@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,222 @@
1
+ /* -------------------------------------------------------------------------------------------------
2
+ * Drawer Component Styles
3
+ * Block: drawer
4
+ * -----------------------------------------------------------------------------------------------*/
5
+
6
+ /* Panel enter/exit keyframes — Reka's Presence waits for animationend before unmounting */
7
+ @keyframes drawer-slide-in-right { from { transform: translateX(100%); } to { transform: translateX(0); } }
8
+ @keyframes drawer-slide-out-right { from { transform: translateX(0); } to { transform: translateX(100%); } }
9
+ @keyframes drawer-slide-in-left { from { transform: translateX(-100%); } to { transform: translateX(0); } }
10
+ @keyframes drawer-slide-out-left { from { transform: translateX(0); } to { transform: translateX(-100%); } }
11
+ @keyframes drawer-slide-in-top { from { transform: translateY(-100%); } to { transform: translateY(0); } }
12
+ @keyframes drawer-slide-out-top { from { transform: translateY(0); } to { transform: translateY(-100%); } }
13
+ @keyframes drawer-slide-in-bottom { from { transform: translateY(100%); } to { transform: translateY(0); } }
14
+ @keyframes drawer-slide-out-bottom{ from { transform: translateY(0); } to { transform: translateY(100%); } }
15
+
16
+ /* Backdrop fade keyframes */
17
+ @keyframes drawer-backdrop-in { from { opacity: 0; } to { opacity: 1; } }
18
+ @keyframes drawer-backdrop-out { from { opacity: 1; } to { opacity: 0; } }
19
+
20
+ /**
21
+ * Element: trigger - the element that opens the drawer
22
+ */
23
+ .drawer__trigger {
24
+ @apply inline-block cursor-(--cursor-interactive);
25
+
26
+ transition:
27
+ transform 300ms var(--ease-out-quart),
28
+ background-color 300ms var(--ease-smooth),
29
+ box-shadow 300ms var(--ease-out);
30
+ @apply motion-reduce:transition-none;
31
+
32
+ &:focus-visible:not(:focus),
33
+ &[data-focus-visible="true"] {
34
+ @apply status-focused;
35
+ }
36
+
37
+ &:disabled,
38
+ &[aria-disabled="true"] {
39
+ @apply status-disabled;
40
+ }
41
+
42
+ &:active,
43
+ &[data-pressed="true"] {
44
+ transform: scale(0.97);
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Element: backdrop - the overlay behind the drawer panel
50
+ * Reka sets data-state="open"/"closed" on DialogOverlay.
51
+ * Reka's Presence component waits for animationend before unmounting.
52
+ */
53
+ .drawer__backdrop {
54
+ @apply fixed inset-0 z-50;
55
+ @apply h-(--visual-viewport-height) w-full;
56
+
57
+ &[data-state="open"] {
58
+ animation: drawer-backdrop-in 0.2s ease forwards;
59
+ }
60
+
61
+ &[data-state="closed"] {
62
+ animation: drawer-backdrop-out 0.2s ease forwards;
63
+ }
64
+
65
+ @media (prefers-reduced-motion: reduce) {
66
+ animation: none !important;
67
+ opacity: 1;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Modifier: backdrop--transparent
73
+ */
74
+ .drawer__backdrop--transparent {
75
+ @apply bg-transparent;
76
+ }
77
+
78
+ /**
79
+ * Modifier: backdrop--opaque
80
+ */
81
+ .drawer__backdrop--opaque {
82
+ @apply bg-backdrop;
83
+ }
84
+
85
+ /**
86
+ * Modifier: backdrop--blur
87
+ */
88
+ .drawer__backdrop--blur {
89
+ @apply bg-backdrop backdrop-blur-md;
90
+ }
91
+
92
+ /**
93
+ * Element: dialog - the drawer panel (applied directly to DialogContent).
94
+ * Reka sets data-state="open"/"closed" on DialogContent; Presence waits for
95
+ * animationend on this element before unmounting on close.
96
+ */
97
+ .drawer__dialog {
98
+ @apply fixed z-50;
99
+ @apply flex flex-col;
100
+ @apply bg-overlay shadow-overlay outline-none;
101
+ @apply p-6;
102
+
103
+ @media (prefers-reduced-motion: reduce) {
104
+ animation: none !important;
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Modifier: dialog--right
110
+ * Panel anchored to the right edge, full viewport height.
111
+ */
112
+ .drawer__dialog--right {
113
+ @apply top-0 right-0 bottom-0;
114
+ @apply w-80 max-w-[85vw] sm:w-96;
115
+ @apply rounded-none;
116
+
117
+ &[data-state="open"] { animation: drawer-slide-in-right 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
118
+ &[data-state="closed"] { animation: drawer-slide-out-right 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
119
+ }
120
+
121
+ /**
122
+ * Modifier: dialog--left
123
+ * Panel anchored to the left edge, full viewport height.
124
+ */
125
+ .drawer__dialog--left {
126
+ @apply top-0 left-0 bottom-0;
127
+ @apply w-80 max-w-[85vw] sm:w-96;
128
+ @apply rounded-none;
129
+
130
+ &[data-state="open"] { animation: drawer-slide-in-left 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
131
+ &[data-state="closed"] { animation: drawer-slide-out-left 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
132
+ }
133
+
134
+ /**
135
+ * Modifier: dialog--top
136
+ * Panel anchored to the top edge, full viewport width.
137
+ */
138
+ .drawer__dialog--top {
139
+ @apply top-0 left-0 right-0;
140
+ @apply w-full max-h-[85vh];
141
+ @apply rounded-b-2xl pb-2;
142
+
143
+ &[data-state="open"] { animation: drawer-slide-in-top 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
144
+ &[data-state="closed"] { animation: drawer-slide-out-top 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
145
+ }
146
+
147
+ /**
148
+ * Modifier: dialog--bottom
149
+ * Panel anchored to the bottom edge, full viewport width.
150
+ */
151
+ .drawer__dialog--bottom {
152
+ @apply bottom-0 left-0 right-0;
153
+ @apply w-full max-h-[85vh];
154
+ @apply rounded-t-2xl;
155
+
156
+ &[data-state="open"] { animation: drawer-slide-in-bottom 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
157
+ &[data-state="closed"] { animation: drawer-slide-out-bottom 0.3s cubic-bezier(0.32, 0.72, 0, 1) forwards; }
158
+ }
159
+
160
+ /**
161
+ * Element: header
162
+ */
163
+ .drawer__header {
164
+ @apply flex flex-col gap-3;
165
+ @apply mb-0;
166
+ }
167
+
168
+ /**
169
+ * Element: heading
170
+ */
171
+ .drawer__heading {
172
+ @apply align-middle;
173
+ @apply text-sm font-medium text-foreground;
174
+ }
175
+
176
+ /**
177
+ * Element: body
178
+ */
179
+ .drawer__body {
180
+ @apply min-h-0 flex-1;
181
+ @apply text-sm leading-[1.43] text-muted;
182
+ @apply -m-[3px] my-0 p-[3px];
183
+ @apply overflow-y-auto overscroll-contain;
184
+ -webkit-overflow-scrolling: touch;
185
+ }
186
+
187
+ /**
188
+ * Element: footer
189
+ */
190
+ .drawer__footer {
191
+ @apply flex flex-row items-center justify-end gap-2;
192
+ @apply mt-0;
193
+ }
194
+
195
+ /**
196
+ * Element: handle
197
+ */
198
+ .drawer__handle {
199
+ @apply flex items-center justify-center;
200
+ @apply pb-2;
201
+
202
+ & > [data-slot="drawer-handle-bar"] {
203
+ @apply h-1 w-9 rounded-full;
204
+ @apply bg-separator;
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Element: close-trigger
210
+ */
211
+ .drawer__close-trigger {
212
+ @apply cursor-pointer;
213
+ }
214
+
215
+ /**
216
+ * Spacing between elements
217
+ */
218
+ .drawer__header + .drawer__body { @apply mt-2; }
219
+ .drawer__header + .drawer__footer { @apply mt-5; }
220
+ .drawer__body + .drawer__footer { @apply mt-5; }
221
+ .drawer__handle + .drawer__header { @apply mt-0; }
222
+ .drawer__handle + .drawer__body { @apply mt-0; }
@@ -0,0 +1,67 @@
1
+ /* ==========================================================================
2
+ Dropdown
3
+ ========================================================================== */
4
+
5
+ .dropdown {
6
+ @apply flex flex-col gap-1;
7
+ }
8
+
9
+ .dropdown__trigger {
10
+ @apply inline-block outline-none;
11
+
12
+ transition:
13
+ transform 300ms var(--ease-out-quart),
14
+ background-color 300ms var(--ease-smooth),
15
+ box-shadow 300ms var(--ease-out);
16
+ @apply transform-gpu motion-reduce:transition-none;
17
+
18
+ cursor: var(--cursor-interactive);
19
+
20
+ &:focus-visible:not(:focus),
21
+ &[data-focus-visible="true"] {
22
+ @apply status-focused;
23
+ }
24
+
25
+ &:disabled,
26
+ &[aria-disabled="true"] {
27
+ @apply status-disabled;
28
+ }
29
+
30
+ &[data-pending="true"] {
31
+ @apply status-pending;
32
+ }
33
+
34
+ &:active,
35
+ &[data-pressed="true"] {
36
+ transform: scale(0.97);
37
+ }
38
+ }
39
+
40
+ /* Positioning, sizing, and open/close animations — visuals come from card classes */
41
+ .dropdown__popover {
42
+ @apply max-w-[48svw] origin-(--trigger-anchor-point) scroll-py-1 overflow-y-auto overscroll-contain md:min-w-55;
43
+ @apply will-change-[opacity,transform];
44
+
45
+ &:focus-visible:not(:focus),
46
+ &[data-focus-visible="true"] {
47
+ @apply outline-none;
48
+ }
49
+
50
+ &[data-state="open"] {
51
+ @apply animate-in duration-200 ease-smooth fade-in-0 zoom-in-95;
52
+
53
+ &[data-side="top"] { @apply slide-in-from-bottom-1; }
54
+ &[data-side="bottom"] { @apply slide-in-from-top-1; }
55
+ &[data-side="left"] { @apply slide-in-from-right-1; }
56
+ &[data-side="right"] { @apply slide-in-from-left-1; }
57
+ }
58
+
59
+ &[data-state="closed"] {
60
+ @apply animate-out duration-150 ease-smooth zoom-out-95 fade-out;
61
+ }
62
+ }
63
+
64
+ /* Inner list — shares list-container base */
65
+ .dropdown__menu {
66
+ @apply list-container gap-0.5;
67
+ }
@@ -0,0 +1,4 @@
1
+ /* Base empty-state styles */
2
+ .empty-state {
3
+ @apply p-2 text-sm text-muted;
4
+ }
@@ -0,0 +1,13 @@
1
+ /* Base error message styles */
2
+ .error-message {
3
+ @apply h-auto text-xs wrap-break-word text-danger;
4
+
5
+ /**
6
+ * Transitions
7
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
8
+ */
9
+ transition:
10
+ opacity 300ms var(--ease-out),
11
+ height 350ms var(--ease-smooth);
12
+ @apply motion-reduce:transition-none;
13
+ }
@@ -0,0 +1,19 @@
1
+ /* Field error styles */
2
+ .field-error {
3
+ @apply h-0 px-1 text-xs wrap-break-word text-danger opacity-0 data-[visible=true]:h-auto data-[visible=true]:opacity-100;
4
+
5
+ /**
6
+ * Transitions
7
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
8
+ */
9
+ transition:
10
+ opacity 300ms var(--ease-out),
11
+ height 350ms var(--ease-smooth);
12
+ @apply motion-reduce:transition-none;
13
+ }
14
+
15
+ /* ─── Icon slot ──────────────────────────────────────────────────────────────── */
16
+
17
+ .field-error__icon {
18
+ @apply inline-flex size-4 shrink-0 align-middle;
19
+ }
@@ -0,0 +1,39 @@
1
+ /* Base component styles */
2
+ .fieldset {
3
+ @apply flex flex-col gap-6;
4
+ /* fix flexbox issue in Safari when fieldset with legend is inside a flexbox */
5
+ @apply shrink grow basis-0;
6
+ }
7
+
8
+ .fieldset__legend {
9
+ @apply text-sm font-medium text-foreground;
10
+ }
11
+
12
+ .fieldset__description {
13
+ @apply text-sm text-foreground/60;
14
+ }
15
+
16
+ /* ─── Field group slots ───────────────────────────────────────────────────────── */
17
+
18
+ .fieldset__field-group {
19
+ @apply w-full;
20
+ }
21
+
22
+ .fieldset__field-group--vertical {
23
+ @apply flex flex-col gap-4;
24
+ }
25
+
26
+ .fieldset__field-group--horizontal {
27
+ @apply flex flex-row flex-wrap gap-4;
28
+ }
29
+
30
+ .fieldset__actions {
31
+ @apply flex items-center gap-2 pt-1;
32
+ }
33
+
34
+ /* ─── State modifiers ────────────────────────────────────────────────────────── */
35
+
36
+ .fieldset--disabled,
37
+ .fieldset[data-disabled="true"] {
38
+ @apply opacity-60 pointer-events-none;
39
+ }
@@ -0,0 +1,7 @@
1
+ /* ==========================================================================
2
+ Base header styles
3
+ ========================================================================== */
4
+
5
+ .header {
6
+ @apply w-full px-2 pt-1.5 pb-1 text-left text-xs font-medium text-muted;
7
+ }
@@ -0,0 +1,164 @@
1
+ /* ------------------------------------------------------------------------------------------------
2
+ * Component Styles
3
+ * ------------------------------------------------------------------------------------------------
4
+ * CRITICAL: Import order matters for CSS specificity and style overrides.
5
+ *
6
+ * General Rule: Shared/primitive components MUST be imported FIRST, before components that use them.
7
+ * This ensures that parent component styles can properly override shared component defaults.
8
+ *
9
+ * Organization: Components are grouped by their Storybook categories (Components/Category/Name)
10
+ * to maintain consistency between documentation and implementation.
11
+ * ------------------------------------------------------------------------------------------------ */
12
+
13
+ /* ------------------------------------------------------------------------------------------------
14
+ * Shared Components - MUST Import FIRST
15
+ * ------------------------------------------------------------------------------------------------
16
+ * These are used by multiple components and must be imported early to allow proper overrides.
17
+ * ------------------------------------------------------------------------------------------------ */
18
+ @import "./close-button.css";
19
+ @import "./description.css";
20
+ @import "./error-message.css";
21
+ @import "./label.css";
22
+
23
+ /* ------------------------------------------------------------------------------------------------
24
+ * Navigation
25
+ * ------------------------------------------------------------------------------------------------ */
26
+ @import "./accordion.css";
27
+ @import "./breadcrumbs.css";
28
+ @import "./collapsible-group.css";
29
+ @import "./collapsible.css";
30
+ @import "./link.css";
31
+ @import "./pagination.css";
32
+ @import "./tabs.css";
33
+
34
+ /* ------------------------------------------------------------------------------------------------
35
+ * Buttons
36
+ * ------------------------------------------------------------------------------------------------ */
37
+ @import "./button.css";
38
+ @import "./button-group.css";
39
+ @import "./toggle-button.css";
40
+ @import "./toggle-button-group.css";
41
+ @import "./toolbar.css";
42
+
43
+ /* ------------------------------------------------------------------------------------------------
44
+ * Collections
45
+ * ------------------------------------------------------------------------------------------------ */
46
+ @import "./dropdown.css";
47
+ @import "./list-box-item.css";
48
+ @import "./list-box-section.css";
49
+ @import "./list-box.css";
50
+ @import "./menu-item.css";
51
+ @import "./menu-section.css";
52
+ @import "./menu.css";
53
+ @import "./tag-group.css";
54
+ @import "./tag.css";
55
+
56
+ /* ------------------------------------------------------------------------------------------------
57
+ * Colors
58
+ * ------------------------------------------------------------------------------------------------ */
59
+ @import "./color-area.css";
60
+ @import "./color-picker.css";
61
+ @import "./color-slider.css";
62
+ @import "./color-swatch.css";
63
+ @import "./color-swatch-picker.css";
64
+ @import "./color-field.css";
65
+ @import "./color-input-group.css";
66
+
67
+ /* ------------------------------------------------------------------------------------------------
68
+ * Controls
69
+ * ------------------------------------------------------------------------------------------------ */
70
+ @import "./slider.css";
71
+ @import "./switch.css";
72
+ @import "./switch-group.css";
73
+
74
+ /* ------------------------------------------------------------------------------------------------
75
+ * DataDisplay
76
+ * ------------------------------------------------------------------------------------------------ */
77
+ @import "./badge.css";
78
+ @import "./chip.css";
79
+ @import "./table.css";
80
+
81
+ /* ------------------------------------------------------------------------------------------------
82
+ * Feedback
83
+ * ------------------------------------------------------------------------------------------------ */
84
+ @import "./alert.css";
85
+ @import "./empty-state.css";
86
+ @import "./skeleton.css";
87
+ @import "./meter.css";
88
+ @import "./progress-bar.css";
89
+ @import "./progress-circle.css";
90
+ @import "./spinner.css";
91
+ @import "./toast.css";
92
+
93
+ /* ------------------------------------------------------------------------------------------------
94
+ * Forms
95
+ * ------------------------------------------------------------------------------------------------ */
96
+ @import "./checkbox-group.css";
97
+ @import "./checkbox.css";
98
+ @import "./fieldset.css";
99
+ @import "./input-otp.css";
100
+ @import "./input.css";
101
+ @import "./number-field.css";
102
+ @import "./radio-group.css";
103
+ @import "./radio.css";
104
+ @import "./textarea.css";
105
+
106
+ /* ------------------------------------------------------------------------------------------------
107
+ * Date & Time
108
+ * ------------------------------------------------------------------------------------------------ */
109
+ @import "./calendar.css";
110
+ @import "./range-calendar.css";
111
+ @import "./calendar-year-picker.css";
112
+ @import "./date-input.css";
113
+ @import "./date-range-field.css";
114
+ @import "./time-field.css";
115
+ @import "./date-picker.css";
116
+ @import "./date-range-picker.css";
117
+
118
+ /* ------------------------------------------------------------------------------------------------
119
+ * Layout
120
+ * ------------------------------------------------------------------------------------------------ */
121
+ @import "./card.css";
122
+ @import "./header.css";
123
+ @import "./separator.css";
124
+ @import "./surface.css";
125
+
126
+ /* ------------------------------------------------------------------------------------------------
127
+ * Media
128
+ * ------------------------------------------------------------------------------------------------ */
129
+ @import "./avatar.css";
130
+
131
+ /* ------------------------------------------------------------------------------------------------
132
+ * Overlays
133
+ * ------------------------------------------------------------------------------------------------ */
134
+ @import "./alert-dialog.css";
135
+ @import "./drawer.css";
136
+ @import "./modal.css";
137
+ @import "./popover.css";
138
+ @import "./tooltip.css";
139
+
140
+ /* ------------------------------------------------------------------------------------------------
141
+ * Pickers
142
+ * ------------------------------------------------------------------------------------------------ */
143
+ @import "./combo-box.css";
144
+ @import "./select.css";
145
+ @import "./autocomplete.css";
146
+
147
+ /* ------------------------------------------------------------------------------------------------
148
+ * Typography
149
+ * ------------------------------------------------------------------------------------------------ */
150
+ @import "./kbd.css";
151
+
152
+ /* ------------------------------------------------------------------------------------------------
153
+ * Utilities
154
+ * ------------------------------------------------------------------------------------------------ */
155
+ @import "./scroll-shadow.css";
156
+ @import "./scroll-area.css";
157
+
158
+ /* ------------------------------------------------------------------------------------------------
159
+ * Extended (Auron UI extras)
160
+ * ------------------------------------------------------------------------------------------------ */
161
+ @import "./aspect-ratio.css";
162
+ @import "./splitter.css";
163
+ @import "./stepper.css";
164
+ @import "./tree.css";
@@ -0,0 +1,124 @@
1
+ /* Base container */
2
+ .input-otp {
3
+ @apply relative flex items-center gap-2;
4
+
5
+ &[data-disabled] {
6
+ @apply cursor-not-allowed opacity-50;
7
+ }
8
+ }
9
+
10
+ /* Group - slots separated with gap */
11
+ .input-otp__group {
12
+ @apply flex items-center gap-2;
13
+ }
14
+
15
+ /* Individual slot box - fully rounded, standalone */
16
+ .input-otp__slot {
17
+ @apply relative flex h-10 w-9.5 flex-1 items-center justify-center text-center;
18
+ @apply border bg-field text-field-foreground shadow-field;
19
+ @apply rounded-field text-sm font-semibold outline-none;
20
+
21
+ border-width: 1px;
22
+ border-color: color-mix(in oklab, var(--foreground) 12%, transparent);
23
+
24
+ /**
25
+ * Transitions
26
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
27
+ */
28
+ transition:
29
+ background-color 300ms var(--ease-smooth),
30
+ border-color 300ms var(--ease-smooth),
31
+ box-shadow 300ms var(--ease-out);
32
+ @apply motion-reduce:transition-none;
33
+
34
+ /* Hover */
35
+ @media (hover: hover) {
36
+ &:hover,
37
+ &[data-hovered="true"] {
38
+ @apply bg-field-hover;
39
+ border-color: var(--color-field-border-hover);
40
+ }
41
+ }
42
+
43
+ /* Active/Focus */
44
+ &[data-active="true"] {
45
+ @apply z-10 bg-field-focus status-focused-field;
46
+ }
47
+
48
+ /* Filled */
49
+ &[data-filled="true"] {
50
+ @apply bg-field-focus;
51
+ }
52
+
53
+ /* Disabled */
54
+ &[data-disabled] {
55
+ @apply status-disabled;
56
+ }
57
+
58
+ /* Invalid */
59
+ &[aria-invalid="true"] {
60
+ @apply status-invalid-field;
61
+ background-color: var(--color-field-focus);
62
+ }
63
+ }
64
+
65
+ /* Slot value */
66
+ .input-otp__slot-value {
67
+ @apply text-lg leading-6 tracking-[-0.27px];
68
+
69
+ /**
70
+ * Animations
71
+ * CRITICAL: motion-reduce must be AFTER animation for correct override specificity
72
+ */
73
+ animation: slot-value-in 300ms var(--ease-smooth) both;
74
+ transform-origin: bottom center;
75
+ @apply motion-reduce:animate-none;
76
+ }
77
+
78
+ /* Caret */
79
+ .input-otp__caret {
80
+ @apply absolute h-4 w-[2px] animate-caret-blink rounded-[4px] bg-field-placeholder;
81
+ }
82
+
83
+ /* Separator */
84
+ .input-otp__separator {
85
+ @apply h-[2px] w-[6px] shrink-0 rounded-[4px] bg-separator;
86
+ }
87
+
88
+ /* Variant property definitions */
89
+ .input-otp--primary {
90
+ /* Default styles */
91
+ }
92
+
93
+ .input-otp--secondary .input-otp__slot {
94
+ @apply shadow-none;
95
+ background-color: var(--input-otp-slot-bg);
96
+
97
+ --input-otp-slot-bg: var(--color-default);
98
+ --input-otp-slot-bg-hover: var(--color-default-hover);
99
+ --input-otp-slot-bg-focus: var(--color-default);
100
+
101
+ @media (hover: hover) {
102
+ &:hover,
103
+ &[data-hovered="true"] {
104
+ background-color: var(--input-otp-slot-bg-hover);
105
+ }
106
+ }
107
+
108
+ &[data-active="true"],
109
+ &[data-filled="true"] {
110
+ background-color: var(--input-otp-slot-bg-focus);
111
+ }
112
+ }
113
+
114
+ /* Animations */
115
+ @keyframes slot-value-in {
116
+ 0% {
117
+ opacity: 0;
118
+ transform: translateY(8px) scale(0.8);
119
+ }
120
+ 100% {
121
+ opacity: 1;
122
+ transform: translateY(0) scale(1);
123
+ }
124
+ }