@1money/react-ui 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/AGENTS.md +393 -0
  2. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
  4. package/es/components/CheckboxGroup/interface.d.ts +21 -15
  5. package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  6. package/es/components/Form/Form.d.ts +29 -0
  7. package/es/components/Form/Form.js +188 -0
  8. package/es/components/Form/FormItem.d.ts +4 -0
  9. package/es/components/Form/FormItem.js +165 -0
  10. package/es/components/Form/FormItemContent.d.ts +18 -0
  11. package/es/components/Form/FormItemContent.js +146 -0
  12. package/es/components/Form/constants.d.ts +46 -0
  13. package/es/components/Form/constants.js +65 -0
  14. package/es/components/Form/helper.d.ts +120 -0
  15. package/es/components/Form/helper.js +284 -0
  16. package/es/components/Form/index.d.ts +20 -0
  17. package/es/components/Form/index.js +21 -0
  18. package/es/components/Form/interface.d.ts +238 -0
  19. package/es/components/Form/interface.js +2 -0
  20. package/es/components/Form/style/Form.css +1 -0
  21. package/es/components/Form/style/Form.scss +167 -0
  22. package/es/components/Form/style/css.js +2 -0
  23. package/es/components/Form/style/index.d.ts +1 -0
  24. package/es/components/Form/style/index.js +2 -0
  25. package/es/components/Form/useFormItemContext.d.ts +32 -0
  26. package/es/components/Form/useFormItemContext.js +55 -0
  27. package/es/components/Form/useFormItemWatch.d.ts +51 -0
  28. package/es/components/Form/useFormItemWatch.js +69 -0
  29. package/es/components/Form/useValidationTrigger.d.ts +40 -0
  30. package/es/components/Form/useValidationTrigger.js +74 -0
  31. package/es/components/Input/Input.js +72 -74
  32. package/es/components/Input/interface.d.ts +9 -9
  33. package/es/components/InputAmount/InputAmount.js +228 -276
  34. package/es/components/InputAmount/helper.d.ts +46 -0
  35. package/es/components/InputAmount/helper.js +115 -0
  36. package/es/components/ProForm/ProForm.d.ts +33 -0
  37. package/es/components/ProForm/ProForm.js +208 -0
  38. package/es/components/ProForm/ProFormDependency.d.ts +12 -0
  39. package/es/components/ProForm/ProFormDependency.js +61 -0
  40. package/es/components/ProForm/ProFormList.d.ts +19 -0
  41. package/es/components/ProForm/ProFormList.js +348 -0
  42. package/es/components/ProForm/Submitter.d.ts +21 -0
  43. package/es/components/ProForm/Submitter.js +76 -0
  44. package/es/components/ProForm/constants.d.ts +34 -0
  45. package/es/components/ProForm/constants.js +40 -0
  46. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  47. package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
  48. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  49. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
  50. package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  51. package/es/components/ProForm/fields/ProFormDigit.js +15 -0
  52. package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  53. package/es/components/ProForm/fields/ProFormMoney.js +10 -0
  54. package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  55. package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
  56. package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  57. package/es/components/ProForm/fields/ProFormPassword.js +16 -0
  58. package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  59. package/es/components/ProForm/fields/ProFormRadio.js +13 -0
  60. package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  61. package/es/components/ProForm/fields/ProFormSelect.js +13 -0
  62. package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  63. package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
  64. package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
  65. package/es/components/ProForm/fields/ProFormText.js +15 -0
  66. package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  67. package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
  68. package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
  69. package/es/components/ProForm/fields/createProFormField.js +200 -0
  70. package/es/components/ProForm/fields/index.d.ts +12 -0
  71. package/es/components/ProForm/fields/index.js +13 -0
  72. package/es/components/ProForm/index.d.ts +7 -0
  73. package/es/components/ProForm/index.js +7 -0
  74. package/es/components/ProForm/interface.d.ts +306 -0
  75. package/es/components/ProForm/interface.js +2 -0
  76. package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  77. package/es/components/ProForm/layouts/DrawerForm.js +79 -0
  78. package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
  79. package/es/components/ProForm/layouts/ModalForm.js +89 -0
  80. package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  81. package/es/components/ProForm/layouts/QueryFilter.js +132 -0
  82. package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
  83. package/es/components/ProForm/layouts/StepsForm.js +295 -0
  84. package/es/components/ProForm/layouts/index.d.ts +4 -0
  85. package/es/components/ProForm/layouts/index.js +5 -0
  86. package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  87. package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
  88. package/es/components/ProForm/style/ProForm.module.css +1 -0
  89. package/es/components/ProForm/style/ProForm.module.scss +59 -0
  90. package/es/components/ProForm/style/css.js +3 -0
  91. package/es/components/ProForm/style/index.d.ts +1 -0
  92. package/es/components/ProForm/style/index.js +3 -0
  93. package/es/components/ProForm/utils.d.ts +72 -0
  94. package/es/components/ProForm/utils.js +206 -0
  95. package/es/components/RadioGroup/RadioGroup.js +46 -23
  96. package/es/components/RadioGroup/interface.d.ts +3 -1
  97. package/es/components/Select/Select.d.ts +1 -1
  98. package/es/components/Select/Select.js +113 -106
  99. package/es/components/Select/constants.d.ts +18 -0
  100. package/es/components/Select/constants.js +19 -0
  101. package/es/components/Sidebar/Sidebar.js +21 -23
  102. package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
  103. package/es/components/Sidebar/SidebarLogo.js +33 -0
  104. package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
  105. package/es/components/Sidebar/SimplySidebar.js +18 -22
  106. package/es/components/Sidebar/Stepper.js +14 -14
  107. package/es/components/Sidebar/constants.d.ts +16 -0
  108. package/es/components/Sidebar/constants.js +17 -0
  109. package/es/components/Sidebar/style/Stepper.css +1 -1
  110. package/es/components/Sidebar/style/Stepper.scss +11 -1
  111. package/es/components/Switch/Switch.js +28 -25
  112. package/es/components/Switch/interface.d.ts +9 -4
  113. package/es/components/useControlledState/index.d.ts +14 -0
  114. package/es/components/useControlledState/index.js +32 -0
  115. package/es/components/useEventCallback/index.d.ts +11 -0
  116. package/es/components/useEventCallback/index.js +17 -0
  117. package/es/components/useLayoutEffect/index.d.ts +11 -0
  118. package/es/components/useLayoutEffect/index.js +17 -0
  119. package/es/components/useLayoutState/index.d.ts +13 -0
  120. package/es/components/useLayoutState/index.js +71 -0
  121. package/es/components/useMemoizedFn/index.d.ts +12 -0
  122. package/es/components/useMemoizedFn/index.js +27 -0
  123. package/es/components/usePrevious/index.d.ts +11 -0
  124. package/es/components/usePrevious/index.js +19 -0
  125. package/es/components/useSafeState/index.d.ts +12 -0
  126. package/es/components/useSafeState/index.js +24 -0
  127. package/es/components/useSyncState/index.d.ts +14 -0
  128. package/es/components/useSyncState/index.js +37 -0
  129. package/es/components/useUpdateEffect/index.d.ts +9 -0
  130. package/es/components/useUpdateEffect/index.js +19 -0
  131. package/es/index.css +1 -1
  132. package/es/index.d.ts +21 -2
  133. package/es/index.js +19 -1
  134. package/jest.setup.d.ts +1 -0
  135. package/jest.setup.ts +1 -0
  136. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  137. package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
  138. package/lib/components/CheckboxGroup/interface.d.ts +21 -15
  139. package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  140. package/lib/components/Form/Form.d.ts +29 -0
  141. package/lib/components/Form/Form.js +199 -0
  142. package/lib/components/Form/FormItem.d.ts +4 -0
  143. package/lib/components/Form/FormItem.js +176 -0
  144. package/lib/components/Form/FormItemContent.d.ts +18 -0
  145. package/lib/components/Form/FormItemContent.js +156 -0
  146. package/lib/components/Form/constants.d.ts +46 -0
  147. package/lib/components/Form/constants.js +71 -0
  148. package/lib/components/Form/helper.d.ts +120 -0
  149. package/lib/components/Form/helper.js +290 -0
  150. package/lib/components/Form/index.d.ts +20 -0
  151. package/lib/components/Form/index.js +45 -0
  152. package/lib/components/Form/interface.d.ts +238 -0
  153. package/lib/components/Form/interface.js +6 -0
  154. package/lib/components/Form/style/Form.css +1 -0
  155. package/lib/components/Form/style/Form.scss +167 -0
  156. package/lib/components/Form/style/css.js +4 -0
  157. package/lib/components/Form/style/index.d.ts +1 -0
  158. package/lib/components/Form/style/index.js +4 -0
  159. package/lib/components/Form/useFormItemContext.d.ts +32 -0
  160. package/lib/components/Form/useFormItemContext.js +62 -0
  161. package/lib/components/Form/useFormItemWatch.d.ts +51 -0
  162. package/lib/components/Form/useFormItemWatch.js +76 -0
  163. package/lib/components/Form/useValidationTrigger.d.ts +40 -0
  164. package/lib/components/Form/useValidationTrigger.js +81 -0
  165. package/lib/components/Input/Input.js +71 -73
  166. package/lib/components/Input/interface.d.ts +9 -9
  167. package/lib/components/InputAmount/InputAmount.js +230 -278
  168. package/lib/components/InputAmount/helper.d.ts +46 -0
  169. package/lib/components/InputAmount/helper.js +122 -0
  170. package/lib/components/ProForm/ProForm.d.ts +33 -0
  171. package/lib/components/ProForm/ProForm.js +216 -0
  172. package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
  173. package/lib/components/ProForm/ProFormDependency.js +67 -0
  174. package/lib/components/ProForm/ProFormList.d.ts +19 -0
  175. package/lib/components/ProForm/ProFormList.js +355 -0
  176. package/lib/components/ProForm/Submitter.d.ts +21 -0
  177. package/lib/components/ProForm/Submitter.js +83 -0
  178. package/lib/components/ProForm/constants.d.ts +34 -0
  179. package/lib/components/ProForm/constants.js +46 -0
  180. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  181. package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
  182. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  183. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
  184. package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  185. package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
  186. package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  187. package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
  188. package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  189. package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
  190. package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  191. package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
  192. package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  193. package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
  194. package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  195. package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
  196. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  197. package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
  198. package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
  199. package/lib/components/ProForm/fields/ProFormText.js +22 -0
  200. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  201. package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
  202. package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
  203. package/lib/components/ProForm/fields/createProFormField.js +208 -0
  204. package/lib/components/ProForm/fields/index.d.ts +12 -0
  205. package/lib/components/ProForm/fields/index.js +90 -0
  206. package/lib/components/ProForm/index.d.ts +7 -0
  207. package/lib/components/ProForm/index.js +73 -0
  208. package/lib/components/ProForm/interface.d.ts +306 -0
  209. package/lib/components/ProForm/interface.js +6 -0
  210. package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  211. package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
  212. package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
  213. package/lib/components/ProForm/layouts/ModalForm.js +96 -0
  214. package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  215. package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
  216. package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
  217. package/lib/components/ProForm/layouts/StepsForm.js +302 -0
  218. package/lib/components/ProForm/layouts/index.d.ts +4 -0
  219. package/lib/components/ProForm/layouts/index.js +40 -0
  220. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  221. package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
  222. package/lib/components/ProForm/style/ProForm.module.css +1 -0
  223. package/lib/components/ProForm/style/ProForm.module.scss +59 -0
  224. package/lib/components/ProForm/style/css.js +4 -0
  225. package/lib/components/ProForm/style/index.d.ts +1 -0
  226. package/lib/components/ProForm/style/index.js +4 -0
  227. package/lib/components/ProForm/utils.d.ts +72 -0
  228. package/lib/components/ProForm/utils.js +213 -0
  229. package/lib/components/RadioGroup/RadioGroup.js +45 -22
  230. package/lib/components/RadioGroup/interface.d.ts +3 -1
  231. package/lib/components/Select/Select.d.ts +1 -1
  232. package/lib/components/Select/Select.js +114 -107
  233. package/lib/components/Select/constants.d.ts +18 -0
  234. package/lib/components/Select/constants.js +25 -0
  235. package/lib/components/Sidebar/Sidebar.js +21 -23
  236. package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
  237. package/lib/components/Sidebar/SidebarLogo.js +39 -0
  238. package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
  239. package/lib/components/Sidebar/SimplySidebar.js +17 -21
  240. package/lib/components/Sidebar/Stepper.js +14 -14
  241. package/lib/components/Sidebar/constants.d.ts +16 -0
  242. package/lib/components/Sidebar/constants.js +23 -0
  243. package/lib/components/Sidebar/style/Stepper.css +1 -1
  244. package/lib/components/Sidebar/style/Stepper.scss +11 -1
  245. package/lib/components/Switch/Switch.js +27 -24
  246. package/lib/components/Switch/interface.d.ts +9 -4
  247. package/lib/components/useControlledState/index.d.ts +14 -0
  248. package/lib/components/useControlledState/index.js +39 -0
  249. package/lib/components/useEventCallback/index.d.ts +11 -0
  250. package/lib/components/useEventCallback/index.js +24 -0
  251. package/lib/components/useLayoutEffect/index.d.ts +11 -0
  252. package/lib/components/useLayoutEffect/index.js +23 -0
  253. package/lib/components/useLayoutState/index.d.ts +13 -0
  254. package/lib/components/useLayoutState/index.js +79 -0
  255. package/lib/components/useMemoizedFn/index.d.ts +12 -0
  256. package/lib/components/useMemoizedFn/index.js +33 -0
  257. package/lib/components/usePrevious/index.d.ts +11 -0
  258. package/lib/components/usePrevious/index.js +25 -0
  259. package/lib/components/useSafeState/index.d.ts +12 -0
  260. package/lib/components/useSafeState/index.js +31 -0
  261. package/lib/components/useSyncState/index.d.ts +14 -0
  262. package/lib/components/useSyncState/index.js +44 -0
  263. package/lib/components/useUpdateEffect/index.d.ts +9 -0
  264. package/lib/components/useUpdateEffect/index.js +25 -0
  265. package/lib/index.css +1 -1
  266. package/lib/index.d.ts +21 -2
  267. package/lib/index.js +213 -1
  268. package/package.json +16 -1
