@timmbr/ui 1.11.0 → 1.13.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 (84) hide show
  1. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  2. package/dist/components/Accordion/Accordion.js +23 -12
  3. package/dist/components/AuthModal/AuthModal.styles.js +1 -1
  4. package/dist/components/AuthModal/subcomponents/AuthModalParts.d.ts +1 -1
  5. package/dist/components/AuthModal/subcomponents/AuthModalParts.d.ts.map +1 -1
  6. package/dist/components/AuthModal/subcomponents/AuthModalParts.js +24 -42
  7. package/dist/components/Button/Button.d.ts.map +1 -1
  8. package/dist/components/Button/Button.js +1 -0
  9. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  10. package/dist/components/Checkbox/Checkbox.js +10 -1
  11. package/dist/components/Checkbox/Checkbox.styles.js +1 -1
  12. package/dist/components/Checkbox/Checkbox.types.d.ts +3 -0
  13. package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -1
  14. package/dist/components/Chip/Chip.js +1 -1
  15. package/dist/components/Dialog/Dialog.js +1 -1
  16. package/dist/components/Drawer/Drawer.js +1 -1
  17. package/dist/components/FilterChips/FilterChips.d.ts.map +1 -1
  18. package/dist/components/FilterChips/FilterChips.js +2 -9
  19. package/dist/components/FilterPanel/FilterPanel.d.ts.map +1 -1
  20. package/dist/components/FilterPanel/FilterPanel.js +9 -7
  21. package/dist/components/ImageUpload/subcomponents/ImageUploadThumbnailCard.js +1 -1
  22. package/dist/components/Inline/Inline.d.ts.map +1 -1
  23. package/dist/components/Inline/Inline.js +2 -1
  24. package/dist/components/Inline/Inline.types.d.ts +5 -0
  25. package/dist/components/Inline/Inline.types.d.ts.map +1 -1
  26. package/dist/components/Input/Input.d.ts.map +1 -1
  27. package/dist/components/Input/Input.js +2 -1
  28. package/dist/components/NavFooter/NavFooter.styles.js +1 -1
  29. package/dist/components/NavFooter/subcomponents/FooterBrand.js +1 -1
  30. package/dist/components/NavHeader/NavHeader.js +1 -1
  31. package/dist/components/NavHeader/NavHeader.styles.js +4 -4
  32. package/dist/components/PageProgress/PageProgress.d.ts +12 -0
  33. package/dist/components/PageProgress/PageProgress.d.ts.map +1 -0
  34. package/dist/components/PageProgress/PageProgress.js +68 -0
  35. package/dist/components/PageProgress/PageProgress.styles.d.ts +8 -0
  36. package/dist/components/PageProgress/PageProgress.styles.d.ts.map +1 -0
  37. package/dist/components/PageProgress/PageProgress.styles.js +32 -0
  38. package/dist/components/PageProgress/PageProgress.types.d.ts +18 -0
  39. package/dist/components/PageProgress/PageProgress.types.d.ts.map +1 -0
  40. package/dist/components/PageProgress/index.d.ts +3 -0
  41. package/dist/components/PageProgress/index.d.ts.map +1 -0
  42. package/dist/components/ScrollRail/ScrollRail.d.ts +4 -0
  43. package/dist/components/ScrollRail/ScrollRail.d.ts.map +1 -0
  44. package/dist/components/ScrollRail/ScrollRail.js +103 -0
  45. package/dist/components/ScrollRail/ScrollRail.styles.d.ts +10 -0
  46. package/dist/components/ScrollRail/ScrollRail.styles.d.ts.map +1 -0
  47. package/dist/components/ScrollRail/ScrollRail.styles.js +31 -0
  48. package/dist/components/ScrollRail/ScrollRail.types.d.ts +16 -0
  49. package/dist/components/ScrollRail/ScrollRail.types.d.ts.map +1 -0
  50. package/dist/components/ScrollRail/index.d.ts +4 -0
  51. package/dist/components/ScrollRail/index.d.ts.map +1 -0
  52. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
  53. package/dist/components/Snackbar/Snackbar.js +6 -2
  54. package/dist/components/Snackbar/Snackbar.styles.d.ts +1 -0
  55. package/dist/components/Snackbar/Snackbar.styles.d.ts.map +1 -1
  56. package/dist/components/Snackbar/Snackbar.styles.js +8 -4
  57. package/dist/components/Snackbar/Snackbar.types.d.ts +3 -0
  58. package/dist/components/Snackbar/Snackbar.types.d.ts.map +1 -1
  59. package/dist/components/Snackbar/snackbarStore.d.ts +3 -0
  60. package/dist/components/Snackbar/snackbarStore.d.ts.map +1 -1
  61. package/dist/components/Stack/Stack.d.ts.map +1 -1
  62. package/dist/components/Stack/Stack.js +2 -1
  63. package/dist/components/Stack/Stack.types.d.ts +5 -0
  64. package/dist/components/Stack/Stack.types.d.ts.map +1 -1
  65. package/dist/components/Switch/Switch.d.ts.map +1 -1
  66. package/dist/components/Switch/Switch.js +19 -2
  67. package/dist/components/Switch/Switch.styles.js +2 -2
  68. package/dist/components/Switch/Switch.types.d.ts +3 -0
  69. package/dist/components/Switch/Switch.types.d.ts.map +1 -1
  70. package/dist/components/Toast/Toast.js +2 -2
  71. package/dist/components/Toast/toastStore.d.ts +4 -0
  72. package/dist/components/Toast/toastStore.d.ts.map +1 -1
  73. package/dist/components/ZoneProgress/ZoneProgress.d.ts +6 -0
  74. package/dist/components/ZoneProgress/ZoneProgress.d.ts.map +1 -0
  75. package/dist/components/ZoneProgress/ZoneProgress.js +96 -0
  76. package/dist/components/ZoneProgress/index.d.ts +2 -0
  77. package/dist/components/ZoneProgress/index.d.ts.map +1 -0
  78. package/dist/index.d.ts +3 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +4 -0
  81. package/dist/providers/AnimationProvider.d.ts +5 -1
  82. package/dist/providers/AnimationProvider.d.ts.map +1 -1
  83. package/dist/providers/AnimationProvider.js +6 -3
  84. package/package.json +3 -3
