react-simplikit 0.0.50 → 0.0.52

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 (279) hide show
  1. package/dist/components/ImpressionArea/ImpressionArea.cjs +57 -0
  2. package/{esm/components/ImpressionArea/index.d.ts → dist/components/ImpressionArea/ImpressionArea.d.cts} +9 -8
  3. package/dist/components/ImpressionArea/ImpressionArea.d.mts +48 -0
  4. package/dist/components/ImpressionArea/ImpressionArea.mjs +57 -0
  5. package/dist/components/ImpressionArea/index.d.cts +2 -46
  6. package/dist/components/ImpressionArea/index.d.mts +3 -0
  7. package/dist/components/Separated/Separated.cjs +38 -0
  8. package/{esm/components/Separated/index.d.ts → dist/components/Separated/Separated.d.cts} +7 -7
  9. package/dist/components/Separated/Separated.d.mts +38 -0
  10. package/dist/components/Separated/Separated.mjs +38 -0
  11. package/dist/components/Separated/index.d.cts +2 -37
  12. package/dist/components/Separated/index.d.mts +3 -0
  13. package/dist/components/SwitchCase/SwitchCase.cjs +40 -0
  14. package/{esm/components/SwitchCase/index.d.ts → dist/components/SwitchCase/SwitchCase.d.cts} +7 -8
  15. package/dist/components/SwitchCase/SwitchCase.d.mts +45 -0
  16. package/dist/components/SwitchCase/SwitchCase.mjs +40 -0
  17. package/dist/components/SwitchCase/index.d.cts +2 -45
  18. package/dist/components/SwitchCase/index.d.mts +3 -0
  19. package/dist/hooks/useAsyncEffect/index.d.cts +2 -24
  20. package/dist/hooks/useAsyncEffect/index.d.mts +3 -0
  21. package/dist/hooks/useAsyncEffect/useAsyncEffect.cjs +39 -0
  22. package/{esm/hooks/useAsyncEffect/index.d.ts → dist/hooks/useAsyncEffect/useAsyncEffect.d.cts} +4 -3
  23. package/dist/hooks/useAsyncEffect/useAsyncEffect.d.mts +26 -0
  24. package/dist/hooks/useAsyncEffect/useAsyncEffect.mjs +39 -0
  25. package/dist/hooks/useBooleanState/useBooleanState.cjs +36 -0
  26. package/dist/hooks/useBooleanState/{index.d.cts → useBooleanState.d.cts} +4 -2
  27. package/{esm/hooks/useBooleanState/index.d.ts → dist/hooks/useBooleanState/useBooleanState.d.mts} +4 -2
  28. package/dist/hooks/useBooleanState/useBooleanState.mjs +36 -0
  29. package/dist/hooks/useCallbackOncePerRender/index.d.cts +2 -39
  30. package/dist/hooks/useCallbackOncePerRender/index.d.mts +3 -0
  31. package/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.cjs +52 -0
  32. package/{esm/hooks/useCallbackOncePerRender/index.d.ts → dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.d.cts} +4 -3
  33. package/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.d.mts +41 -0
  34. package/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.mjs +52 -0
  35. package/dist/hooks/useConditionalEffect/index.d.cts +2 -42
  36. package/dist/hooks/useConditionalEffect/index.d.mts +3 -0
  37. package/dist/hooks/useConditionalEffect/useConditionalEffect.cjs +57 -0
  38. package/{esm/hooks/useConditionalEffect/index.d.ts → dist/hooks/useConditionalEffect/useConditionalEffect.d.cts} +4 -3
  39. package/dist/hooks/useConditionalEffect/useConditionalEffect.d.mts +44 -0
  40. package/dist/hooks/useConditionalEffect/useConditionalEffect.mjs +57 -0
  41. package/dist/hooks/useControlledState/index.d.cts +2 -50
  42. package/dist/hooks/useControlledState/index.d.mts +3 -0
  43. package/dist/hooks/useControlledState/useControlledState.cjs +60 -0
  44. package/{esm/hooks/useControlledState/index.d.ts → dist/hooks/useControlledState/useControlledState.d.cts} +11 -10
  45. package/dist/hooks/useControlledState/useControlledState.d.mts +52 -0
  46. package/dist/hooks/useControlledState/useControlledState.mjs +60 -0
  47. package/dist/hooks/useCounter/useCounter.cjs +75 -0
  48. package/{esm/hooks/useCounter/index.d.ts → dist/hooks/useCounter/useCounter.d.cts} +12 -10
  49. package/dist/hooks/useCounter/{index.d.cts → useCounter.d.mts} +12 -10
  50. package/dist/hooks/useCounter/useCounter.mjs +75 -0
  51. package/dist/hooks/useDebounce/debounce.cjs +49 -0
  52. package/dist/hooks/useDebounce/debounce.d.cts +8 -0
  53. package/dist/hooks/useDebounce/debounce.d.mts +8 -0
  54. package/dist/hooks/useDebounce/debounce.mjs +49 -0
  55. package/dist/hooks/useDebounce/useDebounce.cjs +66 -0
  56. package/{esm/hooks/useDebounce/index.d.ts → dist/hooks/useDebounce/useDebounce.d.cts} +6 -8
  57. package/dist/hooks/useDebounce/{index.d.cts → useDebounce.d.mts} +6 -8
  58. package/dist/hooks/useDebounce/useDebounce.mjs +66 -0
  59. package/dist/hooks/useDebouncedCallback/useDebouncedCallback.cjs +62 -0
  60. package/{esm/hooks/useDebouncedCallback/index.d.ts → dist/hooks/useDebouncedCallback/useDebouncedCallback.d.cts} +9 -7
  61. package/dist/hooks/useDebouncedCallback/{index.d.cts → useDebouncedCallback.d.mts} +9 -7
  62. package/dist/hooks/useDebouncedCallback/useDebouncedCallback.mjs +62 -0
  63. package/dist/hooks/useDoubleClick/index.d.cts +2 -45
  64. package/dist/hooks/useDoubleClick/index.d.mts +3 -0
  65. package/dist/hooks/useDoubleClick/useDoubleClick.cjs +64 -0
  66. package/{esm/hooks/useDoubleClick/index.d.ts → dist/hooks/useDoubleClick/useDoubleClick.d.cts} +8 -7
  67. package/dist/hooks/useDoubleClick/useDoubleClick.d.mts +47 -0
  68. package/dist/hooks/useDoubleClick/useDoubleClick.mjs +64 -0
  69. package/dist/hooks/useGeolocation/useGeolocation.cjs +210 -0
  70. package/{esm/hooks/useGeolocation/index.d.ts → dist/hooks/useGeolocation/useGeolocation.d.cts} +26 -24
  71. package/dist/hooks/useGeolocation/{index.d.cts → useGeolocation.d.mts} +26 -24
  72. package/dist/hooks/useGeolocation/useGeolocation.mjs +209 -0
  73. package/dist/hooks/useImpressionRef/useImpressionRef.cjs +67 -0
  74. package/{esm/hooks/useImpressionRef/index.d.ts → dist/hooks/useImpressionRef/useImpressionRef.d.cts} +10 -8
  75. package/dist/hooks/useImpressionRef/{index.d.cts → useImpressionRef.d.mts} +10 -8
  76. package/dist/hooks/useImpressionRef/useImpressionRef.mjs +67 -0
  77. package/dist/hooks/useInputState/index.d.cts +2 -22
  78. package/dist/hooks/useInputState/index.d.mts +3 -0
  79. package/dist/hooks/useInputState/useInputState.cjs +32 -0
  80. package/{esm/hooks/useInputState/index.d.ts → dist/hooks/useInputState/useInputState.d.cts} +4 -3
  81. package/dist/hooks/useInputState/useInputState.d.mts +24 -0
  82. package/dist/hooks/useInputState/useInputState.mjs +32 -0
  83. package/dist/hooks/useIntersectionObserver/useIntersectionObserver.cjs +58 -0
  84. package/dist/hooks/useIntersectionObserver/{index.d.cts → useIntersectionObserver.d.cts} +4 -2
  85. package/{esm/hooks/useIntersectionObserver/index.d.ts → dist/hooks/useIntersectionObserver/useIntersectionObserver.d.mts} +4 -2
  86. package/dist/hooks/useIntersectionObserver/useIntersectionObserver.mjs +58 -0
  87. package/dist/hooks/useInterval/useInterval.cjs +65 -0
  88. package/dist/hooks/useInterval/{index.d.cts → useInterval.d.cts} +7 -5
  89. package/{esm/hooks/useInterval/index.d.ts → dist/hooks/useInterval/useInterval.d.mts} +7 -5
  90. package/dist/hooks/useInterval/useInterval.mjs +65 -0
  91. package/dist/hooks/useIsClient/useIsClient.cjs +49 -0
  92. package/dist/hooks/useIsClient/{index.d.cts → useIsClient.d.cts} +4 -2
  93. package/{esm/hooks/useIsClient/index.d.ts → dist/hooks/useIsClient/useIsClient.d.mts} +4 -2
  94. package/dist/hooks/useIsClient/useIsClient.mjs +49 -0
  95. package/dist/hooks/useIsomorphicLayoutEffect/index.d.cts +2 -24
  96. package/dist/hooks/useIsomorphicLayoutEffect/index.d.mts +3 -0
  97. package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs +25 -0
  98. package/{esm/hooks/useIsomorphicLayoutEffect/index.d.ts → dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.d.cts} +4 -3
  99. package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.d.mts +26 -0
  100. package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs +25 -0
  101. package/dist/hooks/useList/useList.cjs +94 -0
  102. package/{esm/hooks/useList/index.d.ts → dist/hooks/useList/useList.d.cts} +10 -8
  103. package/dist/hooks/useList/{index.d.cts → useList.d.mts} +10 -8
  104. package/dist/hooks/useList/useList.mjs +94 -0
  105. package/dist/hooks/useLoading/useLoading.cjs +61 -0
  106. package/dist/hooks/useLoading/{index.d.cts → useLoading.d.cts} +4 -2
  107. package/{esm/hooks/useLoading/index.d.ts → dist/hooks/useLoading/useLoading.d.mts} +4 -2
  108. package/dist/hooks/useLoading/useLoading.mjs +61 -0
  109. package/dist/hooks/useLongPress/index.d.cts +2 -73
  110. package/dist/hooks/useLongPress/index.d.mts +3 -0
  111. package/dist/hooks/useLongPress/useLongPress.cjs +133 -0
  112. package/{esm/hooks/useLongPress/index.d.ts → dist/hooks/useLongPress/useLongPress.d.cts} +18 -17
  113. package/dist/hooks/useLongPress/useLongPress.d.mts +75 -0
  114. package/dist/hooks/useLongPress/useLongPress.mjs +133 -0
  115. package/dist/hooks/useMap/useMap.cjs +64 -0
  116. package/dist/hooks/useMap/{index.d.cts → useMap.d.cts} +12 -10
  117. package/{esm/hooks/useMap/index.d.ts → dist/hooks/useMap/useMap.d.mts} +12 -10
  118. package/dist/hooks/useMap/useMap.mjs +64 -0
  119. package/dist/hooks/useOutsideClickEffect/useOutsideClickEffect.cjs +51 -0
  120. package/{esm/hooks/useOutsideClickEffect/index.d.ts → dist/hooks/useOutsideClickEffect/useOutsideClickEffect.d.cts} +4 -2
  121. package/dist/hooks/useOutsideClickEffect/{index.d.cts → useOutsideClickEffect.d.mts} +4 -2
  122. package/dist/hooks/useOutsideClickEffect/useOutsideClickEffect.mjs +51 -0
  123. package/dist/hooks/usePreservedCallback/usePreservedCallback.cjs +41 -0
  124. package/dist/hooks/usePreservedCallback/{index.d.cts → usePreservedCallback.d.cts} +4 -2
  125. package/{esm/hooks/usePreservedCallback/index.d.ts → dist/hooks/usePreservedCallback/usePreservedCallback.d.mts} +4 -2
  126. package/dist/hooks/usePreservedCallback/usePreservedCallback.mjs +41 -0
  127. package/dist/hooks/usePreservedReference/usePreservedReference.cjs +55 -0
  128. package/dist/hooks/usePreservedReference/{index.d.cts → usePreservedReference.d.cts} +4 -2
  129. package/{esm/hooks/usePreservedReference/index.d.ts → dist/hooks/usePreservedReference/usePreservedReference.d.mts} +4 -2
  130. package/dist/hooks/usePreservedReference/usePreservedReference.mjs +55 -0
  131. package/dist/hooks/usePrevious/usePrevious.cjs +38 -0
  132. package/{esm/hooks/usePrevious/index.d.ts → dist/hooks/usePrevious/usePrevious.d.cts} +4 -2
  133. package/dist/hooks/usePrevious/{index.d.cts → usePrevious.d.mts} +4 -2
  134. package/dist/hooks/usePrevious/usePrevious.mjs +38 -0
  135. package/dist/hooks/useRefEffect/index.d.cts +2 -30
  136. package/dist/hooks/useRefEffect/index.d.mts +3 -0
  137. package/dist/hooks/useRefEffect/useRefEffect.cjs +42 -0
  138. package/{esm/hooks/useRefEffect/index.d.ts → dist/hooks/useRefEffect/useRefEffect.d.cts} +4 -3
  139. package/dist/hooks/useRefEffect/useRefEffect.d.mts +32 -0
  140. package/dist/hooks/useRefEffect/useRefEffect.mjs +42 -0
  141. package/dist/hooks/useSet/useSet.cjs +79 -0
  142. package/dist/hooks/useSet/{index.d.cts → useSet.d.cts} +9 -7
  143. package/{esm/hooks/useSet/index.d.ts → dist/hooks/useSet/useSet.d.mts} +9 -7
  144. package/dist/hooks/useSet/useSet.mjs +79 -0
  145. package/dist/hooks/useStorageState/index.d.cts +2 -60
  146. package/dist/hooks/useStorageState/index.d.mts +3 -0
  147. package/dist/hooks/useStorageState/storage.cjs +85 -0
  148. package/dist/hooks/useStorageState/storage.d.cts +10 -0
  149. package/dist/hooks/useStorageState/storage.d.mts +10 -0
  150. package/dist/hooks/useStorageState/storage.mjs +80 -0
  151. package/dist/hooks/useStorageState/useStorageState.cjs +81 -0
  152. package/{esm/hooks/useStorageState/index.d.ts → dist/hooks/useStorageState/useStorageState.d.cts} +10 -15
  153. package/dist/hooks/useStorageState/useStorageState.d.mts +56 -0
  154. package/dist/hooks/useStorageState/useStorageState.mjs +81 -0
  155. package/dist/hooks/useThrottle/throttle.cjs +19 -0
  156. package/dist/hooks/useThrottle/throttle.d.cts +19 -0
  157. package/dist/hooks/useThrottle/throttle.d.mts +19 -0
  158. package/dist/hooks/useThrottle/throttle.mjs +19 -0
  159. package/dist/hooks/useThrottle/useThrottle.cjs +49 -0
  160. package/dist/hooks/useThrottle/{index.d.cts → useThrottle.d.cts} +6 -19
  161. package/{esm/hooks/useThrottle/index.d.ts → dist/hooks/useThrottle/useThrottle.d.mts} +6 -19
  162. package/dist/hooks/useThrottle/useThrottle.mjs +49 -0
  163. package/dist/hooks/useThrottledCallback/useThrottledCallback.cjs +57 -0
  164. package/{esm/hooks/useThrottledCallback/index.d.ts → dist/hooks/useThrottledCallback/useThrottledCallback.d.cts} +8 -6
  165. package/dist/hooks/useThrottledCallback/{index.d.cts → useThrottledCallback.d.mts} +8 -6
  166. package/dist/hooks/useThrottledCallback/useThrottledCallback.mjs +57 -0
  167. package/dist/hooks/useTimeout/useTimeout.cjs +40 -0
  168. package/dist/hooks/useTimeout/{index.d.cts → useTimeout.d.cts} +4 -2
  169. package/{esm/hooks/useTimeout/index.d.ts → dist/hooks/useTimeout/useTimeout.d.mts} +4 -2
  170. package/dist/hooks/useTimeout/useTimeout.mjs +40 -0
  171. package/dist/hooks/useToggle/useToggle.cjs +34 -0
  172. package/dist/hooks/useToggle/{index.d.cts → useToggle.d.cts} +4 -4
  173. package/{esm/hooks/useToggle/index.d.ts → dist/hooks/useToggle/useToggle.d.mts} +4 -4
  174. package/dist/hooks/useToggle/useToggle.mjs +34 -0
  175. package/dist/hooks/useVisibilityEvent/useVisibilityEvent.cjs +42 -0
  176. package/{esm/hooks/useVisibilityEvent/index.d.ts → dist/hooks/useVisibilityEvent/useVisibilityEvent.d.cts} +5 -3
  177. package/dist/hooks/useVisibilityEvent/{index.d.cts → useVisibilityEvent.d.mts} +5 -3
  178. package/dist/hooks/useVisibilityEvent/useVisibilityEvent.mjs +42 -0
  179. package/dist/index.cjs +77 -1382
  180. package/dist/index.d.cts +56 -40
  181. package/dist/index.d.mts +56 -0
  182. package/dist/index.mjs +40 -0
  183. package/dist/utils/buildContext/buildContext.cjs +50 -0
  184. package/{esm/utils/buildContext/index.d.ts → dist/utils/buildContext/buildContext.d.cts} +7 -7
  185. package/dist/utils/buildContext/buildContext.d.mts +38 -0
  186. package/dist/utils/buildContext/buildContext.mjs +50 -0
  187. package/dist/utils/buildContext/index.d.cts +2 -37
  188. package/dist/utils/buildContext/index.d.mts +3 -0
  189. package/dist/utils/mergeProps/index.d.cts +2 -25
  190. package/dist/utils/mergeProps/index.d.mts +3 -0
  191. package/dist/utils/mergeProps/mergeProps.cjs +53 -0
  192. package/{esm/utils/mergeProps/index.d.ts → dist/utils/mergeProps/mergeProps.d.cts} +7 -8
  193. package/dist/utils/mergeProps/mergeProps.d.mts +25 -0
  194. package/dist/utils/mergeProps/mergeProps.mjs +53 -0
  195. package/dist/utils/mergeRefs/index.d.cts +2 -38
  196. package/dist/utils/mergeRefs/index.d.mts +3 -0
  197. package/dist/utils/mergeRefs/mergeRefs.cjs +50 -0
  198. package/{esm/utils/mergeRefs/index.d.ts → dist/utils/mergeRefs/mergeRefs.d.cts} +4 -3
  199. package/dist/utils/mergeRefs/mergeRefs.d.mts +40 -0
  200. package/dist/utils/mergeRefs/mergeRefs.mjs +50 -0
  201. package/package.json +9 -11
  202. package/dist/components/ImpressionArea/index.cjs +0 -295
  203. package/dist/components/Separated/index.cjs +0 -41
  204. package/dist/components/SwitchCase/index.cjs +0 -36
  205. package/dist/hooks/useAsyncEffect/index.cjs +0 -44
  206. package/dist/hooks/useBooleanState/index.cjs +0 -46
  207. package/dist/hooks/useCallbackOncePerRender/index.cjs +0 -63
  208. package/dist/hooks/useConditionalEffect/index.cjs +0 -51
  209. package/dist/hooks/useControlledState/index.cjs +0 -57
  210. package/dist/hooks/useCounter/index.cjs +0 -70
  211. package/dist/hooks/useDebounce/index.cjs +0 -130
  212. package/dist/hooks/useDebouncedCallback/index.cjs +0 -148
  213. package/dist/hooks/useDoubleClick/index.cjs +0 -79
  214. package/dist/hooks/useGeolocation/index.cjs +0 -154
  215. package/dist/hooks/useImpressionRef/index.cjs +0 -258
  216. package/dist/hooks/useInputState/index.cjs +0 -46
  217. package/dist/hooks/useIntersectionObserver/index.cjs +0 -95
  218. package/dist/hooks/useInterval/index.cjs +0 -74
  219. package/dist/hooks/useIsClient/index.cjs +0 -40
  220. package/dist/hooks/useIsomorphicLayoutEffect/index.cjs +0 -35
  221. package/dist/hooks/useList/index.cjs +0 -104
  222. package/dist/hooks/useLoading/index.cjs +0 -65
  223. package/dist/hooks/useLongPress/index.cjs +0 -127
  224. package/dist/hooks/useMap/index.cjs +0 -78
  225. package/dist/hooks/useOutsideClickEffect/index.cjs +0 -74
  226. package/dist/hooks/usePreservedCallback/index.cjs +0 -45
  227. package/dist/hooks/usePreservedReference/index.cjs +0 -45
  228. package/dist/hooks/usePrevious/index.cjs +0 -48
  229. package/dist/hooks/useRefEffect/index.cjs +0 -72
  230. package/dist/hooks/useSet/index.cjs +0 -105
  231. package/dist/hooks/useStorageState/index.cjs +0 -196
  232. package/dist/hooks/useThrottle/index.cjs +0 -151
  233. package/dist/hooks/useThrottledCallback/index.cjs +0 -172
  234. package/dist/hooks/useTimeout/index.cjs +0 -57
  235. package/dist/hooks/useToggle/index.cjs +0 -37
  236. package/dist/hooks/useVisibilityEvent/index.cjs +0 -47
  237. package/dist/utils/buildContext/index.cjs +0 -56
  238. package/dist/utils/mergeProps/index.cjs +0 -71
  239. package/dist/utils/mergeRefs/index.cjs +0 -46
  240. package/esm/components/ImpressionArea/index.js +0 -269
  241. package/esm/components/Separated/index.js +0 -15
  242. package/esm/components/SwitchCase/index.js +0 -10
  243. package/esm/hooks/useAsyncEffect/index.js +0 -18
  244. package/esm/hooks/useBooleanState/index.js +0 -20
  245. package/esm/hooks/useCallbackOncePerRender/index.js +0 -37
  246. package/esm/hooks/useConditionalEffect/index.js +0 -25
  247. package/esm/hooks/useControlledState/index.js +0 -31
  248. package/esm/hooks/useCounter/index.js +0 -44
  249. package/esm/hooks/useDebounce/index.js +0 -104
  250. package/esm/hooks/useDebouncedCallback/index.js +0 -122
  251. package/esm/hooks/useDoubleClick/index.js +0 -53
  252. package/esm/hooks/useGeolocation/index.js +0 -128
  253. package/esm/hooks/useImpressionRef/index.js +0 -232
  254. package/esm/hooks/useInputState/index.js +0 -20
  255. package/esm/hooks/useIntersectionObserver/index.js +0 -69
  256. package/esm/hooks/useInterval/index.js +0 -48
  257. package/esm/hooks/useIsClient/index.js +0 -14
  258. package/esm/hooks/useIsomorphicLayoutEffect/index.js +0 -9
  259. package/esm/hooks/useList/index.js +0 -78
  260. package/esm/hooks/useLoading/index.js +0 -39
  261. package/esm/hooks/useLongPress/index.js +0 -101
  262. package/esm/hooks/useMap/index.js +0 -52
  263. package/esm/hooks/useOutsideClickEffect/index.js +0 -48
  264. package/esm/hooks/usePreservedCallback/index.js +0 -19
  265. package/esm/hooks/usePreservedReference/index.js +0 -19
  266. package/esm/hooks/usePrevious/index.js +0 -22
  267. package/esm/hooks/useRefEffect/index.js +0 -46
  268. package/esm/hooks/useSet/index.js +0 -79
  269. package/esm/hooks/useStorageState/index.js +0 -170
  270. package/esm/hooks/useThrottle/index.js +0 -125
  271. package/esm/hooks/useThrottledCallback/index.js +0 -146
  272. package/esm/hooks/useTimeout/index.js +0 -31
  273. package/esm/hooks/useToggle/index.js +0 -11
  274. package/esm/hooks/useVisibilityEvent/index.js +0 -21
  275. package/esm/index.d.ts +0 -40
  276. package/esm/index.js +0 -1320
  277. package/esm/utils/buildContext/index.js +0 -30
  278. package/esm/utils/mergeProps/index.js +0 -45
  279. package/esm/utils/mergeRefs/index.js +0 -20
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import { usePreservedCallback } from "../usePreservedCallback/usePreservedCallback.mjs";
3
+ import { useDebouncedCallback } from "../useDebouncedCallback/useDebouncedCallback.mjs";
4
+ import { useIntersectionObserver } from "../useIntersectionObserver/useIntersectionObserver.mjs";
5
+ import { useVisibilityEvent } from "../useVisibilityEvent/useVisibilityEvent.mjs";
6
+ import { useRef } from "react";
7
+ //#region src/hooks/useImpressionRef/useImpressionRef.ts
8
+ /**
9
+ * @deprecated This hook is deprecated as it depends on browser-specific APIs (IntersectionObserver, Visibility API).
10
+ * react-simplikit is now focused on platform-independent, pure state/logic hooks.
11
+ * This hook will be removed in a future major version.
12
+ *
13
+ * @description
14
+ * `useImpressionRef` is a React hook that measures the time a specific DOM element is visible on the screen and executes callbacks when the element enters or exits the viewport.
15
+ * It uses `IntersectionObserver` and the `Visibility API` to track the element's visibility.
16
+ *
17
+ * @param {UseImpressionRefOptions} options - Options for tracking the element's visibility.
18
+ * @param {() => void} [options.onImpressionStart] - Callback function executed when the element enters the view
19
+ * @param {() => void} [options.onImpressionEnd] - Callback function executed when the element exits the view
20
+ * @param {number} [options.timeThreshold=0] - Minimum time the element must be visible (in milliseconds)
21
+ * @param {number} [options.areaThreshold=0] - Minimum ratio of the element that must be visible (0 to 1)
22
+ * @param {string} options.rootMargin - Margin to adjust the detection area
23
+ *
24
+ * @returns {(element: Element | null) => void} A function to set the element. Attach this function to the `ref` attribute, and the callbacks will be executed whenever the element's visibility changes.
25
+ *
26
+ * @example
27
+ * import { useImpressionRef } from 'react-simplikit';
28
+ *
29
+ * function Component() {
30
+ * const ref = useImpressionRef<HTMLDivElement>({
31
+ * onImpressionStart: () => console.log('Element entered view'),
32
+ * onImpressionEnd: () => console.log('Element exited view'),
33
+ * timeThreshold: 1000,
34
+ * areaThreshold: 0.5,
35
+ * });
36
+ *
37
+ * return <div ref={ref}>Track my visibility!</div>;
38
+ * }
39
+ */
40
+ function useImpressionRef({ onImpressionStart = () => {}, onImpressionEnd = () => {}, rootMargin, areaThreshold = 0, timeThreshold = 0 }) {
41
+ const impressionStartHandler = usePreservedCallback(onImpressionStart);
42
+ const impressionEndHandler = usePreservedCallback(onImpressionEnd);
43
+ const isIntersectingRef = useRef(false);
44
+ const impressionEventHandler = useDebouncedCallback({
45
+ timeThreshold,
46
+ onChange: (impressed) => {
47
+ (impressed ? impressionStartHandler : impressionEndHandler)();
48
+ },
49
+ leading: true
50
+ });
51
+ useVisibilityEvent((documentVisible) => {
52
+ if (!isIntersectingRef.current) return;
53
+ impressionEventHandler(documentVisible === "visible");
54
+ });
55
+ return useIntersectionObserver((entry) => {
56
+ if (document.visibilityState === "hidden") return;
57
+ const currentRatio = entry.intersectionRatio;
58
+ const isIntersecting = areaThreshold === 0 ? entry.isIntersecting : currentRatio >= areaThreshold;
59
+ isIntersectingRef.current = isIntersecting;
60
+ impressionEventHandler(isIntersecting);
61
+ }, {
62
+ rootMargin,
63
+ threshold: areaThreshold
64
+ });
65
+ }
66
+ //#endregion
67
+ export { useImpressionRef };
@@ -1,23 +1,3 @@
1
- import { ChangeEventHandler } from 'react';
2
1
 
