@codeleap/web 7.0.0 → 7.0.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 (357) hide show
  1. package/dist/components/ActivityIndicator/index.js +28 -0
  2. package/dist/components/ActivityIndicator/index.js.map +1 -0
  3. package/dist/components/ActivityIndicator/styles.js +2 -0
  4. package/dist/components/ActivityIndicator/styles.js.map +1 -0
  5. package/dist/components/ActivityIndicator/types.js +2 -0
  6. package/dist/components/ActivityIndicator/types.js.map +1 -0
  7. package/dist/components/Badge/index.js +68 -0
  8. package/dist/components/Badge/index.js.map +1 -0
  9. package/dist/components/Badge/styles.js +2 -0
  10. package/dist/components/Badge/styles.js.map +1 -0
  11. package/dist/components/Badge/types.js +2 -0
  12. package/dist/components/Badge/types.js.map +1 -0
  13. package/dist/components/Button/index.js +52 -0
  14. package/dist/components/Button/index.js.map +1 -0
  15. package/dist/components/Button/styles.js +2 -0
  16. package/dist/components/Button/styles.js.map +1 -0
  17. package/dist/components/Button/types.js +2 -0
  18. package/dist/components/Button/types.js.map +1 -0
  19. package/dist/components/Calendar/index.js +50 -0
  20. package/dist/components/Calendar/index.js.map +1 -0
  21. package/dist/components/Calendar/styles.js +2 -0
  22. package/dist/components/Calendar/styles.js.map +1 -0
  23. package/dist/components/Calendar/types.js +2 -0
  24. package/dist/components/Calendar/types.js.map +1 -0
  25. package/dist/components/Carousel/index.js +129 -0
  26. package/dist/components/Carousel/index.js.map +1 -0
  27. package/dist/components/Carousel/styles.js +2 -0
  28. package/dist/components/Carousel/styles.js.map +1 -0
  29. package/dist/components/Carousel/types.js +2 -0
  30. package/dist/components/Carousel/types.js.map +1 -0
  31. package/dist/components/Checkbox/index.js +44 -0
  32. package/dist/components/Checkbox/index.js.map +1 -0
  33. package/dist/components/Checkbox/styles.js +2 -0
  34. package/dist/components/Checkbox/styles.js.map +1 -0
  35. package/dist/components/Checkbox/types.js +2 -0
  36. package/dist/components/Checkbox/types.js.map +1 -0
  37. package/dist/components/Collapse/index.js +27 -0
  38. package/dist/components/Collapse/index.js.map +1 -0
  39. package/dist/components/Collapse/styles.js +2 -0
  40. package/dist/components/Collapse/styles.js.map +1 -0
  41. package/dist/components/Collapse/types.js +2 -0
  42. package/dist/components/Collapse/types.js.map +1 -0
  43. package/dist/components/ColorPicker/index.js +65 -0
  44. package/dist/components/ColorPicker/index.js.map +1 -0
  45. package/dist/components/ColorPicker/styles.js +2 -0
  46. package/dist/components/ColorPicker/styles.js.map +1 -0
  47. package/dist/components/ColorPicker/types.js +2 -0
  48. package/dist/components/ColorPicker/types.js.map +1 -0
  49. package/dist/components/CropPicker/hooks.js +130 -0
  50. package/dist/components/CropPicker/hooks.js.map +1 -0
  51. package/dist/components/CropPicker/index.js +38 -0
  52. package/dist/components/CropPicker/index.js.map +1 -0
  53. package/dist/components/CropPicker/styles.js +2 -0
  54. package/dist/components/CropPicker/styles.js.map +1 -0
  55. package/dist/components/CropPicker/types.js +2 -0
  56. package/dist/components/CropPicker/types.js.map +1 -0
  57. package/dist/components/CropPicker/utils.js +70 -0
  58. package/dist/components/CropPicker/utils.js.map +1 -0
  59. package/dist/components/DatePicker/index.js +70 -0
  60. package/dist/components/DatePicker/index.js.map +1 -0
  61. package/dist/components/DatePicker/styles.js +2 -0
  62. package/dist/components/DatePicker/styles.js.map +1 -0
  63. package/dist/components/DatePicker/types.js +2 -0
  64. package/dist/components/DatePicker/types.js.map +1 -0
  65. package/dist/components/Drawer/index.js +50 -0
  66. package/dist/components/Drawer/index.js.map +1 -0
  67. package/dist/components/Drawer/styles.js +2 -0
  68. package/dist/components/Drawer/styles.js.map +1 -0
  69. package/dist/components/Drawer/types.js +2 -0
  70. package/dist/components/Drawer/types.js.map +1 -0
  71. package/dist/components/Dropzone/context.js +39 -0
  72. package/dist/components/Dropzone/context.js.map +1 -0
  73. package/dist/components/Dropzone/elements.js +51 -0
  74. package/dist/components/Dropzone/elements.js.map +1 -0
  75. package/dist/components/Dropzone/index.js +71 -0
  76. package/dist/components/Dropzone/index.js.map +1 -0
  77. package/dist/components/Dropzone/styles.js +2 -0
  78. package/dist/components/Dropzone/styles.js.map +1 -0
  79. package/dist/components/Dropzone/types.js +2 -0
  80. package/dist/components/Dropzone/types.js.map +1 -0
  81. package/dist/components/Dropzone/useDropzone.js +17 -0
  82. package/dist/components/Dropzone/useDropzone.js.map +1 -0
  83. package/dist/components/EmptyPlaceholder/index.js +65 -0
  84. package/dist/components/EmptyPlaceholder/index.js.map +1 -0
  85. package/dist/components/EmptyPlaceholder/styles.js +2 -0
  86. package/dist/components/EmptyPlaceholder/styles.js.map +1 -0
  87. package/dist/components/EmptyPlaceholder/types.js +2 -0
  88. package/dist/components/EmptyPlaceholder/types.js.map +1 -0
  89. package/dist/components/Field/context.js +52 -0
  90. package/dist/components/Field/context.js.map +1 -0
  91. package/dist/components/Field/elements.js +84 -0
  92. package/dist/components/Field/elements.js.map +1 -0
  93. package/dist/components/Field/index.js +37 -0
  94. package/dist/components/Field/index.js.map +1 -0
  95. package/dist/components/Field/styles.js +2 -0
  96. package/dist/components/Field/styles.js.map +1 -0
  97. package/dist/components/Field/types.js +2 -0
  98. package/dist/components/Field/types.js.map +1 -0
  99. package/dist/components/Field/useFieldInput.js +47 -0
  100. package/dist/components/Field/useFieldInput.js.map +1 -0
  101. package/dist/components/FileInput/index.js +55 -0
  102. package/dist/components/FileInput/index.js.map +1 -0
  103. package/dist/components/FileInput/types.js +2 -0
  104. package/dist/components/FileInput/types.js.map +1 -0
  105. package/dist/components/Icon/index.js +51 -0
  106. package/dist/components/Icon/index.js.map +1 -0
  107. package/dist/components/Icon/styles.js +2 -0
  108. package/dist/components/Icon/styles.js.map +1 -0
  109. package/dist/components/Icon/types.js +2 -0
  110. package/dist/components/Icon/types.js.map +1 -0
  111. package/dist/components/List/context.js +76 -0
  112. package/dist/components/List/context.js.map +1 -0
  113. package/dist/components/List/elements.js +123 -0
  114. package/dist/components/List/elements.js.map +1 -0
  115. package/dist/components/List/index.js +35 -0
  116. package/dist/components/List/index.js.map +1 -0
  117. package/dist/components/List/scroll.js +75 -0
  118. package/dist/components/List/scroll.js.map +1 -0
  119. package/dist/components/List/styles.js +2 -0
  120. package/dist/components/List/styles.js.map +1 -0
  121. package/dist/components/List/types.js +2 -0
  122. package/dist/components/List/types.js.map +1 -0
  123. package/dist/components/LoadingOverlay/index.js +32 -0
  124. package/dist/components/LoadingOverlay/index.js.map +1 -0
  125. package/dist/components/LoadingOverlay/styles.js +2 -0
  126. package/dist/components/LoadingOverlay/styles.js.map +1 -0
  127. package/dist/components/LoadingOverlay/types.js +2 -0
  128. package/dist/components/LoadingOverlay/types.js.map +1 -0
  129. package/dist/components/MaskedTextInput/index.js +34 -0
  130. package/dist/components/MaskedTextInput/index.js.map +1 -0
  131. package/dist/components/MaskedTextInput/mask.js +34 -0
  132. package/dist/components/MaskedTextInput/mask.js.map +1 -0
  133. package/dist/components/MaskedTextInput/types.js +2 -0
  134. package/dist/components/MaskedTextInput/types.js.map +1 -0
  135. package/dist/components/Modal/context.js +36 -0
  136. package/dist/components/Modal/context.js.map +1 -0
  137. package/dist/components/Modal/elements.js +66 -0
  138. package/dist/components/Modal/elements.js.map +1 -0
  139. package/dist/components/Modal/index.js +34 -0
  140. package/dist/components/Modal/index.js.map +1 -0
  141. package/dist/components/Modal/styles.js +2 -0
  142. package/dist/components/Modal/styles.js.map +1 -0
  143. package/dist/components/Modal/types.js +2 -0
  144. package/dist/components/Modal/types.js.map +1 -0
  145. package/dist/components/NumberIncrement/index.js +65 -0
  146. package/dist/components/NumberIncrement/index.js.map +1 -0
  147. package/dist/components/NumberIncrement/styles.js +2 -0
  148. package/dist/components/NumberIncrement/styles.js.map +1 -0
  149. package/dist/components/NumberIncrement/types.js +2 -0
  150. package/dist/components/NumberIncrement/types.js.map +1 -0
  151. package/dist/components/NumberIncrement/useNumberIncrement.js +113 -0
  152. package/dist/components/NumberIncrement/useNumberIncrement.js.map +1 -0
  153. package/dist/components/Overlay/index.js +44 -0
  154. package/dist/components/Overlay/index.js.map +1 -0
  155. package/dist/components/Overlay/styles.js +2 -0
  156. package/dist/components/Overlay/styles.js.map +1 -0
  157. package/dist/components/Overlay/types.js +2 -0
  158. package/dist/components/Overlay/types.js.map +1 -0
  159. package/dist/components/PaginationButtons/index.js +100 -0
  160. package/dist/components/PaginationButtons/index.js.map +1 -0
  161. package/dist/components/PaginationButtons/styles.js +2 -0
  162. package/dist/components/PaginationButtons/styles.js.map +1 -0
  163. package/dist/components/PaginationButtons/types.js +2 -0
  164. package/dist/components/PaginationButtons/types.js.map +1 -0
  165. package/dist/components/PaginationIndicator/index.js +41 -0
  166. package/dist/components/PaginationIndicator/index.js.map +1 -0
  167. package/dist/components/PaginationIndicator/styles.js +2 -0
  168. package/dist/components/PaginationIndicator/styles.js.map +1 -0
  169. package/dist/components/PaginationIndicator/types.js +2 -0
  170. package/dist/components/PaginationIndicator/types.js.map +1 -0
  171. package/dist/components/Progress/Bar/Segmented.js +37 -0
  172. package/dist/components/Progress/Bar/Segmented.js.map +1 -0
  173. package/dist/components/Progress/Bar/index.js +44 -0
  174. package/dist/components/Progress/Bar/index.js.map +1 -0
  175. package/dist/components/Progress/Bar/styles.js +2 -0
  176. package/dist/components/Progress/Bar/styles.js.map +1 -0
  177. package/dist/components/Progress/Bar/types.js +2 -0
  178. package/dist/components/Progress/Bar/types.js.map +1 -0
  179. package/dist/components/Progress/Circle/Segmented.js +60 -0
  180. package/dist/components/Progress/Circle/Segmented.js.map +1 -0
  181. package/dist/components/Progress/Circle/index.js +65 -0
  182. package/dist/components/Progress/Circle/index.js.map +1 -0
  183. package/dist/components/Progress/Circle/styles.js +2 -0
  184. package/dist/components/Progress/Circle/styles.js.map +1 -0
  185. package/dist/components/Progress/Circle/types.js +2 -0
  186. package/dist/components/Progress/Circle/types.js.map +1 -0
  187. package/dist/components/Progress/index.js +3 -0
  188. package/dist/components/Progress/index.js.map +1 -0
  189. package/dist/components/Progress/utils.js +4 -0
  190. package/dist/components/Progress/utils.js.map +1 -0
  191. package/dist/components/RadioInput/index.js +47 -0
  192. package/dist/components/RadioInput/index.js.map +1 -0
  193. package/dist/components/RadioInput/styles.js +2 -0
  194. package/dist/components/RadioInput/styles.js.map +1 -0
  195. package/dist/components/RadioInput/types.js +2 -0
  196. package/dist/components/RadioInput/types.js.map +1 -0
  197. package/dist/components/SearchInput/index.js +61 -0
  198. package/dist/components/SearchInput/index.js.map +1 -0
  199. package/dist/components/SectionFilters/index.js +148 -0
  200. package/dist/components/SectionFilters/index.js.map +1 -0
  201. package/dist/components/SectionFilters/styles.js +2 -0
  202. package/dist/components/SectionFilters/styles.js.map +1 -0
  203. package/dist/components/SectionFilters/types.js +2 -0
  204. package/dist/components/SectionFilters/types.js.map +1 -0
  205. package/dist/components/Select/context.js +156 -0
  206. package/dist/components/Select/context.js.map +1 -0
  207. package/dist/components/Select/elements.js +47 -0
  208. package/dist/components/Select/elements.js.map +1 -0
  209. package/dist/components/Select/index.js +53 -0
  210. package/dist/components/Select/index.js.map +1 -0
  211. package/dist/components/Select/styles.js +2 -0
  212. package/dist/components/Select/styles.js.map +1 -0
  213. package/dist/components/Select/types.js +2 -0
  214. package/dist/components/Select/types.js.map +1 -0
  215. package/dist/components/Select/useTriggerWidth.js +27 -0
  216. package/dist/components/Select/useTriggerWidth.js.map +1 -0
  217. package/dist/components/Slider/index.js +139 -0
  218. package/dist/components/Slider/index.js.map +1 -0
  219. package/dist/components/Slider/styles.js +2 -0
  220. package/dist/components/Slider/styles.js.map +1 -0
  221. package/dist/components/Slider/types.js +2 -0
  222. package/dist/components/Slider/types.js.map +1 -0
  223. package/dist/components/Switch/index.js +48 -0
  224. package/dist/components/Switch/index.js.map +1 -0
  225. package/dist/components/Switch/styles.js +2 -0
  226. package/dist/components/Switch/styles.js.map +1 -0
  227. package/dist/components/Switch/types.js +2 -0
  228. package/dist/components/Switch/types.js.map +1 -0
  229. package/dist/components/Tag/index.js +53 -0
  230. package/dist/components/Tag/index.js.map +1 -0
  231. package/dist/components/Tag/styles.js +2 -0
  232. package/dist/components/Tag/styles.js.map +1 -0
  233. package/dist/components/Tag/types.js +2 -0
  234. package/dist/components/Tag/types.js.map +1 -0
  235. package/dist/components/Text/index.js +94 -0
  236. package/dist/components/Text/index.js.map +1 -0
  237. package/dist/components/Text/styles.js +2 -0
  238. package/dist/components/Text/styles.js.map +1 -0
  239. package/dist/components/Text/types.js +2 -0
  240. package/dist/components/Text/types.js.map +1 -0
  241. package/dist/components/TextEditor/index.js +90 -0
  242. package/dist/components/TextEditor/index.js.map +1 -0
  243. package/dist/components/TextEditor/styles.js +2 -0
  244. package/dist/components/TextEditor/styles.js.map +1 -0
  245. package/dist/components/TextEditor/types.js +2 -0
  246. package/dist/components/TextEditor/types.js.map +1 -0
  247. package/dist/components/TextInput/index.js +65 -0
  248. package/dist/components/TextInput/index.js.map +1 -0
  249. package/dist/components/TextInput/styles.js +2 -0
  250. package/dist/components/TextInput/styles.js.map +1 -0
  251. package/dist/components/TextInput/types.js +2 -0
  252. package/dist/components/TextInput/types.js.map +1 -0
  253. package/dist/components/TextInput/useTextInput.js +64 -0
  254. package/dist/components/TextInput/useTextInput.js.map +1 -0
  255. package/dist/components/Tooltip/index.js +94 -0
  256. package/dist/components/Tooltip/index.js.map +1 -0
  257. package/dist/components/Tooltip/styles.js +2 -0
  258. package/dist/components/Tooltip/styles.js.map +1 -0
  259. package/dist/components/Tooltip/types.js +2 -0
  260. package/dist/components/Tooltip/types.js.map +1 -0
  261. package/dist/components/Touchable/index.js +80 -0
  262. package/dist/components/Touchable/index.js.map +1 -0
  263. package/dist/components/Touchable/styles.js +2 -0
  264. package/dist/components/Touchable/styles.js.map +1 -0
  265. package/dist/components/Touchable/types.js +2 -0
  266. package/dist/components/Touchable/types.js.map +1 -0
  267. package/dist/components/View/index.js +39 -0
  268. package/dist/components/View/index.js.map +1 -0
  269. package/dist/components/View/styles.js +2 -0
  270. package/dist/components/View/styles.js.map +1 -0
  271. package/dist/components/View/types.js +2 -0
  272. package/dist/components/View/types.js.map +1 -0
  273. package/dist/components/components.js +42 -0
  274. package/dist/components/components.js.map +1 -0
  275. package/dist/index.js +5 -0
  276. package/dist/index.js.map +1 -0
  277. package/dist/lib/ListMasonry.js +86 -0
  278. package/dist/lib/ListMasonry.js.map +1 -0
  279. package/dist/lib/ThemeVariables.js +22 -0
  280. package/dist/lib/ThemeVariables.js.map +1 -0
  281. package/dist/lib/WebStyleRegistry.js +69 -0
  282. package/dist/lib/WebStyleRegistry.js.map +1 -0
  283. package/dist/lib/hooks/index.js +23 -0
  284. package/dist/lib/hooks/index.js.map +1 -0
  285. package/dist/lib/hooks/useAnimatedStyle.js +23 -0
  286. package/dist/lib/hooks/useAnimatedStyle.js.map +1 -0
  287. package/dist/lib/hooks/useAnimatedVariantStyles.js +20 -0
  288. package/dist/lib/hooks/useAnimatedVariantStyles.js.map +1 -0
  289. package/dist/lib/hooks/useAsyncSelect.js +57 -0
  290. package/dist/lib/hooks/useAsyncSelect.js.map +1 -0
  291. package/dist/lib/hooks/useBreakpointMatch.js +108 -0
  292. package/dist/lib/hooks/useBreakpointMatch.js.map +1 -0
  293. package/dist/lib/hooks/useClick.js +38 -0
  294. package/dist/lib/hooks/useClick.js.map +1 -0
  295. package/dist/lib/hooks/useClickOutside.js +31 -0
  296. package/dist/lib/hooks/useClickOutside.js.map +1 -0
  297. package/dist/lib/hooks/useFileInput.js +17 -0
  298. package/dist/lib/hooks/useFileInput.js.map +1 -0
  299. package/dist/lib/hooks/useIsomorphicEffect.js +7 -0
  300. package/dist/lib/hooks/useIsomorphicEffect.js.map +1 -0
  301. package/dist/lib/hooks/useKeydown.js +39 -0
  302. package/dist/lib/hooks/useKeydown.js.map +1 -0
  303. package/dist/lib/hooks/useListFocus.js +46 -0
  304. package/dist/lib/hooks/useListFocus.js.map +1 -0
  305. package/dist/lib/hooks/useMediaQuery.js +25 -0
  306. package/dist/lib/hooks/useMediaQuery.js.map +1 -0
  307. package/dist/lib/hooks/usePageExitBlocker.js +44 -0
  308. package/dist/lib/hooks/usePageExitBlocker.js.map +1 -0
  309. package/dist/lib/hooks/usePagination.js +90 -0
  310. package/dist/lib/hooks/usePagination.js.map +1 -0
  311. package/dist/lib/hooks/usePopState.js +31 -0
  312. package/dist/lib/hooks/usePopState.js.map +1 -0
  313. package/dist/lib/hooks/usePopoverDismiss.js +32 -0
  314. package/dist/lib/hooks/usePopoverDismiss.js.map +1 -0
  315. package/dist/lib/hooks/useRefresh.js +67 -0
  316. package/dist/lib/hooks/useRefresh.js.map +1 -0
  317. package/dist/lib/hooks/useScrollEffect.js +19 -0
  318. package/dist/lib/hooks/useScrollEffect.js.map +1 -0
  319. package/dist/lib/hooks/useSearchParams.js +48 -0
  320. package/dist/lib/hooks/useSearchParams.js.map +1 -0
  321. package/dist/lib/hooks/useStaticAnimationStyles.js +16 -0
  322. package/dist/lib/hooks/useStaticAnimationStyles.js.map +1 -0
  323. package/dist/lib/hooks/useStylesFor.js +36 -0
  324. package/dist/lib/hooks/useStylesFor.js.map +1 -0
  325. package/dist/lib/hooks/useTouchableEvents.js +34 -0
  326. package/dist/lib/hooks/useTouchableEvents.js.map +1 -0
  327. package/dist/lib/hooks/useWindowFocus.js +30 -0
  328. package/dist/lib/hooks/useWindowFocus.js.map +1 -0
  329. package/dist/lib/hooks/useWindowSize.js +29 -0
  330. package/dist/lib/hooks/useWindowSize.js.map +1 -0
  331. package/dist/lib/index.js +7 -0
  332. package/dist/lib/index.js.map +1 -0
  333. package/dist/lib/tools/index.js +4 -0
  334. package/dist/lib/tools/index.js.map +1 -0
  335. package/dist/lib/tools/localStorage.js +155 -0
  336. package/dist/lib/tools/localStorage.js.map +1 -0
  337. package/dist/lib/tools/mediaQuery.js +33 -0
  338. package/dist/lib/tools/mediaQuery.js.map +1 -0
  339. package/dist/lib/tools/modal.js +55 -0
  340. package/dist/lib/tools/modal.js.map +1 -0
  341. package/dist/lib/utils/attributes.js +23 -0
  342. package/dist/lib/utils/attributes.js.map +1 -0
  343. package/dist/lib/utils/cache.js +10 -0
  344. package/dist/lib/utils/cache.js.map +1 -0
  345. package/dist/lib/utils/index.js +6 -0
  346. package/dist/lib/utils/index.js.map +1 -0
  347. package/dist/lib/utils/pollyfils/scroll.js +66 -0
  348. package/dist/lib/utils/pollyfils/scroll.js.map +1 -0
  349. package/dist/lib/utils/stopPropagation.js +19 -0
  350. package/dist/lib/utils/stopPropagation.js.map +1 -0
  351. package/dist/lib/utils/test.js +14 -0
  352. package/dist/lib/utils/test.js.map +1 -0
  353. package/dist/types/index.js +2 -0
  354. package/dist/types/index.js.map +1 -0
  355. package/dist/types/utility.js +2 -0
  356. package/dist/types/utility.js.map +1 -0
  357. package/package.json +18 -18
