@womp/kookie-ui 0.35.1 → 0.35.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -341,7 +341,7 @@
341
341
 
342
342
  /* Focus state - outline ring (raised has its own box-shadow ring) */
343
343
  &:where(:focus-within) {
344
- outline: 2px solid var(--v-focus-color, var(--focus-8));
344
+ outline: var(--focus-ring-width) solid var(--v-focus-color, var(--focus-8));
345
345
  outline-offset: -1px;
346
346
  }
347
347
  }
@@ -417,7 +417,7 @@
417
417
  border: 1px solid CanvasText;
418
418
  }
419
419
  .kui-ChatbarBox:where(.kui-variant-raised):where(:focus-within) {
420
- outline: 2px solid Highlight;
420
+ outline: var(--focus-ring-width) solid Highlight;
421
421
  outline-offset: -1px;
422
422
  }
423
423
  .kui-ChatbarRoot:where([data-disabled]) .kui-ChatbarBox {
@@ -124,7 +124,7 @@
124
124
  /* Items never take DOM focus, so the base menu :focus-visible rule never matches. */
125
125
  @media (forced-colors: active) {
126
126
  .kui-ComboboxItem:where([data-selected='true']) {
127
- outline: 2px solid Highlight;
127
+ outline: var(--focus-ring-width) solid Highlight;
128
128
  outline-offset: -2px;
129
129
  }
130
130
  }
@@ -187,7 +187,7 @@
187
187
 
188
188
  @media (forced-colors: active) {
189
189
  .kui-CommandItem:where([data-selected='true']) {
190
- outline: 2px solid Highlight;
190
+ outline: var(--focus-ring-width) solid Highlight;
191
191
  outline-offset: -2px;
192
192
  }
193
193
 
@@ -103,7 +103,7 @@
103
103
  box-shadow: inset 0 var(--raised-border-width) var(--black-a3), 0 0 0 var(--raised-border-width) var(--neutral-a7);
104
104
  }
105
105
  &:where(:focus-visible) {
106
- outline: 2px solid var(--focus-8);
106
+ outline: var(--focus-ring-width) solid var(--focus-8);
107
107
  }
108
108
  }
109
109
  }
@@ -124,7 +124,7 @@
124
124
  background-color: var(--neutral-a5);
125
125
  }
126
126
  &:where(:focus-visible) {
127
- outline: 2px solid var(--focus-8);
127
+ outline: var(--focus-ring-width) solid var(--focus-8);
128
128
  }
129
129
  }
130
130
  }
@@ -20,7 +20,7 @@
20
20
  outline: none;
21
21
 
22
22
  &:where(:focus-visible) {
23
- outline: 2px solid var(--focus-8);
23
+ outline: var(--focus-ring-width) solid var(--focus-8);
24
24
  outline-offset: -2px;
25
25
  }
26
26
  }
@@ -80,6 +80,6 @@
80
80
  }
81
81
 
82
82
  .kui-NavigatorLink:where(:focus-visible) {
83
- outline: 2px solid var(--focus-8);
83
+ outline: var(--focus-ring-width) solid var(--focus-8);
84
84
  outline-offset: -2px;
85
85
  }
@@ -60,7 +60,7 @@
60
60
  position: absolute;
61
61
  inset: 0;
62
62
  pointer-events: none;
63
- outline: 2px solid var(--focus-8);
63
+ outline: var(--focus-ring-width) solid var(--focus-8);
64
64
  outline-offset: -2px;
65
65
  }
66
66
  }
@@ -21,7 +21,7 @@
21
21
  }
22
22
 
23
23
  &:where(:focus-visible) {
24
- outline: var(--focus-outline-width) solid var(--focus-8);
24
+ outline: var(--focus-ring-width) solid var(--focus-8);
25
25
  outline-offset: var(--focus-outline-offset-inset);
26
26
  }
27
27
  }
@@ -203,7 +203,7 @@
203
203
  box-shadow: var(--field-chrome);
204
204
 
205
205
  &:where(:focus-visible) {
206
- outline: 2px solid var(--focus-8);
206
+ outline: var(--focus-ring-width) solid var(--focus-8);
207
207
  outline-offset: 2px;
208
208
  }
209
209
 
@@ -240,7 +240,7 @@
240
240
  color: var(--accent-ink);
241
241
 
242
242
  &:where(:focus-visible) {
243
- outline: 2px solid var(--accent-8);
243
+ outline: var(--focus-ring-width) solid var(--accent-8);
244
244
  outline-offset: -1px;
245
245
  }
246
246
 
@@ -293,7 +293,7 @@
293
293
  }
