@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
|
@@ -14,14 +14,19 @@ const initialGeometry = {
|
|
|
14
14
|
scrollHeight: 0,
|
|
15
15
|
left: 0,
|
|
16
16
|
top: 0,
|
|
17
|
-
rtl: false
|
|
17
|
+
rtl: false,
|
|
18
|
+
x: 0,
|
|
19
|
+
y: 0
|
|
18
20
|
};
|
|
19
|
-
const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, maxHeight, orientation = 'both', scrollbar = 'auto', viewportClassName, viewportStyle, contentClassName, contentStyle, verticalOffset = 0, className, style, children, tabIndex = 0, onScroll, id: providedId, role = 'region', 'aria-label': label, 'aria-labelledby': labelledBy, 'aria-describedby': describedBy, ...props }, forwarded) {
|
|
20
|
-
const
|
|
21
|
+
const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, maxHeight, orientation = 'both', scrollbar = 'auto', viewportClassName, viewportStyle, contentClassName, contentStyle, verticalOffset = 0, viewportProps, rootRef, scrollbarTabIndex, externalViewport, viewportRevision, resizeHandle = false, className, style, children, tabIndex = 0, onScroll, id: providedId, role = 'region', 'aria-label': label, 'aria-labelledby': labelledBy, 'aria-describedby': describedBy, ...props }, forwarded) {
|
|
22
|
+
const internalViewport = useRef(null);
|
|
23
|
+
const viewport = externalViewport ?? internalViewport;
|
|
24
|
+
const root = useRef(null);
|
|
21
25
|
const content = useRef(null);
|
|
22
|
-
const ref = useMergedRef(
|
|
26
|
+
const ref = useMergedRef(internalViewport, forwarded);
|
|
27
|
+
const mergedRoot = useMergedRef(root, rootRef);
|
|
23
28
|
const generatedId = useId();
|
|
24
|
-
const id = providedId ?? generatedId;
|
|
29
|
+
const id = viewportProps?.id ?? providedId ?? generatedId;
|
|
25
30
|
const t = useText();
|
|
26
31
|
const [geometry, setGeometry] = useState(initialGeometry);
|
|
27
32
|
const [scrolling, setScrolling] = useState(false);
|
|
@@ -32,6 +37,8 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
32
37
|
const measure = useCallback(()=>{
|
|
33
38
|
const element = viewport.current;
|
|
34
39
|
if (!element) return;
|
|
40
|
+
const bounds = element.getBoundingClientRect();
|
|
41
|
+
const rootBounds = root.current?.getBoundingClientRect();
|
|
35
42
|
const next = {
|
|
36
43
|
width: element.clientWidth,
|
|
37
44
|
height: element.clientHeight,
|
|
@@ -39,10 +46,15 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
39
46
|
scrollHeight: element.scrollHeight,
|
|
40
47
|
left: Math.abs(element.scrollLeft),
|
|
41
48
|
top: element.scrollTop,
|
|
42
|
-
rtl: 'rtl' === getComputedStyle(element).direction
|
|
49
|
+
rtl: 'rtl' === getComputedStyle(element).direction,
|
|
50
|
+
x: externalViewport && rootBounds ? bounds.left - rootBounds.left + element.clientLeft : 0,
|
|
51
|
+
y: externalViewport && rootBounds ? bounds.top - rootBounds.top + element.clientTop : 0
|
|
43
52
|
};
|
|
44
53
|
setGeometry((previous)=>Object.keys(next).every((key)=>next[key] === previous[key]) ? previous : next);
|
|
45
|
-
}, [
|
|
54
|
+
}, [
|
|
55
|
+
externalViewport,
|
|
56
|
+
viewport
|
|
57
|
+
]);
|
|
46
58
|
const schedule = useCallback(()=>{
|
|
47
59
|
if (void 0 !== frame.current) return;
|
|
48
60
|
frame.current = requestAnimationFrame(()=>{
|
|
@@ -52,11 +64,24 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
52
64
|
}, [
|
|
53
65
|
measure
|
|
54
66
|
]);
|
|
67
|
+
const reportScroll = useCallback(()=>{
|
|
68
|
+
schedule();
|
|
69
|
+
setScrolling(true);
|
|
70
|
+
clearTimeout(timeout.current);
|
|
71
|
+
timeout.current = setTimeout(()=>setScrolling(false), 700);
|
|
72
|
+
}, [
|
|
73
|
+
schedule
|
|
74
|
+
]);
|
|
55
75
|
useEffect(()=>{
|
|
56
76
|
measure();
|
|
57
77
|
const observer = "u" < typeof ResizeObserver ? void 0 : new ResizeObserver(measure);
|
|
58
78
|
if (viewport.current) observer?.observe(viewport.current);
|
|
59
79
|
if (content.current) observer?.observe(content.current);
|
|
80
|
+
const external = externalViewport?.current;
|
|
81
|
+
external?.addEventListener('scroll', reportScroll, {
|
|
82
|
+
passive: true
|
|
83
|
+
});
|
|
84
|
+
external?.addEventListener('input', schedule);
|
|
60
85
|
const mutation = "u" < typeof MutationObserver ? void 0 : new MutationObserver(schedule);
|
|
61
86
|
if (content.current) mutation?.observe(content.current, {
|
|
62
87
|
childList: true,
|
|
@@ -68,14 +93,26 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
68
93
|
return ()=>{
|
|
69
94
|
observer?.disconnect();
|
|
70
95
|
mutation?.disconnect();
|
|
96
|
+
external?.removeEventListener('scroll', reportScroll);
|
|
97
|
+
external?.removeEventListener('input', schedule);
|
|
71
98
|
window.removeEventListener('resize', schedule);
|
|
72
99
|
if (void 0 !== frame.current) cancelAnimationFrame(frame.current);
|
|
73
100
|
frame.current = void 0;
|
|
74
101
|
clearTimeout(timeout.current);
|
|
75
102
|
};
|
|
76
103
|
}, [
|
|
104
|
+
externalViewport,
|
|
105
|
+
viewport,
|
|
77
106
|
measure,
|
|
78
|
-
schedule
|
|
107
|
+
schedule,
|
|
108
|
+
reportScroll
|
|
109
|
+
]);
|
|
110
|
+
useEffect(()=>{
|
|
111
|
+
if (externalViewport) measure();
|
|
112
|
+
}, [
|
|
113
|
+
externalViewport,
|
|
114
|
+
viewportRevision,
|
|
115
|
+
measure
|
|
79
116
|
]);
|
|
80
117
|
function setPosition(vertical, value) {
|
|
81
118
|
const element = viewport.current;
|
|
@@ -100,7 +137,8 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
100
137
|
const contentSize = vertical ? geometry.scrollHeight : geometry.scrollWidth;
|
|
101
138
|
const offset = vertical ? inset : 0;
|
|
102
139
|
const crossOverflow = vertical ? horizontalOverflow : verticalOverflow;
|
|
103
|
-
const
|
|
140
|
+
const endInset = resizeHandle ? 16 : crossOverflow ? 12 : 4;
|
|
141
|
+
const trackSize = Math.max(0, visibleSize - offset - 4 - endInset);
|
|
104
142
|
const thumbSize = Math.min(trackSize, Math.max(24, trackSize * (visibleSize - offset) / Math.max(1, contentSize - offset)));
|
|
105
143
|
const maximum = Math.max(0, contentSize - visibleSize);
|
|
106
144
|
const position = Math.min(maximum, Math.max(0, vertical ? geometry.top : geometry.left));
|
|
@@ -108,9 +146,21 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
108
146
|
const logicalPosition = !vertical && geometry.rtl ? trackSize - thumbSize - thumbPosition : thumbPosition;
|
|
109
147
|
return /*#__PURE__*/ jsxs("div", {
|
|
110
148
|
className: classes('leaf-scrollbar__bar', vertical ? 'leaf-scrollbar__bar--vertical' : 'leaf-scrollbar__bar--horizontal'),
|
|
111
|
-
style: vertical ? {
|
|
149
|
+
style: vertical ? externalViewport ? {
|
|
150
|
+
top: geometry.y + inset + 4,
|
|
151
|
+
left: geometry.rtl ? geometry.x + 4 : geometry.x + geometry.width - 12,
|
|
152
|
+
height: trackSize,
|
|
153
|
+
bottom: 'auto',
|
|
154
|
+
right: 'auto'
|
|
155
|
+
} : {
|
|
112
156
|
top: inset + 4,
|
|
113
|
-
bottom:
|
|
157
|
+
bottom: endInset
|
|
158
|
+
} : externalViewport ? {
|
|
159
|
+
top: geometry.y + geometry.height - 12,
|
|
160
|
+
left: geometry.x + 4,
|
|
161
|
+
width: trackSize,
|
|
162
|
+
bottom: 'auto',
|
|
163
|
+
right: 'auto'
|
|
114
164
|
} : {
|
|
115
165
|
right: verticalOverflow && !geometry.rtl ? 12 : 4,
|
|
116
166
|
left: verticalOverflow && geometry.rtl ? 12 : 4
|
|
@@ -129,10 +179,10 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
129
179
|
}),
|
|
130
180
|
/*#__PURE__*/ jsx("div", {
|
|
131
181
|
role: "scrollbar",
|
|
132
|
-
tabIndex: maximum ? 0 : -1,
|
|
182
|
+
tabIndex: maximum ? scrollbarTabIndex ?? 0 : -1,
|
|
133
183
|
className: "leaf-scrollbar__control",
|
|
134
184
|
"aria-label": vertical ? t('scrollbar.verticalScrollbar') : t('scrollbar.horizontalScrollbar'),
|
|
135
|
-
"aria-controls": id,
|
|
185
|
+
"aria-controls": externalViewport ? externalViewport.current?.id || void 0 : id,
|
|
136
186
|
"aria-orientation": vertical ? 'vertical' : 'horizontal',
|
|
137
187
|
"aria-valuemin": 0,
|
|
138
188
|
"aria-valuemax": maximum,
|
|
@@ -199,7 +249,8 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
199
249
|
}
|
|
200
250
|
return /*#__PURE__*/ jsxs("div", {
|
|
201
251
|
...props,
|
|
202
|
-
|
|
252
|
+
ref: mergedRoot,
|
|
253
|
+
className: classes('leaf-scrollbar', externalViewport && 'leaf-scrollbar--external', className),
|
|
203
254
|
"data-scrollbar": scrollbar,
|
|
204
255
|
"data-scrolling": scrolling || void 0,
|
|
205
256
|
"data-dragging": dragging || void 0,
|
|
@@ -209,11 +260,12 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
209
260
|
...style
|
|
210
261
|
},
|
|
211
262
|
children: [
|
|
212
|
-
/*#__PURE__*/ jsx("div", {
|
|
263
|
+
externalViewport ? children : /*#__PURE__*/ jsx("div", {
|
|
213
264
|
ref: ref,
|
|
214
265
|
id: id,
|
|
215
266
|
tabIndex: tabIndex,
|
|
216
267
|
...viewportAccessibility,
|
|
268
|
+
...viewportProps,
|
|
217
269
|
className: classes('leaf-scrollbar__viewport', viewportClassName),
|
|
218
270
|
style: {
|
|
219
271
|
height: (style?.height ?? height) === void 0 ? void 0 : '100%',
|
|
@@ -222,11 +274,9 @@ const scrollbar_ScrollbarControl = /*#__PURE__*/ forwardRef(function({ height, m
|
|
|
222
274
|
...viewportStyle
|
|
223
275
|
},
|
|
224
276
|
onScroll: (event)=>{
|
|
225
|
-
|
|
226
|
-
setScrolling(true);
|
|
227
|
-
clearTimeout(timeout.current);
|
|
228
|
-
timeout.current = setTimeout(()=>setScrolling(false), 700);
|
|
277
|
+
reportScroll();
|
|
229
278
|
onScroll?.(event);
|
|
279
|
+
viewportProps?.onScroll?.(event);
|
|
230
280
|
},
|
|
231
281
|
children: /*#__PURE__*/ jsx("div", {
|
|
232
282
|
ref: content,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollbar/scrollbar.js","sources":["../../../../../src/scrollbar/scrollbar.tsx"],"sourcesContent":["import {\n type CSSProperties,\n forwardRef,\n type HTMLAttributes,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport { useMergedRef } from '../shared/field';\nimport { useText } from '../shared/use-text';\n\nexport interface ScrollbarProps extends HTMLAttributes<HTMLDivElement> {\n height?: CSSProperties['height'];\n maxHeight?: CSSProperties['maxHeight'];\n orientation?: 'vertical' | 'horizontal' | 'both';\n scrollbar?: 'auto' | 'always' | 'hidden';\n viewportClassName?: string;\n viewportStyle?: CSSProperties;\n contentClassName?: string;\n contentStyle?: CSSProperties;\n verticalOffset?: number;\n}\n\ninterface Geometry {\n width: number;\n height: number;\n scrollWidth: number;\n scrollHeight: number;\n left: number;\n top: number;\n rtl: boolean;\n}\n\nconst initialGeometry: Geometry = {\n width: 0,\n height: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n left: 0,\n top: 0,\n rtl: false,\n};\n\nexport const ScrollbarControl = forwardRef<HTMLDivElement, ScrollbarProps>(\n function ScrollbarControl(\n {\n height,\n maxHeight,\n orientation = 'both',\n scrollbar = 'auto',\n viewportClassName,\n viewportStyle,\n contentClassName,\n contentStyle,\n verticalOffset = 0,\n className,\n style,\n children,\n tabIndex = 0,\n onScroll,\n id: providedId,\n role = 'region',\n 'aria-label': label,\n 'aria-labelledby': labelledBy,\n 'aria-describedby': describedBy,\n ...props\n }: ScrollbarProps,\n forwarded,\n ) {\n const viewport = useRef<HTMLDivElement>(null);\n const content = useRef<HTMLDivElement>(null);\n const ref = useMergedRef(viewport, forwarded);\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const t = useText();\n const [geometry, setGeometry] = useState(initialGeometry);\n const [scrolling, setScrolling] = useState(false);\n const [dragging, setDragging] = useState(false);\n const frame = useRef<number | undefined>(undefined);\n const timeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const drag = useRef<{ pointerId: number; offset: number; vertical: boolean } | undefined>(\n undefined,\n );\n const measure = useCallback(() => {\n const element = viewport.current;\n if (!element) return;\n const next: Geometry = {\n width: element.clientWidth,\n height: element.clientHeight,\n scrollWidth: element.scrollWidth,\n scrollHeight: element.scrollHeight,\n left: Math.abs(element.scrollLeft),\n top: element.scrollTop,\n rtl: getComputedStyle(element).direction === 'rtl',\n };\n setGeometry((previous) =>\n Object.keys(next).every(\n (key) => next[key as keyof Geometry] === previous[key as keyof Geometry],\n )\n ? previous\n : next,\n );\n }, []);\n const schedule = useCallback(() => {\n if (frame.current !== undefined) return;\n frame.current = requestAnimationFrame(() => {\n frame.current = undefined;\n measure();\n });\n }, [measure]);\n useEffect(() => {\n measure();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(measure);\n if (viewport.current) observer?.observe(viewport.current);\n if (content.current) observer?.observe(content.current);\n const mutation =\n typeof MutationObserver === 'undefined' ? undefined : new MutationObserver(schedule);\n if (content.current)\n mutation?.observe(content.current, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n window.addEventListener('resize', schedule);\n return () => {\n observer?.disconnect();\n mutation?.disconnect();\n window.removeEventListener('resize', schedule);\n if (frame.current !== undefined) cancelAnimationFrame(frame.current);\n frame.current = undefined;\n clearTimeout(timeout.current);\n };\n }, [measure, schedule]);\n\n function setPosition(vertical: boolean, value: number) {\n const element = viewport.current;\n if (!element) return;\n const maximum = vertical\n ? element.scrollHeight - element.clientHeight\n : element.scrollWidth - element.clientWidth;\n const position = Math.min(Math.max(0, value), Math.max(0, maximum));\n if (vertical) element.scrollTop = position;\n else element.scrollLeft = geometry.rtl ? -position : position;\n schedule();\n }\n\n const horizontalOverflow =\n orientation !== 'vertical' && geometry.scrollWidth > geometry.width + 1;\n const verticalOverflow =\n orientation !== 'horizontal' && geometry.scrollHeight > geometry.height + 1;\n const inset = Math.min(Math.max(0, verticalOffset), Math.max(0, geometry.height - 32));\n const viewportAccessibility = {\n role,\n 'aria-label': label,\n 'aria-labelledby': labelledBy,\n 'aria-describedby': describedBy,\n };\n\n function bar(vertical: boolean) {\n const visibleSize = vertical ? geometry.height : geometry.width;\n const contentSize = vertical ? geometry.scrollHeight : geometry.scrollWidth;\n const offset = vertical ? inset : 0;\n const crossOverflow = vertical ? horizontalOverflow : verticalOverflow;\n const trackSize = Math.max(0, visibleSize - offset - 8 - (crossOverflow ? 8 : 0));\n const thumbSize = Math.min(\n trackSize,\n Math.max(24, (trackSize * (visibleSize - offset)) / Math.max(1, contentSize - offset)),\n );\n const maximum = Math.max(0, contentSize - visibleSize);\n const position = Math.min(maximum, Math.max(0, vertical ? geometry.top : geometry.left));\n const thumbPosition = maximum ? (position / maximum) * (trackSize - thumbSize) : 0;\n const logicalPosition =\n !vertical && geometry.rtl ? trackSize - thumbSize - thumbPosition : thumbPosition;\n return (\n <div\n key={vertical ? 'vertical' : 'horizontal'}\n className={classes(\n 'leaf-scrollbar__bar',\n vertical ? 'leaf-scrollbar__bar--vertical' : 'leaf-scrollbar__bar--horizontal',\n )}\n style={\n vertical\n ? { top: inset + 4, bottom: horizontalOverflow ? 12 : 4 }\n : {\n right: verticalOverflow && !geometry.rtl ? 12 : 4,\n left: verticalOverflow && geometry.rtl ? 12 : 4,\n }\n }\n >\n <span\n aria-hidden=\"true\"\n className=\"leaf-scrollbar__thumb\"\n style={\n vertical\n ? { height: thumbSize, transform: `translateY(${logicalPosition}px)` }\n : { width: thumbSize, transform: `translateX(${logicalPosition}px)` }\n }\n />\n <div\n role=\"scrollbar\"\n tabIndex={maximum ? 0 : -1}\n className=\"leaf-scrollbar__control\"\n aria-label={\n vertical ? t('scrollbar.verticalScrollbar') : t('scrollbar.horizontalScrollbar')\n }\n aria-controls={id}\n aria-orientation={vertical ? 'vertical' : 'horizontal'}\n aria-valuemin={0}\n aria-valuemax={maximum}\n aria-valuenow={position}\n aria-disabled={!maximum || undefined}\n onKeyDown={(event) => {\n if (!maximum) return;\n const current = viewport.current;\n const position = current\n ? vertical\n ? current.scrollTop\n : Math.abs(current.scrollLeft)\n : 0;\n let value: number | undefined;\n if (event.key === 'Home') value = 0;\n if (event.key === 'End') value = maximum;\n if (event.key === 'PageDown') value = position + visibleSize;\n if (event.key === 'PageUp') value = position - visibleSize;\n if (event.key === 'ArrowDown') value = position + 40;\n if (event.key === 'ArrowUp') value = position - 40;\n if (event.key === 'ArrowRight') value = position + (geometry.rtl ? -40 : 40);\n if (event.key === 'ArrowLeft') value = position + (geometry.rtl ? 40 : -40);\n if (value === undefined) return;\n event.preventDefault();\n setPosition(vertical, value);\n }}\n onPointerDown={(event) => {\n if (event.button !== 0 || !maximum) return;\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const pointer = vertical ? event.clientY - rect.top : event.clientX - rect.left;\n const onThumb = pointer >= logicalPosition && pointer <= logicalPosition + thumbSize;\n drag.current = {\n pointerId: event.pointerId,\n vertical,\n offset: onThumb ? pointer - logicalPosition : thumbSize / 2,\n };\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setDragging(true);\n if (!onThumb) {\n const next = Math.min(trackSize - thumbSize, Math.max(0, pointer - thumbSize / 2));\n setPosition(\n vertical,\n ((!vertical && geometry.rtl ? trackSize - thumbSize - next : next) /\n Math.max(1, trackSize - thumbSize)) *\n maximum,\n );\n }\n }}\n onPointerMove={(event) => {\n const active = drag.current;\n if (!active || active.pointerId !== event.pointerId || active.vertical !== vertical)\n return;\n const rect = event.currentTarget.getBoundingClientRect();\n const pointer = vertical ? event.clientY - rect.top : event.clientX - rect.left;\n const next = Math.min(trackSize - thumbSize, Math.max(0, pointer - active.offset));\n setPosition(\n vertical,\n ((!vertical && geometry.rtl ? trackSize - thumbSize - next : next) /\n Math.max(1, trackSize - thumbSize)) *\n maximum,\n );\n }}\n onPointerUp={() => {\n drag.current = undefined;\n setDragging(false);\n }}\n onPointerCancel={() => {\n drag.current = undefined;\n setDragging(false);\n }}\n onLostPointerCapture={() => {\n drag.current = undefined;\n setDragging(false);\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n {...props}\n className={classes('leaf-scrollbar', className)}\n data-scrollbar={scrollbar}\n data-scrolling={scrolling || undefined}\n data-dragging={dragging || undefined}\n style={{ height, maxHeight, ...style }}\n >\n <div\n ref={ref}\n id={id}\n tabIndex={tabIndex}\n {...viewportAccessibility}\n className={classes('leaf-scrollbar__viewport', viewportClassName)}\n style={{\n height: (style?.height ?? height) === undefined ? undefined : '100%',\n overflowX: orientation === 'vertical' ? 'hidden' : 'auto',\n overflowY: orientation === 'horizontal' ? 'hidden' : 'auto',\n ...viewportStyle,\n }}\n onScroll={(event) => {\n schedule();\n setScrolling(true);\n clearTimeout(timeout.current);\n timeout.current = setTimeout(() => setScrolling(false), 700);\n onScroll?.(event);\n }}\n >\n <div\n ref={content}\n className={classes('leaf-scrollbar__content', contentClassName)}\n style={contentStyle}\n >\n {children}\n </div>\n </div>\n {scrollbar !== 'hidden' &&\n (verticalOverflow || (scrollbar === 'always' && orientation !== 'horizontal')) &&\n bar(true)}\n {scrollbar !== 'hidden' &&\n (horizontalOverflow || (scrollbar === 'always' && orientation !== 'vertical')) &&\n bar(false)}\n </div>\n );\n },\n);\n\nexport const Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>(function Scrollbar(\n rawProps: ScrollbarProps,\n ref,\n) {\n const props = useComponentProps('Scrollbar', rawProps);\n return <ScrollbarControl {...props} ref={ref} />;\n});\nScrollbar.displayName = 'Scrollbar';\n"],"names":["initialGeometry","ScrollbarControl","forwardRef","height","maxHeight","orientation","scrollbar","viewportClassName","viewportStyle","contentClassName","contentStyle","verticalOffset","className","style","children","tabIndex","onScroll","providedId","role","label","labelledBy","describedBy","props","forwarded","viewport","useRef","content","ref","useMergedRef","generatedId","useId","id","t","useText","geometry","setGeometry","useState","scrolling","setScrolling","dragging","setDragging","frame","undefined","timeout","drag","measure","useCallback","element","next","Math","getComputedStyle","previous","Object","key","schedule","requestAnimationFrame","useEffect","observer","ResizeObserver","mutation","MutationObserver","window","cancelAnimationFrame","clearTimeout","setPosition","vertical","value","maximum","position","horizontalOverflow","verticalOverflow","inset","viewportAccessibility","bar","visibleSize","contentSize","offset","crossOverflow","trackSize","thumbSize","thumbPosition","logicalPosition","classes","event","current","rect","pointer","onThumb","active","setTimeout","Scrollbar","rawProps","useComponentProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scrollbar/scrollbar.js","sources":["../../../../../src/scrollbar/scrollbar.tsx"],"sourcesContent":["import {\n type CSSProperties,\n forwardRef,\n type HTMLAttributes,\n type Ref,\n type RefObject,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport { useMergedRef } from '../shared/field';\nimport { useText } from '../shared/use-text';\n\nexport interface ScrollbarProps extends HTMLAttributes<HTMLDivElement> {\n height?: CSSProperties['height'];\n maxHeight?: CSSProperties['maxHeight'];\n orientation?: 'vertical' | 'horizontal' | 'both';\n scrollbar?: 'auto' | 'always' | 'hidden';\n viewportClassName?: string;\n viewportStyle?: CSSProperties;\n contentClassName?: string;\n contentStyle?: CSSProperties;\n verticalOffset?: number;\n}\n\ninterface Geometry {\n width: number;\n height: number;\n scrollWidth: number;\n scrollHeight: number;\n left: number;\n top: number;\n rtl: boolean;\n x: number;\n y: number;\n}\n\ninterface ScrollbarControlProps extends ScrollbarProps {\n /** Internal composition keeps semantic attributes on the actual scroll viewport. */\n viewportProps?: HTMLAttributes<HTMLDivElement>;\n rootRef?: Ref<HTMLDivElement>;\n scrollbarTabIndex?: number;\n externalViewport?: RefObject<HTMLElement | null>;\n viewportRevision?: unknown;\n resizeHandle?: boolean;\n}\n\nconst initialGeometry: Geometry = {\n width: 0,\n height: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n left: 0,\n top: 0,\n rtl: false,\n x: 0,\n y: 0,\n};\n\nexport const ScrollbarControl = forwardRef<HTMLDivElement, ScrollbarControlProps>(\n function ScrollbarControl(\n {\n height,\n maxHeight,\n orientation = 'both',\n scrollbar = 'auto',\n viewportClassName,\n viewportStyle,\n contentClassName,\n contentStyle,\n verticalOffset = 0,\n viewportProps,\n rootRef,\n scrollbarTabIndex,\n externalViewport,\n viewportRevision,\n resizeHandle = false,\n className,\n style,\n children,\n tabIndex = 0,\n onScroll,\n id: providedId,\n role = 'region',\n 'aria-label': label,\n 'aria-labelledby': labelledBy,\n 'aria-describedby': describedBy,\n ...props\n }: ScrollbarControlProps,\n forwarded,\n ) {\n const internalViewport = useRef<HTMLDivElement>(null);\n const viewport = externalViewport ?? internalViewport;\n const root = useRef<HTMLDivElement>(null);\n const content = useRef<HTMLDivElement>(null);\n const ref = useMergedRef(internalViewport, forwarded);\n const mergedRoot = useMergedRef(root, rootRef);\n const generatedId = useId();\n const id = viewportProps?.id ?? providedId ?? generatedId;\n const t = useText();\n const [geometry, setGeometry] = useState(initialGeometry);\n const [scrolling, setScrolling] = useState(false);\n const [dragging, setDragging] = useState(false);\n const frame = useRef<number | undefined>(undefined);\n const timeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const drag = useRef<{ pointerId: number; offset: number; vertical: boolean } | undefined>(\n undefined,\n );\n const measure = useCallback(() => {\n const element = viewport.current;\n if (!element) return;\n const bounds = element.getBoundingClientRect();\n const rootBounds = root.current?.getBoundingClientRect();\n const next: Geometry = {\n width: element.clientWidth,\n height: element.clientHeight,\n scrollWidth: element.scrollWidth,\n scrollHeight: element.scrollHeight,\n left: Math.abs(element.scrollLeft),\n top: element.scrollTop,\n rtl: getComputedStyle(element).direction === 'rtl',\n x: externalViewport && rootBounds ? bounds.left - rootBounds.left + element.clientLeft : 0,\n y: externalViewport && rootBounds ? bounds.top - rootBounds.top + element.clientTop : 0,\n };\n setGeometry((previous) =>\n Object.keys(next).every(\n (key) => next[key as keyof Geometry] === previous[key as keyof Geometry],\n )\n ? previous\n : next,\n );\n }, [externalViewport, viewport]);\n const schedule = useCallback(() => {\n if (frame.current !== undefined) return;\n frame.current = requestAnimationFrame(() => {\n frame.current = undefined;\n measure();\n });\n }, [measure]);\n const reportScroll = useCallback(() => {\n schedule();\n setScrolling(true);\n clearTimeout(timeout.current);\n timeout.current = setTimeout(() => setScrolling(false), 700);\n }, [schedule]);\n useEffect(() => {\n measure();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(measure);\n if (viewport.current) observer?.observe(viewport.current);\n if (content.current) observer?.observe(content.current);\n const external = externalViewport?.current;\n external?.addEventListener('scroll', reportScroll, { passive: true });\n external?.addEventListener('input', schedule);\n const mutation =\n typeof MutationObserver === 'undefined' ? undefined : new MutationObserver(schedule);\n if (content.current)\n mutation?.observe(content.current, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n window.addEventListener('resize', schedule);\n return () => {\n observer?.disconnect();\n mutation?.disconnect();\n external?.removeEventListener('scroll', reportScroll);\n external?.removeEventListener('input', schedule);\n window.removeEventListener('resize', schedule);\n if (frame.current !== undefined) cancelAnimationFrame(frame.current);\n frame.current = undefined;\n clearTimeout(timeout.current);\n };\n }, [externalViewport, viewport, measure, schedule, reportScroll]);\n // Controlled native values can change scroll geometry without a DOM mutation or input event.\n // biome-ignore lint/correctness/useExhaustiveDependencies: viewportRevision explicitly invalidates external viewport measurements.\n useEffect(() => {\n if (externalViewport) measure();\n }, [externalViewport, viewportRevision, measure]);\n\n function setPosition(vertical: boolean, value: number) {\n const element = viewport.current;\n if (!element) return;\n const maximum = vertical\n ? element.scrollHeight - element.clientHeight\n : element.scrollWidth - element.clientWidth;\n const position = Math.min(Math.max(0, value), Math.max(0, maximum));\n if (vertical) element.scrollTop = position;\n else element.scrollLeft = geometry.rtl ? -position : position;\n schedule();\n }\n\n const horizontalOverflow =\n orientation !== 'vertical' && geometry.scrollWidth > geometry.width + 1;\n const verticalOverflow =\n orientation !== 'horizontal' && geometry.scrollHeight > geometry.height + 1;\n const inset = Math.min(Math.max(0, verticalOffset), Math.max(0, geometry.height - 32));\n const viewportAccessibility = {\n role,\n 'aria-label': label,\n 'aria-labelledby': labelledBy,\n 'aria-describedby': describedBy,\n };\n\n function bar(vertical: boolean) {\n const visibleSize = vertical ? geometry.height : geometry.width;\n const contentSize = vertical ? geometry.scrollHeight : geometry.scrollWidth;\n const offset = vertical ? inset : 0;\n const crossOverflow = vertical ? horizontalOverflow : verticalOverflow;\n const endInset = resizeHandle ? 16 : crossOverflow ? 12 : 4;\n const trackSize = Math.max(0, visibleSize - offset - 4 - endInset);\n const thumbSize = Math.min(\n trackSize,\n Math.max(24, (trackSize * (visibleSize - offset)) / Math.max(1, contentSize - offset)),\n );\n const maximum = Math.max(0, contentSize - visibleSize);\n const position = Math.min(maximum, Math.max(0, vertical ? geometry.top : geometry.left));\n const thumbPosition = maximum ? (position / maximum) * (trackSize - thumbSize) : 0;\n const logicalPosition =\n !vertical && geometry.rtl ? trackSize - thumbSize - thumbPosition : thumbPosition;\n return (\n <div\n key={vertical ? 'vertical' : 'horizontal'}\n className={classes(\n 'leaf-scrollbar__bar',\n vertical ? 'leaf-scrollbar__bar--vertical' : 'leaf-scrollbar__bar--horizontal',\n )}\n style={\n vertical\n ? externalViewport\n ? {\n top: geometry.y + inset + 4,\n left: geometry.rtl ? geometry.x + 4 : geometry.x + geometry.width - 12,\n height: trackSize,\n bottom: 'auto',\n right: 'auto',\n }\n : { top: inset + 4, bottom: endInset }\n : externalViewport\n ? {\n top: geometry.y + geometry.height - 12,\n left: geometry.x + 4,\n width: trackSize,\n bottom: 'auto',\n right: 'auto',\n }\n : {\n right: verticalOverflow && !geometry.rtl ? 12 : 4,\n left: verticalOverflow && geometry.rtl ? 12 : 4,\n }\n }\n >\n <span\n aria-hidden=\"true\"\n className=\"leaf-scrollbar__thumb\"\n style={\n vertical\n ? { height: thumbSize, transform: `translateY(${logicalPosition}px)` }\n : { width: thumbSize, transform: `translateX(${logicalPosition}px)` }\n }\n />\n <div\n role=\"scrollbar\"\n tabIndex={maximum ? (scrollbarTabIndex ?? 0) : -1}\n className=\"leaf-scrollbar__control\"\n aria-label={\n vertical ? t('scrollbar.verticalScrollbar') : t('scrollbar.horizontalScrollbar')\n }\n aria-controls={externalViewport ? externalViewport.current?.id || undefined : id}\n aria-orientation={vertical ? 'vertical' : 'horizontal'}\n aria-valuemin={0}\n aria-valuemax={maximum}\n aria-valuenow={position}\n aria-disabled={!maximum || undefined}\n onKeyDown={(event) => {\n if (!maximum) return;\n const current = viewport.current;\n const position = current\n ? vertical\n ? current.scrollTop\n : Math.abs(current.scrollLeft)\n : 0;\n let value: number | undefined;\n if (event.key === 'Home') value = 0;\n if (event.key === 'End') value = maximum;\n if (event.key === 'PageDown') value = position + visibleSize;\n if (event.key === 'PageUp') value = position - visibleSize;\n if (event.key === 'ArrowDown') value = position + 40;\n if (event.key === 'ArrowUp') value = position - 40;\n if (event.key === 'ArrowRight') value = position + (geometry.rtl ? -40 : 40);\n if (event.key === 'ArrowLeft') value = position + (geometry.rtl ? 40 : -40);\n if (value === undefined) return;\n event.preventDefault();\n setPosition(vertical, value);\n }}\n onPointerDown={(event) => {\n if (event.button !== 0 || !maximum) return;\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const pointer = vertical ? event.clientY - rect.top : event.clientX - rect.left;\n const onThumb = pointer >= logicalPosition && pointer <= logicalPosition + thumbSize;\n drag.current = {\n pointerId: event.pointerId,\n vertical,\n offset: onThumb ? pointer - logicalPosition : thumbSize / 2,\n };\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setDragging(true);\n if (!onThumb) {\n const next = Math.min(trackSize - thumbSize, Math.max(0, pointer - thumbSize / 2));\n setPosition(\n vertical,\n ((!vertical && geometry.rtl ? trackSize - thumbSize - next : next) /\n Math.max(1, trackSize - thumbSize)) *\n maximum,\n );\n }\n }}\n onPointerMove={(event) => {\n const active = drag.current;\n if (!active || active.pointerId !== event.pointerId || active.vertical !== vertical)\n return;\n const rect = event.currentTarget.getBoundingClientRect();\n const pointer = vertical ? event.clientY - rect.top : event.clientX - rect.left;\n const next = Math.min(trackSize - thumbSize, Math.max(0, pointer - active.offset));\n setPosition(\n vertical,\n ((!vertical && geometry.rtl ? trackSize - thumbSize - next : next) /\n Math.max(1, trackSize - thumbSize)) *\n maximum,\n );\n }}\n onPointerUp={() => {\n drag.current = undefined;\n setDragging(false);\n }}\n onPointerCancel={() => {\n drag.current = undefined;\n setDragging(false);\n }}\n onLostPointerCapture={() => {\n drag.current = undefined;\n setDragging(false);\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n {...props}\n ref={mergedRoot}\n className={classes(\n 'leaf-scrollbar',\n externalViewport && 'leaf-scrollbar--external',\n className,\n )}\n data-scrollbar={scrollbar}\n data-scrolling={scrolling || undefined}\n data-dragging={dragging || undefined}\n style={{ height, maxHeight, ...style }}\n >\n {externalViewport ? (\n children\n ) : (\n <div\n ref={ref}\n id={id}\n tabIndex={tabIndex}\n {...viewportAccessibility}\n {...viewportProps}\n className={classes('leaf-scrollbar__viewport', viewportClassName)}\n style={{\n height: (style?.height ?? height) === undefined ? undefined : '100%',\n overflowX: orientation === 'vertical' ? 'hidden' : 'auto',\n overflowY: orientation === 'horizontal' ? 'hidden' : 'auto',\n ...viewportStyle,\n }}\n onScroll={(event) => {\n reportScroll();\n onScroll?.(event);\n viewportProps?.onScroll?.(event);\n }}\n >\n <div\n ref={content}\n className={classes('leaf-scrollbar__content', contentClassName)}\n style={contentStyle}\n >\n {children}\n </div>\n </div>\n )}\n {scrollbar !== 'hidden' &&\n (verticalOverflow || (scrollbar === 'always' && orientation !== 'horizontal')) &&\n bar(true)}\n {scrollbar !== 'hidden' &&\n (horizontalOverflow || (scrollbar === 'always' && orientation !== 'vertical')) &&\n bar(false)}\n </div>\n );\n },\n);\n\nexport const Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>(function Scrollbar(\n rawProps: ScrollbarProps,\n ref,\n) {\n const props = useComponentProps('Scrollbar', rawProps);\n return <ScrollbarControl {...props} ref={ref} />;\n});\nScrollbar.displayName = 'Scrollbar';\n"],"names":["initialGeometry","ScrollbarControl","forwardRef","height","maxHeight","orientation","scrollbar","viewportClassName","viewportStyle","contentClassName","contentStyle","verticalOffset","viewportProps","rootRef","scrollbarTabIndex","externalViewport","viewportRevision","resizeHandle","className","style","children","tabIndex","onScroll","providedId","role","label","labelledBy","describedBy","props","forwarded","internalViewport","useRef","viewport","root","content","ref","useMergedRef","mergedRoot","generatedId","useId","id","t","useText","geometry","setGeometry","useState","scrolling","setScrolling","dragging","setDragging","frame","undefined","timeout","drag","measure","useCallback","element","bounds","rootBounds","next","Math","getComputedStyle","previous","Object","key","schedule","requestAnimationFrame","reportScroll","clearTimeout","setTimeout","useEffect","observer","ResizeObserver","external","mutation","MutationObserver","window","cancelAnimationFrame","setPosition","vertical","value","maximum","position","horizontalOverflow","verticalOverflow","inset","viewportAccessibility","bar","visibleSize","contentSize","offset","crossOverflow","endInset","trackSize","thumbSize","thumbPosition","logicalPosition","classes","event","current","rect","pointer","onThumb","active","Scrollbar","rawProps","useComponentProps"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ import { useFormattedText } from "../shared/use-formatted-text.js";
|
|
|
21
21
|
const empty = [];
|
|
22
22
|
const searchText = (option)=>option.searchLabel ?? ('string' == typeof option.label || 'number' == typeof option.label ? String(option.label) : option.value);
|
|
23
23
|
const select_SelectControl = /*#__PURE__*/ forwardRef(function(props, forwardedRef) {
|
|
24
|
-
const { options: suppliedOptions, size = 'md', status: statusProp, placeholder, value, defaultValue, name, required: requiredProp, allowClear = false, form, className, style, disabled: disabledProp, id: idProp, onOpenChange, open: controlledOpen, defaultOpen, inputReadOnly, labelRender, tagRender, popupRender, onPopupScroll, onClick, onKeyDown, onBeforeInput, onCompositionStart, onPaste, onBlur, multiple = false, showSearch: searchProp = false, filterOption = true, onSearch, popupWidth = '
|
|
24
|
+
const { options: suppliedOptions, size = 'md', status: statusProp, placeholder, value, defaultValue, name, required: requiredProp, allowClear = false, form, className, style, disabled: disabledProp, id: idProp, onOpenChange, open: controlledOpen, defaultOpen, inputReadOnly, labelRender, tagRender, popupRender, onPopupScroll, onClick, onKeyDown, onBeforeInput, onCompositionStart, onPaste, onBlur, multiple = false, showSearch: searchProp = false, filterOption = true, onSearch, popupWidth = 'trigger', popupMaxWidth, popupClassName, popupStyle, popupPlacement, getPopupContainer, loading = false, notFoundContent, optionRender, maxCount, maxTagCount, tagWrap = true, allowCreate = false, onCreate, virtual: virtualProp, listHeight = 248, optionHeight: optionHeightProp, onChange: _onChange, ...inputProps } = props;
|
|
25
25
|
const format = useFormattedText();
|
|
26
26
|
const showSearch = searchProp || allowCreate;
|
|
27
27
|
const [created, setCreated] = useState([]);
|
|
@@ -46,7 +46,7 @@ const select_SelectControl = /*#__PURE__*/ forwardRef(function(props, forwardedR
|
|
|
46
46
|
suppliedOptions
|
|
47
47
|
]);
|
|
48
48
|
const virtual = virtualProp ?? options.length > 100;
|
|
49
|
-
const { messages, theme, density } = useLeafConfig();
|
|
49
|
+
const { messages, theme, density, direction: configuredDirection } = useLeafConfig();
|
|
50
50
|
const optionHeight = optionHeightProp ?? Math.max(24, estimateControlHeight(theme, density) - 4);
|
|
51
51
|
const field = useFormField();
|
|
52
52
|
const disabled = disabledProp || field?.disabled;
|
|
@@ -270,6 +270,7 @@ const select_SelectControl = /*#__PURE__*/ forwardRef(function(props, forwardedR
|
|
|
270
270
|
ref: root,
|
|
271
271
|
className: classes('leaf-select', `leaf-select--${size}`, multiple && 'leaf-select--multiple', className),
|
|
272
272
|
style: style,
|
|
273
|
+
dir: props.dir ?? configuredDirection,
|
|
273
274
|
"data-status": status,
|
|
274
275
|
"data-disabled": disabled ? '' : void 0,
|
|
275
276
|
"data-open": open ? '' : void 0,
|
|
@@ -462,7 +463,6 @@ const select_SelectControl = /*#__PURE__*/ forwardRef(function(props, forwardedR
|
|
|
462
463
|
panelRef: panel,
|
|
463
464
|
matchWidth: 'trigger' === popupWidth,
|
|
464
465
|
width: 'trigger' === popupWidth ? void 0 : 'auto' === popupWidth ? 'max-content' : popupWidth,
|
|
465
|
-
minWidth: 'auto' === popupWidth ? 'trigger' : void 0,
|
|
466
466
|
maxWidth: popupMaxWidth,
|
|
467
467
|
...filtered.length ? listboxProps : {},
|
|
468
468
|
className: classes('leaf-floating', 'leaf-select__panel', popupClassName),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select/select.js","sources":["../../../../../src/select/select.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { Check, ChevronDown, LoaderCircle, Plus } from 'lucide-react';\nimport {\n type CSSProperties,\n forwardRef,\n type InputHTMLAttributes,\n type ReactNode,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { useFormField } from '../form/form';\nimport { classes } from '../shared/classes';\nimport { ClearButton } from '../shared/clear-button';\nimport { FormValue, useFieldValue, useMergedRef } from '../shared/field';\nimport {\n FloatingPanel,\n type PopupOptions,\n useActiveOption,\n useFloatingDismiss,\n usePopupState,\n} from '../shared/floating';\nimport { FloatingFeedback } from '../shared/floating-feedback';\nimport { FloatingHighlight, useFloatingHighlight } from '../shared/floating-highlight';\nimport { useListMotion } from '../shared/motion';\nimport { SelectionContent } from '../shared/selection-content';\nimport type { ControlSize, ControlStatus } from '../shared/types';\nimport { useFormattedText } from '../shared/use-formatted-text';\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n searchLabel?: string;\n}\nexport interface SelectOptionGroup {\n label: ReactNode;\n options: readonly SelectOption[];\n}\ninterface SelectBaseProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'defaultValue' | 'onChange' | 'children' | 'multiple'\n >,\n PopupOptions {\n options: readonly (SelectOption | SelectOptionGroup)[];\n size?: ControlSize;\n status?: ControlStatus;\n allowClear?: boolean;\n showSearch?: boolean;\n filterOption?: boolean | ((query: string, option: SelectOption) => boolean);\n onSearch?: (query: string) => void;\n onOpenChange?: (open: boolean) => void;\n open?: boolean;\n defaultOpen?: boolean;\n inputReadOnly?: boolean;\n labelRender?: (option: SelectOption) => ReactNode;\n tagRender?: (option: SelectOption, remove: () => void) => ReactNode;\n popupRender?: (content: ReactNode) => ReactNode;\n onPopupScroll?: (event: React.UIEvent<HTMLDivElement>) => void;\n popupWidth?: number | string;\n popupMaxWidth?: number | string;\n popupClassName?: string;\n popupStyle?: CSSProperties;\n loading?: boolean;\n notFoundContent?: ReactNode;\n optionRender?: (option: SelectOption) => ReactNode;\n maxCount?: number;\n maxTagCount?: number | 'responsive';\n tagWrap?: boolean;\n allowCreate?: boolean;\n onCreate?: (option: SelectOption) => void;\n virtual?: boolean;\n listHeight?: number;\n optionHeight?: number;\n}\nexport type SelectProps = SelectBaseProps &\n (\n | {\n multiple?: false;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, option?: SelectOption) => void;\n }\n | {\n multiple: true;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: string[], options: SelectOption[]) => void;\n }\n );\nconst empty: readonly string[] = [];\nconst searchText = (option: SelectOption) =>\n option.searchLabel ??\n (typeof option.label === 'string' || typeof option.label === 'number'\n ? String(option.label)\n : option.value);\n/** Internal rendering primitive; public Select defaults are resolved at its boundary. */\nexport const SelectControl = forwardRef<HTMLInputElement, SelectProps>(function SelectControl(\n props: SelectProps,\n forwardedRef,\n) {\n const {\n options: suppliedOptions,\n size = 'md',\n status: statusProp,\n placeholder,\n value,\n defaultValue,\n name,\n required: requiredProp,\n allowClear = false,\n form,\n className,\n style,\n disabled: disabledProp,\n id: idProp,\n onOpenChange,\n open: controlledOpen,\n defaultOpen,\n inputReadOnly,\n labelRender,\n tagRender,\n popupRender,\n onPopupScroll,\n onClick,\n onKeyDown,\n onBeforeInput,\n onCompositionStart,\n onPaste,\n onBlur,\n multiple = false,\n showSearch: searchProp = false,\n filterOption = true,\n onSearch,\n popupWidth = 'auto',\n popupMaxWidth = 420,\n popupClassName,\n popupStyle,\n popupPlacement,\n getPopupContainer,\n loading = false,\n notFoundContent,\n optionRender,\n maxCount,\n maxTagCount,\n tagWrap = true,\n allowCreate = false,\n onCreate,\n virtual: virtualProp,\n listHeight = 248,\n optionHeight: optionHeightProp,\n onChange: _onChange,\n ...inputProps\n } = props;\n const format = useFormattedText();\n const showSearch = searchProp || allowCreate;\n const [created, setCreated] = useState<SelectOption[]>([]);\n const baseOptions = useMemo(\n () => suppliedOptions.flatMap((entry) => ('options' in entry ? [...entry.options] : [entry])),\n [suppliedOptions],\n );\n const options = useMemo(\n () => [\n ...baseOptions,\n ...created.filter((entry) => !baseOptions.some((option) => option.value === entry.value)),\n ],\n [baseOptions, created],\n );\n const optionGroups = useMemo(\n () =>\n new Map(\n suppliedOptions.flatMap((entry) =>\n 'options' in entry\n ? entry.options.map((option) => [option.value, entry.label] as const)\n : [],\n ),\n ),\n [suppliedOptions],\n );\n const virtual = virtualProp ?? options.length > 100;\n const { messages, theme, density } = useLeafConfig();\n const optionHeight = optionHeightProp ?? Math.max(24, estimateControlHeight(theme, density) - 4);\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const required = requiredProp ?? field?.required;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const root = useRef<HTMLDivElement>(null);\n const input = useRef<HTMLInputElement>(null);\n const panel = useRef<HTMLDivElement>(null);\n const merged = useMergedRef(input, forwardedRef);\n const panelId = `${useId()}-listbox`;\n const [selected, setSelected] = useFieldValue<string | readonly string[]>(\n value,\n defaultValue ?? (multiple ? empty : ''),\n input,\n form,\n );\n const values = typeof selected === 'string' ? (selected ? [selected] : []) : selected;\n useListMotion(root, values[0], multiple ? '' : '.leaf-select__input-wrap[data-motion-key]');\n const atLimit =\n multiple && maxCount !== undefined && values.length >= Math.max(0, Math.floor(maxCount));\n const unavailable = (option: SelectOption) =>\n option.disabled || (atLimit && !values.includes(option.value));\n const selectedCache = useRef(new Map<string, SelectOption>());\n const nextCache = new Map<string, SelectOption>();\n for (const key of values) {\n const record = options.find((option) => option.value === key) ?? selectedCache.current.get(key);\n if (record) nextCache.set(key, record);\n }\n selectedCache.current = nextCache;\n const selectedOptions = values.map((key) => nextCache.get(key) ?? { value: key, label: key });\n // null keeps the selected label in the native input until a search is edited.\n const [query, setQuery] = useState<string | null>(null);\n const searchQuery = query ?? '';\n const [open, setOpen] = usePopupState(\n disabled || inputProps.readOnly,\n onOpenChange,\n controlledOpen,\n defaultOpen,\n );\n const [highlighted, setHighlighted] = useState(-1);\n const matched =\n !searchQuery || !showSearch || filterOption === false\n ? options\n : options.filter((option) =>\n typeof filterOption === 'function'\n ? filterOption(searchQuery, option)\n : searchText(option).toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase()),\n );\n const newValue = searchQuery.trim();\n const createOption =\n allowCreate &&\n newValue &&\n !options.some((option) => option.value === newValue || searchText(option) === newValue)\n ? { value: newValue, label: newValue }\n : null;\n const filtered = createOption ? [...matched, createOption] : matched;\n const rows = useMemo(() => {\n const entries: { key: string; option?: SelectOption; group?: ReactNode; index: number }[] = [];\n let previousGroup: ReactNode;\n filtered.forEach((option, index) => {\n const group = optionGroups.get(option.value);\n if (group !== undefined && group !== previousGroup)\n entries.push({ key: `group-${option.value}`, group, index: -1 });\n entries.push({ key: option.value, option, index });\n previousGroup = group;\n });\n return entries;\n }, [filtered, optionGroups]);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => panel.current,\n estimateSize: () => Math.max(24, optionHeight),\n overscan: 5,\n getItemKey: (index) => rows[index]?.key ?? index,\n enabled: open && virtual,\n initialRect: { height: listHeight, width: 240 },\n });\n useEffect(() => {\n if (open && virtual && highlighted >= 0) {\n const index = rows.findIndex((row) => row.index === highlighted);\n if (index >= 0) virtualizer.scrollToIndex(index, { align: 'auto' });\n }\n }, [open, virtual, highlighted, rows, virtualizer]);\n const updateQuery = (next: string) => {\n setQuery(next);\n onSearch?.(next);\n };\n const close = () => {\n setOpen(false);\n setQuery(null);\n if (searchQuery) onSearch?.('');\n };\n useFloatingDismiss(open, close, input, panel, root);\n useActiveOption(open, highlighted >= 0 ? `${panelId}-${highlighted}` : undefined, panel);\n const highlight = useFloatingHighlight(\n open,\n panel,\n highlighted >= 0 ? `${panelId}-${highlighted}` : undefined,\n `${searchQuery}:${filtered[highlighted]?.value}:${rows.length}:${virtualizer.range?.startIndex}:${virtualizer.range?.endIndex}`,\n );\n useEffect(() => {\n if (!open) setQuery(null);\n }, [open]);\n const change = (next: readonly string[]) => {\n if (disabled || inputProps.readOnly) return;\n setSelected(multiple ? next : (next[0] ?? ''));\n if (props.multiple)\n props.onChange?.(\n [...next],\n [\n ...selectedOptions,\n ...options.filter((option) => !values.includes(option.value)),\n ...(createOption ? [createOption] : []),\n ].filter((option) => next.includes(option.value)),\n );\n else\n props.onChange?.(\n next[0] ?? '',\n [...options, ...(createOption ? [createOption] : [])].find(\n (option) => option.value === next[0],\n ),\n );\n };\n const openMenu = () => {\n if (disabled || inputProps.readOnly) return;\n const active = filtered.findIndex(\n (option) => values.includes(option.value) && !unavailable(option),\n );\n setHighlighted(active >= 0 ? active : filtered.findIndex((option) => !unavailable(option)));\n setOpen(true);\n };\n const beginSearch = () => {\n if (!showSearch || disabled || inputProps.readOnly || inputReadOnly) return;\n if (!multiple && query === null) input.current?.select();\n if (!open) openMenu();\n };\n const selectOption = (option: SelectOption) => {\n if (unavailable(option) || inputProps.readOnly) return;\n if (createOption && option.value === createOption.value) {\n setCreated((previous) => [...previous, option]);\n onCreate?.(option);\n }\n change(\n multiple\n ? values.includes(option.value)\n ? values.filter((value) => value !== option.value)\n : [...values, option.value]\n : [option.value],\n );\n if (multiple) updateQuery('');\n else close();\n input.current?.focus();\n };\n const move = (direction: number) => {\n if (!filtered.length) return;\n let next = highlighted < 0 ? (direction > 0 ? -1 : filtered.length) : highlighted;\n for (let i = 0; i < filtered.length; i++) {\n next = (next + direction + filtered.length) % filtered.length;\n const candidate = filtered[next];\n if (candidate && !unavailable(candidate)) {\n setHighlighted(next);\n break;\n }\n }\n };\n const renderOption = (option: SelectOption, index: number) => (\n <button\n key={option.value}\n id={`${panelId}-${index}`}\n aria-posinset={index + 1}\n aria-setsize={filtered.length}\n type=\"button\"\n role=\"option\"\n aria-selected={values.includes(option.value)}\n aria-disabled={option.disabled || (atLimit && !values.includes(option.value)) || undefined}\n data-highlighted={highlighted === index || undefined}\n className=\"leaf-floating__option\"\n disabled={option.disabled || (atLimit && !values.includes(option.value))}\n tabIndex={-1}\n onMouseEnter={() => {\n if (!unavailable(option)) setHighlighted(index);\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => selectOption(option)}\n >\n <span className=\"leaf-floating__option-label\">\n {createOption?.value === option.value ? (\n <>\n <Plus size={14} aria-hidden=\"true\" />{' '}\n {format('select.create', {\n label: typeof option.label === 'string' ? option.label : option.value,\n })}\n </>\n ) : optionRender ? (\n optionRender(option)\n ) : (\n option.label\n )}\n </span>\n <Check size={15} aria-hidden=\"true\" className=\"leaf-select__check\" />\n </button>\n );\n const displayLabel = selectedOptions[0]\n ? (labelRender?.(selectedOptions[0]) ?? selectedOptions[0].label)\n : undefined;\n const textLabel =\n typeof displayLabel === 'string' || typeof displayLabel === 'number'\n ? String(displayLabel)\n : '';\n const inputValue = multiple ? searchQuery : showSearch && open ? (query ?? textLabel) : textLabel;\n const clearable = allowClear && values.length > 0 && !disabled && !inputProps.readOnly;\n const listboxProps = {\n id: panelId,\n role: 'listbox' as const,\n 'aria-busy': loading || undefined,\n 'aria-label': inputProps['aria-label'] ?? messages.select.placeholder,\n 'aria-multiselectable': multiple || undefined,\n };\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: Pointer events on padding forward to the keyboard-accessible combobox input.\n // biome-ignore lint/a11y/useKeyWithClickEvents: The combobox input owns all keyboard interaction; this wrapper only extends its hit area.\n <div\n ref={root}\n className={classes(\n 'leaf-select',\n `leaf-select--${size}`,\n multiple && 'leaf-select--multiple',\n className,\n )}\n style={style}\n data-status={status}\n data-disabled={disabled ? '' : undefined}\n data-open={open ? '' : undefined}\n data-clearable={clearable ? '' : undefined}\n data-searchable={showSearch ? '' : undefined}\n onMouseDown={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n !event.target.closest('input, button, a')\n )\n event.preventDefault();\n }}\n onClick={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n root.current?.contains(event.target) &&\n !event.target.closest('input, button, a')\n ) {\n input.current?.focus();\n input.current?.click();\n }\n }}\n >\n <SelectionContent\n className=\"leaf-select__content\"\n tagClassName=\"leaf-select__tag\"\n tagWrap={tagWrap}\n maxTagCount={maxTagCount}\n searchable={showSearch && !inputProps.readOnly && !inputReadOnly}\n query={searchQuery}\n removeLabel={messages.common.remove}\n items={\n multiple\n ? selectedOptions.map((option) => {\n const remove = () => {\n if (disabled || inputProps.readOnly || option.disabled) return;\n change(values.filter((item) => item !== option.value));\n input.current?.focus();\n };\n return {\n key: option.value,\n label: option.label,\n text: searchText(option),\n remove:\n !disabled && !inputProps.readOnly && !option.disabled ? remove : undefined,\n render: tagRender?.(option, remove),\n };\n })\n : undefined\n }\n >\n <span className=\"leaf-select__input-wrap\" data-motion-key={values[0] ?? ''}>\n {!multiple &&\n !textLabel &&\n displayLabel != null &&\n (!showSearch || !open || query === null) && (\n <span className=\"leaf-select__value\">{displayLabel}</span>\n )}\n <input\n {...inputProps}\n ref={merged}\n id={idProp ?? field?.id}\n form={form}\n type=\"text\"\n className=\"leaf-select__input\"\n disabled={disabled}\n readOnly={!showSearch || inputProps.readOnly || inputReadOnly}\n value={inputValue}\n placeholder={values.length ? '' : (placeholder ?? messages.select.placeholder)}\n autoComplete=\"off\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={panelId}\n aria-autocomplete={showSearch ? 'list' : undefined}\n aria-activedescendant={\n open && filtered[highlighted] ? `${panelId}-${highlighted}` : undefined\n }\n aria-required={required || undefined}\n aria-invalid={status === 'error' ? true : inputProps['aria-invalid']}\n aria-describedby={\n [inputProps['aria-describedby'], field?.descriptionId].filter(Boolean).join(' ') ||\n undefined\n }\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n if (open && !showSearch) close();\n else if (!open) openMenu();\n }\n }}\n onBlur={(event) => {\n onBlur?.(event);\n if (\n !event.defaultPrevented &&\n !root.current?.contains(event.relatedTarget) &&\n !panel.current?.contains(event.relatedTarget)\n )\n close();\n }}\n onChange={(event) => {\n if (!open) openMenu();\n updateQuery(event.target.value);\n setHighlighted(-1);\n }}\n onBeforeInput={(event) => {\n onBeforeInput?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onCompositionStart={(event) => {\n onCompositionStart?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onPaste={(event) => {\n onPaste?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || event.nativeEvent.isComposing) return;\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete')\n )\n beginSearch();\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n if (!open) openMenu();\n else move(event.key === 'ArrowDown' ? 1 : -1);\n } else if ((event.key === 'Home' || event.key === 'End') && open && !showSearch) {\n event.preventDefault();\n const candidates = filtered\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !unavailable(option));\n setHighlighted(\n (event.key === 'Home' ? candidates[0] : candidates.at(-1))?.index ?? -1,\n );\n } else if (event.key === 'Enter' || (event.key === ' ' && !showSearch)) {\n event.preventDefault();\n if (!open) openMenu();\n else {\n const option =\n filtered[highlighted] ?? filtered.find((option) => !unavailable(option));\n if (option) selectOption(option);\n }\n } else if (event.key === 'Escape' && open) {\n event.preventDefault();\n event.stopPropagation();\n close();\n } else if (event.key === 'Tab' && open) close();\n else if (\n event.key === 'Backspace' &&\n multiple &&\n !searchQuery &&\n !inputProps.readOnly\n ) {\n const last = [...values]\n .reverse()\n .find((value) => !options.find((option) => option.value === value)?.disabled);\n if (last) {\n event.preventDefault();\n change(values.filter((value) => value !== last));\n }\n }\n }}\n />\n </span>\n </SelectionContent>\n <button\n type=\"button\"\n className=\"leaf-select__arrow\"\n tabIndex={-1}\n disabled={disabled}\n aria-label={messages.select.placeholder}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (open) close();\n else openMenu();\n input.current?.focus();\n }}\n >\n {loading ? (\n <LoaderCircle className=\"leaf-select__spinner\" size={16} aria-hidden=\"true\" />\n ) : (\n <ChevronDown size={16} aria-hidden=\"true\" />\n )}\n </button>\n {clearable && (\n <ClearButton\n label={messages.select.clear}\n beforeArrow\n onClear={() => {\n change(empty);\n close();\n input.current?.focus();\n }}\n />\n )}\n <FormValue\n name={multiple ? undefined : name}\n form={form}\n value={multiple ? values.join(',') : (values[0] ?? '')}\n disabled={disabled}\n required={required}\n triggerRef={input}\n />\n {multiple &&\n values.map((value) => (\n <input\n key={value}\n type=\"hidden\"\n name={name}\n form={form}\n value={value}\n disabled={disabled}\n />\n ))}\n <FloatingPanel\n open={open}\n placement={popupPlacement}\n container={getPopupContainer}\n triggerRef={root}\n panelRef={panel}\n matchWidth={popupWidth === 'trigger'}\n width={\n popupWidth === 'trigger' ? undefined : popupWidth === 'auto' ? 'max-content' : popupWidth\n }\n minWidth={popupWidth === 'auto' ? 'trigger' : undefined}\n maxWidth={popupMaxWidth}\n {...(filtered.length ? listboxProps : {})}\n className={classes('leaf-floating', 'leaf-select__panel', popupClassName)}\n data-hover-motion=\"\"\n style={{ maxHeight: listHeight, ...popupStyle }}\n onScroll={onPopupScroll}\n >\n {/* Feedback is announced beside an empty listbox, never as a selectable option. */}\n {!filtered.length && <div {...listboxProps} />}\n <FloatingHighlight\n style={highlight}\n selected={values.includes(filtered[highlighted]?.value ?? '')}\n />\n {(popupRender ?? ((content: ReactNode) => content))(\n loading && !filtered.length ? (\n <FloatingFeedback loading>{messages.common.loading}</FloatingFeedback>\n ) : filtered.length ? (\n virtual ? (\n <div\n style={{\n height: virtualizer.getTotalSize(),\n position: 'relative',\n minWidth: '100%',\n }}\n >\n {virtualizer.getVirtualItems().map((item) => {\n const row = rows[item.index];\n if (!row) return null;\n return (\n <div\n key={row.key}\n ref={virtualizer.measureElement}\n data-index={item.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${item.start}px)`,\n }}\n >\n {row.option ? (\n renderOption(row.option, row.index)\n ) : (\n <div className=\"leaf-select__group\">{row.group}</div>\n )}\n </div>\n );\n })}\n </div>\n ) : (\n rows.map((row) =>\n row.option ? (\n renderOption(row.option, row.index)\n ) : (\n <div key={row.key} className=\"leaf-select__group\">\n {row.group}\n </div>\n ),\n )\n )\n ) : (\n <FloatingFeedback>{notFoundContent ?? messages.select.empty}</FloatingFeedback>\n ),\n )}\n </FloatingPanel>\n </div>\n );\n});\nSelectControl.displayName = 'SelectControl';\n\nexport const Select = forwardRef<HTMLInputElement, SelectProps>(function Select(rawProps, ref) {\n const props = useComponentProps('Select', rawProps);\n return <SelectControl {...props} ref={ref} />;\n});\nSelect.displayName = 'Select';\n"],"names":["empty","searchText","option","String","SelectControl","forwardRef","props","forwardedRef","suppliedOptions","size","statusProp","placeholder","value","defaultValue","name","requiredProp","allowClear","form","className","style","disabledProp","idProp","onOpenChange","controlledOpen","defaultOpen","inputReadOnly","labelRender","tagRender","popupRender","onPopupScroll","onClick","onKeyDown","onBeforeInput","onCompositionStart","onPaste","onBlur","multiple","searchProp","filterOption","onSearch","popupWidth","popupMaxWidth","popupClassName","popupStyle","popupPlacement","getPopupContainer","loading","notFoundContent","optionRender","maxCount","maxTagCount","tagWrap","allowCreate","onCreate","virtualProp","listHeight","optionHeightProp","_onChange","inputProps","format","useFormattedText","showSearch","created","setCreated","useState","baseOptions","useMemo","entry","options","optionGroups","Map","virtual","messages","theme","density","useLeafConfig","optionHeight","Math","estimateControlHeight","field","useFormField","disabled","required","status","undefined","root","useRef","input","panel","merged","useMergedRef","panelId","useId","selected","setSelected","useFieldValue","values","useListMotion","atLimit","unavailable","selectedCache","nextCache","key","record","selectedOptions","query","setQuery","searchQuery","open","setOpen","usePopupState","highlighted","setHighlighted","matched","newValue","createOption","filtered","rows","entries","previousGroup","index","group","virtualizer","useVirtualizer","useEffect","row","updateQuery","next","close","useFloatingDismiss","useActiveOption","highlight","useFloatingHighlight","change","openMenu","active","beginSearch","selectOption","previous","move","direction","i","candidate","renderOption","event","Plus","Check","displayLabel","textLabel","inputValue","clearable","listboxProps","classes","Element","SelectionContent","remove","item","Boolean","candidates","last","LoaderCircle","ChevronDown","ClearButton","FormValue","FloatingPanel","FloatingHighlight","content","FloatingFeedback","Select","rawProps","ref","useComponentProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select/select.js","sources":["../../../../../src/select/select.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { Check, ChevronDown, LoaderCircle, Plus } from 'lucide-react';\nimport {\n type CSSProperties,\n forwardRef,\n type InputHTMLAttributes,\n type ReactNode,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { useFormField } from '../form/form';\nimport { classes } from '../shared/classes';\nimport { ClearButton } from '../shared/clear-button';\nimport { FormValue, useFieldValue, useMergedRef } from '../shared/field';\nimport {\n FloatingPanel,\n type PopupOptions,\n useActiveOption,\n useFloatingDismiss,\n usePopupState,\n} from '../shared/floating';\nimport { FloatingFeedback } from '../shared/floating-feedback';\nimport { FloatingHighlight, useFloatingHighlight } from '../shared/floating-highlight';\nimport { useListMotion } from '../shared/motion';\nimport { SelectionContent } from '../shared/selection-content';\nimport type { ControlSize, ControlStatus } from '../shared/types';\nimport { useFormattedText } from '../shared/use-formatted-text';\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n searchLabel?: string;\n}\nexport interface SelectOptionGroup {\n label: ReactNode;\n options: readonly SelectOption[];\n}\ninterface SelectBaseProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'defaultValue' | 'onChange' | 'children' | 'multiple'\n >,\n PopupOptions {\n options: readonly (SelectOption | SelectOptionGroup)[];\n size?: ControlSize;\n status?: ControlStatus;\n allowClear?: boolean;\n showSearch?: boolean;\n filterOption?: boolean | ((query: string, option: SelectOption) => boolean);\n onSearch?: (query: string) => void;\n onOpenChange?: (open: boolean) => void;\n open?: boolean;\n defaultOpen?: boolean;\n inputReadOnly?: boolean;\n labelRender?: (option: SelectOption) => ReactNode;\n tagRender?: (option: SelectOption, remove: () => void) => ReactNode;\n popupRender?: (content: ReactNode) => ReactNode;\n onPopupScroll?: (event: React.UIEvent<HTMLDivElement>) => void;\n popupWidth?: number | string;\n popupMaxWidth?: number | string;\n popupClassName?: string;\n popupStyle?: CSSProperties;\n loading?: boolean;\n notFoundContent?: ReactNode;\n optionRender?: (option: SelectOption) => ReactNode;\n maxCount?: number;\n maxTagCount?: number | 'responsive';\n tagWrap?: boolean;\n allowCreate?: boolean;\n onCreate?: (option: SelectOption) => void;\n virtual?: boolean;\n listHeight?: number;\n optionHeight?: number;\n}\nexport type SelectProps = SelectBaseProps &\n (\n | {\n multiple?: false;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, option?: SelectOption) => void;\n }\n | {\n multiple: true;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: string[], options: SelectOption[]) => void;\n }\n );\nconst empty: readonly string[] = [];\nconst searchText = (option: SelectOption) =>\n option.searchLabel ??\n (typeof option.label === 'string' || typeof option.label === 'number'\n ? String(option.label)\n : option.value);\n/** Internal rendering primitive; public Select defaults are resolved at its boundary. */\nexport const SelectControl = forwardRef<HTMLInputElement, SelectProps>(function SelectControl(\n props: SelectProps,\n forwardedRef,\n) {\n const {\n options: suppliedOptions,\n size = 'md',\n status: statusProp,\n placeholder,\n value,\n defaultValue,\n name,\n required: requiredProp,\n allowClear = false,\n form,\n className,\n style,\n disabled: disabledProp,\n id: idProp,\n onOpenChange,\n open: controlledOpen,\n defaultOpen,\n inputReadOnly,\n labelRender,\n tagRender,\n popupRender,\n onPopupScroll,\n onClick,\n onKeyDown,\n onBeforeInput,\n onCompositionStart,\n onPaste,\n onBlur,\n multiple = false,\n showSearch: searchProp = false,\n filterOption = true,\n onSearch,\n popupWidth = 'trigger',\n popupMaxWidth,\n popupClassName,\n popupStyle,\n popupPlacement,\n getPopupContainer,\n loading = false,\n notFoundContent,\n optionRender,\n maxCount,\n maxTagCount,\n tagWrap = true,\n allowCreate = false,\n onCreate,\n virtual: virtualProp,\n listHeight = 248,\n optionHeight: optionHeightProp,\n onChange: _onChange,\n ...inputProps\n } = props;\n const format = useFormattedText();\n const showSearch = searchProp || allowCreate;\n const [created, setCreated] = useState<SelectOption[]>([]);\n const baseOptions = useMemo(\n () => suppliedOptions.flatMap((entry) => ('options' in entry ? [...entry.options] : [entry])),\n [suppliedOptions],\n );\n const options = useMemo(\n () => [\n ...baseOptions,\n ...created.filter((entry) => !baseOptions.some((option) => option.value === entry.value)),\n ],\n [baseOptions, created],\n );\n const optionGroups = useMemo(\n () =>\n new Map(\n suppliedOptions.flatMap((entry) =>\n 'options' in entry\n ? entry.options.map((option) => [option.value, entry.label] as const)\n : [],\n ),\n ),\n [suppliedOptions],\n );\n const virtual = virtualProp ?? options.length > 100;\n const { messages, theme, density, direction: configuredDirection } = useLeafConfig();\n const optionHeight = optionHeightProp ?? Math.max(24, estimateControlHeight(theme, density) - 4);\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const required = requiredProp ?? field?.required;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const root = useRef<HTMLDivElement>(null);\n const input = useRef<HTMLInputElement>(null);\n const panel = useRef<HTMLDivElement>(null);\n const merged = useMergedRef(input, forwardedRef);\n const panelId = `${useId()}-listbox`;\n const [selected, setSelected] = useFieldValue<string | readonly string[]>(\n value,\n defaultValue ?? (multiple ? empty : ''),\n input,\n form,\n );\n const values = typeof selected === 'string' ? (selected ? [selected] : []) : selected;\n useListMotion(root, values[0], multiple ? '' : '.leaf-select__input-wrap[data-motion-key]');\n const atLimit =\n multiple && maxCount !== undefined && values.length >= Math.max(0, Math.floor(maxCount));\n const unavailable = (option: SelectOption) =>\n option.disabled || (atLimit && !values.includes(option.value));\n const selectedCache = useRef(new Map<string, SelectOption>());\n const nextCache = new Map<string, SelectOption>();\n for (const key of values) {\n const record = options.find((option) => option.value === key) ?? selectedCache.current.get(key);\n if (record) nextCache.set(key, record);\n }\n selectedCache.current = nextCache;\n const selectedOptions = values.map((key) => nextCache.get(key) ?? { value: key, label: key });\n // null keeps the selected label in the native input until a search is edited.\n const [query, setQuery] = useState<string | null>(null);\n const searchQuery = query ?? '';\n const [open, setOpen] = usePopupState(\n disabled || inputProps.readOnly,\n onOpenChange,\n controlledOpen,\n defaultOpen,\n );\n const [highlighted, setHighlighted] = useState(-1);\n const matched =\n !searchQuery || !showSearch || filterOption === false\n ? options\n : options.filter((option) =>\n typeof filterOption === 'function'\n ? filterOption(searchQuery, option)\n : searchText(option).toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase()),\n );\n const newValue = searchQuery.trim();\n const createOption =\n allowCreate &&\n newValue &&\n !options.some((option) => option.value === newValue || searchText(option) === newValue)\n ? { value: newValue, label: newValue }\n : null;\n const filtered = createOption ? [...matched, createOption] : matched;\n const rows = useMemo(() => {\n const entries: { key: string; option?: SelectOption; group?: ReactNode; index: number }[] = [];\n let previousGroup: ReactNode;\n filtered.forEach((option, index) => {\n const group = optionGroups.get(option.value);\n if (group !== undefined && group !== previousGroup)\n entries.push({ key: `group-${option.value}`, group, index: -1 });\n entries.push({ key: option.value, option, index });\n previousGroup = group;\n });\n return entries;\n }, [filtered, optionGroups]);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => panel.current,\n estimateSize: () => Math.max(24, optionHeight),\n overscan: 5,\n getItemKey: (index) => rows[index]?.key ?? index,\n enabled: open && virtual,\n initialRect: { height: listHeight, width: 240 },\n });\n useEffect(() => {\n if (open && virtual && highlighted >= 0) {\n const index = rows.findIndex((row) => row.index === highlighted);\n if (index >= 0) virtualizer.scrollToIndex(index, { align: 'auto' });\n }\n }, [open, virtual, highlighted, rows, virtualizer]);\n const updateQuery = (next: string) => {\n setQuery(next);\n onSearch?.(next);\n };\n const close = () => {\n setOpen(false);\n setQuery(null);\n if (searchQuery) onSearch?.('');\n };\n useFloatingDismiss(open, close, input, panel, root);\n useActiveOption(open, highlighted >= 0 ? `${panelId}-${highlighted}` : undefined, panel);\n const highlight = useFloatingHighlight(\n open,\n panel,\n highlighted >= 0 ? `${panelId}-${highlighted}` : undefined,\n `${searchQuery}:${filtered[highlighted]?.value}:${rows.length}:${virtualizer.range?.startIndex}:${virtualizer.range?.endIndex}`,\n );\n useEffect(() => {\n if (!open) setQuery(null);\n }, [open]);\n const change = (next: readonly string[]) => {\n if (disabled || inputProps.readOnly) return;\n setSelected(multiple ? next : (next[0] ?? ''));\n if (props.multiple)\n props.onChange?.(\n [...next],\n [\n ...selectedOptions,\n ...options.filter((option) => !values.includes(option.value)),\n ...(createOption ? [createOption] : []),\n ].filter((option) => next.includes(option.value)),\n );\n else\n props.onChange?.(\n next[0] ?? '',\n [...options, ...(createOption ? [createOption] : [])].find(\n (option) => option.value === next[0],\n ),\n );\n };\n const openMenu = () => {\n if (disabled || inputProps.readOnly) return;\n const active = filtered.findIndex(\n (option) => values.includes(option.value) && !unavailable(option),\n );\n setHighlighted(active >= 0 ? active : filtered.findIndex((option) => !unavailable(option)));\n setOpen(true);\n };\n const beginSearch = () => {\n if (!showSearch || disabled || inputProps.readOnly || inputReadOnly) return;\n if (!multiple && query === null) input.current?.select();\n if (!open) openMenu();\n };\n const selectOption = (option: SelectOption) => {\n if (unavailable(option) || inputProps.readOnly) return;\n if (createOption && option.value === createOption.value) {\n setCreated((previous) => [...previous, option]);\n onCreate?.(option);\n }\n change(\n multiple\n ? values.includes(option.value)\n ? values.filter((value) => value !== option.value)\n : [...values, option.value]\n : [option.value],\n );\n if (multiple) updateQuery('');\n else close();\n input.current?.focus();\n };\n const move = (direction: number) => {\n if (!filtered.length) return;\n let next = highlighted < 0 ? (direction > 0 ? -1 : filtered.length) : highlighted;\n for (let i = 0; i < filtered.length; i++) {\n next = (next + direction + filtered.length) % filtered.length;\n const candidate = filtered[next];\n if (candidate && !unavailable(candidate)) {\n setHighlighted(next);\n break;\n }\n }\n };\n const renderOption = (option: SelectOption, index: number) => (\n <button\n key={option.value}\n id={`${panelId}-${index}`}\n aria-posinset={index + 1}\n aria-setsize={filtered.length}\n type=\"button\"\n role=\"option\"\n aria-selected={values.includes(option.value)}\n aria-disabled={option.disabled || (atLimit && !values.includes(option.value)) || undefined}\n data-highlighted={highlighted === index || undefined}\n className=\"leaf-floating__option\"\n disabled={option.disabled || (atLimit && !values.includes(option.value))}\n tabIndex={-1}\n onMouseEnter={() => {\n if (!unavailable(option)) setHighlighted(index);\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => selectOption(option)}\n >\n <span className=\"leaf-floating__option-label\">\n {createOption?.value === option.value ? (\n <>\n <Plus size={14} aria-hidden=\"true\" />{' '}\n {format('select.create', {\n label: typeof option.label === 'string' ? option.label : option.value,\n })}\n </>\n ) : optionRender ? (\n optionRender(option)\n ) : (\n option.label\n )}\n </span>\n <Check size={15} aria-hidden=\"true\" className=\"leaf-select__check\" />\n </button>\n );\n const displayLabel = selectedOptions[0]\n ? (labelRender?.(selectedOptions[0]) ?? selectedOptions[0].label)\n : undefined;\n const textLabel =\n typeof displayLabel === 'string' || typeof displayLabel === 'number'\n ? String(displayLabel)\n : '';\n const inputValue = multiple ? searchQuery : showSearch && open ? (query ?? textLabel) : textLabel;\n const clearable = allowClear && values.length > 0 && !disabled && !inputProps.readOnly;\n const listboxProps = {\n id: panelId,\n role: 'listbox' as const,\n 'aria-busy': loading || undefined,\n 'aria-label': inputProps['aria-label'] ?? messages.select.placeholder,\n 'aria-multiselectable': multiple || undefined,\n };\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: Pointer events on padding forward to the keyboard-accessible combobox input.\n // biome-ignore lint/a11y/useKeyWithClickEvents: The combobox input owns all keyboard interaction; this wrapper only extends its hit area.\n <div\n ref={root}\n className={classes(\n 'leaf-select',\n `leaf-select--${size}`,\n multiple && 'leaf-select--multiple',\n className,\n )}\n style={style}\n dir={props.dir ?? configuredDirection}\n data-status={status}\n data-disabled={disabled ? '' : undefined}\n data-open={open ? '' : undefined}\n data-clearable={clearable ? '' : undefined}\n data-searchable={showSearch ? '' : undefined}\n onMouseDown={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n !event.target.closest('input, button, a')\n )\n event.preventDefault();\n }}\n onClick={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n root.current?.contains(event.target) &&\n !event.target.closest('input, button, a')\n ) {\n input.current?.focus();\n input.current?.click();\n }\n }}\n >\n <SelectionContent\n className=\"leaf-select__content\"\n tagClassName=\"leaf-select__tag\"\n tagWrap={tagWrap}\n maxTagCount={maxTagCount}\n searchable={showSearch && !inputProps.readOnly && !inputReadOnly}\n query={searchQuery}\n removeLabel={messages.common.remove}\n items={\n multiple\n ? selectedOptions.map((option) => {\n const remove = () => {\n if (disabled || inputProps.readOnly || option.disabled) return;\n change(values.filter((item) => item !== option.value));\n input.current?.focus();\n };\n return {\n key: option.value,\n label: option.label,\n text: searchText(option),\n remove:\n !disabled && !inputProps.readOnly && !option.disabled ? remove : undefined,\n render: tagRender?.(option, remove),\n };\n })\n : undefined\n }\n >\n <span className=\"leaf-select__input-wrap\" data-motion-key={values[0] ?? ''}>\n {!multiple &&\n !textLabel &&\n displayLabel != null &&\n (!showSearch || !open || query === null) && (\n <span className=\"leaf-select__value\">{displayLabel}</span>\n )}\n <input\n {...inputProps}\n ref={merged}\n id={idProp ?? field?.id}\n form={form}\n type=\"text\"\n className=\"leaf-select__input\"\n disabled={disabled}\n readOnly={!showSearch || inputProps.readOnly || inputReadOnly}\n value={inputValue}\n placeholder={values.length ? '' : (placeholder ?? messages.select.placeholder)}\n autoComplete=\"off\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={panelId}\n aria-autocomplete={showSearch ? 'list' : undefined}\n aria-activedescendant={\n open && filtered[highlighted] ? `${panelId}-${highlighted}` : undefined\n }\n aria-required={required || undefined}\n aria-invalid={status === 'error' ? true : inputProps['aria-invalid']}\n aria-describedby={\n [inputProps['aria-describedby'], field?.descriptionId].filter(Boolean).join(' ') ||\n undefined\n }\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n if (open && !showSearch) close();\n else if (!open) openMenu();\n }\n }}\n onBlur={(event) => {\n onBlur?.(event);\n if (\n !event.defaultPrevented &&\n !root.current?.contains(event.relatedTarget) &&\n !panel.current?.contains(event.relatedTarget)\n )\n close();\n }}\n onChange={(event) => {\n if (!open) openMenu();\n updateQuery(event.target.value);\n setHighlighted(-1);\n }}\n onBeforeInput={(event) => {\n onBeforeInput?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onCompositionStart={(event) => {\n onCompositionStart?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onPaste={(event) => {\n onPaste?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || event.nativeEvent.isComposing) return;\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete')\n )\n beginSearch();\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n if (!open) openMenu();\n else move(event.key === 'ArrowDown' ? 1 : -1);\n } else if ((event.key === 'Home' || event.key === 'End') && open && !showSearch) {\n event.preventDefault();\n const candidates = filtered\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !unavailable(option));\n setHighlighted(\n (event.key === 'Home' ? candidates[0] : candidates.at(-1))?.index ?? -1,\n );\n } else if (event.key === 'Enter' || (event.key === ' ' && !showSearch)) {\n event.preventDefault();\n if (!open) openMenu();\n else {\n const option =\n filtered[highlighted] ?? filtered.find((option) => !unavailable(option));\n if (option) selectOption(option);\n }\n } else if (event.key === 'Escape' && open) {\n event.preventDefault();\n event.stopPropagation();\n close();\n } else if (event.key === 'Tab' && open) close();\n else if (\n event.key === 'Backspace' &&\n multiple &&\n !searchQuery &&\n !inputProps.readOnly\n ) {\n const last = [...values]\n .reverse()\n .find((value) => !options.find((option) => option.value === value)?.disabled);\n if (last) {\n event.preventDefault();\n change(values.filter((value) => value !== last));\n }\n }\n }}\n />\n </span>\n </SelectionContent>\n <button\n type=\"button\"\n className=\"leaf-select__arrow\"\n tabIndex={-1}\n disabled={disabled}\n aria-label={messages.select.placeholder}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (open) close();\n else openMenu();\n input.current?.focus();\n }}\n >\n {loading ? (\n <LoaderCircle className=\"leaf-select__spinner\" size={16} aria-hidden=\"true\" />\n ) : (\n <ChevronDown size={16} aria-hidden=\"true\" />\n )}\n </button>\n {clearable && (\n <ClearButton\n label={messages.select.clear}\n beforeArrow\n onClear={() => {\n change(empty);\n close();\n input.current?.focus();\n }}\n />\n )}\n <FormValue\n name={multiple ? undefined : name}\n form={form}\n value={multiple ? values.join(',') : (values[0] ?? '')}\n disabled={disabled}\n required={required}\n triggerRef={input}\n />\n {multiple &&\n values.map((value) => (\n <input\n key={value}\n type=\"hidden\"\n name={name}\n form={form}\n value={value}\n disabled={disabled}\n />\n ))}\n <FloatingPanel\n open={open}\n placement={popupPlacement}\n container={getPopupContainer}\n triggerRef={root}\n panelRef={panel}\n matchWidth={popupWidth === 'trigger'}\n width={\n popupWidth === 'trigger' ? undefined : popupWidth === 'auto' ? 'max-content' : popupWidth\n }\n maxWidth={popupMaxWidth}\n {...(filtered.length ? listboxProps : {})}\n className={classes('leaf-floating', 'leaf-select__panel', popupClassName)}\n data-hover-motion=\"\"\n style={{ maxHeight: listHeight, ...popupStyle }}\n onScroll={onPopupScroll}\n >\n {/* Feedback is announced beside an empty listbox, never as a selectable option. */}\n {!filtered.length && <div {...listboxProps} />}\n <FloatingHighlight\n style={highlight}\n selected={values.includes(filtered[highlighted]?.value ?? '')}\n />\n {(popupRender ?? ((content: ReactNode) => content))(\n loading && !filtered.length ? (\n <FloatingFeedback loading>{messages.common.loading}</FloatingFeedback>\n ) : filtered.length ? (\n virtual ? (\n <div\n style={{\n height: virtualizer.getTotalSize(),\n position: 'relative',\n minWidth: '100%',\n }}\n >\n {virtualizer.getVirtualItems().map((item) => {\n const row = rows[item.index];\n if (!row) return null;\n return (\n <div\n key={row.key}\n ref={virtualizer.measureElement}\n data-index={item.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${item.start}px)`,\n }}\n >\n {row.option ? (\n renderOption(row.option, row.index)\n ) : (\n <div className=\"leaf-select__group\">{row.group}</div>\n )}\n </div>\n );\n })}\n </div>\n ) : (\n rows.map((row) =>\n row.option ? (\n renderOption(row.option, row.index)\n ) : (\n <div key={row.key} className=\"leaf-select__group\">\n {row.group}\n </div>\n ),\n )\n )\n ) : (\n <FloatingFeedback>{notFoundContent ?? messages.select.empty}</FloatingFeedback>\n ),\n )}\n </FloatingPanel>\n </div>\n );\n});\nSelectControl.displayName = 'SelectControl';\n\nexport const Select = forwardRef<HTMLInputElement, SelectProps>(function Select(rawProps, ref) {\n const props = useComponentProps('Select', rawProps);\n return <SelectControl {...props} ref={ref} />;\n});\nSelect.displayName = 'Select';\n"],"names":["empty","searchText","option","String","SelectControl","forwardRef","props","forwardedRef","suppliedOptions","size","statusProp","placeholder","value","defaultValue","name","requiredProp","allowClear","form","className","style","disabledProp","idProp","onOpenChange","controlledOpen","defaultOpen","inputReadOnly","labelRender","tagRender","popupRender","onPopupScroll","onClick","onKeyDown","onBeforeInput","onCompositionStart","onPaste","onBlur","multiple","searchProp","filterOption","onSearch","popupWidth","popupMaxWidth","popupClassName","popupStyle","popupPlacement","getPopupContainer","loading","notFoundContent","optionRender","maxCount","maxTagCount","tagWrap","allowCreate","onCreate","virtualProp","listHeight","optionHeightProp","_onChange","inputProps","format","useFormattedText","showSearch","created","setCreated","useState","baseOptions","useMemo","entry","options","optionGroups","Map","virtual","messages","theme","density","configuredDirection","useLeafConfig","optionHeight","Math","estimateControlHeight","field","useFormField","disabled","required","status","undefined","root","useRef","input","panel","merged","useMergedRef","panelId","useId","selected","setSelected","useFieldValue","values","useListMotion","atLimit","unavailable","selectedCache","nextCache","key","record","selectedOptions","query","setQuery","searchQuery","open","setOpen","usePopupState","highlighted","setHighlighted","matched","newValue","createOption","filtered","rows","entries","previousGroup","index","group","virtualizer","useVirtualizer","useEffect","row","updateQuery","next","close","useFloatingDismiss","useActiveOption","highlight","useFloatingHighlight","change","openMenu","active","beginSearch","selectOption","previous","move","direction","i","candidate","renderOption","event","Plus","Check","displayLabel","textLabel","inputValue","clearable","listboxProps","classes","Element","SelectionContent","remove","item","Boolean","candidates","last","LoaderCircle","ChevronDown","ClearButton","FormValue","FloatingPanel","FloatingHighlight","content","FloatingFeedback","Select","rawProps","ref","useComponentProps"],"mappings":"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"}
|