@yamada-ui/react 2.1.2 → 2.1.3-dev-20260312112728

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 (235) hide show
  1. package/dist/cjs/components/accordion/accordion.cjs +0 -4
  2. package/dist/cjs/components/accordion/accordion.cjs.map +1 -1
  3. package/dist/cjs/components/accordion/use-accordion.cjs.map +1 -1
  4. package/dist/cjs/components/infinite-scroll-area/infinite-scroll-area.cjs +2 -2
  5. package/dist/cjs/components/infinite-scroll-area/infinite-scroll-area.cjs.map +1 -1
  6. package/dist/cjs/components/infinite-scroll-area/use-infinite-scroll.cjs +12 -17
  7. package/dist/cjs/components/infinite-scroll-area/use-infinite-scroll.cjs.map +1 -1
  8. package/dist/esm/components/accordion/accordion.js +0 -4
  9. package/dist/esm/components/accordion/accordion.js.map +1 -1
  10. package/dist/esm/components/accordion/use-accordion.js.map +1 -1
  11. package/dist/esm/components/infinite-scroll-area/infinite-scroll-area.js +2 -2
  12. package/dist/esm/components/infinite-scroll-area/infinite-scroll-area.js.map +1 -1
  13. package/dist/esm/components/infinite-scroll-area/use-infinite-scroll.js +13 -18
  14. package/dist/esm/components/infinite-scroll-area/use-infinite-scroll.js.map +1 -1
  15. package/dist/types/components/accordion/accordion.d.ts +2 -2
  16. package/dist/types/components/accordion/accordion.style.d.ts +1 -1
  17. package/dist/types/components/accordion/use-accordion.d.ts +11 -11
  18. package/dist/types/components/airy/airy.d.ts +2 -2
  19. package/dist/types/components/alert/alert.d.ts +2 -2
  20. package/dist/types/components/alpha-slider/alpha-slider.d.ts +2 -2
  21. package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +2 -2
  22. package/dist/types/components/autocomplete/autocomplete.d.ts +2 -2
  23. package/dist/types/components/autocomplete/autocomplete.style.d.ts +1 -1
  24. package/dist/types/components/autocomplete/use-autocomplete.d.ts +5 -5
  25. package/dist/types/components/avatar/avatar.d.ts +5 -5
  26. package/dist/types/components/avatar/avatar.style.d.ts +1 -1
  27. package/dist/types/components/avatar/use-avatar-group.d.ts +2 -2
  28. package/dist/types/components/badge/badge.d.ts +2 -2
  29. package/dist/types/components/bleed/bleed.d.ts +2 -2
  30. package/dist/types/components/blockquote/blockquote.d.ts +2 -2
  31. package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
  32. package/dist/types/components/breadcrumb/breadcrumb.style.d.ts +1 -1
  33. package/dist/types/components/breadcrumb/use-breadcrumb.d.ts +2 -2
  34. package/dist/types/components/button/button.d.ts +2 -2
  35. package/dist/types/components/button/icon-button.d.ts +2 -2
  36. package/dist/types/components/calendar/calendar.d.ts +2 -2
  37. package/dist/types/components/calendar/calendar.style.d.ts +2 -2
  38. package/dist/types/components/calendar/use-calendar.d.ts +8 -8
  39. package/dist/types/components/card/card.d.ts +2 -2
  40. package/dist/types/components/carousel/carousel.d.ts +2 -2
  41. package/dist/types/components/carousel/carousel.style.d.ts +2 -2
  42. package/dist/types/components/carousel/use-carousel.d.ts +3 -3
  43. package/dist/types/components/center/center.d.ts +2 -2
  44. package/dist/types/components/chart/area-chart.d.ts +2 -2
  45. package/dist/types/components/chart/bar-chart.d.ts +2 -2
  46. package/dist/types/components/chart/chart.d.ts +5 -5
  47. package/dist/types/components/chart/donut-chart.d.ts +2 -2
  48. package/dist/types/components/chart/line-chart.d.ts +2 -2
  49. package/dist/types/components/chart/pie-chart.d.ts +2 -2
  50. package/dist/types/components/chart/radial-chart.d.ts +2 -2
  51. package/dist/types/components/chart/use-chart.d.ts +2 -2
  52. package/dist/types/components/checkbox/checkbox.d.ts +4 -4
  53. package/dist/types/components/checkbox/use-checkbox-group.d.ts +2 -2
  54. package/dist/types/components/checkbox-card/checkbox-card.d.ts +5 -5
  55. package/dist/types/components/checkbox-card/checkbox-card.style.d.ts +1 -1
  56. package/dist/types/components/circle-progress/circle-progress.d.ts +2 -2
  57. package/dist/types/components/close-button/close-button.d.ts +2 -2
  58. package/dist/types/components/code/code.d.ts +2 -2
  59. package/dist/types/components/collapse/collapse.d.ts +2 -2
  60. package/dist/types/components/color-picker/color-picker.d.ts +2 -2
  61. package/dist/types/components/color-picker/color-picker.style.d.ts +1 -1
  62. package/dist/types/components/color-picker/use-color-picker.d.ts +2 -2
  63. package/dist/types/components/color-selector/color-selector.d.ts +2 -2
  64. package/dist/types/components/color-selector/color-selector.style.d.ts +2 -2
  65. package/dist/types/components/color-selector/use-color-selector.d.ts +3 -3
  66. package/dist/types/components/color-swatch/color-swatch.d.ts +2 -2
  67. package/dist/types/components/container/container.d.ts +2 -2
  68. package/dist/types/components/data-list/data-list.d.ts +2 -2
  69. package/dist/types/components/data-list/data-list.style.d.ts +1 -1
  70. package/dist/types/components/date-picker/date-picker.d.ts +2 -2
  71. package/dist/types/components/date-picker/use-date-picker.d.ts +4 -4
  72. package/dist/types/components/drawer/drawer.d.ts +2 -2
  73. package/dist/types/components/drawer/drawer.style.d.ts +2 -2
  74. package/dist/types/components/dropzone/dropzone.d.ts +4 -4
  75. package/dist/types/components/editable/editable.d.ts +4 -4
  76. package/dist/types/components/editable/use-editable.d.ts +2 -2
  77. package/dist/types/components/em/em.d.ts +2 -2
  78. package/dist/types/components/empty-state/empty-state.d.ts +2 -2
  79. package/dist/types/components/empty-state/empty-state.style.d.ts +2 -2
  80. package/dist/types/components/fade/fade.d.ts +2 -2
  81. package/dist/types/components/field/field.d.ts +3 -3
  82. package/dist/types/components/field/use-field-props.d.ts +4 -4
  83. package/dist/types/components/fieldset/fieldset.d.ts +3 -3
  84. package/dist/types/components/file-button/file-button.d.ts +2 -2
  85. package/dist/types/components/file-button/use-file-button.d.ts +18 -18
  86. package/dist/types/components/file-input/file-input.d.ts +2 -2
  87. package/dist/types/components/file-input/file-input.style.d.ts +1 -1
  88. package/dist/types/components/file-input/use-file-input.d.ts +15 -15
  89. package/dist/types/components/flex/flex.d.ts +2 -2
  90. package/dist/types/components/flip/flip.d.ts +4 -4
  91. package/dist/types/components/flip/flip.style.d.ts +1 -1
  92. package/dist/types/components/float/float.d.ts +2 -2
  93. package/dist/types/components/form/form.d.ts +3 -3
  94. package/dist/types/components/format/format-byte.d.ts +4 -4
  95. package/dist/types/components/format/format-date-time.d.ts +4 -4
  96. package/dist/types/components/format/format-number.d.ts +2 -2
  97. package/dist/types/components/grid/grid-item.d.ts +2 -2
  98. package/dist/types/components/grid/grid.d.ts +2 -2
  99. package/dist/types/components/group/group.d.ts +2 -2
  100. package/dist/types/components/group/use-group.d.ts +2 -2
  101. package/dist/types/components/heading/heading.d.ts +2 -2
  102. package/dist/types/components/hue-slider/hue-slider.d.ts +3 -3
  103. package/dist/types/components/icon/icon.d.ts +5 -5
  104. package/dist/types/components/image/image.d.ts +2 -2
  105. package/dist/types/components/indicator/indicator.d.ts +4 -4
  106. package/dist/types/components/infinite-scroll-area/infinite-scroll-area.d.ts +2 -2
  107. package/dist/types/components/infinite-scroll-area/use-infinite-scroll.d.ts +1 -1
  108. package/dist/types/components/input/input-addon.d.ts +2 -2
  109. package/dist/types/components/input/input-element.d.ts +2 -2
  110. package/dist/types/components/input/input.d.ts +2 -2
  111. package/dist/types/components/kbd/kbd.d.ts +2 -2
  112. package/dist/types/components/link/link.d.ts +2 -2
  113. package/dist/types/components/link-box/link-box.d.ts +2 -2
  114. package/dist/types/components/list/list.d.ts +2 -2
  115. package/dist/types/components/list/list.style.d.ts +2 -2
  116. package/dist/types/components/loading/loading-provider.d.ts +2 -2
  117. package/dist/types/components/loading/loading.d.ts +3 -3
  118. package/dist/types/components/mark/mark.d.ts +2 -2
  119. package/dist/types/components/menu/menu.d.ts +2 -2
  120. package/dist/types/components/menu/menu.style.d.ts +2 -2
  121. package/dist/types/components/menu/use-menu.d.ts +11 -11
  122. package/dist/types/components/modal/modal.d.ts +2 -2
  123. package/dist/types/components/modal/modal.style.d.ts +2 -2
  124. package/dist/types/components/native-accordion/native-accordion.d.ts +2 -2
  125. package/dist/types/components/native-accordion/native-accordion.style.d.ts +2 -2
  126. package/dist/types/components/native-accordion/use-native-accordion.d.ts +2 -2
  127. package/dist/types/components/native-popover/native-popover.d.ts +2 -2
  128. package/dist/types/components/native-select/native-select.d.ts +2 -2
  129. package/dist/types/components/native-table/native-table.d.ts +4 -4
  130. package/dist/types/components/notice/notice.style.d.ts +1 -1
  131. package/dist/types/components/number-input/number-input.d.ts +2 -2
  132. package/dist/types/components/number-input/number-input.style.d.ts +1 -1
  133. package/dist/types/components/pagination/pagination.d.ts +2 -2
  134. package/dist/types/components/pagination/pagination.style.d.ts +1 -1
  135. package/dist/types/components/pagination/use-pagination.d.ts +2 -2
  136. package/dist/types/components/password-input/password-input.d.ts +2 -2
  137. package/dist/types/components/password-input/strength-meter.d.ts +2 -2
  138. package/dist/types/components/password-input/use-password-input.d.ts +2 -2
  139. package/dist/types/components/pin-input/pin-input.d.ts +2 -2
  140. package/dist/types/components/pin-input/use-pin-input.d.ts +7 -7
  141. package/dist/types/components/popover/popover.d.ts +2 -2
  142. package/dist/types/components/progress/progress.d.ts +4 -4
  143. package/dist/types/components/progress/use-progress.d.ts +706 -706
  144. package/dist/types/components/qr-code/qr-code.d.ts +2 -2
  145. package/dist/types/components/radio/radio.d.ts +4 -4
  146. package/dist/types/components/radio/use-radio-group.d.ts +2 -2
  147. package/dist/types/components/radio-card/radio-card.d.ts +5 -5
  148. package/dist/types/components/radio-card/radio-card.style.d.ts +1 -1
  149. package/dist/types/components/rating/rating.style.d.ts +2 -2
  150. package/dist/types/components/rating/use-rating.d.ts +7 -7
  151. package/dist/types/components/reorder/reorder.d.ts +2 -2
  152. package/dist/types/components/reorder/reorder.style.d.ts +1 -1
  153. package/dist/types/components/reorder/use-reorder.d.ts +3 -3
  154. package/dist/types/components/resizable/resizable.d.ts +2 -2
  155. package/dist/types/components/resizable/resizable.style.d.ts +2 -2
  156. package/dist/types/components/resizable/use-resizable.d.ts +2 -2
  157. package/dist/types/components/ripple/ripple.d.ts +2 -2
  158. package/dist/types/components/ripple/use-ripple.d.ts +2 -2
  159. package/dist/types/components/rotate/rotate.d.ts +2 -2
  160. package/dist/types/components/saturation-slider/saturation-slider.d.ts +2 -2
  161. package/dist/types/components/saturation-slider/use-saturation-slider.d.ts +2 -2
  162. package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
  163. package/dist/types/components/segmented-control/segmented-control.d.ts +2 -2
  164. package/dist/types/components/segmented-control/segmented-control.style.d.ts +2 -2
  165. package/dist/types/components/segmented-control/use-segmented-control.d.ts +9 -9
  166. package/dist/types/components/select/select.d.ts +2 -2
  167. package/dist/types/components/select/select.style.d.ts +1 -1
  168. package/dist/types/components/select/use-select.d.ts +4 -4
  169. package/dist/types/components/separator/separator.d.ts +2 -2
  170. package/dist/types/components/simple-grid/simple-grid.d.ts +2 -2
  171. package/dist/types/components/skeleton/skeleton.d.ts +2 -2
  172. package/dist/types/components/slide/slide.d.ts +2 -2
  173. package/dist/types/components/slide-fade/slide-fade.d.ts +2 -2
  174. package/dist/types/components/slider/slider.d.ts +2 -2
  175. package/dist/types/components/slider/use-slider.d.ts +2 -2
  176. package/dist/types/components/stack/h-stack.d.ts +2 -2
  177. package/dist/types/components/stack/stack.d.ts +2 -2
  178. package/dist/types/components/stack/v-stack.d.ts +2 -2
  179. package/dist/types/components/stack/z-stack.d.ts +2 -2
  180. package/dist/types/components/stat/stat.d.ts +2 -2
  181. package/dist/types/components/status/status.d.ts +2 -2
  182. package/dist/types/components/steps/steps.d.ts +2 -2
  183. package/dist/types/components/steps/steps.style.d.ts +1 -1
  184. package/dist/types/components/steps/use-steps.d.ts +10 -10
  185. package/dist/types/components/switch/switch.d.ts +2 -2
  186. package/dist/types/components/table/table.d.ts +2 -2
  187. package/dist/types/components/tabs/tabs.d.ts +2 -2
  188. package/dist/types/components/tabs/use-tabs.d.ts +16 -16
  189. package/dist/types/components/tag/tag.d.ts +2 -2
  190. package/dist/types/components/tag/tag.style.d.ts +1 -1
  191. package/dist/types/components/text/text.d.ts +2 -2
  192. package/dist/types/components/textarea/textarea.d.ts +2 -2
  193. package/dist/types/components/textarea/use-autosize.d.ts +2 -2
  194. package/dist/types/components/timeline/timeline.d.ts +5 -5
  195. package/dist/types/components/timeline/timeline.style.d.ts +2 -2
  196. package/dist/types/components/toggle/toggle.d.ts +5 -5
  197. package/dist/types/components/toggle/use-toggle-group.d.ts +2 -2
  198. package/dist/types/components/toggle/use-toggle.d.ts +2 -2
  199. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  200. package/dist/types/components/visually-hidden/visually-hidden.d.ts +2 -2
  201. package/dist/types/components/wrap/wrap.d.ts +2 -2
  202. package/dist/types/core/components/create-component.d.ts +7 -9
  203. package/dist/types/core/components/index.types.d.ts +0 -1
  204. package/dist/types/core/components/use-component-style.d.ts +0 -2
  205. package/dist/types/core/components/utils.d.ts +0 -1
  206. package/dist/types/core/constant.d.ts +0 -1
  207. package/dist/types/core/css/calc.d.ts +0 -1
  208. package/dist/types/core/css/config.d.ts +0 -1
  209. package/dist/types/core/css/css.d.ts +0 -1
  210. package/dist/types/core/css/index.types.d.ts +0 -1
  211. package/dist/types/core/css/styles.d.ts +0 -1
  212. package/dist/types/core/css/token.d.ts +0 -1
  213. package/dist/types/core/css/use-css.d.ts +0 -1
  214. package/dist/types/core/css/utils.d.ts +0 -2
  215. package/dist/types/core/generated-theme-tokens.types.d.ts +0 -1
  216. package/dist/types/core/index.d.ts +0 -2
  217. package/dist/types/core/system/color-mode-provider.d.ts +2 -2
  218. package/dist/types/core/system/config.d.ts +0 -1
  219. package/dist/types/core/system/create-system.d.ts +0 -1
  220. package/dist/types/core/system/factory.d.ts +0 -1
  221. package/dist/types/core/system/index.types.d.ts +0 -1
  222. package/dist/types/core/system/storage-script.d.ts +3 -3
  223. package/dist/types/core/system/styled.d.ts +2 -3
  224. package/dist/types/core/system/system-provider.d.ts +2 -2
  225. package/dist/types/core/system/var.d.ts +0 -2
  226. package/dist/types/hooks/use-breakpoint/use-breakpoint-state.d.ts +2 -2
  227. package/dist/types/hooks/use-clickable/index.d.ts +7 -7
  228. package/dist/types/hooks/use-clipboard/index.d.ts +2 -2
  229. package/dist/types/hooks/use-combobox/index.d.ts +12 -12
  230. package/dist/types/hooks/use-counter/index.d.ts +2 -2
  231. package/dist/types/hooks/use-descendants/index.d.ts +2 -2
  232. package/dist/types/hooks/use-field-sizing/index.d.ts +2 -2
  233. package/dist/types/providers/i18n-provider/i18n-provider.d.ts +3 -3
  234. package/dist/types/providers/ui-provider/ui-provider.d.ts +2 -2
  235. package/package.json +1 -1
