@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,26 @@
1
+ 'use client';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { Provider } from 'react-redux';
4
+ import { PersistGate } from 'redux-persist/integration/react';
5
+ import setupStore from './store.js';
6
+
7
+ var StoreProvider = function StoreProvider(_ref) {
8
+ var children = _ref.children,
9
+ _ref$loading = _ref.loading,
10
+ loading = _ref$loading === void 0 ? null : _ref$loading,
11
+ _ref$initialState = _ref.initialState,
12
+ initialState = _ref$initialState === void 0 ? {} : _ref$initialState;
13
+ var _setupStore = setupStore(initialState),
14
+ store = _setupStore.store,
15
+ persistor = _setupStore.persistor;
16
+ return jsx(Provider, {
17
+ store: store,
18
+ children: jsx(PersistGate, {
19
+ loading: loading,
20
+ persistor: persistor,
21
+ children: children
22
+ })
23
+ });
24
+ };
25
+
26
+ export { StoreProvider };
@@ -0,0 +1,107 @@
1
+ import { asyncToGenerator as _asyncToGenerator, regenerator as _regenerator } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { createListenerMiddleware, combineReducers, configureStore, isAnyOf } from '@reduxjs/toolkit';
3
+ import { EmitterClass } from '../utils/emitter.js';
4
+ import { createMigrate, persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER, persistStore } from 'redux-persist';
5
+ import storage from 'redux-persist/lib/storage';
6
+ import getStore, { promiseMap } from './storeSlice.js';
7
+
8
+ var listenerMiddleware = createListenerMiddleware();
9
+ // Persist config
10
+ var PERSIST_VERSION = 1;
11
+ var persistConfig = {
12
+ key: "root",
13
+ version: PERSIST_VERSION,
14
+ storage: storage,
15
+ whitelist: ["storeSlice"],
16
+ // only persist these reducers
17
+ migrate: createMigrate({
18
+ // Example migration for future schema changes
19
+ 1: function _(state) {
20
+ return state;
21
+ } // current
22
+ }, {
23
+ debug: false
24
+ })
25
+ };
26
+ function setupStore() {
27
+ var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
28
+ var emitter = EmitterClass.getInstance();
29
+ var context = {
30
+ emitter: emitter,
31
+ changes: []
32
+ };
33
+ var storeData = getStore(initialState, context);
34
+ var storeSlice = storeData.reducer;
35
+ var actions = storeData.actions;
36
+ var rootReducer = combineReducers({
37
+ storeSlice: storeSlice
38
+ });
39
+ var persistedReducer = persistReducer(persistConfig, rootReducer);
40
+ var store = configureStore({
41
+ reducer: persistedReducer,
42
+ middleware: function middleware(getDefault) {
43
+ return getDefault({
44
+ serializableCheck: {
45
+ // Ignore redux-persist action types and setStore action
46
+ ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER, 'store/setStore']
47
+ }
48
+ }).concat(listenerMiddleware.middleware);
49
+ },
50
+ devTools: process.env.NODE_ENV !== "production"
51
+ });
52
+ var persistor = persistStore(store);
53
+ listenerMiddleware.startListening({
54
+ matcher: isAnyOf(actions.setStore),
55
+ effect: function () {
56
+ var _effect = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(action, _api) {
57
+ var changeEvent, uniqueId, value, promise;
58
+ return _regenerator().w(function (_context) {
59
+ while (1) switch (_context.n) {
60
+ case 0:
61
+ try {
62
+ // Get state for future use if needed
63
+ // const state = _api.getState();
64
+ changeEvent = action.payload; // do things after state is reduced
65
+ uniqueId = changeEvent.uniqueId, value = changeEvent.value; // Resolve promise from module-level map if it exists
66
+ if (promiseMap && promiseMap.has(uniqueId)) {
67
+ promise = promiseMap.get(uniqueId);
68
+ if (promise && typeof promise.resolve === 'function') {
69
+ promise.resolve(value);
70
+ }
71
+ // Clean up fulfilled promises
72
+ if (promise && promise.isFulfilled()) {
73
+ promiseMap["delete"](uniqueId);
74
+ }
75
+ }
76
+ // Clean up changes array - remove fulfilled promises
77
+ context.changes = context.changes.filter(function (change) {
78
+ // Check if promise still exists in promiseMap
79
+ if (promiseMap && promiseMap.has(change.uniqueId)) {
80
+ var _promise = promiseMap.get(change.uniqueId);
81
+ return _promise && !_promise.isFulfilled();
82
+ }
83
+ return false;
84
+ });
85
+ } catch (error) {
86
+ console.error('Error in setStore listener middleware:', error);
87
+ // Don't throw - let the action complete even if promise resolution fails
88
+ }
89
+ case 1:
90
+ return _context.a(2);
91
+ }
92
+ }, _callee);
93
+ }));
94
+ function effect(_x, _x2) {
95
+ return _effect.apply(this, arguments);
96
+ }
97
+ return effect;
98
+ }()
99
+ });
100
+ return {
101
+ store: store,
102
+ persistor: persistor,
103
+ actions: actions
104
+ };
105
+ }
106
+
107
+ export { setupStore as default, listenerMiddleware, setupStore };
@@ -0,0 +1,45 @@
1
+ import { createSlice } from '@reduxjs/toolkit';
2
+ import helperInstance from '../utils/helpers.js';
3
+
4
+ // src/store/storeSlice.ts
5
+ var storeInstance = {
6
+ actions: {}
7
+ };
8
+ var promiseMap = new Map();
9
+ function getStore() {
10
+ var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
11
+ var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12
+ var storeSlice = createSlice({
13
+ name: "store",
14
+ initialState: initialState,
15
+ reducers: {
16
+ setStore: function setStore(state, _ref) {
17
+ var payload = _ref.payload;
18
+ // Extract only serializable data
19
+ var name = payload.name,
20
+ value = payload.value,
21
+ uniqueId = payload.uniqueId;
22
+ // Store change event for listener middleware (without promise)
23
+ // Note: We no longer store resolve/reject functions here - they're in promiseMap
24
+ if (context.changes) {
25
+ var changeEvent = {
26
+ name: name,
27
+ value: value,
28
+ uniqueId: uniqueId
29
+ };
30
+ context.changes.push(changeEvent);
31
+ }
32
+ var newState = helperInstance.setNested(state, name, value);
33
+ return newState;
34
+ }
35
+ }
36
+ });
37
+ var setStore = storeSlice.actions.setStore;
38
+ storeInstance.reducer = storeSlice.reducer;
39
+ storeInstance.actions = {
40
+ setStore: setStore
41
+ };
42
+ return storeInstance;
43
+ }
44
+
45
+ export { getStore as default, getStore, promiseMap, storeInstance };
@@ -0,0 +1,11 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ function cn() {
5
+ for (var _len = arguments.length, inputs = new Array(_len), _key = 0; _key < _len; _key++) {
6
+ inputs[_key] = arguments[_key];
7
+ }
8
+ return twMerge(clsx(inputs));
9
+ }
10
+
11
+ export { cn };
@@ -0,0 +1,169 @@
1
+ import { createClass as _createClass, classCallCheck as _classCallCheck } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+
3
+ var EmitterClass = /*#__PURE__*/function () {
4
+ function EmitterClass() {
5
+ _classCallCheck(this, EmitterClass);
6
+ this.events = {};
7
+ this.testCallback = null;
8
+ }
9
+ return _createClass(EmitterClass, [{
10
+ key: "onCheck",
11
+ value: function onCheck(callback) {
12
+ this.testCallback = callback;
13
+ }
14
+ }, {
15
+ key: "on",
16
+ value: function on(event, listener) {
17
+ if (!this.events[event]) {
18
+ this.events[event] = [];
19
+ }
20
+ this.events[event].push({
21
+ listener: listener,
22
+ once: false
23
+ });
24
+ }
25
+ }, {
26
+ key: "onOnce",
27
+ value: function onOnce(event, listener) {
28
+ if (!this.events[event]) {
29
+ this.events[event] = [];
30
+ }
31
+ this.events[event].push({
32
+ listener: listener,
33
+ once: true
34
+ });
35
+ }
36
+ }, {
37
+ key: "offAll",
38
+ value: function offAll(event) {
39
+ if (!this.events[event]) {
40
+ return;
41
+ }
42
+ this.events[event] = [];
43
+ }
44
+ }, {
45
+ key: "onSchedule",
46
+ value: function onSchedule(event, listener, schedule) {
47
+ if (!this.events[event]) {
48
+ this.events[event] = [];
49
+ }
50
+ this.events[event].push({
51
+ listener: listener,
52
+ schedule: schedule
53
+ });
54
+ }
55
+ }, {
56
+ key: "emit",
57
+ value: function emit(event) {
58
+ var _this = this;
59
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
60
+ args[_key - 1] = arguments[_key];
61
+ }
62
+ return new Promise(function (resolve, reject) {
63
+ _this.executeEvent.apply(_this, [event, {
64
+ resolve: resolve,
65
+ reject: reject
66
+ }].concat(args));
67
+ });
68
+ }
69
+ }, {
70
+ key: "executeEvent",
71
+ value: function executeEvent(event) {
72
+ var _this2 = this;
73
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
74
+ for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
75
+ args[_key2 - 2] = arguments[_key2];
76
+ }
77
+ try {
78
+ if (this.testCallback) {
79
+ this.testCallback({
80
+ event: event,
81
+ args: args
82
+ });
83
+ }
84
+ if (!this.events[event]) {
85
+ if (typeof config.resolve === "function") {
86
+ config.resolve(undefined);
87
+ }
88
+ return;
89
+ }
90
+ this.events[event].forEach(function (payload) {
91
+ var listener = payload.listener,
92
+ once = payload.once,
93
+ schedule = payload.schedule;
94
+ var resolveListener = function resolveListener() {
95
+ var result = listener.apply(void 0, args);
96
+ config.resolve(result);
97
+ };
98
+ if (schedule) {
99
+ var now = new Date();
100
+ var nextRun;
101
+ var delay = -1;
102
+ if (schedule instanceof Date) {
103
+ nextRun = schedule;
104
+ delay = nextRun.getTime() - now.getTime();
105
+ } else if (typeof schedule === "number") {
106
+ delay = schedule;
107
+ } else if (typeof schedule === "string") {
108
+ nextRun = new Date(schedule);
109
+ delay = nextRun.getTime() - now.getTime();
110
+ }
111
+ if (delay > 0) {
112
+ setTimeout(function () {
113
+ resolveListener();
114
+ }, delay);
115
+ } else {
116
+ resolveListener();
117
+ }
118
+ } else {
119
+ resolveListener();
120
+ }
121
+ if (once) {
122
+ _this2.off(event, listener);
123
+ }
124
+ });
125
+ } catch (error) {
126
+ config.reject(error);
127
+ }
128
+ }
129
+ }, {
130
+ key: "off",
131
+ value: function off(event, listener) {
132
+ if (!this.events[event]) {
133
+ return;
134
+ }
135
+ this.events[event] = this.events[event].filter(function (payload) {
136
+ var payloadListener = payload.listener;
137
+ return payloadListener !== listener;
138
+ });
139
+ }
140
+ }], [{
141
+ key: "getInstance",
142
+ value: function getInstance() {
143
+ return new EmitterClass();
144
+ }
145
+ }]);
146
+ }();
147
+ var Emitter = /*#__PURE__*/function () {
148
+ function Emitter() {
149
+ _classCallCheck(this, Emitter);
150
+ if (Emitter.instanceMap.has(this)) {
151
+ return Emitter.instanceMap.get(this);
152
+ }
153
+ Emitter.instanceMap.set(this, new EmitterClass());
154
+ }
155
+ return _createClass(Emitter, null, [{
156
+ key: "getInstance",
157
+ value: function getInstance() {
158
+ var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "default";
159
+ if (this.instanceMap.has(name)) {
160
+ return this.instanceMap.get(name);
161
+ }
162
+ this.instanceMap.set(name, new EmitterClass());
163
+ return this.instanceMap.get(name);
164
+ }
165
+ }]);
166
+ }();
167
+ Emitter.instanceMap = new Map();
168
+
169
+ export { Emitter, EmitterClass, Emitter as default };
@@ -0,0 +1,161 @@
1
+ import { createClass as _createClass, classCallCheck as _classCallCheck, typeof as _typeof } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+
3
+ var Helpers = /*#__PURE__*/function () {
4
+ function Helpers() {
5
+ _classCallCheck(this, Helpers);
6
+ }
7
+ /**
8
+ * Traverses an object by a dotted path and returns the nested value.
9
+ * If `options.prefix` is provided, starts from that subkey of state.
10
+ * @param path - Dot-separated path, e.g. "a.b.c"
11
+ * @param options - { state?: Object, prefix?: string }
12
+ * @returns Reference to the nested object or value
13
+ *
14
+ * Example:
15
+ * let obj = { foo: { bar: { baz: 5 } } };
16
+ * Helpers.dotWalk("bar.baz", { state: obj.foo }) // returns 5
17
+ */
18
+ return _createClass(Helpers, [{
19
+ key: "dotWalk",
20
+ value: function dotWalk(path) {
21
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
22
+ // The state root is provided via options.state or this.state (if available)
23
+ var state = options.state || this.state;
24
+ if (!state || _typeof(state) !== "object") {
25
+ throw new Error("dotWalk requires a state object via options.state");
26
+ }
27
+ var arr = path.split(".");
28
+ var tmp = state;
29
+ // Use prefix if provided
30
+ var prefix = options.prefix || "";
31
+ if (prefix) {
32
+ tmp = tmp[prefix];
33
+ }
34
+ for (var i = 0; i < arr.length; i++) {
35
+ if (tmp == null) return undefined;
36
+ tmp = tmp[arr[i]];
37
+ }
38
+ return tmp;
39
+ }
40
+ }, {
41
+ key: "setNested",
42
+ value: function setNested(state, name, value) {
43
+ var payload = {
44
+ name: name,
45
+ value: value
46
+ };
47
+ var old = state;
48
+ var tmp = old;
49
+ var key = "";
50
+ var arr = payload.name.split(".");
51
+ if (arr.length > 1) {
52
+ arr.forEach(function (k) {
53
+ old = tmp;
54
+ tmp[k] = tmp[k] || {};
55
+ tmp = tmp[k];
56
+ key = k;
57
+ });
58
+ old[key] = payload.value;
59
+ } else {
60
+ key = payload.name;
61
+ old = state[key];
62
+ state[key] = payload.value;
63
+ }
64
+ return state;
65
+ }
66
+ /**
67
+ * Creates and returns a debounced version of the given callback.
68
+ * The debounced function delays invoking the callback until after delay ms have elapsed
69
+ * since the last time the debounced function was invoked.
70
+ * The debounce state (timeout) is stored per instance; if you need per-callback
71
+ * isolation, use a closure or bind a new Helpers() instance.
72
+ *
73
+ * @param delay - Delay in milliseconds
74
+ * @returns Debounced promise with clear method
75
+ */
76
+ }, {
77
+ key: "debounce",
78
+ value: function debounce() {
79
+ var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;
80
+ var timeoutId = 0;
81
+ var promise = new Promise(function (resolve, reject) {
82
+ try {
83
+ timeoutId = setTimeout(function () {
84
+ resolve();
85
+ }, delay);
86
+ } catch (error) {
87
+ reject(error);
88
+ }
89
+ });
90
+ var _clear = function _clear() {
91
+ clearTimeout(timeoutId);
92
+ timeoutId = 0;
93
+ };
94
+ promise._clear = _clear; // Add the clear method to the promise
95
+ return promise;
96
+ }
97
+ }]);
98
+ }();
99
+ // A serializable-safe TrackingPromise that *does not* put the promise or any methods in the redux action payload.
100
+ // This class is only intended to be used locally (not as part of redux/store payloads).
101
+ // DO NOT EVER put an instance of TrackingPromise directly in redux actions.
102
+ var TrackingPromise = /*#__PURE__*/function () {
103
+ function TrackingPromise(callback) {
104
+ var _this = this;
105
+ _classCallCheck(this, TrackingPromise);
106
+ this._state = "pending";
107
+ this._callback = callback;
108
+ this._promise = new Promise(function (resolve, reject) {
109
+ _this._resolve = function (value) {
110
+ _this._state = "fulfilled";
111
+ resolve(value);
112
+ };
113
+ _this._reject = function (reason) {
114
+ _this._state = "rejected";
115
+ reject(reason);
116
+ };
117
+ _this._callback(_this._resolve, _this._reject);
118
+ });
119
+ }
120
+ return _createClass(TrackingPromise, [{
121
+ key: "resolve",
122
+ value: function resolve(value) {
123
+ if (this._state !== "pending") return;
124
+ this._resolve(value);
125
+ }
126
+ }, {
127
+ key: "reject",
128
+ value: function reject(reason) {
129
+ if (this._state !== "pending") return;
130
+ this._reject(reason);
131
+ }
132
+ }, {
133
+ key: "isFulfilled",
134
+ value: function isFulfilled() {
135
+ return this._state === "fulfilled";
136
+ }
137
+ }, {
138
+ key: "isRejected",
139
+ value: function isRejected() {
140
+ return this._state === "rejected";
141
+ }
142
+ }, {
143
+ key: "isPending",
144
+ value: function isPending() {
145
+ return this._state === "pending";
146
+ }
147
+ }, {
148
+ key: "then",
149
+ value: function then(onFulfilled, onRejected) {
150
+ return this._promise.then(onFulfilled, onRejected);
151
+ }
152
+ }, {
153
+ key: "catch",
154
+ value: function _catch(onRejected) {
155
+ return this._promise["catch"](onRejected);
156
+ }
157
+ }]);
158
+ }();
159
+ var helperInstance = new Helpers();
160
+
161
+ export { Helpers, TrackingPromise, helperInstance as default };
@@ -0,0 +1,134 @@
1
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+
3
+ // Internal (not exported). Viewport-space positioning shared by Popover and Tour.
4
+ // All rects are getBoundingClientRect() values, so the result is for
5
+ // `position: fixed`.
6
+ var OPPOSITE = {
7
+ top: "bottom",
8
+ bottom: "top",
9
+ left: "right",
10
+ right: "left"
11
+ };
12
+ function parsePlacement() {
13
+ var placement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "bottom";
14
+ var _String$split = String(placement).split("-"),
15
+ _String$split2 = _slicedToArray(_String$split, 2),
16
+ _String$split2$ = _String$split2[0],
17
+ side = _String$split2$ === void 0 ? "bottom" : _String$split2$,
18
+ _String$split2$2 = _String$split2[1],
19
+ align = _String$split2$2 === void 0 ? "center" : _String$split2$2;
20
+ return {
21
+ side: OPPOSITE[side] ? side : "bottom",
22
+ align: align
23
+ };
24
+ }
25
+ function roomOn(side, anchor, viewport) {
26
+ if (side === "top") return anchor.top;
27
+ if (side === "bottom") return viewport.height - anchor.bottom;
28
+ if (side === "left") return anchor.left;
29
+ return viewport.width - anchor.right;
30
+ }
31
+ function chooseSide(side, anchor, size, offset, viewport) {
32
+ var needed = (side === "top" || side === "bottom" ? size.height : size.width) + offset;
33
+ if (roomOn(side, anchor, viewport) >= needed) return side;
34
+ var flipped = OPPOSITE[side];
35
+ return roomOn(flipped, anchor, viewport) > roomOn(side, anchor, viewport) ? flipped : side;
36
+ }
37
+ function alignAxis(align, start, length, size) {
38
+ if (align === "start") return start;
39
+ if (align === "end") return start + length - size;
40
+ return start + length / 2 - size / 2;
41
+ }
42
+ var clamp = function clamp(value, min, max) {
43
+ return Math.max(min, Math.min(value, Math.max(min, max)));
44
+ };
45
+ /**
46
+ * Places a floating box of `size` next to `anchor`. Flips to the opposite side
47
+ * when the requested side lacks room, then clamps into the viewport.
48
+ * Returns `{ top, left, side }`.
49
+ */
50
+ function computePosition(anchor, size, _ref) {
51
+ var placement = _ref.placement,
52
+ _ref$offset = _ref.offset,
53
+ offset = _ref$offset === void 0 ? 8 : _ref$offset,
54
+ _ref$padding = _ref.padding,
55
+ padding = _ref$padding === void 0 ? 8 : _ref$padding,
56
+ viewport = _ref.viewport;
57
+ var vp = viewport || {
58
+ width: window.innerWidth,
59
+ height: window.innerHeight
60
+ };
61
+ var _parsePlacement = parsePlacement(placement),
62
+ wanted = _parsePlacement.side,
63
+ align = _parsePlacement.align;
64
+ var side = chooseSide(wanted, anchor, size, offset, vp);
65
+ var top;
66
+ var left;
67
+ if (side === "top" || side === "bottom") {
68
+ top = side === "top" ? anchor.top - size.height - offset : anchor.bottom + offset;
69
+ left = alignAxis(align, anchor.left, anchor.width, size.width);
70
+ } else {
71
+ left = side === "left" ? anchor.left - size.width - offset : anchor.right + offset;
72
+ top = alignAxis(align, anchor.top, anchor.height, size.height);
73
+ }
74
+ return {
75
+ top: Math.round(clamp(top, padding, vp.height - size.height - padding)),
76
+ left: Math.round(clamp(left, padding, vp.width - size.width - padding)),
77
+ side: side
78
+ };
79
+ }
80
+ /** `true` when the user asked the OS for reduced motion. */
81
+ function prefersReducedMotion() {
82
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return false;
83
+ return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
84
+ }
85
+ function nearestScroller(el) {
86
+ var node = el.parentElement;
87
+ while (node && node !== document.body && node !== document.documentElement) {
88
+ var _window$getComputedSt = window.getComputedStyle(node),
89
+ overflowY = _window$getComputedSt.overflowY;
90
+ if ((overflowY === "auto" || overflowY === "scroll") && node.scrollHeight > node.clientHeight) return node;
91
+ node = node.parentElement;
92
+ }
93
+ return null;
94
+ }
95
+ /**
96
+ * Scrolls `el` into view through its nearest real scroller only. Unlike
97
+ * `scrollIntoView`, this never scrolls `overflow: hidden` ancestors (an app
98
+ * shell's fixed-height root), which would leave the layout shifted afterwards.
99
+ */
100
+ function revealElement(el) {
101
+ if (!el || typeof window === "undefined") return;
102
+ var behavior = prefersReducedMotion() ? "auto" : "smooth";
103
+ var rect = el.getBoundingClientRect();
104
+ var scroller = nearestScroller(el);
105
+ if (scroller && typeof scroller.scrollTo === "function") {
106
+ var box = scroller.getBoundingClientRect();
107
+ if (rect.top >= box.top && rect.bottom <= box.bottom) return;
108
+ var _top = scroller.scrollTop + (rect.top - box.top) - (box.height - rect.height) / 2;
109
+ scroller.scrollTo({
110
+ top: Math.max(0, _top),
111
+ behavior: behavior
112
+ });
113
+ return;
114
+ }
115
+ if (rect.top >= 0 && rect.bottom <= window.innerHeight) return;
116
+ if (typeof window.scrollTo !== "function") return;
117
+ var top = window.scrollY + rect.top - (window.innerHeight - rect.height) / 2;
118
+ window.scrollTo({
119
+ top: Math.max(0, top),
120
+ behavior: behavior
121
+ });
122
+ }
123
+ /** Assigns one DOM node to several refs (callback or object). */
124
+ function setRefs(node) {
125
+ for (var _len = arguments.length, refs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
126
+ refs[_key - 1] = arguments[_key];
127
+ }
128
+ refs.forEach(function (ref) {
129
+ if (!ref) return;
130
+ if (typeof ref === "function") ref(node);else ref.current = node;
131
+ });
132
+ }
133
+
134
+ export { computePosition, parsePlacement, prefersReducedMotion, revealElement, setRefs };
@@ -2,7 +2,7 @@ import { AxiosInstance, AxiosResponse, Method } from "axios";
2
2
  interface UseApiProps {
3
3
  BASE_URL?: string | null;
4
4
  DEFAULT_HEADERS?: Record<string, string>;
5
- apiMap?: Record<string, (data?: any) => ApiConfig>;
5
+ apiMap?: Record<string, (...args: any[]) => ApiConfig>;
6
6
  createRequestInstance?: (baseURL?: string | null, defaultHeaders?: Record<string, string>) => AxiosInstance;
7
7
  sendRequest?: (requestInstance: AxiosInstance, method: string, url: string, data?: any, headers?: Record<string, string>) => Promise<AxiosResponse>;
8
8
  }
