@kushagradhawan/kookie-ui 0.1.37 → 0.1.39

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.
Files changed (172) hide show
  1. package/components.css +130 -74
  2. package/dist/cjs/components/_internal/base-button.props.d.ts +1 -1
  3. package/dist/cjs/components/_internal/base-button.props.js +1 -1
  4. package/dist/cjs/components/_internal/base-button.props.js.map +2 -2
  5. package/dist/cjs/components/_internal/base-checkbox.props.d.ts +1 -1
  6. package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
  7. package/dist/cjs/components/_internal/base-checkbox.props.js.map +2 -2
  8. package/dist/cjs/components/avatar.props.d.ts +1 -1
  9. package/dist/cjs/components/avatar.props.js +1 -1
  10. package/dist/cjs/components/avatar.props.js.map +2 -2
  11. package/dist/cjs/components/button.d.ts +40 -2
  12. package/dist/cjs/components/button.d.ts.map +1 -1
  13. package/dist/cjs/components/button.js +1 -1
  14. package/dist/cjs/components/button.js.map +3 -3
  15. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  16. package/dist/cjs/components/chatbar.js +1 -1
  17. package/dist/cjs/components/chatbar.js.map +2 -2
  18. package/dist/cjs/components/checkbox-cards.props.d.ts +2 -2
  19. package/dist/cjs/components/checkbox-cards.props.js +1 -1
  20. package/dist/cjs/components/checkbox-cards.props.js.map +2 -2
  21. package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
  22. package/dist/cjs/components/checkbox-group.js +1 -1
  23. package/dist/cjs/components/checkbox-group.js.map +3 -3
  24. package/dist/cjs/components/checkbox-group.props.d.ts +1 -1
  25. package/dist/cjs/components/dialog.d.ts.map +1 -1
  26. package/dist/cjs/components/dialog.js +1 -1
  27. package/dist/cjs/components/dialog.js.map +3 -3
  28. package/dist/cjs/components/flex.props.d.ts +3 -3
  29. package/dist/cjs/components/grid.props.d.ts +3 -3
  30. package/dist/cjs/components/radio-cards.props.d.ts +2 -2
  31. package/dist/cjs/components/radio-cards.props.js +1 -1
  32. package/dist/cjs/components/radio-cards.props.js.map +2 -2
  33. package/dist/cjs/components/select.d.ts.map +1 -1
  34. package/dist/cjs/components/select.js +1 -1
  35. package/dist/cjs/components/select.js.map +3 -3
  36. package/dist/cjs/components/shell.d.ts.map +1 -1
  37. package/dist/cjs/components/shell.js +1 -1
  38. package/dist/cjs/components/shell.js.map +3 -3
  39. package/dist/cjs/components/sidebar.d.ts +7 -1
  40. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  41. package/dist/cjs/components/sidebar.js +1 -1
  42. package/dist/cjs/components/sidebar.js.map +3 -3
  43. package/dist/cjs/components/sidebar.props.d.ts +6 -0
  44. package/dist/cjs/components/sidebar.props.d.ts.map +1 -1
  45. package/dist/cjs/components/sidebar.props.js +1 -1
  46. package/dist/cjs/components/sidebar.props.js.map +3 -3
  47. package/dist/cjs/components/table.props.d.ts +7 -7
  48. package/dist/cjs/components/text-field.props.d.ts +4 -4
  49. package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
  50. package/dist/cjs/hooks/index.d.ts +1 -0
  51. package/dist/cjs/hooks/index.d.ts.map +1 -1
  52. package/dist/cjs/hooks/index.js +1 -1
  53. package/dist/cjs/hooks/index.js.map +3 -3
  54. package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts +9 -0
  55. package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -0
  56. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js +2 -0
  57. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js.map +7 -0
  58. package/dist/cjs/props/gap.props.d.ts +3 -3
  59. package/dist/cjs/props/gap.props.js +1 -1
  60. package/dist/cjs/props/gap.props.js.map +2 -2
  61. package/dist/cjs/props/layout.props.d.ts +7 -7
  62. package/dist/cjs/props/margin.props.d.ts +7 -7
  63. package/dist/cjs/props/margin.props.js +1 -1
  64. package/dist/cjs/props/margin.props.js.map +2 -2
  65. package/dist/cjs/props/padding.props.d.ts +7 -7
  66. package/dist/cjs/props/padding.props.js +1 -1
  67. package/dist/cjs/props/padding.props.js.map +2 -2
  68. package/dist/esm/components/_internal/base-button.props.d.ts +1 -1
  69. package/dist/esm/components/_internal/base-button.props.js +1 -1
  70. package/dist/esm/components/_internal/base-button.props.js.map +2 -2
  71. package/dist/esm/components/_internal/base-checkbox.props.d.ts +1 -1
  72. package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
  73. package/dist/esm/components/_internal/base-checkbox.props.js.map +2 -2
  74. package/dist/esm/components/avatar.props.d.ts +1 -1
  75. package/dist/esm/components/avatar.props.js +1 -1
  76. package/dist/esm/components/avatar.props.js.map +2 -2
  77. package/dist/esm/components/button.d.ts +40 -2
  78. package/dist/esm/components/button.d.ts.map +1 -1
  79. package/dist/esm/components/button.js +1 -1
  80. package/dist/esm/components/button.js.map +3 -3
  81. package/dist/esm/components/chatbar.d.ts.map +1 -1
  82. package/dist/esm/components/chatbar.js +1 -1
  83. package/dist/esm/components/chatbar.js.map +2 -2
  84. package/dist/esm/components/checkbox-cards.props.d.ts +2 -2
  85. package/dist/esm/components/checkbox-cards.props.js +1 -1
  86. package/dist/esm/components/checkbox-cards.props.js.map +2 -2
  87. package/dist/esm/components/checkbox-group.d.ts.map +1 -1
  88. package/dist/esm/components/checkbox-group.js +1 -1
  89. package/dist/esm/components/checkbox-group.js.map +3 -3
  90. package/dist/esm/components/checkbox-group.props.d.ts +1 -1
  91. package/dist/esm/components/dialog.d.ts.map +1 -1
  92. package/dist/esm/components/dialog.js +1 -1
  93. package/dist/esm/components/dialog.js.map +3 -3
  94. package/dist/esm/components/flex.props.d.ts +3 -3
  95. package/dist/esm/components/grid.props.d.ts +3 -3
  96. package/dist/esm/components/radio-cards.props.d.ts +2 -2
  97. package/dist/esm/components/radio-cards.props.js +1 -1
  98. package/dist/esm/components/radio-cards.props.js.map +2 -2
  99. package/dist/esm/components/select.d.ts.map +1 -1
  100. package/dist/esm/components/select.js +1 -1
  101. package/dist/esm/components/select.js.map +3 -3
  102. package/dist/esm/components/shell.d.ts.map +1 -1
  103. package/dist/esm/components/shell.js +1 -1
  104. package/dist/esm/components/shell.js.map +3 -3
  105. package/dist/esm/components/sidebar.d.ts +7 -1
  106. package/dist/esm/components/sidebar.d.ts.map +1 -1
  107. package/dist/esm/components/sidebar.js +1 -1
  108. package/dist/esm/components/sidebar.js.map +3 -3
  109. package/dist/esm/components/sidebar.props.d.ts +6 -0
  110. package/dist/esm/components/sidebar.props.d.ts.map +1 -1
  111. package/dist/esm/components/sidebar.props.js +1 -1
  112. package/dist/esm/components/sidebar.props.js.map +3 -3
  113. package/dist/esm/components/table.props.d.ts +7 -7
  114. package/dist/esm/components/text-field.props.d.ts +4 -4
  115. package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
  116. package/dist/esm/hooks/index.d.ts +1 -0
  117. package/dist/esm/hooks/index.d.ts.map +1 -1
  118. package/dist/esm/hooks/index.js +1 -1
  119. package/dist/esm/hooks/index.js.map +3 -3
  120. package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts +9 -0
  121. package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -0
  122. package/dist/esm/hooks/use-body-pointer-events-cleanup.js +2 -0
  123. package/dist/esm/hooks/use-body-pointer-events-cleanup.js.map +7 -0
  124. package/dist/esm/props/gap.props.d.ts +3 -3
  125. package/dist/esm/props/gap.props.js +1 -1
  126. package/dist/esm/props/gap.props.js.map +2 -2
  127. package/dist/esm/props/layout.props.d.ts +7 -7
  128. package/dist/esm/props/margin.props.d.ts +7 -7
  129. package/dist/esm/props/margin.props.js +1 -1
  130. package/dist/esm/props/margin.props.js.map +2 -2
  131. package/dist/esm/props/padding.props.d.ts +7 -7
  132. package/dist/esm/props/padding.props.js +1 -1
  133. package/dist/esm/props/padding.props.js.map +2 -2
  134. package/layout/tokens.css +3 -0
  135. package/layout/utilities.css +1806 -42
  136. package/layout.css +1809 -42
  137. package/package.json +1 -1
  138. package/src/components/_internal/base-button.css +179 -73
  139. package/src/components/_internal/base-button.props.ts +1 -1
  140. package/src/components/_internal/base-checkbox.props.ts +1 -1
  141. package/src/components/avatar.props.tsx +1 -1
  142. package/src/components/button.css +13 -21
  143. package/src/components/button.tsx +79 -2
  144. package/src/components/chatbar.tsx +5 -2
  145. package/src/components/checkbox-cards.props.tsx +1 -1
  146. package/src/components/checkbox-group.tsx +14 -6
  147. package/src/components/dialog.tsx +4 -0
  148. package/src/components/radio-cards.props.tsx +1 -1
  149. package/src/components/select.css +9 -0
  150. package/src/components/select.tsx +11 -1
  151. package/src/components/shell.tsx +34 -3
  152. package/src/components/sidebar.css +15 -3
  153. package/src/components/sidebar.props.tsx +3 -0
  154. package/src/components/sidebar.tsx +27 -0
  155. package/src/hooks/index.ts +2 -1
  156. package/src/hooks/use-body-pointer-events-cleanup.ts +81 -0
  157. package/src/props/gap.props.ts +1 -1
  158. package/src/props/margin.props.ts +1 -1
  159. package/src/props/padding.props.ts +1 -1
  160. package/src/styles/tokens/blur.css +3 -0
  161. package/src/styles/tokens/constants.css +38 -35
  162. package/src/styles/tokens/radius.css +3 -0
  163. package/src/styles/tokens/shadow.css +64 -89
  164. package/src/styles/tokens/space.css +3 -0
  165. package/src/styles/tokens/transition.css +25 -12
  166. package/src/styles/utilities/gap.css +27 -0
  167. package/src/styles/utilities/margin.css +205 -7
  168. package/src/styles/utilities/padding.css +69 -0
  169. package/styles.css +1973 -144
  170. package/tokens/base.css +34 -25
  171. package/tokens.css +37 -28
  172. package/utilities.css +1806 -42
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kushagradhawan/kookie-ui",
3
- "version": "0.1.37",
3
+ "version": "0.1.39",
4
4
  "description": "A modern React component library with beautiful design tokens, flexible theming, and comprehensive docs",
