@yamada-ui/react 2.2.3-dev-20260622141401 → 2.2.3

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 (198) hide show
  1. package/dist/cjs/components/accordion/use-accordion.cjs.map +1 -1
  2. package/dist/cjs/components/autocomplete/use-autocomplete.cjs.map +1 -1
  3. package/dist/cjs/components/calendar/use-calendar.cjs +1 -1
  4. package/dist/cjs/components/calendar/use-calendar.cjs.map +1 -1
  5. package/dist/cjs/components/carousel/carousel.cjs.map +1 -1
  6. package/dist/cjs/components/chart/chart.cjs.map +1 -1
  7. package/dist/cjs/components/chart/use-polar-chart.cjs.map +1 -1
  8. package/dist/cjs/components/checkbox/checkbox.cjs.map +1 -1
  9. package/dist/cjs/components/checkbox/use-checkbox-group.cjs.map +1 -1
  10. package/dist/cjs/components/checkbox-card/checkbox-card.cjs.map +1 -1
  11. package/dist/cjs/components/collapse/collapse.cjs.map +1 -1
  12. package/dist/cjs/components/color-picker/use-color-picker.cjs.map +1 -1
  13. package/dist/cjs/components/color-swatch/color-swatch-group.cjs.map +1 -1
  14. package/dist/cjs/components/date-picker/date-picker.cjs.map +1 -1
  15. package/dist/cjs/components/date-picker/use-date-picker.cjs +1 -1
  16. package/dist/cjs/components/date-picker/use-date-picker.cjs.map +1 -1
  17. package/dist/cjs/components/editable/use-editable.cjs.map +1 -1
  18. package/dist/cjs/components/field/field.cjs.map +1 -1
  19. package/dist/cjs/components/file-input/file-input.cjs.map +1 -1
  20. package/dist/cjs/components/flip/flip.cjs.map +1 -1
  21. package/dist/cjs/components/highlight/highlight.cjs.map +1 -1
  22. package/dist/cjs/components/indicator/indicator.cjs.map +1 -1
  23. package/dist/cjs/components/infinite-scroll-area/use-infinite-scroll.cjs.map +1 -1
  24. package/dist/cjs/components/input/input-group.cjs.map +1 -1
  25. package/dist/cjs/components/list/list.cjs.map +1 -1
  26. package/dist/cjs/components/menu/use-menu.cjs.map +1 -1
  27. package/dist/cjs/components/native-select/use-native-select.cjs.map +1 -1
  28. package/dist/cjs/components/native-table/native-table.cjs.map +1 -1
  29. package/dist/cjs/components/notice/notice.cjs.map +1 -1
  30. package/dist/cjs/components/number-input/use-number-input.cjs.map +1 -1
  31. package/dist/cjs/components/pagination/pagination.cjs.map +1 -1
  32. package/dist/cjs/components/pagination/use-pagination.cjs.map +1 -1
  33. package/dist/cjs/components/picture/picture.cjs.map +1 -1
  34. package/dist/cjs/components/pin-input/pin-input.cjs.map +1 -1
  35. package/dist/cjs/components/pin-input/use-pin-input.cjs.map +1 -1
  36. package/dist/cjs/components/qr-code/use-qr-code.cjs.map +1 -1
  37. package/dist/cjs/components/radio/use-radio-group.cjs.map +1 -1
  38. package/dist/cjs/components/segmented-control/segmented-control.cjs.map +1 -1
  39. package/dist/cjs/components/select/use-select.cjs.map +1 -1
  40. package/dist/cjs/components/show/show.cjs.map +1 -1
  41. package/dist/cjs/components/sidebar/sidebar.cjs.map +1 -1
  42. package/dist/cjs/components/sidebar/use-sidebar.cjs.map +1 -1
  43. package/dist/cjs/components/simple-grid/simple-grid.cjs.map +1 -1
  44. package/dist/cjs/components/stack/z-stack.cjs.map +1 -1
  45. package/dist/cjs/components/steps/steps.cjs.map +1 -1
  46. package/dist/cjs/components/steps/use-steps.cjs.map +1 -1
  47. package/dist/cjs/components/table/table.cjs.map +1 -1
  48. package/dist/cjs/components/tabs/tabs.cjs.map +1 -1
  49. package/dist/cjs/components/toggle/use-toggle-group.cjs.map +1 -1
  50. package/dist/cjs/components/toggle/use-toggle.cjs.map +1 -1
  51. package/dist/cjs/components/tree/tree.cjs.map +1 -1
  52. package/dist/cjs/components/tree/use-tree.cjs.map +1 -1
  53. package/dist/cjs/core/components/create-component.cjs.map +1 -1
  54. package/dist/cjs/core/components/props.cjs.map +1 -1
  55. package/dist/cjs/core/components/use-component-style.cjs.map +1 -1
  56. package/dist/cjs/core/css/animation.cjs.map +1 -1
  57. package/dist/cjs/core/css/at-rule.cjs.map +1 -1
  58. package/dist/cjs/core/css/calc.cjs.map +1 -1
  59. package/dist/cjs/core/css/color-mix.cjs.map +1 -1
  60. package/dist/cjs/core/css/config.cjs.map +1 -1
  61. package/dist/cjs/core/css/css.cjs.map +1 -1
  62. package/dist/cjs/core/css/gradient.cjs.map +1 -1
  63. package/dist/cjs/core/css/grid.cjs.map +1 -1
  64. package/dist/cjs/core/css/transition.cjs.map +1 -1
  65. package/dist/cjs/core/css/utils.cjs.map +1 -1
  66. package/dist/cjs/core/system/breakpoint.cjs.map +1 -1
  67. package/dist/cjs/core/system/color-mode-provider.cjs.map +1 -1
  68. package/dist/cjs/core/system/create-system.cjs.map +1 -1
  69. package/dist/cjs/core/system/environment-provider.cjs.map +1 -1
  70. package/dist/cjs/core/system/storage-manager.cjs.map +1 -1
  71. package/dist/cjs/core/system/storage-script.cjs.map +1 -1
  72. package/dist/cjs/core/system/use-system-color-mode.cjs.map +1 -1
  73. package/dist/cjs/core/system/var.cjs.map +1 -1
  74. package/dist/cjs/hooks/use-animation/index.cjs.map +1 -1
  75. package/dist/cjs/hooks/use-breakpoint/use-breakpoint-value.cjs.map +1 -1
  76. package/dist/cjs/hooks/use-breakpoint/use-breakpoint.cjs.map +1 -1
  77. package/dist/cjs/hooks/use-clickable/index.cjs.map +1 -1
  78. package/dist/cjs/hooks/use-clipboard/index.cjs.map +1 -1
  79. package/dist/cjs/hooks/use-controllable-state/index.cjs.map +1 -1
  80. package/dist/cjs/hooks/use-counter/index.cjs.map +1 -1
  81. package/dist/cjs/hooks/use-descendants/index.cjs.map +1 -1
  82. package/dist/cjs/hooks/use-focus/index.cjs.map +1 -1
  83. package/dist/cjs/hooks/use-local-storage/index.cjs.map +1 -1
  84. package/dist/cjs/hooks/use-mounted/index.cjs.map +1 -1
  85. package/dist/cjs/hooks/use-outside-click/index.cjs.map +1 -1
  86. package/dist/cjs/providers/i18n-provider/i18n-provider.cjs.map +1 -1
  87. package/dist/cjs/utils/children.cjs.map +1 -1
  88. package/dist/cjs/utils/dom.cjs.map +1 -1
  89. package/dist/cjs/utils/store.cjs.map +1 -1
  90. package/dist/esm/components/accordion/use-accordion.js.map +1 -1
  91. package/dist/esm/components/autocomplete/use-autocomplete.js.map +1 -1
  92. package/dist/esm/components/calendar/use-calendar.js +1 -1
  93. package/dist/esm/components/calendar/use-calendar.js.map +1 -1
  94. package/dist/esm/components/carousel/carousel.js.map +1 -1
  95. package/dist/esm/components/chart/chart.js.map +1 -1
  96. package/dist/esm/components/chart/use-polar-chart.js.map +1 -1
  97. package/dist/esm/components/checkbox/checkbox.js.map +1 -1
  98. package/dist/esm/components/checkbox/use-checkbox-group.js.map +1 -1
  99. package/dist/esm/components/checkbox-card/checkbox-card.js.map +1 -1
  100. package/dist/esm/components/collapse/collapse.js.map +1 -1
  101. package/dist/esm/components/color-picker/use-color-picker.js.map +1 -1
  102. package/dist/esm/components/color-swatch/color-swatch-group.js.map +1 -1
  103. package/dist/esm/components/date-picker/date-picker.js.map +1 -1
  104. package/dist/esm/components/date-picker/use-date-picker.js +1 -1
  105. package/dist/esm/components/date-picker/use-date-picker.js.map +1 -1
  106. package/dist/esm/components/editable/use-editable.js.map +1 -1
  107. package/dist/esm/components/field/field.js.map +1 -1
  108. package/dist/esm/components/file-input/file-input.js.map +1 -1
  109. package/dist/esm/components/flip/flip.js.map +1 -1
  110. package/dist/esm/components/highlight/highlight.js.map +1 -1
  111. package/dist/esm/components/indicator/indicator.js.map +1 -1
  112. package/dist/esm/components/infinite-scroll-area/use-infinite-scroll.js.map +1 -1
  113. package/dist/esm/components/input/input-group.js.map +1 -1
  114. package/dist/esm/components/list/list.js.map +1 -1
  115. package/dist/esm/components/menu/use-menu.js.map +1 -1
  116. package/dist/esm/components/native-select/use-native-select.js.map +1 -1
  117. package/dist/esm/components/native-table/native-table.js.map +1 -1
  118. package/dist/esm/components/notice/notice.js.map +1 -1
  119. package/dist/esm/components/number-input/use-number-input.js.map +1 -1
  120. package/dist/esm/components/pagination/pagination.js.map +1 -1
  121. package/dist/esm/components/pagination/use-pagination.js.map +1 -1
  122. package/dist/esm/components/picture/picture.js.map +1 -1
  123. package/dist/esm/components/pin-input/pin-input.js.map +1 -1
  124. package/dist/esm/components/pin-input/use-pin-input.js.map +1 -1
  125. package/dist/esm/components/qr-code/use-qr-code.js.map +1 -1
  126. package/dist/esm/components/radio/use-radio-group.js.map +1 -1
  127. package/dist/esm/components/segmented-control/segmented-control.js.map +1 -1
  128. package/dist/esm/components/select/use-select.js.map +1 -1
  129. package/dist/esm/components/show/show.js.map +1 -1
  130. package/dist/esm/components/sidebar/sidebar.js.map +1 -1
  131. package/dist/esm/components/sidebar/use-sidebar.js.map +1 -1
  132. package/dist/esm/components/simple-grid/simple-grid.js.map +1 -1
  133. package/dist/esm/components/stack/z-stack.js.map +1 -1
  134. package/dist/esm/components/steps/steps.js.map +1 -1
  135. package/dist/esm/components/steps/use-steps.js.map +1 -1
  136. package/dist/esm/components/table/table.js.map +1 -1
  137. package/dist/esm/components/tabs/tabs.js.map +1 -1
  138. package/dist/esm/components/toggle/use-toggle-group.js.map +1 -1
  139. package/dist/esm/components/toggle/use-toggle.js.map +1 -1
  140. package/dist/esm/components/tree/tree.js.map +1 -1
  141. package/dist/esm/components/tree/use-tree.js.map +1 -1
  142. package/dist/esm/core/components/create-component.js.map +1 -1
  143. package/dist/esm/core/components/props.js.map +1 -1
  144. package/dist/esm/core/components/use-component-style.js.map +1 -1
  145. package/dist/esm/core/css/animation.js.map +1 -1
  146. package/dist/esm/core/css/at-rule.js.map +1 -1
  147. package/dist/esm/core/css/calc.js.map +1 -1
  148. package/dist/esm/core/css/color-mix.js.map +1 -1
  149. package/dist/esm/core/css/config.js.map +1 -1
  150. package/dist/esm/core/css/css.js.map +1 -1
  151. package/dist/esm/core/css/gradient.js.map +1 -1
  152. package/dist/esm/core/css/grid.js.map +1 -1
  153. package/dist/esm/core/css/transition.js.map +1 -1
  154. package/dist/esm/core/css/utils.js.map +1 -1
  155. package/dist/esm/core/system/breakpoint.js.map +1 -1
  156. package/dist/esm/core/system/color-mode-provider.js.map +1 -1
  157. package/dist/esm/core/system/create-system.js.map +1 -1
  158. package/dist/esm/core/system/environment-provider.js.map +1 -1
  159. package/dist/esm/core/system/storage-manager.js.map +1 -1
  160. package/dist/esm/core/system/storage-script.js.map +1 -1
  161. package/dist/esm/core/system/use-system-color-mode.js.map +1 -1
  162. package/dist/esm/core/system/var.js.map +1 -1
  163. package/dist/esm/hooks/use-animation/index.js.map +1 -1
  164. package/dist/esm/hooks/use-breakpoint/use-breakpoint-value.js.map +1 -1
  165. package/dist/esm/hooks/use-breakpoint/use-breakpoint.js.map +1 -1
  166. package/dist/esm/hooks/use-clickable/index.js.map +1 -1
  167. package/dist/esm/hooks/use-clipboard/index.js.map +1 -1
  168. package/dist/esm/hooks/use-controllable-state/index.js.map +1 -1
  169. package/dist/esm/hooks/use-counter/index.js.map +1 -1
  170. package/dist/esm/hooks/use-descendants/index.js.map +1 -1
  171. package/dist/esm/hooks/use-focus/index.js.map +1 -1
  172. package/dist/esm/hooks/use-local-storage/index.js.map +1 -1
  173. package/dist/esm/hooks/use-mounted/index.js.map +1 -1
  174. package/dist/esm/hooks/use-outside-click/index.js.map +1 -1
  175. package/dist/esm/providers/i18n-provider/i18n-provider.js.map +1 -1
  176. package/dist/esm/utils/children.js.map +1 -1
  177. package/dist/esm/utils/dom.js.map +1 -1
  178. package/dist/esm/utils/store.js.map +1 -1
  179. package/dist/types/components/autocomplete/autocomplete.style.d.ts +1 -1
  180. package/dist/types/components/breadcrumb/breadcrumb.style.d.ts +1 -1
  181. package/dist/types/components/calendar/calendar.style.d.ts +2 -2
  182. package/dist/types/components/carousel/carousel.style.d.ts +2 -2
  183. package/dist/types/components/chart/polar-chart.style.d.ts +1 -1
  184. package/dist/types/components/date-picker/date-picker.style.d.ts +1 -1
  185. package/dist/types/components/field/use-field-props.d.ts +1 -1
  186. package/dist/types/components/file-button/use-file-button.d.ts +2 -2
  187. package/dist/types/components/file-input/use-file-input.d.ts +2 -2
  188. package/dist/types/components/menu/menu.style.d.ts +2 -2
  189. package/dist/types/components/progress/use-progress.d.ts +6 -6
  190. package/dist/types/components/rating/rating.style.d.ts +2 -2
  191. package/dist/types/components/select/select.style.d.ts +1 -1
  192. package/dist/types/components/steps/steps.style.d.ts +1 -1
  193. package/dist/types/components/tabs/tabs.style.d.ts +1 -1
  194. package/dist/types/components/tree/tree.style.d.ts +1 -1
  195. package/dist/types/components/tree/use-tree.d.ts +2 -2
  196. package/dist/types/hooks/use-clickable/index.d.ts +2 -2
  197. package/dist/types/providers/i18n-provider/i18n-provider.d.ts +1 -1
  198. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-animation/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { CSSAnimationObject, Token } from \"../../core\"\nimport { useCallback, useRef, useState } from \"react\"\nimport { animation, css, useSystem } from \"../../core\"\nimport { isArray, isUndefined, runIfFn } from \"../../utils\"\n\ntype CSSObject =\n | Token<CSSAnimationObject, \"animations\">\n | Token<CSSAnimationObject, \"animations\">[]\n\n/**\n * `useAnimation` is a custom hook that implements animations similar to CSS `keyframes`.\n *\n * @see https://yamada-ui.com/docs/hooks/use-animation\n */\nexport const useAnimation = (cssObj: CSSObject): string => {\n const system = useSystem()\n\n if (isArray(cssObj)) {\n return cssObj.map((cssObj) => animation(cssObj, { css, system })).join(\", \")\n } else {\n return animation(cssObj, { css, system })\n }\n}\n\n/**\n * `useDynamicAnimation` is a custom hook used to switch animations.\n *\n * @see https://yamada-ui.com/docs/hooks/use-dynamic-animation\n */\nexport const useDynamicAnimation = <\n Y extends\n | Token<CSSAnimationObject, \"animations\">[]\n | { [key: string]: CSSObject },\n>(\n arrayOrObj: Y,\n init?: (keyof Y)[] | keyof Y,\n): [\n string | undefined,\n (\n key:\n | ((key: (keyof Y)[] | keyof Y | undefined) => (keyof Y)[] | keyof Y)\n | (keyof Y)[]\n | keyof Y,\n ) => void,\n] => {\n const system = useSystem()\n\n const keys = useRef<string | string[] | undefined>(\n !isUndefined(init)\n ? isArray(init)\n ? init.map(String)\n : String(init)\n : undefined,\n )\n const cache = useRef<Map<string, string>>(new Map<string, string>())\n\n const [animations, setAnimations] = useState<string | undefined>(() => {\n for (const [key, styles] of Object.entries(arrayOrObj)) {\n if (isArray(styles)) {\n cache.current.set(\n key,\n styles.map((style) => animation(style, { css, system })).join(\", \"),\n )\n } else {\n cache.current.set(key, animation(styles, { css, system }))\n }\n }\n\n if (isArray(keys.current)) {\n return keys.current.map((key) => cache.current.get(key)).join(\", \")\n } else {\n return cache.current.get(keys.current ?? \"\")\n }\n })\n\n const setAnimation = useCallback(\n (\n keysOrFunc:\n | ((key: (keyof Y)[] | keyof Y | undefined) => (keyof Y)[] | keyof Y)\n | (keyof Y)[]\n | keyof Y,\n ) => {\n const args = (() => {\n if (!isUndefined(keys.current) && isArray(arrayOrObj)) {\n return isArray(keys.current)\n ? keys.current.map(Number)\n : Number(keys.current)\n } else {\n return keys.current\n }\n })() as (keyof Y)[] | keyof Y | undefined\n\n const keyOrArray = runIfFn(keysOrFunc, args)\n\n keys.current = isArray(keyOrArray)\n ? keyOrArray.map(String)\n : String(keyOrArray)\n\n if (isArray(keys.current)) {\n setAnimations(\n keys.current.map((key) => cache.current.get(key)).join(\", \"),\n )\n } else {\n setAnimations(cache.current.get(keys.current))\n }\n },\n [arrayOrObj],\n )\n\n return [animations, setAnimation]\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAa,gBAAgB,WAA8B;CACzD,MAAM,SAAS,UAAU;CAEzB,KAAA,GAAA,cAAA,QAAA,CAAY,MAAM,GAChB,OAAO,OAAO,KAAK,WAAW,UAAU,QAAQ;EAAE;EAAK;CAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;MAE3E,OAAO,UAAU,QAAQ;EAAE;EAAK;CAAO,CAAC;AAE5C;;;;;;AAOA,MAAa,uBAKX,YACA,SASG;CACH,MAAM,SAAS,UAAU;CAEzB,MAAM,OAAO,OACX,EAAA,GAAA,cAAA,YAAA,CAAa,IAAI,KAAA,GAAA,cAAA,QAAA,CACL,IAAI,IACV,KAAK,IAAI,MAAM,IACf,OAAO,IAAI,IACb,KAAA,CACN;CACA,MAAM,QAAQ,uBAA4B,IAAI,IAAoB,CAAC;CAEnE,MAAM,CAAC,YAAY,iBAAiB,eAAmC;EACrE,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,UAAU,GACnD,KAAA,GAAA,cAAA,QAAA,CAAY,MAAM,GAChB,MAAM,QAAQ,IACZ,KACA,OAAO,KAAK,UAAU,UAAU,OAAO;GAAE;GAAK;EAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CACpE;OAEA,MAAM,QAAQ,IAAI,KAAK,UAAU,QAAQ;GAAE;GAAK;EAAO,CAAC,CAAC;EAI7D,KAAA,GAAA,cAAA,QAAA,CAAY,KAAK,OAAO,GACtB,OAAO,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;OAElE,OAAO,MAAM,QAAQ,IAAI,KAAK,WAAW,EAAE;CAE/C,CAAC;CAoCD,OAAO,CAAC,YAlCa,aAEjB,eAIG;EAWH,MAAM,cAAA,GAAA,cAAA,QAAA,CAAqB,mBAVP;GAClB,IAAI,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK,OAAO,MAAA,GAAA,cAAA,QAAA,CAAa,UAAU,GAClD,QAAA,GAAA,cAAA,QAAA,CAAe,KAAK,OAAO,IACvB,KAAK,QAAQ,IAAI,MAAM,IACvB,OAAO,KAAK,OAAO;QAEvB,OAAO,KAAK;EAEhB,EAAA,CAE0C,CAAC;EAE3C,KAAK,WAAA,GAAA,cAAA,QAAA,CAAkB,UAAU,IAC7B,WAAW,IAAI,MAAM,IACrB,OAAO,UAAU;EAErB,KAAA,GAAA,cAAA,QAAA,CAAY,KAAK,OAAO,GACtB,cACE,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAC7D;OAEA,cAAc,MAAM,QAAQ,IAAI,KAAK,OAAO,CAAC;CAEjD,GACA,CAAC,UAAU,CAGkB,CAAC;AAClC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-animation/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { CSSAnimationObject, Token } from \"../../core\"\nimport { useCallback, useRef, useState } from \"react\"\nimport { animation, css, useSystem } from \"../../core\"\nimport { isArray, isUndefined, runIfFn } from \"../../utils\"\n\ntype CSSObject =\n | Token<CSSAnimationObject, \"animations\">\n | Token<CSSAnimationObject, \"animations\">[]\n\n/**\n * `useAnimation` is a custom hook that implements animations similar to CSS `keyframes`.\n *\n * @see https://yamada-ui.com/docs/hooks/use-animation\n */\nexport const useAnimation = (cssObj: CSSObject): string => {\n const system = useSystem()\n\n if (isArray(cssObj))\n return cssObj.map((cssObj) => animation(cssObj, { css, system })).join(\", \")\n else return animation(cssObj, { css, system })\n}\n\n/**\n * `useDynamicAnimation` is a custom hook used to switch animations.\n *\n * @see https://yamada-ui.com/docs/hooks/use-dynamic-animation\n */\nexport const useDynamicAnimation = <\n Y extends\n | Token<CSSAnimationObject, \"animations\">[]\n | { [key: string]: CSSObject },\n>(\n arrayOrObj: Y,\n init?: (keyof Y)[] | keyof Y,\n): [\n string | undefined,\n (\n key:\n | ((key: (keyof Y)[] | keyof Y | undefined) => (keyof Y)[] | keyof Y)\n | (keyof Y)[]\n | keyof Y,\n ) => void,\n] => {\n const system = useSystem()\n\n const keys = useRef<string | string[] | undefined>(\n !isUndefined(init)\n ? isArray(init)\n ? init.map(String)\n : String(init)\n : undefined,\n )\n const cache = useRef<Map<string, string>>(new Map<string, string>())\n\n const [animations, setAnimations] = useState<string | undefined>(() => {\n for (const [key, styles] of Object.entries(arrayOrObj))\n if (isArray(styles))\n cache.current.set(\n key,\n styles.map((style) => animation(style, { css, system })).join(\", \"),\n )\n else cache.current.set(key, animation(styles, { css, system }))\n\n if (isArray(keys.current))\n return keys.current.map((key) => cache.current.get(key)).join(\", \")\n else return cache.current.get(keys.current ?? \"\")\n })\n\n const setAnimation = useCallback(\n (\n keysOrFunc:\n | ((key: (keyof Y)[] | keyof Y | undefined) => (keyof Y)[] | keyof Y)\n | (keyof Y)[]\n | keyof Y,\n ) => {\n const args = (() => {\n if (!isUndefined(keys.current) && isArray(arrayOrObj))\n return isArray(keys.current)\n ? keys.current.map(Number)\n : Number(keys.current)\n else return keys.current\n })() as (keyof Y)[] | keyof Y | undefined\n\n const keyOrArray = runIfFn(keysOrFunc, args)\n\n keys.current = isArray(keyOrArray)\n ? keyOrArray.map(String)\n : String(keyOrArray)\n\n if (isArray(keys.current))\n setAnimations(\n keys.current.map((key) => cache.current.get(key)).join(\", \"),\n )\n else setAnimations(cache.current.get(keys.current))\n },\n [arrayOrObj],\n )\n\n return [animations, setAnimation]\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAa,gBAAgB,WAA8B;CACzD,MAAM,SAAS,UAAU;CAEzB,KAAA,GAAA,cAAA,QAAA,CAAY,MAAM,GAChB,OAAO,OAAO,KAAK,WAAW,UAAU,QAAQ;EAAE;EAAK;CAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;MACxE,OAAO,UAAU,QAAQ;EAAE;EAAK;CAAO,CAAC;AAC/C;;;;;;AAOA,MAAa,uBAKX,YACA,SASG;CACH,MAAM,SAAS,UAAU;CAEzB,MAAM,OAAO,OACX,EAAA,GAAA,cAAA,YAAA,CAAa,IAAI,KAAA,GAAA,cAAA,QAAA,CACL,IAAI,IACV,KAAK,IAAI,MAAM,IACf,OAAO,IAAI,IACb,KAAA,CACN;CACA,MAAM,QAAQ,uBAA4B,IAAI,IAAoB,CAAC;CAEnE,MAAM,CAAC,YAAY,iBAAiB,eAAmC;EACrE,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,UAAU,GACnD,KAAA,GAAA,cAAA,QAAA,CAAY,MAAM,GAChB,MAAM,QAAQ,IACZ,KACA,OAAO,KAAK,UAAU,UAAU,OAAO;GAAE;GAAK;EAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CACpE;OACG,MAAM,QAAQ,IAAI,KAAK,UAAU,QAAQ;GAAE;GAAK;EAAO,CAAC,CAAC;EAEhE,KAAA,GAAA,cAAA,QAAA,CAAY,KAAK,OAAO,GACtB,OAAO,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;OAC/D,OAAO,MAAM,QAAQ,IAAI,KAAK,WAAW,EAAE;CAClD,CAAC;CAgCD,OAAO,CAAC,YA9Ba,aAEjB,eAIG;EASH,MAAM,cAAA,GAAA,cAAA,QAAA,CAAqB,mBARP;GAClB,IAAI,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK,OAAO,MAAA,GAAA,cAAA,QAAA,CAAa,UAAU,GAClD,QAAA,GAAA,cAAA,QAAA,CAAe,KAAK,OAAO,IACvB,KAAK,QAAQ,IAAI,MAAM,IACvB,OAAO,KAAK,OAAO;QACpB,OAAO,KAAK;EACnB,EAAA,CAE0C,CAAC;EAE3C,KAAK,WAAA,GAAA,cAAA,QAAA,CAAkB,UAAU,IAC7B,WAAW,IAAI,MAAM,IACrB,OAAO,UAAU;EAErB,KAAA,GAAA,cAAA,QAAA,CAAY,KAAK,OAAO,GACtB,cACE,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAC7D;OACG,cAAc,MAAM,QAAQ,IAAI,KAAK,OAAO,CAAC;CACpD,GACA,CAAC,UAAU,CAGkB,CAAC;AAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-breakpoint-value.js","names":[],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint-value.ts"],"sourcesContent":["import type { Breakpoint, ResponsiveObject, System } from \"../../core\"\nimport { useMemo } from \"react\"\nimport { useSystem } from \"../../core\"\nimport { useBreakpoint } from \"./use-breakpoint\"\n\n/**\n * `useBreakpointValue` is a custom hook that returns the value of the current breakpoint from the provided object.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint-value\n */\nexport const useBreakpointValue = <Y>(\n values: ResponsiveObject<Y, false>,\n): Y => {\n const system = useSystem()\n const breakpoint = useBreakpoint()\n\n return useMemo(\n () => getBreakpointValue<Y>(values)(system, breakpoint),\n [values, system, breakpoint],\n )\n}\n\nexport const getBreakpointValue =\n <Y>(values: ResponsiveObject<Y, false> = {}) =>\n (system: System, breakpoint: Breakpoint): Y => {\n const breakpoints = system.breakpoints.keys\n\n if (!breakpoints.length) {\n console.warn(\"getBreakpointValue: `breakpoints` is undefined.\")\n }\n\n const currentIndex = breakpoints.indexOf(breakpoint)\n\n for (let i = currentIndex; 0 < i; i--) {\n const nextBreakpoint = breakpoints[i]\n\n if (nextBreakpoint && values.hasOwnProperty(nextBreakpoint)) {\n return values[nextBreakpoint] as Y\n }\n }\n\n return values.base as Y\n }\n"],"mappings":";;;;;;;;;;AAWA,MAAa,sBACX,WACM;CACN,MAAM,SAAS,UAAU;CACzB,MAAM,aAAa,cAAc;CAEjC,OAAO,cACC,mBAAsB,MAAM,CAAC,CAAC,QAAQ,UAAU,GACtD;EAAC;EAAQ;EAAQ;CAAU,CAC7B;AACF;AAEA,MAAa,sBACP,SAAqC,CAAC,OACzC,QAAgB,eAA8B;CAC7C,MAAM,cAAc,OAAO,YAAY;CAEvC,IAAI,CAAC,YAAY,QACf,QAAQ,KAAK,iDAAiD;CAGhE,MAAM,eAAe,YAAY,QAAQ,UAAU;CAEnD,KAAK,IAAI,IAAI,cAAc,IAAI,GAAG,KAAK;EACrC,MAAM,iBAAiB,YAAY;EAEnC,IAAI,kBAAkB,OAAO,eAAe,cAAc,GACxD,OAAO,OAAO;CAElB;CAEA,OAAO,OAAO;AAChB"}
