@mantine/hooks 9.1.1 → 9.2.1

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 (194) hide show
  1. package/cjs/index.cjs +2 -0
  2. package/cjs/use-click-outside/use-click-outside.cjs.map +1 -1
  3. package/cjs/use-clipboard/use-clipboard.cjs.map +1 -1
  4. package/cjs/use-collapse/use-collapse.cjs.map +1 -1
  5. package/cjs/use-collapse/use-horizontal-collapse.cjs.map +1 -1
  6. package/cjs/use-color-scheme/use-color-scheme.cjs.map +1 -1
  7. package/cjs/use-counter/use-counter.cjs.map +1 -1
  8. package/cjs/use-debounced-callback/use-debounced-callback.cjs.map +1 -1
  9. package/cjs/use-debounced-state/use-debounced-state.cjs.map +1 -1
  10. package/cjs/use-debounced-value/use-debounced-value.cjs +3 -0
  11. package/cjs/use-debounced-value/use-debounced-value.cjs.map +1 -1
  12. package/cjs/use-did-update/use-did-update.cjs.map +1 -1
  13. package/cjs/use-disclosure/use-disclosure.cjs.map +1 -1
  14. package/cjs/use-document-title/use-document-title.cjs.map +1 -1
  15. package/cjs/use-document-visibility/use-document-visibility.cjs.map +1 -1
  16. package/cjs/use-drag/use-drag.cjs +266 -0
  17. package/cjs/use-drag/use-drag.cjs.map +1 -0
  18. package/cjs/use-event-listener/use-event-listener.cjs.map +1 -1
  19. package/cjs/use-eye-dropper/use-eye-dropper.cjs.map +1 -1
  20. package/cjs/use-favicon/use-favicon.cjs.map +1 -1
  21. package/cjs/use-fetch/use-fetch.cjs.map +1 -1
  22. package/cjs/use-file-dialog/use-file-dialog.cjs.map +1 -1
  23. package/cjs/use-floating-window/use-floating-window.cjs.map +1 -1
  24. package/cjs/use-focus-return/use-focus-return.cjs.map +1 -1
  25. package/cjs/use-focus-trap/scope-tab.cjs.map +1 -1
  26. package/cjs/use-focus-trap/tabbable.cjs.map +1 -1
  27. package/cjs/use-focus-trap/use-focus-trap.cjs.map +1 -1
  28. package/cjs/use-focus-within/use-focus-within.cjs.map +1 -1
  29. package/cjs/use-force-update/use-force-update.cjs.map +1 -1
  30. package/cjs/use-fullscreen/use-fullscreen.cjs.map +1 -1
  31. package/cjs/use-hash/use-hash.cjs.map +1 -1
  32. package/cjs/use-headroom/use-headroom.cjs.map +1 -1
  33. package/cjs/use-hotkeys/parse-hotkey.cjs.map +1 -1
  34. package/cjs/use-hotkeys/use-hotkeys.cjs.map +1 -1
  35. package/cjs/use-hover/use-hover.cjs.map +1 -1
  36. package/cjs/use-id/use-id.cjs.map +1 -1
  37. package/cjs/use-idle/use-idle.cjs.map +1 -1
  38. package/cjs/use-in-viewport/use-in-viewport.cjs.map +1 -1
  39. package/cjs/use-input-state/use-input-state.cjs.map +1 -1
  40. package/cjs/use-intersection/use-intersection.cjs.map +1 -1
  41. package/cjs/use-interval/use-interval.cjs.map +1 -1
  42. package/cjs/use-is-first-render/use-is-first-render.cjs.map +1 -1
  43. package/cjs/use-list-state/use-list-state.cjs.map +1 -1
  44. package/cjs/use-local-storage/create-storage.cjs.map +1 -1
  45. package/cjs/use-local-storage/use-local-storage.cjs.map +1 -1
  46. package/cjs/use-logger/use-logger.cjs.map +1 -1
  47. package/cjs/use-long-press/use-long-press.cjs.map +1 -1
  48. package/cjs/use-map/use-map.cjs.map +1 -1
  49. package/cjs/use-mask/use-mask.cjs.map +1 -1
  50. package/cjs/use-media-query/use-media-query.cjs.map +1 -1
  51. package/cjs/use-merged-ref/use-merged-ref.cjs.map +1 -1
  52. package/cjs/use-mounted/use-mounted.cjs.map +1 -1
  53. package/cjs/use-mouse/use-mouse.cjs.map +1 -1
  54. package/cjs/use-move/use-move.cjs.map +1 -1
  55. package/cjs/use-mutation-observer/use-mutation-observer.cjs.map +1 -1
  56. package/cjs/use-network/use-network.cjs.map +1 -1
  57. package/cjs/use-orientation/use-orientation.cjs.map +1 -1
  58. package/cjs/use-os/use-os.cjs.map +1 -1
  59. package/cjs/use-page-leave/use-page-leave.cjs.map +1 -1
  60. package/cjs/use-pagination/use-pagination.cjs.map +1 -1
  61. package/cjs/use-previous/use-previous.cjs.map +1 -1
  62. package/cjs/use-queue/use-queue.cjs.map +1 -1
  63. package/cjs/use-radial-move/use-radial-move.cjs +12 -4
  64. package/cjs/use-radial-move/use-radial-move.cjs.map +1 -1
  65. package/cjs/use-reduced-motion/use-reduced-motion.cjs.map +1 -1
  66. package/cjs/use-resize-observer/use-resize-observer.cjs.map +1 -1
  67. package/cjs/use-roving-index/use-roving-index.cjs.map +1 -1
  68. package/cjs/use-scroll-direction/use-scroll-direction.cjs.map +1 -1
  69. package/cjs/use-scroll-into-view/use-scroll-into-view.cjs.map +1 -1
  70. package/cjs/use-scroll-spy/use-scroll-spy.cjs.map +1 -1
  71. package/cjs/use-scroller/use-scroller.cjs.map +1 -1
  72. package/cjs/use-selection/use-selection.cjs.map +1 -1
  73. package/cjs/use-session-storage/use-session-storage.cjs.map +1 -1
  74. package/cjs/use-set/use-set.cjs.map +1 -1
  75. package/cjs/use-set-state/use-set-state.cjs.map +1 -1
  76. package/cjs/use-shallow-effect/use-shallow-effect.cjs.map +1 -1
  77. package/cjs/use-state-history/use-state-history.cjs.map +1 -1
  78. package/cjs/use-text-selection/use-text-selection.cjs.map +1 -1
  79. package/cjs/use-throttled-callback/use-throttled-callback.cjs.map +1 -1
  80. package/cjs/use-throttled-state/use-throttled-state.cjs.map +1 -1
  81. package/cjs/use-throttled-value/use-throttled-value.cjs.map +1 -1
  82. package/cjs/use-timeout/use-timeout.cjs.map +1 -1
  83. package/cjs/use-toggle/use-toggle.cjs.map +1 -1
  84. package/cjs/use-uncontrolled/use-uncontrolled.cjs.map +1 -1
  85. package/cjs/use-validated-state/use-validated-state.cjs.map +1 -1
  86. package/cjs/use-viewport-size/use-viewport-size.cjs.map +1 -1
  87. package/cjs/use-window-event/use-window-event.cjs.map +1 -1
  88. package/cjs/use-window-scroll/use-window-scroll.cjs.map +1 -1
  89. package/cjs/utils/clamp/clamp.cjs.map +1 -1
  90. package/cjs/utils/lower-first/lower-first.cjs.map +1 -1
  91. package/cjs/utils/random-id/random-id.cjs.map +1 -1
  92. package/cjs/utils/range/range.cjs.map +1 -1
  93. package/cjs/utils/shallow-equal/shallow-equal.cjs.map +1 -1
  94. package/cjs/utils/upper-first/upper-first.cjs.map +1 -1
  95. package/cjs/utils/use-callback-ref/use-callback-ref.cjs.map +1 -1
  96. package/esm/index.mjs +2 -1
  97. package/esm/use-click-outside/use-click-outside.mjs.map +1 -1
  98. package/esm/use-clipboard/use-clipboard.mjs.map +1 -1
  99. package/esm/use-collapse/use-collapse.mjs.map +1 -1
  100. package/esm/use-collapse/use-horizontal-collapse.mjs.map +1 -1
  101. package/esm/use-color-scheme/use-color-scheme.mjs.map +1 -1
  102. package/esm/use-counter/use-counter.mjs.map +1 -1
  103. package/esm/use-debounced-callback/use-debounced-callback.mjs.map +1 -1
  104. package/esm/use-debounced-state/use-debounced-state.mjs.map +1 -1
  105. package/esm/use-debounced-value/use-debounced-value.mjs +3 -0
  106. package/esm/use-debounced-value/use-debounced-value.mjs.map +1 -1
  107. package/esm/use-did-update/use-did-update.mjs.map +1 -1
  108. package/esm/use-disclosure/use-disclosure.mjs.map +1 -1
  109. package/esm/use-document-title/use-document-title.mjs.map +1 -1
  110. package/esm/use-document-visibility/use-document-visibility.mjs.map +1 -1
  111. package/esm/use-drag/use-drag.mjs +266 -0
  112. package/esm/use-drag/use-drag.mjs.map +1 -0
  113. package/esm/use-event-listener/use-event-listener.mjs.map +1 -1
  114. package/esm/use-eye-dropper/use-eye-dropper.mjs.map +1 -1
  115. package/esm/use-favicon/use-favicon.mjs.map +1 -1
  116. package/esm/use-fetch/use-fetch.mjs.map +1 -1
  117. package/esm/use-file-dialog/use-file-dialog.mjs.map +1 -1
  118. package/esm/use-floating-window/use-floating-window.mjs.map +1 -1
  119. package/esm/use-focus-return/use-focus-return.mjs.map +1 -1
  120. package/esm/use-focus-trap/scope-tab.mjs.map +1 -1
  121. package/esm/use-focus-trap/tabbable.mjs.map +1 -1
  122. package/esm/use-focus-trap/use-focus-trap.mjs.map +1 -1
  123. package/esm/use-focus-within/use-focus-within.mjs.map +1 -1
  124. package/esm/use-force-update/use-force-update.mjs.map +1 -1
  125. package/esm/use-fullscreen/use-fullscreen.mjs.map +1 -1
  126. package/esm/use-hash/use-hash.mjs.map +1 -1
  127. package/esm/use-headroom/use-headroom.mjs.map +1 -1
  128. package/esm/use-hotkeys/parse-hotkey.mjs.map +1 -1
  129. package/esm/use-hotkeys/use-hotkeys.mjs.map +1 -1
  130. package/esm/use-hover/use-hover.mjs.map +1 -1
  131. package/esm/use-id/use-id.mjs.map +1 -1
  132. package/esm/use-idle/use-idle.mjs.map +1 -1
  133. package/esm/use-in-viewport/use-in-viewport.mjs.map +1 -1
  134. package/esm/use-input-state/use-input-state.mjs.map +1 -1
  135. package/esm/use-intersection/use-intersection.mjs.map +1 -1
  136. package/esm/use-interval/use-interval.mjs.map +1 -1
  137. package/esm/use-is-first-render/use-is-first-render.mjs.map +1 -1
  138. package/esm/use-list-state/use-list-state.mjs.map +1 -1
  139. package/esm/use-local-storage/create-storage.mjs.map +1 -1
  140. package/esm/use-local-storage/use-local-storage.mjs.map +1 -1
  141. package/esm/use-logger/use-logger.mjs.map +1 -1
  142. package/esm/use-long-press/use-long-press.mjs.map +1 -1
  143. package/esm/use-map/use-map.mjs.map +1 -1
  144. package/esm/use-mask/use-mask.mjs.map +1 -1
  145. package/esm/use-media-query/use-media-query.mjs.map +1 -1
  146. package/esm/use-merged-ref/use-merged-ref.mjs.map +1 -1
  147. package/esm/use-mounted/use-mounted.mjs.map +1 -1
  148. package/esm/use-mouse/use-mouse.mjs.map +1 -1
  149. package/esm/use-move/use-move.mjs.map +1 -1
  150. package/esm/use-mutation-observer/use-mutation-observer.mjs.map +1 -1
  151. package/esm/use-network/use-network.mjs.map +1 -1
  152. package/esm/use-orientation/use-orientation.mjs.map +1 -1
  153. package/esm/use-os/use-os.mjs.map +1 -1
  154. package/esm/use-page-leave/use-page-leave.mjs.map +1 -1
  155. package/esm/use-pagination/use-pagination.mjs.map +1 -1
  156. package/esm/use-previous/use-previous.mjs.map +1 -1
  157. package/esm/use-queue/use-queue.mjs.map +1 -1
  158. package/esm/use-radial-move/use-radial-move.mjs +13 -5
  159. package/esm/use-radial-move/use-radial-move.mjs.map +1 -1
  160. package/esm/use-reduced-motion/use-reduced-motion.mjs.map +1 -1
  161. package/esm/use-resize-observer/use-resize-observer.mjs.map +1 -1
  162. package/esm/use-roving-index/use-roving-index.mjs.map +1 -1
  163. package/esm/use-scroll-direction/use-scroll-direction.mjs.map +1 -1
  164. package/esm/use-scroll-into-view/use-scroll-into-view.mjs.map +1 -1
  165. package/esm/use-scroll-spy/use-scroll-spy.mjs.map +1 -1
  166. package/esm/use-scroller/use-scroller.mjs.map +1 -1
  167. package/esm/use-selection/use-selection.mjs.map +1 -1
  168. package/esm/use-session-storage/use-session-storage.mjs.map +1 -1
  169. package/esm/use-set/use-set.mjs.map +1 -1
  170. package/esm/use-set-state/use-set-state.mjs.map +1 -1
  171. package/esm/use-shallow-effect/use-shallow-effect.mjs.map +1 -1
  172. package/esm/use-state-history/use-state-history.mjs.map +1 -1
  173. package/esm/use-text-selection/use-text-selection.mjs.map +1 -1
  174. package/esm/use-throttled-callback/use-throttled-callback.mjs.map +1 -1
  175. package/esm/use-throttled-state/use-throttled-state.mjs.map +1 -1
  176. package/esm/use-throttled-value/use-throttled-value.mjs.map +1 -1
  177. package/esm/use-timeout/use-timeout.mjs.map +1 -1
  178. package/esm/use-toggle/use-toggle.mjs.map +1 -1
  179. package/esm/use-uncontrolled/use-uncontrolled.mjs.map +1 -1
  180. package/esm/use-validated-state/use-validated-state.mjs.map +1 -1
  181. package/esm/use-viewport-size/use-viewport-size.mjs.map +1 -1
  182. package/esm/use-window-event/use-window-event.mjs.map +1 -1
  183. package/esm/use-window-scroll/use-window-scroll.mjs.map +1 -1
  184. package/esm/utils/clamp/clamp.mjs.map +1 -1
  185. package/esm/utils/lower-first/lower-first.mjs.map +1 -1
  186. package/esm/utils/random-id/random-id.mjs.map +1 -1
  187. package/esm/utils/range/range.mjs.map +1 -1
  188. package/esm/utils/shallow-equal/shallow-equal.mjs.map +1 -1
  189. package/esm/utils/upper-first/upper-first.mjs.map +1 -1
  190. package/esm/utils/use-callback-ref/use-callback-ref.mjs.map +1 -1
  191. package/lib/index.d.mts +2 -0
  192. package/lib/index.d.ts +2 -0
  193. package/lib/use-drag/use-drag.d.ts +60 -0
  194. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-uncontrolled.cjs","names":[],"sources":["../../src/use-uncontrolled/use-uncontrolled.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport interface UseUncontrolledOptions<T> {\n /** Value for controlled state */\n value?: T;\n\n /** Initial value for uncontrolled state */\n defaultValue?: T;\n\n /** Final value for uncontrolled state when value and defaultValue are not provided */\n finalValue?: T;\n\n /** Controlled state onChange handler */\n onChange?: (value: T, ...payload: any[]) => void;\n}\n\nexport type UseUncontrolledReturnValue<T> = [\n /** Current value */\n T,\n\n /** Handler to update the state, passes `value` and `payload` to `onChange` */\n (value: T, ...payload: any[]) => void,\n\n /** True if the state is controlled, false if uncontrolled */\n boolean,\n];\n\nexport function useUncontrolled<T>({\n value,\n defaultValue,\n finalValue,\n onChange = () => {},\n}: UseUncontrolledOptions<T>): UseUncontrolledReturnValue<T> {\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue !== undefined ? defaultValue : finalValue\n );\n\n const handleUncontrolledChange = (val: T, ...payload: any[]) => {\n setUncontrolledValue(val);\n onChange?.(val, ...payload);\n };\n\n if (value !== undefined) {\n return [value as T, onChange, true];\n }\n\n return [uncontrolledValue as T, handleUncontrolledChange, false];\n}\n\nexport namespace useUncontrolled {\n export type Options<T> = UseUncontrolledOptions<T>;\n export type ReturnValue<T> = UseUncontrolledReturnValue<T>;\n}\n"],"mappings":";;;AA2BA,SAAgB,gBAAmB,EACjC,OACA,cACA,YACA,iBAAiB,MAC0C;CAC3D,MAAM,CAAC,mBAAmB,yBAAA,GAAA,MAAA,UACxB,iBAAiB,KAAA,IAAY,eAAe,WAC7C;CAED,MAAM,4BAA4B,KAAQ,GAAG,YAAmB;AAC9D,uBAAqB,IAAI;AACzB,aAAW,KAAK,GAAG,QAAQ;;AAG7B,KAAI,UAAU,KAAA,EACZ,QAAO;EAAC;EAAY;EAAU;EAAK;AAGrC,QAAO;EAAC;EAAwB;EAA0B;EAAM"}