3
- /**
4
- * @description
5
- * `useInputState` is a React hook that manages an input state with optional value transformation.
6
- *
7
- * @param {string} [initialValue=""] - The initial value of the input. Defaults to an empty string (`""`).
8
- * @param {(value: string) => string} [transformValue=(v: string) => v] - A function to transform the input value.
9
- * Defaults to an identity function that returns the input unchanged.
10
- *
11
- * @returns {[value: string, onChange: ChangeEventHandler<HTMLInputElement>]} A tuple containing:
12
- * - value `string` - The current state value;
13
- * - onChange `ChangeEventHandler<HTMLInputElement>` - A function to update the state;
14
- *
15
- * @example
16
- * function Example() {
17
- * const [value, onChange] = useInputState('');
18
- * return <input type="text" value={value} onChange={onChange} />;
19
- * }
20
- */
21
- declare function useInputState(initialValue?: string, transformValue?: (value: string) => string): readonly [string, ChangeEventHandler<HTMLInputElement>];
22
-
23
- export { useInputState };
2
+ import { useInputState } from "./useInputState.cjs";
3
+ export { useInputState };
@@ -0,0 +1,3 @@
1
+
2
+ import { useInputState } from "./useInputState.mjs";
3
+ export { useInputState };
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ let react = require("react");
3
+ //#region src/hooks/useInputState/useInputState.ts
4
+ /**
5
+ * @description
6
+ * `useInputState` is a React hook that manages an input state with optional value transformation.
7
+ *
8
+ * @param {string} [initialValue=""] - The initial value of the input. Defaults to an empty string (`""`).
9
+ * @param {(value: string) => string} [transformValue=(v: string) => v] - A function to transform the input value.
10
+ * Defaults to an identity function that returns the input unchanged.
11
+ *
12
+ * @returns {[value: string, onChange: ChangeEventHandler<HTMLInputElement>]} A tuple containing:
13
+ * - value `string` - The current state value;
14
+ * - onChange `ChangeEventHandler<HTMLInputElement>` - A function to update the state;
15
+ *
16
+ * @example
17
+ * function Example() {
18
+ * const [value, onChange] = useInputState('');
19
+ * return <input type="text" value={value} onChange={onChange} />;
20
+ * }
21
+ */
22
+ function useInputState(initialValue = "", transformValue = echo) {
23
+ const [value, setValue] = (0, react.useState)(initialValue);
24
+ return [value, (0, react.useCallback)(({ target: { value } }) => {
25
+ setValue(transformValue(value));
26
+ }, [transformValue])];
27
+ }
28
+ function echo(v) {
29
+ return v;
30
+ }
31
+ //#endregion
32
+ exports.useInputState = useInputState;
@@ -1,5 +1,6 @@
1
- import { ChangeEventHandler } from 'react';
2
1
 