@@ -0,0 +1,31 @@
1
+ import { useEffect, useRef } from 'react';
2
+ const DEFAULT_EVENTS = ['mousedown', 'touchstart'];
3
+ /**
4
+ * Calls `handler` when a pointer event fires outside the returned ref's element.
5
+ *
6
+ * Listens for `mousedown` and `touchstart` by default; pass `events` to
7
+ * override. Supply `nodes` to bypass the ref entirely and check a fixed set of
8
+ * elements instead — useful when the trigger lives outside the component tree.
9
+ * Elements with `data-ignore-outside-clicks` are always ignored.
10
+ */
11
+ export function useClickOutside(handler, events, nodes) {
12
+ const ref = useRef(null);
13
+ useEffect(() => {
14
+ const listener = (event) => {
15
+ if (Array.isArray(nodes)) {
16
+ const shouldIgnore = event?.target?.hasAttribute('data-ignore-outside-clicks');
17
+ const shouldTrigger = nodes.every((node) => !!node && !node.contains(event.target));
18
+ shouldTrigger && !shouldIgnore && handler();
19
+ }
20
+ else if (ref.current && !ref.current.contains(event.target)) {
21
+ handler();
22
+ }
23
+ };
24
+ (events || DEFAULT_EVENTS).forEach((fn) => document.addEventListener(fn, listener));
25
+ return () => {
26
+ (events || DEFAULT_EVENTS).forEach((fn) => document.removeEventListener(fn, listener));
27
+ };
28
+ }, [ref, handler, nodes]);
29
+ return ref;
30
+ }
31
+ //# sourceMappingURL=useClickOutside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClickOutside.js","sourceRoot":"","sources":["../../../src/lib/hooks/useClickOutside.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;AAElD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAmB,EACnB,MAAwB,EACxB,KAAqB;IAErB,MAAM,GAAG,GAAG,MAAM,CAAI,IAAI,CAAC,CAAA;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,EAAE;YAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,4BAA4B,CAAC,CAAA;gBAC9E,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;gBACnF,aAAa,IAAI,CAAC,YAAY,IAAI,OAAO,EAAE,CAAA;YAC7C,CAAC;iBAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC,CAAC;QAEF,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;QAEnF,OAAO,GAAG,EAAE;YACV,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;QACxF,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAEzB,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { useRef } from 'react';
2
+ /**
3
+ * Provides an imperative ref and `openFilePicker` helper for a `FileInput`
4
+ * component. Attach the returned `ref` to `<FileInput ref={ref} />` and call
5
+ * `openFilePicker()` from a button or any other trigger.
6
+ */
7
+ export const useFileInput = () => {
8
+ const inputRef = useRef(null);
9
+ const openFilePicker = () => {
10
+ return inputRef.current?.openFilePicker();
11
+ };
12
+ return {
13
+ openFilePicker,
14
+ ref: inputRef,
15
+ };
16
+ };
17
+ //# sourceMappingURL=useFileInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileInput.js","sourceRoot":"","sources":["../../../src/lib/hooks/useFileInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAG9B;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAA;IAElD,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,OAAO,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAA;IAC3C,CAAC,CAAA;IAED,OAAO;QACL,cAAc;QACd,GAAG,EAAE,QAAQ;KACd,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { useEffect, useLayoutEffect } from 'react';
2
+ /**
3
+ * `useLayoutEffect` in the browser; `useEffect` on the server.
4
+ * Avoids the React SSR warning about `useLayoutEffect` in non-browser environments.
5
+ */
6
+ export const useIsomorphicEffect = typeof document !== 'undefined' ? useLayoutEffect : useEffect;
7
+ //# sourceMappingURL=useIsomorphicEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsomorphicEffect.js","sourceRoot":"","sources":["../../../src/lib/hooks/useIsomorphicEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { TypeGuards } from '@codeleap/types';
2
+ import { useEffect } from 'react';
3
+ /** Convenience key descriptors available as `useKeydown.keys`. */
4
+ export const keydownDefaultKeyOptions = {
5
+ ArrowLeft: 'ArrowLeft',
6
+ ArrowRight: 'ArrowRight',
7
+ ArrowUp: 'ArrowUp',
8
+ ArrowDown: 'ArrowDown',
9
+ Enter: 'Enter',
10
+ Space: {
11
+ key: ' ',
12
+ code: 'Space',
13
+ },
14
+ };
15
+ /**
16
+ * Adds a `keydown` listener on `document` for a single key.
17
+ *
18
+ * `expectedKey` can be a shorthand from `useKeydown.keys` (e.g. `'Enter'`) or
19
+ * an explicit `{ key, code }` object. The listener is re-registered whenever
20
+ * `deps` change.
21
+ */
22
+ export function useKeydown(expectedKey, handler, deps = [], options) {
23
+ const eventKey = TypeGuards.isString(expectedKey) ? (useKeydown?.keys?.[expectedKey] ?? expectedKey) : expectedKey;
24
+ const handleKeyPress = (event) => {
25
+ const { key, code } = TypeGuards.isString(eventKey) ? { key: eventKey, code: eventKey } : eventKey;
26
+ if (event?.key === key || event?.code === code) {
27
+ handler?.(event);
28
+ }
29
+ };
30
+ useEffect(() => {
31
+ document.addEventListener('keydown', handleKeyPress, options);
32
+ return () => {
33
+ document.removeEventListener('keydown', handleKeyPress);
34
+ };
35
+ }, deps);
36
+ }
37
+ useKeydown.keys = keydownDefaultKeyOptions;
38
+ useKeydown.defaultKeyOptions = keydownDefaultKeyOptions;
39
+ //# sourceMappingURL=useKeydown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeydown.js","sourceRoot":"","sources":["../../../src/lib/hooks/useKeydown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,kEAAkE;AAClE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE;QACL,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,OAAO;KACd;CACF,CAAA;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,WAAyE,EACzE,OAAuC,EACvC,OAAmB,EAAE,EACrB,OAA2C;IAE3C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;IAElH,MAAM,cAAc,GAAG,CAAC,KAAoB,EAAE,EAAE;QAC9C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;QAElG,IAAI,KAAK,EAAE,GAAG,KAAK,GAAG,IAAI,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;QAE7D,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QACzD,CAAC,CAAA;IACH,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC;AAED,UAAU,CAAC,IAAI,GAAG,wBAAwB,CAAA;AAC1C,UAAU,CAAC,iBAAiB,GAAG,wBAAwB,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { useEffect, useMemo } from 'react';
2
+ /**
3
+ * Creates a stable imperative focus handle for a ListBox DOM ref and returns it.
4
+ *
5
+ * The handle queries [role="option"] elements directly. When the chosen item
6
+ * receives DOM focus, react-aria's own useSelectableItem onFocus handler calls
7
+ * manager.setFocusedKey(key), so internal keyboard-navigation state stays in
8
+ * sync without needing access to ListStateContext.
9
+ *
10
+ * Pass the same listBoxRef to <ListBox ref={...}>.
11
+ * Pass externalRef to also expose the handle to a consumer-provided ref.
12
+ */
13
+ export function useListFocus(listBoxRef, externalRef) {
14
+ const handle = useMemo(() => ({
15
+ focus(strategy = 'selected') {
16
+ const list = listBoxRef.current;
17
+ if (!list)
18
+ return;
19
+ const options = Array.from(list.querySelectorAll('[role="option"]:not([data-disabled])'));
20
+ if (!options.length)
21
+ return;
22
+ let target = null;
23
+ if (strategy === 'last') {
24
+ target = options.at(-1) ?? null;
25
+ }
26
+ else if (strategy === 'selected') {
27
+ target =
28
+ list.querySelector('[role="option"][aria-selected="true"]') ??
29
+ options[0] ??
30
+ null;
31
+ }
32
+ else {
33
+ target = options[0] ?? null;
34
+ }
35
+ target?.focus();
36
+ },
37
+ }), [listBoxRef]);
38
+ useEffect(() => {
39
+ if (!externalRef)
40
+ return;
41
+ externalRef.current = handle;
42
+ return () => { externalRef.current = null; };
43
+ }, [handle, externalRef]);
44
+ return handle;
45
+ }
46
+ //# sourceMappingURL=useListFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useListFocus.js","sourceRoot":"","sources":["../../../src/lib/hooks/useListFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAA;AAS1D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAyC,EACzC,WAA+C;IAE/C,MAAM,MAAM,GAAG,OAAO,CAAkB,GAAG,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,WAA8B,UAAU;YAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAA;YAC/B,IAAI,CAAC,IAAI;gBAAE,OAAM;YAEjB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,IAAI,CAAC,gBAAgB,CAAc,sCAAsC,CAAC,CAC3E,CAAA;YACD,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAM;YAE3B,IAAI,MAAM,GAAuB,IAAI,CAAA;YAErC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACxB,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;YACjC,CAAC;iBAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM;oBACJ,IAAI,CAAC,aAAa,CAAc,uCAAuC,CAAC;wBACxE,OAAO,CAAC,CAAC,CAAC;wBACV,IAAI,CAAA;YACR,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;YAC7B,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,CAAA;QACjB,CAAC;KACF,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEjB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW;YAAE,OAAM;QACxB,WAAW,CAAC,OAAO,GAAG,MAAM,CAAA;QAC5B,OAAO,GAAG,EAAE,GAAG,WAAW,CAAC,OAAO,GAAG,IAAI,CAAA,CAAC,CAAC,CAAA;IAC7C,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;IAEzB,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { attachMediaListener, getMediaQuery, isMediaQuery } from '../tools';
3
+ /**
4
+ * Subscribes to a CSS media query string and returns whether it currently matches.
5
+ *
6
+ * Falls back to a static check via `isMediaQuery` on SSR or when `matchMedia` is
7
+ * unavailable. The query string may include the `@media screen and ` prefix —
8
+ * it is stripped internally before passing to `window.matchMedia`.
9
+ */
10
+ export function useMediaQuery(query) {
11
+ const [matches, setMatches] = useState(isMediaQuery(query));
12
+ const queryRef = useRef(undefined);
13
+ useEffect(() => {
14
+ if (query?.trim() === '' || !query)
15
+ return;
16
+ if ('matchMedia' in window) {
17
+ queryRef.current = window.matchMedia(getMediaQuery(query));
18
+ setMatches(queryRef.current.matches);
19
+ return attachMediaListener(queryRef.current, (event) => setMatches(event.matches));
20
+ }
21
+ return undefined;
22
+ }, []);
23
+ return matches;
24
+ }
25
+ //# sourceMappingURL=useMediaQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaQuery.js","sourceRoot":"","sources":["../../../src/lib/hooks/useMediaQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE3E;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IAE3D,MAAM,QAAQ,GAAG,MAAM,CAAiB,SAAS,CAAC,CAAA;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK;YAAE,OAAM;QAE1C,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;YAC1D,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACpC,OAAO,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QACpF,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { globalHistory } from '@reach/router';
2
+ import { useEffect } from 'react';
3
+ /**
4
+ * Blocks the user from leaving the current page without confirmation.
5
+ *
6
+ * Intercepts both browser tab-close / reload (`beforeunload`) and in-app
7
+ * navigation via `@reach/router`'s `globalHistory`. When a PUSH or POP
8
+ * navigation is detected, a `window.confirm` dialog is shown; `handler` is
9
+ * called with `true` if the user confirmed, `false` if they cancelled.
10
+ *
11
+ * Requires `@reach/router` to be present in the application.
12
+ */
13
+ export const usePageExitBlocker = (handler, deps = [], message = 'Are you sure you want to leave?') => {
14
+ const handleBeforeUnload = (event) => {
15
+ if (!event)
16
+ return null;
17
+ event?.preventDefault();
18
+ event.returnValue = '';
19
+ return;
20
+ };
21
+ useEffect(() => {
22
+ if (!window)
23
+ return null;
24
+ window.addEventListener('beforeunload', handleBeforeUnload);
25
+ return () => {
26
+ window.removeEventListener('beforeunload', handleBeforeUnload);
27
+ };
28
+ }, deps);
29
+ useEffect(() => {
30
+ return globalHistory.listen((args) => {
31
+ if (!window)
32
+ return null;
33
+ const historyPathname = args?.location?.pathname;
34
+ const windowPathname = window?.location?.pathname;
35
+ const isPopAction = args?.action === 'POP';
36
+ const isLeaveAction = args?.action === 'PUSH' && !historyPathname?.includes(windowPathname);
37
+ if (isLeaveAction || isPopAction) {
38
+ const willLeavePage = window.confirm(message);
39
+ handler?.(willLeavePage);
40
+ }
41
+ });
42
+ }, deps);
43
+ };
44
+ //# sourceMappingURL=usePageExitBlocker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageExitBlocker.js","sourceRoot":"","sources":["../../../src/lib/hooks/usePageExitBlocker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAyC,EACzC,OAAmB,EAAE,EACrB,OAAO,GAAG,iCAAiC,EAC3C,EAAE;IACF,MAAM,kBAAkB,GAAG,CAAC,KAAwB,EAAE,EAAE;QACtD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAEvB,KAAK,EAAE,cAAc,EAAE,CAAA;QACvB,KAAK,CAAC,WAAW,GAAG,EAAE,CAAA;QACtB,OAAM;IACR,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAExB,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QAE3D,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QAChE,CAAC,CAAA;IACH,CAAC,EAAE,IAAI,CAAC,CAAA;IAER,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACnC,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAA;YAExB,MAAM,eAAe,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAA;YAChD,MAAM,cAAc,GAAG,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAA;YAEjD,MAAM,WAAW,GAAG,IAAI,EAAE,MAAM,KAAK,KAAK,CAAA;YAC1C,MAAM,aAAa,GAAG,IAAI,EAAE,MAAM,KAAK,MAAM,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAA;YAE3F,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAE7C,OAAO,EAAE,CAAC,aAAa,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC,CAAA"}
@@ -0,0 +1,90 @@
1
+ import { useMemo, useUncontrolled } from '@codeleap/hooks';
2
+ import { range } from '@codeleap/utils';
3
+ /**
4
+ * Manages pagination state and computes the visible page range for a
5
+ * `PaginationButtons` component.
6
+ *
7
+ * Supports controlled (`page` + `onChangePage`) and uncontrolled modes. When
8
+ * `shouldAbbreviate` is true (default) and `total` exceeds
9
+ * `abbreviationMinimumAmount`, the range collapses middle pages into
10
+ * `abbreviationSymbol` entries. Mobile mode reduces the boundary count and
11
+ * forces abbreviation.
12
+ *
13
+ * Arrow buttons at positions `0` and `total + 1` are reserved for the
14
+ * previous/next controls and are not selectable as page numbers.
15
+ */
16
+ export function usePagination(props) {
17
+ const { isMobile } = props;
18
+ const { total, boundaries = 2, initialPage = 1, page, onChangePage, shouldAbbreviate = true, abbreviationMinimumAmount = isMobile ? 5 : 10, displayLeftArrow = true, displayRightArrow = true, abbreviationSymbol, } = props;
19
+ const [activePage, setActivePage] = useUncontrolled({
20
+ value: page,
21
+ onChange: onChangePage,
22
+ defaultValue: initialPage,
23
+ finalValue: initialPage,
24
+ rule: (_page) => typeof _page === 'number' && _page <= total,
25
+ });
26
+ const _boundaries = isMobile ? 2 : boundaries;
27
+ const canAbreviateItems = (shouldAbbreviate || isMobile) && total > abbreviationMinimumAmount;
28
+ const displayLastNumbers = activePage + _boundaries + (isMobile ? 0 : 2) >= total;
29
+ const isCenterSelected = canAbreviateItems && activePage > _boundaries && !displayLastNumbers;
30
+ const dotsDisplay = isCenterSelected ? abbreviationSymbol : null;
31
+ const setPage = (pageNumber) => {
32
+ const isPreviousArrow = pageNumber === 0;
33
+ const isNextArrow = pageNumber === total + 1;
34
+ const nonSelectableItems = [
35
+ displayLeftArrow && isPreviousArrow,
36
+ displayRightArrow && isNextArrow,
37
+ ].some(x => x);
38
+ if (nonSelectableItems)
39
+ return activePage;
40
+ setActivePage(pageNumber);
41
+ };
42
+ const next = () => setPage(activePage + 1);
43
+ const previous = () => setPage(activePage - 1);
44
+ const first = () => setPage(1);
45
+ const last = () => setPage(total);
46
+ const status = useMemo(() => {
47
+ if (isCenterSelected) {
48
+ return 'abreviated';
49
+ }
50
+ if (displayLastNumbers) {
51
+ return 'end';
52
+ }
53
+ return 'initial';
54
+ }, [isCenterSelected, displayLastNumbers]);
55
+ const paginationRange = useMemo(() => {
56
+ if (!canAbreviateItems) {
57
+ return [
58
+ ...range(1, total),
59
+ ].filter(Boolean);
60
+ }
61
+ if (displayLastNumbers) {
62
+ const extraItems = [
63
+ 1,
64
+ abbreviationSymbol,
65
+ ];
66
+ return [
67
+ ...extraItems,
68
+ ...range(total - (_boundaries + extraItems?.length - (isMobile ? 2 : 0)), total),
69
+ ].filter(Boolean);
70
+ }
71
+ return [
72
+ ...range(1, isCenterSelected ? _boundaries - 1 : _boundaries),
73
+ dotsDisplay,
74
+ isCenterSelected ? activePage : abbreviationSymbol,
75
+ dotsDisplay,
76
+ ...range(total - _boundaries + (isCenterSelected ? 2 : 1), total),
77
+ ].filter(Boolean);
78
+ }, [total, activePage, displayLastNumbers, isCenterSelected, canAbreviateItems]);
79
+ return {
80
+ range: paginationRange,
81
+ page: Number(activePage),
82
+ setPage,
83
+ status,
84
+ next,
85
+ previous,
86
+ first,
87
+ last,
88
+ };
89
+ }
90
+ //# sourceMappingURL=usePagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePagination.js","sourceRoot":"","sources":["../../../src/lib/hooks/usePagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { useUnmount } from '@codeleap/hooks';
2
+ import { useIsomorphicEffect } from './useIsomorphicEffect';
3
+ /**
4
+ * Conditionally attaches a `popstate` listener while `dependence` is `true`.
5
+ *
6
+ * When `dependence` becomes `true`, pushes the current URL onto the history
7
+ * stack so the browser back button triggers `popstate` rather than navigating
8
+ * away. When `dependence` becomes `false` (or the component unmounts), the
9
+ * listener is removed.
10
+ *
11
+ * Useful for keeping overlays (modals, drawers) dismissable via the browser
12
+ * back button.
13
+ */
14
+ export const usePopState = (dependence, handler) => {
15
+ useIsomorphicEffect(() => {
16
+ if (dependence) {
17
+ const pathname = location.pathname;
18
+ const searchParams = location.search;
19
+ const newUrl = pathname + searchParams;
20
+ window.history.pushState(null, null, newUrl);
21
+ window.addEventListener('popstate', handler);
22
+ }
23
+ else {
24
+ window.removeEventListener('popstate', handler);
25
+ }
26
+ }, [dependence]);
27
+ useUnmount(() => {
28
+ window.removeEventListener('popstate', handler);
29
+ });
30
+ };
31
+ //# sourceMappingURL=usePopState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePopState.js","sourceRoot":"","sources":["../../../src/lib/hooks/usePopState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAAmB,EAAE,OAAoB,EAAE,EAAE;IACvE,mBAAmB,CAAC,GAAG,EAAE;QACvB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAA;YAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAA;YACpC,MAAM,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;YAEtC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;YAC5C,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { useEffect, useRef } from 'react';
2
+ /**
3
+ * Restores outside-click dismissal for a Popover rendered with isNonModal=true.
4
+ *
5
+ * react-aria's usePopover sets isDismissable=!isNonModal, which disables its own
6
+ * useInteractOutside listener. This hook adds an equivalent pointerdown capture
7
+ * listener directly on the document.
8
+ *
9
+ * The trigger element is excluded so its own press handler can handle the toggle.
10
+ * The blur-based close (shouldCloseOnBlur=true in useOverlay) still handles the
11
+ * case where focus is inside the popover and moves elsewhere, so this hook only
12
+ * needs to cover the unfocused-popover scenario.
13
+ */
14
+ export function usePopoverDismiss({ popoverRef, triggerRef, isOpen, onClose, }) {
15
+ const onCloseRef = useRef(onClose);
16
+ useEffect(() => { onCloseRef.current = onClose; });
17
+ useEffect(() => {
18
+ if (!isOpen)
19
+ return;
20
+ const handle = (e) => {
21
+ const target = e.target;
22
+ if (popoverRef.current?.contains(target))
23
+ return;
24
+ if (triggerRef.current?.contains(target))
25
+ return;
26
+ onCloseRef.current();
27
+ };
28
+ document.addEventListener('pointerdown', handle, { capture: true });
29
+ return () => document.removeEventListener('pointerdown', handle, { capture: true });
30
+ }, [isOpen, popoverRef, triggerRef]);
31
+ }
32
+ //# sourceMappingURL=usePopoverDismiss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePopoverDismiss.js","sourceRoot":"","sources":["../../../src/lib/hooks/usePopoverDismiss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAA;AAEzD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,UAAU,EACV,UAAU,EACV,MAAM,EACN,OAAO,GAMR;IACC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAClC,SAAS,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,MAAM,MAAM,GAAG,CAAC,CAAe,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc,CAAA;YAC/B,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAM;YAChD,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAM;YAChD,UAAU,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC,CAAA;QAED,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACnE,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACrF,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import { useEffect } from '@codeleap/hooks';
3
+ const scrollDebounce = (func, delay) => {
4
+ const timerRef = React.useRef(null);
5
+ const scrollDebounce = (...args) => {
6
+ clearTimeout(timerRef.current);
7
+ timerRef.current = setTimeout(() => {
8
+ func(...args);
9
+ }, delay);
10
+ };
11
+ return scrollDebounce;
12
+ };
13
+ /**
14
+ * Implements a pull-to-refresh pattern for web scroll containers.
15
+ *
16
+ * Monitors the window `scroll` event and fires `onRefresh` when the container
17
+ * has been scrolled above `threshold` (percentage) twice in quick succession.
18
+ * After `onRefresh` resolves, the refresh state is reset after 2.5 s. Set
19
+ * `enabled: false` to disable the listener entirely (e.g. while a request is
20
+ * already in flight). Attach `scrollableRef` to the scrollable container element.
21
+ */
22
+ export const useRefresh = (onRefresh = () => null, options) => {
23
+ const { threshold, debounce, enabled, } = options;
24
+ const [refresh, setRefresh] = React.useState(false);
25
+ const pushToTopRef = React.useRef(0);
26
+ const refresher = React.useCallback(async (_onRefresh) => {
27
+ setRefresh(true);
28
+ await _onRefresh?.();
29
+ setTimeout(() => {
30
+ setRefresh(false);
31
+ pushToTopRef.current = 0;
32
+ }, 2500);
33
+ }, []);
34
+ const containerRef = React.useRef(null);
35
+ const onScroll = scrollDebounce(() => {
36
+ if (containerRef.current) {
37
+ const rect = containerRef.current?.getBoundingClientRect();
38
+ const scrollTop = window?.pageYOffset || document?.documentElement?.scrollTop;
39
+ const containerTop = rect.top + scrollTop;
40
+ const containerHeight = rect.height;
41
+ const distanceFromTop = Math.max(0, scrollTop - containerTop);
42
+ const distanceFromBottom = Math.max(0, containerTop + containerHeight - scrollTop);
43
+ const totalDistance = containerHeight + distanceFromTop + distanceFromBottom;
44
+ const percentage = (distanceFromTop / totalDistance) * 100;
45
+ if (percentage < threshold) {
46
+ if (pushToTopRef.current === 2) {
47
+ refresher(onRefresh);
48
+ }
49
+ pushToTopRef.current = pushToTopRef.current + 1;
50
+ }
51
+ }
52
+ }, debounce);
53
+ useEffect(() => {
54
+ if (enabled) {
55
+ window.addEventListener('scroll', onScroll);
56
+ return () => {
57
+ window.removeEventListener('scroll', onScroll);
58
+ };
59
+ }
60
+ }, [enabled]);
61
+ return {
62
+ refresh,
63
+ scrollableRef: containerRef,
64
+ refresher,
65
+ };
66
+ };
67
+ //# sourceMappingURL=useRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRefresh.js","sourceRoot":"","sources":["../../../src/lib/hooks/useRefresh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { useEffect } from 'react';
2
+ /**
3
+ * Calls `effect` on every window scroll event, passing whether `window.scrollY`
4
+ * has passed `breakpoint` and the current scroll position. The listener is
5
+ * re-registered when `breakpoint` or any `extraDependencies` change.
6
+ */
7
+ export function useScrollEffect(effect, breakpoint, extraDependencies = []) {
8
+ function handleScroll() {
9
+ const passed = window.scrollY > breakpoint;
10
+ effect(passed, window.scrollY);
11
+ }
12
+ useEffect(() => {
13
+ document.addEventListener('scroll', handleScroll);
14
+ return () => {
15
+ document.removeEventListener('scroll', handleScroll);
16
+ };
17
+ }, [breakpoint, ...extraDependencies]);
18
+ }
19
+ //# sourceMappingURL=useScrollEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollEffect.js","sourceRoot":"","sources":["../../../src/lib/hooks/useScrollEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAiD,EACjD,UAAkB,EAClB,iBAAiB,GAAG,EAAE;IAEtB,SAAS,YAAY;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,UAAU,CAAA;QAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QACjD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QACtD,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { usePrevious } from '@codeleap/hooks';
3
+ /**
4
+ * Syncs a typed record of string params with the URL query string via
5
+ * `window.history.replaceState`. On mount, reads the current URL params and
6
+ * merges them with `initial` defaults (initial values are only applied when the
7
+ * URL param is absent or empty). Call `reset()` to restore `initial`.
8
+ *
9
+ * Not a router integration — changes do not trigger a navigation event, and the
10
+ * hook does not react to external URL changes after mount.
11
+ */
12
+ export function useSearchParams(initial) {
13
+ const searchParams = useRef(new URLSearchParams(typeof window === 'undefined' ? '' : location.search));
14
+ const [params, setParams] = useState(() => {
15
+ const initialParams = Object.fromEntries(searchParams.current);
16
+ for (const key in initial) {
17
+ if (initialParams[key] === '' || typeof initialParams[key] === 'undefined') {
18
+ initialParams[key] = initial[key];
19
+ }
20
+ }
21
+ return initialParams;
22
+ });
23
+ const previousParams = usePrevious(params);
24
+ useEffect(() => {
25
+ if (window.history) {
26
+ Object.entries({ ...previousParams, ...params }).forEach(([k, v]) => {
27
+ if (!!previousParams?.[k] && !params?.[k]) {
28
+ searchParams.current.delete(k);
29
+ }
30
+ else if (v) {
31
+ searchParams.current.set(k, v);
32
+ }
33
+ else {
34
+ searchParams.current.delete(k);
35
+ }
36
+ });
37
+ const url = window.location.origin +
38
+ window.location.pathname +
39
+ `?${searchParams.current?.toString()}`;
40
+ window.history.replaceState({ path: url }, '', url);
41
+ }
42
+ }, [params]);
43
+ function reset() {
44
+ setParams(initial);
45
+ }
46
+ return [params, setParams, reset, searchParams.current];
47
+ }
48
+ //# sourceMappingURL=useSearchParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearchParams.js","sourceRoot":"","sources":["../../../src/lib/hooks/useSearchParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAa7C;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAE7B,OAAW;IACX,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACtG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAI,GAAG,EAAE;QAE3C,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAc,CAAM,CAAA;QAE1E,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;gBAC3E,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;gBAClE,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1C,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAChC,CAAC;qBAAM,IAAI,CAAC,EAAE,CAAC;oBACb,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAChC,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,MAAM,GAAG,GACP,MAAM,CAAC,QAAQ,CAAC,MAAM;gBACtB,MAAM,CAAC,QAAQ,CAAC,QAAQ;gBACxB,IAAI,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAA;YACxC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,SAAS,KAAK;QACZ,SAAS,CAAC,OAAO,CAAC,CAAA;IACpB,CAAC;IAED,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;AACzD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { useRef } from 'react';
2
+ /**
3
+ * Captures a frozen snapshot of the selected `keys` from `obj` on the first
4
+ * render and never updates it. Used by `useAnimatedVariantStyles` to keep the
5
+ * non-animated style values stable across re-renders so Framer Motion does not
6
+ * re-create animation targets unnecessarily.
7
+ */
8
+ export function useStaticAnimationStyles(obj, keys) {
9
+ const styles = useRef({});
10
+ if (Object.keys(styles.current).length === 0) {
11
+ const mappedStyles = keys.map((k) => [k, { ...obj[k] }]);
12
+ styles.current = Object.fromEntries(mappedStyles);
13
+ }
14
+ return styles.current;
15
+ }
16
+ //# sourceMappingURL=useStaticAnimationStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStaticAnimationStyles.js","sourceRoot":"","sources":["../../../src/lib/hooks/useStaticAnimationStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAG9B;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAqE,GAAM,EAAE,IAAS;IAC5H,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IAEzB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAExD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,MAAM,CAAC,OAAiC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { useStyleObserver } from '@codeleap/styles';
2
+ import { useMemo } from 'react';
3
+ import { WebStyleRegistry } from '../WebStyleRegistry';
4
+ import { useStableReference } from '@codeleap/hooks';
5
+ /**
6
+ * Resolves a component's style parts from `WebStyleRegistry` and re-evaluates
7
+ * whenever the `style` prop or `context` changes.
8
+ *
9
+ * Must be called inside a component that has a `WebStyleRegistry` instance
10
+ * available (created once per app via `new WebStyleRegistry()`). Pass the
11
+ * component's registered name as `componentName` — it must match the name used
12
+ * in `WebStyleRegistry.registerComponent`.
13
+ */
14
+ export const useStylesFor = (componentName, style, context) => {
15
+ const styleObserver = useStyleObserver(style);
16
+ // const isMounted = useIsMounted()
17
+ const stableContext = useStableReference(context ?? {});
18
+ const styles = useMemo(() => {
19
+ return WebStyleRegistry.current.styleFor(componentName, style, true, stableContext);
20
+ }, [styleObserver, stableContext]);
21
+ // const processedStyles = useMemo(() => {
22
+ // // this is strange, but necessary to recalculate the pre-set styles from SSR
23
+ // return Object.entries(styles).reduce((acc, [key, styleValue]) => {
24
+ // const isServer = typeof window === 'undefined'
25
+ // const inEnvTransition = isServer ? false : !isMounted
26
+ // acc[key] = inEnvTransition ? {
27
+ // // Despite what it may look like, this is not (just) a joke. The "orphans" property is almost completely useless,
28
+ // // so we set it just to force the styles to recompute after hydration. Also picked for comedic impact.
29
+ // orphans: 1,
30
+ // ...styleValue } : styleValue
31
+ // return acc
32
+ // }, {} as Record<C, ICSS>)
33
+ // }, [styles, isMounted])
34
+ return styles;
35
+ };
36
+ //# sourceMappingURL=useStylesFor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStylesFor.js","sourceRoot":"","sources":["../../../src/lib/hooks/useStylesFor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAElE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAmB,aAAqB,EAAE,KAA2B,EAAE,OAA0B,EAAmB,EAAE;IAChJ,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAE7C,mCAAmC;IAEnC,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAEvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,OAAO,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAA;IACrF,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;IAElC,0CAA0C;IAC1C,iFAAiF;IACjF,uEAAuE;IACvE,qDAAqD;IACrD,4DAA4D;IAE5D,qCAAqC;IACrC,0HAA0H;IAC1H,+GAA+G;IAC/G,oBAAoB;IAEpB,qCAAqC;IAErC,iBAAiB;IACjB,8BAA8B;IAC9B,0BAA0B;IAE1B,OAAO,MAAyB,CAAA;AAElC,CAAC,CAAA"}