@yamada-ui/react 2.2.1-dev-20260428104908 → 2.2.1-dev-20260428111001

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 (237) hide show
  1. package/dist/cjs/components/menu/use-menu.cjs +25 -22
  2. package/dist/cjs/components/menu/use-menu.cjs.map +1 -1
  3. package/dist/cjs/components/native-accordion/use-native-accordion.cjs +9 -12
  4. package/dist/cjs/components/native-accordion/use-native-accordion.cjs.map +1 -1
  5. package/dist/esm/components/menu/use-menu.js +25 -22
  6. package/dist/esm/components/menu/use-menu.js.map +1 -1
  7. package/dist/esm/components/native-accordion/use-native-accordion.js +9 -12
  8. package/dist/esm/components/native-accordion/use-native-accordion.js.map +1 -1
  9. package/dist/types/components/accordion/accordion.d.ts +2 -2
  10. package/dist/types/components/accordion/use-accordion.d.ts +11 -11
  11. package/dist/types/components/action-bar/action-bar.d.ts +2 -2
  12. package/dist/types/components/airy/airy.d.ts +2 -2
  13. package/dist/types/components/alert/alert.d.ts +2 -2
  14. package/dist/types/components/alert/alert.style.d.ts +1 -1
  15. package/dist/types/components/alpha-slider/alpha-slider.d.ts +2 -2
  16. package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +2 -2
  17. package/dist/types/components/autocomplete/autocomplete.d.ts +2 -2
  18. package/dist/types/components/autocomplete/autocomplete.style.d.ts +1 -1
  19. package/dist/types/components/autocomplete/use-autocomplete.d.ts +5 -5
  20. package/dist/types/components/avatar/avatar.d.ts +5 -5
  21. package/dist/types/components/avatar/use-avatar-group.d.ts +2 -2
  22. package/dist/types/components/badge/badge.d.ts +2 -2
  23. package/dist/types/components/bleed/bleed.d.ts +2 -2
  24. package/dist/types/components/blockquote/blockquote.d.ts +2 -2
  25. package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
  26. package/dist/types/components/breadcrumb/use-breadcrumb.d.ts +2 -2
  27. package/dist/types/components/button/button.d.ts +2 -2
  28. package/dist/types/components/button/icon-button.d.ts +2 -2
  29. package/dist/types/components/calendar/calendar.d.ts +2 -2
  30. package/dist/types/components/calendar/calendar.style.d.ts +2 -2
  31. package/dist/types/components/calendar/use-calendar.d.ts +8 -8
  32. package/dist/types/components/card/card.d.ts +2 -2
  33. package/dist/types/components/carousel/carousel.d.ts +2 -2
  34. package/dist/types/components/carousel/carousel.style.d.ts +2 -2
  35. package/dist/types/components/carousel/use-carousel.d.ts +3 -3
  36. package/dist/types/components/center/center.d.ts +2 -2
  37. package/dist/types/components/chart/area-chart.d.ts +2 -2
  38. package/dist/types/components/chart/bar-chart.d.ts +2 -2
  39. package/dist/types/components/chart/cartesian-chart.style.d.ts +1 -1
  40. package/dist/types/components/chart/chart.d.ts +5 -5
  41. package/dist/types/components/chart/composed-chart.d.ts +2 -2
  42. package/dist/types/components/chart/donut-chart.d.ts +2 -2
  43. package/dist/types/components/chart/line-chart.d.ts +2 -2
  44. package/dist/types/components/chart/pie-chart.d.ts +2 -2
  45. package/dist/types/components/chart/polar-chart.style.d.ts +1 -1
  46. package/dist/types/components/chart/radar-chart.d.ts +2 -2
  47. package/dist/types/components/chart/radial-chart.d.ts +2 -2
  48. package/dist/types/components/chart/use-chart.d.ts +2 -2
  49. package/dist/types/components/checkbox/checkbox.d.ts +5 -5
  50. package/dist/types/components/checkbox/checkbox.style.d.ts +1 -1
  51. package/dist/types/components/checkbox/use-checkbox-group.d.ts +2 -2
  52. package/dist/types/components/checkbox-card/checkbox-card.d.ts +5 -5
  53. package/dist/types/components/checkbox-card/checkbox-card.style.d.ts +1 -1
  54. package/dist/types/components/circle-progress/circle-progress.d.ts +2 -2
  55. package/dist/types/components/close-button/close-button.d.ts +2 -2
  56. package/dist/types/components/code/code.d.ts +2 -2
  57. package/dist/types/components/collapse/collapse.d.ts +2 -2
  58. package/dist/types/components/color-picker/color-picker.d.ts +2 -2
  59. package/dist/types/components/color-picker/color-picker.style.d.ts +1 -1
  60. package/dist/types/components/color-picker/use-color-picker.d.ts +2 -2
  61. package/dist/types/components/color-selector/color-selector.d.ts +2 -2
  62. package/dist/types/components/color-selector/color-selector.style.d.ts +2 -2
  63. package/dist/types/components/color-selector/use-color-selector.d.ts +3 -3
  64. package/dist/types/components/color-swatch/color-swatch.d.ts +2 -2
  65. package/dist/types/components/container/container.d.ts +2 -2
  66. package/dist/types/components/data-list/data-list.d.ts +2 -2
  67. package/dist/types/components/data-list/data-list.style.d.ts +1 -1
  68. package/dist/types/components/date-picker/date-picker.d.ts +2 -2
  69. package/dist/types/components/date-picker/date-picker.style.d.ts +1 -1
  70. package/dist/types/components/date-picker/use-date-picker.d.ts +4 -4
  71. package/dist/types/components/drawer/drawer.d.ts +2 -2
  72. package/dist/types/components/drawer/drawer.style.d.ts +2 -2
  73. package/dist/types/components/dropzone/dropzone.d.ts +3 -3
  74. package/dist/types/components/dropzone/dropzone.style.d.ts +1 -1
  75. package/dist/types/components/editable/editable.d.ts +2 -2
  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 +2 -2
  91. package/dist/types/components/float/float.d.ts +2 -2
  92. package/dist/types/components/form/form.d.ts +3 -3
  93. package/dist/types/components/form/form.style.d.ts +1 -1
  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/input/input-addon.d.ts +2 -2
  108. package/dist/types/components/input/input-element.d.ts +2 -2
  109. package/dist/types/components/input/input.d.ts +2 -2
  110. package/dist/types/components/kbd/kbd.d.ts +2 -2
  111. package/dist/types/components/link/link.d.ts +2 -2
  112. package/dist/types/components/link-box/link-box.d.ts +2 -2
  113. package/dist/types/components/list/list.d.ts +2 -2
  114. package/dist/types/components/loading/loading-provider.d.ts +2 -2
  115. package/dist/types/components/loading/loading.d.ts +3 -3
  116. package/dist/types/components/mark/mark.d.ts +2 -2
  117. package/dist/types/components/menu/menu.d.ts +2 -2
  118. package/dist/types/components/menu/use-menu.d.ts +11 -11
  119. package/dist/types/components/modal/modal.d.ts +2 -2
  120. package/dist/types/components/modal/modal.style.d.ts +2 -2
  121. package/dist/types/components/native-accordion/native-accordion.d.ts +2 -2
  122. package/dist/types/components/native-accordion/use-native-accordion.d.ts +2 -2
  123. package/dist/types/components/native-popover/native-popover.d.ts +2 -2
  124. package/dist/types/components/native-select/native-select.d.ts +2 -2
  125. package/dist/types/components/native-select/native-select.style.d.ts +1 -1
  126. package/dist/types/components/native-table/native-table.d.ts +4 -4
  127. package/dist/types/components/notice/notice.style.d.ts +1 -1
  128. package/dist/types/components/number-input/number-input.d.ts +2 -2
  129. package/dist/types/components/number-input/number-input.style.d.ts +1 -1
  130. package/dist/types/components/pagination/pagination.d.ts +2 -2
  131. package/dist/types/components/pagination/use-pagination.d.ts +2 -2
  132. package/dist/types/components/password-input/password-input.d.ts +2 -2
  133. package/dist/types/components/password-input/password-input.style.d.ts +1 -1
  134. package/dist/types/components/password-input/strength-meter.d.ts +2 -2
  135. package/dist/types/components/password-input/strength-meter.style.d.ts +1 -1
  136. package/dist/types/components/password-input/use-password-input.d.ts +2 -2
  137. package/dist/types/components/pin-input/pin-input.d.ts +2 -2
  138. package/dist/types/components/pin-input/pin-input.style.d.ts +1 -1
  139. package/dist/types/components/pin-input/use-pin-input.d.ts +7 -7
  140. package/dist/types/components/popover/popover.d.ts +2 -2
  141. package/dist/types/components/progress/progress.d.ts +4 -4
  142. package/dist/types/components/progress/use-progress.d.ts +706 -706
  143. package/dist/types/components/qr-code/qr-code.d.ts +2 -2
  144. package/dist/types/components/radio/radio.d.ts +5 -5
  145. package/dist/types/components/radio/radio.style.d.ts +1 -1
  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/use-rating.d.ts +7 -7
  150. package/dist/types/components/reorder/reorder.d.ts +2 -2
  151. package/dist/types/components/reorder/reorder.style.d.ts +1 -1
  152. package/dist/types/components/reorder/use-reorder.d.ts +3 -3
  153. package/dist/types/components/resizable/resizable.d.ts +2 -2
  154. package/dist/types/components/resizable/resizable.style.d.ts +2 -2
  155. package/dist/types/components/resizable/use-resizable.d.ts +2 -2
  156. package/dist/types/components/ripple/ripple.d.ts +2 -2
  157. package/dist/types/components/ripple/use-ripple.d.ts +2 -2
  158. package/dist/types/components/rotate/rotate.d.ts +2 -2
  159. package/dist/types/components/saturation-slider/saturation-slider.d.ts +2 -2
  160. package/dist/types/components/saturation-slider/use-saturation-slider.d.ts +2 -2
  161. package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
  162. package/dist/types/components/segmented-control/segmented-control.d.ts +2 -2
  163. package/dist/types/components/segmented-control/segmented-control.style.d.ts +2 -2
  164. package/dist/types/components/segmented-control/use-segmented-control.d.ts +9 -9
  165. package/dist/types/components/select/select.d.ts +2 -2
  166. package/dist/types/components/select/select.style.d.ts +1 -1
  167. package/dist/types/components/select/use-select.d.ts +4 -4
  168. package/dist/types/components/separator/separator.d.ts +2 -2
  169. package/dist/types/components/sidebar/sidebar.d.ts +2 -2
  170. package/dist/types/components/sidebar/use-sidebar.d.ts +9 -9
  171. package/dist/types/components/simple-grid/simple-grid.d.ts +2 -2
  172. package/dist/types/components/skeleton/skeleton.d.ts +2 -2
  173. package/dist/types/components/slide/slide.d.ts +2 -2
  174. package/dist/types/components/slide-fade/slide-fade.d.ts +2 -2
  175. package/dist/types/components/slider/slider.d.ts +2 -2
  176. package/dist/types/components/slider/use-slider.d.ts +2 -2
  177. package/dist/types/components/stack/h-stack.d.ts +2 -2
  178. package/dist/types/components/stack/stack.d.ts +2 -2
  179. package/dist/types/components/stack/v-stack.d.ts +2 -2
  180. package/dist/types/components/stack/z-stack.d.ts +2 -2
  181. package/dist/types/components/stat/stat.d.ts +2 -2
  182. package/dist/types/components/stat/stat.style.d.ts +2 -2
  183. package/dist/types/components/status/status.d.ts +2 -2
  184. package/dist/types/components/status/status.style.d.ts +2 -2
  185. package/dist/types/components/steps/steps.d.ts +2 -2
  186. package/dist/types/components/steps/steps.style.d.ts +1 -1
  187. package/dist/types/components/steps/use-steps.d.ts +10 -10
  188. package/dist/types/components/switch/switch.d.ts +2 -2
  189. package/dist/types/components/table/table.d.ts +2 -2
  190. package/dist/types/components/tabs/tabs.d.ts +2 -2
  191. package/dist/types/components/tabs/use-tabs.d.ts +16 -16
  192. package/dist/types/components/tag/tag.d.ts +2 -2
  193. package/dist/types/components/tag/tag.style.d.ts +1 -1
  194. package/dist/types/components/text/text.d.ts +2 -2
  195. package/dist/types/components/textarea/textarea.d.ts +2 -2
  196. package/dist/types/components/textarea/use-autosize.d.ts +2 -2
  197. package/dist/types/components/timeline/timeline.d.ts +5 -5
  198. package/dist/types/components/timeline/timeline.style.d.ts +1 -1
  199. package/dist/types/components/toggle/toggle.d.ts +5 -5
  200. package/dist/types/components/toggle/use-toggle-group.d.ts +2 -2
  201. package/dist/types/components/toggle/use-toggle.d.ts +2 -2
  202. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  203. package/dist/types/components/tree/tree.d.ts +2 -2
  204. package/dist/types/components/tree/tree.style.d.ts +1 -1
  205. package/dist/types/components/tree/use-tree.d.ts +183 -183
  206. package/dist/types/components/visually-hidden/visually-hidden.d.ts +2 -2
  207. package/dist/types/components/wrap/wrap.d.ts +2 -2
  208. package/dist/types/core/components/create-component.d.ts +8 -7
  209. package/dist/types/core/components/use-component-style.d.ts +1 -0
  210. package/dist/types/core/components/utils.d.ts +1 -0
  211. package/dist/types/core/constant.d.ts +1 -0
  212. package/dist/types/core/css/calc.d.ts +1 -0
  213. package/dist/types/core/css/config.d.ts +1 -0
  214. package/dist/types/core/css/css.d.ts +1 -0
  215. package/dist/types/core/css/index.types.d.ts +1 -0
  216. package/dist/types/core/css/styles.d.ts +1 -0
  217. package/dist/types/core/css/token.d.ts +1 -0
  218. package/dist/types/core/css/use-css.d.ts +1 -0
  219. package/dist/types/core/css/utils.d.ts +1 -0
  220. package/dist/types/core/generated-theme-tokens.types.d.ts +1 -0
  221. package/dist/types/core/index.d.ts +1 -0
  222. package/dist/types/core/system/color-mode-provider.d.ts +2 -2
  223. package/dist/types/core/system/storage-script.d.ts +3 -3
  224. package/dist/types/core/system/styled.d.ts +2 -2
  225. package/dist/types/core/system/system-provider.d.ts +2 -2
  226. package/dist/types/core/system/var.d.ts +1 -0
  227. package/dist/types/hooks/use-breakpoint/use-breakpoint-state.d.ts +2 -2
  228. package/dist/types/hooks/use-clickable/index.d.ts +7 -7
  229. package/dist/types/hooks/use-clipboard/index.d.ts +2 -2
  230. package/dist/types/hooks/use-combobox/index.d.ts +12 -12
  231. package/dist/types/hooks/use-counter/index.d.ts +2 -2
  232. package/dist/types/hooks/use-descendants/index.d.ts +2 -2
  233. package/dist/types/hooks/use-field-sizing/index.d.ts +2 -2
  234. package/dist/types/hooks/use-hover/index.d.ts +2 -2
  235. package/dist/types/providers/i18n-provider/i18n-provider.d.ts +3 -3
  236. package/dist/types/utils/children.d.ts +2 -2
  237. package/package.json +2 -2
