@auronui/styles 1.0.0

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 (268) hide show
  1. package/DATA_ATTRIBUTES.md +163 -0
  2. package/LICENSE +21 -0
  3. package/README.md +54 -0
  4. package/base/base.css +40 -0
  5. package/components/accordion.css +201 -0
  6. package/components/alert-dialog.css +307 -0
  7. package/components/alert.css +143 -0
  8. package/components/aspect-ratio.css +8 -0
  9. package/components/autocomplete.css +685 -0
  10. package/components/avatar.css +78 -0
  11. package/components/badge.css +186 -0
  12. package/components/breadcrumbs.css +76 -0
  13. package/components/button-group.css +126 -0
  14. package/components/button.css +282 -0
  15. package/components/calendar-year-picker.css +193 -0
  16. package/components/calendar.css +332 -0
  17. package/components/card.css +225 -0
  18. package/components/checkbox-group.css +7 -0
  19. package/components/checkbox.css +268 -0
  20. package/components/chip.css +227 -0
  21. package/components/close-button.css +65 -0
  22. package/components/collapsible-group.css +7 -0
  23. package/components/collapsible.css +74 -0
  24. package/components/color-area.css +81 -0
  25. package/components/color-field.css +99 -0
  26. package/components/color-input-group.css +153 -0
  27. package/components/color-picker.css +121 -0
  28. package/components/color-slider.css +266 -0
  29. package/components/color-swatch-picker.css +247 -0
  30. package/components/color-swatch.css +42 -0
  31. package/components/combo-box.css +203 -0
  32. package/components/date-input-group.css +125 -0
  33. package/components/date-input.css +529 -0
  34. package/components/date-picker.css +86 -0
  35. package/components/date-range-field.css +538 -0
  36. package/components/date-range-picker.css +93 -0
  37. package/components/description.css +4 -0
  38. package/components/drawer.css +222 -0
  39. package/components/dropdown.css +67 -0
  40. package/components/empty-state.css +4 -0
  41. package/components/error-message.css +13 -0
  42. package/components/field-error.css +19 -0
  43. package/components/fieldset.css +39 -0
  44. package/components/header.css +7 -0
  45. package/components/index.css +164 -0
  46. package/components/input-otp.css +124 -0
  47. package/components/input.css +603 -0
  48. package/components/kbd.css +27 -0
  49. package/components/label.css +28 -0
  50. package/components/link.css +144 -0
  51. package/components/list-box-item.css +29 -0
  52. package/components/list-box-section.css +13 -0
  53. package/components/list-box.css +11 -0
  54. package/components/menu-item.css +68 -0
  55. package/components/menu-section.css +18 -0
  56. package/components/menu.css +7 -0
  57. package/components/meter.css +104 -0
  58. package/components/modal.css +335 -0
  59. package/components/number-field.css +395 -0
  60. package/components/pagination.css +157 -0
  61. package/components/popover.css +96 -0
  62. package/components/progress-bar.css +126 -0
  63. package/components/progress-circle.css +82 -0
  64. package/components/radio-group.css +47 -0
  65. package/components/radio.css +157 -0
  66. package/components/range-calendar.css +402 -0
  67. package/components/scroll-area.css +70 -0
  68. package/components/scroll-shadow.css +77 -0
  69. package/components/select.css +649 -0
  70. package/components/separator.css +59 -0
  71. package/components/skeleton.css +48 -0
  72. package/components/slider.css +155 -0
  73. package/components/spinner.css +42 -0
  74. package/components/splitter.css +74 -0
  75. package/components/stepper.css +160 -0
  76. package/components/surface.css +23 -0
  77. package/components/switch-group.css +17 -0
  78. package/components/switch.css +194 -0
  79. package/components/table.css +341 -0
  80. package/components/tabs.css +262 -0
  81. package/components/tag-group.css +66 -0
  82. package/components/tag.css +99 -0
  83. package/components/textarea.css +536 -0
  84. package/components/time-field.css +530 -0
  85. package/components/toast.css +267 -0
  86. package/components/toggle-button-group.css +174 -0
  87. package/components/toggle-button.css +149 -0
  88. package/components/toolbar.css +32 -0
  89. package/components/tooltip.css +47 -0
  90. package/components/tree.css +81 -0
  91. package/index.css +29 -0
  92. package/package.json +415 -0
  93. package/src/components/accordion/accordion.styles.ts +46 -0
  94. package/src/components/accordion/index.ts +1 -0
  95. package/src/components/alert/alert.styles.ts +37 -0
  96. package/src/components/alert/index.ts +1 -0
  97. package/src/components/alert-dialog/alert-dialog.styles.ts +72 -0
  98. package/src/components/alert-dialog/index.ts +1 -0
  99. package/src/components/aspect-ratio/aspect-ratio.styles.ts +10 -0
  100. package/src/components/aspect-ratio/index.ts +1 -0
  101. package/src/components/autocomplete/autocomplete.styles.ts +86 -0
  102. package/src/components/autocomplete/index.ts +1 -0
  103. package/src/components/avatar/avatar.styles.ts +53 -0
  104. package/src/components/avatar/index.ts +1 -0
  105. package/src/components/badge/badge.styles.ts +77 -0
  106. package/src/components/badge/index.ts +1 -0
  107. package/src/components/breadcrumbs/breadcrumbs.styles.ts +14 -0
  108. package/src/components/breadcrumbs/index.ts +1 -0
  109. package/src/components/button/__tests__/button.styles.test.ts +79 -0
  110. package/src/components/button/button.styles.ts +65 -0
  111. package/src/components/button/index.ts +1 -0
  112. package/src/components/button-group/button-group.styles.ts +32 -0
  113. package/src/components/button-group/index.ts +1 -0
  114. package/src/components/calendar/calendar.styles.ts +60 -0
  115. package/src/components/calendar/index.ts +1 -0
  116. package/src/components/calendar-year-picker/calendar-year-picker.styles.ts +15 -0
  117. package/src/components/calendar-year-picker/index.ts +1 -0
  118. package/src/components/card/card.styles.ts +65 -0
  119. package/src/components/card/index.ts +1 -0
  120. package/src/components/checkbox/checkbox.styles.ts +27 -0
  121. package/src/components/checkbox/index.ts +1 -0
  122. package/src/components/checkbox-group/checkbox-group.styles.ts +18 -0
  123. package/src/components/checkbox-group/index.ts +1 -0
  124. package/src/components/chip/chip.styles.ts +65 -0
  125. package/src/components/chip/index.ts +1 -0
  126. package/src/components/close-button/close-button.styles.ts +17 -0
  127. package/src/components/close-button/index.ts +1 -0
  128. package/src/components/collapsible/collapsible.styles.ts +25 -0
  129. package/src/components/collapsible/index.ts +1 -0
  130. package/src/components/collapsible-group/collapsible-group.styles.ts +13 -0
  131. package/src/components/collapsible-group/index.ts +1 -0
  132. package/src/components/color-area/color-area.styles.ts +23 -0
  133. package/src/components/color-area/index.ts +1 -0
  134. package/src/components/color-field/color-field.styles.ts +18 -0
  135. package/src/components/color-field/index.ts +1 -0
  136. package/src/components/color-input-group/color-input-group.styles.ts +34 -0
  137. package/src/components/color-input-group/index.ts +1 -0
  138. package/src/components/color-picker/color-picker.styles.ts +13 -0
  139. package/src/components/color-picker/index.ts +1 -0
  140. package/src/components/color-slider/color-slider.styles.ts +14 -0
  141. package/src/components/color-slider/index.ts +1 -0
  142. package/src/components/color-swatch/color-swatch.styles.ts +26 -0
  143. package/src/components/color-swatch/index.ts +1 -0
  144. package/src/components/color-swatch-picker/color-swatch-picker.styles.ts +54 -0
  145. package/src/components/color-swatch-picker/index.ts +1 -0
  146. package/src/components/combo-box/combo-box.styles.ts +26 -0
  147. package/src/components/combo-box/index.ts +1 -0
  148. package/src/components/date-input/date-input.styles.ts +86 -0
  149. package/src/components/date-input/index.ts +1 -0
  150. package/src/components/date-picker/date-picker.styles.ts +14 -0
  151. package/src/components/date-picker/index.ts +1 -0
  152. package/src/components/date-range-field/date-range-field.styles.ts +87 -0
  153. package/src/components/date-range-field/index.ts +1 -0
  154. package/src/components/date-range-picker/date-range-picker.styles.ts +14 -0
  155. package/src/components/date-range-picker/index.ts +1 -0
  156. package/src/components/description/description.styles.ts +9 -0
  157. package/src/components/description/index.ts +1 -0
  158. package/src/components/drawer/drawer.styles.ts +55 -0
  159. package/src/components/drawer/index.ts +1 -0
  160. package/src/components/dropdown/dropdown.styles.ts +14 -0
  161. package/src/components/dropdown/index.ts +1 -0
  162. package/src/components/empty-state/empty-state.styles.ts +9 -0
  163. package/src/components/empty-state/index.ts +1 -0
  164. package/src/components/error-message/error-message.styles.ts +9 -0
  165. package/src/components/error-message/index.ts +1 -0
  166. package/src/components/fieldset/fieldset.styles.ts +29 -0
  167. package/src/components/fieldset/index.ts +1 -0
  168. package/src/components/header/header.styles.ts +5 -0
  169. package/src/components/header/index.ts +1 -0
  170. package/src/components/index.ts +84 -0
  171. package/src/components/input/index.ts +1 -0
  172. package/src/components/input/input.styles.ts +87 -0
  173. package/src/components/input-otp/index.ts +1 -0
  174. package/src/components/input-otp/input-otp.styles.ts +30 -0
  175. package/src/components/kbd/index.ts +1 -0
  176. package/src/components/kbd/kbd.styles.ts +20 -0
  177. package/src/components/label/index.ts +1 -0
  178. package/src/components/label/label.styles.ts +25 -0
  179. package/src/components/link/index.ts +1 -0
  180. package/src/components/link/link.styles.ts +38 -0
  181. package/src/components/list-box/index.ts +1 -0
  182. package/src/components/list-box/list-box.styles.ts +18 -0
  183. package/src/components/list-box-item/index.ts +1 -0
  184. package/src/components/list-box-item/list-box-item.styles.ts +25 -0
  185. package/src/components/list-box-section/index.ts +1 -0
  186. package/src/components/list-box-section/list-box-section.styles.ts +13 -0
  187. package/src/components/menu/index.ts +1 -0
  188. package/src/components/menu/menu.styles.ts +9 -0
  189. package/src/components/menu-item/index.ts +1 -0
  190. package/src/components/menu-item/menu-item.styles.ts +26 -0
  191. package/src/components/menu-section/index.ts +1 -0
  192. package/src/components/menu-section/menu-section.styles.ts +14 -0
  193. package/src/components/meter/index.ts +1 -0
  194. package/src/components/meter/meter.styles.ts +48 -0
  195. package/src/components/modal/index.ts +1 -0
  196. package/src/components/modal/modal.styles.ts +70 -0
  197. package/src/components/number-field/index.ts +1 -0
  198. package/src/components/number-field/number-field.styles.ts +80 -0
  199. package/src/components/pagination/index.ts +1 -0
  200. package/src/components/pagination/pagination.styles.ts +32 -0
  201. package/src/components/popover/index.ts +1 -0
  202. package/src/components/popover/popover.styles.ts +14 -0
  203. package/src/components/progress-bar/index.ts +1 -0
  204. package/src/components/progress-bar/progress-bar.styles.ts +97 -0
  205. package/src/components/progress-circle/index.ts +1 -0
  206. package/src/components/progress-circle/progress-circle.styles.ts +74 -0
  207. package/src/components/radio/index.ts +1 -0
  208. package/src/components/radio/radio.styles.ts +14 -0
  209. package/src/components/radio-group/index.ts +1 -0
  210. package/src/components/radio-group/radio-group.styles.ts +18 -0
  211. package/src/components/range-calendar/index.ts +1 -0
  212. package/src/components/range-calendar/range-calendar.styles.ts +60 -0
  213. package/src/components/scroll-shadow/index.ts +1 -0
  214. package/src/components/scroll-shadow/scroll-shadow.styles.ts +37 -0
  215. package/src/components/select/index.ts +1 -0
  216. package/src/components/select/select.styles.ts +86 -0
  217. package/src/components/separator/index.ts +1 -0
  218. package/src/components/separator/separator.styles.ts +25 -0
  219. package/src/components/skeleton/index.ts +1 -0
  220. package/src/components/skeleton/skeleton.styles.ts +21 -0
  221. package/src/components/slider/index.ts +1 -0
  222. package/src/components/slider/slider.styles.ts +40 -0
  223. package/src/components/spinner/index.ts +1 -0
  224. package/src/components/spinner/spinner.styles.ts +28 -0
  225. package/src/components/splitter/index.ts +1 -0
  226. package/src/components/splitter/splitter.styles.ts +28 -0
  227. package/src/components/stepper/index.ts +1 -0
  228. package/src/components/stepper/stepper.styles.ts +57 -0
  229. package/src/components/surface/index.ts +1 -0
  230. package/src/components/surface/surface.styles.ts +20 -0
  231. package/src/components/switch/index.ts +1 -0
  232. package/src/components/switch/switch.styles.ts +31 -0
  233. package/src/components/switch-group/index.ts +1 -0
  234. package/src/components/switch-group/switch-group.styles.ts +25 -0
  235. package/src/components/table/index.ts +1 -0
  236. package/src/components/table/table.styles.ts +47 -0
  237. package/src/components/tabs/index.ts +1 -0
  238. package/src/components/tabs/tabs.styles.ts +31 -0
  239. package/src/components/tag/index.ts +1 -0
  240. package/src/components/tag/tag.styles.ts +37 -0
  241. package/src/components/tag-group/index.ts +1 -0
  242. package/src/components/tag-group/tag-group.styles.ts +12 -0
  243. package/src/components/text/index.ts +1 -0
  244. package/src/components/text/text.styles.ts +29 -0
  245. package/src/components/textarea/index.ts +1 -0
  246. package/src/components/textarea/textarea.styles.ts +86 -0
  247. package/src/components/time-field/index.ts +1 -0
  248. package/src/components/time-field/time-field.styles.ts +86 -0
  249. package/src/components/toast/index.ts +1 -0
  250. package/src/components/toast/toast.styles.ts +67 -0
  251. package/src/components/toggle-button/index.ts +1 -0
  252. package/src/components/toggle-button/toggle-button.styles.ts +28 -0
  253. package/src/components/toggle-button-group/index.ts +1 -0
  254. package/src/components/toggle-button-group/toggle-button-group.styles.ts +39 -0
  255. package/src/components/toolbar/index.ts +1 -0
  256. package/src/components/toolbar/toolbar.styles.ts +23 -0
  257. package/src/components/tooltip/index.ts +1 -0
  258. package/src/components/tooltip/tooltip.styles.ts +12 -0
  259. package/src/components/tree/index.ts +1 -0
  260. package/src/components/tree/tree.styles.ts +33 -0
  261. package/src/index.ts +5 -0
  262. package/src/utils/index.ts +15 -0
  263. package/themes/default/components/index.css +6 -0
  264. package/themes/default/index.css +8 -0
  265. package/themes/default/variables.css +168 -0
  266. package/themes/shared/theme.css +196 -0
  267. package/utilities/index.css +244 -0
  268. package/variants/index.css +106 -0
