@dialpad/dialtone-vue 3.223.0-next.2 → 3.223.0-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Combobox-CYEmi3dv.cjs +3 -0
- package/dist/Combobox-CYEmi3dv.cjs.map +1 -0
- package/dist/{Combobox-By01ETlj.js → Combobox-D8nQeBIf.js} +33 -32
- package/dist/Combobox-D8nQeBIf.js.map +1 -0
- package/dist/MarkdownRenderer-D5XWsyQk.cjs.map +1 -1
- package/dist/{MarkdownRenderer-C3MZDB2I.js → MarkdownRenderer-NSSny0ID.js} +2 -2
- package/dist/{MarkdownRenderer-C3MZDB2I.js.map → MarkdownRenderer-NSSny0ID.js.map} +1 -1
- package/dist/{RichTextEditor-BX-5tCOx.cjs → RichTextEditor-B9NGgB03.cjs} +2 -2
- package/dist/{RichTextEditor-BX-5tCOx.cjs.map → RichTextEditor-B9NGgB03.cjs.map} +1 -1
- package/dist/{RichTextEditor-D8Kas5A3.js → RichTextEditor-DxbZSRop.js} +4 -4
- package/dist/{RichTextEditor-D8Kas5A3.js.map → RichTextEditor-DxbZSRop.js.map} +1 -1
- package/dist/TextList-B6XFfQfD.js +88 -0
- package/dist/TextList-B6XFfQfD.js.map +1 -0
- package/dist/TextList-Dd-ROFiI.cjs +2 -0
- package/dist/TextList-Dd-ROFiI.cjs.map +1 -0
- package/dist/TextListItem-DIlrCkaM.cjs +2 -0
- package/dist/TextListItem-DIlrCkaM.cjs.map +1 -0
- package/dist/TextListItem-ImUi_FWh.js +62 -0
- package/dist/TextListItem-ImUi_FWh.js.map +1 -0
- package/dist/{Toast-CHbVmbBg.js → Toast-BIHkIpZP.js} +95 -94
- package/dist/Toast-BIHkIpZP.js.map +1 -0
- package/dist/Toast-D8ARDEgT.cjs +2 -0
- package/dist/Toast-D8ARDEgT.cjs.map +1 -0
- package/dist/{attachment_carousel-BFIAXWOZ.js → attachment_carousel-CyiexPBk.js} +1 -1
- package/dist/{attachment_carousel-BFIAXWOZ.js.map → attachment_carousel-CyiexPBk.js.map} +1 -1
- package/dist/{attachment_carousel-BJxqNJ5T.cjs → attachment_carousel-DJqILY7f.cjs} +1 -1
- package/dist/{attachment_carousel-BJxqNJ5T.cjs.map → attachment_carousel-DJqILY7f.cjs.map} +1 -1
- package/dist/common/mixins/input.d.ts +4 -4
- package/dist/common/mixins/input_group.d.ts +2 -2
- package/dist/common/sr_only_close_button.vue.d.ts +30 -30
- package/dist/common/sr_only_close_button.vue.d.ts.map +1 -1
- package/dist/common/validators/index.cjs +1 -1
- package/dist/common/validators/index.cjs.map +1 -1
- package/dist/common/validators/index.d.ts +2 -0
- package/dist/common/validators/index.d.ts.map +1 -1
- package/dist/common/validators/index.js +9 -2
- package/dist/common/validators/index.js.map +1 -1
- package/dist/component-documentation.json +1 -1
- package/dist/components/Avatar/Avatar.vue.d.ts +10 -10
- package/dist/components/Avatar/Avatar.vue.d.ts.map +1 -1
- package/dist/components/Badge/Badge.vue.d.ts +13 -13
- package/dist/components/Banner/Banner.vue.d.ts +142 -107
- package/dist/components/Banner/Banner.vue.d.ts.map +1 -1
- package/dist/components/Box/Box.vue.d.ts +18 -0
- package/dist/components/Box/Box.vue.d.ts.map +1 -1
- package/dist/components/Box/BoxConstants.d.ts +4 -0
- package/dist/components/Box/BoxConstants.d.ts.map +1 -1
- package/dist/components/Box/Validators.d.ts +4 -0
- package/dist/components/Box/Validators.d.ts.map +1 -1
- package/dist/components/Box/index.d.ts +1 -1
- package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts +1 -0
- package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.vue.d.ts +3 -2
- package/dist/components/Button/Button.vue.d.ts +25 -25
- package/dist/components/Button/Button.vue.d.ts.map +1 -1
- package/dist/components/Card/Card.vue.d.ts +6 -6
- package/dist/components/Checkbox/Checkbox.vue.d.ts +62 -27
- package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +82 -47
- package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -1
- package/dist/components/Chip/Chip.vue.d.ts +40 -40
- package/dist/components/Chip/Chip.vue.d.ts.map +1 -1
- package/dist/components/Codeblock/Codeblock.vue.d.ts +2 -2
- package/dist/components/Collapsible/Collapsible.vue.d.ts +39 -39
- package/dist/components/Collapsible/Collapsible.vue.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.vue.d.ts +66 -66
- package/dist/components/Combobox/Combobox.vue.d.ts.map +1 -1
- package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts +29 -29
- package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts.map +1 -1
- package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts +35 -35
- package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts.map +1 -1
- package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts +216 -216
- package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts.map +1 -1
- package/dist/components/DescriptionList/DescriptionList.vue.d.ts +4 -4
- package/dist/components/Dropdown/Dropdown.vue.d.ts +82 -82
- package/dist/components/Dropdown/Dropdown.vue.d.ts.map +1 -1
- package/dist/components/Emoji/Emoji.vue.d.ts +17 -17
- package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts +73 -38
- package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts.map +1 -1
- package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts +73 -38
- package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts.map +1 -1
- package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts +24 -24
- package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts.map +1 -1
- package/dist/components/EmptyState/EmptyState.vue.d.ts.map +1 -1
- package/dist/components/FilterPill/FilterPill.vue.d.ts +380 -310
- package/dist/components/FilterPill/FilterPill.vue.d.ts.map +1 -1
- package/dist/components/Hovercard/Hovercard.vue.d.ts +156 -156
- package/dist/components/Hovercard/Hovercard.vue.d.ts.map +1 -1
- package/dist/components/Icon/Icon.vue.d.ts +7 -7
- package/dist/components/ImageViewer/ImageViewer.vue.d.ts +60 -60
- package/dist/components/ImageViewer/ImageViewer.vue.d.ts.map +1 -1
- package/dist/components/Input/Input.vue.d.ts +73 -38
- package/dist/components/Input/Input.vue.d.ts.map +1 -1
- package/dist/components/InputGroup/InputGroup.vue.d.ts +82 -47
- package/dist/components/InputGroup/InputGroup.vue.d.ts.map +1 -1
- package/dist/components/ItemLayout/ItemLayout.vue.d.ts +20 -20
- package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts +116 -81
- package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts.map +1 -1
- package/dist/components/Link/Link.vue.d.ts +1 -0
- package/dist/components/Link/LinkConstants.d.ts +3 -0
- package/dist/components/Link/LinkConstants.d.ts.map +1 -1
- package/dist/components/ListItem/ListItem.vue.d.ts +27 -27
- package/dist/components/ListItem/ListItem.vue.d.ts.map +1 -1
- package/dist/components/ListItemGroup/ListItemGroup.vue.d.ts +4 -4
- package/dist/components/Loader/Loader.vue.d.ts +7 -7
- package/dist/components/Modal/Modal.vue.d.ts +115 -86
- package/dist/components/Modal/Modal.vue.d.ts.map +1 -1
- package/dist/components/Modal/ModalConstants.d.ts +0 -5
- package/dist/components/Modal/index.d.ts +1 -1
- package/dist/components/Notice/Notice.vue.d.ts +142 -107
- package/dist/components/Notice/Notice.vue.d.ts.map +1 -1
- package/dist/components/Notice/NoticeAction.vue.d.ts +62 -62
- package/dist/components/Notice/NoticeAction.vue.d.ts.map +1 -1
- package/dist/components/Notice/NoticeContent.vue.d.ts +40 -5
- package/dist/components/Notice/NoticeContent.vue.d.ts.map +1 -1
- package/dist/components/Notice/NoticeIcon.vue.d.ts +32 -32
- package/dist/components/Notice/NoticeIcon.vue.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.vue.d.ts +40 -40
- package/dist/components/Pagination/Pagination.vue.d.ts.map +1 -1
- package/dist/components/Popover/Popover.vue.d.ts +78 -78
- package/dist/components/Popover/Popover.vue.d.ts.map +1 -1
- package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts +34 -34
- package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts.map +1 -1
- package/dist/components/ProgressCircle/ProgressCircle.vue.d.ts +7 -7
- package/dist/components/Prose/Prose.vue.d.ts.map +1 -1
- package/dist/components/Radio/Radio.vue.d.ts +62 -27
- package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.vue.d.ts +82 -47
- package/dist/components/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
- package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts +6 -5
- package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts.map +1 -1
- package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts +10 -10
- package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts.map +1 -1
- package/dist/components/RichTextEditor/Extensions/Emoji/EmojiComponent.vue.d.ts +17 -17
- package/dist/components/RichTextEditor/Extensions/Emoji/EmojiSuggestion.vue.d.ts +17 -17
- package/dist/components/RichTextEditor/Extensions/Mentions/MentionComponent.vue.d.ts +1 -0
- package/dist/components/RichTextEditor/Extensions/Mentions/MentionSuggestion.vue.d.ts +46 -11
- package/dist/components/RichTextEditor/Extensions/SlashCommand/SlashCommandSuggestion.vue.d.ts +36 -1
- package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts +27 -27
- package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts.map +1 -1
- package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts +189 -154
- package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts.map +1 -1
- package/dist/components/RootLayout/RootLayout.vue.d.ts +10 -10
- package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
- package/dist/components/SelectMenu/SelectMenu.vue.d.ts +69 -34
- package/dist/components/SelectMenu/SelectMenu.vue.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.vue.d.ts +8 -8
- package/dist/components/Skeleton/SkeletonListItem.vue.d.ts +4 -4
- package/dist/components/Skeleton/SkeletonParagraph.vue.d.ts +2 -2
- package/dist/components/Skeleton/SkeletonShape.vue.d.ts +2 -2
- package/dist/components/SplitButton/SplitButton.vue.d.ts +157 -157
- package/dist/components/SplitButton/SplitButton.vue.d.ts.map +1 -1
- package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts +30 -30
- package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts.map +1 -1
- package/dist/components/SplitButton/SplitButtonStart.vue.d.ts +31 -31
- package/dist/components/Tab/Tab.vue.d.ts +33 -33
- package/dist/components/Tab/TabGroup.vue.d.ts +6 -6
- package/dist/components/Tab/TabPanel.vue.d.ts +2 -2
- package/dist/components/Text/Text.vue.d.ts +36 -1
- package/dist/components/Text/Text.vue.d.ts.map +1 -1
- package/dist/components/Text/TextConstants.d.ts +53 -0
- package/dist/components/Text/TextConstants.d.ts.map +1 -1
- package/dist/components/Text/index.d.ts +1 -1
- package/dist/components/TextList/TextList.vue.d.ts +87 -0
- package/dist/components/TextList/TextList.vue.d.ts.map +1 -0
- package/dist/components/TextList/TextListConstants.d.ts +20 -0
- package/dist/components/TextList/TextListConstants.d.ts.map +1 -0
- package/dist/components/TextList/TextListItem.vue.d.ts +60 -0
- package/dist/components/TextList/TextListItem.vue.d.ts.map +1 -0
- package/dist/components/TextList/Validators.d.ts +5 -0
- package/dist/components/TextList/Validators.d.ts.map +1 -0
- package/dist/components/TextList/index.d.ts +4 -0
- package/dist/components/TextList/index.d.ts.map +1 -0
- package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts +144 -109
- package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts.map +1 -1
- package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts +34 -34
- package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts.map +1 -1
- package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts +142 -107
- package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts.map +1 -1
- package/dist/components/Toast/Toast.vue.d.ts +580 -440
- package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
- package/dist/components/Toggle/Toggle.vue.d.ts +4 -4
- package/dist/components/Toggle/Toggle.vue.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.vue.d.ts +4 -4
- package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts +22 -22
- package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts.map +1 -1
- package/dist/dialtone-vue.cjs +1 -1
- package/dist/dialtone-vue.js +146 -142
- package/dist/index.d.ts +1 -0
- package/dist/lib/attachment-carousel/attachment-carousel.cjs +1 -1
- package/dist/lib/attachment-carousel/attachment-carousel.js +1 -1
- package/dist/lib/attachment-carousel/index.cjs +1 -1
- package/dist/lib/attachment-carousel/index.js +1 -1
- package/dist/lib/avatar/avatar.cjs +1 -1
- package/dist/lib/avatar/avatar.cjs.map +1 -1
- package/dist/lib/avatar/avatar.js +55 -54
- package/dist/lib/avatar/avatar.js.map +1 -1
- package/dist/lib/badge/badge.cjs +1 -1
- package/dist/lib/badge/badge.cjs.map +1 -1
- package/dist/lib/badge/badge.js +36 -35
- package/dist/lib/badge/badge.js.map +1 -1
- package/dist/lib/box/box-constants.cjs +1 -1
- package/dist/lib/box/box-constants.cjs.map +1 -1
- package/dist/lib/box/box-constants.js +34 -7
- package/dist/lib/box/box-constants.js.map +1 -1
- package/dist/lib/box/box.cjs +1 -1
- package/dist/lib/box/box.cjs.map +1 -1
- package/dist/lib/box/box.js +93 -34
- package/dist/lib/box/box.js.map +1 -1
- package/dist/lib/box/index.cjs +1 -1
- package/dist/lib/box/index.js +3 -3
- package/dist/lib/box/validators.cjs +1 -1
- package/dist/lib/box/validators.cjs.map +1 -1
- package/dist/lib/box/validators.js +4 -4
- package/dist/lib/box/validators.js.map +1 -1
- package/dist/lib/button/button.cjs +1 -1
- package/dist/lib/button/button.cjs.map +1 -1
- package/dist/lib/button/button.js +69 -68
- package/dist/lib/button/button.js.map +1 -1
- package/dist/lib/chip/chip.cjs +1 -1
- package/dist/lib/chip/chip.cjs.map +1 -1
- package/dist/lib/chip/chip.js +36 -35
- package/dist/lib/chip/chip.js.map +1 -1
- package/dist/lib/codeblock/codeblock.cjs +1 -1
- package/dist/lib/codeblock/codeblock.cjs.map +1 -1
- package/dist/lib/codeblock/codeblock.js +11 -10
- package/dist/lib/codeblock/codeblock.js.map +1 -1
- package/dist/lib/combobox/combobox.cjs +1 -1
- package/dist/lib/combobox/combobox.js +1 -1
- package/dist/lib/combobox/index.cjs +1 -1
- package/dist/lib/combobox/index.js +1 -1
- package/dist/lib/combobox-multi-select/combobox-multi-select.cjs +1 -1
- package/dist/lib/combobox-multi-select/combobox-multi-select.cjs.map +1 -1
- package/dist/lib/combobox-multi-select/combobox-multi-select.js +53 -53
- package/dist/lib/combobox-multi-select/combobox-multi-select.js.map +1 -1
- package/dist/lib/combobox-with-popover/combobox-with-popover.cjs +1 -1
- package/dist/lib/combobox-with-popover/combobox-with-popover.cjs.map +1 -1
- package/dist/lib/combobox-with-popover/combobox-with-popover.js +48 -47
- package/dist/lib/combobox-with-popover/combobox-with-popover.js.map +1 -1
- package/dist/lib/editor/editor.cjs +1 -1
- package/dist/lib/editor/editor.js +2 -2
- package/dist/lib/emoji/emoji.cjs +1 -1
- package/dist/lib/emoji/emoji.cjs.map +1 -1
- package/dist/lib/emoji/emoji.js +25 -24
- package/dist/lib/emoji/emoji.js.map +1 -1
- package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs +1 -1
- package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs.map +1 -1
- package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js +20 -19
- package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js.map +1 -1
- package/dist/lib/empty-state/empty-state.cjs +1 -1
- package/dist/lib/empty-state/empty-state.cjs.map +1 -1
- package/dist/lib/empty-state/empty-state.js +31 -30
- package/dist/lib/empty-state/empty-state.js.map +1 -1
- package/dist/lib/filter-pill/filter-pill.cjs +1 -1
- package/dist/lib/filter-pill/filter-pill.cjs.map +1 -1
- package/dist/lib/filter-pill/filter-pill.js +73 -72
- package/dist/lib/filter-pill/filter-pill.js.map +1 -1
- package/dist/lib/icon/icon.cjs +1 -1
- package/dist/lib/icon/icon.cjs.map +1 -1
- package/dist/lib/icon/icon.js +16 -15
- package/dist/lib/icon/icon.js.map +1 -1
- package/dist/lib/input/input.cjs +1 -1
- package/dist/lib/input/input.cjs.map +1 -1
- package/dist/lib/input/input.js +64 -63
- package/dist/lib/input/input.js.map +1 -1
- package/dist/lib/link/link-constants.cjs +1 -1
- package/dist/lib/link/link-constants.cjs.map +1 -1
- package/dist/lib/link/link-constants.js +11 -9
- package/dist/lib/link/link-constants.js.map +1 -1
- package/dist/lib/link/link.cjs +1 -1
- package/dist/lib/link/link.cjs.map +1 -1
- package/dist/lib/link/link.js +17 -14
- package/dist/lib/link/link.js.map +1 -1
- package/dist/lib/loader/loader.cjs +3 -3
- package/dist/lib/loader/loader.cjs.map +1 -1
- package/dist/lib/loader/loader.js +21 -20
- package/dist/lib/loader/loader.js.map +1 -1
- package/dist/lib/message-input/index.cjs +1 -1
- package/dist/lib/message-input/index.js +1 -1
- package/dist/lib/message-input/message-input.cjs +1 -1
- package/dist/lib/message-input/message-input.js +1 -1
- package/dist/lib/modal/index.cjs +1 -1
- package/dist/lib/modal/index.js +3 -3
- package/dist/lib/modal/modal-constants.cjs +1 -1
- package/dist/lib/modal/modal-constants.cjs.map +1 -1
- package/dist/lib/modal/modal-constants.js +1 -4
- package/dist/lib/modal/modal-constants.js.map +1 -1
- package/dist/lib/modal/modal.cjs +1 -1
- package/dist/lib/modal/modal.cjs.map +1 -1
- package/dist/lib/modal/modal.js +40 -42
- package/dist/lib/modal/modal.js.map +1 -1
- package/dist/lib/popover/popover.cjs +1 -1
- package/dist/lib/popover/popover.cjs.map +1 -1
- package/dist/lib/popover/popover.js +1 -1
- package/dist/lib/popover/popover.js.map +1 -1
- package/dist/lib/progress-circle/progress-circle.cjs +1 -1
- package/dist/lib/progress-circle/progress-circle.cjs.map +1 -1
- package/dist/lib/progress-circle/progress-circle.js +33 -32
- package/dist/lib/progress-circle/progress-circle.js.map +1 -1
- package/dist/lib/prose/prose.cjs +1 -1
- package/dist/lib/prose/prose.cjs.map +1 -1
- package/dist/lib/prose/prose.js +23 -22
- package/dist/lib/prose/prose.js.map +1 -1
- package/dist/lib/rich-text-editor/index.cjs +1 -1
- package/dist/lib/rich-text-editor/index.js +1 -1
- package/dist/lib/rich-text-editor/markdown-renderer.js +1 -1
- package/dist/lib/rich-text-editor/rich-text-editor.cjs +1 -1
- package/dist/lib/rich-text-editor/rich-text-editor.js +1 -1
- package/dist/lib/segmented-control/segmented-control.cjs +1 -1
- package/dist/lib/segmented-control/segmented-control.cjs.map +1 -1
- package/dist/lib/segmented-control/segmented-control.js +42 -41
- package/dist/lib/segmented-control/segmented-control.js.map +1 -1
- package/dist/lib/select-menu/select-menu.cjs +1 -1
- package/dist/lib/select-menu/select-menu.cjs.map +1 -1
- package/dist/lib/select-menu/select-menu.js +48 -47
- package/dist/lib/select-menu/select-menu.js.map +1 -1
- package/dist/lib/split-button/split-button.cjs +1 -1
- package/dist/lib/split-button/split-button.cjs.map +1 -1
- package/dist/lib/split-button/split-button.js +45 -44
- package/dist/lib/split-button/split-button.js.map +1 -1
- package/dist/lib/tab/tab-group.cjs +1 -1
- package/dist/lib/tab/tab-group.cjs.map +1 -1
- package/dist/lib/tab/tab-group.js +34 -35
- package/dist/lib/tab/tab-group.js.map +1 -1
- package/dist/lib/text/index.cjs +1 -1
- package/dist/lib/text/index.js +3 -3
- package/dist/lib/text/text-constants.cjs +1 -1
- package/dist/lib/text/text-constants.cjs.map +1 -1
- package/dist/lib/text/text-constants.js +70 -21
- package/dist/lib/text/text-constants.js.map +1 -1
- package/dist/lib/text/text.cjs +1 -1
- package/dist/lib/text/text.cjs.map +1 -1
- package/dist/lib/text/text.js +72 -37
- package/dist/lib/text/text.js.map +1 -1
- package/dist/lib/text-list/index.cjs +1 -0
- package/dist/lib/text-list/index.js +4 -0
- package/dist/lib/text-list/text-list-constants.cjs +2 -0
- package/dist/lib/text-list/text-list-constants.cjs.map +1 -0
- package/dist/lib/text-list/text-list-constants.js +31 -0
- package/dist/lib/text-list/text-list-constants.js.map +1 -0
- package/dist/lib/text-list/text-list-item.cjs +1 -0
- package/dist/lib/text-list/text-list-item.js +2 -0
- package/dist/lib/text-list/text-list.cjs +1 -0
- package/dist/lib/text-list/text-list.js +2 -0
- package/dist/lib/text-list/validators.cjs +2 -0
- package/dist/lib/text-list/validators.cjs.map +1 -0
- package/dist/lib/text-list/validators.js +10 -0
- package/dist/lib/text-list/validators.js.map +1 -0
- package/dist/lib/toast/index.cjs +1 -1
- package/dist/lib/toast/index.js +1 -1
- package/dist/lib/toast/toast.cjs +1 -1
- package/dist/lib/toast/toast.js +1 -1
- package/dist/lib/toggle/toggle.cjs +1 -1
- package/dist/lib/toggle/toggle.cjs.map +1 -1
- package/dist/lib/toggle/toggle.js +23 -22
- package/dist/lib/toggle/toggle.js.map +1 -1
- package/dist/{message_input-CbQCd07F.js → message_input-C6BcWqr8.js} +2 -2
- package/dist/{message_input-CbQCd07F.js.map → message_input-C6BcWqr8.js.map} +1 -1
- package/dist/{message_input-dBQwgyjI.cjs → message_input-ftx8f8wC.cjs} +2 -2
- package/dist/{message_input-dBQwgyjI.cjs.map → message_input-ftx8f8wC.cjs.map} +1 -1
- package/dist/node_modules/@tiptap/vue-3.cjs.map +1 -1
- package/dist/node_modules/@tiptap/vue-3.js +1 -1
- package/dist/node_modules/@tiptap/vue-3.js.map +1 -1
- package/dist/recipes/buttons/callbar_button/callbar_button.vue.d.ts +33 -33
- package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts +149 -149
- package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts.map +1 -1
- package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +147 -147
- package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts.map +1 -1
- package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts +173 -173
- package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts.map +1 -1
- package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts +40 -40
- package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +132 -132
- package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +97 -97
- package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/editor/EditorToolbarButton.vue.d.ts +25 -25
- package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts +107 -107
- package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts +103 -103
- package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/editor/editor.vue.d.ts +672 -637
- package/dist/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +70 -70
- package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts +66 -66
- package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +55 -55
- package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts +55 -55
- package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts +784 -609
- package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts +145 -110
- package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts +326 -256
- package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts.map +1 -1
- package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts +185 -150
- package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
- package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +30 -30
- package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts.map +1 -1
- package/dist/recipes/item_layout/contact_info/contact_info.vue.d.ts +30 -30
- package/dist/recipes/leftbar/callbox/callbox.vue.d.ts +28 -28
- package/dist/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +72 -72
- package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts +215 -215
- package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/general_row/general_row.vue.d.ts +176 -176
- package/dist/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts +80 -80
- package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/group_row/group_row.vue.d.ts +181 -181
- package/dist/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +10 -10
- package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/Combobox-By01ETlj.js.map +0 -1
- package/dist/Combobox-D4hc1-41.cjs +0 -3
- package/dist/Combobox-D4hc1-41.cjs.map +0 -1
- package/dist/Toast-CHbVmbBg.js.map +0 -1
- package/dist/Toast-DX-REYXG.cjs +0 -2
- package/dist/Toast-DX-REYXG.cjs.map +0 -1
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { COMPONENT_SIZES as e } from "../../common/constants/sizes.js";
|
|
2
2
|
import { HTML_ELEMENT_TYPE as t, VALIDATION_MESSAGE_TYPES as n } from "../../common/constants/index.js";
|
|
3
|
-
import {
|
|
4
|
-
import { extractNonListeners as
|
|
5
|
-
import { t as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import { POPOVER_APPEND_TO_VALUES as
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import { CHIP_SIZES as
|
|
12
|
-
import { Fragment as
|
|
3
|
+
import { ordinalSizeValidator as r, validationMessageValidator as i } from "../../common/validators/index.js";
|
|
4
|
+
import { extractNonListeners as a, extractVueListeners as o, getUniqueString as s, getValidationState as c, hasSlotContent as l, returnFirstEl as u } from "../../common/utils/index.js";
|
|
5
|
+
import { t as d } from "../../_plugin-vue_export-helper-BTgDAbhb.js";
|
|
6
|
+
import f from "../validation-messages/validation-messages.js";
|
|
7
|
+
import p from "../chip/chip.js";
|
|
8
|
+
import { POPOVER_APPEND_TO_VALUES as m } from "../popover/popover-constants.js";
|
|
9
|
+
import h from "../input/input.js";
|
|
10
|
+
import g from "../combobox-with-popover/combobox-with-popover.js";
|
|
11
|
+
import { CHIP_SIZES as _, CHIP_TOP_POSITION as v } from "./combobox-multi-select-constants.js";
|
|
12
|
+
import { Fragment as y, createBlock as b, createElementBlock as x, createElementVNode as S, createSlots as C, createTextVNode as w, createVNode as T, mergeProps as E, normalizeClass as D, openBlock as O, renderList as k, renderSlot as A, resolveComponent as j, toDisplayString as M, toHandlers as N, withCtx as P, withKeys as F, withModifiers as I } from "vue";
|
|
13
13
|
//#region components/ComboboxMultiSelect/ComboboxMultiSelect.vue
|
|
14
|
-
var
|
|
14
|
+
var L = {
|
|
15
15
|
name: "DtComboboxMultiSelect",
|
|
16
16
|
components: {
|
|
17
|
-
DtComboboxWithPopover:
|
|
18
|
-
DtInput:
|
|
19
|
-
DtChip:
|
|
20
|
-
DtValidationMessages:
|
|
17
|
+
DtComboboxWithPopover: g,
|
|
18
|
+
DtInput: h,
|
|
19
|
+
DtChip: p,
|
|
20
|
+
DtValidationMessages: f
|
|
21
21
|
},
|
|
22
22
|
inheritAttrs: !1,
|
|
23
23
|
props: {
|
|
@@ -40,7 +40,7 @@ var I = {
|
|
|
40
40
|
inputMessages: {
|
|
41
41
|
type: Array,
|
|
42
42
|
default: () => [],
|
|
43
|
-
validator: (e) =>
|
|
43
|
+
validator: (e) => i(e)
|
|
44
44
|
},
|
|
45
45
|
showInputMessages: {
|
|
46
46
|
type: Boolean,
|
|
@@ -85,12 +85,12 @@ var I = {
|
|
|
85
85
|
size: {
|
|
86
86
|
type: [String, Number],
|
|
87
87
|
default: 300,
|
|
88
|
-
validator: (
|
|
88
|
+
validator: r(_)
|
|
89
89
|
},
|
|
90
90
|
appendTo: {
|
|
91
91
|
type: [t, String],
|
|
92
92
|
default: "body",
|
|
93
|
-
validator: (e) =>
|
|
93
|
+
validator: (e) => m.includes(e) || e instanceof HTMLElement
|
|
94
94
|
},
|
|
95
95
|
transition: {
|
|
96
96
|
type: String,
|
|
@@ -183,11 +183,11 @@ var I = {
|
|
|
183
183
|
showValidationMessages: !1,
|
|
184
184
|
resizeWindowObserver: null,
|
|
185
185
|
initialInputHeight: null,
|
|
186
|
-
CHIP_SIZES:
|
|
187
|
-
hasSlotContent:
|
|
186
|
+
CHIP_SIZES: _,
|
|
187
|
+
hasSlotContent: l,
|
|
188
188
|
inputFocused: !1,
|
|
189
189
|
hideInputText: !1,
|
|
190
|
-
messagesId:
|
|
190
|
+
messagesId: s()
|
|
191
191
|
};
|
|
192
192
|
},
|
|
193
193
|
computed: {
|
|
@@ -201,7 +201,7 @@ var I = {
|
|
|
201
201
|
},
|
|
202
202
|
inputListeners() {
|
|
203
203
|
return {
|
|
204
|
-
...
|
|
204
|
+
...o(this.$attrs),
|
|
205
205
|
onInput: (e) => {
|
|
206
206
|
this.$emit("update:modelValue", e), this.hasSuggestionList && this.showComboboxList();
|
|
207
207
|
},
|
|
@@ -217,7 +217,7 @@ var I = {
|
|
|
217
217
|
};
|
|
218
218
|
},
|
|
219
219
|
ariaInvalid() {
|
|
220
|
-
return
|
|
220
|
+
return c(this.maxSelectedMessage) === n.CRITICAL ? "true" : void 0;
|
|
221
221
|
},
|
|
222
222
|
ariaDescribedBy() {
|
|
223
223
|
return this.showValidationMessages && this.maxSelectedMessage.length > 0 ? this.messagesId : void 0;
|
|
@@ -257,7 +257,7 @@ var I = {
|
|
|
257
257
|
this.resizeWindowObserver?.unobserve(document.body);
|
|
258
258
|
},
|
|
259
259
|
methods: {
|
|
260
|
-
extractNonListeners:
|
|
260
|
+
extractNonListeners: a,
|
|
261
261
|
comboboxHighlight(e) {
|
|
262
262
|
this.$emit("combobox-highlight", e);
|
|
263
263
|
},
|
|
@@ -279,11 +279,11 @@ var I = {
|
|
|
279
279
|
getChips() {
|
|
280
280
|
if (!this.selectedItems.length || !this.$refs.chips) return null;
|
|
281
281
|
let e = /* @__PURE__ */ new Set();
|
|
282
|
-
return this.selectedItems.map((t) => this.$refs.chips.find((n, r) => e.has(r) ? !1 :
|
|
282
|
+
return this.selectedItems.map((t) => this.$refs.chips.find((n, r) => e.has(r) ? !1 : u(n.$el)?.querySelector(".d-chip__label")?.textContent?.trim() === t ? (e.add(r), !0) : !1)).filter(Boolean).map((e) => u(e.$el));
|
|
283
283
|
},
|
|
284
284
|
getChipButtons() {
|
|
285
285
|
let e = this.getChips();
|
|
286
|
-
return e && e.map((e) =>
|
|
286
|
+
return e && e.map((e) => u(e).querySelector("button"));
|
|
287
287
|
},
|
|
288
288
|
getLastChipButton() {
|
|
289
289
|
let e = this.getChipButtons();
|
|
@@ -325,7 +325,7 @@ var I = {
|
|
|
325
325
|
let e = this.getInput();
|
|
326
326
|
if (!e) return;
|
|
327
327
|
let t = this.$refs.inputSlotWrapper, n = e.getBoundingClientRect().top - t.getBoundingClientRect().top, r = this.$refs.chipsWrapper;
|
|
328
|
-
r.style.top = n -
|
|
328
|
+
r.style.top = n - v[String(this.size)] + "px";
|
|
329
329
|
},
|
|
330
330
|
setInputPadding() {
|
|
331
331
|
let e = this.getLastChip(), t = this.getInput();
|
|
@@ -371,13 +371,13 @@ var I = {
|
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
373
|
}
|
|
374
|
-
},
|
|
374
|
+
}, R = {
|
|
375
375
|
key: 1,
|
|
376
376
|
class: "d-recipe-combobox-multi-select__list--loading"
|
|
377
377
|
};
|
|
378
|
-
function
|
|
379
|
-
let o =
|
|
380
|
-
return
|
|
378
|
+
function z(e, t, n, r, i, a) {
|
|
379
|
+
let o = j("dt-chip"), s = j("dt-input"), c = j("dt-validation-messages"), l = j("dt-combobox-with-popover");
|
|
380
|
+
return O(), b(l, E({
|
|
381
381
|
ref: "comboboxWithPopover",
|
|
382
382
|
label: n.label,
|
|
383
383
|
"show-list": n.showList,
|
|
@@ -392,17 +392,17 @@ function R(e, t, n, r, i, a) {
|
|
|
392
392
|
}, a.extractNonListeners(e.$attrs), {
|
|
393
393
|
onSelect: a.onComboboxSelect,
|
|
394
394
|
onHighlight: a.comboboxHighlight
|
|
395
|
-
}),
|
|
396
|
-
input:
|
|
395
|
+
}), C({
|
|
396
|
+
input: P(({ onInput: e }) => [S("span", {
|
|
397
397
|
ref: "inputSlotWrapper",
|
|
398
398
|
class: "d-recipe-combobox-multi-select__input-wrapper",
|
|
399
399
|
onFocusin: t[1] || (t[1] = (...e) => a.handleInputFocusIn && a.handleInputFocusIn(...e)),
|
|
400
400
|
onFocusout: t[2] || (t[2] = (...e) => a.handleInputFocusOut && a.handleInputFocusOut(...e))
|
|
401
401
|
}, [
|
|
402
|
-
|
|
402
|
+
S("span", {
|
|
403
403
|
ref: "chipsWrapper",
|
|
404
|
-
class:
|
|
405
|
-
}, [(
|
|
404
|
+
class: D(["d-recipe-combobox-multi-select__chip-wrapper", a.chipWrapperClass])
|
|
405
|
+
}, [(O(!0), x(y, null, k(n.selectedItems, (e, t) => (O(), b(o, E({
|
|
406
406
|
ref_for: !0,
|
|
407
407
|
ref: "chips",
|
|
408
408
|
key: `${t}-${e}`,
|
|
@@ -412,11 +412,11 @@ function R(e, t, n, r, i, a) {
|
|
|
412
412
|
style: { maxWidth: n.chipMaxWidth },
|
|
413
413
|
size: i.CHIP_SIZES[String(n.size)],
|
|
414
414
|
disabled: n.disabled
|
|
415
|
-
},
|
|
416
|
-
onKeydown:
|
|
415
|
+
}, N(a.chipListeners), {
|
|
416
|
+
onKeydown: F((t) => a.onChipRemove(e), ["backspace"]),
|
|
417
417
|
onClose: (t) => a.onChipRemove(e)
|
|
418
418
|
}), {
|
|
419
|
-
default:
|
|
419
|
+
default: P(() => [w(M(e), 1)]),
|
|
420
420
|
_: 2
|
|
421
421
|
}, 1040, [
|
|
422
422
|
"class",
|
|
@@ -426,7 +426,7 @@ function R(e, t, n, r, i, a) {
|
|
|
426
426
|
"onKeydown",
|
|
427
427
|
"onClose"
|
|
428
428
|
]))), 128))], 2),
|
|
429
|
-
|
|
429
|
+
T(s, E({
|
|
430
430
|
ref: "input",
|
|
431
431
|
modelValue: i.value,
|
|
432
432
|
"onUpdate:modelValue": t[0] || (t[0] = (e) => i.value = e),
|
|
@@ -459,7 +459,7 @@ function R(e, t, n, r, i, a) {
|
|
|
459
459
|
"size",
|
|
460
460
|
"onInput"
|
|
461
461
|
]),
|
|
462
|
-
|
|
462
|
+
T(c, {
|
|
463
463
|
id: i.messagesId,
|
|
464
464
|
"validation-messages": n.maxSelectedMessage,
|
|
465
465
|
"show-messages": i.showValidationMessages
|
|
@@ -469,25 +469,25 @@ function R(e, t, n, r, i, a) {
|
|
|
469
469
|
"show-messages"
|
|
470
470
|
])
|
|
471
471
|
], 544)]),
|
|
472
|
-
list:
|
|
472
|
+
list: P(() => [S("div", {
|
|
473
473
|
ref: "list",
|
|
474
|
-
class:
|
|
475
|
-
onMousedown: t[3] || (t[3] =
|
|
476
|
-
}, [n.loading ? (
|
|
474
|
+
class: D(["d-recipe-combobox-multi-select__list", n.listClass]),
|
|
475
|
+
onMousedown: t[3] || (t[3] = I(() => {}, ["prevent"]))
|
|
476
|
+
}, [n.loading ? (O(), x("div", R, M(n.loadingMessage), 1)) : A(e.$slots, "list", { key: 0 })], 34)]),
|
|
477
477
|
_: 2
|
|
478
478
|
}, [i.hasSlotContent(e.$slots.header) ? {
|
|
479
479
|
name: "header",
|
|
480
|
-
fn:
|
|
480
|
+
fn: P(() => [S("div", {
|
|
481
481
|
ref: "header",
|
|
482
|
-
class:
|
|
483
|
-
}, [
|
|
482
|
+
class: D(n.headerClass)
|
|
483
|
+
}, [A(e.$slots, "header")], 2)]),
|
|
484
484
|
key: "0"
|
|
485
485
|
} : void 0, i.hasSlotContent(e.$slots.footer) ? {
|
|
486
486
|
name: "footer",
|
|
487
|
-
fn:
|
|
487
|
+
fn: P(() => [S("div", {
|
|
488
488
|
ref: "footer",
|
|
489
|
-
class:
|
|
490
|
-
}, [
|
|
489
|
+
class: D(n.footerClass)
|
|
490
|
+
}, [A(e.$slots, "footer")], 2)]),
|
|
491
491
|
key: "1"
|
|
492
492
|
} : void 0]), 1040, [
|
|
493
493
|
"label",
|
|
@@ -503,8 +503,8 @@ function R(e, t, n, r, i, a) {
|
|
|
503
503
|
"onHighlight"
|
|
504
504
|
]);
|
|
505
505
|
}
|
|
506
|
-
var
|
|
506
|
+
var B = /* @__PURE__ */ d(L, [["render", z]]);
|
|
507
507
|
//#endregion
|
|
508
|
-
export {
|
|
508
|
+
export { B as default };
|
|
509
509
|
|
|
510
510
|
//# sourceMappingURL=combobox-multi-select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox-multi-select.js","names":[],"sources":["../../../components/ComboboxMultiSelect/ComboboxMultiSelect.vue"],"sourcesContent":["<!-- eslint-disable vue/no-static-inline-styles -->\n<template>\n <dt-combobox-with-popover\n ref=\"comboboxWithPopover\"\n :label=\"label\"\n :show-list=\"showList\"\n :max-height=\"listMaxHeight\"\n :max-width=\"listMaxWidth\"\n :popover-offset=\"popoverOffset\"\n :has-suggestion-list=\"hasSuggestionList\"\n content-width=\"anchor\"\n :append-to=\"appendTo\"\n :dialog-class=\"dialogClass\"\n :transition=\"transition\"\n v-bind=\"extractNonListeners($attrs)\"\n @select=\"onComboboxSelect\"\n @highlight=\"comboboxHighlight\"\n >\n <template #input=\"{ onInput }\">\n <span\n ref=\"inputSlotWrapper\"\n class=\"d-recipe-combobox-multi-select__input-wrapper\"\n @focusin=\"handleInputFocusIn\"\n @focusout=\"handleInputFocusOut\"\n >\n <span\n ref=\"chipsWrapper\"\n :class=\"['d-recipe-combobox-multi-select__chip-wrapper', chipWrapperClass]\"\n >\n <dt-chip\n v-for=\"(item, index) in selectedItems\"\n ref=\"chips\"\n :key=\"`${index}-${item}`\"\n :interactive=\"true\"\n :label-class=\"['d-chip__label']\"\n :class=\"[\n 'd-recipe-combobox-multi-select__chip',\n { 'd-recipe-combobox-multi-select__chip--truncate': !!chipMaxWidth },\n ]\"\n :style=\"{ maxWidth: chipMaxWidth }\"\n :size=\"CHIP_SIZES[String(size)]\"\n :disabled=\"disabled\"\n v-on=\"chipListeners\"\n @keydown.backspace=\"onChipRemove(item)\"\n @close=\"onChipRemove(item)\"\n >\n {{ item }}\n </dt-chip>\n </span>\n\n <dt-input\n ref=\"input\"\n v-model=\"value\"\n class=\"d-recipe-combobox-multi-select__input\"\n :input-class=\"[\n inputClass, {\n 'd-recipe-combobox-multi-select__input--hidden': hideInputText,\n }]\"\n :input-wrapper-class=\"inputWrapperClass\"\n :disabled=\"disabled\"\n :aria-label=\"label\"\n :aria-invalid=\"ariaInvalid\"\n :aria-describedby=\"ariaDescribedBy\"\n :label=\"showLabel ? label : ''\"\n :description=\"description\"\n :placeholder=\"inputPlaceHolder\"\n :show-messages=\"showInputMessages\"\n :messages=\"inputMessages\"\n :size=\"size\"\n v-bind=\"inputListeners\"\n @input=\"onInput\"\n />\n\n <dt-validation-messages\n :id=\"messagesId\"\n :validation-messages=\"maxSelectedMessage\"\n :show-messages=\"showValidationMessages\"\n />\n </span>\n </template>\n\n <!-- @slot slot for popover header -->\n <template\n v-if=\"hasSlotContent($slots.header)\"\n #header\n >\n <div\n ref=\"header\"\n :class=\"headerClass\"\n >\n <slot name=\"header\" />\n </div>\n </template>\n\n <!-- @slot slot for popover list -->\n <template #list>\n <div\n ref=\"list\"\n :class=\"['d-recipe-combobox-multi-select__list', listClass]\"\n @mousedown.prevent\n >\n <slot\n v-if=\"!loading\"\n name=\"list\"\n />\n <div\n v-else\n class=\"d-recipe-combobox-multi-select__list--loading\"\n >\n {{ loadingMessage }}\n </div>\n </div>\n </template>\n\n <!-- @slot slot for popover footer -->\n <template\n v-if=\"hasSlotContent($slots.footer)\"\n #footer\n >\n <div\n ref=\"footer\"\n :class=\"footerClass\"\n >\n <slot name=\"footer\" />\n </div>\n </template>\n </dt-combobox-with-popover>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport DtComboboxWithPopover from '@/components/ComboboxWithPopover/ComboboxWithPopover.vue';\nimport DtInput from '@/components/Input/Input.vue';\nimport DtChip from '@/components/Chip/Chip.vue';\nimport DtValidationMessages from '@/components/ValidationMessages/ValidationMessages.vue';\nimport { validationMessageValidator } from '@/common/validators';\nimport { extractVueListeners, extractNonListeners, hasSlotContent, returnFirstEl, getUniqueString, getValidationState } from '@/common/utils';\nimport { HTML_ELEMENT_TYPE } from '@/common/constants';\nimport {\n POPOVER_APPEND_TO_VALUES,\n} from '@/components/Popover/PopoverConstants';\nimport {\n CHIP_SIZES,\n CHIP_TOP_POSITION,\n} from './ComboboxMultiSelectConstants';\nimport { COMPONENT_SIZES, VALIDATION_MESSAGE_TYPES } from '@/common/constants';\n\nexport default {\n name: 'DtComboboxMultiSelect',\n\n components: {\n DtComboboxWithPopover,\n DtInput,\n DtChip,\n DtValidationMessages,\n },\n\n inheritAttrs: false,\n\n props: {\n /**\n * String to use for the input label.\n */\n label: {\n type: String,\n required: true,\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n showLabel: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Input placeholder\n */\n placeholder: {\n type: String,\n default: 'Select one or start typing',\n },\n\n /**\n * Input validation messages\n */\n inputMessages: {\n type: Array,\n default: () => [],\n validator: inputMessages => {\n return validationMessageValidator(inputMessages);\n },\n },\n\n /**\n * Show input validation message\n */\n showInputMessages: {\n type: Boolean,\n default: true,\n },\n\n // @TODO: https://dialpad.atlassian.net/browse/DP-52324\n // type: {\n // type: String,\n // values: ['input', 'select'],\n // default: 'select',\n // },\n\n /**\n * Determines if the list is loading\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The message when the list is loading\n */\n loadingMessage: {\n type: String,\n default: 'loading...',\n },\n\n /**\n * Determines when to show the list element and also controls the aria-expanded attribute.\n * Leaving this null will have the combobox trigger on input focus by default.\n * If you set this value, the default trigger behavior will be disabled and you can\n * control it as you need.\n */\n showList: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxHeight: {\n type: String,\n default: '300px',\n },\n\n /**\n * The selected items\n */\n selectedItems: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Would be the maximum number of selections you can make. 0 is unlimited\n */\n maxSelected: {\n type: Number,\n default: 0,\n },\n\n /**\n * Max select message when the max selections is exceeded with the structure:\n * `[{\"message\": string, \"type\": VALIDATION_MESSAGE_TYPES }]`\n */\n maxSelectedMessage: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Displays the list when the combobox is focused, before the user has typed anything.\n * When this is enabled the list will not close after selection.\n */\n hasSuggestionList: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Size of the chip.\n * @values 100, 200, 300\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: (t) => Object.keys(CHIP_SIZES).includes(String(t)),\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTML_ELEMENT_TYPE, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n\n /**\n * Determines whether the combobox should collapse to a single when losing focus.\n * @type {boolean}\n */\n collapseOnFocusOut: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Amount of reserved space (in px) on the right side of the input\n * before the chips and the input caret jump to the next line.\n * default is 64\n */\n reservedRightSpace: {\n type: Number,\n default: 64,\n },\n\n /**\n * Determines the maximum width of a single chip. If the text within this chip exceeds the value\n * it will be truncated with ellipses.\n * Possible units rem|px|em\n */\n chipMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Additional class name for the input element.\n * Can accept String, Object, and Array, i.e. has the\n * same API as Vue's built-in handling of the class attribute.\n */\n inputClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * Additional class name for the input wrapper element.\n * Can accept all of String, Object, and Array, i.e. has the\n * same api as Vue's built-in handling of the class attribute.\n */\n inputWrapperClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * When true, disables the underlying input.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Additional class name for the header wrapper element.\n */\n headerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class name for the footer wrapper element.\n */\n footerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class name for the list wrapper element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the popover dialog element.\n */\n dialogClass: {\n type: [String, Object, Array],\n default: '',\n },\n },\n\n emits: [\n /**\n * Event fired to sync the modelValue prop with the parent component\n *\n * @event update:modelValue\n * @type {String}\n */\n 'update:modelValue',\n\n /**\n * Event fired when item selected\n *\n * @event select\n * @type {Number}\n */\n 'select',\n\n /**\n * Event fired when item removed\n *\n * @event remove\n * @type {String}\n */\n 'remove',\n\n /**\n * Event fired when max selected items limit is reached\n *\n * @event max-selected\n * @type {Object}\n */\n 'max-selected',\n\n /**\n * Native keydown event fired when a key is pressed in the text input.\n * For the common Escape and Enter cases, listen to `escape` / `enter` instead.\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Native keydown event fired when a key is pressed while a chip is focused.\n *\n * @event chip-keydown\n * @type {KeyboardEvent}\n */\n 'chip-keydown',\n\n /**\n * Fired when Escape is pressed in the text input.\n * Not fired when a chip is focused.\n *\n * @event escape\n * @type {KeyboardEvent}\n */\n 'escape',\n\n /**\n * Fired when Enter is pressed in the text input.\n * Not fired when a chip is focused.\n *\n * @event enter\n * @type {KeyboardEvent}\n */\n 'enter',\n\n /**\n * Event fired when combobox item is highlighted\n *\n * @event combobox-highlight\n * @type {Object}\n */\n 'combobox-highlight',\n ],\n\n data () {\n return {\n value: '',\n popoverOffset: [0, 4],\n showValidationMessages: false,\n resizeWindowObserver: null,\n initialInputHeight: null,\n CHIP_SIZES,\n hasSlotContent,\n inputFocused: false,\n hideInputText: false,\n messagesId: getUniqueString(),\n };\n },\n\n computed: {\n inputPlaceHolder () {\n return this.selectedItems?.length > 0 ? '' : this.placeholder;\n },\n\n chipListeners () {\n return {\n keydown: event => {\n if (this.disabled) return;\n this.onChipKeyDown(event);\n this.$emit('chip-keydown', event);\n },\n };\n },\n\n inputListeners () {\n return {\n ...extractVueListeners(this.$attrs),\n onInput: event => {\n this.$emit('update:modelValue', event);\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n\n onKeydown: event => {\n if (this.disabled) return;\n this.onInputKeyDown(event);\n this.$emit('keydown', event);\n // Use event.key (not event.code) so NumpadEnter normalizes to 'Enter'\n // and consumers don't have to special-case the numpad.\n const key = event.key?.toLowerCase();\n if (key === 'escape') {\n this.$emit('escape', event);\n } else if (key === 'enter') {\n this.$emit('enter', event);\n }\n },\n\n onClick: () => {\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n };\n },\n\n ariaInvalid () {\n return getValidationState(this.maxSelectedMessage) === VALIDATION_MESSAGE_TYPES.CRITICAL ? 'true' : undefined;\n },\n\n ariaDescribedBy () {\n return this.showValidationMessages && this.maxSelectedMessage.length > 0 ? this.messagesId : undefined;\n },\n\n chipWrapperClass () {\n return {\n [`d-recipe-combobox-multi-select__chip-wrapper-${COMPONENT_SIZES[String(this.size)] || this.size}--collapsed`]: !this.inputFocused && this.collapseOnFocusOut,\n };\n },\n },\n\n watch: {\n selectedItems: {\n deep: true,\n handler: async function () {\n await this.initSelectedItems();\n },\n },\n\n chipMaxWidth: {\n async handler () {\n await this.initSelectedItems();\n },\n },\n\n async label () {\n await this.$nextTick();\n // Adjust the chips position if label changed\n this.setChipsTopPosition();\n },\n\n async description () {\n await this.$nextTick();\n // Adjust the chips position if description changed\n this.setChipsTopPosition();\n },\n\n size: {\n async handler () {\n await this.$nextTick();\n const input = this.getInput();\n this.revertInputPadding(input);\n this.setInitialInputHeight();\n this.setInputPadding();\n this.setChipsTopPosition();\n },\n },\n },\n\n async mounted () {\n this.setInitialInputHeight();\n // Recalculate chip position and input padding when resizing window\n this.resizeWindowObserver = new ResizeObserver(async () => {\n this.setChipsTopPosition();\n this.setInputPadding();\n });\n this.resizeWindowObserver.observe(document.body);\n\n await this.initSelectedItems();\n },\n\n beforeUnmount () {\n this.resizeWindowObserver?.unobserve(document.body);\n },\n\n methods: {\n extractNonListeners,\n comboboxHighlight (highlightIndex) {\n this.$emit('combobox-highlight', highlightIndex);\n },\n\n async initSelectedItems () {\n await this.$nextTick();\n this.setInputPadding();\n this.setChipsTopPosition();\n this.setInputMinWidth();\n this.checkMaxSelected();\n },\n\n onChipRemove (item) {\n this.$emit('remove', item);\n this.$refs.input?.focus();\n },\n\n onComboboxSelect (i) {\n if (this.loading) return;\n this.value = '';\n this.$emit('select', i);\n },\n\n showComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.showComboboxList();\n },\n\n closeComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.closeComboboxList();\n },\n\n getChips () {\n if (!this.selectedItems.length || !this.$refs.chips) return null;\n\n // Use the order from selectedItems to not rely on DOM order which may be stale.\n // Track matched indices to handle duplicate item names correctly.\n const matched = new Set();\n const chips = this.selectedItems.map(item => {\n return this.$refs.chips.find((chip, index) => {\n if (matched.has(index)) return false;\n const chipLabel = returnFirstEl(chip.$el)?.querySelector('.d-chip__label')?.textContent?.trim();\n if (chipLabel === item) {\n matched.add(index);\n return true;\n }\n return false;\n });\n });\n return chips.filter(Boolean).map(chip => returnFirstEl(chip.$el));\n },\n\n getChipButtons () {\n const chips = this.getChips();\n return chips && chips.map(chip => returnFirstEl(chip).querySelector('button'));\n },\n\n getLastChipButton () {\n const chipButtons = this.getChipButtons();\n return chipButtons && chipButtons[chipButtons.length - 1];\n },\n\n getLastChip () {\n const chips = this.getChips();\n return chips && chips[chips.length - 1];\n },\n\n getFirstChip () {\n const chips = this.getChips();\n return chips && chips[0];\n },\n\n getInput () {\n return this.$refs.input?.$refs.input;\n },\n\n onChipKeyDown (event) {\n const key = event.code?.toLowerCase();\n if (key === 'arrowleft') {\n // Move to the previous chip\n this.navigateBetweenChips(event.target, true);\n } else if (key === 'arrowright') {\n if (event.target.id === this.getLastChipButton().id) {\n // Move to the input if it's the last chip\n this.moveFromChipToInput();\n } else {\n // Move to the next chip\n this.navigateBetweenChips(event.target, false);\n }\n }\n },\n\n onInputKeyDown (event) {\n const key = event.key?.toLowerCase();\n // If the cursor is at the start of the text,\n // press 'backspace' or 'left' focuses the last chip\n if (this.selectedItems.length > 0 && event.target.selectionStart === 0) {\n // if there is selected text, do not focus the last chip\n if (event.target.selectionEnd !== event.target.selectionStart) {\n return;\n }\n if (key === 'backspace' || key === 'arrowleft') {\n this.moveFromInputToChip();\n }\n }\n },\n\n moveFromInputToChip () {\n this.getLastChipButton().focus();\n this.$refs.input?.blur();\n this.closeComboboxList();\n },\n\n moveFromChipToInput () {\n this.getLastChipButton().blur();\n this.$refs.input?.focus();\n this.showComboboxList();\n },\n\n navigateBetweenChips (target, toLeft) {\n const from = this.getChipButtons().indexOf(target);\n const to = toLeft ? from - 1 : from + 1;\n if (to < 0 || to >= this.$refs.chips?.length) {\n return;\n }\n this.getChipButtons()[from].blur();\n this.getChipButtons()[to].focus();\n this.closeComboboxList();\n },\n\n setChipsTopPosition () {\n // To place the chips in the input box\n // The chip \"top\" position should be the same line as the input box\n const input = this.getInput();\n if (!input) return;\n const inputSlotWrapper = this.$refs.inputSlotWrapper;\n const top = input.getBoundingClientRect().top -\n inputSlotWrapper.getBoundingClientRect().top;\n const chipsWrapper = this.$refs.chipsWrapper;\n chipsWrapper.style.top = (top - CHIP_TOP_POSITION[String(this.size)]) + 'px';\n },\n\n setInputPadding () {\n const lastChip = this.getLastChip();\n const input = this.getInput();\n if (!input) return;\n this.revertInputPadding(input);\n this.popoverOffset = [0, 4];\n if (!lastChip) return;\n // Avoid adding extra padding when the input is not focused if collapseOnFocusOut is true\n // This ensures the input returns to its original state when resizing\n if (this.collapseOnFocusOut && !this.inputFocused) return;\n\n // Get the position of the last chip\n // The input cursor should be the same \"top\" as that chip and next besides it\n const left = lastChip.offsetLeft + this.getFullWidth(lastChip);\n const spaceLeft = input.getBoundingClientRect().width - left;\n const firstChip = this.getFirstChip();\n const isWrapped = firstChip && lastChip.offsetTop > firstChip.offsetTop;\n\n if (spaceLeft > this.reservedRightSpace) {\n input.style.paddingInlineStart = left + 'px';\n } else {\n input.style.paddingInlineStart = '4px';\n }\n\n const paddingTop = this.getInputPaddingTop(lastChip, spaceLeft > this.reservedRightSpace, isWrapped);\n if (paddingTop != null) input.style.paddingTop = `${paddingTop}px`;\n },\n\n getInputPaddingTop (lastChip, hasSpace, isWrapped) {\n // Chip fits beside the cursor on its row; CSS handles vertical centering.\n if (hasSpace && !isWrapped) return null;\n // Chip wrapped onto a new row with space remaining; align cursor to it.\n if (hasSpace) return lastChip.offsetTop + 2;\n // No space on the chip's row — predict next-row offsetTop so paddingTop\n // stays stable when a chip lands there.\n const chipMarginTop = parseFloat(getComputedStyle(lastChip).marginTop) || 0;\n const lastChipHeight = lastChip.getBoundingClientRect().height;\n return lastChip.offsetTop + lastChipHeight + chipMarginTop + 2;\n },\n\n revertInputPadding (input) {\n input.style.paddingInlineStart = '';\n input.style.paddingBlockStart = '';\n input.style.paddingBlockEnd = '';\n },\n\n getFullWidth (el) {\n const styles = window.getComputedStyle(el);\n return el.offsetWidth + parseInt(styles.marginLeft) + parseInt(styles.marginRight);\n },\n\n setInputMinWidth () {\n // Ensure the width of the input is \"slightly bigger\" than the width of a single chip\n const firstChip = this.getFirstChip();\n const input = this.getInput();\n if (!input) return;\n if (firstChip) {\n // Add 4px buffer for typing room\n input.style.minWidth = (this.getFullWidth(firstChip) + 4) + 'px';\n } else {\n input.style.minWidth = '';\n }\n },\n\n checkMaxSelected () {\n if (this.maxSelected === 0) return;\n if (this.selectedItems.length > this.maxSelected) {\n this.showValidationMessages = true;\n this.$emit('max-selected');\n } else {\n this.showValidationMessages = false;\n }\n },\n\n setInitialInputHeight () {\n const input = this.getInput();\n if (!input) return;\n input.style.minHeight = '';\n input.style.height = '';\n this.initialInputHeight = input.getBoundingClientRect().height;\n // xs renders correctly without a min-height floor; other sizes need it to grow when chips wrap.\n if (this.size !== 'xs') {\n input.style.minHeight = `${this.initialInputHeight}px`;\n input.style.height = 'auto';\n }\n },\n\n async handleInputFocusIn () {\n this.inputFocused = true;\n if (this.collapseOnFocusOut) {\n this.hideInputText = false;\n await this.$nextTick();\n this.setInputPadding();\n }\n },\n\n async handleInputFocusOut () {\n this.inputFocused = false;\n if (this.collapseOnFocusOut) {\n this.hideInputText = true;\n const input = this.getInput();\n if (!input) return;\n // Hide the input text when is not on first line\n if (!input.style.paddingTop) {\n return;\n }\n this.revertInputPadding(input);\n }\n },\n },\n};\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"combobox-multi-select.js","names":[],"sources":["../../../components/ComboboxMultiSelect/ComboboxMultiSelect.vue"],"sourcesContent":["<!-- eslint-disable vue/no-static-inline-styles -->\n<template>\n <dt-combobox-with-popover\n ref=\"comboboxWithPopover\"\n :label=\"label\"\n :show-list=\"showList\"\n :max-height=\"listMaxHeight\"\n :max-width=\"listMaxWidth\"\n :popover-offset=\"popoverOffset\"\n :has-suggestion-list=\"hasSuggestionList\"\n content-width=\"anchor\"\n :append-to=\"appendTo\"\n :dialog-class=\"dialogClass\"\n :transition=\"transition\"\n v-bind=\"extractNonListeners($attrs)\"\n @select=\"onComboboxSelect\"\n @highlight=\"comboboxHighlight\"\n >\n <template #input=\"{ onInput }\">\n <span\n ref=\"inputSlotWrapper\"\n class=\"d-recipe-combobox-multi-select__input-wrapper\"\n @focusin=\"handleInputFocusIn\"\n @focusout=\"handleInputFocusOut\"\n >\n <span\n ref=\"chipsWrapper\"\n :class=\"['d-recipe-combobox-multi-select__chip-wrapper', chipWrapperClass]\"\n >\n <dt-chip\n v-for=\"(item, index) in selectedItems\"\n ref=\"chips\"\n :key=\"`${index}-${item}`\"\n :interactive=\"true\"\n :label-class=\"['d-chip__label']\"\n :class=\"[\n 'd-recipe-combobox-multi-select__chip',\n { 'd-recipe-combobox-multi-select__chip--truncate': !!chipMaxWidth },\n ]\"\n :style=\"{ maxWidth: chipMaxWidth }\"\n :size=\"CHIP_SIZES[String(size)]\"\n :disabled=\"disabled\"\n v-on=\"chipListeners\"\n @keydown.backspace=\"onChipRemove(item)\"\n @close=\"onChipRemove(item)\"\n >\n {{ item }}\n </dt-chip>\n </span>\n\n <dt-input\n ref=\"input\"\n v-model=\"value\"\n class=\"d-recipe-combobox-multi-select__input\"\n :input-class=\"[\n inputClass, {\n 'd-recipe-combobox-multi-select__input--hidden': hideInputText,\n }]\"\n :input-wrapper-class=\"inputWrapperClass\"\n :disabled=\"disabled\"\n :aria-label=\"label\"\n :aria-invalid=\"ariaInvalid\"\n :aria-describedby=\"ariaDescribedBy\"\n :label=\"showLabel ? label : ''\"\n :description=\"description\"\n :placeholder=\"inputPlaceHolder\"\n :show-messages=\"showInputMessages\"\n :messages=\"inputMessages\"\n :size=\"size\"\n v-bind=\"inputListeners\"\n @input=\"onInput\"\n />\n\n <dt-validation-messages\n :id=\"messagesId\"\n :validation-messages=\"maxSelectedMessage\"\n :show-messages=\"showValidationMessages\"\n />\n </span>\n </template>\n\n <!-- @slot slot for popover header -->\n <template\n v-if=\"hasSlotContent($slots.header)\"\n #header\n >\n <div\n ref=\"header\"\n :class=\"headerClass\"\n >\n <slot name=\"header\" />\n </div>\n </template>\n\n <!-- @slot slot for popover list -->\n <template #list>\n <div\n ref=\"list\"\n :class=\"['d-recipe-combobox-multi-select__list', listClass]\"\n @mousedown.prevent\n >\n <slot\n v-if=\"!loading\"\n name=\"list\"\n />\n <div\n v-else\n class=\"d-recipe-combobox-multi-select__list--loading\"\n >\n {{ loadingMessage }}\n </div>\n </div>\n </template>\n\n <!-- @slot slot for popover footer -->\n <template\n v-if=\"hasSlotContent($slots.footer)\"\n #footer\n >\n <div\n ref=\"footer\"\n :class=\"footerClass\"\n >\n <slot name=\"footer\" />\n </div>\n </template>\n </dt-combobox-with-popover>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport DtComboboxWithPopover from '@/components/ComboboxWithPopover/ComboboxWithPopover.vue';\nimport DtInput from '@/components/Input/Input.vue';\nimport DtChip from '@/components/Chip/Chip.vue';\nimport DtValidationMessages from '@/components/ValidationMessages/ValidationMessages.vue';\nimport { validationMessageValidator, ordinalSizeValidator } from '@/common/validators';\nimport { extractVueListeners, extractNonListeners, hasSlotContent, returnFirstEl, getUniqueString, getValidationState } from '@/common/utils';\nimport { HTML_ELEMENT_TYPE } from '@/common/constants';\nimport {\n POPOVER_APPEND_TO_VALUES,\n} from '@/components/Popover/PopoverConstants';\nimport {\n CHIP_SIZES,\n CHIP_TOP_POSITION,\n} from './ComboboxMultiSelectConstants';\nimport { COMPONENT_SIZES, VALIDATION_MESSAGE_TYPES } from '@/common/constants';\n\nexport default {\n name: 'DtComboboxMultiSelect',\n\n components: {\n DtComboboxWithPopover,\n DtInput,\n DtChip,\n DtValidationMessages,\n },\n\n inheritAttrs: false,\n\n props: {\n /**\n * String to use for the input label.\n */\n label: {\n type: String,\n required: true,\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n showLabel: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Input placeholder\n */\n placeholder: {\n type: String,\n default: 'Select one or start typing',\n },\n\n /**\n * Input validation messages\n */\n inputMessages: {\n type: Array,\n default: () => [],\n validator: inputMessages => {\n return validationMessageValidator(inputMessages);\n },\n },\n\n /**\n * Show input validation message\n */\n showInputMessages: {\n type: Boolean,\n default: true,\n },\n\n // @TODO: https://dialpad.atlassian.net/browse/DP-52324\n // type: {\n // type: String,\n // values: ['input', 'select'],\n // default: 'select',\n // },\n\n /**\n * Determines if the list is loading\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The message when the list is loading\n */\n loadingMessage: {\n type: String,\n default: 'loading...',\n },\n\n /**\n * Determines when to show the list element and also controls the aria-expanded attribute.\n * Leaving this null will have the combobox trigger on input focus by default.\n * If you set this value, the default trigger behavior will be disabled and you can\n * control it as you need.\n */\n showList: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxHeight: {\n type: String,\n default: '300px',\n },\n\n /**\n * The selected items\n */\n selectedItems: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Would be the maximum number of selections you can make. 0 is unlimited\n */\n maxSelected: {\n type: Number,\n default: 0,\n },\n\n /**\n * Max select message when the max selections is exceeded with the structure:\n * `[{\"message\": string, \"type\": VALIDATION_MESSAGE_TYPES }]`\n */\n maxSelectedMessage: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Displays the list when the combobox is focused, before the user has typed anything.\n * When this is enabled the list will not close after selection.\n */\n hasSuggestionList: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Size of the chip.\n * @values 100, 200, 300\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: ordinalSizeValidator(CHIP_SIZES),\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTML_ELEMENT_TYPE, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n\n /**\n * Determines whether the combobox should collapse to a single when losing focus.\n * @type {boolean}\n */\n collapseOnFocusOut: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Amount of reserved space (in px) on the right side of the input\n * before the chips and the input caret jump to the next line.\n * default is 64\n */\n reservedRightSpace: {\n type: Number,\n default: 64,\n },\n\n /**\n * Determines the maximum width of a single chip. If the text within this chip exceeds the value\n * it will be truncated with ellipses.\n * Possible units rem|px|em\n */\n chipMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Additional class name for the input element.\n * Can accept String, Object, and Array, i.e. has the\n * same API as Vue's built-in handling of the class attribute.\n */\n inputClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * Additional class name for the input wrapper element.\n * Can accept all of String, Object, and Array, i.e. has the\n * same api as Vue's built-in handling of the class attribute.\n */\n inputWrapperClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * When true, disables the underlying input.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Additional class name for the header wrapper element.\n */\n headerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class name for the footer wrapper element.\n */\n footerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class name for the list wrapper element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the popover dialog element.\n */\n dialogClass: {\n type: [String, Object, Array],\n default: '',\n },\n },\n\n emits: [\n /**\n * Event fired to sync the modelValue prop with the parent component\n *\n * @event update:modelValue\n * @type {String}\n */\n 'update:modelValue',\n\n /**\n * Event fired when item selected\n *\n * @event select\n * @type {Number}\n */\n 'select',\n\n /**\n * Event fired when item removed\n *\n * @event remove\n * @type {String}\n */\n 'remove',\n\n /**\n * Event fired when max selected items limit is reached\n *\n * @event max-selected\n * @type {Object}\n */\n 'max-selected',\n\n /**\n * Native keydown event fired when a key is pressed in the text input.\n * For the common Escape and Enter cases, listen to `escape` / `enter` instead.\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Native keydown event fired when a key is pressed while a chip is focused.\n *\n * @event chip-keydown\n * @type {KeyboardEvent}\n */\n 'chip-keydown',\n\n /**\n * Fired when Escape is pressed in the text input.\n * Not fired when a chip is focused.\n *\n * @event escape\n * @type {KeyboardEvent}\n */\n 'escape',\n\n /**\n * Fired when Enter is pressed in the text input.\n * Not fired when a chip is focused.\n *\n * @event enter\n * @type {KeyboardEvent}\n */\n 'enter',\n\n /**\n * Event fired when combobox item is highlighted\n *\n * @event combobox-highlight\n * @type {Object}\n */\n 'combobox-highlight',\n ],\n\n data () {\n return {\n value: '',\n popoverOffset: [0, 4],\n showValidationMessages: false,\n resizeWindowObserver: null,\n initialInputHeight: null,\n CHIP_SIZES,\n hasSlotContent,\n inputFocused: false,\n hideInputText: false,\n messagesId: getUniqueString(),\n };\n },\n\n computed: {\n inputPlaceHolder () {\n return this.selectedItems?.length > 0 ? '' : this.placeholder;\n },\n\n chipListeners () {\n return {\n keydown: event => {\n if (this.disabled) return;\n this.onChipKeyDown(event);\n this.$emit('chip-keydown', event);\n },\n };\n },\n\n inputListeners () {\n return {\n ...extractVueListeners(this.$attrs),\n onInput: event => {\n this.$emit('update:modelValue', event);\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n\n onKeydown: event => {\n if (this.disabled) return;\n this.onInputKeyDown(event);\n this.$emit('keydown', event);\n // Use event.key (not event.code) so NumpadEnter normalizes to 'Enter'\n // and consumers don't have to special-case the numpad.\n const key = event.key?.toLowerCase();\n if (key === 'escape') {\n this.$emit('escape', event);\n } else if (key === 'enter') {\n this.$emit('enter', event);\n }\n },\n\n onClick: () => {\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n };\n },\n\n ariaInvalid () {\n return getValidationState(this.maxSelectedMessage) === VALIDATION_MESSAGE_TYPES.CRITICAL ? 'true' : undefined;\n },\n\n ariaDescribedBy () {\n return this.showValidationMessages && this.maxSelectedMessage.length > 0 ? this.messagesId : undefined;\n },\n\n chipWrapperClass () {\n return {\n [`d-recipe-combobox-multi-select__chip-wrapper-${COMPONENT_SIZES[String(this.size)] || this.size}--collapsed`]: !this.inputFocused && this.collapseOnFocusOut,\n };\n },\n },\n\n watch: {\n selectedItems: {\n deep: true,\n handler: async function () {\n await this.initSelectedItems();\n },\n },\n\n chipMaxWidth: {\n async handler () {\n await this.initSelectedItems();\n },\n },\n\n async label () {\n await this.$nextTick();\n // Adjust the chips position if label changed\n this.setChipsTopPosition();\n },\n\n async description () {\n await this.$nextTick();\n // Adjust the chips position if description changed\n this.setChipsTopPosition();\n },\n\n size: {\n async handler () {\n await this.$nextTick();\n const input = this.getInput();\n this.revertInputPadding(input);\n this.setInitialInputHeight();\n this.setInputPadding();\n this.setChipsTopPosition();\n },\n },\n },\n\n async mounted () {\n this.setInitialInputHeight();\n // Recalculate chip position and input padding when resizing window\n this.resizeWindowObserver = new ResizeObserver(async () => {\n this.setChipsTopPosition();\n this.setInputPadding();\n });\n this.resizeWindowObserver.observe(document.body);\n\n await this.initSelectedItems();\n },\n\n beforeUnmount () {\n this.resizeWindowObserver?.unobserve(document.body);\n },\n\n methods: {\n extractNonListeners,\n comboboxHighlight (highlightIndex) {\n this.$emit('combobox-highlight', highlightIndex);\n },\n\n async initSelectedItems () {\n await this.$nextTick();\n this.setInputPadding();\n this.setChipsTopPosition();\n this.setInputMinWidth();\n this.checkMaxSelected();\n },\n\n onChipRemove (item) {\n this.$emit('remove', item);\n this.$refs.input?.focus();\n },\n\n onComboboxSelect (i) {\n if (this.loading) return;\n this.value = '';\n this.$emit('select', i);\n },\n\n showComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.showComboboxList();\n },\n\n closeComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.closeComboboxList();\n },\n\n getChips () {\n if (!this.selectedItems.length || !this.$refs.chips) return null;\n\n // Use the order from selectedItems to not rely on DOM order which may be stale.\n // Track matched indices to handle duplicate item names correctly.\n const matched = new Set();\n const chips = this.selectedItems.map(item => {\n return this.$refs.chips.find((chip, index) => {\n if (matched.has(index)) return false;\n const chipLabel = returnFirstEl(chip.$el)?.querySelector('.d-chip__label')?.textContent?.trim();\n if (chipLabel === item) {\n matched.add(index);\n return true;\n }\n return false;\n });\n });\n return chips.filter(Boolean).map(chip => returnFirstEl(chip.$el));\n },\n\n getChipButtons () {\n const chips = this.getChips();\n return chips && chips.map(chip => returnFirstEl(chip).querySelector('button'));\n },\n\n getLastChipButton () {\n const chipButtons = this.getChipButtons();\n return chipButtons && chipButtons[chipButtons.length - 1];\n },\n\n getLastChip () {\n const chips = this.getChips();\n return chips && chips[chips.length - 1];\n },\n\n getFirstChip () {\n const chips = this.getChips();\n return chips && chips[0];\n },\n\n getInput () {\n return this.$refs.input?.$refs.input;\n },\n\n onChipKeyDown (event) {\n const key = event.code?.toLowerCase();\n if (key === 'arrowleft') {\n // Move to the previous chip\n this.navigateBetweenChips(event.target, true);\n } else if (key === 'arrowright') {\n if (event.target.id === this.getLastChipButton().id) {\n // Move to the input if it's the last chip\n this.moveFromChipToInput();\n } else {\n // Move to the next chip\n this.navigateBetweenChips(event.target, false);\n }\n }\n },\n\n onInputKeyDown (event) {\n const key = event.key?.toLowerCase();\n // If the cursor is at the start of the text,\n // press 'backspace' or 'left' focuses the last chip\n if (this.selectedItems.length > 0 && event.target.selectionStart === 0) {\n // if there is selected text, do not focus the last chip\n if (event.target.selectionEnd !== event.target.selectionStart) {\n return;\n }\n if (key === 'backspace' || key === 'arrowleft') {\n this.moveFromInputToChip();\n }\n }\n },\n\n moveFromInputToChip () {\n this.getLastChipButton().focus();\n this.$refs.input?.blur();\n this.closeComboboxList();\n },\n\n moveFromChipToInput () {\n this.getLastChipButton().blur();\n this.$refs.input?.focus();\n this.showComboboxList();\n },\n\n navigateBetweenChips (target, toLeft) {\n const from = this.getChipButtons().indexOf(target);\n const to = toLeft ? from - 1 : from + 1;\n if (to < 0 || to >= this.$refs.chips?.length) {\n return;\n }\n this.getChipButtons()[from].blur();\n this.getChipButtons()[to].focus();\n this.closeComboboxList();\n },\n\n setChipsTopPosition () {\n // To place the chips in the input box\n // The chip \"top\" position should be the same line as the input box\n const input = this.getInput();\n if (!input) return;\n const inputSlotWrapper = this.$refs.inputSlotWrapper;\n const top = input.getBoundingClientRect().top -\n inputSlotWrapper.getBoundingClientRect().top;\n const chipsWrapper = this.$refs.chipsWrapper;\n chipsWrapper.style.top = (top - CHIP_TOP_POSITION[String(this.size)]) + 'px';\n },\n\n setInputPadding () {\n const lastChip = this.getLastChip();\n const input = this.getInput();\n if (!input) return;\n this.revertInputPadding(input);\n this.popoverOffset = [0, 4];\n if (!lastChip) return;\n // Avoid adding extra padding when the input is not focused if collapseOnFocusOut is true\n // This ensures the input returns to its original state when resizing\n if (this.collapseOnFocusOut && !this.inputFocused) return;\n\n // Get the position of the last chip\n // The input cursor should be the same \"top\" as that chip and next besides it\n const left = lastChip.offsetLeft + this.getFullWidth(lastChip);\n const spaceLeft = input.getBoundingClientRect().width - left;\n const firstChip = this.getFirstChip();\n const isWrapped = firstChip && lastChip.offsetTop > firstChip.offsetTop;\n\n if (spaceLeft > this.reservedRightSpace) {\n input.style.paddingInlineStart = left + 'px';\n } else {\n input.style.paddingInlineStart = '4px';\n }\n\n const paddingTop = this.getInputPaddingTop(lastChip, spaceLeft > this.reservedRightSpace, isWrapped);\n if (paddingTop != null) input.style.paddingTop = `${paddingTop}px`;\n },\n\n getInputPaddingTop (lastChip, hasSpace, isWrapped) {\n // Chip fits beside the cursor on its row; CSS handles vertical centering.\n if (hasSpace && !isWrapped) return null;\n // Chip wrapped onto a new row with space remaining; align cursor to it.\n if (hasSpace) return lastChip.offsetTop + 2;\n // No space on the chip's row — predict next-row offsetTop so paddingTop\n // stays stable when a chip lands there.\n const chipMarginTop = parseFloat(getComputedStyle(lastChip).marginTop) || 0;\n const lastChipHeight = lastChip.getBoundingClientRect().height;\n return lastChip.offsetTop + lastChipHeight + chipMarginTop + 2;\n },\n\n revertInputPadding (input) {\n input.style.paddingInlineStart = '';\n input.style.paddingBlockStart = '';\n input.style.paddingBlockEnd = '';\n },\n\n getFullWidth (el) {\n const styles = window.getComputedStyle(el);\n return el.offsetWidth + parseInt(styles.marginLeft) + parseInt(styles.marginRight);\n },\n\n setInputMinWidth () {\n // Ensure the width of the input is \"slightly bigger\" than the width of a single chip\n const firstChip = this.getFirstChip();\n const input = this.getInput();\n if (!input) return;\n if (firstChip) {\n // Add 4px buffer for typing room\n input.style.minWidth = (this.getFullWidth(firstChip) + 4) + 'px';\n } else {\n input.style.minWidth = '';\n }\n },\n\n checkMaxSelected () {\n if (this.maxSelected === 0) return;\n if (this.selectedItems.length > this.maxSelected) {\n this.showValidationMessages = true;\n this.$emit('max-selected');\n } else {\n this.showValidationMessages = false;\n }\n },\n\n setInitialInputHeight () {\n const input = this.getInput();\n if (!input) return;\n input.style.minHeight = '';\n input.style.height = '';\n this.initialInputHeight = input.getBoundingClientRect().height;\n // xs renders correctly without a min-height floor; other sizes need it to grow when chips wrap.\n if (this.size !== 'xs') {\n input.style.minHeight = `${this.initialInputHeight}px`;\n input.style.height = 'auto';\n }\n },\n\n async handleInputFocusIn () {\n this.inputFocused = true;\n if (this.collapseOnFocusOut) {\n this.hideInputText = false;\n await this.$nextTick();\n this.setInputPadding();\n }\n },\n\n async handleInputFocusOut () {\n this.inputFocused = false;\n if (this.collapseOnFocusOut) {\n this.hideInputText = true;\n const input = this.getInput();\n if (!input) return;\n // Hide the input text when is not on first line\n if (!input.style.paddingTop) {\n return;\n }\n this.revertInputPadding(input);\n }\n },\n },\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/constants/sizes.cjs`),t=require(`../../common/constants/index.cjs`),n=require(`../../common/
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/constants/sizes.cjs`),t=require(`../../common/constants/index.cjs`),n=require(`../../common/validators/index.cjs`),r=require(`../../common/utils/index.cjs`),i=require(`../../_plugin-vue_export-helper-D8jCH6HB.cjs`),a=require(`../../mode_constants-CzYJW9ua.cjs`),o=require(`../combobox/combobox-loading-list.cjs`),s=require(`../combobox/combobox-empty-list.cjs`),c=require(`../../Combobox-CYEmi3dv.cjs`),l=require(`../combobox/combobox-constants.cjs`),u=require(`../popover/popover-constants.cjs`),d=require(`../popover/popover.cjs`),f=require(`../dropdown/dropdown-constants.cjs`);let p=require(`vue`);var m={name:`DtComboboxWithPopover`,components:{DtCombobox:c.t,DtPopover:d.default,ComboboxLoadingList:o.default,ComboboxEmptyList:s.default},props:{contentMode:a.t,label:{type:String,required:!0},showLabel:{type:Boolean,default:!0},size:{type:[String,Number],default:null,validator:t=>t===null||Object.values(l.COMBOBOX_LABEL_SIZES).includes(t)||n.ordinalSizeValidator(e.COMPONENT_SIZES)(t)},description:{type:String,default:``},showList:{type:Boolean,default:null},listId:{type:String,default(){return r.getUniqueString()}},listClass:{type:[String,Array,Object],default:``},headerClass:{type:[String,Array,Object],default:``},footerClass:{type:[String,Array,Object],default:``},dialogClass:{type:[String,Array,Object],default:``},onBeginningOfList:{type:Function,default:null},onEndOfList:{type:Function,default:null},maxHeight:{type:String,default:``},maxWidth:{type:String,default:``},padding:{type:String,default:`small`,validator:e=>Object.keys(f.DROPDOWN_PADDING_CLASSES).some(t=>t===e)},contentWidth:{type:String,default:null,validator:e=>u.POPOVER_CONTENT_WIDTHS.includes(e)},openWithArrowKeys:{type:Boolean,default:!1},popoverOffset:{type:Array,default:()=>[0,4]},popoverSticky:{type:[Boolean,String],default:!1},hasSuggestionList:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},emptyList:{type:Boolean,default:!1},emptyStateMessage:{type:String,default:``},appendTo:{type:[t.HTML_ELEMENT_TYPE,String],default:`body`,validator:e=>u.POPOVER_APPEND_TO_VALUES.includes(e)||e instanceof HTMLElement},transition:{type:String,default:`fade`}},emits:[`select`,`escape`,`highlight`,`opened`],data(){return{DROPDOWN_PADDING_CLASSES:f.DROPDOWN_PADDING_CLASSES,isListShown:!1,isInputFocused:!1,isListFocused:!1,externalAnchor:r.getUniqueString(),hasSlotContent:r.hasSlotContent}},computed:{comboboxListeners(){return{...this.$attrs,onSelect:this.onSelect,onEscape:this.onEscape,onHighlight:this.onHighlight}}},watch:{showList:{handler:function(e){e!==null&&(this.isListShown=e)},immediate:!0},isListShown(e){e?window.addEventListener(`mousedown`,this.onFocusOut):window.removeEventListener(`mousedown`,this.onFocusOut),this.onOpened(e)}},methods:{handleDisplayList(e){!this.hasSuggestionList&&e&&this.showComboboxList(),!this.hasSuggestionList&&!e&&this.closeComboboxList()},showComboboxList(){this.showList??(this.isListShown=!0)},closeComboboxList(){this.showList??(this.isListShown=!1)},onSelect(e){this.loading||(this.$emit(`select`,e),this.hasSuggestionList||this.closeComboboxList())},onEscape(){this.$emit(`escape`),this.closeComboboxList()},onHighlight(e){this.loading||this.$emit(`highlight`,e)},onOpened(e){this.$emit(`opened`,e)},onFocusIn(e){this.hasSuggestionList&&e&&this.$refs.input?.querySelector(`input`)===e.target&&this.showComboboxList()},onFocusOut(e){let t=this.$refs.popover?.tip?.popper,n=this.$refs.input;e.composedPath()?.some(e=>[t,n].includes(e))||this.closeComboboxList()},openOnArrowKeyPress(){this.showList!==null||this.isListShown||!this.openWithArrowKeys||this.showComboboxList()}}},h=[`id`],g=[`onMouseleave`,`onFocusout`];function _(e,t,n,r,i,a){let o=(0,p.resolveComponent)(`combobox-loading-list`),s=(0,p.resolveComponent)(`combobox-empty-list`),c=(0,p.resolveComponent)(`dt-popover`),l=(0,p.resolveComponent)(`dt-combobox`);return(0,p.openBlock)(),(0,p.createBlock)(l,(0,p.mergeProps)({ref:`combobox`,loading:n.loading,label:n.label,"show-label":n.showLabel,size:n.size,description:n.description,"empty-list":n.emptyList,"empty-state-message":n.emptyStateMessage,"show-list":i.isListShown,"on-beginning-of-list":n.onBeginningOfList,"on-end-of-list":n.onEndOfList,"list-rendered-outside":!0,"list-id":n.listId,"data-qa":`dt-combobox`},a.comboboxListeners),{input:(0,p.withCtx)(({inputProps:n})=>[(0,p.createElementVNode)(`div`,{id:i.externalAnchor,ref:`input`,onFocusin:t[0]||(t[0]=(...e)=>a.onFocusIn&&a.onFocusIn(...e)),onKeydown:[t[1]||(t[1]=(0,p.withKeys)(e=>a.openOnArrowKeyPress(e),[`up`])),t[2]||(t[2]=(0,p.withKeys)(e=>a.openOnArrowKeyPress(e),[`down`]))]},[(0,p.renderSlot)(e.$slots,`input`,{inputProps:n,onInput:a.handleDisplayList})],40,h)]),list:(0,p.withCtx)(({opened:r,listProps:a,clearHighlightIndex:l})=>[(0,p.createVNode)(c,{ref:`popover`,open:i.isListShown,"onUpdate:open":t[3]||(t[3]=e=>i.isListShown=e),"close-on-click":!1,"max-height":n.maxHeight,"max-width":n.maxWidth,offset:n.popoverOffset,sticky:n.popoverSticky,"content-mode":n.contentMode,placement:`bottom-start`,"initial-focus-element":`none`,padding:`none`,role:`listbox`,"external-anchor":i.externalAnchor,"content-width":n.contentWidth,"content-appear":!0,"content-tabindex":null,modal:!1,"auto-focus":!1,"append-to":n.appendTo,"dialog-class":n.dialogClass,transition:n.transition,onOpened:r},(0,p.createSlots)({content:(0,p.withCtx)(()=>[(0,p.createElementVNode)(`div`,{ref:`listWrapper`,class:(0,p.normalizeClass)([`d-recipe-combobox-with-popover__list`,i.DROPDOWN_PADDING_CLASSES[n.padding],n.listClass]),onMouseleave:l,onFocusout:l},[n.loading?((0,p.openBlock)(),(0,p.createBlock)(o,(0,p.normalizeProps)((0,p.mergeProps)({key:0},a)),null,16)):n.emptyList&&n.emptyStateMessage?((0,p.openBlock)(),(0,p.createBlock)(s,(0,p.mergeProps)({key:1},a,{message:n.emptyStateMessage}),null,16,[`message`])):(0,p.renderSlot)(e.$slots,`list`,{key:2,listProps:a})],42,g)]),_:2},[i.hasSlotContent(e.$slots.header)?{name:`headerContent`,fn:(0,p.withCtx)(()=>[(0,p.createElementVNode)(`div`,{ref:`header`,class:(0,p.normalizeClass)(n.headerClass)},[(0,p.renderSlot)(e.$slots,`header`)],2)]),key:`0`}:void 0,i.hasSlotContent(e.$slots.footer)?{name:`footerContent`,fn:(0,p.withCtx)(()=>[(0,p.createElementVNode)(`div`,{ref:`footer`,class:(0,p.normalizeClass)(n.footerClass)},[(0,p.renderSlot)(e.$slots,`footer`)],2)]),key:`1`}:void 0]),1032,[`open`,`max-height`,`max-width`,`offset`,`sticky`,`content-mode`,`external-anchor`,`content-width`,`append-to`,`dialog-class`,`transition`,`onOpened`])]),_:3},16,[`loading`,`label`,`show-label`,`size`,`description`,`empty-list`,`empty-state-message`,`show-list`,`on-beginning-of-list`,`on-end-of-list`,`list-id`])}var v=i.t(m,[[`render`,_]]);exports.default=v;
|
|
2
2
|
//# sourceMappingURL=combobox-with-popover.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox-with-popover.cjs","names":[],"sources":["../../../components/ComboboxWithPopover/ComboboxWithPopover.vue"],"sourcesContent":["<template>\n <dt-combobox\n ref=\"combobox\"\n :loading=\"loading\"\n :label=\"label\"\n :show-label=\"showLabel\"\n :size=\"size\"\n :description=\"description\"\n :empty-list=\"emptyList\"\n :empty-state-message=\"emptyStateMessage\"\n :show-list=\"isListShown\"\n :on-beginning-of-list=\"onBeginningOfList\"\n :on-end-of-list=\"onEndOfList\"\n :list-rendered-outside=\"true\"\n :list-id=\"listId\"\n data-qa=\"dt-combobox\"\n v-bind=\"comboboxListeners\"\n >\n <template\n #input=\"{ inputProps }\"\n >\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n :id=\"externalAnchor\"\n ref=\"input\"\n @focusin=\"onFocusIn\"\n @keydown.up=\"openOnArrowKeyPress($event)\"\n @keydown.down=\"openOnArrowKeyPress($event)\"\n >\n <slot\n name=\"input\"\n :input-props=\"inputProps\"\n :on-input=\"handleDisplayList\"\n />\n </div>\n </template>\n <template #list=\"{ opened, listProps, clearHighlightIndex }\">\n <dt-popover\n ref=\"popover\"\n v-model:open=\"isListShown\"\n :close-on-click=\"false\"\n :max-height=\"maxHeight\"\n :max-width=\"maxWidth\"\n :offset=\"popoverOffset\"\n :sticky=\"popoverSticky\"\n :content-mode=\"contentMode\"\n placement=\"bottom-start\"\n initial-focus-element=\"none\"\n padding=\"none\"\n role=\"listbox\"\n :external-anchor=\"externalAnchor\"\n :content-width=\"contentWidth\"\n :content-appear=\"true\"\n :content-tabindex=\"null\"\n :modal=\"false\"\n :auto-focus=\"false\"\n :append-to=\"appendTo\"\n :dialog-class=\"dialogClass\"\n :transition=\"transition\"\n @opened=\"opened\"\n >\n <template\n v-if=\"hasSlotContent($slots.header)\"\n #headerContent\n >\n <div\n ref=\"header\"\n :class=\"headerClass\"\n >\n <slot name=\"header\" />\n </div>\n </template>\n\n <template #content>\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n ref=\"listWrapper\"\n :class=\"[\n 'd-recipe-combobox-with-popover__list',\n DROPDOWN_PADDING_CLASSES[padding],\n listClass,\n ]\"\n @mouseleave=\"clearHighlightIndex\"\n @focusout=\"clearHighlightIndex\"\n >\n <combobox-loading-list\n v-if=\"loading\"\n v-bind=\"listProps\"\n />\n <combobox-empty-list\n v-else-if=\"emptyList && emptyStateMessage\"\n v-bind=\"listProps\"\n :message=\"emptyStateMessage\"\n />\n <slot\n v-else\n name=\"list\"\n :list-props=\"listProps\"\n />\n </div>\n </template>\n\n <template\n v-if=\"hasSlotContent($slots.footer)\"\n #footerContent\n >\n <div\n ref=\"footer\"\n :class=\"footerClass\"\n >\n <slot name=\"footer\" />\n </div>\n </template>\n </dt-popover>\n </template>\n </dt-combobox>\n</template>\n\n<script>\nimport ComboboxLoadingList from '@/components/Combobox/ComboboxLoadingList.vue';\nimport ComboboxEmptyList from '@/components/Combobox/ComboboxEmptyList.vue';\nimport { DtCombobox, COMBOBOX_LABEL_SIZES } from '@/components/Combobox';\nimport { DtPopover, POPOVER_APPEND_TO_VALUES, POPOVER_CONTENT_WIDTHS } from '@/components/Popover';\nimport { getUniqueString, hasSlotContent } from '@/common/utils';\nimport { COMPONENT_SIZES, HTML_ELEMENT_TYPE } from '@/common/constants';\nimport { DROPDOWN_PADDING_CLASSES } from '@/components/Dropdown';\nimport { CONTENT_MODE_PROP } from '@/common/mode_constants';\n\nexport default {\n name: 'DtComboboxWithPopover',\n\n components: {\n DtCombobox,\n DtPopover,\n ComboboxLoadingList,\n ComboboxEmptyList,\n },\n\n props: {\n /**\n * Applies a color mode to the positioned content element.\n * @values light, dark, invert\n */\n contentMode: CONTENT_MODE_PROP,\n\n /**\n * String to use for the input label.\n */\n label: {\n type: String,\n required: true,\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n showLabel: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Size of the input.\n * @values 100, 200, 300, 400, 500\n */\n size: {\n type: [String, Number],\n default: null,\n validator: (t) => t === null\n || Object.values(COMBOBOX_LABEL_SIZES).includes(t)\n || Object.keys(COMPONENT_SIZES).includes(String(t)),\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Determines when to show the list element and also controls the aria-expanded attribute.\n * Leaving this null will have the combobox trigger on input focus by default.\n * If you set this value, the default trigger behavior will be disabled and you can\n * control it as you need.\n */\n showList: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Sets an ID on the list element of the component. Used by several aria attributes\n * as well as when deriving the IDs for each item.\n */\n listId: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * Additional class for the wrapper list element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the header wrapper element.\n */\n headerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the footer wrapper element.\n */\n footerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the popover dialog element.\n */\n dialogClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * A method that will be called when the selection goes past the beginning of the list.\n */\n onBeginningOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * A method that will be called when the selection goes past the end of the list.\n */\n onEndOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n maxHeight: {\n type: String,\n default: '',\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|%|em\n */\n maxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Vertical padding size around the list element.\n */\n padding: {\n type: String,\n default: 'small',\n validator: (padding) => {\n return Object.keys(DROPDOWN_PADDING_CLASSES).some((item) => item === padding);\n },\n },\n\n /**\n * Width configuration for the popover content. When its value is 'anchor',\n * the popover content will have the same width as the anchor.\n */\n contentWidth: {\n type: String,\n default: null,\n validator: contentWidth => POPOVER_CONTENT_WIDTHS.includes(contentWidth),\n },\n\n /**\n * If the list should be shown by pressing up or down arrow key on the input element.\n * This can be set when not passing showList prop.\n */\n openWithArrowKeys: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Displaces the popover content box from its anchor element\n * by the specified number of pixels.\n */\n popoverOffset: {\n type: Array,\n default: () => [0, 4],\n },\n\n /**\n * If the popover sticks to the input.\n */\n popoverSticky: {\n type: [Boolean, String],\n default: false,\n },\n\n /**\n * Displays the list when the combobox is focused, before the user has typed anything.\n * When this is enabled the list will not close after selection.\n */\n hasSuggestionList: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Determines when to show the skeletons and also controls aria-busy attribute.\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Sets the list to an empty state, and displays the message from prop `emptyStateMessage`.\n */\n emptyList: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Message to show when the list is empty\n */\n emptyStateMessage: {\n type: String,\n default: '',\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTML_ELEMENT_TYPE, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n },\n\n emits: [\n /**\n * Event fired when item selected\n *\n * @event select\n * @type {Number}\n */\n 'select',\n\n /**\n * Event fired when 'escape' key is pressed\n *\n * @event escape\n */\n 'escape',\n\n /**\n * Event fired when an item is highlighted\n *\n * @event highlight\n * @type {Number}\n */\n 'highlight',\n\n /**\n * Emitted when items are shown or hidden\n *\n * @event opened\n * @type {Boolean | Array}\n */\n 'opened',\n ],\n\n data () {\n return {\n DROPDOWN_PADDING_CLASSES,\n isListShown: false,\n isInputFocused: false,\n isListFocused: false,\n externalAnchor: getUniqueString(),\n hasSlotContent,\n };\n },\n\n computed: {\n comboboxListeners () {\n return {\n ...this.$attrs,\n\n onSelect: this.onSelect,\n\n onEscape: this.onEscape,\n\n onHighlight: this.onHighlight,\n };\n },\n },\n\n watch: {\n showList: {\n handler: function (show) {\n if (show !== null) {\n this.isListShown = show;\n }\n },\n\n immediate: true,\n },\n\n isListShown (val) {\n if (val) {\n window.addEventListener('mousedown', this.onFocusOut);\n } else {\n window.removeEventListener('mousedown', this.onFocusOut);\n }\n this.onOpened(val);\n },\n },\n\n methods: {\n handleDisplayList (value) {\n if (!this.hasSuggestionList && value) { this.showComboboxList(); }\n if (!this.hasSuggestionList && !value) { this.closeComboboxList(); }\n },\n\n showComboboxList () {\n if (this.showList != null) { return; }\n this.isListShown = true;\n },\n\n closeComboboxList () {\n if (this.showList != null) { return; }\n this.isListShown = false;\n },\n\n onSelect (highlightIndex) {\n if (this.loading) return;\n\n this.$emit('select', highlightIndex);\n if (!this.hasSuggestionList) {\n // we don't display the list before the user has typed anything\n this.closeComboboxList();\n }\n },\n\n onEscape () {\n this.$emit('escape');\n this.closeComboboxList();\n },\n\n onHighlight (highlightIndex) {\n if (this.loading) return;\n\n this.$emit('highlight', highlightIndex);\n },\n\n onOpened (opened) {\n this.$emit('opened', opened);\n },\n\n onFocusIn (e) {\n if (this.hasSuggestionList && e && this.$refs.input?.querySelector('input') === e.target) {\n // only trigger if we show suggestion list when focused, and\n // it's the input specifically that was focused\n this.showComboboxList();\n }\n },\n\n onFocusOut (e) {\n // Check if the focus change was to another target within the combobox component\n const popoverEl = this.$refs.popover?.tip?.popper;\n const comboboxEl = this.$refs.input;\n\n if (e.composedPath()?.some(el => [popoverEl, comboboxEl].includes(el))) return;\n\n // If outside the combobox then close\n this.closeComboboxList();\n },\n\n openOnArrowKeyPress () {\n if (this.showList !== null || this.isListShown || !this.openWithArrowKeys) { return; }\n\n this.showComboboxList();\n },\n },\n};\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"combobox-with-popover.cjs","names":[],"sources":["../../../components/ComboboxWithPopover/ComboboxWithPopover.vue"],"sourcesContent":["<template>\n <dt-combobox\n ref=\"combobox\"\n :loading=\"loading\"\n :label=\"label\"\n :show-label=\"showLabel\"\n :size=\"size\"\n :description=\"description\"\n :empty-list=\"emptyList\"\n :empty-state-message=\"emptyStateMessage\"\n :show-list=\"isListShown\"\n :on-beginning-of-list=\"onBeginningOfList\"\n :on-end-of-list=\"onEndOfList\"\n :list-rendered-outside=\"true\"\n :list-id=\"listId\"\n data-qa=\"dt-combobox\"\n v-bind=\"comboboxListeners\"\n >\n <template\n #input=\"{ inputProps }\"\n >\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n :id=\"externalAnchor\"\n ref=\"input\"\n @focusin=\"onFocusIn\"\n @keydown.up=\"openOnArrowKeyPress($event)\"\n @keydown.down=\"openOnArrowKeyPress($event)\"\n >\n <slot\n name=\"input\"\n :input-props=\"inputProps\"\n :on-input=\"handleDisplayList\"\n />\n </div>\n </template>\n <template #list=\"{ opened, listProps, clearHighlightIndex }\">\n <dt-popover\n ref=\"popover\"\n v-model:open=\"isListShown\"\n :close-on-click=\"false\"\n :max-height=\"maxHeight\"\n :max-width=\"maxWidth\"\n :offset=\"popoverOffset\"\n :sticky=\"popoverSticky\"\n :content-mode=\"contentMode\"\n placement=\"bottom-start\"\n initial-focus-element=\"none\"\n padding=\"none\"\n role=\"listbox\"\n :external-anchor=\"externalAnchor\"\n :content-width=\"contentWidth\"\n :content-appear=\"true\"\n :content-tabindex=\"null\"\n :modal=\"false\"\n :auto-focus=\"false\"\n :append-to=\"appendTo\"\n :dialog-class=\"dialogClass\"\n :transition=\"transition\"\n @opened=\"opened\"\n >\n <template\n v-if=\"hasSlotContent($slots.header)\"\n #headerContent\n >\n <div\n ref=\"header\"\n :class=\"headerClass\"\n >\n <slot name=\"header\" />\n </div>\n </template>\n\n <template #content>\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n ref=\"listWrapper\"\n :class=\"[\n 'd-recipe-combobox-with-popover__list',\n DROPDOWN_PADDING_CLASSES[padding],\n listClass,\n ]\"\n @mouseleave=\"clearHighlightIndex\"\n @focusout=\"clearHighlightIndex\"\n >\n <combobox-loading-list\n v-if=\"loading\"\n v-bind=\"listProps\"\n />\n <combobox-empty-list\n v-else-if=\"emptyList && emptyStateMessage\"\n v-bind=\"listProps\"\n :message=\"emptyStateMessage\"\n />\n <slot\n v-else\n name=\"list\"\n :list-props=\"listProps\"\n />\n </div>\n </template>\n\n <template\n v-if=\"hasSlotContent($slots.footer)\"\n #footerContent\n >\n <div\n ref=\"footer\"\n :class=\"footerClass\"\n >\n <slot name=\"footer\" />\n </div>\n </template>\n </dt-popover>\n </template>\n </dt-combobox>\n</template>\n\n<script>\nimport ComboboxLoadingList from '@/components/Combobox/ComboboxLoadingList.vue';\nimport ComboboxEmptyList from '@/components/Combobox/ComboboxEmptyList.vue';\nimport { DtCombobox, COMBOBOX_LABEL_SIZES } from '@/components/Combobox';\nimport { DtPopover, POPOVER_APPEND_TO_VALUES, POPOVER_CONTENT_WIDTHS } from '@/components/Popover';\nimport { getUniqueString, hasSlotContent } from '@/common/utils';\nimport { COMPONENT_SIZES, HTML_ELEMENT_TYPE } from '@/common/constants';\nimport { ordinalSizeValidator } from '@/common/validators';\nimport { DROPDOWN_PADDING_CLASSES } from '@/components/Dropdown';\nimport { CONTENT_MODE_PROP } from '@/common/mode_constants';\n\nexport default {\n name: 'DtComboboxWithPopover',\n\n components: {\n DtCombobox,\n DtPopover,\n ComboboxLoadingList,\n ComboboxEmptyList,\n },\n\n props: {\n /**\n * Applies a color mode to the positioned content element.\n * @values light, dark, invert\n */\n contentMode: CONTENT_MODE_PROP,\n\n /**\n * String to use for the input label.\n */\n label: {\n type: String,\n required: true,\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n showLabel: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Size of the input.\n * @values 100, 200, 300, 400, 500\n */\n size: {\n type: [String, Number],\n default: null,\n validator: (t) => t === null\n || Object.values(COMBOBOX_LABEL_SIZES).includes(t)\n || ordinalSizeValidator(COMPONENT_SIZES)(t),\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Determines when to show the list element and also controls the aria-expanded attribute.\n * Leaving this null will have the combobox trigger on input focus by default.\n * If you set this value, the default trigger behavior will be disabled and you can\n * control it as you need.\n */\n showList: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Sets an ID on the list element of the component. Used by several aria attributes\n * as well as when deriving the IDs for each item.\n */\n listId: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * Additional class for the wrapper list element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the header wrapper element.\n */\n headerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the footer wrapper element.\n */\n footerClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Additional class for the popover dialog element.\n */\n dialogClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * A method that will be called when the selection goes past the beginning of the list.\n */\n onBeginningOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * A method that will be called when the selection goes past the end of the list.\n */\n onEndOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n maxHeight: {\n type: String,\n default: '',\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|%|em\n */\n maxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Vertical padding size around the list element.\n */\n padding: {\n type: String,\n default: 'small',\n validator: (padding) => {\n return Object.keys(DROPDOWN_PADDING_CLASSES).some((item) => item === padding);\n },\n },\n\n /**\n * Width configuration for the popover content. When its value is 'anchor',\n * the popover content will have the same width as the anchor.\n */\n contentWidth: {\n type: String,\n default: null,\n validator: contentWidth => POPOVER_CONTENT_WIDTHS.includes(contentWidth),\n },\n\n /**\n * If the list should be shown by pressing up or down arrow key on the input element.\n * This can be set when not passing showList prop.\n */\n openWithArrowKeys: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Displaces the popover content box from its anchor element\n * by the specified number of pixels.\n */\n popoverOffset: {\n type: Array,\n default: () => [0, 4],\n },\n\n /**\n * If the popover sticks to the input.\n */\n popoverSticky: {\n type: [Boolean, String],\n default: false,\n },\n\n /**\n * Displays the list when the combobox is focused, before the user has typed anything.\n * When this is enabled the list will not close after selection.\n */\n hasSuggestionList: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Determines when to show the skeletons and also controls aria-busy attribute.\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Sets the list to an empty state, and displays the message from prop `emptyStateMessage`.\n */\n emptyList: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Message to show when the list is empty\n */\n emptyStateMessage: {\n type: String,\n default: '',\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTML_ELEMENT_TYPE, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n },\n\n emits: [\n /**\n * Event fired when item selected\n *\n * @event select\n * @type {Number}\n */\n 'select',\n\n /**\n * Event fired when 'escape' key is pressed\n *\n * @event escape\n */\n 'escape',\n\n /**\n * Event fired when an item is highlighted\n *\n * @event highlight\n * @type {Number}\n */\n 'highlight',\n\n /**\n * Emitted when items are shown or hidden\n *\n * @event opened\n * @type {Boolean | Array}\n */\n 'opened',\n ],\n\n data () {\n return {\n DROPDOWN_PADDING_CLASSES,\n isListShown: false,\n isInputFocused: false,\n isListFocused: false,\n externalAnchor: getUniqueString(),\n hasSlotContent,\n };\n },\n\n computed: {\n comboboxListeners () {\n return {\n ...this.$attrs,\n\n onSelect: this.onSelect,\n\n onEscape: this.onEscape,\n\n onHighlight: this.onHighlight,\n };\n },\n },\n\n watch: {\n showList: {\n handler: function (show) {\n if (show !== null) {\n this.isListShown = show;\n }\n },\n\n immediate: true,\n },\n\n isListShown (val) {\n if (val) {\n window.addEventListener('mousedown', this.onFocusOut);\n } else {\n window.removeEventListener('mousedown', this.onFocusOut);\n }\n this.onOpened(val);\n },\n },\n\n methods: {\n handleDisplayList (value) {\n if (!this.hasSuggestionList && value) { this.showComboboxList(); }\n if (!this.hasSuggestionList && !value) { this.closeComboboxList(); }\n },\n\n showComboboxList () {\n if (this.showList != null) { return; }\n this.isListShown = true;\n },\n\n closeComboboxList () {\n if (this.showList != null) { return; }\n this.isListShown = false;\n },\n\n onSelect (highlightIndex) {\n if (this.loading) return;\n\n this.$emit('select', highlightIndex);\n if (!this.hasSuggestionList) {\n // we don't display the list before the user has typed anything\n this.closeComboboxList();\n }\n },\n\n onEscape () {\n this.$emit('escape');\n this.closeComboboxList();\n },\n\n onHighlight (highlightIndex) {\n if (this.loading) return;\n\n this.$emit('highlight', highlightIndex);\n },\n\n onOpened (opened) {\n this.$emit('opened', opened);\n },\n\n onFocusIn (e) {\n if (this.hasSuggestionList && e && this.$refs.input?.querySelector('input') === e.target) {\n // only trigger if we show suggestion list when focused, and\n // it's the input specifically that was focused\n this.showComboboxList();\n }\n },\n\n onFocusOut (e) {\n // Check if the focus change was to another target within the combobox component\n const popoverEl = this.$refs.popover?.tip?.popper;\n const comboboxEl = this.$refs.input;\n\n if (e.composedPath()?.some(el => [popoverEl, comboboxEl].includes(el))) return;\n\n // If outside the combobox then close\n this.closeComboboxList();\n },\n\n openOnArrowKeyPress () {\n if (this.showList !== null || this.isListShown || !this.openWithArrowKeys) { return; }\n\n this.showComboboxList();\n },\n },\n};\n</script>\n"],"mappings":"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"}
|