@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
package/dist/lib/prose/prose.js
CHANGED
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ordinalSizeValidator as e } from "../../common/validators/index.js";
|
|
2
|
+
import { PROSE_ALLOWED_ATTRIBUTES as t, PROSE_DENSITY_MODIFIERS as n, PROSE_DISALLOWED_ELEMENTS as r, PROSE_SIZE_MODIFIERS as i, _PROSE_ALLOWED_ATTRIBUTE_PREFIXES as a, _PROSE_URL_ATTRIBUTES as o, _isSafeProseUrl as s } from "./prose-constants.js";
|
|
3
|
+
import { computed as c, createElementBlock as l, normalizeClass as u, onMounted as d, onUpdated as f, openBlock as p, ref as m, renderSlot as h } from "vue";
|
|
3
4
|
//#region components/Prose/Prose.vue
|
|
4
|
-
var
|
|
5
|
+
var g = /* @__PURE__ */ Object.assign({ name: "DtProse" }, {
|
|
5
6
|
__name: "Prose",
|
|
6
7
|
props: {
|
|
7
8
|
size: {
|
|
8
9
|
type: [String, Number],
|
|
9
10
|
default: 300,
|
|
10
|
-
validator:
|
|
11
|
+
validator: e(i)
|
|
11
12
|
},
|
|
12
13
|
density: {
|
|
13
14
|
type: [String, Number],
|
|
14
15
|
default: 200,
|
|
15
|
-
validator: (e) => Object.keys(
|
|
16
|
+
validator: (e) => Object.keys(n).includes(String(e))
|
|
16
17
|
}
|
|
17
18
|
},
|
|
18
|
-
setup(
|
|
19
|
-
let g =
|
|
19
|
+
setup(e) {
|
|
20
|
+
let g = e, _ = c(() => [
|
|
20
21
|
"d-prose",
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
].filter(Boolean)), v =
|
|
22
|
+
i[String(g.size)],
|
|
23
|
+
n[String(g.density)]
|
|
24
|
+
].filter(Boolean)), v = m(null);
|
|
24
25
|
function y(e) {
|
|
25
26
|
return e.includes("-");
|
|
26
27
|
}
|
|
27
28
|
function b(e, t) {
|
|
28
|
-
return
|
|
29
|
+
return r.includes(t) ? !(t === "input" && e.getAttribute("type") === "checkbox" && e.parentElement?.tagName.toLowerCase() === "li") : !1;
|
|
29
30
|
}
|
|
30
|
-
function x(
|
|
31
|
-
let r =
|
|
32
|
-
for (let
|
|
33
|
-
if (
|
|
34
|
-
l.push(
|
|
31
|
+
function x(e, n) {
|
|
32
|
+
let r = t._global || [], i = t[n] || [], c = [...r, ...i], l = [];
|
|
33
|
+
for (let t of e.attributes) {
|
|
34
|
+
if (o.includes(t.name) && !s(t.value)) {
|
|
35
|
+
l.push(t.name);
|
|
35
36
|
continue;
|
|
36
37
|
}
|
|
37
|
-
c.includes(
|
|
38
|
+
c.includes(t.name) || a.some((e) => t.name.startsWith(e)) || l.push(t.name);
|
|
38
39
|
}
|
|
39
|
-
for (let
|
|
40
|
+
for (let t of l) e.removeAttribute(t);
|
|
40
41
|
}
|
|
41
42
|
function S() {
|
|
42
43
|
if (!v.value) return;
|
|
@@ -54,15 +55,15 @@ var h = /* @__PURE__ */ Object.assign({ name: "DtProse" }, {
|
|
|
54
55
|
y(n) ? console.error(`DtProse: Custom element <${n}> is not allowed inside prose content. Only plain HTML elements are permitted.`) : b(t, n) && console.error(`DtProse: <${n}> is not allowed inside prose content. Form elements and interactive controls should not be used in prose blocks.`), t = e.nextNode();
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
return
|
|
58
|
+
return d(S), f(S), process.env.NODE_ENV !== "production" && (d(C), f(C)), (e, t) => (p(), l("div", {
|
|
58
59
|
ref_key: "proseRef",
|
|
59
60
|
ref: v,
|
|
60
|
-
class:
|
|
61
|
+
class: u(_.value),
|
|
61
62
|
"data-qa": "dt-prose"
|
|
62
|
-
}, [
|
|
63
|
+
}, [h(e.$slots, "default")], 2));
|
|
63
64
|
}
|
|
64
65
|
});
|
|
65
66
|
//#endregion
|
|
66
|
-
export {
|
|
67
|
+
export { g as default };
|
|
67
68
|
|
|
68
69
|
//# sourceMappingURL=prose.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prose.js","names":[],"sources":["../../../components/Prose/Prose.vue"],"sourcesContent":["<!-- eslint-disable vue/no-restricted-class -->\n<template>\n <div\n ref=\"proseRef\"\n :class=\"proseClasses\"\n data-qa=\"dt-prose\"\n >\n <!-- @slot Default slot for raw HTML content -->\n <slot />\n </div>\n</template>\n\n<script setup>\ndefineOptions({ name: 'DtProse' });\n\nimport { computed, ref, onMounted, onUpdated } from 'vue';\nimport {\n PROSE_DISALLOWED_ELEMENTS,\n PROSE_ALLOWED_ATTRIBUTES,\n _PROSE_ALLOWED_ATTRIBUTE_PREFIXES,\n _PROSE_URL_ATTRIBUTES,\n PROSE_SIZE_MODIFIERS,\n PROSE_DENSITY_MODIFIERS,\n _isSafeProseUrl,\n} from './ProseConstants.js';\n\nconst props = defineProps({\n /**\n * The size of the prose typography scale.\n * @values 100, 200, 300\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: (
|
|
1
|
+
{"version":3,"file":"prose.js","names":[],"sources":["../../../components/Prose/Prose.vue"],"sourcesContent":["<!-- eslint-disable vue/no-restricted-class -->\n<template>\n <div\n ref=\"proseRef\"\n :class=\"proseClasses\"\n data-qa=\"dt-prose\"\n >\n <!-- @slot Default slot for raw HTML content -->\n <slot />\n </div>\n</template>\n\n<script setup>\ndefineOptions({ name: 'DtProse' });\n\nimport { computed, ref, onMounted, onUpdated } from 'vue';\nimport { ordinalSizeValidator } from '@/common/validators';\nimport {\n PROSE_DISALLOWED_ELEMENTS,\n PROSE_ALLOWED_ATTRIBUTES,\n _PROSE_ALLOWED_ATTRIBUTE_PREFIXES,\n _PROSE_URL_ATTRIBUTES,\n PROSE_SIZE_MODIFIERS,\n PROSE_DENSITY_MODIFIERS,\n _isSafeProseUrl,\n} from './ProseConstants.js';\n\nconst props = defineProps({\n /**\n * The size of the prose typography scale.\n * @values 100, 200, 300\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: ordinalSizeValidator(PROSE_SIZE_MODIFIERS),\n },\n\n /**\n * The density (line-height) of prose content.\n * @values 100, 200, 300\n */\n density: {\n type: [String, Number],\n default: 200,\n validator: (s) => Object.keys(PROSE_DENSITY_MODIFIERS).includes(String(s)),\n },\n});\n\nconst proseClasses = computed(() => [\n 'd-prose',\n PROSE_SIZE_MODIFIERS[String(props.size)],\n PROSE_DENSITY_MODIFIERS[String(props.density)],\n].filter(Boolean));\n\nconst proseRef = ref(null);\n\nfunction isCustomElement (tagName) {\n return tagName.includes('-');\n}\n\nfunction isDisallowedElement (node, tagName) {\n if (!PROSE_DISALLOWED_ELEMENTS.includes(tagName)) return false;\n\n // Exception: <input type=\"checkbox\"> inside <li> (task list pattern)\n return !(\n tagName === 'input' &&\n node.getAttribute('type') === 'checkbox' &&\n node.parentElement?.tagName.toLowerCase() === 'li'\n );\n}\n\nfunction stripDisallowedAttributes (node, tagName) {\n const allowedGlobal = PROSE_ALLOWED_ATTRIBUTES._global || [];\n const allowedForTag = PROSE_ALLOWED_ATTRIBUTES[tagName] || [];\n const allowed = [...allowedGlobal, ...allowedForTag];\n\n const attrsToRemove = [];\n for (const attr of node.attributes) {\n if (_PROSE_URL_ATTRIBUTES.includes(attr.name) && !_isSafeProseUrl(attr.value)) {\n attrsToRemove.push(attr.name);\n continue;\n }\n if (allowed.includes(attr.name)) continue;\n if (_PROSE_ALLOWED_ATTRIBUTE_PREFIXES.some(prefix => attr.name.startsWith(prefix))) continue;\n attrsToRemove.push(attr.name);\n }\n for (const attrName of attrsToRemove) {\n node.removeAttribute(attrName);\n }\n}\n\nfunction sanitizeContent () {\n if (!proseRef.value) return;\n\n const walker = document.createTreeWalker(\n proseRef.value,\n NodeFilter.SHOW_ELEMENT,\n );\n\n let node = walker.nextNode();\n while (node) {\n const tagName = node.tagName.toLowerCase();\n stripDisallowedAttributes(node, tagName);\n\n node = walker.nextNode();\n }\n}\n\nfunction validateContent () {\n if (!proseRef.value) return;\n\n const walker = document.createTreeWalker(\n proseRef.value,\n NodeFilter.SHOW_ELEMENT,\n );\n\n let node = walker.nextNode();\n while (node) {\n const tagName = node.tagName.toLowerCase();\n\n if (isCustomElement(tagName)) {\n console.error(\n `DtProse: Custom element <${tagName}> is not allowed inside prose content. ` +\n 'Only plain HTML elements are permitted.',\n );\n } else if (isDisallowedElement(node, tagName)) {\n console.error(\n `DtProse: <${tagName}> is not allowed inside prose content. ` +\n 'Form elements and interactive controls should not be used in prose blocks.',\n );\n }\n\n node = walker.nextNode();\n }\n}\n\nonMounted(sanitizeContent);\nonUpdated(sanitizeContent);\n\nif (process.env.NODE_ENV !== 'production') {\n onMounted(validateContent);\n onUpdated(validateContent);\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EA2BA,IAAM,IAAQ,GAsBR,IAAe,QAAe;GAClC;GACA,EAAqB,OAAO,EAAM,KAAK;GACvC,EAAwB,OAAO,EAAM,QAAQ;GAC9C,CAAC,OAAO,QAAQ,CAAC,EAEZ,IAAW,EAAI,KAAK;EAE1B,SAAS,EAAiB,GAAS;AACjC,UAAO,EAAQ,SAAS,IAAI;;EAG9B,SAAS,EAAqB,GAAM,GAAS;AAI3C,UAHK,EAA0B,SAAS,EAAQ,GAGzC,EACL,MAAY,WACZ,EAAK,aAAa,OAAO,KAAK,cAC9B,EAAK,eAAe,QAAQ,aAAa,KAAK,QANS;;EAU3D,SAAS,EAA2B,GAAM,GAAS;GACjD,IAAM,IAAgB,EAAyB,WAAW,EAAE,EACtD,IAAgB,EAAyB,MAAY,EAAE,EACvD,IAAU,CAAC,GAAG,GAAe,GAAG,EAAc,EAE9C,IAAgB,EAAE;AACxB,QAAK,IAAM,KAAQ,EAAK,YAAY;AAClC,QAAI,EAAsB,SAAS,EAAK,KAAK,IAAI,CAAC,EAAgB,EAAK,MAAM,EAAE;AAC7E,OAAc,KAAK,EAAK,KAAK;AAC7B;;AAEE,MAAQ,SAAS,EAAK,KAAK,IAC3B,EAAkC,MAAK,MAAU,EAAK,KAAK,WAAW,EAAO,CAAC,IAClF,EAAc,KAAK,EAAK,KAAK;;AAE/B,QAAK,IAAM,KAAY,EACrB,GAAK,gBAAgB,EAAS;;EAIlC,SAAS,IAAmB;AAC1B,OAAI,CAAC,EAAS,MAAO;GAErB,IAAM,IAAS,SAAS,iBACtB,EAAS,OACT,WAAW,aACZ,EAEG,IAAO,EAAO,UAAU;AAC5B,UAAO,IAAM;IACX,IAAM,IAAU,EAAK,QAAQ,aAAa;AAG1C,IAFA,EAA0B,GAAM,EAAQ,EAExC,IAAO,EAAO,UAAU;;;EAI5B,SAAS,IAAmB;AAC1B,OAAI,CAAC,EAAS,MAAO;GAErB,IAAM,IAAS,SAAS,iBACtB,EAAS,OACT,WAAW,aACZ,EAEG,IAAO,EAAO,UAAU;AAC5B,UAAO,IAAM;IACX,IAAM,IAAU,EAAK,QAAQ,aAAa;AAc1C,IAZI,EAAgB,EAAQ,GAC1B,QAAQ,MACN,4BAA4B,EAAQ,gFAErC,GACQ,EAAoB,GAAM,EAAQ,IAC3C,QAAQ,MACN,aAAa,EAAQ,mHAEtB,EAGH,IAAO,EAAO,UAAU;;;SAI5B,EAAU,EAAgB,EAC1B,EAAU,EAAgB,EAE1B,QAAA,IAAA,aAA6B,iBAC3B,EAAU,EAAgB,EAC1B,EAAU,EAAgB,mBA5I1B,EAOM,OAAA;YANA;GAAJ,KAAI;GACH,OAAK,EAAE,EAAA,MAAY;GACpB,WAAQ;MAGR,EAAQ,EAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../RichTextEditor-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../RichTextEditor-B9NGgB03.cjs`),t=require(`./rich-text-editor-constants.cjs`);exports.DtRichTextEditor=e.t,exports.RICH_TEXT_EDITOR_AUTOFOCUS_TYPES=t.RICH_TEXT_EDITOR_AUTOFOCUS_TYPES,exports.RICH_TEXT_EDITOR_OUTPUT_FORMATS=t.RICH_TEXT_EDITOR_OUTPUT_FORMATS;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as e } from "../../RichTextEditor-
|
|
1
|
+
import { t as e } from "../../RichTextEditor-DxbZSRop.js";
|
|
2
2
|
import { RICH_TEXT_EDITOR_AUTOFOCUS_TYPES as t, RICH_TEXT_EDITOR_OUTPUT_FORMATS as n } from "./rich-text-editor-constants.js";
|
|
3
3
|
export { e as DtRichTextEditor, t as RICH_TEXT_EDITOR_AUTOFOCUS_TYPES, n as RICH_TEXT_EDITOR_OUTPUT_FORMATS };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../MarkdownRenderer-
|
|
1
|
+
import { t as e } from "../../MarkdownRenderer-NSSny0ID.js";
|
|
2
2
|
export { e as renderEditorToMarkdown };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`../../RichTextEditor-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`../../RichTextEditor-B9NGgB03.cjs`);exports.default=e.t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../RichTextEditor-
|
|
1
|
+
import { t as e } from "../../RichTextEditor-DxbZSRop.js";
|
|
2
2
|
export { e as default };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/validators/index.cjs`),t=require(`../../common/utils/index.cjs`),n=require(`../stack/stack.cjs`),r=require(`../../common/composables/use-indicator-animation.cjs`),i=require(`./segmented-control-constants.cjs`);let a=require(`vue`);var o=Object.assign({name:`DtSegmentedControl`},{__name:`SegmentedControl`,props:{id:{type:String,default(){return t.getUniqueString()}},modelValue:{type:String,required:!0},ariaLabel:{type:String,default:void 0},orientation:{type:String,default:i.SEGMENTED_CONTROL_ORIENTATION_DEFAULT,validator:e=>i.SEGMENTED_CONTROL_ORIENTATIONS.includes(e)},size:{type:[String,Number],default:200,validator:e.ordinalSizeValidator(i.SEGMENTED_CONTROL_SIZES)},activationMode:{type:String,default:i.SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,validator:e=>i.SEGMENTED_CONTROL_ACTIVATION_MODES.includes(e)},disabled:{type:Boolean,default:!1},showDivider:{type:Boolean,default:!0},borderless:{type:Boolean,default:!1},spread:{type:String,default:i.SEGMENTED_CONTROL_SPREAD_DEFAULT,validator:e=>i.SEGMENTED_CONTROL_SPREADS.includes(e)},labelClass:{type:[String,Array,Object],default:``},showIndicatorTransition:{type:Boolean,default:!0}},emits:[`update:modelValue`,`change`,`before-change`],setup(e,{emit:t}){let o=e,s=t,c=(0,a.ref)(null),l=(0,a.ref)(null),u=(0,a.computed)(()=>o.orientation===`vertical`?`column`:`row`),d=(0,a.computed)(()=>[`d-segmented-control`,i.SEGMENTED_CONTROL_SIZE_MODIFIERS[String(o.size)],o.showDivider?null:`d-segmented-control--hide-divider`,o.borderless?`d-segmented-control--borderless`:null,o.orientation===`vertical`?`d-segmented-control--vertical`:null,o.spread===`evenly`&&o.orientation===`horizontal`?`d-segmented-control--spread-evenly`:null]),f=(0,a.reactive)({selected:o.modelValue,disabled:o.disabled,size:o.size,labelClass:o.labelClass});(0,a.watchEffect)(()=>{f.selected=o.modelValue,f.disabled=o.disabled,f.size=o.size,f.labelClass=o.labelClass}),(0,a.provide)(i.SEGMENTED_CONTROL_CONTEXT_KEY,f),(0,a.provide)(i.SEGMENTED_CONTROL_SELECT_KEY,_),(0,a.provide)(i.SEGMENTED_CONTROL_FOCUS_KEY,g);function p(){let e=h();if(!e.length||e.some(e=>e.getAttribute(`tabindex`)===`0`))return;let t=e.find(e=>!b(e));t&&t.setAttribute(`tabindex`,`0`)}let m=r.useIndicatorAnimation(c,`--segmented-indicator-duration`,`--segmented-indicator-easing`);(0,a.onMounted)(p),(0,a.watch)(()=>[o.modelValue,o.disabled],p,{flush:`post`});function h(){let e=c.value?.$el||c.value;return e?Array.from(e.querySelectorAll(i.SEGMENTED_CONTROL_ITEM_SELECTOR)):[]}function g(e){l.value=e}async function _(e,{animate:t=!0}={}){if(o.disabled||e===o.modelValue)return;let n=new Event(`before-change`,{cancelable:!0});if(s(`before-change`,n),n.defaultPrevented)return;m.cancel();let r=t&&o.showIndicatorTransition?m.snapshot(`[aria-checked="true"]`):null;if(s(`update:modelValue`,e),s(`change`,e),!r)return;await(0,a.nextTick)();let l=(c.value?.$el||c.value)?.querySelector(`[${i.SEGMENTED_CONTROL_DATA_VALUE_ATTR}="${CSS.escape(e)}"]`);l&&m.animate({oldRect:r.rect,newEl:l,orientation:o.orientation,hideProps:{backgroundColor:`transparent`},indicatorExtra:{backgroundColor:`var(--button-color-background)`},pseudoElement:`::after`})}function v(e,t){if(t){let n=t.target.closest(i.SEGMENTED_CONTROL_ITEM_SELECTOR);if(n){let t=e.indexOf(n);if(t!==-1)return t}}let n=e.findIndex(e=>{let t=e.getAttribute(i.SEGMENTED_CONTROL_DATA_VALUE_ATTR);return l.value?t===l.value:e.getAttribute(`aria-checked`)===`true`});return n===-1?0:n}function y(e){b(e)||_(e.getAttribute(i.SEGMENTED_CONTROL_DATA_VALUE_ATTR))}function b(e){return e.getAttribute(`aria-disabled`)===`true`}function x(e,t,n){let r=e.length;for(let i=1;i<=r;i++){let a=(t+i*n+r)%r;if(!b(e[a]))return a}return t}function S(e,t,n){let r=o.orientation===`horizontal`,i=r?`ArrowRight`:`ArrowDown`,a=r?`ArrowLeft`:`ArrowUp`;switch(e){case i:return x(n,t,1);case a:return x(n,t,-1);case`Home`:return x(n,n.length-1,1);case`End`:return x(n,0,-1);default:return-1}}function C(e){let t=h();if(!t.length)return;let n=v(t,e);if(e.key===`Enter`||e.key===` `){y(t[n]),e.preventDefault(),e.stopPropagation();return}let r=S(e.key,n,t);if(r!==-1&&(e.preventDefault(),e.stopPropagation(),t[r].focus(),o.activationMode===`auto`)){m.cancel();let e=t[r].getAttribute(i.SEGMENTED_CONTROL_DATA_VALUE_ATTR);b(t[r])||_(e,{animate:!1})}}return(t,r)=>((0,a.openBlock)(),(0,a.createBlock)((0,a.unref)(n.default),{id:e.id,ref_key:`container`,ref:c,align:`stretch`,class:(0,a.normalizeClass)(d.value),direction:u.value,role:`radiogroup`,"aria-label":e.ariaLabel,"aria-orientation":e.orientation,"data-qa":`dt-segmented-control`,onKeydown:C},{default:(0,a.withCtx)(()=>[(0,a.renderSlot)(t.$slots,`default`)]),_:3},8,[`id`,`class`,`direction`,`aria-label`,`aria-orientation`]))}});exports.default=o;
|
|
2
2
|
//# sourceMappingURL=segmented-control.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmented-control.cjs","names":[],"sources":["../../../components/SegmentedControl/SegmentedControl.vue"],"sourcesContent":["<template>\n <dt-stack\n :id=\"id\"\n ref=\"container\"\n align=\"stretch\"\n :class=\"containerClasses\"\n :direction=\"stackDirection\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"orientation\"\n data-qa=\"dt-segmented-control\"\n @keydown=\"handleKeyDown\"\n >\n <!-- @slot DtSegmentedControlItem children -->\n <slot />\n </dt-stack>\n</template>\n\n<script setup>\nimport { ref, computed, reactive, watchEffect, watch, provide, onMounted, nextTick } from 'vue';\nimport { getUniqueString } from '@/common/utils';\nimport { DtStack } from '@/components/Stack';\nimport { useIndicatorAnimation } from '@/common/composables/useIndicatorAnimation';\nimport {\n SEGMENTED_CONTROL_SIZES,\n SEGMENTED_CONTROL_SIZE_DEFAULT,\n SEGMENTED_CONTROL_SIZE_MODIFIERS,\n SEGMENTED_CONTROL_ORIENTATIONS,\n SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n SEGMENTED_CONTROL_ACTIVATION_MODES,\n SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n SEGMENTED_CONTROL_SPREADS,\n SEGMENTED_CONTROL_SPREAD_DEFAULT,\n SEGMENTED_CONTROL_CONTEXT_KEY,\n SEGMENTED_CONTROL_SELECT_KEY,\n SEGMENTED_CONTROL_FOCUS_KEY,\n SEGMENTED_CONTROL_ITEM_SELECTOR,\n SEGMENTED_CONTROL_DATA_VALUE_ATTR,\n} from './SegmentedControlConstants.js';\n\ndefineOptions({ name: 'DtSegmentedControl' });\n\nconst props = defineProps({\n /**\n * Element ID for the radiogroup container.\n * Auto-generated if not provided.\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The currently selected value (v-model).\n */\n modelValue: {\n type: String,\n required: true,\n },\n\n /**\n * Accessible label for the radiogroup.\n */\n ariaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * Orientation of the segmented control.\n * Maps to DtStack direction: horizontal -> row, vertical -> column.\n * @values horizontal, vertical\n */\n orientation: {\n type: String,\n default: SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ORIENTATIONS.includes(v),\n },\n\n /**\n * DtButton size for all items. Inherited by children via provide.\n * @values 100, 200, 300, 400, 500\n */\n size: {\n type: [String, Number],\n default: SEGMENTED_CONTROL_SIZE_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_SIZES.includes(String(v)),\n },\n\n /**\n * Controls whether items are selected on focus (auto) or on click/Space/Enter (manual).\n * @values auto, manual\n */\n activationMode: {\n type: String,\n default: SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ACTIVATION_MODES.includes(v),\n },\n\n /**\n * Disables all items in the group.\n * Per-item disabled is set via the disabled prop on DtSegmentedControlItem.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Shows the dividers between items.\n */\n showDivider: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Removes the border and padding from the container.\n */\n borderless: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Controls how items distribute space.\n * 'grow' (default): items size to their content.\n * 'evenly': items share space equally.\n * @values grow, evenly\n */\n spread: {\n type: String,\n default: SEGMENTED_CONTROL_SPREAD_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_SPREADS.includes(v),\n },\n\n /**\n * Default label class for all items. Items can override with their own labelClass prop.\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * If true, the selection indicator animates between items on click.\n * @values true, false\n */\n showIndicatorTransition: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits([\n /**\n * v-model event. Emitted when the selected value changes.\n * @event update:modelValue\n * @type {String}\n */\n 'update:modelValue',\n\n /**\n * Emitted when the user selects an item (click, Enter, Space, or arrow in auto mode).\n * Not emitted for programmatic modelValue changes.\n * @event change\n * @type {String}\n */\n 'change',\n\n /**\n * Emitted before a selection change. Call event.preventDefault() to cancel the change.\n * @event before-change\n * @type {Event}\n */\n 'before-change',\n]);\n\nconst container = ref(null);\nconst focusedValue = ref(null);\n\nconst stackDirection = computed(() => props.orientation === 'vertical' ? 'column' : 'row');\n\nconst containerClasses = computed(() => [\n 'd-segmented-control',\n SEGMENTED_CONTROL_SIZE_MODIFIERS[String(props.size)],\n !props.showDivider ? 'd-segmented-control--hide-divider' : null,\n props.borderless ? 'd-segmented-control--borderless' : null,\n props.orientation === 'vertical' ? 'd-segmented-control--vertical' : null,\n props.spread === 'evenly' && props.orientation === 'horizontal'\n ? 'd-segmented-control--spread-evenly'\n : null,\n]);\n\n// Reactive context provided to children\nconst groupContext = reactive({\n selected: props.modelValue,\n disabled: props.disabled,\n size: props.size,\n labelClass: props.labelClass,\n});\n\nwatchEffect(() => {\n groupContext.selected = props.modelValue;\n groupContext.disabled = props.disabled;\n groupContext.size = props.size;\n groupContext.labelClass = props.labelClass;\n});\n\nprovide(SEGMENTED_CONTROL_CONTEXT_KEY, groupContext);\nprovide(SEGMENTED_CONTROL_SELECT_KEY, selectValue);\nprovide(SEGMENTED_CONTROL_FOCUS_KEY, setFocus);\n\n// Ensures at least one enabled item is tabbable (WAI-ARIA radiogroup requirement).\n// Items set tabindex based on isSelected && !isDisabled. If the selected item is disabled\n// or modelValue doesn't match any item, no item has tabindex=\"0\". This fallback sets\n// tabindex=\"0\" on the first enabled item so keyboard users can reach the control.\nfunction ensureTabbable () {\n const items = getItems();\n if (!items.length) return;\n const hasTabbable = items.some(el => el.getAttribute('tabindex') === '0');\n if (hasTabbable) return;\n const firstEnabled = items.find(el => !isItemDisabled(el));\n if (firstEnabled) firstEnabled.setAttribute('tabindex', '0');\n}\n\nconst indicator = useIndicatorAnimation(\n container, '--segmented-indicator-duration', '--segmented-indicator-easing',\n);\n\nonMounted(ensureTabbable);\n\nwatch(() => [props.modelValue, props.disabled], ensureTabbable, { flush: 'post' });\n\nfunction getItems () {\n const el = container.value?.$el || container.value;\n return el ? Array.from(el.querySelectorAll(SEGMENTED_CONTROL_ITEM_SELECTOR)) : [];\n}\n\nfunction setFocus (value) {\n focusedValue.value = value;\n}\n\nasync function selectValue (value, { animate: shouldAnimate = true } = {}) {\n if (props.disabled) return;\n if (value === props.modelValue) return;\n const beforeChangeEvent = new Event('before-change', { cancelable: true });\n emit('before-change', beforeChangeEvent);\n if (beforeChangeEvent.defaultPrevented) return;\n\n indicator.cancel();\n const shouldTransition = shouldAnimate && props.showIndicatorTransition;\n const old = shouldTransition ? indicator.snapshot('[aria-checked=\"true\"]') : null;\n\n emit('update:modelValue', value);\n emit('change', value);\n\n if (!old) return;\n\n await nextTick();\n const newEl = (container.value?.$el || container.value)\n ?.querySelector(`[${SEGMENTED_CONTROL_DATA_VALUE_ATTR}=\"${CSS.escape(value)}\"]`);\n if (!newEl) return;\n\n indicator.animate({\n oldRect: old.rect,\n newEl,\n orientation: props.orientation,\n hideProps: { backgroundColor: 'transparent' },\n indicatorExtra: { backgroundColor: 'var(--button-color-background)' },\n pseudoElement: '::after',\n });\n}\n\nfunction getFocusedIndex (items, event) {\n // First check event.target — the element that actually has focus\n if (event) {\n const target = event.target.closest(SEGMENTED_CONTROL_ITEM_SELECTOR);\n if (target) {\n const targetIdx = items.indexOf(target);\n if (targetIdx !== -1) return targetIdx;\n }\n }\n // Fall back to tracked focusedValue, then aria-checked\n const idx = items.findIndex(el => {\n const value = el.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n return focusedValue.value ? value === focusedValue.value : el.getAttribute('aria-checked') === 'true';\n });\n return idx === -1 ? 0 : idx;\n}\n\nfunction activateItem (item) {\n if (isItemDisabled(item)) return;\n selectValue(item.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR));\n}\n\nfunction isItemDisabled (item) {\n return item.getAttribute('aria-disabled') === 'true';\n}\n\nfunction findNextEnabled (items, fromIndex, direction) {\n const len = items.length;\n for (let i = 1; i <= len; i++) {\n const index = (fromIndex + i * direction + len) % len;\n if (!isItemDisabled(items[index])) return index;\n }\n return fromIndex;\n}\n\nfunction getNavigationIndex (key, currentIndex, items) {\n const isHorizontal = props.orientation === 'horizontal';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n switch (key) {\n case nextKey: return findNextEnabled(items, currentIndex, 1);\n case prevKey: return findNextEnabled(items, currentIndex, -1);\n case 'Home': return findNextEnabled(items, items.length - 1, 1);\n case 'End': return findNextEnabled(items, 0, -1);\n default: return -1;\n }\n}\n\nfunction handleKeyDown (event) {\n const items = getItems();\n if (!items.length) return;\n\n const focusedIndex = getFocusedIndex(items, event);\n\n if (event.key === 'Enter' || event.key === ' ') {\n activateItem(items[focusedIndex]);\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const newIndex = getNavigationIndex(event.key, focusedIndex, items);\n if (newIndex === -1) return;\n\n event.preventDefault();\n event.stopPropagation();\n items[newIndex].focus();\n\n if (props.activationMode === 'auto') {\n indicator.cancel();\n const value = items[newIndex].getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n if (!isItemDisabled(items[newIndex])) {\n selectValue(value, { animate: false });\n }\n }\n}\n</script>\n"],"mappings":"ozCA0CA,IAAM,EAAQ,EAgHR,EAAO,EAwBP,GAAA,EAAA,EAAA,KAAgB,KAAK,CACrB,GAAA,EAAA,EAAA,KAAmB,KAAK,CAExB,GAAA,EAAA,EAAA,cAAgC,EAAM,cAAgB,WAAa,SAAW,MAAM,CAEpF,GAAA,EAAA,EAAA,cAAkC,CACtC,sBACA,EAAA,iCAAiC,OAAO,EAAM,KAAK,EAClD,EAAM,YAAoD,KAAtC,oCACrB,EAAM,WAAa,kCAAoC,KACvD,EAAM,cAAgB,WAAa,gCAAkC,KACrE,EAAM,SAAW,UAAY,EAAM,cAAgB,aAC/C,qCACA,KACL,CAAC,CAGI,GAAA,EAAA,EAAA,UAAwB,CAC5B,SAAU,EAAM,WAChB,SAAU,EAAM,SAChB,KAAM,EAAM,KACZ,WAAY,EAAM,WACnB,CAAC,EAEF,EAAA,EAAA,iBAAkB,CAChB,EAAa,SAAW,EAAM,WAC9B,EAAa,SAAW,EAAM,SAC9B,EAAa,KAAO,EAAM,KAC1B,EAAa,WAAa,EAAM,YAChC,EAEF,EAAA,EAAA,SAAQ,EAAA,8BAA+B,EAAa,EACpD,EAAA,EAAA,SAAQ,EAAA,6BAA8B,EAAY,EAClD,EAAA,EAAA,SAAQ,EAAA,4BAA6B,EAAS,CAM9C,SAAS,GAAkB,CACzB,IAAM,EAAQ,GAAU,CAGxB,GAFI,CAAC,EAAM,QACS,EAAM,KAAK,GAAM,EAAG,aAAa,WAAW,GAAK,IAAI,CACxD,OACjB,IAAM,EAAe,EAAM,KAAK,GAAM,CAAC,EAAe,EAAG,CAAC,CACtD,GAAc,EAAa,aAAa,WAAY,IAAI,CAG9D,IAAM,EAAY,EAAA,sBAChB,EAAW,iCAAkC,+BAC9C,EAED,EAAA,EAAA,WAAU,EAAe,EAEzB,EAAA,EAAA,WAAY,CAAC,EAAM,WAAY,EAAM,SAAS,CAAE,EAAgB,CAAE,MAAO,OAAQ,CAAC,CAElF,SAAS,GAAY,CACnB,IAAM,EAAK,EAAU,OAAO,KAAO,EAAU,MAC7C,OAAO,EAAK,MAAM,KAAK,EAAG,iBAAiB,EAAA,gCAAgC,CAAC,CAAG,EAAE,CAGnF,SAAS,EAAU,EAAO,CACxB,EAAa,MAAQ,EAGvB,eAAe,EAAa,EAAO,CAAE,QAAS,EAAgB,IAAS,EAAE,CAAE,CAEzE,GADI,EAAM,UACN,IAAU,EAAM,WAAY,OAChC,IAAM,EAAoB,IAAI,MAAM,gBAAiB,CAAE,WAAY,GAAM,CAAC,CAE1E,GADA,EAAK,gBAAiB,EAAkB,CACpC,EAAkB,iBAAkB,OAExC,EAAU,QAAQ,CAElB,IAAM,EADmB,GAAiB,EAAM,wBACjB,EAAU,SAAS,wBAAwB,CAAG,KAK7E,GAHA,EAAK,oBAAqB,EAAM,CAChC,EAAK,SAAU,EAAM,CAEjB,CAAC,EAAK,OAEV,MAAA,EAAA,EAAA,WAAgB,CAChB,IAAM,GAAS,EAAU,OAAO,KAAO,EAAU,QAC7C,cAAc,IAAI,EAAA,kCAAkC,IAAI,IAAI,OAAO,EAAM,CAAC,IAAI,CAC7E,GAEL,EAAU,QAAQ,CAChB,QAAS,EAAI,KACb,QACA,YAAa,EAAM,YACnB,UAAW,CAAE,gBAAiB,cAAe,CAC7C,eAAgB,CAAE,gBAAiB,iCAAkC,CACrE,cAAe,UAChB,CAAC,CAGJ,SAAS,EAAiB,EAAO,EAAO,CAEtC,GAAI,EAAO,CACT,IAAM,EAAS,EAAM,OAAO,QAAQ,EAAA,gCAAgC,CACpE,GAAI,EAAQ,CACV,IAAM,EAAY,EAAM,QAAQ,EAAO,CACvC,GAAI,IAAc,GAAI,OAAO,GAIjC,IAAM,EAAM,EAAM,UAAU,GAAM,CAChC,IAAM,EAAQ,EAAG,aAAa,EAAA,kCAAkC,CAChE,OAAO,EAAa,MAAQ,IAAU,EAAa,MAAQ,EAAG,aAAa,eAAe,GAAK,QAC/F,CACF,OAAO,IAAQ,GAAK,EAAI,EAG1B,SAAS,EAAc,EAAM,CACvB,EAAe,EAAK,EACxB,EAAY,EAAK,aAAa,EAAA,kCAAkC,CAAC,CAGnE,SAAS,EAAgB,EAAM,CAC7B,OAAO,EAAK,aAAa,gBAAgB,GAAK,OAGhD,SAAS,EAAiB,EAAO,EAAW,EAAW,CACrD,IAAM,EAAM,EAAM,OAClB,IAAK,IAAI,EAAI,EAAG,GAAK,EAAK,IAAK,CAC7B,IAAM,GAAS,EAAY,EAAI,EAAY,GAAO,EAClD,GAAI,CAAC,EAAe,EAAM,GAAO,CAAE,OAAO,EAE5C,OAAO,EAGT,SAAS,EAAoB,EAAK,EAAc,EAAO,CACrD,IAAM,EAAe,EAAM,cAAgB,aACrC,EAAU,EAAe,aAAe,YACxC,EAAU,EAAe,YAAc,UAE7C,OAAQ,EAAR,CACE,KAAK,EAAS,OAAO,EAAgB,EAAO,EAAc,EAAE,CAC5D,KAAK,EAAS,OAAO,EAAgB,EAAO,EAAc,GAAG,CAC7D,IAAK,OAAQ,OAAO,EAAgB,EAAO,EAAM,OAAS,EAAG,EAAE,CAC/D,IAAK,MAAO,OAAO,EAAgB,EAAO,EAAG,GAAG,CAChD,QAAS,MAAO,IAIpB,SAAS,EAAe,EAAO,CAC7B,IAAM,EAAQ,GAAU,CACxB,GAAI,CAAC,EAAM,OAAQ,OAEnB,IAAM,EAAe,EAAgB,EAAO,EAAM,CAElD,GAAI,EAAM,MAAQ,SAAW,EAAM,MAAQ,IAAK,CAC9C,EAAa,EAAM,GAAc,CACjC,EAAM,gBAAgB,CACtB,EAAM,iBAAiB,CACvB,OAGF,IAAM,EAAW,EAAmB,EAAM,IAAK,EAAc,EAAM,CAC/D,OAAa,KAEjB,EAAM,gBAAgB,CACtB,EAAM,iBAAiB,CACvB,EAAM,GAAU,OAAO,CAEnB,EAAM,iBAAmB,QAAQ,CACnC,EAAU,QAAQ,CAClB,IAAM,EAAQ,EAAM,GAAU,aAAa,EAAA,kCAAkC,CACxE,EAAe,EAAM,GAAU,EAClC,EAAY,EAAO,CAAE,QAAS,GAAO,CAAC,gEA5U/B,EAAA,QAAA,CAAA,CAbR,GAAI,EAAA,WACD,YAAJ,IAAI,EACJ,MAAM,UACL,OAAA,EAAA,EAAA,gBAAO,EAAA,MAAgB,CACvB,UAAW,EAAA,MACZ,KAAK,aACJ,aAAY,EAAA,UACZ,mBAAkB,EAAA,YACnB,UAAQ,uBACP,UAAS,8BAGF,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,UAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"segmented-control.cjs","names":[],"sources":["../../../components/SegmentedControl/SegmentedControl.vue"],"sourcesContent":["<template>\n <dt-stack\n :id=\"id\"\n ref=\"container\"\n align=\"stretch\"\n :class=\"containerClasses\"\n :direction=\"stackDirection\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"orientation\"\n data-qa=\"dt-segmented-control\"\n @keydown=\"handleKeyDown\"\n >\n <!-- @slot DtSegmentedControlItem children -->\n <slot />\n </dt-stack>\n</template>\n\n<script setup>\nimport { ref, computed, reactive, watchEffect, watch, provide, onMounted, nextTick } from 'vue';\nimport { getUniqueString } from '@/common/utils';\nimport { DtStack } from '@/components/Stack';\nimport { useIndicatorAnimation } from '@/common/composables/useIndicatorAnimation';\nimport { ordinalSizeValidator } from '@/common/validators';\nimport {\n SEGMENTED_CONTROL_SIZES,\n SEGMENTED_CONTROL_SIZE_DEFAULT,\n SEGMENTED_CONTROL_SIZE_MODIFIERS,\n SEGMENTED_CONTROL_ORIENTATIONS,\n SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n SEGMENTED_CONTROL_ACTIVATION_MODES,\n SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n SEGMENTED_CONTROL_SPREADS,\n SEGMENTED_CONTROL_SPREAD_DEFAULT,\n SEGMENTED_CONTROL_CONTEXT_KEY,\n SEGMENTED_CONTROL_SELECT_KEY,\n SEGMENTED_CONTROL_FOCUS_KEY,\n SEGMENTED_CONTROL_ITEM_SELECTOR,\n SEGMENTED_CONTROL_DATA_VALUE_ATTR,\n} from './SegmentedControlConstants.js';\n\ndefineOptions({ name: 'DtSegmentedControl' });\n\nconst props = defineProps({\n /**\n * Element ID for the radiogroup container.\n * Auto-generated if not provided.\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The currently selected value (v-model).\n */\n modelValue: {\n type: String,\n required: true,\n },\n\n /**\n * Accessible label for the radiogroup.\n */\n ariaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * Orientation of the segmented control.\n * Maps to DtStack direction: horizontal -> row, vertical -> column.\n * @values horizontal, vertical\n */\n orientation: {\n type: String,\n default: SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ORIENTATIONS.includes(v),\n },\n\n /**\n * DtButton size for all items. Inherited by children via provide.\n * @values 100, 200, 300, 400, 500\n */\n size: {\n type: [String, Number],\n default: SEGMENTED_CONTROL_SIZE_DEFAULT,\n validator: ordinalSizeValidator(SEGMENTED_CONTROL_SIZES),\n },\n\n /**\n * Controls whether items are selected on focus (auto) or on click/Space/Enter (manual).\n * @values auto, manual\n */\n activationMode: {\n type: String,\n default: SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ACTIVATION_MODES.includes(v),\n },\n\n /**\n * Disables all items in the group.\n * Per-item disabled is set via the disabled prop on DtSegmentedControlItem.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Shows the dividers between items.\n */\n showDivider: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Removes the border and padding from the container.\n */\n borderless: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Controls how items distribute space.\n * 'grow' (default): items size to their content.\n * 'evenly': items share space equally.\n * @values grow, evenly\n */\n spread: {\n type: String,\n default: SEGMENTED_CONTROL_SPREAD_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_SPREADS.includes(v),\n },\n\n /**\n * Default label class for all items. Items can override with their own labelClass prop.\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * If true, the selection indicator animates between items on click.\n * @values true, false\n */\n showIndicatorTransition: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits([\n /**\n * v-model event. Emitted when the selected value changes.\n * @event update:modelValue\n * @type {String}\n */\n 'update:modelValue',\n\n /**\n * Emitted when the user selects an item (click, Enter, Space, or arrow in auto mode).\n * Not emitted for programmatic modelValue changes.\n * @event change\n * @type {String}\n */\n 'change',\n\n /**\n * Emitted before a selection change. Call event.preventDefault() to cancel the change.\n * @event before-change\n * @type {Event}\n */\n 'before-change',\n]);\n\nconst container = ref(null);\nconst focusedValue = ref(null);\n\nconst stackDirection = computed(() => props.orientation === 'vertical' ? 'column' : 'row');\n\nconst containerClasses = computed(() => [\n 'd-segmented-control',\n SEGMENTED_CONTROL_SIZE_MODIFIERS[String(props.size)],\n !props.showDivider ? 'd-segmented-control--hide-divider' : null,\n props.borderless ? 'd-segmented-control--borderless' : null,\n props.orientation === 'vertical' ? 'd-segmented-control--vertical' : null,\n props.spread === 'evenly' && props.orientation === 'horizontal'\n ? 'd-segmented-control--spread-evenly'\n : null,\n]);\n\n// Reactive context provided to children\nconst groupContext = reactive({\n selected: props.modelValue,\n disabled: props.disabled,\n size: props.size,\n labelClass: props.labelClass,\n});\n\nwatchEffect(() => {\n groupContext.selected = props.modelValue;\n groupContext.disabled = props.disabled;\n groupContext.size = props.size;\n groupContext.labelClass = props.labelClass;\n});\n\nprovide(SEGMENTED_CONTROL_CONTEXT_KEY, groupContext);\nprovide(SEGMENTED_CONTROL_SELECT_KEY, selectValue);\nprovide(SEGMENTED_CONTROL_FOCUS_KEY, setFocus);\n\n// Ensures at least one enabled item is tabbable (WAI-ARIA radiogroup requirement).\n// Items set tabindex based on isSelected && !isDisabled. If the selected item is disabled\n// or modelValue doesn't match any item, no item has tabindex=\"0\". This fallback sets\n// tabindex=\"0\" on the first enabled item so keyboard users can reach the control.\nfunction ensureTabbable () {\n const items = getItems();\n if (!items.length) return;\n const hasTabbable = items.some(el => el.getAttribute('tabindex') === '0');\n if (hasTabbable) return;\n const firstEnabled = items.find(el => !isItemDisabled(el));\n if (firstEnabled) firstEnabled.setAttribute('tabindex', '0');\n}\n\nconst indicator = useIndicatorAnimation(\n container, '--segmented-indicator-duration', '--segmented-indicator-easing',\n);\n\nonMounted(ensureTabbable);\n\nwatch(() => [props.modelValue, props.disabled], ensureTabbable, { flush: 'post' });\n\nfunction getItems () {\n const el = container.value?.$el || container.value;\n return el ? Array.from(el.querySelectorAll(SEGMENTED_CONTROL_ITEM_SELECTOR)) : [];\n}\n\nfunction setFocus (value) {\n focusedValue.value = value;\n}\n\nasync function selectValue (value, { animate: shouldAnimate = true } = {}) {\n if (props.disabled) return;\n if (value === props.modelValue) return;\n const beforeChangeEvent = new Event('before-change', { cancelable: true });\n emit('before-change', beforeChangeEvent);\n if (beforeChangeEvent.defaultPrevented) return;\n\n indicator.cancel();\n const shouldTransition = shouldAnimate && props.showIndicatorTransition;\n const old = shouldTransition ? indicator.snapshot('[aria-checked=\"true\"]') : null;\n\n emit('update:modelValue', value);\n emit('change', value);\n\n if (!old) return;\n\n await nextTick();\n const newEl = (container.value?.$el || container.value)\n ?.querySelector(`[${SEGMENTED_CONTROL_DATA_VALUE_ATTR}=\"${CSS.escape(value)}\"]`);\n if (!newEl) return;\n\n indicator.animate({\n oldRect: old.rect,\n newEl,\n orientation: props.orientation,\n hideProps: { backgroundColor: 'transparent' },\n indicatorExtra: { backgroundColor: 'var(--button-color-background)' },\n pseudoElement: '::after',\n });\n}\n\nfunction getFocusedIndex (items, event) {\n // First check event.target — the element that actually has focus\n if (event) {\n const target = event.target.closest(SEGMENTED_CONTROL_ITEM_SELECTOR);\n if (target) {\n const targetIdx = items.indexOf(target);\n if (targetIdx !== -1) return targetIdx;\n }\n }\n // Fall back to tracked focusedValue, then aria-checked\n const idx = items.findIndex(el => {\n const value = el.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n return focusedValue.value ? value === focusedValue.value : el.getAttribute('aria-checked') === 'true';\n });\n return idx === -1 ? 0 : idx;\n}\n\nfunction activateItem (item) {\n if (isItemDisabled(item)) return;\n selectValue(item.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR));\n}\n\nfunction isItemDisabled (item) {\n return item.getAttribute('aria-disabled') === 'true';\n}\n\nfunction findNextEnabled (items, fromIndex, direction) {\n const len = items.length;\n for (let i = 1; i <= len; i++) {\n const index = (fromIndex + i * direction + len) % len;\n if (!isItemDisabled(items[index])) return index;\n }\n return fromIndex;\n}\n\nfunction getNavigationIndex (key, currentIndex, items) {\n const isHorizontal = props.orientation === 'horizontal';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n switch (key) {\n case nextKey: return findNextEnabled(items, currentIndex, 1);\n case prevKey: return findNextEnabled(items, currentIndex, -1);\n case 'Home': return findNextEnabled(items, items.length - 1, 1);\n case 'End': return findNextEnabled(items, 0, -1);\n default: return -1;\n }\n}\n\nfunction handleKeyDown (event) {\n const items = getItems();\n if (!items.length) return;\n\n const focusedIndex = getFocusedIndex(items, event);\n\n if (event.key === 'Enter' || event.key === ' ') {\n activateItem(items[focusedIndex]);\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const newIndex = getNavigationIndex(event.key, focusedIndex, items);\n if (newIndex === -1) return;\n\n event.preventDefault();\n event.stopPropagation();\n items[newIndex].focus();\n\n if (props.activationMode === 'auto') {\n indicator.cancel();\n const value = items[newIndex].getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n if (!isItemDisabled(items[newIndex])) {\n selectValue(value, { animate: false });\n }\n }\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import t from "
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { ordinalSizeValidator as e } from "../../common/validators/index.js";
|
|
2
|
+
import { getUniqueString as t } from "../../common/utils/index.js";
|
|
3
|
+
import n from "../stack/stack.js";
|
|
4
|
+
import { useIndicatorAnimation as r } from "../../common/composables/use-indicator-animation.js";
|
|
5
|
+
import { SEGMENTED_CONTROL_ACTIVATION_MODES as i, SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT as a, SEGMENTED_CONTROL_CONTEXT_KEY as o, SEGMENTED_CONTROL_DATA_VALUE_ATTR as s, SEGMENTED_CONTROL_FOCUS_KEY as c, SEGMENTED_CONTROL_ITEM_SELECTOR as l, SEGMENTED_CONTROL_ORIENTATIONS as u, SEGMENTED_CONTROL_ORIENTATION_DEFAULT as d, SEGMENTED_CONTROL_SELECT_KEY as f, SEGMENTED_CONTROL_SIZES as p, SEGMENTED_CONTROL_SIZE_MODIFIERS as m, SEGMENTED_CONTROL_SPREADS as h, SEGMENTED_CONTROL_SPREAD_DEFAULT as g } from "./segmented-control-constants.js";
|
|
6
|
+
import { computed as _, createBlock as v, nextTick as y, normalizeClass as b, onMounted as x, openBlock as S, provide as C, reactive as w, ref as T, renderSlot as E, unref as D, watch as O, watchEffect as k, withCtx as A } from "vue";
|
|
6
7
|
//#region components/SegmentedControl/SegmentedControl.vue
|
|
7
|
-
var
|
|
8
|
+
var j = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
|
|
8
9
|
__name: "SegmentedControl",
|
|
9
10
|
props: {
|
|
10
11
|
id: {
|
|
11
12
|
type: String,
|
|
12
13
|
default() {
|
|
13
|
-
return
|
|
14
|
+
return t();
|
|
14
15
|
}
|
|
15
16
|
},
|
|
16
17
|
modelValue: {
|
|
@@ -23,18 +24,18 @@ var A = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
|
|
|
23
24
|
},
|
|
24
25
|
orientation: {
|
|
25
26
|
type: String,
|
|
26
|
-
default:
|
|
27
|
-
validator: (e) =>
|
|
27
|
+
default: d,
|
|
28
|
+
validator: (e) => u.includes(e)
|
|
28
29
|
},
|
|
29
30
|
size: {
|
|
30
31
|
type: [String, Number],
|
|
31
32
|
default: 200,
|
|
32
|
-
validator:
|
|
33
|
+
validator: e(p)
|
|
33
34
|
},
|
|
34
35
|
activationMode: {
|
|
35
36
|
type: String,
|
|
36
|
-
default:
|
|
37
|
-
validator: (e) =>
|
|
37
|
+
default: a,
|
|
38
|
+
validator: (e) => i.includes(e)
|
|
38
39
|
},
|
|
39
40
|
disabled: {
|
|
40
41
|
type: Boolean,
|
|
@@ -50,8 +51,8 @@ var A = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
|
|
|
50
51
|
},
|
|
51
52
|
spread: {
|
|
52
53
|
type: String,
|
|
53
|
-
default:
|
|
54
|
-
validator: (e) =>
|
|
54
|
+
default: g,
|
|
55
|
+
validator: (e) => h.includes(e)
|
|
55
56
|
},
|
|
56
57
|
labelClass: {
|
|
57
58
|
type: [
|
|
@@ -71,50 +72,50 @@ var A = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
|
|
|
71
72
|
"change",
|
|
72
73
|
"before-change"
|
|
73
74
|
],
|
|
74
|
-
setup(e, { emit:
|
|
75
|
-
let i = e,
|
|
75
|
+
setup(e, { emit: t }) {
|
|
76
|
+
let i = e, a = t, u = T(null), d = T(null), p = _(() => i.orientation === "vertical" ? "column" : "row"), h = _(() => [
|
|
76
77
|
"d-segmented-control",
|
|
77
|
-
|
|
78
|
+
m[String(i.size)],
|
|
78
79
|
i.showDivider ? null : "d-segmented-control--hide-divider",
|
|
79
80
|
i.borderless ? "d-segmented-control--borderless" : null,
|
|
80
81
|
i.orientation === "vertical" ? "d-segmented-control--vertical" : null,
|
|
81
82
|
i.spread === "evenly" && i.orientation === "horizontal" ? "d-segmented-control--spread-evenly" : null
|
|
82
|
-
]),
|
|
83
|
+
]), g = w({
|
|
83
84
|
selected: i.modelValue,
|
|
84
85
|
disabled: i.disabled,
|
|
85
86
|
size: i.size,
|
|
86
87
|
labelClass: i.labelClass
|
|
87
88
|
});
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}),
|
|
89
|
+
k(() => {
|
|
90
|
+
g.selected = i.modelValue, g.disabled = i.disabled, g.size = i.size, g.labelClass = i.labelClass;
|
|
91
|
+
}), C(o, g), C(f, F), C(c, P);
|
|
91
92
|
function j() {
|
|
92
93
|
let e = N();
|
|
93
94
|
if (!e.length || e.some((e) => e.getAttribute("tabindex") === "0")) return;
|
|
94
95
|
let t = e.find((e) => !R(e));
|
|
95
96
|
t && t.setAttribute("tabindex", "0");
|
|
96
97
|
}
|
|
97
|
-
let M =
|
|
98
|
-
|
|
98
|
+
let M = r(u, "--segmented-indicator-duration", "--segmented-indicator-easing");
|
|
99
|
+
x(j), O(() => [i.modelValue, i.disabled], j, { flush: "post" });
|
|
99
100
|
function N() {
|
|
100
101
|
let e = u.value?.$el || u.value;
|
|
101
|
-
return e ? Array.from(e.querySelectorAll(
|
|
102
|
+
return e ? Array.from(e.querySelectorAll(l)) : [];
|
|
102
103
|
}
|
|
103
104
|
function P(e) {
|
|
104
|
-
|
|
105
|
+
d.value = e;
|
|
105
106
|
}
|
|
106
107
|
async function F(e, { animate: t = !0 } = {}) {
|
|
107
108
|
if (i.disabled || e === i.modelValue) return;
|
|
108
109
|
let n = new Event("before-change", { cancelable: !0 });
|
|
109
|
-
if (
|
|
110
|
+
if (a("before-change", n), n.defaultPrevented) return;
|
|
110
111
|
M.cancel();
|
|
111
112
|
let r = t && i.showIndicatorTransition ? M.snapshot("[aria-checked=\"true\"]") : null;
|
|
112
|
-
if (
|
|
113
|
-
await
|
|
114
|
-
let
|
|
115
|
-
|
|
113
|
+
if (a("update:modelValue", e), a("change", e), !r) return;
|
|
114
|
+
await y();
|
|
115
|
+
let o = (u.value?.$el || u.value)?.querySelector(`[${s}="${CSS.escape(e)}"]`);
|
|
116
|
+
o && M.animate({
|
|
116
117
|
oldRect: r.rect,
|
|
117
|
-
newEl:
|
|
118
|
+
newEl: o,
|
|
118
119
|
orientation: i.orientation,
|
|
119
120
|
hideProps: { backgroundColor: "transparent" },
|
|
120
121
|
indicatorExtra: { backgroundColor: "var(--button-color-background)" },
|
|
@@ -123,20 +124,20 @@ var A = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
|
|
|
123
124
|
}
|
|
124
125
|
function I(e, t) {
|
|
125
126
|
if (t) {
|
|
126
|
-
let n = t.target.closest(
|
|
127
|
+
let n = t.target.closest(l);
|
|
127
128
|
if (n) {
|
|
128
129
|
let t = e.indexOf(n);
|
|
129
130
|
if (t !== -1) return t;
|
|
130
131
|
}
|
|
131
132
|
}
|
|
132
133
|
let n = e.findIndex((e) => {
|
|
133
|
-
let t = e.getAttribute(
|
|
134
|
-
return
|
|
134
|
+
let t = e.getAttribute(s);
|
|
135
|
+
return d.value ? t === d.value : e.getAttribute("aria-checked") === "true";
|
|
135
136
|
});
|
|
136
137
|
return n === -1 ? 0 : n;
|
|
137
138
|
}
|
|
138
139
|
function L(e) {
|
|
139
|
-
R(e) || F(e.getAttribute(
|
|
140
|
+
R(e) || F(e.getAttribute(s));
|
|
140
141
|
}
|
|
141
142
|
function R(e) {
|
|
142
143
|
return e.getAttribute("aria-disabled") === "true";
|
|
@@ -170,24 +171,24 @@ var A = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
|
|
|
170
171
|
let r = B(e.key, n, t);
|
|
171
172
|
if (r !== -1 && (e.preventDefault(), e.stopPropagation(), t[r].focus(), i.activationMode === "auto")) {
|
|
172
173
|
M.cancel();
|
|
173
|
-
let e = t[r].getAttribute(
|
|
174
|
+
let e = t[r].getAttribute(s);
|
|
174
175
|
R(t[r]) || F(e, { animate: !1 });
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
|
-
return (
|
|
178
|
+
return (t, r) => (S(), v(D(n), {
|
|
178
179
|
id: e.id,
|
|
179
180
|
ref_key: "container",
|
|
180
181
|
ref: u,
|
|
181
182
|
align: "stretch",
|
|
182
|
-
class:
|
|
183
|
-
direction:
|
|
183
|
+
class: b(h.value),
|
|
184
|
+
direction: p.value,
|
|
184
185
|
role: "radiogroup",
|
|
185
186
|
"aria-label": e.ariaLabel,
|
|
186
187
|
"aria-orientation": e.orientation,
|
|
187
188
|
"data-qa": "dt-segmented-control",
|
|
188
189
|
onKeydown: V
|
|
189
190
|
}, {
|
|
190
|
-
default:
|
|
191
|
+
default: A(() => [E(t.$slots, "default")]),
|
|
191
192
|
_: 3
|
|
192
193
|
}, 8, [
|
|
193
194
|
"id",
|
|
@@ -199,6 +200,6 @@ var A = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
|
|
|
199
200
|
}
|
|
200
201
|
});
|
|
201
202
|
//#endregion
|
|
202
|
-
export {
|
|
203
|
+
export { j as default };
|
|
203
204
|
|
|
204
205
|
//# sourceMappingURL=segmented-control.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmented-control.js","names":[],"sources":["../../../components/SegmentedControl/SegmentedControl.vue"],"sourcesContent":["<template>\n <dt-stack\n :id=\"id\"\n ref=\"container\"\n align=\"stretch\"\n :class=\"containerClasses\"\n :direction=\"stackDirection\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"orientation\"\n data-qa=\"dt-segmented-control\"\n @keydown=\"handleKeyDown\"\n >\n <!-- @slot DtSegmentedControlItem children -->\n <slot />\n </dt-stack>\n</template>\n\n<script setup>\nimport { ref, computed, reactive, watchEffect, watch, provide, onMounted, nextTick } from 'vue';\nimport { getUniqueString } from '@/common/utils';\nimport { DtStack } from '@/components/Stack';\nimport { useIndicatorAnimation } from '@/common/composables/useIndicatorAnimation';\nimport {\n SEGMENTED_CONTROL_SIZES,\n SEGMENTED_CONTROL_SIZE_DEFAULT,\n SEGMENTED_CONTROL_SIZE_MODIFIERS,\n SEGMENTED_CONTROL_ORIENTATIONS,\n SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n SEGMENTED_CONTROL_ACTIVATION_MODES,\n SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n SEGMENTED_CONTROL_SPREADS,\n SEGMENTED_CONTROL_SPREAD_DEFAULT,\n SEGMENTED_CONTROL_CONTEXT_KEY,\n SEGMENTED_CONTROL_SELECT_KEY,\n SEGMENTED_CONTROL_FOCUS_KEY,\n SEGMENTED_CONTROL_ITEM_SELECTOR,\n SEGMENTED_CONTROL_DATA_VALUE_ATTR,\n} from './SegmentedControlConstants.js';\n\ndefineOptions({ name: 'DtSegmentedControl' });\n\nconst props = defineProps({\n /**\n * Element ID for the radiogroup container.\n * Auto-generated if not provided.\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The currently selected value (v-model).\n */\n modelValue: {\n type: String,\n required: true,\n },\n\n /**\n * Accessible label for the radiogroup.\n */\n ariaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * Orientation of the segmented control.\n * Maps to DtStack direction: horizontal -> row, vertical -> column.\n * @values horizontal, vertical\n */\n orientation: {\n type: String,\n default: SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ORIENTATIONS.includes(v),\n },\n\n /**\n * DtButton size for all items. Inherited by children via provide.\n * @values 100, 200, 300, 400, 500\n */\n size: {\n type: [String, Number],\n default: SEGMENTED_CONTROL_SIZE_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_SIZES.includes(String(v)),\n },\n\n /**\n * Controls whether items are selected on focus (auto) or on click/Space/Enter (manual).\n * @values auto, manual\n */\n activationMode: {\n type: String,\n default: SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ACTIVATION_MODES.includes(v),\n },\n\n /**\n * Disables all items in the group.\n * Per-item disabled is set via the disabled prop on DtSegmentedControlItem.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Shows the dividers between items.\n */\n showDivider: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Removes the border and padding from the container.\n */\n borderless: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Controls how items distribute space.\n * 'grow' (default): items size to their content.\n * 'evenly': items share space equally.\n * @values grow, evenly\n */\n spread: {\n type: String,\n default: SEGMENTED_CONTROL_SPREAD_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_SPREADS.includes(v),\n },\n\n /**\n * Default label class for all items. Items can override with their own labelClass prop.\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * If true, the selection indicator animates between items on click.\n * @values true, false\n */\n showIndicatorTransition: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits([\n /**\n * v-model event. Emitted when the selected value changes.\n * @event update:modelValue\n * @type {String}\n */\n 'update:modelValue',\n\n /**\n * Emitted when the user selects an item (click, Enter, Space, or arrow in auto mode).\n * Not emitted for programmatic modelValue changes.\n * @event change\n * @type {String}\n */\n 'change',\n\n /**\n * Emitted before a selection change. Call event.preventDefault() to cancel the change.\n * @event before-change\n * @type {Event}\n */\n 'before-change',\n]);\n\nconst container = ref(null);\nconst focusedValue = ref(null);\n\nconst stackDirection = computed(() => props.orientation === 'vertical' ? 'column' : 'row');\n\nconst containerClasses = computed(() => [\n 'd-segmented-control',\n SEGMENTED_CONTROL_SIZE_MODIFIERS[String(props.size)],\n !props.showDivider ? 'd-segmented-control--hide-divider' : null,\n props.borderless ? 'd-segmented-control--borderless' : null,\n props.orientation === 'vertical' ? 'd-segmented-control--vertical' : null,\n props.spread === 'evenly' && props.orientation === 'horizontal'\n ? 'd-segmented-control--spread-evenly'\n : null,\n]);\n\n// Reactive context provided to children\nconst groupContext = reactive({\n selected: props.modelValue,\n disabled: props.disabled,\n size: props.size,\n labelClass: props.labelClass,\n});\n\nwatchEffect(() => {\n groupContext.selected = props.modelValue;\n groupContext.disabled = props.disabled;\n groupContext.size = props.size;\n groupContext.labelClass = props.labelClass;\n});\n\nprovide(SEGMENTED_CONTROL_CONTEXT_KEY, groupContext);\nprovide(SEGMENTED_CONTROL_SELECT_KEY, selectValue);\nprovide(SEGMENTED_CONTROL_FOCUS_KEY, setFocus);\n\n// Ensures at least one enabled item is tabbable (WAI-ARIA radiogroup requirement).\n// Items set tabindex based on isSelected && !isDisabled. If the selected item is disabled\n// or modelValue doesn't match any item, no item has tabindex=\"0\". This fallback sets\n// tabindex=\"0\" on the first enabled item so keyboard users can reach the control.\nfunction ensureTabbable () {\n const items = getItems();\n if (!items.length) return;\n const hasTabbable = items.some(el => el.getAttribute('tabindex') === '0');\n if (hasTabbable) return;\n const firstEnabled = items.find(el => !isItemDisabled(el));\n if (firstEnabled) firstEnabled.setAttribute('tabindex', '0');\n}\n\nconst indicator = useIndicatorAnimation(\n container, '--segmented-indicator-duration', '--segmented-indicator-easing',\n);\n\nonMounted(ensureTabbable);\n\nwatch(() => [props.modelValue, props.disabled], ensureTabbable, { flush: 'post' });\n\nfunction getItems () {\n const el = container.value?.$el || container.value;\n return el ? Array.from(el.querySelectorAll(SEGMENTED_CONTROL_ITEM_SELECTOR)) : [];\n}\n\nfunction setFocus (value) {\n focusedValue.value = value;\n}\n\nasync function selectValue (value, { animate: shouldAnimate = true } = {}) {\n if (props.disabled) return;\n if (value === props.modelValue) return;\n const beforeChangeEvent = new Event('before-change', { cancelable: true });\n emit('before-change', beforeChangeEvent);\n if (beforeChangeEvent.defaultPrevented) return;\n\n indicator.cancel();\n const shouldTransition = shouldAnimate && props.showIndicatorTransition;\n const old = shouldTransition ? indicator.snapshot('[aria-checked=\"true\"]') : null;\n\n emit('update:modelValue', value);\n emit('change', value);\n\n if (!old) return;\n\n await nextTick();\n const newEl = (container.value?.$el || container.value)\n ?.querySelector(`[${SEGMENTED_CONTROL_DATA_VALUE_ATTR}=\"${CSS.escape(value)}\"]`);\n if (!newEl) return;\n\n indicator.animate({\n oldRect: old.rect,\n newEl,\n orientation: props.orientation,\n hideProps: { backgroundColor: 'transparent' },\n indicatorExtra: { backgroundColor: 'var(--button-color-background)' },\n pseudoElement: '::after',\n });\n}\n\nfunction getFocusedIndex (items, event) {\n // First check event.target — the element that actually has focus\n if (event) {\n const target = event.target.closest(SEGMENTED_CONTROL_ITEM_SELECTOR);\n if (target) {\n const targetIdx = items.indexOf(target);\n if (targetIdx !== -1) return targetIdx;\n }\n }\n // Fall back to tracked focusedValue, then aria-checked\n const idx = items.findIndex(el => {\n const value = el.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n return focusedValue.value ? value === focusedValue.value : el.getAttribute('aria-checked') === 'true';\n });\n return idx === -1 ? 0 : idx;\n}\n\nfunction activateItem (item) {\n if (isItemDisabled(item)) return;\n selectValue(item.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR));\n}\n\nfunction isItemDisabled (item) {\n return item.getAttribute('aria-disabled') === 'true';\n}\n\nfunction findNextEnabled (items, fromIndex, direction) {\n const len = items.length;\n for (let i = 1; i <= len; i++) {\n const index = (fromIndex + i * direction + len) % len;\n if (!isItemDisabled(items[index])) return index;\n }\n return fromIndex;\n}\n\nfunction getNavigationIndex (key, currentIndex, items) {\n const isHorizontal = props.orientation === 'horizontal';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n switch (key) {\n case nextKey: return findNextEnabled(items, currentIndex, 1);\n case prevKey: return findNextEnabled(items, currentIndex, -1);\n case 'Home': return findNextEnabled(items, items.length - 1, 1);\n case 'End': return findNextEnabled(items, 0, -1);\n default: return -1;\n }\n}\n\nfunction handleKeyDown (event) {\n const items = getItems();\n if (!items.length) return;\n\n const focusedIndex = getFocusedIndex(items, event);\n\n if (event.key === 'Enter' || event.key === ' ') {\n activateItem(items[focusedIndex]);\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const newIndex = getNavigationIndex(event.key, focusedIndex, items);\n if (newIndex === -1) return;\n\n event.preventDefault();\n event.stopPropagation();\n items[newIndex].focus();\n\n if (props.activationMode === 'auto') {\n indicator.cancel();\n const value = items[newIndex].getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n if (!isItemDisabled(items[newIndex])) {\n selectValue(value, { animate: false });\n }\n }\n}\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"segmented-control.js","names":[],"sources":["../../../components/SegmentedControl/SegmentedControl.vue"],"sourcesContent":["<template>\n <dt-stack\n :id=\"id\"\n ref=\"container\"\n align=\"stretch\"\n :class=\"containerClasses\"\n :direction=\"stackDirection\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"orientation\"\n data-qa=\"dt-segmented-control\"\n @keydown=\"handleKeyDown\"\n >\n <!-- @slot DtSegmentedControlItem children -->\n <slot />\n </dt-stack>\n</template>\n\n<script setup>\nimport { ref, computed, reactive, watchEffect, watch, provide, onMounted, nextTick } from 'vue';\nimport { getUniqueString } from '@/common/utils';\nimport { DtStack } from '@/components/Stack';\nimport { useIndicatorAnimation } from '@/common/composables/useIndicatorAnimation';\nimport { ordinalSizeValidator } from '@/common/validators';\nimport {\n SEGMENTED_CONTROL_SIZES,\n SEGMENTED_CONTROL_SIZE_DEFAULT,\n SEGMENTED_CONTROL_SIZE_MODIFIERS,\n SEGMENTED_CONTROL_ORIENTATIONS,\n SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n SEGMENTED_CONTROL_ACTIVATION_MODES,\n SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n SEGMENTED_CONTROL_SPREADS,\n SEGMENTED_CONTROL_SPREAD_DEFAULT,\n SEGMENTED_CONTROL_CONTEXT_KEY,\n SEGMENTED_CONTROL_SELECT_KEY,\n SEGMENTED_CONTROL_FOCUS_KEY,\n SEGMENTED_CONTROL_ITEM_SELECTOR,\n SEGMENTED_CONTROL_DATA_VALUE_ATTR,\n} from './SegmentedControlConstants.js';\n\ndefineOptions({ name: 'DtSegmentedControl' });\n\nconst props = defineProps({\n /**\n * Element ID for the radiogroup container.\n * Auto-generated if not provided.\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The currently selected value (v-model).\n */\n modelValue: {\n type: String,\n required: true,\n },\n\n /**\n * Accessible label for the radiogroup.\n */\n ariaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * Orientation of the segmented control.\n * Maps to DtStack direction: horizontal -> row, vertical -> column.\n * @values horizontal, vertical\n */\n orientation: {\n type: String,\n default: SEGMENTED_CONTROL_ORIENTATION_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ORIENTATIONS.includes(v),\n },\n\n /**\n * DtButton size for all items. Inherited by children via provide.\n * @values 100, 200, 300, 400, 500\n */\n size: {\n type: [String, Number],\n default: SEGMENTED_CONTROL_SIZE_DEFAULT,\n validator: ordinalSizeValidator(SEGMENTED_CONTROL_SIZES),\n },\n\n /**\n * Controls whether items are selected on focus (auto) or on click/Space/Enter (manual).\n * @values auto, manual\n */\n activationMode: {\n type: String,\n default: SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_ACTIVATION_MODES.includes(v),\n },\n\n /**\n * Disables all items in the group.\n * Per-item disabled is set via the disabled prop on DtSegmentedControlItem.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Shows the dividers between items.\n */\n showDivider: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Removes the border and padding from the container.\n */\n borderless: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Controls how items distribute space.\n * 'grow' (default): items size to their content.\n * 'evenly': items share space equally.\n * @values grow, evenly\n */\n spread: {\n type: String,\n default: SEGMENTED_CONTROL_SPREAD_DEFAULT,\n validator: (v) => SEGMENTED_CONTROL_SPREADS.includes(v),\n },\n\n /**\n * Default label class for all items. Items can override with their own labelClass prop.\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * If true, the selection indicator animates between items on click.\n * @values true, false\n */\n showIndicatorTransition: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits([\n /**\n * v-model event. Emitted when the selected value changes.\n * @event update:modelValue\n * @type {String}\n */\n 'update:modelValue',\n\n /**\n * Emitted when the user selects an item (click, Enter, Space, or arrow in auto mode).\n * Not emitted for programmatic modelValue changes.\n * @event change\n * @type {String}\n */\n 'change',\n\n /**\n * Emitted before a selection change. Call event.preventDefault() to cancel the change.\n * @event before-change\n * @type {Event}\n */\n 'before-change',\n]);\n\nconst container = ref(null);\nconst focusedValue = ref(null);\n\nconst stackDirection = computed(() => props.orientation === 'vertical' ? 'column' : 'row');\n\nconst containerClasses = computed(() => [\n 'd-segmented-control',\n SEGMENTED_CONTROL_SIZE_MODIFIERS[String(props.size)],\n !props.showDivider ? 'd-segmented-control--hide-divider' : null,\n props.borderless ? 'd-segmented-control--borderless' : null,\n props.orientation === 'vertical' ? 'd-segmented-control--vertical' : null,\n props.spread === 'evenly' && props.orientation === 'horizontal'\n ? 'd-segmented-control--spread-evenly'\n : null,\n]);\n\n// Reactive context provided to children\nconst groupContext = reactive({\n selected: props.modelValue,\n disabled: props.disabled,\n size: props.size,\n labelClass: props.labelClass,\n});\n\nwatchEffect(() => {\n groupContext.selected = props.modelValue;\n groupContext.disabled = props.disabled;\n groupContext.size = props.size;\n groupContext.labelClass = props.labelClass;\n});\n\nprovide(SEGMENTED_CONTROL_CONTEXT_KEY, groupContext);\nprovide(SEGMENTED_CONTROL_SELECT_KEY, selectValue);\nprovide(SEGMENTED_CONTROL_FOCUS_KEY, setFocus);\n\n// Ensures at least one enabled item is tabbable (WAI-ARIA radiogroup requirement).\n// Items set tabindex based on isSelected && !isDisabled. If the selected item is disabled\n// or modelValue doesn't match any item, no item has tabindex=\"0\". This fallback sets\n// tabindex=\"0\" on the first enabled item so keyboard users can reach the control.\nfunction ensureTabbable () {\n const items = getItems();\n if (!items.length) return;\n const hasTabbable = items.some(el => el.getAttribute('tabindex') === '0');\n if (hasTabbable) return;\n const firstEnabled = items.find(el => !isItemDisabled(el));\n if (firstEnabled) firstEnabled.setAttribute('tabindex', '0');\n}\n\nconst indicator = useIndicatorAnimation(\n container, '--segmented-indicator-duration', '--segmented-indicator-easing',\n);\n\nonMounted(ensureTabbable);\n\nwatch(() => [props.modelValue, props.disabled], ensureTabbable, { flush: 'post' });\n\nfunction getItems () {\n const el = container.value?.$el || container.value;\n return el ? Array.from(el.querySelectorAll(SEGMENTED_CONTROL_ITEM_SELECTOR)) : [];\n}\n\nfunction setFocus (value) {\n focusedValue.value = value;\n}\n\nasync function selectValue (value, { animate: shouldAnimate = true } = {}) {\n if (props.disabled) return;\n if (value === props.modelValue) return;\n const beforeChangeEvent = new Event('before-change', { cancelable: true });\n emit('before-change', beforeChangeEvent);\n if (beforeChangeEvent.defaultPrevented) return;\n\n indicator.cancel();\n const shouldTransition = shouldAnimate && props.showIndicatorTransition;\n const old = shouldTransition ? indicator.snapshot('[aria-checked=\"true\"]') : null;\n\n emit('update:modelValue', value);\n emit('change', value);\n\n if (!old) return;\n\n await nextTick();\n const newEl = (container.value?.$el || container.value)\n ?.querySelector(`[${SEGMENTED_CONTROL_DATA_VALUE_ATTR}=\"${CSS.escape(value)}\"]`);\n if (!newEl) return;\n\n indicator.animate({\n oldRect: old.rect,\n newEl,\n orientation: props.orientation,\n hideProps: { backgroundColor: 'transparent' },\n indicatorExtra: { backgroundColor: 'var(--button-color-background)' },\n pseudoElement: '::after',\n });\n}\n\nfunction getFocusedIndex (items, event) {\n // First check event.target — the element that actually has focus\n if (event) {\n const target = event.target.closest(SEGMENTED_CONTROL_ITEM_SELECTOR);\n if (target) {\n const targetIdx = items.indexOf(target);\n if (targetIdx !== -1) return targetIdx;\n }\n }\n // Fall back to tracked focusedValue, then aria-checked\n const idx = items.findIndex(el => {\n const value = el.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n return focusedValue.value ? value === focusedValue.value : el.getAttribute('aria-checked') === 'true';\n });\n return idx === -1 ? 0 : idx;\n}\n\nfunction activateItem (item) {\n if (isItemDisabled(item)) return;\n selectValue(item.getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR));\n}\n\nfunction isItemDisabled (item) {\n return item.getAttribute('aria-disabled') === 'true';\n}\n\nfunction findNextEnabled (items, fromIndex, direction) {\n const len = items.length;\n for (let i = 1; i <= len; i++) {\n const index = (fromIndex + i * direction + len) % len;\n if (!isItemDisabled(items[index])) return index;\n }\n return fromIndex;\n}\n\nfunction getNavigationIndex (key, currentIndex, items) {\n const isHorizontal = props.orientation === 'horizontal';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n switch (key) {\n case nextKey: return findNextEnabled(items, currentIndex, 1);\n case prevKey: return findNextEnabled(items, currentIndex, -1);\n case 'Home': return findNextEnabled(items, items.length - 1, 1);\n case 'End': return findNextEnabled(items, 0, -1);\n default: return -1;\n }\n}\n\nfunction handleKeyDown (event) {\n const items = getItems();\n if (!items.length) return;\n\n const focusedIndex = getFocusedIndex(items, event);\n\n if (event.key === 'Enter' || event.key === ' ') {\n activateItem(items[focusedIndex]);\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const newIndex = getNavigationIndex(event.key, focusedIndex, items);\n if (newIndex === -1) return;\n\n event.preventDefault();\n event.stopPropagation();\n items[newIndex].focus();\n\n if (props.activationMode === 'auto') {\n indicator.cancel();\n const value = items[newIndex].getAttribute(SEGMENTED_CONTROL_DATA_VALUE_ATTR);\n if (!isItemDisabled(items[newIndex])) {\n selectValue(value, { animate: false });\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/index.cjs`),t=require(`../../common/
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/constants/index.cjs`),t=require(`../../common/validators/index.cjs`),n=require(`../../common/utils/index.cjs`),r=require(`../../common/mixins/input.cjs`),i=require(`../../_plugin-vue_export-helper-D8jCH6HB.cjs`),a=require(`../validation-messages/validation-messages.cjs`),o=require(`../text/text-constants.cjs`),s=require(`../text/text.cjs`),c=require(`./select-menu-constants.cjs`),l=require(`./select-menu-validators.cjs`);let u=require(`vue`);var d={name:`DtSelectMenu`,components:{DtValidationMessages:a.default,DtText:s.default},mixins:[r.MessagesMixin],inheritAttrs:!1,props:{label:{type:String,default:``},showLabel:{type:Boolean,default:!0},description:{type:String,default:``},options:{type:Array,default:()=>[],validator:e=>l.optionsValidator(e)},size:{type:[String,Number],default:300,validator:t.ordinalSizeValidator(c.SELECT_SIZE_MODIFIERS)},labelClass:{type:[String,Array,Object],default:``},descriptionClass:{type:[String,Array,Object],default:``},selectClass:{type:[String,Array,Object],default:``},optionClass:{type:[String,Array,Object],default:``},labelChildProps:{type:Object,default:()=>({})},descriptionChildProps:{type:Object,default:()=>({})},optionChildProps:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1},modelValue:{type:[String,Number],default:``},labelSize:{type:[String,Number],default:null,validator:e=>o.TEXT_SIZE_MODIFIERS.label.includes(String(e))},labelStrength:{type:String,default:null,validator:e=>Object.keys(o.TEXT_STRENGTH_MODIFIERS).includes(e)}},emits:[`update:modelValue`],data(){return{SELECT_SIZE_MODIFIERS:c.SELECT_SIZE_MODIFIERS,SELECT_STATE_MODIFIERS:c.SELECT_STATE_MODIFIERS,hasSlotContent:n.hasSlotContent,messagesId:n.getUniqueString()}},computed:{resolvedLabelSize(){if(this.labelSize!=null)return this.labelSize;let e=String(this.size);return e===`xl`||e===`500`?e===`500`?`400`:`lg`:this.size},resolvedDescriptionSize(){return{100:`xs`,200:`xs`,300:`sm`,400:`sm`,500:`md`,xs:`xs`,sm:`xs`,md:`sm`,lg:`sm`,xl:`md`}[String(this.size)]||`sm`},resolvedDescriptionDensity(){let e=String(this.size);return e===`xl`||e===`500`?`300`:void 0},selectListeners(){return{input:()=>{},change:e=>this.emitValue(e.target.value,e)}},state(){return n.getValidationState(this.formattedMessages)},ariaInvalid(){return this.state===e.VALIDATION_MESSAGE_TYPES.CRITICAL?`true`:void 0},ariaDescribedBy(){return this.showMessages&&this.formattedMessages.length>0?this.messagesId:void 0},selectKey(){return n.getUniqueString()},descriptionKey(){return`select-${this.selectKey}-description`},labelAriaDetails(){return this.$slots.description||this.description?this.descriptionKey:this.$attrs[`aria-details`]}},mounted(){this.validateOptionsPresence(),this.runValidations()},beforeUpdate(){this.validateOptionsPresence()},methods:{removeClassStyleAttrs:n.removeClassStyleAttrs,emitValue(e,t){this.$emit(`update:modelValue`,e,t)},getOptionKey(e){return`select-${this.selectKey}-option-${e}`},validateOptionsPresence(){this.options?.length<1&&!this.$slots.default&&(0,u.warn)(`Options are expected to be provided via prop or slot`,this)},runValidations(){!(this.$slots.label||this.label)&&!this.$attrs[`aria-label`]&&console.info(`[Dialtone] A label is required for accessibility. Provide a label prop and use show-label="false" to hide it visually.`)}}},f=[`aria-label`,`aria-invalid`,`aria-describedby`,`disabled`,`value`],p=[`value`];function m(e,t,n,r,i,a){let o=(0,u.resolveComponent)(`dt-text`),s=(0,u.resolveComponent)(`dt-validation-messages`);return(0,u.openBlock)(),(0,u.createElementBlock)(`div`,{class:(0,u.normalizeClass)(e.$attrs.class),style:(0,u.normalizeStyle)(e.$attrs.style)},[(0,u.createElementVNode)(`label`,null,[n.showLabel&&(i.hasSlotContent(e.$slots.label)||n.label)?((0,u.openBlock)(),(0,u.createBlock)(o,(0,u.mergeProps)({key:0,kind:`label`,size:a.resolvedLabelSize,strength:n.labelStrength,tone:`secondary`,as:`div`,"aria-details":a.labelAriaDetails,class:[`d-select__label-text`,n.labelClass]},n.labelChildProps,{"data-qa":`dt-select-label`}),{default:(0,u.withCtx)(()=>[(0,u.renderSlot)(e.$slots,`label`,{},()=>[(0,u.createTextVNode)((0,u.toDisplayString)(n.label),1)])]),_:3},16,[`size`,`strength`,`aria-details`,`class`])):(0,u.createCommentVNode)(``,!0),i.hasSlotContent(e.$slots.description)||n.description?((0,u.openBlock)(),(0,u.createBlock)(o,(0,u.mergeProps)({key:1,id:a.descriptionKey,kind:`body`,size:a.resolvedDescriptionSize,tone:`tertiary`,density:a.resolvedDescriptionDensity,as:`div`,class:[`d-description`,n.descriptionClass]},n.descriptionChildProps,{"data-qa":`dt-select-description`}),{default:(0,u.withCtx)(()=>[(0,u.renderSlot)(e.$slots,`description`,{},()=>[(0,u.createTextVNode)((0,u.toDisplayString)(n.description),1)])]),_:3},16,[`id`,`size`,`density`,`class`])):(0,u.createCommentVNode)(``,!0),(0,u.createElementVNode)(`div`,{class:(0,u.normalizeClass)([`d-select`,i.SELECT_SIZE_MODIFIERS[String(n.size)],n.selectClass,{"d-select--disabled":n.disabled}]),"data-qa":`dt-select-wrapper`},[(0,u.createElementVNode)(`select`,(0,u.mergeProps)({ref:`selectElement`,class:[`d-select__input`,i.SELECT_STATE_MODIFIERS[a.state]],"aria-label":!n.showLabel&&n.label?n.label:void 0,"aria-invalid":a.ariaInvalid,"aria-describedby":a.ariaDescribedBy},a.removeClassStyleAttrs(e.$attrs),{"data-qa":`dt-select`,disabled:n.disabled,value:n.modelValue},(0,u.toHandlers)(a.selectListeners,!0)),[(0,u.renderSlot)(e.$slots,`default`,{},()=>[((0,u.openBlock)(!0),(0,u.createElementBlock)(u.Fragment,null,(0,u.renderList)(n.options,e=>((0,u.openBlock)(),(0,u.createElementBlock)(`option`,(0,u.mergeProps)({key:a.getOptionKey(e.value),value:e.value,class:n.optionClass},{ref_for:!0},n.optionChildProps),(0,u.toDisplayString)(e.label),17,p))),128))])],16,f)],2)]),(0,u.createVNode)(s,(0,u.mergeProps)(e.messagesChildProps,{id:i.messagesId,"validation-messages":e.formattedMessages,"show-messages":e.showMessages,class:e.messagesClass,"data-qa":`dt-select-messages`}),null,16,[`id`,`validation-messages`,`show-messages`,`class`])],6)}var h=i.t(d,[[`render`,m]]);exports.default=h;
|
|
2
2
|
//# sourceMappingURL=select-menu.cjs.map
|