5
5
  "keywords": [
6
6
  "react",
@@ -27,13 +27,13 @@
27
27
  /* Reset all inherited styles to ensure consistent base */
28
28
  all: unset;
29
29
  box-sizing: border-box;
30
-
30
+
31
31
  /* Flexbox layout for content alignment */
32
32
  display: inline-flex;
33
33
  align-items: center;
34
34
  justify-content: center;
35
35
  flex-shrink: 0;
36
-
36
+
37
37
  /* Interaction and accessibility */
38
38
  user-select: none;
39
39
  position: relative;
@@ -48,7 +48,7 @@
48
48
  text-align: center;
49
49
 
50
50
  /* RTL support for right-to-left languages */
51
- :where([dir="rtl"]) & {
51
+ :where([dir='rtl']) & {
52
52
  flex-direction: row-reverse;
53
53
  }
54
54
 
@@ -72,7 +72,7 @@
72
72
  backdrop-filter: none;
73
73
  --backdrop-filter-components: none;
74
74
  }
75
-
75
+
76
76
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
77
77
  backdrop-filter: var(--backdrop-filter-components);
78
78
  --backdrop-filter-components: blur(var(--backdrop-blur-components));
@@ -112,8 +112,6 @@
112
112
  cursor: wait;
113
113
  }
