diff --git a/docs/app/app.vue b/docs/app/app.vue index d72cd3aa85..8e414a956b 100644 --- a/docs/app/app.vue +++ b/docs/app/app.vue @@ -9,7 +9,9 @@ const appConfig = useAppConfig() const colorMode = useColorMode() const { data: navigation } = await useAsyncData('navigation', () => queryCollectionNavigation('docs', ['framework', 'category', 'description'])) -const { data: files } = useLazyAsyncData('search', () => queryCollectionSearchSections('docs'), { +const { data: files } = useLazyAsyncData('search', () => queryCollectionSearchSections('docs', { + ignoredTags: ['style'] +}), { server: false }) diff --git a/docs/app/composables/useSearch.ts b/docs/app/composables/useSearch.ts index 47dada6c51..4660dd1705 100644 --- a/docs/app/composables/useSearch.ts +++ b/docs/app/composables/useSearch.ts @@ -101,16 +101,21 @@ export function useSearch() { id: 'ai', label: 'AI', ignoreFilter: true, - items: searchTerm.value - ? [{ - label: `Ask AI for “${searchTerm.value}”`, - icon: 'i-lucide-bot', - ui: { - itemLeadingIcon: 'group-data-highlighted:not-group-data-disabled:text-primary' - }, - onSelect - }] - : [] + postFilter: (searchTerm: string, items: any[]) => { + if (!searchTerm) { + return [] + } + + return items + }, + items: [{ + label: 'Ask AI', + icon: 'i-lucide-bot', + ui: { + itemLeadingIcon: 'group-data-highlighted:not-group-data-disabled:text-primary' + }, + onSelect + }] }, { id: 'framework', label: 'Framework', diff --git a/docs/app/error.vue b/docs/app/error.vue index 29f1c9dd10..a2e84c0509 100644 --- a/docs/app/error.vue +++ b/docs/app/error.vue @@ -11,7 +11,9 @@ const appConfig = useAppConfig() const colorMode = useColorMode() const { data: navigation } = await useAsyncData('navigation', () => queryCollectionNavigation('docs', ['framework', 'category', 'description'])) -const { data: files } = useLazyAsyncData('search', () => queryCollectionSearchSections('docs'), { +const { data: files } = useLazyAsyncData('search', () => queryCollectionSearchSections('docs', { + ignoredTags: ['style'] +}), { server: false }) diff --git a/package.json b/package.json index e7d1db1aa0..fb20578f0b 100644 --- a/package.json +++ b/package.json @@ -162,7 +162,6 @@ "vue-component-type-helpers": "^3.1.3" }, "devDependencies": { - "@nuxt/content": "^3.8.0", "@nuxt/eslint-config": "^1.10.0", "@nuxt/module-builder": "^1.0.2", "@nuxt/test-utils": "^3.20.1", @@ -181,6 +180,7 @@ }, "peerDependencies": { "@inertiajs/vue3": "^2.0.7", + "@nuxt/content": "^3.0.0", "joi": "^18.0.0", "superstruct": "^2.0.0", "typescript": "^5.6.3", @@ -193,6 +193,9 @@ "@inertiajs/vue3": { "optional": true }, + "@nuxt/content": { + "optional": true + }, "joi": { "optional": true }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3ff3166ce..78b1aa7f35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,6 +27,9 @@ importers: '@internationalized/number': specifier: ^3.6.5 version: 3.6.5 + '@nuxt/content': + specifier: ^3.0.0 + version: 3.8.0(better-sqlite3@12.4.1)(magicast@0.3.5)(valibot@1.1.0(typescript@5.8.3)) '@nuxt/fonts': specifier: ^0.12.1 version: 0.12.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.3.5)(vite@7.2.2(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)) @@ -175,9 +178,6 @@ importers: specifier: ^3.24.0 || ^4.0.0 version: 4.1.12 devDependencies: - '@nuxt/content': - specifier: ^3.8.0 - version: 3.8.0(better-sqlite3@12.4.1)(magicast@0.3.5)(valibot@1.1.0(typescript@5.8.3)) '@nuxt/eslint-config': specifier: ^1.10.0 version: 1.10.0(@typescript-eslint/utils@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) @@ -1471,8 +1471,8 @@ packages: '@nuxtjs/color-mode@3.5.2': resolution: {integrity: sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA==} - '@nuxtjs/mdc@0.18.1': - resolution: {integrity: sha512-0ZYO4PGZoHjRsn1tbQwUfpqG7uWs58EDiclAmajEf7mdGKvv2hgUsWCpGFGlWGChfcEJ35lqyi/tX7Sopr+sKw==} + '@nuxtjs/mdc@0.18.2': + resolution: {integrity: sha512-pdeWd2/oOPriPVa1F6QNoK4fZCp/b4sxEVoouXJJCETCBIFSNS4OOtdRTY1ATLM1Gr+6ZvNyNPABvaaUEGC4Lw==} '@nuxtjs/plausible@2.0.1': resolution: {integrity: sha512-Edr7oFIeZ9Og2lS21NhC3MRgcR7X9H1Hyjve8EsM2CycJGBlCcGKHs0+vi4KpbCVi33VlTXUUYNRPtGyeUX6Fw==} @@ -8469,7 +8469,7 @@ snapshots: '@nuxt/content@3.8.0(better-sqlite3@12.4.1)(magicast@0.3.5)(valibot@1.1.0(typescript@5.8.3))': dependencies: '@nuxt/kit': 4.2.1(magicast@0.3.5) - '@nuxtjs/mdc': 0.18.1(magicast@0.3.5) + '@nuxtjs/mdc': 0.18.2(magicast@0.3.5) '@shikijs/langs': 3.14.0 '@sqlite.org/sqlite-wasm': 3.50.4-build1 '@standard-schema/spec': 1.0.0 @@ -8530,7 +8530,7 @@ snapshots: '@nuxt/content@3.8.0(better-sqlite3@12.4.1)(magicast@0.5.1)(valibot@1.1.0(typescript@5.8.3))': dependencies: '@nuxt/kit': 4.2.1(magicast@0.5.1) - '@nuxtjs/mdc': 0.18.1(magicast@0.5.1) + '@nuxtjs/mdc': 0.18.2(magicast@0.5.1) '@shikijs/langs': 3.14.0 '@sqlite.org/sqlite-wasm': 3.50.4-build1 '@standard-schema/spec': 1.0.0 @@ -9221,7 +9221,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/mdc@0.18.1(magicast@0.3.5)': + '@nuxtjs/mdc@0.18.2(magicast@0.3.5)': dependencies: '@nuxt/kit': 4.2.1(magicast@0.3.5) '@shikijs/core': 3.14.0 @@ -9270,7 +9270,7 @@ snapshots: - magicast - supports-color - '@nuxtjs/mdc@0.18.1(magicast@0.5.1)': + '@nuxtjs/mdc@0.18.2(magicast@0.5.1)': dependencies: '@nuxt/kit': 4.2.1(magicast@0.5.1) '@shikijs/core': 3.14.0 diff --git a/src/runtime/components/CommandPalette.vue b/src/runtime/components/CommandPalette.vue index 11b16ff5dd..6a9ae362cd 100644 --- a/src/runtime/components/CommandPalette.vue +++ b/src/runtime/components/CommandPalette.vue @@ -199,7 +199,7 @@ export type CommandPaletteSlots = CommandPalett import { computed, ref, useTemplateRef, toRef } from 'vue' import { ListboxRoot, ListboxFilter, ListboxContent, ListboxGroup, ListboxGroupLabel, ListboxVirtualizer, ListboxItem, ListboxItemIndicator, useForwardProps, useForwardPropsEmits } from 'reka-ui' import { defu } from 'defu' -import { reactivePick, createReusableTemplate } from '@vueuse/core' +import { reactivePick, createReusableTemplate, refThrottled } from '@vueuse/core' import { useFuse } from '@vueuse/integrations/useFuse' import { useAppConfig } from '#imports' import { useLocale } from '../composables/useLocale' @@ -290,14 +290,18 @@ const items = computed(() => groups.value?.filter((group) => { const { results: fuseResults } = useFuse(searchTerm, items, fuse) -function getGroupWithItems(group: G, items: (T & { matches?: FuseResult['matches'] })[]) { +const throttledFuseResults = refThrottled(fuseResults, 16, true) + +function processGroupItems(group: G, items: (T & { matches?: FuseResult['matches'] })[]) { + let processedItems = items + if (group?.postFilter && typeof group.postFilter === 'function') { - items = group.postFilter(searchTerm.value, items) + processedItems = group.postFilter(searchTerm.value, processedItems) } return { ...group, - items: items.slice(0, fuse.value.resultLimit).map((item) => { + items: processedItems.slice(0, fuse.value.resultLimit).map((item) => { return { ...item, labelHtml: highlight(item, searchTerm.value, props.labelKey), @@ -308,7 +312,9 @@ function getGroupWithItems(group: G, items: (T & { matches?: FuseResult['matc } const filteredGroups = computed(() => { - const groupsById = fuseResults.value.reduce((acc, result) => { + const currentGroups = groups.value + + const groupsById = throttledFuseResults.value.reduce((acc, result) => { const { item, matches } = result if (!item.group) { return acc @@ -321,19 +327,23 @@ const filteredGroups = computed(() => { }, {} as Record['matches'] })[]>) if (props.preserveGroupOrder) { - const processedGroups: Array> = [] + const processedGroups: Array> = [] - for (const group of groups.value || []) { + for (const group of currentGroups || []) { if (!group.items?.length) { continue } - const items = group.ignoreFilter - ? group.items - : groupsById[group.id] + const items = group.ignoreFilter ? group.items : groupsById[group.id] + if (!items?.length) { + continue + } + + const processedGroup = processGroupItems(group, items) - if (items?.length) { - processedGroups.push(getGroupWithItems(group, items)) + // Filter out groups that become empty after postFilter + if (processedGroup.items?.length) { + processedGroups.push(processedGroup) } } @@ -341,18 +351,25 @@ const filteredGroups = computed(() => { } const fuseGroups = Object.entries(groupsById).map(([id, items]) => { - const group = groups.value?.find(group => group.id === id) + const group = currentGroups?.find(group => group.id === id) if (!group) { return } - return getGroupWithItems(group, items) + const processedGroup = processGroupItems(group, items) + // Filter out groups without items after postFilter + return processedGroup.items?.length ? processedGroup : undefined }).filter(group => !!group) - const nonFuseGroups = groups.value + const nonFuseGroups = currentGroups ?.map((group, index) => ({ ...group, index })) ?.filter(group => group.ignoreFilter && group.items?.length) - ?.map(group => ({ ...getGroupWithItems(group, group.items || []), index: group.index })) || [] + ?.map((group) => { + const processedGroup = processGroupItems(group, group.items || []) + return { ...processedGroup, index: group.index } + }) + // Filter out groups without items after postFilter + ?.filter(group => group.items?.length) || [] return nonFuseGroups.reduce((acc, group) => { acc.splice(group.index, 0, group) @@ -442,9 +459,11 @@ function onSelect(e: Event, item: T) { {{ item.prefix }} - + + {{ get(item, props.labelKey as string) }} - + + {{ item.suffix }} diff --git a/src/runtime/components/content/ContentSearch.vue b/src/runtime/components/content/ContentSearch.vue index 4f754d7cd5..1f6bcd8fdc 100644 --- a/src/runtime/components/content/ContentSearch.vue +++ b/src/runtime/components/content/ContentSearch.vue @@ -128,7 +128,7 @@ const slots = defineSlots() const searchTerm = defineModel('searchTerm', { default: '' }) const { t } = useLocale() -const { open } = useContentSearch() +const { open, mapNavigationItems, postFilter } = useContentSearch() // eslint-disable-next-line vue/no-dupe-keys const colorMode = useColorMode() const appConfig = useAppConfig() as ContentSearch['AppConfig'] @@ -142,7 +142,7 @@ const fuse = computed(() => defu({}, props.fuse, { fuseOptions: { includeMatches: true } -})) +} as UseFuseOptions)) const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.contentSearch || {}) })({ fullscreen: props.fullscreen @@ -150,12 +150,17 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.contentSearc const commandPaletteRef = useTemplateRef('commandPaletteRef') -function mapLinksItems(links: T[]): ContentSearchItem[] { - return links.flatMap(link => [{ +const mappedLinksItems = computed(() => { + if (!props.links?.length) { + return [] + } + + return props.links.flatMap(link => [{ ...link, suffix: link.description, description: undefined, - icon: link.icon || appConfig.ui.icons.file + icon: link.icon || appConfig.ui.icons.file, + children: undefined }, ...(link.children?.map(child => ({ ...child, prefix: link.label + ' >', @@ -163,89 +168,76 @@ function mapLinksItems(links: T[]): ContentSearchItem[] { description: undefined, icon: child.icon || link.icon || appConfig.ui.icons.file })) || [])]) -} +}) -function mapNavigationItems(children: ContentNavigationItem[], parent?: ContentNavigationItem): ContentSearchItem[] { - return children.flatMap((link) => { - if (link.children?.length) { - return mapNavigationItems(link.children, link) - } +const mappedNavigationGroups = computed(() => { + if (!props.navigation?.length) { + return [] + } - return props.files?.filter(file => file.id === link.path || file.id.startsWith(`${link.path}#`))?.map(file => mapFile(file, link, parent)) || [] - }) -} + if (props.navigation.some(link => !!link.children?.length)) { + return props.navigation.map(group => ({ + id: group.path, + label: group.title, + items: mapNavigationItems(group.children || [], props.files || []), + postFilter + })) + } else { + return [{ id: 'docs', items: mapNavigationItems(props.navigation, props.files || []), postFilter }] + } +}) -function mapFile(file: ContentSearchFile, link: ContentNavigationItem, parent?: ContentNavigationItem): ContentSearchItem { - const prefix = [...new Set([parent?.title, ...file.titles].filter(Boolean))] +const themeGroup = computed(() => { + if (!props.colorMode || colorMode?.forced) { + return null + } return { - prefix: prefix?.length ? (prefix.join(' > ') + ' >') : undefined, - label: file.id === link.path ? link.title : file.title, - suffix: file.content.replaceAll('<', '<').replaceAll('>', '>'), - to: file.id, - icon: (link.icon || parent?.icon || (file.level > 1 ? appConfig.ui.icons.hash : appConfig.ui.icons.file)) as string, - level: file.level + id: 'theme', + label: t('contentSearch.theme'), + items: [{ + label: t('colorMode.system'), + icon: appConfig.ui.icons.system, + active: colorMode.preference === 'system', + onSelect: () => { + colorMode.preference = 'system' + } + }, { + label: t('colorMode.light'), + icon: appConfig.ui.icons.light, + active: colorMode.preference === 'light', + onSelect: () => { + colorMode.preference = 'light' + } + }, { + label: t('colorMode.dark'), + icon: appConfig.ui.icons.dark, + active: colorMode.preference === 'dark', + onSelect: () => { + colorMode.preference = 'dark' + } + }] } -} +}) const groups = computed(() => { const groups = [] - if (props.links?.length) { - groups.push({ id: 'links', label: t('contentSearch.links'), items: mapLinksItems(props.links) }) + if (mappedLinksItems.value.length) { + groups.push({ id: 'links', label: t('contentSearch.links'), items: mappedLinksItems.value }) } - if (props.navigation?.length) { - if (props.navigation.some(link => !!link.children?.length)) { - groups.push(...props.navigation.map(group => ({ id: group.path, label: group.title, items: mapNavigationItems(group.children || []), postFilter }))) - } else { - groups.push({ id: 'docs', items: mapNavigationItems(props.navigation), postFilter }) - } - } + groups.push(...mappedNavigationGroups.value) groups.push(...(props.groups || [])) - if (props.colorMode && !colorMode?.forced) { - groups.push({ - id: 'theme', - label: t('contentSearch.theme'), - items: [{ - label: t('colorMode.system'), - icon: appConfig.ui.icons.system, - active: colorMode.preference === 'system', - onSelect: () => { - colorMode.preference = 'system' - } - }, { - label: t('colorMode.light'), - icon: appConfig.ui.icons.light, - active: colorMode.preference === 'light', - onSelect: () => { - colorMode.preference = 'light' - } - }, { - label: t('colorMode.dark'), - icon: appConfig.ui.icons.dark, - active: colorMode.preference === 'dark', - onSelect: () => { - colorMode.preference = 'dark' - } - }] - }) + if (themeGroup.value) { + groups.push(themeGroup.value) } return groups }) -function postFilter(query: string, items: ContentSearchItem[]) { - // Filter only first level items if no query - if (!query) { - return items?.filter(item => item.level === 1) - } - - return items -} - function onSelect(item: ContentSearchItem) { if (item.disabled) { return diff --git a/src/runtime/composables/useContentSearch.ts b/src/runtime/composables/useContentSearch.ts index 64e2686e85..8ea6ccfe7b 100644 --- a/src/runtime/composables/useContentSearch.ts +++ b/src/runtime/composables/useContentSearch.ts @@ -1,11 +1,67 @@ import { ref } from 'vue' +import type { ContentNavigationItem } from '@nuxt/content' import { createSharedComposable } from '@vueuse/core' +import { useAppConfig } from '#imports' +import type { ContentSearchFile, ContentSearchItem } from '../components/content/ContentSearch.vue' function _useContentSearch() { const open = ref(false) + const appConfig = useAppConfig() + + /** + * Map a file to a ContentSearchItem + */ + function mapFile( + file: ContentSearchFile, + link: ContentNavigationItem, + parent?: ContentNavigationItem + ): ContentSearchItem { + const prefix = [...new Set([parent?.title, ...file.titles].filter(Boolean))] + + return { + prefix: prefix?.length ? (prefix.join(' > ') + ' >') : undefined, + label: file.id === link.path ? link.title : file.title, + suffix: file.content.replaceAll('<', '<').replaceAll('>', '>'), + to: file.id, + icon: (link.icon || parent?.icon || (file.level > 1 ? appConfig.ui.icons.hash : appConfig.ui.icons.file)) as string, + level: file.level + } + } + + /** + * Map navigation items to ContentSearchItems + */ + function mapNavigationItems( + children: ContentNavigationItem[], + files: ContentSearchFile[], + parent?: ContentNavigationItem + ): ContentSearchItem[] { + return children.flatMap((link) => { + if (link.children?.length) { + return mapNavigationItems(link.children, files, link) + } + + return files + ?.filter(file => file.id === link.path || file.id.startsWith(`${link.path}#`)) + ?.map(file => mapFile(file, link, parent)) || [] + }) + } + + /** + * Post-filter function to filter only first level items when no query + */ + function postFilter(query: string, items: ContentSearchItem[]): ContentSearchItem[] { + if (!query) { + return items?.filter(item => item.level === 1) + } + return items + } return { - open + open, + mapFile, + mapNavigationItems, + postFilter } } diff --git a/src/runtime/types/index.ts b/src/runtime/types/index.ts index 8dc0924ce2..315aa2a720 100644 --- a/src/runtime/types/index.ts +++ b/src/runtime/types/index.ts @@ -108,6 +108,8 @@ export * from '../components/color-mode/ColorModeImage.vue' export * from '../components/color-mode/ColorModeSelect.vue' export * from '../components/color-mode/ColorModeSwitch.vue' export * from '../components/locale/LocaleSelect.vue' +export * from './content' export * from './form' export * from './locale' +export * from './prose' export * from './tv' diff --git a/test/components/__snapshots__/CommandPalette-vue.spec.ts.snap b/test/components/__snapshots__/CommandPalette-vue.spec.ts.snap index 8342709227..50a37f6133 100644 --- a/test/components/__snapshots__/CommandPalette-vue.spec.ts.snap +++ b/test/components/__snapshots__/CommandPalette-vue.spec.ts.snap @@ -24,18 +24,22 @@ exports[`CommandPalette > renders with as correctly 1`] = `
Labels
@@ -70,18 +74,22 @@ exports[`CommandPalette > renders with childrenIcon correctly 1`] = `
Labels
@@ -116,18 +124,22 @@ exports[`CommandPalette > renders with class correctly 1`] = `
Labels
@@ -160,18 +172,22 @@ exports[`CommandPalette > renders with close correctly 1`] = `
Labels
@@ -204,18 +220,22 @@ exports[`CommandPalette > renders with close slot correctly 1`] = `
Labels
@@ -248,18 +268,22 @@ exports[`CommandPalette > renders with closeIcon correctly 1`] = `
Labels
@@ -291,18 +315,22 @@ exports[`CommandPalette > renders with custom slot correctly 1`] = `
Labels
@@ -337,18 +365,22 @@ exports[`CommandPalette > renders with defaultValue correctly 1`] = `
Labels
@@ -367,16 +399,23 @@ exports[`CommandPalette > renders with descriptionKey correctly 1`] = `
@@ -409,18 +448,22 @@ exports[`CommandPalette > renders with disabled correctly 1`] = `
Labels
@@ -455,18 +498,22 @@ exports[`CommandPalette > renders with empty slot correctly 1`] = `
Labels
@@ -501,18 +548,22 @@ exports[`CommandPalette > renders with footer slot correctly 1`] = `
Labels
@@ -547,18 +598,22 @@ exports[`CommandPalette > renders with groups correctly 1`] = `
Labels
@@ -577,16 +632,23 @@ exports[`CommandPalette > renders with groups with description correctly 1`] = `
@@ -619,18 +681,22 @@ exports[`CommandPalette > renders with icon correctly 1`] = `
Labels
@@ -675,16 +741,23 @@ exports[`CommandPalette > renders with item-description slot correctly 1`] = `
@@ -762,16 +835,20 @@ exports[`CommandPalette > renders with item-leading slot correctly 1`] = `
-
Labels
@@ -803,18 +880,22 @@ exports[`CommandPalette > renders with item-trailing slot correctly 1`] = `
Labels
@@ -895,18 +976,22 @@ exports[`CommandPalette > renders with loading correctly 1`] = `
Labels
@@ -941,18 +1026,22 @@ exports[`CommandPalette > renders with loadingIcon correctly 1`] = `
Labels
@@ -987,18 +1076,22 @@ exports[`CommandPalette > renders with modelValue correctly 1`] = `
Labels
@@ -1033,18 +1126,22 @@ exports[`CommandPalette > renders with placeholder correctly 1`] = `
Labels
@@ -1073,7 +1170,8 @@ exports[`CommandPalette > renders with searchTerm and preserveGroupOrder correct
Labels
@@ -1093,7 +1191,8 @@ exports[`CommandPalette > renders with searchTerm correctly 1`] = `
Labels
@@ -1181,18 +1284,22 @@ exports[`CommandPalette > renders with trailingIcon correctly 1`] = `
Labels
@@ -1227,18 +1334,22 @@ exports[`CommandPalette > renders with ui correctly 1`] = `
Labels
diff --git a/test/components/__snapshots__/CommandPalette.spec.ts.snap b/test/components/__snapshots__/CommandPalette.spec.ts.snap index c5aac09fa5..7b5964278b 100644 --- a/test/components/__snapshots__/CommandPalette.spec.ts.snap +++ b/test/components/__snapshots__/CommandPalette.spec.ts.snap @@ -24,18 +24,22 @@ exports[`CommandPalette > renders with as correctly 1`] = `
Labels
@@ -70,18 +74,22 @@ exports[`CommandPalette > renders with childrenIcon correctly 1`] = `
Labels
@@ -116,18 +124,22 @@ exports[`CommandPalette > renders with class correctly 1`] = `
Labels
@@ -163,18 +175,22 @@ exports[`CommandPalette > renders with close correctly 1`] = `
Labels
@@ -207,18 +223,22 @@ exports[`CommandPalette > renders with close slot correctly 1`] = `
Labels
@@ -254,18 +274,22 @@ exports[`CommandPalette > renders with closeIcon correctly 1`] = `
Labels
@@ -297,18 +321,22 @@ exports[`CommandPalette > renders with custom slot correctly 1`] = `
Labels
@@ -343,18 +371,22 @@ exports[`CommandPalette > renders with defaultValue correctly 1`] = `
Labels
@@ -373,16 +405,23 @@ exports[`CommandPalette > renders with descriptionKey correctly 1`] = `
@@ -415,18 +454,22 @@ exports[`CommandPalette > renders with disabled correctly 1`] = `
Labels
@@ -461,18 +504,22 @@ exports[`CommandPalette > renders with empty slot correctly 1`] = `
Labels
@@ -507,18 +554,22 @@ exports[`CommandPalette > renders with footer slot correctly 1`] = `
Labels
@@ -553,18 +604,22 @@ exports[`CommandPalette > renders with groups correctly 1`] = `
Labels
@@ -583,16 +638,23 @@ exports[`CommandPalette > renders with groups with description correctly 1`] = `
@@ -625,18 +687,22 @@ exports[`CommandPalette > renders with icon correctly 1`] = `
Labels
@@ -681,16 +747,23 @@ exports[`CommandPalette > renders with item-description slot correctly 1`] = `
@@ -768,16 +841,20 @@ exports[`CommandPalette > renders with item-leading slot correctly 1`] = `
-
Labels
@@ -809,18 +886,22 @@ exports[`CommandPalette > renders with item-trailing slot correctly 1`] = `
Labels
@@ -901,18 +982,22 @@ exports[`CommandPalette > renders with loading correctly 1`] = `
Labels
@@ -947,18 +1032,22 @@ exports[`CommandPalette > renders with loadingIcon correctly 1`] = `
Labels
@@ -993,18 +1082,22 @@ exports[`CommandPalette > renders with modelValue correctly 1`] = `
Labels
@@ -1039,18 +1132,22 @@ exports[`CommandPalette > renders with placeholder correctly 1`] = `
Labels
@@ -1079,7 +1176,8 @@ exports[`CommandPalette > renders with searchTerm and preserveGroupOrder correct
Labels
@@ -1099,7 +1197,8 @@ exports[`CommandPalette > renders with searchTerm correctly 1`] = `
Labels
@@ -1187,18 +1290,22 @@ exports[`CommandPalette > renders with trailingIcon correctly 1`] = `
Labels
@@ -1233,18 +1340,22 @@ exports[`CommandPalette > renders with ui correctly 1`] = `
Labels
diff --git a/test/components/__snapshots__/DashboardSearch-vue.spec.ts.snap b/test/components/__snapshots__/DashboardSearch-vue.spec.ts.snap index 42c10b55b2..81edbf935d 100644 --- a/test/components/__snapshots__/DashboardSearch-vue.spec.ts.snap +++ b/test/components/__snapshots__/DashboardSearch-vue.spec.ts.snap @@ -14,16 +14,20 @@ exports[`DashboardSearch > renders with class correctly 1`] = `