@@ -0,0 +1,268 @@
1
+ /* ==========================================================================
2
+ Base checkbox styles
3
+ ========================================================================== */
4
+
5
+ .checkbox {
6
+ @apply flex gap-3 outline-none no-highlight;
7
+
8
+ cursor: var(--cursor-interactive);
9
+
10
+ /* Align center when there's no description */
11
+ &:not(:has([data-slot="description"])) {
12
+ @apply items-center;
13
+ }
14
+
15
+ /* Align start when there's a description */
16
+ &:has([data-slot="description"]) {
17
+ @apply items-start;
18
+ }
19
+
20
+ [data-slot="label"] {
21
+ @apply select-none;
22
+ }
23
+
24
+ [data-slot="description"] {
25
+ @apply text-wrap select-none;
26
+ }
27
+
28
+ /* Disabled state */
29
+ &:disabled,
30
+ &[data-disabled],
31
+ &[aria-disabled="true"] {
32
+ @apply status-disabled;
33
+ }
34
+
35
+ /* Indicator styles */
36
+ &[data-state="checked"],
37
+ &[data-state="indeterminate"] {
38
+ .checkbox__indicator {
39
+ border-color: var(--accent-foreground);
40
+ background: var(--accent-hover);
41
+ }
42
+ }
43
+
44
+ /* Checkmark SVG indicator */
45
+ [data-slot="checkbox-default-indicator--checkmark"] {
46
+ @apply size-2.5 stroke-[2.5px] text-accent-foreground;
47
+
48
+ /**
49
+ * Transitions
50
+ */
51
+ @apply transition-all duration-300 motion-reduce:transition-none;
52
+ }
53
+
54
+ &[data-state="checked"] [data-slot="checkbox-default-indicator--checkmark"] {
55
+ transition: stroke-dashoffset 300ms linear 300ms;
56
+ }
57
+
58
+ /* Invalid + Selected: checkmark icon color */
59
+ &[aria-invalid="true"][data-state="checked"] [data-slot="checkbox-default-indicator--checkmark"],
60
+ &[aria-invalid="true"][aria-checked="true"] [data-slot="checkbox-default-indicator--checkmark"],
61
+ &[aria-invalid="true"][data-state="checked"] [data-slot="checkbox-default-indicator--checkmark"],
62
+ &[aria-invalid="true"][aria-checked="true"] [data-slot="checkbox-default-indicator--checkmark"] {
63
+ @apply text-danger-foreground;
64
+ }
65
+
66
+ /* Indeterminate line indicator */
67
+ &[data-state="indeterminate"] {
68
+ [data-slot="checkbox-default-indicator--indeterminate"] {
69
+ @apply size-3;
70
+ }
71
+ }
72
+
73
+ /* Invalid + Indeterminate: indeterminate icon color */
74
+ &[data-state="indeterminate"][aria-invalid="true"]
75
+ [data-slot="checkbox-default-indicator--indeterminate"],
76
+ &[data-state="indeterminate"][aria-invalid="true"]
77
+ [data-slot="checkbox-default-indicator--indeterminate"] {
78
+ @apply text-danger-foreground;
79
+ }
80
+ }
81
+
82
+ /* ==========================================================================
83
+ Checkbox control (the square button)
84
+ ========================================================================== */
85
+
86
+ .checkbox__control {
87
+ @apply relative inline-flex size-4 shrink-0 items-center justify-center overflow-hidden rounded-md border border-border-secondary bg-field shadow-field outline-none no-highlight;
88
+
89
+ /**
90
+ * Transitions
91
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
92
+ */
93
+ transition:
94
+ background-color 300ms var(--ease-out),
95
+ transform 300ms var(--ease-out);
96
+ @apply motion-reduce:transition-none;
97
+
98
+ cursor: var(--cursor-interactive);
99
+
100
+ /* Add top margin when there's a description */
101
+ .checkbox:has([data-slot="description"]) & {
102
+ @apply mt-0.5;
103
+ }
104
+
105
+ /* Background indicator pseudo-element */
106
+ &::before {
107
+ @apply pointer-events-none absolute inset-0 z-0 origin-center scale-70 rounded-md bg-accent opacity-0 content-[''];
108
+
109
+ /**
110
+ * Transitions
111
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
112
+ */
113
+ transition:
114
+ scale 300ms var(--ease-linear),
115
+ opacity 300ms var(--ease-linear),
116
+ background-color 300ms var(--ease-out);
117
+ @apply motion-reduce:transition-none;
118
+ }
119
+
120
+ /* Interactive states */
121
+ /* Focus */
122
+ .checkbox:focus-visible &,
123
+ .checkbox:focus-visible & {
124
+ @apply status-focused;
125
+ }
126
+
127
+ /* Hover */
128
+ .checkbox:hover &,
129
+ .checkbox:hover & {
130
+ @apply border-field-border-hover;
131
+
132
+ &::before {
133
+ @apply bg-accent-hover;
134
+ }
135
+ }
136
+
137
+ /* Pressed */
138
+ .checkbox:active &,
139
+ .checkbox:active & {
140
+ }
141
+
142
+ /* Selection states */
143
+ /* Selected */
144
+ .checkbox[aria-checked="true"] &,
145
+ .checkbox[data-state="checked"] & {
146
+ @apply border-transparent text-accent-foreground border-0;
147
+
148
+ &::before {
149
+ @apply scale-100 opacity-100;
150
+ }
151
+ }
152
+
153
+ /* Indeterminate */
154
+ .checkbox[data-state="indeterminate"] & {
155
+ @apply bg-accent text-accent-foreground;
156
+ }
157
+
158
+ /* Indeterminate + Pressed */
159
+ .checkbox:active[data-state="indeterminate"] &,
160
+ .checkbox:active[data-state="indeterminate"] & {
161
+ @apply bg-accent-hover;
162
+ }
163
+
164
+ /* Validation states */
165
+ /* Invalid (only when not selected/indeterminate) */
166
+ .checkbox[aria-invalid="true"]:not([aria-checked="true"]):not([data-state="checked"]):not(
167
+ [data-state="indeterminate"]
168
+ )
169
+ &,
170
+ .checkbox[aria-invalid="true"]:not([aria-checked="true"]):not([data-state="checked"]):not(
171
+ [data-state="indeterminate"]
172
+ )
173
+ & {
174
+ @apply status-invalid-field;
175
+ }
176
+
177
+ /* Invalid + Selected */
178
+ .checkbox[aria-invalid="true"][aria-checked="true"] &,
179
+ .checkbox[aria-invalid="true"][data-state="checked"] &,
180
+ .checkbox[aria-invalid="true"][aria-checked="true"] &,
181
+ .checkbox[aria-invalid="true"][data-state="checked"] & {
182
+ @apply border-transparent bg-danger text-danger-foreground;
183
+
184
+ &::before {
185
+ @apply scale-100 bg-danger opacity-100;
186
+ }
187
+ }
188
+
189
+ /* Invalid + Indeterminate */
190
+ .checkbox[data-state="indeterminate"][aria-invalid="true"] &,
191
+ .checkbox[data-state="indeterminate"][aria-invalid="true"] & {
192
+ @apply bg-danger text-danger-foreground;
193
+ }
194
+ }
195
+
196
+ /* ==========================================================================
197
+ Checkbox indicator
198
+ ========================================================================== */
199
+
200
+ .checkbox__indicator {
201
+ @apply relative z-10 flex size-3 items-center justify-center;
202
+
203
+ & svg {
204
+ @apply transform-gpu;
205
+ }
206
+ }
207
+
208
+ /* ==========================================================================
209
+ Checkbox content wrapper
210
+ ========================================================================== */
211
+
212
+ .checkbox__content {
213
+ @apply flex flex-col gap-0;
214
+ }
215
+
216
+ /* ==========================================================================
217
+ Disabled modifier
218
+ ========================================================================== */
219
+
220
+ .checkbox--disabled {
221
+ @apply status-disabled;
222
+ }
223
+
224
+ /* ==========================================================================
225
+ Variant property definitions
226
+ ========================================================================== */
227
+
228
+ .checkbox--primary {
229
+ /* Default styles */
230
+ }
231
+
232
+ .checkbox--secondary .checkbox__control {
233
+ @apply shadow-none;
234
+ background-color: var(--checkbox-control-bg);
235
+
236
+ --checkbox-control-bg: var(--color-default);
237
+
238
+ /* Hover state */
239
+ .checkbox:hover &,
240
+ .checkbox:hover & {
241
+ @apply border-field-border-hover;
242
+ }
243
+ }
244
+
245
+ /* Unselected state background for secondary variant */
246
+ .checkbox--secondary:not([aria-checked="true"]):not([data-state="checked"]):not(
247
+ [data-state="indeterminate"]
248
+ )
249
+ .checkbox__control {
250
+ background-color: var(--checkbox-control-bg);
251
+ }
252
+
253
+ /* Selected state on secondary variant */
254
+ .checkbox--secondary[aria-checked="true"] .checkbox__control,
255
+ .checkbox--secondary[data-state="checked"] .checkbox__control {
256
+ &::before {
257
+ @apply bg-accent;
258
+ }
259
+ }
260
+
261
+ /* Indeterminate state on secondary variant */
262
+ .checkbox--secondary[data-state="indeterminate"] .checkbox__control {
263
+ @apply bg-accent;
264
+
265
+ &::before {
266
+ @apply bg-accent;
267
+ }
268
+ }
@@ -0,0 +1,227 @@
1
+ /* ==========================================================================
2
+ Chip - Compact pill-shaped element for tags, statuses, filters, and labels.
3
+ ========================================================================== */
4
+
5
+ /* Base styles */
6
+ .chip {
7
+ @apply inline-flex shrink-0 items-center gap-1 rounded-full px-2.5 text-xs leading-none font-medium align-middle;
8
+
9
+ /* Default tokens */
10
+ --chip-bg: transparent;
11
+ --chip-fg: currentColor;
12
+ --chip-border: transparent;
13
+
14
+ height: 1.75rem; /* 28px — md default */
15
+ background-color: var(--chip-bg);
16
+ color: var(--chip-fg);
17
+ border: 1px solid var(--chip-border);
18
+ transition:
19
+ background-color 0.15s ease,
20
+ border-color 0.15s ease,
21
+ color 0.15s ease;
22
+ }
23
+
24
+ .chip__label {
25
+ @apply inline-flex items-center px-0.5 leading-none;
26
+ }
27
+
28
+ .chip__start-content,
29
+ .chip__end-content {
30
+ @apply inline-flex shrink-0 items-center justify-center;
31
+ }
32
+
33
+ .chip__start-content > svg,
34
+ .chip__end-content > svg {
35
+ @apply h-3.5 w-3.5;
36
+ }
37
+
38
+ .chip__dot {
39
+ @apply inline-block shrink-0 rounded-full;
40
+ width: 0.5rem;
41
+ height: 0.5rem;
42
+ background-color: currentColor;
43
+ }
44
+
45
+ .chip__close-button {
46
+ @apply inline-flex shrink-0 items-center justify-center rounded-full cursor-pointer outline-none;
47
+ width: 1rem;
48
+ height: 1rem;
49
+ margin-inline-start: 0.125rem;
50
+ margin-inline-end: -0.25rem;
51
+ color: currentColor;
52
+ opacity: 0.7;
53
+ background-color: transparent;
54
+ border: none;
55
+ transition: opacity 0.15s ease, background-color 0.15s ease;
56
+ }
57
+
58
+ .chip__close-button:hover {
59
+ opacity: 1;
60
+ background-color: color-mix(in srgb, currentColor 15%, transparent);
61
+ }
62
+
63
+ .chip__close-button:focus-visible {
64
+ outline: 2px solid var(--color-focus, currentColor);
65
+ outline-offset: 1px;
66
+ }
67
+
68
+ .chip__close-button > svg {
69
+ @apply h-3 w-3;
70
+ }
71
+
72
+ /* ==========================================================================
73
+ Color variants - set foreground color
74
+ ========================================================================== */
75
+
76
+ .chip--accent {
77
+ --chip-fg: var(--color-accent);
78
+ }
79
+
80
+ .chip--danger {
81
+ --chip-fg: var(--color-danger);
82
+ }
83
+
84
+ .chip--default {
85
+ --chip-fg: var(--color-default-foreground);
86
+ }
87
+
88
+ .chip--success {
89
+ --chip-fg: var(--color-success);
90
+ }
91
+
92
+ .chip--warning {
93
+ --chip-fg: var(--color-warning);
94
+ }
95
+
96
+ /* ==========================================================================
97
+ Variant styles
98
+ ========================================================================== */
99
+
100
+ /* Solid: filled background using the color, contrasting foreground */
101
+ .chip--solid {
102
+ /* Compound variants below set --chip-bg / --chip-fg per color */
103
+ }
104
+
105
+ /* Soft: muted/translucent background, colored foreground */
106
+ .chip--soft {
107
+ /* Compound variants below set --chip-bg / --chip-fg per color */
108
+ }
109
+
110
+ /* Outlined: transparent background with a colored border */
111
+ .chip--outlined {
112
+ --chip-bg: transparent;
113
+ --chip-border: color-mix(in srgb, currentColor 45%, transparent);
114
+ }
115
+
116
+ /* Text: no background, no border — just colored text */
117
+ .chip--text {
118
+ --chip-bg: transparent;
119
+ --chip-border: transparent;
120
+ @apply px-1;
121
+ }
122
+
123
+ /* ==========================================================================
124
+ Size variants
125
+ ========================================================================== */
126
+
127
+ .chip--sm {
128
+ @apply px-2 text-[11px];
129
+ height: 1.375rem; /* 22px */
130
+ gap: 0.1875rem;
131
+ }
132
+
133
+ .chip--sm.chip--text {
134
+ @apply px-1;
135
+ }
136
+
137
+ .chip--sm .chip__close-button {
138
+ width: 0.875rem;
139
+ height: 0.875rem;
140
+ }
141
+
142
+ .chip--sm .chip__dot {
143
+ width: 0.4375rem;
144
+ height: 0.4375rem;
145
+ }
146
+
147
+ .chip--md {
148
+ /* Defaults applied on .chip */
149
+ }
150
+
151
+ .chip--lg {
152
+ @apply px-3 text-sm;
153
+ height: 2rem; /* 32px */
154
+ gap: 0.375rem;
155
+ }
156
+
157
+ .chip--lg.chip--text {
158
+ @apply px-1.5;
159
+ }
160
+
161
+ .chip--lg .chip__close-button {
162
+ width: 1.125rem;
163
+ height: 1.125rem;
164
+ }
165
+
166
+ .chip--lg .chip__dot {
167
+ width: 0.5625rem;
168
+ height: 0.5625rem;
169
+ }
170
+
171
+ /* ==========================================================================
172
+ Compound variants - Solid (filled backgrounds)
173
+ ========================================================================== */
174
+
175
+ .chip--solid.chip--default {
176
+ --chip-bg: var(--color-default);
177
+ --chip-fg: var(--color-default-foreground);
178
+ }
179
+
180
+ .chip--solid.chip--accent {
181
+ --chip-bg: var(--color-accent);
182
+ --chip-fg: var(--color-accent-foreground);
183
+ }
184
+
185
+ .chip--solid.chip--success {
186
+ --chip-bg: var(--color-success);
187
+ --chip-fg: var(--color-success-foreground);
188
+ }
189
+
190
+ .chip--solid.chip--warning {
191
+ --chip-bg: var(--color-warning);
192
+ --chip-fg: var(--color-warning-foreground);
193
+ }
194
+
195
+ .chip--solid.chip--danger {
196
+ --chip-bg: var(--color-danger);
197
+ --chip-fg: var(--color-danger-foreground);
198
+ }
199
+
200
+ /* ==========================================================================
201
+ Compound variants - Soft (muted backgrounds)
202
+ ========================================================================== */
203
+
204
+ .chip--soft.chip--default {
205
+ --chip-bg: color-mix(in srgb, var(--color-default) 40%, transparent);
206
+ --chip-fg: var(--color-default-foreground);
207
+ }
208
+
209
+ .chip--soft.chip--accent {
210
+ --chip-bg: var(--color-accent-soft);
211
+ --chip-fg: var(--color-accent-soft-foreground);
212
+ }
213
+
214
+ .chip--soft.chip--success {
215
+ --chip-bg: var(--color-success-soft);
216
+ --chip-fg: var(--color-success-soft-foreground);
217
+ }
218
+
219
+ .chip--soft.chip--warning {
220
+ --chip-bg: var(--color-warning-soft);
221
+ --chip-fg: var(--color-warning-soft-foreground);
222
+ }
223
+
224
+ .chip--soft.chip--danger {
225
+ --chip-bg: var(--color-danger-soft);
226
+ --chip-fg: var(--color-danger-soft-foreground);
227
+ }
@@ -0,0 +1,65 @@
1
+ /* Close Button component styles */
2
+
3
+ /* Base close button styles */
4
+ .close-button {
5
+ @apply relative isolate inline-flex h-6 w-6 shrink-0 origin-center items-center justify-center rounded-xl p-1 select-none no-highlight;
6
+
7
+ /* Cursor */
8
+ cursor: var(--cursor-interactive);
9
+
10
+ /**
11
+ * Transitions
12
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
13
+ */
14
+ transition:
15
+ transform 300ms var(--ease-out-quart),
16
+ color 300ms var(--ease-out),
17
+ background-color 300ms var(--ease-out),
18
+ box-shadow 300ms var(--ease-out);
19
+ @apply transform-gpu motion-reduce:transition-none;
20
+
21
+ /* Focus visible state */
22
+ &:focus-visible:not(:focus),
23
+ &[data-focus-visible="true"] {
24
+ @apply status-focused;
25
+ }
26
+
27
+ /* Disabled state */
28
+ &:disabled,
29
+ &[aria-disabled="true"] {
30
+ @apply status-disabled;
31
+ }
32
+
33
+ /* Pending state */
34
+ &[data-pending="true"] {
35
+ @apply status-pending;
36
+ }
37
+
38
+ /* SVG icon styling*/
39
+ & svg {
40
+ @apply pointer-events-none;
41
+ @apply size-4 shrink-0 self-center;
42
+ @apply -mx-0.5 my-0.5;
43
+ }
44
+ }
45
+
46
+ /* Variants */
47
+ .close-button--default {
48
+ @apply bg-default text-muted;
49
+
50
+ &:active,
51
+ &[data-pressed="true"] {
52
+ }
53
+
54
+ @media (hover: hover) {
55
+ &:hover,
56
+ &[data-hovered="true"] {
57
+ @apply bg-default-hover;
58
+ }
59
+ }
60
+
61
+ &:active,
62
+ &[data-pressed="true"] {
63
+ transform: scale(0.93);
64
+ }
65
+ }
@@ -0,0 +1,7 @@
1
+ /* Base collapsible-group styles */
2
+ .collapsible-group {
3
+ @apply w-full;
4
+
5
+ /* Performance optimization - contain layout changes */
6
+ contain: layout style;
7
+ }
@@ -0,0 +1,74 @@
1
+ /* Base collapsible styles */
2
+ .collapsible {
3
+ @apply relative w-full;
4
+ }
5
+
6
+ .collapsible__trigger {
7
+ cursor: var(--cursor-interactive);
8
+ @apply flex w-full items-center text-left font-medium no-highlight rounded-lg px-4 py-3.5 text-sm;
9
+
10
+ transition:
11
+ background-color 200ms var(--ease-out),
12
+ color 200ms var(--ease-out),
13
+ opacity 300ms var(--ease-out),
14
+ box-shadow 300ms var(--ease-out),
15
+ transform 120ms var(--ease-out);
16
+ @apply motion-reduce:transition-none;
17
+
18
+ /* Hover state — subtle surface lift */
19
+ @media (hover: hover) {
20
+ &:hover {
21
+ background-color: color-mix(in oklab, var(--color-foreground) 4%, transparent);
22
+ }
23
+ }
24
+
25
+ /* Pressed state — tactile feedback */
26
+ &:active:not([aria-disabled="true"]),
27
+ &[data-pressed="true"] {
28
+ transform: scale(0.995);
29
+ background-color: color-mix(in oklab, var(--color-foreground) 7%, transparent);
30
+ }
31
+
32
+ &[aria-expanded="true"] {
33
+ @apply text-foreground;
34
+ }
35
+
36
+ /* Focus state */
37
+ &:focus-visible:not(:focus),
38
+ &[data-focus-visible="true"] {
39
+ @apply status-focused;
40
+ }
41
+
42
+ /* Disabled state */
43
+ &:disabled,
44
+ &[aria-disabled="true"] {
45
+ @apply status-disabled;
46
+ }
47
+ }
48
+
49
+ .collapsible__indicator {
50
+ @apply ml-auto size-4 shrink-0 text-muted;
51
+ display: inline-flex;
52
+ align-items: center;
53
+ justify-content: center;
54
+
55
+ transition:
56
+ transform 250ms cubic-bezier(0.4, 0, 0.2, 1),
57
+ color 200ms var(--ease-out);
58
+ @apply motion-reduce:transition-none;
59
+
60
+ /* Expanded state — rotate + color lift */
61
+ &[data-state="open"] {
62
+ @apply -rotate-180 text-foreground;
63
+ }
64
+ }
65
+
66
+ .collapsible__body {
67
+ @apply text-sm;
68
+
69
+ /* Height/opacity animation driven by motion-v in CollapsibleContent.vue */
70
+ }
71
+
72
+ .collapsible__body-inner {
73
+ @apply px-4 pt-1 pb-4 text-sm text-muted leading-relaxed;
74
+ }