@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.
Files changed (423) hide show
  1. package/dist/Combobox-CYEmi3dv.cjs +3 -0
  2. package/dist/Combobox-CYEmi3dv.cjs.map +1 -0
  3. package/dist/{Combobox-By01ETlj.js → Combobox-D8nQeBIf.js} +33 -32
  4. package/dist/Combobox-D8nQeBIf.js.map +1 -0
  5. package/dist/MarkdownRenderer-D5XWsyQk.cjs.map +1 -1
  6. package/dist/{MarkdownRenderer-C3MZDB2I.js → MarkdownRenderer-NSSny0ID.js} +2 -2
  7. package/dist/{MarkdownRenderer-C3MZDB2I.js.map → MarkdownRenderer-NSSny0ID.js.map} +1 -1
  8. package/dist/{RichTextEditor-BX-5tCOx.cjs → RichTextEditor-B9NGgB03.cjs} +2 -2
  9. package/dist/{RichTextEditor-BX-5tCOx.cjs.map → RichTextEditor-B9NGgB03.cjs.map} +1 -1
  10. package/dist/{RichTextEditor-D8Kas5A3.js → RichTextEditor-DxbZSRop.js} +4 -4
  11. package/dist/{RichTextEditor-D8Kas5A3.js.map → RichTextEditor-DxbZSRop.js.map} +1 -1
  12. package/dist/TextList-B6XFfQfD.js +88 -0
  13. package/dist/TextList-B6XFfQfD.js.map +1 -0
  14. package/dist/TextList-Dd-ROFiI.cjs +2 -0
  15. package/dist/TextList-Dd-ROFiI.cjs.map +1 -0
  16. package/dist/TextListItem-DIlrCkaM.cjs +2 -0
  17. package/dist/TextListItem-DIlrCkaM.cjs.map +1 -0
  18. package/dist/TextListItem-ImUi_FWh.js +62 -0
  19. package/dist/TextListItem-ImUi_FWh.js.map +1 -0
  20. package/dist/{Toast-CHbVmbBg.js → Toast-BIHkIpZP.js} +95 -94
  21. package/dist/Toast-BIHkIpZP.js.map +1 -0
  22. package/dist/Toast-D8ARDEgT.cjs +2 -0
  23. package/dist/Toast-D8ARDEgT.cjs.map +1 -0
  24. package/dist/{attachment_carousel-BFIAXWOZ.js → attachment_carousel-CyiexPBk.js} +1 -1
  25. package/dist/{attachment_carousel-BFIAXWOZ.js.map → attachment_carousel-CyiexPBk.js.map} +1 -1
  26. package/dist/{attachment_carousel-BJxqNJ5T.cjs → attachment_carousel-DJqILY7f.cjs} +1 -1
  27. package/dist/{attachment_carousel-BJxqNJ5T.cjs.map → attachment_carousel-DJqILY7f.cjs.map} +1 -1
  28. package/dist/common/mixins/input.d.ts +4 -4
  29. package/dist/common/mixins/input_group.d.ts +2 -2
  30. package/dist/common/sr_only_close_button.vue.d.ts +30 -30
  31. package/dist/common/sr_only_close_button.vue.d.ts.map +1 -1
  32. package/dist/common/validators/index.cjs +1 -1
  33. package/dist/common/validators/index.cjs.map +1 -1
  34. package/dist/common/validators/index.d.ts +2 -0
  35. package/dist/common/validators/index.d.ts.map +1 -1
  36. package/dist/common/validators/index.js +9 -2
  37. package/dist/common/validators/index.js.map +1 -1
  38. package/dist/component-documentation.json +1 -1
  39. package/dist/components/Avatar/Avatar.vue.d.ts +10 -10
  40. package/dist/components/Avatar/Avatar.vue.d.ts.map +1 -1
  41. package/dist/components/Badge/Badge.vue.d.ts +13 -13
  42. package/dist/components/Banner/Banner.vue.d.ts +142 -107
  43. package/dist/components/Banner/Banner.vue.d.ts.map +1 -1
  44. package/dist/components/Box/Box.vue.d.ts +18 -0
  45. package/dist/components/Box/Box.vue.d.ts.map +1 -1
  46. package/dist/components/Box/BoxConstants.d.ts +4 -0
  47. package/dist/components/Box/BoxConstants.d.ts.map +1 -1
  48. package/dist/components/Box/Validators.d.ts +4 -0
  49. package/dist/components/Box/Validators.d.ts.map +1 -1
  50. package/dist/components/Box/index.d.ts +1 -1
  51. package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts +1 -0
  52. package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts.map +1 -1
  53. package/dist/components/Breadcrumbs/Breadcrumbs.vue.d.ts +3 -2
  54. package/dist/components/Button/Button.vue.d.ts +25 -25
  55. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  56. package/dist/components/Card/Card.vue.d.ts +6 -6
  57. package/dist/components/Checkbox/Checkbox.vue.d.ts +62 -27
  58. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
  59. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +82 -47
  60. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -1
  61. package/dist/components/Chip/Chip.vue.d.ts +40 -40
  62. package/dist/components/Chip/Chip.vue.d.ts.map +1 -1
  63. package/dist/components/Codeblock/Codeblock.vue.d.ts +2 -2
  64. package/dist/components/Collapsible/Collapsible.vue.d.ts +39 -39
  65. package/dist/components/Collapsible/Collapsible.vue.d.ts.map +1 -1
  66. package/dist/components/Combobox/Combobox.vue.d.ts +66 -66
  67. package/dist/components/Combobox/Combobox.vue.d.ts.map +1 -1
  68. package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts +29 -29
  69. package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts.map +1 -1
  70. package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts +35 -35
  71. package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts.map +1 -1
  72. package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts +216 -216
  73. package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts.map +1 -1
  74. package/dist/components/DescriptionList/DescriptionList.vue.d.ts +4 -4
  75. package/dist/components/Dropdown/Dropdown.vue.d.ts +82 -82
  76. package/dist/components/Dropdown/Dropdown.vue.d.ts.map +1 -1
  77. package/dist/components/Emoji/Emoji.vue.d.ts +17 -17
  78. package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts +73 -38
  79. package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts.map +1 -1
  80. package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts +73 -38
  81. package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts.map +1 -1
  82. package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts +24 -24
  83. package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts.map +1 -1
  84. package/dist/components/EmptyState/EmptyState.vue.d.ts.map +1 -1
  85. package/dist/components/FilterPill/FilterPill.vue.d.ts +380 -310
  86. package/dist/components/FilterPill/FilterPill.vue.d.ts.map +1 -1
  87. package/dist/components/Hovercard/Hovercard.vue.d.ts +156 -156
  88. package/dist/components/Hovercard/Hovercard.vue.d.ts.map +1 -1
  89. package/dist/components/Icon/Icon.vue.d.ts +7 -7
  90. package/dist/components/ImageViewer/ImageViewer.vue.d.ts +60 -60
  91. package/dist/components/ImageViewer/ImageViewer.vue.d.ts.map +1 -1
  92. package/dist/components/Input/Input.vue.d.ts +73 -38
  93. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  94. package/dist/components/InputGroup/InputGroup.vue.d.ts +82 -47
  95. package/dist/components/InputGroup/InputGroup.vue.d.ts.map +1 -1
  96. package/dist/components/ItemLayout/ItemLayout.vue.d.ts +20 -20
  97. package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts +116 -81
  98. package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts.map +1 -1
  99. package/dist/components/Link/Link.vue.d.ts +1 -0
  100. package/dist/components/Link/LinkConstants.d.ts +3 -0
  101. package/dist/components/Link/LinkConstants.d.ts.map +1 -1
  102. package/dist/components/ListItem/ListItem.vue.d.ts +27 -27
  103. package/dist/components/ListItem/ListItem.vue.d.ts.map +1 -1
  104. package/dist/components/ListItemGroup/ListItemGroup.vue.d.ts +4 -4
  105. package/dist/components/Loader/Loader.vue.d.ts +7 -7
  106. package/dist/components/Modal/Modal.vue.d.ts +115 -86
  107. package/dist/components/Modal/Modal.vue.d.ts.map +1 -1
  108. package/dist/components/Modal/ModalConstants.d.ts +0 -5
  109. package/dist/components/Modal/index.d.ts +1 -1
  110. package/dist/components/Notice/Notice.vue.d.ts +142 -107
  111. package/dist/components/Notice/Notice.vue.d.ts.map +1 -1
  112. package/dist/components/Notice/NoticeAction.vue.d.ts +62 -62
  113. package/dist/components/Notice/NoticeAction.vue.d.ts.map +1 -1
  114. package/dist/components/Notice/NoticeContent.vue.d.ts +40 -5
  115. package/dist/components/Notice/NoticeContent.vue.d.ts.map +1 -1
  116. package/dist/components/Notice/NoticeIcon.vue.d.ts +32 -32
  117. package/dist/components/Notice/NoticeIcon.vue.d.ts.map +1 -1
  118. package/dist/components/Pagination/Pagination.vue.d.ts +40 -40
  119. package/dist/components/Pagination/Pagination.vue.d.ts.map +1 -1
  120. package/dist/components/Popover/Popover.vue.d.ts +78 -78
  121. package/dist/components/Popover/Popover.vue.d.ts.map +1 -1
  122. package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts +34 -34
  123. package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts.map +1 -1
  124. package/dist/components/ProgressCircle/ProgressCircle.vue.d.ts +7 -7
  125. package/dist/components/Prose/Prose.vue.d.ts.map +1 -1
  126. package/dist/components/Radio/Radio.vue.d.ts +62 -27
  127. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  128. package/dist/components/RadioGroup/RadioGroup.vue.d.ts +82 -47
  129. package/dist/components/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
  130. package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts +6 -5
  131. package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts.map +1 -1
  132. package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts +10 -10
  133. package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts.map +1 -1
  134. package/dist/components/RichTextEditor/Extensions/Emoji/EmojiComponent.vue.d.ts +17 -17
  135. package/dist/components/RichTextEditor/Extensions/Emoji/EmojiSuggestion.vue.d.ts +17 -17
  136. package/dist/components/RichTextEditor/Extensions/Mentions/MentionComponent.vue.d.ts +1 -0
  137. package/dist/components/RichTextEditor/Extensions/Mentions/MentionSuggestion.vue.d.ts +46 -11
  138. package/dist/components/RichTextEditor/Extensions/SlashCommand/SlashCommandSuggestion.vue.d.ts +36 -1
  139. package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts +27 -27
  140. package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts.map +1 -1
  141. package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts +189 -154
  142. package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts.map +1 -1
  143. package/dist/components/RootLayout/RootLayout.vue.d.ts +10 -10
  144. package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
  145. package/dist/components/SelectMenu/SelectMenu.vue.d.ts +69 -34
  146. package/dist/components/SelectMenu/SelectMenu.vue.d.ts.map +1 -1
  147. package/dist/components/Skeleton/Skeleton.vue.d.ts +8 -8
  148. package/dist/components/Skeleton/SkeletonListItem.vue.d.ts +4 -4
  149. package/dist/components/Skeleton/SkeletonParagraph.vue.d.ts +2 -2
  150. package/dist/components/Skeleton/SkeletonShape.vue.d.ts +2 -2
  151. package/dist/components/SplitButton/SplitButton.vue.d.ts +157 -157
  152. package/dist/components/SplitButton/SplitButton.vue.d.ts.map +1 -1
  153. package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts +30 -30
  154. package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts.map +1 -1
  155. package/dist/components/SplitButton/SplitButtonStart.vue.d.ts +31 -31
  156. package/dist/components/Tab/Tab.vue.d.ts +33 -33
  157. package/dist/components/Tab/TabGroup.vue.d.ts +6 -6
  158. package/dist/components/Tab/TabPanel.vue.d.ts +2 -2
  159. package/dist/components/Text/Text.vue.d.ts +36 -1
  160. package/dist/components/Text/Text.vue.d.ts.map +1 -1
  161. package/dist/components/Text/TextConstants.d.ts +53 -0
  162. package/dist/components/Text/TextConstants.d.ts.map +1 -1
  163. package/dist/components/Text/index.d.ts +1 -1
  164. package/dist/components/TextList/TextList.vue.d.ts +87 -0
  165. package/dist/components/TextList/TextList.vue.d.ts.map +1 -0
  166. package/dist/components/TextList/TextListConstants.d.ts +20 -0
  167. package/dist/components/TextList/TextListConstants.d.ts.map +1 -0
  168. package/dist/components/TextList/TextListItem.vue.d.ts +60 -0
  169. package/dist/components/TextList/TextListItem.vue.d.ts.map +1 -0
  170. package/dist/components/TextList/Validators.d.ts +5 -0
  171. package/dist/components/TextList/Validators.d.ts.map +1 -0
  172. package/dist/components/TextList/index.d.ts +4 -0
  173. package/dist/components/TextList/index.d.ts.map +1 -0
  174. package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts +144 -109
  175. package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts.map +1 -1
  176. package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts +34 -34
  177. package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts.map +1 -1
  178. package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts +142 -107
  179. package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts.map +1 -1
  180. package/dist/components/Toast/Toast.vue.d.ts +580 -440
  181. package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
  182. package/dist/components/Toggle/Toggle.vue.d.ts +4 -4
  183. package/dist/components/Toggle/Toggle.vue.d.ts.map +1 -1
  184. package/dist/components/Tooltip/Tooltip.vue.d.ts +4 -4
  185. package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts +22 -22
  186. package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts.map +1 -1
  187. package/dist/dialtone-vue.cjs +1 -1
  188. package/dist/dialtone-vue.js +146 -142
  189. package/dist/index.d.ts +1 -0
  190. package/dist/lib/attachment-carousel/attachment-carousel.cjs +1 -1
  191. package/dist/lib/attachment-carousel/attachment-carousel.js +1 -1
  192. package/dist/lib/attachment-carousel/index.cjs +1 -1
  193. package/dist/lib/attachment-carousel/index.js +1 -1
  194. package/dist/lib/avatar/avatar.cjs +1 -1
  195. package/dist/lib/avatar/avatar.cjs.map +1 -1
  196. package/dist/lib/avatar/avatar.js +55 -54
  197. package/dist/lib/avatar/avatar.js.map +1 -1
  198. package/dist/lib/badge/badge.cjs +1 -1
  199. package/dist/lib/badge/badge.cjs.map +1 -1
  200. package/dist/lib/badge/badge.js +36 -35
  201. package/dist/lib/badge/badge.js.map +1 -1
  202. package/dist/lib/box/box-constants.cjs +1 -1
  203. package/dist/lib/box/box-constants.cjs.map +1 -1
  204. package/dist/lib/box/box-constants.js +34 -7
  205. package/dist/lib/box/box-constants.js.map +1 -1
  206. package/dist/lib/box/box.cjs +1 -1
  207. package/dist/lib/box/box.cjs.map +1 -1
  208. package/dist/lib/box/box.js +93 -34
  209. package/dist/lib/box/box.js.map +1 -1
  210. package/dist/lib/box/index.cjs +1 -1
  211. package/dist/lib/box/index.js +3 -3
  212. package/dist/lib/box/validators.cjs +1 -1
  213. package/dist/lib/box/validators.cjs.map +1 -1
  214. package/dist/lib/box/validators.js +4 -4
  215. package/dist/lib/box/validators.js.map +1 -1
  216. package/dist/lib/button/button.cjs +1 -1
  217. package/dist/lib/button/button.cjs.map +1 -1
  218. package/dist/lib/button/button.js +69 -68
  219. package/dist/lib/button/button.js.map +1 -1
  220. package/dist/lib/chip/chip.cjs +1 -1
  221. package/dist/lib/chip/chip.cjs.map +1 -1
  222. package/dist/lib/chip/chip.js +36 -35
  223. package/dist/lib/chip/chip.js.map +1 -1
  224. package/dist/lib/codeblock/codeblock.cjs +1 -1
  225. package/dist/lib/codeblock/codeblock.cjs.map +1 -1
  226. package/dist/lib/codeblock/codeblock.js +11 -10
  227. package/dist/lib/codeblock/codeblock.js.map +1 -1
  228. package/dist/lib/combobox/combobox.cjs +1 -1
  229. package/dist/lib/combobox/combobox.js +1 -1
  230. package/dist/lib/combobox/index.cjs +1 -1
  231. package/dist/lib/combobox/index.js +1 -1
  232. package/dist/lib/combobox-multi-select/combobox-multi-select.cjs +1 -1
  233. package/dist/lib/combobox-multi-select/combobox-multi-select.cjs.map +1 -1
  234. package/dist/lib/combobox-multi-select/combobox-multi-select.js +53 -53
  235. package/dist/lib/combobox-multi-select/combobox-multi-select.js.map +1 -1
  236. package/dist/lib/combobox-with-popover/combobox-with-popover.cjs +1 -1
  237. package/dist/lib/combobox-with-popover/combobox-with-popover.cjs.map +1 -1
  238. package/dist/lib/combobox-with-popover/combobox-with-popover.js +48 -47
  239. package/dist/lib/combobox-with-popover/combobox-with-popover.js.map +1 -1
  240. package/dist/lib/editor/editor.cjs +1 -1
  241. package/dist/lib/editor/editor.js +2 -2
  242. package/dist/lib/emoji/emoji.cjs +1 -1
  243. package/dist/lib/emoji/emoji.cjs.map +1 -1
  244. package/dist/lib/emoji/emoji.js +25 -24
  245. package/dist/lib/emoji/emoji.js.map +1 -1
  246. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs +1 -1
  247. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs.map +1 -1
  248. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js +20 -19
  249. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js.map +1 -1
  250. package/dist/lib/empty-state/empty-state.cjs +1 -1
  251. package/dist/lib/empty-state/empty-state.cjs.map +1 -1
  252. package/dist/lib/empty-state/empty-state.js +31 -30
  253. package/dist/lib/empty-state/empty-state.js.map +1 -1
  254. package/dist/lib/filter-pill/filter-pill.cjs +1 -1
  255. package/dist/lib/filter-pill/filter-pill.cjs.map +1 -1
  256. package/dist/lib/filter-pill/filter-pill.js +73 -72
  257. package/dist/lib/filter-pill/filter-pill.js.map +1 -1
  258. package/dist/lib/icon/icon.cjs +1 -1
  259. package/dist/lib/icon/icon.cjs.map +1 -1
  260. package/dist/lib/icon/icon.js +16 -15
  261. package/dist/lib/icon/icon.js.map +1 -1
  262. package/dist/lib/input/input.cjs +1 -1
  263. package/dist/lib/input/input.cjs.map +1 -1
  264. package/dist/lib/input/input.js +64 -63
  265. package/dist/lib/input/input.js.map +1 -1
  266. package/dist/lib/link/link-constants.cjs +1 -1
  267. package/dist/lib/link/link-constants.cjs.map +1 -1
  268. package/dist/lib/link/link-constants.js +11 -9
  269. package/dist/lib/link/link-constants.js.map +1 -1
  270. package/dist/lib/link/link.cjs +1 -1
  271. package/dist/lib/link/link.cjs.map +1 -1
  272. package/dist/lib/link/link.js +17 -14
  273. package/dist/lib/link/link.js.map +1 -1
  274. package/dist/lib/loader/loader.cjs +3 -3
  275. package/dist/lib/loader/loader.cjs.map +1 -1
  276. package/dist/lib/loader/loader.js +21 -20
  277. package/dist/lib/loader/loader.js.map +1 -1
  278. package/dist/lib/message-input/index.cjs +1 -1
  279. package/dist/lib/message-input/index.js +1 -1
  280. package/dist/lib/message-input/message-input.cjs +1 -1
  281. package/dist/lib/message-input/message-input.js +1 -1
  282. package/dist/lib/modal/index.cjs +1 -1
  283. package/dist/lib/modal/index.js +3 -3
  284. package/dist/lib/modal/modal-constants.cjs +1 -1
  285. package/dist/lib/modal/modal-constants.cjs.map +1 -1
  286. package/dist/lib/modal/modal-constants.js +1 -4
  287. package/dist/lib/modal/modal-constants.js.map +1 -1
  288. package/dist/lib/modal/modal.cjs +1 -1
  289. package/dist/lib/modal/modal.cjs.map +1 -1
  290. package/dist/lib/modal/modal.js +40 -42
  291. package/dist/lib/modal/modal.js.map +1 -1
  292. package/dist/lib/popover/popover.cjs +1 -1
  293. package/dist/lib/popover/popover.cjs.map +1 -1
  294. package/dist/lib/popover/popover.js +1 -1
  295. package/dist/lib/popover/popover.js.map +1 -1
  296. package/dist/lib/progress-circle/progress-circle.cjs +1 -1
  297. package/dist/lib/progress-circle/progress-circle.cjs.map +1 -1
  298. package/dist/lib/progress-circle/progress-circle.js +33 -32
  299. package/dist/lib/progress-circle/progress-circle.js.map +1 -1
  300. package/dist/lib/prose/prose.cjs +1 -1
  301. package/dist/lib/prose/prose.cjs.map +1 -1
  302. package/dist/lib/prose/prose.js +23 -22
  303. package/dist/lib/prose/prose.js.map +1 -1
  304. package/dist/lib/rich-text-editor/index.cjs +1 -1
  305. package/dist/lib/rich-text-editor/index.js +1 -1
  306. package/dist/lib/rich-text-editor/markdown-renderer.js +1 -1
  307. package/dist/lib/rich-text-editor/rich-text-editor.cjs +1 -1
  308. package/dist/lib/rich-text-editor/rich-text-editor.js +1 -1
  309. package/dist/lib/segmented-control/segmented-control.cjs +1 -1
  310. package/dist/lib/segmented-control/segmented-control.cjs.map +1 -1
  311. package/dist/lib/segmented-control/segmented-control.js +42 -41
  312. package/dist/lib/segmented-control/segmented-control.js.map +1 -1
  313. package/dist/lib/select-menu/select-menu.cjs +1 -1
  314. package/dist/lib/select-menu/select-menu.cjs.map +1 -1
  315. package/dist/lib/select-menu/select-menu.js +48 -47
  316. package/dist/lib/select-menu/select-menu.js.map +1 -1
  317. package/dist/lib/split-button/split-button.cjs +1 -1
  318. package/dist/lib/split-button/split-button.cjs.map +1 -1
  319. package/dist/lib/split-button/split-button.js +45 -44
  320. package/dist/lib/split-button/split-button.js.map +1 -1
  321. package/dist/lib/tab/tab-group.cjs +1 -1
  322. package/dist/lib/tab/tab-group.cjs.map +1 -1
  323. package/dist/lib/tab/tab-group.js +34 -35
  324. package/dist/lib/tab/tab-group.js.map +1 -1
  325. package/dist/lib/text/index.cjs +1 -1
  326. package/dist/lib/text/index.js +3 -3
  327. package/dist/lib/text/text-constants.cjs +1 -1
  328. package/dist/lib/text/text-constants.cjs.map +1 -1
  329. package/dist/lib/text/text-constants.js +70 -21
  330. package/dist/lib/text/text-constants.js.map +1 -1
  331. package/dist/lib/text/text.cjs +1 -1
  332. package/dist/lib/text/text.cjs.map +1 -1
  333. package/dist/lib/text/text.js +72 -37
  334. package/dist/lib/text/text.js.map +1 -1
  335. package/dist/lib/text-list/index.cjs +1 -0
  336. package/dist/lib/text-list/index.js +4 -0
  337. package/dist/lib/text-list/text-list-constants.cjs +2 -0
  338. package/dist/lib/text-list/text-list-constants.cjs.map +1 -0
  339. package/dist/lib/text-list/text-list-constants.js +31 -0
  340. package/dist/lib/text-list/text-list-constants.js.map +1 -0
  341. package/dist/lib/text-list/text-list-item.cjs +1 -0
  342. package/dist/lib/text-list/text-list-item.js +2 -0
  343. package/dist/lib/text-list/text-list.cjs +1 -0
  344. package/dist/lib/text-list/text-list.js +2 -0
  345. package/dist/lib/text-list/validators.cjs +2 -0
  346. package/dist/lib/text-list/validators.cjs.map +1 -0
  347. package/dist/lib/text-list/validators.js +10 -0
  348. package/dist/lib/text-list/validators.js.map +1 -0
  349. package/dist/lib/toast/index.cjs +1 -1
  350. package/dist/lib/toast/index.js +1 -1
  351. package/dist/lib/toast/toast.cjs +1 -1
  352. package/dist/lib/toast/toast.js +1 -1
  353. package/dist/lib/toggle/toggle.cjs +1 -1
  354. package/dist/lib/toggle/toggle.cjs.map +1 -1
  355. package/dist/lib/toggle/toggle.js +23 -22
  356. package/dist/lib/toggle/toggle.js.map +1 -1
  357. package/dist/{message_input-CbQCd07F.js → message_input-C6BcWqr8.js} +2 -2
  358. package/dist/{message_input-CbQCd07F.js.map → message_input-C6BcWqr8.js.map} +1 -1
  359. package/dist/{message_input-dBQwgyjI.cjs → message_input-ftx8f8wC.cjs} +2 -2
  360. package/dist/{message_input-dBQwgyjI.cjs.map → message_input-ftx8f8wC.cjs.map} +1 -1
  361. package/dist/node_modules/@tiptap/vue-3.cjs.map +1 -1
  362. package/dist/node_modules/@tiptap/vue-3.js +1 -1
  363. package/dist/node_modules/@tiptap/vue-3.js.map +1 -1
  364. package/dist/recipes/buttons/callbar_button/callbar_button.vue.d.ts +33 -33
  365. package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts +149 -149
  366. package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts.map +1 -1
  367. package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +147 -147
  368. package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts.map +1 -1
  369. package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts +173 -173
  370. package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts.map +1 -1
  371. package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts +40 -40
  372. package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts.map +1 -1
  373. package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +132 -132
  374. package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts.map +1 -1
  375. package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +97 -97
  376. package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts.map +1 -1
  377. package/dist/recipes/conversation_view/editor/EditorToolbarButton.vue.d.ts +25 -25
  378. package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts +107 -107
  379. package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts.map +1 -1
  380. package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts +103 -103
  381. package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts.map +1 -1
  382. package/dist/recipes/conversation_view/editor/editor.vue.d.ts +672 -637
  383. package/dist/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  384. package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +70 -70
  385. package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts.map +1 -1
  386. package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts +66 -66
  387. package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts.map +1 -1
  388. package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +55 -55
  389. package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
  390. package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts +55 -55
  391. package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts.map +1 -1
  392. package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts +784 -609
  393. package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  394. package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts +145 -110
  395. package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts.map +1 -1
  396. package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts +326 -256
  397. package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts.map +1 -1
  398. package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts +185 -150
  399. package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
  400. package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +30 -30
  401. package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts.map +1 -1
  402. package/dist/recipes/item_layout/contact_info/contact_info.vue.d.ts +30 -30
  403. package/dist/recipes/leftbar/callbox/callbox.vue.d.ts +28 -28
  404. package/dist/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
  405. package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +72 -72
  406. package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
  407. package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts +215 -215
  408. package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
  409. package/dist/recipes/leftbar/general_row/general_row.vue.d.ts +176 -176
  410. package/dist/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
  411. package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts +80 -80
  412. package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts.map +1 -1
  413. package/dist/recipes/leftbar/group_row/group_row.vue.d.ts +181 -181
  414. package/dist/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
  415. package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +10 -10
  416. package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts.map +1 -1
  417. package/package.json +4 -4
  418. package/dist/Combobox-By01ETlj.js.map +0 -1
  419. package/dist/Combobox-D4hc1-41.cjs +0 -3
  420. package/dist/Combobox-D4hc1-41.cjs.map +0 -1
  421. package/dist/Toast-CHbVmbBg.js.map +0 -1
  422. package/dist/Toast-DX-REYXG.cjs +0 -2
  423. package/dist/Toast-DX-REYXG.cjs.map +0 -1