114
114
 
115
- /* Removed scale animation on press - keeping transition for other effects */
116
-
117
115
  /*
118
116
  * Reduced motion support
119
117
  * Respects user's motion preferences for accessibility
@@ -153,29 +151,25 @@
153
151
  * Designed for toolbars and dense interfaces
154
152
  */
155
153
  &:where(.rt-r-size-1) {
156
- --base-button-classic-active-padding-top: 1px;
157
154
  --base-button-height: var(--space-5);
158
155
  border-radius: max(var(--radius-1), var(--radius-full));
159
156
  }
160
-
157
+
161
158
  /*
162
159
  * Size 2: Standard (32px height)
163
160
  * Default size for most interface contexts
164
161
  */
165
162
  &:where(.rt-r-size-2) {
166
- --base-button-classic-active-padding-top: 2px;
167
163
  --base-button-height: var(--space-6);
168
164
  border-radius: max(var(--radius-2), var(--radius-full));
169
165
  }
170
166
 
171
167
  &:where(.rt-r-size-3) {
172
- --base-button-classic-active-padding-top: 2px;
173
168
  --base-button-height: var(--space-7);
174
169
  border-radius: max(var(--radius-3), var(--radius-full));
175
170
  }
176
-
171
+
177
172
  &:where(.rt-r-size-4) {
178
- --base-button-classic-active-padding-top: 2px;
179
173
  --base-button-height: var(--space-8);
180
174
  border-radius: max(var(--radius-4), var(--radius-full));
181
175
  }
@@ -192,7 +186,6 @@
192
186
 