@@ -0,0 +1,96 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import * as React from 'react';
4
+ import { usePathname } from 'next/navigation';
5
+ import { PageProgress } from '../PageProgress/PageProgress.js';
6
+
7
+ function trickle(p) {
8
+ if (p < 20) return p + 5;
9
+ if (p < 50) return p + 3;
10
+ if (p < 70) return p + 2;
11
+ if (p < 85) return p + 1;
12
+ return p;
13
+ }
14
+ function ZoneProgress() {
15
+ const pathname = usePathname();
16
+ const [loading, setLoading] = React.useState(false);
17
+ const [progress, setProgress] = React.useState(void 0);
18
+ const tickRef = React.useRef(null);
19
+ const committedPathnameRef = React.useRef(pathname);
20
+ React.useLayoutEffect(() => {
21
+ committedPathnameRef.current = pathname;
22
+ });
23
+ const startProgress = React.useCallback(() => {
24
+ if (tickRef.current) clearInterval(tickRef.current);
25
+ setLoading(true);
26
+ setProgress(5);
27
+ tickRef.current = setInterval(() => {
28
+ setProgress((p) => p !== void 0 ? trickle(p) : p);
29
+ }, 200);
30
+ }, []);
31
+ const finishProgress = React.useCallback(() => {
32
+ if (tickRef.current) {
33
+ clearInterval(tickRef.current);
34
+ tickRef.current = null;
35
+ }
36
+ setProgress(100);
37
+ setTimeout(() => {
38
+ setLoading(false);
39
+ setProgress(void 0);
40
+ }, 400);
41
+ }, []);
42
+ React.useEffect(() => {
43
+ const handleClick = (e) => {
44
+ const anchor = e.target.closest("a");
45
+ if (!(anchor instanceof HTMLAnchorElement)) return;
46
+ if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
47
+ if (anchor.target === "_blank") return;
48
+ const href = anchor.getAttribute("href");
49
+ if (!href || href.startsWith("#") || href.startsWith("javascript:")) return;
50
+ try {
51
+ const url = new URL(href, location.origin);
52
+ if (url.origin !== location.origin) return;
53
+ if (url.pathname + url.search === location.pathname + location.search) return;
54
+ } catch {
55
+ return;
56
+ }
57
+ startProgress();
58
+ };
59
+ const handlePopState = () => {
60
+ if (location.pathname !== committedPathnameRef.current) {
61
+ startProgress();
62
+ }
63
+ };
64
+ document.addEventListener("click", handleClick);
65
+ window.addEventListener("popstate", handlePopState);
66
+ return () => {
67
+ document.removeEventListener("click", handleClick);
68
+ window.removeEventListener("popstate", handlePopState);
69
+ if (tickRef.current) clearInterval(tickRef.current);
70
+ };
71
+ }, [startProgress]);
72
+ React.useEffect(() => {
73
+ if (loading) finishProgress();
74
+ }, [pathname, finishProgress]);
75
+ React.useEffect(() => {
76
+ const onHover = (e) => {
77
+ const a = e.target.closest('a[data-cross-zone="true"]');
78
+ if (!(a instanceof HTMLAnchorElement)) return;
79
+ const { href } = a;
80
+ if (!href) return;
81
+ const escaped = href.replace(/"/g, '\\"');
82
+ if (!document.querySelector(`link[rel="prefetch"][href="${escaped}"]`)) {
83
+ const el = document.createElement("link");
84
+ el.rel = "prefetch";
85
+ el.href = href;
86
+ document.head.appendChild(el);
87
+ }
88
+ };
89
+ document.addEventListener("mouseover", onHover);
90
+ return () => document.removeEventListener("mouseover", onHover);
91
+ }, []);
92
+ return /* @__PURE__ */ jsx(PageProgress, { loading, progress });
93
+ }
94
+ ZoneProgress.displayName = "ZoneProgress";
95
+
96
+ export { ZoneProgress };
@@ -0,0 +1,2 @@
1
+ export { ZoneProgress } from './ZoneProgress';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ZoneProgress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './components/Grid';
6
6
  export * from './components/Center';
7
7
  export * from './components/Stack';
8
8
  export * from './components/Inline';
9
+ export * from './components/ScrollRail';
9
10
  export * from './components/Input';
10
11
  export * from './components/Textarea';
11
12
  export * from './components/Select';
@@ -48,6 +49,8 @@ export * from './components/Icon';
48
49
  export * from './components/Text';
49
50
  export * from './components/Alert';
50
51
  export * from './components/Progress';
52
+ export * from './components/PageProgress';
53
+ export * from './components/ZoneProgress';
51
54
  export * from './components/Spinner';
52
55
  export * from './components/Skeleton';
53
56
  export * from './components/EmptyState';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3D,cAAc,aAAa,CAAC;AAG5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3D,cAAc,aAAa,CAAC;AAG5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -68,6 +68,7 @@ export { OptionPicker } from './components/OptionPicker/OptionPicker.js';
68
68
  export { OtpInput } from './components/OtpInput/OtpInput.js';
69
69
  export { PRICE_GROUP_KEY } from './components/FilterPanel/FilterPanel.types.js';
70
70
  export { PageHeader } from './components/PageHeader/PageHeader.js';
71
+ export { PageProgress } from './components/PageProgress/PageProgress.js';
71
72
  export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PaginationSummary } from './components/Pagination/Pagination.js';