2
+ import { ChangeEventHandler } from "react";
3
+ //#region src/hooks/useInputState/useInputState.d.ts
3
4
  /**
4
5
  * @description
5
6
  * `useInputState` is a React hook that manages an input state with optional value transformation.
@@ -19,5 +20,5 @@ import { ChangeEventHandler } from 'react';
19
20
  * }
20
21
  */
21
22
  declare function useInputState(initialValue?: string, transformValue?: (value: string) => string): readonly [string, ChangeEventHandler<HTMLInputElement>];
22
-
23
- export { useInputState };
23
+ //#endregion
24
+ export { useInputState };
@@ -0,0 +1,24 @@
1
+
2
+ import { ChangeEventHandler } from "react";
3
+ //#region src/hooks/useInputState/useInputState.d.ts
4
+ /**
5
+ * @description
6
+ * `useInputState` is a React hook that manages an input state with optional value transformation.
7
+ *
8
+ * @param {string} [initialValue=""] - The initial value of the input. Defaults to an empty string (`""`).
9
+ * @param {(value: string) => string} [transformValue=(v: string) => v] - A function to transform the input value.
10
+ * Defaults to an identity function that returns the input unchanged.
11
+ *
12
+ * @returns {[value: string, onChange: ChangeEventHandler<HTMLInputElement>]} A tuple containing:
13
+ * - value `string` - The current state value;
14
+ * - onChange `ChangeEventHandler<HTMLInputElement>` - A function to update the state;
15
+ *
16
+ * @example
17
+ * function Example() {
18
+ * const [value, onChange] = useInputState('');
19
+ * return <input type="text" value={value} onChange={onChange} />;
20
+ * }
21
+ */
22
+ declare function useInputState(initialValue?: string, transformValue?: (value: string) => string): readonly [string, ChangeEventHandler<HTMLInputElement>];
23
+ //#endregion
24
+ export { useInputState };
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { useCallback, useState } from "react";
3
+ //#region src/hooks/useInputState/useInputState.ts
4
+ /**
5
+ * @description
6
+ * `useInputState` is a React hook that manages an input state with optional value transformation.
7
+ *
8
+ * @param {string} [initialValue=""] - The initial value of the input. Defaults to an empty string (`""`).
9
+ * @param {(value: string) => string} [transformValue=(v: string) => v] - A function to transform the input value.
10
+ * Defaults to an identity function that returns the input unchanged.
11
+ *
12
+ * @returns {[value: string, onChange: ChangeEventHandler<HTMLInputElement>]} A tuple containing:
13
+ * - value `string` - The current state value;
14
+ * - onChange `ChangeEventHandler<HTMLInputElement>` - A function to update the state;
15
+ *
16
+ * @example
17
+ * function Example() {
18
+ * const [value, onChange] = useInputState('');
19
+ * return <input type="text" value={value} onChange={onChange} />;
20
+ * }
21
+ */
22
+ function useInputState(initialValue = "", transformValue = echo) {
23
+ const [value, setValue] = useState(initialValue);
24
+ return [value, useCallback(({ target: { value } }) => {
25
+ setValue(transformValue(value));
26
+ }, [transformValue])];
27
+ }
28
+ function echo(v) {
29
+ return v;
30
+ }
31
+ //#endregion
32
+ export { useInputState };
@@ -0,0 +1,58 @@
1
+ "use client";
2
+ const require_usePreservedCallback = require("../usePreservedCallback/usePreservedCallback.cjs");
3
+ const require_useRefEffect = require("../useRefEffect/useRefEffect.cjs");
4
+ let react = require("react");
5
+ //#region src/hooks/useIntersectionObserver/useIntersectionObserver.ts
6
+ /**
7
+ * @deprecated This hook is deprecated as it depends on browser-specific APIs (IntersectionObserver).
8
+ * react-simplikit is now focused on platform-independent, pure state/logic hooks.
9
+ * This hook will be removed in a future major version.
10
+ *
11
+ * @description
12
+ * `useIntersectionObserver` is a React hook that detects whether a specific DOM element is visible on the screen.
13
+ * It uses the `IntersectionObserver` API to execute a callback when the element enters or exits the viewport.
14
+ *
15
+ * @param {(entry: IntersectionObserverEntry) => void} callback - A callback function that is executed when the visibility of the element changes.
16
+ * You can check `entry.isIntersecting` to determine if the element is in view.
17
+ * @param {IntersectionObserverInit} options - Options for the `IntersectionObserver`.
18
+ * @param {boolean} [options.root] - The element that is used as the viewport for checking visibility of the target.
19
+ * @param {string} [options.rootMargin] - Margin around the root.
20
+ * @param {number | number[]} [options.threshold] - Either a single number or an array of numbers which indicate at what percentage of the target's visibility the observer's callback should be executed.
21
+ *
22
+ * @returns {(element: Element | null) => void} A function to set the element. Attach this function to the `ref` attribute, and the `callback` will be executed whenever the element's visibility changes.
23
+ *
24
+ * @example
25
+ * import { useIntersectionObserver } from 'react-simplikit';
26
+ *
27
+ * function Component() {
28
+ * const ref = useIntersectionObserver<HTMLDivElement>(
29
+ * entry => {
30
+ * if (entry.isIntersecting) {
31
+ * console.log('Element is in view:', entry.target);
32
+ * } else {
33
+ * console.log('Element is out of view:', entry.target);
34
+ * }
35
+ * },
36
+ * { threshold: 0.5 }
37
+ * );
38
+ *
39
+ * return <div ref={ref}>Observe me!</div>;
40
+ * }
41
+ */
42
+ function useIntersectionObserver(callback, options) {
43
+ const preservedCallback = require_usePreservedCallback.usePreservedCallback(callback);
44
+ const observer = (0, react.useMemo)(() => {
45
+ if (typeof IntersectionObserver === "undefined") return;
46
+ return new IntersectionObserver(([entry]) => {
47
+ preservedCallback(entry);
48
+ }, options);
49
+ }, [preservedCallback, options]);
50
+ return require_useRefEffect.useRefEffect((element) => {
51
+ observer?.observe(element);
52
+ return () => {
53
+ observer?.unobserve(element);
54
+ };
55
+ }, [preservedCallback, options]);
56
+ }
57
+ //#endregion
58
+ exports.useIntersectionObserver = useIntersectionObserver;
@@ -1,3 +1,5 @@
1
+
2
+ //#region src/hooks/useIntersectionObserver/useIntersectionObserver.d.ts
1
3
  /**
2
4
  * @deprecated This hook is deprecated as it depends on browser-specific APIs (IntersectionObserver).
3
5
  * react-simplikit is now focused on platform-independent, pure state/logic hooks.
@@ -35,5 +37,5 @@
35
37
  * }
36
38
  */
