From 3688bef4d5e3c35fbc5ff267eef0174071081f55 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Thu, 8 Jan 2026 14:11:08 +0000 Subject: [PATCH 1/4] De-deplicate items in command palette categories --- resources/js/components/command-palette/CommandPalette.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/command-palette/CommandPalette.vue b/resources/js/components/command-palette/CommandPalette.vue index 55e368afe9e..d6b38f22360 100644 --- a/resources/js/components/command-palette/CommandPalette.vue +++ b/resources/js/components/command-palette/CommandPalette.vue @@ -102,7 +102,7 @@ const results = computed(() => { .map(category => { return { text: __(category), - items: grouped[category], + items: uniq(grouped[category]), }; }) .filter(category => category.items); From 898abdf7ac7404bbfef02de306caa0fd18787260 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Thu, 8 Jan 2026 14:22:44 +0000 Subject: [PATCH 2/4] unique by url instead --- resources/js/components/command-palette/CommandPalette.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/js/components/command-palette/CommandPalette.vue b/resources/js/components/command-palette/CommandPalette.vue index d6b38f22360..89ef8dfc41c 100644 --- a/resources/js/components/command-palette/CommandPalette.vue +++ b/resources/js/components/command-palette/CommandPalette.vue @@ -7,7 +7,7 @@ import debounce from '@/util/debounce'; import { DialogContent, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, DialogDescription, VisuallyHidden } from 'reka-ui'; import { ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxLabel, ComboboxInput, ComboboxItem, ComboboxRoot, ComboboxViewport } from 'reka-ui'; import fuzzysort from 'fuzzysort'; -import { each, groupBy, orderBy, find, uniq } from 'lodash-es'; +import { each, groupBy, orderBy, find, uniq, uniqBy } from 'lodash-es'; import { motion } from 'motion-v'; import { cva } from 'cva'; import { Icon, Subheading } from '@/components/ui'; @@ -102,7 +102,7 @@ const results = computed(() => { .map(category => { return { text: __(category), - items: uniq(grouped[category]), + items: uniqBy(grouped[category], 'url'), }; }) .filter(category => category.items); From 6c2a58f972c48ccd678728a20014676051acadf9 Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Thu, 8 Jan 2026 16:24:34 +0000 Subject: [PATCH 3/4] clone items before adding them to the `recentItems` array --- .../js/components/command-palette/CommandPalette.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/js/components/command-palette/CommandPalette.vue b/resources/js/components/command-palette/CommandPalette.vue index 89ef8dfc41c..89c3782a472 100644 --- a/resources/js/components/command-palette/CommandPalette.vue +++ b/resources/js/components/command-palette/CommandPalette.vue @@ -7,7 +7,7 @@ import debounce from '@/util/debounce'; import { DialogContent, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, DialogDescription, VisuallyHidden } from 'reka-ui'; import { ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxLabel, ComboboxInput, ComboboxItem, ComboboxRoot, ComboboxViewport } from 'reka-ui'; import fuzzysort from 'fuzzysort'; -import { each, groupBy, orderBy, find, uniq, uniqBy } from 'lodash-es'; +import { each, groupBy, orderBy, find, uniq } from 'lodash-es'; import { motion } from 'motion-v'; import { cva } from 'cva'; import { Icon, Subheading } from '@/components/ui'; @@ -102,7 +102,7 @@ const results = computed(() => { .map(category => { return { text: __(category), - items: uniqBy(grouped[category], 'url'), + items: grouped[category], }; }) .filter(category => category.items); @@ -224,10 +224,10 @@ function getRecentItems() { } function addToRecentItems(item) { - item.category = __('Recent'); + const recentItem = { ...item, category: __('Recent') }; const filtered = getRecentItems().filter(recentItem => recentItem.text !== item.text); - const updated = [item, ...filtered].slice(0, 5); + const updated = [recentItem, ...filtered].slice(0, 5); localStorage.setItem('statamic.command-palette.recent', JSON.stringify(updated)); From 796b5777cd3e2834f0130695813319b2641c1ddd Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Mon, 12 Jan 2026 14:18:57 -0500 Subject: [PATCH 4/4] tab? --- resources/js/components/command-palette/CommandPalette.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/command-palette/CommandPalette.vue b/resources/js/components/command-palette/CommandPalette.vue index 89c3782a472..4d9478a2c85 100644 --- a/resources/js/components/command-palette/CommandPalette.vue +++ b/resources/js/components/command-palette/CommandPalette.vue @@ -102,7 +102,7 @@ const results = computed(() => { .map(category => { return { text: __(category), - items: grouped[category], + items: grouped[category], }; }) .filter(category => category.items);