193
187
  .rt-BaseButton:where(.rt-variant-classic) {
194
188
  position: relative;
195
- top: var(--classic-elevation-offset);
196
189
  color: var(--accent-a11);
197
190
  background-color: var(--color-surface-solid);
198
191
  box-shadow: var(--shadow-2);
@@ -282,7 +275,10 @@
282
275
  /* Dark mode uses same styling as light mode for simplicity */
283
276
  }
284
277
 
285
- &:where(:active:not([data-state='open'], [data-disabled]), [data-state='on']:not([data-disabled])) {
278
+ &:where(
279
+ :active:not([data-state='open'], [data-disabled]),
280
+ [data-state='on']:not([data-disabled])
281
+ ) {
286
282
  background-color: var(--gray-3);
287
283
  box-shadow: var(--shadow-1);
288
284
 
@@ -319,14 +315,128 @@
319
315
  }
320
316
  }
321
317
 
318
+ /* override */
319
+
320
+ .rt-BaseButton:where(.rt-variant-override) {
321
+ /* Base styles driven entirely by CSS variables, set via props */
322
+ color: var(--button-override-color, inherit);
323
+ background: var(--button-override-background, transparent);
324
+ background-color: var(--button-override-background-color, initial);
325
+ box-shadow: var(--button-override-box-shadow, none);
326
+ filter: var(--button-override-filter, none);
327
+ outline: var(--button-override-outline, none);
328
+
329
+ @media (hover: hover) {
330
+ &:where(:hover) {
331
+ color: var(--button-override-hover-color, var(--button-override-color, inherit));
332
+ background: var(
333
+ --button-override-hover-background,
334
+ var(--button-override-background, transparent)
335
+ );
336
+ background-color: var(
337
+ --button-override-hover-background-color,
338
+ var(--button-override-background-color, initial)
339
+ );
340
+ box-shadow: var(--button-override-hover-box-shadow, var(--button-override-box-shadow, none));
341
+ filter: var(--button-override-hover-filter, var(--button-override-filter, none));
342
+ outline: var(--button-override-hover-outline, var(--button-override-outline, none));
343
+ }
344
+ }
345
+
346
+ &:where([data-state='open']) {
347
+ color: var(--button-override-open-color, var(--button-override-color, inherit));
348
+ background: var(
349
+ --button-override-open-background,
350
+ var(--button-override-background, transparent)
351
+ );
352
+ background-color: var(
353
+ --button-override-open-background-color,
354
+ var(--button-override-background-color, initial)
355
+ );
356
+ box-shadow: var(--button-override-open-box-shadow, var(--button-override-box-shadow, none));
357
+ filter: var(--button-override-open-filter, var(--button-override-filter, none));
358
+ outline: var(--button-override-open-outline, var(--button-override-outline, none));
359
+ }
360
+
361
+ &:where(:active:not([data-state='open'])) {
362
+ color: var(--button-override-active-color, var(--button-override-color, inherit));
363
+ background: var(
364
+ --button-override-active-background,
365
+ var(--button-override-background, transparent)
366
+ );
367
+ background-color: var(
368
+ --button-override-active-background-color,
369
+ var(--button-override-background-color, initial)
370
+ );
371
+ box-shadow: var(--button-override-active-box-shadow, var(--button-override-box-shadow, none));
372
+ filter: var(--button-override-active-filter, var(--button-override-filter, none));
373
+ outline: var(--button-override-active-outline, var(--button-override-outline, none));
374
+ }
375
+
376
+ &:where(:focus-visible) {
377
+ outline: var(--button-override-focus-outline, var(--focus-ring, 2px solid var(--focus-8)));
378
+ outline-offset: var(--button-override-focus-outline-offset, 2px);
379
+ }
380
+
381
+ /* Toggle pressed */
382
+ &:where([data-state='on']) {
383
+ color: var(
384
+ --button-override-pressed-color,
385
+ var(--button-override-active-color, var(--button-override-color, inherit))
386
+ );
387
+ background: var(
388
+ --button-override-pressed-background,
389
+ var(--button-override-active-background, var(--button-override-background, transparent))
390
+ );
391
+ background-color: var(
392
+ --button-override-pressed-background-color,
393
+ var(
394
+ --button-override-active-background-color,
395
+ var(--button-override-background-color, initial)
396
+ )
397
+ );
398
+ box-shadow: var(
399
+ --button-override-pressed-box-shadow,
400
+ var(--button-override-active-box-shadow, var(--button-override-box-shadow, none))
401
+ );
402
+ filter: var(
403
+ --button-override-pressed-filter,
404
+ var(--button-override-active-filter, var(--button-override-filter, none))
405
+ );
406
+ outline: var(
407
+ --button-override-pressed-outline,
408
+ var(--button-override-active-outline, var(--button-override-outline, none))
409
+ );
410
+ }
411
+
412
+ &:where([data-disabled]) {
413
+ color: var(--button-override-disabled-color, var(--gray-a8));
414
+ background: var(--button-override-disabled-background, var(--gray-a3));
415
+ background-color: var(--button-override-disabled-background-color, var(--gray-a3));
416
+ box-shadow: var(--button-override-disabled-box-shadow, none);
417
+ filter: var(--button-override-disabled-filter, none);
418
+ outline: var(--button-override-disabled-outline, none);
419
+ cursor: not-allowed;
420
+ pointer-events: none;
421
+ }
422
+ }
423
+
322
424
  /* solid */
