@ifhover/leaf-ui 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/autocomplete/autocomplete.cjs +7 -3
- package/dist/cjs/autocomplete/autocomplete.cjs.map +1 -1
- package/dist/cjs/autocomplete/autocomplete.d.cts +2 -0
- package/dist/cjs/autocomplete/autocomplete.d.cts.map +1 -1
- package/dist/cjs/browser/modules/autocomplete/autocomplete.cjs +7 -3
- package/dist/cjs/browser/modules/autocomplete/autocomplete.cjs.map +1 -1
- package/dist/cjs/browser/modules/button/button.cjs.map +1 -1
- package/dist/cjs/browser/modules/cascader/cascader.cjs +9 -2
- package/dist/cjs/browser/modules/cascader/cascader.cjs.map +1 -1
- package/dist/cjs/browser/modules/colors.cjs +73 -7
- package/dist/cjs/browser/modules/colors.cjs.map +1 -1
- package/dist/cjs/browser/modules/commandpalette/commandpalette.cjs +10 -3
- package/dist/cjs/browser/modules/commandpalette/commandpalette.cjs.map +1 -1
- package/dist/cjs/browser/modules/config-provider/component-defaults.cjs.map +1 -1
- package/dist/cjs/browser/modules/config-provider/use-color-variables.cjs +18 -2
- package/dist/cjs/browser/modules/config-provider/use-color-variables.cjs.map +1 -1
- package/dist/cjs/browser/modules/drawer/drawer.cjs +7 -1
- package/dist/cjs/browser/modules/drawer/drawer.cjs.map +1 -1
- package/dist/cjs/browser/modules/dropdown/dropdown.cjs +25 -4
- package/dist/cjs/browser/modules/dropdown/dropdown.cjs.map +1 -1
- package/dist/cjs/browser/modules/form/form.cjs +38 -21
- package/dist/cjs/browser/modules/form/form.cjs.map +1 -1
- package/dist/cjs/browser/modules/image/viewer.cjs +8 -2
- package/dist/cjs/browser/modules/image/viewer.cjs.map +1 -1
- package/dist/cjs/browser/modules/index.cjs +3 -4
- package/dist/cjs/browser/modules/layout/layout.cjs +4 -1
- package/dist/cjs/browser/modules/layout/layout.cjs.map +1 -1
- package/dist/cjs/browser/modules/mentions/mentions.cjs +4 -2
- package/dist/cjs/browser/modules/mentions/mentions.cjs.map +1 -1
- package/dist/cjs/browser/modules/menu/index.cjs +5 -2
- package/dist/cjs/browser/modules/menu/menu.cjs +60 -18
- package/dist/cjs/browser/modules/menu/menu.cjs.map +1 -1
- package/dist/cjs/browser/modules/scrollbar/scrollbar.cjs +69 -19
- package/dist/cjs/browser/modules/scrollbar/scrollbar.cjs.map +1 -1
- package/dist/cjs/browser/modules/select/select.cjs +3 -3
- package/dist/cjs/browser/modules/select/select.cjs.map +1 -1
- package/dist/cjs/browser/modules/shared/floating.cjs +49 -20
- package/dist/cjs/browser/modules/shared/floating.cjs.map +1 -1
- package/dist/cjs/browser/modules/shared/scoped-portal.cjs +2 -23
- package/dist/cjs/browser/modules/shared/scoped-portal.cjs.map +1 -1
- package/dist/cjs/browser/modules/{segmented/index.cjs → shared/theme-variables.cjs} +27 -5
- package/dist/cjs/browser/modules/shared/theme-variables.cjs.map +1 -0
- package/dist/cjs/browser/modules/splitter/splitter.cjs +4 -1
- package/dist/cjs/browser/modules/splitter/splitter.cjs.map +1 -1
- package/dist/cjs/browser/modules/tabs/tabs.cjs +14 -8
- package/dist/cjs/browser/modules/tabs/tabs.cjs.map +1 -1
- package/dist/cjs/browser/modules/tailwind-tokens.cjs +1 -1
- package/dist/cjs/browser/modules/tailwind-tokens.cjs.map +1 -1
- package/dist/cjs/browser/modules/textarea/textarea.cjs +49 -21
- package/dist/cjs/browser/modules/textarea/textarea.cjs.map +1 -1
- package/dist/cjs/browser/modules/theme.cjs +53 -29
- package/dist/cjs/browser/modules/theme.cjs.map +1 -1
- package/dist/cjs/browser/modules/timeline/timeline.cjs +1 -1
- package/dist/cjs/browser/modules/timeline/timeline.cjs.map +1 -1
- package/dist/cjs/browser/modules/timepicker/time-panel.cjs +8 -2
- package/dist/cjs/browser/modules/timepicker/time-panel.cjs.map +1 -1
- package/dist/cjs/browser/modules/transfer/transfer.cjs +5 -5
- package/dist/cjs/browser/modules/transfer/transfer.cjs.map +1 -1
- package/dist/cjs/browser/modules/tree/tree.cjs +13 -6
- package/dist/cjs/browser/modules/tree/tree.cjs.map +1 -1
- package/dist/cjs/browser/modules/treeselect/treeselect.cjs +5 -4
- package/dist/cjs/browser/modules/treeselect/treeselect.cjs.map +1 -1
- package/dist/cjs/browser/modules/virtuallist/virtuallist.cjs +9 -3
- package/dist/cjs/browser/modules/virtuallist/virtuallist.cjs.map +1 -1
- package/dist/cjs/button/button.cjs.map +1 -1
- package/dist/cjs/button/button.d.cts +7 -2
- package/dist/cjs/button/button.d.cts.map +1 -1
- package/dist/cjs/cascader/cascader.cjs +9 -2
- package/dist/cjs/cascader/cascader.cjs.map +1 -1
- package/dist/cjs/cascader/cascader.d.cts +2 -0
- package/dist/cjs/cascader/cascader.d.cts.map +1 -1
- package/dist/cjs/colors.cjs +73 -7
- package/dist/cjs/colors.cjs.map +1 -1
- package/dist/cjs/colors.d.cts +3 -1
- package/dist/cjs/colors.d.cts.map +1 -1
- package/dist/cjs/commandpalette/commandpalette.cjs +10 -3
- package/dist/cjs/commandpalette/commandpalette.cjs.map +1 -1
- package/dist/cjs/commandpalette/commandpalette.d.cts.map +1 -1
- package/dist/cjs/config-provider/component-defaults.cjs.map +1 -1
- package/dist/cjs/config-provider/component-defaults.d.cts +3 -4
- package/dist/cjs/config-provider/component-defaults.d.cts.map +1 -1
- package/dist/cjs/config-provider/index.d.cts +1 -1
- package/dist/cjs/config-provider/index.d.cts.map +1 -1
- package/dist/cjs/config-provider/use-color-variables.cjs +18 -2
- package/dist/cjs/config-provider/use-color-variables.cjs.map +1 -1
- package/dist/cjs/config-provider/use-color-variables.d.cts.map +1 -1
- package/dist/cjs/drawer/drawer.cjs +7 -1
- package/dist/cjs/drawer/drawer.cjs.map +1 -1
- package/dist/cjs/drawer/drawer.d.cts.map +1 -1
- package/dist/cjs/dropdown/dropdown.cjs +25 -4
- package/dist/cjs/dropdown/dropdown.cjs.map +1 -1
- package/dist/cjs/dropdown/dropdown.d.cts +9 -1
- package/dist/cjs/dropdown/dropdown.d.cts.map +1 -1
- package/dist/cjs/form/form.cjs +38 -21
- package/dist/cjs/form/form.cjs.map +1 -1
- package/dist/cjs/form/form.d.cts +3 -1
- package/dist/cjs/form/form.d.cts.map +1 -1
- package/dist/cjs/image/viewer.cjs +8 -2
- package/dist/cjs/image/viewer.cjs.map +1 -1
- package/dist/cjs/image/viewer.d.cts.map +1 -1
- package/dist/cjs/index.cjs +3 -4
- package/dist/cjs/index.d.cts +3 -5
- package/dist/cjs/index.d.cts.map +1 -1
- package/dist/cjs/layout/layout.cjs +4 -1
- package/dist/cjs/layout/layout.cjs.map +1 -1
- package/dist/cjs/layout/layout.d.cts.map +1 -1
- package/dist/cjs/mentions/mentions.cjs +4 -2
- package/dist/cjs/mentions/mentions.cjs.map +1 -1
- package/dist/cjs/mentions/mentions.d.cts +2 -0
- package/dist/cjs/mentions/mentions.d.cts.map +1 -1
- package/dist/cjs/menu/index.cjs +5 -2
- package/dist/cjs/menu/index.d.cts +2 -2
- package/dist/cjs/menu/index.d.cts.map +1 -1
- package/dist/cjs/menu/menu.cjs +60 -18
- package/dist/cjs/menu/menu.cjs.map +1 -1
- package/dist/cjs/menu/menu.d.cts +4 -0
- package/dist/cjs/menu/menu.d.cts.map +1 -1
- package/dist/cjs/scrollbar/scrollbar.cjs +69 -19
- package/dist/cjs/scrollbar/scrollbar.cjs.map +1 -1
- package/dist/cjs/scrollbar/scrollbar.d.cts +12 -2
- package/dist/cjs/scrollbar/scrollbar.d.cts.map +1 -1
- package/dist/cjs/select/select.cjs +3 -3
- package/dist/cjs/select/select.cjs.map +1 -1
- package/dist/cjs/shared/floating.cjs +49 -20
- package/dist/cjs/shared/floating.cjs.map +1 -1
- package/dist/cjs/shared/floating.d.cts +3 -1
- package/dist/cjs/shared/floating.d.cts.map +1 -1
- package/dist/cjs/shared/scoped-portal.cjs +2 -23
- package/dist/cjs/shared/scoped-portal.cjs.map +1 -1
- package/dist/cjs/shared/scoped-portal.d.cts.map +1 -1
- package/dist/cjs/{segmented/index.cjs → shared/theme-variables.cjs} +27 -5
- package/dist/cjs/shared/theme-variables.cjs.map +1 -0
- package/dist/cjs/shared/theme-variables.d.cts +4 -0
- package/dist/cjs/shared/theme-variables.d.cts.map +1 -0
- package/dist/cjs/splitter/splitter.cjs +4 -1
- package/dist/cjs/splitter/splitter.cjs.map +1 -1
- package/dist/cjs/splitter/splitter.d.cts.map +1 -1
- package/dist/cjs/styles/alert.css +1 -1
- package/dist/cjs/styles/anchor.css +1 -1
- package/dist/cjs/styles/appbar.css +1 -1
- package/dist/cjs/styles/autocomplete.css +1 -1
- package/dist/cjs/styles/avatar.css +1 -1
- package/dist/cjs/styles/backtop.css +1 -1
- package/dist/cjs/styles/badge.css +1 -1
- package/dist/cjs/styles/breadcrumb.css +1 -1
- package/dist/cjs/styles/button.css +1 -1
- package/dist/cjs/styles/calendar.css +1 -1
- package/dist/cjs/styles/card.css +1 -1
- package/dist/cjs/styles/carousel.css +1 -1
- package/dist/cjs/styles/cascader.css +1 -1
- package/dist/cjs/styles/checkbox.css +1 -1
- package/dist/cjs/styles/collapse.css +1 -1
- package/dist/cjs/styles/colorpicker.css +1 -1
- package/dist/cjs/styles/commandpalette.css +1 -1
- package/dist/cjs/styles/components/alert.css +1 -1
- package/dist/cjs/styles/components/anchor.css +1 -1
- package/dist/cjs/styles/components/appbar.css +1 -1
- package/dist/cjs/styles/components/autocomplete.css +1 -1
- package/dist/cjs/styles/components/avatar.css +1 -1
- package/dist/cjs/styles/components/breadcrumb.css +1 -1
- package/dist/cjs/styles/components/button.css +1 -1
- package/dist/cjs/styles/components/calendar.css +1 -1
- package/dist/cjs/styles/components/card.css +1 -1
- package/dist/cjs/styles/components/carousel.css +1 -1
- package/dist/cjs/styles/components/cascader.css +1 -1
- package/dist/cjs/styles/components/checkbox.css +1 -1
- package/dist/cjs/styles/components/collapse.css +1 -1
- package/dist/cjs/styles/components/colorpicker.css +1 -1
- package/dist/cjs/styles/components/commandpalette.css +1 -1
- package/dist/cjs/styles/components/datepicker.css +1 -1
- package/dist/cjs/styles/components/descriptions.css +1 -1
- package/dist/cjs/styles/components/drawer.css +1 -1
- package/dist/cjs/styles/components/dropdown.css +1 -1
- package/dist/cjs/styles/components/errorboundary.css +1 -1
- package/dist/cjs/styles/components/filelist.css +1 -1
- package/dist/cjs/styles/components/form.css +1 -1
- package/dist/cjs/styles/components/image.css +1 -1
- package/dist/cjs/styles/components/input.css +1 -1
- package/dist/cjs/styles/components/inputnumber.css +1 -1
- package/dist/cjs/styles/components/inputotp.css +1 -1
- package/dist/cjs/styles/components/layout.css +1 -1
- package/dist/cjs/styles/components/loading.css +1 -1
- package/dist/cjs/styles/components/loadingbar.css +1 -1
- package/dist/cjs/styles/components/mentions.css +1 -1
- package/dist/cjs/styles/components/menu.css +1 -1
- package/dist/cjs/styles/components/message.css +1 -1
- package/dist/cjs/styles/components/modal.css +1 -1
- package/dist/cjs/styles/components/notification.css +1 -1
- package/dist/cjs/styles/components/pagination.css +1 -1
- package/dist/cjs/styles/components/popover.css +1 -1
- package/dist/cjs/styles/components/progress.css +1 -1
- package/dist/cjs/styles/components/radio.css +1 -1
- package/dist/cjs/styles/components/rate.css +1 -1
- package/dist/cjs/styles/components/scrollarea.css +1 -1
- package/dist/cjs/styles/components/scrollbar.css +1 -1
- package/dist/cjs/styles/components/select.css +1 -1
- package/dist/cjs/styles/components/shared-calendar.css +1 -1
- package/dist/cjs/styles/components/slider.css +1 -1
- package/dist/cjs/styles/components/splitter.css +1 -1
- package/dist/cjs/styles/components/steps.css +1 -1
- package/dist/cjs/styles/components/switch.css +1 -1
- package/dist/cjs/styles/components/table.css +1 -1
- package/dist/cjs/styles/components/tabletanstack.css +1 -1
- package/dist/cjs/styles/components/tabs.css +1 -1
- package/dist/cjs/styles/components/tag.css +1 -1
- package/dist/cjs/styles/components/textarea.css +1 -1
- package/dist/cjs/styles/components/timepicker.css +1 -1
- package/dist/cjs/styles/components/tooltip.css +1 -1
- package/dist/cjs/styles/components/tour.css +1 -1
- package/dist/cjs/styles/components/transfer.css +1 -1
- package/dist/cjs/styles/components/tree.css +1 -1
- package/dist/cjs/styles/components/treeselect.css +1 -1
- package/dist/cjs/styles/components/typography.css +1 -1
- package/dist/cjs/styles/components/upload.css +1 -1
- package/dist/cjs/styles/components/virtuallist.css +1 -1
- package/dist/cjs/styles/config-provider.css +1 -1
- package/dist/cjs/styles/confirm.css +1 -1
- package/dist/cjs/styles/datepicker.css +1 -1
- package/dist/cjs/styles/daterangepicker.css +1 -1
- package/dist/cjs/styles/datetimepicker.css +1 -1
- package/dist/cjs/styles/descriptions.css +1 -1
- package/dist/cjs/styles/divider.css +1 -1
- package/dist/cjs/styles/drawer.css +1 -1
- package/dist/cjs/styles/dropdown.css +1 -1
- package/dist/cjs/styles/empty.css +1 -1
- package/dist/cjs/styles/errorboundary.css +1 -1
- package/dist/cjs/styles/filelist.css +1 -1
- package/dist/cjs/styles/flex.css +1 -1
- package/dist/cjs/styles/floatbutton.css +1 -1
- package/dist/cjs/styles/form.css +1 -1
- package/dist/cjs/styles/foundation.css +1 -1
- package/dist/cjs/styles/grid.css +1 -1
- package/dist/cjs/styles/image.css +1 -1
- package/dist/cjs/styles/index.css +1380 -716
- package/dist/cjs/styles/index.css.map +1 -1
- package/dist/cjs/styles/infinitescroll.css +1 -1
- package/dist/cjs/styles/input.css +1 -1
- package/dist/cjs/styles/inputmask.css +1 -1
- package/dist/cjs/styles/inputnumber.css +1 -1
- package/dist/cjs/styles/inputotp.css +1 -1
- package/dist/cjs/styles/layout.css +1 -1
- package/dist/cjs/styles/loading.css +1 -1
- package/dist/cjs/styles/loadingbar.css +1 -1
- package/dist/cjs/styles/masonry.css +1 -1
- package/dist/cjs/styles/mentions.css +1 -1
- package/dist/cjs/styles/menu.css +1 -1
- package/dist/cjs/styles/message.css +1 -1
- package/dist/cjs/styles/modal.css +1 -1
- package/dist/cjs/styles/notification.css +1 -1
- package/dist/cjs/styles/pagination.css +1 -1
- package/dist/cjs/styles/popconfirm.css +1 -1
- package/dist/cjs/styles/popover.css +1 -1
- package/dist/cjs/styles/progress.css +1 -1
- package/dist/cjs/styles/qrcode.css +1 -1
- package/dist/cjs/styles/radio.css +1 -1
- package/dist/cjs/styles/rate.css +1 -1
- package/dist/cjs/styles/result.css +1 -1
- package/dist/cjs/styles/scrollarea.css +1 -1
- package/dist/cjs/styles/scrollbar.css +1 -1
- package/dist/cjs/styles/select.css +1 -1
- package/dist/cjs/styles/skeleton.css +1 -1
- package/dist/cjs/styles/slider.css +1 -1
- package/dist/cjs/styles/space.css +1 -1
- package/dist/cjs/styles/splitter.css +1 -1
- package/dist/cjs/styles/statistic.css +1 -1
- package/dist/cjs/styles/steps.css +1 -1
- package/dist/cjs/styles/switch.css +1 -1
- package/dist/cjs/styles/table.css +1 -1
- package/dist/cjs/styles/tabletanstack.css +1 -1
- package/dist/cjs/styles/tabs.css +1 -1
- package/dist/cjs/styles/tag.css +1 -1
- package/dist/cjs/styles/textarea.css +1 -1
- package/dist/cjs/styles/timeline.css +1 -1
- package/dist/cjs/styles/timepicker.css +1 -1
- package/dist/cjs/styles/timerangepicker.css +1 -1
- package/dist/cjs/styles/tooltip.css +1 -1
- package/dist/cjs/styles/tour.css +1 -1
- package/dist/cjs/styles/transfer.css +1 -1
- package/dist/cjs/styles/tree.css +1 -1
- package/dist/cjs/styles/treeselect.css +1 -1
- package/dist/cjs/styles/typography.css +1 -1
- package/dist/cjs/styles/upload.css +1 -1
- package/dist/cjs/styles/virtuallist.css +1 -1
- package/dist/cjs/tabs/tabs.cjs +14 -8
- package/dist/cjs/tabs/tabs.cjs.map +1 -1
- package/dist/cjs/tabs/tabs.d.cts +4 -2
- package/dist/cjs/tabs/tabs.d.cts.map +1 -1
- package/dist/cjs/tailwind-tokens.cjs +1 -1
- package/dist/cjs/tailwind-tokens.cjs.map +1 -1
- package/dist/cjs/tailwind-tokens.d.cts.map +1 -1
- package/dist/cjs/textarea/textarea.cjs +49 -21
- package/dist/cjs/textarea/textarea.cjs.map +1 -1
- package/dist/cjs/textarea/textarea.d.cts.map +1 -1
- package/dist/cjs/theme.cjs +53 -29
- package/dist/cjs/theme.cjs.map +1 -1
- package/dist/cjs/theme.d.cts +15 -0
- package/dist/cjs/theme.d.cts.map +1 -1
- package/dist/cjs/timeline/timeline.cjs +1 -1
- package/dist/cjs/timeline/timeline.cjs.map +1 -1
- package/dist/cjs/timeline/timeline.d.cts.map +1 -1
- package/dist/cjs/timepicker/time-panel.cjs +8 -2
- package/dist/cjs/timepicker/time-panel.cjs.map +1 -1
- package/dist/cjs/timepicker/time-panel.d.cts.map +1 -1
- package/dist/cjs/transfer/transfer.cjs +5 -5
- package/dist/cjs/transfer/transfer.cjs.map +1 -1
- package/dist/cjs/transfer/transfer.d.cts.map +1 -1
- package/dist/cjs/tree/tree.cjs +13 -6
- package/dist/cjs/tree/tree.cjs.map +1 -1
- package/dist/cjs/tree/tree.d.cts.map +1 -1
- package/dist/cjs/treeselect/treeselect.cjs +5 -4
- package/dist/cjs/treeselect/treeselect.cjs.map +1 -1
- package/dist/cjs/treeselect/treeselect.d.cts.map +1 -1
- package/dist/cjs/virtuallist/virtuallist.cjs +9 -3
- package/dist/cjs/virtuallist/virtuallist.cjs.map +1 -1
- package/dist/cjs/virtuallist/virtuallist.d.cts.map +1 -1
- package/dist/esm/autocomplete/autocomplete.d.ts +2 -0
- package/dist/esm/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/esm/autocomplete/autocomplete.js +7 -3
- package/dist/esm/autocomplete/autocomplete.js.map +1 -1
- package/dist/esm/browser/modules/autocomplete/autocomplete.js +7 -3
- package/dist/esm/browser/modules/autocomplete/autocomplete.js.map +1 -1
- package/dist/esm/browser/modules/button/button.js.map +1 -1
- package/dist/esm/browser/modules/cascader/cascader.js +9 -2
- package/dist/esm/browser/modules/cascader/cascader.js.map +1 -1
- package/dist/esm/browser/modules/colors.js +69 -6
- package/dist/esm/browser/modules/colors.js.map +1 -1
- package/dist/esm/browser/modules/commandpalette/commandpalette.js +10 -3
- package/dist/esm/browser/modules/commandpalette/commandpalette.js.map +1 -1
- package/dist/esm/browser/modules/config-provider/component-defaults.js.map +1 -1
- package/dist/esm/browser/modules/config-provider/use-color-variables.js +18 -2
- package/dist/esm/browser/modules/config-provider/use-color-variables.js.map +1 -1
- package/dist/esm/browser/modules/drawer/drawer.js +7 -1
- package/dist/esm/browser/modules/drawer/drawer.js.map +1 -1
- package/dist/esm/browser/modules/dropdown/dropdown.js +25 -4
- package/dist/esm/browser/modules/dropdown/dropdown.js.map +1 -1
- package/dist/esm/browser/modules/form/form.js +38 -21
- package/dist/esm/browser/modules/form/form.js.map +1 -1
- package/dist/esm/browser/modules/image/viewer.js +8 -2
- package/dist/esm/browser/modules/image/viewer.js.map +1 -1
- package/dist/esm/browser/modules/index.js +1 -2
- package/dist/esm/browser/modules/layout/layout.js +4 -1
- package/dist/esm/browser/modules/layout/layout.js.map +1 -1
- package/dist/esm/browser/modules/mentions/mentions.js +4 -2
- package/dist/esm/browser/modules/mentions/mentions.js.map +1 -1
- package/dist/esm/browser/modules/menu/index.js +1 -1
- package/dist/esm/browser/modules/menu/menu.js +57 -18
- package/dist/esm/browser/modules/menu/menu.js.map +1 -1
- package/dist/esm/browser/modules/scrollbar/scrollbar.js +69 -19
- package/dist/esm/browser/modules/scrollbar/scrollbar.js.map +1 -1
- package/dist/esm/browser/modules/select/select.js +3 -3
- package/dist/esm/browser/modules/select/select.js.map +1 -1
- package/dist/esm/browser/modules/shared/floating.js +49 -20
- package/dist/esm/browser/modules/shared/floating.js.map +1 -1
- package/dist/esm/browser/modules/shared/scoped-portal.js +2 -23
- package/dist/esm/browser/modules/shared/scoped-portal.js.map +1 -1
- package/dist/esm/browser/modules/shared/theme-variables.js +27 -0
- package/dist/esm/browser/modules/shared/theme-variables.js.map +1 -0
- package/dist/esm/browser/modules/splitter/splitter.js +4 -1
- package/dist/esm/browser/modules/splitter/splitter.js.map +1 -1
- package/dist/esm/browser/modules/tabs/tabs.js +14 -8
- package/dist/esm/browser/modules/tabs/tabs.js.map +1 -1
- package/dist/esm/browser/modules/tailwind-tokens.js +1 -1
- package/dist/esm/browser/modules/tailwind-tokens.js.map +1 -1
- package/dist/esm/browser/modules/textarea/textarea.js +50 -22
- package/dist/esm/browser/modules/textarea/textarea.js.map +1 -1
- package/dist/esm/browser/modules/theme.js +53 -29
- package/dist/esm/browser/modules/theme.js.map +1 -1
- package/dist/esm/browser/modules/timeline/timeline.js +1 -1
- package/dist/esm/browser/modules/timeline/timeline.js.map +1 -1
- package/dist/esm/browser/modules/timepicker/time-panel.js +8 -2
- package/dist/esm/browser/modules/timepicker/time-panel.js.map +1 -1
- package/dist/esm/browser/modules/transfer/transfer.js +5 -5
- package/dist/esm/browser/modules/transfer/transfer.js.map +1 -1
- package/dist/esm/browser/modules/tree/tree.js +13 -6
- package/dist/esm/browser/modules/tree/tree.js.map +1 -1
- package/dist/esm/browser/modules/treeselect/treeselect.js +5 -4
- package/dist/esm/browser/modules/treeselect/treeselect.js.map +1 -1
- package/dist/esm/browser/modules/virtuallist/virtuallist.js +9 -3
- package/dist/esm/browser/modules/virtuallist/virtuallist.js.map +1 -1
- package/dist/esm/button/button.d.ts +7 -2
- package/dist/esm/button/button.d.ts.map +1 -1
- package/dist/esm/button/button.js.map +1 -1
- package/dist/esm/cascader/cascader.d.ts +2 -0
- package/dist/esm/cascader/cascader.d.ts.map +1 -1
- package/dist/esm/cascader/cascader.js +9 -2
- package/dist/esm/cascader/cascader.js.map +1 -1
- package/dist/esm/colors.d.ts +3 -1
- package/dist/esm/colors.d.ts.map +1 -1
- package/dist/esm/colors.js +69 -6
- package/dist/esm/colors.js.map +1 -1
- package/dist/esm/commandpalette/commandpalette.d.ts.map +1 -1
- package/dist/esm/commandpalette/commandpalette.js +10 -3
- package/dist/esm/commandpalette/commandpalette.js.map +1 -1
- package/dist/esm/config-provider/component-defaults.d.ts +3 -4
- package/dist/esm/config-provider/component-defaults.d.ts.map +1 -1
- package/dist/esm/config-provider/component-defaults.js.map +1 -1
- package/dist/esm/config-provider/index.d.ts +1 -1
- package/dist/esm/config-provider/index.d.ts.map +1 -1
- package/dist/esm/config-provider/use-color-variables.d.ts.map +1 -1
- package/dist/esm/config-provider/use-color-variables.js +18 -2
- package/dist/esm/config-provider/use-color-variables.js.map +1 -1
- package/dist/esm/drawer/drawer.d.ts.map +1 -1
- package/dist/esm/drawer/drawer.js +7 -1
- package/dist/esm/drawer/drawer.js.map +1 -1
- package/dist/esm/dropdown/dropdown.d.ts +9 -1
- package/dist/esm/dropdown/dropdown.d.ts.map +1 -1
- package/dist/esm/dropdown/dropdown.js +25 -4
- package/dist/esm/dropdown/dropdown.js.map +1 -1
- package/dist/esm/form/form.d.ts +3 -1
- package/dist/esm/form/form.d.ts.map +1 -1
- package/dist/esm/form/form.js +38 -21
- package/dist/esm/form/form.js.map +1 -1
- package/dist/esm/image/viewer.d.ts.map +1 -1
- package/dist/esm/image/viewer.js +8 -2
- package/dist/esm/image/viewer.js.map +1 -1
- package/dist/esm/index.d.ts +3 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/layout/layout.d.ts.map +1 -1
- package/dist/esm/layout/layout.js +4 -1
- package/dist/esm/layout/layout.js.map +1 -1
- package/dist/esm/mentions/mentions.d.ts +2 -0
- package/dist/esm/mentions/mentions.d.ts.map +1 -1
- package/dist/esm/mentions/mentions.js +4 -2
- package/dist/esm/mentions/mentions.js.map +1 -1
- package/dist/esm/menu/index.d.ts +2 -2
- package/dist/esm/menu/index.d.ts.map +1 -1
- package/dist/esm/menu/index.js +1 -1
- package/dist/esm/menu/menu.d.ts +4 -0
- package/dist/esm/menu/menu.d.ts.map +1 -1
- package/dist/esm/menu/menu.js +57 -18
- package/dist/esm/menu/menu.js.map +1 -1
- package/dist/esm/scrollbar/scrollbar.d.ts +12 -2
- package/dist/esm/scrollbar/scrollbar.d.ts.map +1 -1
- package/dist/esm/scrollbar/scrollbar.js +69 -19
- package/dist/esm/scrollbar/scrollbar.js.map +1 -1
- package/dist/esm/select/select.js +3 -3
- package/dist/esm/select/select.js.map +1 -1
- package/dist/esm/shared/floating.d.ts +3 -1
- package/dist/esm/shared/floating.d.ts.map +1 -1
- package/dist/esm/shared/floating.js +49 -20
- package/dist/esm/shared/floating.js.map +1 -1
- package/dist/esm/shared/scoped-portal.d.ts.map +1 -1
- package/dist/esm/shared/scoped-portal.js +2 -23
- package/dist/esm/shared/scoped-portal.js.map +1 -1
- package/dist/esm/shared/theme-variables.d.ts +4 -0
- package/dist/esm/shared/theme-variables.d.ts.map +1 -0
- package/dist/esm/shared/theme-variables.js +27 -0
- package/dist/esm/shared/theme-variables.js.map +1 -0
- package/dist/esm/splitter/splitter.d.ts.map +1 -1
- package/dist/esm/splitter/splitter.js +4 -1
- package/dist/esm/splitter/splitter.js.map +1 -1
- package/dist/esm/styles/alert.css +1 -1
- package/dist/esm/styles/anchor.css +1 -1
- package/dist/esm/styles/appbar.css +1 -1
- package/dist/esm/styles/autocomplete.css +1 -1
- package/dist/esm/styles/avatar.css +1 -1
- package/dist/esm/styles/backtop.css +1 -1
- package/dist/esm/styles/badge.css +1 -1
- package/dist/esm/styles/breadcrumb.css +1 -1
- package/dist/esm/styles/button.css +1 -1
- package/dist/esm/styles/calendar.css +1 -1
- package/dist/esm/styles/card.css +1 -1
- package/dist/esm/styles/carousel.css +1 -1
- package/dist/esm/styles/cascader.css +1 -1
- package/dist/esm/styles/checkbox.css +1 -1
- package/dist/esm/styles/collapse.css +1 -1
- package/dist/esm/styles/colorpicker.css +1 -1
- package/dist/esm/styles/commandpalette.css +1 -1
- package/dist/esm/styles/components/alert.css +1 -1
- package/dist/esm/styles/components/anchor.css +1 -1
- package/dist/esm/styles/components/appbar.css +1 -1
- package/dist/esm/styles/components/autocomplete.css +1 -1
- package/dist/esm/styles/components/avatar.css +1 -1
- package/dist/esm/styles/components/breadcrumb.css +1 -1
- package/dist/esm/styles/components/button.css +1 -1
- package/dist/esm/styles/components/calendar.css +1 -1
- package/dist/esm/styles/components/card.css +1 -1
- package/dist/esm/styles/components/carousel.css +1 -1
- package/dist/esm/styles/components/cascader.css +1 -1
- package/dist/esm/styles/components/checkbox.css +1 -1
- package/dist/esm/styles/components/collapse.css +1 -1
- package/dist/esm/styles/components/colorpicker.css +1 -1
- package/dist/esm/styles/components/commandpalette.css +1 -1
- package/dist/esm/styles/components/datepicker.css +1 -1
- package/dist/esm/styles/components/descriptions.css +1 -1
- package/dist/esm/styles/components/drawer.css +1 -1
- package/dist/esm/styles/components/dropdown.css +1 -1
- package/dist/esm/styles/components/errorboundary.css +1 -1
- package/dist/esm/styles/components/filelist.css +1 -1
- package/dist/esm/styles/components/form.css +1 -1
- package/dist/esm/styles/components/image.css +1 -1
- package/dist/esm/styles/components/input.css +1 -1
- package/dist/esm/styles/components/inputnumber.css +1 -1
- package/dist/esm/styles/components/inputotp.css +1 -1
- package/dist/esm/styles/components/layout.css +1 -1
- package/dist/esm/styles/components/loading.css +1 -1
- package/dist/esm/styles/components/loadingbar.css +1 -1
- package/dist/esm/styles/components/mentions.css +1 -1
- package/dist/esm/styles/components/menu.css +1 -1
- package/dist/esm/styles/components/message.css +1 -1
- package/dist/esm/styles/components/modal.css +1 -1
- package/dist/esm/styles/components/notification.css +1 -1
- package/dist/esm/styles/components/pagination.css +1 -1
- package/dist/esm/styles/components/popover.css +1 -1
- package/dist/esm/styles/components/progress.css +1 -1
- package/dist/esm/styles/components/radio.css +1 -1
- package/dist/esm/styles/components/rate.css +1 -1
- package/dist/esm/styles/components/scrollarea.css +1 -1
- package/dist/esm/styles/components/scrollbar.css +1 -1
- package/dist/esm/styles/components/select.css +1 -1
- package/dist/esm/styles/components/shared-calendar.css +1 -1
- package/dist/esm/styles/components/slider.css +1 -1
- package/dist/esm/styles/components/splitter.css +1 -1
- package/dist/esm/styles/components/steps.css +1 -1
- package/dist/esm/styles/components/switch.css +1 -1
- package/dist/esm/styles/components/table.css +1 -1
- package/dist/esm/styles/components/tabletanstack.css +1 -1
- package/dist/esm/styles/components/tabs.css +1 -1
- package/dist/esm/styles/components/tag.css +1 -1
- package/dist/esm/styles/components/textarea.css +1 -1
- package/dist/esm/styles/components/timepicker.css +1 -1
- package/dist/esm/styles/components/tooltip.css +1 -1
- package/dist/esm/styles/components/tour.css +1 -1
- package/dist/esm/styles/components/transfer.css +1 -1
- package/dist/esm/styles/components/tree.css +1 -1
- package/dist/esm/styles/components/treeselect.css +1 -1
- package/dist/esm/styles/components/typography.css +1 -1
- package/dist/esm/styles/components/upload.css +1 -1
- package/dist/esm/styles/components/virtuallist.css +1 -1
- package/dist/esm/styles/config-provider.css +1 -1
- package/dist/esm/styles/confirm.css +1 -1
- package/dist/esm/styles/datepicker.css +1 -1
- package/dist/esm/styles/daterangepicker.css +1 -1
- package/dist/esm/styles/datetimepicker.css +1 -1
- package/dist/esm/styles/descriptions.css +1 -1
- package/dist/esm/styles/divider.css +1 -1
- package/dist/esm/styles/drawer.css +1 -1
- package/dist/esm/styles/dropdown.css +1 -1
- package/dist/esm/styles/empty.css +1 -1
- package/dist/esm/styles/errorboundary.css +1 -1
- package/dist/esm/styles/filelist.css +1 -1
- package/dist/esm/styles/flex.css +1 -1
- package/dist/esm/styles/floatbutton.css +1 -1
- package/dist/esm/styles/form.css +1 -1
- package/dist/esm/styles/foundation.css +1 -1
- package/dist/esm/styles/grid.css +1 -1
- package/dist/esm/styles/image.css +1 -1
- package/dist/esm/styles/index.css +1380 -716
- package/dist/esm/styles/index.css.map +1 -1
- package/dist/esm/styles/infinitescroll.css +1 -1
- package/dist/esm/styles/input.css +1 -1
- package/dist/esm/styles/inputmask.css +1 -1
- package/dist/esm/styles/inputnumber.css +1 -1
- package/dist/esm/styles/inputotp.css +1 -1
- package/dist/esm/styles/layout.css +1 -1
- package/dist/esm/styles/loading.css +1 -1
- package/dist/esm/styles/loadingbar.css +1 -1
- package/dist/esm/styles/masonry.css +1 -1
- package/dist/esm/styles/mentions.css +1 -1
- package/dist/esm/styles/menu.css +1 -1
- package/dist/esm/styles/message.css +1 -1
- package/dist/esm/styles/modal.css +1 -1
- package/dist/esm/styles/notification.css +1 -1
- package/dist/esm/styles/pagination.css +1 -1
- package/dist/esm/styles/popconfirm.css +1 -1
- package/dist/esm/styles/popover.css +1 -1
- package/dist/esm/styles/progress.css +1 -1
- package/dist/esm/styles/qrcode.css +1 -1
- package/dist/esm/styles/radio.css +1 -1
- package/dist/esm/styles/rate.css +1 -1
- package/dist/esm/styles/result.css +1 -1
- package/dist/esm/styles/scrollarea.css +1 -1
- package/dist/esm/styles/scrollbar.css +1 -1
- package/dist/esm/styles/select.css +1 -1
- package/dist/esm/styles/skeleton.css +1 -1
- package/dist/esm/styles/slider.css +1 -1
- package/dist/esm/styles/space.css +1 -1
- package/dist/esm/styles/splitter.css +1 -1
- package/dist/esm/styles/statistic.css +1 -1
- package/dist/esm/styles/steps.css +1 -1
- package/dist/esm/styles/switch.css +1 -1
- package/dist/esm/styles/table.css +1 -1
- package/dist/esm/styles/tabletanstack.css +1 -1
- package/dist/esm/styles/tabs.css +1 -1
- package/dist/esm/styles/tag.css +1 -1
- package/dist/esm/styles/textarea.css +1 -1
- package/dist/esm/styles/timeline.css +1 -1
- package/dist/esm/styles/timepicker.css +1 -1
- package/dist/esm/styles/timerangepicker.css +1 -1
- package/dist/esm/styles/tooltip.css +1 -1
- package/dist/esm/styles/tour.css +1 -1
- package/dist/esm/styles/transfer.css +1 -1
- package/dist/esm/styles/tree.css +1 -1
- package/dist/esm/styles/treeselect.css +1 -1
- package/dist/esm/styles/typography.css +1 -1
- package/dist/esm/styles/upload.css +1 -1
- package/dist/esm/styles/virtuallist.css +1 -1
- package/dist/esm/tabs/tabs.d.ts +4 -2
- package/dist/esm/tabs/tabs.d.ts.map +1 -1
- package/dist/esm/tabs/tabs.js +14 -8
- package/dist/esm/tabs/tabs.js.map +1 -1
- package/dist/esm/tailwind-tokens.d.ts.map +1 -1
- package/dist/esm/tailwind-tokens.js +1 -1
- package/dist/esm/tailwind-tokens.js.map +1 -1
- package/dist/esm/textarea/textarea.d.ts.map +1 -1
- package/dist/esm/textarea/textarea.js +50 -22
- package/dist/esm/textarea/textarea.js.map +1 -1
- package/dist/esm/theme.d.ts +15 -0
- package/dist/esm/theme.d.ts.map +1 -1
- package/dist/esm/theme.js +53 -29
- package/dist/esm/theme.js.map +1 -1
- package/dist/esm/timeline/timeline.d.ts.map +1 -1
- package/dist/esm/timeline/timeline.js +1 -1
- package/dist/esm/timeline/timeline.js.map +1 -1
- package/dist/esm/timepicker/time-panel.d.ts.map +1 -1
- package/dist/esm/timepicker/time-panel.js +8 -2
- package/dist/esm/timepicker/time-panel.js.map +1 -1
- package/dist/esm/transfer/transfer.d.ts.map +1 -1
- package/dist/esm/transfer/transfer.js +5 -5
- package/dist/esm/transfer/transfer.js.map +1 -1
- package/dist/esm/tree/tree.d.ts.map +1 -1
- package/dist/esm/tree/tree.js +13 -6
- package/dist/esm/tree/tree.js.map +1 -1
- package/dist/esm/treeselect/treeselect.d.ts.map +1 -1
- package/dist/esm/treeselect/treeselect.js +5 -4
- package/dist/esm/treeselect/treeselect.js.map +1 -1
- package/dist/esm/virtuallist/virtuallist.d.ts.map +1 -1
- package/dist/esm/virtuallist/virtuallist.js +9 -3
- package/dist/esm/virtuallist/virtuallist.js.map +1 -1
- package/dist/tailwind.css +1 -1
- package/package.json +1 -22
- package/dist/cjs/browser/modules/segmented/index.cjs.map +0 -1
- package/dist/cjs/browser/modules/segmented/segmented.cjs +0 -127
- package/dist/cjs/browser/modules/segmented/segmented.cjs.map +0 -1
- package/dist/cjs/browser/segmented.cjs +0 -2
- package/dist/cjs/segmented/index.cjs.map +0 -1
- package/dist/cjs/segmented/index.d.cts +0 -3
- package/dist/cjs/segmented/index.d.cts.map +0 -1
- package/dist/cjs/segmented/segmented.cjs +0 -125
- package/dist/cjs/segmented/segmented.cjs.map +0 -1
- package/dist/cjs/segmented/segmented.d.cts +0 -21
- package/dist/cjs/segmented/segmented.d.cts.map +0 -1
- package/dist/cjs/styles/components/segmented.css +0 -1
- package/dist/cjs/styles/segmented.css +0 -1
- package/dist/esm/browser/modules/segmented/index.js +0 -2
- package/dist/esm/browser/modules/segmented/segmented.js +0 -89
- package/dist/esm/browser/modules/segmented/segmented.js.map +0 -1
- package/dist/esm/browser/segmented.js +0 -2
- package/dist/esm/segmented/index.d.ts +0 -3
- package/dist/esm/segmented/index.d.ts.map +0 -1
- package/dist/esm/segmented/index.js +0 -2
- package/dist/esm/segmented/segmented.d.ts +0 -21
- package/dist/esm/segmented/segmented.d.ts.map +0 -1
- package/dist/esm/segmented/segmented.js +0 -87
- package/dist/esm/segmented/segmented.js.map +0 -1
- package/dist/esm/styles/components/segmented.css +0 -1
- package/dist/esm/styles/segmented.css +0 -1
package/dist/esm/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sources":["../../src/theme.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\nimport { deriveColors } from './colors';\n\n/** Shared CSS variables; configure component themes through ConfigProvider. */\nexport type LeafThemeStyle = CSSProperties & {\n [key: `--leaf-${string}`]: string | number | undefined;\n};\n\n/** Common settings. Other sizes and interaction colors are derived automatically. */\nexport interface LeafTheme {\n primaryColor?: string;\n borderRadius?: number | string;\n controlHeight?: number | string;\n fontSize?: number | string;\n fontFamily?: string;\n appearance?: 'light' | 'dark';\n motion?: boolean;\n tokens?: LeafThemeTokens;\n spacing?: number;\n lineHeight?: number;\n headingWeight?: number;\n elevation?: 'none' | 'soft' | 'medium';\n breakpoints?: Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number>>;\n components?: Record<string, LeafComponentTokens>;\n}\nexport interface LeafComponentTokens {\n borderRadius?: string | number;\n controlHeight?: string | number;\n padding?: string | number;\n gap?: string | number;\n fontSize?: string | number;\n color?: string;\n background?: string;\n borderColor?: string;\n headerBackground?: string;\n footerBackground?: string;\n shadow?: string;\n}\n\n/** Optional overrides for applications with more specific design requirements. */\nexport interface LeafThemeTokens {\n onPrimaryColor?: string;\n dangerColor?: string;\n onDangerColor?: string;\n successColor?: string;\n warningColor?: string;\n infoColor?: string;\n textColor?: string;\n mutedTextColor?: string;\n subtleTextColor?: string;\n surfaceColor?: string;\n mutedSurfaceColor?: string;\n raisedSurfaceColor?: string;\n borderColor?: string;\n borderHoverColor?: string;\n dividerColor?: string;\n borderRadiusSm?: number | string;\n borderRadiusMd?: number | string;\n borderRadiusLg?: number | string;\n controlHeightSm?: number | string;\n controlHeightLg?: number | string;\n fontSizeSm?: number | string;\n fontSizeLg?: number | string;\n fontWeight?: number;\n motionDuration?: number | string;\n motionEasing?: string;\n motionSpring?: string;\n popupZIndex?: number;\n modalZIndex?: number;\n messageZIndex?: number;\n buttonBorderRadius?: number | string;\n buttonHeight?: number | string;\n choiceBorderRadius?: number | string;\n focusColor?: string;\n primaryHoverColor?: string;\n primaryActiveColor?: string;\n primarySoftColor?: string;\n primarySoftHoverColor?: string;\n primarySoftActiveColor?: string;\n primaryBorderColor?: string;\n dangerHoverColor?: string;\n dangerActiveColor?: string;\n spacingSm?: number | string;\n spacingLg?: number | string;\n shadowSm?: string;\n shadowXs?: string;\n shadowMd?: string;\n shadowLg?: string;\n lineHeight?: number;\n}\n\nconst defined = <T extends object>(value?: T) =>\n Object.fromEntries(Object.entries(value ?? {}).filter(([, item]) => item !== undefined)) as T;\n\nexport function mergeLeafTheme(parent: LeafTheme, theme?: LeafTheme): LeafTheme {\n return {\n ...parent,\n ...defined(theme),\n breakpoints: { ...parent.breakpoints, ...defined(theme?.breakpoints) },\n components: Object.fromEntries(\n [\n ...new Set([\n ...Object.keys(parent.components ?? {}),\n ...Object.keys(theme?.components ?? {}),\n ]),\n ].map((key) => [key, { ...parent.components?.[key], ...defined(theme?.components?.[key]) }]),\n ),\n ...(parent.tokens || theme?.tokens\n ? { tokens: { ...parent.tokens, ...defined(theme?.tokens) } }\n : {}),\n };\n}\n\nconst tokenVariables = {\n onPrimaryColor: 'color-on-primary',\n dangerColor: 'color-danger',\n onDangerColor: 'color-on-danger',\n successColor: 'color-success',\n warningColor: 'color-warning',\n infoColor: 'color-info',\n textColor: 'color-text',\n mutedTextColor: 'color-text-muted',\n subtleTextColor: 'color-text-subtle',\n surfaceColor: 'color-surface',\n mutedSurfaceColor: 'color-surface-muted',\n raisedSurfaceColor: 'color-surface-raised',\n borderColor: 'color-border',\n borderHoverColor: 'color-border-hover',\n dividerColor: 'color-divider',\n borderRadiusSm: 'radius-sm',\n borderRadiusMd: 'radius-md',\n borderRadiusLg: 'radius-lg',\n controlHeightSm: 'control-height-sm',\n controlHeightLg: 'control-height-lg',\n fontSizeSm: 'font-size-sm',\n fontSizeLg: 'font-size-lg',\n fontWeight: 'font-weight',\n motionDuration: 'motion-duration',\n motionEasing: 'motion-easing',\n motionSpring: 'motion-spring',\n popupZIndex: 'z-index-popup',\n modalZIndex: 'z-index-modal',\n messageZIndex: 'z-index-message',\n buttonBorderRadius: 'button-radius',\n buttonHeight: 'button-height',\n choiceBorderRadius: 'choice-radius',\n focusColor: 'color-focus',\n primaryHoverColor: 'color-primary-hover',\n primaryActiveColor: 'color-primary-active',\n primarySoftColor: 'color-primary-soft',\n primarySoftHoverColor: 'color-primary-soft-hover',\n primarySoftActiveColor: 'color-primary-soft-active',\n primaryBorderColor: 'color-primary-border',\n dangerHoverColor: 'color-danger-hover',\n dangerActiveColor: 'color-danger-active',\n spacingSm: 'spacing-sm',\n spacingLg: 'spacing-lg',\n shadowSm: 'shadow-sm',\n shadowXs: 'shadow-xs',\n shadowMd: 'shadow-md',\n shadowLg: 'shadow-lg',\n lineHeight: 'line-height',\n} satisfies Record<keyof LeafThemeTokens, string>;\n\nconst length = (value: number | string) => (typeof value === 'number' ? `${value}px` : value);\n\n/** Expand CSS padding without splitting whitespace inside calc()/var(). */\nfunction paddingSides(value: string) {\n const parts: string[] = [];\n let depth = 0;\n let start = 0;\n for (let index = 0; index <= value.length; index++) {\n const character = value[index];\n if (character === '(') depth++;\n else if (character === ')') depth--;\n if (index === value.length || (depth === 0 && /\\s/.test(character ?? ''))) {\n const part = value.slice(start, index).trim();\n if (part) parts.push(part);\n start = index + 1;\n }\n }\n if (!parts.length || parts.length > 4) return [];\n const [top, right = top, bottom = top, left = right] = parts;\n return [top, right, bottom, left];\n}\n\n/** Explicit inputs, excluding the generated palette, for browser CSS-variable resolution. */\nexport function leafThemeColors(theme: LeafTheme): Record<string, string> {\n const colors: Record<string, string> = {};\n if (theme.primaryColor) {\n colors.primary = theme.primaryColor;\n colors['on-primary'] = '#ffffff';\n }\n for (const key of Object.keys(tokenVariables) as (keyof LeafThemeTokens)[]) {\n const variable = tokenVariables[key];\n const value = theme.tokens?.[key];\n if (variable.startsWith('color-') && typeof value === 'string')\n colors[variable.slice(6)] = value;\n }\n return colors;\n}\n\n/** Pure, deterministic output can be rendered in the server's initial HTML. */\nexport function leafThemeVariables(theme: LeafTheme): LeafThemeStyle {\n const variables: LeafThemeStyle = {};\n if (theme.spacing !== undefined) {\n variables['--leaf-spacing'] = `${Math.max(0, theme.spacing)}px`;\n for (const [name, scale] of [\n ['xs', 0.5],\n ['sm', 1],\n ['md', 2],\n ['lg', 3],\n ['xl', 4],\n ] as const)\n variables[`--leaf-spacing-${name}`] = `calc(var(--leaf-spacing) * ${scale})`;\n }\n if (theme.lineHeight !== undefined) variables['--leaf-line-height'] = theme.lineHeight;\n if (theme.headingWeight !== undefined) variables['--leaf-heading-weight'] = theme.headingWeight;\n if (theme.elevation)\n for (const [name, blur, y] of [\n ['sm', 8, 2],\n ['md', 20, 6],\n ['lg', 48, 12],\n ] as const)\n variables[`--leaf-shadow-${name}`] =\n theme.elevation === 'none'\n ? 'none'\n : `0 ${y}px ${blur}px rgb(0 0 0 / ${theme.elevation === 'soft' ? '.08' : '.16'})`;\n for (const [name, value] of Object.entries(theme.breakpoints ?? {}))\n if (value !== undefined) variables[`--leaf-breakpoint-${name}`] = `${value}px`;\n const componentKeys = {\n borderRadius: 'radius',\n controlHeight: 'height',\n padding: 'padding',\n gap: 'gap',\n fontSize: 'font-size',\n color: 'color',\n background: 'background',\n borderColor: 'border-color',\n headerBackground: 'header-background',\n footerBackground: 'footer-background',\n shadow: 'shadow',\n } as const;\n for (const [component, tokens] of Object.entries(theme.components ?? {}))\n for (const [key, value] of Object.entries(tokens))\n if (value !== undefined && /^[a-z][a-z\\d-]*$/i.test(component)) {\n const token = componentKeys[key as keyof typeof componentKeys];\n if (token)\n variables[\n `--leaf-component-${component.replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase()}-${token}`\n ] = typeof value === 'number' ? length(value) : value;\n if (key === 'controlHeight') {\n const name = component.replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase();\n variables[`--leaf-component-${name}-height-sm`] =\n `max(1px, calc(var(--leaf-component-${name}-height) - 6px))`;\n variables[`--leaf-component-${name}-height-lg`] =\n `calc(var(--leaf-component-${name}-height) + 6px)`;\n }\n if (key === 'padding') {\n const name = component.replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase();\n const sides = paddingSides(length(value));\n for (const [index, side] of ['top', 'right', 'bottom', 'left'].entries())\n variables[`--leaf-component-${name}-padding-${side}`] = sides[index];\n }\n }\n if (theme.primaryColor !== undefined) {\n variables['--leaf-color-primary'] = theme.primaryColor;\n variables['--leaf-color-on-primary'] = '#ffffff';\n }\n if (theme.borderRadius !== undefined) {\n variables['--leaf-radius'] = length(theme.borderRadius);\n variables['--leaf-radius-sm'] = 'calc(var(--leaf-radius) * 0.6)';\n variables['--leaf-radius-md'] = 'calc(var(--leaf-radius) * 1.2)';\n variables['--leaf-radius-lg'] = 'calc(var(--leaf-radius) * 1.6)';\n variables['--leaf-choice-radius'] = 'calc(var(--leaf-radius) * 0.5)';\n }\n if (theme.controlHeight !== undefined) {\n variables['--leaf-control-height'] = length(theme.controlHeight);\n variables['--leaf-control-height-sm'] = 'max(1px, calc(var(--leaf-control-height) - 6px))';\n variables['--leaf-control-height-lg'] = 'calc(var(--leaf-control-height) + 6px)';\n }\n if (theme.fontSize !== undefined) {\n variables['--leaf-font-size'] = length(theme.fontSize);\n variables['--leaf-font-size-sm'] = 'max(1px, calc(var(--leaf-font-size) - 1px))';\n variables['--leaf-font-size-lg'] = 'calc(var(--leaf-font-size) + 2px)';\n }\n if (theme.fontFamily !== undefined) variables['--leaf-font-family'] = theme.fontFamily;\n for (const key of Object.keys(tokenVariables) as (keyof LeafThemeTokens)[]) {\n const value = theme.tokens?.[key];\n if (value === undefined) continue;\n const variable = tokenVariables[key];\n variables[`--leaf-${variable}`] =\n typeof value !== 'number'\n ? value\n : key === 'motionDuration'\n ? `${value}ms`\n : variable.includes('radius') ||\n variable.includes('height') ||\n variable.includes('font-size') ||\n variable.includes('spacing')\n ? length(value)\n : value;\n }\n if (theme.motion !== undefined) {\n variables['--leaf-motion-play-state'] = theme.motion ? 'running' : 'paused';\n variables['--leaf-motion-animation'] = theme.motion ? 'initial' : 'none';\n if (!theme.motion) variables['--leaf-motion-duration'] = '0ms';\n else if (theme.tokens?.motionDuration === undefined)\n variables['--leaf-motion-duration'] = '200ms';\n }\n if (\n theme.appearance ||\n theme.primaryColor ||\n Object.keys(theme.tokens ?? {}).some((key) => key.endsWith('Color'))\n ) {\n return { ...deriveColors(theme.appearance ?? 'light', leafThemeColors(theme)), ...variables };\n }\n return variables;\n}\n"],"names":["defined","value","Object","item","undefined","mergeLeafTheme","parent","theme","Set","key","tokenVariables","length","paddingSides","parts","depth","start","index","character","part","top","right","bottom","left","leafThemeColors","colors","variable","leafThemeVariables","variables","Math","name","scale","blur","y","componentKeys","component","tokens","token","sides","side","deriveColors"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme.js","sources":["../../src/theme.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\nimport { deriveColors } from './colors';\n\n/** Shared CSS variables; configure component themes through ConfigProvider. */\nexport type LeafThemeStyle = CSSProperties & {\n [key: `--leaf-${string}`]: string | number | undefined;\n};\n\n/** Common settings. Other sizes and interaction colors are derived automatically. */\nexport interface LeafTheme {\n primaryColor?: string;\n borderRadius?: number | string;\n controlHeight?: number | string;\n fontSize?: number | string;\n fontFamily?: string;\n appearance?: 'light' | 'dark';\n motion?: boolean;\n tokens?: LeafThemeTokens;\n spacing?: number;\n lineHeight?: number;\n headingWeight?: number;\n elevation?: 'none' | 'soft' | 'medium';\n breakpoints?: Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number>>;\n components?: Record<string, LeafComponentTokens>;\n}\nexport interface LeafComponentTokens {\n borderRadius?: string | number;\n borderWidth?: string | number;\n controlHeight?: string | number;\n padding?: string | number;\n gap?: string | number;\n fontSize?: string | number;\n color?: string;\n background?: string;\n borderColor?: string;\n headerBackground?: string;\n footerBackground?: string;\n shadow?: string;\n hover?: LeafComponentStateTokens;\n active?: LeafComponentStateTokens;\n focus?: LeafComponentStateTokens;\n disabled?: LeafComponentStateTokens;\n}\n\n/** Interaction overrides supported by themed controls; focus keeps the accessible outline. */\nexport interface LeafComponentStateTokens {\n color?: string;\n background?: string;\n borderColor?: string;\n shadow?: string;\n}\n\n/** Optional overrides for applications with more specific design requirements. */\nexport interface LeafThemeTokens {\n onPrimaryColor?: string;\n dangerColor?: string;\n onDangerColor?: string;\n successColor?: string;\n warningColor?: string;\n infoColor?: string;\n textColor?: string;\n mutedTextColor?: string;\n subtleTextColor?: string;\n surfaceColor?: string;\n mutedSurfaceColor?: string;\n raisedSurfaceColor?: string;\n borderColor?: string;\n borderHoverColor?: string;\n dividerColor?: string;\n borderWidth?: number | string;\n controlShadow?: string;\n surfaceShadow?: string;\n borderRadiusSm?: number | string;\n borderRadiusMd?: number | string;\n borderRadiusLg?: number | string;\n controlHeightSm?: number | string;\n controlHeightLg?: number | string;\n fontSizeSm?: number | string;\n fontSizeLg?: number | string;\n fontWeight?: number;\n motionDuration?: number | string;\n motionEasing?: string;\n motionSpring?: string;\n popupZIndex?: number;\n modalZIndex?: number;\n messageZIndex?: number;\n buttonBorderRadius?: number | string;\n buttonHeight?: number | string;\n choiceBorderRadius?: number | string;\n focusColor?: string;\n primaryHoverColor?: string;\n primaryActiveColor?: string;\n primarySoftColor?: string;\n primarySoftHoverColor?: string;\n primarySoftActiveColor?: string;\n primaryBorderColor?: string;\n dangerHoverColor?: string;\n dangerActiveColor?: string;\n spacingSm?: number | string;\n spacingLg?: number | string;\n shadowSm?: string;\n shadowXs?: string;\n shadowMd?: string;\n shadowLg?: string;\n lineHeight?: number;\n}\n\nconst defined = <T extends object>(value?: T) =>\n Object.fromEntries(Object.entries(value ?? {}).filter(([, item]) => item !== undefined)) as T;\n\nconst componentStates = ['hover', 'active', 'focus', 'disabled'] as const;\n\nfunction mergeComponentTokens(\n parent?: LeafComponentTokens,\n tokens?: LeafComponentTokens,\n): LeafComponentTokens {\n const merged = { ...defined(parent), ...defined(tokens) };\n for (const state of componentStates)\n if (parent?.[state] || tokens?.[state])\n merged[state] = { ...defined(parent?.[state]), ...defined(tokens?.[state]) };\n return merged;\n}\n\nexport function mergeLeafTheme(parent: LeafTheme, theme?: LeafTheme): LeafTheme {\n return {\n ...parent,\n ...defined(theme),\n breakpoints: { ...parent.breakpoints, ...defined(theme?.breakpoints) },\n components: Object.fromEntries(\n [\n ...new Set([\n ...Object.keys(parent.components ?? {}),\n ...Object.keys(theme?.components ?? {}),\n ]),\n ].map((key) => [\n key,\n mergeComponentTokens(parent.components?.[key], theme?.components?.[key]),\n ]),\n ),\n ...(parent.tokens || theme?.tokens\n ? { tokens: { ...parent.tokens, ...defined(theme?.tokens) } }\n : {}),\n };\n}\n\nconst tokenVariables = {\n onPrimaryColor: 'color-on-primary',\n dangerColor: 'color-danger',\n onDangerColor: 'color-on-danger',\n successColor: 'color-success',\n warningColor: 'color-warning',\n infoColor: 'color-info',\n textColor: 'color-text',\n mutedTextColor: 'color-text-muted',\n subtleTextColor: 'color-text-subtle',\n surfaceColor: 'color-surface',\n mutedSurfaceColor: 'color-surface-muted',\n raisedSurfaceColor: 'color-surface-raised',\n borderColor: 'color-border',\n borderHoverColor: 'color-border-hover',\n dividerColor: 'color-divider',\n borderWidth: 'border-width',\n controlShadow: 'control-shadow',\n surfaceShadow: 'surface-shadow',\n borderRadiusSm: 'radius-sm',\n borderRadiusMd: 'radius-md',\n borderRadiusLg: 'radius-lg',\n controlHeightSm: 'control-height-sm',\n controlHeightLg: 'control-height-lg',\n fontSizeSm: 'font-size-sm',\n fontSizeLg: 'font-size-lg',\n fontWeight: 'font-weight',\n motionDuration: 'motion-duration',\n motionEasing: 'motion-easing',\n motionSpring: 'motion-spring',\n popupZIndex: 'z-index-popup',\n modalZIndex: 'z-index-modal',\n messageZIndex: 'z-index-message',\n buttonBorderRadius: 'button-radius',\n buttonHeight: 'button-height',\n choiceBorderRadius: 'choice-radius',\n focusColor: 'color-focus',\n primaryHoverColor: 'color-primary-hover',\n primaryActiveColor: 'color-primary-active',\n primarySoftColor: 'color-primary-soft',\n primarySoftHoverColor: 'color-primary-soft-hover',\n primarySoftActiveColor: 'color-primary-soft-active',\n primaryBorderColor: 'color-primary-border',\n dangerHoverColor: 'color-danger-hover',\n dangerActiveColor: 'color-danger-active',\n spacingSm: 'spacing-sm',\n spacingLg: 'spacing-lg',\n shadowSm: 'shadow-sm',\n shadowXs: 'shadow-xs',\n shadowMd: 'shadow-md',\n shadowLg: 'shadow-lg',\n lineHeight: 'line-height',\n} satisfies Record<keyof LeafThemeTokens, string>;\n\nconst length = (value: number | string) => (typeof value === 'number' ? `${value}px` : value);\n\n/** Expand CSS padding without splitting whitespace inside calc()/var(). */\nfunction paddingSides(value: string) {\n const parts: string[] = [];\n let depth = 0;\n let start = 0;\n for (let index = 0; index <= value.length; index++) {\n const character = value[index];\n if (character === '(') depth++;\n else if (character === ')') depth--;\n if (index === value.length || (depth === 0 && /\\s/.test(character ?? ''))) {\n const part = value.slice(start, index).trim();\n if (part) parts.push(part);\n start = index + 1;\n }\n }\n if (!parts.length || parts.length > 4) return [];\n const [top, right = top, bottom = top, left = right] = parts;\n return [top, right, bottom, left];\n}\n\n/** Explicit inputs, excluding the generated palette, for browser CSS-variable resolution. */\nexport function leafThemeColors(theme: LeafTheme): Record<string, string> {\n const colors: Record<string, string> = {};\n if (theme.primaryColor) {\n colors.primary = theme.primaryColor;\n }\n for (const key of Object.keys(tokenVariables) as (keyof LeafThemeTokens)[]) {\n const variable = tokenVariables[key];\n const value = theme.tokens?.[key];\n if (variable.startsWith('color-') && typeof value === 'string')\n colors[variable.slice(6)] = value;\n }\n return colors;\n}\n\n/** Pure, deterministic output can be rendered in the server's initial HTML. */\nexport function leafThemeVariables(theme: LeafTheme): LeafThemeStyle {\n const variables: LeafThemeStyle = {};\n if (theme.spacing !== undefined) {\n variables['--leaf-spacing'] = `${Math.max(0, theme.spacing)}px`;\n for (const [name, scale] of [\n ['xs', 0.5],\n ['sm', 1],\n ['md', 2],\n ['lg', 3],\n ['xl', 4],\n ] as const)\n variables[`--leaf-spacing-${name}`] = `calc(var(--leaf-spacing) * ${scale})`;\n }\n if (theme.lineHeight !== undefined) variables['--leaf-line-height'] = theme.lineHeight;\n if (theme.headingWeight !== undefined) variables['--leaf-heading-weight'] = theme.headingWeight;\n if (theme.elevation)\n for (const [name, blur, y] of [\n ['sm', 8, 2],\n ['md', 20, 6],\n ['lg', 48, 12],\n ] as const)\n variables[`--leaf-shadow-${name}`] =\n theme.elevation === 'none'\n ? 'none'\n : `0 ${y}px ${blur}px rgb(0 0 0 / ${theme.elevation === 'soft' ? '.08' : '.16'})`;\n for (const [name, value] of Object.entries(theme.breakpoints ?? {}))\n if (value !== undefined) variables[`--leaf-breakpoint-${name}`] = `${value}px`;\n const componentKeys = {\n borderRadius: 'radius',\n borderWidth: 'border-width',\n controlHeight: 'height',\n padding: 'padding',\n gap: 'gap',\n fontSize: 'font-size',\n color: 'color',\n background: 'background',\n borderColor: 'border-color',\n headerBackground: 'header-background',\n footerBackground: 'footer-background',\n shadow: 'shadow',\n } as const;\n const stateKeys = {\n color: 'color',\n background: 'background',\n borderColor: 'border-color',\n shadow: 'shadow',\n } as const;\n for (const [component, tokens] of Object.entries(theme.components ?? {})) {\n if (!/^[a-z][a-z\\d-]*$/i.test(component)) continue;\n const name = component.replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase();\n for (const [key, value] of Object.entries(tokens))\n if (value !== undefined && typeof value !== 'object') {\n const token = componentKeys[key as keyof typeof componentKeys];\n if (token)\n variables[`--leaf-component-${name}-${token}`] =\n typeof value === 'number' ? length(value) : value;\n if (key === 'controlHeight') {\n variables[`--leaf-component-${name}-height-sm`] =\n `max(1px, calc(var(--leaf-component-${name}-height) - 6px))`;\n variables[`--leaf-component-${name}-height-lg`] =\n `calc(var(--leaf-component-${name}-height) + 6px)`;\n }\n if (key === 'padding') {\n const sides = paddingSides(length(value));\n for (const [index, side] of ['top', 'right', 'bottom', 'left'].entries())\n variables[`--leaf-component-${name}-padding-${side}`] = sides[index];\n }\n }\n for (const state of componentStates)\n for (const [key, suffix] of Object.entries(stateKeys)) {\n const value = tokens[state]?.[key as keyof LeafComponentStateTokens];\n if (value !== undefined) variables[`--leaf-component-${name}-${state}-${suffix}`] = value;\n }\n }\n if (theme.borderRadius !== undefined) {\n variables['--leaf-radius'] = length(theme.borderRadius);\n variables['--leaf-radius-sm'] = 'calc(var(--leaf-radius) * 0.6)';\n variables['--leaf-radius-md'] = 'calc(var(--leaf-radius) * 1.2)';\n variables['--leaf-radius-lg'] = 'calc(var(--leaf-radius) * 1.6)';\n variables['--leaf-choice-radius'] = 'calc(var(--leaf-radius) * 0.5)';\n }\n if (theme.controlHeight !== undefined) {\n variables['--leaf-control-height'] = length(theme.controlHeight);\n variables['--leaf-control-height-sm'] = 'max(1px, calc(var(--leaf-control-height) - 6px))';\n variables['--leaf-control-height-lg'] = 'calc(var(--leaf-control-height) + 6px)';\n }\n if (theme.fontSize !== undefined) {\n variables['--leaf-font-size'] = length(theme.fontSize);\n variables['--leaf-font-size-sm'] = 'max(1px, calc(var(--leaf-font-size) - 1px))';\n variables['--leaf-font-size-lg'] = 'calc(var(--leaf-font-size) + 2px)';\n }\n if (theme.fontFamily !== undefined) variables['--leaf-font-family'] = theme.fontFamily;\n for (const key of Object.keys(tokenVariables) as (keyof LeafThemeTokens)[]) {\n const value = theme.tokens?.[key];\n if (value === undefined) continue;\n const variable = tokenVariables[key];\n variables[`--leaf-${variable}`] =\n typeof value !== 'number'\n ? value\n : key === 'motionDuration'\n ? `${value}ms`\n : variable.includes('radius') ||\n variable.includes('height') ||\n variable.includes('font-size') ||\n variable === 'border-width' ||\n variable.includes('spacing')\n ? length(value)\n : value;\n }\n // An explicit global border color also styles frames whose normal border is\n // transparent or muted. Component and semantic state overrides still win.\n if (theme.tokens?.borderColor !== undefined)\n variables['--leaf-frame-border-color'] = theme.tokens.borderColor;\n if (theme.motion !== undefined) {\n variables['--leaf-motion-play-state'] = theme.motion ? 'running' : 'paused';\n variables['--leaf-motion-animation'] = theme.motion ? 'initial' : 'none';\n if (!theme.motion) variables['--leaf-motion-duration'] = '0ms';\n else if (theme.tokens?.motionDuration === undefined)\n variables['--leaf-motion-duration'] = '200ms';\n }\n if (\n theme.appearance ||\n theme.primaryColor ||\n Object.keys(theme.tokens ?? {}).some((key) => key.endsWith('Color'))\n ) {\n return { ...deriveColors(theme.appearance ?? 'light', leafThemeColors(theme)), ...variables };\n }\n return variables;\n}\n"],"names":["defined","value","Object","item","undefined","componentStates","mergeComponentTokens","parent","tokens","merged","state","mergeLeafTheme","theme","Set","key","tokenVariables","length","paddingSides","parts","depth","start","index","character","part","top","right","bottom","left","leafThemeColors","colors","variable","leafThemeVariables","variables","Math","name","scale","blur","y","componentKeys","stateKeys","component","token","sides","side","suffix","deriveColors"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../src/timeline/timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAKpE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CAC9E;AACD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC;IACvF,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AACD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,+
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../src/timeline/timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAKpE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CAC9E;AACD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC;IACvF,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AACD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,+BA2D/C"}
|
|
@@ -36,7 +36,7 @@ function Timeline(rawProps) {
|
|
|
36
36
|
"data-pending": '__leaf-pending' === item.key || void 0,
|
|
37
37
|
"data-side": 'right' === mode || 'alternate' === mode && index % 2 ? 'right' : 'left',
|
|
38
38
|
style: {
|
|
39
|
-
'--leaf-timeline-color': item.color && item.color in colors ? `var(--leaf-color-${colors[item.color]})` : item.color ?? 'var(--leaf-color-primary)'
|
|
39
|
+
'--leaf-timeline-color': item.color && item.color in colors ? `var(--leaf-color-${colors[item.color]})` : item.color ?? 'var(--leaf-color-primary-indicator, var(--leaf-color-primary))'
|
|
40
40
|
},
|
|
41
41
|
children: [
|
|
42
42
|
/*#__PURE__*/ jsx("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline/timeline.js","sources":["../../../src/timeline/timeline.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, useRef } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport { useListMotion } from '../shared/motion';\nimport type { LeafThemeStyle } from '../theme';\nexport interface TimelineItem {\n key: string;\n label?: ReactNode;\n children: ReactNode;\n dot?: ReactNode;\n color?: 'primary' | 'success' | 'warning' | 'error' | 'info' | (string & {});\n}\nexport interface TimelineProps extends Omit<HTMLAttributes<HTMLOListElement>, 'onChange'> {\n items: readonly TimelineItem[];\n mode?: 'left' | 'right' | 'alternate';\n reverse?: boolean;\n pending?: ReactNode;\n}\nexport function Timeline(rawProps: TimelineProps) {\n const {\n items,\n mode = 'left',\n reverse = false,\n pending,\n className,\n ...props\n } = useComponentProps('Timeline', rawProps);\n const root = useRef<HTMLOListElement>(null);\n const entries = [...items];\n if (reverse) entries.reverse();\n if (pending != null) entries.push({ key: '__leaf-pending', children: pending });\n useListMotion(\n root,\n JSON.stringify([mode, entries.map((item) => item.key)]),\n '.leaf-timeline__item',\n );\n const colors = {\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n info: 'info',\n };\n return (\n <ol\n {...props}\n ref={root}\n className={classes('leaf-timeline', `leaf-timeline--${mode}`, className)}\n >\n {entries.map((item, index) => (\n <li\n key={item.key}\n data-motion-key={item.key}\n className=\"leaf-timeline__item\"\n data-pending={item.key === '__leaf-pending' || undefined}\n data-side={mode === 'right' || (mode === 'alternate' && index % 2) ? 'right' : 'left'}\n style={\n {\n '--leaf-timeline-color':\n item.color && item.color in colors\n ? `var(--leaf-color-${colors[item.color as keyof typeof colors]})`\n : (item.color
|
|
1
|
+
{"version":3,"file":"timeline/timeline.js","sources":["../../../src/timeline/timeline.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, useRef } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport { useListMotion } from '../shared/motion';\nimport type { LeafThemeStyle } from '../theme';\nexport interface TimelineItem {\n key: string;\n label?: ReactNode;\n children: ReactNode;\n dot?: ReactNode;\n color?: 'primary' | 'success' | 'warning' | 'error' | 'info' | (string & {});\n}\nexport interface TimelineProps extends Omit<HTMLAttributes<HTMLOListElement>, 'onChange'> {\n items: readonly TimelineItem[];\n mode?: 'left' | 'right' | 'alternate';\n reverse?: boolean;\n pending?: ReactNode;\n}\nexport function Timeline(rawProps: TimelineProps) {\n const {\n items,\n mode = 'left',\n reverse = false,\n pending,\n className,\n ...props\n } = useComponentProps('Timeline', rawProps);\n const root = useRef<HTMLOListElement>(null);\n const entries = [...items];\n if (reverse) entries.reverse();\n if (pending != null) entries.push({ key: '__leaf-pending', children: pending });\n useListMotion(\n root,\n JSON.stringify([mode, entries.map((item) => item.key)]),\n '.leaf-timeline__item',\n );\n const colors = {\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n info: 'info',\n };\n return (\n <ol\n {...props}\n ref={root}\n className={classes('leaf-timeline', `leaf-timeline--${mode}`, className)}\n >\n {entries.map((item, index) => (\n <li\n key={item.key}\n data-motion-key={item.key}\n className=\"leaf-timeline__item\"\n data-pending={item.key === '__leaf-pending' || undefined}\n data-side={mode === 'right' || (mode === 'alternate' && index % 2) ? 'right' : 'left'}\n style={\n {\n '--leaf-timeline-color':\n item.color && item.color in colors\n ? `var(--leaf-color-${colors[item.color as keyof typeof colors]})`\n : (item.color ??\n 'var(--leaf-color-primary-indicator, var(--leaf-color-primary))'),\n } as LeafThemeStyle\n }\n >\n <div className=\"leaf-timeline__dot\" aria-hidden=\"true\">\n {item.dot}\n </div>\n <div className=\"leaf-timeline__content\">\n {item.label != null && <div className=\"leaf-timeline__label\">{item.label}</div>}\n {item.children}\n </div>\n </li>\n ))}\n </ol>\n );\n}\n"],"names":["Timeline","rawProps","items","mode","reverse","pending","className","props","useComponentProps","root","useRef","entries","useListMotion","JSON","item","colors","classes","index","undefined"],"mappings":";;;;;;AAkBO,SAASA,SAASC,QAAuB;IAC9C,MAAM,EACJC,KAAK,EACLC,OAAO,MAAM,EACbC,UAAU,KAAK,EACfC,OAAO,EACPC,SAAS,EACT,GAAGC,OACJ,GAAGC,kBAAkB,YAAYP;IAClC,MAAMQ,OAAOC,OAAyB;IACtC,MAAMC,UAAU;WAAIT;KAAM;IAC1B,IAAIE,SAASO,QAAQ,OAAO;IAC5B,IAAIN,AAAW,QAAXA,SAAiBM,QAAQ,IAAI,CAAC;QAAE,KAAK;QAAkB,UAAUN;IAAQ;IAC7EO,cACEH,MACAI,KAAK,SAAS,CAAC;QAACV;QAAMQ,QAAQ,GAAG,CAAC,CAACG,OAASA,KAAK,GAAG;KAAE,GACtD;IAEF,MAAMC,SAAS;QACb,SAAS;QACT,SAAS;QACT,SAAS;QACT,OAAO;QACP,MAAM;IACR;IACA,OAAO,WAAP,GACE,IAAC;QACE,GAAGR,KAAK;QACT,KAAKE;QACL,WAAWO,QAAQ,iBAAiB,CAAC,eAAe,EAAEb,MAAM,EAAEG;kBAE7DK,QAAQ,GAAG,CAAC,CAACG,MAAMG,QAAAA,WAAAA,GAClB,KAAC;gBAEC,mBAAiBH,KAAK,GAAG;gBACzB,WAAU;gBACV,gBAAcA,AAAa,qBAAbA,KAAK,GAAG,IAAyBI;gBAC/C,aAAWf,AAAS,YAATA,QAAqBA,AAAS,gBAATA,QAAwBc,QAAQ,IAAK,UAAU;gBAC/E,OACE;oBACE,yBACEH,KAAK,KAAK,IAAIA,KAAK,KAAK,IAAIC,SACxB,CAAC,iBAAiB,EAAEA,MAAM,CAACD,KAAK,KAAK,CAAwB,CAAC,CAAC,CAAC,GAC/DA,KAAK,KAAK,IACX;gBACR;;kCAGF,IAAC;wBAAI,WAAU;wBAAqB,eAAY;kCAC7CA,KAAK,GAAG;;kCAEX,KAAC;wBAAI,WAAU;;4BACE,QAAdA,KAAK,KAAK,IAAY,WAAR,GAAQ,IAAC;gCAAI,WAAU;0CAAwBA,KAAK,KAAK;;4BACvEA,KAAK,QAAQ;;;;eApBXA,KAAK,GAAG;;AA0BvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-panel.d.ts","sourceRoot":"","sources":["../../../src/timepicker/time-panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"time-panel.d.ts","sourceRoot":"","sources":["../../../src/timepicker/time-panel.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEzD,UAAU,cAAc;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CAC9C;AAqHD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,UAAU,EACV,UAAc,EACd,UAAc,EACd,SAAS,EACT,YAAY,GACb,EAAE,cAAc,+BAoFhB"}
|
|
@@ -3,6 +3,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { Check } from "lucide-react";
|
|
4
4
|
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
5
5
|
import { useLeafConfig } from "../config-provider/context.js";
|
|
6
|
+
import { ScrollbarControl } from "../scrollbar/scrollbar.js";
|
|
6
7
|
import { padTime } from "../shared/time.js";
|
|
7
8
|
const useBrowserLayoutEffect = "u" < typeof window ? useEffect : useLayoutEffect;
|
|
8
9
|
function keepTimeOptionVisible(column, row) {
|
|
@@ -64,11 +65,16 @@ function TimeColumn({ label, choices, selected, change, labels, disabled }) {
|
|
|
64
65
|
"aria-hidden": "true",
|
|
65
66
|
children: label
|
|
66
67
|
}),
|
|
67
|
-
/*#__PURE__*/ jsxs(
|
|
68
|
+
/*#__PURE__*/ jsxs(ScrollbarControl, {
|
|
68
69
|
ref: ref,
|
|
69
|
-
|
|
70
|
+
viewportClassName: "leaf-time-picker__column",
|
|
71
|
+
contentClassName: "leaf-time-picker__options",
|
|
70
72
|
role: "listbox",
|
|
71
73
|
"aria-label": label,
|
|
74
|
+
maxHeight: 210,
|
|
75
|
+
orientation: "vertical",
|
|
76
|
+
tabIndex: -1,
|
|
77
|
+
scrollbarTabIndex: -1,
|
|
72
78
|
children: [
|
|
73
79
|
/*#__PURE__*/ jsx("div", {
|
|
74
80
|
className: "leaf-time-picker__selection",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timepicker/time-panel.js","sources":["../../../src/timepicker/time-panel.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport {\n type CSSProperties,\n type KeyboardEvent,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLeafConfig } from '../config-provider/context';\nimport { padTime, type TimeParts } from '../shared/time';\n\ninterface TimePanelProps {\n value: TimeParts;\n onChange: (value: TimeParts) => void;\n showSeconds?: boolean;\n use12Hours?: boolean;\n minuteStep?: number;\n secondStep?: number;\n autoFocus?: boolean;\n disabledTime?: (parts: TimeParts) => boolean;\n}\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface TimeColumnProps {\n label: string;\n choices: number[];\n selected: number;\n change: (next: number) => void;\n labels?: string[];\n disabled?: (choice: number) => boolean;\n}\nfunction keepTimeOptionVisible(column: HTMLElement, row: HTMLElement) {\n const top = row.offsetTop;\n const bottom = top + row.offsetHeight;\n if (top < column.scrollTop) column.scrollTop = top;\n else if (bottom > column.scrollTop + column.clientHeight)\n column.scrollTop = bottom - column.clientHeight;\n}\n\nfunction TimeColumn({ label, choices, selected, change, labels, disabled }: TimeColumnProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [selection, setSelection] = useState<CSSProperties>();\n useBrowserLayoutEffect(() => {\n const column = ref.current;\n if (!column) return;\n const row = column.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]:not(:disabled)');\n const update = () => {\n setSelection(\n row\n ? ({\n '--leaf-time-selection-y': `${row.offsetTop}px`,\n '--leaf-time-selection-height': `${row.offsetHeight}px`,\n } as CSSProperties)\n : undefined,\n );\n // Scrolling a row into every ancestor moves the whole range popup and can\n // hide its endpoint labels when both time panels are present.\n if (row) keepTimeOptionVisible(column, row);\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(update);\n observer.observe(column);\n if (row) observer.observe(row);\n return () => observer.disconnect();\n }, [selected, choices, disabled]);\n const key = (event: KeyboardEvent<HTMLButtonElement>, current: number) => {\n const available = choices.filter((choice) => !disabled?.(choice));\n if (!available.length) return;\n const index = available.indexOf(current);\n let next = index;\n if (event.key === 'ArrowDown') next = (index + 1) % available.length;\n else if (event.key === 'ArrowUp') next = (index - 1 + available.length) % available.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = available.length - 1;\n else return;\n event.preventDefault();\n change(available[next] ?? current);\n const node =\n event.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>(\n 'button:not(:disabled)',\n )[next];\n node?.focus({ preventScroll: true });\n if (node && ref.current) keepTimeOptionVisible(ref.current, node);\n };\n return (\n <div className=\"leaf-time-picker__column-wrap\">\n <div className=\"leaf-time-picker__column-label\" aria-hidden=\"true\">\n {label}\n </div>\n <div ref={ref} className=\"leaf-time-picker__column\" role=\"listbox\" aria-label={label}>\n <div\n className=\"leaf-time-picker__selection\"\n data-ready={Boolean(selection)}\n aria-hidden=\"true\"\n style={selection}\n />\n {choices.map((option) => (\n <button\n type=\"button\"\n key={option}\n role=\"option\"\n disabled={disabled?.(option)}\n tabIndex={\n option ===\n (disabled?.(selected) ? choices.find((choice) => !disabled?.(choice)) : selected)\n ? 0\n : -1\n }\n aria-selected={option === selected}\n className=\"leaf-floating__option\"\n onClick={() => change(option)}\n onKeyDown={(event) => key(event, option)}\n >\n <span>{labels?.[option] ?? padTime(option)}</span>\n <Check\n size={14}\n aria-hidden=\"true\"\n className=\"leaf-time-picker__check\"\n style={{ opacity: option === selected ? 1 : 0 }}\n />\n </button>\n ))}\n </div>\n </div>\n );\n}\nexport function TimePanel({\n value,\n onChange,\n showSeconds,\n use12Hours,\n minuteStep = 5,\n secondStep = 1,\n autoFocus,\n disabledTime,\n}: TimePanelProps) {\n const { messages } = useLeafConfig();\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (autoFocus)\n ref.current\n ?.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]')\n ?.focus({ preventScroll: true });\n }, [autoFocus]);\n const options = (step: number, selected: number) => {\n const safe = Number.isFinite(step) ? Math.max(1, Math.min(60, Math.floor(step))) : 1;\n return [\n ...new Set([...Array.from({ length: Math.ceil(60 / safe) }, (_, i) => i * safe), selected]),\n ].sort((a, b) => a - b);\n };\n const column = (\n label: string,\n choices: number[],\n selected: number,\n change: (next: number) => void,\n labels?: string[],\n disabled?: (choice: number) => boolean,\n ) => {\n return (\n <TimeColumn\n key={label}\n label={label}\n choices={choices}\n selected={selected}\n change={change}\n labels={labels}\n disabled={disabled}\n />\n );\n };\n const hours = use12Hours\n ? Array.from({ length: 12 }, (_, i) => i + 1)\n : Array.from({ length: 24 }, (_, i) => i);\n return (\n <div ref={ref} className=\"leaf-time-picker__columns\">\n {column(\n messages.timePicker.hours,\n hours,\n use12Hours ? value.hour % 12 || 12 : value.hour,\n (hour) =>\n onChange({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n undefined,\n (hour) =>\n !!disabledTime?.({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n )}\n {column(\n messages.timePicker.minutes,\n options(minuteStep, value.minute),\n value.minute,\n (minute) => onChange({ ...value, minute }),\n undefined,\n (minute) => !!disabledTime?.({ ...value, minute }),\n )}\n {showSeconds &&\n column(\n messages.timePicker.seconds,\n options(secondStep, value.second),\n value.second,\n (second) => onChange({ ...value, second }),\n undefined,\n (second) => !!disabledTime?.({ ...value, second }),\n )}\n {use12Hours &&\n column(\n messages.timePicker.period,\n [0, 1],\n value.hour < 12 ? 0 : 1,\n (period) => onChange({ ...value, hour: (value.hour % 12) + period * 12 }),\n [messages.timePicker.am, messages.timePicker.pm],\n (period) => !!disabledTime?.({ ...value, hour: (value.hour % 12) + period * 12 }),\n )}\n </div>\n );\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","keepTimeOptionVisible","column","row","top","bottom","TimeColumn","label","choices","selected","change","labels","disabled","ref","useRef","selection","setSelection","useState","update","undefined","ResizeObserver","observer","key","event","current","available","choice","index","next","node","Boolean","option","padTime","Check","TimePanel","value","onChange","showSeconds","use12Hours","minuteStep","secondStep","autoFocus","disabledTime","messages","useLeafConfig","options","step","safe","Number","Math","Set","Array","_","i","a","b","hours","hour","minute","second","period"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timepicker/time-panel.js","sources":["../../../src/timepicker/time-panel.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport {\n type CSSProperties,\n type KeyboardEvent,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLeafConfig } from '../config-provider/context';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { padTime, type TimeParts } from '../shared/time';\n\ninterface TimePanelProps {\n value: TimeParts;\n onChange: (value: TimeParts) => void;\n showSeconds?: boolean;\n use12Hours?: boolean;\n minuteStep?: number;\n secondStep?: number;\n autoFocus?: boolean;\n disabledTime?: (parts: TimeParts) => boolean;\n}\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface TimeColumnProps {\n label: string;\n choices: number[];\n selected: number;\n change: (next: number) => void;\n labels?: string[];\n disabled?: (choice: number) => boolean;\n}\nfunction keepTimeOptionVisible(column: HTMLElement, row: HTMLElement) {\n const top = row.offsetTop;\n const bottom = top + row.offsetHeight;\n if (top < column.scrollTop) column.scrollTop = top;\n else if (bottom > column.scrollTop + column.clientHeight)\n column.scrollTop = bottom - column.clientHeight;\n}\n\nfunction TimeColumn({ label, choices, selected, change, labels, disabled }: TimeColumnProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [selection, setSelection] = useState<CSSProperties>();\n useBrowserLayoutEffect(() => {\n const column = ref.current;\n if (!column) return;\n const row = column.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]:not(:disabled)');\n const update = () => {\n setSelection(\n row\n ? ({\n '--leaf-time-selection-y': `${row.offsetTop}px`,\n '--leaf-time-selection-height': `${row.offsetHeight}px`,\n } as CSSProperties)\n : undefined,\n );\n // Scrolling a row into every ancestor moves the whole range popup and can\n // hide its endpoint labels when both time panels are present.\n if (row) keepTimeOptionVisible(column, row);\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(update);\n observer.observe(column);\n if (row) observer.observe(row);\n return () => observer.disconnect();\n }, [selected, choices, disabled]);\n const key = (event: KeyboardEvent<HTMLButtonElement>, current: number) => {\n const available = choices.filter((choice) => !disabled?.(choice));\n if (!available.length) return;\n const index = available.indexOf(current);\n let next = index;\n if (event.key === 'ArrowDown') next = (index + 1) % available.length;\n else if (event.key === 'ArrowUp') next = (index - 1 + available.length) % available.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = available.length - 1;\n else return;\n event.preventDefault();\n change(available[next] ?? current);\n const node =\n event.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>(\n 'button:not(:disabled)',\n )[next];\n node?.focus({ preventScroll: true });\n if (node && ref.current) keepTimeOptionVisible(ref.current, node);\n };\n return (\n <div className=\"leaf-time-picker__column-wrap\">\n <div className=\"leaf-time-picker__column-label\" aria-hidden=\"true\">\n {label}\n </div>\n <ScrollbarControl\n ref={ref}\n viewportClassName=\"leaf-time-picker__column\"\n contentClassName=\"leaf-time-picker__options\"\n role=\"listbox\"\n aria-label={label}\n maxHeight={210}\n orientation=\"vertical\"\n tabIndex={-1}\n scrollbarTabIndex={-1}\n >\n <div\n className=\"leaf-time-picker__selection\"\n data-ready={Boolean(selection)}\n aria-hidden=\"true\"\n style={selection}\n />\n {choices.map((option) => (\n <button\n type=\"button\"\n key={option}\n role=\"option\"\n disabled={disabled?.(option)}\n tabIndex={\n option ===\n (disabled?.(selected) ? choices.find((choice) => !disabled?.(choice)) : selected)\n ? 0\n : -1\n }\n aria-selected={option === selected}\n className=\"leaf-floating__option\"\n onClick={() => change(option)}\n onKeyDown={(event) => key(event, option)}\n >\n <span>{labels?.[option] ?? padTime(option)}</span>\n <Check\n size={14}\n aria-hidden=\"true\"\n className=\"leaf-time-picker__check\"\n style={{ opacity: option === selected ? 1 : 0 }}\n />\n </button>\n ))}\n </ScrollbarControl>\n </div>\n );\n}\nexport function TimePanel({\n value,\n onChange,\n showSeconds,\n use12Hours,\n minuteStep = 5,\n secondStep = 1,\n autoFocus,\n disabledTime,\n}: TimePanelProps) {\n const { messages } = useLeafConfig();\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (autoFocus)\n ref.current\n ?.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]')\n ?.focus({ preventScroll: true });\n }, [autoFocus]);\n const options = (step: number, selected: number) => {\n const safe = Number.isFinite(step) ? Math.max(1, Math.min(60, Math.floor(step))) : 1;\n return [\n ...new Set([...Array.from({ length: Math.ceil(60 / safe) }, (_, i) => i * safe), selected]),\n ].sort((a, b) => a - b);\n };\n const column = (\n label: string,\n choices: number[],\n selected: number,\n change: (next: number) => void,\n labels?: string[],\n disabled?: (choice: number) => boolean,\n ) => {\n return (\n <TimeColumn\n key={label}\n label={label}\n choices={choices}\n selected={selected}\n change={change}\n labels={labels}\n disabled={disabled}\n />\n );\n };\n const hours = use12Hours\n ? Array.from({ length: 12 }, (_, i) => i + 1)\n : Array.from({ length: 24 }, (_, i) => i);\n return (\n <div ref={ref} className=\"leaf-time-picker__columns\">\n {column(\n messages.timePicker.hours,\n hours,\n use12Hours ? value.hour % 12 || 12 : value.hour,\n (hour) =>\n onChange({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n undefined,\n (hour) =>\n !!disabledTime?.({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n )}\n {column(\n messages.timePicker.minutes,\n options(minuteStep, value.minute),\n value.minute,\n (minute) => onChange({ ...value, minute }),\n undefined,\n (minute) => !!disabledTime?.({ ...value, minute }),\n )}\n {showSeconds &&\n column(\n messages.timePicker.seconds,\n options(secondStep, value.second),\n value.second,\n (second) => onChange({ ...value, second }),\n undefined,\n (second) => !!disabledTime?.({ ...value, second }),\n )}\n {use12Hours &&\n column(\n messages.timePicker.period,\n [0, 1],\n value.hour < 12 ? 0 : 1,\n (period) => onChange({ ...value, hour: (value.hour % 12) + period * 12 }),\n [messages.timePicker.am, messages.timePicker.pm],\n (period) => !!disabledTime?.({ ...value, hour: (value.hour % 12) + period * 12 }),\n )}\n </div>\n );\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","keepTimeOptionVisible","column","row","top","bottom","TimeColumn","label","choices","selected","change","labels","disabled","ref","useRef","selection","setSelection","useState","update","undefined","ResizeObserver","observer","key","event","current","available","choice","index","next","node","ScrollbarControl","Boolean","option","padTime","Check","TimePanel","value","onChange","showSeconds","use12Hours","minuteStep","secondStep","autoFocus","disabledTime","messages","useLeafConfig","options","step","safe","Number","Math","Set","Array","_","i","a","b","hours","hour","minute","second","period"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../src/transfer/transfer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAA2B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../src/transfer/transfer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAA2B,MAAM,OAAO,CAAC;AAerF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACrF,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9D,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC;IAC9D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AACD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,+BA0N/C"}
|
|
@@ -10,6 +10,7 @@ import { estimateControlHeight } from "../density.js";
|
|
|
10
10
|
import { FieldScope, useFormField } from "../form/form.js";
|
|
11
11
|
import { InputControl } from "../input/input.js";
|
|
12
12
|
import { ResultControl } from "../result/result.js";
|
|
13
|
+
import { ScrollbarControl } from "../scrollbar/scrollbar.js";
|
|
13
14
|
import { classes } from "../shared/classes.js";
|
|
14
15
|
import { FormValue, useFieldValue } from "../shared/field.js";
|
|
15
16
|
import { useListMotion } from "../shared/motion.js";
|
|
@@ -139,11 +140,10 @@ function Transfer(rawProps) {
|
|
|
139
140
|
icon: null,
|
|
140
141
|
title: t('transfer.noItems')
|
|
141
142
|
})
|
|
142
|
-
}) : /*#__PURE__*/ jsx(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
},
|
|
143
|
+
}) : /*#__PURE__*/ jsx(ScrollbarControl, {
|
|
144
|
+
viewportClassName: "leaf-transfer__list",
|
|
145
|
+
height: height,
|
|
146
|
+
role: "presentation",
|
|
147
147
|
children: list.length ? list.map((item)=>/*#__PURE__*/ jsx("div", {
|
|
148
148
|
children: row(item)
|
|
149
149
|
}, item.key)) : /*#__PURE__*/ jsx(ResultControl, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer/transfer.js","sources":["../../../src/transfer/transfer.tsx"],"sourcesContent":["import { ArrowLeft, ArrowRight, Search } from 'lucide-react';\nimport { type HTMLAttributes, type ReactNode, useId, useRef, useState } from 'react';\nimport { ButtonControl } from '../button/button';\nimport { CheckboxControl as Checkbox } from '../checkbox/checkbox';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { FieldScope, useFormField } from '../form/form';\nimport { InputControl } from '../input/input';\nimport { ResultControl as Result } from '../result/result';\nimport { classes } from '../shared/classes';\nimport { FormValue, useFieldValue } from '../shared/field';\nimport { useListMotion } from '../shared/motion';\nimport { useText } from '../shared/use-text';\nimport { VirtualListControl as VirtualList } from '../virtuallist/virtuallist';\nexport interface TransferItem {\n key: string;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n searchLabel?: string;\n}\nexport interface TransferChangeInfo {\n direction: 'left' | 'right';\n movedKeys: string[];\n}\nexport interface TransferProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: readonly TransferItem[];\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (keys: string[], info: TransferChangeInfo) => void;\n selectedKeys?: readonly string[];\n onSelectionChange?: (keys: string[]) => void;\n titles?: readonly [ReactNode, ReactNode];\n searchable?: boolean;\n filterOption?: (query: string, item: TransferItem) => boolean;\n renderItem?: (item: TransferItem) => ReactNode;\n disabled?: boolean;\n height?: number;\n virtual?: boolean;\n name?: string;\n form?: string;\n required?: boolean;\n oneWay?: boolean;\n}\nexport function Transfer(rawProps: TransferProps) {\n const {\n items,\n value,\n defaultValue = [],\n onChange,\n selectedKeys,\n onSelectionChange,\n titles,\n searchable = true,\n filterOption,\n renderItem,\n disabled: disabledProp,\n height = 180,\n virtual = false,\n name,\n form,\n required,\n oneWay = false,\n className,\n ...props\n } = useComponentProps('Transfer', rawProps);\n const { theme, density } = useLeafConfig();\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const t = useText();\n const id = useId();\n const trigger = useRef<HTMLButtonElement>(null);\n const root = useRef<HTMLDivElement>(null);\n const [current, setCurrent] = useFieldValue(value, defaultValue, trigger, form);\n const [internal, setInternal] = useState<readonly string[]>([]);\n const selected = selectedKeys ?? internal;\n const [queries, setQueries] = useState(['', '']);\n useListMotion(\n root,\n JSON.stringify([current, queries, items.map((item) => item.key)]),\n virtual ? '[data-no-transfer-motion]' : '.leaf-transfer__item[data-motion-key]',\n );\n const select = (keys: string[]) => {\n if (selectedKeys === undefined) setInternal(keys);\n onSelectionChange?.(keys);\n };\n const move = (direction: 'left' | 'right') => {\n const moved = items\n .filter(\n (item) =>\n !item.disabled &&\n selected.includes(item.key) &&\n current.includes(item.key) === (direction === 'left'),\n )\n .map((item) => item.key);\n if (!moved.length || disabled) return;\n const next =\n direction === 'right'\n ? [...current, ...moved]\n : current.filter((key) => !moved.includes(key));\n setCurrent(next);\n select(selected.filter((key) => !moved.includes(key)));\n onChange?.([...next], { direction, movedKeys: moved });\n };\n const panel = (side: 0 | 1) => {\n const query = queries[side] ?? '';\n const list = items.filter(\n (item) =>\n current.includes(item.key) === (side === 1) &&\n (filterOption\n ? filterOption(query, item)\n : `${item.searchLabel ?? (typeof item.label === 'string' ? item.label : item.key)} ${item.description ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())),\n );\n const enabled = list.filter((item) => !item.disabled);\n const checked = enabled.filter((item) => selected.includes(item.key));\n const row = (item: TransferItem) => (\n <div\n className=\"leaf-transfer__item\"\n data-motion-key={item.key}\n data-selected={selected.includes(item.key) ? '' : undefined}\n >\n <Checkbox\n disabled={disabled || item.disabled}\n checked={selected.includes(item.key)}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, item.key])]\n : selected.filter((key) => key !== item.key),\n )\n }\n >\n <span>\n {renderItem?.(item) ?? item.label}\n {item.description && <small>{item.description}</small>}\n </span>\n </Checkbox>\n </div>\n );\n return (\n <section className=\"leaf-transfer__panel\" aria-labelledby={`${id}-${side}`}>\n <header className=\"leaf-transfer__header\">\n <Checkbox\n aria-label={t('transfer.selectAllVisibleItems')}\n disabled={disabled || !enabled.length}\n checked={enabled.length > 0 && checked.length === enabled.length}\n indeterminate={checked.length > 0 && checked.length < enabled.length}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, ...enabled.map((item) => item.key)])]\n : selected.filter((key) => !enabled.some((item) => item.key === key)),\n )\n }\n />\n <span id={`${id}-${side}`}>\n {titles?.[side] ?? (side === 0 ? t('transfer.available') : t('transfer.selected'))}\n </span>\n <small>\n {checked.length ? `${checked.length} / ` : ''}\n {list.length}\n </small>\n </header>\n {searchable && (\n <div className=\"leaf-transfer__search\">\n <InputControl\n size=\"sm\"\n allowClear\n prefix={<Search size={14} />}\n aria-label={\n side === 0 ? t('transfer.searchAvailableItems') : t('transfer.searchSelectedItems')\n }\n value={query}\n onChange={(event) =>\n setQueries((previous) =>\n previous.map((text, index) => (index === side ? event.target.value : text)),\n )\n }\n />\n </div>\n )}\n {virtual ? (\n <VirtualList\n items={list}\n itemKey={(item) => item.key}\n renderItem={row}\n height={height}\n estimateSize={(item) =>\n Math.max(estimateControlHeight(theme, density), item.description ? 42 : 0) + 6\n }\n emptyContent={<Result size=\"sm\" icon={null} title={t('transfer.noItems')} />}\n />\n ) : (\n <div className=\"leaf-transfer__list\" style={{ height }}>\n {list.length ? (\n list.map((item) => <div key={item.key}>{row(item)}</div>)\n ) : (\n <Result size=\"sm\" icon={null} title={t('transfer.noItems')} />\n )}\n </div>\n )}\n </section>\n );\n };\n return (\n <div\n {...props}\n ref={root}\n className={classes('leaf-transfer', className)}\n data-disabled={disabled ? '' : undefined}\n >\n <FieldScope>{panel(0)}</FieldScope>\n <div className=\"leaf-transfer__actions\">\n <ButtonControl\n ref={trigger}\n id={props.id ?? field?.id}\n size=\"sm\"\n startIcon={<ArrowRight size={16} />}\n aria-label={t('transfer.moveToSelected')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && !current.includes(item.key),\n )\n }\n onClick={() => move('right')}\n />\n {!oneWay && (\n <ButtonControl\n size=\"sm\"\n variant=\"outline\"\n startIcon={<ArrowLeft size={16} />}\n aria-label={t('transfer.moveToAvailable')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && current.includes(item.key),\n )\n }\n onClick={() => move('left')}\n />\n )}\n </div>\n <FieldScope>{panel(1)}</FieldScope>\n <FormValue\n name={name}\n form={form}\n value={current.length ? JSON.stringify(current) : ''}\n required={required ?? field?.required}\n disabled={disabled}\n triggerRef={trigger}\n />\n </div>\n );\n}\n"],"names":["Transfer","rawProps","items","value","defaultValue","onChange","selectedKeys","onSelectionChange","titles","searchable","filterOption","renderItem","disabledProp","height","virtual","name","form","required","oneWay","className","props","useComponentProps","theme","density","useLeafConfig","field","useFormField","disabled","t","useText","id","useId","trigger","useRef","root","current","setCurrent","useFieldValue","internal","setInternal","useState","selected","queries","setQueries","useListMotion","JSON","item","select","keys","undefined","move","direction","moved","next","key","panel","side","query","list","enabled","checked","row","Checkbox","event","Set","InputControl","Search","previous","text","index","VirtualList","Math","estimateControlHeight","Result","classes","FieldScope","ButtonControl","ArrowRight","ArrowLeft","FormValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transfer/transfer.js","sources":["../../../src/transfer/transfer.tsx"],"sourcesContent":["import { ArrowLeft, ArrowRight, Search } from 'lucide-react';\nimport { type HTMLAttributes, type ReactNode, useId, useRef, useState } from 'react';\nimport { ButtonControl } from '../button/button';\nimport { CheckboxControl as Checkbox } from '../checkbox/checkbox';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { FieldScope, useFormField } from '../form/form';\nimport { InputControl } from '../input/input';\nimport { ResultControl as Result } from '../result/result';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { FormValue, useFieldValue } from '../shared/field';\nimport { useListMotion } from '../shared/motion';\nimport { useText } from '../shared/use-text';\nimport { VirtualListControl as VirtualList } from '../virtuallist/virtuallist';\nexport interface TransferItem {\n key: string;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n searchLabel?: string;\n}\nexport interface TransferChangeInfo {\n direction: 'left' | 'right';\n movedKeys: string[];\n}\nexport interface TransferProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: readonly TransferItem[];\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (keys: string[], info: TransferChangeInfo) => void;\n selectedKeys?: readonly string[];\n onSelectionChange?: (keys: string[]) => void;\n titles?: readonly [ReactNode, ReactNode];\n searchable?: boolean;\n filterOption?: (query: string, item: TransferItem) => boolean;\n renderItem?: (item: TransferItem) => ReactNode;\n disabled?: boolean;\n height?: number;\n virtual?: boolean;\n name?: string;\n form?: string;\n required?: boolean;\n oneWay?: boolean;\n}\nexport function Transfer(rawProps: TransferProps) {\n const {\n items,\n value,\n defaultValue = [],\n onChange,\n selectedKeys,\n onSelectionChange,\n titles,\n searchable = true,\n filterOption,\n renderItem,\n disabled: disabledProp,\n height = 180,\n virtual = false,\n name,\n form,\n required,\n oneWay = false,\n className,\n ...props\n } = useComponentProps('Transfer', rawProps);\n const { theme, density } = useLeafConfig();\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const t = useText();\n const id = useId();\n const trigger = useRef<HTMLButtonElement>(null);\n const root = useRef<HTMLDivElement>(null);\n const [current, setCurrent] = useFieldValue(value, defaultValue, trigger, form);\n const [internal, setInternal] = useState<readonly string[]>([]);\n const selected = selectedKeys ?? internal;\n const [queries, setQueries] = useState(['', '']);\n useListMotion(\n root,\n JSON.stringify([current, queries, items.map((item) => item.key)]),\n virtual ? '[data-no-transfer-motion]' : '.leaf-transfer__item[data-motion-key]',\n );\n const select = (keys: string[]) => {\n if (selectedKeys === undefined) setInternal(keys);\n onSelectionChange?.(keys);\n };\n const move = (direction: 'left' | 'right') => {\n const moved = items\n .filter(\n (item) =>\n !item.disabled &&\n selected.includes(item.key) &&\n current.includes(item.key) === (direction === 'left'),\n )\n .map((item) => item.key);\n if (!moved.length || disabled) return;\n const next =\n direction === 'right'\n ? [...current, ...moved]\n : current.filter((key) => !moved.includes(key));\n setCurrent(next);\n select(selected.filter((key) => !moved.includes(key)));\n onChange?.([...next], { direction, movedKeys: moved });\n };\n const panel = (side: 0 | 1) => {\n const query = queries[side] ?? '';\n const list = items.filter(\n (item) =>\n current.includes(item.key) === (side === 1) &&\n (filterOption\n ? filterOption(query, item)\n : `${item.searchLabel ?? (typeof item.label === 'string' ? item.label : item.key)} ${item.description ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())),\n );\n const enabled = list.filter((item) => !item.disabled);\n const checked = enabled.filter((item) => selected.includes(item.key));\n const row = (item: TransferItem) => (\n <div\n className=\"leaf-transfer__item\"\n data-motion-key={item.key}\n data-selected={selected.includes(item.key) ? '' : undefined}\n >\n <Checkbox\n disabled={disabled || item.disabled}\n checked={selected.includes(item.key)}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, item.key])]\n : selected.filter((key) => key !== item.key),\n )\n }\n >\n <span>\n {renderItem?.(item) ?? item.label}\n {item.description && <small>{item.description}</small>}\n </span>\n </Checkbox>\n </div>\n );\n return (\n <section className=\"leaf-transfer__panel\" aria-labelledby={`${id}-${side}`}>\n <header className=\"leaf-transfer__header\">\n <Checkbox\n aria-label={t('transfer.selectAllVisibleItems')}\n disabled={disabled || !enabled.length}\n checked={enabled.length > 0 && checked.length === enabled.length}\n indeterminate={checked.length > 0 && checked.length < enabled.length}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, ...enabled.map((item) => item.key)])]\n : selected.filter((key) => !enabled.some((item) => item.key === key)),\n )\n }\n />\n <span id={`${id}-${side}`}>\n {titles?.[side] ?? (side === 0 ? t('transfer.available') : t('transfer.selected'))}\n </span>\n <small>\n {checked.length ? `${checked.length} / ` : ''}\n {list.length}\n </small>\n </header>\n {searchable && (\n <div className=\"leaf-transfer__search\">\n <InputControl\n size=\"sm\"\n allowClear\n prefix={<Search size={14} />}\n aria-label={\n side === 0 ? t('transfer.searchAvailableItems') : t('transfer.searchSelectedItems')\n }\n value={query}\n onChange={(event) =>\n setQueries((previous) =>\n previous.map((text, index) => (index === side ? event.target.value : text)),\n )\n }\n />\n </div>\n )}\n {virtual ? (\n <VirtualList\n items={list}\n itemKey={(item) => item.key}\n renderItem={row}\n height={height}\n estimateSize={(item) =>\n Math.max(estimateControlHeight(theme, density), item.description ? 42 : 0) + 6\n }\n emptyContent={<Result size=\"sm\" icon={null} title={t('transfer.noItems')} />}\n />\n ) : (\n <ScrollbarControl\n viewportClassName=\"leaf-transfer__list\"\n height={height}\n role=\"presentation\"\n >\n {list.length ? (\n list.map((item) => <div key={item.key}>{row(item)}</div>)\n ) : (\n <Result size=\"sm\" icon={null} title={t('transfer.noItems')} />\n )}\n </ScrollbarControl>\n )}\n </section>\n );\n };\n return (\n <div\n {...props}\n ref={root}\n className={classes('leaf-transfer', className)}\n data-disabled={disabled ? '' : undefined}\n >\n <FieldScope>{panel(0)}</FieldScope>\n <div className=\"leaf-transfer__actions\">\n <ButtonControl\n ref={trigger}\n id={props.id ?? field?.id}\n size=\"sm\"\n startIcon={<ArrowRight size={16} />}\n aria-label={t('transfer.moveToSelected')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && !current.includes(item.key),\n )\n }\n onClick={() => move('right')}\n />\n {!oneWay && (\n <ButtonControl\n size=\"sm\"\n variant=\"outline\"\n startIcon={<ArrowLeft size={16} />}\n aria-label={t('transfer.moveToAvailable')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && current.includes(item.key),\n )\n }\n onClick={() => move('left')}\n />\n )}\n </div>\n <FieldScope>{panel(1)}</FieldScope>\n <FormValue\n name={name}\n form={form}\n value={current.length ? JSON.stringify(current) : ''}\n required={required ?? field?.required}\n disabled={disabled}\n triggerRef={trigger}\n />\n </div>\n );\n}\n"],"names":["Transfer","rawProps","items","value","defaultValue","onChange","selectedKeys","onSelectionChange","titles","searchable","filterOption","renderItem","disabledProp","height","virtual","name","form","required","oneWay","className","props","useComponentProps","theme","density","useLeafConfig","field","useFormField","disabled","t","useText","id","useId","trigger","useRef","root","current","setCurrent","useFieldValue","internal","setInternal","useState","selected","queries","setQueries","useListMotion","JSON","item","select","keys","undefined","move","direction","moved","next","key","panel","side","query","list","enabled","checked","row","Checkbox","event","Set","InputControl","Search","previous","text","index","VirtualList","Math","estimateControlHeight","Result","ScrollbarControl","classes","FieldScope","ButtonControl","ArrowRight","ArrowLeft","FormValue"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/tree/tree.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/tree/tree.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/tree/tree.js
CHANGED
|
@@ -8,6 +8,7 @@ import { useComponentProps } from "../config-provider/component-defaults.js";
|
|
|
8
8
|
import { useLeafConfig } from "../config-provider/context.js";
|
|
9
9
|
import { estimateControlHeight } from "../density.js";
|
|
10
10
|
import { ResultControl } from "../result/result.js";
|
|
11
|
+
import { ScrollbarControl } from "../scrollbar/scrollbar.js";
|
|
11
12
|
import { classes } from "../shared/classes.js";
|
|
12
13
|
import { inertProps } from "../shared/inert.js";
|
|
13
14
|
import { useFormattedText } from "../shared/use-formatted-text.js";
|
|
@@ -363,20 +364,26 @@ function TreeControl({ data: suppliedData, selectedKeys, defaultSelectedKeys = [
|
|
|
363
364
|
const siblings = nodes.filter((node)=>!matches || matches.visible.has(node.key));
|
|
364
365
|
return siblings.map((node, index)=>renderNode(node, level, index, siblings.length));
|
|
365
366
|
};
|
|
366
|
-
const content = /*#__PURE__*/ jsx(
|
|
367
|
-
...props,
|
|
367
|
+
const content = /*#__PURE__*/ jsx(ScrollbarControl, {
|
|
368
368
|
ref: root,
|
|
369
|
+
viewportProps: {
|
|
370
|
+
...props,
|
|
371
|
+
'aria-multiselectable': multiple || checkable || void 0,
|
|
372
|
+
'aria-disabled': disabled || void 0
|
|
373
|
+
},
|
|
369
374
|
style: {
|
|
370
375
|
...virtual ? {
|
|
371
|
-
height
|
|
372
|
-
overflow: 'auto'
|
|
376
|
+
height
|
|
373
377
|
} : {},
|
|
374
378
|
...props.style
|
|
375
379
|
},
|
|
380
|
+
viewportStyle: {
|
|
381
|
+
position: 'relative'
|
|
382
|
+
},
|
|
376
383
|
role: "tree",
|
|
377
384
|
"aria-label": label ?? messages.tree.label,
|
|
378
|
-
|
|
379
|
-
|
|
385
|
+
tabIndex: -1,
|
|
386
|
+
scrollbarTabIndex: -1,
|
|
380
387
|
className: classes('leaf-tree', showLine && 'leaf-tree--lines', className),
|
|
381
388
|
children: visible.length ? virtual ? /*#__PURE__*/ jsx("div", {
|
|
382
389
|
style: {
|