@sabrenski/spire-ui-vue 0.1.1 → 0.2.1

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 (37) hide show
  1. package/README.md +55 -5
  2. package/dist/components/DialMenu/DialAction.vue.d.ts +25 -0
  3. package/dist/components/DialMenu/DialMenu.vue.d.ts +45 -0
  4. package/dist/components/DialMenu/DialTrigger.vue.d.ts +25 -0
  5. package/dist/components/DialMenu/index.d.ts +4 -0
  6. package/dist/components/DialMenu/types.d.ts +63 -0
  7. package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
  8. package/dist/components/LineChart/LineChart.vue.d.ts +1 -1
  9. package/dist/components/LineChart/LineChartPath.vue.d.ts +1 -1
  10. package/dist/components/Modal/Modal.vue.d.ts +2 -0
  11. package/dist/components/Modal/types.d.ts +4 -0
  12. package/dist/components/Navbar/Navbar.vue.d.ts +1 -1
  13. package/dist/components/Navbar/NavbarMenu.vue.d.ts +3 -2
  14. package/dist/components/SearchInput/SearchInput.vue.d.ts +40 -0
  15. package/dist/components/SearchInput/index.d.ts +2 -0
  16. package/dist/components/SearchInput/types.d.ts +48 -0
  17. package/dist/components/Sparkline/Sparkline.vue.d.ts +2 -2
  18. package/dist/components/Sparkline/SparklineLine.vue.d.ts +1 -1
  19. package/dist/components/Table/Table.vue.d.ts +3 -2
  20. package/dist/components/Table/types.d.ts +4 -0
  21. package/dist/components/Timer/Timer.vue.d.ts +60 -0
  22. package/dist/components/Timer/index.d.ts +2 -0
  23. package/dist/components/Timer/types.d.ts +19 -0
  24. package/dist/components/Tree/Tree.vue.d.ts +22 -0
  25. package/dist/components/Tree/TreeNode.vue.d.ts +5 -0
  26. package/dist/components/Tree/index.d.ts +3 -0
  27. package/dist/components/Tree/types.d.ts +55 -0
  28. package/dist/components/index.d.ts +4 -0
  29. package/dist/spire-ui.cjs +45 -45
  30. package/dist/spire-ui.css +1 -1
  31. package/dist/spire-ui.js +19574 -18417
  32. package/dist/theme/anchor-positioning.css +423 -0
  33. package/dist/theme/base.css +93 -0
  34. package/dist/theme/components.css +138 -0
  35. package/dist/theme/semantic.css +399 -0
  36. package/dist/theme.css +4 -0
  37. package/package.json +5 -2
