@dreamtree-org/twreact-ui 1.3.0 → 1.3.2

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/DESIGN.md +2 -2
  2. package/README.md +258 -10
  3. package/ai-skills/dreamtree-ui.md +111 -15
  4. package/charts/package.json +5 -0
  5. package/dist/_shared/cn-DPPQUJu1.js +138 -0
  6. package/dist/ai-schema.json +1252 -179
  7. package/dist/charts/index.d.ts +9 -0
  8. package/dist/charts/index.d.ts.map +1 -0
  9. package/dist/charts/index.js +769 -0
  10. package/dist/components/charts/AreaChart.d.ts +4 -0
  11. package/dist/components/charts/AreaChart.d.ts.map +1 -0
  12. package/dist/components/charts/BarChart.d.ts +4 -0
  13. package/dist/components/charts/BarChart.d.ts.map +1 -0
  14. package/dist/components/charts/CartesianChart.d.ts +5 -0
  15. package/dist/components/charts/CartesianChart.d.ts.map +1 -0
  16. package/dist/components/charts/ChartFrame.d.ts +18 -0
  17. package/dist/components/charts/ChartFrame.d.ts.map +1 -0
  18. package/dist/components/charts/DonutChart.d.ts +4 -0
  19. package/dist/components/charts/DonutChart.d.ts.map +1 -0
  20. package/dist/components/charts/LineChart.d.ts +4 -0
  21. package/dist/components/charts/LineChart.d.ts.map +1 -0
  22. package/dist/components/charts/Sparkline.d.ts +5 -0
  23. package/dist/components/charts/Sparkline.d.ts.map +1 -0
  24. package/dist/components/charts/chartTheme.d.ts +26 -0
  25. package/dist/components/charts/chartTheme.d.ts.map +1 -0
  26. package/dist/components/core/Accordion.d.ts.map +1 -1
  27. package/dist/components/core/Button.d.ts.map +1 -1
  28. package/dist/components/core/Checkbox.d.ts.map +1 -1
  29. package/dist/components/core/ColorPicker.d.ts.map +1 -1
  30. package/dist/components/core/DatePicker.d.ts.map +1 -1
  31. package/dist/components/core/DateRangePicker.d.ts.map +1 -1
  32. package/dist/components/core/Form.d.ts.map +1 -1
  33. package/dist/components/core/Input.d.ts.map +1 -1
  34. package/dist/components/core/LocationPicker.d.ts.map +1 -1
  35. package/dist/components/core/Popover.d.ts +4 -0
  36. package/dist/components/core/Popover.d.ts.map +1 -0
  37. package/dist/components/core/PriceRangePicker.d.ts.map +1 -1
  38. package/dist/components/core/ProgressBar.d.ts.map +1 -1
  39. package/dist/components/core/Radio.d.ts.map +1 -1
  40. package/dist/components/core/Rate.d.ts.map +1 -1
  41. package/dist/components/core/Select.d.ts.map +1 -1
  42. package/dist/components/core/Skeleton.d.ts.map +1 -1
  43. package/dist/components/core/Slider.d.ts +4 -0
  44. package/dist/components/core/Slider.d.ts.map +1 -0
  45. package/dist/components/core/SpeechToText.d.ts.map +1 -1
  46. package/dist/components/core/Switch.d.ts.map +1 -1
  47. package/dist/components/core/Table/ActionMenu.d.ts.map +1 -1
  48. package/dist/components/core/Table/ColumnMenu.d.ts +2 -1
  49. package/dist/components/core/Table/ColumnMenu.d.ts.map +1 -1
  50. package/dist/components/core/Table/MobileCard.d.ts +2 -2
  51. package/dist/components/core/Table/MobileCard.d.ts.map +1 -1
  52. package/dist/components/core/Table/Table.d.ts.map +1 -1
  53. package/dist/components/core/Table/TableRow.d.ts +4 -2
  54. package/dist/components/core/Table/TableRow.d.ts.map +1 -1
  55. package/dist/components/core/Tabs.d.ts.map +1 -1
  56. package/dist/components/core/Textarea.d.ts +4 -0
  57. package/dist/components/core/Textarea.d.ts.map +1 -0
  58. package/dist/components/core/ThreeDotPopover.d.ts.map +1 -1
  59. package/dist/components/core/Tooltip.d.ts.map +1 -1
  60. package/dist/components/feedback/Dialog.d.ts.map +1 -1
  61. package/dist/components/feedback/Drawer.d.ts +4 -0
  62. package/dist/components/feedback/Drawer.d.ts.map +1 -0
  63. package/dist/components/feedback/Toast.d.ts +14 -5
  64. package/dist/components/feedback/Toast.d.ts.map +1 -1
  65. package/dist/components/feedback/Tour.d.ts +4 -0
  66. package/dist/components/feedback/Tour.d.ts.map +1 -0
  67. package/dist/components/feedback/TourSpotlight.d.ts +9 -0
  68. package/dist/components/feedback/TourSpotlight.d.ts.map +1 -0
  69. package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -1
  70. package/dist/components/navigation/FootNav.d.ts.map +1 -1
  71. package/dist/components/navigation/Navbar.d.ts.map +1 -1
  72. package/dist/components/navigation/Sidebar.d.ts +8 -2
  73. package/dist/components/navigation/Sidebar.d.ts.map +1 -1
  74. package/dist/components/rich-text/RichTextEditor.d.ts +4 -0
  75. package/dist/components/rich-text/RichTextEditor.d.ts.map +1 -0
  76. package/dist/components/rich-text/RichTextToolbar.d.ts +219 -0
  77. package/dist/components/rich-text/RichTextToolbar.d.ts.map +1 -0
  78. package/dist/components/utility/Badge.d.ts.map +1 -1
  79. package/dist/components/utility/FileUpload.d.ts.map +1 -1
  80. package/dist/components/utility/Sortable.d.ts +4 -0
  81. package/dist/components/utility/Sortable.d.ts.map +1 -0
  82. package/dist/esm/_vendor/object-assign/index.js +99 -0
  83. package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.development.js +190 -0
  84. package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.production.min.js +26 -0
  85. package/dist/esm/_vendor/prop-types/_vendor/react-is/index.js +19 -0
  86. package/dist/esm/_vendor/prop-types/checkPropTypes.js +115 -0
  87. package/dist/esm/_vendor/prop-types/factoryWithThrowingShims.js +74 -0
  88. package/dist/esm/_vendor/prop-types/factoryWithTypeCheckers.js +625 -0
  89. package/dist/esm/_vendor/prop-types/index.js +30 -0
  90. package/dist/esm/_vendor/prop-types/lib/ReactPropTypesSecret.js +21 -0
  91. package/dist/esm/_vendor/prop-types/lib/has.js +11 -0
  92. package/dist/esm/_virtual/_commonjsHelpers.js +5 -0
  93. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
  94. package/dist/esm/_virtual/index.js +3 -0
  95. package/dist/esm/_virtual/index2.js +3 -0
  96. package/dist/esm/_virtual/react-is.development.js +3 -0
  97. package/dist/esm/_virtual/react-is.production.min.js +3 -0
  98. package/dist/esm/charts/index.js +5 -0
  99. package/dist/esm/components/blocks/AppShell.js +205 -0
  100. package/dist/esm/components/blocks/ConfirmDialog.js +57 -0
  101. package/dist/esm/components/blocks/EmptyState.js +44 -0
  102. package/dist/esm/components/blocks/ErrorState.js +53 -0
  103. package/dist/esm/components/blocks/LoadingState.js +134 -0
  104. package/dist/esm/components/blocks/PageHeader.js +51 -0
  105. package/dist/esm/components/blocks/StatCard.js +79 -0
  106. package/dist/esm/components/blocks/StatusPill.js +55 -0
  107. package/dist/esm/components/charts/AreaChart.js +16 -0
  108. package/dist/esm/components/charts/BarChart.js +16 -0
  109. package/dist/esm/components/charts/CartesianChart.js +250 -0
  110. package/dist/esm/components/charts/ChartFrame.js +170 -0
  111. package/dist/esm/components/charts/DonutChart.js +119 -0
  112. package/dist/esm/components/charts/LineChart.js +16 -0
  113. package/dist/esm/components/charts/Sparkline.js +110 -0
  114. package/dist/esm/components/charts/chartTheme.js +109 -0
  115. package/dist/esm/components/core/Accordion.js +260 -0
  116. package/dist/esm/components/core/Button.js +59 -0
  117. package/dist/esm/components/core/Checkbox.js +188 -0
  118. package/dist/esm/components/core/ColorPicker.js +348 -0
  119. package/dist/esm/components/core/DatePicker.js +436 -0
  120. package/dist/esm/components/core/DateRangePicker.js +494 -0
  121. package/dist/esm/components/core/Form.js +522 -0
  122. package/dist/esm/components/core/Input.js +179 -0
  123. package/dist/esm/components/core/Loader.js +141 -0
  124. package/dist/esm/components/core/LocationPicker.js +161 -0
  125. package/dist/esm/components/core/Popover.js +171 -0
  126. package/dist/esm/components/core/PriceRangePicker.js +376 -0
  127. package/dist/esm/components/core/ProgressBar.js +152 -0
  128. package/dist/esm/components/core/Radio.js +156 -0
  129. package/dist/esm/components/core/Rate.js +197 -0
  130. package/dist/esm/components/core/RoundedTag.js +118 -0
  131. package/dist/esm/components/core/Select.js +857 -0
  132. package/dist/esm/components/core/Skeleton.js +100 -0
  133. package/dist/esm/components/core/Slider.js +134 -0
  134. package/dist/esm/components/core/SpeechToText.js +226 -0
  135. package/dist/esm/components/core/Switch.js +207 -0
  136. package/dist/esm/components/core/Table/ActionMenu.js +251 -0
  137. package/dist/esm/components/core/Table/ColumnMenu.js +55 -0
  138. package/dist/esm/components/core/Table/FieldInput.js +157 -0
  139. package/dist/esm/components/core/Table/MobileCard.js +187 -0
  140. package/dist/esm/components/core/Table/MobileFilters.js +72 -0
  141. package/dist/esm/components/core/Table/Pagination.js +157 -0
  142. package/dist/esm/components/core/Table/Table.js +1533 -0
  143. package/dist/esm/components/core/Table/TableRow.js +254 -0
  144. package/dist/esm/components/core/Table/constants.js +35 -0
  145. package/dist/esm/components/core/Table/helpers.js +124 -0
  146. package/dist/esm/components/core/Table/useClickOutside.js +26 -0
  147. package/dist/esm/components/core/Tabs.js +289 -0
  148. package/dist/esm/components/core/TextToSpeech.js +52 -0
  149. package/dist/esm/components/core/Textarea.js +125 -0
  150. package/dist/esm/components/core/ThreeDotPopover.js +160 -0
  151. package/dist/esm/components/core/Tooltip.js +372 -0
  152. package/dist/esm/components/feedback/Alert.js +96 -0
  153. package/dist/esm/components/feedback/Dialog.js +200 -0
  154. package/dist/esm/components/feedback/Drawer.js +171 -0
  155. package/dist/esm/components/feedback/Toast.js +362 -0
  156. package/dist/esm/components/feedback/Tour.js +214 -0
  157. package/dist/esm/components/feedback/TourSpotlight.js +71 -0
  158. package/dist/esm/components/navigation/Breadcrumbs.js +75 -0
  159. package/dist/esm/components/navigation/Dropdown.js +53 -0
  160. package/dist/esm/components/navigation/FootNav.js +51 -0
  161. package/dist/esm/components/navigation/Navbar.js +437 -0
  162. package/dist/esm/components/navigation/Sidebar.js +567 -0
  163. package/dist/esm/components/rich-text/RichTextEditor.js +244 -0
  164. package/dist/esm/components/rich-text/RichTextToolbar.js +397 -0
  165. package/dist/esm/components/utility/Avatar.js +89 -0
  166. package/dist/esm/components/utility/Badge.js +47 -0
  167. package/dist/esm/components/utility/Card.js +85 -0
  168. package/dist/esm/components/utility/Carousel.js +97 -0
  169. package/dist/esm/components/utility/Condition.js +9 -0
  170. package/dist/esm/components/utility/FileUpload.js +177 -0
  171. package/dist/esm/components/utility/Pagination.js +111 -0
  172. package/dist/esm/components/utility/Sortable.js +190 -0
  173. package/dist/esm/components/utility/Stepper.js +101 -0
  174. package/dist/esm/hooks/useApi.js +169 -0
  175. package/dist/esm/hooks/useControllableState.js +32 -0
  176. package/dist/esm/hooks/useFocusTrap.js +85 -0
  177. package/dist/esm/hooks/useLatestRef.js +20 -0
  178. package/dist/esm/hooks/useMixins.js +100 -0
  179. package/dist/esm/hooks/useScrollLock.js +26 -0
  180. package/dist/esm/hooks/useSliderValues.js +135 -0
  181. package/dist/esm/hooks/useSortable.js +188 -0
  182. package/dist/esm/hooks/useTheme.js +53 -0
  183. package/dist/esm/hooks/useTourTarget.js +92 -0
  184. package/dist/esm/index.js +65 -0
  185. package/dist/esm/rich-text/index.js +1 -0
  186. package/dist/esm/store/index.js +26 -0
  187. package/dist/esm/store/store.js +107 -0
  188. package/dist/esm/store/storeSlice.js +45 -0
  189. package/dist/esm/utils/cn.js +11 -0
  190. package/dist/esm/utils/emitter.js +169 -0
  191. package/dist/esm/utils/helpers.js +161 -0
  192. package/dist/esm/utils/position.js +134 -0
  193. package/dist/hooks/useApi.d.ts +2 -1
  194. package/dist/hooks/useApi.d.ts.map +1 -1
  195. package/dist/hooks/useControllableState.d.ts +11 -0
  196. package/dist/hooks/useControllableState.d.ts.map +1 -0
  197. package/dist/hooks/useFocusTrap.d.ts +15 -0
  198. package/dist/hooks/useFocusTrap.d.ts.map +1 -0
  199. package/dist/hooks/useLatestRef.d.ts +8 -0
  200. package/dist/hooks/useLatestRef.d.ts.map +1 -0
  201. package/dist/hooks/useMixins.d.ts.map +1 -1
  202. package/dist/hooks/useScrollLock.d.ts +2 -0
  203. package/dist/hooks/useScrollLock.d.ts.map +1 -0
  204. package/dist/hooks/useSliderValues.d.ts +43 -0
  205. package/dist/hooks/useSliderValues.d.ts.map +1 -0
  206. package/dist/hooks/useSortable.d.ts +32 -0
  207. package/dist/hooks/useSortable.d.ts.map +1 -0
  208. package/dist/hooks/useTheme.d.ts.map +1 -1
  209. package/dist/hooks/useTourTarget.d.ts +15 -0
  210. package/dist/hooks/useTourTarget.d.ts.map +1 -0
  211. package/dist/index.css +1 -1
  212. package/dist/index.d.ts +8 -2
  213. package/dist/index.esm.css +1 -1
  214. package/dist/index.esm.js +4817 -2216
  215. package/dist/index.js +4822 -2214
  216. package/dist/rich-text/index.d.ts +5 -0
  217. package/dist/rich-text/index.d.ts.map +1 -0
  218. package/dist/rich-text/index.js +654 -0
  219. package/dist/tokens/brands/studio.css +14 -0
  220. package/dist/tokens/brands/studio.json +20 -0
  221. package/dist/types/charts.d.ts +97 -0
  222. package/dist/types/charts.d.ts.map +1 -0
  223. package/dist/types/index.d.ts +193 -5
  224. package/dist/types/index.d.ts.map +1 -1
  225. package/dist/types/rich-text.d.ts +50 -0
  226. package/dist/types/rich-text.d.ts.map +1 -0
  227. package/dist/utils/position.d.ts +30 -0
  228. package/dist/utils/position.d.ts.map +1 -0
  229. package/doc/README.md +20 -1
  230. package/mcp/catalog.snapshot.json +2505 -800
  231. package/mcp/server-core.mjs +30 -1
  232. package/package.json +51 -3
  233. package/rich-text/package.json +5 -0
  234. package/tokens/brands/studio.json +20 -0