323
425
 
324
426
  :where(.radix-themes) {
325
427
  --base-button-solid-high-contrast-hover-filter: contrast(0.88) saturate(1.1) brightness(1.1);
428
+ --base-button-solid-active-filter: brightness(0.9) contrast(1.03);
429
+ --base-button-solid-open-filter: brightness(0.96) contrast(1.02);
430
+ --base-button-solid-high-contrast-active-filter: brightness(0.92);
431
+ --base-button-solid-high-contrast-open-filter: brightness(0.96);
326
432
  }
327
433
  :is(.dark, .dark-theme),
328
434
  :is(.dark, .dark-theme) :where(.radix-themes:not(.light, .light-theme)) {
329
435
  --base-button-solid-high-contrast-hover-filter: contrast(0.88) saturate(1.3) brightness(1.18);
436
+ --base-button-solid-active-filter: brightness(0.88) contrast(1.03);
437
+ --base-button-solid-open-filter: brightness(0.95) contrast(1.02);
438
+ --base-button-solid-high-contrast-active-filter: brightness(0.9);
439
+ --base-button-solid-high-contrast-open-filter: brightness(0.95);
330
440
  }
331
441
 
332
442
  .rt-BaseButton:where(.rt-variant-solid) {
@@ -351,7 +461,8 @@
351
461
  @media (hover: hover) {
352
462
  &:where(:hover) {
353
463
  background-color: var(--accent-10);
354
-
464
+ box-shadow: var(--shadow-2);
465
+
355
466
  /* Theme-level translucent override for hover */
356
467
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
357
468
  background-color: color-mix(in srgb, var(--accent-a10), var(--accent-10) 10%);
@@ -369,7 +480,9 @@
369
480
  }
370
481
  &:where([data-state='open']) {
371
482
  background-color: var(--accent-10);
372
-
483
+ filter: var(--base-button-solid-open-filter);
484
+ box-shadow: var(--shadow-1);
485
+
373
486
  /* Theme-level translucent override for open */
374
487
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
375
488
  background-color: color-mix(in srgb, var(--accent-a10), var(--accent-10) 10%);
@@ -385,21 +498,8 @@
385
498
  }
386
499
  }
387
500
  &:where(:active:not([data-state='open'])) {
388
- background-color: var(--accent-11);
389
-
390
- /* Theme-level translucent override for active */
391
- :where([data-panel-background='translucent'], [data-material='translucent']) & {
392
- background-color: color-mix(in srgb, var(--accent-a11), var(--accent-11) 10%);
393
- }
394
-
395
- /* Component-level overrides for active */
396
- &:where([data-panel-background='solid'], [data-material='solid']) {
397
- background-color: var(--accent-11);
398
- }
399
-
400
- &:where([data-panel-background='translucent'], [data-material='translucent']) {
401
- background-color: color-mix(in srgb, var(--accent-a11), var(--accent-11) 10%);
402
- }
501
+ filter: var(--base-button-solid-active-filter);
502
+ box-shadow: var(--shadow-1);
403
503
  }
404
504
  /* Better -webkit-tap-highlight-color */
405
505
  @media (pointer: coarse) {
@@ -434,6 +534,7 @@
434
534
  &:where(:hover) {
435
535
  background-color: var(--accent-12);
436
536
  filter: var(--base-button-solid-high-contrast-hover-filter);
537
+ box-shadow: var(--shadow-2);
437
538
 
438
539
  /* Theme-level translucent override for high contrast hover */
439
540
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
@@ -452,7 +553,8 @@
452
553
  }
453
554
  &:where([data-state='open']) {
454
555
  background-color: var(--accent-12);
455
- filter: var(--base-button-solid-high-contrast-hover-filter);
556
+ filter: var(--base-button-solid-high-contrast-open-filter);
557
+ box-shadow: var(--shadow-1);
456
558
 
457
559
  /* Theme-level translucent override for high contrast open */
458
560
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
@@ -469,22 +571,8 @@
469
571
  }
470
572
  }
471
573
  &:where(:active:not([data-state='open'])) {
472
- background-color: var(--accent-11);
473
574
  filter: var(--base-button-solid-high-contrast-active-filter);
474
-
475
- /* Theme-level translucent override for high contrast active */
476
- :where([data-panel-background='translucent'], [data-material='translucent']) & {
477
- background-color: color-mix(in srgb, var(--accent-a11), var(--accent-11) 10%);
478
- }
479
-
480
- /* Component-level overrides for high contrast active */
481
- &:where([data-panel-background='solid'], [data-material='solid']) {
482
- background-color: var(--accent-11);
483
- }
484
-
485
- &:where([data-panel-background='translucent'], [data-material='translucent']) {
486
- background-color: color-mix(in srgb, var(--accent-a11), var(--accent-11) 10%);
487
- }
575
+ box-shadow: var(--shadow-1);
488
576
  }
489
577
  }
