iryx-ui 0.12.0 → 0.14.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 (234) hide show
  1. package/README.md +35 -1315
  2. package/dist/component-names.d.ts +1 -1
  3. package/dist/component-names.js +1 -1
  4. package/dist/components/Accordion.js +5 -0
  5. package/dist/components/Accordion.vue.d.ts +80 -0
  6. package/dist/components/Accordion.vue_vue_type_script_setup_true_lang.js +87 -0
  7. package/dist/components/Alert.vue.d.ts +1 -1
  8. package/dist/components/Alert.vue_vue_type_script_setup_true_lang.js +7 -7
  9. package/dist/components/App.vue.d.ts +1 -1
  10. package/dist/components/AppShell.js +5 -0
  11. package/dist/components/AppShell.vue.d.ts +46 -0
  12. package/dist/components/AppShell.vue_vue_type_script_setup_true_lang.js +59 -0
  13. package/dist/components/AspectRatio.js +5 -0
  14. package/dist/components/AspectRatio.vue.d.ts +26 -0
  15. package/dist/components/AspectRatio.vue_vue_type_script_setup_true_lang.js +27 -0
  16. package/dist/components/Avatar.js +5 -0
  17. package/dist/components/Avatar.vue.d.ts +52 -0
  18. package/dist/components/Avatar.vue_vue_type_script_setup_true_lang.js +67 -0
  19. package/dist/components/AvatarGroup.js +5 -0
  20. package/dist/components/AvatarGroup.vue.d.ts +39 -0
  21. package/dist/components/AvatarGroup.vue_vue_type_script_setup_true_lang.js +45 -0
  22. package/dist/components/Badge.vue.d.ts +1 -1
  23. package/dist/components/Banner.vue.d.ts +2 -2
  24. package/dist/components/BarChart.vue.d.ts +1 -1
  25. package/dist/components/BarChart.vue_vue_type_script_setup_true_lang.js +14 -14
  26. package/dist/components/Breadcrumb.vue.d.ts +1 -1
  27. package/dist/components/Button.vue.d.ts +2 -2
  28. package/dist/components/ButtonGroup.vue.d.ts +1 -1
  29. package/dist/components/Card.vue.d.ts +1 -1
  30. package/dist/components/Collapsible.js +5 -0
  31. package/dist/components/Collapsible.vue.d.ts +58 -0
  32. package/dist/components/Collapsible.vue_vue_type_script_setup_true_lang.js +67 -0
  33. package/dist/components/ColorPicker.js +5 -0
  34. package/dist/components/ColorPicker.vue.d.ts +49 -0
  35. package/dist/components/ColorPicker.vue_vue_type_script_setup_true_lang.js +172 -0
  36. package/dist/components/Combobox.vue.d.ts +40 -13
  37. package/dist/components/Combobox.vue_vue_type_script_setup_true_lang.js +172 -103
  38. package/dist/components/CommandPalette.js +5 -0
  39. package/dist/components/CommandPalette.vue.d.ts +63 -0
  40. package/dist/components/CommandPalette.vue_vue_type_script_setup_true_lang.js +185 -0
  41. package/dist/components/Container.js +5 -0
  42. package/dist/components/Container.vue.d.ts +33 -0
  43. package/dist/components/Container.vue_vue_type_script_setup_true_lang.js +40 -0
  44. package/dist/components/ContextMenu.js +5 -0
  45. package/dist/components/ContextMenu.vue.d.ts +42 -0
  46. package/dist/components/ContextMenu.vue_vue_type_script_setup_true_lang.js +49 -0
  47. package/dist/components/DatePicker.vue.d.ts +1 -1
  48. package/dist/components/DateRangePicker.vue.d.ts +2 -2
  49. package/dist/components/Dialog.vue.d.ts +1 -1
  50. package/dist/components/Drawer.vue.d.ts +2 -2
  51. package/dist/components/EmptyState.vue.d.ts +1 -1
  52. package/dist/components/FileUpload.vue.d.ts +2 -2
  53. package/dist/components/Icon.vue.d.ts +6 -0
  54. package/dist/components/Icon.vue_vue_type_script_setup_true_lang.js +11 -9
  55. package/dist/components/Input.vue.d.ts +1 -1
  56. package/dist/components/Input.vue_vue_type_script_setup_true_lang.js +4 -4
  57. package/dist/components/Kbd.js +5 -0
  58. package/dist/components/Kbd.vue.d.ts +46 -0
  59. package/dist/components/Kbd.vue_vue_type_script_setup_true_lang.js +41 -0
  60. package/dist/components/LineChart.vue_vue_type_script_setup_true_lang.js +19 -19
  61. package/dist/components/Menubar.js +5 -0
  62. package/dist/components/Menubar.vue.d.ts +62 -0
  63. package/dist/components/Menubar.vue_vue_type_script_setup_true_lang.js +79 -0
  64. package/dist/components/NavigationMenu.js +5 -0
  65. package/dist/components/NavigationMenu.vue.d.ts +75 -0
  66. package/dist/components/NavigationMenu.vue_vue_type_script_setup_true_lang.js +167 -0
  67. package/dist/components/NumberInput.vue_vue_type_script_setup_true_lang.js +2 -2
  68. package/dist/components/PageHeader.js +5 -0
  69. package/dist/components/PageHeader.vue.d.ts +52 -0
  70. package/dist/components/PageHeader.vue_vue_type_script_setup_true_lang.js +59 -0
  71. package/dist/components/Pagination.vue.d.ts +1 -1
  72. package/dist/components/PinInput.js +5 -0
  73. package/dist/components/PinInput.vue.d.ts +65 -0
  74. package/dist/components/PinInput.vue_vue_type_script_setup_true_lang.js +76 -0
  75. package/dist/components/Popover.js +5 -0
  76. package/dist/components/Popover.vue.d.ts +75 -0
  77. package/dist/components/Popover.vue_vue_type_script_setup_true_lang.js +99 -0
  78. package/dist/components/Progress.vue.d.ts +20 -1
  79. package/dist/components/Progress.vue_vue_type_script_setup_true_lang.js +84 -44
  80. package/dist/components/RadioGroup.vue_vue_type_script_setup_true_lang.js +4 -1
  81. package/dist/components/ScrollArea.js +5 -0
  82. package/dist/components/ScrollArea.vue.d.ts +41 -0
  83. package/dist/components/ScrollArea.vue_vue_type_script_setup_true_lang.js +68 -0
  84. package/dist/components/ScrollFade.js +5 -0
  85. package/dist/components/ScrollFade.vue.d.ts +36 -0
  86. package/dist/components/ScrollFade.vue_vue_type_script_setup_true_lang.js +59 -0
  87. package/dist/components/Select.vue.d.ts +2 -2
  88. package/dist/components/Sidebar.js +5 -0
  89. package/dist/components/Sidebar.vue.d.ts +72 -0
  90. package/dist/components/Sidebar.vue_vue_type_script_setup_true_lang.js +183 -0
  91. package/dist/components/SignaturePad.js +5 -0
  92. package/dist/components/SignaturePad.vue.d.ts +60 -0
  93. package/dist/components/SignaturePad.vue_vue_type_script_setup_true_lang.js +158 -0
  94. package/dist/components/Skeleton.vue.d.ts +2 -2
  95. package/dist/components/Skeleton.vue_vue_type_script_setup_true_lang.js +8 -8
  96. package/dist/components/Slider.js +5 -0
  97. package/dist/components/Slider.vue.d.ts +80 -0
  98. package/dist/components/Slider.vue_vue_type_script_setup_true_lang.js +115 -0
  99. package/dist/components/Splitter.js +5 -0
  100. package/dist/components/Splitter.vue.d.ts +59 -0
  101. package/dist/components/Splitter.vue_vue_type_script_setup_true_lang.js +69 -0
  102. package/dist/components/Stat.vue.d.ts +1 -1
  103. package/dist/components/Switch.vue.d.ts +1 -0
  104. package/dist/components/Switch.vue_vue_type_script_setup_true_lang.js +7 -3
  105. package/dist/components/Table.vue.d.ts +7 -1
  106. package/dist/components/Table.vue_vue_type_script_setup_true_lang.js +73 -58
  107. package/dist/components/TagsInput.js +5 -0
  108. package/dist/components/TagsInput.vue.d.ts +71 -0
  109. package/dist/components/TagsInput.vue_vue_type_script_setup_true_lang.js +119 -0
  110. package/dist/components/Textarea.vue_vue_type_script_setup_true_lang.js +3 -3
  111. package/dist/components/TimeField.js +5 -0
  112. package/dist/components/TimeField.vue.d.ts +50 -0
  113. package/dist/components/TimeField.vue_vue_type_script_setup_true_lang.js +85 -0
  114. package/dist/components/Timeline.js +5 -0
  115. package/dist/components/Timeline.vue.d.ts +61 -0
  116. package/dist/components/Timeline.vue_vue_type_script_setup_true_lang.js +60 -0
  117. package/dist/components/Toaster.vue.d.ts +1 -1
  118. package/dist/components/Toggle.js +5 -0
  119. package/dist/components/Toggle.vue.d.ts +42 -0
  120. package/dist/components/Toggle.vue_vue_type_script_setup_true_lang.js +52 -0
  121. package/dist/components/ToggleGroup.js +5 -0
  122. package/dist/components/ToggleGroup.vue.d.ts +64 -0
  123. package/dist/components/ToggleGroup.vue_vue_type_script_setup_true_lang.js +78 -0
  124. package/dist/components/Toolbar.js +5 -0
  125. package/dist/components/Toolbar.vue.d.ts +52 -0
  126. package/dist/components/Toolbar.vue_vue_type_script_setup_true_lang.js +94 -0
  127. package/dist/components/Tree.js +5 -0
  128. package/dist/components/Tree.vue.d.ts +70 -0
  129. package/dist/components/Tree.vue_vue_type_script_setup_true_lang.js +112 -0
  130. package/dist/components/index.d.ts +30 -0
  131. package/dist/components/index.js +146 -86
  132. package/dist/composables/appearance.js +5 -1
  133. package/dist/composables/cartesian.d.ts +11 -0
  134. package/dist/composables/cartesian.js +18 -19
  135. package/dist/composables/command-palette.d.ts +42 -0
  136. package/dist/composables/command-palette.js +32 -0
  137. package/dist/composables/date.d.ts +18 -2
  138. package/dist/composables/date.js +23 -12
  139. package/dist/composables/kbd.d.ts +26 -0
  140. package/dist/composables/kbd.js +161 -0
  141. package/dist/composables/navigation-menu.d.ts +29 -0
  142. package/dist/composables/navigation-menu.js +6 -0
  143. package/dist/composables/scroll-fade.d.ts +35 -0
  144. package/dist/composables/scroll-fade.js +36 -0
  145. package/dist/composables/sidebar.d.ts +35 -0
  146. package/dist/composables/sidebar.js +23 -0
  147. package/dist/composables/signature.d.ts +22 -0
  148. package/dist/composables/signature.js +13 -0
  149. package/dist/index.d.ts +37 -0
  150. package/dist/index.js +155 -93
  151. package/dist/theme/accordion.d.ts +68 -0
  152. package/dist/theme/accordion.js +24 -0
  153. package/dist/theme/alert.d.ts +0 -3
  154. package/dist/theme/app-shell.d.ts +77 -0
  155. package/dist/theme/app-shell.js +35 -0
  156. package/dist/theme/avatar.d.ts +253 -0
  157. package/dist/theme/avatar.js +84 -0
  158. package/dist/theme/banner.d.ts +0 -9
  159. package/dist/theme/bar-chart.d.ts +0 -16
  160. package/dist/theme/breadcrumb.d.ts +3 -3
  161. package/dist/theme/button-group.d.ts +0 -3
  162. package/dist/theme/button.d.ts +0 -3
  163. package/dist/theme/card.js +2 -2
  164. package/dist/theme/chart-legend.d.ts +3 -11
  165. package/dist/theme/collapsible.d.ts +44 -0
  166. package/dist/theme/collapsible.js +17 -0
  167. package/dist/theme/color-picker.d.ts +98 -0
  168. package/dist/theme/color-picker.js +19 -0
  169. package/dist/theme/combobox.d.ts +48 -0
  170. package/dist/theme/combobox.js +23 -3
  171. package/dist/theme/command-palette.d.ts +122 -0
  172. package/dist/theme/command-palette.js +22 -0
  173. package/dist/theme/container.d.ts +101 -0
  174. package/dist/theme/container.js +26 -0
  175. package/dist/theme/date-picker.d.ts +12 -0
  176. package/dist/theme/date-picker.js +1 -1
  177. package/dist/theme/dropdown-menu.d.ts +0 -9
  178. package/dist/theme/file-upload.d.ts +0 -3
  179. package/dist/theme/form.d.ts +12 -12
  180. package/dist/theme/index.d.ts +25 -0
  181. package/dist/theme/kbd.d.ts +71 -0
  182. package/dist/theme/kbd.js +29 -0
  183. package/dist/theme/line-chart.d.ts +0 -9
  184. package/dist/theme/menubar.d.ts +29 -0
  185. package/dist/theme/menubar.js +11 -0
  186. package/dist/theme/navigation-menu.d.ts +161 -0
  187. package/dist/theme/navigation-menu.js +43 -0
  188. package/dist/theme/number-input.d.ts +0 -3
  189. package/dist/theme/page-header.d.ts +47 -0
  190. package/dist/theme/page-header.js +17 -0
  191. package/dist/theme/pagination.d.ts +0 -3
  192. package/dist/theme/pin-input.d.ts +86 -0
  193. package/dist/theme/pin-input.js +32 -0
  194. package/dist/theme/popover.d.ts +119 -0
  195. package/dist/theme/popover.js +31 -0
  196. package/dist/theme/presets.d.ts +0 -2
  197. package/dist/theme/progress.d.ts +93 -0
  198. package/dist/theme/progress.js +37 -7
  199. package/dist/theme/radio-group.d.ts +24 -0
  200. package/dist/theme/radio-group.js +23 -14
  201. package/dist/theme/scroll-area.d.ts +65 -0
  202. package/dist/theme/scroll-area.js +57 -0
  203. package/dist/theme/scroll-fade.d.ts +35 -0
  204. package/dist/theme/scroll-fade.js +12 -0
  205. package/dist/theme/sidebar.d.ts +167 -0
  206. package/dist/theme/sidebar.js +43 -0
  207. package/dist/theme/signature-pad.d.ts +50 -0
  208. package/dist/theme/signature-pad.js +17 -0
  209. package/dist/theme/slider.d.ts +128 -0
  210. package/dist/theme/slider.js +49 -0
  211. package/dist/theme/sparkline.d.ts +0 -6
  212. package/dist/theme/splitter.d.ts +59 -0
  213. package/dist/theme/splitter.js +25 -0
  214. package/dist/theme/stat.d.ts +0 -3
  215. package/dist/theme/stepper.js +2 -2
  216. package/dist/theme/switch.d.ts +53 -29
  217. package/dist/theme/switch.js +33 -8
  218. package/dist/theme/table.d.ts +51 -3
  219. package/dist/theme/table.js +8 -3
  220. package/dist/theme/tabs.d.ts +0 -3
  221. package/dist/theme/tags-input.d.ts +110 -0
  222. package/dist/theme/tags-input.js +42 -0
  223. package/dist/theme/time-field.d.ts +68 -0
  224. package/dist/theme/time-field.js +21 -0
  225. package/dist/theme/timeline.d.ts +182 -0
  226. package/dist/theme/timeline.js +83 -0
  227. package/dist/theme/toggle.d.ts +145 -0
  228. package/dist/theme/toggle.js +84 -0
  229. package/dist/theme/toolbar.d.ts +56 -0
  230. package/dist/theme/toolbar.js +21 -0
  231. package/dist/theme/tree.d.ts +68 -0
  232. package/dist/theme/tree.js +28 -0
  233. package/package.json +2 -2
  234. package/theme.css +221 -0
