huibo-ui 0.3.0 → 0.5.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/dist/cjs/{a11y-802de67a.js → a11y-4385c871.js} +17 -2
- package/dist/cjs/a11y-4385c871.js.map +1 -0
- package/dist/cjs/{date-helpers-904747ff.js → date-helpers-c05ef385.js} +10 -17
- package/dist/cjs/date-helpers-c05ef385.js.map +1 -0
- package/dist/cjs/hb-affix.cjs.entry.js +1 -1
- package/dist/cjs/hb-alert.cjs.entry.js +2 -1
- package/dist/cjs/hb-alert.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-aside.cjs.entry.js +1 -1
- package/dist/cjs/hb-avatar.cjs.entry.js +1 -1
- package/dist/cjs/hb-backtop.cjs.entry.js +2 -2
- package/dist/cjs/hb-badge.cjs.entry.js +1 -1
- package/dist/cjs/hb-breadcrumb-item.cjs.entry.js +1 -1
- package/dist/cjs/hb-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/hb-button.cjs.entry.js +2 -2
- package/dist/cjs/hb-calendar.cjs.entry.js +78 -10
- package/dist/cjs/hb-calendar.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-card.cjs.entry.js +1 -1
- package/dist/cjs/hb-cascader.cjs.entry.js +306 -146
- package/dist/cjs/hb-cascader.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-checkbox-group.cjs.entry.js +12 -8
- package/dist/cjs/hb-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-checkbox.cjs.entry.js +9 -4
- package/dist/cjs/hb-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-collapse-item.cjs.entry.js +13 -4
- package/dist/cjs/hb-collapse-item.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-collapse.cjs.entry.js +20 -15
- package/dist/cjs/hb-collapse.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-color-picker-panel.cjs.entry.js +2 -2
- package/dist/cjs/hb-color-picker.cjs.entry.js +108 -28
- package/dist/cjs/hb-color-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-config-provider.cjs.entry.js +1 -1
- package/dist/cjs/hb-container.cjs.entry.js +2 -2
- package/dist/cjs/hb-date-picker-pane.cjs.entry.js +2 -2
- package/dist/cjs/hb-date-picker.cjs.entry.js +90 -9
- package/dist/cjs/hb-date-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-date-range-picker.cjs.entry.js +3 -3
- package/dist/cjs/hb-date-time-picker.cjs.entry.js +3 -3
- package/dist/cjs/hb-descriptions.cjs.entry.js +2 -2
- package/dist/cjs/hb-descriptions.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-dialog.cjs.entry.js +51 -12
- package/dist/cjs/hb-dialog.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-divider.cjs.entry.js +2 -2
- package/dist/cjs/hb-drawer.cjs.entry.js +34 -4
- package/dist/cjs/hb-drawer.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-dropdown.cjs.entry.js +91 -11
- package/dist/cjs/hb-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-empty.cjs.entry.js +1 -1
- package/dist/cjs/hb-float-button.cjs.entry.js +2 -2
- package/dist/cjs/hb-footer.cjs.entry.js +1 -1
- package/dist/cjs/hb-form-item.cjs.entry.js +61 -9
- package/dist/cjs/hb-form-item.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-form.cjs.entry.js +13 -8
- package/dist/cjs/hb-form.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-header.cjs.entry.js +1 -1
- package/dist/cjs/hb-image-preview.cjs.entry.js +13 -9
- package/dist/cjs/hb-image-preview.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-image.cjs.entry.js +21 -3
- package/dist/cjs/hb-image.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-input-number.cjs.entry.js +7 -7
- package/dist/cjs/hb-input-number.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-input-tag.cjs.entry.js +2 -2
- package/dist/cjs/hb-input.cjs.entry.js +40 -3
- package/dist/cjs/hb-input.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-layout.cjs.entry.js +36 -14
- package/dist/cjs/hb-layout.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-link.cjs.entry.js +2 -2
- package/dist/cjs/hb-loading.cjs.entry.js +2 -2
- package/dist/cjs/hb-main.cjs.entry.js +1 -1
- package/dist/cjs/hb-menu-item.cjs.entry.js +14 -5
- package/dist/cjs/hb-menu-item.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-menu.cjs.entry.js +3 -3
- package/dist/cjs/hb-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-message.cjs.entry.js +13 -4
- package/dist/cjs/hb-message.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-notification.cjs.entry.js +2 -2
- package/dist/cjs/hb-page-header.cjs.entry.js +1 -1
- package/dist/cjs/hb-pagination.cjs.entry.js +24 -8
- package/dist/cjs/hb-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-popconfirm.cjs.entry.js +57 -8
- package/dist/cjs/hb-popconfirm.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-popover.cjs.entry.js +37 -5
- package/dist/cjs/hb-popover.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-progress.cjs.entry.js +1 -1
- package/dist/cjs/hb-radio.cjs.entry.js +8 -3
- package/dist/cjs/hb-radio.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-rate.cjs.entry.js +46 -4
- package/dist/cjs/hb-rate.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-result.cjs.entry.js +1 -1
- package/dist/cjs/hb-row.cjs.entry.js +2 -2
- package/dist/cjs/hb-scrollbar.cjs.entry.js +5 -5
- package/dist/cjs/hb-scrollbar.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-segmented.cjs.entry.js +50 -5
- package/dist/cjs/hb-segmented.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-select.cjs.entry.js +64 -16
- package/dist/cjs/hb-select.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-slider.cjs.entry.js +186 -23
- package/dist/cjs/hb-slider.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-space.cjs.entry.js +2 -2
- package/dist/cjs/hb-statistic.cjs.entry.js +1 -1
- package/dist/cjs/hb-step.cjs.entry.js +1 -1
- package/dist/cjs/hb-steps.cjs.entry.js +30 -9
- package/dist/cjs/hb-steps.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-sub-menu.cjs.entry.js +5 -5
- package/dist/cjs/hb-switch.cjs.entry.js +9 -4
- package/dist/cjs/hb-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-tab-pane.cjs.entry.js +1 -1
- package/dist/cjs/hb-table.cjs.entry.js +26 -17
- package/dist/cjs/hb-table.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-tabs.cjs.entry.js +31 -10
- package/dist/cjs/hb-tabs.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-tag.cjs.entry.js +3 -2
- package/dist/cjs/hb-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-text.cjs.entry.js +2 -2
- package/dist/cjs/hb-time-picker.cjs.entry.js +14 -9
- package/dist/cjs/hb-time-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-time-select.cjs.entry.js +13 -4
- package/dist/cjs/hb-time-select.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-timeline.cjs.entry.js +1 -1
- package/dist/cjs/hb-tooltip.cjs.entry.js +43 -6
- package/dist/cjs/hb-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-transfer.cjs.entry.js +2 -2
- package/dist/cjs/hb-tree-select.cjs.entry.js +215 -23
- package/dist/cjs/hb-tree-select.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-tree.cjs.entry.js +145 -12
- package/dist/cjs/hb-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-upload.cjs.entry.js +3 -3
- package/dist/cjs/hb-watermark.cjs.entry.js +19 -11
- package/dist/cjs/hb-watermark.cjs.entry.js.map +1 -1
- package/dist/cjs/huibo-ui.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/transition-59f1da0f.js +34 -0
- package/dist/cjs/transition-59f1da0f.js.map +1 -0
- package/dist/collection/collection-manifest.json +3 -3
- package/dist/collection/components/Affix/Affix.js +1 -1
- package/dist/collection/components/Alert/Alert.js +2 -1
- package/dist/collection/components/Alert/Alert.js.map +1 -1
- package/dist/collection/components/Avatar/Avatar.js +1 -1
- package/dist/collection/components/Backtop/Backtop.js +2 -2
- package/dist/collection/components/Badge/Badge.js +1 -1
- package/dist/collection/components/Breadcrumb/Breadcrumb.js +1 -1
- package/dist/collection/components/Breadcrumb/BreadcrumbItem.js +1 -1
- package/dist/collection/components/Button/Button.js +2 -2
- package/dist/collection/components/Calendar/Calendar.js +84 -10
- package/dist/collection/components/Calendar/Calendar.js.map +1 -1
- package/dist/collection/components/Calendar/calendar.css +16 -0
- package/dist/collection/components/Card/Card.js +1 -1
- package/dist/collection/components/Cascader/Cascader.js +410 -194
- package/dist/collection/components/Cascader/Cascader.js.map +1 -1
- package/dist/collection/components/Cascader/cascader.css +170 -16
- package/dist/collection/components/Checkbox/Checkbox.js +9 -4
- package/dist/collection/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/collection/components/Checkbox/CheckboxGroup.js +12 -8
- package/dist/collection/components/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/collection/components/Collapse/Collapse.js +20 -15
- package/dist/collection/components/Collapse/Collapse.js.map +1 -1
- package/dist/collection/components/Collapse/CollapseItem.js +33 -4
- package/dist/collection/components/Collapse/CollapseItem.js.map +1 -1
- package/dist/collection/components/ColorPicker/ColorPicker.js +109 -28
- package/dist/collection/components/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/collection/components/ColorPicker/color-picker.css +21 -3
- package/dist/collection/components/ColorPickerPanel/ColorPickerPanel.js +2 -2
- package/dist/collection/components/ConfigProvider/ConfigProvider.js +1 -1
- package/dist/collection/components/Container/Aside.js +1 -1
- package/dist/collection/components/Container/Container.js +2 -2
- package/dist/collection/components/Container/Footer.js +1 -1
- package/dist/collection/components/Container/Header.js +1 -1
- package/dist/collection/components/Container/Main.js +1 -1
- package/dist/collection/components/DatePicker/DatePicker.js +94 -12
- package/dist/collection/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/collection/components/DatePicker/date-picker.css +63 -2
- package/dist/collection/components/DatePickerPane/DatePickerPane.js +1 -1
- package/dist/collection/components/DateRangePicker/DateRangePicker.js +2 -2
- package/dist/collection/components/DateTimePicker/DateTimePicker.js +2 -2
- package/dist/collection/components/Descriptions/Descriptions.js +1 -1
- package/dist/collection/components/Descriptions/descriptions.css +52 -10
- package/dist/collection/components/Dialog/Dialog.js +54 -10
- package/dist/collection/components/Dialog/Dialog.js.map +1 -1
- package/dist/collection/components/Dialog/dialog.css +57 -11
- package/dist/collection/components/Divider/Divider.js +2 -2
- package/dist/collection/components/Drawer/Drawer.js +34 -3
- package/dist/collection/components/Drawer/Drawer.js.map +1 -1
- package/dist/collection/components/Drawer/drawer.css +207 -17
- package/dist/collection/components/Dropdown/Dropdown.js +103 -12
- package/dist/collection/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/collection/components/Dropdown/dropdown.css +26 -3
- package/dist/collection/components/Empty/Empty.js +1 -1
- package/dist/collection/components/FloatButton/FloatButton.js +2 -2
- package/dist/collection/components/Form/Form.js +14 -9
- package/dist/collection/components/Form/Form.js.map +1 -1
- package/dist/collection/components/Form/FormItem.js +62 -10
- package/dist/collection/components/Form/FormItem.js.map +1 -1
- package/dist/collection/components/Form/form-item.css +57 -6
- package/dist/collection/components/Form/form.css +1 -0
- package/dist/collection/components/Image/Image.js +24 -3
- package/dist/collection/components/Image/Image.js.map +1 -1
- package/dist/collection/components/ImagePreview/ImagePreview.js +13 -9
- package/dist/collection/components/ImagePreview/ImagePreview.js.map +1 -1
- package/dist/collection/components/Input/Input.js +39 -2
- package/dist/collection/components/Input/Input.js.map +1 -1
- package/dist/collection/components/Input/input.css +22 -4
- package/dist/collection/components/InputNumber/InputNumber.js +6 -6
- package/dist/collection/components/InputNumber/InputNumber.js.map +1 -1
- package/dist/collection/components/InputNumber/input-number.css +11 -1
- package/dist/collection/components/InputTag/InputTag.js +2 -2
- package/dist/collection/components/Layout/Layout.js +87 -34
- package/dist/collection/components/Layout/Layout.js.map +1 -1
- package/dist/collection/components/Layout/Row.js +2 -2
- package/dist/collection/components/Layout/layout.css +1732 -71
- package/dist/collection/components/Link/Link.js +2 -2
- package/dist/collection/components/Loading/Loading.js +2 -2
- package/dist/collection/components/Menu/Menu.js +2 -2
- package/dist/collection/components/Menu/MenuItem.js +34 -5
- package/dist/collection/components/Menu/MenuItem.js.map +1 -1
- package/dist/collection/components/Menu/SubMenu.js +4 -4
- package/dist/collection/components/Menu/menu.css +25 -0
- package/dist/collection/components/Message/Message.js +13 -4
- package/dist/collection/components/Message/Message.js.map +1 -1
- package/dist/collection/components/Notification/Notification.js +2 -2
- package/dist/collection/components/PageHeader/PageHeader.js +1 -1
- package/dist/collection/components/Pagination/Pagination.js +26 -7
- package/dist/collection/components/Pagination/Pagination.js.map +1 -1
- package/dist/collection/components/Pagination/pagination.css +23 -0
- package/dist/collection/components/Popconfirm/Popconfirm.js +66 -7
- package/dist/collection/components/Popconfirm/Popconfirm.js.map +1 -1
- package/dist/collection/components/Popconfirm/popconfirm.css +80 -16
- package/dist/collection/components/Popover/Popover.js +46 -4
- package/dist/collection/components/Popover/Popover.js.map +1 -1
- package/dist/collection/components/Popover/popover.css +49 -8
- package/dist/collection/components/Progress/Progress.js +1 -1
- package/dist/collection/components/Radio/Radio.js +8 -3
- package/dist/collection/components/Radio/Radio.js.map +1 -1
- package/dist/collection/components/Rate/Rate.js +46 -4
- package/dist/collection/components/Rate/Rate.js.map +1 -1
- package/dist/collection/components/Result/Result.js +1 -1
- package/dist/collection/components/Scrollbar/Scrollbar.js +5 -5
- package/dist/collection/components/Scrollbar/Scrollbar.js.map +1 -1
- package/dist/collection/components/Segmented/Segmented.js +65 -6
- package/dist/collection/components/Segmented/Segmented.js.map +1 -1
- package/dist/collection/components/Select/Select.js +63 -15
- package/dist/collection/components/Select/Select.js.map +1 -1
- package/dist/collection/components/Select/select.css +50 -5
- package/dist/collection/components/Slider/Slider.js +218 -24
- package/dist/collection/components/Slider/Slider.js.map +1 -1
- package/dist/collection/components/Slider/slider.css +57 -7
- package/dist/collection/components/Space/Space.js +2 -2
- package/dist/collection/components/Statistic/Statistic.js +1 -1
- package/dist/collection/components/Steps/Step.js +1 -1
- package/dist/collection/components/Steps/Steps.js +35 -8
- package/dist/collection/components/Steps/Steps.js.map +1 -1
- package/dist/collection/components/Switch/Switch.js +8 -3
- package/dist/collection/components/Switch/Switch.js.map +1 -1
- package/dist/collection/components/Switch/switch.css +47 -1
- package/dist/collection/components/Table/Table.js +25 -16
- package/dist/collection/components/Table/Table.js.map +1 -1
- package/dist/collection/components/Table/table.css +26 -2
- package/dist/collection/components/Tabs/TabPane.js +1 -1
- package/dist/collection/components/Tabs/Tabs.js +31 -10
- package/dist/collection/components/Tabs/Tabs.js.map +1 -1
- package/dist/collection/components/Tag/Tag.js +3 -2
- package/dist/collection/components/Tag/Tag.js.map +1 -1
- package/dist/collection/components/Text/Text.js +2 -2
- package/dist/collection/components/TimePicker/TimePicker.js +14 -9
- package/dist/collection/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/collection/components/TimeSelect/TimeSelect.js +13 -4
- package/dist/collection/components/TimeSelect/TimeSelect.js.map +1 -1
- package/dist/collection/components/Timeline/Timeline.js +1 -1
- package/dist/collection/components/Tooltip/Tooltip.js +52 -6
- package/dist/collection/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/collection/components/Tooltip/tooltip.css +24 -2
- package/dist/collection/components/Transfer/Transfer.js +2 -2
- package/dist/collection/components/Tree/Tree.js +147 -13
- package/dist/collection/components/Tree/Tree.js.map +1 -1
- package/dist/collection/components/TreeSelect/TreeSelect.js +219 -23
- package/dist/collection/components/TreeSelect/TreeSelect.js.map +1 -1
- package/dist/collection/components/TreeSelect/tree-select.css +41 -7
- package/dist/collection/components/Upload/Upload.js +3 -3
- package/dist/collection/components/Watermark/Watermark.js +19 -11
- package/dist/collection/components/Watermark/Watermark.js.map +1 -1
- package/dist/collection/utils/a11y.js +15 -1
- package/dist/collection/utils/a11y.js.map +1 -1
- package/dist/collection/utils/date-helpers.js +9 -16
- package/dist/collection/utils/date-helpers.js.map +1 -1
- package/dist/collection/utils/transition.js +29 -0
- package/dist/collection/utils/transition.js.map +1 -0
- package/dist/components/hb-affix.js +1 -1
- package/dist/components/hb-alert.js +2 -1
- package/dist/components/hb-alert.js.map +1 -1
- package/dist/components/hb-aside.js +1 -1
- package/dist/components/hb-avatar.js +1 -1
- package/dist/components/hb-backtop.js +2 -2
- package/dist/components/hb-badge.js +1 -1
- package/dist/components/hb-breadcrumb-item.js +1 -1
- package/dist/components/hb-breadcrumb.js +1 -1
- package/dist/components/hb-button.js +2 -2
- package/dist/components/hb-calendar.js +80 -11
- package/dist/components/hb-calendar.js.map +1 -1
- package/dist/components/hb-card.js +1 -1
- package/dist/components/hb-cascader.js +309 -146
- package/dist/components/hb-cascader.js.map +1 -1
- package/dist/components/hb-checkbox-group.js +12 -8
- package/dist/components/hb-checkbox-group.js.map +1 -1
- package/dist/components/hb-checkbox.js +9 -4
- package/dist/components/hb-checkbox.js.map +1 -1
- package/dist/components/hb-collapse-item.js +14 -4
- package/dist/components/hb-collapse-item.js.map +1 -1
- package/dist/components/hb-collapse.js +20 -15
- package/dist/components/hb-collapse.js.map +1 -1
- package/dist/components/hb-color-picker-panel.js +2 -2
- package/dist/components/hb-color-picker.js +110 -29
- package/dist/components/hb-color-picker.js.map +1 -1
- package/dist/components/hb-config-provider.js +1 -1
- package/dist/components/hb-container.js +2 -2
- package/dist/components/hb-date-picker-pane.js +2 -2
- package/dist/components/hb-date-picker.js +92 -10
- package/dist/components/hb-date-picker.js.map +1 -1
- package/dist/components/hb-date-range-picker.js +3 -3
- package/dist/components/hb-date-time-picker.js +3 -3
- package/dist/components/hb-descriptions.js +2 -2
- package/dist/components/hb-descriptions.js.map +1 -1
- package/dist/components/hb-dialog.js +53 -13
- package/dist/components/hb-dialog.js.map +1 -1
- package/dist/components/hb-divider.js +2 -2
- package/dist/components/hb-drawer.js +36 -5
- package/dist/components/hb-drawer.js.map +1 -1
- package/dist/components/hb-dropdown.js +94 -12
- package/dist/components/hb-dropdown.js.map +1 -1
- package/dist/components/hb-empty.js +1 -1
- package/dist/components/hb-float-button.js +2 -2
- package/dist/components/hb-footer.js +1 -1
- package/dist/components/hb-form-item.js +61 -9
- package/dist/components/hb-form-item.js.map +1 -1
- package/dist/components/hb-form.js +13 -8
- package/dist/components/hb-form.js.map +1 -1
- package/dist/components/hb-header.js +1 -1
- package/dist/components/hb-icon.js +1 -89
- package/dist/components/hb-icon.js.map +1 -1
- package/dist/components/hb-image-preview.js +13 -9
- package/dist/components/hb-image-preview.js.map +1 -1
- package/dist/components/hb-image.js +23 -3
- package/dist/components/hb-image.js.map +1 -1
- package/dist/components/hb-input-number.js +7 -7
- package/dist/components/hb-input-number.js.map +1 -1
- package/dist/components/hb-input-tag.js +2 -2
- package/dist/components/hb-input.js +40 -3
- package/dist/components/hb-input.js.map +1 -1
- package/dist/components/hb-layout.js +36 -14
- package/dist/components/hb-layout.js.map +1 -1
- package/dist/components/hb-link.js +2 -2
- package/dist/components/hb-loading.js +2 -2
- package/dist/components/hb-main.js +1 -1
- package/dist/components/hb-menu-item.js +15 -5
- package/dist/components/hb-menu-item.js.map +1 -1
- package/dist/components/hb-menu.js +3 -3
- package/dist/components/hb-menu.js.map +1 -1
- package/dist/components/hb-message.js +13 -4
- package/dist/components/hb-message.js.map +1 -1
- package/dist/components/hb-notification.js +2 -2
- package/dist/components/hb-page-header.js +1 -1
- package/dist/components/hb-pagination.js +28 -10
- package/dist/components/hb-pagination.js.map +1 -1
- package/dist/components/hb-popconfirm.js +58 -8
- package/dist/components/hb-popconfirm.js.map +1 -1
- package/dist/components/hb-popover.js +38 -5
- package/dist/components/hb-popover.js.map +1 -1
- package/dist/components/hb-progress.js +1 -1
- package/dist/components/hb-radio.js +8 -3
- package/dist/components/hb-radio.js.map +1 -1
- package/dist/components/hb-rate.js +46 -4
- package/dist/components/hb-rate.js.map +1 -1
- package/dist/components/hb-result.js +1 -1
- package/dist/components/hb-row.js +2 -2
- package/dist/components/hb-scrollbar.js +5 -5
- package/dist/components/hb-scrollbar.js.map +1 -1
- package/dist/components/hb-segmented.js +54 -6
- package/dist/components/hb-segmented.js.map +1 -1
- package/dist/components/hb-select.js +64 -16
- package/dist/components/hb-select.js.map +1 -1
- package/dist/components/hb-slider.js +191 -24
- package/dist/components/hb-slider.js.map +1 -1
- package/dist/components/hb-space.js +2 -2
- package/dist/components/hb-statistic.js +1 -1
- package/dist/components/hb-step.js +1 -1
- package/dist/components/hb-steps.js +35 -8
- package/dist/components/hb-steps.js.map +1 -1
- package/dist/components/hb-sub-menu.js +5 -5
- package/dist/components/hb-switch.js +9 -4
- package/dist/components/hb-switch.js.map +1 -1
- package/dist/components/hb-tab-pane.js +1 -1
- package/dist/components/hb-table.js +26 -17
- package/dist/components/hb-table.js.map +1 -1
- package/dist/components/hb-tabs.js +31 -10
- package/dist/components/hb-tabs.js.map +1 -1
- package/dist/components/hb-tag.js +3 -2
- package/dist/components/hb-tag.js.map +1 -1
- package/dist/components/hb-text.js +2 -2
- package/dist/components/hb-time-picker.js +14 -9
- package/dist/components/hb-time-picker.js.map +1 -1
- package/dist/components/hb-time-select.js +13 -4
- package/dist/components/hb-time-select.js.map +1 -1
- package/dist/components/hb-timeline.js +1 -1
- package/dist/components/hb-tooltip.js +44 -6
- package/dist/components/hb-tooltip.js.map +1 -1
- package/dist/components/hb-transfer.js +2 -2
- package/dist/components/hb-tree-select.js +219 -24
- package/dist/components/hb-tree-select.js.map +1 -1
- package/dist/components/hb-tree.js +147 -13
- package/dist/components/hb-tree.js.map +1 -1
- package/dist/components/hb-upload.js +3 -3
- package/dist/components/hb-watermark.js +19 -11
- package/dist/components/hb-watermark.js.map +1 -1
- package/dist/components/{p-cc0aeb50.js → p-00aa34c8.js} +17 -3
- package/dist/components/p-00aa34c8.js.map +1 -0
- package/dist/components/p-86d92faf.js +93 -0
- package/dist/components/p-86d92faf.js.map +1 -0
- package/dist/{esm/date-helpers-e4d85a67.js → components/p-e0876aca.js} +10 -17
- package/dist/components/p-e0876aca.js.map +1 -0
- package/dist/components/p-fad66d69.js +32 -0
- package/dist/components/p-fad66d69.js.map +1 -0
- package/dist/esm/{a11y-f9ab2964.js → a11y-e4cde5b0.js} +17 -3
- package/dist/esm/a11y-e4cde5b0.js.map +1 -0
- package/dist/{components/p-cf94cbf6.js → esm/date-helpers-259ed2f1.js} +10 -17
- package/dist/esm/date-helpers-259ed2f1.js.map +1 -0
- package/dist/esm/hb-affix.entry.js +1 -1
- package/dist/esm/hb-alert.entry.js +2 -1
- package/dist/esm/hb-alert.entry.js.map +1 -1
- package/dist/esm/hb-aside.entry.js +1 -1
- package/dist/esm/hb-avatar.entry.js +1 -1
- package/dist/esm/hb-backtop.entry.js +2 -2
- package/dist/esm/hb-badge.entry.js +1 -1
- package/dist/esm/hb-breadcrumb-item.entry.js +1 -1
- package/dist/esm/hb-breadcrumb.entry.js +1 -1
- package/dist/esm/hb-button.entry.js +2 -2
- package/dist/esm/hb-calendar.entry.js +78 -10
- package/dist/esm/hb-calendar.entry.js.map +1 -1
- package/dist/esm/hb-card.entry.js +1 -1
- package/dist/esm/hb-cascader.entry.js +306 -146
- package/dist/esm/hb-cascader.entry.js.map +1 -1
- package/dist/esm/hb-checkbox-group.entry.js +12 -8
- package/dist/esm/hb-checkbox-group.entry.js.map +1 -1
- package/dist/esm/hb-checkbox.entry.js +9 -4
- package/dist/esm/hb-checkbox.entry.js.map +1 -1
- package/dist/esm/hb-collapse-item.entry.js +13 -4
- package/dist/esm/hb-collapse-item.entry.js.map +1 -1
- package/dist/esm/hb-collapse.entry.js +20 -15
- package/dist/esm/hb-collapse.entry.js.map +1 -1
- package/dist/esm/hb-color-picker-panel.entry.js +2 -2
- package/dist/esm/hb-color-picker.entry.js +108 -28
- package/dist/esm/hb-color-picker.entry.js.map +1 -1
- package/dist/esm/hb-config-provider.entry.js +1 -1
- package/dist/esm/hb-container.entry.js +2 -2
- package/dist/esm/hb-date-picker-pane.entry.js +2 -2
- package/dist/esm/hb-date-picker.entry.js +90 -9
- package/dist/esm/hb-date-picker.entry.js.map +1 -1
- package/dist/esm/hb-date-range-picker.entry.js +3 -3
- package/dist/esm/hb-date-time-picker.entry.js +3 -3
- package/dist/esm/hb-descriptions.entry.js +2 -2
- package/dist/esm/hb-descriptions.entry.js.map +1 -1
- package/dist/esm/hb-dialog.entry.js +51 -12
- package/dist/esm/hb-dialog.entry.js.map +1 -1
- package/dist/esm/hb-divider.entry.js +2 -2
- package/dist/esm/hb-drawer.entry.js +34 -4
- package/dist/esm/hb-drawer.entry.js.map +1 -1
- package/dist/esm/hb-dropdown.entry.js +91 -11
- package/dist/esm/hb-dropdown.entry.js.map +1 -1
- package/dist/esm/hb-empty.entry.js +1 -1
- package/dist/esm/hb-float-button.entry.js +2 -2
- package/dist/esm/hb-footer.entry.js +1 -1
- package/dist/esm/hb-form-item.entry.js +61 -9
- package/dist/esm/hb-form-item.entry.js.map +1 -1
- package/dist/esm/hb-form.entry.js +13 -8
- package/dist/esm/hb-form.entry.js.map +1 -1
- package/dist/esm/hb-header.entry.js +1 -1
- package/dist/esm/hb-image-preview.entry.js +13 -9
- package/dist/esm/hb-image-preview.entry.js.map +1 -1
- package/dist/esm/hb-image.entry.js +21 -3
- package/dist/esm/hb-image.entry.js.map +1 -1
- package/dist/esm/hb-input-number.entry.js +7 -7
- package/dist/esm/hb-input-number.entry.js.map +1 -1
- package/dist/esm/hb-input-tag.entry.js +2 -2
- package/dist/esm/hb-input.entry.js +40 -3
- package/dist/esm/hb-input.entry.js.map +1 -1
- package/dist/esm/hb-layout.entry.js +36 -14
- package/dist/esm/hb-layout.entry.js.map +1 -1
- package/dist/esm/hb-link.entry.js +2 -2
- package/dist/esm/hb-loading.entry.js +2 -2
- package/dist/esm/hb-main.entry.js +1 -1
- package/dist/esm/hb-menu-item.entry.js +14 -5
- package/dist/esm/hb-menu-item.entry.js.map +1 -1
- package/dist/esm/hb-menu.entry.js +3 -3
- package/dist/esm/hb-menu.entry.js.map +1 -1
- package/dist/esm/hb-message.entry.js +13 -4
- package/dist/esm/hb-message.entry.js.map +1 -1
- package/dist/esm/hb-notification.entry.js +2 -2
- package/dist/esm/hb-page-header.entry.js +1 -1
- package/dist/esm/hb-pagination.entry.js +24 -8
- package/dist/esm/hb-pagination.entry.js.map +1 -1
- package/dist/esm/hb-popconfirm.entry.js +57 -8
- package/dist/esm/hb-popconfirm.entry.js.map +1 -1
- package/dist/esm/hb-popover.entry.js +37 -5
- package/dist/esm/hb-popover.entry.js.map +1 -1
- package/dist/esm/hb-progress.entry.js +1 -1
- package/dist/esm/hb-radio.entry.js +8 -3
- package/dist/esm/hb-radio.entry.js.map +1 -1
- package/dist/esm/hb-rate.entry.js +46 -4
- package/dist/esm/hb-rate.entry.js.map +1 -1
- package/dist/esm/hb-result.entry.js +1 -1
- package/dist/esm/hb-row.entry.js +2 -2
- package/dist/esm/hb-scrollbar.entry.js +5 -5
- package/dist/esm/hb-scrollbar.entry.js.map +1 -1
- package/dist/esm/hb-segmented.entry.js +51 -6
- package/dist/esm/hb-segmented.entry.js.map +1 -1
- package/dist/esm/hb-select.entry.js +64 -16
- package/dist/esm/hb-select.entry.js.map +1 -1
- package/dist/esm/hb-slider.entry.js +186 -23
- package/dist/esm/hb-slider.entry.js.map +1 -1
- package/dist/esm/hb-space.entry.js +2 -2
- package/dist/esm/hb-statistic.entry.js +1 -1
- package/dist/esm/hb-step.entry.js +1 -1
- package/dist/esm/hb-steps.entry.js +28 -7
- package/dist/esm/hb-steps.entry.js.map +1 -1
- package/dist/esm/hb-sub-menu.entry.js +5 -5
- package/dist/esm/hb-switch.entry.js +9 -4
- package/dist/esm/hb-switch.entry.js.map +1 -1
- package/dist/esm/hb-tab-pane.entry.js +1 -1
- package/dist/esm/hb-table.entry.js +26 -17
- package/dist/esm/hb-table.entry.js.map +1 -1
- package/dist/esm/hb-tabs.entry.js +31 -10
- package/dist/esm/hb-tabs.entry.js.map +1 -1
- package/dist/esm/hb-tag.entry.js +3 -2
- package/dist/esm/hb-tag.entry.js.map +1 -1
- package/dist/esm/hb-text.entry.js +2 -2
- package/dist/esm/hb-time-picker.entry.js +14 -9
- package/dist/esm/hb-time-picker.entry.js.map +1 -1
- package/dist/esm/hb-time-select.entry.js +13 -4
- package/dist/esm/hb-time-select.entry.js.map +1 -1
- package/dist/esm/hb-timeline.entry.js +1 -1
- package/dist/esm/hb-tooltip.entry.js +43 -6
- package/dist/esm/hb-tooltip.entry.js.map +1 -1
- package/dist/esm/hb-transfer.entry.js +2 -2
- package/dist/esm/hb-tree-select.entry.js +215 -23
- package/dist/esm/hb-tree-select.entry.js.map +1 -1
- package/dist/esm/hb-tree.entry.js +145 -12
- package/dist/esm/hb-tree.entry.js.map +1 -1
- package/dist/esm/hb-upload.entry.js +3 -3
- package/dist/esm/hb-watermark.entry.js +19 -11
- package/dist/esm/hb-watermark.entry.js.map +1 -1
- package/dist/esm/huibo-ui.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/transition-4295d789.js +32 -0
- package/dist/esm/transition-4295d789.js.map +1 -0
- package/dist/huibo-ui/huibo-ui.css +1 -1
- package/dist/huibo-ui/huibo-ui.esm.js +1 -1
- package/dist/huibo-ui/huibo-ui.esm.js.map +1 -1
- package/dist/huibo-ui/p-00aa34c8.js +2 -0
- package/dist/huibo-ui/p-00aa34c8.js.map +1 -0
- package/dist/huibo-ui/p-02f15843.entry.js +2 -0
- package/dist/huibo-ui/p-0cc1e3f3.entry.js +2 -0
- package/dist/huibo-ui/p-0cc1e3f3.entry.js.map +1 -0
- package/dist/huibo-ui/{p-f1c084c5.entry.js → p-0ddae4e9.entry.js} +2 -2
- package/dist/huibo-ui/{p-672076c3.entry.js → p-10f6c184.entry.js} +2 -2
- package/dist/huibo-ui/p-10f6c184.entry.js.map +1 -0
- package/dist/huibo-ui/{p-6ac242fe.entry.js → p-14c3b47b.entry.js} +2 -2
- package/dist/huibo-ui/{p-8c80a765.entry.js → p-15db24e9.entry.js} +2 -2
- package/dist/huibo-ui/{p-8b027491.entry.js → p-193efdc0.entry.js} +2 -2
- package/dist/huibo-ui/{p-8d925e3d.entry.js → p-1b0fbe69.entry.js} +2 -2
- package/dist/huibo-ui/{p-85f68526.entry.js → p-1b98152b.entry.js} +2 -2
- package/dist/huibo-ui/p-1b98152b.entry.js.map +1 -0
- package/dist/huibo-ui/p-1f6d0adb.entry.js +2 -0
- package/dist/huibo-ui/p-1f6d0adb.entry.js.map +1 -0
- package/dist/huibo-ui/{p-f374d5a3.entry.js → p-20632186.entry.js} +2 -2
- package/dist/huibo-ui/{p-e6f2d71d.entry.js → p-20fc554b.entry.js} +2 -2
- package/dist/huibo-ui/{p-64ca0980.entry.js → p-29092b85.entry.js} +2 -2
- package/dist/huibo-ui/p-29092b85.entry.js.map +1 -0
- package/dist/huibo-ui/p-2bc30b1b.entry.js +2 -0
- package/dist/huibo-ui/p-2bc30b1b.entry.js.map +1 -0
- package/dist/huibo-ui/{p-fd19813c.entry.js → p-2bcda1bb.entry.js} +2 -2
- package/dist/huibo-ui/{p-231a7335.entry.js → p-2ca9796a.entry.js} +2 -2
- package/dist/huibo-ui/p-2ca9796a.entry.js.map +1 -0
- package/dist/huibo-ui/{p-e0768565.entry.js → p-3042f986.entry.js} +2 -2
- package/dist/huibo-ui/{p-be48d2aa.entry.js → p-3dacb26b.entry.js} +2 -2
- package/dist/huibo-ui/{p-6a1ec3ff.entry.js → p-3deff48c.entry.js} +2 -2
- package/dist/huibo-ui/{p-c321c4aa.entry.js → p-412ff618.entry.js} +2 -2
- package/dist/huibo-ui/p-415295f3.entry.js +2 -0
- package/dist/huibo-ui/p-415295f3.entry.js.map +1 -0
- package/dist/huibo-ui/p-494e6c25.entry.js +2 -0
- package/dist/huibo-ui/p-494e6c25.entry.js.map +1 -0
- package/dist/huibo-ui/p-4d87d7f4.entry.js +2 -0
- package/dist/huibo-ui/p-4d87d7f4.entry.js.map +1 -0
- package/dist/huibo-ui/p-54a28052.entry.js +2 -0
- package/dist/huibo-ui/p-54a28052.entry.js.map +1 -0
- package/dist/huibo-ui/{p-88127de1.entry.js → p-55cd13eb.entry.js} +2 -2
- package/dist/huibo-ui/{p-58ebb9b3.entry.js → p-5c839288.entry.js} +2 -2
- package/dist/huibo-ui/p-5e253c15.entry.js +2 -0
- package/dist/huibo-ui/p-5e253c15.entry.js.map +1 -0
- package/dist/huibo-ui/p-63d68c61.entry.js +2 -0
- package/dist/huibo-ui/p-63d68c61.entry.js.map +1 -0
- package/dist/huibo-ui/{p-a042e3d0.entry.js → p-6518c435.entry.js} +2 -2
- package/dist/huibo-ui/p-687d8dff.entry.js +2 -0
- package/dist/huibo-ui/p-687d8dff.entry.js.map +1 -0
- package/dist/huibo-ui/p-688460ce.entry.js +2 -0
- package/dist/huibo-ui/p-688460ce.entry.js.map +1 -0
- package/dist/huibo-ui/p-69bb1dd9.entry.js +2 -0
- package/dist/huibo-ui/p-69bb1dd9.entry.js.map +1 -0
- package/dist/huibo-ui/{p-a0015341.entry.js → p-6bfeab80.entry.js} +2 -2
- package/dist/huibo-ui/{p-4001c08d.entry.js → p-6c23fbd1.entry.js} +2 -2
- package/dist/huibo-ui/p-6c23fbd1.entry.js.map +1 -0
- package/dist/huibo-ui/p-6c8cf248.entry.js +2 -0
- package/dist/huibo-ui/p-6c8cf248.entry.js.map +1 -0
- package/dist/huibo-ui/p-6efed295.entry.js +2 -0
- package/dist/huibo-ui/p-6efed295.entry.js.map +1 -0
- package/dist/huibo-ui/{p-8b1ae77e.entry.js → p-746a11a3.entry.js} +2 -2
- package/dist/huibo-ui/{p-c3e8893d.entry.js → p-79b24b83.entry.js} +2 -2
- package/dist/huibo-ui/p-79b24b83.entry.js.map +1 -0
- package/dist/huibo-ui/p-7a38b3e2.entry.js +2 -0
- package/dist/huibo-ui/p-7a38b3e2.entry.js.map +1 -0
- package/dist/huibo-ui/{p-c922d672.entry.js → p-7a682c56.entry.js} +2 -2
- package/dist/huibo-ui/{p-8c987d57.entry.js → p-7f65dc36.entry.js} +2 -2
- package/dist/huibo-ui/{p-463de26d.entry.js → p-815fc943.entry.js} +2 -2
- package/dist/huibo-ui/{p-d87fc21a.entry.js → p-88a6c905.entry.js} +2 -2
- package/dist/huibo-ui/{p-77017274.entry.js → p-89be7973.entry.js} +2 -2
- package/dist/huibo-ui/p-8a202bc5.entry.js +2 -0
- package/dist/huibo-ui/p-8a202bc5.entry.js.map +1 -0
- package/dist/huibo-ui/{p-315feadf.entry.js → p-8c4415ed.entry.js} +2 -2
- package/dist/huibo-ui/p-8c4415ed.entry.js.map +1 -0
- package/dist/huibo-ui/{p-9319c650.entry.js → p-950e7465.entry.js} +2 -2
- package/dist/huibo-ui/{p-6b381d0e.entry.js → p-96cecd21.entry.js} +2 -2
- package/dist/huibo-ui/p-96cecd21.entry.js.map +1 -0
- package/dist/huibo-ui/{p-710f38de.entry.js → p-98b513cd.entry.js} +2 -2
- package/dist/huibo-ui/p-98b513cd.entry.js.map +1 -0
- package/dist/huibo-ui/{p-5df47135.entry.js → p-a190ca89.entry.js} +2 -2
- package/dist/huibo-ui/{p-0e65e1bd.entry.js → p-ac18c68b.entry.js} +2 -2
- package/dist/huibo-ui/p-ac18c68b.entry.js.map +1 -0
- package/dist/huibo-ui/{p-d64b91ef.entry.js → p-ac45291c.entry.js} +2 -2
- package/dist/huibo-ui/p-ac45291c.entry.js.map +1 -0
- package/dist/huibo-ui/{p-477d8568.entry.js → p-aeae83af.entry.js} +2 -2
- package/dist/huibo-ui/{p-b489a526.entry.js → p-b06c8020.entry.js} +2 -2
- package/dist/huibo-ui/{p-dfaf7e37.entry.js → p-b105cf76.entry.js} +2 -2
- package/dist/huibo-ui/p-b105cf76.entry.js.map +1 -0
- package/dist/huibo-ui/{p-c3e665f6.entry.js → p-b38802b0.entry.js} +2 -2
- package/dist/huibo-ui/p-b38802b0.entry.js.map +1 -0
- package/dist/huibo-ui/{p-ea74fcae.entry.js → p-b3fd12c7.entry.js} +2 -2
- package/dist/huibo-ui/p-b3fd12c7.entry.js.map +1 -0
- package/dist/huibo-ui/p-b5ea18ba.entry.js +2 -0
- package/dist/huibo-ui/p-b5ea18ba.entry.js.map +1 -0
- package/dist/huibo-ui/{p-e2a8a396.entry.js → p-b6afe81e.entry.js} +2 -2
- package/dist/huibo-ui/{p-2b286698.entry.js → p-b7885d4a.entry.js} +2 -2
- package/dist/huibo-ui/p-b7900dee.entry.js +2 -0
- package/dist/huibo-ui/p-b7900dee.entry.js.map +1 -0
- package/dist/huibo-ui/p-b8c83751.entry.js +2 -0
- package/dist/huibo-ui/p-b8c83751.entry.js.map +1 -0
- package/dist/huibo-ui/p-c7713947.entry.js +2 -0
- package/dist/huibo-ui/p-c7713947.entry.js.map +1 -0
- package/dist/huibo-ui/{p-e0ab9010.entry.js → p-c869842c.entry.js} +2 -2
- package/dist/huibo-ui/p-c869842c.entry.js.map +1 -0
- package/dist/huibo-ui/{p-476527c1.entry.js → p-c8e917db.entry.js} +2 -2
- package/dist/huibo-ui/p-c8e917db.entry.js.map +1 -0
- package/dist/huibo-ui/p-cb66dbef.entry.js +2 -0
- package/dist/huibo-ui/p-cb66dbef.entry.js.map +1 -0
- package/dist/huibo-ui/p-cde83f76.entry.js +2 -0
- package/dist/huibo-ui/p-cde83f76.entry.js.map +1 -0
- package/dist/huibo-ui/{p-10c088f3.entry.js → p-d9c7c378.entry.js} +2 -2
- package/dist/huibo-ui/{p-332c8877.entry.js → p-dd9c6459.entry.js} +2 -2
- package/dist/huibo-ui/{p-80aca641.entry.js → p-dfccc7aa.entry.js} +2 -2
- package/dist/huibo-ui/{p-21682e92.entry.js → p-dfd144d8.entry.js} +2 -2
- package/dist/huibo-ui/p-e0876aca.js +2 -0
- package/dist/huibo-ui/p-e0876aca.js.map +1 -0
- package/dist/huibo-ui/p-e1773c93.entry.js +2 -0
- package/dist/huibo-ui/p-e1773c93.entry.js.map +1 -0
- package/dist/huibo-ui/{p-079a4130.entry.js → p-e3155cd7.entry.js} +2 -2
- package/dist/huibo-ui/{p-59b2e61c.entry.js → p-e73c357f.entry.js} +2 -2
- package/dist/huibo-ui/p-e73c357f.entry.js.map +1 -0
- package/dist/huibo-ui/{p-c1b4eacb.entry.js → p-e7c73624.entry.js} +2 -2
- package/dist/huibo-ui/p-e7c73624.entry.js.map +1 -0
- package/dist/huibo-ui/{p-d7815b4f.entry.js → p-e9e7abca.entry.js} +2 -2
- package/dist/huibo-ui/{p-f81ec512.entry.js → p-ea0823f3.entry.js} +2 -2
- package/dist/huibo-ui/p-ea0823f3.entry.js.map +1 -0
- package/dist/huibo-ui/{p-2e6584ea.entry.js → p-f1f2483f.entry.js} +2 -2
- package/dist/huibo-ui/{p-465dcb4c.entry.js → p-f2c78699.entry.js} +2 -2
- package/dist/huibo-ui/p-fad66d69.js +2 -0
- package/dist/huibo-ui/p-fad66d69.js.map +1 -0
- package/dist/huibo-ui/{p-4d8b1404.entry.js → p-fd6831f9.entry.js} +2 -2
- package/dist/huibo-ui/p-ff6bc5cc.entry.js +2 -0
- package/dist/huibo-ui/p-ff6bc5cc.entry.js.map +1 -0
- package/dist/types/components/Calendar/Calendar.d.ts +13 -1
- package/dist/types/components/Cascader/Cascader.d.ts +80 -90
- package/dist/types/components/Checkbox/Checkbox.d.ts +5 -0
- package/dist/types/components/Checkbox/CheckboxGroup.d.ts +1 -0
- package/dist/types/components/Collapse/Collapse.d.ts +2 -0
- package/dist/types/components/Collapse/CollapseItem.d.ts +8 -1
- package/dist/types/components/ColorPicker/ColorPicker.d.ts +11 -0
- package/dist/types/components/DatePicker/DatePicker.d.ts +14 -3
- package/dist/types/components/Dialog/Dialog.d.ts +13 -1
- package/dist/types/components/Drawer/Drawer.d.ts +4 -0
- package/dist/types/components/Dropdown/Dropdown.d.ts +18 -1
- package/dist/types/components/Form/Form.d.ts +2 -0
- package/dist/types/components/Form/FormItem.d.ts +10 -0
- package/dist/types/components/Image/Image.d.ts +6 -0
- package/dist/types/components/ImagePreview/ImagePreview.d.ts +5 -1
- package/dist/types/components/Input/Input.d.ts +9 -0
- package/dist/types/components/Layout/Layout.d.ts +20 -10
- package/dist/types/components/Menu/MenuItem.d.ts +8 -1
- package/dist/types/components/Message/Message.d.ts +3 -0
- package/dist/types/components/Pagination/Pagination.d.ts +3 -0
- package/dist/types/components/Popconfirm/Popconfirm.d.ts +16 -0
- package/dist/types/components/Popover/Popover.d.ts +14 -0
- package/dist/types/components/Radio/Radio.d.ts +5 -0
- package/dist/types/components/Rate/Rate.d.ts +7 -0
- package/dist/types/components/Segmented/Segmented.d.ts +18 -1
- package/dist/types/components/Select/Select.d.ts +11 -0
- package/dist/types/components/Slider/Slider.d.ts +27 -1
- package/dist/types/components/Steps/Steps.d.ts +14 -6
- package/dist/types/components/Table/Table.d.ts +8 -2
- package/dist/types/components/Tabs/Tabs.d.ts +6 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts +15 -1
- package/dist/types/components/Tree/Tree.d.ts +24 -0
- package/dist/types/components/TreeSelect/TreeSelect.d.ts +26 -0
- package/dist/types/components/Watermark/Watermark.d.ts +7 -1
- package/dist/types/components.d.ts +290 -98
- package/dist/types/utils/a11y.d.ts +9 -0
- package/dist/types/utils/date-helpers.d.ts +1 -1
- package/dist/types/utils/transition.d.ts +27 -0
- package/package.json +8 -2
- package/readme.md +88 -73
- package/dist/cjs/a11y-802de67a.js.map +0 -1
- package/dist/cjs/date-helpers-904747ff.js.map +0 -1
- package/dist/components/p-cc0aeb50.js.map +0 -1
- package/dist/components/p-cf94cbf6.js.map +0 -1
- package/dist/esm/a11y-f9ab2964.js.map +0 -1
- package/dist/esm/date-helpers-e4d85a67.js.map +0 -1
- package/dist/huibo-ui/p-003cee87.entry.js +0 -2
- package/dist/huibo-ui/p-003cee87.entry.js.map +0 -1
- package/dist/huibo-ui/p-0a033738.entry.js +0 -2
- package/dist/huibo-ui/p-0a033738.entry.js.map +0 -1
- package/dist/huibo-ui/p-0bef78ac.entry.js +0 -2
- package/dist/huibo-ui/p-0bef78ac.entry.js.map +0 -1
- package/dist/huibo-ui/p-0e65e1bd.entry.js.map +0 -1
- package/dist/huibo-ui/p-0f189251.entry.js +0 -2
- package/dist/huibo-ui/p-0f189251.entry.js.map +0 -1
- package/dist/huibo-ui/p-1b5acd6d.entry.js +0 -2
- package/dist/huibo-ui/p-1b5acd6d.entry.js.map +0 -1
- package/dist/huibo-ui/p-231a7335.entry.js.map +0 -1
- package/dist/huibo-ui/p-24ad7eec.entry.js +0 -2
- package/dist/huibo-ui/p-24ad7eec.entry.js.map +0 -1
- package/dist/huibo-ui/p-315feadf.entry.js.map +0 -1
- package/dist/huibo-ui/p-3c7f73c8.entry.js +0 -2
- package/dist/huibo-ui/p-3c7f73c8.entry.js.map +0 -1
- package/dist/huibo-ui/p-4001c08d.entry.js.map +0 -1
- package/dist/huibo-ui/p-44c48246.entry.js +0 -2
- package/dist/huibo-ui/p-44c48246.entry.js.map +0 -1
- package/dist/huibo-ui/p-476527c1.entry.js.map +0 -1
- package/dist/huibo-ui/p-4d0dff15.entry.js +0 -2
- package/dist/huibo-ui/p-58d20809.entry.js +0 -2
- package/dist/huibo-ui/p-58d20809.entry.js.map +0 -1
- package/dist/huibo-ui/p-59b2e61c.entry.js.map +0 -1
- package/dist/huibo-ui/p-64ca0980.entry.js.map +0 -1
- package/dist/huibo-ui/p-672076c3.entry.js.map +0 -1
- package/dist/huibo-ui/p-6b381d0e.entry.js.map +0 -1
- package/dist/huibo-ui/p-710f38de.entry.js.map +0 -1
- package/dist/huibo-ui/p-756acbdb.entry.js +0 -2
- package/dist/huibo-ui/p-756acbdb.entry.js.map +0 -1
- package/dist/huibo-ui/p-75a93de3.entry.js +0 -2
- package/dist/huibo-ui/p-75a93de3.entry.js.map +0 -1
- package/dist/huibo-ui/p-769960f4.entry.js +0 -2
- package/dist/huibo-ui/p-769960f4.entry.js.map +0 -1
- package/dist/huibo-ui/p-7f6975ad.entry.js +0 -2
- package/dist/huibo-ui/p-7f6975ad.entry.js.map +0 -1
- package/dist/huibo-ui/p-85f68526.entry.js.map +0 -1
- package/dist/huibo-ui/p-8d615521.entry.js +0 -2
- package/dist/huibo-ui/p-8d615521.entry.js.map +0 -1
- package/dist/huibo-ui/p-953b9514.entry.js +0 -2
- package/dist/huibo-ui/p-953b9514.entry.js.map +0 -1
- package/dist/huibo-ui/p-965d4d02.entry.js +0 -2
- package/dist/huibo-ui/p-965d4d02.entry.js.map +0 -1
- package/dist/huibo-ui/p-ad6b0c6e.entry.js +0 -2
- package/dist/huibo-ui/p-ad6b0c6e.entry.js.map +0 -1
- package/dist/huibo-ui/p-c1a059d9.entry.js +0 -2
- package/dist/huibo-ui/p-c1a059d9.entry.js.map +0 -1
- package/dist/huibo-ui/p-c1b4eacb.entry.js.map +0 -1
- package/dist/huibo-ui/p-c3e665f6.entry.js.map +0 -1
- package/dist/huibo-ui/p-c3e8893d.entry.js.map +0 -1
- package/dist/huibo-ui/p-cc0aeb50.js +0 -2
- package/dist/huibo-ui/p-cc0aeb50.js.map +0 -1
- package/dist/huibo-ui/p-cf94cbf6.js +0 -2
- package/dist/huibo-ui/p-cf94cbf6.js.map +0 -1
- package/dist/huibo-ui/p-d3939d44.entry.js +0 -2
- package/dist/huibo-ui/p-d3939d44.entry.js.map +0 -1
- package/dist/huibo-ui/p-d64b91ef.entry.js.map +0 -1
- package/dist/huibo-ui/p-dd05cb2c.entry.js +0 -2
- package/dist/huibo-ui/p-dd05cb2c.entry.js.map +0 -1
- package/dist/huibo-ui/p-dfaf7e37.entry.js.map +0 -1
- package/dist/huibo-ui/p-e0ab9010.entry.js.map +0 -1
- package/dist/huibo-ui/p-e9490259.entry.js +0 -2
- package/dist/huibo-ui/p-e9490259.entry.js.map +0 -1
- package/dist/huibo-ui/p-ea74fcae.entry.js.map +0 -1
- package/dist/huibo-ui/p-ebd04656.entry.js +0 -2
- package/dist/huibo-ui/p-ebd04656.entry.js.map +0 -1
- package/dist/huibo-ui/p-ed0ff857.entry.js +0 -2
- package/dist/huibo-ui/p-ed0ff857.entry.js.map +0 -1
- package/dist/huibo-ui/p-f0ac7db5.entry.js +0 -2
- package/dist/huibo-ui/p-f0ac7db5.entry.js.map +0 -1
- package/dist/huibo-ui/p-f81ec512.entry.js.map +0 -1
- /package/dist/huibo-ui/{p-4d0dff15.entry.js.map → p-02f15843.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-f1c084c5.entry.js.map → p-0ddae4e9.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-6ac242fe.entry.js.map → p-14c3b47b.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-8c80a765.entry.js.map → p-15db24e9.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-8b027491.entry.js.map → p-193efdc0.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-8d925e3d.entry.js.map → p-1b0fbe69.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-f374d5a3.entry.js.map → p-20632186.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-e6f2d71d.entry.js.map → p-20fc554b.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-fd19813c.entry.js.map → p-2bcda1bb.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-e0768565.entry.js.map → p-3042f986.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-be48d2aa.entry.js.map → p-3dacb26b.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-6a1ec3ff.entry.js.map → p-3deff48c.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-c321c4aa.entry.js.map → p-412ff618.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-88127de1.entry.js.map → p-55cd13eb.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-58ebb9b3.entry.js.map → p-5c839288.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-a042e3d0.entry.js.map → p-6518c435.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-a0015341.entry.js.map → p-6bfeab80.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-8b1ae77e.entry.js.map → p-746a11a3.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-c922d672.entry.js.map → p-7a682c56.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-8c987d57.entry.js.map → p-7f65dc36.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-463de26d.entry.js.map → p-815fc943.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-d87fc21a.entry.js.map → p-88a6c905.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-77017274.entry.js.map → p-89be7973.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-9319c650.entry.js.map → p-950e7465.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-5df47135.entry.js.map → p-a190ca89.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-477d8568.entry.js.map → p-aeae83af.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-b489a526.entry.js.map → p-b06c8020.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-e2a8a396.entry.js.map → p-b6afe81e.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-2b286698.entry.js.map → p-b7885d4a.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-10c088f3.entry.js.map → p-d9c7c378.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-332c8877.entry.js.map → p-dd9c6459.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-80aca641.entry.js.map → p-dfccc7aa.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-21682e92.entry.js.map → p-dfd144d8.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-079a4130.entry.js.map → p-e3155cd7.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-d7815b4f.entry.js.map → p-e9e7abca.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-2e6584ea.entry.js.map → p-f1f2483f.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-465dcb4c.entry.js.map → p-f2c78699.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-4d8b1404.entry.js.map → p-fd6831f9.entry.js.map} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
import { createClickOutsideHandler } from "../../utils/click-outside";
|
|
3
|
+
import { activationClickHandler } from "../../utils/a11y";
|
|
3
4
|
/**
|
|
4
5
|
* TreeSelect 树形选择器
|
|
5
6
|
* 类似 Select,但下拉选项以树形结构展示,支持单选与多选
|
|
@@ -43,6 +44,8 @@ export class TreeSelect {
|
|
|
43
44
|
internalExpanded = [];
|
|
44
45
|
internalSelected = [];
|
|
45
46
|
internalChecked = [];
|
|
47
|
+
/** 键盘焦点节点 key(A2:roving tabindex,与选中态解耦) */
|
|
48
|
+
focusKey = null;
|
|
46
49
|
/**
|
|
47
50
|
* 值变化事件(单选为 string,多选为 string[])
|
|
48
51
|
*/
|
|
@@ -64,6 +67,13 @@ export class TreeSelect {
|
|
|
64
67
|
this.internalExpanded = all;
|
|
65
68
|
}
|
|
66
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* 受控同步:父组件后续修改 modelValue 时,重算 internalSelected/internalChecked。
|
|
72
|
+
* 修复 B4——修复前仅 componentWillLoad 同步一次,受控改值后选中/勾选状态不更新。
|
|
73
|
+
*/
|
|
74
|
+
handleModelValueChange() {
|
|
75
|
+
this.syncFromModelValue();
|
|
76
|
+
}
|
|
67
77
|
componentDidLoad() {
|
|
68
78
|
this.clickOutside = createClickOutsideHandler({
|
|
69
79
|
host: this.el,
|
|
@@ -87,6 +97,106 @@ export class TreeSelect {
|
|
|
87
97
|
this.internalChecked = single ? [single] : [];
|
|
88
98
|
}
|
|
89
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* 构建当前可见节点的扁平列表(仅含已展开父节点的后代),用于键盘线性导航(A2)。
|
|
102
|
+
*/
|
|
103
|
+
getFlattenedVisibleNodes() {
|
|
104
|
+
const out = [];
|
|
105
|
+
const walk = (nodes, level, parentKey) => {
|
|
106
|
+
for (const node of nodes) {
|
|
107
|
+
out.push({ node, level, parentKey });
|
|
108
|
+
if (node.children && node.children.length > 0 && this.internalExpanded.includes(node.key)) {
|
|
109
|
+
walk(node.children, level + 1, node.key);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
walk(this.data, 0, null);
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Tree 键盘导航(WAI-ARIA Tree View 模式,A2 修复):
|
|
118
|
+
* ↑↓ 线性移动、→ 展开/进子、← 折叠/回父、Enter/Space 选中、Home/End 跳首尾。
|
|
119
|
+
* 焦点(focusKey)与选中态(internalSelected/internalChecked)解耦。
|
|
120
|
+
*/
|
|
121
|
+
handleTreeKeydown = (e) => {
|
|
122
|
+
const flat = this.getFlattenedVisibleNodes();
|
|
123
|
+
if (flat.length === 0)
|
|
124
|
+
return;
|
|
125
|
+
let focusKey = this.focusKey;
|
|
126
|
+
if (!focusKey && this.internalSelected.length > 0)
|
|
127
|
+
focusKey = this.internalSelected[this.internalSelected.length - 1];
|
|
128
|
+
let focusIdx = focusKey ? flat.findIndex(x => x.node.key === focusKey) : -1;
|
|
129
|
+
if (focusIdx < 0 || flat[focusIdx].node.disabled) {
|
|
130
|
+
focusIdx = flat.findIndex(x => !x.node.disabled);
|
|
131
|
+
if (focusIdx < 0)
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const enabledFlatIndices = flat
|
|
135
|
+
.map((x, i) => ({ x, i }))
|
|
136
|
+
.filter(o => !o.x.node.disabled)
|
|
137
|
+
.map(o => o.i);
|
|
138
|
+
const posInEnabled = enabledFlatIndices.indexOf(focusIdx);
|
|
139
|
+
const current = flat[focusIdx];
|
|
140
|
+
const isLeaf = !(current.node.children && current.node.children.length > 0);
|
|
141
|
+
const expanded = !isLeaf && this.internalExpanded.includes(current.node.key);
|
|
142
|
+
switch (e.key) {
|
|
143
|
+
case 'ArrowDown': {
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
this.focusKey = flat[enabledFlatIndices[(posInEnabled + 1) % enabledFlatIndices.length]].node.key;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
case 'ArrowUp': {
|
|
149
|
+
e.preventDefault();
|
|
150
|
+
const n = enabledFlatIndices.length;
|
|
151
|
+
this.focusKey = flat[enabledFlatIndices[(posInEnabled - 1 + n) % n]].node.key;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case 'ArrowRight': {
|
|
155
|
+
e.preventDefault();
|
|
156
|
+
if (isLeaf)
|
|
157
|
+
return;
|
|
158
|
+
if (!expanded) {
|
|
159
|
+
this.handleToggleExpand(current.node, { stopPropagation: () => { } });
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
const firstChildIdx = flat.findIndex((x, i) => i > focusIdx && x.parentKey === current.node.key && !x.node.disabled);
|
|
163
|
+
if (firstChildIdx >= 0)
|
|
164
|
+
this.focusKey = flat[firstChildIdx].node.key;
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case 'ArrowLeft': {
|
|
169
|
+
e.preventDefault();
|
|
170
|
+
if (!isLeaf && expanded) {
|
|
171
|
+
this.handleToggleExpand(current.node, { stopPropagation: () => { } });
|
|
172
|
+
}
|
|
173
|
+
else if (current.parentKey && !flat.find(x => x.node.key === current.parentKey).node.disabled) {
|
|
174
|
+
this.focusKey = current.parentKey;
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case 'Home':
|
|
179
|
+
e.preventDefault();
|
|
180
|
+
this.focusKey = flat[enabledFlatIndices[0]].node.key;
|
|
181
|
+
break;
|
|
182
|
+
case 'End':
|
|
183
|
+
e.preventDefault();
|
|
184
|
+
this.focusKey = flat[enabledFlatIndices[enabledFlatIndices.length - 1]].node.key;
|
|
185
|
+
break;
|
|
186
|
+
case 'Enter':
|
|
187
|
+
case ' ':
|
|
188
|
+
case 'Spacebar': {
|
|
189
|
+
e.preventDefault();
|
|
190
|
+
if (this.checkable)
|
|
191
|
+
this.handleNodeCheck(current.node);
|
|
192
|
+
else
|
|
193
|
+
this.handleNodeSelect(current.node.key);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
default:
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
90
200
|
collectExpandableKeys(nodes, out) {
|
|
91
201
|
for (const node of nodes) {
|
|
92
202
|
if (node.children && node.children.length > 0) {
|
|
@@ -112,7 +222,7 @@ export class TreeSelect {
|
|
|
112
222
|
const arr = Array.isArray(this.modelValue) ? this.modelValue : [];
|
|
113
223
|
if (arr.length === 0)
|
|
114
224
|
return '';
|
|
115
|
-
const titles = arr.map(
|
|
225
|
+
const titles = arr.map(k => this.findTitle(this.data, k) || k);
|
|
116
226
|
return titles.join(' / ');
|
|
117
227
|
}
|
|
118
228
|
const single = typeof this.modelValue === 'string' ? this.modelValue : '';
|
|
@@ -157,18 +267,92 @@ export class TreeSelect {
|
|
|
157
267
|
this.closeDropdown();
|
|
158
268
|
}
|
|
159
269
|
};
|
|
160
|
-
handleNodeCheck = (
|
|
161
|
-
//
|
|
162
|
-
const
|
|
163
|
-
const
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
270
|
+
handleNodeCheck = (node) => {
|
|
271
|
+
// 父子联动(对齐 Tree 组件算法):勾选/取消自身 + 级联后代 + 自底向上修正祖先
|
|
272
|
+
const next = new Set(this.internalChecked);
|
|
273
|
+
const wasChecked = next.has(node.key);
|
|
274
|
+
if (wasChecked) {
|
|
275
|
+
this.removeDescendantKeys(node, next);
|
|
276
|
+
next.delete(node.key);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
next.add(node.key);
|
|
280
|
+
this.collectCheckableDescendantKeys(node, next);
|
|
281
|
+
}
|
|
282
|
+
this.reconcileAncestors(node, next);
|
|
283
|
+
const result = Array.from(next);
|
|
284
|
+
this.internalChecked = result;
|
|
285
|
+
this.modelValue = result;
|
|
286
|
+
this.hbChange.emit(result);
|
|
171
287
|
};
|
|
288
|
+
/** 取消父级时级联取消所有后代(含禁用项,因为它们是被父带选的) */
|
|
289
|
+
removeDescendantKeys(node, out) {
|
|
290
|
+
if (!node.children)
|
|
291
|
+
return;
|
|
292
|
+
for (const child of node.children) {
|
|
293
|
+
out.delete(child.key);
|
|
294
|
+
this.removeDescendantKeys(child, out);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/** 勾选父级时级联勾选所有非禁用后代 */
|
|
298
|
+
collectCheckableDescendantKeys(node, out) {
|
|
299
|
+
if (!node.children)
|
|
300
|
+
return;
|
|
301
|
+
for (const child of node.children) {
|
|
302
|
+
if (!child.disabled)
|
|
303
|
+
out.add(child.key);
|
|
304
|
+
this.collectCheckableDescendantKeys(child, out);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/** 自底向上修正祖先:所有非禁用子节点全选 → 父勾选;否则移出(部分选体现为 indeterminate) */
|
|
308
|
+
reconcileAncestors(node, next) {
|
|
309
|
+
const parents = this.findAncestors(this.data, node.key, []);
|
|
310
|
+
for (const parent of parents) {
|
|
311
|
+
if (parent.disabled || !parent.children || parent.children.length === 0)
|
|
312
|
+
continue;
|
|
313
|
+
const checkable = parent.children.filter(c => !c.disabled);
|
|
314
|
+
if (checkable.length === 0)
|
|
315
|
+
continue;
|
|
316
|
+
if (checkable.every(c => next.has(c.key)))
|
|
317
|
+
next.add(parent.key);
|
|
318
|
+
else
|
|
319
|
+
next.delete(parent.key);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
findAncestors(nodes, key, acc) {
|
|
323
|
+
for (const node of nodes) {
|
|
324
|
+
if (node.key === key)
|
|
325
|
+
return acc;
|
|
326
|
+
if (node.children && node.children.length > 0) {
|
|
327
|
+
const found = this.findAncestors(node.children, key, [node, ...acc]);
|
|
328
|
+
if (found)
|
|
329
|
+
return found;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
/** 计算当前 checked 集合下处于「部分选中」的节点(用于三方态渲染) */
|
|
335
|
+
computeIndeterminateKeys() {
|
|
336
|
+
const result = new Set();
|
|
337
|
+
const checked = new Set(this.internalChecked);
|
|
338
|
+
const walk = (node) => {
|
|
339
|
+
if (!node.children || node.children.length === 0)
|
|
340
|
+
return false;
|
|
341
|
+
let hasChecked = false;
|
|
342
|
+
for (const child of node.children) {
|
|
343
|
+
if (walk(child))
|
|
344
|
+
hasChecked = true;
|
|
345
|
+
if (checked.has(child.key))
|
|
346
|
+
hasChecked = true;
|
|
347
|
+
}
|
|
348
|
+
if (hasChecked && !checked.has(node.key))
|
|
349
|
+
result.add(node.key);
|
|
350
|
+
return hasChecked;
|
|
351
|
+
};
|
|
352
|
+
for (const root of this.data)
|
|
353
|
+
walk(root);
|
|
354
|
+
return result;
|
|
355
|
+
}
|
|
172
356
|
handleToggleExpand = (node, e) => {
|
|
173
357
|
e.stopPropagation();
|
|
174
358
|
const current = [...this.internalExpanded];
|
|
@@ -188,36 +372,41 @@ export class TreeSelect {
|
|
|
188
372
|
this.modelValue = this.multiple ? [] : '';
|
|
189
373
|
this.hbChange.emit(this.modelValue);
|
|
190
374
|
};
|
|
191
|
-
renderNode = (node, level) => {
|
|
375
|
+
renderNode = (node, level, indeterminateKeys) => {
|
|
192
376
|
const hasChildren = !!(node.children && node.children.length > 0);
|
|
193
377
|
const expanded = this.internalExpanded.includes(node.key);
|
|
194
378
|
const selected = this.internalSelected.includes(node.key);
|
|
195
379
|
const checked = this.internalChecked.includes(node.key);
|
|
380
|
+
const indeterminate = indeterminateKeys.has(node.key);
|
|
196
381
|
const disabled = !!node.disabled;
|
|
197
|
-
|
|
382
|
+
// A2:roving tabindex 跟随 focusKey;无键盘焦点时回退到选中项
|
|
383
|
+
const fallbackFocus = this.internalSelected.length > 0 ? this.internalSelected[this.internalSelected.length - 1] : null;
|
|
384
|
+
const effectiveFocus = this.focusKey ?? fallbackFocus;
|
|
385
|
+
const isFocused = effectiveFocus === node.key;
|
|
386
|
+
return (h("li", { class: { 'hb-tree-select__node': true, 'hb-tree-select__node--disabled': disabled }, "data-tree-key": node.key, role: "treeitem", "aria-level": level + 1, "aria-expanded": hasChildren ? String(expanded) : undefined, "aria-selected": selected ? 'true' : 'false', "aria-disabled": disabled ? 'true' : undefined, tabindex: isFocused ? 0 : -1 }, h("div", { class: {
|
|
198
387
|
'hb-tree-select__node-content': true,
|
|
199
388
|
'hb-tree-select__node-content--selected': selected,
|
|
200
389
|
'hb-tree-select__node-content--checked': checked,
|
|
201
|
-
}, style: { paddingLeft: `${level * 18 + 8}px` } }, h("span", { class: "hb-tree-select__switcher", onClick:
|
|
390
|
+
}, style: { paddingLeft: `${level * 18 + 8}px` } }, h("span", { class: "hb-tree-select__switcher", onClick: e => hasChildren && this.handleToggleExpand(node, e) }, hasChildren ? (h("span", { class: { 'hb-tree-select__arrow': true, 'hb-tree-select__arrow--expanded': expanded }, "aria-hidden": "true" }, h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }, h("path", { d: "M9 6l6 6-6 6" })))) : null), this.checkable && (h("span", { class: {
|
|
202
391
|
'hb-tree-select__checkbox': true,
|
|
203
392
|
'hb-tree-select__checkbox--checked': checked,
|
|
393
|
+
'hb-tree-select__checkbox--indeterminate': indeterminate,
|
|
204
394
|
'hb-tree-select__checkbox--disabled': disabled,
|
|
205
|
-
}, onClick: () => !disabled && this.handleNodeCheck(node
|
|
395
|
+
}, role: "checkbox", "aria-checked": indeterminate ? 'mixed' : checked ? 'true' : 'false', onClick: () => !disabled && this.handleNodeCheck(node) }, checked ? (h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 3, "stroke-linecap": "round", "stroke-linejoin": "round" }, h("path", { d: "M5 12l5 5L20 7" }))) : indeterminate ? (h("span", { class: "hb-tree-select__checkbox-dash" })) : null)), h("span", { class: "hb-tree-select__title", onClick: () => !disabled && this.handleNodeSelect(node.key) }, node.title)), hasChildren && expanded && (h("ul", { class: "hb-tree-select__children", role: "group" }, node.children.map(child => this.renderNode(child, level + 1, indeterminateKeys))))));
|
|
206
396
|
};
|
|
207
397
|
render() {
|
|
208
398
|
const displayText = this.getDisplayText();
|
|
209
|
-
const hasValue = this.multiple
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
return (h("div", { key: '38d8a150ce1436bbea77250dd0bb3a44b9722cbc', class: {
|
|
399
|
+
const hasValue = this.multiple ? Array.isArray(this.modelValue) && this.modelValue.length > 0 : typeof this.modelValue === 'string' && this.modelValue !== '';
|
|
400
|
+
const indeterminateKeys = this.checkable ? this.computeIndeterminateKeys() : new Set();
|
|
401
|
+
return (h("div", { key: '46d75f2c1014766b178e35a6f1684ea311f080df', class: {
|
|
213
402
|
'hb-tree-select': true,
|
|
214
403
|
'hb-tree-select--open': this.isOpen,
|
|
215
404
|
'hb-tree-select--disabled': this.disabled,
|
|
216
405
|
'hb-tree-select--multiple': this.multiple,
|
|
217
|
-
} }, h("div", { key: '
|
|
406
|
+
} }, h("div", { key: '9921be6e6ce72570f8b3b9fcd5921219ec8c77e7', class: "hb-tree-select__input-wrapper", onClick: this.toggleDropdown }, h("span", { key: '503b5691f216ae8bba1bff142ad0c0d62a28c19c', class: {
|
|
218
407
|
'hb-tree-select__display': true,
|
|
219
408
|
'hb-tree-select__display--placeholder': !hasValue,
|
|
220
|
-
} }, hasValue ? displayText : this.placeholder), h("span", { key: '
|
|
409
|
+
} }, hasValue ? displayText : this.placeholder), h("span", { key: 'dd879d7ab4bc3cdff8fda6e5555e445fd2353b08', class: "hb-tree-select__suffix" }, hasValue && (h("span", { key: '7891ba744427d27eebdf077eca94555e6252b79d', class: "hb-tree-select__clear", onClick: this.handleClear, role: "button", "aria-label": "\u6E05\u7A7A", tabIndex: 0, onKeyDown: activationClickHandler }, h("svg", { key: '39de157416b682136d7fd17f034af52467812086', viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }, h("path", { key: '06556664f1fdd4f2e497abb4ffd3fe4b478ee2db', d: "M6 6l12 12M18 6L6 18" })))), h("span", { key: '2f3ad915c327519223f73fed8e4fe51b291a2647', class: { 'hb-tree-select__arrow-icon': true, 'hb-tree-select__arrow-icon--open': this.isOpen }, "aria-hidden": "true" }, h("svg", { key: 'bed9693364d571477d6540250e3c93a4bfcea2cd', viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }, h("path", { key: '830a03a1f977a0a577e03728c471dd8d2cd85c6d', d: "M6 9l6 6 6-6" }))))), this.isOpen && (h("div", { key: '25754f9eeaea710c0f7facc4d57213db0e0755d3', class: "hb-tree-select__dropdown" }, this.data.length === 0 ? (h("div", { class: "hb-tree-select__empty" }, "\u6682\u65E0\u6570\u636E")) : (h("ul", { class: "hb-tree-select__tree", role: "tree", tabindex: -1, onKeyDown: this.handleTreeKeydown }, this.data.map(node => this.renderNode(node, 0, indeterminateKeys))))))));
|
|
221
410
|
}
|
|
222
411
|
static get is() { return "hb-tree-select"; }
|
|
223
412
|
static get encapsulation() { return "shadow"; }
|
|
@@ -399,7 +588,8 @@ export class TreeSelect {
|
|
|
399
588
|
"isOpen": {},
|
|
400
589
|
"internalExpanded": {},
|
|
401
590
|
"internalSelected": {},
|
|
402
|
-
"internalChecked": {}
|
|
591
|
+
"internalChecked": {},
|
|
592
|
+
"focusKey": {}
|
|
403
593
|
};
|
|
404
594
|
}
|
|
405
595
|
static get events() {
|
|
@@ -436,5 +626,11 @@ export class TreeSelect {
|
|
|
436
626
|
}];
|
|
437
627
|
}
|
|
438
628
|
static get elementRef() { return "el"; }
|
|
629
|
+
static get watchers() {
|
|
630
|
+
return [{
|
|
631
|
+
"propName": "modelValue",
|
|
632
|
+
"methodName": "handleModelValueChange"
|
|
633
|
+
}];
|
|
634
|
+
}
|
|
439
635
|
}
|
|
440
636
|
//# sourceMappingURL=TreeSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelect.js","sourceRoot":"","sources":["../../../src/components/TreeSelect/TreeSelect.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Element } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport type { TreeNode } from '../Tree/Tree';\n\n/**\n * TreeSelect 树形选择器\n * 类似 Select,但下拉选项以树形结构展示,支持单选与多选\n */\n@Component({\n tag: 'hb-tree-select',\n styleUrl: 'tree-select.css',\n shadow: true,\n})\nexport class TreeSelect {\n @Element() el: HTMLElement;\n\n /**\n * 可选项数据源(与 Tree 相同的递归树结构)\n */\n @Prop() data: TreeNode[] = [];\n\n /**\n * (受控)绑定值,单选为 string,多选为 string[]\n */\n @Prop({ mutable: true }) modelValue: string | string[] = '';\n\n /**\n * 是否多选\n * @default false\n */\n @Prop() multiple: boolean = false;\n\n /**\n * 占位文本\n * @default '请选择'\n */\n @Prop() placeholder: string = '请选择';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否显示 checkbox(多选模式下推荐开启)\n * @default false\n */\n @Prop() checkable: boolean = false;\n\n /**\n * 是否默认展开全部节点\n * @default false\n */\n @Prop() defaultExpandAll: boolean = false;\n\n @State() isOpen: boolean = false;\n @State() internalExpanded: string[] = [];\n @State() internalSelected: string[] = [];\n @State() internalChecked: string[] = [];\n\n /**\n * 值变化事件(单选为 string,多选为 string[])\n */\n @Event() hbChange: EventEmitter<string | string[]>;\n\n /**\n * 下拉浮层显隐变化事件\n */\n @Event() hbVisibleChange: EventEmitter<boolean>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => this.closeDropdown(),\n });\n\n componentWillLoad() {\n this.syncFromModelValue();\n if (this.defaultExpandAll) {\n const all: string[] = [];\n this.collectExpandableKeys(this.data, all);\n this.internalExpanded = all;\n }\n }\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => this.closeDropdown(),\n });\n this.clickOutside.connect();\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n private syncFromModelValue() {\n if (this.multiple) {\n const arr = Array.isArray(this.modelValue) ? this.modelValue : [];\n this.internalSelected = [...arr];\n this.internalChecked = [...arr];\n } else {\n const single = typeof this.modelValue === 'string' ? this.modelValue : '';\n this.internalSelected = single ? [single] : [];\n this.internalChecked = single ? [single] : [];\n }\n }\n\n private collectExpandableKeys(nodes: TreeNode[], out: string[]) {\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n out.push(node.key);\n this.collectExpandableKeys(node.children, out);\n }\n }\n }\n\n private findTitle(nodes: TreeNode[], key: string): string | null {\n for (const node of nodes) {\n if (node.key === key) return node.title;\n if (node.children) {\n const found = this.findTitle(node.children, key);\n if (found) return found;\n }\n }\n return null;\n }\n\n private getDisplayText(): string {\n if (this.multiple) {\n const arr = Array.isArray(this.modelValue) ? this.modelValue : [];\n if (arr.length === 0) return '';\n const titles = arr.map((k) => this.findTitle(this.data, k) || k);\n return titles.join(' / ');\n }\n const single = typeof this.modelValue === 'string' ? this.modelValue : '';\n return single ? this.findTitle(this.data, single) || single : '';\n }\n\n private openDropdown = () => {\n if (this.disabled || this.isOpen) return;\n this.isOpen = true;\n this.hbVisibleChange.emit(true);\n };\n\n private closeDropdown = () => {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n };\n\n private toggleDropdown = () => {\n if (this.disabled) return;\n if (this.isOpen) this.closeDropdown();\n else this.openDropdown();\n };\n\n private handleNodeSelect = (key: string) => {\n if (this.multiple) {\n const current = [...this.internalSelected];\n const idx = current.indexOf(key);\n if (idx >= 0) current.splice(idx, 1);\n else current.push(key);\n this.internalSelected = current;\n this.modelValue = current;\n this.hbChange.emit(current);\n } else {\n this.internalSelected = [key];\n this.modelValue = key;\n this.hbChange.emit(key);\n this.closeDropdown();\n }\n };\n\n private handleNodeCheck = (key: string) => {\n // TODO: 父子联动 —— 当前仅管理单个节点勾选状态。\n const current = [...this.internalChecked];\n const idx = current.indexOf(key);\n if (idx >= 0) current.splice(idx, 1);\n else current.push(key);\n this.internalChecked = current;\n this.modelValue = current;\n this.hbChange.emit(current);\n };\n\n private handleToggleExpand = (node: TreeNode, e: Event) => {\n e.stopPropagation();\n const current = [...this.internalExpanded];\n const idx = current.indexOf(node.key);\n if (idx >= 0) current.splice(idx, 1);\n else current.push(node.key);\n this.internalExpanded = current;\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n if (this.disabled) return;\n this.internalSelected = [];\n this.internalChecked = [];\n this.modelValue = this.multiple ? [] : '';\n this.hbChange.emit(this.modelValue);\n };\n\n private renderNode = (node: TreeNode, level: number): any => {\n const hasChildren = !!(node.children && node.children.length > 0);\n const expanded = this.internalExpanded.includes(node.key);\n const selected = this.internalSelected.includes(node.key);\n const checked = this.internalChecked.includes(node.key);\n const disabled = !!node.disabled;\n\n return (\n <li class={{ 'hb-tree-select__node': true, 'hb-tree-select__node--disabled': disabled }} role=\"treeitem\">\n <div\n class={{\n 'hb-tree-select__node-content': true,\n 'hb-tree-select__node-content--selected': selected,\n 'hb-tree-select__node-content--checked': checked,\n }}\n style={{ paddingLeft: `${level * 18 + 8}px` }}\n >\n <span class=\"hb-tree-select__switcher\" onClick={(e) => hasChildren && this.handleToggleExpand(node, e)}>\n {hasChildren ? (\n <span class={{ 'hb-tree-select__arrow': true, 'hb-tree-select__arrow--expanded': expanded }}>▶</span>\n ) : null}\n </span>\n\n {this.checkable && (\n <span\n class={{\n 'hb-tree-select__checkbox': true,\n 'hb-tree-select__checkbox--checked': checked,\n 'hb-tree-select__checkbox--disabled': disabled,\n }}\n onClick={() => !disabled && this.handleNodeCheck(node.key)}\n >\n {checked ? '✓' : ''}\n </span>\n )}\n\n <span class=\"hb-tree-select__title\" onClick={() => !disabled && this.handleNodeSelect(node.key)}>\n {node.title}\n </span>\n </div>\n\n {hasChildren && expanded && (\n <ul class=\"hb-tree-select__children\" role=\"group\">\n {node.children!.map((child) => this.renderNode(child, level + 1))}\n </ul>\n )}\n </li>\n );\n };\n\n render() {\n const displayText = this.getDisplayText();\n const hasValue = this.multiple\n ? Array.isArray(this.modelValue) && this.modelValue.length > 0\n : typeof this.modelValue === 'string' && this.modelValue !== '';\n\n return (\n <div\n class={{\n 'hb-tree-select': true,\n 'hb-tree-select--open': this.isOpen,\n 'hb-tree-select--disabled': this.disabled,\n 'hb-tree-select--multiple': this.multiple,\n }}\n >\n <div class=\"hb-tree-select__input-wrapper\" onClick={this.toggleDropdown}>\n <span\n class={{\n 'hb-tree-select__display': true,\n 'hb-tree-select__display--placeholder': !hasValue,\n }}\n >\n {hasValue ? displayText : this.placeholder}\n </span>\n <span class=\"hb-tree-select__suffix\">\n {hasValue && (\n <span class=\"hb-tree-select__clear\" onClick={this.handleClear}>\n ×\n </span>\n )}\n <span class={{ 'hb-tree-select__arrow-icon': true, 'hb-tree-select__arrow-icon--open': this.isOpen }}>▼</span>\n </span>\n </div>\n\n {this.isOpen && (\n <div class=\"hb-tree-select__dropdown\">\n {this.data.length === 0 ? (\n <div class=\"hb-tree-select__empty\">暂无数据</div>\n ) : (\n <ul class=\"hb-tree-select__tree\" role=\"tree\">\n {this.data.map((node) => this.renderNode(node, 0))}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TreeSelect.js","sourceRoot":"","sources":["../../../src/components/TreeSelect/TreeSelect.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport { activationClickHandler } from '../../utils/a11y';\nimport type { TreeNode } from '../Tree/Tree';\n\n/**\n * TreeSelect 树形选择器\n * 类似 Select,但下拉选项以树形结构展示,支持单选与多选\n */\n@Component({\n tag: 'hb-tree-select',\n styleUrl: 'tree-select.css',\n shadow: true,\n})\nexport class TreeSelect {\n @Element() el: HTMLElement;\n\n /**\n * 可选项数据源(与 Tree 相同的递归树结构)\n */\n @Prop() data: TreeNode[] = [];\n\n /**\n * (受控)绑定值,单选为 string,多选为 string[]\n */\n @Prop({ mutable: true }) modelValue: string | string[] = '';\n\n /**\n * 是否多选\n * @default false\n */\n @Prop() multiple: boolean = false;\n\n /**\n * 占位文本\n * @default '请选择'\n */\n @Prop() placeholder: string = '请选择';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否显示 checkbox(多选模式下推荐开启)\n * @default false\n */\n @Prop() checkable: boolean = false;\n\n /**\n * 是否默认展开全部节点\n * @default false\n */\n @Prop() defaultExpandAll: boolean = false;\n\n @State() isOpen: boolean = false;\n @State() internalExpanded: string[] = [];\n @State() internalSelected: string[] = [];\n @State() internalChecked: string[] = [];\n /** 键盘焦点节点 key(A2:roving tabindex,与选中态解耦) */\n @State() focusKey: string | null = null;\n\n /**\n * 值变化事件(单选为 string,多选为 string[])\n */\n @Event() hbChange: EventEmitter<string | string[]>;\n\n /**\n * 下拉浮层显隐变化事件\n */\n @Event() hbVisibleChange: EventEmitter<boolean>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => this.closeDropdown(),\n });\n\n componentWillLoad() {\n this.syncFromModelValue();\n if (this.defaultExpandAll) {\n const all: string[] = [];\n this.collectExpandableKeys(this.data, all);\n this.internalExpanded = all;\n }\n }\n\n /**\n * 受控同步:父组件后续修改 modelValue 时,重算 internalSelected/internalChecked。\n * 修复 B4——修复前仅 componentWillLoad 同步一次,受控改值后选中/勾选状态不更新。\n */\n @Watch('modelValue')\n handleModelValueChange() {\n this.syncFromModelValue();\n }\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => this.closeDropdown(),\n });\n this.clickOutside.connect();\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n private syncFromModelValue() {\n if (this.multiple) {\n const arr = Array.isArray(this.modelValue) ? this.modelValue : [];\n this.internalSelected = [...arr];\n this.internalChecked = [...arr];\n } else {\n const single = typeof this.modelValue === 'string' ? this.modelValue : '';\n this.internalSelected = single ? [single] : [];\n this.internalChecked = single ? [single] : [];\n }\n }\n\n /**\n * 构建当前可见节点的扁平列表(仅含已展开父节点的后代),用于键盘线性导航(A2)。\n */\n private getFlattenedVisibleNodes(): { node: TreeNode; level: number; parentKey: string | null }[] {\n const out: { node: TreeNode; level: number; parentKey: string | null }[] = [];\n const walk = (nodes: TreeNode[], level: number, parentKey: string | null) => {\n for (const node of nodes) {\n out.push({ node, level, parentKey });\n if (node.children && node.children.length > 0 && this.internalExpanded.includes(node.key)) {\n walk(node.children, level + 1, node.key);\n }\n }\n };\n walk(this.data, 0, null);\n return out;\n }\n\n /**\n * Tree 键盘导航(WAI-ARIA Tree View 模式,A2 修复):\n * ↑↓ 线性移动、→ 展开/进子、← 折叠/回父、Enter/Space 选中、Home/End 跳首尾。\n * 焦点(focusKey)与选中态(internalSelected/internalChecked)解耦。\n */\n private handleTreeKeydown = (e: KeyboardEvent) => {\n const flat = this.getFlattenedVisibleNodes();\n if (flat.length === 0) return;\n\n let focusKey: string | null = this.focusKey;\n if (!focusKey && this.internalSelected.length > 0) focusKey = this.internalSelected[this.internalSelected.length - 1];\n let focusIdx = focusKey ? flat.findIndex(x => x.node.key === focusKey) : -1;\n if (focusIdx < 0 || flat[focusIdx].node.disabled) {\n focusIdx = flat.findIndex(x => !x.node.disabled);\n if (focusIdx < 0) return;\n }\n const enabledFlatIndices = flat\n .map((x, i) => ({ x, i }))\n .filter(o => !o.x.node.disabled)\n .map(o => o.i);\n const posInEnabled = enabledFlatIndices.indexOf(focusIdx);\n const current = flat[focusIdx];\n const isLeaf = !(current.node.children && current.node.children.length > 0);\n const expanded = !isLeaf && this.internalExpanded.includes(current.node.key);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n this.focusKey = flat[enabledFlatIndices[(posInEnabled + 1) % enabledFlatIndices.length]].node.key;\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const n = enabledFlatIndices.length;\n this.focusKey = flat[enabledFlatIndices[(posInEnabled - 1 + n) % n]].node.key;\n break;\n }\n case 'ArrowRight': {\n e.preventDefault();\n if (isLeaf) return;\n if (!expanded) {\n this.handleToggleExpand(current.node, { stopPropagation: () => {} } as unknown as Event);\n } else {\n const firstChildIdx = flat.findIndex((x, i) => i > focusIdx && x.parentKey === current.node.key && !x.node.disabled);\n if (firstChildIdx >= 0) this.focusKey = flat[firstChildIdx].node.key;\n }\n break;\n }\n case 'ArrowLeft': {\n e.preventDefault();\n if (!isLeaf && expanded) {\n this.handleToggleExpand(current.node, { stopPropagation: () => {} } as unknown as Event);\n } else if (current.parentKey && !flat.find(x => x.node.key === current.parentKey)!.node.disabled) {\n this.focusKey = current.parentKey;\n }\n break;\n }\n case 'Home':\n e.preventDefault();\n this.focusKey = flat[enabledFlatIndices[0]].node.key;\n break;\n case 'End':\n e.preventDefault();\n this.focusKey = flat[enabledFlatIndices[enabledFlatIndices.length - 1]].node.key;\n break;\n case 'Enter':\n case ' ':\n case 'Spacebar': {\n e.preventDefault();\n if (this.checkable) this.handleNodeCheck(current.node);\n else this.handleNodeSelect(current.node.key);\n break;\n }\n default:\n return;\n }\n };\n\n private collectExpandableKeys(nodes: TreeNode[], out: string[]) {\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n out.push(node.key);\n this.collectExpandableKeys(node.children, out);\n }\n }\n }\n\n private findTitle(nodes: TreeNode[], key: string): string | null {\n for (const node of nodes) {\n if (node.key === key) return node.title;\n if (node.children) {\n const found = this.findTitle(node.children, key);\n if (found) return found;\n }\n }\n return null;\n }\n\n private getDisplayText(): string {\n if (this.multiple) {\n const arr = Array.isArray(this.modelValue) ? this.modelValue : [];\n if (arr.length === 0) return '';\n const titles = arr.map(k => this.findTitle(this.data, k) || k);\n return titles.join(' / ');\n }\n const single = typeof this.modelValue === 'string' ? this.modelValue : '';\n return single ? this.findTitle(this.data, single) || single : '';\n }\n\n private openDropdown = () => {\n if (this.disabled || this.isOpen) return;\n this.isOpen = true;\n this.hbVisibleChange.emit(true);\n };\n\n private closeDropdown = () => {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n };\n\n private toggleDropdown = () => {\n if (this.disabled) return;\n if (this.isOpen) this.closeDropdown();\n else this.openDropdown();\n };\n\n private handleNodeSelect = (key: string) => {\n if (this.multiple) {\n const current = [...this.internalSelected];\n const idx = current.indexOf(key);\n if (idx >= 0) current.splice(idx, 1);\n else current.push(key);\n this.internalSelected = current;\n this.modelValue = current;\n this.hbChange.emit(current);\n } else {\n this.internalSelected = [key];\n this.modelValue = key;\n this.hbChange.emit(key);\n this.closeDropdown();\n }\n };\n\n private handleNodeCheck = (node: TreeNode) => {\n // 父子联动(对齐 Tree 组件算法):勾选/取消自身 + 级联后代 + 自底向上修正祖先\n const next = new Set(this.internalChecked);\n const wasChecked = next.has(node.key);\n if (wasChecked) {\n this.removeDescendantKeys(node, next);\n next.delete(node.key);\n } else {\n next.add(node.key);\n this.collectCheckableDescendantKeys(node, next);\n }\n this.reconcileAncestors(node, next);\n const result = Array.from(next);\n this.internalChecked = result;\n this.modelValue = result;\n this.hbChange.emit(result);\n };\n\n /** 取消父级时级联取消所有后代(含禁用项,因为它们是被父带选的) */\n private removeDescendantKeys(node: TreeNode, out: Set<string>) {\n if (!node.children) return;\n for (const child of node.children) {\n out.delete(child.key);\n this.removeDescendantKeys(child, out);\n }\n }\n\n /** 勾选父级时级联勾选所有非禁用后代 */\n private collectCheckableDescendantKeys(node: TreeNode, out: Set<string>) {\n if (!node.children) return;\n for (const child of node.children) {\n if (!child.disabled) out.add(child.key);\n this.collectCheckableDescendantKeys(child, out);\n }\n }\n\n /** 自底向上修正祖先:所有非禁用子节点全选 → 父勾选;否则移出(部分选体现为 indeterminate) */\n private reconcileAncestors(node: TreeNode, next: Set<string>) {\n const parents = this.findAncestors(this.data, node.key, []);\n for (const parent of parents) {\n if (parent.disabled || !parent.children || parent.children.length === 0) continue;\n const checkable = parent.children.filter(c => !c.disabled);\n if (checkable.length === 0) continue;\n if (checkable.every(c => next.has(c.key))) next.add(parent.key);\n else next.delete(parent.key);\n }\n }\n\n private findAncestors(nodes: TreeNode[], key: string, acc: TreeNode[]): TreeNode[] | null {\n for (const node of nodes) {\n if (node.key === key) return acc;\n if (node.children && node.children.length > 0) {\n const found = this.findAncestors(node.children, key, [node, ...acc]);\n if (found) return found;\n }\n }\n return null;\n }\n\n /** 计算当前 checked 集合下处于「部分选中」的节点(用于三方态渲染) */\n private computeIndeterminateKeys(): Set<string> {\n const result = new Set<string>();\n const checked = new Set(this.internalChecked);\n const walk = (node: TreeNode): boolean => {\n if (!node.children || node.children.length === 0) return false;\n let hasChecked = false;\n for (const child of node.children) {\n if (walk(child)) hasChecked = true;\n if (checked.has(child.key)) hasChecked = true;\n }\n if (hasChecked && !checked.has(node.key)) result.add(node.key);\n return hasChecked;\n };\n for (const root of this.data) walk(root);\n return result;\n }\n\n private handleToggleExpand = (node: TreeNode, e: Event) => {\n e.stopPropagation();\n const current = [...this.internalExpanded];\n const idx = current.indexOf(node.key);\n if (idx >= 0) current.splice(idx, 1);\n else current.push(node.key);\n this.internalExpanded = current;\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n if (this.disabled) return;\n this.internalSelected = [];\n this.internalChecked = [];\n this.modelValue = this.multiple ? [] : '';\n this.hbChange.emit(this.modelValue);\n };\n\n private renderNode = (node: TreeNode, level: number, indeterminateKeys: Set<string>): any => {\n const hasChildren = !!(node.children && node.children.length > 0);\n const expanded = this.internalExpanded.includes(node.key);\n const selected = this.internalSelected.includes(node.key);\n const checked = this.internalChecked.includes(node.key);\n const indeterminate = indeterminateKeys.has(node.key);\n const disabled = !!node.disabled;\n // A2:roving tabindex 跟随 focusKey;无键盘焦点时回退到选中项\n const fallbackFocus = this.internalSelected.length > 0 ? this.internalSelected[this.internalSelected.length - 1] : null;\n const effectiveFocus = this.focusKey ?? fallbackFocus;\n const isFocused = effectiveFocus === node.key;\n\n return (\n <li\n class={{ 'hb-tree-select__node': true, 'hb-tree-select__node--disabled': disabled }}\n data-tree-key={node.key}\n role=\"treeitem\"\n aria-level={level + 1}\n aria-expanded={hasChildren ? String(expanded) : undefined}\n aria-selected={selected ? 'true' : 'false'}\n aria-disabled={disabled ? 'true' : undefined}\n tabindex={isFocused ? 0 : -1}\n >\n <div\n class={{\n 'hb-tree-select__node-content': true,\n 'hb-tree-select__node-content--selected': selected,\n 'hb-tree-select__node-content--checked': checked,\n }}\n style={{ paddingLeft: `${level * 18 + 8}px` }}\n >\n <span class=\"hb-tree-select__switcher\" onClick={e => hasChildren && this.handleToggleExpand(node, e)}>\n {hasChildren ? (\n <span class={{ 'hb-tree-select__arrow': true, 'hb-tree-select__arrow--expanded': expanded }} aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n </span>\n ) : null}\n </span>\n\n {this.checkable && (\n <span\n class={{\n 'hb-tree-select__checkbox': true,\n 'hb-tree-select__checkbox--checked': checked,\n 'hb-tree-select__checkbox--indeterminate': indeterminate,\n 'hb-tree-select__checkbox--disabled': disabled,\n }}\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked ? 'true' : 'false'}\n onClick={() => !disabled && this.handleNodeCheck(node)}\n >\n {checked ? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={3} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 12l5 5L20 7\" />\n </svg>\n ) : indeterminate ? (\n <span class=\"hb-tree-select__checkbox-dash\" />\n ) : null}\n </span>\n )}\n\n <span class=\"hb-tree-select__title\" onClick={() => !disabled && this.handleNodeSelect(node.key)}>\n {node.title}\n </span>\n </div>\n\n {hasChildren && expanded && (\n <ul class=\"hb-tree-select__children\" role=\"group\">\n {node.children!.map(child => this.renderNode(child, level + 1, indeterminateKeys))}\n </ul>\n )}\n </li>\n );\n };\n\n render() {\n const displayText = this.getDisplayText();\n const hasValue = this.multiple ? Array.isArray(this.modelValue) && this.modelValue.length > 0 : typeof this.modelValue === 'string' && this.modelValue !== '';\n const indeterminateKeys = this.checkable ? this.computeIndeterminateKeys() : new Set<string>();\n\n return (\n <div\n class={{\n 'hb-tree-select': true,\n 'hb-tree-select--open': this.isOpen,\n 'hb-tree-select--disabled': this.disabled,\n 'hb-tree-select--multiple': this.multiple,\n }}\n >\n <div class=\"hb-tree-select__input-wrapper\" onClick={this.toggleDropdown}>\n <span\n class={{\n 'hb-tree-select__display': true,\n 'hb-tree-select__display--placeholder': !hasValue,\n }}\n >\n {hasValue ? displayText : this.placeholder}\n </span>\n <span class=\"hb-tree-select__suffix\">\n {hasValue && (\n <span class=\"hb-tree-select__clear\" onClick={this.handleClear} role=\"button\" aria-label=\"清空\" tabIndex={0} onKeyDown={activationClickHandler}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n )}\n <span class={{ 'hb-tree-select__arrow-icon': true, 'hb-tree-select__arrow-icon--open': this.isOpen }} aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </span>\n </span>\n </div>\n\n {this.isOpen && (\n <div class=\"hb-tree-select__dropdown\">\n {this.data.length === 0 ? (\n <div class=\"hb-tree-select__empty\">暂无数据</div>\n ) : (\n <ul class=\"hb-tree-select__tree\" role=\"tree\" tabindex={-1} onKeyDown={this.handleTreeKeydown}>\n {this.data.map(node => this.renderNode(node, 0, indeterminateKeys))}\n </ul>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|
|
@@ -62,22 +62,35 @@
|
|
|
62
62
|
justify-content: center;
|
|
63
63
|
width: 16px;
|
|
64
64
|
height: 16px;
|
|
65
|
-
font-size: 12px;
|
|
66
65
|
border-radius: 50%;
|
|
67
66
|
color: var(--hb-color-text-tertiary);
|
|
68
67
|
background-color: var(--hb-color-fill);
|
|
69
68
|
cursor: pointer;
|
|
70
69
|
}
|
|
71
70
|
|
|
71
|
+
.hb-tree-select__clear svg {
|
|
72
|
+
width: 10px;
|
|
73
|
+
height: 10px;
|
|
74
|
+
}
|
|
75
|
+
|
|
72
76
|
.hb-tree-select__clear:hover {
|
|
73
77
|
color: var(--hb-color-text-secondary);
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
.hb-tree-select__arrow-icon {
|
|
77
|
-
|
|
81
|
+
display: inline-flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
width: 12px;
|
|
84
|
+
height: 12px;
|
|
85
|
+
color: var(--hb-color-text-tertiary);
|
|
78
86
|
transition: transform var(--hb-transition-duration, 0.2s);
|
|
79
87
|
}
|
|
80
88
|
|
|
89
|
+
.hb-tree-select__arrow-icon svg {
|
|
90
|
+
width: 100%;
|
|
91
|
+
height: 100%;
|
|
92
|
+
}
|
|
93
|
+
|
|
81
94
|
.hb-tree-select__arrow-icon--open {
|
|
82
95
|
transform: rotate(180deg);
|
|
83
96
|
}
|
|
@@ -163,11 +176,20 @@
|
|
|
163
176
|
}
|
|
164
177
|
|
|
165
178
|
.hb-tree-select__arrow {
|
|
166
|
-
|
|
167
|
-
|
|
179
|
+
display: inline-flex;
|
|
180
|
+
align-items: center;
|
|
181
|
+
justify-content: center;
|
|
182
|
+
width: 12px;
|
|
183
|
+
height: 12px;
|
|
184
|
+
color: var(--hb-color-text-tertiary);
|
|
168
185
|
transition: transform var(--hb-transition-duration, 0.2s);
|
|
169
186
|
}
|
|
170
187
|
|
|
188
|
+
.hb-tree-select__arrow svg {
|
|
189
|
+
width: 100%;
|
|
190
|
+
height: 100%;
|
|
191
|
+
}
|
|
192
|
+
|
|
171
193
|
.hb-tree-select__arrow--expanded {
|
|
172
194
|
transform: rotate(90deg);
|
|
173
195
|
}
|
|
@@ -182,17 +204,29 @@
|
|
|
182
204
|
border-radius: var(--hb-border-radius-xs, 2px);
|
|
183
205
|
background-color: var(--hb-color-bg-container);
|
|
184
206
|
color: #fff;
|
|
185
|
-
font-size: 11px;
|
|
186
|
-
line-height: 1;
|
|
187
207
|
flex-shrink: 0;
|
|
188
208
|
transition: all var(--hb-transition-duration, 0.2s);
|
|
189
209
|
}
|
|
190
210
|
|
|
211
|
+
.hb-tree-select__checkbox svg {
|
|
212
|
+
width: 12px;
|
|
213
|
+
height: 12px;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.hb-tree-select__checkbox-dash {
|
|
217
|
+
display: block;
|
|
218
|
+
width: 10px;
|
|
219
|
+
height: 2px;
|
|
220
|
+
background-color: #fff;
|
|
221
|
+
border-radius: 1px;
|
|
222
|
+
}
|
|
223
|
+
|
|
191
224
|
.hb-tree-select__checkbox:hover:not(.hb-tree-select__checkbox--disabled) {
|
|
192
225
|
border-color: var(--hb-color-primary);
|
|
193
226
|
}
|
|
194
227
|
|
|
195
|
-
.hb-tree-select__checkbox--checked
|
|
228
|
+
.hb-tree-select__checkbox--checked,
|
|
229
|
+
.hb-tree-select__checkbox--indeterminate {
|
|
196
230
|
background-color: var(--hb-color-primary);
|
|
197
231
|
border-color: var(--hb-color-primary);
|
|
198
232
|
}
|
|
@@ -153,14 +153,14 @@ export class Upload {
|
|
|
153
153
|
return null;
|
|
154
154
|
}
|
|
155
155
|
render() {
|
|
156
|
-
return (h("div", { key: '
|
|
156
|
+
return (h("div", { key: 'f3d7afc72dbdef70156bab23467daaf538a98221', class: "hb-upload" }, h("div", { key: '04bbe9db8bc37125022550e309a14644a245166e', class: {
|
|
157
157
|
'hb-upload__trigger': true,
|
|
158
158
|
'hb-upload__trigger--drag': this.drag,
|
|
159
159
|
'hb-upload__trigger--dragover': this.isDragover,
|
|
160
160
|
'hb-upload__trigger--disabled': this.disabled,
|
|
161
|
-
}, onClick: this.handleClick, onDrop: this.drag ? this.handleDrop : undefined, onDragOver: this.drag ? this.handleDragOver : undefined, onDragLeave: this.drag ? this.handleDragLeave : undefined }, this.drag ? h("span", null, "\u5C06\u6587\u4EF6\u62D6\u5230\u6B64\u5904\uFF0C\u6216\u70B9\u51FB\u4E0A\u4F20") : h("slot", null, h("button", { type: "button", class: "hb-upload__btn" }, "\u70B9\u51FB\u4E0A\u4F20"))), h("input", { key: '
|
|
161
|
+
}, onClick: this.handleClick, onDrop: this.drag ? this.handleDrop : undefined, onDragOver: this.drag ? this.handleDragOver : undefined, onDragLeave: this.drag ? this.handleDragLeave : undefined }, this.drag ? h("span", null, "\u5C06\u6587\u4EF6\u62D6\u5230\u6B64\u5904\uFF0C\u6216\u70B9\u51FB\u4E0A\u4F20") : h("slot", null, h("button", { type: "button", class: "hb-upload__btn" }, "\u70B9\u51FB\u4E0A\u4F20"))), h("input", { key: '01315d2df66505338104d01b675775e197806d39', type: "file", ref: (el) => {
|
|
162
162
|
this.inputRef = el;
|
|
163
|
-
}, multiple: this.multiple, accept: this.accept, disabled: this.disabled, style: { display: 'none' }, onChange: this.handleChange }), this.fileList.length > 0 && (h("ul", { key: '
|
|
163
|
+
}, multiple: this.multiple, accept: this.accept, disabled: this.disabled, style: { display: 'none' }, onChange: this.handleChange }), this.fileList.length > 0 && (h("ul", { key: '9d30b8fce405c1cbcec9b27ff8f819a0d2cfede4', class: "hb-upload__list" }, this.fileList.map((file, i) => (h("li", { class: { 'hb-upload__item': true, [`hb-upload__item--${file.status}`]: true } }, h("span", { class: "hb-upload__item-name" }, file.name), h("span", { class: "hb-upload__item-size" }, this.formatSize(file.size)), this.renderStatus(file), h("span", { class: "hb-upload__item-remove", onClick: () => this.handleRemove(i) }, "\u00D7"))))))));
|
|
164
164
|
}
|
|
165
165
|
static get is() { return "hb-upload"; }
|
|
166
166
|
static get encapsulation() { return "shadow"; }
|
|
@@ -19,30 +19,38 @@ export class Watermark {
|
|
|
19
19
|
fontColor = 'rgba(0,0,0,0.15)';
|
|
20
20
|
/** 字号 */
|
|
21
21
|
fontSize = 14;
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* P6:SVG data-URI 缓存。仅当依赖 props 变化时重算(escapeXml + encodeURIComponent 较重)。
|
|
24
|
+
* 修复前是 getter,每次 render 重编,父组件频繁重渲染时浪费明显。
|
|
25
|
+
*/
|
|
26
|
+
_bgImageCache = null;
|
|
27
|
+
_bgImageKey = '';
|
|
28
|
+
getBackgroundImage() {
|
|
29
|
+
const key = `${this.content}|${this.width}|${this.height}|${this.gap}|${this.rotate}|${this.fontColor}|${this.fontSize}`;
|
|
30
|
+
if (this._bgImageCache !== null && this._bgImageKey === key) {
|
|
31
|
+
return this._bgImageCache;
|
|
32
|
+
}
|
|
23
33
|
const { width, height, content, fontColor, fontSize, rotate } = this;
|
|
24
34
|
const safeText = this.escapeXml(content || '');
|
|
25
35
|
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}"><text x="50%" y="50%" dy="${fontSize / 4}" text-anchor="middle" fill="${fontColor}" font-size="${fontSize}" font-family="sans-serif" transform="rotate(${rotate} ${width / 2} ${height / 2})">${safeText}</text></svg>`;
|
|
26
|
-
|
|
36
|
+
const result = `url("data:image/svg+xml;utf8,${encodeURIComponent(svg)}")`;
|
|
37
|
+
this._bgImageCache = result;
|
|
38
|
+
this._bgImageKey = key;
|
|
39
|
+
return result;
|
|
27
40
|
}
|
|
28
41
|
escapeXml(input) {
|
|
29
|
-
return input
|
|
30
|
-
.replace(/&/g, '&')
|
|
31
|
-
.replace(/</g, '<')
|
|
32
|
-
.replace(/>/g, '>')
|
|
33
|
-
.replace(/"/g, '"')
|
|
34
|
-
.replace(/'/g, ''');
|
|
42
|
+
return input.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
35
43
|
}
|
|
36
44
|
get layerStyle() {
|
|
37
|
-
const {
|
|
45
|
+
const { width, height, gap } = this;
|
|
38
46
|
return {
|
|
39
|
-
backgroundImage,
|
|
47
|
+
backgroundImage: this.getBackgroundImage(),
|
|
40
48
|
backgroundRepeat: 'repeat',
|
|
41
49
|
backgroundSize: `${width + gap}px ${height + gap}px`,
|
|
42
50
|
};
|
|
43
51
|
}
|
|
44
52
|
render() {
|
|
45
|
-
return (h("div", { key: '
|
|
53
|
+
return (h("div", { key: '1d4bcad1db81f2b2787726fe643c7f4dc519786f', class: "hb-watermark" }, h("div", { key: '07ab80f66ba3347224f71dd7efc6f21e21511109', class: "hb-watermark__content" }, h("slot", { key: '69cf1f3a3bbd71e65ec84a3e4f5ba0d8317b627a' })), h("div", { key: '8f19e58740f4d181be67b5c1582581612634f57e', class: "hb-watermark__layer", style: this.layerStyle, "aria-hidden": "true" })));
|
|
46
54
|
}
|
|
47
55
|
static get is() { return "hb-watermark"; }
|
|
48
56
|
static get encapsulation() { return "shadow"; }
|