@@ -1,42 +1,43 @@
1
- import { PROSE_ALLOWED_ATTRIBUTES as e, PROSE_DENSITY_MODIFIERS as t, PROSE_DISALLOWED_ELEMENTS as n, PROSE_SIZE_MODIFIERS as r, _PROSE_ALLOWED_ATTRIBUTE_PREFIXES as i, _PROSE_URL_ATTRIBUTES as a, _isSafeProseUrl as o } from "./prose-constants.js";
2
- import { computed as s, createElementBlock as c, normalizeClass as l, onMounted as u, onUpdated as d, openBlock as f, ref as p, renderSlot as m } from "vue";
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 h = /* @__PURE__ */ Object.assign({ name: "DtProse" }, {
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: (e) => Object.keys(r).includes(String(e))
11
+ validator: e(i)
11
12
  },
12
13
  density: {
13
14
  type: [String, Number],
14
15
  default: 200,
15
- validator: (e) => Object.keys(t).includes(String(e))
16
+ validator: (e) => Object.keys(n).includes(String(e))
16
17
  }
17
18
  },
18
- setup(h) {
19
- let g = h, _ = s(() => [
19
+ setup(e) {
20
+ let g = e, _ = c(() => [
20
21
  "d-prose",
21
- r[String(g.size)],
22
- t[String(g.density)]
23
- ].filter(Boolean)), v = p(null);
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 n.includes(t) ? !(t === "input" && e.getAttribute("type") === "checkbox" && e.parentElement?.tagName.toLowerCase() === "li") : !1;
29
+ return r.includes(t) ? !(t === "input" && e.getAttribute("type") === "checkbox" && e.parentElement?.tagName.toLowerCase() === "li") : !1;
29
30
  }
30
- function x(t, n) {
31
- let r = e._global || [], s = e[n] || [], c = [...r, ...s], l = [];
32
- for (let e of t.attributes) {
33
- if (a.includes(e.name) && !o(e.value)) {
34
- l.push(e.name);
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(e.name) || i.some((t) => e.name.startsWith(t)) || l.push(e.name);
38
+ c.includes(t.name) || a.some((e) => t.name.startsWith(e)) || l.push(t.name);
38
39
  }
39
- for (let e of l) t.removeAttribute(e);
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 u(S), d(S), process.env.NODE_ENV !== "production" && (u(C), d(C)), (e, t) => (f(), c("div", {
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: l(_.value),
61
+ class: u(_.value),
61
62
  "data-qa": "dt-prose"
62
- }, [m(e.$slots, "default")], 2));
63
+ }, [h(e.$slots, "default")], 2));
63
64
  }
64
65
  });