package/theme.css CHANGED
@@ -213,6 +213,33 @@
213
213
  --animate-drawer-out-top: drawer-out-top 300ms var(--iryx-drawer-ease);
214
214
  --animate-drawer-in-bottom: drawer-in-bottom 300ms var(--iryx-drawer-ease);
215
215
  --animate-drawer-out-bottom: drawer-out-bottom 300ms var(--iryx-drawer-ease);
216
+ /*
217
+ * Collapsible unroll. Same curve as the drawer, under its own name: it
218
+ * decelerates hard at the end, so the panel settles instead of stopping.
219
+ * Closing is quicker than opening — a slow exit reads as lag.
220
+ */
221
+ --iryx-collapsible-ease: cubic-bezier(0.32, 0.72, 0, 1);
222
+ --animate-collapsible-down: collapsible-down 240ms var(--iryx-collapsible-ease);
223
+ --animate-collapsible-up: collapsible-up 180ms var(--iryx-collapsible-ease);
224
+ /*
225
+ * The rows lift and fade as two animations, not one keyframe set, because
226
+ * they want different curves. On the shared emphasized ease the opacity is
227
+ * already at ~1 within a couple of frames — the fade is technically there and
228
+ * perceptually absent. Its own ease-out, held back briefly so the panel has
229
+ * started moving first, is what makes it read.
230
+ *
231
+ * The fade finishes well before the lift on purpose: the rows are legible for
232
+ * the back half of the unroll, so the motion settles rather than the content
233
+ * still arriving as it stops.
234
+ *
235
+ * `both` matters: the fade is delayed, and without it the rows would paint at
236
+ * full opacity for those first 40ms and then start fading in from visible.
237
+ */
238
+ --animate-collapsible-content-in:
239
+ collapsible-lift-in 260ms var(--iryx-collapsible-ease),
240
+ collapsible-fade-in 220ms 40ms ease-out both;
241
+ --animate-collapsible-content-out:
242
+ collapsible-fade-out 140ms ease-in both;
216
243
  }
