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 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["cascaderCss","HbCascaderStyle0","Cascader","modelValue","options","placeholder","disabled","size","clearable","showAllLevels","name","inputId","separator","emitPath","filterable","lazy","load","multiple","checkStrictly","maxTagCount","isOpen","inputValue","searchValue","loadingKeys","Set","filteredPaths","activePath","hbChange","hbExpandChange","clickOutside","createClickOutsideHandler","host","this","onClose","closeAndClearSearch","componentDidLoad","el","connect","updateInputValue","disconnectedCallback","disconnect","handleValueChange","length","mv","lastValue","option","findOptionByValue","label","labels","currentOptions","value","find","opt","push","children","join","found","getMultiModel","Array","isArray","pathEquals","a","b","every","v","i","collectLeafValuePaths","basePath","currentPath","hasChildren","leaf","result","child","getCheckState","path","valuePath","model","some","p","leafPaths","lp","handleCheck","map","idx","findIndex","splice","allIn","filter","emit","getDisplayTags","String","handleTagRemove","e","stopPropagation","hasValue","handleInputClick","handleKeyDown","key","preventDefault","parentPath","slice","handleSelect","handleSearchInput","target","collectFilteredPaths","keyword","trimmed","trim","toLowerCase","results","walk","opts","ancestors","includes","handleSearchSelect","last","isLeaf","handleClear","undefined","handleItemClick","newPath","selectedOption","pathValue","loadChildren","node","replaceOptionChildren","err","console","error","indexOf","next","delete","targetValue","newChildren","render","h","class","onClick","tag","role","tabindex","onKeyDown","viewBox","fill","stroke","d","type","id","readonly","onInput","renderSearchResults","renderCascaderMenus","menus","renderMenu","has","renderLoadingMenu","labelPath","selected","checkState","isSelected","val","showArrow"],"sources":["src/components/Cascader/cascader.css?tag=hb-cascader&encapsulation=shadow","src/components/Cascader/Cascader.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --hb-cascader-font-size: 14px;\n --hb-cascader-font-size-large: 16px;\n --hb-cascader-font-size-small: 12px;\n --hb-cascader-border-color: var(--hb-border-color, #dcdfe6);\n --hb-cascader-border-color-hover: var(--hb-color-primary);\n --hb-cascader-bg-color: var(--hb-color-white, #ffffff);\n --hb-cascader-text-color: var(--hb-color-text-regular, #606266);\n --hb-cascader-placeholder-color: var(--hb-color-text-placeholder, #c0c4cc);\n --hb-cascader-disabled-color: var(--hb-color-text-disabled, #c0c4cc);\n --hb-cascader-disabled-bg-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-cascader {\n display: inline-block;\n position: relative;\n font-size: var(--hb-cascader-font-size);\n line-height: 32px;\n}\n\n.hb-cascader__input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n cursor: pointer;\n}\n\n.hb-cascader__input {\n display: inline-block;\n width: 100%;\n height: 32px;\n line-height: 32px;\n padding: 0 30px 0 15px;\n font-size: var(--hb-cascader-font-size);\n color: var(--hb-cascader-text-color);\n background-color: var(--hb-cascader-bg-color);\n border: 1px solid var(--hb-cascader-border-color);\n border-radius: 4px;\n box-sizing: border-box;\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n\n.hb-cascader__input::placeholder {\n color: var(--hb-cascader-placeholder-color);\n}\n\n.hb-cascader__input:hover:not(:disabled) {\n border-color: var(--hb-cascader-border-color-hover);\n}\n\n.hb-cascader__input:focus {\n border-color: var(--hb-cascader-border-color-hover);\n}\n\n.hb-cascader__input:disabled {\n background-color: var(--hb-cascader-disabled-bg-color);\n border-color: var(--hb-cascader-border-color);\n color: var(--hb-cascader-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-cascader__suffix {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n color: var(--hb-cascader-text-color);\n}\n\n.hb-cascader__clear {\n margin-right: 8px;\n cursor: pointer;\n width: 14px;\n height: 14px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--hb-cascader-placeholder-color);\n transition: color 0.2s;\n}\n\n.hb-cascader__clear svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-cascader__clear:hover {\n color: var(--hb-cascader-text-color);\n}\n\n.hb-cascader__arrow {\n display: inline-flex;\n align-items: center;\n width: 12px;\n height: 12px;\n color: var(--hb-cascader-placeholder-color);\n transition: transform 0.3s;\n}\n\n.hb-cascader__arrow svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-cascader--open .hb-cascader__arrow {\n transform: rotate(180deg);\n}\n\n.hb-cascader__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-cascader-bg-color);\n border: 1px solid var(--hb-cascader-border-color);\n border-radius: 4px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 180px;\n max-height: 300px;\n overflow-y: auto;\n width: max-content;\n}\n\n.hb-cascader__menus {\n display: flex;\n padding: 6px 0;\n}\n\n.hb-cascader__menu-list {\n margin: 0;\n padding: 0;\n list-style: none;\n min-width: 180px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n/* 多列时,除最后一列外右侧加分隔线(对齐 antd 多面板视觉) */\n.hb-cascader__menus .hb-cascader__menu-list:not(:last-child) {\n border-right: 1px solid var(--hb-border-color-secondary, var(--hb-cascader-border-color));\n}\n\n.hb-cascader__menu-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n font-size: var(--hb-cascader-font-size);\n color: var(--hb-cascader-text-color);\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.hb-cascader__menu-item:hover:not(.hb-cascader__menu-item--disabled) {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-cascader__menu-item--selected {\n color: var(--hb-color-primary);\n font-weight: 600;\n}\n\n.hb-cascader__menu-item--disabled {\n color: var(--hb-cascader-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-cascader__menu-item-label {\n flex: 1;\n}\n\n.hb-cascader__menu-item-arrow {\n margin-left: 8px;\n width: 12px;\n height: 12px;\n display: inline-flex;\n align-items: center;\n color: var(--hb-cascader-placeholder-color);\n}\n\n.hb-cascader__menu-item-arrow svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-cascader__menu-item-loading {\n margin-left: 8px;\n width: 12px;\n height: 12px;\n display: inline-flex;\n align-items: center;\n color: var(--hb-color-primary, #1677ff);\n}\n\n.hb-cascader__menu-item-loading-svg {\n width: 100%;\n height: 100%;\n animation: hb-cascader-spin 0.8s linear infinite;\n}\n\n.hb-cascader__menu-list--loading .hb-cascader__menu-item--loading {\n color: var(--hb-color-text-placeholder, #c0c4cc);\n justify-content: center;\n}\n\n@keyframes hb-cascader-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.hb-cascader--large {\n font-size: var(--hb-cascader-font-size-large);\n line-height: 40px;\n}\n\n.hb-cascader--large .hb-cascader__input {\n height: 40px;\n line-height: 40px;\n font-size: var(--hb-cascader-font-size-large);\n}\n\n.hb-cascader--small {\n font-size: var(--hb-cascader-font-size-small);\n line-height: 24px;\n}\n\n.hb-cascader--small .hb-cascader__input {\n height: 24px;\n line-height: 24px;\n font-size: var(--hb-cascader-font-size-small);\n padding: 0 25px 0 12px;\n}\n\n.hb-cascader--disabled {\n cursor: not-allowed;\n}\n\n/* ---- 可搜索(filterable)---- */\n.hb-cascader__search {\n padding: 8px;\n border-bottom: 1px solid var(--hb-cascader-border-color);\n}\n\n.hb-cascader__search-input {\n width: 100%;\n height: 28px;\n line-height: 28px;\n padding: 0 8px;\n font-size: var(--hb-cascader-font-size);\n color: var(--hb-cascader-text-color);\n background-color: var(--hb-cascader-bg-color);\n border: 1px solid var(--hb-cascader-border-color);\n border-radius: 4px;\n box-sizing: border-box;\n outline: none;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n cursor: text;\n}\n\n.hb-cascader__search-input:focus {\n border-color: var(--hb-cascader-border-color-hover);\n}\n\n.hb-cascader__search-results {\n padding: 6px 0;\n max-height: 264px;\n overflow-y: auto;\n min-width: 180px;\n}\n\n.hb-cascader__search-item {\n padding: 8px 20px;\n font-size: var(--hb-cascader-font-size);\n color: var(--hb-cascader-text-color);\n cursor: pointer;\n white-space: nowrap;\n transition: background-color 0.2s;\n}\n\n.hb-cascader__search-item:hover:not(.hb-cascader__search-item--disabled) {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-cascader__search-item--selected {\n color: var(--hb-color-primary);\n font-weight: 600;\n}\n\n.hb-cascader__search-item--disabled {\n color: var(--hb-cascader-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-cascader__search-empty {\n padding: 16px 0;\n text-align: center;\n color: var(--hb-cascader-placeholder-color);\n font-size: var(--hb-cascader-font-size);\n}\n\n/* ---- 多选(multiple):tag 输入框 ---- */\n.hb-cascader--multiple .hb-cascader__input-wrapper {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n min-height: 32px;\n padding: 3px 30px 3px 4px;\n border: 1px solid var(--hb-cascader-border-color);\n border-radius: 4px;\n background-color: var(--hb-cascader-bg-color);\n box-sizing: border-box;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n\n.hb-cascader--multiple .hb-cascader__input-wrapper:hover {\n border-color: var(--hb-cascader-border-color-hover);\n}\n\n.hb-cascader--multiple .hb-cascader__input {\n flex: 1;\n min-width: 40px;\n width: auto;\n height: 24px;\n line-height: 24px;\n padding: 0 4px;\n border: none;\n background-color: transparent;\n}\n\n.hb-cascader__tag {\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n height: 22px;\n padding: 0 6px;\n margin: 2px;\n font-size: var(--hb-cascader-font-size-small);\n color: var(--hb-color-text-primary, #303133);\n background-color: var(--hb-fill-color, #f0f2f5);\n border-radius: 3px;\n}\n\n.hb-cascader__tag-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.hb-cascader__tag-close {\n margin-left: 4px;\n width: 12px;\n height: 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n color: var(--hb-cascader-placeholder-color);\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.hb-cascader__tag-close svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-cascader__tag-close:hover {\n color: var(--hb-color-text-primary, #606266);\n}\n\n.hb-cascader__tag-overflow {\n display: inline-flex;\n align-items: center;\n height: 22px;\n padding: 0 6px;\n margin: 2px;\n font-size: var(--hb-cascader-font-size-small);\n color: var(--hb-cascader-text-color);\n}\n\n/* ---- 多选:菜单项 checkbox(三态,纯 CSS)---- */\n.hb-cascader__menu-item-checkbox {\n width: 14px;\n height: 14px;\n margin-right: 8px;\n border: 1px solid var(--hb-cascader-border-color);\n border-radius: 2px;\n background-color: var(--hb-cascader-bg-color);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition:\n background-color 0.2s,\n border-color 0.2s;\n}\n\n.hb-cascader__menu-item-checkbox--checked,\n.hb-cascader__menu-item-checkbox--indeterminate {\n background-color: var(--hb-color-primary);\n border-color: var(--hb-color-primary);\n}\n\n.hb-cascader__menu-item-checkbox--checked::after {\n content: '';\n width: 4px;\n height: 8px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) translate(-1px, -1px);\n}\n\n.hb-cascader__menu-item-checkbox--indeterminate::after {\n content: '';\n width: 8px;\n height: 2px;\n background-color: #fff;\n}\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\n\nexport interface CascaderOption {\n value: string | number;\n label: string;\n children?: CascaderOption[];\n disabled?: boolean;\n leaf?: boolean;\n}\n\nexport type ValuePath = (string | number)[];\n\n/**\n * Cascader 级联选择器组件\n * 当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择。\n * 支持单选 / 多选(multiple)、可选任意层级(checkStrictly)、搜索(filterable)、动态加载(lazy)。\n */\n@Component({\n tag: 'hb-cascader',\n styleUrl: 'cascader.css',\n shadow: true,\n})\nexport class Cascader {\n @Element() el: HTMLElement;\n\n /**\n * 选中项绑定值。单选为一维路径数组(如 ['zhejiang','hangzhou']),\n * 多选(multiple)为二维数组(如 [['zhejiang','ningbo'], ['jiangsu']])。\n */\n @Prop({ mutable: true }) modelValue?: ValuePath | ValuePath[];\n\n /** 可选项数据源 */\n @Prop() options: CascaderOption[] = [];\n\n /** 输入框占位文本 */\n @Prop() placeholder: string = '请选择';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n /** 输入框尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 是否可清空 */\n @Prop() clearable: boolean = false;\n\n /** 是否显示完整路径(单选输入框 / 多选 tag 文本) */\n @Prop() showAllLevels: boolean = true;\n\n /** 输入框原生属性 */\n @Prop() name?: string;\n\n /** 输入框原生属性 */\n @Prop() inputId?: string;\n\n /** 路径分隔符 */\n @Prop() separator: string = ' / ';\n\n /** modelValue 是否输出完整路径(保留 AntD 兼容位) */\n @Prop() emitPath: boolean = true;\n\n /**\n * 是否可搜索(filterable)。下拉顶部渲染搜索框,输入时按 label 扁平化过滤,\n * 匹配项以完整路径展示,点击即选中(单选)或 toggle 勾选(多选)。\n */\n @Prop() filterable: boolean = false;\n\n /**\n * 是否开启动态加载(lazy)。展开 children=undefined 的节点时调用 load(node) 填充子级。\n */\n @Prop() lazy: boolean = false;\n\n /** 动态加载函数(仅 lazy=true 生效) */\n @Prop() load?: (node: CascaderOption) => Promise<CascaderOption[]>;\n\n /**\n * 是否开启多选。开启后 modelValue 为二维数组,每条为一个选中路径;\n * 菜单项前渲染 checkbox,输入框以 tag 列表展示选中项。\n */\n @Prop() multiple: boolean = false;\n\n /**\n * 是否严格的选中行为(父子不关联)。\n * 单选:点击任意层级(含非叶子)即选中该路径;\n * 多选:勾选独立,不向下联动选中叶子、取消也不联动。\n */\n @Prop() checkStrictly: boolean = false;\n\n /**\n * 多选时输入框最多展示的 tag 数量,超出折叠为 +N(可选)。\n */\n @Prop() maxTagCount?: number;\n\n @State() isOpen: boolean = false;\n @State() inputValue: string = '';\n @State() searchValue: string = '';\n /** 正在动态加载子级的节点 value 集合 */\n @State() loadingKeys: Set<string | number> = new Set();\n /** 扁平化搜索结果:每项为根到匹配节点的完整路径 */\n @State() filteredPaths: CascaderOption[][] = [];\n @State() activePath: ValuePath = [];\n\n /** 值改变事件:单选 emit 一维路径或 undefined;多选 emit 二维数组(可能为 []) */\n @Event() hbChange: EventEmitter<ValuePath | ValuePath[] | undefined>;\n\n /** 展开节点变化时触发 */\n @Event() hbExpandChange: EventEmitter<ValuePath>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => {\n this.closeAndClearSearch();\n },\n });\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => {\n this.closeAndClearSearch();\n },\n });\n this.clickOutside.connect();\n this.updateInputValue();\n }\n\n private closeAndClearSearch() {\n this.isOpen = false;\n this.searchValue = '';\n this.filteredPaths = [];\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateInputValue();\n }\n\n private updateInputValue() {\n if (this.multiple) {\n this.inputValue = '';\n return;\n }\n if (!this.modelValue || (this.modelValue as ValuePath).length === 0) {\n this.inputValue = '';\n return;\n }\n const mv = this.modelValue as ValuePath;\n if (!this.showAllLevels) {\n const lastValue = mv[mv.length - 1];\n const option = this.findOptionByValue(this.options, lastValue);\n this.inputValue = option ? option.label : '';\n return;\n }\n const labels: string[] = [];\n let currentOptions = this.options;\n for (const value of mv) {\n const option = currentOptions.find(opt => opt.value === value);\n if (option) {\n labels.push(option.label);\n currentOptions = option.children || [];\n } else {\n break;\n }\n }\n this.inputValue = labels.join(this.separator);\n }\n\n private findOptionByValue(options: CascaderOption[], value: string | number): CascaderOption | null {\n for (const option of options) {\n if (option.value === value) return option;\n if (option.children) {\n const found = this.findOptionByValue(option.children, value);\n if (found) return found;\n }\n }\n return null;\n }\n\n // ===== 多选(multiple)核心算法 =====\n\n /** 取多选 modelValue 为二维数组(非多选模式或形状不符时返回 []) */\n private getMultiModel(): ValuePath[] {\n if (!this.multiple) return [];\n const mv = this.modelValue as ValuePath[] | undefined;\n if (Array.isArray(mv) && mv.length > 0 && Array.isArray(mv[0])) return mv;\n return [];\n }\n\n /** 两条 value 路径是否完全相等 */\n private pathEquals(a: ValuePath | undefined, b: ValuePath): boolean {\n if (!a || a.length !== b.length) return false;\n return a.every((v, i) => v === b[i]);\n }\n\n /** 收集某节点子树下的全部叶子 value 路径(用于父子联动计算) */\n private collectLeafValuePaths(option: CascaderOption, basePath: ValuePath): ValuePath[] {\n const currentPath = [...basePath, option.value];\n const hasChildren = option.children && option.children.length > 0;\n if (!hasChildren || option.leaf) return [currentPath];\n const result: ValuePath[] = [];\n for (const child of option.children!) {\n result.push(...this.collectLeafValuePaths(child, currentPath));\n }\n return result;\n }\n\n /**\n * 多选模式下某节点的勾选三态。\n * checkStrictly:该节点路径是否在 modelValue(checked / unchecked)。\n * 默认:按叶子计算 —— 全部叶子入选=checked,部分=indeterminate,无=unchecked。\n */\n private getCheckState(option: CascaderOption, path: ValuePath): 'checked' | 'indeterminate' | 'unchecked' {\n const valuePath = [...path, option.value];\n const model = this.getMultiModel();\n if (this.checkStrictly) {\n return model.some(p => this.pathEquals(p, valuePath)) ? 'checked' : 'unchecked';\n }\n const leafPaths = this.collectLeafValuePaths(option, path);\n if (leafPaths.every(lp => model.some(p => this.pathEquals(p, lp)))) return 'checked';\n if (leafPaths.some(lp => model.some(p => this.pathEquals(p, lp)))) return 'indeterminate';\n return 'unchecked';\n }\n\n /** 多选:toggle 某节点勾选(按 checkStrictly 决定是否联动叶子) */\n private handleCheck(option: CascaderOption, path: ValuePath) {\n let model = this.getMultiModel().map(p => [...p]);\n const valuePath = [...path, option.value];\n if (this.checkStrictly) {\n const idx = model.findIndex(p => this.pathEquals(p, valuePath));\n if (idx >= 0) model.splice(idx, 1);\n else model.push(valuePath);\n } else {\n const leafPaths = this.collectLeafValuePaths(option, path);\n const allIn = leafPaths.every(lp => model.some(p => this.pathEquals(p, lp)));\n if (allIn) {\n model = model.filter(p => !leafPaths.some(lp => this.pathEquals(lp, p)));\n } else {\n for (const lp of leafPaths) {\n if (!model.some(p => this.pathEquals(p, lp))) model.push([...lp]);\n }\n }\n }\n this.modelValue = model;\n this.hbChange.emit(model);\n }\n\n /** 多选输入框 tag 数据:每条选中路径 → 展示文本 + 路径 */\n private getDisplayTags(): { label: string; path: ValuePath }[] {\n return this.getMultiModel().map(path => {\n const labels = path.map(v => {\n const opt = this.findOptionByValue(this.options, v);\n return opt ? opt.label : String(v);\n });\n const label = this.showAllLevels ? labels.join(this.separator) : labels[labels.length - 1];\n return { label, path };\n });\n }\n\n /** 多选:删除单个 tag(移除对应路径) */\n private handleTagRemove = (path: ValuePath, e: Event) => {\n e.stopPropagation();\n const model = this.getMultiModel().filter(p => !this.pathEquals(p, path));\n this.modelValue = model;\n this.hbChange.emit(model);\n };\n\n private hasValue(): boolean {\n return this.multiple ? this.getMultiModel().length > 0 : !!this.modelValue && (this.modelValue as ValuePath).length > 0;\n }\n\n // ===== 交互 =====\n\n private handleInputClick = () => {\n if (this.disabled) return;\n if (this.isOpen) {\n this.closeAndClearSearch();\n } else {\n this.isOpen = true;\n }\n };\n\n /**\n * 键盘交互(对齐 antd / WAI-ARIA combobox):\n * Enter/Space/ArrowDown 在关闭时打开;Escape 关闭;ArrowRight/ArrowLeft 跨级导航。\n */\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n const key = e.key;\n if (!this.isOpen) {\n if (key === 'Enter' || key === ' ' || key === 'ArrowDown') {\n e.preventDefault();\n this.isOpen = true;\n }\n return;\n }\n if (key === 'Escape') {\n e.preventDefault();\n this.closeAndClearSearch();\n } else if (key === 'Enter' && this.activePath.length > 0 && !this.multiple) {\n // 选中当前路径末端叶子(若已是叶子)\n e.preventDefault();\n const lastValue = this.activePath[this.activePath.length - 1];\n const parentPath = this.activePath.slice(0, -1);\n this.handleSelect(lastValue, parentPath);\n }\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchValue = target.value;\n this.filteredPaths = this.collectFilteredPaths(this.searchValue);\n };\n\n private collectFilteredPaths(keyword: string): CascaderOption[][] {\n const trimmed = keyword.trim().toLowerCase();\n if (!trimmed) return [];\n const results: CascaderOption[][] = [];\n const walk = (opts: CascaderOption[], ancestors: CascaderOption[]) => {\n for (const opt of opts) {\n const currentPath = [...ancestors, opt];\n if (opt.label.toLowerCase().includes(trimmed)) results.push(currentPath);\n if (opt.children && opt.children.length > 0) walk(opt.children, currentPath);\n }\n };\n walk(this.options, []);\n return results;\n }\n\n /** 搜索结果点击:单选选中(叶子或 checkStrictly 任意层),多选 toggle 该路径 */\n private handleSearchSelect = (path: CascaderOption[]) => {\n const valuePath = path.map(opt => opt.value);\n if (this.multiple) {\n let model = this.getMultiModel().map(p => [...p]);\n const idx = model.findIndex(p => this.pathEquals(p, valuePath));\n if (idx >= 0) model.splice(idx, 1);\n else model.push(valuePath);\n this.modelValue = model;\n this.hbChange.emit(model);\n this.searchValue = '';\n this.filteredPaths = [];\n return;\n }\n const last = path[path.length - 1];\n const isLeaf = !last.children || last.children.length === 0 || last.leaf;\n this.searchValue = '';\n this.filteredPaths = [];\n if (isLeaf || this.checkStrictly) {\n this.modelValue = valuePath;\n this.updateInputValue();\n this.hbChange.emit(valuePath);\n this.isOpen = false;\n this.activePath = [];\n } else {\n this.activePath = valuePath;\n this.hbExpandChange.emit(valuePath);\n }\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n if (this.multiple) {\n this.modelValue = [];\n this.hbChange.emit([]);\n } else {\n this.modelValue = undefined;\n this.inputValue = '';\n this.hbChange.emit(undefined);\n }\n this.isOpen = false;\n };\n\n /** 菜单项点击(label 区):多选→叶子 toggle/非叶子展开;单选→handleSelect */\n private handleItemClick = (option: CascaderOption, path: ValuePath) => {\n if (this.multiple) {\n const isLeaf = !option.children || option.children.length === 0 || option.leaf;\n if (isLeaf) {\n this.handleCheck(option, path);\n } else {\n const newPath = [...path, option.value];\n this.activePath = newPath;\n this.hbExpandChange.emit(newPath);\n }\n return;\n }\n this.handleSelect(option.value, path);\n };\n\n /** 单选:选中(叶子或 checkStrictly 任意层)或展开 / lazy 加载 */\n private handleSelect(value: string | number, path: ValuePath) {\n const newPath = [...path, value];\n let currentOptions = this.options;\n let selectedOption: CascaderOption | null = null;\n for (const pathValue of newPath) {\n selectedOption = currentOptions.find(opt => opt.value === pathValue) || null;\n if (!selectedOption) break;\n currentOptions = selectedOption.children || [];\n }\n\n // lazy + load:children 未加载 → 触发加载\n if (this.lazy && this.load && selectedOption && selectedOption.children === undefined && !selectedOption.leaf) {\n this.activePath = newPath;\n this.hbExpandChange.emit(newPath);\n void this.loadChildren(selectedOption, newPath);\n return;\n }\n\n const isLeaf = !selectedOption || !selectedOption.children || selectedOption.children.length === 0 || selectedOption.leaf;\n\n // checkStrictly 或叶子 → 选中并关闭\n if (this.checkStrictly || isLeaf) {\n this.modelValue = newPath;\n this.updateInputValue();\n this.hbChange.emit(newPath);\n this.isOpen = false;\n this.activePath = [];\n } else {\n // 非叶子 → 展开\n this.activePath = newPath;\n this.hbExpandChange.emit(newPath);\n }\n }\n\n private async loadChildren(node: CascaderOption, path: ValuePath) {\n if (!this.load) return;\n this.loadingKeys = new Set([...this.loadingKeys, node.value]);\n try {\n const children = await this.load(node);\n this.options = this.replaceOptionChildren(this.options, node.value, children);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[hb-cascader] lazy load failed:', err);\n this.activePath = this.activePath.slice(0, this.activePath.indexOf(node.value) + 1);\n } finally {\n const next = new Set(this.loadingKeys);\n next.delete(node.value);\n this.loadingKeys = next;\n }\n void path;\n void node;\n }\n\n private replaceOptionChildren(options: CascaderOption[], targetValue: string | number, newChildren: CascaderOption[]): CascaderOption[] {\n return options.map(opt => {\n if (opt.value === targetValue) return { ...opt, children: newChildren };\n if (opt.children && opt.children.length > 0) {\n return { ...opt, children: this.replaceOptionChildren(opt.children, targetValue, newChildren) };\n }\n return opt;\n });\n }\n\n // ===== render =====\n\n render() {\n return (\n <div\n class={{\n 'hb-cascader': true,\n 'hb-cascader--open': this.isOpen,\n 'hb-cascader--disabled': this.disabled,\n 'hb-cascader--multiple': this.multiple,\n [`hb-cascader--${this.size}`]: true,\n }}\n >\n <div class=\"hb-cascader__input-wrapper\" onClick={this.handleInputClick}>\n {this.multiple &&\n this.getDisplayTags()\n .slice(0, this.maxTagCount === undefined ? undefined : this.maxTagCount)\n .map(tag => (\n <span class=\"hb-cascader__tag\">\n <span class=\"hb-cascader__tag-label\">{tag.label}</span>\n {!this.disabled && (\n <span\n class=\"hb-cascader__tag-close\"\n role=\"button\"\n aria-label=\"删除\"\n tabindex={0}\n onClick={e => this.handleTagRemove(tag.path, e)}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleTagRemove(tag.path, e);\n }\n }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n )}\n </span>\n ))}\n {this.multiple && this.maxTagCount !== undefined && this.getDisplayTags().length > this.maxTagCount && (\n <span class=\"hb-cascader__tag-overflow\">+{this.getDisplayTags().length - this.maxTagCount}</span>\n )}\n <input\n type=\"text\"\n id={this.inputId}\n name={this.name}\n class=\"hb-cascader__input\"\n placeholder={this.hasValue() ? '' : this.placeholder}\n value={this.multiple ? '' : this.inputValue}\n disabled={this.disabled}\n readonly\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n onKeyDown={this.handleKeyDown}\n />\n <span class=\"hb-cascader__suffix\">\n {this.clearable && this.hasValue() && (\n <span\n class=\"hb-cascader__clear\"\n role=\"button\"\n aria-label=\"清空\"\n tabindex={0}\n onClick={this.handleClear}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleClear(e);\n }\n }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n )}\n <span class=\"hb-cascader__arrow\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </span>\n </span>\n </div>\n {this.isOpen && (\n <div class=\"hb-cascader__dropdown\">\n {this.filterable && (\n <div class=\"hb-cascader__search\">\n <input\n type=\"text\"\n class=\"hb-cascader__search-input\"\n placeholder=\"搜索\"\n value={this.searchValue}\n onInput={this.handleSearchInput}\n aria-label=\"搜索选项\"\n />\n </div>\n )}\n {this.filterable && this.searchValue.trim() !== '' ? (\n this.renderSearchResults()\n ) : (\n <div class=\"hb-cascader__menus\" role=\"listbox\" aria-multiselectable={this.multiple ? 'true' : 'false'}>\n {this.renderCascaderMenus()}\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n\n private renderCascaderMenus() {\n const menus: any[] = [];\n let currentOptions = this.options;\n let currentPath: ValuePath = [];\n\n menus.push(this.renderMenu(currentOptions, currentPath));\n\n for (let i = 0; i < this.activePath.length; i++) {\n const pathValue = this.activePath[i];\n const option = currentOptions.find(opt => opt.value === pathValue);\n if (!option) break;\n\n if (option.children === undefined && this.loadingKeys.has(option.value)) {\n menus.push(this.renderLoadingMenu());\n break;\n }\n\n if (option.children && option.children.length > 0) {\n currentPath = [...currentPath, pathValue];\n currentOptions = option.children;\n menus.push(this.renderMenu(currentOptions, currentPath));\n } else {\n break;\n }\n }\n return menus;\n }\n\n private renderLoadingMenu() {\n return (\n <ul class=\"hb-cascader__menu-list hb-cascader__menu-list--loading\" role=\"status\" aria-live=\"polite\">\n <li class=\"hb-cascader__menu-item hb-cascader__menu-item--loading\">\n <span class=\"hb-cascader__menu-item-label\">加载中…</span>\n </li>\n </ul>\n );\n }\n\n private renderSearchResults() {\n if (this.filteredPaths.length === 0) {\n return (\n <div class=\"hb-cascader__search-empty\" role=\"status\">\n 无匹配数据\n </div>\n );\n }\n return (\n <div class=\"hb-cascader__search-results\" role=\"listbox\" aria-label=\"搜索结果\">\n {this.filteredPaths.map(path => {\n const labelPath = path.map(opt => opt.label).join(this.separator);\n const valuePath = path.map(opt => opt.value);\n const last = path[path.length - 1];\n const disabled = !!last.disabled;\n const selected = this.multiple\n ? this.getMultiModel().some(p => this.pathEquals(p, valuePath))\n : !!this.modelValue && this.pathEquals(this.modelValue as ValuePath, valuePath);\n\n return (\n <div\n class={{\n 'hb-cascader__search-item': true,\n 'hb-cascader__search-item--selected': selected,\n 'hb-cascader__search-item--disabled': disabled,\n }}\n role=\"option\"\n aria-selected={selected ? 'true' : 'false'}\n aria-disabled={disabled ? 'true' : undefined}\n onClick={() => !disabled && this.handleSearchSelect(path)}\n >\n {this.multiple && (\n <span class=\"hb-cascader__menu-item-checkbox\" data-state={selected ? 'checked' : 'unchecked'} role=\"checkbox\" aria-checked={selected ? 'true' : 'false'} />\n )}\n {labelPath}\n </div>\n );\n })}\n </div>\n );\n }\n\n private renderMenu(options: CascaderOption[], path: ValuePath) {\n if (!options || options.length === 0) return null;\n return (\n <ul class=\"hb-cascader__menu-list\" role=\"group\">\n {options.map(option => {\n const checkState = this.getCheckState(option, path);\n // 单选高亮:路径在当前 modelValue 上\n const isSelected =\n !this.multiple &&\n path.length > 0 &&\n !!this.modelValue &&\n path.every((val, idx) => (this.modelValue as ValuePath)[idx] === val) &&\n (this.modelValue as ValuePath).length === path.length + 1 &&\n (this.modelValue as ValuePath)[path.length] === option.value;\n const showArrow = this.loadingKeys.has(option.value)\n ? false\n : (option.children && option.children.length > 0) || (this.lazy && option.children === undefined && !option.leaf);\n\n return (\n <li\n class={{\n 'hb-cascader__menu-item': true,\n 'hb-cascader__menu-item--selected': isSelected,\n 'hb-cascader__menu-item--disabled': option.disabled,\n }}\n role=\"option\"\n aria-selected={isSelected ? 'true' : 'false'}\n aria-disabled={option.disabled ? 'true' : undefined}\n onClick={() => !option.disabled && this.handleItemClick(option, path)}\n >\n {this.multiple && (\n <span\n class={{\n 'hb-cascader__menu-item-checkbox': true,\n 'hb-cascader__menu-item-checkbox--checked': checkState === 'checked',\n 'hb-cascader__menu-item-checkbox--indeterminate': checkState === 'indeterminate',\n }}\n data-state={checkState}\n role=\"checkbox\"\n aria-checked={checkState === 'indeterminate' ? 'mixed' : checkState === 'checked' ? 'true' : 'false'}\n onClick={e => {\n e.stopPropagation();\n if (!option.disabled) this.handleCheck(option, path);\n }}\n />\n )}\n <span class=\"hb-cascader__menu-item-label\">{option.label}</span>\n {this.loadingKeys.has(option.value) ? (\n <span class=\"hb-cascader__menu-item-loading\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"hb-cascader__menu-item-loading-svg\">\n <path d=\"M12 5V2L8 6l4 4V7a5 5 0 1 1-5 5H5a7 7 0 1 0 7-7z\" />\n </svg>\n </span>\n ) : showArrow ? (\n <span class=\"hb-cascader__menu-item-arrow\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n </span>\n ) : null}\n </li>\n );\n })}\n </ul>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["segmentedCss","HbSegmentedStyle0","Segmented","modelValue","block","size","options","activeIndex","hbChange","componentWillLoad","this","syncActiveIndex","findIndex","o","value","handleSelect","option","disabled","emit","handleKeydown","e","enabled","map","i","filter","x","length","enabledIndices","action","handleListKeyboard","indexOf","itemCount","loop","type","preventDefault","targetIdx","index","render","h","key","class","role","onKeyDown","checked","isFirstEnabled","tabindex","onClick","label"],"sources":["src/components/Segmented/segmented.css?tag=hb-segmented&encapsulation=shadow","src/components/Segmented/Segmented.tsx"],"sourcesContent":[":host { display: block; }\n.hb-segmented {\n display: inline-flex;\n padding: 2px;\n background: var(--hb-color-fill);\n border-radius: var(--hb-border-radius-base);\n box-sizing: border-box;\n}\n.hb-segmented--block { display: flex; width: 100%; }\n.hb-segmented__items { display: inline-flex; gap: 2px; width: 100%; }\n\n/* 尺寸 */\n.hb-segmented--large .hb-segmented__item { padding: 6px 18px; font-size: var(--hb-font-size-base); }\n.hb-segmented--default .hb-segmented__item { padding: 4px 14px; font-size: var(--hb-font-size-sm); }\n.hb-segmented--small .hb-segmented__item { padding: 2px 10px; font-size: var(--hb-font-size-xs); }\n\n.hb-segmented__item {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: var(--hb-color-text);\n cursor: pointer;\n border-radius: var(--hb-border-radius-sm);\n transition: background 0.2s, color 0.2s;\n white-space: nowrap;\n flex: 1;\n line-height: 1.5;\n font-family: inherit;\n}\n.hb-segmented__item:hover:not(.hb-segmented__item--active):not(.hb-segmented__item--disabled) {\n background: var(--hb-color-fill-secondary);\n}\n/* 高亮滑块背景 */\n.hb-segmented__item--active {\n background: var(--hb-color-bg-container);\n color: var(--hb-color-primary);\n font-weight: 500;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n.hb-segmented__item--disabled {\n color: var(--hb-color-text-disabled);\n cursor: not-allowed;\n}\n.hb-segmented__item-label { pointer-events: none; }\n","import { Component, h, Prop, Event, EventEmitter, State, Element } from '@stencil/core';\nimport { handleListKeyboard } from '../../utils/a11y';\n\n/**\n * Segmented 分段控制器组件\n * 类似 iOS 分段控件,选中项有高亮滑块背景。\n *\n * 无障碍(对齐 WAI-ARIA radiogroup / antd Segmented):\n * - 容器 role=radiogroup\n * - 选项 role=radio + aria-checked + tabindex(仅选中项 tabindex=0,roving)\n * - 键盘:←→ 在选项间移动并选中、Home/End 跳首尾\n */\n@Component({ tag: 'hb-segmented', styleUrl: 'segmented.css', shadow: true })\nexport class Segmented {\n @Element() el: HTMLElement;\n\n /** 当前选中值 */\n @Prop({ mutable: true }) modelValue: string = '';\n\n /** 是否撑满宽度 */\n @Prop() block: boolean = false;\n\n /** 尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 选项数组 */\n @Prop() options: SegmentedOption[] = [];\n\n @State() activeIndex: number = -1;\n\n /** 选中值变化事件 */\n @Event() hbChange: EventEmitter<string>;\n\n componentWillLoad() {\n this.syncActiveIndex();\n }\n\n private syncActiveIndex() {\n this.activeIndex = this.options.findIndex(o => o.value === this.modelValue);\n }\n\n private handleSelect = (option: SegmentedOption) => {\n if (option.disabled || option.value === this.modelValue) return;\n this.modelValue = option.value;\n this.syncActiveIndex();\n this.hbChange.emit(option.value);\n };\n\n /** 键盘导航:radiogroup 模式,←→/Home/End 移动并选中(跳过禁用项) */\n private handleKeydown = (e: KeyboardEvent) => {\n const enabled = this.options.map((o, i) => ({ o, i })).filter(x => !x.o.disabled);\n if (enabled.length === 0) return;\n const enabledIndices = enabled.map(x => x.i);\n // 在启用项索引空间内做导航\n const action = handleListKeyboard(e, {\n activeIndex: enabledIndices.indexOf(this.activeIndex),\n itemCount: enabled.length,\n loop: true,\n });\n if (action.type === 'navigate') {\n e.preventDefault();\n const targetIdx = enabledIndices[action.index];\n this.handleSelect(this.options[targetIdx]);\n }\n };\n\n render() {\n return (\n <div\n class={{ 'hb-segmented': true, [`hb-segmented--${this.size}`]: true, 'hb-segmented--block': this.block }}\n role=\"radiogroup\"\n onKeyDown={this.handleKeydown}\n >\n <div class=\"hb-segmented__items\">\n {this.options.map((option, index) => {\n const checked = option.value === this.modelValue;\n // roving tabindex:仅选中项(或未选中时首个启用项)可达 Tab\n const isFirstEnabled = this.options.findIndex(o => !o.disabled) === index;\n const tabindex = checked || (this.activeIndex < 0 && isFirstEnabled) ? 0 : -1;\n return (\n <button\n type=\"button\"\n class={{\n 'hb-segmented__item': true,\n 'hb-segmented__item--active': checked,\n 'hb-segmented__item--disabled': !!option.disabled,\n }}\n disabled={!!option.disabled}\n role=\"radio\"\n aria-checked={checked ? 'true' : 'false'}\n tabindex={option.disabled ? -1 : tabindex}\n onClick={() => this.handleSelect(option)}\n >\n <span class=\"hb-segmented__item-label\">{option.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n );\n }\n}\n\nexport interface SegmentedOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n"],"mappings":"6FAAA,MAAMA,EAAe,8yNACrB,MAAAC,EAAeD,E,MCYFE,EAAS,M,oFAIKC,WAAqB,GAGtCC,MAAiB,MAGjBC,KAAsC,UAGtCC,QAA6B,GAE5BC,aAAuB,EAGvBC,SAET,iBAAAC,GACEC,KAAKC,iB,CAGC,eAAAA,GACND,KAAKH,YAAcG,KAAKJ,QAAQM,WAAUC,GAAKA,EAAEC,QAAUJ,KAAKP,Y,CAG1DY,aAAgBC,IACtB,GAAIA,EAAOC,UAAYD,EAAOF,QAAUJ,KAAKP,WAAY,OACzDO,KAAKP,WAAaa,EAAOF,MACzBJ,KAAKC,kBACLD,KAAKF,SAASU,KAAKF,EAAOF,MAAM,EAI1BK,cAAiBC,IACvB,MAAMC,EAAUX,KAAKJ,QAAQgB,KAAI,CAACT,EAAGU,KAAC,CAAQV,IAAGU,QAAMC,QAAOC,IAAMA,EAAEZ,EAAEI,WACxE,GAAII,EAAQK,SAAW,EAAG,OAC1B,MAAMC,EAAiBN,EAAQC,KAAIG,GAAKA,EAAEF,IAE1C,MAAMK,EAASC,EAAmBT,EAAG,CACnCb,YAAaoB,EAAeG,QAAQpB,KAAKH,aACzCwB,UAAWV,EAAQK,OACnBM,KAAM,OAER,GAAIJ,EAAOK,OAAS,WAAY,CAC9Bb,EAAEc,iBACF,MAAMC,EAAYR,EAAeC,EAAOQ,OACxC1B,KAAKK,aAAaL,KAAKJ,QAAQ6B,G,GAInC,MAAAE,GACE,OACEC,EAAA,OAAAC,IAAA,2CACEC,MAAO,CAAE,eAAgB,KAAM,CAAC,iBAAiB9B,KAAKL,QAAS,KAAM,sBAAuBK,KAAKN,OACjGqC,KAAK,aACLC,UAAWhC,KAAKS,eAEhBmB,EAAA,OAAAC,IAAA,2CAAKC,MAAM,uBACR9B,KAAKJ,QAAQgB,KAAI,CAACN,EAAQoB,KACzB,MAAMO,EAAU3B,EAAOF,QAAUJ,KAAKP,WAEtC,MAAMyC,EAAiBlC,KAAKJ,QAAQM,WAAUC,IAAMA,EAAEI,aAAcmB,EACpE,MAAMS,EAAWF,GAAYjC,KAAKH,YAAc,GAAKqC,EAAkB,GAAK,EAC5E,OACEN,EAAA,UACEL,KAAK,SACLO,MAAO,CACL,qBAAsB,KACtB,6BAA8BG,EAC9B,iCAAkC3B,EAAOC,UAE3CA,WAAYD,EAAOC,SACnBwB,KAAK,QAAO,eACEE,EAAU,OAAS,QACjCE,SAAU7B,EAAOC,UAAY,EAAI4B,EACjCC,QAAS,IAAMpC,KAAKK,aAAaC,IAEjCsB,EAAA,QAAME,MAAM,4BAA4BxB,EAAO+B,OACxC,K","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["timePickerCss","HbTimePickerStyle0","TimePicker","modelValue","placeholder","disabled","size","clearable","format","name","inputId","isOpen","inputValue","selectedHour","selectedMinute","selectedSecond","hbChange","clickOutside","createClickOutsideHandler","host","this","onClose","componentDidLoad","el","connect","updateInputValue","disconnectedCallback","disconnect","handleValueChange","parts","split","length","parseInt","handleInputClick","handleClear","e","stopPropagation","undefined","emit","handleTimeSelect","hour","minute","second","timeStr","String","padStart","generateNumbers","max","Array","from","_","i","render","hours","minutes","seconds","h","key","class","onClick","type","id","value","readonly","map","includes"],"sources":["src/components/TimePicker/time-picker.css?tag=hb-time-picker&encapsulation=shadow","src/components/TimePicker/TimePicker.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --hb-time-picker-font-size: 14px;\n --hb-time-picker-height: 32px;\n --hb-time-picker-border-color: var(--hb-border-color, #dcdfe6);\n --hb-time-picker-border-color-hover: var(--hb-color-primary);\n --hb-time-picker-bg-color: var(--hb-color-white, #ffffff);\n}\n\n.hb-time-picker {\n display: inline-block;\n position: relative;\n width: 200px;\n}\n\n.hb-time-picker__input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n cursor: pointer;\n}\n\n.hb-time-picker__input {\n display: inline-block;\n width: 100%;\n height: var(--hb-time-picker-height);\n line-height: var(--hb-time-picker-height);\n padding: 0 30px 0 15px;\n font-size: var(--hb-time-picker-font-size);\n color: var(--hb-color-text-regular, #606266);\n background-color: var(--hb-time-picker-bg-color);\n border: 1px solid var(--hb-time-picker-border-color);\n border-radius: 4px;\n box-sizing: border-box;\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n\n.hb-time-picker__input:hover:not(:disabled) {\n border-color: var(--hb-time-picker-border-color-hover);\n}\n\n.hb-time-picker__suffix {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n}\n\n.hb-time-picker__clear {\n margin-right: 8px;\n cursor: pointer;\n font-size: 16px;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-time-picker__icon {\n font-size: 14px;\n}\n\n.hb-time-picker__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-time-picker-bg-color);\n border: 1px solid var(--hb-time-picker-border-color);\n border-radius: 4px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 200px;\n max-height: 300px;\n}\n\n.hb-time-picker__body {\n display: flex;\n padding: 8px;\n}\n\n.hb-time-picker__list {\n flex: 1;\n max-height: 280px;\n overflow-y: auto;\n}\n\n.hb-time-picker__list-title {\n text-align: center;\n font-size: 12px;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n padding: 8px 0;\n border-bottom: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n}\n\n.hb-time-picker__list-content {\n padding: 4px 0;\n}\n\n.hb-time-picker__item {\n padding: 8px 16px;\n text-align: center;\n font-size: 13px;\n color: var(--hb-color-text-regular, #606266);\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.hb-time-picker__item:hover {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-time-picker__item--selected {\n background-color: var(--hb-color-primary-light-9, #ecf5ff);\n color: var(--hb-color-primary);\n font-weight: 600;\n}\n\n.hb-time-picker--small {\n width: 180px;\n}\n\n.hb-time-picker--small .hb-time-picker__input {\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n}\n\n.hb-time-picker--large {\n width: 220px;\n}\n\n.hb-time-picker--large .hb-time-picker__input {\n height: 40px;\n line-height: 40px;\n font-size: 16px;\n}\n\n.hb-time-picker--disabled {\n cursor: not-allowed;\n}\n\n.hb-time-picker--disabled .hb-time-picker__input {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-time-picker-border-color);\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\n\n/**\n * TimePicker 时间选择器组件\n * 用于选择或输入时间\n */\n@Component({\n tag: 'hb-time-picker',\n styleUrl: 'time-picker.css',\n shadow: true,\n})\nexport class TimePicker {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string;\n\n /**\n * 输入框占位文本\n */\n @Prop() placeholder: string = '请选择时间';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 输入框尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 是否可清空\n * @default false\n */\n @Prop() clearable: boolean = false;\n\n /**\n * 时间格式\n * @default 'HH:mm:ss'\n */\n @Prop() format: string = 'HH:mm:ss';\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() inputId?: string;\n\n @State() isOpen: boolean = false;\n @State() inputValue: string = '';\n @State() selectedHour: number = 0;\n @State() selectedMinute: number = 0;\n @State() selectedSecond: number = 0;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; },\n });\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; },\n });\n this.clickOutside.connect();\n this.updateInputValue();\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateInputValue();\n }\n\n private updateInputValue() {\n if (!this.modelValue) {\n this.inputValue = '';\n return;\n }\n\n const parts = this.modelValue.split(':');\n if (parts.length >= 2) {\n this.selectedHour = parseInt(parts[0]) || 0;\n this.selectedMinute = parseInt(parts[1]) || 0;\n this.selectedSecond = parseInt(parts[2]) || 0;\n this.inputValue = this.modelValue;\n }\n }\n\n private handleInputClick = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.modelValue = undefined;\n this.inputValue = '';\n this.isOpen = false;\n this.hbChange.emit(undefined);\n };\n\n private handleTimeSelect = (hour: number, minute: number, second: number) => {\n this.selectedHour = hour;\n this.selectedMinute = minute;\n this.selectedSecond = second;\n \n const timeStr = `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}:${String(second).padStart(2, '0')}`;\n this.modelValue = timeStr;\n this.inputValue = timeStr;\n this.isOpen = false;\n this.hbChange.emit(timeStr);\n };\n\n private generateNumbers(max: number): number[] {\n return Array.from({ length: max + 1 }, (_, i) => i);\n }\n\n render() {\n const hours = this.generateNumbers(23);\n const minutes = this.generateNumbers(59);\n const seconds = this.generateNumbers(59);\n\n return (\n <div\n class={{\n 'hb-time-picker': true,\n 'hb-time-picker--open': this.isOpen,\n 'hb-time-picker--disabled': this.disabled,\n [`hb-time-picker--${this.size}`]: true,\n }}\n >\n <div class=\"hb-time-picker__input-wrapper\" onClick={this.handleInputClick}>\n <input\n type=\"text\"\n id={this.inputId}\n name={this.name}\n class=\"hb-time-picker__input\"\n placeholder={this.placeholder}\n value={this.inputValue}\n disabled={this.disabled}\n readonly\n />\n <span class=\"hb-time-picker__suffix\">\n {this.clearable && this.modelValue && (\n <span class=\"hb-time-picker__clear\" onClick={this.handleClear}>\n ×\n </span>\n )}\n <span class=\"hb-time-picker__icon\">🕐</span>\n </span>\n </div>\n {this.isOpen && (\n <div class=\"hb-time-picker__dropdown\">\n <div class=\"hb-time-picker__body\">\n <div class=\"hb-time-picker__list\">\n <div class=\"hb-time-picker__list-title\">时</div>\n <div class=\"hb-time-picker__list-content\">\n {hours.map((hour) => (\n <div\n class={{\n 'hb-time-picker__item': true,\n 'hb-time-picker__item--selected': hour === this.selectedHour,\n }}\n onClick={() => this.handleTimeSelect(hour, this.selectedMinute, this.selectedSecond)}\n >\n {String(hour).padStart(2, '0')}\n </div>\n ))}\n </div>\n </div>\n <div class=\"hb-time-picker__list\">\n <div class=\"hb-time-picker__list-title\">分</div>\n <div class=\"hb-time-picker__list-content\">\n {minutes.map((minute) => (\n <div\n class={{\n 'hb-time-picker__item': true,\n 'hb-time-picker__item--selected': minute === this.selectedMinute,\n }}\n onClick={() => this.handleTimeSelect(this.selectedHour, minute, this.selectedSecond)}\n >\n {String(minute).padStart(2, '0')}\n </div>\n ))}\n </div>\n </div>\n {this.format.includes('ss') && (\n <div class=\"hb-time-picker__list\">\n <div class=\"hb-time-picker__list-title\">秒</div>\n <div class=\"hb-time-picker__list-content\">\n {seconds.map((second) => (\n <div\n class={{\n 'hb-time-picker__item': true,\n 'hb-time-picker__item--selected': second === this.selectedSecond,\n }}\n onClick={() => this.handleTimeSelect(this.selectedHour, this.selectedMinute, second)}\n >\n {String(second).padStart(2, '0')}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,g as s,h as t}from"./p-e42dfa95.js";const a={success:"✓",warning:"⚠",info:"ℹ",error:"✕",loading:"⏳"};const i=class{constructor(s){e(this,s)}get el(){return s(this)}message="";type="info";closable=false;duration=3e3;visible=true;componentDidLoad(){if(this.duration>0){setTimeout((()=>this.close()),this.duration)}}close=()=>{this.visible=false;setTimeout((()=>this.el.remove()),300)};render(){return t("div",{key:"903b6bef78fb6ba813556bf847b7e6e03de46c3d",class:{"hb-message":true,[`hb-message--${this.type}`]:true,"hb-message--visible":this.visible},role:"alert"},t("span",{key:"b29a9043e502cf7d3a96089b9fed6214a3d43bd4",class:"hb-message__icon"},a[this.type]),t("span",{key:"cc926f41bd0b721c203f687629019bb095134dbe",class:"hb-message__text"},this.message),this.closable&&t("span",{key:"f6d6743646b47e8ef5e83264c69c94d5398eb69b",class:"hb-message__close",onClick:this.close},"×"))}};export{i as hb_message};
|
|
2
|
-
//# sourceMappingURL=p-76519752.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["ICON_MAP","success","warning","info","error","loading","Message","message","type","closable","duration","visible","componentDidLoad","this","setTimeout","close","el","remove","render","h","key","class","role","onClick"],"sources":["src/components/Message/Message.tsx"],"sourcesContent":["import { Component, h, Prop, State, Element } from '@stencil/core';\n\nexport type MessageType = 'success' | 'warning' | 'info' | 'error' | 'loading';\n\nconst ICON_MAP: Record<MessageType, string> = {\n success: '✓',\n warning: '⚠',\n info: 'ℹ',\n error: '✕',\n loading: '⏳',\n};\n\n/**\n * Message 消息提示组件\n * 常用于主动操作后的反馈提示\n */\n@Component({\n tag: 'hb-message',\n shadow: true,\n})\nexport class Message {\n @Element() el: HTMLElement;\n\n /** 消息文字 */\n @Prop() message: string = '';\n\n /** 消息类型 */\n @Prop() type: MessageType = 'info';\n\n /** 是否显示关闭按钮 */\n @Prop() closable: boolean = false;\n\n /** 显示时间(毫秒),0 为不自动关闭 */\n @Prop() duration: number = 3000;\n\n @State() visible: boolean = true;\n\n componentDidLoad() {\n if (this.duration > 0) {\n setTimeout(() => this.close(), this.duration);\n }\n }\n\n private close = () => {\n this.visible = false;\n setTimeout(() => this.el.remove(), 300);\n };\n\n render() {\n return (\n <div\n class={{\n 'hb-message': true,\n [`hb-message--${this.type}`]: true,\n 'hb-message--visible': this.visible,\n }}\n role=\"alert\"\n >\n <span class=\"hb-message__icon\">{ICON_MAP[this.type]}</span>\n <span class=\"hb-message__text\">{this.message}</span>\n {this.closable && (\n <span class=\"hb-message__close\" onClick={this.close}>×</span>\n )}\n </div>\n );\n }\n}\n"],"mappings":"kDAIA,MAAMA,EAAwC,CAC5CC,QAAS,IACTC,QAAS,IACTC,KAAM,IACNC,MAAO,IACPC,QAAS,K,MAWEC,EAAO,M,iDAIVC,QAAkB,GAGlBC,KAAoB,OAGpBC,SAAoB,MAGpBC,SAAmB,IAElBC,QAAmB,KAE5B,gBAAAC,GACE,GAAIC,KAAKH,SAAW,EAAG,CACrBI,YAAW,IAAMD,KAAKE,SAASF,KAAKH,S,EAIhCK,MAAQ,KACdF,KAAKF,QAAU,MACfG,YAAW,IAAMD,KAAKG,GAAGC,UAAU,IAAI,EAGzC,MAAAC,GACE,OACEC,EAAA,OAAAC,IAAA,2CACEC,MAAO,CACL,aAAc,KACd,CAAC,eAAeR,KAAKL,QAAS,KAC9B,sBAAuBK,KAAKF,SAE9BW,KAAK,SAELH,EAAA,QAAAC,IAAA,2CAAMC,MAAM,oBAAoBrB,EAASa,KAAKL,OAC9CW,EAAA,QAAAC,IAAA,2CAAMC,MAAM,oBAAoBR,KAAKN,SACpCM,KAAKJ,UACJU,EAAA,QAAAC,IAAA,2CAAMC,MAAM,oBAAoBE,QAASV,KAAKE,OAAK,K","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as t,c as e,g as i,h as o}from"./p-e42dfa95.js";import{h as a}from"./p-cc0aeb50.js";const r='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:block}.hb-tabs__header{border-bottom:1px solid var(--hb-color-border-secondary);margin-bottom:var(--hb-spacing-md)}.hb-tabs__nav{display:flex;gap:var(--hb-spacing-xs)}.hb-tabs__item{align-items:center;border-bottom:2px solid #0000;color:var(--hb-color-text-secondary);cursor:pointer;display:inline-flex;font-size:var(--hb-font-size-sm);gap:4px;padding:var(--hb-spacing-xs)var(--hb-spacing-md);transition:all var(--hb-transition-duration)var(--hb-transition-function);-webkit-user-select:none;user-select:none}.hb-tabs__item--active,.hb-tabs__item:hover{color:var(--hb-color-primary)}.hb-tabs__item--active{border-bottom-color:var(--hb-color-primary)}.hb-tabs--card .hb-tabs__item{background:var(--hb-color-fill-quaternary);border:1px solid var(--hb-color-border);border-bottom:none;border-radius:var(--hb-border-radius-sm)var(--hb-border-radius-sm)0 0}.hb-tabs--card .hb-tabs__item--active{background:var(--hb-color-bg);border-bottom-color:var(--hb-color-bg);margin-bottom:-1px}.hb-tabs__item-close{align-items:center;border-radius:50%;display:inline-flex;font-size:11px;height:14px;justify-content:center;transition:background-color var(--hb-transition-duration);width:14px}.hb-tabs__item-close:hover{background-color:#0000001a}.hb-tabs__content{color:var(--hb-color-text)}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const n=r;const s=class{constructor(i){t(this,i);this.hbTabChange=e(this,"hbTabChange",7);this.hbTabRemove=e(this,"hbTabRemove",7)}get el(){return i(this)}modelValue="";type="line";closable=false;activeTab="";tabs=[];hbTabChange;hbTabRemove;componentDidLoad(){this.collectTabs();if(!this.modelValue&&this.tabs.length>0){this.activeTab=this.tabs[0].key;this.modelValue=this.activeTab}else{this.activeTab=this.modelValue}this.updatePaneVisibility()}handleModelValueChange(){this.activeTab=this.modelValue;this.updatePaneVisibility()}collectTabs(){const t=this.el.querySelectorAll("hb-tab-pane");const e=[];t.forEach((t=>{e.push({key:t.getAttribute("key")||"",label:t.getAttribute("label")||""})}));this.tabs=e}updatePaneVisibility(){const t=this.el.querySelectorAll("hb-tab-pane");t.forEach((t=>{const e=t.getAttribute("key")===this.activeTab;t.setAttribute("active",String(e))}))}handleTabClick=t=>{this.activeTab=t;this.modelValue=t;this.hbTabChange.emit(t);this.updatePaneVisibility();this.moveFocusToTab(t)};handleTabKeydown=(t,e)=>{const i=t.key==="ArrowLeft"||t.key==="ArrowRight"||t.key==="ArrowUp"||t.key==="ArrowDown"||t.key==="Home"||t.key==="End";if(!i)return;t.preventDefault();const o=a(t,{activeIndex:e,itemCount:this.tabs.length,loop:true});if(o.type==="navigate"&&this.tabs[o.index]){this.handleTabClick(this.tabs[o.index].key)}};moveFocusToTab(t){const e=this.tabs.findIndex((e=>e.key===t));if(e<0)return;const i=this.el.shadowRoot?.querySelectorAll(".hb-tabs__item");i?.[e]?.focus()}render(){return o("div",{key:"3da48f868d9a457ff75142065ad7d12943cadf9e",class:{"hb-tabs":true,[`hb-tabs--${this.type}`]:true}},o("div",{key:"37245e5d82bedaa8e53f91dc5773db0b0b24f7e3",class:"hb-tabs__header"},o("div",{key:"37ddb4d2dfb726cc37c36bcf6ce00182b062bb8b",class:"hb-tabs__nav",role:"tablist"},this.tabs.map(((t,e)=>{const i=t.key===this.activeTab;const a=`hb-tabs__tab-${t.key}`;return o("div",{class:{"hb-tabs__item":true,"hb-tabs__item--active":i},role:"tab",id:a,"aria-selected":i?"true":"false",tabindex:i?0:-1,"aria-controls":`hb-tabs__panel-${t.key}`,onClick:()=>this.handleTabClick(t.key),onKeyDown:t=>this.handleTabKeydown(t,e)},o("span",{class:"hb-tabs__item-label"},t.label),this.closable&&o("span",{class:"hb-tabs__item-close",role:"button","aria-label":"关闭标签",tabIndex:-1,onClick:e=>{e.stopPropagation();this.hbTabRemove.emit(t.key)}},"×"))})))),o("div",{key:"e36625b043908e3c19bbc06f4cef4d1a877e02c5",class:"hb-tabs__content"},o("slot",{key:"a7239ca67b560d106c94370bf45fd2ba5293114f"})))}static get watchers(){return{modelValue:["handleModelValueChange"]}}};s.style=n;export{s as hb_tabs};
|
|
2
|
-
//# sourceMappingURL=p-79af2efa.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["tabsCss","HbTabsStyle0","Tabs","modelValue","type","closable","activeTab","tabs","hbTabChange","hbTabRemove","componentDidLoad","this","collectTabs","length","key","updatePaneVisibility","handleModelValueChange","panes","el","querySelectorAll","forEach","pane","push","getAttribute","label","isActive","setAttribute","String","handleTabClick","emit","moveFocusToTab","handleTabKeydown","e","currentIndex","isArrow","preventDefault","action","handleListKeyboard","activeIndex","itemCount","loop","index","idx","findIndex","t","items","shadowRoot","focus","render","h","class","role","map","tab","selected","tabId","id","tabindex","onClick","onKeyDown","tabIndex","stopPropagation"],"sources":["src/components/Tabs/tabs.css?tag=hb-tabs&encapsulation=shadow","src/components/Tabs/Tabs.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-tabs__header {\n border-bottom: 1px solid var(--hb-color-border-secondary);\n margin-bottom: var(--hb-spacing-md);\n}\n\n.hb-tabs__nav {\n display: flex;\n gap: var(--hb-spacing-xs);\n}\n\n.hb-tabs__item {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: var(--hb-spacing-xs) var(--hb-spacing-md);\n font-size: var(--hb-font-size-sm);\n color: var(--hb-color-text-secondary);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n transition: all var(--hb-transition-duration) var(--hb-transition-function);\n user-select: none;\n}\n\n.hb-tabs__item:hover {\n color: var(--hb-color-primary);\n}\n\n.hb-tabs__item--active {\n color: var(--hb-color-primary);\n border-bottom-color: var(--hb-color-primary);\n}\n\n/* ---- card 类型 ---- */\n.hb-tabs--card .hb-tabs__item {\n border: 1px solid var(--hb-color-border);\n border-bottom: none;\n border-radius: var(--hb-border-radius-sm) var(--hb-border-radius-sm) 0 0;\n background: var(--hb-color-fill-quaternary);\n}\n.hb-tabs--card .hb-tabs__item--active {\n background: var(--hb-color-bg);\n border-bottom-color: var(--hb-color-bg);\n margin-bottom: -1px;\n}\n\n.hb-tabs__item-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n font-size: 11px;\n transition: background-color var(--hb-transition-duration);\n}\n.hb-tabs__item-close:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.hb-tabs__content {\n color: var(--hb-color-text);\n}\n","import { Component, h, Prop, State, Element, Watch, Event, EventEmitter } from '@stencil/core';\nimport { handleListKeyboard } from '../../utils/a11y';\n\n/**\n * Tabs 标签页组件\n * 选项卡切换组件\n */\n@Component({\n tag: 'hb-tabs',\n styleUrl: 'tabs.css',\n shadow: true,\n})\nexport class Tabs {\n @Element() el: HTMLElement;\n\n /** 当前激活的标签 */\n @Prop({ mutable: true }) modelValue: string = '';\n\n /** 标签风格类型 */\n @Prop() type: 'line' | 'card' | 'border-card' = 'line';\n\n /** 是否可关闭 */\n @Prop() closable: boolean = false;\n\n @State() activeTab: string = '';\n @State() tabs: { key: string; label: string }[] = [];\n\n /** 标签切换事件 */\n @Event() hbTabChange: EventEmitter<string>;\n\n /** 标签关闭事件 */\n @Event() hbTabRemove: EventEmitter<string>;\n\n componentDidLoad() {\n this.collectTabs();\n if (!this.modelValue && this.tabs.length > 0) {\n this.activeTab = this.tabs[0].key;\n this.modelValue = this.activeTab;\n } else {\n this.activeTab = this.modelValue;\n }\n this.updatePaneVisibility();\n }\n\n @Watch('modelValue')\n handleModelValueChange() {\n this.activeTab = this.modelValue;\n this.updatePaneVisibility();\n }\n\n private collectTabs() {\n const panes = this.el.querySelectorAll('hb-tab-pane');\n const tabs: { key: string; label: string }[] = [];\n panes.forEach((pane) => {\n tabs.push({\n key: pane.getAttribute('key') || '',\n label: pane.getAttribute('label') || '',\n });\n });\n this.tabs = tabs;\n }\n\n private updatePaneVisibility() {\n const panes = this.el.querySelectorAll('hb-tab-pane');\n panes.forEach((pane) => {\n const isActive = pane.getAttribute('key') === this.activeTab;\n pane.setAttribute('active', String(isActive));\n });\n }\n\n private handleTabClick = (key: string) => {\n this.activeTab = key;\n this.modelValue = key;\n this.hbTabChange.emit(key);\n this.updatePaneVisibility();\n this.moveFocusToTab(key);\n };\n\n /** WAI-ARIA tabs:左右(横排)/上下(竖排)箭头在 tab 间切换聚焦的 tab。 */\n private handleTabKeydown = (e: KeyboardEvent, currentIndex: number) => {\n // 仅响应方向键 / Home / End;Enter/Space 由浏览器对可聚焦元素原生触发 click。\n const isArrow =\n e.key === 'ArrowLeft' || e.key === 'ArrowRight' || e.key === 'ArrowUp' || e.key === 'ArrowDown' ||\n e.key === 'Home' || e.key === 'End';\n if (!isArrow) return;\n e.preventDefault();\n const action = handleListKeyboard(e, {\n activeIndex: currentIndex,\n itemCount: this.tabs.length,\n loop: true,\n });\n if (action.type === 'navigate' && this.tabs[action.index]) {\n this.handleTabClick(this.tabs[action.index].key);\n }\n };\n\n private moveFocusToTab(key: string) {\n const idx = this.tabs.findIndex((t) => t.key === key);\n if (idx < 0) return;\n const items = this.el.shadowRoot?.querySelectorAll<HTMLElement>('.hb-tabs__item');\n items?.[idx]?.focus();\n }\n\n render() {\n return (\n <div class={{ 'hb-tabs': true, [`hb-tabs--${this.type}`]: true }}>\n <div class=\"hb-tabs__header\">\n <div class=\"hb-tabs__nav\" role=\"tablist\">\n {this.tabs.map((tab, index) => {\n const selected = tab.key === this.activeTab;\n const tabId = `hb-tabs__tab-${tab.key}`;\n return (\n <div\n class={{\n 'hb-tabs__item': true,\n 'hb-tabs__item--active': selected,\n }}\n role=\"tab\"\n id={tabId}\n aria-selected={selected ? 'true' : 'false'}\n tabindex={selected ? 0 : -1}\n aria-controls={`hb-tabs__panel-${tab.key}`}\n onClick={() => this.handleTabClick(tab.key)}\n onKeyDown={(e) => this.handleTabKeydown(e, index)}\n >\n <span class=\"hb-tabs__item-label\">{tab.label}</span>\n {this.closable && (\n <span\n class=\"hb-tabs__item-close\"\n role=\"button\"\n aria-label=\"关闭标签\"\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n this.hbTabRemove.emit(tab.key);\n }}\n >\n ×\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n <div class=\"hb-tabs__content\">\n <slot />\n </div>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,h as i}from"./p-e42dfa95.js";const o='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:block}.hb-alert{align-items:flex-start;border-radius:var(--hb-border-radius-base);display:flex;font-size:var(--hb-font-size-sm);gap:var(--hb-spacing-xs);line-height:1.5;padding:var(--hb-spacing-sm)var(--hb-spacing-md)}.hb-alert--center{justify-content:center;text-align:center}.hb-alert__icon{flex-shrink:0;font-size:16px;margin-top:2px}.hb-alert__body{flex:1}.hb-alert__title{font-weight:600}.hb-alert__description{font-size:var(--hb-font-size-xs);margin-top:4px;opacity:.85}.hb-alert__close{cursor:pointer;flex-shrink:0;font-size:16px;opacity:.6}.hb-alert__close:hover{opacity:1}.hb-alert--success{background:var(--hb-color-success-bg);border:1px solid var(--hb-color-success-border);color:var(--hb-color-success)}.hb-alert--warning{background:var(--hb-color-warning-bg);border:1px solid var(--hb-color-warning-border);color:var(--hb-color-warning)}.hb-alert--error{background:var(--hb-color-danger-bg);border:1px solid var(--hb-color-danger-border);color:var(--hb-color-danger)}.hb-alert--info{background:var(--hb-color-primary-bg);border:1px solid var(--hb-color-primary-border);color:var(--hb-color-primary)}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const r=o;const a=class{constructor(i){e(this,i);this.hbClose=t(this,"hbClose",7)}title="";description;type="info";closable=false;showIcon=true;center=false;closed=false;hbClose;handleClose=()=>{this.closed=true;this.hbClose.emit()};render(){if(this.closed)return null;const e={success:"✓",warning:"⚠",info:"ℹ",error:"✕"};const t=this.type==="error"||this.type==="warning"?"alert":"status";return i("div",{class:{"hb-alert":true,[`hb-alert--${this.type}`]:true,"hb-alert--center":this.center,"hb-alert--with-description":!!this.description},role:t},this.showIcon&&i("span",{class:"hb-alert__icon","aria-hidden":"true"},e[this.type]),i("div",{class:"hb-alert__body"},i("div",{class:"hb-alert__title"},this.title),this.description&&i("div",{class:"hb-alert__description"},this.description)),this.closable&&i("span",{class:"hb-alert__close",role:"button","aria-label":"关闭",tabIndex:0,onClick:this.handleClose},"×"))}};a.style=r;export{a as hb_alert};
|
|
2
|
-
//# sourceMappingURL=p-7f6975ad.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["alertCss","HbAlertStyle0","Alert","title","description","type","closable","showIcon","center","closed","hbClose","handleClose","this","emit","render","icons","success","warning","info","error","liveRole","h","class","role","tabIndex","onClick"],"sources":["src/components/Alert/alert.css?tag=hb-alert&encapsulation=shadow","src/components/Alert/Alert.tsx"],"sourcesContent":[":host { display: block; }\n.hb-alert {\n display: flex; align-items: flex-start; gap: var(--hb-spacing-xs);\n padding: var(--hb-spacing-sm) var(--hb-spacing-md);\n border-radius: var(--hb-border-radius-base);\n font-size: var(--hb-font-size-sm);\n line-height: 1.5;\n}\n.hb-alert--center { justify-content: center; text-align: center; }\n.hb-alert__icon { font-size: 16px; margin-top: 2px; flex-shrink: 0; }\n.hb-alert__body { flex: 1; }\n.hb-alert__title { font-weight: 600; }\n.hb-alert__description { margin-top: 4px; font-size: var(--hb-font-size-xs); opacity: 0.85; }\n.hb-alert__close { cursor: pointer; font-size: 16px; opacity: 0.6; flex-shrink: 0; }\n.hb-alert__close:hover { opacity: 1; }\n\n.hb-alert--success { background: var(--hb-color-success-bg); color: var(--hb-color-success); border: 1px solid var(--hb-color-success-border); }\n.hb-alert--warning { background: var(--hb-color-warning-bg); color: var(--hb-color-warning); border: 1px solid var(--hb-color-warning-border); }\n.hb-alert--error { background: var(--hb-color-danger-bg); color: var(--hb-color-danger); border: 1px solid var(--hb-color-danger-border); }\n.hb-alert--info { background: var(--hb-color-primary-bg); color: var(--hb-color-primary); border: 1px solid var(--hb-color-primary-border); }\n","import { Component, h, Prop, Event, EventEmitter, State } from '@stencil/core';\n\n/**\n * Alert 警告提示组件\n * 展示需要关注的信息\n */\n@Component({\n tag: 'hb-alert',\n styleUrl: 'alert.css',\n shadow: true,\n})\nexport class Alert {\n /** 标题 */\n @Prop() title: string = '';\n\n /** 描述文字 */\n @Prop() description?: string;\n\n /** 类型 */\n @Prop() type: 'success' | 'warning' | 'info' | 'error' = 'info';\n\n /** 是否可关闭 */\n @Prop() closable: boolean = false;\n\n /** 是否显示图标 */\n @Prop() showIcon: boolean = true;\n\n /** 是否居中 */\n @Prop() center: boolean = false;\n\n @State() closed: boolean = false;\n\n @Event() hbClose: EventEmitter<void>;\n\n private handleClose = () => {\n this.closed = true;\n this.hbClose.emit();\n };\n\n render() {\n if (this.closed) return null;\n const icons: Record<string, string> = { success: '✓', warning: '⚠', info: 'ℹ', error: '✕' };\n // error/warning 是紧急通告 → role=alert(断言式,屏幕阅读器即时朗读);\n // info/success 是状态信息 → role=status(礼貌式,不打断)。\n const liveRole = this.type === 'error' || this.type === 'warning' ? 'alert' : 'status';\n return (\n <div\n class={{ 'hb-alert': true, [`hb-alert--${this.type}`]: true, 'hb-alert--center': this.center, 'hb-alert--with-description': !!this.description }}\n role={liveRole}\n >\n {this.showIcon && <span class=\"hb-alert__icon\" aria-hidden=\"true\">{icons[this.type]}</span>}\n <div class=\"hb-alert__body\">\n <div class=\"hb-alert__title\">{this.title}</div>\n {this.description && <div class=\"hb-alert__description\">{this.description}</div>}\n </div>\n {this.closable && <span class=\"hb-alert__close\" role=\"button\" aria-label=\"关闭\" tabIndex={0} onClick={this.handleClose}>×</span>}\n </div>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAW,iqNACjB,MAAAC,EAAeD,E,MCUFE,EAAK,M,0DAERC,MAAgB,GAGhBC,YAGAC,KAAiD,OAGjDC,SAAoB,MAGpBC,SAAoB,KAGpBC,OAAkB,MAEjBC,OAAkB,MAElBC,QAEDC,YAAc,KACpBC,KAAKH,OAAS,KACdG,KAAKF,QAAQG,MAAM,EAGrB,MAAAC,GACE,GAAIF,KAAKH,OAAQ,OAAO,KACxB,MAAMM,EAAgC,CAAEC,QAAS,IAAKC,QAAS,IAAKC,KAAM,IAAKC,MAAO,KAGtF,MAAMC,EAAWR,KAAKP,OAAS,SAAWO,KAAKP,OAAS,UAAY,QAAU,SAC9E,OACEgB,EAAA,OACEC,MAAO,CAAE,WAAY,KAAM,CAAC,aAAaV,KAAKP,QAAS,KAAM,mBAAoBO,KAAKJ,OAAQ,+BAAgCI,KAAKR,aACnImB,KAAMH,GAELR,KAAKL,UAAYc,EAAA,QAAMC,MAAM,iBAAgB,cAAa,QAAQP,EAAMH,KAAKP,OAC9EgB,EAAA,OAAKC,MAAM,kBACTD,EAAA,OAAKC,MAAM,mBAAmBV,KAAKT,OAClCS,KAAKR,aAAeiB,EAAA,OAAKC,MAAM,yBAAyBV,KAAKR,cAE/DQ,KAAKN,UAAYe,EAAA,QAAMC,MAAM,kBAAkBC,KAAK,SAAQ,aAAY,KAAKC,SAAU,EAAGC,QAASb,KAAKD,aAAW,K","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["formCss","HbFormStyle0","Form","model","rules","labelPosition","labelWidth","inline","size","disabled","fields","fieldRegistry","Map","componentWillLoad","this","el","addEventListener","e","prop","validate","resetValue","getValue","detail","set","async","results","Promise","all","Array","from","values","map","field","errors","length","every","Boolean","resetFields","forEach","render","h","key","class","onSubmit","preventDefault","novalidate"],"sources":["src/components/Form/form.css?tag=hb-form&encapsulation=shadow","src/components/Form/Form.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-form {\n display: flex;\n flex-direction: column;\n gap: var(--hb-spacing-md);\n}\n\n.hb-form--inline {\n flex-direction: row;\n flex-wrap: wrap;\n gap: var(--hb-spacing-sm) var(--hb-spacing-lg);\n align-items: flex-start;\n}\n","import { Component, h, Prop, State, Element } from '@stencil/core';\n\ninterface FormFieldRegistration {\n prop: string;\n validate: () => Promise<string[]>;\n resetValue: () => void;\n getValue: () => any;\n}\n\n/**\n * Form 表单组件\n * 由输入框、选择器、单选框、多选框等控件组成,配合表单校验\n */\n@Component({\n tag: 'hb-form',\n styleUrl: 'form.css',\n shadow: true,\n})\nexport class Form {\n @Element() el: HTMLElement;\n\n /** 表单数据对象 */\n @Prop() model: Record<string, any> = {};\n\n /** 表单验证规则 */\n @Prop() rules: Record<string, any[]> = {};\n\n /** 标签位置 */\n @Prop() labelPosition: 'left' | 'right' | 'top' = 'right';\n\n /** 标签宽度 */\n @Prop() labelWidth: string = '80px';\n\n /** 是否行内表单 */\n @Prop() inline: boolean = false;\n\n /** 表单尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n @State() fields: FormFieldRegistration[] = [];\n\n private fieldRegistry = new Map<string, FormFieldRegistration>();\n\n // 用 componentWillLoad 而非 componentDidLoad 注册监听器:\n // Stencil 生命周期里子组件(FormItem)的 componentDidLoad 先于父组件(Form)触发,\n // 若在 componentDidLoad 才挂监听,会错过子项派发的 hbFormFieldRegister,\n // 导致 fieldRegistry 为空、validate() 永远返回 true(真实浏览器里复现,mock-doc 被 waitForChanges 掩盖)。\n componentWillLoad() {\n this.el.addEventListener('hbFormFieldRegister', ((e: CustomEvent) => {\n const { prop, validate, resetValue, getValue } = e.detail;\n this.fieldRegistry.set(prop, { prop, validate, resetValue, getValue });\n }) as EventListener);\n }\n\n /**\n * 验证整个表单\n * @returns 是否验证通过\n */\n @Prop() validate = async (): Promise<boolean> => {\n const results = await Promise.all(\n Array.from(this.fieldRegistry.values()).map(async (field) => {\n const errors = await field.validate();\n return errors.length === 0;\n })\n );\n return results.every(Boolean);\n };\n\n /**\n * 重置表单\n */\n @Prop() resetFields = (): void => {\n this.fieldRegistry.forEach((field) => field.resetValue());\n };\n\n render() {\n return (\n <form\n class={{\n 'hb-form': true,\n [`hb-form--label-${this.labelPosition}`]: true,\n 'hb-form--inline': this.inline,\n }}\n onSubmit={(e) => e.preventDefault()}\n novalidate\n >\n <slot />\n </form>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAU,8wLAChB,MAAAC,EAAeD,E,MCiBFE,EAAI,M,iDAIPC,MAA6B,GAG7BC,MAA+B,GAG/BC,cAA0C,QAG1CC,WAAqB,OAGrBC,OAAkB,MAGlBC,KAAsC,UAGtCC,SAAoB,MAEnBC,OAAkC,GAEnCC,cAAgB,IAAIC,IAM5B,iBAAAC,GACEC,KAAKC,GAAGC,iBAAiB,uBAAyBC,IAChD,MAAMC,KAAEA,EAAIC,SAAEA,EAAQC,WAAEA,EAAUC,SAAEA,GAAaJ,EAAEK,OACnDR,KAAKH,cAAcY,IAAIL,EAAM,CAAEA,OAAMC,WAAUC,aAAYC,YAC5D,G,CAOKF,SAAWK,UACjB,MAAMC,QAAgBC,QAAQC,IAC5BC,MAAMC,KAAKf,KAAKH,cAAcmB,UAAUC,KAAIP,MAAOQ,IACjD,MAAMC,QAAeD,EAAMb,WAC3B,OAAOc,EAAOC,SAAW,CAAC,KAG9B,OAAOT,EAAQU,MAAMC,QAAQ,EAMvBC,YAAc,KACpBvB,KAAKH,cAAc2B,SAASN,GAAUA,EAAMZ,cAAa,EAG3D,MAAAmB,GACE,OACEC,EAAA,QAAAC,IAAA,2CACEC,MAAO,CACL,UAAW,KACX,CAAC,kBAAkB5B,KAAKT,iBAAkB,KAC1C,kBAAmBS,KAAKP,QAE1BoC,SAAW1B,GAAMA,EAAE2B,iBACnBC,WAAU,MAEVL,EAAA,QAAAC,IAAA,6C","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,g as i,h as t}from"./p-e42dfa95.js";import{c as o,g as r}from"./p-ecce2b5e.js";import{i as a}from"./p-cc0aeb50.js";const n='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:inline-block}.hb-popconfirm__trigger{cursor:pointer;display:inline-block}.hb-popconfirm__popup{animation:hb-popconfirm-fade .15s ease-out;background:var(--hb-color-bg-elevated);border-radius:var(--hb-border-radius-base);box-shadow:var(--hb-box-shadow);min-width:200px;padding:var(--hb-spacing-md);pointer-events:auto;position:fixed}.hb-popconfirm__main{align-items:flex-start;display:flex;gap:var(--hb-spacing-xs);margin-bottom:var(--hb-spacing-sm)}.hb-popconfirm__icon{color:var(--hb-color-warning);flex-shrink:0;font-size:16px}.hb-popconfirm__title{color:var(--hb-color-text);font-size:var(--hb-font-size-sm);line-height:1.5}.hb-popconfirm__action{display:flex;gap:var(--hb-spacing-xs);justify-content:flex-end}.hb-popconfirm__btn{background:var(--hb-color-bg);border:1px solid var(--hb-color-border);border-radius:var(--hb-border-radius-sm);cursor:pointer;font-size:var(--hb-font-size-xs);padding:4px 12px;transition:all var(--hb-transition-duration)}.hb-popconfirm__btn--cancel:hover{border-color:var(--hb-color-primary);color:var(--hb-color-primary)}.hb-popconfirm__btn--confirm{background:var(--hb-color-primary);border-color:var(--hb-color-primary);color:#fff}.hb-popconfirm__btn--confirm:hover{background:var(--hb-color-primary-hover)}@keyframes hb-popconfirm-fade{0%{opacity:0}to{opacity:1}}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const s=n;const l=class{constructor(i){e(this,i)}get el(){return i(this)}title="确定执行此操作?";confirmButtonText="确定";cancelButtonText="取消";placement="top";disabled=false;icon="⚠";visible=false;popupStyle={};triggerRef;popupRef;confirmBtnRef;show=()=>{if(this.disabled)return;this.visible=true;requestAnimationFrame((()=>{this.updatePosition();this.confirmBtnRef?.focus()}))};hide=()=>{this.visible=false};handleKeydown=e=>{if(e.key==="Escape"&&this.visible){e.preventDefault();this.handleCancel(e)}};handleTriggerKeydown=e=>{if(this.disabled)return;if(a(e.key)){e.preventDefault();this.show()}};updatePosition(){if(!this.triggerRef||!this.popupRef)return;const e=this.triggerRef.getBoundingClientRect();const{width:i,height:t}=this.popupRef.getBoundingClientRect();const a=o(e,i,t,this.placement,8);this.popupStyle={top:`${a.top}px`,left:`${a.left}px`,zIndex:String(r())}}handleConfirm=e=>{e.stopPropagation();this.hide();this.el.dispatchEvent(new CustomEvent("hbConfirm",{bubbles:true}))};handleCancel=e=>{e.stopPropagation();this.hide();this.el.dispatchEvent(new CustomEvent("hbCancel",{bubbles:true}))};render(){return t("div",{key:"a3610b2320192960baa690acf9f0127fb36d206f",class:"hb-popconfirm",onClick:this.show,onKeyDown:this.handleKeydown},t("div",{key:"7164d998c2d989ed702d7dac318ef4e354e74dba",ref:e=>{this.triggerRef=e},class:"hb-popconfirm__trigger",role:"button",tabindex:this.disabled?-1:0,"aria-haspopup":"dialog","aria-expanded":this.visible?"true":"false","aria-disabled":this.disabled?"true":"false",onKeyDown:this.handleTriggerKeydown},t("slot",{key:"0c62f0d5fe58d4aec55aa22c64b7f7f66aa7780d"})),this.visible&&t("div",{key:"450446dc51b40f62b3496bea2717e95b6807a7ca",ref:e=>{this.popupRef=e},class:"hb-popconfirm__popup",style:this.popupStyle,role:"dialog","aria-live":"polite","aria-labelledby":"hb-popconfirm__title"},t("div",{key:"4fb63a0a1c89c0866b30acadcfeea20d6936f39a",class:"hb-popconfirm__main"},t("span",{key:"9cb5583abfc8822f0217a43b809ca9766c35b63e",class:"hb-popconfirm__icon","aria-hidden":"true"},this.icon),t("span",{key:"75419c7cecb35e91134f62d9d0cfb71331813e0a",id:"hb-popconfirm__title",class:"hb-popconfirm__title"},this.title)),t("div",{key:"6cf55c098e1926b418869ce9015ae2f25e4b41c0",class:"hb-popconfirm__action"},t("button",{key:"07334e3915c17333808c5341e902ac5609f3ee2c",type:"button",class:"hb-popconfirm__btn hb-popconfirm__btn--cancel",onClick:this.handleCancel},this.cancelButtonText),t("button",{key:"ca133eab1ef2e8a043cf546bd57277df89d73616",type:"button",ref:e=>{this.confirmBtnRef=e},class:"hb-popconfirm__btn hb-popconfirm__btn--confirm",onClick:this.handleConfirm},this.confirmButtonText))))}};l.style=s;export{l as hb_popconfirm};
|
|
2
|
-
//# sourceMappingURL=p-8a8443b8.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["popconfirmCss","HbPopconfirmStyle0","Popconfirm","title","confirmButtonText","cancelButtonText","placement","disabled","icon","visible","popupStyle","triggerRef","popupRef","confirmBtnRef","show","this","requestAnimationFrame","updatePosition","focus","hide","handleKeydown","e","key","preventDefault","handleCancel","handleTriggerKeydown","isActivationKey","rect","getBoundingClientRect","width","pw","height","ph","pos","computePosition","top","left","zIndex","String","getNextZIndex","handleConfirm","stopPropagation","el","dispatchEvent","CustomEvent","bubbles","render","h","class","onClick","onKeyDown","ref","role","tabindex","style","id","type"],"sources":["src/components/Popconfirm/popconfirm.css?tag=hb-popconfirm&encapsulation=shadow","src/components/Popconfirm/Popconfirm.tsx"],"sourcesContent":[":host { display: inline-block; }\n.hb-popconfirm__trigger { display: inline-block; cursor: pointer; }\n.hb-popconfirm__popup {\n position: fixed; background: var(--hb-color-bg-elevated);\n border-radius: var(--hb-border-radius-base); box-shadow: var(--hb-box-shadow);\n padding: var(--hb-spacing-md); min-width: 200px; animation: hb-popconfirm-fade 0.15s ease-out; pointer-events: auto;\n}\n.hb-popconfirm__main { display: flex; align-items: flex-start; gap: var(--hb-spacing-xs); margin-bottom: var(--hb-spacing-sm); }\n.hb-popconfirm__icon { color: var(--hb-color-warning); font-size: 16px; flex-shrink: 0; }\n.hb-popconfirm__title { font-size: var(--hb-font-size-sm); color: var(--hb-color-text); line-height: 1.5; }\n.hb-popconfirm__action { display: flex; justify-content: flex-end; gap: var(--hb-spacing-xs); }\n.hb-popconfirm__btn {\n padding: 4px 12px; font-size: var(--hb-font-size-xs); border-radius: var(--hb-border-radius-sm);\n cursor: pointer; border: 1px solid var(--hb-color-border); background: var(--hb-color-bg);\n transition: all var(--hb-transition-duration);\n}\n.hb-popconfirm__btn--cancel:hover { color: var(--hb-color-primary); border-color: var(--hb-color-primary); }\n.hb-popconfirm__btn--confirm { background: var(--hb-color-primary); color: #fff; border-color: var(--hb-color-primary); }\n.hb-popconfirm__btn--confirm:hover { background: var(--hb-color-primary-hover); }\n@keyframes hb-popconfirm-fade { from { opacity: 0; } to { opacity: 1; } }\n","import { Component, h, Prop, State, Element } from '@stencil/core';\nimport { computePosition, getNextZIndex, Placement } from '../../utils/popup-manager';\nimport { isActivationKey } from '../../utils/a11y';\n\n/**\n * Popconfirm 气泡确认框\n * 无障碍(对齐 antd / WAI-ARIA):\n * - 触发器 role=button + aria-haspopup=dialog + aria-expanded + aria-describedby\n * - 浮层 role=dialog + aria-live=polite(确认文屏幕阅读器实时播报)\n * - 键盘:trigger Enter/Space 打开;Esc=取消关闭;打开时自动聚焦确认按钮\n */\n@Component({ tag: 'hb-popconfirm', styleUrl: 'popconfirm.css', shadow: true })\nexport class Popconfirm {\n @Element() el: HTMLElement;\n @Prop() title: string = '确定执行此操作?';\n @Prop() confirmButtonText: string = '确定';\n @Prop() cancelButtonText: string = '取消';\n @Prop() placement: Placement = 'top';\n @Prop() disabled: boolean = false;\n @Prop() icon: string = '⚠';\n @State() visible: boolean = false;\n @State() popupStyle: Record<string, string> = {};\n\n private triggerRef?: HTMLElement;\n private popupRef?: HTMLDivElement;\n private confirmBtnRef?: HTMLButtonElement;\n\n private show = () => {\n if (this.disabled) return;\n this.visible = true;\n requestAnimationFrame(() => {\n this.updatePosition();\n // 打开后自动聚焦确认按钮(对齐 antd:Enter 直接确认)\n this.confirmBtnRef?.focus();\n });\n };\n private hide = () => { this.visible = false; };\n\n /** 键盘:Esc 取消关闭(Enter 由聚焦的确认按钮原生处理) */\n private handleKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.visible) {\n e.preventDefault();\n this.handleCancel(e);\n }\n };\n\n /** 触发器键盘:Enter/Space 打开 */\n private handleTriggerKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (isActivationKey(e.key)) {\n e.preventDefault();\n this.show();\n }\n };\n\n private updatePosition() {\n if (!this.triggerRef || !this.popupRef) return;\n const rect = this.triggerRef.getBoundingClientRect();\n const { width: pw, height: ph } = this.popupRef.getBoundingClientRect();\n const pos = computePosition(rect, pw, ph, this.placement, 8);\n this.popupStyle = { top: `${pos.top}px`, left: `${pos.left}px`, zIndex: String(getNextZIndex()) };\n }\n\n private handleConfirm = (e: Event) => {\n e.stopPropagation();\n this.hide();\n this.el.dispatchEvent(new CustomEvent('hbConfirm', { bubbles: true }));\n };\n private handleCancel = (e: Event) => {\n e.stopPropagation();\n this.hide();\n this.el.dispatchEvent(new CustomEvent('hbCancel', { bubbles: true }));\n };\n\n render() {\n return (\n <div\n class=\"hb-popconfirm\"\n onClick={this.show}\n onKeyDown={this.handleKeydown}\n >\n <div\n ref={(el: any) => { this.triggerRef = el; }}\n class=\"hb-popconfirm__trigger\"\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-haspopup=\"dialog\"\n aria-expanded={this.visible ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n onKeyDown={this.handleTriggerKeydown}\n >\n <slot />\n </div>\n {this.visible && (\n <div\n ref={(el: any) => { this.popupRef = el; }}\n class=\"hb-popconfirm__popup\"\n style={this.popupStyle}\n role=\"dialog\"\n aria-live=\"polite\"\n aria-labelledby=\"hb-popconfirm__title\"\n >\n <div class=\"hb-popconfirm__main\">\n <span class=\"hb-popconfirm__icon\" aria-hidden=\"true\">{this.icon}</span>\n <span id=\"hb-popconfirm__title\" class=\"hb-popconfirm__title\">{this.title}</span>\n </div>\n <div class=\"hb-popconfirm__action\">\n <button\n type=\"button\"\n class=\"hb-popconfirm__btn hb-popconfirm__btn--cancel\"\n onClick={this.handleCancel}\n >\n {this.cancelButtonText}\n </button>\n <button\n type=\"button\"\n ref={(el: any) => { this.confirmBtnRef = el; }}\n class=\"hb-popconfirm__btn hb-popconfirm__btn--confirm\"\n onClick={this.handleConfirm}\n >\n {this.confirmButtonText}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"iIAAA,MAAMA,EAAgB,w3NACtB,MAAAC,EAAeD,E,MCWFE,EAAU,M,iDAEbC,MAAgB,WAChBC,kBAA4B,KAC5BC,iBAA2B,KAC3BC,UAAuB,MACvBC,SAAoB,MACpBC,KAAe,IACdC,QAAmB,MACnBC,WAAqC,GAEtCC,WACAC,SACAC,cAEAC,KAAO,KACb,GAAIC,KAAKR,SAAU,OACnBQ,KAAKN,QAAU,KACfO,uBAAsB,KACpBD,KAAKE,iBAELF,KAAKF,eAAeK,OAAO,GAC3B,EAEIC,KAAO,KAAQJ,KAAKN,QAAU,KAAK,EAGnCW,cAAiBC,IACvB,GAAIA,EAAEC,MAAQ,UAAYP,KAAKN,QAAS,CACtCY,EAAEE,iBACFR,KAAKS,aAAaH,E,GAKdI,qBAAwBJ,IAC9B,GAAIN,KAAKR,SAAU,OACnB,GAAImB,EAAgBL,EAAEC,KAAM,CAC1BD,EAAEE,iBACFR,KAAKD,M,GAID,cAAAG,GACN,IAAKF,KAAKJ,aAAeI,KAAKH,SAAU,OACxC,MAAMe,EAAOZ,KAAKJ,WAAWiB,wBAC7B,MAAQC,MAAOC,EAAIC,OAAQC,GAAOjB,KAAKH,SAASgB,wBAChD,MAAMK,EAAMC,EAAgBP,EAAMG,EAAIE,EAAIjB,KAAKT,UAAW,GAC1DS,KAAKL,WAAa,CAAEyB,IAAK,GAAGF,EAAIE,QAASC,KAAM,GAAGH,EAAIG,SAAUC,OAAQC,OAAOC,K,CAGzEC,cAAiBnB,IACvBA,EAAEoB,kBACF1B,KAAKI,OACLJ,KAAK2B,GAAGC,cAAc,IAAIC,YAAY,YAAa,CAAEC,QAAS,OAAQ,EAEhErB,aAAgBH,IACtBA,EAAEoB,kBACF1B,KAAKI,OACLJ,KAAK2B,GAAGC,cAAc,IAAIC,YAAY,WAAY,CAAEC,QAAS,OAAQ,EAGvE,MAAAC,GACE,OACEC,EAAA,OAAAzB,IAAA,2CACE0B,MAAM,gBACNC,QAASlC,KAAKD,KACdoC,UAAWnC,KAAKK,eAEhB2B,EAAA,OAAAzB,IAAA,2CACE6B,IAAMT,IAAc3B,KAAKJ,WAAa+B,CAAE,EACxCM,MAAM,yBACNI,KAAK,SACLC,SAAUtC,KAAKR,UAAY,EAAI,EAAC,gBAClB,SAAQ,gBACPQ,KAAKN,QAAU,OAAS,QAAO,gBAC/BM,KAAKR,SAAW,OAAS,QACxC2C,UAAWnC,KAAKU,sBAEhBsB,EAAA,QAAAzB,IAAA,8CAEDP,KAAKN,SACJsC,EAAA,OAAAzB,IAAA,2CACE6B,IAAMT,IAAc3B,KAAKH,SAAW8B,CAAE,EACtCM,MAAM,uBACNM,MAAOvC,KAAKL,WACZ0C,KAAK,SAAQ,YACH,SAAQ,kBACF,wBAEhBL,EAAA,OAAAzB,IAAA,2CAAK0B,MAAM,uBACTD,EAAA,QAAAzB,IAAA,2CAAM0B,MAAM,sBAAqB,cAAa,QAAQjC,KAAKP,MAC3DuC,EAAA,QAAAzB,IAAA,2CAAMiC,GAAG,uBAAuBP,MAAM,wBAAwBjC,KAAKZ,QAErE4C,EAAA,OAAAzB,IAAA,2CAAK0B,MAAM,yBACTD,EAAA,UAAAzB,IAAA,2CACEkC,KAAK,SACLR,MAAM,gDACNC,QAASlC,KAAKS,cAEbT,KAAKV,kBAER0C,EAAA,UAAAzB,IAAA,2CACEkC,KAAK,SACLL,IAAMT,IAAc3B,KAAKF,cAAgB6B,CAAE,EAC3CM,MAAM,iDACNC,QAASlC,KAAKyB,eAEbzB,KAAKX,qB","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,g as i,h as o}from"./p-e42dfa95.js";import{c as s}from"./p-4ef5a884.js";import{h as r}from"./p-cc0aeb50.js";const a='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{--hb-select-font-size:14px;--hb-select-height:32px;--hb-select-border-color:var(--hb-border-color,#dcdfe6);--hb-select-border-color-hover:var(--hb-color-primary);--hb-select-bg-color:var(--hb-color-white,#fff);--hb-select-text-color:var(--hb-color-text-regular,#606266);--hb-select-placeholder-color:var(--hb-color-text-placeholder,#c0c4cc);display:inline-block;position:relative}.hb-select{display:inline-block;position:relative;width:240px}.hb-select__input-wrapper{position:relative}.hb-select__input,.hb-select__input-wrapper{cursor:pointer;display:inline-block;width:100%}.hb-select__input{background-color:var(--hb-select-bg-color);border:1px solid var(--hb-select-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-select-text-color);font-size:var(--hb-select-font-size);height:var(--hb-select-height);line-height:var(--hb-select-height);outline:none;padding:0 30px 0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.hb-select__input::placeholder{color:var(--hb-select-placeholder-color)}.hb-select__input:focus,.hb-select__input:hover:not(:disabled){border-color:var(--hb-select-border-color-hover)}.hb-select__tags{align-items:center;background-color:var(--hb-select-bg-color);border:1px solid var(--hb-select-border-color);border-radius:4px;display:flex;flex-wrap:wrap;min-height:var(--hb-select-height);padding:0 30px 0 5px}.hb-select__tag{align-items:center;background-color:var(--hb-fill-color-light,#f0f2f5);border:1px solid var(--hb-border-color-lighter,#e4e7ed);border-radius:4px;color:var(--hb-color-text-regular,#606266);display:inline-flex;font-size:12px;height:24px;margin:2px 0 2px 6px;padding:0 8px}.hb-select__tag-text{margin-right:4px}.hb-select__tag-close{align-items:center;color:var(--hb-color-text-placeholder,#c0c4cc);cursor:pointer;display:inline-flex;height:12px;justify-content:center;transition:color .2s;width:12px}.hb-select__tag-close svg{height:100%;width:100%}.hb-select__tag-close:hover{color:var(--hb-color-text-regular,#606266)}.hb-select__suffix{align-items:center;color:var(--hb-select-text-color);display:flex;position:absolute;right:8px;top:50%;transform:translateY(-50%)}.hb-select__clear{align-items:center;color:var(--hb-select-placeholder-color);cursor:pointer;display:inline-flex;height:14px;justify-content:center;margin-right:8px;transition:color .2s;width:14px}.hb-select__clear svg{height:100%;width:100%}.hb-select__clear:hover{color:var(--hb-select-text-color)}.hb-select__arrow{align-items:center;color:var(--hb-select-placeholder-color);display:inline-flex;height:12px;justify-content:center;transition:transform .3s;width:12px}.hb-select__arrow svg{height:100%;width:100%}.hb-select--open .hb-select__arrow{transform:rotate(180deg)}.hb-select__dropdown{background-color:var(--hb-select-bg-color);border:1px solid var(--hb-select-border-color);border-radius:4px;box-shadow:0 2px 12px #0000001a;left:0;margin-top:4px;max-height:300px;min-width:100%;overflow-y:auto;position:absolute;top:100%;z-index:1000}.hb-select__menu{list-style:none;margin:0;padding:6px 0}.hb-select__menu-item{align-items:center;color:var(--hb-select-text-color);cursor:pointer;display:flex;font-size:var(--hb-select-font-size);padding:8px 20px;transition:background-color .2s}.hb-select__menu-item:hover:not(.hb-select__menu-item--disabled):not(.hb-select__menu-item--divided){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-select__menu-item--selected{color:var(--hb-color-primary);font-weight:600}.hb-select__menu-item--disabled{color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}.hb-select__menu-item--divided{border-top:1px solid var(--hb-border-color-lighter,#e4e7ed);margin-top:6px;padding-top:6px}.hb-select__menu-item--empty{color:var(--hb-select-placeholder-color);cursor:default}.hb-select__menu-item-checkbox{align-items:center;color:var(--hb-color-primary,#1677ff);display:inline-flex;height:14px;justify-content:center;margin-right:8px;width:14px}.hb-select__menu-item-checkbox svg{height:100%;width:100%}.hb-select__menu-item--create{color:var(--hb-color-primary,#1677ff);font-weight:500}.hb-select__menu-item--create:hover{background-color:var(--hb-color-primary-bg,#e6f4ff)}.hb-select__menu-item-label{flex:1}.hb-select--small{font-size:12px}.hb-select--small .hb-select__input{font-size:12px;height:24px;line-height:24px;padding:0 25px 0 12px}.hb-select--large{font-size:16px}.hb-select--large .hb-select__input{font-size:16px;height:40px;line-height:40px;padding:0 35px 0 18px}.hb-select--disabled{cursor:not-allowed}.hb-select--disabled .hb-select__input{background-color:var(--hb-fill-color-light,#f5f7fa);border-color:var(--hb-select-border-color);color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const l=a;const n=class{constructor(i){e(this,i);this.hbChange=t(this,"hbChange",7);this.hbVisibleChange=t(this,"hbVisibleChange",7)}get el(){return i(this)}modelValue;options=[];placeholder="请选择";disabled=false;size="default";clearable=false;multiple=false;filterable=false;filterMethod;defaultFirstOption=false;allowCreate=false;collapseTags=false;maxCollapseTags;isOpen=false;inputValue="";searchValue="";filteredOptions=[];activeOptionIndex=-1;hbChange;hbVisibleChange;clickOutside=s({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false;this.hbVisibleChange.emit(false)}});componentDidLoad(){this.clickOutside=s({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false;this.hbVisibleChange.emit(false)}});this.clickOutside.connect();this.updateInputValue();if(this.filterable){this.filteredOptions=this.options}}disconnectedCallback(){this.clickOutside.disconnect()}handleValueChange(){this.updateInputValue()}handleOptionsChange(){if(this.filterable){this.filteredOptions=this.options}}updateInputValue(){if(!this.modelValue){this.inputValue="";return}if(this.multiple&&Array.isArray(this.modelValue)){const e=this.modelValue.map((e=>{const t=this.options.find((t=>t.value===e));return t?t.label:String(e)}));this.inputValue=e.join(", ")}else{const e=this.options.find((e=>e.value===this.modelValue));this.inputValue=e?e.label:String(this.modelValue)}}handleInputClick=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;if(this.isOpen){this.activeOptionIndex=this.defaultFirstOption?Math.max(-1,this.options.findIndex((e=>!e.disabled))):-1}this.hbVisibleChange.emit(this.isOpen)};handleWrapperKeydown=e=>{if(this.disabled)return;const t=this.filterable?this.filteredOptions:this.options;if(!this.isOpen){if(e.key==="Enter"||e.key===" "||e.key==="Spacebar"||e.key==="ArrowDown"||e.key==="ArrowUp"){e.preventDefault();this.isOpen=true;this.activeOptionIndex=-1;this.hbVisibleChange.emit(true)}return}const i=r(e,{activeIndex:this.activeOptionIndex,itemCount:t.length,loop:true});switch(i.type){case"navigate":e.preventDefault();this.activeOptionIndex=i.index;break;case"select":{e.preventDefault();const o=t[i.index];if(o&&!o.disabled)this.handleSelect(o);break}case"close":e.preventDefault();this.isOpen=false;this.hbVisibleChange.emit(false);break}};handleSelect=e=>{if(e.disabled)return;if(this.multiple){const t=this.modelValue||[];const i=t.indexOf(e.value);if(i>-1){t.splice(i,1)}else{t.push(e.value)}this.modelValue=[...t]}else{this.modelValue=e.value;this.isOpen=false;this.hbVisibleChange.emit(false)}this.updateInputValue();this.hbChange.emit(this.modelValue)};handleClear=e=>{e.stopPropagation();this.modelValue=this.multiple?[]:undefined;this.inputValue="";this.isOpen=false;this.hbChange.emit(this.modelValue);this.hbVisibleChange.emit(false)};handleSearch=e=>{const t=e.target;this.searchValue=t.value;if(this.filterMethod){this.filterMethod(t.value)}else{this.filteredOptions=this.options.filter((e=>e.label.toLowerCase().includes(t.value.toLowerCase())))}};isSelected(e){if(this.multiple&&Array.isArray(this.modelValue)){return this.modelValue.includes(e.value)}return this.modelValue===e.value}get createOption(){if(!this.allowCreate||!this.filterable||!this.isOpen)return null;const e=this.searchValue.trim();if(!e)return null;const t=this.options.some((t=>String(t.label).toLowerCase()===e.toLowerCase()||String(t.value).toLowerCase()===e.toLowerCase()));if(t)return null;return{value:e,label:e}}handleCreate=()=>{const e=this.createOption;if(!e)return;if(this.multiple){const t=(this.modelValue||[]).slice();if(!t.includes(e.value))t.push(e.value);this.modelValue=t}else{this.modelValue=e.value;this.isOpen=false;this.hbVisibleChange.emit(false)}this.searchValue="";this.filteredOptions=this.options;this.updateInputValue();this.hbChange.emit(this.modelValue)};render(){const e=this.filterable?this.filteredOptions:this.options;const t=this.clearable&&this.modelValue!==undefined&&(this.multiple?this.modelValue.length>0:true);return o("div",{key:"dded29eec6498d2f1e64ecdfac47b3a38827d0b1",class:{"hb-select":true,"hb-select--open":this.isOpen,"hb-select--disabled":this.disabled,[`hb-select--${this.size}`]:true},"aria-haspopup":"listbox","aria-expanded":this.isOpen?"true":"false"},o("div",{key:"0ab278d11f13f0c60b4d07d3d6f241a730da6155",class:"hb-select__input-wrapper",onClick:this.handleInputClick,onKeyDown:this.handleWrapperKeydown},this.multiple&&Array.isArray(this.modelValue)&&this.modelValue.length>0?o("div",{class:"hb-select__tags"},this.modelValue.slice(0,this.collapseTags&&this.maxCollapseTags?this.maxCollapseTags:undefined).map((e=>{const t=this.options.find((t=>t.value===e));return o("span",{class:"hb-select__tag"},o("span",{class:"hb-select__tag-text"},t?t.label:e),o("span",{class:"hb-select__tag-close",role:"button","aria-label":"移除标签",onClick:i=>{i.stopPropagation();this.handleSelect(t||{value:e,label:String(e)})}},o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},o("path",{d:"M6 6l12 12M18 6L6 18"}))))})),this.collapseTags&&this.maxCollapseTags&&this.modelValue.length>this.maxCollapseTags&&o("span",{class:"hb-select__tag"},o("span",{class:"hb-select__tag-text"},"+",this.modelValue.length-this.maxCollapseTags))):o("input",{type:"text",class:"hb-select__input",placeholder:this.placeholder,value:this.filterable&&this.isOpen?this.searchValue:this.inputValue,disabled:this.disabled,readonly:!this.filterable||!this.isOpen,onInput:this.handleSearch,"aria-haspopup":"listbox","aria-expanded":this.isOpen?"true":"false",role:"combobox"}),o("span",{key:"512eee624dcfb703a28dcb063fe35e66642f6d6b",class:"hb-select__suffix"},t&&o("span",{key:"523e0ca498a941142b9329af481de61cbea6c8be",class:"hb-select__clear",role:"button","aria-label":"清空",onClick:this.handleClear},o("svg",{key:"4c200e8d75c7c48fb5192c178527cd7a38981e02",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},o("path",{key:"b7ca1b657cfb34ad756047b28e1564fa67e361ea",d:"M6 6l12 12M18 6L6 18"}))),o("span",{key:"78d273ad4d5b1d0dc974889e82345146d5178c15",class:"hb-select__arrow","aria-hidden":"true"},o("svg",{key:"793b836d984b541b416597c77bf5dbfc26a59d1c",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},o("path",{key:"10c8d767bca8553e9251121a80634afd6cc5a242",d:"M6 9l6 6 6-6"}))))),this.isOpen&&o("div",{key:"b33cee71ab3d24686fefaebd50c905b84227c2a4",class:"hb-select__dropdown"},o("ul",{key:"a9cbf3750733dbb5b282963bb44dea90a171edda",class:"hb-select__menu",role:"listbox"},this.createOption&&o("li",{key:"24dae5fae23072c2d12ca7e57da9a5c330247940",class:{"hb-select__menu-item":true,"hb-select__menu-item--create":true},role:"option","aria-selected":"false",onClick:this.handleCreate},o("span",{key:"4c8cf5f89644d4758dd295d14cbf3dc941f8d70c",class:"hb-select__menu-item-label"},"创建「",this.createOption.label,"」")),e.length===0&&!this.createOption?o("li",{class:"hb-select__menu-item hb-select__menu-item--empty","aria-disabled":"true"},"无数据"):e.map(((e,t)=>o("li",{class:{"hb-select__menu-item":true,"hb-select__menu-item--selected":this.isSelected(e),"hb-select__menu-item--disabled":e.disabled,"hb-select__menu-item--divided":e.divided,"hb-select__menu-item--active":t===this.activeOptionIndex},role:"option","aria-selected":this.isSelected(e)?"true":"false","aria-disabled":e.disabled?"true":undefined,onClick:()=>this.handleSelect(e)},this.multiple&&o("span",{class:"hb-select__menu-item-checkbox","aria-hidden":"true"},this.isSelected(e)?o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":3,"stroke-linecap":"round","stroke-linejoin":"round"},o("path",{d:"M5 12l5 5L20 7"})):null),o("span",{class:"hb-select__menu-item-label"},e.label)))))))}static get watchers(){return{modelValue:["handleValueChange"],options:["handleOptionsChange"]}}};n.style=l;export{n as hb_select};
|
|
2
|
-
//# sourceMappingURL=p-8fd788c9.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["selectCss","HbSelectStyle0","Select","modelValue","options","placeholder","disabled","size","clearable","multiple","filterable","filterMethod","defaultFirstOption","allowCreate","collapseTags","maxCollapseTags","isOpen","inputValue","searchValue","filteredOptions","activeOptionIndex","hbChange","hbVisibleChange","clickOutside","createClickOutsideHandler","host","this","onClose","emit","componentDidLoad","el","connect","updateInputValue","disconnectedCallback","disconnect","handleValueChange","handleOptionsChange","Array","isArray","labels","map","val","option","find","opt","value","label","String","join","handleInputClick","Math","max","findIndex","o","handleWrapperKeydown","e","displayOptions","key","preventDefault","action","handleListKeyboard","activeIndex","itemCount","length","loop","type","index","handleSelect","currentValue","indexOf","splice","push","handleClear","stopPropagation","undefined","handleSearch","target","filter","toLowerCase","includes","isSelected","createOption","q","trim","exists","some","handleCreate","arr","slice","render","showClear","h","class","onClick","onKeyDown","role","viewBox","fill","stroke","d","readonly","onInput","divided"],"sources":["src/components/Select/select.css?tag=hb-select&encapsulation=shadow","src/components/Select/Select.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --hb-select-font-size: 14px;\n --hb-select-height: 32px;\n --hb-select-border-color: var(--hb-border-color, #dcdfe6);\n --hb-select-border-color-hover: var(--hb-color-primary);\n --hb-select-bg-color: var(--hb-color-white, #ffffff);\n --hb-select-text-color: var(--hb-color-text-regular, #606266);\n --hb-select-placeholder-color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-select {\n display: inline-block;\n position: relative;\n width: 240px;\n}\n\n.hb-select__input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n cursor: pointer;\n}\n\n.hb-select__input {\n display: inline-block;\n width: 100%;\n height: var(--hb-select-height);\n line-height: var(--hb-select-height);\n padding: 0 30px 0 15px;\n font-size: var(--hb-select-font-size);\n color: var(--hb-select-text-color);\n background-color: var(--hb-select-bg-color);\n border: 1px solid var(--hb-select-border-color);\n border-radius: 4px;\n box-sizing: border-box;\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n\n.hb-select__input::placeholder {\n color: var(--hb-select-placeholder-color);\n}\n\n.hb-select__input:hover:not(:disabled) {\n border-color: var(--hb-select-border-color-hover);\n}\n\n.hb-select__input:focus {\n border-color: var(--hb-select-border-color-hover);\n}\n\n.hb-select__tags {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n padding: 0 30px 0 5px;\n min-height: var(--hb-select-height);\n border: 1px solid var(--hb-select-border-color);\n border-radius: 4px;\n background-color: var(--hb-select-bg-color);\n}\n\n.hb-select__tag {\n display: inline-flex;\n align-items: center;\n height: 24px;\n padding: 0 8px;\n margin: 2px 0 2px 6px;\n background-color: var(--hb-fill-color-light, #f0f2f5);\n border: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n border-radius: 4px;\n font-size: 12px;\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-select__tag-text {\n margin-right: 4px;\n}\n\n.hb-select__tag-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n cursor: pointer;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n transition: color 0.2s;\n}\n\n.hb-select__tag-close svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select__tag-close:hover {\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-select__suffix {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n color: var(--hb-select-text-color);\n}\n\n.hb-select__clear {\n margin-right: 8px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n cursor: pointer;\n color: var(--hb-select-placeholder-color);\n transition: color 0.2s;\n}\n\n.hb-select__clear svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select__clear:hover {\n color: var(--hb-select-text-color);\n}\n\n.hb-select__arrow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n color: var(--hb-select-placeholder-color);\n transition: transform 0.3s;\n}\n\n.hb-select__arrow svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select--open .hb-select__arrow {\n transform: rotate(180deg);\n}\n\n.hb-select__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-select-bg-color);\n border: 1px solid var(--hb-select-border-color);\n border-radius: 4px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 100%;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.hb-select__menu {\n margin: 0;\n padding: 6px 0;\n list-style: none;\n}\n\n.hb-select__menu-item {\n display: flex;\n align-items: center;\n padding: 8px 20px;\n font-size: var(--hb-select-font-size);\n color: var(--hb-select-text-color);\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.hb-select__menu-item:hover:not(.hb-select__menu-item--disabled):not(.hb-select__menu-item--divided) {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-select__menu-item--selected {\n color: var(--hb-color-primary);\n font-weight: 600;\n}\n\n.hb-select__menu-item--disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n\n.hb-select__menu-item--divided {\n border-top: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n margin-top: 6px;\n padding-top: 6px;\n}\n\n.hb-select__menu-item--empty {\n color: var(--hb-select-placeholder-color);\n cursor: default;\n}\n\n.hb-select__menu-item-checkbox {\n margin-right: 8px;\n width: 14px;\n height: 14px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--hb-color-primary, #1677ff);\n}\n\n.hb-select__menu-item-checkbox svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select__menu-item--create {\n color: var(--hb-color-primary, #1677ff);\n font-weight: 500;\n}\n\n.hb-select__menu-item--create:hover {\n background-color: var(--hb-color-primary-bg, #e6f4ff);\n}\n\n.hb-select__menu-item-label {\n flex: 1;\n}\n\n.hb-select--small {\n font-size: 12px;\n}\n\n.hb-select--small .hb-select__input {\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n padding: 0 25px 0 12px;\n}\n\n.hb-select--large {\n font-size: 16px;\n}\n\n.hb-select--large .hb-select__input {\n height: 40px;\n line-height: 40px;\n font-size: 16px;\n padding: 0 35px 0 18px;\n}\n\n.hb-select--disabled {\n cursor: not-allowed;\n}\n\n.hb-select--disabled .hb-select__input {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-select-border-color);\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport { handleListKeyboard } from '../../utils/a11y';\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n divided?: boolean;\n}\n\n/**\n * Select 选择器组件\n * 当选项过多时,使用下拉菜单展示并选择内容\n */\n@Component({\n tag: 'hb-select',\n styleUrl: 'select.css',\n shadow: true,\n})\nexport class Select {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string | number | (string | number)[];\n\n /**\n * 可选项数据源\n */\n @Prop() options: SelectOption[] = [];\n\n /**\n * 输入框占位文本\n */\n @Prop() placeholder: string = '请选择';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 输入框尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 是否可清空\n * @default false\n */\n @Prop() clearable: boolean = false;\n\n /**\n * 是否多选\n * @default false\n */\n @Prop() multiple: boolean = false;\n\n /**\n * 是否可搜索\n * @default false\n */\n @Prop() filterable: boolean = false;\n\n /**\n * 自定义过滤方法\n */\n @Prop() filterMethod?: (query: string) => void;\n\n /**\n * 是否默认展开\n * @default false\n */\n @Prop() defaultFirstOption: boolean = false;\n\n /**\n * 是否允许创建新条目\n * @default false\n */\n @Prop() allowCreate: boolean = false;\n\n /**\n * 多选时是否将选中值按文字的形式展示\n * @default false\n */\n @Prop() collapseTags: boolean = false;\n\n /**\n * 多选时最多显示多少个tag\n */\n @Prop() maxCollapseTags?: number;\n\n @State() isOpen: boolean = false;\n @State() inputValue: string = '';\n @State() searchValue: string = '';\n @State() filteredOptions: SelectOption[] = [];\n /** 键盘高亮的选项索引(-1 表示无) */\n @State() activeOptionIndex: number = -1;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string | number | (string | number)[]>;\n\n /**\n * 下拉框出现/隐藏时触发\n */\n @Event() hbVisibleChange: EventEmitter<boolean>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; this.hbVisibleChange.emit(false); },\n });\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; this.hbVisibleChange.emit(false); },\n });\n this.clickOutside.connect();\n this.updateInputValue();\n if (this.filterable) {\n this.filteredOptions = this.options;\n }\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateInputValue();\n }\n\n @Watch('options')\n handleOptionsChange() {\n if (this.filterable) {\n this.filteredOptions = this.options;\n }\n }\n\n private updateInputValue() {\n if (!this.modelValue) {\n this.inputValue = '';\n return;\n }\n\n if (this.multiple && Array.isArray(this.modelValue)) {\n const labels = this.modelValue.map(val => {\n const option = this.options.find(opt => opt.value === val);\n return option ? option.label : String(val);\n });\n this.inputValue = labels.join(', ');\n } else {\n const option = this.options.find(opt => opt.value === this.modelValue);\n this.inputValue = option ? option.label : String(this.modelValue);\n }\n }\n\n private handleInputClick = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n // defaultFirstOption=true:打开时自动高亮第一个可选(非禁用)项\n this.activeOptionIndex = this.defaultFirstOption\n ? Math.max(-1, this.options.findIndex(o => !o.disabled))\n : -1;\n }\n this.hbVisibleChange.emit(this.isOpen);\n };\n\n private handleWrapperKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n const displayOptions = this.filterable ? this.filteredOptions : this.options;\n\n if (!this.isOpen) {\n // 关闭态:Enter / Space / 方向键 展开\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar' ||\n e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.isOpen = true;\n this.activeOptionIndex = -1;\n this.hbVisibleChange.emit(true);\n }\n return;\n }\n\n const action = handleListKeyboard(e, {\n activeIndex: this.activeOptionIndex,\n itemCount: displayOptions.length,\n loop: true,\n });\n switch (action.type) {\n case 'navigate':\n e.preventDefault();\n this.activeOptionIndex = action.index;\n break;\n case 'select': {\n e.preventDefault();\n const opt = displayOptions[action.index];\n if (opt && !opt.disabled) this.handleSelect(opt);\n break;\n }\n case 'close':\n e.preventDefault();\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n break;\n default:\n break;\n }\n };\n\n private handleSelect = (option: SelectOption) => {\n if (option.disabled) return;\n\n if (this.multiple) {\n const currentValue = (this.modelValue as (string | number)[]) || [];\n const index = currentValue.indexOf(option.value);\n \n if (index > -1) {\n currentValue.splice(index, 1);\n } else {\n currentValue.push(option.value);\n }\n \n this.modelValue = [...currentValue];\n } else {\n this.modelValue = option.value;\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n }\n \n this.updateInputValue();\n this.hbChange.emit(this.modelValue);\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.modelValue = this.multiple ? [] : undefined;\n this.inputValue = '';\n this.isOpen = false;\n this.hbChange.emit(this.modelValue);\n this.hbVisibleChange.emit(false);\n };\n\n private handleSearch = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchValue = target.value;\n \n if (this.filterMethod) {\n this.filterMethod(target.value);\n } else {\n this.filteredOptions = this.options.filter(opt =>\n opt.label.toLowerCase().includes(target.value.toLowerCase())\n );\n }\n };\n\n private isSelected(option: SelectOption): boolean {\n if (this.multiple && Array.isArray(this.modelValue)) {\n return this.modelValue.includes(option.value);\n }\n return this.modelValue === option.value;\n }\n\n /**\n * allowCreate + filterable:当用户输入的文本在已有选项中不存在时,\n * 渲染一个\"创建 xxx\"项。返回待创建的文本(已 trim);无需创建返回 null。\n */\n private get createOption(): SelectOption | null {\n if (!this.allowCreate || !this.filterable || !this.isOpen) return null;\n const q = this.searchValue.trim();\n if (!q) return null;\n const exists = this.options.some(o => String(o.label).toLowerCase() === q.toLowerCase() || String(o.value).toLowerCase() === q.toLowerCase());\n if (exists) return null;\n return { value: q, label: q };\n }\n\n private handleCreate = () => {\n const opt = this.createOption;\n if (!opt) return;\n if (this.multiple) {\n const arr = ((this.modelValue as (string | number)[]) || []).slice();\n if (!arr.includes(opt.value)) arr.push(opt.value);\n this.modelValue = arr;\n } else {\n this.modelValue = opt.value;\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n }\n this.searchValue = '';\n this.filteredOptions = this.options;\n this.updateInputValue();\n this.hbChange.emit(this.modelValue);\n };\n\n render() {\n const displayOptions = this.filterable ? this.filteredOptions : this.options;\n const showClear = this.clearable && this.modelValue !== undefined &&\n (this.multiple ? (this.modelValue as any[]).length > 0 : true);\n\n return (\n <div\n class={{\n 'hb-select': true,\n 'hb-select--open': this.isOpen,\n 'hb-select--disabled': this.disabled,\n [`hb-select--${this.size}`]: true,\n }}\n aria-haspopup=\"listbox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n >\n <div class=\"hb-select__input-wrapper\" onClick={this.handleInputClick} onKeyDown={this.handleWrapperKeydown}>\n {this.multiple && Array.isArray(this.modelValue) && this.modelValue.length > 0 ? (\n <div class=\"hb-select__tags\">\n {this.modelValue.slice(0, this.collapseTags && this.maxCollapseTags ? this.maxCollapseTags : undefined).map((val) => {\n const option = this.options.find(opt => opt.value === val);\n return (\n <span class=\"hb-select__tag\">\n <span class=\"hb-select__tag-text\">{option ? option.label : val}</span>\n <span\n class=\"hb-select__tag-close\"\n role=\"button\"\n aria-label=\"移除标签\"\n onClick={(e) => {\n e.stopPropagation();\n this.handleSelect(option || { value: val, label: String(val) });\n }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n </span>\n );\n })}\n {this.collapseTags && this.maxCollapseTags && this.modelValue.length > this.maxCollapseTags && (\n <span class=\"hb-select__tag\">\n <span class=\"hb-select__tag-text\">+{this.modelValue.length - this.maxCollapseTags}</span>\n </span>\n )}\n </div>\n ) : (\n <input\n type=\"text\"\n class=\"hb-select__input\"\n placeholder={this.placeholder}\n value={this.filterable && this.isOpen ? this.searchValue : this.inputValue}\n disabled={this.disabled}\n readonly={!this.filterable || !this.isOpen}\n onInput={this.handleSearch}\n aria-haspopup=\"listbox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n role=\"combobox\"\n />\n )}\n <span class=\"hb-select__suffix\">\n {showClear && (\n <span class=\"hb-select__clear\" role=\"button\" aria-label=\"清空\" onClick={this.handleClear}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n )}\n <span class=\"hb-select__arrow\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </span>\n </span>\n </div>\n {this.isOpen && (\n <div class=\"hb-select__dropdown\">\n <ul class=\"hb-select__menu\" role=\"listbox\">\n {/* allowCreate:用户输入文本不存在时,渲染创建项(置顶) */}\n {this.createOption && (\n <li\n class={{ 'hb-select__menu-item': true, 'hb-select__menu-item--create': true }}\n role=\"option\"\n aria-selected=\"false\"\n onClick={this.handleCreate}\n >\n <span class=\"hb-select__menu-item-label\">\n 创建「{this.createOption.label}」\n </span>\n </li>\n )}\n {displayOptions.length === 0 && !this.createOption ? (\n <li class=\"hb-select__menu-item hb-select__menu-item--empty\" aria-disabled=\"true\">无数据</li>\n ) : (\n displayOptions.map((option, index) => (\n <li\n class={{\n 'hb-select__menu-item': true,\n 'hb-select__menu-item--selected': this.isSelected(option),\n 'hb-select__menu-item--disabled': option.disabled,\n 'hb-select__menu-item--divided': option.divided,\n 'hb-select__menu-item--active': index === this.activeOptionIndex,\n }}\n role=\"option\"\n aria-selected={this.isSelected(option) ? 'true' : 'false'}\n aria-disabled={option.disabled ? 'true' : undefined}\n onClick={() => this.handleSelect(option)}\n >\n {this.multiple && (\n <span class=\"hb-select__menu-item-checkbox\" aria-hidden=\"true\">\n {this.isSelected(option) ? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={3} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 12l5 5L20 7\" />\n </svg>\n ) : null}\n </span>\n )}\n <span class=\"hb-select__menu-item-label\">{option.label}</span>\n </li>\n ))\n )}\n </ul>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,g as i,h as o}from"./p-e42dfa95.js";import{c as r}from"./p-4ef5a884.js";import{g as n}from"./p-ecce2b5e.js";import{i as a,h as s}from"./p-cc0aeb50.js";const d='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:inline-block;position:relative}.hb-dropdown__trigger{cursor:pointer;display:inline-block}.hb-dropdown__menu{animation:hb-dropdown-fade-in .15s ease-out;background-color:var(--hb-color-bg-elevated);border-radius:var(--hb-border-radius-base);box-shadow:var(--hb-box-shadow);left:0;margin-top:4px;min-width:120px;padding:4px 0;position:absolute;top:100%}.hb-dropdown__item{align-items:center;color:var(--hb-color-text);cursor:pointer;display:flex;font-size:var(--hb-font-size-sm);padding:6px 16px;transition:background-color var(--hb-transition-duration);white-space:nowrap}.hb-dropdown__item--active:not(.hb-dropdown__item--disabled),.hb-dropdown__item:hover:not(.hb-dropdown__item--disabled){background-color:var(--hb-color-fill-tertiary);color:var(--hb-color-primary)}.hb-dropdown__item--disabled{color:var(--hb-color-text-disabled);cursor:not-allowed}.hb-dropdown__item--divided{border-top:1px solid var(--hb-color-border-secondary);margin-top:4px;padding-top:8px}.hb-dropdown__item--danger{color:var(--hb-color-danger)}.hb-dropdown__item--danger:hover:not(.hb-dropdown__item--disabled){background-color:var(--hb-color-danger-bg);color:var(--hb-color-danger)}@keyframes hb-dropdown-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const l=d;const h=class{constructor(i){e(this,i);this.hbCommand=t(this,"hbCommand",7)}get el(){return i(this)}items=[];trigger="hover";disabled=false;isOpen=false;activeIndex=-1;hbCommand;clickOutside=r({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false}});componentDidLoad(){this.clickOutside=r({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.close()}});if(this.trigger==="click"){this.clickOutside.connect()}}disconnectedCallback(){this.clickOutside.disconnect()}open=()=>{if(this.disabled)return;this.isOpen=true;this.activeIndex=this.items.findIndex((e=>!e.disabled))};close=()=>{this.isOpen=false;this.activeIndex=-1};show=()=>{if(this.disabled)return;this.isOpen=true};hide=()=>{this.close()};toggle=()=>{if(this.disabled)return;if(this.isOpen)this.close();else this.open()};handleSelect=e=>{if(e.disabled)return;this.close();this.hbCommand.emit(e.key)};handleTriggerKeydown=e=>{if(this.disabled)return;if(this.trigger==="hover")return;if(a(e.key)||e.key==="ArrowDown"){e.preventDefault();this.open()}};handleMenuKeydown=e=>{const t=this.items.length;const i=s(e,{activeIndex:this.activeIndex,itemCount:t,loop:true});switch(i.type){case"navigate":e.preventDefault();{let e=i.index;for(let i=0;i<t;i++){if(!this.items[e]?.disabled)break;e=(e+1)%t}this.activeIndex=e}break;case"select":{e.preventDefault();const t=this.items[i.index];if(t&&!t.disabled)this.handleSelect(t);break}case"close":e.preventDefault();this.close();break}};render(){const e=this.trigger==="hover"?{onMouseEnter:this.show,onMouseLeave:this.hide}:{onClick:this.toggle};return o("div",{key:"59f46f0179081fb6c094e21e1f0cd8008ce5e71d",class:"hb-dropdown",...e,onKeyDown:this.handleTriggerKeydown},o("div",{key:"346a5bfca387e19aa85d420516c542d0c0a01b50",class:"hb-dropdown__trigger",role:"button",tabindex:this.disabled?-1:0,"aria-haspopup":"menu","aria-expanded":this.isOpen?"true":"false","aria-disabled":this.disabled?"true":"false"},o("slot",{key:"260f2627159a9bcbcaa374b1c6e8a473ed76e876"})),this.isOpen&&o("div",{key:"478f230e909c1ad13dc32dabcd1d2b543bde0c6c",class:"hb-dropdown__menu",style:{zIndex:String(n())},role:"menu",onKeyDown:this.handleMenuKeydown},this.items.map(((e,t)=>o("div",{class:{"hb-dropdown__item":true,"hb-dropdown__item--disabled":e.disabled,"hb-dropdown__item--divided":e.divided,"hb-dropdown__item--danger":e.danger,"hb-dropdown__item--active":t===this.activeIndex},role:"menuitem",tabindex:-1,"aria-disabled":e.disabled?"true":undefined,onMouseEnter:()=>{if(!e.disabled)this.activeIndex=t},onClick:()=>this.handleSelect(e)},e.label)))))}};h.style=l;export{h as hb_dropdown};
|
|
2
|
-
//# sourceMappingURL=p-92521c31.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["dropdownCss","HbDropdownStyle0","Dropdown","items","trigger","disabled","isOpen","activeIndex","hbCommand","clickOutside","createClickOutsideHandler","host","this","onClose","componentDidLoad","el","close","connect","disconnectedCallback","disconnect","open","findIndex","i","show","hide","toggle","handleSelect","item","emit","key","handleTriggerKeydown","e","isActivationKey","preventDefault","handleMenuKeydown","enabledCount","length","action","handleListKeyboard","itemCount","loop","type","idx","index","render","triggerEvents","onMouseEnter","onMouseLeave","onClick","h","class","onKeyDown","role","tabindex","style","zIndex","String","getNextZIndex","map","divided","danger","undefined","label"],"sources":["src/components/Dropdown/dropdown.css?tag=hb-dropdown&encapsulation=shadow","src/components/Dropdown/Dropdown.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n}\n\n.hb-dropdown__trigger {\n display: inline-block;\n cursor: pointer;\n}\n\n.hb-dropdown__menu {\n position: absolute;\n top: 100%;\n left: 0;\n min-width: 120px;\n margin-top: 4px;\n padding: 4px 0;\n background-color: var(--hb-color-bg-elevated);\n border-radius: var(--hb-border-radius-base);\n box-shadow: var(--hb-box-shadow);\n animation: hb-dropdown-fade-in 0.15s ease-out;\n}\n\n.hb-dropdown__item {\n display: flex;\n align-items: center;\n padding: 6px 16px;\n font-size: var(--hb-font-size-sm);\n color: var(--hb-color-text);\n cursor: pointer;\n white-space: nowrap;\n transition: background-color var(--hb-transition-duration);\n}\n\n.hb-dropdown__item:hover:not(.hb-dropdown__item--disabled),\n.hb-dropdown__item--active:not(.hb-dropdown__item--disabled) {\n background-color: var(--hb-color-fill-tertiary);\n color: var(--hb-color-primary);\n}\n\n.hb-dropdown__item--disabled {\n color: var(--hb-color-text-disabled);\n cursor: not-allowed;\n}\n\n.hb-dropdown__item--divided {\n margin-top: 4px;\n padding-top: 8px;\n border-top: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-dropdown__item--danger {\n color: var(--hb-color-danger);\n}\n.hb-dropdown__item--danger:hover:not(.hb-dropdown__item--disabled) {\n background-color: var(--hb-color-danger-bg);\n color: var(--hb-color-danger);\n}\n\n@keyframes hb-dropdown-fade-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n}\n","import { Component, h, Prop, State, Element, Event, EventEmitter } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport { getNextZIndex } from '../../utils/popup-manager';\nimport { handleListKeyboard, isActivationKey } from '../../utils/a11y';\n\nexport interface DropdownItem {\n key: string;\n label: string;\n disabled?: boolean;\n divided?: boolean;\n danger?: boolean;\n}\n\n/**\n * Dropdown 下拉菜单组件\n * 将动作或菜单折叠到下拉菜单中。\n *\n * 无障碍(对齐 WAI-ARIA menu / antd):\n * - 触发器 role=button + aria-haspopup=menu + aria-expanded\n * - 菜单 role=menu,菜单项 role=menuitem + aria-disabled\n * - 键盘:trigger 上 Enter/Space/↓ 打开;菜单内 ↑↓ 导航、Enter/Space 选中、Esc 关闭\n */\n@Component({\n tag: 'hb-dropdown',\n styleUrl: 'dropdown.css',\n shadow: true,\n})\nexport class Dropdown {\n @Element() el: HTMLElement;\n\n /** 菜单项 */\n @Prop() items: DropdownItem[] = [];\n\n /** 触发方式 */\n @Prop() trigger: 'hover' | 'click' = 'hover';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n @State() isOpen: boolean = false;\n /** 键盘高亮项索引(-1 表示无) */\n @State() activeIndex: number = -1;\n\n /** 命令事件 */\n @Event() hbCommand: EventEmitter<string>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; },\n });\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => { this.close(); },\n });\n // click 触发才需要外部点击关闭;hover 触发由 mouseenter/leave 控制\n if (this.trigger === 'click') {\n this.clickOutside.connect();\n }\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n private open = () => {\n if (this.disabled) return;\n this.isOpen = true;\n // 打开时默认高亮首个可选(非禁用)项,便于 Enter 直接选\n this.activeIndex = this.items.findIndex(i => !i.disabled);\n };\n\n private close = () => {\n this.isOpen = false;\n this.activeIndex = -1;\n };\n\n private show = () => {\n if (this.disabled) return;\n this.isOpen = true;\n };\n\n private hide = () => {\n this.close();\n };\n\n private toggle = () => {\n if (this.disabled) return;\n if (this.isOpen) this.close();\n else this.open();\n };\n\n private handleSelect = (item: DropdownItem) => {\n if (item.disabled) return;\n this.close();\n this.hbCommand.emit(item.key);\n };\n\n /** 触发器键盘:Enter/Space/↓ 打开 */\n private handleTriggerKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (this.trigger === 'hover') return; // hover 触发不需要键盘打开(focus 会展开见下)\n if (isActivationKey(e.key) || e.key === 'ArrowDown') {\n e.preventDefault();\n this.open();\n }\n };\n\n /** 菜单键盘:↑↓ 导航、Enter/Space 选中、Esc 关闭、Home/End 跳首尾 */\n private handleMenuKeydown = (e: KeyboardEvent) => {\n const enabledCount = this.items.length;\n const action = handleListKeyboard(e, {\n activeIndex: this.activeIndex,\n itemCount: enabledCount,\n loop: true,\n });\n switch (action.type) {\n case 'navigate':\n e.preventDefault();\n // 跳过禁用项:最多扫一圈\n {\n let idx = action.index;\n for (let i = 0; i < enabledCount; i++) {\n if (!this.items[idx]?.disabled) break;\n idx = (idx + 1) % enabledCount;\n }\n this.activeIndex = idx;\n }\n break;\n case 'select': {\n e.preventDefault();\n const item = this.items[action.index];\n if (item && !item.disabled) this.handleSelect(item);\n break;\n }\n case 'close':\n e.preventDefault();\n this.close();\n break;\n default:\n break;\n }\n };\n\n render() {\n const triggerEvents = this.trigger === 'hover'\n ? { onMouseEnter: this.show, onMouseLeave: this.hide }\n : { onClick: this.toggle };\n\n return (\n <div\n class=\"hb-dropdown\"\n {...triggerEvents}\n onKeyDown={this.handleTriggerKeydown}\n >\n <div\n class=\"hb-dropdown__trigger\"\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-haspopup=\"menu\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n >\n <slot />\n </div>\n {this.isOpen && (\n <div\n class=\"hb-dropdown__menu\"\n style={{ zIndex: String(getNextZIndex()) }}\n role=\"menu\"\n onKeyDown={this.handleMenuKeydown}\n >\n {this.items.map((item, index) => (\n <div\n class={{\n 'hb-dropdown__item': true,\n 'hb-dropdown__item--disabled': item.disabled,\n 'hb-dropdown__item--divided': item.divided,\n 'hb-dropdown__item--danger': item.danger,\n 'hb-dropdown__item--active': index === this.activeIndex,\n }}\n role=\"menuitem\"\n tabindex={-1}\n aria-disabled={item.disabled ? 'true' : undefined}\n onMouseEnter={() => { if (!item.disabled) this.activeIndex = index; }}\n onClick={() => this.handleSelect(item)}\n >\n {item.label}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as i,g as t,h as o}from"./p-e42dfa95.js";import{g as a,l as n,u as r}from"./p-ecce2b5e.js";import{c as s}from"./p-cc0aeb50.js";const l='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.container{width:100%}.hidden{display:none}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:contents}.hb-dialog-wrapper{inset:0;pointer-events:none;position:fixed}.hb-dialog-wrapper--hidden{display:none}.hb-dialog__overlay{background-color:var(--hb-color-bg-mask);inset:0;transition:opacity .3s}.hb-dialog,.hb-dialog__overlay{pointer-events:auto;position:fixed}.hb-dialog{background-color:var(--hb-dialog-bg);border-radius:var(--hb-dialog-radius);box-shadow:var(--hb-dialog-shadow);display:flex;flex-direction:column;left:50%;max-height:90vh;opacity:0;overflow:hidden;top:50%;transform:translate(-50%,-50%)scale(.9);transition:opacity .3s,transform .3s}.hb-dialog--visible{opacity:1;transform:translate(-50%,-50%)scale(1)}.hb-dialog--fullscreen{border-radius:0;height:100vh;left:0;max-height:100vh;top:0;transform:none;width:100%!important}.hb-dialog--fullscreen.hb-dialog--visible{transform:none}.hb-dialog__header{align-items:center;border-bottom:1px solid var(--hb-color-border-secondary);display:flex;justify-content:space-between;padding:var(--hb-spacing-md)var(--hb-spacing-lg)}.hb-dialog__title{color:var(--hb-color-text-primary);font-size:var(--hb-font-size-lg);font-weight:600}.hb-dialog__close{align-items:center;background:0 0;border:none;border-radius:var(--hb-border-radius-sm);color:var(--hb-color-text-secondary);cursor:pointer;display:inline-flex;font-size:18px;height:28px;justify-content:center;transition:all var(--hb-transition-duration);width:28px}.hb-dialog__close:hover{background-color:var(--hb-color-fill-tertiary);color:var(--hb-color-text-primary)}.hb-dialog__body{color:var(--hb-color-text);flex:1;font-size:var(--hb-font-size-base);overflow-y:auto;padding:var(--hb-spacing-lg)}.hb-dialog__footer{align-items:center;border-top:1px solid var(--hb-color-border-secondary);display:flex;gap:var(--hb-spacing-xs);justify-content:flex-end;padding:var(--hb-spacing-sm)var(--hb-spacing-lg)}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}';const d=l;const h=class{constructor(t){e(this,t);this.hbOpen=i(this,"hbOpen",7);this.hbClose=i(this,"hbClose",7);this.hbClosed=i(this,"hbClosed",7)}get el(){return t(this)}modelValue=false;title="";width="50%";fullscreen=false;modal=true;closeOnClickModal=true;closeOnPressEscape=true;showClose=true;destroyOnClose=false;hbOpen;hbClose;hbClosed;zIndex=0;panelRef;trap;handleVisibleChange(e){if(e){this.zIndex=a();if(this.modal)n();this.hbOpen.emit();document.addEventListener("keydown",this.handleKeyDown)}else{if(this.modal)r();document.removeEventListener("keydown",this.handleKeyDown)}}disconnectedCallback(){if(this.modelValue&&this.modal)r();document.removeEventListener("keydown",this.handleKeyDown);this.trap?.disconnect()}componentDidRender(){if(!this.panelRef)return;if(this.modelValue){if(!this.trap){this.trap=s({container:this.panelRef})}this.trap.connect()}else{this.trap?.disconnect()}}handleKeyDown=e=>{if(this.closeOnPressEscape&&e.key==="Escape"){this.close()}};close=()=>{this.modelValue=false;this.hbClose.emit();setTimeout((()=>this.hbClosed.emit()),300)};handleOverlayClick=()=>{if(this.closeOnClickModal)this.close()};render(){if(this.destroyOnClose&&!this.modelValue)return null;return o("div",{class:{"hb-dialog-wrapper":true,"hb-dialog-wrapper--hidden":!this.modelValue}},this.modal&&o("div",{class:"hb-dialog__overlay",style:{zIndex:String(this.zIndex)},onClick:this.handleOverlayClick}),o("div",{ref:e=>this.panelRef=e,class:{"hb-dialog":true,"hb-dialog--fullscreen":this.fullscreen,"hb-dialog--visible":this.modelValue},style:{zIndex:String(this.zIndex+1),width:this.fullscreen?"100%":this.width},role:"dialog","aria-modal":"true"},o("div",{class:"hb-dialog__header"},o("span",{class:"hb-dialog__title"},this.title),this.showClose&&o("button",{type:"button",class:"hb-dialog__close","aria-label":"关闭",onClick:this.close},"×")),o("div",{class:"hb-dialog__body"},o("slot",null)),o("div",{class:"hb-dialog__footer"},o("slot",{name:"footer"}))))}static get watchers(){return{modelValue:["handleVisibleChange"]}}};h.style=d;export{h as hb_dialog};
|
|
2
|
-
//# sourceMappingURL=p-965d4d02.entry.js.map
|