@@ -38,8 +38,6 @@ const AccordionRoot = withProvider(({ children, icon, iconHidden, items, ...prop
38
38
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_use_accordion.AccordionContext, {
39
39
  value: (0, react.useMemo)(() => ({
40
40
  focusedIndex,
41
- icon,
42
- iconHidden,
43
41
  index,
44
42
  multiple,
45
43
  setFocusedIndex,
@@ -47,8 +45,6 @@ const AccordionRoot = withProvider(({ children, icon, iconHidden, items, ...prop
47
45
  toggle
48
46
  }), [
49
47
  focusedIndex,
50
- icon,
51
- iconHidden,
52
48
  index,
53
49
  multiple,
54
50
  setFocusedIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.cjs","names":["createContext","createSlotComponent","accordionStyle","useAccordion","index","props","AccordionDescendantsContext","AccordionContext","styled","useAccordionItem","useSplitChildren","AccordionItemContext","useAccordionItemContext","ChevronDownIcon","Children","Collapse"],"sources":["../../../../src/components/accordion/accordion.tsx"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { ReactNodeOrFunction } from \"../../utils\"\nimport type { CollapseProps } from \"../collapse\"\nimport type { WithTransitionProps } from \"../motion\"\nimport type { AccordionStyle } from \"./accordion.style\"\nimport type { UseAccordionItemProps, UseAccordionProps } from \"./use-accordion\"\nimport { Children, cloneElement, isValidElement, useMemo } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { createContext, isString, runIfFn, useSplitChildren } from \"../../utils\"\nimport { Collapse } from \"../collapse\"\nimport { ChevronDownIcon } from \"../icon\"\nimport { accordionStyle } from \"./accordion.style\"\nimport {\n AccordionContext,\n AccordionDescendantsContext,\n AccordionItemContext,\n useAccordion,\n useAccordionItem,\n useAccordionItemContext,\n} from \"./use-accordion\"\n\ninterface AccordionCallBackProps {\n disabled?: boolean\n expanded?: boolean\n}\n\nexport interface AccordionItem extends Omit<AccordionItemProps, \"index\"> {}\n\ninterface ComponentContext extends Pick<\n AccordionRootProps,\n \"icon\" | \"iconHidden\"\n> {}\n\nexport interface AccordionRootProps\n extends\n Omit<HTMLStyledProps, \"onChange\">,\n ThemeProps<AccordionStyle>,\n UseAccordionProps {\n /**\n * The accordion icon for all items to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * If `true`, hide the accordion icon for all items.\n *\n * @default false\n */\n iconHidden?: boolean\n /**\n * If provided, generate elements based on items.\n */\n items?: AccordionItem[]\n}\n\ninterface ItemComponentContext extends Pick<AccordionItemProps, \"icon\"> {}\n\nconst [ItemComponentContext, useItemComponentContext] =\n createContext<ItemComponentContext>({\n name: \"ItemComponentContext\",\n })\n\nconst {\n ComponentContext,\n PropsContext: AccordionPropsContext,\n useComponentContext,\n usePropsContext: useAccordionPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<AccordionRootProps, AccordionStyle, ComponentContext>(\n \"accordion\",\n accordionStyle,\n)\n\nexport { AccordionPropsContext, useAccordionPropsContext }\n\n/**\n * `Accordion` is a component for a list that displays information in an expandable or collapsible manner.\n *\n * @see https://yamada-ui.com/docs/components/accordion\n */\nexport const AccordionRoot = withProvider<\"div\", AccordionRootProps>(\n ({ children, icon, iconHidden, items, ...props }) => {\n const {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n } = useAccordion(props)\n const computedChildren = useMemo(() => {\n if (children) return children\n\n return items?.map((props, index) => (\n <AccordionItem key={index} index={index} {...props} />\n ))\n }, [children, items])\n const context = useMemo(\n () => ({\n focusedIndex,\n icon,\n iconHidden,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n }),\n [\n focusedIndex,\n icon,\n iconHidden,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n ],\n )\n const componentContext = useMemo(\n () => ({ icon, iconHidden }),\n [icon, iconHidden],\n )\n\n return (\n <AccordionDescendantsContext value={descendants}>\n <AccordionContext value={context}>\n <ComponentContext value={componentContext}>\n <styled.div {...getRootProps()}>{computedChildren}</styled.div>\n </ComponentContext>\n </AccordionContext>\n </AccordionDescendantsContext>\n )\n },\n \"root\",\n)()\n\nexport interface AccordionItemProps\n extends\n Omit<HTMLStyledProps, \"children\">,\n Omit<UseAccordionItemProps, \"children\"> {\n /**\n * The accordion button to use.\n */\n button?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion children to use.\n */\n children?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n}\n\nexport const AccordionItem = withContext<\"div\", AccordionItemProps>(\n ({ button, children, icon, ...rest }) => {\n const {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n } = useAccordionItem(rest)\n const computedChildren = useMemo(\n () => runIfFn(children, { disabled, expanded: open }),\n [children, disabled, open],\n )\n const [omittedChildren, customAccordionButton, customAccordionPanel] =\n useSplitChildren(computedChildren, AccordionButton, AccordionPanel)\n const context = useMemo(\n () => ({\n disabled,\n icon,\n open,\n getButtonProps,\n getIconProps,\n getPanelProps,\n }),\n [disabled, getButtonProps, getPanelProps, getIconProps, icon, open],\n )\n const componentContext = useMemo(() => ({ icon }), [icon])\n\n return (\n <AccordionItemContext value={context}>\n <ItemComponentContext value={componentContext}>\n <styled.div {...getItemProps()}>\n {customAccordionButton ?? (\n <AccordionButton>\n {runIfFn(button, { disabled, expanded: open })}\n </AccordionButton>\n )}\n {customAccordionPanel ?? (\n <AccordionPanel>{omittedChildren}</AccordionPanel>\n )}\n </styled.div>\n </ItemComponentContext>\n </AccordionItemContext>\n )\n },\n \"item\",\n)()\n\nexport interface AccordionButtonProps extends HTMLStyledProps<\"button\"> {\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * Props the container element.\n */\n containerProps?: HTMLStyledProps\n}\n\nexport const AccordionButton = withContext<\"button\", AccordionButtonProps>(\n ({ children, icon: customIcon, containerProps, ...rest }) => {\n const { icon: rootIcon } = useComponentContext()\n const { icon: itemIcon } = useItemComponentContext()\n const { disabled, open, getButtonProps } = useAccordionItemContext()\n const props = { disabled, expanded: open }\n\n return (\n <styled.h3 {...containerProps}>\n <styled.button {...getButtonProps(rest)}>\n {children}\n\n <AccordionIcon>\n {runIfFn(customIcon, props) ??\n runIfFn(itemIcon, props) ??\n runIfFn(rootIcon, props)}\n </AccordionIcon>\n </styled.button>\n </styled.h3>\n )\n },\n \"button\",\n)()\n\ninterface AccordionIconProps extends HTMLStyledProps<\"svg\"> {}\n\nexport const AccordionIcon = withContext<\"svg\", AccordionIconProps>(\n ({ children = <ChevronDownIcon />, ...rest }) => {\n const { iconHidden } = useComponentContext()\n const { getIconProps } = useAccordionItemContext()\n\n if (iconHidden) return null\n\n if (isValidElement<HTMLProps<\"svg\">>(children))\n return cloneElement(\n children,\n getIconProps({\n ...rest,\n ...children.props,\n }),\n )\n\n return Children.count(children) > 1 ? Children.only(null) : null\n },\n \"icon\",\n)()\n\nexport interface AccordionPanelProps\n extends\n Omit<HTMLStyledProps, \"transition\">,\n Pick<\n CollapseProps,\n | \"animationOpacity\"\n | \"endingHeight\"\n | \"startingHeight\"\n | keyof WithTransitionProps\n > {}\n\nexport const AccordionPanel = withContext<\"div\", AccordionPanelProps>(\n ({\n animationOpacity,\n children,\n delay,\n duration,\n endingHeight,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n ...rest\n }) => {\n const { open, getPanelProps } = useAccordionItemContext()\n\n return (\n <Collapse\n {...{\n animationOpacity,\n delay,\n duration,\n endingHeight,\n open,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n }}\n >\n <styled.div {...getPanelProps(rest)}>\n {isString(children) ? <styled.p>{children}</styled.p> : children}\n </styled.div>\n </Collapse>\n )\n },\n \"panel\",\n)()\n"],"mappings":"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"}
1
+ {"version":3,"file":"accordion.cjs","names":["createContext","createSlotComponent","accordionStyle","useAccordion","index","props","AccordionDescendantsContext","AccordionContext","styled","useAccordionItem","useSplitChildren","AccordionItemContext","useAccordionItemContext","ChevronDownIcon","Children","Collapse"],"sources":["../../../../src/components/accordion/accordion.tsx"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { ReactNodeOrFunction } from \"../../utils\"\nimport type { CollapseProps } from \"../collapse\"\nimport type { WithTransitionProps } from \"../motion\"\nimport type { AccordionStyle } from \"./accordion.style\"\nimport type { UseAccordionItemProps, UseAccordionProps } from \"./use-accordion\"\nimport { Children, cloneElement, isValidElement, useMemo } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { createContext, isString, runIfFn, useSplitChildren } from \"../../utils\"\nimport { Collapse } from \"../collapse\"\nimport { ChevronDownIcon } from \"../icon\"\nimport { accordionStyle } from \"./accordion.style\"\nimport {\n AccordionContext,\n AccordionDescendantsContext,\n AccordionItemContext,\n useAccordion,\n useAccordionItem,\n useAccordionItemContext,\n} from \"./use-accordion\"\n\ninterface AccordionCallBackProps {\n disabled?: boolean\n expanded?: boolean\n}\n\nexport interface AccordionItem extends Omit<AccordionItemProps, \"index\"> {}\n\ninterface ComponentContext extends Pick<\n AccordionRootProps,\n \"icon\" | \"iconHidden\"\n> {}\n\nexport interface AccordionRootProps\n extends\n Omit<HTMLStyledProps, \"onChange\">,\n ThemeProps<AccordionStyle>,\n UseAccordionProps {\n /**\n * The accordion icon for all items to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * If `true`, hide the accordion icon for all items.\n *\n * @default false\n */\n iconHidden?: boolean\n /**\n * If provided, generate elements based on items.\n */\n items?: AccordionItem[]\n}\n\ninterface ItemComponentContext extends Pick<AccordionItemProps, \"icon\"> {}\n\nconst [ItemComponentContext, useItemComponentContext] =\n createContext<ItemComponentContext>({\n name: \"ItemComponentContext\",\n })\n\nconst {\n ComponentContext,\n PropsContext: AccordionPropsContext,\n useComponentContext,\n usePropsContext: useAccordionPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<AccordionRootProps, AccordionStyle, ComponentContext>(\n \"accordion\",\n accordionStyle,\n)\n\nexport { AccordionPropsContext, useAccordionPropsContext }\n\n/**\n * `Accordion` is a component for a list that displays information in an expandable or collapsible manner.\n *\n * @see https://yamada-ui.com/docs/components/accordion\n */\nexport const AccordionRoot = withProvider<\"div\", AccordionRootProps>(\n ({ children, icon, iconHidden, items, ...props }) => {\n const {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n } = useAccordion(props)\n const computedChildren = useMemo(() => {\n if (children) return children\n\n return items?.map((props, index) => (\n <AccordionItem key={index} index={index} {...props} />\n ))\n }, [children, items])\n const context = useMemo(\n () => ({\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n }),\n [focusedIndex, index, multiple, setFocusedIndex, setIndex, toggle],\n )\n const componentContext = useMemo(\n () => ({ icon, iconHidden }),\n [icon, iconHidden],\n )\n\n return (\n <AccordionDescendantsContext value={descendants}>\n <AccordionContext value={context}>\n <ComponentContext value={componentContext}>\n <styled.div {...getRootProps()}>{computedChildren}</styled.div>\n </ComponentContext>\n </AccordionContext>\n </AccordionDescendantsContext>\n )\n },\n \"root\",\n)()\n\nexport interface AccordionItemProps\n extends\n Omit<HTMLStyledProps, \"children\">,\n Omit<UseAccordionItemProps, \"children\"> {\n /**\n * The accordion button to use.\n */\n button?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion children to use.\n */\n children?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n}\n\nexport const AccordionItem = withContext<\"div\", AccordionItemProps>(\n ({ button, children, icon, ...rest }) => {\n const {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n } = useAccordionItem(rest)\n const computedChildren = useMemo(\n () => runIfFn(children, { disabled, expanded: open }),\n [children, disabled, open],\n )\n const [omittedChildren, customAccordionButton, customAccordionPanel] =\n useSplitChildren(computedChildren, AccordionButton, AccordionPanel)\n const context = useMemo(\n () => ({\n disabled,\n icon,\n open,\n getButtonProps,\n getIconProps,\n getPanelProps,\n }),\n [disabled, getButtonProps, getPanelProps, getIconProps, icon, open],\n )\n const componentContext = useMemo(() => ({ icon }), [icon])\n\n return (\n <AccordionItemContext value={context}>\n <ItemComponentContext value={componentContext}>\n <styled.div {...getItemProps()}>\n {customAccordionButton ?? (\n <AccordionButton>\n {runIfFn(button, { disabled, expanded: open })}\n </AccordionButton>\n )}\n {customAccordionPanel ?? (\n <AccordionPanel>{omittedChildren}</AccordionPanel>\n )}\n </styled.div>\n </ItemComponentContext>\n </AccordionItemContext>\n )\n },\n \"item\",\n)()\n\nexport interface AccordionButtonProps extends HTMLStyledProps<\"button\"> {\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * Props the container element.\n */\n containerProps?: HTMLStyledProps\n}\n\nexport const AccordionButton = withContext<\"button\", AccordionButtonProps>(\n ({ children, icon: customIcon, containerProps, ...rest }) => {\n const { icon: rootIcon } = useComponentContext()\n const { icon: itemIcon } = useItemComponentContext()\n const { disabled, open, getButtonProps } = useAccordionItemContext()\n const props = { disabled, expanded: open }\n\n return (\n <styled.h3 {...containerProps}>\n <styled.button {...getButtonProps(rest)}>\n {children}\n\n <AccordionIcon>\n {runIfFn(customIcon, props) ??\n runIfFn(itemIcon, props) ??\n runIfFn(rootIcon, props)}\n </AccordionIcon>\n </styled.button>\n </styled.h3>\n )\n },\n \"button\",\n)()\n\ninterface AccordionIconProps extends HTMLStyledProps<\"svg\"> {}\n\nexport const AccordionIcon = withContext<\"svg\", AccordionIconProps>(\n ({ children = <ChevronDownIcon />, ...rest }) => {\n const { iconHidden } = useComponentContext()\n const { getIconProps } = useAccordionItemContext()\n\n if (iconHidden) return null\n\n if (isValidElement<HTMLProps<\"svg\">>(children))\n return cloneElement(\n children,\n getIconProps({\n ...rest,\n ...children.props,\n }),\n )\n\n return Children.count(children) > 1 ? Children.only(null) : null\n },\n \"icon\",\n)()\n\nexport interface AccordionPanelProps\n extends\n Omit<HTMLStyledProps, \"transition\">,\n Pick<\n CollapseProps,\n | \"animationOpacity\"\n | \"endingHeight\"\n | \"startingHeight\"\n | keyof WithTransitionProps\n > {}\n\nexport const AccordionPanel = withContext<\"div\", AccordionPanelProps>(\n ({\n animationOpacity,\n children,\n delay,\n duration,\n endingHeight,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n ...rest\n }) => {\n const { open, getPanelProps } = useAccordionItemContext()\n\n return (\n <Collapse\n {...{\n animationOpacity,\n delay,\n duration,\n endingHeight,\n open,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n }}\n >\n <styled.div {...getPanelProps(rest)}>\n {isString(children) ? <styled.p>{children}</styled.p> : children}\n </styled.div>\n </Collapse>\n )\n },\n \"panel\",\n)()\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-accordion.cjs","names":["createDescendants","createContext","useControllableState","getRootProps: PropGetter","mergeRefs","open","getItemProps: PropGetter","getButtonProps: PropGetter<\"button\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/accordion/use-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport {\n ariaAttr,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n mergeRefs,\n runKeyAction,\n} from \"../../utils\"\n\nconst {\n DescendantsContext: AccordionDescendantsContext,\n useDescendant: useAccordionDescendant,\n useDescendants: useAccordionDescendants,\n} = createDescendants<HTMLButtonElement>()\n\nexport {\n AccordionDescendantsContext,\n useAccordionDescendant,\n useAccordionDescendants,\n}\n\ninterface AccordionContext extends Omit<\n UseAccordionReturn,\n \"descendants\" | \"getRootProps\"\n> {}\n\nconst [AccordionContext, useAccordionContext] = createContext<AccordionContext>(\n {\n name: \"AccordionContext\",\n },\n)\n\nexport { AccordionContext, useAccordionContext }\n\ninterface AccordionItemContext extends Omit<\n UseAccordionItemReturn,\n \"getItemProps\"\n> {}\n\nconst [AccordionItemContext, useAccordionItemContext] =\n createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n })\n\nexport { AccordionItemContext, useAccordionItemContext }\n\nexport interface UseAccordionProps extends Omit<HTMLProps, \"onChange\"> {\n /**\n * The initial index(es) of the accordion item to expand.\n */\n defaultIndex?: number | number[]\n /**\n * The index(es) of the accordion item to expand.\n */\n index?: number | number[]\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n *\n * @default false\n */\n toggle?: boolean\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?: (index: number | number[]) => void\n}\n\nexport const useAccordion = ({\n defaultIndex: defaultIndexProp,\n index: indexProp,\n multiple,\n toggle,\n onChange,\n ...rest\n}: UseAccordionProps = {}) => {\n if (\n (indexProp || defaultIndexProp) != null &&\n !isArray(indexProp || defaultIndexProp) &&\n multiple\n ) {\n console.warn(\n `Accordion: If 'multiple' is passed, then 'index' or 'defaultIndex' must be an array.`,\n )\n }\n\n if (multiple && toggle) {\n console.warn(\n `Accordion: If 'multiple' is passed, 'toggle' will be ignored. Either remove 'toggle' or 'multiple' depending on whether you want multiple accordions visible or not`,\n )\n }\n\n const descendants = useAccordionDescendants()\n\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n\n const [index, setIndex] = useControllableState({\n defaultValue: () =>\n multiple ? (defaultIndexProp ?? []) : (defaultIndexProp ?? -1),\n value: indexProp,\n onChange,\n })\n\n const getRootProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [rest],\n )\n\n useEffect(() => {\n return () => setFocusedIndex(-1)\n }, [])\n\n return {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\nexport interface UseAccordionItemProps extends HTMLProps {\n /**\n * The index of the accordion item.\n */\n index: number\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useAccordionItem = ({\n disabled,\n index,\n ...rest\n}: UseAccordionItemProps) => {\n const itemId = useId()\n const panelId = useId()\n const {\n index: selectedIndex,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n } = useAccordionContext()\n const { descendants, register } = useAccordionDescendant({ disabled })\n const open =\n index !== -1\n ? isArray(selectedIndex)\n ? selectedIndex.includes(index)\n : selectedIndex === index\n : false\n\n if (open && disabled)\n console.warn(`Accordion: Cannot open a disabled accordion item`)\n\n const onChange = useCallback(\n (open: boolean) => {\n if (index === -1) return\n\n if (multiple && isArray(selectedIndex)) {\n setIndex(\n open\n ? selectedIndex.concat(index)\n : selectedIndex.filter((i) => i !== index),\n )\n } else if (open) {\n setIndex(index)\n } else if (toggle) {\n setIndex(-1)\n }\n },\n [multiple, toggle, index, selectedIndex, setIndex],\n )\n\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const onClick = useCallback(() => {\n onChange(!open)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, open, onChange])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLButtonElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const next = descendants.enabledNextValue(index)\n\n next?.node.focus()\n },\n ArrowUp: () => {\n const prev = descendants.enabledPrevValue(index)\n\n prev?.node.focus()\n },\n End: () => {\n const last = descendants.enabledLastValue()\n\n last?.node.focus()\n },\n Home: () => {\n const first = descendants.enabledFirstValue()\n\n first?.node.focus()\n },\n })\n },\n [descendants, index],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n \"data-expanded\": dataAttr(open),\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [open, rest],\n )\n\n const getButtonProps: PropGetter<\"button\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n id: itemId,\n type: \"button\",\n \"aria-controls\": panelId,\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n ...props,\n ref: mergeRefs(register, ref),\n disabled,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n [\n itemId,\n open,\n panelId,\n multiple,\n toggle,\n disabled,\n register,\n onClick,\n onFocus,\n onKeyDown,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: panelId,\n \"aria-labelledby\": cx(ariaLabelledby, itemId),\n role: \"region\",\n ...props,\n }),\n [itemId, panelId],\n )\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props) => ({\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [multiple, toggle, open, disabled],\n )\n\n return {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-accordion.cjs","names":["createDescendants","createContext","useControllableState","getRootProps: PropGetter","mergeRefs","open","getItemProps: PropGetter","getButtonProps: PropGetter<\"button\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/accordion/use-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport {\n ariaAttr,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n mergeRefs,\n runKeyAction,\n} from \"../../utils\"\n\nconst {\n DescendantsContext: AccordionDescendantsContext,\n useDescendant: useAccordionDescendant,\n useDescendants: useAccordionDescendants,\n} = createDescendants<HTMLButtonElement>()\n\nexport {\n AccordionDescendantsContext,\n useAccordionDescendant,\n useAccordionDescendants,\n}\n\ninterface AccordionContext extends Omit<\n UseAccordionReturn,\n \"descendants\" | \"getRootProps\"\n> {}\n\nconst [AccordionContext, useAccordionContext] = createContext<AccordionContext>(\n { name: \"AccordionContext\" },\n)\n\nexport { AccordionContext, useAccordionContext }\n\ninterface AccordionItemContext extends Omit<\n UseAccordionItemReturn,\n \"getItemProps\"\n> {}\n\nconst [AccordionItemContext, useAccordionItemContext] =\n createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n })\n\nexport { AccordionItemContext, useAccordionItemContext }\n\nexport interface UseAccordionProps extends Omit<HTMLProps, \"onChange\"> {\n /**\n * The initial index(es) of the accordion item to expand.\n */\n defaultIndex?: number | number[]\n /**\n * The index(es) of the accordion item to expand.\n */\n index?: number | number[]\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n *\n * @default false\n */\n toggle?: boolean\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?: (index: number | number[]) => void\n}\n\nexport const useAccordion = ({\n defaultIndex: defaultIndexProp,\n index: indexProp,\n multiple,\n toggle,\n onChange,\n ...rest\n}: UseAccordionProps = {}) => {\n if (\n (indexProp || defaultIndexProp) != null &&\n !isArray(indexProp || defaultIndexProp) &&\n multiple\n ) {\n console.warn(\n `Accordion: If 'multiple' is passed, then 'index' or 'defaultIndex' must be an array.`,\n )\n }\n\n if (multiple && toggle) {\n console.warn(\n `Accordion: If 'multiple' is passed, 'toggle' will be ignored. Either remove 'toggle' or 'multiple' depending on whether you want multiple accordions visible or not`,\n )\n }\n\n const descendants = useAccordionDescendants()\n\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n\n const [index, setIndex] = useControllableState({\n defaultValue: () =>\n multiple ? (defaultIndexProp ?? []) : (defaultIndexProp ?? -1),\n value: indexProp,\n onChange,\n })\n\n const getRootProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [rest],\n )\n\n useEffect(() => {\n return () => setFocusedIndex(-1)\n }, [])\n\n return {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\nexport interface UseAccordionItemProps extends HTMLProps {\n /**\n * The index of the accordion item.\n */\n index: number\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useAccordionItem = ({\n disabled,\n index,\n ...rest\n}: UseAccordionItemProps) => {\n const itemId = useId()\n const panelId = useId()\n const {\n index: selectedIndex,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n } = useAccordionContext()\n const { descendants, register } = useAccordionDescendant({ disabled })\n const open =\n index !== -1\n ? isArray(selectedIndex)\n ? selectedIndex.includes(index)\n : selectedIndex === index\n : false\n\n if (open && disabled)\n console.warn(`Accordion: Cannot open a disabled accordion item`)\n\n const onChange = useCallback(\n (open: boolean) => {\n if (index === -1) return\n\n if (multiple && isArray(selectedIndex)) {\n setIndex(\n open\n ? selectedIndex.concat(index)\n : selectedIndex.filter((i) => i !== index),\n )\n } else if (open) {\n setIndex(index)\n } else if (toggle) {\n setIndex(-1)\n }\n },\n [multiple, toggle, index, selectedIndex, setIndex],\n )\n\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const onClick = useCallback(() => {\n onChange(!open)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, open, onChange])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLButtonElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const next = descendants.enabledNextValue(index)\n\n next?.node.focus()\n },\n ArrowUp: () => {\n const prev = descendants.enabledPrevValue(index)\n\n prev?.node.focus()\n },\n End: () => {\n const last = descendants.enabledLastValue()\n\n last?.node.focus()\n },\n Home: () => {\n const first = descendants.enabledFirstValue()\n\n first?.node.focus()\n },\n })\n },\n [descendants, index],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n \"data-expanded\": dataAttr(open),\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [open, rest],\n )\n\n const getButtonProps: PropGetter<\"button\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n id: itemId,\n type: \"button\",\n \"aria-controls\": panelId,\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n ...props,\n ref: mergeRefs(register, ref),\n disabled,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n [\n itemId,\n open,\n panelId,\n multiple,\n toggle,\n disabled,\n register,\n onClick,\n onFocus,\n onKeyDown,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: panelId,\n \"aria-labelledby\": cx(ariaLabelledby, itemId),\n role: \"region\",\n ...props,\n }),\n [itemId, panelId],\n )\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props) => ({\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [multiple, toggle, open, disabled],\n )\n\n return {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
4
4
  const require_ref = require('../../utils/ref.cjs');
5
- require('../../utils/index.cjs');
5
+ const require_utils_index = require('../../utils/index.cjs');
6
6
  const require_factory = require('../../core/system/factory.cjs');
7
7
  const require_create_component = require('../../core/components/create-component.cjs');
8
8
  require('../../core/index.cjs');
@@ -30,7 +30,7 @@ const InfiniteScrollArea = withProvider(({ ref, children, disabled, finish: fini
30
30
  resetRef,
31
31
  reverse,
32
32
  rootMargin,
33
- rootRef: rootRefProp ?? rootRef,
33
+ rootRef: (0, require_utils_index.utils_exports.isNull)(rootRefProp) ? null : rootRefProp ?? rootRef,
34
34
  startIndex,
35
35
  threshold,
36
36
  onLoad
@@ -1 +1 @@
1
- {"version":3,"file":"infinite-scroll-area.cjs","names":["createSlotComponent","infiniteScrollAreaStyle","useInfiniteScroll","useValue","styled","mergeRefs"],"sources":["../../../../src/components/infinite-scroll-area/infinite-scroll-area.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport type { HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { InfiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport type { UseInfiniteScrollProps } from \"./use-infinite-scroll\"\nimport { useRef } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { useValue } from \"../../hooks/use-value\"\nimport { mergeRefs } from \"../../utils\"\nimport { infiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport { useInfiniteScroll } from \"./use-infinite-scroll\"\n\nexport interface InfiniteScrollAreaProps\n extends\n Omit<HTMLStyledProps, keyof UseInfiniteScrollProps>,\n Omit<UseInfiniteScrollProps, \"orientation\">,\n ThemeProps<InfiniteScrollAreaStyle> {\n /**\n * The infinite scroll area finish to use.\n */\n finish?: ReactNode\n /**\n * The infinite scroll area loading to use.\n */\n loading?: ReactNode\n /**\n * Props for infinite scroll area trigger component.\n */\n triggerProps?: HTMLStyledProps\n}\n\nconst {\n PropsContext: InfiniteScrollAreaPropsContext,\n usePropsContext: useInfiniteScrollAreaPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<InfiniteScrollAreaProps, InfiniteScrollAreaStyle>(\n \"infinite-scroll-area\",\n infiniteScrollAreaStyle,\n)\n\nexport { InfiniteScrollAreaPropsContext, useInfiniteScrollAreaPropsContext }\n\n/**\n * `InfiniteScrollArea` is for providing infinite scroll functionality.\n * This feature provides a smooth scrolling experience by automatically loading and displaying the next dataset when the user reaches the end of the page.\n *\n * @see https://yamada-ui.com/docs/components/infinite-scroll-area\n */\nexport const InfiniteScrollArea = withProvider<\n \"div\",\n InfiniteScrollAreaProps,\n \"orientation\"\n>(\n ({\n ref,\n children,\n disabled,\n finish: finishProp,\n indexRef,\n initialLoad,\n loading,\n orientation: orientationProp,\n resetRef,\n reverse,\n rootMargin,\n rootRef: rootRefProp,\n startIndex,\n threshold,\n triggerProps,\n onLoad,\n ...rest\n }) => {\n const rootRef = useRef<HTMLDivElement>(null)\n const orientation = useValue(orientationProp)\n const { ref: triggerRef, finish } = useInfiniteScroll({\n disabled,\n indexRef,\n initialLoad,\n orientation,\n resetRef,\n reverse,\n rootMargin,\n rootRef: rootRefProp ?? rootRef,\n startIndex,\n threshold,\n onLoad,\n })\n const hasFinish = !!finishProp\n const showTrigger = !disabled && (hasFinish || !finish)\n\n return (\n <styled.div\n ref={mergeRefs(rootRef, ref)}\n aria-busy=\"false\"\n role=\"feed\"\n {...rest}\n >\n {reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n\n {children}\n\n {!reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n </styled.div>\n )\n },\n \"root\",\n { transferProps: [\"orientation\"] },\n)()\n\ninterface InfiniteScrollTriggerProps extends HTMLStyledProps {}\n\nconst InfiniteScrollTrigger = withContext<\"div\", InfiniteScrollTriggerProps>(\n \"div\",\n \"trigger\",\n)()\n"],"mappings":";;;;;;;;;;;;;;;AAgCA,MAAM,EACJ,cAAc,gCACd,iBAAiB,mCACjB,aACA,iBACEA,6CACF,wBACAC,2DACD;;;;;;;AAUD,MAAa,qBAAqB,cAK/B,EACC,KACA,UACA,UACA,QAAQ,YACR,UACA,aACA,SACA,aAAa,iBACb,UACA,SACA,YACA,SAAS,aACT,YACA,WACA,cACA,QACA,GAAG,WACC;CACJ,MAAM,4BAAiC,KAAK;CAE5C,MAAM,EAAE,KAAK,YAAY,WAAWC,8CAAkB;EACpD;EACA;EACA;EACA,aALkBC,uCAAS,gBAAgB;EAM3C;EACA;EACA;EACA,SAAS,eAAe;EACxB;EACA;EACA;EACD,CAAC;CAEF,MAAM,cAAc,CAAC,aADH,CAAC,CAAC,cAC2B,CAAC;AAEhD,QACE,4CAACC,uBAAO;EACN,KAAKC,sBAAU,SAAS,IAAI;EAC5B,aAAU;EACV,MAAK;EACL,GAAI;;GAEH,WAAW,cACV,2CAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;GAEH;GAEA,CAAC,WAAW,cACX,2CAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;;GACO;GAGjB,QACA,EAAE,eAAe,CAAC,cAAc,EAAE,CACnC,EAAE;AAIH,MAAM,wBAAwB,YAC5B,OACA,UACD,EAAE"}
1
+ {"version":3,"file":"infinite-scroll-area.cjs","names":["createSlotComponent","infiniteScrollAreaStyle","useInfiniteScroll","useValue","styled","mergeRefs"],"sources":["../../../../src/components/infinite-scroll-area/infinite-scroll-area.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport type { HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { InfiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport type { UseInfiniteScrollProps } from \"./use-infinite-scroll\"\nimport { useRef } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { useValue } from \"../../hooks/use-value\"\nimport { isNull, mergeRefs } from \"../../utils\"\nimport { infiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport { useInfiniteScroll } from \"./use-infinite-scroll\"\n\nexport interface InfiniteScrollAreaProps\n extends\n Omit<HTMLStyledProps, keyof UseInfiniteScrollProps>,\n Omit<UseInfiniteScrollProps, \"orientation\">,\n ThemeProps<InfiniteScrollAreaStyle> {\n /**\n * The infinite scroll area finish to use.\n */\n finish?: ReactNode\n /**\n * The infinite scroll area loading to use.\n */\n loading?: ReactNode\n /**\n * Props for infinite scroll area trigger component.\n */\n triggerProps?: HTMLStyledProps\n}\n\nconst {\n PropsContext: InfiniteScrollAreaPropsContext,\n usePropsContext: useInfiniteScrollAreaPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<InfiniteScrollAreaProps, InfiniteScrollAreaStyle>(\n \"infinite-scroll-area\",\n infiniteScrollAreaStyle,\n)\n\nexport { InfiniteScrollAreaPropsContext, useInfiniteScrollAreaPropsContext }\n\n/**\n * `InfiniteScrollArea` is for providing infinite scroll functionality.\n * This feature provides a smooth scrolling experience by automatically loading and displaying the next dataset when the user reaches the end of the page.\n *\n * @see https://yamada-ui.com/docs/components/infinite-scroll-area\n */\nexport const InfiniteScrollArea = withProvider<\n \"div\",\n InfiniteScrollAreaProps,\n \"orientation\"\n>(\n ({\n ref,\n children,\n disabled,\n finish: finishProp,\n indexRef,\n initialLoad,\n loading,\n orientation: orientationProp,\n resetRef,\n reverse,\n rootMargin,\n rootRef: rootRefProp,\n startIndex,\n threshold,\n triggerProps,\n onLoad,\n ...rest\n }) => {\n const rootRef = useRef<HTMLDivElement>(null)\n const orientation = useValue(orientationProp)\n const { ref: triggerRef, finish } = useInfiniteScroll({\n disabled,\n indexRef,\n initialLoad,\n orientation,\n resetRef,\n reverse,\n rootMargin,\n rootRef: isNull(rootRefProp) ? null : (rootRefProp ?? rootRef),\n startIndex,\n threshold,\n onLoad,\n })\n const hasFinish = !!finishProp\n const showTrigger = !disabled && (hasFinish || !finish)\n\n return (\n <styled.div\n ref={mergeRefs(rootRef, ref)}\n aria-busy=\"false\"\n role=\"feed\"\n {...rest}\n >\n {reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n\n {children}\n\n {!reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n </styled.div>\n )\n },\n \"root\",\n { transferProps: [\"orientation\"] },\n)()\n\ninterface InfiniteScrollTriggerProps extends HTMLStyledProps {}\n\nconst InfiniteScrollTrigger = withContext<\"div\", InfiniteScrollTriggerProps>(\n \"div\",\n \"trigger\",\n)()\n"],"mappings":";;;;;;;;;;;;;;;AAgCA,MAAM,EACJ,cAAc,gCACd,iBAAiB,mCACjB,aACA,iBACEA,6CACF,wBACAC,2DACD;;;;;;;AAUD,MAAa,qBAAqB,cAK/B,EACC,KACA,UACA,UACA,QAAQ,YACR,UACA,aACA,SACA,aAAa,iBACb,UACA,SACA,YACA,SAAS,aACT,YACA,WACA,cACA,QACA,GAAG,WACC;CACJ,MAAM,4BAAiC,KAAK;CAE5C,MAAM,EAAE,KAAK,YAAY,WAAWC,8CAAkB;EACpD;EACA;EACA;EACA,aALkBC,uCAAS,gBAAgB;EAM3C;EACA;EACA;EACA,uDAAgB,YAAY,GAAG,OAAQ,eAAe;EACtD;EACA;EACA;EACD,CAAC;CAEF,MAAM,cAAc,CAAC,aADH,CAAC,CAAC,cAC2B,CAAC;AAEhD,QACE,4CAACC,uBAAO;EACN,KAAKC,sBAAU,SAAS,IAAI;EAC5B,aAAU;EACV,MAAK;EACL,GAAI;;GAEH,WAAW,cACV,2CAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;GAEH;GAEA,CAAC,WAAW,cACX,2CAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;;GACO;GAGjB,QACA,EAAE,eAAe,CAAC,cAAc,EAAE,CACnC,EAAE;AAIH,MAAM,wBAAwB,YAC5B,OACA,UACD,EAAE"}
@@ -41,17 +41,6 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
41
41
  const onLoad = require_ref.useCallbackRef(onLoadProp);
42
42
  const vertical = orientation === "vertical";
43
43
  const direction = vertical ? "top" : "left";
44
- const options = (0, react.useMemo)(() => {
45
- return {
46
- root: rootRef?.current,
47
- rootMargin,
48
- threshold
49
- };
50
- }, [
51
- rootMargin,
52
- rootRef,
53
- threshold
54
- ]);
55
44
  const onReset = (0, react.useCallback)((index = 1, runScroll = true) => {
56
45
  indexRef.current = index;
57
46
  setFinish(false);
@@ -91,10 +80,11 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
91
80
  setFinish(true);
92
81
  }, []);
93
82
  const createObserver = (0, react.useCallback)(() => {
83
+ const root = rootRef?.current ?? null;
94
84
  return new IntersectionObserver(async ([entry]) => {
95
- const root = rootRef?.current;
85
+ const root$1 = rootRef?.current;
96
86
  const body = getDocument()?.body;
97
- const el = root && isScrollable(root, vertical) ? root : body;
87
+ const el = root$1 && isScrollable(root$1, vertical) ? root$1 : body;
98
88
  if (!entry?.isIntersecting || processingRef.current || !el) return;
99
89
  const props = {
100
90
  entry,
@@ -102,7 +92,7 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
102
92
  index: indexRef.current
103
93
  };
104
94
  processingRef.current = true;
105
- if (root) root.ariaBusy = "true";
95
+ if (root$1) root$1.ariaBusy = "true";
106
96
  let prevScrollPosition = 0;
107
97
  if (reverse) prevScrollPosition = vertical ? el.scrollHeight : el.scrollWidth;
108
98
  await onLoad(props);
@@ -113,11 +103,16 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
113
103
  });
114
104
  indexRef.current += 1;
115
105
  processingRef.current = false;
116
- if (root) root.ariaBusy = "false";
117
- }, options);
106
+ if (root$1) root$1.ariaBusy = "false";
107
+ }, {
108
+ root,
109
+ rootMargin,
110
+ threshold
111
+ });
118
112
  }, [
119
- options,
120
113
  rootRef,
114
+ rootMargin,
115
+ threshold,
121
116
  getDocument,
122
117
  vertical,
123
118
  onFinish,
@@ -1 +1 @@
1
- {"version":3,"file":"use-infinite-scroll.cjs","names":["useEnvironment","useCallbackRef","options: IntersectionObserverInit","root","el"],"sources":["../../../../src/components/infinite-scroll-area/use-infinite-scroll.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport type { Orientation } from \"../../core\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { useEnvironment } from \"../../core\"\nimport { assignRef, useCallbackRef } from \"../../utils\"\n\nconst isScrollable = (el: HTMLElement, vertical: boolean) => {\n const style = getComputedStyle(el)\n\n if ([\"auto\", \"overlay\", \"scroll\"].includes(style.overflow)) return true\n\n if (vertical) {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowY)\n } else {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowX)\n }\n}\n\nexport interface UseInfiniteScrollProps extends Omit<\n IntersectionObserverInit,\n \"root\"\n> {\n /**\n * Determines whether scrolling is instant or animates smoothly.\n */\n behavior?: ScrollBehavior\n /**\n * If `true`, the infinite scroll is disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Ref to a reset index function.\n */\n indexRef?: RefObject<(index: number) => void>\n /**\n * If `true`, invoke `onLoad` function for the first time.\n *\n * @default false\n */\n initialLoad?: boolean\n /**\n * The orientation of the infinite scroll.\n *\n * @default 'vertical'\n */\n orientation?: Orientation\n /**\n * Ref to a reset function.\n */\n resetRef?: RefObject<(index?: number, runScroll?: boolean) => void>\n /**\n * If `true`, reverse direction.\n *\n * @default false\n */\n reverse?: boolean\n /**\n * Margin around the root. Can have values similar to the CSS margin property,\n * e.g. \"10px 20px 30px 40px\" (top, right, bottom, left).\n */\n rootMargin?: string\n /**\n * The element that is used as the viewport for checking visibility of the target.\n * Defaults to the browser viewport if not specified or if `null`.\n */\n rootRef?: RefObject<HTMLElement | null>\n /**\n * If set the `onLoad` function will start from the given index.\n * If `initialLoad` is `true`, index starts from `0`.\n *\n * @default 1\n */\n startIndex?: number\n /**\n * Either a single number or an array of numbers which indicate at what percentage of the target's visibility the observer's callback should be executed.\n */\n threshold?: number | number[]\n /**\n * The callback invoked when trigger is intersect.\n */\n onLoad?: ({\n entry,\n finish,\n index,\n }: {\n index: number\n finish: () => void\n entry?: IntersectionObserverEntry\n }) => Promise<void> | void\n}\n\n/**\n * `useInfiniteScroll` is a custom hook for providing infinite scroll functionality.\n *\n * @see https://yamada-ui.com/docs/hooks/use-infinite-scroll\n */\nexport const useInfiniteScroll = <Y extends HTMLElement = HTMLDivElement>({\n behavior,\n disabled = false,\n indexRef: indexRefProp,\n initialLoad = false,\n orientation = \"vertical\",\n resetRef,\n reverse = false,\n rootMargin,\n rootRef,\n startIndex = initialLoad ? 0 : 1,\n threshold,\n onLoad: onLoadProp,\n}: UseInfiniteScrollProps = {}) => {\n const ref = useRef<Y>(null)\n const { getDocument, getWindow } = useEnvironment()\n const indexRef = useRef<number>(startIndex)\n const processingRef = useRef<boolean>(false)\n const observerRef = useRef<IntersectionObserver | undefined>(undefined)\n const [finish, setFinish] = useState<boolean>(false)\n const onLoad = useCallbackRef(onLoadProp)\n const vertical = orientation === \"vertical\"\n const direction = vertical ? \"top\" : \"left\"\n const options: IntersectionObserverInit = useMemo(() => {\n const root = rootRef?.current\n\n return { root, rootMargin, threshold }\n }, [rootMargin, rootRef, threshold])\n\n const onReset = useCallback(\n (index = 1, runScroll = true) => {\n indexRef.current = index\n\n setFinish(false)\n\n if (runScroll) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = reverse\n ? vertical\n ? el.scrollHeight\n : el.scrollWidth\n : 0\n\n target?.scrollTo({ behavior, [direction]: position })\n }\n }\n\n if (disabled) return\n\n setTimeout(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.observe(el)\n })\n },\n [\n disabled,\n rootRef,\n getDocument,\n vertical,\n getWindow,\n reverse,\n behavior,\n direction,\n ],\n )\n\n const onFinish = useCallback(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.unobserve(el)\n\n setFinish(true)\n }, [])\n\n const createObserver = useCallback(() => {\n const observer = new IntersectionObserver(async ([entry]) => {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (!entry?.isIntersecting || processingRef.current || !el) return\n\n const props = { entry, finish: onFinish, index: indexRef.current }\n\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n let prevScrollPosition = 0\n\n if (reverse)\n prevScrollPosition = vertical ? el.scrollHeight : el.scrollWidth\n\n await onLoad(props)\n\n if (reverse)\n setTimeout(() => {\n const target = el === body ? getWindow() : el\n const position =\n (vertical ? el.scrollHeight : el.scrollWidth) - prevScrollPosition\n\n target?.scrollTo({ [direction]: position })\n })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n }, options)\n\n return observer\n }, [\n options,\n rootRef,\n getDocument,\n vertical,\n onFinish,\n reverse,\n onLoad,\n getWindow,\n direction,\n ])\n\n useEffect(() => {\n const setTabIndexAttribute = () => {\n const root = rootRef?.current\n if (\n root &&\n isScrollable(root, vertical) &&\n !root.hasAttribute(\"tabindex\")\n ) {\n root.setAttribute(\"tabindex\", \"0\")\n }\n }\n\n const setupObserver = async () => {\n const el = ref.current\n const index = indexRef.current\n const root = rootRef?.current\n\n if (initialLoad) {\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n await onLoad({ finish: onFinish, index })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n }\n\n if (disabled) return\n\n observerRef.current = createObserver()\n\n const observer = observerRef.current\n\n if (reverse) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = vertical ? el.scrollHeight : el.scrollWidth\n\n target?.scrollTo({ [direction]: position })\n }\n }\n\n setTimeout(() => {\n if (el) observer.observe(el)\n })\n\n return () => {\n if (el) observer.unobserve(el)\n }\n }\n\n setTabIndexAttribute()\n setupObserver()\n }, [\n createObserver,\n initialLoad,\n disabled,\n reverse,\n vertical,\n onFinish,\n onLoad,\n rootRef,\n getDocument,\n getWindow,\n direction,\n ])\n\n assignRef(resetRef, onReset)\n assignRef(indexRefProp, (index) => (indexRef.current = index))\n\n return { ref, finish }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-infinite-scroll.cjs","names":["useEnvironment","useCallbackRef","root","el"],"sources":["../../../../src/components/infinite-scroll-area/use-infinite-scroll.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport type { Orientation } from \"../../core\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useEnvironment } from \"../../core\"\nimport { assignRef, useCallbackRef } from \"../../utils\"\n\nconst isScrollable = (el: HTMLElement, vertical: boolean) => {\n const style = getComputedStyle(el)\n\n if ([\"auto\", \"overlay\", \"scroll\"].includes(style.overflow)) return true\n\n if (vertical) {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowY)\n } else {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowX)\n }\n}\n\nexport interface UseInfiniteScrollProps extends Omit<\n IntersectionObserverInit,\n \"root\"\n> {\n /**\n * Determines whether scrolling is instant or animates smoothly.\n */\n behavior?: ScrollBehavior\n /**\n * If `true`, the infinite scroll is disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Ref to a reset index function.\n */\n indexRef?: RefObject<(index: number) => void>\n /**\n * If `true`, invoke `onLoad` function for the first time.\n *\n * @default false\n */\n initialLoad?: boolean\n /**\n * The orientation of the infinite scroll.\n *\n * @default 'vertical'\n */\n orientation?: Orientation\n /**\n * Ref to a reset function.\n */\n resetRef?: RefObject<(index?: number, runScroll?: boolean) => void>\n /**\n * If `true`, reverse direction.\n *\n * @default false\n */\n reverse?: boolean\n /**\n * Margin around the root. Can have values similar to the CSS margin property,\n * e.g. \"10px 20px 30px 40px\" (top, right, bottom, left).\n */\n rootMargin?: string\n /**\n * The element that is used as the viewport for checking visibility of the target.\n * Defaults to the browser viewport if not specified or if `null`.\n */\n rootRef?: null | RefObject<HTMLElement | null>\n /**\n * If set the `onLoad` function will start from the given index.\n * If `initialLoad` is `true`, index starts from `0`.\n *\n * @default 1\n */\n startIndex?: number\n /**\n * Either a single number or an array of numbers which indicate at what percentage of the target's visibility the observer's callback should be executed.\n */\n threshold?: number | number[]\n /**\n * The callback invoked when trigger is intersect.\n */\n onLoad?: ({\n entry,\n finish,\n index,\n }: {\n index: number\n finish: () => void\n entry?: IntersectionObserverEntry\n }) => Promise<void> | void\n}\n\n/**\n * `useInfiniteScroll` is a custom hook for providing infinite scroll functionality.\n *\n * @see https://yamada-ui.com/docs/hooks/use-infinite-scroll\n */\nexport const useInfiniteScroll = <Y extends HTMLElement = HTMLDivElement>({\n behavior,\n disabled = false,\n indexRef: indexRefProp,\n initialLoad = false,\n orientation = \"vertical\",\n resetRef,\n reverse = false,\n rootMargin,\n rootRef,\n startIndex = initialLoad ? 0 : 1,\n threshold,\n onLoad: onLoadProp,\n}: UseInfiniteScrollProps = {}) => {\n const ref = useRef<Y>(null)\n const { getDocument, getWindow } = useEnvironment()\n const indexRef = useRef<number>(startIndex)\n const processingRef = useRef<boolean>(false)\n const observerRef = useRef<IntersectionObserver | undefined>(undefined)\n const [finish, setFinish] = useState<boolean>(false)\n const onLoad = useCallbackRef(onLoadProp)\n const vertical = orientation === \"vertical\"\n const direction = vertical ? \"top\" : \"left\"\n\n const onReset = useCallback(\n (index = 1, runScroll = true) => {\n indexRef.current = index\n\n setFinish(false)\n\n if (runScroll) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = reverse\n ? vertical\n ? el.scrollHeight\n : el.scrollWidth\n : 0\n\n target?.scrollTo({ behavior, [direction]: position })\n }\n }\n\n if (disabled) return\n\n setTimeout(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.observe(el)\n })\n },\n [\n disabled,\n rootRef,\n getDocument,\n vertical,\n getWindow,\n reverse,\n behavior,\n direction,\n ],\n )\n\n const onFinish = useCallback(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.unobserve(el)\n\n setFinish(true)\n }, [])\n\n const createObserver = useCallback(() => {\n const root = rootRef?.current ?? null\n\n const observer = new IntersectionObserver(\n async ([entry]) => {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (!entry?.isIntersecting || processingRef.current || !el) return\n\n const props = { entry, finish: onFinish, index: indexRef.current }\n\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n let prevScrollPosition = 0\n\n if (reverse)\n prevScrollPosition = vertical ? el.scrollHeight : el.scrollWidth\n\n await onLoad(props)\n\n if (reverse)\n setTimeout(() => {\n const target = el === body ? getWindow() : el\n const position =\n (vertical ? el.scrollHeight : el.scrollWidth) - prevScrollPosition\n\n target?.scrollTo({ [direction]: position })\n })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n },\n { root, rootMargin, threshold },\n )\n\n return observer\n }, [\n rootRef,\n rootMargin,\n threshold,\n getDocument,\n vertical,\n onFinish,\n reverse,\n onLoad,\n getWindow,\n direction,\n ])\n\n useEffect(() => {\n const setTabIndexAttribute = () => {\n const root = rootRef?.current\n if (\n root &&\n isScrollable(root, vertical) &&\n !root.hasAttribute(\"tabindex\")\n ) {\n root.setAttribute(\"tabindex\", \"0\")\n }\n }\n\n const setupObserver = async () => {\n const el = ref.current\n const index = indexRef.current\n const root = rootRef?.current\n\n if (initialLoad) {\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n await onLoad({ finish: onFinish, index })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n }\n\n if (disabled) return\n\n observerRef.current = createObserver()\n\n const observer = observerRef.current\n\n if (reverse) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = vertical ? el.scrollHeight : el.scrollWidth\n\n target?.scrollTo({ [direction]: position })\n }\n }\n\n setTimeout(() => {\n if (el) observer.observe(el)\n })\n\n return () => {\n if (el) observer.unobserve(el)\n }\n }\n\n setTabIndexAttribute()\n setupObserver()\n }, [\n createObserver,\n initialLoad,\n disabled,\n reverse,\n vertical,\n onFinish,\n onLoad,\n rootRef,\n getDocument,\n getWindow,\n direction,\n ])\n\n assignRef(resetRef, onReset)\n assignRef(indexRefProp, (index) => (indexRef.current = index))\n\n return { ref, finish }\n}\n"],"mappings":"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"}
@@ -37,8 +37,6 @@ const AccordionRoot = withProvider(({ children, icon, iconHidden, items, ...prop
37
37
  children: /* @__PURE__ */ jsx(AccordionContext, {
38
38
  value: useMemo(() => ({
39
39
  focusedIndex,
40
- icon,
41
- iconHidden,
42
40
  index,
43
41
  multiple,
44
42
  setFocusedIndex,
@@ -46,8 +44,6 @@ const AccordionRoot = withProvider(({ children, icon, iconHidden, items, ...prop
46
44
  toggle
47
45
  }), [
48
46
  focusedIndex,
49
- icon,
50
- iconHidden,
51
47
  index,
52
48
  multiple,
53
49
  setFocusedIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":["createContext","index","props"],"sources":["../../../../src/components/accordion/accordion.tsx"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { ReactNodeOrFunction } from \"../../utils\"\nimport type { CollapseProps } from \"../collapse\"\nimport type { WithTransitionProps } from \"../motion\"\nimport type { AccordionStyle } from \"./accordion.style\"\nimport type { UseAccordionItemProps, UseAccordionProps } from \"./use-accordion\"\nimport { Children, cloneElement, isValidElement, useMemo } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { createContext, isString, runIfFn, useSplitChildren } from \"../../utils\"\nimport { Collapse } from \"../collapse\"\nimport { ChevronDownIcon } from \"../icon\"\nimport { accordionStyle } from \"./accordion.style\"\nimport {\n AccordionContext,\n AccordionDescendantsContext,\n AccordionItemContext,\n useAccordion,\n useAccordionItem,\n useAccordionItemContext,\n} from \"./use-accordion\"\n\ninterface AccordionCallBackProps {\n disabled?: boolean\n expanded?: boolean\n}\n\nexport interface AccordionItem extends Omit<AccordionItemProps, \"index\"> {}\n\ninterface ComponentContext extends Pick<\n AccordionRootProps,\n \"icon\" | \"iconHidden\"\n> {}\n\nexport interface AccordionRootProps\n extends\n Omit<HTMLStyledProps, \"onChange\">,\n ThemeProps<AccordionStyle>,\n UseAccordionProps {\n /**\n * The accordion icon for all items to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * If `true`, hide the accordion icon for all items.\n *\n * @default false\n */\n iconHidden?: boolean\n /**\n * If provided, generate elements based on items.\n */\n items?: AccordionItem[]\n}\n\ninterface ItemComponentContext extends Pick<AccordionItemProps, \"icon\"> {}\n\nconst [ItemComponentContext, useItemComponentContext] =\n createContext<ItemComponentContext>({\n name: \"ItemComponentContext\",\n })\n\nconst {\n ComponentContext,\n PropsContext: AccordionPropsContext,\n useComponentContext,\n usePropsContext: useAccordionPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<AccordionRootProps, AccordionStyle, ComponentContext>(\n \"accordion\",\n accordionStyle,\n)\n\nexport { AccordionPropsContext, useAccordionPropsContext }\n\n/**\n * `Accordion` is a component for a list that displays information in an expandable or collapsible manner.\n *\n * @see https://yamada-ui.com/docs/components/accordion\n */\nexport const AccordionRoot = withProvider<\"div\", AccordionRootProps>(\n ({ children, icon, iconHidden, items, ...props }) => {\n const {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n } = useAccordion(props)\n const computedChildren = useMemo(() => {\n if (children) return children\n\n return items?.map((props, index) => (\n <AccordionItem key={index} index={index} {...props} />\n ))\n }, [children, items])\n const context = useMemo(\n () => ({\n focusedIndex,\n icon,\n iconHidden,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n }),\n [\n focusedIndex,\n icon,\n iconHidden,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n ],\n )\n const componentContext = useMemo(\n () => ({ icon, iconHidden }),\n [icon, iconHidden],\n )\n\n return (\n <AccordionDescendantsContext value={descendants}>\n <AccordionContext value={context}>\n <ComponentContext value={componentContext}>\n <styled.div {...getRootProps()}>{computedChildren}</styled.div>\n </ComponentContext>\n </AccordionContext>\n </AccordionDescendantsContext>\n )\n },\n \"root\",\n)()\n\nexport interface AccordionItemProps\n extends\n Omit<HTMLStyledProps, \"children\">,\n Omit<UseAccordionItemProps, \"children\"> {\n /**\n * The accordion button to use.\n */\n button?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion children to use.\n */\n children?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n}\n\nexport const AccordionItem = withContext<\"div\", AccordionItemProps>(\n ({ button, children, icon, ...rest }) => {\n const {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n } = useAccordionItem(rest)\n const computedChildren = useMemo(\n () => runIfFn(children, { disabled, expanded: open }),\n [children, disabled, open],\n )\n const [omittedChildren, customAccordionButton, customAccordionPanel] =\n useSplitChildren(computedChildren, AccordionButton, AccordionPanel)\n const context = useMemo(\n () => ({\n disabled,\n icon,\n open,\n getButtonProps,\n getIconProps,\n getPanelProps,\n }),\n [disabled, getButtonProps, getPanelProps, getIconProps, icon, open],\n )\n const componentContext = useMemo(() => ({ icon }), [icon])\n\n return (\n <AccordionItemContext value={context}>\n <ItemComponentContext value={componentContext}>\n <styled.div {...getItemProps()}>\n {customAccordionButton ?? (\n <AccordionButton>\n {runIfFn(button, { disabled, expanded: open })}\n </AccordionButton>\n )}\n {customAccordionPanel ?? (\n <AccordionPanel>{omittedChildren}</AccordionPanel>\n )}\n </styled.div>\n </ItemComponentContext>\n </AccordionItemContext>\n )\n },\n \"item\",\n)()\n\nexport interface AccordionButtonProps extends HTMLStyledProps<\"button\"> {\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * Props the container element.\n */\n containerProps?: HTMLStyledProps\n}\n\nexport const AccordionButton = withContext<\"button\", AccordionButtonProps>(\n ({ children, icon: customIcon, containerProps, ...rest }) => {\n const { icon: rootIcon } = useComponentContext()\n const { icon: itemIcon } = useItemComponentContext()\n const { disabled, open, getButtonProps } = useAccordionItemContext()\n const props = { disabled, expanded: open }\n\n return (\n <styled.h3 {...containerProps}>\n <styled.button {...getButtonProps(rest)}>\n {children}\n\n <AccordionIcon>\n {runIfFn(customIcon, props) ??\n runIfFn(itemIcon, props) ??\n runIfFn(rootIcon, props)}\n </AccordionIcon>\n </styled.button>\n </styled.h3>\n )\n },\n \"button\",\n)()\n\ninterface AccordionIconProps extends HTMLStyledProps<\"svg\"> {}\n\nexport const AccordionIcon = withContext<\"svg\", AccordionIconProps>(\n ({ children = <ChevronDownIcon />, ...rest }) => {\n const { iconHidden } = useComponentContext()\n const { getIconProps } = useAccordionItemContext()\n\n if (iconHidden) return null\n\n if (isValidElement<HTMLProps<\"svg\">>(children))\n return cloneElement(\n children,\n getIconProps({\n ...rest,\n ...children.props,\n }),\n )\n\n return Children.count(children) > 1 ? Children.only(null) : null\n },\n \"icon\",\n)()\n\nexport interface AccordionPanelProps\n extends\n Omit<HTMLStyledProps, \"transition\">,\n Pick<\n CollapseProps,\n | \"animationOpacity\"\n | \"endingHeight\"\n | \"startingHeight\"\n | keyof WithTransitionProps\n > {}\n\nexport const AccordionPanel = withContext<\"div\", AccordionPanelProps>(\n ({\n animationOpacity,\n children,\n delay,\n duration,\n endingHeight,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n ...rest\n }) => {\n const { open, getPanelProps } = useAccordionItemContext()\n\n return (\n <Collapse\n {...{\n animationOpacity,\n delay,\n duration,\n endingHeight,\n open,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n }}\n >\n <styled.div {...getPanelProps(rest)}>\n {isString(children) ? <styled.p>{children}</styled.p> : children}\n </styled.div>\n </Collapse>\n )\n },\n \"panel\",\n)()\n"],"mappings":"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"}
1
+ {"version":3,"file":"accordion.js","names":["createContext","index","props"],"sources":["../../../../src/components/accordion/accordion.tsx"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { ReactNodeOrFunction } from \"../../utils\"\nimport type { CollapseProps } from \"../collapse\"\nimport type { WithTransitionProps } from \"../motion\"\nimport type { AccordionStyle } from \"./accordion.style\"\nimport type { UseAccordionItemProps, UseAccordionProps } from \"./use-accordion\"\nimport { Children, cloneElement, isValidElement, useMemo } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { createContext, isString, runIfFn, useSplitChildren } from \"../../utils\"\nimport { Collapse } from \"../collapse\"\nimport { ChevronDownIcon } from \"../icon\"\nimport { accordionStyle } from \"./accordion.style\"\nimport {\n AccordionContext,\n AccordionDescendantsContext,\n AccordionItemContext,\n useAccordion,\n useAccordionItem,\n useAccordionItemContext,\n} from \"./use-accordion\"\n\ninterface AccordionCallBackProps {\n disabled?: boolean\n expanded?: boolean\n}\n\nexport interface AccordionItem extends Omit<AccordionItemProps, \"index\"> {}\n\ninterface ComponentContext extends Pick<\n AccordionRootProps,\n \"icon\" | \"iconHidden\"\n> {}\n\nexport interface AccordionRootProps\n extends\n Omit<HTMLStyledProps, \"onChange\">,\n ThemeProps<AccordionStyle>,\n UseAccordionProps {\n /**\n * The accordion icon for all items to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * If `true`, hide the accordion icon for all items.\n *\n * @default false\n */\n iconHidden?: boolean\n /**\n * If provided, generate elements based on items.\n */\n items?: AccordionItem[]\n}\n\ninterface ItemComponentContext extends Pick<AccordionItemProps, \"icon\"> {}\n\nconst [ItemComponentContext, useItemComponentContext] =\n createContext<ItemComponentContext>({\n name: \"ItemComponentContext\",\n })\n\nconst {\n ComponentContext,\n PropsContext: AccordionPropsContext,\n useComponentContext,\n usePropsContext: useAccordionPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<AccordionRootProps, AccordionStyle, ComponentContext>(\n \"accordion\",\n accordionStyle,\n)\n\nexport { AccordionPropsContext, useAccordionPropsContext }\n\n/**\n * `Accordion` is a component for a list that displays information in an expandable or collapsible manner.\n *\n * @see https://yamada-ui.com/docs/components/accordion\n */\nexport const AccordionRoot = withProvider<\"div\", AccordionRootProps>(\n ({ children, icon, iconHidden, items, ...props }) => {\n const {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n } = useAccordion(props)\n const computedChildren = useMemo(() => {\n if (children) return children\n\n return items?.map((props, index) => (\n <AccordionItem key={index} index={index} {...props} />\n ))\n }, [children, items])\n const context = useMemo(\n () => ({\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n }),\n [focusedIndex, index, multiple, setFocusedIndex, setIndex, toggle],\n )\n const componentContext = useMemo(\n () => ({ icon, iconHidden }),\n [icon, iconHidden],\n )\n\n return (\n <AccordionDescendantsContext value={descendants}>\n <AccordionContext value={context}>\n <ComponentContext value={componentContext}>\n <styled.div {...getRootProps()}>{computedChildren}</styled.div>\n </ComponentContext>\n </AccordionContext>\n </AccordionDescendantsContext>\n )\n },\n \"root\",\n)()\n\nexport interface AccordionItemProps\n extends\n Omit<HTMLStyledProps, \"children\">,\n Omit<UseAccordionItemProps, \"children\"> {\n /**\n * The accordion button to use.\n */\n button?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion children to use.\n */\n children?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n}\n\nexport const AccordionItem = withContext<\"div\", AccordionItemProps>(\n ({ button, children, icon, ...rest }) => {\n const {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n } = useAccordionItem(rest)\n const computedChildren = useMemo(\n () => runIfFn(children, { disabled, expanded: open }),\n [children, disabled, open],\n )\n const [omittedChildren, customAccordionButton, customAccordionPanel] =\n useSplitChildren(computedChildren, AccordionButton, AccordionPanel)\n const context = useMemo(\n () => ({\n disabled,\n icon,\n open,\n getButtonProps,\n getIconProps,\n getPanelProps,\n }),\n [disabled, getButtonProps, getPanelProps, getIconProps, icon, open],\n )\n const componentContext = useMemo(() => ({ icon }), [icon])\n\n return (\n <AccordionItemContext value={context}>\n <ItemComponentContext value={componentContext}>\n <styled.div {...getItemProps()}>\n {customAccordionButton ?? (\n <AccordionButton>\n {runIfFn(button, { disabled, expanded: open })}\n </AccordionButton>\n )}\n {customAccordionPanel ?? (\n <AccordionPanel>{omittedChildren}</AccordionPanel>\n )}\n </styled.div>\n </ItemComponentContext>\n </AccordionItemContext>\n )\n },\n \"item\",\n)()\n\nexport interface AccordionButtonProps extends HTMLStyledProps<\"button\"> {\n /**\n * The accordion icon to use.\n */\n icon?: ReactNodeOrFunction<AccordionCallBackProps>\n /**\n * Props the container element.\n */\n containerProps?: HTMLStyledProps\n}\n\nexport const AccordionButton = withContext<\"button\", AccordionButtonProps>(\n ({ children, icon: customIcon, containerProps, ...rest }) => {\n const { icon: rootIcon } = useComponentContext()\n const { icon: itemIcon } = useItemComponentContext()\n const { disabled, open, getButtonProps } = useAccordionItemContext()\n const props = { disabled, expanded: open }\n\n return (\n <styled.h3 {...containerProps}>\n <styled.button {...getButtonProps(rest)}>\n {children}\n\n <AccordionIcon>\n {runIfFn(customIcon, props) ??\n runIfFn(itemIcon, props) ??\n runIfFn(rootIcon, props)}\n </AccordionIcon>\n </styled.button>\n </styled.h3>\n )\n },\n \"button\",\n)()\n\ninterface AccordionIconProps extends HTMLStyledProps<\"svg\"> {}\n\nexport const AccordionIcon = withContext<\"svg\", AccordionIconProps>(\n ({ children = <ChevronDownIcon />, ...rest }) => {\n const { iconHidden } = useComponentContext()\n const { getIconProps } = useAccordionItemContext()\n\n if (iconHidden) return null\n\n if (isValidElement<HTMLProps<\"svg\">>(children))\n return cloneElement(\n children,\n getIconProps({\n ...rest,\n ...children.props,\n }),\n )\n\n return Children.count(children) > 1 ? Children.only(null) : null\n },\n \"icon\",\n)()\n\nexport interface AccordionPanelProps\n extends\n Omit<HTMLStyledProps, \"transition\">,\n Pick<\n CollapseProps,\n | \"animationOpacity\"\n | \"endingHeight\"\n | \"startingHeight\"\n | keyof WithTransitionProps\n > {}\n\nexport const AccordionPanel = withContext<\"div\", AccordionPanelProps>(\n ({\n animationOpacity,\n children,\n delay,\n duration,\n endingHeight,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n ...rest\n }) => {\n const { open, getPanelProps } = useAccordionItemContext()\n\n return (\n <Collapse\n {...{\n animationOpacity,\n delay,\n duration,\n endingHeight,\n open,\n startingHeight,\n transition,\n transitionEnd,\n unmountOnExit,\n }}\n >\n <styled.div {...getPanelProps(rest)}>\n {isString(children) ? <styled.p>{children}</styled.p> : children}\n </styled.div>\n </Collapse>\n )\n },\n \"panel\",\n)()\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-accordion.js","names":["createContext","getRootProps: PropGetter","open","getItemProps: PropGetter","getButtonProps: PropGetter<\"button\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/accordion/use-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport {\n ariaAttr,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n mergeRefs,\n runKeyAction,\n} from \"../../utils\"\n\nconst {\n DescendantsContext: AccordionDescendantsContext,\n useDescendant: useAccordionDescendant,\n useDescendants: useAccordionDescendants,\n} = createDescendants<HTMLButtonElement>()\n\nexport {\n AccordionDescendantsContext,\n useAccordionDescendant,\n useAccordionDescendants,\n}\n\ninterface AccordionContext extends Omit<\n UseAccordionReturn,\n \"descendants\" | \"getRootProps\"\n> {}\n\nconst [AccordionContext, useAccordionContext] = createContext<AccordionContext>(\n {\n name: \"AccordionContext\",\n },\n)\n\nexport { AccordionContext, useAccordionContext }\n\ninterface AccordionItemContext extends Omit<\n UseAccordionItemReturn,\n \"getItemProps\"\n> {}\n\nconst [AccordionItemContext, useAccordionItemContext] =\n createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n })\n\nexport { AccordionItemContext, useAccordionItemContext }\n\nexport interface UseAccordionProps extends Omit<HTMLProps, \"onChange\"> {\n /**\n * The initial index(es) of the accordion item to expand.\n */\n defaultIndex?: number | number[]\n /**\n * The index(es) of the accordion item to expand.\n */\n index?: number | number[]\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n *\n * @default false\n */\n toggle?: boolean\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?: (index: number | number[]) => void\n}\n\nexport const useAccordion = ({\n defaultIndex: defaultIndexProp,\n index: indexProp,\n multiple,\n toggle,\n onChange,\n ...rest\n}: UseAccordionProps = {}) => {\n if (\n (indexProp || defaultIndexProp) != null &&\n !isArray(indexProp || defaultIndexProp) &&\n multiple\n ) {\n console.warn(\n `Accordion: If 'multiple' is passed, then 'index' or 'defaultIndex' must be an array.`,\n )\n }\n\n if (multiple && toggle) {\n console.warn(\n `Accordion: If 'multiple' is passed, 'toggle' will be ignored. Either remove 'toggle' or 'multiple' depending on whether you want multiple accordions visible or not`,\n )\n }\n\n const descendants = useAccordionDescendants()\n\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n\n const [index, setIndex] = useControllableState({\n defaultValue: () =>\n multiple ? (defaultIndexProp ?? []) : (defaultIndexProp ?? -1),\n value: indexProp,\n onChange,\n })\n\n const getRootProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [rest],\n )\n\n useEffect(() => {\n return () => setFocusedIndex(-1)\n }, [])\n\n return {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\nexport interface UseAccordionItemProps extends HTMLProps {\n /**\n * The index of the accordion item.\n */\n index: number\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useAccordionItem = ({\n disabled,\n index,\n ...rest\n}: UseAccordionItemProps) => {\n const itemId = useId()\n const panelId = useId()\n const {\n index: selectedIndex,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n } = useAccordionContext()\n const { descendants, register } = useAccordionDescendant({ disabled })\n const open =\n index !== -1\n ? isArray(selectedIndex)\n ? selectedIndex.includes(index)\n : selectedIndex === index\n : false\n\n if (open && disabled)\n console.warn(`Accordion: Cannot open a disabled accordion item`)\n\n const onChange = useCallback(\n (open: boolean) => {\n if (index === -1) return\n\n if (multiple && isArray(selectedIndex)) {\n setIndex(\n open\n ? selectedIndex.concat(index)\n : selectedIndex.filter((i) => i !== index),\n )\n } else if (open) {\n setIndex(index)\n } else if (toggle) {\n setIndex(-1)\n }\n },\n [multiple, toggle, index, selectedIndex, setIndex],\n )\n\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const onClick = useCallback(() => {\n onChange(!open)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, open, onChange])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLButtonElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const next = descendants.enabledNextValue(index)\n\n next?.node.focus()\n },\n ArrowUp: () => {\n const prev = descendants.enabledPrevValue(index)\n\n prev?.node.focus()\n },\n End: () => {\n const last = descendants.enabledLastValue()\n\n last?.node.focus()\n },\n Home: () => {\n const first = descendants.enabledFirstValue()\n\n first?.node.focus()\n },\n })\n },\n [descendants, index],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n \"data-expanded\": dataAttr(open),\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [open, rest],\n )\n\n const getButtonProps: PropGetter<\"button\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n id: itemId,\n type: \"button\",\n \"aria-controls\": panelId,\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n ...props,\n ref: mergeRefs(register, ref),\n disabled,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n [\n itemId,\n open,\n panelId,\n multiple,\n toggle,\n disabled,\n register,\n onClick,\n onFocus,\n onKeyDown,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: panelId,\n \"aria-labelledby\": cx(ariaLabelledby, itemId),\n role: \"region\",\n ...props,\n }),\n [itemId, panelId],\n )\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props) => ({\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [multiple, toggle, open, disabled],\n )\n\n return {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-accordion.js","names":["createContext","getRootProps: PropGetter","open","getItemProps: PropGetter","getButtonProps: PropGetter<\"button\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/accordion/use-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport {\n ariaAttr,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n mergeRefs,\n runKeyAction,\n} from \"../../utils\"\n\nconst {\n DescendantsContext: AccordionDescendantsContext,\n useDescendant: useAccordionDescendant,\n useDescendants: useAccordionDescendants,\n} = createDescendants<HTMLButtonElement>()\n\nexport {\n AccordionDescendantsContext,\n useAccordionDescendant,\n useAccordionDescendants,\n}\n\ninterface AccordionContext extends Omit<\n UseAccordionReturn,\n \"descendants\" | \"getRootProps\"\n> {}\n\nconst [AccordionContext, useAccordionContext] = createContext<AccordionContext>(\n { name: \"AccordionContext\" },\n)\n\nexport { AccordionContext, useAccordionContext }\n\ninterface AccordionItemContext extends Omit<\n UseAccordionItemReturn,\n \"getItemProps\"\n> {}\n\nconst [AccordionItemContext, useAccordionItemContext] =\n createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n })\n\nexport { AccordionItemContext, useAccordionItemContext }\n\nexport interface UseAccordionProps extends Omit<HTMLProps, \"onChange\"> {\n /**\n * The initial index(es) of the accordion item to expand.\n */\n defaultIndex?: number | number[]\n /**\n * The index(es) of the accordion item to expand.\n */\n index?: number | number[]\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n *\n * @default false\n */\n toggle?: boolean\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?: (index: number | number[]) => void\n}\n\nexport const useAccordion = ({\n defaultIndex: defaultIndexProp,\n index: indexProp,\n multiple,\n toggle,\n onChange,\n ...rest\n}: UseAccordionProps = {}) => {\n if (\n (indexProp || defaultIndexProp) != null &&\n !isArray(indexProp || defaultIndexProp) &&\n multiple\n ) {\n console.warn(\n `Accordion: If 'multiple' is passed, then 'index' or 'defaultIndex' must be an array.`,\n )\n }\n\n if (multiple && toggle) {\n console.warn(\n `Accordion: If 'multiple' is passed, 'toggle' will be ignored. Either remove 'toggle' or 'multiple' depending on whether you want multiple accordions visible or not`,\n )\n }\n\n const descendants = useAccordionDescendants()\n\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n\n const [index, setIndex] = useControllableState({\n defaultValue: () =>\n multiple ? (defaultIndexProp ?? []) : (defaultIndexProp ?? -1),\n value: indexProp,\n onChange,\n })\n\n const getRootProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [rest],\n )\n\n useEffect(() => {\n return () => setFocusedIndex(-1)\n }, [])\n\n return {\n descendants,\n focusedIndex,\n index,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n getRootProps,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\nexport interface UseAccordionItemProps extends HTMLProps {\n /**\n * The index of the accordion item.\n */\n index: number\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useAccordionItem = ({\n disabled,\n index,\n ...rest\n}: UseAccordionItemProps) => {\n const itemId = useId()\n const panelId = useId()\n const {\n index: selectedIndex,\n multiple,\n setFocusedIndex,\n setIndex,\n toggle,\n } = useAccordionContext()\n const { descendants, register } = useAccordionDescendant({ disabled })\n const open =\n index !== -1\n ? isArray(selectedIndex)\n ? selectedIndex.includes(index)\n : selectedIndex === index\n : false\n\n if (open && disabled)\n console.warn(`Accordion: Cannot open a disabled accordion item`)\n\n const onChange = useCallback(\n (open: boolean) => {\n if (index === -1) return\n\n if (multiple && isArray(selectedIndex)) {\n setIndex(\n open\n ? selectedIndex.concat(index)\n : selectedIndex.filter((i) => i !== index),\n )\n } else if (open) {\n setIndex(index)\n } else if (toggle) {\n setIndex(-1)\n }\n },\n [multiple, toggle, index, selectedIndex, setIndex],\n )\n\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const onClick = useCallback(() => {\n onChange(!open)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, open, onChange])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLButtonElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const next = descendants.enabledNextValue(index)\n\n next?.node.focus()\n },\n ArrowUp: () => {\n const prev = descendants.enabledPrevValue(index)\n\n prev?.node.focus()\n },\n End: () => {\n const last = descendants.enabledLastValue()\n\n last?.node.focus()\n },\n Home: () => {\n const first = descendants.enabledFirstValue()\n\n first?.node.focus()\n },\n })\n },\n [descendants, index],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n \"data-expanded\": dataAttr(open),\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n }),\n [open, rest],\n )\n\n const getButtonProps: PropGetter<\"button\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n id: itemId,\n type: \"button\",\n \"aria-controls\": panelId,\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n ...props,\n ref: mergeRefs(register, ref),\n disabled,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n [\n itemId,\n open,\n panelId,\n multiple,\n toggle,\n disabled,\n register,\n onClick,\n onFocus,\n onKeyDown,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: panelId,\n \"aria-labelledby\": cx(ariaLabelledby, itemId),\n role: \"region\",\n ...props,\n }),\n [itemId, panelId],\n )\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props) => ({\n \"aria-disabled\": ariaAttr((!multiple && !toggle && open) || disabled),\n \"aria-expanded\": open,\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [multiple, toggle, open, disabled],\n )\n\n return {\n disabled,\n open,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { mergeRefs } from "../../utils/ref.js";
4
- import "../../utils/index.js";
4
+ import { utils_exports } from "../../utils/index.js";
5
5
  import { styled } from "../../core/system/factory.js";
6
6
  import { createSlotComponent } from "../../core/components/create-component.js";
7
7
  import "../../core/index.js";
@@ -29,7 +29,7 @@ const InfiniteScrollArea = withProvider(({ ref, children, disabled, finish: fini
29
29
  resetRef,
30
30
  reverse,
31
31
  rootMargin,
32
- rootRef: rootRefProp ?? rootRef,
32
+ rootRef: (0, utils_exports.isNull)(rootRefProp) ? null : rootRefProp ?? rootRef,
33
33
  startIndex,
34
34
  threshold,
35
35
  onLoad
@@ -1 +1 @@
1
- {"version":3,"file":"infinite-scroll-area.js","names":[],"sources":["../../../../src/components/infinite-scroll-area/infinite-scroll-area.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport type { HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { InfiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport type { UseInfiniteScrollProps } from \"./use-infinite-scroll\"\nimport { useRef } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { useValue } from \"../../hooks/use-value\"\nimport { mergeRefs } from \"../../utils\"\nimport { infiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport { useInfiniteScroll } from \"./use-infinite-scroll\"\n\nexport interface InfiniteScrollAreaProps\n extends\n Omit<HTMLStyledProps, keyof UseInfiniteScrollProps>,\n Omit<UseInfiniteScrollProps, \"orientation\">,\n ThemeProps<InfiniteScrollAreaStyle> {\n /**\n * The infinite scroll area finish to use.\n */\n finish?: ReactNode\n /**\n * The infinite scroll area loading to use.\n */\n loading?: ReactNode\n /**\n * Props for infinite scroll area trigger component.\n */\n triggerProps?: HTMLStyledProps\n}\n\nconst {\n PropsContext: InfiniteScrollAreaPropsContext,\n usePropsContext: useInfiniteScrollAreaPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<InfiniteScrollAreaProps, InfiniteScrollAreaStyle>(\n \"infinite-scroll-area\",\n infiniteScrollAreaStyle,\n)\n\nexport { InfiniteScrollAreaPropsContext, useInfiniteScrollAreaPropsContext }\n\n/**\n * `InfiniteScrollArea` is for providing infinite scroll functionality.\n * This feature provides a smooth scrolling experience by automatically loading and displaying the next dataset when the user reaches the end of the page.\n *\n * @see https://yamada-ui.com/docs/components/infinite-scroll-area\n */\nexport const InfiniteScrollArea = withProvider<\n \"div\",\n InfiniteScrollAreaProps,\n \"orientation\"\n>(\n ({\n ref,\n children,\n disabled,\n finish: finishProp,\n indexRef,\n initialLoad,\n loading,\n orientation: orientationProp,\n resetRef,\n reverse,\n rootMargin,\n rootRef: rootRefProp,\n startIndex,\n threshold,\n triggerProps,\n onLoad,\n ...rest\n }) => {\n const rootRef = useRef<HTMLDivElement>(null)\n const orientation = useValue(orientationProp)\n const { ref: triggerRef, finish } = useInfiniteScroll({\n disabled,\n indexRef,\n initialLoad,\n orientation,\n resetRef,\n reverse,\n rootMargin,\n rootRef: rootRefProp ?? rootRef,\n startIndex,\n threshold,\n onLoad,\n })\n const hasFinish = !!finishProp\n const showTrigger = !disabled && (hasFinish || !finish)\n\n return (\n <styled.div\n ref={mergeRefs(rootRef, ref)}\n aria-busy=\"false\"\n role=\"feed\"\n {...rest}\n >\n {reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n\n {children}\n\n {!reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n </styled.div>\n )\n },\n \"root\",\n { transferProps: [\"orientation\"] },\n)()\n\ninterface InfiniteScrollTriggerProps extends HTMLStyledProps {}\n\nconst InfiniteScrollTrigger = withContext<\"div\", InfiniteScrollTriggerProps>(\n \"div\",\n \"trigger\",\n)()\n"],"mappings":";;;;;;;;;;;;;;AAgCA,MAAM,EACJ,cAAc,gCACd,iBAAiB,mCACjB,aACA,iBACE,oBACF,wBACA,wBACD;;;;;;;AAUD,MAAa,qBAAqB,cAK/B,EACC,KACA,UACA,UACA,QAAQ,YACR,UACA,aACA,SACA,aAAa,iBACb,UACA,SACA,YACA,SAAS,aACT,YACA,WACA,cACA,QACA,GAAG,WACC;CACJ,MAAM,UAAU,OAAuB,KAAK;CAE5C,MAAM,EAAE,KAAK,YAAY,WAAW,kBAAkB;EACpD;EACA;EACA;EACA,aALkB,SAAS,gBAAgB;EAM3C;EACA;EACA;EACA,SAAS,eAAe;EACxB;EACA;EACA;EACD,CAAC;CAEF,MAAM,cAAc,CAAC,aADH,CAAC,CAAC,cAC2B,CAAC;AAEhD,QACE,qBAAC,OAAO;EACN,KAAK,UAAU,SAAS,IAAI;EAC5B,aAAU;EACV,MAAK;EACL,GAAI;;GAEH,WAAW,cACV,oBAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;GAEH;GAEA,CAAC,WAAW,cACX,oBAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;;GACO;GAGjB,QACA,EAAE,eAAe,CAAC,cAAc,EAAE,CACnC,EAAE;AAIH,MAAM,wBAAwB,YAC5B,OACA,UACD,EAAE"}
1
+ {"version":3,"file":"infinite-scroll-area.js","names":[],"sources":["../../../../src/components/infinite-scroll-area/infinite-scroll-area.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport type { HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { InfiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport type { UseInfiniteScrollProps } from \"./use-infinite-scroll\"\nimport { useRef } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { useValue } from \"../../hooks/use-value\"\nimport { isNull, mergeRefs } from \"../../utils\"\nimport { infiniteScrollAreaStyle } from \"./infinite-scroll-area.style\"\nimport { useInfiniteScroll } from \"./use-infinite-scroll\"\n\nexport interface InfiniteScrollAreaProps\n extends\n Omit<HTMLStyledProps, keyof UseInfiniteScrollProps>,\n Omit<UseInfiniteScrollProps, \"orientation\">,\n ThemeProps<InfiniteScrollAreaStyle> {\n /**\n * The infinite scroll area finish to use.\n */\n finish?: ReactNode\n /**\n * The infinite scroll area loading to use.\n */\n loading?: ReactNode\n /**\n * Props for infinite scroll area trigger component.\n */\n triggerProps?: HTMLStyledProps\n}\n\nconst {\n PropsContext: InfiniteScrollAreaPropsContext,\n usePropsContext: useInfiniteScrollAreaPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<InfiniteScrollAreaProps, InfiniteScrollAreaStyle>(\n \"infinite-scroll-area\",\n infiniteScrollAreaStyle,\n)\n\nexport { InfiniteScrollAreaPropsContext, useInfiniteScrollAreaPropsContext }\n\n/**\n * `InfiniteScrollArea` is for providing infinite scroll functionality.\n * This feature provides a smooth scrolling experience by automatically loading and displaying the next dataset when the user reaches the end of the page.\n *\n * @see https://yamada-ui.com/docs/components/infinite-scroll-area\n */\nexport const InfiniteScrollArea = withProvider<\n \"div\",\n InfiniteScrollAreaProps,\n \"orientation\"\n>(\n ({\n ref,\n children,\n disabled,\n finish: finishProp,\n indexRef,\n initialLoad,\n loading,\n orientation: orientationProp,\n resetRef,\n reverse,\n rootMargin,\n rootRef: rootRefProp,\n startIndex,\n threshold,\n triggerProps,\n onLoad,\n ...rest\n }) => {\n const rootRef = useRef<HTMLDivElement>(null)\n const orientation = useValue(orientationProp)\n const { ref: triggerRef, finish } = useInfiniteScroll({\n disabled,\n indexRef,\n initialLoad,\n orientation,\n resetRef,\n reverse,\n rootMargin,\n rootRef: isNull(rootRefProp) ? null : (rootRefProp ?? rootRef),\n startIndex,\n threshold,\n onLoad,\n })\n const hasFinish = !!finishProp\n const showTrigger = !disabled && (hasFinish || !finish)\n\n return (\n <styled.div\n ref={mergeRefs(rootRef, ref)}\n aria-busy=\"false\"\n role=\"feed\"\n {...rest}\n >\n {reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n\n {children}\n\n {!reverse && showTrigger ? (\n <InfiniteScrollTrigger ref={triggerRef} {...triggerProps}>\n {finish ? finishProp : loading}\n </InfiniteScrollTrigger>\n ) : null}\n </styled.div>\n )\n },\n \"root\",\n { transferProps: [\"orientation\"] },\n)()\n\ninterface InfiniteScrollTriggerProps extends HTMLStyledProps {}\n\nconst InfiniteScrollTrigger = withContext<\"div\", InfiniteScrollTriggerProps>(\n \"div\",\n \"trigger\",\n)()\n"],"mappings":";;;;;;;;;;;;;;AAgCA,MAAM,EACJ,cAAc,gCACd,iBAAiB,mCACjB,aACA,iBACE,oBACF,wBACA,wBACD;;;;;;;AAUD,MAAa,qBAAqB,cAK/B,EACC,KACA,UACA,UACA,QAAQ,YACR,UACA,aACA,SACA,aAAa,iBACb,UACA,SACA,YACA,SAAS,aACT,YACA,WACA,cACA,QACA,GAAG,WACC;CACJ,MAAM,UAAU,OAAuB,KAAK;CAE5C,MAAM,EAAE,KAAK,YAAY,WAAW,kBAAkB;EACpD;EACA;EACA;EACA,aALkB,SAAS,gBAAgB;EAM3C;EACA;EACA;EACA,mCAAgB,YAAY,GAAG,OAAQ,eAAe;EACtD;EACA;EACA;EACD,CAAC;CAEF,MAAM,cAAc,CAAC,aADH,CAAC,CAAC,cAC2B,CAAC;AAEhD,QACE,qBAAC,OAAO;EACN,KAAK,UAAU,SAAS,IAAI;EAC5B,aAAU;EACV,MAAK;EACL,GAAI;;GAEH,WAAW,cACV,oBAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;GAEH;GAEA,CAAC,WAAW,cACX,oBAAC;IAAsB,KAAK;IAAY,GAAI;cACzC,SAAS,aAAa;KACD,GACtB;;GACO;GAGjB,QACA,EAAE,eAAe,CAAC,cAAc,EAAE,CACnC,EAAE;AAIH,MAAM,wBAAwB,YAC5B,OACA,UACD,EAAE"}
@@ -4,7 +4,7 @@ import { assignRef, useCallbackRef } from "../../utils/ref.js";
4
4
  import "../../utils/index.js";
5
5
  import { useEnvironment } from "../../core/system/environment-provider.js";
6
6
  import "../../core/index.js";
7
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
7
+ import { useCallback, useEffect, useRef, useState } from "react";
8
8
 
9
9
  //#region src/components/infinite-scroll-area/use-infinite-scroll.ts
10
10
  const isScrollable = (el, vertical) => {
@@ -40,17 +40,6 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
40
40
  const onLoad = useCallbackRef(onLoadProp);
41
41
  const vertical = orientation === "vertical";
42
42
  const direction = vertical ? "top" : "left";
43
- const options = useMemo(() => {
44
- return {
45
- root: rootRef?.current,
46
- rootMargin,
47
- threshold
48
- };
49
- }, [
50
- rootMargin,
51
- rootRef,
52
- threshold
53
- ]);
54
43
  const onReset = useCallback((index = 1, runScroll = true) => {
55
44
  indexRef.current = index;
56
45
  setFinish(false);
@@ -90,10 +79,11 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
90
79
  setFinish(true);
91
80
  }, []);
92
81
  const createObserver = useCallback(() => {
82
+ const root = rootRef?.current ?? null;
93
83
  return new IntersectionObserver(async ([entry]) => {
94
- const root = rootRef?.current;
84
+ const root$1 = rootRef?.current;
95
85
  const body = getDocument()?.body;
96
- const el = root && isScrollable(root, vertical) ? root : body;
86
+ const el = root$1 && isScrollable(root$1, vertical) ? root$1 : body;
97
87
  if (!entry?.isIntersecting || processingRef.current || !el) return;
98
88
  const props = {
99
89
  entry,
@@ -101,7 +91,7 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
101
91
  index: indexRef.current
102
92
  };
103
93
  processingRef.current = true;
104
- if (root) root.ariaBusy = "true";
94
+ if (root$1) root$1.ariaBusy = "true";
105
95
  let prevScrollPosition = 0;
106
96
  if (reverse) prevScrollPosition = vertical ? el.scrollHeight : el.scrollWidth;
107
97
  await onLoad(props);
@@ -112,11 +102,16 @@ const useInfiniteScroll = ({ behavior, disabled = false, indexRef: indexRefProp,
112
102
  });
113
103
  indexRef.current += 1;
114
104
  processingRef.current = false;
115
- if (root) root.ariaBusy = "false";
116
- }, options);
105
+ if (root$1) root$1.ariaBusy = "false";
106
+ }, {
107
+ root,
108
+ rootMargin,
109
+ threshold
110
+ });
117
111
  }, [
118
- options,
119
112
  rootRef,
113
+ rootMargin,
114
+ threshold,
120
115
  getDocument,
121
116
  vertical,
122
117
  onFinish,
@@ -1 +1 @@
1
- {"version":3,"file":"use-infinite-scroll.js","names":["options: IntersectionObserverInit","root","el"],"sources":["../../../../src/components/infinite-scroll-area/use-infinite-scroll.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport type { Orientation } from \"../../core\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { useEnvironment } from \"../../core\"\nimport { assignRef, useCallbackRef } from \"../../utils\"\n\nconst isScrollable = (el: HTMLElement, vertical: boolean) => {\n const style = getComputedStyle(el)\n\n if ([\"auto\", \"overlay\", \"scroll\"].includes(style.overflow)) return true\n\n if (vertical) {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowY)\n } else {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowX)\n }\n}\n\nexport interface UseInfiniteScrollProps extends Omit<\n IntersectionObserverInit,\n \"root\"\n> {\n /**\n * Determines whether scrolling is instant or animates smoothly.\n */\n behavior?: ScrollBehavior\n /**\n * If `true`, the infinite scroll is disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Ref to a reset index function.\n */\n indexRef?: RefObject<(index: number) => void>\n /**\n * If `true`, invoke `onLoad` function for the first time.\n *\n * @default false\n */\n initialLoad?: boolean\n /**\n * The orientation of the infinite scroll.\n *\n * @default 'vertical'\n */\n orientation?: Orientation\n /**\n * Ref to a reset function.\n */\n resetRef?: RefObject<(index?: number, runScroll?: boolean) => void>\n /**\n * If `true`, reverse direction.\n *\n * @default false\n */\n reverse?: boolean\n /**\n * Margin around the root. Can have values similar to the CSS margin property,\n * e.g. \"10px 20px 30px 40px\" (top, right, bottom, left).\n */\n rootMargin?: string\n /**\n * The element that is used as the viewport for checking visibility of the target.\n * Defaults to the browser viewport if not specified or if `null`.\n */\n rootRef?: RefObject<HTMLElement | null>\n /**\n * If set the `onLoad` function will start from the given index.\n * If `initialLoad` is `true`, index starts from `0`.\n *\n * @default 1\n */\n startIndex?: number\n /**\n * Either a single number or an array of numbers which indicate at what percentage of the target's visibility the observer's callback should be executed.\n */\n threshold?: number | number[]\n /**\n * The callback invoked when trigger is intersect.\n */\n onLoad?: ({\n entry,\n finish,\n index,\n }: {\n index: number\n finish: () => void\n entry?: IntersectionObserverEntry\n }) => Promise<void> | void\n}\n\n/**\n * `useInfiniteScroll` is a custom hook for providing infinite scroll functionality.\n *\n * @see https://yamada-ui.com/docs/hooks/use-infinite-scroll\n */\nexport const useInfiniteScroll = <Y extends HTMLElement = HTMLDivElement>({\n behavior,\n disabled = false,\n indexRef: indexRefProp,\n initialLoad = false,\n orientation = \"vertical\",\n resetRef,\n reverse = false,\n rootMargin,\n rootRef,\n startIndex = initialLoad ? 0 : 1,\n threshold,\n onLoad: onLoadProp,\n}: UseInfiniteScrollProps = {}) => {\n const ref = useRef<Y>(null)\n const { getDocument, getWindow } = useEnvironment()\n const indexRef = useRef<number>(startIndex)\n const processingRef = useRef<boolean>(false)\n const observerRef = useRef<IntersectionObserver | undefined>(undefined)\n const [finish, setFinish] = useState<boolean>(false)\n const onLoad = useCallbackRef(onLoadProp)\n const vertical = orientation === \"vertical\"\n const direction = vertical ? \"top\" : \"left\"\n const options: IntersectionObserverInit = useMemo(() => {\n const root = rootRef?.current\n\n return { root, rootMargin, threshold }\n }, [rootMargin, rootRef, threshold])\n\n const onReset = useCallback(\n (index = 1, runScroll = true) => {\n indexRef.current = index\n\n setFinish(false)\n\n if (runScroll) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = reverse\n ? vertical\n ? el.scrollHeight\n : el.scrollWidth\n : 0\n\n target?.scrollTo({ behavior, [direction]: position })\n }\n }\n\n if (disabled) return\n\n setTimeout(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.observe(el)\n })\n },\n [\n disabled,\n rootRef,\n getDocument,\n vertical,\n getWindow,\n reverse,\n behavior,\n direction,\n ],\n )\n\n const onFinish = useCallback(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.unobserve(el)\n\n setFinish(true)\n }, [])\n\n const createObserver = useCallback(() => {\n const observer = new IntersectionObserver(async ([entry]) => {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (!entry?.isIntersecting || processingRef.current || !el) return\n\n const props = { entry, finish: onFinish, index: indexRef.current }\n\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n let prevScrollPosition = 0\n\n if (reverse)\n prevScrollPosition = vertical ? el.scrollHeight : el.scrollWidth\n\n await onLoad(props)\n\n if (reverse)\n setTimeout(() => {\n const target = el === body ? getWindow() : el\n const position =\n (vertical ? el.scrollHeight : el.scrollWidth) - prevScrollPosition\n\n target?.scrollTo({ [direction]: position })\n })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n }, options)\n\n return observer\n }, [\n options,\n rootRef,\n getDocument,\n vertical,\n onFinish,\n reverse,\n onLoad,\n getWindow,\n direction,\n ])\n\n useEffect(() => {\n const setTabIndexAttribute = () => {\n const root = rootRef?.current\n if (\n root &&\n isScrollable(root, vertical) &&\n !root.hasAttribute(\"tabindex\")\n ) {\n root.setAttribute(\"tabindex\", \"0\")\n }\n }\n\n const setupObserver = async () => {\n const el = ref.current\n const index = indexRef.current\n const root = rootRef?.current\n\n if (initialLoad) {\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n await onLoad({ finish: onFinish, index })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n }\n\n if (disabled) return\n\n observerRef.current = createObserver()\n\n const observer = observerRef.current\n\n if (reverse) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = vertical ? el.scrollHeight : el.scrollWidth\n\n target?.scrollTo({ [direction]: position })\n }\n }\n\n setTimeout(() => {\n if (el) observer.observe(el)\n })\n\n return () => {\n if (el) observer.unobserve(el)\n }\n }\n\n setTabIndexAttribute()\n setupObserver()\n }, [\n createObserver,\n initialLoad,\n disabled,\n reverse,\n vertical,\n onFinish,\n onLoad,\n rootRef,\n getDocument,\n getWindow,\n direction,\n ])\n\n assignRef(resetRef, onReset)\n assignRef(indexRefProp, (index) => (indexRef.current = index))\n\n return { ref, finish }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-infinite-scroll.js","names":["root","el"],"sources":["../../../../src/components/infinite-scroll-area/use-infinite-scroll.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport type { Orientation } from \"../../core\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useEnvironment } from \"../../core\"\nimport { assignRef, useCallbackRef } from \"../../utils\"\n\nconst isScrollable = (el: HTMLElement, vertical: boolean) => {\n const style = getComputedStyle(el)\n\n if ([\"auto\", \"overlay\", \"scroll\"].includes(style.overflow)) return true\n\n if (vertical) {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowY)\n } else {\n return [\"auto\", \"overlay\", \"scroll\"].includes(style.overflowX)\n }\n}\n\nexport interface UseInfiniteScrollProps extends Omit<\n IntersectionObserverInit,\n \"root\"\n> {\n /**\n * Determines whether scrolling is instant or animates smoothly.\n */\n behavior?: ScrollBehavior\n /**\n * If `true`, the infinite scroll is disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Ref to a reset index function.\n */\n indexRef?: RefObject<(index: number) => void>\n /**\n * If `true`, invoke `onLoad` function for the first time.\n *\n * @default false\n */\n initialLoad?: boolean\n /**\n * The orientation of the infinite scroll.\n *\n * @default 'vertical'\n */\n orientation?: Orientation\n /**\n * Ref to a reset function.\n */\n resetRef?: RefObject<(index?: number, runScroll?: boolean) => void>\n /**\n * If `true`, reverse direction.\n *\n * @default false\n */\n reverse?: boolean\n /**\n * Margin around the root. Can have values similar to the CSS margin property,\n * e.g. \"10px 20px 30px 40px\" (top, right, bottom, left).\n */\n rootMargin?: string\n /**\n * The element that is used as the viewport for checking visibility of the target.\n * Defaults to the browser viewport if not specified or if `null`.\n */\n rootRef?: null | RefObject<HTMLElement | null>\n /**\n * If set the `onLoad` function will start from the given index.\n * If `initialLoad` is `true`, index starts from `0`.\n *\n * @default 1\n */\n startIndex?: number\n /**\n * Either a single number or an array of numbers which indicate at what percentage of the target's visibility the observer's callback should be executed.\n */\n threshold?: number | number[]\n /**\n * The callback invoked when trigger is intersect.\n */\n onLoad?: ({\n entry,\n finish,\n index,\n }: {\n index: number\n finish: () => void\n entry?: IntersectionObserverEntry\n }) => Promise<void> | void\n}\n\n/**\n * `useInfiniteScroll` is a custom hook for providing infinite scroll functionality.\n *\n * @see https://yamada-ui.com/docs/hooks/use-infinite-scroll\n */\nexport const useInfiniteScroll = <Y extends HTMLElement = HTMLDivElement>({\n behavior,\n disabled = false,\n indexRef: indexRefProp,\n initialLoad = false,\n orientation = \"vertical\",\n resetRef,\n reverse = false,\n rootMargin,\n rootRef,\n startIndex = initialLoad ? 0 : 1,\n threshold,\n onLoad: onLoadProp,\n}: UseInfiniteScrollProps = {}) => {\n const ref = useRef<Y>(null)\n const { getDocument, getWindow } = useEnvironment()\n const indexRef = useRef<number>(startIndex)\n const processingRef = useRef<boolean>(false)\n const observerRef = useRef<IntersectionObserver | undefined>(undefined)\n const [finish, setFinish] = useState<boolean>(false)\n const onLoad = useCallbackRef(onLoadProp)\n const vertical = orientation === \"vertical\"\n const direction = vertical ? \"top\" : \"left\"\n\n const onReset = useCallback(\n (index = 1, runScroll = true) => {\n indexRef.current = index\n\n setFinish(false)\n\n if (runScroll) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = reverse\n ? vertical\n ? el.scrollHeight\n : el.scrollWidth\n : 0\n\n target?.scrollTo({ behavior, [direction]: position })\n }\n }\n\n if (disabled) return\n\n setTimeout(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.observe(el)\n })\n },\n [\n disabled,\n rootRef,\n getDocument,\n vertical,\n getWindow,\n reverse,\n behavior,\n direction,\n ],\n )\n\n const onFinish = useCallback(() => {\n const observer = observerRef.current\n const el = ref.current\n\n if (el) observer?.unobserve(el)\n\n setFinish(true)\n }, [])\n\n const createObserver = useCallback(() => {\n const root = rootRef?.current ?? null\n\n const observer = new IntersectionObserver(\n async ([entry]) => {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (!entry?.isIntersecting || processingRef.current || !el) return\n\n const props = { entry, finish: onFinish, index: indexRef.current }\n\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n let prevScrollPosition = 0\n\n if (reverse)\n prevScrollPosition = vertical ? el.scrollHeight : el.scrollWidth\n\n await onLoad(props)\n\n if (reverse)\n setTimeout(() => {\n const target = el === body ? getWindow() : el\n const position =\n (vertical ? el.scrollHeight : el.scrollWidth) - prevScrollPosition\n\n target?.scrollTo({ [direction]: position })\n })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n },\n { root, rootMargin, threshold },\n )\n\n return observer\n }, [\n rootRef,\n rootMargin,\n threshold,\n getDocument,\n vertical,\n onFinish,\n reverse,\n onLoad,\n getWindow,\n direction,\n ])\n\n useEffect(() => {\n const setTabIndexAttribute = () => {\n const root = rootRef?.current\n if (\n root &&\n isScrollable(root, vertical) &&\n !root.hasAttribute(\"tabindex\")\n ) {\n root.setAttribute(\"tabindex\", \"0\")\n }\n }\n\n const setupObserver = async () => {\n const el = ref.current\n const index = indexRef.current\n const root = rootRef?.current\n\n if (initialLoad) {\n processingRef.current = true\n\n if (root) root.ariaBusy = \"true\"\n\n await onLoad({ finish: onFinish, index })\n\n indexRef.current += 1\n processingRef.current = false\n\n if (root) root.ariaBusy = \"false\"\n }\n\n if (disabled) return\n\n observerRef.current = createObserver()\n\n const observer = observerRef.current\n\n if (reverse) {\n const root = rootRef?.current\n const body = getDocument()?.body\n const el = root && isScrollable(root, vertical) ? root : body\n\n if (el) {\n const target = el === body ? getWindow() : el\n const position = vertical ? el.scrollHeight : el.scrollWidth\n\n target?.scrollTo({ [direction]: position })\n }\n }\n\n setTimeout(() => {\n if (el) observer.observe(el)\n })\n\n return () => {\n if (el) observer.unobserve(el)\n }\n }\n\n setTabIndexAttribute()\n setupObserver()\n }, [\n createObserver,\n initialLoad,\n disabled,\n reverse,\n vertical,\n onFinish,\n onLoad,\n rootRef,\n getDocument,\n getWindow,\n direction,\n ])\n\n assignRef(resetRef, onReset)\n assignRef(indexRefProp, (index) => (indexRef.current = index))\n\n return { ref, finish }\n}\n"],"mappings":"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"}