diff --git a/frontend/package.json b/frontend/package.json index e02a8eb..8fa7393 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,6 +23,7 @@ "@milkdown/vue": "^7.22.0", "@vueuse/core": "^14.0.0", "codemirror": "^6.0.0", + "dompurify": "^3.4.14", "marked": "^15.0.0", "pinia": "^4.0.0", "vue": "^3.5.0", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index fa6908b..87bc7a4 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: codemirror: specifier: ^6.0.0 version: 6.0.2 + dompurify: + specifier: ^3.4.14 + version: 3.4.14 marked: specifier: ^15.0.0 version: 15.0.12 @@ -829,11 +832,6 @@ packages: '@volar/typescript@2.4.15': resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true '@vue-macros/common@3.1.4': resolution: {integrity: sha512-/5Fv+6DgIcM9ajY05ZmKBv+LMX1M9A0X+IUwDRVdt67ciw8OV9bvG2r34p3RiEadlsQybjhKPRKNXDC8Bp23cw==} @@ -2608,13 +2606,11 @@ snapshots: '@volar/source-map@2.4.15': {} - '@volar/typescript@2.4.15(typescript@5.9.3)': + '@volar/typescript@2.4.15': dependencies: '@volar/language-core': 2.4.15 path-browserify: 1.0.1 vscode-uri: 3.2.0 - optionalDependencies: - typescript: 5.9.3 '@vue-macros/common@3.1.4(vue@3.5.41(typescript@5.9.3))': dependencies: @@ -3652,7 +3648,7 @@ snapshots: vue-tsc@2.2.12(typescript@5.9.3): dependencies: - '@volar/typescript': 2.4.15(typescript@5.9.3) + '@volar/typescript': 2.4.15 '@vue/language-core': 2.2.12(typescript@5.9.3) typescript: 5.9.3 diff --git a/frontend/src/components/common/AppShell.vue b/frontend/src/components/common/AppShell.vue index d6ef9a7..fe7c007 100644 --- a/frontend/src/components/common/AppShell.vue +++ b/frontend/src/components/common/AppShell.vue @@ -1,15 +1,15 @@ + + + + diff --git a/frontend/src/components/common/ExtensionListPanel.vue b/frontend/src/components/common/ExtensionListPanel.vue new file mode 100644 index 0000000..bb18ca0 --- /dev/null +++ b/frontend/src/components/common/ExtensionListPanel.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/frontend/src/components/common/PrimarySidebar.vue b/frontend/src/components/common/PrimarySidebar.vue index e5d0047..8a24394 100644 --- a/frontend/src/components/common/PrimarySidebar.vue +++ b/frontend/src/components/common/PrimarySidebar.vue @@ -1,9 +1,10 @@ @@ -62,6 +67,11 @@ function navigate(name: string) { z-index: var(--z-sidebar); } +.primary-sidebar.expanded { width: var(--sidebar-primary-width-expanded); } +.primary-sidebar.expanded .nav-item { flex-direction: row; justify-content: flex-start; gap: var(--space-md); padding: 0 var(--space-lg); } +.primary-sidebar.expanded .nav-icon { margin-bottom: 0; } +.primary-sidebar.expanded .nav-label { font-size: var(--font-size-sm); } + .nav-list { flex: 1; padding: var(--space-sm) 0; @@ -121,4 +131,6 @@ function navigate(name: string) { padding: var(--space-sm) 0; border-top: 1px solid var(--color-border-subtle); } + +.collapse-button { width: calc(100% - 8px); } diff --git a/frontend/src/components/common/SecondarySidebar.vue b/frontend/src/components/common/SecondarySidebar.vue index 34c8a1b..1c51e1f 100644 --- a/frontend/src/components/common/SecondarySidebar.vue +++ b/frontend/src/components/common/SecondarySidebar.vue @@ -27,7 +27,7 @@ const sidebarTitle = computed(() => { return titles[props.component || ''] || '' }) -const showSkillToggle = computed(() => routeName === 'skills' || routeName === 'plugins') +const showSkillToggle = computed(() => routeName.value === 'skills' || routeName.value === 'plugins')