@dreamtree-org/twreact-ui 2.1.1 → 2.2.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 (101) hide show
  1. package/README.md +48 -4
  2. package/ai-skills/dreamtree-ui.md +20 -3
  3. package/dist/_shared/{cn-DPPQUJu1.js → cn-TMJ-_w1a.js} +14 -1
  4. package/dist/_shared/useLatestRef-CdtlnPUz.js +21 -0
  5. package/dist/_shared/useReducedMotion-B_PMM5ER.js +77 -0
  6. package/dist/ai-schema.json +513 -0
  7. package/dist/charts/index.js +6 -76
  8. package/dist/components/core/Table/Table.d.ts.map +1 -1
  9. package/dist/components/motion/BentoExpandGrid.d.ts +10 -0
  10. package/dist/components/motion/BentoExpandGrid.d.ts.map +1 -0
  11. package/dist/components/motion/CountUp.d.ts +9 -0
  12. package/dist/components/motion/CountUp.d.ts.map +1 -0
  13. package/dist/components/motion/DeviceFrame.d.ts +8 -0
  14. package/dist/components/motion/DeviceFrame.d.ts.map +1 -0
  15. package/dist/components/motion/DeviceMorphHero.d.ts +11 -0
  16. package/dist/components/motion/DeviceMorphHero.d.ts.map +1 -0
  17. package/dist/components/motion/LogoMarquee.d.ts +9 -0
  18. package/dist/components/motion/LogoMarquee.d.ts.map +1 -0
  19. package/dist/components/motion/PhotoCollage.d.ts +9 -0
  20. package/dist/components/motion/PhotoCollage.d.ts.map +1 -0
  21. package/dist/components/motion/Reveal.d.ts +9 -0
  22. package/dist/components/motion/Reveal.d.ts.map +1 -0
  23. package/dist/components/motion/RevealGroup.d.ts +5 -0
  24. package/dist/components/motion/RevealGroup.d.ts.map +1 -0
  25. package/dist/components/motion/RotatingBadge.d.ts +9 -0
  26. package/dist/components/motion/RotatingBadge.d.ts.map +1 -0
  27. package/dist/components/motion/ScrollStage.d.ts +11 -0
  28. package/dist/components/motion/ScrollStage.d.ts.map +1 -0
  29. package/dist/components/motion/SmoothScrollProvider.d.ts +18 -0
  30. package/dist/components/motion/SmoothScrollProvider.d.ts.map +1 -0
  31. package/dist/components/motion/StackedCards.d.ts +10 -0
  32. package/dist/components/motion/StackedCards.d.ts.map +1 -0
  33. package/dist/components/motion/StatStrip.d.ts +8 -0
  34. package/dist/components/motion/StatStrip.d.ts.map +1 -0
  35. package/dist/components/motion/TestimonialSpotlight.d.ts +10 -0
  36. package/dist/components/motion/TestimonialSpotlight.d.ts.map +1 -0
  37. package/dist/components/motion/storyData.d.ts +52 -0
  38. package/dist/components/motion/storyData.d.ts.map +1 -0
  39. package/dist/components/navigation/Navbar.d.ts.map +1 -1
  40. package/dist/esm/components/core/Table/MobileCard.js +2 -2
  41. package/dist/esm/components/core/Table/MobileFilters.js +1 -1
  42. package/dist/esm/components/core/Table/Table.js +28 -26
  43. package/dist/esm/components/motion/BentoExpandGrid.js +144 -0
  44. package/dist/esm/components/motion/CountUp.js +97 -0
  45. package/dist/esm/components/motion/DeviceFrame.js +102 -0
  46. package/dist/esm/components/motion/DeviceMorphHero.js +228 -0
  47. package/dist/esm/components/motion/LogoMarquee.js +144 -0
  48. package/dist/esm/components/motion/PhotoCollage.js +92 -0
  49. package/dist/esm/components/motion/Reveal.js +115 -0
  50. package/dist/esm/components/motion/RevealGroup.js +43 -0
  51. package/dist/esm/components/motion/RotatingBadge.js +66 -0
  52. package/dist/esm/components/motion/ScrollStage.js +62 -0
  53. package/dist/esm/components/motion/SmoothScrollProvider.js +63 -0
  54. package/dist/esm/components/motion/StackedCards.js +166 -0
  55. package/dist/esm/components/motion/StatStrip.js +58 -0
  56. package/dist/esm/components/motion/TestimonialSpotlight.js +209 -0
  57. package/dist/esm/components/navigation/Navbar.js +5 -2
  58. package/dist/esm/hooks/useScrollProgress.js +107 -0
  59. package/dist/esm/hooks/useSmoothScroll.js +33 -0
  60. package/dist/esm/motion/engine/inView.js +54 -0
  61. package/dist/esm/motion/engine/progress.js +45 -0
  62. package/dist/esm/motion/engine/scheduler.js +67 -0
  63. package/dist/esm/motion/engine/useHydrated.js +17 -0
  64. package/dist/esm/motion/engine/useIsomorphicLayoutEffect.js +7 -0
  65. package/dist/esm/motion/engine/useMergedRef.js +12 -0
  66. package/dist/esm/motion/index.js +16 -0
  67. package/dist/esm/motion/tokens.js +10 -0
  68. package/dist/hooks/useScrollProgress.d.ts +17 -0
  69. package/dist/hooks/useScrollProgress.d.ts.map +1 -0
  70. package/dist/hooks/useSmoothScroll.d.ts +11 -0
  71. package/dist/hooks/useSmoothScroll.d.ts.map +1 -0
  72. package/dist/index.css +1 -1
  73. package/dist/index.esm.css +1 -1
  74. package/dist/index.esm.js +36 -31
  75. package/dist/index.js +36 -31
  76. package/dist/motion/engine/inView.d.ts +5 -0
  77. package/dist/motion/engine/inView.d.ts.map +1 -0
  78. package/dist/motion/engine/progress.d.ts +18 -0
  79. package/dist/motion/engine/progress.d.ts.map +1 -0
  80. package/dist/motion/engine/scheduler.d.ts +10 -0
  81. package/dist/motion/engine/scheduler.d.ts.map +1 -0
  82. package/dist/motion/engine/useHydrated.d.ts +3 -0
  83. package/dist/motion/engine/useHydrated.d.ts.map +1 -0
  84. package/dist/motion/engine/useIsomorphicLayoutEffect.d.ts +4 -0
  85. package/dist/motion/engine/useIsomorphicLayoutEffect.d.ts.map +1 -0
  86. package/dist/motion/engine/useMergedRef.d.ts +3 -0
  87. package/dist/motion/engine/useMergedRef.d.ts.map +1 -0
  88. package/dist/motion/index.d.ts +20 -0
  89. package/dist/motion/index.d.ts.map +1 -0
  90. package/dist/motion/index.js +1813 -0
  91. package/dist/motion/tokens.d.ts +6 -0
  92. package/dist/motion/tokens.d.ts.map +1 -0
  93. package/dist/rich-text/index.js +3 -18
  94. package/dist/tokens/tokens.json +21 -0
  95. package/dist/types/motion.d.ts +290 -0
  96. package/dist/types/motion.d.ts.map +1 -0
  97. package/doc/README.md +17 -1
  98. package/mcp/catalog.snapshot.json +959 -12
  99. package/motion/package.json +5 -0
  100. package/package.json +14 -3
  101. package/tokens/tokens.json +6 -0
