@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,267 @@
1
+ /* -------------------------------------------------------------------------------------------------
2
+ * Toast Component Styles
3
+ * Block: toast
4
+ * ------------------------------------------------------------------------------------------------- */
5
+
6
+ /* Toast Region - Fixed container that stacks toasts along Y axis */
7
+ .toast-region {
8
+ @apply pointer-events-none fixed z-50 outline-none;
9
+ @apply w-[calc(100vw-2rem)] sm:w-auto;
10
+
11
+ display: flex;
12
+ gap: 0.5rem;
13
+ }
14
+
15
+ .toast-region:focus-visible {
16
+ @apply outline-2 outline-offset-2 outline-focus;
17
+ }
18
+
19
+ /*
20
+ * Bottom positions: column
21
+ * Newest is last in DOM → visual bottom → nearest to screen edge
22
+ */
23
+ .toast-region--bottom {
24
+ @apply bottom-4 left-1/2 -translate-x-1/2;
25
+ flex-direction: column;
26
+ }
27
+
28
+ .toast-region--bottom-start {
29
+ @apply bottom-4 left-4;
30
+ flex-direction: column;
31
+ }
32
+
33
+ .toast-region--bottom-end {
34
+ @apply right-4 bottom-4;
35
+ flex-direction: column;
36
+ }
37
+
38
+ /*
39
+ * Top positions: column-reverse
40
+ * Newest is last in DOM → visually first → nearest to top edge
41
+ */
42
+ .toast-region--top {
43
+ @apply top-4 left-1/2 -translate-x-1/2;
44
+ flex-direction: column-reverse;
45
+ }
46
+
47
+ .toast-region--top-start {
48
+ @apply top-4 left-4;
49
+ flex-direction: column-reverse;
50
+ }
51
+
52
+ .toast-region--top-end {
53
+ @apply top-4 right-4;
54
+ flex-direction: column-reverse;
55
+ }
56
+
57
+ /* -------------------------------------------------------------------------------------------------
58
+ * Block: toast
59
+ * ------------------------------------------------------------------------------------------------- */
60
+
61
+ .toast {
62
+ --toast-width: 360px;
63
+
64
+ @apply relative pointer-events-auto flex w-full items-start gap-3;
65
+ @apply rounded-2xl border border-border bg-overlay px-4 py-3.5 shadow-overlay;
66
+
67
+ /* Clamp to viewport on mobile, fixed width on sm+ */
68
+ min-width: min(calc(100vw - 2rem), var(--toast-width));
69
+ max-width: var(--toast-width);
70
+ }
71
+
72
+ .toast:focus-visible {
73
+ @apply outline-2 outline-offset-2 outline-focus;
74
+ }
75
+
76
+ /* -------------------------------------------------------------------------------------------------
77
+ * Elements
78
+ * ------------------------------------------------------------------------------------------------- */
79
+
80
+ .toast__content {
81
+ @apply flex min-w-0 flex-1 flex-col gap-0.5;
82
+ }
83
+
84
+ .toast__indicator {
85
+ @apply mt-0.5 flex shrink-0 items-center justify-center select-none;
86
+ @apply size-5 rounded-full;
87
+
88
+ [data-slot="toast-default-icon"] {
89
+ @apply size-3.5;
90
+ }
91
+ }
92
+
93
+ .toast__title {
94
+ @apply text-sm font-semibold leading-5 text-overlay-foreground;
95
+ }
96
+
97
+ .toast__description {
98
+ @apply text-xs leading-[1.125rem] text-muted;
99
+ }
100
+
101
+ .toast__close-button {
102
+ @apply -mr-1 -mt-0.5 shrink-0 opacity-40;
103
+
104
+ transition: opacity 200ms ease;
105
+ @apply motion-reduce:transition-none;
106
+
107
+ @media (hover: hover) {
108
+ &:hover,
109
+ &[data-hovered="true"] {
110
+ @apply opacity-100;
111
+ }
112
+ }
113
+ }
114
+
115
+ .toast__action {
116
+ @apply shrink-0;
117
+ }
118
+
119
+ /* -------------------------------------------------------------------------------------------------
120
+ * Variant modifiers
121
+ * ------------------------------------------------------------------------------------------------- */
122
+
123
+ .toast--default {
124
+ /* uses base bg-overlay + border-border */
125
+ }
126
+
127
+ .toast--accent {
128
+ background-color: color-mix(in oklab, var(--accent) 8%, var(--overlay));
129
+ border-color: color-mix(in oklab, var(--accent) 28%, transparent);
130
+ }
131
+
132
+ .toast--accent .toast__title {
133
+ @apply text-accent;
134
+ }
135
+
136
+ .toast--accent .toast__indicator {
137
+ background-color: color-mix(in oklab, var(--accent) 15%, transparent);
138
+ @apply text-accent;
139
+ }
140
+
141
+ .toast--success {
142
+ background-color: color-mix(in oklab, var(--success) 8%, var(--overlay));
143
+ border-color: color-mix(in oklab, var(--success) 28%, transparent);
144
+ }
145
+
146
+ .toast--success .toast__title {
147
+ @apply text-success;
148
+ }
149
+
150
+ .toast--success .toast__indicator {
151
+ background-color: color-mix(in oklab, var(--success) 15%, transparent);
152
+ @apply text-success;
153
+ }
154
+
155
+ .toast--warning {
156
+ background-color: color-mix(in oklab, var(--warning) 9%, var(--overlay));
157
+ border-color: color-mix(in oklab, var(--warning) 30%, transparent);
158
+ }
159
+
160
+ .toast--warning .toast__title {
161
+ @apply text-warning;
162
+ }
163
+
164
+ .toast--warning .toast__indicator {
165
+ background-color: color-mix(in oklab, var(--warning) 15%, transparent);
166
+ @apply text-warning;
167
+ }
168
+
169
+ .toast--danger {
170
+ background-color: color-mix(in oklab, var(--danger) 8%, var(--overlay));
171
+ border-color: color-mix(in oklab, var(--danger) 30%, transparent);
172
+ }
173
+
174
+ .toast--danger .toast__title {
175
+ @apply text-danger;
176
+ }
177
+
178
+ .toast--danger .toast__indicator {
179
+ background-color: color-mix(in oklab, var(--danger) 15%, transparent);
180
+ @apply text-danger;
181
+ }
182
+
183
+ /* -------------------------------------------------------------------------------------------------
184
+ * Enter/exit animations
185
+ * Reka sets data-state="open"/"closed" on ToastRoot.
186
+ * Corner toasts slide from the nearest screen edge.
187
+ * Center toasts slide from top or bottom.
188
+ * ------------------------------------------------------------------------------------------------- */
189
+
190
+ .toast--bottom-end[data-state="open"],
191
+ .toast--top-end[data-state="open"] {
192
+ animation: toast-enter-right 0.3s cubic-bezier(0.16, 1, 0.3, 1);
193
+ }
194
+ .toast--bottom-end[data-state="closed"],
195
+ .toast--top-end[data-state="closed"] {
196
+ animation: toast-exit-right 0.2s ease-in forwards;
197
+ }
198
+
199
+ .toast--bottom-start[data-state="open"],
200
+ .toast--top-start[data-state="open"] {
201
+ animation: toast-enter-left 0.3s cubic-bezier(0.16, 1, 0.3, 1);
202
+ }
203
+ .toast--bottom-start[data-state="closed"],
204
+ .toast--top-start[data-state="closed"] {
205
+ animation: toast-exit-left 0.2s ease-in forwards;
206
+ }
207
+
208
+ .toast--bottom[data-state="open"] {
209
+ animation: toast-enter-bottom 0.3s cubic-bezier(0.16, 1, 0.3, 1);
210
+ }
211
+ .toast--bottom[data-state="closed"] {
212
+ animation: toast-exit-bottom 0.2s ease-in forwards;
213
+ }
214
+
215
+ .toast--top[data-state="open"] {
216
+ animation: toast-enter-top 0.3s cubic-bezier(0.16, 1, 0.3, 1);
217
+ }
218
+ .toast--top[data-state="closed"] {
219
+ animation: toast-exit-top 0.2s ease-in forwards;
220
+ }
221
+
222
+ @media (prefers-reduced-motion: reduce) {
223
+ [class*="toast--"][data-state="open"],
224
+ [class*="toast--"][data-state="closed"] {
225
+ animation: none;
226
+ }
227
+ }
228
+
229
+ /* -------------------------------------------------------------------------------------------------
230
+ * Keyframes
231
+ * ------------------------------------------------------------------------------------------------- */
232
+
233
+ @keyframes toast-enter-right {
234
+ from { translate: calc(100% + 1rem) 0; opacity: 0; }
235
+ to { translate: 0 0; opacity: 1; }
236
+ }
237
+
238
+ @keyframes toast-exit-right {
239
+ to { translate: calc(100% + 1rem) 0; opacity: 0; }
240
+ }
241
+
242
+ @keyframes toast-enter-left {
243
+ from { translate: calc(-100% - 1rem) 0; opacity: 0; }
244
+ to { translate: 0 0; opacity: 1; }
245
+ }
246
+
247
+ @keyframes toast-exit-left {
248
+ to { translate: calc(-100% - 1rem) 0; opacity: 0; }
249
+ }
250
+
251
+ @keyframes toast-enter-bottom {
252
+ from { translate: 0 calc(100% + 1rem); opacity: 0; }
253
+ to { translate: 0 0; opacity: 1; }
254
+ }
255
+
256
+ @keyframes toast-exit-bottom {
257
+ to { translate: 0 calc(100% + 1rem); opacity: 0; }
258
+ }
259
+
260
+ @keyframes toast-enter-top {
261
+ from { translate: 0 calc(-100% - 1rem); opacity: 0; }
262
+ to { translate: 0 0; opacity: 1; }
263
+ }
264
+
265
+ @keyframes toast-exit-top {
266
+ to { translate: 0 calc(-100% - 1rem); opacity: 0; }
267
+ }
@@ -0,0 +1,174 @@
1
+ /* ==========================================================================
2
+ ToggleButtonGroup - Groups multiple ToggleButtons into a unified control
3
+ ========================================================================== */
4
+
5
+ /* Base styles */
6
+ .toggle-button-group {
7
+ @apply inline-flex h-auto w-fit items-center justify-center gap-0;
8
+ }
9
+
10
+ /* ==========================================================================
11
+ Orientation variants
12
+ ========================================================================== */
13
+
14
+ .toggle-button-group--horizontal {
15
+ @apply flex-row rounded-3xl;
16
+ }
17
+
18
+ .toggle-button-group--vertical {
19
+ @apply flex-col rounded-lg;
20
+
21
+ & .toggle-button {
22
+ @apply w-full;
23
+ }
24
+
25
+ & .toggle-button:first-child {
26
+ @apply !rounded-t-lg rounded-b-none;
27
+ }
28
+ & .toggle-button:last-child {
29
+ @apply !rounded-b-lg rounded-t-none;
30
+ }
31
+ }
32
+
33
+ /* ==========================================================================
34
+ Full width modifier
35
+ ========================================================================== */
36
+
37
+ .toggle-button-group--full-width {
38
+ @apply w-full;
39
+ }
40
+
41
+ /* ==========================================================================
42
+ Attached mode (default) - unified group border with dividers between buttons
43
+ ========================================================================== */
44
+
45
+ /*
46
+ * The GROUP container owns the outer border (via ring/box-shadow).
47
+ * Individual buttons suppress their own background so the group background
48
+ * shows through. A thin divider renders between adjacent siblings.
49
+ */
50
+
51
+ /* Group container: outer ring acts as the shared border for all contained buttons */
52
+ .toggle-button-group:not(.toggle-button-group--detached) {
53
+ box-shadow: 0 0 0 1px color-mix(in oklab, currentColor 20%, transparent);
54
+ }
55
+
56
+ /* Suppress individual button backgrounds inside attached group so the
57
+ group background shows through as a single unified surface */
58
+ .toggle-button-group:not(.toggle-button-group--detached) .toggle-button {
59
+ --toggle-button-bg: transparent;
60
+ --toggle-button-bg-hover: color-mix(in oklab, currentColor 8%, transparent);
61
+ --toggle-button-bg-pressed: color-mix(in oklab, currentColor 12%, transparent);
62
+ @apply rounded-none;
63
+ }
64
+
65
+ /* Divider between adjacent buttons — horizontal group: vertical line */
66
+ .toggle-button-group--horizontal:not(.toggle-button-group--detached) .toggle-button + .toggle-button {
67
+ border-inline-start: 1px solid color-mix(in oklab, currentColor 20%, transparent);
68
+ }
69
+
70
+ /* Divider between adjacent buttons — vertical group: horizontal line */
71
+ .toggle-button-group--vertical:not(.toggle-button-group--detached) .toggle-button + .toggle-button {
72
+ border-block-start: 1px solid color-mix(in oklab, currentColor 20%, transparent);
73
+ }
74
+
75
+ /* Apply border radius to first button (start edge) */
76
+ .toggle-button-group--horizontal .toggle-button:first-child {
77
+ @apply rounded-s-3xl;
78
+ }
79
+
80
+ /* Apply border radius to last button (end edge) */
81
+ .toggle-button-group--horizontal .toggle-button:last-child {
82
+ @apply rounded-e-3xl;
83
+ }
84
+
85
+ /* If only one button, apply both rounded edges */
86
+ .toggle-button-group--horizontal .toggle-button:first-child:last-child {
87
+ @apply rounded-3xl;
88
+ }
89
+
90
+ /* Apply border radius to first button (top edge) in vertical */
91
+ .toggle-button-group--vertical .toggle-button:first-child {
92
+ @apply rounded-t-3xl;
93
+ }
94
+
95
+ /* Apply border radius to last button (bottom edge) in vertical */
96
+ .toggle-button-group--vertical .toggle-button:last-child {
97
+ @apply rounded-b-3xl;
98
+ }
99
+
100
+ /* If only one button in vertical, apply all rounded edges */
101
+ .toggle-button-group--vertical .toggle-button:first-child:last-child {
102
+ @apply rounded-3xl;
103
+ }
104
+
105
+ /* Remove scale transform on active/pressed state for buttons in group */
106
+ .toggle-button-group .toggle-button:active,
107
+ .toggle-button-group .toggle-button:active {
108
+ transform: none;
109
+ }
110
+
111
+ /* Override focus ring to use inset style so it stays within button bounds */
112
+ .toggle-button-group .toggle-button:focus-visible:not(:focus),
113
+ .toggle-button-group .toggle-button:focus-visible {
114
+ --tw-ring-offset-width: 0px;
115
+ @apply ring-inset;
116
+ }
117
+
118
+ /* Full width: stretch each toggle button */
119
+ .toggle-button-group--full-width .toggle-button {
120
+ @apply flex-1;
121
+ }
122
+
123
+ /* ==========================================================================
124
+ Separator (compound component)
125
+ ========================================================================== */
126
+
127
+ .toggle-button-group__separator {
128
+ @apply bg-current opacity-15;
129
+
130
+ border-radius: 4px;
131
+ position: absolute;
132
+ pointer-events: none;
133
+
134
+ /**
135
+ * Transitions
136
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
137
+ */
138
+ transition: opacity 300ms var(--ease-smooth);
139
+ @apply motion-reduce:transition-none;
140
+
141
+ /* Horizontal orientation - vertical divider */
142
+ .toggle-button-group--horizontal & {
143
+ left: -1px;
144
+ top: 25%;
145
+ width: 1px;
146
+ height: 50%;
147
+ }
148
+
149
+ /* Vertical orientation - horizontal divider */
150
+ .toggle-button-group--vertical & {
151
+ left: 25%;
152
+ top: -1px;
153
+ width: 50%;
154
+ height: 1px;
155
+ }
156
+ }
157
+
158
+ /* ==========================================================================
159
+ Detached mode - buttons separated with gaps
160
+ ========================================================================== */
161
+
162
+ .toggle-button-group--detached {
163
+ @apply gap-1;
164
+ }
165
+
166
+ /* Restore border radius in detached mode */
167
+ .toggle-button-group--detached .toggle-button {
168
+ @apply rounded-3xl;
169
+ }
170
+
171
+ /* Hide separators in detached mode */
172
+ .toggle-button-group--detached .toggle-button-group__separator {
173
+ display: none;
174
+ }
@@ -0,0 +1,149 @@
1
+ /* ==========================================================================
2
+ ToggleButton - Interactive toggle control for on/off states
3
+ ========================================================================== */
4
+
5
+ /* Base styles */
6
+ .toggle-button {
7
+ @apply relative isolate inline-flex h-10 w-fit origin-center items-center justify-center gap-2 rounded-3xl px-4 text-sm font-medium whitespace-nowrap outline-none select-none no-highlight md:h-9;
8
+
9
+ /**
10
+ * Transitions
11
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
12
+ */
13
+ transition:
14
+ transform 300ms var(--ease-smooth),
15
+ background-color 300ms var(--ease-out),
16
+ box-shadow 300ms var(--ease-out);
17
+ @apply transform-gpu motion-reduce:transition-none;
18
+
19
+ /* Cursor */
20
+ cursor: var(--cursor-interactive);
21
+
22
+ /* Default tokens (unselected state) */
23
+ --toggle-button-bg: var(--color-default);
24
+ --toggle-button-bg-hover: var(--color-default-hover);
25
+ --toggle-button-bg-pressed: var(--color-default-hover);
26
+ --toggle-button-fg: currentColor;
27
+
28
+ /* Selected state tokens */
29
+ --toggle-button-bg-selected: var(--color-accent-soft);
30
+ --toggle-button-bg-selected-hover: var(--color-accent-soft-hover);
31
+ --toggle-button-bg-selected-pressed: var(--color-accent-soft-hover);
32
+ --toggle-button-fg-selected: var(--color-accent-soft-foreground);
33
+
34
+ background-color: var(--toggle-button-bg);
35
+ color: var(--toggle-button-fg);
36
+
37
+ /* Focus state */
38
+ &:focus-visible:not(:focus),
39
+ &[data-focus-visible="true"] {
40
+ @apply status-focused;
41
+ }
42
+
43
+ /* Disabled state */
44
+ &:disabled,
45
+ &[aria-disabled="true"] {
46
+ @apply status-disabled;
47
+ }
48
+
49
+ /* Hover */
50
+ @media (hover: hover) {
51
+ &:hover,
52
+ &[data-hovered="true"] {
53
+ background-color: var(--toggle-button-bg-hover);
54
+ }
55
+ }
56
+
57
+ /* Active / pressed */
58
+ &:active,
59
+ &[data-pressed="true"] {
60
+ background-color: var(--toggle-button-bg-pressed);
61
+ transform: scale(0.97);
62
+ }
63
+
64
+ /* Selected state */
65
+ &[data-state="on"] {
66
+ background-color: var(--toggle-button-bg-selected);
67
+ color: var(--toggle-button-fg-selected);
68
+
69
+ @media (hover: hover) {
70
+ &:hover,
71
+ &[data-hovered="true"] {
72
+ background-color: var(--toggle-button-bg-selected-hover);
73
+ }
74
+ }
75
+
76
+ &:active,
77
+ &[data-pressed="true"] {
78
+ background-color: var(--toggle-button-bg-selected-pressed);
79
+ }
80
+ }
81
+
82
+ /* SVG icon styling */
83
+ & svg {
84
+ @apply pointer-events-none -mx-0.5 my-0.5 size-5 shrink-0 self-center sm:my-1 sm:size-4;
85
+ }
86
+ }
87
+
88
+ /* ==========================================================================
89
+ Size variants
90
+ ========================================================================== */
91
+
92
+ .toggle-button--sm {
93
+ @apply h-9 px-3 md:h-8;
94
+
95
+ & svg {
96
+ @apply size-4;
97
+ }
98
+
99
+ &:active,
100
+ &[data-pressed="true"] {
101
+ transform: scale(0.98);
102
+ }
103
+ }
104
+
105
+ .toggle-button--md {
106
+ /* No styles as this is the default size */
107
+ }
108
+
109
+ .toggle-button--lg {
110
+ @apply h-11 text-base md:h-10;
111
+
112
+ &:active,
113
+ &[data-pressed="true"] {
114
+ transform: scale(0.96);
115
+ }
116
+ }
117
+
118
+ /* ==========================================================================
119
+ Variant styles
120
+ ========================================================================== */
121
+
122
+ .toggle-button--default {
123
+ --toggle-button-bg: var(--color-default);
124
+ --toggle-button-bg-hover: var(--color-default-hover);
125
+ --toggle-button-bg-pressed: var(--color-default-hover);
126
+ }
127
+
128
+ .toggle-button--ghost {
129
+ --toggle-button-bg: transparent;
130
+ --toggle-button-bg-hover: var(--color-default);
131
+ --toggle-button-bg-pressed: var(--color-default);
132
+ --toggle-button-fg: var(--color-default-foreground);
133
+ }
134
+
135
+ /* ==========================================================================
136
+ Icon-only modifier
137
+ ========================================================================== */
138
+
139
+ .toggle-button--icon-only {
140
+ @apply w-10 p-0 md:w-9;
141
+ }
142
+
143
+ .toggle-button--icon-only.toggle-button--sm {
144
+ @apply w-9 md:w-8;
145
+ }
146
+
147
+ .toggle-button--icon-only.toggle-button--lg {
148
+ @apply w-11 md:w-10;
149
+ }
@@ -0,0 +1,32 @@
1
+ /* ==========================================================================
2
+ Toolbar - Container for interactive controls with arrow key navigation
3
+ ========================================================================== */
4
+
5
+ /* Base styles */
6
+ .toolbar {
7
+ @apply grid w-fit grid-flow-col items-center gap-2;
8
+
9
+ .separator--vertical {
10
+ @apply h-1/2 self-center;
11
+ }
12
+
13
+ .separator--horizontal {
14
+ @apply w-1/2 justify-center justify-self-center;
15
+ }
16
+ }
17
+
18
+ /* Orientation variants */
19
+ .toolbar--horizontal {
20
+ }
21
+
22
+ .toolbar--vertical {
23
+ @apply grid-flow-row items-start justify-start;
24
+ .button-group {
25
+ @apply justify-start;
26
+ }
27
+ }
28
+
29
+ /* Attached variant */
30
+ .toolbar--attached {
31
+ @apply rounded-full bg-surface p-1 shadow-overlay;
32
+ }
@@ -0,0 +1,47 @@
1
+ /* Tooltip component styles */
2
+
3
+ /* Base tooltip styles */
4
+ .tooltip {
5
+ @apply max-w-xs text-xs break-all;
6
+ /* box-shadow: var(--shadow-overlay); */
7
+ will-change: opacity, transform;
8
+
9
+ /* Arrow styling */
10
+ & [data-slot="overlay-arrow"] {
11
+ @apply stroke-border/40;
12
+ fill: var(--overlay);
13
+ }
14
+
15
+ /* Arrow rotation based on placement */
16
+ &[data-placement="bottom"] [data-slot="overlay-arrow"] {
17
+ rotate: 180deg;
18
+ }
19
+
20
+ &[data-placement="left"] [data-slot="overlay-arrow"] {
21
+ rotate: -90deg;
22
+ }
23
+
24
+ &[data-placement="right"] [data-slot="overlay-arrow"] {
25
+ rotate: 90deg;
26
+ }
27
+ }
28
+
29
+ /* Tooltip trigger */
30
+ .tooltip__trigger {
31
+ @apply inline-block;
32
+
33
+ /**
34
+ * Transitions
35
+ * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
36
+ */
37
+ transition:
38
+ color 300ms var(--ease-smooth),
39
+ background-color 300ms var(--ease-smooth),
40
+ box-shadow 300ms var(--ease-out);
41
+ @apply motion-reduce:transition-none;
42
+
43
+ &:focus-visible:not(:focus),
44
+ &[data-focus-visible="true"] {
45
+ @apply status-focused;
46
+ }
47
+ }