72
73
  export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './components/Popover/Popover.js';
73
74
  export { Price, discountPercent } from './components/Price/Price.js';
@@ -80,6 +81,7 @@ export { RadioCard } from './components/RadioCard/RadioCard.js';
80
81
  export { RangeSlider } from './components/RangeSlider/RangeSlider.js';
81
82
  export { Rating } from './components/Rating/Rating.js';
82
83
  export { SNACKBAR_EXIT_MS, snackbar, snackbarStore } from './components/Snackbar/snackbarStore.js';
84
+ export { ScrollRail } from './components/ScrollRail/ScrollRail.js';
83
85
  export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectSeparator, SelectTrigger, SelectValue } from './components/Select/Select.js';
84
86
  export { SideBarNavigation } from './components/SideBarNavigation/SideBarNavigation.js';
85
87
  export { SidebarBranding } from './components/SideBarNavigation/subcomponents/SidebarBranding.js';
@@ -112,6 +114,7 @@ export { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastT
112
114
  export { ToastContainer } from './components/Toast/ToastContainer.js';
113
115
  export { Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipRoot, TooltipTrigger } from './components/Tooltip/Tooltip.js';
114
116
  export { VisuallyHidden } from './components/VisuallyHidden/VisuallyHidden.js';
117
+ export { ZoneProgress } from './components/ZoneProgress/ZoneProgress.js';
115
118
  export { accordionContentVariants, accordionItemVariants, accordionTriggerVariants } from './components/Accordion/Accordion.styles.js';
116
119
  export { alertDialogBodyVariants, alertDialogContentVariants, alertDialogDescriptionVariants, alertDialogFooterVariants, alertDialogHeaderVariants, alertDialogMediaVariants, alertDialogOverlayVariants, alertDialogTitleVariants } from './components/AlertDialog/AlertDialog.styles.js';
117
120
  export { alertIconVariants, alertVariants } from './components/Alert/Alert.styles.js';
@@ -162,6 +165,7 @@ export { radioCardDotClass, radioCardMarkerClass, radioCardVariants } from './co
162
165
  export { radioIndicatorVariants, radioItemVariants } from './components/Radio/Radio.styles.js';
163
166
  export { rangeSliderRangeVariants, rangeSliderRootVariants, rangeSliderThumbVariants, rangeSliderTrackVariants } from './components/RangeSlider/RangeSlider.styles.js';
164
167
  export { ratingVariants } from './components/Rating/Rating.styles.js';
168
+ export { scrollRailChevronVariants, scrollRailVariants, scrollRailWrapperVariants } from './components/ScrollRail/ScrollRail.styles.js';
165
169
  export { selectContentVariants, selectItemVariants, selectTriggerVariants } from './components/Select/Select.styles.js';
166
170
  export { skeletonVariants } from './components/Skeleton/Skeleton.styles.js';
167
171
  export { snackbarActionVariants, snackbarCloseVariants, snackbarHostVariants, snackbarIconVariants, snackbarVariants } from './components/Snackbar/Snackbar.styles.js';
@@ -4,7 +4,11 @@ export interface AnimationProviderProps {
4
4
  disableAnimations?: boolean;
5
5
  }
6
6
  /**
7
- * Dual-layer animation provider satisfying the requirement for global toggle + component-level overrides.
7
+ * Dual-layer animation provider.
8
+ * Animations are disabled when:
9
+ * - disableAnimations={true} is passed explicitly, OR
10
+ * - the OS/browser has prefers-reduced-motion: reduce set.
11
+ * This is the single place that translates both signals into the DS motion system.
8
12
  */
9
13
  export declare const AnimationProvider: React.FC<AnimationProviderProps>;
10
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AnimationProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAuB9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,OASrC,CAAC"}
1
+ {"version":3,"file":"AnimationProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AnimationProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA0B9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,OASrC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import * as React from 'react';
4
+ import { usePrefersReducedMotion } from '@timmbr/hooks';
4
5
  import { useTimmbrConfig } from './TimmbrConfigProvider.js';
5
6
 
6
7
  const AnimationContext = React.createContext(null);
@@ -8,11 +9,13 @@ const AnimationProvider = ({
8
9
  children,
9
10
  disableAnimations = false
10
11
  }) => {
12
+ const prefersReduced = usePrefersReducedMotion();
13
+ const animationsDisabled = disableAnimations || prefersReduced;
11
14
  React.useEffect(() => {
12
15
  if (typeof document !== "undefined") {
13
16
  document.documentElement.setAttribute(
14
17
  "data-animations-disabled",
15
- disableAnimations ? "true" : "false"
18
+ animationsDisabled ? "true" : "false"
16
19
  );
17
20
  }
18
21
  return () => {
@@ -20,8 +23,8 @@ const AnimationProvider = ({
20
23
  document.documentElement.removeAttribute("data-animations-disabled");
21
24
  }
22
25
  };
23
- }, [disableAnimations]);
24
- return /* @__PURE__ */ jsx(AnimationContext.Provider, { value: { globalMotion: !disableAnimations }, children });
26
+ }, [animationsDisabled]);
27
+ return /* @__PURE__ */ jsx(AnimationContext.Provider, { value: { globalMotion: !animationsDisabled }, children });
25
28
  };
26
29
  const useGlobalAnimation = () => {
27
30
  const directContext = React.useContext(AnimationContext);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timmbr/ui",
3
- "version": "1.11.0",
3
+ "version": "1.13.0",
4
4
  "description": "High-performance, Next.js App Router-compatible UI design system components for Timmbr",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -42,11 +42,11 @@
42
42
  "@radix-ui/react-tooltip": "^1.2.16",
43
43
  "class-variance-authority": "^0.7.1",
44
44
  "input-otp": "^1.5.0",
45
- "@timmbr/hooks": "1.1.0",
46
45
  "@timmbr/icons": "1.6.0",
46
+ "@timmbr/hooks": "1.1.0",
47
47
  "@timmbr/theme": "1.3.0",
48
48
  "@timmbr/utils": "1.6.0",
49
- "@timmbr/motion": "1.2.4"
49
+ "@timmbr/motion": "1.2.5"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "next": ">=13.0.0 || >=14.0.0 || >=15.0.0 || >=16.0.0",