package/dist/index.esm.js CHANGED
@@ -8963,7 +8963,7 @@ function MobileFilters(_ref5) {
8963
8963
  });
8964
8964
  },
8965
8965
  "aria-expanded": !!showMobileFilters,
8966
- className: "text-xs font-medium text-primary-700",
8966
+ className: "text-xs font-medium text-primary-700 dark:text-primary-300",
8967
8967
  children: showMobileFilters ? "Hide" : "Show"
8968
8968
  })]
8969
8969
  }), showMobileFilters && jsxs("div", {
@@ -10531,10 +10531,10 @@ function MobileCard(_ref) {
10531
10531
  return jsxs("div", {
10532
10532
  className: cn("flex justify-between items-center flex-row py-2 border-b last:border-b-0", safeExtraCellClass),
10533
10533
  children: [jsx("div", {
10534
- className: "text-xs font-medium text-primary-700 uppercase tracking-wide mb-1 sm:mb-0 sm:w-1/3 sm:pr-2",
10534
+ className: "text-xs font-medium text-primary-700 dark:text-primary-300 uppercase tracking-wide mb-1 sm:mb-0 sm:w-1/3 sm:pr-2",
10535
10535
  children: column.label
10536
10536
  }), jsx("div", {
10537
- className: "text-sm text-primary-900 sm:w-2/3 sm:pl-2 break-words",
10537
+ className: "text-sm text-primary-900 dark:text-foreground sm:w-2/3 sm:pl-2 break-words",
10538
10538
  children: renderCell(column, row, globalIndex)
10539
10539
  })]
10540
10540
  }, column.key);
@@ -10878,6 +10878,12 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
10878
10878
  _useState14 = _slicedToArray(_useState13, 2),
10879
10879
  filters = _useState14[0],
10880
10880
  setFilters = _useState14[1];
10881
+ // The handlers below read and advance these refs synchronously, so they can
10882
+ // call onSort / onFilter after setting state instead of inside a setState
10883
+ // updater (updaters must be pure; React runs them during render and twice
10884
+ // in StrictMode, #194). They are the only writers of sortConfig / filters.
10885
+ var sortConfigRef = useRef(sortConfig);
10886
+ var filtersRef = useRef(filters);
10881
10887
  var _useState15 = useState(""),
10882
10888
  _useState16 = _slicedToArray(_useState15, 2),
10883
10889
  searchInput = _useState16[0],
@@ -11633,34 +11639,30 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
11633
11639
  }, []);
11634
11640
  var handleSort = useCallback(function (key) {
11635
11641
  if (!sortable) return;
11636
- setSortConfig(function (prev) {
11637
- var direction = prev.key === key && prev.direction === "asc" ? "desc" : "asc";
11638
- onSort === null || onSort === void 0 || onSort(key, direction);
11639
- return {
11640
- key: key,
11641
- direction: direction
11642
- };
11643
- });
11642
+ var prev = sortConfigRef.current;
11643
+ var direction = prev.key === key && prev.direction === "asc" ? "desc" : "asc";
11644
+ var next = {
11645
+ key: key,
11646
+ direction: direction
11647
+ };
11648
+ sortConfigRef.current = next;
11649
+ setSortConfig(next);
11650
+ onSort === null || onSort === void 0 || onSort(key, direction);
11644
11651
  }, [sortable, onSort]);
11645
- var handleFilter = useCallback(function (key, value) {
11646
- setFilters(function (prev) {
11647
- var newFilters = _objectSpread$16(_objectSpread$16({}, prev), {}, _defineProperty$4({}, key, value));
11648
- onFilter === null || onFilter === void 0 || onFilter(newFilters);
11649
- onFilterChange === null || onFilterChange === void 0 || onFilterChange(newFilters);
11650
- return newFilters;
11651
- });
11652
+ var commitFilters = useCallback(function (newFilters) {
11653
+ filtersRef.current = newFilters;
11654
+ setFilters(newFilters);
11652
11655
  setCurrentPage(1);
11656
+ onFilter === null || onFilter === void 0 || onFilter(newFilters);
11657
+ onFilterChange === null || onFilterChange === void 0 || onFilterChange(newFilters);
11653
11658
  }, [onFilter, onFilterChange]);
11659
+ var handleFilter = useCallback(function (key, value) {
11660
+ return commitFilters(_objectSpread$16(_objectSpread$16({}, filtersRef.current), {}, _defineProperty$4({}, key, value)));
11661
+ }, [commitFilters]);
11654
11662
  // Commits several filters at once (the phone filter sheet's Apply).
11655
11663
  var applyFilters = useCallback(function (patch) {
11656
- setFilters(function (prev) {
11657
- var newFilters = _objectSpread$16(_objectSpread$16({}, prev), patch);
11658
- onFilter === null || onFilter === void 0 || onFilter(newFilters);
11659
- onFilterChange === null || onFilterChange === void 0 || onFilterChange(newFilters);
11660
- return newFilters;
11661
- });
11662
- setCurrentPage(1);
11663
- }, [onFilter, onFilterChange]);
11664
+ return commitFilters(_objectSpread$16(_objectSpread$16({}, filtersRef.current), patch));
11665
+ }, [commitFilters]);
11664
11666
  // One open swipe row at a time: `{ key, side }`.
11665
11667
  var _useState37 = useState(null),
11666
11668
  _useState38 = _slicedToArray(_useState37, 2),
@@ -11897,7 +11899,7 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
11897
11899
  className: "bg-primary-50/40 hover:bg-primary-100/70 active:bg-primary-100 transition-colors border-t-2 border-b-2 border-dashed border-primary-300 cursor-pointer group",
11898
11900
  children: jsx("td", {
11899
11901
  colSpan: visibleCount,
11900
- className: "px-6 py-3.5 text-left text-sm font-semibold text-primary-700 group-hover:text-primary-800",
11902
+ className: "px-6 py-3.5 text-left text-sm font-semibold text-primary-700 group-hover:text-primary-800 dark:text-primary-300 dark:group-hover:text-primary-200",
11901
11903
  children: jsxs("div", {
11902
11904
  className: "flex items-center justify-start gap-2",
11903
11905
  children: [jsx(Plus, {
@@ -12077,7 +12079,7 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
12077
12079
  children: [hasDetailsColumn && jsx("th", {
12078
12080
  className: "w-8 px-4 py-3"
12079
12081
  }), showSerial && jsx("th", {
12080
- className: "w-8 px-4 py-3 text-left text-xs font-medium text-primary-700 uppercase tracking-wider",
12082
+ className: "w-8 px-4 py-3 text-left text-xs font-medium text-primary-700 dark:text-primary-300 uppercase tracking-wider",
12081
12083
  children: "#"
12082
12084
  }), selectable && jsx("th", {
12083
12085
  className: "w-12 px-6 py-3",
@@ -12104,7 +12106,7 @@ var Table = /*#__PURE__*/forwardRef(function Table(_ref, ref) {
12104
12106
  return jsx("th", {
12105
12107
  scope: "col",
12106
12108
  "aria-sort": ariaSort,
12107
- className: cn("px-6 py-3 text-left text-xs font-medium text-primary-700 uppercase tracking-wider", isSortable && "p-0"),
12109
+ className: cn("px-6 py-3 text-left text-xs font-medium text-primary-700 dark:text-primary-300 uppercase tracking-wider", isSortable && "p-0"),
12108
12110
  children: isSortable ? jsxs("button", {
12109
12111
  type: "button",
12110
12112
  onClick: function onClick() {
@@ -27214,8 +27216,11 @@ var Navbar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
27214
27216
  })
27215
27217
  });
27216
27218
  };
27217
- // RightMenuContent: prefer prop if provided, else fallback
27218
- var RightMenuComponent = typeof RightMenuContentProp === "function" ? RightMenuContentProp : function (rest) {
27219
+ // RightMenuContent: a render function or an element (#193), else the
27220
+ // built-in notifications menu.
27221
+ var RightMenuComponent = typeof RightMenuContentProp === "function" ? RightMenuContentProp : RightMenuContentProp != null ? function () {
27222
+ return RightMenuContentProp;
27223
+ } : function (rest) {
27219
27224
  return jsx(RightMenuContent, _objectSpread$C({
27220
27225
  emitter: emitter
27221
27226
  }, rest));
package/dist/index.js CHANGED
@@ -8983,7 +8983,7 @@ function MobileFilters(_ref5) {
8983
8983
  });
8984
8984
  },
8985
8985
  "aria-expanded": !!showMobileFilters,
8986
- className: "text-xs font-medium text-primary-700",
8986
+ className: "text-xs font-medium text-primary-700 dark:text-primary-300",
8987
8987
  children: showMobileFilters ? "Hide" : "Show"
8988
8988
  })]
8989
8989
  }), showMobileFilters && jsxRuntime.jsxs("div", {
@@ -10551,10 +10551,10 @@ function MobileCard(_ref) {
10551
10551
  return jsxRuntime.jsxs("div", {
10552
10552
  className: cn("flex justify-between items-center flex-row py-2 border-b last:border-b-0", safeExtraCellClass),
10553
10553
  children: [jsxRuntime.jsx("div", {
10554
- className: "text-xs font-medium text-primary-700 uppercase tracking-wide mb-1 sm:mb-0 sm:w-1/3 sm:pr-2",
10554
+ className: "text-xs font-medium text-primary-700 dark:text-primary-300 uppercase tracking-wide mb-1 sm:mb-0 sm:w-1/3 sm:pr-2",
10555
10555
  children: column.label
10556
10556
  }), jsxRuntime.jsx("div", {
10557
- className: "text-sm text-primary-900 sm:w-2/3 sm:pl-2 break-words",
10557
+ className: "text-sm text-primary-900 dark:text-foreground sm:w-2/3 sm:pl-2 break-words",
10558
10558
  children: renderCell(column, row, globalIndex)
10559
10559
  })]
10560
10560
  }, column.key);
@@ -10898,6 +10898,12 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
10898
10898
  _useState14 = _slicedToArray(_useState13, 2),
10899
10899
  filters = _useState14[0],
10900
10900
  setFilters = _useState14[1];
10901
+ // The handlers below read and advance these refs synchronously, so they can
10902
+ // call onSort / onFilter after setting state instead of inside a setState
10903
+ // updater (updaters must be pure; React runs them during render and twice
10904
+ // in StrictMode, #194). They are the only writers of sortConfig / filters.
10905
+ var sortConfigRef = React.useRef(sortConfig);
10906
+ var filtersRef = React.useRef(filters);
10901
10907
  var _useState15 = React.useState(""),
10902
10908
  _useState16 = _slicedToArray(_useState15, 2),
10903
10909
  searchInput = _useState16[0],
@@ -11653,34 +11659,30 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
11653
11659
  }, []);
11654
11660
  var handleSort = React.useCallback(function (key) {
11655
11661
  if (!sortable) return;
11656
- setSortConfig(function (prev) {
11657
- var direction = prev.key === key && prev.direction === "asc" ? "desc" : "asc";
11658
- onSort === null || onSort === void 0 || onSort(key, direction);
11659
- return {
11660
- key: key,
11661
- direction: direction
11662
- };
11663
- });
11662
+ var prev = sortConfigRef.current;
11663
+ var direction = prev.key === key && prev.direction === "asc" ? "desc" : "asc";
11664
+ var next = {
11665
+ key: key,
11666
+ direction: direction
11667
+ };
11668
+ sortConfigRef.current = next;
11669
+ setSortConfig(next);
11670
+ onSort === null || onSort === void 0 || onSort(key, direction);
11664
11671
  }, [sortable, onSort]);
11665
- var handleFilter = React.useCallback(function (key, value) {
11666
- setFilters(function (prev) {
11667
- var newFilters = _objectSpread$16(_objectSpread$16({}, prev), {}, _defineProperty$4({}, key, value));
11668
- onFilter === null || onFilter === void 0 || onFilter(newFilters);
11669
- onFilterChange === null || onFilterChange === void 0 || onFilterChange(newFilters);
11670
- return newFilters;
11671
- });
11672
+ var commitFilters = React.useCallback(function (newFilters) {
11673
+ filtersRef.current = newFilters;
11674
+ setFilters(newFilters);
11672
11675
  setCurrentPage(1);
11676
+ onFilter === null || onFilter === void 0 || onFilter(newFilters);
11677
+ onFilterChange === null || onFilterChange === void 0 || onFilterChange(newFilters);
11673
11678
  }, [onFilter, onFilterChange]);
11679
+ var handleFilter = React.useCallback(function (key, value) {
11680
+ return commitFilters(_objectSpread$16(_objectSpread$16({}, filtersRef.current), {}, _defineProperty$4({}, key, value)));
11681
+ }, [commitFilters]);
11674
11682
  // Commits several filters at once (the phone filter sheet's Apply).
11675
11683
  var applyFilters = React.useCallback(function (patch) {
11676
- setFilters(function (prev) {
11677
- var newFilters = _objectSpread$16(_objectSpread$16({}, prev), patch);
11678
- onFilter === null || onFilter === void 0 || onFilter(newFilters);
11679
- onFilterChange === null || onFilterChange === void 0 || onFilterChange(newFilters);
11680
- return newFilters;
11681
- });
11682
- setCurrentPage(1);
11683
- }, [onFilter, onFilterChange]);
11684
+ return commitFilters(_objectSpread$16(_objectSpread$16({}, filtersRef.current), patch));
11685
+ }, [commitFilters]);
11684
11686
  // One open swipe row at a time: `{ key, side }`.
11685
11687
  var _useState37 = React.useState(null),
11686
11688
  _useState38 = _slicedToArray(_useState37, 2),
@@ -11917,7 +11919,7 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
11917
11919
  className: "bg-primary-50/40 hover:bg-primary-100/70 active:bg-primary-100 transition-colors border-t-2 border-b-2 border-dashed border-primary-300 cursor-pointer group",
11918
11920
  children: jsxRuntime.jsx("td", {
11919
11921
  colSpan: visibleCount,
11920
- className: "px-6 py-3.5 text-left text-sm font-semibold text-primary-700 group-hover:text-primary-800",
11922
+ className: "px-6 py-3.5 text-left text-sm font-semibold text-primary-700 group-hover:text-primary-800 dark:text-primary-300 dark:group-hover:text-primary-200",
11921
11923
  children: jsxRuntime.jsxs("div", {
11922
11924
  className: "flex items-center justify-start gap-2",
11923
11925
  children: [jsxRuntime.jsx(Plus, {
@@ -12097,7 +12099,7 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
12097
12099
  children: [hasDetailsColumn && jsxRuntime.jsx("th", {
12098
12100
  className: "w-8 px-4 py-3"
12099
12101
  }), showSerial && jsxRuntime.jsx("th", {
12100
- className: "w-8 px-4 py-3 text-left text-xs font-medium text-primary-700 uppercase tracking-wider",
12102
+ className: "w-8 px-4 py-3 text-left text-xs font-medium text-primary-700 dark:text-primary-300 uppercase tracking-wider",
12101
12103
  children: "#"
12102
12104
  }), selectable && jsxRuntime.jsx("th", {
12103
12105
  className: "w-12 px-6 py-3",
@@ -12124,7 +12126,7 @@ var Table = /*#__PURE__*/React.forwardRef(function Table(_ref, ref) {
12124
12126
  return jsxRuntime.jsx("th", {
12125
12127
  scope: "col",
12126
12128
  "aria-sort": ariaSort,
12127
- className: cn("px-6 py-3 text-left text-xs font-medium text-primary-700 uppercase tracking-wider", isSortable && "p-0"),
12129
+ className: cn("px-6 py-3 text-left text-xs font-medium text-primary-700 dark:text-primary-300 uppercase tracking-wider", isSortable && "p-0"),
12128
12130
  children: isSortable ? jsxRuntime.jsxs("button", {
12129
12131
  type: "button",
12130
12132
  onClick: function onClick() {
@@ -27234,8 +27236,11 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
27234
27236
  })
27235
27237
  });
27236
27238
  };
27237
- // RightMenuContent: prefer prop if provided, else fallback
27238
- var RightMenuComponent = typeof RightMenuContentProp === "function" ? RightMenuContentProp : function (rest) {
27239
+ // RightMenuContent: a render function or an element (#193), else the
27240
+ // built-in notifications menu.
27241
+ var RightMenuComponent = typeof RightMenuContentProp === "function" ? RightMenuContentProp : RightMenuContentProp != null ? function () {
27242
+ return RightMenuContentProp;
27243
+ } : function (rest) {
27239
27244
  return jsxRuntime.jsx(RightMenuContent, _objectSpread$C({
27240
27245
  emitter: emitter
27241
27246
  }, rest));
@@ -0,0 +1,5 @@
1
+ export function observe(el: any, callback: any, { rootMargin, threshold }?: {
2
+ rootMargin?: string | undefined;
3
+ threshold?: number | undefined;
4
+ }): () => void;
5
+ //# sourceMappingURL=inView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inView.d.ts","sourceRoot":"","sources":["../../../src/motion/engine/inView.js"],"names":[],"mappings":"AA2BA;;;eAkBC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Scroll progress of an element.
3
+ * - "view": 0 when its top meets the viewport bottom, 1 when its bottom leaves the viewport top.
4
+ * - "pin": 0 when its top meets the viewport top, 1 when its bottom meets the viewport bottom
5
+ * (the span a `position: sticky` child stays pinned).
6
+ * `start` / `end` narrow the range: progress is re-mapped from [start, end] to 0–1.
7
+ */
8
+ export function computeProgress(top: any, height: any, viewport: any, { mode, start, end }?: {
9
+ mode?: string | undefined;
10
+ start?: number | undefined;
11
+ end?: number | undefined;
12
+ }): any;
13
+ export function clamp01(v: any): any;
14
+ export function lerp(a: any, b: any, t: any): any;
15
+ export function easeOut(t: any): number;
16
+ export function easeInOut(t: any): number;
17
+ export function segment(t: any, from: any, to: any): any;
18
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/motion/engine/progress.js"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH;;;;QASC;AA7BM,qCAAoD;AAEpD,kDAAyC;AAGzC,wCAA6C;AAG7C,0CAAoF;AAGpF,yDAAuE"}
@@ -0,0 +1,10 @@
1
+ /** Ask for one frame (coalesced: many calls before the frame run it once). */
2
+ export function requestFrame(): void;
3
+ /**
4
+ * Register `{ measure?, write?, loop? }`. Returns the unsubscribe function.
5
+ * The subscriber gets a frame right away, so it can paint its first state.
6
+ */
7
+ export function subscribe(subscriber: any): () => void;
8
+ /** Test helper: number of live subscribers. */
9
+ export function subscriberCount(): number;
10
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/motion/engine/scheduler.js"],"names":[],"mappings":"AA+BA,8EAA8E;AAC9E,qCAGC;AAYD;;;GAGG;AACH,uDAYC;AAED,+CAA+C;AAC/C,0CAEC"}
@@ -0,0 +1,3 @@
1
+ export function useHydrated(): boolean;
2
+ export default useHydrated;
3
+ //# sourceMappingURL=useHydrated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHydrated.d.ts","sourceRoot":"","sources":["../../../src/motion/engine/useHydrated.js"],"names":[],"mappings":"AAMA,uCAMC"}
@@ -0,0 +1,4 @@
1
+ export const useIsomorphicLayoutEffect: typeof useEffect;
2
+ export default useIsomorphicLayoutEffect;
3
+ import { useEffect } from "react";
4
+ //# sourceMappingURL=useIsomorphicLayoutEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsomorphicLayoutEffect.d.ts","sourceRoot":"","sources":["../../../src/motion/engine/useIsomorphicLayoutEffect.js"],"names":[],"mappings":"AAGA,yDAAqG;;0BAH1D,OAAO"}
@@ -0,0 +1,3 @@
1
+ export function useMergedRef(forwardedRef: any, localRef: any): (node: any) => void;
2
+ export default useMergedRef;
3
+ //# sourceMappingURL=useMergedRef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMergedRef.d.ts","sourceRoot":"","sources":["../../../src/motion/engine/useMergedRef.js"],"names":[],"mappings":"AAIA,oFAEC"}
@@ -0,0 +1,20 @@
1
+ import type * as React from "react";
2
+ import type { BentoExpandGridProps, CountUpProps, DeviceFrameProps, DeviceMorphHeroProps, LogoMarqueeProps, PhotoCollageProps, RevealGroupProps, RevealProps, RotatingBadgeProps, ScrollStageProps, SmoothScrollProviderProps, StackedCardsProps, StatStripProps, TestimonialSpotlightProps } from "../types/motion";
3
+ export { useScrollProgress } from "../hooks/useScrollProgress";
4
+ export declare const ScrollStage: React.ForwardRefExoticComponent<ScrollStageProps & React.RefAttributes<HTMLElement>>;
5
+ export declare const Reveal: React.ForwardRefExoticComponent<RevealProps & React.RefAttributes<HTMLElement>>;
6
+ export declare const RevealGroup: React.ForwardRefExoticComponent<RevealGroupProps & React.RefAttributes<HTMLElement>>;
7
+ export declare const SmoothScrollProvider: React.ForwardRefExoticComponent<SmoothScrollProviderProps & React.RefAttributes<any>>;
8
+ export { useSmoothScroll } from "../hooks/useSmoothScroll";
9
+ export declare const DeviceFrame: React.ForwardRefExoticComponent<DeviceFrameProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const LogoMarquee: React.ForwardRefExoticComponent<LogoMarqueeProps & React.RefAttributes<HTMLDivElement>>;
11
+ export declare const CountUp: React.ForwardRefExoticComponent<CountUpProps & React.RefAttributes<HTMLSpanElement>>;
12
+ export declare const StatStrip: React.ForwardRefExoticComponent<StatStripProps & React.RefAttributes<HTMLDListElement>>;
13
+ export declare const StackedCards: React.ForwardRefExoticComponent<StackedCardsProps & React.RefAttributes<HTMLOListElement>>;
14
+ export declare const DeviceMorphHero: React.ForwardRefExoticComponent<DeviceMorphHeroProps & React.RefAttributes<HTMLElement>>;
15
+ export declare const BentoExpandGrid: React.ForwardRefExoticComponent<BentoExpandGridProps & React.RefAttributes<HTMLUListElement>>;
16
+ export declare const TestimonialSpotlight: React.ForwardRefExoticComponent<TestimonialSpotlightProps & React.RefAttributes<HTMLElement>>;
17
+ export declare const PhotoCollage: React.ForwardRefExoticComponent<PhotoCollageProps & React.RefAttributes<HTMLDivElement>>;
18
+ export declare const RotatingBadge: React.ForwardRefExoticComponent<RotatingBadgeProps & React.RefAttributes<HTMLDivElement>>;
19
+ export * from "../types/motion";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/motion/index.js"],"names":[],"mappings":""}