@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
|
@@ -31,11 +31,50 @@ const defaultColors = {
|
|
|
31
31
|
border: '#38383f'
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
+
function primaryForeground(color) {
|
|
35
|
+
if (cssColorExpression(color) || !new TinyColor(color).isValid) return;
|
|
36
|
+
return readability(color, '#ffffff') >= 2.8 ? '#ffffff' : '#000000';
|
|
37
|
+
}
|
|
38
|
+
const cssColorExpression = (color)=>/^(?:var|color-mix|light-dark|oklch|oklab|lab|lch|color)\(/i.test(color);
|
|
39
|
+
function visibleDarkColor(color, backgrounds, minimum) {
|
|
40
|
+
if ([
|
|
41
|
+
color,
|
|
42
|
+
...backgrounds
|
|
43
|
+
].some((value)=>cssColorExpression(value))) return color;
|
|
44
|
+
const primary = new TinyColor(color);
|
|
45
|
+
const surfaces = backgrounds.map((value)=>new TinyColor(value));
|
|
46
|
+
if ([
|
|
47
|
+
primary,
|
|
48
|
+
...surfaces
|
|
49
|
+
].some((value)=>!value.isValid || 1 !== value.getAlpha())) return color;
|
|
50
|
+
const contrasts = (candidate)=>backgrounds.every((background)=>readability(candidate, background) >= minimum);
|
|
51
|
+
if (contrasts(color) || !contrasts('#ffffff')) return color;
|
|
52
|
+
const { h, s, l } = primary.toHsl();
|
|
53
|
+
let low = l;
|
|
54
|
+
let high = 1;
|
|
55
|
+
let result = '#ffffff';
|
|
56
|
+
for(let step = 0; step < 16; step++){
|
|
57
|
+
const lightness = (low + high) / 2;
|
|
58
|
+
const candidate = new TinyColor({
|
|
59
|
+
h,
|
|
60
|
+
s,
|
|
61
|
+
l: lightness
|
|
62
|
+
}).toHexString();
|
|
63
|
+
if (contrasts(candidate)) {
|
|
64
|
+
result = candidate;
|
|
65
|
+
high = lightness;
|
|
66
|
+
} else low = lightness;
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
34
70
|
function mixColors(first, second, weight) {
|
|
35
71
|
if (!first || !second) return;
|
|
36
72
|
const a = new TinyColor(first);
|
|
37
73
|
const b = new TinyColor(second);
|
|
38
|
-
if (!a.isValid || !b.isValid)
|
|
74
|
+
if (cssColorExpression(first) || cssColorExpression(second) || !a.isValid || !b.isValid) {
|
|
75
|
+
const cssColor = (value)=>cssColorExpression(value) || new TinyColor(value).isValid;
|
|
76
|
+
return cssColor(first) && cssColor(second) ? `color-mix(in srgb, ${first} ${Math.min(100, Math.max(0, weight))}%, ${second})` : void 0;
|
|
77
|
+
}
|
|
39
78
|
const x = a.toRgb();
|
|
40
79
|
const y = b.toRgb();
|
|
41
80
|
const ratio = Math.min(1, Math.max(0, weight / 100));
|
|
@@ -44,7 +83,7 @@ function mixColors(first, second, weight) {
|
|
|
44
83
|
return `rgba(${channel('r')}, ${channel('g')}, ${channel('b')}, ${Number(alpha.toFixed(4))})`;
|
|
45
84
|
}
|
|
46
85
|
function interactionColor(color, foreground, toward, amounts) {
|
|
47
|
-
if (!new TinyColor(color).isValid || !new TinyColor(foreground).isValid) return;
|
|
86
|
+
if (cssColorExpression(color) || cssColorExpression(foreground) || !new TinyColor(color).isValid || !new TinyColor(foreground).isValid) return;
|
|
48
87
|
const minimumContrast = Math.min(4.5, readability(color, foreground));
|
|
49
88
|
for (const amount of amounts){
|
|
50
89
|
const candidate = mixColors(color, toward, 100 - amount);
|
|
@@ -57,14 +96,34 @@ function deriveColors(appearance, overrides = {}) {
|
|
|
57
96
|
...defaultColors[appearance],
|
|
58
97
|
...overrides
|
|
59
98
|
};
|
|
99
|
+
const backgrounds = [
|
|
100
|
+
colors.surface ?? '',
|
|
101
|
+
colors['surface-muted'] ?? ''
|
|
102
|
+
];
|
|
103
|
+
const visible = (color, minimum)=>'dark' === appearance ? visibleDarkColor(color, backgrounds, minimum) : color;
|
|
104
|
+
const primary = colors.primary ?? '';
|
|
105
|
+
const ink = visible(primary, 4.5);
|
|
106
|
+
const indicator = visible(primary, 3);
|
|
107
|
+
const dim = indicator !== primary;
|
|
108
|
+
const hasPrimary = Boolean(overrides.primary);
|
|
109
|
+
if (hasPrimary && !overrides['on-primary']) colors['on-primary'] = primaryForeground(colors.primary ?? '') ?? defaultColors[appearance]['on-primary'];
|
|
60
110
|
colors['text-subtle'] ??= mixColors(colors['text-muted'], colors.surface, 92) ?? '#68686f';
|
|
61
111
|
colors['surface-raised'] ??= mixColors(colors.surface, colors.text, 98) ?? '#ffffff';
|
|
62
112
|
colors['border-hover'] ??= mixColors(colors.border, colors['text-muted'], 65) ?? '#e5e5e8';
|
|
63
113
|
const result = {};
|
|
114
|
+
result['--leaf-color-primary-ink'] = ink;
|
|
115
|
+
result['--leaf-color-primary-indicator'] = indicator;
|
|
116
|
+
result['--leaf-color-primary-fill-border'] = dim ? mixColors(primary, colors.text, 80) ?? 'transparent' : 'transparent';
|
|
117
|
+
result['--leaf-color-primary-focus'] = dim ? indicator : mixColors(primary, 'transparent', 42) ?? 'transparent';
|
|
118
|
+
if (hasPrimary) {
|
|
119
|
+
result['--leaf-color-primary'] = colors.primary ?? '';
|
|
120
|
+
result['--leaf-color-on-primary'] = colors['on-primary'] ?? defaultColors[appearance]['on-primary'];
|
|
121
|
+
}
|
|
64
122
|
for (const [key, [first, second, ratio]] of Object.entries(colorRecipes)){
|
|
65
123
|
const other = 'alpha' === second ? 'transparent' : 'white' === second ? '#fff' : 'black' === second ? '#000' : colors[second];
|
|
66
|
-
const
|
|
67
|
-
|
|
124
|
+
const source = dim && 'primary' === first && 'surface' === second ? indicator : colors[first];
|
|
125
|
+
const value = mixColors(source, other, ratio);
|
|
126
|
+
if (value) result[key] = key.startsWith('--leaf-color-primary-text-') ? visible(value, 4.5) : value;
|
|
68
127
|
}
|
|
69
128
|
for (const key of [
|
|
70
129
|
'text-subtle',
|
|
@@ -73,7 +132,7 @@ function deriveColors(appearance, overrides = {}) {
|
|
|
73
132
|
])result[`--leaf-color-${key}`] = colors[key] ?? '';
|
|
74
133
|
const warning = colors.warning;
|
|
75
134
|
const text = colors.text;
|
|
76
|
-
if (warning && text && new TinyColor(warning).isValid && new TinyColor(text).isValid) {
|
|
135
|
+
if (warning && text && !cssColorExpression(warning) && !cssColorExpression(text) && new TinyColor(warning).isValid && new TinyColor(text).isValid) {
|
|
77
136
|
const backgrounds = [
|
|
78
137
|
colors.surface,
|
|
79
138
|
colors['surface-muted'],
|
|
@@ -115,9 +174,13 @@ function deriveColors(appearance, overrides = {}) {
|
|
|
115
174
|
]);
|
|
116
175
|
if (hover) result[`--leaf-color-${key}-hover`] = hover;
|
|
117
176
|
if (active) result[`--leaf-color-${key}-active`] = active;
|
|
177
|
+
if ('primary' === key) {
|
|
178
|
+
if (hover) result['--leaf-color-primary-ink-hover'] = colors['primary-hover'] ?? visible(hover, 4.5);
|
|
179
|
+
if (active) result['--leaf-color-primary-ink-active'] = colors['primary-active'] ?? visible(active, 4.5);
|
|
180
|
+
}
|
|
118
181
|
}
|
|
119
182
|
return result;
|
|
120
183
|
}
|
|
121
|
-
export { defaultColors, deriveColors, mixColors };
|
|
184
|
+
export { defaultColors, deriveColors, mixColors, primaryForeground };
|
|
122
185
|
|
|
123
186
|
//# sourceMappingURL=colors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","sources":["../../../../src/colors.ts"],"sourcesContent":["import { readability, TinyColor } from '@ctrl/tinycolor';\nimport { colorRecipes } from './color-recipes';\n\nexport const defaultColors = {\n light: {\n primary: '#20834a',\n 'on-primary': '#ffffff',\n danger: '#c83c3c',\n 'on-danger': '#ffffff',\n warning: '#faad14',\n info: '#1677ff',\n success: '#20834a',\n text: '#202024',\n 'text-muted': '#68686f',\n surface: '#ffffff',\n 'surface-muted': '#f6f6f7',\n border: '#e5e5e8',\n },\n dark: {\n primary: '#83cf9e',\n 'on-primary': '#11271a',\n danger: '#ef8585',\n 'on-danger': '#381818',\n warning: '#ffc53d',\n info: '#69b1ff',\n success: '#83cf9e',\n text: '#ededf0',\n 'text-muted': '#a5a5ae',\n surface: '#1c1c20',\n 'surface-muted': '#25252b',\n border: '#38383f',\n },\n};\n\n/** sRGB mixing with premultiplied alpha, matching CSS transparent-color semantics. */\nexport function mixColors(\n first: string | undefined,\n second: string | undefined,\n weight: number,\n): string | undefined {\n if (!first || !second) return undefined;\n const a = new TinyColor(first);\n const b = new TinyColor(second);\n if (!a.isValid || !b.isValid) return undefined;\n const x = a.toRgb();\n const y = b.toRgb();\n const ratio = Math.min(1, Math.max(0, weight / 100));\n const alpha = x.a * ratio + y.a * (1 - ratio);\n const channel = (key: 'r' | 'g' | 'b') =>\n alpha ? Math.round((x[key] * x.a * ratio + y[key] * y.a * (1 - ratio)) / alpha) : 0;\n return `rgba(${channel('r')}, ${channel('g')}, ${channel('b')}, ${Number(alpha.toFixed(4))})`;\n}\n\n/** Derive once per theme; keep readable solid-button labels when changing shade. */\nfunction interactionColor(color: string, foreground: string, toward: string, amounts: number[]) {\n if (!new TinyColor(color).isValid || !new TinyColor(foreground).isValid) return undefined;\n const minimumContrast = Math.min(4.5, readability(color, foreground));\n for (const amount of amounts) {\n const candidate = mixColors(color, toward, 100 - amount);\n if (candidate && readability(candidate, foreground) >= minimumContrast) return candidate;\n }\n return color;\n}\n\n/** Concrete values only; CSS variable inputs can be resolved by the provider in the browser. */\nexport function deriveColors(appearance: 'light' | 'dark', overrides: Record<string, string> = {}) {\n const colors: Record<string, string> = { ...defaultColors[appearance], ...overrides };\n colors['text-subtle'] ??= mixColors(colors['text-muted'], colors.surface, 92) ?? '#68686f';\n colors['surface-raised'] ??= mixColors(colors.surface, colors.text, 98) ?? '#ffffff';\n colors['border-hover'] ??= mixColors(colors.border, colors['text-muted'], 65) ?? '#e5e5e8';\n const result: Record<`--leaf-${string}`, string> = {};\n for (const [key, [first, second, ratio]] of Object.entries(colorRecipes)) {\n const other =\n second === 'alpha'\n ? 'transparent'\n : second === 'white'\n ? '#fff'\n : second === 'black'\n ? '#000'\n : colors[second];\n const value = mixColors(colors[first], other, ratio);\n if (value) result[key as `--leaf-${string}`] = value;\n }\n for (const key of ['text-subtle', 'surface-raised', 'border-hover'])\n result[`--leaf-color-${key}`] = colors[key] ?? '';\n // Bright warning glyphs and fills need a separate, readable text color.\n const warning = colors.warning;\n const text = colors.text;\n if (warning && text && new TinyColor(warning).isValid && new TinyColor(text).isValid) {\n const backgrounds = [\n colors.surface,\n colors['surface-muted'],\n result['--leaf-color-warning-surface-8'],\n ].filter((color): color is string => Boolean(color));\n for (let weight = 80; weight >= 0; weight -= 10) {\n const ink = mixColors(warning, text, weight);\n if (ink && backgrounds.every((background) => readability(ink, background) >= 4.5)) {\n result['--leaf-color-warning-text-80'] = ink;\n break;\n }\n }\n result['--leaf-color-on-warning'] =\n readability(warning, '#202024') >= readability(warning, '#ffffff') ? '#202024' : '#ffffff';\n }\n for (const key of ['primary', 'danger']) {\n const color = colors[key];\n const foreground = colors[`on-${key}`];\n if (!color || !foreground) continue;\n const hover =\n colors[`${key}-hover`] ?? interactionColor(color, foreground, '#fff', [10, 8, 6, 4, 2.5, 1]);\n const active =\n colors[`${key}-active`] ??\n interactionColor(color, foreground, '#000', [15, 12, 10, 8, 6, 4, 2.5, 1]);\n if (hover) result[`--leaf-color-${key}-hover`] = hover;\n if (active) result[`--leaf-color-${key}-active`] = active;\n }\n return result;\n}\n"],"names":["defaultColors","mixColors","first","second","weight","a","TinyColor","b","x","y","ratio","Math","alpha","channel","key","Number","interactionColor","color","foreground","toward","amounts","minimumContrast","readability","amount","candidate","deriveColors","appearance","overrides","colors","result","Object","colorRecipes","other","value","warning","text","backgrounds","Boolean","ink","background","hover","active"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"colors.js","sources":["../../../../src/colors.ts"],"sourcesContent":["import { readability, TinyColor } from '@ctrl/tinycolor';\nimport { colorRecipes } from './color-recipes';\n\nexport const defaultColors = {\n light: {\n primary: '#20834a',\n 'on-primary': '#ffffff',\n danger: '#c83c3c',\n 'on-danger': '#ffffff',\n warning: '#faad14',\n info: '#1677ff',\n success: '#20834a',\n text: '#202024',\n 'text-muted': '#68686f',\n surface: '#ffffff',\n 'surface-muted': '#f6f6f7',\n border: '#e5e5e8',\n },\n dark: {\n primary: '#83cf9e',\n 'on-primary': '#11271a',\n danger: '#ef8585',\n 'on-danger': '#381818',\n warning: '#ffc53d',\n info: '#69b1ff',\n success: '#83cf9e',\n text: '#ededf0',\n 'text-muted': '#a5a5ae',\n surface: '#1c1c20',\n 'surface-muted': '#25252b',\n border: '#38383f',\n },\n};\n\n/** Prefer white labels at 2.8:1 contrast; brighter fills use black unless explicitly overridden. */\nexport function primaryForeground(color: string) {\n if (cssColorExpression(color) || !new TinyColor(color).isValid) return undefined;\n return readability(color, '#ffffff') >= 2.8 ? '#ffffff' : '#000000';\n}\n\nconst cssColorExpression = (color: string) =>\n /^(?:var|color-mix|light-dark|oklch|oklab|lab|lch|color)\\(/i.test(color);\n\n/** Derive visible ink/indicators without altering the brand fill or supplied theme. */\nfunction visibleDarkColor(color: string, backgrounds: string[], minimum: number) {\n if ([color, ...backgrounds].some((value) => cssColorExpression(value))) return color;\n const primary = new TinyColor(color);\n const surfaces = backgrounds.map((value) => new TinyColor(value));\n if ([primary, ...surfaces].some((value) => !value.isValid || value.getAlpha() !== 1))\n return color;\n const contrasts = (candidate: string) =>\n backgrounds.every((background) => readability(candidate, background) >= minimum);\n if (contrasts(color) || !contrasts('#ffffff')) return color;\n const { h, s, l } = primary.toHsl();\n let low = l;\n let high = 1;\n let result = '#ffffff';\n for (let step = 0; step < 16; step++) {\n const lightness = (low + high) / 2;\n const candidate = new TinyColor({ h, s, l: lightness }).toHexString();\n if (contrasts(candidate)) {\n result = candidate;\n high = lightness;\n } else low = lightness;\n }\n return result;\n}\n\n/** sRGB mixing with premultiplied alpha, matching CSS transparent-color semantics. */\nexport function mixColors(\n first: string | undefined,\n second: string | undefined,\n weight: number,\n): string | undefined {\n if (!first || !second) return undefined;\n const a = new TinyColor(first);\n const b = new TinyColor(second);\n if (cssColorExpression(first) || cssColorExpression(second) || !a.isValid || !b.isValid) {\n const cssColor = (value: string) => cssColorExpression(value) || new TinyColor(value).isValid;\n return cssColor(first) && cssColor(second)\n ? `color-mix(in srgb, ${first} ${Math.min(100, Math.max(0, weight))}%, ${second})`\n : undefined;\n }\n const x = a.toRgb();\n const y = b.toRgb();\n const ratio = Math.min(1, Math.max(0, weight / 100));\n const alpha = x.a * ratio + y.a * (1 - ratio);\n const channel = (key: 'r' | 'g' | 'b') =>\n alpha ? Math.round((x[key] * x.a * ratio + y[key] * y.a * (1 - ratio)) / alpha) : 0;\n return `rgba(${channel('r')}, ${channel('g')}, ${channel('b')}, ${Number(alpha.toFixed(4))})`;\n}\n\n/** Derive once per theme; keep readable solid-button labels when changing shade. */\nfunction interactionColor(color: string, foreground: string, toward: string, amounts: number[]) {\n if (\n cssColorExpression(color) ||\n cssColorExpression(foreground) ||\n !new TinyColor(color).isValid ||\n !new TinyColor(foreground).isValid\n )\n return undefined;\n const minimumContrast = Math.min(4.5, readability(color, foreground));\n for (const amount of amounts) {\n const candidate = mixColors(color, toward, 100 - amount);\n if (candidate && readability(candidate, foreground) >= minimumContrast) return candidate;\n }\n return color;\n}\n\n/** Keep CSS expressions reactive in SSR; resolve contrast-sensitive values after hydration. */\nexport function deriveColors(appearance: 'light' | 'dark', overrides: Record<string, string> = {}) {\n const colors: Record<string, string> = { ...defaultColors[appearance], ...overrides };\n const backgrounds = [colors.surface ?? '', colors['surface-muted'] ?? ''];\n const visible = (color: string, minimum: number) =>\n appearance === 'dark' ? visibleDarkColor(color, backgrounds, minimum) : color;\n const primary = colors.primary ?? '';\n const ink = visible(primary, 4.5);\n const indicator = visible(primary, 3);\n const dim = indicator !== primary;\n const hasPrimary = Boolean(overrides.primary);\n if (hasPrimary && !overrides['on-primary'])\n colors['on-primary'] =\n primaryForeground(colors.primary ?? '') ?? defaultColors[appearance]['on-primary'];\n colors['text-subtle'] ??= mixColors(colors['text-muted'], colors.surface, 92) ?? '#68686f';\n colors['surface-raised'] ??= mixColors(colors.surface, colors.text, 98) ?? '#ffffff';\n colors['border-hover'] ??= mixColors(colors.border, colors['text-muted'], 65) ?? '#e5e5e8';\n const result: Record<`--leaf-${string}`, string> = {};\n result['--leaf-color-primary-ink'] = ink;\n result['--leaf-color-primary-indicator'] = indicator;\n result['--leaf-color-primary-fill-border'] = dim\n ? (mixColors(primary, colors.text, 80) ?? 'transparent')\n : 'transparent';\n result['--leaf-color-primary-focus'] = dim\n ? indicator\n : (mixColors(primary, 'transparent', 42) ?? 'transparent');\n if (hasPrimary) {\n result['--leaf-color-primary'] = colors.primary ?? '';\n result['--leaf-color-on-primary'] =\n colors['on-primary'] ?? defaultColors[appearance]['on-primary'];\n }\n for (const [key, [first, second, ratio]] of Object.entries(colorRecipes)) {\n const other =\n second === 'alpha'\n ? 'transparent'\n : second === 'white'\n ? '#fff'\n : second === 'black'\n ? '#000'\n : colors[second];\n const source = dim && first === 'primary' && second === 'surface' ? indicator : colors[first];\n const value = mixColors(source, other, ratio);\n if (value)\n result[key as `--leaf-${string}`] = key.startsWith('--leaf-color-primary-text-')\n ? visible(value, 4.5)\n : value;\n }\n for (const key of ['text-subtle', 'surface-raised', 'border-hover'])\n result[`--leaf-color-${key}`] = colors[key] ?? '';\n // Bright warning glyphs and fills need a separate, readable text color.\n const warning = colors.warning;\n const text = colors.text;\n if (\n warning &&\n text &&\n !cssColorExpression(warning) &&\n !cssColorExpression(text) &&\n new TinyColor(warning).isValid &&\n new TinyColor(text).isValid\n ) {\n const backgrounds = [\n colors.surface,\n colors['surface-muted'],\n result['--leaf-color-warning-surface-8'],\n ].filter((color): color is string => Boolean(color));\n for (let weight = 80; weight >= 0; weight -= 10) {\n const ink = mixColors(warning, text, weight);\n if (ink && backgrounds.every((background) => readability(ink, background) >= 4.5)) {\n result['--leaf-color-warning-text-80'] = ink;\n break;\n }\n }\n result['--leaf-color-on-warning'] =\n readability(warning, '#202024') >= readability(warning, '#ffffff') ? '#202024' : '#ffffff';\n }\n for (const key of ['primary', 'danger']) {\n const color = colors[key];\n const foreground = colors[`on-${key}`];\n if (!color || !foreground) continue;\n const hover =\n colors[`${key}-hover`] ?? interactionColor(color, foreground, '#fff', [10, 8, 6, 4, 2.5, 1]);\n const active =\n colors[`${key}-active`] ??\n interactionColor(color, foreground, '#000', [15, 12, 10, 8, 6, 4, 2.5, 1]);\n if (hover) result[`--leaf-color-${key}-hover`] = hover;\n if (active) result[`--leaf-color-${key}-active`] = active;\n if (key === 'primary') {\n if (hover)\n result['--leaf-color-primary-ink-hover'] = colors['primary-hover'] ?? visible(hover, 4.5);\n if (active)\n result['--leaf-color-primary-ink-active'] =\n colors['primary-active'] ?? visible(active, 4.5);\n }\n }\n return result;\n}\n"],"names":["defaultColors","primaryForeground","color","cssColorExpression","TinyColor","readability","visibleDarkColor","backgrounds","minimum","value","primary","surfaces","contrasts","candidate","background","h","s","l","low","high","result","step","lightness","mixColors","first","second","weight","a","b","cssColor","Math","undefined","x","y","ratio","alpha","channel","key","Number","interactionColor","foreground","toward","amounts","minimumContrast","amount","deriveColors","appearance","overrides","colors","visible","ink","indicator","dim","hasPrimary","Boolean","Object","colorRecipes","other","source","warning","text","hover","active"],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { useComponentProps } from "../config-provider/component-defaults.js";
|
|
|
8
8
|
import { useLeafConfig } from "../config-provider/context.js";
|
|
9
9
|
import { InputControl } from "../input/input.js";
|
|
10
10
|
import { ModalBase } from "../modal/modal.js";
|
|
11
|
+
import { ScrollbarControl } from "../scrollbar/scrollbar.js";
|
|
11
12
|
import { useControllable } from "../shared/use-controllable.js";
|
|
12
13
|
import { useText } from "../shared/use-text.js";
|
|
13
14
|
const useBrowserLayoutEffect = "u" < typeof window ? useEffect : useLayoutEffect;
|
|
@@ -159,13 +160,19 @@ function CommandPalette(rawProps) {
|
|
|
159
160
|
className: "leaf-command-palette__error",
|
|
160
161
|
children: error
|
|
161
162
|
}),
|
|
162
|
-
/*#__PURE__*/ jsxs(
|
|
163
|
+
/*#__PURE__*/ jsxs(ScrollbarControl, {
|
|
163
164
|
ref: listRef,
|
|
164
165
|
id: id,
|
|
165
166
|
role: "listbox",
|
|
166
167
|
"aria-label": t('commandPalette.commands'),
|
|
167
|
-
|
|
168
|
-
|
|
168
|
+
viewportProps: {
|
|
169
|
+
'aria-busy': loading || !!busy
|
|
170
|
+
},
|
|
171
|
+
className: "leaf-command-palette__results",
|
|
172
|
+
viewportClassName: "leaf-command-palette__list",
|
|
173
|
+
tabIndex: -1,
|
|
174
|
+
scrollbarTabIndex: -1,
|
|
175
|
+
maxHeight: 340,
|
|
169
176
|
children: [
|
|
170
177
|
/*#__PURE__*/ jsx("div", {
|
|
171
178
|
className: "leaf-command-palette__selection",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandpalette/commandpalette.js","sources":["../../../../../src/commandpalette/commandpalette.tsx"],"sourcesContent":["import { Search } from 'lucide-react';\nimport {\n type CSSProperties,\n type ReactNode,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { InputControl } from '../input/input';\nimport { ModalBase } from '../modal/modal';\nimport { useControllable } from '../shared/use-controllable';\nimport { useText } from '../shared/use-text';\nexport interface CommandItem {\n key: string;\n label: ReactNode;\n keywords?: string;\n group?: ReactNode;\n icon?: ReactNode;\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void | Promise<void>;\n}\nexport interface CommandPaletteProps {\n items: readonly CommandItem[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onSelect?: (item: CommandItem) => void;\n shortcut?: string | false;\n placeholder?: string;\n loading?: boolean;\n emptyContent?: ReactNode;\n onSearch?: (query: string) => void;\n onError?: (error: unknown, item: CommandItem) => void;\n}\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\nexport function CommandPalette(rawProps: CommandPaletteProps) {\n const {\n items,\n open: controlled,\n defaultOpen = false,\n onOpenChange,\n onSelect,\n shortcut = 'k',\n placeholder,\n loading,\n emptyContent,\n onSearch,\n onError,\n } = useComponentProps('CommandPalette', rawProps);\n const t = useText(),\n { messages } = useLeafConfig(),\n id = useId();\n const [open, setOpen] = useControllable(controlled, defaultOpen, onOpenChange);\n const callback = useRef(setOpen);\n callback.current = setOpen;\n const [query, setQuery] = useState(''),\n [active, setActive] = useState(0),\n [busy, setBusy] = useState<string>();\n const [error, setError] = useState('');\n const inFlight = useRef(false);\n const generation = useRef(0);\n const input = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [selection, setSelection] = useState<CSSProperties>();\n useEffect(() => {\n if (!shortcut) return;\n const key = (event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === shortcut.toLowerCase()) {\n event.preventDefault();\n callback.current(!open);\n }\n };\n document.addEventListener('keydown', key);\n return () => document.removeEventListener('keydown', key);\n }, [shortcut, open]);\n useEffect(() => {\n generation.current++;\n inFlight.current = false;\n setBusy(undefined);\n setError('');\n if (open) {\n setQuery('');\n setActive(0);\n const frame = requestAnimationFrame(() => input.current?.focus());\n return () => cancelAnimationFrame(frame);\n }\n }, [open]);\n useEffect(\n () => () => {\n generation.current++;\n },\n [],\n );\n const list = items.filter((item) =>\n `${typeof item.label === 'string' ? item.label : item.key} ${item.keywords ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase()),\n );\n useBrowserLayoutEffect(() => {\n const node = listRef.current;\n if (!node || !open) return;\n const update = () => {\n const row = node.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]:not(:disabled)');\n setSelection(\n row\n ? ({\n '--leaf-command-selection-y': `${row.offsetTop}px`,\n '--leaf-command-selection-height': `${row.offsetHeight}px`,\n } as CSSProperties)\n : undefined,\n );\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(update);\n observer.observe(node);\n return () => observer.disconnect();\n }, [open, active, query, items, busy]);\n useEffect(() => {\n document.getElementById(`${id}-${active}`)?.scrollIntoView?.({ block: 'nearest' });\n }, [id, active]);\n const select = async (item: CommandItem) => {\n if (item.disabled || inFlight.current) return;\n inFlight.current = true;\n const request = generation.current;\n setError('');\n setBusy(item.key);\n try {\n await item.onSelect?.();\n if (generation.current !== request) return;\n onSelect?.(item);\n setOpen(false);\n } catch (reason) {\n if (generation.current !== request) return;\n setError(reason instanceof Error ? reason.message : String(reason));\n onError?.(reason, item);\n } finally {\n if (generation.current === request) {\n inFlight.current = false;\n setBusy(undefined);\n }\n }\n };\n return (\n <ModalBase\n open={open}\n title={t('commandPalette.commandSearch')}\n footer={null}\n onClose={() => setOpen(false)}\n width={560}\n className=\"leaf-command-palette\"\n >\n <InputControl\n ref={input}\n prefix={<Search size={17} />}\n value={query}\n placeholder={placeholder ?? t('commandPalette.placeholder')}\n aria-label={t('commandPalette.searchCommands')}\n role=\"combobox\"\n aria-expanded={true}\n aria-controls={id}\n aria-activedescendant={list[active] ? `${id}-${active}` : undefined}\n onChange={(event) => {\n setQuery(event.target.value);\n setActive(0);\n onSearch?.(event.target.value);\n }}\n onKeyDown={(event) => {\n if (event.nativeEvent.isComposing) return;\n if (['ArrowDown', 'ArrowUp'].includes(event.key)) {\n event.preventDefault();\n let next = active;\n for (let i = 0; i < list.length; i++) {\n next = (next + (event.key === 'ArrowDown' ? 1 : -1) + list.length) % list.length;\n if (!list[next]?.disabled) break;\n }\n setActive(next);\n }\n const item = list[active];\n if (event.key === 'Enter' && item) {\n event.preventDefault();\n void select(item);\n }\n }}\n />\n {error && (\n <p role=\"alert\" className=\"leaf-command-palette__error\">\n {error}\n </p>\n )}\n <div\n ref={listRef}\n id={id}\n role=\"listbox\"\n aria-label={t('commandPalette.commands')}\n aria-busy={loading || !!busy}\n className=\"leaf-command-palette__list\"\n >\n <div\n className=\"leaf-command-palette__selection\"\n style={selection}\n data-ready={Boolean(selection)}\n aria-hidden=\"true\"\n />\n {list.map((item, index) => (\n <div key={item.key}>\n {item.group !== undefined && (index === 0 || list[index - 1]?.group !== item.group) && (\n <div className=\"leaf-command-palette__group\">{item.group}</div>\n )}\n <button\n type=\"button\"\n role=\"option\"\n id={`${id}-${index}`}\n aria-selected={active === index}\n disabled={item.disabled || !!busy}\n tabIndex={-1}\n className=\"leaf-floating__option\"\n onMouseEnter={() => !item.disabled && !busy && setActive(index)}\n onClick={() => void select(item)}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.shortcut && <kbd>{item.shortcut}</kbd>}\n </button>\n </div>\n ))}\n {!list.length && (\n <div className=\"leaf-floating__empty\">\n {loading ? messages.common.loading : (emptyContent ?? messages.common.noData)}\n </div>\n )}\n </div>\n <div className=\"leaf-command-palette__hint\" aria-hidden=\"true\">\n <span>\n <kbd>↑</kbd>\n <kbd>↓</kbd> {t('commandPalette.navigate')}\n </span>\n <span>\n <kbd>↵</kbd> {t('commandPalette.run')}\n </span>\n <span>\n <kbd>Esc</kbd> {messages.common.close}\n </span>\n </div>\n </ModalBase>\n );\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","CommandPalette","rawProps","items","controlled","defaultOpen","onOpenChange","onSelect","shortcut","placeholder","loading","emptyContent","onSearch","onError","useComponentProps","t","useText","messages","useLeafConfig","id","useId","open","setOpen","useControllable","callback","useRef","query","setQuery","useState","active","setActive","busy","setBusy","error","setError","inFlight","generation","input","listRef","selection","setSelection","key","event","document","undefined","frame","requestAnimationFrame","cancelAnimationFrame","list","item","node","update","row","ResizeObserver","observer","select","request","reason","Error","String","ModalBase","InputControl","Search","next","i","Boolean","index"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commandpalette/commandpalette.js","sources":["../../../../../src/commandpalette/commandpalette.tsx"],"sourcesContent":["import { Search } from 'lucide-react';\nimport {\n type CSSProperties,\n type ReactNode,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { InputControl } from '../input/input';\nimport { ModalBase } from '../modal/modal';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { useControllable } from '../shared/use-controllable';\nimport { useText } from '../shared/use-text';\nexport interface CommandItem {\n key: string;\n label: ReactNode;\n keywords?: string;\n group?: ReactNode;\n icon?: ReactNode;\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void | Promise<void>;\n}\nexport interface CommandPaletteProps {\n items: readonly CommandItem[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onSelect?: (item: CommandItem) => void;\n shortcut?: string | false;\n placeholder?: string;\n loading?: boolean;\n emptyContent?: ReactNode;\n onSearch?: (query: string) => void;\n onError?: (error: unknown, item: CommandItem) => void;\n}\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\nexport function CommandPalette(rawProps: CommandPaletteProps) {\n const {\n items,\n open: controlled,\n defaultOpen = false,\n onOpenChange,\n onSelect,\n shortcut = 'k',\n placeholder,\n loading,\n emptyContent,\n onSearch,\n onError,\n } = useComponentProps('CommandPalette', rawProps);\n const t = useText(),\n { messages } = useLeafConfig(),\n id = useId();\n const [open, setOpen] = useControllable(controlled, defaultOpen, onOpenChange);\n const callback = useRef(setOpen);\n callback.current = setOpen;\n const [query, setQuery] = useState(''),\n [active, setActive] = useState(0),\n [busy, setBusy] = useState<string>();\n const [error, setError] = useState('');\n const inFlight = useRef(false);\n const generation = useRef(0);\n const input = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [selection, setSelection] = useState<CSSProperties>();\n useEffect(() => {\n if (!shortcut) return;\n const key = (event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === shortcut.toLowerCase()) {\n event.preventDefault();\n callback.current(!open);\n }\n };\n document.addEventListener('keydown', key);\n return () => document.removeEventListener('keydown', key);\n }, [shortcut, open]);\n useEffect(() => {\n generation.current++;\n inFlight.current = false;\n setBusy(undefined);\n setError('');\n if (open) {\n setQuery('');\n setActive(0);\n const frame = requestAnimationFrame(() => input.current?.focus());\n return () => cancelAnimationFrame(frame);\n }\n }, [open]);\n useEffect(\n () => () => {\n generation.current++;\n },\n [],\n );\n const list = items.filter((item) =>\n `${typeof item.label === 'string' ? item.label : item.key} ${item.keywords ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase()),\n );\n useBrowserLayoutEffect(() => {\n const node = listRef.current;\n if (!node || !open) return;\n const update = () => {\n const row = node.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]:not(:disabled)');\n setSelection(\n row\n ? ({\n '--leaf-command-selection-y': `${row.offsetTop}px`,\n '--leaf-command-selection-height': `${row.offsetHeight}px`,\n } as CSSProperties)\n : undefined,\n );\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(update);\n observer.observe(node);\n return () => observer.disconnect();\n }, [open, active, query, items, busy]);\n useEffect(() => {\n document.getElementById(`${id}-${active}`)?.scrollIntoView?.({ block: 'nearest' });\n }, [id, active]);\n const select = async (item: CommandItem) => {\n if (item.disabled || inFlight.current) return;\n inFlight.current = true;\n const request = generation.current;\n setError('');\n setBusy(item.key);\n try {\n await item.onSelect?.();\n if (generation.current !== request) return;\n onSelect?.(item);\n setOpen(false);\n } catch (reason) {\n if (generation.current !== request) return;\n setError(reason instanceof Error ? reason.message : String(reason));\n onError?.(reason, item);\n } finally {\n if (generation.current === request) {\n inFlight.current = false;\n setBusy(undefined);\n }\n }\n };\n return (\n <ModalBase\n open={open}\n title={t('commandPalette.commandSearch')}\n footer={null}\n onClose={() => setOpen(false)}\n width={560}\n className=\"leaf-command-palette\"\n >\n <InputControl\n ref={input}\n prefix={<Search size={17} />}\n value={query}\n placeholder={placeholder ?? t('commandPalette.placeholder')}\n aria-label={t('commandPalette.searchCommands')}\n role=\"combobox\"\n aria-expanded={true}\n aria-controls={id}\n aria-activedescendant={list[active] ? `${id}-${active}` : undefined}\n onChange={(event) => {\n setQuery(event.target.value);\n setActive(0);\n onSearch?.(event.target.value);\n }}\n onKeyDown={(event) => {\n if (event.nativeEvent.isComposing) return;\n if (['ArrowDown', 'ArrowUp'].includes(event.key)) {\n event.preventDefault();\n let next = active;\n for (let i = 0; i < list.length; i++) {\n next = (next + (event.key === 'ArrowDown' ? 1 : -1) + list.length) % list.length;\n if (!list[next]?.disabled) break;\n }\n setActive(next);\n }\n const item = list[active];\n if (event.key === 'Enter' && item) {\n event.preventDefault();\n void select(item);\n }\n }}\n />\n {error && (\n <p role=\"alert\" className=\"leaf-command-palette__error\">\n {error}\n </p>\n )}\n <ScrollbarControl\n ref={listRef}\n id={id}\n role=\"listbox\"\n aria-label={t('commandPalette.commands')}\n viewportProps={{ 'aria-busy': loading || !!busy }}\n className=\"leaf-command-palette__results\"\n viewportClassName=\"leaf-command-palette__list\"\n tabIndex={-1}\n scrollbarTabIndex={-1}\n maxHeight={340}\n >\n <div\n className=\"leaf-command-palette__selection\"\n style={selection}\n data-ready={Boolean(selection)}\n aria-hidden=\"true\"\n />\n {list.map((item, index) => (\n <div key={item.key}>\n {item.group !== undefined && (index === 0 || list[index - 1]?.group !== item.group) && (\n <div className=\"leaf-command-palette__group\">{item.group}</div>\n )}\n <button\n type=\"button\"\n role=\"option\"\n id={`${id}-${index}`}\n aria-selected={active === index}\n disabled={item.disabled || !!busy}\n tabIndex={-1}\n className=\"leaf-floating__option\"\n onMouseEnter={() => !item.disabled && !busy && setActive(index)}\n onClick={() => void select(item)}\n >\n {item.icon}\n <span>{item.label}</span>\n {item.shortcut && <kbd>{item.shortcut}</kbd>}\n </button>\n </div>\n ))}\n {!list.length && (\n <div className=\"leaf-floating__empty\">\n {loading ? messages.common.loading : (emptyContent ?? messages.common.noData)}\n </div>\n )}\n </ScrollbarControl>\n <div className=\"leaf-command-palette__hint\" aria-hidden=\"true\">\n <span>\n <kbd>↑</kbd>\n <kbd>↓</kbd> {t('commandPalette.navigate')}\n </span>\n <span>\n <kbd>↵</kbd> {t('commandPalette.run')}\n </span>\n <span>\n <kbd>Esc</kbd> {messages.common.close}\n </span>\n </div>\n </ModalBase>\n );\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","CommandPalette","rawProps","items","controlled","defaultOpen","onOpenChange","onSelect","shortcut","placeholder","loading","emptyContent","onSearch","onError","useComponentProps","t","useText","messages","useLeafConfig","id","useId","open","setOpen","useControllable","callback","useRef","query","setQuery","useState","active","setActive","busy","setBusy","error","setError","inFlight","generation","input","listRef","selection","setSelection","key","event","document","undefined","frame","requestAnimationFrame","cancelAnimationFrame","list","item","node","update","row","ResizeObserver","observer","select","request","reason","Error","String","ModalBase","InputControl","Search","next","i","ScrollbarControl","Boolean","index"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-provider/component-defaults.js","sources":["../../../../../src/config-provider/component-defaults.ts"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { AlertProps } from '../alert/alert';\nimport type { AffixProps, AnchorProps } from '../anchor/anchor';\nimport type { AppBarProps, BottomNavigationProps, ToolbarProps } from '../appbar/appbar';\nimport type { AutoCompleteProps } from '../autocomplete/autocomplete';\nimport type { AvatarProps } from '../avatar/avatar';\nimport type { AvatarGroupProps } from '../avatar/group';\nimport type { BackTopProps } from '../backtop/backtop';\nimport type { BadgeProps } from '../badge/badge';\nimport type { BreadcrumbProps } from '../breadcrumb/breadcrumb';\nimport type { ButtonProps } from '../button/button';\nimport type { ButtonGroupProps, SplitButtonProps } from '../button/group';\nimport type { CalendarProps } from '../calendar/calendar';\nimport type { CardProps } from '../card/card';\nimport type { CarouselProps } from '../carousel/carousel';\nimport type { CascaderProps } from '../cascader/cascader';\nimport type { CheckboxProps } from '../checkbox/checkbox';\nimport type { CheckboxGroupProps } from '../checkbox/group';\nimport type { CollapseProps } from '../collapse/collapse';\nimport type { ColorPickerProps } from '../colorpicker/colorpicker';\nimport type { CommandPaletteProps } from '../commandpalette/commandpalette';\nimport type { ConfirmOptions } from '../confirm/confirm';\nimport type { DatePickerProps } from '../datepicker/datepicker';\nimport type { DateRangePickerProps } from '../daterangepicker/daterangepicker';\nimport type { DateTimePickerProps } from '../datetimepicker/datetimepicker';\nimport type { DescriptionsProps } from '../descriptions/descriptions';\nimport type { DividerProps } from '../divider/divider';\nimport type { DrawerProps } from '../drawer/drawer';\nimport type { DropdownProps } from '../dropdown/dropdown';\nimport type { EmptyProps } from '../empty/empty';\nimport type { ErrorBoundaryProps } from '../errorboundary/errorboundary';\nimport type { FileListProps } from '../filelist/filelist';\nimport type { FlexProps } from '../flex/flex';\nimport type { FloatButtonGroupProps, FloatButtonProps } from '../floatbutton/floatbutton';\nimport type {\n FormErrorSummaryProps,\n FormFieldProps,\n FormGroupProps,\n FormProps,\n} from '../form/form';\nimport type { FormListProps } from '../form/list';\nimport type { ColProps, GridProps, RowProps } from '../grid/grid';\nimport type { ImagePreviewGroupProps, ImagePreviewProps, ImageProps } from '../image/image';\nimport type { InfiniteScrollProps } from '../infinitescroll/infinitescroll';\nimport type { InputGroupProps, InputSearchProps } from '../input/group';\nimport type { InputProps } from '../input/input';\nimport type { InputMaskProps } from '../inputmask/inputmask';\nimport type { InputNumberProps } from '../inputnumber/inputnumber';\nimport type { InputOTPProps } from '../inputotp/inputotp';\nimport type { LayoutProps, LayoutSiderProps } from '../layout/layout';\nimport type { LoadingProps } from '../loading/loading';\nimport type { LoadingBarProps } from '../loadingbar/loadingbar';\nimport type { MasonryProps } from '../masonry/masonry';\nimport type { MentionsProps } from '../mentions/mentions';\nimport type { MenuProps } from '../menu/menu';\nimport type { MessageOptions, MessageProps } from '../message/message';\nimport type { ModalProps } from '../modal/modal';\nimport type { NotificationOptions, NotificationProps } from '../notification/notification';\nimport type { PaginationProps } from '../pagination/pagination';\nimport type { PopconfirmProps } from '../popconfirm/popconfirm';\nimport type { PopoverProps } from '../popover/popover';\nimport type { ProgressProps } from '../progress/progress';\nimport type { QRCodeProps } from '../qrcode/qrcode';\nimport type { RadioGroupProps, RadioProps } from '../radio/radio';\nimport type { RateProps } from '../rate/rate';\nimport type { ResultProps } from '../result/result';\nimport type { ScrollAreaProps } from '../scrollarea/scrollarea';\nimport type { ScrollbarProps } from '../scrollbar/scrollbar';\nimport type { SegmentedProps } from '../segmented/segmented';\nimport type { SelectProps } from '../select/select';\nimport type { SkeletonProps } from '../skeleton/skeleton';\nimport type { SliderProps } from '../slider/slider';\nimport type { SpaceProps } from '../space/space';\nimport type { SplitterProps } from '../splitter/splitter';\nimport type { CountdownProps, StatisticProps } from '../statistic/statistic';\nimport type { StepsProps } from '../steps/steps';\nimport type { SwitchProps } from '../switch/switch';\nimport type {\n TableCellProps,\n TableColumnHeaderProps,\n TableErrorProps,\n TableProps,\n TableRowProps,\n TableStateProps,\n} from '../table/table';\nimport type {\n DataTableColumnVisibilityProps,\n DataTableContentProps,\n DataTablePaginationProps,\n DataTablePresentationProps,\n DataTableSearchProps,\n} from '../tabletanstack/defaults';\nimport type { TabsProps } from '../tabs/tabs';\nimport type { CheckableTagProps, TagGroupProps } from '../tag/group';\nimport type { TagProps } from '../tag/tag';\nimport type { TextareaProps } from '../textarea/textarea';\nimport type { TimelineProps } from '../timeline/timeline';\nimport type { TimePickerProps } from '../timepicker/timepicker';\nimport type { TimeRangePickerProps } from '../timerangepicker/timerangepicker';\nimport type { TooltipProps } from '../tooltip/tooltip';\nimport type { TourProps } from '../tour/tour';\nimport type { TransferProps } from '../transfer/transfer';\nimport type { TreeProps } from '../tree/tree';\nimport type { TreeSelectProps } from '../treeselect/treeselect';\nimport type {\n LinkProps,\n ParagraphProps,\n TextProps,\n TitleProps,\n TypographyProps,\n} from '../typography/typography';\nimport type { UploadProps } from '../upload/upload';\nimport type { VirtualListProps } from '../virtuallist/virtuallist';\n\n/** Only props independent of the caller's item type can cross a generic component boundary. */\ntype GenericComponentName = 'FormList' | 'VirtualList' | 'DataTable';\n\n/** Full public props keep each hook key tied to its component, including Select's union. */\ninterface ComponentPropsMap {\n Affix: AffixProps;\n Alert: AlertProps;\n Anchor: AnchorProps;\n AppBar: AppBarProps;\n AutoComplete: AutoCompleteProps;\n Avatar: AvatarProps;\n AvatarGroup: AvatarGroupProps;\n BackTop: BackTopProps;\n Badge: BadgeProps;\n BottomNavigation: BottomNavigationProps;\n Breadcrumb: BreadcrumbProps;\n Button: ButtonProps;\n ButtonGroup: ButtonGroupProps;\n Calendar: CalendarProps;\n Card: CardProps;\n Carousel: CarouselProps;\n Cascader: CascaderProps;\n CheckableTag: CheckableTagProps;\n Checkbox: CheckboxProps;\n CheckboxGroup: CheckboxGroupProps;\n Col: ColProps;\n Collapse: CollapseProps;\n ColorPicker: ColorPickerProps;\n CommandPalette: CommandPaletteProps;\n Confirm: ConfirmOptions;\n Countdown: CountdownProps;\n DataTableColumnVisibility: DataTableColumnVisibilityProps;\n DataTableContent: DataTableContentProps;\n DataTableFooter: HTMLAttributes<HTMLDivElement>;\n DataTablePagination: DataTablePaginationProps;\n DataTableSearch: DataTableSearchProps;\n DataTableToolbar: HTMLAttributes<HTMLDivElement>;\n DatePicker: DatePickerProps;\n DateRangePicker: DateRangePickerProps;\n DateTimePicker: DateTimePickerProps;\n Descriptions: DescriptionsProps;\n Divider: DividerProps;\n Drawer: DrawerProps;\n Dropdown: DropdownProps;\n Empty: EmptyProps;\n ErrorBoundary: ErrorBoundaryProps;\n FileList: FileListProps;\n Flex: FlexProps;\n FloatButton: FloatButtonProps;\n FloatButtonGroup: FloatButtonGroupProps;\n Form: FormProps;\n FormErrorSummary: FormErrorSummaryProps;\n FormField: FormFieldProps;\n FormGroup: FormGroupProps;\n Grid: GridProps;\n Image: ImageProps;\n ImagePreview: ImagePreviewProps;\n ImagePreviewGroup: ImagePreviewGroupProps;\n InfiniteScroll: InfiniteScrollProps;\n Input: InputProps;\n InputGroup: InputGroupProps;\n InputMask: InputMaskProps;\n InputNumber: InputNumberProps;\n InputOTP: InputOTPProps;\n InputSearch: InputSearchProps;\n Layout: LayoutProps;\n LayoutContent: HTMLAttributes<HTMLElement>;\n LayoutFooter: HTMLAttributes<HTMLElement>;\n LayoutHeader: HTMLAttributes<HTMLElement>;\n LayoutSider: LayoutSiderProps;\n Link: LinkProps;\n Loading: LoadingProps;\n LoadingBar: LoadingBarProps;\n Masonry: MasonryProps;\n Mentions: MentionsProps;\n Menu: MenuProps;\n Message: MessageProps;\n Modal: ModalProps;\n Notification: NotificationProps;\n Pagination: PaginationProps;\n Paragraph: ParagraphProps;\n Popconfirm: PopconfirmProps;\n Popover: PopoverProps;\n Progress: ProgressProps;\n QRCode: QRCodeProps;\n Radio: RadioProps;\n RadioGroup: RadioGroupProps;\n Rate: RateProps;\n Result: ResultProps;\n Row: RowProps;\n ScrollArea: ScrollAreaProps;\n Scrollbar: ScrollbarProps;\n Segmented: SegmentedProps;\n Select: SelectProps;\n Skeleton: SkeletonProps;\n Slider: SliderProps;\n Space: SpaceProps;\n SplitButton: SplitButtonProps;\n Splitter: SplitterProps;\n Statistic: StatisticProps;\n Steps: StepsProps;\n Switch: SwitchProps;\n Table: TableProps;\n TableBody: HTMLAttributes<HTMLTableSectionElement>;\n TableCaption: HTMLAttributes<HTMLTableCaptionElement>;\n TableCell: TableCellProps;\n TableColumnHeader: TableColumnHeaderProps;\n TableEmpty: TableStateProps;\n TableError: TableErrorProps;\n TableFooter: HTMLAttributes<HTMLTableSectionElement>;\n TableHeader: HTMLAttributes<HTMLTableSectionElement>;\n TableLoading: TableStateProps;\n TableRow: TableRowProps;\n Tabs: TabsProps;\n Tag: TagProps;\n TagGroup: TagGroupProps;\n Text: TextProps;\n Textarea: TextareaProps;\n Timeline: TimelineProps;\n TimePicker: TimePickerProps;\n TimeRangePicker: TimeRangePickerProps;\n Title: TitleProps;\n Toolbar: ToolbarProps;\n Tooltip: TooltipProps;\n Tour: TourProps;\n Transfer: TransferProps;\n Tree: TreeProps;\n TreeSelect: TreeSelectProps;\n Typography: TypographyProps;\n Upload: UploadProps;\n}\n\n/** Default props for supported components; null clears that component's inherited defaults. */\nexport interface LeafComponentDefaults {\n Affix?: Partial<Omit<AffixProps, 'key' | 'ref'>> | null;\n Alert?: Partial<Omit<AlertProps, 'key' | 'ref' | 'title'>> | null;\n Anchor?: Partial<Omit<AnchorProps, 'key' | 'ref' | 'items'>> | null;\n AppBar?: Partial<Omit<AppBarProps, 'key' | 'ref'>> | null;\n AutoComplete?: Partial<Omit<AutoCompleteProps, 'key' | 'ref' | 'options'>> | null;\n Avatar?: Partial<Omit<AvatarProps, 'key' | 'ref'>> | null;\n AvatarGroup?: Partial<Omit<AvatarGroupProps, 'key' | 'ref'>> | null;\n BackTop?: Partial<Omit<BackTopProps, 'key' | 'ref'>> | null;\n Badge?: Partial<Omit<BadgeProps, 'key' | 'ref'>> | null;\n BottomNavigation?: Partial<Omit<BottomNavigationProps, 'key' | 'ref' | 'items'>> | null;\n Breadcrumb?: Partial<Omit<BreadcrumbProps, 'key' | 'ref' | 'items'>> | null;\n Button?: Partial<Omit<ButtonProps, 'key' | 'ref'>> | null;\n ButtonGroup?: Partial<Omit<ButtonGroupProps, 'key' | 'ref'>> | null;\n Calendar?: Partial<Omit<CalendarProps, 'key' | 'ref'>> | null;\n Card?: Partial<Omit<CardProps, 'key' | 'ref'>> | null;\n Carousel?: Partial<Omit<CarouselProps, 'key' | 'ref'>> | null;\n Cascader?: Partial<\n Omit<\n CascaderProps,\n 'key' | 'ref' | 'options' | 'multiple' | 'value' | 'defaultValue' | 'onChange'\n >\n > | null;\n CheckableTag?: Partial<Omit<CheckableTagProps, 'key' | 'ref'>> | null;\n Checkbox?: Partial<Omit<CheckboxProps, 'key' | 'ref'>> | null;\n CheckboxGroup?: Partial<Omit<CheckboxGroupProps, 'key' | 'ref' | 'options'>> | null;\n Col?: Partial<Omit<ColProps, 'key' | 'ref'>> | null;\n Collapse?: Partial<Omit<CollapseProps, 'key' | 'ref' | 'items'>> | null;\n ColorPicker?: Partial<Omit<ColorPickerProps, 'key' | 'ref'>> | null;\n CommandPalette?: Partial<Omit<CommandPaletteProps, 'key' | 'ref' | 'items'>> | null;\n Confirm?: Partial<Omit<ConfirmOptions, 'key' | 'ref'>> | null;\n Countdown?: Partial<Omit<CountdownProps, 'key' | 'ref' | 'value'>> | null;\n DataTable?: Partial<Omit<DataTablePresentationProps, 'tableRef'>> | null;\n DataTableColumnVisibility?: Partial<Omit<DataTableColumnVisibilityProps, 'key' | 'ref'>> | null;\n DataTableContent?: Partial<Omit<DataTableContentProps, 'key' | 'ref'>> | null;\n DataTableFooter?: Partial<Omit<HTMLAttributes<HTMLDivElement>, 'key' | 'ref'>> | null;\n DataTablePagination?: Partial<Omit<DataTablePaginationProps, 'key' | 'ref'>> | null;\n DataTableSearch?: Partial<Omit<DataTableSearchProps, 'key' | 'ref'>> | null;\n DataTableToolbar?: Partial<Omit<HTMLAttributes<HTMLDivElement>, 'key' | 'ref'>> | null;\n DatePicker?: Partial<\n Omit<DatePickerProps, 'key' | 'ref' | 'multiple' | 'value' | 'defaultValue' | 'onChange'>\n > | null;\n DateRangePicker?: Partial<Omit<DateRangePickerProps, 'key' | 'ref'>> | null;\n DateTimePicker?: Partial<Omit<DateTimePickerProps, 'key' | 'ref'>> | null;\n Descriptions?: Partial<Omit<DescriptionsProps, 'key' | 'ref' | 'items'>> | null;\n Divider?: Partial<Omit<DividerProps, 'key' | 'ref'>> | null;\n Drawer?: Partial<Omit<DrawerProps, 'key' | 'ref' | 'open'>> | null;\n Dropdown?: Partial<Omit<DropdownProps, 'key' | 'ref' | 'items' | 'children'>> | null;\n Empty?: Partial<Omit<EmptyProps, 'key' | 'ref'>> | null;\n ErrorBoundary?: Partial<Omit<ErrorBoundaryProps, 'key' | 'ref'>> | null;\n FileList?: Partial<Omit<FileListProps, 'key' | 'ref' | 'items'>> | null;\n Flex?: Partial<Omit<FlexProps, 'key' | 'ref'>> | null;\n FloatButton?: Partial<Omit<FloatButtonProps, 'key' | 'ref'>> | null;\n FloatButtonGroup?: Partial<Omit<FloatButtonGroupProps, 'key' | 'ref' | 'actions'>> | null;\n Form?: Partial<Omit<FormProps, 'key' | 'ref'>> | null;\n FormErrorSummary?: Partial<Omit<FormErrorSummaryProps, 'key' | 'ref'>> | null;\n FormField?: Partial<Omit<FormFieldProps, 'key' | 'ref'>> | null;\n FormGroup?: Partial<Omit<FormGroupProps, 'key' | 'ref'>> | null;\n FormList?: Partial<\n Omit<\n FormListProps<unknown>,\n 'name' | 'children' | 'value' | 'defaultValue' | 'onChange' | 'itemKey'\n >\n > | null;\n Grid?: Partial<Omit<GridProps, 'key' | 'ref'>> | null;\n Image?: Partial<Omit<ImageProps, 'key' | 'ref'>> | null;\n ImagePreview?: Partial<\n Omit<ImagePreviewProps, 'key' | 'ref' | 'items' | 'open' | 'onClose'>\n > | null;\n ImagePreviewGroup?: Partial<Omit<ImagePreviewGroupProps, 'key' | 'ref'>> | null;\n InfiniteScroll?: Partial<\n Omit<InfiniteScrollProps, 'key' | 'ref' | 'dataLength' | 'hasMore' | 'onLoadMore'>\n > | null;\n Input?: Partial<Omit<InputProps, 'key' | 'ref'>> | null;\n InputGroup?: Partial<Omit<InputGroupProps, 'key' | 'ref'>> | null;\n InputMask?: Partial<Omit<InputMaskProps, 'key' | 'ref' | 'mask'>> | null;\n InputNumber?: Partial<\n Omit<\n InputNumberProps,\n 'key' | 'ref' | 'stringMode' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'\n >\n > | null;\n InputOTP?: Partial<Omit<InputOTPProps, 'key' | 'ref'>> | null;\n InputSearch?: Partial<Omit<InputSearchProps, 'key' | 'ref'>> | null;\n Layout?: Partial<Omit<LayoutProps, 'key' | 'ref'>> | null;\n LayoutContent?: Partial<Omit<HTMLAttributes<HTMLElement>, 'key' | 'ref'>> | null;\n LayoutFooter?: Partial<Omit<HTMLAttributes<HTMLElement>, 'key' | 'ref'>> | null;\n LayoutHeader?: Partial<Omit<HTMLAttributes<HTMLElement>, 'key' | 'ref'>> | null;\n LayoutSider?: Partial<Omit<LayoutSiderProps, 'key' | 'ref'>> | null;\n Link?: Partial<Omit<LinkProps, 'key' | 'ref'>> | null;\n Loading?: Partial<Omit<LoadingProps, 'key' | 'ref'>> | null;\n LoadingBar?: Partial<Omit<LoadingBarProps, 'key' | 'ref' | 'active' | 'progress'>> | null;\n Masonry?: Partial<Omit<MasonryProps, 'key' | 'ref'>> | null;\n Mentions?: Partial<Omit<MentionsProps, 'key' | 'ref' | 'options'>> | null;\n Menu?: Partial<Omit<MenuProps, 'key' | 'ref' | 'items'>> | null;\n Message?: Partial<Omit<MessageOptions, 'key' | 'content'>> | null;\n Modal?: Partial<Omit<ModalProps, 'key' | 'ref' | 'open'>> | null;\n Notification?: Partial<Omit<NotificationOptions, 'key' | 'title'>> | null;\n Pagination?: Partial<Omit<PaginationProps, 'key' | 'ref' | 'total'>> | null;\n Paragraph?: Partial<Omit<ParagraphProps, 'key' | 'ref'>> | null;\n Popconfirm?: Partial<Omit<PopconfirmProps, 'key' | 'ref' | 'children' | 'title'>> | null;\n Popover?: Partial<Omit<PopoverProps, 'key' | 'ref' | 'children' | 'content'>> | null;\n Progress?: Partial<Omit<ProgressProps, 'key' | 'ref'>> | null;\n QRCode?: Partial<Omit<QRCodeProps, 'key' | 'ref' | 'value'>> | null;\n Radio?: Partial<Omit<RadioProps, 'key' | 'ref'>> | null;\n RadioGroup?: Partial<Omit<RadioGroupProps, 'key' | 'ref' | 'options'>> | null;\n Rate?: Partial<Omit<RateProps, 'key' | 'ref'>> | null;\n Result?: Partial<Omit<ResultProps, 'key' | 'ref'>> | null;\n Row?: Partial<Omit<RowProps, 'key' | 'ref'>> | null;\n ScrollArea?: Partial<Omit<ScrollAreaProps, 'key' | 'ref'>> | null;\n Scrollbar?: Partial<Omit<ScrollbarProps, 'key' | 'ref'>> | null;\n Segmented?: Partial<Omit<SegmentedProps, 'key' | 'ref' | 'options'>> | null;\n /** Required data, mode-dependent values and callbacks belong on each Select. */\n Select?: Partial<\n Omit<\n SelectProps,\n 'key' | 'ref' | 'options' | 'multiple' | 'value' | 'defaultValue' | 'onChange'\n >\n > | null;\n Skeleton?: Partial<Omit<SkeletonProps, 'key' | 'ref'>> | null;\n Slider?: Partial<\n Omit<SliderProps, 'key' | 'ref' | 'range' | 'value' | 'defaultValue' | 'onChange'>\n > | null;\n Space?: Partial<Omit<SpaceProps, 'key' | 'ref'>> | null;\n SplitButton?: Partial<Omit<SplitButtonProps, 'key' | 'ref' | 'items'>> | null;\n Splitter?: Partial<Omit<SplitterProps, 'key' | 'ref' | 'panels'>> | null;\n Statistic?: Partial<Omit<StatisticProps, 'key' | 'ref' | 'value'>> | null;\n Steps?: Partial<Omit<StepsProps, 'key' | 'ref' | 'items'>> | null;\n Switch?: Partial<Omit<SwitchProps, 'key' | 'ref'>> | null;\n Table?: Partial<Omit<TableProps, 'key' | 'ref' | 'scrollRef'>> | null;\n TableBody?: Partial<Omit<HTMLAttributes<HTMLTableSectionElement>, 'key' | 'ref'>> | null;\n TableCaption?: Partial<Omit<HTMLAttributes<HTMLTableCaptionElement>, 'key' | 'ref'>> | null;\n TableCell?: Partial<Omit<TableCellProps, 'key' | 'ref'>> | null;\n TableColumnHeader?: Partial<Omit<TableColumnHeaderProps, 'key' | 'ref'>> | null;\n TableEmpty?: Partial<Omit<TableStateProps, 'key' | 'ref'>> | null;\n TableError?: Partial<Omit<TableErrorProps, 'key' | 'ref'>> | null;\n TableFooter?: Partial<Omit<HTMLAttributes<HTMLTableSectionElement>, 'key' | 'ref'>> | null;\n TableHeader?: Partial<Omit<HTMLAttributes<HTMLTableSectionElement>, 'key' | 'ref'>> | null;\n TableLoading?: Partial<Omit<TableStateProps, 'key' | 'ref'>> | null;\n TableRow?: Partial<Omit<TableRowProps, 'key' | 'ref'>> | null;\n Tabs?: Partial<Omit<TabsProps, 'key' | 'ref' | 'items'>> | null;\n Tag?: Partial<Omit<TagProps, 'key' | 'ref'>> | null;\n TagGroup?: Partial<Omit<TagGroupProps, 'key' | 'ref' | 'options'>> | null;\n Text?: Partial<Omit<TextProps, 'key' | 'ref'>> | null;\n Textarea?: Partial<Omit<TextareaProps, 'key' | 'ref'>> | null;\n Timeline?: Partial<Omit<TimelineProps, 'key' | 'ref' | 'items'>> | null;\n TimePicker?: Partial<Omit<TimePickerProps, 'key' | 'ref'>> | null;\n TimeRangePicker?: Partial<Omit<TimeRangePickerProps, 'key' | 'ref'>> | null;\n Title?: Partial<Omit<TitleProps, 'key' | 'ref'>> | null;\n Toolbar?: Partial<Omit<ToolbarProps, 'key' | 'ref'>> | null;\n Tooltip?: Partial<Omit<TooltipProps, 'key' | 'ref' | 'content' | 'children'>> | null;\n Tour?: Partial<Omit<TourProps, 'key' | 'ref' | 'open' | 'steps'>> | null;\n Transfer?: Partial<Omit<TransferProps, 'key' | 'ref' | 'items'>> | null;\n Tree?: Partial<Omit<TreeProps, 'key' | 'ref' | 'data'>> | null;\n TreeSelect?: Partial<\n Omit<\n TreeSelectProps,\n | 'key'\n | 'ref'\n | 'options'\n | 'multiple'\n | 'treeCheckable'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n >\n > | null;\n Typography?: Partial<Omit<TypographyProps, 'key' | 'ref'>> | null;\n Upload?: Partial<Omit<UploadProps, 'key' | 'ref'>> | null;\n VirtualList?:\n | (Partial<\n Omit<VirtualListProps<unknown>, 'items' | 'itemKey' | 'renderItem' | 'estimateSize'>\n > & { estimateSize?: number })\n | null;\n}\n\nexport const ComponentDefaultsContext = createContext<LeafComponentDefaults>({});\n\n/** Supplement missing props without copying unless a defined default is used. */\nexport function mergeComponentProps<Props extends object>(\n defaults: Partial<Props> | null | undefined,\n props: Props,\n): Props {\n if (!defaults) return props;\n let resolved = props;\n for (const key of Object.keys(defaults) as (keyof Props)[]) {\n const value = defaults[key];\n if (value !== undefined && props[key] === undefined) {\n if (resolved === props) resolved = { ...props };\n resolved[key] = value as Props[typeof key];\n }\n }\n return resolved;\n}\n\n/** Merge scopes by component and prop; nested prop values are replaced as a whole. */\nexport function mergeComponentDefaults(\n parent: LeafComponentDefaults,\n overrides: LeafComponentDefaults | undefined,\n): LeafComponentDefaults {\n if (!overrides) return parent;\n let merged = parent;\n for (const name of Object.keys(overrides) as (keyof LeafComponentDefaults)[]) {\n const incoming = overrides[name];\n if (incoming === undefined) continue;\n const inherited = parent[name] ?? undefined;\n if (incoming === null) {\n if (inherited == null) continue;\n if (merged === parent) merged = { ...parent };\n delete merged[name];\n continue;\n }\n let entry = inherited;\n for (const key of Object.keys(incoming)) {\n const value = (incoming as Record<string, unknown>)[key];\n if (\n value === undefined ||\n value === (inherited as Record<string, unknown> | undefined)?.[key]\n )\n continue;\n if (entry === inherited) entry = { ...inherited };\n (entry as Record<string, unknown>)[key] = value;\n }\n if (entry !== inherited) {\n if (merged === parent) merged = { ...parent };\n // Each entry remains the same component's props; only the dynamic key loses that relation.\n (merged as Record<string, object | undefined>)[name] = entry;\n }\n }\n return merged;\n}\n\nexport function useComponentProps<Name extends keyof ComponentPropsMap>(\n name: Name,\n props: ComponentPropsMap[Name],\n): ComponentPropsMap[Name] {\n const defaults = useContext(ComponentDefaultsContext)[name];\n return mergeComponentProps(\n defaults as Partial<ComponentPropsMap[Name]> | null | undefined,\n props,\n );\n}\n\n/** Generic owners merge this type-independent projection into their own complete props. */\nexport function useGenericComponentDefaults<Name extends GenericComponentName>(name: Name) {\n return useContext(ComponentDefaultsContext)[name];\n}\n\n/** Read defaults for an API request without invoking hooks from the request callback. */\nexport function useComponentDefaults<Name extends keyof LeafComponentDefaults>(name: Name) {\n return useContext(ComponentDefaultsContext)[name];\n}\n"],"names":["ComponentDefaultsContext","createContext","mergeComponentProps","defaults","props","resolved","key","Object","value","undefined","mergeComponentDefaults","parent","overrides","merged","name","incoming","inherited","entry","useComponentProps","useContext","useGenericComponentDefaults","useComponentDefaults"],"mappings":";;AAwaO,MAAMA,2BAA2BC,cAAqC,CAAC;AAGvE,SAASC,oBACdC,QAA2C,EAC3CC,KAAY;IAEZ,IAAI,CAACD,UAAU,OAAOC;IACtB,IAAIC,WAAWD;IACf,KAAK,MAAME,OAAOC,OAAO,IAAI,CAACJ,UAA8B;QAC1D,MAAMK,QAAQL,QAAQ,CAACG,IAAI;QAC3B,IAAIE,AAAUC,WAAVD,SAAuBJ,AAAeK,WAAfL,KAAK,CAACE,IAAI,EAAgB;YACnD,IAAID,aAAaD,OAAOC,WAAW;gBAAE,GAAGD,KAAK;YAAC;YAC9CC,QAAQ,CAACC,IAAI,GAAGE;QAClB;IACF;IACA,OAAOH;AACT;AAGO,SAASK,uBACdC,MAA6B,EAC7BC,SAA4C;IAE5C,IAAI,CAACA,WAAW,OAAOD;IACvB,IAAIE,SAASF;IACb,KAAK,MAAMG,QAAQP,OAAO,IAAI,CAACK,WAA+C;QAC5E,MAAMG,WAAWH,SAAS,CAACE,KAAK;QAChC,IAAIC,AAAaN,WAAbM,UAAwB;QAC5B,MAAMC,YAAYL,MAAM,CAACG,KAAK,IAAIL;QAClC,IAAIM,AAAa,SAAbA,UAAmB;YACrB,IAAIC,AAAa,QAAbA,WAAmB;YACvB,IAAIH,WAAWF,QAAQE,SAAS;gBAAE,GAAGF,MAAM;YAAC;YAC5C,OAAOE,MAAM,CAACC,KAAK;YACnB;QACF;QACA,IAAIG,QAAQD;QACZ,KAAK,MAAMV,OAAOC,OAAO,IAAI,CAACQ,UAAW;YACvC,MAAMP,QAASO,QAAoC,CAACT,IAAI;YACxD,IACEE,AAAUC,WAAVD,SACAA,UAAWQ,WAAmD,CAACV,IAAI;gBAGrE,IAAIW,UAAUD,WAAWC,QAAQ;oBAAE,GAAGD,SAAS;gBAAC;gBAC/CC,KAAiC,CAACX,IAAI,GAAGE;;QAC5C;QACA,IAAIS,UAAUD,WAAW;YACvB,IAAIH,WAAWF,QAAQE,SAAS;gBAAE,GAAGF,MAAM;YAAC;YAE3CE,MAA6C,CAACC,KAAK,GAAGG;QACzD;IACF;IACA,OAAOJ;AACT;AAEO,SAASK,kBACdJ,IAAU,EACVV,KAA8B;IAE9B,MAAMD,WAAWgB,WAAWnB,yBAAyB,CAACc,KAAK;IAC3D,OAAOZ,oBACLC,UACAC;AAEJ;AAGO,SAASgB,4BAA+DN,IAAU;IACvF,OAAOK,WAAWnB,yBAAyB,CAACc,KAAK;AACnD;AAGO,SAASO,qBAA+DP,IAAU;IACvF,OAAOK,WAAWnB,yBAAyB,CAACc,KAAK;AACnD"}
|
|
1
|
+
{"version":3,"file":"config-provider/component-defaults.js","sources":["../../../../../src/config-provider/component-defaults.ts"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { AlertProps } from '../alert/alert';\nimport type { AffixProps, AnchorProps } from '../anchor/anchor';\nimport type { AppBarProps, BottomNavigationProps, ToolbarProps } from '../appbar/appbar';\nimport type { AutoCompleteProps } from '../autocomplete/autocomplete';\nimport type { AvatarProps } from '../avatar/avatar';\nimport type { AvatarGroupProps } from '../avatar/group';\nimport type { BackTopProps } from '../backtop/backtop';\nimport type { BadgeProps } from '../badge/badge';\nimport type { BreadcrumbProps } from '../breadcrumb/breadcrumb';\nimport type { ButtonProps } from '../button/button';\nimport type { ButtonGroupProps, SplitButtonProps } from '../button/group';\nimport type { CalendarProps } from '../calendar/calendar';\nimport type { CardProps } from '../card/card';\nimport type { CarouselProps } from '../carousel/carousel';\nimport type { CascaderProps } from '../cascader/cascader';\nimport type { CheckboxProps } from '../checkbox/checkbox';\nimport type { CheckboxGroupProps } from '../checkbox/group';\nimport type { CollapseProps } from '../collapse/collapse';\nimport type { ColorPickerProps } from '../colorpicker/colorpicker';\nimport type { CommandPaletteProps } from '../commandpalette/commandpalette';\nimport type { ConfirmOptions } from '../confirm/confirm';\nimport type { DatePickerProps } from '../datepicker/datepicker';\nimport type { DateRangePickerProps } from '../daterangepicker/daterangepicker';\nimport type { DateTimePickerProps } from '../datetimepicker/datetimepicker';\nimport type { DescriptionsProps } from '../descriptions/descriptions';\nimport type { DividerProps } from '../divider/divider';\nimport type { DrawerProps } from '../drawer/drawer';\nimport type { DropdownProps } from '../dropdown/dropdown';\nimport type { EmptyProps } from '../empty/empty';\nimport type { ErrorBoundaryProps } from '../errorboundary/errorboundary';\nimport type { FileListProps } from '../filelist/filelist';\nimport type { FlexProps } from '../flex/flex';\nimport type { FloatButtonGroupProps, FloatButtonProps } from '../floatbutton/floatbutton';\nimport type {\n FormErrorSummaryProps,\n FormFieldProps,\n FormGroupProps,\n FormProps,\n} from '../form/form';\nimport type { FormListProps } from '../form/list';\nimport type { ColProps, GridProps, RowProps } from '../grid/grid';\nimport type { ImagePreviewGroupProps, ImagePreviewProps, ImageProps } from '../image/image';\nimport type { InfiniteScrollProps } from '../infinitescroll/infinitescroll';\nimport type { InputGroupProps, InputSearchProps } from '../input/group';\nimport type { InputProps } from '../input/input';\nimport type { InputMaskProps } from '../inputmask/inputmask';\nimport type { InputNumberProps } from '../inputnumber/inputnumber';\nimport type { InputOTPProps } from '../inputotp/inputotp';\nimport type { LayoutProps, LayoutSiderProps } from '../layout/layout';\nimport type { LoadingProps } from '../loading/loading';\nimport type { LoadingBarProps } from '../loadingbar/loadingbar';\nimport type { MasonryProps } from '../masonry/masonry';\nimport type { MentionsProps } from '../mentions/mentions';\nimport type { MenuGroupProps, MenuProps } from '../menu/menu';\nimport type { MessageOptions, MessageProps } from '../message/message';\nimport type { ModalProps } from '../modal/modal';\nimport type { NotificationOptions, NotificationProps } from '../notification/notification';\nimport type { PaginationProps } from '../pagination/pagination';\nimport type { PopconfirmProps } from '../popconfirm/popconfirm';\nimport type { PopoverProps } from '../popover/popover';\nimport type { ProgressProps } from '../progress/progress';\nimport type { QRCodeProps } from '../qrcode/qrcode';\nimport type { RadioGroupProps, RadioProps } from '../radio/radio';\nimport type { RateProps } from '../rate/rate';\nimport type { ResultProps } from '../result/result';\nimport type { ScrollAreaProps } from '../scrollarea/scrollarea';\nimport type { ScrollbarProps } from '../scrollbar/scrollbar';\nimport type { SelectProps } from '../select/select';\nimport type { SkeletonProps } from '../skeleton/skeleton';\nimport type { SliderProps } from '../slider/slider';\nimport type { SpaceProps } from '../space/space';\nimport type { SplitterProps } from '../splitter/splitter';\nimport type { CountdownProps, StatisticProps } from '../statistic/statistic';\nimport type { StepsProps } from '../steps/steps';\nimport type { SwitchProps } from '../switch/switch';\nimport type {\n TableCellProps,\n TableColumnHeaderProps,\n TableErrorProps,\n TableProps,\n TableRowProps,\n TableStateProps,\n} from '../table/table';\nimport type {\n DataTableColumnVisibilityProps,\n DataTableContentProps,\n DataTablePaginationProps,\n DataTablePresentationProps,\n DataTableSearchProps,\n} from '../tabletanstack/defaults';\nimport type { TabsProps } from '../tabs/tabs';\nimport type { CheckableTagProps, TagGroupProps } from '../tag/group';\nimport type { TagProps } from '../tag/tag';\nimport type { TextareaProps } from '../textarea/textarea';\nimport type { TimelineProps } from '../timeline/timeline';\nimport type { TimePickerProps } from '../timepicker/timepicker';\nimport type { TimeRangePickerProps } from '../timerangepicker/timerangepicker';\nimport type { TooltipProps } from '../tooltip/tooltip';\nimport type { TourProps } from '../tour/tour';\nimport type { TransferProps } from '../transfer/transfer';\nimport type { TreeProps } from '../tree/tree';\nimport type { TreeSelectProps } from '../treeselect/treeselect';\nimport type {\n LinkProps,\n ParagraphProps,\n TextProps,\n TitleProps,\n TypographyProps,\n} from '../typography/typography';\nimport type { UploadProps } from '../upload/upload';\nimport type { VirtualListProps } from '../virtuallist/virtuallist';\n\n/** Only props independent of the caller's item type can cross a generic component boundary. */\ntype GenericComponentName = 'FormList' | 'VirtualList' | 'DataTable';\n\n/** Full public props keep each hook key tied to its component, including Select's union. */\ninterface ComponentPropsMap {\n Affix: AffixProps;\n Alert: AlertProps;\n Anchor: AnchorProps;\n AppBar: AppBarProps;\n AutoComplete: AutoCompleteProps;\n Avatar: AvatarProps;\n AvatarGroup: AvatarGroupProps;\n BackTop: BackTopProps;\n Badge: BadgeProps;\n BottomNavigation: BottomNavigationProps;\n Breadcrumb: BreadcrumbProps;\n Button: ButtonProps;\n ButtonGroup: ButtonGroupProps;\n Calendar: CalendarProps;\n Card: CardProps;\n Carousel: CarouselProps;\n Cascader: CascaderProps;\n CheckableTag: CheckableTagProps;\n Checkbox: CheckboxProps;\n CheckboxGroup: CheckboxGroupProps;\n Col: ColProps;\n Collapse: CollapseProps;\n ColorPicker: ColorPickerProps;\n CommandPalette: CommandPaletteProps;\n Confirm: ConfirmOptions;\n Countdown: CountdownProps;\n DataTableColumnVisibility: DataTableColumnVisibilityProps;\n DataTableContent: DataTableContentProps;\n DataTableFooter: HTMLAttributes<HTMLDivElement>;\n DataTablePagination: DataTablePaginationProps;\n DataTableSearch: DataTableSearchProps;\n DataTableToolbar: HTMLAttributes<HTMLDivElement>;\n DatePicker: DatePickerProps;\n DateRangePicker: DateRangePickerProps;\n DateTimePicker: DateTimePickerProps;\n Descriptions: DescriptionsProps;\n Divider: DividerProps;\n Drawer: DrawerProps;\n Dropdown: DropdownProps;\n Empty: EmptyProps;\n ErrorBoundary: ErrorBoundaryProps;\n FileList: FileListProps;\n Flex: FlexProps;\n FloatButton: FloatButtonProps;\n FloatButtonGroup: FloatButtonGroupProps;\n Form: FormProps;\n FormErrorSummary: FormErrorSummaryProps;\n FormField: FormFieldProps;\n FormGroup: FormGroupProps;\n Grid: GridProps;\n Image: ImageProps;\n ImagePreview: ImagePreviewProps;\n ImagePreviewGroup: ImagePreviewGroupProps;\n InfiniteScroll: InfiniteScrollProps;\n Input: InputProps;\n InputGroup: InputGroupProps;\n InputMask: InputMaskProps;\n InputNumber: InputNumberProps;\n InputOTP: InputOTPProps;\n InputSearch: InputSearchProps;\n Layout: LayoutProps;\n LayoutContent: HTMLAttributes<HTMLElement>;\n LayoutFooter: HTMLAttributes<HTMLElement>;\n LayoutHeader: HTMLAttributes<HTMLElement>;\n LayoutSider: LayoutSiderProps;\n Link: LinkProps;\n Loading: LoadingProps;\n LoadingBar: LoadingBarProps;\n Masonry: MasonryProps;\n Mentions: MentionsProps;\n Menu: MenuProps;\n MenuGroup: MenuGroupProps;\n Message: MessageProps;\n Modal: ModalProps;\n Notification: NotificationProps;\n Pagination: PaginationProps;\n Paragraph: ParagraphProps;\n Popconfirm: PopconfirmProps;\n Popover: PopoverProps;\n Progress: ProgressProps;\n QRCode: QRCodeProps;\n Radio: RadioProps;\n RadioGroup: RadioGroupProps;\n Rate: RateProps;\n Result: ResultProps;\n Row: RowProps;\n ScrollArea: ScrollAreaProps;\n Scrollbar: ScrollbarProps;\n Select: SelectProps;\n Skeleton: SkeletonProps;\n Slider: SliderProps;\n Space: SpaceProps;\n SplitButton: SplitButtonProps;\n Splitter: SplitterProps;\n Statistic: StatisticProps;\n Steps: StepsProps;\n Switch: SwitchProps;\n Table: TableProps;\n TableBody: HTMLAttributes<HTMLTableSectionElement>;\n TableCaption: HTMLAttributes<HTMLTableCaptionElement>;\n TableCell: TableCellProps;\n TableColumnHeader: TableColumnHeaderProps;\n TableEmpty: TableStateProps;\n TableError: TableErrorProps;\n TableFooter: HTMLAttributes<HTMLTableSectionElement>;\n TableHeader: HTMLAttributes<HTMLTableSectionElement>;\n TableLoading: TableStateProps;\n TableRow: TableRowProps;\n Tabs: TabsProps;\n Tag: TagProps;\n TagGroup: TagGroupProps;\n Text: TextProps;\n Textarea: TextareaProps;\n Timeline: TimelineProps;\n TimePicker: TimePickerProps;\n TimeRangePicker: TimeRangePickerProps;\n Title: TitleProps;\n Toolbar: ToolbarProps;\n Tooltip: TooltipProps;\n Tour: TourProps;\n Transfer: TransferProps;\n Tree: TreeProps;\n TreeSelect: TreeSelectProps;\n Typography: TypographyProps;\n Upload: UploadProps;\n}\n\n/** Default props for supported components; null clears that component's inherited defaults. */\nexport interface LeafComponentDefaults {\n Affix?: Partial<Omit<AffixProps, 'key' | 'ref'>> | null;\n Alert?: Partial<Omit<AlertProps, 'key' | 'ref' | 'title'>> | null;\n Anchor?: Partial<Omit<AnchorProps, 'key' | 'ref' | 'items'>> | null;\n AppBar?: Partial<Omit<AppBarProps, 'key' | 'ref'>> | null;\n AutoComplete?: Partial<Omit<AutoCompleteProps, 'key' | 'ref' | 'options'>> | null;\n Avatar?: Partial<Omit<AvatarProps, 'key' | 'ref'>> | null;\n AvatarGroup?: Partial<Omit<AvatarGroupProps, 'key' | 'ref'>> | null;\n BackTop?: Partial<Omit<BackTopProps, 'key' | 'ref'>> | null;\n Badge?: Partial<Omit<BadgeProps, 'key' | 'ref'>> | null;\n BottomNavigation?: Partial<Omit<BottomNavigationProps, 'key' | 'ref' | 'items'>> | null;\n Breadcrumb?: Partial<Omit<BreadcrumbProps, 'key' | 'ref' | 'items'>> | null;\n Button?: Partial<Omit<ButtonProps, 'key' | 'ref'>> | null;\n ButtonGroup?: Partial<Omit<ButtonGroupProps, 'key' | 'ref'>> | null;\n Calendar?: Partial<Omit<CalendarProps, 'key' | 'ref'>> | null;\n Card?: Partial<Omit<CardProps, 'key' | 'ref'>> | null;\n Carousel?: Partial<Omit<CarouselProps, 'key' | 'ref'>> | null;\n Cascader?: Partial<\n Omit<\n CascaderProps,\n 'key' | 'ref' | 'options' | 'multiple' | 'value' | 'defaultValue' | 'onChange'\n >\n > | null;\n CheckableTag?: Partial<Omit<CheckableTagProps, 'key' | 'ref'>> | null;\n Checkbox?: Partial<Omit<CheckboxProps, 'key' | 'ref'>> | null;\n CheckboxGroup?: Partial<Omit<CheckboxGroupProps, 'key' | 'ref' | 'options'>> | null;\n Col?: Partial<Omit<ColProps, 'key' | 'ref'>> | null;\n Collapse?: Partial<Omit<CollapseProps, 'key' | 'ref' | 'items'>> | null;\n ColorPicker?: Partial<Omit<ColorPickerProps, 'key' | 'ref'>> | null;\n CommandPalette?: Partial<Omit<CommandPaletteProps, 'key' | 'ref' | 'items'>> | null;\n Confirm?: Partial<Omit<ConfirmOptions, 'key' | 'ref'>> | null;\n Countdown?: Partial<Omit<CountdownProps, 'key' | 'ref' | 'value'>> | null;\n DataTable?: Partial<Omit<DataTablePresentationProps, 'tableRef'>> | null;\n DataTableColumnVisibility?: Partial<Omit<DataTableColumnVisibilityProps, 'key' | 'ref'>> | null;\n DataTableContent?: Partial<Omit<DataTableContentProps, 'key' | 'ref'>> | null;\n DataTableFooter?: Partial<Omit<HTMLAttributes<HTMLDivElement>, 'key' | 'ref'>> | null;\n DataTablePagination?: Partial<Omit<DataTablePaginationProps, 'key' | 'ref'>> | null;\n DataTableSearch?: Partial<Omit<DataTableSearchProps, 'key' | 'ref'>> | null;\n DataTableToolbar?: Partial<Omit<HTMLAttributes<HTMLDivElement>, 'key' | 'ref'>> | null;\n DatePicker?: Partial<\n Omit<DatePickerProps, 'key' | 'ref' | 'multiple' | 'value' | 'defaultValue' | 'onChange'>\n > | null;\n DateRangePicker?: Partial<Omit<DateRangePickerProps, 'key' | 'ref'>> | null;\n DateTimePicker?: Partial<Omit<DateTimePickerProps, 'key' | 'ref'>> | null;\n Descriptions?: Partial<Omit<DescriptionsProps, 'key' | 'ref' | 'items'>> | null;\n Divider?: Partial<Omit<DividerProps, 'key' | 'ref'>> | null;\n Drawer?: Partial<Omit<DrawerProps, 'key' | 'ref' | 'open'>> | null;\n Dropdown?: Partial<Omit<DropdownProps, 'key' | 'ref' | 'items' | 'children'>> | null;\n Empty?: Partial<Omit<EmptyProps, 'key' | 'ref'>> | null;\n ErrorBoundary?: Partial<Omit<ErrorBoundaryProps, 'key' | 'ref'>> | null;\n FileList?: Partial<Omit<FileListProps, 'key' | 'ref' | 'items'>> | null;\n Flex?: Partial<Omit<FlexProps, 'key' | 'ref'>> | null;\n FloatButton?: Partial<Omit<FloatButtonProps, 'key' | 'ref'>> | null;\n FloatButtonGroup?: Partial<Omit<FloatButtonGroupProps, 'key' | 'ref' | 'actions'>> | null;\n Form?: Partial<Omit<FormProps, 'key' | 'ref'>> | null;\n FormErrorSummary?: Partial<Omit<FormErrorSummaryProps, 'key' | 'ref'>> | null;\n FormField?: Partial<Omit<FormFieldProps, 'key' | 'ref'>> | null;\n FormGroup?: Partial<Omit<FormGroupProps, 'key' | 'ref'>> | null;\n FormList?: Partial<\n Omit<\n FormListProps<unknown>,\n 'name' | 'children' | 'value' | 'defaultValue' | 'onChange' | 'itemKey'\n >\n > | null;\n Grid?: Partial<Omit<GridProps, 'key' | 'ref'>> | null;\n Image?: Partial<Omit<ImageProps, 'key' | 'ref'>> | null;\n ImagePreview?: Partial<\n Omit<ImagePreviewProps, 'key' | 'ref' | 'items' | 'open' | 'onClose'>\n > | null;\n ImagePreviewGroup?: Partial<Omit<ImagePreviewGroupProps, 'key' | 'ref'>> | null;\n InfiniteScroll?: Partial<\n Omit<InfiniteScrollProps, 'key' | 'ref' | 'dataLength' | 'hasMore' | 'onLoadMore'>\n > | null;\n Input?: Partial<Omit<InputProps, 'key' | 'ref'>> | null;\n InputGroup?: Partial<Omit<InputGroupProps, 'key' | 'ref'>> | null;\n InputMask?: Partial<Omit<InputMaskProps, 'key' | 'ref' | 'mask'>> | null;\n InputNumber?: Partial<\n Omit<\n InputNumberProps,\n 'key' | 'ref' | 'stringMode' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'\n >\n > | null;\n InputOTP?: Partial<Omit<InputOTPProps, 'key' | 'ref'>> | null;\n InputSearch?: Partial<Omit<InputSearchProps, 'key' | 'ref'>> | null;\n Layout?: Partial<Omit<LayoutProps, 'key' | 'ref'>> | null;\n LayoutContent?: Partial<Omit<HTMLAttributes<HTMLElement>, 'key' | 'ref'>> | null;\n LayoutFooter?: Partial<Omit<HTMLAttributes<HTMLElement>, 'key' | 'ref'>> | null;\n LayoutHeader?: Partial<Omit<HTMLAttributes<HTMLElement>, 'key' | 'ref'>> | null;\n LayoutSider?: Partial<Omit<LayoutSiderProps, 'key' | 'ref'>> | null;\n Link?: Partial<Omit<LinkProps, 'key' | 'ref'>> | null;\n Loading?: Partial<Omit<LoadingProps, 'key' | 'ref'>> | null;\n LoadingBar?: Partial<Omit<LoadingBarProps, 'key' | 'ref' | 'active' | 'progress'>> | null;\n Masonry?: Partial<Omit<MasonryProps, 'key' | 'ref'>> | null;\n Mentions?: Partial<Omit<MentionsProps, 'key' | 'ref' | 'options'>> | null;\n Menu?: Partial<Omit<MenuProps, 'key' | 'ref' | 'items'>> | null;\n MenuGroup?: Partial<Omit<MenuGroupProps, 'key' | 'ref' | 'title'>> | null;\n Message?: Partial<Omit<MessageOptions, 'key' | 'content'>> | null;\n Modal?: Partial<Omit<ModalProps, 'key' | 'ref' | 'open'>> | null;\n Notification?: Partial<Omit<NotificationOptions, 'key' | 'title'>> | null;\n Pagination?: Partial<Omit<PaginationProps, 'key' | 'ref' | 'total'>> | null;\n Paragraph?: Partial<Omit<ParagraphProps, 'key' | 'ref'>> | null;\n Popconfirm?: Partial<Omit<PopconfirmProps, 'key' | 'ref' | 'children' | 'title'>> | null;\n Popover?: Partial<Omit<PopoverProps, 'key' | 'ref' | 'children' | 'content'>> | null;\n Progress?: Partial<Omit<ProgressProps, 'key' | 'ref'>> | null;\n QRCode?: Partial<Omit<QRCodeProps, 'key' | 'ref' | 'value'>> | null;\n Radio?: Partial<Omit<RadioProps, 'key' | 'ref'>> | null;\n RadioGroup?: Partial<Omit<RadioGroupProps, 'key' | 'ref' | 'options'>> | null;\n Rate?: Partial<Omit<RateProps, 'key' | 'ref'>> | null;\n Result?: Partial<Omit<ResultProps, 'key' | 'ref'>> | null;\n Row?: Partial<Omit<RowProps, 'key' | 'ref'>> | null;\n ScrollArea?: Partial<Omit<ScrollAreaProps, 'key' | 'ref'>> | null;\n Scrollbar?: Partial<Omit<ScrollbarProps, 'key' | 'ref'>> | null;\n /** Required data, mode-dependent values and callbacks belong on each Select. */\n Select?: Partial<\n Omit<\n SelectProps,\n 'key' | 'ref' | 'options' | 'multiple' | 'value' | 'defaultValue' | 'onChange'\n >\n > | null;\n Skeleton?: Partial<Omit<SkeletonProps, 'key' | 'ref'>> | null;\n Slider?: Partial<\n Omit<SliderProps, 'key' | 'ref' | 'range' | 'value' | 'defaultValue' | 'onChange'>\n > | null;\n Space?: Partial<Omit<SpaceProps, 'key' | 'ref'>> | null;\n SplitButton?: Partial<Omit<SplitButtonProps, 'key' | 'ref' | 'items'>> | null;\n Splitter?: Partial<Omit<SplitterProps, 'key' | 'ref' | 'panels'>> | null;\n Statistic?: Partial<Omit<StatisticProps, 'key' | 'ref' | 'value'>> | null;\n Steps?: Partial<Omit<StepsProps, 'key' | 'ref' | 'items'>> | null;\n Switch?: Partial<Omit<SwitchProps, 'key' | 'ref'>> | null;\n Table?: Partial<Omit<TableProps, 'key' | 'ref' | 'scrollRef'>> | null;\n TableBody?: Partial<Omit<HTMLAttributes<HTMLTableSectionElement>, 'key' | 'ref'>> | null;\n TableCaption?: Partial<Omit<HTMLAttributes<HTMLTableCaptionElement>, 'key' | 'ref'>> | null;\n TableCell?: Partial<Omit<TableCellProps, 'key' | 'ref'>> | null;\n TableColumnHeader?: Partial<Omit<TableColumnHeaderProps, 'key' | 'ref'>> | null;\n TableEmpty?: Partial<Omit<TableStateProps, 'key' | 'ref'>> | null;\n TableError?: Partial<Omit<TableErrorProps, 'key' | 'ref'>> | null;\n TableFooter?: Partial<Omit<HTMLAttributes<HTMLTableSectionElement>, 'key' | 'ref'>> | null;\n TableHeader?: Partial<Omit<HTMLAttributes<HTMLTableSectionElement>, 'key' | 'ref'>> | null;\n TableLoading?: Partial<Omit<TableStateProps, 'key' | 'ref'>> | null;\n TableRow?: Partial<Omit<TableRowProps, 'key' | 'ref'>> | null;\n Tabs?: Partial<Omit<TabsProps, 'key' | 'ref' | 'items'>> | null;\n Tag?: Partial<Omit<TagProps, 'key' | 'ref'>> | null;\n TagGroup?: Partial<Omit<TagGroupProps, 'key' | 'ref' | 'options'>> | null;\n Text?: Partial<Omit<TextProps, 'key' | 'ref'>> | null;\n Textarea?: Partial<Omit<TextareaProps, 'key' | 'ref'>> | null;\n Timeline?: Partial<Omit<TimelineProps, 'key' | 'ref' | 'items'>> | null;\n TimePicker?: Partial<Omit<TimePickerProps, 'key' | 'ref'>> | null;\n TimeRangePicker?: Partial<Omit<TimeRangePickerProps, 'key' | 'ref'>> | null;\n Title?: Partial<Omit<TitleProps, 'key' | 'ref'>> | null;\n Toolbar?: Partial<Omit<ToolbarProps, 'key' | 'ref'>> | null;\n Tooltip?: Partial<Omit<TooltipProps, 'key' | 'ref' | 'content' | 'children'>> | null;\n Tour?: Partial<Omit<TourProps, 'key' | 'ref' | 'open' | 'steps'>> | null;\n Transfer?: Partial<Omit<TransferProps, 'key' | 'ref' | 'items'>> | null;\n Tree?: Partial<Omit<TreeProps, 'key' | 'ref' | 'data'>> | null;\n TreeSelect?: Partial<\n Omit<\n TreeSelectProps,\n | 'key'\n | 'ref'\n | 'options'\n | 'multiple'\n | 'treeCheckable'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n >\n > | null;\n Typography?: Partial<Omit<TypographyProps, 'key' | 'ref'>> | null;\n Upload?: Partial<Omit<UploadProps, 'key' | 'ref'>> | null;\n VirtualList?:\n | (Partial<\n Omit<VirtualListProps<unknown>, 'items' | 'itemKey' | 'renderItem' | 'estimateSize'>\n > & { estimateSize?: number })\n | null;\n}\n\nexport const ComponentDefaultsContext = createContext<LeafComponentDefaults>({});\n\n/** Supplement missing props without copying unless a defined default is used. */\nexport function mergeComponentProps<Props extends object>(\n defaults: Partial<Props> | null | undefined,\n props: Props,\n): Props {\n if (!defaults) return props;\n let resolved = props;\n for (const key of Object.keys(defaults) as (keyof Props)[]) {\n const value = defaults[key];\n if (value !== undefined && props[key] === undefined) {\n if (resolved === props) resolved = { ...props };\n resolved[key] = value as Props[typeof key];\n }\n }\n return resolved;\n}\n\n/** Merge scopes by component and prop; nested prop values are replaced as a whole. */\nexport function mergeComponentDefaults(\n parent: LeafComponentDefaults,\n overrides: LeafComponentDefaults | undefined,\n): LeafComponentDefaults {\n if (!overrides) return parent;\n let merged = parent;\n for (const name of Object.keys(overrides) as (keyof LeafComponentDefaults)[]) {\n const incoming = overrides[name];\n if (incoming === undefined) continue;\n const inherited = parent[name] ?? undefined;\n if (incoming === null) {\n if (inherited == null) continue;\n if (merged === parent) merged = { ...parent };\n delete merged[name];\n continue;\n }\n let entry = inherited;\n for (const key of Object.keys(incoming)) {\n const value = (incoming as Record<string, unknown>)[key];\n if (\n value === undefined ||\n value === (inherited as Record<string, unknown> | undefined)?.[key]\n )\n continue;\n if (entry === inherited) entry = { ...inherited };\n (entry as Record<string, unknown>)[key] = value;\n }\n if (entry !== inherited) {\n if (merged === parent) merged = { ...parent };\n // Each entry remains the same component's props; only the dynamic key loses that relation.\n (merged as Record<string, object | undefined>)[name] = entry;\n }\n }\n return merged;\n}\n\nexport function useComponentProps<Name extends keyof ComponentPropsMap>(\n name: Name,\n props: ComponentPropsMap[Name],\n): ComponentPropsMap[Name] {\n const defaults = useContext(ComponentDefaultsContext)[name];\n return mergeComponentProps(\n defaults as Partial<ComponentPropsMap[Name]> | null | undefined,\n props,\n );\n}\n\n/** Generic owners merge this type-independent projection into their own complete props. */\nexport function useGenericComponentDefaults<Name extends GenericComponentName>(name: Name) {\n return useContext(ComponentDefaultsContext)[name];\n}\n\n/** Read defaults for an API request without invoking hooks from the request callback. */\nexport function useComponentDefaults<Name extends keyof LeafComponentDefaults>(name: Name) {\n return useContext(ComponentDefaultsContext)[name];\n}\n"],"names":["ComponentDefaultsContext","createContext","mergeComponentProps","defaults","props","resolved","key","Object","value","undefined","mergeComponentDefaults","parent","overrides","merged","name","incoming","inherited","entry","useComponentProps","useContext","useGenericComponentDefaults","useComponentDefaults"],"mappings":";;AAuaO,MAAMA,2BAA2BC,cAAqC,CAAC;AAGvE,SAASC,oBACdC,QAA2C,EAC3CC,KAAY;IAEZ,IAAI,CAACD,UAAU,OAAOC;IACtB,IAAIC,WAAWD;IACf,KAAK,MAAME,OAAOC,OAAO,IAAI,CAACJ,UAA8B;QAC1D,MAAMK,QAAQL,QAAQ,CAACG,IAAI;QAC3B,IAAIE,AAAUC,WAAVD,SAAuBJ,AAAeK,WAAfL,KAAK,CAACE,IAAI,EAAgB;YACnD,IAAID,aAAaD,OAAOC,WAAW;gBAAE,GAAGD,KAAK;YAAC;YAC9CC,QAAQ,CAACC,IAAI,GAAGE;QAClB;IACF;IACA,OAAOH;AACT;AAGO,SAASK,uBACdC,MAA6B,EAC7BC,SAA4C;IAE5C,IAAI,CAACA,WAAW,OAAOD;IACvB,IAAIE,SAASF;IACb,KAAK,MAAMG,QAAQP,OAAO,IAAI,CAACK,WAA+C;QAC5E,MAAMG,WAAWH,SAAS,CAACE,KAAK;QAChC,IAAIC,AAAaN,WAAbM,UAAwB;QAC5B,MAAMC,YAAYL,MAAM,CAACG,KAAK,IAAIL;QAClC,IAAIM,AAAa,SAAbA,UAAmB;YACrB,IAAIC,AAAa,QAAbA,WAAmB;YACvB,IAAIH,WAAWF,QAAQE,SAAS;gBAAE,GAAGF,MAAM;YAAC;YAC5C,OAAOE,MAAM,CAACC,KAAK;YACnB;QACF;QACA,IAAIG,QAAQD;QACZ,KAAK,MAAMV,OAAOC,OAAO,IAAI,CAACQ,UAAW;YACvC,MAAMP,QAASO,QAAoC,CAACT,IAAI;YACxD,IACEE,AAAUC,WAAVD,SACAA,UAAWQ,WAAmD,CAACV,IAAI;gBAGrE,IAAIW,UAAUD,WAAWC,QAAQ;oBAAE,GAAGD,SAAS;gBAAC;gBAC/CC,KAAiC,CAACX,IAAI,GAAGE;;QAC5C;QACA,IAAIS,UAAUD,WAAW;YACvB,IAAIH,WAAWF,QAAQE,SAAS;gBAAE,GAAGF,MAAM;YAAC;YAE3CE,MAA6C,CAACC,KAAK,GAAGG;QACzD;IACF;IACA,OAAOJ;AACT;AAEO,SAASK,kBACdJ,IAAU,EACVV,KAA8B;IAE9B,MAAMD,WAAWgB,WAAWnB,yBAAyB,CAACc,KAAK;IAC3D,OAAOZ,oBACLC,UACAC;AAEJ;AAGO,SAASgB,4BAA+DN,IAAU;IACvF,OAAOK,WAAWnB,yBAAyB,CAACc,KAAK;AACnD;AAGO,SAASO,qBAA+DP,IAAU;IACvF,OAAOK,WAAWnB,yBAAyB,CAACc,KAAK;AACnD"}
|
|
@@ -8,16 +8,32 @@ function useColorVariables(root, theme) {
|
|
|
8
8
|
useEffect(()=>{
|
|
9
9
|
const node = root.current;
|
|
10
10
|
const entries = Object.entries(leafThemeColors(theme));
|
|
11
|
-
if (!node || !entries.some(([, value])
|
|
11
|
+
if (!node || !entries.some(([, value])=>/(?:var|color-mix|light-dark|oklch|oklab|lab|lch|color)\(/i.test(value))) return void setResolved((previous)=>Object.keys(previous).length ? {} : previous);
|
|
12
12
|
const sync = ()=>{
|
|
13
13
|
const probe = document.createElement('span');
|
|
14
14
|
probe.hidden = true;
|
|
15
15
|
node.append(probe);
|
|
16
16
|
const overrides = {};
|
|
17
|
+
let canvas;
|
|
17
18
|
for (const [key, value] of entries){
|
|
18
19
|
probe.style.color = '';
|
|
19
20
|
probe.style.color = String(value);
|
|
20
|
-
if (probe.style.color)
|
|
21
|
+
if (probe.style.color) {
|
|
22
|
+
const color = getComputedStyle(probe).color;
|
|
23
|
+
overrides[key] = color;
|
|
24
|
+
if (/^(?:color|oklch|oklab|lab|lch)\(/i.test(color) && globalThis.CSS?.supports?.('color', color)) {
|
|
25
|
+
canvas ??= document.createElement('canvas').getContext('2d', {
|
|
26
|
+
willReadFrequently: true
|
|
27
|
+
});
|
|
28
|
+
if (canvas) {
|
|
29
|
+
canvas.clearRect(0, 0, 1, 1);
|
|
30
|
+
canvas.fillStyle = color;
|
|
31
|
+
canvas.fillRect(0, 0, 1, 1);
|
|
32
|
+
const [r, g, b, a = 255] = canvas.getImageData(0, 0, 1, 1).data;
|
|
33
|
+
overrides[key] = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
21
37
|
}
|
|
22
38
|
probe.remove();
|
|
23
39
|
const mode = theme.appearance ?? (getComputedStyle(node).colorScheme.includes('dark') ? 'dark' : 'light');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-provider/use-color-variables.js","sources":["../../../../../src/config-provider/use-color-variables.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from 'react';\nimport { deriveColors } from '../colors';\nimport { composedParent } from '../shared/dom';\nimport { type LeafTheme, type LeafThemeStyle, leafThemeColors } from '../theme';\n\n/** Resolve CSS variable colors after hydration; concrete theme colors are already SSR safe. */\nexport function useColorVariables(root: RefObject<HTMLDivElement | null>, theme: LeafTheme) {\n const [resolved, setResolved] = useState<LeafThemeStyle>({});\n useEffect(() => {\n const node = root.current;\n const entries = Object.entries(leafThemeColors(theme));\n if (!node
|
|
1
|
+
{"version":3,"file":"config-provider/use-color-variables.js","sources":["../../../../../src/config-provider/use-color-variables.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from 'react';\nimport { deriveColors } from '../colors';\nimport { composedParent } from '../shared/dom';\nimport { type LeafTheme, type LeafThemeStyle, leafThemeColors } from '../theme';\n\n/** Resolve CSS variable colors after hydration; concrete theme colors are already SSR safe. */\nexport function useColorVariables(root: RefObject<HTMLDivElement | null>, theme: LeafTheme) {\n const [resolved, setResolved] = useState<LeafThemeStyle>({});\n useEffect(() => {\n const node = root.current;\n const entries = Object.entries(leafThemeColors(theme));\n if (\n !node ||\n !entries.some(([, value]) =>\n /(?:var|color-mix|light-dark|oklch|oklab|lab|lch|color)\\(/i.test(value),\n )\n ) {\n setResolved((previous) => (Object.keys(previous).length ? {} : previous));\n return;\n }\n const sync = () => {\n const probe = document.createElement('span');\n probe.hidden = true;\n node.append(probe);\n const overrides: Record<string, string> = {};\n let canvas: CanvasRenderingContext2D | null | undefined;\n for (const [key, value] of entries) {\n probe.style.color = '';\n probe.style.color = String(value);\n if (probe.style.color) {\n const color = getComputedStyle(probe).color;\n overrides[key] = color;\n // CSS Color 4 computed values are not understood by TinyColor. Resolve\n // them to sRGB for contrast and interaction calculations in the browser.\n if (\n /^(?:color|oklch|oklab|lab|lch)\\(/i.test(color) &&\n globalThis.CSS?.supports?.('color', color)\n ) {\n canvas ??= document\n .createElement('canvas')\n .getContext('2d', { willReadFrequently: true });\n if (canvas) {\n canvas.clearRect(0, 0, 1, 1);\n canvas.fillStyle = color;\n canvas.fillRect(0, 0, 1, 1);\n const [r, g, b, a = 255] = canvas.getImageData(0, 0, 1, 1).data;\n overrides[key] = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n }\n }\n }\n }\n probe.remove();\n const mode =\n theme.appearance ??\n (getComputedStyle(node).colorScheme.includes('dark') ? 'dark' : 'light');\n const next = deriveColors(mode, overrides);\n setResolved((previous) =>\n JSON.stringify(previous) === JSON.stringify(next) ? previous : next,\n );\n };\n sync();\n const observer = new MutationObserver(sync);\n let ancestor: HTMLElement | null = node;\n while (ancestor) {\n observer.observe(ancestor, {\n attributes: true,\n attributeFilter: ['style', 'class', 'data-leaf-theme'],\n });\n ancestor = composedParent(ancestor);\n }\n return () => observer.disconnect();\n }, [root, theme]);\n return resolved;\n}\n"],"names":["useColorVariables","root","theme","resolved","setResolved","useState","useEffect","node","entries","Object","leafThemeColors","value","previous","sync","probe","document","overrides","canvas","key","String","color","getComputedStyle","globalThis","r","g","b","a","mode","next","deriveColors","JSON","observer","MutationObserver","ancestor","composedParent"],"mappings":";;;;;AAMO,SAASA,kBAAkBC,IAAsC,EAAEC,KAAgB;IACxF,MAAM,CAACC,UAAUC,YAAY,GAAGC,SAAyB,CAAC;IAC1DC,UAAU;QACR,MAAMC,OAAON,KAAK,OAAO;QACzB,MAAMO,UAAUC,OAAO,OAAO,CAACC,gBAAgBR;QAC/C,IACE,CAACK,QACD,CAACC,QAAQ,IAAI,CAAC,CAAC,GAAGG,MAAM,GACtB,4DAA4D,IAAI,CAACA,SAEnE,YACAP,YAAY,CAACQ,WAAcH,OAAO,IAAI,CAACG,UAAU,MAAM,GAAG,CAAC,IAAIA;QAGjE,MAAMC,OAAO;YACX,MAAMC,QAAQC,SAAS,aAAa,CAAC;YACrCD,MAAM,MAAM,GAAG;YACfP,KAAK,MAAM,CAACO;YACZ,MAAME,YAAoC,CAAC;YAC3C,IAAIC;YACJ,KAAK,MAAM,CAACC,KAAKP,MAAM,IAAIH,QAAS;gBAClCM,MAAM,KAAK,CAAC,KAAK,GAAG;gBACpBA,MAAM,KAAK,CAAC,KAAK,GAAGK,OAAOR;gBAC3B,IAAIG,MAAM,KAAK,CAAC,KAAK,EAAE;oBACrB,MAAMM,QAAQC,iBAAiBP,OAAO,KAAK;oBAC3CE,SAAS,CAACE,IAAI,GAAGE;oBAGjB,IACE,oCAAoC,IAAI,CAACA,UACzCE,WAAW,GAAG,EAAE,WAAW,SAASF,QACpC;wBACAH,WAAWF,SACR,aAAa,CAAC,UACd,UAAU,CAAC,MAAM;4BAAE,oBAAoB;wBAAK;wBAC/C,IAAIE,QAAQ;4BACVA,OAAO,SAAS,CAAC,GAAG,GAAG,GAAG;4BAC1BA,OAAO,SAAS,GAAGG;4BACnBH,OAAO,QAAQ,CAAC,GAAG,GAAG,GAAG;4BACzB,MAAM,CAACM,GAAGC,GAAGC,GAAGC,IAAI,GAAG,CAAC,GAAGT,OAAO,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI;4BAC/DD,SAAS,CAACE,IAAI,GAAG,CAAC,KAAK,EAAEK,EAAE,EAAE,EAAEC,EAAE,EAAE,EAAEC,EAAE,EAAE,EAAEC,IAAI,IAAI,CAAC,CAAC;wBACvD;oBACF;gBACF;YACF;YACAZ,MAAM,MAAM;YACZ,MAAMa,OACJzB,MAAM,UAAU,IACfmB,CAAAA,iBAAiBd,MAAM,WAAW,CAAC,QAAQ,CAAC,UAAU,SAAS,OAAM;YACxE,MAAMqB,OAAOC,aAAaF,MAAMX;YAChCZ,YAAY,CAACQ,WACXkB,KAAK,SAAS,CAAClB,cAAckB,KAAK,SAAS,CAACF,QAAQhB,WAAWgB;QAEnE;QACAf;QACA,MAAMkB,WAAW,IAAIC,iBAAiBnB;QACtC,IAAIoB,WAA+B1B;QACnC,MAAO0B,SAAU;YACfF,SAAS,OAAO,CAACE,UAAU;gBACzB,YAAY;gBACZ,iBAAiB;oBAAC;oBAAS;oBAAS;iBAAkB;YACxD;YACAA,WAAWC,eAAeD;QAC5B;QACA,OAAO,IAAMF,SAAS,UAAU;IAClC,GAAG;QAAC9B;QAAMC;KAAM;IAChB,OAAOC;AACT"}
|
|
@@ -6,6 +6,7 @@ import { X } from "lucide-react";
|
|
|
6
6
|
import { useContext, useEffect, useId, useRef, useState } from "react";
|
|
7
7
|
import { useComponentProps } from "../config-provider/component-defaults.js";
|
|
8
8
|
import { useLeafConfig } from "../config-provider/context.js";
|
|
9
|
+
import { ScrollbarControl } from "../scrollbar/scrollbar.js";
|
|
9
10
|
import { classes } from "../shared/classes.js";
|
|
10
11
|
import { useDialog } from "../shared/dialog.js";
|
|
11
12
|
import { inertProps } from "../shared/inert.js";
|
|
@@ -209,8 +210,13 @@ function DrawerSurface({ open, title, description, icon, divided = true, footer,
|
|
|
209
210
|
})
|
|
210
211
|
]
|
|
211
212
|
}),
|
|
212
|
-
/*#__PURE__*/ jsx(
|
|
213
|
+
/*#__PURE__*/ jsx(ScrollbarControl, {
|
|
213
214
|
className: "leaf-drawer__body",
|
|
215
|
+
viewportClassName: "leaf-drawer__viewport",
|
|
216
|
+
orientation: "vertical",
|
|
217
|
+
role: null != title || props['aria-label'] ? 'region' : 'presentation',
|
|
218
|
+
"aria-labelledby": null != title ? `${id}-title` : void 0,
|
|
219
|
+
"aria-label": null == title ? props['aria-label'] : void 0,
|
|
214
220
|
children: /*#__PURE__*/ jsx("div", {
|
|
215
221
|
ref: content,
|
|
216
222
|
className: "leaf-drawer__content",
|