37
39
  declare function useIntersectionObserver<Element extends HTMLElement>(callback: (entry: IntersectionObserverEntry) => void, options: IntersectionObserverInit): (element: Element | null) => void;
38
-
39
- export { useIntersectionObserver };
40
+ //#endregion
41
+ export { useIntersectionObserver };
@@ -1,3 +1,5 @@
1
+
2
+ //#region src/hooks/useIntersectionObserver/useIntersectionObserver.d.ts
1
3
  /**
2
4
  * @deprecated This hook is deprecated as it depends on browser-specific APIs (IntersectionObserver).
3
5
  * react-simplikit is now focused on platform-independent, pure state/logic hooks.
@@ -35,5 +37,5 @@
35
37
  * }
36
38
  */
37
39
  declare function useIntersectionObserver<Element extends HTMLElement>(callback: (entry: IntersectionObserverEntry) => void, options: IntersectionObserverInit): (element: Element | null) => void;
38
-
39
- export { useIntersectionObserver };
40
+ //#endregion
41
+ export { useIntersectionObserver };
@@ -0,0 +1,58 @@
1
+ "use client";
2
+ import { usePreservedCallback } from "../usePreservedCallback/usePreservedCallback.mjs";
3
+ import { useRefEffect } from "../useRefEffect/useRefEffect.mjs";
4
+ import { useMemo } from "react";
5
+ //#region src/hooks/useIntersectionObserver/useIntersectionObserver.ts
6
+ /**
7
+ * @deprecated This hook is deprecated as it depends on browser-specific APIs (IntersectionObserver).
8
+ * react-simplikit is now focused on platform-independent, pure state/logic hooks.
9
+ * This hook will be removed in a future major version.
10
+ *
11
+ * @description
12
+ * `useIntersectionObserver` is a React hook that detects whether a specific DOM element is visible on the screen.
13
+ * It uses the `IntersectionObserver` API to execute a callback when the element enters or exits the viewport.
14
+ *
15
+ * @param {(entry: IntersectionObserverEntry) => void} callback - A callback function that is executed when the visibility of the element changes.
16
+ * You can check `entry.isIntersecting` to determine if the element is in view.
17
+ * @param {IntersectionObserverInit} options - Options for the `IntersectionObserver`.
18
+ * @param {boolean} [options.root] - The element that is used as the viewport for checking visibility of the target.
19
+ * @param {string} [options.rootMargin] - Margin around the root.
20
+ * @param {number | number[]} [options.threshold] - Either a single number or an array of numbers which indicate at what percentage of the target's visibility the observer's callback should be executed.
21
+ *
22
+ * @returns {(element: Element | null) => void} A function to set the element. Attach this function to the `ref` attribute, and the `callback` will be executed whenever the element's visibility changes.
23
+ *
24
+ * @example
25
+ * import { useIntersectionObserver } from 'react-simplikit';
26
+ *
27
+ * function Component() {
28
+ * const ref = useIntersectionObserver<HTMLDivElement>(
29
+ * entry => {
30
+ * if (entry.isIntersecting) {
31
+ * console.log('Element is in view:', entry.target);
32
+ * } else {
33
+ * console.log('Element is out of view:', entry.target);
34
+ * }
35
+ * },
36
+ * { threshold: 0.5 }
37
+ * );
38
+ *
39
+ * return <div ref={ref}>Observe me!</div>;
40
+ * }
41
+ */
42
+ function useIntersectionObserver(callback, options) {
43
+ const preservedCallback = usePreservedCallback(callback);
44
+ const observer = useMemo(() => {
45
+ if (typeof IntersectionObserver === "undefined") return;
46
+ return new IntersectionObserver(([entry]) => {
47
+ preservedCallback(entry);
48
+ }, options);
49
+ }, [preservedCallback, options]);
50
+ return useRefEffect((element) => {
51
+ observer?.observe(element);
52
+ return () => {
53
+ observer?.unobserve(element);
54
+ };
55
+ }, [preservedCallback, options]);
56
+ }
57
+ //#endregion
58
+ export { useIntersectionObserver };
@@ -0,0 +1,65 @@
1
+ "use client";
2
+ const require_usePreservedCallback = require("../usePreservedCallback/usePreservedCallback.cjs");
3
+ let react = require("react");
4
+ //#region src/hooks/useInterval/useInterval.ts
5
+ /**
6
+ * @description
7
+ * `useInterval` is a React hook that executes a function at a specified interval.
8
+ * It is useful for timers, polling data, and other recurring tasks.
9
+ *
10
+ * @param {() => void} callback - The function to be executed periodically.
11
+ * @param {number | { delay: number; enabled?: boolean; immediate?: boolean }} options - Configures the interval behavior.
12
+ * @param {number} options.delay - The interval duration in milliseconds. If `null`, the interval will not run.
13
+ * @param {boolean} [options.immediate=false] - If `true`, executes immediately before starting the interval.
14
+ * @param {boolean} [options.enabled=true] - If `false`, the interval will not run.
15
+ *
16
+ * @example
17
+ * import { useInterval } from 'react-simplikit';
18
+ * import { useState } from 'react';
19
+ *
20
+ * function Timer() {
21
+ * const [time, setTime] = useState(0);
22
+ *
23
+ * useInterval(() => {
24
+ * setTime(prev => prev + 1);
25
+ * }, 1000);
26
+ *
27
+ * return (
28
+ * <div>
29
+ * <p>{time} seconds</p>
30
+ * </div>
31
+ * );
32
+ * }
33
+ */
34
+ function useInterval(callback, options) {
35
+ const delay = typeof options === "number" ? options : options.delay;
36
+ const immediate = typeof options === "number" ? false : options.immediate;
37
+ const enabled = typeof options === "number" ? true : options.enabled ?? true;
38
+ const preservedCallback = require_usePreservedCallback.usePreservedCallback(callback);
39
+ const immediateCalledRef = (0, react.useRef)(false);
40
+ (0, react.useEffect)(function runImmediateCallback() {
41
+ if (immediate !== true) {
42
+ immediateCalledRef.current = false;
43
+ return;
44
+ }
45
+ if (!enabled) return;
46
+ if (immediateCalledRef.current) return;
47
+ immediateCalledRef.current = true;
48
+ preservedCallback();
49
+ }, [
50
+ immediate,
51
+ preservedCallback,
52
+ enabled
53
+ ]);
54
+ (0, react.useEffect)(function startInterval() {
55
+ if (!enabled) return;
56
+ const id = setInterval(preservedCallback, delay);
57
+ return () => clearInterval(id);
58
+ }, [
59
+ delay,
60
+ preservedCallback,
61
+ enabled
62
+ ]);
63
+ }
64
+ //#endregion
65
+ exports.useInterval = useInterval;
@@ -1,7 +1,9 @@
1
+
2
+ //#region src/hooks/useInterval/useInterval.d.ts
1
3
  type IntervalOptions = number | {
2
- delay: number;
3
- immediate?: boolean;
4
- enabled?: boolean;
4
+ delay: number;
5
+ immediate?: boolean;
6
+ enabled?: boolean;
5
7
  };
