@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared/floating.js","sources":["../../../src/shared/floating.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n offset,\n type Placement,\n shift,\n size,\n useFloating,\n} from '@floating-ui/react-dom';\nimport {\n type CSSProperties,\n createContext,\n type HTMLAttributes,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { tabbable } from 'tabbable';\nimport { useLeafConfig } from '../config-provider/context';\nimport type { LeafThemeStyle } from '../theme';\nimport { composedEventTarget, composedParent, deepActiveElement } from './dom';\nimport { assignRef } from './field';\nimport { inertProps } from './inert';\nimport { OverlayOwner } from './overlay-owner';\nimport { usePresence } from './presence';\n\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\nconst PopupParent = createContext<string | undefined>(undefined);\nconst popupNodes = new Map<string, HTMLElement>();\nconst dismissStack: RefObject<HTMLElement | null>[] = [];\nfunction insidePopup(target: Node, panel: HTMLElement | null) {\n if (!panel) return false;\n if (panel.contains(target)) return true;\n let popup = target instanceof Element ? target.closest<HTMLElement>('[data-leaf-popup]') : null;\n const visited = new Set<string>();\n while (popup?.dataset.leafPopupParent) {\n const parent = popup.dataset.leafPopupParent;\n if (visited.has(parent)) break;\n visited.add(parent);\n popup = popupNodes.get(parent) ?? null;\n if (popup === panel) return true;\n }\n return false;\n}\n\n/** Close disabled fields immediately and report each open-state change once. */\nexport function usePopupState(\n disabled?: boolean,\n onOpenChange?: (open: boolean) => void,\n controlledOpen?: boolean,\n defaultOpen = false,\n) {\n const [internalOpen, setRequestedOpen] = useState(defaultOpen);\n const requestedOpen = controlledOpen ?? internalOpen;\n const requestedRef = useRef(requestedOpen);\n requestedRef.current = requestedOpen;\n const open = requestedOpen && !disabled;\n const setOpen = useCallback(\n (next: boolean) => {\n if (next === requestedRef.current || (next && disabled)) return;\n requestedRef.current = next;\n if (controlledOpen === undefined) setRequestedOpen(next);\n onOpenChange?.(next);\n },\n [disabled, onOpenChange, controlledOpen],\n );\n useEffect(() => {\n if (disabled && requestedOpen) setOpen(false);\n }, [disabled, requestedOpen, setOpen]);\n return [open, setOpen] as const;\n}\n\nexport interface PopupOptions {\n popupPlacement?: Placement;\n popupClassName?: string;\n popupStyle?: CSSProperties;\n popupRender?: (content: React.ReactNode) => React.ReactNode;\n getPopupContainer?: () => Element | DocumentFragment;\n}\ninterface FloatingPanelProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n triggerRef: RefObject<HTMLElement | null>;\n panelRef: RefObject<HTMLDivElement | null>;\n matchWidth?: boolean;\n width?: CSSProperties['width'];\n minWidth?: CSSProperties['minWidth'] | 'trigger';\n maxWidth?: CSSProperties['maxWidth'];\n maxHeight?: CSSProperties['maxHeight'];\n placement?: Placement;\n container?: Element | DocumentFragment | (() => Element | DocumentFragment);\n render?: (content: React.ReactNode) => React.ReactNode;\n position?: { x: number; y: number };\n}\n\n/** Position a lazily mounted portal, preserving the trigger's scoped theme. */\nexport function FloatingPanel({\n open,\n triggerRef,\n panelRef,\n matchWidth,\n width,\n minWidth,\n maxWidth,\n maxHeight,\n placement = 'bottom-start',\n container,\n render,\n position,\n style,\n children,\n ...props\n}: FloatingPanelProps) {\n const popupId = useId();\n const parentPopup = useContext(PopupParent);\n const config = useLeafConfig();\n const owner = useContext(OverlayOwner);\n const present = usePresence(open, panelRef);\n const [theme, setTheme] = useState<LeafThemeStyle>({});\n const [inheritedMotion, setInheritedMotion] = useState<string>();\n const openRef = useRef(open);\n openRef.current = open;\n const previousPosition = useRef<CSSProperties>({});\n const closingContent = useRef(children);\n const referenceElement = triggerRef.current;\n if (open) closingContent.current = children;\n const {\n refs,\n floatingStyles,\n isPositioned,\n update,\n placement: resolvedPlacement,\n } = useFloating({\n open,\n placement,\n strategy: 'fixed',\n // Keep viewport positioning outside the popup's local scale/translate motion.\n transform: false,\n whileElementsMounted: (reference, floating, update) =>\n autoUpdate(reference, floating, () => {\n if (openRef.current) update();\n }),\n middleware: [\n offset(6),\n flip({ padding: 12 }),\n shift({ padding: 12 }),\n size({\n padding: 12,\n apply({ availableHeight, availableWidth, rects, elements }) {\n if (!openRef.current) return;\n const length = (value: string | number) =>\n typeof value === 'number' ? `${value}px` : value;\n const widthMaximum = maxWidth ?? style?.maxWidth;\n const heightMaximum = maxHeight ?? style?.maxHeight;\n const viewportWidth = `${Math.max(0, availableWidth)}px`;\n const viewportHeight = `${Math.max(0, availableHeight)}px`;\n const widthLimit =\n widthMaximum === undefined\n ? viewportWidth\n : `min(${length(widthMaximum)}, ${viewportWidth})`;\n Object.assign(elements.floating.style, {\n maxHeight:\n heightMaximum === undefined\n ? viewportHeight\n : `min(${length(heightMaximum)}, ${viewportHeight})`,\n maxWidth: widthLimit,\n width: matchWidth\n ? `${Math.min(rects.reference.width, availableWidth)}px`\n : length(width ?? style?.width ?? ''),\n minWidth:\n minWidth === 'trigger'\n ? `min(${rects.reference.width}px, ${widthLimit})`\n : length(minWidth ?? style?.minWidth ?? ''),\n });\n },\n }),\n ],\n });\n if (open) previousPosition.current = floatingStyles;\n const setPanelRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (node) popupNodes.set(popupId, node);\n else popupNodes.delete(popupId);\n assignRef(panelRef, node);\n refs.setFloating(node);\n },\n [panelRef, refs.setFloating, popupId],\n );\n\n useBrowserLayoutEffect(() => {\n const trigger = referenceElement ?? triggerRef.current;\n if (!trigger || !present) return;\n refs.setReference(\n position\n ? {\n getBoundingClientRect: () => ({\n x: position.x,\n y: position.y,\n top: position.y,\n bottom: position.y,\n left: position.x,\n right: position.x,\n width: 0,\n height: 0,\n }),\n }\n : trigger,\n );\n const syncTheme = () => {\n const computed = getComputedStyle(trigger);\n let motionAncestor: HTMLElement | null = trigger;\n while (motionAncestor && !motionAncestor.hasAttribute('data-leaf-motion'))\n motionAncestor = composedParent(motionAncestor);\n setInheritedMotion(motionAncestor?.getAttribute('data-leaf-motion') ?? undefined);\n const variables: LeafThemeStyle = {\n colorScheme: computed.colorScheme,\n direction: computed.direction as CSSProperties['direction'],\n };\n for (let i = 0; i < computed.length; i += 1) {\n const key = computed.item(i);\n if (key.startsWith('--leaf-'))\n variables[key as `--leaf-${string}`] = computed.getPropertyValue(key);\n }\n setTheme(variables);\n };\n syncTheme();\n const observer = new MutationObserver(syncTheme);\n let ancestor: HTMLElement | null = trigger;\n while (ancestor) {\n observer.observe(ancestor, {\n attributes: true,\n attributeFilter: ['class', 'style', 'data-leaf-theme', 'data-leaf-motion', 'dir'],\n });\n ancestor = composedParent(ancestor);\n }\n return () => observer.disconnect();\n }, [triggerRef, referenceElement, refs.setReference, present, position]);\n\n useBrowserLayoutEffect(() => {\n // A quick reopen can reuse the exit-presence node without remounting autoUpdate.\n if (open && present) void update();\n }, [open, present, update]);\n\n if (!present || typeof document === 'undefined') return null;\n return createPortal(\n <PopupParent.Provider value={popupId}>\n <div\n {...props}\n ref={setPanelRef}\n data-leaf-owner={owner}\n data-leaf-popup={popupId}\n data-leaf-popup-parent={parentPopup}\n data-leaf-motion={config.theme.motion === false ? 'off' : inheritedMotion}\n data-side={resolvedPlacement.split('-')[0]}\n data-align={resolvedPlacement.split('-')[1] ?? 'center'}\n dir={props.dir ?? theme.direction ?? config.direction}\n lang={props.lang ?? config.locale}\n data-state={open ? 'open' : 'closing'}\n data-positioned={isPositioned || !open}\n aria-hidden={!open || undefined}\n {...inertProps(!open)}\n style={{ ...theme, ...style, ...(open ? floatingStyles : previousPosition.current) }}\n >\n {render\n ? render(open ? children : closingContent.current)\n : open\n ? children\n : closingContent.current}\n </div>\n </PopupParent.Provider>,\n (typeof container === 'function' ? container() : container) ??\n config.getPopupContainer?.() ??\n document.body,\n );\n}\n\n/** Close a custom floating panel when focus leaves it or Escape is pressed. */\nexport function useFloatingDismiss(\n open: boolean,\n onClose: (reason?: 'escape' | 'outside' | 'focus' | 'tab') => void,\n triggerRef: RefObject<HTMLElement | null>,\n panelRef: RefObject<HTMLElement | null>,\n boundaryRef: RefObject<HTMLElement | null> = triggerRef,\n) {\n const closeRef = useRef(onClose);\n closeRef.current = onClose;\n useEffect(() => {\n if (!open) {\n return;\n }\n dismissStack.push(panelRef);\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.composedPath()[0] ?? event.target;\n if (!(target instanceof Node)) {\n return;\n }\n const label = target instanceof Element ? target.closest('label') : null;\n const labelledControl = label?.control;\n if (\n boundaryRef.current?.contains(target) ||\n insidePopup(target, panelRef.current) ||\n (labelledControl && boundaryRef.current?.contains(labelledControl))\n ) {\n return;\n }\n closeRef.current('outside');\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || dismissStack.at(-1) !== panelRef) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeRef.current('escape');\n triggerRef.current?.focus();\n } else if (event.key === 'Tab') {\n const panel = panelRef.current;\n const trigger = triggerRef.current;\n const active = deepActiveElement();\n if (!panel || !trigger || !panel.contains(active)) return;\n const items = tabbable(panel, {\n getShadowRoot: (element) => element.shadowRoot ?? undefined,\n });\n const index = active instanceof HTMLElement ? items.indexOf(active) : -1;\n const leaving = event.shiftKey ? index <= 0 : index === items.length - 1;\n if (!leaving) return;\n event.preventDefault();\n closeRef.current('tab');\n if (event.shiftKey) trigger.focus();\n else {\n const pageItems = tabbable(document.body, {\n getShadowRoot: (element) => element.shadowRoot ?? undefined,\n }).filter((item) => !panel.contains(item));\n const triggerIndex = pageItems.indexOf(trigger);\n (pageItems[triggerIndex + 1] ?? trigger).focus();\n }\n }\n };\n\n const handleFocus = (event: FocusEvent) => {\n const target = composedEventTarget(event);\n if (\n target instanceof Node &&\n !boundaryRef.current?.contains(target) &&\n !insidePopup(target, panelRef.current)\n )\n closeRef.current('focus');\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown, true);\n document.addEventListener('focusin', handleFocus);\n return () => {\n const index = dismissStack.indexOf(panelRef);\n if (index >= 0) dismissStack.splice(index, 1);\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown, true);\n document.removeEventListener('focusin', handleFocus);\n };\n }, [open, panelRef, triggerRef, boundaryRef]);\n}\n\n/** Keep keyboard-highlighted options visible without animated scrolling. */\nexport function useActiveOption(\n open: boolean,\n optionId: string | undefined,\n panelRef?: RefObject<HTMLElement | null>,\n) {\n useEffect(() => {\n if (!open || !optionId) return;\n const root = panelRef?.current?.getRootNode();\n const scope = root instanceof ShadowRoot ? root : document;\n scope.getElementById(optionId)?.scrollIntoView?.({ block: 'nearest' });\n }, [open, optionId, panelRef]);\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","PopupParent","createContext","undefined","popupNodes","Map","dismissStack","insidePopup","target","panel","popup","Element","visited","Set","parent","usePopupState","disabled","onOpenChange","controlledOpen","defaultOpen","internalOpen","setRequestedOpen","useState","requestedOpen","requestedRef","useRef","open","setOpen","useCallback","next","FloatingPanel","triggerRef","panelRef","matchWidth","width","minWidth","maxWidth","maxHeight","placement","container","render","position","style","children","props","popupId","useId","parentPopup","useContext","config","useLeafConfig","owner","OverlayOwner","present","usePresence","theme","setTheme","inheritedMotion","setInheritedMotion","openRef","previousPosition","closingContent","referenceElement","refs","floatingStyles","isPositioned","update","resolvedPlacement","useFloating","reference","floating","autoUpdate","offset","flip","shift","size","availableHeight","availableWidth","rects","elements","length","value","widthMaximum","heightMaximum","viewportWidth","Math","viewportHeight","widthLimit","Object","setPanelRef","node","assignRef","trigger","syncTheme","computed","getComputedStyle","motionAncestor","composedParent","variables","i","key","observer","MutationObserver","ancestor","document","createPortal","inertProps","useFloatingDismiss","onClose","boundaryRef","closeRef","handlePointerDown","event","Node","label","labelledControl","handleKeyDown","active","deepActiveElement","items","tabbable","element","index","HTMLElement","leaving","pageItems","item","triggerIndex","handleFocus","composedEventTarget","useActiveOption","optionId","root","scope","ShadowRoot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shared/floating.js","sources":["../../../src/shared/floating.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n offset,\n type Placement,\n shift,\n size,\n useFloating,\n} from '@floating-ui/react-dom';\nimport {\n type CSSProperties,\n createContext,\n type HTMLAttributes,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { tabbable } from 'tabbable';\nimport { useLeafConfig } from '../config-provider/context';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport type { LeafThemeStyle } from '../theme';\nimport { composedEventTarget, composedParent, deepActiveElement } from './dom';\nimport { assignRef } from './field';\nimport { inertProps } from './inert';\nimport { OverlayOwner } from './overlay-owner';\nimport { usePresence } from './presence';\nimport { readThemeVariables } from './theme-variables';\n\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\nconst PopupParent = createContext<string | undefined>(undefined);\nconst popupNodes = new Map<string, HTMLElement>();\nconst dismissStack: RefObject<HTMLElement | null>[] = [];\nfunction insidePopup(target: Node, panel: HTMLElement | null) {\n if (!panel) return false;\n const boundary = panel.closest<HTMLElement>('[data-leaf-popup]') ?? panel;\n if (boundary.contains(target)) return true;\n let popup = target instanceof Element ? target.closest<HTMLElement>('[data-leaf-popup]') : null;\n const visited = new Set<string>();\n while (popup?.dataset.leafPopupParent) {\n const parent = popup.dataset.leafPopupParent;\n if (visited.has(parent)) break;\n visited.add(parent);\n popup = popupNodes.get(parent) ?? null;\n if (popup === boundary) return true;\n }\n return false;\n}\n\n/** Close disabled fields immediately and report each open-state change once. */\nexport function usePopupState(\n disabled?: boolean,\n onOpenChange?: (open: boolean) => void,\n controlledOpen?: boolean,\n defaultOpen = false,\n) {\n const [internalOpen, setRequestedOpen] = useState(defaultOpen);\n const requestedOpen = controlledOpen ?? internalOpen;\n const requestedRef = useRef(requestedOpen);\n requestedRef.current = requestedOpen;\n const open = requestedOpen && !disabled;\n const setOpen = useCallback(\n (next: boolean) => {\n if (next === requestedRef.current || (next && disabled)) return;\n requestedRef.current = next;\n if (controlledOpen === undefined) setRequestedOpen(next);\n onOpenChange?.(next);\n },\n [disabled, onOpenChange, controlledOpen],\n );\n useEffect(() => {\n if (disabled && requestedOpen) setOpen(false);\n }, [disabled, requestedOpen, setOpen]);\n return [open, setOpen] as const;\n}\n\nexport interface PopupOptions {\n popupPlacement?: Placement;\n popupClassName?: string;\n popupStyle?: CSSProperties;\n popupRender?: (content: React.ReactNode) => React.ReactNode;\n getPopupContainer?: () => Element | DocumentFragment;\n}\ninterface FloatingPanelProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n triggerRef: RefObject<HTMLElement | null>;\n panelRef: RefObject<HTMLDivElement | null>;\n matchWidth?: boolean;\n width?: CSSProperties['width'];\n minWidth?: CSSProperties['minWidth'] | 'trigger';\n maxWidth?: CSSProperties['maxWidth'];\n maxHeight?: CSSProperties['maxHeight'];\n placement?: Placement;\n sideFallback?: boolean;\n resetSurfaceGeometry?: boolean;\n container?: Element | DocumentFragment | (() => Element | DocumentFragment);\n render?: (content: React.ReactNode) => React.ReactNode;\n position?: { x: number; y: number };\n}\n\n/** Position a lazily mounted portal, preserving the trigger's scoped theme. */\nexport function FloatingPanel({\n open,\n triggerRef,\n panelRef,\n matchWidth,\n width,\n minWidth,\n maxWidth,\n maxHeight,\n placement = 'bottom-start',\n sideFallback = false,\n resetSurfaceGeometry = false,\n container,\n render,\n position,\n style,\n children,\n ...props\n}: FloatingPanelProps) {\n const popupId = useId();\n const parentPopup = useContext(PopupParent);\n const config = useLeafConfig();\n const owner = useContext(OverlayOwner);\n const floatingRef = useRef<HTMLDivElement>(null);\n const present = usePresence(open, floatingRef);\n const [theme, setTheme] = useState<LeafThemeStyle>({});\n const [inheritedMotion, setInheritedMotion] = useState<string>();\n const openRef = useRef(open);\n openRef.current = open;\n const previousPosition = useRef<CSSProperties>({});\n const closingContent = useRef(children);\n const referenceElement = triggerRef.current;\n if (open) closingContent.current = children;\n const {\n refs,\n floatingStyles,\n isPositioned,\n update,\n placement: resolvedPlacement,\n } = useFloating({\n open,\n placement,\n strategy: 'fixed',\n // Keep viewport positioning outside the popup's local scale/translate motion.\n transform: false,\n whileElementsMounted: (reference, floating, update) =>\n autoUpdate(reference, floating, () => {\n if (openRef.current) update();\n }),\n middleware: [\n offset(6),\n flip({ padding: 12, fallbackAxisSideDirection: sideFallback ? 'end' : 'none' }),\n shift({ padding: 12 }),\n size(\n {\n padding: 12,\n apply({ availableHeight, availableWidth, rects, elements }) {\n if (!openRef.current) return;\n const length = (value: string | number) =>\n typeof value === 'number' ? `${value}px` : value;\n const widthMaximum = maxWidth ?? style?.maxWidth;\n const heightMaximum = maxHeight ?? style?.maxHeight;\n const viewportWidth = `${Math.max(0, availableWidth)}px`;\n const viewportHeight = `${Math.max(0, availableHeight)}px`;\n const widthLimit =\n widthMaximum === undefined\n ? viewportWidth\n : `min(${length(widthMaximum)}, ${viewportWidth})`;\n Object.assign(elements.floating.style, {\n maxHeight:\n heightMaximum === undefined\n ? viewportHeight\n : `min(${length(heightMaximum)}, ${viewportHeight})`,\n maxWidth: widthLimit,\n width: matchWidth\n ? `${Math.min(rects.reference.width, availableWidth)}px`\n : length(width ?? style?.width ?? ''),\n minWidth:\n minWidth === 'trigger'\n ? `min(${rects.reference.width}px, ${widthLimit})`\n : length(minWidth ?? style?.minWidth ?? ''),\n });\n },\n },\n [\n matchWidth,\n width,\n minWidth,\n maxWidth,\n maxHeight,\n style?.width,\n style?.minWidth,\n style?.maxWidth,\n style?.maxHeight,\n ],\n ),\n ],\n });\n if (open) previousPosition.current = floatingStyles;\n const setPanelRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (node) popupNodes.set(popupId, node);\n else popupNodes.delete(popupId);\n assignRef(floatingRef, node);\n refs.setFloating(node);\n },\n [refs.setFloating, popupId],\n );\n const setViewportRef = useCallback(\n (node: HTMLDivElement | null) => assignRef(panelRef, node),\n [panelRef],\n );\n\n useBrowserLayoutEffect(() => {\n const trigger = referenceElement ?? triggerRef.current;\n if (!trigger || !present) return;\n refs.setReference(\n position\n ? {\n getBoundingClientRect: () => ({\n x: position.x,\n y: position.y,\n top: position.y,\n bottom: position.y,\n left: position.x,\n right: position.x,\n width: 0,\n height: 0,\n }),\n }\n : trigger,\n );\n const syncTheme = () => {\n let motionAncestor: HTMLElement | null = trigger;\n while (motionAncestor && !motionAncestor.hasAttribute('data-leaf-motion'))\n motionAncestor = composedParent(motionAncestor);\n setInheritedMotion(motionAncestor?.getAttribute('data-leaf-motion') ?? undefined);\n const variables = readThemeVariables(trigger);\n if (resetSurfaceGeometry) {\n // Navigation triggers define their own inset surface. The popup solves\n // its geometry independently while keeping scoped theme paint/shadows.\n for (const key of Object.keys(variables)) {\n if (\n /^--leaf-surface-(?:radius$|border$|padding(?:-|$)|inner-)/.test(key) ||\n key === '--leaf-floating-option-radius'\n ) {\n delete variables[key as `--leaf-${string}`];\n }\n }\n }\n setTheme(variables);\n };\n syncTheme();\n const observer = new MutationObserver(syncTheme);\n let ancestor: HTMLElement | null = trigger;\n while (ancestor) {\n observer.observe(ancestor, {\n attributes: true,\n attributeFilter: ['class', 'style', 'data-leaf-theme', 'data-leaf-motion', 'dir'],\n });\n ancestor = composedParent(ancestor);\n }\n return () => observer.disconnect();\n }, [triggerRef, referenceElement, refs.setReference, present, position, resetSurfaceGeometry]);\n\n useBrowserLayoutEffect(() => {\n // A quick reopen can reuse the exit-presence node without remounting autoUpdate.\n if (open && present) void update();\n }, [open, present, update]);\n\n if (!present || typeof document === 'undefined') return null;\n const viewportProps: HTMLAttributes<HTMLDivElement> = {};\n const rootProps = { ...props };\n for (const key of Object.keys(rootProps)) {\n if (key === 'id' || key === 'role' || key === 'tabIndex' || key.startsWith('aria-')) {\n Object.assign(viewportProps, { [key]: rootProps[key as keyof typeof rootProps] });\n delete rootProps[key as keyof typeof rootProps];\n }\n }\n return createPortal(\n <PopupParent.Provider value={popupId}>\n <ScrollbarControl\n {...rootProps}\n ref={setViewportRef}\n rootRef={setPanelRef}\n viewportProps={viewportProps}\n viewportClassName=\"leaf-floating__viewport\"\n role={props.role ?? 'presentation'}\n tabIndex={props.tabIndex ?? -1}\n scrollbarTabIndex={-1}\n data-leaf-owner={owner}\n data-leaf-popup={popupId}\n data-leaf-popup-parent={parentPopup}\n data-leaf-motion={config.theme.motion === false ? 'off' : inheritedMotion}\n data-side={resolvedPlacement.split('-')[0]}\n data-align={resolvedPlacement.split('-')[1] ?? 'center'}\n dir={props.dir ?? theme.direction ?? config.direction}\n lang={props.lang ?? config.locale}\n data-state={open ? 'open' : 'closing'}\n data-positioned={isPositioned || !open}\n aria-hidden={!open || undefined}\n {...inertProps(!open)}\n style={{ ...theme, ...style, ...(open ? floatingStyles : previousPosition.current) }}\n >\n {render\n ? render(open ? children : closingContent.current)\n : open\n ? children\n : closingContent.current}\n </ScrollbarControl>\n </PopupParent.Provider>,\n (typeof container === 'function' ? container() : container) ??\n config.getPopupContainer?.() ??\n document.body,\n );\n}\n\n/** Close a custom floating panel when focus leaves it or Escape is pressed. */\nexport function useFloatingDismiss(\n open: boolean,\n onClose: (reason?: 'escape' | 'outside' | 'focus' | 'tab') => void,\n triggerRef: RefObject<HTMLElement | null>,\n panelRef: RefObject<HTMLElement | null>,\n boundaryRef: RefObject<HTMLElement | null> = triggerRef,\n) {\n const closeRef = useRef(onClose);\n closeRef.current = onClose;\n useEffect(() => {\n if (!open) {\n return;\n }\n dismissStack.push(panelRef);\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.composedPath()[0] ?? event.target;\n if (!(target instanceof Node)) {\n return;\n }\n const label = target instanceof Element ? target.closest('label') : null;\n const labelledControl = label?.control;\n if (\n boundaryRef.current?.contains(target) ||\n insidePopup(target, panelRef.current) ||\n (labelledControl && boundaryRef.current?.contains(labelledControl))\n ) {\n return;\n }\n closeRef.current('outside');\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || dismissStack.at(-1) !== panelRef) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeRef.current('escape');\n triggerRef.current?.focus();\n } else if (event.key === 'Tab') {\n const panel = panelRef.current;\n const trigger = triggerRef.current;\n const active = deepActiveElement();\n if (!panel || !trigger || !panel.contains(active)) return;\n const items = tabbable(panel, {\n getShadowRoot: (element) => element.shadowRoot ?? undefined,\n });\n const index = active instanceof HTMLElement ? items.indexOf(active) : -1;\n const leaving = event.shiftKey ? index <= 0 : index === items.length - 1;\n if (!leaving) return;\n event.preventDefault();\n closeRef.current('tab');\n if (event.shiftKey) trigger.focus();\n else {\n const pageItems = tabbable(document.body, {\n getShadowRoot: (element) => element.shadowRoot ?? undefined,\n }).filter((item) => !panel.contains(item));\n const triggerIndex = pageItems.indexOf(trigger);\n (pageItems[triggerIndex + 1] ?? trigger).focus();\n }\n }\n };\n\n const handleFocus = (event: FocusEvent) => {\n const target = composedEventTarget(event);\n if (\n target instanceof Node &&\n !boundaryRef.current?.contains(target) &&\n !insidePopup(target, panelRef.current)\n )\n closeRef.current('focus');\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown, true);\n document.addEventListener('focusin', handleFocus);\n return () => {\n const index = dismissStack.indexOf(panelRef);\n if (index >= 0) dismissStack.splice(index, 1);\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown, true);\n document.removeEventListener('focusin', handleFocus);\n };\n }, [open, panelRef, triggerRef, boundaryRef]);\n}\n\n/** Keep keyboard-highlighted options visible without animated scrolling. */\nexport function useActiveOption(\n open: boolean,\n optionId: string | undefined,\n panelRef?: RefObject<HTMLElement | null>,\n) {\n useEffect(() => {\n if (!open || !optionId) return;\n const root = panelRef?.current?.getRootNode();\n const scope = root instanceof ShadowRoot ? root : document;\n scope.getElementById(optionId)?.scrollIntoView?.({ block: 'nearest' });\n }, [open, optionId, panelRef]);\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","PopupParent","createContext","undefined","popupNodes","Map","dismissStack","insidePopup","target","panel","boundary","popup","Element","visited","Set","parent","usePopupState","disabled","onOpenChange","controlledOpen","defaultOpen","internalOpen","setRequestedOpen","useState","requestedOpen","requestedRef","useRef","open","setOpen","useCallback","next","FloatingPanel","triggerRef","panelRef","matchWidth","width","minWidth","maxWidth","maxHeight","placement","sideFallback","resetSurfaceGeometry","container","render","position","style","children","props","popupId","useId","parentPopup","useContext","config","useLeafConfig","owner","OverlayOwner","floatingRef","present","usePresence","theme","setTheme","inheritedMotion","setInheritedMotion","openRef","previousPosition","closingContent","referenceElement","refs","floatingStyles","isPositioned","update","resolvedPlacement","useFloating","reference","floating","autoUpdate","offset","flip","shift","size","availableHeight","availableWidth","rects","elements","length","value","widthMaximum","heightMaximum","viewportWidth","Math","viewportHeight","widthLimit","Object","setPanelRef","node","assignRef","setViewportRef","trigger","syncTheme","motionAncestor","composedParent","variables","readThemeVariables","key","observer","MutationObserver","ancestor","document","viewportProps","rootProps","createPortal","ScrollbarControl","inertProps","useFloatingDismiss","onClose","boundaryRef","closeRef","handlePointerDown","event","Node","label","labelledControl","handleKeyDown","active","deepActiveElement","items","tabbable","element","index","HTMLElement","leaving","pageItems","item","triggerIndex","handleFocus","composedEventTarget","useActiveOption","optionId","root","scope","ShadowRoot"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-portal.d.ts","sourceRoot":"","sources":["../../../src/shared/scoped-portal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"scoped-portal.d.ts","sourceRoot":"","sources":["../../../src/shared/scoped-portal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAOpE,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,GAAG,gBAAgB,GAAG,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC;CAC7E,+BAuDA"}
|
|
@@ -4,6 +4,7 @@ import { useEffect, useRef, useState } from "react";
|
|
|
4
4
|
import { createPortal } from "react-dom";
|
|
5
5
|
import { useLeafConfig } from "../config-provider/context.js";
|
|
6
6
|
import { composedParent } from "./dom.js";
|
|
7
|
+
import { readThemeVariables } from "./theme-variables.js";
|
|
7
8
|
function ScopedPortal({ children, container }) {
|
|
8
9
|
const config = useLeafConfig();
|
|
9
10
|
const anchor = useRef(null);
|
|
@@ -12,29 +13,7 @@ function ScopedPortal({ children, container }) {
|
|
|
12
13
|
const node = anchor.current;
|
|
13
14
|
if (!node) return;
|
|
14
15
|
const sync = ()=>{
|
|
15
|
-
|
|
16
|
-
const next = {
|
|
17
|
-
colorScheme: computed.colorScheme,
|
|
18
|
-
direction: computed.direction
|
|
19
|
-
};
|
|
20
|
-
const keys = new Set();
|
|
21
|
-
for(let i = 0; i < computed.length; i++){
|
|
22
|
-
const key = computed.item(i);
|
|
23
|
-
if (key.startsWith('--leaf-')) keys.add(key);
|
|
24
|
-
}
|
|
25
|
-
let owner = composedParent(node);
|
|
26
|
-
while(owner){
|
|
27
|
-
for(let i = 0; i < owner.style.length; i++){
|
|
28
|
-
const key = owner.style.item(i);
|
|
29
|
-
if (key.startsWith('--leaf-')) keys.add(key);
|
|
30
|
-
}
|
|
31
|
-
owner = composedParent(owner);
|
|
32
|
-
}
|
|
33
|
-
for (const key of keys){
|
|
34
|
-
const value = computed.getPropertyValue(key);
|
|
35
|
-
if (value.trim()) next[key] = value;
|
|
36
|
-
}
|
|
37
|
-
setStyle(next);
|
|
16
|
+
setStyle(readThemeVariables(composedParent(node) ?? node));
|
|
38
17
|
};
|
|
39
18
|
sync();
|
|
40
19
|
const observer = new MutationObserver(sync);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared/scoped-portal.js","sources":["../../../src/shared/scoped-portal.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useLeafConfig } from '../config-provider/context';\nimport type { LeafThemeStyle } from '../theme';\nimport { composedParent } from './dom';\n\n/** Transfer inherited variables into a portal without moving the React context. */\nexport function ScopedPortal({\n children,\n container,\n}: {\n children: ReactNode;\n container?: Element | DocumentFragment | (() => Element | DocumentFragment);\n}) {\n const config = useLeafConfig();\n const anchor = useRef<HTMLSpanElement>(null);\n const [style, setStyle] = useState<LeafThemeStyle>();\n useEffect(() => {\n const node = anchor.current;\n if (!node) return;\n const sync = () => {\n // Read the owning element; hidden markers can omit inherited custom\n // properties from computed-style enumeration in Firefox.\n
|
|
1
|
+
{"version":3,"file":"shared/scoped-portal.js","sources":["../../../src/shared/scoped-portal.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useLeafConfig } from '../config-provider/context';\nimport type { LeafThemeStyle } from '../theme';\nimport { composedParent } from './dom';\nimport { readThemeVariables } from './theme-variables';\n\n/** Transfer inherited variables into a portal without moving the React context. */\nexport function ScopedPortal({\n children,\n container,\n}: {\n children: ReactNode;\n container?: Element | DocumentFragment | (() => Element | DocumentFragment);\n}) {\n const config = useLeafConfig();\n const anchor = useRef<HTMLSpanElement>(null);\n const [style, setStyle] = useState<LeafThemeStyle>();\n useEffect(() => {\n const node = anchor.current;\n if (!node) return;\n const sync = () => {\n // Read the owning element; hidden markers can omit inherited custom\n // properties from computed-style enumeration in Firefox.\n setStyle(readThemeVariables(composedParent(node) ?? node));\n };\n sync();\n const observer = new MutationObserver(sync);\n let parent: HTMLElement | null = node;\n while (parent) {\n observer.observe(parent, {\n attributes: true,\n attributeFilter: [\n 'style',\n 'class',\n 'data-leaf-theme',\n 'data-leaf-density',\n 'data-leaf-motion',\n 'dir',\n ],\n });\n parent = composedParent(parent);\n }\n return () => observer.disconnect();\n }, []);\n return (\n <>\n <span ref={anchor} hidden />\n {style &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n className=\"leaf-portal-scope\"\n lang={config.locale}\n dir={config.direction}\n data-leaf-density={config.density}\n data-leaf-motion={\n config.theme.motion === undefined ? undefined : config.theme.motion ? 'on' : 'off'\n }\n style={style}\n >\n {children}\n </div>,\n (typeof container === 'function' ? container() : container) ??\n config.getPopupContainer?.() ??\n document.body,\n )}\n </>\n );\n}\n"],"names":["ScopedPortal","children","container","config","useLeafConfig","anchor","useRef","style","setStyle","useState","useEffect","node","sync","readThemeVariables","composedParent","observer","MutationObserver","parent","document","createPortal","undefined"],"mappings":";;;;;;;AAQO,SAASA,aAAa,EAC3BC,QAAQ,EACRC,SAAS,EAIV;IACC,MAAMC,SAASC;IACf,MAAMC,SAASC,OAAwB;IACvC,MAAM,CAACC,OAAOC,SAAS,GAAGC;IAC1BC,UAAU;QACR,MAAMC,OAAON,OAAO,OAAO;QAC3B,IAAI,CAACM,MAAM;QACX,MAAMC,OAAO;YAGXJ,SAASK,mBAAmBC,eAAeH,SAASA;QACtD;QACAC;QACA,MAAMG,WAAW,IAAIC,iBAAiBJ;QACtC,IAAIK,SAA6BN;QACjC,MAAOM,OAAQ;YACbF,SAAS,OAAO,CAACE,QAAQ;gBACvB,YAAY;gBACZ,iBAAiB;oBACf;oBACA;oBACA;oBACA;oBACA;oBACA;iBACD;YACH;YACAA,SAASH,eAAeG;QAC1B;QACA,OAAO,IAAMF,SAAS,UAAU;IAClC,GAAG,EAAE;IACL,OAAO,WAAP,GACE;;0BACE,IAAC;gBAAK,KAAKV;gBAAQ,QAAM;;YACxBE,SACC,AAAoB,MAApB,OAAOW,YAAa,cACpBC,aAAa,WAADA,GACV,IAAC;gBACC,WAAU;gBACV,MAAMhB,OAAO,MAAM;gBACnB,KAAKA,OAAO,SAAS;gBACrB,qBAAmBA,OAAO,OAAO;gBACjC,oBACEA,AAAwBiB,WAAxBjB,OAAO,KAAK,CAAC,MAAM,GAAiBiB,SAAYjB,OAAO,KAAK,CAAC,MAAM,GAAG,OAAO;gBAE/E,OAAOI;0BAENN;gBAEF,CAAqB,cAArB,OAAOC,YAA2BA,cAAcA,SAAQ,KACvDC,OAAO,iBAAiB,QACxBe,SAAS,IAAI;;;AAIzB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { LeafThemeStyle } from '../theme.js';
|
|
2
|
+
/** Snapshot effective theme values, including explicit resets, across a portal boundary. */
|
|
3
|
+
export declare function readThemeVariables(source: HTMLElement): LeafThemeStyle;
|
|
4
|
+
//# sourceMappingURL=theme-variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-variables.d.ts","sourceRoot":"","sources":["../../../src/shared/theme-variables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CA4BtE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { composedParent } from "./dom.js";
|
|
3
|
+
function readThemeVariables(source) {
|
|
4
|
+
const computed = getComputedStyle(source);
|
|
5
|
+
const variables = {
|
|
6
|
+
colorScheme: computed.colorScheme,
|
|
7
|
+
direction: computed.direction
|
|
8
|
+
};
|
|
9
|
+
const keys = new Set();
|
|
10
|
+
for(let index = 0; index < computed.length; index++){
|
|
11
|
+
const key = computed.item(index);
|
|
12
|
+
if (key.startsWith('--leaf-')) keys.add(key);
|
|
13
|
+
}
|
|
14
|
+
let owner = source;
|
|
15
|
+
while(owner){
|
|
16
|
+
for(let index = 0; index < owner.style.length; index++){
|
|
17
|
+
const key = owner.style.item(index);
|
|
18
|
+
if (key.startsWith('--leaf-')) keys.add(key);
|
|
19
|
+
}
|
|
20
|
+
owner = composedParent(owner);
|
|
21
|
+
}
|
|
22
|
+
for (const key of keys)variables[key] = computed.getPropertyValue(key) || 'initial';
|
|
23
|
+
return variables;
|
|
24
|
+
}
|
|
25
|
+
export { readThemeVariables };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=theme-variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared/theme-variables.js","sources":["../../../src/shared/theme-variables.ts"],"sourcesContent":["import type { LeafThemeStyle } from '../theme';\nimport { composedParent } from './dom';\n\n/** Snapshot effective theme values, including explicit resets, across a portal boundary. */\nexport function readThemeVariables(source: HTMLElement): LeafThemeStyle {\n const computed = getComputedStyle(source);\n const variables: LeafThemeStyle = {\n colorScheme: computed.colorScheme,\n direction: computed.direction as LeafThemeStyle['direction'],\n };\n const keys = new Set<string>();\n for (let index = 0; index < computed.length; index++) {\n const key = computed.item(index);\n if (key.startsWith('--leaf-')) keys.add(key);\n }\n // Engines can omit inherited or guaranteed-invalid custom properties from\n // enumeration. Provider resets are inline, so include the composed ancestry.\n let owner: HTMLElement | null = source;\n while (owner) {\n for (let index = 0; index < owner.style.length; index++) {\n const key = owner.style.item(index);\n if (key.startsWith('--leaf-')) keys.add(key);\n }\n owner = composedParent(owner);\n }\n for (const key of keys) {\n // Empty computed values include the guaranteed-invalid value produced by\n // `initial`. Writing '' would remove the inline declaration in React and\n // inherit the destination container's theme instead of retaining the reset.\n variables[key as `--leaf-${string}`] = computed.getPropertyValue(key) || 'initial';\n }\n return variables;\n}\n"],"names":["readThemeVariables","source","computed","getComputedStyle","variables","keys","Set","index","key","owner","composedParent"],"mappings":";;AAIO,SAASA,mBAAmBC,MAAmB;IACpD,MAAMC,WAAWC,iBAAiBF;IAClC,MAAMG,YAA4B;QAChC,aAAaF,SAAS,WAAW;QACjC,WAAWA,SAAS,SAAS;IAC/B;IACA,MAAMG,OAAO,IAAIC;IACjB,IAAK,IAAIC,QAAQ,GAAGA,QAAQL,SAAS,MAAM,EAAEK,QAAS;QACpD,MAAMC,MAAMN,SAAS,IAAI,CAACK;QAC1B,IAAIC,IAAI,UAAU,CAAC,YAAYH,KAAK,GAAG,CAACG;IAC1C;IAGA,IAAIC,QAA4BR;IAChC,MAAOQ,MAAO;QACZ,IAAK,IAAIF,QAAQ,GAAGA,QAAQE,MAAM,KAAK,CAAC,MAAM,EAAEF,QAAS;YACvD,MAAMC,MAAMC,MAAM,KAAK,CAAC,IAAI,CAACF;YAC7B,IAAIC,IAAI,UAAU,CAAC,YAAYH,KAAK,GAAG,CAACG;QAC1C;QACAC,QAAQC,eAAeD;IACzB;IACA,KAAK,MAAMD,OAAOH,KAIhBD,SAAS,CAACI,IAA0B,GAAGN,SAAS,gBAAgB,CAACM,QAAQ;IAE3E,OAAOJ;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"splitter.d.ts","sourceRoot":"","sources":["../../../src/splitter/splitter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"splitter.d.ts","sourceRoot":"","sources":["../../../src/splitter/splitter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAS/E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACrF,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACvC;AACD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,+BA0K/C;AACD,eAAO,MAAM,eAAe,iBAAW,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useEffect, useRef } from "react";
|
|
4
4
|
import { useComponentProps } from "../config-provider/component-defaults.js";
|
|
5
5
|
import { useLeafConfig } from "../config-provider/context.js";
|
|
6
|
+
import { ScrollbarControl } from "../scrollbar/scrollbar.js";
|
|
6
7
|
import { classes } from "../shared/classes.js";
|
|
7
8
|
import { inertProps } from "../shared/inert.js";
|
|
8
9
|
import { useControllable } from "../shared/use-controllable.js";
|
|
@@ -68,8 +69,10 @@ function Splitter(rawProps) {
|
|
|
68
69
|
display: 'contents'
|
|
69
70
|
},
|
|
70
71
|
children: [
|
|
71
|
-
/*#__PURE__*/ jsx(
|
|
72
|
+
/*#__PURE__*/ jsx(ScrollbarControl, {
|
|
72
73
|
className: "leaf-splitter__panel",
|
|
74
|
+
role: "presentation",
|
|
75
|
+
tabIndex: -1,
|
|
73
76
|
"data-collapsed": 0 === normalized[index] || void 0,
|
|
74
77
|
...inertProps(0 === normalized[index]),
|
|
75
78
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"splitter/splitter.js","sources":["../../../src/splitter/splitter.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, useEffect, useRef } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { classes } from '../shared/classes';\nimport { inertProps } from '../shared/inert';\nimport { useControllable } from '../shared/use-controllable';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { useText } from '../shared/use-text';\nexport interface SplitterPanel {\n key: string;\n children: ReactNode;\n min?: number;\n max?: number;\n collapsible?: boolean;\n resizable?: boolean;\n}\nexport interface SplitterProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onResize'> {\n panels: readonly SplitterPanel[];\n sizes?: readonly number[];\n defaultSizes?: readonly number[];\n onResize?: (sizes: number[]) => void;\n onResizeEnd?: (sizes: number[]) => void;\n direction?: 'horizontal' | 'vertical';\n}\nexport function Splitter(rawProps: SplitterProps) {\n const {\n panels,\n sizes,\n defaultSizes,\n onResize,\n onResizeEnd,\n direction = 'horizontal',\n className,\n style,\n ...props\n } = useComponentProps('Splitter', rawProps);\n const t = useText();\n const format = useFormattedText();\n const config = useLeafConfig();\n const root = useRef<HTMLDivElement>(null);\n const [current, setCurrent] = useControllable<readonly number[]>(\n sizes,\n defaultSizes ?? panels.map(() => 100 / Math.max(1, panels.length)),\n (next) => onResize?.([...next]),\n );\n const sum = current.reduce(\n (total, value) => total + (Number.isFinite(value) ? Math.max(0, value) : 0),\n 0,\n );\n const normalized =\n panels.length === current.length && sum > 0\n ? current.map((value) => (Math.max(0, value) * 100) / sum)\n : panels.map(() => 100 / Math.max(1, panels.length));\n const latest = useRef<readonly number[]>(normalized);\n latest.current = normalized;\n const stopDragging = useRef<(() => void) | undefined>(undefined);\n useEffect(() => () => stopDragging.current?.(), []);\n const collapsed = useRef(new Map<number, number>());\n const horizontal = direction === 'horizontal';\n const pair = (index: number, amount: number, source: readonly number[] = latest.current) => {\n const next = [...source];\n const total = (source[index] ?? 0) + (source[index + 1] ?? 0);\n const first = panels[index],\n second = panels[index + 1];\n if (!first || !second) return;\n const low = Math.max(first.min ?? 5, total - (second.max ?? 100));\n const high = Math.min(first.max ?? 100, total - (second.min ?? 5));\n if (low > high) return;\n next[index] = Math.min(high, Math.max(low, (source[index] ?? 0) + amount));\n next[index + 1] = total - (next[index] ?? 0);\n latest.current = next;\n setCurrent(next);\n };\n const toggle = (index: number) => {\n const next = [...latest.current],\n size = next[index] ?? 0;\n if (size) {\n collapsed.current.set(index, size);\n next[index + 1] = (next[index + 1] ?? 0) + size;\n next[index] = 0;\n } else {\n const restore = Math.min(\n collapsed.current.get(index) ?? 25,\n Math.max(0, (next[index + 1] ?? 0) - (panels[index + 1]?.min ?? 5)),\n );\n next[index] = restore;\n next[index + 1] = (next[index + 1] ?? 0) - restore;\n }\n latest.current = next;\n setCurrent(next);\n onResizeEnd?.(next);\n };\n return (\n <div\n {...props}\n ref={root}\n className={classes('leaf-splitter', `leaf-splitter--${direction}`, className)}\n style={style}\n >\n {panels.map((panel, index) => (\n <div key={panel.key} className=\"leaf-splitter__unit\" style={{ display: 'contents' }}>\n <div\n className=\"leaf-splitter__panel\"\n data-collapsed={normalized[index] === 0 || undefined}\n {...inertProps(normalized[index] === 0)}\n style={{ flexBasis: `${normalized[index] ?? 0}%`, flexGrow: 0, flexShrink: 1 }}\n >\n {panel.children}\n </div>\n {index < panels.length - 1 && (\n // biome-ignore lint/a11y/useSemanticElements: An adjustable, focusable splitter follows the ARIA window-splitter pattern; a static hr cannot contain its collapse button.\n <div\n role=\"separator\"\n tabIndex={panel.resizable === false ? -1 : 0}\n aria-label={format('splitter.resizePanel', { index: index + 1 })}\n aria-orientation={horizontal ? 'vertical' : 'horizontal'}\n aria-valuenow={Math.round(current[index] ?? 0)}\n aria-valuemin={panel.min ?? 0}\n aria-valuemax={panel.max ?? 100}\n className=\"leaf-splitter__handle\"\n onPointerDown={(event) => {\n if (panel.resizable === false || !root.current) return;\n stopDragging.current?.();\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n const start = horizontal ? event.clientX : event.clientY;\n const source = [...latest.current];\n const rect = root.current.getBoundingClientRect();\n const length = horizontal ? rect.width : rect.height;\n const move = (event: PointerEvent) =>\n pair(\n index,\n (((horizontal ? event.clientX : event.clientY) - start) / Math.max(1, length)) *\n 100 *\n (horizontal && config.direction === 'rtl' ? -1 : 1),\n source,\n );\n const cleanup = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', end);\n window.removeEventListener('pointercancel', end);\n };\n const end = () => {\n cleanup();\n onResizeEnd?.([...latest.current]);\n };\n stopDragging.current = cleanup;\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', end, { once: true });\n window.addEventListener('pointercancel', end, { once: true });\n }}\n onDoubleClick={() => {\n if (panel.collapsible) toggle(index);\n }}\n onKeyDown={(event) => {\n const plus = horizontal\n ? config.direction === 'rtl'\n ? 'ArrowLeft'\n : 'ArrowRight'\n : 'ArrowDown';\n const minus = horizontal\n ? config.direction === 'rtl'\n ? 'ArrowRight'\n : 'ArrowLeft'\n : 'ArrowUp';\n if (event.key === plus || event.key === minus) {\n event.preventDefault();\n pair(index, (event.key === plus ? 1 : -1) * (event.shiftKey ? 10 : 2));\n onResizeEnd?.([...latest.current]);\n }\n if (event.key === 'Enter' && panel.collapsible) {\n event.preventDefault();\n toggle(index);\n }\n }}\n >\n {panel.collapsible && (\n <button\n type=\"button\"\n aria-label={t('splitter.togglePanel')}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={() => toggle(index)}\n >\n {current[index] === 0 ? '+' : '−'}\n </button>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\nexport const ResizablePanels = Splitter;\n"],"names":["Splitter","rawProps","panels","sizes","defaultSizes","onResize","onResizeEnd","direction","className","style","props","useComponentProps","t","useText","format","useFormattedText","config","useLeafConfig","root","useRef","current","setCurrent","useControllable","Math","next","sum","total","value","Number","normalized","latest","stopDragging","undefined","useEffect","collapsed","Map","horizontal","pair","index","amount","source","first","second","low","high","toggle","size","restore","classes","panel","inertProps","event","start","rect","length","move","cleanup","window","end","plus","minus","ResizablePanels"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"splitter/splitter.js","sources":["../../../src/splitter/splitter.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, useEffect, useRef } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { inertProps } from '../shared/inert';\nimport { useControllable } from '../shared/use-controllable';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { useText } from '../shared/use-text';\nexport interface SplitterPanel {\n key: string;\n children: ReactNode;\n min?: number;\n max?: number;\n collapsible?: boolean;\n resizable?: boolean;\n}\nexport interface SplitterProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onResize'> {\n panels: readonly SplitterPanel[];\n sizes?: readonly number[];\n defaultSizes?: readonly number[];\n onResize?: (sizes: number[]) => void;\n onResizeEnd?: (sizes: number[]) => void;\n direction?: 'horizontal' | 'vertical';\n}\nexport function Splitter(rawProps: SplitterProps) {\n const {\n panels,\n sizes,\n defaultSizes,\n onResize,\n onResizeEnd,\n direction = 'horizontal',\n className,\n style,\n ...props\n } = useComponentProps('Splitter', rawProps);\n const t = useText();\n const format = useFormattedText();\n const config = useLeafConfig();\n const root = useRef<HTMLDivElement>(null);\n const [current, setCurrent] = useControllable<readonly number[]>(\n sizes,\n defaultSizes ?? panels.map(() => 100 / Math.max(1, panels.length)),\n (next) => onResize?.([...next]),\n );\n const sum = current.reduce(\n (total, value) => total + (Number.isFinite(value) ? Math.max(0, value) : 0),\n 0,\n );\n const normalized =\n panels.length === current.length && sum > 0\n ? current.map((value) => (Math.max(0, value) * 100) / sum)\n : panels.map(() => 100 / Math.max(1, panels.length));\n const latest = useRef<readonly number[]>(normalized);\n latest.current = normalized;\n const stopDragging = useRef<(() => void) | undefined>(undefined);\n useEffect(() => () => stopDragging.current?.(), []);\n const collapsed = useRef(new Map<number, number>());\n const horizontal = direction === 'horizontal';\n const pair = (index: number, amount: number, source: readonly number[] = latest.current) => {\n const next = [...source];\n const total = (source[index] ?? 0) + (source[index + 1] ?? 0);\n const first = panels[index],\n second = panels[index + 1];\n if (!first || !second) return;\n const low = Math.max(first.min ?? 5, total - (second.max ?? 100));\n const high = Math.min(first.max ?? 100, total - (second.min ?? 5));\n if (low > high) return;\n next[index] = Math.min(high, Math.max(low, (source[index] ?? 0) + amount));\n next[index + 1] = total - (next[index] ?? 0);\n latest.current = next;\n setCurrent(next);\n };\n const toggle = (index: number) => {\n const next = [...latest.current],\n size = next[index] ?? 0;\n if (size) {\n collapsed.current.set(index, size);\n next[index + 1] = (next[index + 1] ?? 0) + size;\n next[index] = 0;\n } else {\n const restore = Math.min(\n collapsed.current.get(index) ?? 25,\n Math.max(0, (next[index + 1] ?? 0) - (panels[index + 1]?.min ?? 5)),\n );\n next[index] = restore;\n next[index + 1] = (next[index + 1] ?? 0) - restore;\n }\n latest.current = next;\n setCurrent(next);\n onResizeEnd?.(next);\n };\n return (\n <div\n {...props}\n ref={root}\n className={classes('leaf-splitter', `leaf-splitter--${direction}`, className)}\n style={style}\n >\n {panels.map((panel, index) => (\n <div key={panel.key} className=\"leaf-splitter__unit\" style={{ display: 'contents' }}>\n <ScrollbarControl\n className=\"leaf-splitter__panel\"\n role=\"presentation\"\n tabIndex={-1}\n data-collapsed={normalized[index] === 0 || undefined}\n {...inertProps(normalized[index] === 0)}\n style={{ flexBasis: `${normalized[index] ?? 0}%`, flexGrow: 0, flexShrink: 1 }}\n >\n {panel.children}\n </ScrollbarControl>\n {index < panels.length - 1 && (\n // biome-ignore lint/a11y/useSemanticElements: An adjustable, focusable splitter follows the ARIA window-splitter pattern; a static hr cannot contain its collapse button.\n <div\n role=\"separator\"\n tabIndex={panel.resizable === false ? -1 : 0}\n aria-label={format('splitter.resizePanel', { index: index + 1 })}\n aria-orientation={horizontal ? 'vertical' : 'horizontal'}\n aria-valuenow={Math.round(current[index] ?? 0)}\n aria-valuemin={panel.min ?? 0}\n aria-valuemax={panel.max ?? 100}\n className=\"leaf-splitter__handle\"\n onPointerDown={(event) => {\n if (panel.resizable === false || !root.current) return;\n stopDragging.current?.();\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n const start = horizontal ? event.clientX : event.clientY;\n const source = [...latest.current];\n const rect = root.current.getBoundingClientRect();\n const length = horizontal ? rect.width : rect.height;\n const move = (event: PointerEvent) =>\n pair(\n index,\n (((horizontal ? event.clientX : event.clientY) - start) / Math.max(1, length)) *\n 100 *\n (horizontal && config.direction === 'rtl' ? -1 : 1),\n source,\n );\n const cleanup = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', end);\n window.removeEventListener('pointercancel', end);\n };\n const end = () => {\n cleanup();\n onResizeEnd?.([...latest.current]);\n };\n stopDragging.current = cleanup;\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', end, { once: true });\n window.addEventListener('pointercancel', end, { once: true });\n }}\n onDoubleClick={() => {\n if (panel.collapsible) toggle(index);\n }}\n onKeyDown={(event) => {\n const plus = horizontal\n ? config.direction === 'rtl'\n ? 'ArrowLeft'\n : 'ArrowRight'\n : 'ArrowDown';\n const minus = horizontal\n ? config.direction === 'rtl'\n ? 'ArrowRight'\n : 'ArrowLeft'\n : 'ArrowUp';\n if (event.key === plus || event.key === minus) {\n event.preventDefault();\n pair(index, (event.key === plus ? 1 : -1) * (event.shiftKey ? 10 : 2));\n onResizeEnd?.([...latest.current]);\n }\n if (event.key === 'Enter' && panel.collapsible) {\n event.preventDefault();\n toggle(index);\n }\n }}\n >\n {panel.collapsible && (\n <button\n type=\"button\"\n aria-label={t('splitter.togglePanel')}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={() => toggle(index)}\n >\n {current[index] === 0 ? '+' : '−'}\n </button>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\nexport const ResizablePanels = Splitter;\n"],"names":["Splitter","rawProps","panels","sizes","defaultSizes","onResize","onResizeEnd","direction","className","style","props","useComponentProps","t","useText","format","useFormattedText","config","useLeafConfig","root","useRef","current","setCurrent","useControllable","Math","next","sum","total","value","Number","normalized","latest","stopDragging","undefined","useEffect","collapsed","Map","horizontal","pair","index","amount","source","first","second","low","high","toggle","size","restore","classes","panel","ScrollbarControl","inertProps","event","start","rect","length","move","cleanup","window","end","plus","minus","ResizablePanels"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root,:host{--leaf-color-option-hover: #ebebeb;--leaf-color-border-alpha-55: rgba(229, 229, 232, 0.55);--leaf-color-border-surface-35: #f6f6f7;--leaf-color-border-surface-70: #ededef;--leaf-color-border-text-muted-65: #b9b9be;--leaf-color-danger-alpha-10: rgba(200, 60, 60, 0.1);--leaf-color-danger-alpha-15: rgba(200, 60, 60, 0.15);--leaf-color-danger-alpha-18: rgba(200, 60, 60, 0.18);--leaf-color-danger-alpha-25: rgba(200, 60, 60, 0.25);--leaf-color-danger-alpha-42: rgba(200, 60, 60, 0.42);--leaf-color-danger-alpha-7: rgba(200, 60, 60, 0.07);--leaf-color-danger-alpha-8: rgba(200, 60, 60, 0.08);--leaf-color-danger-border-12: #e2d1d3;--leaf-color-danger-surface-5: #fcf5f5;--leaf-color-info-alpha-10: rgba(22, 119, 255, 0.1);--leaf-color-info-alpha-15: rgba(22, 119, 255, 0.15);--leaf-color-info-alpha-8: rgba(22, 119, 255, 0.08);--leaf-color-info-border-12: #ccd8eb;--leaf-color-info-surface-5: #f3f8ff;--leaf-color-primary-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-primary-alpha-18: rgba(32, 131, 74, 0.18);--leaf-color-primary-alpha-25: rgba(32, 131, 74, 0.25);--leaf-color-primary-alpha-42: rgba(32, 131, 74, 0.42);--leaf-color-primary-surface-9: #ebf4ef;--leaf-color-success-alpha-10: rgba(32, 131, 74, 0.1);--leaf-color-success-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-success-alpha-8: rgba(32, 131, 74, 0.08);--leaf-color-success-border-12: #cdd9d5;--leaf-color-success-surface-5: #f4f9f6;--leaf-color-surface-text-98: #fbfbfb;--leaf-color-text-alpha-10: rgba(32, 32, 36, 0.1);--leaf-color-text-alpha-15: rgba(32, 32, 36, 0.15);--leaf-color-text-alpha-8: rgba(32, 32, 36, 0.08);--leaf-color-text-border-12: #cdcdd0;--leaf-color-text-muted-surface-92: #74747b;--leaf-color-text-surface-5: #f4f4f4;--leaf-color-warning-alpha-10: rgba(250, 173, 20, 0.1);--leaf-color-warning-alpha-15: rgba(250, 173, 20, 0.15);--leaf-color-warning-alpha-8: rgba(250, 173, 20, 0.08);--leaf-color-warning-border-12: #e8decf;--leaf-color-warning-surface-5: #fffbf3;--leaf-color-text-subtle: #74747b;--leaf-color-surface-raised: #fbfbfb;--leaf-color-border-hover: #b9b9be;--leaf-color-on-warning: #202024;--leaf-color-primary-hover: #26864f;--leaf-color-primary-active: #1b6f3f;--leaf-color-danger-hover: #cb4848;--leaf-color-danger-active: #aa3333;--leaf-color-primary: #20834a;--leaf-color-on-primary: #ffffff;--leaf-color-danger: #c83c3c;--leaf-color-on-danger: #ffffff;--leaf-color-warning: #faad14;--leaf-color-info: #1677ff;--leaf-color-success: #20834a;--leaf-control-height: 36px;--leaf-density-form-gap: 24px;--leaf-density-label-gap: 6px;--leaf-density-row-padding: 12px;--leaf-density-option-height: max(24px, calc(var(--leaf-control-height) - 4px));--leaf-density-option-padding: 6px;--leaf-density-field-padding: 10px;--leaf-density-dialog-block: 20px;--leaf-density-dialog-inline: 24px;--leaf-density-dialog-gap: 16px;--leaf-z-index-popup: 1000;--leaf-z-index-modal: 1100;--leaf-z-index-message: 1200;--leaf-color-text: #202024;--leaf-color-text-muted: #68686f;--leaf-color-surface: #ffffff;--leaf-color-surface-muted: #f6f6f7;--leaf-color-border: #e5e5e8;--leaf-radius: 10px;--leaf-radius-sm: calc(var(--leaf-radius) * 0.6);--leaf-radius-md: calc(var(--leaf-radius) * 1.2);--leaf-radius-lg: calc(var(--leaf-radius) * 1.6);--leaf-choice-radius: calc(var(--leaf-radius) * 0.5);--leaf-font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;--leaf-font-size: 14px;--leaf-font-size-sm: max(1px, calc(var(--leaf-font-size) - 1px));--leaf-font-size-lg: calc(var(--leaf-font-size) + 2px);--leaf-font-weight: 500;--leaf-motion-duration: 200ms;--leaf-motion-easing: cubic-bezier(0.22, 1, 0.36, 1);--leaf-motion-spring: cubic-bezier(0.22, 1.28, 0.36, 1);--leaf-motion-play-state: running}[data-leaf-theme=light]{--leaf-color-option-hover: #ebebeb;--leaf-color-border-alpha-55: rgba(229, 229, 232, 0.55);--leaf-color-border-surface-35: #f6f6f7;--leaf-color-border-surface-70: #ededef;--leaf-color-border-text-muted-65: #b9b9be;--leaf-color-danger-alpha-10: rgba(200, 60, 60, 0.1);--leaf-color-danger-alpha-15: rgba(200, 60, 60, 0.15);--leaf-color-danger-alpha-18: rgba(200, 60, 60, 0.18);--leaf-color-danger-alpha-25: rgba(200, 60, 60, 0.25);--leaf-color-danger-alpha-42: rgba(200, 60, 60, 0.42);--leaf-color-danger-alpha-7: rgba(200, 60, 60, 0.07);--leaf-color-danger-alpha-8: rgba(200, 60, 60, 0.08);--leaf-color-danger-border-12: #e2d1d3;--leaf-color-danger-surface-5: #fcf5f5;--leaf-color-info-alpha-10: rgba(22, 119, 255, 0.1);--leaf-color-info-alpha-15: rgba(22, 119, 255, 0.15);--leaf-color-info-alpha-8: rgba(22, 119, 255, 0.08);--leaf-color-info-border-12: #ccd8eb;--leaf-color-info-surface-5: #f3f8ff;--leaf-color-primary-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-primary-alpha-18: rgba(32, 131, 74, 0.18);--leaf-color-primary-alpha-25: rgba(32, 131, 74, 0.25);--leaf-color-primary-alpha-42: rgba(32, 131, 74, 0.42);--leaf-color-primary-surface-9: #ebf4ef;--leaf-color-success-alpha-10: rgba(32, 131, 74, 0.1);--leaf-color-success-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-success-alpha-8: rgba(32, 131, 74, 0.08);--leaf-color-success-border-12: #cdd9d5;--leaf-color-success-surface-5: #f4f9f6;--leaf-color-surface-text-98: #fbfbfb;--leaf-color-text-alpha-10: rgba(32, 32, 36, 0.1);--leaf-color-text-alpha-15: rgba(32, 32, 36, 0.15);--leaf-color-text-alpha-8: rgba(32, 32, 36, 0.08);--leaf-color-text-border-12: #cdcdd0;--leaf-color-text-muted-surface-92: #74747b;--leaf-color-text-surface-5: #f4f4f4;--leaf-color-warning-alpha-10: rgba(250, 173, 20, 0.1);--leaf-color-warning-alpha-15: rgba(250, 173, 20, 0.15);--leaf-color-warning-alpha-8: rgba(250, 173, 20, 0.08);--leaf-color-warning-border-12: #e8decf;--leaf-color-warning-surface-5: #fffbf3;--leaf-color-text-subtle: #74747b;--leaf-color-surface-raised: #fbfbfb;--leaf-color-border-hover: #b9b9be;--leaf-color-on-warning: #202024;--leaf-color-primary-hover: #26864f;--leaf-color-primary-active: #1b6f3f;--leaf-color-danger-hover: #cb4848;--leaf-color-danger-active: #aa3333;--leaf-color-primary: #20834a;--leaf-color-on-primary: #ffffff;--leaf-color-danger: #c83c3c;--leaf-color-on-danger: #ffffff;--leaf-color-success: #20834a;--leaf-color-warning: #faad14;--leaf-color-info: #1677ff;color-scheme:light;--leaf-color-text: #202024;--leaf-color-text-muted: #68686f;--leaf-color-surface: #ffffff;--leaf-color-surface-muted: #f6f6f7;--leaf-color-border: #e5e5e8}[data-leaf-theme=dark]{--leaf-color-option-hover: #2f2f33;--leaf-color-border-alpha-55: rgba(56, 56, 63, 0.55);--leaf-color-border-surface-35: #26262b;--leaf-color-border-surface-70: #303036;--leaf-color-border-text-muted-65: #5e5e66;--leaf-color-danger-alpha-10: rgba(239, 133, 133, 0.1);--leaf-color-danger-alpha-15: rgba(239, 133, 133, 0.15);--leaf-color-danger-alpha-18: rgba(239, 133, 133, 0.18);--leaf-color-danger-alpha-25: rgba(239, 133, 133, 0.25);--leaf-color-danger-alpha-42: rgba(239, 133, 133, 0.42);--leaf-color-danger-alpha-7: rgba(239, 133, 133, 0.07);--leaf-color-danger-alpha-8: rgba(239, 133, 133, 0.08);--leaf-color-danger-border-12: #4e4147;--leaf-color-danger-surface-5: #272125;--leaf-color-info-alpha-10: rgba(105, 177, 255, 0.1);--leaf-color-info-alpha-15: rgba(105, 177, 255, 0.15);--leaf-color-info-alpha-8: rgba(105, 177, 255, 0.08);--leaf-color-info-border-12: #3e4756;--leaf-color-info-surface-5: #20232b;--leaf-color-primary-alpha-15: rgba(131, 207, 158, 0.15);--leaf-color-primary-alpha-18: rgba(131, 207, 158, 0.18);--leaf-color-primary-alpha-25: rgba(131, 207, 158, 0.25);--leaf-color-primary-alpha-42: rgba(131, 207, 158, 0.42);--leaf-color-primary-surface-9: #252c2b;--leaf-color-success-alpha-10: rgba(131, 207, 158, 0.1);--leaf-color-success-alpha-15: rgba(131, 207, 158, 0.15);--leaf-color-success-alpha-8: rgba(131, 207, 158, 0.08);--leaf-color-success-border-12: #414a4a;--leaf-color-success-surface-5: #212526;--leaf-color-surface-text-98: #202024;--leaf-color-text-alpha-10: rgba(237, 237, 240, 0.1);--leaf-color-text-alpha-15: rgba(237, 237, 240, 0.15);--leaf-color-text-alpha-8: rgba(237, 237, 240, 0.08);--leaf-color-text-border-12: #4e4e54;--leaf-color-text-muted-surface-92: #9a9aa3;--leaf-color-text-surface-5: #26262a;--leaf-color-warning-alpha-10: rgba(255, 197, 61, 0.1);--leaf-color-warning-alpha-15: rgba(255, 197, 61, 0.15);--leaf-color-warning-alpha-8: rgba(255, 197, 61, 0.08);--leaf-color-warning-border-12: #50493f;--leaf-color-warning-surface-5: #272421;--leaf-color-text-subtle: #9a9aa3;--leaf-color-surface-raised: #202024;--leaf-color-border-hover: #5e5e66;--leaf-color-on-warning: #202024;--leaf-color-primary-hover: #8fd4a8;--leaf-color-primary-active: #6fb086;--leaf-color-danger-hover: #f19191;--leaf-color-danger-active: #cb7171;--leaf-color-primary: #83cf9e;--leaf-color-on-primary: #11271a;--leaf-color-info: #69b1ff;--leaf-color-success: #83cf9e;--leaf-color-danger: #ef8585;--leaf-color-on-danger: #381818;--leaf-color-warning: #ffc53d;color-scheme:dark;--leaf-color-text: #ededf0;--leaf-color-text-muted: #a5a5ae;--leaf-color-surface: #1c1c20;--leaf-color-surface-muted: #25252b;--leaf-color-border: #38383f}:root,:host{--leaf-spacing: 8px;--leaf-line-height: 1.6;--leaf-heading-weight: 600;--leaf-shadow-xs: 0 1px 2px rgb(0 0 0 / 0.06), 0 0 0 1px rgb(0 0 0 / 0.02);--leaf-shadow-sm: 0 2px 6px rgb(0 0 0 / 0.05), 0 1px 2px rgb(0 0 0 / 0.04);--leaf-shadow-md: 0 8px 24px rgb(0 0 0 / 0.08), 0 2px 6px rgb(0 0 0 / 0.04);--leaf-shadow-lg: 0 20px 60px rgb(0 0 0 / 0.14), 0 4px 12px rgb(0 0 0 / 0.06)}:root,:host,[data-leaf-scope]{--leaf-spacing-xs: calc(var(--leaf-spacing) * 0.5);--leaf-spacing-sm: var(--leaf-spacing);--leaf-spacing-md: calc(var(--leaf-spacing) * 2);--leaf-spacing-lg: calc(var(--leaf-spacing) * 3);--leaf-spacing-xl: calc(var(--leaf-spacing) * 4);--leaf-control-height-sm: max(1px, calc(var(--leaf-control-height) - 6px));--leaf-control-height-lg: calc(var(--leaf-control-height) + 6px);--leaf-motion-fast: calc(var(--leaf-motion-duration) * 0.6);--leaf-motion-slow: calc(var(--leaf-motion-duration) * 1.6);--leaf-color-text-subtle: var(--leaf-color-text-muted-surface-92);--leaf-color-surface-raised: var(--leaf-color-surface-text-98);--leaf-color-border-hover: var(--leaf-color-border-text-muted-65);--leaf-color-divider: var(--leaf-color-border-surface-70)}@keyframes leaf-content-in{from{opacity:0;translate:0 6px}to{opacity:1;translate:0 0}}@keyframes leaf-state-in{from{opacity:0;scale:.92}to{opacity:1;scale:1}}@media(prefers-reduced-motion: reduce){:where([class^=leaf-],[class*=" leaf-"]){animation:none !important;animation-delay:0s !important;transition-duration:0s !important;transition-delay:0s !important;scroll-behavior:auto !important}}.leaf-floating{--leaf-surface-inner-top: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-top) - var(--leaf-surface-border));--leaf-surface-inner-right: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-right) - var(--leaf-surface-border));--leaf-surface-inner-bottom: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-bottom) - var(--leaf-surface-border));--leaf-surface-inner-left: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-left) - var(--leaf-surface-border));--leaf-surface-inner-radius: var(--leaf-surface-inner-left) var(--leaf-surface-inner-right) var(--leaf-surface-inner-right) var(--leaf-surface-inner-left) / var(--leaf-surface-inner-top) var(--leaf-surface-inner-top) var(--leaf-surface-inner-bottom) var(--leaf-surface-inner-bottom);padding:var(--leaf-surface-padding-top) var(--leaf-surface-padding-right) var(--leaf-surface-padding-bottom) var(--leaf-surface-padding-left);border-radius:var(--leaf-surface-radius)}.leaf-floating{--leaf-surface-radius: var(--leaf-component-floating-radius, var(--leaf-radius-lg));--leaf-surface-padding: var(--leaf-component-floating-padding, 6px);--leaf-surface-border: 1px;--leaf-surface-padding-top: var( --leaf-component-floating-padding-top, var(--leaf-surface-padding) );--leaf-surface-padding-right: var( --leaf-component-floating-padding-right, var(--leaf-surface-padding) );--leaf-surface-padding-bottom: var( --leaf-component-floating-padding-bottom, var(--leaf-surface-padding) );--leaf-surface-padding-left: var( --leaf-component-floating-padding-left, var(--leaf-surface-padding) );--leaf-floating-option-radius: var(--leaf-surface-inner-radius);--leaf-popup-x: 0px;--leaf-popup-y: -4px;--leaf-popup-origin-x: center;--leaf-popup-origin-y: top;box-sizing:border-box;position:fixed;z-index:var(--leaf-z-index-popup, 1000);max-width:min(420px,100vw - 24px);max-height:min(360px,100vh - 32px);overflow:auto;border:var(--leaf-surface-border) solid var(--leaf-color-border);color:var(--leaf-color-text);font-family:var(--leaf-font-family);font-size:var(--leaf-font-size);line-height:1.5;background:var(--leaf-color-surface-raised, var(--leaf-color-surface));box-shadow:var(--leaf-shadow-md);overscroll-behavior:contain;opacity:1;translate:0 0;scale:1;transform-origin:var(--leaf-popup-origin-x) var(--leaf-popup-origin-y);transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),translate var(--leaf-motion-slow) var(--leaf-motion-easing),scale var(--leaf-motion-slow) var(--leaf-motion-easing)}.leaf-floating[data-side=top]{--leaf-popup-y: 4px;--leaf-popup-origin-y: bottom}.leaf-floating[data-side=left]{--leaf-popup-x: 6px;--leaf-popup-y: 0px;--leaf-popup-origin-x: right;--leaf-popup-origin-y: center}.leaf-floating[data-side=right]{--leaf-popup-x: -6px;--leaf-popup-y: 0px;--leaf-popup-origin-x: left;--leaf-popup-origin-y: center}@starting-style{.leaf-floating{opacity:0;translate:var(--leaf-popup-x) var(--leaf-popup-y);scale:.985}}.leaf-floating[data-positioned=false]{opacity:0;translate:var(--leaf-popup-x) var(--leaf-popup-y);scale:.985}.leaf-floating[data-state=closing]{pointer-events:none;opacity:0;translate:var(--leaf-popup-x) var(--leaf-popup-y);scale:.98;transition-duration:var(--leaf-motion-duration);transition-timing-function:var(--leaf-motion-easing)}.leaf-floating:focus{outline:none}@media(prefers-reduced-motion: reduce){.leaf-floating,.leaf-floating[data-state=closing]{transition:none}}.leaf-form-value{position:absolute;width:1px;height:1px;padding:0;border:0;clip-path:inset(50%);opacity:0;pointer-events:none}.leaf-floating__option{box-sizing:border-box;display:flex;width:100%;min-height:var(--leaf-density-option-height);align-items:center;gap:8px;padding:var(--leaf-density-option-padding) var(--leaf-density-field-padding);padding-block:min(var(--leaf-density-option-padding),max(0px,(var(--leaf-density-option-height) - 1.4em)/2));border:0;border-radius:var(--leaf-floating-option-radius, var(--leaf-radius-sm));color:inherit;background:rgba(0,0,0,0);font:inherit;line-height:1.4;text-align:start;cursor:pointer;transition:color var(--leaf-motion-fast) var(--leaf-motion-easing),background-color var(--leaf-motion-fast) var(--leaf-motion-easing),box-shadow var(--leaf-motion-fast) var(--leaf-motion-easing)}.leaf-floating__option+.leaf-floating__option{margin-top:2px}.leaf-floating__option:hover:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]),.leaf-floating__option:focus-visible:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]),.leaf-floating__option[data-highlighted=true]:not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]){background:var(--leaf-color-option-hover)}.leaf-floating__option:active:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]){background:var(--leaf-color-option-hover)}.leaf-floating__option[aria-selected=true]{color:var(--leaf-color-primary);font-weight:var(--leaf-font-weight);background:var(--leaf-color-primary-surface-9)}.leaf-floating__option:disabled,.leaf-floating__option[aria-disabled=true]{color:var(--leaf-color-text-muted);cursor:not-allowed;opacity:.55}.leaf-floating__option:focus-visible{outline:2px solid var(--leaf-color-primary);outline-offset:-2px}.leaf-floating__option-label{min-width:0;overflow-wrap:anywhere}.leaf-floating__options{display:flex;flex-direction:column;gap:2px}@media(prefers-reduced-motion: reduce){.leaf-floating__option{transition:none}}.leaf-floating__highlight{position:absolute;top:0;left:0;box-sizing:border-box;width:var(--leaf-option-highlight-width, 0px);height:var(--leaf-option-highlight-height, var(--leaf-density-option-height));translate:var(--leaf-option-highlight-x, 0px) var(--leaf-option-highlight-y, 0px);border:1px solid var(--leaf-color-border-alpha-55);border-radius:var(--leaf-floating-option-radius);background:var(--leaf-color-option-hover);pointer-events:none;transition:translate var(--leaf-motion-duration) var(--leaf-motion-spring),height var(--leaf-motion-fast) var(--leaf-motion-easing),width var(--leaf-motion-fast) var(--leaf-motion-easing),background-color var(--leaf-motion-fast) var(--leaf-motion-easing),border-color var(--leaf-motion-fast) var(--leaf-motion-easing)}.leaf-floating__highlight[data-ready=false],.leaf-floating__highlight[data-hidden]{visibility:hidden}.leaf-floating__highlight[data-selected]{background:var(--leaf-color-primary-surface-9);border-color:var(--leaf-color-primary-alpha-15)}.leaf-floating[data-hover-motion] .leaf-floating__option{position:relative;z-index:1}.leaf-floating[data-hover-motion] .leaf-floating__option:hover:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]),.leaf-floating[data-hover-motion] .leaf-floating__option:focus-visible:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]),.leaf-floating[data-hover-motion] .leaf-floating__option[data-highlighted]:not([aria-disabled=true]):not([aria-selected=true]),.leaf-floating[data-hover-motion] .leaf-floating__option:active:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]){background:rgba(0,0,0,0)}.leaf-floating[data-selection=candidate] .leaf-floating__option[aria-selected=true]{color:inherit;font-weight:inherit;background:rgba(0,0,0,0)}.leaf-floating[data-selection=candidate] .leaf-floating__option[aria-selected=true]:not(:disabled):not([aria-disabled=true]){background:var(--leaf-color-option-hover)}.leaf-floating[data-selection=candidate][data-hover-motion] .leaf-floating__option[aria-selected=true]:not(:disabled):not([aria-disabled=true]){background:rgba(0,0,0,0)}@media(prefers-reduced-motion: reduce){.leaf-floating__highlight{transition:none}}.leaf-floating__empty{padding:12px 10px;color:var(--leaf-color-text-muted);font-size:var(--leaf-font-size-sm);text-align:center}.leaf-floating__empty--feedback{box-sizing:border-box;display:flex;min-height:112px;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px 16px}.leaf-floating__empty--feedback>svg{flex:none}.leaf-floating__empty--feedback>div{min-width:0;max-width:100%;overflow-wrap:anywhere}.leaf-floating__loading-icon{color:var(--leaf-color-primary);animation:var(--leaf-motion-animation, leaf-floating-spin calc(var(--leaf-motion-duration) * 4) linear infinite);animation-play-state:var(--leaf-motion-play-state, running)}@keyframes leaf-floating-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion: reduce){.leaf-floating__loading-icon{animation:none}}.leaf-button{--leaf-button-color: var(--leaf-color-primary);--leaf-button-color-alpha-18: var(--leaf-color-primary-alpha-18);--leaf-button-color-alpha-25: var(--leaf-color-primary-alpha-25);--leaf-button-color-alpha-42: var(--leaf-color-primary-alpha-42);--leaf-button-on-color: var(--leaf-color-on-primary);--leaf-focus-color: var(--leaf-button-color-alpha-42);--leaf-button-hover: var(--leaf-color-primary-hover, var(--leaf-button-color));--leaf-button-active: var(--leaf-color-primary-active, var(--leaf-button-color));--leaf-button-soft-hover: var(--leaf-color-primary-soft-hover, var(--leaf-button-color-alpha-18));--leaf-button-soft-active: var( --leaf-color-primary-soft-active, var(--leaf-button-color-alpha-25) );--leaf-button-border: var(--leaf-color-primary-border, var(--leaf-button-color-alpha-42));box-sizing:border-box;display:inline-flex;position:relative;align-items:center;justify-content:center;gap:var(--leaf-component-button-gap, 6px);min-height:var(--leaf-button-height, var(--leaf-current-control-height));padding:var(--leaf-component-button-padding, 0 calc(var(--leaf-button-height, var(--leaf-current-control-height)) * 0.42));border:1px solid rgba(0,0,0,0);border-radius:var(--leaf-component-button-radius, var(--leaf-button-radius, var(--leaf-radius)));font-family:var(--leaf-font-family);font-size:var(--leaf-component-button-font-size, var(--leaf-current-font-size));font-weight:var(--leaf-font-weight);line-height:1.5;text-decoration:none;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;appearance:none;transition:background-color var(--leaf-motion-duration) var(--leaf-motion-easing),border-color var(--leaf-motion-duration) var(--leaf-motion-easing),color var(--leaf-motion-duration) var(--leaf-motion-easing),box-shadow var(--leaf-motion-duration) var(--leaf-motion-easing),opacity var(--leaf-motion-duration) var(--leaf-motion-easing);--leaf-current-font-size: var(--leaf-font-size);--leaf-current-control-height: var(--leaf-control-height, 36px)}.leaf-button--sm{--leaf-current-control-height: var(--leaf-control-height-sm, 30px);--leaf-current-font-size: var(--leaf-font-size-sm, 12px)}.leaf-button--lg{--leaf-current-control-height: var(--leaf-control-height-lg, 42px);--leaf-current-font-size: var(--leaf-font-size-lg, 16px)}.leaf-button:focus-visible{outline:3px solid var(--leaf-color-focus, var(--leaf-focus-color, var(--leaf-color-primary-alpha-42)));outline-offset:2px}.leaf-button:disabled{cursor:not-allowed;opacity:.45}.leaf-button[data-loading]{cursor:default;opacity:1}.leaf-button__wave{position:absolute;z-index:1;inset:-1px;box-sizing:border-box;border-radius:inherit;color:var(--leaf-button-color);box-shadow:0 0 0 0 currentColor;opacity:0;pointer-events:none}.leaf-button__content{display:inline-flex;align-items:center;justify-content:center;gap:inherit;min-width:0;transition:opacity var(--leaf-motion-fast) var(--leaf-motion-easing),transform var(--leaf-motion-duration) var(--leaf-motion-spring)}.leaf-button__loading{position:absolute;inset:0;display:grid;place-items:center;opacity:0;transform:scale(0.7);pointer-events:none;transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),transform var(--leaf-motion-duration) var(--leaf-motion-spring)}.leaf-button[data-loading] .leaf-button__content{opacity:0;transform:translateY(3px)}.leaf-button[data-loading] .leaf-button__loading{opacity:1;transform:scale(1)}.leaf-button[data-loading] .leaf-button__spinner{animation:var(--leaf-motion-animation, leaf-spin calc(var(--leaf-motion-duration) * 4.5) linear infinite);animation-play-state:var(--leaf-motion-play-state, running)}.leaf-button--danger{--leaf-button-color: var(--leaf-color-danger);--leaf-button-color-alpha-18: var(--leaf-color-danger-alpha-18);--leaf-button-color-alpha-25: var(--leaf-color-danger-alpha-25);--leaf-button-color-alpha-42: var(--leaf-color-danger-alpha-42);--leaf-button-on-color: var(--leaf-color-on-danger);--leaf-button-hover: var(--leaf-color-danger-hover, var(--leaf-button-color));--leaf-button-active: var(--leaf-color-danger-active, var(--leaf-button-color));--leaf-button-soft-hover: var(--leaf-button-color-alpha-18);--leaf-button-soft-active: var(--leaf-button-color-alpha-25);--leaf-button-border: var(--leaf-button-color-alpha-42)}.leaf-button--solid{color:var(--leaf-button-on-color);background:var(--leaf-button-color);border-color:rgba(0,0,0,0);box-shadow:none}.leaf-button--solid:hover:not(:disabled){background:var(--leaf-button-hover)}.leaf-button--solid:active:not(:disabled){background:var(--leaf-button-active);box-shadow:none}.leaf-button--ghost{color:var(--leaf-color-text);background:rgba(0,0,0,0)}.leaf-button--ghost:hover:not(:disabled){background:var(--leaf-color-surface-muted)}.leaf-button--ghost:active:not(:disabled){background:var(--leaf-color-border)}.leaf-button--danger.leaf-button--ghost{color:var(--leaf-button-color)}.leaf-button--danger.leaf-button--ghost:hover:not(:disabled){color:var(--leaf-button-hover);background:var(--leaf-button-soft-hover)}.leaf-button--danger.leaf-button--ghost:active:not(:disabled){color:var(--leaf-button-active);background:var(--leaf-button-soft-active)}.leaf-button--outline{color:var(--leaf-color-text);background:var(--leaf-color-surface);border-color:var(--leaf-component-button-border-color, var(--leaf-color-border));box-shadow:var(--leaf-component-button-shadow, 0 1px 2px rgba(0, 0, 0, 0.04))}.leaf-button--outline:hover:not(:disabled){color:var(--leaf-button-hover);border-color:var(--leaf-button-hover)}.leaf-button--outline:active:not(:disabled){color:var(--leaf-button-active);border-color:var(--leaf-button-active)}.leaf-button--danger.leaf-button--outline{color:var(--leaf-color-danger);border-color:var(--leaf-component-button-border-color, var(--leaf-button-border))}.leaf-button--icon-only{width:var(--leaf-button-height, var(--leaf-current-control-height));padding:0}.leaf-button--full-width{width:100%}.leaf-button--link{align-self:center;min-height:0;padding:0;border:0;border-radius:0;color:var(--leaf-button-color);background:rgba(0,0,0,0);box-shadow:none}.leaf-button--link:hover:not(:disabled){color:var(--leaf-button-hover)}.leaf-button--link:active:not(:disabled){color:var(--leaf-button-active)}.leaf-button--link.leaf-button--icon-only{width:auto}.leaf-button__icon,.leaf-button__spinner{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:16px;height:16px}.leaf-button__icon svg,.leaf-button__spinner svg{width:100%;height:100%}@keyframes leaf-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion: reduce){.leaf-button,.leaf-button__content,.leaf-button__loading{transition:none}.leaf-button[data-loading] .leaf-button__spinner{animation:none}.leaf-button__wave{display:none}}@media(forced-colors: active){.leaf-button__wave{display:none}.leaf-button{border-color:ButtonText}.leaf-button:disabled{color:GrayText;border-color:GrayText}.leaf-button:focus-visible{outline-color:Highlight}}.leaf-button-group{display:inline-flex;align-items:stretch;gap:8px}.leaf-button-group--attached{gap:0}.leaf-button-group--attached>.leaf-button{position:relative}.leaf-button-group--attached>.leaf-button:not(:first-child){border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:-1px}.leaf-button-group--attached>.leaf-button:not(:last-child){border-start-end-radius:0;border-end-end-radius:0}.leaf-button-group--attached>.leaf-button:hover:not(:disabled),.leaf-button-group--attached>.leaf-button:active:not(:disabled),.leaf-button-group--attached>.leaf-button:focus-visible{z-index:1}.leaf-button-group{border:0;padding:0;margin:0;min-width:0}.leaf-split-button{isolation:isolate}.leaf-split-button.leaf-button-group--attached>.leaf-button{z-index:1}.leaf-split-button>.leaf-button--outline{--leaf-split-button-divider-color: var( --leaf-component-button-border-color, var(--leaf-color-border) )}.leaf-split-button>.leaf-button--outline.leaf-button--danger{--leaf-split-button-divider-color: var( --leaf-component-button-border-color, var(--leaf-button-border) )}.leaf-split-button>.leaf-button--outline:first-child{border-inline-end-color:var(--leaf-split-button-divider-color)}.leaf-split-button>.leaf-button--outline:not(:first-child){border-inline-start-color:var(--leaf-split-button-divider-color)}.leaf-split-button>.leaf-button+.leaf-button:not(.leaf-button--outline){margin-inline-start:0}.leaf-split-button>.leaf-button+.leaf-button::before{content:"";position:absolute;z-index:2;inset-block:22%;inset-inline-start:0;width:1px;background:var(--leaf-component-button-border-color, var(--leaf-color-border));pointer-events:none}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--solid::before{background:color-mix(in srgb, var(--leaf-button-on-color) 32%, transparent)}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--outline::before{display:none}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--link{margin-inline-start:8px}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--link::before{inset-inline-start:-4px}@media(forced-colors: active){.leaf-split-button>.leaf-button+.leaf-button::before,.leaf-split-button>.leaf-button+.leaf-button.leaf-button--solid::before{background:ButtonText}}.leaf-button{--leaf-current-control-height: var(--leaf-component-button-height, var(--leaf-control-height));--leaf-current-font-size: var(--leaf-component-button-font-size, var(--leaf-font-size))}.leaf-button--sm{--leaf-current-control-height: var( --leaf-component-button-height-sm, var(--leaf-control-height-sm) );--leaf-current-font-size: var(--leaf-font-size-sm)}.leaf-button--lg{--leaf-current-control-height: var( --leaf-component-button-height-lg, var(--leaf-control-height-lg) );--leaf-current-font-size: var(--leaf-font-size-lg)}.leaf-alert{--leaf-feedback-color: var(--leaf-color-success);--leaf-feedback-color-border-12: var(--leaf-color-success-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-success-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-success-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-success-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-success-alpha-8);display:flex;align-items:flex-start;gap:var(--leaf-component-alert-gap, 12px);color:var(--leaf-component-alert-color, var(--leaf-color-text));font:var(--leaf-font-size)/1.5 var(--leaf-font-family);border-radius:var(--leaf-component-alert-radius, var(--leaf-radius-md));border:1px solid var(--leaf-component-alert-border-color, var(--leaf-color-divider));padding:var(--leaf-component-alert-padding, 14px 16px)}.leaf-alert--info{--leaf-feedback-color: var(--leaf-color-info);--leaf-feedback-color-border-12: var(--leaf-color-info-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-info-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-info-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-info-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-info-alpha-8)}.leaf-alert--warning{--leaf-feedback-color: var(--leaf-color-warning);--leaf-feedback-color-border-12: var(--leaf-color-warning-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-warning-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-warning-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-warning-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-warning-alpha-8)}.leaf-alert--error{--leaf-feedback-color: var(--leaf-color-danger);--leaf-feedback-color-border-12: var(--leaf-color-danger-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-danger-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-danger-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-danger-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-danger-alpha-8)}.leaf-alert{box-sizing:border-box}.leaf-alert:not([data-description]){align-items:center}.leaf-alert{max-height:var(--leaf-alert-height, none);transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),max-height var(--leaf-motion-duration) var(--leaf-motion-easing),padding-block var(--leaf-motion-duration) var(--leaf-motion-easing),border-block-width var(--leaf-motion-duration) var(--leaf-motion-easing),border-color var(--leaf-motion-duration) var(--leaf-motion-easing),background-color var(--leaf-motion-duration) var(--leaf-motion-easing);background:var(--leaf-component-alert-background, var(--leaf-color-surface-muted))}.leaf-alert[data-state=closing]{max-height:0;opacity:0;padding-block:0;border-block-width:0;overflow:hidden;pointer-events:none}.leaf-alert__icon{display:inline-flex;flex:0 0 28px;align-items:center;justify-content:center;height:28px;border-radius:8px;color:var(--leaf-feedback-color);background:rgba(0,0,0,0)}.leaf-alert__content{flex:1;min-width:0}.leaf-alert__title{min-height:0;display:flex;align-items:center;font-weight:var(--leaf-font-weight)}.leaf-alert__description{margin-block-start:2px;color:var(--leaf-color-text-muted);font-size:var(--leaf-font-size-sm)}.leaf-alert__close{align-items:center;justify-content:center;min-width:28px;min-height:28px;transition:color var(--leaf-motion-fast) var(--leaf-motion-easing),background-color var(--leaf-motion-fast) var(--leaf-motion-easing),transform var(--leaf-motion-fast) var(--leaf-motion-spring)}.leaf-alert__close:hover{color:var(--leaf-color-text);background:var(--leaf-color-border-surface-35)}.leaf-alert__close:active{transform:scale(0.88)}@media(prefers-reduced-motion: reduce){.leaf-alert,.leaf-alert__close{transition:none}}.leaf-alert__close,.leaf-message__close{flex-shrink:0;display:inline-flex;border:0;padding:2px;border-radius:4px;background:rgba(0,0,0,0);color:var(--leaf-color-text-muted);cursor:pointer}.leaf-alert__close:focus-visible,.leaf-message__close:focus-visible{outline:2px solid var(--leaf-feedback-color)}.leaf-confirm{--leaf-feedback-color: var(--leaf-color-text);--leaf-feedback-color-border-12: var(--leaf-color-text-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-text-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-text-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-text-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-text-alpha-8)}.leaf-confirm--danger{--leaf-feedback-color: var(--leaf-color-danger);--leaf-feedback-color-border-12: var(--leaf-color-danger-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-danger-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-danger-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-danger-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-danger-alpha-8)}.leaf-confirm--success{--leaf-feedback-color: var(--leaf-color-success);--leaf-feedback-color-border-12: var(--leaf-color-success-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-success-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-success-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-success-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-success-alpha-8)}.leaf-confirm--warning{--leaf-feedback-color: var(--leaf-color-warning);--leaf-feedback-color-border-12: var(--leaf-color-warning-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-warning-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-warning-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-warning-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-warning-alpha-8)}.leaf-confirm--info{--leaf-feedback-color: var(--leaf-color-info);--leaf-feedback-color-border-12: var(--leaf-color-info-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-info-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-info-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-info-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-info-alpha-8)}.leaf-confirm>.leaf-modal__body .leaf-modal__content{padding-block:12px 20px}.leaf-confirm__body{display:flex;align-items:flex-start;gap:12px}.leaf-confirm__content{flex:1;min-width:0}.leaf-confirm__icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;height:24px;color:var(--leaf-feedback-color);scale:1;opacity:1;transition:scale var(--leaf-motion-slow) var(--leaf-motion-spring),opacity var(--leaf-motion-duration) var(--leaf-motion-easing)}@starting-style{.leaf-confirm__icon{scale:.82;opacity:0}}.leaf-confirm__icon>svg{width:24px;height:24px}.leaf-confirm--default .leaf-confirm__icon{color:var(--leaf-color-text-muted)}.leaf-confirm-description{font-size:var(--leaf-component-confirm-font-size, calc(var(--leaf-font-size) + 1px));color:var(--leaf-component-confirm-color, var(--leaf-color-text));line-height:var(--leaf-line-height);overflow-wrap:anywhere}.leaf-confirm-error{margin-block:12px 0;padding:8px 10px;border-radius:var(--leaf-radius-sm);color:var(--leaf-color-danger);background:var(--leaf-color-danger-alpha-7);opacity:1;translate:0 0;transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),translate var(--leaf-motion-duration) var(--leaf-motion-easing)}@starting-style{.leaf-confirm-error{opacity:0;translate:0 4px}}.leaf-feedback-spinner{animation:var(--leaf-motion-animation, leaf-spin calc(var(--leaf-motion-duration) * 4.5) linear infinite);animation-play-state:var(--leaf-motion-play-state, running)}@media(prefers-reduced-motion: reduce){.leaf-confirm__icon,.leaf-confirm-error{transition:none}.leaf-feedback-spinner{animation:none}}
|
|
1
|
+
:root,:host{--leaf-color-primary-ink: #20834a;--leaf-color-primary-indicator: #20834a;--leaf-color-primary-fill-border: transparent;--leaf-color-primary-focus: rgba(32, 131, 74, 0.42);--leaf-color-option-hover: #ebebeb;--leaf-color-border-alpha-55: rgba(229, 229, 232, 0.55);--leaf-color-border-surface-35: #f6f6f7;--leaf-color-border-surface-70: #ededef;--leaf-color-border-text-muted-65: #b9b9be;--leaf-color-danger-alpha-10: rgba(200, 60, 60, 0.1);--leaf-color-danger-alpha-15: rgba(200, 60, 60, 0.15);--leaf-color-danger-alpha-18: rgba(200, 60, 60, 0.18);--leaf-color-danger-alpha-25: rgba(200, 60, 60, 0.25);--leaf-color-danger-alpha-42: rgba(200, 60, 60, 0.42);--leaf-color-danger-alpha-7: rgba(200, 60, 60, 0.07);--leaf-color-danger-alpha-8: rgba(200, 60, 60, 0.08);--leaf-color-danger-border-12: #e2d1d3;--leaf-color-danger-surface-5: #fcf5f5;--leaf-color-danger-surface-6: #fcf3f3;--leaf-color-info-alpha-10: rgba(22, 119, 255, 0.1);--leaf-color-info-alpha-15: rgba(22, 119, 255, 0.15);--leaf-color-info-alpha-8: rgba(22, 119, 255, 0.08);--leaf-color-info-border-12: #ccd8eb;--leaf-color-info-surface-5: #f3f8ff;--leaf-color-primary-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-primary-alpha-18: rgba(32, 131, 74, 0.18);--leaf-color-primary-alpha-25: rgba(32, 131, 74, 0.25);--leaf-color-primary-alpha-42: rgba(32, 131, 74, 0.42);--leaf-color-primary-surface-9: #ebf4ef;--leaf-color-success-alpha-10: rgba(32, 131, 74, 0.1);--leaf-color-success-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-success-alpha-8: rgba(32, 131, 74, 0.08);--leaf-color-success-border-12: #cdd9d5;--leaf-color-success-surface-5: #f4f9f6;--leaf-color-surface-text-98: #fbfbfb;--leaf-color-text-alpha-10: rgba(32, 32, 36, 0.1);--leaf-color-text-alpha-15: rgba(32, 32, 36, 0.15);--leaf-color-text-alpha-8: rgba(32, 32, 36, 0.08);--leaf-color-text-border-12: #cdcdd0;--leaf-color-text-muted-surface-92: #74747b;--leaf-color-text-surface-5: #f4f4f4;--leaf-color-warning-alpha-10: rgba(250, 173, 20, 0.1);--leaf-color-warning-alpha-15: rgba(250, 173, 20, 0.15);--leaf-color-warning-alpha-8: rgba(250, 173, 20, 0.08);--leaf-color-warning-border-12: #e8decf;--leaf-color-warning-surface-5: #fffbf3;--leaf-color-text-subtle: #74747b;--leaf-color-surface-raised: #fbfbfb;--leaf-color-border-hover: #b9b9be;--leaf-color-on-warning: #202024;--leaf-color-primary-hover: #26864f;--leaf-color-primary-active: #1b6f3f;--leaf-color-primary-ink-hover: #26864f;--leaf-color-primary-ink-active: #1b6f3f;--leaf-color-danger-hover: #cb4848;--leaf-color-danger-active: #aa3333;--leaf-color-primary: #20834a;--leaf-color-on-primary: #ffffff;--leaf-color-danger: #c83c3c;--leaf-color-on-danger: #ffffff;--leaf-color-warning: #faad14;--leaf-color-info: #1677ff;--leaf-color-success: #20834a;--leaf-control-height: 36px;--leaf-density-form-gap: 24px;--leaf-density-label-gap: 6px;--leaf-density-row-padding: 12px;--leaf-density-option-height: max(24px, calc(var(--leaf-control-height) - 4px));--leaf-density-option-padding: 6px;--leaf-density-field-padding: 10px;--leaf-density-dialog-block: 20px;--leaf-density-dialog-inline: 24px;--leaf-density-dialog-gap: 16px;--leaf-z-index-popup: 1000;--leaf-z-index-modal: 1100;--leaf-z-index-message: 1200;--leaf-color-text: #202024;--leaf-color-text-muted: #68686f;--leaf-color-surface: #ffffff;--leaf-color-surface-muted: #f6f6f7;--leaf-color-border: #e5e5e8;--leaf-radius: 10px;--leaf-radius-sm: calc(var(--leaf-radius) * 0.6);--leaf-radius-md: calc(var(--leaf-radius) * 1.2);--leaf-radius-lg: calc(var(--leaf-radius) * 1.6);--leaf-choice-radius: calc(var(--leaf-radius) * 0.5);--leaf-font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;--leaf-font-size: 14px;--leaf-font-size-sm: max(1px, calc(var(--leaf-font-size) - 1px));--leaf-font-size-lg: calc(var(--leaf-font-size) + 2px);--leaf-font-weight: 500;--leaf-motion-duration: 200ms;--leaf-motion-easing: cubic-bezier(0.22, 1, 0.36, 1);--leaf-motion-spring: cubic-bezier(0.22, 1.28, 0.36, 1);--leaf-motion-play-state: running}[data-leaf-theme=light]{--leaf-color-primary-ink: #20834a;--leaf-color-primary-indicator: #20834a;--leaf-color-primary-fill-border: transparent;--leaf-color-primary-focus: rgba(32, 131, 74, 0.42);--leaf-color-option-hover: #ebebeb;--leaf-color-border-alpha-55: rgba(229, 229, 232, 0.55);--leaf-color-border-surface-35: #f6f6f7;--leaf-color-border-surface-70: #ededef;--leaf-color-border-text-muted-65: #b9b9be;--leaf-color-danger-alpha-10: rgba(200, 60, 60, 0.1);--leaf-color-danger-alpha-15: rgba(200, 60, 60, 0.15);--leaf-color-danger-alpha-18: rgba(200, 60, 60, 0.18);--leaf-color-danger-alpha-25: rgba(200, 60, 60, 0.25);--leaf-color-danger-alpha-42: rgba(200, 60, 60, 0.42);--leaf-color-danger-alpha-7: rgba(200, 60, 60, 0.07);--leaf-color-danger-alpha-8: rgba(200, 60, 60, 0.08);--leaf-color-danger-border-12: #e2d1d3;--leaf-color-danger-surface-5: #fcf5f5;--leaf-color-danger-surface-6: #fcf3f3;--leaf-color-info-alpha-10: rgba(22, 119, 255, 0.1);--leaf-color-info-alpha-15: rgba(22, 119, 255, 0.15);--leaf-color-info-alpha-8: rgba(22, 119, 255, 0.08);--leaf-color-info-border-12: #ccd8eb;--leaf-color-info-surface-5: #f3f8ff;--leaf-color-primary-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-primary-alpha-18: rgba(32, 131, 74, 0.18);--leaf-color-primary-alpha-25: rgba(32, 131, 74, 0.25);--leaf-color-primary-alpha-42: rgba(32, 131, 74, 0.42);--leaf-color-primary-surface-9: #ebf4ef;--leaf-color-success-alpha-10: rgba(32, 131, 74, 0.1);--leaf-color-success-alpha-15: rgba(32, 131, 74, 0.15);--leaf-color-success-alpha-8: rgba(32, 131, 74, 0.08);--leaf-color-success-border-12: #cdd9d5;--leaf-color-success-surface-5: #f4f9f6;--leaf-color-surface-text-98: #fbfbfb;--leaf-color-text-alpha-10: rgba(32, 32, 36, 0.1);--leaf-color-text-alpha-15: rgba(32, 32, 36, 0.15);--leaf-color-text-alpha-8: rgba(32, 32, 36, 0.08);--leaf-color-text-border-12: #cdcdd0;--leaf-color-text-muted-surface-92: #74747b;--leaf-color-text-surface-5: #f4f4f4;--leaf-color-warning-alpha-10: rgba(250, 173, 20, 0.1);--leaf-color-warning-alpha-15: rgba(250, 173, 20, 0.15);--leaf-color-warning-alpha-8: rgba(250, 173, 20, 0.08);--leaf-color-warning-border-12: #e8decf;--leaf-color-warning-surface-5: #fffbf3;--leaf-color-text-subtle: #74747b;--leaf-color-surface-raised: #fbfbfb;--leaf-color-border-hover: #b9b9be;--leaf-color-on-warning: #202024;--leaf-color-primary-hover: #26864f;--leaf-color-primary-active: #1b6f3f;--leaf-color-primary-ink-hover: #26864f;--leaf-color-primary-ink-active: #1b6f3f;--leaf-color-danger-hover: #cb4848;--leaf-color-danger-active: #aa3333;--leaf-color-primary: #20834a;--leaf-color-on-primary: #ffffff;--leaf-color-danger: #c83c3c;--leaf-color-on-danger: #ffffff;--leaf-color-success: #20834a;--leaf-color-warning: #faad14;--leaf-color-info: #1677ff;color-scheme:light;--leaf-color-text: #202024;--leaf-color-text-muted: #68686f;--leaf-color-surface: #ffffff;--leaf-color-surface-muted: #f6f6f7;--leaf-color-border: #e5e5e8}[data-leaf-theme=dark]{--leaf-color-primary-ink: #83cf9e;--leaf-color-primary-indicator: #83cf9e;--leaf-color-primary-fill-border: transparent;--leaf-color-primary-focus: rgba(131, 207, 158, 0.42);--leaf-color-option-hover: #2f2f33;--leaf-color-border-alpha-55: rgba(56, 56, 63, 0.55);--leaf-color-border-surface-35: #26262b;--leaf-color-border-surface-70: #303036;--leaf-color-border-text-muted-65: #5e5e66;--leaf-color-danger-alpha-10: rgba(239, 133, 133, 0.1);--leaf-color-danger-alpha-15: rgba(239, 133, 133, 0.15);--leaf-color-danger-alpha-18: rgba(239, 133, 133, 0.18);--leaf-color-danger-alpha-25: rgba(239, 133, 133, 0.25);--leaf-color-danger-alpha-42: rgba(239, 133, 133, 0.42);--leaf-color-danger-alpha-7: rgba(239, 133, 133, 0.07);--leaf-color-danger-alpha-8: rgba(239, 133, 133, 0.08);--leaf-color-danger-border-12: #4e4147;--leaf-color-danger-surface-5: #272125;--leaf-color-danger-surface-6: #292226;--leaf-color-info-alpha-10: rgba(105, 177, 255, 0.1);--leaf-color-info-alpha-15: rgba(105, 177, 255, 0.15);--leaf-color-info-alpha-8: rgba(105, 177, 255, 0.08);--leaf-color-info-border-12: #3e4756;--leaf-color-info-surface-5: #20232b;--leaf-color-primary-alpha-15: rgba(131, 207, 158, 0.15);--leaf-color-primary-alpha-18: rgba(131, 207, 158, 0.18);--leaf-color-primary-alpha-25: rgba(131, 207, 158, 0.25);--leaf-color-primary-alpha-42: rgba(131, 207, 158, 0.42);--leaf-color-primary-surface-9: #252c2b;--leaf-color-success-alpha-10: rgba(131, 207, 158, 0.1);--leaf-color-success-alpha-15: rgba(131, 207, 158, 0.15);--leaf-color-success-alpha-8: rgba(131, 207, 158, 0.08);--leaf-color-success-border-12: #414a4a;--leaf-color-success-surface-5: #212526;--leaf-color-surface-text-98: #202024;--leaf-color-text-alpha-10: rgba(237, 237, 240, 0.1);--leaf-color-text-alpha-15: rgba(237, 237, 240, 0.15);--leaf-color-text-alpha-8: rgba(237, 237, 240, 0.08);--leaf-color-text-border-12: #4e4e54;--leaf-color-text-muted-surface-92: #9a9aa3;--leaf-color-text-surface-5: #26262a;--leaf-color-warning-alpha-10: rgba(255, 197, 61, 0.1);--leaf-color-warning-alpha-15: rgba(255, 197, 61, 0.15);--leaf-color-warning-alpha-8: rgba(255, 197, 61, 0.08);--leaf-color-warning-border-12: #50493f;--leaf-color-warning-surface-5: #272421;--leaf-color-text-subtle: #9a9aa3;--leaf-color-surface-raised: #202024;--leaf-color-border-hover: #5e5e66;--leaf-color-on-warning: #202024;--leaf-color-primary-hover: #8fd4a8;--leaf-color-primary-active: #6fb086;--leaf-color-primary-ink-hover: #8fd4a8;--leaf-color-primary-ink-active: #6fb086;--leaf-color-danger-hover: #f19191;--leaf-color-danger-active: #cb7171;--leaf-color-primary: #83cf9e;--leaf-color-on-primary: #11271a;--leaf-color-info: #69b1ff;--leaf-color-success: #83cf9e;--leaf-color-danger: #ef8585;--leaf-color-on-danger: #381818;--leaf-color-warning: #ffc53d;color-scheme:dark;--leaf-color-text: #ededf0;--leaf-color-text-muted: #a5a5ae;--leaf-color-surface: #1c1c20;--leaf-color-surface-muted: #25252b;--leaf-color-border: #38383f}:root,:host{--leaf-spacing: 8px;--leaf-line-height: 1.6;--leaf-heading-weight: 600;--leaf-shadow-xs: 0 1px 2px rgb(0 0 0 / 0.06), 0 0 0 1px rgb(0 0 0 / 0.02);--leaf-shadow-sm: 0 2px 6px rgb(0 0 0 / 0.05), 0 1px 2px rgb(0 0 0 / 0.04);--leaf-shadow-md: 0 8px 24px rgb(0 0 0 / 0.08), 0 2px 6px rgb(0 0 0 / 0.04);--leaf-shadow-lg: 0 20px 60px rgb(0 0 0 / 0.14), 0 4px 12px rgb(0 0 0 / 0.06)}:root,:host,[data-leaf-scope]{--leaf-spacing-xs: calc(var(--leaf-spacing) * 0.5);--leaf-spacing-sm: var(--leaf-spacing);--leaf-spacing-md: calc(var(--leaf-spacing) * 2);--leaf-spacing-lg: calc(var(--leaf-spacing) * 3);--leaf-spacing-xl: calc(var(--leaf-spacing) * 4);--leaf-control-height-sm: max(1px, calc(var(--leaf-control-height) - 6px));--leaf-control-height-lg: calc(var(--leaf-control-height) + 6px);--leaf-motion-fast: calc(var(--leaf-motion-duration) * 0.6);--leaf-motion-slow: calc(var(--leaf-motion-duration) * 1.6);--leaf-color-text-subtle: var(--leaf-color-text-muted-surface-92);--leaf-color-surface-raised: var(--leaf-color-surface-text-98);--leaf-color-border-hover: var(--leaf-color-border-text-muted-65);--leaf-color-divider: var(--leaf-color-border-surface-70)}@keyframes leaf-content-in{from{opacity:0;translate:0 6px}to{opacity:1;translate:0 0}}@keyframes leaf-state-in{from{opacity:0;scale:.92}to{opacity:1;scale:1}}@media(prefers-reduced-motion: reduce){:where([class^=leaf-],[class*=" leaf-"]){animation:none !important;animation-delay:0s !important;transition-duration:0s !important;transition-delay:0s !important;scroll-behavior:auto !important}}.leaf-floating{--leaf-surface-inner-top: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-top) - var(--leaf-surface-border));--leaf-surface-inner-right: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-right) - var(--leaf-surface-border));--leaf-surface-inner-bottom: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-bottom) - var(--leaf-surface-border));--leaf-surface-inner-left: max(0px, var(--leaf-surface-radius) - var(--leaf-surface-padding-left) - var(--leaf-surface-border));--leaf-surface-inner-radius: var(--leaf-surface-inner-left) var(--leaf-surface-inner-right) var(--leaf-surface-inner-right) var(--leaf-surface-inner-left) / var(--leaf-surface-inner-top) var(--leaf-surface-inner-top) var(--leaf-surface-inner-bottom) var(--leaf-surface-inner-bottom);padding:var(--leaf-surface-padding-top) var(--leaf-surface-padding-right) var(--leaf-surface-padding-bottom) var(--leaf-surface-padding-left);border-radius:var(--leaf-surface-radius)}.leaf-floating{--leaf-surface-radius: var(--leaf-component-floating-radius, var(--leaf-radius-lg));--leaf-surface-padding: var(--leaf-component-floating-padding, 6px);--leaf-surface-border: var(--leaf-component-floating-border-width, var(--leaf-border-width, 1px));--leaf-surface-padding-top: var( --leaf-component-floating-padding-top, var(--leaf-surface-padding) );--leaf-surface-padding-right: var( --leaf-component-floating-padding-right, var(--leaf-surface-padding) );--leaf-surface-padding-bottom: var( --leaf-component-floating-padding-bottom, var(--leaf-surface-padding) );--leaf-surface-padding-left: var( --leaf-component-floating-padding-left, var(--leaf-surface-padding) );--leaf-floating-option-radius: var(--leaf-surface-inner-radius);--leaf-popup-x: 0px;--leaf-popup-y: -4px;--leaf-popup-origin-x: center;--leaf-popup-origin-y: top;box-sizing:border-box;position:fixed;z-index:var(--leaf-z-index-popup, 1000);max-width:min(420px,100vw - 24px);max-height:min(360px,100vh - 32px);overflow:auto;border:var(--leaf-surface-border) solid var(--leaf-component-floating-border-color, var(--leaf-frame-border-color, var(--leaf-color-border)));color:var(--leaf-component-floating-color, var(--leaf-color-text));font-family:var(--leaf-font-family);font-size:var(--leaf-font-size);line-height:1.5;background:var(--leaf-component-floating-background, var(--leaf-color-surface-raised, var(--leaf-color-surface)));box-shadow:var(--leaf-component-floating-shadow, var(--leaf-surface-shadow, var(--leaf-shadow-md)));overscroll-behavior:contain;opacity:1;translate:0 0;scale:1;transform-origin:var(--leaf-popup-origin-x) var(--leaf-popup-origin-y);transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),translate var(--leaf-motion-slow) var(--leaf-motion-easing),scale var(--leaf-motion-slow) var(--leaf-motion-easing)}.leaf-floating[data-side=top]{--leaf-popup-y: 4px;--leaf-popup-origin-y: bottom}.leaf-floating[data-side=left]{--leaf-popup-x: 6px;--leaf-popup-y: 0px;--leaf-popup-origin-x: right;--leaf-popup-origin-y: center}.leaf-floating[data-side=right]{--leaf-popup-x: -6px;--leaf-popup-y: 0px;--leaf-popup-origin-x: left;--leaf-popup-origin-y: center}@starting-style{.leaf-floating{opacity:0;translate:var(--leaf-popup-x) var(--leaf-popup-y);scale:.985}}.leaf-floating[data-positioned=false]{opacity:0;translate:var(--leaf-popup-x) var(--leaf-popup-y);scale:.985}.leaf-floating[data-state=closing]{pointer-events:none;opacity:0;translate:var(--leaf-popup-x) var(--leaf-popup-y);scale:.98;transition-duration:var(--leaf-motion-duration);transition-timing-function:var(--leaf-motion-easing)}.leaf-floating:focus{outline:none}@media(prefers-reduced-motion: reduce){.leaf-floating,.leaf-floating[data-state=closing]{transition:none}}.leaf-floating.leaf-scrollbar{width:auto;overflow:hidden;border-radius:var(--leaf-surface-radius)}.leaf-floating>.leaf-floating__viewport{position:relative;box-sizing:border-box;border-radius:var(--leaf-surface-inner-radius);overscroll-behavior:contain}.leaf-form-value{position:absolute;width:1px;height:1px;padding:0;border:0;clip-path:inset(50%);opacity:0;pointer-events:none}.leaf-floating__option{box-sizing:border-box;display:flex;width:100%;min-height:var(--leaf-density-option-height);align-items:center;gap:8px;padding:var(--leaf-density-option-padding) var(--leaf-density-field-padding);padding-block:min(var(--leaf-density-option-padding),max(0px,(var(--leaf-density-option-height) - 1.4em)/2));border:0;border-radius:var(--leaf-floating-option-radius, var(--leaf-radius-sm));color:inherit;background:rgba(0,0,0,0);font:inherit;line-height:1.4;text-align:start;cursor:pointer;transition:color var(--leaf-motion-fast) var(--leaf-motion-easing),background-color var(--leaf-motion-fast) var(--leaf-motion-easing),box-shadow var(--leaf-motion-fast) var(--leaf-motion-easing)}.leaf-floating__option+.leaf-floating__option{margin-top:2px}.leaf-floating__option:hover:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]),.leaf-floating__option:focus-visible:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]),.leaf-floating__option[data-highlighted=true]:not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]){background:var(--leaf-color-option-hover)}.leaf-floating__option:active:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]):not([aria-checked=true]){background:var(--leaf-color-option-hover)}.leaf-floating__option[aria-selected=true]{color:var(--leaf-color-primary-ink, var(--leaf-color-primary));font-weight:var(--leaf-font-weight);background:var(--leaf-color-primary-surface-9)}.leaf-floating__option:disabled,.leaf-floating__option[aria-disabled=true]{color:var(--leaf-color-text-muted);cursor:not-allowed;opacity:.55}.leaf-floating__option:focus-visible{outline:2px solid var(--leaf-color-primary-indicator, var(--leaf-color-primary));outline-offset:-2px}.leaf-floating__option-label{min-width:0;overflow-wrap:anywhere}.leaf-floating__options{display:flex;flex-direction:column;gap:2px}@media(prefers-reduced-motion: reduce){.leaf-floating__option{transition:none}}.leaf-floating__highlight{position:absolute;top:0;left:0;box-sizing:border-box;width:var(--leaf-option-highlight-width, 0px);height:var(--leaf-option-highlight-height, var(--leaf-density-option-height));translate:var(--leaf-option-highlight-x, 0px) var(--leaf-option-highlight-y, 0px);border:1px solid var(--leaf-color-border-alpha-55);border-radius:var(--leaf-floating-option-radius);background:var(--leaf-color-option-hover);pointer-events:none;transition:translate var(--leaf-motion-duration) var(--leaf-motion-spring),height var(--leaf-motion-fast) var(--leaf-motion-easing),width var(--leaf-motion-fast) var(--leaf-motion-easing),background-color var(--leaf-motion-fast) var(--leaf-motion-easing),border-color var(--leaf-motion-fast) var(--leaf-motion-easing)}.leaf-floating__highlight[data-ready=false],.leaf-floating__highlight[data-hidden]{visibility:hidden}.leaf-floating__highlight[data-selected]{background:var(--leaf-color-primary-surface-9);border-color:var(--leaf-color-primary-alpha-15)}.leaf-floating[data-hover-motion] .leaf-floating__option{position:relative;z-index:1}.leaf-floating[data-hover-motion] .leaf-floating__option:hover:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]),.leaf-floating[data-hover-motion] .leaf-floating__option:focus-visible:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]),.leaf-floating[data-hover-motion] .leaf-floating__option[data-highlighted]:not([aria-disabled=true]):not([aria-selected=true]),.leaf-floating[data-hover-motion] .leaf-floating__option:active:not(:disabled):not([aria-disabled=true]):not([aria-selected=true]){background:rgba(0,0,0,0)}.leaf-floating[data-selection=candidate] .leaf-floating__option[aria-selected=true]{color:inherit;font-weight:inherit;background:rgba(0,0,0,0)}.leaf-floating[data-selection=candidate] .leaf-floating__option[aria-selected=true]:not(:disabled):not([aria-disabled=true]){background:var(--leaf-color-option-hover)}.leaf-floating[data-selection=candidate][data-hover-motion] .leaf-floating__option[aria-selected=true]:not(:disabled):not([aria-disabled=true]){background:rgba(0,0,0,0)}@media(prefers-reduced-motion: reduce){.leaf-floating__highlight{transition:none}}.leaf-floating__empty{padding:12px 10px;color:var(--leaf-color-text-muted);font-size:var(--leaf-font-size-sm);text-align:center}.leaf-floating__empty--feedback{box-sizing:border-box;display:flex;min-height:112px;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px 16px}.leaf-floating__empty--feedback>svg{flex:none}.leaf-floating__empty--feedback>div{min-width:0;max-width:100%;overflow-wrap:anywhere}.leaf-floating__loading-icon{color:var(--leaf-color-primary-ink, var(--leaf-color-primary));animation:var(--leaf-motion-animation, leaf-floating-spin calc(var(--leaf-motion-duration) * 4) linear infinite);animation-play-state:var(--leaf-motion-play-state, running)}@keyframes leaf-floating-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion: reduce){.leaf-floating__loading-icon{animation:none}}.leaf-button{--leaf-button-border-width: var( --leaf-component-button-border-width, var(--leaf-border-width, 1px) );--leaf-button-color: var(--leaf-color-primary);--leaf-button-ink: var(--leaf-color-primary-ink, var(--leaf-button-color));--leaf-button-ink-hover: var(--leaf-color-primary-ink-hover, var(--leaf-button-hover));--leaf-button-ink-active: var(--leaf-color-primary-ink-active, var(--leaf-button-active));--leaf-button-fill-border: var(--leaf-color-primary-fill-border, transparent);--leaf-button-color-alpha-18: var(--leaf-color-primary-alpha-18);--leaf-button-color-alpha-25: var(--leaf-color-primary-alpha-25);--leaf-button-color-alpha-42: var(--leaf-color-primary-alpha-42);--leaf-button-on-color: var(--leaf-color-on-primary);--leaf-focus-color: var(--leaf-color-primary-focus, var(--leaf-button-color-alpha-42));--leaf-button-hover: var(--leaf-color-primary-hover, var(--leaf-button-color));--leaf-button-active: var(--leaf-color-primary-active, var(--leaf-button-color));--leaf-button-soft-hover: var(--leaf-color-primary-soft-hover, var(--leaf-button-color-alpha-18));--leaf-button-soft-active: var( --leaf-color-primary-soft-active, var(--leaf-button-color-alpha-25) );--leaf-button-border: var(--leaf-color-primary-border, var(--leaf-button-color-alpha-42));box-sizing:border-box;display:inline-flex;position:relative;align-items:center;justify-content:center;gap:var(--leaf-component-button-gap, 6px);min-height:var(--leaf-button-height, var(--leaf-current-control-height));padding:var(--leaf-component-button-padding, 0 calc(var(--leaf-button-height, var(--leaf-current-control-height)) * 0.42));border:var(--leaf-button-border-width) solid rgba(0,0,0,0);border-radius:var(--leaf-component-button-radius, var(--leaf-button-radius, var(--leaf-radius)));font-family:var(--leaf-font-family);font-size:var(--leaf-component-button-font-size, var(--leaf-current-font-size));font-weight:var(--leaf-font-weight);line-height:1.5;text-decoration:none;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;appearance:none;transition:background-color var(--leaf-motion-duration) var(--leaf-motion-easing),border-color var(--leaf-motion-duration) var(--leaf-motion-easing),color var(--leaf-motion-duration) var(--leaf-motion-easing),box-shadow var(--leaf-motion-duration) var(--leaf-motion-easing),opacity var(--leaf-motion-duration) var(--leaf-motion-easing);--leaf-current-font-size: var(--leaf-font-size);--leaf-current-control-height: var(--leaf-control-height, 36px)}.leaf-button--sm{--leaf-current-control-height: var(--leaf-control-height-sm, 30px);--leaf-current-font-size: var(--leaf-font-size-sm, 12px)}.leaf-button--lg{--leaf-current-control-height: var(--leaf-control-height-lg, 42px);--leaf-current-font-size: var(--leaf-font-size-lg, 16px)}.leaf-button:focus-visible{outline:3px solid var(--leaf-color-focus, var(--leaf-focus-color, var(--leaf-color-primary-focus, var(--leaf-color-primary-alpha-42))));outline-offset:2px}.leaf-button:disabled{cursor:not-allowed;opacity:.45}.leaf-button[data-loading]{cursor:default;opacity:1}.leaf-button__wave{position:absolute;z-index:1;inset:calc(-1*var(--leaf-button-border-width));box-sizing:border-box;border-radius:inherit;color:var(--leaf-button-color);box-shadow:0 0 0 0 currentColor;opacity:0;pointer-events:none}.leaf-button__content{display:inline-flex;align-items:center;justify-content:center;gap:inherit;min-width:0;transition:opacity var(--leaf-motion-fast) var(--leaf-motion-easing),transform var(--leaf-motion-duration) var(--leaf-motion-spring)}.leaf-button__loading{position:absolute;inset:0;display:grid;place-items:center;opacity:0;transform:scale(0.7);pointer-events:none;transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),transform var(--leaf-motion-duration) var(--leaf-motion-spring)}.leaf-button[data-loading] .leaf-button__content{opacity:0;transform:translateY(3px)}.leaf-button[data-loading] .leaf-button__loading{opacity:1;transform:scale(1)}.leaf-button[data-loading] .leaf-button__spinner{animation:var(--leaf-motion-animation, leaf-spin calc(var(--leaf-motion-duration) * 4.5) linear infinite);animation-play-state:var(--leaf-motion-play-state, running)}.leaf-button--danger{--leaf-button-color: var(--leaf-color-danger);--leaf-button-ink: var(--leaf-button-color);--leaf-button-ink-hover: var(--leaf-button-hover);--leaf-button-ink-active: var(--leaf-button-active);--leaf-button-fill-border: transparent;--leaf-focus-color: var(--leaf-button-color-alpha-42);--leaf-button-color-alpha-18: var(--leaf-color-danger-alpha-18);--leaf-button-color-alpha-25: var(--leaf-color-danger-alpha-25);--leaf-button-color-alpha-42: var(--leaf-color-danger-alpha-42);--leaf-button-on-color: var(--leaf-color-on-danger);--leaf-button-hover: var(--leaf-color-danger-hover, var(--leaf-button-color));--leaf-button-active: var(--leaf-color-danger-active, var(--leaf-button-color));--leaf-button-soft-hover: var(--leaf-button-color-alpha-18);--leaf-button-soft-active: var(--leaf-button-color-alpha-25);--leaf-button-border: var(--leaf-button-color-alpha-42)}.leaf-button--ghost{color:var(--leaf-color-text);background:rgba(0,0,0,0)}.leaf-button--ghost:hover:not(:disabled){background:var(--leaf-color-surface-muted)}.leaf-button--ghost:active:not(:disabled){background:var(--leaf-color-border)}.leaf-button--danger.leaf-button--ghost{color:var(--leaf-button-color)}.leaf-button--danger.leaf-button--ghost:hover:not(:disabled){color:var(--leaf-button-hover);background:var(--leaf-button-soft-hover)}.leaf-button--danger.leaf-button--ghost:active:not(:disabled){color:var(--leaf-button-active);background:var(--leaf-button-soft-active)}.leaf-button--icon-only{width:var(--leaf-button-height, var(--leaf-current-control-height));padding:0}.leaf-button--full-width{width:100%}.leaf-button--link{align-self:center;min-height:0;padding:0;border:0;border-radius:0}.leaf-button--link.leaf-button--icon-only{width:auto}.leaf-button__icon,.leaf-button__spinner{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:16px;height:16px}.leaf-button__icon svg,.leaf-button__spinner svg{width:100%;height:100%}.leaf-button:is(.leaf-button--solid){--leaf-button-rest-color: var(--leaf-button-on-color);--leaf-button-rest-background: var(--leaf-button-color);--leaf-button-rest-border: var(--leaf-button-fill-border);--leaf-button-rest-shadow: none;--leaf-button-hover-color: var(--leaf-button-rest-color);--leaf-button-hover-background: var(--leaf-button-hover);--leaf-button-hover-border: var(--leaf-button-rest-border);--leaf-button-active-color: var(--leaf-button-rest-color);--leaf-button-active-background: var(--leaf-button-active);--leaf-button-active-border: var(--leaf-button-rest-border)}.leaf-button:is(.leaf-button--outline){--leaf-button-rest-color: var(--leaf-color-text);--leaf-button-rest-background: var(--leaf-color-surface);--leaf-button-rest-border: var(--leaf-color-border);--leaf-button-rest-shadow: 0 1px 2px rgb(0 0 0 / 0.04);--leaf-button-hover-color: var(--leaf-button-ink-hover);--leaf-button-hover-background: var(--leaf-button-rest-background);--leaf-button-hover-border: var(--leaf-button-ink-hover);--leaf-button-active-color: var(--leaf-button-ink-active);--leaf-button-active-background: var(--leaf-button-rest-background);--leaf-button-active-border: var(--leaf-button-ink-active)}.leaf-button:is(.leaf-button--outline).leaf-button--danger{--leaf-button-rest-color: var(--leaf-button-color);--leaf-button-rest-border: var(--leaf-button-border)}.leaf-button:is(.leaf-button--soft){--leaf-button-rest-color: var(--leaf-color-text);--leaf-button-rest-background: var(--leaf-color-surface-muted);--leaf-button-rest-border: transparent;--leaf-button-rest-shadow: none;--leaf-button-hover-color: var(--leaf-button-rest-color);--leaf-button-hover-background: var(--leaf-color-option-hover);--leaf-button-hover-border: transparent;--leaf-button-active-color: var(--leaf-button-rest-color);--leaf-button-active-background: color-mix( in srgb, var(--leaf-color-text) 14%, var(--leaf-color-surface) );--leaf-button-active-border: transparent}.leaf-button:is(.leaf-button--soft).leaf-button--danger{--leaf-button-rest-color: var(--leaf-button-color);--leaf-button-rest-background: var(--leaf-color-danger-surface-6);--leaf-button-hover-color: var(--leaf-button-hover);--leaf-button-hover-background: var(--leaf-button-soft-hover);--leaf-button-active-color: var(--leaf-button-active);--leaf-button-active-background: var(--leaf-button-soft-active)}.leaf-button:is(.leaf-button--link){--leaf-button-rest-color: var(--leaf-button-ink);--leaf-button-rest-background: transparent;--leaf-button-rest-border: transparent;--leaf-button-rest-shadow: none;--leaf-button-hover-color: var(--leaf-button-ink-hover);--leaf-button-hover-background: transparent;--leaf-button-hover-border: transparent;--leaf-button-active-color: var(--leaf-button-ink-active);--leaf-button-active-background: transparent;--leaf-button-active-border: transparent}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link){--leaf-button-base-color: var(--leaf-component-button-color, var(--leaf-button-rest-color));--leaf-button-base-background: var( --leaf-component-button-background, var(--leaf-button-rest-background) );--leaf-button-base-border: var( --leaf-component-button-border-color, var(--leaf-frame-border-color, var(--leaf-button-rest-border)) );--leaf-button-base-shadow: var( --leaf-component-button-shadow, var(--leaf-control-shadow, var(--leaf-button-rest-shadow)) );color:var(--leaf-button-base-color);background:var(--leaf-button-base-background);border-color:var(--leaf-button-base-border);box-shadow:var(--leaf-button-base-shadow)}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link):focus-visible:not(:disabled){color:var(--leaf-component-button-focus-color, var(--leaf-button-base-color));background:var(--leaf-component-button-focus-background, var(--leaf-button-base-background));border-color:var(--leaf-component-button-focus-border-color, var(--leaf-button-base-border));box-shadow:var(--leaf-component-button-focus-shadow, var(--leaf-button-base-shadow))}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link):hover:not(:disabled):not([data-loading]):where(:not(:focus-visible)){color:var(--leaf-component-button-hover-color, var(--leaf-button-hover-color));background:var(--leaf-component-button-hover-background, var(--leaf-button-hover-background));border-color:var(--leaf-component-button-hover-border-color, var(--leaf-component-button-border-color, var(--leaf-frame-border-color, var(--leaf-button-hover-border))));box-shadow:var(--leaf-component-button-hover-shadow, var(--leaf-button-base-shadow))}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link):active:not(:disabled):not([data-loading]){color:var(--leaf-component-button-active-color, var(--leaf-button-active-color));background:var(--leaf-component-button-active-background, var(--leaf-button-active-background));border-color:var(--leaf-component-button-active-border-color, var(--leaf-component-button-border-color, var(--leaf-frame-border-color, var(--leaf-button-active-border))));box-shadow:var(--leaf-component-button-active-shadow, var(--leaf-button-base-shadow))}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link):disabled{color:var(--leaf-component-button-disabled-color, var(--leaf-button-base-color));background:var(--leaf-component-button-disabled-background, var(--leaf-button-base-background));border-color:var(--leaf-component-button-disabled-border-color, var(--leaf-button-base-border));box-shadow:var(--leaf-component-button-disabled-shadow, var(--leaf-button-base-shadow))}@keyframes leaf-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion: reduce){.leaf-button,.leaf-button__content,.leaf-button__loading{transition:none}.leaf-button[data-loading] .leaf-button__spinner{animation:none}.leaf-button__wave{display:none}}@media(forced-colors: active){.leaf-button__wave{display:none}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link,.leaf-button--ghost){border-color:ButtonText}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link,.leaf-button--ghost):disabled{color:GrayText;border-color:GrayText}.leaf-button:is(.leaf-button--solid,.leaf-button--outline,.leaf-button--soft,.leaf-button--link,.leaf-button--ghost):focus-visible{outline-color:Highlight}}.leaf-button-group{display:inline-flex;align-items:stretch;gap:8px}.leaf-button-group--attached{gap:0}.leaf-button-group--attached>.leaf-button{position:relative}.leaf-button-group--attached>.leaf-button:not(:first-child){border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:calc(-1*var(--leaf-button-border-width))}.leaf-button-group--attached>.leaf-button:not(:last-child){border-start-end-radius:0;border-end-end-radius:0}.leaf-button-group--attached>.leaf-button:hover:not(:disabled),.leaf-button-group--attached>.leaf-button:active:not(:disabled),.leaf-button-group--attached>.leaf-button:focus-visible{z-index:1}.leaf-button-group{border:0;padding:0;margin:0;min-width:0}.leaf-split-button{isolation:isolate}.leaf-split-button.leaf-button-group--attached>.leaf-button{z-index:1}.leaf-split-button>.leaf-button--outline{--leaf-split-button-divider-color: var( --leaf-component-button-border-color, var(--leaf-frame-border-color, var(--leaf-color-border)) )}.leaf-split-button>.leaf-button--outline.leaf-button--danger{--leaf-split-button-divider-color: var( --leaf-component-button-border-color, var(--leaf-frame-border-color, var(--leaf-button-border)) )}.leaf-split-button>.leaf-button--outline:first-child{border-inline-end-color:var(--leaf-split-button-divider-color)}.leaf-split-button>.leaf-button--outline:not(:first-child){border-inline-start-color:var(--leaf-split-button-divider-color)}.leaf-split-button>.leaf-button+.leaf-button:not(.leaf-button--outline){margin-inline-start:0}.leaf-split-button>.leaf-button+.leaf-button::before{content:"";position:absolute;z-index:2;inset-block:22%;inset-inline-start:0;width:1px;background:var(--leaf-component-button-border-color, var(--leaf-frame-border-color, var(--leaf-color-border)));pointer-events:none}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--solid::before{background:color-mix(in srgb, var(--leaf-button-on-color) 32%, transparent)}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--outline::before{display:none}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--link{margin-inline-start:8px}.leaf-split-button>.leaf-button+.leaf-button.leaf-button--link::before{inset-inline-start:-4px}@media(forced-colors: active){.leaf-split-button>.leaf-button+.leaf-button::before,.leaf-split-button>.leaf-button+.leaf-button.leaf-button--solid::before{background:ButtonText}}.leaf-button{--leaf-current-control-height: var(--leaf-component-button-height, var(--leaf-control-height));--leaf-current-font-size: var(--leaf-component-button-font-size, var(--leaf-font-size))}.leaf-button--sm{--leaf-current-control-height: var( --leaf-component-button-height-sm, var(--leaf-control-height-sm) );--leaf-current-font-size: var(--leaf-font-size-sm)}.leaf-button--lg{--leaf-current-control-height: var( --leaf-component-button-height-lg, var(--leaf-control-height-lg) );--leaf-current-font-size: var(--leaf-font-size-lg)}.leaf-scrollbar{display:flex;flex-direction:column;position:relative;box-sizing:border-box;width:100%;min-width:0;min-height:0;max-width:100%;overflow:hidden;border-radius:inherit}.leaf-scrollbar--external{display:block;overflow:visible;max-width:none}.leaf-scrollbar--external>textarea{scrollbar-width:none}.leaf-scrollbar--external>textarea::-webkit-scrollbar{display:none}.leaf-scrollbar__viewport{flex:1 1 auto;min-height:0;width:100%;height:100%;border-radius:inherit;overscroll-behavior:auto;scrollbar-width:none}.leaf-scrollbar__viewport::-webkit-scrollbar{display:none}.leaf-scrollbar__viewport:focus-visible{outline:3px solid var(--leaf-color-focus, var(--leaf-focus-color, var(--leaf-color-primary-focus, var(--leaf-color-primary-alpha-42))));outline-offset:2px;outline-offset:-3px}.leaf-scrollbar__content{display:flow-root;min-width:100%}.leaf-scrollbar__bar{position:absolute;z-index:4;opacity:0;pointer-events:none;transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing)}.leaf-scrollbar__bar--vertical{inset-inline-end:4px;width:8px}.leaf-scrollbar__bar--horizontal{bottom:4px;height:8px}.leaf-scrollbar__thumb{position:absolute;inset-block-start:0;inset-inline-start:0;box-sizing:border-box;width:100%;height:100%;border:1px solid rgba(0,0,0,0);border-radius:999px;background:var(--leaf-color-text-muted);background-clip:padding-box;opacity:.45;pointer-events:none;transition:opacity var(--leaf-motion-fast) var(--leaf-motion-easing)}.leaf-scrollbar__bar--horizontal .leaf-scrollbar__thumb{left:0;right:auto}.leaf-scrollbar__bar:hover .leaf-scrollbar__thumb,.leaf-scrollbar__bar:focus-within .leaf-scrollbar__thumb,.leaf-scrollbar[data-dragging] .leaf-scrollbar__thumb{opacity:.75}.leaf-scrollbar__control{position:absolute;inset:0;width:100%;height:100%;padding:0;margin:0;opacity:0;cursor:pointer;touch-action:none}.leaf-scrollbar__bar:has(:focus-visible){outline:2px solid var(--leaf-color-primary-indicator, var(--leaf-color-primary));outline-offset:2px;border-radius:999px}.leaf-scrollbar__viewport:focus:not(:focus-visible){outline:none}.leaf-scrollbar:hover>.leaf-scrollbar__bar,.leaf-scrollbar:focus-within>.leaf-scrollbar__bar,.leaf-scrollbar[data-scrollbar=always]>.leaf-scrollbar__bar,.leaf-scrollbar[data-scrolling]>.leaf-scrollbar__bar,.leaf-scrollbar[data-dragging]>.leaf-scrollbar__bar{opacity:1;pointer-events:auto}@media(prefers-reduced-motion: reduce){.leaf-scrollbar__bar,.leaf-scrollbar__thumb{transition:none}}@media(forced-colors: active){.leaf-scrollbar__thumb{background:CanvasText;opacity:1;forced-color-adjust:none}}.leaf-alert{--leaf-feedback-color: var(--leaf-color-success);--leaf-feedback-color-border-12: var(--leaf-color-success-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-success-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-success-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-success-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-success-alpha-8);display:flex;align-items:flex-start;gap:var(--leaf-component-alert-gap, 12px);color:var(--leaf-component-alert-color, var(--leaf-color-text));font:var(--leaf-font-size)/1.5 var(--leaf-font-family);border-radius:var(--leaf-component-alert-radius, var(--leaf-radius-md));border:var(--leaf-component-alert-border-width, var(--leaf-border-width, 1px)) solid var(--leaf-component-alert-border-color, var(--leaf-frame-border-color, var(--leaf-color-divider)));box-shadow:var(--leaf-component-alert-shadow, var(--leaf-surface-shadow, none));padding:var(--leaf-component-alert-padding, 14px 16px)}.leaf-alert--info{--leaf-feedback-color: var(--leaf-color-info);--leaf-feedback-color-border-12: var(--leaf-color-info-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-info-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-info-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-info-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-info-alpha-8)}.leaf-alert--warning{--leaf-feedback-color: var(--leaf-color-warning);--leaf-feedback-color-border-12: var(--leaf-color-warning-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-warning-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-warning-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-warning-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-warning-alpha-8)}.leaf-alert--error{--leaf-feedback-color: var(--leaf-color-danger);--leaf-feedback-color-border-12: var(--leaf-color-danger-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-danger-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-danger-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-danger-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-danger-alpha-8)}.leaf-alert{box-sizing:border-box}.leaf-alert:not([data-description]){align-items:center}.leaf-alert{max-height:var(--leaf-alert-height, none);transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),max-height var(--leaf-motion-duration) var(--leaf-motion-easing),padding-block var(--leaf-motion-duration) var(--leaf-motion-easing),border-block-width var(--leaf-motion-duration) var(--leaf-motion-easing),border-color var(--leaf-motion-duration) var(--leaf-motion-easing),background-color var(--leaf-motion-duration) var(--leaf-motion-easing);background:var(--leaf-component-alert-background, var(--leaf-color-surface-muted))}.leaf-alert[data-state=closing]{max-height:0;opacity:0;padding-block:0;border-block-width:0;overflow:hidden;pointer-events:none}.leaf-alert__icon{display:inline-flex;flex:0 0 28px;align-items:center;justify-content:center;height:28px;border-radius:8px;color:var(--leaf-feedback-color);background:rgba(0,0,0,0)}.leaf-alert__content{flex:1;min-width:0}.leaf-alert__title{min-height:0;display:flex;align-items:center;font-weight:var(--leaf-font-weight)}.leaf-alert__description{margin-block-start:2px;color:var(--leaf-color-text-muted);font-size:var(--leaf-font-size-sm)}.leaf-alert__close{align-items:center;justify-content:center;min-width:28px;min-height:28px;transition:color var(--leaf-motion-fast) var(--leaf-motion-easing),background-color var(--leaf-motion-fast) var(--leaf-motion-easing),transform var(--leaf-motion-fast) var(--leaf-motion-spring)}.leaf-alert__close:hover{color:var(--leaf-color-text);background:var(--leaf-color-border-surface-35)}.leaf-alert__close:active{transform:scale(0.88)}@media(prefers-reduced-motion: reduce){.leaf-alert,.leaf-alert__close{transition:none}}.leaf-alert__close,.leaf-message__close{flex-shrink:0;display:inline-flex;border:0;padding:2px;border-radius:4px;background:rgba(0,0,0,0);color:var(--leaf-color-text-muted);cursor:pointer}.leaf-alert__close:focus-visible,.leaf-message__close:focus-visible{outline:2px solid var(--leaf-feedback-color)}.leaf-confirm{border-width:var(--leaf-component-confirm-border-width, var(--leaf-component-modal-border-width, var(--leaf-border-width, 1px)));border-color:var(--leaf-component-confirm-border-color, var(--leaf-component-modal-border-color, var(--leaf-frame-border-color, var(--leaf-color-divider))));background:var(--leaf-component-confirm-background, var(--leaf-component-modal-background, var(--leaf-color-surface)));box-shadow:var(--leaf-component-confirm-shadow, var(--leaf-component-modal-shadow, var(--leaf-surface-shadow, var(--leaf-shadow-lg))));--leaf-feedback-color: var(--leaf-color-text);--leaf-feedback-color-border-12: var(--leaf-color-text-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-text-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-text-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-text-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-text-alpha-8)}.leaf-confirm--danger{--leaf-feedback-color: var(--leaf-color-danger);--leaf-feedback-color-border-12: var(--leaf-color-danger-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-danger-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-danger-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-danger-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-danger-alpha-8)}.leaf-confirm--success{--leaf-feedback-color: var(--leaf-color-success);--leaf-feedback-color-border-12: var(--leaf-color-success-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-success-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-success-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-success-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-success-alpha-8)}.leaf-confirm--warning{--leaf-feedback-color: var(--leaf-color-warning);--leaf-feedback-color-border-12: var(--leaf-color-warning-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-warning-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-warning-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-warning-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-warning-alpha-8)}.leaf-confirm--info{--leaf-feedback-color: var(--leaf-color-info);--leaf-feedback-color-border-12: var(--leaf-color-info-border-12);--leaf-feedback-color-surface-5: var(--leaf-color-info-surface-5);--leaf-feedback-color-alpha-10: var(--leaf-color-info-alpha-10);--leaf-feedback-color-alpha-15: var(--leaf-color-info-alpha-15);--leaf-feedback-color-alpha-8: var(--leaf-color-info-alpha-8)}.leaf-confirm>.leaf-modal__body .leaf-modal__content{padding-block:12px 20px}.leaf-confirm__body{display:flex;align-items:flex-start;gap:12px}.leaf-confirm__content{flex:1;min-width:0}.leaf-confirm__icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;height:24px;color:var(--leaf-feedback-color);scale:1;opacity:1;transition:scale var(--leaf-motion-slow) var(--leaf-motion-spring),opacity var(--leaf-motion-duration) var(--leaf-motion-easing)}@starting-style{.leaf-confirm__icon{scale:.82;opacity:0}}.leaf-confirm__icon>svg{width:24px;height:24px}.leaf-confirm--default .leaf-confirm__icon{color:var(--leaf-color-text-muted)}.leaf-confirm-description{font-size:var(--leaf-component-confirm-font-size, calc(var(--leaf-font-size) + 1px));color:var(--leaf-component-confirm-color, var(--leaf-color-text));line-height:var(--leaf-line-height);overflow-wrap:anywhere}.leaf-confirm-error{margin-block:12px 0;padding:8px 10px;border-radius:var(--leaf-radius-sm);color:var(--leaf-color-danger);background:var(--leaf-color-danger-alpha-7);opacity:1;translate:0 0;transition:opacity var(--leaf-motion-duration) var(--leaf-motion-easing),translate var(--leaf-motion-duration) var(--leaf-motion-easing)}@starting-style{.leaf-confirm-error{opacity:0;translate:0 4px}}.leaf-feedback-spinner{animation:var(--leaf-motion-animation, leaf-spin calc(var(--leaf-motion-duration) * 4.5) linear infinite);animation-play-state:var(--leaf-motion-play-state, running)}@media(prefers-reduced-motion: reduce){.leaf-confirm__icon,.leaf-confirm-error{transition:none}.leaf-feedback-spinner{animation:none}}
|