@@ -1,12 +1,17 @@
1
- import type { InputSwitchProps } from 'primereact/inputswitch';
2
- import type { ToggleButtonProps } from 'primereact/togglebutton';
1
+ import type { InputSwitchChangeEvent, InputSwitchProps } from 'primereact/inputswitch';
2
+ import type { ToggleButtonChangeEvent, ToggleButtonProps } from 'primereact/togglebutton';
3
+ export type SwitchChangeEvent = InputSwitchChangeEvent | ToggleButtonChangeEvent;
4
+ type OmitKeys = 'checked' | 'onChange';
3
5
  interface SwitchBaseProps {
4
6
  prefixCls?: string;
7
+ checked?: boolean;
8
+ defaultChecked?: boolean;
9
+ onChange?(event: SwitchChangeEvent): void;
5
10
  }
6
- interface NormalSwitchProps extends Omit<InputSwitchProps, 'checked'>, SwitchBaseProps {
11
+ interface NormalSwitchProps extends Omit<InputSwitchProps, OmitKeys>, SwitchBaseProps {
7
12
  type?: 'normal';
8
13
  }
9
- interface ButtonSwitchProps extends Omit<ToggleButtonProps, 'checked'>, SwitchBaseProps {
14
+ interface ButtonSwitchProps extends Omit<ToggleButtonProps, OmitKeys>, SwitchBaseProps {
10
15
  type: 'button';
11
16
  }
12
17
  export type SwitchProps = NormalSwitchProps | ButtonSwitchProps;
@@ -0,0 +1,14 @@
1
+ type Updater<T> = (updater: T | ((origin: T) => T)) => void;
2
+ /**
3
+ * Similar to `useState` but will use props value if provided.
4
+ * From React 18, we do not need safe `useState` since it will not throw for unmounted update.
5
+ * This hook removes the `onChange` & `postState` logic since we only need basic merged state logic.
6
+ *
7
+ * The `mergedValue` return already reflects the latest controlled `value` without
8
+ * the layout effect. The effect exists to sync `innerValue` for the edge case where
9
+ * the component starts in uncontrolled mode (calling `setInnerValue` directly) and
10
+ * then transitions to controlled mode (parent starts providing `value`). Without this
11
+ * sync, reverting back to uncontrolled mode would show the stale `innerValue`.
12
+ */
13
+ export default function useControlledState<T>(defaultStateValue: T | (() => T), value?: T): [T, Updater<T>];
14
+ export {};
@@ -0,0 +1,32 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import { useState } from 'react';
3
+ import useLayoutEffect from '../useLayoutEffect';
4
+ /**
5
+ * Similar to `useState` but will use props value if provided.
6
+ * From React 18, we do not need safe `useState` since it will not throw for unmounted update.
7
+ * This hook removes the `onChange` & `postState` logic since we only need basic merged state logic.
8
+ *
9
+ * The `mergedValue` return already reflects the latest controlled `value` without
10
+ * the layout effect. The effect exists to sync `innerValue` for the edge case where
11
+ * the component starts in uncontrolled mode (calling `setInnerValue` directly) and
12
+ * then transitions to controlled mode (parent starts providing `value`). Without this
13
+ * sync, reverting back to uncontrolled mode would show the stale `innerValue`.
14
+ */
15
+ export default function useControlledState(defaultStateValue, value) {
16
+ var _useState = useState(defaultStateValue),
17
+ _useState2 = _slicedToArray(_useState, 2),
18
+ innerValue = _useState2[0],
19
+ setInnerValue = _useState2[1];
20
+ var mergedValue = value !== undefined ? value : innerValue;
21
+ useLayoutEffect(function (mount) {
22
+ if (!mount && value !== undefined) {
23
+ setInnerValue(value);
24
+ }
25
+ }, [value]);
26
+ return [
27
+ // Value
28
+ mergedValue,
29
+ // Update function
30
+ setInnerValue];
31
+ }
32
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlQ29udHJvbGxlZFN0YXRlL2luZGV4LnRzIiwiY29tcG9uZW50cy91c2VDb250cm9sbGVkU3RhdGUvaW5kZXguanMiXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VDb250cm9sbGVkU3RhdGUiLCJkZWZhdWx0U3RhdGVWYWx1ZSIsInZhbHVlIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaW5uZXJWYWx1ZSIsInNldElubmVyVmFsdWUiLCJtZXJnZWRWYWx1ZSIsInVuZGVmaW5lZCIsIm1vdW50Il0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsUUFBUSxRQUFRLE9BQU87QUFDaEMsT0FBT0MsZUFBZSxNQUFNLG9CQUFvQjtBQUloRDtBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FESUEsZUFBYyxTQUFVQyxrQkFBa0JBLENBQ3hDQyxpQkFBZ0MsRUFDaENDLEtBQVMsRUFBQTtFQUVULElBQUFDLFNBQUEsR0FBb0NMLFFBQVEsQ0FBSUcsaUJBQWlCLENBQUM7SUFBQUcsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBM0RHLFVBQVUsR0FBQUYsVUFBQTtJQUFFRyxhQUFhLEdBQUFILFVBQUE7RUFFaEMsSUFBTUksV0FBVyxHQUFHTixLQUFLLEtBQUtPLFNBQVMsR0FBR1AsS0FBSyxHQUFHSSxVQUFVO0VBRTVEUCxlQUFlLENBQ2IsVUFBQVcsS0FBSyxFQUFHO0lBQ04sSUFBSSxDQUFDQSxLQUFLLElBQUlSLEtBQUssS0FBS08sU0FBUyxFQUFFO01BQ2pDRixhQUFhLENBQUNMLEtBQUssQ0FBQztJQUN0QjtFQUNGLENBQUMsRUFDRCxDQUFDQSxLQUFLLENBQUMsQ0FDUjtFQUVELE9BQU87RUFDTDtFQUNBTSxXQUFXO0VBQ1g7RUFDQUQsYUFBYSxDQUNkO0FBQ0giLCJmaWxlIjoiY29tcG9uZW50cy91c2VDb250cm9sbGVkU3RhdGUvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tICcuLi91c2VMYXlvdXRFZmZlY3QnO1xuLyoqXG4gKiBTaW1pbGFyIHRvIGB1c2VTdGF0ZWAgYnV0IHdpbGwgdXNlIHByb3BzIHZhbHVlIGlmIHByb3ZpZGVkLlxuICogRnJvbSBSZWFjdCAxOCwgd2UgZG8gbm90IG5lZWQgc2FmZSBgdXNlU3RhdGVgIHNpbmNlIGl0IHdpbGwgbm90IHRocm93IGZvciB1bm1vdW50ZWQgdXBkYXRlLlxuICogVGhpcyBob29rIHJlbW92ZXMgdGhlIGBvbkNoYW5nZWAgJiBgcG9zdFN0YXRlYCBsb2dpYyBzaW5jZSB3ZSBvbmx5IG5lZWQgYmFzaWMgbWVyZ2VkIHN0YXRlIGxvZ2ljLlxuICpcbiAqIFRoZSBgbWVyZ2VkVmFsdWVgIHJldHVybiBhbHJlYWR5IHJlZmxlY3RzIHRoZSBsYXRlc3QgY29udHJvbGxlZCBgdmFsdWVgIHdpdGhvdXRcbiAqIHRoZSBsYXlvdXQgZWZmZWN0LiBUaGUgZWZmZWN0IGV4aXN0cyB0byBzeW5jIGBpbm5lclZhbHVlYCBmb3IgdGhlIGVkZ2UgY2FzZSB3aGVyZVxuICogdGhlIGNvbXBvbmVudCBzdGFydHMgaW4gdW5jb250cm9sbGVkIG1vZGUgKGNhbGxpbmcgYHNldElubmVyVmFsdWVgIGRpcmVjdGx5KSBhbmRcbiAqIHRoZW4gdHJhbnNpdGlvbnMgdG8gY29udHJvbGxlZCBtb2RlIChwYXJlbnQgc3RhcnRzIHByb3ZpZGluZyBgdmFsdWVgKS4gV2l0aG91dCB0aGlzXG4gKiBzeW5jLCByZXZlcnRpbmcgYmFjayB0byB1bmNvbnRyb2xsZWQgbW9kZSB3b3VsZCBzaG93IHRoZSBzdGFsZSBgaW5uZXJWYWx1ZWAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWRTdGF0ZShkZWZhdWx0U3RhdGVWYWx1ZSwgdmFsdWUpIHtcbiAgICBjb25zdCBbaW5uZXJWYWx1ZSwgc2V0SW5uZXJWYWx1ZV0gPSB1c2VTdGF0ZShkZWZhdWx0U3RhdGVWYWx1ZSk7XG4gICAgY29uc3QgbWVyZ2VkVmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBpbm5lclZhbHVlO1xuICAgIHVzZUxheW91dEVmZmVjdChtb3VudCA9PiB7XG4gICAgICAgIGlmICghbW91bnQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LCBbdmFsdWVdKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBWYWx1ZVxuICAgICAgICBtZXJnZWRWYWx1ZSxcbiAgICAgICAgLy8gVXBkYXRlIGZ1bmN0aW9uXG4gICAgICAgIHNldElubmVyVmFsdWUsXG4gICAgXTtcbn0iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1,11 @@
1
+ type Fn<T extends unknown[], R> = (...args: T) => R;
2
+ /**
3
+ * A hook that returns a stable callback reference that always invokes
4
+ * the latest version of the provided function. Similar to the React
5
+ * useEvent RFC proposal.
6
+ *
7
+ * @param fn The function to wrap
8
+ * @returns A stable callback that always calls the latest fn
9
+ */
10
+ export default function useEventCallback<T extends unknown[], R>(fn: Fn<T, R>): Fn<T, R>;
11
+ export {};
@@ -0,0 +1,17 @@
1
+ import { useCallback } from 'react';
2
+ import useLatest from '../useLatest';
3
+ /**
4
+ * A hook that returns a stable callback reference that always invokes
5
+ * the latest version of the provided function. Similar to the React
6
+ * useEvent RFC proposal.
7
+ *
8
+ * @param fn The function to wrap
9
+ * @returns A stable callback that always calls the latest fn
10
+ */
11
+ export default function useEventCallback(fn) {
12
+ var fnRef = useLatest(fn);
13
+ return useCallback(function () {
14
+ return fnRef.current.apply(fnRef, arguments);
15
+ }, []);
16
+ }
17
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlRXZlbnRDYWxsYmFjay9pbmRleC50cyIsImNvbXBvbmVudHMvdXNlRXZlbnRDYWxsYmFjay9pbmRleC5qcyJdLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUxhdGVzdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJmbiIsImZuUmVmIiwiY3VycmVudCIsImFwcGx5IiwiYXJndW1lbnRzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFXLFFBQVEsT0FBTztBQUNuQyxPQUFPQyxTQUFTLE1BQU0sY0FBYztBQUlwQztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FESUEsZUFBYyxTQUFVQyxnQkFBZ0JBLENBQXlCQyxFQUFZLEVBQUE7RUFDM0UsSUFBTUMsS0FBSyxHQUFHSCxTQUFTLENBQUNFLEVBQUUsQ0FBQztFQUUzQixPQUFPSCxXQUFXLENBQUMsWUFBZTtJQUNoQyxPQUFPSSxLQUFLLENBQUNDLE9BQU8sQ0FBQUMsS0FBQSxDQUFiRixLQUFLLEVBQUFHLFNBQWdCLENBQUM7RUFDL0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNSIiwiZmlsZSI6ImNvbXBvbmVudHMvdXNlRXZlbnRDYWxsYmFjay9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTGF0ZXN0IGZyb20gJy4uL3VzZUxhdGVzdCc7XG4vKipcbiAqIEEgaG9vayB0aGF0IHJldHVybnMgYSBzdGFibGUgY2FsbGJhY2sgcmVmZXJlbmNlIHRoYXQgYWx3YXlzIGludm9rZXNcbiAqIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uIFNpbWlsYXIgdG8gdGhlIFJlYWN0XG4gKiB1c2VFdmVudCBSRkMgcHJvcG9zYWwuXG4gKlxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byB3cmFwXG4gKiBAcmV0dXJucyBBIHN0YWJsZSBjYWxsYmFjayB0aGF0IGFsd2F5cyBjYWxscyB0aGUgbGF0ZXN0IGZuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUV2ZW50Q2FsbGJhY2soZm4pIHtcbiAgICBjb25zdCBmblJlZiA9IHVzZUxhdGVzdChmbik7XG4gICAgcmV0dXJuIHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBmblJlZi5jdXJyZW50KC4uLmFyZ3MpO1xuICAgIH0sIFtdKTtcbn0iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1,11 @@
1
+ import { type DependencyList } from 'react';
2
+ type EffectCallback = (mount: boolean) => void | (() => void);
3
+ /**
4
+ * A custom `useLayoutEffect` that passes a boolean indicating whether
5
+ * it's the initial mount (`true`) or a subsequent update (`false`).
6
+ *
7
+ * @param effect The effect callback that receives a `mount` parameter
8
+ * @param deps The dependency array
9
+ */
10
+ export default function useLayoutEffect(effect: EffectCallback, deps?: DependencyList): void;
11
+ export {};
@@ -0,0 +1,17 @@
1
+ import { useLayoutEffect as reactUseLayoutEffect, useRef } from 'react';
2
+ /**
3
+ * A custom `useLayoutEffect` that passes a boolean indicating whether
4
+ * it's the initial mount (`true`) or a subsequent update (`false`).
5
+ *
6
+ * @param effect The effect callback that receives a `mount` parameter
7
+ * @param deps The dependency array
8
+ */
9
+ export default function useLayoutEffect(effect, deps) {
10
+ var isMounted = useRef(false);
11
+ reactUseLayoutEffect(function () {
12
+ var mount = !isMounted.current;
13
+ isMounted.current = true;
14
+ return effect(mount);
15
+ }, deps);
16
+ }
17
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlTGF5b3V0RWZmZWN0L2luZGV4LnRzIiwiY29tcG9uZW50cy91c2VMYXlvdXRFZmZlY3QvaW5kZXguanMiXSwibmFtZXMiOlsidXNlTGF5b3V0RWZmZWN0IiwicmVhY3RVc2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJlZmZlY3QiLCJkZXBzIiwiaXNNb3VudGVkIiwibW91bnQiLCJjdXJyZW50Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxlQUFlLElBQUlDLG9CQUFvQixFQUN2Q0MsTUFBTSxRQUVELE9BQU87QUFJZDtBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRFFBLGVBQWMsU0FBVUYsZUFBZUEsQ0FBQ0csTUFBc0IsRUFBRUMsSUFBcUIsRUFBQTtFQUNuRixJQUFNQyxTQUFTLEdBQUdILE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFFL0JELG9CQUFvQixDQUFDLFlBQUs7SUFDeEIsSUFBTUssS0FBSyxHQUFHLENBQUNELFNBQVMsQ0FBQ0UsT0FBTztJQUNoQ0YsU0FBUyxDQUFDRSxPQUFPLEdBQUcsSUFBSTtJQUN4QixPQUFPSixNQUFNLENBQUNHLEtBQUssQ0FBQztFQUN0QixDQUFDLEVBQUVGLElBQUksQ0FBQztBQUNWIiwiZmlsZSI6ImNvbXBvbmVudHMvdXNlTGF5b3V0RWZmZWN0L2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgYXMgcmVhY3RVc2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEEgY3VzdG9tIGB1c2VMYXlvdXRFZmZlY3RgIHRoYXQgcGFzc2VzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXJcbiAqIGl0J3MgdGhlIGluaXRpYWwgbW91bnQgKGB0cnVlYCkgb3IgYSBzdWJzZXF1ZW50IHVwZGF0ZSAoYGZhbHNlYCkuXG4gKlxuICogQHBhcmFtIGVmZmVjdCBUaGUgZWZmZWN0IGNhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgYSBgbW91bnRgIHBhcmFtZXRlclxuICogQHBhcmFtIGRlcHMgVGhlIGRlcGVuZGVuY3kgYXJyYXlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGVmZmVjdCwgZGVwcykge1xuICAgIGNvbnN0IGlzTW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgcmVhY3RVc2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBtb3VudCA9ICFpc01vdW50ZWQuY3VycmVudDtcbiAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZWZmZWN0KG1vdW50KTtcbiAgICB9LCBkZXBzKTtcbn0iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1,13 @@
1
+ export type Updater<State> = (prev: State) => State;
2
+ /**
3
+ * Execute code before next frame but async.
4
+ *
5
+ * Batches multiple state updates into a single microtask (via `Promise.resolve`),
6
+ * reducing unnecessary re-renders when multiple updates happen synchronously.
7
+ *
8
+ * @param defaultState The initial state value
9
+ * @returns A tuple of `[state, setFrameState]`
10
+ */
11
+ export default function useLayoutState<State>(defaultState: State): [State, (updater: Updater<State>) => void];
12
+ /** Lock frame, when frame pass reset the lock. */
13
+ export declare function useTimeoutLock<State>(defaultState?: State): [(state: State) => void, () => State | null];
@@ -0,0 +1,71 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import { useRef, useState, useEffect, useCallback } from 'react';
3
+ /**
4
+ * Execute code before next frame but async.
5
+ *
6
+ * Batches multiple state updates into a single microtask (via `Promise.resolve`),
7
+ * reducing unnecessary re-renders when multiple updates happen synchronously.
8
+ *
9
+ * @param defaultState The initial state value
10
+ * @returns A tuple of `[state, setFrameState]`
11
+ */
12
+ export default function useLayoutState(defaultState) {
13
+ var stateRef = useRef(defaultState);
14
+ var _useState = useState({}),
15
+ _useState2 = _slicedToArray(_useState, 2),
16
+ forceUpdate = _useState2[1];
17
+ var lastPromiseRef = useRef(null);
18
+ var updateBatchRef = useRef([]);
19
+ var setFrameState = useCallback(function (updater) {
20
+ updateBatchRef.current.push(updater);
21
+ var promise = Promise.resolve();
22
+ lastPromiseRef.current = promise;
23
+ promise.then(function () {
24
+ if (lastPromiseRef.current === promise) {
25
+ var prevBatch = updateBatchRef.current;
26
+ var prevState = stateRef.current;
27
+ updateBatchRef.current = [];
28
+ prevBatch.forEach(function (batchUpdater) {
29
+ stateRef.current = batchUpdater(stateRef.current);
30
+ });
31
+ lastPromiseRef.current = null;
32
+ if (prevState !== stateRef.current) {
33
+ forceUpdate({});
34
+ }
35
+ }
36
+ });
37
+ }, []);
38
+ useEffect(function () {
39
+ return function () {
40
+ lastPromiseRef.current = null;
41
+ };
42
+ }, []);
43
+ return [stateRef.current, setFrameState];
44
+ }
45
+ /** Lock frame, when frame pass reset the lock. */
46
+ export function useTimeoutLock(defaultState) {
47
+ var frameRef = useRef(defaultState !== null && defaultState !== void 0 ? defaultState : null);
48
+ var timeoutRef = useRef(null);
49
+ function cleanUp() {
50
+ if (timeoutRef.current != null) {
51
+ clearTimeout(timeoutRef.current);
52
+ timeoutRef.current = null;
53
+ }
54
+ }
55
+ function setState(newState) {
56
+ frameRef.current = newState;
57
+ cleanUp();
58
+ timeoutRef.current = setTimeout(function () {
59
+ frameRef.current = null;
60
+ timeoutRef.current = null;
61
+ }, 100);
62
+ }
63
+ function getState() {
64
+ return frameRef.current;
65
+ }
66
+ useEffect(function () {
67
+ return cleanUp;
68
+ }, []);
69
+ return [setState, getState];
70
+ }
71
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlTGF5b3V0U3RhdGUvaW5kZXgudHMiLCJjb21wb25lbnRzL3VzZUxheW91dFN0YXRlL2luZGV4LmpzIl0sIm5hbWVzIjpbInVzZVJlZiIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlQ2FsbGJhY2siLCJ1c2VMYXlvdXRTdGF0ZSIsImRlZmF1bHRTdGF0ZSIsInN0YXRlUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZm9yY2VVcGRhdGUiLCJsYXN0UHJvbWlzZVJlZiIsInVwZGF0ZUJhdGNoUmVmIiwic2V0RnJhbWVTdGF0ZSIsInVwZGF0ZXIiLCJjdXJyZW50IiwicHVzaCIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJwcmV2QmF0Y2giLCJwcmV2U3RhdGUiLCJmb3JFYWNoIiwiYmF0Y2hVcGRhdGVyIiwidXNlVGltZW91dExvY2siLCJmcmFtZVJlZiIsInRpbWVvdXRSZWYiLCJjbGVhblVwIiwiY2xlYXJUaW1lb3V0Iiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInNldFRpbWVvdXQiLCJnZXRTdGF0ZSJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsUUFBUSxPQUFPO0FBSWhFO0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRElBLGVBQWMsU0FBVUMsY0FBY0EsQ0FDcENDLFlBQW1CLEVBQUE7RUFFbkIsSUFBTUMsUUFBUSxHQUFHTixNQUFNLENBQUNLLFlBQVksQ0FBQztFQUNyQyxJQUFBRSxTQUFBLEdBQXdCTixRQUFRLENBQUMsQ0FBQSxDQUFFLENBQUM7SUFBQU8sVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBM0JHLFdBQVcsR0FBQUYsVUFBQTtFQUVwQixJQUFNRyxjQUFjLEdBQUdYLE1BQU0sQ0FBdUIsSUFBSSxDQUFDO0VBQ3pELElBQU1ZLGNBQWMsR0FBR1osTUFBTSxDQUFtQixFQUFFLENBQUM7RUFFbkQsSUFBTWEsYUFBYSxHQUFHVixXQUFXLENBQUMsVUFBQ1csT0FBdUIsRUFBSTtJQUM1REYsY0FBYyxDQUFDRyxPQUFPLENBQUNDLElBQUksQ0FBQ0YsT0FBTyxDQUFDO0lBRXBDLElBQU1HLE9BQU8sR0FBR0MsT0FBTyxDQUFDQyxPQUFPLENBQUEsQ0FBRTtJQUNqQ1IsY0FBYyxDQUFDSSxPQUFPLEdBQUdFLE9BQU87SUFFaENBLE9BQU8sQ0FBQ0csSUFBSSxDQUFDLFlBQUs7TUFDaEIsSUFBSVQsY0FBYyxDQUFDSSxPQUFPLEtBQUtFLE9BQU8sRUFBRTtRQUN0QyxJQUFNSSxTQUFTLEdBQUdULGNBQWMsQ0FBQ0csT0FBTztRQUN4QyxJQUFNTyxTQUFTLEdBQUdoQixRQUFRLENBQUNTLE9BQU87UUFDbENILGNBQWMsQ0FBQ0csT0FBTyxHQUFHLEVBQUU7UUFFM0JNLFNBQVMsQ0FBQ0UsT0FBTyxDQUFDLFVBQUFDLFlBQVksRUFBRztVQUMvQmxCLFFBQVEsQ0FBQ1MsT0FBTyxHQUFHUyxZQUFZLENBQUNsQixRQUFRLENBQUNTLE9BQU8sQ0FBQztRQUNuRCxDQUFDLENBQUM7UUFFRkosY0FBYyxDQUFDSSxPQUFPLEdBQUcsSUFBSTtRQUU3QixJQUFJTyxTQUFTLEtBQUtoQixRQUFRLENBQUNTLE9BQU8sRUFBRTtVQUNsQ0wsV0FBVyxDQUFDLENBQUEsQ0FBRSxDQUFDO1FBQ2pCO01BQ0Y7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU5SLFNBQVMsQ0FDUDtJQUFBLE9BQU0sWUFBSztNQUNUUyxjQUFjLENBQUNJLE9BQU8sR0FBRyxJQUFJO0lBQy9CLENBQUM7RUFBQSxHQUNELEVBQUUsQ0FDSDtFQUVELE9BQU8sQ0FBQ1QsUUFBUSxDQUFDUyxPQUFPLEVBQUVGLGFBQWEsQ0FBQztBQUMxQztBQUVBO0FBQ0EsT0FBTSxTQUFVWSxjQUFjQSxDQUM1QnBCLFlBQW9CLEVBQUE7RUFFcEIsSUFBTXFCLFFBQVEsR0FBRzFCLE1BQU0sQ0FBZUssWUFBWSxLQUFBLElBQUEsSUFBWkEsWUFBWSxLQUFBLEtBQUEsQ0FBQSxHQUFaQSxZQUFZLEdBQUksSUFBSSxDQUFDO0VBQzNELElBQU1zQixVQUFVLEdBQUczQixNQUFNLENBQXVDLElBQUksQ0FBQztFQUVyRSxTQUFTNEIsT0FBT0EsQ0FBQSxFQUFBO0lBQ2QsSUFBSUQsVUFBVSxDQUFDWixPQUFPLElBQUksSUFBSSxFQUFFO01BQzlCYyxZQUFZLENBQUNGLFVBQVUsQ0FBQ1osT0FBTyxDQUFDO01BQ2hDWSxVQUFVLENBQUNaLE9BQU8sR0FBRyxJQUFJO0lBQzNCO0VBQ0Y7RUFFQSxTQUFTZSxRQUFRQSxDQUFDQyxRQUFlLEVBQUE7SUFDL0JMLFFBQVEsQ0FBQ1gsT0FBTyxHQUFHZ0IsUUFBUTtJQUMzQkgsT0FBTyxDQUFBLENBQUU7SUFFVEQsVUFBVSxDQUFDWixPQUFPLEdBQUdpQixVQUFVLENBQUMsWUFBSztNQUNuQ04sUUFBUSxDQUFDWCxPQUFPLEdBQUcsSUFBSTtNQUN2QlksVUFBVSxDQUFDWixPQUFPLEdBQUcsSUFBSTtJQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ1Q7RUFFQSxTQUFTa0IsUUFBUUEsQ0FBQSxFQUFBO0lBQ2YsT0FBT1AsUUFBUSxDQUFDWCxPQUFPO0VBQ3pCO0VBRUFiLFNBQVMsQ0FBQztJQUFBLE9BQU0wQixPQUFPO0VBQUEsR0FBRSxFQUFFLENBQUM7RUFFNUIsT0FBTyxDQUFDRSxRQUFRLEVBQUVHLFFBQVEsQ0FBQztBQUM3QiIsImZpbGUiOiJjb21wb25lbnRzL3VzZUxheW91dFN0YXRlL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBFeGVjdXRlIGNvZGUgYmVmb3JlIG5leHQgZnJhbWUgYnV0IGFzeW5jLlxuICpcbiAqIEJhdGNoZXMgbXVsdGlwbGUgc3RhdGUgdXBkYXRlcyBpbnRvIGEgc2luZ2xlIG1pY3JvdGFzayAodmlhIGBQcm9taXNlLnJlc29sdmVgKSxcbiAqIHJlZHVjaW5nIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMgd2hlbiBtdWx0aXBsZSB1cGRhdGVzIGhhcHBlbiBzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBkZWZhdWx0U3RhdGUgVGhlIGluaXRpYWwgc3RhdGUgdmFsdWVcbiAqIEByZXR1cm5zIEEgdHVwbGUgb2YgYFtzdGF0ZSwgc2V0RnJhbWVTdGF0ZV1gXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxheW91dFN0YXRlKGRlZmF1bHRTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlUmVmID0gdXNlUmVmKGRlZmF1bHRTdGF0ZSk7XG4gICAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IGxhc3RQcm9taXNlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHVwZGF0ZUJhdGNoUmVmID0gdXNlUmVmKFtdKTtcbiAgICBjb25zdCBzZXRGcmFtZVN0YXRlID0gdXNlQ2FsbGJhY2soKHVwZGF0ZXIpID0+IHtcbiAgICAgICAgdXBkYXRlQmF0Y2hSZWYuY3VycmVudC5wdXNoKHVwZGF0ZXIpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIGxhc3RQcm9taXNlUmVmLmN1cnJlbnQgPSBwcm9taXNlO1xuICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxhc3RQcm9taXNlUmVmLmN1cnJlbnQgPT09IHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2QmF0Y2ggPSB1cGRhdGVCYXRjaFJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlQmF0Y2hSZWYuY3VycmVudCA9IFtdO1xuICAgICAgICAgICAgICAgIHByZXZCYXRjaC5mb3JFYWNoKGJhdGNoVXBkYXRlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlUmVmLmN1cnJlbnQgPSBiYXRjaFVwZGF0ZXIoc3RhdGVSZWYuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbGFzdFByb21pc2VSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gc3RhdGVSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSh7fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+ICgpID0+IHtcbiAgICAgICAgbGFzdFByb21pc2VSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbc3RhdGVSZWYuY3VycmVudCwgc2V0RnJhbWVTdGF0ZV07XG59XG4vKiogTG9jayBmcmFtZSwgd2hlbiBmcmFtZSBwYXNzIHJlc2V0IHRoZSBsb2NrLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRpbWVvdXRMb2NrKGRlZmF1bHRTdGF0ZSkge1xuICAgIGNvbnN0IGZyYW1lUmVmID0gdXNlUmVmKGRlZmF1bHRTdGF0ZSAhPT0gbnVsbCAmJiBkZWZhdWx0U3RhdGUgIT09IHZvaWQgMCA/IGRlZmF1bHRTdGF0ZSA6IG51bGwpO1xuICAgIGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgZnVuY3Rpb24gY2xlYW5VcCgpIHtcbiAgICAgICAgaWYgKHRpbWVvdXRSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIHRpbWVvdXRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICAgICAgZnJhbWVSZWYuY3VycmVudCA9IG5ld1N0YXRlO1xuICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgIHRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZnJhbWVSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICB0aW1lb3V0UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9LCAxMDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZyYW1lUmVmLmN1cnJlbnQ7XG4gICAgfVxuICAgIHVzZUVmZmVjdCgoKSA9PiBjbGVhblVwLCBbXSk7XG4gICAgcmV0dXJuIFtzZXRTdGF0ZSwgZ2V0U3RhdGVdO1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,12 @@
1
+ type Fn<T extends unknown[], R> = (...args: T) => R;
2
+ /**
3
+ * A hook that returns a memoized version of a callback function.
4
+ * Unlike `useCallback`, it maintains referential equality across renders
5
+ * without requiring a dependency array, while always calling the latest
6
+ * version of the function.
7
+ *
8
+ * @param fn The function to memoize
9
+ * @returns A memoized function with stable reference
10
+ */
11
+ export default function useMemoizedFn<T extends unknown[], R>(fn: Fn<T, R>): Fn<T, R>;
12
+ export {};
@@ -0,0 +1,27 @@
1
+ import { useMemo, useRef } from 'react';
2
+ /**
3
+ * A hook that returns a memoized version of a callback function.
4
+ * Unlike `useCallback`, it maintains referential equality across renders
5
+ * without requiring a dependency array, while always calling the latest
6
+ * version of the function.
7
+ *
8
+ * @param fn The function to memoize
9
+ * @returns A memoized function with stable reference
10
+ */
11
+ export default function useMemoizedFn(fn) {
12
+ var fnRef = useRef(fn);
13
+ fnRef.current = useMemo(function () {
14
+ return fn;
15
+ }, [fn]);
16
+ var memoizedFn = useRef(undefined);
17
+ if (!memoizedFn.current) {
18
+ memoizedFn.current = function () {
19
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
20
+ args[_key] = arguments[_key];
21
+ }
22
+ return fnRef.current.apply(this, args);
23
+ };
24
+ }
25
+ return memoizedFn.current;
26
+ }
27
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlTWVtb2l6ZWRGbi9pbmRleC50cyIsImNvbXBvbmVudHMvdXNlTWVtb2l6ZWRGbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlUmVmIiwidXNlTWVtb2l6ZWRGbiIsImZuIiwiZm5SZWYiLCJjdXJyZW50IiwibWVtb2l6ZWRGbiIsInVuZGVmaW5lZCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiYXBwbHkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFJdkM7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FESUEsZUFBYyxTQUFVQyxhQUFhQSxDQUF5QkMsRUFBWSxFQUFBO0VBQ3hFLElBQU1DLEtBQUssR0FBR0gsTUFBTSxDQUFDRSxFQUFFLENBQUM7RUFDeEJDLEtBQUssQ0FBQ0MsT0FBTyxHQUFHTCxPQUFPLENBQUM7SUFBQSxPQUFNRyxFQUFFO0VBQUEsR0FBRSxDQUFDQSxFQUFFLENBQUMsQ0FBQztFQUV2QyxJQUFNRyxVQUFVLEdBQUdMLE1BQU0sQ0FBdUJNLFNBQVMsQ0FBQztFQUMxRCxJQUFJLENBQUNELFVBQVUsQ0FBQ0QsT0FBTyxFQUFFO0lBQ3ZCQyxVQUFVLENBQUNELE9BQU8sR0FBRyxZQUFtQztNQUFBLFNBQUFHLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQVBDLElBQU8sT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBUEYsSUFBTyxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQ3RELE9BQU9ULEtBQUssQ0FBQ0MsT0FBTyxDQUFDUyxLQUFLLENBQUMsSUFBSSxFQUFFSCxJQUFJLENBQUM7SUFDeEMsQ0FBQztFQUNIO0VBRUEsT0FBT0wsVUFBVSxDQUFDRCxPQUFtQjtBQUN2QyIsImZpbGUiOiJjb21wb25lbnRzL3VzZU1lbW9pemVkRm4vaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQSBob29rIHRoYXQgcmV0dXJucyBhIG1lbW9pemVkIHZlcnNpb24gb2YgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIFVubGlrZSBgdXNlQ2FsbGJhY2tgLCBpdCBtYWludGFpbnMgcmVmZXJlbnRpYWwgZXF1YWxpdHkgYWNyb3NzIHJlbmRlcnNcbiAqIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVwZW5kZW5jeSBhcnJheSwgd2hpbGUgYWx3YXlzIGNhbGxpbmcgdGhlIGxhdGVzdFxuICogdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBtZW1vaXplXG4gKiBAcmV0dXJucyBBIG1lbW9pemVkIGZ1bmN0aW9uIHdpdGggc3RhYmxlIHJlZmVyZW5jZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VNZW1vaXplZEZuKGZuKSB7XG4gICAgY29uc3QgZm5SZWYgPSB1c2VSZWYoZm4pO1xuICAgIGZuUmVmLmN1cnJlbnQgPSB1c2VNZW1vKCgpID0+IGZuLCBbZm5dKTtcbiAgICBjb25zdCBtZW1vaXplZEZuID0gdXNlUmVmKHVuZGVmaW5lZCk7XG4gICAgaWYgKCFtZW1vaXplZEZuLmN1cnJlbnQpIHtcbiAgICAgICAgbWVtb2l6ZWRGbi5jdXJyZW50ID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmblJlZi5jdXJyZW50LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWRGbi5jdXJyZW50O1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Returns the last distinct value observed before the current `value`.
3
+ *
4
+ * Because the internal effect depends on `[value]`, the ref is only updated
5
+ * when `value` changes. That means this hook tracks the previous value on
6
+ * value-change boundaries (not every render).
7
+ *
8
+ * @param value The value to track
9
+ * @returns The previous distinct value, or `undefined` until one exists
10
+ */
11
+ export default function usePrevious<T>(value: T): T | undefined;
@@ -0,0 +1,19 @@
1
+ import { useEffect, useRef } from 'react';
2
+ /**
3
+ * Returns the last distinct value observed before the current `value`.
4
+ *
5
+ * Because the internal effect depends on `[value]`, the ref is only updated
6
+ * when `value` changes. That means this hook tracks the previous value on
7
+ * value-change boundaries (not every render).
8
+ *
9
+ * @param value The value to track
10
+ * @returns The previous distinct value, or `undefined` until one exists
11
+ */
12
+ export default function usePrevious(value) {
13
+ var ref = useRef(undefined);
14
+ useEffect(function () {
15
+ ref.current = value;
16
+ }, [value]);
17
+ return ref.current;
18
+ }
19
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlUHJldmlvdXMvaW5kZXgudHMiLCJjb21wb25lbnRzL3VzZVByZXZpb3VzL2luZGV4LmpzIl0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVByZXZpb3VzIiwidmFsdWUiLCJyZWYiLCJ1bmRlZmluZWQiLCJjdXJyZW50Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxTQUFTLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBRXpDO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FERUEsZUFBYyxTQUFVQyxXQUFXQSxDQUFJQyxLQUFRLEVBQUE7RUFDN0MsSUFBTUMsR0FBRyxHQUFHSCxNQUFNLENBQWdCSSxTQUFTLENBQUM7RUFFNUNMLFNBQVMsQ0FBQyxZQUFLO0lBQ2JJLEdBQUcsQ0FBQ0UsT0FBTyxHQUFHSCxLQUFLO0VBQ3JCLENBQUMsRUFBRSxDQUFDQSxLQUFLLENBQUMsQ0FBQztFQUVYLE9BQU9DLEdBQUcsQ0FBQ0UsT0FBTztBQUNwQiIsImZpbGUiOiJjb21wb25lbnRzL3VzZVByZXZpb3VzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogUmV0dXJucyB0aGUgbGFzdCBkaXN0aW5jdCB2YWx1ZSBvYnNlcnZlZCBiZWZvcmUgdGhlIGN1cnJlbnQgYHZhbHVlYC5cbiAqXG4gKiBCZWNhdXNlIHRoZSBpbnRlcm5hbCBlZmZlY3QgZGVwZW5kcyBvbiBgW3ZhbHVlXWAsIHRoZSByZWYgaXMgb25seSB1cGRhdGVkXG4gKiB3aGVuIGB2YWx1ZWAgY2hhbmdlcy4gVGhhdCBtZWFucyB0aGlzIGhvb2sgdHJhY2tzIHRoZSBwcmV2aW91cyB2YWx1ZSBvblxuICogdmFsdWUtY2hhbmdlIGJvdW5kYXJpZXMgKG5vdCBldmVyeSByZW5kZXIpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHJhY2tcbiAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyBkaXN0aW5jdCB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgdW50aWwgb25lIGV4aXN0c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcmV2aW91cyh2YWx1ZSkge1xuICAgIGNvbnN0IHJlZiA9IHVzZVJlZih1bmRlZmluZWQpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfSwgW3ZhbHVlXSk7XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50O1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,12 @@
1
+ import { type Dispatch, type SetStateAction } from 'react';
2
+ /**
3
+ * It is exactly the same as `React.useState`, but after the component is unmounted,
4
+ * the setState in the asynchronous callback will no longer be executed to avoid
5
+ * memory leakage caused by updating the state after the component is unmounted.
6
+ *
7
+ * @param initialState The initial state value or initializer function
8
+ * @returns A tuple of [state, setSafeState] similar to useState
9
+ */
10
+ declare function useSafeState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
11
+ declare function useSafeState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];
12
+ export default useSafeState;
@@ -0,0 +1,24 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import { useState, useCallback, useRef, useEffect } from 'react';
3
+ // eslint-disable-next-line no-redeclare
4
+ function useSafeState(initialState) {
5
+ var isMountedRef = useRef(true);
6
+ var _useState = useState(initialState),
7
+ _useState2 = _slicedToArray(_useState, 2),
8
+ state = _useState2[0],
9
+ setState = _useState2[1];
10
+ useEffect(function () {
11
+ isMountedRef.current = true;
12
+ return function () {
13
+ isMountedRef.current = false;
14
+ };
15
+ }, []);
16
+ var setSafeState = useCallback(function (value) {
17
+ if (isMountedRef.current) {
18
+ setState(value);
19
+ }
20
+ }, []);
21
+ return [state, setSafeState];
22
+ }
23
+ export default useSafeState;
24
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlU2FmZVN0YXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VTYWZlU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJpc01vdW50ZWRSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzdGF0ZSIsInNldFN0YXRlIiwiY3VycmVudCIsInNldFNhZmVTdGF0ZSIsInZhbHVlIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxRQUE0QyxPQUFPO0FBYXBHO0FBQ0EsU0FBU0MsWUFBWUEsQ0FDbkJDLFlBQTRCLEVBQUE7RUFFNUIsSUFBTUMsWUFBWSxHQUFHSixNQUFNLENBQUMsSUFBSSxDQUFDO0VBQ2pDLElBQUFLLFNBQUEsR0FBMEJQLFFBQVEsQ0FBZ0JLLFlBQXlDLENBQUM7SUFBQUcsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBckZHLEtBQUssR0FBQUYsVUFBQTtJQUFFRyxRQUFRLEdBQUFILFVBQUE7RUFFdEJMLFNBQVMsQ0FBQyxZQUFLO0lBQ2JHLFlBQVksQ0FBQ00sT0FBTyxHQUFHLElBQUk7SUFDM0IsT0FBTyxZQUFLO01BQ1ZOLFlBQVksQ0FBQ00sT0FBTyxHQUFHLEtBQUs7SUFDOUIsQ0FBQztFQUNILENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNQyxZQUFZLEdBQUdaLFdBQVcsQ0FBMEMsVUFBQWEsS0FBSyxFQUFHO0lBQ2hGLElBQUlSLFlBQVksQ0FBQ00sT0FBTyxFQUFFO01BQ3hCRCxRQUFRLENBQUNHLEtBQUssQ0FBQztJQUNqQjtFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixPQUFPLENBQUNKLEtBQUssRUFBRUcsWUFBWSxDQUFDO0FBQzlCO0FBRUEsZUFBZVQsWUFBWSIsImZpbGUiOiJjb21wb25lbnRzL3VzZVNhZmVTdGF0ZS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,14 @@
1
+ import { type SetStateAction } from 'react';
2
+ type GetState<T> = () => T;
3
+ type SetState<T> = (value: SetStateAction<T>) => void;
4
+ /**
5
+ * Same as `React.useState` but will always get the latest state.
6
+ * This is useful when React merges multiple state updates into one.
7
+ * e.g. `onTransitionEnd` triggers multiple events at once that will be merged
8
+ * into a single state update in React.
9
+ *
10
+ * @param initialState The initial state value or initializer function
11
+ * @returns A tuple of [getState, setState] where getState always returns the latest value
12
+ */
13
+ export default function useSyncState<T>(initialState: T | (() => T)): [GetState<T>, SetState<T>];
14
+ export {};
@@ -0,0 +1,37 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import { useState, useRef } from 'react';
3
+ import useEventCallback from '../useEventCallback';
4
+ /** Sentinel value distinguishing "not yet initialized" from any valid state, including `null`. */
5
+ var UNINITIALIZED = Symbol('useSyncState.uninitialized');
6
+ /**
7
+ * Same as `React.useState` but will always get the latest state.
8
+ * This is useful when React merges multiple state updates into one.
9
+ * e.g. `onTransitionEnd` triggers multiple events at once that will be merged
10
+ * into a single state update in React.
11
+ *
12
+ * @param initialState The initial state value or initializer function
13
+ * @returns A tuple of [getState, setState] where getState always returns the latest value
14
+ */
15
+ export default function useSyncState(initialState) {
16
+ var stateRef = useRef(UNINITIALIZED);
17
+ // Initialize ref on first render
18
+ if (stateRef.current === UNINITIALIZED) {
19
+ stateRef.current = typeof initialState === 'function' ? initialState() : initialState;
20
+ }
21
+ var _useState = useState({}),
22
+ _useState2 = _slicedToArray(_useState, 2),
23
+ forceUpdate = _useState2[1];
24
+ var getState = useEventCallback(function () {
25
+ return stateRef.current;
26
+ });
27
+ var setState = useEventCallback(function (value) {
28
+ var prevState = stateRef.current;
29
+ var nextState = typeof value === 'function' ? value(prevState) : value;
30
+ if (!Object.is(prevState, nextState)) {
31
+ stateRef.current = nextState;
32
+ forceUpdate({});
33
+ }
34
+ });
35
+ return [getState, setState];
36
+ }
37
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlU3luY1N0YXRlL2luZGV4LnRzIiwiY29tcG9uZW50cy91c2VTeW5jU3RhdGUvaW5kZXguanMiXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VFdmVudENhbGxiYWNrIiwiVU5JTklUSUFMSVpFRCIsIlN5bWJvbCIsInVzZVN5bmNTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInN0YXRlUmVmIiwiY3VycmVudCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImZvcmNlVXBkYXRlIiwiZ2V0U3RhdGUiLCJzZXRTdGF0ZSIsInZhbHVlIiwicHJldlN0YXRlIiwibmV4dFN0YXRlIiwiT2JqZWN0IiwiaXMiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxRQUFRLEVBQUVDLE1BQU0sUUFBNkIsT0FBTztBQUM3RCxPQUFPQyxnQkFBZ0IsTUFBTSxxQkFBcUI7QUFLbEQ7QUFDQSxJQUFNQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztBQUUxRDtBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QURNQSxlQUFjLFNBQVVDLFlBQVlBLENBQUlDLFlBQTJCLEVBQUE7RUFDakUsSUFBTUMsUUFBUSxHQUFHTixNQUFNLENBQTJCRSxhQUFhLENBQUM7RUFFaEU7RUFDQSxJQUFJSSxRQUFRLENBQUNDLE9BQU8sS0FBS0wsYUFBYSxFQUFFO0lBQ3RDSSxRQUFRLENBQUNDLE9BQU8sR0FDZCxPQUFPRixZQUFZLEtBQUssVUFBVSxHQUFJQSxZQUF3QixDQUFBLENBQUUsR0FBR0EsWUFBWTtFQUNuRjtFQUVBLElBQUFHLFNBQUEsR0FBd0JULFFBQVEsQ0FBQyxDQUFBLENBQUUsQ0FBQztJQUFBVSxVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUEzQkcsV0FBVyxHQUFBRixVQUFBO0VBRXBCLElBQU1HLFFBQVEsR0FBR1gsZ0JBQWdCLENBQVE7SUFBQSxPQUFNSyxRQUFRLENBQUNDLE9BQVk7RUFBQSxFQUFDO0VBRXJFLElBQU1NLFFBQVEsR0FBR1osZ0JBQWdCLENBQTRCLFVBQUFhLEtBQUssRUFBRztJQUNuRSxJQUFNQyxTQUFTLEdBQUdULFFBQVEsQ0FBQ0MsT0FBWTtJQUN2QyxJQUFNUyxTQUFTLEdBQUcsT0FBT0YsS0FBSyxLQUFLLFVBQVUsR0FBSUEsS0FBd0IsQ0FBQ0MsU0FBUyxDQUFDLEdBQUdELEtBQUs7SUFFNUYsSUFBSSxDQUFDRyxNQUFNLENBQUNDLEVBQUUsQ0FBQ0gsU0FBUyxFQUFFQyxTQUFTLENBQUMsRUFBRTtNQUNwQ1YsUUFBUSxDQUFDQyxPQUFPLEdBQUdTLFNBQVM7TUFDNUJMLFdBQVcsQ0FBQyxDQUFBLENBQUUsQ0FBQztJQUNqQjtFQUNGLENBQUMsQ0FBQztFQUVGLE9BQU8sQ0FBQ0MsUUFBUSxFQUFFQyxRQUFRLENBQUM7QUFDN0IiLCJmaWxlIjoiY29tcG9uZW50cy91c2VTeW5jU3RhdGUvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZVN0YXRlLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91c2VFdmVudENhbGxiYWNrJztcbi8qKiBTZW50aW5lbCB2YWx1ZSBkaXN0aW5ndWlzaGluZyBcIm5vdCB5ZXQgaW5pdGlhbGl6ZWRcIiBmcm9tIGFueSB2YWxpZCBzdGF0ZSwgaW5jbHVkaW5nIGBudWxsYC4gKi9cbmNvbnN0IFVOSU5JVElBTElaRUQgPSBTeW1ib2woJ3VzZVN5bmNTdGF0ZS51bmluaXRpYWxpemVkJyk7XG4vKipcbiAqIFNhbWUgYXMgYFJlYWN0LnVzZVN0YXRlYCBidXQgd2lsbCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgc3RhdGUuXG4gKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIFJlYWN0IG1lcmdlcyBtdWx0aXBsZSBzdGF0ZSB1cGRhdGVzIGludG8gb25lLlxuICogZS5nLiBgb25UcmFuc2l0aW9uRW5kYCB0cmlnZ2VycyBtdWx0aXBsZSBldmVudHMgYXQgb25jZSB0aGF0IHdpbGwgYmUgbWVyZ2VkXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIHVwZGF0ZSBpbiBSZWFjdC5cbiAqXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIFRoZSBpbml0aWFsIHN0YXRlIHZhbHVlIG9yIGluaXRpYWxpemVyIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBBIHR1cGxlIG9mIFtnZXRTdGF0ZSwgc2V0U3RhdGVdIHdoZXJlIGdldFN0YXRlIGFsd2F5cyByZXR1cm5zIHRoZSBsYXRlc3QgdmFsdWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU3luY1N0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlUmVmID0gdXNlUmVmKFVOSU5JVElBTElaRUQpO1xuICAgIC8vIEluaXRpYWxpemUgcmVmIG9uIGZpcnN0IHJlbmRlclxuICAgIGlmIChzdGF0ZVJlZi5jdXJyZW50ID09PSBVTklOSVRJQUxJWkVEKSB7XG4gICAgICAgIHN0YXRlUmVmLmN1cnJlbnQgPVxuICAgICAgICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGluaXRpYWxTdGF0ZSgpIDogaW5pdGlhbFN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBbLCBmb3JjZVVwZGF0ZV0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgZ2V0U3RhdGUgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHN0YXRlUmVmLmN1cnJlbnQpO1xuICAgIGNvbnN0IHNldFN0YXRlID0gdXNlRXZlbnRDYWxsYmFjayh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHByZXZTdGF0ZSkgOiB2YWx1ZTtcbiAgICAgICAgaWYgKCFPYmplY3QuaXMocHJldlN0YXRlLCBuZXh0U3RhdGUpKSB7XG4gICAgICAgICAgICBzdGF0ZVJlZi5jdXJyZW50ID0gbmV4dFN0YXRlO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUoe30pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtnZXRTdGF0ZSwgc2V0U3RhdGVdO1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,9 @@
1
+ import { type DependencyList, type EffectCallback } from 'react';
2
+ /**
3
+ * A hook identical to `useEffect`, but it skips the effect on the initial mount
4
+ * and only runs on subsequent updates.
5
+ *
6
+ * @param effect The effect callback to run on updates
7
+ * @param deps The dependency array
8
+ */
9
+ export default function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void;
@@ -0,0 +1,19 @@
1
+ import { useEffect, useRef } from 'react';
2
+ /**
3
+ * A hook identical to `useEffect`, but it skips the effect on the initial mount
4
+ * and only runs on subsequent updates.
5
+ *
6
+ * @param effect The effect callback to run on updates
7
+ * @param deps The dependency array
8
+ */
9
+ export default function useUpdateEffect(effect, deps) {
10
+ var isMounted = useRef(false);
11
+ useEffect(function () {
12
+ if (!isMounted.current) {
13
+ isMounted.current = true;
14
+ return;
15
+ }
16
+ return effect();
17
+ }, deps);
18
+ }
19
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvdXNlVXBkYXRlRWZmZWN0L2luZGV4LnRzIiwiY29tcG9uZW50cy91c2VVcGRhdGVFZmZlY3QvaW5kZXguanMiXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlVXBkYXRlRWZmZWN0IiwiZWZmZWN0IiwiZGVwcyIsImlzTW91bnRlZCIsImN1cnJlbnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsRUFBRUMsTUFBTSxRQUFrRCxPQUFPO0FBRW5GO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FERUEsZUFBYyxTQUFVQyxlQUFlQSxDQUFDQyxNQUFzQixFQUFFQyxJQUFxQixFQUFBO0VBQ25GLElBQU1DLFNBQVMsR0FBR0osTUFBTSxDQUFDLEtBQUssQ0FBQztFQUUvQkQsU0FBUyxDQUFDLFlBQUs7SUFDYixJQUFJLENBQUNLLFNBQVMsQ0FBQ0MsT0FBTyxFQUFFO01BQ3RCRCxTQUFTLENBQUNDLE9BQU8sR0FBRyxJQUFJO01BQ3hCO0lBQ0Y7SUFDQSxPQUFPSCxNQUFNLENBQUEsQ0FBRTtFQUNqQixDQUFDLEVBQUVDLElBQUksQ0FBQztBQUNWIiwiZmlsZSI6ImNvbXBvbmVudHMvdXNlVXBkYXRlRWZmZWN0L2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQSBob29rIGlkZW50aWNhbCB0byBgdXNlRWZmZWN0YCwgYnV0IGl0IHNraXBzIHRoZSBlZmZlY3Qgb24gdGhlIGluaXRpYWwgbW91bnRcbiAqIGFuZCBvbmx5IHJ1bnMgb24gc3Vic2VxdWVudCB1cGRhdGVzLlxuICpcbiAqIEBwYXJhbSBlZmZlY3QgVGhlIGVmZmVjdCBjYWxsYmFjayB0byBydW4gb24gdXBkYXRlc1xuICogQHBhcmFtIGRlcHMgVGhlIGRlcGVuZGVuY3kgYXJyYXlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVXBkYXRlRWZmZWN0KGVmZmVjdCwgZGVwcykge1xuICAgIGNvbnN0IGlzTW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc01vdW50ZWQuY3VycmVudCkge1xuICAgICAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlZmZlY3QoKTtcbiAgICB9LCBkZXBzKTtcbn0iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9