1
+ {"version":3,"file":"use-breakpoint-value.js","names":[],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint-value.ts"],"sourcesContent":["import type { Breakpoint, ResponsiveObject, System } from \"../../core\"\nimport { useMemo } from \"react\"\nimport { useSystem } from \"../../core\"\nimport { useBreakpoint } from \"./use-breakpoint\"\n\n/**\n * `useBreakpointValue` is a custom hook that returns the value of the current breakpoint from the provided object.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint-value\n */\nexport const useBreakpointValue = <Y>(\n values: ResponsiveObject<Y, false>,\n): Y => {\n const system = useSystem()\n const breakpoint = useBreakpoint()\n\n return useMemo(\n () => getBreakpointValue<Y>(values)(system, breakpoint),\n [values, system, breakpoint],\n )\n}\n\nexport const getBreakpointValue =\n <Y>(values: ResponsiveObject<Y, false> = {}) =>\n (system: System, breakpoint: Breakpoint): Y => {\n const breakpoints = system.breakpoints.keys\n\n if (!breakpoints.length)\n console.warn(\"getBreakpointValue: `breakpoints` is undefined.\")\n\n const currentIndex = breakpoints.indexOf(breakpoint)\n\n for (let i = currentIndex; 0 < i; i--) {\n const nextBreakpoint = breakpoints[i]\n\n if (nextBreakpoint && values.hasOwnProperty(nextBreakpoint))\n return values[nextBreakpoint] as Y\n }\n\n return values.base as Y\n }\n"],"mappings":";;;;;;;;;;AAWA,MAAa,sBACX,WACM;CACN,MAAM,SAAS,UAAU;CACzB,MAAM,aAAa,cAAc;CAEjC,OAAO,cACC,mBAAsB,MAAM,CAAC,CAAC,QAAQ,UAAU,GACtD;EAAC;EAAQ;EAAQ;CAAU,CAC7B;AACF;AAEA,MAAa,sBACP,SAAqC,CAAC,OACzC,QAAgB,eAA8B;CAC7C,MAAM,cAAc,OAAO,YAAY;CAEvC,IAAI,CAAC,YAAY,QACf,QAAQ,KAAK,iDAAiD;CAEhE,MAAM,eAAe,YAAY,QAAQ,UAAU;CAEnD,KAAK,IAAI,IAAI,cAAc,IAAI,GAAG,KAAK;EACrC,MAAM,iBAAiB,YAAY;EAEnC,IAAI,kBAAkB,OAAO,eAAe,cAAc,GACxD,OAAO,OAAO;CAClB;CAEA,OAAO,OAAO;AAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-breakpoint.js","names":["noop"],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint.ts"],"sourcesContent":["\"use client\"\n\nimport type { Breakpoint } from \"../../core\"\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\"\nimport { useEnvironment, useSystem } from \"../../core\"\nimport { createdDom, isUndefined, noop } from \"../../utils\"\n\n/**\n * `useBreakpoint` is a custom hook that returns the current breakpoint.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint\n */\nexport const useBreakpoint = () => {\n const animationFrameId = useRef(0)\n const { breakpoints, config } = useSystem()\n const { getWindow } = useEnvironment()\n const {\n containerRef,\n direction = \"down\",\n identifier = \"@media screen\",\n } = config.breakpoint ?? {}\n const hasContainer = !!containerRef\n\n const queries = useMemo(() => {\n return breakpoints.queries.map(\n ({ breakpoint, maxW, minMaxQuery, minW }) => {\n const searchValue =\n identifier === \"@media screen\"\n ? \"@media screen and \"\n : `${identifier} `\n const query = minMaxQuery?.replace(searchValue, \"\") ?? \"\"\n\n return {\n breakpoint,\n maxW,\n minW,\n query,\n }\n },\n )\n }, [breakpoints, identifier])\n\n const hasQueries = !!queries.length\n\n const getBreakpoint = useCallback(\n (width?: number) => {\n if (isUndefined(width)) {\n const win = getWindow()\n\n if (hasContainer || !hasQueries) return \"base\"\n\n for (const { breakpoint, query } of queries) {\n const mql = win?.matchMedia(query)\n\n if (mql?.matches) return breakpoint\n }\n } else {\n for (const { breakpoint, maxW, minW } of queries) {\n if (direction !== \"up\") {\n if ((minW ?? 0) <= width) return breakpoint\n } else {\n if (width <= (maxW ?? Infinity)) return breakpoint\n }\n }\n }\n\n return \"base\"\n },\n [direction, getWindow, hasContainer, hasQueries, queries],\n )\n\n const breakpointRef = useRef<Breakpoint>(getBreakpoint())\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!hasContainer || !hasQueries) {\n const observer = queries.map(({ breakpoint, query }): (() => void) => {\n const mql = getWindow()?.matchMedia(query)\n\n const onChange = (e: MediaQueryListEvent) => {\n if (e.matches) breakpointRef.current = breakpoint\n\n listener()\n }\n\n mql?.addEventListener(\"change\", onChange)\n\n return () => {\n mql?.removeEventListener(\"change\", onChange)\n }\n })\n\n return () => {\n observer.forEach((unobserve) => unobserve())\n }\n } else if (createdDom()) {\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return\n\n cancelAnimationFrame(animationFrameId.current)\n\n const { width } = entry.contentRect\n\n breakpointRef.current = getBreakpoint(width)\n\n animationFrameId.current = requestAnimationFrame(listener)\n })\n\n if (containerRef.current) observer.observe(containerRef.current)\n\n return () => {\n observer.disconnect()\n\n if (process.env.NODE_ENV !== \"test\")\n cancelAnimationFrame(animationFrameId.current)\n }\n } else {\n return noop\n }\n },\n [containerRef, getBreakpoint, getWindow, hasContainer, hasQueries, queries],\n )\n\n const getSnapshot = useCallback(() => {\n return breakpointRef.current\n }, [])\n\n const breakpoint = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n return breakpoint\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,sBAAsB;CACjC,MAAM,mBAAmB,OAAO,CAAC;CACjC,MAAM,EAAE,aAAa,WAAW,UAAU;CAC1C,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,EACJ,cACA,YAAY,QACZ,aAAa,oBACX,OAAO,cAAc,CAAC;CAC1B,MAAM,eAAe,CAAC,CAAC;CAEvB,MAAM,UAAU,cAAc;EAC5B,OAAO,YAAY,QAAQ,KACxB,EAAE,YAAY,MAAM,aAAa,WAAW;GAC3C,MAAM,cACJ,eAAe,kBACX,uBACA,GAAG,WAAW;GAGpB,OAAO;IACL;IACA;IACA;IACA,OANY,aAAa,QAAQ,aAAa,EAAE,KAAK;GAOvD;EACF,CACF;CACF,GAAG,CAAC,aAAa,UAAU,CAAC;CAE5B,MAAM,aAAa,CAAC,CAAC,QAAQ;CAE7B,MAAM,gBAAgB,aACnB,UAAmB;EAClB,KAAA,GAAA,cAAA,YAAA,CAAgB,KAAK,GAAG;GACtB,MAAM,MAAM,UAAU;GAEtB,IAAI,gBAAgB,CAAC,YAAY,OAAO;GAExC,KAAK,MAAM,EAAE,YAAY,WAAW,SAGlC,KAFY,KAAK,WAAW,KAAK,CAAC,GAEzB,SAAS,OAAO;EAE7B,OACE,KAAK,MAAM,EAAE,YAAY,MAAM,UAAU,SACvC,IAAI,cAAc;QACX,QAAQ,MAAM,OAAO,OAAO;EAAA,OAEjC,IAAI,UAAU,QAAQ,WAAW,OAAO;EAK9C,OAAO;CACT,GACA;EAAC;EAAW;EAAW;EAAc;EAAY;CAAO,CAC1D;CAEA,MAAM,gBAAgB,OAAmB,cAAc,CAAC;CAExD,MAAM,YAAY,aACf,aAAyB;EACxB,IAAI,CAAC,gBAAgB,CAAC,YAAY;GAChC,MAAM,WAAW,QAAQ,KAAK,EAAE,YAAY,YAA0B;IACpE,MAAM,MAAM,UAAU,CAAC,EAAE,WAAW,KAAK;IAEzC,MAAM,YAAY,MAA2B;KAC3C,IAAI,EAAE,SAAS,cAAc,UAAU;KAEvC,SAAS;IACX;IAEA,KAAK,iBAAiB,UAAU,QAAQ;IAExC,aAAa;KACX,KAAK,oBAAoB,UAAU,QAAQ;IAC7C;GACF,CAAC;GAED,aAAa;IACX,SAAS,SAAS,cAAc,UAAU,CAAC;GAC7C;EACF,OAAO,KAAA,GAAA,cAAA,WAAA,CAAe,GAAG;GACvB,MAAM,WAAW,IAAI,gBAAgB,CAAC,WAAW;IAC/C,IAAI,CAAC,OAAO;IAEZ,qBAAqB,iBAAiB,OAAO;IAE7C,MAAM,EAAE,UAAU,MAAM;IAExB,cAAc,UAAU,cAAc,KAAK;IAE3C,iBAAiB,UAAU,sBAAsB,QAAQ;GAC3D,CAAC;GAED,IAAI,aAAa,SAAS,SAAS,QAAQ,aAAa,OAAO;GAE/D,aAAa;IACX,SAAS,WAAW;IAGlB,qBAAqB,iBAAiB,OAAO;GACjD;EACF,OACE,OAAOA,cAAAA;CAEX,GACA;EAAC;EAAc;EAAe;EAAW;EAAc;EAAY;CAAO,CAC5E;CAEA,MAAM,cAAc,kBAAkB;EACpC,OAAO,cAAc;CACvB,GAAG,CAAC,CAAC;CAIL,OAFmB,qBAAqB,WAAW,aAAa,WAEhD;AAClB"}
1
+ {"version":3,"file":"use-breakpoint.js","names":["noop"],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint.ts"],"sourcesContent":["\"use client\"\n\nimport type { Breakpoint } from \"../../core\"\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\"\nimport { useEnvironment, useSystem } from \"../../core\"\nimport { createdDom, isUndefined, noop } from \"../../utils\"\n\n/**\n * `useBreakpoint` is a custom hook that returns the current breakpoint.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint\n */\nexport const useBreakpoint = () => {\n const animationFrameId = useRef(0)\n const { breakpoints, config } = useSystem()\n const { getWindow } = useEnvironment()\n const {\n containerRef,\n direction = \"down\",\n identifier = \"@media screen\",\n } = config.breakpoint ?? {}\n const hasContainer = !!containerRef\n\n const queries = useMemo(() => {\n return breakpoints.queries.map(\n ({ breakpoint, maxW, minMaxQuery, minW }) => {\n const searchValue =\n identifier === \"@media screen\"\n ? \"@media screen and \"\n : `${identifier} `\n const query = minMaxQuery?.replace(searchValue, \"\") ?? \"\"\n\n return {\n breakpoint,\n maxW,\n minW,\n query,\n }\n },\n )\n }, [breakpoints, identifier])\n\n const hasQueries = !!queries.length\n\n const getBreakpoint = useCallback(\n (width?: number) => {\n if (isUndefined(width)) {\n const win = getWindow()\n\n if (hasContainer || !hasQueries) return \"base\"\n\n for (const { breakpoint, query } of queries) {\n const mql = win?.matchMedia(query)\n\n if (mql?.matches) return breakpoint\n }\n } else {\n for (const { breakpoint, maxW, minW } of queries)\n if (direction !== \"up\") {\n if ((minW ?? 0) <= width) return breakpoint\n } else {\n if (width <= (maxW ?? Infinity)) return breakpoint\n }\n }\n\n return \"base\"\n },\n [direction, getWindow, hasContainer, hasQueries, queries],\n )\n\n const breakpointRef = useRef<Breakpoint>(getBreakpoint())\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!hasContainer || !hasQueries) {\n const observer = queries.map(({ breakpoint, query }): (() => void) => {\n const mql = getWindow()?.matchMedia(query)\n\n const onChange = (e: MediaQueryListEvent) => {\n if (e.matches) breakpointRef.current = breakpoint\n\n listener()\n }\n\n mql?.addEventListener(\"change\", onChange)\n\n return () => {\n mql?.removeEventListener(\"change\", onChange)\n }\n })\n\n return () => {\n observer.forEach((unobserve) => unobserve())\n }\n } else if (createdDom()) {\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return\n\n cancelAnimationFrame(animationFrameId.current)\n\n const { width } = entry.contentRect\n\n breakpointRef.current = getBreakpoint(width)\n\n animationFrameId.current = requestAnimationFrame(listener)\n })\n\n if (containerRef.current) observer.observe(containerRef.current)\n\n return () => {\n observer.disconnect()\n\n if (process.env.NODE_ENV !== \"test\")\n cancelAnimationFrame(animationFrameId.current)\n }\n } else {\n return noop\n }\n },\n [containerRef, getBreakpoint, getWindow, hasContainer, hasQueries, queries],\n )\n\n const getSnapshot = useCallback(() => {\n return breakpointRef.current\n }, [])\n\n const breakpoint = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n return breakpoint\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,sBAAsB;CACjC,MAAM,mBAAmB,OAAO,CAAC;CACjC,MAAM,EAAE,aAAa,WAAW,UAAU;CAC1C,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,EACJ,cACA,YAAY,QACZ,aAAa,oBACX,OAAO,cAAc,CAAC;CAC1B,MAAM,eAAe,CAAC,CAAC;CAEvB,MAAM,UAAU,cAAc;EAC5B,OAAO,YAAY,QAAQ,KACxB,EAAE,YAAY,MAAM,aAAa,WAAW;GAC3C,MAAM,cACJ,eAAe,kBACX,uBACA,GAAG,WAAW;GAGpB,OAAO;IACL;IACA;IACA;IACA,OANY,aAAa,QAAQ,aAAa,EAAE,KAAK;GAOvD;EACF,CACF;CACF,GAAG,CAAC,aAAa,UAAU,CAAC;CAE5B,MAAM,aAAa,CAAC,CAAC,QAAQ;CAE7B,MAAM,gBAAgB,aACnB,UAAmB;EAClB,KAAA,GAAA,cAAA,YAAA,CAAgB,KAAK,GAAG;GACtB,MAAM,MAAM,UAAU;GAEtB,IAAI,gBAAgB,CAAC,YAAY,OAAO;GAExC,KAAK,MAAM,EAAE,YAAY,WAAW,SAGlC,KAFY,KAAK,WAAW,KAAK,CAAC,GAEzB,SAAS,OAAO;EAE7B,OACE,KAAK,MAAM,EAAE,YAAY,MAAM,UAAU,SACvC,IAAI,cAAc;QACX,QAAQ,MAAM,OAAO,OAAO;EAAA,OAEjC,IAAI,UAAU,QAAQ,WAAW,OAAO;EAI9C,OAAO;CACT,GACA;EAAC;EAAW;EAAW;EAAc;EAAY;CAAO,CAC1D;CAEA,MAAM,gBAAgB,OAAmB,cAAc,CAAC;CAExD,MAAM,YAAY,aACf,aAAyB;EACxB,IAAI,CAAC,gBAAgB,CAAC,YAAY;GAChC,MAAM,WAAW,QAAQ,KAAK,EAAE,YAAY,YAA0B;IACpE,MAAM,MAAM,UAAU,CAAC,EAAE,WAAW,KAAK;IAEzC,MAAM,YAAY,MAA2B;KAC3C,IAAI,EAAE,SAAS,cAAc,UAAU;KAEvC,SAAS;IACX;IAEA,KAAK,iBAAiB,UAAU,QAAQ;IAExC,aAAa;KACX,KAAK,oBAAoB,UAAU,QAAQ;IAC7C;GACF,CAAC;GAED,aAAa;IACX,SAAS,SAAS,cAAc,UAAU,CAAC;GAC7C;EACF,OAAO,KAAA,GAAA,cAAA,WAAA,CAAe,GAAG;GACvB,MAAM,WAAW,IAAI,gBAAgB,CAAC,WAAW;IAC/C,IAAI,CAAC,OAAO;IAEZ,qBAAqB,iBAAiB,OAAO;IAE7C,MAAM,EAAE,UAAU,MAAM;IAExB,cAAc,UAAU,cAAc,KAAK;IAE3C,iBAAiB,UAAU,sBAAsB,QAAQ;GAC3D,CAAC;GAED,IAAI,aAAa,SAAS,SAAS,QAAQ,aAAa,OAAO;GAE/D,aAAa;IACX,SAAS,WAAW;IAGlB,qBAAqB,iBAAiB,OAAO;GACjD;EACF,OACE,OAAOA,cAAAA;CAEX,GACA;EAAC;EAAc;EAAe;EAAW;EAAc;EAAY;CAAO,CAC5E;CAEA,MAAM,cAAc,kBAAkB;EACpC,OAAO,cAAc;CACvB,GAAG,CAAC,CAAC;CAIL,OAFmB,qBAAqB,WAAW,aAAa,WAEhD;AAClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isValidElement"],"sources":["../../../../src/hooks/use-clickable/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLAttributes, KeyboardEvent, MouseEvent, Ref } from \"react\"\nimport type { StyledProps } from \"../../core\"\nimport { useCallback, useState } from \"react\"\nimport { dataAttr, isTouchDevice, mergeRefs } from \"../../utils\"\nimport { useEventListeners } from \"../use-event-listener\"\n\ntype Props<Y extends HTMLElement = HTMLElement> = Omit<\n HTMLAttributes<Y>,\n \"ref\" | \"size\" | keyof StyledProps\n>\n\nexport type UseClickableProps<\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n> = M & {\n /**\n * Whether or not trigger click on pressing `Enter`.\n *\n * @default true\n */\n clickOnEnter?: boolean\n /**\n * Whether or not trigger click on pressing `Space`.\n *\n * @default true\n */\n clickOnSpace?: boolean\n /**\n * If `true`, the element will be disabled. It will set the `disabled` HTML attribute.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Disable the touch device behavior.\n *\n * @default true\n */\n disableTouchBehavior?: boolean\n /**\n * If `true` and isDisabled, the element will have only `aria-disabled` set to `true`.\n *\n * @default false\n */\n focusable?: boolean\n /**\n * Whether or not to focus the element when it is clicked.\n * If `true`, the element will receive focus upon click.\n *\n * @default true\n */\n focusOnClick?: boolean\n /**\n * The ref for the element.\n */\n ref?: Ref<Y>\n}\n\nconst isValidElement = (\n ev: KeyboardEvent | KeyboardEvent[\"nativeEvent\"],\n): boolean => {\n const { isContentEditable, tagName } = ev.target as HTMLElement\n\n return tagName !== \"INPUT\" && tagName !== \"TEXTAREA\" && !isContentEditable\n}\n\nexport const useClickable = <\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n>(\n {\n ref,\n clickOnEnter = true,\n clickOnSpace = true,\n disabled,\n disableTouchBehavior = true,\n focusable,\n focusOnClick = true,\n tabIndex: tabIndexProp,\n onClick: onClickProp,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n ...props\n }: UseClickableProps<Y, M> = {} as UseClickableProps<Y, M>,\n) => {\n const [button, setButton] = useState<boolean>(true)\n const [pressed, setPressed] = useState<boolean>(false)\n\n const listeners = useEventListeners()\n\n const tabIndex = button ? tabIndexProp : tabIndexProp || 0\n const trulyDisabled = disabled && !focusable\n\n const refCb = (node: any) => {\n if (!node) return\n\n if (node.tagName !== \"BUTTON\") setButton(false)\n }\n\n const onClick = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (focusOnClick) ev.currentTarget.focus()\n onClickProp?.(ev)\n },\n [disabled, focusOnClick, onClickProp],\n )\n\n const onDocumentKeyUp = useCallback(\n (ev: globalThis.KeyboardEvent) => {\n if (pressed && isValidElement(ev)) {\n ev.preventDefault()\n ev.stopPropagation()\n\n setPressed(false)\n\n listeners.remove(document, \"keyup\", onDocumentKeyUp, false)\n }\n },\n [pressed, listeners],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyDownProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(true)\n }\n\n if (clickOnEnter && ev.key === \"Enter\") {\n ev.preventDefault()\n ev.currentTarget.click()\n }\n\n listeners.add(document, \"keyup\", onDocumentKeyUp, false)\n },\n [\n disabled,\n button,\n onKeyDownProp,\n clickOnEnter,\n clickOnSpace,\n listeners,\n onDocumentKeyUp,\n ],\n )\n\n const onKeyUp = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyUpProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(false)\n\n ev.currentTarget.click()\n }\n },\n [clickOnSpace, button, disabled, onKeyUpProp],\n )\n\n const onDocumentMouseUp = useCallback(\n (ev: globalThis.MouseEvent) => {\n if (ev.button !== 0) return\n\n setPressed(false)\n\n listeners.remove(document, \"mouseup\", onDocumentMouseUp, false)\n },\n [listeners],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (!button) setPressed(true)\n\n if (focusOnClick) ev.currentTarget.focus({ preventScroll: true })\n\n listeners.add(document, \"mouseup\", onDocumentMouseUp, false)\n\n onMouseDownProp?.(ev)\n },\n [\n disabled,\n button,\n onMouseDownProp,\n listeners,\n onDocumentMouseUp,\n focusOnClick,\n ],\n )\n\n const onMouseUp = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (!button) setPressed(false)\n\n onMouseUpProp?.(ev)\n },\n [onMouseUpProp, button],\n )\n\n const onMouseOver = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.preventDefault()\n\n return\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseOverProp?.(ev)\n },\n [disabled, onMouseOverProp, disableTouchBehavior],\n )\n\n const onMouseLeave = useCallback(\n (ev: MouseEvent<Y>) => {\n if (pressed) {\n ev.preventDefault()\n\n setPressed(false)\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseLeaveProp?.(ev)\n },\n [pressed, onMouseLeaveProp, disableTouchBehavior],\n )\n\n if (button) {\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n type: \"button\" as const,\n \"aria-disabled\": trulyDisabled ? undefined : disabled,\n disabled: trulyDisabled,\n onClick: onClick,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n }\n } else {\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n \"aria-disabled\": disabled ? (\"true\" as const) : undefined,\n \"data-active\": dataAttr(pressed),\n role: \"button\",\n tabIndex: trulyDisabled ? undefined : tabIndex,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseOver,\n onMouseUp,\n }\n }\n}\n\nexport type UseClickableReturn = ReturnType<typeof useClickable>\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["isValidElement"],"sources":["../../../../src/hooks/use-clickable/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLAttributes, KeyboardEvent, MouseEvent, Ref } from \"react\"\nimport type { StyledProps } from \"../../core\"\nimport { useCallback, useState } from \"react\"\nimport { dataAttr, isTouchDevice, mergeRefs } from \"../../utils\"\nimport { useEventListeners } from \"../use-event-listener\"\n\ntype Props<Y extends HTMLElement = HTMLElement> = Omit<\n HTMLAttributes<Y>,\n \"ref\" | \"size\" | keyof StyledProps\n>\n\nexport type UseClickableProps<\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n> = M & {\n /**\n * Whether or not trigger click on pressing `Enter`.\n *\n * @default true\n */\n clickOnEnter?: boolean\n /**\n * Whether or not trigger click on pressing `Space`.\n *\n * @default true\n */\n clickOnSpace?: boolean\n /**\n * If `true`, the element will be disabled. It will set the `disabled` HTML attribute.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Disable the touch device behavior.\n *\n * @default true\n */\n disableTouchBehavior?: boolean\n /**\n * If `true` and isDisabled, the element will have only `aria-disabled` set to `true`.\n *\n * @default false\n */\n focusable?: boolean\n /**\n * Whether or not to focus the element when it is clicked.\n * If `true`, the element will receive focus upon click.\n *\n * @default true\n */\n focusOnClick?: boolean\n /**\n * The ref for the element.\n */\n ref?: Ref<Y>\n}\n\nconst isValidElement = (\n ev: KeyboardEvent | KeyboardEvent[\"nativeEvent\"],\n): boolean => {\n const { isContentEditable, tagName } = ev.target as HTMLElement\n\n return tagName !== \"INPUT\" && tagName !== \"TEXTAREA\" && !isContentEditable\n}\n\nexport const useClickable = <\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n>(\n {\n ref,\n clickOnEnter = true,\n clickOnSpace = true,\n disabled,\n disableTouchBehavior = true,\n focusable,\n focusOnClick = true,\n tabIndex: tabIndexProp,\n onClick: onClickProp,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n ...props\n }: UseClickableProps<Y, M> = {} as UseClickableProps<Y, M>,\n) => {\n const [button, setButton] = useState<boolean>(true)\n const [pressed, setPressed] = useState<boolean>(false)\n\n const listeners = useEventListeners()\n\n const tabIndex = button ? tabIndexProp : tabIndexProp || 0\n const trulyDisabled = disabled && !focusable\n\n const refCb = (node: any) => {\n if (!node) return\n\n if (node.tagName !== \"BUTTON\") setButton(false)\n }\n\n const onClick = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (focusOnClick) ev.currentTarget.focus()\n onClickProp?.(ev)\n },\n [disabled, focusOnClick, onClickProp],\n )\n\n const onDocumentKeyUp = useCallback(\n (ev: globalThis.KeyboardEvent) => {\n if (pressed && isValidElement(ev)) {\n ev.preventDefault()\n ev.stopPropagation()\n\n setPressed(false)\n\n listeners.remove(document, \"keyup\", onDocumentKeyUp, false)\n }\n },\n [pressed, listeners],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyDownProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(true)\n }\n\n if (clickOnEnter && ev.key === \"Enter\") {\n ev.preventDefault()\n ev.currentTarget.click()\n }\n\n listeners.add(document, \"keyup\", onDocumentKeyUp, false)\n },\n [\n disabled,\n button,\n onKeyDownProp,\n clickOnEnter,\n clickOnSpace,\n listeners,\n onDocumentKeyUp,\n ],\n )\n\n const onKeyUp = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyUpProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(false)\n\n ev.currentTarget.click()\n }\n },\n [clickOnSpace, button, disabled, onKeyUpProp],\n )\n\n const onDocumentMouseUp = useCallback(\n (ev: globalThis.MouseEvent) => {\n if (ev.button !== 0) return\n\n setPressed(false)\n\n listeners.remove(document, \"mouseup\", onDocumentMouseUp, false)\n },\n [listeners],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (!button) setPressed(true)\n\n if (focusOnClick) ev.currentTarget.focus({ preventScroll: true })\n\n listeners.add(document, \"mouseup\", onDocumentMouseUp, false)\n\n onMouseDownProp?.(ev)\n },\n [\n disabled,\n button,\n onMouseDownProp,\n listeners,\n onDocumentMouseUp,\n focusOnClick,\n ],\n )\n\n const onMouseUp = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (!button) setPressed(false)\n\n onMouseUpProp?.(ev)\n },\n [onMouseUpProp, button],\n )\n\n const onMouseOver = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.preventDefault()\n\n return\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseOverProp?.(ev)\n },\n [disabled, onMouseOverProp, disableTouchBehavior],\n )\n\n const onMouseLeave = useCallback(\n (ev: MouseEvent<Y>) => {\n if (pressed) {\n ev.preventDefault()\n\n setPressed(false)\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseLeaveProp?.(ev)\n },\n [pressed, onMouseLeaveProp, disableTouchBehavior],\n )\n\n if (button)\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n type: \"button\" as const,\n \"aria-disabled\": trulyDisabled ? undefined : disabled,\n disabled: trulyDisabled,\n onClick: onClick,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n }\n else\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n \"aria-disabled\": disabled ? (\"true\" as const) : undefined,\n \"data-active\": dataAttr(pressed),\n role: \"button\",\n tabIndex: trulyDisabled ? undefined : tabIndex,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseOver,\n onMouseUp,\n }\n}\n\nexport type UseClickableReturn = ReturnType<typeof useClickable>\n"],"mappings":";;;;;;AA4DA,MAAMA,oBACJ,OACY;CACZ,MAAM,EAAE,mBAAmB,YAAY,GAAG;CAE1C,OAAO,YAAY,WAAW,YAAY,cAAc,CAAC;AAC3D;AAEA,MAAa,gBAIX,EACE,KACA,eAAe,MACf,eAAe,MACf,UACA,uBAAuB,MACvB,WACA,eAAe,MACf,UAAU,cACV,SAAS,aACT,WAAW,eACX,SAAS,aACT,aAAa,iBACb,cAAc,kBACd,aAAa,iBACb,WAAW,eACX,GAAG,UACwB,CAAC,MAC3B;CACH,MAAM,CAAC,QAAQ,aAAa,SAAkB,IAAI;CAClD,MAAM,CAAC,SAAS,cAAc,SAAkB,KAAK;CAErD,MAAM,YAAY,kBAAkB;CAEpC,MAAM,WAAW,SAAS,eAAe,gBAAgB;CACzD,MAAM,gBAAgB,YAAY,CAAC;CAEnC,MAAM,SAAS,SAAc;EAC3B,IAAI,CAAC,MAAM;EAEX,IAAI,KAAK,YAAY,UAAU,UAAU,KAAK;CAChD;CAEA,MAAM,UAAU,aACb,OAAsB;EACrB,IAAI,UAAU;GACZ,GAAG,gBAAgB;GACnB,GAAG,eAAe;GAElB;EACF;EAEA,IAAI,cAAc,GAAG,cAAc,MAAM;EACzC,cAAc,EAAE;CAClB,GACA;EAAC;EAAU;EAAc;CAAW,CACtC;CAEA,MAAM,kBAAkB,aACrB,OAAiC;EAChC,IAAI,WAAWA,iBAAe,EAAE,GAAG;GACjC,GAAG,eAAe;GAClB,GAAG,gBAAgB;GAEnB,WAAW,KAAK;GAEhB,UAAU,OAAO,UAAU,SAAS,iBAAiB,KAAK;EAC5D;CACF,GACA,CAAC,SAAS,SAAS,CACrB;CAEA,MAAM,YAAY,aACf,OAAyB;EACxB,gBAAgB,EAAE;EAElB,IAAI,YAAY,GAAG,oBAAoB,GAAG,SAAS;EAEnD,IAAI,CAACA,iBAAe,GAAG,WAAW,KAAK,QAAQ;EAE/C,IAAI,gBAAgB,GAAG,QAAQ,KAAK;GAClC,GAAG,eAAe;GAClB,WAAW,IAAI;EACjB;EAEA,IAAI,gBAAgB,GAAG,QAAQ,SAAS;GACtC,GAAG,eAAe;GAClB,GAAG,cAAc,MAAM;EACzB;EAEA,UAAU,IAAI,UAAU,SAAS,iBAAiB,KAAK;CACzD,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,MAAM,UAAU,aACb,OAAyB;EACxB,cAAc,EAAE;EAEhB,IAAI,YAAY,GAAG,oBAAoB,GAAG,SAAS;EAEnD,IAAI,CAACA,iBAAe,GAAG,WAAW,KAAK,QAAQ;EAE/C,IAAI,gBAAgB,GAAG,QAAQ,KAAK;GAClC,GAAG,eAAe;GAClB,WAAW,KAAK;GAEhB,GAAG,cAAc,MAAM;EACzB;CACF,GACA;EAAC;EAAc;EAAQ;EAAU;CAAW,CAC9C;CAEA,MAAM,oBAAoB,aACvB,OAA8B;EAC7B,IAAI,GAAG,WAAW,GAAG;EAErB,WAAW,KAAK;EAEhB,UAAU,OAAO,UAAU,WAAW,mBAAmB,KAAK;CAChE,GACA,CAAC,SAAS,CACZ;CAEA,MAAM,cAAc,aACjB,OAAsB;EACrB,IAAI,GAAG,WAAW,GAAG;EAErB,IAAI,UAAU;GACZ,GAAG,gBAAgB;GACnB,GAAG,eAAe;GAElB;EACF;EAEA,IAAI,CAAC,QAAQ,WAAW,IAAI;EAE5B,IAAI,cAAc,GAAG,cAAc,MAAM,EAAE,eAAe,KAAK,CAAC;EAEhE,UAAU,IAAI,UAAU,WAAW,mBAAmB,KAAK;EAE3D,kBAAkB,EAAE;CACtB,GACA;EACE;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,MAAM,YAAY,aACf,OAAsB;EACrB,IAAI,GAAG,WAAW,GAAG;EAErB,IAAI,CAAC,QAAQ,WAAW,KAAK;EAE7B,gBAAgB,EAAE;CACpB,GACA,CAAC,eAAe,MAAM,CACxB;CAEA,MAAM,cAAc,aACjB,OAAsB;EACrB,IAAI,UAAU;GACZ,GAAG,eAAe;GAElB;EACF;EAEA,IAAI,yBAAA,GAAA,cAAA,cAAA,CAAsC,GAAG;EAE7C,kBAAkB,EAAE;CACtB,GACA;EAAC;EAAU;EAAiB;CAAoB,CAClD;CAEA,MAAM,eAAe,aAClB,OAAsB;EACrB,IAAI,SAAS;GACX,GAAG,eAAe;GAElB,WAAW,KAAK;EAClB;EAEA,IAAI,yBAAA,GAAA,cAAA,cAAA,CAAsC,GAAG;EAE7C,mBAAmB,EAAE;CACvB,GACA;EAAC;EAAS;EAAkB;CAAoB,CAClD;CAEA,IAAI,QACF,OAAO;EACL,GAAG;EACH,KAAK,UAAU,KAAK,KAAK;EACzB,MAAM;EACN,iBAAiB,gBAAgB,KAAA,IAAY;EAC7C,UAAU;EACD;EACT,WAAW;EACX,SAAS;EACT,aAAa;EACb,cAAc;EACd,aAAa;EACb,WAAW;CACb;MAEA,OAAO;EACL,GAAG;EACH,KAAK,UAAU,KAAK,KAAK;EACzB,iBAAiB,WAAY,SAAmB,KAAA;EAChD,gBAAA,GAAA,cAAA,SAAA,CAAwB,OAAO;EAC/B,MAAM;EACN,UAAU,gBAAgB,KAAA,IAAY;EACtC;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-clipboard/index.ts"],"sourcesContent":["\"use client\"\n\nimport copy from \"copy-to-clipboard\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { isNumber, isString } from \"../../utils\"\n\nexport interface UseClipboardOptions {\n format?: string\n timeout?: number\n}\n\n/**\n * `useClipboard` is a custom hook that performs the operation of copying a value to the clipboard.\n *\n * @see https://yamada-ui.com/docs/hooks/use-clipboard\n */\nexport const useClipboard = (\n defaultValue = \"\",\n timeoutOrOptions: number | UseClipboardOptions = {},\n) => {\n const [copied, setCopied] = useState(false)\n\n const [value, setValue] = useState(defaultValue)\n\n useEffect(() => setValue(defaultValue), [defaultValue])\n\n const { timeout = 1500, ...copyOptions } = isNumber(timeoutOrOptions)\n ? { timeout: timeoutOrOptions }\n : timeoutOrOptions\n\n const onCopy = useCallback(\n (newValue?: any) => {\n if (!isString(newValue)) {\n newValue = value\n } else {\n setValue(newValue)\n }\n\n const copied = copy(newValue, copyOptions)\n\n setCopied(copied)\n },\n [value, copyOptions],\n )\n\n useEffect(() => {\n let timeoutId: NodeJS.Timeout | null = null\n\n if (copied)\n timeoutId = setTimeout(() => {\n setCopied(false)\n }, timeout)\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId)\n }\n }, [timeout, copied])\n\n return {\n copied,\n setValue,\n value,\n onCopy,\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,gBACX,eAAe,IACf,mBAAiD,CAAC,MAC/C;CACH,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,MAAM,CAAC,OAAO,YAAY,SAAS,YAAY;CAE/C,gBAAgB,SAAS,YAAY,GAAG,CAAC,YAAY,CAAC;CAEtD,MAAM,EAAE,UAAU,MAAM,GAAG,iBAAA,GAAA,cAAA,SAAA,CAAyB,gBAAgB,IAChE,EAAE,SAAS,iBAAiB,IAC5B;CAEJ,MAAM,SAAS,aACZ,aAAmB;EAClB,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,QAAQ,GACpB,WAAW;OAEX,SAAS,QAAQ;EAKnB,UAFe,KAAK,UAAU,WAEf,CAAC;CAClB,GACA,CAAC,OAAO,WAAW,CACrB;CAEA,gBAAgB;EACd,IAAI,YAAmC;EAEvC,IAAI,QACF,YAAY,iBAAiB;GAC3B,UAAU,KAAK;EACjB,GAAG,OAAO;EAEZ,aAAa;GACX,IAAI,WAAW,aAAa,SAAS;EACvC;CACF,GAAG,CAAC,SAAS,MAAM,CAAC;CAEpB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-clipboard/index.ts"],"sourcesContent":["\"use client\"\n\nimport copy from \"copy-to-clipboard\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { isNumber, isString } from \"../../utils\"\n\nexport interface UseClipboardOptions {\n format?: string\n timeout?: number\n}\n\n/**\n * `useClipboard` is a custom hook that performs the operation of copying a value to the clipboard.\n *\n * @see https://yamada-ui.com/docs/hooks/use-clipboard\n */\nexport const useClipboard = (\n defaultValue = \"\",\n timeoutOrOptions: number | UseClipboardOptions = {},\n) => {\n const [copied, setCopied] = useState(false)\n\n const [value, setValue] = useState(defaultValue)\n\n useEffect(() => setValue(defaultValue), [defaultValue])\n\n const { timeout = 1500, ...copyOptions } = isNumber(timeoutOrOptions)\n ? { timeout: timeoutOrOptions }\n : timeoutOrOptions\n\n const onCopy = useCallback(\n (newValue?: any) => {\n if (!isString(newValue)) newValue = value\n else setValue(newValue)\n\n const copied = copy(newValue, copyOptions)\n\n setCopied(copied)\n },\n [value, copyOptions],\n )\n\n useEffect(() => {\n let timeoutId: NodeJS.Timeout | null = null\n\n if (copied)\n timeoutId = setTimeout(() => {\n setCopied(false)\n }, timeout)\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId)\n }\n }, [timeout, copied])\n\n return {\n copied,\n setValue,\n value,\n onCopy,\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,gBACX,eAAe,IACf,mBAAiD,CAAC,MAC/C;CACH,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,MAAM,CAAC,OAAO,YAAY,SAAS,YAAY;CAE/C,gBAAgB,SAAS,YAAY,GAAG,CAAC,YAAY,CAAC;CAEtD,MAAM,EAAE,UAAU,MAAM,GAAG,iBAAA,GAAA,cAAA,SAAA,CAAyB,gBAAgB,IAChE,EAAE,SAAS,iBAAiB,IAC5B;CAEJ,MAAM,SAAS,aACZ,aAAmB;EAClB,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,QAAQ,GAAG,WAAW;OAC/B,SAAS,QAAQ;EAItB,UAFe,KAAK,UAAU,WAEf,CAAC;CAClB,GACA,CAAC,OAAO,WAAW,CACrB;CAEA,gBAAgB;EACd,IAAI,YAAmC;EAEvC,IAAI,QACF,YAAY,iBAAiB;GAC3B,UAAU,KAAK;EACjB,GAAG,OAAO;EAEZ,aAAa;GACX,IAAI,WAAW,aAAa,SAAS;EACvC;CACF,GAAG,CAAC,SAAS,MAAM,CAAC;CAEpB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-controllable-state/index.ts"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n Dispatch,\n SetStateAction,\n} from \"react\"\nimport { useState } from \"react\"\nimport {\n isBoolean,\n isNull,\n isUndefined,\n runIfFn,\n useCallbackRef,\n} from \"../../utils\"\n\ninterface UseControllableStateMethods<Y> {\n onChange?: (value: Y) => void\n onUpdate?: (prev: Y, next: Y) => boolean\n}\n\nexport interface UseControllableStateProps<\n Y,\n> extends UseControllableStateMethods<Y> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateProps<Y>,\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n onUpdate: onUpdateProp = (prev, next) => prev !== next,\n}: UseControllableStateProps<Y>) {\n const onChange = useCallbackRef(onChangeProp)\n const onUpdate = useCallbackRef(onUpdateProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n\n const setValue = useCallbackRef(\n (next: SetStateAction<Y>) => {\n const nextValue = runIfFn(next, currentValue)\n\n if (!onUpdate(currentValue, nextValue)) return\n\n if (!controlled || isUndefined(nextValue) || isNull(nextValue))\n setDefaultValue(nextValue)\n\n onChange(nextValue)\n },\n [controlled, currentValue, onChange, onUpdate],\n )\n\n return [currentValue, setValue]\n}\n\nfunction isHTMLInputElement(el: HTMLElement): el is HTMLInputElement {\n return el instanceof HTMLInputElement\n}\n\ninterface UseControllableEventStateMethods<\n Y extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> {\n onChange?: ChangeEventHandler<Y>\n}\n\nexport interface UseControllableEventStateProps<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> extends UseControllableEventStateMethods<M> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(props: UseControllableEventStateProps<Y, M>): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n}: UseControllableEventStateProps<Y, M>) {\n const onChange = useCallbackRef(onChangeProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n const boolean = isBoolean(currentValue)\n\n const setValue = useCallbackRef(\n (ev: ChangeEvent<M>) => {\n const value =\n boolean && isHTMLInputElement(ev.target)\n ? (ev.target.checked as Y)\n : (ev.target.value as Y)\n\n if (!controlled || isUndefined(value) || isNull(value)) {\n setDefaultValue(value)\n }\n\n onChange(ev)\n },\n [controlled, currentValue, onChange],\n )\n\n return [currentValue, setValue]\n}\n"],"mappings":";;;;;AA+CA,SAAgB,qBAAwB,EACtC,cAAc,kBACd,OACA,UAAU,cACV,UAAU,gBAAgB,MAAM,SAAS,SAAS,QACnB;CAC/B,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAS,gBAAgB;CACjE,MAAM,aAAa,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK;CACrC,MAAM,eAAgB,aAAa,QAAQ;CAgB3C,OAAO,CAAC,cAdS,gBACd,SAA4B;EAC3B,MAAM,aAAA,GAAA,cAAA,QAAA,CAAoB,MAAM,YAAY;EAE5C,IAAI,CAAC,SAAS,cAAc,SAAS,GAAG;EAExC,IAAI,CAAC,eAAA,GAAA,cAAA,YAAA,CAA0B,SAAS,MAAA,GAAA,cAAA,OAAA,CAAY,SAAS,GAC3D,gBAAgB,SAAS;EAE3B,SAAS,SAAS;CACpB,GACA;EAAC;EAAY;EAAc;EAAU;CAAQ,CAGlB,CAAC;AAChC;AAEA,SAAS,mBAAmB,IAAyC;CACnE,OAAO,cAAc;AACvB;AAyCA,SAAgB,0BAGd,EACA,cAAc,kBACd,OACA,UAAU,gBAC6B;CACvC,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAS,gBAAgB;CACjE,MAAM,aAAa,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK;CACrC,MAAM,eAAgB,aAAa,QAAQ;CAC3C,MAAM,WAAA,GAAA,cAAA,UAAA,CAAoB,YAAY;CAkBtC,OAAO,CAAC,cAhBS,gBACd,OAAuB;EACtB,MAAM,QACJ,WAAW,mBAAmB,GAAG,MAAM,IAClC,GAAG,OAAO,UACV,GAAG,OAAO;EAEjB,IAAI,CAAC,eAAA,GAAA,cAAA,YAAA,CAA0B,KAAK,MAAA,GAAA,cAAA,OAAA,CAAY,KAAK,GACnD,gBAAgB,KAAK;EAGvB,SAAS,EAAE;CACb,GACA;EAAC;EAAY;EAAc;CAAQ,CAGR,CAAC;AAChC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-controllable-state/index.ts"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n Dispatch,\n SetStateAction,\n} from \"react\"\nimport { useState } from \"react\"\nimport {\n isBoolean,\n isNull,\n isUndefined,\n runIfFn,\n useCallbackRef,\n} from \"../../utils\"\n\ninterface UseControllableStateMethods<Y> {\n onChange?: (value: Y) => void\n onUpdate?: (prev: Y, next: Y) => boolean\n}\n\nexport interface UseControllableStateProps<\n Y,\n> extends UseControllableStateMethods<Y> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateProps<Y>,\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n onUpdate: onUpdateProp = (prev, next) => prev !== next,\n}: UseControllableStateProps<Y>) {\n const onChange = useCallbackRef(onChangeProp)\n const onUpdate = useCallbackRef(onUpdateProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n\n const setValue = useCallbackRef(\n (next: SetStateAction<Y>) => {\n const nextValue = runIfFn(next, currentValue)\n\n if (!onUpdate(currentValue, nextValue)) return\n\n if (!controlled || isUndefined(nextValue) || isNull(nextValue))\n setDefaultValue(nextValue)\n\n onChange(nextValue)\n },\n [controlled, currentValue, onChange, onUpdate],\n )\n\n return [currentValue, setValue]\n}\n\nfunction isHTMLInputElement(el: HTMLElement): el is HTMLInputElement {\n return el instanceof HTMLInputElement\n}\n\ninterface UseControllableEventStateMethods<\n Y extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> {\n onChange?: ChangeEventHandler<Y>\n}\n\nexport interface UseControllableEventStateProps<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> extends UseControllableEventStateMethods<M> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(props: UseControllableEventStateProps<Y, M>): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n}: UseControllableEventStateProps<Y, M>) {\n const onChange = useCallbackRef(onChangeProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n const boolean = isBoolean(currentValue)\n\n const setValue = useCallbackRef(\n (ev: ChangeEvent<M>) => {\n const value =\n boolean && isHTMLInputElement(ev.target)\n ? (ev.target.checked as Y)\n : (ev.target.value as Y)\n\n if (!controlled || isUndefined(value) || isNull(value))\n setDefaultValue(value)\n\n onChange(ev)\n },\n [controlled, currentValue, onChange],\n )\n\n return [currentValue, setValue]\n}\n"],"mappings":";;;;;AA+CA,SAAgB,qBAAwB,EACtC,cAAc,kBACd,OACA,UAAU,cACV,UAAU,gBAAgB,MAAM,SAAS,SAAS,QACnB;CAC/B,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAS,gBAAgB;CACjE,MAAM,aAAa,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK;CACrC,MAAM,eAAgB,aAAa,QAAQ;CAgB3C,OAAO,CAAC,cAdS,gBACd,SAA4B;EAC3B,MAAM,aAAA,GAAA,cAAA,QAAA,CAAoB,MAAM,YAAY;EAE5C,IAAI,CAAC,SAAS,cAAc,SAAS,GAAG;EAExC,IAAI,CAAC,eAAA,GAAA,cAAA,YAAA,CAA0B,SAAS,MAAA,GAAA,cAAA,OAAA,CAAY,SAAS,GAC3D,gBAAgB,SAAS;EAE3B,SAAS,SAAS;CACpB,GACA;EAAC;EAAY;EAAc;EAAU;CAAQ,CAGlB,CAAC;AAChC;AAEA,SAAS,mBAAmB,IAAyC;CACnE,OAAO,cAAc;AACvB;AAyCA,SAAgB,0BAGd,EACA,cAAc,kBACd,OACA,UAAU,gBAC6B;CACvC,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAS,gBAAgB;CACjE,MAAM,aAAa,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK;CACrC,MAAM,eAAgB,aAAa,QAAQ;CAC3C,MAAM,WAAA,GAAA,cAAA,UAAA,CAAoB,YAAY;CAiBtC,OAAO,CAAC,cAfS,gBACd,OAAuB;EACtB,MAAM,QACJ,WAAW,mBAAmB,GAAG,MAAM,IAClC,GAAG,OAAO,UACV,GAAG,OAAO;EAEjB,IAAI,CAAC,eAAA,GAAA,cAAA,YAAA,CAA0B,KAAK,MAAA,GAAA,cAAA,OAAA,CAAY,KAAK,GACnD,gBAAgB,KAAK;EAEvB,SAAS,EAAE;CACb,GACA;EAAC;EAAY;EAAc;CAAQ,CAGR,CAAC;AAChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-counter/index.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useState } from \"react\"\nimport {\n clampNumber,\n countDecimal,\n toPrecision,\n useCallbackRef,\n} from \"../../utils\"\n\nconst parse = (value: number | string): number =>\n parseFloat(value.toString().replace(/[^\\w.-]+/g, \"\"))\n\nconst getCountDecimal = (value: number, step: number): number =>\n Math.max(countDecimal(step), countDecimal(value))\n\nconst casting = (\n value: number | string,\n step: number,\n precision?: number,\n): string | undefined => {\n value = parse(value)\n\n return !Number.isNaN(value)\n ? toPrecision(value, precision ?? getCountDecimal(value, step))\n : undefined\n}\n\nexport interface UseCounterProps {\n /**\n * The initial value of the counter.\n * Should be less than `max` and greater than `min`.\n */\n defaultValue?: number | string\n /**\n * This controls the value update behavior in general.\n *\n * - If `true` and you use the stepper or up/down arrow keys,\n * the value will not exceed the `max` or go lower than `min`.\n *\n * - If `false`, the value will be allowed to go out of range.\n *\n * @default true\n */\n keepWithinRange?: boolean\n /**\n * The maximum value of the counter\n *\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number\n /**\n * The minimum value of the counter\n *\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number\n /**\n * The number of decimal points used to round the value.\n */\n precision?: number\n /**\n * The step used to increment or decrement the value.\n *\n * @default 1\n */\n step?: number\n /**\n * The value of the counter.\n * Should be less than `max` and greater than `min`.\n */\n value?: number | string\n /**\n * The callback fired when the value changes.\n */\n onChange?: (valueAsString: string, valueAsNumber: number) => void\n}\n\n/**\n * `useCounter` is a custom hook that returns the current counter value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-counter\n */\nexport const useCounter = ({\n keepWithinRange = true,\n max: maxValue = Number.MAX_SAFE_INTEGER,\n min: minValue = Number.MIN_SAFE_INTEGER,\n step: stepProp = 1,\n ...props\n}: UseCounterProps = {}) => {\n const onChange = useCallbackRef(props.onChange)\n\n const [defaultValue, setValue] = useState<number | string>(() => {\n if (props.defaultValue == null) return \"\"\n\n return casting(props.defaultValue, stepProp, props.precision) ?? \"\"\n })\n\n const isControlled = typeof props.value !== \"undefined\"\n const value = isControlled ? (props.value as number | string) : defaultValue\n\n const countDecimal = getCountDecimal(parse(value), stepProp)\n\n const precision = props.precision ?? countDecimal\n\n const update = useCallback(\n (next: number | string) => {\n if (next === value) return\n\n if (!isControlled) setValue(next.toString())\n\n onChange(next.toString(), parse(next))\n },\n [onChange, isControlled, value],\n )\n\n const clamp = useCallback(\n (value: number) => {\n let nextValue = value\n\n if (keepWithinRange)\n nextValue = clampNumber(nextValue, minValue, maxValue)\n\n return toPrecision(nextValue, precision)\n },\n [precision, keepWithinRange, maxValue, minValue],\n )\n\n const increment = useCallback(\n (step = stepProp) => {\n let next: number | string\n\n if (value === \"\") {\n next = parse(step)\n } else {\n next = parse(value) + step\n }\n\n next = clamp(next)\n\n update(next)\n },\n [clamp, stepProp, update, value],\n )\n\n const decrement = useCallback(\n (step = stepProp) => {\n let next: number | string\n\n if (value === \"\") {\n next = parse(-step)\n } else {\n next = parse(value) - step\n }\n\n next = clamp(next)\n\n update(next)\n },\n [clamp, stepProp, update, value],\n )\n\n const reset = useCallback(() => {\n let next: number | string\n\n if (props.defaultValue == null) {\n next = \"\"\n } else {\n next = casting(props.defaultValue, stepProp, props.precision) ?? minValue\n }\n\n update(next)\n }, [props.defaultValue, props.precision, stepProp, update, minValue])\n\n const cast = useCallback(\n (value: number | string) => {\n const nextValue = casting(value, stepProp, precision) ?? minValue\n\n update(nextValue)\n },\n [precision, stepProp, update, minValue],\n )\n\n const valueAsNumber = parse(value)\n\n const out = valueAsNumber < minValue || maxValue < valueAsNumber\n const max = valueAsNumber === maxValue\n const min = valueAsNumber === minValue\n\n return {\n cast,\n clamp,\n decrement,\n increment,\n max,\n min,\n out,\n precision,\n reset,\n setValue,\n step: stepProp,\n update,\n value,\n valueAsNumber,\n }\n}\n\nexport type UseCounterReturn = ReturnType<typeof useCounter>\n"],"mappings":";;;;;AAUA,MAAM,SAAS,UACb,WAAW,MAAM,SAAS,CAAC,CAAC,QAAQ,aAAa,EAAE,CAAC;AAEtD,MAAM,mBAAmB,OAAe,SACtC,KAAK,KAAA,GAAA,cAAA,aAAA,CAAiB,IAAI,IAAA,GAAA,cAAA,aAAA,CAAgB,KAAK,CAAC;AAElD,MAAM,WACJ,OACA,MACA,cACuB;CACvB,QAAQ,MAAM,KAAK;CAEnB,OAAO,CAAC,OAAO,MAAM,KAAK,KAAA,GAAA,cAAA,YAAA,CACV,OAAO,aAAa,gBAAgB,OAAO,IAAI,CAAC,IAC5D,KAAA;AACN;;;;;;AAyDA,MAAa,cAAc,EACzB,kBAAkB,MAClB,KAAK,WAAW,OAAO,kBACvB,KAAK,WAAW,OAAO,kBACvB,MAAM,WAAW,GACjB,GAAG,UACgB,CAAC,MAAM;CAC1B,MAAM,WAAW,eAAe,MAAM,QAAQ;CAE9C,MAAM,CAAC,cAAc,YAAY,eAAgC;EAC/D,IAAI,MAAM,gBAAgB,MAAM,OAAO;EAEvC,OAAO,QAAQ,MAAM,cAAc,UAAU,MAAM,SAAS,KAAK;CACnE,CAAC;CAED,MAAM,eAAe,OAAO,MAAM,UAAU;CAC5C,MAAM,QAAQ,eAAgB,MAAM,QAA4B;CAEhE,MAAM,eAAe,gBAAgB,MAAM,KAAK,GAAG,QAAQ;CAE3D,MAAM,YAAY,MAAM,aAAa;CAErC,MAAM,SAAS,aACZ,SAA0B;EACzB,IAAI,SAAS,OAAO;EAEpB,IAAI,CAAC,cAAc,SAAS,KAAK,SAAS,CAAC;EAE3C,SAAS,KAAK,SAAS,GAAG,MAAM,IAAI,CAAC;CACvC,GACA;EAAC;EAAU;EAAc;CAAK,CAChC;CAEA,MAAM,QAAQ,aACX,UAAkB;EACjB,IAAI,YAAY;EAEhB,IAAI,iBACF,aAAA,GAAA,cAAA,YAAA,CAAwB,WAAW,UAAU,QAAQ;EAEvD,QAAA,GAAA,cAAA,YAAA,CAAmB,WAAW,SAAS;CACzC,GACA;EAAC;EAAW;EAAiB;EAAU;CAAQ,CACjD;CAEA,MAAM,YAAY,aACf,OAAO,aAAa;EACnB,IAAI;EAEJ,IAAI,UAAU,IACZ,OAAO,MAAM,IAAI;OAEjB,OAAO,MAAM,KAAK,IAAI;EAGxB,OAAO,MAAM,IAAI;EAEjB,OAAO,IAAI;CACb,GACA;EAAC;EAAO;EAAU;EAAQ;CAAK,CACjC;CAEA,MAAM,YAAY,aACf,OAAO,aAAa;EACnB,IAAI;EAEJ,IAAI,UAAU,IACZ,OAAO,MAAM,CAAC,IAAI;OAElB,OAAO,MAAM,KAAK,IAAI;EAGxB,OAAO,MAAM,IAAI;EAEjB,OAAO,IAAI;CACb,GACA;EAAC;EAAO;EAAU;EAAQ;CAAK,CACjC;CAEA,MAAM,QAAQ,kBAAkB;EAC9B,IAAI;EAEJ,IAAI,MAAM,gBAAgB,MACxB,OAAO;OAEP,OAAO,QAAQ,MAAM,cAAc,UAAU,MAAM,SAAS,KAAK;EAGnE,OAAO,IAAI;CACb,GAAG;EAAC,MAAM;EAAc,MAAM;EAAW;EAAU;EAAQ;CAAQ,CAAC;CAEpE,MAAM,OAAO,aACV,UAA2B;EAG1B,OAFkB,QAAQ,OAAO,UAAU,SAAS,KAAK,QAEzC;CAClB,GACA;EAAC;EAAW;EAAU;EAAQ;CAAQ,CACxC;CAEA,MAAM,gBAAgB,MAAM,KAAK;CAMjC,OAAO;EACL;EACA;EACA;EACA;EACA,KARU,kBAAkB;EAS5B,KARU,kBAAkB;EAS5B,KAXU,gBAAgB,YAAY,WAAW;EAYjD;EACA;EACA;EACA,MAAM;EACN;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-counter/index.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useState } from \"react\"\nimport {\n clampNumber,\n countDecimal,\n toPrecision,\n useCallbackRef,\n} from \"../../utils\"\n\nconst parse = (value: number | string): number =>\n parseFloat(value.toString().replace(/[^\\w.-]+/g, \"\"))\n\nconst getCountDecimal = (value: number, step: number): number =>\n Math.max(countDecimal(step), countDecimal(value))\n\nconst casting = (\n value: number | string,\n step: number,\n precision?: number,\n): string | undefined => {\n value = parse(value)\n\n return !Number.isNaN(value)\n ? toPrecision(value, precision ?? getCountDecimal(value, step))\n : undefined\n}\n\nexport interface UseCounterProps {\n /**\n * The initial value of the counter.\n * Should be less than `max` and greater than `min`.\n */\n defaultValue?: number | string\n /**\n * This controls the value update behavior in general.\n *\n * - If `true` and you use the stepper or up/down arrow keys,\n * the value will not exceed the `max` or go lower than `min`.\n *\n * - If `false`, the value will be allowed to go out of range.\n *\n * @default true\n */\n keepWithinRange?: boolean\n /**\n * The maximum value of the counter\n *\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number\n /**\n * The minimum value of the counter\n *\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number\n /**\n * The number of decimal points used to round the value.\n */\n precision?: number\n /**\n * The step used to increment or decrement the value.\n *\n * @default 1\n */\n step?: number\n /**\n * The value of the counter.\n * Should be less than `max` and greater than `min`.\n */\n value?: number | string\n /**\n * The callback fired when the value changes.\n */\n onChange?: (valueAsString: string, valueAsNumber: number) => void\n}\n\n/**\n * `useCounter` is a custom hook that returns the current counter value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-counter\n */\nexport const useCounter = ({\n keepWithinRange = true,\n max: maxValue = Number.MAX_SAFE_INTEGER,\n min: minValue = Number.MIN_SAFE_INTEGER,\n step: stepProp = 1,\n ...props\n}: UseCounterProps = {}) => {\n const onChange = useCallbackRef(props.onChange)\n\n const [defaultValue, setValue] = useState<number | string>(() => {\n if (props.defaultValue == null) return \"\"\n\n return casting(props.defaultValue, stepProp, props.precision) ?? \"\"\n })\n\n const isControlled = typeof props.value !== \"undefined\"\n const value = isControlled ? (props.value as number | string) : defaultValue\n\n const countDecimal = getCountDecimal(parse(value), stepProp)\n\n const precision = props.precision ?? countDecimal\n\n const update = useCallback(\n (next: number | string) => {\n if (next === value) return\n\n if (!isControlled) setValue(next.toString())\n\n onChange(next.toString(), parse(next))\n },\n [onChange, isControlled, value],\n )\n\n const clamp = useCallback(\n (value: number) => {\n let nextValue = value\n\n if (keepWithinRange)\n nextValue = clampNumber(nextValue, minValue, maxValue)\n\n return toPrecision(nextValue, precision)\n },\n [precision, keepWithinRange, maxValue, minValue],\n )\n\n const increment = useCallback(\n (step = stepProp) => {\n let next: number | string\n\n if (value === \"\") next = parse(step)\n else next = parse(value) + step\n\n next = clamp(next)\n\n update(next)\n },\n [clamp, stepProp, update, value],\n )\n\n const decrement = useCallback(\n (step = stepProp) => {\n let next: number | string\n\n if (value === \"\") next = parse(-step)\n else next = parse(value) - step\n\n next = clamp(next)\n\n update(next)\n },\n [clamp, stepProp, update, value],\n )\n\n const reset = useCallback(() => {\n let next: number | string\n\n if (props.defaultValue == null) next = \"\"\n else\n next = casting(props.defaultValue, stepProp, props.precision) ?? minValue\n\n update(next)\n }, [props.defaultValue, props.precision, stepProp, update, minValue])\n\n const cast = useCallback(\n (value: number | string) => {\n const nextValue = casting(value, stepProp, precision) ?? minValue\n\n update(nextValue)\n },\n [precision, stepProp, update, minValue],\n )\n\n const valueAsNumber = parse(value)\n\n const out = valueAsNumber < minValue || maxValue < valueAsNumber\n const max = valueAsNumber === maxValue\n const min = valueAsNumber === minValue\n\n return {\n cast,\n clamp,\n decrement,\n increment,\n max,\n min,\n out,\n precision,\n reset,\n setValue,\n step: stepProp,\n update,\n value,\n valueAsNumber,\n }\n}\n\nexport type UseCounterReturn = ReturnType<typeof useCounter>\n"],"mappings":";;;;;AAUA,MAAM,SAAS,UACb,WAAW,MAAM,SAAS,CAAC,CAAC,QAAQ,aAAa,EAAE,CAAC;AAEtD,MAAM,mBAAmB,OAAe,SACtC,KAAK,KAAA,GAAA,cAAA,aAAA,CAAiB,IAAI,IAAA,GAAA,cAAA,aAAA,CAAgB,KAAK,CAAC;AAElD,MAAM,WACJ,OACA,MACA,cACuB;CACvB,QAAQ,MAAM,KAAK;CAEnB,OAAO,CAAC,OAAO,MAAM,KAAK,KAAA,GAAA,cAAA,YAAA,CACV,OAAO,aAAa,gBAAgB,OAAO,IAAI,CAAC,IAC5D,KAAA;AACN;;;;;;AAyDA,MAAa,cAAc,EACzB,kBAAkB,MAClB,KAAK,WAAW,OAAO,kBACvB,KAAK,WAAW,OAAO,kBACvB,MAAM,WAAW,GACjB,GAAG,UACgB,CAAC,MAAM;CAC1B,MAAM,WAAW,eAAe,MAAM,QAAQ;CAE9C,MAAM,CAAC,cAAc,YAAY,eAAgC;EAC/D,IAAI,MAAM,gBAAgB,MAAM,OAAO;EAEvC,OAAO,QAAQ,MAAM,cAAc,UAAU,MAAM,SAAS,KAAK;CACnE,CAAC;CAED,MAAM,eAAe,OAAO,MAAM,UAAU;CAC5C,MAAM,QAAQ,eAAgB,MAAM,QAA4B;CAEhE,MAAM,eAAe,gBAAgB,MAAM,KAAK,GAAG,QAAQ;CAE3D,MAAM,YAAY,MAAM,aAAa;CAErC,MAAM,SAAS,aACZ,SAA0B;EACzB,IAAI,SAAS,OAAO;EAEpB,IAAI,CAAC,cAAc,SAAS,KAAK,SAAS,CAAC;EAE3C,SAAS,KAAK,SAAS,GAAG,MAAM,IAAI,CAAC;CACvC,GACA;EAAC;EAAU;EAAc;CAAK,CAChC;CAEA,MAAM,QAAQ,aACX,UAAkB;EACjB,IAAI,YAAY;EAEhB,IAAI,iBACF,aAAA,GAAA,cAAA,YAAA,CAAwB,WAAW,UAAU,QAAQ;EAEvD,QAAA,GAAA,cAAA,YAAA,CAAmB,WAAW,SAAS;CACzC,GACA;EAAC;EAAW;EAAiB;EAAU;CAAQ,CACjD;CAEA,MAAM,YAAY,aACf,OAAO,aAAa;EACnB,IAAI;EAEJ,IAAI,UAAU,IAAI,OAAO,MAAM,IAAI;OAC9B,OAAO,MAAM,KAAK,IAAI;EAE3B,OAAO,MAAM,IAAI;EAEjB,OAAO,IAAI;CACb,GACA;EAAC;EAAO;EAAU;EAAQ;CAAK,CACjC;CAEA,MAAM,YAAY,aACf,OAAO,aAAa;EACnB,IAAI;EAEJ,IAAI,UAAU,IAAI,OAAO,MAAM,CAAC,IAAI;OAC/B,OAAO,MAAM,KAAK,IAAI;EAE3B,OAAO,MAAM,IAAI;EAEjB,OAAO,IAAI;CACb,GACA;EAAC;EAAO;EAAU;EAAQ;CAAK,CACjC;CAEA,MAAM,QAAQ,kBAAkB;EAC9B,IAAI;EAEJ,IAAI,MAAM,gBAAgB,MAAM,OAAO;OAErC,OAAO,QAAQ,MAAM,cAAc,UAAU,MAAM,SAAS,KAAK;EAEnE,OAAO,IAAI;CACb,GAAG;EAAC,MAAM;EAAc,MAAM;EAAW;EAAU;EAAQ;CAAQ,CAAC;CAEpE,MAAM,OAAO,aACV,UAA2B;EAG1B,OAFkB,QAAQ,OAAO,UAAU,SAAS,KAAK,QAEzC;CAClB,GACA;EAAC;EAAW;EAAU;EAAQ;CAAQ,CACxC;CAEA,MAAM,gBAAgB,MAAM,KAAK;CAMjC,OAAO;EACL;EACA;EACA;EACA;EACA,KARU,kBAAkB;EAS5B,KARU,kBAAkB;EAS5B,KAXU,gBAAgB,YAAY,WAAW;EAYjD;EACA;EACA;EACA,MAAM;EACN;EACA;EACA;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["createContext"],"sources":["../../../../src/hooks/use-descendants/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefCallback } from \"react\"\nimport { useRef } from \"react\"\nimport {\n createContext,\n isNumber,\n isTruthyDataAttr,\n mergeRefs,\n runIfFn,\n useSafeLayoutEffect,\n} from \"../../utils\"\n\nconst sortNodes = (nodes: Node[]) =>\n nodes.sort((a, b) => {\n const compare = a.compareDocumentPosition(b)\n\n if (\n compare & Node.DOCUMENT_POSITION_FOLLOWING ||\n compare & Node.DOCUMENT_POSITION_CONTAINED_BY\n )\n return -1\n\n if (\n compare & Node.DOCUMENT_POSITION_PRECEDING ||\n compare & Node.DOCUMENT_POSITION_CONTAINS\n )\n return 1\n\n if (\n compare & Node.DOCUMENT_POSITION_DISCONNECTED ||\n compare & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n ) {\n console.warn(\"Cannot sort the given nodes.\")\n return 0\n } else {\n return 0\n }\n })\n\nconst getNextIndex = (current: number, max: number, loop: boolean) => {\n let next = current + 1\n\n if (loop && next >= max) next = 0\n\n return next\n}\n\nconst getPrevIndex = (current: number, max: number, loop: boolean) => {\n let next = current - 1\n\n if (loop && next < 0) next = max\n\n return next\n}\n\nconst isMatch =\n <Y extends HTMLElement = HTMLElement, M = {}>(props?: Partial<M>) =>\n (descendant: Descendant<Y, M>) =>\n Object.entries(props ?? {}).every(\n ([key, value]) => descendant[key as keyof Descendant<Y, M>] === value,\n )\n\nexport type DescendantProps<Y extends HTMLElement = HTMLElement, M = {}> = M & {\n disabled?: ((node: Y) => boolean) | boolean\n}\n\nexport type Descendant<\n Y extends HTMLElement = HTMLElement,\n M = {},\n> = DescendantProps<Y, M> & {\n index: number\n node: Y\n recurred?: boolean\n}\n\nconst descendantManager = <Y extends HTMLElement = HTMLElement, M = {}>() => {\n const descendants = new Map<Y, Descendant<Y, M>>()\n\n const setIndexes = (next: Node[]) => {\n descendants.forEach((descendant) => {\n const index = next.indexOf(descendant.node)\n\n descendant.index = index\n descendant.node.dataset.index = descendant.index.toString()\n })\n }\n\n const set = (node: null | Y, props?: DescendantProps<Y, M>) => {\n if (!node) return\n\n if (descendants.has(node)) {\n const descendant = descendants.get(node)!\n\n descendants.set(node, {\n ...descendant,\n ...props,\n index: descendant.index,\n node: descendant.node,\n })\n } else {\n const keys = Array.from(descendants.keys()).concat(node)\n const sorted = sortNodes(keys)\n\n const descendant = { ...props, index: -1, node } as Descendant<Y, M>\n\n descendants.set(node, descendant)\n\n setIndexes(sorted)\n }\n }\n\n const destroy = () => descendants.clear()\n\n const register = (props?: DescendantProps<Y, M>): RefCallback<Y> => {\n return (node: null | Y) => set(node, props)\n }\n\n const unregister = (node?: null | Y) => {\n if (node == null) return\n\n descendants.delete(node)\n\n const sorted = sortNodes(Array.from(descendants.keys()))\n\n setIndexes(sorted)\n }\n\n const count = (props?: Partial<M>) => values(props).length\n\n const enabledCount = (props?: Partial<M>) => enabledValues(props).length\n\n const active = (\n target?: Descendant<Y, M> | null | Y,\n options?: FocusOptions,\n ) => {\n if (!target) return\n\n if (!(target instanceof Node)) target = target.node\n\n if (isTruthyDataAttr(target.dataset.activedescendant)) return\n\n const descendants = values()\n\n descendants.forEach(({ node }) => {\n delete node.dataset.activedescendant\n })\n\n target.dataset.activedescendant = \"\"\n\n if (options) target.focus(options)\n }\n\n const indexOf = (target?: Descendant<Y, M> | null | Y) => {\n if (!target) return -1\n\n if (target instanceof Node) {\n return descendants.get(target)?.index ?? -1\n } else {\n return descendants.get(target.node)?.index ?? -1\n }\n }\n\n const enabledIndexOf = (target?: Descendant<Y, M> | null | Y) => {\n if (!target) return -1\n\n if (target instanceof Node) {\n return enabledValues().findIndex(({ node }) => node.isSameNode(target))\n } else {\n return enabledValues().findIndex(({ node }) =>\n node.isSameNode(target.node),\n )\n }\n }\n\n const values = (props?: Partial<M>) =>\n Array.from(descendants.values())\n .filter(isMatch(props))\n .sort((a, b) => a.index - b.index)\n\n const enabledValues = (props?: Partial<M>) =>\n values(props).filter(({ disabled, node }) => !runIfFn(disabled, node))\n\n const value = (indexOrNode: null | number | Y) => {\n if (!count() || indexOrNode == null) return undefined\n\n return isNumber(indexOrNode)\n ? values()[indexOrNode]\n : descendants.get(indexOrNode)\n }\n\n const enabledValue = (indexOrNode: null | number | Y) => {\n if (!enabledCount() || indexOrNode == null) return undefined\n\n return enabledValues()[\n isNumber(indexOrNode) ? indexOrNode : enabledIndexOf(indexOrNode)\n ]\n }\n\n const firstValue = (props?: Partial<M>) => values(props).at(0)\n\n const enabledFirstValue = (props?: Partial<M>) => enabledValues(props).at(0)\n\n const lastValue = (props?: Partial<M>) => values(props).at(-1)\n\n const enabledLastValue = (props?: Partial<M>) => enabledValues(props).at(-1)\n\n const prevValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n const filtered = values(props)\n\n if (!filtered.length || indexOrNode == null) return undefined\n\n const currentIndex = isNumber(indexOrNode)\n ? filtered.findIndex((d) => d.index === indexOrNode)\n : filtered.findIndex((d) =>\n d.node.isSameNode(\n indexOrNode instanceof Node ? indexOrNode : indexOrNode.node,\n ),\n )\n\n if (currentIndex === -1) return undefined\n\n const prevIndex = getPrevIndex(currentIndex, filtered.length - 1, loop)\n\n return filtered[prevIndex]\n }\n\n const enabledPrevValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n if (!enabledCount(props)) return undefined\n\n let index = isNumber(indexOrNode) ? indexOrNode : indexOf(indexOrNode)\n let enabledValue = null\n let recurred = false\n\n while (enabledValue == null) {\n index--\n\n if (index < 0) {\n if (!loop) return\n\n index = count() - 1\n recurred = true\n }\n\n const descendant = value(index)\n\n enabledValue =\n descendant &&\n !runIfFn(descendant.disabled, descendant.node) &&\n isMatch<Y, M>(props)(descendant)\n ? descendant\n : null\n }\n\n if (recurred) enabledValue.recurred = recurred\n\n return enabledValue\n }\n\n const nextValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n const filtered = values(props)\n\n if (!filtered.length || indexOrNode == null) return undefined\n\n const currentIndex = isNumber(indexOrNode)\n ? filtered.findIndex((d) => d.index === indexOrNode)\n : filtered.findIndex((d) =>\n d.node.isSameNode(\n indexOrNode instanceof Node ? indexOrNode : indexOrNode.node,\n ),\n )\n\n if (currentIndex === -1) return undefined\n\n const nextIndex = getNextIndex(currentIndex, filtered.length, loop)\n\n return filtered[nextIndex]\n }\n\n const enabledNextValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n if (!enabledCount(props)) return undefined\n\n let index = isNumber(indexOrNode) ? indexOrNode : indexOf(indexOrNode)\n let enabledValue = null\n let recurred = false\n\n while (enabledValue == null) {\n index++\n\n if (index >= count()) {\n if (!loop) return\n\n index = 0\n recurred = true\n }\n\n const descendant = value(index)\n\n enabledValue =\n descendant &&\n !runIfFn(descendant.disabled, descendant.node) &&\n isMatch<Y, M>(props)(descendant)\n ? descendant\n : null\n }\n\n if (recurred) enabledValue.recurred = recurred\n\n return enabledValue\n }\n\n return {\n active,\n count,\n destroy,\n enabledCount,\n enabledFirstValue,\n enabledIndexOf,\n enabledLastValue,\n enabledNextValue,\n enabledPrevValue,\n enabledValue,\n enabledValues,\n firstValue,\n indexOf,\n lastValue,\n nextValue,\n prevValue,\n register,\n unregister,\n value,\n values,\n }\n}\n\nexport type Descendants<Y extends HTMLElement, M = {}> = ReturnType<\n typeof descendantManager<Y, M>\n>\n\nexport type CreateDescendantRegister<Y extends HTMLElement, M = {}> = (\n props?: DescendantProps<Y, M>,\n) => RefCallback<Y>\n\n/**\n * `useDescendants` is a custom hook that manages descendants.\n *\n * @see https://yamada-ui.com/docs/hooks/use-descendants\n */\nexport const createDescendants = <\n Y extends HTMLElement = HTMLElement,\n M = {},\n>() => {\n const [DescendantsContext, useDescendantsContext] = createContext<\n Descendants<Y, M>\n >({\n name: \"DescendantsContext\",\n })\n\n const useDescendantRegister = (descendants?: Descendants<Y, M>) => {\n const ref = useRef<Y>(null)\n\n useSafeLayoutEffect(() => {\n return () => {\n if (ref.current) descendants?.unregister(ref.current)\n }\n }, [])\n\n return (props?: DescendantProps<Y, M>): RefCallback<Y> =>\n mergeRefs(ref, descendants?.register(props))\n }\n\n const useDescendants = () => {\n const descendants = useRef(descendantManager<Y, M>())\n\n useSafeLayoutEffect(() => {\n return () => descendants.current.destroy()\n })\n\n return descendants.current\n }\n\n const useDescendant = (props?: DescendantProps<Y, M>) => {\n const descendants = useDescendantsContext()\n const createRegister = useDescendantRegister(descendants)\n\n return {\n descendants,\n register: createRegister(props),\n }\n }\n\n return {\n DescendantsContext,\n useDescendant,\n useDescendantRegister,\n useDescendants,\n useDescendantsContext,\n }\n}\n"],"mappings":";;;;;;;AAaA,MAAM,aAAa,UACjB,MAAM,MAAM,GAAG,MAAM;CACnB,MAAM,UAAU,EAAE,wBAAwB,CAAC;CAE3C,IACE,UAAU,KAAK,+BACf,UAAU,KAAK,gCAEf,OAAO;CAET,IACE,UAAU,KAAK,+BACf,UAAU,KAAK,4BAEf,OAAO;CAET,IACE,UAAU,KAAK,kCACf,UAAU,KAAK,2CACf;EACA,QAAQ,KAAK,8BAA8B;EAC3C,OAAO;CACT,OACE,OAAO;AAEX,CAAC;AAEH,MAAM,gBAAgB,SAAiB,KAAa,SAAkB;CACpE,IAAI,OAAO,UAAU;CAErB,IAAI,QAAQ,QAAQ,KAAK,OAAO;CAEhC,OAAO;AACT;AAEA,MAAM,gBAAgB,SAAiB,KAAa,SAAkB;CACpE,IAAI,OAAO,UAAU;CAErB,IAAI,QAAQ,OAAO,GAAG,OAAO;CAE7B,OAAO;AACT;AAEA,MAAM,WAC0C,WAC7C,eACC,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,OACzB,CAAC,KAAK,WAAW,WAAW,SAAmC,KAClE;AAeJ,MAAM,0BAAuE;CAC3E,MAAM,8BAAc,IAAI,IAAyB;CAEjD,MAAM,cAAc,SAAiB;EACnC,YAAY,SAAS,eAAe;GAGlC,WAAW,QAFG,KAAK,QAAQ,WAAW,IAEf;GACvB,WAAW,KAAK,QAAQ,QAAQ,WAAW,MAAM,SAAS;EAC5D,CAAC;CACH;CAEA,MAAM,OAAO,MAAgB,UAAkC;EAC7D,IAAI,CAAC,MAAM;EAEX,IAAI,YAAY,IAAI,IAAI,GAAG;GACzB,MAAM,aAAa,YAAY,IAAI,IAAI;GAEvC,YAAY,IAAI,MAAM;IACpB,GAAG;IACH,GAAG;IACH,OAAO,WAAW;IAClB,MAAM,WAAW;GACnB,CAAC;EACH,OAAO;GAEL,MAAM,SAAS,UADF,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,IACvB,CAAC;GAE7B,MAAM,aAAa;IAAE,GAAG;IAAO,OAAO;IAAI;GAAK;GAE/C,YAAY,IAAI,MAAM,UAAU;GAEhC,WAAW,MAAM;EACnB;CACF;CAEA,MAAM,gBAAgB,YAAY,MAAM;CAExC,MAAM,YAAY,UAAkD;EAClE,QAAQ,SAAmB,IAAI,MAAM,KAAK;CAC5C;CAEA,MAAM,cAAc,SAAoB;EACtC,IAAI,QAAQ,MAAM;EAElB,YAAY,OAAO,IAAI;EAIvB,WAFe,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAEtC,CAAC;CACnB;CAEA,MAAM,SAAS,UAAuB,OAAO,KAAK,CAAC,CAAC;CAEpD,MAAM,gBAAgB,UAAuB,cAAc,KAAK,CAAC,CAAC;CAElE,MAAM,UACJ,QACA,YACG;EACH,IAAI,CAAC,QAAQ;EAEb,IAAI,EAAE,kBAAkB,OAAO,SAAS,OAAO;EAE/C,KAAA,GAAA,cAAA,iBAAA,CAAqB,OAAO,QAAQ,gBAAgB,GAAG;EAIvD,OAAU,CAAC,CAAC,SAAS,EAAE,WAAW;GAChC,OAAO,KAAK,QAAQ;EACtB,CAAC;EAED,OAAO,QAAQ,mBAAmB;EAElC,IAAI,SAAS,OAAO,MAAM,OAAO;CACnC;CAEA,MAAM,WAAW,WAAyC;EACxD,IAAI,CAAC,QAAQ,OAAO;EAEpB,IAAI,kBAAkB,MACpB,OAAO,YAAY,IAAI,MAAM,CAAC,EAAE,SAAS;OAEzC,OAAO,YAAY,IAAI,OAAO,IAAI,CAAC,EAAE,SAAS;CAElD;CAEA,MAAM,kBAAkB,WAAyC;EAC/D,IAAI,CAAC,QAAQ,OAAO;EAEpB,IAAI,kBAAkB,MACpB,OAAO,cAAc,CAAC,CAAC,WAAW,EAAE,WAAW,KAAK,WAAW,MAAM,CAAC;OAEtE,OAAO,cAAc,CAAC,CAAC,WAAW,EAAE,WAClC,KAAK,WAAW,OAAO,IAAI,CAC7B;CAEJ;CAEA,MAAM,UAAU,UACd,MAAM,KAAK,YAAY,OAAO,CAAC,CAAC,CAC7B,OAAO,QAAQ,KAAK,CAAC,CAAC,CACtB,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CAErC,MAAM,iBAAiB,UACrB,OAAO,KAAK,CAAC,CAAC,QAAQ,EAAE,UAAU,WAAW,EAAA,GAAA,cAAA,QAAA,CAAS,UAAU,IAAI,CAAC;CAEvE,MAAM,SAAS,gBAAmC;EAChD,IAAI,CAAC,MAAM,KAAK,eAAe,MAAM,OAAO,KAAA;EAE5C,QAAA,GAAA,cAAA,SAAA,CAAgB,WAAW,IACvB,OAAO,CAAC,CAAC,eACT,YAAY,IAAI,WAAW;CACjC;CAEA,MAAM,gBAAgB,gBAAmC;EACvD,IAAI,CAAC,aAAa,KAAK,eAAe,MAAM,OAAO,KAAA;EAEnD,OAAO,cAAc,CAAC,EAAA,GAAA,cAAA,SAAA,CACX,WAAW,IAAI,cAAc,eAAe,WAAW;CAEpE;CAEA,MAAM,cAAc,UAAuB,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC;CAE7D,MAAM,qBAAqB,UAAuB,cAAc,KAAK,CAAC,CAAC,GAAG,CAAC;CAE3E,MAAM,aAAa,UAAuB,OAAO,KAAK,CAAC,CAAC,GAAG,EAAE;CAE7D,MAAM,oBAAoB,UAAuB,cAAc,KAAK,CAAC,CAAC,GAAG,EAAE;CAE3E,MAAM,aACJ,aACA,OAAO,MACP,UACG;EACH,MAAM,WAAW,OAAO,KAAK;EAE7B,IAAI,CAAC,SAAS,UAAU,eAAe,MAAM,OAAO,KAAA;EAEpD,MAAM,gBAAA,GAAA,cAAA,SAAA,CAAwB,WAAW,IACrC,SAAS,WAAW,MAAM,EAAE,UAAU,WAAW,IACjD,SAAS,WAAW,MAClB,EAAE,KAAK,WACL,uBAAuB,OAAO,cAAc,YAAY,IAC1D,CACF;EAEJ,IAAI,iBAAiB,IAAI,OAAO,KAAA;EAIhC,OAAO,SAFW,aAAa,cAAc,SAAS,SAAS,GAAG,IAE1C;CAC1B;CAEA,MAAM,oBACJ,aACA,OAAO,MACP,UACG;EACH,IAAI,CAAC,aAAa,KAAK,GAAG,OAAO,KAAA;EAEjC,IAAI,SAAA,GAAA,cAAA,SAAA,CAAiB,WAAW,IAAI,cAAc,QAAQ,WAAW;EACrE,IAAI,eAAe;EACnB,IAAI,WAAW;EAEf,OAAO,gBAAgB,MAAM;GAC3B;GAEA,IAAI,QAAQ,GAAG;IACb,IAAI,CAAC,MAAM;IAEX,QAAQ,MAAM,IAAI;IAClB,WAAW;GACb;GAEA,MAAM,aAAa,MAAM,KAAK;GAE9B,eACE,cACA,EAAA,GAAA,cAAA,QAAA,CAAS,WAAW,UAAU,WAAW,IAAI,KAC7C,QAAc,KAAK,CAAC,CAAC,UAAU,IAC3B,aACA;EACR;EAEA,IAAI,UAAU,aAAa,WAAW;EAEtC,OAAO;CACT;CAEA,MAAM,aACJ,aACA,OAAO,MACP,UACG;EACH,MAAM,WAAW,OAAO,KAAK;EAE7B,IAAI,CAAC,SAAS,UAAU,eAAe,MAAM,OAAO,KAAA;EAEpD,MAAM,gBAAA,GAAA,cAAA,SAAA,CAAwB,WAAW,IACrC,SAAS,WAAW,MAAM,EAAE,UAAU,WAAW,IACjD,SAAS,WAAW,MAClB,EAAE,KAAK,WACL,uBAAuB,OAAO,cAAc,YAAY,IAC1D,CACF;EAEJ,IAAI,iBAAiB,IAAI,OAAO,KAAA;EAIhC,OAAO,SAFW,aAAa,cAAc,SAAS,QAAQ,IAEtC;CAC1B;CAEA,MAAM,oBACJ,aACA,OAAO,MACP,UACG;EACH,IAAI,CAAC,aAAa,KAAK,GAAG,OAAO,KAAA;EAEjC,IAAI,SAAA,GAAA,cAAA,SAAA,CAAiB,WAAW,IAAI,cAAc,QAAQ,WAAW;EACrE,IAAI,eAAe;EACnB,IAAI,WAAW;EAEf,OAAO,gBAAgB,MAAM;GAC3B;GAEA,IAAI,SAAS,MAAM,GAAG;IACpB,IAAI,CAAC,MAAM;IAEX,QAAQ;IACR,WAAW;GACb;GAEA,MAAM,aAAa,MAAM,KAAK;GAE9B,eACE,cACA,EAAA,GAAA,cAAA,QAAA,CAAS,WAAW,UAAU,WAAW,IAAI,KAC7C,QAAc,KAAK,CAAC,CAAC,UAAU,IAC3B,aACA;EACR;EAEA,IAAI,UAAU,aAAa,WAAW;EAEtC,OAAO;CACT;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;;;;AAeA,MAAa,0BAGN;CACL,MAAM,CAAC,oBAAoB,yBAAyBA,gBAElD,EACA,MAAM,qBACR,CAAC;CAED,MAAM,yBAAyB,gBAAoC;EACjE,MAAM,MAAM,OAAU,IAAI;EAE1B,0BAA0B;GACxB,aAAa;IACX,IAAI,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;GACtD;EACF,GAAG,CAAC,CAAC;EAEL,QAAQ,UACN,UAAU,KAAK,aAAa,SAAS,KAAK,CAAC;CAC/C;CAEA,MAAM,uBAAuB;EAC3B,MAAM,cAAc,OAAO,kBAAwB,CAAC;EAEpD,0BAA0B;GACxB,aAAa,YAAY,QAAQ,QAAQ;EAC3C,CAAC;EAED,OAAO,YAAY;CACrB;CAEA,MAAM,iBAAiB,UAAkC;EACvD,MAAM,cAAc,sBAAsB;EAG1C,OAAO;GACL;GACA,UAJqB,sBAAsB,WAIpB,CAAC,CAAC,KAAK;EAChC;CACF;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"index.js","names":["createContext"],"sources":["../../../../src/hooks/use-descendants/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefCallback } from \"react\"\nimport { useRef } from \"react\"\nimport {\n createContext,\n isNumber,\n isTruthyDataAttr,\n mergeRefs,\n runIfFn,\n useSafeLayoutEffect,\n} from \"../../utils\"\n\nconst sortNodes = (nodes: Node[]) =>\n nodes.sort((a, b) => {\n const compare = a.compareDocumentPosition(b)\n\n if (\n compare & Node.DOCUMENT_POSITION_FOLLOWING ||\n compare & Node.DOCUMENT_POSITION_CONTAINED_BY\n )\n return -1\n\n if (\n compare & Node.DOCUMENT_POSITION_PRECEDING ||\n compare & Node.DOCUMENT_POSITION_CONTAINS\n )\n return 1\n\n if (\n compare & Node.DOCUMENT_POSITION_DISCONNECTED ||\n compare & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n ) {\n console.warn(\"Cannot sort the given nodes.\")\n return 0\n } else {\n return 0\n }\n })\n\nconst getNextIndex = (current: number, max: number, loop: boolean) => {\n let next = current + 1\n\n if (loop && next >= max) next = 0\n\n return next\n}\n\nconst getPrevIndex = (current: number, max: number, loop: boolean) => {\n let next = current - 1\n\n if (loop && next < 0) next = max\n\n return next\n}\n\nconst isMatch =\n <Y extends HTMLElement = HTMLElement, M = {}>(props?: Partial<M>) =>\n (descendant: Descendant<Y, M>) =>\n Object.entries(props ?? {}).every(\n ([key, value]) => descendant[key as keyof Descendant<Y, M>] === value,\n )\n\nexport type DescendantProps<Y extends HTMLElement = HTMLElement, M = {}> = M & {\n disabled?: ((node: Y) => boolean) | boolean\n}\n\nexport type Descendant<\n Y extends HTMLElement = HTMLElement,\n M = {},\n> = DescendantProps<Y, M> & {\n index: number\n node: Y\n recurred?: boolean\n}\n\nconst descendantManager = <Y extends HTMLElement = HTMLElement, M = {}>() => {\n const descendants = new Map<Y, Descendant<Y, M>>()\n\n const setIndexes = (next: Node[]) => {\n descendants.forEach((descendant) => {\n const index = next.indexOf(descendant.node)\n\n descendant.index = index\n descendant.node.dataset.index = descendant.index.toString()\n })\n }\n\n const set = (node: null | Y, props?: DescendantProps<Y, M>) => {\n if (!node) return\n\n if (descendants.has(node)) {\n const descendant = descendants.get(node)!\n\n descendants.set(node, {\n ...descendant,\n ...props,\n index: descendant.index,\n node: descendant.node,\n })\n } else {\n const keys = Array.from(descendants.keys()).concat(node)\n const sorted = sortNodes(keys)\n\n const descendant = { ...props, index: -1, node } as Descendant<Y, M>\n\n descendants.set(node, descendant)\n\n setIndexes(sorted)\n }\n }\n\n const destroy = () => descendants.clear()\n\n const register = (props?: DescendantProps<Y, M>): RefCallback<Y> => {\n return (node: null | Y) => set(node, props)\n }\n\n const unregister = (node?: null | Y) => {\n if (node == null) return\n\n descendants.delete(node)\n\n const sorted = sortNodes(Array.from(descendants.keys()))\n\n setIndexes(sorted)\n }\n\n const count = (props?: Partial<M>) => values(props).length\n\n const enabledCount = (props?: Partial<M>) => enabledValues(props).length\n\n const active = (\n target?: Descendant<Y, M> | null | Y,\n options?: FocusOptions,\n ) => {\n if (!target) return\n\n if (!(target instanceof Node)) target = target.node\n\n if (isTruthyDataAttr(target.dataset.activedescendant)) return\n\n const descendants = values()\n\n descendants.forEach(({ node }) => {\n delete node.dataset.activedescendant\n })\n\n target.dataset.activedescendant = \"\"\n\n if (options) target.focus(options)\n }\n\n const indexOf = (target?: Descendant<Y, M> | null | Y) => {\n if (!target) return -1\n\n if (target instanceof Node) return descendants.get(target)?.index ?? -1\n else return descendants.get(target.node)?.index ?? -1\n }\n\n const enabledIndexOf = (target?: Descendant<Y, M> | null | Y) => {\n if (!target) return -1\n\n if (target instanceof Node)\n return enabledValues().findIndex(({ node }) => node.isSameNode(target))\n else\n return enabledValues().findIndex(({ node }) =>\n node.isSameNode(target.node),\n )\n }\n\n const values = (props?: Partial<M>) =>\n Array.from(descendants.values())\n .filter(isMatch(props))\n .sort((a, b) => a.index - b.index)\n\n const enabledValues = (props?: Partial<M>) =>\n values(props).filter(({ disabled, node }) => !runIfFn(disabled, node))\n\n const value = (indexOrNode: null | number | Y) => {\n if (!count() || indexOrNode == null) return undefined\n\n return isNumber(indexOrNode)\n ? values()[indexOrNode]\n : descendants.get(indexOrNode)\n }\n\n const enabledValue = (indexOrNode: null | number | Y) => {\n if (!enabledCount() || indexOrNode == null) return undefined\n\n return enabledValues()[\n isNumber(indexOrNode) ? indexOrNode : enabledIndexOf(indexOrNode)\n ]\n }\n\n const firstValue = (props?: Partial<M>) => values(props).at(0)\n\n const enabledFirstValue = (props?: Partial<M>) => enabledValues(props).at(0)\n\n const lastValue = (props?: Partial<M>) => values(props).at(-1)\n\n const enabledLastValue = (props?: Partial<M>) => enabledValues(props).at(-1)\n\n const prevValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n const filtered = values(props)\n\n if (!filtered.length || indexOrNode == null) return undefined\n\n const currentIndex = isNumber(indexOrNode)\n ? filtered.findIndex((d) => d.index === indexOrNode)\n : filtered.findIndex((d) =>\n d.node.isSameNode(\n indexOrNode instanceof Node ? indexOrNode : indexOrNode.node,\n ),\n )\n\n if (currentIndex === -1) return undefined\n\n const prevIndex = getPrevIndex(currentIndex, filtered.length - 1, loop)\n\n return filtered[prevIndex]\n }\n\n const enabledPrevValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n if (!enabledCount(props)) return undefined\n\n let index = isNumber(indexOrNode) ? indexOrNode : indexOf(indexOrNode)\n let enabledValue = null\n let recurred = false\n\n while (enabledValue == null) {\n index--\n\n if (index < 0) {\n if (!loop) return\n\n index = count() - 1\n recurred = true\n }\n\n const descendant = value(index)\n\n enabledValue =\n descendant &&\n !runIfFn(descendant.disabled, descendant.node) &&\n isMatch<Y, M>(props)(descendant)\n ? descendant\n : null\n }\n\n if (recurred) enabledValue.recurred = recurred\n\n return enabledValue\n }\n\n const nextValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n const filtered = values(props)\n\n if (!filtered.length || indexOrNode == null) return undefined\n\n const currentIndex = isNumber(indexOrNode)\n ? filtered.findIndex((d) => d.index === indexOrNode)\n : filtered.findIndex((d) =>\n d.node.isSameNode(\n indexOrNode instanceof Node ? indexOrNode : indexOrNode.node,\n ),\n )\n\n if (currentIndex === -1) return undefined\n\n const nextIndex = getNextIndex(currentIndex, filtered.length, loop)\n\n return filtered[nextIndex]\n }\n\n const enabledNextValue = (\n indexOrNode: Descendant<Y, M> | null | number | Y,\n loop = true,\n props?: Partial<M>,\n ) => {\n if (!enabledCount(props)) return undefined\n\n let index = isNumber(indexOrNode) ? indexOrNode : indexOf(indexOrNode)\n let enabledValue = null\n let recurred = false\n\n while (enabledValue == null) {\n index++\n\n if (index >= count()) {\n if (!loop) return\n\n index = 0\n recurred = true\n }\n\n const descendant = value(index)\n\n enabledValue =\n descendant &&\n !runIfFn(descendant.disabled, descendant.node) &&\n isMatch<Y, M>(props)(descendant)\n ? descendant\n : null\n }\n\n if (recurred) enabledValue.recurred = recurred\n\n return enabledValue\n }\n\n return {\n active,\n count,\n destroy,\n enabledCount,\n enabledFirstValue,\n enabledIndexOf,\n enabledLastValue,\n enabledNextValue,\n enabledPrevValue,\n enabledValue,\n enabledValues,\n firstValue,\n indexOf,\n lastValue,\n nextValue,\n prevValue,\n register,\n unregister,\n value,\n values,\n }\n}\n\nexport type Descendants<Y extends HTMLElement, M = {}> = ReturnType<\n typeof descendantManager<Y, M>\n>\n\nexport type CreateDescendantRegister<Y extends HTMLElement, M = {}> = (\n props?: DescendantProps<Y, M>,\n) => RefCallback<Y>\n\n/**\n * `useDescendants` is a custom hook that manages descendants.\n *\n * @see https://yamada-ui.com/docs/hooks/use-descendants\n */\nexport const createDescendants = <\n Y extends HTMLElement = HTMLElement,\n M = {},\n>() => {\n const [DescendantsContext, useDescendantsContext] = createContext<\n Descendants<Y, M>\n >({\n name: \"DescendantsContext\",\n })\n\n const useDescendantRegister = (descendants?: Descendants<Y, M>) => {\n const ref = useRef<Y>(null)\n\n useSafeLayoutEffect(() => {\n return () => {\n if (ref.current) descendants?.unregister(ref.current)\n }\n }, [])\n\n return (props?: DescendantProps<Y, M>): RefCallback<Y> =>\n mergeRefs(ref, descendants?.register(props))\n }\n\n const useDescendants = () => {\n const descendants = useRef(descendantManager<Y, M>())\n\n useSafeLayoutEffect(() => {\n return () => descendants.current.destroy()\n })\n\n return descendants.current\n }\n\n const useDescendant = (props?: DescendantProps<Y, M>) => {\n const descendants = useDescendantsContext()\n const createRegister = useDescendantRegister(descendants)\n\n return {\n descendants,\n register: createRegister(props),\n }\n }\n\n return {\n DescendantsContext,\n useDescendant,\n useDescendantRegister,\n useDescendants,\n useDescendantsContext,\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-focus/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport { useCallback, useRef } from \"react\"\nimport {\n getActiveElement,\n getDocument,\n getFirstFocusableElement,\n isRefObject,\n isSafari,\n useUpdateEffect,\n} from \"../../utils\"\nimport { useEventListener } from \"../use-event-listener\"\n\nexport interface UseFocusOnShowProps {\n focusTarget?: HTMLElement | null | RefObject<HTMLElement | null>\n preventScroll?: boolean\n shouldFocus?: boolean\n visible?: boolean\n}\n\n/**\n * `useFocusOnShow` is a custom hook that focuses on the target element when it is shown.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-show\n */\nexport const useFocusOnShow = <Y extends HTMLElement>(\n refOrEl: RefObject<null | Y> | Y,\n {\n focusTarget: focusRefOrEl,\n preventScroll,\n shouldFocus,\n visible,\n }: UseFocusOnShowProps = {\n preventScroll: true,\n shouldFocus: false,\n },\n) => {\n const trulyShouldFocus = shouldFocus && visible\n const focused = useRef(false)\n\n const getTarget = useCallback(() => {\n return isRefObject(refOrEl) ? refOrEl.current : refOrEl\n }, [refOrEl])\n\n const getFocusTarget = useCallback(() => {\n return isRefObject(focusRefOrEl) ? focusRefOrEl.current : focusRefOrEl\n }, [focusRefOrEl])\n\n const onFocus = useCallback(() => {\n const target = getTarget()\n\n if (!target || !trulyShouldFocus || focused.current) return\n if (target.contains(document.activeElement as HTMLElement)) return\n\n const focusTarget = getFocusTarget()\n\n if (focusTarget) {\n requestAnimationFrame(() => {\n focusTarget.focus({ preventScroll })\n\n focused.current = true\n })\n } else {\n const firstFocusable = getFirstFocusableElement(target)\n\n if (firstFocusable) {\n requestAnimationFrame(() => {\n firstFocusable.focus({ preventScroll })\n\n focused.current = true\n })\n } else {\n requestAnimationFrame(() => {\n target.focus({ preventScroll })\n\n focused.current = true\n })\n }\n }\n }, [getTarget, trulyShouldFocus, getFocusTarget, preventScroll])\n\n useUpdateEffect(() => {\n focused.current = !trulyShouldFocus\n }, [trulyShouldFocus])\n\n useUpdateEffect(() => {\n requestAnimationFrame(onFocus)\n }, [onFocus])\n\n useEventListener(getTarget, \"transitionend\", onFocus)\n}\n\nexport interface UseFocusOnMouseDownProps {\n ref: RefObject<HTMLElement | null>\n elements?: (HTMLElement | null | RefObject<HTMLElement | null>)[]\n enabled?: boolean\n}\n\n/**\n * `useFocusOnPointerDown` is a custom hook that focuses on the target element when it is clicked.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-pointer-down\n */\nexport const useFocusOnPointerDown = ({\n ref,\n elements,\n enabled,\n}: UseFocusOnMouseDownProps) => {\n useEventListener(\n () => getDocument(ref.current),\n \"pointerdown\",\n (ev) => {\n if (!isSafari() || !enabled) return\n const target = ev.target as HTMLElement\n\n const els = elements ?? [ref]\n\n const validTarget = els.some((elOrRef) => {\n const el = isRefObject(elOrRef) ? elOrRef.current : elOrRef\n\n return el?.contains(target) || el === target\n })\n\n if (\n getActiveElement(getDocument(ref.current)) !== target &&\n validTarget\n ) {\n ev.preventDefault()\n\n target.focus()\n }\n },\n )\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,MAAa,kBACX,SACA,EACE,aAAa,cACb,eACA,aACA,YACuB;CACvB,eAAe;CACf,aAAa;AACf,MACG;CACH,MAAM,mBAAmB,eAAe;CACxC,MAAM,UAAU,OAAO,KAAK;CAE5B,MAAM,YAAY,kBAAkB;EAClC,OAAO,YAAY,OAAO,IAAI,QAAQ,UAAU;CAClD,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,iBAAiB,kBAAkB;EACvC,OAAO,YAAY,YAAY,IAAI,aAAa,UAAU;CAC5D,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,UAAU,kBAAkB;EAChC,MAAM,SAAS,UAAU;EAEzB,IAAI,CAAC,UAAU,CAAC,oBAAoB,QAAQ,SAAS;EACrD,IAAI,OAAO,SAAS,SAAS,aAA4B,GAAG;EAE5D,MAAM,cAAc,eAAe;EAEnC,IAAI,aACF,4BAA4B;GAC1B,YAAY,MAAM,EAAE,cAAc,CAAC;GAEnC,QAAQ,UAAU;EACpB,CAAC;OACI;GACL,MAAM,kBAAA,GAAA,cAAA,yBAAA,CAA0C,MAAM;GAEtD,IAAI,gBACF,4BAA4B;IAC1B,eAAe,MAAM,EAAE,cAAc,CAAC;IAEtC,QAAQ,UAAU;GACpB,CAAC;QAED,4BAA4B;IAC1B,OAAO,MAAM,EAAE,cAAc,CAAC;IAE9B,QAAQ,UAAU;GACpB,CAAC;EAEL;CACF,GAAG;EAAC;EAAW;EAAkB;EAAgB;CAAa,CAAC;CAE/D,sBAAsB;EACpB,QAAQ,UAAU,CAAC;CACrB,GAAG,CAAC,gBAAgB,CAAC;CAErB,sBAAsB;EACpB,sBAAsB,OAAO;CAC/B,GAAG,CAAC,OAAO,CAAC;CAEZ,iBAAiB,WAAW,iBAAiB,OAAO;AACtD;;;;;;AAaA,MAAa,yBAAyB,EACpC,KACA,UACA,cAC8B;CAC9B,wBAAA,GAAA,cAAA,YAAA,CACoB,IAAI,OAAO,GAC7B,gBACC,OAAO;EACN,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,KAAK,CAAC,SAAS;EAC7B,MAAM,SAAS,GAAG;EAIlB,MAAM,eAFM,YAAY,CAAC,GAAG,EAAA,CAEJ,MAAM,YAAY;GACxC,MAAM,KAAK,YAAY,OAAO,IAAI,QAAQ,UAAU;GAEpD,OAAO,IAAI,SAAS,MAAM,KAAK,OAAO;EACxC,CAAC;EAED,KAAA,GAAA,cAAA,iBAAA,EAAA,GAAA,cAAA,YAAA,CAC+B,IAAI,OAAO,CAAC,MAAM,UAC/C,aACA;GACA,GAAG,eAAe;GAElB,OAAO,MAAM;EACf;CACF,CACF;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-focus/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport { useCallback, useRef } from \"react\"\nimport {\n getActiveElement,\n getDocument,\n getFirstFocusableElement,\n isRefObject,\n isSafari,\n useUpdateEffect,\n} from \"../../utils\"\nimport { useEventListener } from \"../use-event-listener\"\n\nexport interface UseFocusOnShowProps {\n focusTarget?: HTMLElement | null | RefObject<HTMLElement | null>\n preventScroll?: boolean\n shouldFocus?: boolean\n visible?: boolean\n}\n\n/**\n * `useFocusOnShow` is a custom hook that focuses on the target element when it is shown.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-show\n */\nexport const useFocusOnShow = <Y extends HTMLElement>(\n refOrEl: RefObject<null | Y> | Y,\n {\n focusTarget: focusRefOrEl,\n preventScroll,\n shouldFocus,\n visible,\n }: UseFocusOnShowProps = {\n preventScroll: true,\n shouldFocus: false,\n },\n) => {\n const trulyShouldFocus = shouldFocus && visible\n const focused = useRef(false)\n\n const getTarget = useCallback(() => {\n return isRefObject(refOrEl) ? refOrEl.current : refOrEl\n }, [refOrEl])\n\n const getFocusTarget = useCallback(() => {\n return isRefObject(focusRefOrEl) ? focusRefOrEl.current : focusRefOrEl\n }, [focusRefOrEl])\n\n const onFocus = useCallback(() => {\n const target = getTarget()\n\n if (!target || !trulyShouldFocus || focused.current) return\n if (target.contains(document.activeElement as HTMLElement)) return\n\n const focusTarget = getFocusTarget()\n\n if (focusTarget) {\n requestAnimationFrame(() => {\n focusTarget.focus({ preventScroll })\n\n focused.current = true\n })\n } else {\n const firstFocusable = getFirstFocusableElement(target)\n\n if (firstFocusable)\n requestAnimationFrame(() => {\n firstFocusable.focus({ preventScroll })\n\n focused.current = true\n })\n else\n requestAnimationFrame(() => {\n target.focus({ preventScroll })\n\n focused.current = true\n })\n }\n }, [getTarget, trulyShouldFocus, getFocusTarget, preventScroll])\n\n useUpdateEffect(() => {\n focused.current = !trulyShouldFocus\n }, [trulyShouldFocus])\n\n useUpdateEffect(() => {\n requestAnimationFrame(onFocus)\n }, [onFocus])\n\n useEventListener(getTarget, \"transitionend\", onFocus)\n}\n\nexport interface UseFocusOnMouseDownProps {\n ref: RefObject<HTMLElement | null>\n elements?: (HTMLElement | null | RefObject<HTMLElement | null>)[]\n enabled?: boolean\n}\n\n/**\n * `useFocusOnPointerDown` is a custom hook that focuses on the target element when it is clicked.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-pointer-down\n */\nexport const useFocusOnPointerDown = ({\n ref,\n elements,\n enabled,\n}: UseFocusOnMouseDownProps) => {\n useEventListener(\n () => getDocument(ref.current),\n \"pointerdown\",\n (ev) => {\n if (!isSafari() || !enabled) return\n const target = ev.target as HTMLElement\n\n const els = elements ?? [ref]\n\n const validTarget = els.some((elOrRef) => {\n const el = isRefObject(elOrRef) ? elOrRef.current : elOrRef\n\n return el?.contains(target) || el === target\n })\n\n if (\n getActiveElement(getDocument(ref.current)) !== target &&\n validTarget\n ) {\n ev.preventDefault()\n\n target.focus()\n }\n },\n )\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,MAAa,kBACX,SACA,EACE,aAAa,cACb,eACA,aACA,YACuB;CACvB,eAAe;CACf,aAAa;AACf,MACG;CACH,MAAM,mBAAmB,eAAe;CACxC,MAAM,UAAU,OAAO,KAAK;CAE5B,MAAM,YAAY,kBAAkB;EAClC,OAAO,YAAY,OAAO,IAAI,QAAQ,UAAU;CAClD,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,iBAAiB,kBAAkB;EACvC,OAAO,YAAY,YAAY,IAAI,aAAa,UAAU;CAC5D,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,UAAU,kBAAkB;EAChC,MAAM,SAAS,UAAU;EAEzB,IAAI,CAAC,UAAU,CAAC,oBAAoB,QAAQ,SAAS;EACrD,IAAI,OAAO,SAAS,SAAS,aAA4B,GAAG;EAE5D,MAAM,cAAc,eAAe;EAEnC,IAAI,aACF,4BAA4B;GAC1B,YAAY,MAAM,EAAE,cAAc,CAAC;GAEnC,QAAQ,UAAU;EACpB,CAAC;OACI;GACL,MAAM,kBAAA,GAAA,cAAA,yBAAA,CAA0C,MAAM;GAEtD,IAAI,gBACF,4BAA4B;IAC1B,eAAe,MAAM,EAAE,cAAc,CAAC;IAEtC,QAAQ,UAAU;GACpB,CAAC;QAED,4BAA4B;IAC1B,OAAO,MAAM,EAAE,cAAc,CAAC;IAE9B,QAAQ,UAAU;GACpB,CAAC;EACL;CACF,GAAG;EAAC;EAAW;EAAkB;EAAgB;CAAa,CAAC;CAE/D,sBAAsB;EACpB,QAAQ,UAAU,CAAC;CACrB,GAAG,CAAC,gBAAgB,CAAC;CAErB,sBAAsB;EACpB,sBAAsB,OAAO;CAC/B,GAAG,CAAC,OAAO,CAAC;CAEZ,iBAAiB,WAAW,iBAAiB,OAAO;AACtD;;;;;;AAaA,MAAa,yBAAyB,EACpC,KACA,UACA,cAC8B;CAC9B,wBAAA,GAAA,cAAA,YAAA,CACoB,IAAI,OAAO,GAC7B,gBACC,OAAO;EACN,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,KAAK,CAAC,SAAS;EAC7B,MAAM,SAAS,GAAG;EAIlB,MAAM,eAFM,YAAY,CAAC,GAAG,EAAA,CAEJ,MAAM,YAAY;GACxC,MAAM,KAAK,YAAY,OAAO,IAAI,QAAQ,UAAU;GAEpD,OAAO,IAAI,SAAS,MAAM,KAAK,OAAO;EACxC,CAAC;EAED,KAAA,GAAA,cAAA,iBAAA,EAAA,GAAA,cAAA,YAAA,CAC+B,IAAI,OAAO,CAAC,MAAM,UAC/C,aACA;GACA,GAAG,eAAe;GAElB,OAAO,MAAM;EACf;CACF,CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-local-storage/index.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useEffect, useState } from \"react\"\nimport { isFunction } from \"../../utils\"\nimport { useWindowEvent } from \"../use-window-event\"\n\nexport type StorageType = \"localStorage\" | \"sessionStorage\"\n\nexport interface StorageProps<Y> {\n key: string\n defaultValue?: Y\n getInitialValueInEffect?: boolean\n deserialize?: (value: string | undefined) => Y\n serialize?: (value: Y) => string\n}\n\nconst serializeJSON = <Y>(value: Y, name: string) => {\n try {\n return JSON.stringify(value)\n } catch {\n throw new Error(`useLocalStorage ${name}: Failed to serialize the value`)\n }\n}\n\nconst deserializeJSON = (value: string | undefined) => {\n if (!value) return value\n\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n\nexport const createStorage = <Y>(type: StorageType, name: string) => {\n const eventName =\n type === \"localStorage\" ? \"local-storage\" : \"session-storage\"\n\n return ({\n key,\n defaultValue,\n deserialize = deserializeJSON,\n getInitialValueInEffect = true,\n serialize = (value: Y) => serializeJSON(value, name),\n }: StorageProps<Y>) => {\n const readStorageValue = useCallback(\n (skipStorage?: boolean): Y => {\n if (\n typeof window === \"undefined\" ||\n !(type in window) ||\n (window[type] as null | Storage | undefined) == null ||\n skipStorage\n ) {\n return (defaultValue ?? \"\") as Y\n }\n\n const storageValue = window[type].getItem(key)\n\n return storageValue !== null\n ? deserialize(storageValue)\n : ((defaultValue ?? \"\") as Y)\n },\n [key, deserialize, defaultValue],\n )\n\n const [value, setValue] = useState<Y>(\n readStorageValue(getInitialValueInEffect),\n )\n\n const setStorageValue = useCallback(\n (valOrFn: ((prevState: Y) => Y) | Y) => {\n if (isFunction(valOrFn)) {\n setValue((current) => {\n const result = valOrFn(current)\n\n window[type].setItem(key, serialize(result))\n window.dispatchEvent(\n new CustomEvent(eventName, {\n detail: { key, value: valOrFn(current) },\n }),\n )\n\n return result\n })\n } else {\n window[type].setItem(key, serialize(valOrFn))\n window.dispatchEvent(\n new CustomEvent(eventName, { detail: { key, value: valOrFn } }),\n )\n\n setValue(valOrFn)\n }\n },\n [key, serialize],\n )\n\n const removeStorageValue = useCallback(() => {\n window[type].removeItem(key)\n setValue(defaultValue as Y)\n }, [defaultValue, key])\n\n useWindowEvent(\"storage\", (ev) => {\n if (ev.storageArea === window[type] && ev.key === key)\n setValue(deserialize(ev.newValue ?? undefined))\n })\n\n useWindowEvent(eventName, (ev) => {\n if (ev.detail.key === key) setValue(ev.detail.value)\n })\n\n useEffect(() => {\n if (defaultValue !== undefined && value === undefined)\n setStorageValue(defaultValue)\n }, [defaultValue, value, setStorageValue])\n\n useEffect(() => {\n if (getInitialValueInEffect) setValue(readStorageValue())\n }, [getInitialValueInEffect, readStorageValue])\n\n return [\n value === undefined ? defaultValue : value,\n setStorageValue,\n removeStorageValue,\n ] as const\n }\n}\n\n/**\n * `useLocalStorage` is a custom hook for storing, updating, and retrieving values in local storage.\n *\n * @see https://yamada-ui.com/docs/hooks/use-local-storage\n */\nexport const useLocalStorage = <Y = string>(props: StorageProps<Y>) =>\n createStorage<Y>(\"localStorage\", \"use-local-storage\")(props)\n"],"mappings":";;;;;AAgBA,MAAM,iBAAoB,OAAU,SAAiB;CACnD,IAAI;EACF,OAAO,KAAK,UAAU,KAAK;CAC7B,QAAQ;EACN,MAAM,IAAI,MAAM,mBAAmB,KAAK,gCAAgC;CAC1E;AACF;AAEA,MAAM,mBAAmB,UAA8B;CACrD,IAAI,CAAC,OAAO,OAAO;CAEnB,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,MAAa,iBAAoB,MAAmB,SAAiB;CACnE,MAAM,YACJ,SAAS,iBAAiB,kBAAkB;CAE9C,QAAQ,EACN,KACA,cACA,cAAc,iBACd,0BAA0B,MAC1B,aAAa,UAAa,cAAc,OAAO,IAAI,QAC9B;EACrB,MAAM,mBAAmB,aACtB,gBAA6B;GAC5B,IACE,OAAO,WAAW,eAClB,EAAE,QAAQ,WACT,OAAO,SAAwC,QAChD,aAEA,OAAQ,gBAAgB;GAG1B,MAAM,eAAe,OAAO,KAAK,CAAC,QAAQ,GAAG;GAE7C,OAAO,iBAAiB,OACpB,YAAY,YAAY,IACtB,gBAAgB;EACxB,GACA;GAAC;GAAK;GAAa;EAAY,CACjC;EAEA,MAAM,CAAC,OAAO,YAAY,SACxB,iBAAiB,uBAAuB,CAC1C;EAEA,MAAM,kBAAkB,aACrB,YAAuC;GACtC,KAAA,GAAA,cAAA,WAAA,CAAe,OAAO,GACpB,UAAU,YAAY;IACpB,MAAM,SAAS,QAAQ,OAAO;IAE9B,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,MAAM,CAAC;IAC3C,OAAO,cACL,IAAI,YAAY,WAAW,EACzB,QAAQ;KAAE;KAAK,OAAO,QAAQ,OAAO;IAAE,EACzC,CAAC,CACH;IAEA,OAAO;GACT,CAAC;QACI;IACL,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,OAAO,CAAC;IAC5C,OAAO,cACL,IAAI,YAAY,WAAW,EAAE,QAAQ;KAAE;KAAK,OAAO;IAAQ,EAAE,CAAC,CAChE;IAEA,SAAS,OAAO;GAClB;EACF,GACA,CAAC,KAAK,SAAS,CACjB;EAEA,MAAM,qBAAqB,kBAAkB;GAC3C,OAAO,KAAK,CAAC,WAAW,GAAG;GAC3B,SAAS,YAAiB;EAC5B,GAAG,CAAC,cAAc,GAAG,CAAC;EAEtB,eAAe,YAAY,OAAO;GAChC,IAAI,GAAG,gBAAgB,OAAO,SAAS,GAAG,QAAQ,KAChD,SAAS,YAAY,GAAG,YAAY,KAAA,CAAS,CAAC;EAClD,CAAC;EAED,eAAe,YAAY,OAAO;GAChC,IAAI,GAAG,OAAO,QAAQ,KAAK,SAAS,GAAG,OAAO,KAAK;EACrD,CAAC;EAED,gBAAgB;GACd,IAAI,iBAAiB,KAAA,KAAa,UAAU,KAAA,GAC1C,gBAAgB,YAAY;EAChC,GAAG;GAAC;GAAc;GAAO;EAAe,CAAC;EAEzC,gBAAgB;GACd,IAAI,yBAAyB,SAAS,iBAAiB,CAAC;EAC1D,GAAG,CAAC,yBAAyB,gBAAgB,CAAC;EAE9C,OAAO;GACL,UAAU,KAAA,IAAY,eAAe;GACrC;GACA;EACF;CACF;AACF;;;;;;AAOA,MAAa,mBAA+B,UAC1C,cAAiB,gBAAgB,mBAAmB,CAAC,CAAC,KAAK"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-local-storage/index.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useEffect, useState } from \"react\"\nimport { isFunction } from \"../../utils\"\nimport { useWindowEvent } from \"../use-window-event\"\n\nexport type StorageType = \"localStorage\" | \"sessionStorage\"\n\nexport interface StorageProps<Y> {\n key: string\n defaultValue?: Y\n getInitialValueInEffect?: boolean\n deserialize?: (value: string | undefined) => Y\n serialize?: (value: Y) => string\n}\n\nconst serializeJSON = <Y>(value: Y, name: string) => {\n try {\n return JSON.stringify(value)\n } catch {\n throw new Error(`useLocalStorage ${name}: Failed to serialize the value`)\n }\n}\n\nconst deserializeJSON = (value: string | undefined) => {\n if (!value) return value\n\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n\nexport const createStorage = <Y>(type: StorageType, name: string) => {\n const eventName =\n type === \"localStorage\" ? \"local-storage\" : \"session-storage\"\n\n return ({\n key,\n defaultValue,\n deserialize = deserializeJSON,\n getInitialValueInEffect = true,\n serialize = (value: Y) => serializeJSON(value, name),\n }: StorageProps<Y>) => {\n const readStorageValue = useCallback(\n (skipStorage?: boolean): Y => {\n if (\n typeof window === \"undefined\" ||\n !(type in window) ||\n (window[type] as null | Storage | undefined) == null ||\n skipStorage\n )\n return (defaultValue ?? \"\") as Y\n\n const storageValue = window[type].getItem(key)\n\n return storageValue !== null\n ? deserialize(storageValue)\n : ((defaultValue ?? \"\") as Y)\n },\n [key, deserialize, defaultValue],\n )\n\n const [value, setValue] = useState<Y>(\n readStorageValue(getInitialValueInEffect),\n )\n\n const setStorageValue = useCallback(\n (valOrFn: ((prevState: Y) => Y) | Y) => {\n if (isFunction(valOrFn)) {\n setValue((current) => {\n const result = valOrFn(current)\n\n window[type].setItem(key, serialize(result))\n window.dispatchEvent(\n new CustomEvent(eventName, {\n detail: { key, value: valOrFn(current) },\n }),\n )\n\n return result\n })\n } else {\n window[type].setItem(key, serialize(valOrFn))\n window.dispatchEvent(\n new CustomEvent(eventName, { detail: { key, value: valOrFn } }),\n )\n\n setValue(valOrFn)\n }\n },\n [key, serialize],\n )\n\n const removeStorageValue = useCallback(() => {\n window[type].removeItem(key)\n setValue(defaultValue as Y)\n }, [defaultValue, key])\n\n useWindowEvent(\"storage\", (ev) => {\n if (ev.storageArea === window[type] && ev.key === key)\n setValue(deserialize(ev.newValue ?? undefined))\n })\n\n useWindowEvent(eventName, (ev) => {\n if (ev.detail.key === key) setValue(ev.detail.value)\n })\n\n useEffect(() => {\n if (defaultValue !== undefined && value === undefined)\n setStorageValue(defaultValue)\n }, [defaultValue, value, setStorageValue])\n\n useEffect(() => {\n if (getInitialValueInEffect) setValue(readStorageValue())\n }, [getInitialValueInEffect, readStorageValue])\n\n return [\n value === undefined ? defaultValue : value,\n setStorageValue,\n removeStorageValue,\n ] as const\n }\n}\n\n/**\n * `useLocalStorage` is a custom hook for storing, updating, and retrieving values in local storage.\n *\n * @see https://yamada-ui.com/docs/hooks/use-local-storage\n */\nexport const useLocalStorage = <Y = string>(props: StorageProps<Y>) =>\n createStorage<Y>(\"localStorage\", \"use-local-storage\")(props)\n"],"mappings":";;;;;AAgBA,MAAM,iBAAoB,OAAU,SAAiB;CACnD,IAAI;EACF,OAAO,KAAK,UAAU,KAAK;CAC7B,QAAQ;EACN,MAAM,IAAI,MAAM,mBAAmB,KAAK,gCAAgC;CAC1E;AACF;AAEA,MAAM,mBAAmB,UAA8B;CACrD,IAAI,CAAC,OAAO,OAAO;CAEnB,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,MAAa,iBAAoB,MAAmB,SAAiB;CACnE,MAAM,YACJ,SAAS,iBAAiB,kBAAkB;CAE9C,QAAQ,EACN,KACA,cACA,cAAc,iBACd,0BAA0B,MAC1B,aAAa,UAAa,cAAc,OAAO,IAAI,QAC9B;EACrB,MAAM,mBAAmB,aACtB,gBAA6B;GAC5B,IACE,OAAO,WAAW,eAClB,EAAE,QAAQ,WACT,OAAO,SAAwC,QAChD,aAEA,OAAQ,gBAAgB;GAE1B,MAAM,eAAe,OAAO,KAAK,CAAC,QAAQ,GAAG;GAE7C,OAAO,iBAAiB,OACpB,YAAY,YAAY,IACtB,gBAAgB;EACxB,GACA;GAAC;GAAK;GAAa;EAAY,CACjC;EAEA,MAAM,CAAC,OAAO,YAAY,SACxB,iBAAiB,uBAAuB,CAC1C;EAEA,MAAM,kBAAkB,aACrB,YAAuC;GACtC,KAAA,GAAA,cAAA,WAAA,CAAe,OAAO,GACpB,UAAU,YAAY;IACpB,MAAM,SAAS,QAAQ,OAAO;IAE9B,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,MAAM,CAAC;IAC3C,OAAO,cACL,IAAI,YAAY,WAAW,EACzB,QAAQ;KAAE;KAAK,OAAO,QAAQ,OAAO;IAAE,EACzC,CAAC,CACH;IAEA,OAAO;GACT,CAAC;QACI;IACL,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,OAAO,CAAC;IAC5C,OAAO,cACL,IAAI,YAAY,WAAW,EAAE,QAAQ;KAAE;KAAK,OAAO;IAAQ,EAAE,CAAC,CAChE;IAEA,SAAS,OAAO;GAClB;EACF,GACA,CAAC,KAAK,SAAS,CACjB;EAEA,MAAM,qBAAqB,kBAAkB;GAC3C,OAAO,KAAK,CAAC,WAAW,GAAG;GAC3B,SAAS,YAAiB;EAC5B,GAAG,CAAC,cAAc,GAAG,CAAC;EAEtB,eAAe,YAAY,OAAO;GAChC,IAAI,GAAG,gBAAgB,OAAO,SAAS,GAAG,QAAQ,KAChD,SAAS,YAAY,GAAG,YAAY,KAAA,CAAS,CAAC;EAClD,CAAC;EAED,eAAe,YAAY,OAAO;GAChC,IAAI,GAAG,OAAO,QAAQ,KAAK,SAAS,GAAG,OAAO,KAAK;EACrD,CAAC;EAED,gBAAgB;GACd,IAAI,iBAAiB,KAAA,KAAa,UAAU,KAAA,GAC1C,gBAAgB,YAAY;EAChC,GAAG;GAAC;GAAc;GAAO;EAAe,CAAC;EAEzC,gBAAgB;GACd,IAAI,yBAAyB,SAAS,iBAAiB,CAAC;EAC1D,GAAG,CAAC,yBAAyB,gBAAgB,CAAC;EAE9C,OAAO;GACL,UAAU,KAAA,IAAY,eAAe;GACrC;GACA;EACF;CACF;AACF;;;;;;AAOA,MAAa,mBAA+B,UAC1C,cAAiB,gBAAgB,mBAAmB,CAAC,CAAC,KAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-mounted/index.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useRef, useState } from \"react\"\nimport { useSafeLayoutEffect } from \"../../utils\"\n\nexport interface UseMountedProps {\n delay?: number\n state?: boolean\n}\n\nexport function useMounted(props?: {\n delay?: number\n state?: false\n}): () => boolean\n\nexport function useMounted(props?: { delay?: number; state?: true }): boolean\n\nexport function useMounted({ delay = 0, state = false }: UseMountedProps = {}) {\n const mountedRef = useRef(false)\n const [mounted, setMounted] = useState(false)\n\n useSafeLayoutEffect(() => {\n mountedRef.current = true\n\n let timeoutId: NodeJS.Timeout | null = null\n\n if (state) {\n if (delay > 0) {\n timeoutId = setTimeout(() => setMounted(true), delay)\n } else {\n setMounted(true)\n }\n }\n\n return () => {\n mountedRef.current = false\n\n if (state) setMounted(false)\n\n if (timeoutId) clearTimeout(timeoutId)\n }\n }, [delay, state])\n\n if (state) {\n return mounted\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useCallback(() => mountedRef.current, [])\n }\n}\n\nexport type UseMountedReturn = ReturnType<typeof useMounted>\n"],"mappings":";;;;AAiBA,SAAgB,WAAW,EAAE,QAAQ,GAAG,QAAQ,UAA2B,CAAC,GAAG;CAC7E,MAAM,aAAa,OAAO,KAAK;CAC/B,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAE5C,0BAA0B;EACxB,WAAW,UAAU;EAErB,IAAI,YAAmC;EAEvC,IAAI,OACF,IAAI,QAAQ,GACV,YAAY,iBAAiB,WAAW,IAAI,GAAG,KAAK;OAEpD,WAAW,IAAI;EAInB,aAAa;GACX,WAAW,UAAU;GAErB,IAAI,OAAO,WAAW,KAAK;GAE3B,IAAI,WAAW,aAAa,SAAS;EACvC;CACF,GAAG,CAAC,OAAO,KAAK,CAAC;CAEjB,IAAI,OACF,OAAO;MAGP,OAAO,kBAAkB,WAAW,SAAS,CAAC,CAAC;AAEnD"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-mounted/index.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useRef, useState } from \"react\"\nimport { useSafeLayoutEffect } from \"../../utils\"\n\nexport interface UseMountedProps {\n delay?: number\n state?: boolean\n}\n\nexport function useMounted(props?: {\n delay?: number\n state?: false\n}): () => boolean\n\nexport function useMounted(props?: { delay?: number; state?: true }): boolean\n\nexport function useMounted({ delay = 0, state = false }: UseMountedProps = {}) {\n const mountedRef = useRef(false)\n const [mounted, setMounted] = useState(false)\n\n useSafeLayoutEffect(() => {\n mountedRef.current = true\n\n let timeoutId: NodeJS.Timeout | null = null\n\n if (state)\n if (delay > 0) timeoutId = setTimeout(() => setMounted(true), delay)\n else setMounted(true)\n\n return () => {\n mountedRef.current = false\n\n if (state) setMounted(false)\n\n if (timeoutId) clearTimeout(timeoutId)\n }\n }, [delay, state])\n\n if (state) return mounted\n else\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useCallback(() => mountedRef.current, [])\n}\n\nexport type UseMountedReturn = ReturnType<typeof useMounted>\n"],"mappings":";;;;AAiBA,SAAgB,WAAW,EAAE,QAAQ,GAAG,QAAQ,UAA2B,CAAC,GAAG;CAC7E,MAAM,aAAa,OAAO,KAAK;CAC/B,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAE5C,0BAA0B;EACxB,WAAW,UAAU;EAErB,IAAI,YAAmC;EAEvC,IAAI,OACF,IAAI,QAAQ,GAAG,YAAY,iBAAiB,WAAW,IAAI,GAAG,KAAK;OAC9D,WAAW,IAAI;EAEtB,aAAa;GACX,WAAW,UAAU;GAErB,IAAI,OAAO,WAAW,KAAK;GAE3B,IAAI,WAAW,aAAa,SAAS;EACvC;CACF,GAAG,CAAC,OAAO,KAAK,CAAC;CAEjB,IAAI,OAAO,OAAO;MAGhB,OAAO,kBAAkB,WAAW,SAAS,CAAC,CAAC;AACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-outside-click/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport { useCallback, useEffect, useRef } from \"react\"\nimport { getDocument, isArray, useCallbackRef } from \"../../utils\"\n\nexport interface UseOutsideClickProps {\n ref: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[]\n enabled?: boolean\n handler?: (ev: Event) => void\n}\n\n/**\n * `useOutsideClick` is a custom hook that detects click events outside of an element.\n *\n * @see https://yamada-ui.com/docs/hooks/use-outside-click\n */\nexport const useOutsideClick = ({\n ref,\n enabled = true,\n handler,\n}: UseOutsideClickProps) => {\n const handlerRef = useCallbackRef(handler)\n\n const state = useRef({\n ignoreEmulatedMouseEvents: false,\n isPointerDown: false,\n })\n\n const onPointerDown = useCallback(\n (ev: MouseEvent | TouchEvent) => {\n if (isValidEvent(ev, ref)) state.current.isPointerDown = true\n },\n [ref],\n )\n\n const onMouseUp = useCallback(\n (ev: MouseEvent) => {\n if (state.current.ignoreEmulatedMouseEvents) {\n state.current.ignoreEmulatedMouseEvents = false\n\n return\n }\n\n if (state.current.isPointerDown && handler && isValidEvent(ev, ref)) {\n state.current.isPointerDown = false\n\n handlerRef(ev)\n }\n },\n [handler, handlerRef, ref],\n )\n\n const onTouchEnd = useCallback(\n (ev: TouchEvent) => {\n state.current.ignoreEmulatedMouseEvents = true\n\n if (state.current.isPointerDown && handler && isValidEvent(ev, ref)) {\n state.current.isPointerDown = false\n\n handlerRef(ev)\n }\n },\n [handler, handlerRef, ref],\n )\n\n useEffect(() => {\n if (!enabled) return\n\n const doc = getDocument(isArray(ref) ? ref[0]?.current : ref.current)\n\n doc.addEventListener(\"mousedown\", onPointerDown, true)\n doc.addEventListener(\"mouseup\", onMouseUp, true)\n doc.addEventListener(\"touchstart\", onPointerDown, true)\n doc.addEventListener(\"touchend\", onTouchEnd, true)\n\n return () => {\n doc.removeEventListener(\"mousedown\", onPointerDown, true)\n doc.removeEventListener(\"mouseup\", onMouseUp, true)\n doc.removeEventListener(\"touchstart\", onPointerDown, true)\n doc.removeEventListener(\"touchend\", onTouchEnd, true)\n }\n }, [\n handler,\n ref,\n handlerRef,\n state,\n enabled,\n onPointerDown,\n onMouseUp,\n onTouchEnd,\n ])\n}\n\nconst isValidEvent = (\n ev: MouseEvent | TouchEvent,\n ref: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],\n) => {\n const target = ev.target as HTMLElement | null\n\n if (\"button\" in ev && ev.button > 0) return false\n\n if (target) if (!getDocument(target).contains(target)) return false\n\n if (isArray(ref)) {\n return !ref.some((ref) => ref.current?.contains(target))\n } else {\n return !ref.current?.contains(target)\n }\n}\n"],"mappings":";;;;;;;;;;AAiBA,MAAa,mBAAmB,EAC9B,KACA,UAAU,MACV,cAC0B;CAC1B,MAAM,aAAa,eAAe,OAAO;CAEzC,MAAM,QAAQ,OAAO;EACnB,2BAA2B;EAC3B,eAAe;CACjB,CAAC;CAED,MAAM,gBAAgB,aACnB,OAAgC;EAC/B,IAAI,aAAa,IAAI,GAAG,GAAG,MAAM,QAAQ,gBAAgB;CAC3D,GACA,CAAC,GAAG,CACN;CAEA,MAAM,YAAY,aACf,OAAmB;EAClB,IAAI,MAAM,QAAQ,2BAA2B;GAC3C,MAAM,QAAQ,4BAA4B;GAE1C;EACF;EAEA,IAAI,MAAM,QAAQ,iBAAiB,WAAW,aAAa,IAAI,GAAG,GAAG;GACnE,MAAM,QAAQ,gBAAgB;GAE9B,WAAW,EAAE;EACf;CACF,GACA;EAAC;EAAS;EAAY;CAAG,CAC3B;CAEA,MAAM,aAAa,aAChB,OAAmB;EAClB,MAAM,QAAQ,4BAA4B;EAE1C,IAAI,MAAM,QAAQ,iBAAiB,WAAW,aAAa,IAAI,GAAG,GAAG;GACnE,MAAM,QAAQ,gBAAgB;GAE9B,WAAW,EAAE;EACf;CACF,GACA;EAAC;EAAS;EAAY;CAAG,CAC3B;CAEA,gBAAgB;EACd,IAAI,CAAC,SAAS;EAEd,MAAM,OAAA,GAAA,cAAA,YAAA,EAAA,GAAA,cAAA,QAAA,CAA0B,GAAG,IAAI,IAAI,EAAE,EAAE,UAAU,IAAI,OAAO;EAEpE,IAAI,iBAAiB,aAAa,eAAe,IAAI;EACrD,IAAI,iBAAiB,WAAW,WAAW,IAAI;EAC/C,IAAI,iBAAiB,cAAc,eAAe,IAAI;EACtD,IAAI,iBAAiB,YAAY,YAAY,IAAI;EAEjD,aAAa;GACX,IAAI,oBAAoB,aAAa,eAAe,IAAI;GACxD,IAAI,oBAAoB,WAAW,WAAW,IAAI;GAClD,IAAI,oBAAoB,cAAc,eAAe,IAAI;GACzD,IAAI,oBAAoB,YAAY,YAAY,IAAI;EACtD;CACF,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;AACH;AAEA,MAAM,gBACJ,IACA,QACG;CACH,MAAM,SAAS,GAAG;CAElB,IAAI,YAAY,MAAM,GAAG,SAAS,GAAG,OAAO;CAE5C,IAAI;MAAY,EAAA,GAAA,cAAA,YAAA,CAAa,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO;CAAA;CAE9D,KAAA,GAAA,cAAA,QAAA,CAAY,GAAG,GACb,OAAO,CAAC,IAAI,MAAM,QAAQ,IAAI,SAAS,SAAS,MAAM,CAAC;MAEvD,OAAO,CAAC,IAAI,SAAS,SAAS,MAAM;AAExC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-outside-click/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport { useCallback, useEffect, useRef } from \"react\"\nimport { getDocument, isArray, useCallbackRef } from \"../../utils\"\n\nexport interface UseOutsideClickProps {\n ref: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[]\n enabled?: boolean\n handler?: (ev: Event) => void\n}\n\n/**\n * `useOutsideClick` is a custom hook that detects click events outside of an element.\n *\n * @see https://yamada-ui.com/docs/hooks/use-outside-click\n */\nexport const useOutsideClick = ({\n ref,\n enabled = true,\n handler,\n}: UseOutsideClickProps) => {\n const handlerRef = useCallbackRef(handler)\n\n const state = useRef({\n ignoreEmulatedMouseEvents: false,\n isPointerDown: false,\n })\n\n const onPointerDown = useCallback(\n (ev: MouseEvent | TouchEvent) => {\n if (isValidEvent(ev, ref)) state.current.isPointerDown = true\n },\n [ref],\n )\n\n const onMouseUp = useCallback(\n (ev: MouseEvent) => {\n if (state.current.ignoreEmulatedMouseEvents) {\n state.current.ignoreEmulatedMouseEvents = false\n\n return\n }\n\n if (state.current.isPointerDown && handler && isValidEvent(ev, ref)) {\n state.current.isPointerDown = false\n\n handlerRef(ev)\n }\n },\n [handler, handlerRef, ref],\n )\n\n const onTouchEnd = useCallback(\n (ev: TouchEvent) => {\n state.current.ignoreEmulatedMouseEvents = true\n\n if (state.current.isPointerDown && handler && isValidEvent(ev, ref)) {\n state.current.isPointerDown = false\n\n handlerRef(ev)\n }\n },\n [handler, handlerRef, ref],\n )\n\n useEffect(() => {\n if (!enabled) return\n\n const doc = getDocument(isArray(ref) ? ref[0]?.current : ref.current)\n\n doc.addEventListener(\"mousedown\", onPointerDown, true)\n doc.addEventListener(\"mouseup\", onMouseUp, true)\n doc.addEventListener(\"touchstart\", onPointerDown, true)\n doc.addEventListener(\"touchend\", onTouchEnd, true)\n\n return () => {\n doc.removeEventListener(\"mousedown\", onPointerDown, true)\n doc.removeEventListener(\"mouseup\", onMouseUp, true)\n doc.removeEventListener(\"touchstart\", onPointerDown, true)\n doc.removeEventListener(\"touchend\", onTouchEnd, true)\n }\n }, [\n handler,\n ref,\n handlerRef,\n state,\n enabled,\n onPointerDown,\n onMouseUp,\n onTouchEnd,\n ])\n}\n\nconst isValidEvent = (\n ev: MouseEvent | TouchEvent,\n ref: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],\n) => {\n const target = ev.target as HTMLElement | null\n\n if (\"button\" in ev && ev.button > 0) return false\n\n if (target) if (!getDocument(target).contains(target)) return false\n\n if (isArray(ref)) return !ref.some((ref) => ref.current?.contains(target))\n else return !ref.current?.contains(target)\n}\n"],"mappings":";;;;;;;;;;AAiBA,MAAa,mBAAmB,EAC9B,KACA,UAAU,MACV,cAC0B;CAC1B,MAAM,aAAa,eAAe,OAAO;CAEzC,MAAM,QAAQ,OAAO;EACnB,2BAA2B;EAC3B,eAAe;CACjB,CAAC;CAED,MAAM,gBAAgB,aACnB,OAAgC;EAC/B,IAAI,aAAa,IAAI,GAAG,GAAG,MAAM,QAAQ,gBAAgB;CAC3D,GACA,CAAC,GAAG,CACN;CAEA,MAAM,YAAY,aACf,OAAmB;EAClB,IAAI,MAAM,QAAQ,2BAA2B;GAC3C,MAAM,QAAQ,4BAA4B;GAE1C;EACF;EAEA,IAAI,MAAM,QAAQ,iBAAiB,WAAW,aAAa,IAAI,GAAG,GAAG;GACnE,MAAM,QAAQ,gBAAgB;GAE9B,WAAW,EAAE;EACf;CACF,GACA;EAAC;EAAS;EAAY;CAAG,CAC3B;CAEA,MAAM,aAAa,aAChB,OAAmB;EAClB,MAAM,QAAQ,4BAA4B;EAE1C,IAAI,MAAM,QAAQ,iBAAiB,WAAW,aAAa,IAAI,GAAG,GAAG;GACnE,MAAM,QAAQ,gBAAgB;GAE9B,WAAW,EAAE;EACf;CACF,GACA;EAAC;EAAS;EAAY;CAAG,CAC3B;CAEA,gBAAgB;EACd,IAAI,CAAC,SAAS;EAEd,MAAM,OAAA,GAAA,cAAA,YAAA,EAAA,GAAA,cAAA,QAAA,CAA0B,GAAG,IAAI,IAAI,EAAE,EAAE,UAAU,IAAI,OAAO;EAEpE,IAAI,iBAAiB,aAAa,eAAe,IAAI;EACrD,IAAI,iBAAiB,WAAW,WAAW,IAAI;EAC/C,IAAI,iBAAiB,cAAc,eAAe,IAAI;EACtD,IAAI,iBAAiB,YAAY,YAAY,IAAI;EAEjD,aAAa;GACX,IAAI,oBAAoB,aAAa,eAAe,IAAI;GACxD,IAAI,oBAAoB,WAAW,WAAW,IAAI;GAClD,IAAI,oBAAoB,cAAc,eAAe,IAAI;GACzD,IAAI,oBAAoB,YAAY,YAAY,IAAI;EACtD;CACF,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;AACH;AAEA,MAAM,gBACJ,IACA,QACG;CACH,MAAM,SAAS,GAAG;CAElB,IAAI,YAAY,MAAM,GAAG,SAAS,GAAG,OAAO;CAE5C,IAAI;MAAY,EAAA,GAAA,cAAA,YAAA,CAAa,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO;CAAA;CAE9D,KAAA,GAAA,cAAA,QAAA,CAAY,GAAG,GAAG,OAAO,CAAC,IAAI,MAAM,QAAQ,IAAI,SAAS,SAAS,MAAM,CAAC;MACpE,OAAO,CAAC,IAAI,SAAS,SAAS,MAAM;AAC3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n-provider.js","names":["INTL","noop"],"sources":["../../../../src/providers/i18n-provider/i18n-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { Formats, Options } from \"intl-messageformat\"\nimport type { FC, ReactNode } from \"react\"\nimport type { TextDirection } from \"../../core\"\nimport type { AnyString, Dict, Path, Value } from \"../../utils\"\nimport type { IcuArgs } from \"./icu.types\"\nimport type { DefaultIntlData } from \"./intl\"\nimport IntlMessageFormat from \"intl-messageformat\"\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport { DEFAULT_DIRECTION, DEFAULT_LOCALE } from \"../../core\"\nimport {\n createdDom,\n getMemoizedObject as get,\n isEmptyObject,\n isRtl,\n isString,\n isUndefined,\n noop,\n useUpdateEffect,\n} from \"../../utils\"\nimport INTL from \"./intl\"\n\nexport interface Language {\n dir: TextDirection\n locale: string\n}\n\nconst DEFAULT_LANGUAGE: Language = {\n dir: DEFAULT_DIRECTION,\n locale: DEFAULT_LOCALE,\n}\n\nexport const LOCALES = Object.keys(INTL) as readonly Locale[]\n\nexport function getLanguage(locale?: string, dir?: TextDirection): Language {\n locale ??= createdDom() ? navigator.language : DEFAULT_LOCALE\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale])\n } catch (_err) {\n locale = DEFAULT_LOCALE\n }\n\n dir ??= isRtl(locale) ? \"rtl\" : \"ltr\"\n\n return { dir, locale }\n}\n\ntype IntlData = DefaultIntlData\ntype IntlKey = keyof IntlData\ntype IntlPath = Path<IntlData>\n\nexport type Locale = keyof typeof INTL\n\ntype Translation<Y extends object = IntlData, M extends string = IntlPath> = <\n D extends M,\n>(\n path: D,\n ...args: IcuArgs<Value<Y, D>> extends never\n ? [replaceValues?: IcuArgs<Value<Y, D>, IntlPath | M>]\n : [replaceValues: IcuArgs<Value<Y, D>, IntlPath | M>]\n) => string\n\ninterface I18nContext<\n Y extends object = IntlData,\n M extends string = IntlPath,\n> extends Language {\n t: Translation<Y, M>\n changeLanguage: (locale?: string, dir?: TextDirection) => void\n getTranslation: (key?: IntlKey) => Translation<Y, M>\n}\n\nexport const I18nContext = createContext<I18nContext>({\n ...DEFAULT_LANGUAGE,\n changeLanguage: noop,\n getTranslation: () => () => \"\",\n t: () => \"\",\n})\n\nexport interface I18nProviderProps {\n children?: ReactNode\n /**\n * The text direction to apply to the application.\n *\n * If not provided, the direction will be determined by the locale.\n */\n dir?: TextDirection\n /**\n * The formats to pass to the `intlMessageFormat` instance.\n */\n formats?: Formats\n /**\n * The internationalization messages to apply to the application.\n *\n * This prop expects a dictionary object where the keys are locale strings (e.g., \"en-US\").\n */\n intl?: Dict\n /**\n * The options to pass to the `intlMessageFormat` instance.\n */\n intlMessageFormatOptions?: Options\n /**\n * The locale to apply to the application.\n *\n * If not provided, the locale will be determined by the browser.\n */\n locale?: AnyString | Locale\n}\n\nexport const I18nProvider: FC<I18nProviderProps> = ({\n children,\n dir: forcedDir,\n formats,\n intl = INTL as Dict,\n intlMessageFormatOptions,\n locale: forcedLocale,\n}) => {\n const [language, setLanguage] = useState(getLanguage(forcedLocale, forcedDir))\n const controlled = !isUndefined(forcedLocale)\n const { locale } = language\n\n const messages = useMemo(() => intl[locale], [intl, locale])\n\n const changeSystemLanguage = useCallback(() => {\n setLanguage(getLanguage())\n }, [])\n\n const changeLanguage = useCallback((locale?: string, dir?: TextDirection) => {\n setLanguage(getLanguage(locale, dir))\n }, [])\n\n const getValue = useCallback(\n (path: number | string) => {\n const value = get<string | undefined>(messages, path)\n\n if (!isUndefined(value)) {\n return value\n } else {\n path = path.toString().replace(/^[^.]+\\./g, \"\")\n\n return get<string | undefined>(messages, path)\n }\n },\n [messages],\n )\n\n const getTranslation = useCallback(\n (key?: IntlKey) =>\n <Y extends IntlPath>(\n path: Y,\n replaceValues?: IcuArgs<Value<IntlData, Y>, IntlPath>,\n ) => {\n const value = getValue(key ? `${key}.${path}` : path) ?? path\n\n if (isUndefined(replaceValues)) return value\n\n try {\n const resolvedReplaceValues = Object.entries(replaceValues).reduce<{\n [key: string]: any\n }>((prev, [key, pathOrValue]) => {\n if (isString(pathOrValue)) {\n const resolvedPathOrValue = String(pathOrValue)\n const value =\n getValue(\n key ? `${key}.${resolvedPathOrValue}` : resolvedPathOrValue,\n ) ?? resolvedPathOrValue\n\n prev[key] = value\n } else {\n prev[key] = pathOrValue\n }\n\n return prev\n }, {})\n\n const message = new IntlMessageFormat(\n value,\n locale,\n formats,\n intlMessageFormatOptions,\n )\n\n return message.format(resolvedReplaceValues) as string\n } catch (e) {\n if (e instanceof Error) console.warn(e.message)\n\n return value\n }\n },\n [getValue, locale, formats, intlMessageFormatOptions],\n )\n\n const value = useMemo(() => {\n const rest = { changeLanguage, getTranslation, t: getTranslation() }\n\n return { ...language, ...rest }\n }, [changeLanguage, getTranslation, language])\n\n useEffect(() => {\n if (controlled) return\n\n window.addEventListener(\"languagechange\", changeSystemLanguage)\n\n return () => {\n window.removeEventListener(\"languagechange\", changeSystemLanguage)\n }\n }, [controlled, changeSystemLanguage])\n\n useUpdateEffect(() => {\n setLanguage(getLanguage(forcedLocale, forcedDir))\n }, [forcedLocale, forcedDir])\n\n return <I18nContext value={value}>{children}</I18nContext>\n}\n\nexport function useI18n(): I18nContext\n\nexport function useI18n<Y extends IntlKey>(\n key: Y,\n): I18nContext<IntlData[Y], Path<IntlData[Y]>>\n\nexport function useI18n<Y extends IntlKey>(key?: Y) {\n const context = useContext(I18nContext)\n\n const translation = useCallback(\n <M extends Path<IntlData[Y]>>(\n path: M,\n replaceValues?: IcuArgs<\n Value<IntlData[Y], M>,\n IntlPath | Path<IntlData[Y]>\n >,\n ) => context.getTranslation(key)(path as any, replaceValues as any),\n [key, context],\n )\n\n if (isEmptyObject(context))\n return {\n ...DEFAULT_LANGUAGE,\n changeLanguage: noop,\n t: () => \"\",\n }\n\n if (key) {\n return { ...context, t: translation }\n } else {\n return context\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"i18n-provider.js","names":["INTL","noop"],"sources":["../../../../src/providers/i18n-provider/i18n-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { Formats, Options } from \"intl-messageformat\"\nimport type { FC, ReactNode } from \"react\"\nimport type { TextDirection } from \"../../core\"\nimport type { AnyString, Dict, Path, Value } from \"../../utils\"\nimport type { IcuArgs } from \"./icu.types\"\nimport type { DefaultIntlData } from \"./intl\"\nimport IntlMessageFormat from \"intl-messageformat\"\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport { DEFAULT_DIRECTION, DEFAULT_LOCALE } from \"../../core\"\nimport {\n createdDom,\n getMemoizedObject as get,\n isEmptyObject,\n isRtl,\n isString,\n isUndefined,\n noop,\n useUpdateEffect,\n} from \"../../utils\"\nimport INTL from \"./intl\"\n\nexport interface Language {\n dir: TextDirection\n locale: string\n}\n\nconst DEFAULT_LANGUAGE: Language = {\n dir: DEFAULT_DIRECTION,\n locale: DEFAULT_LOCALE,\n}\n\nexport const LOCALES = Object.keys(INTL) as readonly Locale[]\n\nexport function getLanguage(locale?: string, dir?: TextDirection): Language {\n locale ??= createdDom() ? navigator.language : DEFAULT_LOCALE\n\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale])\n } catch (_err) {\n locale = DEFAULT_LOCALE\n }\n\n dir ??= isRtl(locale) ? \"rtl\" : \"ltr\"\n\n return { dir, locale }\n}\n\ntype IntlData = DefaultIntlData\ntype IntlKey = keyof IntlData\ntype IntlPath = Path<IntlData>\n\nexport type Locale = keyof typeof INTL\n\ntype Translation<Y extends object = IntlData, M extends string = IntlPath> = <\n D extends M,\n>(\n path: D,\n ...args: IcuArgs<Value<Y, D>> extends never\n ? [replaceValues?: IcuArgs<Value<Y, D>, IntlPath | M>]\n : [replaceValues: IcuArgs<Value<Y, D>, IntlPath | M>]\n) => string\n\ninterface I18nContext<\n Y extends object = IntlData,\n M extends string = IntlPath,\n> extends Language {\n t: Translation<Y, M>\n changeLanguage: (locale?: string, dir?: TextDirection) => void\n getTranslation: (key?: IntlKey) => Translation<Y, M>\n}\n\nexport const I18nContext = createContext<I18nContext>({\n ...DEFAULT_LANGUAGE,\n changeLanguage: noop,\n getTranslation: () => () => \"\",\n t: () => \"\",\n})\n\nexport interface I18nProviderProps {\n children?: ReactNode\n /**\n * The text direction to apply to the application.\n *\n * If not provided, the direction will be determined by the locale.\n */\n dir?: TextDirection\n /**\n * The formats to pass to the `intlMessageFormat` instance.\n */\n formats?: Formats\n /**\n * The internationalization messages to apply to the application.\n *\n * This prop expects a dictionary object where the keys are locale strings (e.g., \"en-US\").\n */\n intl?: Dict\n /**\n * The options to pass to the `intlMessageFormat` instance.\n */\n intlMessageFormatOptions?: Options\n /**\n * The locale to apply to the application.\n *\n * If not provided, the locale will be determined by the browser.\n */\n locale?: AnyString | Locale\n}\n\nexport const I18nProvider: FC<I18nProviderProps> = ({\n children,\n dir: forcedDir,\n formats,\n intl = INTL as Dict,\n intlMessageFormatOptions,\n locale: forcedLocale,\n}) => {\n const [language, setLanguage] = useState(getLanguage(forcedLocale, forcedDir))\n const controlled = !isUndefined(forcedLocale)\n const { locale } = language\n\n const messages = useMemo(() => intl[locale], [intl, locale])\n\n const changeSystemLanguage = useCallback(() => {\n setLanguage(getLanguage())\n }, [])\n\n const changeLanguage = useCallback((locale?: string, dir?: TextDirection) => {\n setLanguage(getLanguage(locale, dir))\n }, [])\n\n const getValue = useCallback(\n (path: number | string) => {\n const value = get<string | undefined>(messages, path)\n\n if (!isUndefined(value)) {\n return value\n } else {\n path = path.toString().replace(/^[^.]+\\./g, \"\")\n\n return get<string | undefined>(messages, path)\n }\n },\n [messages],\n )\n\n const getTranslation = useCallback(\n (key?: IntlKey) =>\n <Y extends IntlPath>(\n path: Y,\n replaceValues?: IcuArgs<Value<IntlData, Y>, IntlPath>,\n ) => {\n const value = getValue(key ? `${key}.${path}` : path) ?? path\n\n if (isUndefined(replaceValues)) return value\n\n try {\n const resolvedReplaceValues = Object.entries(replaceValues).reduce<{\n [key: string]: any\n }>((prev, [key, pathOrValue]) => {\n if (isString(pathOrValue)) {\n const resolvedPathOrValue = String(pathOrValue)\n const value =\n getValue(\n key ? `${key}.${resolvedPathOrValue}` : resolvedPathOrValue,\n ) ?? resolvedPathOrValue\n\n prev[key] = value\n } else {\n prev[key] = pathOrValue\n }\n\n return prev\n }, {})\n\n const message = new IntlMessageFormat(\n value,\n locale,\n formats,\n intlMessageFormatOptions,\n )\n\n return message.format(resolvedReplaceValues) as string\n } catch (e) {\n if (e instanceof Error) console.warn(e.message)\n\n return value\n }\n },\n [getValue, locale, formats, intlMessageFormatOptions],\n )\n\n const value = useMemo(() => {\n const rest = { changeLanguage, getTranslation, t: getTranslation() }\n\n return { ...language, ...rest }\n }, [changeLanguage, getTranslation, language])\n\n useEffect(() => {\n if (controlled) return\n\n window.addEventListener(\"languagechange\", changeSystemLanguage)\n\n return () => {\n window.removeEventListener(\"languagechange\", changeSystemLanguage)\n }\n }, [controlled, changeSystemLanguage])\n\n useUpdateEffect(() => {\n setLanguage(getLanguage(forcedLocale, forcedDir))\n }, [forcedLocale, forcedDir])\n\n return <I18nContext value={value}>{children}</I18nContext>\n}\n\nexport function useI18n(): I18nContext\n\nexport function useI18n<Y extends IntlKey>(\n key: Y,\n): I18nContext<IntlData[Y], Path<IntlData[Y]>>\n\nexport function useI18n<Y extends IntlKey>(key?: Y) {\n const context = useContext(I18nContext)\n\n const translation = useCallback(\n <M extends Path<IntlData[Y]>>(\n path: M,\n replaceValues?: IcuArgs<\n Value<IntlData[Y], M>,\n IntlPath | Path<IntlData[Y]>\n >,\n ) => context.getTranslation(key)(path as any, replaceValues as any),\n [key, context],\n )\n\n if (isEmptyObject(context))\n return {\n ...DEFAULT_LANGUAGE,\n changeLanguage: noop,\n t: () => \"\",\n }\n\n if (key) return { ...context, t: translation }\n else return context\n}\n"],"mappings":";;;;;;;;;AAmCA,MAAM,mBAA6B;CACjC,KAAA;CACA,QAAQ;AACV;AAEA,MAAa,UAAU,OAAO,KAAKA,YAAI;AAEvC,SAAgB,YAAY,QAAiB,KAA+B;CAC1E,YAAA,GAAA,cAAA,WAAA,CAAsB,IAAI,UAAU,WAAW;CAE/C,IAAI;EACF,KAAK,eAAe,mBAAmB,CAAC,MAAM,CAAC;CACjD,SAAS,MAAM;EACb,SAAS;CACX;CAEA,SAAA,GAAA,cAAA,MAAA,CAAc,MAAM,IAAI,QAAQ;CAEhC,OAAO;EAAE;EAAK;CAAO;AACvB;AA0BA,MAAa,cAAc,cAA2B;CACpD,GAAG;CACH,gBAAgBC,cAAAA;CAChB,4BAA4B;CAC5B,SAAS;AACX,CAAC;AAgCD,MAAa,gBAAuC,EAClD,UACA,KAAK,WACL,SACA,OAAOD,cACP,0BACA,QAAQ,mBACJ;CACJ,MAAM,CAAC,UAAU,eAAe,SAAS,YAAY,cAAc,SAAS,CAAC;CAC7E,MAAM,aAAa,EAAA,GAAA,cAAA,YAAA,CAAa,YAAY;CAC5C,MAAM,EAAE,WAAW;CAEnB,MAAM,WAAW,cAAc,KAAK,SAAS,CAAC,MAAM,MAAM,CAAC;CAE3D,MAAM,uBAAuB,kBAAkB;EAC7C,YAAY,YAAY,CAAC;CAC3B,GAAG,CAAC,CAAC;CAEL,MAAM,iBAAiB,aAAa,QAAiB,QAAwB;EAC3E,YAAY,YAAY,QAAQ,GAAG,CAAC;CACtC,GAAG,CAAC,CAAC;CAEL,MAAM,WAAW,aACd,SAA0B;EACzB,MAAM,SAAA,GAAA,cAAA,kBAAA,CAAgC,UAAU,IAAI;EAEpD,IAAI,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK,GACpB,OAAO;OACF;GACL,OAAO,KAAK,SAAS,CAAC,CAAC,QAAQ,aAAa,EAAE;GAE9C,QAAA,GAAA,cAAA,kBAAA,CAA+B,UAAU,IAAI;EAC/C;CACF,GACA,CAAC,QAAQ,CACX;CAEA,MAAM,iBAAiB,aACpB,SAEG,MACA,kBACG;EACH,MAAM,QAAQ,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,IAAI,KAAK;EAEzD,KAAA,GAAA,cAAA,YAAA,CAAgB,aAAa,GAAG,OAAO;EAEvC,IAAI;GACF,MAAM,wBAAwB,OAAO,QAAQ,aAAa,CAAC,CAAC,QAExD,MAAM,CAAC,KAAK,iBAAiB;IAC/B,KAAA,GAAA,cAAA,SAAA,CAAa,WAAW,GAAG;KACzB,MAAM,sBAAsB,OAAO,WAAW;KAM9C,KAAK,OAJH,SACE,MAAM,GAAG,IAAI,GAAG,wBAAwB,mBAC1C,KAAK;IAGT,OACE,KAAK,OAAO;IAGd,OAAO;GACT,GAAG,CAAC,CAAC;GASL,OAAO,IAPa,kBAClB,OACA,QACA,SACA,wBAGW,CAAC,CAAC,OAAO,qBAAqB;EAC7C,SAAS,GAAG;GACV,IAAI,aAAa,OAAO,QAAQ,KAAK,EAAE,OAAO;GAE9C,OAAO;EACT;CACF,GACF;EAAC;EAAU;EAAQ;EAAS;CAAwB,CACtD;CAEA,MAAM,QAAQ,cAAc;EAC1B,MAAM,OAAO;GAAE;GAAgB;GAAgB,GAAG,eAAe;EAAE;EAEnE,OAAO;GAAE,GAAG;GAAU,GAAG;EAAK;CAChC,GAAG;EAAC;EAAgB;EAAgB;CAAQ,CAAC;CAE7C,gBAAgB;EACd,IAAI,YAAY;EAEhB,OAAO,iBAAiB,kBAAkB,oBAAoB;EAE9D,aAAa;GACX,OAAO,oBAAoB,kBAAkB,oBAAoB;EACnE;CACF,GAAG,CAAC,YAAY,oBAAoB,CAAC;CAErC,sBAAsB;EACpB,YAAY,YAAY,cAAc,SAAS,CAAC;CAClD,GAAG,CAAC,cAAc,SAAS,CAAC;CAE5B,OAAO,oBAAC,aAAD;EAAoB;EAAQ;CAAsB,CAAA;AAC3D;AAQA,SAAgB,QAA2B,KAAS;CAClD,MAAM,UAAU,WAAW,WAAW;CAEtC,MAAM,cAAc,aAEhB,MACA,kBAIG,QAAQ,eAAe,GAAG,CAAC,CAAC,MAAa,aAAoB,GAClE,CAAC,KAAK,OAAO,CACf;CAEA,KAAA,GAAA,cAAA,cAAA,CAAkB,OAAO,GACvB,OAAO;EACL,GAAG;EACH,gBAAgBC,cAAAA;EAChB,SAAS;CACX;CAEF,IAAI,KAAK,OAAO;EAAE,GAAG;EAAS,GAAG;CAAY;MACxC,OAAO;AACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"children.js","names":["isValidElement"],"sources":["../../../src/utils/children.tsx"],"sourcesContent":["import {\n isArray,\n isEmpty,\n isNumber,\n isString,\n isUndefined,\n} from \"@yamada-ui/utils\"\nimport * as React from \"react\"\n\nexport function getValidChildren(\n children: React.ReactNode,\n): React.ReactElement<any>[] {\n return React.Children.toArray(children).filter((child) =>\n React.isValidElement(child),\n )\n}\n\nexport function useValidChildren(children: React.ReactNode) {\n return React.useMemo(() => getValidChildren(children), [children])\n}\n\nexport function isValidElement(child: any): child is React.ReactNode {\n return React.isValidElement(child) || isString(child) || isNumber(child)\n}\n\nexport function isSomeDisplayName(a: any, b: any): boolean {\n if (isUndefined(a) || isUndefined(b)) return false\n\n if (isArray(a)) {\n if (a.includes(b)) return true\n if (!!b.displayName && a.includes(b.displayName)) return true\n if (!!b.name && a.includes(b.name)) return true\n } else {\n if (a === b) return true\n if (!!a.displayName && !!b.displayName && a.displayName === b.displayName)\n return true\n if (!!a.name && !!b.name && a.name === b.name) return true\n if (!!a.displayName && !!b.name && a.displayName === b.name) return true\n if (!!a.name && !!b.displayName && a.name === b.displayName) return true\n }\n\n return false\n}\n\nexport function isSomeElement(a: any, b: any): boolean {\n if (isUndefined(a) || isUndefined(b)) return false\n if (a === b) return true\n if (isSomeDisplayName(a, b)) return true\n\n a = a._payload?.value\n\n if (isUndefined(a)) return false\n if (isSomeDisplayName(a, b)) return true\n\n return false\n}\n\nexport function findChild<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y> | undefined {\n const child = children.find((child) =>\n types.some((type) => isSomeElement(child.type, type)),\n )\n\n return child as React.ReactElement<Y> | undefined\n}\n\nexport function useFindChild<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y> | undefined {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => findChild<Y>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function findChildren<Y = any, M = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): [React.ReactElement<Y> | undefined, ...React.ReactElement<M>[]] {\n const child = findChild(children, ...types)\n\n if (child) {\n return children.sort((a, b) => {\n if (types.some((type) => isSomeElement(a.type, type))) {\n return -1\n } else if (types.some((type) => isSomeElement(b.type, type))) {\n return 1\n } else {\n return 0\n }\n }) as [React.ReactElement<Y> | undefined, ...React.ReactElement<M>[]]\n } else {\n return [undefined, ...(children as React.ReactElement<M>[])]\n }\n}\n\nexport function useFindChildren<Y = any, M = any>(\n children: React.ReactElement<M>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): [React.ReactElement<Y> | undefined, ...React.ReactElement<M>[]] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => findChildren<Y, M>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function includesChildren(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): boolean {\n return children.some((child) => {\n if (types.some((type) => isSomeElement(child.type, type))) return true\n\n const children = getValidChildren(child.props.children)\n\n return children.length ? includesChildren(children, ...types) : false\n })\n}\n\nexport function useIncludesChildren(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): boolean {\n return React.useMemo(\n () => includesChildren(children, ...types),\n [children, types],\n )\n}\n\nexport function omitChildren<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n return children.filter((child) =>\n types.every((type) => !isSomeElement(child.type, type)),\n ) as React.ReactElement<Y>[]\n}\n\nexport function useOmitChildren<Y = any>(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => omitChildren<Y>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function pickChildren<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n return children.filter((child) =>\n types.some((type) => isSomeElement(child.type, type)),\n ) as React.ReactElement<Y>[]\n}\n\nexport function usePickChildren<Y = any>(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => pickChildren<Y>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function splitChildren<Y = any, M = any>(\n children: React.ReactNode,\n ...types: (\n | (React.JSXElementConstructor<any> | string)[]\n | React.JSXElementConstructor<any>\n | string\n )[]\n): [\n React.ReactElement<M>[] | React.ReactNode,\n ...(React.ReactElement<Y>[] | undefined)[],\n] {\n const validChildren = getValidChildren(children)\n\n if (isEmpty(validChildren)) return [children]\n\n const pickedChildren = types.map((types) => {\n if (isArray(types)) {\n const pickedChildren = pickChildren(validChildren, ...types)\n\n return !isEmpty(pickedChildren) ? pickedChildren : undefined\n } else {\n const pickedChildren = pickChildren(validChildren, types)\n\n return !isEmpty(pickedChildren) ? pickedChildren : undefined\n }\n })\n\n const omittedChildren = omitChildren(validChildren, ...types.flat())\n\n return [omittedChildren, ...pickedChildren] as const\n}\n\nexport function useSplitChildren<Y = any, M = any>(\n children: React.ReactNode,\n ...types: (\n | (React.JSXElementConstructor<any> | string)[]\n | React.JSXElementConstructor<any>\n | string\n )[]\n): [\n React.ReactElement<M>[] | React.ReactNode,\n ...(React.ReactElement<Y>[] | undefined)[],\n] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => splitChildren<Y, M>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport const wrapOrPassProps = <Y extends React.PropsWithChildren>(\n Component: React.FC<Y>,\n nodeOrProps: React.ReactNode | Y,\n additionalProps?: Y,\n) => {\n if (isUndefined(nodeOrProps)) {\n return null\n } else if (isValidElement(nodeOrProps)) {\n additionalProps ??= {} as Y\n additionalProps.children = nodeOrProps\n\n return <Component {...additionalProps} />\n } else {\n return <Component {...additionalProps} {...nodeOrProps} />\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"children.js","names":["isValidElement"],"sources":["../../../src/utils/children.tsx"],"sourcesContent":["import {\n isArray,\n isEmpty,\n isNumber,\n isString,\n isUndefined,\n} from \"@yamada-ui/utils\"\nimport * as React from \"react\"\n\nexport function getValidChildren(\n children: React.ReactNode,\n): React.ReactElement<any>[] {\n return React.Children.toArray(children).filter((child) =>\n React.isValidElement(child),\n )\n}\n\nexport function useValidChildren(children: React.ReactNode) {\n return React.useMemo(() => getValidChildren(children), [children])\n}\n\nexport function isValidElement(child: any): child is React.ReactNode {\n return React.isValidElement(child) || isString(child) || isNumber(child)\n}\n\nexport function isSomeDisplayName(a: any, b: any): boolean {\n if (isUndefined(a) || isUndefined(b)) return false\n\n if (isArray(a)) {\n if (a.includes(b)) return true\n if (!!b.displayName && a.includes(b.displayName)) return true\n if (!!b.name && a.includes(b.name)) return true\n } else {\n if (a === b) return true\n if (!!a.displayName && !!b.displayName && a.displayName === b.displayName)\n return true\n if (!!a.name && !!b.name && a.name === b.name) return true\n if (!!a.displayName && !!b.name && a.displayName === b.name) return true\n if (!!a.name && !!b.displayName && a.name === b.displayName) return true\n }\n\n return false\n}\n\nexport function isSomeElement(a: any, b: any): boolean {\n if (isUndefined(a) || isUndefined(b)) return false\n if (a === b) return true\n if (isSomeDisplayName(a, b)) return true\n\n a = a._payload?.value\n\n if (isUndefined(a)) return false\n if (isSomeDisplayName(a, b)) return true\n\n return false\n}\n\nexport function findChild<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y> | undefined {\n const child = children.find((child) =>\n types.some((type) => isSomeElement(child.type, type)),\n )\n\n return child as React.ReactElement<Y> | undefined\n}\n\nexport function useFindChild<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y> | undefined {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => findChild<Y>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function findChildren<Y = any, M = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): [React.ReactElement<Y> | undefined, ...React.ReactElement<M>[]] {\n const child = findChild(children, ...types)\n\n if (child)\n return children.sort((a, b) => {\n if (types.some((type) => isSomeElement(a.type, type))) return -1\n else if (types.some((type) => isSomeElement(b.type, type))) return 1\n else return 0\n }) as [React.ReactElement<Y> | undefined, ...React.ReactElement<M>[]]\n else return [undefined, ...(children as React.ReactElement<M>[])]\n}\n\nexport function useFindChildren<Y = any, M = any>(\n children: React.ReactElement<M>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): [React.ReactElement<Y> | undefined, ...React.ReactElement<M>[]] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => findChildren<Y, M>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function includesChildren(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): boolean {\n return children.some((child) => {\n if (types.some((type) => isSomeElement(child.type, type))) return true\n\n const children = getValidChildren(child.props.children)\n\n return children.length ? includesChildren(children, ...types) : false\n })\n}\n\nexport function useIncludesChildren(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): boolean {\n return React.useMemo(\n () => includesChildren(children, ...types),\n [children, types],\n )\n}\n\nexport function omitChildren<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n return children.filter((child) =>\n types.every((type) => !isSomeElement(child.type, type)),\n ) as React.ReactElement<Y>[]\n}\n\nexport function useOmitChildren<Y = any>(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => omitChildren<Y>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function pickChildren<Y = any>(\n children: React.ReactElement[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n return children.filter((child) =>\n types.some((type) => isSomeElement(child.type, type)),\n ) as React.ReactElement<Y>[]\n}\n\nexport function usePickChildren<Y = any>(\n children: React.ReactElement<any>[],\n ...types: (React.JSXElementConstructor<any> | string)[]\n): React.ReactElement<Y>[] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => pickChildren<Y>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport function splitChildren<Y = any, M = any>(\n children: React.ReactNode,\n ...types: (\n | (React.JSXElementConstructor<any> | string)[]\n | React.JSXElementConstructor<any>\n | string\n )[]\n): [\n React.ReactElement<M>[] | React.ReactNode,\n ...(React.ReactElement<Y>[] | undefined)[],\n] {\n const validChildren = getValidChildren(children)\n\n if (isEmpty(validChildren)) return [children]\n\n const pickedChildren = types.map((types) => {\n if (isArray(types)) {\n const pickedChildren = pickChildren(validChildren, ...types)\n\n return !isEmpty(pickedChildren) ? pickedChildren : undefined\n } else {\n const pickedChildren = pickChildren(validChildren, types)\n\n return !isEmpty(pickedChildren) ? pickedChildren : undefined\n }\n })\n\n const omittedChildren = omitChildren(validChildren, ...types.flat())\n\n return [omittedChildren, ...pickedChildren] as const\n}\n\nexport function useSplitChildren<Y = any, M = any>(\n children: React.ReactNode,\n ...types: (\n | (React.JSXElementConstructor<any> | string)[]\n | React.JSXElementConstructor<any>\n | string\n )[]\n): [\n React.ReactElement<M>[] | React.ReactNode,\n ...(React.ReactElement<Y>[] | undefined)[],\n] {\n const typesRef = React.useRef(types)\n\n return React.useMemo(\n () => splitChildren<Y, M>(children, ...typesRef.current),\n [children],\n )\n}\n\nexport const wrapOrPassProps = <Y extends React.PropsWithChildren>(\n Component: React.FC<Y>,\n nodeOrProps: React.ReactNode | Y,\n additionalProps?: Y,\n) => {\n if (isUndefined(nodeOrProps)) {\n return null\n } else if (isValidElement(nodeOrProps)) {\n additionalProps ??= {} as Y\n additionalProps.children = nodeOrProps\n\n return <Component {...additionalProps} />\n } else {\n return <Component {...additionalProps} {...nodeOrProps} />\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","names":[],"sources":["../../../src/utils/dom.ts"],"sourcesContent":["import type { AnyString } from \"@yamada-ui/utils\"\nimport * as React from \"react\"\n\ntype KeyboardNavigationKey =\n | \"ArrowDown\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"ArrowUp\"\n | \"End\"\n | \"Home\"\n | \"PageDown\"\n | \"PageUp\"\n\ntype KeyboardControlKey =\n | \"Alt\"\n | \"Backspace\"\n | \"CapsLock\"\n | \"Control\"\n | \"Delete\"\n | \"Enter\"\n | \"Escape\"\n | \"Insert\"\n | \"Meta\"\n | \"NumLock\"\n | \"Pause\"\n | \"PrintScreen\"\n | \"ScrollLock\"\n | \"Shift\"\n | \"Space\"\n | \"Tab\"\n\ntype KeyboardFunctionKey = \"Fn\" | \"FnLock\" | `F${number}`\n\ntype KeyboardKey =\n | AnyString\n | KeyboardControlKey\n | KeyboardFunctionKey\n | KeyboardNavigationKey\n\nexport function runKeyAction<Y>(\n ev: React.KeyboardEvent<Y>,\n actions: { [key in KeyboardKey]?: React.KeyboardEventHandler<Y> },\n { preventDefault = true }: { preventDefault?: boolean } = {},\n) {\n if (ev.key === \" \") ev.key = ev.code\n const action = actions[ev.key]\n\n if (!action) return\n\n if (preventDefault) ev.preventDefault()\n\n action(ev)\n}\n\nexport function isComposing(\n ev: React.ChangeEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n): boolean {\n if (\"keyCode\" in ev) {\n return ev.nativeEvent.isComposing || ev.keyCode === 229\n } else if (ev.nativeEvent instanceof InputEvent) {\n return ev.nativeEvent.isComposing\n } else {\n return false\n }\n}\n\nexport function useAttributeObserver(\n ref: React.RefObject<HTMLElement | null>,\n attributeFilter: string[],\n enabled: boolean,\n func: () => void,\n) {\n React.useEffect(() => {\n if (!ref.current || !enabled) return\n\n const ownerDocument = ref.current.ownerDocument.defaultView ?? window\n\n const observer = new ownerDocument.MutationObserver((changes) => {\n for (const { type, attributeName } of changes) {\n if (type !== \"attributes\") continue\n if (!attributeName) continue\n\n if (attributeFilter.includes(attributeName)) func()\n }\n })\n\n observer.observe(ref.current, { attributeFilter, attributes: true })\n\n return () => observer.disconnect()\n })\n}\n\nexport function getEventRelatedTarget(ev: React.FocusEvent | React.MouseEvent) {\n return (ev.relatedTarget ??\n ev.currentTarget.ownerDocument.activeElement) as HTMLElement | null\n}\n\nconst visuallyHiddenStyle = {\n border: \"0px\",\n clipPath: \"rect(0px 0px 0px 0px)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0px\",\n position: \"absolute\",\n whiteSpace: \"nowrap\",\n width: \"1px\",\n} satisfies React.CSSProperties\n\nexport const visuallyHiddenAttributes = {\n style: visuallyHiddenStyle,\n \"aria-hidden\": true,\n tabIndex: -1,\n} satisfies React.HTMLAttributes<HTMLElement>\n\nexport function* useIds() {\n const id = React.useId()\n\n for (let i = 0; ; i++) {\n yield `${id}-${i}`\n }\n}\n"],"mappings":";;AAuCA,SAAgB,aACd,IACA,SACA,EAAE,iBAAiB,SAAuC,CAAC,GAC3D;CACA,IAAI,GAAG,QAAQ,KAAK,GAAG,MAAM,GAAG;CAChC,MAAM,SAAS,QAAQ,GAAG;CAE1B,IAAI,CAAC,QAAQ;CAEb,IAAI,gBAAgB,GAAG,eAAe;CAEtC,OAAO,EAAE;AACX;AAEA,SAAgB,YACd,IACS;CACT,IAAI,aAAa,IACf,OAAO,GAAG,YAAY,eAAe,GAAG,YAAY;MAC/C,IAAI,GAAG,uBAAuB,YACnC,OAAO,GAAG,YAAY;MAEtB,OAAO;AAEX;AAEA,SAAgB,qBACd,KACA,iBACA,SACA,MACA;CACA,MAAM,gBAAgB;EACpB,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS;EAI9B,MAAM,WAAW,KAFK,IAAI,QAAQ,cAAc,eAAe,OAAA,CAE5B,kBAAkB,YAAY;GAC/D,KAAK,MAAM,EAAE,MAAM,mBAAmB,SAAS;IAC7C,IAAI,SAAS,cAAc;IAC3B,IAAI,CAAC,eAAe;IAEpB,IAAI,gBAAgB,SAAS,aAAa,GAAG,KAAK;GACpD;EACF,CAAC;EAED,SAAS,QAAQ,IAAI,SAAS;GAAE;GAAiB,YAAY;EAAK,CAAC;EAEnE,aAAa,SAAS,WAAW;CACnC,CAAC;AACH;AAEA,SAAgB,sBAAsB,IAAyC;CAC7E,OAAQ,GAAG,iBACT,GAAG,cAAc,cAAc;AACnC;AAcA,MAAa,2BAA2B;CACtC,OAAO;EAZP,QAAQ;EACR,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;CAIA;CACP,eAAe;CACf,UAAU;AACZ;AAEA,UAAiB,SAAS;CACxB,MAAM,KAAK,MAAM,MAAM;CAEvB,KAAK,IAAI,IAAI,IAAK,KAChB,MAAM,GAAG,GAAG,GAAG;AAEnB"}
1
+ {"version":3,"file":"dom.js","names":[],"sources":["../../../src/utils/dom.ts"],"sourcesContent":["import type { AnyString } from \"@yamada-ui/utils\"\nimport * as React from \"react\"\n\ntype KeyboardNavigationKey =\n | \"ArrowDown\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"ArrowUp\"\n | \"End\"\n | \"Home\"\n | \"PageDown\"\n | \"PageUp\"\n\ntype KeyboardControlKey =\n | \"Alt\"\n | \"Backspace\"\n | \"CapsLock\"\n | \"Control\"\n | \"Delete\"\n | \"Enter\"\n | \"Escape\"\n | \"Insert\"\n | \"Meta\"\n | \"NumLock\"\n | \"Pause\"\n | \"PrintScreen\"\n | \"ScrollLock\"\n | \"Shift\"\n | \"Space\"\n | \"Tab\"\n\ntype KeyboardFunctionKey = \"Fn\" | \"FnLock\" | `F${number}`\n\ntype KeyboardKey =\n | AnyString\n | KeyboardControlKey\n | KeyboardFunctionKey\n | KeyboardNavigationKey\n\nexport function runKeyAction<Y>(\n ev: React.KeyboardEvent<Y>,\n actions: { [key in KeyboardKey]?: React.KeyboardEventHandler<Y> },\n { preventDefault = true }: { preventDefault?: boolean } = {},\n) {\n if (ev.key === \" \") ev.key = ev.code\n const action = actions[ev.key]\n\n if (!action) return\n\n if (preventDefault) ev.preventDefault()\n\n action(ev)\n}\n\nexport function isComposing(\n ev: React.ChangeEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n): boolean {\n if (\"keyCode\" in ev) return ev.nativeEvent.isComposing || ev.keyCode === 229\n else if (ev.nativeEvent instanceof InputEvent)\n return ev.nativeEvent.isComposing\n else return false\n}\n\nexport function useAttributeObserver(\n ref: React.RefObject<HTMLElement | null>,\n attributeFilter: string[],\n enabled: boolean,\n func: () => void,\n) {\n React.useEffect(() => {\n if (!ref.current || !enabled) return\n\n const ownerDocument = ref.current.ownerDocument.defaultView ?? window\n\n const observer = new ownerDocument.MutationObserver((changes) => {\n for (const { type, attributeName } of changes) {\n if (type !== \"attributes\") continue\n if (!attributeName) continue\n\n if (attributeFilter.includes(attributeName)) func()\n }\n })\n\n observer.observe(ref.current, { attributeFilter, attributes: true })\n\n return () => observer.disconnect()\n })\n}\n\nexport function getEventRelatedTarget(ev: React.FocusEvent | React.MouseEvent) {\n return (ev.relatedTarget ??\n ev.currentTarget.ownerDocument.activeElement) as HTMLElement | null\n}\n\nconst visuallyHiddenStyle = {\n border: \"0px\",\n clipPath: \"rect(0px 0px 0px 0px)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0px\",\n position: \"absolute\",\n whiteSpace: \"nowrap\",\n width: \"1px\",\n} satisfies React.CSSProperties\n\nexport const visuallyHiddenAttributes = {\n style: visuallyHiddenStyle,\n \"aria-hidden\": true,\n tabIndex: -1,\n} satisfies React.HTMLAttributes<HTMLElement>\n\nexport function* useIds() {\n const id = React.useId()\n\n for (let i = 0; ; i++) yield `${id}-${i}`\n}\n"],"mappings":";;AAuCA,SAAgB,aACd,IACA,SACA,EAAE,iBAAiB,SAAuC,CAAC,GAC3D;CACA,IAAI,GAAG,QAAQ,KAAK,GAAG,MAAM,GAAG;CAChC,MAAM,SAAS,QAAQ,GAAG;CAE1B,IAAI,CAAC,QAAQ;CAEb,IAAI,gBAAgB,GAAG,eAAe;CAEtC,OAAO,EAAE;AACX;AAEA,SAAgB,YACd,IACS;CACT,IAAI,aAAa,IAAI,OAAO,GAAG,YAAY,eAAe,GAAG,YAAY;MACpE,IAAI,GAAG,uBAAuB,YACjC,OAAO,GAAG,YAAY;MACnB,OAAO;AACd;AAEA,SAAgB,qBACd,KACA,iBACA,SACA,MACA;CACA,MAAM,gBAAgB;EACpB,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS;EAI9B,MAAM,WAAW,KAFK,IAAI,QAAQ,cAAc,eAAe,OAAA,CAE5B,kBAAkB,YAAY;GAC/D,KAAK,MAAM,EAAE,MAAM,mBAAmB,SAAS;IAC7C,IAAI,SAAS,cAAc;IAC3B,IAAI,CAAC,eAAe;IAEpB,IAAI,gBAAgB,SAAS,aAAa,GAAG,KAAK;GACpD;EACF,CAAC;EAED,SAAS,QAAQ,IAAI,SAAS;GAAE;GAAiB,YAAY;EAAK,CAAC;EAEnE,aAAa,SAAS,WAAW;CACnC,CAAC;AACH;AAEA,SAAgB,sBAAsB,IAAyC;CAC7E,OAAQ,GAAG,iBACT,GAAG,cAAc,cAAc;AACnC;AAcA,MAAa,2BAA2B;CACtC,OAAO;EAZP,QAAQ;EACR,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,SAAS;EACT,UAAU;EACV,YAAY;EACZ,OAAO;CAIA;CACP,eAAe;CACf,UAAU;AACZ;AAEA,UAAiB,SAAS;CACxB,MAAM,KAAK,MAAM,MAAM;CAEvB,KAAK,IAAI,IAAI,IAAK,KAAK,MAAM,GAAG,GAAG,GAAG;AACxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","names":[],"sources":["../../../src/utils/store.ts"],"sourcesContent":["\"use client\"\n\nimport type { Path, Value } from \"@yamada-ui/utils\"\nimport {\n getMemoizedObject,\n isArray,\n isObject,\n isUndefined,\n runIfFn,\n toArray,\n} from \"@yamada-ui/utils\"\nimport { useSyncExternalStore } from \"react\"\n\nconst DEFAULT_IDENTIFIER = \"default\"\n\ninterface Subscribe {\n (listener: () => void): () => void\n}\n\ninterface Store<Y> {\n queue: Map<string, (() => void)[]>\n ref: { current: Y }\n get: () => Y\n set: (nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) => void\n update: (key?: string | string[]) => void\n key?: string\n}\n\ntype IndexOrPath<Y> = Y extends any[]\n ? number\n : Y extends object\n ? Path<Y>\n : undefined\n\ntype ReturnArrayValue<Y extends any[], D> = D extends number\n ? undefined | Y[D]\n : Y\n\ntype ReturnObjectValue<Y extends object, D> = D extends string ? Value<Y, D> : Y\n\ntype ReturnValue<Y, D> = Y extends any[]\n ? ReturnArrayValue<Y, D>\n : Y extends object\n ? ReturnObjectValue<Y, D>\n : Y\n\ninterface UseStore<Y> {\n <D extends IndexOrPath<Y>>(path?: D, key?: string): ReturnValue<Y, D>\n}\n\ninterface CreateMethod<Y, M extends Function> {\n (store: Store<Y>): M\n}\n\ntype Methods<Y, M extends CustomMethods<Y>> = Omit<\n Store<Y>,\n \"key\" | \"update\"\n> & {\n [D in keyof M]: ReturnType<M[D]>\n} & { update: () => void }\n\ninterface CustomMethods<Y> {\n [key: string]: CreateMethod<Y, (...args: any[]) => Promise<void> | void>\n}\n\ninterface CreateStoreOptions<Y> {\n proxyHandler?: ProxyHandler<{ current: Y }>\n subscribe?: CreateMethod<Y, Subscribe>\n}\n\nexport function createStore<Y, M extends CustomMethods<Y>>(\n initialState: (() => Y) | Y,\n additionalMethods?: M,\n options: CreateStoreOptions<Y> = {},\n): [UseStore<Y>, Methods<Y, M>] {\n const queue = new Map<string, (() => void)[]>()\n const ref = new Proxy(\n { current: runIfFn(initialState) },\n { ...options.proxyHandler },\n )\n\n function get() {\n return ref.current\n }\n\n function executeQueue(key: string) {\n const listeners = queue.get(key) ?? []\n\n if (!listeners.length)\n console.warn(`createStore: ${key} is not subscribed.`)\n\n listeners.forEach((listener) => listener())\n }\n\n function update(key?: string | string[]) {\n if (!isUndefined(key)) {\n toArray(key).forEach(executeQueue)\n }\n\n executeQueue(DEFAULT_IDENTIFIER)\n }\n\n function set(nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) {\n ref.current = runIfFn(nextState, ref.current)\n\n update(key)\n }\n\n const methods = { ref, get, queue, set, update }\n\n function useStore<D extends IndexOrPath<Y>>(path?: D, key?: string) {\n const customSubscribe = options.subscribe?.({\n key,\n ...methods,\n })\n\n const subscribe = function (listener: () => void) {\n if (key) {\n const listeners = queue.get(key) ?? []\n\n if (listeners.length)\n console.warn(`createStore: ${key} is already subscribed.`)\n\n queue.set(key, [listener])\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(DEFAULT_IDENTIFIER, [...listeners, listener])\n }\n\n return function () {\n if (key) {\n queue.delete(key)\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(\n DEFAULT_IDENTIFIER,\n listeners.filter((fn) => fn !== listener),\n )\n }\n }\n }\n\n function getSnapshot<H extends ReturnValue<Y, D>>(): H {\n if (!isUndefined(path)) {\n if (isObject(ref.current)) {\n return getMemoizedObject(ref.current, path)\n } else if (isArray(ref.current)) {\n return ref.current[path as number] as unknown as H\n }\n }\n\n return ref.current as unknown as H\n }\n\n return useSyncExternalStore(\n customSubscribe ?? subscribe,\n getSnapshot,\n getSnapshot,\n )\n }\n\n const customMethods = Object.fromEntries(\n Object.entries(additionalMethods ?? {}).map(([key, value]) => [\n key,\n value(methods),\n ]),\n ) as { [D in keyof M]: ReturnType<M[D]> }\n\n return [useStore, { ...methods, ...customMethods }]\n}\n"],"mappings":";;;;AAaA,MAAM,qBAAqB;AAyD3B,SAAgB,YACd,cACA,mBACA,UAAiC,CAAC,GACJ;CAC9B,MAAM,wBAAQ,IAAI,IAA4B;CAC9C,MAAM,MAAM,IAAI,MACd,EAAE,SAAS,QAAQ,YAAY,EAAE,GACjC,EAAE,GAAG,QAAQ,aAAa,CAC5B;CAEA,SAAS,MAAM;EACb,OAAO,IAAI;CACb;CAEA,SAAS,aAAa,KAAa;EACjC,MAAM,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC;EAErC,IAAI,CAAC,UAAU,QACb,QAAQ,KAAK,gBAAgB,IAAI,oBAAoB;EAEvD,UAAU,SAAS,aAAa,SAAS,CAAC;CAC5C;CAEA,SAAS,OAAO,KAAyB;EACvC,IAAI,CAAC,YAAY,GAAG,GAClB,QAAQ,GAAG,CAAC,CAAC,QAAQ,YAAY;EAGnC,aAAa,kBAAkB;CACjC;CAEA,SAAS,IAAI,WAAsC,KAAyB;EAC1E,IAAI,UAAU,QAAQ,WAAW,IAAI,OAAO;EAE5C,OAAO,GAAG;CACZ;CAEA,MAAM,UAAU;EAAE;EAAK;EAAK;EAAO;EAAK;CAAO;CAE/C,SAAS,SAAmC,MAAU,KAAc;EAClE,MAAM,kBAAkB,QAAQ,YAAY;GAC1C;GACA,GAAG;EACL,CAAC;EAED,MAAM,YAAY,SAAU,UAAsB;GAChD,IAAI,KAAK;IAGP,KAFkB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAA,CAEvB,QACZ,QAAQ,KAAK,gBAAgB,IAAI,wBAAwB;IAE3D,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC;GAC3B,OAAO;IACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;IAEpD,MAAM,IAAI,oBAAoB,CAAC,GAAG,WAAW,QAAQ,CAAC;GACxD;GAEA,OAAO,WAAY;IACjB,IAAI,KACF,MAAM,OAAO,GAAG;SACX;KACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;KAEpD,MAAM,IACJ,oBACA,UAAU,QAAQ,OAAO,OAAO,QAAQ,CAC1C;IACF;GACF;EACF;EAEA,SAAS,cAA8C;GACrD,IAAI,CAAC,YAAY,IAAI;QACf,SAAS,IAAI,OAAO,GACtB,OAAO,kBAAkB,IAAI,SAAS,IAAI;SACrC,IAAI,QAAQ,IAAI,OAAO,GAC5B,OAAO,IAAI,QAAQ;GAAA;GAIvB,OAAO,IAAI;EACb;EAEA,OAAO,qBACL,mBAAmB,WACnB,aACA,WACF;CACF;CAEA,MAAM,gBAAgB,OAAO,YAC3B,OAAO,QAAQ,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAC5D,KACA,MAAM,OAAO,CACf,CAAC,CACH;CAEA,OAAO,CAAC,UAAU;EAAE,GAAG;EAAS,GAAG;CAAc,CAAC;AACpD"}
1
+ {"version":3,"file":"store.js","names":[],"sources":["../../../src/utils/store.ts"],"sourcesContent":["\"use client\"\n\nimport type { Path, Value } from \"@yamada-ui/utils\"\nimport {\n getMemoizedObject,\n isArray,\n isObject,\n isUndefined,\n runIfFn,\n toArray,\n} from \"@yamada-ui/utils\"\nimport { useSyncExternalStore } from \"react\"\n\nconst DEFAULT_IDENTIFIER = \"default\"\n\ninterface Subscribe {\n (listener: () => void): () => void\n}\n\ninterface Store<Y> {\n queue: Map<string, (() => void)[]>\n ref: { current: Y }\n get: () => Y\n set: (nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) => void\n update: (key?: string | string[]) => void\n key?: string\n}\n\ntype IndexOrPath<Y> = Y extends any[]\n ? number\n : Y extends object\n ? Path<Y>\n : undefined\n\ntype ReturnArrayValue<Y extends any[], D> = D extends number\n ? undefined | Y[D]\n : Y\n\ntype ReturnObjectValue<Y extends object, D> = D extends string ? Value<Y, D> : Y\n\ntype ReturnValue<Y, D> = Y extends any[]\n ? ReturnArrayValue<Y, D>\n : Y extends object\n ? ReturnObjectValue<Y, D>\n : Y\n\ninterface UseStore<Y> {\n <D extends IndexOrPath<Y>>(path?: D, key?: string): ReturnValue<Y, D>\n}\n\ninterface CreateMethod<Y, M extends Function> {\n (store: Store<Y>): M\n}\n\ntype Methods<Y, M extends CustomMethods<Y>> = Omit<\n Store<Y>,\n \"key\" | \"update\"\n> & {\n [D in keyof M]: ReturnType<M[D]>\n} & { update: () => void }\n\ninterface CustomMethods<Y> {\n [key: string]: CreateMethod<Y, (...args: any[]) => Promise<void> | void>\n}\n\ninterface CreateStoreOptions<Y> {\n proxyHandler?: ProxyHandler<{ current: Y }>\n subscribe?: CreateMethod<Y, Subscribe>\n}\n\nexport function createStore<Y, M extends CustomMethods<Y>>(\n initialState: (() => Y) | Y,\n additionalMethods?: M,\n options: CreateStoreOptions<Y> = {},\n): [UseStore<Y>, Methods<Y, M>] {\n const queue = new Map<string, (() => void)[]>()\n const ref = new Proxy(\n { current: runIfFn(initialState) },\n { ...options.proxyHandler },\n )\n\n function get() {\n return ref.current\n }\n\n function executeQueue(key: string) {\n const listeners = queue.get(key) ?? []\n\n if (!listeners.length)\n console.warn(`createStore: ${key} is not subscribed.`)\n\n listeners.forEach((listener) => listener())\n }\n\n function update(key?: string | string[]) {\n if (!isUndefined(key)) toArray(key).forEach(executeQueue)\n\n executeQueue(DEFAULT_IDENTIFIER)\n }\n\n function set(nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) {\n ref.current = runIfFn(nextState, ref.current)\n\n update(key)\n }\n\n const methods = { ref, get, queue, set, update }\n\n function useStore<D extends IndexOrPath<Y>>(path?: D, key?: string) {\n const customSubscribe = options.subscribe?.({\n key,\n ...methods,\n })\n\n const subscribe = function (listener: () => void) {\n if (key) {\n const listeners = queue.get(key) ?? []\n\n if (listeners.length)\n console.warn(`createStore: ${key} is already subscribed.`)\n\n queue.set(key, [listener])\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(DEFAULT_IDENTIFIER, [...listeners, listener])\n }\n\n return function () {\n if (key) {\n queue.delete(key)\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(\n DEFAULT_IDENTIFIER,\n listeners.filter((fn) => fn !== listener),\n )\n }\n }\n }\n\n function getSnapshot<H extends ReturnValue<Y, D>>(): H {\n if (!isUndefined(path))\n if (isObject(ref.current)) return getMemoizedObject(ref.current, path)\n else if (isArray(ref.current))\n return ref.current[path as number] as unknown as H\n\n return ref.current as unknown as H\n }\n\n return useSyncExternalStore(\n customSubscribe ?? subscribe,\n getSnapshot,\n getSnapshot,\n )\n }\n\n const customMethods = Object.fromEntries(\n Object.entries(additionalMethods ?? {}).map(([key, value]) => [\n key,\n value(methods),\n ]),\n ) as { [D in keyof M]: ReturnType<M[D]> }\n\n return [useStore, { ...methods, ...customMethods }]\n}\n"],"mappings":";;;;AAaA,MAAM,qBAAqB;AAyD3B,SAAgB,YACd,cACA,mBACA,UAAiC,CAAC,GACJ;CAC9B,MAAM,wBAAQ,IAAI,IAA4B;CAC9C,MAAM,MAAM,IAAI,MACd,EAAE,SAAS,QAAQ,YAAY,EAAE,GACjC,EAAE,GAAG,QAAQ,aAAa,CAC5B;CAEA,SAAS,MAAM;EACb,OAAO,IAAI;CACb;CAEA,SAAS,aAAa,KAAa;EACjC,MAAM,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC;EAErC,IAAI,CAAC,UAAU,QACb,QAAQ,KAAK,gBAAgB,IAAI,oBAAoB;EAEvD,UAAU,SAAS,aAAa,SAAS,CAAC;CAC5C;CAEA,SAAS,OAAO,KAAyB;EACvC,IAAI,CAAC,YAAY,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,QAAQ,YAAY;EAExD,aAAa,kBAAkB;CACjC;CAEA,SAAS,IAAI,WAAsC,KAAyB;EAC1E,IAAI,UAAU,QAAQ,WAAW,IAAI,OAAO;EAE5C,OAAO,GAAG;CACZ;CAEA,MAAM,UAAU;EAAE;EAAK;EAAK;EAAO;EAAK;CAAO;CAE/C,SAAS,SAAmC,MAAU,KAAc;EAClE,MAAM,kBAAkB,QAAQ,YAAY;GAC1C;GACA,GAAG;EACL,CAAC;EAED,MAAM,YAAY,SAAU,UAAsB;GAChD,IAAI,KAAK;IAGP,KAFkB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAA,CAEvB,QACZ,QAAQ,KAAK,gBAAgB,IAAI,wBAAwB;IAE3D,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC;GAC3B,OAAO;IACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;IAEpD,MAAM,IAAI,oBAAoB,CAAC,GAAG,WAAW,QAAQ,CAAC;GACxD;GAEA,OAAO,WAAY;IACjB,IAAI,KACF,MAAM,OAAO,GAAG;SACX;KACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;KAEpD,MAAM,IACJ,oBACA,UAAU,QAAQ,OAAO,OAAO,QAAQ,CAC1C;IACF;GACF;EACF;EAEA,SAAS,cAA8C;GACrD,IAAI,CAAC,YAAY,IAAI;QACf,SAAS,IAAI,OAAO,GAAG,OAAO,kBAAkB,IAAI,SAAS,IAAI;SAChE,IAAI,QAAQ,IAAI,OAAO,GAC1B,OAAO,IAAI,QAAQ;GAAA;GAEvB,OAAO,IAAI;EACb;EAEA,OAAO,qBACL,mBAAmB,WACnB,aACA,WACF;CACF;CAEA,MAAM,gBAAgB,OAAO,YAC3B,OAAO,QAAQ,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAC5D,KACA,MAAM,OAAO,CACf,CAAC,CACH;CAEA,OAAO,CAAC,UAAU;EAAE,GAAG;EAAS,GAAG;CAAc,CAAC;AACpD"}
@@ -1,7 +1,7 @@
1
1
  import { ComponentSlotStyle } from "../../core/system/index.types.js";