217
244
 
218
245
  /* Indeterminate Progress: slide a short bar back and forth across the track. */
@@ -257,6 +284,60 @@
257
284
  }
258
285
  }
259
286
 
287
+ /*
288
+ * Collapsible open/close.
289
+ *
290
+ * `height: auto` is not tweenable, so Reka measures the panel and publishes it
291
+ * as --reka-collapsible-content-height; these keyframes animate to that.
292
+ *
293
+ * The height animation has to own the element Reka sets the variable on, and
294
+ * that element must carry no margin, padding or border of its own — margin is
295
+ * not part of the animated height, so it would survive the close as a visible
296
+ * gap under a panel that is supposedly shut. The indent, rule and row spacing
297
+ * live on an inner wrapper instead.
298
+ */
299
+ @keyframes collapsible-down {
300
+ from {
301
+ height: 0;
302
+ }
303
+ to {
304
+ height: var(--reka-collapsible-content-height);
305
+ }
306
+ }
307
+
308
+ @keyframes collapsible-up {
309
+ from {
310
+ height: var(--reka-collapsible-content-height);
311
+ }
312
+ to {
313
+ height: 0;
314
+ }
315
+ }
316
+
317
+ /*
318
+ * The rows lift into place while the panel unrolls, so they arrive under their
319
+ * own steam rather than being uncovered by a moving mask. This animates the
320
+ * independent `translate` property, not `transform`, so it cannot compose with
321
+ * a transform an app puts on the same element.
322
+ */
323
+ @keyframes collapsible-lift-in {
324
+ from {
325
+ translate: 0 -0.5rem;
326
+ }
327
+ }
328
+
329
+ @keyframes collapsible-fade-in {
330
+ from {
331
+ opacity: 0;
332
+ }
333
+ }
334
+
335
+ @keyframes collapsible-fade-out {
336
+ to {
337
+ opacity: 0;
338
+ }
339
+ }
340
+
260
341
  @keyframes toast-in {
261
342
  from {
262
343
  opacity: 0;
@@ -325,6 +406,37 @@
325
406
  }
326
407
  }