@@ -22,6 +22,7 @@ interface UseApiReturn<T = any> {
22
22
  lastRequest: string | null;
23
23
  fetchData: (url: string, method: string, data?: any, headers?: Record<string, string>, options?: FetchOptions) => Promise<T>;
24
24
  fetchApi: (apiKey: string, data?: any, needLoading?: boolean) => Promise<T>;
25
+ fetchApiWith: (apiKey: string, args?: any[], options?: FetchOptions) => Promise<T>;
25
26
  }
26
27
  export declare const useApi: <T = any>(props?: UseApiProps) => UseApiReturn<T>;
27
28
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpE,UAAU,WAAW;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC;IACnD,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC;IAC5G,WAAW,CAAC,EAAE,CACV,eAAe,EAAE,aAAa,EAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/B,OAAO,CAAC,aAAa,CAAC,CAAC;CAC/B;AAED,UAAU,SAAS;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,GAAG,CAAC;CACd;AAED,UAAU,YAAY;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,YAAY,CAAC,CAAC,GAAG,GAAG;IAC1B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,CACP,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,CAAC,CAAC,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,GAAG,GAAG,EAAE,QAAO,WAAgB,KAAG,YAAY,CAAC,CAAC,CA0FvE,CAAC"}
1
+ {"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpE,UAAU,WAAW;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC;IACvD,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC;IAC5G,WAAW,CAAC,EAAE,CACV,eAAe,EAAE,aAAa,EAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/B,OAAO,CAAC,aAAa,CAAC,CAAC;CAC/B;AAED,UAAU,SAAS;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,GAAG,CAAC;CACd;AAED,UAAU,YAAY;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,YAAY,CAAC,CAAC,GAAG,GAAG;IAC1B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,CACP,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,CAAC,CAAC,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACtF;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,GAAG,GAAG,EAAE,QAAO,WAAgB,KAAG,YAAY,CAAC,CAAC,CAiHvE,CAAC"}