@dreamtree-org/twreact-ui 1.3.8 → 1.3.10

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 (109) hide show
  1. package/DESIGN.md +11 -3
  2. package/README.md +9 -1
  3. package/ai-skills/dreamtree-ui.md +2 -2
  4. package/dist/ai-schema.json +19 -8
  5. package/dist/charts/index.js +69 -24
  6. package/dist/components/blocks/AppShell.d.ts.map +1 -1
  7. package/dist/components/charts/chartTheme.d.ts +2 -5
  8. package/dist/components/charts/chartTheme.d.ts.map +1 -1
  9. package/dist/components/core/Accordion.d.ts.map +1 -1
  10. package/dist/components/core/ColorPicker.d.ts.map +1 -1
  11. package/dist/components/core/DatePicker.d.ts.map +1 -1
  12. package/dist/components/core/Form.d.ts.map +1 -1
  13. package/dist/components/core/Input.d.ts.map +1 -1
  14. package/dist/components/core/PriceRangePicker.d.ts +0 -29
  15. package/dist/components/core/PriceRangePicker.d.ts.map +1 -1
  16. package/dist/components/core/Radio.d.ts.map +1 -1
  17. package/dist/components/core/Rate.d.ts.map +1 -1
  18. package/dist/components/core/RoundedTag.d.ts.map +1 -1
  19. package/dist/components/core/Table/ColumnMenu.d.ts.map +1 -1
  20. package/dist/components/core/Table/Pagination.d.ts.map +1 -1
  21. package/dist/components/core/Table/Table.d.ts.map +1 -1
  22. package/dist/components/core/Table/TableRow.d.ts.map +1 -1
  23. package/dist/components/core/Table/helpers.d.ts +2 -0
  24. package/dist/components/core/Table/helpers.d.ts.map +1 -1
  25. package/dist/components/core/Table/useClickOutside.d.ts +5 -2
  26. package/dist/components/core/Table/useClickOutside.d.ts.map +1 -1
  27. package/dist/components/core/Tabs.d.ts.map +1 -1
  28. package/dist/components/core/TextToSpeech.d.ts +2 -7
  29. package/dist/components/core/TextToSpeech.d.ts.map +1 -1
  30. package/dist/components/core/Tooltip.d.ts.map +1 -1
  31. package/dist/components/feedback/Alert.d.ts.map +1 -1
  32. package/dist/components/feedback/Dialog.d.ts.map +1 -1
  33. package/dist/components/feedback/Toast.d.ts.map +1 -1
  34. package/dist/components/navigation/Sidebar.d.ts.map +1 -1
  35. package/dist/components/utility/Avatar.d.ts.map +1 -1
  36. package/dist/components/utility/Carousel.d.ts.map +1 -1
  37. package/dist/components/utility/Portal.d.ts +6 -0
  38. package/dist/components/utility/Portal.d.ts.map +1 -0
  39. package/dist/esm/components/blocks/AppShell.js +24 -18
  40. package/dist/esm/components/charts/CartesianChart.js +2 -1
  41. package/dist/esm/components/charts/DonutChart.js +2 -1
  42. package/dist/esm/components/charts/Sparkline.js +2 -1
  43. package/dist/esm/components/charts/chartTheme.js +1 -22
  44. package/dist/esm/components/core/Accordion.js +40 -9
  45. package/dist/esm/components/core/Button.js +8 -8
  46. package/dist/esm/components/core/ColorPicker.js +19 -7
  47. package/dist/esm/components/core/DatePicker.js +97 -58
  48. package/dist/esm/components/core/Form.js +35 -8
  49. package/dist/esm/components/core/Input.js +3 -1
  50. package/dist/esm/components/core/PriceRangePicker.js +205 -218
  51. package/dist/esm/components/core/Radio.js +36 -6
  52. package/dist/esm/components/core/Rate.js +41 -50
  53. package/dist/esm/components/core/RoundedTag.js +25 -8
  54. package/dist/esm/components/core/Table/ColumnMenu.js +2 -4
  55. package/dist/esm/components/core/Table/Pagination.js +15 -18
  56. package/dist/esm/components/core/Table/Table.js +11 -5
  57. package/dist/esm/components/core/Table/TableRow.js +2 -2
  58. package/dist/esm/components/core/Table/helpers.js +33 -1
  59. package/dist/esm/components/core/Tabs.js +6 -5
  60. package/dist/esm/components/core/TextToSpeech.js +121 -28
  61. package/dist/esm/components/core/Tooltip.js +100 -28
  62. package/dist/esm/components/feedback/Alert.js +21 -11
  63. package/dist/esm/components/feedback/Dialog.js +44 -100
  64. package/dist/esm/components/feedback/Toast.js +24 -5
  65. package/dist/esm/components/navigation/Sidebar.js +13 -61
  66. package/dist/esm/components/utility/Avatar.js +23 -10
  67. package/dist/esm/components/utility/Carousel.js +34 -17
  68. package/dist/esm/components/utility/Pagination.js +2 -2
  69. package/dist/esm/hooks/useClickOutside.js +51 -0
  70. package/dist/esm/hooks/useFocusTrap.js +10 -2
  71. package/dist/esm/hooks/useMediaQuery.js +61 -0
  72. package/dist/esm/hooks/useReducedMotion.js +17 -0
  73. package/dist/esm/hooks/useScrollLock.js +76 -9
  74. package/dist/esm/hooks/useTheme.js +6 -1
  75. package/dist/esm/utils/position.js +6 -0
  76. package/dist/hooks/useClickOutside.d.ts +14 -0
  77. package/dist/hooks/useClickOutside.d.ts.map +1 -0
  78. package/dist/hooks/useFloatingPosition.d.ts +37 -0
  79. package/dist/hooks/useFloatingPosition.d.ts.map +1 -0
  80. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  81. package/dist/hooks/useMediaQuery.d.ts +22 -0
  82. package/dist/hooks/useMediaQuery.d.ts.map +1 -0
  83. package/dist/hooks/usePresence.d.ts +16 -0
  84. package/dist/hooks/usePresence.d.ts.map +1 -0
  85. package/dist/hooks/usePresentation.d.ts +9 -0
  86. package/dist/hooks/usePresentation.d.ts.map +1 -0
  87. package/dist/hooks/useReducedMotion.d.ts +10 -0
  88. package/dist/hooks/useReducedMotion.d.ts.map +1 -0
  89. package/dist/hooks/useScrollLock.d.ts +11 -1
  90. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  91. package/dist/hooks/useTheme.d.ts.map +1 -1
  92. package/dist/index.css +1 -1
  93. package/dist/index.esm.css +1 -1
  94. package/dist/index.esm.js +1719 -1201
  95. package/dist/index.js +1718 -1200
  96. package/dist/tokens/tailwind3-preset.cjs +101 -8
  97. package/dist/tokens/theme.css +27 -0
  98. package/dist/tokens/tokens.json +175 -0
  99. package/dist/tokens/vars.css +2 -0
  100. package/dist/types/index.d.ts +8 -2
  101. package/dist/types/index.d.ts.map +1 -1
  102. package/dist/utils/position.d.ts.map +1 -1
  103. package/dist/utils/touchTarget.d.ts +1 -0
  104. package/dist/utils/touchTarget.d.ts.map +1 -1
  105. package/mcp/catalog.snapshot.json +83 -53
  106. package/package.json +2 -1
  107. package/tokens/lib.cjs +35 -0
  108. package/tokens/tokens.json +58 -2
  109. package/dist/esm/components/core/Table/useClickOutside.js +0 -26