490
578
  &:where([data-disabled]) {
@@ -538,7 +626,8 @@
538
626
  @media (hover: hover) {
539
627
  &:where(:hover) {
540
628
  background-color: var(--accent-4);
541
-
629
+ box-shadow: var(--shadow-2);
630
+
542
631
  /* Theme-level translucent override for hover */
543
632
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
544
633
  background-color: color-mix(in srgb, var(--accent-a4), var(--accent-4) 60%);
@@ -556,7 +645,8 @@
556
645
  }
557
646
  &:where([data-state='open']) {
558
647
  background-color: var(--accent-4);
559
-
648
+ box-shadow: var(--shadow-1);
649
+
560
650
  /* Theme-level translucent override for open */
561
651
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
562
652
  background-color: color-mix(in srgb, var(--accent-a4), var(--accent-4) 60%);
@@ -573,7 +663,8 @@
573
663
  }
574
664
  &:where(:active:not([data-state='open'])) {
575
665
  background-color: var(--accent-5);
576
-
666
+ box-shadow: var(--shadow-1);
667
+
577
668
  /* Theme-level translucent override for active */
578
669
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
579
670
  background-color: color-mix(in srgb, var(--accent-a5), var(--accent-5) 60%);
@@ -633,7 +724,7 @@
633
724
  &:where(:hover) {
634
725
  /* Base state: solid accent for solid panels */
635
726
  background-color: var(--accent-3);
636
-
727
+
637
728
  /* Theme-level translucent override for hover */
638
729
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
639
730
  background-color: color-mix(in srgb, var(--accent-a3), var(--accent-3) 60%);
@@ -661,7 +752,8 @@
661
752
  &:where([data-state='open']) {
662
753
  /* Base state: solid accent for solid panels */
663
754
  background-color: var(--accent-3);
664
-
755
+ box-shadow: var(--shadow-1);
756
+
665
757
  /* Theme-level translucent override for open */
666
758
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
667
759
  background-color: color-mix(in srgb, var(--accent-a3), var(--accent-3) 60%);
@@ -685,7 +777,8 @@
685
777
  &:where(:active:not([data-state='open'])) {
686
778
  /* Base state: solid accent for solid panels */
687
779
  background-color: var(--accent-4);
688
-
780
+ box-shadow: var(--shadow-1);
781
+
689
782
  /* Theme-level translucent override for active */
690
783
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
691
784
  background-color: color-mix(in srgb, var(--accent-a4), var(--accent-4) 60%);
@@ -742,7 +835,7 @@
742
835
  &:where(:hover) {
743
836
  background-color: var(--accent-2);
744
837
  box-shadow: inset 0 0 0 1px var(--accent-7);
745
-
838
+
746
839
  /* Theme-level translucent override for hover */
747
840
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
748
841
  background-color: color-mix(in srgb, var(--accent-a2), var(--accent-2) 60%);
@@ -763,8 +856,10 @@
763
856
  }
764
857
  &:where([data-state='open']) {
765
858
  background-color: var(--accent-2);
766
- box-shadow: inset 0 0 0 1px var(--accent-7);
767
-
859
+ box-shadow:
860
+ inset 0 0 0 1px var(--accent-7),
861
+ var(--shadow-1);
862
+
768
863
  /* Theme-level translucent override for open */
769
864
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
770
865
  background-color: color-mix(in srgb, var(--accent-a2), var(--accent-2) 60%);
@@ -784,8 +879,10 @@
784
879
  }
785
880
  &:where(:active:not([data-state='open'])) {
786
881
  background-color: var(--accent-3);
787
- box-shadow: inset 0 0 0 1px var(--accent-8);
788
-
882
+ box-shadow:
883
+ inset 0 0 0 1px var(--accent-8),
884
+ var(--shadow-1);
885
+
789
886
  /* Theme-level translucent override for active */
790
887
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
791
888
  background-color: color-mix(in srgb, var(--accent-a3), var(--accent-3) 60%);
@@ -849,7 +946,7 @@
849
946
  &:where(:hover) {
850
947
  background-color: var(--accent-3);
851
948
  box-shadow: inset 0 0 0 1px var(--accent-7);
852
-
949
+
853
950
  /* Theme-level translucent override for hover */
854
951
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
855
952
  background-color: color-mix(in srgb, var(--accent-a3), var(--accent-3) 60%);
@@ -870,8 +967,10 @@
870
967
  }
871
968
  &:where([data-state='open']) {
872
969
  background-color: var(--accent-3);
873
- box-shadow: inset 0 0 0 1px var(--accent-8);
874
-
970
+ box-shadow:
971
+ inset 0 0 0 1px var(--accent-8),
972
+ var(--shadow-1);
973
+
875
974
  /* Theme-level translucent override for open */
876
975
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
877
976
  background-color: color-mix(in srgb, var(--accent-a3), var(--accent-3) 60%);
@@ -891,8 +990,10 @@
891
990
  }
892
991
  &:where(:active:not([data-state='open'])) {
893
992
  background-color: var(--accent-4);
894
- box-shadow: inset 0 0 0 1px var(--accent-8);
895
-
993
+ box-shadow:
994
+ inset 0 0 0 1px var(--accent-8),
995
+ var(--shadow-1);
996
+
896
997
  /* Theme-level translucent override for active */
897
998
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
898
999
  background-color: color-mix(in srgb, var(--accent-a4), var(--accent-4) 60%);
@@ -940,7 +1041,7 @@
940
1041
  &:where(.rt-variant-classic) {
941
1042
  background-color: var(--gray-3);
942
1043
  box-shadow: var(--shadow-1);
943
-
1044
+
944
1045
  /* Theme-level translucent override for pressed */
945
1046
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
946
1047
  background-color: color-mix(in srgb, var(--gray-a3), var(--gray-3) 60%);
@@ -960,8 +1061,8 @@
960
1061
  &:where(.rt-variant-solid) {
961
1062
  background-color: var(--accent-10);
962
1063
  opacity: 0.9;
963
- transform: translateY(1px);
964
-
1064
+ box-shadow: var(--shadow-1);
1065
+
965
1066
  /* Theme-level translucent override for pressed */
966
1067
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
967
1068
  background-color: color-mix(in srgb, var(--accent-a10), var(--accent-10) 10%);
@@ -979,14 +1080,14 @@
979
1080
  &:where(.rt-high-contrast) {
980
1081
  background-color: var(--accent-12);
981
1082
  opacity: 0.85;
982
- transform: translateY(1px);
983
1083
  }
984
1084
  }
985
1085
 
986
1086
  /* Soft variant pressed */
987
1087
  &:where(.rt-variant-soft) {
988
1088
  background-color: var(--accent-5);
989
-
1089
+ box-shadow: var(--shadow-1);
1090
+
990
1091
  /* Theme-level translucent override for pressed */
991
1092
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
992
1093
  background-color: color-mix(in srgb, var(--accent-a5), var(--accent-5) 60%);
@@ -1005,7 +1106,8 @@
1005
1106
  /* Ghost variant pressed */
1006
1107
  &:where(.rt-variant-ghost) {
1007
1108
  background-color: var(--accent-4);
1008
-
1109
+ box-shadow: var(--shadow-1);
1110
+
1009
1111
  /* Theme-level translucent override for pressed */
1010
1112
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
1011
1113
  background-color: var(--accent-a4);
@@ -1024,8 +1126,10 @@
1024
1126
  /* Outline variant pressed */
1025
1127
  &:where(.rt-variant-outline) {
1026
1128
  background-color: var(--accent-3);
1027
- box-shadow: inset 0 0 0 1px var(--accent-8);
1028
-
1129
+ box-shadow:
1130
+ inset 0 0 0 1px var(--accent-8),
1131
+ var(--shadow-1);
1132
+
1029
1133
  /* Theme-level translucent override for pressed */
1030
1134
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
1031
1135
  background-color: color-mix(in srgb, var(--accent-a3), var(--accent-3) 60%);
@@ -1047,8 +1151,10 @@
1047
1151
  /* Surface variant pressed */
1048
1152
  &:where(.rt-variant-surface) {
1049
1153
  background-color: var(--accent-4);
1050
- box-shadow: inset 0 0 0 1px var(--accent-8);
1051
-
1154
+ box-shadow:
1155
+ inset 0 0 0 1px var(--accent-8),
1156
+ var(--shadow-1);
1157
+
1052
1158
  /* Theme-level translucent override for pressed */
1053
1159
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
1054
1160
  background-color: color-mix(in srgb, var(--accent-a4), var(--accent-4) 60%);
@@ -23,7 +23,7 @@ const sizes = ['1', '2', '3', '4'] as const;
23
23
  * - outline: Secondary actions that support primary actions
24
24
  * - ghost: Utility functions that don't compete for attention
25
25
  */
26
- const variants = ['classic', 'solid', 'soft', 'surface', 'outline', 'ghost'] as const;
26
+ const variants = ['classic', 'solid', 'soft', 'surface', 'outline', 'ghost', 'override'] as const;
27
27
 
28
28
  /**
29
29
  * Available panel background options (deprecated)
@@ -3,7 +3,7 @@ import { highContrastPropDef } from '../../props/high-contrast.prop.js';
3
3
 
4
4
  import type { PropDef } from '../../props/prop-def.js';
5
5
 
6
- const sizes = ['1', '2', '3'] as const;
6
+ const sizes = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] as const;
7
7
  const variants = ['classic', 'solid', 'soft', 'outline', 'surface'] as const;
8
8
  const materials = ['solid', 'translucent'] as const;
9
9
 
@@ -5,7 +5,7 @@ import { radiusPropDef } from '../props/radius.prop.js';
5
5
 
6
6
  import type { PropDef } from '../props/prop-def.js';
7
7
 
8
- const sizes = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] as const;
8
+ const sizes = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] as const;
9
9
  const variants = ['classic', 'solid', 'soft', 'surface', 'outline'] as const;
10
10
  const panelBackgrounds = ['solid', 'translucent'] as const;
11
11
  const materials = ['solid', 'translucent'] as const;
@@ -18,18 +18,6 @@
18
18
  * Button-specific styles that extend the base button
19
19
  * These styles handle icon opacity and specialized behaviors
20
20
  */
21
- .rt-Button {
22
- &:where(:not(.rt-variant-ghost)) {
23
- /*
24
- * Reduce icon opacity slightly for better visual hierarchy
25
- * This creates a subtle distinction between icons and text
26
- */
27
- /* stylelint-disable-next-line selector-max-type */
28
- & :where(svg) {
29
- opacity: 0.9;
30
- }
31
- }
32
- }
33
21
 
34
22
  /***************************************************************************************************
35
23
  * *
@@ -83,7 +71,7 @@
83
71
  padding-left: var(--space-2);
84
72
  padding-right: var(--space-2);
85
73
  }
86
-
74
+
87
75
  /*
88
76
  * Ghost variant padding for size 1
89
77
  * Reduced padding creates seamless text integration
@@ -94,7 +82,7 @@
94
82
  --button-ghost-padding-y: var(--space-1);
95
83
  }
96
84
  }
97
-
85
+
98
86
  /*
99
87
  * Size 2: Standard (32px height)
100
88
  * Default size for most interface contexts and general use
@@ -117,7 +105,7 @@
117
105
  padding-left: var(--space-3);
118
106
  padding-right: var(--space-3);
119
107
  }
120
-
108
+
121
109
  /* Ghost variant padding for size 2 */
122
110
  &:where(.rt-variant-ghost) {
123
111
  gap: var(--component-gap-ghost-2);
@@ -125,7 +113,7 @@
125
113
  --button-ghost-padding-y: var(--space-1);
126
114
  }
127
115
  }
128
-
116
+
129
117
  /*
130
118
  * Size 3: Large (40px height)
131
119
  * Recommended for important actions and mobile touch targets
@@ -148,7 +136,7 @@
148
136
  padding-left: var(--space-4);
149
137
  padding-right: var(--space-4);
150
138
  }
151
-
139
+
152
140
  /* Ghost variant padding for size 3 */
153
141
  &:where(.rt-variant-ghost) {
154
142
  gap: var(--component-gap-ghost-3);
@@ -156,7 +144,7 @@
156
144
  --button-ghost-padding-y: calc(var(--space-1) * 1.5);
157
145
  }
158
146
  }
159
-
147
+
160
148
  /*
161
149
  * Size 4: Extra Large (48px height)
162
150
  * Designed for hero sections and maximum visual impact
@@ -176,10 +164,14 @@
176
164
 
177
165
  /* Standard padding for non-ghost variants */
178
166
  &:where(:not(.rt-variant-ghost)) {
179
- padding-left: var(--space-5);
180
- padding-right: var(--space-5);
167
+ /**
168
+ * HACK: This padding calculation adds 4px to the space-4 token for better visual balance at size 4.
169
+ * This is a temporary workaround and should be replaced with a proper tokenized solution.
170
+ */
171
+ padding-left: calc(var(--space-4) + (4px * var(--scaling)));
172
+ padding-right: calc(var(--space-4) + (4px * var(--scaling)));
181
173
  }
182
-
174
+
183
175
  /* Ghost variant padding for size 4 */
184
176
  &:where(.rt-variant-ghost) {
185
177
  gap: var(--component-gap-ghost-4);