2
2
  import { CSSPropObject, CSSSlotObject } from "../../core/css/index.types.js";
3
3
  //#region src/components/autocomplete/autocomplete.style.d.ts
4
- declare const autocompleteStyle: ComponentSlotStyle<"input" | "label" | "option" | "content" | "icon" | "separator" | "group" | "root" | "indicator" | "field" | "empty" | "valueText", CSSPropObject<CSSSlotObject<"input" | "label" | "option" | "content" | "icon" | "separator" | "group" | "root" | "indicator" | "field" | "empty" | "valueText">>, {
4
+ declare const autocompleteStyle: ComponentSlotStyle<"input" | "label" | "option" | "content" | "group" | "separator" | "icon" | "root" | "indicator" | "field" | "empty" | "valueText", CSSPropObject<CSSSlotObject<"input" | "label" | "option" | "content" | "group" | "separator" | "icon" | "root" | "indicator" | "field" | "empty" | "valueText">>, {
5
5
  xs: {
6
6
  empty: {
7
7
  gap: "1.5";
@@ -1,7 +1,7 @@
1
1
  import { ComponentSlotStyle } from "../../core/system/index.types.js";
2
2
  import { CSSPropObject, CSSSlotObject } from "../../core/css/index.types.js";
3
3
  //#region src/components/breadcrumb/breadcrumb.style.d.ts
4
- declare const breadcrumbStyle: ComponentSlotStyle<"link" | "ellipsis" | "separator" | "list" | "root" | "item", CSSPropObject<CSSSlotObject<"link" | "ellipsis" | "separator" | "list" | "root" | "item">>, {
4
+ declare const breadcrumbStyle: ComponentSlotStyle<"link" | "list" | "separator" | "ellipsis" | "root" | "item", CSSPropObject<CSSSlotObject<"link" | "list" | "separator" | "ellipsis" | "root" | "item">>, {
5
5
  sm: {
6
6
  list: {
7
7
  fontSize: "sm";