@yamada-ui/react 2.2.0-next-20260409094221 → 2.2.0
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.
- package/dist/cjs/components/action-bar/use-action-bar.cjs +2 -1
- package/dist/cjs/components/action-bar/use-action-bar.cjs.map +1 -1
- package/dist/cjs/components/editable/use-editable.cjs +8 -4
- package/dist/cjs/components/editable/use-editable.cjs.map +1 -1
- package/dist/cjs/components/modal/modal.cjs +3 -1
- package/dist/cjs/components/modal/modal.cjs.map +1 -1
- package/dist/cjs/components/modal/use-modal.cjs +4 -2
- package/dist/cjs/components/modal/use-modal.cjs.map +1 -1
- package/dist/cjs/components/sidebar/sidebar.cjs +5 -3
- package/dist/cjs/components/sidebar/sidebar.cjs.map +1 -1
- package/dist/cjs/components/sidebar/use-sidebar.cjs +8 -3
- package/dist/cjs/components/sidebar/use-sidebar.cjs.map +1 -1
- package/dist/cjs/components/tree/tree.cjs +3 -2
- package/dist/cjs/components/tree/tree.cjs.map +1 -1
- package/dist/cjs/components/tree/tree.style.cjs +4 -1
- package/dist/cjs/components/tree/tree.style.cjs.map +1 -1
- package/dist/cjs/components/tree/use-tree.cjs +20 -6
- package/dist/cjs/components/tree/use-tree.cjs.map +1 -1
- package/dist/esm/components/action-bar/use-action-bar.js +2 -1
- package/dist/esm/components/action-bar/use-action-bar.js.map +1 -1
- package/dist/esm/components/editable/use-editable.js +8 -4
- package/dist/esm/components/editable/use-editable.js.map +1 -1
- package/dist/esm/components/modal/modal.js +3 -1
- package/dist/esm/components/modal/modal.js.map +1 -1
- package/dist/esm/components/modal/use-modal.js +4 -2
- package/dist/esm/components/modal/use-modal.js.map +1 -1
- package/dist/esm/components/sidebar/sidebar.js +5 -3
- package/dist/esm/components/sidebar/sidebar.js.map +1 -1
- package/dist/esm/components/sidebar/use-sidebar.js +9 -4
- package/dist/esm/components/sidebar/use-sidebar.js.map +1 -1
- package/dist/esm/components/tree/tree.js +3 -2
- package/dist/esm/components/tree/tree.js.map +1 -1
- package/dist/esm/components/tree/tree.style.js +4 -1
- package/dist/esm/components/tree/tree.style.js.map +1 -1
- package/dist/esm/components/tree/use-tree.js +21 -7
- package/dist/esm/components/tree/use-tree.js.map +1 -1
- package/dist/types/components/accordion/accordion.d.ts +2 -2
- package/dist/types/components/accordion/use-accordion.d.ts +11 -11
- package/dist/types/components/action-bar/action-bar.d.ts +2 -2
- package/dist/types/components/airy/airy.d.ts +2 -2
- package/dist/types/components/alert/alert.d.ts +2 -2
- package/dist/types/components/alert/alert.style.d.ts +1 -1
- package/dist/types/components/alpha-slider/alpha-slider.d.ts +2 -2
- package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +2 -2
- package/dist/types/components/autocomplete/autocomplete.d.ts +2 -2
- package/dist/types/components/autocomplete/autocomplete.style.d.ts +1 -1
- package/dist/types/components/autocomplete/use-autocomplete.d.ts +5 -5
- package/dist/types/components/avatar/avatar.d.ts +5 -5
- package/dist/types/components/avatar/avatar.style.d.ts +1 -1
- package/dist/types/components/avatar/use-avatar-group.d.ts +2 -2
- package/dist/types/components/badge/badge.d.ts +2 -2
- package/dist/types/components/bleed/bleed.d.ts +2 -2
- package/dist/types/components/blockquote/blockquote.d.ts +2 -2
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
- package/dist/types/components/breadcrumb/use-breadcrumb.d.ts +2 -2
- package/dist/types/components/button/button.d.ts +2 -2
- package/dist/types/components/button/icon-button.d.ts +2 -2
- package/dist/types/components/calendar/calendar.d.ts +2 -2
- package/dist/types/components/calendar/calendar.style.d.ts +2 -2
- package/dist/types/components/calendar/use-calendar.d.ts +8 -8
- package/dist/types/components/card/card.d.ts +2 -2
- package/dist/types/components/carousel/carousel.d.ts +2 -2
- package/dist/types/components/carousel/carousel.style.d.ts +2 -2
- package/dist/types/components/carousel/use-carousel.d.ts +3 -3
- package/dist/types/components/center/center.d.ts +2 -2
- package/dist/types/components/chart/chart.d.ts +5 -5
- package/dist/types/components/chart/pie-chart.d.ts +2 -2
- package/dist/types/components/chart/radar-chart.d.ts +2 -2
- package/dist/types/components/chart/radial-chart.d.ts +2 -2
- package/dist/types/components/chart/use-chart.d.ts +2 -2
- package/dist/types/components/checkbox/checkbox.d.ts +4 -4
- package/dist/types/components/checkbox/use-checkbox-group.d.ts +2 -2
- package/dist/types/components/checkbox-card/checkbox-card.d.ts +5 -5
- package/dist/types/components/checkbox-card/checkbox-card.style.d.ts +1 -1
- package/dist/types/components/circle-progress/circle-progress.d.ts +2 -2
- package/dist/types/components/close-button/close-button.d.ts +2 -2
- package/dist/types/components/code/code.d.ts +2 -2
- package/dist/types/components/collapse/collapse.d.ts +2 -2
- package/dist/types/components/color-picker/color-picker.d.ts +2 -2
- package/dist/types/components/color-picker/color-picker.style.d.ts +1 -1
- package/dist/types/components/color-picker/use-color-picker.d.ts +2 -2
- package/dist/types/components/color-selector/color-selector.d.ts +2 -2
- package/dist/types/components/color-selector/color-selector.style.d.ts +2 -2
- package/dist/types/components/color-selector/use-color-selector.d.ts +3 -3
- package/dist/types/components/color-swatch/color-swatch.d.ts +2 -2
- package/dist/types/components/container/container.d.ts +2 -2
- package/dist/types/components/data-list/data-list.d.ts +2 -2
- package/dist/types/components/date-picker/date-picker.d.ts +2 -2
- package/dist/types/components/date-picker/use-date-picker.d.ts +4 -4
- package/dist/types/components/drawer/drawer.d.ts +2 -2
- package/dist/types/components/drawer/drawer.style.d.ts +2 -2
- package/dist/types/components/dropzone/dropzone.d.ts +5 -5
- package/dist/types/components/dropzone/dropzone.style.d.ts +1 -1
- package/dist/types/components/editable/editable.d.ts +4 -4
- package/dist/types/components/editable/use-editable.d.ts +2 -2
- package/dist/types/components/em/em.d.ts +2 -2
- package/dist/types/components/empty-state/empty-state.d.ts +2 -2
- package/dist/types/components/empty-state/empty-state.style.d.ts +2 -2
- package/dist/types/components/fade/fade.d.ts +2 -2
- package/dist/types/components/field/field.d.ts +3 -3
- package/dist/types/components/field/field.style.d.ts +2 -2
- package/dist/types/components/field/use-field-props.d.ts +4 -4
- package/dist/types/components/fieldset/fieldset.d.ts +3 -3
- package/dist/types/components/fieldset/fieldset.style.d.ts +1 -1
- package/dist/types/components/file-button/file-button.d.ts +2 -2
- package/dist/types/components/file-button/use-file-button.d.ts +18 -18
- package/dist/types/components/file-input/file-input.d.ts +2 -2
- package/dist/types/components/file-input/file-input.style.d.ts +1 -1
- package/dist/types/components/file-input/use-file-input.d.ts +17 -17
- package/dist/types/components/flex/flex.d.ts +2 -2
- package/dist/types/components/flip/flip.d.ts +4 -4
- package/dist/types/components/float/float.d.ts +2 -2
- package/dist/types/components/form/form.d.ts +3 -3
- package/dist/types/components/format/format-byte.d.ts +4 -4
- package/dist/types/components/format/format-date-time.d.ts +4 -4
- package/dist/types/components/format/format-number.d.ts +2 -2
- package/dist/types/components/grid/grid-item.d.ts +2 -2
- package/dist/types/components/grid/grid.d.ts +2 -2
- package/dist/types/components/group/group.d.ts +2 -2
- package/dist/types/components/group/use-group.d.ts +2 -2
- package/dist/types/components/heading/heading.d.ts +2 -2
- package/dist/types/components/hue-slider/hue-slider.d.ts +3 -3
- package/dist/types/components/icon/icon.d.ts +5 -5
- package/dist/types/components/image/image.d.ts +2 -2
- package/dist/types/components/indicator/indicator.d.ts +4 -4
- package/dist/types/components/infinite-scroll-area/infinite-scroll-area.d.ts +2 -2
- package/dist/types/components/input/input-addon.d.ts +2 -2
- package/dist/types/components/input/input-element.d.ts +2 -2
- package/dist/types/components/input/input.d.ts +2 -2
- package/dist/types/components/kbd/kbd.d.ts +2 -2
- package/dist/types/components/link/link.d.ts +2 -2
- package/dist/types/components/link-box/link-box.d.ts +2 -2
- package/dist/types/components/list/list.d.ts +2 -2
- package/dist/types/components/loading/loading-provider.d.ts +2 -2
- package/dist/types/components/loading/loading.d.ts +3 -3
- package/dist/types/components/mark/mark.d.ts +2 -2
- package/dist/types/components/menu/menu.d.ts +2 -2
- package/dist/types/components/menu/menu.style.d.ts +2 -2
- package/dist/types/components/menu/use-menu.d.ts +11 -11
- package/dist/types/components/modal/modal.d.ts +2 -2
- package/dist/types/components/modal/modal.style.d.ts +2 -2
- package/dist/types/components/native-accordion/native-accordion.d.ts +2 -2
- package/dist/types/components/native-accordion/use-native-accordion.d.ts +2 -2
- package/dist/types/components/native-popover/native-popover.d.ts +2 -2
- package/dist/types/components/native-select/native-select.d.ts +2 -2
- package/dist/types/components/native-table/native-table.d.ts +4 -4
- package/dist/types/components/notice/notice.style.d.ts +1 -1
- package/dist/types/components/number-input/number-input.d.ts +2 -2
- package/dist/types/components/pagination/pagination.d.ts +2 -2
- package/dist/types/components/pagination/use-pagination.d.ts +2 -2
- package/dist/types/components/password-input/password-input.d.ts +2 -2
- package/dist/types/components/password-input/strength-meter.d.ts +2 -2
- package/dist/types/components/password-input/use-password-input.d.ts +2 -2
- package/dist/types/components/pin-input/pin-input.d.ts +2 -2
- package/dist/types/components/pin-input/use-pin-input.d.ts +7 -7
- package/dist/types/components/popover/popover.d.ts +2 -2
- package/dist/types/components/progress/progress.d.ts +2 -2
- package/dist/types/components/progress/use-progress.d.ts +706 -706
- package/dist/types/components/qr-code/qr-code.d.ts +2 -2
- package/dist/types/components/radio/radio.d.ts +4 -4
- package/dist/types/components/radio/use-radio-group.d.ts +2 -2
- package/dist/types/components/radio-card/radio-card.d.ts +5 -5
- package/dist/types/components/radio-card/radio-card.style.d.ts +1 -1
- package/dist/types/components/rating/use-rating.d.ts +7 -7
- package/dist/types/components/reorder/reorder.d.ts +2 -2
- package/dist/types/components/reorder/reorder.style.d.ts +1 -1
- package/dist/types/components/reorder/use-reorder.d.ts +3 -3
- package/dist/types/components/resizable/resizable.d.ts +2 -2
- package/dist/types/components/resizable/resizable.style.d.ts +2 -2
- package/dist/types/components/resizable/use-resizable.d.ts +2 -2
- package/dist/types/components/ripple/ripple.d.ts +2 -2
- package/dist/types/components/ripple/use-ripple.d.ts +2 -2
- package/dist/types/components/rotate/rotate.d.ts +2 -2
- package/dist/types/components/saturation-slider/saturation-slider.d.ts +2 -2
- package/dist/types/components/saturation-slider/use-saturation-slider.d.ts +2 -2
- package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
- package/dist/types/components/segmented-control/segmented-control.d.ts +2 -2
- package/dist/types/components/segmented-control/segmented-control.style.d.ts +2 -2
- package/dist/types/components/segmented-control/use-segmented-control.d.ts +9 -9
- package/dist/types/components/select/select.d.ts +2 -2
- package/dist/types/components/select/select.style.d.ts +1 -1
- package/dist/types/components/select/use-select.d.ts +4 -4
- package/dist/types/components/separator/separator.d.ts +2 -2
- package/dist/types/components/sidebar/sidebar.d.ts +2 -2
- package/dist/types/components/sidebar/use-sidebar.d.ts +9 -9
- package/dist/types/components/simple-grid/simple-grid.d.ts +2 -2
- package/dist/types/components/skeleton/skeleton.d.ts +2 -2
- package/dist/types/components/slide/slide.d.ts +2 -2
- package/dist/types/components/slide-fade/slide-fade.d.ts +2 -2
- package/dist/types/components/slider/slider.d.ts +2 -2
- package/dist/types/components/slider/use-slider.d.ts +2 -2
- package/dist/types/components/stack/h-stack.d.ts +2 -2
- package/dist/types/components/stack/stack.d.ts +2 -2
- package/dist/types/components/stack/v-stack.d.ts +2 -2
- package/dist/types/components/stack/z-stack.d.ts +2 -2
- package/dist/types/components/stat/stat.d.ts +2 -2
- package/dist/types/components/stat/stat.style.d.ts +2 -2
- package/dist/types/components/status/status.d.ts +2 -2
- package/dist/types/components/steps/steps.d.ts +2 -2
- package/dist/types/components/steps/steps.style.d.ts +1 -1
- package/dist/types/components/steps/use-steps.d.ts +10 -10
- package/dist/types/components/switch/switch.d.ts +2 -2
- package/dist/types/components/table/table.d.ts +2 -2
- package/dist/types/components/tabs/tabs.d.ts +2 -2
- package/dist/types/components/tabs/tabs.style.d.ts +1 -1
- package/dist/types/components/tabs/use-tabs.d.ts +16 -16
- package/dist/types/components/tag/tag.d.ts +2 -2
- package/dist/types/components/tag/tag.style.d.ts +1 -1
- package/dist/types/components/text/text.d.ts +2 -2
- package/dist/types/components/textarea/textarea.d.ts +2 -2
- package/dist/types/components/textarea/use-autosize.d.ts +2 -2
- package/dist/types/components/timeline/timeline.d.ts +5 -5
- package/dist/types/components/timeline/timeline.style.d.ts +1 -1
- package/dist/types/components/toggle/toggle.d.ts +5 -5
- package/dist/types/components/toggle/use-toggle-group.d.ts +2 -2
- package/dist/types/components/toggle/use-toggle.d.ts +2 -2
- package/dist/types/components/tooltip/tooltip.d.ts +2 -2
- package/dist/types/components/tree/tree.d.ts +3 -3
- package/dist/types/components/tree/tree.style.d.ts +1 -1
- package/dist/types/components/tree/use-tree.d.ts +190 -184
- package/dist/types/components/visually-hidden/visually-hidden.d.ts +2 -2
- package/dist/types/components/wrap/wrap.d.ts +2 -2
- package/dist/types/core/components/create-component.d.ts +7 -8
- package/dist/types/core/components/use-component-style.d.ts +0 -1
- package/dist/types/core/components/utils.d.ts +0 -1
- package/dist/types/core/constant.d.ts +0 -1
- package/dist/types/core/css/calc.d.ts +0 -1
- package/dist/types/core/css/config.d.ts +0 -1
- package/dist/types/core/css/css.d.ts +0 -1
- package/dist/types/core/css/index.types.d.ts +0 -1
- package/dist/types/core/css/styles.d.ts +0 -1
- package/dist/types/core/css/token.d.ts +0 -1
- package/dist/types/core/css/use-css.d.ts +0 -1
- package/dist/types/core/css/utils.d.ts +0 -1
- package/dist/types/core/generated-theme-tokens.types.d.ts +0 -1
- package/dist/types/core/index.d.ts +0 -1
- package/dist/types/core/system/color-mode-provider.d.ts +2 -2
- package/dist/types/core/system/storage-script.d.ts +3 -3
- package/dist/types/core/system/styled.d.ts +2 -2
- package/dist/types/core/system/system-provider.d.ts +2 -2
- package/dist/types/core/system/var.d.ts +0 -1
- package/dist/types/hooks/use-breakpoint/use-breakpoint-state.d.ts +2 -2
- package/dist/types/hooks/use-clickable/index.d.ts +2 -2
- package/dist/types/providers/i18n-provider/i18n-provider.d.ts +3 -3
- package/dist/types/providers/ui-provider/ui-provider.d.ts +2 -2
- package/dist/types/utils/children.d.ts +2 -2
- package/package.json +1 -1
|
@@ -183,6 +183,8 @@ const useSidebarItem = ({ asyncChildren, children: childrenProp, defaultOpen, di
|
|
|
183
183
|
onGroupChildren().then(() => {
|
|
184
184
|
onOpen();
|
|
185
185
|
onExpandedChange(value);
|
|
186
|
+
}).catch(() => {
|
|
187
|
+
initialAsyncRef.current = false;
|
|
186
188
|
});
|
|
187
189
|
} else {
|
|
188
190
|
onOpen();
|
|
@@ -217,11 +219,13 @@ const useSidebarItem = ({ asyncChildren, children: childrenProp, defaultOpen, di
|
|
|
217
219
|
onGroupClose,
|
|
218
220
|
onGroupOpen
|
|
219
221
|
]);
|
|
220
|
-
require_effect.
|
|
222
|
+
require_effect.useSafeLayoutEffect(() => {
|
|
221
223
|
if (defaultExpanded) if (async && !initialAsyncRef.current) {
|
|
222
224
|
initialAsyncRef.current = true;
|
|
223
225
|
onGroupChildren().then(() => {
|
|
224
226
|
onOpen();
|
|
227
|
+
}).catch(() => {
|
|
228
|
+
initialAsyncRef.current = false;
|
|
225
229
|
});
|
|
226
230
|
} else onOpen();
|
|
227
231
|
else onClose();
|
|
@@ -266,10 +270,11 @@ const useSidebarItem = ({ asyncChildren, children: childrenProp, defaultOpen, di
|
|
|
266
270
|
const getTriggerProps = (0, react.useCallback)((props = {}) => ({
|
|
267
271
|
"aria-controls": contentId,
|
|
268
272
|
"aria-disabled": (0, require_utils_index.utils_exports.ariaAttr)(disabled),
|
|
273
|
+
"aria-expanded": groupOpen,
|
|
269
274
|
"data-disabled": (0, require_utils_index.utils_exports.dataAttr)(disabled),
|
|
270
275
|
"data-expanded": (0, require_utils_index.utils_exports.dataAttr)(groupOpen),
|
|
271
276
|
"data-selected": (0, require_utils_index.utils_exports.dataAttr)(selected),
|
|
272
|
-
tabIndex: open && expanded ? 0 : -1,
|
|
277
|
+
tabIndex: open && expanded && !disabled ? 0 : -1,
|
|
273
278
|
...props,
|
|
274
279
|
onClick: (0, require_utils_index.utils_exports.handlerAll)(props.onClick, onGroupToggle)
|
|
275
280
|
}), [
|
|
@@ -287,7 +292,7 @@ const useSidebarItem = ({ asyncChildren, children: childrenProp, defaultOpen, di
|
|
|
287
292
|
target: external ? "_blank" : void 0,
|
|
288
293
|
"data-disabled": (0, require_utils_index.utils_exports.dataAttr)(disabled),
|
|
289
294
|
"data-selected": (0, require_utils_index.utils_exports.dataAttr)(selected),
|
|
290
|
-
tabIndex: open && expanded ? 0 : -1,
|
|
295
|
+
tabIndex: open && expanded && !disabled ? 0 : -1,
|
|
291
296
|
...props,
|
|
292
297
|
onClick: (0, require_utils_index.utils_exports.handlerAll)(props.onClick, (ev) => {
|
|
293
298
|
if (!disabled) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-sidebar.cjs","names":["createDescendants","createContext","useI18n","useDisclosure","useControllableState","getRootProps: PropGetter<\"div\">","getTriggerProps: PropGetter<\"button\">","getSidePanelProps: PropGetter<\"aside\">","getHeaderProps: PropGetter<\"header\">","getFooterProps: PropGetter<\"footer\">","useEnvironment","getRootProps: PropGetter<\"li\">","mergeRefs","getLabelProps: PropGetter<\"span\">","useIds","Children","branchOpen: boolean[]","useAsyncCallback","getItemProps: PropGetter<\"li\">","getIndicatorProps: PropGetter<\"svg\">","getLinkProps: PropGetter<\"a\">"],"sources":["../../../../src/components/sidebar/use-sidebar.ts"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode, RefObject } from \"react\"\nimport { Children, useCallback, useId, useRef, useState } from \"react\"\nimport { type HTMLProps, type PropGetter, useEnvironment } from \"../../core\"\nimport { useAsyncCallback } from \"../../hooks/use-async-callback\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport {\n useDisclosure,\n type UseDisclosureProps,\n} from \"../../hooks/use-disclosure\"\nimport { useWindowEvent } from \"../../hooks/use-window-event\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n mergeRefs,\n setAttribute,\n useIds,\n useSafeLayoutEffect,\n useUpdateEffect,\n} from \"../../utils\"\n\nexport interface SidebarControl {\n collapse: () => void\n expand: () => void\n}\n\ninterface SidebarDescendantProps {\n expanded: boolean\n group: boolean\n id: string\n value: string\n}\n\nconst {\n DescendantsContext: SidebarDescendantsContext,\n useDescendant: useSidebarDescendant,\n useDescendants: useSidebarDescendants,\n} = createDescendants<HTMLElement, SidebarDescendantProps>()\n\nexport {\n SidebarDescendantsContext,\n useSidebarDescendant,\n useSidebarDescendants,\n}\n\ninterface SidebarContext extends Pick<\n UseSidebarReturn,\n | \"expandedValue\"\n | \"mobile\"\n | \"onClose\"\n | \"onExpandedChange\"\n | \"onOpen\"\n | \"onSelectedChange\"\n | \"onToggle\"\n | \"open\"\n | \"selectedValue\"\n> {}\n\nconst [SidebarContext, useSidebarContext] = createContext<SidebarContext>({\n name: \"SidebarContext\",\n})\n\nexport { SidebarContext, useSidebarContext }\n\ninterface SidebarItemContext extends Pick<\n UseSidebarItemReturn,\n \"branchOpen\" | \"groupOpen\"\n> {}\n\nconst [SidebarItemContext, useSidebarItemContext] =\n createContext<SidebarItemContext>({\n name: \"SidebarItemContext\",\n strict: false,\n })\n\nexport { SidebarItemContext, useSidebarItemContext }\n\nexport interface UseSidebarProps extends HTMLProps<\"div\"> {\n /**\n * Ref of the sidebar callbacks.\n */\n controlRef?: RefObject<null | SidebarControl>\n /**\n * The initial expanded value of the sidebar.\n */\n defaultExpandedValue?: string[]\n /**\n * The initial selected value of the sidebar.\n */\n defaultSelectedValue?: string\n /**\n * The disclosure props for the desktop and mobile.\n */\n disclosure?: {\n desktop?: Omit<UseDisclosureProps, \"timing\">\n mobile?: Omit<UseDisclosureProps, \"timing\">\n }\n /**\n * The expanded value of the sidebar.\n */\n expandedValue?: string[]\n /**\n * If `true`, the trigger click event will be switched to mobile.\n *\n * @default false\n */\n mobile?: boolean\n /**\n * The selected value of the sidebar.\n */\n selectedValue?: string\n /**\n * The callback invoked when expanded value changes.\n */\n onExpandedChange?: (value: string[]) => void\n /**\n * The callback invoked when selected value changes.\n */\n onSelectedChange?: (value: string) => void\n}\n\nexport const useSidebar = ({\n controlRef,\n defaultExpandedValue = [],\n defaultSelectedValue,\n disclosure,\n expandedValue: expandedValueProp,\n mobile = false,\n selectedValue: selectedValueProp,\n onExpandedChange: onExpandedChangeProp,\n onSelectedChange: onSelectedChangeProp,\n ...rest\n}: UseSidebarProps = {}) => {\n const { t } = useI18n(\"sidebar\")\n const desktopDisclosure = useDisclosure({\n defaultOpen: disclosure?.desktop?.defaultOpen ?? true,\n open: disclosure?.desktop?.open,\n onClose: disclosure?.desktop?.onClose,\n onOpen: disclosure?.desktop?.onOpen,\n })\n const mobileDisclosure = useDisclosure({\n defaultOpen: disclosure?.mobile?.defaultOpen ?? false,\n open: disclosure?.mobile?.open,\n onClose: disclosure?.mobile?.onClose,\n onOpen: disclosure?.mobile?.onOpen,\n })\n const [selectedValue, setSelectedValue] = useControllableState({\n defaultValue: defaultSelectedValue,\n value: selectedValueProp,\n onChange: onSelectedChangeProp,\n })\n const [expandedValue, setExpandedValue] = useControllableState({\n defaultValue: defaultExpandedValue,\n value: expandedValueProp,\n onChange: onExpandedChangeProp,\n })\n const descendants = useSidebarDescendants()\n const open = mobile ? mobileDisclosure.open : desktopDisclosure.open\n const onOpen = mobile ? mobileDisclosure.onOpen : desktopDisclosure.onOpen\n const onClose = mobile ? mobileDisclosure.onClose : desktopDisclosure.onClose\n const onToggle = mobile\n ? mobileDisclosure.onToggle\n : desktopDisclosure.onToggle\n\n const onSelectedChange = useCallback(\n (value: string) => {\n setSelectedValue(value)\n },\n [setSelectedValue],\n )\n\n const onExpandAll = useCallback(() => {\n const values = descendants.enabledValues()\n const group = values.filter(({ group }) => group)\n const value = group.map(({ value }) => value)\n\n setExpandedValue(value)\n }, [descendants, setExpandedValue])\n\n const onCollapseAll = useCallback(() => {\n setExpandedValue([])\n }, [setExpandedValue])\n\n const onExpandedChange = useCallback(\n (value: string) => {\n setExpandedValue((prev) => {\n if (prev.includes(value)) {\n return prev.filter((prevValue) => prevValue !== value)\n } else {\n return [...prev, value]\n }\n })\n },\n [setExpandedValue],\n )\n\n assignRef(controlRef, { collapse: onCollapseAll, expand: onExpandAll })\n\n useWindowEvent(\"keydown\", (ev) => {\n if (ev.key !== \"b\") return\n if (!ev.metaKey && !ev.ctrlKey) return\n\n ev.preventDefault()\n\n desktopDisclosure.onToggle()\n })\n\n const getRootProps: PropGetter<\"div\"> = useCallback(\n (props = {}) => ({\n \"data-expanded\": dataAttr(open),\n ...rest,\n ...props,\n }),\n [open, rest],\n )\n\n const getTriggerProps: PropGetter<\"button\"> = useCallback(\n (props = {}) => ({\n \"aria-expanded\": open,\n \"aria-label\": t(open ? \"Close sidebar\" : \"Open sidebar\"),\n ...props,\n onClick: handlerAll(props.onClick, onToggle),\n }),\n [open, t, onToggle],\n )\n\n const getSidePanelProps: PropGetter<\"aside\"> = useCallback(\n (props = {}) => ({ \"data-expanded\": dataAttr(open), ...props }),\n [open],\n )\n\n const getHeaderProps: PropGetter<\"header\"> = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getFooterProps: PropGetter<\"footer\"> = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getContentProps: PropGetter<\"ul\"> = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n return {\n descendants,\n expandedValue,\n mobile,\n open,\n selectedValue,\n getContentProps,\n getFooterProps,\n getHeaderProps,\n getRootProps,\n getSidePanelProps,\n getTriggerProps,\n onClose,\n onExpandedChange,\n onOpen,\n onSelectedChange,\n onToggle,\n }\n}\n\nexport type UseSidebarReturn = ReturnType<typeof useSidebar>\n\nexport interface UseSidebarGroupProps extends HTMLProps<\"li\"> {}\n\nexport const useSidebarGroup = ({ ...rest }: UseSidebarGroupProps = {}) => {\n const { getDocument } = useEnvironment()\n const rootRef = useRef<HTMLLIElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const labelId = useId()\n\n useSafeLayoutEffect(() => {\n const el = getDocument()?.getElementById(labelId)\n\n if (!el) return\n\n if (rootRef.current)\n setAttribute(rootRef.current, \"aria-labelledby\", labelId)\n if (contentRef.current)\n setAttribute(contentRef.current, \"aria-labelledby\", labelId)\n }, [])\n\n const getRootProps: PropGetter<\"li\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n ref: mergeRefs(ref, rootRef),\n ...rest,\n ...props,\n }),\n [rest],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props = {}) => ({ id: labelId, ...props }),\n [labelId],\n )\n\n const getContentProps: PropGetter<\"div\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n ref: mergeRefs(ref, contentRef),\n ...props,\n }),\n [],\n )\n\n return { getContentProps, getLabelProps, getRootProps }\n}\n\nexport type UseSidebarGroupReturn = ReturnType<typeof useSidebarGroup>\n\nexport interface UseSidebarItemProps\n extends HTMLProps<\"li\">, Omit<UseDisclosureProps, \"timing\"> {\n /**\n * The value of the item.\n */\n value: string\n /**\n * If `true`, the tree item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * If `true`, the link will open in new tab.\n *\n * @default false\n */\n external?: boolean\n /**\n * If provided, the sidebar item will be rendered as an async sidebar item.\n */\n asyncChildren?: () => Promise<ReactNode>\n}\n\nexport const useSidebarItem = ({\n asyncChildren,\n children: childrenProp,\n defaultOpen,\n disabled = false,\n external,\n open: openProp,\n value,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n ...rest\n}: UseSidebarItemProps) => {\n const context = useSidebarItemContext()\n const {\n expandedValue,\n open,\n selectedValue,\n onExpandedChange,\n onSelectedChange,\n } = useSidebarContext()\n const [children, setChildren] = useState<ReactNode>(childrenProp)\n const [itemId, labelId, contentId] = useIds()\n const initialAsyncRef = useRef(false)\n const async = !!asyncChildren\n const group = async || Children.count(children) > 0\n const nested = !!context\n const selected = !!value && selectedValue === value\n const defaultExpanded = !!value && expandedValue.includes(value)\n const {\n open: groupOpen,\n onClose,\n onOpen,\n } = useDisclosure({\n defaultOpen: defaultOpen ?? defaultExpanded,\n open: openProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n })\n const branchOpen: boolean[] = nested\n ? [...context.branchOpen, groupOpen]\n : [groupOpen]\n const expanded = branchOpen.slice(0, -1).every(Boolean)\n const { register } = useSidebarDescendant({\n id: itemId!,\n disabled,\n expanded,\n group,\n value,\n })\n\n const [groupLoading, onGroupChildren] = useAsyncCallback(async () => {\n const children = await asyncChildren?.()\n\n setChildren(children)\n }, [asyncChildren])\n\n const onGroupOpen = useCallback(() => {\n if (disabled || !group || !value || groupLoading) return\n\n if (async && !initialAsyncRef.current) {\n initialAsyncRef.current = true\n\n onGroupChildren().then(() => {\n onOpen()\n onExpandedChange(value)\n })\n } else {\n onOpen()\n onExpandedChange(value)\n }\n }, [\n disabled,\n group,\n value,\n groupLoading,\n async,\n onGroupChildren,\n onOpen,\n onExpandedChange,\n ])\n\n const onGroupClose = useCallback(() => {\n if (disabled || !group || !value) return\n\n onClose()\n onExpandedChange(value)\n }, [disabled, group, value, onClose, onExpandedChange])\n\n const onGroupToggle = useCallback(() => {\n if (groupOpen) {\n onGroupClose()\n } else {\n onGroupOpen()\n }\n }, [groupOpen, onGroupClose, onGroupOpen])\n\n useUpdateEffect(() => {\n if (defaultExpanded) {\n if (async && !initialAsyncRef.current) {\n initialAsyncRef.current = true\n\n onGroupChildren().then(() => {\n onOpen()\n })\n } else {\n onOpen()\n }\n } else {\n onClose()\n }\n }, [defaultExpanded])\n\n const getItemProps: PropGetter<\"li\"> = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: itemId,\n ref: mergeRefs(ref, register),\n \"aria-current\": selected ? \"page\" : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-disabled\": dataAttr(disabled),\n \"data-selected\": dataAttr(selected),\n ...rest,\n ...props,\n onClick: handlerAll(\n props.onClick,\n !group ? () => onSelectedChange(value) : undefined,\n ),\n }),\n [\n itemId,\n register,\n selected,\n disabled,\n labelId,\n rest,\n group,\n onSelectedChange,\n value,\n ],\n )\n\n const getIndicatorProps: PropGetter<\"svg\"> = useCallback(\n (props) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": groupOpen,\n \"aria-hidden\": true,\n \"data-disabled\": dataAttr(disabled),\n \"data-loading\": dataAttr(groupLoading),\n \"data-selected\": dataAttr(selected),\n role: \"presentation\",\n ...props,\n }),\n [disabled, groupOpen, groupLoading, selected],\n )\n\n const getTriggerProps: PropGetter<\"button\"> = useCallback(\n (props = {}) => ({\n \"aria-controls\": contentId,\n \"aria-disabled\": ariaAttr(disabled),\n \"data-disabled\": dataAttr(disabled),\n \"data-expanded\": dataAttr(groupOpen),\n \"data-selected\": dataAttr(selected),\n tabIndex: open && expanded ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onGroupToggle),\n }),\n [contentId, disabled, groupOpen, selected, open, expanded, onGroupToggle],\n )\n\n const getLinkProps: PropGetter<\"a\"> = useCallback(\n (props = {}) => ({\n href: value,\n rel: external ? \"noopener\" : undefined,\n target: external ? \"_blank\" : undefined,\n \"data-disabled\": dataAttr(disabled),\n \"data-selected\": dataAttr(selected),\n tabIndex: open && expanded ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, (ev) => {\n if (!disabled) return\n\n ev.preventDefault()\n ev.stopPropagation()\n }),\n }),\n [disabled, expanded, external, open, selected, value],\n )\n\n const getContentProps: PropGetter<\"ul\"> = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: contentId,\n \"aria-busy\": ariaAttr(groupLoading),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-disabled\": dataAttr(disabled),\n ...props,\n }),\n [contentId, labelId, disabled, groupLoading],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props = {}) => ({ id: labelId, ...props }),\n [labelId],\n )\n\n return {\n branchOpen,\n children,\n disabled,\n expanded,\n expandedValue,\n group,\n groupLoading,\n groupOpen,\n open,\n selected,\n selectedValue,\n value,\n getContentProps,\n getIndicatorProps,\n getItemProps,\n getLabelProps,\n getLinkProps,\n getTriggerProps,\n onExpandedChange,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n onSelectedChange,\n }\n}\n\nexport type UseSidebarItemReturn = ReturnType<typeof useSidebarItem>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-sidebar.cjs","names":["createDescendants","createContext","useI18n","useDisclosure","useControllableState","getRootProps: PropGetter<\"div\">","getTriggerProps: PropGetter<\"button\">","getSidePanelProps: PropGetter<\"aside\">","getHeaderProps: PropGetter<\"header\">","getFooterProps: PropGetter<\"footer\">","useEnvironment","getRootProps: PropGetter<\"li\">","mergeRefs","getLabelProps: PropGetter<\"span\">","useIds","Children","branchOpen: boolean[]","useAsyncCallback","getItemProps: PropGetter<\"li\">","getIndicatorProps: PropGetter<\"svg\">","getLinkProps: PropGetter<\"a\">"],"sources":["../../../../src/components/sidebar/use-sidebar.ts"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode, RefObject } from \"react\"\nimport { Children, useCallback, useId, useRef, useState } from \"react\"\nimport { type HTMLProps, type PropGetter, useEnvironment } from \"../../core\"\nimport { useAsyncCallback } from \"../../hooks/use-async-callback\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport {\n useDisclosure,\n type UseDisclosureProps,\n} from \"../../hooks/use-disclosure\"\nimport { useWindowEvent } from \"../../hooks/use-window-event\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n handlerAll,\n mergeRefs,\n setAttribute,\n useIds,\n useSafeLayoutEffect,\n} from \"../../utils\"\n\nexport interface SidebarControl {\n collapse: () => void\n expand: () => void\n}\n\ninterface SidebarDescendantProps {\n expanded: boolean\n group: boolean\n id: string\n value: string\n}\n\nconst {\n DescendantsContext: SidebarDescendantsContext,\n useDescendant: useSidebarDescendant,\n useDescendants: useSidebarDescendants,\n} = createDescendants<HTMLElement, SidebarDescendantProps>()\n\nexport {\n SidebarDescendantsContext,\n useSidebarDescendant,\n useSidebarDescendants,\n}\n\ninterface SidebarContext extends Pick<\n UseSidebarReturn,\n | \"expandedValue\"\n | \"mobile\"\n | \"onClose\"\n | \"onExpandedChange\"\n | \"onOpen\"\n | \"onSelectedChange\"\n | \"onToggle\"\n | \"open\"\n | \"selectedValue\"\n> {}\n\nconst [SidebarContext, useSidebarContext] = createContext<SidebarContext>({\n name: \"SidebarContext\",\n})\n\nexport { SidebarContext, useSidebarContext }\n\ninterface SidebarItemContext extends Pick<\n UseSidebarItemReturn,\n \"branchOpen\" | \"groupOpen\"\n> {}\n\nconst [SidebarItemContext, useSidebarItemContext] =\n createContext<SidebarItemContext>({\n name: \"SidebarItemContext\",\n strict: false,\n })\n\nexport { SidebarItemContext, useSidebarItemContext }\n\nexport interface UseSidebarProps extends HTMLProps<\"div\"> {\n /**\n * Ref of the sidebar callbacks.\n */\n controlRef?: RefObject<null | SidebarControl>\n /**\n * The initial expanded value of the sidebar.\n */\n defaultExpandedValue?: string[]\n /**\n * The initial selected value of the sidebar.\n */\n defaultSelectedValue?: string\n /**\n * The disclosure props for the desktop and mobile.\n */\n disclosure?: {\n desktop?: Omit<UseDisclosureProps, \"timing\">\n mobile?: Omit<UseDisclosureProps, \"timing\">\n }\n /**\n * The expanded value of the sidebar.\n */\n expandedValue?: string[]\n /**\n * If `true`, the trigger click event will be switched to mobile.\n *\n * @default false\n */\n mobile?: boolean\n /**\n * The selected value of the sidebar.\n */\n selectedValue?: string\n /**\n * The callback invoked when expanded value changes.\n */\n onExpandedChange?: (value: string[]) => void\n /**\n * The callback invoked when selected value changes.\n */\n onSelectedChange?: (value: string) => void\n}\n\nexport const useSidebar = ({\n controlRef,\n defaultExpandedValue = [],\n defaultSelectedValue,\n disclosure,\n expandedValue: expandedValueProp,\n mobile = false,\n selectedValue: selectedValueProp,\n onExpandedChange: onExpandedChangeProp,\n onSelectedChange: onSelectedChangeProp,\n ...rest\n}: UseSidebarProps = {}) => {\n const { t } = useI18n(\"sidebar\")\n const desktopDisclosure = useDisclosure({\n defaultOpen: disclosure?.desktop?.defaultOpen ?? true,\n open: disclosure?.desktop?.open,\n onClose: disclosure?.desktop?.onClose,\n onOpen: disclosure?.desktop?.onOpen,\n })\n const mobileDisclosure = useDisclosure({\n defaultOpen: disclosure?.mobile?.defaultOpen ?? false,\n open: disclosure?.mobile?.open,\n onClose: disclosure?.mobile?.onClose,\n onOpen: disclosure?.mobile?.onOpen,\n })\n const [selectedValue, setSelectedValue] = useControllableState({\n defaultValue: defaultSelectedValue,\n value: selectedValueProp,\n onChange: onSelectedChangeProp,\n })\n const [expandedValue, setExpandedValue] = useControllableState({\n defaultValue: defaultExpandedValue,\n value: expandedValueProp,\n onChange: onExpandedChangeProp,\n })\n const descendants = useSidebarDescendants()\n const open = mobile ? mobileDisclosure.open : desktopDisclosure.open\n const onOpen = mobile ? mobileDisclosure.onOpen : desktopDisclosure.onOpen\n const onClose = mobile ? mobileDisclosure.onClose : desktopDisclosure.onClose\n const onToggle = mobile\n ? mobileDisclosure.onToggle\n : desktopDisclosure.onToggle\n\n const onSelectedChange = useCallback(\n (value: string) => {\n setSelectedValue(value)\n },\n [setSelectedValue],\n )\n\n const onExpandAll = useCallback(() => {\n const values = descendants.enabledValues()\n const group = values.filter(({ group }) => group)\n const value = group.map(({ value }) => value)\n\n setExpandedValue(value)\n }, [descendants, setExpandedValue])\n\n const onCollapseAll = useCallback(() => {\n setExpandedValue([])\n }, [setExpandedValue])\n\n const onExpandedChange = useCallback(\n (value: string) => {\n setExpandedValue((prev) => {\n if (prev.includes(value)) {\n return prev.filter((prevValue) => prevValue !== value)\n } else {\n return [...prev, value]\n }\n })\n },\n [setExpandedValue],\n )\n\n assignRef(controlRef, { collapse: onCollapseAll, expand: onExpandAll })\n\n useWindowEvent(\"keydown\", (ev) => {\n if (ev.key !== \"b\") return\n if (!ev.metaKey && !ev.ctrlKey) return\n\n ev.preventDefault()\n\n desktopDisclosure.onToggle()\n })\n\n const getRootProps: PropGetter<\"div\"> = useCallback(\n (props = {}) => ({\n \"data-expanded\": dataAttr(open),\n ...rest,\n ...props,\n }),\n [open, rest],\n )\n\n const getTriggerProps: PropGetter<\"button\"> = useCallback(\n (props = {}) => ({\n \"aria-expanded\": open,\n \"aria-label\": t(open ? \"Close sidebar\" : \"Open sidebar\"),\n ...props,\n onClick: handlerAll(props.onClick, onToggle),\n }),\n [open, t, onToggle],\n )\n\n const getSidePanelProps: PropGetter<\"aside\"> = useCallback(\n (props = {}) => ({ \"data-expanded\": dataAttr(open), ...props }),\n [open],\n )\n\n const getHeaderProps: PropGetter<\"header\"> = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getFooterProps: PropGetter<\"footer\"> = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getContentProps: PropGetter<\"ul\"> = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n return {\n descendants,\n expandedValue,\n mobile,\n open,\n selectedValue,\n getContentProps,\n getFooterProps,\n getHeaderProps,\n getRootProps,\n getSidePanelProps,\n getTriggerProps,\n onClose,\n onExpandedChange,\n onOpen,\n onSelectedChange,\n onToggle,\n }\n}\n\nexport type UseSidebarReturn = ReturnType<typeof useSidebar>\n\nexport interface UseSidebarGroupProps extends HTMLProps<\"li\"> {}\n\nexport const useSidebarGroup = ({ ...rest }: UseSidebarGroupProps = {}) => {\n const { getDocument } = useEnvironment()\n const rootRef = useRef<HTMLLIElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const labelId = useId()\n\n useSafeLayoutEffect(() => {\n const el = getDocument()?.getElementById(labelId)\n\n if (!el) return\n\n if (rootRef.current)\n setAttribute(rootRef.current, \"aria-labelledby\", labelId)\n if (contentRef.current)\n setAttribute(contentRef.current, \"aria-labelledby\", labelId)\n }, [])\n\n const getRootProps: PropGetter<\"li\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n ref: mergeRefs(ref, rootRef),\n ...rest,\n ...props,\n }),\n [rest],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props = {}) => ({ id: labelId, ...props }),\n [labelId],\n )\n\n const getContentProps: PropGetter<\"div\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n ref: mergeRefs(ref, contentRef),\n ...props,\n }),\n [],\n )\n\n return { getContentProps, getLabelProps, getRootProps }\n}\n\nexport type UseSidebarGroupReturn = ReturnType<typeof useSidebarGroup>\n\nexport interface UseSidebarItemProps\n extends HTMLProps<\"li\">, Omit<UseDisclosureProps, \"timing\"> {\n /**\n * The value of the item.\n */\n value: string\n /**\n * If `true`, the tree item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * If `true`, the link will open in new tab.\n *\n * @default false\n */\n external?: boolean\n /**\n * If provided, the sidebar item will be rendered as an async sidebar item.\n */\n asyncChildren?: () => Promise<ReactNode>\n}\n\nexport const useSidebarItem = ({\n asyncChildren,\n children: childrenProp,\n defaultOpen,\n disabled = false,\n external,\n open: openProp,\n value,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n ...rest\n}: UseSidebarItemProps) => {\n const context = useSidebarItemContext()\n const {\n expandedValue,\n open,\n selectedValue,\n onExpandedChange,\n onSelectedChange,\n } = useSidebarContext()\n const [children, setChildren] = useState<ReactNode>(childrenProp)\n const [itemId, labelId, contentId] = useIds()\n const initialAsyncRef = useRef(false)\n const async = !!asyncChildren\n const group = async || Children.count(children) > 0\n const nested = !!context\n const selected = !!value && selectedValue === value\n const defaultExpanded = !!value && expandedValue.includes(value)\n const {\n open: groupOpen,\n onClose,\n onOpen,\n } = useDisclosure({\n defaultOpen: defaultOpen ?? defaultExpanded,\n open: openProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n })\n const branchOpen: boolean[] = nested\n ? [...context.branchOpen, groupOpen]\n : [groupOpen]\n const expanded = branchOpen.slice(0, -1).every(Boolean)\n const { register } = useSidebarDescendant({\n id: itemId!,\n disabled,\n expanded,\n group,\n value,\n })\n\n const [groupLoading, onGroupChildren] = useAsyncCallback(async () => {\n const children = await asyncChildren?.()\n\n setChildren(children)\n }, [asyncChildren])\n\n const onGroupOpen = useCallback(() => {\n if (disabled || !group || !value || groupLoading) return\n\n if (async && !initialAsyncRef.current) {\n initialAsyncRef.current = true\n\n onGroupChildren()\n .then(() => {\n onOpen()\n onExpandedChange(value)\n })\n .catch(() => {\n initialAsyncRef.current = false\n })\n } else {\n onOpen()\n onExpandedChange(value)\n }\n }, [\n disabled,\n group,\n value,\n groupLoading,\n async,\n onGroupChildren,\n onOpen,\n onExpandedChange,\n ])\n\n const onGroupClose = useCallback(() => {\n if (disabled || !group || !value) return\n\n onClose()\n onExpandedChange(value)\n }, [disabled, group, value, onClose, onExpandedChange])\n\n const onGroupToggle = useCallback(() => {\n if (groupOpen) {\n onGroupClose()\n } else {\n onGroupOpen()\n }\n }, [groupOpen, onGroupClose, onGroupOpen])\n\n useSafeLayoutEffect(() => {\n if (defaultExpanded) {\n if (async && !initialAsyncRef.current) {\n initialAsyncRef.current = true\n\n onGroupChildren()\n .then(() => {\n onOpen()\n })\n .catch(() => {\n initialAsyncRef.current = false\n })\n } else {\n onOpen()\n }\n } else {\n onClose()\n }\n }, [defaultExpanded])\n\n const getItemProps: PropGetter<\"li\"> = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: itemId,\n ref: mergeRefs(ref, register),\n \"aria-current\": selected ? \"page\" : undefined,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-disabled\": dataAttr(disabled),\n \"data-selected\": dataAttr(selected),\n ...rest,\n ...props,\n onClick: handlerAll(\n props.onClick,\n !group ? () => onSelectedChange(value) : undefined,\n ),\n }),\n [\n itemId,\n register,\n selected,\n disabled,\n labelId,\n rest,\n group,\n onSelectedChange,\n value,\n ],\n )\n\n const getIndicatorProps: PropGetter<\"svg\"> = useCallback(\n (props) => ({\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": groupOpen,\n \"aria-hidden\": true,\n \"data-disabled\": dataAttr(disabled),\n \"data-loading\": dataAttr(groupLoading),\n \"data-selected\": dataAttr(selected),\n role: \"presentation\",\n ...props,\n }),\n [disabled, groupOpen, groupLoading, selected],\n )\n\n const getTriggerProps: PropGetter<\"button\"> = useCallback(\n (props = {}) => ({\n \"aria-controls\": contentId,\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-expanded\": groupOpen,\n \"data-disabled\": dataAttr(disabled),\n \"data-expanded\": dataAttr(groupOpen),\n \"data-selected\": dataAttr(selected),\n tabIndex: open && expanded && !disabled ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onGroupToggle),\n }),\n [contentId, disabled, groupOpen, selected, open, expanded, onGroupToggle],\n )\n\n const getLinkProps: PropGetter<\"a\"> = useCallback(\n (props = {}) => ({\n href: value,\n rel: external ? \"noopener\" : undefined,\n target: external ? \"_blank\" : undefined,\n \"data-disabled\": dataAttr(disabled),\n \"data-selected\": dataAttr(selected),\n tabIndex: open && expanded && !disabled ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, (ev) => {\n if (!disabled) return\n\n ev.preventDefault()\n ev.stopPropagation()\n }),\n }),\n [disabled, expanded, external, open, selected, value],\n )\n\n const getContentProps: PropGetter<\"ul\"> = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: contentId,\n \"aria-busy\": ariaAttr(groupLoading),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-disabled\": dataAttr(disabled),\n ...props,\n }),\n [contentId, labelId, disabled, groupLoading],\n )\n\n const getLabelProps: PropGetter<\"span\"> = useCallback(\n (props = {}) => ({ id: labelId, ...props }),\n [labelId],\n )\n\n return {\n branchOpen,\n children,\n disabled,\n expanded,\n expandedValue,\n group,\n groupLoading,\n groupOpen,\n open,\n selected,\n selectedValue,\n value,\n getContentProps,\n getIndicatorProps,\n getItemProps,\n getLabelProps,\n getLinkProps,\n getTriggerProps,\n onExpandedChange,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n onSelectedChange,\n }\n}\n\nexport type UseSidebarItemReturn = ReturnType<typeof useSidebarItem>\n"],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
22
22
|
//#region src/components/tree/tree.tsx
|
|
23
23
|
const recursiveTreeItem = (items) => {
|
|
24
24
|
return items?.map((props, index) => {
|
|
25
|
-
const key = props.value || ((0, require_utils_index.utils_exports.isString)(props.label) ? props.label : index);
|
|
25
|
+
const key = props.value || ((0, require_utils_index.utils_exports.isString)(props.label) ? `${props.label}-${index}` : index);
|
|
26
26
|
if ("children" in props) {
|
|
27
27
|
const { children, ...rest } = props;
|
|
28
28
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TreeItem, {
|
|
@@ -123,7 +123,7 @@ const TreeRoot = withProvider(({ size, animated, children, endElement, indicator
|
|
|
123
123
|
})
|
|
124
124
|
});
|
|
125
125
|
}, "root", { transferProps: ["size"] })();
|
|
126
|
-
const TreeItem = withContext(({ className, css, colorScheme, animated: animatedProp, asyncChildren: asyncChildrenProp, endElement, indicator: indicatorProp, label, loadingScheme, startElement, value: valueProp = (0, require_utils_index.utils_exports.isString)(label) ? label : void 0, checkboxProps, endElementProps, groupProps, indicatorProps, labelProps, rootProps, startElementProps, ...rest }) => {
|
|
126
|
+
const TreeItem = withContext(({ className, css, colorScheme, animated: animatedProp, asyncChildren: asyncChildrenProp, endElement, indicator: indicatorProp, label, loadingScheme, query, startElement, value: valueProp = (0, require_utils_index.utils_exports.isString)(label) ? label : void 0, checkboxProps, endElementProps, groupProps, indicatorProps, labelProps, rootProps, startElementProps, ...rest }) => {
|
|
127
127
|
const { checkable } = require_use_tree.useTreeContext();
|
|
128
128
|
const componentContext = useComponentContext();
|
|
129
129
|
const Loading = require_use_loading_component.useLoadingComponent(loadingScheme ?? componentContext.loadingScheme ?? "oval");
|
|
@@ -140,6 +140,7 @@ const TreeItem = withContext(({ className, css, colorScheme, animated: animatedP
|
|
|
140
140
|
...componentContext.itemProps,
|
|
141
141
|
...rest,
|
|
142
142
|
asyncChildren: asyncChildrenProp ? asyncChildren : void 0,
|
|
143
|
+
query: query ?? ((0, require_utils_index.utils_exports.isString)(label) ? label : void 0),
|
|
143
144
|
value: valueProp
|
|
144
145
|
});
|
|
145
146
|
const itemProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.cjs","names":["createContext","createSlotComponent","treeStyle","useTree","TreeDescendantsContext","TreeContext","styled","useTreeContext","useLoadingComponent","useTreeItem","TreeItemContext","Collapse","ChevronRightIcon","Children","Checkbox"],"sources":["../../../../src/components/tree/tree.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactElement, ReactNode } from \"react\"\nimport type {\n GenericsComponent,\n HTMLProps,\n HTMLStyledProps,\n ThemeProps,\n} from \"../../core\"\nimport type { CheckboxProps } from \"../checkbox\"\nimport type { CollapseProps } from \"../collapse\"\nimport type { Loading } from \"../loading\"\nimport type { WithTransitionProps } from \"../motion\"\nimport type { TreeStyle } from \"./tree.style\"\nimport type { UseTreeItemProps, UseTreeProps } from \"./use-tree\"\nimport {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useMemo,\n} from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport {\n cast,\n createContext,\n dataAttr,\n isObject,\n isString,\n type ReactNodeOrFunction,\n runIfFn,\n} from \"../../utils\"\nimport { Checkbox } from \"../checkbox\"\nimport { Collapse } from \"../collapse\"\nimport { ChevronRightIcon } from \"../icon\"\nimport { useLoadingComponent } from \"../loading\"\nimport { treeStyle } from \"./tree.style\"\nimport {\n TreeContext,\n TreeDescendantsContext,\n TreeItemContext,\n useTree,\n useTreeContext,\n useTreeItem,\n} from \"./use-tree\"\n\ninterface TreeCallBackProps {\n disabled?: boolean\n expanded?: boolean\n}\n\ntype TreeItemReactNode =\n | ReactNodeOrFunction<TreeCallBackProps>\n | {\n group: ReactNodeOrFunction<TreeCallBackProps>\n item?: ReactNodeOrFunction<TreeCallBackProps>\n }\n | {\n item: ReactNodeOrFunction<TreeCallBackProps>\n group?: ReactNodeOrFunction<TreeCallBackProps>\n }\n\ninterface TreeItemWithValue extends Omit<TreeItemProps, \"children\"> {}\n\ninterface TreeItemWithChildren extends TreeItemWithValue {\n children: TreeItem[]\n}\n\nexport type TreeItem = TreeItemWithChildren | TreeItemWithValue\n\nconst recursiveTreeItem = (items?: TreeItem[]) => {\n return items?.map((props, index) => {\n const key = props.value || (isString(props.label) ? props.label : index)\n\n if (\"children\" in props) {\n const { children, ...rest } = props\n\n return (\n <TreeItem key={key} {...rest}>\n {recursiveTreeItem(children)}\n </TreeItem>\n )\n } else {\n return <TreeItem key={key} {...props} />\n }\n })\n}\n\nconst getReactNodeOrFunction = (\n type: \"group\" | \"item\",\n custom?: TreeItemReactNode,\n root?: TreeItemReactNode,\n): ReactNodeOrFunction<TreeCallBackProps> => {\n if (isObject(custom) && (\"group\" in custom || \"item\" in custom)) {\n return custom[type]\n } else if (custom) {\n return custom\n } else if (isObject(root) && (\"group\" in root || \"item\" in root)) {\n return root[type]\n } else {\n return root\n }\n}\n\ninterface ComponentContext extends Pick<\n TreeRootProps,\n | \"animated\"\n | \"checkboxProps\"\n | \"endElement\"\n | \"endElementProps\"\n | \"groupProps\"\n | \"indicator\"\n | \"indicatorHidden\"\n | \"indicatorProps\"\n | \"itemProps\"\n | \"labelProps\"\n | \"loadingScheme\"\n | \"size\"\n | \"startElement\"\n | \"startElementProps\"\n> {}\n\ninterface ItemComponentContext {\n checkboxProps: TreeCheckboxProps\n endElementProps: TreeEndElementProps\n indicatorProps: TreeIndicatorProps\n labelProps: TreeLabelProps\n startElementProps: TreeStartElementProps\n}\n\nconst [ItemComponentContext, useItemComponentContext] =\n createContext<ItemComponentContext>({ name: \"ItemComponentContext\" })\n\nexport interface TreeRootProps<Multiple extends boolean = false>\n extends\n HTMLStyledProps<\"ul\">,\n ThemeProps<TreeStyle>,\n UseTreeProps<Multiple>,\n Pick<\n TreeItemProps,\n | \"animated\"\n | \"checkboxProps\"\n | \"endElement\"\n | \"endElementProps\"\n | \"groupProps\"\n | \"indicator\"\n | \"indicatorProps\"\n | \"labelProps\"\n | \"loadingScheme\"\n | \"startElement\"\n | \"startElementProps\"\n > {\n /**\n * If `true`, hide the tree indicator icon for all items.\n *\n * @default false\n */\n indicatorHidden?: boolean\n /**\n * If provided, generate elements based on items.\n */\n items?: TreeItem[]\n /**\n * Props for the item component.\n */\n itemProps?: Omit<TreeItemProps, \"children\" | \"label\" | \"open\" | \"value\">\n}\n\nconst {\n ComponentContext,\n PropsContext: TreePropsContext,\n useComponentContext,\n usePropsContext: useTreePropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<TreeRootProps, TreeStyle, ComponentContext>(\n \"tree\",\n treeStyle,\n)\n\nexport { TreePropsContext, useTreePropsContext }\n\n/**\n * `Tree` is a component used to display hierarchical data structures in an expandable tree format.\n *\n * @see https://yamada-ui.com/docs/components/tree\n */\nexport const TreeRoot = withProvider<\"ul\", TreeRootProps, \"size\">(\n <Multiple extends boolean = false>({\n size,\n animated,\n children,\n endElement,\n indicator,\n indicatorHidden,\n items,\n loadingScheme,\n startElement,\n checkboxProps,\n endElementProps,\n groupProps,\n indicatorProps,\n itemProps,\n labelProps,\n startElementProps,\n ...rest\n }: TreeRootProps<Multiple>) => {\n const computedChildren = useMemo(() => {\n if (children) return children\n\n return recursiveTreeItem(items)\n }, [children, items])\n const {\n activeDescendant,\n checkable,\n checkedValue,\n descendants,\n expandedValue,\n multiple,\n selectedValue,\n getRootProps,\n onActiveDescendant,\n onCheckedChange,\n onCollapseAll,\n onExpandAll,\n onExpandedChange,\n onSearch,\n onSelectedChange,\n } = useTree({ ...rest, children: computedChildren })\n const context = useMemo(\n () => ({\n activeDescendant,\n checkable,\n checkedValue,\n expandedValue,\n multiple,\n selectedValue,\n onActiveDescendant,\n onCheckedChange,\n onCollapseAll,\n onExpandAll,\n onExpandedChange,\n onSearch,\n onSelectedChange,\n }),\n [\n activeDescendant,\n checkable,\n checkedValue,\n expandedValue,\n multiple,\n selectedValue,\n onActiveDescendant,\n onCheckedChange,\n onSearch,\n onCollapseAll,\n onExpandAll,\n onExpandedChange,\n onSelectedChange,\n ],\n )\n const componentContext = useMemo(\n () => ({\n size,\n animated,\n endElement,\n indicator,\n indicatorHidden,\n loadingScheme,\n startElement,\n checkboxProps,\n endElementProps,\n groupProps,\n indicatorProps,\n itemProps,\n labelProps,\n startElementProps,\n }),\n [\n size,\n animated,\n endElement,\n indicator,\n indicatorHidden,\n startElement,\n endElementProps,\n groupProps,\n indicatorProps,\n itemProps,\n labelProps,\n startElementProps,\n checkboxProps,\n loadingScheme,\n ],\n )\n\n return (\n <TreeDescendantsContext value={descendants}>\n <TreeContext value={context}>\n <ComponentContext value={componentContext}>\n <styled.ul {...getRootProps()} />\n </ComponentContext>\n </TreeContext>\n </TreeDescendantsContext>\n )\n },\n \"root\",\n { transferProps: [\"size\"] },\n)() as GenericsComponent<{\n <Multiple extends boolean = false>(\n props: TreeRootProps<Multiple>,\n ): ReactElement\n}>\n\nexport interface TreeItemProps\n extends HTMLStyledProps<\"div\">, Omit<UseTreeItemProps, \"asyncChildren\"> {\n /**\n * The label to display in the item.\n */\n label: ReactNode\n /**\n * If `true`, the tree item will be animated.\n *\n * @default false\n */\n animated?: boolean\n /**\n * The element to display at the end of the item.\n */\n endElement?: TreeItemReactNode\n /**\n * The tree indicator icon to use.\n */\n indicator?: ReactNodeOrFunction<TreeCallBackProps>\n /**\n * The loading scheme.\n *\n * @default 'oval'\n */\n loadingScheme?: Loading.Scheme\n /**\n * The element to display at the start of the item.\n */\n startElement?: TreeItemReactNode\n /**\n * Props for the checkbox component.\n */\n checkboxProps?: Omit<CheckboxProps, \"checked\" | \"defaultChecked\" | \"value\">\n /**\n * Props for the end component.\n */\n endElementProps?: TreeEndElementProps\n /**\n * Props for the group component.\n */\n groupProps?: Omit<TreeGroupProps, \"children\">\n /**\n * Props for the indicator component.\n */\n indicatorProps?: TreeIndicatorProps\n /**\n * Props for the label component.\n */\n labelProps?: TreeLabelProps\n /**\n * Props for the root element.\n */\n rootProps?: HTMLStyledProps<\"li\">\n /**\n * Props for the start component.\n */\n startElementProps?: TreeStartElementProps\n /**\n * If provided, the tree item will be rendered as an async tree item.\n */\n asyncChildren?: () => Promise<TreeItem[]>\n}\n\nexport const TreeItem = withContext<\"div\", TreeItemProps>(\n ({\n className,\n css,\n colorScheme,\n animated: animatedProp,\n asyncChildren: asyncChildrenProp,\n endElement,\n indicator: indicatorProp,\n label,\n loadingScheme,\n startElement,\n value: valueProp = isString(label) ? label : undefined,\n checkboxProps,\n endElementProps,\n groupProps,\n indicatorProps,\n labelProps,\n rootProps,\n startElementProps,\n ...rest\n }) => {\n const { checkable } = useTreeContext()\n const componentContext = useComponentContext()\n const Loading = useLoadingComponent(\n loadingScheme ?? componentContext.loadingScheme ?? \"oval\",\n )\n const animated = animatedProp ?? componentContext.animated\n const indicator = indicatorProp ?? componentContext.indicator\n const groupStartElement = getReactNodeOrFunction(\n \"group\",\n startElement,\n componentContext.startElement,\n )\n const groupEndElement = getReactNodeOrFunction(\n \"group\",\n endElement,\n componentContext.endElement,\n )\n const itemStartElement = getReactNodeOrFunction(\n \"item\",\n startElement,\n componentContext.startElement,\n )\n const itemEndElement = getReactNodeOrFunction(\n \"item\",\n endElement,\n componentContext.endElement,\n )\n const asyncChildren = useCallback(async () => {\n const items = await asyncChildrenProp?.()\n\n return recursiveTreeItem(items)\n }, [asyncChildrenProp])\n const {\n branchOpen,\n children,\n disabled,\n group,\n groupLoading,\n groupOpen,\n level,\n props,\n value,\n getCheckboxProps,\n getGroupItemProps,\n getGroupProps,\n getIndicatorProps,\n getItemProps,\n getLabelProps,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n } = useTreeItem({\n ...componentContext.itemProps,\n ...rest,\n asyncChildren: asyncChildrenProp ? asyncChildren : undefined,\n value: valueProp,\n })\n const itemProps = {\n className,\n css,\n colorScheme,\n \"--level\": level.toString(),\n ...rootProps,\n }\n const callbackProps = { disabled, expanded: groupOpen }\n const context = useMemo(\n () => ({\n branchOpen,\n groupOpen,\n level,\n value,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n }),\n [\n branchOpen,\n groupOpen,\n level,\n value,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n ],\n )\n const itemComponentContext = useMemo(\n () => ({\n checkboxProps: {\n size: componentContext.size,\n ...getCheckboxProps({\n ...componentContext.checkboxProps,\n ...checkboxProps,\n }),\n },\n endElementProps: {\n ...componentContext.endElementProps,\n ...endElementProps,\n },\n indicatorProps: {\n ...getIndicatorProps({\n ...componentContext.indicatorProps,\n ...indicatorProps,\n }),\n },\n labelProps: {\n ...getLabelProps({\n ...componentContext.labelProps,\n ...labelProps,\n }),\n },\n startElementProps: {\n ...componentContext.startElementProps,\n ...startElementProps,\n },\n }),\n [\n checkboxProps,\n componentContext.checkboxProps,\n componentContext.endElementProps,\n componentContext.indicatorProps,\n componentContext.labelProps,\n componentContext.size,\n componentContext.startElementProps,\n endElementProps,\n getCheckboxProps,\n getIndicatorProps,\n getLabelProps,\n indicatorProps,\n labelProps,\n startElementProps,\n ],\n )\n\n return (\n <TreeItemContext value={context}>\n <ItemComponentContext value={itemComponentContext}>\n {group ? (\n <styled.li {...getGroupItemProps(itemProps)}>\n <styled.div data-content {...props}>\n <TreeIndicator data-animated={dataAttr(animated)}>\n {groupLoading ? (\n <Loading />\n ) : (\n runIfFn(indicator, callbackProps)\n )}\n </TreeIndicator>\n {checkable ? <TreeCheckbox /> : null}\n {groupStartElement ? (\n <TreeStartElement>\n {runIfFn(groupStartElement, callbackProps)}\n </TreeStartElement>\n ) : null}\n {label ? <TreeLabel>{label}</TreeLabel> : null}\n {groupEndElement ? (\n <TreeEndElement>\n {runIfFn(groupEndElement, callbackProps)}\n </TreeEndElement>\n ) : null}\n </styled.div>\n\n <TreeGroup\n duration={!animated ? 0 : undefined}\n open={groupOpen}\n {...getGroupProps({\n ...componentContext.groupProps,\n ...groupProps,\n })}\n >\n {children}\n </TreeGroup>\n </styled.li>\n ) : (\n <styled.li {...getItemProps(itemProps)}>\n <styled.div data-content {...props}>\n <TreeIndicator data-hidden />\n {checkable ? <TreeCheckbox /> : null}\n {itemStartElement ? (\n <TreeStartElement>\n {runIfFn(itemStartElement, callbackProps)}\n </TreeStartElement>\n ) : null}\n {label ? <TreeLabel>{label}</TreeLabel> : null}\n {itemEndElement ? (\n <TreeEndElement>\n {runIfFn(itemEndElement, callbackProps)}\n </TreeEndElement>\n ) : null}\n </styled.div>\n </styled.li>\n )}\n </ItemComponentContext>\n </TreeItemContext>\n )\n },\n \"item\",\n)()\n\ninterface TreeGroupProps\n extends\n Omit<HTMLStyledProps<\"ul\">, \"transition\">,\n Pick<CollapseProps, \"animationOpacity\" | keyof WithTransitionProps> {}\n\nconst TreeGroup = withContext<\"ul\", TreeGroupProps>((props) => {\n return <Collapse as=\"ul\" {...cast<CollapseProps>(props)} />\n}, \"group\")()\n\ninterface TreeIndicatorProps extends HTMLStyledProps<\"svg\"> {}\n\nconst TreeIndicator = withContext<\"svg\", TreeIndicatorProps>(\n ({ children = <ChevronRightIcon />, ...rest }) => {\n const { indicatorHidden } = useComponentContext()\n\n if (indicatorHidden) return null\n\n if (isValidElement<HTMLProps<\"svg\">>(children))\n return cloneElement(children, { ...rest, ...children.props })\n\n return Children.count(children) > 1 ? Children.only(null) : null\n },\n \"indicator\",\n)(undefined, (props) => {\n const { indicatorProps } = useItemComponentContext()\n\n return { ...indicatorProps, ...props }\n})\n\ninterface TreeCheckboxProps extends CheckboxProps {}\n\nconst TreeCheckbox = withContext<\"input\", TreeCheckboxProps>(\n Checkbox,\n \"checkbox\",\n)(undefined, (props) => {\n const { checkboxProps } = useItemComponentContext()\n\n return { ...checkboxProps, ...props }\n})\n\ninterface TreeStartElementProps extends HTMLStyledProps {}\n\nconst TreeStartElement = withContext<\"div\", TreeStartElementProps>(\"div\", {\n name: \"StartElement\",\n slot: [\"element\", \"start\"],\n})(undefined, (props) => {\n const { startElementProps } = useItemComponentContext()\n\n return { ...startElementProps, ...props }\n})\n\ninterface TreeEndElementProps extends HTMLStyledProps {}\n\nconst TreeEndElement = withContext<\"div\", TreeEndElementProps>(\"div\", {\n name: \"EndElement\",\n slot: [\"element\", \"end\"],\n})(undefined, (props) => {\n const { endElementProps } = useItemComponentContext()\n\n return { ...endElementProps, ...props }\n})\n\ninterface TreeLabelProps extends HTMLStyledProps<\"span\"> {}\n\nconst TreeLabel = withContext<\"span\", TreeLabelProps>(\"span\", \"label\")(\n undefined,\n (props) => {\n const { labelProps } = useItemComponentContext()\n\n return { ...labelProps, ...props }\n },\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsEA,MAAM,qBAAqB,UAAuB;AAChD,QAAO,OAAO,KAAK,OAAO,UAAU;EAClC,MAAM,MAAM,MAAM,0DAAmB,MAAM,MAAM,GAAG,MAAM,QAAQ;AAElE,MAAI,cAAc,OAAO;GACvB,MAAM,EAAE,UAAU,GAAG,SAAS;AAE9B,UACE,2CAAC;IAAmB,GAAI;cACrB,kBAAkB,SAAS;MADf,IAEJ;QAGb,QAAO,2CAAC,YAAmB,GAAI,SAAT,IAAkB;GAE1C;;AAGJ,MAAM,0BACJ,MACA,QACA,SAC2C;AAC3C,qDAAa,OAAO,KAAK,WAAW,UAAU,UAAU,QACtD,QAAO,OAAO;UACL,OACT,QAAO;0DACW,KAAK,KAAK,WAAW,QAAQ,UAAU,MACzD,QAAO,KAAK;KAEZ,QAAO;;AA8BX,MAAM,CAAC,sBAAsB,2BAC3BA,8BAAoC,EAAE,MAAM,wBAAwB,CAAC;AAqCvE,MAAM,EACJ,kBACA,cAAc,kBACd,qBACA,iBAAiB,qBACjB,aACA,iBACEC,6CACF,QACAC,6BACD;;;;;;AASD,MAAa,WAAW,cACa,EACjC,MACA,UACA,UACA,YACA,WACA,iBACA,OACA,eACA,cACA,eACA,iBACA,YACA,gBACA,WACA,YACA,mBACA,GAAG,WAC0B;CAC7B,MAAM,4CAAiC;AACrC,MAAI,SAAU,QAAO;AAErB,SAAO,kBAAkB,MAAM;IAC9B,CAAC,UAAU,MAAM,CAAC;CACrB,MAAM,EACJ,kBACA,WACA,cACA,aACA,eACA,UACA,eACA,cACA,oBACA,iBACA,eACA,aACA,kBACA,UACA,qBACEC,yBAAQ;EAAE,GAAG;EAAM,UAAU;EAAkB,CAAC;AAoEpD,QACE,2CAACC;EAAuB,OAAO;YAC7B,2CAACC;GAAY,iCApER;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD,GACD;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD,CACF;aAuCK,2CAAC;IAAiB,iCArCf;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD,GACD;KACE;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD,CACF;cAMO,2CAACC,uBAAO,MAAG,GAAI,cAAc,GAAI;KAChB;IACP;GACS;GAG7B,QACA,EAAE,eAAe,CAAC,OAAO,EAAE,CAC5B,EAAE;AAsEH,MAAa,WAAW,aACrB,EACC,WACA,KACA,aACA,UAAU,cACV,eAAe,mBACf,YACA,WAAW,eACX,OACA,eACA,cACA,OAAO,4DAAqB,MAAM,GAAG,QAAQ,QAC7C,eACA,iBACA,YACA,gBACA,YACA,WACA,mBACA,GAAG,WACC;CACJ,MAAM,EAAE,cAAcC,iCAAgB;CACtC,MAAM,mBAAmB,qBAAqB;CAC9C,MAAM,UAAUC,kDACd,iBAAiB,iBAAiB,iBAAiB,OACpD;CACD,MAAM,WAAW,gBAAgB,iBAAiB;CAClD,MAAM,YAAY,iBAAiB,iBAAiB;CACpD,MAAM,oBAAoB,uBACxB,SACA,cACA,iBAAiB,aAClB;CACD,MAAM,kBAAkB,uBACtB,SACA,YACA,iBAAiB,WAClB;CACD,MAAM,mBAAmB,uBACvB,QACA,cACA,iBAAiB,aAClB;CACD,MAAM,iBAAiB,uBACrB,QACA,YACA,iBAAiB,WAClB;CACD,MAAM,uCAA4B,YAAY;AAG5C,SAAO,kBAFO,MAAM,qBAAqB,CAEV;IAC9B,CAAC,kBAAkB,CAAC;CACvB,MAAM,EACJ,YACA,UACA,UACA,OACA,cACA,WACA,OACA,OACA,OACA,kBACA,mBACA,eACA,mBACA,cACA,eACA,cACA,aACA,kBACEC,6BAAY;EACd,GAAG,iBAAiB;EACpB,GAAG;EACH,eAAe,oBAAoB,gBAAgB;EACnD,OAAO;EACR,CAAC;CACF,MAAM,YAAY;EAChB;EACA;EACA;EACA,WAAW,MAAM,UAAU;EAC3B,GAAG;EACJ;CACD,MAAM,gBAAgB;EAAE;EAAU,UAAU;EAAW;AAqEvD,QACE,2CAACC;EAAgB,iCApEV;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACD,GACD;G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"}
|
|
1
|
+
{"version":3,"file":"tree.cjs","names":["createContext","createSlotComponent","treeStyle","useTree","TreeDescendantsContext","TreeContext","styled","useTreeContext","useLoadingComponent","useTreeItem","TreeItemContext","Collapse","ChevronRightIcon","Children","Checkbox"],"sources":["../../../../src/components/tree/tree.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactElement, ReactNode } from \"react\"\nimport type {\n GenericsComponent,\n HTMLProps,\n HTMLStyledProps,\n ThemeProps,\n} from \"../../core\"\nimport type { CheckboxProps } from \"../checkbox\"\nimport type { CollapseProps } from \"../collapse\"\nimport type { Loading } from \"../loading\"\nimport type { WithTransitionProps } from \"../motion\"\nimport type { TreeStyle } from \"./tree.style\"\nimport type { UseTreeItemProps, UseTreeProps } from \"./use-tree\"\nimport {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useMemo,\n} from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport {\n cast,\n createContext,\n dataAttr,\n isObject,\n isString,\n type ReactNodeOrFunction,\n runIfFn,\n} from \"../../utils\"\nimport { Checkbox } from \"../checkbox\"\nimport { Collapse } from \"../collapse\"\nimport { ChevronRightIcon } from \"../icon\"\nimport { useLoadingComponent } from \"../loading\"\nimport { treeStyle } from \"./tree.style\"\nimport {\n TreeContext,\n TreeDescendantsContext,\n TreeItemContext,\n useTree,\n useTreeContext,\n useTreeItem,\n} from \"./use-tree\"\n\ninterface TreeCallBackProps {\n disabled?: boolean\n expanded?: boolean\n}\n\ntype TreeItemReactNode =\n | ReactNodeOrFunction<TreeCallBackProps>\n | {\n group: ReactNodeOrFunction<TreeCallBackProps>\n item?: ReactNodeOrFunction<TreeCallBackProps>\n }\n | {\n item: ReactNodeOrFunction<TreeCallBackProps>\n group?: ReactNodeOrFunction<TreeCallBackProps>\n }\n\ninterface TreeItemWithValue extends Omit<TreeItemProps, \"children\"> {}\n\ninterface TreeItemWithChildren extends TreeItemWithValue {\n children: TreeItem[]\n}\n\nexport type TreeItem = TreeItemWithChildren | TreeItemWithValue\n\nconst recursiveTreeItem = (items?: TreeItem[]) => {\n return items?.map((props, index) => {\n const key =\n props.value || (isString(props.label) ? `${props.label}-${index}` : index)\n\n if (\"children\" in props) {\n const { children, ...rest } = props\n\n return (\n <TreeItem key={key} {...rest}>\n {recursiveTreeItem(children)}\n </TreeItem>\n )\n } else {\n return <TreeItem key={key} {...props} />\n }\n })\n}\n\nconst getReactNodeOrFunction = (\n type: \"group\" | \"item\",\n custom?: TreeItemReactNode,\n root?: TreeItemReactNode,\n): ReactNodeOrFunction<TreeCallBackProps> => {\n if (isObject(custom) && (\"group\" in custom || \"item\" in custom)) {\n return custom[type]\n } else if (custom) {\n return custom\n } else if (isObject(root) && (\"group\" in root || \"item\" in root)) {\n return root[type]\n } else {\n return root\n }\n}\n\ninterface ComponentContext extends Pick<\n TreeRootProps,\n | \"animated\"\n | \"checkboxProps\"\n | \"endElement\"\n | \"endElementProps\"\n | \"groupProps\"\n | \"indicator\"\n | \"indicatorHidden\"\n | \"indicatorProps\"\n | \"itemProps\"\n | \"labelProps\"\n | \"loadingScheme\"\n | \"size\"\n | \"startElement\"\n | \"startElementProps\"\n> {}\n\ninterface ItemComponentContext {\n checkboxProps: TreeCheckboxProps\n endElementProps: TreeEndElementProps\n indicatorProps: TreeIndicatorProps\n labelProps: TreeLabelProps\n startElementProps: TreeStartElementProps\n}\n\nconst [ItemComponentContext, useItemComponentContext] =\n createContext<ItemComponentContext>({ name: \"ItemComponentContext\" })\n\nexport interface TreeRootProps<Multiple extends boolean = false>\n extends\n HTMLStyledProps<\"ul\">,\n ThemeProps<TreeStyle>,\n UseTreeProps<Multiple>,\n Pick<\n TreeItemProps,\n | \"animated\"\n | \"checkboxProps\"\n | \"endElement\"\n | \"endElementProps\"\n | \"groupProps\"\n | \"indicator\"\n | \"indicatorProps\"\n | \"labelProps\"\n | \"loadingScheme\"\n | \"startElement\"\n | \"startElementProps\"\n > {\n /**\n * If `true`, hide the tree indicator icon for all items.\n *\n * @default false\n */\n indicatorHidden?: boolean\n /**\n * If provided, generate elements based on items.\n */\n items?: TreeItem[]\n /**\n * Props for the item component.\n */\n itemProps?: Omit<\n TreeItemProps,\n \"children\" | \"label\" | \"open\" | \"query\" | \"value\"\n >\n}\n\nconst {\n ComponentContext,\n PropsContext: TreePropsContext,\n useComponentContext,\n usePropsContext: useTreePropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<TreeRootProps, TreeStyle, ComponentContext>(\n \"tree\",\n treeStyle,\n)\n\nexport { TreePropsContext, useTreePropsContext }\n\n/**\n * `Tree` is a component used to display hierarchical data structures in an expandable tree format.\n *\n * @see https://yamada-ui.com/docs/components/tree\n */\nexport const TreeRoot = withProvider<\"ul\", TreeRootProps, \"size\">(\n <Multiple extends boolean = false>({\n size,\n animated,\n children,\n endElement,\n indicator,\n indicatorHidden,\n items,\n loadingScheme,\n startElement,\n checkboxProps,\n endElementProps,\n groupProps,\n indicatorProps,\n itemProps,\n labelProps,\n startElementProps,\n ...rest\n }: TreeRootProps<Multiple>) => {\n const computedChildren = useMemo(() => {\n if (children) return children\n\n return recursiveTreeItem(items)\n }, [children, items])\n const {\n activeDescendant,\n checkable,\n checkedValue,\n descendants,\n expandedValue,\n multiple,\n selectedValue,\n getRootProps,\n onActiveDescendant,\n onCheckedChange,\n onCollapseAll,\n onExpandAll,\n onExpandedChange,\n onSearch,\n onSelectedChange,\n } = useTree({ ...rest, children: computedChildren })\n const context = useMemo(\n () => ({\n activeDescendant,\n checkable,\n checkedValue,\n expandedValue,\n multiple,\n selectedValue,\n onActiveDescendant,\n onCheckedChange,\n onCollapseAll,\n onExpandAll,\n onExpandedChange,\n onSearch,\n onSelectedChange,\n }),\n [\n activeDescendant,\n checkable,\n checkedValue,\n expandedValue,\n multiple,\n selectedValue,\n onActiveDescendant,\n onCheckedChange,\n onSearch,\n onCollapseAll,\n onExpandAll,\n onExpandedChange,\n onSelectedChange,\n ],\n )\n const componentContext = useMemo(\n () => ({\n size,\n animated,\n endElement,\n indicator,\n indicatorHidden,\n loadingScheme,\n startElement,\n checkboxProps,\n endElementProps,\n groupProps,\n indicatorProps,\n itemProps,\n labelProps,\n startElementProps,\n }),\n [\n size,\n animated,\n endElement,\n indicator,\n indicatorHidden,\n startElement,\n endElementProps,\n groupProps,\n indicatorProps,\n itemProps,\n labelProps,\n startElementProps,\n checkboxProps,\n loadingScheme,\n ],\n )\n\n return (\n <TreeDescendantsContext value={descendants}>\n <TreeContext value={context}>\n <ComponentContext value={componentContext}>\n <styled.ul {...getRootProps()} />\n </ComponentContext>\n </TreeContext>\n </TreeDescendantsContext>\n )\n },\n \"root\",\n { transferProps: [\"size\"] },\n)() as GenericsComponent<{\n <Multiple extends boolean = false>(\n props: TreeRootProps<Multiple>,\n ): ReactElement\n}>\n\nexport interface TreeItemProps\n extends HTMLStyledProps<\"div\">, Omit<UseTreeItemProps, \"asyncChildren\"> {\n /**\n * The label to display in the item.\n */\n label: ReactNode\n /**\n * If `true`, the tree item will be animated.\n *\n * @default false\n */\n animated?: boolean\n /**\n * The element to display at the end of the item.\n */\n endElement?: TreeItemReactNode\n /**\n * The tree indicator icon to use.\n */\n indicator?: ReactNodeOrFunction<TreeCallBackProps>\n /**\n * The loading scheme.\n *\n * @default 'oval'\n */\n loadingScheme?: Loading.Scheme\n /**\n * The element to display at the start of the item.\n */\n startElement?: TreeItemReactNode\n /**\n * Props for the checkbox component.\n */\n checkboxProps?: Omit<CheckboxProps, \"checked\" | \"defaultChecked\" | \"value\">\n /**\n * Props for the end component.\n */\n endElementProps?: TreeEndElementProps\n /**\n * Props for the group component.\n */\n groupProps?: Omit<TreeGroupProps, \"children\">\n /**\n * Props for the indicator component.\n */\n indicatorProps?: TreeIndicatorProps\n /**\n * Props for the label component.\n */\n labelProps?: TreeLabelProps\n /**\n * Props for the root element.\n */\n rootProps?: HTMLStyledProps<\"li\">\n /**\n * Props for the start component.\n */\n startElementProps?: TreeStartElementProps\n /**\n * If provided, the tree item will be rendered as an async tree item.\n */\n asyncChildren?: () => Promise<TreeItem[]>\n}\n\nexport const TreeItem = withContext<\"div\", TreeItemProps>(\n ({\n className,\n css,\n colorScheme,\n animated: animatedProp,\n asyncChildren: asyncChildrenProp,\n endElement,\n indicator: indicatorProp,\n label,\n loadingScheme,\n query,\n startElement,\n value: valueProp = isString(label) ? label : undefined,\n checkboxProps,\n endElementProps,\n groupProps,\n indicatorProps,\n labelProps,\n rootProps,\n startElementProps,\n ...rest\n }) => {\n const { checkable } = useTreeContext()\n const componentContext = useComponentContext()\n const Loading = useLoadingComponent(\n loadingScheme ?? componentContext.loadingScheme ?? \"oval\",\n )\n const animated = animatedProp ?? componentContext.animated\n const indicator = indicatorProp ?? componentContext.indicator\n const groupStartElement = getReactNodeOrFunction(\n \"group\",\n startElement,\n componentContext.startElement,\n )\n const groupEndElement = getReactNodeOrFunction(\n \"group\",\n endElement,\n componentContext.endElement,\n )\n const itemStartElement = getReactNodeOrFunction(\n \"item\",\n startElement,\n componentContext.startElement,\n )\n const itemEndElement = getReactNodeOrFunction(\n \"item\",\n endElement,\n componentContext.endElement,\n )\n const asyncChildren = useCallback(async () => {\n const items = await asyncChildrenProp?.()\n\n return recursiveTreeItem(items)\n }, [asyncChildrenProp])\n const {\n branchOpen,\n children,\n disabled,\n group,\n groupLoading,\n groupOpen,\n level,\n props,\n value,\n getCheckboxProps,\n getGroupItemProps,\n getGroupProps,\n getIndicatorProps,\n getItemProps,\n getLabelProps,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n } = useTreeItem({\n ...componentContext.itemProps,\n ...rest,\n asyncChildren: asyncChildrenProp ? asyncChildren : undefined,\n query: query ?? (isString(label) ? label : undefined),\n value: valueProp,\n })\n const itemProps = {\n className,\n css,\n colorScheme,\n \"--level\": level.toString(),\n ...rootProps,\n }\n const callbackProps = { disabled, expanded: groupOpen }\n const context = useMemo(\n () => ({\n branchOpen,\n groupOpen,\n level,\n value,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n }),\n [\n branchOpen,\n groupOpen,\n level,\n value,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n ],\n )\n const itemComponentContext = useMemo(\n () => ({\n checkboxProps: {\n size: componentContext.size,\n ...getCheckboxProps({\n ...componentContext.checkboxProps,\n ...checkboxProps,\n }),\n },\n endElementProps: {\n ...componentContext.endElementProps,\n ...endElementProps,\n },\n indicatorProps: {\n ...getIndicatorProps({\n ...componentContext.indicatorProps,\n ...indicatorProps,\n }),\n },\n labelProps: {\n ...getLabelProps({\n ...componentContext.labelProps,\n ...labelProps,\n }),\n },\n startElementProps: {\n ...componentContext.startElementProps,\n ...startElementProps,\n },\n }),\n [\n checkboxProps,\n componentContext.checkboxProps,\n componentContext.endElementProps,\n componentContext.indicatorProps,\n componentContext.labelProps,\n componentContext.size,\n componentContext.startElementProps,\n endElementProps,\n getCheckboxProps,\n getIndicatorProps,\n getLabelProps,\n indicatorProps,\n labelProps,\n startElementProps,\n ],\n )\n\n return (\n <TreeItemContext value={context}>\n <ItemComponentContext value={itemComponentContext}>\n {group ? (\n <styled.li {...getGroupItemProps(itemProps)}>\n <styled.div data-content {...props}>\n <TreeIndicator data-animated={dataAttr(animated)}>\n {groupLoading ? (\n <Loading />\n ) : (\n runIfFn(indicator, callbackProps)\n )}\n </TreeIndicator>\n {checkable ? <TreeCheckbox /> : null}\n {groupStartElement ? (\n <TreeStartElement>\n {runIfFn(groupStartElement, callbackProps)}\n </TreeStartElement>\n ) : null}\n {label ? <TreeLabel>{label}</TreeLabel> : null}\n {groupEndElement ? (\n <TreeEndElement>\n {runIfFn(groupEndElement, callbackProps)}\n </TreeEndElement>\n ) : null}\n </styled.div>\n\n <TreeGroup\n duration={!animated ? 0 : undefined}\n open={groupOpen}\n {...getGroupProps({\n ...componentContext.groupProps,\n ...groupProps,\n })}\n >\n {children}\n </TreeGroup>\n </styled.li>\n ) : (\n <styled.li {...getItemProps(itemProps)}>\n <styled.div data-content {...props}>\n <TreeIndicator data-hidden />\n {checkable ? <TreeCheckbox /> : null}\n {itemStartElement ? (\n <TreeStartElement>\n {runIfFn(itemStartElement, callbackProps)}\n </TreeStartElement>\n ) : null}\n {label ? <TreeLabel>{label}</TreeLabel> : null}\n {itemEndElement ? (\n <TreeEndElement>\n {runIfFn(itemEndElement, callbackProps)}\n </TreeEndElement>\n ) : null}\n </styled.div>\n </styled.li>\n )}\n </ItemComponentContext>\n </TreeItemContext>\n )\n },\n \"item\",\n)()\n\ninterface TreeGroupProps\n extends\n Omit<HTMLStyledProps<\"ul\">, \"transition\">,\n Pick<CollapseProps, \"animationOpacity\" | keyof WithTransitionProps> {}\n\nconst TreeGroup = withContext<\"ul\", TreeGroupProps>((props) => {\n return <Collapse as=\"ul\" {...cast<CollapseProps>(props)} />\n}, \"group\")()\n\ninterface TreeIndicatorProps extends HTMLStyledProps<\"svg\"> {}\n\nconst TreeIndicator = withContext<\"svg\", TreeIndicatorProps>(\n ({ children = <ChevronRightIcon />, ...rest }) => {\n const { indicatorHidden } = useComponentContext()\n\n if (indicatorHidden) return null\n\n if (isValidElement<HTMLProps<\"svg\">>(children))\n return cloneElement(children, { ...rest, ...children.props })\n\n return Children.count(children) > 1 ? Children.only(null) : null\n },\n \"indicator\",\n)(undefined, (props) => {\n const { indicatorProps } = useItemComponentContext()\n\n return { ...indicatorProps, ...props }\n})\n\ninterface TreeCheckboxProps extends CheckboxProps {}\n\nconst TreeCheckbox = withContext<\"input\", TreeCheckboxProps>(\n Checkbox,\n \"checkbox\",\n)(undefined, (props) => {\n const { checkboxProps } = useItemComponentContext()\n\n return { ...checkboxProps, ...props }\n})\n\ninterface TreeStartElementProps extends HTMLStyledProps {}\n\nconst TreeStartElement = withContext<\"div\", TreeStartElementProps>(\"div\", {\n name: \"StartElement\",\n slot: [\"element\", \"start\"],\n})(undefined, (props) => {\n const { startElementProps } = useItemComponentContext()\n\n return { ...startElementProps, ...props }\n})\n\ninterface TreeEndElementProps extends HTMLStyledProps {}\n\nconst TreeEndElement = withContext<\"div\", TreeEndElementProps>(\"div\", {\n name: \"EndElement\",\n slot: [\"element\", \"end\"],\n})(undefined, (props) => {\n const { endElementProps } = useItemComponentContext()\n\n return { ...endElementProps, ...props }\n})\n\ninterface TreeLabelProps extends HTMLStyledProps<\"span\"> {}\n\nconst TreeLabel = withContext<\"span\", TreeLabelProps>(\"span\", \"label\")(\n undefined,\n (props) => {\n const { labelProps } = useItemComponentContext()\n\n return { ...labelProps, ...props }\n },\n)\n"],"mappings":"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"}
|
|
@@ -7,7 +7,10 @@ require('../checkbox/index.cjs');
|
|
|
7
7
|
//#region src/components/tree/tree.style.ts
|
|
8
8
|
const treeStyle = require_config.defineComponentSlotStyle({
|
|
9
9
|
base: {
|
|
10
|
-
checkbox: {
|
|
10
|
+
checkbox: {
|
|
11
|
+
"--indicator-bg": "colors.bg",
|
|
12
|
+
_disabled: { opacity: "1" }
|
|
13
|
+
},
|
|
11
14
|
element: {
|
|
12
15
|
color: "{element-color}",
|
|
13
16
|
display: "inline-center",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.style.cjs","names":["defineComponentSlotStyle","focusRingStyle","checkboxStyle"],"sources":["../../../../src/components/tree/tree.style.ts"],"sourcesContent":["import { defineComponentSlotStyle, focusRingStyle } from \"../../core\"\nimport { checkboxStyle } from \"../checkbox\"\n\nexport const treeStyle = defineComponentSlotStyle({\n base: {\n checkbox: { \"--indicator-bg\": \"colors.bg\" },\n element: {\n color: \"{element-color}\",\n display: \"inline-center\",\n gap: \"{space}\",\n },\n end: {},\n group: { alignItems: \"stretch\", display: \"flex\", flexDirection: \"column\" },\n indicator: {\n color: \"{element-color}\",\n transformOrigin: \"center\",\n _animated: {\n transitionDuration: \"moderate\",\n transitionProperty: \"transform\",\n },\n _expanded: { transform: \"rotate(90deg)\" },\n _hidden: { opacity: \"0\" },\n },\n item: {\n \"--element-color\": \"colors.fg.subtle\",\n \"--space\": \"spaces.1\",\n \"--space-start\": \"calc({depth-space} * ({level} - 1))\",\n alignItems: \"stretch\",\n display: \"flex\",\n flexDirection: \"column\",\n focusVisibleRing: \"none\",\n _content: {\n alignItems: \"center\",\n border: \"1px solid transparent\",\n cursor: \"pointer\",\n display: \"flex\",\n gap: \"{gap}\",\n pe: \"{space}\",\n ps: \"calc({space-start} + {space})\",\n rounded: \"{rounded}\",\n userSelect: \"none\",\n _hover: { bg: \"bg.subtle\" },\n },\n _focusVisible: {\n _content: {\n bg: \"bg.subtle\",\n ...focusRingStyle.inside,\n boxShadow: \"none\",\n },\n },\n _disabled: { _content: { layerStyle: \"disabled\" } },\n },\n label: { flex: \"1\", textAlign: \"left\", truncated: true },\n root: {\n alignItems: \"stretch\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n start: {},\n },\n\n props: {\n /**\n * The shape of the component\n *\n * @default 'rounded'\n */\n shape: {\n circle: {\n item: { \"--rounded\": \"radii.full\" },\n },\n rounded: {\n item: { \"--rounded\": \"radii.l1\" },\n },\n square: {\n item: { \"--rounded\": \"0\" },\n },\n },\n /**\n * If `true`, display guide lines.\n *\n * @default false\n */\n withGuideLine: {\n true: {\n group: {\n position: \"relative\",\n _before: {\n bg: \"{guide-line-color}\",\n display: \"block\",\n h: \"full\",\n left: \"calc({space-guide-line} + {depth-space})\",\n position: \"absolute\",\n transform: \"translateX(-50%)\",\n w: \"px\",\n zIndex: \"yamcha\",\n },\n },\n item: {\n \"--space-guide-line\": \"calc(({space-start} * 2) + {space})\",\n _content: { ps: \"{space-guide-line}\" },\n },\n root: { \"--guide-line-color\": \"colors.border\" },\n },\n },\n },\n\n variants: {\n solid: {\n checkbox: {\n ...checkboxStyle.variants?.solid.root,\n _indicator: checkboxStyle.variants?.solid.indicator,\n _selected: {\n _checked: { \"--indicator-border-color\": \"colorScheme.contrast\" },\n _indicator: {\n color: \"colorScheme.solid\",\n _checked: { bg: \"colorScheme.contrast\" },\n _indeterminate: { bg: \"colorScheme.contrast\" },\n },\n },\n },\n item: {\n _selected: {\n _content: {\n layerStyle: \"solid\",\n \"--element-color\": \"colorScheme.contrast\",\n },\n _focusVisible: {\n _content: { borderColor: \"{focus-ring-color}\" },\n },\n },\n },\n },\n subtle: {\n checkbox: {\n ...checkboxStyle.variants?.solid.root,\n _indicator: checkboxStyle.variants?.solid.indicator,\n },\n item: {\n _selected: {\n _content: {\n layerStyle: \"subtle\",\n \"--element-color\": \"colorScheme.fg\",\n },\n _focusVisible: {\n _content: { borderColor: \"{focus-ring-color}\" },\n },\n },\n },\n },\n },\n\n sizes: {\n sm: {\n item: { \"--depth-space\": \"spaces.1.5\", \"--gap\": \"spaces.1.5\" },\n root: { fontSize: \"sm\" },\n },\n md: {\n item: { \"--depth-space\": \"spaces.2\", \"--gap\": \"spaces.2\" },\n root: { fontSize: \"md\" },\n },\n lg: {\n item: { \"--depth-space\": \"spaces.2\", \"--gap\": \"spaces.2\" },\n root: { fontSize: \"lg\" },\n },\n },\n\n defaultProps: {\n size: \"md\",\n variant: \"subtle\",\n shape: \"rounded\",\n withGuideLine: false,\n },\n})\n\nexport type TreeStyle = typeof treeStyle\n"],"mappings":";;;;;;;AAGA,MAAa,YAAYA,wCAAyB;CAChD,MAAM;EACJ,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"tree.style.cjs","names":["defineComponentSlotStyle","focusRingStyle","checkboxStyle"],"sources":["../../../../src/components/tree/tree.style.ts"],"sourcesContent":["import { defineComponentSlotStyle, focusRingStyle } from \"../../core\"\nimport { checkboxStyle } from \"../checkbox\"\n\nexport const treeStyle = defineComponentSlotStyle({\n base: {\n checkbox: { \"--indicator-bg\": \"colors.bg\", _disabled: { opacity: \"1\" } },\n element: {\n color: \"{element-color}\",\n display: \"inline-center\",\n gap: \"{space}\",\n },\n end: {},\n group: { alignItems: \"stretch\", display: \"flex\", flexDirection: \"column\" },\n indicator: {\n color: \"{element-color}\",\n transformOrigin: \"center\",\n _animated: {\n transitionDuration: \"moderate\",\n transitionProperty: \"transform\",\n },\n _expanded: { transform: \"rotate(90deg)\" },\n _hidden: { opacity: \"0\" },\n },\n item: {\n \"--element-color\": \"colors.fg.subtle\",\n \"--space\": \"spaces.1\",\n \"--space-start\": \"calc({depth-space} * ({level} - 1))\",\n alignItems: \"stretch\",\n display: \"flex\",\n flexDirection: \"column\",\n focusVisibleRing: \"none\",\n _content: {\n alignItems: \"center\",\n border: \"1px solid transparent\",\n cursor: \"pointer\",\n display: \"flex\",\n gap: \"{gap}\",\n pe: \"{space}\",\n ps: \"calc({space-start} + {space})\",\n rounded: \"{rounded}\",\n userSelect: \"none\",\n _hover: { bg: \"bg.subtle\" },\n },\n _focusVisible: {\n _content: {\n bg: \"bg.subtle\",\n ...focusRingStyle.inside,\n boxShadow: \"none\",\n },\n },\n _disabled: { _content: { layerStyle: \"disabled\" } },\n },\n label: { flex: \"1\", textAlign: \"left\", truncated: true },\n root: {\n alignItems: \"stretch\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n start: {},\n },\n\n props: {\n /**\n * The shape of the component\n *\n * @default 'rounded'\n */\n shape: {\n circle: {\n item: { \"--rounded\": \"radii.full\" },\n },\n rounded: {\n item: { \"--rounded\": \"radii.l1\" },\n },\n square: {\n item: { \"--rounded\": \"0\" },\n },\n },\n /**\n * If `true`, display guide lines.\n *\n * @default false\n */\n withGuideLine: {\n true: {\n group: {\n position: \"relative\",\n _before: {\n bg: \"{guide-line-color}\",\n display: \"block\",\n h: \"full\",\n left: \"calc({space-guide-line} + {depth-space})\",\n position: \"absolute\",\n transform: \"translateX(-50%)\",\n w: \"px\",\n zIndex: \"yamcha\",\n },\n },\n item: {\n \"--space-guide-line\": \"calc(({space-start} * 2) + {space})\",\n _content: { ps: \"{space-guide-line}\" },\n },\n root: { \"--guide-line-color\": \"colors.border\" },\n },\n },\n },\n\n variants: {\n solid: {\n checkbox: {\n ...checkboxStyle.variants?.solid.root,\n _indicator: checkboxStyle.variants?.solid.indicator,\n _selected: {\n _checked: { \"--indicator-border-color\": \"colorScheme.contrast\" },\n _indicator: {\n color: \"colorScheme.solid\",\n _checked: { bg: \"colorScheme.contrast\" },\n _indeterminate: { bg: \"colorScheme.contrast\" },\n },\n },\n },\n item: {\n _selected: {\n _content: {\n layerStyle: \"solid\",\n \"--element-color\": \"colorScheme.contrast\",\n },\n _focusVisible: {\n _content: { borderColor: \"{focus-ring-color}\" },\n },\n },\n },\n },\n subtle: {\n checkbox: {\n ...checkboxStyle.variants?.solid.root,\n _indicator: checkboxStyle.variants?.solid.indicator,\n },\n item: {\n _selected: {\n _content: {\n layerStyle: \"subtle\",\n \"--element-color\": \"colorScheme.fg\",\n },\n _focusVisible: {\n _content: { borderColor: \"{focus-ring-color}\" },\n },\n },\n },\n },\n },\n\n sizes: {\n sm: {\n item: { \"--depth-space\": \"spaces.1.5\", \"--gap\": \"spaces.1.5\" },\n root: { fontSize: \"sm\" },\n },\n md: {\n item: { \"--depth-space\": \"spaces.2\", \"--gap\": \"spaces.2\" },\n root: { fontSize: \"md\" },\n },\n lg: {\n item: { \"--depth-space\": \"spaces.2\", \"--gap\": \"spaces.2\" },\n root: { fontSize: \"lg\" },\n },\n },\n\n defaultProps: {\n size: \"md\",\n variant: \"subtle\",\n shape: \"rounded\",\n withGuideLine: false,\n },\n})\n\nexport type TreeStyle = typeof treeStyle\n"],"mappings":"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"}
|
|
@@ -68,7 +68,7 @@ const useTree = ({ checkable = false, checkedValue: checkedValueProp, children,
|
|
|
68
68
|
value: ""
|
|
69
69
|
};
|
|
70
70
|
}, 400);
|
|
71
|
-
const descendant = descendants.enabledValues({ expanded: true }).filter((descendant$1) => !(0, require_utils_index.utils_exports.isUndefined)(descendant$1.value) && descendant$1.value !== searchRef.current.omitValue).find(({ value: value$1 }) => (0, require_utils_index.utils_exports.match)(value$1, searchRef.current.value, "startsWith"));
|
|
71
|
+
const descendant = descendants.enabledValues({ expanded: true }).filter((descendant$1) => !(0, require_utils_index.utils_exports.isUndefined)(descendant$1.value) && descendant$1.value !== searchRef.current.omitValue).find(({ query, value: value$1 }) => (0, require_utils_index.utils_exports.match)(query ?? value$1, searchRef.current.value, "startsWith"));
|
|
72
72
|
if (descendant) onActiveDescendant(descendant);
|
|
73
73
|
}, [descendants, onActiveDescendant]);
|
|
74
74
|
const onSelectedChange = (0, react.useCallback)((value) => {
|
|
@@ -173,7 +173,7 @@ const getRangeValues = (descendants) => (start, end) => {
|
|
|
173
173
|
return 0;
|
|
174
174
|
});
|
|
175
175
|
};
|
|
176
|
-
const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disabled = false, open: openProp, value: valueProp, onClose: onCloseProp, onOpen: onOpenProp, ...rest } = {}) => {
|
|
176
|
+
const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disabled = false, open: openProp, query, value: valueProp, onClose: onCloseProp, onOpen: onOpenProp, ...rest } = {}) => {
|
|
177
177
|
const context = useTreeItemContext();
|
|
178
178
|
const { activeDescendant, checkable, checkedValue, expandedValue, multiple, selectedValue, onActiveDescendant, onCheckedChange, onCollapseAll, onExpandAll, onExpandedChange, onSearch, onSelectedChange } = useTreeContext();
|
|
179
179
|
const [children, setChildren] = (0, react.useState)(childrenProp);
|
|
@@ -200,6 +200,7 @@ const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disab
|
|
|
200
200
|
disabled,
|
|
201
201
|
expanded: branchOpen.slice(0, -1).every(Boolean),
|
|
202
202
|
group,
|
|
203
|
+
query,
|
|
203
204
|
value
|
|
204
205
|
});
|
|
205
206
|
const [groupLoading, onGroupChildren] = require_hooks_use_async_callback_index.useAsyncCallback(async () => {
|
|
@@ -232,6 +233,8 @@ const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disab
|
|
|
232
233
|
onGroupChildren().then(() => {
|
|
233
234
|
onOpen();
|
|
234
235
|
onExpandedChange(value);
|
|
236
|
+
}).catch(() => {
|
|
237
|
+
initialAsyncRef.current = false;
|
|
235
238
|
});
|
|
236
239
|
} else {
|
|
237
240
|
onOpen();
|
|
@@ -322,7 +325,7 @@ const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disab
|
|
|
322
325
|
if (ev.key.length !== 1) return;
|
|
323
326
|
if (ev.ctrlKey || ev.metaKey || ev.altKey) return;
|
|
324
327
|
ev.preventDefault();
|
|
325
|
-
onSearch(ev.key, value);
|
|
328
|
+
onSearch(ev.key, query ?? value);
|
|
326
329
|
}, [
|
|
327
330
|
activeDescendant,
|
|
328
331
|
descendants,
|
|
@@ -341,14 +344,15 @@ const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disab
|
|
|
341
344
|
onSearch,
|
|
342
345
|
onSelect,
|
|
343
346
|
onSelectedChange,
|
|
347
|
+
query,
|
|
344
348
|
value
|
|
345
349
|
]);
|
|
346
350
|
const onItemClick = (0, react.useCallback)((ev) => {
|
|
351
|
+
ev.stopPropagation();
|
|
347
352
|
if (disabled || !value) return;
|
|
348
353
|
if (group && !groupLoading) {
|
|
349
354
|
if (!ev.ctrlKey && !ev.metaKey && !ev.shiftKey) onGroupToggle();
|
|
350
355
|
}
|
|
351
|
-
ev.stopPropagation();
|
|
352
356
|
onSelect(ev);
|
|
353
357
|
}, [
|
|
354
358
|
disabled,
|
|
@@ -391,15 +395,23 @@ const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disab
|
|
|
391
395
|
descendants,
|
|
392
396
|
context
|
|
393
397
|
]);
|
|
394
|
-
require_effect.
|
|
398
|
+
require_effect.useSafeLayoutEffect(() => {
|
|
395
399
|
if (defaultExpanded) if (async && !initialAsyncRef.current) {
|
|
396
400
|
initialAsyncRef.current = true;
|
|
397
401
|
onGroupChildren().then(() => {
|
|
398
402
|
onOpen();
|
|
403
|
+
}).catch(() => {
|
|
404
|
+
initialAsyncRef.current = false;
|
|
399
405
|
});
|
|
400
406
|
} else onOpen();
|
|
401
407
|
else onClose();
|
|
402
|
-
}, [
|
|
408
|
+
}, [
|
|
409
|
+
async,
|
|
410
|
+
defaultExpanded,
|
|
411
|
+
onClose,
|
|
412
|
+
onGroupChildren,
|
|
413
|
+
onOpen
|
|
414
|
+
]);
|
|
403
415
|
require_effect.useSafeLayoutEffect(() => {
|
|
404
416
|
if (!group || !checkable) return;
|
|
405
417
|
const { children: children$1 } = getChildDescendants(descendants)(value);
|
|
@@ -473,6 +485,7 @@ const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disab
|
|
|
473
485
|
"aria-labelledby": (0, require_utils_index.utils_exports.cx)(ariaLabelledby, labelId),
|
|
474
486
|
"data-selected": (0, require_utils_index.utils_exports.dataAttr)(selected),
|
|
475
487
|
checked,
|
|
488
|
+
disabled,
|
|
476
489
|
indeterminate,
|
|
477
490
|
tabIndex: -1,
|
|
478
491
|
...props,
|
|
@@ -482,6 +495,7 @@ const useTreeItem = ({ asyncChildren, children: childrenProp, defaultOpen, disab
|
|
|
482
495
|
labelId,
|
|
483
496
|
selected,
|
|
484
497
|
checked,
|
|
498
|
+
disabled,
|
|
485
499
|
indeterminate,
|
|
486
500
|
onCheckboxChange
|
|
487
501
|
]),
|