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 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["formCss","HbFormStyle0","Form","model","rules","labelPosition","labelWidth","inline","size","disabled","fields","fieldRegistry","Map","componentWillLoad","this","el","addEventListener","e","prop","validate","resetValue","getValue","detail","set","async","results","Promise","all","Array","from","values","map","field","errors","length","every","Boolean","resetFields","forEach","render","h","key","class","onSubmit","preventDefault","novalidate"],"sources":["src/components/Form/form.css?tag=hb-form&encapsulation=shadow","src/components/Form/Form.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.hb-form {\n display: flex;\n flex-direction: column;\n gap: var(--hb-spacing-md);\n}\n\n.hb-form--inline {\n flex-direction: row;\n flex-wrap: wrap;\n gap: var(--hb-spacing-sm) var(--hb-spacing-lg);\n align-items: flex-start;\n}\n","import { Component, h, Prop, State, Element } from '@stencil/core';\n\ninterface FormFieldRegistration {\n prop: string;\n validate: () => Promise<string[]>;\n resetValue: () => void;\n getValue: () => any;\n}\n\n/**\n * Form 表单组件\n * 由输入框、选择器、单选框、多选框等控件组成,配合表单校验\n */\n@Component({\n tag: 'hb-form',\n styleUrl: 'form.css',\n shadow: true,\n})\nexport class Form {\n @Element() el: HTMLElement;\n\n /** 表单数据对象 */\n @Prop() model: Record<string, any> = {};\n\n /** 表单验证规则 */\n @Prop() rules: Record<string, any[]> = {};\n\n /** 标签位置 */\n @Prop() labelPosition: 'left' | 'right' | 'top' = 'right';\n\n /** 标签宽度 */\n @Prop() labelWidth: string = '80px';\n\n /** 是否行内表单 */\n @Prop() inline: boolean = false;\n\n /** 表单尺寸 */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n @State() fields: FormFieldRegistration[] = [];\n\n private fieldRegistry = new Map<string, FormFieldRegistration>();\n\n // 用 componentWillLoad 而非 componentDidLoad 注册监听器:\n // Stencil 生命周期里子组件(FormItem)的 componentDidLoad 先于父组件(Form)触发,\n // 若在 componentDidLoad 才挂监听,会错过子项派发的 hbFormFieldRegister,\n // 导致 fieldRegistry 为空、validate() 永远返回 true(真实浏览器里复现,mock-doc 被 waitForChanges 掩盖)。\n componentWillLoad() {\n this.el.addEventListener('hbFormFieldRegister', ((e: CustomEvent) => {\n const { prop, validate, resetValue, getValue } = e.detail;\n this.fieldRegistry.set(prop, { prop, validate, resetValue, getValue });\n }) as EventListener);\n }\n\n /**\n * 验证整个表单\n * @returns 是否验证通过\n */\n @Prop() validate = async (): Promise<boolean> => {\n const results = await Promise.all(\n Array.from(this.fieldRegistry.values()).map(async (field) => {\n const errors = await field.validate();\n return errors.length === 0;\n })\n );\n return results.every(Boolean);\n };\n\n /**\n * 重置表单\n */\n @Prop() resetFields = (): void => {\n this.fieldRegistry.forEach((field) => field.resetValue());\n };\n\n render() {\n return (\n <form\n class={{\n 'hb-form': true,\n [`hb-form--label-${this.labelPosition}`]: true,\n 'hb-form--inline': this.inline,\n }}\n onSubmit={(e) => e.preventDefault()}\n novalidate\n >\n <slot />\n </form>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAU,8wLAChB,MAAAC,EAAeD,E,MCiBFE,EAAI,M,iDAIPC,MAA6B,GAG7BC,MAA+B,GAG/BC,cAA0C,QAG1CC,WAAqB,OAGrBC,OAAkB,MAGlBC,KAAsC,UAGtCC,SAAoB,MAEnBC,OAAkC,GAEnCC,cAAgB,IAAIC,IAM5B,iBAAAC,GACEC,KAAKC,GAAGC,iBAAiB,uBAAyBC,IAChD,MAAMC,KAAEA,EAAIC,SAAEA,EAAQC,WAAEA,EAAUC,SAAEA,GAAaJ,EAAEK,OACnDR,KAAKH,cAAcY,IAAIL,EAAM,CAAEA,OAAMC,WAAUC,aAAYC,YAC5D,G,CAOKF,SAAWK,UACjB,MAAMC,QAAgBC,QAAQC,IAC5BC,MAAMC,KAAKf,KAAKH,cAAcmB,UAAUC,KAAIP,MAAOQ,IACjD,MAAMC,QAAeD,EAAMb,WAC3B,OAAOc,EAAOC,SAAW,CAAC,KAG9B,OAAOT,EAAQU,MAAMC,QAAQ,EAMvBC,YAAc,KACpBvB,KAAKH,cAAc2B,SAASN,GAAUA,EAAMZ,cAAa,EAG3D,MAAAmB,GACE,OACEC,EAAA,QAAAC,IAAA,2CACEC,MAAO,CACL,UAAW,KACX,CAAC,kBAAkB5B,KAAKT,iBAAkB,KAC1C,kBAAmBS,KAAKP,QAE1BoC,SAAW1B,GAAMA,EAAE2B,iBACnBC,WAAU,MAEVL,EAAA,QAAAC,IAAA,6C","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,g as i,h as t}from"./p-e42dfa95.js";import{c as o,g as r}from"./p-ecce2b5e.js";import{i as a}from"./p-cc0aeb50.js";const n='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:inline-block}.hb-popconfirm__trigger{cursor:pointer;display:inline-block}.hb-popconfirm__popup{animation:hb-popconfirm-fade .15s ease-out;background:var(--hb-color-bg-elevated);border-radius:var(--hb-border-radius-base);box-shadow:var(--hb-box-shadow);min-width:200px;padding:var(--hb-spacing-md);pointer-events:auto;position:fixed}.hb-popconfirm__main{align-items:flex-start;display:flex;gap:var(--hb-spacing-xs);margin-bottom:var(--hb-spacing-sm)}.hb-popconfirm__icon{color:var(--hb-color-warning);flex-shrink:0;font-size:16px}.hb-popconfirm__title{color:var(--hb-color-text);font-size:var(--hb-font-size-sm);line-height:1.5}.hb-popconfirm__action{display:flex;gap:var(--hb-spacing-xs);justify-content:flex-end}.hb-popconfirm__btn{background:var(--hb-color-bg);border:1px solid var(--hb-color-border);border-radius:var(--hb-border-radius-sm);cursor:pointer;font-size:var(--hb-font-size-xs);padding:4px 12px;transition:all var(--hb-transition-duration)}.hb-popconfirm__btn--cancel:hover{border-color:var(--hb-color-primary);color:var(--hb-color-primary)}.hb-popconfirm__btn--confirm{background:var(--hb-color-primary);border-color:var(--hb-color-primary);color:#fff}.hb-popconfirm__btn--confirm:hover{background:var(--hb-color-primary-hover)}@keyframes hb-popconfirm-fade{0%{opacity:0}to{opacity:1}}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const s=n;const l=class{constructor(i){e(this,i)}get el(){return i(this)}title="确定执行此操作?";confirmButtonText="确定";cancelButtonText="取消";placement="top";disabled=false;icon="⚠";visible=false;popupStyle={};triggerRef;popupRef;confirmBtnRef;show=()=>{if(this.disabled)return;this.visible=true;requestAnimationFrame((()=>{this.updatePosition();this.confirmBtnRef?.focus()}))};hide=()=>{this.visible=false};handleKeydown=e=>{if(e.key==="Escape"&&this.visible){e.preventDefault();this.handleCancel(e)}};handleTriggerKeydown=e=>{if(this.disabled)return;if(a(e.key)){e.preventDefault();this.show()}};updatePosition(){if(!this.triggerRef||!this.popupRef)return;const e=this.triggerRef.getBoundingClientRect();const{width:i,height:t}=this.popupRef.getBoundingClientRect();const a=o(e,i,t,this.placement,8);this.popupStyle={top:`${a.top}px`,left:`${a.left}px`,zIndex:String(r())}}handleConfirm=e=>{e.stopPropagation();this.hide();this.el.dispatchEvent(new CustomEvent("hbConfirm",{bubbles:true}))};handleCancel=e=>{e.stopPropagation();this.hide();this.el.dispatchEvent(new CustomEvent("hbCancel",{bubbles:true}))};render(){return t("div",{key:"a3610b2320192960baa690acf9f0127fb36d206f",class:"hb-popconfirm",onClick:this.show,onKeyDown:this.handleKeydown},t("div",{key:"7164d998c2d989ed702d7dac318ef4e354e74dba",ref:e=>{this.triggerRef=e},class:"hb-popconfirm__trigger",role:"button",tabindex:this.disabled?-1:0,"aria-haspopup":"dialog","aria-expanded":this.visible?"true":"false","aria-disabled":this.disabled?"true":"false",onKeyDown:this.handleTriggerKeydown},t("slot",{key:"0c62f0d5fe58d4aec55aa22c64b7f7f66aa7780d"})),this.visible&&t("div",{key:"450446dc51b40f62b3496bea2717e95b6807a7ca",ref:e=>{this.popupRef=e},class:"hb-popconfirm__popup",style:this.popupStyle,role:"dialog","aria-live":"polite","aria-labelledby":"hb-popconfirm__title"},t("div",{key:"4fb63a0a1c89c0866b30acadcfeea20d6936f39a",class:"hb-popconfirm__main"},t("span",{key:"9cb5583abfc8822f0217a43b809ca9766c35b63e",class:"hb-popconfirm__icon","aria-hidden":"true"},this.icon),t("span",{key:"75419c7cecb35e91134f62d9d0cfb71331813e0a",id:"hb-popconfirm__title",class:"hb-popconfirm__title"},this.title)),t("div",{key:"6cf55c098e1926b418869ce9015ae2f25e4b41c0",class:"hb-popconfirm__action"},t("button",{key:"07334e3915c17333808c5341e902ac5609f3ee2c",type:"button",class:"hb-popconfirm__btn hb-popconfirm__btn--cancel",onClick:this.handleCancel},this.cancelButtonText),t("button",{key:"ca133eab1ef2e8a043cf546bd57277df89d73616",type:"button",ref:e=>{this.confirmBtnRef=e},class:"hb-popconfirm__btn hb-popconfirm__btn--confirm",onClick:this.handleConfirm},this.confirmButtonText))))}};l.style=s;export{l as hb_popconfirm};
|
|
2
|
-
//# sourceMappingURL=p-8a8443b8.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["popconfirmCss","HbPopconfirmStyle0","Popconfirm","title","confirmButtonText","cancelButtonText","placement","disabled","icon","visible","popupStyle","triggerRef","popupRef","confirmBtnRef","show","this","requestAnimationFrame","updatePosition","focus","hide","handleKeydown","e","key","preventDefault","handleCancel","handleTriggerKeydown","isActivationKey","rect","getBoundingClientRect","width","pw","height","ph","pos","computePosition","top","left","zIndex","String","getNextZIndex","handleConfirm","stopPropagation","el","dispatchEvent","CustomEvent","bubbles","render","h","class","onClick","onKeyDown","ref","role","tabindex","style","id","type"],"sources":["src/components/Popconfirm/popconfirm.css?tag=hb-popconfirm&encapsulation=shadow","src/components/Popconfirm/Popconfirm.tsx"],"sourcesContent":[":host { display: inline-block; }\n.hb-popconfirm__trigger { display: inline-block; cursor: pointer; }\n.hb-popconfirm__popup {\n position: fixed; background: var(--hb-color-bg-elevated);\n border-radius: var(--hb-border-radius-base); box-shadow: var(--hb-box-shadow);\n padding: var(--hb-spacing-md); min-width: 200px; animation: hb-popconfirm-fade 0.15s ease-out; pointer-events: auto;\n}\n.hb-popconfirm__main { display: flex; align-items: flex-start; gap: var(--hb-spacing-xs); margin-bottom: var(--hb-spacing-sm); }\n.hb-popconfirm__icon { color: var(--hb-color-warning); font-size: 16px; flex-shrink: 0; }\n.hb-popconfirm__title { font-size: var(--hb-font-size-sm); color: var(--hb-color-text); line-height: 1.5; }\n.hb-popconfirm__action { display: flex; justify-content: flex-end; gap: var(--hb-spacing-xs); }\n.hb-popconfirm__btn {\n padding: 4px 12px; font-size: var(--hb-font-size-xs); border-radius: var(--hb-border-radius-sm);\n cursor: pointer; border: 1px solid var(--hb-color-border); background: var(--hb-color-bg);\n transition: all var(--hb-transition-duration);\n}\n.hb-popconfirm__btn--cancel:hover { color: var(--hb-color-primary); border-color: var(--hb-color-primary); }\n.hb-popconfirm__btn--confirm { background: var(--hb-color-primary); color: #fff; border-color: var(--hb-color-primary); }\n.hb-popconfirm__btn--confirm:hover { background: var(--hb-color-primary-hover); }\n@keyframes hb-popconfirm-fade { from { opacity: 0; } to { opacity: 1; } }\n","import { Component, h, Prop, State, Element } from '@stencil/core';\nimport { computePosition, getNextZIndex, Placement } from '../../utils/popup-manager';\nimport { isActivationKey } from '../../utils/a11y';\n\n/**\n * Popconfirm 气泡确认框\n * 无障碍(对齐 antd / WAI-ARIA):\n * - 触发器 role=button + aria-haspopup=dialog + aria-expanded + aria-describedby\n * - 浮层 role=dialog + aria-live=polite(确认文屏幕阅读器实时播报)\n * - 键盘:trigger Enter/Space 打开;Esc=取消关闭;打开时自动聚焦确认按钮\n */\n@Component({ tag: 'hb-popconfirm', styleUrl: 'popconfirm.css', shadow: true })\nexport class Popconfirm {\n @Element() el: HTMLElement;\n @Prop() title: string = '确定执行此操作?';\n @Prop() confirmButtonText: string = '确定';\n @Prop() cancelButtonText: string = '取消';\n @Prop() placement: Placement = 'top';\n @Prop() disabled: boolean = false;\n @Prop() icon: string = '⚠';\n @State() visible: boolean = false;\n @State() popupStyle: Record<string, string> = {};\n\n private triggerRef?: HTMLElement;\n private popupRef?: HTMLDivElement;\n private confirmBtnRef?: HTMLButtonElement;\n\n private show = () => {\n if (this.disabled) return;\n this.visible = true;\n requestAnimationFrame(() => {\n this.updatePosition();\n // 打开后自动聚焦确认按钮(对齐 antd:Enter 直接确认)\n this.confirmBtnRef?.focus();\n });\n };\n private hide = () => { this.visible = false; };\n\n /** 键盘:Esc 取消关闭(Enter 由聚焦的确认按钮原生处理) */\n private handleKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.visible) {\n e.preventDefault();\n this.handleCancel(e);\n }\n };\n\n /** 触发器键盘:Enter/Space 打开 */\n private handleTriggerKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (isActivationKey(e.key)) {\n e.preventDefault();\n this.show();\n }\n };\n\n private updatePosition() {\n if (!this.triggerRef || !this.popupRef) return;\n const rect = this.triggerRef.getBoundingClientRect();\n const { width: pw, height: ph } = this.popupRef.getBoundingClientRect();\n const pos = computePosition(rect, pw, ph, this.placement, 8);\n this.popupStyle = { top: `${pos.top}px`, left: `${pos.left}px`, zIndex: String(getNextZIndex()) };\n }\n\n private handleConfirm = (e: Event) => {\n e.stopPropagation();\n this.hide();\n this.el.dispatchEvent(new CustomEvent('hbConfirm', { bubbles: true }));\n };\n private handleCancel = (e: Event) => {\n e.stopPropagation();\n this.hide();\n this.el.dispatchEvent(new CustomEvent('hbCancel', { bubbles: true }));\n };\n\n render() {\n return (\n <div\n class=\"hb-popconfirm\"\n onClick={this.show}\n onKeyDown={this.handleKeydown}\n >\n <div\n ref={(el: any) => { this.triggerRef = el; }}\n class=\"hb-popconfirm__trigger\"\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-haspopup=\"dialog\"\n aria-expanded={this.visible ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n onKeyDown={this.handleTriggerKeydown}\n >\n <slot />\n </div>\n {this.visible && (\n <div\n ref={(el: any) => { this.popupRef = el; }}\n class=\"hb-popconfirm__popup\"\n style={this.popupStyle}\n role=\"dialog\"\n aria-live=\"polite\"\n aria-labelledby=\"hb-popconfirm__title\"\n >\n <div class=\"hb-popconfirm__main\">\n <span class=\"hb-popconfirm__icon\" aria-hidden=\"true\">{this.icon}</span>\n <span id=\"hb-popconfirm__title\" class=\"hb-popconfirm__title\">{this.title}</span>\n </div>\n <div class=\"hb-popconfirm__action\">\n <button\n type=\"button\"\n class=\"hb-popconfirm__btn hb-popconfirm__btn--cancel\"\n onClick={this.handleCancel}\n >\n {this.cancelButtonText}\n </button>\n <button\n type=\"button\"\n ref={(el: any) => { this.confirmBtnRef = el; }}\n class=\"hb-popconfirm__btn hb-popconfirm__btn--confirm\"\n onClick={this.handleConfirm}\n >\n {this.confirmButtonText}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"iIAAA,MAAMA,EAAgB,w3NACtB,MAAAC,EAAeD,E,MCWFE,EAAU,M,iDAEbC,MAAgB,WAChBC,kBAA4B,KAC5BC,iBAA2B,KAC3BC,UAAuB,MACvBC,SAAoB,MACpBC,KAAe,IACdC,QAAmB,MACnBC,WAAqC,GAEtCC,WACAC,SACAC,cAEAC,KAAO,KACb,GAAIC,KAAKR,SAAU,OACnBQ,KAAKN,QAAU,KACfO,uBAAsB,KACpBD,KAAKE,iBAELF,KAAKF,eAAeK,OAAO,GAC3B,EAEIC,KAAO,KAAQJ,KAAKN,QAAU,KAAK,EAGnCW,cAAiBC,IACvB,GAAIA,EAAEC,MAAQ,UAAYP,KAAKN,QAAS,CACtCY,EAAEE,iBACFR,KAAKS,aAAaH,E,GAKdI,qBAAwBJ,IAC9B,GAAIN,KAAKR,SAAU,OACnB,GAAImB,EAAgBL,EAAEC,KAAM,CAC1BD,EAAEE,iBACFR,KAAKD,M,GAID,cAAAG,GACN,IAAKF,KAAKJ,aAAeI,KAAKH,SAAU,OACxC,MAAMe,EAAOZ,KAAKJ,WAAWiB,wBAC7B,MAAQC,MAAOC,EAAIC,OAAQC,GAAOjB,KAAKH,SAASgB,wBAChD,MAAMK,EAAMC,EAAgBP,EAAMG,EAAIE,EAAIjB,KAAKT,UAAW,GAC1DS,KAAKL,WAAa,CAAEyB,IAAK,GAAGF,EAAIE,QAASC,KAAM,GAAGH,EAAIG,SAAUC,OAAQC,OAAOC,K,CAGzEC,cAAiBnB,IACvBA,EAAEoB,kBACF1B,KAAKI,OACLJ,KAAK2B,GAAGC,cAAc,IAAIC,YAAY,YAAa,CAAEC,QAAS,OAAQ,EAEhErB,aAAgBH,IACtBA,EAAEoB,kBACF1B,KAAKI,OACLJ,KAAK2B,GAAGC,cAAc,IAAIC,YAAY,WAAY,CAAEC,QAAS,OAAQ,EAGvE,MAAAC,GACE,OACEC,EAAA,OAAAzB,IAAA,2CACE0B,MAAM,gBACNC,QAASlC,KAAKD,KACdoC,UAAWnC,KAAKK,eAEhB2B,EAAA,OAAAzB,IAAA,2CACE6B,IAAMT,IAAc3B,KAAKJ,WAAa+B,CAAE,EACxCM,MAAM,yBACNI,KAAK,SACLC,SAAUtC,KAAKR,UAAY,EAAI,EAAC,gBAClB,SAAQ,gBACPQ,KAAKN,QAAU,OAAS,QAAO,gBAC/BM,KAAKR,SAAW,OAAS,QACxC2C,UAAWnC,KAAKU,sBAEhBsB,EAAA,QAAAzB,IAAA,8CAEDP,KAAKN,SACJsC,EAAA,OAAAzB,IAAA,2CACE6B,IAAMT,IAAc3B,KAAKH,SAAW8B,CAAE,EACtCM,MAAM,uBACNM,MAAOvC,KAAKL,WACZ0C,KAAK,SAAQ,YACH,SAAQ,kBACF,wBAEhBL,EAAA,OAAAzB,IAAA,2CAAK0B,MAAM,uBACTD,EAAA,QAAAzB,IAAA,2CAAM0B,MAAM,sBAAqB,cAAa,QAAQjC,KAAKP,MAC3DuC,EAAA,QAAAzB,IAAA,2CAAMiC,GAAG,uBAAuBP,MAAM,wBAAwBjC,KAAKZ,QAErE4C,EAAA,OAAAzB,IAAA,2CAAK0B,MAAM,yBACTD,EAAA,UAAAzB,IAAA,2CACEkC,KAAK,SACLR,MAAM,gDACNC,QAASlC,KAAKS,cAEbT,KAAKV,kBAER0C,EAAA,UAAAzB,IAAA,2CACEkC,KAAK,SACLL,IAAMT,IAAc3B,KAAKF,cAAgB6B,CAAE,EAC3CM,MAAM,iDACNC,QAASlC,KAAKyB,eAEbzB,KAAKX,qB","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,g as i,h as o}from"./p-e42dfa95.js";import{c as s}from"./p-4ef5a884.js";import{h as r}from"./p-cc0aeb50.js";const a='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{--hb-select-font-size:14px;--hb-select-height:32px;--hb-select-border-color:var(--hb-border-color,#dcdfe6);--hb-select-border-color-hover:var(--hb-color-primary);--hb-select-bg-color:var(--hb-color-white,#fff);--hb-select-text-color:var(--hb-color-text-regular,#606266);--hb-select-placeholder-color:var(--hb-color-text-placeholder,#c0c4cc);display:inline-block;position:relative}.hb-select{display:inline-block;position:relative;width:240px}.hb-select__input-wrapper{position:relative}.hb-select__input,.hb-select__input-wrapper{cursor:pointer;display:inline-block;width:100%}.hb-select__input{background-color:var(--hb-select-bg-color);border:1px solid var(--hb-select-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-select-text-color);font-size:var(--hb-select-font-size);height:var(--hb-select-height);line-height:var(--hb-select-height);outline:none;padding:0 30px 0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.hb-select__input::placeholder{color:var(--hb-select-placeholder-color)}.hb-select__input:focus,.hb-select__input:hover:not(:disabled){border-color:var(--hb-select-border-color-hover)}.hb-select__tags{align-items:center;background-color:var(--hb-select-bg-color);border:1px solid var(--hb-select-border-color);border-radius:4px;display:flex;flex-wrap:wrap;min-height:var(--hb-select-height);padding:0 30px 0 5px}.hb-select__tag{align-items:center;background-color:var(--hb-fill-color-light,#f0f2f5);border:1px solid var(--hb-border-color-lighter,#e4e7ed);border-radius:4px;color:var(--hb-color-text-regular,#606266);display:inline-flex;font-size:12px;height:24px;margin:2px 0 2px 6px;padding:0 8px}.hb-select__tag-text{margin-right:4px}.hb-select__tag-close{align-items:center;color:var(--hb-color-text-placeholder,#c0c4cc);cursor:pointer;display:inline-flex;height:12px;justify-content:center;transition:color .2s;width:12px}.hb-select__tag-close svg{height:100%;width:100%}.hb-select__tag-close:hover{color:var(--hb-color-text-regular,#606266)}.hb-select__suffix{align-items:center;color:var(--hb-select-text-color);display:flex;position:absolute;right:8px;top:50%;transform:translateY(-50%)}.hb-select__clear{align-items:center;color:var(--hb-select-placeholder-color);cursor:pointer;display:inline-flex;height:14px;justify-content:center;margin-right:8px;transition:color .2s;width:14px}.hb-select__clear svg{height:100%;width:100%}.hb-select__clear:hover{color:var(--hb-select-text-color)}.hb-select__arrow{align-items:center;color:var(--hb-select-placeholder-color);display:inline-flex;height:12px;justify-content:center;transition:transform .3s;width:12px}.hb-select__arrow svg{height:100%;width:100%}.hb-select--open .hb-select__arrow{transform:rotate(180deg)}.hb-select__dropdown{background-color:var(--hb-select-bg-color);border:1px solid var(--hb-select-border-color);border-radius:4px;box-shadow:0 2px 12px #0000001a;left:0;margin-top:4px;max-height:300px;min-width:100%;overflow-y:auto;position:absolute;top:100%;z-index:1000}.hb-select__menu{list-style:none;margin:0;padding:6px 0}.hb-select__menu-item{align-items:center;color:var(--hb-select-text-color);cursor:pointer;display:flex;font-size:var(--hb-select-font-size);padding:8px 20px;transition:background-color .2s}.hb-select__menu-item:hover:not(.hb-select__menu-item--disabled):not(.hb-select__menu-item--divided){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-select__menu-item--selected{color:var(--hb-color-primary);font-weight:600}.hb-select__menu-item--disabled{color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}.hb-select__menu-item--divided{border-top:1px solid var(--hb-border-color-lighter,#e4e7ed);margin-top:6px;padding-top:6px}.hb-select__menu-item--empty{color:var(--hb-select-placeholder-color);cursor:default}.hb-select__menu-item-checkbox{align-items:center;color:var(--hb-color-primary,#1677ff);display:inline-flex;height:14px;justify-content:center;margin-right:8px;width:14px}.hb-select__menu-item-checkbox svg{height:100%;width:100%}.hb-select__menu-item--create{color:var(--hb-color-primary,#1677ff);font-weight:500}.hb-select__menu-item--create:hover{background-color:var(--hb-color-primary-bg,#e6f4ff)}.hb-select__menu-item-label{flex:1}.hb-select--small{font-size:12px}.hb-select--small .hb-select__input{font-size:12px;height:24px;line-height:24px;padding:0 25px 0 12px}.hb-select--large{font-size:16px}.hb-select--large .hb-select__input{font-size:16px;height:40px;line-height:40px;padding:0 35px 0 18px}.hb-select--disabled{cursor:not-allowed}.hb-select--disabled .hb-select__input{background-color:var(--hb-fill-color-light,#f5f7fa);border-color:var(--hb-select-border-color);color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const l=a;const n=class{constructor(i){e(this,i);this.hbChange=t(this,"hbChange",7);this.hbVisibleChange=t(this,"hbVisibleChange",7)}get el(){return i(this)}modelValue;options=[];placeholder="请选择";disabled=false;size="default";clearable=false;multiple=false;filterable=false;filterMethod;defaultFirstOption=false;allowCreate=false;collapseTags=false;maxCollapseTags;isOpen=false;inputValue="";searchValue="";filteredOptions=[];activeOptionIndex=-1;hbChange;hbVisibleChange;clickOutside=s({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false;this.hbVisibleChange.emit(false)}});componentDidLoad(){this.clickOutside=s({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false;this.hbVisibleChange.emit(false)}});this.clickOutside.connect();this.updateInputValue();if(this.filterable){this.filteredOptions=this.options}}disconnectedCallback(){this.clickOutside.disconnect()}handleValueChange(){this.updateInputValue()}handleOptionsChange(){if(this.filterable){this.filteredOptions=this.options}}updateInputValue(){if(!this.modelValue){this.inputValue="";return}if(this.multiple&&Array.isArray(this.modelValue)){const e=this.modelValue.map((e=>{const t=this.options.find((t=>t.value===e));return t?t.label:String(e)}));this.inputValue=e.join(", ")}else{const e=this.options.find((e=>e.value===this.modelValue));this.inputValue=e?e.label:String(this.modelValue)}}handleInputClick=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;if(this.isOpen){this.activeOptionIndex=this.defaultFirstOption?Math.max(-1,this.options.findIndex((e=>!e.disabled))):-1}this.hbVisibleChange.emit(this.isOpen)};handleWrapperKeydown=e=>{if(this.disabled)return;const t=this.filterable?this.filteredOptions:this.options;if(!this.isOpen){if(e.key==="Enter"||e.key===" "||e.key==="Spacebar"||e.key==="ArrowDown"||e.key==="ArrowUp"){e.preventDefault();this.isOpen=true;this.activeOptionIndex=-1;this.hbVisibleChange.emit(true)}return}const i=r(e,{activeIndex:this.activeOptionIndex,itemCount:t.length,loop:true});switch(i.type){case"navigate":e.preventDefault();this.activeOptionIndex=i.index;break;case"select":{e.preventDefault();const o=t[i.index];if(o&&!o.disabled)this.handleSelect(o);break}case"close":e.preventDefault();this.isOpen=false;this.hbVisibleChange.emit(false);break}};handleSelect=e=>{if(e.disabled)return;if(this.multiple){const t=this.modelValue||[];const i=t.indexOf(e.value);if(i>-1){t.splice(i,1)}else{t.push(e.value)}this.modelValue=[...t]}else{this.modelValue=e.value;this.isOpen=false;this.hbVisibleChange.emit(false)}this.updateInputValue();this.hbChange.emit(this.modelValue)};handleClear=e=>{e.stopPropagation();this.modelValue=this.multiple?[]:undefined;this.inputValue="";this.isOpen=false;this.hbChange.emit(this.modelValue);this.hbVisibleChange.emit(false)};handleSearch=e=>{const t=e.target;this.searchValue=t.value;if(this.filterMethod){this.filterMethod(t.value)}else{this.filteredOptions=this.options.filter((e=>e.label.toLowerCase().includes(t.value.toLowerCase())))}};isSelected(e){if(this.multiple&&Array.isArray(this.modelValue)){return this.modelValue.includes(e.value)}return this.modelValue===e.value}get createOption(){if(!this.allowCreate||!this.filterable||!this.isOpen)return null;const e=this.searchValue.trim();if(!e)return null;const t=this.options.some((t=>String(t.label).toLowerCase()===e.toLowerCase()||String(t.value).toLowerCase()===e.toLowerCase()));if(t)return null;return{value:e,label:e}}handleCreate=()=>{const e=this.createOption;if(!e)return;if(this.multiple){const t=(this.modelValue||[]).slice();if(!t.includes(e.value))t.push(e.value);this.modelValue=t}else{this.modelValue=e.value;this.isOpen=false;this.hbVisibleChange.emit(false)}this.searchValue="";this.filteredOptions=this.options;this.updateInputValue();this.hbChange.emit(this.modelValue)};render(){const e=this.filterable?this.filteredOptions:this.options;const t=this.clearable&&this.modelValue!==undefined&&(this.multiple?this.modelValue.length>0:true);return o("div",{key:"dded29eec6498d2f1e64ecdfac47b3a38827d0b1",class:{"hb-select":true,"hb-select--open":this.isOpen,"hb-select--disabled":this.disabled,[`hb-select--${this.size}`]:true},"aria-haspopup":"listbox","aria-expanded":this.isOpen?"true":"false"},o("div",{key:"0ab278d11f13f0c60b4d07d3d6f241a730da6155",class:"hb-select__input-wrapper",onClick:this.handleInputClick,onKeyDown:this.handleWrapperKeydown},this.multiple&&Array.isArray(this.modelValue)&&this.modelValue.length>0?o("div",{class:"hb-select__tags"},this.modelValue.slice(0,this.collapseTags&&this.maxCollapseTags?this.maxCollapseTags:undefined).map((e=>{const t=this.options.find((t=>t.value===e));return o("span",{class:"hb-select__tag"},o("span",{class:"hb-select__tag-text"},t?t.label:e),o("span",{class:"hb-select__tag-close",role:"button","aria-label":"移除标签",onClick:i=>{i.stopPropagation();this.handleSelect(t||{value:e,label:String(e)})}},o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},o("path",{d:"M6 6l12 12M18 6L6 18"}))))})),this.collapseTags&&this.maxCollapseTags&&this.modelValue.length>this.maxCollapseTags&&o("span",{class:"hb-select__tag"},o("span",{class:"hb-select__tag-text"},"+",this.modelValue.length-this.maxCollapseTags))):o("input",{type:"text",class:"hb-select__input",placeholder:this.placeholder,value:this.filterable&&this.isOpen?this.searchValue:this.inputValue,disabled:this.disabled,readonly:!this.filterable||!this.isOpen,onInput:this.handleSearch,"aria-haspopup":"listbox","aria-expanded":this.isOpen?"true":"false",role:"combobox"}),o("span",{key:"512eee624dcfb703a28dcb063fe35e66642f6d6b",class:"hb-select__suffix"},t&&o("span",{key:"523e0ca498a941142b9329af481de61cbea6c8be",class:"hb-select__clear",role:"button","aria-label":"清空",onClick:this.handleClear},o("svg",{key:"4c200e8d75c7c48fb5192c178527cd7a38981e02",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},o("path",{key:"b7ca1b657cfb34ad756047b28e1564fa67e361ea",d:"M6 6l12 12M18 6L6 18"}))),o("span",{key:"78d273ad4d5b1d0dc974889e82345146d5178c15",class:"hb-select__arrow","aria-hidden":"true"},o("svg",{key:"793b836d984b541b416597c77bf5dbfc26a59d1c",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},o("path",{key:"10c8d767bca8553e9251121a80634afd6cc5a242",d:"M6 9l6 6 6-6"}))))),this.isOpen&&o("div",{key:"b33cee71ab3d24686fefaebd50c905b84227c2a4",class:"hb-select__dropdown"},o("ul",{key:"a9cbf3750733dbb5b282963bb44dea90a171edda",class:"hb-select__menu",role:"listbox"},this.createOption&&o("li",{key:"24dae5fae23072c2d12ca7e57da9a5c330247940",class:{"hb-select__menu-item":true,"hb-select__menu-item--create":true},role:"option","aria-selected":"false",onClick:this.handleCreate},o("span",{key:"4c8cf5f89644d4758dd295d14cbf3dc941f8d70c",class:"hb-select__menu-item-label"},"创建「",this.createOption.label,"」")),e.length===0&&!this.createOption?o("li",{class:"hb-select__menu-item hb-select__menu-item--empty","aria-disabled":"true"},"无数据"):e.map(((e,t)=>o("li",{class:{"hb-select__menu-item":true,"hb-select__menu-item--selected":this.isSelected(e),"hb-select__menu-item--disabled":e.disabled,"hb-select__menu-item--divided":e.divided,"hb-select__menu-item--active":t===this.activeOptionIndex},role:"option","aria-selected":this.isSelected(e)?"true":"false","aria-disabled":e.disabled?"true":undefined,onClick:()=>this.handleSelect(e)},this.multiple&&o("span",{class:"hb-select__menu-item-checkbox","aria-hidden":"true"},this.isSelected(e)?o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":3,"stroke-linecap":"round","stroke-linejoin":"round"},o("path",{d:"M5 12l5 5L20 7"})):null),o("span",{class:"hb-select__menu-item-label"},e.label)))))))}static get watchers(){return{modelValue:["handleValueChange"],options:["handleOptionsChange"]}}};n.style=l;export{n as hb_select};
|
|
2
|
-
//# sourceMappingURL=p-8fd788c9.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["selectCss","HbSelectStyle0","Select","modelValue","options","placeholder","disabled","size","clearable","multiple","filterable","filterMethod","defaultFirstOption","allowCreate","collapseTags","maxCollapseTags","isOpen","inputValue","searchValue","filteredOptions","activeOptionIndex","hbChange","hbVisibleChange","clickOutside","createClickOutsideHandler","host","this","onClose","emit","componentDidLoad","el","connect","updateInputValue","disconnectedCallback","disconnect","handleValueChange","handleOptionsChange","Array","isArray","labels","map","val","option","find","opt","value","label","String","join","handleInputClick","Math","max","findIndex","o","handleWrapperKeydown","e","displayOptions","key","preventDefault","action","handleListKeyboard","activeIndex","itemCount","length","loop","type","index","handleSelect","currentValue","indexOf","splice","push","handleClear","stopPropagation","undefined","handleSearch","target","filter","toLowerCase","includes","isSelected","createOption","q","trim","exists","some","handleCreate","arr","slice","render","showClear","h","class","onClick","onKeyDown","role","viewBox","fill","stroke","d","readonly","onInput","divided"],"sources":["src/components/Select/select.css?tag=hb-select&encapsulation=shadow","src/components/Select/Select.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n --hb-select-font-size: 14px;\n --hb-select-height: 32px;\n --hb-select-border-color: var(--hb-border-color, #dcdfe6);\n --hb-select-border-color-hover: var(--hb-color-primary);\n --hb-select-bg-color: var(--hb-color-white, #ffffff);\n --hb-select-text-color: var(--hb-color-text-regular, #606266);\n --hb-select-placeholder-color: var(--hb-color-text-placeholder, #c0c4cc);\n}\n\n.hb-select {\n display: inline-block;\n position: relative;\n width: 240px;\n}\n\n.hb-select__input-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n cursor: pointer;\n}\n\n.hb-select__input {\n display: inline-block;\n width: 100%;\n height: var(--hb-select-height);\n line-height: var(--hb-select-height);\n padding: 0 30px 0 15px;\n font-size: var(--hb-select-font-size);\n color: var(--hb-select-text-color);\n background-color: var(--hb-select-bg-color);\n border: 1px solid var(--hb-select-border-color);\n border-radius: 4px;\n box-sizing: border-box;\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n\n.hb-select__input::placeholder {\n color: var(--hb-select-placeholder-color);\n}\n\n.hb-select__input:hover:not(:disabled) {\n border-color: var(--hb-select-border-color-hover);\n}\n\n.hb-select__input:focus {\n border-color: var(--hb-select-border-color-hover);\n}\n\n.hb-select__tags {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n padding: 0 30px 0 5px;\n min-height: var(--hb-select-height);\n border: 1px solid var(--hb-select-border-color);\n border-radius: 4px;\n background-color: var(--hb-select-bg-color);\n}\n\n.hb-select__tag {\n display: inline-flex;\n align-items: center;\n height: 24px;\n padding: 0 8px;\n margin: 2px 0 2px 6px;\n background-color: var(--hb-fill-color-light, #f0f2f5);\n border: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n border-radius: 4px;\n font-size: 12px;\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-select__tag-text {\n margin-right: 4px;\n}\n\n.hb-select__tag-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n cursor: pointer;\n color: var(--hb-color-text-placeholder, #c0c4cc);\n transition: color 0.2s;\n}\n\n.hb-select__tag-close svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select__tag-close:hover {\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-select__suffix {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n color: var(--hb-select-text-color);\n}\n\n.hb-select__clear {\n margin-right: 8px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n cursor: pointer;\n color: var(--hb-select-placeholder-color);\n transition: color 0.2s;\n}\n\n.hb-select__clear svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select__clear:hover {\n color: var(--hb-select-text-color);\n}\n\n.hb-select__arrow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n color: var(--hb-select-placeholder-color);\n transition: transform 0.3s;\n}\n\n.hb-select__arrow svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select--open .hb-select__arrow {\n transform: rotate(180deg);\n}\n\n.hb-select__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-select-bg-color);\n border: 1px solid var(--hb-select-border-color);\n border-radius: 4px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 100%;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.hb-select__menu {\n margin: 0;\n padding: 6px 0;\n list-style: none;\n}\n\n.hb-select__menu-item {\n display: flex;\n align-items: center;\n padding: 8px 20px;\n font-size: var(--hb-select-font-size);\n color: var(--hb-select-text-color);\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.hb-select__menu-item:hover:not(.hb-select__menu-item--disabled):not(.hb-select__menu-item--divided) {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n}\n\n.hb-select__menu-item--selected {\n color: var(--hb-color-primary);\n font-weight: 600;\n}\n\n.hb-select__menu-item--disabled {\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n\n.hb-select__menu-item--divided {\n border-top: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n margin-top: 6px;\n padding-top: 6px;\n}\n\n.hb-select__menu-item--empty {\n color: var(--hb-select-placeholder-color);\n cursor: default;\n}\n\n.hb-select__menu-item-checkbox {\n margin-right: 8px;\n width: 14px;\n height: 14px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--hb-color-primary, #1677ff);\n}\n\n.hb-select__menu-item-checkbox svg {\n width: 100%;\n height: 100%;\n}\n\n.hb-select__menu-item--create {\n color: var(--hb-color-primary, #1677ff);\n font-weight: 500;\n}\n\n.hb-select__menu-item--create:hover {\n background-color: var(--hb-color-primary-bg, #e6f4ff);\n}\n\n.hb-select__menu-item-label {\n flex: 1;\n}\n\n.hb-select--small {\n font-size: 12px;\n}\n\n.hb-select--small .hb-select__input {\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n padding: 0 25px 0 12px;\n}\n\n.hb-select--large {\n font-size: 16px;\n}\n\n.hb-select--large .hb-select__input {\n height: 40px;\n line-height: 40px;\n font-size: 16px;\n padding: 0 35px 0 18px;\n}\n\n.hb-select--disabled {\n cursor: not-allowed;\n}\n\n.hb-select--disabled .hb-select__input {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-select-border-color);\n color: var(--hb-color-text-disabled, #c0c4cc);\n cursor: not-allowed;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport { handleListKeyboard } from '../../utils/a11y';\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n divided?: boolean;\n}\n\n/**\n * Select 选择器组件\n * 当选项过多时,使用下拉菜单展示并选择内容\n */\n@Component({\n tag: 'hb-select',\n styleUrl: 'select.css',\n shadow: true,\n})\nexport class Select {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string | number | (string | number)[];\n\n /**\n * 可选项数据源\n */\n @Prop() options: SelectOption[] = [];\n\n /**\n * 输入框占位文本\n */\n @Prop() placeholder: string = '请选择';\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 输入框尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 是否可清空\n * @default false\n */\n @Prop() clearable: boolean = false;\n\n /**\n * 是否多选\n * @default false\n */\n @Prop() multiple: boolean = false;\n\n /**\n * 是否可搜索\n * @default false\n */\n @Prop() filterable: boolean = false;\n\n /**\n * 自定义过滤方法\n */\n @Prop() filterMethod?: (query: string) => void;\n\n /**\n * 是否默认展开\n * @default false\n */\n @Prop() defaultFirstOption: boolean = false;\n\n /**\n * 是否允许创建新条目\n * @default false\n */\n @Prop() allowCreate: boolean = false;\n\n /**\n * 多选时是否将选中值按文字的形式展示\n * @default false\n */\n @Prop() collapseTags: boolean = false;\n\n /**\n * 多选时最多显示多少个tag\n */\n @Prop() maxCollapseTags?: number;\n\n @State() isOpen: boolean = false;\n @State() inputValue: string = '';\n @State() searchValue: string = '';\n @State() filteredOptions: SelectOption[] = [];\n /** 键盘高亮的选项索引(-1 表示无) */\n @State() activeOptionIndex: number = -1;\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string | number | (string | number)[]>;\n\n /**\n * 下拉框出现/隐藏时触发\n */\n @Event() hbVisibleChange: EventEmitter<boolean>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; this.hbVisibleChange.emit(false); },\n });\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; this.hbVisibleChange.emit(false); },\n });\n this.clickOutside.connect();\n this.updateInputValue();\n if (this.filterable) {\n this.filteredOptions = this.options;\n }\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n @Watch('modelValue')\n handleValueChange() {\n this.updateInputValue();\n }\n\n @Watch('options')\n handleOptionsChange() {\n if (this.filterable) {\n this.filteredOptions = this.options;\n }\n }\n\n private updateInputValue() {\n if (!this.modelValue) {\n this.inputValue = '';\n return;\n }\n\n if (this.multiple && Array.isArray(this.modelValue)) {\n const labels = this.modelValue.map(val => {\n const option = this.options.find(opt => opt.value === val);\n return option ? option.label : String(val);\n });\n this.inputValue = labels.join(', ');\n } else {\n const option = this.options.find(opt => opt.value === this.modelValue);\n this.inputValue = option ? option.label : String(this.modelValue);\n }\n }\n\n private handleInputClick = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n // defaultFirstOption=true:打开时自动高亮第一个可选(非禁用)项\n this.activeOptionIndex = this.defaultFirstOption\n ? Math.max(-1, this.options.findIndex(o => !o.disabled))\n : -1;\n }\n this.hbVisibleChange.emit(this.isOpen);\n };\n\n private handleWrapperKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n const displayOptions = this.filterable ? this.filteredOptions : this.options;\n\n if (!this.isOpen) {\n // 关闭态:Enter / Space / 方向键 展开\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar' ||\n e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.isOpen = true;\n this.activeOptionIndex = -1;\n this.hbVisibleChange.emit(true);\n }\n return;\n }\n\n const action = handleListKeyboard(e, {\n activeIndex: this.activeOptionIndex,\n itemCount: displayOptions.length,\n loop: true,\n });\n switch (action.type) {\n case 'navigate':\n e.preventDefault();\n this.activeOptionIndex = action.index;\n break;\n case 'select': {\n e.preventDefault();\n const opt = displayOptions[action.index];\n if (opt && !opt.disabled) this.handleSelect(opt);\n break;\n }\n case 'close':\n e.preventDefault();\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n break;\n default:\n break;\n }\n };\n\n private handleSelect = (option: SelectOption) => {\n if (option.disabled) return;\n\n if (this.multiple) {\n const currentValue = (this.modelValue as (string | number)[]) || [];\n const index = currentValue.indexOf(option.value);\n \n if (index > -1) {\n currentValue.splice(index, 1);\n } else {\n currentValue.push(option.value);\n }\n \n this.modelValue = [...currentValue];\n } else {\n this.modelValue = option.value;\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n }\n \n this.updateInputValue();\n this.hbChange.emit(this.modelValue);\n };\n\n private handleClear = (e: Event) => {\n e.stopPropagation();\n this.modelValue = this.multiple ? [] : undefined;\n this.inputValue = '';\n this.isOpen = false;\n this.hbChange.emit(this.modelValue);\n this.hbVisibleChange.emit(false);\n };\n\n private handleSearch = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchValue = target.value;\n \n if (this.filterMethod) {\n this.filterMethod(target.value);\n } else {\n this.filteredOptions = this.options.filter(opt =>\n opt.label.toLowerCase().includes(target.value.toLowerCase())\n );\n }\n };\n\n private isSelected(option: SelectOption): boolean {\n if (this.multiple && Array.isArray(this.modelValue)) {\n return this.modelValue.includes(option.value);\n }\n return this.modelValue === option.value;\n }\n\n /**\n * allowCreate + filterable:当用户输入的文本在已有选项中不存在时,\n * 渲染一个\"创建 xxx\"项。返回待创建的文本(已 trim);无需创建返回 null。\n */\n private get createOption(): SelectOption | null {\n if (!this.allowCreate || !this.filterable || !this.isOpen) return null;\n const q = this.searchValue.trim();\n if (!q) return null;\n const exists = this.options.some(o => String(o.label).toLowerCase() === q.toLowerCase() || String(o.value).toLowerCase() === q.toLowerCase());\n if (exists) return null;\n return { value: q, label: q };\n }\n\n private handleCreate = () => {\n const opt = this.createOption;\n if (!opt) return;\n if (this.multiple) {\n const arr = ((this.modelValue as (string | number)[]) || []).slice();\n if (!arr.includes(opt.value)) arr.push(opt.value);\n this.modelValue = arr;\n } else {\n this.modelValue = opt.value;\n this.isOpen = false;\n this.hbVisibleChange.emit(false);\n }\n this.searchValue = '';\n this.filteredOptions = this.options;\n this.updateInputValue();\n this.hbChange.emit(this.modelValue);\n };\n\n render() {\n const displayOptions = this.filterable ? this.filteredOptions : this.options;\n const showClear = this.clearable && this.modelValue !== undefined &&\n (this.multiple ? (this.modelValue as any[]).length > 0 : true);\n\n return (\n <div\n class={{\n 'hb-select': true,\n 'hb-select--open': this.isOpen,\n 'hb-select--disabled': this.disabled,\n [`hb-select--${this.size}`]: true,\n }}\n aria-haspopup=\"listbox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n >\n <div class=\"hb-select__input-wrapper\" onClick={this.handleInputClick} onKeyDown={this.handleWrapperKeydown}>\n {this.multiple && Array.isArray(this.modelValue) && this.modelValue.length > 0 ? (\n <div class=\"hb-select__tags\">\n {this.modelValue.slice(0, this.collapseTags && this.maxCollapseTags ? this.maxCollapseTags : undefined).map((val) => {\n const option = this.options.find(opt => opt.value === val);\n return (\n <span class=\"hb-select__tag\">\n <span class=\"hb-select__tag-text\">{option ? option.label : val}</span>\n <span\n class=\"hb-select__tag-close\"\n role=\"button\"\n aria-label=\"移除标签\"\n onClick={(e) => {\n e.stopPropagation();\n this.handleSelect(option || { value: val, label: String(val) });\n }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n </span>\n );\n })}\n {this.collapseTags && this.maxCollapseTags && this.modelValue.length > this.maxCollapseTags && (\n <span class=\"hb-select__tag\">\n <span class=\"hb-select__tag-text\">+{this.modelValue.length - this.maxCollapseTags}</span>\n </span>\n )}\n </div>\n ) : (\n <input\n type=\"text\"\n class=\"hb-select__input\"\n placeholder={this.placeholder}\n value={this.filterable && this.isOpen ? this.searchValue : this.inputValue}\n disabled={this.disabled}\n readonly={!this.filterable || !this.isOpen}\n onInput={this.handleSearch}\n aria-haspopup=\"listbox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n role=\"combobox\"\n />\n )}\n <span class=\"hb-select__suffix\">\n {showClear && (\n <span class=\"hb-select__clear\" role=\"button\" aria-label=\"清空\" onClick={this.handleClear}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n )}\n <span class=\"hb-select__arrow\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </span>\n </span>\n </div>\n {this.isOpen && (\n <div class=\"hb-select__dropdown\">\n <ul class=\"hb-select__menu\" role=\"listbox\">\n {/* allowCreate:用户输入文本不存在时,渲染创建项(置顶) */}\n {this.createOption && (\n <li\n class={{ 'hb-select__menu-item': true, 'hb-select__menu-item--create': true }}\n role=\"option\"\n aria-selected=\"false\"\n onClick={this.handleCreate}\n >\n <span class=\"hb-select__menu-item-label\">\n 创建「{this.createOption.label}」\n </span>\n </li>\n )}\n {displayOptions.length === 0 && !this.createOption ? (\n <li class=\"hb-select__menu-item hb-select__menu-item--empty\" aria-disabled=\"true\">无数据</li>\n ) : (\n displayOptions.map((option, index) => (\n <li\n class={{\n 'hb-select__menu-item': true,\n 'hb-select__menu-item--selected': this.isSelected(option),\n 'hb-select__menu-item--disabled': option.disabled,\n 'hb-select__menu-item--divided': option.divided,\n 'hb-select__menu-item--active': index === this.activeOptionIndex,\n }}\n role=\"option\"\n aria-selected={this.isSelected(option) ? 'true' : 'false'}\n aria-disabled={option.disabled ? 'true' : undefined}\n onClick={() => this.handleSelect(option)}\n >\n {this.multiple && (\n <span class=\"hb-select__menu-item-checkbox\" aria-hidden=\"true\">\n {this.isSelected(option) ? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={3} stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 12l5 5L20 7\" />\n </svg>\n ) : null}\n </span>\n )}\n <span class=\"hb-select__menu-item-label\">{option.label}</span>\n </li>\n ))\n )}\n </ul>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,g as i,h as o}from"./p-e42dfa95.js";import{c as r}from"./p-4ef5a884.js";import{g as n}from"./p-ecce2b5e.js";import{i as a,h as s}from"./p-cc0aeb50.js";const d='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:inline-block;position:relative}.hb-dropdown__trigger{cursor:pointer;display:inline-block}.hb-dropdown__menu{animation:hb-dropdown-fade-in .15s ease-out;background-color:var(--hb-color-bg-elevated);border-radius:var(--hb-border-radius-base);box-shadow:var(--hb-box-shadow);left:0;margin-top:4px;min-width:120px;padding:4px 0;position:absolute;top:100%}.hb-dropdown__item{align-items:center;color:var(--hb-color-text);cursor:pointer;display:flex;font-size:var(--hb-font-size-sm);padding:6px 16px;transition:background-color var(--hb-transition-duration);white-space:nowrap}.hb-dropdown__item--active:not(.hb-dropdown__item--disabled),.hb-dropdown__item:hover:not(.hb-dropdown__item--disabled){background-color:var(--hb-color-fill-tertiary);color:var(--hb-color-primary)}.hb-dropdown__item--disabled{color:var(--hb-color-text-disabled);cursor:not-allowed}.hb-dropdown__item--divided{border-top:1px solid var(--hb-color-border-secondary);margin-top:4px;padding-top:8px}.hb-dropdown__item--danger{color:var(--hb-color-danger)}.hb-dropdown__item--danger:hover:not(.hb-dropdown__item--disabled){background-color:var(--hb-color-danger-bg);color:var(--hb-color-danger)}@keyframes hb-dropdown-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const l=d;const h=class{constructor(i){e(this,i);this.hbCommand=t(this,"hbCommand",7)}get el(){return i(this)}items=[];trigger="hover";disabled=false;isOpen=false;activeIndex=-1;hbCommand;clickOutside=r({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false}});componentDidLoad(){this.clickOutside=r({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.close()}});if(this.trigger==="click"){this.clickOutside.connect()}}disconnectedCallback(){this.clickOutside.disconnect()}open=()=>{if(this.disabled)return;this.isOpen=true;this.activeIndex=this.items.findIndex((e=>!e.disabled))};close=()=>{this.isOpen=false;this.activeIndex=-1};show=()=>{if(this.disabled)return;this.isOpen=true};hide=()=>{this.close()};toggle=()=>{if(this.disabled)return;if(this.isOpen)this.close();else this.open()};handleSelect=e=>{if(e.disabled)return;this.close();this.hbCommand.emit(e.key)};handleTriggerKeydown=e=>{if(this.disabled)return;if(this.trigger==="hover")return;if(a(e.key)||e.key==="ArrowDown"){e.preventDefault();this.open()}};handleMenuKeydown=e=>{const t=this.items.length;const i=s(e,{activeIndex:this.activeIndex,itemCount:t,loop:true});switch(i.type){case"navigate":e.preventDefault();{let e=i.index;for(let i=0;i<t;i++){if(!this.items[e]?.disabled)break;e=(e+1)%t}this.activeIndex=e}break;case"select":{e.preventDefault();const t=this.items[i.index];if(t&&!t.disabled)this.handleSelect(t);break}case"close":e.preventDefault();this.close();break}};render(){const e=this.trigger==="hover"?{onMouseEnter:this.show,onMouseLeave:this.hide}:{onClick:this.toggle};return o("div",{key:"59f46f0179081fb6c094e21e1f0cd8008ce5e71d",class:"hb-dropdown",...e,onKeyDown:this.handleTriggerKeydown},o("div",{key:"346a5bfca387e19aa85d420516c542d0c0a01b50",class:"hb-dropdown__trigger",role:"button",tabindex:this.disabled?-1:0,"aria-haspopup":"menu","aria-expanded":this.isOpen?"true":"false","aria-disabled":this.disabled?"true":"false"},o("slot",{key:"260f2627159a9bcbcaa374b1c6e8a473ed76e876"})),this.isOpen&&o("div",{key:"478f230e909c1ad13dc32dabcd1d2b543bde0c6c",class:"hb-dropdown__menu",style:{zIndex:String(n())},role:"menu",onKeyDown:this.handleMenuKeydown},this.items.map(((e,t)=>o("div",{class:{"hb-dropdown__item":true,"hb-dropdown__item--disabled":e.disabled,"hb-dropdown__item--divided":e.divided,"hb-dropdown__item--danger":e.danger,"hb-dropdown__item--active":t===this.activeIndex},role:"menuitem",tabindex:-1,"aria-disabled":e.disabled?"true":undefined,onMouseEnter:()=>{if(!e.disabled)this.activeIndex=t},onClick:()=>this.handleSelect(e)},e.label)))))}};h.style=l;export{h as hb_dropdown};
|
|
2
|
-
//# sourceMappingURL=p-92521c31.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["dropdownCss","HbDropdownStyle0","Dropdown","items","trigger","disabled","isOpen","activeIndex","hbCommand","clickOutside","createClickOutsideHandler","host","this","onClose","componentDidLoad","el","close","connect","disconnectedCallback","disconnect","open","findIndex","i","show","hide","toggle","handleSelect","item","emit","key","handleTriggerKeydown","e","isActivationKey","preventDefault","handleMenuKeydown","enabledCount","length","action","handleListKeyboard","itemCount","loop","type","idx","index","render","triggerEvents","onMouseEnter","onMouseLeave","onClick","h","class","onKeyDown","role","tabindex","style","zIndex","String","getNextZIndex","map","divided","danger","undefined","label"],"sources":["src/components/Dropdown/dropdown.css?tag=hb-dropdown&encapsulation=shadow","src/components/Dropdown/Dropdown.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n}\n\n.hb-dropdown__trigger {\n display: inline-block;\n cursor: pointer;\n}\n\n.hb-dropdown__menu {\n position: absolute;\n top: 100%;\n left: 0;\n min-width: 120px;\n margin-top: 4px;\n padding: 4px 0;\n background-color: var(--hb-color-bg-elevated);\n border-radius: var(--hb-border-radius-base);\n box-shadow: var(--hb-box-shadow);\n animation: hb-dropdown-fade-in 0.15s ease-out;\n}\n\n.hb-dropdown__item {\n display: flex;\n align-items: center;\n padding: 6px 16px;\n font-size: var(--hb-font-size-sm);\n color: var(--hb-color-text);\n cursor: pointer;\n white-space: nowrap;\n transition: background-color var(--hb-transition-duration);\n}\n\n.hb-dropdown__item:hover:not(.hb-dropdown__item--disabled),\n.hb-dropdown__item--active:not(.hb-dropdown__item--disabled) {\n background-color: var(--hb-color-fill-tertiary);\n color: var(--hb-color-primary);\n}\n\n.hb-dropdown__item--disabled {\n color: var(--hb-color-text-disabled);\n cursor: not-allowed;\n}\n\n.hb-dropdown__item--divided {\n margin-top: 4px;\n padding-top: 8px;\n border-top: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-dropdown__item--danger {\n color: var(--hb-color-danger);\n}\n.hb-dropdown__item--danger:hover:not(.hb-dropdown__item--disabled) {\n background-color: var(--hb-color-danger-bg);\n color: var(--hb-color-danger);\n}\n\n@keyframes hb-dropdown-fade-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n}\n","import { Component, h, Prop, State, Element, Event, EventEmitter } from '@stencil/core';\nimport { createClickOutsideHandler } from '../../utils/click-outside';\nimport { getNextZIndex } from '../../utils/popup-manager';\nimport { handleListKeyboard, isActivationKey } from '../../utils/a11y';\n\nexport interface DropdownItem {\n key: string;\n label: string;\n disabled?: boolean;\n divided?: boolean;\n danger?: boolean;\n}\n\n/**\n * Dropdown 下拉菜单组件\n * 将动作或菜单折叠到下拉菜单中。\n *\n * 无障碍(对齐 WAI-ARIA menu / antd):\n * - 触发器 role=button + aria-haspopup=menu + aria-expanded\n * - 菜单 role=menu,菜单项 role=menuitem + aria-disabled\n * - 键盘:trigger 上 Enter/Space/↓ 打开;菜单内 ↑↓ 导航、Enter/Space 选中、Esc 关闭\n */\n@Component({\n tag: 'hb-dropdown',\n styleUrl: 'dropdown.css',\n shadow: true,\n})\nexport class Dropdown {\n @Element() el: HTMLElement;\n\n /** 菜单项 */\n @Prop() items: DropdownItem[] = [];\n\n /** 触发方式 */\n @Prop() trigger: 'hover' | 'click' = 'hover';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n @State() isOpen: boolean = false;\n /** 键盘高亮项索引(-1 表示无) */\n @State() activeIndex: number = -1;\n\n /** 命令事件 */\n @Event() hbCommand: EventEmitter<string>;\n\n private clickOutside = createClickOutsideHandler({\n host: null as any,\n isOpen: () => this.isOpen,\n onClose: () => { this.isOpen = false; },\n });\n\n componentDidLoad() {\n this.clickOutside = createClickOutsideHandler({\n host: this.el,\n isOpen: () => this.isOpen,\n onClose: () => { this.close(); },\n });\n // click 触发才需要外部点击关闭;hover 触发由 mouseenter/leave 控制\n if (this.trigger === 'click') {\n this.clickOutside.connect();\n }\n }\n\n disconnectedCallback() {\n this.clickOutside.disconnect();\n }\n\n private open = () => {\n if (this.disabled) return;\n this.isOpen = true;\n // 打开时默认高亮首个可选(非禁用)项,便于 Enter 直接选\n this.activeIndex = this.items.findIndex(i => !i.disabled);\n };\n\n private close = () => {\n this.isOpen = false;\n this.activeIndex = -1;\n };\n\n private show = () => {\n if (this.disabled) return;\n this.isOpen = true;\n };\n\n private hide = () => {\n this.close();\n };\n\n private toggle = () => {\n if (this.disabled) return;\n if (this.isOpen) this.close();\n else this.open();\n };\n\n private handleSelect = (item: DropdownItem) => {\n if (item.disabled) return;\n this.close();\n this.hbCommand.emit(item.key);\n };\n\n /** 触发器键盘:Enter/Space/↓ 打开 */\n private handleTriggerKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (this.trigger === 'hover') return; // hover 触发不需要键盘打开(focus 会展开见下)\n if (isActivationKey(e.key) || e.key === 'ArrowDown') {\n e.preventDefault();\n this.open();\n }\n };\n\n /** 菜单键盘:↑↓ 导航、Enter/Space 选中、Esc 关闭、Home/End 跳首尾 */\n private handleMenuKeydown = (e: KeyboardEvent) => {\n const enabledCount = this.items.length;\n const action = handleListKeyboard(e, {\n activeIndex: this.activeIndex,\n itemCount: enabledCount,\n loop: true,\n });\n switch (action.type) {\n case 'navigate':\n e.preventDefault();\n // 跳过禁用项:最多扫一圈\n {\n let idx = action.index;\n for (let i = 0; i < enabledCount; i++) {\n if (!this.items[idx]?.disabled) break;\n idx = (idx + 1) % enabledCount;\n }\n this.activeIndex = idx;\n }\n break;\n case 'select': {\n e.preventDefault();\n const item = this.items[action.index];\n if (item && !item.disabled) this.handleSelect(item);\n break;\n }\n case 'close':\n e.preventDefault();\n this.close();\n break;\n default:\n break;\n }\n };\n\n render() {\n const triggerEvents = this.trigger === 'hover'\n ? { onMouseEnter: this.show, onMouseLeave: this.hide }\n : { onClick: this.toggle };\n\n return (\n <div\n class=\"hb-dropdown\"\n {...triggerEvents}\n onKeyDown={this.handleTriggerKeydown}\n >\n <div\n class=\"hb-dropdown__trigger\"\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-haspopup=\"menu\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n >\n <slot />\n </div>\n {this.isOpen && (\n <div\n class=\"hb-dropdown__menu\"\n style={{ zIndex: String(getNextZIndex()) }}\n role=\"menu\"\n onKeyDown={this.handleMenuKeydown}\n >\n {this.items.map((item, index) => (\n <div\n class={{\n 'hb-dropdown__item': true,\n 'hb-dropdown__item--disabled': item.disabled,\n 'hb-dropdown__item--divided': item.divided,\n 'hb-dropdown__item--danger': item.danger,\n 'hb-dropdown__item--active': index === this.activeIndex,\n }}\n role=\"menuitem\"\n tabindex={-1}\n aria-disabled={item.disabled ? 'true' : undefined}\n onMouseEnter={() => { if (!item.disabled) this.activeIndex = index; }}\n onClick={() => this.handleSelect(item)}\n >\n {item.label}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as i,g as t,h as o}from"./p-e42dfa95.js";import{g as a,l as n,u as r}from"./p-ecce2b5e.js";import{c as s}from"./p-cc0aeb50.js";const l='/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.container{width:100%}.hidden{display:none}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}} /*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;:host{display:contents}.hb-dialog-wrapper{inset:0;pointer-events:none;position:fixed}.hb-dialog-wrapper--hidden{display:none}.hb-dialog__overlay{background-color:var(--hb-color-bg-mask);inset:0;transition:opacity .3s}.hb-dialog,.hb-dialog__overlay{pointer-events:auto;position:fixed}.hb-dialog{background-color:var(--hb-dialog-bg);border-radius:var(--hb-dialog-radius);box-shadow:var(--hb-dialog-shadow);display:flex;flex-direction:column;left:50%;max-height:90vh;opacity:0;overflow:hidden;top:50%;transform:translate(-50%,-50%)scale(.9);transition:opacity .3s,transform .3s}.hb-dialog--visible{opacity:1;transform:translate(-50%,-50%)scale(1)}.hb-dialog--fullscreen{border-radius:0;height:100vh;left:0;max-height:100vh;top:0;transform:none;width:100%!important}.hb-dialog--fullscreen.hb-dialog--visible{transform:none}.hb-dialog__header{align-items:center;border-bottom:1px solid var(--hb-color-border-secondary);display:flex;justify-content:space-between;padding:var(--hb-spacing-md)var(--hb-spacing-lg)}.hb-dialog__title{color:var(--hb-color-text-primary);font-size:var(--hb-font-size-lg);font-weight:600}.hb-dialog__close{align-items:center;background:0 0;border:none;border-radius:var(--hb-border-radius-sm);color:var(--hb-color-text-secondary);cursor:pointer;display:inline-flex;font-size:18px;height:28px;justify-content:center;transition:all var(--hb-transition-duration);width:28px}.hb-dialog__close:hover{background-color:var(--hb-color-fill-tertiary);color:var(--hb-color-text-primary)}.hb-dialog__body{color:var(--hb-color-text);flex:1;font-size:var(--hb-font-size-base);overflow-y:auto;padding:var(--hb-spacing-lg)}.hb-dialog__footer{align-items:center;border-top:1px solid var(--hb-color-border-secondary);display:flex;gap:var(--hb-spacing-xs);justify-content:flex-end;padding:var(--hb-spacing-sm)var(--hb-spacing-lg)}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}';const d=l;const h=class{constructor(t){e(this,t);this.hbOpen=i(this,"hbOpen",7);this.hbClose=i(this,"hbClose",7);this.hbClosed=i(this,"hbClosed",7)}get el(){return t(this)}modelValue=false;title="";width="50%";fullscreen=false;modal=true;closeOnClickModal=true;closeOnPressEscape=true;showClose=true;destroyOnClose=false;hbOpen;hbClose;hbClosed;zIndex=0;panelRef;trap;handleVisibleChange(e){if(e){this.zIndex=a();if(this.modal)n();this.hbOpen.emit();document.addEventListener("keydown",this.handleKeyDown)}else{if(this.modal)r();document.removeEventListener("keydown",this.handleKeyDown)}}disconnectedCallback(){if(this.modelValue&&this.modal)r();document.removeEventListener("keydown",this.handleKeyDown);this.trap?.disconnect()}componentDidRender(){if(!this.panelRef)return;if(this.modelValue){if(!this.trap){this.trap=s({container:this.panelRef})}this.trap.connect()}else{this.trap?.disconnect()}}handleKeyDown=e=>{if(this.closeOnPressEscape&&e.key==="Escape"){this.close()}};close=()=>{this.modelValue=false;this.hbClose.emit();setTimeout((()=>this.hbClosed.emit()),300)};handleOverlayClick=()=>{if(this.closeOnClickModal)this.close()};render(){if(this.destroyOnClose&&!this.modelValue)return null;return o("div",{class:{"hb-dialog-wrapper":true,"hb-dialog-wrapper--hidden":!this.modelValue}},this.modal&&o("div",{class:"hb-dialog__overlay",style:{zIndex:String(this.zIndex)},onClick:this.handleOverlayClick}),o("div",{ref:e=>this.panelRef=e,class:{"hb-dialog":true,"hb-dialog--fullscreen":this.fullscreen,"hb-dialog--visible":this.modelValue},style:{zIndex:String(this.zIndex+1),width:this.fullscreen?"100%":this.width},role:"dialog","aria-modal":"true"},o("div",{class:"hb-dialog__header"},o("span",{class:"hb-dialog__title"},this.title),this.showClose&&o("button",{type:"button",class:"hb-dialog__close","aria-label":"关闭",onClick:this.close},"×")),o("div",{class:"hb-dialog__body"},o("slot",null)),o("div",{class:"hb-dialog__footer"},o("slot",{name:"footer"}))))}static get watchers(){return{modelValue:["handleVisibleChange"]}}};h.style=d;export{h as hb_dialog};
|
|
2
|
-
//# sourceMappingURL=p-965d4d02.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["dialogCss","HbDialogStyle0","Dialog","modelValue","title","width","fullscreen","modal","closeOnClickModal","closeOnPressEscape","showClose","destroyOnClose","hbOpen","hbClose","hbClosed","zIndex","panelRef","trap","handleVisibleChange","newVal","this","getNextZIndex","lockScroll","emit","document","addEventListener","handleKeyDown","unlockScroll","removeEventListener","disconnectedCallback","disconnect","componentDidRender","createFocusTrap","container","connect","e","key","close","setTimeout","handleOverlayClick","render","h","class","style","String","onClick","ref","el","role","type","name"],"sources":["src/components/Dialog/dialog.css?tag=hb-dialog&encapsulation=shadow","src/components/Dialog/Dialog.tsx"],"sourcesContent":[":host {\n display: contents;\n}\n\n.hb-dialog-wrapper {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n}\n\n.hb-dialog-wrapper--hidden {\n display: none;\n}\n\n.hb-dialog__overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--hb-color-bg-mask);\n transition: opacity 0.3s;\n pointer-events: auto;\n}\n\n.hb-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.9);\n background-color: var(--hb-dialog-bg);\n border-radius: var(--hb-dialog-radius);\n box-shadow: var(--hb-dialog-shadow);\n pointer-events: auto;\n opacity: 0;\n transition: opacity 0.3s, transform 0.3s;\n display: flex;\n flex-direction: column;\n max-height: 90vh;\n overflow: hidden;\n}\n\n.hb-dialog--visible {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n}\n\n.hb-dialog--fullscreen {\n width: 100% !important;\n height: 100vh;\n top: 0;\n left: 0;\n transform: none;\n border-radius: 0;\n max-height: 100vh;\n}\n.hb-dialog--fullscreen.hb-dialog--visible {\n transform: none;\n}\n\n.hb-dialog__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--hb-spacing-md) var(--hb-spacing-lg);\n border-bottom: 1px solid var(--hb-color-border-secondary);\n}\n\n.hb-dialog__title {\n font-size: var(--hb-font-size-lg);\n font-weight: 600;\n color: var(--hb-color-text-primary);\n}\n\n.hb-dialog__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n font-size: 18px;\n color: var(--hb-color-text-secondary);\n cursor: pointer;\n border-radius: var(--hb-border-radius-sm);\n transition: all var(--hb-transition-duration);\n}\n\n.hb-dialog__close:hover {\n background-color: var(--hb-color-fill-tertiary);\n color: var(--hb-color-text-primary);\n}\n\n.hb-dialog__body {\n flex: 1;\n padding: var(--hb-spacing-lg);\n overflow-y: auto;\n color: var(--hb-color-text);\n font-size: var(--hb-font-size-base);\n}\n\n.hb-dialog__footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--hb-spacing-xs);\n padding: var(--hb-spacing-sm) var(--hb-spacing-lg);\n border-top: 1px solid var(--hb-color-border-secondary);\n}\n","import { Component, h, Prop, Event, EventEmitter, Watch, Element } from '@stencil/core';\nimport { lockScroll, unlockScroll, getNextZIndex } from '../../utils/popup-manager';\nimport { createFocusTrap, FocusTrap } from '../../utils/a11y';\n\n/**\n * Dialog 对话框组件\n * 在保留当前页面状态的情况下,告知用户并承载相关操作\n */\n@Component({\n tag: 'hb-dialog',\n styleUrl: 'dialog.css',\n shadow: true,\n})\nexport class Dialog {\n @Element() el: HTMLElement;\n\n /** 是否显示 */\n @Prop({ mutable: true }) modelValue: boolean = false;\n\n /** 标题 */\n @Prop() title: string = '';\n\n /** 宽度 */\n @Prop() width: string = '50%';\n\n /** 是否全屏 */\n @Prop() fullscreen: boolean = false;\n\n /** 是否显示遮罩 */\n @Prop() modal: boolean = true;\n\n /** 是否点击遮罩关闭 */\n @Prop() closeOnClickModal: boolean = true;\n\n /** 是否按 ESC 关闭 */\n @Prop() closeOnPressEscape: boolean = true;\n\n /** 是否显示关闭按钮 */\n @Prop() showClose: boolean = true;\n\n /** 关闭时销毁 */\n @Prop() destroyOnClose: boolean = false;\n\n /** 打开事件 */\n @Event() hbOpen: EventEmitter<void>;\n\n /** 关闭事件 */\n @Event() hbClose: EventEmitter<void>;\n\n /** 已关闭动画结束事件 */\n @Event() hbClosed: EventEmitter<void>;\n\n private zIndex: number = 0;\n private panelRef?: HTMLElement;\n private trap?: FocusTrap;\n\n @Watch('modelValue')\n handleVisibleChange(newVal: boolean) {\n if (newVal) {\n this.zIndex = getNextZIndex();\n if (this.modal) lockScroll();\n this.hbOpen.emit();\n document.addEventListener('keydown', this.handleKeyDown);\n } else {\n if (this.modal) unlockScroll();\n document.removeEventListener('keydown', this.handleKeyDown);\n }\n }\n\n disconnectedCallback() {\n if (this.modelValue && this.modal) unlockScroll();\n document.removeEventListener('keydown', this.handleKeyDown);\n this.trap?.disconnect();\n }\n\n componentDidRender() {\n if (!this.panelRef) return;\n if (this.modelValue) {\n if (!this.trap) {\n this.trap = createFocusTrap({ container: this.panelRef });\n }\n this.trap.connect();\n } else {\n this.trap?.disconnect();\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.closeOnPressEscape && e.key === 'Escape') {\n this.close();\n }\n };\n\n private close = () => {\n this.modelValue = false;\n this.hbClose.emit();\n setTimeout(() => this.hbClosed.emit(), 300);\n };\n\n private handleOverlayClick = () => {\n if (this.closeOnClickModal) this.close();\n };\n\n render() {\n if (this.destroyOnClose && !this.modelValue) return null;\n\n return (\n <div class={{ 'hb-dialog-wrapper': true, 'hb-dialog-wrapper--hidden': !this.modelValue }}>\n {this.modal && (\n <div\n class=\"hb-dialog__overlay\"\n style={{ zIndex: String(this.zIndex) }}\n onClick={this.handleOverlayClick}\n />\n )}\n <div\n ref={(el) => (this.panelRef = el as HTMLElement)}\n class={{\n 'hb-dialog': true,\n 'hb-dialog--fullscreen': this.fullscreen,\n 'hb-dialog--visible': this.modelValue,\n }}\n style={{\n zIndex: String(this.zIndex + 1),\n width: this.fullscreen ? '100%' : this.width,\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div class=\"hb-dialog__header\">\n <span class=\"hb-dialog__title\">{this.title}</span>\n {this.showClose && (\n <button type=\"button\" class=\"hb-dialog__close\" aria-label=\"关闭\" onClick={this.close}>×</button>\n )}\n </div>\n <div class=\"hb-dialog__body\">\n <slot />\n </div>\n <div class=\"hb-dialog__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"+IAAA,MAAMA,EAAY,krPAClB,MAAAC,EAAeD,E,MCYFE,EAAM,M,oJAIQC,WAAsB,MAGvCC,MAAgB,GAGhBC,MAAgB,MAGhBC,WAAsB,MAGtBC,MAAiB,KAGjBC,kBAA6B,KAG7BC,mBAA8B,KAG9BC,UAAqB,KAGrBC,eAA0B,MAGzBC,OAGAC,QAGAC,SAEDC,OAAiB,EACjBC,SACAC,KAGR,mBAAAC,CAAoBC,GAClB,GAAIA,EAAQ,CACVC,KAAKL,OAASM,IACd,GAAID,KAAKb,MAAOe,IAChBF,KAAKR,OAAOW,OACZC,SAASC,iBAAiB,UAAWL,KAAKM,c,KACrC,CACL,GAAIN,KAAKb,MAAOoB,IAChBH,SAASI,oBAAoB,UAAWR,KAAKM,c,EAIjD,oBAAAG,GACE,GAAIT,KAAKjB,YAAciB,KAAKb,MAAOoB,IACnCH,SAASI,oBAAoB,UAAWR,KAAKM,eAC7CN,KAAKH,MAAMa,Y,CAGb,kBAAAC,GACE,IAAKX,KAAKJ,SAAU,OACpB,GAAII,KAAKjB,WAAY,CACnB,IAAKiB,KAAKH,KAAM,CACdG,KAAKH,KAAOe,EAAgB,CAAEC,UAAWb,KAAKJ,U,CAEhDI,KAAKH,KAAKiB,S,KACL,CACLd,KAAKH,MAAMa,Y,EAIPJ,cAAiBS,IACvB,GAAIf,KAAKX,oBAAsB0B,EAAEC,MAAQ,SAAU,CACjDhB,KAAKiB,O,GAIDA,MAAQ,KACdjB,KAAKjB,WAAa,MAClBiB,KAAKP,QAAQU,OACbe,YAAW,IAAMlB,KAAKN,SAASS,QAAQ,IAAI,EAGrCgB,mBAAqB,KAC3B,GAAInB,KAAKZ,kBAAmBY,KAAKiB,OAAO,EAG1C,MAAAG,GACE,GAAIpB,KAAKT,iBAAmBS,KAAKjB,WAAY,OAAO,KAEpD,OACEsC,EAAA,OAAKC,MAAO,CAAE,oBAAqB,KAAM,6BAA8BtB,KAAKjB,aACzEiB,KAAKb,OACJkC,EAAA,OACEC,MAAM,qBACNC,MAAO,CAAE5B,OAAQ6B,OAAOxB,KAAKL,SAC7B8B,QAASzB,KAAKmB,qBAGlBE,EAAA,OACEK,IAAMC,GAAQ3B,KAAKJ,SAAW+B,EAC9BL,MAAO,CACL,YAAa,KACb,wBAAyBtB,KAAKd,WAC9B,qBAAsBc,KAAKjB,YAE7BwC,MAAO,CACL5B,OAAQ6B,OAAOxB,KAAKL,OAAS,GAC7BV,MAAOe,KAAKd,WAAa,OAASc,KAAKf,OAEzC2C,KAAK,SAAQ,aACF,QAEXP,EAAA,OAAKC,MAAM,qBACTD,EAAA,QAAMC,MAAM,oBAAoBtB,KAAKhB,OACpCgB,KAAKV,WACJ+B,EAAA,UAAQQ,KAAK,SAASP,MAAM,mBAAkB,aAAY,KAAKG,QAASzB,KAAKiB,OAAK,MAGtFI,EAAA,OAAKC,MAAM,mBACTD,EAAA,cAEFA,EAAA,OAAKC,MAAM,qBACTD,EAAA,QAAMS,KAAK,a","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["colorPickerCss","HbColorPickerStyle0","ColorPicker","modelValue","disabled","colorFormat","showAlpha","predefine","isOpen","currentColor","hue","saturation","value","alpha","hbChange","hbActiveChange","componentDidLoad","this","updateHSVFromColor","document","addEventListener","handleDocumentClick","disconnectedCallback","removeEventListener","e","target","el","contains","handleValueChange","handleTriggerClick","handleKeyDown","key","preventDefault","normalizeHex","color","c","trim","test","toLowerCase","r","g","b","match","handleColorSelect","normalized","emit","handleSaturationClick","currentTarget","rect","getBoundingClientRect","x","clientX","left","y","clientY","top","Math","max","min","width","height","hex","hsvToHex","handleHueClick","handleInputChange","handleAlphaClick","round","getFormattedValue","handleRgbInputChange","index","rgb","hexToRgb","num","parseInt","isNaN","map","toString","length","join","result","exec","rgbToHsv","diff","h","s","v","hsvToRgb","abs","m","hsv","l","hsvToHsl","sl","render","predefinedColors","hueColor","class","onKeyDown","onClick","role","tabindex","style","backgroundColor","type","onInput","title"],"sources":["src/components/ColorPicker/color-picker.css?tag=hb-color-picker&encapsulation=shadow","src/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":[":host {\n display: inline-block;\n position: relative;\n}\n\n.hb-color-picker {\n display: inline-block;\n}\n\n.hb-color-picker__trigger {\n display: inline-flex;\n align-items: center;\n padding: 4px;\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n cursor: pointer;\n transition: border-color 0.2s;\n}\n\n.hb-color-picker__trigger:hover:not(.hb-color-picker--disabled) {\n border-color: var(--hb-color-primary);\n}\n\n.hb-color-picker__color {\n width: 40px;\n height: 20px;\n border-radius: 2px;\n border: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n}\n\n.hb-color-picker__text {\n margin-left: 8px;\n font-size: 14px;\n color: var(--hb-color-text-regular, #606266);\n}\n\n.hb-color-picker__dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 4px;\n background-color: var(--hb-color-white, #ffffff);\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n z-index: 1000;\n padding: 12px;\n min-width: 300px;\n}\n\n.hb-color-picker__saturation {\n position: relative;\n width: 100%;\n height: 180px;\n border-radius: 4px;\n overflow: hidden;\n cursor: crosshair;\n user-select: none;\n}\n\n.hb-color-picker__saturation-bg {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* 背景色会根据当前色相动态设置 */\n}\n\n.hb-color-picker__saturation-white {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));\n}\n\n.hb-color-picker__saturation-black {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(to top, #000, rgba(0, 0, 0, 0));\n}\n\n.hb-color-picker__saturation-pointer {\n position: absolute;\n width: 12px;\n height: 12px;\n border: 2px solid var(--hb-color-white, #ffffff);\n border-radius: 50%;\n transform: translate(-50%, -50%);\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n}\n\n.hb-color-picker__controls {\n margin-top: 12px;\n}\n\n.hb-color-picker__hue,\n.hb-color-picker__alpha {\n position: relative;\n height: 12px;\n border-radius: 2px;\n margin-bottom: 8px;\n cursor: pointer;\n}\n\n.hb-color-picker__hue {\n position: relative;\n}\n\n.hb-color-picker__hue-bar {\n height: 100%;\n background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n border-radius: 2px;\n}\n\n.hb-color-picker__hue-pointer {\n position: absolute;\n top: 0;\n width: 4px;\n height: 100%;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, 0.3);\n border-radius: 2px;\n transform: translateX(-50%);\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n pointer-events: none;\n}\n\n.hb-color-picker__alpha-bar {\n height: 100%;\n background-image: linear-gradient(45deg, #ccc 25%, transparent 25%), linear-gradient(-45deg, #ccc 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #ccc 75%), linear-gradient(-45deg, transparent 75%, #ccc 75%);\n background-size: 8px 8px;\n background-position: 0 0, 0 4px, 4px -4px, -4px 0px;\n border-radius: 2px;\n}\n\n.hb-color-picker__alpha-pointer {\n position: absolute;\n top: 0;\n width: 4px;\n height: 100%;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, 0.3);\n border-radius: 2px;\n transform: translateX(-50%);\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n pointer-events: none;\n}\n\n.hb-color-picker__input {\n margin-top: 12px;\n}\n\n.hb-color-picker__input-hex {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n font-size: 13px;\n margin-bottom: 8px;\n}\n\n.hb-color-picker__input-rgb {\n display: flex;\n gap: 8px;\n}\n\n.hb-color-picker__input-rgb input {\n flex: 1;\n padding: 6px 8px;\n border: 1px solid var(--hb-border-color, #dcdfe6);\n border-radius: 4px;\n font-size: 13px;\n}\n\n.hb-color-picker__predefine {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--hb-border-color-lighter, #e4e7ed);\n}\n\n.hb-color-picker__predefine-color {\n width: 24px;\n height: 24px;\n border-radius: 4px;\n cursor: pointer;\n border: 2px solid transparent;\n transition: transform 0.2s;\n}\n\n.hb-color-picker__predefine-color:hover {\n transform: scale(1.1);\n}\n\n.hb-color-picker__predefine-color--selected {\n border-color: var(--hb-color-primary);\n transform: scale(1.1);\n}\n\n.hb-color-picker--disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.hb-color-picker--disabled .hb-color-picker__trigger {\n cursor: not-allowed;\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Element, Watch } from '@stencil/core';\n\n/**\n * ColorPicker 颜色选择器组件\n * 用于颜色选择,支持多种格式\n */\n@Component({\n tag: 'hb-color-picker',\n styleUrl: 'color-picker.css',\n shadow: true,\n})\nexport class ColorPicker {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 颜色格式\n */\n @Prop() colorFormat: 'hsl' | 'hsv' | 'hex' | 'rgb' = 'hex';\n\n /**\n * 是否显示透明度\n * @default false\n */\n @Prop() showAlpha: boolean = false;\n\n /**\n * 预定义颜色\n */\n @Prop() predefine?: string[];\n\n @State() isOpen: boolean = false;\n @State() currentColor: string = '#409EFF';\n @State() hue: number = 210; // 色相值 0-360\n @State() saturation: number = 100; // 饱和度 0-100\n @State() value: number = 100; // 明度 0-100\n @State() alpha: number = 100; // 透明度 0-100(仅 showAlpha=true 时生效)\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string>;\n\n /**\n * 激活时触发\n */\n @Event() hbActiveChange: EventEmitter<string>;\n\n componentDidLoad() {\n if (this.modelValue) {\n this.currentColor = this.modelValue;\n this.updateHSVFromColor(this.modelValue);\n } else {\n this.updateHSVFromColor(this.currentColor);\n }\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 if (this.modelValue) {\n this.currentColor = this.modelValue;\n this.updateHSVFromColor(this.modelValue);\n }\n }\n\n private handleTriggerClick = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n };\n\n /** 键盘交互:Escape 关闭面板(对齐 antd / WAI-ARIA) */\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (e.key === 'Escape' && this.isOpen) {\n e.preventDefault();\n this.isOpen = false;\n }\n };\n\n /** 把 3 位简写 hex 规范化为 6 位,避免后续 hexToRgb 解析失败 */\n private normalizeHex(color: string): string | null {\n if (typeof color !== 'string') return null;\n const c = color.trim();\n if (/^#([A-Fa-f0-9]{6})$/.test(c)) return c.toLowerCase();\n if (/^#([A-Fa-f0-9]{3})$/.test(c)) {\n const [, r, g, b] = c.match(/^#(.)(.)(.)$/)!;\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\n }\n return null;\n }\n\n private handleColorSelect = (color: string) => {\n const normalized = this.normalizeHex(color);\n if (!normalized) return; // 非法颜色直接忽略,防止 currentColor 进入不可解析态\n this.currentColor = normalized;\n this.modelValue = normalized;\n this.hbChange.emit(normalized);\n this.hbActiveChange.emit(normalized);\n };\n\n private handleSaturationClick = (e: MouseEvent) => {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n \n // X 轴代表饱和度 (0-100%)\n this.saturation = Math.max(0, Math.min(100, (x / rect.width) * 100));\n // Y 轴代表明度 (0-100%,从上到下)\n this.value = Math.max(0, Math.min(100, 100 - (y / rect.height) * 100));\n \n const hex = this.hsvToHex(this.hue, this.saturation, this.value);\n this.handleColorSelect(hex);\n };\n\n private handleHueClick = (e: MouseEvent) => {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n \n // 色相值 0-360\n this.hue = Math.max(0, Math.min(360, (x / rect.width) * 360));\n \n const hex = this.hsvToHex(this.hue, this.saturation, this.value);\n this.handleColorSelect(hex);\n };\n\n private handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n // 验证 hex 颜色格式(3 位简写会被 handleColorSelect 内部规范化为 6 位)\n if (/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value)) {\n this.handleColorSelect(value);\n }\n };\n\n /** 透明度条点击/拖动:X 轴映射到 alpha 0-100 */\n private handleAlphaClick = (e: MouseEvent) => {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n this.alpha = Math.max(0, Math.min(100, Math.round((x / rect.width) * 100)));\n // alpha 变化触发 active 事件(不改变 hex,但通知消费者透明度变化)\n this.hbActiveChange.emit(this.getFormattedValue());\n };\n\n private handleRgbInputChange = (index: number, value: string) => {\n const rgb = this.hexToRgb(this.currentColor);\n if (rgb) {\n const num = parseInt(value, 10);\n if (!isNaN(num) && num >= 0 && num <= 255) {\n if (index === 0) rgb.r = num;\n else if (index === 1) rgb.g = num;\n else if (index === 2) rgb.b = num;\n \n const hex = `#${[rgb.r, rgb.g, rgb.b].map(x => {\n const hex = x.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('')}`;\n this.handleColorSelect(hex);\n }\n }\n };\n\n private hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n // 先用 normalizeHex 兜底 3 位简写(#abc → #aabbcc),再解析\n const normalized = this.normalizeHex(hex);\n if (!normalized) return null;\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalized);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n }\n\n // RGB 转 HSV\n private rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n r = r / 255;\n g = g / 255;\n b = b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const diff = max - min;\n\n let h = 0;\n if (diff !== 0) {\n if (max === r) {\n h = ((g - b) / diff) % 6;\n } else if (max === g) {\n h = (b - r) / diff + 2;\n } else {\n h = (r - g) / diff + 4;\n }\n }\n h = Math.round(h * 60);\n if (h < 0) h += 360;\n\n const s = max === 0 ? 0 : Math.round((diff / max) * 100);\n const v = Math.round(max * 100);\n\n return { h, s, v };\n }\n\n // HSV 转 RGB\n private hsvToRgb(h: number, s: number, v: number): { r: number; g: number; b: number } {\n s = s / 100;\n v = v / 100;\n\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n\n let r = 0, g = 0, b = 0;\n\n if (h >= 0 && h < 60) {\n r = c; g = x; b = 0;\n } else if (h >= 60 && h < 120) {\n r = x; g = c; b = 0;\n } else if (h >= 120 && h < 180) {\n r = 0; g = c; b = x;\n } else if (h >= 180 && h < 240) {\n r = 0; g = x; b = c;\n } else if (h >= 240 && h < 300) {\n r = x; g = 0; b = c;\n } else if (h >= 300 && h < 360) {\n r = c; g = 0; b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n };\n }\n\n // HSV 转 Hex\n private hsvToHex(h: number, s: number, v: number): string {\n const rgb = this.hsvToRgb(h, s, v);\n return `#${[rgb.r, rgb.g, rgb.b].map(x => {\n const hex = x.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }).join('')}`;\n }\n\n // 从颜色值更新 HSV\n private updateHSVFromColor(color: string) {\n const rgb = this.hexToRgb(color);\n if (rgb) {\n const hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b);\n this.hue = hsv.h;\n this.saturation = hsv.s;\n this.value = hsv.v;\n }\n }\n\n /** 按当前 colorFormat 输出最终颜色字符串(对齐 antd 的 format 行为) */\n private getFormattedValue(): string {\n const rgb = this.hexToRgb(this.currentColor);\n if (!rgb) return this.currentColor;\n switch (this.colorFormat) {\n case 'rgb':\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n case 'hsl': {\n const hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b);\n const [h, s, l] = this.hsvToHsl(hsv.h, hsv.s, hsv.v);\n return `hsl(${h}, ${s}%, ${l}%)`;\n }\n case 'hsv': {\n const hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b);\n return `hsv(${hsv.h}, ${hsv.s}%, ${hsv.v}%)`;\n }\n case 'hex':\n default:\n return this.currentColor;\n }\n }\n\n /** HSV → HSL(HSL 字符串输出用) */\n private hsvToHsl(h: number, s: number, v: number): [number, number, number] {\n s /= 100;\n v /= 100;\n const l = v - (v * s) / 2;\n const sl = l === 0 || l === 1 ? 0 : (v - l) / Math.min(l, 1 - l);\n return [Math.round(h), Math.round(sl * 100), Math.round(l * 100)];\n }\n\n render() {\n const rgb = this.hexToRgb(this.currentColor);\n const predefinedColors = this.predefine || [\n '#ff4500', '#ff8c00', '#ffd700', '#90ee90', '#00ced1',\n '#1e90ff', '#c71585', '#000000', '#ffffff', '#808080',\n ];\n\n // 根据当前色相生成饱和度面板的背景色\n const hueColor = this.hsvToHex(this.hue, 100, 100);\n\n return (\n <div\n class={{\n 'hb-color-picker': true,\n 'hb-color-picker--open': this.isOpen,\n 'hb-color-picker--disabled': this.disabled,\n }}\n onKeyDown={this.handleKeyDown}\n >\n <div\n class=\"hb-color-picker__trigger\"\n onClick={this.handleTriggerClick}\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-haspopup=\"dialog\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleTriggerClick();\n }\n }}\n >\n <div class=\"hb-color-picker__color\" style={{ backgroundColor: this.currentColor }}></div>\n <span class=\"hb-color-picker__text\">{this.currentColor}</span>\n </div>\n {this.isOpen && (\n <div class=\"hb-color-picker__dropdown\" role=\"dialog\">\n <div class=\"hb-color-picker__panel\">\n <div class=\"hb-color-picker__saturation\" onClick={this.handleSaturationClick}>\n <div class=\"hb-color-picker__saturation-bg\" style={{ backgroundColor: hueColor }}></div>\n <div class=\"hb-color-picker__saturation-white\"></div>\n <div class=\"hb-color-picker__saturation-black\"></div>\n <div\n class=\"hb-color-picker__saturation-pointer\"\n style={{\n left: `${this.saturation}%`,\n top: `${100 - this.value}%`,\n }}\n ></div>\n </div>\n <div class=\"hb-color-picker__controls\">\n <div class=\"hb-color-picker__hue\" onClick={this.handleHueClick}>\n <div class=\"hb-color-picker__hue-bar\"></div>\n <div\n class=\"hb-color-picker__hue-pointer\"\n style={{\n left: `${(this.hue / 360) * 100}%`,\n }}\n ></div>\n </div>\n {this.showAlpha && (\n <div class=\"hb-color-picker__alpha\" onClick={this.handleAlphaClick}>\n <div class=\"hb-color-picker__alpha-bar\" style={{ backgroundColor: this.currentColor }}></div>\n <div\n class=\"hb-color-picker__alpha-pointer\"\n style={{ left: `${this.alpha}%` }}\n ></div>\n </div>\n )}\n </div>\n <div class=\"hb-color-picker__input\">\n <input\n type=\"text\"\n class=\"hb-color-picker__input-hex\"\n value={this.currentColor}\n onInput={this.handleInputChange}\n aria-label=\"HEX 颜色值\"\n />\n {rgb && (\n <div class=\"hb-color-picker__input-rgb\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n value={rgb.r}\n onInput={(e) => this.handleRgbInputChange(0, (e.target as HTMLInputElement).value)}\n aria-label=\"红色通道\"\n />\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n value={rgb.g}\n onInput={(e) => this.handleRgbInputChange(1, (e.target as HTMLInputElement).value)}\n aria-label=\"绿色通道\"\n />\n <input\n type=\"number\"\n min=\"0\"\n max=\"255\"\n value={rgb.b}\n onInput={(e) => this.handleRgbInputChange(2, (e.target as HTMLInputElement).value)}\n aria-label=\"蓝色通道\"\n />\n </div>\n )}\n </div>\n {this.predefine && this.predefine.length > 0 && (\n <div class=\"hb-color-picker__predefine\">\n {predefinedColors.map((color) => {\n const normalized = this.normalizeHex(color) || color;\n return (\n <div\n class={{\n 'hb-color-picker__predefine-color': true,\n 'hb-color-picker__predefine-color--selected': normalized === this.currentColor,\n }}\n style={{ backgroundColor: color }}\n onClick={() => this.handleColorSelect(color)}\n title={color}\n ></div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["radioCss","HbRadioStyle0","Radio","modelValue","value","disabled","checked","name","radioId","label","border","size","hbChange","isChecked","handleValueChange","this","updateChecked","componentDidLoad","undefined","handleChange","e","target","preventDefault","emit","render","inputId","Math","random","toString","substr","h","key","class","type","id","onChange"],"sources":["src/components/Radio/radio.css?tag=hb-radio&encapsulation=shadow","src/components/Radio/Radio.tsx"],"sourcesContent":[":host {\n display: inline-block;\n --hb-radio-font-size: 14px;\n --hb-radio-color: var(--hb-color-primary);\n --hb-radio-border-color: var(--hb-border-color, #dcdfe6);\n --hb-radio-text-color: var(--hb-color-text-regular, #606266);\n --hb-radio-disabled-color: var(--hb-color-text-disabled, #c0c4cc);\n}\n\n.hb-radio {\n color: var(--hb-radio-text-color);\n font-weight: 500;\n font-size: var(--hb-radio-font-size);\n position: relative;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n user-select: none;\n margin-right: 30px;\n}\n\n.hb-radio:last-child {\n margin-right: 0;\n}\n\n.hb-radio__input {\n white-space: nowrap;\n cursor: pointer;\n outline: none;\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n}\n\n.hb-radio__original {\n opacity: 0;\n outline: none;\n position: absolute;\n margin: 0;\n width: 0;\n height: 0;\n z-index: -1;\n}\n\n.hb-radio__inner {\n border: 1px solid var(--hb-radio-border-color);\n border-radius: 50%;\n width: 14px;\n height: 14px;\n background-color: var(--hb-color-white, #ffffff);\n position: relative;\n cursor: pointer;\n display: inline-block;\n box-sizing: border-box;\n transition: all 0.2s;\n}\n\n.hb-radio__inner::after {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background-color: var(--hb-color-white, #ffffff);\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%) scale(0);\n transition: transform 0.15s ease-in;\n}\n\n.hb-radio--checked .hb-radio__inner {\n border-color: var(--hb-radio-color);\n background: var(--hb-radio-color);\n}\n\n.hb-radio--checked .hb-radio__inner::after {\n transform: translate(-50%, -50%) scale(1);\n}\n\n.hb-radio__label {\n padding-left: 8px;\n line-height: 1;\n font-size: var(--hb-radio-font-size);\n}\n\n.hb-radio--disabled {\n cursor: not-allowed;\n}\n\n.hb-radio--disabled .hb-radio__inner {\n background-color: var(--hb-fill-color-light, #f5f7fa);\n border-color: var(--hb-radio-border-color);\n cursor: not-allowed;\n}\n\n.hb-radio--disabled .hb-radio__label {\n color: var(--hb-radio-disabled-color);\n cursor: not-allowed;\n}\n\n.hb-radio--border {\n padding: 9px 15px 9px 9px;\n border-radius: 4px;\n border: 1px solid var(--hb-radio-border-color);\n box-sizing: border-box;\n white-space: nowrap;\n}\n\n.hb-radio--border.hb-radio--checked {\n border-color: var(--hb-radio-color);\n}\n\n.hb-radio--border.hb-radio--disabled {\n border-color: var(--hb-radio-border-color);\n cursor: not-allowed;\n}\n\n.hb-radio--small {\n font-size: 12px;\n}\n\n.hb-radio--small .hb-radio__inner {\n width: 12px;\n height: 12px;\n}\n\n.hb-radio--small .hb-radio__inner::after {\n width: 3px;\n height: 3px;\n}\n\n.hb-radio--small .hb-radio__label {\n padding-left: 6px;\n}\n\n.hb-radio--large {\n font-size: 16px;\n}\n\n.hb-radio--large .hb-radio__inner {\n width: 16px;\n height: 16px;\n}\n\n.hb-radio--large .hb-radio__inner::after {\n width: 5px;\n height: 5px;\n}\n\n.hb-radio--large .hb-radio__label {\n padding-left: 10px;\n}\n\n.hb-radio:hover:not(.hb-radio--disabled) .hb-radio__inner {\n border-color: var(--hb-radio-color);\n}\n\n","import { Component, h, Prop, Event, EventEmitter, State, Watch, Element } from '@stencil/core';\n\n/**\n * Radio 单选框组件\n * 在一组备选项中进行单选\n */\n@Component({\n tag: 'hb-radio',\n styleUrl: 'radio.css',\n shadow: true,\n})\nexport class Radio {\n @Element() el: HTMLElement;\n\n /**\n * 绑定值\n */\n @Prop({ mutable: true }) modelValue?: string | number;\n\n /**\n * 单选框的值\n */\n @Prop() value?: string | number;\n\n /**\n * 是否禁用\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 是否选中\n * @default false\n */\n @Prop() checked: boolean = false;\n\n /**\n * 原生 name 属性\n */\n @Prop() name?: string;\n\n /**\n * 原生 id 属性\n */\n @Prop() radioId?: string;\n\n /**\n * 文本标签\n */\n @Prop() label?: string;\n\n /**\n * 是否显示边框\n * @default false\n */\n @Prop() border: boolean = false;\n\n /**\n * 尺寸\n */\n @Prop() size: 'large' | 'default' | 'small' = 'default';\n\n /**\n * 值改变事件\n */\n @Event() hbChange: EventEmitter<string | number | boolean>;\n\n @State() isChecked: boolean = false;\n\n @Watch('modelValue')\n @Watch('checked')\n @Watch('value')\n handleValueChange() {\n this.updateChecked();\n }\n\n componentDidLoad() {\n this.updateChecked();\n }\n\n private updateChecked() {\n if (this.value !== undefined) {\n // 在 radio group 中\n this.isChecked = this.modelValue === this.value;\n } else {\n // 单个 radio\n this.isChecked = this.checked;\n }\n }\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n \n if (this.disabled) {\n e.preventDefault();\n return;\n }\n\n if (this.value !== undefined) {\n // 在 radio group 中\n this.modelValue = this.value;\n this.isChecked = true;\n this.hbChange.emit(this.value);\n } else {\n // 单个 radio\n this.isChecked = target.checked;\n if (target.checked && this.value !== undefined) {\n this.hbChange.emit(this.value);\n } else {\n this.hbChange.emit(target.checked);\n }\n }\n };\n\n render() {\n const inputId = this.radioId || `hb-radio-${Math.random().toString(36).substr(2, 9)}`;\n \n return (\n <label\n class={{\n 'hb-radio': true,\n 'hb-radio--checked': this.isChecked,\n 'hb-radio--disabled': this.disabled,\n 'hb-radio--border': this.border,\n [`hb-radio--${this.size}`]: true,\n }}\n >\n <span class=\"hb-radio__input\">\n <input\n type=\"radio\"\n id={inputId}\n name={this.name}\n checked={this.isChecked}\n disabled={this.disabled}\n value={this.value}\n onChange={this.handleChange}\n class=\"hb-radio__original\"\n />\n <span class=\"hb-radio__inner\"></span>\n </span>\n {(this.label || this.value !== undefined) && (\n <span class=\"hb-radio__label\">\n <slot>{this.label || this.value}</slot>\n </span>\n )}\n </label>\n );\n }\n}\n\n"],"mappings":"yDAAA,MAAMA,EAAW,mvQACjB,MAAAC,EAAeD,E,MCUFE,EAAK,M,oFAMSC,WAKjBC,MAMAC,SAAoB,MAMpBC,QAAmB,MAKnBC,KAKAC,QAKAC,MAMAC,OAAkB,MAKlBC,KAAsC,UAKrCC,SAEAC,UAAqB,MAK9B,iBAAAC,GACEC,KAAKC,e,CAGP,gBAAAC,GACEF,KAAKC,e,CAGC,aAAAA,GACN,GAAID,KAAKX,QAAUc,UAAW,CAE5BH,KAAKF,UAAYE,KAAKZ,aAAeY,KAAKX,K,KACrC,CAELW,KAAKF,UAAYE,KAAKT,O,EAIlBa,aAAgBC,IACtB,MAAMC,EAASD,EAAEC,OAEjB,GAAIN,KAAKV,SAAU,CACjBe,EAAEE,iBACF,M,CAGF,GAAIP,KAAKX,QAAUc,UAAW,CAE5BH,KAAKZ,WAAaY,KAAKX,MACvBW,KAAKF,UAAY,KACjBE,KAAKH,SAASW,KAAKR,KAAKX,M,KACnB,CAELW,KAAKF,UAAYQ,EAAOf,QACxB,GAAIe,EAAOf,SAAWS,KAAKX,QAAUc,UAAW,CAC9CH,KAAKH,SAASW,KAAKR,KAAKX,M,KACnB,CACLW,KAAKH,SAASW,KAAKF,EAAOf,Q,IAKhC,MAAAkB,GACE,MAAMC,EAAUV,KAAKP,SAAW,YAAYkB,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,KAEjF,OACEC,EAAA,SAAAC,IAAA,2CACEC,MAAO,CACL,WAAY,KACZ,oBAAqBjB,KAAKF,UAC1B,qBAAsBE,KAAKV,SAC3B,mBAAoBU,KAAKL,OACzB,CAAC,aAAaK,KAAKJ,QAAS,OAG9BmB,EAAA,QAAAC,IAAA,2CAAMC,MAAM,mBACVF,EAAA,SAAAC,IAAA,2CACEE,KAAK,QACLC,GAAIT,EACJlB,KAAMQ,KAAKR,KACXD,QAASS,KAAKF,UACdR,SAAUU,KAAKV,SACfD,MAAOW,KAAKX,MACZ+B,SAAUpB,KAAKI,aACfa,MAAM,uBAERF,EAAA,QAAAC,IAAA,2CAAMC,MAAM,sBAEZjB,KAAKN,OAASM,KAAKX,QAAUc,YAC7BY,EAAA,QAAAC,IAAA,2CAAMC,MAAM,mBACVF,EAAA,QAAAC,IAAA,4CAAOhB,KAAKN,OAASM,KAAKX,Q","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["collapseCss","HbCollapseStyle0","Collapse","accordion","componentDidLoad","this","el","addEventListener","e","active","detail","current","target","querySelectorAll","forEach","item","render","h","key","class"],"sources":["src/components/Collapse/collapse.css?tag=hb-collapse&encapsulation=shadow","src/components/Collapse/Collapse.tsx"],"sourcesContent":[":host { display: block; }\n.hb-collapse { border-top: 1px solid var(--hb-color-border-secondary); border-bottom: 1px solid var(--hb-color-border-secondary); }\n","import { Component, h, Prop, Element } from '@stencil/core';\n\n@Component({ tag: 'hb-collapse', styleUrl: 'collapse.css', shadow: true })\nexport class Collapse {\n @Element() el: HTMLElement;\n\n /** 是否开启手风琴模式(同时仅展开一项) */\n @Prop({ mutable: true }) accordion: boolean = false;\n\n componentDidLoad() {\n this.el.addEventListener(\n 'hbCollapseItemToggle',\n ((e: CustomEvent) => {\n if (!this.accordion) return;\n const { active } = e.detail;\n // 手风琴模式:某项展开时,关闭其余项\n if (!active) return;\n const current = e.target as HTMLElement;\n this.el.querySelectorAll('hb-collapse-item').forEach((item) => {\n if (item !== current) {\n (item as any).active = false;\n }\n });\n }) as EventListener,\n );\n }\n\n render() {\n return (\n <div class={{ 'hb-collapse': true, 'hb-collapse--accordion': this.accordion }}>\n <slot />\n </div>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAc,0sLACpB,MAAAC,EAAeD,E,MCEFE,EAAQ,M,iDAIMC,UAAqB,MAE9C,gBAAAC,GACEC,KAAKC,GAAGC,iBACN,wBACEC,IACA,IAAKH,KAAKF,UAAW,OACrB,MAAMM,OAAEA,GAAWD,EAAEE,OAErB,IAAKD,EAAQ,OACb,MAAME,EAAUH,EAAEI,OAClBP,KAAKC,GAAGO,iBAAiB,oBAAoBC,SAASC,IACpD,GAAIA,IAASJ,EAAS,CACnBI,EAAaN,OAAS,K,IAG5B,G,CAIL,MAAAO,GACE,OACEC,EAAA,OAAAC,IAAA,2CAAKC,MAAO,CAAE,cAAe,KAAM,yBAA0Bd,KAAKF,YAChEc,EAAA,QAAAC,IAAA,6C","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,g as t,h as a}from"./p-e42dfa95.js";import{i as s}from"./p-cc0aeb50.js";const i=class{constructor(t){e(this,t)}get el(){return t(this)}key="";title="";disabled=false;active=false;isOpen=false;componentDidLoad(){this.isOpen=this.active}handleActiveChange(e){this.isOpen=e}toggle=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;this.active=this.isOpen;this.el.dispatchEvent(new CustomEvent("hbCollapseItemToggle",{detail:{key:this.key,active:this.isOpen},bubbles:true,composed:true}))};handleHeaderKeydown=e=>{if(this.disabled)return;if(s(e.key)){e.preventDefault();this.toggle()}};render(){return a("div",{key:"98bb39328b3f8286bdc192bafd79fc5745c6e44c",class:{"hb-collapse-item":true,"hb-collapse-item--active":this.isOpen,"hb-collapse-item--disabled":this.disabled}},a("div",{key:"777f4d272ac88422ac0035e7f58034535b419ec7",class:"hb-collapse-item__header",role:"button",tabindex:this.disabled?-1:0,"aria-expanded":this.isOpen?"true":"false","aria-disabled":this.disabled?"true":undefined,onClick:this.toggle,onKeyDown:this.handleHeaderKeydown},a("span",{key:"db1edadb885a81efd8b45d196d05da282a006cc5",class:"hb-collapse-item__title"},this.title),a("span",{key:"551dd3ecdda882b3bb32c0ee88203e5dfa73239c",class:{"hb-collapse-item__arrow":true,"hb-collapse-item__arrow--open":this.isOpen}},"▶")),a("div",{key:"292b47291364947872dc2fa71f470c93ace7fce8",class:{"hb-collapse-item__wrapper":true,"hb-collapse-item__wrapper--open":this.isOpen}},a("div",{key:"051d493b7d5f7f907480aad1c6b0684e83d1bd03",class:"hb-collapse-item__content"},a("slot",{key:"5f7e1afc4e416d9cf6f88925a7e06ea089572c7c"}))))}static get watchers(){return{active:["handleActiveChange"]}}};export{i as hb_collapse_item};
|
|
2
|
-
//# sourceMappingURL=p-c6c91664.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["CollapseItem","key","title","disabled","active","isOpen","componentDidLoad","this","handleActiveChange","val","toggle","el","dispatchEvent","CustomEvent","detail","bubbles","composed","handleHeaderKeydown","e","isActivationKey","preventDefault","render","h","class","role","tabindex","undefined","onClick","onKeyDown"],"sources":["src/components/Collapse/CollapseItem.tsx"],"sourcesContent":["import { Component, h, Prop, State, Element, Watch } from '@stencil/core';\nimport { isActivationKey } from '../../utils/a11y';\n\n@Component({ tag: 'hb-collapse-item', shadow: true })\nexport class CollapseItem {\n @Element() el: HTMLElement;\n\n /** 唯一标识(手风琴模式协调用) */\n @Prop() key: string = '';\n\n /** 标题 */\n @Prop() title: string = '';\n\n /** 是否禁用 */\n @Prop() disabled: boolean = false;\n\n /** 是否展开(受控;由父级 hb-collapse 在手风琴模式下联动) */\n @Prop({ mutable: true }) active: boolean = false;\n\n @State() isOpen: boolean = false;\n\n componentDidLoad() {\n this.isOpen = this.active;\n }\n\n @Watch('active')\n handleActiveChange(val: boolean) {\n this.isOpen = val;\n }\n\n private toggle = () => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n this.active = this.isOpen;\n // 通知父级 hb-collapse(composed 穿越 shadow 边界,用于手风琴协调)\n this.el.dispatchEvent(\n new CustomEvent('hbCollapseItemToggle', {\n detail: { key: this.key, active: this.isOpen },\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n private handleHeaderKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n if (isActivationKey(e.key)) {\n e.preventDefault();\n this.toggle();\n }\n };\n\n render() {\n return (\n <div\n class={{ 'hb-collapse-item': true, 'hb-collapse-item--active': this.isOpen, 'hb-collapse-item--disabled': this.disabled }}\n >\n <div\n class=\"hb-collapse-item__header\"\n role=\"button\"\n tabindex={this.disabled ? -1 : 0}\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.toggle}\n onKeyDown={this.handleHeaderKeydown}\n >\n <span class=\"hb-collapse-item__title\">{this.title}</span>\n <span class={{ 'hb-collapse-item__arrow': true, 'hb-collapse-item__arrow--open': this.isOpen }}>▶</span>\n </div>\n <div class={{ 'hb-collapse-item__wrapper': true, 'hb-collapse-item__wrapper--open': this.isOpen }}>\n <div class=\"hb-collapse-item__content\">\n <slot />\n </div>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"4FAIaA,EAAY,M,iDAIfC,IAAc,GAGdC,MAAgB,GAGhBC,SAAoB,MAGHC,OAAkB,MAElCC,OAAkB,MAE3B,gBAAAC,GACEC,KAAKF,OAASE,KAAKH,M,CAIrB,kBAAAI,CAAmBC,GACjBF,KAAKF,OAASI,C,CAGRC,OAAS,KACf,GAAIH,KAAKJ,SAAU,OACnBI,KAAKF,QAAUE,KAAKF,OACpBE,KAAKH,OAASG,KAAKF,OAEnBE,KAAKI,GAAGC,cACN,IAAIC,YAAY,uBAAwB,CACtCC,OAAQ,CAAEb,IAAKM,KAAKN,IAAKG,OAAQG,KAAKF,QACtCU,QAAS,KACTC,SAAU,OAEb,EAGKC,oBAAuBC,IAC7B,GAAIX,KAAKJ,SAAU,OACnB,GAAIgB,EAAgBD,EAAEjB,KAAM,CAC1BiB,EAAEE,iBACFb,KAAKG,Q,GAIT,MAAAW,GACE,OACEC,EAAA,OAAArB,IAAA,2CACEsB,MAAO,CAAE,mBAAoB,KAAM,2BAA4BhB,KAAKF,OAAQ,6BAA8BE,KAAKJ,WAE/GmB,EAAA,OAAArB,IAAA,2CACEsB,MAAM,2BACNC,KAAK,SACLC,SAAUlB,KAAKJ,UAAY,EAAI,EAAC,gBACjBI,KAAKF,OAAS,OAAS,QAAO,gBAC9BE,KAAKJ,SAAW,OAASuB,UACxCC,QAASpB,KAAKG,OACdkB,UAAWrB,KAAKU,qBAEhBK,EAAA,QAAArB,IAAA,2CAAMsB,MAAM,2BAA2BhB,KAAKL,OAC5CoB,EAAA,QAAArB,IAAA,2CAAMsB,MAAO,CAAE,0BAA2B,KAAM,gCAAiChB,KAAKF,SAAQ,MAEhGiB,EAAA,OAAArB,IAAA,2CAAKsB,MAAO,CAAE,4BAA6B,KAAM,kCAAmChB,KAAKF,SACvFiB,EAAA,OAAArB,IAAA,2CAAKsB,MAAM,6BACTD,EAAA,QAAArB,IAAA,+C","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["stepsCss","HbStepsStyle0","Steps","active","processStatus","alignCenter","direction","steps","componentDidLoad","items","this","el","querySelectorAll","Array","from","map","item","node","title","getAttribute","description","undefined","icon","status","getStatus","index","meta","renderIcon","h","name","size","String","render","key","class","role","step","i","length"],"sources":["src/components/Steps/steps.css?tag=hb-steps&encapsulation=shadow","src/components/Steps/Steps.tsx"],"sourcesContent":[":host { display: block; }\n.hb-steps { display: flex; }\n.hb-steps--vertical { flex-direction: column; }\n.hb-steps__item { flex: 1; display: flex; flex-direction: column; align-items: center; position: relative; }\n.hb-steps--vertical .hb-steps__item { flex-direction: row; align-items: flex-start; gap: var(--hb-spacing-sm); padding-bottom: var(--hb-spacing-md); }\n.hb-steps__head { display: flex; align-items: center; width: 100%; }\n.hb-steps__icon {\n width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center;\n font-size: var(--hb-font-size-sm); font-weight: 600; flex-shrink: 0;\n background: var(--hb-color-fill); color: var(--hb-color-text-secondary); transition: all 0.3s;\n}\n.hb-steps__item--process .hb-steps__icon { background: var(--hb-color-primary); color: #fff; }\n.hb-steps__item--finish .hb-steps__icon { background: var(--hb-color-primary); color: #fff; }\n.hb-steps__item--error .hb-steps__icon { background: var(--hb-color-danger); color: #fff; }\n.hb-steps__line { flex: 1; height: 2px; background: var(--hb-color-border-secondary); margin: 0 var(--hb-spacing-xs); }\n.hb-steps__item--finish .hb-steps__line { background: var(--hb-color-primary); }\n.hb-steps__main { text-align: center; margin-top: var(--hb-spacing-xs); }\n.hb-steps--vertical .hb-steps__main { text-align: left; }\n\n/* 对齐方式(alignCenter prop):默认 false 时图标与文字左对齐,true 时居中 */\n.hb-steps:not(.hb-steps--align-center) .hb-steps__item { align-items: flex-start; }\n.hb-steps:not(.hb-steps--align-center) .hb-steps__main { text-align: left; }\n.hb-steps__title { font-size: var(--hb-font-size-sm); font-weight: 600; }\n.hb-steps__item--process .hb-steps__title { color: var(--hb-color-primary); }\n.hb-steps__description { font-size: var(--hb-font-size-xs); color: var(--hb-color-text-secondary); margin-top: 2px; }\n","import { Component, h, Prop, State, Element } from '@stencil/core';\n\nexport type StepStatus = 'wait' | 'process' | 'finish' | 'error';\n\ninterface StepMeta {\n title: string;\n description?: string;\n /** 自定义图标名/标记('hb-icon' name 或文本)。undefined 表示用默认序号/状态图标 */\n icon?: string;\n /** 子项显式状态覆盖(不指定则按 active 自动推导) */\n status?: StepStatus;\n}\n\n@Component({ tag: 'hb-steps', styleUrl: 'steps.css', shadow: true })\nexport class Steps {\n @Element() el: HTMLElement;\n @Prop() active: number = 0;\n @Prop() processStatus: StepStatus = 'process';\n @Prop() alignCenter: boolean = false;\n @Prop() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @State() steps: StepMeta[] = [];\n\n componentDidLoad() {\n const items = this.el.querySelectorAll('hb-step');\n this.steps = Array.from(items).map((item) => {\n const node = item as HTMLElement;\n // 仅用 getAttribute:hb-step 的 @Prop() status 默认值为 'wait',\n // 若读 (node as any).status 会拿到默认值,从而错误地覆盖 active 推导。\n // 用户显式在 HTML 上写 status=\"xxx\" 时 getAttribute 才有值。\n return {\n title: node.getAttribute('title') || '',\n description: node.getAttribute('description') || undefined,\n icon: node.getAttribute('icon') || undefined,\n status: (node.getAttribute('status') || undefined) as StepStatus | undefined,\n };\n });\n }\n\n private getStatus(index: number): StepStatus {\n const meta = this.steps[index];\n // 子项显式 status 优先(仅当用户在 HTML 上写了 status 属性)\n if (meta && meta.status) return meta.status;\n if (index < this.active) return 'finish';\n if (index === this.active) return this.processStatus;\n return 'wait';\n }\n\n /** 渲染图标:子项自定义 icon 优先;否则按状态(finish=✓、error=✕、其余=序号) */\n private renderIcon(index: number): any {\n const meta = this.steps[index];\n if (meta && meta.icon) {\n // 自定义图标名:若与 hb-icon 内置图标同名则渲染 hb-icon,否则按文本渲染\n return <hb-icon name={meta.icon} size={16} aria-hidden=\"true\" />;\n }\n const status = this.getStatus(index);\n if (status === 'finish') return '✓';\n if (status === 'error') return '✕';\n return String(index + 1);\n }\n\n render() {\n return (\n <ol\n class={{ 'hb-steps': true, [`hb-steps--${this.direction}`]: true, 'hb-steps--align-center': this.alignCenter }}\n role=\"list\"\n >\n {this.steps.map((step, i) => {\n const status = this.getStatus(i);\n return (\n <li\n class={{ 'hb-steps__item': true, [`hb-steps__item--${status}`]: true }}\n role=\"listitem\"\n aria-current={status === 'process' ? 'step' : undefined}\n aria-disabled={step.status === 'wait' && i > this.active ? 'true' : undefined}\n >\n <div class=\"hb-steps__head\">\n <span class=\"hb-steps__icon\" aria-hidden=\"true\">{this.renderIcon(i)}</span>\n {i < this.steps.length - 1 && <div class=\"hb-steps__line\"></div>}\n </div>\n <div class=\"hb-steps__main\">\n <div class=\"hb-steps__title\">{step.title}</div>\n {step.description && <div class=\"hb-steps__description\">{step.description}</div>}\n </div>\n </li>\n );\n })}\n </ol>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAW,qrOACjB,MAAAC,EAAeD,E,MCaFE,EAAK,M,iDAERC,OAAiB,EACjBC,cAA4B,UAC5BC,YAAuB,MACvBC,UAAuC,aAEtCC,MAAoB,GAE7B,gBAAAC,GACE,MAAMC,EAAQC,KAAKC,GAAGC,iBAAiB,WACvCF,KAAKH,MAAQM,MAAMC,KAAKL,GAAOM,KAAKC,IAClC,MAAMC,EAAOD,EAIb,MAAO,CACLE,MAAOD,EAAKE,aAAa,UAAY,GACrCC,YAAaH,EAAKE,aAAa,gBAAkBE,UACjDC,KAAML,EAAKE,aAAa,SAAWE,UACnCE,OAASN,EAAKE,aAAa,WAAaE,UACzC,G,CAIG,SAAAG,CAAUC,GAChB,MAAMC,EAAOhB,KAAKH,MAAMkB,GAExB,GAAIC,GAAQA,EAAKH,OAAQ,OAAOG,EAAKH,OACrC,GAAIE,EAAQf,KAAKP,OAAQ,MAAO,SAChC,GAAIsB,IAAUf,KAAKP,OAAQ,OAAOO,KAAKN,cACvC,MAAO,M,CAID,UAAAuB,CAAWF,GACjB,MAAMC,EAAOhB,KAAKH,MAAMkB,GACxB,GAAIC,GAAQA,EAAKJ,KAAM,CAErB,OAAOM,EAAA,WAASC,KAAMH,EAAKJ,KAAMQ,KAAM,GAAE,cAAc,Q,CAEzD,MAAMP,EAASb,KAAKc,UAAUC,GAC9B,GAAIF,IAAW,SAAU,MAAO,IAChC,GAAIA,IAAW,QAAS,MAAO,IAC/B,OAAOQ,OAAON,EAAQ,E,CAGxB,MAAAO,GACE,OACEJ,EAAA,MAAAK,IAAA,2CACEC,MAAO,CAAE,WAAY,KAAM,CAAC,aAAaxB,KAAKJ,aAAc,KAAM,yBAA0BI,KAAKL,aACjG8B,KAAK,QAEJzB,KAAKH,MAAMQ,KAAI,CAACqB,EAAMC,KACrB,MAAMd,EAASb,KAAKc,UAAUa,GAC9B,OACET,EAAA,MACEM,MAAO,CAAE,iBAAkB,KAAM,CAAC,mBAAmBX,KAAW,MAChEY,KAAK,WAAU,eACDZ,IAAW,UAAY,OAASF,UAAS,gBACxCe,EAAKb,SAAW,QAAUc,EAAI3B,KAAKP,OAAS,OAASkB,WAEpEO,EAAA,OAAKM,MAAM,kBACTN,EAAA,QAAMM,MAAM,iBAAgB,cAAa,QAAQxB,KAAKiB,WAAWU,IAChEA,EAAI3B,KAAKH,MAAM+B,OAAS,GAAKV,EAAA,OAAKM,MAAM,oBAE3CN,EAAA,OAAKM,MAAM,kBACTN,EAAA,OAAKM,MAAM,mBAAmBE,EAAKlB,OAClCkB,EAAKhB,aAAeQ,EAAA,OAAKM,MAAM,yBAAyBE,EAAKhB,cAE7D,I","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function e(e){return e==="Enter"||e===" "||e==="Spacebar"}const t=["a[href]","button:not([disabled])","textarea:not([disabled])","input:not([disabled])","select:not([disabled])",'[tabindex]:not([tabindex="-1"])','[contenteditable="true"]'].join(",");function n(e){return Array.from(e.querySelectorAll(t)).filter((e=>e.getAttribute("aria-hidden")!=="true"&&e.style.display!=="none"))}function r(e){const{container:t,autoFocus:r=true,returnFocusTo:o}=e;let a=false;let c=null;const i=e=>{if(e.key!=="Tab")return;const r=n(t);if(r.length===0){e.preventDefault();t.focus();return}const o=r[0];const a=r[r.length-1];const c=document.activeElement;if(e.shiftKey){if(c===o||!t.contains(c)){e.preventDefault();a.focus()}}else{if(c===a){e.preventDefault();o.focus()}}};const s=()=>{if(a)return;a=true;c=o??document.activeElement;t.addEventListener("keydown",i);if(r){const e=n(t);(e[0]??t).focus()}};const u=()=>{if(!a)return;a=false;t.removeEventListener("keydown",i);if(c&&typeof c.focus==="function"){c.focus()}c=null};return{connect:s,disconnect:u}}function o(e,t){const{activeIndex:n,itemCount:r,loop:o=true}=t;if(r<=0)return{type:"none"};const a=e=>(e+r)%r;const c=e=>Math.max(0,Math.min(e,r-1));switch(e.key){case"ArrowDown":case"ArrowRight":return{type:"navigate",index:o?a(n+1):c(n+1)};case"ArrowUp":case"ArrowLeft":return{type:"navigate",index:o?a(n-1):c(n-1)};case"Home":return{type:"navigate",index:0};case"End":return{type:"navigate",index:r-1};case"Enter":case" ":case"Spacebar":return n>=0?{type:"select",index:n}:{type:"none"};case"Escape":return{type:"close"};default:return{type:"none"}}}export{r as c,o as h,e as i};
|
|
2
|
-
//# sourceMappingURL=p-cc0aeb50.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["isActivationKey","key","FOCUSABLE_SELECTOR","join","getFocusableElements","container","Array","from","querySelectorAll","filter","el","getAttribute","style","display","createFocusTrap","options","autoFocus","returnFocusTo","active","previouslyFocused","handleKeydown","e","focusable","length","preventDefault","focus","first","last","activeEl","document","activeElement","shiftKey","contains","connect","addEventListener","disconnect","removeEventListener","handleListKeyboard","event","activeIndex","itemCount","loop","type","clamp","idx","within","Math","max","min","index"],"sources":["src/utils/a11y.ts"],"sourcesContent":["/**\n * 无障碍(a11y)工具集\n * 统一 ARIA 属性辅助、焦点陷阱、列表键盘导航等在交互组件(Dialog / Drawer / Menu /\n * Dropdown / Select 等)中重复出现且容易写错的可访问性逻辑。\n *\n * 参考标准:WAI-ARIA Authoring Practices 1.2。\n */\n\n/** 判定按键是否为「激活」键(Enter / Space),用于自定义可聚焦元素的点击替代 */\nexport function isActivationKey(key: string | undefined): boolean {\n return key === 'Enter' || key === ' ' || key === 'Spacebar';\n}\n\n/** 查询容器内可聚焦的元素顺序(tabindex >= 0 的语义元素) */\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'textarea:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nexport function getFocusableElements(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.getAttribute('aria-hidden') !== 'true' && el.style.display !== 'none',\n );\n}\n\n/** 焦点陷阱选项 */\nexport interface FocusTrapOptions {\n /** 焦点受限的容器元素 */\n container: HTMLElement;\n /** 打开时是否自动聚焦容器内首个可聚焦元素 */\n autoFocus?: boolean;\n /** 容器激活前的元素(用于关闭时归还焦点) */\n returnFocusTo?: HTMLElement | null;\n}\n\n/** 焦点陷阱句柄 */\nexport interface FocusTrap {\n /** 启用:绑定 Tab 拦截,可选自动聚焦 */\n connect: () => void;\n /** 关闭:解除拦截,归还焦点 */\n disconnect: () => void;\n}\n\n/**\n * 创建焦点陷阱(Dialog / Drawer 打开时把 Tab 循环限制在容器内)。\n * 关键点:Tab 与 Shift+Tab 在容器边界时回环到另一端,防止焦点逃逸到背景。\n * 返回句柄,组件在打开时 connect()、关闭时 disconnect()。\n */\nexport function createFocusTrap(options: FocusTrapOptions): FocusTrap {\n const { container, autoFocus = true, returnFocusTo } = options;\n let active = false;\n let previouslyFocused: HTMLElement | null = null;\n\n const handleKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const focusable = getFocusableElements(container);\n if (focusable.length === 0) {\n e.preventDefault();\n container.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const activeEl = document.activeElement;\n\n if (e.shiftKey) {\n if (activeEl === first || !container.contains(activeEl)) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (activeEl === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n\n const connect = () => {\n if (active) return;\n active = true;\n previouslyFocused = (returnFocusTo ?? document.activeElement) as HTMLElement | null;\n container.addEventListener('keydown', handleKeydown);\n if (autoFocus) {\n const focusable = getFocusableElements(container);\n (focusable[0] ?? container).focus();\n }\n };\n\n const disconnect = () => {\n if (!active) return;\n active = false;\n container.removeEventListener('keydown', handleKeydown);\n if (previouslyFocused && typeof previouslyFocused.focus === 'function') {\n previouslyFocused.focus();\n }\n previouslyFocused = null;\n };\n\n return { connect, disconnect };\n}\n\n/** 列表键盘导航产生的动作 */\nexport type ListKeyAction =\n | { type: 'navigate'; index: number }\n | { type: 'select'; index: number }\n | { type: 'close' }\n | { type: 'none' };\n\n/** 列表键盘导航参数 */\nexport interface ListKeyboardOptions {\n /** 当前高亮项索引(-1 表示无高亮) */\n activeIndex: number;\n /** 列表项总数 */\n itemCount: number;\n /** 是否允许循环(首尾跳转) */\n loop?: boolean;\n}\n\n/**\n * 列表 / 菜单 / 下拉选项的键盘导航核心逻辑(listbox / menu / combobox 通用)。\n * 返回应执行的动作,由调用方据此更新 activeIndex / 触发选中 / 关闭。\n *\n * 支持:ArrowDown/ArrowUp(竖排)/ArrowRight/ArrowLeft(横排)移动、Home/End 跳首尾、\n * Enter/Space 选中、Escape 关闭。\n */\nexport function handleListKeyboard(event: KeyboardEvent, options: ListKeyboardOptions): ListKeyAction {\n const { activeIndex, itemCount, loop = true } = options;\n if (itemCount <= 0) return { type: 'none' };\n\n const clamp = (idx: number) => (idx + itemCount) % itemCount;\n const within = (idx: number) => Math.max(0, Math.min(idx, itemCount - 1));\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n return { type: 'navigate', index: loop ? clamp(activeIndex + 1) : within(activeIndex + 1) };\n case 'ArrowUp':\n case 'ArrowLeft':\n return { type: 'navigate', index: loop ? clamp(activeIndex - 1) : within(activeIndex - 1) };\n case 'Home':\n return { type: 'navigate', index: 0 };\n case 'End':\n return { type: 'navigate', index: itemCount - 1 };\n case 'Enter':\n case ' ':\n case 'Spacebar':\n return activeIndex >= 0 ? { type: 'select', index: activeIndex } : { type: 'none' };\n case 'Escape':\n return { type: 'close' };\n default:\n return { type: 'none' };\n }\n}\n\n/**\n * 为元素批量设置 ARIA 属性(不可变:返回新映射,但直接操作 DOM 属性是 a11y 的固有需求)。\n * 组件挂载后调用一次即可,避免每次 render 重复写 setAttribute。\n */\nexport function applyAria(el: HTMLElement, attrs: Record<string, string | boolean | undefined>): void {\n Object.entries(attrs).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n el.removeAttribute(`aria-${key}`);\n } else {\n el.setAttribute(`aria-${key}`, String(value));\n }\n });\n}\n"],"mappings":"SASgBA,EAAgBC,GAC9B,OAAOA,IAAQ,SAAWA,IAAQ,KAAOA,IAAQ,UACnD,CAGA,MAAMC,EAAqB,CACzB,UACA,yBACA,2BACA,wBACA,yBACA,kCACA,4BACAC,KAAK,K,SAESC,EAAqBC,GACnC,OAAOC,MAAMC,KAAKF,EAAUG,iBAA8BN,IAAqBO,QAC5EC,GAAOA,EAAGC,aAAa,iBAAmB,QAAUD,EAAGE,MAAMC,UAAY,QAE9E,C,SAyBgBC,EAAgBC,GAC9B,MAAMV,UAAEA,EAASW,UAAEA,EAAY,KAAIC,cAAEA,GAAkBF,EACvD,IAAIG,EAAS,MACb,IAAIC,EAAwC,KAE5C,MAAMC,EAAiBC,IACrB,GAAIA,EAAEpB,MAAQ,MAAO,OACrB,MAAMqB,EAAYlB,EAAqBC,GACvC,GAAIiB,EAAUC,SAAW,EAAG,CAC1BF,EAAEG,iBACFnB,EAAUoB,QACV,M,CAEF,MAAMC,EAAQJ,EAAU,GACxB,MAAMK,EAAOL,EAAUA,EAAUC,OAAS,GAC1C,MAAMK,EAAWC,SAASC,cAE1B,GAAIT,EAAEU,SAAU,CACd,GAAIH,IAAaF,IAAUrB,EAAU2B,SAASJ,GAAW,CACvDP,EAAEG,iBACFG,EAAKF,O,MAEF,CACL,GAAIG,IAAaD,EAAM,CACrBN,EAAEG,iBACFE,EAAMD,O,IAKZ,MAAMQ,EAAU,KACd,GAAIf,EAAQ,OACZA,EAAS,KACTC,EAAqBF,GAAiBY,SAASC,cAC/CzB,EAAU6B,iBAAiB,UAAWd,GACtC,GAAIJ,EAAW,CACb,MAAMM,EAAYlB,EAAqBC,IACtCiB,EAAU,IAAMjB,GAAWoB,O,GAIhC,MAAMU,EAAa,KACjB,IAAKjB,EAAQ,OACbA,EAAS,MACTb,EAAU+B,oBAAoB,UAAWhB,GACzC,GAAID,UAA4BA,EAAkBM,QAAU,WAAY,CACtEN,EAAkBM,O,CAEpBN,EAAoB,IAAI,EAG1B,MAAO,CAAEc,UAASE,aACpB,C,SA0BgBE,EAAmBC,EAAsBvB,GACvD,MAAMwB,YAAEA,EAAWC,UAAEA,EAASC,KAAEA,EAAO,MAAS1B,EAChD,GAAIyB,GAAa,EAAG,MAAO,CAAEE,KAAM,QAEnC,MAAMC,EAASC,IAAiBA,EAAMJ,GAAaA,EACnD,MAAMK,EAAUD,GAAgBE,KAAKC,IAAI,EAAGD,KAAKE,IAAIJ,EAAKJ,EAAY,IAEtE,OAAQF,EAAMrC,KACZ,IAAK,YACL,IAAK,aACH,MAAO,CAAEyC,KAAM,WAAYO,MAAOR,EAAOE,EAAMJ,EAAc,GAAKM,EAAON,EAAc,IACzF,IAAK,UACL,IAAK,YACH,MAAO,CAAEG,KAAM,WAAYO,MAAOR,EAAOE,EAAMJ,EAAc,GAAKM,EAAON,EAAc,IACzF,IAAK,OACH,MAAO,CAAEG,KAAM,WAAYO,MAAO,GACpC,IAAK,MACH,MAAO,CAAEP,KAAM,WAAYO,MAAOT,EAAY,GAChD,IAAK,QACL,IAAK,IACL,IAAK,WACH,OAAOD,GAAe,EAAI,CAAEG,KAAM,SAAUO,MAAOV,GAAgB,CAAEG,KAAM,QAC7E,IAAK,SACH,MAAO,CAAEA,KAAM,SACjB,QACE,MAAO,CAAEA,KAAM,QAErB,Q","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,g as i,h as a}from"./p-e42dfa95.js";import{c as r}from"./p-4ef5a884.js";import{p as o,f as n,a as s,g as d,M as l,W as c}from"./p-08b4005c.js";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{.grid{display:grid}.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-date-picker-font-size:14px;--hb-date-picker-height:32px;--hb-date-picker-border-color:var(--hb-border-color,#dcdfe6);--hb-date-picker-border-color-hover:var(--hb-color-primary);--hb-date-picker-bg-color:var(--hb-color-white,#fff);display:inline-block;position:relative}.hb-date-picker{display:inline-block;position:relative;width:240px}.hb-date-picker__input-wrapper{cursor:pointer;display:inline-block;position:relative;width:100%}.hb-date-picker__input{background-color:var(--hb-date-picker-bg-color);border:1px solid var(--hb-date-picker-border-color);border-radius:4px;box-sizing:border-box;color:var(--hb-color-text-regular,#606266);cursor:pointer;display:inline-block;font-size:var(--hb-date-picker-font-size);height:var(--hb-date-picker-height);line-height:var(--hb-date-picker-height);outline:none;padding:0 30px 0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.hb-date-picker__input:focus,.hb-date-picker__input:hover:not(:disabled){border-color:var(--hb-date-picker-border-color-hover)}.hb-date-picker__suffix{align-items:center;display:flex;position:absolute;right:8px;top:50%;transform:translateY(-50%)}.hb-date-picker__clear{align-items:center;color:var(--hb-color-text-placeholder,#c0c4cc);cursor:pointer;display:inline-flex;height:14px;justify-content:center;margin-right:8px;transition:color .2s;width:14px}.hb-date-picker__clear svg{height:100%;width:100%}.hb-date-picker__clear:hover{color:var(--hb-color-text-regular,#606266)}.hb-date-picker__icon{align-items:center;color:var(--hb-color-text-placeholder,#c0c4cc);display:inline-flex;height:14px;justify-content:center;width:14px}.hb-date-picker__icon svg{height:100%;width:100%}.hb-date-picker__dropdown{background-color:var(--hb-date-picker-bg-color);border:1px solid var(--hb-date-picker-border-color);border-radius:4px;box-shadow:0 2px 12px #0000001a;left:0;margin-top:4px;min-width:280px;padding:12px;position:absolute;top:100%;z-index:1000}.hb-date-picker__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.hb-date-picker__header-label{color:var(--hb-color-text-regular,#606266);font-size:14px;font-weight:600}.hb-date-picker__next-btn,.hb-date-picker__prev-btn{background:0 0;border:none;color:var(--hb-color-text-regular,#606266);cursor:pointer;font-size:18px;padding:4px 8px;transition:color .2s}.hb-date-picker__next-btn:hover,.hb-date-picker__prev-btn:hover{color:var(--hb-color-primary)}.hb-date-picker__weekdays{display:grid;gap:4px;grid-template-columns:repeat(7,1fr);margin-bottom:8px}.hb-date-picker__weekday{color:var(--hb-color-text-placeholder,#c0c4cc);font-size:12px;font-weight:500;text-align:center}.hb-date-picker__days{display:grid;gap:4px;grid-template-columns:repeat(7,1fr)}.hb-date-picker__day{align-items:center;aspect-ratio:1;border-radius:4px;color:var(--hb-color-text-regular,#606266);cursor:pointer;display:flex;font-size:13px;justify-content:center;transition:all .2s}.hb-date-picker__day:hover:not(.hb-date-picker__day--other-month){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-date-picker__day--other-month{color:var(--hb-color-text-placeholder,#c0c4cc);cursor:default}.hb-date-picker__day--today{color:var(--hb-color-primary);font-weight:600}.hb-date-picker__day--selected{background-color:var(--hb-color-primary);color:var(--hb-color-white,#fff)}.hb-date-picker__day--disabled{color:var(--hb-color-text-placeholder,#c0c4cc);cursor:not-allowed}.hb-date-picker__day--disabled:hover{background-color:#0000}.hb-date-picker--small{width:200px}.hb-date-picker--small .hb-date-picker__input{font-size:12px;height:24px;line-height:24px;padding:0 25px 0 12px}.hb-date-picker--large{width:280px}.hb-date-picker--large .hb-date-picker__input{font-size:16px;height:40px;line-height:40px;padding:0 35px 0 18px}.hb-date-picker--disabled{cursor:not-allowed}.hb-date-picker--disabled .hb-date-picker__input{background-color:var(--hb-fill-color-light,#f5f7fa);border-color:var(--hb-date-picker-border-color);color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}.hb-date-picker__month-grid,.hb-date-picker__year-grid{display:grid;gap:8px;grid-template-columns:repeat(3,1fr);padding:8px 12px}.hb-date-picker__month-cell,.hb-date-picker__year-cell{align-items:center;border-radius:4px;color:var(--hb-color-text-regular,#606266);cursor:pointer;display:flex;font-size:var(--hb-cascader-font-size,14px);height:40px;justify-content:center;transition:background-color .2s,color .2s;-webkit-user-select:none;user-select:none}.hb-date-picker__month-cell:hover:not(.hb-date-picker__month-cell--disabled),.hb-date-picker__year-cell:hover:not(.hb-date-picker__year-cell--disabled){background-color:var(--hb-fill-color-light,#f5f7fa)}.hb-date-picker__month-cell--selected,.hb-date-picker__year-cell--selected{background-color:var(--hb-color-primary-bg,#e6f4ff);color:var(--hb-color-primary,#1677ff);font-weight:600}.hb-date-picker__month-cell--disabled,.hb-date-picker__year-cell--disabled{color:var(--hb-color-text-disabled,#c0c4cc);cursor:not-allowed}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}';const p=h;const b=class{constructor(i){e(this,i);this.hbChange=t(this,"hbChange",7)}get el(){return i(this)}modelValue;placeholder="请选择日期";disabled=false;size="default";clearable=false;format="YYYY-MM-DD";valueFormat;type="date";disabledDate;name;inputId;isOpen=false;inputValue="";selectedDate;panelViewDate=new Date;hbChange;clickOutside=r({host:null,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false}});componentDidLoad(){this.clickOutside=r({host:this.el,isOpen:()=>this.isOpen,onClose:()=>{this.isOpen=false}});this.clickOutside.connect();this.updateInputValue()}disconnectedCallback(){this.clickOutside.disconnect()}handleValueChange(){this.updateInputValue()}updateInputValue(){const e=o(this.modelValue);if(!e){this.inputValue="";this.selectedDate=undefined;return}this.selectedDate=e;this.inputValue=n(e,this.format)}handleInputClick=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;if(this.isOpen&&(this.type==="month"||this.type==="year")){this.panelViewDate=this.selectedDate?new Date(this.selectedDate):new Date}};handleClear=e=>{e.stopPropagation();this.modelValue=undefined;this.inputValue="";this.selectedDate=undefined;this.isOpen=false;this.hbChange.emit(undefined)};handleDateSelect=e=>{if(this.disabledDate&&this.disabledDate(e))return;this.selectedDate=e;this.modelValue=this.valueFormat?n(e,this.format):e;this.updateInputValue();this.isOpen=false;this.hbChange.emit(this.modelValue)};handleMonthSelect=e=>{const t=new Date(this.panelViewDate.getFullYear(),e,1);if(this.disabledDate&&this.disabledDate(t))return;this.selectedDate=t;this.panelViewDate=new Date(t);const i=`${t.getFullYear()}-${String(e+1).padStart(2,"0")}`;this.inputValue=i;this.modelValue=i;this.isOpen=false;this.hbChange.emit(i)};handleYearSelect=e=>{const t=new Date(e,0,1);if(this.disabledDate&&this.disabledDate(t))return;this.selectedDate=t;this.panelViewDate=new Date(t);const i=String(e);this.inputValue=i;this.modelValue=i;this.isOpen=false;this.hbChange.emit(i)};changeMonth(e){this.selectedDate=s(this.selectedDate||new Date,e)}changePanelView(e){const t=new Date(this.panelViewDate);if(this.type==="month")t.setFullYear(t.getFullYear()+e);else t.setFullYear(t.getFullYear()+e*12);this.panelViewDate=t}isDateDisabled=e=>!!this.disabledDate&&this.disabledDate(e);render(){const e=d(this.selectedDate||new Date,this.selectedDate);const t=this.selectedDate||new Date;const i=this.panelViewDate||t;const r=this.type==="month"?`${i.getFullYear()} 年`:this.type==="year"?`${Math.floor(i.getFullYear()/12)*12} - ${Math.floor(i.getFullYear()/12)*12+11}`:`${t.getFullYear()}年 ${l[t.getMonth()]}`;return a("div",{key:"2d4d4082eee095d506d8450a7f58685cbd4bb1a9",class:{"hb-date-picker":true,"hb-date-picker--open":this.isOpen,"hb-date-picker--disabled":this.disabled,[`hb-date-picker--${this.size}`]:true,[`hb-date-picker--${this.type}`]:true}},a("div",{key:"6b740a744a4f1d24d1d1b8d65d44a0ca6d69b3fb",class:"hb-date-picker__input-wrapper",onClick:this.handleInputClick},a("input",{key:"7eeee5862662040a0f2858b04fa4ca96f01e3eb9",type:"text",id:this.inputId,name:this.name,class:"hb-date-picker__input",placeholder:this.placeholder,value:this.inputValue,disabled:this.disabled,readonly:true,role:"combobox","aria-haspopup":"dialog","aria-expanded":this.isOpen?"true":"false","aria-label":this.placeholder}),a("span",{key:"754144e78db34c6f674469e2c95a51c39828c965",class:"hb-date-picker__suffix"},this.clearable&&this.modelValue&&a("span",{key:"7766158871f0d0b5288b4320f10976704879f680",class:"hb-date-picker__clear",role:"button","aria-label":"清空",onClick:this.handleClear},a("svg",{key:"64ec132282290456ec08306f2219eae1fa420377",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},a("path",{key:"f1a41eedee2964a1fd92672f90591b2afdd7f0ca",d:"M6 6l12 12M18 6L6 18"}))),a("span",{key:"6c1972309c18139b1cd310f26855dbe846e03982",class:"hb-date-picker__icon","aria-hidden":"true"},a("svg",{key:"e15ef729755d5629fbe16d356a9723ea0ebda9ad",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"},a("rect",{key:"db3dd7a69499a878ccd000eae533cbe9485b9d13",x:"3",y:"5",width:"18",height:"16",rx:"2"}),a("path",{key:"dec2aa31cdf761b591e462d8c9dedb061a73ed63",d:"M3 9h18M8 3v4M16 3v4"}))))),this.isOpen&&a("div",{key:"626c192f0e2d45e7b5efbd53dd02241af51119be",class:"hb-date-picker__dropdown",role:"dialog","aria-label":this.type==="month"?"选择月份":this.type==="year"?"选择年份":"选择日期"},a("div",{key:"a88b651f2defcee8a88ac07a4ce8a2e8a1857854",class:"hb-date-picker__header"},a("button",{key:"c47b93061818e710090959432b9e89f9281edb4e",type:"button",class:"hb-date-picker__prev-btn","aria-label":this.type==="date"?"上一月":"上一年",onClick:()=>this.type==="date"?this.changeMonth(-1):this.changePanelView(-1)},"‹"),a("span",{key:"ae85952f2be4f5cd1cb075c3cd9ea69503a0362e",class:"hb-date-picker__header-label","aria-live":"polite"},r),a("button",{key:"0114d37baea55623d2fc65680ae7d73749a1ef24",type:"button",class:"hb-date-picker__next-btn","aria-label":this.type==="date"?"下一月":"下一年",onClick:()=>this.type==="date"?this.changeMonth(1):this.changePanelView(1)},"›")),this.type==="date"&&a("div",{key:"754807f77924d8a74ff4b5fc26b6f4794f3fcf3b",class:"hb-date-picker__body",role:"grid"},a("div",{key:"80e7acb304dde0dd8dd256add20b5997c3d8311c",class:"hb-date-picker__weekdays",role:"row"},c.map((e=>a("div",{class:"hb-date-picker__weekday",role:"columnheader","aria-disabled":"true"},e)))),a("div",{key:"c8dce0eb806e015292e4841d4fe3dd349bc2a52b",class:"hb-date-picker__days",role:"row"},e.map(((e,t)=>{const i=e.isCurrentMonth&&this.isDateDisabled(e.date);return a("div",{key:t,class:{"hb-date-picker__day":true,"hb-date-picker__day--other-month":!e.isCurrentMonth,"hb-date-picker__day--today":e.isToday,"hb-date-picker__day--selected":e.isSelected,"hb-date-picker__day--disabled":i},role:"gridcell","aria-selected":e.isSelected?"true":"false","aria-disabled":!e.isCurrentMonth||i?"true":undefined,"aria-label":n(e.date,this.format),onClick:()=>e.isCurrentMonth&&!i&&this.handleDateSelect(e.date)},e.date.getDate())})))),this.type==="month"&&a("div",{key:"ebf1c3935e7c868153823113622e5c08ee0bdffd",class:"hb-date-picker__body hb-date-picker__month-grid",role:"grid"},l.map(((e,t)=>{const r=new Date(i.getFullYear(),t,1);const o=!!this.disabledDate&&this.disabledDate(r);const n=!!this.selectedDate&&this.selectedDate.getFullYear()===i.getFullYear()&&this.selectedDate.getMonth()===t;return a("div",{class:{"hb-date-picker__month-cell":true,"hb-date-picker__month-cell--selected":n,"hb-date-picker__month-cell--disabled":o},role:"gridcell","aria-selected":n?"true":"false","aria-disabled":o?"true":undefined,onClick:()=>!o&&this.handleMonthSelect(t)},e)}))),this.type==="year"&&a("div",{key:"1cf9555cc9c65d5a723528948cf5e63cc0e416f5",class:"hb-date-picker__body hb-date-picker__year-grid",role:"grid"},(()=>{const e=Math.floor(i.getFullYear()/12)*12;const t=[];for(let i=0;i<12;i++)t.push(e+i);return t.map((e=>{const t=new Date(e,0,1);const i=!!this.disabledDate&&this.disabledDate(t);const r=!!this.selectedDate&&this.selectedDate.getFullYear()===e;return a("div",{class:{"hb-date-picker__year-cell":true,"hb-date-picker__year-cell--selected":r,"hb-date-picker__year-cell--disabled":i},role:"gridcell","aria-selected":r?"true":"false","aria-disabled":i?"true":undefined,onClick:()=>!i&&this.handleYearSelect(e)},e)}))})())))}static get watchers(){return{modelValue:["handleValueChange"]}}};b.style=p;export{b as hb_date_picker};
|
|
2
|
-
//# sourceMappingURL=p-d79a15b1.entry.js.map
|