327
408
 
409
+ /*
410
+ * Sidebar submenu indent.
411
+ *
412
+ * Two alignments have to hold at once, and both are derived from the parent
413
+ * row's icon column rather than chosen:
414
+ *
415
+ * - the rule sits on the centre of the parent's icon, so it reads as descending
416
+ * from that row instead of floating between columns;
417
+ * - a child's label lands in the same column as its parent's label, so the
418
+ * submenu reads as one list rather than a slightly shifted copy of one.
419
+ *
420
+ * Picked by hand these land a few pixels out, which is worse than either a
421
+ * clean alignment or an obvious indent — it just looks like a mistake. Doing
422
+ * it as arithmetic keeps the two in step if the row metrics ever change.
423
+ */
424
+ @layer components {
425
+ .iryx-sidebar-submenu {
426
+ /* Mirrors the row: `size-4` icon, `gap-3` to the label, `px-2` inset. */
427
+ --iryx-sidebar-icon: --spacing(4);
428
+ --iryx-sidebar-gap: --spacing(3);
429
+ --iryx-sidebar-inset: --spacing(2);
430
+
431
+ margin-left: calc(var(--iryx-sidebar-inset) + var(--iryx-sidebar-icon) / 2);
432
+ /* The child row contributes its own `px-2`, so that comes back off here. */
433
+ padding-left: calc(
434
+ var(--iryx-sidebar-icon) / 2 + var(--iryx-sidebar-gap) - 1px -
435
+ var(--iryx-sidebar-inset)
436
+ );
437
+ }
438
+ }
439
+
328
440
  /*
329
441
  * Drawer drag plumbing.
330
442
  *
@@ -364,3 +476,112 @@
364
476
  transition-duration: 0ms;
365
477
  }
366
478
  }
479
+
480
+
481
+ /*
482
+ * `ITable`'s refresh indicator — an indeterminate bar running along the rule
483
+ * between the header and the first row, which is where a table conventionally
484
+ * reports progress. Shown on every load after the first; the initial load has
485
+ * no rows yet and uses skeletons instead.
486
+ *
487
+ * Plain CSS rather than utilities for the same reason as the drawer's drag
488
+ * plumbing: it is a keyframed `background-position` on a pseudo-element, and
489
+ * there is no class name for Tailwind to generate.
490
+ *
491
+ * `position: relative` on `<thead>` is what anchors the bar to the header's own
492
+ * box, so it lands on the divider at any header height and follows the table
493
+ * when it scrolls sideways.
494
+ */
495
+ @layer components {
496
+ .iryx-table-loading {
497
+ position: relative;
498
+ }
499
+
500
+ .iryx-table-loading::after {
501
+ content: "";
502
+ position: absolute;
503
+ inset-inline: 0;
504
+ /* Sits on the header's 1px bottom rule rather than below it. */
505
+ bottom: -1px;
506
+ height: 2px;
507
+ background-image: linear-gradient(
508
+ 90deg,
509
+ transparent 0%,
510
+ var(--iryx-primary) 50%,
511
+ transparent 100%
512
+ );
513
+ background-repeat: no-repeat;
514
+ background-size: 40% 100%;
515
+ animation: iryx-table-loading 1.3s ease-in-out infinite;
516
+ pointer-events: none;
517
+ }
518
+
519
+ @keyframes iryx-table-loading {
520
+ from {
521
+ background-position: -40% 0;
522
+ }
523
+ to {
524
+ background-position: 140% 0;
525
+ }
526
+ }
527
+
528
+ /*
529
+ * `animation: none` is safe here, unlike on the dialog and drawer: nothing
530
+ * waits on `animationend`, so removing the animation cannot strand a Presence
531
+ * unmount. A steady rule still reports "busy" without the motion.
532
+ */
533
+ @media (prefers-reduced-motion: reduce) {
534
+ .iryx-table-loading::after {
535
+ animation: none !important;
536
+ background-image: none;
537
+ background-color: color-mix(in oklab, var(--iryx-primary) 50%, transparent);
538
+ }
539
+ }
540
+ }
541
+
542
+ /*
543
+ * Reduced motion.
544
+ *
545
+ * A reader who has asked their OS to reduce motion has asked for it once, for
546
+ * everything — so this is a blanket rule rather than a per-component prop.
547
+ * It lives in `theme.css`, which an app opts into by importing, and it takes
548
+ * effect only under that explicit preference.
549
+ *
550
+ * **Near-zero durations, never `animation: none`.** Reka's `Presence` unmounts
551
+ * a dialog, drawer, popover or toast when its exit animation raises
552
+ * `animationend`. Remove the animation outright and that event never fires, so
553
+ * the element stays mounted forever and the overlay can never be closed twice.
554
+ * `0.01ms` finishes imperceptibly *and* still fires the event.
555
+ *
556
+ * `animation-iteration-count: 1` stops an infinite loop from repainting
557
+ * forever at 0.01ms a cycle. The two loaders that rely on looping are handled
558
+ * below, because "run once instantly" would park them where their last
559
+ * keyframe leaves them — which for the indeterminate progress bar is off the
560
+ * end of its own track.
561
+ */
562
+ @media (prefers-reduced-motion: reduce) {
563
+ *,
564
+ *::before,
565
+ *::after {
566
+ animation-duration: 0.01ms !important;
567
+ animation-delay: 0.01ms !important;
568
+ animation-iteration-count: 1 !important;
569
+ transition-duration: 0.01ms !important;
570
+ transition-delay: 0s !important;
571
+ scroll-behavior: auto !important;
572
+ }
573
+
574
+ /*
575
+ * The indeterminate progress bar travels from -100% to 300%, so running it
576
+ * once and stopping leaves the indicator outside the track and the component
577
+ * reads as empty. Parked at the start instead: a short static bar still says
578
+ * "working, length unknown", which is the whole message.
579
+ *
580
+ * Safe to remove outright — unlike the overlays above, nothing is waiting on
581
+ * `animationend` here.
582
+ */
583
+ .iryx-progress-indeterminate {
584
+ animation: none !important;
585
+ transform: none !important;
586
+ }
587
+ }