From 7cc0091d3c8422a13786f5cb650d9938a7a507dd Mon Sep 17 00:00:00 2001 From: Jay George Date: Mon, 24 Nov 2025 16:21:01 +0000 Subject: [PATCH 01/54] bump up "subtle" button opacity slightly based the "x" controls on tables feeling a bit too faint --- resources/js/components/ui/Button/Button.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/ui/Button/Button.vue b/resources/js/components/ui/Button/Button.vue index 88403daf04..27998a7d96 100644 --- a/resources/js/components/ui/Button/Button.vue +++ b/resources/js/components/ui/Button/Button.vue @@ -48,7 +48,7 @@ const buttonClasses = computed(() => { filled: 'bg-black/5 hover:bg-black/10 hover:text-gray-900 dark:hover:text-white dark:bg-white/15 dark:hover:bg-white/20 [&_svg]:opacity-70', ghost: 'bg-transparent hover:bg-gray-400/10 text-gray-900 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200', 'ghost-pressed': 'bg-transparent hover:bg-gray-400/10 text-black dark:text-white dark:hover:bg-white/7 dark:hover:text-white [&_svg]:opacity-100', - subtle: 'bg-transparent hover:bg-gray-400/10 text-gray-500 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200 [&_svg]:opacity-35', + subtle: 'bg-transparent hover:bg-gray-400/10 text-gray-500 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200 [&_svg]:opacity-45', pressed: [ 'bg-linear-to-b from-gray-200 to-gray-150 text-gray-900 border border-gray-300 inset-shadow-sm/10', 'dark:from-black dark:to-black dark:text-white dark:border-gray-700/80', From 5049d986f16f566181f63012b1dd889e8bb26a8a Mon Sep 17 00:00:00 2001 From: Jay George Date: Mon, 24 Nov 2025 16:22:19 +0000 Subject: [PATCH 02/54] Start adding red delete controls --- resources/css/components/fieldtypes/table.css | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/resources/css/components/fieldtypes/table.css b/resources/css/components/fieldtypes/table.css index dfd6ea3be7..7ba47d0ad8 100644 --- a/resources/css/components/fieldtypes/table.css +++ b/resources/css/components/fieldtypes/table.css @@ -134,6 +134,23 @@ Table Fieldtype @apply outline-hidden ring-0; } } + /* Red delete controls */ + &:has([aria-label*="Delete"]) { + &:focus-within { + @apply bg-red-500/5; + svg { + @apply text-red-500 opacity-100; + } + } + &:hover { + button { + @apply bg-red-500/5; + } + svg { + @apply text-red-500 opacity-100; + } + } + } } } From 020e5ae79bd36cdd47976101278a4c06ba568d65 Mon Sep 17 00:00:00 2001 From: Jay George Date: Mon, 24 Nov 2025 17:33:30 +0000 Subject: [PATCH 03/54] Add some default "red button states" for subtle buttons that have a delete control --- resources/js/components/ui/Button/Button.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/ui/Button/Button.vue b/resources/js/components/ui/Button/Button.vue index 27998a7d96..a13748f594 100644 --- a/resources/js/components/ui/Button/Button.vue +++ b/resources/js/components/ui/Button/Button.vue @@ -48,7 +48,7 @@ const buttonClasses = computed(() => { filled: 'bg-black/5 hover:bg-black/10 hover:text-gray-900 dark:hover:text-white dark:bg-white/15 dark:hover:bg-white/20 [&_svg]:opacity-70', ghost: 'bg-transparent hover:bg-gray-400/10 text-gray-900 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200', 'ghost-pressed': 'bg-transparent hover:bg-gray-400/10 text-black dark:text-white dark:hover:bg-white/7 dark:hover:text-white [&_svg]:opacity-100', - subtle: 'bg-transparent hover:bg-gray-400/10 text-gray-500 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200 [&_svg]:opacity-45', + subtle: 'bg-transparent hover:bg-gray-400/10 text-gray-500 hover:text-gray-700 [&[aria-label*="Delete"]]:hover:bg-red-500/5 [&[aria-label*="Delete"]]:hover:[&_svg]:text-red-500 [&[aria-label*="Delete"]]:hover:[&_svg]:opacity-100 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200', pressed: [ 'bg-linear-to-b from-gray-200 to-gray-150 text-gray-900 border border-gray-300 inset-shadow-sm/10', 'dark:from-black dark:to-black dark:text-white dark:border-gray-700/80', From c6ba989aaf5eff19d79980b4947f12425312f86b Mon Sep 17 00:00:00 2001 From: Jay George Date: Mon, 24 Nov 2025 17:33:52 +0000 Subject: [PATCH 04/54] Adding red delete controls for the table fieldtype --- resources/css/components/fieldtypes/table.css | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/resources/css/components/fieldtypes/table.css b/resources/css/components/fieldtypes/table.css index 7ba47d0ad8..50405383a0 100644 --- a/resources/css/components/fieldtypes/table.css +++ b/resources/css/components/fieldtypes/table.css @@ -1,7 +1,5 @@ -/* ========================================================================== -Table Fieldtype -========================================================================== */ - +/* TABLE FIELDTYPE +=================================================== */ .table-contained { @apply relative mb-4 w-full rounded-lg border text-gray shadow-ui-sm outline-hidden dark:border-gray-700 dark:text-dark-150 text-start; border-collapse: separate; @@ -134,21 +132,16 @@ Table Fieldtype @apply outline-hidden ring-0; } } - /* Red delete controls */ - &:has([aria-label*="Delete"]) { - &:focus-within { - @apply bg-red-500/5; - svg { - @apply text-red-500 opacity-100; - } - } - &:hover { - button { - @apply bg-red-500/5; - } - svg { - @apply text-red-500 opacity-100; - } + } + + /* TABLE FIELDTYPE / RED DELETE CONTROLS (RED) + =================================================== */ + th, + .row-controls { + &:has([aria-label*="Delete"]):focus-within { + @apply bg-red-500/5; + svg { + @apply text-red-500 opacity-100; } } } From 991726281459966eaba68bb219f2c1b4d3c4470d Mon Sep 17 00:00:00 2001 From: Jay George Date: Tue, 25 Nov 2025 10:35:05 +0000 Subject: [PATCH 05/54] Finish adding red delete controls for the table fieldtype --- resources/css/components/fieldtypes/table.css | 5 +++-- resources/js/components/ui/Button/Button.vue | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/resources/css/components/fieldtypes/table.css b/resources/css/components/fieldtypes/table.css index 50405383a0..02adbee773 100644 --- a/resources/css/components/fieldtypes/table.css +++ b/resources/css/components/fieldtypes/table.css @@ -129,7 +129,7 @@ &:focus-within { @apply bg-gray-100 dark:bg-gray-700; button { - @apply outline-hidden ring-0; + @apply ring-0; } } } @@ -139,7 +139,8 @@ th, .row-controls { &:has([aria-label*="Delete"]):focus-within { - @apply bg-red-500/5; + --focus-outline-color: var(--color-red-500); + @apply bg-red-500/6; svg { @apply text-red-500 opacity-100; } diff --git a/resources/js/components/ui/Button/Button.vue b/resources/js/components/ui/Button/Button.vue index a13748f594..8b90e836a9 100644 --- a/resources/js/components/ui/Button/Button.vue +++ b/resources/js/components/ui/Button/Button.vue @@ -48,7 +48,7 @@ const buttonClasses = computed(() => { filled: 'bg-black/5 hover:bg-black/10 hover:text-gray-900 dark:hover:text-white dark:bg-white/15 dark:hover:bg-white/20 [&_svg]:opacity-70', ghost: 'bg-transparent hover:bg-gray-400/10 text-gray-900 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200', 'ghost-pressed': 'bg-transparent hover:bg-gray-400/10 text-black dark:text-white dark:hover:bg-white/7 dark:hover:text-white [&_svg]:opacity-100', - subtle: 'bg-transparent hover:bg-gray-400/10 text-gray-500 hover:text-gray-700 [&[aria-label*="Delete"]]:hover:bg-red-500/5 [&[aria-label*="Delete"]]:hover:[&_svg]:text-red-500 [&[aria-label*="Delete"]]:hover:[&_svg]:opacity-100 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200', + subtle: 'bg-transparent hover:bg-gray-400/10 text-gray-500 hover:text-gray-700 [&[aria-label*="Delete"]]:hover:bg-red-500/6 [&[aria-label*="Delete"]]:hover:[&_svg]:text-red-500 [&[aria-label*="Delete"]]:hover:[&_svg]:opacity-100 dark:text-gray-300 dark:hover:bg-white/7 dark:hover:text-gray-200', pressed: [ 'bg-linear-to-b from-gray-200 to-gray-150 text-gray-900 border border-gray-300 inset-shadow-sm/10', 'dark:from-black dark:to-black dark:text-white dark:border-gray-700/80', From 401283b6a378162522264c9473d1ed86532a10d4 Mon Sep 17 00:00:00 2001 From: Jay George Date: Tue, 25 Nov 2025 10:35:29 +0000 Subject: [PATCH 06/54] Add red delete controls for combobox tags fieldtype --- resources/css/elements/base.css | 7 +++++++ resources/js/components/ui/Combobox.vue | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/resources/css/elements/base.css b/resources/css/elements/base.css index 2a0f54caf9..d11d962179 100644 --- a/resources/css/elements/base.css +++ b/resources/css/elements/base.css @@ -61,6 +61,13 @@ /* To effectively hide border radius clash with focus state */ --focus-outline-offset: -1.85px; } + + /* Delete buttons */ + /* e.g. Tags fieldtype, deleting tags */ + button[aria-label*="Deselect"]:focus { + --focus-outline-color: var(--color-red-500); + --focus-outline-offset: 5px; + } } /* Use a utility layer only when we need higher specificity */ diff --git a/resources/js/components/ui/Combobox.vue b/resources/js/components/ui/Combobox.vue index 59c10218f7..4fb740a70c 100644 --- a/resources/js/components/ui/Combobox.vue +++ b/resources/js/components/ui/Combobox.vue @@ -486,7 +486,12 @@ defineExpose({ diff --git a/resources/js/components/fieldtypes/bard/Image.vue b/resources/js/components/fieldtypes/bard/Image.vue index 05c7c26825..cc7bc583f2 100644 --- a/resources/js/components/fieldtypes/bard/Image.vue +++ b/resources/js/components/fieldtypes/bard/Image.vue @@ -19,7 +19,7 @@ diff --git a/resources/js/components/fieldtypes/ColorFieldtype.vue b/resources/js/components/fieldtypes/ColorFieldtype.vue index c6555e04c2..3fc59c2bd3 100644 --- a/resources/js/components/fieldtypes/ColorFieldtype.vue +++ b/resources/js/components/fieldtypes/ColorFieldtype.vue @@ -69,7 +69,7 @@ /> - + diff --git a/resources/js/components/fieldtypes/FilesFieldtype.vue b/resources/js/components/fieldtypes/FilesFieldtype.vue index b8b0c17e33..62c5d46a92 100644 --- a/resources/js/components/fieldtypes/FilesFieldtype.vue +++ b/resources/js/components/fieldtypes/FilesFieldtype.vue @@ -62,6 +62,7 @@ variant="ghost" :aria-label="__('Remove Asset')" :title="__('Remove')" + delete-action /> diff --git a/resources/js/components/fieldtypes/ListFieldtype.vue b/resources/js/components/fieldtypes/ListFieldtype.vue index bc1fb9ca3d..399fc48ebb 100644 --- a/resources/js/components/fieldtypes/ListFieldtype.vue +++ b/resources/js/components/fieldtypes/ListFieldtype.vue @@ -36,6 +36,7 @@ @click="deleteValue(index)" class="inline text-lg antialiased opacity-25 hover:opacity-75 cursor-pointer" :aria-label="__('Delete Value')" + data-delete-action > × diff --git a/resources/js/components/fieldtypes/assets/AssetRow.vue b/resources/js/components/fieldtypes/assets/AssetRow.vue index 301fbc0416..306fc10344 100644 --- a/resources/js/components/fieldtypes/assets/AssetRow.vue +++ b/resources/js/components/fieldtypes/assets/AssetRow.vue @@ -49,6 +49,7 @@ variant="ghost" :aria-label="__('Remove Asset')" :title="__('Remove')" + delete-action /> diff --git a/resources/js/components/field-validation/Builder.vue b/resources/js/components/field-validation/Builder.vue index bf21ea3e83..a197e9e4cf 100644 --- a/resources/js/components/field-validation/Builder.vue +++ b/resources/js/components/field-validation/Builder.vue @@ -78,7 +78,7 @@ class="opacity-75 hover:opacity-100 cursor-pointer" :aria-label="__('Remove Validation Rule')" @click="remove(rule)" - data-delete-action + data-destructive > × diff --git a/resources/js/components/fieldtypes/ColorFieldtype.vue b/resources/js/components/fieldtypes/ColorFieldtype.vue index 3fc59c2bd3..4be5901a13 100644 --- a/resources/js/components/fieldtypes/ColorFieldtype.vue +++ b/resources/js/components/fieldtypes/ColorFieldtype.vue @@ -69,7 +69,7 @@ /> - + diff --git a/resources/js/components/fieldtypes/DictionaryFieldtype.vue b/resources/js/components/fieldtypes/DictionaryFieldtype.vue index 0920a3efd2..589556e88c 100644 --- a/resources/js/components/fieldtypes/DictionaryFieldtype.vue +++ b/resources/js/components/fieldtypes/DictionaryFieldtype.vue @@ -43,7 +43,7 @@ type="button" class="-mx-3 cursor-pointer px-3 text-gray-400 hover:text-gray-700" :aria-label="__('Deselect option')" - data-delete-action + data-destructive @click="deselect(option.value)" > × diff --git a/resources/js/components/fieldtypes/FilesFieldtype.vue b/resources/js/components/fieldtypes/FilesFieldtype.vue index 62c5d46a92..0645b5da6e 100644 --- a/resources/js/components/fieldtypes/FilesFieldtype.vue +++ b/resources/js/components/fieldtypes/FilesFieldtype.vue @@ -62,7 +62,7 @@ variant="ghost" :aria-label="__('Remove Asset')" :title="__('Remove')" - delete-action + destructive /> diff --git a/resources/js/components/fieldtypes/ListFieldtype.vue b/resources/js/components/fieldtypes/ListFieldtype.vue index 399fc48ebb..9eeacd1725 100644 --- a/resources/js/components/fieldtypes/ListFieldtype.vue +++ b/resources/js/components/fieldtypes/ListFieldtype.vue @@ -36,7 +36,7 @@ @click="deleteValue(index)" class="inline text-lg antialiased opacity-25 hover:opacity-75 cursor-pointer" :aria-label="__('Delete Value')" - data-delete-action + data-destructive > × diff --git a/resources/js/components/fieldtypes/TableFieldtype.vue b/resources/js/components/fieldtypes/TableFieldtype.vue index 03a338f525..99bf6afd41 100644 --- a/resources/js/components/fieldtypes/TableFieldtype.vue +++ b/resources/js/components/fieldtypes/TableFieldtype.vue @@ -20,7 +20,7 @@
{{ index + 1 }} - +
@@ -50,7 +50,7 @@ /> - + diff --git a/resources/js/components/fieldtypes/assets/AssetRow.vue b/resources/js/components/fieldtypes/assets/AssetRow.vue index 306fc10344..2152d12925 100644 --- a/resources/js/components/fieldtypes/assets/AssetRow.vue +++ b/resources/js/components/fieldtypes/assets/AssetRow.vue @@ -49,7 +49,7 @@ variant="ghost" :aria-label="__('Remove Asset')" :title="__('Remove')" - delete-action + destructive />