294
294
 
295
295
  &:where(:focus-visible) {
296
- outline: 2px solid var(--focus-8);
296
+ outline: var(--focus-ring-width) solid var(--focus-8);
297
297
  outline-offset: -1px;
298
298
  }
299
299
 
@@ -336,7 +336,7 @@
336
336
  }
337
337
 
338
338
  &:where(:focus-visible) {
339
- outline: 2px solid var(--focus-8);
339
+ outline: var(--focus-ring-width) solid var(--focus-8);
340
340
  outline-offset: -1px;
341
341
  }
342
342
 
@@ -380,7 +380,7 @@
380
380
  }
381
381
 
382
382
  &:where(:focus-visible) {
383
- outline: 2px solid var(--focus-8);
383
+ outline: var(--focus-ring-width) solid var(--focus-8);
384
384
  outline-offset: -1px;
385
385
  }
386
386
 
@@ -49,12 +49,7 @@
49
49
  }
50
50
 
51
51
  /* Size-specific vertical padding for thin mode buttons */
52
- :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter).kui-r-size-1) :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) {
53
- padding-top: var(--space-2) !important;
54
- padding-bottom: var(--space-2) !important;
55
- }
56
-
57
- :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter).kui-r-size-2) :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) {
52
+ :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter):is(.kui-r-size-1, .kui-r-size-2)) :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) {
58
53
  padding-top: var(--space-2) !important;
59
54
  padding-bottom: var(--space-2) !important;
60
55
  }
@@ -64,112 +59,34 @@
64
59
  padding-bottom: var(--space-3) !important;
65
60
  }
66
61
 
67
- /* Consolidated thin mode size blocks */
68
- :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter).kui-r-size-1) {
62
+ /* Row padding and the label's clipping, the same at every size */
63
+ :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter):is(.kui-r-size-1, .kui-r-size-2, .kui-r-size-3)) {
69
64
  /* Horizontal padding tokens to free space for text */
70
65
  --base-menu-item-padding-left: var(--space-2) !important;
71
66
  --base-menu-item-padding-right: var(--space-2) !important;
72
67
  /* Unify vertical padding via tokens (used by BaseMenuItem) */
73
68
  --base-menu-item-padding-y: var(--space-3) !important;
74
69
 
75
- /* Override BaseMenu left padding resets */
76
- &:where(:not(:has(.kui-BaseMenuCheckboxItem, .kui-BaseMenuRadioItem))) {
77
- --base-menu-item-padding-left: var(--space-2) !important;
78
- }
79
- &:where(:has(.kui-BaseMenuCheckboxItem, .kui-BaseMenuRadioItem)) {
80
- --base-menu-item-padding-left: var(--space-2) !important;
81
- }
82
-
83
- /* Button and subtrigger layout */
84
70
  :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) {
85
- justify-content: center;
86
- align-items: center;
87
- flex-direction: column;
88
- gap: var(--space-2);
89
- text-align: center;
90
- font-size: var(--font-size-1);
91
- line-height: var(--line-height-1);
92
71
  white-space: nowrap;
93
72
  overflow: hidden;
94
73
  text-overflow: ellipsis;
95
74
  max-width: 100%;
96
75
  min-width: 0;
97
76
  }
98
-
99
- /* Icon sizing */
100
- /* stylelint-disable-next-line selector-max-type */
101
- :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) :where(svg) {
102
- width: var(--content-icon-size-3);
103
- height: var(--content-icon-size-3);
104
- }
105
77
  }
106
78
 
107
- :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter).kui-r-size-2) {
108
- --base-menu-item-padding-left: var(--space-2) !important;
109
- --base-menu-item-padding-right: var(--space-2) !important;
110
- --base-menu-item-padding-y: var(--space-3) !important;
111
-
112
- &:where(:not(:has(.kui-BaseMenuCheckboxItem, .kui-BaseMenuRadioItem))) {
113
- --base-menu-item-padding-left: var(--space-2) !important;
114
- }
115
- &:where(:has(.kui-BaseMenuCheckboxItem, .kui-BaseMenuRadioItem)) {
116
- --base-menu-item-padding-left: var(--space-2) !important;
117
- }
118
-
119
- :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) {
120
- justify-content: center;
121
- align-items: center;
122
- flex-direction: column;
123
- gap: var(--space-2);
124
- text-align: center;
125
- font-size: var(--font-size-1);
126
- line-height: var(--line-height-1);
127
- white-space: nowrap;
128
- overflow: hidden;
129
- text-overflow: ellipsis;
130
- max-width: 100%;
131
- min-width: 0;
132
- }
133
-
134
- /* stylelint-disable-next-line selector-max-type */
135
- :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) :where(svg) {
136
- width: var(--content-icon-size-4);
137
- height: var(--content-icon-size-4);
138
- }
79
+ /* Icon size: the one line that differs by size */
80
+ /* stylelint-disable-next-line selector-max-type */
81
+ :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter).kui-r-size-1) :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) :where(svg) {
82
+ width: var(--content-icon-size-3);
83
+ height: var(--content-icon-size-3);
139
84
  }