6
8
  /**
7
9
  * @description
@@ -33,5 +35,5 @@ type IntervalOptions = number | {
33
35
  * }
34
36
  */
35
37
  declare function useInterval(callback: () => void, options: IntervalOptions): void;
36
-
37
- export { useInterval };
38
+ //#endregion
39
+ export { useInterval };
@@ -1,7 +1,9 @@
1
+
2
+ //#region src/hooks/useInterval/useInterval.d.ts
1
3
  type IntervalOptions = number | {
2
- delay: number;
3
- immediate?: boolean;
4
- enabled?: boolean;
4
+ delay: number;
5
+ immediate?: boolean;
6
+ enabled?: boolean;
5
7
  };
6
8
  /**
7
9
  * @description
@@ -33,5 +35,5 @@ type IntervalOptions = number | {
33
35
  * }
34
36
  */
35
37
  declare function useInterval(callback: () => void, options: IntervalOptions): void;
36
-
37
- export { useInterval };
38
+ //#endregion
39
+ export { useInterval };
@@ -0,0 +1,65 @@
1
+ "use client";
2
+ import { usePreservedCallback } from "../usePreservedCallback/usePreservedCallback.mjs";
3
+ import { useEffect, useRef } from "react";
4
+ //#region src/hooks/useInterval/useInterval.ts
5
+ /**
6
+ * @description
7
+ * `useInterval` is a React hook that executes a function at a specified interval.
8
+ * It is useful for timers, polling data, and other recurring tasks.
9
+ *
10
+ * @param {() => void} callback - The function to be executed periodically.
11
+ * @param {number | { delay: number; enabled?: boolean; immediate?: boolean }} options - Configures the interval behavior.
12
+ * @param {number} options.delay - The interval duration in milliseconds. If `null`, the interval will not run.
13
+ * @param {boolean} [options.immediate=false] - If `true`, executes immediately before starting the interval.
14
+ * @param {boolean} [options.enabled=true] - If `false`, the interval will not run.
15
+ *
16
+ * @example
17
+ * import { useInterval } from 'react-simplikit';
18
+ * import { useState } from 'react';
19
+ *
20
+ * function Timer() {
21
+ * const [time, setTime] = useState(0);
22
+ *
23
+ * useInterval(() => {
24
+ * setTime(prev => prev + 1);
25
+ * }, 1000);
26
+ *
27
+ * return (
28
+ * <div>
29
+ * <p>{time} seconds</p>
30
+ * </div>
31
+ * );
32
+ * }
33
+ */
34
+ function useInterval(callback, options) {
35
+ const delay = typeof options === "number" ? options : options.delay;
36
+ const immediate = typeof options === "number" ? false : options.immediate;
37
+ const enabled = typeof options === "number" ? true : options.enabled ?? true;
38
+ const preservedCallback = usePreservedCallback(callback);
39
+ const immediateCalledRef = useRef(false);
40
+ useEffect(function runImmediateCallback() {
41
+ if (immediate !== true) {
42
+ immediateCalledRef.current = false;
43
+ return;
44
+ }
45
+ if (!enabled) return;
46
+ if (immediateCalledRef.current) return;
47
+ immediateCalledRef.current = true;
48
+ preservedCallback();
49
+ }, [
50
+ immediate,
51
+ preservedCallback,
52
+ enabled
53
+ ]);
54
+ useEffect(function startInterval() {
55
+ if (!enabled) return;
56
+ const id = setInterval(preservedCallback, delay);
57
+ return () => clearInterval(id);
58
+ }, [
59
+ delay,
60
+ preservedCallback,
61
+ enabled
62
+ ]);
63
+ }
64
+ //#endregion
65
+ export { useInterval };
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ let react = require("react");
3
+ //#region src/hooks/useIsClient/useIsClient.ts
4
+ /**
5
+ * @description
6
+ * `useIsClient` is a React hook that returns `true` only in the client-side environment.
7
+ * It is primarily used to differentiate between client-side and server-side rendering (SSR).
8
+ * The state is set to `true` only after the component is mounted in the client-side environment.
9
+ *
10
+ * @returns {boolean} Returns `true` in a client-side environment, and `false` otherwise.
11
+ *
12
+ * @example
13
+ * function ClientSideContent() {
14
+ * const isClient = useIsClient();
15
+ *
16
+ * if (!isClient) {
17
+ * return <div>Loading...</div>; // Rendered on the server side
18
+ * }
19
+ *
20
+ * return <div>Client-side rendered content</div>; // Rendered on the client side
21
+ * }
22
+ *
23
+ * @example
24
+ * function ClientOnlyMap() {
25
+ * const isClient = useIsClient();
26
+ *
27
+ * if (!isClient) return null;
28
+ *
29
+ * return <div id="map" />;
30
+ * }
31
+ *
32
+ * @example
33
+ * function ClientTheme() {
34
+ * const isClient = useIsClient();
35
+ *
36
+ * const theme = isClient ? localStorage.getItem('theme') : 'light';
37
+ *
38
+ * return <div>Current theme: {theme}</div>;
39
+ * }
40
+ */
41
+ function useIsClient() {
42
+ const [isClient, setIsClient] = (0, react.useState)(false);
43
+ (0, react.useEffect)(function syncClientState() {
44
+ setIsClient(true);
45
+ }, []);
46
+ return isClient;
47
+ }
48
+ //#endregion
49
+ exports.useIsClient = useIsClient;
@@ -1,3 +1,5 @@
1
+
2
+ //#region src/hooks/useIsClient/useIsClient.d.ts
1
3
  /**
2
4
  * @description
3
5
  * `useIsClient` is a React hook that returns `true` only in the client-side environment.
@@ -36,5 +38,5 @@
36
38
  * }
37
39
  */
