element-plus 1.2.0-beta.1 → 1.2.0-beta.2
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/README.md +5 -0
- package/attributes.json +1 -1
- package/dist/index.css +1 -1
- package/dist/index.full.js +930 -690
- package/dist/index.full.min.js +11 -11
- package/dist/index.full.min.js.map +1 -1
- package/dist/index.full.min.mjs +11 -11
- package/dist/index.full.min.mjs.map +1 -1
- package/dist/index.full.mjs +937 -699
- package/es/components/affix/src/affix.vue_vue&type=script&lang.mjs +1 -0
- package/es/components/affix/src/affix.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/affix/src/affix.vue_vue&type=template&id=0745df9e&lang.mjs.map +1 -1
- package/es/components/alert/src/alert.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/alert/src/alert.vue_vue&type=template&id=1755b449&lang.mjs +1 -1
- package/es/components/alert/src/alert.vue_vue&type=template&id=1755b449&lang.mjs.map +1 -1
- package/es/components/breadcrumb/src/breadcrumb-item.vue_vue&type=script&lang.mjs +4 -0
- package/es/components/breadcrumb/src/breadcrumb-item.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/breadcrumb/src/breadcrumb-item.vue_vue&type=template&id=2f37792a&lang.mjs.map +1 -1
- package/es/components/button/index.d.ts +6 -1
- package/es/components/button/src/button.d.ts +4 -0
- package/es/components/button/src/button.mjs +4 -1
- package/es/components/button/src/button.mjs.map +1 -1
- package/es/components/button/src/button.vue.d.ts +6 -1
- package/es/components/button/src/button.vue_vue&type=script&lang.mjs +7 -1
- package/es/components/button/src/button.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/button/src/button.vue_vue&type=template&id=802c5c76&lang.mjs.map +1 -1
- package/es/components/cascader/index.d.ts +8430 -12
- package/es/components/cascader/src/index.vue.d.ts +4216 -6
- package/es/components/cascader/src/index.vue_vue&type=script&lang.mjs +25 -16
- package/es/components/cascader/src/index.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/cascader/src/index.vue_vue&type=template&id=0429c2db&lang.mjs.map +1 -1
- package/es/components/cascader-panel/index.d.ts +238 -10
- package/es/components/cascader-panel/src/index.vue.d.ts +122 -8
- package/es/components/cascader-panel/src/index.vue_vue&type=script&lang.mjs +31 -12
- package/es/components/cascader-panel/src/index.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/cascader-panel/src/index.vue_vue&type=template&id=97c48f5c&lang.mjs.map +1 -1
- package/es/components/cascader-panel/src/menu.vue.d.ts +2 -2
- package/es/components/cascader-panel/src/menu.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/cascader-panel/src/menu.vue_vue&type=template&id=9c79e4e2&lang.mjs +14 -11
- package/es/components/cascader-panel/src/menu.vue_vue&type=template&id=9c79e4e2&lang.mjs.map +1 -1
- package/es/components/cascader-panel/src/node.vue.d.ts +1 -1
- package/es/components/cascader-panel/src/node.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/cascader-panel/src/node.vue_vue&type=template&id=18b09cb2&lang.mjs +1 -1
- package/es/components/cascader-panel/src/node.vue_vue&type=template&id=18b09cb2&lang.mjs.map +1 -1
- package/es/components/color-picker/src/color.mjs +20 -13
- package/es/components/color-picker/src/color.mjs.map +1 -1
- package/es/components/config-provider/index.d.ts +12 -5
- package/es/components/config-provider/index.mjs +1 -1
- package/es/components/config-provider/index.mjs.map +1 -1
- package/es/components/config-provider/src/config-provider.d.ts +7 -0
- package/es/components/config-provider/src/config-provider.mjs +18 -0
- package/es/components/config-provider/src/config-provider.mjs.map +1 -0
- package/es/components/config-provider/src/index.d.ts +18 -0
- package/es/components/config-provider/src/index.mjs +22 -0
- package/es/components/config-provider/src/index.mjs.map +1 -0
- package/es/components/date-picker/src/date-picker-com/basic-cell-render.mjs +1 -1
- package/es/components/date-picker/src/date-picker-com/basic-cell-render.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/basic-date-table.vue_vue&type=script&lang.mjs +1 -1
- package/es/components/date-picker/src/date-picker-com/basic-date-table.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/basic-date-table.vue_vue&type=template&id=0572814e&lang.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/panel-date-pick.vue_vue&type=script&lang.mjs +23 -16
- package/es/components/date-picker/src/date-picker-com/panel-date-pick.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/panel-date-pick.vue_vue&type=template&id=78e07aa7&lang.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/panel-date-range.vue_vue&type=script&lang.mjs +2 -0
- package/es/components/date-picker/src/date-picker-com/panel-date-range.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/panel-date-range.vue_vue&type=template&id=62b45ab2&lang.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/panel-month-range.vue_vue&type=script&lang.mjs +2 -1
- package/es/components/date-picker/src/date-picker-com/panel-month-range.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/date-picker/src/date-picker-com/panel-month-range.vue_vue&type=template&id=2e377892&lang.mjs.map +1 -1
- package/es/components/dropdown/src/dropdown-item.vue_vue&type=script&lang.mjs +2 -0
- package/es/components/dropdown/src/dropdown-item.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/dropdown/src/dropdown-item.vue_vue&type=template&id=396ed16b&lang.mjs.map +1 -1
- package/es/components/dropdown/src/dropdown.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/dropdown/src/dropdown.vue_vue&type=template&id=3ed790a5&lang.mjs +68 -68
- package/es/components/dropdown/src/dropdown.vue_vue&type=template&id=3ed790a5&lang.mjs.map +1 -1
- package/es/components/form/index.d.ts +2 -2
- package/es/components/form/src/form-item.vue_vue&type=script&lang.mjs +4 -3
- package/es/components/form/src/form-item.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/form/src/form-item.vue_vue&type=template&id=24eda48b&lang.mjs.map +1 -1
- package/es/components/form/src/form.type.d.ts +1 -3
- package/es/components/form/src/form.vue.d.ts +2 -3
- package/es/components/image/index.d.ts +4 -0
- package/es/components/image/src/image.d.ts +1 -0
- package/es/components/image/src/image.mjs +4 -0
- package/es/components/image/src/image.mjs.map +1 -1
- package/es/components/image/src/image.vue.d.ts +4 -0
- package/es/components/image/src/image.vue_vue&type=script&lang.mjs +2 -2
- package/es/components/image/src/image.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/image/src/image.vue_vue&type=template&id=34467287&lang.mjs.map +1 -1
- package/es/components/image-viewer/src/image-viewer.vue.d.ts +1 -1
- package/es/components/image-viewer/src/image-viewer.vue_vue&type=script&lang.mjs +2 -2
- package/es/components/image-viewer/src/image-viewer.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/image-viewer/src/image-viewer.vue_vue&type=template&id=4b22ad85&lang.mjs +2 -2
- package/es/components/image-viewer/src/image-viewer.vue_vue&type=template&id=4b22ad85&lang.mjs.map +1 -1
- package/es/components/input/src/input.vue_vue&type=script&lang.mjs +2 -2
- package/es/components/input/src/input.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/input/src/input.vue_vue&type=template&id=3290dcb6&lang.mjs +18 -16
- package/es/components/input/src/input.vue_vue&type=template&id=3290dcb6&lang.mjs.map +1 -1
- package/es/components/loading/src/createLoadingComponent.mjs +3 -7
- package/es/components/loading/src/createLoadingComponent.mjs.map +1 -1
- package/es/components/menu/src/menu.mjs +1 -1
- package/es/components/menu/src/menu.mjs.map +1 -1
- package/es/components/menu/src/sub-menu.mjs +1 -1
- package/es/components/menu/src/sub-menu.mjs.map +1 -1
- package/es/components/message/src/message-method.mjs +13 -0
- package/es/components/message/src/message-method.mjs.map +1 -1
- package/es/components/message/src/message.d.ts +2 -0
- package/es/components/message/src/message.mjs +8 -0
- package/es/components/message/src/message.mjs.map +1 -1
- package/es/components/message/src/message.vue.d.ts +8 -0
- package/es/components/message/src/message.vue_vue&type=script&lang.mjs +7 -1
- package/es/components/message/src/message.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/message/src/message.vue_vue&type=template&id=031967c2&lang.mjs +56 -46
- package/es/components/message/src/message.vue_vue&type=template&id=031967c2&lang.mjs.map +1 -1
- package/es/components/page-header/src/page-header.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/page-header/src/page-header.vue_vue&type=template&id=d12fb4b2&lang.mjs +3 -3
- package/es/components/page-header/src/page-header.vue_vue&type=template&id=d12fb4b2&lang.mjs.map +1 -1
- package/es/components/popconfirm/src/popconfirm.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/popconfirm/src/popconfirm.vue_vue&type=template&id=16409d25&lang.mjs +1 -1
- package/es/components/popconfirm/src/popconfirm.vue_vue&type=template&id=16409d25&lang.mjs.map +1 -1
- package/es/components/result/src/index.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/result/src/index.vue_vue&type=template&id=4e01dfba&lang.mjs +4 -3
- package/es/components/result/src/index.vue_vue&type=template&id=4e01dfba&lang.mjs.map +1 -1
- package/es/components/select/index.d.ts +5 -1
- package/es/components/select/src/select.vue.d.ts +5 -1
- package/es/components/select/src/select.vue_vue&type=script&lang.mjs +4 -1
- package/es/components/select/src/select.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/select/src/select.vue_vue&type=template&id=33774f85&lang.mjs +6 -5
- package/es/components/select/src/select.vue_vue&type=template&id=33774f85&lang.mjs.map +1 -1
- package/es/components/select/src/useSelect.mjs +1 -1
- package/es/components/select/src/useSelect.mjs.map +1 -1
- package/es/components/select-v2/index.d.ts +14 -0
- package/es/components/select-v2/src/defaults.d.ts +4 -0
- package/es/components/select-v2/src/defaults.mjs +4 -0
- package/es/components/select-v2/src/defaults.mjs.map +1 -1
- package/es/components/select-v2/src/select-dropdown.vue_vue&type=script&lang.mjs +1 -0
- package/es/components/select-v2/src/select-dropdown.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/select-v2/src/select.vue.d.ts +7 -0
- package/es/components/select-v2/src/select.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/select-v2/src/select.vue_vue&type=template&id=13e598a4&lang.mjs +9 -7
- package/es/components/select-v2/src/select.vue_vue&type=template&id=13e598a4&lang.mjs.map +1 -1
- package/es/components/table/src/config.mjs +22 -2
- package/es/components/table/src/config.mjs.map +1 -1
- package/es/components/table/src/store/watcher.mjs +15 -7
- package/es/components/table/src/store/watcher.mjs.map +1 -1
- package/es/components/table/src/table/style-helper.mjs +2 -2
- package/es/components/table/src/table/style-helper.mjs.map +1 -1
- package/es/components/table/src/table-body/render-helper.mjs +2 -3
- package/es/components/table/src/table-body/render-helper.mjs.map +1 -1
- package/es/components/table/src/table-header/event-helper.mjs +3 -1
- package/es/components/table/src/table-header/event-helper.mjs.map +1 -1
- package/es/components/tabs/src/tab-nav.vue_vue&type=script&lang.mjs +3 -3
- package/es/components/tabs/src/tab-nav.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/tabs/src/tabs.mjs +1 -1
- package/es/components/tabs/src/tabs.mjs.map +1 -1
- package/es/components/teleport/index.d.ts +23 -0
- package/es/components/teleport/index.mjs +9 -0
- package/es/components/teleport/index.mjs.map +1 -0
- package/es/components/teleport/src/teleport.d.ts +7 -0
- package/es/components/teleport/src/teleport.mjs +18 -0
- package/es/components/teleport/src/teleport.mjs.map +1 -0
- package/es/components/teleport/src/teleport.vue.d.ts +22 -0
- package/es/components/teleport/src/teleport.vue_vue&type=script&lang.mjs +28 -0
- package/es/components/teleport/src/teleport.vue_vue&type=script&lang.mjs.map +1 -0
- package/es/components/teleport/src/teleport.vue_vue&type=template&id=787c6a36&lang.mjs +19 -0
- package/es/components/teleport/src/teleport.vue_vue&type=template&id=787c6a36&lang.mjs.map +1 -0
- package/es/components/teleport/src/teleport2.mjs +7 -0
- package/es/components/teleport/src/teleport2.mjs.map +1 -0
- package/es/components/teleport/style/css.d.ts +0 -0
- package/es/components/teleport/style/css.mjs +2 -0
- package/es/components/teleport/style/css.mjs.map +1 -0
- package/es/components/teleport/style/index.d.ts +0 -0
- package/es/components/teleport/style/index.mjs +2 -0
- package/es/components/teleport/style/index.mjs.map +1 -0
- package/es/components/time-picker/src/common/picker.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/time-picker/src/common/picker.vue_vue&type=template&id=1d54be91&lang.mjs +11 -8
- package/es/components/time-picker/src/common/picker.vue_vue&type=template&id=1d54be91&lang.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue&type=template&id=4fb3c576&lang.mjs +9 -1
- package/es/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue&type=template&id=4fb3c576&lang.mjs.map +1 -1
- package/es/components/time-select/src/time-select.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/time-select/src/time-select.vue_vue&type=template&id=5beb6389&lang.mjs +6 -3
- package/es/components/time-select/src/time-select.vue_vue&type=template&id=5beb6389&lang.mjs.map +1 -1
- package/es/components/transfer/src/transfer-panel.vue_vue&type=script&lang.mjs +2 -0
- package/es/components/transfer/src/transfer-panel.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/transfer/src/transfer-panel.vue_vue&type=template&id=1a7d1f9c&lang.mjs +3 -2
- package/es/components/transfer/src/transfer-panel.vue_vue&type=template&id=1a7d1f9c&lang.mjs.map +1 -1
- package/es/components/transfer/src/useMove.mjs +3 -0
- package/es/components/transfer/src/useMove.mjs.map +1 -1
- package/es/components/tree/index.d.ts +6 -0
- package/es/components/tree/src/tree-node.vue.d.ts +1 -0
- package/es/components/tree/src/tree-node.vue_vue&type=script&lang.mjs +20 -0
- package/es/components/tree/src/tree-node.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/tree/src/tree-node.vue_vue&type=template&id=62959aba&lang.mjs +10 -7
- package/es/components/tree/src/tree-node.vue_vue&type=template&id=62959aba&lang.mjs.map +1 -1
- package/es/components/tree/src/tree.type.d.ts +3 -0
- package/es/components/tree/src/tree.vue.d.ts +3 -0
- package/es/components/tree/src/tree.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/tree/src/tree.vue_vue&type=template&id=7539bec5&lang.mjs +2 -1
- package/es/components/tree/src/tree.vue_vue&type=template&id=7539bec5&lang.mjs.map +1 -1
- package/es/components/tree-v2/src/tree-node.vue_vue&type=script&lang.mjs +4 -2
- package/es/components/tree-v2/src/tree-node.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/tree-v2/src/tree-node.vue_vue&type=template&id=71d8f826&lang.mjs +5 -4
- package/es/components/tree-v2/src/tree-node.vue_vue&type=template&id=71d8f826&lang.mjs.map +1 -1
- package/es/components/tree-v2/src/tree.vue_vue&type=script&lang.mjs.map +1 -1
- package/es/components/tree-v2/src/tree.vue_vue&type=template&id=5b45a1b2&lang.mjs +2 -1
- package/es/components/tree-v2/src/tree.vue_vue&type=template&id=5b45a1b2&lang.mjs.map +1 -1
- package/es/components/virtual-list/src/builders/build-grid.d.ts +7 -2
- package/es/components/virtual-list/src/builders/build-list.d.ts +9 -3
- package/es/components/virtual-list/src/builders/build-list.mjs +7 -4
- package/es/components/virtual-list/src/builders/build-list.mjs.map +1 -1
- package/es/components/virtual-list/src/components/dynamic-size-grid.d.ts +7 -2
- package/es/components/virtual-list/src/components/dynamic-size-list.d.ts +9 -3
- package/es/components/virtual-list/src/components/fixed-size-grid.d.ts +7 -2
- package/es/components/virtual-list/src/components/fixed-size-list.d.ts +9 -3
- package/es/components/virtual-list/src/components/scrollbar.mjs +1 -2
- package/es/components/virtual-list/src/components/scrollbar.mjs.map +1 -1
- package/es/components/virtual-list/src/props.d.ts +6 -3
- package/es/components/virtual-list/src/props.mjs +5 -1
- package/es/components/virtual-list/src/props.mjs.map +1 -1
- package/es/hooks/index.d.ts +1 -0
- package/es/hooks/index.mjs +1 -0
- package/es/hooks/index.mjs.map +1 -1
- package/es/hooks/use-global-config/index.d.ts +1 -0
- package/es/hooks/use-global-config/index.mjs +15 -0
- package/es/hooks/use-global-config/index.mjs.map +1 -0
- package/es/hooks/use-locale/index.d.ts +2 -4
- package/es/hooks/use-locale/index.mjs +4 -3
- package/es/hooks/use-locale/index.mjs.map +1 -1
- package/es/hooks/use-popper/index.mjs +6 -5
- package/es/hooks/use-popper/index.mjs.map +1 -1
- package/es/index.mjs +2 -0
- package/es/index.mjs.map +1 -1
- package/es/tokens/config-provider.d.ts +4 -0
- package/es/tokens/config-provider.mjs +4 -0
- package/es/tokens/config-provider.mjs.map +1 -0
- package/es/tokens/index.d.ts +1 -0
- package/es/tokens/index.mjs +1 -0
- package/es/tokens/index.mjs.map +1 -1
- package/es/version.d.ts +1 -1
- package/es/version.mjs +1 -1
- package/es/version.mjs.map +1 -1
- package/lib/components/affix/src/affix.vue_vue&type=script&lang.js +1 -0
- package/lib/components/affix/src/affix.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/affix/src/affix.vue_vue&type=template&id=0745df9e&lang.js.map +1 -1
- package/lib/components/alert/src/alert.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/alert/src/alert.vue_vue&type=template&id=1755b449&lang.js +1 -1
- package/lib/components/alert/src/alert.vue_vue&type=template&id=1755b449&lang.js.map +1 -1
- package/lib/components/breadcrumb/src/breadcrumb-item.vue_vue&type=script&lang.js +4 -0
- package/lib/components/breadcrumb/src/breadcrumb-item.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/breadcrumb/src/breadcrumb-item.vue_vue&type=template&id=2f37792a&lang.js.map +1 -1
- package/lib/components/button/index.d.ts +6 -1
- package/lib/components/button/src/button.d.ts +4 -0
- package/lib/components/button/src/button.js +4 -1
- package/lib/components/button/src/button.js.map +1 -1
- package/lib/components/button/src/button.vue.d.ts +6 -1
- package/lib/components/button/src/button.vue_vue&type=script&lang.js +9 -3
- package/lib/components/button/src/button.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/button/src/button.vue_vue&type=template&id=802c5c76&lang.js.map +1 -1
- package/lib/components/cascader/index.d.ts +8430 -12
- package/lib/components/cascader/src/index.vue.d.ts +4216 -6
- package/lib/components/cascader/src/index.vue_vue&type=script&lang.js +25 -16
- package/lib/components/cascader/src/index.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/cascader/src/index.vue_vue&type=template&id=0429c2db&lang.js.map +1 -1
- package/lib/components/cascader-panel/index.d.ts +238 -10
- package/lib/components/cascader-panel/src/index.vue.d.ts +122 -8
- package/lib/components/cascader-panel/src/index.vue_vue&type=script&lang.js +31 -12
- package/lib/components/cascader-panel/src/index.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/cascader-panel/src/index.vue_vue&type=template&id=97c48f5c&lang.js.map +1 -1
- package/lib/components/cascader-panel/src/menu.vue.d.ts +2 -2
- package/lib/components/cascader-panel/src/menu.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/cascader-panel/src/menu.vue_vue&type=template&id=9c79e4e2&lang.js +14 -11
- package/lib/components/cascader-panel/src/menu.vue_vue&type=template&id=9c79e4e2&lang.js.map +1 -1
- package/lib/components/cascader-panel/src/node.vue.d.ts +1 -1
- package/lib/components/cascader-panel/src/node.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/cascader-panel/src/node.vue_vue&type=template&id=18b09cb2&lang.js +1 -1
- package/lib/components/cascader-panel/src/node.vue_vue&type=template&id=18b09cb2&lang.js.map +1 -1
- package/lib/components/color-picker/src/color.js +20 -13
- package/lib/components/color-picker/src/color.js.map +1 -1
- package/lib/components/config-provider/index.d.ts +12 -5
- package/lib/components/config-provider/index.js +2 -2
- package/lib/components/config-provider/index.js.map +1 -1
- package/lib/components/config-provider/src/config-provider.d.ts +7 -0
- package/lib/components/config-provider/src/config-provider.js +22 -0
- package/lib/components/config-provider/src/config-provider.js.map +1 -0
- package/lib/components/config-provider/src/index.d.ts +18 -0
- package/lib/components/config-provider/src/index.js +26 -0
- package/lib/components/config-provider/src/index.js.map +1 -0
- package/lib/components/date-picker/src/date-picker-com/basic-cell-render.js +1 -1
- package/lib/components/date-picker/src/date-picker-com/basic-cell-render.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/basic-date-table.vue_vue&type=script&lang.js +1 -1
- package/lib/components/date-picker/src/date-picker-com/basic-date-table.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/basic-date-table.vue_vue&type=template&id=0572814e&lang.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/panel-date-pick.vue_vue&type=script&lang.js +22 -15
- package/lib/components/date-picker/src/date-picker-com/panel-date-pick.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/panel-date-pick.vue_vue&type=template&id=78e07aa7&lang.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/panel-date-range.vue_vue&type=script&lang.js +4 -2
- package/lib/components/date-picker/src/date-picker-com/panel-date-range.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/panel-date-range.vue_vue&type=template&id=62b45ab2&lang.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/panel-month-range.vue_vue&type=script&lang.js +4 -3
- package/lib/components/date-picker/src/date-picker-com/panel-month-range.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/date-picker/src/date-picker-com/panel-month-range.vue_vue&type=template&id=2e377892&lang.js.map +1 -1
- package/lib/components/dropdown/src/dropdown-item.vue_vue&type=script&lang.js +2 -0
- package/lib/components/dropdown/src/dropdown-item.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/dropdown/src/dropdown-item.vue_vue&type=template&id=396ed16b&lang.js.map +1 -1
- package/lib/components/dropdown/src/dropdown.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/dropdown/src/dropdown.vue_vue&type=template&id=3ed790a5&lang.js +67 -67
- package/lib/components/dropdown/src/dropdown.vue_vue&type=template&id=3ed790a5&lang.js.map +1 -1
- package/lib/components/form/index.d.ts +2 -2
- package/lib/components/form/src/form-item.vue_vue&type=script&lang.js +3 -2
- package/lib/components/form/src/form-item.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/form/src/form-item.vue_vue&type=template&id=24eda48b&lang.js.map +1 -1
- package/lib/components/form/src/form.type.d.ts +1 -3
- package/lib/components/form/src/form.vue.d.ts +2 -3
- package/lib/components/image/index.d.ts +4 -0
- package/lib/components/image/src/image.d.ts +1 -0
- package/lib/components/image/src/image.js +4 -0
- package/lib/components/image/src/image.js.map +1 -1
- package/lib/components/image/src/image.vue.d.ts +4 -0
- package/lib/components/image/src/image.vue_vue&type=script&lang.js +2 -2
- package/lib/components/image/src/image.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/image/src/image.vue_vue&type=template&id=34467287&lang.js.map +1 -1
- package/lib/components/image-viewer/src/image-viewer.vue.d.ts +1 -1
- package/lib/components/image-viewer/src/image-viewer.vue_vue&type=script&lang.js +2 -2
- package/lib/components/image-viewer/src/image-viewer.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/image-viewer/src/image-viewer.vue_vue&type=template&id=4b22ad85&lang.js +2 -2
- package/lib/components/image-viewer/src/image-viewer.vue_vue&type=template&id=4b22ad85&lang.js.map +1 -1
- package/lib/components/input/src/input.vue_vue&type=script&lang.js +1 -1
- package/lib/components/input/src/input.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/input/src/input.vue_vue&type=template&id=3290dcb6&lang.js +17 -15
- package/lib/components/input/src/input.vue_vue&type=template&id=3290dcb6&lang.js.map +1 -1
- package/lib/components/loading/src/createLoadingComponent.js +3 -7
- package/lib/components/loading/src/createLoadingComponent.js.map +1 -1
- package/lib/components/menu/src/menu.js +1 -1
- package/lib/components/menu/src/menu.js.map +1 -1
- package/lib/components/menu/src/sub-menu.js +1 -1
- package/lib/components/menu/src/sub-menu.js.map +1 -1
- package/lib/components/message/src/message-method.js +13 -0
- package/lib/components/message/src/message-method.js.map +1 -1
- package/lib/components/message/src/message.d.ts +2 -0
- package/lib/components/message/src/message.js +8 -0
- package/lib/components/message/src/message.js.map +1 -1
- package/lib/components/message/src/message.vue.d.ts +8 -0
- package/lib/components/message/src/message.vue_vue&type=script&lang.js +8 -2
- package/lib/components/message/src/message.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/message/src/message.vue_vue&type=template&id=031967c2&lang.js +55 -45
- package/lib/components/message/src/message.vue_vue&type=template&id=031967c2&lang.js.map +1 -1
- package/lib/components/page-header/src/page-header.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/page-header/src/page-header.vue_vue&type=template&id=d12fb4b2&lang.js +2 -2
- package/lib/components/page-header/src/page-header.vue_vue&type=template&id=d12fb4b2&lang.js.map +1 -1
- package/lib/components/popconfirm/src/popconfirm.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/popconfirm/src/popconfirm.vue_vue&type=template&id=16409d25&lang.js +1 -1
- package/lib/components/popconfirm/src/popconfirm.vue_vue&type=template&id=16409d25&lang.js.map +1 -1
- package/lib/components/result/src/index.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/result/src/index.vue_vue&type=template&id=4e01dfba&lang.js +3 -2
- package/lib/components/result/src/index.vue_vue&type=template&id=4e01dfba&lang.js.map +1 -1
- package/lib/components/select/index.d.ts +5 -1
- package/lib/components/select/src/select.vue.d.ts +5 -1
- package/lib/components/select/src/select.vue_vue&type=script&lang.js +4 -1
- package/lib/components/select/src/select.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/select/src/select.vue_vue&type=template&id=33774f85&lang.js +6 -5
- package/lib/components/select/src/select.vue_vue&type=template&id=33774f85&lang.js.map +1 -1
- package/lib/components/select/src/useSelect.js +1 -1
- package/lib/components/select/src/useSelect.js.map +1 -1
- package/lib/components/select-v2/index.d.ts +14 -0
- package/lib/components/select-v2/src/defaults.d.ts +4 -0
- package/lib/components/select-v2/src/defaults.js +4 -0
- package/lib/components/select-v2/src/defaults.js.map +1 -1
- package/lib/components/select-v2/src/select-dropdown.vue_vue&type=script&lang.js +1 -0
- package/lib/components/select-v2/src/select-dropdown.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/select-v2/src/select.vue.d.ts +7 -0
- package/lib/components/select-v2/src/select.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/select-v2/src/select.vue_vue&type=template&id=13e598a4&lang.js +9 -7
- package/lib/components/select-v2/src/select.vue_vue&type=template&id=13e598a4&lang.js.map +1 -1
- package/lib/components/table/src/config.js +22 -2
- package/lib/components/table/src/config.js.map +1 -1
- package/lib/components/table/src/store/watcher.js +14 -6
- package/lib/components/table/src/store/watcher.js.map +1 -1
- package/lib/components/table/src/table/style-helper.js +2 -2
- package/lib/components/table/src/table/style-helper.js.map +1 -1
- package/lib/components/table/src/table-body/render-helper.js +2 -3
- package/lib/components/table/src/table-body/render-helper.js.map +1 -1
- package/lib/components/table/src/table-header/event-helper.js +3 -1
- package/lib/components/table/src/table-header/event-helper.js.map +1 -1
- package/lib/components/tabs/src/tab-nav.vue_vue&type=script&lang.js +3 -3
- package/lib/components/tabs/src/tab-nav.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/tabs/src/tabs.js +1 -1
- package/lib/components/tabs/src/tabs.js.map +1 -1
- package/lib/components/teleport/index.d.ts +23 -0
- package/lib/components/teleport/index.js +15 -0
- package/lib/components/teleport/index.js.map +1 -0
- package/lib/components/teleport/src/teleport.d.ts +7 -0
- package/lib/components/teleport/src/teleport.js +22 -0
- package/lib/components/teleport/src/teleport.js.map +1 -0
- package/lib/components/teleport/src/teleport.vue.d.ts +22 -0
- package/lib/components/teleport/src/teleport.vue_vue&type=script&lang.js +32 -0
- package/lib/components/teleport/src/teleport.vue_vue&type=script&lang.js.map +1 -0
- package/lib/components/teleport/src/teleport.vue_vue&type=template&id=787c6a36&lang.js +23 -0
- package/lib/components/teleport/src/teleport.vue_vue&type=template&id=787c6a36&lang.js.map +1 -0
- package/lib/components/teleport/src/teleport2.js +12 -0
- package/lib/components/teleport/src/teleport2.js.map +1 -0
- package/lib/components/teleport/style/css.d.ts +0 -0
- package/lib/components/teleport/style/css.js +3 -0
- package/lib/components/teleport/style/css.js.map +1 -0
- package/lib/components/teleport/style/index.d.ts +0 -0
- package/lib/components/teleport/style/index.js +3 -0
- package/lib/components/teleport/style/index.js.map +1 -0
- package/lib/components/time-picker/src/common/picker.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/time-picker/src/common/picker.vue_vue&type=template&id=1d54be91&lang.js +10 -7
- package/lib/components/time-picker/src/common/picker.vue_vue&type=template&id=1d54be91&lang.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue&type=template&id=4fb3c576&lang.js +9 -1
- package/lib/components/time-picker/src/time-picker-com/basic-time-spinner.vue_vue&type=template&id=4fb3c576&lang.js.map +1 -1
- package/lib/components/time-select/src/time-select.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/time-select/src/time-select.vue_vue&type=template&id=5beb6389&lang.js +5 -2
- package/lib/components/time-select/src/time-select.vue_vue&type=template&id=5beb6389&lang.js.map +1 -1
- package/lib/components/transfer/src/transfer-panel.vue_vue&type=script&lang.js +4 -2
- package/lib/components/transfer/src/transfer-panel.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/transfer/src/transfer-panel.vue_vue&type=template&id=1a7d1f9c&lang.js +3 -2
- package/lib/components/transfer/src/transfer-panel.vue_vue&type=template&id=1a7d1f9c&lang.js.map +1 -1
- package/lib/components/transfer/src/useMove.js +3 -0
- package/lib/components/transfer/src/useMove.js.map +1 -1
- package/lib/components/tree/index.d.ts +6 -0
- package/lib/components/tree/src/tree-node.vue.d.ts +1 -0
- package/lib/components/tree/src/tree-node.vue_vue&type=script&lang.js +20 -0
- package/lib/components/tree/src/tree-node.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/tree/src/tree-node.vue_vue&type=template&id=62959aba&lang.js +9 -6
- package/lib/components/tree/src/tree-node.vue_vue&type=template&id=62959aba&lang.js.map +1 -1
- package/lib/components/tree/src/tree.type.d.ts +3 -0
- package/lib/components/tree/src/tree.vue.d.ts +3 -0
- package/lib/components/tree/src/tree.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/tree/src/tree.vue_vue&type=template&id=7539bec5&lang.js +2 -1
- package/lib/components/tree/src/tree.vue_vue&type=template&id=7539bec5&lang.js.map +1 -1
- package/lib/components/tree-v2/src/tree-node.vue_vue&type=script&lang.js +4 -2
- package/lib/components/tree-v2/src/tree-node.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/tree-v2/src/tree-node.vue_vue&type=template&id=71d8f826&lang.js +4 -3
- package/lib/components/tree-v2/src/tree-node.vue_vue&type=template&id=71d8f826&lang.js.map +1 -1
- package/lib/components/tree-v2/src/tree.vue_vue&type=script&lang.js.map +1 -1
- package/lib/components/tree-v2/src/tree.vue_vue&type=template&id=5b45a1b2&lang.js +2 -1
- package/lib/components/tree-v2/src/tree.vue_vue&type=template&id=5b45a1b2&lang.js.map +1 -1
- package/lib/components/virtual-list/src/builders/build-grid.d.ts +7 -2
- package/lib/components/virtual-list/src/builders/build-list.d.ts +9 -3
- package/lib/components/virtual-list/src/builders/build-list.js +7 -4
- package/lib/components/virtual-list/src/builders/build-list.js.map +1 -1
- package/lib/components/virtual-list/src/components/dynamic-size-grid.d.ts +7 -2
- package/lib/components/virtual-list/src/components/dynamic-size-list.d.ts +9 -3
- package/lib/components/virtual-list/src/components/fixed-size-grid.d.ts +7 -2
- package/lib/components/virtual-list/src/components/fixed-size-list.d.ts +9 -3
- package/lib/components/virtual-list/src/components/scrollbar.js +1 -2
- package/lib/components/virtual-list/src/components/scrollbar.js.map +1 -1
- package/lib/components/virtual-list/src/props.d.ts +6 -3
- package/lib/components/virtual-list/src/props.js +5 -1
- package/lib/components/virtual-list/src/props.js.map +1 -1
- package/lib/hooks/index.d.ts +1 -0
- package/lib/hooks/index.js +2 -0
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/use-global-config/index.d.ts +1 -0
- package/lib/hooks/use-global-config/index.js +19 -0
- package/lib/hooks/use-global-config/index.js.map +1 -0
- package/lib/hooks/use-locale/index.d.ts +2 -4
- package/lib/hooks/use-locale/index.js +4 -3
- package/lib/hooks/use-locale/index.js.map +1 -1
- package/lib/hooks/use-popper/index.js +6 -5
- package/lib/hooks/use-popper/index.js.map +1 -1
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/tokens/config-provider.d.ts +4 -0
- package/lib/tokens/config-provider.js +8 -0
- package/lib/tokens/config-provider.js.map +1 -0
- package/lib/tokens/index.d.ts +1 -0
- package/lib/tokens/index.js +2 -0
- package/lib/tokens/index.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +2 -2
- package/tags.json +1 -1
- package/theme-chalk/el-checkbox.css +1 -1
- package/theme-chalk/el-date-picker.css +1 -1
- package/theme-chalk/el-form.css +1 -1
- package/theme-chalk/el-input-number.css +1 -1
- package/theme-chalk/el-input.css +1 -1
- package/theme-chalk/el-menu.css +1 -1
- package/theme-chalk/el-message.css +1 -1
- package/theme-chalk/el-select.css +1 -1
- package/theme-chalk/el-tabs.css +1 -1
- package/theme-chalk/el-time-picker.css +1 -1
- package/theme-chalk/el-time-select.css +1 -1
- package/theme-chalk/el-virtual-list.css +1 -1
- package/theme-chalk/index.css +1 -1
- package/theme-chalk/src/checkbox.scss +1 -1
- package/theme-chalk/src/common/var.scss +0 -2
- package/theme-chalk/src/date-picker/picker.scss +0 -1
- package/theme-chalk/src/form.scss +1 -1
- package/theme-chalk/src/input-number.scss +1 -0
- package/theme-chalk/src/input.scss +14 -15
- package/theme-chalk/src/menu.scss +16 -14
- package/theme-chalk/src/message.scss +6 -1
- package/theme-chalk/src/select.scss +2 -3
- package/theme-chalk/src/tabs.scss +6 -0
- package/theme-chalk/src/virtual-list.scss +16 -0
- package/web-types.json +1 -1
- package/es/components/affix/index.d.ts +0 -48
- package/es/components/affix/src/affix.vue.d.ts +0 -48
- package/es/components/color-picker/src/components/alpha-slider.vue.d.ts +0 -30
- package/es/components/config-provider/config-provider.d.ts +0 -11
- package/es/components/config-provider/config-provider.mjs +0 -20
- package/es/components/config-provider/config-provider.mjs.map +0 -1
- package/es/components/select/src/useSelect.d.ts +0 -76
- package/es/components/slider/index.d.ts +0 -307
- package/es/components/slider/src/index.vue.d.ts +0 -155
- package/es/components/slider/src/useSlide.d.ts +0 -21
- package/es/components/tree-v2/src/composables/useTree.d.ts +0 -29
- package/lib/components/affix/index.d.ts +0 -48
- package/lib/components/affix/src/affix.vue.d.ts +0 -48
- package/lib/components/color-picker/src/components/alpha-slider.vue.d.ts +0 -30
- package/lib/components/config-provider/config-provider.d.ts +0 -11
- package/lib/components/config-provider/config-provider.js +0 -24
- package/lib/components/config-provider/config-provider.js.map +0 -1
- package/lib/components/select/src/useSelect.d.ts +0 -76
- package/lib/components/slider/index.d.ts +0 -307
- package/lib/components/slider/src/index.vue.d.ts +0 -155
- package/lib/components/slider/src/useSlide.d.ts +0 -21
- package/lib/components/tree-v2/src/composables/useTree.d.ts +0 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker.vue_vue&type=script&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n <el-popper\n ref=\"refPopper\"\n v-model:visible=\"pickerVisible\"\n manual-mode\n :effect=\"Effect.LIGHT\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n :popper-class=\"`el-picker__popper ${popperClass}`\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n transition=\"el-zoom-in-top\"\n :gpu-acceleration=\"false\"\n :stop-popper-mouse-event=\"false\"\n append-to-body\n @before-enter=\"pickerActualVisible = true\"\n @after-leave=\"pickerActualVisible = false\"\n >\n <template #trigger>\n <el-input\n v-if=\"!isRangeInput\"\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n :model-value=\"displayValue\"\n :name=\"name\"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n class=\"el-date-editor\"\n :class=\"'el-date-editor--' + type\"\n :readonly=\"!editable || readonly || isDatesPicker || type === 'week'\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @keydown=\"handleKeydown\"\n @change=\"handleChange\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <template #prefix>\n <el-icon class=\"el-input__icon\" @click=\"handleFocus\">\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClose\"\n class=\"el-input__icon clear-icon\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <div\n v-else\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n class=\"el-date-editor el-range-editor el-input__inner\"\n :class=\"[\n 'el-date-editor--' + type,\n pickerSize ? `el-range-editor--${pickerSize}` : '',\n pickerDisabled ? 'is-disabled' : '',\n pickerVisible ? 'is-active' : '',\n ]\"\n @click=\"handleFocus\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @keydown=\"handleKeydown\"\n >\n <el-icon class=\"el-input__icon el-range__icon\" @click=\"handleFocus\">\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n <input\n autocomplete=\"off\"\n :name=\"name && name[0]\"\n :placeholder=\"startPlaceholder\"\n :value=\"displayValue && displayValue[0]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @input=\"handleStartInput\"\n @change=\"handleStartChange\"\n @focus=\"handleFocus\"\n />\n <slot name=\"range-separator\">\n <span class=\"el-range-separator\">{{ rangeSeparator }}</span>\n </slot>\n <input\n autocomplete=\"off\"\n :name=\"name && name[1]\"\n :placeholder=\"endPlaceholder\"\n :value=\"displayValue && displayValue[1]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @focus=\"handleFocus\"\n @input=\"handleEndInput\"\n @change=\"handleEndChange\"\n />\n <el-icon\n class=\"el-input__icon el-range__close-icon\"\n :class=\"{\n 'el-range__close-icon--hidden': !showClose,\n }\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </div>\n </template>\n <template #default>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @mousedown.stop\n ></slot>\n </template>\n </el-popper>\n</template>\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n nextTick,\n inject,\n watch,\n provide,\n} from 'vue'\nimport dayjs from 'dayjs'\nimport isEqual from 'lodash/isEqual'\nimport { useLocaleInject } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { elFormKey, elFormItemKey } from '@element-plus/tokens'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElPopper, { Effect } from '@element-plus/components/popper'\nimport { EVENT_CODE } from '@element-plus/utils/aria'\nimport { useGlobalConfig, isEmpty } from '@element-plus/utils/util'\nimport { Clock, Calendar } from '@element-plus/icons'\nimport { timePickerDefaultProps } from './props'\n\nimport type { Dayjs } from 'dayjs'\nimport type { ElFormContext, ElFormItemContext } from '@element-plus/tokens'\nimport type { Options } from '@popperjs/core'\n\ninterface PickerOptions {\n isValidValue: (date: Dayjs) => boolean\n handleKeydown: (event: KeyboardEvent) => void\n parseUserInput: (value: Dayjs) => dayjs.Dayjs\n formatToString: (value: Dayjs) => string | string[]\n getRangeAvailableTime: (date: Dayjs) => dayjs.Dayjs\n getDefaultValue: () => Dayjs\n panelReady: boolean\n handleClear: () => void\n}\n\n// Date object and string\nconst dateEquals = function (a: Date | any, b: Date | any) {\n const aIsDate = a instanceof Date\n const bIsDate = b instanceof Date\n if (aIsDate && bIsDate) {\n return a.getTime() === b.getTime()\n }\n if (!aIsDate && !bIsDate) {\n return a === b\n }\n return false\n}\n\nconst valueEquals = function (a: Array<Date> | any, b: Array<Date> | any) {\n const aIsArray = a instanceof Array\n const bIsArray = b instanceof Array\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) {\n return false\n }\n return (a as Array<Date>).every((item, index) => dateEquals(item, b[index]))\n }\n if (!aIsArray && !bIsArray) {\n return dateEquals(a, b)\n }\n return false\n}\n\nconst parser = function (\n date: Date | string,\n format: string,\n lang: string\n): Dayjs {\n const day = isEmpty(format)\n ? dayjs(date).locale(lang)\n : dayjs(date, format).locale(lang)\n return day.isValid() ? day : undefined\n}\n\nconst formatter = function (date: Date, format: string, lang: string) {\n return isEmpty(format) ? date : dayjs(date).locale(lang).format(format)\n}\n\nexport default defineComponent({\n name: 'Picker',\n components: {\n ElInput,\n ElPopper,\n ElIcon,\n },\n directives: { clickoutside: ClickOutside },\n props: timePickerDefaultProps,\n emits: ['update:modelValue', 'change', 'focus', 'blur', 'calendar-change'],\n setup(props, ctx) {\n const ELEMENT = useGlobalConfig()\n const { lang } = useLocaleInject()\n\n const elForm = inject(elFormKey, {} as ElFormContext)\n const elFormItem = inject(elFormItemKey, {} as ElFormItemContext)\n const elPopperOptions = inject('ElPopperOptions', {} as Options)\n\n const refPopper = ref(null)\n const pickerVisible = ref(false)\n const pickerActualVisible = ref(false)\n const valueOnOpen = ref(null)\n\n watch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n ctx.emit('blur')\n blurInput()\n props.validateEvent && elFormItem.validate?.('blur')\n } else {\n valueOnOpen.value = props.modelValue\n }\n })\n const emitChange = (val, isClear?: boolean) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n ctx.emit('change', val)\n props.validateEvent && elFormItem.validate?.('change')\n }\n }\n const emitInput = (val) => {\n if (!valueEquals(props.modelValue, val)) {\n let formatValue\n if (Array.isArray(val)) {\n formatValue = val.map((_) =>\n formatter(_, props.valueFormat, lang.value)\n )\n } else if (val) {\n formatValue = formatter(val, props.valueFormat, lang.value)\n }\n ctx.emit('update:modelValue', val ? formatValue : val, lang.value)\n }\n }\n const refInput = computed(() => {\n if (refPopper.value.triggerRef) {\n const _r = isRangeInput.value\n ? refPopper.value.triggerRef\n : refPopper.value.triggerRef.$el\n return [].slice.call(_r.querySelectorAll('input'))\n }\n return []\n })\n const setSelectionRange = (start, end, pos) => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n }\n const onPick = (date: any = '', visible = false) => {\n pickerVisible.value = visible\n let result\n if (Array.isArray(date)) {\n result = date.map((_) => _.toDate())\n } else {\n // clear btn emit null\n result = date ? date.toDate() : date\n }\n userInput.value = null\n emitInput(result)\n }\n const handleFocus = (e) => {\n if (props.readonly || pickerDisabled.value || pickerVisible.value) return\n pickerVisible.value = true\n ctx.emit('focus', e)\n }\n\n const handleBlur = () => {\n pickerVisible.value = false\n blurInput()\n }\n\n const pickerDisabled = computed(() => {\n return props.disabled || elForm.disabled\n })\n\n const parsedValue = computed(() => {\n let result\n if (valueIsEmpty.value) {\n if (pickerOptions.value.getDefaultValue) {\n result = pickerOptions.value.getDefaultValue()\n }\n } else {\n if (Array.isArray(props.modelValue)) {\n result = props.modelValue.map((_) =>\n parser(_, props.valueFormat, lang.value)\n )\n } else {\n result = parser(props.modelValue, props.valueFormat, lang.value)\n }\n }\n\n if (pickerOptions.value.getRangeAvailableTime) {\n const availableResult =\n pickerOptions.value.getRangeAvailableTime(result)\n if (!isEqual(availableResult, result)) {\n result = availableResult\n emitInput(\n Array.isArray(result)\n ? result.map((_) => _.toDate())\n : result.toDate()\n )\n }\n }\n if (Array.isArray(result) && result.some((_) => !_)) {\n result = []\n }\n return result\n })\n\n const displayValue = computed(() => {\n if (!pickerOptions.value.panelReady) return\n const formattedValue = formatDayjsToString(parsedValue.value)\n if (Array.isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (!isTimePicker.value && valueIsEmpty.value) return\n if (!pickerVisible.value && valueIsEmpty.value) return\n if (formattedValue) {\n return isDatesPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n })\n\n const isTimeLikePicker = computed(() => props.type.includes('time'))\n\n const isTimePicker = computed(() => props.type.startsWith('time'))\n\n const isDatesPicker = computed(() => props.type === 'dates')\n\n const triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n )\n\n const showClose = ref(false)\n\n const onClearIconClick = (event) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClose.value) {\n event.stopPropagation()\n emitInput(null)\n emitChange(null, true)\n showClose.value = false\n pickerVisible.value = false\n pickerOptions.value.handleClear && pickerOptions.value.handleClear()\n }\n }\n const valueIsEmpty = computed(() => {\n return (\n !props.modelValue ||\n (Array.isArray(props.modelValue) && !props.modelValue.length)\n )\n })\n const onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n showClose.value = true\n }\n }\n const onMouseLeave = () => {\n showClose.value = false\n }\n const isRangeInput = computed(() => {\n return props.type.indexOf('range') > -1\n })\n\n const pickerSize = computed(() => {\n return props.size || elFormItem.size || ELEMENT.size\n })\n\n const popperPaneRef = computed(() => {\n return refPopper.value?.popperRef\n })\n\n const onClickOutside = () => {\n if (!pickerVisible.value) return\n pickerVisible.value = false\n }\n\n const userInput = ref(null)\n\n const handleChange = () => {\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(\n Array.isArray(value)\n ? value.map((_) => _.toDate())\n : value.toDate()\n )\n userInput.value = null\n }\n }\n }\n if (userInput.value === '') {\n emitInput(null)\n emitChange(null)\n userInput.value = null\n }\n }\n\n const blurInput = () => {\n refInput.value.forEach((input) => input.blur())\n }\n\n const parseUserInputToDayjs = (value) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput(value)\n }\n\n const formatDayjsToString = (value) => {\n if (!value) return null\n return pickerOptions.value.formatToString(value)\n }\n\n const isValidValue = (value) => {\n return pickerOptions.value.isValidValue(value)\n }\n\n const handleKeydown = (event) => {\n const code = event.code\n\n if (code === EVENT_CODE.esc) {\n pickerVisible.value = false\n event.stopPropagation()\n return\n }\n\n if (code === EVENT_CODE.tab) {\n if (!isRangeInput.value) {\n handleChange()\n pickerVisible.value = false\n event.stopPropagation()\n } else {\n // user may change focus between two input\n setTimeout(() => {\n if (refInput.value.indexOf(document.activeElement) === -1) {\n pickerVisible.value = false\n blurInput()\n }\n }, 0)\n }\n return\n }\n\n if (code === EVENT_CODE.enter) {\n if (\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value))\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n\n if (pickerOptions.value.handleKeydown) {\n pickerOptions.value.handleKeydown(event)\n }\n }\n const onUserInput = (e) => {\n userInput.value = e\n }\n\n const handleStartInput = (event) => {\n if (userInput.value) {\n userInput.value = [event.target.value, userInput.value[1]]\n } else {\n userInput.value = [event.target.value, null]\n }\n }\n\n const handleEndInput = (event) => {\n if (userInput.value) {\n userInput.value = [userInput.value[0], event.target.value]\n } else {\n userInput.value = [null, event.target.value]\n }\n }\n\n const handleStartChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[0])\n if (value && value.isValid()) {\n userInput.value = [formatDayjsToString(value), displayValue.value[1]]\n const newValue = [value, parsedValue.value && parsedValue.value[1]]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const handleEndChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[1])\n if (value && value.isValid()) {\n userInput.value = [displayValue.value[0], formatDayjsToString(value)]\n const newValue = [parsedValue.value && parsedValue.value[0], value]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const pickerOptions = ref<Partial<PickerOptions>>({})\n const onSetPickerOption = <T extends keyof PickerOptions>(\n e: [T, PickerOptions[T]]\n ) => {\n pickerOptions.value[e[0]] = e[1]\n pickerOptions.value.panelReady = true\n }\n\n const onCalendarChange = (e) => {\n ctx.emit('calendar-change', e)\n }\n\n provide('EP_PICKER_BASE', {\n props,\n })\n\n return {\n Effect,\n\n // injected popper options\n elPopperOptions,\n\n isDatesPicker,\n handleEndChange,\n handleStartChange,\n handleStartInput,\n handleEndInput,\n onUserInput,\n handleChange,\n handleKeydown,\n popperPaneRef,\n onClickOutside,\n pickerSize,\n isRangeInput,\n onMouseLeave,\n onMouseEnter,\n onClearIconClick,\n showClose,\n triggerIcon,\n onPick,\n handleFocus,\n handleBlur,\n pickerVisible,\n pickerActualVisible,\n displayValue,\n parsedValue,\n setSelectionRange,\n refPopper,\n pickerDisabled,\n onSetPickerOption,\n onCalendarChange,\n }\n },\n})\n</script>\n"],"names":["ElPopper"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker.vue_vue&type=script&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n <el-popper\n ref=\"refPopper\"\n v-model:visible=\"pickerVisible\"\n manual-mode\n :effect=\"Effect.LIGHT\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n :popper-class=\"`el-picker__popper ${popperClass}`\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n transition=\"el-zoom-in-top\"\n :gpu-acceleration=\"false\"\n :stop-popper-mouse-event=\"false\"\n append-to-body\n @before-enter=\"pickerActualVisible = true\"\n @after-leave=\"pickerActualVisible = false\"\n >\n <template #trigger>\n <el-input\n v-if=\"!isRangeInput\"\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n :model-value=\"displayValue\"\n :name=\"name\"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n class=\"el-date-editor\"\n :class=\"'el-date-editor--' + type\"\n :readonly=\"!editable || readonly || isDatesPicker || type === 'week'\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @keydown=\"handleKeydown\"\n @change=\"handleChange\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n class=\"el-input__icon\"\n @click=\"handleFocus\"\n >\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClose && clearIcon\"\n class=\"el-input__icon clear-icon\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <div\n v-else\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n class=\"el-date-editor el-range-editor el-input__inner\"\n :class=\"[\n 'el-date-editor--' + type,\n pickerSize ? `el-range-editor--${pickerSize}` : '',\n pickerDisabled ? 'is-disabled' : '',\n pickerVisible ? 'is-active' : '',\n ]\"\n @click=\"handleFocus\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @keydown=\"handleKeydown\"\n >\n <el-icon\n v-if=\"triggerIcon\"\n class=\"el-input__icon el-range__icon\"\n @click=\"handleFocus\"\n >\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n <input\n autocomplete=\"off\"\n :name=\"name && name[0]\"\n :placeholder=\"startPlaceholder\"\n :value=\"displayValue && displayValue[0]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @input=\"handleStartInput\"\n @change=\"handleStartChange\"\n @focus=\"handleFocus\"\n />\n <slot name=\"range-separator\">\n <span class=\"el-range-separator\">{{ rangeSeparator }}</span>\n </slot>\n <input\n autocomplete=\"off\"\n :name=\"name && name[1]\"\n :placeholder=\"endPlaceholder\"\n :value=\"displayValue && displayValue[1]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @focus=\"handleFocus\"\n @input=\"handleEndInput\"\n @change=\"handleEndChange\"\n />\n <el-icon\n v-if=\"clearIcon\"\n class=\"el-input__icon el-range__close-icon\"\n :class=\"{\n 'el-range__close-icon--hidden': !showClose,\n }\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </div>\n </template>\n <template #default>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @mousedown.stop\n ></slot>\n </template>\n </el-popper>\n</template>\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n nextTick,\n inject,\n watch,\n provide,\n} from 'vue'\nimport dayjs from 'dayjs'\nimport isEqual from 'lodash/isEqual'\nimport { useLocaleInject } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { elFormKey, elFormItemKey } from '@element-plus/tokens'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElPopper, { Effect } from '@element-plus/components/popper'\nimport { EVENT_CODE } from '@element-plus/utils/aria'\nimport { useGlobalConfig, isEmpty } from '@element-plus/utils/util'\nimport { Clock, Calendar } from '@element-plus/icons'\nimport { timePickerDefaultProps } from './props'\n\nimport type { Dayjs } from 'dayjs'\nimport type { ElFormContext, ElFormItemContext } from '@element-plus/tokens'\nimport type { Options } from '@popperjs/core'\n\ninterface PickerOptions {\n isValidValue: (date: Dayjs) => boolean\n handleKeydown: (event: KeyboardEvent) => void\n parseUserInput: (value: Dayjs) => dayjs.Dayjs\n formatToString: (value: Dayjs) => string | string[]\n getRangeAvailableTime: (date: Dayjs) => dayjs.Dayjs\n getDefaultValue: () => Dayjs\n panelReady: boolean\n handleClear: () => void\n}\n\n// Date object and string\nconst dateEquals = function (a: Date | any, b: Date | any) {\n const aIsDate = a instanceof Date\n const bIsDate = b instanceof Date\n if (aIsDate && bIsDate) {\n return a.getTime() === b.getTime()\n }\n if (!aIsDate && !bIsDate) {\n return a === b\n }\n return false\n}\n\nconst valueEquals = function (a: Array<Date> | any, b: Array<Date> | any) {\n const aIsArray = a instanceof Array\n const bIsArray = b instanceof Array\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) {\n return false\n }\n return (a as Array<Date>).every((item, index) => dateEquals(item, b[index]))\n }\n if (!aIsArray && !bIsArray) {\n return dateEquals(a, b)\n }\n return false\n}\n\nconst parser = function (\n date: Date | string,\n format: string,\n lang: string\n): Dayjs {\n const day = isEmpty(format)\n ? dayjs(date).locale(lang)\n : dayjs(date, format).locale(lang)\n return day.isValid() ? day : undefined\n}\n\nconst formatter = function (date: Date, format: string, lang: string) {\n return isEmpty(format) ? date : dayjs(date).locale(lang).format(format)\n}\n\nexport default defineComponent({\n name: 'Picker',\n components: {\n ElInput,\n ElPopper,\n ElIcon,\n },\n directives: { clickoutside: ClickOutside },\n props: timePickerDefaultProps,\n emits: ['update:modelValue', 'change', 'focus', 'blur', 'calendar-change'],\n setup(props, ctx) {\n const ELEMENT = useGlobalConfig()\n const { lang } = useLocaleInject()\n\n const elForm = inject(elFormKey, {} as ElFormContext)\n const elFormItem = inject(elFormItemKey, {} as ElFormItemContext)\n const elPopperOptions = inject('ElPopperOptions', {} as Options)\n\n const refPopper = ref(null)\n const pickerVisible = ref(false)\n const pickerActualVisible = ref(false)\n const valueOnOpen = ref(null)\n\n watch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n ctx.emit('blur')\n blurInput()\n props.validateEvent && elFormItem.validate?.('blur')\n } else {\n valueOnOpen.value = props.modelValue\n }\n })\n const emitChange = (val, isClear?: boolean) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n ctx.emit('change', val)\n props.validateEvent && elFormItem.validate?.('change')\n }\n }\n const emitInput = (val) => {\n if (!valueEquals(props.modelValue, val)) {\n let formatValue\n if (Array.isArray(val)) {\n formatValue = val.map((_) =>\n formatter(_, props.valueFormat, lang.value)\n )\n } else if (val) {\n formatValue = formatter(val, props.valueFormat, lang.value)\n }\n ctx.emit('update:modelValue', val ? formatValue : val, lang.value)\n }\n }\n const refInput = computed(() => {\n if (refPopper.value.triggerRef) {\n const _r = isRangeInput.value\n ? refPopper.value.triggerRef\n : refPopper.value.triggerRef.$el\n return [].slice.call(_r.querySelectorAll('input'))\n }\n return []\n })\n const setSelectionRange = (start, end, pos) => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n }\n const onPick = (date: any = '', visible = false) => {\n pickerVisible.value = visible\n let result\n if (Array.isArray(date)) {\n result = date.map((_) => _.toDate())\n } else {\n // clear btn emit null\n result = date ? date.toDate() : date\n }\n userInput.value = null\n emitInput(result)\n }\n const handleFocus = (e) => {\n if (props.readonly || pickerDisabled.value || pickerVisible.value) return\n pickerVisible.value = true\n ctx.emit('focus', e)\n }\n\n const handleBlur = () => {\n pickerVisible.value = false\n blurInput()\n }\n\n const pickerDisabled = computed(() => {\n return props.disabled || elForm.disabled\n })\n\n const parsedValue = computed(() => {\n let result\n if (valueIsEmpty.value) {\n if (pickerOptions.value.getDefaultValue) {\n result = pickerOptions.value.getDefaultValue()\n }\n } else {\n if (Array.isArray(props.modelValue)) {\n result = props.modelValue.map((_) =>\n parser(_, props.valueFormat, lang.value)\n )\n } else {\n result = parser(props.modelValue, props.valueFormat, lang.value)\n }\n }\n\n if (pickerOptions.value.getRangeAvailableTime) {\n const availableResult =\n pickerOptions.value.getRangeAvailableTime(result)\n if (!isEqual(availableResult, result)) {\n result = availableResult\n emitInput(\n Array.isArray(result)\n ? result.map((_) => _.toDate())\n : result.toDate()\n )\n }\n }\n if (Array.isArray(result) && result.some((_) => !_)) {\n result = []\n }\n return result\n })\n\n const displayValue = computed(() => {\n if (!pickerOptions.value.panelReady) return\n const formattedValue = formatDayjsToString(parsedValue.value)\n if (Array.isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (!isTimePicker.value && valueIsEmpty.value) return\n if (!pickerVisible.value && valueIsEmpty.value) return\n if (formattedValue) {\n return isDatesPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n })\n\n const isTimeLikePicker = computed(() => props.type.includes('time'))\n\n const isTimePicker = computed(() => props.type.startsWith('time'))\n\n const isDatesPicker = computed(() => props.type === 'dates')\n\n const triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n )\n\n const showClose = ref(false)\n\n const onClearIconClick = (event) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClose.value) {\n event.stopPropagation()\n emitInput(null)\n emitChange(null, true)\n showClose.value = false\n pickerVisible.value = false\n pickerOptions.value.handleClear && pickerOptions.value.handleClear()\n }\n }\n const valueIsEmpty = computed(() => {\n return (\n !props.modelValue ||\n (Array.isArray(props.modelValue) && !props.modelValue.length)\n )\n })\n const onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n showClose.value = true\n }\n }\n const onMouseLeave = () => {\n showClose.value = false\n }\n const isRangeInput = computed(() => {\n return props.type.indexOf('range') > -1\n })\n\n const pickerSize = computed(() => {\n return props.size || elFormItem.size || ELEMENT.size\n })\n\n const popperPaneRef = computed(() => {\n return refPopper.value?.popperRef\n })\n\n const onClickOutside = () => {\n if (!pickerVisible.value) return\n pickerVisible.value = false\n }\n\n const userInput = ref(null)\n\n const handleChange = () => {\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(\n Array.isArray(value)\n ? value.map((_) => _.toDate())\n : value.toDate()\n )\n userInput.value = null\n }\n }\n }\n if (userInput.value === '') {\n emitInput(null)\n emitChange(null)\n userInput.value = null\n }\n }\n\n const blurInput = () => {\n refInput.value.forEach((input) => input.blur())\n }\n\n const parseUserInputToDayjs = (value) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput(value)\n }\n\n const formatDayjsToString = (value) => {\n if (!value) return null\n return pickerOptions.value.formatToString(value)\n }\n\n const isValidValue = (value) => {\n return pickerOptions.value.isValidValue(value)\n }\n\n const handleKeydown = (event) => {\n const code = event.code\n\n if (code === EVENT_CODE.esc) {\n pickerVisible.value = false\n event.stopPropagation()\n return\n }\n\n if (code === EVENT_CODE.tab) {\n if (!isRangeInput.value) {\n handleChange()\n pickerVisible.value = false\n event.stopPropagation()\n } else {\n // user may change focus between two input\n setTimeout(() => {\n if (refInput.value.indexOf(document.activeElement) === -1) {\n pickerVisible.value = false\n blurInput()\n }\n }, 0)\n }\n return\n }\n\n if (code === EVENT_CODE.enter) {\n if (\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value))\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n\n if (pickerOptions.value.handleKeydown) {\n pickerOptions.value.handleKeydown(event)\n }\n }\n const onUserInput = (e) => {\n userInput.value = e\n }\n\n const handleStartInput = (event) => {\n if (userInput.value) {\n userInput.value = [event.target.value, userInput.value[1]]\n } else {\n userInput.value = [event.target.value, null]\n }\n }\n\n const handleEndInput = (event) => {\n if (userInput.value) {\n userInput.value = [userInput.value[0], event.target.value]\n } else {\n userInput.value = [null, event.target.value]\n }\n }\n\n const handleStartChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[0])\n if (value && value.isValid()) {\n userInput.value = [formatDayjsToString(value), displayValue.value[1]]\n const newValue = [value, parsedValue.value && parsedValue.value[1]]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const handleEndChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[1])\n if (value && value.isValid()) {\n userInput.value = [displayValue.value[0], formatDayjsToString(value)]\n const newValue = [parsedValue.value && parsedValue.value[0], value]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const pickerOptions = ref<Partial<PickerOptions>>({})\n const onSetPickerOption = <T extends keyof PickerOptions>(\n e: [T, PickerOptions[T]]\n ) => {\n pickerOptions.value[e[0]] = e[1]\n pickerOptions.value.panelReady = true\n }\n\n const onCalendarChange = (e) => {\n ctx.emit('calendar-change', e)\n }\n\n provide('EP_PICKER_BASE', {\n props,\n })\n\n return {\n Effect,\n\n // injected popper options\n elPopperOptions,\n\n isDatesPicker,\n handleEndChange,\n handleStartChange,\n handleStartInput,\n handleEndInput,\n onUserInput,\n handleChange,\n handleKeydown,\n popperPaneRef,\n onClickOutside,\n pickerSize,\n isRangeInput,\n onMouseLeave,\n onMouseEnter,\n onClearIconClick,\n showClose,\n triggerIcon,\n onPick,\n handleFocus,\n handleBlur,\n pickerVisible,\n pickerActualVisible,\n displayValue,\n parsedValue,\n setSelectionRange,\n refPopper,\n pickerDisabled,\n onSetPickerOption,\n onCalendarChange,\n }\n },\n})\n</script>\n"],"names":["ElPopper"],"mappings":"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"}
|
package/es/components/time-picker/src/common/picker.vue_vue&type=template&id=1d54be91&lang.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveComponent, resolveDirective, openBlock, createBlock, mergeProps, withCtx, withDirectives, normalizeClass,
|
|
1
|
+
import { resolveComponent, resolveDirective, openBlock, createBlock, mergeProps, withCtx, withDirectives, normalizeClass, resolveDynamicComponent, createCommentVNode, createElementBlock, createElementVNode, renderSlot, toDisplayString, withModifiers } from 'vue';
|
|
2
2
|
|
|
3
3
|
const _hoisted_1 = ["name", "placeholder", "value", "disabled", "readonly"];
|
|
4
4
|
const _hoisted_2 = { class: "el-range-separator" };
|
|
@@ -45,7 +45,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
45
45
|
onMouseleave: _ctx.onMouseLeave
|
|
46
46
|
}, {
|
|
47
47
|
prefix: withCtx(() => [
|
|
48
|
-
|
|
48
|
+
_ctx.triggerIcon ? (openBlock(), createBlock(_component_el_icon, {
|
|
49
|
+
key: 0,
|
|
49
50
|
class: "el-input__icon",
|
|
50
51
|
onClick: _ctx.handleFocus
|
|
51
52
|
}, {
|
|
@@ -53,10 +54,10 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
53
54
|
(openBlock(), createBlock(resolveDynamicComponent(_ctx.triggerIcon)))
|
|
54
55
|
]),
|
|
55
56
|
_: 1
|
|
56
|
-
}, 8, ["onClick"])
|
|
57
|
+
}, 8, ["onClick"])) : createCommentVNode("v-if", true)
|
|
57
58
|
]),
|
|
58
59
|
suffix: withCtx(() => [
|
|
59
|
-
_ctx.showClose ? (openBlock(), createBlock(_component_el_icon, {
|
|
60
|
+
_ctx.showClose && _ctx.clearIcon ? (openBlock(), createBlock(_component_el_icon, {
|
|
60
61
|
key: 0,
|
|
61
62
|
class: "el-input__icon clear-icon",
|
|
62
63
|
onClick: _ctx.onClearIconClick
|
|
@@ -83,7 +84,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
83
84
|
onMouseleave: _cache[8] || (_cache[8] = (...args) => _ctx.onMouseLeave && _ctx.onMouseLeave(...args)),
|
|
84
85
|
onKeydown: _cache[9] || (_cache[9] = (...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args))
|
|
85
86
|
}, [
|
|
86
|
-
|
|
87
|
+
_ctx.triggerIcon ? (openBlock(), createBlock(_component_el_icon, {
|
|
88
|
+
key: 0,
|
|
87
89
|
class: "el-input__icon el-range__icon",
|
|
88
90
|
onClick: _ctx.handleFocus
|
|
89
91
|
}, {
|
|
@@ -91,7 +93,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
91
93
|
(openBlock(), createBlock(resolveDynamicComponent(_ctx.triggerIcon)))
|
|
92
94
|
]),
|
|
93
95
|
_: 1
|
|
94
|
-
}, 8, ["onClick"]),
|
|
96
|
+
}, 8, ["onClick"])) : createCommentVNode("v-if", true),
|
|
95
97
|
createElementVNode("input", {
|
|
96
98
|
autocomplete: "off",
|
|
97
99
|
name: _ctx.name && _ctx.name[0],
|
|
@@ -119,7 +121,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
119
121
|
onInput: _cache[4] || (_cache[4] = (...args) => _ctx.handleEndInput && _ctx.handleEndInput(...args)),
|
|
120
122
|
onChange: _cache[5] || (_cache[5] = (...args) => _ctx.handleEndChange && _ctx.handleEndChange(...args))
|
|
121
123
|
}, null, 40, _hoisted_3),
|
|
122
|
-
|
|
124
|
+
_ctx.clearIcon ? (openBlock(), createBlock(_component_el_icon, {
|
|
125
|
+
key: 1,
|
|
123
126
|
class: normalizeClass(["el-input__icon el-range__close-icon", {
|
|
124
127
|
"el-range__close-icon--hidden": !_ctx.showClose
|
|
125
128
|
}]),
|
|
@@ -129,7 +132,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
129
132
|
(openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon)))
|
|
130
133
|
]),
|
|
131
134
|
_: 1
|
|
132
|
-
}, 8, ["class", "onClick"])
|
|
135
|
+
}, 8, ["class", "onClick"])) : createCommentVNode("v-if", true)
|
|
133
136
|
], 34)), [
|
|
134
137
|
[_directive_clickoutside, _ctx.onClickOutside, _ctx.popperPaneRef]
|
|
135
138
|
])
|
package/es/components/time-picker/src/common/picker.vue_vue&type=template&id=1d54be91&lang.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker.vue_vue&type=template&id=1d54be91&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue?vue&type=template&id=1d54be91&lang.js"],"sourcesContent":["<template>\n <el-popper\n ref=\"refPopper\"\n v-model:visible=\"pickerVisible\"\n manual-mode\n :effect=\"Effect.LIGHT\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n :popper-class=\"`el-picker__popper ${popperClass}`\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n transition=\"el-zoom-in-top\"\n :gpu-acceleration=\"false\"\n :stop-popper-mouse-event=\"false\"\n append-to-body\n @before-enter=\"pickerActualVisible = true\"\n @after-leave=\"pickerActualVisible = false\"\n >\n <template #trigger>\n <el-input\n v-if=\"!isRangeInput\"\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n :model-value=\"displayValue\"\n :name=\"name\"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n class=\"el-date-editor\"\n :class=\"'el-date-editor--' + type\"\n :readonly=\"!editable || readonly || isDatesPicker || type === 'week'\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @keydown=\"handleKeydown\"\n @change=\"handleChange\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <template #prefix>\n <el-icon class=\"el-input__icon\" @click=\"handleFocus\">\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClose\"\n class=\"el-input__icon clear-icon\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <div\n v-else\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n class=\"el-date-editor el-range-editor el-input__inner\"\n :class=\"[\n 'el-date-editor--' + type,\n pickerSize ? `el-range-editor--${pickerSize}` : '',\n pickerDisabled ? 'is-disabled' : '',\n pickerVisible ? 'is-active' : '',\n ]\"\n @click=\"handleFocus\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @keydown=\"handleKeydown\"\n >\n <el-icon class=\"el-input__icon el-range__icon\" @click=\"handleFocus\">\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n <input\n autocomplete=\"off\"\n :name=\"name && name[0]\"\n :placeholder=\"startPlaceholder\"\n :value=\"displayValue && displayValue[0]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @input=\"handleStartInput\"\n @change=\"handleStartChange\"\n @focus=\"handleFocus\"\n />\n <slot name=\"range-separator\">\n <span class=\"el-range-separator\">{{ rangeSeparator }}</span>\n </slot>\n <input\n autocomplete=\"off\"\n :name=\"name && name[1]\"\n :placeholder=\"endPlaceholder\"\n :value=\"displayValue && displayValue[1]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @focus=\"handleFocus\"\n @input=\"handleEndInput\"\n @change=\"handleEndChange\"\n />\n <el-icon\n class=\"el-input__icon el-range__close-icon\"\n :class=\"{\n 'el-range__close-icon--hidden': !showClose,\n }\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </div>\n </template>\n <template #default>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @mousedown.stop\n ></slot>\n </template>\n </el-popper>\n</template>\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n nextTick,\n inject,\n watch,\n provide,\n} from 'vue'\nimport dayjs from 'dayjs'\nimport isEqual from 'lodash/isEqual'\nimport { useLocaleInject } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { elFormKey, elFormItemKey } from '@element-plus/tokens'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElPopper, { Effect } from '@element-plus/components/popper'\nimport { EVENT_CODE } from '@element-plus/utils/aria'\nimport { useGlobalConfig, isEmpty } from '@element-plus/utils/util'\nimport { Clock, Calendar } from '@element-plus/icons'\nimport { timePickerDefaultProps } from './props'\n\nimport type { Dayjs } from 'dayjs'\nimport type { ElFormContext, ElFormItemContext } from '@element-plus/tokens'\nimport type { Options } from '@popperjs/core'\n\ninterface PickerOptions {\n isValidValue: (date: Dayjs) => boolean\n handleKeydown: (event: KeyboardEvent) => void\n parseUserInput: (value: Dayjs) => dayjs.Dayjs\n formatToString: (value: Dayjs) => string | string[]\n getRangeAvailableTime: (date: Dayjs) => dayjs.Dayjs\n getDefaultValue: () => Dayjs\n panelReady: boolean\n handleClear: () => void\n}\n\n// Date object and string\nconst dateEquals = function (a: Date | any, b: Date | any) {\n const aIsDate = a instanceof Date\n const bIsDate = b instanceof Date\n if (aIsDate && bIsDate) {\n return a.getTime() === b.getTime()\n }\n if (!aIsDate && !bIsDate) {\n return a === b\n }\n return false\n}\n\nconst valueEquals = function (a: Array<Date> | any, b: Array<Date> | any) {\n const aIsArray = a instanceof Array\n const bIsArray = b instanceof Array\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) {\n return false\n }\n return (a as Array<Date>).every((item, index) => dateEquals(item, b[index]))\n }\n if (!aIsArray && !bIsArray) {\n return dateEquals(a, b)\n }\n return false\n}\n\nconst parser = function (\n date: Date | string,\n format: string,\n lang: string\n): Dayjs {\n const day = isEmpty(format)\n ? dayjs(date).locale(lang)\n : dayjs(date, format).locale(lang)\n return day.isValid() ? day : undefined\n}\n\nconst formatter = function (date: Date, format: string, lang: string) {\n return isEmpty(format) ? date : dayjs(date).locale(lang).format(format)\n}\n\nexport default defineComponent({\n name: 'Picker',\n components: {\n ElInput,\n ElPopper,\n ElIcon,\n },\n directives: { clickoutside: ClickOutside },\n props: timePickerDefaultProps,\n emits: ['update:modelValue', 'change', 'focus', 'blur', 'calendar-change'],\n setup(props, ctx) {\n const ELEMENT = useGlobalConfig()\n const { lang } = useLocaleInject()\n\n const elForm = inject(elFormKey, {} as ElFormContext)\n const elFormItem = inject(elFormItemKey, {} as ElFormItemContext)\n const elPopperOptions = inject('ElPopperOptions', {} as Options)\n\n const refPopper = ref(null)\n const pickerVisible = ref(false)\n const pickerActualVisible = ref(false)\n const valueOnOpen = ref(null)\n\n watch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n ctx.emit('blur')\n blurInput()\n props.validateEvent && elFormItem.validate?.('blur')\n } else {\n valueOnOpen.value = props.modelValue\n }\n })\n const emitChange = (val, isClear?: boolean) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n ctx.emit('change', val)\n props.validateEvent && elFormItem.validate?.('change')\n }\n }\n const emitInput = (val) => {\n if (!valueEquals(props.modelValue, val)) {\n let formatValue\n if (Array.isArray(val)) {\n formatValue = val.map((_) =>\n formatter(_, props.valueFormat, lang.value)\n )\n } else if (val) {\n formatValue = formatter(val, props.valueFormat, lang.value)\n }\n ctx.emit('update:modelValue', val ? formatValue : val, lang.value)\n }\n }\n const refInput = computed(() => {\n if (refPopper.value.triggerRef) {\n const _r = isRangeInput.value\n ? refPopper.value.triggerRef\n : refPopper.value.triggerRef.$el\n return [].slice.call(_r.querySelectorAll('input'))\n }\n return []\n })\n const setSelectionRange = (start, end, pos) => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n }\n const onPick = (date: any = '', visible = false) => {\n pickerVisible.value = visible\n let result\n if (Array.isArray(date)) {\n result = date.map((_) => _.toDate())\n } else {\n // clear btn emit null\n result = date ? date.toDate() : date\n }\n userInput.value = null\n emitInput(result)\n }\n const handleFocus = (e) => {\n if (props.readonly || pickerDisabled.value || pickerVisible.value) return\n pickerVisible.value = true\n ctx.emit('focus', e)\n }\n\n const handleBlur = () => {\n pickerVisible.value = false\n blurInput()\n }\n\n const pickerDisabled = computed(() => {\n return props.disabled || elForm.disabled\n })\n\n const parsedValue = computed(() => {\n let result\n if (valueIsEmpty.value) {\n if (pickerOptions.value.getDefaultValue) {\n result = pickerOptions.value.getDefaultValue()\n }\n } else {\n if (Array.isArray(props.modelValue)) {\n result = props.modelValue.map((_) =>\n parser(_, props.valueFormat, lang.value)\n )\n } else {\n result = parser(props.modelValue, props.valueFormat, lang.value)\n }\n }\n\n if (pickerOptions.value.getRangeAvailableTime) {\n const availableResult =\n pickerOptions.value.getRangeAvailableTime(result)\n if (!isEqual(availableResult, result)) {\n result = availableResult\n emitInput(\n Array.isArray(result)\n ? result.map((_) => _.toDate())\n : result.toDate()\n )\n }\n }\n if (Array.isArray(result) && result.some((_) => !_)) {\n result = []\n }\n return result\n })\n\n const displayValue = computed(() => {\n if (!pickerOptions.value.panelReady) return\n const formattedValue = formatDayjsToString(parsedValue.value)\n if (Array.isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (!isTimePicker.value && valueIsEmpty.value) return\n if (!pickerVisible.value && valueIsEmpty.value) return\n if (formattedValue) {\n return isDatesPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n })\n\n const isTimeLikePicker = computed(() => props.type.includes('time'))\n\n const isTimePicker = computed(() => props.type.startsWith('time'))\n\n const isDatesPicker = computed(() => props.type === 'dates')\n\n const triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n )\n\n const showClose = ref(false)\n\n const onClearIconClick = (event) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClose.value) {\n event.stopPropagation()\n emitInput(null)\n emitChange(null, true)\n showClose.value = false\n pickerVisible.value = false\n pickerOptions.value.handleClear && pickerOptions.value.handleClear()\n }\n }\n const valueIsEmpty = computed(() => {\n return (\n !props.modelValue ||\n (Array.isArray(props.modelValue) && !props.modelValue.length)\n )\n })\n const onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n showClose.value = true\n }\n }\n const onMouseLeave = () => {\n showClose.value = false\n }\n const isRangeInput = computed(() => {\n return props.type.indexOf('range') > -1\n })\n\n const pickerSize = computed(() => {\n return props.size || elFormItem.size || ELEMENT.size\n })\n\n const popperPaneRef = computed(() => {\n return refPopper.value?.popperRef\n })\n\n const onClickOutside = () => {\n if (!pickerVisible.value) return\n pickerVisible.value = false\n }\n\n const userInput = ref(null)\n\n const handleChange = () => {\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(\n Array.isArray(value)\n ? value.map((_) => _.toDate())\n : value.toDate()\n )\n userInput.value = null\n }\n }\n }\n if (userInput.value === '') {\n emitInput(null)\n emitChange(null)\n userInput.value = null\n }\n }\n\n const blurInput = () => {\n refInput.value.forEach((input) => input.blur())\n }\n\n const parseUserInputToDayjs = (value) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput(value)\n }\n\n const formatDayjsToString = (value) => {\n if (!value) return null\n return pickerOptions.value.formatToString(value)\n }\n\n const isValidValue = (value) => {\n return pickerOptions.value.isValidValue(value)\n }\n\n const handleKeydown = (event) => {\n const code = event.code\n\n if (code === EVENT_CODE.esc) {\n pickerVisible.value = false\n event.stopPropagation()\n return\n }\n\n if (code === EVENT_CODE.tab) {\n if (!isRangeInput.value) {\n handleChange()\n pickerVisible.value = false\n event.stopPropagation()\n } else {\n // user may change focus between two input\n setTimeout(() => {\n if (refInput.value.indexOf(document.activeElement) === -1) {\n pickerVisible.value = false\n blurInput()\n }\n }, 0)\n }\n return\n }\n\n if (code === EVENT_CODE.enter) {\n if (\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value))\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n\n if (pickerOptions.value.handleKeydown) {\n pickerOptions.value.handleKeydown(event)\n }\n }\n const onUserInput = (e) => {\n userInput.value = e\n }\n\n const handleStartInput = (event) => {\n if (userInput.value) {\n userInput.value = [event.target.value, userInput.value[1]]\n } else {\n userInput.value = [event.target.value, null]\n }\n }\n\n const handleEndInput = (event) => {\n if (userInput.value) {\n userInput.value = [userInput.value[0], event.target.value]\n } else {\n userInput.value = [null, event.target.value]\n }\n }\n\n const handleStartChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[0])\n if (value && value.isValid()) {\n userInput.value = [formatDayjsToString(value), displayValue.value[1]]\n const newValue = [value, parsedValue.value && parsedValue.value[1]]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const handleEndChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[1])\n if (value && value.isValid()) {\n userInput.value = [displayValue.value[0], formatDayjsToString(value)]\n const newValue = [parsedValue.value && parsedValue.value[0], value]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const pickerOptions = ref<Partial<PickerOptions>>({})\n const onSetPickerOption = <T extends keyof PickerOptions>(\n e: [T, PickerOptions[T]]\n ) => {\n pickerOptions.value[e[0]] = e[1]\n pickerOptions.value.panelReady = true\n }\n\n const onCalendarChange = (e) => {\n ctx.emit('calendar-change', e)\n }\n\n provide('EP_PICKER_BASE', {\n props,\n })\n\n return {\n Effect,\n\n // injected popper options\n elPopperOptions,\n\n isDatesPicker,\n handleEndChange,\n handleStartChange,\n handleStartInput,\n handleEndInput,\n onUserInput,\n handleChange,\n handleKeydown,\n popperPaneRef,\n onClickOutside,\n pickerSize,\n isRangeInput,\n onMouseLeave,\n onMouseEnter,\n onClearIconClick,\n showClose,\n triggerIcon,\n onPick,\n handleFocus,\n handleBlur,\n pickerVisible,\n pickerActualVisible,\n displayValue,\n parsedValue,\n setSelectionRange,\n refPopper,\n pickerDisabled,\n onSetPickerOption,\n onCalendarChange,\n }\n },\n})\n</script>\n"],"names":["_createBlock","_mergeProps","_createVNode","_createElementBlock","_createElementVNode","_renderSlot"],"mappings":";;;qBAoFgB,OAAM;;;;;;;sBAnFpBA,kCAAAC;IACE,KAAI;AAAA,IACI,SAAS;gEAAA;IACjB,eAAA;AAAA,IACC,QAAQ,YAAO;AAAA,IAChB,MAAA;AAAA,IACA,SAAQ;AAAA,KACA;IACP,qCAAmC;IACnC,kBAAgB;IAChB,uBAAqB;IACtB,YAAW;AAAA,IACV,oBAAkB;AAAA,IAClB,2BAAyB;AAAA,IAC1B,kBAAA;AAAA,IACC,uDAAc;IACd,sDAAa;;IAEH,iBACT;OACS,iDADTD;;QAGG,eAAa;QACb,MAAM;QACN,MAAM;QACN,UAAU;QACV,aAAa;QACd,uBAAM,uCACuB;QAC5B,WAAW,iBAAY,iBAAY,sBAAiB;QACpD,SAAO;QACP,SAAO;QACP,WAAS;QACT,UAAQ;QACR,cAAY;QACZ,cAAY;;QAEF,gBACT;UAAAE;YAAS,OAAM;AAAA,YAAkB,SAAO;;6BACtC;4BAAAF,oCAAgB;;;;;QAGT,gBACT;UACQ,+BADRA;;YAEE,OAAM;AAAA,YACL,SAAO;;6BAER;4BAAAA,oCAAgB;;;;;;;kCA3BY,qBAAjB;wCA+BjBG;;QAGE,uBAAM;;;;;;QAOL,gDAAO;QACP,qDAAY;QACZ,qDAAY;QACZ,kDAAS;;QAEVD;UAAS,OAAM;AAAA,UAAiC,SAAO;;2BACrD;0BAAAF,oCAAgB;;;;QAElBI;UACE,cAAa;AAAA,UACZ,MAAM,aAAQ;UACd,aAAa;UACb,OAAO,qBAAgB;UACvB,UAAU;UACV,WAAW,iBAAY;UACxB,OAAM;AAAA,UACL,gDAAO;UACP,iDAAQ;UACR,gDAAO;;QAEVC,+CAAA;UACED,2BAAA,4BAAoC;;QAEtCA;UACE,cAAa;AAAA,UACZ,MAAM,aAAQ;UACd,aAAa;UACb,OAAO,qBAAgB;UACvB,UAAU;UACV,WAAW,iBAAY;UACxB,OAAM;AAAA,UACL,gDAAO;UACP,gDAAO;UACP,iDAAQ;;QAEXF;UACE,uBAAM;;;UAIL,SAAO;;2BAER;0BAAAF,oCAAgB;;;;;kCAlDc,qBAAjB;;;IAsDR,iBACT;MAAAK;QACG,SAAS;QACT,eAAgB;QAChB,aAAc;QACd,QAAQ;QACR,cAAe;QACf,MAAM;QACN,cAAe;QACf,iDAAM;QACN,wDAAc;QACd,4DAAmB;QACnB,2DAAiB;QACjB,uDAAD;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"picker.vue_vue&type=template&id=1d54be91&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue?vue&type=template&id=1d54be91&lang.js"],"sourcesContent":["<template>\n <el-popper\n ref=\"refPopper\"\n v-model:visible=\"pickerVisible\"\n manual-mode\n :effect=\"Effect.LIGHT\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n :popper-class=\"`el-picker__popper ${popperClass}`\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n transition=\"el-zoom-in-top\"\n :gpu-acceleration=\"false\"\n :stop-popper-mouse-event=\"false\"\n append-to-body\n @before-enter=\"pickerActualVisible = true\"\n @after-leave=\"pickerActualVisible = false\"\n >\n <template #trigger>\n <el-input\n v-if=\"!isRangeInput\"\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n :model-value=\"displayValue\"\n :name=\"name\"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n class=\"el-date-editor\"\n :class=\"'el-date-editor--' + type\"\n :readonly=\"!editable || readonly || isDatesPicker || type === 'week'\"\n @input=\"onUserInput\"\n @focus=\"handleFocus\"\n @keydown=\"handleKeydown\"\n @change=\"handleChange\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n class=\"el-input__icon\"\n @click=\"handleFocus\"\n >\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClose && clearIcon\"\n class=\"el-input__icon clear-icon\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <div\n v-else\n v-clickoutside:[popperPaneRef]=\"onClickOutside\"\n class=\"el-date-editor el-range-editor el-input__inner\"\n :class=\"[\n 'el-date-editor--' + type,\n pickerSize ? `el-range-editor--${pickerSize}` : '',\n pickerDisabled ? 'is-disabled' : '',\n pickerVisible ? 'is-active' : '',\n ]\"\n @click=\"handleFocus\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @keydown=\"handleKeydown\"\n >\n <el-icon\n v-if=\"triggerIcon\"\n class=\"el-input__icon el-range__icon\"\n @click=\"handleFocus\"\n >\n <component :is=\"triggerIcon\"></component>\n </el-icon>\n <input\n autocomplete=\"off\"\n :name=\"name && name[0]\"\n :placeholder=\"startPlaceholder\"\n :value=\"displayValue && displayValue[0]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @input=\"handleStartInput\"\n @change=\"handleStartChange\"\n @focus=\"handleFocus\"\n />\n <slot name=\"range-separator\">\n <span class=\"el-range-separator\">{{ rangeSeparator }}</span>\n </slot>\n <input\n autocomplete=\"off\"\n :name=\"name && name[1]\"\n :placeholder=\"endPlaceholder\"\n :value=\"displayValue && displayValue[1]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n class=\"el-range-input\"\n @focus=\"handleFocus\"\n @input=\"handleEndInput\"\n @change=\"handleEndChange\"\n />\n <el-icon\n v-if=\"clearIcon\"\n class=\"el-input__icon el-range__close-icon\"\n :class=\"{\n 'el-range__close-icon--hidden': !showClose,\n }\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </div>\n </template>\n <template #default>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @mousedown.stop\n ></slot>\n </template>\n </el-popper>\n</template>\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n nextTick,\n inject,\n watch,\n provide,\n} from 'vue'\nimport dayjs from 'dayjs'\nimport isEqual from 'lodash/isEqual'\nimport { useLocaleInject } from '@element-plus/hooks'\nimport { ClickOutside } from '@element-plus/directives'\nimport { elFormKey, elFormItemKey } from '@element-plus/tokens'\nimport ElInput from '@element-plus/components/input'\nimport ElIcon from '@element-plus/components/icon'\nimport ElPopper, { Effect } from '@element-plus/components/popper'\nimport { EVENT_CODE } from '@element-plus/utils/aria'\nimport { useGlobalConfig, isEmpty } from '@element-plus/utils/util'\nimport { Clock, Calendar } from '@element-plus/icons'\nimport { timePickerDefaultProps } from './props'\n\nimport type { Dayjs } from 'dayjs'\nimport type { ElFormContext, ElFormItemContext } from '@element-plus/tokens'\nimport type { Options } from '@popperjs/core'\n\ninterface PickerOptions {\n isValidValue: (date: Dayjs) => boolean\n handleKeydown: (event: KeyboardEvent) => void\n parseUserInput: (value: Dayjs) => dayjs.Dayjs\n formatToString: (value: Dayjs) => string | string[]\n getRangeAvailableTime: (date: Dayjs) => dayjs.Dayjs\n getDefaultValue: () => Dayjs\n panelReady: boolean\n handleClear: () => void\n}\n\n// Date object and string\nconst dateEquals = function (a: Date | any, b: Date | any) {\n const aIsDate = a instanceof Date\n const bIsDate = b instanceof Date\n if (aIsDate && bIsDate) {\n return a.getTime() === b.getTime()\n }\n if (!aIsDate && !bIsDate) {\n return a === b\n }\n return false\n}\n\nconst valueEquals = function (a: Array<Date> | any, b: Array<Date> | any) {\n const aIsArray = a instanceof Array\n const bIsArray = b instanceof Array\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) {\n return false\n }\n return (a as Array<Date>).every((item, index) => dateEquals(item, b[index]))\n }\n if (!aIsArray && !bIsArray) {\n return dateEquals(a, b)\n }\n return false\n}\n\nconst parser = function (\n date: Date | string,\n format: string,\n lang: string\n): Dayjs {\n const day = isEmpty(format)\n ? dayjs(date).locale(lang)\n : dayjs(date, format).locale(lang)\n return day.isValid() ? day : undefined\n}\n\nconst formatter = function (date: Date, format: string, lang: string) {\n return isEmpty(format) ? date : dayjs(date).locale(lang).format(format)\n}\n\nexport default defineComponent({\n name: 'Picker',\n components: {\n ElInput,\n ElPopper,\n ElIcon,\n },\n directives: { clickoutside: ClickOutside },\n props: timePickerDefaultProps,\n emits: ['update:modelValue', 'change', 'focus', 'blur', 'calendar-change'],\n setup(props, ctx) {\n const ELEMENT = useGlobalConfig()\n const { lang } = useLocaleInject()\n\n const elForm = inject(elFormKey, {} as ElFormContext)\n const elFormItem = inject(elFormItemKey, {} as ElFormItemContext)\n const elPopperOptions = inject('ElPopperOptions', {} as Options)\n\n const refPopper = ref(null)\n const pickerVisible = ref(false)\n const pickerActualVisible = ref(false)\n const valueOnOpen = ref(null)\n\n watch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n ctx.emit('blur')\n blurInput()\n props.validateEvent && elFormItem.validate?.('blur')\n } else {\n valueOnOpen.value = props.modelValue\n }\n })\n const emitChange = (val, isClear?: boolean) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n ctx.emit('change', val)\n props.validateEvent && elFormItem.validate?.('change')\n }\n }\n const emitInput = (val) => {\n if (!valueEquals(props.modelValue, val)) {\n let formatValue\n if (Array.isArray(val)) {\n formatValue = val.map((_) =>\n formatter(_, props.valueFormat, lang.value)\n )\n } else if (val) {\n formatValue = formatter(val, props.valueFormat, lang.value)\n }\n ctx.emit('update:modelValue', val ? formatValue : val, lang.value)\n }\n }\n const refInput = computed(() => {\n if (refPopper.value.triggerRef) {\n const _r = isRangeInput.value\n ? refPopper.value.triggerRef\n : refPopper.value.triggerRef.$el\n return [].slice.call(_r.querySelectorAll('input'))\n }\n return []\n })\n const setSelectionRange = (start, end, pos) => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n }\n const onPick = (date: any = '', visible = false) => {\n pickerVisible.value = visible\n let result\n if (Array.isArray(date)) {\n result = date.map((_) => _.toDate())\n } else {\n // clear btn emit null\n result = date ? date.toDate() : date\n }\n userInput.value = null\n emitInput(result)\n }\n const handleFocus = (e) => {\n if (props.readonly || pickerDisabled.value || pickerVisible.value) return\n pickerVisible.value = true\n ctx.emit('focus', e)\n }\n\n const handleBlur = () => {\n pickerVisible.value = false\n blurInput()\n }\n\n const pickerDisabled = computed(() => {\n return props.disabled || elForm.disabled\n })\n\n const parsedValue = computed(() => {\n let result\n if (valueIsEmpty.value) {\n if (pickerOptions.value.getDefaultValue) {\n result = pickerOptions.value.getDefaultValue()\n }\n } else {\n if (Array.isArray(props.modelValue)) {\n result = props.modelValue.map((_) =>\n parser(_, props.valueFormat, lang.value)\n )\n } else {\n result = parser(props.modelValue, props.valueFormat, lang.value)\n }\n }\n\n if (pickerOptions.value.getRangeAvailableTime) {\n const availableResult =\n pickerOptions.value.getRangeAvailableTime(result)\n if (!isEqual(availableResult, result)) {\n result = availableResult\n emitInput(\n Array.isArray(result)\n ? result.map((_) => _.toDate())\n : result.toDate()\n )\n }\n }\n if (Array.isArray(result) && result.some((_) => !_)) {\n result = []\n }\n return result\n })\n\n const displayValue = computed(() => {\n if (!pickerOptions.value.panelReady) return\n const formattedValue = formatDayjsToString(parsedValue.value)\n if (Array.isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (!isTimePicker.value && valueIsEmpty.value) return\n if (!pickerVisible.value && valueIsEmpty.value) return\n if (formattedValue) {\n return isDatesPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n })\n\n const isTimeLikePicker = computed(() => props.type.includes('time'))\n\n const isTimePicker = computed(() => props.type.startsWith('time'))\n\n const isDatesPicker = computed(() => props.type === 'dates')\n\n const triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n )\n\n const showClose = ref(false)\n\n const onClearIconClick = (event) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClose.value) {\n event.stopPropagation()\n emitInput(null)\n emitChange(null, true)\n showClose.value = false\n pickerVisible.value = false\n pickerOptions.value.handleClear && pickerOptions.value.handleClear()\n }\n }\n const valueIsEmpty = computed(() => {\n return (\n !props.modelValue ||\n (Array.isArray(props.modelValue) && !props.modelValue.length)\n )\n })\n const onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n showClose.value = true\n }\n }\n const onMouseLeave = () => {\n showClose.value = false\n }\n const isRangeInput = computed(() => {\n return props.type.indexOf('range') > -1\n })\n\n const pickerSize = computed(() => {\n return props.size || elFormItem.size || ELEMENT.size\n })\n\n const popperPaneRef = computed(() => {\n return refPopper.value?.popperRef\n })\n\n const onClickOutside = () => {\n if (!pickerVisible.value) return\n pickerVisible.value = false\n }\n\n const userInput = ref(null)\n\n const handleChange = () => {\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(\n Array.isArray(value)\n ? value.map((_) => _.toDate())\n : value.toDate()\n )\n userInput.value = null\n }\n }\n }\n if (userInput.value === '') {\n emitInput(null)\n emitChange(null)\n userInput.value = null\n }\n }\n\n const blurInput = () => {\n refInput.value.forEach((input) => input.blur())\n }\n\n const parseUserInputToDayjs = (value) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput(value)\n }\n\n const formatDayjsToString = (value) => {\n if (!value) return null\n return pickerOptions.value.formatToString(value)\n }\n\n const isValidValue = (value) => {\n return pickerOptions.value.isValidValue(value)\n }\n\n const handleKeydown = (event) => {\n const code = event.code\n\n if (code === EVENT_CODE.esc) {\n pickerVisible.value = false\n event.stopPropagation()\n return\n }\n\n if (code === EVENT_CODE.tab) {\n if (!isRangeInput.value) {\n handleChange()\n pickerVisible.value = false\n event.stopPropagation()\n } else {\n // user may change focus between two input\n setTimeout(() => {\n if (refInput.value.indexOf(document.activeElement) === -1) {\n pickerVisible.value = false\n blurInput()\n }\n }, 0)\n }\n return\n }\n\n if (code === EVENT_CODE.enter) {\n if (\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value))\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n\n if (pickerOptions.value.handleKeydown) {\n pickerOptions.value.handleKeydown(event)\n }\n }\n const onUserInput = (e) => {\n userInput.value = e\n }\n\n const handleStartInput = (event) => {\n if (userInput.value) {\n userInput.value = [event.target.value, userInput.value[1]]\n } else {\n userInput.value = [event.target.value, null]\n }\n }\n\n const handleEndInput = (event) => {\n if (userInput.value) {\n userInput.value = [userInput.value[0], event.target.value]\n } else {\n userInput.value = [null, event.target.value]\n }\n }\n\n const handleStartChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[0])\n if (value && value.isValid()) {\n userInput.value = [formatDayjsToString(value), displayValue.value[1]]\n const newValue = [value, parsedValue.value && parsedValue.value[1]]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const handleEndChange = () => {\n const value = parseUserInputToDayjs(userInput.value && userInput.value[1])\n if (value && value.isValid()) {\n userInput.value = [displayValue.value[0], formatDayjsToString(value)]\n const newValue = [parsedValue.value && parsedValue.value[0], value]\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n }\n\n const pickerOptions = ref<Partial<PickerOptions>>({})\n const onSetPickerOption = <T extends keyof PickerOptions>(\n e: [T, PickerOptions[T]]\n ) => {\n pickerOptions.value[e[0]] = e[1]\n pickerOptions.value.panelReady = true\n }\n\n const onCalendarChange = (e) => {\n ctx.emit('calendar-change', e)\n }\n\n provide('EP_PICKER_BASE', {\n props,\n })\n\n return {\n Effect,\n\n // injected popper options\n elPopperOptions,\n\n isDatesPicker,\n handleEndChange,\n handleStartChange,\n handleStartInput,\n handleEndInput,\n onUserInput,\n handleChange,\n handleKeydown,\n popperPaneRef,\n onClickOutside,\n pickerSize,\n isRangeInput,\n onMouseLeave,\n onMouseEnter,\n onClearIconClick,\n showClose,\n triggerIcon,\n onPick,\n handleFocus,\n handleBlur,\n pickerVisible,\n pickerActualVisible,\n displayValue,\n parsedValue,\n setSelectionRange,\n refPopper,\n pickerDisabled,\n onSetPickerOption,\n onCalendarChange,\n }\n },\n})\n</script>\n"],"names":["_createBlock","_mergeProps","_createElementBlock","_createElementVNode","_renderSlot"],"mappings":";;;qBA4FgB,OAAM;;;;;;;sBA3FpBA,kCAAAC;IACE,KAAI;AAAA,IACI,SAAS;gEAAA;IACjB,eAAA;AAAA,IACC,QAAQ,YAAO;AAAA,IAChB,MAAA;AAAA,IACA,SAAQ;AAAA,KACA;IACP,qCAAmC;IACnC,kBAAgB;IAChB,uBAAqB;IACtB,YAAW;AAAA,IACV,oBAAkB;AAAA,IAClB,2BAAyB;AAAA,IAC1B,kBAAA;AAAA,IACC,uDAAc;IACd,sDAAa;;IAEH,iBACT;OACS,iDADTD;;QAGG,eAAa;QACb,MAAM;QACN,MAAM;QACN,UAAU;QACV,aAAa;QACd,uBAAM,uCACuB;QAC5B,WAAW,iBAAY,iBAAY,sBAAiB;QACpD,SAAO;QACP,SAAO;QACP,WAAS;QACT,UAAQ;QACR,cAAY;QACZ,cAAY;;QAEF,gBACT;UACQ,iCADRA;;YAEE,OAAM;AAAA,YACL,SAAO;;6BAER;4BAAAA,oCAAgB;;;;;QAGT,gBACT;UACQ,kBAAa,+BADrBA;;YAEE,OAAM;AAAA,YACL,SAAO;;6BAER;4BAAAA,oCAAgB;;;;;;;kCA/BY,qBAAjB;wCAmCjBE;;QAGE,uBAAM;;;;;;QAOL,gDAAO;QACP,qDAAY;QACZ,qDAAY;QACZ,kDAAS;;QAGF,iCADRF;;UAEE,OAAM;AAAA,UACL,SAAO;;2BAER;0BAAAA,oCAAgB;;;;QAElBG;UACE,cAAa;AAAA,UACZ,MAAM,aAAQ;UACd,aAAa;UACb,OAAO,qBAAgB;UACvB,UAAU;UACV,WAAW,iBAAY;UACxB,OAAM;AAAA,UACL,gDAAO;UACP,iDAAQ;UACR,gDAAO;;QAEVC,+CAAA;UACED,2BAAA,4BAAoC;;QAEtCA;UACE,cAAa;AAAA,UACZ,MAAM,aAAQ;UACd,aAAa;UACb,OAAO,qBAAgB;UACvB,UAAU;UACV,WAAW,iBAAY;UACxB,OAAM;AAAA,UACL,gDAAO;UACP,gDAAO;UACP,iDAAQ;;QAGH,+BADRH;;UAEE,uBAAM;;;UAIL,SAAO;;2BAER;0BAAAA,oCAAgB;;;;;kCAvDc,qBAAjB;;;IA2DR,iBACT;MAAAI;QACG,SAAS;QACT,eAAgB;QAChB,aAAc;QACd,QAAQ;QACR,cAAe;QACf,MAAM;QACN,cAAe;QACf,iDAAM;QACN,wDAAc;QACd,4DAAmB;QACnB,2DAAiB;QACjB,uDAAD;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-time-spinner.vue_vue&type=script&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue"],"sourcesContent":["<template>\n <div class=\"el-time-spinner\" :class=\"{ 'has-seconds': showSeconds }\">\n <template v-if=\"!arrowControl\">\n <el-scrollbar\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :ref=\"getRefId(item)\"\n class=\"el-time-spinner__wrapper\"\n wrap-style=\"max-height: inherit;\"\n view-class=\"el-time-spinner__list\"\n noresize\n tag=\"ul\"\n @mouseenter=\"emitSelectRange(item)\"\n @mousemove=\"adjustCurrentSpinner(item)\"\n >\n <li\n v-for=\"(disabled, key) in listMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{ active: key === timePartsMap[item].value, disabled }\"\n @click=\"handleClick(item, { value: key, disabled })\"\n >\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n }}{{ getAmPmFlag(key) }}\n </template>\n <template v-else>\n {{ ('0' + key).slice(-2) }}\n </template>\n </li>\n </el-scrollbar>\n </template>\n <template v-if=\"arrowControl\">\n <div\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n class=\"el-time-spinner__wrapper is-arrow\"\n @mouseenter=\"emitSelectRange(item)\"\n >\n <el-icon\n v-repeat-click=\"onDecreaseClick\"\n class=\"el-time-spinner__arrow arrow-up\"\n >\n <arrow-up />\n </el-icon>\n <el-icon\n v-repeat-click=\"onIncreaseClick\"\n class=\"el-time-spinner__arrow arrow-down\"\n >\n <arrow-down />\n </el-icon>\n <ul class=\"el-time-spinner__list\">\n <li\n v-for=\"(time, key) in arrowListMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{\n active: time === timePartsMap[item].value,\n disabled: listMap[item].value[time],\n }\"\n >\n {{\n time === undefined\n ? ''\n : ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2) +\n getAmPmFlag(time)\n }}\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, nextTick, computed, onMounted, watch } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { RepeatClick } from '@element-plus/directives'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport { ArrowUp, ArrowDown } from '@element-plus/icons'\nimport { getTimeLists } from './useTimePicker'\n\nimport type { PropType, Ref } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n directives: {\n repeatClick: RepeatClick,\n },\n\n components: {\n ElScrollbar,\n ElIcon,\n ArrowUp,\n ArrowDown,\n },\n\n props: {\n role: {\n type: String,\n required: true,\n },\n spinnerDate: {\n type: Object as PropType<Dayjs>,\n required: true,\n },\n showSeconds: {\n type: Boolean,\n default: true,\n },\n arrowControl: Boolean,\n amPmMode: {\n type: String,\n default: '', // 'a': am/pm; 'A': AM/PM\n },\n disabledHours: {\n type: Function,\n },\n disabledMinutes: {\n type: Function,\n },\n disabledSeconds: {\n type: Function,\n },\n },\n\n emits: ['change', 'select-range', 'set-option'],\n\n setup(props, ctx) {\n // data\n let isScrolling = false\n const debouncedResetScroll = debounce((type) => {\n isScrolling = false\n adjustCurrentSpinner(type)\n }, 200)\n const currentScrollbar = ref(null)\n const listHoursRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listMinutesRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listSecondsRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listRefsMap = {\n hours: listHoursRef,\n minutes: listMinutesRef,\n seconds: listSecondsRef,\n }\n\n // computed\n const spinnerItems = computed(() => {\n const arr = ['hours', 'minutes', 'seconds']\n return props.showSeconds ? arr : arr.slice(0, 2)\n })\n const hours = computed(() => {\n return props.spinnerDate.hour()\n })\n const minutes = computed(() => {\n return props.spinnerDate.minute()\n })\n const seconds = computed(() => {\n return props.spinnerDate.second()\n })\n const timePartsMap = computed(() => ({\n hours,\n minutes,\n seconds,\n }))\n const hoursList = computed(() => {\n return getHoursList(props.role)\n })\n const minutesList = computed(() => {\n return getMinutesList(hours.value, props.role)\n })\n const secondsList = computed(() => {\n return getSecondsList(hours.value, minutes.value, props.role)\n })\n const listMap = computed(() => ({\n hours: hoursList,\n minutes: minutesList,\n seconds: secondsList,\n }))\n const arrowHourList = computed(() => {\n const hour = hours.value\n return [\n hour > 0 ? hour - 1 : undefined,\n hour,\n hour < 23 ? hour + 1 : undefined,\n ]\n })\n const arrowMinuteList = computed(() => {\n const minute = minutes.value\n return [\n minute > 0 ? minute - 1 : undefined,\n minute,\n minute < 59 ? minute + 1 : undefined,\n ]\n })\n const arrowSecondList = computed(() => {\n const second = seconds.value\n return [\n second > 0 ? second - 1 : undefined,\n second,\n second < 59 ? second + 1 : undefined,\n ]\n })\n const arrowListMap = computed(() => ({\n hours: arrowHourList,\n minutes: arrowMinuteList,\n seconds: arrowSecondList,\n }))\n const getAmPmFlag = (hour) => {\n const shouldShowAmPm = !!props.amPmMode\n if (!shouldShowAmPm) return ''\n const isCapital = props.amPmMode === 'A'\n // todo locale\n let content = hour < 12 ? ' am' : ' pm'\n if (isCapital) content = content.toUpperCase()\n return content\n }\n\n const emitSelectRange = (type) => {\n if (type === 'hours') {\n ctx.emit('select-range', 0, 2)\n } else if (type === 'minutes') {\n ctx.emit('select-range', 3, 5)\n } else if (type === 'seconds') {\n ctx.emit('select-range', 6, 8)\n }\n currentScrollbar.value = type\n }\n\n const adjustCurrentSpinner = (type) => {\n adjustSpinner(type, timePartsMap.value[type].value)\n }\n\n // NOTE: used by datetime / date-range panel\n // renamed from adjustScrollTop\n // should try to refactory it\n const adjustSpinners = () => {\n adjustCurrentSpinner('hours')\n adjustCurrentSpinner('minutes')\n adjustCurrentSpinner('seconds')\n }\n\n const adjustSpinner = (type, value) => {\n if (props.arrowControl) return\n const el = listRefsMap[type]\n if (el.value) {\n el.value.$el.querySelector('.el-scrollbar__wrap').scrollTop = Math.max(\n 0,\n value * typeItemHeight(type)\n )\n }\n }\n\n const typeItemHeight = (type) => {\n const el = listRefsMap[type]\n return el.value.$el.querySelector('li').offsetHeight\n }\n\n const onIncreaseClick = () => {\n scrollDown(1)\n }\n\n const onDecreaseClick = () => {\n scrollDown(-1)\n }\n\n const scrollDown = (step) => {\n if (!currentScrollbar.value) {\n emitSelectRange('hours')\n }\n\n const label = currentScrollbar.value\n let now = timePartsMap.value[label].value\n const total = currentScrollbar.value === 'hours' ? 24 : 60\n now = (now + step + total) % total\n\n modifyDateField(label, now)\n adjustSpinner(label, now)\n nextTick(() => emitSelectRange(currentScrollbar.value))\n }\n\n const modifyDateField = (type, value) => {\n const list = listMap.value[type].value\n const isDisabled = list[value]\n if (isDisabled) return\n switch (type) {\n case 'hours':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(value)\n .minute(minutes.value)\n .second(seconds.value)\n )\n break\n case 'minutes':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(value)\n .second(seconds.value)\n )\n break\n case 'seconds':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(minutes.value)\n .second(value)\n )\n break\n }\n }\n\n const handleClick = (type, { value, disabled }) => {\n if (!disabled) {\n modifyDateField(type, value)\n emitSelectRange(type)\n adjustSpinner(type, value)\n }\n }\n\n const handleScroll = (type) => {\n isScrolling = true\n debouncedResetScroll(type)\n const value = Math.min(\n Math.round(\n (listRefsMap[type].value.$el.querySelector('.el-scrollbar__wrap')\n .scrollTop -\n (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n 3) /\n typeItemHeight(type)\n ),\n type === 'hours' ? 23 : 59\n )\n modifyDateField(type, value)\n }\n\n const scrollBarHeight = (type) => {\n return listRefsMap[type].value.$el.offsetHeight\n }\n\n const bindScrollEvent = () => {\n const bindFuntion = (type) => {\n if (listRefsMap[type].value) {\n listRefsMap[type].value.$el.querySelector(\n '.el-scrollbar__wrap'\n ).onscroll = () => {\n // TODO: scroll is emitted when set scrollTop programatically\n // should find better solutions in the future!\n handleScroll(type)\n }\n }\n }\n bindFuntion('hours')\n bindFuntion('minutes')\n bindFuntion('seconds')\n }\n\n onMounted(() => {\n nextTick(() => {\n !props.arrowControl && bindScrollEvent()\n adjustSpinners()\n // set selection on the first hour part\n if (props.role === 'start') emitSelectRange('hours')\n })\n })\n\n const getRefId = (item) => {\n return `list${item.charAt(0).toUpperCase() + item.slice(1)}Ref`\n }\n\n ctx.emit('set-option', [`${props.role}_scrollDown`, scrollDown])\n ctx.emit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\n const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n props.disabledHours,\n props.disabledMinutes,\n props.disabledSeconds\n )\n\n watch(\n () => props.spinnerDate,\n () => {\n if (isScrolling) return\n adjustSpinners()\n }\n )\n\n return {\n getRefId,\n spinnerItems,\n currentScrollbar,\n hours,\n minutes,\n seconds,\n hoursList,\n minutesList,\n arrowHourList,\n arrowMinuteList,\n arrowSecondList,\n getAmPmFlag,\n emitSelectRange,\n adjustCurrentSpinner,\n typeItemHeight,\n listHoursRef,\n listMinutesRef,\n listSecondsRef,\n onIncreaseClick,\n onDecreaseClick,\n handleClick,\n secondsList,\n timePartsMap,\n arrowListMap,\n listMap,\n }\n },\n})\n</script>\n"],"names":["ElScrollbar"],"mappings":";;;;;;;;;AAsFA,aAAe,gBAAgB;AAAA,EAC7B,YAAY;AAAA,IACV,aAAa;AAAA;AAAA,EAGf,YAAY;AAAA,iBACVA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAGF,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA;AAAA,IAEZ,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA;AAAA,IAEZ,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,cAAc;AAAA,IACd,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,eAAe;AAAA,MACb,MAAM;AAAA;AAAA,IAER,iBAAiB;AAAA,MACf,MAAM;AAAA;AAAA,IAER,iBAAiB;AAAA,MACf,MAAM;AAAA;AAAA;AAAA,EAIV,OAAO,CAAC,UAAU,gBAAgB;AAAA,EAElC,MAAM,OAAO,KAAK;AAEhB,QAAI,cAAc;AAClB,UAAM,uBAAuB,SAAS,CAAC,SAAS;AAC9C,oBAAc;AACd,2BAAqB;AAAA,OACpB;AACH,UAAM,mBAAmB,IAAI;AAC7B,UAAM,eAA2C,IAAI;AACrD,UAAM,iBAA6C,IAAI;AACvD,UAAM,iBAA6C,IAAI;AACvD,UAAM,cAAc;AAAA,MAClB,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA;AAIX,UAAM,eAAe,SAAS,MAAM;AAClC,YAAM,MAAM,CAAC,SAAS,WAAW;AACjC,aAAO,MAAM,cAAc,MAAM,IAAI,MAAM,GAAG;AAAA;AAEhD,UAAM,QAAQ,SAAS,MAAM;AAC3B,aAAO,MAAM,YAAY;AAAA;AAE3B,UAAM,UAAU,SAAS,MAAM;AAC7B,aAAO,MAAM,YAAY;AAAA;AAE3B,UAAM,UAAU,SAAS,MAAM;AAC7B,aAAO,MAAM,YAAY;AAAA;AAE3B,UAAM,eAAe,SAAS;AAAO,MACnC;AAAA,MACA;AAAA,MACA;AAAA;AAEF,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,aAAa,MAAM;AAAA;AAE5B,UAAM,cAAc,SAAS,MAAM;AACjC,aAAO,eAAe,MAAM,OAAO,MAAM;AAAA;AAE3C,UAAM,cAAc,SAAS,MAAM;AACjC,aAAO,eAAe,MAAM,OAAO,QAAQ,OAAO,MAAM;AAAA;AAE1D,UAAM,UAAU,SAAS;AAAO,MAC9B,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA;AAEX,UAAM,gBAAgB,SAAS,MAAM;AACnC,YAAM,OAAO,MAAM;AACnB,aAAO;AAAA,QACL,OAAO,IAAI,OAAO,IAAI;AAAA,QACtB;AAAA,QACA,OAAO,KAAK,OAAO,IAAI;AAAA;AAAA;AAG3B,UAAM,kBAAkB,SAAS,MAAM;AACrC,YAAM,SAAS,QAAQ;AACvB,aAAO;AAAA,QACL,SAAS,IAAI,SAAS,IAAI;AAAA,QAC1B;AAAA,QACA,SAAS,KAAK,SAAS,IAAI;AAAA;AAAA;AAG/B,UAAM,kBAAkB,SAAS,MAAM;AACrC,YAAM,SAAS,QAAQ;AACvB,aAAO;AAAA,QACL,SAAS,IAAI,SAAS,IAAI;AAAA,QAC1B;AAAA,QACA,SAAS,KAAK,SAAS,IAAI;AAAA;AAAA;AAG/B,UAAM,eAAe,SAAS;AAAO,MACnC,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA;AAEX,UAAM,cAAc,CAAC,SAAS;AAC5B,YAAM,iBAAiB,CAAC,CAAC,MAAM;AAC/B,UAAI,CAAC;AAAgB,eAAO;AAC5B,YAAM,YAAY,MAAM,aAAa;AAErC,UAAI,UAAU,OAAO,KAAK,QAAQ;AAClC,UAAI;AAAW,kBAAU,QAAQ;AACjC,aAAO;AAAA;AAGT,UAAM,kBAAkB,CAAC,SAAS;AAChC,UAAI,SAAS,SAAS;AACpB,YAAI,KAAK,gBAAgB,GAAG;AAAA,iBACnB,SAAS,WAAW;AAC7B,YAAI,KAAK,gBAAgB,GAAG;AAAA,iBACnB,SAAS,WAAW;AAC7B,YAAI,KAAK,gBAAgB,GAAG;AAAA;AAE9B,uBAAiB,QAAQ;AAAA;AAG3B,UAAM,uBAAuB,CAAC,SAAS;AACrC,oBAAc,MAAM,aAAa,MAAM,MAAM;AAAA;AAM/C,UAAM,iBAAiB,MAAM;AAC3B,2BAAqB;AACrB,2BAAqB;AACrB,2BAAqB;AAAA;AAGvB,UAAM,gBAAgB,CAAC,MAAM,UAAU;AACrC,UAAI,MAAM;AAAc;AACxB,YAAM,KAAK,YAAY;AACvB,UAAI,GAAG,OAAO;AACZ,WAAG,MAAM,IAAI,cAAc,uBAAuB,YAAY,KAAK,IACjE,GACA,QAAQ,eAAe;AAAA;AAAA;AAK7B,UAAM,iBAAiB,CAAC,SAAS;AAC/B,YAAM,KAAK,YAAY;AACvB,aAAO,GAAG,MAAM,IAAI,cAAc,MAAM;AAAA;AAG1C,UAAM,kBAAkB,MAAM;AAC5B,iBAAW;AAAA;AAGb,UAAM,kBAAkB,MAAM;AAC5B,iBAAW;AAAA;AAGb,UAAM,aAAa,CAAC,SAAS;AAC3B,UAAI,CAAC,iBAAiB,OAAO;AAC3B,wBAAgB;AAAA;AAGlB,YAAM,QAAQ,iBAAiB;AAC/B,UAAI,MAAM,aAAa,MAAM,OAAO;AACpC,YAAM,QAAQ,iBAAiB,UAAU,UAAU,KAAK;AACxD,YAAO,OAAM,OAAO,SAAS;AAE7B,sBAAgB,OAAO;AACvB,oBAAc,OAAO;AACrB,eAAS,MAAM,gBAAgB,iBAAiB;AAAA;AAGlD,UAAM,kBAAkB,CAAC,MAAM,UAAU;AACvC,YAAM,OAAO,QAAQ,MAAM,MAAM;AACjC,YAAM,aAAa,KAAK;AACxB,UAAI;AAAY;AAChB,cAAQ;AAAA,aACD;AACH,cAAI,KACF,UACA,MAAM,YACH,KAAK,OACL,OAAO,QAAQ,OACf,OAAO,QAAQ;AAEpB;AAAA,aACG;AACH,cAAI,KACF,UACA,MAAM,YACH,KAAK,MAAM,OACX,OAAO,OACP,OAAO,QAAQ;AAEpB;AAAA,aACG;AACH,cAAI,KACF,UACA,MAAM,YACH,KAAK,MAAM,OACX,OAAO,QAAQ,OACf,OAAO;AAEZ;AAAA;AAAA;AAIN,UAAM,cAAc,CAAC,MAAM,EAAE,OAAO,eAAe;AACjD,UAAI,CAAC,UAAU;AACb,wBAAgB,MAAM;AACtB,wBAAgB;AAChB,sBAAc,MAAM;AAAA;AAAA;AAIxB,UAAM,eAAe,CAAC,SAAS;AAC7B,oBAAc;AACd,2BAAqB;AACrB,YAAM,QAAQ,KAAK,IACjB,KAAK,MACF,aAAY,MAAM,MAAM,IAAI,cAAc,uBACxC,YACA,iBAAgB,QAAQ,MAAM,MAAM,eAAe,QACpD,KACA,eAAe,QAEnB,SAAS,UAAU,KAAK;AAE1B,sBAAgB,MAAM;AAAA;AAGxB,UAAM,kBAAkB,CAAC,SAAS;AAChC,aAAO,YAAY,MAAM,MAAM,IAAI;AAAA;AAGrC,UAAM,kBAAkB,MAAM;AAC5B,YAAM,cAAc,CAAC,SAAS;AAC5B,YAAI,YAAY,MAAM,OAAO;AAC3B,sBAAY,MAAM,MAAM,IAAI,cAC1B,uBACA,WAAW,MAAM;AAGjB,yBAAa;AAAA;AAAA;AAAA;AAInB,kBAAY;AACZ,kBAAY;AACZ,kBAAY;AAAA;AAGd,cAAU,MAAM;AACd,eAAS,MAAM;AACb,SAAC,MAAM,gBAAgB;AACvB;AAEA,YAAI,MAAM,SAAS;AAAS,0BAAgB;AAAA;AAAA;AAIhD,UAAM,WAAW,CAAC,SAAS;AACzB,aAAO,OAAO,KAAK,OAAO,GAAG,gBAAgB,KAAK,MAAM;AAAA;AAG1D,QAAI,KAAK,cAAc,CAAC,GAAG,MAAM,mBAAmB;AACpD,QAAI,KAAK,cAAc,CAAC,GAAG,MAAM,wBAAwB;AAEzD,UAAM,EAAE,cAAc,gBAAgB,mBAAmB,aACvD,MAAM,eACN,MAAM,iBACN,MAAM;AAGR,UACE,MAAM,MAAM,aACZ,MAAM;AACJ,UAAI;AAAa;AACjB;AAAA;AAIJ,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"basic-time-spinner.vue_vue&type=script&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue"],"sourcesContent":["<template>\n <div class=\"el-time-spinner\" :class=\"{ 'has-seconds': showSeconds }\">\n <template v-if=\"!arrowControl\">\n <el-scrollbar\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :ref=\"getRefId(item)\"\n class=\"el-time-spinner__wrapper\"\n wrap-style=\"max-height: inherit;\"\n view-class=\"el-time-spinner__list\"\n noresize\n tag=\"ul\"\n @mouseenter=\"emitSelectRange(item)\"\n @mousemove=\"adjustCurrentSpinner(item)\"\n >\n <li\n v-for=\"(disabled, key) in listMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{ active: key === timePartsMap[item].value, disabled }\"\n @click=\"handleClick(item, { value: key, disabled })\"\n >\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n }}{{ getAmPmFlag(key) }}\n </template>\n <template v-else>\n {{ ('0' + key).slice(-2) }}\n </template>\n </li>\n </el-scrollbar>\n </template>\n <template v-if=\"arrowControl\">\n <div\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n class=\"el-time-spinner__wrapper is-arrow\"\n @mouseenter=\"emitSelectRange(item)\"\n >\n <el-icon\n v-repeat-click=\"onDecreaseClick\"\n class=\"el-time-spinner__arrow arrow-up\"\n >\n <arrow-up />\n </el-icon>\n <el-icon\n v-repeat-click=\"onIncreaseClick\"\n class=\"el-time-spinner__arrow arrow-down\"\n >\n <arrow-down />\n </el-icon>\n <ul class=\"el-time-spinner__list\">\n <li\n v-for=\"(time, key) in arrowListMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{\n active: time === timePartsMap[item].value,\n disabled: listMap[item].value[time],\n }\"\n >\n <template v-if=\"time\">\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2)\n }}{{ getAmPmFlag(time) }}\n </template>\n <template v-else>\n {{ ('0' + time).slice(-2) }}\n </template>\n </template>\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, nextTick, computed, onMounted, watch } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { RepeatClick } from '@element-plus/directives'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport { ArrowUp, ArrowDown } from '@element-plus/icons'\nimport { getTimeLists } from './useTimePicker'\n\nimport type { PropType, Ref } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n directives: {\n repeatClick: RepeatClick,\n },\n\n components: {\n ElScrollbar,\n ElIcon,\n ArrowUp,\n ArrowDown,\n },\n\n props: {\n role: {\n type: String,\n required: true,\n },\n spinnerDate: {\n type: Object as PropType<Dayjs>,\n required: true,\n },\n showSeconds: {\n type: Boolean,\n default: true,\n },\n arrowControl: Boolean,\n amPmMode: {\n type: String,\n default: '', // 'a': am/pm; 'A': AM/PM\n },\n disabledHours: {\n type: Function,\n },\n disabledMinutes: {\n type: Function,\n },\n disabledSeconds: {\n type: Function,\n },\n },\n\n emits: ['change', 'select-range', 'set-option'],\n\n setup(props, ctx) {\n // data\n let isScrolling = false\n const debouncedResetScroll = debounce((type) => {\n isScrolling = false\n adjustCurrentSpinner(type)\n }, 200)\n const currentScrollbar = ref(null)\n const listHoursRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listMinutesRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listSecondsRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listRefsMap = {\n hours: listHoursRef,\n minutes: listMinutesRef,\n seconds: listSecondsRef,\n }\n\n // computed\n const spinnerItems = computed(() => {\n const arr = ['hours', 'minutes', 'seconds']\n return props.showSeconds ? arr : arr.slice(0, 2)\n })\n const hours = computed(() => {\n return props.spinnerDate.hour()\n })\n const minutes = computed(() => {\n return props.spinnerDate.minute()\n })\n const seconds = computed(() => {\n return props.spinnerDate.second()\n })\n const timePartsMap = computed(() => ({\n hours,\n minutes,\n seconds,\n }))\n const hoursList = computed(() => {\n return getHoursList(props.role)\n })\n const minutesList = computed(() => {\n return getMinutesList(hours.value, props.role)\n })\n const secondsList = computed(() => {\n return getSecondsList(hours.value, minutes.value, props.role)\n })\n const listMap = computed(() => ({\n hours: hoursList,\n minutes: minutesList,\n seconds: secondsList,\n }))\n const arrowHourList = computed(() => {\n const hour = hours.value\n return [\n hour > 0 ? hour - 1 : undefined,\n hour,\n hour < 23 ? hour + 1 : undefined,\n ]\n })\n const arrowMinuteList = computed(() => {\n const minute = minutes.value\n return [\n minute > 0 ? minute - 1 : undefined,\n minute,\n minute < 59 ? minute + 1 : undefined,\n ]\n })\n const arrowSecondList = computed(() => {\n const second = seconds.value\n return [\n second > 0 ? second - 1 : undefined,\n second,\n second < 59 ? second + 1 : undefined,\n ]\n })\n const arrowListMap = computed(() => ({\n hours: arrowHourList,\n minutes: arrowMinuteList,\n seconds: arrowSecondList,\n }))\n const getAmPmFlag = (hour) => {\n const shouldShowAmPm = !!props.amPmMode\n if (!shouldShowAmPm) return ''\n const isCapital = props.amPmMode === 'A'\n // todo locale\n let content = hour < 12 ? ' am' : ' pm'\n if (isCapital) content = content.toUpperCase()\n return content\n }\n\n const emitSelectRange = (type) => {\n if (type === 'hours') {\n ctx.emit('select-range', 0, 2)\n } else if (type === 'minutes') {\n ctx.emit('select-range', 3, 5)\n } else if (type === 'seconds') {\n ctx.emit('select-range', 6, 8)\n }\n currentScrollbar.value = type\n }\n\n const adjustCurrentSpinner = (type) => {\n adjustSpinner(type, timePartsMap.value[type].value)\n }\n\n // NOTE: used by datetime / date-range panel\n // renamed from adjustScrollTop\n // should try to refactory it\n const adjustSpinners = () => {\n adjustCurrentSpinner('hours')\n adjustCurrentSpinner('minutes')\n adjustCurrentSpinner('seconds')\n }\n\n const adjustSpinner = (type, value) => {\n if (props.arrowControl) return\n const el = listRefsMap[type]\n if (el.value) {\n el.value.$el.querySelector('.el-scrollbar__wrap').scrollTop = Math.max(\n 0,\n value * typeItemHeight(type)\n )\n }\n }\n\n const typeItemHeight = (type) => {\n const el = listRefsMap[type]\n return el.value.$el.querySelector('li').offsetHeight\n }\n\n const onIncreaseClick = () => {\n scrollDown(1)\n }\n\n const onDecreaseClick = () => {\n scrollDown(-1)\n }\n\n const scrollDown = (step) => {\n if (!currentScrollbar.value) {\n emitSelectRange('hours')\n }\n\n const label = currentScrollbar.value\n let now = timePartsMap.value[label].value\n const total = currentScrollbar.value === 'hours' ? 24 : 60\n now = (now + step + total) % total\n\n modifyDateField(label, now)\n adjustSpinner(label, now)\n nextTick(() => emitSelectRange(currentScrollbar.value))\n }\n\n const modifyDateField = (type, value) => {\n const list = listMap.value[type].value\n const isDisabled = list[value]\n if (isDisabled) return\n switch (type) {\n case 'hours':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(value)\n .minute(minutes.value)\n .second(seconds.value)\n )\n break\n case 'minutes':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(value)\n .second(seconds.value)\n )\n break\n case 'seconds':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(minutes.value)\n .second(value)\n )\n break\n }\n }\n\n const handleClick = (type, { value, disabled }) => {\n if (!disabled) {\n modifyDateField(type, value)\n emitSelectRange(type)\n adjustSpinner(type, value)\n }\n }\n\n const handleScroll = (type) => {\n isScrolling = true\n debouncedResetScroll(type)\n const value = Math.min(\n Math.round(\n (listRefsMap[type].value.$el.querySelector('.el-scrollbar__wrap')\n .scrollTop -\n (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n 3) /\n typeItemHeight(type)\n ),\n type === 'hours' ? 23 : 59\n )\n modifyDateField(type, value)\n }\n\n const scrollBarHeight = (type) => {\n return listRefsMap[type].value.$el.offsetHeight\n }\n\n const bindScrollEvent = () => {\n const bindFuntion = (type) => {\n if (listRefsMap[type].value) {\n listRefsMap[type].value.$el.querySelector(\n '.el-scrollbar__wrap'\n ).onscroll = () => {\n // TODO: scroll is emitted when set scrollTop programatically\n // should find better solutions in the future!\n handleScroll(type)\n }\n }\n }\n bindFuntion('hours')\n bindFuntion('minutes')\n bindFuntion('seconds')\n }\n\n onMounted(() => {\n nextTick(() => {\n !props.arrowControl && bindScrollEvent()\n adjustSpinners()\n // set selection on the first hour part\n if (props.role === 'start') emitSelectRange('hours')\n })\n })\n\n const getRefId = (item) => {\n return `list${item.charAt(0).toUpperCase() + item.slice(1)}Ref`\n }\n\n ctx.emit('set-option', [`${props.role}_scrollDown`, scrollDown])\n ctx.emit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\n const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n props.disabledHours,\n props.disabledMinutes,\n props.disabledSeconds\n )\n\n watch(\n () => props.spinnerDate,\n () => {\n if (isScrolling) return\n adjustSpinners()\n }\n )\n\n return {\n getRefId,\n spinnerItems,\n currentScrollbar,\n hours,\n minutes,\n seconds,\n hoursList,\n minutesList,\n arrowHourList,\n arrowMinuteList,\n arrowSecondList,\n getAmPmFlag,\n emitSelectRange,\n adjustCurrentSpinner,\n typeItemHeight,\n listHoursRef,\n listMinutesRef,\n listSecondsRef,\n onIncreaseClick,\n onDecreaseClick,\n handleClick,\n secondsList,\n timePartsMap,\n arrowListMap,\n listMap,\n }\n },\n})\n</script>\n"],"names":["ElScrollbar"],"mappings":"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"}
|
|
@@ -72,7 +72,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
72
72
|
active: time === _ctx.timePartsMap[item].value,
|
|
73
73
|
disabled: _ctx.listMap[item].value[time]
|
|
74
74
|
}])
|
|
75
|
-
},
|
|
75
|
+
}, [
|
|
76
|
+
time ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
77
|
+
item === "hours" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
78
|
+
createTextVNode(toDisplayString(("0" + (_ctx.amPmMode ? time % 12 || 12 : time)).slice(-2)) + toDisplayString(_ctx.getAmPmFlag(time)), 1)
|
|
79
|
+
], 2112)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
80
|
+
createTextVNode(toDisplayString(("0" + time).slice(-2)), 1)
|
|
81
|
+
], 2112))
|
|
82
|
+
], 2112)) : createCommentVNode("v-if", true)
|
|
83
|
+
], 2);
|
|
76
84
|
}), 128))
|
|
77
85
|
])
|
|
78
86
|
], 40, _hoisted_2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-time-spinner.vue_vue&type=template&id=4fb3c576&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue?vue&type=template&id=4fb3c576&lang.js"],"sourcesContent":["<template>\n <div class=\"el-time-spinner\" :class=\"{ 'has-seconds': showSeconds }\">\n <template v-if=\"!arrowControl\">\n <el-scrollbar\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :ref=\"getRefId(item)\"\n class=\"el-time-spinner__wrapper\"\n wrap-style=\"max-height: inherit;\"\n view-class=\"el-time-spinner__list\"\n noresize\n tag=\"ul\"\n @mouseenter=\"emitSelectRange(item)\"\n @mousemove=\"adjustCurrentSpinner(item)\"\n >\n <li\n v-for=\"(disabled, key) in listMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{ active: key === timePartsMap[item].value, disabled }\"\n @click=\"handleClick(item, { value: key, disabled })\"\n >\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n }}{{ getAmPmFlag(key) }}\n </template>\n <template v-else>\n {{ ('0' + key).slice(-2) }}\n </template>\n </li>\n </el-scrollbar>\n </template>\n <template v-if=\"arrowControl\">\n <div\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n class=\"el-time-spinner__wrapper is-arrow\"\n @mouseenter=\"emitSelectRange(item)\"\n >\n <el-icon\n v-repeat-click=\"onDecreaseClick\"\n class=\"el-time-spinner__arrow arrow-up\"\n >\n <arrow-up />\n </el-icon>\n <el-icon\n v-repeat-click=\"onIncreaseClick\"\n class=\"el-time-spinner__arrow arrow-down\"\n >\n <arrow-down />\n </el-icon>\n <ul class=\"el-time-spinner__list\">\n <li\n v-for=\"(time, key) in arrowListMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{\n active: time === timePartsMap[item].value,\n disabled: listMap[item].value[time],\n }\"\n >\n {{\n time === undefined\n ? ''\n : ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2) +\n getAmPmFlag(time)\n }}\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, nextTick, computed, onMounted, watch } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { RepeatClick } from '@element-plus/directives'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport { ArrowUp, ArrowDown } from '@element-plus/icons'\nimport { getTimeLists } from './useTimePicker'\n\nimport type { PropType, Ref } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n directives: {\n repeatClick: RepeatClick,\n },\n\n components: {\n ElScrollbar,\n ElIcon,\n ArrowUp,\n ArrowDown,\n },\n\n props: {\n role: {\n type: String,\n required: true,\n },\n spinnerDate: {\n type: Object as PropType<Dayjs>,\n required: true,\n },\n showSeconds: {\n type: Boolean,\n default: true,\n },\n arrowControl: Boolean,\n amPmMode: {\n type: String,\n default: '', // 'a': am/pm; 'A': AM/PM\n },\n disabledHours: {\n type: Function,\n },\n disabledMinutes: {\n type: Function,\n },\n disabledSeconds: {\n type: Function,\n },\n },\n\n emits: ['change', 'select-range', 'set-option'],\n\n setup(props, ctx) {\n // data\n let isScrolling = false\n const debouncedResetScroll = debounce((type) => {\n isScrolling = false\n adjustCurrentSpinner(type)\n }, 200)\n const currentScrollbar = ref(null)\n const listHoursRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listMinutesRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listSecondsRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listRefsMap = {\n hours: listHoursRef,\n minutes: listMinutesRef,\n seconds: listSecondsRef,\n }\n\n // computed\n const spinnerItems = computed(() => {\n const arr = ['hours', 'minutes', 'seconds']\n return props.showSeconds ? arr : arr.slice(0, 2)\n })\n const hours = computed(() => {\n return props.spinnerDate.hour()\n })\n const minutes = computed(() => {\n return props.spinnerDate.minute()\n })\n const seconds = computed(() => {\n return props.spinnerDate.second()\n })\n const timePartsMap = computed(() => ({\n hours,\n minutes,\n seconds,\n }))\n const hoursList = computed(() => {\n return getHoursList(props.role)\n })\n const minutesList = computed(() => {\n return getMinutesList(hours.value, props.role)\n })\n const secondsList = computed(() => {\n return getSecondsList(hours.value, minutes.value, props.role)\n })\n const listMap = computed(() => ({\n hours: hoursList,\n minutes: minutesList,\n seconds: secondsList,\n }))\n const arrowHourList = computed(() => {\n const hour = hours.value\n return [\n hour > 0 ? hour - 1 : undefined,\n hour,\n hour < 23 ? hour + 1 : undefined,\n ]\n })\n const arrowMinuteList = computed(() => {\n const minute = minutes.value\n return [\n minute > 0 ? minute - 1 : undefined,\n minute,\n minute < 59 ? minute + 1 : undefined,\n ]\n })\n const arrowSecondList = computed(() => {\n const second = seconds.value\n return [\n second > 0 ? second - 1 : undefined,\n second,\n second < 59 ? second + 1 : undefined,\n ]\n })\n const arrowListMap = computed(() => ({\n hours: arrowHourList,\n minutes: arrowMinuteList,\n seconds: arrowSecondList,\n }))\n const getAmPmFlag = (hour) => {\n const shouldShowAmPm = !!props.amPmMode\n if (!shouldShowAmPm) return ''\n const isCapital = props.amPmMode === 'A'\n // todo locale\n let content = hour < 12 ? ' am' : ' pm'\n if (isCapital) content = content.toUpperCase()\n return content\n }\n\n const emitSelectRange = (type) => {\n if (type === 'hours') {\n ctx.emit('select-range', 0, 2)\n } else if (type === 'minutes') {\n ctx.emit('select-range', 3, 5)\n } else if (type === 'seconds') {\n ctx.emit('select-range', 6, 8)\n }\n currentScrollbar.value = type\n }\n\n const adjustCurrentSpinner = (type) => {\n adjustSpinner(type, timePartsMap.value[type].value)\n }\n\n // NOTE: used by datetime / date-range panel\n // renamed from adjustScrollTop\n // should try to refactory it\n const adjustSpinners = () => {\n adjustCurrentSpinner('hours')\n adjustCurrentSpinner('minutes')\n adjustCurrentSpinner('seconds')\n }\n\n const adjustSpinner = (type, value) => {\n if (props.arrowControl) return\n const el = listRefsMap[type]\n if (el.value) {\n el.value.$el.querySelector('.el-scrollbar__wrap').scrollTop = Math.max(\n 0,\n value * typeItemHeight(type)\n )\n }\n }\n\n const typeItemHeight = (type) => {\n const el = listRefsMap[type]\n return el.value.$el.querySelector('li').offsetHeight\n }\n\n const onIncreaseClick = () => {\n scrollDown(1)\n }\n\n const onDecreaseClick = () => {\n scrollDown(-1)\n }\n\n const scrollDown = (step) => {\n if (!currentScrollbar.value) {\n emitSelectRange('hours')\n }\n\n const label = currentScrollbar.value\n let now = timePartsMap.value[label].value\n const total = currentScrollbar.value === 'hours' ? 24 : 60\n now = (now + step + total) % total\n\n modifyDateField(label, now)\n adjustSpinner(label, now)\n nextTick(() => emitSelectRange(currentScrollbar.value))\n }\n\n const modifyDateField = (type, value) => {\n const list = listMap.value[type].value\n const isDisabled = list[value]\n if (isDisabled) return\n switch (type) {\n case 'hours':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(value)\n .minute(minutes.value)\n .second(seconds.value)\n )\n break\n case 'minutes':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(value)\n .second(seconds.value)\n )\n break\n case 'seconds':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(minutes.value)\n .second(value)\n )\n break\n }\n }\n\n const handleClick = (type, { value, disabled }) => {\n if (!disabled) {\n modifyDateField(type, value)\n emitSelectRange(type)\n adjustSpinner(type, value)\n }\n }\n\n const handleScroll = (type) => {\n isScrolling = true\n debouncedResetScroll(type)\n const value = Math.min(\n Math.round(\n (listRefsMap[type].value.$el.querySelector('.el-scrollbar__wrap')\n .scrollTop -\n (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n 3) /\n typeItemHeight(type)\n ),\n type === 'hours' ? 23 : 59\n )\n modifyDateField(type, value)\n }\n\n const scrollBarHeight = (type) => {\n return listRefsMap[type].value.$el.offsetHeight\n }\n\n const bindScrollEvent = () => {\n const bindFuntion = (type) => {\n if (listRefsMap[type].value) {\n listRefsMap[type].value.$el.querySelector(\n '.el-scrollbar__wrap'\n ).onscroll = () => {\n // TODO: scroll is emitted when set scrollTop programatically\n // should find better solutions in the future!\n handleScroll(type)\n }\n }\n }\n bindFuntion('hours')\n bindFuntion('minutes')\n bindFuntion('seconds')\n }\n\n onMounted(() => {\n nextTick(() => {\n !props.arrowControl && bindScrollEvent()\n adjustSpinners()\n // set selection on the first hour part\n if (props.role === 'start') emitSelectRange('hours')\n })\n })\n\n const getRefId = (item) => {\n return `list${item.charAt(0).toUpperCase() + item.slice(1)}Ref`\n }\n\n ctx.emit('set-option', [`${props.role}_scrollDown`, scrollDown])\n ctx.emit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\n const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n props.disabledHours,\n props.disabledMinutes,\n props.disabledSeconds\n )\n\n watch(\n () => props.spinnerDate,\n () => {\n if (isScrolling) return\n adjustSpinners()\n }\n )\n\n return {\n getRefId,\n spinnerItems,\n currentScrollbar,\n hours,\n minutes,\n seconds,\n hoursList,\n minutesList,\n arrowHourList,\n arrowMinuteList,\n arrowSecondList,\n getAmPmFlag,\n emitSelectRange,\n adjustCurrentSpinner,\n typeItemHeight,\n listHoursRef,\n listMinutesRef,\n listSecondsRef,\n onIncreaseClick,\n onDecreaseClick,\n handleClick,\n secondsList,\n timePartsMap,\n arrowListMap,\n listMap,\n }\n },\n})\n</script>\n"],"names":["_createElementBlock","_createBlock","_createVNode","_createElementVNode"],"mappings":";;;;qBAmDY,OAAM;;;;;;;sBAlDhBA;IAAK,uBAAM,oCAA2C;;KACnC,sCACfA,oDACiB,oBAAR;0BADTC;QAEG,KAAK;AAAA,QACL,KAAK,cAAS;AAAA,QACf,OAAM;AAAA,QACN,cAAW;AAAA,QACX,cAAW;AAAA,QACX,UAAA;AAAA,QACA,KAAI;AAAA,QACH,0BAAY,qBAAgB;AAAA,QAC5B,yBAAW,0BAAqB;AAAA;yBAG/B;4BADFD,8CAC4B,aAAQ,MAAM,QAAhC,UAAU;gCADpBA;cAEG;AAAA,cACD,uBAAM,mCACY,QAAQ,kBAAa,MAAM,OAAO;AAAA,cACnD,qBAAO,iBAAY,eAAe,KAAK;AAAA;cAExB,iCAAhBA;wEACwB,iBAAiB,MAAM,6BACxC,iBAAY;wCAEnBA;uDACY,KAAK;;;;;;;;IAKP,sCACdA,oDACiB,oBAAR;0BADTA;QAEG,KAAK;AAAA,QACN,OAAM;AAAA,QACL,0BAAY,qBAAgB;AAAA;uBAE7BE,kCAEE,OAAM;2BAEN;YAAAA;;;;oCAHgB;;uBAKlBA,kCAEE,OAAM;2BAEN;YAAAA;;;;oCAHgB;;QAKlBC,yBAAA;4BACEH,8CACwB,kBAAa,MAAM,QAAjC,MAAM;gCADhBA;cAEG;AAAA,cACD,uBAAM;;;;+BAOJ,SAAS;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"basic-time-spinner.vue_vue&type=template&id=4fb3c576&lang.mjs","sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue?vue&type=template&id=4fb3c576&lang.js"],"sourcesContent":["<template>\n <div class=\"el-time-spinner\" :class=\"{ 'has-seconds': showSeconds }\">\n <template v-if=\"!arrowControl\">\n <el-scrollbar\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :ref=\"getRefId(item)\"\n class=\"el-time-spinner__wrapper\"\n wrap-style=\"max-height: inherit;\"\n view-class=\"el-time-spinner__list\"\n noresize\n tag=\"ul\"\n @mouseenter=\"emitSelectRange(item)\"\n @mousemove=\"adjustCurrentSpinner(item)\"\n >\n <li\n v-for=\"(disabled, key) in listMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{ active: key === timePartsMap[item].value, disabled }\"\n @click=\"handleClick(item, { value: key, disabled })\"\n >\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n }}{{ getAmPmFlag(key) }}\n </template>\n <template v-else>\n {{ ('0' + key).slice(-2) }}\n </template>\n </li>\n </el-scrollbar>\n </template>\n <template v-if=\"arrowControl\">\n <div\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n class=\"el-time-spinner__wrapper is-arrow\"\n @mouseenter=\"emitSelectRange(item)\"\n >\n <el-icon\n v-repeat-click=\"onDecreaseClick\"\n class=\"el-time-spinner__arrow arrow-up\"\n >\n <arrow-up />\n </el-icon>\n <el-icon\n v-repeat-click=\"onIncreaseClick\"\n class=\"el-time-spinner__arrow arrow-down\"\n >\n <arrow-down />\n </el-icon>\n <ul class=\"el-time-spinner__list\">\n <li\n v-for=\"(time, key) in arrowListMap[item].value\"\n :key=\"key\"\n class=\"el-time-spinner__item\"\n :class=\"{\n active: time === timePartsMap[item].value,\n disabled: listMap[item].value[time],\n }\"\n >\n <template v-if=\"time\">\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2)\n }}{{ getAmPmFlag(time) }}\n </template>\n <template v-else>\n {{ ('0' + time).slice(-2) }}\n </template>\n </template>\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref, nextTick, computed, onMounted, watch } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { RepeatClick } from '@element-plus/directives'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport { ArrowUp, ArrowDown } from '@element-plus/icons'\nimport { getTimeLists } from './useTimePicker'\n\nimport type { PropType, Ref } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { Nullable } from '@element-plus/utils/types'\n\nexport default defineComponent({\n directives: {\n repeatClick: RepeatClick,\n },\n\n components: {\n ElScrollbar,\n ElIcon,\n ArrowUp,\n ArrowDown,\n },\n\n props: {\n role: {\n type: String,\n required: true,\n },\n spinnerDate: {\n type: Object as PropType<Dayjs>,\n required: true,\n },\n showSeconds: {\n type: Boolean,\n default: true,\n },\n arrowControl: Boolean,\n amPmMode: {\n type: String,\n default: '', // 'a': am/pm; 'A': AM/PM\n },\n disabledHours: {\n type: Function,\n },\n disabledMinutes: {\n type: Function,\n },\n disabledSeconds: {\n type: Function,\n },\n },\n\n emits: ['change', 'select-range', 'set-option'],\n\n setup(props, ctx) {\n // data\n let isScrolling = false\n const debouncedResetScroll = debounce((type) => {\n isScrolling = false\n adjustCurrentSpinner(type)\n }, 200)\n const currentScrollbar = ref(null)\n const listHoursRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listMinutesRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listSecondsRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listRefsMap = {\n hours: listHoursRef,\n minutes: listMinutesRef,\n seconds: listSecondsRef,\n }\n\n // computed\n const spinnerItems = computed(() => {\n const arr = ['hours', 'minutes', 'seconds']\n return props.showSeconds ? arr : arr.slice(0, 2)\n })\n const hours = computed(() => {\n return props.spinnerDate.hour()\n })\n const minutes = computed(() => {\n return props.spinnerDate.minute()\n })\n const seconds = computed(() => {\n return props.spinnerDate.second()\n })\n const timePartsMap = computed(() => ({\n hours,\n minutes,\n seconds,\n }))\n const hoursList = computed(() => {\n return getHoursList(props.role)\n })\n const minutesList = computed(() => {\n return getMinutesList(hours.value, props.role)\n })\n const secondsList = computed(() => {\n return getSecondsList(hours.value, minutes.value, props.role)\n })\n const listMap = computed(() => ({\n hours: hoursList,\n minutes: minutesList,\n seconds: secondsList,\n }))\n const arrowHourList = computed(() => {\n const hour = hours.value\n return [\n hour > 0 ? hour - 1 : undefined,\n hour,\n hour < 23 ? hour + 1 : undefined,\n ]\n })\n const arrowMinuteList = computed(() => {\n const minute = minutes.value\n return [\n minute > 0 ? minute - 1 : undefined,\n minute,\n minute < 59 ? minute + 1 : undefined,\n ]\n })\n const arrowSecondList = computed(() => {\n const second = seconds.value\n return [\n second > 0 ? second - 1 : undefined,\n second,\n second < 59 ? second + 1 : undefined,\n ]\n })\n const arrowListMap = computed(() => ({\n hours: arrowHourList,\n minutes: arrowMinuteList,\n seconds: arrowSecondList,\n }))\n const getAmPmFlag = (hour) => {\n const shouldShowAmPm = !!props.amPmMode\n if (!shouldShowAmPm) return ''\n const isCapital = props.amPmMode === 'A'\n // todo locale\n let content = hour < 12 ? ' am' : ' pm'\n if (isCapital) content = content.toUpperCase()\n return content\n }\n\n const emitSelectRange = (type) => {\n if (type === 'hours') {\n ctx.emit('select-range', 0, 2)\n } else if (type === 'minutes') {\n ctx.emit('select-range', 3, 5)\n } else if (type === 'seconds') {\n ctx.emit('select-range', 6, 8)\n }\n currentScrollbar.value = type\n }\n\n const adjustCurrentSpinner = (type) => {\n adjustSpinner(type, timePartsMap.value[type].value)\n }\n\n // NOTE: used by datetime / date-range panel\n // renamed from adjustScrollTop\n // should try to refactory it\n const adjustSpinners = () => {\n adjustCurrentSpinner('hours')\n adjustCurrentSpinner('minutes')\n adjustCurrentSpinner('seconds')\n }\n\n const adjustSpinner = (type, value) => {\n if (props.arrowControl) return\n const el = listRefsMap[type]\n if (el.value) {\n el.value.$el.querySelector('.el-scrollbar__wrap').scrollTop = Math.max(\n 0,\n value * typeItemHeight(type)\n )\n }\n }\n\n const typeItemHeight = (type) => {\n const el = listRefsMap[type]\n return el.value.$el.querySelector('li').offsetHeight\n }\n\n const onIncreaseClick = () => {\n scrollDown(1)\n }\n\n const onDecreaseClick = () => {\n scrollDown(-1)\n }\n\n const scrollDown = (step) => {\n if (!currentScrollbar.value) {\n emitSelectRange('hours')\n }\n\n const label = currentScrollbar.value\n let now = timePartsMap.value[label].value\n const total = currentScrollbar.value === 'hours' ? 24 : 60\n now = (now + step + total) % total\n\n modifyDateField(label, now)\n adjustSpinner(label, now)\n nextTick(() => emitSelectRange(currentScrollbar.value))\n }\n\n const modifyDateField = (type, value) => {\n const list = listMap.value[type].value\n const isDisabled = list[value]\n if (isDisabled) return\n switch (type) {\n case 'hours':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(value)\n .minute(minutes.value)\n .second(seconds.value)\n )\n break\n case 'minutes':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(value)\n .second(seconds.value)\n )\n break\n case 'seconds':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(minutes.value)\n .second(value)\n )\n break\n }\n }\n\n const handleClick = (type, { value, disabled }) => {\n if (!disabled) {\n modifyDateField(type, value)\n emitSelectRange(type)\n adjustSpinner(type, value)\n }\n }\n\n const handleScroll = (type) => {\n isScrolling = true\n debouncedResetScroll(type)\n const value = Math.min(\n Math.round(\n (listRefsMap[type].value.$el.querySelector('.el-scrollbar__wrap')\n .scrollTop -\n (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n 3) /\n typeItemHeight(type)\n ),\n type === 'hours' ? 23 : 59\n )\n modifyDateField(type, value)\n }\n\n const scrollBarHeight = (type) => {\n return listRefsMap[type].value.$el.offsetHeight\n }\n\n const bindScrollEvent = () => {\n const bindFuntion = (type) => {\n if (listRefsMap[type].value) {\n listRefsMap[type].value.$el.querySelector(\n '.el-scrollbar__wrap'\n ).onscroll = () => {\n // TODO: scroll is emitted when set scrollTop programatically\n // should find better solutions in the future!\n handleScroll(type)\n }\n }\n }\n bindFuntion('hours')\n bindFuntion('minutes')\n bindFuntion('seconds')\n }\n\n onMounted(() => {\n nextTick(() => {\n !props.arrowControl && bindScrollEvent()\n adjustSpinners()\n // set selection on the first hour part\n if (props.role === 'start') emitSelectRange('hours')\n })\n })\n\n const getRefId = (item) => {\n return `list${item.charAt(0).toUpperCase() + item.slice(1)}Ref`\n }\n\n ctx.emit('set-option', [`${props.role}_scrollDown`, scrollDown])\n ctx.emit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\n const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n props.disabledHours,\n props.disabledMinutes,\n props.disabledSeconds\n )\n\n watch(\n () => props.spinnerDate,\n () => {\n if (isScrolling) return\n adjustSpinners()\n }\n )\n\n return {\n getRefId,\n spinnerItems,\n currentScrollbar,\n hours,\n minutes,\n seconds,\n hoursList,\n minutesList,\n arrowHourList,\n arrowMinuteList,\n arrowSecondList,\n getAmPmFlag,\n emitSelectRange,\n adjustCurrentSpinner,\n typeItemHeight,\n listHoursRef,\n listMinutesRef,\n listSecondsRef,\n onIncreaseClick,\n onDecreaseClick,\n handleClick,\n secondsList,\n timePartsMap,\n arrowListMap,\n listMap,\n }\n },\n})\n</script>\n"],"names":["_createElementBlock","_createBlock","_createVNode","_createElementVNode"],"mappings":";;;;qBAmDY,OAAM;;;;;;;sBAlDhBA;IAAK,uBAAM,oCAA2C;;KACnC,sCACfA,oDACiB,oBAAR;0BADTC;QAEG,KAAK;AAAA,QACL,KAAK,cAAS;AAAA,QACf,OAAM;AAAA,QACN,cAAW;AAAA,QACX,cAAW;AAAA,QACX,UAAA;AAAA,QACA,KAAI;AAAA,QACH,0BAAY,qBAAgB;AAAA,QAC5B,yBAAW,0BAAqB;AAAA;yBAG/B;4BADFD,8CAC4B,aAAQ,MAAM,QAAhC,UAAU;gCADpBA;cAEG;AAAA,cACD,uBAAM,mCACY,QAAQ,kBAAa,MAAM,OAAO;AAAA,cACnD,qBAAO,iBAAY,eAAe,KAAK;AAAA;cAExB,iCAAhBA;wEACwB,iBAAiB,MAAM,6BACxC,iBAAY;wCAEnBA;uDACY,KAAK;;;;;;;;IAKP,sCACdA,oDACiB,oBAAR;0BADTA;QAEG,KAAK;AAAA,QACN,OAAM;AAAA,QACL,0BAAY,qBAAgB;AAAA;uBAE7BE,kCAEE,OAAM;2BAEN;YAAAA;;;;oCAHgB;;uBAKlBA,kCAEE,OAAM;2BAEN;YAAAA;;;;oCAHgB;;QAKlBC,yBAAA;4BACEH,8CACwB,kBAAa,MAAM,QAAjC,MAAM;gCADhBA;cAEG;AAAA,cACD,uBAAM;;;;;cAMU,qBAAhBA;gBACkB,iCAAhBA;0EACwB,kBAAkB,OAAO,6BAC1C,iBAAY;0CAEnBA;yDACY,MAAM;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-select.vue_vue&type=script&lang.mjs","sources":["../../../../../../packages/components/time-select/src/time-select.vue"],"sourcesContent":["<template>\n <el-select\n ref=\"select\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :clearable=\"clearable\"\n :clear-icon=\"clearIcon\"\n :size=\"size\"\n :placeholder=\"placeholder\"\n default-first-option\n :filterable=\"editable\"\n @update:model-value=\"(event) => $emit('update:modelValue', event)\"\n @change=\"(event) => $emit('change', event)\"\n @blur=\"(event) => $emit('blur', event)\"\n @focus=\"(event) => $emit('focus', event)\"\n >\n <el-option\n v-for=\"item in items\"\n :key=\"item.value\"\n :label=\"item.value\"\n :value=\"item.value\"\n :disabled=\"item.disabled\"\n />\n <template #prefix>\n <el-icon class=\"el-input__prefix-icon\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </template>\n </el-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue'\nimport ElSelect from '@element-plus/components/select'\nimport ElIcon from '@element-plus/components/icon'\nimport { CircleClose, Clock } from '@element-plus/icons'\n\nimport type { PropType, Component } from 'vue'\nimport type { ComponentSize } from '@element-plus/utils/types'\n\nconst { Option: ElOption } = ElSelect\n\ninterface Time {\n hours: number\n minutes: number\n}\n\nconst parseTime = (time: string): null | Time => {\n const values = (time || '').split(':')\n if (values.length >= 2) {\n const hours = parseInt(values[0], 10)\n const minutes = parseInt(values[1], 10)\n return {\n hours,\n minutes,\n }\n }\n return null\n}\nconst compareTime = (time1: string, time2: string): number => {\n const value1 = parseTime(time1)\n const value2 = parseTime(time2)\n const minutes1 = value1.minutes + value1.hours * 60\n const minutes2 = value2.minutes + value2.hours * 60\n if (minutes1 === minutes2) {\n return 0\n }\n return minutes1 > minutes2 ? 1 : -1\n}\nconst formatTime = (time: Time): string => {\n return `${time.hours < 10 ? `0${time.hours}` : time.hours}:${\n time.minutes < 10 ? `0${time.minutes}` : time.minutes\n }`\n}\nconst nextTime = (time: string, step: string): string => {\n const timeValue = parseTime(time)\n const stepValue = parseTime(step)\n const next = {\n hours: timeValue.hours,\n minutes: timeValue.minutes,\n }\n next.minutes += stepValue.minutes\n next.hours += stepValue.hours\n next.hours += Math.floor(next.minutes / 60)\n next.minutes = next.minutes % 60\n return formatTime(next)\n}\n\nexport default defineComponent({\n name: 'ElTimeSelect',\n components: { ElSelect, ElOption, ElIcon },\n model: {\n prop: 'value',\n event: 'change',\n },\n props: {\n modelValue: String,\n disabled: {\n type: Boolean,\n default: false,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: '',\n validator: (value: string) =>\n !value || ['medium', 'small', 'mini'].indexOf(value) !== -1,\n },\n placeholder: {\n type: String,\n default: '',\n },\n start: {\n type: String,\n default: '09:00',\n },\n end: {\n type: String,\n default: '18:00',\n },\n step: {\n type: String,\n default: '00:30',\n },\n minTime: {\n type: String,\n default: '',\n },\n maxTime: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n prefixIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: Clock,\n },\n clearIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: CircleClose,\n },\n },\n emits: ['change', 'blur', 'focus', 'update:modelValue'],\n setup(props) {\n // computed\n const select = ref(null)\n const value = computed(() => props.modelValue)\n const items = computed(() => {\n const result = []\n if (props.start && props.end && props.step) {\n let current = props.start\n while (compareTime(current, props.end) <= 0) {\n result.push({\n value: current,\n disabled:\n compareTime(current, props.minTime || '-1:-1') <= 0 ||\n compareTime(current, props.maxTime || '100:100') >= 0,\n })\n current = nextTime(current, props.step)\n }\n }\n return result\n })\n const blur = () => {\n select.value?.blur?.()\n }\n const focus = () => {\n select.value?.focus?.()\n }\n\n return {\n select,\n value,\n items,\n blur,\n focus,\n }\n },\n})\n</script>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"time-select.vue_vue&type=script&lang.mjs","sources":["../../../../../../packages/components/time-select/src/time-select.vue"],"sourcesContent":["<template>\n <el-select\n ref=\"select\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :clearable=\"clearable\"\n :clear-icon=\"clearIcon\"\n :size=\"size\"\n :placeholder=\"placeholder\"\n default-first-option\n :filterable=\"editable\"\n @update:model-value=\"(event) => $emit('update:modelValue', event)\"\n @change=\"(event) => $emit('change', event)\"\n @blur=\"(event) => $emit('blur', event)\"\n @focus=\"(event) => $emit('focus', event)\"\n >\n <el-option\n v-for=\"item in items\"\n :key=\"item.value\"\n :label=\"item.value\"\n :value=\"item.value\"\n :disabled=\"item.disabled\"\n />\n <template #prefix>\n <el-icon v-if=\"prefixIcon\" class=\"el-input__prefix-icon\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </template>\n </el-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue'\nimport ElSelect from '@element-plus/components/select'\nimport ElIcon from '@element-plus/components/icon'\nimport { CircleClose, Clock } from '@element-plus/icons'\n\nimport type { PropType, Component } from 'vue'\nimport type { ComponentSize } from '@element-plus/utils/types'\n\nconst { Option: ElOption } = ElSelect\n\ninterface Time {\n hours: number\n minutes: number\n}\n\nconst parseTime = (time: string): null | Time => {\n const values = (time || '').split(':')\n if (values.length >= 2) {\n const hours = parseInt(values[0], 10)\n const minutes = parseInt(values[1], 10)\n return {\n hours,\n minutes,\n }\n }\n return null\n}\nconst compareTime = (time1: string, time2: string): number => {\n const value1 = parseTime(time1)\n const value2 = parseTime(time2)\n const minutes1 = value1.minutes + value1.hours * 60\n const minutes2 = value2.minutes + value2.hours * 60\n if (minutes1 === minutes2) {\n return 0\n }\n return minutes1 > minutes2 ? 1 : -1\n}\nconst formatTime = (time: Time): string => {\n return `${time.hours < 10 ? `0${time.hours}` : time.hours}:${\n time.minutes < 10 ? `0${time.minutes}` : time.minutes\n }`\n}\nconst nextTime = (time: string, step: string): string => {\n const timeValue = parseTime(time)\n const stepValue = parseTime(step)\n const next = {\n hours: timeValue.hours,\n minutes: timeValue.minutes,\n }\n next.minutes += stepValue.minutes\n next.hours += stepValue.hours\n next.hours += Math.floor(next.minutes / 60)\n next.minutes = next.minutes % 60\n return formatTime(next)\n}\n\nexport default defineComponent({\n name: 'ElTimeSelect',\n components: { ElSelect, ElOption, ElIcon },\n model: {\n prop: 'value',\n event: 'change',\n },\n props: {\n modelValue: String,\n disabled: {\n type: Boolean,\n default: false,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: '',\n validator: (value: string) =>\n !value || ['medium', 'small', 'mini'].indexOf(value) !== -1,\n },\n placeholder: {\n type: String,\n default: '',\n },\n start: {\n type: String,\n default: '09:00',\n },\n end: {\n type: String,\n default: '18:00',\n },\n step: {\n type: String,\n default: '00:30',\n },\n minTime: {\n type: String,\n default: '',\n },\n maxTime: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n prefixIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: Clock,\n },\n clearIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: CircleClose,\n },\n },\n emits: ['change', 'blur', 'focus', 'update:modelValue'],\n setup(props) {\n // computed\n const select = ref(null)\n const value = computed(() => props.modelValue)\n const items = computed(() => {\n const result = []\n if (props.start && props.end && props.step) {\n let current = props.start\n while (compareTime(current, props.end) <= 0) {\n result.push({\n value: current,\n disabled:\n compareTime(current, props.minTime || '-1:-1') <= 0 ||\n compareTime(current, props.maxTime || '100:100') >= 0,\n })\n current = nextTime(current, props.step)\n }\n }\n return result\n })\n const blur = () => {\n select.value?.blur?.()\n }\n const focus = () => {\n select.value?.focus?.()\n }\n\n return {\n select,\n value,\n items,\n blur,\n focus,\n }\n },\n})\n</script>\n"],"names":[],"mappings":"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"}
|
package/es/components/time-select/src/time-select.vue_vue&type=template&id=5beb6389&lang.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveComponent, openBlock, createBlock, withCtx,
|
|
1
|
+
import { resolveComponent, openBlock, createBlock, withCtx, resolveDynamicComponent, createCommentVNode, createElementBlock, Fragment, renderList } from 'vue';
|
|
2
2
|
|
|
3
3
|
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
4
4
|
const _component_el_option = resolveComponent("el-option");
|
|
@@ -20,12 +20,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
20
20
|
onFocus: _cache[3] || (_cache[3] = (event) => _ctx.$emit("focus", event))
|
|
21
21
|
}, {
|
|
22
22
|
prefix: withCtx(() => [
|
|
23
|
-
|
|
23
|
+
_ctx.prefixIcon ? (openBlock(), createBlock(_component_el_icon, {
|
|
24
|
+
key: 0,
|
|
25
|
+
class: "el-input__prefix-icon"
|
|
26
|
+
}, {
|
|
24
27
|
default: withCtx(() => [
|
|
25
28
|
(openBlock(), createBlock(resolveDynamicComponent(_ctx.prefixIcon)))
|
|
26
29
|
]),
|
|
27
30
|
_: 1
|
|
28
|
-
})
|
|
31
|
+
})) : createCommentVNode("v-if", true)
|
|
29
32
|
]),
|
|
30
33
|
default: withCtx(() => [
|
|
31
34
|
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.items, (item) => {
|
package/es/components/time-select/src/time-select.vue_vue&type=template&id=5beb6389&lang.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-select.vue_vue&type=template&id=5beb6389&lang.mjs","sources":["../../../../../../packages/components/time-select/src/time-select.vue?vue&type=template&id=5beb6389&lang.js"],"sourcesContent":["<template>\n <el-select\n ref=\"select\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :clearable=\"clearable\"\n :clear-icon=\"clearIcon\"\n :size=\"size\"\n :placeholder=\"placeholder\"\n default-first-option\n :filterable=\"editable\"\n @update:model-value=\"(event) => $emit('update:modelValue', event)\"\n @change=\"(event) => $emit('change', event)\"\n @blur=\"(event) => $emit('blur', event)\"\n @focus=\"(event) => $emit('focus', event)\"\n >\n <el-option\n v-for=\"item in items\"\n :key=\"item.value\"\n :label=\"item.value\"\n :value=\"item.value\"\n :disabled=\"item.disabled\"\n />\n <template #prefix>\n <el-icon class=\"el-input__prefix-icon\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </template>\n </el-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue'\nimport ElSelect from '@element-plus/components/select'\nimport ElIcon from '@element-plus/components/icon'\nimport { CircleClose, Clock } from '@element-plus/icons'\n\nimport type { PropType, Component } from 'vue'\nimport type { ComponentSize } from '@element-plus/utils/types'\n\nconst { Option: ElOption } = ElSelect\n\ninterface Time {\n hours: number\n minutes: number\n}\n\nconst parseTime = (time: string): null | Time => {\n const values = (time || '').split(':')\n if (values.length >= 2) {\n const hours = parseInt(values[0], 10)\n const minutes = parseInt(values[1], 10)\n return {\n hours,\n minutes,\n }\n }\n return null\n}\nconst compareTime = (time1: string, time2: string): number => {\n const value1 = parseTime(time1)\n const value2 = parseTime(time2)\n const minutes1 = value1.minutes + value1.hours * 60\n const minutes2 = value2.minutes + value2.hours * 60\n if (minutes1 === minutes2) {\n return 0\n }\n return minutes1 > minutes2 ? 1 : -1\n}\nconst formatTime = (time: Time): string => {\n return `${time.hours < 10 ? `0${time.hours}` : time.hours}:${\n time.minutes < 10 ? `0${time.minutes}` : time.minutes\n }`\n}\nconst nextTime = (time: string, step: string): string => {\n const timeValue = parseTime(time)\n const stepValue = parseTime(step)\n const next = {\n hours: timeValue.hours,\n minutes: timeValue.minutes,\n }\n next.minutes += stepValue.minutes\n next.hours += stepValue.hours\n next.hours += Math.floor(next.minutes / 60)\n next.minutes = next.minutes % 60\n return formatTime(next)\n}\n\nexport default defineComponent({\n name: 'ElTimeSelect',\n components: { ElSelect, ElOption, ElIcon },\n model: {\n prop: 'value',\n event: 'change',\n },\n props: {\n modelValue: String,\n disabled: {\n type: Boolean,\n default: false,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: '',\n validator: (value: string) =>\n !value || ['medium', 'small', 'mini'].indexOf(value) !== -1,\n },\n placeholder: {\n type: String,\n default: '',\n },\n start: {\n type: String,\n default: '09:00',\n },\n end: {\n type: String,\n default: '18:00',\n },\n step: {\n type: String,\n default: '00:30',\n },\n minTime: {\n type: String,\n default: '',\n },\n maxTime: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n prefixIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: Clock,\n },\n clearIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: CircleClose,\n },\n },\n emits: ['change', 'blur', 'focus', 'update:modelValue'],\n setup(props) {\n // computed\n const select = ref(null)\n const value = computed(() => props.modelValue)\n const items = computed(() => {\n const result = []\n if (props.start && props.end && props.step) {\n let current = props.start\n while (compareTime(current, props.end) <= 0) {\n result.push({\n value: current,\n disabled:\n compareTime(current, props.minTime || '-1:-1') <= 0 ||\n compareTime(current, props.maxTime || '100:100') >= 0,\n })\n current = nextTime(current, props.step)\n }\n }\n return result\n })\n const blur = () => {\n select.value?.blur?.()\n }\n const focus = () => {\n select.value?.focus?.()\n }\n\n return {\n select,\n value,\n items,\n blur,\n focus,\n }\n },\n})\n</script>\n"],"names":["_createBlock","
|
|
1
|
+
{"version":3,"file":"time-select.vue_vue&type=template&id=5beb6389&lang.mjs","sources":["../../../../../../packages/components/time-select/src/time-select.vue?vue&type=template&id=5beb6389&lang.js"],"sourcesContent":["<template>\n <el-select\n ref=\"select\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :clearable=\"clearable\"\n :clear-icon=\"clearIcon\"\n :size=\"size\"\n :placeholder=\"placeholder\"\n default-first-option\n :filterable=\"editable\"\n @update:model-value=\"(event) => $emit('update:modelValue', event)\"\n @change=\"(event) => $emit('change', event)\"\n @blur=\"(event) => $emit('blur', event)\"\n @focus=\"(event) => $emit('focus', event)\"\n >\n <el-option\n v-for=\"item in items\"\n :key=\"item.value\"\n :label=\"item.value\"\n :value=\"item.value\"\n :disabled=\"item.disabled\"\n />\n <template #prefix>\n <el-icon v-if=\"prefixIcon\" class=\"el-input__prefix-icon\">\n <component :is=\"prefixIcon\" />\n </el-icon>\n </template>\n </el-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, ref } from 'vue'\nimport ElSelect from '@element-plus/components/select'\nimport ElIcon from '@element-plus/components/icon'\nimport { CircleClose, Clock } from '@element-plus/icons'\n\nimport type { PropType, Component } from 'vue'\nimport type { ComponentSize } from '@element-plus/utils/types'\n\nconst { Option: ElOption } = ElSelect\n\ninterface Time {\n hours: number\n minutes: number\n}\n\nconst parseTime = (time: string): null | Time => {\n const values = (time || '').split(':')\n if (values.length >= 2) {\n const hours = parseInt(values[0], 10)\n const minutes = parseInt(values[1], 10)\n return {\n hours,\n minutes,\n }\n }\n return null\n}\nconst compareTime = (time1: string, time2: string): number => {\n const value1 = parseTime(time1)\n const value2 = parseTime(time2)\n const minutes1 = value1.minutes + value1.hours * 60\n const minutes2 = value2.minutes + value2.hours * 60\n if (minutes1 === minutes2) {\n return 0\n }\n return minutes1 > minutes2 ? 1 : -1\n}\nconst formatTime = (time: Time): string => {\n return `${time.hours < 10 ? `0${time.hours}` : time.hours}:${\n time.minutes < 10 ? `0${time.minutes}` : time.minutes\n }`\n}\nconst nextTime = (time: string, step: string): string => {\n const timeValue = parseTime(time)\n const stepValue = parseTime(step)\n const next = {\n hours: timeValue.hours,\n minutes: timeValue.minutes,\n }\n next.minutes += stepValue.minutes\n next.hours += stepValue.hours\n next.hours += Math.floor(next.minutes / 60)\n next.minutes = next.minutes % 60\n return formatTime(next)\n}\n\nexport default defineComponent({\n name: 'ElTimeSelect',\n components: { ElSelect, ElOption, ElIcon },\n model: {\n prop: 'value',\n event: 'change',\n },\n props: {\n modelValue: String,\n disabled: {\n type: Boolean,\n default: false,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: '',\n validator: (value: string) =>\n !value || ['medium', 'small', 'mini'].indexOf(value) !== -1,\n },\n placeholder: {\n type: String,\n default: '',\n },\n start: {\n type: String,\n default: '09:00',\n },\n end: {\n type: String,\n default: '18:00',\n },\n step: {\n type: String,\n default: '00:30',\n },\n minTime: {\n type: String,\n default: '',\n },\n maxTime: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n prefixIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: Clock,\n },\n clearIcon: {\n type: [String, Object] as PropType<string | Component>,\n default: CircleClose,\n },\n },\n emits: ['change', 'blur', 'focus', 'update:modelValue'],\n setup(props) {\n // computed\n const select = ref(null)\n const value = computed(() => props.modelValue)\n const items = computed(() => {\n const result = []\n if (props.start && props.end && props.step) {\n let current = props.start\n while (compareTime(current, props.end) <= 0) {\n result.push({\n value: current,\n disabled:\n compareTime(current, props.minTime || '-1:-1') <= 0 ||\n compareTime(current, props.maxTime || '100:100') >= 0,\n })\n current = nextTime(current, props.step)\n }\n }\n return result\n })\n const blur = () => {\n select.value?.blur?.()\n }\n const focus = () => {\n select.value?.focus?.()\n }\n\n return {\n select,\n value,\n items,\n blur,\n focus,\n }\n },\n})\n</script>\n"],"names":["_createBlock","_createElementBlock"],"mappings":";;;;;;sBACEA;IACE,KAAI;AAAA,IACH,eAAa;IACb,UAAU;IACV,WAAW;IACX,cAAY;IACZ,MAAM;IACN,aAAa;IACd,wBAAA;AAAA,IACC,YAAY;IACZ,kDAAqB,UAAU,gCAA2B;AAAA,IAC1D,qCAAS,UAAU,qBAAgB;AAAA,IACnC,mCAAO,UAAU,mBAAc;AAAA,IAC/B,oCAAQ,UAAU,oBAAe;AAAA;IASvB,gBACT;MAAe,gCAAfA;;QAA2B,OAAM;AAAA;yBAC/B;wBAAAA,oCAAgB;;;;;qBARlB;wBADFC,8CACiB,aAAR;4BADTD;UAEG,KAAK,KAAK;AAAA,UACV,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK;AAAA;;;;;;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { defineComponent, reactive, computed, toRefs } from 'vue';
|
|
2
2
|
import '../../../hooks/index.mjs';
|
|
3
3
|
import { ElCheckboxGroup, ElCheckbox } from '../../checkbox/index.mjs';
|
|
4
|
+
import { ElIcon } from '../../icon/index.mjs';
|
|
4
5
|
import { ElInput } from '../../input/index.mjs';
|
|
5
6
|
import { CircleClose, Search } from '@element-plus/icons';
|
|
6
7
|
import { useCheckProps, CHECKED_CHANGE_EVENT, useCheck } from './useCheck.mjs';
|
|
@@ -12,6 +13,7 @@ var script = defineComponent({
|
|
|
12
13
|
ElCheckboxGroup,
|
|
13
14
|
ElCheckbox,
|
|
14
15
|
ElInput,
|
|
16
|
+
ElIcon,
|
|
15
17
|
OptionContent: ({ option }) => option
|
|
16
18
|
},
|
|
17
19
|
props: useCheckProps,
|