@@ -6,6 +6,8 @@ const require_dom = require('../../utils/dom.cjs');
6
6
  const require_effect = require('../../utils/effect.cjs');
7
7
  const require_ref = require('../../utils/ref.cjs');
8
8
  const require_utils_index = require('../../utils/index.cjs');
9
+ const require_props = require('../../core/components/props.cjs');
10
+ require('../../core/index.cjs');
9
11
  const require_hooks_use_controllable_state_index = require('../../hooks/use-controllable-state/index.cjs');
10
12
  const require_hooks_use_descendants_index = require('../../hooks/use-descendants/index.cjs');
11
13
  const require_use_disclosure = require('../../hooks/use-disclosure/use-disclosure.cjs');
@@ -306,12 +308,10 @@ const useSubMenu = ({ descendants, disabled = false, open, subMenuDirection = "e
306
308
  const useMenuGroup = ({ "aria-labelledby": ariaLabelledbyProp, ...rest }) => {
307
309
  const labelId = (0, react.useId)();
308
310
  return {
309
- getGroupProps: (0, react.useCallback)(({ "aria-labelledby": ariaLabelledby, ...props } = {}) => ({
311
+ getGroupProps: (0, react.useCallback)(({ "aria-labelledby": ariaLabelledby, ...props } = {}) => require_props.mergeProps({
310
312
  "aria-labelledby": (0, require_utils_index.utils_exports.cx)(ariaLabelledbyProp, ariaLabelledby, labelId),
311
- role: "group",
312
- ...rest,
313
- ...props
314
- }), [
313
+ role: "group"
314
+ }, rest, props)(), [
315
315
  ariaLabelledbyProp,
316
316
  labelId,
317
317
  rest
@@ -376,23 +376,26 @@ const useMenuItem = ({ id, "aria-disabled": ariaDisabled, "data-disabled": dataD
376
376
  ]);
377
377
  return {
378
378
  subMenuTrigger,
379
- getItemProps: (0, react.useCallback)(({ ref, ...props } = {}) => ({
380
- id,
381
- "aria-disabled": ariaDisabled ?? (0, require_utils_index.utils_exports.ariaAttr)(disabled),
382
- "data-disabled": dataDisabled ?? (0, require_utils_index.utils_exports.dataAttr)(disabled),
383
- role: "menuitem",
384
- tabIndex: -1,
385
- ...rest,
386
- ...props,
387
- ref: require_ref.mergeRefs(ref, rest.ref, itemRef, register),
388
- onClick: (0, require_utils_index.utils_exports.handlerAll)(props.onClick, rest.onClick, () => onSelect(value, closeOnSelect)),
389
- onFocus: (0, require_utils_index.utils_exports.handlerAll)(props.onFocus, rest.onFocus, onActive),
390
- onKeyDown: (0, require_utils_index.utils_exports.handlerAll)(props.onKeyDown, rest.onKeyDown, onKeyDown),
391
- onMouseMove: (0, require_utils_index.utils_exports.handlerAll)(props.onMouseMove, rest.onMouseMove, () => {
392
- onCloseSubMenu();
393
- onActive();
394
- })
395
- }), [
379
+ getItemProps: (0, react.useCallback)(({ ref, ...props } = {}) => {
380
+ const { onClick: restOnClick, onFocus: restOnFocus, onKeyDown: restOnKeyDown, onMouseMove: restOnMouseMove, ...restProps } = rest;
381
+ const { onClick: propsOnClick, onFocus: propsOnFocus, onKeyDown: propsOnKeyDown, onMouseMove: propsOnMouseMove, ...itemProps } = props;
382
+ return require_props.mergeProps({
383
+ id,
384
+ "aria-disabled": ariaDisabled ?? (0, require_utils_index.utils_exports.ariaAttr)(disabled),
385
+ "data-disabled": dataDisabled ?? (0, require_utils_index.utils_exports.dataAttr)(disabled),
386
+ role: "menuitem",
387
+ tabIndex: -1
388
+ }, restProps, itemProps, {
389
+ ref: require_ref.mergeRefs(ref, itemRef, register),
390
+ onClick: (0, require_utils_index.utils_exports.handlerAll)(propsOnClick, restOnClick, () => onSelect(value, closeOnSelect)),
391
+ onFocus: (0, require_utils_index.utils_exports.handlerAll)(propsOnFocus, restOnFocus, onActive),
392
+ onKeyDown: (0, require_utils_index.utils_exports.handlerAll)(propsOnKeyDown, restOnKeyDown, onKeyDown),
393
+ onMouseMove: (0, require_utils_index.utils_exports.handlerAll)(propsOnMouseMove, restOnMouseMove, () => {
394
+ onCloseSubMenu();
395
+ onActive();
396
+ })
397
+ })();
398
+ }, [
396
399
  id,
397
400
  ariaDisabled,
398
401
  disabled,
@@ -1 +1 @@
1
- {"version":3,"file":"use-menu.cjs","names":["createDescendants","createContext","useDisclosure","getTriggerProps: PropGetter","getContextTriggerProps: PropGetter","getContentProps: PropGetter","mergeRefs","getSeparatorProps: PropGetter","useControllableState","value"],"sources":["../../../../src/components/menu/use-menu.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent, MouseEvent, RefObject } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { Descendant, Descendants } from \"../../hooks/use-descendants\"\nimport type { UseDisclosureProps } from \"../../hooks/use-disclosure\"\nimport { useCallback, useId, useRef } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { useDisclosure } from \"../../hooks/use-disclosure\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isString,\n isTruthyDataAttr,\n mergeRefs,\n noop,\n runKeyAction,\n useUpdateEffect,\n} from \"../../utils\"\n\ntype SubMenuDirection = \"end\" | \"start\"\n\ninterface MenuDescendantProps {\n id: string\n}\ntype MenuDescendant = Descendant<HTMLDivElement, MenuDescendantProps>\n\nconst {\n DescendantsContext: MenuDescendantsContext,\n useDescendant: useMenuDescendant,\n useDescendantRegister: useMenuDescendantRegister,\n useDescendants: useMenuDescendants,\n} = createDescendants<HTMLDivElement, MenuDescendantProps>()\n\nexport { MenuDescendantsContext, useMenuDescendant, useMenuDescendants }\n\ninterface MenuContext extends Pick<\n UseMenuReturn,\n | \"onActiveDescendant\"\n | \"onClose\"\n | \"onCloseSubMenu\"\n | \"onOpen\"\n | \"onSelect\"\n | \"subMenu\"\n | \"subMenuDirection\"\n> {}\n\nconst [MenuContext, useMenuContext] = createContext<MenuContext>({\n name: \"MenuContext\",\n})\n\ninterface MenuGroupContext extends Pick<UseMenuGroupReturn, \"getLabelProps\"> {}\n\nconst [MenuGroupContext, useMenuGroupContext] = createContext<MenuGroupContext>(\n {\n name: \"MenuGroupContext\",\n },\n)\n\ninterface MainMenuContext {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n onCloseRef: RefObject<() => void>\n onSelect: (value?: string, closeOnSelect?: boolean) => void\n closeOnSelect?: boolean\n}\n\nconst [MainMenuContext, useMainMenuContext] = createContext<MainMenuContext>({\n name: \"MainMenuContext\",\n strict: false,\n})\n\ninterface MenuOptionGroupContext {\n type: \"checkbox\" | \"radio\"\n value: string | string[]\n onChange?: (value: string) => void\n}\n\nconst [MenuOptionGroupContext, useMenuOptionGroupContext] =\n createContext<MenuOptionGroupContext>({\n name: \"MenuOptionGroupContext\",\n })\n\nexport {\n MainMenuContext,\n MenuContext,\n MenuGroupContext,\n MenuOptionGroupContext,\n useMainMenuContext,\n useMenuContext,\n useMenuGroupContext,\n useMenuOptionGroupContext,\n}\n\nexport interface UseMenuProps extends Omit<UseDisclosureProps, \"timing\"> {\n /**\n * If `true`, the menu item will be closed when selected.\n *\n * @default true\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The direction of the sub menu.\n *\n * @default 'end'\n */\n subMenuDirection?: SubMenuDirection\n /**\n * Callback invoked when a menu item is selected.\n */\n onSelect?: (value?: string) => void\n}\n\nexport const useMenu = ({\n closeOnSelect,\n defaultOpen,\n disabled = false,\n open: openProp,\n subMenuDirection = \"end\",\n onClose: onCloseProp,\n onOpen: onOpenProp,\n onSelect: onSelectProp,\n}: UseMenuProps = {}) => {\n const triggerId = useId()\n const contentId = useId()\n const descendants = useMenuDescendants()\n const updateRef = useRef<() => void>(noop)\n const onCloseRef = useRef<() => void>(noop)\n const contentRef = useRef<HTMLDivElement>(null)\n const { open, onClose, onOpen } = useDisclosure({\n defaultOpen,\n open: openProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n })\n const onCloseSubMenu = useCallback(() => onCloseRef.current(), [])\n const onActiveDescendant = useCallback(\n (\n descendant?: MenuDescendant,\n options: FocusOptions = { preventScroll: true },\n ) => {\n if (!contentRef.current || !descendant || disabled) return\n\n contentRef.current.setAttribute(\"aria-activedescendant\", descendant.id)\n\n descendants.active(descendant, options)\n },\n [descendants, disabled],\n )\n const { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect } =\n useSubMenu({\n descendants,\n disabled,\n open,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onOpen,\n })\n\n closeOnSelect ??= mainCloseOnSelect ?? true\n\n const onSelect = useCallback(\n (value?: string, closeOnSelectProp = closeOnSelect) => {\n if (disabled) return\n\n onSelectProp?.(value)\n onMainSelect?.(value, closeOnSelectProp)\n\n if (!closeOnSelectProp) return\n\n onClose()\n },\n [closeOnSelect, disabled, onClose, onMainSelect, onSelectProp],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n\n if (!open) {\n onOpen()\n } else {\n onClose()\n }\n },\n [disabled, onClose, onOpen, open],\n )\n\n const onContextMenu = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n onOpen()\n updateRef.current()\n },\n [disabled, onOpen],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n\n runKeyAction(ev, {\n ArrowDown: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n ArrowUp: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n })\n },\n Enter: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n Space: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n })\n },\n [descendants, disabled, onActiveDescendant, onOpen],\n )\n\n const getTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n ...getSubMenuProps({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"button\",\n tabIndex: disabled ? -1 : 0,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n }),\n [contentId, disabled, getSubMenuProps, onClick, onKeyDown, open, triggerId],\n )\n\n const getContextTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"application\",\n ...props,\n onContextMenu: handlerAll(props.onContextMenu, onContextMenu),\n }),\n [contentId, disabled, onContextMenu, open, triggerId],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: contentId,\n \"aria-labelledby\": cx(ariaLabelledby, triggerId),\n role: \"menu\",\n ...props,\n ref: mergeRefs(ref, contentRef),\n }),\n [contentId, triggerId],\n )\n\n const getSeparatorProps: PropGetter = useCallback(\n (props) => ({ role: \"separator\", ...props }),\n [],\n )\n\n return {\n closeOnSelect,\n descendants,\n open,\n subMenu,\n subMenuDirection,\n updateRef,\n getContentProps,\n getContextTriggerProps,\n getSeparatorProps,\n getTriggerProps,\n onActiveDescendant,\n onClose,\n onCloseRef,\n onCloseSubMenu,\n onOpen,\n onSelect,\n }\n}\n\nexport type UseMenuReturn = ReturnType<typeof useMenu>\n\nexport interface UseSubMenuProps extends Omit<\n Required<UseDisclosureProps>,\n \"defaultOpen\" | \"timing\"\n> {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n disabled?: boolean\n subMenuDirection?: SubMenuDirection\n}\n\nexport const useSubMenu = ({\n descendants,\n disabled = false,\n open,\n subMenuDirection = \"end\",\n onActiveDescendant,\n onClose,\n onOpen,\n}: UseSubMenuProps) => {\n const uuid = useId()\n const {\n closeOnSelect: mainCloseOnSelect,\n descendants: mainDescendants,\n onActiveDescendant: onActiveMainDescendant,\n onCloseRef,\n onSelect: onMainSelect,\n } = useMainMenuContext() ?? {}\n const subMenu = !!mainDescendants && !!onActiveMainDescendant\n const createRegister = useMenuDescendantRegister(mainDescendants)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const dataDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const dataDisabled = isTruthyDataAttr(node.getAttribute(\"data-disabled\"))\n\n return dataDisabled\n }, [])\n\n const ariaDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const ariaDisabled = isTruthyDataAttr(node.getAttribute(\"aria-disabled\"))\n\n return ariaDisabled\n }, [])\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu) return\n\n ev.defaultPrevented = disabled || dataDisabled() || ariaDisabled()\n },\n [ariaDisabled, dataDisabled, disabled, subMenu],\n )\n\n const onMouseEnter = useCallback(() => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n onOpen()\n }, [ariaDisabled, dataDisabled, disabled, onOpen, subMenu])\n\n const onMouseMove = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n const descendant = descendants.value(triggerRef.current)\n\n onActiveMainDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [\n ariaDisabled,\n dataDisabled,\n descendants,\n disabled,\n onActiveMainDescendant,\n subMenu,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (!subMenu || disabled) return\n\n const currentDescendant = open ? descendants : mainDescendants\n const onActiveCurrentDescendant = open\n ? onActiveDescendant\n : onActiveMainDescendant\n\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = currentDescendant.enabledNextValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n ArrowUp: () => {\n const descendant = currentDescendant.enabledPrevValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n End: () => {\n const descendant = currentDescendant.enabledLastValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n Home: () => {\n const descendant = currentDescendant.enabledFirstValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [subMenuDirection === \"end\" ? \"ArrowRight\" : \"ArrowLeft\"]: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n\n ev.defaultPrevented = true\n },\n })\n },\n [\n subMenu,\n disabled,\n open,\n descendants,\n mainDescendants,\n onActiveDescendant,\n onActiveMainDescendant,\n subMenuDirection,\n onOpen,\n ],\n )\n\n assignRef(onCloseRef, onClose)\n\n const getSubMenuProps: PropGetter = useCallback(\n ({ id = uuid, ref, ...props } = {}) => {\n const getDisabled = (node: HTMLDivElement) =>\n disabled || dataDisabled(node) || ariaDisabled(node)\n const register = createRegister({ id, disabled: getDisabled })\n\n return {\n role: subMenu ? \"menuitem\" : \"button\",\n ...props,\n ref: mergeRefs(ref, triggerRef, register),\n onClick: handlerAll(onClick, props.onClick),\n onKeyDown: handlerAll(onKeyDown, props.onKeyDown),\n onMouseEnter: handlerAll(onMouseEnter, props.onMouseEnter),\n onMouseMove: handlerAll(onMouseMove, props.onMouseMove),\n }\n },\n [\n uuid,\n subMenu,\n createRegister,\n onClick,\n onKeyDown,\n onMouseEnter,\n onMouseMove,\n disabled,\n dataDisabled,\n ariaDisabled,\n ],\n )\n\n return { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect }\n}\n\nexport type UseSubMenuReturn = ReturnType<typeof useSubMenu>\n\nexport interface UseMenuGroupProps extends HTMLProps {}\n\nexport const useMenuGroup = ({\n \"aria-labelledby\": ariaLabelledbyProp,\n ...rest\n}: UseMenuGroupProps) => {\n const labelId = useId()\n\n const getGroupProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n \"aria-labelledby\": cx(ariaLabelledbyProp, ariaLabelledby, labelId),\n role: \"group\",\n ...rest,\n ...props,\n }),\n [ariaLabelledbyProp, labelId, rest],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props) => ({ id: labelId, role: \"presentation\", ...props }),\n [labelId],\n )\n\n return { getGroupProps, getLabelProps }\n}\n\nexport type UseMenuGroupReturn = ReturnType<typeof useMenuGroup>\n\nexport interface UseMenuItemProps extends HTMLProps {\n /**\n * If `true`, the menu item will be closed when selected.\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The value of the menu item.\n */\n value?: string\n}\n\nexport const useMenuItem = ({\n id,\n \"aria-disabled\": ariaDisabled,\n \"data-disabled\": dataDisabled,\n \"data-trigger\": dataTrigger,\n closeOnSelect,\n disabled = false,\n value,\n ...rest\n}: UseMenuItemProps) => {\n const trigger = isTruthyDataAttr(dataTrigger)\n const {\n subMenu,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onCloseSubMenu,\n onSelect,\n } = useMenuContext()\n const uuid = useId()\n const itemRef = useRef<HTMLDivElement>(null)\n const subMenuTrigger = subMenu && trigger\n\n id ??= uuid\n\n const { descendants, register } = useMenuDescendant({\n id,\n disabled: disabled || subMenuTrigger,\n })\n\n const onActive = useCallback(() => {\n if (disabled) return\n\n const descendant = descendants.value(itemRef.current)\n\n onActiveDescendant(descendant)\n }, [descendants, disabled, onActiveDescendant])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = descendants.enabledNextValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n ArrowUp: () => {\n const descendant = descendants.enabledPrevValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n End: () => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n },\n Enter: () => onSelect(value, closeOnSelect),\n Home: () => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n },\n Space: () => onSelect(value, closeOnSelect),\n [subMenuDirection === \"end\" ? \"ArrowLeft\" : \"ArrowRight\"]: () => {\n if (!subMenu) return\n\n onClose()\n\n const descendant = descendants.firstValue()\n\n descendant?.node.focus()\n },\n })\n },\n [\n closeOnSelect,\n descendants,\n onActiveDescendant,\n onClose,\n onSelect,\n subMenu,\n subMenuDirection,\n value,\n ],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n id,\n \"aria-disabled\": ariaDisabled ?? ariaAttr(disabled),\n \"data-disabled\": dataDisabled ?? dataAttr(disabled),\n role: \"menuitem\",\n tabIndex: -1,\n ...rest,\n ...props,\n ref: mergeRefs(ref, rest.ref, itemRef, register),\n onClick: handlerAll(props.onClick, rest.onClick, () =>\n onSelect(value, closeOnSelect),\n ),\n onFocus: handlerAll(props.onFocus, rest.onFocus, onActive),\n onKeyDown: handlerAll(props.onKeyDown, rest.onKeyDown, onKeyDown),\n onMouseMove: handlerAll(props.onMouseMove, rest.onMouseMove, () => {\n onCloseSubMenu()\n onActive()\n }),\n }),\n [\n id,\n ariaDisabled,\n disabled,\n dataDisabled,\n rest,\n register,\n onActive,\n onKeyDown,\n onSelect,\n value,\n closeOnSelect,\n onCloseSubMenu,\n ],\n )\n\n return {\n subMenuTrigger,\n getItemProps,\n }\n}\n\nexport type UseMenuItemReturn = ReturnType<typeof useMenuItem>\n\nexport type MenuOptionGroupType = \"checkbox\" | \"radio\"\nexport type MenuOptionGroupValue<Y extends MenuOptionGroupType> =\n Y extends \"checkbox\" ? string[] : string\n\nexport interface UseMenuOptionGroupProps<\n Y extends MenuOptionGroupType = \"checkbox\",\n M extends MenuOptionGroupValue<Y> = MenuOptionGroupValue<Y>,\n> {\n /**\n * The initial value of the menu item group.\n */\n defaultValue?: M\n /**\n * The type of the menu option group.\n */\n type?: Y\n /**\n * The value of the menu item group.\n */\n value?: M\n /**\n * The callback fired when any children checkbox is checked or unchecked.\n */\n onChange?: (value: M) => void\n}\n\nexport const useMenuOptionGroup = <\n Y extends \"checkbox\" | \"radio\" = \"checkbox\",\n M extends Y extends \"checkbox\" ? string[] : string = Y extends \"checkbox\"\n ? string[]\n : string,\n>({\n type = \"checkbox\" as Y,\n defaultValue = (type === \"checkbox\" ? [] : \"\") as M,\n value: valueProp,\n onChange: onChangeProp,\n}: UseMenuOptionGroupProps<Y, M>) => {\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const radio = type === \"radio\"\n\n const onChange = useCallback(\n (selectedValue: string) => {\n setValue((prev) => {\n if (radio && isString(prev)) {\n return selectedValue as M\n } else if (!radio && isArray(prev)) {\n return (\n prev.includes(selectedValue)\n ? prev.filter((value) => value !== selectedValue)\n : prev.concat(selectedValue)\n ) as M\n } else {\n return prev\n }\n })\n },\n [radio, setValue],\n )\n\n useUpdateEffect(() => {\n setValue(valueProp!)\n }, [valueProp])\n\n return {\n type,\n value,\n onChange,\n }\n}\n\nexport type UseMenuOptionGroupReturn = ReturnType<typeof useMenuOptionGroup>\n\nexport interface UseMenuOptionItemProps extends UseMenuItemProps {\n /**\n * The value of the menu option item.\n */\n value: string\n}\n\nexport const useMenuOptionItem = ({\n disabled,\n value,\n ...rest\n}: UseMenuOptionItemProps) => {\n const { type, value: selectedValue, onChange } = useMenuOptionGroupContext()\n const { getItemProps } = useMenuItem({ disabled, value, ...rest })\n const radio = type === \"radio\" && isString(selectedValue)\n const checkbox = type === \"checkbox\" && isArray(selectedValue)\n const selected = radio\n ? value === selectedValue\n : checkbox\n ? selectedValue.includes(value)\n : false\n\n const getIndicatorProps: PropGetter = useCallback(\n ({ style, ...props } = {}) => ({\n style: { opacity: selected ? 1 : 0, ...style },\n ...props,\n }),\n [selected],\n )\n\n const getOptionItemProps: PropGetter = useCallback(\n (props = {}) =>\n getItemProps({\n role: radio ? \"menuitemradio\" : \"menuitemcheckbox\",\n ...props,\n onClick: handlerAll(props.onClick, () =>\n !disabled ? onChange?.(value) : noop,\n ),\n }),\n [disabled, getItemProps, onChange, radio, value],\n )\n\n return {\n type,\n selected,\n getIndicatorProps,\n getOptionItemProps,\n }\n}\n\nexport type UseMenuOptionItemReturn = ReturnType<typeof useMenuOptionItem>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-menu.cjs","names":["createDescendants","createContext","useDisclosure","getTriggerProps: PropGetter","getContextTriggerProps: PropGetter","getContentProps: PropGetter","mergeRefs","getSeparatorProps: PropGetter","mergeProps","useControllableState","value"],"sources":["../../../../src/components/menu/use-menu.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent, MouseEvent, RefObject } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { Descendant, Descendants } from \"../../hooks/use-descendants\"\nimport type { UseDisclosureProps } from \"../../hooks/use-disclosure\"\nimport { useCallback, useId, useRef } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { useDisclosure } from \"../../hooks/use-disclosure\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isString,\n isTruthyDataAttr,\n mergeRefs,\n noop,\n runKeyAction,\n useUpdateEffect,\n} from \"../../utils\"\n\ntype SubMenuDirection = \"end\" | \"start\"\n\ninterface MenuDescendantProps {\n id: string\n}\ntype MenuDescendant = Descendant<HTMLDivElement, MenuDescendantProps>\n\nconst {\n DescendantsContext: MenuDescendantsContext,\n useDescendant: useMenuDescendant,\n useDescendantRegister: useMenuDescendantRegister,\n useDescendants: useMenuDescendants,\n} = createDescendants<HTMLDivElement, MenuDescendantProps>()\n\nexport { MenuDescendantsContext, useMenuDescendant, useMenuDescendants }\n\ninterface MenuContext extends Pick<\n UseMenuReturn,\n | \"onActiveDescendant\"\n | \"onClose\"\n | \"onCloseSubMenu\"\n | \"onOpen\"\n | \"onSelect\"\n | \"subMenu\"\n | \"subMenuDirection\"\n> {}\n\nconst [MenuContext, useMenuContext] = createContext<MenuContext>({\n name: \"MenuContext\",\n})\n\ninterface MenuGroupContext extends Pick<UseMenuGroupReturn, \"getLabelProps\"> {}\n\nconst [MenuGroupContext, useMenuGroupContext] = createContext<MenuGroupContext>(\n {\n name: \"MenuGroupContext\",\n },\n)\n\ninterface MainMenuContext {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n onCloseRef: RefObject<() => void>\n onSelect: (value?: string, closeOnSelect?: boolean) => void\n closeOnSelect?: boolean\n}\n\nconst [MainMenuContext, useMainMenuContext] = createContext<MainMenuContext>({\n name: \"MainMenuContext\",\n strict: false,\n})\n\ninterface MenuOptionGroupContext {\n type: \"checkbox\" | \"radio\"\n value: string | string[]\n onChange?: (value: string) => void\n}\n\nconst [MenuOptionGroupContext, useMenuOptionGroupContext] =\n createContext<MenuOptionGroupContext>({\n name: \"MenuOptionGroupContext\",\n })\n\nexport {\n MainMenuContext,\n MenuContext,\n MenuGroupContext,\n MenuOptionGroupContext,\n useMainMenuContext,\n useMenuContext,\n useMenuGroupContext,\n useMenuOptionGroupContext,\n}\n\nexport interface UseMenuProps extends Omit<UseDisclosureProps, \"timing\"> {\n /**\n * If `true`, the menu item will be closed when selected.\n *\n * @default true\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The direction of the sub menu.\n *\n * @default 'end'\n */\n subMenuDirection?: SubMenuDirection\n /**\n * Callback invoked when a menu item is selected.\n */\n onSelect?: (value?: string) => void\n}\n\nexport const useMenu = ({\n closeOnSelect,\n defaultOpen,\n disabled = false,\n open: openProp,\n subMenuDirection = \"end\",\n onClose: onCloseProp,\n onOpen: onOpenProp,\n onSelect: onSelectProp,\n}: UseMenuProps = {}) => {\n const triggerId = useId()\n const contentId = useId()\n const descendants = useMenuDescendants()\n const updateRef = useRef<() => void>(noop)\n const onCloseRef = useRef<() => void>(noop)\n const contentRef = useRef<HTMLDivElement>(null)\n const { open, onClose, onOpen } = useDisclosure({\n defaultOpen,\n open: openProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n })\n const onCloseSubMenu = useCallback(() => onCloseRef.current(), [])\n const onActiveDescendant = useCallback(\n (\n descendant?: MenuDescendant,\n options: FocusOptions = { preventScroll: true },\n ) => {\n if (!contentRef.current || !descendant || disabled) return\n\n contentRef.current.setAttribute(\"aria-activedescendant\", descendant.id)\n\n descendants.active(descendant, options)\n },\n [descendants, disabled],\n )\n const { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect } =\n useSubMenu({\n descendants,\n disabled,\n open,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onOpen,\n })\n\n closeOnSelect ??= mainCloseOnSelect ?? true\n\n const onSelect = useCallback(\n (value?: string, closeOnSelectProp = closeOnSelect) => {\n if (disabled) return\n\n onSelectProp?.(value)\n onMainSelect?.(value, closeOnSelectProp)\n\n if (!closeOnSelectProp) return\n\n onClose()\n },\n [closeOnSelect, disabled, onClose, onMainSelect, onSelectProp],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n\n if (!open) {\n onOpen()\n } else {\n onClose()\n }\n },\n [disabled, onClose, onOpen, open],\n )\n\n const onContextMenu = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n onOpen()\n updateRef.current()\n },\n [disabled, onOpen],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n\n runKeyAction(ev, {\n ArrowDown: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n ArrowUp: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n })\n },\n Enter: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n Space: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n })\n },\n [descendants, disabled, onActiveDescendant, onOpen],\n )\n\n const getTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n ...getSubMenuProps({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"button\",\n tabIndex: disabled ? -1 : 0,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n }),\n [contentId, disabled, getSubMenuProps, onClick, onKeyDown, open, triggerId],\n )\n\n const getContextTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"application\",\n ...props,\n onContextMenu: handlerAll(props.onContextMenu, onContextMenu),\n }),\n [contentId, disabled, onContextMenu, open, triggerId],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: contentId,\n \"aria-labelledby\": cx(ariaLabelledby, triggerId),\n role: \"menu\",\n ...props,\n ref: mergeRefs(ref, contentRef),\n }),\n [contentId, triggerId],\n )\n\n const getSeparatorProps: PropGetter = useCallback(\n (props) => ({ role: \"separator\", ...props }),\n [],\n )\n\n return {\n closeOnSelect,\n descendants,\n open,\n subMenu,\n subMenuDirection,\n updateRef,\n getContentProps,\n getContextTriggerProps,\n getSeparatorProps,\n getTriggerProps,\n onActiveDescendant,\n onClose,\n onCloseRef,\n onCloseSubMenu,\n onOpen,\n onSelect,\n }\n}\n\nexport type UseMenuReturn = ReturnType<typeof useMenu>\n\nexport interface UseSubMenuProps extends Omit<\n Required<UseDisclosureProps>,\n \"defaultOpen\" | \"timing\"\n> {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n disabled?: boolean\n subMenuDirection?: SubMenuDirection\n}\n\nexport const useSubMenu = ({\n descendants,\n disabled = false,\n open,\n subMenuDirection = \"end\",\n onActiveDescendant,\n onClose,\n onOpen,\n}: UseSubMenuProps) => {\n const uuid = useId()\n const {\n closeOnSelect: mainCloseOnSelect,\n descendants: mainDescendants,\n onActiveDescendant: onActiveMainDescendant,\n onCloseRef,\n onSelect: onMainSelect,\n } = useMainMenuContext() ?? {}\n const subMenu = !!mainDescendants && !!onActiveMainDescendant\n const createRegister = useMenuDescendantRegister(mainDescendants)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const dataDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const dataDisabled = isTruthyDataAttr(node.getAttribute(\"data-disabled\"))\n\n return dataDisabled\n }, [])\n\n const ariaDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const ariaDisabled = isTruthyDataAttr(node.getAttribute(\"aria-disabled\"))\n\n return ariaDisabled\n }, [])\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu) return\n\n ev.defaultPrevented = disabled || dataDisabled() || ariaDisabled()\n },\n [ariaDisabled, dataDisabled, disabled, subMenu],\n )\n\n const onMouseEnter = useCallback(() => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n onOpen()\n }, [ariaDisabled, dataDisabled, disabled, onOpen, subMenu])\n\n const onMouseMove = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n const descendant = descendants.value(triggerRef.current)\n\n onActiveMainDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [\n ariaDisabled,\n dataDisabled,\n descendants,\n disabled,\n onActiveMainDescendant,\n subMenu,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (!subMenu || disabled) return\n\n const currentDescendant = open ? descendants : mainDescendants\n const onActiveCurrentDescendant = open\n ? onActiveDescendant\n : onActiveMainDescendant\n\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = currentDescendant.enabledNextValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n ArrowUp: () => {\n const descendant = currentDescendant.enabledPrevValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n End: () => {\n const descendant = currentDescendant.enabledLastValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n Home: () => {\n const descendant = currentDescendant.enabledFirstValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [subMenuDirection === \"end\" ? \"ArrowRight\" : \"ArrowLeft\"]: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n\n ev.defaultPrevented = true\n },\n })\n },\n [\n subMenu,\n disabled,\n open,\n descendants,\n mainDescendants,\n onActiveDescendant,\n onActiveMainDescendant,\n subMenuDirection,\n onOpen,\n ],\n )\n\n assignRef(onCloseRef, onClose)\n\n const getSubMenuProps: PropGetter = useCallback(\n ({ id = uuid, ref, ...props } = {}) => {\n const getDisabled = (node: HTMLDivElement) =>\n disabled || dataDisabled(node) || ariaDisabled(node)\n const register = createRegister({ id, disabled: getDisabled })\n\n return {\n role: subMenu ? \"menuitem\" : \"button\",\n ...props,\n ref: mergeRefs(ref, triggerRef, register),\n onClick: handlerAll(onClick, props.onClick),\n onKeyDown: handlerAll(onKeyDown, props.onKeyDown),\n onMouseEnter: handlerAll(onMouseEnter, props.onMouseEnter),\n onMouseMove: handlerAll(onMouseMove, props.onMouseMove),\n }\n },\n [\n uuid,\n subMenu,\n createRegister,\n onClick,\n onKeyDown,\n onMouseEnter,\n onMouseMove,\n disabled,\n dataDisabled,\n ariaDisabled,\n ],\n )\n\n return { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect }\n}\n\nexport type UseSubMenuReturn = ReturnType<typeof useSubMenu>\n\nexport interface UseMenuGroupProps extends HTMLProps {}\n\nexport const useMenuGroup = ({\n \"aria-labelledby\": ariaLabelledbyProp,\n ...rest\n}: UseMenuGroupProps) => {\n const labelId = useId()\n\n const getGroupProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) =>\n mergeProps(\n {\n \"aria-labelledby\": cx(ariaLabelledbyProp, ariaLabelledby, labelId),\n role: \"group\",\n },\n rest,\n props,\n )(),\n [ariaLabelledbyProp, labelId, rest],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props) => ({ id: labelId, role: \"presentation\", ...props }),\n [labelId],\n )\n\n return { getGroupProps, getLabelProps }\n}\n\nexport type UseMenuGroupReturn = ReturnType<typeof useMenuGroup>\n\nexport interface UseMenuItemProps extends HTMLProps {\n /**\n * If `true`, the menu item will be closed when selected.\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The value of the menu item.\n */\n value?: string\n}\n\nexport const useMenuItem = ({\n id,\n \"aria-disabled\": ariaDisabled,\n \"data-disabled\": dataDisabled,\n \"data-trigger\": dataTrigger,\n closeOnSelect,\n disabled = false,\n value,\n ...rest\n}: UseMenuItemProps) => {\n const trigger = isTruthyDataAttr(dataTrigger)\n const {\n subMenu,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onCloseSubMenu,\n onSelect,\n } = useMenuContext()\n const uuid = useId()\n const itemRef = useRef<HTMLDivElement>(null)\n const subMenuTrigger = subMenu && trigger\n\n id ??= uuid\n\n const { descendants, register } = useMenuDescendant({\n id,\n disabled: disabled || subMenuTrigger,\n })\n\n const onActive = useCallback(() => {\n if (disabled) return\n\n const descendant = descendants.value(itemRef.current)\n\n onActiveDescendant(descendant)\n }, [descendants, disabled, onActiveDescendant])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = descendants.enabledNextValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n ArrowUp: () => {\n const descendant = descendants.enabledPrevValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n End: () => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n },\n Enter: () => onSelect(value, closeOnSelect),\n Home: () => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n },\n Space: () => onSelect(value, closeOnSelect),\n [subMenuDirection === \"end\" ? \"ArrowLeft\" : \"ArrowRight\"]: () => {\n if (!subMenu) return\n\n onClose()\n\n const descendant = descendants.firstValue()\n\n descendant?.node.focus()\n },\n })\n },\n [\n closeOnSelect,\n descendants,\n onActiveDescendant,\n onClose,\n onSelect,\n subMenu,\n subMenuDirection,\n value,\n ],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => {\n const {\n onClick: restOnClick,\n onFocus: restOnFocus,\n onKeyDown: restOnKeyDown,\n onMouseMove: restOnMouseMove,\n ...restProps\n } = rest\n const {\n onClick: propsOnClick,\n onFocus: propsOnFocus,\n onKeyDown: propsOnKeyDown,\n onMouseMove: propsOnMouseMove,\n ...itemProps\n } = props\n\n return mergeProps(\n {\n id,\n \"aria-disabled\": ariaDisabled ?? ariaAttr(disabled),\n \"data-disabled\": dataDisabled ?? dataAttr(disabled),\n role: \"menuitem\",\n tabIndex: -1,\n },\n restProps,\n itemProps,\n {\n ref: mergeRefs(ref, itemRef, register),\n onClick: handlerAll(propsOnClick, restOnClick, () =>\n onSelect(value, closeOnSelect),\n ),\n onFocus: handlerAll(propsOnFocus, restOnFocus, onActive),\n onKeyDown: handlerAll(propsOnKeyDown, restOnKeyDown, onKeyDown),\n onMouseMove: handlerAll(propsOnMouseMove, restOnMouseMove, () => {\n onCloseSubMenu()\n onActive()\n }),\n },\n )()\n },\n [\n id,\n ariaDisabled,\n disabled,\n dataDisabled,\n rest,\n register,\n onActive,\n onKeyDown,\n onSelect,\n value,\n closeOnSelect,\n onCloseSubMenu,\n ],\n )\n\n return {\n subMenuTrigger,\n getItemProps,\n }\n}\n\nexport type UseMenuItemReturn = ReturnType<typeof useMenuItem>\n\nexport type MenuOptionGroupType = \"checkbox\" | \"radio\"\nexport type MenuOptionGroupValue<Y extends MenuOptionGroupType> =\n Y extends \"checkbox\" ? string[] : string\n\nexport interface UseMenuOptionGroupProps<\n Y extends MenuOptionGroupType = \"checkbox\",\n M extends MenuOptionGroupValue<Y> = MenuOptionGroupValue<Y>,\n> {\n /**\n * The initial value of the menu item group.\n */\n defaultValue?: M\n /**\n * The type of the menu option group.\n */\n type?: Y\n /**\n * The value of the menu item group.\n */\n value?: M\n /**\n * The callback fired when any children checkbox is checked or unchecked.\n */\n onChange?: (value: M) => void\n}\n\nexport const useMenuOptionGroup = <\n Y extends \"checkbox\" | \"radio\" = \"checkbox\",\n M extends Y extends \"checkbox\" ? string[] : string = Y extends \"checkbox\"\n ? string[]\n : string,\n>({\n type = \"checkbox\" as Y,\n defaultValue = (type === \"checkbox\" ? [] : \"\") as M,\n value: valueProp,\n onChange: onChangeProp,\n}: UseMenuOptionGroupProps<Y, M>) => {\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const radio = type === \"radio\"\n\n const onChange = useCallback(\n (selectedValue: string) => {\n setValue((prev) => {\n if (radio && isString(prev)) {\n return selectedValue as M\n } else if (!radio && isArray(prev)) {\n return (\n prev.includes(selectedValue)\n ? prev.filter((value) => value !== selectedValue)\n : prev.concat(selectedValue)\n ) as M\n } else {\n return prev\n }\n })\n },\n [radio, setValue],\n )\n\n useUpdateEffect(() => {\n setValue(valueProp!)\n }, [valueProp])\n\n return {\n type,\n value,\n onChange,\n }\n}\n\nexport type UseMenuOptionGroupReturn = ReturnType<typeof useMenuOptionGroup>\n\nexport interface UseMenuOptionItemProps extends UseMenuItemProps {\n /**\n * The value of the menu option item.\n */\n value: string\n}\n\nexport const useMenuOptionItem = ({\n disabled,\n value,\n ...rest\n}: UseMenuOptionItemProps) => {\n const { type, value: selectedValue, onChange } = useMenuOptionGroupContext()\n const { getItemProps } = useMenuItem({ disabled, value, ...rest })\n const radio = type === \"radio\" && isString(selectedValue)\n const checkbox = type === \"checkbox\" && isArray(selectedValue)\n const selected = radio\n ? value === selectedValue\n : checkbox\n ? selectedValue.includes(value)\n : false\n\n const getIndicatorProps: PropGetter = useCallback(\n ({ style, ...props } = {}) => ({\n style: { opacity: selected ? 1 : 0, ...style },\n ...props,\n }),\n [selected],\n )\n\n const getOptionItemProps: PropGetter = useCallback(\n (props = {}) =>\n getItemProps({\n role: radio ? \"menuitemradio\" : \"menuitemcheckbox\",\n ...props,\n onClick: handlerAll(props.onClick, () =>\n !disabled ? onChange?.(value) : noop,\n ),\n }),\n [disabled, getItemProps, onChange, radio, value],\n )\n\n return {\n type,\n selected,\n getIndicatorProps,\n getOptionItemProps,\n }\n}\n\nexport type UseMenuOptionItemReturn = ReturnType<typeof useMenuOptionItem>\n"],"mappings":"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"}
@@ -4,17 +4,16 @@ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
4
4
  const require_context = require('../../utils/context.cjs');
5
5
  const require_ref = require('../../utils/ref.cjs');
6
6
  const require_utils_index = require('../../utils/index.cjs');
7
+ const require_props = require('../../core/components/props.cjs');
8
+ require('../../core/index.cjs');
7
9
  let react = require("react");
8
10
 
9
11
  //#region src/components/native-accordion/use-native-accordion.ts
10
12
  const [NativeAccordionContext, useNativeAccordionContext] = require_context.createContext({ name: "NativeAccordionContext" });
11
13
  const useNativeAccordion = ({ name, multiple = false, ...rest } = {}) => {
12
14
  const generatedName = (0, react.useId)();
13
- const getRootProps = ({ ref, ...props } = {}) => ({
14
- ...props,
15
- ...rest,
16
- ref: require_ref.mergeRefs(ref, rest.ref)
17
- });
15
+ const { ref: restRef, ...restProps } = rest;
16
+ const getRootProps = ({ ref, ...props } = {}) => require_props.mergeProps(props, restProps, { ref: require_ref.mergeRefs(ref, restRef) })();
18
17
  return {
19
18
  name: multiple ? void 0 : name ?? generatedName,
20
19
  getRootProps
@@ -22,13 +21,11 @@ const useNativeAccordion = ({ name, multiple = false, ...rest } = {}) => {
22
21
  };
23
22
  const useNativeAccordionItem = ({ disabled, ...rest }) => {
24
23
  const { name } = useNativeAccordionContext();
25
- const getItemProps = ({ ref, ...props } = {}) => ({
26
- ref: require_ref.mergeRefs(ref, rest.ref),
27
- name: props.name ?? rest.name ?? name,
28
- "data-group": "",
29
- ...rest,
30
- ...props
31
- });
24
+ const { ref: restRef, ...restProps } = rest;
25
+ const getItemProps = ({ ref, ...props } = {}) => require_props.mergeProps({
26
+ name: props.name ?? restProps.name ?? name,
27
+ "data-group": ""
28
+ }, restProps, props, { ref: require_ref.mergeRefs(ref, restRef) })();
32
29
  const getButtonProps = (0, react.useCallback)((props = {}) => ({
33
30
  "aria-disabled": (0, require_utils_index.utils_exports.ariaAttr)(disabled),
34
31
  "data-disabled": (0, require_utils_index.utils_exports.dataAttr)(disabled),
@@ -1 +1 @@
1
- {"version":3,"file":"use-native-accordion.cjs","names":["createContext","getRootProps: PropGetter","mergeRefs","getItemProps: PropGetter<\"details\">","getButtonProps: PropGetter<\"summary\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/native-accordion/use-native-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useId } from \"react\"\nimport {\n ariaAttr,\n createContext,\n dataAttr,\n handlerAll,\n mergeRefs,\n} from \"../../utils\"\n\ninterface NativeAccordionContext extends Pick<\n UseNativeAccordionReturn,\n \"name\"\n> {}\n\nconst [NativeAccordionContext, useNativeAccordionContext] =\n createContext<NativeAccordionContext>({\n name: \"NativeAccordionContext\",\n })\n\nexport { NativeAccordionContext, useNativeAccordionContext }\n\nexport interface UseNativeAccordionProps extends HTMLProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * The HTML `name` attribute used for forms.\n */\n name?: string\n}\n\nexport const useNativeAccordion = ({\n name,\n multiple = false,\n ...rest\n}: UseNativeAccordionProps = {}) => {\n const generatedName = useId()\n\n const getRootProps: PropGetter = ({ ref, ...props } = {}) => ({\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n })\n\n return {\n name: multiple ? undefined : (name ?? generatedName),\n getRootProps,\n }\n}\n\nexport type UseNativeAccordionReturn = ReturnType<typeof useNativeAccordion>\n\nexport interface UseNativeAccordionItemProps extends HTMLProps<\"details\"> {\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useNativeAccordionItem = ({\n disabled,\n ...rest\n}: UseNativeAccordionItemProps) => {\n const { name } = useNativeAccordionContext()\n\n const getItemProps: PropGetter<\"details\"> = ({ ref, ...props } = {}) => ({\n ref: mergeRefs(ref, rest.ref),\n name: props.name ?? rest.name ?? name,\n \"data-group\": \"\",\n ...rest,\n ...props,\n })\n\n const getButtonProps: PropGetter<\"summary\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"data-disabled\": dataAttr(disabled),\n ...props,\n onClick: handlerAll(props.onClick, (ev) => {\n if (!disabled) return\n\n ev.preventDefault()\n }),\n }),\n [disabled],\n )\n\n const getPanelProps: PropGetter = useCallback((props = {}) => props, [])\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [disabled],\n )\n\n return {\n disabled,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseNativeAccordionItemReturn = ReturnType<\n typeof useNativeAccordionItem\n>\n"],"mappings":";;;;;;;;;AAiBA,MAAM,CAAC,wBAAwB,6BAC7BA,8BAAsC,EACpC,MAAM,0BACP,CAAC;AAiBJ,MAAa,sBAAsB,EACjC,MACA,WAAW,OACX,GAAG,SACwB,EAAE,KAAK;CAClC,MAAM,kCAAuB;CAE7B,MAAMC,gBAA4B,EAAE,KAAK,GAAG,UAAU,EAAE,MAAM;EAC5D,GAAG;EACH,GAAG;EACH,KAAKC,sBAAU,KAAK,KAAK,IAAI;EAC9B;AAED,QAAO;EACL,MAAM,WAAW,SAAa,QAAQ;EACtC;EACD;;AAcH,MAAa,0BAA0B,EACrC,UACA,GAAG,WAC8B;CACjC,MAAM,EAAE,SAAS,2BAA2B;CAE5C,MAAMC,gBAAuC,EAAE,KAAK,GAAG,UAAU,EAAE,MAAM;EACvE,KAAKD,sBAAU,KAAK,KAAK,IAAI;EAC7B,MAAM,MAAM,QAAQ,KAAK,QAAQ;EACjC,cAAc;EACd,GAAG;EACH,GAAG;EACJ;CAED,MAAME,yCACH,QAAQ,EAAE,MAAM;EACf,iEAA0B,SAAS;EACnC,iEAA0B,SAAS;EACnC,GAAG;EACH,2DAAoB,MAAM,UAAU,OAAO;AACzC,OAAI,CAAC,SAAU;AAEf,MAAG,gBAAgB;IACnB;EACH,GACD,CAAC,SAAS,CACX;CAED,MAAMC,wCAAyC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;AAYxE,QAAO;EACL;EACA;EACA,sCAZC,QAAQ,EAAE,MAAM;GACf,iEAA0B,SAAS;GACnC,eAAe;GACf,MAAM;GACN,GAAG;GACJ,GACD,CAAC,SAAS,CACX;EAMC;EACA;EACD"}
1
+ {"version":3,"file":"use-native-accordion.cjs","names":["createContext","getRootProps: PropGetter","mergeProps","mergeRefs","getItemProps: PropGetter<\"details\">","getButtonProps: PropGetter<\"summary\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/native-accordion/use-native-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useId } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport {\n ariaAttr,\n createContext,\n dataAttr,\n handlerAll,\n mergeRefs,\n} from \"../../utils\"\n\ninterface NativeAccordionContext extends Pick<\n UseNativeAccordionReturn,\n \"name\"\n> {}\n\nconst [NativeAccordionContext, useNativeAccordionContext] =\n createContext<NativeAccordionContext>({\n name: \"NativeAccordionContext\",\n })\n\nexport { NativeAccordionContext, useNativeAccordionContext }\n\nexport interface UseNativeAccordionProps extends HTMLProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * The HTML `name` attribute used for forms.\n */\n name?: string\n}\n\nexport const useNativeAccordion = ({\n name,\n multiple = false,\n ...rest\n}: UseNativeAccordionProps = {}) => {\n const generatedName = useId()\n const { ref: restRef, ...restProps } = rest\n\n const getRootProps: PropGetter = ({ ref, ...props } = {}) =>\n mergeProps(props, restProps, {\n ref: mergeRefs(ref, restRef),\n })()\n\n return {\n name: multiple ? undefined : (name ?? generatedName),\n getRootProps,\n }\n}\n\nexport type UseNativeAccordionReturn = ReturnType<typeof useNativeAccordion>\n\nexport interface UseNativeAccordionItemProps extends HTMLProps<\"details\"> {\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useNativeAccordionItem = ({\n disabled,\n ...rest\n}: UseNativeAccordionItemProps) => {\n const { name } = useNativeAccordionContext()\n const { ref: restRef, ...restProps } = rest\n\n const getItemProps: PropGetter<\"details\"> = ({ ref, ...props } = {}) =>\n mergeProps(\n {\n name: props.name ?? restProps.name ?? name,\n \"data-group\": \"\",\n },\n restProps,\n props,\n {\n ref: mergeRefs(ref, restRef),\n },\n )()\n\n const getButtonProps: PropGetter<\"summary\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"data-disabled\": dataAttr(disabled),\n ...props,\n onClick: handlerAll(props.onClick, (ev) => {\n if (!disabled) return\n\n ev.preventDefault()\n }),\n }),\n [disabled],\n )\n\n const getPanelProps: PropGetter = useCallback((props = {}) => props, [])\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [disabled],\n )\n\n return {\n disabled,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseNativeAccordionItemReturn = ReturnType<\n typeof useNativeAccordionItem\n>\n"],"mappings":";;;;;;;;;;;AAkBA,MAAM,CAAC,wBAAwB,6BAC7BA,8BAAsC,EACpC,MAAM,0BACP,CAAC;AAiBJ,MAAa,sBAAsB,EACjC,MACA,WAAW,OACX,GAAG,SACwB,EAAE,KAAK;CAClC,MAAM,kCAAuB;CAC7B,MAAM,EAAE,KAAK,SAAS,GAAG,cAAc;CAEvC,MAAMC,gBAA4B,EAAE,KAAK,GAAG,UAAU,EAAE,KACtDC,yBAAW,OAAO,WAAW,EAC3B,KAAKC,sBAAU,KAAK,QAAQ,EAC7B,CAAC,EAAE;AAEN,QAAO;EACL,MAAM,WAAW,SAAa,QAAQ;EACtC;EACD;;AAcH,MAAa,0BAA0B,EACrC,UACA,GAAG,WAC8B;CACjC,MAAM,EAAE,SAAS,2BAA2B;CAC5C,MAAM,EAAE,KAAK,SAAS,GAAG,cAAc;CAEvC,MAAMC,gBAAuC,EAAE,KAAK,GAAG,UAAU,EAAE,KACjEF,yBACE;EACE,MAAM,MAAM,QAAQ,UAAU,QAAQ;EACtC,cAAc;EACf,EACD,WACA,OACA,EACE,KAAKC,sBAAU,KAAK,QAAQ,EAC7B,CACF,EAAE;CAEL,MAAME,yCACH,QAAQ,EAAE,MAAM;EACf,iEAA0B,SAAS;EACnC,iEAA0B,SAAS;EACnC,GAAG;EACH,2DAAoB,MAAM,UAAU,OAAO;AACzC,OAAI,CAAC,SAAU;AAEf,MAAG,gBAAgB;IACnB;EACH,GACD,CAAC,SAAS,CACX;CAED,MAAMC,wCAAyC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;AAYxE,QAAO;EACL;EACA;EACA,sCAZC,QAAQ,EAAE,MAAM;GACf,iEAA0B,SAAS;GACnC,eAAe;GACf,MAAM;GACN,GAAG;GACJ,GACD,CAAC,SAAS,CACX;EAMC;EACA;EACD"}
@@ -5,6 +5,8 @@ import { runKeyAction } from "../../utils/dom.js";
5
5
  import { useUpdateEffect } from "../../utils/effect.js";
6
6
  import { assignRef, mergeRefs } from "../../utils/ref.js";
7
7
  import { utils_exports } from "../../utils/index.js";
8
+ import { mergeProps } from "../../core/components/props.js";
9
+ import "../../core/index.js";
8
10
  import { useControllableState } from "../../hooks/use-controllable-state/index.js";
9
11
  import { createDescendants } from "../../hooks/use-descendants/index.js";
10
12
  import { useDisclosure } from "../../hooks/use-disclosure/use-disclosure.js";
@@ -305,12 +307,10 @@ const useSubMenu = ({ descendants, disabled = false, open, subMenuDirection = "e
305
307
  const useMenuGroup = ({ "aria-labelledby": ariaLabelledbyProp, ...rest }) => {
306
308
  const labelId = useId();
307
309
  return {
308
- getGroupProps: useCallback(({ "aria-labelledby": ariaLabelledby, ...props } = {}) => ({
310
+ getGroupProps: useCallback(({ "aria-labelledby": ariaLabelledby, ...props } = {}) => mergeProps({
309
311
  "aria-labelledby": (0, utils_exports.cx)(ariaLabelledbyProp, ariaLabelledby, labelId),
310
- role: "group",
311
- ...rest,
312
- ...props
313
- }), [
312
+ role: "group"
313
+ }, rest, props)(), [
314
314
  ariaLabelledbyProp,
315
315
  labelId,
316
316
  rest
@@ -375,23 +375,26 @@ const useMenuItem = ({ id, "aria-disabled": ariaDisabled, "data-disabled": dataD
375
375
  ]);
376
376
  return {
377
377
  subMenuTrigger,
378
- getItemProps: useCallback(({ ref, ...props } = {}) => ({
379
- id,
380
- "aria-disabled": ariaDisabled ?? (0, utils_exports.ariaAttr)(disabled),
381
- "data-disabled": dataDisabled ?? (0, utils_exports.dataAttr)(disabled),
382
- role: "menuitem",
383
- tabIndex: -1,
384
- ...rest,
385
- ...props,
386
- ref: mergeRefs(ref, rest.ref, itemRef, register),
387
- onClick: (0, utils_exports.handlerAll)(props.onClick, rest.onClick, () => onSelect(value, closeOnSelect)),
388
- onFocus: (0, utils_exports.handlerAll)(props.onFocus, rest.onFocus, onActive),
389
- onKeyDown: (0, utils_exports.handlerAll)(props.onKeyDown, rest.onKeyDown, onKeyDown),
390
- onMouseMove: (0, utils_exports.handlerAll)(props.onMouseMove, rest.onMouseMove, () => {
391
- onCloseSubMenu();
392
- onActive();
393
- })
394
- }), [
378
+ getItemProps: useCallback(({ ref, ...props } = {}) => {
379
+ const { onClick: restOnClick, onFocus: restOnFocus, onKeyDown: restOnKeyDown, onMouseMove: restOnMouseMove, ...restProps } = rest;
380
+ const { onClick: propsOnClick, onFocus: propsOnFocus, onKeyDown: propsOnKeyDown, onMouseMove: propsOnMouseMove, ...itemProps } = props;
381
+ return mergeProps({
382
+ id,
383
+ "aria-disabled": ariaDisabled ?? (0, utils_exports.ariaAttr)(disabled),
384
+ "data-disabled": dataDisabled ?? (0, utils_exports.dataAttr)(disabled),
385
+ role: "menuitem",
386
+ tabIndex: -1
387
+ }, restProps, itemProps, {
388
+ ref: mergeRefs(ref, itemRef, register),
389
+ onClick: (0, utils_exports.handlerAll)(propsOnClick, restOnClick, () => onSelect(value, closeOnSelect)),
390
+ onFocus: (0, utils_exports.handlerAll)(propsOnFocus, restOnFocus, onActive),
391
+ onKeyDown: (0, utils_exports.handlerAll)(propsOnKeyDown, restOnKeyDown, onKeyDown),
392
+ onMouseMove: (0, utils_exports.handlerAll)(propsOnMouseMove, restOnMouseMove, () => {
393
+ onCloseSubMenu();
394
+ onActive();
395
+ })
396
+ })();
397
+ }, [
395
398
  id,
396
399
  ariaDisabled,
397
400
  disabled,
@@ -1 +1 @@
1
- {"version":3,"file":"use-menu.js","names":["createContext","noop","getTriggerProps: PropGetter","getContextTriggerProps: PropGetter","getContentProps: PropGetter","getSeparatorProps: PropGetter","value"],"sources":["../../../../src/components/menu/use-menu.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent, MouseEvent, RefObject } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { Descendant, Descendants } from \"../../hooks/use-descendants\"\nimport type { UseDisclosureProps } from \"../../hooks/use-disclosure\"\nimport { useCallback, useId, useRef } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { useDisclosure } from \"../../hooks/use-disclosure\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isString,\n isTruthyDataAttr,\n mergeRefs,\n noop,\n runKeyAction,\n useUpdateEffect,\n} from \"../../utils\"\n\ntype SubMenuDirection = \"end\" | \"start\"\n\ninterface MenuDescendantProps {\n id: string\n}\ntype MenuDescendant = Descendant<HTMLDivElement, MenuDescendantProps>\n\nconst {\n DescendantsContext: MenuDescendantsContext,\n useDescendant: useMenuDescendant,\n useDescendantRegister: useMenuDescendantRegister,\n useDescendants: useMenuDescendants,\n} = createDescendants<HTMLDivElement, MenuDescendantProps>()\n\nexport { MenuDescendantsContext, useMenuDescendant, useMenuDescendants }\n\ninterface MenuContext extends Pick<\n UseMenuReturn,\n | \"onActiveDescendant\"\n | \"onClose\"\n | \"onCloseSubMenu\"\n | \"onOpen\"\n | \"onSelect\"\n | \"subMenu\"\n | \"subMenuDirection\"\n> {}\n\nconst [MenuContext, useMenuContext] = createContext<MenuContext>({\n name: \"MenuContext\",\n})\n\ninterface MenuGroupContext extends Pick<UseMenuGroupReturn, \"getLabelProps\"> {}\n\nconst [MenuGroupContext, useMenuGroupContext] = createContext<MenuGroupContext>(\n {\n name: \"MenuGroupContext\",\n },\n)\n\ninterface MainMenuContext {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n onCloseRef: RefObject<() => void>\n onSelect: (value?: string, closeOnSelect?: boolean) => void\n closeOnSelect?: boolean\n}\n\nconst [MainMenuContext, useMainMenuContext] = createContext<MainMenuContext>({\n name: \"MainMenuContext\",\n strict: false,\n})\n\ninterface MenuOptionGroupContext {\n type: \"checkbox\" | \"radio\"\n value: string | string[]\n onChange?: (value: string) => void\n}\n\nconst [MenuOptionGroupContext, useMenuOptionGroupContext] =\n createContext<MenuOptionGroupContext>({\n name: \"MenuOptionGroupContext\",\n })\n\nexport {\n MainMenuContext,\n MenuContext,\n MenuGroupContext,\n MenuOptionGroupContext,\n useMainMenuContext,\n useMenuContext,\n useMenuGroupContext,\n useMenuOptionGroupContext,\n}\n\nexport interface UseMenuProps extends Omit<UseDisclosureProps, \"timing\"> {\n /**\n * If `true`, the menu item will be closed when selected.\n *\n * @default true\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The direction of the sub menu.\n *\n * @default 'end'\n */\n subMenuDirection?: SubMenuDirection\n /**\n * Callback invoked when a menu item is selected.\n */\n onSelect?: (value?: string) => void\n}\n\nexport const useMenu = ({\n closeOnSelect,\n defaultOpen,\n disabled = false,\n open: openProp,\n subMenuDirection = \"end\",\n onClose: onCloseProp,\n onOpen: onOpenProp,\n onSelect: onSelectProp,\n}: UseMenuProps = {}) => {\n const triggerId = useId()\n const contentId = useId()\n const descendants = useMenuDescendants()\n const updateRef = useRef<() => void>(noop)\n const onCloseRef = useRef<() => void>(noop)\n const contentRef = useRef<HTMLDivElement>(null)\n const { open, onClose, onOpen } = useDisclosure({\n defaultOpen,\n open: openProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n })\n const onCloseSubMenu = useCallback(() => onCloseRef.current(), [])\n const onActiveDescendant = useCallback(\n (\n descendant?: MenuDescendant,\n options: FocusOptions = { preventScroll: true },\n ) => {\n if (!contentRef.current || !descendant || disabled) return\n\n contentRef.current.setAttribute(\"aria-activedescendant\", descendant.id)\n\n descendants.active(descendant, options)\n },\n [descendants, disabled],\n )\n const { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect } =\n useSubMenu({\n descendants,\n disabled,\n open,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onOpen,\n })\n\n closeOnSelect ??= mainCloseOnSelect ?? true\n\n const onSelect = useCallback(\n (value?: string, closeOnSelectProp = closeOnSelect) => {\n if (disabled) return\n\n onSelectProp?.(value)\n onMainSelect?.(value, closeOnSelectProp)\n\n if (!closeOnSelectProp) return\n\n onClose()\n },\n [closeOnSelect, disabled, onClose, onMainSelect, onSelectProp],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n\n if (!open) {\n onOpen()\n } else {\n onClose()\n }\n },\n [disabled, onClose, onOpen, open],\n )\n\n const onContextMenu = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n onOpen()\n updateRef.current()\n },\n [disabled, onOpen],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n\n runKeyAction(ev, {\n ArrowDown: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n ArrowUp: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n })\n },\n Enter: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n Space: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n })\n },\n [descendants, disabled, onActiveDescendant, onOpen],\n )\n\n const getTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n ...getSubMenuProps({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"button\",\n tabIndex: disabled ? -1 : 0,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n }),\n [contentId, disabled, getSubMenuProps, onClick, onKeyDown, open, triggerId],\n )\n\n const getContextTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"application\",\n ...props,\n onContextMenu: handlerAll(props.onContextMenu, onContextMenu),\n }),\n [contentId, disabled, onContextMenu, open, triggerId],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: contentId,\n \"aria-labelledby\": cx(ariaLabelledby, triggerId),\n role: \"menu\",\n ...props,\n ref: mergeRefs(ref, contentRef),\n }),\n [contentId, triggerId],\n )\n\n const getSeparatorProps: PropGetter = useCallback(\n (props) => ({ role: \"separator\", ...props }),\n [],\n )\n\n return {\n closeOnSelect,\n descendants,\n open,\n subMenu,\n subMenuDirection,\n updateRef,\n getContentProps,\n getContextTriggerProps,\n getSeparatorProps,\n getTriggerProps,\n onActiveDescendant,\n onClose,\n onCloseRef,\n onCloseSubMenu,\n onOpen,\n onSelect,\n }\n}\n\nexport type UseMenuReturn = ReturnType<typeof useMenu>\n\nexport interface UseSubMenuProps extends Omit<\n Required<UseDisclosureProps>,\n \"defaultOpen\" | \"timing\"\n> {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n disabled?: boolean\n subMenuDirection?: SubMenuDirection\n}\n\nexport const useSubMenu = ({\n descendants,\n disabled = false,\n open,\n subMenuDirection = \"end\",\n onActiveDescendant,\n onClose,\n onOpen,\n}: UseSubMenuProps) => {\n const uuid = useId()\n const {\n closeOnSelect: mainCloseOnSelect,\n descendants: mainDescendants,\n onActiveDescendant: onActiveMainDescendant,\n onCloseRef,\n onSelect: onMainSelect,\n } = useMainMenuContext() ?? {}\n const subMenu = !!mainDescendants && !!onActiveMainDescendant\n const createRegister = useMenuDescendantRegister(mainDescendants)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const dataDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const dataDisabled = isTruthyDataAttr(node.getAttribute(\"data-disabled\"))\n\n return dataDisabled\n }, [])\n\n const ariaDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const ariaDisabled = isTruthyDataAttr(node.getAttribute(\"aria-disabled\"))\n\n return ariaDisabled\n }, [])\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu) return\n\n ev.defaultPrevented = disabled || dataDisabled() || ariaDisabled()\n },\n [ariaDisabled, dataDisabled, disabled, subMenu],\n )\n\n const onMouseEnter = useCallback(() => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n onOpen()\n }, [ariaDisabled, dataDisabled, disabled, onOpen, subMenu])\n\n const onMouseMove = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n const descendant = descendants.value(triggerRef.current)\n\n onActiveMainDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [\n ariaDisabled,\n dataDisabled,\n descendants,\n disabled,\n onActiveMainDescendant,\n subMenu,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (!subMenu || disabled) return\n\n const currentDescendant = open ? descendants : mainDescendants\n const onActiveCurrentDescendant = open\n ? onActiveDescendant\n : onActiveMainDescendant\n\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = currentDescendant.enabledNextValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n ArrowUp: () => {\n const descendant = currentDescendant.enabledPrevValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n End: () => {\n const descendant = currentDescendant.enabledLastValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n Home: () => {\n const descendant = currentDescendant.enabledFirstValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [subMenuDirection === \"end\" ? \"ArrowRight\" : \"ArrowLeft\"]: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n\n ev.defaultPrevented = true\n },\n })\n },\n [\n subMenu,\n disabled,\n open,\n descendants,\n mainDescendants,\n onActiveDescendant,\n onActiveMainDescendant,\n subMenuDirection,\n onOpen,\n ],\n )\n\n assignRef(onCloseRef, onClose)\n\n const getSubMenuProps: PropGetter = useCallback(\n ({ id = uuid, ref, ...props } = {}) => {\n const getDisabled = (node: HTMLDivElement) =>\n disabled || dataDisabled(node) || ariaDisabled(node)\n const register = createRegister({ id, disabled: getDisabled })\n\n return {\n role: subMenu ? \"menuitem\" : \"button\",\n ...props,\n ref: mergeRefs(ref, triggerRef, register),\n onClick: handlerAll(onClick, props.onClick),\n onKeyDown: handlerAll(onKeyDown, props.onKeyDown),\n onMouseEnter: handlerAll(onMouseEnter, props.onMouseEnter),\n onMouseMove: handlerAll(onMouseMove, props.onMouseMove),\n }\n },\n [\n uuid,\n subMenu,\n createRegister,\n onClick,\n onKeyDown,\n onMouseEnter,\n onMouseMove,\n disabled,\n dataDisabled,\n ariaDisabled,\n ],\n )\n\n return { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect }\n}\n\nexport type UseSubMenuReturn = ReturnType<typeof useSubMenu>\n\nexport interface UseMenuGroupProps extends HTMLProps {}\n\nexport const useMenuGroup = ({\n \"aria-labelledby\": ariaLabelledbyProp,\n ...rest\n}: UseMenuGroupProps) => {\n const labelId = useId()\n\n const getGroupProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n \"aria-labelledby\": cx(ariaLabelledbyProp, ariaLabelledby, labelId),\n role: \"group\",\n ...rest,\n ...props,\n }),\n [ariaLabelledbyProp, labelId, rest],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props) => ({ id: labelId, role: \"presentation\", ...props }),\n [labelId],\n )\n\n return { getGroupProps, getLabelProps }\n}\n\nexport type UseMenuGroupReturn = ReturnType<typeof useMenuGroup>\n\nexport interface UseMenuItemProps extends HTMLProps {\n /**\n * If `true`, the menu item will be closed when selected.\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The value of the menu item.\n */\n value?: string\n}\n\nexport const useMenuItem = ({\n id,\n \"aria-disabled\": ariaDisabled,\n \"data-disabled\": dataDisabled,\n \"data-trigger\": dataTrigger,\n closeOnSelect,\n disabled = false,\n value,\n ...rest\n}: UseMenuItemProps) => {\n const trigger = isTruthyDataAttr(dataTrigger)\n const {\n subMenu,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onCloseSubMenu,\n onSelect,\n } = useMenuContext()\n const uuid = useId()\n const itemRef = useRef<HTMLDivElement>(null)\n const subMenuTrigger = subMenu && trigger\n\n id ??= uuid\n\n const { descendants, register } = useMenuDescendant({\n id,\n disabled: disabled || subMenuTrigger,\n })\n\n const onActive = useCallback(() => {\n if (disabled) return\n\n const descendant = descendants.value(itemRef.current)\n\n onActiveDescendant(descendant)\n }, [descendants, disabled, onActiveDescendant])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = descendants.enabledNextValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n ArrowUp: () => {\n const descendant = descendants.enabledPrevValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n End: () => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n },\n Enter: () => onSelect(value, closeOnSelect),\n Home: () => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n },\n Space: () => onSelect(value, closeOnSelect),\n [subMenuDirection === \"end\" ? \"ArrowLeft\" : \"ArrowRight\"]: () => {\n if (!subMenu) return\n\n onClose()\n\n const descendant = descendants.firstValue()\n\n descendant?.node.focus()\n },\n })\n },\n [\n closeOnSelect,\n descendants,\n onActiveDescendant,\n onClose,\n onSelect,\n subMenu,\n subMenuDirection,\n value,\n ],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => ({\n id,\n \"aria-disabled\": ariaDisabled ?? ariaAttr(disabled),\n \"data-disabled\": dataDisabled ?? dataAttr(disabled),\n role: \"menuitem\",\n tabIndex: -1,\n ...rest,\n ...props,\n ref: mergeRefs(ref, rest.ref, itemRef, register),\n onClick: handlerAll(props.onClick, rest.onClick, () =>\n onSelect(value, closeOnSelect),\n ),\n onFocus: handlerAll(props.onFocus, rest.onFocus, onActive),\n onKeyDown: handlerAll(props.onKeyDown, rest.onKeyDown, onKeyDown),\n onMouseMove: handlerAll(props.onMouseMove, rest.onMouseMove, () => {\n onCloseSubMenu()\n onActive()\n }),\n }),\n [\n id,\n ariaDisabled,\n disabled,\n dataDisabled,\n rest,\n register,\n onActive,\n onKeyDown,\n onSelect,\n value,\n closeOnSelect,\n onCloseSubMenu,\n ],\n )\n\n return {\n subMenuTrigger,\n getItemProps,\n }\n}\n\nexport type UseMenuItemReturn = ReturnType<typeof useMenuItem>\n\nexport type MenuOptionGroupType = \"checkbox\" | \"radio\"\nexport type MenuOptionGroupValue<Y extends MenuOptionGroupType> =\n Y extends \"checkbox\" ? string[] : string\n\nexport interface UseMenuOptionGroupProps<\n Y extends MenuOptionGroupType = \"checkbox\",\n M extends MenuOptionGroupValue<Y> = MenuOptionGroupValue<Y>,\n> {\n /**\n * The initial value of the menu item group.\n */\n defaultValue?: M\n /**\n * The type of the menu option group.\n */\n type?: Y\n /**\n * The value of the menu item group.\n */\n value?: M\n /**\n * The callback fired when any children checkbox is checked or unchecked.\n */\n onChange?: (value: M) => void\n}\n\nexport const useMenuOptionGroup = <\n Y extends \"checkbox\" | \"radio\" = \"checkbox\",\n M extends Y extends \"checkbox\" ? string[] : string = Y extends \"checkbox\"\n ? string[]\n : string,\n>({\n type = \"checkbox\" as Y,\n defaultValue = (type === \"checkbox\" ? [] : \"\") as M,\n value: valueProp,\n onChange: onChangeProp,\n}: UseMenuOptionGroupProps<Y, M>) => {\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const radio = type === \"radio\"\n\n const onChange = useCallback(\n (selectedValue: string) => {\n setValue((prev) => {\n if (radio && isString(prev)) {\n return selectedValue as M\n } else if (!radio && isArray(prev)) {\n return (\n prev.includes(selectedValue)\n ? prev.filter((value) => value !== selectedValue)\n : prev.concat(selectedValue)\n ) as M\n } else {\n return prev\n }\n })\n },\n [radio, setValue],\n )\n\n useUpdateEffect(() => {\n setValue(valueProp!)\n }, [valueProp])\n\n return {\n type,\n value,\n onChange,\n }\n}\n\nexport type UseMenuOptionGroupReturn = ReturnType<typeof useMenuOptionGroup>\n\nexport interface UseMenuOptionItemProps extends UseMenuItemProps {\n /**\n * The value of the menu option item.\n */\n value: string\n}\n\nexport const useMenuOptionItem = ({\n disabled,\n value,\n ...rest\n}: UseMenuOptionItemProps) => {\n const { type, value: selectedValue, onChange } = useMenuOptionGroupContext()\n const { getItemProps } = useMenuItem({ disabled, value, ...rest })\n const radio = type === \"radio\" && isString(selectedValue)\n const checkbox = type === \"checkbox\" && isArray(selectedValue)\n const selected = radio\n ? value === selectedValue\n : checkbox\n ? selectedValue.includes(value)\n : false\n\n const getIndicatorProps: PropGetter = useCallback(\n ({ style, ...props } = {}) => ({\n style: { opacity: selected ? 1 : 0, ...style },\n ...props,\n }),\n [selected],\n )\n\n const getOptionItemProps: PropGetter = useCallback(\n (props = {}) =>\n getItemProps({\n role: radio ? \"menuitemradio\" : \"menuitemcheckbox\",\n ...props,\n onClick: handlerAll(props.onClick, () =>\n !disabled ? onChange?.(value) : noop,\n ),\n }),\n [disabled, getItemProps, onChange, radio, value],\n )\n\n return {\n type,\n selected,\n getIndicatorProps,\n getOptionItemProps,\n }\n}\n\nexport type UseMenuOptionItemReturn = ReturnType<typeof useMenuOptionItem>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-menu.js","names":["createContext","noop","getTriggerProps: PropGetter","getContextTriggerProps: PropGetter","getContentProps: PropGetter","getSeparatorProps: PropGetter","value"],"sources":["../../../../src/components/menu/use-menu.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent, MouseEvent, RefObject } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { Descendant, Descendants } from \"../../hooks/use-descendants\"\nimport type { UseDisclosureProps } from \"../../hooks/use-disclosure\"\nimport { useCallback, useId, useRef } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { useDisclosure } from \"../../hooks/use-disclosure\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isString,\n isTruthyDataAttr,\n mergeRefs,\n noop,\n runKeyAction,\n useUpdateEffect,\n} from \"../../utils\"\n\ntype SubMenuDirection = \"end\" | \"start\"\n\ninterface MenuDescendantProps {\n id: string\n}\ntype MenuDescendant = Descendant<HTMLDivElement, MenuDescendantProps>\n\nconst {\n DescendantsContext: MenuDescendantsContext,\n useDescendant: useMenuDescendant,\n useDescendantRegister: useMenuDescendantRegister,\n useDescendants: useMenuDescendants,\n} = createDescendants<HTMLDivElement, MenuDescendantProps>()\n\nexport { MenuDescendantsContext, useMenuDescendant, useMenuDescendants }\n\ninterface MenuContext extends Pick<\n UseMenuReturn,\n | \"onActiveDescendant\"\n | \"onClose\"\n | \"onCloseSubMenu\"\n | \"onOpen\"\n | \"onSelect\"\n | \"subMenu\"\n | \"subMenuDirection\"\n> {}\n\nconst [MenuContext, useMenuContext] = createContext<MenuContext>({\n name: \"MenuContext\",\n})\n\ninterface MenuGroupContext extends Pick<UseMenuGroupReturn, \"getLabelProps\"> {}\n\nconst [MenuGroupContext, useMenuGroupContext] = createContext<MenuGroupContext>(\n {\n name: \"MenuGroupContext\",\n },\n)\n\ninterface MainMenuContext {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n onCloseRef: RefObject<() => void>\n onSelect: (value?: string, closeOnSelect?: boolean) => void\n closeOnSelect?: boolean\n}\n\nconst [MainMenuContext, useMainMenuContext] = createContext<MainMenuContext>({\n name: \"MainMenuContext\",\n strict: false,\n})\n\ninterface MenuOptionGroupContext {\n type: \"checkbox\" | \"radio\"\n value: string | string[]\n onChange?: (value: string) => void\n}\n\nconst [MenuOptionGroupContext, useMenuOptionGroupContext] =\n createContext<MenuOptionGroupContext>({\n name: \"MenuOptionGroupContext\",\n })\n\nexport {\n MainMenuContext,\n MenuContext,\n MenuGroupContext,\n MenuOptionGroupContext,\n useMainMenuContext,\n useMenuContext,\n useMenuGroupContext,\n useMenuOptionGroupContext,\n}\n\nexport interface UseMenuProps extends Omit<UseDisclosureProps, \"timing\"> {\n /**\n * If `true`, the menu item will be closed when selected.\n *\n * @default true\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The direction of the sub menu.\n *\n * @default 'end'\n */\n subMenuDirection?: SubMenuDirection\n /**\n * Callback invoked when a menu item is selected.\n */\n onSelect?: (value?: string) => void\n}\n\nexport const useMenu = ({\n closeOnSelect,\n defaultOpen,\n disabled = false,\n open: openProp,\n subMenuDirection = \"end\",\n onClose: onCloseProp,\n onOpen: onOpenProp,\n onSelect: onSelectProp,\n}: UseMenuProps = {}) => {\n const triggerId = useId()\n const contentId = useId()\n const descendants = useMenuDescendants()\n const updateRef = useRef<() => void>(noop)\n const onCloseRef = useRef<() => void>(noop)\n const contentRef = useRef<HTMLDivElement>(null)\n const { open, onClose, onOpen } = useDisclosure({\n defaultOpen,\n open: openProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n })\n const onCloseSubMenu = useCallback(() => onCloseRef.current(), [])\n const onActiveDescendant = useCallback(\n (\n descendant?: MenuDescendant,\n options: FocusOptions = { preventScroll: true },\n ) => {\n if (!contentRef.current || !descendant || disabled) return\n\n contentRef.current.setAttribute(\"aria-activedescendant\", descendant.id)\n\n descendants.active(descendant, options)\n },\n [descendants, disabled],\n )\n const { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect } =\n useSubMenu({\n descendants,\n disabled,\n open,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onOpen,\n })\n\n closeOnSelect ??= mainCloseOnSelect ?? true\n\n const onSelect = useCallback(\n (value?: string, closeOnSelectProp = closeOnSelect) => {\n if (disabled) return\n\n onSelectProp?.(value)\n onMainSelect?.(value, closeOnSelectProp)\n\n if (!closeOnSelectProp) return\n\n onClose()\n },\n [closeOnSelect, disabled, onClose, onMainSelect, onSelectProp],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n\n if (!open) {\n onOpen()\n } else {\n onClose()\n }\n },\n [disabled, onClose, onOpen, open],\n )\n\n const onContextMenu = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n\n ev.preventDefault()\n onOpen()\n updateRef.current()\n },\n [disabled, onOpen],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n\n runKeyAction(ev, {\n ArrowDown: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n ArrowUp: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n })\n },\n Enter: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n Space: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n },\n })\n },\n [descendants, disabled, onActiveDescendant, onOpen],\n )\n\n const getTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n ...getSubMenuProps({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"button\",\n tabIndex: disabled ? -1 : 0,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n }),\n [contentId, disabled, getSubMenuProps, onClick, onKeyDown, open, triggerId],\n )\n\n const getContextTriggerProps: PropGetter = useCallback(\n (props = {}) => ({\n id: triggerId,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-trigger\": dataAttr(true),\n role: \"application\",\n ...props,\n onContextMenu: handlerAll(props.onContextMenu, onContextMenu),\n }),\n [contentId, disabled, onContextMenu, open, triggerId],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: contentId,\n \"aria-labelledby\": cx(ariaLabelledby, triggerId),\n role: \"menu\",\n ...props,\n ref: mergeRefs(ref, contentRef),\n }),\n [contentId, triggerId],\n )\n\n const getSeparatorProps: PropGetter = useCallback(\n (props) => ({ role: \"separator\", ...props }),\n [],\n )\n\n return {\n closeOnSelect,\n descendants,\n open,\n subMenu,\n subMenuDirection,\n updateRef,\n getContentProps,\n getContextTriggerProps,\n getSeparatorProps,\n getTriggerProps,\n onActiveDescendant,\n onClose,\n onCloseRef,\n onCloseSubMenu,\n onOpen,\n onSelect,\n }\n}\n\nexport type UseMenuReturn = ReturnType<typeof useMenu>\n\nexport interface UseSubMenuProps extends Omit<\n Required<UseDisclosureProps>,\n \"defaultOpen\" | \"timing\"\n> {\n descendants: Descendants<HTMLDivElement, MenuDescendantProps>\n onActiveDescendant: (descendant?: MenuDescendant) => void\n disabled?: boolean\n subMenuDirection?: SubMenuDirection\n}\n\nexport const useSubMenu = ({\n descendants,\n disabled = false,\n open,\n subMenuDirection = \"end\",\n onActiveDescendant,\n onClose,\n onOpen,\n}: UseSubMenuProps) => {\n const uuid = useId()\n const {\n closeOnSelect: mainCloseOnSelect,\n descendants: mainDescendants,\n onActiveDescendant: onActiveMainDescendant,\n onCloseRef,\n onSelect: onMainSelect,\n } = useMainMenuContext() ?? {}\n const subMenu = !!mainDescendants && !!onActiveMainDescendant\n const createRegister = useMenuDescendantRegister(mainDescendants)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const dataDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const dataDisabled = isTruthyDataAttr(node.getAttribute(\"data-disabled\"))\n\n return dataDisabled\n }, [])\n\n const ariaDisabled = useCallback((node?: HTMLDivElement | null) => {\n node ??= triggerRef.current\n\n if (!node) return false\n\n const ariaDisabled = isTruthyDataAttr(node.getAttribute(\"aria-disabled\"))\n\n return ariaDisabled\n }, [])\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu) return\n\n ev.defaultPrevented = disabled || dataDisabled() || ariaDisabled()\n },\n [ariaDisabled, dataDisabled, disabled, subMenu],\n )\n\n const onMouseEnter = useCallback(() => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n onOpen()\n }, [ariaDisabled, dataDisabled, disabled, onOpen, subMenu])\n\n const onMouseMove = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!subMenu || disabled || dataDisabled() || ariaDisabled()) return\n\n const descendant = descendants.value(triggerRef.current)\n\n onActiveMainDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [\n ariaDisabled,\n dataDisabled,\n descendants,\n disabled,\n onActiveMainDescendant,\n subMenu,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (!subMenu || disabled) return\n\n const currentDescendant = open ? descendants : mainDescendants\n const onActiveCurrentDescendant = open\n ? onActiveDescendant\n : onActiveMainDescendant\n\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = currentDescendant.enabledNextValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n ArrowUp: () => {\n const descendant = currentDescendant.enabledPrevValue(\n triggerRef.current,\n )\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n End: () => {\n const descendant = currentDescendant.enabledLastValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n Home: () => {\n const descendant = currentDescendant.enabledFirstValue()\n\n onActiveCurrentDescendant(descendant)\n\n ev.defaultPrevented = true\n },\n [subMenuDirection === \"end\" ? \"ArrowRight\" : \"ArrowLeft\"]: () => {\n onOpen()\n\n setTimeout(() => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n })\n\n ev.defaultPrevented = true\n },\n })\n },\n [\n subMenu,\n disabled,\n open,\n descendants,\n mainDescendants,\n onActiveDescendant,\n onActiveMainDescendant,\n subMenuDirection,\n onOpen,\n ],\n )\n\n assignRef(onCloseRef, onClose)\n\n const getSubMenuProps: PropGetter = useCallback(\n ({ id = uuid, ref, ...props } = {}) => {\n const getDisabled = (node: HTMLDivElement) =>\n disabled || dataDisabled(node) || ariaDisabled(node)\n const register = createRegister({ id, disabled: getDisabled })\n\n return {\n role: subMenu ? \"menuitem\" : \"button\",\n ...props,\n ref: mergeRefs(ref, triggerRef, register),\n onClick: handlerAll(onClick, props.onClick),\n onKeyDown: handlerAll(onKeyDown, props.onKeyDown),\n onMouseEnter: handlerAll(onMouseEnter, props.onMouseEnter),\n onMouseMove: handlerAll(onMouseMove, props.onMouseMove),\n }\n },\n [\n uuid,\n subMenu,\n createRegister,\n onClick,\n onKeyDown,\n onMouseEnter,\n onMouseMove,\n disabled,\n dataDisabled,\n ariaDisabled,\n ],\n )\n\n return { mainCloseOnSelect, subMenu, getSubMenuProps, onMainSelect }\n}\n\nexport type UseSubMenuReturn = ReturnType<typeof useSubMenu>\n\nexport interface UseMenuGroupProps extends HTMLProps {}\n\nexport const useMenuGroup = ({\n \"aria-labelledby\": ariaLabelledbyProp,\n ...rest\n}: UseMenuGroupProps) => {\n const labelId = useId()\n\n const getGroupProps: PropGetter = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) =>\n mergeProps(\n {\n \"aria-labelledby\": cx(ariaLabelledbyProp, ariaLabelledby, labelId),\n role: \"group\",\n },\n rest,\n props,\n )(),\n [ariaLabelledbyProp, labelId, rest],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props) => ({ id: labelId, role: \"presentation\", ...props }),\n [labelId],\n )\n\n return { getGroupProps, getLabelProps }\n}\n\nexport type UseMenuGroupReturn = ReturnType<typeof useMenuGroup>\n\nexport interface UseMenuItemProps extends HTMLProps {\n /**\n * If `true`, the menu item will be closed when selected.\n */\n closeOnSelect?: boolean\n /**\n * If `true`, the menu item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The value of the menu item.\n */\n value?: string\n}\n\nexport const useMenuItem = ({\n id,\n \"aria-disabled\": ariaDisabled,\n \"data-disabled\": dataDisabled,\n \"data-trigger\": dataTrigger,\n closeOnSelect,\n disabled = false,\n value,\n ...rest\n}: UseMenuItemProps) => {\n const trigger = isTruthyDataAttr(dataTrigger)\n const {\n subMenu,\n subMenuDirection,\n onActiveDescendant,\n onClose,\n onCloseSubMenu,\n onSelect,\n } = useMenuContext()\n const uuid = useId()\n const itemRef = useRef<HTMLDivElement>(null)\n const subMenuTrigger = subMenu && trigger\n\n id ??= uuid\n\n const { descendants, register } = useMenuDescendant({\n id,\n disabled: disabled || subMenuTrigger,\n })\n\n const onActive = useCallback(() => {\n if (disabled) return\n\n const descendant = descendants.value(itemRef.current)\n\n onActiveDescendant(descendant)\n }, [descendants, disabled, onActiveDescendant])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n runKeyAction(ev, {\n ArrowDown: () => {\n const descendant = descendants.enabledNextValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n ArrowUp: () => {\n const descendant = descendants.enabledPrevValue(itemRef.current)\n\n onActiveDescendant(descendant)\n },\n End: () => {\n const descendant = descendants.enabledLastValue()\n\n onActiveDescendant(descendant)\n },\n Enter: () => onSelect(value, closeOnSelect),\n Home: () => {\n const descendant = descendants.enabledFirstValue()\n\n onActiveDescendant(descendant)\n },\n Space: () => onSelect(value, closeOnSelect),\n [subMenuDirection === \"end\" ? \"ArrowLeft\" : \"ArrowRight\"]: () => {\n if (!subMenu) return\n\n onClose()\n\n const descendant = descendants.firstValue()\n\n descendant?.node.focus()\n },\n })\n },\n [\n closeOnSelect,\n descendants,\n onActiveDescendant,\n onClose,\n onSelect,\n subMenu,\n subMenuDirection,\n value,\n ],\n )\n\n const getItemProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) => {\n const {\n onClick: restOnClick,\n onFocus: restOnFocus,\n onKeyDown: restOnKeyDown,\n onMouseMove: restOnMouseMove,\n ...restProps\n } = rest\n const {\n onClick: propsOnClick,\n onFocus: propsOnFocus,\n onKeyDown: propsOnKeyDown,\n onMouseMove: propsOnMouseMove,\n ...itemProps\n } = props\n\n return mergeProps(\n {\n id,\n \"aria-disabled\": ariaDisabled ?? ariaAttr(disabled),\n \"data-disabled\": dataDisabled ?? dataAttr(disabled),\n role: \"menuitem\",\n tabIndex: -1,\n },\n restProps,\n itemProps,\n {\n ref: mergeRefs(ref, itemRef, register),\n onClick: handlerAll(propsOnClick, restOnClick, () =>\n onSelect(value, closeOnSelect),\n ),\n onFocus: handlerAll(propsOnFocus, restOnFocus, onActive),\n onKeyDown: handlerAll(propsOnKeyDown, restOnKeyDown, onKeyDown),\n onMouseMove: handlerAll(propsOnMouseMove, restOnMouseMove, () => {\n onCloseSubMenu()\n onActive()\n }),\n },\n )()\n },\n [\n id,\n ariaDisabled,\n disabled,\n dataDisabled,\n rest,\n register,\n onActive,\n onKeyDown,\n onSelect,\n value,\n closeOnSelect,\n onCloseSubMenu,\n ],\n )\n\n return {\n subMenuTrigger,\n getItemProps,\n }\n}\n\nexport type UseMenuItemReturn = ReturnType<typeof useMenuItem>\n\nexport type MenuOptionGroupType = \"checkbox\" | \"radio\"\nexport type MenuOptionGroupValue<Y extends MenuOptionGroupType> =\n Y extends \"checkbox\" ? string[] : string\n\nexport interface UseMenuOptionGroupProps<\n Y extends MenuOptionGroupType = \"checkbox\",\n M extends MenuOptionGroupValue<Y> = MenuOptionGroupValue<Y>,\n> {\n /**\n * The initial value of the menu item group.\n */\n defaultValue?: M\n /**\n * The type of the menu option group.\n */\n type?: Y\n /**\n * The value of the menu item group.\n */\n value?: M\n /**\n * The callback fired when any children checkbox is checked or unchecked.\n */\n onChange?: (value: M) => void\n}\n\nexport const useMenuOptionGroup = <\n Y extends \"checkbox\" | \"radio\" = \"checkbox\",\n M extends Y extends \"checkbox\" ? string[] : string = Y extends \"checkbox\"\n ? string[]\n : string,\n>({\n type = \"checkbox\" as Y,\n defaultValue = (type === \"checkbox\" ? [] : \"\") as M,\n value: valueProp,\n onChange: onChangeProp,\n}: UseMenuOptionGroupProps<Y, M>) => {\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const radio = type === \"radio\"\n\n const onChange = useCallback(\n (selectedValue: string) => {\n setValue((prev) => {\n if (radio && isString(prev)) {\n return selectedValue as M\n } else if (!radio && isArray(prev)) {\n return (\n prev.includes(selectedValue)\n ? prev.filter((value) => value !== selectedValue)\n : prev.concat(selectedValue)\n ) as M\n } else {\n return prev\n }\n })\n },\n [radio, setValue],\n )\n\n useUpdateEffect(() => {\n setValue(valueProp!)\n }, [valueProp])\n\n return {\n type,\n value,\n onChange,\n }\n}\n\nexport type UseMenuOptionGroupReturn = ReturnType<typeof useMenuOptionGroup>\n\nexport interface UseMenuOptionItemProps extends UseMenuItemProps {\n /**\n * The value of the menu option item.\n */\n value: string\n}\n\nexport const useMenuOptionItem = ({\n disabled,\n value,\n ...rest\n}: UseMenuOptionItemProps) => {\n const { type, value: selectedValue, onChange } = useMenuOptionGroupContext()\n const { getItemProps } = useMenuItem({ disabled, value, ...rest })\n const radio = type === \"radio\" && isString(selectedValue)\n const checkbox = type === \"checkbox\" && isArray(selectedValue)\n const selected = radio\n ? value === selectedValue\n : checkbox\n ? selectedValue.includes(value)\n : false\n\n const getIndicatorProps: PropGetter = useCallback(\n ({ style, ...props } = {}) => ({\n style: { opacity: selected ? 1 : 0, ...style },\n ...props,\n }),\n [selected],\n )\n\n const getOptionItemProps: PropGetter = useCallback(\n (props = {}) =>\n getItemProps({\n role: radio ? \"menuitemradio\" : \"menuitemcheckbox\",\n ...props,\n onClick: handlerAll(props.onClick, () =>\n !disabled ? onChange?.(value) : noop,\n ),\n }),\n [disabled, getItemProps, onChange, radio, value],\n )\n\n return {\n type,\n selected,\n getIndicatorProps,\n getOptionItemProps,\n }\n}\n\nexport type UseMenuOptionItemReturn = ReturnType<typeof useMenuOptionItem>\n"],"mappings":"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"}
@@ -3,17 +3,16 @@
3
3
  import { createContext as createContext$1 } from "../../utils/context.js";
4
4
  import { mergeRefs } from "../../utils/ref.js";
5
5
  import { utils_exports } from "../../utils/index.js";
6
+ import { mergeProps } from "../../core/components/props.js";
7
+ import "../../core/index.js";
6
8
  import { useCallback, useId } from "react";
7
9
 
8
10
  //#region src/components/native-accordion/use-native-accordion.ts
9
11
  const [NativeAccordionContext, useNativeAccordionContext] = createContext$1({ name: "NativeAccordionContext" });
10
12
  const useNativeAccordion = ({ name, multiple = false, ...rest } = {}) => {
11
13
  const generatedName = useId();
12
- const getRootProps = ({ ref, ...props } = {}) => ({
13
- ...props,
14
- ...rest,
15
- ref: mergeRefs(ref, rest.ref)
16
- });
14
+ const { ref: restRef, ...restProps } = rest;
15
+ const getRootProps = ({ ref, ...props } = {}) => mergeProps(props, restProps, { ref: mergeRefs(ref, restRef) })();
17
16
  return {
18
17
  name: multiple ? void 0 : name ?? generatedName,
19
18
  getRootProps
@@ -21,13 +20,11 @@ const useNativeAccordion = ({ name, multiple = false, ...rest } = {}) => {
21
20
  };
22
21
  const useNativeAccordionItem = ({ disabled, ...rest }) => {
23
22
  const { name } = useNativeAccordionContext();
24
- const getItemProps = ({ ref, ...props } = {}) => ({
25
- ref: mergeRefs(ref, rest.ref),
26
- name: props.name ?? rest.name ?? name,
27
- "data-group": "",
28
- ...rest,
29
- ...props
30
- });
23
+ const { ref: restRef, ...restProps } = rest;
24
+ const getItemProps = ({ ref, ...props } = {}) => mergeProps({
25
+ name: props.name ?? restProps.name ?? name,
26
+ "data-group": ""
27
+ }, restProps, props, { ref: mergeRefs(ref, restRef) })();
31
28
  const getButtonProps = useCallback((props = {}) => ({
32
29
  "aria-disabled": (0, utils_exports.ariaAttr)(disabled),
33
30
  "data-disabled": (0, utils_exports.dataAttr)(disabled),
@@ -1 +1 @@
1
- {"version":3,"file":"use-native-accordion.js","names":["createContext","getRootProps: PropGetter","getItemProps: PropGetter<\"details\">","getButtonProps: PropGetter<\"summary\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/native-accordion/use-native-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useId } from \"react\"\nimport {\n ariaAttr,\n createContext,\n dataAttr,\n handlerAll,\n mergeRefs,\n} from \"../../utils\"\n\ninterface NativeAccordionContext extends Pick<\n UseNativeAccordionReturn,\n \"name\"\n> {}\n\nconst [NativeAccordionContext, useNativeAccordionContext] =\n createContext<NativeAccordionContext>({\n name: \"NativeAccordionContext\",\n })\n\nexport { NativeAccordionContext, useNativeAccordionContext }\n\nexport interface UseNativeAccordionProps extends HTMLProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * The HTML `name` attribute used for forms.\n */\n name?: string\n}\n\nexport const useNativeAccordion = ({\n name,\n multiple = false,\n ...rest\n}: UseNativeAccordionProps = {}) => {\n const generatedName = useId()\n\n const getRootProps: PropGetter = ({ ref, ...props } = {}) => ({\n ...props,\n ...rest,\n ref: mergeRefs(ref, rest.ref),\n })\n\n return {\n name: multiple ? undefined : (name ?? generatedName),\n getRootProps,\n }\n}\n\nexport type UseNativeAccordionReturn = ReturnType<typeof useNativeAccordion>\n\nexport interface UseNativeAccordionItemProps extends HTMLProps<\"details\"> {\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useNativeAccordionItem = ({\n disabled,\n ...rest\n}: UseNativeAccordionItemProps) => {\n const { name } = useNativeAccordionContext()\n\n const getItemProps: PropGetter<\"details\"> = ({ ref, ...props } = {}) => ({\n ref: mergeRefs(ref, rest.ref),\n name: props.name ?? rest.name ?? name,\n \"data-group\": \"\",\n ...rest,\n ...props,\n })\n\n const getButtonProps: PropGetter<\"summary\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"data-disabled\": dataAttr(disabled),\n ...props,\n onClick: handlerAll(props.onClick, (ev) => {\n if (!disabled) return\n\n ev.preventDefault()\n }),\n }),\n [disabled],\n )\n\n const getPanelProps: PropGetter = useCallback((props = {}) => props, [])\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [disabled],\n )\n\n return {\n disabled,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseNativeAccordionItemReturn = ReturnType<\n typeof useNativeAccordionItem\n>\n"],"mappings":";;;;;;;;AAiBA,MAAM,CAAC,wBAAwB,6BAC7BA,gBAAsC,EACpC,MAAM,0BACP,CAAC;AAiBJ,MAAa,sBAAsB,EACjC,MACA,WAAW,OACX,GAAG,SACwB,EAAE,KAAK;CAClC,MAAM,gBAAgB,OAAO;CAE7B,MAAMC,gBAA4B,EAAE,KAAK,GAAG,UAAU,EAAE,MAAM;EAC5D,GAAG;EACH,GAAG;EACH,KAAK,UAAU,KAAK,KAAK,IAAI;EAC9B;AAED,QAAO;EACL,MAAM,WAAW,SAAa,QAAQ;EACtC;EACD;;AAcH,MAAa,0BAA0B,EACrC,UACA,GAAG,WAC8B;CACjC,MAAM,EAAE,SAAS,2BAA2B;CAE5C,MAAMC,gBAAuC,EAAE,KAAK,GAAG,UAAU,EAAE,MAAM;EACvE,KAAK,UAAU,KAAK,KAAK,IAAI;EAC7B,MAAM,MAAM,QAAQ,KAAK,QAAQ;EACjC,cAAc;EACd,GAAG;EACH,GAAG;EACJ;CAED,MAAMC,iBAAwC,aAC3C,QAAQ,EAAE,MAAM;EACf,6CAA0B,SAAS;EACnC,6CAA0B,SAAS;EACnC,GAAG;EACH,uCAAoB,MAAM,UAAU,OAAO;AACzC,OAAI,CAAC,SAAU;AAEf,MAAG,gBAAgB;IACnB;EACH,GACD,CAAC,SAAS,CACX;CAED,MAAMC,gBAA4B,aAAa,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;AAYxE,QAAO;EACL;EACA;EACA,cAbsC,aACrC,QAAQ,EAAE,MAAM;GACf,6CAA0B,SAAS;GACnC,eAAe;GACf,MAAM;GACN,GAAG;GACJ,GACD,CAAC,SAAS,CACX;EAMC;EACA;EACD"}
1
+ {"version":3,"file":"use-native-accordion.js","names":["createContext","getRootProps: PropGetter","getItemProps: PropGetter<\"details\">","getButtonProps: PropGetter<\"summary\">","getPanelProps: PropGetter"],"sources":["../../../../src/components/native-accordion/use-native-accordion.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useId } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport {\n ariaAttr,\n createContext,\n dataAttr,\n handlerAll,\n mergeRefs,\n} from \"../../utils\"\n\ninterface NativeAccordionContext extends Pick<\n UseNativeAccordionReturn,\n \"name\"\n> {}\n\nconst [NativeAccordionContext, useNativeAccordionContext] =\n createContext<NativeAccordionContext>({\n name: \"NativeAccordionContext\",\n })\n\nexport { NativeAccordionContext, useNativeAccordionContext }\n\nexport interface UseNativeAccordionProps extends HTMLProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n *\n * @default false\n */\n multiple?: boolean\n /**\n * The HTML `name` attribute used for forms.\n */\n name?: string\n}\n\nexport const useNativeAccordion = ({\n name,\n multiple = false,\n ...rest\n}: UseNativeAccordionProps = {}) => {\n const generatedName = useId()\n const { ref: restRef, ...restProps } = rest\n\n const getRootProps: PropGetter = ({ ref, ...props } = {}) =>\n mergeProps(props, restProps, {\n ref: mergeRefs(ref, restRef),\n })()\n\n return {\n name: multiple ? undefined : (name ?? generatedName),\n getRootProps,\n }\n}\n\nexport type UseNativeAccordionReturn = ReturnType<typeof useNativeAccordion>\n\nexport interface UseNativeAccordionItemProps extends HTMLProps<\"details\"> {\n /**\n * If `true`, the accordion item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n}\n\nexport const useNativeAccordionItem = ({\n disabled,\n ...rest\n}: UseNativeAccordionItemProps) => {\n const { name } = useNativeAccordionContext()\n const { ref: restRef, ...restProps } = rest\n\n const getItemProps: PropGetter<\"details\"> = ({ ref, ...props } = {}) =>\n mergeProps(\n {\n name: props.name ?? restProps.name ?? name,\n \"data-group\": \"\",\n },\n restProps,\n props,\n {\n ref: mergeRefs(ref, restRef),\n },\n )()\n\n const getButtonProps: PropGetter<\"summary\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"data-disabled\": dataAttr(disabled),\n ...props,\n onClick: handlerAll(props.onClick, (ev) => {\n if (!disabled) return\n\n ev.preventDefault()\n }),\n }),\n [disabled],\n )\n\n const getPanelProps: PropGetter = useCallback((props = {}) => props, [])\n\n const getIconProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-hidden\": true,\n role: \"presentation\",\n ...props,\n }),\n [disabled],\n )\n\n return {\n disabled,\n getButtonProps,\n getIconProps,\n getItemProps,\n getPanelProps,\n }\n}\n\nexport type UseNativeAccordionItemReturn = ReturnType<\n typeof useNativeAccordionItem\n>\n"],"mappings":";;;;;;;;;;AAkBA,MAAM,CAAC,wBAAwB,6BAC7BA,gBAAsC,EACpC,MAAM,0BACP,CAAC;AAiBJ,MAAa,sBAAsB,EACjC,MACA,WAAW,OACX,GAAG,SACwB,EAAE,KAAK;CAClC,MAAM,gBAAgB,OAAO;CAC7B,MAAM,EAAE,KAAK,SAAS,GAAG,cAAc;CAEvC,MAAMC,gBAA4B,EAAE,KAAK,GAAG,UAAU,EAAE,KACtD,WAAW,OAAO,WAAW,EAC3B,KAAK,UAAU,KAAK,QAAQ,EAC7B,CAAC,EAAE;AAEN,QAAO;EACL,MAAM,WAAW,SAAa,QAAQ;EACtC;EACD;;AAcH,MAAa,0BAA0B,EACrC,UACA,GAAG,WAC8B;CACjC,MAAM,EAAE,SAAS,2BAA2B;CAC5C,MAAM,EAAE,KAAK,SAAS,GAAG,cAAc;CAEvC,MAAMC,gBAAuC,EAAE,KAAK,GAAG,UAAU,EAAE,KACjE,WACE;EACE,MAAM,MAAM,QAAQ,UAAU,QAAQ;EACtC,cAAc;EACf,EACD,WACA,OACA,EACE,KAAK,UAAU,KAAK,QAAQ,EAC7B,CACF,EAAE;CAEL,MAAMC,iBAAwC,aAC3C,QAAQ,EAAE,MAAM;EACf,6CAA0B,SAAS;EACnC,6CAA0B,SAAS;EACnC,GAAG;EACH,uCAAoB,MAAM,UAAU,OAAO;AACzC,OAAI,CAAC,SAAU;AAEf,MAAG,gBAAgB;IACnB;EACH,GACD,CAAC,SAAS,CACX;CAED,MAAMC,gBAA4B,aAAa,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;AAYxE,QAAO;EACL;EACA;EACA,cAbsC,aACrC,QAAQ,EAAE,MAAM;GACf,6CAA0B,SAAS;GACnC,eAAe;GACf,MAAM;GACN,GAAG;GACJ,GACD,CAAC,SAAS,CACX;EAMC;EACA;EACD"}
@@ -9,7 +9,7 @@ import "../collapse/index.js";
9
9
  import "../../index.js";
10
10
  import { AccordionStyle } from "./accordion.style.js";
11
11
  import { UseAccordionItemProps, UseAccordionProps } from "./use-accordion.js";
12
- import * as react65 from "react";
12
+ import * as react823 from "react";
13
13
 
14
14
  //#region src/components/accordion/accordion.d.ts
15
15
  interface AccordionCallBackProps {
@@ -33,7 +33,7 @@ interface AccordionRootProps extends Omit<HTMLStyledProps, "onChange">, ThemePro
33
33
  */
34
34
  items?: AccordionItem[];
35
35
  }
36
- declare const AccordionPropsContext: react65.Context<Partial<AccordionRootProps> | undefined>, useAccordionPropsContext: () => Partial<AccordionRootProps> | undefined;
36
+ declare const AccordionPropsContext: react823.Context<Partial<AccordionRootProps> | undefined>, useAccordionPropsContext: () => Partial<AccordionRootProps> | undefined;
37
37
  /**
38
38
  * `Accordion` is a component for a list that displays information in an expandable or collapsible manner.
39
39
  *