140
85
 
141
- :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter).kui-r-size-3) {
142
- --base-menu-item-padding-left: var(--space-2) !important;
143
- --base-menu-item-padding-right: var(--space-2) !important;
144
- --base-menu-item-padding-y: var(--space-3) !important;
145
-
146
- &:where(:not(:has(.kui-BaseMenuCheckboxItem, .kui-BaseMenuRadioItem))) {
147
- --base-menu-item-padding-left: var(--space-2) !important;
148
- }
149
- &:where(:has(.kui-BaseMenuCheckboxItem, .kui-BaseMenuRadioItem)) {
150
- --base-menu-item-padding-left: var(--space-2) !important;
151
- }
152
-
153
- :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) {
154
- justify-content: center;
155
- align-items: center;
156
- flex-direction: column;
157
- gap: var(--space-2);
158
- text-align: center;
159
- font-size: var(--font-size-1);
160
- line-height: var(--line-height-1);
161
- white-space: nowrap;
162
- overflow: hidden;
163
- text-overflow: ellipsis;
164
- max-width: 100%;
165
- min-width: 0;
166
- }
167
-
168
- /* stylelint-disable-next-line selector-max-type */
169
- :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) :where(svg) {
170
- width: var(--content-icon-size-4);
171
- height: var(--content-icon-size-4);
172
- }
86
+ /* stylelint-disable-next-line selector-max-type */
87
+ :where(.kui-ShellRailContent :is(.kui-SidebarContent, .kui-ShellPaneHeader, .kui-ShellPaneFooter):is(.kui-r-size-2, .kui-r-size-3)) :where(.kui-SidebarMenuButton, .kui-SidebarMenuSubTrigger) :where(svg) {
88
+ width: var(--content-icon-size-4);
89
+ height: var(--content-icon-size-4);
173
90
  }
174
91
 
175
92
  /* Ellipsis on root child content when using asChild (e.g., Next.js Link) */
@@ -292,21 +209,8 @@
292
209
  background-color: var(--accent-3);
293
210
  }
294
211
 