1
+ {"version":3,"file":"use-uncontrolled.cjs","names":[],"sources":["../../src/use-uncontrolled/use-uncontrolled.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport interface UseUncontrolledOptions<T> {\n /** Value for controlled state */\n value?: T;\n\n /** Initial value for uncontrolled state */\n defaultValue?: T;\n\n /** Final value for uncontrolled state when value and defaultValue are not provided */\n finalValue?: T;\n\n /** Controlled state onChange handler */\n onChange?: (value: T, ...payload: any[]) => void;\n}\n\nexport type UseUncontrolledReturnValue<T> = [\n /** Current value */\n T,\n\n /** Handler to update the state, passes `value` and `payload` to `onChange` */\n (value: T, ...payload: any[]) => void,\n\n /** True if the state is controlled, false if uncontrolled */\n boolean,\n];\n\nexport function useUncontrolled<T>({\n value,\n defaultValue,\n finalValue,\n onChange = () => {},\n}: UseUncontrolledOptions<T>): UseUncontrolledReturnValue<T> {\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue !== undefined ? defaultValue : finalValue\n );\n\n const handleUncontrolledChange = (val: T, ...payload: any[]) => {\n setUncontrolledValue(val);\n onChange?.(val, ...payload);\n };\n\n if (value !== undefined) {\n return [value as T, onChange, true];\n }\n\n return [uncontrolledValue as T, handleUncontrolledChange, false];\n}\n\nexport namespace useUncontrolled {\n export type Options<T> = UseUncontrolledOptions<T>;\n export type ReturnValue<T> = UseUncontrolledReturnValue<T>;\n}\n"],"mappings":";;;AA2BA,SAAgB,gBAAmB,EACjC,OACA,cACA,YACA,iBAAiB,CAAC,KACyC;CAC3D,MAAM,CAAC,mBAAmB,yBAAA,GAAA,MAAA,UACxB,iBAAiB,KAAA,IAAY,eAAe,UAC9C;CAEA,MAAM,4BAA4B,KAAQ,GAAG,YAAmB;EAC9D,qBAAqB,GAAG;EACxB,WAAW,KAAK,GAAG,OAAO;CAC5B;CAEA,IAAI,UAAU,KAAA,GACZ,OAAO;EAAC;EAAY;EAAU;CAAI;CAGpC,OAAO;EAAC;EAAwB;EAA0B;CAAK;AACjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-validated-state.cjs","names":[],"sources":["../../src/use-validated-state/use-validated-state.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport interface UseValidatedStateValue<T> {\n /** Current value */\n value: T;\n\n /** Last valid value */\n lastValidValue: T | undefined;\n\n /** True if the current value is valid, false otherwise */\n valid: boolean;\n}\n\nexport type UseValidatedStateReturnValue<T> = [\n /** Current value */\n UseValidatedStateValue<T>,\n /** Handler to update the state, passes `value` and `payload` to `onChange` */\n (value: T) => void,\n];\n\nexport function useValidatedState<T>(\n initialValue: T,\n validate: (value: T) => boolean,\n initialValidationState?: boolean\n): UseValidatedStateReturnValue<T> {\n const [value, setValue] = useState<T>(initialValue);\n const [lastValidValue, setLastValidValue] = useState<T | undefined>(\n validate(initialValue) ? initialValue : undefined\n );\n const [valid, setValid] = useState<boolean>(\n typeof initialValidationState === 'boolean' ? initialValidationState : validate(initialValue)\n );\n\n const onChange = (val: T) => {\n if (validate(val)) {\n setLastValidValue(val);\n setValid(true);\n } else {\n setValid(false);\n }\n\n setValue(val);\n };\n\n return [{ value, lastValidValue, valid }, onChange] as const;\n}\n\nexport namespace useValidatedState {\n export type ReturnValue<T> = UseValidatedStateReturnValue<T>;\n}\n"],"mappings":";;;AAoBA,SAAgB,kBACd,cACA,UACA,wBACiC;CACjC,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAwB,aAAa;CACnD,MAAM,CAAC,gBAAgB,sBAAA,GAAA,MAAA,UACrB,SAAS,aAAa,GAAG,eAAe,KAAA,EACzC;CACD,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UACZ,OAAO,2BAA2B,YAAY,yBAAyB,SAAS,aAAa,CAC9F;CAED,MAAM,YAAY,QAAW;AAC3B,MAAI,SAAS,IAAI,EAAE;AACjB,qBAAkB,IAAI;AACtB,YAAS,KAAK;QAEd,UAAS,MAAM;AAGjB,WAAS,IAAI;;AAGf,QAAO,CAAC;EAAE;EAAO;EAAgB;EAAO,EAAE,SAAS"}
1
+ {"version":3,"file":"use-validated-state.cjs","names":[],"sources":["../../src/use-validated-state/use-validated-state.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport interface UseValidatedStateValue<T> {\n /** Current value */\n value: T;\n\n /** Last valid value */\n lastValidValue: T | undefined;\n\n /** True if the current value is valid, false otherwise */\n valid: boolean;\n}\n\nexport type UseValidatedStateReturnValue<T> = [\n /** Current value */\n UseValidatedStateValue<T>,\n /** Handler to update the state, passes `value` and `payload` to `onChange` */\n (value: T) => void,\n];\n\nexport function useValidatedState<T>(\n initialValue: T,\n validate: (value: T) => boolean,\n initialValidationState?: boolean\n): UseValidatedStateReturnValue<T> {\n const [value, setValue] = useState<T>(initialValue);\n const [lastValidValue, setLastValidValue] = useState<T | undefined>(\n validate(initialValue) ? initialValue : undefined\n );\n const [valid, setValid] = useState<boolean>(\n typeof initialValidationState === 'boolean' ? initialValidationState : validate(initialValue)\n );\n\n const onChange = (val: T) => {\n if (validate(val)) {\n setLastValidValue(val);\n setValid(true);\n } else {\n setValid(false);\n }\n\n setValue(val);\n };\n\n return [{ value, lastValidValue, valid }, onChange] as const;\n}\n\nexport namespace useValidatedState {\n export type ReturnValue<T> = UseValidatedStateReturnValue<T>;\n}\n"],"mappings":";;;AAoBA,SAAgB,kBACd,cACA,UACA,wBACiC;CACjC,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAwB,YAAY;CAClD,MAAM,CAAC,gBAAgB,sBAAA,GAAA,MAAA,UACrB,SAAS,YAAY,IAAI,eAAe,KAAA,CAC1C;CACA,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UACZ,OAAO,2BAA2B,YAAY,yBAAyB,SAAS,YAAY,CAC9F;CAEA,MAAM,YAAY,QAAW;EAC3B,IAAI,SAAS,GAAG,GAAG;GACjB,kBAAkB,GAAG;GACrB,SAAS,IAAI;EACf,OACE,SAAS,KAAK;EAGhB,SAAS,GAAG;CACd;CAEA,OAAO,CAAC;EAAE;EAAO;EAAgB;CAAM,GAAG,QAAQ;AACpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-viewport-size.cjs","names":[],"sources":["../../src/use-viewport-size/use-viewport-size.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nconst eventListenerOptions = {\n passive: true,\n};\n\nexport function useViewportSize() {\n const [windowSize, setWindowSize] = useState({\n width: 0,\n height: 0,\n });\n\n const setSize = useCallback(() => {\n setWindowSize({ width: window.innerWidth || 0, height: window.innerHeight || 0 });\n }, []);\n\n useWindowEvent('resize', setSize, eventListenerOptions);\n useWindowEvent('orientationchange', setSize, eventListenerOptions);\n useEffect(setSize, []);\n\n return windowSize;\n}\n"],"mappings":";;;;AAGA,MAAM,uBAAuB,EAC3B,SAAS,MACV;AAED,SAAgB,kBAAkB;CAChC,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,UAA0B;EAC3C,OAAO;EACP,QAAQ;EACT,CAAC;CAEF,MAAM,WAAA,GAAA,MAAA,mBAA4B;AAChC,gBAAc;GAAE,OAAO,OAAO,cAAc;GAAG,QAAQ,OAAO,eAAe;GAAG,CAAC;IAChF,EAAE,CAAC;AAEN,0BAAA,eAAe,UAAU,SAAS,qBAAqB;AACvD,0BAAA,eAAe,qBAAqB,SAAS,qBAAqB;AAClE,EAAA,GAAA,MAAA,WAAU,SAAS,EAAE,CAAC;AAEtB,QAAO"}
1
+ {"version":3,"file":"use-viewport-size.cjs","names":[],"sources":["../../src/use-viewport-size/use-viewport-size.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nconst eventListenerOptions = {\n passive: true,\n};\n\nexport function useViewportSize() {\n const [windowSize, setWindowSize] = useState({\n width: 0,\n height: 0,\n });\n\n const setSize = useCallback(() => {\n setWindowSize({ width: window.innerWidth || 0, height: window.innerHeight || 0 });\n }, []);\n\n useWindowEvent('resize', setSize, eventListenerOptions);\n useWindowEvent('orientationchange', setSize, eventListenerOptions);\n useEffect(setSize, []);\n\n return windowSize;\n}\n"],"mappings":";;;;AAGA,MAAM,uBAAuB,EAC3B,SAAS,KACX;AAEA,SAAgB,kBAAkB;CAChC,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,UAA0B;EAC3C,OAAO;EACP,QAAQ;CACV,CAAC;CAED,MAAM,WAAA,GAAA,MAAA,mBAA4B;EAChC,cAAc;GAAE,OAAO,OAAO,cAAc;GAAG,QAAQ,OAAO,eAAe;EAAE,CAAC;CAClF,GAAG,CAAC,CAAC;CAEL,yBAAA,eAAe,UAAU,SAAS,oBAAoB;CACtD,yBAAA,eAAe,qBAAqB,SAAS,oBAAoB;CACjE,CAAA,GAAA,MAAA,WAAU,SAAS,CAAC,CAAC;CAErB,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-window-event.cjs","names":[],"sources":["../../src/use-window-event/use-window-event.ts"],"sourcesContent":["import { useEffect, useEffectEvent } from 'react';\n\nexport function useWindowEvent<K extends string>(\n type: K,\n listener: K extends keyof WindowEventMap\n ? (this: Window, ev: WindowEventMap[K]) => void\n : (this: Window, ev: CustomEvent) => void,\n options?: boolean | AddEventListenerOptions\n) {\n const stableListener = useEffectEvent(listener);\n\n useEffect(() => {\n window.addEventListener(type as any, stableListener, options);\n return () => window.removeEventListener(type as any, stableListener, options);\n }, [type]);\n}\n"],"mappings":";;;AAEA,SAAgB,eACd,MACA,UAGA,SACA;CACA,MAAM,kBAAA,GAAA,MAAA,gBAAgC,SAAS;AAE/C,EAAA,GAAA,MAAA,iBAAgB;AACd,SAAO,iBAAiB,MAAa,gBAAgB,QAAQ;AAC7D,eAAa,OAAO,oBAAoB,MAAa,gBAAgB,QAAQ;IAC5E,CAAC,KAAK,CAAC"}
1
+ {"version":3,"file":"use-window-event.cjs","names":[],"sources":["../../src/use-window-event/use-window-event.ts"],"sourcesContent":["import { useEffect, useEffectEvent } from 'react';\n\nexport function useWindowEvent<K extends string>(\n type: K,\n listener: K extends keyof WindowEventMap\n ? (this: Window, ev: WindowEventMap[K]) => void\n : (this: Window, ev: CustomEvent) => void,\n options?: boolean | AddEventListenerOptions\n) {\n const stableListener = useEffectEvent(listener);\n\n useEffect(() => {\n window.addEventListener(type as any, stableListener, options);\n return () => window.removeEventListener(type as any, stableListener, options);\n }, [type]);\n}\n"],"mappings":";;;AAEA,SAAgB,eACd,MACA,UAGA,SACA;CACA,MAAM,kBAAA,GAAA,MAAA,gBAAgC,QAAQ;CAE9C,CAAA,GAAA,MAAA,iBAAgB;EACd,OAAO,iBAAiB,MAAa,gBAAgB,OAAO;EAC5D,aAAa,OAAO,oBAAoB,MAAa,gBAAgB,OAAO;CAC9E,GAAG,CAAC,IAAI,CAAC;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-window-scroll.cjs","names":[],"sources":["../../src/use-window-scroll/use-window-scroll.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nexport interface UseWindowScrollPosition {\n x: number;\n y: number;\n}\n\nexport type UseWindowScrollTo = (position: Partial<UseWindowScrollPosition>) => void;\nexport type UseWindowScrollReturnValue = [UseWindowScrollPosition, UseWindowScrollTo];\n\nfunction getScrollPosition(): UseWindowScrollPosition {\n return typeof window !== 'undefined' ? { x: window.scrollX, y: window.scrollY } : { x: 0, y: 0 };\n}\n\nfunction scrollTo({ x, y }: Partial<UseWindowScrollPosition>) {\n if (typeof window !== 'undefined') {\n const scrollOptions: ScrollToOptions = { behavior: 'smooth' };\n\n if (typeof x === 'number') {\n scrollOptions.left = x;\n }\n\n if (typeof y === 'number') {\n scrollOptions.top = y;\n }\n\n window.scrollTo(scrollOptions);\n }\n}\n\nexport function useWindowScroll(): UseWindowScrollReturnValue {\n const [position, setPosition] = useState<UseWindowScrollPosition>({ x: 0, y: 0 });\n\n useWindowEvent('scroll', () => setPosition(getScrollPosition()), { passive: true });\n useWindowEvent('resize', () => setPosition(getScrollPosition()), { passive: true });\n\n useEffect(() => {\n setPosition(getScrollPosition());\n }, []);\n\n return [position, scrollTo] as const;\n}\n\nexport namespace useWindowScroll {\n export type Position = UseWindowScrollPosition;\n export type ScrollTo = UseWindowScrollTo;\n export type ReturnValue = UseWindowScrollReturnValue;\n}\n"],"mappings":";;;;AAWA,SAAS,oBAA6C;AACpD,QAAO,OAAO,WAAW,cAAc;EAAE,GAAG,OAAO;EAAS,GAAG,OAAO;EAAS,GAAG;EAAE,GAAG;EAAG,GAAG;EAAG;;AAGlG,SAAS,SAAS,EAAE,GAAG,KAAuC;AAC5D,KAAI,OAAO,WAAW,aAAa;EACjC,MAAM,gBAAiC,EAAE,UAAU,UAAU;AAE7D,MAAI,OAAO,MAAM,SACf,eAAc,OAAO;AAGvB,MAAI,OAAO,MAAM,SACf,eAAc,MAAM;AAGtB,SAAO,SAAS,cAAc;;;AAIlC,SAAgB,kBAA8C;CAC5D,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAiD;EAAE,GAAG;EAAG,GAAG;EAAG,CAAC;AAEjF,0BAAA,eAAe,gBAAgB,YAAY,mBAAmB,CAAC,EAAE,EAAE,SAAS,MAAM,CAAC;AACnF,0BAAA,eAAe,gBAAgB,YAAY,mBAAmB,CAAC,EAAE,EAAE,SAAS,MAAM,CAAC;AAEnF,EAAA,GAAA,MAAA,iBAAgB;AACd,cAAY,mBAAmB,CAAC;IAC/B,EAAE,CAAC;AAEN,QAAO,CAAC,UAAU,SAAS"}
1
+ {"version":3,"file":"use-window-scroll.cjs","names":[],"sources":["../../src/use-window-scroll/use-window-scroll.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nexport interface UseWindowScrollPosition {\n x: number;\n y: number;\n}\n\nexport type UseWindowScrollTo = (position: Partial<UseWindowScrollPosition>) => void;\nexport type UseWindowScrollReturnValue = [UseWindowScrollPosition, UseWindowScrollTo];\n\nfunction getScrollPosition(): UseWindowScrollPosition {\n return typeof window !== 'undefined' ? { x: window.scrollX, y: window.scrollY } : { x: 0, y: 0 };\n}\n\nfunction scrollTo({ x, y }: Partial<UseWindowScrollPosition>) {\n if (typeof window !== 'undefined') {\n const scrollOptions: ScrollToOptions = { behavior: 'smooth' };\n\n if (typeof x === 'number') {\n scrollOptions.left = x;\n }\n\n if (typeof y === 'number') {\n scrollOptions.top = y;\n }\n\n window.scrollTo(scrollOptions);\n }\n}\n\nexport function useWindowScroll(): UseWindowScrollReturnValue {\n const [position, setPosition] = useState<UseWindowScrollPosition>({ x: 0, y: 0 });\n\n useWindowEvent('scroll', () => setPosition(getScrollPosition()), { passive: true });\n useWindowEvent('resize', () => setPosition(getScrollPosition()), { passive: true });\n\n useEffect(() => {\n setPosition(getScrollPosition());\n }, []);\n\n return [position, scrollTo] as const;\n}\n\nexport namespace useWindowScroll {\n export type Position = UseWindowScrollPosition;\n export type ScrollTo = UseWindowScrollTo;\n export type ReturnValue = UseWindowScrollReturnValue;\n}\n"],"mappings":";;;;AAWA,SAAS,oBAA6C;CACpD,OAAO,OAAO,WAAW,cAAc;EAAE,GAAG,OAAO;EAAS,GAAG,OAAO;CAAQ,IAAI;EAAE,GAAG;EAAG,GAAG;CAAE;AACjG;AAEA,SAAS,SAAS,EAAE,GAAG,KAAuC;CAC5D,IAAI,OAAO,WAAW,aAAa;EACjC,MAAM,gBAAiC,EAAE,UAAU,SAAS;EAE5D,IAAI,OAAO,MAAM,UACf,cAAc,OAAO;EAGvB,IAAI,OAAO,MAAM,UACf,cAAc,MAAM;EAGtB,OAAO,SAAS,aAAa;CAC/B;AACF;AAEA,SAAgB,kBAA8C;CAC5D,MAAM,CAAC,UAAU,gBAAA,GAAA,MAAA,UAAiD;EAAE,GAAG;EAAG,GAAG;CAAE,CAAC;CAEhF,yBAAA,eAAe,gBAAgB,YAAY,kBAAkB,CAAC,GAAG,EAAE,SAAS,KAAK,CAAC;CAClF,yBAAA,eAAe,gBAAgB,YAAY,kBAAkB,CAAC,GAAG,EAAE,SAAS,KAAK,CAAC;CAElF,CAAA,GAAA,MAAA,iBAAgB;EACd,YAAY,kBAAkB,CAAC;CACjC,GAAG,CAAC,CAAC;CAEL,OAAO,CAAC,UAAU,QAAQ;AAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"clamp.cjs","names":[],"sources":["../../../src/utils/clamp/clamp.ts"],"sourcesContent":["export function clamp(value: number, min: number | undefined, max: number | undefined) {\n if (min === undefined && max === undefined) {\n return value;\n }\n\n if (min !== undefined && max === undefined) {\n return Math.max(value, min);\n }\n\n if (min === undefined && max !== undefined) {\n return Math.min(value, max);\n }\n\n return Math.min(Math.max(value, min!), max!);\n}\n"],"mappings":";;AAAA,SAAgB,MAAM,OAAe,KAAyB,KAAyB;AACrF,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAA,EAC/B,QAAO;AAGT,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAA,EAC/B,QAAO,KAAK,IAAI,OAAO,IAAI;AAG7B,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAA,EAC/B,QAAO,KAAK,IAAI,OAAO,IAAI;AAG7B,QAAO,KAAK,IAAI,KAAK,IAAI,OAAO,IAAK,EAAE,IAAK"}
1
+ {"version":3,"file":"clamp.cjs","names":[],"sources":["../../../src/utils/clamp/clamp.ts"],"sourcesContent":["export function clamp(value: number, min: number | undefined, max: number | undefined) {\n if (min === undefined && max === undefined) {\n return value;\n }\n\n if (min !== undefined && max === undefined) {\n return Math.max(value, min);\n }\n\n if (min === undefined && max !== undefined) {\n return Math.min(value, max);\n }\n\n return Math.min(Math.max(value, min!), max!);\n}\n"],"mappings":";;AAAA,SAAgB,MAAM,OAAe,KAAyB,KAAyB;CACrF,IAAI,QAAQ,KAAA,KAAa,QAAQ,KAAA,GAC/B,OAAO;CAGT,IAAI,QAAQ,KAAA,KAAa,QAAQ,KAAA,GAC/B,OAAO,KAAK,IAAI,OAAO,GAAG;CAG5B,IAAI,QAAQ,KAAA,KAAa,QAAQ,KAAA,GAC/B,OAAO,KAAK,IAAI,OAAO,GAAG;CAG5B,OAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAI,GAAG,GAAI;AAC7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"lower-first.cjs","names":[],"sources":["../../../src/utils/lower-first/lower-first.ts"],"sourcesContent":["export function lowerFirst(value: string) {\n return typeof value !== 'string' ? '' : value.charAt(0).toLowerCase() + value.slice(1);\n}\n"],"mappings":";;AAAA,SAAgB,WAAW,OAAe;AACxC,QAAO,OAAO,UAAU,WAAW,KAAK,MAAM,OAAO,EAAE,CAAC,aAAa,GAAG,MAAM,MAAM,EAAE"}
1
+ {"version":3,"file":"lower-first.cjs","names":[],"sources":["../../../src/utils/lower-first/lower-first.ts"],"sourcesContent":["export function lowerFirst(value: string) {\n return typeof value !== 'string' ? '' : value.charAt(0).toLowerCase() + value.slice(1);\n}\n"],"mappings":";;AAAA,SAAgB,WAAW,OAAe;CACxC,OAAO,OAAO,UAAU,WAAW,KAAK,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC;AACvF"}
@@ -1 +1 @@
1
- {"version":3,"file":"random-id.cjs","names":[],"sources":["../../../src/utils/random-id/random-id.ts"],"sourcesContent":["export function randomId(prefix = 'mantine-'): string {\n return `${prefix}${Math.random().toString(36).slice(2, 11)}`;\n}\n"],"mappings":";;AAAA,SAAgB,SAAS,SAAS,YAAoB;AACpD,QAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,GAAG"}
1
+ {"version":3,"file":"random-id.cjs","names":[],"sources":["../../../src/utils/random-id/random-id.ts"],"sourcesContent":["export function randomId(prefix = 'mantine-'): string {\n return `${prefix}${Math.random().toString(36).slice(2, 11)}`;\n}\n"],"mappings":";;AAAA,SAAgB,SAAS,SAAS,YAAoB;CACpD,OAAO,GAAG,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE;AAC3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"range.cjs","names":[],"sources":["../../../src/utils/range/range.ts"],"sourcesContent":["export function range(start: number, end: number) {\n const length = Math.abs(end - start) + 1;\n const reversed = start > end;\n\n if (!reversed) {\n return Array.from({ length }, (_, index) => index + start);\n }\n\n return Array.from({ length }, (_, index) => start - index);\n}\n"],"mappings":";;AAAA,SAAgB,MAAM,OAAe,KAAa;CAChD,MAAM,SAAS,KAAK,IAAI,MAAM,MAAM,GAAG;AAGvC,KAAI,EAFa,QAAQ,KAGvB,QAAO,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,UAAU,QAAQ,MAAM;AAG5D,QAAO,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,UAAU,QAAQ,MAAM"}
1
+ {"version":3,"file":"range.cjs","names":[],"sources":["../../../src/utils/range/range.ts"],"sourcesContent":["export function range(start: number, end: number) {\n const length = Math.abs(end - start) + 1;\n const reversed = start > end;\n\n if (!reversed) {\n return Array.from({ length }, (_, index) => index + start);\n }\n\n return Array.from({ length }, (_, index) => start - index);\n}\n"],"mappings":";;AAAA,SAAgB,MAAM,OAAe,KAAa;CAChD,MAAM,SAAS,KAAK,IAAI,MAAM,KAAK,IAAI;CAGvC,IAAI,EAFa,QAAQ,MAGvB,OAAO,MAAM,KAAK,EAAE,OAAO,IAAI,GAAG,UAAU,QAAQ,KAAK;CAG3D,OAAO,MAAM,KAAK,EAAE,OAAO,IAAI,GAAG,UAAU,QAAQ,KAAK;AAC3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"shallow-equal.cjs","names":[],"sources":["../../../src/utils/shallow-equal/shallow-equal.ts"],"sourcesContent":["export function shallowEqual(a: any, b: any) {\n if (a === b) {\n return true;\n }\n\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n\n if (!(a instanceof Object) || !(b instanceof Object)) {\n return false;\n }\n\n const keys = Object.keys(a);\n const { length } = keys;\n\n if (length !== Object.keys(b).length) {\n return false;\n }\n\n for (let i = 0; i < length; i += 1) {\n const key = keys[i];\n\n if (!(key in b)) {\n return false;\n }\n\n if (a[key] !== b[key] && !(Number.isNaN(a[key]) && Number.isNaN(b[key]))) {\n return false;\n }\n }\n\n return true;\n}\n"],"mappings":";;AAAA,SAAgB,aAAa,GAAQ,GAAQ;AAC3C,KAAI,MAAM,EACR,QAAO;AAGT,KAAI,OAAO,MAAM,EAAE,IAAI,OAAO,MAAM,EAAE,CACpC,QAAO;AAGT,KAAI,EAAE,aAAa,WAAW,EAAE,aAAa,QAC3C,QAAO;CAGT,MAAM,OAAO,OAAO,KAAK,EAAE;CAC3B,MAAM,EAAE,WAAW;AAEnB,KAAI,WAAW,OAAO,KAAK,EAAE,CAAC,OAC5B,QAAO;AAGT,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;EAClC,MAAM,MAAM,KAAK;AAEjB,MAAI,EAAE,OAAO,GACX,QAAO;AAGT,MAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,MAAM,EAAE,KAAK,IAAI,OAAO,MAAM,EAAE,KAAK,EACrE,QAAO;;AAIX,QAAO"}
1
+ {"version":3,"file":"shallow-equal.cjs","names":[],"sources":["../../../src/utils/shallow-equal/shallow-equal.ts"],"sourcesContent":["export function shallowEqual(a: any, b: any) {\n if (a === b) {\n return true;\n }\n\n if (Number.isNaN(a) && Number.isNaN(b)) {\n return true;\n }\n\n if (!(a instanceof Object) || !(b instanceof Object)) {\n return false;\n }\n\n const keys = Object.keys(a);\n const { length } = keys;\n\n if (length !== Object.keys(b).length) {\n return false;\n }\n\n for (let i = 0; i < length; i += 1) {\n const key = keys[i];\n\n if (!(key in b)) {\n return false;\n }\n\n if (a[key] !== b[key] && !(Number.isNaN(a[key]) && Number.isNaN(b[key]))) {\n return false;\n }\n }\n\n return true;\n}\n"],"mappings":";;AAAA,SAAgB,aAAa,GAAQ,GAAQ;CAC3C,IAAI,MAAM,GACR,OAAO;CAGT,IAAI,OAAO,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,GACnC,OAAO;CAGT,IAAI,EAAE,aAAa,WAAW,EAAE,aAAa,SAC3C,OAAO;CAGT,MAAM,OAAO,OAAO,KAAK,CAAC;CAC1B,MAAM,EAAE,WAAW;CAEnB,IAAI,WAAW,OAAO,KAAK,CAAC,EAAE,QAC5B,OAAO;CAGT,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;EAClC,MAAM,MAAM,KAAK;EAEjB,IAAI,EAAE,OAAO,IACX,OAAO;EAGT,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,MAAM,EAAE,IAAI,KAAK,OAAO,MAAM,EAAE,IAAI,IACpE,OAAO;CAEX;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"upper-first.cjs","names":[],"sources":["../../../src/utils/upper-first/upper-first.ts"],"sourcesContent":["export function upperFirst(value: string) {\n return typeof value !== 'string' ? '' : value.charAt(0).toUpperCase() + value.slice(1);\n}\n"],"mappings":";;AAAA,SAAgB,WAAW,OAAe;AACxC,QAAO,OAAO,UAAU,WAAW,KAAK,MAAM,OAAO,EAAE,CAAC,aAAa,GAAG,MAAM,MAAM,EAAE"}
1
+ {"version":3,"file":"upper-first.cjs","names":[],"sources":["../../../src/utils/upper-first/upper-first.ts"],"sourcesContent":["export function upperFirst(value: string) {\n return typeof value !== 'string' ? '' : value.charAt(0).toUpperCase() + value.slice(1);\n}\n"],"mappings":";;AAAA,SAAgB,WAAW,OAAe;CACxC,OAAO,OAAO,UAAU,WAAW,KAAK,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC;AACvF"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-callback-ref.cjs","names":[],"sources":["../../../src/utils/use-callback-ref/use-callback-ref.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\n\nexport function useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n });\n\n return useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n"],"mappings":";;;AAEA,SAAgB,eAAkD,UAA4B;CAC5F,MAAM,eAAA,GAAA,MAAA,QAAqB,SAAS;AAEpC,EAAA,GAAA,MAAA,iBAAgB;AACd,cAAY,UAAU;GACtB;AAEF,SAAA,GAAA,MAAA,iBAAuB,GAAG,SAAS,YAAY,UAAU,GAAG,KAAK,GAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"use-callback-ref.cjs","names":[],"sources":["../../../src/utils/use-callback-ref/use-callback-ref.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\n\nexport function useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n });\n\n return useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n"],"mappings":";;;AAEA,SAAgB,eAAkD,UAA4B;CAC5F,MAAM,eAAA,GAAA,MAAA,QAAqB,QAAQ;CAEnC,CAAA,GAAA,MAAA,iBAAgB;EACd,YAAY,UAAU;CACxB,CAAC;CAED,QAAA,GAAA,MAAA,iBAAuB,GAAG,SAAS,YAAY,UAAU,GAAG,IAAI,IAAS,CAAC,CAAC;AAC7E"}
package/esm/index.mjs CHANGED
@@ -86,4 +86,5 @@ import { useCollapse } from "./use-collapse/use-collapse.mjs";
86
86
  import { useHorizontalCollapse } from "./use-collapse/use-horizontal-collapse.mjs";
87
87
  import { formatMask, generatePattern, isMaskComplete, unformatMask, useMask } from "./use-mask/use-mask.mjs";
88
88
  import { useRovingIndex } from "./use-roving-index/use-roving-index.mjs";
89
- export { assignRef, clamp, clampUseMovePosition, formatMask, generatePattern, getHotkeyHandler, isMaskComplete, lowerFirst, mergeRefs, normalizeRadialValue, randomId, range, readLocalStorageValue, readSessionStorageValue, shallowEqual, unformatMask, upperFirst, useCallbackRef, useClickOutside, useClipboard, useCollapse, useColorScheme, useCounter, useDebouncedCallback, useDebouncedState, useDebouncedValue, useDidUpdate, useDisclosure, useDocumentTitle, useDocumentVisibility, useElementSize, useEventListener, useEyeDropper, useFavicon, useFetch, useFileDialog, useFloatingWindow, useFocusReturn, useFocusTrap, useFocusWithin, useForceUpdate, useFullscreenDocument, useFullscreenElement, useHash, useHeadroom, useHorizontalCollapse, useHotkeys, useHover, useId, useIdle, useInViewport, useInputState, useIntersection, useInterval, useIsFirstRender, useIsomorphicEffect, useListState, useLocalStorage, useLogger, useLongPress, useMap, useMask, useMediaQuery, useMergedRef, useMounted, useMouse, useMousePosition, useMove, useMutationObserver, useMutationObserverTarget, useNetwork, useOrientation, useOs, usePageLeave, usePagination, usePrevious, useQueue, useRadialMove, useReducedMotion, useResizeObserver, useRovingIndex, useScrollDirection, useScrollIntoView, useScrollSpy, useScroller, useSelection, useSessionStorage, useSet, useSetState, useShallowEffect, useStateHistory, useTextSelection, useThrottledCallback, useThrottledState, useThrottledValue, useTimeout, useToggle, useUncontrolled, useValidatedState, useViewportSize, useWindowEvent, useWindowScroll };
89
+ import { useDrag } from "./use-drag/use-drag.mjs";
90
+ export { assignRef, clamp, clampUseMovePosition, formatMask, generatePattern, getHotkeyHandler, isMaskComplete, lowerFirst, mergeRefs, normalizeRadialValue, randomId, range, readLocalStorageValue, readSessionStorageValue, shallowEqual, unformatMask, upperFirst, useCallbackRef, useClickOutside, useClipboard, useCollapse, useColorScheme, useCounter, useDebouncedCallback, useDebouncedState, useDebouncedValue, useDidUpdate, useDisclosure, useDocumentTitle, useDocumentVisibility, useDrag, useElementSize, useEventListener, useEyeDropper, useFavicon, useFetch, useFileDialog, useFloatingWindow, useFocusReturn, useFocusTrap, useFocusWithin, useForceUpdate, useFullscreenDocument, useFullscreenElement, useHash, useHeadroom, useHorizontalCollapse, useHotkeys, useHover, useId, useIdle, useInViewport, useInputState, useIntersection, useInterval, useIsFirstRender, useIsomorphicEffect, useListState, useLocalStorage, useLogger, useLongPress, useMap, useMask, useMediaQuery, useMergedRef, useMounted, useMouse, useMousePosition, useMove, useMutationObserver, useMutationObserverTarget, useNetwork, useOrientation, useOs, usePageLeave, usePagination, usePrevious, useQueue, useRadialMove, useReducedMotion, useResizeObserver, useRovingIndex, useScrollDirection, useScrollIntoView, useScrollSpy, useScroller, useSelection, useSessionStorage, useSet, useSetState, useShallowEffect, useStateHistory, useTextSelection, useThrottledCallback, useThrottledState, useThrottledValue, useTimeout, useToggle, useUncontrolled, useValidatedState, useViewportSize, useWindowEvent, useWindowScroll };
@@ -1 +1 @@
1
- {"version":3,"file":"use-click-outside.mjs","names":[],"sources":["../../src/use-click-outside/use-click-outside.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef } from 'react';\n\ntype EventType = MouseEvent | TouchEvent;\n\nconst DEFAULT_EVENTS = ['mousedown', 'touchstart'];\n\nexport function useClickOutside<T extends HTMLElement = any>(\n callback: (event: EventType) => void,\n events?: string[] | null,\n nodes?: (HTMLElement | null)[],\n enabled: boolean = true\n) {\n const ref = useRef<T>(null);\n const eventsList = events || DEFAULT_EVENTS;\n\n const listener = useEffectEvent((event: Event) => {\n const { target } = event ?? {};\n const shouldIgnore =\n !document.body.contains(target as Node) && (target as Element)?.tagName !== 'HTML';\n\n if (shouldIgnore) {\n return;\n }\n\n const path = event.composedPath();\n\n if (Array.isArray(nodes)) {\n const shouldTrigger = nodes.every((node) => !!node && !path.includes(node));\n shouldTrigger && callback(event as EventType);\n } else if (ref.current && !path.includes(ref.current)) {\n callback(event as EventType);\n }\n });\n\n const eventsKey = eventsList.join(',');\n\n useEffect(() => {\n if (!enabled) {\n return undefined;\n }\n\n const events = eventsKey.split(',');\n events.forEach((fn) => document.addEventListener(fn, listener));\n\n return () => {\n events.forEach((fn) => document.removeEventListener(fn, listener));\n };\n }, [eventsKey, enabled]);\n\n return ref;\n}\n"],"mappings":";;;AAIA,MAAM,iBAAiB,CAAC,aAAa,aAAa;AAElD,SAAgB,gBACd,UACA,QACA,OACA,UAAmB,MACnB;CACA,MAAM,MAAM,OAAU,KAAK;CAC3B,MAAM,aAAa,UAAU;CAE7B,MAAM,WAAW,gBAAgB,UAAiB;EAChD,MAAM,EAAE,WAAW,SAAS,EAAE;AAI9B,MAFE,CAAC,SAAS,KAAK,SAAS,OAAe,IAAK,QAAoB,YAAY,OAG5E;EAGF,MAAM,OAAO,MAAM,cAAc;AAEjC,MAAI,MAAM,QAAQ,MAAM,CACA,OAAM,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,SAAS,KAAK,CAAC,IAC1D,SAAS,MAAmB;WACpC,IAAI,WAAW,CAAC,KAAK,SAAS,IAAI,QAAQ,CACnD,UAAS,MAAmB;GAE9B;CAEF,MAAM,YAAY,WAAW,KAAK,IAAI;AAEtC,iBAAgB;AACd,MAAI,CAAC,QACH;EAGF,MAAM,SAAS,UAAU,MAAM,IAAI;AACnC,SAAO,SAAS,OAAO,SAAS,iBAAiB,IAAI,SAAS,CAAC;AAE/D,eAAa;AACX,UAAO,SAAS,OAAO,SAAS,oBAAoB,IAAI,SAAS,CAAC;;IAEnE,CAAC,WAAW,QAAQ,CAAC;AAExB,QAAO"}
1
+ {"version":3,"file":"use-click-outside.mjs","names":[],"sources":["../../src/use-click-outside/use-click-outside.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef } from 'react';\n\ntype EventType = MouseEvent | TouchEvent;\n\nconst DEFAULT_EVENTS = ['mousedown', 'touchstart'];\n\nexport function useClickOutside<T extends HTMLElement = any>(\n callback: (event: EventType) => void,\n events?: string[] | null,\n nodes?: (HTMLElement | null)[],\n enabled: boolean = true\n) {\n const ref = useRef<T>(null);\n const eventsList = events || DEFAULT_EVENTS;\n\n const listener = useEffectEvent((event: Event) => {\n const { target } = event ?? {};\n const shouldIgnore =\n !document.body.contains(target as Node) && (target as Element)?.tagName !== 'HTML';\n\n if (shouldIgnore) {\n return;\n }\n\n const path = event.composedPath();\n\n if (Array.isArray(nodes)) {\n const shouldTrigger = nodes.every((node) => !!node && !path.includes(node));\n shouldTrigger && callback(event as EventType);\n } else if (ref.current && !path.includes(ref.current)) {\n callback(event as EventType);\n }\n });\n\n const eventsKey = eventsList.join(',');\n\n useEffect(() => {\n if (!enabled) {\n return undefined;\n }\n\n const events = eventsKey.split(',');\n events.forEach((fn) => document.addEventListener(fn, listener));\n\n return () => {\n events.forEach((fn) => document.removeEventListener(fn, listener));\n };\n }, [eventsKey, enabled]);\n\n return ref;\n}\n"],"mappings":";;;AAIA,MAAM,iBAAiB,CAAC,aAAa,YAAY;AAEjD,SAAgB,gBACd,UACA,QACA,OACA,UAAmB,MACnB;CACA,MAAM,MAAM,OAAU,IAAI;CAC1B,MAAM,aAAa,UAAU;CAE7B,MAAM,WAAW,gBAAgB,UAAiB;EAChD,MAAM,EAAE,WAAW,SAAS,CAAC;EAI7B,IAFE,CAAC,SAAS,KAAK,SAAS,MAAc,KAAM,QAAoB,YAAY,QAG5E;EAGF,MAAM,OAAO,MAAM,aAAa;EAEhC,IAAI,MAAM,QAAQ,KAAK,GAErB,MAD4B,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,CAC7D,KAAK,SAAS,KAAkB;OACvC,IAAI,IAAI,WAAW,CAAC,KAAK,SAAS,IAAI,OAAO,GAClD,SAAS,KAAkB;CAE/B,CAAC;CAED,MAAM,YAAY,WAAW,KAAK,GAAG;CAErC,gBAAgB;EACd,IAAI,CAAC,SACH;EAGF,MAAM,SAAS,UAAU,MAAM,GAAG;EAClC,OAAO,SAAS,OAAO,SAAS,iBAAiB,IAAI,QAAQ,CAAC;EAE9D,aAAa;GACX,OAAO,SAAS,OAAO,SAAS,oBAAoB,IAAI,QAAQ,CAAC;EACnE;CACF,GAAG,CAAC,WAAW,OAAO,CAAC;CAEvB,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-clipboard.mjs","names":[],"sources":["../../src/use-clipboard/use-clipboard.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport interface UseClipboardInput {\n /** Time in ms after which the copied state will reset, `2000` by default */\n timeout?: number;\n}\n\nexport interface UseClipboardReturnValue {\n /** Function to copy value to clipboard */\n copy: (value: any) => void;\n\n /** Function to reset copied state and error */\n reset: () => void;\n\n /** Error if copying failed */\n error: Error | null;\n\n /** Boolean indicating if the value was copied successfully */\n copied: boolean;\n}\n\nexport function useClipboard(options: UseClipboardInput = {}): UseClipboardReturnValue {\n const timeout = options.timeout ?? 2000;\n const [error, setError] = useState<Error | null>(null);\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(\n () => () => {\n window.clearTimeout(timeoutRef.current!);\n },\n []\n );\n\n const handleCopyResult = (value: boolean) => {\n window.clearTimeout(timeoutRef.current!);\n timeoutRef.current = window.setTimeout(() => setCopied(false), timeout);\n setCopied(value);\n };\n\n const copy = (value: any) => {\n if ('clipboard' in navigator) {\n navigator.clipboard\n .writeText(value)\n .then(() => {\n setError(null);\n handleCopyResult(true);\n })\n .catch((err) => setError(err));\n } else {\n setError(new Error('useClipboard: navigator.clipboard is not supported'));\n }\n };\n\n const reset = () => {\n setCopied(false);\n setError(null);\n window.clearTimeout(timeoutRef.current!);\n };\n\n return { copy, reset, error, copied };\n}\n\nexport namespace useClipboard {\n export type Input = UseClipboardInput;\n export type ReturnValue = UseClipboardReturnValue;\n}\n"],"mappings":";;;AAqBA,SAAgB,aAAa,UAA6B,EAAE,EAA2B;CACrF,MAAM,UAAU,QAAQ,WAAW;CACnC,MAAM,CAAC,OAAO,YAAY,SAAuB,KAAK;CACtD,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAC3C,MAAM,aAAa,OAAsB,KAAK;AAE9C,uBACc;AACV,SAAO,aAAa,WAAW,QAAS;IAE1C,EAAE,CACH;CAED,MAAM,oBAAoB,UAAmB;AAC3C,SAAO,aAAa,WAAW,QAAS;AACxC,aAAW,UAAU,OAAO,iBAAiB,UAAU,MAAM,EAAE,QAAQ;AACvE,YAAU,MAAM;;CAGlB,MAAM,QAAQ,UAAe;AAC3B,MAAI,eAAe,UACjB,WAAU,UACP,UAAU,MAAM,CAChB,WAAW;AACV,YAAS,KAAK;AACd,oBAAiB,KAAK;IACtB,CACD,OAAO,QAAQ,SAAS,IAAI,CAAC;MAEhC,0BAAS,IAAI,MAAM,qDAAqD,CAAC;;CAI7E,MAAM,cAAc;AAClB,YAAU,MAAM;AAChB,WAAS,KAAK;AACd,SAAO,aAAa,WAAW,QAAS;;AAG1C,QAAO;EAAE;EAAM;EAAO;EAAO;EAAQ"}
1
+ {"version":3,"file":"use-clipboard.mjs","names":[],"sources":["../../src/use-clipboard/use-clipboard.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport interface UseClipboardInput {\n /** Time in ms after which the copied state will reset, `2000` by default */\n timeout?: number;\n}\n\nexport interface UseClipboardReturnValue {\n /** Function to copy value to clipboard */\n copy: (value: any) => void;\n\n /** Function to reset copied state and error */\n reset: () => void;\n\n /** Error if copying failed */\n error: Error | null;\n\n /** Boolean indicating if the value was copied successfully */\n copied: boolean;\n}\n\nexport function useClipboard(options: UseClipboardInput = {}): UseClipboardReturnValue {\n const timeout = options.timeout ?? 2000;\n const [error, setError] = useState<Error | null>(null);\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n\n useEffect(\n () => () => {\n window.clearTimeout(timeoutRef.current!);\n },\n []\n );\n\n const handleCopyResult = (value: boolean) => {\n window.clearTimeout(timeoutRef.current!);\n timeoutRef.current = window.setTimeout(() => setCopied(false), timeout);\n setCopied(value);\n };\n\n const copy = (value: any) => {\n if ('clipboard' in navigator) {\n navigator.clipboard\n .writeText(value)\n .then(() => {\n setError(null);\n handleCopyResult(true);\n })\n .catch((err) => setError(err));\n } else {\n setError(new Error('useClipboard: navigator.clipboard is not supported'));\n }\n };\n\n const reset = () => {\n setCopied(false);\n setError(null);\n window.clearTimeout(timeoutRef.current!);\n };\n\n return { copy, reset, error, copied };\n}\n\nexport namespace useClipboard {\n export type Input = UseClipboardInput;\n export type ReturnValue = UseClipboardReturnValue;\n}\n"],"mappings":";;;AAqBA,SAAgB,aAAa,UAA6B,CAAC,GAA4B;CACrF,MAAM,UAAU,QAAQ,WAAW;CACnC,MAAM,CAAC,OAAO,YAAY,SAAuB,IAAI;CACrD,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,aAAa,OAAsB,IAAI;CAE7C,sBACc;EACV,OAAO,aAAa,WAAW,OAAQ;CACzC,GACA,CAAC,CACH;CAEA,MAAM,oBAAoB,UAAmB;EAC3C,OAAO,aAAa,WAAW,OAAQ;EACvC,WAAW,UAAU,OAAO,iBAAiB,UAAU,KAAK,GAAG,OAAO;EACtE,UAAU,KAAK;CACjB;CAEA,MAAM,QAAQ,UAAe;EAC3B,IAAI,eAAe,WACjB,UAAU,UACP,UAAU,KAAK,EACf,WAAW;GACV,SAAS,IAAI;GACb,iBAAiB,IAAI;EACvB,CAAC,EACA,OAAO,QAAQ,SAAS,GAAG,CAAC;OAE/B,yBAAS,IAAI,MAAM,oDAAoD,CAAC;CAE5E;CAEA,MAAM,cAAc;EAClB,UAAU,KAAK;EACf,SAAS,IAAI;EACb,OAAO,aAAa,WAAW,OAAQ;CACzC;CAEA,OAAO;EAAE;EAAM;EAAO;EAAO;CAAO;AACtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-collapse.mjs","names":[],"sources":["../../src/use-collapse/use-collapse.ts"],"sourcesContent":["import React, { CSSProperties, useEffectEvent, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\nimport { mergeRefs } from '../use-merged-ref/use-merged-ref';\n\nfunction getAutoHeightDuration(height: number | string) {\n if (!height || typeof height === 'string') {\n return 0;\n }\n const constant = height / 36;\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\n\nexport function getElementHeight(elementRef: React.RefObject<HTMLElement | null>) {\n return elementRef.current ? elementRef.current.scrollHeight : 'auto';\n}\n\nexport interface UseCollapseInput {\n /** Expanded state */\n expanded: boolean;\n\n /** Transition duration in milliseconds, by default calculated based on content height */\n transitionDuration?: number;\n\n /** Transition timing function, `ease` by default */\n transitionTimingFunction?: string;\n\n /** Called when transition ends */\n onTransitionEnd?: () => void;\n\n /** Called when transition starts */\n onTransitionStart?: () => void;\n\n /** If true, collapsed content is kept in the DOM and hidden with `display: none` styles */\n keepMounted?: boolean;\n}\n\ninterface GetCollapsePropsInput {\n style?: CSSProperties;\n ref?: React.Ref<HTMLDivElement>;\n}\n\ninterface GetCollapsePropsReturnValue {\n 'aria-hidden': boolean;\n inert: boolean;\n ref: React.RefCallback<HTMLDivElement>;\n onTransitionEnd: (event: React.TransitionEvent<Element>) => void;\n style: React.CSSProperties;\n}\n\nexport type UseCollapseState = 'entering' | 'entered' | 'exiting' | 'exited';\n\nexport interface UseCollapseReturnValue {\n /** Current transition state */\n state: UseCollapseState;\n\n /** Props to pass down to the collapsible element */\n getCollapseProps: (input?: GetCollapsePropsInput) => GetCollapsePropsReturnValue;\n}\n\nexport function useCollapse({\n transitionDuration,\n transitionTimingFunction = 'ease',\n onTransitionEnd,\n onTransitionStart,\n expanded,\n keepMounted,\n}: UseCollapseInput): UseCollapseReturnValue {\n const collapsedStyles = {\n height: 0,\n overflow: 'hidden',\n ...(keepMounted ? {} : { display: 'none' }),\n };\n\n const onTransitionStartEvent = useEffectEvent(() => onTransitionStart?.());\n\n const elementRef = useRef<HTMLElement>(null);\n const [styles, setStylesRaw] = useState<CSSProperties>(expanded ? {} : collapsedStyles);\n const [state, setState] = useState<UseCollapseState>(expanded ? 'entered' : 'exited');\n const setStyles = (newStyles: React.SetStateAction<CSSProperties>) => {\n flushSync(() => setStylesRaw(newStyles));\n };\n\n const mergeStyles = (newStyles: CSSProperties) => {\n setStyles((oldStyles) => ({ ...oldStyles, ...newStyles }));\n };\n\n const getTransitionStyles = (height: number | string) => {\n const duration = transitionDuration ?? getAutoHeightDuration(height);\n return {\n transition: `height ${duration}ms ${transitionTimingFunction}, opacity ${duration}ms ${transitionTimingFunction}`,\n };\n };\n\n useDidUpdate(() => {\n const shouldTransition = transitionDuration !== 0;\n\n if (shouldTransition) {\n onTransitionStartEvent();\n }\n\n if (expanded) {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('entering'));\n mergeStyles({ willChange: 'height', display: 'block', overflow: 'hidden' });\n window.requestAnimationFrame(() => {\n const height = getElementHeight(elementRef);\n mergeStyles({ ...getTransitionStyles(height), height });\n });\n });\n } else {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('exiting'));\n const height = getElementHeight(elementRef);\n mergeStyles({ ...getTransitionStyles(height), willChange: 'height', height });\n window.requestAnimationFrame(() => mergeStyles({ height: 0, overflow: 'hidden' }));\n });\n }\n }, [expanded]);\n\n const handleTransitionEnd = (event: React.TransitionEvent): void => {\n if (event.target !== elementRef.current || event.propertyName !== 'height') {\n return;\n }\n\n if (expanded) {\n const height = getElementHeight(elementRef);\n\n if (height === styles.height) {\n setStyles({});\n } else {\n mergeStyles({ height });\n }\n\n setState('entered');\n onTransitionEnd?.();\n } else if (styles.height === 0) {\n setStyles(collapsedStyles);\n setState('exited');\n onTransitionEnd?.();\n }\n };\n\n return {\n state,\n getCollapseProps: (input) => ({\n 'aria-hidden': !expanded,\n inert: !expanded,\n ref: mergeRefs(elementRef, input?.ref),\n onTransitionEnd: handleTransitionEnd,\n style: { boxSizing: 'border-box', ...input?.style, ...styles },\n }),\n };\n}\n\nexport namespace useCollapse {\n export type Input = UseCollapseInput;\n export type ReturnValue = UseCollapseReturnValue;\n export type State = UseCollapseState;\n}\n"],"mappings":";;;;;;AAKA,SAAS,sBAAsB,QAAyB;AACtD,KAAI,CAAC,UAAU,OAAO,WAAW,SAC/B,QAAO;CAET,MAAM,WAAW,SAAS;AAC1B,QAAO,KAAK,OAAO,IAAI,KAAK,YAAY,MAAO,WAAW,KAAK,GAAG;;AAGpE,SAAgB,iBAAiB,YAAiD;AAChF,QAAO,WAAW,UAAU,WAAW,QAAQ,eAAe;;AA8ChE,SAAgB,YAAY,EAC1B,oBACA,2BAA2B,QAC3B,iBACA,mBACA,UACA,eAC2C;CAC3C,MAAM,kBAAkB;EACtB,QAAQ;EACR,UAAU;EACV,GAAI,cAAc,EAAE,GAAG,EAAE,SAAS,QAAQ;EAC3C;CAED,MAAM,yBAAyB,qBAAqB,qBAAqB,CAAC;CAE1E,MAAM,aAAa,OAAoB,KAAK;CAC5C,MAAM,CAAC,QAAQ,gBAAgB,SAAwB,WAAW,EAAE,GAAG,gBAAgB;CACvF,MAAM,CAAC,OAAO,YAAY,SAA2B,WAAW,YAAY,SAAS;CACrF,MAAM,aAAa,cAAmD;AACpE,kBAAgB,aAAa,UAAU,CAAC;;CAG1C,MAAM,eAAe,cAA6B;AAChD,aAAW,eAAe;GAAE,GAAG;GAAW,GAAG;GAAW,EAAE;;CAG5D,MAAM,uBAAuB,WAA4B;EACvD,MAAM,WAAW,sBAAsB,sBAAsB,OAAO;AACpE,SAAO,EACL,YAAY,UAAU,SAAS,KAAK,yBAAyB,YAAY,SAAS,KAAK,4BACxF;;AAGH,oBAAmB;AAGjB,MAFyB,uBAAuB,EAG9C,yBAAwB;AAG1B,MAAI,SACF,QAAO,4BAA4B;AACjC,mBAAgB,SAAS,WAAW,CAAC;AACrC,eAAY;IAAE,YAAY;IAAU,SAAS;IAAS,UAAU;IAAU,CAAC;AAC3E,UAAO,4BAA4B;IACjC,MAAM,SAAS,iBAAiB,WAAW;AAC3C,gBAAY;KAAE,GAAG,oBAAoB,OAAO;KAAE;KAAQ,CAAC;KACvD;IACF;MAEF,QAAO,4BAA4B;AACjC,mBAAgB,SAAS,UAAU,CAAC;GACpC,MAAM,SAAS,iBAAiB,WAAW;AAC3C,eAAY;IAAE,GAAG,oBAAoB,OAAO;IAAE,YAAY;IAAU;IAAQ,CAAC;AAC7E,UAAO,4BAA4B,YAAY;IAAE,QAAQ;IAAG,UAAU;IAAU,CAAC,CAAC;IAClF;IAEH,CAAC,SAAS,CAAC;CAEd,MAAM,uBAAuB,UAAuC;AAClE,MAAI,MAAM,WAAW,WAAW,WAAW,MAAM,iBAAiB,SAChE;AAGF,MAAI,UAAU;GACZ,MAAM,SAAS,iBAAiB,WAAW;AAE3C,OAAI,WAAW,OAAO,OACpB,WAAU,EAAE,CAAC;OAEb,aAAY,EAAE,QAAQ,CAAC;AAGzB,YAAS,UAAU;AACnB,sBAAmB;aACV,OAAO,WAAW,GAAG;AAC9B,aAAU,gBAAgB;AAC1B,YAAS,SAAS;AAClB,sBAAmB;;;AAIvB,QAAO;EACL;EACA,mBAAmB,WAAW;GAC5B,eAAe,CAAC;GAChB,OAAO,CAAC;GACR,KAAK,UAAU,YAAY,OAAO,IAAI;GACtC,iBAAiB;GACjB,OAAO;IAAE,WAAW;IAAc,GAAG,OAAO;IAAO,GAAG;IAAQ;GAC/D;EACF"}
1
+ {"version":3,"file":"use-collapse.mjs","names":[],"sources":["../../src/use-collapse/use-collapse.ts"],"sourcesContent":["import React, { CSSProperties, useEffectEvent, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\nimport { mergeRefs } from '../use-merged-ref/use-merged-ref';\n\nfunction getAutoHeightDuration(height: number | string) {\n if (!height || typeof height === 'string') {\n return 0;\n }\n const constant = height / 36;\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\n\nexport function getElementHeight(elementRef: React.RefObject<HTMLElement | null>) {\n return elementRef.current ? elementRef.current.scrollHeight : 'auto';\n}\n\nexport interface UseCollapseInput {\n /** Expanded state */\n expanded: boolean;\n\n /** Transition duration in milliseconds, by default calculated based on content height */\n transitionDuration?: number;\n\n /** Transition timing function, `ease` by default */\n transitionTimingFunction?: string;\n\n /** Called when transition ends */\n onTransitionEnd?: () => void;\n\n /** Called when transition starts */\n onTransitionStart?: () => void;\n\n /** If true, collapsed content is kept in the DOM and hidden with `display: none` styles */\n keepMounted?: boolean;\n}\n\ninterface GetCollapsePropsInput {\n style?: CSSProperties;\n ref?: React.Ref<HTMLDivElement>;\n}\n\ninterface GetCollapsePropsReturnValue {\n 'aria-hidden': boolean;\n inert: boolean;\n ref: React.RefCallback<HTMLDivElement>;\n onTransitionEnd: (event: React.TransitionEvent<Element>) => void;\n style: React.CSSProperties;\n}\n\nexport type UseCollapseState = 'entering' | 'entered' | 'exiting' | 'exited';\n\nexport interface UseCollapseReturnValue {\n /** Current transition state */\n state: UseCollapseState;\n\n /** Props to pass down to the collapsible element */\n getCollapseProps: (input?: GetCollapsePropsInput) => GetCollapsePropsReturnValue;\n}\n\nexport function useCollapse({\n transitionDuration,\n transitionTimingFunction = 'ease',\n onTransitionEnd,\n onTransitionStart,\n expanded,\n keepMounted,\n}: UseCollapseInput): UseCollapseReturnValue {\n const collapsedStyles = {\n height: 0,\n overflow: 'hidden',\n ...(keepMounted ? {} : { display: 'none' }),\n };\n\n const onTransitionStartEvent = useEffectEvent(() => onTransitionStart?.());\n\n const elementRef = useRef<HTMLElement>(null);\n const [styles, setStylesRaw] = useState<CSSProperties>(expanded ? {} : collapsedStyles);\n const [state, setState] = useState<UseCollapseState>(expanded ? 'entered' : 'exited');\n const setStyles = (newStyles: React.SetStateAction<CSSProperties>) => {\n flushSync(() => setStylesRaw(newStyles));\n };\n\n const mergeStyles = (newStyles: CSSProperties) => {\n setStyles((oldStyles) => ({ ...oldStyles, ...newStyles }));\n };\n\n const getTransitionStyles = (height: number | string) => {\n const duration = transitionDuration ?? getAutoHeightDuration(height);\n return {\n transition: `height ${duration}ms ${transitionTimingFunction}, opacity ${duration}ms ${transitionTimingFunction}`,\n };\n };\n\n useDidUpdate(() => {\n const shouldTransition = transitionDuration !== 0;\n\n if (shouldTransition) {\n onTransitionStartEvent();\n }\n\n if (expanded) {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('entering'));\n mergeStyles({ willChange: 'height', display: 'block', overflow: 'hidden' });\n window.requestAnimationFrame(() => {\n const height = getElementHeight(elementRef);\n mergeStyles({ ...getTransitionStyles(height), height });\n });\n });\n } else {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('exiting'));\n const height = getElementHeight(elementRef);\n mergeStyles({ ...getTransitionStyles(height), willChange: 'height', height });\n window.requestAnimationFrame(() => mergeStyles({ height: 0, overflow: 'hidden' }));\n });\n }\n }, [expanded]);\n\n const handleTransitionEnd = (event: React.TransitionEvent): void => {\n if (event.target !== elementRef.current || event.propertyName !== 'height') {\n return;\n }\n\n if (expanded) {\n const height = getElementHeight(elementRef);\n\n if (height === styles.height) {\n setStyles({});\n } else {\n mergeStyles({ height });\n }\n\n setState('entered');\n onTransitionEnd?.();\n } else if (styles.height === 0) {\n setStyles(collapsedStyles);\n setState('exited');\n onTransitionEnd?.();\n }\n };\n\n return {\n state,\n getCollapseProps: (input) => ({\n 'aria-hidden': !expanded,\n inert: !expanded,\n ref: mergeRefs(elementRef, input?.ref),\n onTransitionEnd: handleTransitionEnd,\n style: { boxSizing: 'border-box', ...input?.style, ...styles },\n }),\n };\n}\n\nexport namespace useCollapse {\n export type Input = UseCollapseInput;\n export type ReturnValue = UseCollapseReturnValue;\n export type State = UseCollapseState;\n}\n"],"mappings":";;;;;;AAKA,SAAS,sBAAsB,QAAyB;CACtD,IAAI,CAAC,UAAU,OAAO,WAAW,UAC/B,OAAO;CAET,MAAM,WAAW,SAAS;CAC1B,OAAO,KAAK,OAAO,IAAI,KAAK,YAAY,MAAO,WAAW,KAAK,EAAE;AACnE;AAEA,SAAgB,iBAAiB,YAAiD;CAChF,OAAO,WAAW,UAAU,WAAW,QAAQ,eAAe;AAChE;AA6CA,SAAgB,YAAY,EAC1B,oBACA,2BAA2B,QAC3B,iBACA,mBACA,UACA,eAC2C;CAC3C,MAAM,kBAAkB;EACtB,QAAQ;EACR,UAAU;EACV,GAAI,cAAc,CAAC,IAAI,EAAE,SAAS,OAAO;CAC3C;CAEA,MAAM,yBAAyB,qBAAqB,oBAAoB,CAAC;CAEzE,MAAM,aAAa,OAAoB,IAAI;CAC3C,MAAM,CAAC,QAAQ,gBAAgB,SAAwB,WAAW,CAAC,IAAI,eAAe;CACtF,MAAM,CAAC,OAAO,YAAY,SAA2B,WAAW,YAAY,QAAQ;CACpF,MAAM,aAAa,cAAmD;EACpE,gBAAgB,aAAa,SAAS,CAAC;CACzC;CAEA,MAAM,eAAe,cAA6B;EAChD,WAAW,eAAe;GAAE,GAAG;GAAW,GAAG;EAAU,EAAE;CAC3D;CAEA,MAAM,uBAAuB,WAA4B;EACvD,MAAM,WAAW,sBAAsB,sBAAsB,MAAM;EACnE,OAAO,EACL,YAAY,UAAU,SAAS,KAAK,yBAAyB,YAAY,SAAS,KAAK,2BACzF;CACF;CAEA,mBAAmB;EAGjB,IAFyB,uBAAuB,GAG9C,uBAAuB;EAGzB,IAAI,UACF,OAAO,4BAA4B;GACjC,gBAAgB,SAAS,UAAU,CAAC;GACpC,YAAY;IAAE,YAAY;IAAU,SAAS;IAAS,UAAU;GAAS,CAAC;GAC1E,OAAO,4BAA4B;IACjC,MAAM,SAAS,iBAAiB,UAAU;IAC1C,YAAY;KAAE,GAAG,oBAAoB,MAAM;KAAG;IAAO,CAAC;GACxD,CAAC;EACH,CAAC;OAED,OAAO,4BAA4B;GACjC,gBAAgB,SAAS,SAAS,CAAC;GACnC,MAAM,SAAS,iBAAiB,UAAU;GAC1C,YAAY;IAAE,GAAG,oBAAoB,MAAM;IAAG,YAAY;IAAU;GAAO,CAAC;GAC5E,OAAO,4BAA4B,YAAY;IAAE,QAAQ;IAAG,UAAU;GAAS,CAAC,CAAC;EACnF,CAAC;CAEL,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,uBAAuB,UAAuC;EAClE,IAAI,MAAM,WAAW,WAAW,WAAW,MAAM,iBAAiB,UAChE;EAGF,IAAI,UAAU;GACZ,MAAM,SAAS,iBAAiB,UAAU;GAE1C,IAAI,WAAW,OAAO,QACpB,UAAU,CAAC,CAAC;QAEZ,YAAY,EAAE,OAAO,CAAC;GAGxB,SAAS,SAAS;GAClB,kBAAkB;EACpB,OAAO,IAAI,OAAO,WAAW,GAAG;GAC9B,UAAU,eAAe;GACzB,SAAS,QAAQ;GACjB,kBAAkB;EACpB;CACF;CAEA,OAAO;EACL;EACA,mBAAmB,WAAW;GAC5B,eAAe,CAAC;GAChB,OAAO,CAAC;GACR,KAAK,UAAU,YAAY,OAAO,GAAG;GACrC,iBAAiB;GACjB,OAAO;IAAE,WAAW;IAAc,GAAG,OAAO;IAAO,GAAG;GAAO;EAC/D;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-horizontal-collapse.mjs","names":[],"sources":["../../src/use-collapse/use-horizontal-collapse.ts"],"sourcesContent":["import React, { CSSProperties, useEffectEvent, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\nimport { mergeRefs } from '../use-merged-ref/use-merged-ref';\n\nfunction getAutoWidthDuration(width: number | string) {\n if (!width || typeof width === 'string') {\n return 0;\n }\n const constant = width / 36;\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\n\nexport function getElementWidth(elementRef: React.RefObject<HTMLElement | null>) {\n return elementRef.current ? elementRef.current.scrollWidth : 'auto';\n}\n\nexport interface UseHorizontalCollapseInput {\n /** Expanded state */\n expanded: boolean;\n\n /** Transition duration in milliseconds, by default calculated based on content width */\n transitionDuration?: number;\n\n /** Transition timing function, `ease` by default */\n transitionTimingFunction?: string;\n\n /** Called when transition ends */\n onTransitionEnd?: () => void;\n\n /** Called when transition starts */\n onTransitionStart?: () => void;\n\n /** If true, collapsed content is kept in the DOM and hidden with `display: none` styles */\n keepMounted?: boolean;\n}\n\ninterface GetHorizontalCollapsePropsInput {\n style?: CSSProperties;\n ref?: React.Ref<HTMLDivElement>;\n}\n\ninterface GetHorizontalCollapsePropsReturnValue {\n 'aria-hidden': boolean;\n inert: boolean;\n ref: React.RefCallback<HTMLDivElement>;\n onTransitionEnd: (event: React.TransitionEvent<Element>) => void;\n style: React.CSSProperties;\n}\n\nexport type UseHorizontalCollapseState = 'entering' | 'entered' | 'exiting' | 'exited';\n\nexport interface UseHorizontalCollapseReturnValue {\n /** Current transition state */\n state: UseHorizontalCollapseState;\n\n /** Props to pass down to the collapsible element */\n getCollapseProps: (\n input?: GetHorizontalCollapsePropsInput\n ) => GetHorizontalCollapsePropsReturnValue;\n}\n\nexport function useHorizontalCollapse({\n transitionDuration,\n transitionTimingFunction = 'ease',\n onTransitionEnd,\n onTransitionStart,\n expanded,\n keepMounted,\n}: UseHorizontalCollapseInput): UseHorizontalCollapseReturnValue {\n const collapsedStyles = {\n width: 0,\n overflow: 'hidden',\n ...(keepMounted ? {} : { display: 'none' }),\n };\n\n const onTransitionStartEvent = useEffectEvent(() => onTransitionStart?.());\n\n const elementRef = useRef<HTMLElement>(null);\n const [styles, setStylesRaw] = useState<CSSProperties>(expanded ? {} : collapsedStyles);\n const [state, setState] = useState<UseHorizontalCollapseState>(expanded ? 'entered' : 'exited');\n const setStyles = (newStyles: React.SetStateAction<CSSProperties>) => {\n flushSync(() => setStylesRaw(newStyles));\n };\n\n const mergeStyles = (newStyles: CSSProperties) => {\n setStyles((oldStyles) => ({ ...oldStyles, ...newStyles }));\n };\n\n const getTransitionStyles = (width: number | string) => {\n const duration = transitionDuration ?? getAutoWidthDuration(width);\n return {\n transition: `width ${duration}ms ${transitionTimingFunction}, opacity ${duration}ms ${transitionTimingFunction}`,\n };\n };\n\n useDidUpdate(() => {\n const shouldTransition = transitionDuration !== 0;\n\n if (shouldTransition) {\n onTransitionStartEvent();\n }\n\n if (expanded) {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('entering'));\n mergeStyles({ willChange: 'width', display: 'block', overflow: 'hidden' });\n window.requestAnimationFrame(() => {\n const width = getElementWidth(elementRef);\n mergeStyles({ ...getTransitionStyles(width), width });\n });\n });\n } else {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('exiting'));\n const width = getElementWidth(elementRef);\n mergeStyles({ ...getTransitionStyles(width), willChange: 'width', width });\n window.requestAnimationFrame(() => mergeStyles({ width: 0, overflow: 'hidden' }));\n });\n }\n }, [expanded]);\n\n const handleTransitionEnd = (event: React.TransitionEvent): void => {\n if (event.target !== elementRef.current || event.propertyName !== 'width') {\n return;\n }\n\n if (expanded) {\n const width = getElementWidth(elementRef);\n\n if (width === styles.width) {\n setStyles({});\n } else {\n mergeStyles({ width });\n }\n\n setState('entered');\n onTransitionEnd?.();\n } else if (styles.width === 0) {\n setStyles(collapsedStyles);\n setState('exited');\n onTransitionEnd?.();\n }\n };\n\n return {\n state,\n getCollapseProps: (input) => ({\n 'aria-hidden': !expanded,\n inert: !expanded,\n ref: mergeRefs(elementRef, input?.ref),\n onTransitionEnd: handleTransitionEnd,\n style: { boxSizing: 'border-box', ...input?.style, ...styles },\n }),\n };\n}\n\nexport namespace useHorizontalCollapse {\n export type Input = UseHorizontalCollapseInput;\n export type ReturnValue = UseHorizontalCollapseReturnValue;\n export type State = UseHorizontalCollapseState;\n}\n"],"mappings":";;;;;;AAKA,SAAS,qBAAqB,OAAwB;AACpD,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAET,MAAM,WAAW,QAAQ;AACzB,QAAO,KAAK,OAAO,IAAI,KAAK,YAAY,MAAO,WAAW,KAAK,GAAG;;AAGpE,SAAgB,gBAAgB,YAAiD;AAC/E,QAAO,WAAW,UAAU,WAAW,QAAQ,cAAc;;AAgD/D,SAAgB,sBAAsB,EACpC,oBACA,2BAA2B,QAC3B,iBACA,mBACA,UACA,eAC+D;CAC/D,MAAM,kBAAkB;EACtB,OAAO;EACP,UAAU;EACV,GAAI,cAAc,EAAE,GAAG,EAAE,SAAS,QAAQ;EAC3C;CAED,MAAM,yBAAyB,qBAAqB,qBAAqB,CAAC;CAE1E,MAAM,aAAa,OAAoB,KAAK;CAC5C,MAAM,CAAC,QAAQ,gBAAgB,SAAwB,WAAW,EAAE,GAAG,gBAAgB;CACvF,MAAM,CAAC,OAAO,YAAY,SAAqC,WAAW,YAAY,SAAS;CAC/F,MAAM,aAAa,cAAmD;AACpE,kBAAgB,aAAa,UAAU,CAAC;;CAG1C,MAAM,eAAe,cAA6B;AAChD,aAAW,eAAe;GAAE,GAAG;GAAW,GAAG;GAAW,EAAE;;CAG5D,MAAM,uBAAuB,UAA2B;EACtD,MAAM,WAAW,sBAAsB,qBAAqB,MAAM;AAClE,SAAO,EACL,YAAY,SAAS,SAAS,KAAK,yBAAyB,YAAY,SAAS,KAAK,4BACvF;;AAGH,oBAAmB;AAGjB,MAFyB,uBAAuB,EAG9C,yBAAwB;AAG1B,MAAI,SACF,QAAO,4BAA4B;AACjC,mBAAgB,SAAS,WAAW,CAAC;AACrC,eAAY;IAAE,YAAY;IAAS,SAAS;IAAS,UAAU;IAAU,CAAC;AAC1E,UAAO,4BAA4B;IACjC,MAAM,QAAQ,gBAAgB,WAAW;AACzC,gBAAY;KAAE,GAAG,oBAAoB,MAAM;KAAE;KAAO,CAAC;KACrD;IACF;MAEF,QAAO,4BAA4B;AACjC,mBAAgB,SAAS,UAAU,CAAC;GACpC,MAAM,QAAQ,gBAAgB,WAAW;AACzC,eAAY;IAAE,GAAG,oBAAoB,MAAM;IAAE,YAAY;IAAS;IAAO,CAAC;AAC1E,UAAO,4BAA4B,YAAY;IAAE,OAAO;IAAG,UAAU;IAAU,CAAC,CAAC;IACjF;IAEH,CAAC,SAAS,CAAC;CAEd,MAAM,uBAAuB,UAAuC;AAClE,MAAI,MAAM,WAAW,WAAW,WAAW,MAAM,iBAAiB,QAChE;AAGF,MAAI,UAAU;GACZ,MAAM,QAAQ,gBAAgB,WAAW;AAEzC,OAAI,UAAU,OAAO,MACnB,WAAU,EAAE,CAAC;OAEb,aAAY,EAAE,OAAO,CAAC;AAGxB,YAAS,UAAU;AACnB,sBAAmB;aACV,OAAO,UAAU,GAAG;AAC7B,aAAU,gBAAgB;AAC1B,YAAS,SAAS;AAClB,sBAAmB;;;AAIvB,QAAO;EACL;EACA,mBAAmB,WAAW;GAC5B,eAAe,CAAC;GAChB,OAAO,CAAC;GACR,KAAK,UAAU,YAAY,OAAO,IAAI;GACtC,iBAAiB;GACjB,OAAO;IAAE,WAAW;IAAc,GAAG,OAAO;IAAO,GAAG;IAAQ;GAC/D;EACF"}
1
+ {"version":3,"file":"use-horizontal-collapse.mjs","names":[],"sources":["../../src/use-collapse/use-horizontal-collapse.ts"],"sourcesContent":["import React, { CSSProperties, useEffectEvent, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\nimport { mergeRefs } from '../use-merged-ref/use-merged-ref';\n\nfunction getAutoWidthDuration(width: number | string) {\n if (!width || typeof width === 'string') {\n return 0;\n }\n const constant = width / 36;\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\n\nexport function getElementWidth(elementRef: React.RefObject<HTMLElement | null>) {\n return elementRef.current ? elementRef.current.scrollWidth : 'auto';\n}\n\nexport interface UseHorizontalCollapseInput {\n /** Expanded state */\n expanded: boolean;\n\n /** Transition duration in milliseconds, by default calculated based on content width */\n transitionDuration?: number;\n\n /** Transition timing function, `ease` by default */\n transitionTimingFunction?: string;\n\n /** Called when transition ends */\n onTransitionEnd?: () => void;\n\n /** Called when transition starts */\n onTransitionStart?: () => void;\n\n /** If true, collapsed content is kept in the DOM and hidden with `display: none` styles */\n keepMounted?: boolean;\n}\n\ninterface GetHorizontalCollapsePropsInput {\n style?: CSSProperties;\n ref?: React.Ref<HTMLDivElement>;\n}\n\ninterface GetHorizontalCollapsePropsReturnValue {\n 'aria-hidden': boolean;\n inert: boolean;\n ref: React.RefCallback<HTMLDivElement>;\n onTransitionEnd: (event: React.TransitionEvent<Element>) => void;\n style: React.CSSProperties;\n}\n\nexport type UseHorizontalCollapseState = 'entering' | 'entered' | 'exiting' | 'exited';\n\nexport interface UseHorizontalCollapseReturnValue {\n /** Current transition state */\n state: UseHorizontalCollapseState;\n\n /** Props to pass down to the collapsible element */\n getCollapseProps: (\n input?: GetHorizontalCollapsePropsInput\n ) => GetHorizontalCollapsePropsReturnValue;\n}\n\nexport function useHorizontalCollapse({\n transitionDuration,\n transitionTimingFunction = 'ease',\n onTransitionEnd,\n onTransitionStart,\n expanded,\n keepMounted,\n}: UseHorizontalCollapseInput): UseHorizontalCollapseReturnValue {\n const collapsedStyles = {\n width: 0,\n overflow: 'hidden',\n ...(keepMounted ? {} : { display: 'none' }),\n };\n\n const onTransitionStartEvent = useEffectEvent(() => onTransitionStart?.());\n\n const elementRef = useRef<HTMLElement>(null);\n const [styles, setStylesRaw] = useState<CSSProperties>(expanded ? {} : collapsedStyles);\n const [state, setState] = useState<UseHorizontalCollapseState>(expanded ? 'entered' : 'exited');\n const setStyles = (newStyles: React.SetStateAction<CSSProperties>) => {\n flushSync(() => setStylesRaw(newStyles));\n };\n\n const mergeStyles = (newStyles: CSSProperties) => {\n setStyles((oldStyles) => ({ ...oldStyles, ...newStyles }));\n };\n\n const getTransitionStyles = (width: number | string) => {\n const duration = transitionDuration ?? getAutoWidthDuration(width);\n return {\n transition: `width ${duration}ms ${transitionTimingFunction}, opacity ${duration}ms ${transitionTimingFunction}`,\n };\n };\n\n useDidUpdate(() => {\n const shouldTransition = transitionDuration !== 0;\n\n if (shouldTransition) {\n onTransitionStartEvent();\n }\n\n if (expanded) {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('entering'));\n mergeStyles({ willChange: 'width', display: 'block', overflow: 'hidden' });\n window.requestAnimationFrame(() => {\n const width = getElementWidth(elementRef);\n mergeStyles({ ...getTransitionStyles(width), width });\n });\n });\n } else {\n window.requestAnimationFrame(() => {\n flushSync(() => setState('exiting'));\n const width = getElementWidth(elementRef);\n mergeStyles({ ...getTransitionStyles(width), willChange: 'width', width });\n window.requestAnimationFrame(() => mergeStyles({ width: 0, overflow: 'hidden' }));\n });\n }\n }, [expanded]);\n\n const handleTransitionEnd = (event: React.TransitionEvent): void => {\n if (event.target !== elementRef.current || event.propertyName !== 'width') {\n return;\n }\n\n if (expanded) {\n const width = getElementWidth(elementRef);\n\n if (width === styles.width) {\n setStyles({});\n } else {\n mergeStyles({ width });\n }\n\n setState('entered');\n onTransitionEnd?.();\n } else if (styles.width === 0) {\n setStyles(collapsedStyles);\n setState('exited');\n onTransitionEnd?.();\n }\n };\n\n return {\n state,\n getCollapseProps: (input) => ({\n 'aria-hidden': !expanded,\n inert: !expanded,\n ref: mergeRefs(elementRef, input?.ref),\n onTransitionEnd: handleTransitionEnd,\n style: { boxSizing: 'border-box', ...input?.style, ...styles },\n }),\n };\n}\n\nexport namespace useHorizontalCollapse {\n export type Input = UseHorizontalCollapseInput;\n export type ReturnValue = UseHorizontalCollapseReturnValue;\n export type State = UseHorizontalCollapseState;\n}\n"],"mappings":";;;;;;AAKA,SAAS,qBAAqB,OAAwB;CACpD,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B,OAAO;CAET,MAAM,WAAW,QAAQ;CACzB,OAAO,KAAK,OAAO,IAAI,KAAK,YAAY,MAAO,WAAW,KAAK,EAAE;AACnE;AAEA,SAAgB,gBAAgB,YAAiD;CAC/E,OAAO,WAAW,UAAU,WAAW,QAAQ,cAAc;AAC/D;AA+CA,SAAgB,sBAAsB,EACpC,oBACA,2BAA2B,QAC3B,iBACA,mBACA,UACA,eAC+D;CAC/D,MAAM,kBAAkB;EACtB,OAAO;EACP,UAAU;EACV,GAAI,cAAc,CAAC,IAAI,EAAE,SAAS,OAAO;CAC3C;CAEA,MAAM,yBAAyB,qBAAqB,oBAAoB,CAAC;CAEzE,MAAM,aAAa,OAAoB,IAAI;CAC3C,MAAM,CAAC,QAAQ,gBAAgB,SAAwB,WAAW,CAAC,IAAI,eAAe;CACtF,MAAM,CAAC,OAAO,YAAY,SAAqC,WAAW,YAAY,QAAQ;CAC9F,MAAM,aAAa,cAAmD;EACpE,gBAAgB,aAAa,SAAS,CAAC;CACzC;CAEA,MAAM,eAAe,cAA6B;EAChD,WAAW,eAAe;GAAE,GAAG;GAAW,GAAG;EAAU,EAAE;CAC3D;CAEA,MAAM,uBAAuB,UAA2B;EACtD,MAAM,WAAW,sBAAsB,qBAAqB,KAAK;EACjE,OAAO,EACL,YAAY,SAAS,SAAS,KAAK,yBAAyB,YAAY,SAAS,KAAK,2BACxF;CACF;CAEA,mBAAmB;EAGjB,IAFyB,uBAAuB,GAG9C,uBAAuB;EAGzB,IAAI,UACF,OAAO,4BAA4B;GACjC,gBAAgB,SAAS,UAAU,CAAC;GACpC,YAAY;IAAE,YAAY;IAAS,SAAS;IAAS,UAAU;GAAS,CAAC;GACzE,OAAO,4BAA4B;IACjC,MAAM,QAAQ,gBAAgB,UAAU;IACxC,YAAY;KAAE,GAAG,oBAAoB,KAAK;KAAG;IAAM,CAAC;GACtD,CAAC;EACH,CAAC;OAED,OAAO,4BAA4B;GACjC,gBAAgB,SAAS,SAAS,CAAC;GACnC,MAAM,QAAQ,gBAAgB,UAAU;GACxC,YAAY;IAAE,GAAG,oBAAoB,KAAK;IAAG,YAAY;IAAS;GAAM,CAAC;GACzE,OAAO,4BAA4B,YAAY;IAAE,OAAO;IAAG,UAAU;GAAS,CAAC,CAAC;EAClF,CAAC;CAEL,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,uBAAuB,UAAuC;EAClE,IAAI,MAAM,WAAW,WAAW,WAAW,MAAM,iBAAiB,SAChE;EAGF,IAAI,UAAU;GACZ,MAAM,QAAQ,gBAAgB,UAAU;GAExC,IAAI,UAAU,OAAO,OACnB,UAAU,CAAC,CAAC;QAEZ,YAAY,EAAE,MAAM,CAAC;GAGvB,SAAS,SAAS;GAClB,kBAAkB;EACpB,OAAO,IAAI,OAAO,UAAU,GAAG;GAC7B,UAAU,eAAe;GACzB,SAAS,QAAQ;GACjB,kBAAkB;EACpB;CACF;CAEA,OAAO;EACL;EACA,mBAAmB,WAAW;GAC5B,eAAe,CAAC;GAChB,OAAO,CAAC;GACR,KAAK,UAAU,YAAY,OAAO,GAAG;GACrC,iBAAiB;GACjB,OAAO;IAAE,WAAW;IAAc,GAAG,OAAO;IAAO,GAAG;GAAO;EAC/D;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-color-scheme.mjs","names":[],"sources":["../../src/use-color-scheme/use-color-scheme.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '../use-media-query/use-media-query';\n\nexport type UseColorSchemeValue = 'dark' | 'light';\n\nexport function useColorScheme(\n initialValue?: UseColorSchemeValue,\n options?: UseMediaQueryOptions\n): UseColorSchemeValue {\n return useMediaQuery('(prefers-color-scheme: dark)', initialValue === 'dark', options)\n ? 'dark'\n : 'light';\n}\n"],"mappings":";;;AAIA,SAAgB,eACd,cACA,SACqB;AACrB,QAAO,cAAc,gCAAgC,iBAAiB,QAAQ,QAAQ,GAClF,SACA"}
1
+ {"version":3,"file":"use-color-scheme.mjs","names":[],"sources":["../../src/use-color-scheme/use-color-scheme.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '../use-media-query/use-media-query';\n\nexport type UseColorSchemeValue = 'dark' | 'light';\n\nexport function useColorScheme(\n initialValue?: UseColorSchemeValue,\n options?: UseMediaQueryOptions\n): UseColorSchemeValue {\n return useMediaQuery('(prefers-color-scheme: dark)', initialValue === 'dark', options)\n ? 'dark'\n : 'light';\n}\n"],"mappings":";;;AAIA,SAAgB,eACd,cACA,SACqB;CACrB,OAAO,cAAc,gCAAgC,iBAAiB,QAAQ,OAAO,IACjF,SACA;AACN"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-counter.mjs","names":[],"sources":["../../src/use-counter/use-counter.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { clamp } from '../utils';\n\nconst DEFAULT_OPTIONS = {\n min: -Infinity,\n max: Infinity,\n};\n\nexport interface UseCounterOptions {\n min?: number;\n max?: number;\n step?: number;\n}\n\nexport interface UseCounterHandlers {\n increment: () => void;\n decrement: () => void;\n set: (value: number) => void;\n reset: () => void;\n}\n\nexport type UseCounterReturnValue = [number, UseCounterHandlers];\n\nexport function useCounter(initialValue = 0, options?: UseCounterOptions): UseCounterReturnValue {\n const { min, max, step: _step = 1 } = { ...DEFAULT_OPTIONS, ...options };\n const step = Math.abs(_step);\n const [count, setCount] = useState<number>(clamp(initialValue, min, max));\n\n const increment = useCallback(\n () => setCount((current) => clamp(current + step, min, max)),\n [min, max, step]\n );\n\n const decrement = useCallback(\n () => setCount((current) => clamp(current - step, min, max)),\n [min, max, step]\n );\n\n const set = useCallback((value: number) => setCount(clamp(value, min, max)), [min, max]);\n\n const reset = useCallback(\n () => setCount(clamp(initialValue, min, max)),\n [initialValue, min, max]\n );\n\n return [count, { increment, decrement, set, reset }];\n}\n\nexport namespace useCounter {\n export type Options = UseCounterOptions;\n export type Handlers = UseCounterHandlers;\n export type ReturnValue = UseCounterReturnValue;\n}\n"],"mappings":";;;;AAGA,MAAM,kBAAkB;CACtB,KAAK;CACL,KAAK;CACN;AAiBD,SAAgB,WAAW,eAAe,GAAG,SAAoD;CAC/F,MAAM,EAAE,KAAK,KAAK,MAAM,QAAQ,MAAM;EAAE,GAAG;EAAiB,GAAG;EAAS;CACxE,MAAM,OAAO,KAAK,IAAI,MAAM;CAC5B,MAAM,CAAC,OAAO,YAAY,SAAiB,MAAM,cAAc,KAAK,IAAI,CAAC;AAmBzE,QAAO,CAAC,OAAO;EAAE,WAjBC,kBACV,UAAU,YAAY,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC,EAC5D;GAAC;GAAK;GAAK;GAAK,CACjB;EAc2B,WAZV,kBACV,UAAU,YAAY,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC,EAC5D;GAAC;GAAK;GAAK;GAAK,CACjB;EASsC,KAP3B,aAAa,UAAkB,SAAS,MAAM,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;EAO5C,OAL9B,kBACN,SAAS,MAAM,cAAc,KAAK,IAAI,CAAC,EAC7C;GAAC;GAAc;GAAK;GAAI,CACzB;EAEkD,CAAC"}
1
+ {"version":3,"file":"use-counter.mjs","names":[],"sources":["../../src/use-counter/use-counter.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { clamp } from '../utils';\n\nconst DEFAULT_OPTIONS = {\n min: -Infinity,\n max: Infinity,\n};\n\nexport interface UseCounterOptions {\n min?: number;\n max?: number;\n step?: number;\n}\n\nexport interface UseCounterHandlers {\n increment: () => void;\n decrement: () => void;\n set: (value: number) => void;\n reset: () => void;\n}\n\nexport type UseCounterReturnValue = [number, UseCounterHandlers];\n\nexport function useCounter(initialValue = 0, options?: UseCounterOptions): UseCounterReturnValue {\n const { min, max, step: _step = 1 } = { ...DEFAULT_OPTIONS, ...options };\n const step = Math.abs(_step);\n const [count, setCount] = useState<number>(clamp(initialValue, min, max));\n\n const increment = useCallback(\n () => setCount((current) => clamp(current + step, min, max)),\n [min, max, step]\n );\n\n const decrement = useCallback(\n () => setCount((current) => clamp(current - step, min, max)),\n [min, max, step]\n );\n\n const set = useCallback((value: number) => setCount(clamp(value, min, max)), [min, max]);\n\n const reset = useCallback(\n () => setCount(clamp(initialValue, min, max)),\n [initialValue, min, max]\n );\n\n return [count, { increment, decrement, set, reset }];\n}\n\nexport namespace useCounter {\n export type Options = UseCounterOptions;\n export type Handlers = UseCounterHandlers;\n export type ReturnValue = UseCounterReturnValue;\n}\n"],"mappings":";;;;AAGA,MAAM,kBAAkB;CACtB,KAAK;CACL,KAAK;AACP;AAiBA,SAAgB,WAAW,eAAe,GAAG,SAAoD;CAC/F,MAAM,EAAE,KAAK,KAAK,MAAM,QAAQ,MAAM;EAAE,GAAG;EAAiB,GAAG;CAAQ;CACvE,MAAM,OAAO,KAAK,IAAI,KAAK;CAC3B,MAAM,CAAC,OAAO,YAAY,SAAiB,MAAM,cAAc,KAAK,GAAG,CAAC;CAmBxE,OAAO,CAAC,OAAO;EAAE,WAjBC,kBACV,UAAU,YAAY,MAAM,UAAU,MAAM,KAAK,GAAG,CAAC,GAC3D;GAAC;GAAK;GAAK;EAAI,CAeQ;EAAG,WAZV,kBACV,UAAU,YAAY,MAAM,UAAU,MAAM,KAAK,GAAG,CAAC,GAC3D;GAAC;GAAK;GAAK;EAAI,CAUmB;EAAG,KAP3B,aAAa,UAAkB,SAAS,MAAM,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAO7C;EAAG,OAL9B,kBACN,SAAS,MAAM,cAAc,KAAK,GAAG,CAAC,GAC5C;GAAC;GAAc;GAAK;EAAG,CAGuB;CAAE,CAAC;AACrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-debounced-callback.mjs","names":[],"sources":["../../src/use-debounced-callback/use-debounced-callback.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport { useCallbackRef } from '../utils';\n\nexport interface UseDebouncedCallbackOptions {\n delay: number;\n flushOnUnmount?: boolean;\n leading?: boolean;\n maxWait?: number;\n}\n\nexport type UseDebouncedCallbackReturnValue<T extends (...args: any[]) => any> = ((\n ...args: Parameters<T>\n) => void) & { flush: () => void; cancel: () => void; isPending: () => boolean };\n\nexport function useDebouncedCallback<T extends (...args: any[]) => any>(\n callback: T,\n options: number | UseDebouncedCallbackOptions\n) {\n const { delay, flushOnUnmount, leading, maxWait } =\n typeof options === 'number'\n ? {\n delay: options,\n flushOnUnmount: false,\n leading: false,\n maxWait: undefined as number | undefined,\n }\n : options;\n\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = useRef(0);\n const maxWaitTimerRef = useRef(0);\n const latestArgsRef = useRef<Parameters<T> | null>(null);\n\n const lastCallback = useMemo(() => {\n const currentCallback = Object.assign(\n (...args: Parameters<T>) => {\n window.clearTimeout(debounceTimerRef.current);\n latestArgsRef.current = args;\n\n const isFirstCall = currentCallback._isFirstCall;\n currentCallback._isFirstCall = false;\n\n function clearTimeoutAndLeadingRef() {\n window.clearTimeout(debounceTimerRef.current);\n window.clearTimeout(maxWaitTimerRef.current);\n debounceTimerRef.current = 0;\n maxWaitTimerRef.current = 0;\n currentCallback._isFirstCall = true;\n currentCallback._hasPendingCallback = false;\n }\n\n function startMaxWaitTimer() {\n if (maxWait !== undefined && maxWaitTimerRef.current === 0) {\n maxWaitTimerRef.current = window.setTimeout(() => {\n if (debounceTimerRef.current !== 0) {\n const latestArgs = latestArgsRef.current!;\n clearTimeoutAndLeadingRef();\n handleCallback(...latestArgs);\n }\n }, maxWait);\n }\n }\n\n if (leading && isFirstCall) {\n handleCallback(...args);\n\n const resetLeadingState = () => {\n clearTimeoutAndLeadingRef();\n };\n\n const flush = () => {\n if (debounceTimerRef.current !== 0) {\n clearTimeoutAndLeadingRef();\n handleCallback(...args);\n }\n };\n\n const cancel = () => {\n clearTimeoutAndLeadingRef();\n };\n\n currentCallback.flush = flush;\n currentCallback.cancel = cancel;\n debounceTimerRef.current = window.setTimeout(resetLeadingState, delay);\n startMaxWaitTimer();\n return;\n }\n\n if (leading && !isFirstCall) {\n currentCallback._hasPendingCallback = true;\n const flush = () => {\n if (debounceTimerRef.current !== 0) {\n clearTimeoutAndLeadingRef();\n handleCallback(...args);\n }\n };\n\n const cancel = () => {\n clearTimeoutAndLeadingRef();\n };\n\n currentCallback.flush = flush;\n currentCallback.cancel = cancel;\n\n const resetLeadingState = () => {\n clearTimeoutAndLeadingRef();\n };\n debounceTimerRef.current = window.setTimeout(resetLeadingState, delay);\n startMaxWaitTimer();\n return;\n }\n\n currentCallback._hasPendingCallback = true;\n\n const flush = () => {\n if (debounceTimerRef.current !== 0) {\n clearTimeoutAndLeadingRef();\n handleCallback(...args);\n }\n };\n\n const cancel = () => {\n clearTimeoutAndLeadingRef();\n };\n\n currentCallback.flush = flush;\n currentCallback.cancel = cancel;\n debounceTimerRef.current = window.setTimeout(flush, delay);\n startMaxWaitTimer();\n },\n {\n flush: () => {},\n cancel: () => {},\n isPending: () => currentCallback._hasPendingCallback,\n _isFirstCall: true,\n _hasPendingCallback: false,\n }\n );\n return currentCallback;\n }, [handleCallback, delay, leading, maxWait]);\n\n useEffect(\n () => () => {\n if (flushOnUnmount) {\n lastCallback.flush();\n } else {\n lastCallback.cancel();\n }\n },\n [lastCallback, flushOnUnmount]\n );\n\n return lastCallback;\n}\n\nexport namespace useDebouncedCallback {\n export type Options = UseDebouncedCallbackOptions;\n export type ReturnValue<T extends (...args: any[]) => any> = UseDebouncedCallbackReturnValue<T>;\n}\n"],"mappings":";;;;AAcA,SAAgB,qBACd,UACA,SACA;CACA,MAAM,EAAE,OAAO,gBAAgB,SAAS,YACtC,OAAO,YAAY,WACf;EACE,OAAO;EACP,gBAAgB;EAChB,SAAS;EACT,SAAS,KAAA;EACV,GACD;CAEN,MAAM,iBAAiB,eAAe,SAAS;CAC/C,MAAM,mBAAmB,OAAO,EAAE;CAClC,MAAM,kBAAkB,OAAO,EAAE;CACjC,MAAM,gBAAgB,OAA6B,KAAK;CAExD,MAAM,eAAe,cAAc;EACjC,MAAM,kBAAkB,OAAO,QAC5B,GAAG,SAAwB;AAC1B,UAAO,aAAa,iBAAiB,QAAQ;AAC7C,iBAAc,UAAU;GAExB,MAAM,cAAc,gBAAgB;AACpC,mBAAgB,eAAe;GAE/B,SAAS,4BAA4B;AACnC,WAAO,aAAa,iBAAiB,QAAQ;AAC7C,WAAO,aAAa,gBAAgB,QAAQ;AAC5C,qBAAiB,UAAU;AAC3B,oBAAgB,UAAU;AAC1B,oBAAgB,eAAe;AAC/B,oBAAgB,sBAAsB;;GAGxC,SAAS,oBAAoB;AAC3B,QAAI,YAAY,KAAA,KAAa,gBAAgB,YAAY,EACvD,iBAAgB,UAAU,OAAO,iBAAiB;AAChD,SAAI,iBAAiB,YAAY,GAAG;MAClC,MAAM,aAAa,cAAc;AACjC,iCAA2B;AAC3B,qBAAe,GAAG,WAAW;;OAE9B,QAAQ;;AAIf,OAAI,WAAW,aAAa;AAC1B,mBAAe,GAAG,KAAK;IAEvB,MAAM,0BAA0B;AAC9B,gCAA2B;;IAG7B,MAAM,cAAc;AAClB,SAAI,iBAAiB,YAAY,GAAG;AAClC,iCAA2B;AAC3B,qBAAe,GAAG,KAAK;;;IAI3B,MAAM,eAAe;AACnB,gCAA2B;;AAG7B,oBAAgB,QAAQ;AACxB,oBAAgB,SAAS;AACzB,qBAAiB,UAAU,OAAO,WAAW,mBAAmB,MAAM;AACtE,uBAAmB;AACnB;;AAGF,OAAI,WAAW,CAAC,aAAa;AAC3B,oBAAgB,sBAAsB;IACtC,MAAM,cAAc;AAClB,SAAI,iBAAiB,YAAY,GAAG;AAClC,iCAA2B;AAC3B,qBAAe,GAAG,KAAK;;;IAI3B,MAAM,eAAe;AACnB,gCAA2B;;AAG7B,oBAAgB,QAAQ;AACxB,oBAAgB,SAAS;IAEzB,MAAM,0BAA0B;AAC9B,gCAA2B;;AAE7B,qBAAiB,UAAU,OAAO,WAAW,mBAAmB,MAAM;AACtE,uBAAmB;AACnB;;AAGF,mBAAgB,sBAAsB;GAEtC,MAAM,cAAc;AAClB,QAAI,iBAAiB,YAAY,GAAG;AAClC,gCAA2B;AAC3B,oBAAe,GAAG,KAAK;;;GAI3B,MAAM,eAAe;AACnB,+BAA2B;;AAG7B,mBAAgB,QAAQ;AACxB,mBAAgB,SAAS;AACzB,oBAAiB,UAAU,OAAO,WAAW,OAAO,MAAM;AAC1D,sBAAmB;KAErB;GACE,aAAa;GACb,cAAc;GACd,iBAAiB,gBAAgB;GACjC,cAAc;GACd,qBAAqB;GACtB,CACF;AACD,SAAO;IACN;EAAC;EAAgB;EAAO;EAAS;EAAQ,CAAC;AAE7C,uBACc;AACV,MAAI,eACF,cAAa,OAAO;MAEpB,cAAa,QAAQ;IAGzB,CAAC,cAAc,eAAe,CAC/B;AAED,QAAO"}
1
+ {"version":3,"file":"use-debounced-callback.mjs","names":[],"sources":["../../src/use-debounced-callback/use-debounced-callback.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport { useCallbackRef } from '../utils';\n\nexport interface UseDebouncedCallbackOptions {\n delay: number;\n flushOnUnmount?: boolean;\n leading?: boolean;\n maxWait?: number;\n}\n\nexport type UseDebouncedCallbackReturnValue<T extends (...args: any[]) => any> = ((\n ...args: Parameters<T>\n) => void) & { flush: () => void; cancel: () => void; isPending: () => boolean };\n\nexport function useDebouncedCallback<T extends (...args: any[]) => any>(\n callback: T,\n options: number | UseDebouncedCallbackOptions\n) {\n const { delay, flushOnUnmount, leading, maxWait } =\n typeof options === 'number'\n ? {\n delay: options,\n flushOnUnmount: false,\n leading: false,\n maxWait: undefined as number | undefined,\n }\n : options;\n\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = useRef(0);\n const maxWaitTimerRef = useRef(0);\n const latestArgsRef = useRef<Parameters<T> | null>(null);\n\n const lastCallback = useMemo(() => {\n const currentCallback = Object.assign(\n (...args: Parameters<T>) => {\n window.clearTimeout(debounceTimerRef.current);\n latestArgsRef.current = args;\n\n const isFirstCall = currentCallback._isFirstCall;\n currentCallback._isFirstCall = false;\n\n function clearTimeoutAndLeadingRef() {\n window.clearTimeout(debounceTimerRef.current);\n window.clearTimeout(maxWaitTimerRef.current);\n debounceTimerRef.current = 0;\n maxWaitTimerRef.current = 0;\n currentCallback._isFirstCall = true;\n currentCallback._hasPendingCallback = false;\n }\n\n function startMaxWaitTimer() {\n if (maxWait !== undefined && maxWaitTimerRef.current === 0) {\n maxWaitTimerRef.current = window.setTimeout(() => {\n if (debounceTimerRef.current !== 0) {\n const latestArgs = latestArgsRef.current!;\n clearTimeoutAndLeadingRef();\n handleCallback(...latestArgs);\n }\n }, maxWait);\n }\n }\n\n if (leading && isFirstCall) {\n handleCallback(...args);\n\n const resetLeadingState = () => {\n clearTimeoutAndLeadingRef();\n };\n\n const flush = () => {\n if (debounceTimerRef.current !== 0) {\n clearTimeoutAndLeadingRef();\n handleCallback(...args);\n }\n };\n\n const cancel = () => {\n clearTimeoutAndLeadingRef();\n };\n\n currentCallback.flush = flush;\n currentCallback.cancel = cancel;\n debounceTimerRef.current = window.setTimeout(resetLeadingState, delay);\n startMaxWaitTimer();\n return;\n }\n\n if (leading && !isFirstCall) {\n currentCallback._hasPendingCallback = true;\n const flush = () => {\n if (debounceTimerRef.current !== 0) {\n clearTimeoutAndLeadingRef();\n handleCallback(...args);\n }\n };\n\n const cancel = () => {\n clearTimeoutAndLeadingRef();\n };\n\n currentCallback.flush = flush;\n currentCallback.cancel = cancel;\n\n const resetLeadingState = () => {\n clearTimeoutAndLeadingRef();\n };\n debounceTimerRef.current = window.setTimeout(resetLeadingState, delay);\n startMaxWaitTimer();\n return;\n }\n\n currentCallback._hasPendingCallback = true;\n\n const flush = () => {\n if (debounceTimerRef.current !== 0) {\n clearTimeoutAndLeadingRef();\n handleCallback(...args);\n }\n };\n\n const cancel = () => {\n clearTimeoutAndLeadingRef();\n };\n\n currentCallback.flush = flush;\n currentCallback.cancel = cancel;\n debounceTimerRef.current = window.setTimeout(flush, delay);\n startMaxWaitTimer();\n },\n {\n flush: () => {},\n cancel: () => {},\n isPending: () => currentCallback._hasPendingCallback,\n _isFirstCall: true,\n _hasPendingCallback: false,\n }\n );\n return currentCallback;\n }, [handleCallback, delay, leading, maxWait]);\n\n useEffect(\n () => () => {\n if (flushOnUnmount) {\n lastCallback.flush();\n } else {\n lastCallback.cancel();\n }\n },\n [lastCallback, flushOnUnmount]\n );\n\n return lastCallback;\n}\n\nexport namespace useDebouncedCallback {\n export type Options = UseDebouncedCallbackOptions;\n export type ReturnValue<T extends (...args: any[]) => any> = UseDebouncedCallbackReturnValue<T>;\n}\n"],"mappings":";;;;AAcA,SAAgB,qBACd,UACA,SACA;CACA,MAAM,EAAE,OAAO,gBAAgB,SAAS,YACtC,OAAO,YAAY,WACf;EACE,OAAO;EACP,gBAAgB;EAChB,SAAS;EACT,SAAS,KAAA;CACX,IACA;CAEN,MAAM,iBAAiB,eAAe,QAAQ;CAC9C,MAAM,mBAAmB,OAAO,CAAC;CACjC,MAAM,kBAAkB,OAAO,CAAC;CAChC,MAAM,gBAAgB,OAA6B,IAAI;CAEvD,MAAM,eAAe,cAAc;EACjC,MAAM,kBAAkB,OAAO,QAC5B,GAAG,SAAwB;GAC1B,OAAO,aAAa,iBAAiB,OAAO;GAC5C,cAAc,UAAU;GAExB,MAAM,cAAc,gBAAgB;GACpC,gBAAgB,eAAe;GAE/B,SAAS,4BAA4B;IACnC,OAAO,aAAa,iBAAiB,OAAO;IAC5C,OAAO,aAAa,gBAAgB,OAAO;IAC3C,iBAAiB,UAAU;IAC3B,gBAAgB,UAAU;IAC1B,gBAAgB,eAAe;IAC/B,gBAAgB,sBAAsB;GACxC;GAEA,SAAS,oBAAoB;IAC3B,IAAI,YAAY,KAAA,KAAa,gBAAgB,YAAY,GACvD,gBAAgB,UAAU,OAAO,iBAAiB;KAChD,IAAI,iBAAiB,YAAY,GAAG;MAClC,MAAM,aAAa,cAAc;MACjC,0BAA0B;MAC1B,eAAe,GAAG,UAAU;KAC9B;IACF,GAAG,OAAO;GAEd;GAEA,IAAI,WAAW,aAAa;IAC1B,eAAe,GAAG,IAAI;IAEtB,MAAM,0BAA0B;KAC9B,0BAA0B;IAC5B;IAEA,MAAM,cAAc;KAClB,IAAI,iBAAiB,YAAY,GAAG;MAClC,0BAA0B;MAC1B,eAAe,GAAG,IAAI;KACxB;IACF;IAEA,MAAM,eAAe;KACnB,0BAA0B;IAC5B;IAEA,gBAAgB,QAAQ;IACxB,gBAAgB,SAAS;IACzB,iBAAiB,UAAU,OAAO,WAAW,mBAAmB,KAAK;IACrE,kBAAkB;IAClB;GACF;GAEA,IAAI,WAAW,CAAC,aAAa;IAC3B,gBAAgB,sBAAsB;IACtC,MAAM,cAAc;KAClB,IAAI,iBAAiB,YAAY,GAAG;MAClC,0BAA0B;MAC1B,eAAe,GAAG,IAAI;KACxB;IACF;IAEA,MAAM,eAAe;KACnB,0BAA0B;IAC5B;IAEA,gBAAgB,QAAQ;IACxB,gBAAgB,SAAS;IAEzB,MAAM,0BAA0B;KAC9B,0BAA0B;IAC5B;IACA,iBAAiB,UAAU,OAAO,WAAW,mBAAmB,KAAK;IACrE,kBAAkB;IAClB;GACF;GAEA,gBAAgB,sBAAsB;GAEtC,MAAM,cAAc;IAClB,IAAI,iBAAiB,YAAY,GAAG;KAClC,0BAA0B;KAC1B,eAAe,GAAG,IAAI;IACxB;GACF;GAEA,MAAM,eAAe;IACnB,0BAA0B;GAC5B;GAEA,gBAAgB,QAAQ;GACxB,gBAAgB,SAAS;GACzB,iBAAiB,UAAU,OAAO,WAAW,OAAO,KAAK;GACzD,kBAAkB;EACpB,GACA;GACE,aAAa,CAAC;GACd,cAAc,CAAC;GACf,iBAAiB,gBAAgB;GACjC,cAAc;GACd,qBAAqB;EACvB,CACF;EACA,OAAO;CACT,GAAG;EAAC;EAAgB;EAAO;EAAS;CAAO,CAAC;CAE5C,sBACc;EACV,IAAI,gBACF,aAAa,MAAM;OAEnB,aAAa,OAAO;CAExB,GACA,CAAC,cAAc,cAAc,CAC/B;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-debounced-state.mjs","names":[],"sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { SetStateAction, useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseDebouncedStateOptions {\n leading?: boolean;\n}\n\nexport type UseDebouncedStateReturnValue<T> = [T, (newValue: SetStateAction<T>) => void];\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options: UseDebouncedStateOptions = { leading: false }\n): UseDebouncedStateReturnValue<T> {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = useCallback(\n (newValue: SetStateAction<T>) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n },\n [options.leading, wait]\n );\n\n return [value, debouncedSetValue] as const;\n}\n\nexport namespace useDebouncedState {\n export type Options = UseDebouncedStateOptions;\n export type ReturnValue<T> = UseDebouncedStateReturnValue<T>;\n}\n"],"mappings":";;;AAQA,SAAgB,kBACd,cACA,MACA,UAAoC,EAAE,SAAS,OAAO,EACrB;CACjC,MAAM,CAAC,OAAO,YAAY,SAAS,aAAa;CAChD,MAAM,aAAa,OAAsB,KAAK;CAC9C,MAAM,aAAa,OAAO,KAAK;CAE/B,MAAM,qBAAqB,OAAO,aAAa,WAAW,QAAS;AACnE,iBAAgB,cAAc,EAAE,CAAC;AAkBjC,QAAO,CAAC,OAhBkB,aACvB,aAAgC;AAC/B,gBAAc;AACd,MAAI,WAAW,WAAW,QAAQ,QAChC,UAAS,SAAS;MAElB,YAAW,UAAU,OAAO,iBAAiB;AAC3C,cAAW,UAAU;AACrB,YAAS,SAAS;KACjB,KAAK;AAEV,aAAW,UAAU;IAEvB,CAAC,QAAQ,SAAS,KAAK,CACxB,CAEgC"}
1
+ {"version":3,"file":"use-debounced-state.mjs","names":[],"sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { SetStateAction, useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseDebouncedStateOptions {\n leading?: boolean;\n}\n\nexport type UseDebouncedStateReturnValue<T> = [T, (newValue: SetStateAction<T>) => void];\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options: UseDebouncedStateOptions = { leading: false }\n): UseDebouncedStateReturnValue<T> {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = useCallback(\n (newValue: SetStateAction<T>) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n },\n [options.leading, wait]\n );\n\n return [value, debouncedSetValue] as const;\n}\n\nexport namespace useDebouncedState {\n export type Options = UseDebouncedStateOptions;\n export type ReturnValue<T> = UseDebouncedStateReturnValue<T>;\n}\n"],"mappings":";;;AAQA,SAAgB,kBACd,cACA,MACA,UAAoC,EAAE,SAAS,MAAM,GACpB;CACjC,MAAM,CAAC,OAAO,YAAY,SAAS,YAAY;CAC/C,MAAM,aAAa,OAAsB,IAAI;CAC7C,MAAM,aAAa,OAAO,IAAI;CAE9B,MAAM,qBAAqB,OAAO,aAAa,WAAW,OAAQ;CAClE,gBAAgB,cAAc,CAAC,CAAC;CAkBhC,OAAO,CAAC,OAhBkB,aACvB,aAAgC;EAC/B,aAAa;EACb,IAAI,WAAW,WAAW,QAAQ,SAChC,SAAS,QAAQ;OAEjB,WAAW,UAAU,OAAO,iBAAiB;GAC3C,WAAW,UAAU;GACrB,SAAS,QAAQ;EACnB,GAAG,IAAI;EAET,WAAW,UAAU;CACvB,GACA,CAAC,QAAQ,SAAS,IAAI,CAGO,CAAC;AAClC"}
@@ -24,6 +24,9 @@ function useDebouncedValue(value, wait, options = { leading: false }) {
24
24
  if (mountedRef.current) if (!cooldownRef.current && options.leading) {
25
25
  cooldownRef.current = true;
26
26
  setValue(value);
27
+ timeoutRef.current = window.setTimeout(() => {
28
+ cooldownRef.current = false;
29
+ }, wait);
27
30
  } else {
28
31
  cancel();
29
32
  timeoutRef.current = window.setTimeout(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"use-debounced-value.mjs","names":[],"sources":["../../src/use-debounced-value/use-debounced-value.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseDebouncedValueOptions {\n leading?: boolean;\n}\n\nexport interface UseDebouncedValueHandlers {\n cancel: () => void;\n flush: () => void;\n}\n\nexport type UseDebouncedValueReturnValue<T> = [T, () => void, UseDebouncedValueHandlers];\n\nexport function useDebouncedValue<T = any>(\n value: T,\n wait: number,\n options: UseDebouncedValueOptions = { leading: false }\n): UseDebouncedValueReturnValue<T> {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef<number | null>(null);\n const cooldownRef = useRef(false);\n\n const latestValueRef = useRef(value);\n latestValueRef.current = value;\n\n const cancel = useCallback(() => {\n window.clearTimeout(timeoutRef.current!);\n timeoutRef.current = null;\n cooldownRef.current = false;\n }, []);\n\n const flush = useCallback(() => {\n if (timeoutRef.current) {\n cancel();\n cooldownRef.current = false;\n setValue(latestValueRef.current);\n }\n }, []);\n\n useEffect(() => {\n if (mountedRef.current) {\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, wait);\n }\n }\n }, [value, options.leading, wait]);\n\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n\n return [_value, cancel, { cancel, flush }];\n}\n\nexport namespace useDebouncedValue {\n export type Handlers = UseDebouncedValueHandlers;\n export type Options = UseDebouncedValueOptions;\n export type ReturnValue<T> = UseDebouncedValueReturnValue<T>;\n}\n"],"mappings":";;;AAaA,SAAgB,kBACd,OACA,MACA,UAAoC,EAAE,SAAS,OAAO,EACrB;CACjC,MAAM,CAAC,QAAQ,YAAY,SAAS,MAAM;CAC1C,MAAM,aAAa,OAAO,MAAM;CAChC,MAAM,aAAa,OAAsB,KAAK;CAC9C,MAAM,cAAc,OAAO,MAAM;CAEjC,MAAM,iBAAiB,OAAO,MAAM;AACpC,gBAAe,UAAU;CAEzB,MAAM,SAAS,kBAAkB;AAC/B,SAAO,aAAa,WAAW,QAAS;AACxC,aAAW,UAAU;AACrB,cAAY,UAAU;IACrB,EAAE,CAAC;CAEN,MAAM,QAAQ,kBAAkB;AAC9B,MAAI,WAAW,SAAS;AACtB,WAAQ;AACR,eAAY,UAAU;AACtB,YAAS,eAAe,QAAQ;;IAEjC,EAAE,CAAC;AAEN,iBAAgB;AACd,MAAI,WAAW,QACb,KAAI,CAAC,YAAY,WAAW,QAAQ,SAAS;AAC3C,eAAY,UAAU;AACtB,YAAS,MAAM;SACV;AACL,WAAQ;AACR,cAAW,UAAU,OAAO,iBAAiB;AAC3C,gBAAY,UAAU;AACtB,aAAS,MAAM;MACd,KAAK;;IAGX;EAAC;EAAO,QAAQ;EAAS;EAAK,CAAC;AAElC,iBAAgB;AACd,aAAW,UAAU;AACrB,SAAO;IACN,EAAE,CAAC;AAEN,QAAO;EAAC;EAAQ;EAAQ;GAAE;GAAQ;GAAO;EAAC"}
1
+ {"version":3,"file":"use-debounced-value.mjs","names":[],"sources":["../../src/use-debounced-value/use-debounced-value.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseDebouncedValueOptions {\n leading?: boolean;\n}\n\nexport interface UseDebouncedValueHandlers {\n cancel: () => void;\n flush: () => void;\n}\n\nexport type UseDebouncedValueReturnValue<T> = [T, () => void, UseDebouncedValueHandlers];\n\nexport function useDebouncedValue<T = any>(\n value: T,\n wait: number,\n options: UseDebouncedValueOptions = { leading: false }\n): UseDebouncedValueReturnValue<T> {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef<number | null>(null);\n const cooldownRef = useRef(false);\n\n const latestValueRef = useRef(value);\n latestValueRef.current = value;\n\n const cancel = useCallback(() => {\n window.clearTimeout(timeoutRef.current!);\n timeoutRef.current = null;\n cooldownRef.current = false;\n }, []);\n\n const flush = useCallback(() => {\n if (timeoutRef.current) {\n cancel();\n cooldownRef.current = false;\n setValue(latestValueRef.current);\n }\n }, []);\n\n useEffect(() => {\n if (mountedRef.current) {\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n }, wait);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, wait);\n }\n }\n }, [value, options.leading, wait]);\n\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n\n return [_value, cancel, { cancel, flush }];\n}\n\nexport namespace useDebouncedValue {\n export type Handlers = UseDebouncedValueHandlers;\n export type Options = UseDebouncedValueOptions;\n export type ReturnValue<T> = UseDebouncedValueReturnValue<T>;\n}\n"],"mappings":";;;AAaA,SAAgB,kBACd,OACA,MACA,UAAoC,EAAE,SAAS,MAAM,GACpB;CACjC,MAAM,CAAC,QAAQ,YAAY,SAAS,KAAK;CACzC,MAAM,aAAa,OAAO,KAAK;CAC/B,MAAM,aAAa,OAAsB,IAAI;CAC7C,MAAM,cAAc,OAAO,KAAK;CAEhC,MAAM,iBAAiB,OAAO,KAAK;CACnC,eAAe,UAAU;CAEzB,MAAM,SAAS,kBAAkB;EAC/B,OAAO,aAAa,WAAW,OAAQ;EACvC,WAAW,UAAU;EACrB,YAAY,UAAU;CACxB,GAAG,CAAC,CAAC;CAEL,MAAM,QAAQ,kBAAkB;EAC9B,IAAI,WAAW,SAAS;GACtB,OAAO;GACP,YAAY,UAAU;GACtB,SAAS,eAAe,OAAO;EACjC;CACF,GAAG,CAAC,CAAC;CAEL,gBAAgB;EACd,IAAI,WAAW,SACb,IAAI,CAAC,YAAY,WAAW,QAAQ,SAAS;GAC3C,YAAY,UAAU;GACtB,SAAS,KAAK;GACd,WAAW,UAAU,OAAO,iBAAiB;IAC3C,YAAY,UAAU;GACxB,GAAG,IAAI;EACT,OAAO;GACL,OAAO;GACP,WAAW,UAAU,OAAO,iBAAiB;IAC3C,YAAY,UAAU;IACtB,SAAS,KAAK;GAChB,GAAG,IAAI;EACT;CAEJ,GAAG;EAAC;EAAO,QAAQ;EAAS;CAAI,CAAC;CAEjC,gBAAgB;EACd,WAAW,UAAU;EACrB,OAAO;CACT,GAAG,CAAC,CAAC;CAEL,OAAO;EAAC;EAAQ;EAAQ;GAAE;GAAQ;EAAM;CAAC;AAC3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-did-update.mjs","names":[],"sources":["../../src/use-did-update/use-did-update.ts"],"sourcesContent":["import { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\nexport function useDidUpdate(fn: EffectCallback, dependencies?: DependencyList) {\n const mounted = useRef(false);\n\n useEffect(\n () => () => {\n mounted.current = false;\n },\n []\n );\n\n useEffect(() => {\n if (mounted.current) {\n return fn();\n }\n\n mounted.current = true;\n return undefined;\n }, dependencies);\n}\n"],"mappings":";;;AAEA,SAAgB,aAAa,IAAoB,cAA+B;CAC9E,MAAM,UAAU,OAAO,MAAM;AAE7B,uBACc;AACV,UAAQ,UAAU;IAEpB,EAAE,CACH;AAED,iBAAgB;AACd,MAAI,QAAQ,QACV,QAAO,IAAI;AAGb,UAAQ,UAAU;IAEjB,aAAa"}
1
+ {"version":3,"file":"use-did-update.mjs","names":[],"sources":["../../src/use-did-update/use-did-update.ts"],"sourcesContent":["import { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\nexport function useDidUpdate(fn: EffectCallback, dependencies?: DependencyList) {\n const mounted = useRef(false);\n\n useEffect(\n () => () => {\n mounted.current = false;\n },\n []\n );\n\n useEffect(() => {\n if (mounted.current) {\n return fn();\n }\n\n mounted.current = true;\n return undefined;\n }, dependencies);\n}\n"],"mappings":";;;AAEA,SAAgB,aAAa,IAAoB,cAA+B;CAC9E,MAAM,UAAU,OAAO,KAAK;CAE5B,sBACc;EACV,QAAQ,UAAU;CACpB,GACA,CAAC,CACH;CAEA,gBAAgB;EACd,IAAI,QAAQ,SACV,OAAO,GAAG;EAGZ,QAAQ,UAAU;CAEpB,GAAG,YAAY;AACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-disclosure.mjs","names":[],"sources":["../../src/use-disclosure/use-disclosure.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nexport interface UseDisclosureOptions {\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface UseDisclosureHandlers {\n set: (value: boolean) => void;\n open: () => void;\n close: () => void;\n toggle: () => void;\n}\n\nexport type UseDisclosureReturnValue = [boolean, UseDisclosureHandlers];\n\nexport function useDisclosure(\n initialState = false,\n options: UseDisclosureOptions = {}\n): UseDisclosureReturnValue {\n const [opened, setOpened] = useState(initialState);\n\n const open = useCallback(() => {\n setOpened((isOpened) => {\n if (!isOpened) {\n options.onOpen?.();\n return true;\n }\n return isOpened;\n });\n }, [options.onOpen]);\n\n const close = useCallback(() => {\n setOpened((isOpened) => {\n if (isOpened) {\n options.onClose?.();\n return false;\n }\n return isOpened;\n });\n }, [options.onClose]);\n\n const toggle = useCallback(() => {\n opened ? close() : open();\n }, [close, open, opened]);\n\n return [opened, { open, close, toggle, set: setOpened }];\n}\n\nexport namespace useDisclosure {\n export type Options = UseDisclosureOptions;\n export type Handlers = UseDisclosureHandlers;\n export type ReturnValue = UseDisclosureReturnValue;\n}\n"],"mappings":";;;AAgBA,SAAgB,cACd,eAAe,OACf,UAAgC,EAAE,EACR;CAC1B,MAAM,CAAC,QAAQ,aAAa,SAAS,aAAa;CAElD,MAAM,OAAO,kBAAkB;AAC7B,aAAW,aAAa;AACtB,OAAI,CAAC,UAAU;AACb,YAAQ,UAAU;AAClB,WAAO;;AAET,UAAO;IACP;IACD,CAAC,QAAQ,OAAO,CAAC;CAEpB,MAAM,QAAQ,kBAAkB;AAC9B,aAAW,aAAa;AACtB,OAAI,UAAU;AACZ,YAAQ,WAAW;AACnB,WAAO;;AAET,UAAO;IACP;IACD,CAAC,QAAQ,QAAQ,CAAC;AAMrB,QAAO,CAAC,QAAQ;EAAE;EAAM;EAAO,QAJhB,kBAAkB;AAC/B,YAAS,OAAO,GAAG,MAAM;KACxB;GAAC;GAAO;GAAM;GAAO,CAAC;EAEc,KAAK;EAAW,CAAC"}
1
+ {"version":3,"file":"use-disclosure.mjs","names":[],"sources":["../../src/use-disclosure/use-disclosure.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nexport interface UseDisclosureOptions {\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface UseDisclosureHandlers {\n set: (value: boolean) => void;\n open: () => void;\n close: () => void;\n toggle: () => void;\n}\n\nexport type UseDisclosureReturnValue = [boolean, UseDisclosureHandlers];\n\nexport function useDisclosure(\n initialState = false,\n options: UseDisclosureOptions = {}\n): UseDisclosureReturnValue {\n const [opened, setOpened] = useState(initialState);\n\n const open = useCallback(() => {\n setOpened((isOpened) => {\n if (!isOpened) {\n options.onOpen?.();\n return true;\n }\n return isOpened;\n });\n }, [options.onOpen]);\n\n const close = useCallback(() => {\n setOpened((isOpened) => {\n if (isOpened) {\n options.onClose?.();\n return false;\n }\n return isOpened;\n });\n }, [options.onClose]);\n\n const toggle = useCallback(() => {\n opened ? close() : open();\n }, [close, open, opened]);\n\n return [opened, { open, close, toggle, set: setOpened }];\n}\n\nexport namespace useDisclosure {\n export type Options = UseDisclosureOptions;\n export type Handlers = UseDisclosureHandlers;\n export type ReturnValue = UseDisclosureReturnValue;\n}\n"],"mappings":";;;AAgBA,SAAgB,cACd,eAAe,OACf,UAAgC,CAAC,GACP;CAC1B,MAAM,CAAC,QAAQ,aAAa,SAAS,YAAY;CAEjD,MAAM,OAAO,kBAAkB;EAC7B,WAAW,aAAa;GACtB,IAAI,CAAC,UAAU;IACb,QAAQ,SAAS;IACjB,OAAO;GACT;GACA,OAAO;EACT,CAAC;CACH,GAAG,CAAC,QAAQ,MAAM,CAAC;CAEnB,MAAM,QAAQ,kBAAkB;EAC9B,WAAW,aAAa;GACtB,IAAI,UAAU;IACZ,QAAQ,UAAU;IAClB,OAAO;GACT;GACA,OAAO;EACT,CAAC;CACH,GAAG,CAAC,QAAQ,OAAO,CAAC;CAMpB,OAAO,CAAC,QAAQ;EAAE;EAAM;EAAO,QAJhB,kBAAkB;GAC/B,SAAS,MAAM,IAAI,KAAK;EAC1B,GAAG;GAAC;GAAO;GAAM;EAAM,CAEa;EAAG,KAAK;CAAU,CAAC;AACzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-document-title.mjs","names":[],"sources":["../../src/use-document-title/use-document-title.ts"],"sourcesContent":["import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport function useDocumentTitle(title: string) {\n useIsomorphicEffect(() => {\n if (typeof title === 'string' && title.trim().length > 0) {\n document.title = title.trim();\n }\n }, [title]);\n}\n"],"mappings":";;;AAEA,SAAgB,iBAAiB,OAAe;AAC9C,2BAA0B;AACxB,MAAI,OAAO,UAAU,YAAY,MAAM,MAAM,CAAC,SAAS,EACrD,UAAS,QAAQ,MAAM,MAAM;IAE9B,CAAC,MAAM,CAAC"}
1
+ {"version":3,"file":"use-document-title.mjs","names":[],"sources":["../../src/use-document-title/use-document-title.ts"],"sourcesContent":["import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport function useDocumentTitle(title: string) {\n useIsomorphicEffect(() => {\n if (typeof title === 'string' && title.trim().length > 0) {\n document.title = title.trim();\n }\n }, [title]);\n}\n"],"mappings":";;;AAEA,SAAgB,iBAAiB,OAAe;CAC9C,0BAA0B;EACxB,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,GACrD,SAAS,QAAQ,MAAM,KAAK;CAEhC,GAAG,CAAC,KAAK,CAAC;AACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-document-visibility.mjs","names":[],"sources":["../../src/use-document-visibility/use-document-visibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDocumentVisibility(): DocumentVisibilityState {\n const [documentVisibility, setDocumentVisibility] = useState<DocumentVisibilityState>('visible');\n\n useEffect(() => {\n setDocumentVisibility(document.visibilityState);\n const listener = () => setDocumentVisibility(document.visibilityState);\n document.addEventListener('visibilitychange', listener);\n return () => document.removeEventListener('visibilitychange', listener);\n }, []);\n\n return documentVisibility;\n}\n"],"mappings":";;;AAEA,SAAgB,wBAAiD;CAC/D,MAAM,CAAC,oBAAoB,yBAAyB,SAAkC,UAAU;AAEhG,iBAAgB;AACd,wBAAsB,SAAS,gBAAgB;EAC/C,MAAM,iBAAiB,sBAAsB,SAAS,gBAAgB;AACtE,WAAS,iBAAiB,oBAAoB,SAAS;AACvD,eAAa,SAAS,oBAAoB,oBAAoB,SAAS;IACtE,EAAE,CAAC;AAEN,QAAO"}
1
+ {"version":3,"file":"use-document-visibility.mjs","names":[],"sources":["../../src/use-document-visibility/use-document-visibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDocumentVisibility(): DocumentVisibilityState {\n const [documentVisibility, setDocumentVisibility] = useState<DocumentVisibilityState>('visible');\n\n useEffect(() => {\n setDocumentVisibility(document.visibilityState);\n const listener = () => setDocumentVisibility(document.visibilityState);\n document.addEventListener('visibilitychange', listener);\n return () => document.removeEventListener('visibilitychange', listener);\n }, []);\n\n return documentVisibility;\n}\n"],"mappings":";;;AAEA,SAAgB,wBAAiD;CAC/D,MAAM,CAAC,oBAAoB,yBAAyB,SAAkC,SAAS;CAE/F,gBAAgB;EACd,sBAAsB,SAAS,eAAe;EAC9C,MAAM,iBAAiB,sBAAsB,SAAS,eAAe;EACrE,SAAS,iBAAiB,oBAAoB,QAAQ;EACtD,aAAa,SAAS,oBAAoB,oBAAoB,QAAQ;CACxE,GAAG,CAAC,CAAC;CAEL,OAAO;AACT"}