@@ -3,8 +3,7 @@ import { useEffect } from 'react';
3
3
  import { useLatestRef } from './useLatestRef.js';
4
4
 
5
5
  // Internal (not exported from the package). Shared focus management for the
6
- // overlay primitives (Drawer, Popover, Tour). Dialog keeps its own copy so its
7
- // behavior is untouched.
6
+ // overlay primitives (Drawer, Dialog, Popover, Tour, Sidebar, AppShell).
8
7
  var FOCUSABLE_SELECTOR = ["a[href]", "button:not([disabled])", "textarea:not([disabled])", "input:not([disabled])", "select:not([disabled])", '[tabindex]:not([tabindex="-1"])'].join(",");
9
8
  var getFocusable = function getFocusable(root) {
10
9
  return root ? Array.from(root.querySelectorAll(FOCUSABLE_SELECTOR)).filter(function (el) {
@@ -17,7 +16,16 @@ var layerStack = [];
17
16
  var isTopLayer = function isTopLayer(token) {
18
17
  return layerStack[layerStack.length - 1] === token;
19
18
  };
19
+ // A responsive drawer (Sidebar's `md:hidden`, AppShell's `lg:hidden`) can be
20
+ // "open" while CSS hides it on wide viewports; there is nothing to trap then.
21
+ var isDisplayNone = function isDisplayNone(el) {
22
+ for (var node = el; node && node.nodeType === 1; node = node.parentElement) {
23
+ if (window.getComputedStyle(node).display === "none") return true;
24
+ }
25
+ return false;
26
+ };
20
27
  function cycleFocus(e, panel) {
28
+ if (isDisplayNone(panel)) return;
21
29
  var focusables = getFocusable(panel);
22
30
  if (focusables.length === 0) {
23
31
  e.preventDefault();
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import { useCallback, useSyncExternalStore } from 'react';
3
+
4
+ // Internal (not exported). SSR-safe media-query subscription.
5
+ function getMediaQueryList(query) {
6
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return null;
7
+ return window.matchMedia(query) || null;
8
+ }
9
+ /**
10
+ * Subscribes `onChange` to a MediaQueryList's change events. Uses
11
+ * `addEventListener` where available and falls back to the deprecated
12
+ * `addListener` (Safari < 14). Returns the unsubscribe function.
13
+ */
14
+ function subscribeMediaQuery(query, onChange) {
15
+ var mql = getMediaQueryList(query);
16
+ if (!mql) return function () {};
17
+ if (typeof mql.addEventListener === "function") {
18
+ mql.addEventListener("change", onChange);
19
+ return function () {
20
+ var _mql$removeEventListe;
21
+ return (_mql$removeEventListe = mql.removeEventListener) === null || _mql$removeEventListe === void 0 ? void 0 : _mql$removeEventListe.call(mql, "change", onChange);
22
+ };
23
+ }
24
+ if (typeof mql.addListener === "function") {
25
+ mql.addListener(onChange);
26
+ return function () {
27
+ var _mql$removeListener;
28
+ return (_mql$removeListener = mql.removeListener) === null || _mql$removeListener === void 0 ? void 0 : _mql$removeListener.call(mql, onChange);
29
+ };
30
+ }
31
+ return function () {};
32
+ }
33
+ /**
34
+ * `true` while `query` matches; follows changes live.
35
+ *
36
+ * On the server (and while hydrating) it returns `defaultValue`, so server and
37
+ * client markup agree; the real value is applied right after hydration. Without
38
+ * `window.matchMedia` it always returns `defaultValue`.
39
+ *
40
+ * @param {string} query - a CSS media query, e.g. "(max-width: 639px)".
41
+ * @param {{ defaultValue?: boolean }} [options]
42
+ * @returns {boolean}
43
+ */
44
+ function useMediaQuery(query) {
45
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
46
+ _ref$defaultValue = _ref.defaultValue,
47
+ defaultValue = _ref$defaultValue === void 0 ? false : _ref$defaultValue;
48
+ var subscribe = useCallback(function (onChange) {
49
+ return subscribeMediaQuery(query, onChange);
50
+ }, [query]);
51
+ var getSnapshot = function getSnapshot() {
52
+ var mql = getMediaQueryList(query);
53
+ return mql ? Boolean(mql.matches) : defaultValue;
54
+ };
55
+ var getServerSnapshot = function getServerSnapshot() {
56
+ return defaultValue;
57
+ };
58
+ return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
59
+ }
60
+
61
+ export { subscribeMediaQuery, useMediaQuery };
@@ -0,0 +1,17 @@
1
+ import { useMediaQuery } from './useMediaQuery.js';
2
+
3
+ // Internal (not exported). Shared by the charts and the overlay primitives.
4
+ var REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
5
+ /**
6
+ * `true` while the user asks the OS for reduced motion; follows changes live.
7
+ * `false` on the server and while hydrating, so the first render matches.
8
+ *
9
+ * @returns {boolean}
10
+ */
11
+ function useReducedMotion() {
12
+ return useMediaQuery(REDUCED_MOTION_QUERY, {
13
+ defaultValue: false
14
+ });
15
+ }
16
+
17
+ export { REDUCED_MOTION_QUERY, useReducedMotion };
@@ -3,24 +3,91 @@ import { useEffect } from 'react';
3
3
 
4
4
  // Internal (not exported). Locks body scroll while any overlay is open. A
5
5
  // counter lets two overlays (e.g. a Drawer and a Tour) overlap without the
6
- // first one to close unlocking the page under the second.
6
+ // first one to close unlocking the page under the second: only the outermost
7
+ // lock touches the body, and only the last release restores it.
8
+ //
9
+ // While locked it also
10
+ // - pads the body by the scrollbar width, so the page does not shift when the
11
+ // scrollbar disappears;
12
+ // - on iOS (or with `{ fixedBody: true }`) pins the body with
13
+ // `position: fixed; top: -scrollY; width: 100%`, because iOS Safari ignores
14
+ // `overflow: hidden` on the body, and restores the scroll position after.
7
15
  var lock = {
8
16
  count: 0,
9
- previous: ""
17
+ saved: null
10
18
  };
19
+ /** iPhone / iPod / iPad, including iPadOS 13+ which reports itself as a Mac. */
20
+ function isIOS() {
21
+ if (typeof navigator === "undefined") return false;
22
+ var platform = navigator.platform || "";
23
+ if (/iP(hone|od|ad)/.test(platform)) return true;
24
+ return platform === "MacIntel" && Number(navigator.maxTouchPoints) > 1;
25
+ }
26
+ function scrollbarWidth() {
27
+ var docWidth = document.documentElement.clientWidth;
28
+ // jsdom (and detached documents) report 0; treat as "no scrollbar".
29
+ if (!docWidth) return 0;
30
+ return Math.max(0, window.innerWidth - docWidth);
31
+ }
32
+ function acquire(fixedBody) {
33
+ var _document = document,
34
+ body = _document.body;
35
+ var style = body.style;
36
+ var saved = {
37
+ overflow: style.overflow,
38
+ paddingRight: style.paddingRight,
39
+ fixed: fixedBody
40
+ };
41
+ var gap = scrollbarWidth();
42
+ if (gap > 0) {
43
+ var current = parseFloat(window.getComputedStyle(body).paddingRight) || 0;
44
+ style.paddingRight = "".concat(current + gap, "px");
45
+ }
46
+ if (fixedBody) {
47
+ saved.position = style.position;
48
+ saved.top = style.top;
49
+ saved.width = style.width;
50
+ saved.scrollX = window.scrollX || window.pageXOffset || 0;
51
+ saved.scrollY = window.scrollY || window.pageYOffset || 0;
52
+ style.position = "fixed";
53
+ style.top = "-".concat(saved.scrollY, "px");
54
+ style.width = "100%";
55
+ }
56
+ style.overflow = "hidden";
57
+ lock.saved = saved;
58
+ }
59
+ function release() {
60
+ var saved = lock.saved;
61
+ lock.saved = null;
62
+ if (!saved) return;
63
+ var style = document.body.style;
64
+ style.overflow = saved.overflow;
65
+ style.paddingRight = saved.paddingRight;
66
+ if (saved.fixed) {
67
+ style.position = saved.position;
68
+ style.top = saved.top;
69
+ style.width = saved.width;
70
+ if (typeof window.scrollTo === "function") window.scrollTo(saved.scrollX, saved.scrollY);
71
+ }
72
+ }
73
+ /**
74
+ * @param {boolean} active - hold the lock while true.
75
+ * @param {{ fixedBody?: boolean }} [options] - force the iOS-safe
76
+ * `position: fixed` mode; defaults to auto-detecting iOS. Only the outermost
77
+ * lock's mode applies.
78
+ */
11
79
  function useScrollLock(active) {
80
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
81
+ fixedBody = _ref.fixedBody;
12
82
  useEffect(function () {
13
83
  if (!active || typeof document === "undefined") return undefined;
14
- if (lock.count === 0) {
15
- lock.previous = document.body.style.overflow;
16
- document.body.style.overflow = "hidden";
17
- }
84
+ if (lock.count === 0) acquire(fixedBody === undefined ? isIOS() : Boolean(fixedBody));
18
85
  lock.count += 1;
19
86
  return function () {
20
87
  lock.count -= 1;
21
- if (lock.count === 0) document.body.style.overflow = lock.previous;
88
+ if (lock.count === 0) release();
22
89
  };
23
- }, [active]);
90
+ }, [active, fixedBody]);
24
91
  }
25
92
 
26
- export { useScrollLock };
93
+ export { isIOS, useScrollLock };
@@ -30,7 +30,12 @@ var ThemeProvider = function ThemeProvider(_ref) {
30
30
  }, []);
31
31
  useEffect(function () {
32
32
  localStorage.setItem('dreamtree-theme', theme);
33
- document.documentElement.setAttribute('data-theme', theme);
33
+ var root = document.documentElement;
34
+ root.setAttribute('data-theme', theme);
35
+ // `.dark` drives Tailwind `dark:` utilities in consumer apps configured with
36
+ // `darkMode: 'class'`; color-scheme flips native scrollbars and form controls.
37
+ root.classList.toggle('dark', theme === 'dark');
38
+ root.style.colorScheme = theme;
34
39
  }, [theme]);
35
40
  var toggleTheme = function toggleTheme() {
36
41
  setTheme(function (prev) {
@@ -1,5 +1,11 @@
1
1
  import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
2
 
3
+ /**
4
+ * @deprecated Use `useFloatingPosition` (src/hooks/useFloatingPosition.js,
5
+ * built on @floating-ui/react-dom) for new overlays. This module stays until
6
+ * Popover and Tour migrate; `prefersReducedMotion` / `revealElement` remain
7
+ * in use elsewhere.
8
+ */
3
9
  // Internal (not exported). Viewport-space positioning shared by Popover and Tour.
4
10
  // All rects are getBoundingClientRect() values, so the result is for
5
11
  // `position: fixed`.
@@ -0,0 +1,14 @@
1
+ /** Events to listen to: `pointerdown` where supported, else mouse + touch. */
2
+ export function outsidePressEvents(): string[];
3
+ /**
4
+ * @param {React.RefObject|React.RefObject[]} refs - one ref or an array of
5
+ * refs; a press inside any of them is "inside". Refs with no node are ignored.
6
+ * @param {(event: Event) => void} onClickOutside - called with the event.
7
+ * @param {{ enabled?: boolean }} [options] - `enabled` (default true) attaches
8
+ * or detaches the listeners.
9
+ */
10
+ export function useClickOutside(refs: import("react").RefObject<any> | import("react").RefObject<any>[], onClickOutside: (event: Event) => void, { enabled }?: {
11
+ enabled?: boolean;
12
+ }): void;
13
+ export default useClickOutside;
14
+ //# sourceMappingURL=useClickOutside.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClickOutside.d.ts","sourceRoot":"","sources":["../../src/hooks/useClickOutside.js"],"names":[],"mappings":"AAMA,8EAA8E;AAC9E,+CAKC;AAED;;;;;;GAMG;AACH,sCANW,iCAAgB,gCAAiB,kBAEjC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,gBACtB;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,QAwB/B"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Positions a floating element next to a reference element.
3
+ *
4
+ * @param {object} [options]
5
+ * @param {import('@floating-ui/react-dom').Placement} [options.placement='bottom-start']
6
+ * @param {number} [options.offset=4] - gap in px between reference and floating.
7
+ * @param {boolean} [options.flip=true] - flip to the opposite side when out of room.
8
+ * @param {boolean} [options.shift=true] - slide along the axis to stay in view (8px padding).
9
+ * @param {boolean} [options.matchWidth=false] - set the floating element's
10
+ * min-width to the reference's width (listboxes, comboboxes).
11
+ * @param {'fixed'|'absolute'} [options.strategy='fixed']
12
+ * @param {boolean} [options.open] - while false, auto-updates are paused.
13
+ * @returns {{ refs: { setReference: Function, setFloating: Function, reference: object, floating: object },
14
+ * floatingStyles: object, placement: string, isPositioned: boolean, update: () => void }}
15
+ */
16
+ export function useFloatingPosition({ placement, offset, flip, shift, matchWidth, strategy, open, }?: {
17
+ placement?: import("@floating-ui/utils").Placement | undefined;
18
+ offset?: number | undefined;
19
+ flip?: boolean | undefined;
20
+ shift?: boolean | undefined;
21
+ matchWidth?: boolean | undefined;
22
+ strategy?: "fixed" | "absolute" | undefined;
23
+ open?: boolean | undefined;
24
+ }): {
25
+ refs: {
26
+ setReference: Function;
27
+ setFloating: Function;
28
+ reference: object;
29
+ floating: object;
30
+ };
31
+ floatingStyles: object;
32
+ placement: string;
33
+ isPositioned: boolean;
34
+ update: () => void;
35
+ };
36
+ export default useFloatingPosition;
37
+ //# sourceMappingURL=useFloatingPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloatingPosition.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingPosition.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;GAcG;AACH,sGAXG;IAA6D,SAAS;IAC7C,MAAM;IACL,IAAI;IACJ,KAAK;IACL,UAAU;IAEC,QAAQ;IACnB,IAAI;CAC9B,GAAU;IAAE,IAAI,EAAE;QAAE,YAAY,WAAW;QAAC,WAAW,WAAW;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACvG,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAuC1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusTrap.d.ts","sourceRoot":"","sources":["../../src/hooks/useFocusTrap.js"],"names":[],"mappings":"AAgDA;;;;GAIG;AACH;;;;;;SAmCC;AAjFD,wCAOY;AAEL,+CAKC"}
1
+ {"version":3,"file":"useFocusTrap.d.ts","sourceRoot":"","sources":["../../src/hooks/useFocusTrap.js"],"names":[],"mappings":"AAyDA;;;;GAIG;AACH;;;;;;SAmCC;AA3FD,wCAOY;AAEL,+CAKC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Subscribes `onChange` to a MediaQueryList's change events. Uses
3
+ * `addEventListener` where available and falls back to the deprecated
4
+ * `addListener` (Safari < 14). Returns the unsubscribe function.
5
+ */
6
+ export function subscribeMediaQuery(query: any, onChange: any): () => void;
7
+ /**
8
+ * `true` while `query` matches; follows changes live.
9
+ *
10
+ * On the server (and while hydrating) it returns `defaultValue`, so server and
11
+ * client markup agree; the real value is applied right after hydration. Without
12
+ * `window.matchMedia` it always returns `defaultValue`.
13
+ *
14
+ * @param {string} query - a CSS media query, e.g. "(max-width: 639px)".
15
+ * @param {{ defaultValue?: boolean }} [options]
16
+ * @returns {boolean}
17
+ */
18
+ export function useMediaQuery(query: string, { defaultValue }?: {
19
+ defaultValue?: boolean;
20
+ }): boolean;
21
+ export default useMediaQuery;
22
+ //# sourceMappingURL=useMediaQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useMediaQuery.js"],"names":[],"mappings":"AASA;;;;GAIG;AACH,2EAYC;AAED;;;;;;;;;;GAUG;AACH,qCAJW,MAAM,qBACN;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxB,OAAO,CAUnB"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @param {boolean} open - whether the overlay should be shown.
3
+ * @param {{ duration?: number }} [options] - transition length in ms (default
4
+ * 200). Forced to 0 when the user prefers reduced motion.
5
+ * @returns {{ mounted: boolean, state: 'entering'|'open'|'exiting'|'closed' }}
6
+ * `mounted` stays true through 'exiting' and turns false once `duration`
7
+ * has elapsed after `open` became false.
8
+ */
9
+ export function usePresence(open: boolean, { duration }?: {
10
+ duration?: number;
11
+ }): {
12
+ mounted: boolean;
13
+ state: "entering" | "open" | "exiting" | "closed";
14
+ };
15
+ export default usePresence;
16
+ //# sourceMappingURL=usePresence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePresence.d.ts","sourceRoot":"","sources":["../../src/hooks/usePresence.js"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,kCAPW,OAAO,iBACP;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAEnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,GAAC,MAAM,GAAC,SAAS,GAAC,QAAQ,CAAA;CAAE,CAgC7E"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @param {'auto'|'sheet'|'popover'} [prop='auto'] - an explicit 'sheet' or
3
+ * 'popover' passes through; 'auto' resolves from SHEET_MEDIA_QUERY.
4
+ * @returns {'sheet'|'popover'} - 'popover' on the server and while hydrating.
5
+ */
6
+ export function usePresentation(prop?: "auto" | "sheet" | "popover"): "sheet" | "popover";
7
+ export const SHEET_MEDIA_QUERY: "(pointer: coarse) and (max-width: 639px)";
8
+ export default usePresentation;
9
+ //# sourceMappingURL=usePresentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePresentation.d.ts","sourceRoot":"","sources":["../../src/hooks/usePresentation.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,uCAJW,MAAM,GAAC,OAAO,GAAC,SAAS,GAEtB,OAAO,GAAC,SAAS,CAO7B;AAZD,gCAAiC,0CAA0C,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `true` while the user asks the OS for reduced motion; follows changes live.
3
+ * `false` on the server and while hydrating, so the first render matches.
4
+ *
5
+ * @returns {boolean}
6
+ */
7
+ export function useReducedMotion(): boolean;
8
+ export const REDUCED_MOTION_QUERY: "(prefers-reduced-motion: reduce)";
9
+ export default useReducedMotion;
10
+ //# sourceMappingURL=useReducedMotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReducedMotion.d.ts","sourceRoot":"","sources":["../../src/hooks/useReducedMotion.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,oCAFa,OAAO,CAInB;AAVD,mCAAoC,kCAAkC,CAAC"}
@@ -1,2 +1,12 @@
1
- export function useScrollLock(active: any): void;
1
+ /** iPhone / iPod / iPad, including iPadOS 13+ which reports itself as a Mac. */
2
+ export function isIOS(): boolean;
3
+ /**
4
+ * @param {boolean} active - hold the lock while true.
5
+ * @param {{ fixedBody?: boolean }} [options] - force the iOS-safe
6
+ * `position: fixed` mode; defaults to auto-detecting iOS. Only the outermost
7
+ * lock's mode applies.
8
+ */
9
+ export function useScrollLock(active: boolean, { fixedBody }?: {
10
+ fixedBody?: boolean;
11
+ }): void;
2
12
  //# sourceMappingURL=useScrollLock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollLock.d.ts","sourceRoot":"","sources":["../../src/hooks/useScrollLock.js"],"names":[],"mappings":"AAOA,iDAaC"}
1
+ {"version":3,"file":"useScrollLock.d.ts","sourceRoot":"","sources":["../../src/hooks/useScrollLock.js"],"names":[],"mappings":"AAeA,gFAAgF;AAChF,iCAKC;AAsDD;;;;;GAKG;AACH,sCALW,OAAO,kBACP;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,QAcjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9B,UAAU,iBAAiB;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,eAAO,MAAM,QAAQ,QAAO,iBAM3B,CAAC;AAEF,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAsCtD,CAAC"}
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9B,UAAU,iBAAiB;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,eAAO,MAAM,QAAQ,QAAO,iBAM3B,CAAC;AAEF,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA2CtD,CAAC"}