38
40
  declare function useIsClient(): boolean;
39
-
40
- export { useIsClient };
41
+ //#endregion
42
+ export { useIsClient };
@@ -1,3 +1,5 @@
1
+
2
+ //#region src/hooks/useIsClient/useIsClient.d.ts
1
3
  /**
2
4
  * @description
3
5
  * `useIsClient` is a React hook that returns `true` only in the client-side environment.
@@ -36,5 +38,5 @@
36
38
  * }
37
39
  */
38
40
  declare function useIsClient(): boolean;
39
-
40
- export { useIsClient };
41
+ //#endregion
42
+ export { useIsClient };
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ import { useEffect, useState } from "react";
3
+ //#region src/hooks/useIsClient/useIsClient.ts
4
+ /**
5
+ * @description
6
+ * `useIsClient` is a React hook that returns `true` only in the client-side environment.
7
+ * It is primarily used to differentiate between client-side and server-side rendering (SSR).
8
+ * The state is set to `true` only after the component is mounted in the client-side environment.
9
+ *
10
+ * @returns {boolean} Returns `true` in a client-side environment, and `false` otherwise.
11
+ *
12
+ * @example
13
+ * function ClientSideContent() {
14
+ * const isClient = useIsClient();
15
+ *
16
+ * if (!isClient) {
17
+ * return <div>Loading...</div>; // Rendered on the server side
18
+ * }
19
+ *
20
+ * return <div>Client-side rendered content</div>; // Rendered on the client side
21
+ * }
22
+ *
23
+ * @example
24
+ * function ClientOnlyMap() {
25
+ * const isClient = useIsClient();
26
+ *
27
+ * if (!isClient) return null;
28
+ *
29
+ * return <div id="map" />;
30
+ * }
31
+ *
32
+ * @example
33
+ * function ClientTheme() {
34
+ * const isClient = useIsClient();
35
+ *
36
+ * const theme = isClient ? localStorage.getItem('theme') : 'light';
37
+ *
38
+ * return <div>Current theme: {theme}</div>;
39
+ * }
40
+ */
41
+ function useIsClient() {
42
+ const [isClient, setIsClient] = useState(false);
43
+ useEffect(function syncClientState() {
44
+ setIsClient(true);
45
+ }, []);
46
+ return isClient;
47
+ }
48
+ //#endregion
49
+ export { useIsClient };