huibo-ui 0.4.0 → 0.6.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 +67 -16
- package/dist/cjs/hb-form-item.cjs.entry.js.map +1 -1
- package/dist/cjs/hb-form.cjs.entry.js +115 -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 +100 -19
- 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 +3 -3
- 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 +218 -41
- 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 +217 -9
- package/dist/collection/components/Form/Form.js.map +1 -1
- package/dist/collection/components/Form/FormItem.js +126 -18
- 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 +123 -19
- 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 +296 -41
- 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/collection/utils/virtual-scroll.js +39 -0
- package/dist/collection/utils/virtual-scroll.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 +70 -16
- package/dist/components/hb-form-item.js.map +1 -1
- package/dist/components/hb-form.js +120 -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 +105 -20
- 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 +3 -3
- 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 +226 -43
- 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 +67 -16
- package/dist/esm/hb-form-item.entry.js.map +1 -1
- package/dist/esm/hb-form.entry.js +115 -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 +100 -19
- 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 +3 -3
- 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 +218 -41
- 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-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-c80f8ace.entry.js → p-2cf5bf20.entry.js} +2 -2
- package/dist/huibo-ui/p-2cf5bf20.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-4148d875.entry.js +2 -0
- package/dist/huibo-ui/p-4148d875.entry.js.map +1 -0
- 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-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-2811e603.entry.js → p-6bfe1954.entry.js} +2 -2
- package/dist/huibo-ui/p-6bfe1954.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-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-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-86bdc48a.entry.js → p-e8824b2c.entry.js} +2 -2
- package/dist/huibo-ui/p-e8824b2c.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-f69599fa.entry.js +2 -0
- package/dist/huibo-ui/p-f69599fa.entry.js.map +1 -0
- 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 +59 -0
- package/dist/types/components/Form/FormItem.d.ts +23 -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 +24 -0
- package/dist/types/components/Table/Table.d.ts +110 -9
- 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 +188 -6
- package/dist/types/utils/a11y.d.ts +9 -0
- package/dist/types/utils/transition.d.ts +27 -0
- package/dist/types/utils/virtual-scroll.d.ts +38 -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 +0 -2
- 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,2 +0,0 @@
|
|
|
1
|
-
import{r as t,c as e,g as i,h as n}from"./p-e42dfa95.js";const o=["large","default","small"];function r(t,e){const i=e&&o.includes(e)?e:"default";return`${t}--${i}`}function a(t){return Boolean(t.clearable&&!t.disabled&&!t.readonly&&t.hasValue)}function s(t){if(t===null||t===undefined)return false;if(typeof t==="string")return t.length>0;if(typeof t==="number")return!Number.isNaN(t);if(Array.isArray(t))return t.length>0;return true}function l(t,e){return{[t]:true,[r(t,e)]:true}}const h='/*! 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{.hidden{display:none}.resize{resize:both}.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-input-font-size:14px;--hb-input-font-size-large:16px;--hb-input-font-size-small:12px;--hb-input-height:32px;--hb-input-height-large:40px;--hb-input-height-small:24px;--hb-input-border-color:var(--hb-border-color,#dcdfe6);--hb-input-border-color-hover:var(--hb-color-primary);--hb-input-bg-color:var(--hb-color-white,#fff);--hb-input-text-color:var(--hb-color-text-regular,#606266);--hb-input-placeholder-color:var(--hb-color-text-placeholder,#c0c4cc);--hb-input-disabled-color:var(--hb-color-text-disabled,#c0c4cc);--hb-input-disabled-bg-color:var(--hb-fill-color-light,#f5f7fa);display:inline-block;position:relative}.hb-input{font-size:var(--hb-input-font-size);position:relative}.hb-input,.hb-input__inner{display:inline-block;width:100%}.hb-input__inner{-webkit-appearance:none;background-color:var(--hb-input-bg-color);background-image:none;border:1px solid var(--hb-input-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-input-text-color);font-size:inherit;height:var(--hb-input-height);line-height:var(--hb-input-height);outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.hb-input__inner::placeholder{color:var(--hb-input-placeholder-color)}.hb-input__inner:focus,.hb-input__inner:hover:not(:disabled){border-color:var(--hb-input-border-color-hover)}.hb-input__inner:disabled{background-color:var(--hb-input-disabled-bg-color);border-color:var(--hb-input-border-color);color:var(--hb-input-disabled-color);cursor:not-allowed}.hb-input__inner[readonly]{background-color:var(--hb-input-disabled-bg-color);cursor:default}.hb-input--small .hb-input__inner{font-size:var(--hb-input-font-size-small);height:var(--hb-input-height-small);line-height:var(--hb-input-height-small);padding:0 12px}.hb-input--large .hb-input__inner{font-size:var(--hb-input-font-size-large);height:var(--hb-input-height-large);line-height:var(--hb-input-height-large);padding:0 18px}.hb-input__prefix,.hb-input__suffix{align-items:center;color:var(--hb-input-placeholder-color);display:flex;height:100%;position:absolute;text-align:center;top:0;transition:all .3s}.hb-input__prefix{left:5px}.hb-input__suffix{right:5px}.hb-input__suffix-inner{align-items:center;cursor:pointer;display:flex;-webkit-user-select:none;user-select:none}.hb-input__clear{align-items:center;color:var(--hb-input-placeholder-color);display:inline-flex;height:16px;justify-content:center;transition:color .2s;width:16px}.hb-input__clear svg{height:100%;width:100%}.hb-input__clear:hover,.hb-input__password{color:var(--hb-input-text-color)}.hb-input__password{align-items:center;cursor:pointer;display:inline-flex;height:16px;justify-content:center;width:16px}.hb-input__password svg{height:100%;width:100%}.hb-input__inner[type=textarea]{line-height:1.5;min-height:60px;padding:5px 15px;resize:vertical;vertical-align:bottom}.hb-input__count{bottom:5px;color:var(--hb-input-placeholder-color);font-size:12px;position:absolute;right:10px}.hb-input__count-inner{background-color:var(--hb-input-bg-color);padding:0 4px}@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 d=h;const p=class{constructor(i){t(this,i);this.hbChange=e(this,"hbChange",7);this.hbInput=e(this,"hbInput",7);this.hbFocus=e(this,"hbFocus",7);this.hbBlur=e(this,"hbBlur",7);this.hbClear=e(this,"hbClear",7)}get el(){return i(this)}modelValue="";type="text";size="default";disabled=false;readonly=false;placeholder;clearable=false;showPassword=false;showWordLimit=false;maxlength;minlength;name;inputId;autocomplete;autofocus=false;prefixIcon;suffixIcon;rows=2;autosize=false;resize;isFocused=false;showClear=false;passwordVisible=false;inputValue="";inputRef;hbChange;hbInput;hbFocus;hbBlur;hbClear;handleValueChange(){this.inputValue=this.modelValue;this.updateClearVisible();this.resizeTextarea()}componentDidLoad(){this.inputValue=this.modelValue;this.updateClearVisible();this.resizeTextarea()}updateClearVisible(){this.showClear=a({clearable:this.clearable,disabled:this.disabled,readonly:this.readonly,hasValue:s(this.inputValue)})}resizeTextarea(){if(this.type!=="textarea"||!this.autosize)return;const t=this.inputRef;if(!t)return;const e=typeof window!=="undefined"?window.getComputedStyle(t):null;const i=e&&parseFloat(e.lineHeight)?parseFloat(e.lineHeight):22;const n=e?parseFloat(e.paddingTop)||0:0;const o=e?parseFloat(e.paddingBottom)||0:0;const r=typeof this.autosize==="object"?this.autosize:{};const a=r.minRows??1;const s=r.maxRows??Infinity;const l=a*i+n+o;const h=s===Infinity?Infinity:s*i+n+o;t.style.height="auto";const d=t.scrollHeight;const p=Math.max(l,Math.min(d,h===Infinity?d:h));t.style.height=`${p}px`;t.style.overflowY=d>p?"auto":"hidden"}handleInput=t=>{const e=t.target;this.inputValue=e.value;this.modelValue=e.value;this.updateClearVisible();this.hbInput.emit(e.value);this.resizeTextarea()};handleChange=t=>{const e=t.target;this.hbChange.emit(e.value)};handleFocus=t=>{this.isFocused=true;this.updateClearVisible();this.hbFocus.emit(t)};handleBlur=t=>{this.isFocused=false;this.updateClearVisible();this.hbBlur.emit(t)};handleClear=t=>{t.stopPropagation();this.inputValue="";this.modelValue="";this.updateClearVisible();this.hbClear.emit();this.hbChange.emit("");if(this.inputRef){this.inputRef.focus()}};togglePasswordVisible=()=>{this.passwordVisible=!this.passwordVisible};getInputType(){if(this.type==="password"&&this.showPassword){return this.passwordVisible?"text":"password"}return this.type}render(){const t=this.type==="textarea";const e=t?"textarea":"input";return n("div",{key:"200ae1b7d9257131fa15c06e950962559eaf6509",class:{...l("hb-input",this.size),"hb-input--disabled":this.disabled,"hb-input--focused":this.isFocused}},this.prefixIcon&&n("span",{key:"1ba978d8de430fe70864b1daf5781e925cc35b5c",class:"hb-input__prefix"},n("i",{key:"72abd536835d18ad5e7f75a09f896ebe41ca75d4",class:this.prefixIcon})),n(e,{key:"80049f50544c8118c73e545223450e5aecfc97ab",ref:t=>this.inputRef=t,type:t?undefined:this.getInputType(),id:this.inputId,name:this.name,class:"hb-input__inner",placeholder:this.placeholder,value:this.inputValue,disabled:this.disabled,readonly:this.readonly,autocomplete:this.autocomplete,autofocus:this.autofocus,maxlength:this.maxlength,minlength:this.minlength,rows:t?this.rows:undefined,style:t?{resize:this.autosize?"none":this.resize||"none"}:undefined,onInput:this.handleInput,onChange:this.handleChange,onFocus:this.handleFocus,onBlur:this.handleBlur}),(this.showClear||this.suffixIcon||this.type==="password"&&this.showPassword)&&n("span",{key:"9ef7d5b2592fbb890f2915c97c5ecb6a5790ef97",class:"hb-input__suffix"},this.showClear&&n("span",{key:"c727eb595e73882d7c8c0d74cb65464062724377",class:"hb-input__suffix-inner hb-input__clear",role:"button","aria-label":"清空",onClick:this.handleClear},n("svg",{key:"49060a94eba1105ffe4a97a48be513919586737d",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},n("path",{key:"49c82790d5035f47c3f722b2d714f230394b2dda",d:"M6 6l12 12M18 6L6 18"}))),this.type==="password"&&this.showPassword&&n("span",{key:"209212e83bc6c4c0939c6ace984648212c320312",class:"hb-input__suffix-inner hb-input__password",role:"button","aria-label":this.passwordVisible?"隐藏密码":"显示密码",onClick:this.togglePasswordVisible},this.passwordVisible?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:"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z"}),n("circle",{cx:"12",cy:"12",r:"3"})):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:"M3 3l18 18M10.6 10.6a3 3 0 0 0 4.2 4.2M9.9 5.1A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17.8 17.8 0 0 1-2.2 3.2M6.1 6.1A17.7 17.7 0 0 0 2 12s3.5 7 10 7a10.5 10.5 0 0 0 4-.8"}))),this.suffixIcon&&n("span",{key:"661c50477f3a7d99feb22d71920493a184d66beb",class:"hb-input__suffix-inner"},n("i",{key:"f626ef9a8e095ee15ed0b8d3c903635c66d160c1",class:this.suffixIcon}))),this.showWordLimit&&this.maxlength&&n("span",{key:"47eba0fd638cbf8c510f0a94ee1dac808e3bba78",class:"hb-input__count"},n("span",{key:"2d73a2813633592d8462b9decb3fb3f81fa3abde",class:"hb-input__count-inner"},this.inputValue.length," / ",this.maxlength)))}static get watchers(){return{modelValue:["handleValueChange"]}}};p.style=d;export{p as hb_input};
|
|
2
|
-
//# sourceMappingURL=p-4d34e43e.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["COMPONENT_SIZES","buildSizeClass","base","size","normalized","includes","isClearVisible","options","Boolean","clearable","disabled","readonly","hasValue","hasInputValue","value","undefined","length","Number","isNaN","Array","isArray","sizeClassMap","inputCss","HbInputStyle0","Input","modelValue","type","placeholder","showPassword","showWordLimit","maxlength","minlength","name","inputId","autocomplete","autofocus","prefixIcon","suffixIcon","rows","autosize","resize","isFocused","showClear","passwordVisible","inputValue","inputRef","hbChange","hbInput","hbFocus","hbBlur","hbClear","handleValueChange","this","updateClearVisible","resizeTextarea","componentDidLoad","ta","computed","window","getComputedStyle","lineHeight","parseFloat","paddingTop","paddingBottom","opts","minRows","maxRows","Infinity","minH","maxH","style","height","scrollH","scrollHeight","clamped","Math","max","min","overflowY","handleInput","e","target","emit","handleChange","handleFocus","handleBlur","handleClear","stopPropagation","focus","togglePasswordVisible","getInputType","render","isTextarea","InputTag","h","key","class","ref","el","id","onInput","onChange","onFocus","onBlur","role","onClick","viewBox","fill","stroke","d","cx","cy","r"],"sources":["src/utils/form-input-base.ts","src/components/Input/input.css?tag=hb-input&encapsulation=shadow","src/components/Input/Input.tsx"],"sourcesContent":["/**\n * 表单输入组件共享基础\n * 统一 size / disabled / clearable / modelValue 这一组在 Input / Select / Cascader /\n * DatePicker / InputNumber / TimePicker 等组件中重复出现的包装模式。\n *\n * 设计原则:纯函数 + 类型导出,不引入基类继承,避免 Stencil 装饰器在继承链上的隐式行为。\n * 组件按需 import 对应工具,渲染时调用即可。\n */\n\n/** 组件尺寸(与 Ant Design 对齐,便于迁移) */\nexport type ComponentSize = 'large' | 'default' | 'small';\n\n/** 全部合法尺寸,用于运行期校验 */\nexport const COMPONENT_SIZES: readonly ComponentSize[] = ['large', 'default', 'small'] as const;\n\n/**\n * 表单输入组件共享的 prop 契约。\n * 跨框架消费方(React / Vue / 原生)可据此推断任一表单输入组件的通用能力,\n * 各组件在此基础上扩展自身特有 prop。\n */\nexport interface FormInputProps {\n /** 绑定值(双向,配合 hbChange 事件) */\n modelValue: unknown;\n /** 尺寸 */\n size?: ComponentSize;\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否只读 */\n readonly?: boolean;\n /** 是否可清空 */\n clearable?: boolean;\n /** 占位文本 */\n placeholder?: string;\n}\n\n/**\n * 生成尺寸 class 名:buildSizeClass('hb-input', 'large') -> 'hb-input--large'\n * 用于替代各组件 render 中重复的 `[`hb-input--${this.size}`]: true` 模板字面量。\n */\nexport function buildSizeClass(base: string, size: ComponentSize | undefined): string {\n const normalized = size && COMPONENT_SIZES.includes(size) ? size : 'default';\n return `${base}--${normalized}`;\n}\n\n/** 清空按钮可见性判定参数 */\nexport interface ClearVisibleOptions {\n /** 是否声明了 clearable */\n clearable: boolean;\n /** 是否禁用(禁用时不显示) */\n disabled?: boolean;\n /** 是否只读(只读时不显示) */\n readonly?: boolean;\n /** 当前是否有值(无值时不显示) */\n hasValue: boolean;\n}\n\n/**\n * 判定清空按钮是否应显示。\n * 抽取自 Input/Select/Cascader 中重复的 `clearable && !disabled && !readonly && hasValue`。\n */\nexport function isClearVisible(options: ClearVisibleOptions): boolean {\n return Boolean(options.clearable && !options.disabled && !options.readonly && options.hasValue);\n}\n\n/**\n * 判定一个值是否「非空」(用于清空按钮显隐)。\n * 兼容字符串、数字、数组(多选)。\n */\nexport function hasInputValue(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string') return value.length > 0;\n if (typeof value === 'number') return !Number.isNaN(value);\n if (Array.isArray(value)) return value.length > 0;\n return true;\n}\n\n/**\n * 尺寸 class 集合生成器:返回包含 base 与 size class 的对象,可直接展开进 JSX class 绑定。\n * 例:sizeClassMap('hb-input', 'large', this.size) -> { 'hb-input': true, 'hb-input--large': true }\n */\nexport function sizeClassMap(base: string, size: ComponentSize | undefined): Record<string, boolean> {\n return { [base]: true, [buildSizeClass(base, size)]: true };\n}\n",":host {\n display: inline-block;\n position: relative;\n --hb-input-font-size: 14px;\n --hb-input-font-size-large: 16px;\n --hb-input-font-size-small: 12px;\n --hb-input-height: 32px;\n --hb-input-height-large: 40px;\n --hb-input-height-small: 24px;\n --hb-input-border-color: var(--hb-border-color, #dcdfe6);\n --hb-input-border-color-hover: var(--hb-color-primary);\n --hb-input-bg-color: var(--hb-color-white, #ffffff);\n --hb-input-text-color: var(--hb-color-text-regular, #606266);\n --hb-input-placeholder-color: var(--hb-color-text-placeholder, #c0c4cc);\n --hb-input-disabled-color: var(--hb-color-text-disabled, #c0c4cc);\n --hb-input-disabled-bg-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-input {\n position: relative;\n font-size: var(--hb-input-font-size);\n display: inline-block;\n width: 100%;\n}\n\n.hb-input__inner {\n -webkit-appearance: none;\n background-color: var(--hb-input-bg-color);\n background-image: none;\n border-radius: 4px;\n border: 1px solid var(--hb-input-border-color);\n box-sizing: border-box;\n color: var(--hb-input-text-color);\n display: inline-block;\n font-size: inherit;\n height: var(--hb-input-height);\n line-height: var(--hb-input-height);\n outline: none;\n padding: 0 15px;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n width: 100%;\n}\n\n.hb-input__inner::placeholder {\n color: var(--hb-input-placeholder-color);\n}\n\n.hb-input__inner:hover:not(:disabled) {\n border-color: var(--hb-input-border-color-hover);\n}\n\n.hb-input__inner:focus {\n border-color: var(--hb-input-border-color-hover);\n}\n\n.hb-input__inner:disabled {\n background-color: var(--hb-input-disabled-bg-color);\n border-color: var(--hb-input-border-color);\n color: var(--hb-input-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-input__inner[readonly] {\n background-color: var(--hb-input-disabled-bg-color);\n cursor: default;\n}\n\n.hb-input--small .hb-input__inner {\n height: var(--hb-input-height-small);\n line-height: var(--hb-input-height-small);\n font-size: var(--hb-input-font-size-small);\n padding: 0 12px;\n}\n\n.hb-input--large .hb-input__inner {\n height: var(--hb-input-height-large);\n line-height: var(--hb-input-height-large);\n font-size: var(--hb-input-font-size-large);\n padding: 0 18px;\n}\n\n.hb-input__prefix,\n.hb-input__suffix {\n position: absolute;\n top: 0;\n height: 100%;\n text-align: center;\n color: var(--hb-input-placeholder-color);\n transition: all 0.3s;\n display: flex;\n align-items: center;\n}\n\n.hb-input__prefix {\n left: 5px;\n}\n\n.hb-input__suffix {\n right: 5px;\n}\n\n.hb-input__suffix-inner {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n}\n\n.hb-input__clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n color: var(--hb-input-placeholder-color);\n transition: color 0.2s;\n}\n\n.hb-input__clear svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-input__clear:hover {\n color: var(--hb-input-text-color);\n}\n\n.hb-input__password {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n color: var(--hb-input-text-color);\n cursor: pointer;\n}\n\n.hb-input__password svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-input__inner[type=\"textarea\"] {\n min-height: 60px;\n padding: 5px 15px;\n line-height: 1.5;\n vertical-align: bottom;\n resize: vertical;\n}\n\n.hb-input__count {\n position: absolute;\n bottom: 5px;\n right: 10px;\n font-size: 12px;\n color: var(--hb-input-placeholder-color);\n}\n\n.hb-input__count-inner {\n background-color: var(--hb-input-bg-color);\n padding: 0 4px;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\nimport { ComponentSize, hasInputValue, isClearVisible, sizeClassMap } from '../../utils/form-input-base';\n\n/**\n * Input 输入框组件\n * 通过鼠标或键盘输入字符\n */\n@Component({\n tag: 'hb-input',\n styleUrl: 'input.css',\n shadow: true,\n})\nexport class Input {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: string = '';\n\n /**\n * 输入框类型\n */\n @Prop() type: string = 'text';\n\n /**\n * 输入框尺寸\n */\n @Prop() size: ComponentSize = 'default';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否只读\n * @default false\n */\n @Prop() readonly: boolean = false;\n\n /**\n * 输入框占位文本\n */\n @Prop() placeholder?: string;\n\n /**\n * 是否可清空\n * @default false\n */\n @Prop() clearable: boolean = false;\n\n /**\n * 是否显示密码可见性切换\n * @default false\n */\n @Prop() showPassword: boolean = false;\n\n /**\n * 是否显示字数统计\n * @default false\n */\n @Prop() showWordLimit: boolean = false;\n\n /**\n * 最大输入长度\n */\n @Prop() maxlength?: number;\n\n /**\n * 最小输入长度\n */\n @Prop() minlength?: number;\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() inputId?: string;\n\n /**\n * 原生 autocomplete 属性\n */\n @Prop() autocomplete?: string;\n\n /**\n * 原生 autofocus 属性\n */\n @Prop() autofocus: boolean = false;\n\n /**\n * 输入框头部图标\n */\n @Prop() prefixIcon?: string;\n\n /**\n * 输入框尾部图标\n */\n @Prop() suffixIcon?: string;\n\n /**\n * 输入框行数,仅 type 为 'textarea' 时有效\n */\n @Prop() rows: number = 2;\n\n /**\n * 是否自适应内容高度,仅 type 为 'textarea' 时有效\n */\n @Prop() autosize: boolean | { minRows?: number; maxRows?: number } = false;\n\n /**\n * 是否调整 textarea 大小\n */\n @Prop() resize?: 'none' | 'both' | 'horizontal' | 'vertical';\n\n @State() isFocused: boolean = false;\n @State() showClear: boolean = false;\n @State() passwordVisible: boolean = false;\n @State() inputValue: string = '';\n\n private inputRef?: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n /**\n * 输入事件\n */\n @Event() hbInput: EventEmitter<string>;\n\n /**\n * 聚焦事件\n */\n @Event() hbFocus: EventEmitter<FocusEvent>;\n\n /**\n * 失焦事件\n */\n @Event() hbBlur: EventEmitter<FocusEvent>;\n\n /**\n * 清空事件\n */\n @Event() hbClear: EventEmitter<void>;\n\n @Watch('modelValue')\n handleValueChange() {\n this.inputValue = this.modelValue;\n this.updateClearVisible();\n // textarea autosize:外部改值也要重算高度\n this.resizeTextarea();\n }\n\n componentDidLoad() {\n this.inputValue = this.modelValue;\n this.updateClearVisible();\n this.resizeTextarea();\n }\n\n private updateClearVisible() {\n this.showClear = isClearVisible({\n clearable: this.clearable,\n disabled: this.disabled,\n readonly: this.readonly,\n hasValue: hasInputValue(this.inputValue),\n });\n }\n\n /**\n * textarea 自适应高度(autosize)。\n * - autosize=false 或非 textarea:跳过。\n * - autosize=true:按内容自适应。\n * - autosize={minRows,maxRows}:在最小/最大行数间夹取。\n * 算法:先把 height 置 auto 让浏览器按内容重排,再读 scrollHeight,\n * 减去 padding 后按行高换算成行数,最后按 min/max 夹取并写回 height。\n */\n private resizeTextarea() {\n if (this.type !== 'textarea' || !this.autosize) return;\n const ta = this.inputRef as HTMLTextAreaElement | undefined;\n if (!ta) return;\n\n // 行高:优先取计算样式,兜底 22px\n const computed = typeof window !== 'undefined' ? window.getComputedStyle(ta) : null;\n const lineHeight = computed && parseFloat(computed.lineHeight) ? parseFloat(computed.lineHeight) : 22;\n const paddingTop = computed ? parseFloat(computed.paddingTop) || 0 : 0;\n const paddingBottom = computed ? parseFloat(computed.paddingBottom) || 0 : 0;\n\n const opts = typeof this.autosize === 'object' ? this.autosize : {};\n const minRows = opts.minRows ?? 1;\n const maxRows = opts.maxRows ?? Infinity;\n\n const minH = minRows * lineHeight + paddingTop + paddingBottom;\n const maxH = maxRows === Infinity ? Infinity : maxRows * lineHeight + paddingTop + paddingBottom;\n\n // 先 reset 高度以读取真实内容高度\n ta.style.height = 'auto';\n const scrollH = ta.scrollHeight;\n const clamped = Math.max(minH, Math.min(scrollH, maxH === Infinity ? scrollH : maxH));\n ta.style.height = `${clamped}px`;\n // overflow:能滚动时才显示滚动条\n ta.style.overflowY = scrollH > clamped ? 'auto' : 'hidden';\n }\n\n private handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\n this.inputValue = target.value;\n this.modelValue = target.value;\n this.updateClearVisible();\n this.hbInput.emit(target.value);\n this.resizeTextarea();\n };\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\n this.hbChange.emit(target.value);\n };\n\n private handleFocus = (e: FocusEvent) => {\n this.isFocused = true;\n this.updateClearVisible();\n this.hbFocus.emit(e);\n };\n\n private handleBlur = (e: FocusEvent) => {\n this.isFocused = false;\n this.updateClearVisible();\n this.hbBlur.emit(e);\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.inputValue = '';\n this.modelValue = '';\n this.updateClearVisible();\n this.hbClear.emit();\n this.hbChange.emit('');\n if (this.inputRef) {\n this.inputRef.focus();\n }\n };\n\n private togglePasswordVisible = () => {\n this.passwordVisible = !this.passwordVisible;\n };\n\n private getInputType(): string {\n if (this.type === 'password' && this.showPassword) {\n return this.passwordVisible ? 'text' : 'password';\n }\n return this.type;\n }\n\n render() {\n const isTextarea = this.type === 'textarea';\n const InputTag = isTextarea ? 'textarea' : 'input';\n\n return (\n <div\n class={{\n ...sizeClassMap('hb-input', this.size),\n 'hb-input--disabled': this.disabled,\n 'hb-input--focused': this.isFocused,\n }}\n >\n {this.prefixIcon && (\n <span class=\"hb-input__prefix\">\n <i class={this.prefixIcon}></i>\n </span>\n )}\n <InputTag\n ref={(el) => (this.inputRef = el)}\n type={isTextarea ? undefined : this.getInputType()}\n id={this.inputId}\n name={this.name}\n class=\"hb-input__inner\"\n placeholder={this.placeholder}\n value={this.inputValue}\n disabled={this.disabled}\n readonly={this.readonly}\n autocomplete={this.autocomplete}\n autofocus={this.autofocus}\n maxlength={this.maxlength}\n minlength={this.minlength}\n rows={isTextarea ? this.rows : undefined}\n style={isTextarea ? { resize: this.autosize ? 'none' : (this.resize || 'none') } : undefined}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n {(this.showClear || this.suffixIcon || (this.type === 'password' && this.showPassword)) && (\n <span class=\"hb-input__suffix\">\n {this.showClear && (\n <span class=\"hb-input__suffix-inner hb-input__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 {this.type === 'password' && this.showPassword && (\n <span\n class=\"hb-input__suffix-inner hb-input__password\"\n role=\"button\"\n aria-label={this.passwordVisible ? '隐藏密码' : '显示密码'}\n onClick={this.togglePasswordVisible}\n >\n {this.passwordVisible ? (\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=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\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=\"M3 3l18 18M10.6 10.6a3 3 0 0 0 4.2 4.2M9.9 5.1A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17.8 17.8 0 0 1-2.2 3.2M6.1 6.1A17.7 17.7 0 0 0 2 12s3.5 7 10 7a10.5 10.5 0 0 0 4-.8\" />\n </svg>\n )}\n </span>\n )}\n {this.suffixIcon && (\n <span class=\"hb-input__suffix-inner\">\n <i class={this.suffixIcon}></i>\n </span>\n )}\n </span>\n )}\n {this.showWordLimit && this.maxlength && (\n <span class=\"hb-input__count\">\n <span class=\"hb-input__count-inner\">\n {this.inputValue.length} / {this.maxlength}\n </span>\n </span>\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 t,h as i}from"./p-e42dfa95.js";import{c as o,g as a}from"./p-ecce2b5e.js";import{i as r}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;.hb-popover__trigger,:host{display:inline-block}.hb-popover__popup{animation:hb-popover-fade .15s ease-out;background:var(--hb-color-bg-elevated);border-radius:var(--hb-border-radius-base);box-shadow:var(--hb-box-shadow);padding:var(--hb-spacing-sm)0;pointer-events:auto;position:fixed}.hb-popover__title{border-bottom:1px solid var(--hb-color-border-secondary);font-size:var(--hb-font-size-sm);font-weight:600;padding:var(--hb-spacing-xs)var(--hb-spacing-md)}.hb-popover__body{color:var(--hb-color-text);font-size:var(--hb-font-size-sm);padding:var(--hb-spacing-sm)var(--hb-spacing-md)}@keyframes hb-popover-fade{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(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(t){e(this,t)}get el(){return t(this)}title="";width="240px";placement="bottom";trigger="hover";disabled=false;visible=false;popupStyle={};triggerRef;popupRef;show=()=>{if(!this.disabled){this.visible=true;requestAnimationFrame((()=>this.updatePosition()))}};hide=()=>{this.visible=false};toggle=()=>{if(this.visible){this.hide()}else{this.show()}};handleKeydown=e=>{if(this.disabled)return;if(e.key==="Escape"&&this.visible){e.preventDefault();this.hide();return}if(this.trigger==="click"&&r(e.key)){e.preventDefault();this.toggle()}};updatePosition(){if(!this.triggerRef||!this.popupRef)return;const e=this.triggerRef.getBoundingClientRect();const{width:t,height:i}=this.popupRef.getBoundingClientRect();const r=o(e,t,i,this.placement,8);this.popupStyle={top:`${r.top}px`,left:`${r.left}px`,zIndex:String(a())}}render(){const e=this.trigger==="hover"?{onMouseEnter:this.show,onMouseLeave:this.hide}:{onClick:this.toggle};return i("div",{key:"8085a1ce5c74415b6a54b30edb12cd894b6d6407",class:"hb-popover",...e,onKeyDown:this.handleKeydown},i("div",{key:"ca51e0624265da38c99ec4f035776429616a4444",ref:e=>{this.triggerRef=e},class:"hb-popover__trigger",role:"button",tabindex:this.disabled?-1:0,"aria-haspopup":"dialog","aria-expanded":this.visible?"true":"false","aria-disabled":this.disabled?"true":"false",onFocus:this.trigger==="hover"?this.show:undefined,onBlur:this.trigger==="hover"?this.hide:undefined},i("slot",{key:"b2717c611c8f73c54e2463724c9b76bef24d5a88"})),this.visible&&i("div",{key:"13cc85f0c1a2b52c59afa6c9d90f3b70a7b4dbd9",ref:e=>{this.popupRef=e},class:"hb-popover__popup",style:{...this.popupStyle,width:this.width},role:"dialog","aria-labelledby":this.title?"hb-popover__title":undefined,onMouseEnter:()=>this.trigger==="hover"&&this.show(),onMouseLeave:()=>this.trigger==="hover"&&this.hide()},this.title&&i("div",{key:"e89dc3689137445d896cccd3a50a2ab9fa34d677",id:"hb-popover__title",class:"hb-popover__title"},this.title),i("div",{key:"27ab058045cd181074e3436a58ce234d23a648dc",class:"hb-popover__body"},i("slot",{key:"1fc7515e13a753f34d390c10dc8b87d376705a20",name:"content"}))))}};l.style=s;export{l as hb_popover};
|
|
2
|
-
//# sourceMappingURL=p-54aa2fd8.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["popoverCss","HbPopoverStyle0","Popover","title","width","placement","trigger","disabled","visible","popupStyle","triggerRef","popupRef","show","this","requestAnimationFrame","updatePosition","hide","toggle","handleKeydown","e","key","preventDefault","isActivationKey","rect","getBoundingClientRect","pw","height","ph","pos","computePosition","top","left","zIndex","String","getNextZIndex","render","events","onMouseEnter","onMouseLeave","onClick","h","class","onKeyDown","ref","el","role","tabindex","onFocus","undefined","onBlur","style","id","name"],"sources":["src/components/Popover/popover.css?tag=hb-popover&encapsulation=shadow","src/components/Popover/Popover.tsx"],"sourcesContent":[":host { display: inline-block; }\n.hb-popover__trigger { display: inline-block; }\n.hb-popover__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-sm) 0; animation: hb-popover-fade 0.15s ease-out; pointer-events: auto;\n}\n.hb-popover__title { padding: var(--hb-spacing-xs) var(--hb-spacing-md); font-weight: 600; font-size: var(--hb-font-size-sm); border-bottom: 1px solid var(--hb-color-border-secondary); }\n.hb-popover__body { padding: var(--hb-spacing-sm) var(--hb-spacing-md); font-size: var(--hb-font-size-sm); color: var(--hb-color-text); }\n@keyframes hb-popover-fade { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(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 * Popover 气泡卡片\n * 无障碍(对齐 antd / WAI-ARIA):\n * - 触发器 role=button + aria-haspopup=dialog + aria-expanded\n * - 浮层 role=dialog + aria-labelledby(title)\n * - 键盘:trigger 上 Enter/Space 打开/关闭;Esc 关闭\n */\n@Component({ tag: 'hb-popover', styleUrl: 'popover.css', shadow: true })\nexport class Popover {\n @Element() el: HTMLElement;\n // 注意:使用默认值使其成为 required string,避免与 HTMLElement.title(string)\n // 的可选类型冲突;同时保留 Ant Design 兼容的 `title` API。\n @Prop() title: string = '';\n @Prop() width: string = '240px';\n @Prop() placement: Placement = 'bottom';\n @Prop() trigger: 'hover' | 'click' = 'hover';\n @Prop() disabled: boolean = false;\n @State() visible: boolean = false;\n @State() popupStyle: Record<string, string> = {};\n\n private triggerRef?: HTMLElement;\n private popupRef?: HTMLDivElement;\n\n private show = () => { if (!this.disabled) { this.visible = true; requestAnimationFrame(() => this.updatePosition()); } };\n private hide = () => { this.visible = false; };\n private toggle = () => {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n /** 触发器键盘:Enter/Space 切换;Esc 关闭(click 触发模式) */\n private handleKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (e.key === 'Escape' && this.visible) {\n e.preventDefault();\n this.hide();\n return;\n }\n // click 触发模式才允许键盘打开;hover 模式 focus 时已由 onFocus 展开\n if (this.trigger === 'click' && isActivationKey(e.key)) {\n e.preventDefault();\n this.toggle();\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 render() {\n const events = this.trigger === 'hover'\n ? { onMouseEnter: this.show, onMouseLeave: this.hide }\n : { onClick: this.toggle };\n\n return (\n <div\n class=\"hb-popover\"\n {...events}\n onKeyDown={this.handleKeydown}\n >\n <div\n ref={(el: any) => { this.triggerRef = el; }}\n class=\"hb-popover__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 // hover 触发模式:focus 也展开(键盘用户可见)\n onFocus={this.trigger === 'hover' ? this.show : undefined}\n onBlur={this.trigger === 'hover' ? this.hide : undefined}\n >\n <slot />\n </div>\n {this.visible && (\n <div\n ref={(el: any) => { this.popupRef = el; }}\n class=\"hb-popover__popup\"\n style={{ ...this.popupStyle, width: this.width }}\n role=\"dialog\"\n aria-labelledby={this.title ? 'hb-popover__title' : undefined}\n onMouseEnter={() => this.trigger === 'hover' && this.show()}\n onMouseLeave={() => this.trigger === 'hover' && this.hide()}\n >\n {this.title && <div id=\"hb-popover__title\" class=\"hb-popover__title\">{this.title}</div>}\n <div class=\"hb-popover__body\"><slot name=\"content\" /></div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"iIAAA,MAAMA,EAAa,+vMACnB,MAAAC,EAAeD,E,MCWFE,EAAO,M,iDAIVC,MAAgB,GAChBC,MAAgB,QAChBC,UAAuB,SACvBC,QAA6B,QAC7BC,SAAoB,MACnBC,QAAmB,MACnBC,WAAqC,GAEtCC,WACAC,SAEAC,KAAO,KAAQ,IAAKC,KAAKN,SAAU,CAAEM,KAAKL,QAAU,KAAMM,uBAAsB,IAAMD,KAAKE,kB,GAC3FC,KAAO,KAAQH,KAAKL,QAAU,KAAK,EACnCS,OAAS,KACf,GAAIJ,KAAKL,QAAS,CAChBK,KAAKG,M,KACA,CACLH,KAAKD,M,GAKDM,cAAiBC,IACvB,GAAIN,KAAKN,SAAU,OACnB,GAAIY,EAAEC,MAAQ,UAAYP,KAAKL,QAAS,CACtCW,EAAEE,iBACFR,KAAKG,OACL,M,CAGF,GAAIH,KAAKP,UAAY,SAAWgB,EAAgBH,EAAEC,KAAM,CACtDD,EAAEE,iBACFR,KAAKI,Q,GAID,cAAAF,GACN,IAAKF,KAAKH,aAAeG,KAAKF,SAAU,OACxC,MAAMY,EAAOV,KAAKH,WAAWc,wBAC7B,MAAQpB,MAAOqB,EAAIC,OAAQC,GAAOd,KAAKF,SAASa,wBAChD,MAAMI,EAAMC,EAAgBN,EAAME,EAAIE,EAAId,KAAKR,UAAW,GAC1DQ,KAAKJ,WAAa,CAAEqB,IAAK,GAAGF,EAAIE,QAASC,KAAM,GAAGH,EAAIG,SAAUC,OAAQC,OAAOC,K,CAGjF,MAAAC,GACE,MAAMC,EAASvB,KAAKP,UAAY,QAC5B,CAAE+B,aAAcxB,KAAKD,KAAM0B,aAAczB,KAAKG,MAC9C,CAAEuB,QAAS1B,KAAKI,QAEpB,OACEuB,EAAA,OAAApB,IAAA,2CACEqB,MAAM,gBACFL,EACJM,UAAW7B,KAAKK,eAEhBsB,EAAA,OAAApB,IAAA,2CACEuB,IAAMC,IAAc/B,KAAKH,WAAakC,CAAE,EACxCH,MAAM,sBACNI,KAAK,SACLC,SAAUjC,KAAKN,UAAY,EAAI,EAAC,gBAClB,SAAQ,gBACPM,KAAKL,QAAU,OAAS,QAAO,gBAC/BK,KAAKN,SAAW,OAAS,QAExCwC,QAASlC,KAAKP,UAAY,QAAUO,KAAKD,KAAOoC,UAChDC,OAAQpC,KAAKP,UAAY,QAAUO,KAAKG,KAAOgC,WAE/CR,EAAA,QAAApB,IAAA,8CAEDP,KAAKL,SACJgC,EAAA,OAAApB,IAAA,2CACEuB,IAAMC,IAAc/B,KAAKF,SAAWiC,CAAE,EACtCH,MAAM,oBACNS,MAAO,IAAKrC,KAAKJ,WAAYL,MAAOS,KAAKT,OACzCyC,KAAK,SAAQ,kBACIhC,KAAKV,MAAQ,oBAAsB6C,UACpDX,aAAc,IAAMxB,KAAKP,UAAY,SAAWO,KAAKD,OACrD0B,aAAc,IAAMzB,KAAKP,UAAY,SAAWO,KAAKG,QAEpDH,KAAKV,OAASqC,EAAA,OAAApB,IAAA,2CAAK+B,GAAG,oBAAoBV,MAAM,qBAAqB5B,KAAKV,OAC3EqC,EAAA,OAAApB,IAAA,2CAAKqB,MAAM,oBAAmBD,EAAA,QAAApB,IAAA,2CAAMgC,KAAK,c","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["timeSelectCss","HbTimeSelectStyle0","TimeSelect","modelValue","placeholder","disabled","size","clearable","start","end","step","minTime","maxTime","isOpen","inputValue","hbChange","componentDidLoad","this","updateInputValue","document","addEventListener","handleDocumentClick","disconnectedCallback","removeEventListener","e","target","el","contains","handleValueChange","generateTimeOptions","options","startHour","startMinute","split","map","Number","endHour","endMinute","startMinutes","endMinutes","minutes","hour","Math","floor","minute","timeStr","String","padStart","push","handleInputClick","handleClear","stopPropagation","undefined","emit","handleSelect","time","render","timeOptions","showClear","h","key","class","onClick","type","value","readonly"],"sources":["src/components/TimeSelect/time-select.css?tag=hb-time-select&encapsulation=shadow","src/components/TimeSelect/TimeSelect.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --hb-time-select-font-size: 14px;\n --hb-time-select-height: 32px;\n --hb-time-select-border-color: var(--hb-border-color, #dcdfe6);\n --hb-time-select-border-color-hover: var(--hb-color-primary);\n --hb-time-select-bg-color: var(--hb-color-white, #ffffff);\n}\n\n.hb-time-select {\n display: inline-block;\n position: relative;\n width: 200px;\n}\n\n.hb-time-select__input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n cursor: pointer;\n}\n\n.hb-time-select__input {\n display: inline-block;\n width: 100%;\n height: var(--hb-time-select-height);\n line-height: var(--hb-time-select-height);\n padding: 0 30px 0 15px;\n font-size: var(--hb-time-select-font-size);\n color: var(--hb-color-text-regular, #606266);\n background-color: var(--hb-time-select-bg-color);\n border: 1px solid var(--hb-time-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-time-select__input:hover:not(:disabled) {\n border-color: var(--hb-time-select-border-color-hover);\n}\n\n.hb-time-select__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-select__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-select__arrow {\n font-size: 12px;\n transition: transform 0.3s;\n}\n\n.hb-time-select--open .hb-time-select__arrow {\n transform: rotate(180deg);\n}\n\n.hb-time-select__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-time-select-bg-color);\n border: 1px solid var(--hb-time-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-time-select__menu {\n margin: 0;\n padding: 6px 0;\n list-style: none;\n}\n\n.hb-time-select__menu-item {\n padding: 8px 20px;\n font-size: var(--hb-time-select-font-size);\n color: var(--hb-color-text-regular, #606266);\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.hb-time-select__menu-item:hover {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-time-select__menu-item--selected {\n color: var(--hb-color-primary);\n font-weight: 600;\n background-color: var(--hb-color-primary-light-9, #ecf5ff);\n}\n\n.hb-time-select--small {\n width: 180px;\n}\n\n.hb-time-select--small .hb-time-select__input {\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n}\n\n.hb-time-select--large {\n width: 220px;\n}\n\n.hb-time-select--large .hb-time-select__input {\n height: 40px;\n line-height: 40px;\n font-size: 16px;\n}\n\n.hb-time-select--disabled {\n cursor: not-allowed;\n}\n\n.hb-time-select--disabled .hb-time-select__input {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-time-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';\n\n/**\n * TimeSelect 时间选择组件\n * 可用于时间选择\n */\n@Component({\n tag: 'hb-time-select',\n styleUrl: 'time-select.css',\n shadow: true,\n})\nexport class TimeSelect {\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 '09:00'\n */\n @Prop() start: string = '09:00';\n\n /**\n * 结束时间\n * @default '18:00'\n */\n @Prop() end: string = '18:00';\n\n /**\n * 间隔时间\n * @default 60\n */\n @Prop() step: number = 60;\n\n /**\n * 最小时间\n */\n @Prop() minTime?: string;\n\n /**\n * 最大时间\n */\n @Prop() maxTime?: string;\n\n @State() isOpen: boolean = false;\n @State() inputValue: string = '';\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n componentDidLoad() {\n this.updateInputValue();\n document.addEventListener('click', this.handleDocumentClick);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleDocumentClick);\n }\n\n private handleDocumentClick = (e: MouseEvent) => {\n if (!this.isOpen) return;\n const target = e.target as HTMLElement;\n if (!this.el.contains(target)) {\n this.isOpen = false;\n }\n };\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateInputValue();\n }\n\n private updateInputValue() {\n this.inputValue = this.modelValue || '';\n }\n\n private generateTimeOptions(): string[] {\n const options: string[] = [];\n const [startHour, startMinute] = this.start.split(':').map(Number);\n const [endHour, endMinute] = this.end.split(':').map(Number);\n \n const startMinutes = startHour * 60 + startMinute;\n const endMinutes = endHour * 60 + endMinute;\n \n for (let minutes = startMinutes; minutes <= endMinutes; minutes += this.step) {\n const hour = Math.floor(minutes / 60);\n const minute = minutes % 60;\n const timeStr = `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;\n \n if (this.minTime && timeStr < this.minTime) continue;\n if (this.maxTime && timeStr > this.maxTime) continue;\n \n options.push(timeStr);\n }\n \n return options;\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 handleSelect = (time: string) => {\n this.modelValue = time;\n this.inputValue = time;\n this.isOpen = false;\n this.hbChange.emit(time);\n };\n\n render() {\n const timeOptions = this.generateTimeOptions();\n const showClear = this.clearable && this.modelValue;\n\n return (\n <div\n class={{\n 'hb-time-select': true,\n 'hb-time-select--open': this.isOpen,\n 'hb-time-select--disabled': this.disabled,\n [`hb-time-select--${this.size}`]: true,\n }}\n >\n <div class=\"hb-time-select__input-wrapper\" onClick={this.handleInputClick}>\n <input\n type=\"text\"\n class=\"hb-time-select__input\"\n placeholder={this.placeholder}\n value={this.inputValue}\n disabled={this.disabled}\n readonly\n />\n <span class=\"hb-time-select__suffix\">\n {showClear && (\n <span class=\"hb-time-select__clear\" onClick={this.handleClear}>\n ×\n </span>\n )}\n <span class=\"hb-time-select__arrow\">▼</span>\n </span>\n </div>\n {this.isOpen && (\n <div class=\"hb-time-select__dropdown\">\n <ul class=\"hb-time-select__menu\">\n {timeOptions.map((time) => (\n <li\n class={{\n 'hb-time-select__menu-item': true,\n 'hb-time-select__menu-item--selected': time === this.modelValue,\n }}\n onClick={() => this.handleSelect(time)}\n >\n {time}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["switchCss","HbSwitchStyle0","Switch","modelValue","disabled","activeText","inactiveText","activeColor","inactiveColor","activeValue","inactiveValue","width","inlinePrompt","hbChange","handleChange","e","this","preventDefault","checked","target","value","emit","render","isChecked","hasText","h","key","class","style","type","role","onChange","undefined"],"sources":["src/components/Switch/switch.css?tag=hb-switch&encapsulation=shadow","src/components/Switch/Switch.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --hb-switch-width: 40px;\n --hb-switch-active-color: var(--hb-color-primary);\n --hb-switch-inactive-color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-switch {\n display: inline-flex;\n align-items: center;\n position: relative;\n font-size: 14px;\n line-height: 20px;\n height: 20px;\n vertical-align: middle;\n cursor: pointer;\n}\n\n.hb-switch__original {\n opacity: 0;\n width: 0;\n height: 0;\n margin: 0;\n position: absolute;\n}\n\n.hb-switch__core {\n margin: 0;\n display: inline-block;\n position: relative;\n width: var(--hb-switch-width);\n height: 20px;\n border: 1px solid var(--hb-switch-inactive-color);\n outline: none;\n border-radius: 10px;\n box-sizing: border-box;\n background: var(--hb-switch-inactive-color);\n cursor: pointer;\n transition: border-color 0.3s, background-color 0.3s;\n vertical-align: middle;\n}\n\n.hb-switch__core::after {\n content: '';\n position: absolute;\n top: 1px;\n left: 1px;\n border-radius: 100%;\n transition: all 0.3s;\n width: 16px;\n height: 16px;\n background-color: var(--hb-color-white, #ffffff);\n}\n\n.hb-switch--checked .hb-switch__core {\n border-color: var(--hb-switch-active-color);\n background-color: var(--hb-switch-active-color);\n}\n\n.hb-switch--checked .hb-switch__core::after {\n left: 100%;\n margin-left: -17px;\n}\n\n.hb-switch__inner {\n position: absolute;\n left: 23px;\n font-size: 12px;\n color: var(--hb-color-white, #ffffff);\n transition: all 0.3s;\n}\n\n.hb-switch--checked .hb-switch__inner {\n left: 5px;\n}\n\n.hb-switch--disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.hb-switch--disabled .hb-switch__core {\n cursor: not-allowed;\n}\n\n\n/* ---- inlinePrompt:文字塞进圆点两侧 ---- */\n.hb-switch--inline-prompt .hb-switch__inner--inline {\n left: 0;\n right: 0;\n display: flex;\n height: 100%;\n align-items: center;\n font-size: 12px;\n color: #fff;\n pointer-events: none;\n}\n\n.hb-switch__inner-text {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n/* 关闭态:左侧(inactive)显示,圆点在右 */\n.hb-switch:not(.hb-switch--checked) .hb-switch__inner-text--inactive {\n opacity: 1;\n padding-left: 6px;\n padding-right: 22px;\n justify-content: flex-start;\n}\n\n.hb-switch:not(.hb-switch--checked) .hb-switch__inner-text--active {\n display: none;\n}\n\n/* 打开态:右侧(active)显示,圆点在左 */\n.hb-switch--checked .hb-switch__inner-text--active {\n opacity: 1;\n padding-left: 22px;\n padding-right: 6px;\n justify-content: flex-end;\n}\n\n.hb-switch--checked .hb-switch__inner-text--inactive {\n display: none;\n}\n","import { Component, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Switch 开关组件\n * 表示两种相互对立的状态间的切换,多用于触发「开/关」\n */\n@Component({\n tag: 'hb-switch',\n styleUrl: 'switch.css',\n shadow: true,\n})\nexport class Switch {\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue: boolean = false;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否显示文字描述\n * @default false\n */\n @Prop() activeText?: string;\n\n /**\n * 关闭时的文字描述\n */\n @Prop() inactiveText?: string;\n\n /**\n * 打开时的背景色\n */\n @Prop() activeColor?: string;\n\n /**\n * 关闭时的背景色\n */\n @Prop() inactiveColor?: string;\n\n /**\n * 打开时的值\n * @default true\n */\n @Prop() activeValue: boolean | string | number = true;\n\n /**\n * 关闭时的值\n * @default false\n */\n @Prop() inactiveValue: boolean | string | number = false;\n\n /**\n * 宽度\n */\n @Prop() width?: number;\n\n /**\n * 是否内联提示\n * @default false\n */\n @Prop() inlinePrompt: boolean = false;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<boolean | string | number>;\n\n private handleChange = (e: Event) => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n\n const checked = (e.target as HTMLInputElement).checked;\n const value = checked ? this.activeValue : this.inactiveValue;\n \n this.modelValue = checked;\n this.hbChange.emit(value);\n };\n\n render() {\n const isChecked = this.modelValue === this.activeValue;\n // 宽度:inlinePrompt 与 text 模式都加宽;inlinePrompt 文字塞进圆点两侧,仍需更宽一些\n const hasText = !!(this.activeText || this.inactiveText);\n const width = this.width || (hasText ? (this.inlinePrompt ? 50 : 60) : 40);\n\n return (\n <label\n class={{\n 'hb-switch': true,\n 'hb-switch--checked': isChecked,\n 'hb-switch--disabled': this.disabled,\n 'hb-switch--inline-prompt': this.inlinePrompt && hasText,\n }}\n style={{\n '--hb-switch-width': `${width}px`,\n '--hb-switch-active-color': this.activeColor || 'var(--hb-color-primary)',\n '--hb-switch-inactive-color': this.inactiveColor || 'var(--hb-color-text-placeholder, #c0c4cc)',\n }}\n >\n <input\n type=\"checkbox\"\n class=\"hb-switch__original\"\n role=\"switch\"\n aria-checked={isChecked ? 'true' : 'false'}\n checked={isChecked}\n disabled={this.disabled}\n onChange={this.handleChange}\n aria-label={this.activeText || this.inactiveText || undefined}\n />\n <span class=\"hb-switch__core\">\n {hasText && !this.inlinePrompt && (\n <span class=\"hb-switch__inner\">\n {isChecked ? this.activeText : this.inactiveText}\n </span>\n )}\n {hasText && this.inlinePrompt && (\n // 内联提示:开/关文字塞进圆点两侧,随切换显隐\n <span class=\"hb-switch__inner hb-switch__inner--inline\">\n <span class=\"hb-switch__inner-text hb-switch__inner-text--active\">{this.activeText}</span>\n <span class=\"hb-switch__inner-text hb-switch__inner-text--inactive\">{this.inactiveText}</span>\n </span>\n )}\n </span>\n </label>\n );\n }\n}\n\n"],"mappings":"kDAAA,MAAMA,EAAY,gkPAClB,MAAAC,EAAeD,E,MCUFE,EAAM,M,4DAIQC,WAAsB,MAMvCC,SAAoB,MAMpBC,WAKAC,aAKAC,YAKAC,cAMAC,YAAyC,KAMzCC,cAA2C,MAK3CC,MAMAC,aAAwB,MAKvBC,SAEDC,aAAgBC,IACtB,GAAIC,KAAKZ,SAAU,CACjBW,EAAEE,iBACF,M,CAGF,MAAMC,EAAWH,EAAEI,OAA4BD,QAC/C,MAAME,EAAQF,EAAUF,KAAKP,YAAcO,KAAKN,cAEhDM,KAAKb,WAAae,EAClBF,KAAKH,SAASQ,KAAKD,EAAM,EAG3B,MAAAE,GACE,MAAMC,EAAYP,KAAKb,aAAea,KAAKP,YAE3C,MAAMe,KAAaR,KAAKX,YAAcW,KAAKV,cAC3C,MAAMK,EAAQK,KAAKL,QAAUa,EAAWR,KAAKJ,aAAe,GAAK,GAAM,IAEvE,OACEa,EAAA,SAAAC,IAAA,2CACEC,MAAO,CACL,YAAa,KACb,qBAAsBJ,EACtB,sBAAuBP,KAAKZ,SAC5B,2BAA4BY,KAAKJ,cAAgBY,GAEnDI,MAAO,CACL,oBAAqB,GAAGjB,MACxB,2BAA4BK,KAAKT,aAAe,0BAChD,6BAA8BS,KAAKR,eAAiB,8CAGtDiB,EAAA,SAAAC,IAAA,2CACEG,KAAK,WACLF,MAAM,sBACNG,KAAK,SAAQ,eACCP,EAAY,OAAS,QACnCL,QAASK,EACTnB,SAAUY,KAAKZ,SACf2B,SAAUf,KAAKF,aAAY,aACfE,KAAKX,YAAcW,KAAKV,cAAgB0B,YAEtDP,EAAA,QAAAC,IAAA,2CAAMC,MAAM,mBACTH,IAAYR,KAAKJ,cAChBa,EAAA,QAAAC,IAAA,2CAAMC,MAAM,oBACTJ,EAAYP,KAAKX,WAAaW,KAAKV,cAGvCkB,GAAWR,KAAKJ,cAEfa,EAAA,QAAAC,IAAA,2CAAMC,MAAM,6CACVF,EAAA,QAAAC,IAAA,2CAAMC,MAAM,uDAAuDX,KAAKX,YACxEoB,EAAA,QAAAC,IAAA,2CAAMC,MAAM,yDAAyDX,KAAKV,gB","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,g as a,h as r}from"./p-e42dfa95.js";import{c as i}from"./p-4ef5a884.js";const s='/*! 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-cascader-font-size:14px;--hb-cascader-font-size-large:16px;--hb-cascader-font-size-small:12px;--hb-cascader-border-color:var(--hb-border-color,#dcdfe6);--hb-cascader-border-color-hover:var(--hb-color-primary);--hb-cascader-bg-color:var(--hb-color-white,#fff);--hb-cascader-text-color:var(--hb-color-text-regular,#606266);--hb-cascader-placeholder-color:var(--hb-color-text-placeholder,#c0c4cc);--hb-cascader-disabled-color:var(--hb-color-text-disabled,#c0c4cc);--hb-cascader-disabled-bg-color:var(--hb-fill-color-light,#f5f7fa);display:inline-block;position:relative}.hb-cascader{display:inline-block;font-size:var(--hb-cascader-font-size);line-height:32px;position:relative}.hb-cascader__input-wrapper{cursor:pointer;display:inline-block;position:relative;width:100%}.hb-cascader__input{background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-cascader-text-color);cursor:pointer;display:inline-block;font-size:var(--hb-cascader-font-size);height:32px;line-height:32px;outline:none;padding:0 30px 0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.hb-cascader__input::placeholder{color:var(--hb-cascader-placeholder-color)}.hb-cascader__input:focus,.hb-cascader__input:hover:not(:disabled){border-color:var(--hb-cascader-border-color-hover)}.hb-cascader__input:disabled{background-color:var(--hb-cascader-disabled-bg-color);border-color:var(--hb-cascader-border-color);color:var(--hb-cascader-disabled-color);cursor:not-allowed}.hb-cascader__suffix{align-items:center;color:var(--hb-cascader-text-color);display:flex;position:absolute;right:8px;top:50%;transform:translateY(-50%)}.hb-cascader__clear{align-items:center;color:var(--hb-cascader-placeholder-color);cursor:pointer;display:inline-flex;height:14px;justify-content:center;margin-right:8px;transition:color .2s;width:14px}.hb-cascader__clear svg{height:100%;width:100%}.hb-cascader__clear:hover{color:var(--hb-cascader-text-color)}.hb-cascader__arrow{align-items:center;color:var(--hb-cascader-placeholder-color);display:inline-flex;height:12px;transition:transform .3s;width:12px}.hb-cascader__arrow svg{height:100%;width:100%}.hb-cascader--open .hb-cascader__arrow{transform:rotate(180deg)}.hb-cascader__dropdown{background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-shadow:0 2px 12px #0000001a;left:0;margin-top:4px;max-height:300px;min-width:180px;overflow-y:auto;position:absolute;top:100%;width:max-content;z-index:1000}.hb-cascader__menus{display:flex;padding:6px 0}.hb-cascader__menu-list{list-style:none;margin:0;max-height:300px;min-width:180px;overflow-y:auto;padding:0}.hb-cascader__menus .hb-cascader__menu-list:not(:last-child){border-right:1px solid var(--hb-border-color-secondary,var(--hb-cascader-border-color))}.hb-cascader__menu-item{align-items:center;color:var(--hb-cascader-text-color);cursor:pointer;display:flex;font-size:var(--hb-cascader-font-size);justify-content:space-between;padding:8px 20px;transition:background-color .2s}.hb-cascader__menu-item:hover:not(.hb-cascader__menu-item--disabled){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-cascader__menu-item--selected{color:var(--hb-color-primary);font-weight:600}.hb-cascader__menu-item--disabled{color:var(--hb-cascader-disabled-color);cursor:not-allowed}.hb-cascader__menu-item-label{flex:1}.hb-cascader__menu-item-arrow{align-items:center;color:var(--hb-cascader-placeholder-color);display:inline-flex;height:12px;margin-left:8px;width:12px}.hb-cascader__menu-item-arrow svg{height:100%;width:100%}.hb-cascader__menu-item-loading{align-items:center;color:var(--hb-color-primary,#1677ff);display:inline-flex;height:12px;margin-left:8px;width:12px}.hb-cascader__menu-item-loading-svg{animation:hb-cascader-spin .8s linear infinite;height:100%;width:100%}.hb-cascader__menu-list--loading .hb-cascader__menu-item--loading{color:var(--hb-color-text-placeholder,#c0c4cc);justify-content:center}@keyframes hb-cascader-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.hb-cascader--large,.hb-cascader--large .hb-cascader__input{font-size:var(--hb-cascader-font-size-large);line-height:40px}.hb-cascader--large .hb-cascader__input{height:40px}.hb-cascader--small,.hb-cascader--small .hb-cascader__input{font-size:var(--hb-cascader-font-size-small);line-height:24px}.hb-cascader--small .hb-cascader__input{height:24px;padding:0 25px 0 12px}.hb-cascader--disabled{cursor:not-allowed}.hb-cascader__search{border-bottom:1px solid var(--hb-cascader-border-color);padding:8px}.hb-cascader__search-input{background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-cascader-text-color);cursor:text;font-size:var(--hb-cascader-font-size);height:28px;line-height:28px;outline:none;padding:0 8px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.hb-cascader__search-input:focus{border-color:var(--hb-cascader-border-color-hover)}.hb-cascader__search-results{max-height:264px;min-width:180px;overflow-y:auto;padding:6px 0}.hb-cascader__search-item{color:var(--hb-cascader-text-color);cursor:pointer;font-size:var(--hb-cascader-font-size);padding:8px 20px;transition:background-color .2s;white-space:nowrap}.hb-cascader__search-item:hover:not(.hb-cascader__search-item--disabled){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-cascader__search-item--selected{color:var(--hb-color-primary);font-weight:600}.hb-cascader__search-item--disabled{color:var(--hb-cascader-disabled-color);cursor:not-allowed}.hb-cascader__search-empty{color:var(--hb-cascader-placeholder-color);font-size:var(--hb-cascader-font-size);padding:16px 0;text-align:center}.hb-cascader--multiple .hb-cascader__input-wrapper{align-items:center;background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:4px;box-sizing:border-box;display:flex;flex-wrap:wrap;min-height:32px;padding:3px 30px 3px 4px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.hb-cascader--multiple .hb-cascader__input-wrapper:hover{border-color:var(--hb-cascader-border-color-hover)}.hb-cascader--multiple .hb-cascader__input{background-color:#0000;border:none;flex:1;height:24px;line-height:24px;min-width:40px;padding:0 4px;width:auto}.hb-cascader__tag{align-items:center;background-color:var(--hb-fill-color,#f0f2f5);border-radius:3px;color:var(--hb-color-text-primary,#303133);display:inline-flex;font-size:var(--hb-cascader-font-size-small);height:22px;margin:2px;max-width:100%;padding:0 6px}.hb-cascader__tag-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hb-cascader__tag-close{align-items:center;color:var(--hb-cascader-placeholder-color);cursor:pointer;display:inline-flex;height:12px;justify-content:center;line-height:1;margin-left:4px;transition:color .2s;width:12px}.hb-cascader__tag-close svg{height:100%;width:100%}.hb-cascader__tag-close:hover{color:var(--hb-color-text-primary,#606266)}.hb-cascader__tag-overflow{align-items:center;color:var(--hb-cascader-text-color);display:inline-flex;font-size:var(--hb-cascader-font-size-small);height:22px;margin:2px;padding:0 6px}.hb-cascader__menu-item-checkbox{align-items:center;background-color:var(--hb-cascader-bg-color);border:1px solid var(--hb-cascader-border-color);border-radius:2px;display:inline-flex;flex-shrink:0;height:14px;justify-content:center;margin-right:8px;transition:background-color .2s,border-color .2s;width:14px}.hb-cascader__menu-item-checkbox--checked,.hb-cascader__menu-item-checkbox--indeterminate{background-color:var(--hb-color-primary);border-color:var(--hb-color-primary)}.hb-cascader__menu-item-checkbox--checked:after{border:2px solid #fff;border-left:0;border-top:0;content:"";height:8px;transform:rotate(45deg)translate(-1px,-1px);width:4px}.hb-cascader__menu-item-checkbox--indeterminate:after{background-color:#fff;content:"";height:2px;width:8px}@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 o=s;const c=class{constructor(a){e(this,a);this.hbChange=t(this,"hbChange",7);this.hbExpandChange=t(this,"hbExpandChange",7)}get el(){return a(this)}modelValue;options=[];placeholder="请选择";disabled=false;size="default";clearable=false;showAllLevels=true;name;inputId;separator=" / ";emitPath=true;filterable=false;lazy=false;load;multiple=false;checkStrictly=false;maxTagCount;isOpen=false;inputValue="";searchValue="";loadingKeys=new Set;filteredPaths=[];activePath=[];hbChange;hbExpandChange;clickOutside=i({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.closeAndClearSearch()}});componentDidLoad(){this.clickOutside=i({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.closeAndClearSearch()}});this.clickOutside.connect();this.updateInputValue()}closeAndClearSearch(){this.isOpen=false;this.searchValue="";this.filteredPaths=[]}disconnectedCallback(){this.clickOutside.disconnect()}handleValueChange(){this.updateInputValue()}updateInputValue(){if(this.multiple){this.inputValue="";return}if(!this.modelValue||this.modelValue.length===0){this.inputValue="";return}const e=this.modelValue;if(!this.showAllLevels){const t=e[e.length-1];const a=this.findOptionByValue(this.options,t);this.inputValue=a?a.label:"";return}const t=[];let a=this.options;for(const r of e){const e=a.find((e=>e.value===r));if(e){t.push(e.label);a=e.children||[]}else{break}}this.inputValue=t.join(this.separator)}findOptionByValue(e,t){for(const a of e){if(a.value===t)return a;if(a.children){const e=this.findOptionByValue(a.children,t);if(e)return e}}return null}getMultiModel(){if(!this.multiple)return[];const e=this.modelValue;if(Array.isArray(e)&&e.length>0&&Array.isArray(e[0]))return e;return[]}pathEquals(e,t){if(!e||e.length!==t.length)return false;return e.every(((e,a)=>e===t[a]))}collectLeafValuePaths(e,t){const a=[...t,e.value];const r=e.children&&e.children.length>0;if(!r||e.leaf)return[a];const i=[];for(const t of e.children){i.push(...this.collectLeafValuePaths(t,a))}return i}getCheckState(e,t){const a=[...t,e.value];const r=this.getMultiModel();if(this.checkStrictly){return r.some((e=>this.pathEquals(e,a)))?"checked":"unchecked"}const i=this.collectLeafValuePaths(e,t);if(i.every((e=>r.some((t=>this.pathEquals(t,e))))))return"checked";if(i.some((e=>r.some((t=>this.pathEquals(t,e))))))return"indeterminate";return"unchecked"}handleCheck(e,t){let a=this.getMultiModel().map((e=>[...e]));const r=[...t,e.value];if(this.checkStrictly){const e=a.findIndex((e=>this.pathEquals(e,r)));if(e>=0)a.splice(e,1);else a.push(r)}else{const r=this.collectLeafValuePaths(e,t);const i=r.every((e=>a.some((t=>this.pathEquals(t,e)))));if(i){a=a.filter((e=>!r.some((t=>this.pathEquals(t,e)))))}else{for(const e of r){if(!a.some((t=>this.pathEquals(t,e))))a.push([...e])}}}this.modelValue=a;this.hbChange.emit(a)}getDisplayTags(){return this.getMultiModel().map((e=>{const t=e.map((e=>{const t=this.findOptionByValue(this.options,e);return t?t.label:String(e)}));const a=this.showAllLevels?t.join(this.separator):t[t.length-1];return{label:a,path:e}}))}handleTagRemove=(e,t)=>{t.stopPropagation();const a=this.getMultiModel().filter((t=>!this.pathEquals(t,e)));this.modelValue=a;this.hbChange.emit(a)};hasValue(){return this.multiple?this.getMultiModel().length>0:!!this.modelValue&&this.modelValue.length>0}handleInputClick=()=>{if(this.disabled)return;if(this.isOpen){this.closeAndClearSearch()}else{this.isOpen=true}};handleKeyDown=e=>{if(this.disabled)return;const t=e.key;if(!this.isOpen){if(t==="Enter"||t===" "||t==="ArrowDown"){e.preventDefault();this.isOpen=true}return}if(t==="Escape"){e.preventDefault();this.closeAndClearSearch()}else if(t==="Enter"&&this.activePath.length>0&&!this.multiple){e.preventDefault();const t=this.activePath[this.activePath.length-1];const a=this.activePath.slice(0,-1);this.handleSelect(t,a)}};handleSearchInput=e=>{const t=e.target;this.searchValue=t.value;this.filteredPaths=this.collectFilteredPaths(this.searchValue)};collectFilteredPaths(e){const t=e.trim().toLowerCase();if(!t)return[];const a=[];const r=(e,i)=>{for(const s of e){const e=[...i,s];if(s.label.toLowerCase().includes(t))a.push(e);if(s.children&&s.children.length>0)r(s.children,e)}};r(this.options,[]);return a}handleSearchSelect=e=>{const t=e.map((e=>e.value));if(this.multiple){let e=this.getMultiModel().map((e=>[...e]));const a=e.findIndex((e=>this.pathEquals(e,t)));if(a>=0)e.splice(a,1);else e.push(t);this.modelValue=e;this.hbChange.emit(e);this.searchValue="";this.filteredPaths=[];return}const a=e[e.length-1];const r=!a.children||a.children.length===0||a.leaf;this.searchValue="";this.filteredPaths=[];if(r||this.checkStrictly){this.modelValue=t;this.updateInputValue();this.hbChange.emit(t);this.isOpen=false;this.activePath=[]}else{this.activePath=t;this.hbExpandChange.emit(t)}};handleClear=e=>{e.stopPropagation();if(this.multiple){this.modelValue=[];this.hbChange.emit([])}else{this.modelValue=undefined;this.inputValue="";this.hbChange.emit(undefined)}this.isOpen=false};handleItemClick=(e,t)=>{if(this.multiple){const a=!e.children||e.children.length===0||e.leaf;if(a){this.handleCheck(e,t)}else{const a=[...t,e.value];this.activePath=a;this.hbExpandChange.emit(a)}return}this.handleSelect(e.value,t)};handleSelect(e,t){const a=[...t,e];let r=this.options;let i=null;for(const e of a){i=r.find((t=>t.value===e))||null;if(!i)break;r=i.children||[]}if(this.lazy&&this.load&&i&&i.children===undefined&&!i.leaf){this.activePath=a;this.hbExpandChange.emit(a);void this.loadChildren(i,a);return}const s=!i||!i.children||i.children.length===0||i.leaf;if(this.checkStrictly||s){this.modelValue=a;this.updateInputValue();this.hbChange.emit(a);this.isOpen=false;this.activePath=[]}else{this.activePath=a;this.hbExpandChange.emit(a)}}async loadChildren(e,t){if(!this.load)return;this.loadingKeys=new Set([...this.loadingKeys,e.value]);try{const t=await this.load(e);this.options=this.replaceOptionChildren(this.options,e.value,t)}catch(t){console.error("[hb-cascader] lazy load failed:",t);this.activePath=this.activePath.slice(0,this.activePath.indexOf(e.value)+1)}finally{const t=new Set(this.loadingKeys);t.delete(e.value);this.loadingKeys=t}}replaceOptionChildren(e,t,a){return e.map((e=>{if(e.value===t)return{...e,children:a};if(e.children&&e.children.length>0){return{...e,children:this.replaceOptionChildren(e.children,t,a)}}return e}))}render(){return r("div",{key:"1a9caab72a8d1fc2b0db2e173b4a748fc45ff276",class:{"hb-cascader":true,"hb-cascader--open":this.isOpen,"hb-cascader--disabled":this.disabled,"hb-cascader--multiple":this.multiple,[`hb-cascader--${this.size}`]:true}},r("div",{key:"7a9d75ec8c3352681630a89b4a10704b5b16803d",class:"hb-cascader__input-wrapper",onClick:this.handleInputClick},this.multiple&&this.getDisplayTags().slice(0,this.maxTagCount===undefined?undefined:this.maxTagCount).map((e=>r("span",{class:"hb-cascader__tag"},r("span",{class:"hb-cascader__tag-label"},e.label),!this.disabled&&r("span",{class:"hb-cascader__tag-close",role:"button","aria-label":"删除",tabindex:0,onClick:t=>this.handleTagRemove(e.path,t),onKeyDown:t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();this.handleTagRemove(e.path,t)}}},r("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},r("path",{d:"M6 6l12 12M18 6L6 18"})))))),this.multiple&&this.maxTagCount!==undefined&&this.getDisplayTags().length>this.maxTagCount&&r("span",{key:"9cf422ddb7983b98702921a6f0ea0d39050f0809",class:"hb-cascader__tag-overflow"},"+",this.getDisplayTags().length-this.maxTagCount),r("input",{key:"e7d65af511b4cbd1ceb04e1a5d3b5c49675f35d7",type:"text",id:this.inputId,name:this.name,class:"hb-cascader__input",placeholder:this.hasValue()?"":this.placeholder,value:this.multiple?"":this.inputValue,disabled:this.disabled,readonly:true,role:"combobox","aria-haspopup":"listbox","aria-expanded":this.isOpen?"true":"false",onKeyDown:this.handleKeyDown}),r("span",{key:"8a12e6b4fc1f9c4e837804b6000991f9fc0a7777",class:"hb-cascader__suffix"},this.clearable&&this.hasValue()&&r("span",{key:"58f85ec90ae02f51e5feff247238a2fdf4c972cc",class:"hb-cascader__clear",role:"button","aria-label":"清空",tabindex:0,onClick:this.handleClear,onKeyDown:e=>{if(e.key==="Enter"||e.key===" "){e.preventDefault();this.handleClear(e)}}},r("svg",{key:"276124b46eab355e251f9f28b83d595a752a26a6",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},r("path",{key:"3233726965c70fe312cf6b18986a3a45daddfa94",d:"M6 6l12 12M18 6L6 18"}))),r("span",{key:"5da5ecd851b2ae748d64a637c67c85c017e4044f",class:"hb-cascader__arrow","aria-hidden":"true"},r("svg",{key:"259fa6408e33a8566c3cd4b2c555594f277c0158",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},r("path",{key:"2ab1e510baa70268de00e17b13bc52f582927182",d:"M6 9l6 6 6-6"}))))),this.isOpen&&r("div",{key:"bb89f5c9c8dec2bc41eed6963aab25197673dee3",class:"hb-cascader__dropdown"},this.filterable&&r("div",{key:"d8a3b255c88bf6267588eea3313814f3b37c781f",class:"hb-cascader__search"},r("input",{key:"1f9830abe864388f075b9b70a9b3c07def27aeda",type:"text",class:"hb-cascader__search-input",placeholder:"搜索",value:this.searchValue,onInput:this.handleSearchInput,"aria-label":"搜索选项"})),this.filterable&&this.searchValue.trim()!==""?this.renderSearchResults():r("div",{class:"hb-cascader__menus",role:"listbox","aria-multiselectable":this.multiple?"true":"false"},this.renderCascaderMenus())))}renderCascaderMenus(){const e=[];let t=this.options;let a=[];e.push(this.renderMenu(t,a));for(let r=0;r<this.activePath.length;r++){const i=this.activePath[r];const s=t.find((e=>e.value===i));if(!s)break;if(s.children===undefined&&this.loadingKeys.has(s.value)){e.push(this.renderLoadingMenu());break}if(s.children&&s.children.length>0){a=[...a,i];t=s.children;e.push(this.renderMenu(t,a))}else{break}}return e}renderLoadingMenu(){return r("ul",{class:"hb-cascader__menu-list hb-cascader__menu-list--loading",role:"status","aria-live":"polite"},r("li",{class:"hb-cascader__menu-item hb-cascader__menu-item--loading"},r("span",{class:"hb-cascader__menu-item-label"},"加载中…")))}renderSearchResults(){if(this.filteredPaths.length===0){return r("div",{class:"hb-cascader__search-empty",role:"status"},"无匹配数据")}return r("div",{class:"hb-cascader__search-results",role:"listbox","aria-label":"搜索结果"},this.filteredPaths.map((e=>{const t=e.map((e=>e.label)).join(this.separator);const a=e.map((e=>e.value));const i=e[e.length-1];const s=!!i.disabled;const o=this.multiple?this.getMultiModel().some((e=>this.pathEquals(e,a))):!!this.modelValue&&this.pathEquals(this.modelValue,a);return r("div",{class:{"hb-cascader__search-item":true,"hb-cascader__search-item--selected":o,"hb-cascader__search-item--disabled":s},role:"option","aria-selected":o?"true":"false","aria-disabled":s?"true":undefined,onClick:()=>!s&&this.handleSearchSelect(e)},this.multiple&&r("span",{class:"hb-cascader__menu-item-checkbox","data-state":o?"checked":"unchecked",role:"checkbox","aria-checked":o?"true":"false"}),t)})))}renderMenu(e,t){if(!e||e.length===0)return null;return r("ul",{class:"hb-cascader__menu-list",role:"group"},e.map((e=>{const a=this.getCheckState(e,t);const i=!this.multiple&&t.length>0&&!!this.modelValue&&t.every(((e,t)=>this.modelValue[t]===e))&&this.modelValue.length===t.length+1&&this.modelValue[t.length]===e.value;const s=this.loadingKeys.has(e.value)?false:e.children&&e.children.length>0||this.lazy&&e.children===undefined&&!e.leaf;return r("li",{class:{"hb-cascader__menu-item":true,"hb-cascader__menu-item--selected":i,"hb-cascader__menu-item--disabled":e.disabled},role:"option","aria-selected":i?"true":"false","aria-disabled":e.disabled?"true":undefined,onClick:()=>!e.disabled&&this.handleItemClick(e,t)},this.multiple&&r("span",{class:{"hb-cascader__menu-item-checkbox":true,"hb-cascader__menu-item-checkbox--checked":a==="checked","hb-cascader__menu-item-checkbox--indeterminate":a==="indeterminate"},"data-state":a,role:"checkbox","aria-checked":a==="indeterminate"?"mixed":a==="checked"?"true":"false",onClick:a=>{a.stopPropagation();if(!e.disabled)this.handleCheck(e,t)}}),r("span",{class:"hb-cascader__menu-item-label"},e.label),this.loadingKeys.has(e.value)?r("span",{class:"hb-cascader__menu-item-loading","aria-hidden":"true"},r("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"},r("path",{d:"M12 5V2L8 6l4 4V7a5 5 0 1 1-5 5H5a7 7 0 1 0 7-7z"}))):s?r("span",{class:"hb-cascader__menu-item-arrow","aria-hidden":"true"},r("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},r("path",{d:"M9 6l6 6-6 6"}))):null)})))}static get watchers(){return{modelValue:["handleValueChange"]}}};c.style=o;export{c as hb_cascader};
|
|
2
|
-
//# sourceMappingURL=p-639f167d.entry.js.map
|
|
@@ -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":"6FAAA,MAAMA,EAAU,k0NAChB,MAAAC,EAAeD,E,MCWFE,EAAI,M,mIAIUC,WAAqB,GAGtCC,KAAwC,OAGxCC,SAAoB,MAEnBC,UAAoB,GACpBC,KAAyC,GAGzCC,YAGAC,YAET,gBAAAC,GACEC,KAAKC,cACL,IAAKD,KAAKR,YAAcQ,KAAKJ,KAAKM,OAAS,EAAG,CAC5CF,KAAKL,UAAYK,KAAKJ,KAAK,GAAGO,IAC9BH,KAAKR,WAAaQ,KAAKL,S,KAClB,CACLK,KAAKL,UAAYK,KAAKR,U,CAExBQ,KAAKI,sB,CAIP,sBAAAC,GACEL,KAAKL,UAAYK,KAAKR,WACtBQ,KAAKI,sB,CAGC,WAAAH,GACN,MAAMK,EAAQN,KAAKO,GAAGC,iBAAiB,eACvC,MAAMZ,EAAyC,GAC/CU,EAAMG,SAASC,IACbd,EAAKe,KAAK,CACRR,IAAKO,EAAKE,aAAa,QAAU,GACjCC,MAAOH,EAAKE,aAAa,UAAY,IACrC,IAEJZ,KAAKJ,KAAOA,C,CAGN,oBAAAQ,GACN,MAAME,EAAQN,KAAKO,GAAGC,iBAAiB,eACvCF,EAAMG,SAASC,IACb,MAAMI,EAAWJ,EAAKE,aAAa,SAAWZ,KAAKL,UACnDe,EAAKK,aAAa,SAAUC,OAAOF,GAAU,G,CAIzCG,eAAkBd,IACxBH,KAAKL,UAAYQ,EACjBH,KAAKR,WAAaW,EAClBH,KAAKH,YAAYqB,KAAKf,GACtBH,KAAKI,uBACLJ,KAAKmB,eAAehB,EAAI,EAIlBiB,iBAAmB,CAACC,EAAkBC,KAE5C,MAAMC,EACJF,EAAElB,MAAQ,aAAekB,EAAElB,MAAQ,cAAgBkB,EAAElB,MAAQ,WAAakB,EAAElB,MAAQ,aACpFkB,EAAElB,MAAQ,QAAUkB,EAAElB,MAAQ,MAChC,IAAKoB,EAAS,OACdF,EAAEG,iBACF,MAAMC,EAASC,EAAmBL,EAAG,CACnCM,YAAaL,EACbM,UAAW5B,KAAKJ,KAAKM,OACrB2B,KAAM,OAER,GAAIJ,EAAOhC,OAAS,YAAcO,KAAKJ,KAAK6B,EAAOK,OAAQ,CACzD9B,KAAKiB,eAAejB,KAAKJ,KAAK6B,EAAOK,OAAO3B,I,GAIxC,cAAAgB,CAAehB,GACrB,MAAM4B,EAAM/B,KAAKJ,KAAKoC,WAAWC,GAAMA,EAAE9B,MAAQA,IACjD,GAAI4B,EAAM,EAAG,OACb,MAAMG,EAAQlC,KAAKO,GAAG4B,YAAY3B,iBAA8B,kBAChE0B,IAAQH,IAAMK,O,CAGhB,MAAAC,GACE,OACEC,EAAA,OAAAnC,IAAA,2CAAKoC,MAAO,CAAE,UAAW,KAAM,CAAC,YAAYvC,KAAKP,QAAS,OACxD6C,EAAA,OAAAnC,IAAA,2CAAKoC,MAAM,mBACTD,EAAA,OAAAnC,IAAA,2CAAKoC,MAAM,eAAeC,KAAK,WAC5BxC,KAAKJ,KAAK6C,KAAI,CAACC,EAAKZ,KACnB,MAAMa,EAAWD,EAAIvC,MAAQH,KAAKL,UAClC,MAAMiD,EAAQ,gBAAgBF,EAAIvC,MAClC,OACEmC,EAAA,OACEC,MAAO,CACL,gBAAiB,KACjB,wBAAyBI,GAE3BH,KAAK,MACLK,GAAID,EAAK,gBACMD,EAAW,OAAS,QACnCG,SAAUH,EAAW,GAAK,EAAC,gBACZ,kBAAkBD,EAAIvC,MACrC4C,QAAS,IAAM/C,KAAKiB,eAAeyB,EAAIvC,KACvC6C,UAAY3B,GAAMrB,KAAKoB,iBAAiBC,EAAGS,IAE3CQ,EAAA,QAAMC,MAAM,uBAAuBG,EAAI7B,OACtCb,KAAKN,UACJ4C,EAAA,QACEC,MAAM,sBACNC,KAAK,SAAQ,aACF,OACXS,UAAW,EACXF,QAAU1B,IACRA,EAAE6B,kBACFlD,KAAKF,YAAYoB,KAAKwB,EAAIvC,IAAI,GAC/B,KAKD,MAKdmC,EAAA,OAAAnC,IAAA,2CAAKoC,MAAM,oBACTD,EAAA,QAAAnC,IAAA,8C","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":[]}
|