@dialpad/dialtone-vue 3.223.0-next.3 → 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/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 +106 -106
- 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 +26 -26
- package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +46 -46
- 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 +37 -37
- package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts.map +1 -1
- package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts +37 -37
- 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 +308 -308
- 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 +37 -37
- package/dist/components/Input/Input.vue.d.ts.map +1 -1
- package/dist/components/InputGroup/InputGroup.vue.d.ts +46 -46
- 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 +80 -80
- 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 +79 -85
- 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 +106 -106
- 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 +4 -4
- 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 +26 -26
- package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.vue.d.ts +46 -46
- 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 +10 -10
- 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 +153 -153
- 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 +33 -33
- 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/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 +108 -108
- 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 +106 -106
- package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts.map +1 -1
- package/dist/components/Toast/Toast.vue.d.ts +436 -436
- 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 +134 -130
- 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 +1 -1
- 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/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/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-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-DOE5NEU9.js → message_input-C6BcWqr8.js} +1 -1
- package/dist/{message_input-DOE5NEU9.js.map → message_input-C6BcWqr8.js.map} +1 -1
- package/dist/{message_input-DMyIOe4y.cjs → message_input-ftx8f8wC.cjs} +1 -1
- package/dist/{message_input-DMyIOe4y.cjs.map → message_input-ftx8f8wC.cjs.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 +636 -636
- 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 +604 -604
- 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 +109 -109
- 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 +254 -254
- 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 +149 -149
- package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
- package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +30 -30
- package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts.map +1 -1
- package/dist/recipes/item_layout/contact_info/contact_info.vue.d.ts +30 -30
- package/dist/recipes/leftbar/callbox/callbox.vue.d.ts +28 -28
- package/dist/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +72 -72
- package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts +215 -215
- package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/general_row/general_row.vue.d.ts +176 -176
- package/dist/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts +80 -80
- package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/group_row/group_row.vue.d.ts +181 -181
- package/dist/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
- package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +10 -10
- package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/Combobox-By01ETlj.js.map +0 -1
- package/dist/Combobox-D4hc1-41.cjs +0 -3
- package/dist/Combobox-D4hc1-41.cjs.map +0 -1
- package/dist/Toast-CHbVmbBg.js.map +0 -1
- package/dist/Toast-DX-REYXG.cjs +0 -2
- package/dist/Toast-DX-REYXG.cjs.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { ordinalSizeValidator as e } from "../../common/validators/index.js";
|
|
2
|
+
import { t } from "../../_plugin-vue_export-helper-BTgDAbhb.js";
|
|
3
|
+
import { PROGRESS_CIRCLE_KINDS as n, PROGRESS_CIRCLE_SIZES as r } from "./progress-circle-constants.js";
|
|
4
|
+
import { createCommentVNode as i, createElementBlock as a, createElementVNode as o, normalizeClass as s, normalizeStyle as c, openBlock as l } from "vue";
|
|
4
5
|
//#region components/ProgressCircle/ProgressCircle.vue
|
|
5
|
-
var
|
|
6
|
+
var u = {
|
|
6
7
|
name: "DtProgressCircle",
|
|
7
8
|
props: {
|
|
8
9
|
ariaLabel: {
|
|
@@ -15,14 +16,14 @@ var l = {
|
|
|
15
16
|
validator: (e) => e >= 0 && e <= 100
|
|
16
17
|
},
|
|
17
18
|
size: {
|
|
18
|
-
type: String,
|
|
19
|
-
default:
|
|
20
|
-
validator:
|
|
19
|
+
type: [String, Number],
|
|
20
|
+
default: 500,
|
|
21
|
+
validator: e(r)
|
|
21
22
|
},
|
|
22
23
|
kind: {
|
|
23
24
|
type: String,
|
|
24
25
|
default: "default",
|
|
25
|
-
validator: (e) => Object.keys(
|
|
26
|
+
validator: (e) => Object.keys(n).includes(e)
|
|
26
27
|
}
|
|
27
28
|
},
|
|
28
29
|
data() {
|
|
@@ -42,10 +43,10 @@ var l = {
|
|
|
42
43
|
return this.isAi ? { stroke: `url(#${this.aiGradientId})` } : {};
|
|
43
44
|
},
|
|
44
45
|
sizeClass() {
|
|
45
|
-
return
|
|
46
|
+
return r[this.size];
|
|
46
47
|
},
|
|
47
48
|
kindClass() {
|
|
48
|
-
return
|
|
49
|
+
return n[this.kind];
|
|
49
50
|
},
|
|
50
51
|
circleRadius() {
|
|
51
52
|
return 12 - this.strokeWidth / 2;
|
|
@@ -68,10 +69,10 @@ var l = {
|
|
|
68
69
|
};
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
|
-
},
|
|
72
|
-
function
|
|
73
|
-
return
|
|
74
|
-
class:
|
|
72
|
+
}, d = ["aria-label", "aria-valuenow"], f = { key: 0 }, p = ["id"], m = ["d", "stroke-width"], h = ["d", "stroke-width"];
|
|
73
|
+
function g(e, t, n, r, u, g) {
|
|
74
|
+
return l(), a("div", {
|
|
75
|
+
class: s(["d-progress-circle", [g.sizeClass, g.kindClass]]),
|
|
75
76
|
role: "progressbar",
|
|
76
77
|
"aria-label": n.ariaLabel,
|
|
77
78
|
tabindex: "-1",
|
|
@@ -79,56 +80,56 @@ function h(e, t, n, l, h, g) {
|
|
|
79
80
|
"aria-valuemin": "0",
|
|
80
81
|
"aria-valuemax": "100",
|
|
81
82
|
"data-qa": "dt-progress-circle"
|
|
82
|
-
}, [(
|
|
83
|
+
}, [(l(), a("svg", {
|
|
83
84
|
class: "d-progress-circle__bar",
|
|
84
|
-
style:
|
|
85
|
+
style: c(g.cssVars),
|
|
85
86
|
viewBox: "0 0 24 24"
|
|
86
87
|
}, [
|
|
87
|
-
g.isAi ? (
|
|
88
|
+
g.isAi ? (l(), a("defs", f, [o("linearGradient", {
|
|
88
89
|
id: g.aiGradientId,
|
|
89
90
|
x1: "0%",
|
|
90
91
|
y1: "0%",
|
|
91
92
|
x2: "100%",
|
|
92
93
|
y2: "100%"
|
|
93
94
|
}, [...t[0] || (t[0] = [
|
|
94
|
-
|
|
95
|
+
o("stop", {
|
|
95
96
|
offset: "0%",
|
|
96
97
|
"stop-color": "var(--dt-color-brand-gold)"
|
|
97
98
|
}, null, -1),
|
|
98
|
-
|
|
99
|
+
o("stop", {
|
|
99
100
|
offset: "33%",
|
|
100
101
|
"stop-color": "var(--dt-color-brand-red)"
|
|
101
102
|
}, null, -1),
|
|
102
|
-
|
|
103
|
+
o("stop", {
|
|
103
104
|
offset: "66%",
|
|
104
105
|
"stop-color": "var(--dt-color-brand-magenta)"
|
|
105
106
|
}, null, -1),
|
|
106
|
-
|
|
107
|
+
o("stop", {
|
|
107
108
|
offset: "100%",
|
|
108
109
|
"stop-color": "var(--dt-color-brand-purple)"
|
|
109
110
|
}, null, -1)
|
|
110
|
-
])], 8,
|
|
111
|
-
n.progress <= 95 ? (
|
|
111
|
+
])], 8, p)])) : i("", !0),
|
|
112
|
+
n.progress <= 95 ? (l(), a("path", {
|
|
112
113
|
key: 1,
|
|
113
114
|
d: g.circlePath,
|
|
114
115
|
class: "d-progress-circle__shape d-progress-circle__shape--track",
|
|
115
116
|
fill: "none",
|
|
116
|
-
"stroke-width":
|
|
117
|
+
"stroke-width": u.strokeWidth,
|
|
117
118
|
"stroke-linecap": "round"
|
|
118
|
-
}, null, 8,
|
|
119
|
-
n.progress > 0 ? (
|
|
119
|
+
}, null, 8, m)) : i("", !0),
|
|
120
|
+
n.progress > 0 ? (l(), a("path", {
|
|
120
121
|
key: 2,
|
|
121
122
|
d: g.circlePath,
|
|
122
123
|
class: "d-progress-circle__shape d-progress-circle__shape--fill",
|
|
123
124
|
fill: "none",
|
|
124
|
-
"stroke-width":
|
|
125
|
+
"stroke-width": u.strokeWidth,
|
|
125
126
|
"stroke-linecap": "round",
|
|
126
|
-
style:
|
|
127
|
-
}, null, 12,
|
|
128
|
-
], 4))], 10,
|
|
127
|
+
style: c(g.fillStrokeStyle)
|
|
128
|
+
}, null, 12, h)) : i("", !0)
|
|
129
|
+
], 4))], 10, d);
|
|
129
130
|
}
|
|
130
|
-
var
|
|
131
|
+
var _ = /* @__PURE__ */ t(u, [["render", g]]);
|
|
131
132
|
//#endregion
|
|
132
|
-
export {
|
|
133
|
+
export { _ as default };
|
|
133
134
|
|
|
134
135
|
//# sourceMappingURL=progress-circle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-circle.js","names":[],"sources":["../../../components/ProgressCircle/ProgressCircle.vue"],"sourcesContent":["<script>\n/**\n * Circular SVG progress indicator for determinate upload or processing progress.\n * @see https://dialtone.dialpad.com/components/progress-circle.html\n */\nimport { PROGRESS_CIRCLE_SIZES, PROGRESS_CIRCLE_KINDS } from './ProgressCircleConstants';\n\nexport default {\n name: 'DtProgressCircle',\n props: {\n /** Accessible label read by screen readers. */\n ariaLabel: { type: String, required: true },\n /** Current progress value (0–100). */\n progress: {\n type: Number,\n default: 0,\n validator: (v) => v >= 0 && v <= 100,\n },\n\n /**\n * The size of the progress indicator, aligning to Dialtone icon sizes.\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n size: {\n type: String,\n default:
|
|
1
|
+
{"version":3,"file":"progress-circle.js","names":[],"sources":["../../../components/ProgressCircle/ProgressCircle.vue"],"sourcesContent":["<script>\n/**\n * Circular SVG progress indicator for determinate upload or processing progress.\n * @see https://dialtone.dialpad.com/components/progress-circle.html\n */\nimport { PROGRESS_CIRCLE_SIZES, PROGRESS_CIRCLE_KINDS } from './ProgressCircleConstants';\nimport { ordinalSizeValidator } from '@/common/validators';\n\nexport default {\n name: 'DtProgressCircle',\n props: {\n /** Accessible label read by screen readers. */\n ariaLabel: { type: String, required: true },\n /** Current progress value (0–100). */\n progress: {\n type: Number,\n default: 0,\n validator: (v) => v >= 0 && v <= 100,\n },\n\n /**\n * The size of the progress indicator, aligning to Dialtone icon sizes.\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n size: {\n type: [String, Number],\n default: 500,\n validator: ordinalSizeValidator(PROGRESS_CIRCLE_SIZES),\n },\n\n /**\n * The color variant of the progress indicator.\n * @values default, brand, critical, positive, warning, info, ai\n */\n kind: {\n type: String,\n default: 'default',\n validator: (k) => Object.keys(PROGRESS_CIRCLE_KINDS).includes(k),\n },\n },\n\n data () {\n return {\n strokeWidth: 3.25,\n uid: Math.random().toString(36).substring(2, 9),\n };\n },\n\n computed: {\n // SVG stroke doesn't support CSS gradients, so the \"ai\" kind uses an inline\n // SVG <linearGradient> referenced via url(#id) instead of a CSS variable.\n isAi () {\n return this.kind === 'ai';\n },\n\n // Unique per-instance to avoid collisions when multiple progress circles coexist.\n aiGradientId () {\n return `progress-circle-ai-gradient-${this.uid}`;\n },\n\n fillStrokeStyle () {\n return this.isAi ? { stroke: `url(#${this.aiGradientId})` } : {};\n },\n\n sizeClass () {\n return PROGRESS_CIRCLE_SIZES[this.size];\n },\n\n kindClass () {\n return PROGRESS_CIRCLE_KINDS[this.kind];\n },\n\n circleRadius () {\n return 12 - (this.strokeWidth / 2);\n },\n\n circleCircumference () {\n return 2 * Math.PI * this.circleRadius;\n },\n\n // Draws a full circle as two arcs so getTotalLength() returns the circumference.\n circlePath () {\n const r = this.circleRadius;\n const top = 12 - r;\n const bottom = 12 + r;\n return `M 12 ${top} A ${r} ${r} 0 0 1 12 ${bottom} A ${r} ${r} 0 0 1 12 ${top} Z`;\n },\n\n // stroke-dasharray/offset control how much of the circle is visually \"filled\".\n cssVars () {\n const C = this.circleCircumference;\n const MIN_VISUAL_PROGRESS = 5;\n const visualProgress = (this.progress > 0 && this.progress < MIN_VISUAL_PROGRESS)\n ? MIN_VISUAL_PROGRESS\n : this.progress;\n const fillLength = C * visualProgress / 100;\n const sw = this.strokeWidth;\n const capArc = sw / 2;\n\n // When both arcs are visible, round linecaps extend capArc past each endpoint.\n // Shorten each arc by capArc at both ends (total sw per arc) so the caps meet\n // exactly at each junction without overlapping. Rotate the fill forward by\n // capArc so its start cap lands at 12 o'clock.\n const both = this.progress > 0 && this.progress < 100;\n const adj = both ? sw : 0;\n\n return {\n // Full-circle arcs use 'none' to avoid round-cap overlap at the path seam.\n '--stroke-dasharray': (!both && this.progress >= 100) ? 'none' : C,\n '--fill-dashoffset': C - Math.max(0, fillLength - adj),\n '--fill-rotate': `${both ? (capArc / C * 360) : 0}deg`,\n '--track-dasharray': (!both && this.progress <= 0) ? 'none' : `${Math.max(0, C - fillLength - adj)} ${C}`,\n '--track-dashoffset': -(fillLength + (both ? capArc : 0)),\n };\n },\n },\n\n};\n</script>\n\n<template>\n <div\n class=\"d-progress-circle\"\n :class=\"[sizeClass, kindClass]\"\n role=\"progressbar\"\n :aria-label=\"ariaLabel\"\n tabindex=\"-1\"\n :aria-valuenow=\"progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n data-qa=\"dt-progress-circle\"\n >\n <svg\n class=\"d-progress-circle__bar\"\n :style=\"cssVars\"\n viewBox=\"0 0 24 24\"\n >\n <defs v-if=\"isAi\">\n <linearGradient\n :id=\"aiGradientId\"\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"100%\"\n >\n <!-- This emulates the AI gradient, for which each color isn't directly mappable to a CSS variable -->\n <stop\n offset=\"0%\"\n stop-color=\"var(--dt-color-brand-gold)\"\n />\n <stop\n offset=\"33%\"\n stop-color=\"var(--dt-color-brand-red)\"\n />\n <stop\n offset=\"66%\"\n stop-color=\"var(--dt-color-brand-magenta)\"\n />\n <stop\n offset=\"100%\"\n stop-color=\"var(--dt-color-brand-purple)\"\n />\n </linearGradient>\n </defs>\n <path\n v-if=\"progress <= 95\"\n :d=\"circlePath\"\n class=\"d-progress-circle__shape d-progress-circle__shape--track\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n stroke-linecap=\"round\"\n />\n <path\n v-if=\"progress > 0\"\n :d=\"circlePath\"\n class=\"d-progress-circle__shape d-progress-circle__shape--fill\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n stroke-linecap=\"round\"\n :style=\"fillStrokeStyle\"\n />\n </svg>\n </div>\n</template>\n"],"mappings":"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"}
|
package/dist/lib/prose/prose.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`./prose-constants.cjs`);let
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/validators/index.cjs`),t=require(`./prose-constants.cjs`);let n=require(`vue`);var r=Object.assign({name:`DtProse`},{__name:`Prose`,props:{size:{type:[String,Number],default:300,validator:e.ordinalSizeValidator(t.PROSE_SIZE_MODIFIERS)},density:{type:[String,Number],default:200,validator:e=>Object.keys(t.PROSE_DENSITY_MODIFIERS).includes(String(e))}},setup(e){let r=e,i=(0,n.computed)(()=>[`d-prose`,t.PROSE_SIZE_MODIFIERS[String(r.size)],t.PROSE_DENSITY_MODIFIERS[String(r.density)]].filter(Boolean)),a=(0,n.ref)(null);function o(e){return e.includes(`-`)}function s(e,n){return t.PROSE_DISALLOWED_ELEMENTS.includes(n)?!(n===`input`&&e.getAttribute(`type`)===`checkbox`&&e.parentElement?.tagName.toLowerCase()===`li`):!1}function c(e,n){let r=t.PROSE_ALLOWED_ATTRIBUTES._global||[],i=t.PROSE_ALLOWED_ATTRIBUTES[n]||[],a=[...r,...i],o=[];for(let n of e.attributes){if(t._PROSE_URL_ATTRIBUTES.includes(n.name)&&!t._isSafeProseUrl(n.value)){o.push(n.name);continue}a.includes(n.name)||t._PROSE_ALLOWED_ATTRIBUTE_PREFIXES.some(e=>n.name.startsWith(e))||o.push(n.name)}for(let t of o)e.removeAttribute(t)}function l(){if(!a.value)return;let e=document.createTreeWalker(a.value,NodeFilter.SHOW_ELEMENT),t=e.nextNode();for(;t;){let n=t.tagName.toLowerCase();c(t,n),t=e.nextNode()}}function u(){if(!a.value)return;let e=document.createTreeWalker(a.value,NodeFilter.SHOW_ELEMENT),t=e.nextNode();for(;t;){let n=t.tagName.toLowerCase();o(n)?console.error(`DtProse: Custom element <${n}> is not allowed inside prose content. Only plain HTML elements are permitted.`):s(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()}}return(0,n.onMounted)(l),(0,n.onUpdated)(l),process.env.NODE_ENV!==`production`&&((0,n.onMounted)(u),(0,n.onUpdated)(u)),(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{ref_key:`proseRef`,ref:a,class:(0,n.normalizeClass)(i.value),"data-qa":`dt-prose`},[(0,n.renderSlot)(e.$slots,`default`)],2))}});exports.default=r;
|
|
2
2
|
//# sourceMappingURL=prose.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prose.cjs","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.cjs","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":"0gBA2BA,IAAM,EAAQ,EAsBR,GAAA,EAAA,EAAA,cAA8B,CAClC,UACA,EAAA,qBAAqB,OAAO,EAAM,KAAK,EACvC,EAAA,wBAAwB,OAAO,EAAM,QAAQ,EAC9C,CAAC,OAAO,QAAQ,CAAC,CAEZ,GAAA,EAAA,EAAA,KAAe,KAAK,CAE1B,SAAS,EAAiB,EAAS,CACjC,OAAO,EAAQ,SAAS,IAAI,CAG9B,SAAS,EAAqB,EAAM,EAAS,CAI3C,OAHK,EAAA,0BAA0B,SAAS,EAAQ,CAGzC,EACL,IAAY,SACZ,EAAK,aAAa,OAAO,GAAK,YAC9B,EAAK,eAAe,QAAQ,aAAa,GAAK,MANS,GAU3D,SAAS,EAA2B,EAAM,EAAS,CACjD,IAAM,EAAgB,EAAA,yBAAyB,SAAW,EAAE,CACtD,EAAgB,EAAA,yBAAyB,IAAY,EAAE,CACvD,EAAU,CAAC,GAAG,EAAe,GAAG,EAAc,CAE9C,EAAgB,EAAE,CACxB,IAAK,IAAM,KAAQ,EAAK,WAAY,CAClC,GAAI,EAAA,sBAAsB,SAAS,EAAK,KAAK,EAAI,CAAC,EAAA,gBAAgB,EAAK,MAAM,CAAE,CAC7E,EAAc,KAAK,EAAK,KAAK,CAC7B,SAEE,EAAQ,SAAS,EAAK,KAAK,EAC3B,EAAA,kCAAkC,KAAK,GAAU,EAAK,KAAK,WAAW,EAAO,CAAC,EAClF,EAAc,KAAK,EAAK,KAAK,CAE/B,IAAK,IAAM,KAAY,EACrB,EAAK,gBAAgB,EAAS,CAIlC,SAAS,GAAmB,CAC1B,GAAI,CAAC,EAAS,MAAO,OAErB,IAAM,EAAS,SAAS,iBACtB,EAAS,MACT,WAAW,aACZ,CAEG,EAAO,EAAO,UAAU,CAC5B,KAAO,GAAM,CACX,IAAM,EAAU,EAAK,QAAQ,aAAa,CAC1C,EAA0B,EAAM,EAAQ,CAExC,EAAO,EAAO,UAAU,EAI5B,SAAS,GAAmB,CAC1B,GAAI,CAAC,EAAS,MAAO,OAErB,IAAM,EAAS,SAAS,iBACtB,EAAS,MACT,WAAW,aACZ,CAEG,EAAO,EAAO,UAAU,CAC5B,KAAO,GAAM,CACX,IAAM,EAAU,EAAK,QAAQ,aAAa,CAEtC,EAAgB,EAAQ,CAC1B,QAAQ,MACN,4BAA4B,EAAQ,gFAErC,CACQ,EAAoB,EAAM,EAAQ,EAC3C,QAAQ,MACN,aAAa,EAAQ,mHAEtB,CAGH,EAAO,EAAO,UAAU,SAI5B,EAAA,EAAA,WAAU,EAAgB,EAC1B,EAAA,EAAA,WAAU,EAAgB,CAE1B,QAAA,IAAA,WAA6B,gBAC3B,EAAA,EAAA,WAAU,EAAgB,EAC1B,EAAA,EAAA,WAAU,EAAgB,qDArIpB,MAAA,SANA,WAAJ,IAAI,EACH,OAAA,EAAA,EAAA,gBAAO,EAAA,MAAY,CACpB,UAAQ,8BAGA,EAAA,OAAA,UAAA,CAAA,CAAA,EAAA"}
|
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,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":"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"}
|
|
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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"}
|