65
66
  //#endregion
66
- export { h as default };
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: (s) => Object.keys(PROSE_SIZE_MODIFIERS).includes(String(s)),\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":";;;;;;;;;;;;;;;;;;EA0BA,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,mBA3I1B,EAOM,OAAA;YANA;GAAJ,KAAI;GACH,OAAK,EAAE,EAAA,MAAY;GACpB,WAAQ;MAGR,EAAQ,EAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
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-BX-5tCOx.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
+ 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-D8Kas5A3.js";
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-C3MZDB2I.js";
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-BX-5tCOx.cjs`);exports.default=e.t;
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-D8Kas5A3.js";
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/utils/index.cjs`),t=require(`../stack/stack.cjs`),n=require(`../../common/composables/use-indicator-animation.cjs`),r=require(`./segmented-control-constants.cjs`);let i=require(`vue`);var a=Object.assign({name:`DtSegmentedControl`},{__name:`SegmentedControl`,props:{id:{type:String,default(){return e.getUniqueString()}},modelValue:{type:String,required:!0},ariaLabel:{type:String,default:void 0},orientation:{type:String,default:r.SEGMENTED_CONTROL_ORIENTATION_DEFAULT,validator:e=>r.SEGMENTED_CONTROL_ORIENTATIONS.includes(e)},size:{type:[String,Number],default:200,validator:e=>r.SEGMENTED_CONTROL_SIZES.includes(String(e))},activationMode:{type:String,default:r.SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT,validator:e=>r.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:r.SEGMENTED_CONTROL_SPREAD_DEFAULT,validator:e=>r.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:a}){let o=e,s=a,c=(0,i.ref)(null),l=(0,i.ref)(null),u=(0,i.computed)(()=>o.orientation===`vertical`?`column`:`row`),d=(0,i.computed)(()=>[`d-segmented-control`,r.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,i.reactive)({selected:o.modelValue,disabled:o.disabled,size:o.size,labelClass:o.labelClass});(0,i.watchEffect)(()=>{f.selected=o.modelValue,f.disabled=o.disabled,f.size=o.size,f.labelClass=o.labelClass}),(0,i.provide)(r.SEGMENTED_CONTROL_CONTEXT_KEY,f),(0,i.provide)(r.SEGMENTED_CONTROL_SELECT_KEY,_),(0,i.provide)(r.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=n.useIndicatorAnimation(c,`--segmented-indicator-duration`,`--segmented-indicator-easing`);(0,i.onMounted)(p),(0,i.watch)(()=>[o.modelValue,o.disabled],p,{flush:`post`});function h(){let e=c.value?.$el||c.value;return e?Array.from(e.querySelectorAll(r.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 a=t&&o.showIndicatorTransition?m.snapshot(`[aria-checked="true"]`):null;if(s(`update:modelValue`,e),s(`change`,e),!a)return;await(0,i.nextTick)();let l=(c.value?.$el||c.value)?.querySelector(`[${r.SEGMENTED_CONTROL_DATA_VALUE_ATTR}="${CSS.escape(e)}"]`);l&&m.animate({oldRect:a.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(r.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(r.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(r.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 i=S(e.key,n,t);if(i!==-1&&(e.preventDefault(),e.stopPropagation(),t[i].focus(),o.activationMode===`auto`)){m.cancel();let e=t[i].getAttribute(r.SEGMENTED_CONTROL_DATA_VALUE_ATTR);b(t[i])||_(e,{animate:!1})}}return(n,r)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(t.default),{id:e.id,ref_key:`container`,ref:c,align:`stretch`,class:(0,i.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,i.withCtx)(()=>[(0,i.renderSlot)(n.$slots,`default`)]),_:3},8,[`id`,`class`,`direction`,`aria-label`,`aria-orientation`]))}});exports.default=a;
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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"}
@@ -1,16 +1,17 @@
1
- import { getUniqueString as e } from "../../common/utils/index.js";
2
- import t from "../stack/stack.js";
3
- import { useIndicatorAnimation as n } from "../../common/composables/use-indicator-animation.js";
4
- import { SEGMENTED_CONTROL_ACTIVATION_MODES as r, SEGMENTED_CONTROL_ACTIVATION_MODE_DEFAULT as i, SEGMENTED_CONTROL_CONTEXT_KEY as a, SEGMENTED_CONTROL_DATA_VALUE_ATTR as o, SEGMENTED_CONTROL_FOCUS_KEY as s, SEGMENTED_CONTROL_ITEM_SELECTOR as c, SEGMENTED_CONTROL_ORIENTATIONS as l, SEGMENTED_CONTROL_ORIENTATION_DEFAULT as u, SEGMENTED_CONTROL_SELECT_KEY as d, SEGMENTED_CONTROL_SIZES as f, SEGMENTED_CONTROL_SIZE_MODIFIERS as p, SEGMENTED_CONTROL_SPREADS as m, SEGMENTED_CONTROL_SPREAD_DEFAULT as h } from "./segmented-control-constants.js";
5
- import { computed as g, createBlock as _, nextTick as v, normalizeClass as y, onMounted as b, openBlock as x, provide as S, reactive as C, ref as w, renderSlot as T, unref as E, watch as D, watchEffect as O, withCtx as k } from "vue";
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 A = /* @__PURE__ */ Object.assign({ name: "DtSegmentedControl" }, {
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 e();
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: u,
27
- validator: (e) => l.includes(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: (e) => f.includes(String(e))
33
+ validator: e(p)
33
34
  },
34
35
  activationMode: {
35
36
  type: String,
36
- default: i,
37
- validator: (e) => r.includes(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: h,
54
- validator: (e) => m.includes(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: r }) {
75
- let i = e, l = r, u = w(null), f = w(null), m = g(() => i.orientation === "vertical" ? "column" : "row"), h = g(() => [
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
- p[String(i.size)],
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
- ]), A = C({
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
- O(() => {
89
- A.selected = i.modelValue, A.disabled = i.disabled, A.size = i.size, A.labelClass = i.labelClass;
90
- }), S(a, A), S(d, F), S(s, P);
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 = n(u, "--segmented-indicator-duration", "--segmented-indicator-easing");
98
- b(j), D(() => [i.modelValue, i.disabled], j, { flush: "post" });
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(c)) : [];
102
+ return e ? Array.from(e.querySelectorAll(l)) : [];
102
103
  }
103
104
  function P(e) {
104
- f.value = e;
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 (l("before-change", n), n.defaultPrevented) return;
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 (l("update:modelValue", e), l("change", e), !r) return;
113
- await v();
114
- let a = (u.value?.$el || u.value)?.querySelector(`[${o}="${CSS.escape(e)}"]`);
115
- a && M.animate({
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: a,
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(c);
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(o);
134
- return f.value ? t === f.value : e.getAttribute("aria-checked") === "true";
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(o));
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(o);
174
+ let e = t[r].getAttribute(s);
174
175
  R(t[r]) || F(e, { animate: !1 });
175
176
  }
176
177
  }
177
- return (n, r) => (x(), _(E(t), {
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: y(h.value),
183
- direction: m.value,
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: k(() => [T(n.$slots, "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 { A as default };
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/utils/index.cjs`),n=require(`../../common/mixins/input.cjs`),r=require(`../../_plugin-vue_export-helper-D8jCH6HB.cjs`),i=require(`../validation-messages/validation-messages.cjs`),a=require(`../text/text-constants.cjs`),o=require(`../text/text.cjs`),s=require(`./select-menu-constants.cjs`),c=require(`./select-menu-validators.cjs`);let l=require(`vue`);var u={name:`DtSelectMenu`,components:{DtValidationMessages:i.default,DtText:o.default},mixins:[n.MessagesMixin],inheritAttrs:!1,props:{label:{type:String,default:``},showLabel:{type:Boolean,default:!0},description:{type:String,default:``},options:{type:Array,default:()=>[],validator:e=>c.optionsValidator(e)},size:{type:[String,Number],default:300,validator:e=>Object.keys(s.SELECT_SIZE_MODIFIERS).includes(String(e))},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=>a.TEXT_SIZE_MODIFIERS.label.includes(String(e))},labelStrength:{type:String,default:null,validator:e=>Object.keys(a.TEXT_STRENGTH_MODIFIERS).includes(e)}},emits:[`update:modelValue`],data(){return{SELECT_SIZE_MODIFIERS:s.SELECT_SIZE_MODIFIERS,SELECT_STATE_MODIFIERS:s.SELECT_STATE_MODIFIERS,hasSlotContent:t.hasSlotContent,messagesId:t.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 t.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 t.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:t.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,l.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.`)}}},d=[`aria-label`,`aria-invalid`,`aria-describedby`,`disabled`,`value`],f=[`value`];function p(e,t,n,r,i,a){let o=(0,l.resolveComponent)(`dt-text`),s=(0,l.resolveComponent)(`dt-validation-messages`);return(0,l.openBlock)(),(0,l.createElementBlock)(`div`,{class:(0,l.normalizeClass)(e.$attrs.class),style:(0,l.normalizeStyle)(e.$attrs.style)},[(0,l.createElementVNode)(`label`,null,[n.showLabel&&(i.hasSlotContent(e.$slots.label)||n.label)?((0,l.openBlock)(),(0,l.createBlock)(o,(0,l.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,l.withCtx)(()=>[(0,l.renderSlot)(e.$slots,`label`,{},()=>[(0,l.createTextVNode)((0,l.toDisplayString)(n.label),1)])]),_:3},16,[`size`,`strength`,`aria-details`,`class`])):(0,l.createCommentVNode)(``,!0),i.hasSlotContent(e.$slots.description)||n.description?((0,l.openBlock)(),(0,l.createBlock)(o,(0,l.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,l.withCtx)(()=>[(0,l.renderSlot)(e.$slots,`description`,{},()=>[(0,l.createTextVNode)((0,l.toDisplayString)(n.description),1)])]),_:3},16,[`id`,`size`,`density`,`class`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`div`,{class:(0,l.normalizeClass)([`d-select`,i.SELECT_SIZE_MODIFIERS[String(n.size)],n.selectClass,{"d-select--disabled":n.disabled}]),"data-qa":`dt-select-wrapper`},[(0,l.createElementVNode)(`select`,(0,l.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,l.toHandlers)(a.selectListeners,!0)),[(0,l.renderSlot)(e.$slots,`default`,{},()=>[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(n.options,e=>((0,l.openBlock)(),(0,l.createElementBlock)(`option`,(0,l.mergeProps)({key:a.getOptionKey(e.value),value:e.value,class:n.optionClass},{ref_for:!0},n.optionChildProps),(0,l.toDisplayString)(e.label),17,f))),128))])],16,d)],2)]),(0,l.createVNode)(s,(0,l.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 m=r.t(u,[[`render`,p]]);exports.default=m;
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