@yamada-ui/react 2.2.5-dev-20260727044042 → 2.2.5-dev-20260727071034
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/accordion/accordion.cjs.map +1 -1
- package/dist/cjs/components/action-bar/action-bar.cjs.map +1 -1
- package/dist/cjs/components/airy/airy.cjs.map +1 -1
- package/dist/cjs/components/alert/alert.cjs.map +1 -1
- package/dist/cjs/components/alpha-slider/alpha-slider.cjs.map +1 -1
- package/dist/cjs/components/autocomplete/autocomplete.cjs.map +1 -1
- package/dist/cjs/components/autocomplete/use-autocomplete.cjs.map +1 -1
- package/dist/cjs/components/avatar/avatar-group.cjs.map +1 -1
- package/dist/cjs/components/avatar/avatar.cjs.map +1 -1
- package/dist/cjs/components/blockquote/blockquote.cjs.map +1 -1
- package/dist/cjs/components/breadcrumb/breadcrumb.cjs.map +1 -1
- package/dist/cjs/components/button/button-group.cjs.map +1 -1
- package/dist/cjs/components/button/button.cjs.map +1 -1
- package/dist/cjs/components/calendar/calendar.cjs.map +1 -1
- package/dist/cjs/components/calendar/use-calendar.cjs.map +1 -1
- package/dist/cjs/components/carousel/carousel.cjs.map +1 -1
- package/dist/cjs/components/chart/cartesian-chart.cjs.map +1 -1
- package/dist/cjs/components/chart/chart.cjs.map +1 -1
- package/dist/cjs/components/chart/polar-chart.cjs.map +1 -1
- package/dist/cjs/components/checkbox/checkbox-group.cjs.map +1 -1
- package/dist/cjs/components/checkbox/checkbox.cjs.map +1 -1
- package/dist/cjs/components/checkbox-card/checkbox-card-group.cjs.map +1 -1
- package/dist/cjs/components/checkbox-card/checkbox-card.cjs.map +1 -1
- package/dist/cjs/components/circle-progress/circle-progress.cjs.map +1 -1
- package/dist/cjs/components/collapse/collapse.cjs.map +1 -1
- package/dist/cjs/components/color-picker/color-picker.cjs.map +1 -1
- package/dist/cjs/components/color-selector/color-selector.cjs.map +1 -1
- package/dist/cjs/components/color-swatch/color-swatch-group.cjs.map +1 -1
- package/dist/cjs/components/color-swatch/color-swatch.cjs.map +1 -1
- package/dist/cjs/components/data-list/data-list.cjs.map +1 -1
- package/dist/cjs/components/date-picker/date-picker.cjs.map +1 -1
- package/dist/cjs/components/date-picker/use-date-picker.cjs.map +1 -1
- package/dist/cjs/components/drawer/drawer.cjs.map +1 -1
- package/dist/cjs/components/dropzone/dropzone.cjs.map +1 -1
- package/dist/cjs/components/editable/editable.cjs.map +1 -1
- package/dist/cjs/components/empty-state/empty-state.cjs.map +1 -1
- package/dist/cjs/components/fade/fade.cjs.map +1 -1
- package/dist/cjs/components/fade-scale/fade-scale.cjs.map +1 -1
- package/dist/cjs/components/field/field.cjs.map +1 -1
- package/dist/cjs/components/fieldset/fieldset.cjs.map +1 -1
- package/dist/cjs/components/file-input/file-input.cjs.map +1 -1
- package/dist/cjs/components/flip/flip.cjs.map +1 -1
- package/dist/cjs/components/focus-lock/focus-lock.cjs.map +1 -1
- package/dist/cjs/components/form/form.cjs.map +1 -1
- package/dist/cjs/components/format/format-byte.cjs.map +1 -1
- package/dist/cjs/components/format/format-date-time.cjs.map +1 -1
- package/dist/cjs/components/format/format-number.cjs.map +1 -1
- package/dist/cjs/components/highlight/highlight.cjs.map +1 -1
- package/dist/cjs/components/hue-slider/hue-slider.cjs.map +1 -1
- package/dist/cjs/components/icon/icons/circle-euro-icon.cjs +14 -0
- package/dist/cjs/components/icon/icons/circle-euro-icon.cjs.map +1 -0
- package/dist/cjs/components/icon/icons/index.cjs +9 -3
- package/dist/cjs/components/icon/icons/index.cjs.map +1 -1
- package/dist/cjs/components/icon/icons/scan-box-icon.cjs +14 -0
- package/dist/cjs/components/icon/icons/scan-box-icon.cjs.map +1 -0
- package/dist/cjs/components/icon/icons/server-plus-icon.cjs +14 -0
- package/dist/cjs/components/icon/icons/server-plus-icon.cjs.map +1 -0
- package/dist/cjs/components/icon/index.cjs +6 -2
- package/dist/cjs/components/indicator/indicator.cjs.map +1 -1
- package/dist/cjs/components/infinite-scroll-area/infinite-scroll-area.cjs.map +1 -1
- package/dist/cjs/components/input/input-group.cjs.map +1 -1
- package/dist/cjs/components/link-box/link-box.cjs.map +1 -1
- package/dist/cjs/components/list/list.cjs.map +1 -1
- package/dist/cjs/components/loading/audio.cjs.map +1 -1
- package/dist/cjs/components/loading/background.cjs.map +1 -1
- package/dist/cjs/components/loading/circles.cjs.map +1 -1
- package/dist/cjs/components/loading/dots.cjs.map +1 -1
- package/dist/cjs/components/loading/grid.cjs.map +1 -1
- package/dist/cjs/components/loading/loading-provider.cjs.map +1 -1
- package/dist/cjs/components/loading/oval.cjs.map +1 -1
- package/dist/cjs/components/loading/page.cjs.map +1 -1
- package/dist/cjs/components/loading/puff.cjs.map +1 -1
- package/dist/cjs/components/loading/rings.cjs.map +1 -1
- package/dist/cjs/components/loading/screen.cjs.map +1 -1
- package/dist/cjs/components/loading/suspense.cjs.map +1 -1
- package/dist/cjs/components/menu/menu.cjs.map +1 -1
- package/dist/cjs/components/menu/use-menu.cjs.map +1 -1
- package/dist/cjs/components/modal/modal.cjs.map +1 -1
- package/dist/cjs/components/native-accordion/native-accordion.cjs.map +1 -1
- package/dist/cjs/components/native-popover/native-popover.cjs.map +1 -1
- package/dist/cjs/components/native-select/native-select.cjs.map +1 -1
- package/dist/cjs/components/native-select/use-native-select.cjs.map +1 -1
- package/dist/cjs/components/native-table/native-table.cjs.map +1 -1
- package/dist/cjs/components/notice/notice-provider.cjs.map +1 -1
- package/dist/cjs/components/notice/notice.cjs.map +1 -1
- package/dist/cjs/components/notice/use-notice.cjs.map +1 -1
- package/dist/cjs/components/number-input/number-input.cjs.map +1 -1
- package/dist/cjs/components/pagination/pagination.cjs.map +1 -1
- package/dist/cjs/components/password-input/password-input.cjs.map +1 -1
- package/dist/cjs/components/password-input/strength-meter.cjs.map +1 -1
- package/dist/cjs/components/picture/picture.cjs.map +1 -1
- package/dist/cjs/components/pin-input/pin-input.cjs.map +1 -1
- package/dist/cjs/components/popover/popover.cjs.map +1 -1
- package/dist/cjs/components/progress/progress.cjs.map +1 -1
- package/dist/cjs/components/qr-code/qr-code.cjs.map +1 -1
- package/dist/cjs/components/radio/radio-group.cjs.map +1 -1
- package/dist/cjs/components/radio/radio.cjs.map +1 -1
- package/dist/cjs/components/radio-card/radio-card-group.cjs.map +1 -1
- package/dist/cjs/components/radio-card/radio-card.cjs.map +1 -1
- package/dist/cjs/components/rating/rating.cjs.map +1 -1
- package/dist/cjs/components/reorder/reorder.cjs.map +1 -1
- package/dist/cjs/components/resizable/resizable.cjs.map +1 -1
- package/dist/cjs/components/ripple/ripple.cjs.map +1 -1
- package/dist/cjs/components/rotate/rotate.cjs.map +1 -1
- package/dist/cjs/components/saturation-slider/saturation-slider.cjs.map +1 -1
- package/dist/cjs/components/saturation-slider/use-saturation-slider.cjs.map +1 -1
- package/dist/cjs/components/segmented-control/segmented-control.cjs.map +1 -1
- package/dist/cjs/components/select/select.cjs.map +1 -1
- package/dist/cjs/components/select/use-select.cjs.map +1 -1
- package/dist/cjs/components/sidebar/sidebar.cjs.map +1 -1
- package/dist/cjs/components/skeleton/skeleton-text.cjs.map +1 -1
- package/dist/cjs/components/slide/slide.cjs.map +1 -1
- package/dist/cjs/components/slide-fade/slide-fade.cjs.map +1 -1
- package/dist/cjs/components/slider/slider.cjs.map +1 -1
- package/dist/cjs/components/slot/slot.cjs.map +1 -1
- package/dist/cjs/components/snacks/snacks.cjs.map +1 -1
- package/dist/cjs/components/stack/stack.cjs.map +1 -1
- package/dist/cjs/components/stack/z-stack.cjs.map +1 -1
- package/dist/cjs/components/stat/stat.cjs.map +1 -1
- package/dist/cjs/components/status/status.cjs.map +1 -1
- package/dist/cjs/components/steps/steps.cjs.map +1 -1
- package/dist/cjs/components/switch/switch.cjs.map +1 -1
- package/dist/cjs/components/table/table.cjs.map +1 -1
- package/dist/cjs/components/tabs/tabs.cjs.map +1 -1
- package/dist/cjs/components/tag/tag.cjs.map +1 -1
- package/dist/cjs/components/timeline/timeline.cjs.map +1 -1
- package/dist/cjs/components/tip/tip.cjs.map +1 -1
- package/dist/cjs/components/toggle/toggle-group.cjs.map +1 -1
- package/dist/cjs/components/tooltip/tooltip.cjs.map +1 -1
- package/dist/cjs/components/tree/tree.cjs.map +1 -1
- package/dist/cjs/components/tree/use-tree.cjs.map +1 -1
- package/dist/cjs/core/components/create-component.cjs.map +1 -1
- package/dist/cjs/core/system/breakpoint.cjs.map +1 -1
- package/dist/cjs/core/system/environment-provider.cjs.map +1 -1
- package/dist/cjs/core/system/styled.cjs.map +1 -1
- package/dist/cjs/core/system/theme-provider.cjs.map +1 -1
- package/dist/cjs/hooks/use-async-callback/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-breakpoint/use-breakpoint.cjs.map +1 -1
- package/dist/cjs/hooks/use-combobox/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-field-sizing/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-outside-click/index.cjs.map +1 -1
- package/dist/cjs/index.cjs +9 -3
- package/dist/cjs/providers/ui-provider/ui-provider.cjs.map +1 -1
- package/dist/cjs/utils/store.cjs.map +1 -1
- package/dist/esm/components/accordion/accordion.js.map +1 -1
- package/dist/esm/components/action-bar/action-bar.js.map +1 -1
- package/dist/esm/components/airy/airy.js.map +1 -1
- package/dist/esm/components/alert/alert.js.map +1 -1
- package/dist/esm/components/alpha-slider/alpha-slider.js.map +1 -1
- package/dist/esm/components/autocomplete/autocomplete.js.map +1 -1
- package/dist/esm/components/autocomplete/use-autocomplete.js.map +1 -1
- package/dist/esm/components/avatar/avatar-group.js.map +1 -1
- package/dist/esm/components/avatar/avatar.js.map +1 -1
- package/dist/esm/components/blockquote/blockquote.js.map +1 -1
- package/dist/esm/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/esm/components/button/button-group.js.map +1 -1
- package/dist/esm/components/button/button.js.map +1 -1
- package/dist/esm/components/calendar/calendar.js.map +1 -1
- package/dist/esm/components/calendar/use-calendar.js.map +1 -1
- package/dist/esm/components/carousel/carousel.js.map +1 -1
- package/dist/esm/components/chart/cartesian-chart.js.map +1 -1
- package/dist/esm/components/chart/chart.js.map +1 -1
- package/dist/esm/components/chart/polar-chart.js.map +1 -1
- package/dist/esm/components/checkbox/checkbox-group.js.map +1 -1
- package/dist/esm/components/checkbox/checkbox.js.map +1 -1
- package/dist/esm/components/checkbox-card/checkbox-card-group.js.map +1 -1
- package/dist/esm/components/checkbox-card/checkbox-card.js.map +1 -1
- package/dist/esm/components/circle-progress/circle-progress.js.map +1 -1
- package/dist/esm/components/collapse/collapse.js.map +1 -1
- package/dist/esm/components/color-picker/color-picker.js.map +1 -1
- package/dist/esm/components/color-selector/color-selector.js.map +1 -1
- package/dist/esm/components/color-swatch/color-swatch-group.js.map +1 -1
- package/dist/esm/components/color-swatch/color-swatch.js.map +1 -1
- package/dist/esm/components/data-list/data-list.js.map +1 -1
- package/dist/esm/components/date-picker/date-picker.js.map +1 -1
- package/dist/esm/components/date-picker/use-date-picker.js.map +1 -1
- package/dist/esm/components/drawer/drawer.js.map +1 -1
- package/dist/esm/components/dropzone/dropzone.js.map +1 -1
- package/dist/esm/components/editable/editable.js.map +1 -1
- package/dist/esm/components/empty-state/empty-state.js.map +1 -1
- package/dist/esm/components/fade/fade.js.map +1 -1
- package/dist/esm/components/fade-scale/fade-scale.js.map +1 -1
- package/dist/esm/components/field/field.js.map +1 -1
- package/dist/esm/components/fieldset/fieldset.js.map +1 -1
- package/dist/esm/components/file-input/file-input.js.map +1 -1
- package/dist/esm/components/flip/flip.js.map +1 -1
- package/dist/esm/components/focus-lock/focus-lock.js.map +1 -1
- package/dist/esm/components/form/form.js.map +1 -1
- package/dist/esm/components/format/format-byte.js.map +1 -1
- package/dist/esm/components/format/format-date-time.js.map +1 -1
- package/dist/esm/components/format/format-number.js.map +1 -1
- package/dist/esm/components/highlight/highlight.js.map +1 -1
- package/dist/esm/components/hue-slider/hue-slider.js.map +1 -1
- package/dist/esm/components/icon/icons/circle-euro-icon.js +14 -0
- package/dist/esm/components/icon/icons/circle-euro-icon.js.map +1 -0
- package/dist/esm/components/icon/icons/index.js +7 -3
- package/dist/esm/components/icon/icons/index.js.map +1 -1
- package/dist/esm/components/icon/icons/scan-box-icon.js +14 -0
- package/dist/esm/components/icon/icons/scan-box-icon.js.map +1 -0
- package/dist/esm/components/icon/icons/server-plus-icon.js +14 -0
- package/dist/esm/components/icon/icons/server-plus-icon.js.map +1 -0
- package/dist/esm/components/icon/index.js +4 -2
- package/dist/esm/components/indicator/indicator.js.map +1 -1
- package/dist/esm/components/infinite-scroll-area/infinite-scroll-area.js.map +1 -1
- package/dist/esm/components/input/input-group.js.map +1 -1
- package/dist/esm/components/link-box/link-box.js.map +1 -1
- package/dist/esm/components/list/list.js.map +1 -1
- package/dist/esm/components/loading/audio.js.map +1 -1
- package/dist/esm/components/loading/background.js.map +1 -1
- package/dist/esm/components/loading/circles.js.map +1 -1
- package/dist/esm/components/loading/dots.js.map +1 -1
- package/dist/esm/components/loading/grid.js.map +1 -1
- package/dist/esm/components/loading/loading-provider.js.map +1 -1
- package/dist/esm/components/loading/oval.js.map +1 -1
- package/dist/esm/components/loading/page.js.map +1 -1
- package/dist/esm/components/loading/puff.js.map +1 -1
- package/dist/esm/components/loading/rings.js.map +1 -1
- package/dist/esm/components/loading/screen.js.map +1 -1
- package/dist/esm/components/loading/suspense.js.map +1 -1
- package/dist/esm/components/menu/menu.js.map +1 -1
- package/dist/esm/components/menu/use-menu.js.map +1 -1
- package/dist/esm/components/modal/modal.js.map +1 -1
- package/dist/esm/components/native-accordion/native-accordion.js.map +1 -1
- package/dist/esm/components/native-popover/native-popover.js.map +1 -1
- package/dist/esm/components/native-select/native-select.js.map +1 -1
- package/dist/esm/components/native-select/use-native-select.js.map +1 -1
- package/dist/esm/components/native-table/native-table.js.map +1 -1
- package/dist/esm/components/notice/notice-provider.js.map +1 -1
- package/dist/esm/components/notice/notice.js.map +1 -1
- package/dist/esm/components/notice/use-notice.js.map +1 -1
- package/dist/esm/components/number-input/number-input.js.map +1 -1
- package/dist/esm/components/pagination/pagination.js.map +1 -1
- package/dist/esm/components/password-input/password-input.js.map +1 -1
- package/dist/esm/components/password-input/strength-meter.js.map +1 -1
- package/dist/esm/components/picture/picture.js.map +1 -1
- package/dist/esm/components/pin-input/pin-input.js.map +1 -1
- package/dist/esm/components/popover/popover.js.map +1 -1
- package/dist/esm/components/progress/progress.js.map +1 -1
- package/dist/esm/components/qr-code/qr-code.js.map +1 -1
- package/dist/esm/components/radio/radio-group.js.map +1 -1
- package/dist/esm/components/radio/radio.js.map +1 -1
- package/dist/esm/components/radio-card/radio-card-group.js.map +1 -1
- package/dist/esm/components/radio-card/radio-card.js.map +1 -1
- package/dist/esm/components/rating/rating.js.map +1 -1
- package/dist/esm/components/reorder/reorder.js.map +1 -1
- package/dist/esm/components/resizable/resizable.js.map +1 -1
- package/dist/esm/components/ripple/ripple.js.map +1 -1
- package/dist/esm/components/rotate/rotate.js.map +1 -1
- package/dist/esm/components/saturation-slider/saturation-slider.js.map +1 -1
- package/dist/esm/components/saturation-slider/use-saturation-slider.js.map +1 -1
- package/dist/esm/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/esm/components/select/select.js.map +1 -1
- package/dist/esm/components/select/use-select.js.map +1 -1
- package/dist/esm/components/sidebar/sidebar.js.map +1 -1
- package/dist/esm/components/skeleton/skeleton-text.js.map +1 -1
- package/dist/esm/components/slide/slide.js.map +1 -1
- package/dist/esm/components/slide-fade/slide-fade.js.map +1 -1
- package/dist/esm/components/slider/slider.js.map +1 -1
- package/dist/esm/components/slot/slot.js.map +1 -1
- package/dist/esm/components/snacks/snacks.js.map +1 -1
- package/dist/esm/components/stack/stack.js.map +1 -1
- package/dist/esm/components/stack/z-stack.js.map +1 -1
- package/dist/esm/components/stat/stat.js.map +1 -1
- package/dist/esm/components/status/status.js.map +1 -1
- package/dist/esm/components/steps/steps.js.map +1 -1
- package/dist/esm/components/switch/switch.js.map +1 -1
- package/dist/esm/components/table/table.js.map +1 -1
- package/dist/esm/components/tabs/tabs.js.map +1 -1
- package/dist/esm/components/tag/tag.js.map +1 -1
- package/dist/esm/components/timeline/timeline.js.map +1 -1
- package/dist/esm/components/tip/tip.js.map +1 -1
- package/dist/esm/components/toggle/toggle-group.js.map +1 -1
- package/dist/esm/components/tooltip/tooltip.js.map +1 -1
- package/dist/esm/components/tree/tree.js.map +1 -1
- package/dist/esm/components/tree/use-tree.js.map +1 -1
- package/dist/esm/core/components/create-component.js.map +1 -1
- package/dist/esm/core/system/breakpoint.js.map +1 -1
- package/dist/esm/core/system/environment-provider.js.map +1 -1
- package/dist/esm/core/system/styled.js.map +1 -1
- package/dist/esm/core/system/theme-provider.js.map +1 -1
- package/dist/esm/hooks/use-breakpoint/use-breakpoint.js.map +1 -1
- package/dist/esm/hooks/use-combobox/index.js.map +1 -1
- package/dist/esm/hooks/use-field-sizing/index.js.map +1 -1
- package/dist/esm/hooks/use-outside-click/index.js.map +1 -1
- package/dist/esm/index.js +7 -3
- package/dist/esm/providers/ui-provider/ui-provider.js.map +1 -1
- package/dist/esm/utils/store.js.map +1 -1
- package/dist/types/components/avatar/avatar.d.ts +3 -3
- package/dist/types/components/avatar/avatar.style.d.ts +1 -1
- package/dist/types/components/data-list/data-list.style.d.ts +1 -1
- package/dist/types/components/field/field.style.d.ts +2 -2
- package/dist/types/components/fieldset/fieldset.style.d.ts +1 -1
- package/dist/types/components/icon/icons/circle-euro-icon.d.ts +13 -0
- package/dist/types/components/icon/icons/index.d.ts +5 -3
- package/dist/types/components/icon/icons/index.types.d.ts +1 -1
- package/dist/types/components/icon/icons/scan-box-icon.d.ts +13 -0
- package/dist/types/components/icon/icons/server-plus-icon.d.ts +13 -0
- package/dist/types/components/icon/index.d.ts +4 -2
- package/dist/types/components/menu/use-menu.d.ts +1 -1
- package/dist/types/components/number-input/number-input.style.d.ts +1 -1
- package/dist/types/components/steps/steps.style.d.ts +1 -1
- package/dist/types/components/timeline/timeline.d.ts +1 -1
- package/dist/types/components/timeline/timeline.style.d.ts +1 -1
- package/dist/types/index.d.ts +5 -3
- package/package.json +5 -5
- package/dist/cjs/components/icon/icons/circle-euro-sign-icon.cjs +0 -14
- package/dist/cjs/components/icon/icons/circle-euro-sign-icon.cjs.map +0 -1
- package/dist/esm/components/icon/icons/circle-euro-sign-icon.js +0 -14
- package/dist/esm/components/icon/icons/circle-euro-sign-icon.js.map +0 -1
- package/dist/types/components/icon/icons/circle-euro-sign-icon.d.ts +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","names":["createContext"],"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, mergeProps, 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) return custom\n else if (isObject(root) && (\"group\" in root || \"item\" in root))\n return root[type]\n else return root\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 mergeProps(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 mergeProps(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 mergeProps(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 mergeProps(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 mergeProps(labelProps, props)()\n },\n)\n"],"mappings":";;;;;;;;;;;;;;;AAsEA,MAAM,qBAAqB,UAAuB;CAChD,OAAO,OAAO,KAAK,OAAO,UAAU;EAClC,MAAM,MACJ,MAAM,WAAA,GAAA,cAAA,SAAA,CAAmB,MAAM,KAAK,IAAI,GAAG,MAAM,MAAM,GAAG,UAAU;EAEtE,IAAI,cAAc,OAAO;GACvB,MAAM,EAAE,UAAU,GAAG,SAAS;GAE9B,OACE,oBAAC,UAAD;IAAoB,GAAI;cACrB,kBAAkB,QAAQ;GACnB,GAFK,GAEL;EAEd,OACE,OAAO,oBAAC,UAAD,EAAoB,GAAI,MAAQ,GAAjB,GAAiB;CAE3C,CAAC;AACH;AAEA,MAAM,0BACJ,MACA,QACA,SAC2C;CAC3C,KAAA,GAAA,cAAA,SAAA,CAAa,MAAM,MAAM,WAAW,UAAU,UAAU,SACtD,OAAO,OAAO;MACX,IAAI,QAAQ,OAAO;MACnB,KAAA,GAAA,cAAA,SAAA,CAAa,IAAI,MAAM,WAAW,QAAQ,UAAU,OACvD,OAAO,KAAK;MACT,OAAO;AACd;AA4BA,MAAM,CAAC,sBAAsB,2BAC3BA,gBAAoC,EAAE,MAAM,uBAAuB,CAAC;AAwCtE,MAAM,EACJ,kBACA,cAAc,kBACd,qBACA,iBAAiB,qBACjB,aACA,iBACE,oBACF,QACA,SACF;;;;;;AASA,MAAa,WAAW,cACa,EACjC,MACA,UACA,UACA,YACA,WACA,iBACA,OACA,eACA,cACA,eACA,iBACA,YACA,gBACA,WACA,YACA,mBACA,GAAG,WAC0B;CAC7B,MAAM,mBAAmB,cAAc;EACrC,IAAI,UAAU,OAAO;EAErB,OAAO,kBAAkB,KAAK;CAChC,GAAG,CAAC,UAAU,KAAK,CAAC;CACpB,MAAM,EACJ,kBACA,WACA,cACA,aACA,eACA,UACA,eACA,cACA,oBACA,iBACA,eACA,aACA,kBACA,UACA,qBACE,QAAQ;EAAE,GAAG;EAAM,UAAU;CAAiB,CAAC;CACnD,MAAM,UAAU,eACP;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CACA,MAAM,mBAAmB,eAChB;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,OACE,oBAAC,wBAAD;EAAwB,OAAO;YAC7B,oBAAC,aAAD;GAAa,OAAO;aAClB,oBAAC,kBAAD;IAAkB,OAAO;cACvB,oBAAC,OAAO,IAAR,EAAW,GAAI,aAAa,EAAI,CAAA;GAChB,CAAA;EACP,CAAA;CACS,CAAA;AAE5B,GACA,QACA,EAAE,eAAe,CAAC,MAAM,EAAE,CAC5B,CAAC,CAAC;AAsEF,MAAa,WAAW,aACrB,EACC,WACA,KACA,aACA,UAAU,cACV,eAAe,mBACf,YACA,WAAW,eACX,OACA,eACA,OACA,cACA,OAAO,aAAA,GAAA,cAAA,SAAA,CAAqB,KAAK,IAAI,QAAQ,KAAA,GAC7C,eACA,iBACA,YACA,gBACA,YACA,WACA,mBACA,GAAG,WACC;CACJ,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,mBAAmB,oBAAoB;CAC7C,MAAM,UAAU,oBACd,iBAAiB,iBAAiB,iBAAiB,MACrD;CACA,MAAM,WAAW,gBAAgB,iBAAiB;CAClD,MAAM,YAAY,iBAAiB,iBAAiB;CACpD,MAAM,oBAAoB,uBACxB,SACA,cACA,iBAAiB,YACnB;CACA,MAAM,kBAAkB,uBACtB,SACA,YACA,iBAAiB,UACnB;CACA,MAAM,mBAAmB,uBACvB,QACA,cACA,iBAAiB,YACnB;CACA,MAAM,iBAAiB,uBACrB,QACA,YACA,iBAAiB,UACnB;CACA,MAAM,gBAAgB,YAAY,YAAY;EAC5C,MAAM,QAAQ,MAAM,oBAAoB;EAExC,OAAO,kBAAkB,KAAK;CAChC,GAAG,CAAC,iBAAiB,CAAC;CACtB,MAAM,EACJ,YACA,UACA,UACA,OACA,cACA,WACA,OACA,OACA,OACA,kBACA,mBACA,eACA,mBACA,cACA,eACA,cACA,aACA,kBACE,YA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"}
|
|
1
|
+
{"version":3,"file":"tree.js","names":["createContext"],"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, mergeProps, 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) return custom\n else if (isObject(root) && (\"group\" in root || \"item\" in root))\n return root[type]\n else return root\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 mergeProps(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 mergeProps(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 mergeProps(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 mergeProps(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 mergeProps(labelProps, props)()\n },\n)\n"],"mappings":";;;;;;;;;;;;;;;AAsEA,MAAM,qBAAqB,UAAuB;CAChD,OAAO,OAAO,KAAK,OAAO,UAAU;EAClC,MAAM,MACJ,MAAM,WAAA,GAAA,cAAA,SAAA,CAAmB,MAAM,KAAK,IAAI,GAAG,MAAM,MAAM,GAAG,UAAU;EAEtE,IAAI,cAAc,OAAO;GACvB,MAAM,EAAE,UAAU,GAAG,SAAS;GAE9B,OACE,oBAAC,UAAD;IAAoB,GAAI;IACrB,UAAA,kBAAkB,QAAQ;GACnB,GAFK,GAEL;EAEd,OACE,OAAO,oBAAC,UAAD,EAAoB,GAAI,MAAQ,GAAjB,GAAiB;CAE3C,CAAC;AACH;AAEA,MAAM,0BACJ,MACA,QACA,SAC2C;CAC3C,KAAA,GAAA,cAAA,SAAA,CAAa,MAAM,MAAM,WAAW,UAAU,UAAU,SACtD,OAAO,OAAO;MACX,IAAI,QAAQ,OAAO;MACnB,KAAA,GAAA,cAAA,SAAA,CAAa,IAAI,MAAM,WAAW,QAAQ,UAAU,OACvD,OAAO,KAAK;MACT,OAAO;AACd;AA4BA,MAAM,CAAC,sBAAsB,2BAC3BA,gBAAoC,EAAE,MAAM,uBAAuB,CAAC;AAwCtE,MAAM,EACJ,kBACA,cAAc,kBACd,qBACA,iBAAiB,qBACjB,aACA,iBACE,oBACF,QACA,SACF;;;;;;AASA,MAAa,WAAW,cACa,EACjC,MACA,UACA,UACA,YACA,WACA,iBACA,OACA,eACA,cACA,eACA,iBACA,YACA,gBACA,WACA,YACA,mBACA,GAAG,WAC0B;CAC7B,MAAM,mBAAmB,cAAc;EACrC,IAAI,UAAU,OAAO;EAErB,OAAO,kBAAkB,KAAK;CAChC,GAAG,CAAC,UAAU,KAAK,CAAC;CACpB,MAAM,EACJ,kBACA,WACA,cACA,aACA,eACA,UACA,eACA,cACA,oBACA,iBACA,eACA,aACA,kBACA,UACA,qBACE,QAAQ;EAAE,GAAG;EAAM,UAAU;CAAiB,CAAC;CACnD,MAAM,UAAU,eACP;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CACA,MAAM,mBAAmB,eAChB;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,OACE,oBAAC,wBAAD;EAAwB,OAAO;EAC7B,UAAA,oBAAC,aAAD;GAAa,OAAO;GAClB,UAAA,oBAAC,kBAAD;IAAkB,OAAO;IACvB,UAAA,oBAAC,OAAO,IAAR,EAAW,GAAI,aAAa,EAAI,CAAA;GAChB,CAAA;EACP,CAAA;CACS,CAAA;AAE5B,GACA,QACA,EAAE,eAAe,CAAC,MAAM,EAAE,CAC5B,CAAC,CAAC;AAsEF,MAAa,WAAW,aACrB,EACC,WACA,KACA,aACA,UAAU,cACV,eAAe,mBACf,YACA,WAAW,eACX,OACA,eACA,OACA,cACA,OAAO,aAAA,GAAA,cAAA,SAAA,CAAqB,KAAK,IAAI,QAAQ,KAAA,GAC7C,eACA,iBACA,YACA,gBACA,YACA,WACA,mBACA,GAAG,WACC;CACJ,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,mBAAmB,oBAAoB;CAC7C,MAAM,UAAU,oBACd,iBAAiB,iBAAiB,iBAAiB,MACrD;CACA,MAAM,WAAW,gBAAgB,iBAAiB;CAClD,MAAM,YAAY,iBAAiB,iBAAiB;CACpD,MAAM,oBAAoB,uBACxB,SACA,cACA,iBAAiB,YACnB;CACA,MAAM,kBAAkB,uBACtB,SACA,YACA,iBAAiB,UACnB;CACA,MAAM,mBAAmB,uBACvB,QACA,cACA,iBAAiB,YACnB;CACA,MAAM,iBAAiB,uBACrB,QACA,YACA,iBAAiB,UACnB;CACA,MAAM,gBAAgB,YAAY,YAAY;EAC5C,MAAM,QAAQ,MAAM,oBAAoB;EAExC,OAAO,kBAAkB,KAAK;CAChC,GAAG,CAAC,iBAAiB,CAAC;CACtB,MAAM,EACJ,YACA,UACA,UACA,OACA,cACA,WACA,OACA,OACA,OACA,kBACA,mBACA,eACA,mBACA,cACA,eAC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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tree.js","names":["createContext"],"sources":["../../../../src/components/tree/use-tree.ts"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n RefObject,\n SetStateAction,\n} from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { Descendant, Descendants } from \"../../hooks/use-descendants\"\nimport type { UseDisclosureProps } from \"../../hooks/use-disclosure\"\nimport type { UseCheckboxProps } from \"../checkbox\"\nimport { Children, useCallback, useRef, useState } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useAsyncCallback } from \"../../hooks/use-async-callback\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { useDisclosure } from \"../../hooks/use-disclosure\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n filterEmpty,\n handlerAll,\n isArray,\n isInputElement,\n isUndefined,\n match,\n mergeRefs,\n runKeyAction,\n setAttribute,\n useIds,\n useSafeLayoutEffect,\n} from \"../../utils\"\n\nexport interface TreeControl {\n collapse: () => void\n expand: () => void\n}\n\ninterface TreeDescendantProps {\n expanded: boolean\n group: boolean\n id: string\n value: string\n query?: string\n}\n\nconst {\n DescendantsContext: TreeDescendantsContext,\n useDescendant: useTreeDescendant,\n useDescendants: useTreeDescendants,\n} = createDescendants<HTMLElement, TreeDescendantProps>()\n\nexport { TreeDescendantsContext, useTreeDescendant, useTreeDescendants }\n\ninterface TreeContext extends Omit<\n UseTreeReturn,\n \"descendants\" | \"getRootProps\"\n> {}\n\nconst [TreeContext, useTreeContext] = createContext<TreeContext>({\n name: \"TreeContext\",\n})\n\nexport { TreeContext, useTreeContext }\n\ninterface TreeItemContext extends Pick<\n UseTreeItemReturn,\n | \"branchOpen\"\n | \"groupOpen\"\n | \"level\"\n | \"onGroupClose\"\n | \"onGroupOpen\"\n | \"onGroupToggle\"\n | \"value\"\n> {}\n\nconst [TreeItemContext, useTreeItemContext] = createContext<TreeItemContext>({\n name: \"TreeItemContext\",\n strict: false,\n})\n\nexport { TreeItemContext, useTreeItemContext }\n\nexport interface UseTreeProps<\n Multiple extends boolean = false,\n> extends HTMLProps<\"ul\"> {\n /**\n * If `true`, the tree will allow checkable items.\n *\n * @default false\n */\n checkable?: boolean\n /**\n * The checked value of the tree.\n */\n checkedValue?: string[]\n /**\n * Ref of the tree callbacks.\n */\n controlRef?: RefObject<null | TreeControl>\n /**\n * The initial checked value of the tree.\n */\n defaultCheckedValue?: string[]\n /**\n * The initial expanded value of the tree.\n */\n defaultExpandedValue?: string[]\n /**\n * The initial selected value of the tree.\n */\n defaultSelectedValue?: Multiple extends true ? string[] : string\n /**\n * The expanded value of the tree.\n */\n expandedValue?: string[]\n /**\n * If `true`, the tree will allow multiple selection.\n *\n * @default false\n */\n multiple?: Multiple\n /**\n * The selected value of the tree.\n */\n selectedValue?: Multiple extends true ? string[] : string\n /**\n * The callback invoked when checked value changes.\n */\n onCheckedChange?: (value: string[]) => void\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: Multiple extends true ? string[] : string) => void\n}\n\nexport const useTree = <Multiple extends boolean = false>({\n checkable = false,\n checkedValue: checkedValueProp,\n children,\n controlRef,\n defaultCheckedValue = [],\n defaultExpandedValue = [],\n defaultSelectedValue,\n expandedValue: expandedValueProp,\n multiple,\n selectedValue: selectedValueProp,\n onCheckedChange: onCheckedChangeProp,\n onExpandedChange: onExpandedChangeProp,\n onSelectedChange: onSelectedChangeProp,\n ...rest\n}: UseTreeProps<Multiple> = {}) => {\n type MaybeSelectedValue = Multiple extends true ? string[] : string\n\n const [selectedValue, setSelectedValue] = useControllableState({\n defaultValue:\n defaultSelectedValue ?? ((multiple ? [] : \"\") as MaybeSelectedValue),\n value: selectedValueProp,\n onChange: onSelectedChangeProp,\n })\n const [checkedValue, onCheckedChange] = useControllableState({\n defaultValue: defaultCheckedValue,\n value: checkedValueProp,\n onChange: onCheckedChangeProp,\n })\n const [expandedValue, setExpandedValue] = useControllableState({\n defaultValue: defaultExpandedValue,\n value: expandedValueProp,\n onChange: onExpandedChangeProp,\n })\n const descendants = useTreeDescendants()\n const activeDescendant = useRef<Descendant<\n HTMLElement,\n TreeDescendantProps\n > | null>(null)\n const searchRef = useRef<{ value: string; omitValue?: string }>({\n omitValue: undefined,\n value: \"\",\n })\n const timeoutRef = useRef<any>(null)\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 onActiveDescendant = useCallback(\n (\n descendant?: Descendant<HTMLElement, TreeDescendantProps>,\n shouldFocus = true,\n ) => {\n if (!descendant) return\n\n descendants.values().forEach(({ node }) => {\n node.tabIndex = -1\n })\n\n activeDescendant.current = descendant\n descendant.node.tabIndex = 0\n\n if (shouldFocus) descendant.node.focus()\n },\n [descendants],\n )\n\n const onSearch = useCallback(\n (value: string, omitValue: string) => {\n clearTimeout(timeoutRef.current)\n\n searchRef.current.value += value\n\n if (!searchRef.current.omitValue) searchRef.current.omitValue = omitValue\n\n timeoutRef.current = setTimeout(() => {\n searchRef.current = { omitValue: undefined, value: \"\" }\n }, 400)\n\n const values = descendants\n .enabledValues({ expanded: true })\n .filter(\n (descendant) =>\n !isUndefined(descendant.value) &&\n descendant.value !== searchRef.current.omitValue,\n )\n const descendant = values.find(({ query, value }) =>\n match(query ?? value, searchRef.current.value, \"startsWith\"),\n )\n\n if (descendant) onActiveDescendant(descendant)\n },\n [descendants, onActiveDescendant],\n )\n\n const onSelectedChange = useCallback(\n (value: SetStateAction<string | string[]>) => {\n setSelectedValue(value as SetStateAction<MaybeSelectedValue>)\n },\n [setSelectedValue],\n )\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 return [...prev, value]\n })\n },\n [setExpandedValue],\n )\n\n useSafeLayoutEffect(() => {\n const value = isArray(selectedValue) ? selectedValue.at(0) : selectedValue\n const expandedDescendants = descendants.enabledValues({ expanded: true })\n\n if (value) {\n const descendant = expandedDescendants.find(\n (descendant) => value === descendant.value,\n )\n\n if (descendant) onActiveDescendant(descendant, false)\n else onActiveDescendant(expandedDescendants.at(0), false)\n } else {\n onActiveDescendant(expandedDescendants.at(0), false)\n }\n }, [children])\n\n assignRef(controlRef, { collapse: onCollapseAll, expand: onExpandAll })\n\n const getRootProps: PropGetter<\"ul\"> = useCallback(\n (props) =>\n mergeProps(\n {\n \"aria-multiselectable\": ariaAttr(multiple || checkable),\n children,\n role: \"tree\",\n },\n rest,\n props,\n )(),\n [multiple, checkable, rest, children],\n )\n\n return {\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 }\n}\n\nexport type UseTreeReturn = ReturnType<typeof useTree>\n\nconst getRootDescendant =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (value: string) => {\n const segments = value.split(\"/\")\n\n if (segments.length <= 1) return\n\n const rootValue = segments.at(0)\n\n return descendants.enabledValues().find(({ value }) => value === rootValue)\n }\n\nconst getParentDescendant =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (value: string) => {\n const segments = value.split(\"/\")\n\n if (segments.length <= 1) return\n\n const parentValue = segments.slice(0, -1).join(\"/\")\n\n return descendants\n .enabledValues()\n .find(({ value }) => value === parentValue)\n }\n\nconst getChildDescendants =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (value: string) => {\n const children = descendants\n .enabledValues()\n .filter((descendant) => descendant.value.startsWith(value + \"/\"))\n const values = children\n .map(({ value }) => value)\n .filter((value) => !isUndefined(value))\n\n return { children, values }\n }\n\nconst getParentValues = (value: string) => {\n const segments = value.split(\"/\")\n\n return segments\n .reduce<string[]>((prev, current) => {\n const prevValue = prev.at(-1)\n return prevValue ? [...prev, [prevValue, current].join(\"/\")] : [current]\n }, [])\n .toReversed()\n}\n\nconst getCheckbox = (node?: HTMLElement) => {\n const el = node?.querySelector(\"input[type='checkbox']\")\n\n return isInputElement(el) ? el : null\n}\n\nconst getAllChecked = (\n descendants: Descendant<HTMLElement, TreeDescendantProps>[],\n trulyValues?: string[],\n falsyValues?: string[],\n) => {\n const checked = descendants.map(({ node, value }) => {\n if (value && trulyValues?.includes(value)) return true\n if (value && falsyValues?.includes(value)) return false\n\n const checkbox = getCheckbox(node)\n\n return !!checkbox?.checked\n })\n\n const allChecked = !!checked.length && checked.every(Boolean)\n const indeterminate = checked.some(Boolean) && !allChecked\n\n return { allChecked, checked, indeterminate }\n}\n\nconst getRangeValues =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (start: string, end: string) => {\n const values = descendants.enabledValues()\n const [startIndex, endIndex] = [\n values.findIndex((descendant) => descendant.value === start),\n values.findIndex((descendant) => descendant.value === end),\n ].sort((a, b) => a - b)\n\n return values\n .slice(startIndex, endIndex! + 1)\n .map(({ value }) => value)\n .filter((value) => !isUndefined(value))\n .sort((a, b) => {\n if (a === start && b !== start) return -1\n if (a !== start && b === start) return 1\n\n return 0\n })\n }\n\nexport interface UseTreeItemProps\n extends HTMLProps<\"div\">, Omit<UseDisclosureProps, \"timing\"> {\n /**\n * If `true`, the tree item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The query to search for in the tree item.\n */\n query?: string\n /**\n * The value of the item.\n */\n value?: string\n /**\n * If provided, the tree item will be rendered as an async tree item.\n */\n asyncChildren?: () => Promise<ReactNode>\n}\n\nexport const useTreeItem = ({\n asyncChildren,\n children: childrenProp,\n defaultOpen,\n disabled = false,\n open: openProp,\n query,\n value: valueProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n ...rest\n}: UseTreeItemProps = {}) => {\n const context = useTreeItemContext()\n const {\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 } = useTreeContext()\n const [children, setChildren] = useState<ReactNode>(childrenProp)\n const [indeterminate, setIndeterminate] = useState(false)\n const [itemId, labelId, checkboxId] = useIds()\n const initialAsyncRef = useRef(false)\n const async = !!asyncChildren\n const group = async || Children.count(children) > 0\n const level: number = (context?.level ?? 0) + 1\n const value: string = filterEmpty([context?.value, valueProp]).join(\"/\")\n const nested = !!context?.value\n const selected = isArray(selectedValue)\n ? !!value && selectedValue.includes(value)\n : !!value && selectedValue === value\n const checked = !!value && checkedValue.includes(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 { descendants, register } = useTreeDescendant({\n id: itemId!,\n disabled,\n expanded: branchOpen.slice(0, -1).every(Boolean),\n group,\n query,\n value,\n })\n\n const [groupLoading, onGroupChildren] = useAsyncCallback(async () => {\n const children = await asyncChildren?.()\n\n setChildren(children)\n }, [asyncChildren])\n\n const onSelect = useCallback(\n (\n ev: (\n | Partial<KeyboardEvent<HTMLElement>>\n | Partial<MouseEvent<HTMLElement>>\n ) & { value?: string } = {},\n ) => {\n const selectedValue = ev.value ?? value\n\n if (disabled || !selectedValue) return\n\n if (multiple)\n onSelectedChange((prev) => {\n if (!isArray(prev)) return prev\n\n if (ev.ctrlKey || ev.metaKey) {\n if (prev.includes(selectedValue))\n return prev.filter((prevValue) => prevValue !== selectedValue)\n else return [...prev, selectedValue]\n } else if (ev.shiftKey && prev[0]) {\n if (prev[0] === selectedValue) return prev\n\n return getRangeValues(descendants)(prev[0], selectedValue)\n } else {\n return [selectedValue]\n }\n })\n else onSelectedChange(selectedValue)\n },\n [descendants, disabled, multiple, onSelectedChange, value],\n )\n\n const onGroupOpen = useCallback(() => {\n if (disabled || !value) 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 }, [disabled, async, onGroupChildren, onOpen, onExpandedChange, value])\n\n const onGroupClose = useCallback(() => {\n if (disabled || !value) return\n\n onClose()\n onExpandedChange(value)\n }, [disabled, onClose, onExpandedChange, value])\n\n const onGroupToggle = useCallback(() => {\n if (groupOpen) onGroupClose()\n else onGroupOpen()\n }, [groupOpen, onGroupClose, onGroupOpen])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLElement>) => {\n if (disabled || !value) return\n\n runKeyAction(ev, {\n a: () => {\n if (!multiple || !(ev.ctrlKey || ev.metaKey)) return\n\n const values = descendants\n .enabledValues()\n .map(({ value }) => value)\n .filter((value) => !isUndefined(value))\n\n onSelectedChange(values)\n },\n ArrowDown: () => {\n if ((ev.ctrlKey || ev.metaKey) && ev.shiftKey) {\n onExpandAll()\n } else {\n const descendant = descendants.enabledNextValue(\n activeDescendant.current,\n false,\n { expanded: true },\n )\n\n onActiveDescendant(descendant)\n\n if (descendant && ev.shiftKey && multiple)\n onSelect({ ctrlKey: true, value: descendant.value })\n }\n },\n ArrowLeft: () => {\n if (group && groupOpen) {\n onGroupClose()\n } else if (nested) {\n const descendant = getParentDescendant(descendants)(value)\n\n onActiveDescendant(descendant)\n }\n },\n ArrowRight: () => {\n if (!group) return\n\n if (groupOpen) {\n const descendant = descendants.enabledNextValue(\n activeDescendant.current,\n false,\n { expanded: true },\n )\n\n onActiveDescendant(descendant)\n } else {\n if (!groupLoading) onGroupOpen()\n }\n },\n ArrowUp: () => {\n if ((ev.ctrlKey || ev.metaKey) && ev.shiftKey) {\n onCollapseAll()\n\n if (!nested) return\n\n const descendant = getRootDescendant(descendants)(value)\n\n onActiveDescendant(descendant)\n } else {\n const descendant = descendants.enabledPrevValue(\n activeDescendant.current,\n false,\n { expanded: true },\n )\n\n onActiveDescendant(descendant)\n\n if (descendant && ev.shiftKey && multiple)\n onSelect({ ctrlKey: true, value: descendant.value })\n }\n },\n End: () => {\n const descendant = descendants\n .enabledValues({ expanded: true })\n .at(-1)\n\n onActiveDescendant(descendant)\n },\n Enter: () => {\n if (group) onGroupToggle()\n\n onSelect(ev)\n },\n Home: () => {\n const descendant = descendants.enabledValues({ expanded: true }).at(0)\n\n onActiveDescendant(descendant)\n },\n Space: () => {\n if (group) onGroupToggle()\n\n onSelect(ev)\n },\n })\n\n if (ev.key.length !== 1) return\n if (ev.ctrlKey || ev.metaKey || ev.altKey) return\n\n ev.preventDefault()\n\n onSearch(ev.key, query ?? value)\n },\n [\n activeDescendant,\n descendants,\n disabled,\n group,\n groupLoading,\n groupOpen,\n multiple,\n nested,\n onActiveDescendant,\n onCollapseAll,\n onExpandAll,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n onSearch,\n onSelect,\n onSelectedChange,\n query,\n value,\n ],\n )\n\n const onItemClick = useCallback(\n (ev: MouseEvent<HTMLLIElement>) => {\n ev.stopPropagation()\n\n if (disabled || !value) return\n\n if (group && !groupLoading)\n if (!ev.ctrlKey && !ev.metaKey && !ev.shiftKey) onGroupToggle()\n\n onSelect(ev)\n },\n [disabled, group, groupLoading, onGroupToggle, onSelect, value],\n )\n\n const onCheckboxChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (disabled || !value) return\n\n ev.stopPropagation()\n\n if (group) setIndeterminate(false)\n\n onCheckedChange((prev) => {\n const target = [value]\n\n if (group) {\n const { values } = getChildDescendants(descendants)(value)\n\n target.push(...values)\n }\n\n if (nested) {\n const parentValues = getParentValues(context.value)\n const parentTarget: string[] = []\n\n parentValues.forEach((parentValue) => {\n const { children } = getChildDescendants(descendants)(parentValue)\n const { allChecked } = getAllChecked(\n children,\n [...parentTarget, ...(ev.target.checked ? target : [])],\n !ev.target.checked ? target : [],\n )\n\n if (allChecked) parentTarget.push(parentValue)\n })\n\n if (!ev.target.checked) parentTarget.push(...parentValues)\n\n target.push(...parentTarget)\n }\n\n if (ev.target.checked) return [...new Set([...prev, ...target])]\n else return prev.filter((prevValue) => !target.includes(prevValue))\n })\n },\n [disabled, group, onCheckedChange, value, nested, descendants, context],\n )\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 onClose()\n }, [async, defaultExpanded, onClose, onGroupChildren, onOpen])\n\n useSafeLayoutEffect(() => {\n if (!group || !checkable) return\n\n const { children } = getChildDescendants(descendants)(value)\n const { indeterminate } = getAllChecked(children)\n\n setIndeterminate(indeterminate)\n }, [checkedValue])\n\n useSafeLayoutEffect(() => {\n if (!checkable) return\n\n const { node } = getParentDescendant(descendants)(value) ?? {}\n const checkbox = getCheckbox(node)\n\n if (!checkbox) return\n\n const cleanup = setAttribute(checkbox, \"aria-controls\", checkboxId)\n\n return cleanup\n }, [checkable, descendants])\n\n const getItemProps: PropGetter<\"li\"> = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: itemId,\n ref: mergeRefs(ref, register),\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"aria-level\": level,\n \"aria-selected\": ariaAttr(selected),\n \"data-disabled\": dataAttr(disabled),\n role: \"treeitem\",\n tabIndex: -1,\n ...props,\n onClick: handlerAll(props.onClick, onItemClick),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n [\n itemId,\n register,\n disabled,\n labelId,\n level,\n selected,\n onItemClick,\n onKeyDown,\n ],\n )\n\n const getGroupItemProps: PropGetter<\"li\"> = useCallback(\n (props = {}) => getItemProps({ \"aria-expanded\": groupOpen, ...props }),\n [getItemProps, groupOpen],\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, selected, groupLoading],\n )\n\n const getCheckboxProps: PropGetter<UseCheckboxProps> = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: checkboxId,\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-selected\": dataAttr(selected),\n checked,\n disabled,\n indeterminate,\n tabIndex: -1,\n ...props,\n onChange: handlerAll(props.onChange, onCheckboxChange),\n }),\n [\n checkboxId,\n labelId,\n selected,\n checked,\n disabled,\n indeterminate,\n onCheckboxChange,\n ],\n )\n\n const getGroupProps: PropGetter<\"ul\"> = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n \"aria-busy\": ariaAttr(groupLoading),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-disabled\": dataAttr(disabled),\n role: \"group\",\n ...props,\n }),\n [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 checked,\n children,\n disabled,\n group,\n groupLoading,\n groupOpen,\n indeterminate,\n level,\n props: rest,\n selected,\n value,\n getCheckboxProps,\n getGroupItemProps,\n getGroupProps,\n getIndicatorProps,\n getItemProps,\n getLabelProps,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n }\n}\n\nexport type UseTreeItemReturn = ReturnType<typeof useTreeItem>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-tree.js","names":["createContext"],"sources":["../../../../src/components/tree/use-tree.ts"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n RefObject,\n SetStateAction,\n} from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { Descendant, Descendants } from \"../../hooks/use-descendants\"\nimport type { UseDisclosureProps } from \"../../hooks/use-disclosure\"\nimport type { UseCheckboxProps } from \"../checkbox\"\nimport { Children, useCallback, useRef, useState } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useAsyncCallback } from \"../../hooks/use-async-callback\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { useDisclosure } from \"../../hooks/use-disclosure\"\nimport {\n ariaAttr,\n assignRef,\n createContext,\n cx,\n dataAttr,\n filterEmpty,\n handlerAll,\n isArray,\n isInputElement,\n isUndefined,\n match,\n mergeRefs,\n runKeyAction,\n setAttribute,\n useIds,\n useSafeLayoutEffect,\n} from \"../../utils\"\n\nexport interface TreeControl {\n collapse: () => void\n expand: () => void\n}\n\ninterface TreeDescendantProps {\n expanded: boolean\n group: boolean\n id: string\n value: string\n query?: string\n}\n\nconst {\n DescendantsContext: TreeDescendantsContext,\n useDescendant: useTreeDescendant,\n useDescendants: useTreeDescendants,\n} = createDescendants<HTMLElement, TreeDescendantProps>()\n\nexport { TreeDescendantsContext, useTreeDescendant, useTreeDescendants }\n\ninterface TreeContext extends Omit<\n UseTreeReturn,\n \"descendants\" | \"getRootProps\"\n> {}\n\nconst [TreeContext, useTreeContext] = createContext<TreeContext>({\n name: \"TreeContext\",\n})\n\nexport { TreeContext, useTreeContext }\n\ninterface TreeItemContext extends Pick<\n UseTreeItemReturn,\n | \"branchOpen\"\n | \"groupOpen\"\n | \"level\"\n | \"onGroupClose\"\n | \"onGroupOpen\"\n | \"onGroupToggle\"\n | \"value\"\n> {}\n\nconst [TreeItemContext, useTreeItemContext] = createContext<TreeItemContext>({\n name: \"TreeItemContext\",\n strict: false,\n})\n\nexport { TreeItemContext, useTreeItemContext }\n\nexport interface UseTreeProps<\n Multiple extends boolean = false,\n> extends HTMLProps<\"ul\"> {\n /**\n * If `true`, the tree will allow checkable items.\n *\n * @default false\n */\n checkable?: boolean\n /**\n * The checked value of the tree.\n */\n checkedValue?: string[]\n /**\n * Ref of the tree callbacks.\n */\n controlRef?: RefObject<null | TreeControl>\n /**\n * The initial checked value of the tree.\n */\n defaultCheckedValue?: string[]\n /**\n * The initial expanded value of the tree.\n */\n defaultExpandedValue?: string[]\n /**\n * The initial selected value of the tree.\n */\n defaultSelectedValue?: Multiple extends true ? string[] : string\n /**\n * The expanded value of the tree.\n */\n expandedValue?: string[]\n /**\n * If `true`, the tree will allow multiple selection.\n *\n * @default false\n */\n multiple?: Multiple\n /**\n * The selected value of the tree.\n */\n selectedValue?: Multiple extends true ? string[] : string\n /**\n * The callback invoked when checked value changes.\n */\n onCheckedChange?: (value: string[]) => void\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: Multiple extends true ? string[] : string) => void\n}\n\nexport const useTree = <Multiple extends boolean = false>({\n checkable = false,\n checkedValue: checkedValueProp,\n children,\n controlRef,\n defaultCheckedValue = [],\n defaultExpandedValue = [],\n defaultSelectedValue,\n expandedValue: expandedValueProp,\n multiple,\n selectedValue: selectedValueProp,\n onCheckedChange: onCheckedChangeProp,\n onExpandedChange: onExpandedChangeProp,\n onSelectedChange: onSelectedChangeProp,\n ...rest\n}: UseTreeProps<Multiple> = {}) => {\n type MaybeSelectedValue = Multiple extends true ? string[] : string\n\n const [selectedValue, setSelectedValue] = useControllableState({\n defaultValue:\n defaultSelectedValue ?? ((multiple ? [] : \"\") as MaybeSelectedValue),\n value: selectedValueProp,\n onChange: onSelectedChangeProp,\n })\n const [checkedValue, onCheckedChange] = useControllableState({\n defaultValue: defaultCheckedValue,\n value: checkedValueProp,\n onChange: onCheckedChangeProp,\n })\n const [expandedValue, setExpandedValue] = useControllableState({\n defaultValue: defaultExpandedValue,\n value: expandedValueProp,\n onChange: onExpandedChangeProp,\n })\n const descendants = useTreeDescendants()\n const activeDescendant = useRef<Descendant<\n HTMLElement,\n TreeDescendantProps\n > | null>(null)\n const searchRef = useRef<{ value: string; omitValue?: string }>({\n omitValue: undefined,\n value: \"\",\n })\n const timeoutRef = useRef<any>(null)\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 onActiveDescendant = useCallback(\n (\n descendant?: Descendant<HTMLElement, TreeDescendantProps>,\n shouldFocus = true,\n ) => {\n if (!descendant) return\n\n descendants.values().forEach(({ node }) => {\n node.tabIndex = -1\n })\n\n activeDescendant.current = descendant\n descendant.node.tabIndex = 0\n\n if (shouldFocus) descendant.node.focus()\n },\n [descendants],\n )\n\n const onSearch = useCallback(\n (value: string, omitValue: string) => {\n clearTimeout(timeoutRef.current)\n\n searchRef.current.value += value\n\n if (!searchRef.current.omitValue) searchRef.current.omitValue = omitValue\n\n timeoutRef.current = setTimeout(() => {\n searchRef.current = { omitValue: undefined, value: \"\" }\n }, 400)\n\n const values = descendants\n .enabledValues({ expanded: true })\n .filter(\n (descendant) =>\n !isUndefined(descendant.value) &&\n descendant.value !== searchRef.current.omitValue,\n )\n const descendant = values.find(({ query, value }) =>\n match(query ?? value, searchRef.current.value, \"startsWith\"),\n )\n\n if (descendant) onActiveDescendant(descendant)\n },\n [descendants, onActiveDescendant],\n )\n\n const onSelectedChange = useCallback(\n (value: SetStateAction<string | string[]>) => {\n setSelectedValue(value as SetStateAction<MaybeSelectedValue>)\n },\n [setSelectedValue],\n )\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 return [...prev, value]\n })\n },\n [setExpandedValue],\n )\n\n useSafeLayoutEffect(() => {\n const value = isArray(selectedValue) ? selectedValue.at(0) : selectedValue\n const expandedDescendants = descendants.enabledValues({ expanded: true })\n\n if (value) {\n const descendant = expandedDescendants.find(\n (descendant) => value === descendant.value,\n )\n\n if (descendant) onActiveDescendant(descendant, false)\n else onActiveDescendant(expandedDescendants.at(0), false)\n } else {\n onActiveDescendant(expandedDescendants.at(0), false)\n }\n }, [children])\n\n assignRef(controlRef, { collapse: onCollapseAll, expand: onExpandAll })\n\n const getRootProps: PropGetter<\"ul\"> = useCallback(\n (props) =>\n mergeProps(\n {\n \"aria-multiselectable\": ariaAttr(multiple || checkable),\n children,\n role: \"tree\",\n },\n rest,\n props,\n )(),\n [multiple, checkable, rest, children],\n )\n\n return {\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 }\n}\n\nexport type UseTreeReturn = ReturnType<typeof useTree>\n\nconst getRootDescendant =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (value: string) => {\n const segments = value.split(\"/\")\n\n if (segments.length <= 1) return\n\n const rootValue = segments.at(0)\n\n return descendants.enabledValues().find(({ value }) => value === rootValue)\n }\n\nconst getParentDescendant =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (value: string) => {\n const segments = value.split(\"/\")\n\n if (segments.length <= 1) return\n\n const parentValue = segments.slice(0, -1).join(\"/\")\n\n return descendants\n .enabledValues()\n .find(({ value }) => value === parentValue)\n }\n\nconst getChildDescendants =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (value: string) => {\n const children = descendants\n .enabledValues()\n .filter((descendant) => descendant.value.startsWith(value + \"/\"))\n const values = children\n .map(({ value }) => value)\n .filter((value) => !isUndefined(value))\n\n return { children, values }\n }\n\nconst getParentValues = (value: string) => {\n const segments = value.split(\"/\")\n\n return segments\n .reduce<string[]>((prev, current) => {\n const prevValue = prev.at(-1)\n return prevValue ? [...prev, [prevValue, current].join(\"/\")] : [current]\n }, [])\n .toReversed()\n}\n\nconst getCheckbox = (node?: HTMLElement) => {\n const el = node?.querySelector(\"input[type='checkbox']\")\n\n return isInputElement(el) ? el : null\n}\n\nconst getAllChecked = (\n descendants: Descendant<HTMLElement, TreeDescendantProps>[],\n trulyValues?: string[],\n falsyValues?: string[],\n) => {\n const checked = descendants.map(({ node, value }) => {\n if (value && trulyValues?.includes(value)) return true\n if (value && falsyValues?.includes(value)) return false\n\n const checkbox = getCheckbox(node)\n\n return !!checkbox?.checked\n })\n\n const allChecked = !!checked.length && checked.every(Boolean)\n const indeterminate = checked.some(Boolean) && !allChecked\n\n return { allChecked, checked, indeterminate }\n}\n\nconst getRangeValues =\n (descendants: Descendants<HTMLElement, TreeDescendantProps>) =>\n (start: string, end: string) => {\n const values = descendants.enabledValues()\n const [startIndex, endIndex] = [\n values.findIndex((descendant) => descendant.value === start),\n values.findIndex((descendant) => descendant.value === end),\n ].sort((a, b) => a - b)\n\n return values\n .slice(startIndex, endIndex! + 1)\n .map(({ value }) => value)\n .filter((value) => !isUndefined(value))\n .sort((a, b) => {\n if (a === start && b !== start) return -1\n if (a !== start && b === start) return 1\n\n return 0\n })\n }\n\nexport interface UseTreeItemProps\n extends HTMLProps<\"div\">, Omit<UseDisclosureProps, \"timing\"> {\n /**\n * If `true`, the tree item will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The query to search for in the tree item.\n */\n query?: string\n /**\n * The value of the item.\n */\n value?: string\n /**\n * If provided, the tree item will be rendered as an async tree item.\n */\n asyncChildren?: () => Promise<ReactNode>\n}\n\nexport const useTreeItem = ({\n asyncChildren,\n children: childrenProp,\n defaultOpen,\n disabled = false,\n open: openProp,\n query,\n value: valueProp,\n onClose: onCloseProp,\n onOpen: onOpenProp,\n ...rest\n}: UseTreeItemProps = {}) => {\n const context = useTreeItemContext()\n const {\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 } = useTreeContext()\n const [children, setChildren] = useState<ReactNode>(childrenProp)\n const [indeterminate, setIndeterminate] = useState(false)\n const [itemId, labelId, checkboxId] = useIds()\n const initialAsyncRef = useRef(false)\n const async = !!asyncChildren\n const group = async || Children.count(children) > 0\n const level: number = (context?.level ?? 0) + 1\n const value: string = filterEmpty([context?.value, valueProp]).join(\"/\")\n const nested = !!context?.value\n const selected = isArray(selectedValue)\n ? !!value && selectedValue.includes(value)\n : !!value && selectedValue === value\n const checked = !!value && checkedValue.includes(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 { descendants, register } = useTreeDescendant({\n id: itemId!,\n disabled,\n expanded: branchOpen.slice(0, -1).every(Boolean),\n group,\n query,\n value,\n })\n\n const [groupLoading, onGroupChildren] = useAsyncCallback(async () => {\n const children = await asyncChildren?.()\n\n setChildren(children)\n }, [asyncChildren])\n\n const onSelect = useCallback(\n (\n ev: (\n | Partial<KeyboardEvent<HTMLElement>>\n | Partial<MouseEvent<HTMLElement>>\n ) & { value?: string } = {},\n ) => {\n const selectedValue = ev.value ?? value\n\n if (disabled || !selectedValue) return\n\n if (multiple)\n onSelectedChange((prev) => {\n if (!isArray(prev)) return prev\n\n if (ev.ctrlKey || ev.metaKey) {\n if (prev.includes(selectedValue))\n return prev.filter((prevValue) => prevValue !== selectedValue)\n else return [...prev, selectedValue]\n } else if (ev.shiftKey && prev[0]) {\n if (prev[0] === selectedValue) return prev\n\n return getRangeValues(descendants)(prev[0], selectedValue)\n } else {\n return [selectedValue]\n }\n })\n else onSelectedChange(selectedValue)\n },\n [descendants, disabled, multiple, onSelectedChange, value],\n )\n\n const onGroupOpen = useCallback(() => {\n if (disabled || !value) 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 }, [disabled, async, onGroupChildren, onOpen, onExpandedChange, value])\n\n const onGroupClose = useCallback(() => {\n if (disabled || !value) return\n\n onClose()\n onExpandedChange(value)\n }, [disabled, onClose, onExpandedChange, value])\n\n const onGroupToggle = useCallback(() => {\n if (groupOpen) onGroupClose()\n else onGroupOpen()\n }, [groupOpen, onGroupClose, onGroupOpen])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLElement>) => {\n if (disabled || !value) return\n\n runKeyAction(ev, {\n a: () => {\n if (!multiple || !(ev.ctrlKey || ev.metaKey)) return\n\n const values = descendants\n .enabledValues()\n .map(({ value }) => value)\n .filter((value) => !isUndefined(value))\n\n onSelectedChange(values)\n },\n ArrowDown: () => {\n if ((ev.ctrlKey || ev.metaKey) && ev.shiftKey) {\n onExpandAll()\n } else {\n const descendant = descendants.enabledNextValue(\n activeDescendant.current,\n false,\n { expanded: true },\n )\n\n onActiveDescendant(descendant)\n\n if (descendant && ev.shiftKey && multiple)\n onSelect({ ctrlKey: true, value: descendant.value })\n }\n },\n ArrowLeft: () => {\n if (group && groupOpen) {\n onGroupClose()\n } else if (nested) {\n const descendant = getParentDescendant(descendants)(value)\n\n onActiveDescendant(descendant)\n }\n },\n ArrowRight: () => {\n if (!group) return\n\n if (groupOpen) {\n const descendant = descendants.enabledNextValue(\n activeDescendant.current,\n false,\n { expanded: true },\n )\n\n onActiveDescendant(descendant)\n } else {\n if (!groupLoading) onGroupOpen()\n }\n },\n ArrowUp: () => {\n if ((ev.ctrlKey || ev.metaKey) && ev.shiftKey) {\n onCollapseAll()\n\n if (!nested) return\n\n const descendant = getRootDescendant(descendants)(value)\n\n onActiveDescendant(descendant)\n } else {\n const descendant = descendants.enabledPrevValue(\n activeDescendant.current,\n false,\n { expanded: true },\n )\n\n onActiveDescendant(descendant)\n\n if (descendant && ev.shiftKey && multiple)\n onSelect({ ctrlKey: true, value: descendant.value })\n }\n },\n End: () => {\n const descendant = descendants\n .enabledValues({ expanded: true })\n .at(-1)\n\n onActiveDescendant(descendant)\n },\n Enter: () => {\n if (group) onGroupToggle()\n\n onSelect(ev)\n },\n Home: () => {\n const descendant = descendants.enabledValues({ expanded: true }).at(0)\n\n onActiveDescendant(descendant)\n },\n Space: () => {\n if (group) onGroupToggle()\n\n onSelect(ev)\n },\n })\n\n if (ev.key.length !== 1) return\n if (ev.ctrlKey || ev.metaKey || ev.altKey) return\n\n ev.preventDefault()\n\n onSearch(ev.key, query ?? value)\n },\n [\n activeDescendant,\n descendants,\n disabled,\n group,\n groupLoading,\n groupOpen,\n multiple,\n nested,\n onActiveDescendant,\n onCollapseAll,\n onExpandAll,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n onSearch,\n onSelect,\n onSelectedChange,\n query,\n value,\n ],\n )\n\n const onItemClick = useCallback(\n (ev: MouseEvent<HTMLLIElement>) => {\n ev.stopPropagation()\n\n if (disabled || !value) return\n\n if (group && !groupLoading)\n if (!ev.ctrlKey && !ev.metaKey && !ev.shiftKey) onGroupToggle()\n\n onSelect(ev)\n },\n [disabled, group, groupLoading, onGroupToggle, onSelect, value],\n )\n\n const onCheckboxChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (disabled || !value) return\n\n ev.stopPropagation()\n\n if (group) setIndeterminate(false)\n\n onCheckedChange((prev) => {\n const target = [value]\n\n if (group) {\n const { values } = getChildDescendants(descendants)(value)\n\n target.push(...values)\n }\n\n if (nested) {\n const parentValues = getParentValues(context.value)\n const parentTarget: string[] = []\n\n parentValues.forEach((parentValue) => {\n const { children } = getChildDescendants(descendants)(parentValue)\n const { allChecked } = getAllChecked(\n children,\n [...parentTarget, ...(ev.target.checked ? target : [])],\n !ev.target.checked ? target : [],\n )\n\n if (allChecked) parentTarget.push(parentValue)\n })\n\n if (!ev.target.checked) parentTarget.push(...parentValues)\n\n target.push(...parentTarget)\n }\n\n if (ev.target.checked) return [...new Set([...prev, ...target])]\n else return prev.filter((prevValue) => !target.includes(prevValue))\n })\n },\n [disabled, group, onCheckedChange, value, nested, descendants, context],\n )\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 onClose()\n }, [async, defaultExpanded, onClose, onGroupChildren, onOpen])\n\n useSafeLayoutEffect(() => {\n if (!group || !checkable) return\n\n const { children } = getChildDescendants(descendants)(value)\n const { indeterminate } = getAllChecked(children)\n\n setIndeterminate(indeterminate)\n }, [checkedValue])\n\n useSafeLayoutEffect(() => {\n if (!checkable) return\n\n const { node } = getParentDescendant(descendants)(value) ?? {}\n const checkbox = getCheckbox(node)\n\n if (!checkbox) return\n\n const cleanup = setAttribute(checkbox, \"aria-controls\", checkboxId)\n\n return cleanup\n }, [checkable, descendants])\n\n const getItemProps: PropGetter<\"li\"> = useCallback(\n ({ ref, \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: itemId,\n ref: mergeRefs(ref, register),\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"aria-level\": level,\n \"aria-selected\": ariaAttr(selected),\n \"data-disabled\": dataAttr(disabled),\n role: \"treeitem\",\n tabIndex: -1,\n ...props,\n onClick: handlerAll(props.onClick, onItemClick),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n [\n itemId,\n register,\n disabled,\n labelId,\n level,\n selected,\n onItemClick,\n onKeyDown,\n ],\n )\n\n const getGroupItemProps: PropGetter<\"li\"> = useCallback(\n (props = {}) => getItemProps({ \"aria-expanded\": groupOpen, ...props }),\n [getItemProps, groupOpen],\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, selected, groupLoading],\n )\n\n const getCheckboxProps: PropGetter<UseCheckboxProps> = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n id: checkboxId,\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-selected\": dataAttr(selected),\n checked,\n disabled,\n indeterminate,\n tabIndex: -1,\n ...props,\n onChange: handlerAll(props.onChange, onCheckboxChange),\n }),\n [\n checkboxId,\n labelId,\n selected,\n checked,\n disabled,\n indeterminate,\n onCheckboxChange,\n ],\n )\n\n const getGroupProps: PropGetter<\"ul\"> = useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, ...props } = {}) => ({\n \"aria-busy\": ariaAttr(groupLoading),\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n \"data-disabled\": dataAttr(disabled),\n role: \"group\",\n ...props,\n }),\n [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 checked,\n children,\n disabled,\n group,\n groupLoading,\n groupOpen,\n indeterminate,\n level,\n props: rest,\n selected,\n value,\n getCheckboxProps,\n getGroupItemProps,\n getGroupProps,\n getIndicatorProps,\n getItemProps,\n getLabelProps,\n onGroupClose,\n onGroupOpen,\n onGroupToggle,\n }\n}\n\nexport type UseTreeItemReturn = ReturnType<typeof useTreeItem>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-component.js","names":["createContext"],"sources":["../../../../src/core/components/create-component.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, FunctionComponent } from \"react\"\nimport type { AnyString, Dict, Merge } from \"../../utils\"\nimport type { CSSObject, CSSSlotObject } from \"../css\"\nimport type {\n ComponentSlotStyle,\n ComponentStyle,\n StyledOptions,\n System,\n WithoutThemeProps,\n} from \"../system\"\nimport type {\n As,\n DOMElement,\n HTMLStyledProps,\n Component as OriginalComponent,\n} from \"./index.types\"\nimport { Fragment } from \"react\"\nimport {\n createContext,\n cx,\n isArray,\n isFunction,\n isObject,\n isString,\n runIfFn,\n toArray,\n toCamelCase,\n toPascalCase,\n} from \"../../utils\"\nimport { styled, useSystem } from \"../system\"\nimport { chainProps, mergeProps } from \"./props\"\nimport {\n getSlotClassName,\n mergeSlotCSS,\n useComponentSlotStyle,\n useComponentStyle,\n} from \"./use-component-style\"\nimport { getClassName, getDisplayName } from \"./utils\"\n\ntype AsWithFragment = \"fragment\" | As\ntype ClassName = ((system: System) => string) | string\n\ntype Component<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n> = Y extends \"fragment\"\n ? FunctionComponent<M>\n : OriginalComponent<Exclude<Y, \"fragment\">, M>\n\nexport type ComponentSlotName<\n Y extends ComponentSlotStyle | ComponentStyle = ComponentSlotStyle,\n> = AnyString | Extract<keyof NonNullable<Y[\"base\"]>, string>\n\nexport type ComponentSlot<Y extends string> =\n | [Y, Y]\n | Y\n | { name: string; slot: [Y, Y] | Y }\n\nexport type InitialProps<Y extends Dict = Dict> =\n | ((props: Y) => any)\n | Partial<Y>\nexport type SuperProps<Y extends Dict = Dict> = ((props: Y) => any) | Y\n\nexport type SuperWithoutThemeProps<\n Y extends Dict = Dict,\n M extends Dict = Dict,\n D extends keyof Y = keyof Y,\n> = ((props: WithoutThemeProps<Y, M, D>) => any) | WithoutThemeProps<Y, M, D>\n\nexport interface UseComponentPropsOptions<\n Y extends number | string | symbol = string,\n> {\n className?: ClassName\n withContext?: boolean\n transferProps?: Y[]\n}\n\nexport interface ComponentOptions extends Omit<StyledOptions, \"transferProps\"> {\n className?: ClassName\n shouldStyleProps?: boolean\n}\n\ninterface classNameOptions<Y extends string = string> {\n className?: ClassName\n slot?: ComponentSlot<Y>\n}\n\nexport interface ComponentWithContextOptions<\n Y extends number | string | symbol = string,\n>\n extends ComponentOptions, UseComponentPropsOptions<Y> {}\n\nfunction createProxyComponent<\n Y extends AsWithFragment = \"div\",\n M extends Dict = Dict,\n>(el: FC<M> | Y, { shouldStyleProps, ...options }: ComponentOptions = {}) {\n options.shouldForwardProp ??= isFunction(el)\n shouldStyleProps ??= !isFunction(el)\n\n if (el === \"fragment\") el = Fragment\n\n if (shouldStyleProps || isString(el)) {\n const ProxyComponent = styled(el as As, options)\n\n ProxyComponent.displayName = \"ProxyComponent\"\n\n return ProxyComponent\n } else {\n el.displayName ??= \"ProxyComponent\"\n\n return el as FC<M>\n }\n}\n\nfunction withDisplayName<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n>(Component: FC<M>, displayName: string) {\n Object.defineProperty(Component, \"name\", { value: displayName })\n Object.defineProperty(Component, \"displayName\", { value: displayName })\n\n return Component as Component<Y, M>\n}\n\nfunction getSlotKey<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"unknown\"\n\n if (isArray(slot) || !isObject(slot))\n return toCamelCase(toArray(slot).join(\"-\"))\n else return toCamelCase(slot.name)\n}\n\nfunction getSlotName<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"\"\n\n if (isArray(slot))\n return slot.map((value) => toPascalCase(value as string)).join(\"\")\n else if (isObject(slot)) return toPascalCase(slot.name)\n else return toPascalCase(slot)\n}\n\nexport function createComponent<\n Y extends object = {},\n M extends ComponentStyle = Dict,\n D extends Dict = Dict,\n>(name: string, style?: M) {\n const defaultClassName = style?.className\n const defaultDisplayName = getDisplayName(name)\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${defaultDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${defaultDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(name?: string, className?: ClassName) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getClassName(name, defaultClassName)(system)\n\n return className\n }\n\n function useComponentProps<H extends Y = Y, R extends keyof H = keyof H>(\n props: H,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= defaultClassName\n className ??= getClassName(name)(system)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as H)\n : props\n const [, rest] = useComponentStyle(mergedProps, {\n name,\n className,\n style,\n transferProps,\n })\n\n return rest\n }\n\n function component<D extends AsWithFragment = \"div\", H extends Dict = Y>(\n el: D | FC<H>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperProps<H>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps<any>(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withContext<\n D extends AsWithFragment = \"div\",\n H extends Y = Y,\n R extends keyof H = keyof H,\n >(\n el: D | FC<WithoutThemeProps<H, M, R>>,\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<R> = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperWithoutThemeProps<H, M, R>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useComponentProps(computedProps, {\n className,\n withContext,\n transferProps,\n })\n const rest = chainProps<any>(...toArray(superProps))()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n useComponentContext,\n usePropsContext,\n withContext,\n useComponentProps,\n }\n}\n\nexport function createSlotComponent<\n Y extends object = {},\n M extends ComponentSlotStyle = Dict,\n D extends Dict = Dict,\n>(rootName: string, style?: M) {\n const rootClassName = style?.className\n const rootDisplayName = getDisplayName(rootName)\n const classNameMap = new Map<string, classNameOptions>()\n const [StyleContext, useStyleContext] = createContext<\n CSSSlotObject<ComponentSlotName<M>>\n >({\n name: `${rootDisplayName}StyleContext`,\n })\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${rootDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${rootDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(\n slot?: ComponentSlot<ComponentSlotName<M>>,\n className?: ClassName,\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return className\n }\n\n function useClassNames() {\n const system = useSystem()\n const entries = classNameMap.entries().map(([key, { className, slot }]) => {\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return [key, className]\n })\n\n return Object.fromEntries(\n entries.filter(([_, className]) => className),\n ) as { [key: string]: string }\n }\n\n function useRootComponentProps<\n Y extends Dict = {},\n R extends keyof Y = keyof Y,\n >(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ): [\n CSSSlotObject,\n Merge<WithoutThemeProps<Y, M, R>, { css?: CSSObject | CSSObject[] }>,\n ] {\n className = useClassName(slot, className)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as Y)\n : props\n const [css, rest] = useComponentSlotStyle(mergedProps, {\n name: rootName,\n className,\n style,\n slot,\n transferProps,\n })\n\n return [css, rest]\n }\n\n function useSlotComponentProps<Y extends Dict = {}>(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { className }: Omit<UseComponentPropsOptions, \"transferProps\"> = {},\n ) {\n className = useClassName(slot, className)\n\n const style = useStyleContext()\n\n return {\n ...props,\n className: cx(className, props.className),\n css: mergeSlotCSS(slot, style, props.css),\n }\n }\n\n function component<H extends AsWithFragment = \"div\", R extends Dict = Dict>(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n className = useClassName(slot, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withProvider<\n H extends AsWithFragment = \"div\",\n R extends Y = Y,\n T extends keyof R = keyof R,\n >(\n el: FC<WithoutThemeProps<R, M, T>> | H,\n slot: ComponentSlot<ComponentSlotName<M>> = \"root\",\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<T> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperWithoutThemeProps<R, M, T>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const [context, mergedProps] = useRootComponentProps(\n computedProps,\n slot,\n {\n className,\n withContext,\n transferProps,\n },\n )\n const rest = chainProps<any>(...superProps)()(mergedProps)\n\n return (\n <StyleContext value={context}>\n <ProxyComponent {...rest} />\n </StyleContext>\n )\n }, displayName)\n }\n }\n\n function withContext<\n H extends AsWithFragment = \"div\",\n R extends Dict = H extends DOMElement ? HTMLStyledProps<H> : Dict,\n >(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n name,\n className,\n withContext,\n ...options\n }: Omit<ComponentWithContextOptions, \"transferProps\"> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useSlotComponentProps(computedProps, slot, {\n className,\n withContext,\n })\n const rest = chainProps(...superProps)()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n StyleContext,\n useClassNames,\n useComponentContext,\n usePropsContext,\n useStyleContext,\n withContext,\n withProvider,\n useRootComponentProps,\n useSlotComponentProps,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-component.js","names":["createContext"],"sources":["../../../../src/core/components/create-component.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, FunctionComponent } from \"react\"\nimport type { AnyString, Dict, Merge } from \"../../utils\"\nimport type { CSSObject, CSSSlotObject } from \"../css\"\nimport type {\n ComponentSlotStyle,\n ComponentStyle,\n StyledOptions,\n System,\n WithoutThemeProps,\n} from \"../system\"\nimport type {\n As,\n DOMElement,\n HTMLStyledProps,\n Component as OriginalComponent,\n} from \"./index.types\"\nimport { Fragment } from \"react\"\nimport {\n createContext,\n cx,\n isArray,\n isFunction,\n isObject,\n isString,\n runIfFn,\n toArray,\n toCamelCase,\n toPascalCase,\n} from \"../../utils\"\nimport { styled, useSystem } from \"../system\"\nimport { chainProps, mergeProps } from \"./props\"\nimport {\n getSlotClassName,\n mergeSlotCSS,\n useComponentSlotStyle,\n useComponentStyle,\n} from \"./use-component-style\"\nimport { getClassName, getDisplayName } from \"./utils\"\n\ntype AsWithFragment = \"fragment\" | As\ntype ClassName = ((system: System) => string) | string\n\ntype Component<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n> = Y extends \"fragment\"\n ? FunctionComponent<M>\n : OriginalComponent<Exclude<Y, \"fragment\">, M>\n\nexport type ComponentSlotName<\n Y extends ComponentSlotStyle | ComponentStyle = ComponentSlotStyle,\n> = AnyString | Extract<keyof NonNullable<Y[\"base\"]>, string>\n\nexport type ComponentSlot<Y extends string> =\n | [Y, Y]\n | Y\n | { name: string; slot: [Y, Y] | Y }\n\nexport type InitialProps<Y extends Dict = Dict> =\n | ((props: Y) => any)\n | Partial<Y>\nexport type SuperProps<Y extends Dict = Dict> = ((props: Y) => any) | Y\n\nexport type SuperWithoutThemeProps<\n Y extends Dict = Dict,\n M extends Dict = Dict,\n D extends keyof Y = keyof Y,\n> = ((props: WithoutThemeProps<Y, M, D>) => any) | WithoutThemeProps<Y, M, D>\n\nexport interface UseComponentPropsOptions<\n Y extends number | string | symbol = string,\n> {\n className?: ClassName\n withContext?: boolean\n transferProps?: Y[]\n}\n\nexport interface ComponentOptions extends Omit<StyledOptions, \"transferProps\"> {\n className?: ClassName\n shouldStyleProps?: boolean\n}\n\ninterface classNameOptions<Y extends string = string> {\n className?: ClassName\n slot?: ComponentSlot<Y>\n}\n\nexport interface ComponentWithContextOptions<\n Y extends number | string | symbol = string,\n>\n extends ComponentOptions, UseComponentPropsOptions<Y> {}\n\nfunction createProxyComponent<\n Y extends AsWithFragment = \"div\",\n M extends Dict = Dict,\n>(el: FC<M> | Y, { shouldStyleProps, ...options }: ComponentOptions = {}) {\n options.shouldForwardProp ??= isFunction(el)\n shouldStyleProps ??= !isFunction(el)\n\n if (el === \"fragment\") el = Fragment\n\n if (shouldStyleProps || isString(el)) {\n const ProxyComponent = styled(el as As, options)\n\n ProxyComponent.displayName = \"ProxyComponent\"\n\n return ProxyComponent\n } else {\n el.displayName ??= \"ProxyComponent\"\n\n return el as FC<M>\n }\n}\n\nfunction withDisplayName<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n>(Component: FC<M>, displayName: string) {\n Object.defineProperty(Component, \"name\", { value: displayName })\n Object.defineProperty(Component, \"displayName\", { value: displayName })\n\n return Component as Component<Y, M>\n}\n\nfunction getSlotKey<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"unknown\"\n\n if (isArray(slot) || !isObject(slot))\n return toCamelCase(toArray(slot).join(\"-\"))\n else return toCamelCase(slot.name)\n}\n\nfunction getSlotName<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"\"\n\n if (isArray(slot))\n return slot.map((value) => toPascalCase(value as string)).join(\"\")\n else if (isObject(slot)) return toPascalCase(slot.name)\n else return toPascalCase(slot)\n}\n\nexport function createComponent<\n Y extends object = {},\n M extends ComponentStyle = Dict,\n D extends Dict = Dict,\n>(name: string, style?: M) {\n const defaultClassName = style?.className\n const defaultDisplayName = getDisplayName(name)\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${defaultDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${defaultDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(name?: string, className?: ClassName) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getClassName(name, defaultClassName)(system)\n\n return className\n }\n\n function useComponentProps<H extends Y = Y, R extends keyof H = keyof H>(\n props: H,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= defaultClassName\n className ??= getClassName(name)(system)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as H)\n : props\n const [, rest] = useComponentStyle(mergedProps, {\n name,\n className,\n style,\n transferProps,\n })\n\n return rest\n }\n\n function component<D extends AsWithFragment = \"div\", H extends Dict = Y>(\n el: D | FC<H>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperProps<H>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps<any>(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withContext<\n D extends AsWithFragment = \"div\",\n H extends Y = Y,\n R extends keyof H = keyof H,\n >(\n el: D | FC<WithoutThemeProps<H, M, R>>,\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<R> = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperWithoutThemeProps<H, M, R>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useComponentProps(computedProps, {\n className,\n withContext,\n transferProps,\n })\n const rest = chainProps<any>(...toArray(superProps))()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n useComponentContext,\n usePropsContext,\n withContext,\n useComponentProps,\n }\n}\n\nexport function createSlotComponent<\n Y extends object = {},\n M extends ComponentSlotStyle = Dict,\n D extends Dict = Dict,\n>(rootName: string, style?: M) {\n const rootClassName = style?.className\n const rootDisplayName = getDisplayName(rootName)\n const classNameMap = new Map<string, classNameOptions>()\n const [StyleContext, useStyleContext] = createContext<\n CSSSlotObject<ComponentSlotName<M>>\n >({\n name: `${rootDisplayName}StyleContext`,\n })\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${rootDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${rootDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(\n slot?: ComponentSlot<ComponentSlotName<M>>,\n className?: ClassName,\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return className\n }\n\n function useClassNames() {\n const system = useSystem()\n const entries = classNameMap.entries().map(([key, { className, slot }]) => {\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return [key, className]\n })\n\n return Object.fromEntries(\n entries.filter(([_, className]) => className),\n ) as { [key: string]: string }\n }\n\n function useRootComponentProps<\n Y extends Dict = {},\n R extends keyof Y = keyof Y,\n >(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ): [\n CSSSlotObject,\n Merge<WithoutThemeProps<Y, M, R>, { css?: CSSObject | CSSObject[] }>,\n ] {\n className = useClassName(slot, className)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as Y)\n : props\n const [css, rest] = useComponentSlotStyle(mergedProps, {\n name: rootName,\n className,\n style,\n slot,\n transferProps,\n })\n\n return [css, rest]\n }\n\n function useSlotComponentProps<Y extends Dict = {}>(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { className }: Omit<UseComponentPropsOptions, \"transferProps\"> = {},\n ) {\n className = useClassName(slot, className)\n\n const style = useStyleContext()\n\n return {\n ...props,\n className: cx(className, props.className),\n css: mergeSlotCSS(slot, style, props.css),\n }\n }\n\n function component<H extends AsWithFragment = \"div\", R extends Dict = Dict>(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n className = useClassName(slot, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withProvider<\n H extends AsWithFragment = \"div\",\n R extends Y = Y,\n T extends keyof R = keyof R,\n >(\n el: FC<WithoutThemeProps<R, M, T>> | H,\n slot: ComponentSlot<ComponentSlotName<M>> = \"root\",\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<T> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperWithoutThemeProps<R, M, T>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const [context, mergedProps] = useRootComponentProps(\n computedProps,\n slot,\n {\n className,\n withContext,\n transferProps,\n },\n )\n const rest = chainProps<any>(...superProps)()(mergedProps)\n\n return (\n <StyleContext value={context}>\n <ProxyComponent {...rest} />\n </StyleContext>\n )\n }, displayName)\n }\n }\n\n function withContext<\n H extends AsWithFragment = \"div\",\n R extends Dict = H extends DOMElement ? HTMLStyledProps<H> : Dict,\n >(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n name,\n className,\n withContext,\n ...options\n }: Omit<ComponentWithContextOptions, \"transferProps\"> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useSlotComponentProps(computedProps, slot, {\n className,\n withContext,\n })\n const rest = chainProps(...superProps)()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n StyleContext,\n useClassNames,\n useComponentContext,\n usePropsContext,\n useStyleContext,\n withContext,\n withProvider,\n useRootComponentProps,\n useSlotComponentProps,\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breakpoint.js","names":[],"sources":["../../../../src/core/system/breakpoint.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type {\n Breakpoint,\n BreakpointConfig,\n DefineThemeBreakpointTokens,\n} from \"./index.types\"\nimport { getPx, isObject } from \"../../utils\"\n\ninterface BreakpointQuery {\n breakpoint: Breakpoint\n maxW: number | undefined\n maxWQuery: string | undefined\n minMaxQuery: string | undefined\n minW: number | undefined\n minWQuery: string | undefined\n query: string | undefined\n}\n\nexport interface Breakpoints {\n keys: Breakpoint[]\n queries: BreakpointQuery[]\n queriesObj: { [key: string]: BreakpointQuery }\n getQuery: (key: string) => string | undefined\n isResponsive: (obj: any, strict?: boolean) => boolean\n isResponsiveKey: (key: string) => boolean\n}\n\nfunction createQuery(\n min: number | undefined,\n max: number | undefined,\n identifier = \"@media screen\",\n): string | undefined {\n const query = [identifier]\n\n if (min) query.push(\"and\", `(min-width: ${min}px)`)\n if (max) query.push(\"and\", `(max-width: ${max}px)`)\n\n return query.length > 1\n ? query.join(\" \").replace(/^@container(\\s+\\w*)?\\s+and/, `@container$1`)\n : undefined\n}\n\nfunction createQueries(breakpoints: Dict<number>, config: BreakpointConfig) {\n const { direction, identifier } = config\n const down = direction !== \"up\"\n\n const queryEntries = Object.entries(breakpoints)\n .map(([breakpoint, width], i, entry) => {\n const [, relatedWidth] = entry[i + 1] ?? []\n let minW = down ? relatedWidth : width\n let maxW = down ? width : relatedWidth\n\n if (breakpoint === \"base\")\n if (down) maxW = undefined\n else minW = undefined\n\n if (down) {\n if (minW) minW += 1\n } else {\n if (maxW) maxW -= 1\n }\n\n const maxWQuery = createQuery(undefined, maxW, identifier)\n const minWQuery = createQuery(minW, undefined, identifier)\n const minMaxQuery = createQuery(minW, maxW, identifier)\n const query = down ? maxWQuery : minWQuery\n\n return [\n breakpoint,\n {\n breakpoint: breakpoint as Breakpoint,\n maxW,\n maxWQuery,\n minMaxQuery,\n minW,\n minWQuery,\n query,\n },\n ] as const\n })\n .sort((a, b) =>\n down\n ? (b[1].maxW ?? Infinity) - (a[1].maxW ?? Infinity)\n : (a[1].minW ?? 0) - (b[1].minW ?? 0),\n )\n\n const queries = queryEntries.map(([_, query]) => query)\n const queriesObj = Object.fromEntries(queryEntries)\n\n return { queries, queriesObj }\n}\n\nfunction transformBreakpoints(\n breakpoints: Dict,\n config: BreakpointConfig,\n): Dict {\n return Object.fromEntries(\n Object.entries(breakpoints)\n .map(([name, value]) => [name, getPx(value)] as const)\n .sort((a, b) => {\n if (config.direction !== \"up\") return b[1] - a[1]\n else return a[1] - b[1]\n }),\n )\n}\n\nexport function createBreakpoints(\n breakpoints: DefineThemeBreakpointTokens = {},\n config: BreakpointConfig = {},\n): Breakpoints {\n config.base ??= \"9999px\"\n config.direction ??= \"down\"\n\n breakpoints.base = config.direction !== \"up\" ? config.base : \"0px\"\n\n const transformedBreakpoints = transformBreakpoints(breakpoints, config)\n const { queries, queriesObj } = createQueries(transformedBreakpoints, config)\n const keys = Object.keys(queriesObj) as Breakpoint[]\n\n function isResponsive(obj: any, strict = false) {\n if (!isObject(obj)) return false\n\n const providedKeys = Object.keys(obj) as Breakpoint[]\n\n if (!providedKeys.length) return false\n\n if (strict && !providedKeys.includes(\"base\")) return false\n\n return providedKeys.every((key) => keys.includes(key))\n }\n\n function isResponsiveKey(key: string) {\n return key in queriesObj\n }\n\n function getQuery(key: string) {\n return key in queriesObj ? queriesObj[key]?.query : undefined\n }\n\n return {\n getQuery,\n isResponsive,\n isResponsiveKey,\n keys,\n queries,\n queriesObj,\n }\n}\n"],"mappings":";;AA2BA,SAAS,YACP,KACA,KACA,aAAa,iBACO;CACpB,MAAM,QAAQ,CAAC,UAAU;CAEzB,IAAI,KAAK,MAAM,KAAK,OAAO,eAAe,IAAI,IAAI;CAClD,IAAI,KAAK,MAAM,KAAK,OAAO,eAAe,IAAI,IAAI;CAElD,OAAO,MAAM,SAAS,IAClB,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,8BAA8B,cAAc,IACpE,KAAA;AACN;AAEA,SAAS,cAAc,aAA2B,QAA0B;CAC1E,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,OAAO,cAAc;CAE3B,MAAM,eAAe,OAAO,QAAQ,WAAW,CAAC,CAC7C,KAAK,CAAC,YAAY,QAAQ,GAAG,UAAU;EACtC,MAAM,GAAG,gBAAgB,MAAM,IAAI,MAAM,CAAC;EAC1C,IAAI,OAAO,OAAO,eAAe;EACjC,IAAI,OAAO,OAAO,QAAQ;EAE1B,IAAI,eAAe,QACjB,IAAI,MAAM,OAAO,KAAA;OACZ,OAAO,KAAA;EAEd,IAAI;
|
|
1
|
+
{"version":3,"file":"breakpoint.js","names":[],"sources":["../../../../src/core/system/breakpoint.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type {\n Breakpoint,\n BreakpointConfig,\n DefineThemeBreakpointTokens,\n} from \"./index.types\"\nimport { getPx, isObject } from \"../../utils\"\n\ninterface BreakpointQuery {\n breakpoint: Breakpoint\n maxW: number | undefined\n maxWQuery: string | undefined\n minMaxQuery: string | undefined\n minW: number | undefined\n minWQuery: string | undefined\n query: string | undefined\n}\n\nexport interface Breakpoints {\n keys: Breakpoint[]\n queries: BreakpointQuery[]\n queriesObj: { [key: string]: BreakpointQuery }\n getQuery: (key: string) => string | undefined\n isResponsive: (obj: any, strict?: boolean) => boolean\n isResponsiveKey: (key: string) => boolean\n}\n\nfunction createQuery(\n min: number | undefined,\n max: number | undefined,\n identifier = \"@media screen\",\n): string | undefined {\n const query = [identifier]\n\n if (min) query.push(\"and\", `(min-width: ${min}px)`)\n if (max) query.push(\"and\", `(max-width: ${max}px)`)\n\n return query.length > 1\n ? query.join(\" \").replace(/^@container(\\s+\\w*)?\\s+and/, `@container$1`)\n : undefined\n}\n\nfunction createQueries(breakpoints: Dict<number>, config: BreakpointConfig) {\n const { direction, identifier } = config\n const down = direction !== \"up\"\n\n const queryEntries = Object.entries(breakpoints)\n .map(([breakpoint, width], i, entry) => {\n const [, relatedWidth] = entry[i + 1] ?? []\n let minW = down ? relatedWidth : width\n let maxW = down ? width : relatedWidth\n\n if (breakpoint === \"base\")\n if (down) maxW = undefined\n else minW = undefined\n\n if (down) {\n if (minW) minW += 1\n } else {\n if (maxW) maxW -= 1\n }\n\n const maxWQuery = createQuery(undefined, maxW, identifier)\n const minWQuery = createQuery(minW, undefined, identifier)\n const minMaxQuery = createQuery(minW, maxW, identifier)\n const query = down ? maxWQuery : minWQuery\n\n return [\n breakpoint,\n {\n breakpoint: breakpoint as Breakpoint,\n maxW,\n maxWQuery,\n minMaxQuery,\n minW,\n minWQuery,\n query,\n },\n ] as const\n })\n .sort((a, b) =>\n down\n ? (b[1].maxW ?? Infinity) - (a[1].maxW ?? Infinity)\n : (a[1].minW ?? 0) - (b[1].minW ?? 0),\n )\n\n const queries = queryEntries.map(([_, query]) => query)\n const queriesObj = Object.fromEntries(queryEntries)\n\n return { queries, queriesObj }\n}\n\nfunction transformBreakpoints(\n breakpoints: Dict,\n config: BreakpointConfig,\n): Dict {\n return Object.fromEntries(\n Object.entries(breakpoints)\n .map(([name, value]) => [name, getPx(value)] as const)\n .sort((a, b) => {\n if (config.direction !== \"up\") return b[1] - a[1]\n else return a[1] - b[1]\n }),\n )\n}\n\nexport function createBreakpoints(\n breakpoints: DefineThemeBreakpointTokens = {},\n config: BreakpointConfig = {},\n): Breakpoints {\n config.base ??= \"9999px\"\n config.direction ??= \"down\"\n\n breakpoints.base = config.direction !== \"up\" ? config.base : \"0px\"\n\n const transformedBreakpoints = transformBreakpoints(breakpoints, config)\n const { queries, queriesObj } = createQueries(transformedBreakpoints, config)\n const keys = Object.keys(queriesObj) as Breakpoint[]\n\n function isResponsive(obj: any, strict = false) {\n if (!isObject(obj)) return false\n\n const providedKeys = Object.keys(obj) as Breakpoint[]\n\n if (!providedKeys.length) return false\n\n if (strict && !providedKeys.includes(\"base\")) return false\n\n return providedKeys.every((key) => keys.includes(key))\n }\n\n function isResponsiveKey(key: string) {\n return key in queriesObj\n }\n\n function getQuery(key: string) {\n return key in queriesObj ? queriesObj[key]?.query : undefined\n }\n\n return {\n getQuery,\n isResponsive,\n isResponsiveKey,\n keys,\n queries,\n queriesObj,\n }\n}\n"],"mappings":";;AA2BA,SAAS,YACP,KACA,KACA,aAAa,iBACO;CACpB,MAAM,QAAQ,CAAC,UAAU;CAEzB,IAAI,KAAK,MAAM,KAAK,OAAO,eAAe,IAAI,IAAI;CAClD,IAAI,KAAK,MAAM,KAAK,OAAO,eAAe,IAAI,IAAI;CAElD,OAAO,MAAM,SAAS,IAClB,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,8BAA8B,cAAc,IACpE,KAAA;AACN;AAEA,SAAS,cAAc,aAA2B,QAA0B;CAC1E,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,OAAO,cAAc;CAE3B,MAAM,eAAe,OAAO,QAAQ,WAAW,CAAC,CAC7C,KAAK,CAAC,YAAY,QAAQ,GAAG,UAAU;EACtC,MAAM,GAAG,gBAAgB,MAAM,IAAI,MAAM,CAAC;EAC1C,IAAI,OAAO,OAAO,eAAe;EACjC,IAAI,OAAO,OAAO,QAAQ;EAE1B,IAAI,eAAe,QACjB,IAAI,MAAM,OAAO,KAAA;OACZ,OAAO,KAAA;EAEd,IAAI,MACE;OAAA,MAAM,QAAQ;EAAA,OAElB,IAAI,MAAM,QAAQ;EAGpB,MAAM,YAAY,YAAY,KAAA,GAAW,MAAM,UAAU;EACzD,MAAM,YAAY,YAAY,MAAM,KAAA,GAAW,UAAU;EACzD,MAAM,cAAc,YAAY,MAAM,MAAM,UAAU;EAGtD,OAAO,CACL,YACA;GACc;GACZ;GACA;GACA;GACA;GACA;GACA,OAXU,OAAO,YAAY;EAY/B,CACF;CACF,CAAC,CAAC,CACD,MAAM,GAAG,MACR,QACK,EAAE,EAAE,CAAC,QAAQ,aAAa,EAAE,EAAE,CAAC,QAAQ,aACvC,EAAE,EAAE,CAAC,QAAQ,MAAM,EAAE,EAAE,CAAC,QAAQ,EACvC;CAKF,OAAO;EAAE,SAHO,aAAa,KAAK,CAAC,GAAG,WAAW,KAGlC;EAAG,YAFC,OAAO,YAAY,YAEX;CAAE;AAC/B;AAEA,SAAS,qBACP,aACA,QACM;CACN,OAAO,OAAO,YACZ,OAAO,QAAQ,WAAW,CAAC,CACxB,KAAK,CAAC,MAAM,WAAW,CAAC,OAAA,GAAA,cAAA,MAAA,CAAY,KAAK,CAAC,CAAU,CAAC,CACrD,MAAM,GAAG,MAAM;EACd,IAAI,OAAO,cAAc,MAAM,OAAO,EAAE,KAAK,EAAE;OAC1C,OAAO,EAAE,KAAK,EAAE;CACvB,CAAC,CACL;AACF;AAEA,SAAgB,kBACd,cAA2C,CAAC,GAC5C,SAA2B,CAAC,GACf;CACb,OAAO,SAAS;CAChB,OAAO,cAAc;CAErB,YAAY,OAAO,OAAO,cAAc,OAAO,OAAO,OAAO;CAG7D,MAAM,EAAE,SAAS,eAAe,cADD,qBAAqB,aAAa,MACE,GAAG,MAAM;CAC5E,MAAM,OAAO,OAAO,KAAK,UAAU;CAEnC,SAAS,aAAa,KAAU,SAAS,OAAO;EAC9C,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,GAAG,GAAG,OAAO;EAE3B,MAAM,eAAe,OAAO,KAAK,GAAG;EAEpC,IAAI,CAAC,aAAa,QAAQ,OAAO;EAEjC,IAAI,UAAU,CAAC,aAAa,SAAS,MAAM,GAAG,OAAO;EAErD,OAAO,aAAa,OAAO,QAAQ,KAAK,SAAS,GAAG,CAAC;CACvD;CAEA,SAAS,gBAAgB,KAAa;EACpC,OAAO,OAAO;CAChB;CAEA,SAAS,SAAS,KAAa;EAC7B,OAAO,OAAO,aAAa,WAAW,IAAI,EAAE,QAAQ,KAAA;CACtD;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-provider.js","names":[],"sources":["../../../../src/core/system/environment-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, PropsWithChildren } from \"react\"\nimport { createContext, use, useCallback, useMemo, useRef } from \"react\"\nimport {\n createdDom,\n getDocument,\n getWindow,\n isHTMLElement,\n isShadowRoot,\n runIfFn,\n} from \"../../utils\"\n\nexport type RootNode = Document | Node | ShadowRoot\n\nexport interface Environment {\n getDocument: () => Document | undefined\n getRootElement: () => HTMLElement | undefined\n getRootNode: () => RootNode | undefined\n getWindow: () => undefined | Window\n}\n\nexport const defaultEnvironment: Environment = {\n getDocument: () => document,\n getRootElement: () => document.documentElement,\n getRootNode: () => document,\n getWindow: () => window,\n}\n\nconst EnvironmentContext = createContext<Environment>(defaultEnvironment)\n\nexport interface EnvironmentProviderProps extends PropsWithChildren {\n value?: (() => RootNode) | RootNode\n}\n\nexport const EnvironmentProvider: FC<EnvironmentProviderProps> = ({\n children,\n value,\n}) => {\n const ref = useRef<HTMLSpanElement>(null)\n\n const getRootNode = useCallback(() => {\n return runIfFn(value) ?? ref.current?.getRootNode() ?? document\n }, [value, ref])\n\n const getRootElement = useCallback(() => {\n const rootNode = getRootNode()\n\n if (isShadowRoot(rootNode) && isHTMLElement(rootNode.host))\n return rootNode.host\n if (isHTMLElement(rootNode)) return rootNode\n\n return getDocument(rootNode).documentElement\n }, [getRootNode])\n\n const context = useMemo<Environment>(() => {\n if (createdDom())\n return {\n getDocument: () => getDocument(getRootNode()),\n getRootElement,\n getRootNode,\n getWindow: () => getWindow(getRootNode()),\n }\n else\n return {\n getDocument: () => undefined,\n getRootElement: () => undefined,\n getRootNode: () => undefined,\n getWindow: () => undefined,\n }\n }, [getRootElement, getRootNode])\n\n return (\n <EnvironmentContext value={context}>\n {children}\n\n {!value ? <span ref={ref} hidden /> : null}\n </EnvironmentContext>\n )\n}\n\nexport const useEnvironment = () => {\n return use(EnvironmentContext)\n}\n"],"mappings":";;;;;AAsBA,MAAa,qBAAkC;CAC7C,mBAAmB;CACnB,sBAAsB,SAAS;CAC/B,mBAAmB;CACnB,iBAAiB;AACnB;AAEA,MAAM,qBAAqB,cAA2B,kBAAkB;AAMxE,MAAa,uBAAqD,EAChE,UACA,YACI;CACJ,MAAM,MAAM,OAAwB,IAAI;CAExC,MAAM,cAAc,kBAAkB;EACpC,QAAA,GAAA,cAAA,QAAA,CAAe,KAAK,KAAK,IAAI,SAAS,YAAY,KAAK;CACzD,GAAG,CAAC,OAAO,GAAG,CAAC;CAEf,MAAM,iBAAiB,kBAAkB;EACvC,MAAM,WAAW,YAAY;EAE7B,KAAA,GAAA,cAAA,aAAA,CAAiB,QAAQ,MAAA,GAAA,cAAA,cAAA,CAAmB,SAAS,IAAI,GACvD,OAAO,SAAS;EAClB,KAAA,GAAA,cAAA,cAAA,CAAkB,QAAQ,GAAG,OAAO;EAEpC,QAAA,GAAA,cAAA,YAAA,CAAmB,QAAQ,CAAC,CAAC;CAC/B,GAAG,CAAC,WAAW,CAAC;CAEhB,MAAM,UAAU,cAA2B;EACzC,KAAA,GAAA,cAAA,WAAA,CAAe,GACb,OAAO;GACL,oBAAA,GAAA,cAAA,YAAA,CAA+B,YAAY,CAAC;GAC5C;GACA;GACA,kBAAA,GAAA,cAAA,UAAA,CAA2B,YAAY,CAAC;EAC1C;OAEA,OAAO;GACL,mBAAmB,KAAA;GACnB,sBAAsB,KAAA;GACtB,mBAAmB,KAAA;GACnB,iBAAiB,KAAA;EACnB;CACJ,GAAG,CAAC,gBAAgB,WAAW,CAAC;CAEhC,OACE,qBAAC,oBAAD;EAAoB,OAAO;
|
|
1
|
+
{"version":3,"file":"environment-provider.js","names":[],"sources":["../../../../src/core/system/environment-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, PropsWithChildren } from \"react\"\nimport { createContext, use, useCallback, useMemo, useRef } from \"react\"\nimport {\n createdDom,\n getDocument,\n getWindow,\n isHTMLElement,\n isShadowRoot,\n runIfFn,\n} from \"../../utils\"\n\nexport type RootNode = Document | Node | ShadowRoot\n\nexport interface Environment {\n getDocument: () => Document | undefined\n getRootElement: () => HTMLElement | undefined\n getRootNode: () => RootNode | undefined\n getWindow: () => undefined | Window\n}\n\nexport const defaultEnvironment: Environment = {\n getDocument: () => document,\n getRootElement: () => document.documentElement,\n getRootNode: () => document,\n getWindow: () => window,\n}\n\nconst EnvironmentContext = createContext<Environment>(defaultEnvironment)\n\nexport interface EnvironmentProviderProps extends PropsWithChildren {\n value?: (() => RootNode) | RootNode\n}\n\nexport const EnvironmentProvider: FC<EnvironmentProviderProps> = ({\n children,\n value,\n}) => {\n const ref = useRef<HTMLSpanElement>(null)\n\n const getRootNode = useCallback(() => {\n return runIfFn(value) ?? ref.current?.getRootNode() ?? document\n }, [value, ref])\n\n const getRootElement = useCallback(() => {\n const rootNode = getRootNode()\n\n if (isShadowRoot(rootNode) && isHTMLElement(rootNode.host))\n return rootNode.host\n if (isHTMLElement(rootNode)) return rootNode\n\n return getDocument(rootNode).documentElement\n }, [getRootNode])\n\n const context = useMemo<Environment>(() => {\n if (createdDom())\n return {\n getDocument: () => getDocument(getRootNode()),\n getRootElement,\n getRootNode,\n getWindow: () => getWindow(getRootNode()),\n }\n else\n return {\n getDocument: () => undefined,\n getRootElement: () => undefined,\n getRootNode: () => undefined,\n getWindow: () => undefined,\n }\n }, [getRootElement, getRootNode])\n\n return (\n <EnvironmentContext value={context}>\n {children}\n\n {!value ? <span ref={ref} hidden /> : null}\n </EnvironmentContext>\n )\n}\n\nexport const useEnvironment = () => {\n return use(EnvironmentContext)\n}\n"],"mappings":";;;;;AAsBA,MAAa,qBAAkC;CAC7C,mBAAmB;CACnB,sBAAsB,SAAS;CAC/B,mBAAmB;CACnB,iBAAiB;AACnB;AAEA,MAAM,qBAAqB,cAA2B,kBAAkB;AAMxE,MAAa,uBAAqD,EAChE,UACA,YACI;CACJ,MAAM,MAAM,OAAwB,IAAI;CAExC,MAAM,cAAc,kBAAkB;EACpC,QAAA,GAAA,cAAA,QAAA,CAAe,KAAK,KAAK,IAAI,SAAS,YAAY,KAAK;CACzD,GAAG,CAAC,OAAO,GAAG,CAAC;CAEf,MAAM,iBAAiB,kBAAkB;EACvC,MAAM,WAAW,YAAY;EAE7B,KAAA,GAAA,cAAA,aAAA,CAAiB,QAAQ,MAAA,GAAA,cAAA,cAAA,CAAmB,SAAS,IAAI,GACvD,OAAO,SAAS;EAClB,KAAA,GAAA,cAAA,cAAA,CAAkB,QAAQ,GAAG,OAAO;EAEpC,QAAA,GAAA,cAAA,YAAA,CAAmB,QAAQ,CAAC,CAAC;CAC/B,GAAG,CAAC,WAAW,CAAC;CAEhB,MAAM,UAAU,cAA2B;EACzC,KAAA,GAAA,cAAA,WAAA,CAAe,GACb,OAAO;GACL,oBAAA,GAAA,cAAA,YAAA,CAA+B,YAAY,CAAC;GAC5C;GACA;GACA,kBAAA,GAAA,cAAA,UAAA,CAA2B,YAAY,CAAC;EAC1C;OAEA,OAAO;GACL,mBAAmB,KAAA;GACnB,sBAAsB,KAAA;GACtB,mBAAmB,KAAA;GACnB,iBAAiB,KAAA;EACnB;CACJ,GAAG,CAAC,gBAAgB,WAAW,CAAC;CAEhC,OACE,qBAAC,oBAAD;EAAoB,OAAO;EAA3B,UAAA,CACG,UAEA,CAAC,QAAQ,oBAAC,QAAD;GAAW;GAAK,QAAA;EAAQ,CAAA,IAAI,IACpB;;AAExB;AAEA,MAAa,uBAAuB;CAClC,OAAO,IAAI,kBAAkB;AAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styled.js","names":["createContext"],"sources":["../../../../src/core/system/styled.tsx"],"sourcesContent":["\"use client\"\n\nimport type { EmotionCache, SerializedStyles } from \"@emotion/utils\"\nimport type { FC } from \"react\"\nimport type { Dict } from \"../../utils\"\nimport type { As, ShouldForwardProp, StyledComponent } from \"../components\"\nimport type { CSSModifierObject, CSSPropObject } from \"../css\"\nimport type {\n ColorScheme,\n ComponentStyle,\n System,\n UsageTheme,\n} from \"./index.types\"\nimport { withEmotionCache } from \"@emotion/react\"\nimport { serializeStyles } from \"@emotion/serialize\"\nimport { useInsertionEffectAlwaysWithSyncFallback } from \"@emotion/use-insertion-effect-with-fallbacks\"\nimport {\n getRegisteredStyles,\n insertStyles,\n registerStyles,\n} from \"@emotion/utils\"\nimport { useMemo, useRef } from \"react\"\nimport isEqual from \"react-fast-compare\"\nimport { Slot } from \"../../components/slot\"\nimport {\n createContext,\n createdDom,\n cx,\n filterEmpty,\n filterUndefined,\n isString,\n isUndefined,\n runIfFn,\n splitObject,\n toArray,\n toKebabCase,\n} from \"../../utils\"\nimport {\n createShouldForwardProp,\n getDisplayName,\n useComponentStyle,\n} from \"../components\"\nimport { css } from \"../css\"\nimport { useSystem } from \"./system-provider\"\nimport { useTheme } from \"./theme-provider\"\n\ninterface InsertionProps {\n cache: EmotionCache\n htmlTag: boolean\n serialized: SerializedStyles\n}\n\nconst Insertion: FC<InsertionProps> = ({ cache, htmlTag, serialized }) => {\n registerStyles(cache, serialized, htmlTag)\n\n const style = useInsertionEffectAlwaysWithSyncFallback(() =>\n insertStyles(cache, serialized, htmlTag),\n )\n\n if (!createdDom() && !isUndefined(style)) {\n let className = serialized.name\n let next = serialized.next\n\n while (next !== undefined) {\n className = cx(className, next.name) ?? \"\"\n next = next.next\n }\n\n return (\n <style\n data-emotion={cx(cache.key, className)}\n dangerouslySetInnerHTML={{ __html: style }}\n nonce={cache.sheet.nonce}\n />\n )\n } else {\n return null\n }\n}\n\nconst useSplitProps = <Y extends Dict, M extends Dict>(\n props: Dict,\n shouldForwardProp?: ShouldForwardProp,\n) => {\n const propsRef = useRef(props)\n\n if (!isEqual(propsRef.current, props)) propsRef.current = props\n\n const computedProps = propsRef.current\n\n return useMemo(\n () => splitObject<Y, M>(computedProps, shouldForwardProp),\n [computedProps, shouldForwardProp],\n )\n}\n\nexport const [ColorSchemeContext, useColorSchemeContext] =\n createContext<ColorScheme>({\n name: \"ColorSchemeContext\",\n strict: false,\n })\n\nexport interface StyledOptions<\n Y extends CSSPropObject = CSSPropObject,\n M extends CSSModifierObject = CSSModifierObject,\n D extends CSSModifierObject = CSSModifierObject,\n H extends number | string | symbol = string,\n> extends Omit<ComponentStyle<Y, M, D>, \"className\"> {\n className?: ((system: System) => string) | string\n displayName?: string\n forwardAsChild?: boolean\n name?: string\n shouldForwardProp?: boolean | ShouldForwardProp\n target?: string\n forwardProps?: string[]\n transferProps?: H[]\n}\n\nexport function createStyled<\n Y extends As,\n M extends object = {},\n D extends CSSPropObject = CSSPropObject,\n H extends CSSModifierObject = CSSModifierObject,\n R extends CSSModifierObject = CSSModifierObject,\n>(\n el: Y,\n {\n name,\n base,\n compounds,\n props,\n sizes,\n variants,\n defaultProps,\n transferProps,\n ...options\n }: StyledOptions<D, H, R, keyof M> = {},\n) {\n const displayName = options.displayName ?? getDisplayName(name, \"\")\n const shouldForwardProp = !options.shouldForwardProp\n ? createShouldForwardProp(options.forwardProps)\n : undefined\n const style = filterUndefined({\n base,\n compounds,\n props,\n sizes,\n variants,\n defaultProps,\n })\n\n const StyledComponent = withEmotionCache<Dict>(function (\n { as: Component = el, asChild, children, ...props },\n cache,\n ref,\n ) {\n let className: string | undefined = \"\"\n\n const system = useSystem()\n const { theme } = useTheme<UsageTheme>()\n const componentStyleOptions = {\n name,\n className: system.utils.getClassName(\n runIfFn(options.className, system) ?? toKebabCase(name ?? \"\"),\n ),\n style,\n transferProps,\n }\n const registered = useRef<string[]>([])\n const htmlTag = isString(Component)\n const forwardAsChild =\n options.forwardAsChild || options.forwardProps?.includes(\"asChild\")\n const [omittedProps, styleProps] = useSplitProps(props, shouldForwardProp)\n const [, rest] = useComponentStyle<any, {}>(\n omittedProps,\n componentStyleOptions,\n )\n const [cssArray, colorScheme, forwardProps] = useMemo(() => {\n const { css, colorScheme, ...forwardProps } = rest\n\n return [toArray(css), colorScheme, forwardProps]\n }, [rest])\n\n styleProps.colorScheme ??= colorScheme\n\n if (forwardProps.className)\n className = getRegisteredStyles(\n cache.registered,\n registered.current,\n forwardProps.className,\n ).trim()\n\n const interpolations = useMemo(\n () => [\n ...registered.current,\n ...filterEmpty([...cssArray, styleProps].map(css(system, theme))),\n ],\n [cssArray, system, styleProps, theme],\n )\n\n const serialized = useMemo(\n () => serializeStyles(interpolations, cache.registered),\n [interpolations, cache.registered],\n )\n\n className = cx(\n className,\n serialized.styles ? `${cache.key}-${serialized.name}` : undefined,\n )\n className = cx(className, options.target)\n\n if (!className) className = undefined\n\n const mergedProps = { ...forwardProps, className, children }\n\n return (\n <ColorSchemeContext value={styleProps.colorScheme}>\n <Insertion cache={cache} htmlTag={htmlTag} serialized={serialized} />\n\n {asChild && !forwardAsChild ? (\n <Slot ref={ref} {...mergedProps} />\n ) : (\n <Component ref={ref} {...mergedProps} />\n )}\n </ColorSchemeContext>\n )\n }) as StyledComponent<Y, M>\n\n StyledComponent.displayName = displayName || \"StyledComponent\"\n\n return StyledComponent\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoDA,MAAM,aAAiC,EAAE,OAAO,SAAS,iBAAiB;CACxE,eAAe,OAAO,YAAY,OAAO;CAEzC,MAAM,QAAQ,+CACZ,aAAa,OAAO,YAAY,OAAO,CACzC;CAEA,IAAI,EAAA,GAAA,cAAA,WAAA,CAAY,KAAK,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK,GAAG;EACxC,IAAI,YAAY,WAAW;EAC3B,IAAI,OAAO,WAAW;EAEtB,OAAO,SAAS,KAAA,GAAW;GACzB,aAAA,GAAA,cAAA,GAAA,CAAe,WAAW,KAAK,IAAI,KAAK;GACxC,OAAO,KAAK;EACd;EAEA,OACE,oBAAC,SAAD;GACE,iBAAA,GAAA,cAAA,GAAA,CAAiB,MAAM,KAAK,SAAS;GACrC,yBAAyB,EAAE,QAAQ,MAAM;GACzC,OAAO,MAAM,MAAM;EACpB,CAAA;CAEL,OACE,OAAO;AAEX;AAEA,MAAM,iBACJ,OACA,sBACG;CACH,MAAM,WAAW,OAAO,KAAK;CAE7B,IAAI,CAAC,QAAQ,SAAS,SAAS,KAAK,GAAG,SAAS,UAAU;CAE1D,MAAM,gBAAgB,SAAS;CAE/B,OAAO,eAAA,GAAA,cAAA,YAAA,CACmB,eAAe,iBAAiB,GACxD,CAAC,eAAe,iBAAiB,CACnC;AACF;AAEA,MAAa,CAAC,oBAAoB,yBAChCA,gBAA2B;CACzB,MAAM;CACN,QAAQ;AACV,CAAC;AAkBH,SAAgB,aAOd,IACA,EACE,MACA,MACA,WACA,OACA,OACA,UACA,cACA,eACA,GAAG,YACgC,CAAC,GACtC;CACA,MAAM,cAAc,QAAQ,eAAe,eAAe,MAAM,EAAE;CAClE,MAAM,oBAAoB,CAAC,QAAQ,oBAC/B,wBAAwB,QAAQ,YAAY,IAC5C,KAAA;CACJ,MAAM,SAAA,GAAA,cAAA,gBAAA,CAAwB;EAC5B;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,kBAAkB,iBAAuB,SAC7C,EAAE,IAAI,YAAY,IAAI,SAAS,UAAU,GAAG,SAC5C,OACA,KACA;EACA,IAAI,YAAgC;EAEpC,MAAM,SAAS,UAAU;EACzB,MAAM,EAAE,UAAU,SAAqB;EACvC,MAAM,wBAAwB;GAC5B;GACA,WAAW,OAAO,MAAM,cAAA,GAAA,cAAA,QAAA,CACd,QAAQ,WAAW,MAAM,MAAA,GAAA,cAAA,YAAA,CAAiB,QAAQ,EAAE,CAC9D;GACA;GACA;EACF;EACA,MAAM,aAAa,OAAiB,CAAC,CAAC;EACtC,MAAM,WAAA,GAAA,cAAA,SAAA,CAAmB,SAAS;EAClC,MAAM,iBACJ,QAAQ,kBAAkB,QAAQ,cAAc,SAAS,SAAS;EACpE,MAAM,CAAC,cAAc,cAAc,cAAc,OAAO,iBAAiB;EACzE,MAAM,GAAG,QAAQ,kBACf,cACA,qBACF;EACA,MAAM,CAAC,UAAU,aAAa,gBAAgB,cAAc;GAC1D,MAAM,EAAE,KAAK,aAAa,GAAG,iBAAiB;GAE9C,OAAO
|
|
1
|
+
{"version":3,"file":"styled.js","names":["createContext"],"sources":["../../../../src/core/system/styled.tsx"],"sourcesContent":["\"use client\"\n\nimport type { EmotionCache, SerializedStyles } from \"@emotion/utils\"\nimport type { FC } from \"react\"\nimport type { Dict } from \"../../utils\"\nimport type { As, ShouldForwardProp, StyledComponent } from \"../components\"\nimport type { CSSModifierObject, CSSPropObject } from \"../css\"\nimport type {\n ColorScheme,\n ComponentStyle,\n System,\n UsageTheme,\n} from \"./index.types\"\nimport { withEmotionCache } from \"@emotion/react\"\nimport { serializeStyles } from \"@emotion/serialize\"\nimport { useInsertionEffectAlwaysWithSyncFallback } from \"@emotion/use-insertion-effect-with-fallbacks\"\nimport {\n getRegisteredStyles,\n insertStyles,\n registerStyles,\n} from \"@emotion/utils\"\nimport { useMemo, useRef } from \"react\"\nimport isEqual from \"react-fast-compare\"\nimport { Slot } from \"../../components/slot\"\nimport {\n createContext,\n createdDom,\n cx,\n filterEmpty,\n filterUndefined,\n isString,\n isUndefined,\n runIfFn,\n splitObject,\n toArray,\n toKebabCase,\n} from \"../../utils\"\nimport {\n createShouldForwardProp,\n getDisplayName,\n useComponentStyle,\n} from \"../components\"\nimport { css } from \"../css\"\nimport { useSystem } from \"./system-provider\"\nimport { useTheme } from \"./theme-provider\"\n\ninterface InsertionProps {\n cache: EmotionCache\n htmlTag: boolean\n serialized: SerializedStyles\n}\n\nconst Insertion: FC<InsertionProps> = ({ cache, htmlTag, serialized }) => {\n registerStyles(cache, serialized, htmlTag)\n\n const style = useInsertionEffectAlwaysWithSyncFallback(() =>\n insertStyles(cache, serialized, htmlTag),\n )\n\n if (!createdDom() && !isUndefined(style)) {\n let className = serialized.name\n let next = serialized.next\n\n while (next !== undefined) {\n className = cx(className, next.name) ?? \"\"\n next = next.next\n }\n\n return (\n <style\n data-emotion={cx(cache.key, className)}\n dangerouslySetInnerHTML={{ __html: style }}\n nonce={cache.sheet.nonce}\n />\n )\n } else {\n return null\n }\n}\n\nconst useSplitProps = <Y extends Dict, M extends Dict>(\n props: Dict,\n shouldForwardProp?: ShouldForwardProp,\n) => {\n const propsRef = useRef(props)\n\n if (!isEqual(propsRef.current, props)) propsRef.current = props\n\n const computedProps = propsRef.current\n\n return useMemo(\n () => splitObject<Y, M>(computedProps, shouldForwardProp),\n [computedProps, shouldForwardProp],\n )\n}\n\nexport const [ColorSchemeContext, useColorSchemeContext] =\n createContext<ColorScheme>({\n name: \"ColorSchemeContext\",\n strict: false,\n })\n\nexport interface StyledOptions<\n Y extends CSSPropObject = CSSPropObject,\n M extends CSSModifierObject = CSSModifierObject,\n D extends CSSModifierObject = CSSModifierObject,\n H extends number | string | symbol = string,\n> extends Omit<ComponentStyle<Y, M, D>, \"className\"> {\n className?: ((system: System) => string) | string\n displayName?: string\n forwardAsChild?: boolean\n name?: string\n shouldForwardProp?: boolean | ShouldForwardProp\n target?: string\n forwardProps?: string[]\n transferProps?: H[]\n}\n\nexport function createStyled<\n Y extends As,\n M extends object = {},\n D extends CSSPropObject = CSSPropObject,\n H extends CSSModifierObject = CSSModifierObject,\n R extends CSSModifierObject = CSSModifierObject,\n>(\n el: Y,\n {\n name,\n base,\n compounds,\n props,\n sizes,\n variants,\n defaultProps,\n transferProps,\n ...options\n }: StyledOptions<D, H, R, keyof M> = {},\n) {\n const displayName = options.displayName ?? getDisplayName(name, \"\")\n const shouldForwardProp = !options.shouldForwardProp\n ? createShouldForwardProp(options.forwardProps)\n : undefined\n const style = filterUndefined({\n base,\n compounds,\n props,\n sizes,\n variants,\n defaultProps,\n })\n\n const StyledComponent = withEmotionCache<Dict>(function (\n { as: Component = el, asChild, children, ...props },\n cache,\n ref,\n ) {\n let className: string | undefined = \"\"\n\n const system = useSystem()\n const { theme } = useTheme<UsageTheme>()\n const componentStyleOptions = {\n name,\n className: system.utils.getClassName(\n runIfFn(options.className, system) ?? toKebabCase(name ?? \"\"),\n ),\n style,\n transferProps,\n }\n const registered = useRef<string[]>([])\n const htmlTag = isString(Component)\n const forwardAsChild =\n options.forwardAsChild || options.forwardProps?.includes(\"asChild\")\n const [omittedProps, styleProps] = useSplitProps(props, shouldForwardProp)\n const [, rest] = useComponentStyle<any, {}>(\n omittedProps,\n componentStyleOptions,\n )\n const [cssArray, colorScheme, forwardProps] = useMemo(() => {\n const { css, colorScheme, ...forwardProps } = rest\n\n return [toArray(css), colorScheme, forwardProps]\n }, [rest])\n\n styleProps.colorScheme ??= colorScheme\n\n if (forwardProps.className)\n className = getRegisteredStyles(\n cache.registered,\n registered.current,\n forwardProps.className,\n ).trim()\n\n const interpolations = useMemo(\n () => [\n ...registered.current,\n ...filterEmpty([...cssArray, styleProps].map(css(system, theme))),\n ],\n [cssArray, system, styleProps, theme],\n )\n\n const serialized = useMemo(\n () => serializeStyles(interpolations, cache.registered),\n [interpolations, cache.registered],\n )\n\n className = cx(\n className,\n serialized.styles ? `${cache.key}-${serialized.name}` : undefined,\n )\n className = cx(className, options.target)\n\n if (!className) className = undefined\n\n const mergedProps = { ...forwardProps, className, children }\n\n return (\n <ColorSchemeContext value={styleProps.colorScheme}>\n <Insertion cache={cache} htmlTag={htmlTag} serialized={serialized} />\n\n {asChild && !forwardAsChild ? (\n <Slot ref={ref} {...mergedProps} />\n ) : (\n <Component ref={ref} {...mergedProps} />\n )}\n </ColorSchemeContext>\n )\n }) as StyledComponent<Y, M>\n\n StyledComponent.displayName = displayName || \"StyledComponent\"\n\n return StyledComponent\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-provider.js","names":["ThemeProvider","EmotionThemeProvider"],"sources":["../../../../src/core/system/theme-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ThemeProviderProps as EmotionThemeProviderProps } from \"@emotion/react\"\nimport type { FC, PropsWithChildren } from \"react\"\nimport type { Environment } from \"./environment-provider\"\nimport type {\n ChangeThemeScheme,\n StyledTheme,\n Theme,\n ThemeConfig,\n ThemeScheme,\n UsageTheme,\n} from \"./index.types\"\nimport type { Storage } from \"./storage-manager\"\nimport {\n ThemeProvider as EmotionThemeProvider,\n Global,\n ThemeContext,\n} from \"@emotion/react\"\nimport { use, useCallback, useEffect, useMemo, useState } from \"react\"\nimport {\n isEmptyObject,\n isObject,\n isShadowRoot,\n isUndefined,\n merge,\n} from \"../../utils\"\nimport { THEME_SCHEME_STORAGE_KEY } from \"../constant\"\nimport { css } from \"../css\"\nimport { useEnvironment } from \"./environment-provider\"\nimport { createStorageManager } from \"./storage-manager\"\nimport { useSystem } from \"./system-provider\"\nimport { createVarRules } from \"./var\"\n\nexport const getPreventTransition = (environment: Environment) => {\n const win = environment.getWindow()\n const doc = environment.getDocument()\n const root = environment.getRootElement()\n const rootNode = environment.getRootNode()\n\n if (!win || !doc || !root) return\n\n const css = doc.createElement(\"style\")\n const shadowRoot = isShadowRoot(rootNode)\n const selector = shadowRoot ? \":host, *\" : \"*\"\n const container = shadowRoot ? rootNode : doc.head\n\n const node = doc.createTextNode(\n `${selector}{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`,\n )\n\n css.appendChild(node)\n\n container.appendChild(css)\n\n return () => {\n const forceReflow = () => win.getComputedStyle(root)\n\n forceReflow()\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n container.removeChild(css)\n })\n })\n }\n}\n\nexport interface ThemeProviderProps\n extends\n PropsWithChildren,\n Omit<EmotionThemeProviderProps, \"children\" | \"theme\"> {\n /**\n * The config of the yamada ui.\n */\n config?: ThemeConfig\n /**\n * If `storage` is `cookie`, the cookie to use.\n * If not provided, the cookie will be set to `document.cookie`.\n */\n cookie?: string\n /**\n * The storage to use.\n * If you are using a server-side rendering library, you should use `cookie`.\n *\n * @default 'localStorage'\n */\n storage?: Storage\n /**\n * Key of value saved in storage.\n * By default, it is saved to `local storage`.\n */\n storageKey?: string\n /**\n * The theme of the yamada ui.\n */\n theme?: UsageTheme\n}\n\nexport const ThemeProvider: FC<ThemeProviderProps> = ({\n children,\n config,\n cookie,\n storage = cookie ? \"cookie\" : \"localStorage\",\n storageKey = THEME_SCHEME_STORAGE_KEY,\n theme = {},\n}) => {\n const { defaultThemeScheme = \"base\", disableTransitionOnChange } =\n config ?? {}\n const storageManager = useMemo(\n () => createStorageManager(storage, storageKey, defaultThemeScheme, cookie),\n [cookie, defaultThemeScheme, storage, storageKey],\n )\n const environment = useEnvironment()\n const [themeScheme, setThemeScheme] = useState<ThemeScheme>(\n storageManager.get(),\n )\n\n const changeThemeScheme: ChangeThemeScheme = useCallback(\n (themeScheme) => {\n const root = environment.getRootElement()\n\n const cleanup = disableTransitionOnChange\n ? getPreventTransition(environment)\n : undefined\n\n if (root) root.dataset.theme = themeScheme\n\n cleanup?.()\n\n setThemeScheme(themeScheme)\n\n storageManager.set(themeScheme)\n },\n [disableTransitionOnChange, environment, storageManager],\n )\n\n useEffect(() => {\n const themeScheme = storageManager.get()\n\n changeThemeScheme(themeScheme)\n }, [changeThemeScheme, storageManager])\n\n return (\n <EmotionThemeProvider theme={{ changeThemeScheme, themeScheme, ...theme }}>\n <GlobalStyles />\n\n {children}\n </EmotionThemeProvider>\n )\n}\n\nexport const GlobalStyles: FC = () => {\n const system = useSystem()\n const { theme } = useTheme<UsageTheme>()\n const { atRule, wrap } = system.layers\n\n const resetStyle = useMemo(() => {\n const style = theme.styles?.resetStyle\n\n if (!style || isEmptyObject(style)) return undefined\n\n return css(system, theme)(style)\n }, [system, theme])\n\n const globalStyle = useMemo(() => {\n const style = theme.styles?.globalStyle\n\n if (!style || isEmptyObject(style)) return undefined\n\n return css(system, theme)(style)\n }, [system, theme])\n\n const varRules = useMemo(() => {\n return createVarRules(\n system.config.css?.varRoot ?? \":host, :root\",\n system.cssVars,\n )\n }, [system])\n\n return (\n <Global\n styles={[\n atRule,\n wrap(\"tokens\", varRules),\n wrap(\"reset\", resetStyle),\n wrap(\"global\", globalStyle),\n ]}\n />\n )\n}\n\n/**\n * `useTheme` is a custom hook that returns a function for retrieving and switching themes.\n *\n * @see https://yamada-ui.com/docs/hooks/use-theme\n */\nexport const useTheme = <Y extends UsageTheme = Theme>() => {\n const internalTheme = use(ThemeContext) as StyledTheme<Y>\n\n const theme = useMemo(() => {\n const { themeScheme } = internalTheme\n\n if (isUndefined(themeScheme) || themeScheme === \"base\") return internalTheme\n\n const nestedTheme =\n \"themeSchemes\" in internalTheme && isObject(internalTheme.themeSchemes)\n ? internalTheme.themeSchemes[themeScheme as string]\n : undefined\n\n if (!nestedTheme) return internalTheme\n\n return merge<StyledTheme<Y>>(internalTheme, nestedTheme)\n }, [internalTheme])\n\n const value = useMemo(() => {\n const { changeThemeScheme, themeScheme } = internalTheme\n\n return {\n changeThemeScheme,\n internalTheme,\n theme,\n themeScheme,\n }\n }, [theme, internalTheme])\n\n return value\n}\n"],"mappings":";;;;;;;;;;;;AAkCA,MAAa,wBAAwB,gBAA6B;CAChE,MAAM,MAAM,YAAY,UAAU;CAClC,MAAM,MAAM,YAAY,YAAY;CACpC,MAAM,OAAO,YAAY,eAAe;CACxC,MAAM,WAAW,YAAY,YAAY;CAEzC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;CAE3B,MAAM,MAAM,IAAI,cAAc,OAAO;CACrC,MAAM,cAAA,GAAA,cAAA,aAAA,CAA0B,QAAQ;CACxC,MAAM,WAAW,aAAa,aAAa;CAC3C,MAAM,YAAY,aAAa,WAAW,IAAI;CAE9C,MAAM,OAAO,IAAI,eACf,GAAG,SAAS,wJACd;CAEA,IAAI,YAAY,IAAI;CAEpB,UAAU,YAAY,GAAG;CAEzB,aAAa;EACX,MAAM,oBAAoB,IAAI,iBAAiB,IAAI;EAEnD,YAAY;EAEZ,4BAA4B;GAC1B,4BAA4B;IAC1B,UAAU,YAAY,GAAG;GAC3B,CAAC;EACH,CAAC;CACH;AACF;AAiCA,MAAaA,mBAAyC,EACpD,UACA,QACA,QACA,UAAU,SAAS,WAAW,gBAC9B,aAAa,0BACb,QAAQ,CAAC,QACL;CACJ,MAAM,EAAE,qBAAqB,QAAQ,8BACnC,UAAU,CAAC;CACb,MAAM,iBAAiB,cACf,qBAAqB,SAAS,YAAY,oBAAoB,MAAM,GAC1E;EAAC;EAAQ;EAAoB;EAAS;CAAU,CAClD;CACA,MAAM,cAAc,eAAe;CACnC,MAAM,CAAC,aAAa,kBAAkB,SACpC,eAAe,IAAI,CACrB;CAEA,MAAM,oBAAuC,aAC1C,gBAAgB;EACf,MAAM,OAAO,YAAY,eAAe;EAExC,MAAM,UAAU,4BACZ,qBAAqB,WAAW,IAChC,KAAA;EAEJ,IAAI,MAAM,KAAK,QAAQ,QAAQ;EAE/B,UAAU;EAEV,eAAe,WAAW;EAE1B,eAAe,IAAI,WAAW;CAChC,GACA;EAAC;EAA2B;EAAa;CAAc,CACzD;CAEA,gBAAgB;EACd,MAAM,cAAc,eAAe,IAAI;EAEvC,kBAAkB,WAAW;CAC/B,GAAG,CAAC,mBAAmB,cAAc,CAAC;CAEtC,OACE,qBAACC,eAAD;EAAsB,OAAO;GAAE;GAAmB;GAAa,GAAG;EAAM;
|
|
1
|
+
{"version":3,"file":"theme-provider.js","names":["ThemeProvider","EmotionThemeProvider"],"sources":["../../../../src/core/system/theme-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ThemeProviderProps as EmotionThemeProviderProps } from \"@emotion/react\"\nimport type { FC, PropsWithChildren } from \"react\"\nimport type { Environment } from \"./environment-provider\"\nimport type {\n ChangeThemeScheme,\n StyledTheme,\n Theme,\n ThemeConfig,\n ThemeScheme,\n UsageTheme,\n} from \"./index.types\"\nimport type { Storage } from \"./storage-manager\"\nimport {\n ThemeProvider as EmotionThemeProvider,\n Global,\n ThemeContext,\n} from \"@emotion/react\"\nimport { use, useCallback, useEffect, useMemo, useState } from \"react\"\nimport {\n isEmptyObject,\n isObject,\n isShadowRoot,\n isUndefined,\n merge,\n} from \"../../utils\"\nimport { THEME_SCHEME_STORAGE_KEY } from \"../constant\"\nimport { css } from \"../css\"\nimport { useEnvironment } from \"./environment-provider\"\nimport { createStorageManager } from \"./storage-manager\"\nimport { useSystem } from \"./system-provider\"\nimport { createVarRules } from \"./var\"\n\nexport const getPreventTransition = (environment: Environment) => {\n const win = environment.getWindow()\n const doc = environment.getDocument()\n const root = environment.getRootElement()\n const rootNode = environment.getRootNode()\n\n if (!win || !doc || !root) return\n\n const css = doc.createElement(\"style\")\n const shadowRoot = isShadowRoot(rootNode)\n const selector = shadowRoot ? \":host, *\" : \"*\"\n const container = shadowRoot ? rootNode : doc.head\n\n const node = doc.createTextNode(\n `${selector}{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`,\n )\n\n css.appendChild(node)\n\n container.appendChild(css)\n\n return () => {\n const forceReflow = () => win.getComputedStyle(root)\n\n forceReflow()\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n container.removeChild(css)\n })\n })\n }\n}\n\nexport interface ThemeProviderProps\n extends\n PropsWithChildren,\n Omit<EmotionThemeProviderProps, \"children\" | \"theme\"> {\n /**\n * The config of the yamada ui.\n */\n config?: ThemeConfig\n /**\n * If `storage` is `cookie`, the cookie to use.\n * If not provided, the cookie will be set to `document.cookie`.\n */\n cookie?: string\n /**\n * The storage to use.\n * If you are using a server-side rendering library, you should use `cookie`.\n *\n * @default 'localStorage'\n */\n storage?: Storage\n /**\n * Key of value saved in storage.\n * By default, it is saved to `local storage`.\n */\n storageKey?: string\n /**\n * The theme of the yamada ui.\n */\n theme?: UsageTheme\n}\n\nexport const ThemeProvider: FC<ThemeProviderProps> = ({\n children,\n config,\n cookie,\n storage = cookie ? \"cookie\" : \"localStorage\",\n storageKey = THEME_SCHEME_STORAGE_KEY,\n theme = {},\n}) => {\n const { defaultThemeScheme = \"base\", disableTransitionOnChange } =\n config ?? {}\n const storageManager = useMemo(\n () => createStorageManager(storage, storageKey, defaultThemeScheme, cookie),\n [cookie, defaultThemeScheme, storage, storageKey],\n )\n const environment = useEnvironment()\n const [themeScheme, setThemeScheme] = useState<ThemeScheme>(\n storageManager.get(),\n )\n\n const changeThemeScheme: ChangeThemeScheme = useCallback(\n (themeScheme) => {\n const root = environment.getRootElement()\n\n const cleanup = disableTransitionOnChange\n ? getPreventTransition(environment)\n : undefined\n\n if (root) root.dataset.theme = themeScheme\n\n cleanup?.()\n\n setThemeScheme(themeScheme)\n\n storageManager.set(themeScheme)\n },\n [disableTransitionOnChange, environment, storageManager],\n )\n\n useEffect(() => {\n const themeScheme = storageManager.get()\n\n changeThemeScheme(themeScheme)\n }, [changeThemeScheme, storageManager])\n\n return (\n <EmotionThemeProvider theme={{ changeThemeScheme, themeScheme, ...theme }}>\n <GlobalStyles />\n\n {children}\n </EmotionThemeProvider>\n )\n}\n\nexport const GlobalStyles: FC = () => {\n const system = useSystem()\n const { theme } = useTheme<UsageTheme>()\n const { atRule, wrap } = system.layers\n\n const resetStyle = useMemo(() => {\n const style = theme.styles?.resetStyle\n\n if (!style || isEmptyObject(style)) return undefined\n\n return css(system, theme)(style)\n }, [system, theme])\n\n const globalStyle = useMemo(() => {\n const style = theme.styles?.globalStyle\n\n if (!style || isEmptyObject(style)) return undefined\n\n return css(system, theme)(style)\n }, [system, theme])\n\n const varRules = useMemo(() => {\n return createVarRules(\n system.config.css?.varRoot ?? \":host, :root\",\n system.cssVars,\n )\n }, [system])\n\n return (\n <Global\n styles={[\n atRule,\n wrap(\"tokens\", varRules),\n wrap(\"reset\", resetStyle),\n wrap(\"global\", globalStyle),\n ]}\n />\n )\n}\n\n/**\n * `useTheme` is a custom hook that returns a function for retrieving and switching themes.\n *\n * @see https://yamada-ui.com/docs/hooks/use-theme\n */\nexport const useTheme = <Y extends UsageTheme = Theme>() => {\n const internalTheme = use(ThemeContext) as StyledTheme<Y>\n\n const theme = useMemo(() => {\n const { themeScheme } = internalTheme\n\n if (isUndefined(themeScheme) || themeScheme === \"base\") return internalTheme\n\n const nestedTheme =\n \"themeSchemes\" in internalTheme && isObject(internalTheme.themeSchemes)\n ? internalTheme.themeSchemes[themeScheme as string]\n : undefined\n\n if (!nestedTheme) return internalTheme\n\n return merge<StyledTheme<Y>>(internalTheme, nestedTheme)\n }, [internalTheme])\n\n const value = useMemo(() => {\n const { changeThemeScheme, themeScheme } = internalTheme\n\n return {\n changeThemeScheme,\n internalTheme,\n theme,\n themeScheme,\n }\n }, [theme, internalTheme])\n\n return value\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-breakpoint.js","names":["noop"],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint.ts"],"sourcesContent":["\"use client\"\n\nimport type { Breakpoint } from \"../../core\"\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\"\nimport { useEnvironment, useSystem } from \"../../core\"\nimport { createdDom, isUndefined, noop } from \"../../utils\"\n\n/**\n * `useBreakpoint` is a custom hook that returns the current breakpoint.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint\n */\nexport const useBreakpoint = () => {\n const animationFrameId = useRef(0)\n const { breakpoints, config } = useSystem()\n const { getWindow } = useEnvironment()\n const {\n containerRef,\n direction = \"down\",\n identifier = \"@media screen\",\n } = config.breakpoint ?? {}\n const hasContainer = !!containerRef\n\n const queries = useMemo(() => {\n return breakpoints.queries.map(\n ({ breakpoint, maxW, minMaxQuery, minW }) => {\n const searchValue =\n identifier === \"@media screen\"\n ? \"@media screen and \"\n : `${identifier} `\n const query = minMaxQuery?.replace(searchValue, \"\") ?? \"\"\n\n return {\n breakpoint,\n maxW,\n minW,\n query,\n }\n },\n )\n }, [breakpoints, identifier])\n\n const hasQueries = !!queries.length\n\n const getBreakpoint = useCallback(\n (width?: number) => {\n if (isUndefined(width)) {\n const win = getWindow()\n\n if (hasContainer || !hasQueries) return \"base\"\n\n for (const { breakpoint, query } of queries) {\n const mql = win?.matchMedia(query)\n\n if (mql?.matches) return breakpoint\n }\n } else {\n for (const { breakpoint, maxW, minW } of queries)\n if (direction !== \"up\") {\n if ((minW ?? 0) <= width) return breakpoint\n } else {\n if (width <= (maxW ?? Infinity)) return breakpoint\n }\n }\n\n return \"base\"\n },\n [direction, getWindow, hasContainer, hasQueries, queries],\n )\n\n const breakpointRef = useRef<Breakpoint>(getBreakpoint())\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!hasContainer || !hasQueries) {\n const observer = queries.map(({ breakpoint, query }): (() => void) => {\n const mql = getWindow()?.matchMedia(query)\n\n const onChange = (e: MediaQueryListEvent) => {\n if (e.matches) breakpointRef.current = breakpoint\n\n listener()\n }\n\n mql?.addEventListener(\"change\", onChange)\n\n return () => {\n mql?.removeEventListener(\"change\", onChange)\n }\n })\n\n return () => {\n observer.forEach((unobserve) => unobserve())\n }\n } else if (createdDom()) {\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return\n\n cancelAnimationFrame(animationFrameId.current)\n\n const { width } = entry.contentRect\n\n breakpointRef.current = getBreakpoint(width)\n\n animationFrameId.current = requestAnimationFrame(listener)\n })\n\n if (containerRef.current) observer.observe(containerRef.current)\n\n return () => {\n observer.disconnect()\n\n if (process.env.NODE_ENV !== \"test\")\n cancelAnimationFrame(animationFrameId.current)\n }\n } else {\n return noop\n }\n },\n [containerRef, getBreakpoint, getWindow, hasContainer, hasQueries, queries],\n )\n\n const getSnapshot = useCallback(() => {\n return breakpointRef.current\n }, [])\n\n const breakpoint = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n return breakpoint\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,sBAAsB;CACjC,MAAM,mBAAmB,OAAO,CAAC;CACjC,MAAM,EAAE,aAAa,WAAW,UAAU;CAC1C,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,EACJ,cACA,YAAY,QACZ,aAAa,oBACX,OAAO,cAAc,CAAC;CAC1B,MAAM,eAAe,CAAC,CAAC;CAEvB,MAAM,UAAU,cAAc;EAC5B,OAAO,YAAY,QAAQ,KACxB,EAAE,YAAY,MAAM,aAAa,WAAW;GAC3C,MAAM,cACJ,eAAe,kBACX,uBACA,GAAG,WAAW;GAGpB,OAAO;IACL;IACA;IACA;IACA,OANY,aAAa,QAAQ,aAAa,EAAE,KAAK;GAOvD;EACF,CACF;CACF,GAAG,CAAC,aAAa,UAAU,CAAC;CAE5B,MAAM,aAAa,CAAC,CAAC,QAAQ;CAE7B,MAAM,gBAAgB,aACnB,UAAmB;EAClB,KAAA,GAAA,cAAA,YAAA,CAAgB,KAAK,GAAG;GACtB,MAAM,MAAM,UAAU;GAEtB,IAAI,gBAAgB,CAAC,YAAY,OAAO;GAExC,KAAK,MAAM,EAAE,YAAY,WAAW,SAGlC,KAFY,KAAK,WAAW,KAAK,EAAA,EAExB,SAAS,OAAO;EAE7B,OACE,KAAK,MAAM,EAAE,YAAY,MAAM,UAAU,SACvC,IAAI,cAAc;
|
|
1
|
+
{"version":3,"file":"use-breakpoint.js","names":["noop"],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint.ts"],"sourcesContent":["\"use client\"\n\nimport type { Breakpoint } from \"../../core\"\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\"\nimport { useEnvironment, useSystem } from \"../../core\"\nimport { createdDom, isUndefined, noop } from \"../../utils\"\n\n/**\n * `useBreakpoint` is a custom hook that returns the current breakpoint.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint\n */\nexport const useBreakpoint = () => {\n const animationFrameId = useRef(0)\n const { breakpoints, config } = useSystem()\n const { getWindow } = useEnvironment()\n const {\n containerRef,\n direction = \"down\",\n identifier = \"@media screen\",\n } = config.breakpoint ?? {}\n const hasContainer = !!containerRef\n\n const queries = useMemo(() => {\n return breakpoints.queries.map(\n ({ breakpoint, maxW, minMaxQuery, minW }) => {\n const searchValue =\n identifier === \"@media screen\"\n ? \"@media screen and \"\n : `${identifier} `\n const query = minMaxQuery?.replace(searchValue, \"\") ?? \"\"\n\n return {\n breakpoint,\n maxW,\n minW,\n query,\n }\n },\n )\n }, [breakpoints, identifier])\n\n const hasQueries = !!queries.length\n\n const getBreakpoint = useCallback(\n (width?: number) => {\n if (isUndefined(width)) {\n const win = getWindow()\n\n if (hasContainer || !hasQueries) return \"base\"\n\n for (const { breakpoint, query } of queries) {\n const mql = win?.matchMedia(query)\n\n if (mql?.matches) return breakpoint\n }\n } else {\n for (const { breakpoint, maxW, minW } of queries)\n if (direction !== \"up\") {\n if ((minW ?? 0) <= width) return breakpoint\n } else {\n if (width <= (maxW ?? Infinity)) return breakpoint\n }\n }\n\n return \"base\"\n },\n [direction, getWindow, hasContainer, hasQueries, queries],\n )\n\n const breakpointRef = useRef<Breakpoint>(getBreakpoint())\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!hasContainer || !hasQueries) {\n const observer = queries.map(({ breakpoint, query }): (() => void) => {\n const mql = getWindow()?.matchMedia(query)\n\n const onChange = (e: MediaQueryListEvent) => {\n if (e.matches) breakpointRef.current = breakpoint\n\n listener()\n }\n\n mql?.addEventListener(\"change\", onChange)\n\n return () => {\n mql?.removeEventListener(\"change\", onChange)\n }\n })\n\n return () => {\n observer.forEach((unobserve) => unobserve())\n }\n } else if (createdDom()) {\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return\n\n cancelAnimationFrame(animationFrameId.current)\n\n const { width } = entry.contentRect\n\n breakpointRef.current = getBreakpoint(width)\n\n animationFrameId.current = requestAnimationFrame(listener)\n })\n\n if (containerRef.current) observer.observe(containerRef.current)\n\n return () => {\n observer.disconnect()\n\n if (process.env.NODE_ENV !== \"test\")\n cancelAnimationFrame(animationFrameId.current)\n }\n } else {\n return noop\n }\n },\n [containerRef, getBreakpoint, getWindow, hasContainer, hasQueries, queries],\n )\n\n const getSnapshot = useCallback(() => {\n return breakpointRef.current\n }, [])\n\n const breakpoint = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n return breakpoint\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,sBAAsB;CACjC,MAAM,mBAAmB,OAAO,CAAC;CACjC,MAAM,EAAE,aAAa,WAAW,UAAU;CAC1C,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,EACJ,cACA,YAAY,QACZ,aAAa,oBACX,OAAO,cAAc,CAAC;CAC1B,MAAM,eAAe,CAAC,CAAC;CAEvB,MAAM,UAAU,cAAc;EAC5B,OAAO,YAAY,QAAQ,KACxB,EAAE,YAAY,MAAM,aAAa,WAAW;GAC3C,MAAM,cACJ,eAAe,kBACX,uBACA,GAAG,WAAW;GAGpB,OAAO;IACL;IACA;IACA;IACA,OANY,aAAa,QAAQ,aAAa,EAAE,KAAK;GAOvD;EACF,CACF;CACF,GAAG,CAAC,aAAa,UAAU,CAAC;CAE5B,MAAM,aAAa,CAAC,CAAC,QAAQ;CAE7B,MAAM,gBAAgB,aACnB,UAAmB;EAClB,KAAA,GAAA,cAAA,YAAA,CAAgB,KAAK,GAAG;GACtB,MAAM,MAAM,UAAU;GAEtB,IAAI,gBAAgB,CAAC,YAAY,OAAO;GAExC,KAAK,MAAM,EAAE,YAAY,WAAW,SAGlC,KAFY,KAAK,WAAW,KAAK,EAAA,EAExB,SAAS,OAAO;EAE7B,OACE,KAAK,MAAM,EAAE,YAAY,MAAM,UAAU,SACvC,IAAI,cAAc,MACX;QAAA,QAAQ,MAAM,OAAO,OAAO;EAAA,OAEjC,IAAI,UAAU,QAAQ,WAAW,OAAO;EAI9C,OAAO;CACT,GACA;EAAC;EAAW;EAAW;EAAc;EAAY;CAAO,CAC1D;CAEA,MAAM,gBAAgB,OAAmB,cAAc,CAAC;CAExD,MAAM,YAAY,aACf,aAAyB;EACxB,IAAI,CAAC,gBAAgB,CAAC,YAAY;GAChC,MAAM,WAAW,QAAQ,KAAK,EAAE,YAAY,YAA0B;IACpE,MAAM,MAAM,UAAU,CAAC,EAAE,WAAW,KAAK;IAEzC,MAAM,YAAY,MAA2B;KAC3C,IAAI,EAAE,SAAS,cAAc,UAAU;KAEvC,SAAS;IACX;IAEA,KAAK,iBAAiB,UAAU,QAAQ;IAExC,aAAa;KACX,KAAK,oBAAoB,UAAU,QAAQ;IAC7C;GACF,CAAC;GAED,aAAa;IACX,SAAS,SAAS,cAAc,UAAU,CAAC;GAC7C;EACF,OAAO,KAAA,GAAA,cAAA,WAAA,CAAe,GAAG;GACvB,MAAM,WAAW,IAAI,gBAAgB,CAAC,WAAW;IAC/C,IAAI,CAAC,OAAO;IAEZ,qBAAqB,iBAAiB,OAAO;IAE7C,MAAM,EAAE,UAAU,MAAM;IAExB,cAAc,UAAU,cAAc,KAAK;IAE3C,iBAAiB,UAAU,sBAAsB,QAAQ;GAC3D,CAAC;GAED,IAAI,aAAa,SAAS,SAAS,QAAQ,aAAa,OAAO;GAE/D,aAAa;IACX,SAAS,WAAW;IAGlB,qBAAqB,iBAAiB,OAAO;GACjD;EACF,OACE,OAAOA,cAAAA;CAEX,GACA;EAAC;EAAc;EAAe;EAAW;EAAc;EAAY;CAAO,CAC5E;CAEA,MAAM,cAAc,kBAAkB;EACpC,OAAO,cAAc;CACvB,GAAG,CAAC,CAAC;CAIL,OAFmB,qBAAqB,WAAW,aAAa,WAEhD;AAClB"}
|