huibo-ui 0.4.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-1ffddc59.js → date-helpers-c05ef385.js} +5 -16
- package/dist/cjs/date-helpers-c05ef385.js.map +1 -0
- 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-calendar.cjs.entry.js +2 -2
- package/dist/cjs/hb-calendar.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-cascader.cjs.entry.js +48 -12
- 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.cjs.entry.js +22 -19
- package/dist/cjs/hb-color-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-date-picker-pane.cjs.entry.js +1 -1
- package/dist/cjs/hb-date-picker.cjs.entry.js +13 -10
- package/dist/cjs/hb-date-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-date-range-picker.cjs.entry.js +1 -1
- package/dist/cjs/hb-date-time-picker.cjs.entry.js +1 -1
- 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-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 +27 -15
- 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-form-item.cjs.entry.js +11 -10
- package/dist/cjs/hb-form-item.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-form.cjs.entry.js +12 -7
- package/dist/cjs/hb-form.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-image-preview.cjs.entry.js +1 -1
- 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 +3 -2
- package/dist/cjs/hb-input.cjs.entry.js.map +1 -1
- 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-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 +2 -2
- 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-page-header.cjs.entry.js +1 -1
- package/dist/cjs/hb-pagination.cjs.entry.js +8 -5
- package/dist/cjs/hb-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-popconfirm.cjs.entry.js +27 -8
- package/dist/cjs/hb-popconfirm.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-popover.cjs.entry.js +26 -14
- 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 +3 -3
- package/dist/cjs/hb-rate.cjs.entry.js.map +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 +13 -2
- package/dist/cjs/hb-segmented.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-select.cjs.entry.js +21 -12
- package/dist/cjs/hb-select.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-slider.cjs.entry.js +6 -12
- 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 +2 -2
- 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 +3 -3
- 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 +25 -16
- 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-tooltip.cjs.entry.js +30 -10
- package/dist/cjs/hb-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-tree-select.cjs.entry.js +125 -10
- 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-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/components/Alert/Alert.js +2 -1
- package/dist/collection/components/Alert/Alert.js.map +1 -1
- package/dist/collection/components/Calendar/Calendar.js +2 -2
- package/dist/collection/components/Calendar/Calendar.js.map +1 -1
- package/dist/collection/components/Cascader/Cascader.js +47 -11
- package/dist/collection/components/Cascader/Cascader.js.map +1 -1
- 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 +22 -19
- package/dist/collection/components/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/collection/components/ColorPicker/color-picker.css +8 -3
- package/dist/collection/components/DatePicker/DatePicker.js +12 -9
- package/dist/collection/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/collection/components/DatePicker/date-picker.css +3 -2
- package/dist/collection/components/Descriptions/descriptions.css +30 -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/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 +28 -13
- package/dist/collection/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/collection/components/Dropdown/dropdown.css +24 -2
- 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 +13 -12
- package/dist/collection/components/Form/FormItem.js.map +1 -1
- package/dist/collection/components/Form/form-item.css +8 -2
- 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 +1 -1
- package/dist/collection/components/ImagePreview/ImagePreview.js.map +1 -1
- package/dist/collection/components/Input/Input.js +3 -2
- package/dist/collection/components/Input/Input.js.map +1 -1
- package/dist/collection/components/Input/input.css +1 -2
- 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.map +1 -1
- package/dist/collection/components/Layout/Row.js +2 -2
- package/dist/collection/components/Layout/layout.css +1713 -576
- 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/Message/Message.js +13 -4
- package/dist/collection/components/Message/Message.js.map +1 -1
- package/dist/collection/components/PageHeader/PageHeader.js +1 -1
- package/dist/collection/components/Pagination/Pagination.js +8 -5
- package/dist/collection/components/Pagination/Pagination.js.map +1 -1
- package/dist/collection/components/Popconfirm/Popconfirm.js +28 -6
- 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 +27 -12
- 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 +3 -3
- package/dist/collection/components/Rate/Rate.js.map +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 +15 -1
- package/dist/collection/components/Segmented/Segmented.js.map +1 -1
- package/dist/collection/components/Select/Select.js +21 -12
- package/dist/collection/components/Select/Select.js.map +1 -1
- package/dist/collection/components/Select/select.css +0 -1
- package/dist/collection/components/Slider/Slider.js +6 -12
- package/dist/collection/components/Slider/Slider.js.map +1 -1
- package/dist/collection/components/Slider/slider.css +0 -1
- 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 +2 -2
- package/dist/collection/components/Steps/Steps.js.map +1 -1
- package/dist/collection/components/Switch/Switch.js +3 -3
- package/dist/collection/components/Switch/Switch.js.map +1 -1
- package/dist/collection/components/Switch/switch.css +3 -2
- 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 +6 -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/Tooltip/Tooltip.js +31 -8
- package/dist/collection/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/collection/components/Tooltip/tooltip.css +24 -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 +130 -11
- package/dist/collection/components/TreeSelect/TreeSelect.js.map +1 -1
- 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 +4 -15
- 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-alert.js +2 -1
- package/dist/components/hb-alert.js.map +1 -1
- package/dist/components/hb-calendar.js +2 -2
- package/dist/components/hb-calendar.js.map +1 -1
- package/dist/components/hb-cascader.js +48 -12
- 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.js +22 -19
- package/dist/components/hb-color-picker.js.map +1 -1
- package/dist/components/hb-date-picker-pane.js +1 -1
- package/dist/components/hb-date-picker.js +13 -10
- package/dist/components/hb-date-picker.js.map +1 -1
- package/dist/components/hb-date-range-picker.js +1 -1
- package/dist/components/hb-date-time-picker.js +1 -1
- 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-drawer.js +36 -5
- package/dist/components/hb-drawer.js.map +1 -1
- package/dist/components/hb-dropdown.js +28 -15
- 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-form-item.js +11 -10
- package/dist/components/hb-form-item.js.map +1 -1
- package/dist/components/hb-form.js +12 -7
- package/dist/components/hb-form.js.map +1 -1
- package/dist/components/hb-image-preview.js +1 -1
- 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 +3 -2
- package/dist/components/hb-input.js.map +1 -1
- 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-menu-item.js +15 -5
- package/dist/components/hb-menu-item.js.map +1 -1
- package/dist/components/hb-menu.js +2 -2
- package/dist/components/hb-message.js +13 -4
- package/dist/components/hb-message.js.map +1 -1
- package/dist/components/hb-page-header.js +1 -1
- package/dist/components/hb-pagination.js +8 -5
- package/dist/components/hb-pagination.js.map +1 -1
- package/dist/components/hb-popconfirm.js +28 -8
- package/dist/components/hb-popconfirm.js.map +1 -1
- package/dist/components/hb-popover.js +27 -14
- 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 +3 -3
- package/dist/components/hb-rate.js.map +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 +15 -2
- package/dist/components/hb-segmented.js.map +1 -1
- package/dist/components/hb-select.js +21 -12
- package/dist/components/hb-select.js.map +1 -1
- package/dist/components/hb-slider.js +6 -12
- 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 +2 -2
- package/dist/components/hb-steps.js.map +1 -1
- package/dist/components/hb-sub-menu.js +5 -5
- package/dist/components/hb-switch.js +3 -3
- package/dist/components/hb-switch.js.map +1 -1
- package/dist/components/hb-tab-pane.js +1 -1
- package/dist/components/hb-table.js +25 -16
- 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-tooltip.js +31 -10
- package/dist/components/hb-tooltip.js.map +1 -1
- package/dist/components/hb-tree-select.js +129 -11
- 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-watermark.js +19 -11
- package/dist/components/hb-watermark.js.map +1 -1
- package/dist/{esm/a11y-f9ab2964.js → components/p-00aa34c8.js} +17 -3
- package/dist/components/p-00aa34c8.js.map +1 -0
- package/dist/components/{p-08b4005c.js → p-e0876aca.js} +5 -16
- 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/{components/p-cc0aeb50.js → esm/a11y-e4cde5b0.js} +17 -3
- package/dist/esm/a11y-e4cde5b0.js.map +1 -0
- package/dist/esm/{date-helpers-44507189.js → date-helpers-259ed2f1.js} +5 -16
- package/dist/esm/date-helpers-259ed2f1.js.map +1 -0
- package/dist/esm/hb-alert.entry.js +2 -1
- package/dist/esm/hb-alert.entry.js.map +1 -1
- package/dist/esm/hb-calendar.entry.js +2 -2
- package/dist/esm/hb-calendar.entry.js.map +1 -1
- package/dist/esm/hb-cascader.entry.js +48 -12
- 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.entry.js +22 -19
- package/dist/esm/hb-color-picker.entry.js.map +1 -1
- package/dist/esm/hb-date-picker-pane.entry.js +1 -1
- package/dist/esm/hb-date-picker.entry.js +13 -10
- package/dist/esm/hb-date-picker.entry.js.map +1 -1
- package/dist/esm/hb-date-range-picker.entry.js +1 -1
- package/dist/esm/hb-date-time-picker.entry.js +1 -1
- 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-drawer.entry.js +34 -4
- package/dist/esm/hb-drawer.entry.js.map +1 -1
- package/dist/esm/hb-dropdown.entry.js +27 -15
- 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-form-item.entry.js +11 -10
- package/dist/esm/hb-form-item.entry.js.map +1 -1
- package/dist/esm/hb-form.entry.js +12 -7
- package/dist/esm/hb-form.entry.js.map +1 -1
- package/dist/esm/hb-image-preview.entry.js +1 -1
- 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 +3 -2
- package/dist/esm/hb-input.entry.js.map +1 -1
- 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-menu-item.entry.js +14 -5
- package/dist/esm/hb-menu-item.entry.js.map +1 -1
- package/dist/esm/hb-menu.entry.js +2 -2
- package/dist/esm/hb-message.entry.js +13 -4
- package/dist/esm/hb-message.entry.js.map +1 -1
- package/dist/esm/hb-page-header.entry.js +1 -1
- package/dist/esm/hb-pagination.entry.js +8 -5
- package/dist/esm/hb-pagination.entry.js.map +1 -1
- package/dist/esm/hb-popconfirm.entry.js +27 -8
- package/dist/esm/hb-popconfirm.entry.js.map +1 -1
- package/dist/esm/hb-popover.entry.js +26 -14
- 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 +3 -3
- package/dist/esm/hb-rate.entry.js.map +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 +13 -2
- package/dist/esm/hb-segmented.entry.js.map +1 -1
- package/dist/esm/hb-select.entry.js +21 -12
- package/dist/esm/hb-select.entry.js.map +1 -1
- package/dist/esm/hb-slider.entry.js +6 -12
- 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 +2 -2
- 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 +3 -3
- 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 +25 -16
- 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-tooltip.entry.js +30 -10
- package/dist/esm/hb-tooltip.entry.js.map +1 -1
- package/dist/esm/hb-tree-select.entry.js +125 -10
- 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-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.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-0cc1e3f3.entry.js +2 -0
- package/dist/huibo-ui/p-0cc1e3f3.entry.js.map +1 -0
- package/dist/huibo-ui/{p-678b4212.entry.js → p-0ddae4e9.entry.js} +2 -2
- package/dist/huibo-ui/p-10f6c184.entry.js.map +1 -1
- package/dist/huibo-ui/{p-f4336be9.entry.js → p-14c3b47b.entry.js} +2 -2
- package/dist/huibo-ui/{p-c50ad398.entry.js → p-193efdc0.entry.js} +2 -2
- package/dist/huibo-ui/{p-735bceef.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-2943f5d0.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-0d4b2997.entry.js → p-2bcda1bb.entry.js} +2 -2
- package/dist/huibo-ui/{p-b8d87f7e.entry.js → p-2ca9796a.entry.js} +2 -2
- package/dist/huibo-ui/p-2ca9796a.entry.js.map +1 -0
- package/dist/huibo-ui/{p-7da14d7c.entry.js → p-3042f986.entry.js} +2 -2
- package/dist/huibo-ui/{p-e039155d.entry.js → p-3dacb26b.entry.js} +2 -2
- package/dist/huibo-ui/{p-a084b8e5.entry.js → p-412ff618.entry.js} +2 -2
- package/dist/huibo-ui/{p-6beb5b81.entry.js → p-415295f3.entry.js} +2 -2
- 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-2811e603.entry.js → p-54a28052.entry.js} +2 -2
- package/dist/huibo-ui/p-54a28052.entry.js.map +1 -0
- 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-ccd09d5a.entry.js → p-6518c435.entry.js} +2 -2
- package/dist/huibo-ui/{p-1f8db37a.entry.js → p-687d8dff.entry.js} +2 -2
- 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-e5cbfa9e.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.map +1 -1
- 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-c80f8ace.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-cad57c2d.entry.js → p-7a682c56.entry.js} +2 -2
- package/dist/huibo-ui/{p-a8996d22.entry.js → p-815fc943.entry.js} +2 -2
- package/dist/huibo-ui/{p-af74667d.entry.js → p-89be7973.entry.js} +2 -2
- package/dist/huibo-ui/p-8a202bc5.entry.js.map +1 -1
- package/dist/huibo-ui/{p-213b9de7.entry.js → p-8c4415ed.entry.js} +2 -2
- package/dist/huibo-ui/p-8c4415ed.entry.js.map +1 -0
- package/dist/huibo-ui/{p-8fdbd17c.entry.js → p-950e7465.entry.js} +2 -2
- package/dist/huibo-ui/{p-ab9cf0e4.entry.js → p-96cecd21.entry.js} +2 -2
- package/dist/huibo-ui/p-96cecd21.entry.js.map +1 -0
- package/dist/huibo-ui/{p-2b4556ff.entry.js → p-98b513cd.entry.js} +2 -2
- package/dist/huibo-ui/p-98b513cd.entry.js.map +1 -0
- package/dist/huibo-ui/{p-86bdc48a.entry.js → p-ac18c68b.entry.js} +2 -2
- package/dist/huibo-ui/p-ac18c68b.entry.js.map +1 -0
- package/dist/huibo-ui/{p-89ea1141.entry.js → p-ac45291c.entry.js} +2 -2
- package/dist/huibo-ui/{p-e10fcfbe.entry.js → p-b105cf76.entry.js} +2 -2
- package/dist/huibo-ui/p-b105cf76.entry.js.map +1 -0
- package/dist/huibo-ui/{p-9a5406f0.entry.js → p-b38802b0.entry.js} +2 -2
- package/dist/huibo-ui/{p-9a5406f0.entry.js.map → p-b38802b0.entry.js.map} +1 -1
- 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-41d9c846.entry.js → p-b6afe81e.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-33de6878.entry.js → p-c869842c.entry.js} +2 -2
- package/dist/huibo-ui/p-c869842c.entry.js.map +1 -0
- package/dist/huibo-ui/p-c8e917db.entry.js.map +1 -1
- 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-f5969181.entry.js → p-dd9c6459.entry.js} +2 -2
- package/dist/huibo-ui/{p-08b4005c.js → p-e0876aca.js} +1 -1
- package/dist/huibo-ui/p-e0876aca.js.map +1 -0
- package/dist/huibo-ui/{p-aa5e5e02.entry.js → p-e1773c93.entry.js} +2 -2
- package/dist/huibo-ui/p-e1773c93.entry.js.map +1 -0
- package/dist/huibo-ui/{p-626b48f1.entry.js → p-e73c357f.entry.js} +2 -2
- package/dist/huibo-ui/p-e73c357f.entry.js.map +1 -0
- package/dist/huibo-ui/{p-60532a1f.entry.js → p-e7c73624.entry.js} +2 -2
- package/dist/huibo-ui/p-e7c73624.entry.js.map +1 -0
- package/dist/huibo-ui/{p-13010da2.entry.js → p-e9e7abca.entry.js} +2 -2
- package/dist/huibo-ui/{p-f6889710.entry.js → p-ea0823f3.entry.js} +2 -2
- package/dist/huibo-ui/p-ea0823f3.entry.js.map +1 -0
- package/dist/huibo-ui/{p-b468858e.entry.js → p-f1f2483f.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-fd8301c6.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/Cascader/Cascader.d.ts +12 -0
- 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/Dialog/Dialog.d.ts +13 -1
- package/dist/types/components/Drawer/Drawer.d.ts +4 -0
- package/dist/types/components/Dropdown/Dropdown.d.ts +6 -2
- package/dist/types/components/Form/Form.d.ts +2 -0
- package/dist/types/components/Image/Image.d.ts +6 -0
- package/dist/types/components/Menu/MenuItem.d.ts +8 -1
- package/dist/types/components/Message/Message.d.ts +3 -0
- package/dist/types/components/Popconfirm/Popconfirm.d.ts +6 -2
- package/dist/types/components/Popover/Popover.d.ts +6 -1
- package/dist/types/components/Radio/Radio.d.ts +5 -0
- package/dist/types/components/Segmented/Segmented.d.ts +6 -0
- package/dist/types/components/Select/Select.d.ts +5 -0
- 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 +6 -0
- package/dist/types/components/Tree/Tree.d.ts +24 -0
- package/dist/types/components/TreeSelect/TreeSelect.d.ts +17 -0
- package/dist/types/components/Watermark/Watermark.d.ts +7 -1
- package/dist/types/components.d.ts +40 -4
- package/dist/types/utils/a11y.d.ts +9 -0
- package/dist/types/utils/transition.d.ts +27 -0
- package/package.json +1 -1
- package/dist/cjs/a11y-802de67a.js.map +0 -1
- package/dist/cjs/date-helpers-1ffddc59.js.map +0 -1
- package/dist/components/p-08b4005c.js.map +0 -1
- package/dist/components/p-cc0aeb50.js.map +0 -1
- package/dist/esm/a11y-f9ab2964.js.map +0 -1
- package/dist/esm/date-helpers-44507189.js.map +0 -1
- package/dist/huibo-ui/p-08b4005c.js.map +0 -1
- package/dist/huibo-ui/p-1f8db37a.entry.js.map +0 -1
- package/dist/huibo-ui/p-213b9de7.entry.js.map +0 -1
- package/dist/huibo-ui/p-25fd7d5c.entry.js +0 -2
- package/dist/huibo-ui/p-25fd7d5c.entry.js.map +0 -1
- package/dist/huibo-ui/p-2811e603.entry.js.map +0 -1
- package/dist/huibo-ui/p-2943f5d0.entry.js.map +0 -1
- package/dist/huibo-ui/p-2b4556ff.entry.js.map +0 -1
- package/dist/huibo-ui/p-33de6878.entry.js.map +0 -1
- package/dist/huibo-ui/p-3807da71.entry.js +0 -2
- package/dist/huibo-ui/p-3807da71.entry.js.map +0 -1
- package/dist/huibo-ui/p-47ef7a86.entry.js +0 -2
- package/dist/huibo-ui/p-47ef7a86.entry.js.map +0 -1
- package/dist/huibo-ui/p-4d34e43e.entry.js +0 -2
- package/dist/huibo-ui/p-4d34e43e.entry.js.map +0 -1
- package/dist/huibo-ui/p-54aa2fd8.entry.js +0 -2
- package/dist/huibo-ui/p-54aa2fd8.entry.js.map +0 -1
- package/dist/huibo-ui/p-60532a1f.entry.js.map +0 -1
- package/dist/huibo-ui/p-626b48f1.entry.js.map +0 -1
- package/dist/huibo-ui/p-639f167d.entry.js +0 -2
- package/dist/huibo-ui/p-639f167d.entry.js.map +0 -1
- package/dist/huibo-ui/p-6beb5b81.entry.js.map +0 -1
- package/dist/huibo-ui/p-735bceef.entry.js.map +0 -1
- package/dist/huibo-ui/p-76519752.entry.js +0 -2
- package/dist/huibo-ui/p-76519752.entry.js.map +0 -1
- package/dist/huibo-ui/p-79af2efa.entry.js +0 -2
- package/dist/huibo-ui/p-79af2efa.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-86bdc48a.entry.js.map +0 -1
- package/dist/huibo-ui/p-8a8443b8.entry.js +0 -2
- package/dist/huibo-ui/p-8a8443b8.entry.js.map +0 -1
- package/dist/huibo-ui/p-8fd788c9.entry.js +0 -2
- package/dist/huibo-ui/p-8fd788c9.entry.js.map +0 -1
- package/dist/huibo-ui/p-92521c31.entry.js +0 -2
- package/dist/huibo-ui/p-92521c31.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-aa5e5e02.entry.js.map +0 -1
- package/dist/huibo-ui/p-ab9cf0e4.entry.js.map +0 -1
- package/dist/huibo-ui/p-b8d87f7e.entry.js.map +0 -1
- package/dist/huibo-ui/p-c6c91664.entry.js +0 -2
- package/dist/huibo-ui/p-c6c91664.entry.js.map +0 -1
- package/dist/huibo-ui/p-c80f8ace.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-d79a15b1.entry.js +0 -2
- package/dist/huibo-ui/p-d79a15b1.entry.js.map +0 -1
- package/dist/huibo-ui/p-e10fcfbe.entry.js.map +0 -1
- package/dist/huibo-ui/p-e5cbfa9e.entry.js.map +0 -1
- package/dist/huibo-ui/p-ea74fcae.entry.js.map +0 -1
- package/dist/huibo-ui/p-edbda423.entry.js +0 -2
- package/dist/huibo-ui/p-edbda423.entry.js.map +0 -1
- package/dist/huibo-ui/p-f6889710.entry.js.map +0 -1
- package/dist/huibo-ui/p-f9bb5217.entry.js +0 -2
- package/dist/huibo-ui/p-f9bb5217.entry.js.map +0 -1
- package/dist/huibo-ui/p-fea20295.entry.js +0 -2
- package/dist/huibo-ui/p-fea20295.entry.js.map +0 -1
- /package/dist/huibo-ui/{p-678b4212.entry.js.map → p-0ddae4e9.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-f4336be9.entry.js.map → p-14c3b47b.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-c50ad398.entry.js.map → p-193efdc0.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-0d4b2997.entry.js.map → p-2bcda1bb.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-7da14d7c.entry.js.map → p-3042f986.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-e039155d.entry.js.map → p-3dacb26b.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-a084b8e5.entry.js.map → p-412ff618.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-ccd09d5a.entry.js.map → p-6518c435.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-cad57c2d.entry.js.map → p-7a682c56.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-a8996d22.entry.js.map → p-815fc943.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-af74667d.entry.js.map → p-89be7973.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-8fdbd17c.entry.js.map → p-950e7465.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-89ea1141.entry.js.map → p-ac45291c.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-41d9c846.entry.js.map → p-b6afe81e.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-f5969181.entry.js.map → p-dd9c6459.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-13010da2.entry.js.map → p-e9e7abca.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-b468858e.entry.js.map → p-f1f2483f.entry.js.map} +0 -0
- /package/dist/huibo-ui/{p-fd8301c6.entry.js.map → p-fd6831f9.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"hb-steps.js","mappings":";;;AAAA,MAAM,QAAQ,GAAG,wuOAAwuO,CAAC;AAC1vO,sBAAe,QAAQ;;MCaV,KAAK;;;;;;;IAER,MAAM,GAAW,CAAC,CAAC;IACnB,aAAa,GAAe,SAAS,CAAC;IACtC,WAAW,GAAY,KAAK,CAAC;IAC7B,SAAS,GAA8B,YAAY,CAAC;IAEnD,KAAK,GAAe,EAAE,CAAC;IAEhC,gBAAgB;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,
|
|
1
|
+
{"file":"hb-steps.js","mappings":"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","names":[],"sources":["src/components/Steps/steps.css?tag=hb-steps&encapsulation=shadow","src/components/Steps/Steps.tsx"],"sourcesContent":[":host { display: block; }\n.hb-steps { display: flex; }\n.hb-steps--vertical { flex-direction: column; }\n.hb-steps__item { flex: 1; display: flex; flex-direction: column; align-items: center; position: relative; }\n.hb-steps--vertical .hb-steps__item { flex-direction: row; align-items: flex-start; gap: var(--hb-spacing-sm); padding-bottom: var(--hb-spacing-md); }\n.hb-steps__head { display: flex; align-items: center; width: 100%; }\n.hb-steps__icon {\n width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center;\n font-size: var(--hb-font-size-sm); font-weight: 600; flex-shrink: 0;\n background: var(--hb-color-fill); color: var(--hb-color-text-secondary); transition: all 0.3s;\n}\n.hb-steps__item--process .hb-steps__icon { background: var(--hb-color-primary); color: #fff; }\n.hb-steps__item--finish .hb-steps__icon { background: var(--hb-color-primary); color: #fff; }\n.hb-steps__item--error .hb-steps__icon { background: var(--hb-color-danger); color: #fff; }\n.hb-steps__line { flex: 1; height: 2px; background: var(--hb-color-border-secondary); margin: 0 var(--hb-spacing-xs); }\n.hb-steps__item--finish .hb-steps__line { background: var(--hb-color-primary); }\n.hb-steps__main { text-align: center; margin-top: var(--hb-spacing-xs); }\n.hb-steps--vertical .hb-steps__main { text-align: left; }\n\n/* 对齐方式(alignCenter prop):默认 false 时图标与文字左对齐,true 时居中 */\n.hb-steps:not(.hb-steps--align-center) .hb-steps__item { align-items: flex-start; }\n.hb-steps:not(.hb-steps--align-center) .hb-steps__main { text-align: left; }\n.hb-steps__title { font-size: var(--hb-font-size-sm); font-weight: 600; }\n.hb-steps__item--process .hb-steps__title { color: var(--hb-color-primary); }\n.hb-steps__description { font-size: var(--hb-font-size-xs); color: var(--hb-color-text-secondary); margin-top: 2px; }\n","import { Component, h, Prop, State, Element } from '@stencil/core';\n\nexport type StepStatus = 'wait' | 'process' | 'finish' | 'error';\n\ninterface StepMeta {\n title: string;\n description?: string;\n /** 自定义图标名/标记('hb-icon' name 或文本)。undefined 表示用默认序号/状态图标 */\n icon?: string;\n /** 子项显式状态覆盖(不指定则按 active 自动推导) */\n status?: StepStatus;\n}\n\n@Component({ tag: 'hb-steps', styleUrl: 'steps.css', shadow: true })\nexport class Steps {\n @Element() el: HTMLElement;\n @Prop() active: number = 0;\n @Prop() processStatus: StepStatus = 'process';\n @Prop() alignCenter: boolean = false;\n @Prop() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @State() steps: StepMeta[] = [];\n\n componentDidLoad() {\n const items = this.el.querySelectorAll('hb-step');\n this.steps = Array.from(items).map(item => {\n const node = item as HTMLElement;\n // 仅用 getAttribute:hb-step 的 @Prop() status 默认值为 'wait',\n // 若读 (node as any).status 会拿到默认值,从而错误地覆盖 active 推导。\n // 用户显式在 HTML 上写 status=\"xxx\" 时 getAttribute 才有值。\n return {\n title: node.getAttribute('title') || '',\n description: node.getAttribute('description') || undefined,\n icon: node.getAttribute('icon') || undefined,\n status: (node.getAttribute('status') || undefined) as StepStatus | undefined,\n };\n });\n }\n\n private getStatus(index: number): StepStatus {\n const meta = this.steps[index];\n // 子项显式 status 优先(仅当用户在 HTML 上写了 status 属性)\n if (meta && meta.status) return meta.status;\n if (index < this.active) return 'finish';\n if (index === this.active) return this.processStatus;\n return 'wait';\n }\n\n /** 渲染图标:子项自定义 icon 优先;否则按状态(finish=✓、error=✕、其余=序号) */\n private renderIcon(index: number): any {\n const meta = this.steps[index];\n if (meta && meta.icon) {\n // 自定义图标名:若与 hb-icon 内置图标同名则渲染 hb-icon,否则按文本渲染\n return <hb-icon name={meta.icon} size={16} aria-hidden=\"true\" />;\n }\n const status = this.getStatus(index);\n if (status === 'finish') return '✓';\n if (status === 'error') return '✕';\n return String(index + 1);\n }\n\n render() {\n return (\n <ol class={{ 'hb-steps': true, [`hb-steps--${this.direction}`]: true, 'hb-steps--align-center': this.alignCenter }} role=\"list\">\n {this.steps.map((step, i) => {\n const status = this.getStatus(i);\n return (\n <li\n class={{ 'hb-steps__item': true, [`hb-steps__item--${status}`]: true }}\n role=\"listitem\"\n aria-current={status === 'process' ? 'step' : undefined}\n aria-disabled={step.status === 'wait' && i > this.active ? 'true' : undefined}\n >\n <div class=\"hb-steps__head\">\n <span class=\"hb-steps__icon\" aria-hidden=\"true\">\n {this.renderIcon(i)}\n </span>\n {i < this.steps.length - 1 && <div class=\"hb-steps__line\"></div>}\n </div>\n <div class=\"hb-steps__main\">\n <div class=\"hb-steps__title\">{step.title}</div>\n {step.description && <div class=\"hb-steps__description\">{step.description}</div>}\n </div>\n </li>\n );\n })}\n </ol>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { p as proxyCustomElement, H, h } from './p-1407a5e8.js';
|
|
2
|
-
import { i as isActivationKey } from './p-
|
|
2
|
+
import { i as isActivationKey } from './p-00aa34c8.js';
|
|
3
3
|
|
|
4
4
|
const SubMenu = /*@__PURE__*/ proxyCustomElement(class SubMenu extends H {
|
|
5
5
|
constructor() {
|
|
@@ -50,16 +50,16 @@ const SubMenu = /*@__PURE__*/ proxyCustomElement(class SubMenu extends H {
|
|
|
50
50
|
render() {
|
|
51
51
|
// 折叠态:浮层是否显示由 hover 决定;非折叠态:就地展开由 isOpen 决定
|
|
52
52
|
const showChildren = this.collapsed ? this.isHover : this.isOpen;
|
|
53
|
-
return (h("li", { key: '
|
|
53
|
+
return (h("li", { key: '8ffe1d7210cd000e7947b6723048e1b80bc6c8d8', class: {
|
|
54
54
|
'hb-sub-menu': true,
|
|
55
55
|
'hb-sub-menu--open': this.isOpen,
|
|
56
56
|
'hb-sub-menu--collapsed': this.collapsed,
|
|
57
|
-
}, role: "menuitem", "aria-haspopup": "menu", "aria-expanded": showChildren ? 'true' : 'false', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave }, h("div", { key: '
|
|
57
|
+
}, role: "menuitem", "aria-haspopup": "menu", "aria-expanded": showChildren ? 'true' : 'false', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave }, h("div", { key: 'f5f84c08e60bd3207d1b3ef9066d4f66ba20f043', class: "hb-sub-menu__title", role: "button", tabindex: 0, "aria-expanded": showChildren ? 'true' : 'false',
|
|
58
58
|
// 折叠态用原生 title 提供文字提示(图标条场景)
|
|
59
|
-
title: this.collapsed ? this.label : undefined, onClick: this.toggle, onKeyDown: this.handleTitleKeydown }, this.icon && h("span", { key: '
|
|
59
|
+
title: this.collapsed ? this.label : undefined, onClick: this.toggle, onKeyDown: this.handleTitleKeydown }, this.icon && h("span", { key: 'a0fbdd43702b3bfd66dc77ccbca6c315f729ac6f', class: "hb-sub-menu__icon" }, this.icon), h("span", { key: 'ecaeed1a964217d2ee4c01713720a2e1ccc58023', class: "hb-sub-menu__label" }, this.label), h("span", { key: '3a354625d91de2598dd4e69cdce41bcee470bbc5', class: { 'hb-sub-menu__arrow': true, 'hb-sub-menu__arrow--open': showChildren } }, "\u25B6")), showChildren && (h("ul", { key: 'a7426f5611557c3f8a5bf27fe4a98653d4d59a74', class: {
|
|
60
60
|
'hb-sub-menu__children': true,
|
|
61
61
|
'hb-sub-menu__children--popover': this.collapsed,
|
|
62
|
-
}, role: "menu", onClick: this.handleChildrenClick }, h("slot", { key: '
|
|
62
|
+
}, role: "menu", onClick: this.handleChildrenClick }, h("slot", { key: '7a891101a285504556914763a08318d54689139e' })))));
|
|
63
63
|
}
|
|
64
64
|
}, [1, "hb-sub-menu", {
|
|
65
65
|
"label": [1],
|
|
@@ -74,7 +74,7 @@ const Switch = /*@__PURE__*/ proxyCustomElement(class Switch extends H {
|
|
|
74
74
|
// 宽度:inlinePrompt 与 text 模式都加宽;inlinePrompt 文字塞进圆点两侧,仍需更宽一些
|
|
75
75
|
const hasText = !!(this.activeText || this.inactiveText);
|
|
76
76
|
const width = this.width || (hasText ? (this.inlinePrompt ? 50 : 60) : 40);
|
|
77
|
-
return (h("label", { key: '
|
|
77
|
+
return (h("label", { key: 'ff287325a739ef43860e353f54d9dda065c4e23d', class: {
|
|
78
78
|
'hb-switch': true,
|
|
79
79
|
'hb-switch--checked': isChecked,
|
|
80
80
|
'hb-switch--disabled': this.disabled,
|
|
@@ -83,9 +83,9 @@ const Switch = /*@__PURE__*/ proxyCustomElement(class Switch extends H {
|
|
|
83
83
|
'--hb-switch-width': `${width}px`,
|
|
84
84
|
'--hb-switch-active-color': this.activeColor || 'var(--hb-color-primary)',
|
|
85
85
|
'--hb-switch-inactive-color': this.inactiveColor || 'var(--hb-color-text-placeholder, #c0c4cc)',
|
|
86
|
-
} }, h("input", { key: '
|
|
86
|
+
} }, h("input", { key: '47260aca8d13feffef8eeb2977af92de11325f2e', type: "checkbox", class: "hb-switch__original", role: "switch", "aria-checked": isChecked ? 'true' : 'false', checked: isChecked, disabled: this.disabled, onChange: this.handleChange, "aria-label": this.activeText || this.inactiveText || undefined }), h("span", { key: 'dd8e172783702332caf0000af65ec12e926fbba7', class: "hb-switch__core" }, hasText && !this.inlinePrompt && h("span", { key: 'b45b42e740bfe66b676be965d5811c6b35bc7f8c', class: "hb-switch__inner" }, isChecked ? this.activeText : this.inactiveText), hasText && this.inlinePrompt && (
|
|
87
87
|
// 内联提示:开/关文字塞进圆点两侧,随切换显隐
|
|
88
|
-
h("span", { key: '
|
|
88
|
+
h("span", { key: 'b29c9c819dd6aa51999a16bd73a3d2bb971001df', class: "hb-switch__inner hb-switch__inner--inline" }, h("span", { key: '8107777ef14e720cbb000fb73f3db39ed10ed1cc', class: "hb-switch__inner-text hb-switch__inner-text--active" }, this.activeText), h("span", { key: 'ce8a279e0ddc7a6a0e0efc0a9b27f6b5ef677fc9', class: "hb-switch__inner-text hb-switch__inner-text--inactive" }, this.inactiveText))))));
|
|
89
89
|
}
|
|
90
90
|
static get style() { return HbSwitchStyle0; }
|
|
91
91
|
}, [1, "hb-switch", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"hb-switch.js","mappings":";;AAAA,MAAM,SAAS,GAAG,qnPAAqnP,CAAC;AACxoP,uBAAe,SAAS;;MCUX,MAAM;;;;;;;;;;IAIQ,UAAU,GAAY,KAAK,CAAC;;;;;IAM7C,QAAQ,GAAY,KAAK,CAAC;;;;;IAM1B,UAAU,CAAU;;;;IAKpB,YAAY,CAAU;;;;IAKtB,WAAW,CAAU;;;;IAKrB,aAAa,CAAU;;;;;IAMvB,WAAW,GAA8B,IAAI,CAAC;;;;;IAM9C,aAAa,GAA8B,KAAK,CAAC;;;;IAKjD,KAAK,CAAU;;;;;IAMf,YAAY,GAAY,KAAK,CAAC;;;;IAK7B,QAAQ,CAA0C;IAEnD,YAAY,GAAG,CAAC,CAAQ;QAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO;SACR;QAED,MAAM,OAAO,GAAI,CAAC,CAAC,MAA2B,CAAC,OAAO,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QAE9D,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B,CAAC;IAEF,MAAM;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,CAAC;;QAEvD,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3E,QACE,8DACE,KAAK,EAAE;gBACL,WAAW,EAAE,IAAI;gBACjB,oBAAoB,EAAE,SAAS;gBAC/B,qBAAqB,EAAE,IAAI,CAAC,QAAQ;gBACpC,0BAA0B,EAAE,IAAI,CAAC,YAAY,IAAI,OAAO;aACzD,EACD,KAAK,EAAE;gBACL,mBAAmB,EAAE,GAAG,KAAK,IAAI;gBACjC,0BAA0B,EAAE,IAAI,CAAC,WAAW,IAAI,yBAAyB;gBACzE,4BAA4B,EAAE,IAAI,CAAC,aAAa,IAAI,2CAA2C;aAChG,IAED,8DACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,qBAAqB,EAC3B,IAAI,EAAC,QAAQ,kBACC,SAAS,GAAG,MAAM,GAAG,OAAO,EAC1C,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,YAAY,gBACf,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,GAC7D,EACF,6DAAM,KAAK,EAAC,iBAAiB,IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,
|
|
1
|
+
{"file":"hb-switch.js","mappings":";;AAAA,MAAM,SAAS,GAAG,qnPAAqnP,CAAC;AACxoP,uBAAe,SAAS;;MCUX,MAAM;;;;;;;;;;IAIQ,UAAU,GAAY,KAAK,CAAC;;;;;IAM7C,QAAQ,GAAY,KAAK,CAAC;;;;;IAM1B,UAAU,CAAU;;;;IAKpB,YAAY,CAAU;;;;IAKtB,WAAW,CAAU;;;;IAKrB,aAAa,CAAU;;;;;IAMvB,WAAW,GAA8B,IAAI,CAAC;;;;;IAM9C,aAAa,GAA8B,KAAK,CAAC;;;;IAKjD,KAAK,CAAU;;;;;IAMf,YAAY,GAAY,KAAK,CAAC;;;;IAK7B,QAAQ,CAA0C;IAEnD,YAAY,GAAG,CAAC,CAAQ;QAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO;SACR;QAED,MAAM,OAAO,GAAI,CAAC,CAAC,MAA2B,CAAC,OAAO,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QAE9D,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B,CAAC;IAEF,MAAM;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,CAAC;;QAEvD,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3E,QACE,8DACE,KAAK,EAAE;gBACL,WAAW,EAAE,IAAI;gBACjB,oBAAoB,EAAE,SAAS;gBAC/B,qBAAqB,EAAE,IAAI,CAAC,QAAQ;gBACpC,0BAA0B,EAAE,IAAI,CAAC,YAAY,IAAI,OAAO;aACzD,EACD,KAAK,EAAE;gBACL,mBAAmB,EAAE,GAAG,KAAK,IAAI;gBACjC,0BAA0B,EAAE,IAAI,CAAC,WAAW,IAAI,yBAAyB;gBACzE,4BAA4B,EAAE,IAAI,CAAC,aAAa,IAAI,2CAA2C;aAChG,IAED,8DACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,qBAAqB,EAC3B,IAAI,EAAC,QAAQ,kBACC,SAAS,GAAG,MAAM,GAAG,OAAO,EAC1C,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,YAAY,gBACf,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,GAC7D,EACF,6DAAM,KAAK,EAAC,iBAAiB,IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,6DAAM,KAAK,EAAC,kBAAkB,IAAE,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAQ,EACxH,OAAO,IAAI,IAAI,CAAC,YAAY;;QAE3B,6DAAM,KAAK,EAAC,2CAA2C,IACrD,6DAAM,KAAK,EAAC,qDAAqD,IAAE,IAAI,CAAC,UAAU,CAAQ,EAC1F,6DAAM,KAAK,EAAC,uDAAuD,IAAE,IAAI,CAAC,YAAY,CAAQ,CACzF,CACR,CACI,CACD,EACR;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/Switch/switch.css?tag=hb-switch&encapsulation=shadow","src/components/Switch/Switch.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --hb-switch-width: 40px;\n --hb-switch-active-color: var(--hb-color-primary);\n --hb-switch-inactive-color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-switch {\n display: inline-flex;\n align-items: center;\n position: relative;\n font-size: 14px;\n line-height: 20px;\n height: 20px;\n vertical-align: middle;\n cursor: pointer;\n}\n\n.hb-switch__original {\n opacity: 0;\n width: 0;\n height: 0;\n margin: 0;\n position: absolute;\n}\n\n.hb-switch__core {\n margin: 0;\n display: inline-block;\n position: relative;\n width: var(--hb-switch-width);\n height: 20px;\n border: 1px solid var(--hb-switch-inactive-color);\n outline: none;\n border-radius: 10px;\n box-sizing: border-box;\n background: var(--hb-switch-inactive-color);\n cursor: pointer;\n transition:\n border-color 0.3s,\n background-color 0.3s;\n vertical-align: middle;\n}\n\n.hb-switch__core::after {\n content: '';\n position: absolute;\n top: 1px;\n left: 1px;\n border-radius: 100%;\n transition: all 0.3s;\n width: 16px;\n height: 16px;\n background-color: var(--hb-color-white, #ffffff);\n}\n\n.hb-switch--checked .hb-switch__core {\n border-color: var(--hb-switch-active-color);\n background-color: var(--hb-switch-active-color);\n}\n\n.hb-switch--checked .hb-switch__core::after {\n left: 100%;\n margin-left: -17px;\n}\n\n.hb-switch__inner {\n position: absolute;\n left: 23px;\n font-size: 12px;\n color: var(--hb-color-white, #ffffff);\n transition: all 0.3s;\n}\n\n.hb-switch--checked .hb-switch__inner {\n left: 5px;\n}\n\n.hb-switch--disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.hb-switch--disabled .hb-switch__core {\n cursor: not-allowed;\n}\n\n/* ---- inlinePrompt:文字塞进圆点两侧 ---- */\n.hb-switch--inline-prompt .hb-switch__inner--inline {\n left: 0;\n right: 0;\n display: flex;\n height: 100%;\n align-items: center;\n font-size: 12px;\n color: #fff;\n pointer-events: none;\n}\n\n.hb-switch__inner-text {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n/* 关闭态:左侧(inactive)显示,圆点在右 */\n.hb-switch:not(.hb-switch--checked) .hb-switch__inner-text--inactive {\n opacity: 1;\n padding-left: 6px;\n padding-right: 22px;\n justify-content: flex-start;\n}\n\n.hb-switch:not(.hb-switch--checked) .hb-switch__inner-text--active {\n display: none;\n}\n\n/* 打开态:右侧(active)显示,圆点在左 */\n.hb-switch--checked .hb-switch__inner-text--active {\n opacity: 1;\n padding-left: 22px;\n padding-right: 6px;\n justify-content: flex-end;\n}\n\n.hb-switch--checked .hb-switch__inner-text--inactive {\n display: none;\n}\n","import { Component, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Switch 开关组件\n * 表示两种相互对立的状态间的切换,多用于触发「开/关」\n */\n@Component({\n tag: 'hb-switch',\n styleUrl: 'switch.css',\n shadow: true,\n})\nexport class Switch {\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: boolean = false;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否显示文字描述\n * @default false\n */\n @Prop() activeText?: string;\n\n /**\n * 关闭时的文字描述\n */\n @Prop() inactiveText?: string;\n\n /**\n * 打开时的背景色\n */\n @Prop() activeColor?: string;\n\n /**\n * 关闭时的背景色\n */\n @Prop() inactiveColor?: string;\n\n /**\n * 打开时的值\n * @default true\n */\n @Prop() activeValue: boolean | string | number = true;\n\n /**\n * 关闭时的值\n * @default false\n */\n @Prop() inactiveValue: boolean | string | number = false;\n\n /**\n * 宽度\n */\n @Prop() width?: number;\n\n /**\n * 是否内联提示\n * @default false\n */\n @Prop() inlinePrompt: boolean = false;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<boolean | string | number>;\n\n private handleChange = (e: Event) => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n\n const checked = (e.target as HTMLInputElement).checked;\n const value = checked ? this.activeValue : this.inactiveValue;\n\n this.modelValue = checked;\n this.hbChange.emit(value);\n };\n\n render() {\n const isChecked = this.modelValue === this.activeValue;\n // 宽度:inlinePrompt 与 text 模式都加宽;inlinePrompt 文字塞进圆点两侧,仍需更宽一些\n const hasText = !!(this.activeText || this.inactiveText);\n const width = this.width || (hasText ? (this.inlinePrompt ? 50 : 60) : 40);\n\n return (\n <label\n class={{\n 'hb-switch': true,\n 'hb-switch--checked': isChecked,\n 'hb-switch--disabled': this.disabled,\n 'hb-switch--inline-prompt': this.inlinePrompt && hasText,\n }}\n style={{\n '--hb-switch-width': `${width}px`,\n '--hb-switch-active-color': this.activeColor || 'var(--hb-color-primary)',\n '--hb-switch-inactive-color': this.inactiveColor || 'var(--hb-color-text-placeholder, #c0c4cc)',\n }}\n >\n <input\n type=\"checkbox\"\n class=\"hb-switch__original\"\n role=\"switch\"\n aria-checked={isChecked ? 'true' : 'false'}\n checked={isChecked}\n disabled={this.disabled}\n onChange={this.handleChange}\n aria-label={this.activeText || this.inactiveText || undefined}\n />\n <span class=\"hb-switch__core\">\n {hasText && !this.inlinePrompt && <span class=\"hb-switch__inner\">{isChecked ? this.activeText : this.inactiveText}</span>}\n {hasText && this.inlinePrompt && (\n // 内联提示:开/关文字塞进圆点两侧,随切换显隐\n <span class=\"hb-switch__inner hb-switch__inner--inline\">\n <span class=\"hb-switch__inner-text hb-switch__inner-text--active\">{this.activeText}</span>\n <span class=\"hb-switch__inner-text hb-switch__inner-text--inactive\">{this.inactiveText}</span>\n </span>\n )}\n </span>\n </label>\n );\n }\n}\n"],"version":3}
|
|
@@ -13,7 +13,7 @@ const TabPane = /*@__PURE__*/ proxyCustomElement(class TabPane extends H {
|
|
|
13
13
|
/** 是否激活 */
|
|
14
14
|
active = false;
|
|
15
15
|
render() {
|
|
16
|
-
return (h("div", { key: '
|
|
16
|
+
return (h("div", { key: '5d830209274e2c780f4e0dfd233427feb96458ff', class: { 'hb-tab-pane': true, 'hb-tab-pane--hidden': !this.active }, role: "tabpanel", id: `hb-tabs__panel-${this.key}`, "aria-labelledby": this.key ? `hb-tabs__tab-${this.key}` : undefined, tabindex: this.active ? 0 : undefined }, h("slot", { key: 'b330d024cc02d1011b41f1b586bba9f91be91d90' })));
|
|
17
17
|
}
|
|
18
18
|
}, [1, "hb-tab-pane", {
|
|
19
19
|
"key": [1],
|
|
@@ -113,7 +113,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
113
113
|
toggleExpand = (row, key) => {
|
|
114
114
|
const idx = this.expandedRowKeys.indexOf(key);
|
|
115
115
|
const expanded = idx === -1;
|
|
116
|
-
this.expandedRowKeys = expanded ? [...this.expandedRowKeys, key] : this.expandedRowKeys.filter(
|
|
116
|
+
this.expandedRowKeys = expanded ? [...this.expandedRowKeys, key] : this.expandedRowKeys.filter(k => k !== key);
|
|
117
117
|
this.hbExpandChange.emit({ expanded, row });
|
|
118
118
|
};
|
|
119
119
|
/** 行内编辑:进入编辑态 */
|
|
@@ -178,8 +178,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
178
178
|
}
|
|
179
179
|
handleSort = (prop) => {
|
|
180
180
|
if (this.sortProp === prop) {
|
|
181
|
-
this.sortDirection =
|
|
182
|
-
this.sortDirection === 'ascending' ? 'descending' : this.sortDirection === 'descending' ? null : 'ascending';
|
|
181
|
+
this.sortDirection = this.sortDirection === 'ascending' ? 'descending' : this.sortDirection === 'descending' ? null : 'ascending';
|
|
183
182
|
}
|
|
184
183
|
else {
|
|
185
184
|
this.sortProp = prop;
|
|
@@ -201,7 +200,6 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
201
200
|
return 0;
|
|
202
201
|
});
|
|
203
202
|
}
|
|
204
|
-
;
|
|
205
203
|
get isAllSelected() {
|
|
206
204
|
return this.data.length > 0 && this.selectedRows.size === this.data.length;
|
|
207
205
|
}
|
|
@@ -232,7 +230,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
232
230
|
emitSelection() {
|
|
233
231
|
const selected = Array.from(this.selectedRows)
|
|
234
232
|
.sort((a, b) => a - b)
|
|
235
|
-
.map(
|
|
233
|
+
.map(i => this.data[i])
|
|
236
234
|
.filter(Boolean);
|
|
237
235
|
this.hbSelectionChange.emit(selected);
|
|
238
236
|
}
|
|
@@ -246,8 +244,17 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
246
244
|
get hasActions() {
|
|
247
245
|
return !!this.actions && this.actions.length > 0;
|
|
248
246
|
}
|
|
249
|
-
/**
|
|
250
|
-
|
|
247
|
+
/**
|
|
248
|
+
* 计算固定列的 sticky 偏移(左侧/右侧累计宽度)。
|
|
249
|
+
* P1 优化:缓存结果,仅当 columns 引用变化时重算。
|
|
250
|
+
* 修复前是 getter,被每个 <td>/<th> 反复调用,复杂度 O(rows×cols²)。
|
|
251
|
+
*/
|
|
252
|
+
_fixedOffsetsCache = null;
|
|
253
|
+
_fixedOffsetsColumnsRef = null;
|
|
254
|
+
getFixedOffsets() {
|
|
255
|
+
if (this._fixedOffsetsCache && this._fixedOffsetsColumnsRef === this.columns) {
|
|
256
|
+
return this._fixedOffsetsCache;
|
|
257
|
+
}
|
|
251
258
|
const result = {};
|
|
252
259
|
let leftAcc = '0px';
|
|
253
260
|
for (const c of this.columns) {
|
|
@@ -265,10 +272,12 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
265
272
|
rightAcc = `calc(${rightAcc} + ${c.width || '0px'})`;
|
|
266
273
|
}
|
|
267
274
|
}
|
|
275
|
+
this._fixedOffsetsCache = result;
|
|
276
|
+
this._fixedOffsetsColumnsRef = this.columns;
|
|
268
277
|
return result;
|
|
269
278
|
}
|
|
270
279
|
cellStyle(prop, base) {
|
|
271
|
-
const off = this.
|
|
280
|
+
const off = this.getFixedOffsets()[prop];
|
|
272
281
|
const style = { ...(base || {}) };
|
|
273
282
|
if (off?.side === 'left') {
|
|
274
283
|
style.position = 'sticky';
|
|
@@ -300,8 +309,8 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
300
309
|
'hb-table__row--current': this.highlightCurrentRow && rowIndex === this.currentRow,
|
|
301
310
|
'hb-table__row--selected': this.selectedRows.has(rowIndex),
|
|
302
311
|
'hb-table__row--tree': tree,
|
|
303
|
-
}, onClick: () => this.handleRowClick(row, rowIndex) }, this.selectable && (h("td", { class: "hb-table__selection", onClick:
|
|
304
|
-
const off = this.
|
|
312
|
+
}, onClick: () => this.handleRowClick(row, rowIndex) }, this.selectable && (h("td", { class: "hb-table__selection", onClick: e => e.stopPropagation() }, h("input", { type: "checkbox", class: "hb-table__checkbox", checked: this.selectedRows.has(rowIndex), onChange: e => this.toggleRow(rowIndex, e) }))), this.columns.map((col, colIdx) => {
|
|
313
|
+
const off = this.getFixedOffsets()[col.prop];
|
|
305
314
|
// 树形模式:第一列加缩进 + 展开箭头
|
|
306
315
|
const isFirstCol = colIdx === 0;
|
|
307
316
|
const showExpand = tree && isFirstCol && fr.hasChildren;
|
|
@@ -313,11 +322,11 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
313
322
|
'hb-table__cell--fixed-left': off?.side === 'left',
|
|
314
323
|
'hb-table__cell--fixed-right': off?.side === 'right',
|
|
315
324
|
'hb-table__cell--editable': editableActive,
|
|
316
|
-
}, onClick: editableActive ?
|
|
325
|
+
}, onClick: editableActive ? e => this.startEdit(e, rowKeyVal, col.prop) : undefined }, tree && isFirstCol && h("span", { class: "hb-table__indent", style: { display: 'inline-block', width: `${indent}px` }, "aria-hidden": "true" }), showExpand && (h("button", { type: "button", class: { 'hb-table__expand': true, 'hb-table__expand--expanded': expanded }, "aria-label": expanded ? '收起' : '展开', onClick: e => {
|
|
317
326
|
e.stopPropagation();
|
|
318
327
|
this.toggleExpand(row, rowKeyVal);
|
|
319
|
-
} }, expanded ? '▼' : '▶')), showExpand === false && tree && isFirstCol &&
|
|
320
|
-
}), this.hasActions && (h("td", { class: "hb-table__td--actions", style: { textAlign: 'right', whiteSpace: 'nowrap' }, onClick:
|
|
328
|
+
} }, expanded ? '▼' : '▶')), showExpand === false && tree && isFirstCol && h("span", { class: "hb-table__expand-placeholder", style: { display: 'inline-block', width: '16px' }, "aria-hidden": "true" }), editing ? (h("input", { class: "hb-table__edit-input", type: "text", value: row[col.prop] ?? '', onBlur: e => this.commitEdit(e, row, col.prop), onKeyDown: e => this.onEditKeydown(e, row, col.prop) })) : (h("slot", { name: `cell-${col.prop}` }, col.formatter ? col.formatter(row, rowIndex) : (row[col.prop] ?? '')))));
|
|
329
|
+
}), this.hasActions && (h("td", { class: "hb-table__td--actions", style: { textAlign: 'right', whiteSpace: 'nowrap' }, onClick: e => e.stopPropagation() }, this.actions.map(act => (h("button", { type: "button", class: {
|
|
321
330
|
'hb-table__action': true,
|
|
322
331
|
'hb-table__action--primary': act.type === 'primary',
|
|
323
332
|
'hb-table__action--danger': act.type === 'danger',
|
|
@@ -325,10 +334,10 @@ const Table = /*@__PURE__*/ proxyCustomElement(class Table extends H {
|
|
|
325
334
|
}
|
|
326
335
|
/** 渲染表头(普通 + 虚拟滚动共用,表头始终固定不随滚) */
|
|
327
336
|
renderHeader() {
|
|
328
|
-
return (h("thead", null, h("tr", null, this.selectable && (h("th", { class: "hb-table__selection" }, h("input", { type: "checkbox", class: "hb-table__checkbox", checked: this.isAllSelected, ref:
|
|
337
|
+
return (h("thead", null, h("tr", null, this.selectable && (h("th", { class: "hb-table__selection" }, h("input", { type: "checkbox", class: "hb-table__checkbox", checked: this.isAllSelected, ref: el => {
|
|
329
338
|
this.allCheckboxRef = el;
|
|
330
|
-
}, onChange: this.toggleAll }))), this.columns.map(
|
|
331
|
-
const off = this.
|
|
339
|
+
}, onChange: this.toggleAll }))), this.columns.map(col => {
|
|
340
|
+
const off = this.getFixedOffsets()[col.prop];
|
|
332
341
|
return (h("th", { key: col.prop, style: this.cellStyle(col.prop, {
|
|
333
342
|
width: col.width,
|
|
334
343
|
minWidth: col.minWidth,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"hb-table.js","mappings":"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","names":[],"sources":["src/components/Table/table.css?tag=hb-table&encapsulation=shadow","src/components/Table/Table.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-table {\n position: relative;\n overflow: hidden;\n border-radius: var(--hb-border-radius-base);\n background-color: var(--hb-color-bg);\n}\n\n.hb-table--border {\n border: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-table--border .hb-table__td,\n.hb-table--border .hb-table__table th {\n border-right: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-table__wrapper {\n overflow-x: auto;\n}\n\n.hb-table__table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n table-layout: auto;\n}\n\n.hb-table__table th {\n background-color: var(--hb-table-header-bg);\n color: var(--hb-table-header-color);\n font-weight: 600;\n font-size: var(--hb-font-size-sm);\n padding: 10px 12px;\n text-align: left;\n border-bottom: 1px solid var(--hb-color-border-secondary);\n white-space: nowrap;\n user-select: none;\n}\n\n.hb-table__th-content {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.hb-table__th--sortable {\n cursor: pointer;\n}\n\n.hb-table__th--sortable:hover {\n background-color: var(--hb-color-fill-tertiary);\n}\n\n.hb-table__sort {\n display: inline-flex;\n flex-direction: column;\n line-height: 1;\n font-size: 10px;\n gap: 1px;\n}\n\n.hb-table__sort-icon {\n color: var(--hb-color-text-quaternary);\n transition: color var(--hb-transition-duration);\n}\n\n.hb-table__sort-icon--active {\n color: var(--hb-color-primary);\n}\n\n.hb-table__td {\n padding: 10px 12px;\n font-size: var(--hb-font-size-sm);\n color: var(--hb-color-text);\n border-bottom: 1px solid var(--hb-table-border-color);\n transition: background-color var(--hb-transition-duration);\n}\n\n.hb-table__row:hover .hb-table__td {\n background-color: var(--hb-table-row-hover-bg);\n}\n\n.hb-table__row--striped .hb-table__td {\n background-color: var(--hb-table-stripe-bg);\n}\n\n.hb-table__row--current .hb-table__td {\n background-color: var(--hb-color-primary-bg);\n}\n\n.hb-table__empty {\n text-align: center;\n color: var(--hb-color-text-secondary);\n padding: var(--hb-spacing-xl) 0;\n}\n\n.hb-table__loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 1;\n}\n\n.hb-table__loading-spinner {\n width: 32px;\n height: 32px;\n border: 3px solid var(--hb-color-border-secondary);\n border-top-color: var(--hb-color-primary);\n border-radius: 50%;\n animation: hb-spin 0.8s linear infinite;\n}\n\n/* ---- 尺寸 ---- */\n.hb-table--small .hb-table__table th,\n.hb-table--small .hb-table__td {\n padding: 6px 8px;\n font-size: var(--hb-font-size-xs);\n}\n\n.hb-table--large .hb-table__table th,\n.hb-table--large .hb-table__td {\n padding: 14px 16px;\n font-size: var(--hb-font-size-base);\n}\n\n/* ---- 行选择 ---- */\n.hb-table__selection {\n width: 48px;\n min-width: 48px;\n text-align: center;\n white-space: nowrap;\n}\n.hb-table__checkbox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--hb-color-primary);\n vertical-align: middle;\n}\n.hb-table__selection .hb-table__checkbox {\n margin: 0;\n}\n.hb-table__row--selected .hb-table__td {\n background-color: var(--hb-color-primary-bg);\n}\n\n/* ---- 固定列(sticky) ---- */\n/* 固定列单元格需要不透明背景,避免横向滚动时底层内容透出 */\n.hb-table__cell--fixed-left,\n.hb-table__cell--fixed-right {\n position: sticky;\n z-index: 2;\n background-color: var(--hb-color-bg);\n}\n.hb-table__table th.hb-table__cell--fixed-left,\n.hb-table__table th.hb-table__cell--fixed-right {\n background-color: var(--hb-table-header-bg);\n}\n.hb-table__cell--fixed-right {\n box-shadow: -4px 0 8px rgba(0, 0, 0, 0.06);\n}\n.hb-table__cell--fixed-left:not(.hb-table__cell--fixed-right) {\n box-shadow: 4px 0 8px rgba(0, 0, 0, 0.06);\n}\n/* 固定列在选中行需保持选中背景 */\n.hb-table__row--selected .hb-table__cell--fixed-left,\n.hb-table__row--selected .hb-table__cell--fixed-right {\n background-color: var(--hb-color-primary-bg);\n}\n.hb-table__row:hover .hb-table__cell--fixed-left,\n.hb-table__row:hover .hb-table__cell--fixed-right {\n background-color: var(--hb-table-row-hover-bg);\n}\n\n@keyframes hb-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* 行操作按钮(link 风格,类 Ant Design) */\n.hb-table__action {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n font-size: var(--hb-font-size-sm, 14px);\n line-height: 1.5;\n color: var(--hb-color-primary, #1677ff);\n transition: opacity var(--hb-transition-duration, 0.2s);\n}\n.hb-table__action:hover {\n opacity: 0.8;\n}\n.hb-table__action:disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n.hb-table__action--danger {\n color: var(--hb-color-danger, #f5222d);\n}\n.hb-table__action--danger:disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n}\n.hb-table__action + .hb-table__action {\n margin-left: var(--hb-spacing-sm, 12px);\n}\n\n/* ---- 虚拟滚动 ---- */\n.hb-table--virtual {\n overflow: hidden;\n}\n.hb-table__virtual-wrapper {\n display: flex;\n flex-direction: column;\n}\n.hb-table__virtual-viewport {\n overflow-y: auto;\n overflow-x: auto;\n position: relative;\n}\n.hb-table__virtual-spacer {\n position: relative;\n width: 100%;\n}\n.hb-table__table--virtual {\n width: 100%;\n table-layout: fixed;\n}\n.hb-table__table--virtual tbody {\n /* 可见窗口的行紧跟在 offset 占位行之后,撑高容器由 spacer 负责 */\n position: relative;\n}\n\n/* ---- 树形数据(可展开行) ---- */\n.hb-table__expand {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--hb-color-text-secondary, #595959);\n font-size: 10px;\n line-height: 1;\n vertical-align: middle;\n transition: color var(--hb-transition-duration, 0.2s);\n flex-shrink: 0;\n}\n.hb-table__expand:hover {\n color: var(--hb-color-primary, #1677ff);\n}\n.hb-table__row--tree .hb-table__td {\n /* 树形行第一列内容随缩进对齐 */\n white-space: nowrap;\n}\n\n/* ---- 行内编辑 ---- */\n.hb-table__cell--editable {\n cursor: text;\n}\n.hb-table__cell--editable:hover {\n background-color: var(--hb-color-fill-tertiary, #f5f5f5);\n}\n.hb-table__edit-input {\n width: 100%;\n min-width: 60px;\n box-sizing: border-box;\n padding: 2px 6px;\n font-size: var(--hb-font-size-sm, 14px);\n color: var(--hb-color-text, #262626);\n border: 1px solid var(--hb-color-primary, #1677ff);\n border-radius: var(--hb-border-radius-base, 4px);\n outline: none;\n background-color: var(--hb-color-bg, #fff);\n}\n\n/* ============================================================\n * 响应式(移动端):\n * - 小屏强制最小宽度,避免列被挤压到不可读(保留横向滚动)\n * - sticky 表头在滚动时保持可见\n * ============================================================ */\n@media (max-width: 575.98px) {\n .hb-table__table {\n /* 最小宽度保证列内容可读,超出靠 wrapper 横向滚动 */\n min-width: 480px;\n }\n\n /* sticky 表头:横向滚动时表头跟随 */\n .hb-table__table thead th {\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: var(--hb-color-bg-container, #fafafa);\n }\n}\n","import { Component, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\n\nexport interface TableColumn {\n /** 列字段名 */\n prop: string;\n /** 列标题 */\n label: string;\n /** 列宽 */\n width?: string;\n /** 最小列宽 */\n minWidth?: string;\n /** 是否可排序 */\n sortable?: boolean;\n /** 对齐方式 */\n align?: 'left' | 'center' | 'right';\n /** 固定列:left / right / true(等同 left) */\n fixed?: 'left' | 'right' | boolean;\n /** 单元格文本格式化(框架无关,返回纯文本字符串) */\n formatter?: (row: Record<string, any>, index: number) => string;\n /** 该列是否可(行内)编辑;需同时开启 Table.editable 才生效 */\n editable?: boolean;\n}\n\n/**\n * 行操作按钮配置(框架无关)。\n * 由 Table 自身渲染按钮(在 shadow DOM 内),点击派发 hbAction 事件,\n * 消费方据此执行编辑/删除等逻辑——无需往每行塞框架专属元素,绕开「slot 跨行共享」限制。\n */\nexport interface TableAction {\n /** 操作标识,回传到 hbAction.detail.action */\n key: string;\n /** 按钮文案 */\n label: string;\n /** 按钮样式:default 主色文字 / danger 危险色 */\n type?: 'default' | 'primary' | 'danger';\n /** 是否禁用(按行判断) */\n disabled?: (row: Record<string, any>, index: number) => boolean;\n}\n\nexport type SortDirection = 'ascending' | 'descending' | null;\n\n/**\n * 树形数据配置。\n * `children` 指定子节点在每行数据中的字段名(默认 'children'),\n * 行存在该字段(非空数组)时渲染展开箭头,可递归展开后代。\n */\nexport interface TableTreeProps {\n children?: string;\n}\n\n/**\n * 拍平后的可见行:保留原始 row + 嵌套层级 + 唯一 key,\n * 供 render 一次性 map 成 <tr>(仅含已展开链路上的后代)。\n */\ninterface FlatRow {\n row: Record<string, any>;\n level: number;\n key: string | number;\n /** 该行是否有非空 children(决定是否渲染展开箭头) */\n hasChildren: boolean;\n /** 该行在父层数组中的索引(用于 rowKey 缺省回退与稳定 key) */\n index: number;\n}\n\ninterface FixedOffset {\n side?: 'left' | 'right';\n left?: string;\n right?: string;\n}\n\n/**\n * Table 表格组件\n * 用于展示多条结构类似的数据,可对数据进行排序、筛选、选择等操作\n */\n@Component({\n tag: 'hb-table',\n styleUrl: 'table.css',\n shadow: true,\n})\nexport class Table {\n /** 数据源 */\n @Prop() data: Record<string, any>[] = [];\n\n /** 列配置 */\n @Prop() columns: TableColumn[] = [];\n\n /** 是否带斑马纹 */\n @Prop() stripe: boolean = false;\n\n /** 是否带边框 */\n @Prop() border: boolean = false;\n\n /** 表格尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 是否显示加载状态 */\n @Prop() loading: boolean = false;\n\n /** 行数据的 Key */\n @Prop() rowKey: string = '';\n\n /** 空数据文案 */\n @Prop() emptyText: string = '暂无数据';\n\n /** 最大高度(超出固定表头) */\n @Prop() maxHeight?: string;\n\n /** 是否高亮当前行 */\n @Prop() highlightCurrentRow: boolean = false;\n\n /** 是否开启行选择(显示 checkbox 列) */\n @Prop() selectable: boolean = false;\n\n /** 行操作配置;非空时自动在末尾渲染「操作」列 */\n @Prop() actions: TableAction[] = [];\n\n /** 是否开启虚拟滚动(大数据量场景,默认关闭,向后兼容) */\n @Prop() virtualScroll: boolean = false;\n\n /** 虚拟滚动每行预估高度(px),用于计算撑高容器与可见窗口 */\n @Prop() itemHeight: number = 48;\n\n /** 虚拟滚动视口高度(px),超过此高度出现滚动条 */\n @Prop() virtualScrollHeight: number = 400;\n\n /**\n * 树形数据配置:传入后启用「可展开行」模式。\n * data 行含 `children` 字段(字段名可经此配置覆盖)时渲染展开箭头。\n * 默认 undefined —— 不启用树形。\n */\n @Prop() treeProps?: TableTreeProps;\n\n /** 是否开启行内编辑模式(默认关闭)。需列配置 column.editable=true 才对该列生效 */\n @Prop() editable: boolean = false;\n\n @State() sortProp: string = '';\n @State() sortDirection: SortDirection = null;\n @State() currentRow: number = -1;\n @State() selectedRows: Set<number> = new Set();\n /** 虚拟滚动:当前滚动位置(px),驱动可见窗口计算 */\n @State() scrollTop: number = 0;\n\n /** 树形模式:已展开行的 key 列表 */\n @State() expandedRowKeys: Array<string | number> = [];\n\n /** 行内编辑:当前正在编辑的单元格 { key, prop },null 表示无 */\n @State() editingCell: { rowKey: string | number; prop: string } | null = null;\n\n /** 排序变化事件 */\n @Event() hbSortChange: EventEmitter<{ prop: string; order: SortDirection }>;\n\n /** 行点击事件 */\n @Event() hbRowClick: EventEmitter<{ row: Record<string, any>; index: number }>;\n\n /** 选择变化事件 */\n @Event() hbSelectionChange: EventEmitter<Record<string, any>[]>;\n\n /** 行操作点击事件 */\n @Event() hbAction: EventEmitter<{ row: Record<string, any>; index: number; action: string }>;\n\n /** 树形行展开/收起事件 */\n @Event() hbExpandChange: EventEmitter<{ expanded: boolean; row: Record<string, any> }>;\n\n /** 行内编辑提交事件 */\n @Event() hbCellChange: EventEmitter<{ row: Record<string, any>; prop: string; value: any }>;\n\n @Watch('data')\n handleDataChange() {\n this.selectedRows = new Set();\n this.emitSelection();\n }\n\n /** 树形模式是否启用(显式传入 treeProps 即启用) */\n private get isTreeMode(): boolean {\n return !!this.treeProps;\n }\n\n /** 子节点字段名(treeProps.children 缺省回退 'children') */\n private get childrenField(): string {\n return (this.treeProps && this.treeProps.children) || 'children';\n }\n\n /**\n * 把树拍平成可见行列表:仅保留「祖先链路全部已展开」的后代。\n * @param list 当前层级的数组\n * @param level 当前层级(根 = 0)\n * @param parentKeyPath 父级 key 路径,用于构造深层稳定 key(避免不同分支同 index 撞 key)\n */\n private flattenTree(list: Record<string, any>[], level: number = 0, parentKeyPath: string = ''): FlatRow[] {\n const field = this.childrenField;\n const result: FlatRow[] = [];\n list.forEach((row, i) => {\n const keyPath = parentKeyPath ? `${parentKeyPath}.${i}` : `${i}`;\n const key = this.rowKey ? row[this.rowKey] : keyPath;\n const kids = row[field];\n const hasKids = Array.isArray(kids) && kids.length > 0;\n result.push({ row, level, key, hasChildren: hasKids, index: i });\n // 仅当该行已展开时,递归拍入其 children\n if (hasKids && this.expandedRowKeys.indexOf(key) !== -1) {\n result.push(...this.flattenTree(kids as Record<string, any>[], level + 1, keyPath));\n }\n });\n return result;\n }\n\n /** 树形展开/收起切换 */\n private toggleExpand = (row: Record<string, any>, key: string | number) => {\n const idx = this.expandedRowKeys.indexOf(key);\n const expanded = idx === -1;\n this.expandedRowKeys = expanded ? [...this.expandedRowKeys, key] : this.expandedRowKeys.filter((k) => k !== key);\n this.hbExpandChange.emit({ expanded, row });\n };\n\n /** 行内编辑:进入编辑态 */\n private startEdit = (e: Event, key: string | number, prop: string) => {\n e.stopPropagation();\n if (!this.editable) return;\n this.editingCell = { rowKey: key, prop };\n };\n\n /** 行内编辑:提交(回车 / 失焦 / Change) */\n private commitEdit = (e: Event, row: Record<string, any>, prop: string) => {\n const input = e.target as HTMLInputElement;\n const value = input.value;\n // 就地更新(简单可用版):修改 row[prop] 后强制重渲染\n row[prop] = value;\n this.editingCell = null;\n this.hbCellChange.emit({ row, prop, value });\n };\n\n /** 行内编辑:回车提交 / Esc 取消 */\n private onEditKeydown = (e: KeyboardEvent, row: Record<string, any>, prop: string) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.commitEdit(e, row, prop);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n this.editingCell = null;\n }\n };\n\n private allCheckboxRef?: HTMLInputElement;\n\n componentDidRender() {\n // indeterminate 不是可反射的 HTML 属性,必须通过 DOM 属性设置\n if (this.allCheckboxRef) {\n this.allCheckboxRef.indeterminate = this.isIndeterminate;\n }\n }\n\n /** 虚拟滚动上下缓冲行数 */\n private readonly virtualBuffer = 5;\n\n /** 虚拟滚动:滚动事件回调,更新 scrollTop 触发可见窗口重算 */\n private handleVirtualScroll = (e: Event) => {\n const target = e.target as HTMLElement;\n this.scrollTop = target.scrollTop;\n };\n\n /** 虚拟滚动:计算可见窗口 [startIndex, endIndex) */\n private get visibleRange(): { startIndex: number; endIndex: number } {\n const total = this.data.length;\n if (total === 0) return { startIndex: 0, endIndex: 0 };\n\n const itemHeight = this.itemHeight > 0 ? this.itemHeight : 1;\n const viewport = this.virtualScrollHeight;\n\n let startIndex = Math.floor(this.scrollTop / itemHeight) - this.virtualBuffer;\n if (startIndex < 0) startIndex = 0;\n\n let endIndex = Math.ceil((this.scrollTop + viewport) / itemHeight) + this.virtualBuffer;\n if (endIndex > total) endIndex = total;\n\n return { startIndex, endIndex };\n }\n\n /** 虚拟滚动:撑高容器总高度 */\n private get virtualTotalHeight(): number {\n return this.data.length * (this.itemHeight > 0 ? this.itemHeight : 1);\n }\n\n private handleSort = (prop: string) => {\n if (this.sortProp === prop) {\n this.sortDirection =\n this.sortDirection === 'ascending' ? 'descending' : this.sortDirection === 'descending' ? null : 'ascending';\n } else {\n this.sortProp = prop;\n this.sortDirection = 'ascending';\n }\n this.hbSortChange.emit({ prop, order: this.sortDirection });\n };\n\n private get sortedData(): Record<string, any>[] {\n if (!this.sortProp || !this.sortDirection) return this.data;\n const direction = this.sortDirection === 'ascending' ? 1 : -1;\n return [...this.data].sort((a, b) => {\n const va = a[this.sortProp];\n const vb = b[this.sortProp];\n if (va < vb) return -1 * direction;\n if (va > vb) return 1 * direction;\n return 0;\n });\n };\n\n private get isAllSelected(): boolean {\n return this.data.length > 0 && this.selectedRows.size === this.data.length;\n }\n\n private get isIndeterminate(): boolean {\n return this.selectedRows.size > 0 && this.selectedRows.size < this.data.length;\n }\n\n private toggleRow = (index: number, e: Event) => {\n e.stopPropagation();\n const next = new Set(this.selectedRows);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n this.selectedRows = next;\n this.emitSelection();\n };\n\n private toggleAll = () => {\n if (this.isAllSelected) {\n this.selectedRows = new Set();\n } else {\n this.selectedRows = new Set(this.data.map((_, i) => i));\n }\n this.emitSelection();\n };\n\n private emitSelection() {\n const selected = Array.from(this.selectedRows)\n .sort((a, b) => a - b)\n .map((i) => this.data[i])\n .filter(Boolean);\n this.hbSelectionChange.emit(selected);\n }\n\n private handleRowClick = (row: Record<string, any>, index: number) => {\n this.currentRow = index;\n this.hbRowClick.emit({ row, index });\n };\n\n private handleAction = (row: Record<string, any>, index: number, action: string) => {\n this.hbAction.emit({ row, index, action });\n };\n\n private get hasActions(): boolean {\n return !!this.actions && this.actions.length > 0;\n }\n\n /** 计算固定列的 sticky 偏移(左侧/右侧累计宽度) */\n private get fixedOffsets(): Record<string, FixedOffset> {\n const result: Record<string, FixedOffset> = {};\n let leftAcc = '0px';\n for (const c of this.columns) {\n const side = c.fixed === true ? 'left' : c.fixed;\n if (side === 'left') {\n result[c.prop] = { side: 'left', left: leftAcc };\n leftAcc = `calc(${leftAcc} + ${c.width || '0px'})`;\n }\n }\n let rightAcc = '0px';\n for (let i = this.columns.length - 1; i >= 0; i--) {\n const c = this.columns[i];\n if (c.fixed === 'right') {\n result[c.prop] = { side: 'right', right: rightAcc };\n rightAcc = `calc(${rightAcc} + ${c.width || '0px'})`;\n }\n }\n return result;\n }\n\n private cellStyle(prop: string, base?: Record<string, string>): Record<string, string> {\n const off = this.fixedOffsets[prop];\n const style: Record<string, string> = { ...(base || {}) };\n if (off?.side === 'left') {\n style.position = 'sticky';\n style.left = off.left as string;\n style.zIndex = '2';\n } else if (off?.side === 'right') {\n style.position = 'sticky';\n style.right = off.right as string;\n style.zIndex = '2';\n }\n return style;\n }\n\n /**\n * 渲染单行(普通 + 虚拟滚动 + 树形 共用)。\n * - 普通模式:rowIndex 为在 sortedData 中的全局索引。\n * - 树形模式:fr.level 决定缩进,第一列渲染展开箭头,key 取 fr.key。\n * fr 为可选;未传时按普通模式渲染。\n */\n private renderRow(row: Record<string, any>, rowIndex: number, fr?: FlatRow) {\n const tree = !!fr;\n const level = fr ? fr.level : 0;\n const rowKeyVal = fr ? fr.key : this.rowKey ? row[this.rowKey] : rowIndex;\n const indent = level * 16;\n\n const isEditing = (prop: string) => !!this.editingCell && this.editingCell.rowKey === rowKeyVal && this.editingCell.prop === prop;\n\n return (\n <tr\n key={rowKeyVal}\n class={{\n 'hb-table__row': true,\n 'hb-table__row--striped': this.stripe && rowIndex % 2 === 1,\n 'hb-table__row--current': this.highlightCurrentRow && rowIndex === this.currentRow,\n 'hb-table__row--selected': this.selectedRows.has(rowIndex),\n 'hb-table__row--tree': tree,\n }}\n onClick={() => this.handleRowClick(row, rowIndex)}\n >\n {this.selectable && (\n <td class=\"hb-table__selection\" onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n class=\"hb-table__checkbox\"\n checked={this.selectedRows.has(rowIndex)}\n onChange={(e) => this.toggleRow(rowIndex, e)}\n />\n </td>\n )}\n {this.columns.map((col, colIdx) => {\n const off = this.fixedOffsets[col.prop];\n // 树形模式:第一列加缩进 + 展开箭头\n const isFirstCol = colIdx === 0;\n const showExpand = tree && isFirstCol && fr!.hasChildren;\n const expanded = showExpand && this.expandedRowKeys.indexOf(rowKeyVal) !== -1;\n const editing = this.editable && !!col.editable && isEditing(col.prop);\n const editableActive = this.editable && !!col.editable;\n\n return (\n <td\n key={col.prop}\n style={this.cellStyle(col.prop, { textAlign: col.align || 'left' })}\n class={{\n 'hb-table__td': true,\n 'hb-table__cell--fixed-left': off?.side === 'left',\n 'hb-table__cell--fixed-right': off?.side === 'right',\n 'hb-table__cell--editable': editableActive,\n }}\n onClick={editableActive ? (e) => this.startEdit(e, rowKeyVal, col.prop) : undefined}\n >\n {tree && isFirstCol && (\n <span class=\"hb-table__indent\" style={{ display: 'inline-block', width: `${indent}px` }} aria-hidden=\"true\" />\n )}\n {showExpand && (\n <button\n type=\"button\"\n class={{ 'hb-table__expand': true, 'hb-table__expand--expanded': expanded }}\n aria-label={expanded ? '收起' : '展开'}\n onClick={(e) => {\n e.stopPropagation();\n this.toggleExpand(row, rowKeyVal);\n }}\n >\n {expanded ? '▼' : '▶'}\n </button>\n )}\n {showExpand === false && tree && isFirstCol && (\n <span class=\"hb-table__expand-placeholder\" style={{ display: 'inline-block', width: '16px' }} aria-hidden=\"true\" />\n )}\n {editing ? (\n <input\n class=\"hb-table__edit-input\"\n type=\"text\"\n value={row[col.prop] ?? ''}\n onBlur={(e) => this.commitEdit(e, row, col.prop)}\n onKeyDown={(e) => this.onEditKeydown(e, row, col.prop)}\n />\n ) : (\n <slot name={`cell-${col.prop}`}>{col.formatter ? col.formatter(row, rowIndex) : row[col.prop] ?? ''}</slot>\n )}\n </td>\n );\n })}\n {this.hasActions && (\n <td class=\"hb-table__td--actions\" style={{ textAlign: 'right', whiteSpace: 'nowrap' }} onClick={(e) => e.stopPropagation()}>\n {this.actions.map((act) => (\n <button\n type=\"button\"\n class={{\n 'hb-table__action': true,\n 'hb-table__action--primary': act.type === 'primary',\n 'hb-table__action--danger': act.type === 'danger',\n }}\n disabled={act.disabled ? act.disabled(row, rowIndex) : false}\n onClick={() => this.handleAction(row, rowIndex, act.key)}\n >\n {act.label}\n </button>\n ))}\n </td>\n )}\n </tr>\n );\n }\n\n /** 渲染表头(普通 + 虚拟滚动共用,表头始终固定不随滚) */\n private renderHeader() {\n return (\n <thead>\n <tr>\n {this.selectable && (\n <th class=\"hb-table__selection\">\n <input\n type=\"checkbox\"\n class=\"hb-table__checkbox\"\n checked={this.isAllSelected}\n ref={(el) => {\n this.allCheckboxRef = el as HTMLInputElement;\n }}\n onChange={this.toggleAll}\n />\n </th>\n )}\n {this.columns.map((col) => {\n const off = this.fixedOffsets[col.prop];\n return (\n <th\n key={col.prop}\n style={this.cellStyle(col.prop, {\n width: col.width,\n minWidth: col.minWidth,\n textAlign: col.align || 'left',\n })}\n class={{\n 'hb-table__th--sortable': col.sortable,\n 'hb-table__cell--fixed-left': off?.side === 'left',\n 'hb-table__cell--fixed-right': off?.side === 'right',\n }}\n onClick={col.sortable ? () => this.handleSort(col.prop) : undefined}\n >\n <div class=\"hb-table__th-content\">\n <span>{col.label}</span>\n {col.sortable && (\n <span class=\"hb-table__sort\">\n <span class={{ 'hb-table__sort-icon': true, 'hb-table__sort-icon--active': this.sortProp === col.prop && this.sortDirection === 'ascending' }}>▲</span>\n <span class={{ 'hb-table__sort-icon': true, 'hb-table__sort-icon--active': this.sortProp === col.prop && this.sortDirection === 'descending' }}>▼</span>\n </span>\n )}\n </div>\n </th>\n );\n })}\n {this.hasActions && (\n <th class=\"hb-table__th--actions\" style={{ textAlign: 'right', whiteSpace: 'nowrap' }}>\n 操作\n </th>\n )}\n </tr>\n </thead>\n );\n }\n\n render() {\n const displayData = this.sortedData;\n const isEmpty = displayData.length === 0;\n\n // 树形模式:把可见树拍平成带 level 的行列表(仅含已展开链路上的后代)\n const flatRows: FlatRow[] = this.isTreeMode ? this.flattenTree(displayData) : [];\n\n // 虚拟滚动:固定高度滚动视口 + 撑高容器 + 仅渲染可见窗口行(绝对定位 offset)\n // 注意:树形 + 虚拟滚动组合较复杂,此处虚拟滚动沿用普通行渲染(不展开树),\n // 保留树形仅在普通模式下生效以降低风险。\n const renderVirtualBody = () => {\n const { startIndex, endIndex } = this.visibleRange;\n const offsetTop = startIndex * (this.itemHeight > 0 ? this.itemHeight : 1);\n return (\n <div\n class=\"hb-table__virtual-viewport\"\n style={{ height: `${this.virtualScrollHeight}px`, overflowY: 'auto' }}\n onScroll={this.handleVirtualScroll}\n >\n <div class=\"hb-table__virtual-spacer\" style={{ height: `${this.virtualTotalHeight}px`, position: 'relative' }}>\n <table class=\"hb-table__table hb-table__table--virtual\">\n <tbody>\n {isEmpty ? (\n <tr>\n <td colSpan={this.columns.length + (this.selectable ? 1 : 0) + (this.hasActions ? 1 : 0)} class=\"hb-table__empty\">\n {this.emptyText}\n </td>\n </tr>\n ) : (\n <tr style={{ height: `${offsetTop}px` }} aria-hidden=\"true\" />\n )}\n {displayData.slice(startIndex, endIndex).map((row, i) => this.renderRow(row, startIndex + i))}\n </tbody>\n </table>\n </div>\n </div>\n );\n };\n\n // 普通模式:树形启用时按拍平列表渲染(带 level 缩进 + 展开箭头),否则原样按行渲染\n const renderNormalBody = () => (\n <tbody>\n {isEmpty ? (\n <tr>\n <td colSpan={this.columns.length + (this.selectable ? 1 : 0) + (this.hasActions ? 1 : 0)} class=\"hb-table__empty\">\n {this.emptyText}\n </td>\n </tr>\n ) : this.isTreeMode ? (\n flatRows.map((fr, i) => this.renderRow(fr.row, i, fr))\n ) : (\n displayData.map((row, rowIndex) => this.renderRow(row, rowIndex))\n )}\n </tbody>\n );\n\n return (\n <div class={{ 'hb-table': true, [`hb-table--${this.size}`]: true, 'hb-table--border': this.border, 'hb-table--virtual': this.virtualScroll }}>\n {this.loading && (\n <div class=\"hb-table__loading\">\n <div class=\"hb-table__loading-spinner\"></div>\n </div>\n )}\n {this.virtualScroll ? (\n <div class=\"hb-table__virtual-wrapper\">\n <table class=\"hb-table__table\">\n {this.renderHeader()}\n </table>\n {renderVirtualBody()}\n </div>\n ) : (\n <div class=\"hb-table__wrapper\" style={this.maxHeight ? { maxHeight: this.maxHeight, overflow: 'auto' } : undefined}>\n <table class=\"hb-table__table\">\n {this.renderHeader()}\n {renderNormalBody()}\n </table>\n </div>\n )}\n </div>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"hb-table.js","mappings":";;AAAA,MAAM,QAAQ,GAAG,20YAA20Y,CAAC;AAC71Y,sBAAe,QAAQ;;MC8EV,KAAK;;;;;;;;;;;;;IAER,IAAI,GAA0B,EAAE,CAAC;;IAGjC,OAAO,GAAkB,EAAE,CAAC;;IAG5B,MAAM,GAAY,KAAK,CAAC;;IAGxB,MAAM,GAAY,KAAK,CAAC;;IAGxB,IAAI,GAAkC,SAAS,CAAC;;IAGhD,OAAO,GAAY,KAAK,CAAC;;IAGzB,MAAM,GAAW,EAAE,CAAC;;IAGpB,SAAS,GAAW,MAAM,CAAC;;IAG3B,SAAS,CAAU;;IAGnB,mBAAmB,GAAY,KAAK,CAAC;;IAGrC,UAAU,GAAY,KAAK,CAAC;;IAG5B,OAAO,GAAkB,EAAE,CAAC;;IAG5B,aAAa,GAAY,KAAK,CAAC;;IAG/B,UAAU,GAAW,EAAE,CAAC;;IAGxB,mBAAmB,GAAW,GAAG,CAAC;;;;;;IAOlC,SAAS,CAAkB;;IAG3B,QAAQ,GAAY,KAAK,CAAC;IAEzB,QAAQ,GAAW,EAAE,CAAC;IACtB,aAAa,GAAkB,IAAI,CAAC;IACpC,UAAU,GAAW,CAAC,CAAC,CAAC;IACxB,YAAY,GAAgB,IAAI,GAAG,EAAE,CAAC;;IAEtC,SAAS,GAAW,CAAC,CAAC;;IAGtB,eAAe,GAA2B,EAAE,CAAC;;IAG7C,WAAW,GAAqD,IAAI,CAAC;;IAGrE,YAAY,CAAuD;;IAGnE,UAAU,CAA4D;;IAGtE,iBAAiB,CAAsC;;IAGvD,QAAQ,CAA4E;;IAGpF,cAAc,CAAgE;;IAG9E,YAAY,CAAuE;IAG5F,gBAAgB;QACd,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;IAGD,IAAY,UAAU;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;KACzB;;IAGD,IAAY,aAAa;QACvB,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC;KAClE;;;;;;;IAQO,WAAW,CAAC,IAA2B,EAAE,QAAgB,CAAC,EAAE,gBAAwB,EAAE;QAC5F,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,aAAa,GAAG,GAAG,aAAa,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;;YAEjE,IAAI,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;gBACvD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAA6B,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;aACrF;SACF,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;KACf;;IAGO,YAAY,GAAG,CAAC,GAAwB,EAAE,GAAoB;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/G,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;KAC7C,CAAC;;IAGM,SAAS,GAAG,CAAC,CAAQ,EAAE,GAAoB,EAAE,IAAY;QAC/D,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KAC1C,CAAC;;IAGM,UAAU,GAAG,CAAC,CAAQ,EAAE,GAAwB,EAAE,IAAY;QACpE,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;QAE1B,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;KAC9C,CAAC;;IAGM,aAAa,GAAG,CAAC,CAAgB,EAAE,GAAwB,EAAE,IAAY;QAC/E,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACrB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC/B;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;KACF,CAAC;IAEM,cAAc,CAAoB;IAE1C,kBAAkB;;QAEhB,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC;SAC1D;KACF;;IAGgB,aAAa,GAAG,CAAC,CAAC;;IAG3B,mBAAmB,GAAG,CAAC,CAAQ;QACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;KACnC,CAAC;;IAGF,IAAY,YAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAEvD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAE1C,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9E,IAAI,UAAU,GAAG,CAAC;YAAE,UAAU,GAAG,CAAC,CAAC;QAEnC,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,UAAU,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QACxF,IAAI,QAAQ,GAAG,KAAK;YAAE,QAAQ,GAAG,KAAK,CAAC;QAEvC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;KACjC;;IAGD,IAAY,kBAAkB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;KACvE;IAEO,UAAU,GAAG,CAAC,IAAY;QAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,aAAa,KAAK,YAAY,GAAG,IAAI,GAAG,WAAW,CAAC;SACnI;aAAM;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;SAClC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;KAC7D,CAAC;IAEF,IAAY,UAAU;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,EAAE,GAAG,EAAE;gBAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;YACnC,IAAI,EAAE,GAAG,EAAE;gBAAE,OAAO,CAAC,GAAG,SAAS,CAAC;YAClC,OAAO,CAAC,CAAC;SACV,CAAC,CAAC;KACJ;IAED,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KAC5E;IAED,IAAY,eAAe;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KAChF;IAEO,SAAS,GAAG,CAAC,KAAa,EAAE,CAAQ;QAC1C,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACpB;aAAM;YACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACjB;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAC;IAEM,SAAS,GAAG;QAClB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;SAC/B;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAC;IAEM,aAAa;QACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;aAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACrB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACtB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvC;IAEO,cAAc,GAAG,CAAC,GAAwB,EAAE,KAAa;QAC/D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;KACtC,CAAC;IAEM,YAAY,GAAG,CAAC,GAAwB,EAAE,KAAa,EAAE,MAAc;QAC7E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5C,CAAC;IAEF,IAAY,UAAU;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;KAClD;;;;;;IAOO,kBAAkB,GAAuC,IAAI,CAAC;IAC9D,uBAAuB,GAAyB,IAAI,CAAC;IACrD,eAAe;QACrB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC,OAAO,EAAE;YAC5E,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAChC;QACD,MAAM,MAAM,GAAgC,EAAE,CAAC;QAC/C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;YACjD,IAAI,IAAI,KAAK,MAAM,EAAE;gBACnB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBACjD,OAAO,GAAG,QAAQ,OAAO,MAAM,CAAC,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC;aACpD;SACF;QACD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE;gBACvB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;gBACpD,QAAQ,GAAG,QAAQ,QAAQ,MAAM,CAAC,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC;aACtD;SACF;QACD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5C,OAAO,MAAM,CAAC;KACf;IAEO,SAAS,CAAC,IAAY,EAAE,IAA6B;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAA2B,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1D,IAAI,GAAG,EAAE,IAAI,KAAK,MAAM,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC1B,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAc,CAAC;YAChC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;SACpB;aAAM,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE;YAChC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC1B,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAe,CAAC;YAClC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;SACpB;QACD,OAAO,KAAK,CAAC;KACd;;;;;;;IAQO,SAAS,CAAC,GAAwB,EAAE,QAAgB,EAAE,EAAY;QACxE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;QAC1E,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC;QAE1B,MAAM,SAAS,GAAG,CAAC,IAAY,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC;QAElI,QACE,UACE,GAAG,EAAE,SAAS,EACd,KAAK,EAAE;gBACL,eAAe,EAAE,IAAI;gBACrB,wBAAwB,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC;gBAC3D,wBAAwB,EAAE,IAAI,CAAC,mBAAmB,IAAI,QAAQ,KAAK,IAAI,CAAC,UAAU;gBAClF,yBAAyB,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC1D,qBAAqB,EAAE,IAAI;aAC5B,EACD,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,IAEhD,IAAI,CAAC,UAAU,KACd,UAAI,KAAK,EAAC,qBAAqB,EAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IAC/D,aAAO,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,oBAAoB,EAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAI,CACvI,CACN,EACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;YAE7C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,IAAI,IAAI,UAAU,IAAI,EAAG,CAAC,WAAW,CAAC;YACzD,MAAM,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEvD,QACE,UACE,GAAG,EAAE,GAAG,CAAC,IAAI,EACb,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,EACnE,KAAK,EAAE;oBACL,cAAc,EAAE,IAAI;oBACpB,4BAA4B,EAAE,GAAG,EAAE,IAAI,KAAK,MAAM;oBAClD,6BAA6B,EAAE,GAAG,EAAE,IAAI,KAAK,OAAO;oBACpD,0BAA0B,EAAE,cAAc;iBAC3C,EACD,OAAO,EAAE,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,IAEhF,IAAI,IAAI,UAAU,IAAI,YAAM,KAAK,EAAC,kBAAkB,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE,iBAAc,MAAM,GAAG,EACpI,UAAU,KACT,cACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,gBAC/D,QAAQ,GAAG,IAAI,GAAG,IAAI,EAClC,OAAO,EAAE,CAAC;oBACR,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;iBACnC,IAEA,QAAQ,GAAG,GAAG,GAAG,GAAG,CACd,CACV,EACA,UAAU,KAAK,KAAK,IAAI,IAAI,IAAI,UAAU,IAAI,YAAM,KAAK,EAAC,8BAA8B,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAc,MAAM,GAAG,EACjK,OAAO,IACN,aACE,KAAK,EAAC,sBAAsB,EAC5B,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAC1B,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAC9C,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GACpD,KAEF,YAAM,IAAI,EAAE,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAQ,CAC9G,CACE,EACL;SACH,CAAC,EACD,IAAI,CAAC,UAAU,KACd,UAAI,KAAK,EAAC,uBAAuB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IACrH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KACnB,cACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;gBACL,kBAAkB,EAAE,IAAI;gBACxB,2BAA2B,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS;gBACnD,0BAA0B,EAAE,GAAG,CAAC,IAAI,KAAK,QAAQ;aAClD,EACD,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,KAAK,EAC5D,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,IAEvD,GAAG,CAAC,KAAK,CACH,CACV,CAAC,CACC,CACN,CACE,EACL;KACH;;IAGO,YAAY;QAClB,QACE,iBACE,cACG,IAAI,CAAC,UAAU,KACd,UAAI,KAAK,EAAC,qBAAqB,IAC7B,aACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,oBAAoB,EAC1B,OAAO,EAAE,IAAI,CAAC,aAAa,EAC3B,GAAG,EAAE,EAAE;gBACL,IAAI,CAAC,cAAc,GAAG,EAAsB,CAAC;aAC9C,EACD,QAAQ,EAAE,IAAI,CAAC,SAAS,GACxB,CACC,CACN,EACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,QACE,UACE,GAAG,EAAE,GAAG,CAAC,IAAI,EACb,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE;oBAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,SAAS,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM;iBAC/B,CAAC,EACF,KAAK,EAAE;oBACL,wBAAwB,EAAE,GAAG,CAAC,QAAQ;oBACtC,4BAA4B,EAAE,GAAG,EAAE,IAAI,KAAK,MAAM;oBAClD,6BAA6B,EAAE,GAAG,EAAE,IAAI,KAAK,OAAO;iBACrD,EACD,OAAO,EAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,IAEnE,WAAK,KAAK,EAAC,sBAAsB,IAC/B,gBAAO,GAAG,CAAC,KAAK,CAAQ,EACvB,GAAG,CAAC,QAAQ,KACX,YAAM,KAAK,EAAC,gBAAgB,IAC1B,YAAM,KAAK,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,WAAW,EAAE,aAAU,EACvJ,YAAM,KAAK,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,YAAY,EAAE,aAAU,CACnJ,CACR,CACG,CACH,EACL;SACH,CAAC,EACD,IAAI,CAAC,UAAU,KACd,UAAI,KAAK,EAAC,uBAAuB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAEhF,CACN,CACE,CACC,EACR;KACH;IAED,MAAM;QACJ,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;;QAGzC,MAAM,QAAQ,GAAc,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;;;;QAKjF,MAAM,iBAAiB,GAAG;YACxB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;YACnD,MAAM,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YAC3E,QACE,WAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,mBAAmB,IAC/I,WAAK,KAAK,EAAC,0BAA0B,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAC3G,aAAO,KAAK,EAAC,0CAA0C,IACrD,iBACG,OAAO,IACN,cACE,UAAI,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAC,iBAAiB,IAC9G,IAAI,CAAC,SAAS,CACZ,CACF,KAEL,UAAI,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,SAAS,IAAI,EAAE,iBAAc,MAAM,GAAG,CAC/D,EACA,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CACvF,CACF,CACJ,CACF,EACN;SACH,CAAC;;QAGF,MAAM,gBAAgB,GAAG,OACvB,iBACG,OAAO,IACN,cACE,UAAI,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAC,iBAAiB,IAC9G,IAAI,CAAC,SAAS,CACZ,CACF,IACH,IAAI,CAAC,UAAU,IACjB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAEtD,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAClE,CACK,CACT,CAAC;QAEF,QACE,WAAK,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,aAAa,EAAE,IACzI,IAAI,CAAC,OAAO,KACX,WAAK,KAAK,EAAC,mBAAmB,IAC5B,WAAK,KAAK,EAAC,2BAA2B,GAAO,CACzC,CACP,EACA,IAAI,CAAC,aAAa,IACjB,WAAK,KAAK,EAAC,2BAA2B,IACpC,aAAO,KAAK,EAAC,iBAAiB,IAAE,IAAI,CAAC,YAAY,EAAE,CAAS,EAC3D,iBAAiB,EAAE,CAChB,KAEN,WAAK,KAAK,EAAC,mBAAmB,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,IAChH,aAAO,KAAK,EAAC,iBAAiB,IAC3B,IAAI,CAAC,YAAY,EAAE,EACnB,gBAAgB,EAAE,CACb,CACJ,CACP,CACG,EACN;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/Table/table.css?tag=hb-table&encapsulation=shadow","src/components/Table/Table.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-table {\n position: relative;\n overflow: hidden;\n border-radius: var(--hb-border-radius-base);\n background-color: var(--hb-color-bg);\n}\n\n.hb-table--border {\n border: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-table--border .hb-table__td,\n.hb-table--border .hb-table__table th {\n border-right: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-table__wrapper {\n overflow-x: auto;\n}\n\n.hb-table__table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n table-layout: auto;\n}\n\n.hb-table__table th {\n background-color: var(--hb-table-header-bg);\n color: var(--hb-table-header-color);\n font-weight: 600;\n font-size: var(--hb-font-size-sm);\n padding: 10px 12px;\n text-align: left;\n border-bottom: 1px solid var(--hb-color-border-secondary);\n white-space: nowrap;\n user-select: none;\n}\n\n.hb-table__th-content {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.hb-table__th--sortable {\n cursor: pointer;\n}\n\n.hb-table__th--sortable:hover {\n background-color: var(--hb-color-fill-tertiary);\n}\n\n.hb-table__sort {\n display: inline-flex;\n flex-direction: column;\n line-height: 1;\n font-size: 10px;\n gap: 1px;\n}\n\n.hb-table__sort-icon {\n color: var(--hb-color-text-quaternary);\n transition: color var(--hb-transition-duration);\n}\n\n.hb-table__sort-icon--active {\n color: var(--hb-color-primary);\n}\n\n.hb-table__td {\n padding: 10px 12px;\n font-size: var(--hb-font-size-sm);\n color: var(--hb-color-text);\n border-bottom: 1px solid var(--hb-table-border-color);\n transition: background-color var(--hb-transition-duration);\n}\n\n.hb-table__row:hover .hb-table__td {\n background-color: var(--hb-table-row-hover-bg);\n}\n\n.hb-table__row--striped .hb-table__td {\n background-color: var(--hb-table-stripe-bg);\n}\n\n.hb-table__row--current .hb-table__td {\n background-color: var(--hb-color-primary-bg);\n}\n\n.hb-table__empty {\n text-align: center;\n color: var(--hb-color-text-secondary);\n padding: var(--hb-spacing-xl) 0;\n}\n\n.hb-table__loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 1;\n}\n\n.hb-table__loading-spinner {\n width: 32px;\n height: 32px;\n border: 3px solid var(--hb-color-border-secondary);\n border-top-color: var(--hb-color-primary);\n border-radius: 50%;\n animation: hb-spin 0.8s linear infinite;\n}\n\n/* ---- 尺寸 ---- */\n.hb-table--small .hb-table__table th,\n.hb-table--small .hb-table__td {\n padding: 6px 8px;\n font-size: var(--hb-font-size-xs);\n}\n\n.hb-table--large .hb-table__table th,\n.hb-table--large .hb-table__td {\n padding: 14px 16px;\n font-size: var(--hb-font-size-base);\n}\n\n/* ---- 行选择 ---- */\n.hb-table__selection {\n width: 48px;\n min-width: 48px;\n text-align: center;\n white-space: nowrap;\n}\n.hb-table__checkbox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--hb-color-primary);\n vertical-align: middle;\n}\n.hb-table__selection .hb-table__checkbox {\n margin: 0;\n}\n.hb-table__row--selected .hb-table__td {\n background-color: var(--hb-color-primary-bg);\n}\n\n/* ---- 固定列(sticky) ---- */\n/* 固定列单元格需要不透明背景,避免横向滚动时底层内容透出 */\n.hb-table__cell--fixed-left,\n.hb-table__cell--fixed-right {\n position: sticky;\n z-index: 2;\n background-color: var(--hb-color-bg);\n}\n.hb-table__table th.hb-table__cell--fixed-left,\n.hb-table__table th.hb-table__cell--fixed-right {\n background-color: var(--hb-table-header-bg);\n}\n.hb-table__cell--fixed-right {\n box-shadow: -4px 0 8px rgba(0, 0, 0, 0.06);\n}\n.hb-table__cell--fixed-left:not(.hb-table__cell--fixed-right) {\n box-shadow: 4px 0 8px rgba(0, 0, 0, 0.06);\n}\n/* 固定列在选中行需保持选中背景 */\n.hb-table__row--selected .hb-table__cell--fixed-left,\n.hb-table__row--selected .hb-table__cell--fixed-right {\n background-color: var(--hb-color-primary-bg);\n}\n.hb-table__row:hover .hb-table__cell--fixed-left,\n.hb-table__row:hover .hb-table__cell--fixed-right {\n background-color: var(--hb-table-row-hover-bg);\n}\n\n@keyframes hb-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* 行操作按钮(link 风格,类 Ant Design) */\n.hb-table__action {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n font-size: var(--hb-font-size-sm, 14px);\n line-height: 1.5;\n color: var(--hb-color-primary, #1677ff);\n transition: opacity var(--hb-transition-duration, 0.2s);\n}\n.hb-table__action:hover {\n opacity: 0.8;\n}\n.hb-table__action:disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n.hb-table__action--danger {\n color: var(--hb-color-danger, #f5222d);\n}\n.hb-table__action--danger:disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n}\n.hb-table__action + .hb-table__action {\n margin-left: var(--hb-spacing-sm, 12px);\n}\n\n/* ---- 虚拟滚动 ---- */\n.hb-table--virtual {\n overflow: hidden;\n}\n.hb-table__virtual-wrapper {\n display: flex;\n flex-direction: column;\n}\n.hb-table__virtual-viewport {\n overflow-y: auto;\n overflow-x: auto;\n position: relative;\n}\n.hb-table__virtual-spacer {\n position: relative;\n width: 100%;\n}\n.hb-table__table--virtual {\n width: 100%;\n table-layout: fixed;\n}\n.hb-table__table--virtual tbody {\n /* 可见窗口的行紧跟在 offset 占位行之后,撑高容器由 spacer 负责 */\n position: relative;\n}\n\n/* ---- 树形数据(可展开行) ---- */\n.hb-table__expand {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--hb-color-text-secondary, #595959);\n font-size: 10px;\n line-height: 1;\n vertical-align: middle;\n transition: color var(--hb-transition-duration, 0.2s);\n flex-shrink: 0;\n}\n.hb-table__expand:hover {\n color: var(--hb-color-primary, #1677ff);\n}\n.hb-table__row--tree .hb-table__td {\n /* 树形行第一列内容随缩进对齐 */\n white-space: nowrap;\n}\n\n/* ---- 行内编辑 ---- */\n.hb-table__cell--editable {\n cursor: text;\n}\n.hb-table__cell--editable:hover {\n background-color: var(--hb-color-fill-tertiary, #f5f5f5);\n}\n.hb-table__edit-input {\n width: 100%;\n min-width: 60px;\n box-sizing: border-box;\n padding: 2px 6px;\n font-size: var(--hb-font-size-sm, 14px);\n color: var(--hb-color-text, #262626);\n border: 1px solid var(--hb-color-primary, #1677ff);\n border-radius: var(--hb-border-radius-base, 4px);\n outline: none;\n background-color: var(--hb-color-bg, #fff);\n}\n\n/* ============================================================\n * 响应式(移动端):\n * - 小屏强制最小宽度,避免列被挤压到不可读(保留横向滚动)\n * - sticky 表头在滚动时保持可见\n * ============================================================ */\n@media (max-width: 575.98px) {\n .hb-table__table {\n /* 最小宽度保证列内容可读,超出靠 wrapper 横向滚动 */\n min-width: 480px;\n }\n\n /* sticky 表头:横向滚动时表头跟随 */\n .hb-table__table thead th {\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: var(--hb-color-bg-container, #fafafa);\n }\n}\n","import { Component, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\n\nexport interface TableColumn {\n /** 列字段名 */\n prop: string;\n /** 列标题 */\n label: string;\n /** 列宽 */\n width?: string;\n /** 最小列宽 */\n minWidth?: string;\n /** 是否可排序 */\n sortable?: boolean;\n /** 对齐方式 */\n align?: 'left' | 'center' | 'right';\n /** 固定列:left / right / true(等同 left) */\n fixed?: 'left' | 'right' | boolean;\n /** 单元格文本格式化(框架无关,返回纯文本字符串) */\n formatter?: (row: Record<string, any>, index: number) => string;\n /** 该列是否可(行内)编辑;需同时开启 Table.editable 才生效 */\n editable?: boolean;\n}\n\n/**\n * 行操作按钮配置(框架无关)。\n * 由 Table 自身渲染按钮(在 shadow DOM 内),点击派发 hbAction 事件,\n * 消费方据此执行编辑/删除等逻辑——无需往每行塞框架专属元素,绕开「slot 跨行共享」限制。\n */\nexport interface TableAction {\n /** 操作标识,回传到 hbAction.detail.action */\n key: string;\n /** 按钮文案 */\n label: string;\n /** 按钮样式:default 主色文字 / danger 危险色 */\n type?: 'default' | 'primary' | 'danger';\n /** 是否禁用(按行判断) */\n disabled?: (row: Record<string, any>, index: number) => boolean;\n}\n\nexport type SortDirection = 'ascending' | 'descending' | null;\n\n/**\n * 树形数据配置。\n * `children` 指定子节点在每行数据中的字段名(默认 'children'),\n * 行存在该字段(非空数组)时渲染展开箭头,可递归展开后代。\n */\nexport interface TableTreeProps {\n children?: string;\n}\n\n/**\n * 拍平后的可见行:保留原始 row + 嵌套层级 + 唯一 key,\n * 供 render 一次性 map 成 <tr>(仅含已展开链路上的后代)。\n */\ninterface FlatRow {\n row: Record<string, any>;\n level: number;\n key: string | number;\n /** 该行是否有非空 children(决定是否渲染展开箭头) */\n hasChildren: boolean;\n /** 该行在父层数组中的索引(用于 rowKey 缺省回退与稳定 key) */\n index: number;\n}\n\ninterface FixedOffset {\n side?: 'left' | 'right';\n left?: string;\n right?: string;\n}\n\n/**\n * Table 表格组件\n * 用于展示多条结构类似的数据,可对数据进行排序、筛选、选择等操作\n */\n@Component({\n tag: 'hb-table',\n styleUrl: 'table.css',\n shadow: true,\n})\nexport class Table {\n /** 数据源 */\n @Prop() data: Record<string, any>[] = [];\n\n /** 列配置 */\n @Prop() columns: TableColumn[] = [];\n\n /** 是否带斑马纹 */\n @Prop() stripe: boolean = false;\n\n /** 是否带边框 */\n @Prop() border: boolean = false;\n\n /** 表格尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 是否显示加载状态 */\n @Prop() loading: boolean = false;\n\n /** 行数据的 Key */\n @Prop() rowKey: string = '';\n\n /** 空数据文案 */\n @Prop() emptyText: string = '暂无数据';\n\n /** 最大高度(超出固定表头) */\n @Prop() maxHeight?: string;\n\n /** 是否高亮当前行 */\n @Prop() highlightCurrentRow: boolean = false;\n\n /** 是否开启行选择(显示 checkbox 列) */\n @Prop() selectable: boolean = false;\n\n /** 行操作配置;非空时自动在末尾渲染「操作」列 */\n @Prop() actions: TableAction[] = [];\n\n /** 是否开启虚拟滚动(大数据量场景,默认关闭,向后兼容) */\n @Prop() virtualScroll: boolean = false;\n\n /** 虚拟滚动每行预估高度(px),用于计算撑高容器与可见窗口 */\n @Prop() itemHeight: number = 48;\n\n /** 虚拟滚动视口高度(px),超过此高度出现滚动条 */\n @Prop() virtualScrollHeight: number = 400;\n\n /**\n * 树形数据配置:传入后启用「可展开行」模式。\n * data 行含 `children` 字段(字段名可经此配置覆盖)时渲染展开箭头。\n * 默认 undefined —— 不启用树形。\n */\n @Prop() treeProps?: TableTreeProps;\n\n /** 是否开启行内编辑模式(默认关闭)。需列配置 column.editable=true 才对该列生效 */\n @Prop() editable: boolean = false;\n\n @State() sortProp: string = '';\n @State() sortDirection: SortDirection = null;\n @State() currentRow: number = -1;\n @State() selectedRows: Set<number> = new Set();\n /** 虚拟滚动:当前滚动位置(px),驱动可见窗口计算 */\n @State() scrollTop: number = 0;\n\n /** 树形模式:已展开行的 key 列表 */\n @State() expandedRowKeys: Array<string | number> = [];\n\n /** 行内编辑:当前正在编辑的单元格 { key, prop },null 表示无 */\n @State() editingCell: { rowKey: string | number; prop: string } | null = null;\n\n /** 排序变化事件 */\n @Event() hbSortChange: EventEmitter<{ prop: string; order: SortDirection }>;\n\n /** 行点击事件 */\n @Event() hbRowClick: EventEmitter<{ row: Record<string, any>; index: number }>;\n\n /** 选择变化事件 */\n @Event() hbSelectionChange: EventEmitter<Record<string, any>[]>;\n\n /** 行操作点击事件 */\n @Event() hbAction: EventEmitter<{ row: Record<string, any>; index: number; action: string }>;\n\n /** 树形行展开/收起事件 */\n @Event() hbExpandChange: EventEmitter<{ expanded: boolean; row: Record<string, any> }>;\n\n /** 行内编辑提交事件 */\n @Event() hbCellChange: EventEmitter<{ row: Record<string, any>; prop: string; value: any }>;\n\n @Watch('data')\n handleDataChange() {\n this.selectedRows = new Set();\n this.emitSelection();\n }\n\n /** 树形模式是否启用(显式传入 treeProps 即启用) */\n private get isTreeMode(): boolean {\n return !!this.treeProps;\n }\n\n /** 子节点字段名(treeProps.children 缺省回退 'children') */\n private get childrenField(): string {\n return (this.treeProps && this.treeProps.children) || 'children';\n }\n\n /**\n * 把树拍平成可见行列表:仅保留「祖先链路全部已展开」的后代。\n * @param list 当前层级的数组\n * @param level 当前层级(根 = 0)\n * @param parentKeyPath 父级 key 路径,用于构造深层稳定 key(避免不同分支同 index 撞 key)\n */\n private flattenTree(list: Record<string, any>[], level: number = 0, parentKeyPath: string = ''): FlatRow[] {\n const field = this.childrenField;\n const result: FlatRow[] = [];\n list.forEach((row, i) => {\n const keyPath = parentKeyPath ? `${parentKeyPath}.${i}` : `${i}`;\n const key = this.rowKey ? row[this.rowKey] : keyPath;\n const kids = row[field];\n const hasKids = Array.isArray(kids) && kids.length > 0;\n result.push({ row, level, key, hasChildren: hasKids, index: i });\n // 仅当该行已展开时,递归拍入其 children\n if (hasKids && this.expandedRowKeys.indexOf(key) !== -1) {\n result.push(...this.flattenTree(kids as Record<string, any>[], level + 1, keyPath));\n }\n });\n return result;\n }\n\n /** 树形展开/收起切换 */\n private toggleExpand = (row: Record<string, any>, key: string | number) => {\n const idx = this.expandedRowKeys.indexOf(key);\n const expanded = idx === -1;\n this.expandedRowKeys = expanded ? [...this.expandedRowKeys, key] : this.expandedRowKeys.filter(k => k !== key);\n this.hbExpandChange.emit({ expanded, row });\n };\n\n /** 行内编辑:进入编辑态 */\n private startEdit = (e: Event, key: string | number, prop: string) => {\n e.stopPropagation();\n if (!this.editable) return;\n this.editingCell = { rowKey: key, prop };\n };\n\n /** 行内编辑:提交(回车 / 失焦 / Change) */\n private commitEdit = (e: Event, row: Record<string, any>, prop: string) => {\n const input = e.target as HTMLInputElement;\n const value = input.value;\n // 就地更新(简单可用版):修改 row[prop] 后强制重渲染\n row[prop] = value;\n this.editingCell = null;\n this.hbCellChange.emit({ row, prop, value });\n };\n\n /** 行内编辑:回车提交 / Esc 取消 */\n private onEditKeydown = (e: KeyboardEvent, row: Record<string, any>, prop: string) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.commitEdit(e, row, prop);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n this.editingCell = null;\n }\n };\n\n private allCheckboxRef?: HTMLInputElement;\n\n componentDidRender() {\n // indeterminate 不是可反射的 HTML 属性,必须通过 DOM 属性设置\n if (this.allCheckboxRef) {\n this.allCheckboxRef.indeterminate = this.isIndeterminate;\n }\n }\n\n /** 虚拟滚动上下缓冲行数 */\n private readonly virtualBuffer = 5;\n\n /** 虚拟滚动:滚动事件回调,更新 scrollTop 触发可见窗口重算 */\n private handleVirtualScroll = (e: Event) => {\n const target = e.target as HTMLElement;\n this.scrollTop = target.scrollTop;\n };\n\n /** 虚拟滚动:计算可见窗口 [startIndex, endIndex) */\n private get visibleRange(): { startIndex: number; endIndex: number } {\n const total = this.data.length;\n if (total === 0) return { startIndex: 0, endIndex: 0 };\n\n const itemHeight = this.itemHeight > 0 ? this.itemHeight : 1;\n const viewport = this.virtualScrollHeight;\n\n let startIndex = Math.floor(this.scrollTop / itemHeight) - this.virtualBuffer;\n if (startIndex < 0) startIndex = 0;\n\n let endIndex = Math.ceil((this.scrollTop + viewport) / itemHeight) + this.virtualBuffer;\n if (endIndex > total) endIndex = total;\n\n return { startIndex, endIndex };\n }\n\n /** 虚拟滚动:撑高容器总高度 */\n private get virtualTotalHeight(): number {\n return this.data.length * (this.itemHeight > 0 ? this.itemHeight : 1);\n }\n\n private handleSort = (prop: string) => {\n if (this.sortProp === prop) {\n this.sortDirection = this.sortDirection === 'ascending' ? 'descending' : this.sortDirection === 'descending' ? null : 'ascending';\n } else {\n this.sortProp = prop;\n this.sortDirection = 'ascending';\n }\n this.hbSortChange.emit({ prop, order: this.sortDirection });\n };\n\n private get sortedData(): Record<string, any>[] {\n if (!this.sortProp || !this.sortDirection) return this.data;\n const direction = this.sortDirection === 'ascending' ? 1 : -1;\n return [...this.data].sort((a, b) => {\n const va = a[this.sortProp];\n const vb = b[this.sortProp];\n if (va < vb) return -1 * direction;\n if (va > vb) return 1 * direction;\n return 0;\n });\n }\n\n private get isAllSelected(): boolean {\n return this.data.length > 0 && this.selectedRows.size === this.data.length;\n }\n\n private get isIndeterminate(): boolean {\n return this.selectedRows.size > 0 && this.selectedRows.size < this.data.length;\n }\n\n private toggleRow = (index: number, e: Event) => {\n e.stopPropagation();\n const next = new Set(this.selectedRows);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n this.selectedRows = next;\n this.emitSelection();\n };\n\n private toggleAll = () => {\n if (this.isAllSelected) {\n this.selectedRows = new Set();\n } else {\n this.selectedRows = new Set(this.data.map((_, i) => i));\n }\n this.emitSelection();\n };\n\n private emitSelection() {\n const selected = Array.from(this.selectedRows)\n .sort((a, b) => a - b)\n .map(i => this.data[i])\n .filter(Boolean);\n this.hbSelectionChange.emit(selected);\n }\n\n private handleRowClick = (row: Record<string, any>, index: number) => {\n this.currentRow = index;\n this.hbRowClick.emit({ row, index });\n };\n\n private handleAction = (row: Record<string, any>, index: number, action: string) => {\n this.hbAction.emit({ row, index, action });\n };\n\n private get hasActions(): boolean {\n return !!this.actions && this.actions.length > 0;\n }\n\n /**\n * 计算固定列的 sticky 偏移(左侧/右侧累计宽度)。\n * P1 优化:缓存结果,仅当 columns 引用变化时重算。\n * 修复前是 getter,被每个 <td>/<th> 反复调用,复杂度 O(rows×cols²)。\n */\n private _fixedOffsetsCache: Record<string, FixedOffset> | null = null;\n private _fixedOffsetsColumnsRef: TableColumn[] | null = null;\n private getFixedOffsets(): Record<string, FixedOffset> {\n if (this._fixedOffsetsCache && this._fixedOffsetsColumnsRef === this.columns) {\n return this._fixedOffsetsCache;\n }\n const result: Record<string, FixedOffset> = {};\n let leftAcc = '0px';\n for (const c of this.columns) {\n const side = c.fixed === true ? 'left' : c.fixed;\n if (side === 'left') {\n result[c.prop] = { side: 'left', left: leftAcc };\n leftAcc = `calc(${leftAcc} + ${c.width || '0px'})`;\n }\n }\n let rightAcc = '0px';\n for (let i = this.columns.length - 1; i >= 0; i--) {\n const c = this.columns[i];\n if (c.fixed === 'right') {\n result[c.prop] = { side: 'right', right: rightAcc };\n rightAcc = `calc(${rightAcc} + ${c.width || '0px'})`;\n }\n }\n this._fixedOffsetsCache = result;\n this._fixedOffsetsColumnsRef = this.columns;\n return result;\n }\n\n private cellStyle(prop: string, base?: Record<string, string>): Record<string, string> {\n const off = this.getFixedOffsets()[prop];\n const style: Record<string, string> = { ...(base || {}) };\n if (off?.side === 'left') {\n style.position = 'sticky';\n style.left = off.left as string;\n style.zIndex = '2';\n } else if (off?.side === 'right') {\n style.position = 'sticky';\n style.right = off.right as string;\n style.zIndex = '2';\n }\n return style;\n }\n\n /**\n * 渲染单行(普通 + 虚拟滚动 + 树形 共用)。\n * - 普通模式:rowIndex 为在 sortedData 中的全局索引。\n * - 树形模式:fr.level 决定缩进,第一列渲染展开箭头,key 取 fr.key。\n * fr 为可选;未传时按普通模式渲染。\n */\n private renderRow(row: Record<string, any>, rowIndex: number, fr?: FlatRow) {\n const tree = !!fr;\n const level = fr ? fr.level : 0;\n const rowKeyVal = fr ? fr.key : this.rowKey ? row[this.rowKey] : rowIndex;\n const indent = level * 16;\n\n const isEditing = (prop: string) => !!this.editingCell && this.editingCell.rowKey === rowKeyVal && this.editingCell.prop === prop;\n\n return (\n <tr\n key={rowKeyVal}\n class={{\n 'hb-table__row': true,\n 'hb-table__row--striped': this.stripe && rowIndex % 2 === 1,\n 'hb-table__row--current': this.highlightCurrentRow && rowIndex === this.currentRow,\n 'hb-table__row--selected': this.selectedRows.has(rowIndex),\n 'hb-table__row--tree': tree,\n }}\n onClick={() => this.handleRowClick(row, rowIndex)}\n >\n {this.selectable && (\n <td class=\"hb-table__selection\" onClick={e => e.stopPropagation()}>\n <input type=\"checkbox\" class=\"hb-table__checkbox\" checked={this.selectedRows.has(rowIndex)} onChange={e => this.toggleRow(rowIndex, e)} />\n </td>\n )}\n {this.columns.map((col, colIdx) => {\n const off = this.getFixedOffsets()[col.prop];\n // 树形模式:第一列加缩进 + 展开箭头\n const isFirstCol = colIdx === 0;\n const showExpand = tree && isFirstCol && fr!.hasChildren;\n const expanded = showExpand && this.expandedRowKeys.indexOf(rowKeyVal) !== -1;\n const editing = this.editable && !!col.editable && isEditing(col.prop);\n const editableActive = this.editable && !!col.editable;\n\n return (\n <td\n key={col.prop}\n style={this.cellStyle(col.prop, { textAlign: col.align || 'left' })}\n class={{\n 'hb-table__td': true,\n 'hb-table__cell--fixed-left': off?.side === 'left',\n 'hb-table__cell--fixed-right': off?.side === 'right',\n 'hb-table__cell--editable': editableActive,\n }}\n onClick={editableActive ? e => this.startEdit(e, rowKeyVal, col.prop) : undefined}\n >\n {tree && isFirstCol && <span class=\"hb-table__indent\" style={{ display: 'inline-block', width: `${indent}px` }} aria-hidden=\"true\" />}\n {showExpand && (\n <button\n type=\"button\"\n class={{ 'hb-table__expand': true, 'hb-table__expand--expanded': expanded }}\n aria-label={expanded ? '收起' : '展开'}\n onClick={e => {\n e.stopPropagation();\n this.toggleExpand(row, rowKeyVal);\n }}\n >\n {expanded ? '▼' : '▶'}\n </button>\n )}\n {showExpand === false && tree && isFirstCol && <span class=\"hb-table__expand-placeholder\" style={{ display: 'inline-block', width: '16px' }} aria-hidden=\"true\" />}\n {editing ? (\n <input\n class=\"hb-table__edit-input\"\n type=\"text\"\n value={row[col.prop] ?? ''}\n onBlur={e => this.commitEdit(e, row, col.prop)}\n onKeyDown={e => this.onEditKeydown(e, row, col.prop)}\n />\n ) : (\n <slot name={`cell-${col.prop}`}>{col.formatter ? col.formatter(row, rowIndex) : (row[col.prop] ?? '')}</slot>\n )}\n </td>\n );\n })}\n {this.hasActions && (\n <td class=\"hb-table__td--actions\" style={{ textAlign: 'right', whiteSpace: 'nowrap' }} onClick={e => e.stopPropagation()}>\n {this.actions.map(act => (\n <button\n type=\"button\"\n class={{\n 'hb-table__action': true,\n 'hb-table__action--primary': act.type === 'primary',\n 'hb-table__action--danger': act.type === 'danger',\n }}\n disabled={act.disabled ? act.disabled(row, rowIndex) : false}\n onClick={() => this.handleAction(row, rowIndex, act.key)}\n >\n {act.label}\n </button>\n ))}\n </td>\n )}\n </tr>\n );\n }\n\n /** 渲染表头(普通 + 虚拟滚动共用,表头始终固定不随滚) */\n private renderHeader() {\n return (\n <thead>\n <tr>\n {this.selectable && (\n <th class=\"hb-table__selection\">\n <input\n type=\"checkbox\"\n class=\"hb-table__checkbox\"\n checked={this.isAllSelected}\n ref={el => {\n this.allCheckboxRef = el as HTMLInputElement;\n }}\n onChange={this.toggleAll}\n />\n </th>\n )}\n {this.columns.map(col => {\n const off = this.getFixedOffsets()[col.prop];\n return (\n <th\n key={col.prop}\n style={this.cellStyle(col.prop, {\n width: col.width,\n minWidth: col.minWidth,\n textAlign: col.align || 'left',\n })}\n class={{\n 'hb-table__th--sortable': col.sortable,\n 'hb-table__cell--fixed-left': off?.side === 'left',\n 'hb-table__cell--fixed-right': off?.side === 'right',\n }}\n onClick={col.sortable ? () => this.handleSort(col.prop) : undefined}\n >\n <div class=\"hb-table__th-content\">\n <span>{col.label}</span>\n {col.sortable && (\n <span class=\"hb-table__sort\">\n <span class={{ 'hb-table__sort-icon': true, 'hb-table__sort-icon--active': this.sortProp === col.prop && this.sortDirection === 'ascending' }}>▲</span>\n <span class={{ 'hb-table__sort-icon': true, 'hb-table__sort-icon--active': this.sortProp === col.prop && this.sortDirection === 'descending' }}>▼</span>\n </span>\n )}\n </div>\n </th>\n );\n })}\n {this.hasActions && (\n <th class=\"hb-table__th--actions\" style={{ textAlign: 'right', whiteSpace: 'nowrap' }}>\n 操作\n </th>\n )}\n </tr>\n </thead>\n );\n }\n\n render() {\n const displayData = this.sortedData;\n const isEmpty = displayData.length === 0;\n\n // 树形模式:把可见树拍平成带 level 的行列表(仅含已展开链路上的后代)\n const flatRows: FlatRow[] = this.isTreeMode ? this.flattenTree(displayData) : [];\n\n // 虚拟滚动:固定高度滚动视口 + 撑高容器 + 仅渲染可见窗口行(绝对定位 offset)\n // 注意:树形 + 虚拟滚动组合较复杂,此处虚拟滚动沿用普通行渲染(不展开树),\n // 保留树形仅在普通模式下生效以降低风险。\n const renderVirtualBody = () => {\n const { startIndex, endIndex } = this.visibleRange;\n const offsetTop = startIndex * (this.itemHeight > 0 ? this.itemHeight : 1);\n return (\n <div class=\"hb-table__virtual-viewport\" style={{ height: `${this.virtualScrollHeight}px`, overflowY: 'auto' }} onScroll={this.handleVirtualScroll}>\n <div class=\"hb-table__virtual-spacer\" style={{ height: `${this.virtualTotalHeight}px`, position: 'relative' }}>\n <table class=\"hb-table__table hb-table__table--virtual\">\n <tbody>\n {isEmpty ? (\n <tr>\n <td colSpan={this.columns.length + (this.selectable ? 1 : 0) + (this.hasActions ? 1 : 0)} class=\"hb-table__empty\">\n {this.emptyText}\n </td>\n </tr>\n ) : (\n <tr style={{ height: `${offsetTop}px` }} aria-hidden=\"true\" />\n )}\n {displayData.slice(startIndex, endIndex).map((row, i) => this.renderRow(row, startIndex + i))}\n </tbody>\n </table>\n </div>\n </div>\n );\n };\n\n // 普通模式:树形启用时按拍平列表渲染(带 level 缩进 + 展开箭头),否则原样按行渲染\n const renderNormalBody = () => (\n <tbody>\n {isEmpty ? (\n <tr>\n <td colSpan={this.columns.length + (this.selectable ? 1 : 0) + (this.hasActions ? 1 : 0)} class=\"hb-table__empty\">\n {this.emptyText}\n </td>\n </tr>\n ) : this.isTreeMode ? (\n flatRows.map((fr, i) => this.renderRow(fr.row, i, fr))\n ) : (\n displayData.map((row, rowIndex) => this.renderRow(row, rowIndex))\n )}\n </tbody>\n );\n\n return (\n <div class={{ 'hb-table': true, [`hb-table--${this.size}`]: true, 'hb-table--border': this.border, 'hb-table--virtual': this.virtualScroll }}>\n {this.loading && (\n <div class=\"hb-table__loading\">\n <div class=\"hb-table__loading-spinner\"></div>\n </div>\n )}\n {this.virtualScroll ? (\n <div class=\"hb-table__virtual-wrapper\">\n <table class=\"hb-table__table\">{this.renderHeader()}</table>\n {renderVirtualBody()}\n </div>\n ) : (\n <div class=\"hb-table__wrapper\" style={this.maxHeight ? { maxHeight: this.maxHeight, overflow: 'auto' } : undefined}>\n <table class=\"hb-table__table\">\n {this.renderHeader()}\n {renderNormalBody()}\n </table>\n </div>\n )}\n </div>\n );\n }\n}\n"],"version":3}
|