@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,335 @@
1
+ /* -------------------------------------------------------------------------------------------------
2
+ * Modal Component Styles
3
+ * Block: modal
4
+ * -----------------------------------------------------------------------------------------------*/
5
+
6
+ /**
7
+ * Element: trigger - the element that opens the modal
8
+ */
9
+ .modal__trigger {
10
+ @apply inline-block cursor-(--cursor-interactive);
11
+
12
+ /**
13
+ * Transitions
14
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
15
+ */
16
+ transition:
17
+ transform 300ms var(--ease-out-quart),
18
+ background-color 300ms var(--ease-smooth),
19
+ box-shadow 300ms var(--ease-out);
20
+ @apply motion-reduce:transition-none;
21
+
22
+ /* Focus state */
23
+ &:focus-visible:not(:focus),
24
+ &[data-focus-visible="true"] {
25
+ @apply status-focused;
26
+ }
27
+
28
+ /* Disabled state */
29
+ &:disabled,
30
+ &[aria-disabled="true"] {
31
+ @apply status-disabled;
32
+ }
33
+
34
+ /* Active/pressed state */
35
+ &:active,
36
+ &[data-pressed="true"] {
37
+ transform: scale(0.97);
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Element: backdrop - the overlay behind the dialog
43
+ */
44
+ .modal__backdrop {
45
+ @apply fixed inset-0 z-50;
46
+ @apply flex flex-row items-center justify-center;
47
+ @apply h-(--visual-viewport-height) w-full;
48
+
49
+ /* Entering animation */
50
+ &[data-state="open"] {
51
+ @apply animate-in duration-300 ease-out fade-in-0;
52
+ }
53
+
54
+ /* Exiting animation */
55
+ &[data-state="closed"] {
56
+ @apply animate-out duration-300 ease-out fade-out-0;
57
+ }
58
+
59
+ /**
60
+ * Reduce Animation
61
+ * CRITICAL: motion-reduce must be AFTER animate for correct override specificity
62
+ */
63
+ &,
64
+ & {
65
+ @apply will-change-[opacity];
66
+ @apply motion-reduce:animate-none;
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Modifier: backdrop--transparent
72
+ */
73
+ .modal__backdrop--transparent {
74
+ @apply bg-transparent;
75
+ }
76
+
77
+ /**
78
+ * Modifier: backdrop--opaque
79
+ */
80
+ .modal__backdrop--opaque {
81
+ @apply bg-backdrop;
82
+ }
83
+
84
+ /**
85
+ * Modifier: backdrop--blur
86
+ */
87
+ .modal__backdrop--blur {
88
+ @apply bg-backdrop backdrop-blur-md;
89
+ }
90
+
91
+ /**
92
+ * Element: container - the positioning wrapper for the modal
93
+ */
94
+ .modal__container {
95
+ @apply flex flex-col items-center fixed z-[100] top-[50%] left-[50%] max-h-[85vh] w-[90vw] max-w-[450px] translate-x-[-50%] translate-y-[-50%];
96
+ @apply h-(--visual-viewport-height) w-full min-w-0 flex-1;
97
+ @apply p-4;
98
+ @apply sm:w-fit sm:p-10;
99
+ @apply pointer-events-none;
100
+
101
+ /* Entering animation */
102
+ &[data-state="open"] {
103
+
104
+ @apply animate-in duration-300 ease-out-quad fade-in-0 zoom-in-105;
105
+
106
+ &[data-placement="auto"] {
107
+ @apply slide-in-from-bottom-1;
108
+ @apply sm:slide-in-from-bottom-0;
109
+ }
110
+
111
+ &[data-placement="top"] {
112
+ @apply slide-in-from-top-1;
113
+ }
114
+
115
+ &[data-placement="center"] {
116
+ @apply slide-in-from-top-0;
117
+ }
118
+
119
+ &[data-placement="bottom"] {
120
+ @apply slide-in-from-bottom-1;
121
+ }
122
+ }
123
+
124
+ /* Exiting animation */
125
+ &[data-state="closed"] {
126
+ @apply animate-out duration-150 ease-out-quad fade-out-0 zoom-out-95;
127
+ }
128
+
129
+ /**
130
+ * Reduce Animation
131
+ * CRITICAL: motion-reduce must be AFTER animate for correct override specificity
132
+ */
133
+ &,
134
+ & {
135
+ @apply will-change-[opacity,transform];
136
+ @apply motion-reduce:animate-none;
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Modifier: container--scroll-outside
142
+ */
143
+ .modal__container--scroll-outside {
144
+ @apply overflow-y-auto;
145
+ @apply pointer-events-auto;
146
+ -webkit-overflow-scrolling: touch;
147
+ }
148
+
149
+ /**
150
+ * Modifier: container--full
151
+ */
152
+ .modal__container--full {
153
+ @apply p-0 sm:p-0;
154
+
155
+ /* Entering animation */
156
+ & {
157
+ @apply slide-in-from-bottom-0 zoom-in-100;
158
+ @apply sm:slide-in-from-bottom-0;
159
+ }
160
+
161
+ /* Exiting animation */
162
+ & {
163
+ @apply zoom-out-100;
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Element: dialog - the content container for the modal
169
+ */
170
+ .modal__dialog {
171
+ @apply relative;
172
+ @apply flex w-full flex-col;
173
+ @apply rounded-3xl bg-overlay shadow-overlay outline-none;
174
+ @apply p-6;
175
+ @apply pointer-events-auto;
176
+
177
+ &[data-placement="auto"] {
178
+ @apply mt-auto;
179
+ @apply sm:my-auto;
180
+ }
181
+
182
+ &[data-placement="center"] {
183
+ @apply my-auto;
184
+ }
185
+
186
+ &[data-placement="bottom"] {
187
+ @apply mt-auto;
188
+ }
189
+
190
+ &[data-placement="top"] {
191
+ @apply mt-0;
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Modifier: dialog--scroll-inside
197
+ */
198
+ .modal__dialog--scroll-inside {
199
+ @apply overflow-hidden;
200
+ }
201
+
202
+ /**
203
+ * Modifier: dialog--scroll-outside
204
+ */
205
+ .modal__dialog--scroll-outside {
206
+ @apply h-auto;
207
+ @apply min-h-0 shrink-0;
208
+ }
209
+
210
+ /**
211
+ * Modifier: dialog--xs
212
+ */
213
+ .modal__dialog--xs {
214
+ @apply max-w-xs;
215
+ }
216
+
217
+ /**
218
+ * Modifier: dialog--sm
219
+ */
220
+ .modal__dialog--sm {
221
+ @apply max-w-sm;
222
+ }
223
+
224
+ /**
225
+ * Modifier: dialog--md
226
+ */
227
+ .modal__dialog--md {
228
+ @apply max-w-md;
229
+ }
230
+
231
+ /**
232
+ * Modifier: dialog--lg
233
+ */
234
+ .modal__dialog--lg {
235
+ @apply max-w-lg;
236
+ }
237
+
238
+ /**
239
+ * Modifier: dialog--cover
240
+ */
241
+ .modal__dialog--cover {
242
+ @apply h-full min-h-full w-full;
243
+ }
244
+
245
+ /**
246
+ * Modifier: dialog--full
247
+ */
248
+ .modal__dialog--full {
249
+ @apply h-full min-h-full w-full;
250
+ @apply rounded-none shadow-none;
251
+ }
252
+
253
+ /**
254
+ * Element: header - the top section with the title
255
+ */
256
+ .modal__header {
257
+ @apply flex flex-col gap-3;
258
+ @apply mb-0;
259
+
260
+ /* When header contains icon, use flex-col layout with gap */
261
+ & > .modal__icon {
262
+ @apply mb-0;
263
+ }
264
+ }
265
+
266
+ /**
267
+ * Element: heading - the main title text
268
+ */
269
+ .modal__heading {
270
+ @apply align-middle;
271
+ @apply text-sm font-medium text-foreground;
272
+ }
273
+
274
+ /**
275
+ * Element: icon - the optional icon indicator
276
+ */
277
+ .modal__icon {
278
+ @apply flex items-center justify-center;
279
+ @apply size-10 shrink-0;
280
+ @apply rounded-full select-none;
281
+ }
282
+
283
+ /**
284
+ * Element: body - the main content area
285
+ */
286
+ .modal__body {
287
+ @apply min-h-0 flex-1;
288
+ @apply text-sm leading-[1.43] text-muted;
289
+ @apply my-0;
290
+ }
291
+
292
+ /**
293
+ * Modifier: body--scroll-inside
294
+ */
295
+ .modal__body--scroll-inside {
296
+ @apply overflow-y-auto;
297
+ -webkit-overflow-scrolling: touch;
298
+ }
299
+
300
+ /**
301
+ * Modifier: body--scroll-outside
302
+ */
303
+ .modal__body--scroll-outside {
304
+ @apply overflow-y-visible;
305
+ }
306
+
307
+ /**
308
+ * Element: footer - the bottom action section
309
+ */
310
+ .modal__footer {
311
+ @apply flex flex-row items-center justify-end gap-2;
312
+ @apply mt-0;
313
+ }
314
+
315
+ /**
316
+ * Element: close-trigger - the optional x icon button to close the modal
317
+ */
318
+ .modal__close-trigger {
319
+ @apply absolute top-4 right-4;
320
+ }
321
+
322
+ /**
323
+ * Elements Spacing
324
+ */
325
+ .modal__header + .modal__body {
326
+ @apply mt-2;
327
+ }
328
+
329
+ .modal__header + .modal__footer {
330
+ @apply mt-5;
331
+ }
332
+
333
+ .modal__body + .modal__footer {
334
+ @apply mt-5;
335
+ }
@@ -0,0 +1,395 @@
1
+ /* Number field styles */
2
+ .number-field {
3
+ @apply flex flex-col gap-1;
4
+
5
+ &[aria-invalid="true"],
6
+ &[data-invalid="true"] {
7
+ [data-slot="description"] {
8
+ @apply hidden;
9
+ }
10
+ }
11
+
12
+ [data-slot="label"] {
13
+ @apply w-fit;
14
+ }
15
+
16
+ [data-slot="description"] {
17
+ @apply px-1;
18
+ }
19
+ }
20
+
21
+ .number-field__group {
22
+ @apply grid h-9 items-center overflow-hidden rounded-field border bg-field text-sm text-field-foreground shadow-field outline-none;
23
+ border-width: var(--border-width-field);
24
+ border-color: var(--color-field-border);
25
+ grid-template-columns: 40px 1fr 40px;
26
+
27
+ /**
28
+ * Transitions
29
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
30
+ */
31
+ transition:
32
+ background-color 300ms var(--ease-smooth),
33
+ border-color 300ms var(--ease-smooth),
34
+ box-shadow 300ms var(--ease-out);
35
+ @apply motion-reduce:transition-none;
36
+
37
+ /* Hover state */
38
+ @media (hover: hover) {
39
+ &:hover:not(:focus-within),
40
+ &[data-hovered="true"]:not([data-focus-within="true"]) {
41
+ @apply bg-field-hover;
42
+ border-color: var(--color-field-border-hover);
43
+ }
44
+ }
45
+
46
+ /* Focus within state */
47
+ &[data-focus-within="true"],
48
+ &:focus-within {
49
+ @apply status-focused-field;
50
+ border-color: var(--color-field-border-focus);
51
+ background-color: var(--color-field-focus);
52
+ }
53
+
54
+ /* Invalid state */
55
+ &[aria-invalid="true"],
56
+ &[data-invalid="true"] {
57
+ @apply status-invalid-field;
58
+ background-color: var(--color-field-focus);
59
+ border-color: var(--color-field-border-invalid);
60
+ }
61
+
62
+ /* Disabled state */
63
+ &:disabled,
64
+ &[data-disabled="true"],
65
+ &[aria-disabled="true"] {
66
+ @apply status-disabled;
67
+ }
68
+
69
+ /* Readonly state */
70
+ &[data-readonly="true"] {
71
+ background-color: var(--color-default-100);
72
+ cursor: default;
73
+ }
74
+ }
75
+
76
+ .number-field__group--sm {
77
+ @apply h-7 text-xs;
78
+ grid-template-columns: 32px 1fr 32px;
79
+ }
80
+
81
+ .number-field__group--md {
82
+ /* No styles — md is the default size defined on .number-field__group base */
83
+ }
84
+
85
+ .number-field__group--lg {
86
+ @apply h-11 text-base;
87
+ grid-template-columns: 48px 1fr 48px;
88
+ }
89
+
90
+ .number-field__input {
91
+ @apply min-w-0 rounded-none border-0 bg-transparent px-3 py-2 text-inherit tabular-nums shadow-none outline-none sm:text-sm h-full text-center;
92
+
93
+ /* Remove border radius on left side when decrement button is present */
94
+ .number-field__group:has([slot="decrement"]) & {
95
+ @apply rounded-l-none;
96
+ }
97
+
98
+ /* Remove border radius on right side when increment button is present */
99
+ .number-field__group:has([slot="increment"]) & {
100
+ @apply rounded-r-none;
101
+ }
102
+
103
+ /* Focus state - handled by group */
104
+ &:focus,
105
+ &:focus-visible {
106
+ @apply outline-none;
107
+ }
108
+ }
109
+
110
+ .number-field__increment-button,
111
+ .number-field__decrement-button {
112
+ @apply flex h-full w-10 items-center justify-center rounded-none border-0 bg-transparent text-field-foreground outline-none;
113
+
114
+ /**
115
+ * Transitions
116
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
117
+ */
118
+ transition:
119
+ background-color 300ms var(--ease-smooth),
120
+ border-color 300ms var(--ease-smooth);
121
+ @apply motion-reduce:transition-none;
122
+
123
+ /* Cursor */
124
+ cursor: var(--cursor-interactive);
125
+
126
+ /* Hover state */
127
+ &:hover,
128
+ &[data-hovered="true"] {
129
+ @apply bg-field-foreground/5;
130
+ }
131
+
132
+ /* Focus visible state */
133
+ &:focus-visible,
134
+ &[data-focus-visible="true"] {
135
+ outline: 2px solid var(--color-field-border-focus);
136
+ outline-offset: -2px;
137
+ }
138
+
139
+ /* Pressed state */
140
+ &:active,
141
+ &[data-pressed="true"] {
142
+ @apply bg-field-foreground/10;
143
+ transform: scale(0.97);
144
+ }
145
+
146
+ /* Disabled state */
147
+ &:disabled,
148
+ &[data-disabled="true"],
149
+ &[aria-disabled="true"] {
150
+ @apply status-disabled;
151
+ }
152
+
153
+ /* Icon styling */
154
+ [data-slot="number-field-increment-button-icon"],
155
+ [data-slot="number-field-decrement-button-icon"] {
156
+ @apply size-4;
157
+ }
158
+ }
159
+
160
+ .number-field__increment-button {
161
+ @apply rounded-none border-l border-field-placeholder/15;
162
+ }
163
+
164
+ .number-field__decrement-button {
165
+ @apply rounded-none border-r border-field-placeholder/15;
166
+ }
167
+
168
+ .number-field__increment-button--sm,
169
+ .number-field__decrement-button--sm {
170
+ @apply w-8;
171
+
172
+ [data-slot="number-field-increment-button-icon"],
173
+ [data-slot="number-field-decrement-button-icon"] {
174
+ @apply size-3;
175
+ }
176
+ }
177
+
178
+ .number-field__increment-button--lg,
179
+ .number-field__decrement-button--lg {
180
+ @apply w-12;
181
+
182
+ [data-slot="number-field-increment-button-icon"],
183
+ [data-slot="number-field-decrement-button-icon"] {
184
+ @apply size-5;
185
+ }
186
+ }
187
+
188
+ /* ─── Variant modifiers ─────────────────────────────────────────────────────── */
189
+
190
+ .number-field--flat .number-field__group {
191
+ /* Transparent background across all states, no border, no shadow */
192
+ @apply shadow-none bg-transparent;
193
+ border-color: transparent;
194
+
195
+ @media (hover: hover) {
196
+ &:hover:not(:focus-within),
197
+ &[data-hovered="true"]:not([data-focus-within="true"]) {
198
+ @apply bg-transparent;
199
+ border-color: transparent;
200
+ }
201
+ }
202
+
203
+ &:focus-within,
204
+ &[data-focus-within="true"] {
205
+ @apply bg-transparent;
206
+ border-color: var(--color-field-border-focus);
207
+ }
208
+ }
209
+
210
+ .number-field--bordered .number-field__group {
211
+ /* Transparent background + light border */
212
+ @apply shadow-none;
213
+ background-color: transparent;
214
+ border-width: var(--border-width);
215
+ border-color: var(--border);
216
+
217
+ @media (hover: hover) {
218
+ &:hover:not(:focus-within),
219
+ &[data-hovered="true"]:not([data-focus-within="true"]) {
220
+ background-color: transparent;
221
+ border-color: color-mix(in oklab, var(--border) 80%, var(--foreground) 20%);
222
+ }
223
+ }
224
+
225
+ &:focus-within,
226
+ &[data-focus-within="true"] {
227
+ background-color: transparent;
228
+ border-color: var(--color-field-border-focus);
229
+ }
230
+ }
231
+
232
+ .number-field--faded .number-field__group {
233
+ /* Muted background + visible border */
234
+ @apply shadow-none;
235
+ background-color: var(--color-background-tertiary);
236
+ border-color: var(--color-border);
237
+
238
+ @media (hover: hover) {
239
+ &:hover:not(:focus-within),
240
+ &[data-hovered="true"]:not([data-focus-within="true"]) {
241
+ background-color: var(--color-background-tertiary);
242
+ border-color: color-mix(in oklab, var(--color-border) 80%, var(--foreground) 20%);
243
+ }
244
+ }
245
+
246
+ &:focus-within,
247
+ &[data-focus-within="true"] {
248
+ background-color: var(--color-background-tertiary);
249
+ border-color: var(--color-field-border-focus);
250
+ }
251
+ }
252
+
253
+ .number-field--underlined .number-field__group {
254
+ /* Bottom border only — always-visible underline */
255
+ @apply rounded-none shadow-none bg-transparent;
256
+ border-top: none;
257
+ border-left: none;
258
+ border-right: none;
259
+ border-bottom-width: var(--border-width);
260
+ border-bottom-color: var(--border);
261
+
262
+ @media (hover: hover) {
263
+ &:hover:not(:focus-within),
264
+ &[data-hovered="true"]:not([data-focus-within="true"]) {
265
+ background-color: transparent;
266
+ border-bottom-color: color-mix(in oklab, var(--border) 80%, var(--foreground) 20%);
267
+ }
268
+ }
269
+
270
+ &:focus-within,
271
+ &[data-focus-within="true"] {
272
+ @apply bg-transparent;
273
+ border-bottom-color: var(--color-field-border-focus);
274
+ box-shadow: 0 1.2px 0 0 var(--color-field-border-focus);
275
+ }
276
+ }
277
+
278
+ .number-field--raised .number-field__group {
279
+ /* Elevated look: white bg + shadow, transparent border */
280
+ @apply shadow-md;
281
+ background-color: var(--snow);
282
+ border-color: transparent;
283
+
284
+ @media (hover: hover) {
285
+ &:hover:not(:focus-within),
286
+ &[data-hovered="true"]:not([data-focus-within="true"]) {
287
+ @apply shadow-lg;
288
+ background-color: var(--background);
289
+ border-color: transparent;
290
+ }
291
+ }
292
+
293
+ &:focus-within,
294
+ &[data-focus-within="true"] {
295
+ @apply shadow-lg;
296
+ background-color: var(--snow);
297
+ border-color: var(--color-field-border-focus);
298
+ }
299
+ }
300
+
301
+ /* ─── Size modifiers (base wrapper) ──────────────────────────────────────────── */
302
+
303
+ .number-field--sm {
304
+ @apply gap-0.5 text-xs;
305
+ }
306
+
307
+ .number-field--md {
308
+ /* No styles — md is the default size */
309
+ }
310
+
311
+ .number-field--lg {
312
+ @apply gap-1.5 text-base;
313
+ }
314
+
315
+ /* ─── Color modifiers ────────────────────────────────────────────────────────── */
316
+
317
+ .number-field--default .number-field__group {
318
+ --number-field-accent: var(--color-default-foreground);
319
+ }
320
+
321
+ .number-field--primary .number-field__group {
322
+ --number-field-accent: var(--color-primary);
323
+
324
+ &:focus-within,
325
+ &[data-focus-within="true"] {
326
+ border-color: var(--color-primary);
327
+ box-shadow: 0 0 0 1px var(--color-primary);
328
+ }
329
+ }
330
+
331
+ .number-field--secondary .number-field__group {
332
+ --number-field-accent: var(--color-secondary);
333
+
334
+ &:focus-within,
335
+ &[data-focus-within="true"] {
336
+ border-color: var(--color-secondary);
337
+ box-shadow: 0 0 0 1px var(--color-secondary);
338
+ }
339
+ }
340
+
341
+ .number-field--success .number-field__group {
342
+ --number-field-accent: var(--color-success);
343
+
344
+ &:focus-within,
345
+ &[data-focus-within="true"] {
346
+ border-color: var(--color-success);
347
+ box-shadow: 0 0 0 1px var(--color-success);
348
+ }
349
+ }
350
+
351
+ .number-field--warning .number-field__group {
352
+ --number-field-accent: var(--color-warning);
353
+
354
+ &:focus-within,
355
+ &[data-focus-within="true"] {
356
+ border-color: var(--color-warning);
357
+ box-shadow: 0 0 0 1px var(--color-warning);
358
+ }
359
+ }
360
+
361
+ .number-field--danger .number-field__group {
362
+ --number-field-accent: var(--color-danger);
363
+
364
+ &:focus-within,
365
+ &[data-focus-within="true"] {
366
+ border-color: var(--color-danger);
367
+ box-shadow: 0 0 0 1px var(--color-danger);
368
+ }
369
+ }
370
+
371
+ /* ─── State modifiers ────────────────────────────────────────────────────────── */
372
+
373
+ .number-field--invalid .number-field__group {
374
+ border-color: var(--color-danger);
375
+ @apply status-invalid-field;
376
+ }
377
+
378
+ .number-field--disabled {
379
+ @apply opacity-60 cursor-not-allowed pointer-events-none;
380
+ }
381
+
382
+ .number-field--readonly .number-field__group {
383
+ background-color: var(--color-default-100);
384
+ cursor: default;
385
+ }
386
+
387
+ /* ─── Layout modifiers ───────────────────────────────────────────────────────── */
388
+
389
+ .number-field--full-width {
390
+ @apply w-full;
391
+ }
392
+
393
+ .number-field__group--full-width {
394
+ @apply w-full;
395
+ }