@@ -0,0 +1,100 @@
1
+ 'use client';
2
+ import { slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { useState } from 'react';
4
+ import { useDispatch, useSelector } from 'react-redux';
5
+ import { Emitter } from '../utils/emitter.js';
6
+ import { promiseMap, storeInstance } from '../store/storeSlice.js';
7
+ import helperInstance, { TrackingPromise } from '../utils/helpers.js';
8
+
9
+ var setNested = helperInstance.setNested,
10
+ dotWalk = helperInstance.dotWalk;
11
+ var inMemoryMap = new Proxy({}, {
12
+ get: function get(target, name) {
13
+ return target[name];
14
+ },
15
+ set: function set(target, name, value) {
16
+ target[name] = value;
17
+ return true;
18
+ }
19
+ });
20
+ var useMixins = function useMixins(name) {
21
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
22
+ var _options$emitterName = options.emitterName,
23
+ emitterName = _options$emitterName === void 0 ? "default" : _options$emitterName;
24
+ var emitterInstance = Emitter.getInstance(emitterName);
25
+ var dispatch = useDispatch();
26
+ var mixins = {};
27
+ var _useState = useState({
28
+ componentName: name,
29
+ inMemoryMap: inMemoryMap
30
+ }),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ mixinsState = _useState2[0],
33
+ setMixinsState = _useState2[1];
34
+ var setInMemory = function setInMemory(name, value) {
35
+ var newState = setNested(mixinsState.inMemoryMap, name, value);
36
+ setMixinsState(function (prev) {
37
+ return _objectSpread2(_objectSpread2({}, prev), {}, {
38
+ inMemoryMap: newState
39
+ });
40
+ });
41
+ return mixinsState.inMemoryMap;
42
+ };
43
+ var getInMemory = function getInMemory(name) {
44
+ return dotWalk(name, {
45
+ state: mixinsState.inMemoryMap
46
+ });
47
+ };
48
+ var setStore = function setStore(name, value) {
49
+ var timestamp = Date.now();
50
+ var uniqueId = timestamp;
51
+ // Create promise - the TrackingPromise has resolve/reject methods we can call
52
+ var promise = new TrackingPromise(function () {
53
+ // Callback is called but we don't need to store resolve/reject here
54
+ // We'll use promise.resolve() and promise.reject() methods directly
55
+ });
56
+ // Store promise in module-level map (not in action payload)
57
+ promiseMap.set(uniqueId, promise);
58
+ // Create a completely clean, serializable payload object
59
+ // Only include primitive/serializable values - no promises, no functions
60
+ var cleanPayload = {
61
+ name: name,
62
+ value: value,
63
+ uniqueId: uniqueId
64
+ };
65
+ // Dispatch using action creator if available, otherwise use action type directly
66
+ // This handles the case where the store hasn't been initialized yet
67
+ if (storeInstance.actions && 'setStore' in storeInstance.actions) {
68
+ dispatch(storeInstance.actions.setStore(cleanPayload));
69
+ } else {
70
+ // Fallback: create action manually using the action type
71
+ dispatch({
72
+ type: 'store/setStore',
73
+ payload: cleanPayload
74
+ });
75
+ }
76
+ return promise;
77
+ };
78
+ // getStore subscribes via useSelector, so it is a hook in disguise: call it
79
+ // unconditionally at the top level of a component, like any other hook.
80
+ // Renaming it would break the public API, hence the targeted disable.
81
+ var getStore = function getStore(name) {
82
+ // eslint-disable-next-line react-hooks/rules-of-hooks
83
+ return useSelector(function (state) {
84
+ return dotWalk(name, {
85
+ state: state.storeSlice
86
+ });
87
+ });
88
+ };
89
+ return _objectSpread2(_objectSpread2({}, mixins), {}, {
90
+ emitter: emitterInstance,
91
+ mixinsState: mixinsState,
92
+ setStore: setStore,
93
+ getStore: getStore,
94
+ setInMemory: setInMemory,
95
+ getInMemory: getInMemory,
96
+ setMixinsState: setMixinsState
97
+ });
98
+ };
99
+
100
+ export { useMixins };
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+
4
+ // Internal (not exported). Locks body scroll while any overlay is open. A
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.
7
+ var lock = {
8
+ count: 0,
9
+ previous: ""
10
+ };
11
+ function useScrollLock(active) {
12
+ useEffect(function () {
13
+ 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
+ }
18
+ lock.count += 1;
19
+ return function () {
20
+ lock.count -= 1;
21
+ if (lock.count === 0) document.body.style.overflow = lock.previous;
22
+ };
23
+ }, [active]);
24
+ }
25
+
26
+ export { useScrollLock };
@@ -0,0 +1,135 @@
1
+ 'use client';
2
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { useCallback, useRef } from 'react';
4
+ import { useControllableState } from './useControllableState.js';
5
+ import { useLatestRef } from './useLatestRef.js';
6
+
7
+ // Internal (not exported). Value math + pointer handling for Slider.
8
+ var decimals = function decimals(step) {
9
+ return (String(step).split(".")[1] || "").length;
10
+ };
11
+ function snap(raw, _ref) {
12
+ var min = _ref.min,
13
+ max = _ref.max,
14
+ step = _ref.step;
15
+ var stepped = Math.round((raw - min) / step) * step + min;
16
+ return Math.min(max, Math.max(min, Number(stepped.toFixed(decimals(step)))));
17
+ }
18
+ var toPercent = function toPercent(v, min, max) {
19
+ return max === min ? 0 : (v - min) / (max - min) * 100;
20
+ };
21
+ /** New value for a keyboard press, or `null` when the key is not a slider key. */
22
+ function keyToValue(key, current, _ref2) {
23
+ var min = _ref2.min,
24
+ max = _ref2.max,
25
+ step = _ref2.step,
26
+ largeStep = _ref2.largeStep;
27
+ switch (key) {
28
+ case "ArrowRight":
29
+ case "ArrowUp":
30
+ return current + step;
31
+ case "ArrowLeft":
32
+ case "ArrowDown":
33
+ return current - step;
34
+ case "PageUp":
35
+ return current + largeStep;
36
+ case "PageDown":
37
+ return current - largeStep;
38
+ case "Home":
39
+ return min;
40
+ case "End":
41
+ return max;
42
+ default:
43
+ return null;
44
+ }
45
+ }
46
+ /**
47
+ * Normalises single vs range values to an array, and exposes
48
+ * `setThumb(index, raw)` which snaps, keeps range thumbs from crossing, and
49
+ * emits a number (single) or `[low, high]` (range).
50
+ */
51
+ function useSliderValues(_ref3) {
52
+ var value = _ref3.value,
53
+ defaultValue = _ref3.defaultValue,
54
+ onChange = _ref3.onChange,
55
+ onChangeEnd = _ref3.onChangeEnd,
56
+ bounds = _ref3.bounds;
57
+ var _useControllableState = useControllableState({
58
+ value: value,
59
+ defaultValue: defaultValue,
60
+ onChange: onChange
61
+ }),
62
+ _useControllableState2 = _slicedToArray(_useControllableState, 2),
63
+ current = _useControllableState2[0],
64
+ setCurrent = _useControllableState2[1];
65
+ var isRange = Array.isArray(current);
66
+ var values = isRange ? current : [current !== null && current !== void 0 ? current : bounds.min];
67
+ var latest = useLatestRef({
68
+ values: values,
69
+ isRange: isRange,
70
+ onChangeEnd: onChangeEnd
71
+ });
72
+ var setThumb = useCallback(function (index, raw) {
73
+ var commit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
74
+ var _latest$current = latest.current,
75
+ vals = _latest$current.values,
76
+ range = _latest$current.isRange,
77
+ end = _latest$current.onChangeEnd;
78
+ var next = snap(raw, bounds);
79
+ if (range && index === 0) next = Math.min(next, vals[1]);
80
+ if (range && index === 1) next = Math.max(next, vals[0]);
81
+ var updated = vals.map(function (v, i) {
82
+ return i === index ? next : v;
83
+ });
84
+ var out = range ? updated : updated[0];
85
+ if (updated[index] !== vals[index]) setCurrent(out);
86
+ if (commit) end === null || end === void 0 || end(out);
87
+ }, [bounds, latest, setCurrent]);
88
+ return {
89
+ values: values,
90
+ isRange: isRange,
91
+ setThumb: setThumb
92
+ };
93
+ }
94
+ /** Pointer drag on the track: picks the nearest thumb and follows the pointer. */
95
+ function useSliderPointer(_ref4) {
96
+ var trackRef = _ref4.trackRef,
97
+ values = _ref4.values,
98
+ setThumb = _ref4.setThumb,
99
+ bounds = _ref4.bounds,
100
+ disabled = _ref4.disabled;
101
+ var active = useRef(null);
102
+ var toValue = function toValue(clientX) {
103
+ var rect = trackRef.current.getBoundingClientRect();
104
+ var ratio = rect.width ? (clientX - rect.left) / rect.width : 0;
105
+ return bounds.min + Math.min(1, Math.max(0, ratio)) * (bounds.max - bounds.min);
106
+ };
107
+ var onPointerDown = function onPointerDown(e) {
108
+ var _e$currentTarget$setP, _e$currentTarget, _e$currentTarget$quer;
109
+ if (disabled || e.button > 0) return;
110
+ var raw = toValue(e.clientX);
111
+ var nearest = values.reduce(function (best, v, i) {
112
+ return Math.abs(v - raw) < Math.abs(values[best] - raw) || v === values[best] && raw > v ? i : best;
113
+ }, 0);
114
+ active.current = nearest;
115
+ (_e$currentTarget$setP = (_e$currentTarget = e.currentTarget).setPointerCapture) === null || _e$currentTarget$setP === void 0 || _e$currentTarget$setP.call(_e$currentTarget, e.pointerId);
116
+ setThumb(nearest, raw);
117
+ (_e$currentTarget$quer = e.currentTarget.querySelectorAll('[role="slider"]')[nearest]) === null || _e$currentTarget$quer === void 0 || _e$currentTarget$quer.focus();
118
+ };
119
+ var onPointerMove = function onPointerMove(e) {
120
+ if (active.current !== null) setThumb(active.current, toValue(e.clientX));
121
+ };
122
+ var onPointerUp = function onPointerUp(e) {
123
+ if (active.current === null) return;
124
+ setThumb(active.current, toValue(e.clientX), true);
125
+ active.current = null;
126
+ };
127
+ return {
128
+ onPointerDown: onPointerDown,
129
+ onPointerMove: onPointerMove,
130
+ onPointerUp: onPointerUp,
131
+ onPointerCancel: onPointerUp
132
+ };
133
+ }
134
+
135
+ export { keyToValue, snap, toPercent, useSliderPointer, useSliderValues };
@@ -0,0 +1,188 @@
1
+ 'use client';
2
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { useState, useRef, useCallback, useEffect } from 'react';
4
+ import { useLatestRef } from './useLatestRef.js';
5
+
6
+ // Internal (not exported). Keyboard + pointer reordering for Sortable. Both
7
+ // work on a draft list of keys while the user is moving an item and only call
8
+ // `commit(fromIndex, toIndex)` when the item is dropped.
9
+ function moveKey(keys, key, toIndex) {
10
+ var next = keys.filter(function (k) {
11
+ return k !== key;
12
+ });
13
+ next.splice(Math.max(0, Math.min(toIndex, next.length)), 0, key);
14
+ return next;
15
+ }
16
+ var DEFAULT_SORTABLE_MESSAGES = {
17
+ instructions: "Press Space or Enter to pick up an item. Use the arrow keys to move it, Space or Enter to drop it, Escape to cancel.",
18
+ grabbed: function grabbed(label, position, total) {
19
+ return "Picked up ".concat(label, ". Position ").concat(position, " of ").concat(total, ".");
20
+ },
21
+ moved: function moved(label, position, total) {
22
+ return "".concat(label, " moved to position ").concat(position, " of ").concat(total, ".");
23
+ },
24
+ dropped: function dropped(label, position, total) {
25
+ return "".concat(label, " dropped at position ").concat(position, " of ").concat(total, ".");
26
+ },
27
+ cancelled: function cancelled(label, position) {
28
+ return "Reorder cancelled. ".concat(label, " returned to position ").concat(position, ".");
29
+ }
30
+ };
31
+ var PREV_KEYS = {
32
+ vertical: ["ArrowUp"],
33
+ horizontal: ["ArrowLeft"]
34
+ };
35
+ var NEXT_KEYS = {
36
+ vertical: ["ArrowDown"],
37
+ horizontal: ["ArrowRight"]
38
+ };
39
+ function useSortableKeyboard(_ref) {
40
+ var keys = _ref.keys,
41
+ setDraft = _ref.setDraft,
42
+ commit = _ref.commit,
43
+ announce = _ref.announce,
44
+ labelFor = _ref.labelFor,
45
+ orientation = _ref.orientation;
46
+ var _useState = useState(null),
47
+ _useState2 = _slicedToArray(_useState, 2),
48
+ grabbed = _useState2[0],
49
+ setGrabbed = _useState2[1];
50
+ var origin = useRef(-1);
51
+ var total = keys.length;
52
+ var keyDownFor = function keyDownFor(key) {
53
+ return function (e) {
54
+ if (e.target !== e.currentTarget || grabbed !== null && grabbed !== key) return;
55
+ var index = keys.indexOf(key);
56
+ if (e.key === " " || e.key === "Enter") {
57
+ e.preventDefault();
58
+ if (grabbed === null) {
59
+ origin.current = index;
60
+ setGrabbed(key);
61
+ setDraft(keys);
62
+ announce("grabbed", labelFor(key), index + 1, total);
63
+ } else {
64
+ setGrabbed(null);
65
+ commit(origin.current, index);
66
+ announce("dropped", labelFor(key), index + 1, total);
67
+ }
68
+ } else if (grabbed === key && e.key === "Escape") {
69
+ e.preventDefault();
70
+ setGrabbed(null);
71
+ setDraft(null);
72
+ announce("cancelled", labelFor(key), origin.current + 1, total);
73
+ } else if (grabbed === key) {
74
+ var delta = PREV_KEYS[orientation].includes(e.key) ? -1 : NEXT_KEYS[orientation].includes(e.key) ? 1 : 0;
75
+ if (!delta) return;
76
+ e.preventDefault();
77
+ var to = Math.max(0, Math.min(total - 1, index + delta));
78
+ if (to === index) return;
79
+ setDraft(moveKey(keys, key, to));
80
+ announce("moved", labelFor(key), to + 1, total);
81
+ }
82
+ };
83
+ };
84
+ var cancel = useCallback(function () {
85
+ setGrabbed(null);
86
+ setDraft(null);
87
+ }, [setDraft]);
88
+ return {
89
+ grabbed: grabbed,
90
+ keyDownFor: keyDownFor,
91
+ cancel: cancel
92
+ };
93
+ }
94
+ var DRAG_THRESHOLD = 4;
95
+ function useSortablePointer(_ref2) {
96
+ var keys = _ref2.keys,
97
+ setDraft = _ref2.setDraft,
98
+ commit = _ref2.commit,
99
+ nodeFor = _ref2.nodeFor,
100
+ orientation = _ref2.orientation,
101
+ disabled = _ref2.disabled;
102
+ var _useState3 = useState(null),
103
+ _useState4 = _slicedToArray(_useState3, 2),
104
+ dragging = _useState4[0],
105
+ setDragging = _useState4[1];
106
+ var session = useRef(null);
107
+ var latest = useLatestRef({
108
+ keys: keys,
109
+ commit: commit,
110
+ nodeFor: nodeFor,
111
+ orientation: orientation
112
+ });
113
+ var end = useCallback(function () {
114
+ var _session$current;
115
+ (_session$current = session.current) === null || _session$current === void 0 || _session$current.detach();
116
+ session.current = null;
117
+ }, []);
118
+ useEffect(function () {
119
+ return end;
120
+ }, [end]);
121
+ var targetIndex = function targetIndex(point, key) {
122
+ var _latest$current = latest.current,
123
+ order = _latest$current.keys,
124
+ node = _latest$current.nodeFor,
125
+ axis = _latest$current.orientation;
126
+ var others = order.filter(function (k) {
127
+ return k !== key;
128
+ });
129
+ var index = others.findIndex(function (k) {
130
+ var _node;
131
+ var rect = (_node = node(k)) === null || _node === void 0 ? void 0 : _node.getBoundingClientRect();
132
+ if (!rect) return false;
133
+ return axis === "horizontal" ? point.x < rect.left + rect.width / 2 : point.y < rect.top + rect.height / 2;
134
+ });
135
+ return index === -1 ? others.length : index;
136
+ };
137
+ var startFor = function startFor(key) {
138
+ return function (e) {
139
+ if (disabled || e.button > 0) return;
140
+ var start = {
141
+ x: e.clientX,
142
+ y: e.clientY
143
+ };
144
+ var from = latest.current.keys.indexOf(key);
145
+ var active = false;
146
+ var onMove = function onMove(ev) {
147
+ var point = {
148
+ x: ev.clientX,
149
+ y: ev.clientY
150
+ };
151
+ if (!active && Math.hypot(point.x - start.x, point.y - start.y) < DRAG_THRESHOLD) return;
152
+ if (!active) {
153
+ active = true;
154
+ setDragging(key);
155
+ }
156
+ setDraft(moveKey(latest.current.keys, key, targetIndex(point, key)));
157
+ };
158
+ var onUp = function onUp() {
159
+ end();
160
+ if (!active) return;
161
+ setDragging(null);
162
+ latest.current.commit(from, latest.current.keys.indexOf(key));
163
+ };
164
+ var onCancel = function onCancel() {
165
+ end();
166
+ setDragging(null);
167
+ setDraft(null);
168
+ };
169
+ end();
170
+ window.addEventListener("pointermove", onMove);
171
+ window.addEventListener("pointerup", onUp);
172
+ window.addEventListener("pointercancel", onCancel);
173
+ session.current = {
174
+ detach: function detach() {
175
+ window.removeEventListener("pointermove", onMove);
176
+ window.removeEventListener("pointerup", onUp);
177
+ window.removeEventListener("pointercancel", onCancel);
178
+ }
179
+ };
180
+ };
181
+ };
182
+ return {
183
+ dragging: dragging,
184
+ startFor: startFor
185
+ };
186
+ }
187
+
188
+ export { DEFAULT_SORTABLE_MESSAGES, moveKey, useSortableKeyboard, useSortablePointer };
@@ -0,0 +1,53 @@
1
+ 'use client';
2
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsx } from 'react/jsx-runtime';
4
+ import { useState, useEffect, useContext, createContext } from 'react';
5
+
6
+ var ThemeContext = /*#__PURE__*/createContext(undefined);
7
+ var useTheme = function useTheme() {
8
+ var context = useContext(ThemeContext);
9
+ if (!context) {
10
+ throw new Error('useTheme must be used within a ThemeProvider');
11
+ }
12
+ return context;
13
+ };
14
+ var ThemeProvider = function ThemeProvider(_ref) {
15
+ var children = _ref.children,
16
+ _ref$defaultTheme = _ref.defaultTheme,
17
+ defaultTheme = _ref$defaultTheme === void 0 ? 'light' : _ref$defaultTheme;
18
+ var _useState = useState(defaultTheme),
19
+ _useState2 = _slicedToArray(_useState, 2),
20
+ theme = _useState2[0],
21
+ setTheme = _useState2[1];
22
+ useEffect(function () {
23
+ var savedTheme = localStorage.getItem('dreamtree-theme');
24
+ if (savedTheme && (savedTheme === 'light' || savedTheme === 'dark')) {
25
+ // Read persisted theme after mount (not in a lazy initializer) so SSR
26
+ // markup and the first client render agree; a one-off sync is intended.
27
+ // eslint-disable-next-line react-hooks/set-state-in-effect
28
+ setTheme(savedTheme);
29
+ }
30
+ }, []);
31
+ useEffect(function () {
32
+ localStorage.setItem('dreamtree-theme', theme);
33
+ document.documentElement.setAttribute('data-theme', theme);
34
+ }, [theme]);
35
+ var toggleTheme = function toggleTheme() {
36
+ setTheme(function (prev) {
37
+ return prev === 'light' ? 'dark' : 'light';
38
+ });
39
+ };
40
+ var value = {
41
+ theme: theme,
42
+ setTheme: setTheme,
43
+ toggleTheme: toggleTheme,
44
+ isDark: theme === 'dark',
45
+ isLight: theme === 'light'
46
+ };
47
+ return jsx(ThemeContext.Provider, {
48
+ value: value,
49
+ children: children
50
+ });
51
+ };
52
+
53
+ export { ThemeProvider, useTheme };
@@ -0,0 +1,92 @@
1
+ 'use client';
2
+ import { slicedToArray as _slicedToArray, typeof as _typeof } from '../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { useState, useEffect } from 'react';
4
+ import { revealElement } from '../utils/position.js';
5
+ import { useLatestRef } from './useLatestRef.js';
6
+
7
+ // Internal (not exported). Finds a Tour step's target, scrolls it into view
8
+ // and follows its box on scroll/resize. A target that never shows up within
9
+ // `timeout` (still loading, hidden on this screen size) resolves to
10
+ // `rect: null`, so the step degrades to a centred card instead of stalling.
11
+ var POLL_MS = 100;
12
+ function resolveTarget(target) {
13
+ if (!target || typeof document === "undefined") return null;
14
+ if (typeof target === "string") {
15
+ try {
16
+ return document.querySelector(target);
17
+ } catch (_unused) {
18
+ return null;
19
+ }
20
+ }
21
+ if (typeof target === "function") return target() || null;
22
+ if (_typeof(target) === "object" && "current" in target) return target.current || null;
23
+ return target.nodeType === 1 ? target : null;
24
+ }
25
+ var hasBox = function hasBox(el) {
26
+ var r = el.getBoundingClientRect();
27
+ return r.width > 0 || r.height > 0;
28
+ };
29
+ function useTourTarget(_ref) {
30
+ var active = _ref.active,
31
+ stepKey = _ref.stepKey,
32
+ target = _ref.target,
33
+ timeout = _ref.timeout;
34
+ var _useState = useState({
35
+ key: null,
36
+ rect: null,
37
+ ready: false
38
+ }),
39
+ _useState2 = _slicedToArray(_useState, 2),
40
+ state = _useState2[0],
41
+ setState = _useState2[1];
42
+ // Steps are often declared inline, so a function/ref target changes identity
43
+ // every render; read it through a ref and re-locate only when the step does.
44
+ var targetRef = useLatestRef(target);
45
+ useEffect(function () {
46
+ if (!active) return undefined;
47
+ var cancelled = false;
48
+ var timer = null;
49
+ var detach = null;
50
+ var startedAt = Date.now();
51
+ var settle = function settle(rect) {
52
+ return !cancelled && setState({
53
+ key: stepKey,
54
+ rect: rect,
55
+ ready: true
56
+ });
57
+ };
58
+ var _locate = function locate() {
59
+ if (cancelled) return;
60
+ var wanted = targetRef.current;
61
+ var el = wanted ? resolveTarget(wanted) : null;
62
+ if (!el || !hasBox(el)) {
63
+ if (!wanted || Date.now() - startedAt >= timeout) settle(null);else timer = setTimeout(_locate, POLL_MS);
64
+ return;
65
+ }
66
+ revealElement(el);
67
+ var update = function update() {
68
+ return settle(el.getBoundingClientRect());
69
+ };
70
+ update();
71
+ window.addEventListener("resize", update);
72
+ window.addEventListener("scroll", update, true);
73
+ detach = function detach() {
74
+ window.removeEventListener("resize", update);
75
+ window.removeEventListener("scroll", update, true);
76
+ };
77
+ };
78
+ timer = setTimeout(_locate, 0);
79
+ return function () {
80
+ var _detach;
81
+ cancelled = true;
82
+ clearTimeout(timer);
83
+ (_detach = detach) === null || _detach === void 0 || _detach();
84
+ };
85
+ }, [active, stepKey, targetRef, timeout]);
86
+ return state.key === stepKey ? state : {
87
+ rect: null,
88
+ ready: false
89
+ };
90
+ }
91
+
92
+ export { resolveTarget, useTourTarget };
@@ -0,0 +1,65 @@
1
+ export { default as Input } from './components/core/Input.js';
2
+ export { default as Button } from './components/core/Button.js';
3
+ export { default as Select } from './components/core/Select.js';
4
+ export { default as Table } from './components/core/Table/Table.js';
5
+ import 'react/jsx-runtime';
6
+ import 'react';
7
+ import 'react-dom';
8
+ export { cn } from './utils/cn.js';
9
+ import 'lucide-react';
10
+ import './components/core/Table/constants.js';
11
+ export { default as Form } from './components/core/Form.js';
12
+ export { default as Accordion } from './components/core/Accordion.js';
13
+ export { default as Checkbox } from './components/core/Checkbox.js';
14
+ export { default as ColorPicker } from './components/core/ColorPicker.js';
15
+ export { default as DateRangePicker } from './components/core/DateRangePicker.js';
16
+ export { default as Loader } from './components/core/Loader.js';
17
+ export { default as PriceRangePicker } from './components/core/PriceRangePicker.js';
18
+ export { default as ProgressBar } from './components/core/ProgressBar.js';
19
+ export { default as Radio } from './components/core/Radio.js';
20
+ export { default as Rate } from './components/core/Rate.js';
21
+ export { default as RoundedTag } from './components/core/RoundedTag.js';
22
+ export { default as Skeleton } from './components/core/Skeleton.js';
23
+ export { default as Switch } from './components/core/Switch.js';
24
+ export { default as Tabs } from './components/core/Tabs.js';
25
+ export { default as ThreeDotPopover } from './components/core/ThreeDotPopover.js';
26
+ export { default as Tooltip } from './components/core/Tooltip.js';
27
+ export { default as DatePicker } from './components/core/DatePicker.js';
28
+ export { default as LocationPicker } from './components/core/LocationPicker.js';
29
+ export { default as SpeechToText } from './components/core/SpeechToText.js';
30
+ export { default as TextToSpeech } from './components/core/TextToSpeech.js';
31
+ export { default as Textarea } from './components/core/Textarea.js';
32
+ export { default as Slider } from './components/core/Slider.js';
33
+ export { default as Popover } from './components/core/Popover.js';
34
+ export { default as Sidebar } from './components/navigation/Sidebar.js';
35
+ export { Navbar } from './components/navigation/Navbar.js';
36
+ export { default as FootNav } from './components/navigation/FootNav.js';
37
+ export { default as Breadcrumbs } from './components/navigation/Breadcrumbs.js';
38
+ export { default as Dialog } from './components/feedback/Dialog.js';
39
+ export { Toast, ToastContainer, ToastProvider, useToast } from './components/feedback/Toast.js';
40
+ export { default as Alert } from './components/feedback/Alert.js';
41
+ export { default as Drawer } from './components/feedback/Drawer.js';
42
+ export { default as Tour } from './components/feedback/Tour.js';
43
+ export { default as Badge } from './components/utility/Badge.js';
44
+ export { default as Avatar } from './components/utility/Avatar.js';
45
+ export { default as Card } from './components/utility/Card.js';
46
+ export { default as Pagination } from './components/utility/Pagination.js';
47
+ export { default as Stepper } from './components/utility/Stepper.js';
48
+ export { default as FileUpload } from './components/utility/FileUpload.js';
49
+ export { Condition } from './components/utility/Condition.js';
50
+ export { Carousel } from './components/utility/Carousel.js';
51
+ export { default as Sortable } from './components/utility/Sortable.js';
52
+ export { default as AppShell } from './components/blocks/AppShell.js';
53
+ export { default as PageHeader } from './components/blocks/PageHeader.js';
54
+ export { default as StatCard } from './components/blocks/StatCard.js';
55
+ export { default as StatusPill } from './components/blocks/StatusPill.js';
56
+ export { default as EmptyState } from './components/blocks/EmptyState.js';
57
+ export { default as ErrorState } from './components/blocks/ErrorState.js';
58
+ export { default as LoadingState } from './components/blocks/LoadingState.js';
59
+ export { default as ConfirmDialog } from './components/blocks/ConfirmDialog.js';
60
+ export { ThemeProvider, useTheme } from './hooks/useTheme.js';
61
+ export { useMixins } from './hooks/useMixins.js';
62
+ export { useApi } from './hooks/useApi.js';
63
+ export { StoreProvider } from './store/index.js';
64
+ export { Helpers } from './utils/helpers.js';
65
+ export { EmitterClass as Emitter } from './utils/emitter.js';
@@ -0,0 +1 @@
1
+ export { default as RichTextEditor } from '../components/rich-text/RichTextEditor.js';