295
- /* Solid variant icon wrapper states in thin mode */
296
- :where(.kui-ShellRailContent .kui-SidebarMenuBadge),
297
- :where(.kui-ShellRailContent .kui-SidebarMenuShortcut),
298
- :where(.kui-ShellRailContent .kui-Chip),
299
- :where(.kui-ShellRailContent .kui-Kbd) {
300
- display: none !important;
301
- }
302
-
303
- :where(.kui-ShellRailContent .kui-SidebarGroupLabel) {
304
- display: none !important;
305
- }
306
-
307
- /* Hide submenu chevrons in rail */
308
- :where(.kui-ShellRailContent .kui-SidebarMenuSubTriggerIcon),
309
- :where(.kui-ShellRailContent .kui-BaseMenuSubTriggerIcon) {
212
+ /* A Rail shows the icon and its label only: no badge, shortcut, group label or chevron */
213
+ :where(.kui-ShellRailContent) :where(.kui-SidebarMenuBadge, .kui-SidebarMenuShortcut, .kui-Chip, .kui-Kbd, .kui-SidebarGroupLabel, .kui-SidebarMenuSubTriggerIcon, .kui-BaseMenuSubTriggerIcon) {
310
214
  display: none !important;
311
215
  }
312
216
 
@@ -325,7 +229,8 @@
325
229
  /* Base variables and panel background support (mirrors Card pattern) */
326
230
  /* Centralized borders: apply a consistent inset border; avoid context coupling */
327
231
  /* Container Variants (variables only) *//* Header/Footer Layout Utilities */
328
- .kui-SidebarHeader:where(.kui-SidebarHeader--container) {
232
+ .kui-SidebarHeader:where(.kui-SidebarHeader--container),
233
+ .kui-SidebarFooter:where(.kui-SidebarFooter--container) {
329
234
  display: flex;
330
235
  flex-direction: row;
331
236
  align-items: center;
@@ -338,7 +243,7 @@
338
243
  flex: 1;
339
244
  }
340
245
 
341
- /* A Toolbar fills the header, so its leading and trailing groups sit at the two ends. */
246
+ /* A Toolbar fills the row, so its leading and trailing groups sit at the two ends. */
342
247
  & > :where(.kui-Toolbar) {
343
248
  flex: 1;
344
249
  }
@@ -349,26 +254,6 @@
349
254
  .kui-SidebarHeader:where(.kui-SidebarHeader--container:not([data-float]):has(+ .kui-ShellScroll)) {
350
255
  padding-bottom: 0;
351
256
  }
352
-
353
- .kui-SidebarFooter:where(.kui-SidebarFooter--container) {
354
- display: flex;
355
- flex-direction: row;
356
- align-items: center;
357
- gap: var(--space-3);
358
- padding: var(--sidebar-base-padding);
359
- min-height: var(--sidebar-item-height);
360
-
361
- /* Make MenuButtons expand to full width */
362
- & :where(.kui-SidebarMenuButton) {
363
- flex: 1;
364
- }
365
-
366
- /* A Toolbar fills the footer, so its leading and trailing groups sit at the two ends. */
367
- & > :where(.kui-Toolbar) {
368
- flex: 1;
369
- }
370
- }
371
-
372
257
  /* Second half of the shared inset above; after the footer's own padding, at its specificity. */
373
258
  :where(.kui-ShellScroll) + .kui-SidebarFooter:where(.kui-SidebarFooter--container:not([data-float])) {
374
259
  padding-top: 0;
@@ -402,7 +287,7 @@
402
287
 
403
288
  /* Focus state */
404
289
  &:where(:focus-visible) {
405
- outline: 2px solid var(--focus-8);
290
+ outline: var(--focus-ring-width) solid var(--focus-8);
406
291
  outline-offset: 2px;
407
292
  }
408
293
 
@@ -680,9 +565,9 @@
680
565
  padding: var(--space-3);
681
566
  }
682
567
 
683
- /* Expanded mode: inline input wrapper */
568
+ /* The field's box, inline in a pane and inside the Rail's popover */
684
569
  /* stylelint-disable-next-line selector-max-specificity */
685
- .kui-SidebarSearch--expanded .kui-SidebarSearchInputWrapper {
570
+ :is(.kui-SidebarSearch--expanded, .kui-SidebarSearchPopover) .kui-SidebarSearchInputWrapper {
686
571
  display: flex;
687
572
  flex-direction: row;
688
573
  align-items: center;
@@ -693,7 +578,7 @@
693
578
  }
694
579
 
695
580
  /* stylelint-disable-next-line selector-max-specificity */
696
- .kui-SidebarSearch--expanded .kui-SidebarSearchInputWrapper:focus-within {
581
+ :is(.kui-SidebarSearch--expanded, .kui-SidebarSearchPopover) .kui-SidebarSearchInputWrapper:focus-within {
697
582
  box-shadow: inset 0 0 0 1px var(--accent-a7);
698
583
  }
699
584
 
@@ -720,12 +605,7 @@
720
605
  }
721
606
 
722
607
  /* Size-specific vertical padding for thin search trigger */
723
- :where(.kui-ShellRailContent.kui-r-size-1) :where(.kui-SidebarSearchTrigger) {
724
- padding-top: var(--space-2) !important;
725
- padding-bottom: var(--space-2) !important;
726
- }
727
-
728
- :where(.kui-ShellRailContent.kui-r-size-2) :where(.kui-SidebarSearchTrigger) {
608
+ :where(.kui-ShellRailContent:is(.kui-r-size-1, .kui-r-size-2)) :where(.kui-SidebarSearchTrigger) {
729
609
  padding-top: var(--space-2) !important;
730
610
  padding-bottom: var(--space-2) !important;
731
611
  }
@@ -744,13 +624,7 @@
744
624
  }
745
625
 
746
626
  /* stylelint-disable-next-line selector-max-type, selector-max-specificity */
747
- .kui-ShellRailContent.kui-r-size-2 .kui-SidebarSearchTrigger svg {
748
- width: var(--content-icon-size-3);
749
- height: var(--content-icon-size-3);
750
- }
751
-
752
- /* stylelint-disable-next-line selector-max-type, selector-max-specificity */
753
- .kui-ShellRailContent.kui-r-size-3 .kui-SidebarSearchTrigger svg {
627
+ .kui-ShellRailContent:is(.kui-r-size-2, .kui-r-size-3) .kui-SidebarSearchTrigger svg {
754
628
  width: var(--content-icon-size-3);
755
629
  height: var(--content-icon-size-3);
756
630
  }
@@ -812,23 +686,6 @@
812
686
  --base-menu-line-height: var(--line-height-2);
813
687
  --base-menu-letter-spacing: var(--letter-spacing-2);
814
688
  }
815
-
816
- /* stylelint-disable-next-line selector-max-specificity */
817
- .kui-SidebarSearchPopover .kui-SidebarSearchInputWrapper {
818
- display: flex;
819
- flex-direction: row;
820
- align-items: center;
821
- gap: var(--space-3);
822
- background-color: var(--neutral-a3);
823
- border-radius: var(--radius-2);
824
- padding: var(--space-2) var(--space-3);
825
- }
826
-
827
- /* stylelint-disable-next-line selector-max-specificity */
828
- .kui-SidebarSearchPopover .kui-SidebarSearchInputWrapper:focus-within {
829
- box-shadow: inset 0 0 0 1px var(--accent-a7);
830
- }
831
-
832
689
  /* Popover menu list reset */
833
690
  /* stylelint-disable-next-line selector-max-specificity */
834
691
  .kui-SidebarSearchPopover .kui-SidebarMenu {
@@ -860,7 +717,7 @@
860
717
  /* Popover menu button focus (arrow-key navigation) */
861
718
  /* stylelint-disable-next-line selector-max-specificity */
862
719
  .kui-SidebarSearchPopover .kui-SidebarMenuButton:where(:focus-visible) {
863
- outline: 2px solid var(--focus-8);
720
+ outline: var(--focus-ring-width) solid var(--focus-8);
864
721
  outline-offset: -2px;
865
722
  }
866
723
 
@@ -872,15 +729,6 @@
872
729
  font-weight: var(--font-weight-medium);
873
730
  }
874
731
 
875
- /* Popover menu label truncation */
876
- /* stylelint-disable-next-line selector-max-specificity */
877
- .kui-SidebarSearchPopover .kui-SidebarMenuLabel {
878
- min-width: 0;
879
- overflow: hidden;
880
- text-overflow: ellipsis;
881
- white-space: nowrap;
882
- }
883
-
884
732
  /* Search icon */
885
733
  .kui-SidebarSearchIcon {
886
734
  flex-shrink: 0;
@@ -33,7 +33,7 @@
33
33
  isolation: isolate;
34
34
 
35
35
  &:where(:focus-within) {
36
- outline: 2px solid var(--v-focus-color, var(--focus-8));
36
+ outline: var(--focus-ring-width) solid var(--v-focus-color, var(--focus-8));
37
37
  outline-offset: -1px;
38
38
  }
39
39
 
@@ -12,13 +12,13 @@
12
12
 
13
13
  @supports selector(:has(*)) {
14
14
  &:where(:has(.kui-TextFieldInput:focus)) {
15
- outline: 2px solid var(--text-field-focus-color);
15
+ outline: var(--focus-ring-width) solid var(--text-field-focus-color);
16
16
  outline-offset: -1px;
17
17
  }
18
18
  }
19
19
  @supports not selector(:has(*)) {
20
20
  &:where(:focus-within) {
21
- outline: 2px solid var(--text-field-focus-color);
21
+ outline: var(--focus-ring-width) solid var(--text-field-focus-color);
22
22
  outline-offset: -1px;
23
23
  }
24
24
  }
@@ -88,7 +88,7 @@
88
88
  }
89
89
  }
90
90
  &::-webkit-calendar-picker-indicator:where(:focus-visible) {
91
- outline: 2px solid var(--text-field-focus-color);
91
+ outline: var(--focus-ring-width) solid var(--text-field-focus-color);
92
92
  }
93
93
 
94
94
  /* Remove focus ring from date fields and use the selection color */
@@ -19,7 +19,7 @@
19
19
  outline: none;
20
20
 
21
21
  &:where(:focus-visible) {
22
- outline: 2px solid var(--focus-8);
22
+ outline: var(--focus-ring-width) solid var(--focus-8);
23
23
  outline-offset: -2px;
24
24
  }
25
25
  }
@@ -100,9 +100,9 @@
100
100
  --component-gap-ghost-3: calc(var(--space-2) * 1.5);
101
101
  --component-gap-ghost-4: var(--space-3);
102
102
 
103
- /* Focus outline constants */
104
- --focus-outline-width: 2px;
105
- --focus-outline-offset: 2px;
103
+ /* Older names for the focus ring, kept for apps that read them */
104
+ --focus-outline-width: var(--focus-ring-width);
105
+ --focus-outline-offset: var(--focus-ring-offset);
106
106
  --focus-outline-offset-inset: -1px;
107
107
 
108
108
  /* Component padding relationships */