@@ -0,0 +1,423 @@
1
+ /**
2
+ * Global Intelligent Position Fallbacks for CSS Anchor Positioning
3
+ *
4
+ * Usage: Add data-placement="bottom-start" (or any placement) to any anchor-positioned element
5
+ *
6
+ * Applies to: Dropdown, Popover, Tooltip, Combobox, Select, and any future anchor-positioned components
7
+ *
8
+ * Each placement has a priority-ordered fallback sequence:
9
+ * 1. Flip on primary axis (maintain alignment)
10
+ * 2. Try adjacent placements (maintain axis when possible)
11
+ * 3. Flip to perpendicular axis (last resort)
12
+ */
13
+
14
+ /* Reset default popover positioning */
15
+ [popover] {
16
+ position: absolute;
17
+ inset: unset;
18
+ margin: 0;
19
+ overflow: visible;
20
+ }
21
+
22
+ /* Match trigger width - use on dropdown menus that should match their trigger's width */
23
+ [data-spire-same-width] {
24
+ min-width: anchor-size(width);
25
+ }
26
+
27
+ /* Fixed strategy for anchors in fixed containers */
28
+ [popover][data-spire-strategy="fixed"] {
29
+ position: fixed;
30
+ }
31
+
32
+ /* Bottom placements */
33
+ @position-try --fallback-bottom-start-1 {
34
+ inset: auto;
35
+ margin-bottom: 8px;
36
+ bottom: anchor(top);
37
+ left: anchor(left);
38
+ }
39
+
40
+ @position-try --fallback-bottom-start-2 {
41
+ inset: auto;
42
+ margin-left: 4px;
43
+ left: anchor(right);
44
+ top: anchor(top);
45
+ }
46
+
47
+ @position-try --fallback-bottom-start-3 {
48
+ inset: auto;
49
+ margin-right: 4px;
50
+ right: anchor(left);
51
+ top: anchor(top);
52
+ }
53
+
54
+ @position-try --fallback-bottom-end-1 {
55
+ inset: auto;
56
+ margin-bottom: 8px;
57
+ bottom: anchor(top);
58
+ right: anchor(right);
59
+ }
60
+
61
+ @position-try --fallback-bottom-end-2 {
62
+ inset: auto;
63
+ margin-right: 4px;
64
+ right: anchor(left);
65
+ top: anchor(top);
66
+ }
67
+
68
+ @position-try --fallback-bottom-end-3 {
69
+ inset: auto;
70
+ margin-left: 4px;
71
+ left: anchor(right);
72
+ top: anchor(top);
73
+ }
74
+
75
+ @position-try --fallback-bottom-1 {
76
+ inset: auto;
77
+ margin-bottom: 8px;
78
+ bottom: anchor(top);
79
+ left: anchor(left);
80
+ }
81
+
82
+ @position-try --fallback-bottom-2 {
83
+ inset: auto;
84
+ margin-left: 4px;
85
+ left: anchor(right);
86
+ top: anchor(top);
87
+ }
88
+
89
+ @position-try --fallback-bottom-3 {
90
+ inset: auto;
91
+ margin-right: 4px;
92
+ right: anchor(left);
93
+ top: anchor(top);
94
+ }
95
+
96
+ /* Top placements */
97
+ @position-try --fallback-top-start-1 {
98
+ inset: auto;
99
+ margin-top: 8px;
100
+ top: anchor(bottom);
101
+ left: anchor(left);
102
+ }
103
+
104
+ @position-try --fallback-top-start-2 {
105
+ inset: auto;
106
+ margin-left: 4px;
107
+ left: anchor(right);
108
+ top: anchor(top);
109
+ }
110
+
111
+ @position-try --fallback-top-start-3 {
112
+ inset: auto;
113
+ margin-right: 4px;
114
+ right: anchor(left);
115
+ top: anchor(top);
116
+ }
117
+
118
+ @position-try --fallback-top-end-1 {
119
+ inset: auto;
120
+ margin-top: 8px;
121
+ top: anchor(bottom);
122
+ right: anchor(right);
123
+ }
124
+
125
+ @position-try --fallback-top-end-2 {
126
+ inset: auto;
127
+ margin-right: 4px;
128
+ right: anchor(left);
129
+ top: anchor(top);
130
+ }
131
+
132
+ @position-try --fallback-top-end-3 {
133
+ inset: auto;
134
+ margin-left: 4px;
135
+ left: anchor(right);
136
+ top: anchor(top);
137
+ }
138
+
139
+ @position-try --fallback-top-1 {
140
+ inset: auto;
141
+ margin-top: 8px;
142
+ top: anchor(bottom);
143
+ left: anchor(left);
144
+ }
145
+
146
+ @position-try --fallback-top-2 {
147
+ inset: auto;
148
+ margin-left: 4px;
149
+ left: anchor(right);
150
+ top: anchor(top);
151
+ }
152
+
153
+ @position-try --fallback-top-3 {
154
+ inset: auto;
155
+ margin-right: 4px;
156
+ right: anchor(left);
157
+ top: anchor(top);
158
+ }
159
+
160
+ /* Right placements */
161
+ @position-try --fallback-right-start-1 {
162
+ inset: auto;
163
+ margin-right: 4px;
164
+ right: anchor(left);
165
+ top: anchor(top);
166
+ }
167
+
168
+ @position-try --fallback-right-start-2 {
169
+ inset: auto;
170
+ margin-top: 8px;
171
+ top: anchor(bottom);
172
+ left: anchor(left);
173
+ }
174
+
175
+ @position-try --fallback-right-start-3 {
176
+ inset: auto;
177
+ margin-bottom: 8px;
178
+ bottom: anchor(top);
179
+ left: anchor(left);
180
+ }
181
+
182
+ @position-try --fallback-right-end-1 {
183
+ inset: auto;
184
+ margin-right: 4px;
185
+ right: anchor(left);
186
+ bottom: anchor(bottom);
187
+ }
188
+
189
+ @position-try --fallback-right-end-2 {
190
+ inset: auto;
191
+ margin-bottom: 8px;
192
+ bottom: anchor(top);
193
+ left: anchor(left);
194
+ }
195
+
196
+ @position-try --fallback-right-end-3 {
197
+ inset: auto;
198
+ margin-top: 8px;
199
+ top: anchor(bottom);
200
+ left: anchor(left);
201
+ }
202
+
203
+ @position-try --fallback-right-1 {
204
+ inset: auto;
205
+ margin-right: 4px;
206
+ right: anchor(left);
207
+ top: anchor(top);
208
+ }
209
+
210
+ @position-try --fallback-right-2 {
211
+ inset: auto;
212
+ margin-top: 8px;
213
+ top: anchor(bottom);
214
+ left: anchor(left);
215
+ }
216
+
217
+ @position-try --fallback-right-3 {
218
+ inset: auto;
219
+ margin-bottom: 8px;
220
+ bottom: anchor(top);
221
+ left: anchor(left);
222
+ }
223
+
224
+ /* Left placements */
225
+ @position-try --fallback-left-start-1 {
226
+ inset: auto;
227
+ margin-left: 4px;
228
+ left: anchor(right);
229
+ top: anchor(top);
230
+ }
231
+
232
+ @position-try --fallback-left-start-2 {
233
+ inset: auto;
234
+ margin-top: 8px;
235
+ top: anchor(bottom);
236
+ right: anchor(right);
237
+ }
238
+
239
+ @position-try --fallback-left-start-3 {
240
+ inset: auto;
241
+ margin-bottom: 8px;
242
+ bottom: anchor(top);
243
+ right: anchor(right);
244
+ }
245
+
246
+ @position-try --fallback-left-end-1 {
247
+ inset: auto;
248
+ margin-left: 4px;
249
+ left: anchor(right);
250
+ bottom: anchor(bottom);
251
+ }
252
+
253
+ @position-try --fallback-left-end-2 {
254
+ inset: auto;
255
+ margin-bottom: 8px;
256
+ bottom: anchor(top);
257
+ right: anchor(right);
258
+ }
259
+
260
+ @position-try --fallback-left-end-3 {
261
+ inset: auto;
262
+ margin-top: 8px;
263
+ top: anchor(bottom);
264
+ right: anchor(right);
265
+ }
266
+
267
+ @position-try --fallback-left-1 {
268
+ inset: auto;
269
+ margin-left: 4px;
270
+ left: anchor(right);
271
+ top: anchor(top);
272
+ }
273
+
274
+ @position-try --fallback-left-2 {
275
+ inset: auto;
276
+ margin-top: 8px;
277
+ top: anchor(bottom);
278
+ right: anchor(right);
279
+ }
280
+
281
+ @position-try --fallback-left-3 {
282
+ inset: auto;
283
+ margin-bottom: 8px;
284
+ bottom: anchor(top);
285
+ right: anchor(right);
286
+ }
287
+
288
+ /* Apply fallbacks to elements with data-spire-placement */
289
+ [data-spire-placement="bottom-start"] {
290
+ inset: auto;
291
+ margin-top: 8px;
292
+ top: anchor(bottom);
293
+ left: anchor(left);
294
+ position-try-fallbacks:
295
+ --fallback-bottom-start-1,
296
+ --fallback-bottom-start-2,
297
+ --fallback-bottom-start-3;
298
+ }
299
+
300
+ [data-spire-placement="bottom-end"] {
301
+ inset: auto;
302
+ margin-top: 8px;
303
+ top: anchor(bottom);
304
+ right: anchor(right);
305
+ position-try-fallbacks:
306
+ --fallback-bottom-end-1,
307
+ --fallback-bottom-end-2,
308
+ --fallback-bottom-end-3;
309
+ }
310
+
311
+ [data-spire-placement="bottom"] {
312
+ inset: auto;
313
+ margin-top: 8px;
314
+ top: anchor(bottom);
315
+ left: calc(anchor(left) + (anchor-size(width) / 2));
316
+ translate: -50% 0;
317
+ position-try-fallbacks:
318
+ --fallback-bottom-1,
319
+ --fallback-bottom-2,
320
+ --fallback-bottom-3;
321
+ }
322
+
323
+ [data-spire-placement="top-start"] {
324
+ inset: auto;
325
+ margin-bottom: 8px;
326
+ bottom: anchor(top);
327
+ left: anchor(left);
328
+ position-try-fallbacks:
329
+ --fallback-top-start-1,
330
+ --fallback-top-start-2,
331
+ --fallback-top-start-3;
332
+ }
333
+
334
+ [data-spire-placement="top-end"] {
335
+ inset: auto;
336
+ margin-bottom: 8px;
337
+ bottom: anchor(top);
338
+ right: anchor(right);
339
+ position-try-fallbacks:
340
+ --fallback-top-end-1,
341
+ --fallback-top-end-2,
342
+ --fallback-top-end-3;
343
+ }
344
+
345
+ [data-spire-placement="top"] {
346
+ inset: auto;
347
+ margin-bottom: 8px;
348
+ bottom: anchor(top);
349
+ left: calc(anchor(left) + (anchor-size(width) / 2));
350
+ translate: -50% 0;
351
+ position-try-fallbacks:
352
+ --fallback-top-1,
353
+ --fallback-top-2,
354
+ --fallback-top-3;
355
+ }
356
+
357
+ [data-spire-placement="right-start"] {
358
+ inset: auto;
359
+ margin-left: 4px;
360
+ left: anchor(right);
361
+ top: anchor(top);
362
+ position-try-fallbacks:
363
+ --fallback-right-start-1,
364
+ --fallback-right-start-2,
365
+ --fallback-right-start-3;
366
+ }
367
+
368
+ [data-spire-placement="right-end"] {
369
+ inset: auto;
370
+ margin-left: 4px;
371
+ left: anchor(right);
372
+ bottom: anchor(bottom);
373
+ position-try-fallbacks:
374
+ --fallback-right-end-1,
375
+ --fallback-right-end-2,
376
+ --fallback-right-end-3;
377
+ }
378
+
379
+ [data-spire-placement="right"] {
380
+ inset: auto;
381
+ margin-left: 4px;
382
+ left: anchor(right);
383
+ top: calc(anchor(top) + (anchor-size(height) / 2));
384
+ translate: 0 -50%;
385
+ position-try-fallbacks:
386
+ --fallback-right-1,
387
+ --fallback-right-2,
388
+ --fallback-right-3;
389
+ }
390
+
391
+ [data-spire-placement="left-start"] {
392
+ inset: auto;
393
+ margin-right: 4px;
394
+ right: anchor(left);
395
+ top: anchor(top);
396
+ position-try-fallbacks:
397
+ --fallback-left-start-1,
398
+ --fallback-left-start-2,
399
+ --fallback-left-start-3;
400
+ }
401
+
402
+ [data-spire-placement="left-end"] {
403
+ inset: auto;
404
+ margin-right: 4px;
405
+ right: anchor(left);
406
+ bottom: anchor(bottom);
407
+ position-try-fallbacks:
408
+ --fallback-left-end-1,
409
+ --fallback-left-end-2,
410
+ --fallback-left-end-3;
411
+ }
412
+
413
+ [data-spire-placement="left"] {
414
+ inset: auto;
415
+ margin-right: 4px;
416
+ right: anchor(left);
417
+ top: calc(anchor(top) + (anchor-size(height) / 2));
418
+ translate: 0 -50%;
419
+ position-try-fallbacks:
420
+ --fallback-left-1,
421
+ --fallback-left-2,
422
+ --fallback-left-3;
423
+ }
@@ -0,0 +1,93 @@
1
+ :root {
2
+ --color-primary-base: oklch(55% 0.1632 318.71);
3
+ --color-secondary-base: oklch(55% 0.18 285);
4
+ --color-success-base: oklch(55% 0.19 145);
5
+ --color-danger-base: oklch(55% 0.22 27);
6
+ --color-warning-base: oklch(70% 0.17 70);
7
+ --color-neutral-base: oklch(50% 0.02 60);
8
+ }
9
+
10
+
11
+ @theme {
12
+ --color-primary-50: oklch(from var(--color-primary-base) 97% calc(c * 0.1) h);
13
+ --color-primary-100: oklch(from var(--color-primary-base) 94% calc(c * 0.15) h);
14
+ --color-primary-200: oklch(from var(--color-primary-base) 86% calc(c * 0.25) h);
15
+ --color-primary-300: oklch(from var(--color-primary-base) 76% calc(c * 0.4) h);
16
+ --color-primary-400: oklch(from var(--color-primary-base) 65% calc(c * 0.7) h);
17
+ --color-primary-500: oklch(from var(--color-primary-base) l c h);
18
+ --color-primary-600: oklch(from var(--color-primary-base) 47% calc(c * 0.95) h);
19
+ --color-primary-700: oklch(from var(--color-primary-base) 39% calc(c * 0.85) h);
20
+ --color-primary-800: oklch(from var(--color-primary-base) 31% calc(c * 0.7) h);
21
+ --color-primary-900: oklch(from var(--color-primary-base) 23% calc(c * 0.55) h);
22
+ --color-primary-950: oklch(from var(--color-primary-base) 14% calc(c * 0.4) h);
23
+
24
+ --color-secondary-50: oklch(from var(--color-secondary-base) 97% calc(c * 0.1) h);
25
+ --color-secondary-100: oklch(from var(--color-secondary-base) 94% calc(c * 0.15) h);
26
+ --color-secondary-200: oklch(from var(--color-secondary-base) 86% calc(c * 0.25) h);
27
+ --color-secondary-300: oklch(from var(--color-secondary-base) 76% calc(c * 0.4) h);
28
+ --color-secondary-400: oklch(from var(--color-secondary-base) 65% calc(c * 0.7) h);
29
+ --color-secondary-500: oklch(from var(--color-secondary-base) l c h);
30
+ --color-secondary-600: oklch(from var(--color-secondary-base) 47% calc(c * 0.95) h);
31
+ --color-secondary-700: oklch(from var(--color-secondary-base) 39% calc(c * 0.85) h);
32
+ --color-secondary-800: oklch(from var(--color-secondary-base) 31% calc(c * 0.7) h);
33
+ --color-secondary-900: oklch(from var(--color-secondary-base) 23% calc(c * 0.55) h);
34
+ --color-secondary-950: oklch(from var(--color-secondary-base) 14% calc(c * 0.4) h);
35
+
36
+ --color-success-50: oklch(from var(--color-success-base) 97% calc(c * 0.1) h);
37
+ --color-success-100: oklch(from var(--color-success-base) 94% calc(c * 0.15) h);
38
+ --color-success-200: oklch(from var(--color-success-base) 86% calc(c * 0.25) h);
39
+ --color-success-300: oklch(from var(--color-success-base) 76% calc(c * 0.4) h);
40
+ --color-success-400: oklch(from var(--color-success-base) 65% calc(c * 0.7) h);
41
+ --color-success-500: oklch(from var(--color-success-base) l c h);
42
+ --color-success-600: oklch(from var(--color-success-base) 47% calc(c * 0.95) h);
43
+ --color-success-700: oklch(from var(--color-success-base) 39% calc(c * 0.85) h);
44
+ --color-success-800: oklch(from var(--color-success-base) 31% calc(c * 0.7) h);
45
+ --color-success-900: oklch(from var(--color-success-base) 23% calc(c * 0.55) h);
46
+ --color-success-950: oklch(from var(--color-success-base) 14% calc(c * 0.4) h);
47
+
48
+ --color-danger-50: oklch(from var(--color-danger-base) 97% calc(c * 0.1) h);
49
+ --color-danger-100: oklch(from var(--color-danger-base) 94% calc(c * 0.15) h);
50
+ --color-danger-200: oklch(from var(--color-danger-base) 86% calc(c * 0.25) h);
51
+ --color-danger-300: oklch(from var(--color-danger-base) 76% calc(c * 0.4) h);
52
+ --color-danger-400: oklch(from var(--color-danger-base) 65% calc(c * 0.7) h);
53
+ --color-danger-500: oklch(from var(--color-danger-base) l c h);
54
+ --color-danger-600: oklch(from var(--color-danger-base) 47% calc(c * 0.95) h);
55
+ --color-danger-700: oklch(from var(--color-danger-base) 39% calc(c * 0.85) h);
56
+ --color-danger-800: oklch(from var(--color-danger-base) 31% calc(c * 0.7) h);
57
+ --color-danger-900: oklch(from var(--color-danger-base) 23% calc(c * 0.55) h);
58
+ --color-danger-950: oklch(from var(--color-danger-base) 14% calc(c * 0.4) h);
59
+
60
+ --color-warning-50: oklch(from var(--color-warning-base) 97% calc(c * 0.1) h);
61
+ --color-warning-100: oklch(from var(--color-warning-base) 94% calc(c * 0.15) h);
62
+ --color-warning-200: oklch(from var(--color-warning-base) 86% calc(c * 0.25) h);
63
+ --color-warning-300: oklch(from var(--color-warning-base) 76% calc(c * 0.4) h);
64
+ --color-warning-400: oklch(from var(--color-warning-base) 65% calc(c * 0.7) h);
65
+ --color-warning-500: oklch(from var(--color-warning-base) l c h);
66
+ --color-warning-600: oklch(from var(--color-warning-base) 47% calc(c * 0.95) h);
67
+ --color-warning-700: oklch(from var(--color-warning-base) 39% calc(c * 0.85) h);
68
+ --color-warning-800: oklch(from var(--color-warning-base) 31% calc(c * 0.7) h);
69
+ --color-warning-900: oklch(from var(--color-warning-base) 23% calc(c * 0.55) h);
70
+ --color-warning-950: oklch(from var(--color-warning-base) 14% calc(c * 0.4) h);
71
+
72
+ --color-neutral-50: oklch(from var(--color-neutral-base) 97% calc(c * 0.1) h);
73
+ --color-neutral-100: oklch(from var(--color-neutral-base) 94% calc(c * 0.15) h);
74
+ --color-neutral-200: oklch(from var(--color-neutral-base) 86% calc(c * 0.25) h);
75
+ --color-neutral-300: oklch(from var(--color-neutral-base) 76% calc(c * 0.4) h);
76
+ --color-neutral-400: oklch(from var(--color-neutral-base) 65% calc(c * 0.7) h);
77
+ --color-neutral-500: oklch(from var(--color-neutral-base) l c h);
78
+ --color-neutral-600: oklch(from var(--color-neutral-base) 47% calc(c * 0.95) h);
79
+ --color-neutral-700: oklch(from var(--color-neutral-base) 39% calc(c * 0.85) h);
80
+ --color-neutral-800: oklch(from var(--color-neutral-base) 31% calc(c * 0.7) h);
81
+ --color-neutral-900: oklch(from var(--color-neutral-base) 23% calc(c * 0.55) h);
82
+ --color-neutral-950: oklch(from var(--color-neutral-base) 14% calc(c * 0.4) h);
83
+
84
+ --radius-base: 0.5rem;
85
+
86
+ --radius-sm: calc(var(--radius-base) - 4px);
87
+ --radius-md: calc(var(--radius-base) - 2px);
88
+ --radius-lg: var(--radius-base);
89
+ --radius-xl: calc(var(--radius-base) + 4px);
90
+
91
+ --inset-shadow-btn: inset 0.5px 2px 0 0 rgb(255 255 255 / 0.15);
92
+ --inset-shadow-btn-active: inset 2px 3px 0 0 rgb(0 0 0 / 0.15);
93
+ }
@@ -0,0 +1,138 @@
1
+ @theme {
2
+ --color-card: var(--color-elevated);
3
+ --radius-card: var(--radius-lg);
4
+
5
+ --color-dialog: var(--color-elevated);
6
+ --color-dialog-overlay: var(--color-overlay);
7
+ --radius-dialog: var(--radius-lg);
8
+
9
+ --color-tooltip: var(--color-neutral-900);
10
+ --color-tooltip-foreground: var(--color-on-emphasis);
11
+ --radius-tooltip: var(--radius-sm);
12
+
13
+ --radius-badge: var(--radius-sm);
14
+
15
+ --radius-button: var(--radius-lg);
16
+
17
+ --color-avatar: var(--color-muted);
18
+
19
+ --color-picker-handle: white;
20
+ --color-picker-handle-border: white;
21
+ }
22
+
23
+ .dark {
24
+ --color-tooltip: var(--color-neutral-100);
25
+ --color-tooltip-foreground: var(--color-neutral-900);
26
+ }
27
+
28
+ [popover] {
29
+ opacity: 0;
30
+ transform: scale(0.95);
31
+ transition:
32
+ opacity 150ms ease-out,
33
+ transform 150ms ease-out,
34
+ overlay 150ms allow-discrete,
35
+ display 150ms allow-discrete;
36
+ }
37
+
38
+ [popover]:popover-open {
39
+ opacity: 1;
40
+ transform: scale(1);
41
+ }
42
+
43
+ @starting-style {
44
+ [popover]:popover-open {
45
+ opacity: 0;
46
+ transform: scale(0.95);
47
+ }
48
+ }
49
+
50
+ @utility scrollbar-thin {
51
+ scrollbar-width: thin;
52
+ scrollbar-color: var(--color-border) transparent;
53
+
54
+ &::-webkit-scrollbar {
55
+ width: 6px;
56
+ height: 6px;
57
+ }
58
+
59
+ &::-webkit-scrollbar-track {
60
+ background: transparent;
61
+ }
62
+
63
+ &::-webkit-scrollbar-thumb {
64
+ background: var(--color-border);
65
+ border-radius: 3px;
66
+ }
67
+
68
+ &::-webkit-scrollbar-thumb:hover {
69
+ background: var(--color-border-hover);
70
+ }
71
+ }
72
+
73
+ @utility appearance-textfield {
74
+ -moz-appearance: textfield;
75
+
76
+ &::-webkit-outer-spin-button,
77
+ &::-webkit-inner-spin-button {
78
+ -webkit-appearance: none;
79
+ margin: 0;
80
+ }
81
+ }
82
+
83
+ @utility empty-state-responsive {
84
+ & [data-spire-empty-state-title] {
85
+ font-size: 0.875rem;
86
+ line-height: 1.25rem;
87
+ }
88
+
89
+ & [data-spire-empty-state-description] {
90
+ font-size: 0.75rem;
91
+ line-height: 1rem;
92
+ }
93
+
94
+ @container (min-width: 300px) {
95
+ & [data-spire-empty-state-title] {
96
+ font-size: 1rem;
97
+ line-height: 1.5rem;
98
+ }
99
+
100
+ & [data-spire-empty-state-description] {
101
+ font-size: 0.875rem;
102
+ line-height: 1.25rem;
103
+ }
104
+ }
105
+
106
+ @container (min-width: 500px) {
107
+ & [data-spire-empty-state-title] {
108
+ font-size: 1.125rem;
109
+ line-height: 1.75rem;
110
+ }
111
+
112
+ & [data-spire-empty-state-description] {
113
+ font-size: 0.875rem;
114
+ line-height: 1.25rem;
115
+ }
116
+ }
117
+ }
118
+
119
+ @utility line-through-animated {
120
+ position: relative;
121
+
122
+ &::after {
123
+ content: '';
124
+ position: absolute;
125
+ left: 0;
126
+ top: 50%;
127
+ width: 100%;
128
+ height: 1px;
129
+ background-color: currentColor;
130
+ transform: scaleX(0);
131
+ transform-origin: left;
132
+ transition: transform 300ms var(--ease-smooth);
133
+ }
134
+
135
+ &[data-checked="true"]::after {
136
+ transform: scaleX(1);
137
+ }
138
+ }