@dialpad/dialtone-vue 3.223.0-next.3 → 3.223.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) 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/TextList-B6XFfQfD.js +88 -0
  6. package/dist/TextList-B6XFfQfD.js.map +1 -0
  7. package/dist/TextList-Dd-ROFiI.cjs +2 -0
  8. package/dist/TextList-Dd-ROFiI.cjs.map +1 -0
  9. package/dist/TextListItem-DIlrCkaM.cjs +2 -0
  10. package/dist/TextListItem-DIlrCkaM.cjs.map +1 -0
  11. package/dist/TextListItem-ImUi_FWh.js +62 -0
  12. package/dist/TextListItem-ImUi_FWh.js.map +1 -0
  13. package/dist/{Toast-CHbVmbBg.js → Toast-BIHkIpZP.js} +95 -94
  14. package/dist/Toast-BIHkIpZP.js.map +1 -0
  15. package/dist/Toast-D8ARDEgT.cjs +2 -0
  16. package/dist/Toast-D8ARDEgT.cjs.map +1 -0
  17. package/dist/{attachment_carousel-BFIAXWOZ.js → attachment_carousel-CyiexPBk.js} +1 -1
  18. package/dist/{attachment_carousel-BFIAXWOZ.js.map → attachment_carousel-CyiexPBk.js.map} +1 -1
  19. package/dist/{attachment_carousel-BJxqNJ5T.cjs → attachment_carousel-DJqILY7f.cjs} +1 -1
  20. package/dist/{attachment_carousel-BJxqNJ5T.cjs.map → attachment_carousel-DJqILY7f.cjs.map} +1 -1
  21. package/dist/common/mixins/input.d.ts +4 -4
  22. package/dist/common/mixins/input_group.d.ts +2 -2
  23. package/dist/common/sr_only_close_button.vue.d.ts +30 -30
  24. package/dist/common/sr_only_close_button.vue.d.ts.map +1 -1
  25. package/dist/common/validators/index.cjs +1 -1
  26. package/dist/common/validators/index.cjs.map +1 -1
  27. package/dist/common/validators/index.d.ts +2 -0
  28. package/dist/common/validators/index.d.ts.map +1 -1
  29. package/dist/common/validators/index.js +9 -2
  30. package/dist/common/validators/index.js.map +1 -1
  31. package/dist/component-documentation.json +1 -1
  32. package/dist/components/Avatar/Avatar.vue.d.ts +10 -10
  33. package/dist/components/Avatar/Avatar.vue.d.ts.map +1 -1
  34. package/dist/components/Badge/Badge.vue.d.ts +13 -13
  35. package/dist/components/Banner/Banner.vue.d.ts +106 -106
  36. package/dist/components/Banner/Banner.vue.d.ts.map +1 -1
  37. package/dist/components/Box/Box.vue.d.ts +18 -0
  38. package/dist/components/Box/Box.vue.d.ts.map +1 -1
  39. package/dist/components/Box/BoxConstants.d.ts +4 -0
  40. package/dist/components/Box/BoxConstants.d.ts.map +1 -1
  41. package/dist/components/Box/Validators.d.ts +4 -0
  42. package/dist/components/Box/Validators.d.ts.map +1 -1
  43. package/dist/components/Box/index.d.ts +1 -1
  44. package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts +1 -0
  45. package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts.map +1 -1
  46. package/dist/components/Breadcrumbs/Breadcrumbs.vue.d.ts +3 -2
  47. package/dist/components/Button/Button.vue.d.ts +25 -25
  48. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  49. package/dist/components/Card/Card.vue.d.ts +6 -6
  50. package/dist/components/Checkbox/Checkbox.vue.d.ts +26 -26
  51. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
  52. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +46 -46
  53. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -1
  54. package/dist/components/Chip/Chip.vue.d.ts +40 -40
  55. package/dist/components/Chip/Chip.vue.d.ts.map +1 -1
  56. package/dist/components/Codeblock/Codeblock.vue.d.ts +2 -2
  57. package/dist/components/Collapsible/Collapsible.vue.d.ts +39 -39
  58. package/dist/components/Collapsible/Collapsible.vue.d.ts.map +1 -1
  59. package/dist/components/Combobox/Combobox.vue.d.ts +66 -66
  60. package/dist/components/Combobox/Combobox.vue.d.ts.map +1 -1
  61. package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts +29 -29
  62. package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts.map +1 -1
  63. package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts +35 -35
  64. package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts.map +1 -1
  65. package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts +216 -216
  66. package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts.map +1 -1
  67. package/dist/components/DescriptionList/DescriptionList.vue.d.ts +4 -4
  68. package/dist/components/Dropdown/Dropdown.vue.d.ts +82 -82
  69. package/dist/components/Dropdown/Dropdown.vue.d.ts.map +1 -1
  70. package/dist/components/Emoji/Emoji.vue.d.ts +17 -17
  71. package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts +37 -37
  72. package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts.map +1 -1
  73. package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts +37 -37
  74. package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts.map +1 -1
  75. package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts +24 -24
  76. package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts.map +1 -1
  77. package/dist/components/EmptyState/EmptyState.vue.d.ts.map +1 -1
  78. package/dist/components/FilterPill/FilterPill.vue.d.ts +308 -308
  79. package/dist/components/FilterPill/FilterPill.vue.d.ts.map +1 -1
  80. package/dist/components/Hovercard/Hovercard.vue.d.ts +156 -156
  81. package/dist/components/Hovercard/Hovercard.vue.d.ts.map +1 -1
  82. package/dist/components/Icon/Icon.vue.d.ts +7 -7
  83. package/dist/components/ImageViewer/ImageViewer.vue.d.ts +60 -60
  84. package/dist/components/ImageViewer/ImageViewer.vue.d.ts.map +1 -1
  85. package/dist/components/Input/Input.vue.d.ts +37 -37
  86. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  87. package/dist/components/InputGroup/InputGroup.vue.d.ts +46 -46
  88. package/dist/components/InputGroup/InputGroup.vue.d.ts.map +1 -1
  89. package/dist/components/ItemLayout/ItemLayout.vue.d.ts +20 -20
  90. package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts +80 -80
  91. package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts.map +1 -1
  92. package/dist/components/Link/Link.vue.d.ts +1 -0
  93. package/dist/components/Link/LinkConstants.d.ts +3 -0
  94. package/dist/components/Link/LinkConstants.d.ts.map +1 -1
  95. package/dist/components/ListItem/ListItem.vue.d.ts +27 -27
  96. package/dist/components/ListItem/ListItem.vue.d.ts.map +1 -1
  97. package/dist/components/ListItemGroup/ListItemGroup.vue.d.ts +4 -4
  98. package/dist/components/Loader/Loader.vue.d.ts +7 -7
  99. package/dist/components/Modal/Modal.vue.d.ts +79 -85
  100. package/dist/components/Modal/Modal.vue.d.ts.map +1 -1
  101. package/dist/components/Modal/ModalConstants.d.ts +0 -5
  102. package/dist/components/Modal/index.d.ts +1 -1
  103. package/dist/components/Notice/Notice.vue.d.ts +106 -106
  104. package/dist/components/Notice/Notice.vue.d.ts.map +1 -1
  105. package/dist/components/Notice/NoticeAction.vue.d.ts +62 -62
  106. package/dist/components/Notice/NoticeAction.vue.d.ts.map +1 -1
  107. package/dist/components/Notice/NoticeContent.vue.d.ts +4 -4
  108. package/dist/components/Notice/NoticeIcon.vue.d.ts +32 -32
  109. package/dist/components/Notice/NoticeIcon.vue.d.ts.map +1 -1
  110. package/dist/components/Pagination/Pagination.vue.d.ts +40 -40
  111. package/dist/components/Pagination/Pagination.vue.d.ts.map +1 -1
  112. package/dist/components/Popover/Popover.vue.d.ts +78 -78
  113. package/dist/components/Popover/Popover.vue.d.ts.map +1 -1
  114. package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts +34 -34
  115. package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts.map +1 -1
  116. package/dist/components/ProgressCircle/ProgressCircle.vue.d.ts +7 -7
  117. package/dist/components/Prose/Prose.vue.d.ts.map +1 -1
  118. package/dist/components/Radio/Radio.vue.d.ts +26 -26
  119. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  120. package/dist/components/RadioGroup/RadioGroup.vue.d.ts +46 -46
  121. package/dist/components/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
  122. package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts +6 -5
  123. package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts.map +1 -1
  124. package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts +10 -10
  125. package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts.map +1 -1
  126. package/dist/components/RichTextEditor/Extensions/Emoji/EmojiComponent.vue.d.ts +17 -17
  127. package/dist/components/RichTextEditor/Extensions/Emoji/EmojiSuggestion.vue.d.ts +17 -17
  128. package/dist/components/RichTextEditor/Extensions/Mentions/MentionComponent.vue.d.ts +1 -0
  129. package/dist/components/RichTextEditor/Extensions/Mentions/MentionSuggestion.vue.d.ts +10 -10
  130. package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts +27 -27
  131. package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts.map +1 -1
  132. package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts +153 -153
  133. package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts.map +1 -1
  134. package/dist/components/RootLayout/RootLayout.vue.d.ts +10 -10
  135. package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
  136. package/dist/components/SelectMenu/SelectMenu.vue.d.ts +33 -33
  137. package/dist/components/SelectMenu/SelectMenu.vue.d.ts.map +1 -1
  138. package/dist/components/Skeleton/Skeleton.vue.d.ts +8 -8
  139. package/dist/components/Skeleton/SkeletonListItem.vue.d.ts +4 -4
  140. package/dist/components/Skeleton/SkeletonParagraph.vue.d.ts +2 -2
  141. package/dist/components/Skeleton/SkeletonShape.vue.d.ts +2 -2
  142. package/dist/components/SplitButton/SplitButton.vue.d.ts +157 -157
  143. package/dist/components/SplitButton/SplitButton.vue.d.ts.map +1 -1
  144. package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts +30 -30
  145. package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts.map +1 -1
  146. package/dist/components/SplitButton/SplitButtonStart.vue.d.ts +31 -31
  147. package/dist/components/Tab/Tab.vue.d.ts +33 -33
  148. package/dist/components/Tab/TabGroup.vue.d.ts +6 -6
  149. package/dist/components/Tab/TabPanel.vue.d.ts +2 -2
  150. package/dist/components/TextList/TextList.vue.d.ts +87 -0
  151. package/dist/components/TextList/TextList.vue.d.ts.map +1 -0
  152. package/dist/components/TextList/TextListConstants.d.ts +20 -0
  153. package/dist/components/TextList/TextListConstants.d.ts.map +1 -0
  154. package/dist/components/TextList/TextListItem.vue.d.ts +60 -0
  155. package/dist/components/TextList/TextListItem.vue.d.ts.map +1 -0
  156. package/dist/components/TextList/Validators.d.ts +5 -0
  157. package/dist/components/TextList/Validators.d.ts.map +1 -0
  158. package/dist/components/TextList/index.d.ts +4 -0
  159. package/dist/components/TextList/index.d.ts.map +1 -0
  160. package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts +108 -108
  161. package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts.map +1 -1
  162. package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts +34 -34
  163. package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts.map +1 -1
  164. package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts +106 -106
  165. package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts.map +1 -1
  166. package/dist/components/Toast/Toast.vue.d.ts +436 -436
  167. package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
  168. package/dist/components/Toggle/Toggle.vue.d.ts +4 -4
  169. package/dist/components/Toggle/Toggle.vue.d.ts.map +1 -1
  170. package/dist/components/Tooltip/Tooltip.vue.d.ts +4 -4
  171. package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts +22 -22
  172. package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts.map +1 -1
  173. package/dist/dialtone-vue.cjs +1 -1
  174. package/dist/dialtone-vue.js +134 -130
  175. package/dist/index.d.ts +1 -0
  176. package/dist/lib/attachment-carousel/attachment-carousel.cjs +1 -1
  177. package/dist/lib/attachment-carousel/attachment-carousel.js +1 -1
  178. package/dist/lib/attachment-carousel/index.cjs +1 -1
  179. package/dist/lib/attachment-carousel/index.js +1 -1
  180. package/dist/lib/avatar/avatar.cjs +1 -1
  181. package/dist/lib/avatar/avatar.cjs.map +1 -1
  182. package/dist/lib/avatar/avatar.js +55 -54
  183. package/dist/lib/avatar/avatar.js.map +1 -1
  184. package/dist/lib/badge/badge.cjs +1 -1
  185. package/dist/lib/badge/badge.cjs.map +1 -1
  186. package/dist/lib/badge/badge.js +36 -35
  187. package/dist/lib/badge/badge.js.map +1 -1
  188. package/dist/lib/box/box-constants.cjs +1 -1
  189. package/dist/lib/box/box-constants.cjs.map +1 -1
  190. package/dist/lib/box/box-constants.js +34 -7
  191. package/dist/lib/box/box-constants.js.map +1 -1
  192. package/dist/lib/box/box.cjs +1 -1
  193. package/dist/lib/box/box.cjs.map +1 -1
  194. package/dist/lib/box/box.js +93 -34
  195. package/dist/lib/box/box.js.map +1 -1
  196. package/dist/lib/box/index.cjs +1 -1
  197. package/dist/lib/box/index.js +3 -3
  198. package/dist/lib/box/validators.cjs +1 -1
  199. package/dist/lib/box/validators.cjs.map +1 -1
  200. package/dist/lib/box/validators.js +4 -4
  201. package/dist/lib/box/validators.js.map +1 -1
  202. package/dist/lib/button/button.cjs +1 -1
  203. package/dist/lib/button/button.cjs.map +1 -1
  204. package/dist/lib/button/button.js +69 -68
  205. package/dist/lib/button/button.js.map +1 -1
  206. package/dist/lib/chip/chip.cjs +1 -1
  207. package/dist/lib/chip/chip.cjs.map +1 -1
  208. package/dist/lib/chip/chip.js +36 -35
  209. package/dist/lib/chip/chip.js.map +1 -1
  210. package/dist/lib/codeblock/codeblock.cjs +1 -1
  211. package/dist/lib/codeblock/codeblock.cjs.map +1 -1
  212. package/dist/lib/codeblock/codeblock.js +11 -10
  213. package/dist/lib/codeblock/codeblock.js.map +1 -1
  214. package/dist/lib/combobox/combobox.cjs +1 -1
  215. package/dist/lib/combobox/combobox.js +1 -1
  216. package/dist/lib/combobox/index.cjs +1 -1
  217. package/dist/lib/combobox/index.js +1 -1
  218. package/dist/lib/combobox-multi-select/combobox-multi-select.cjs +1 -1
  219. package/dist/lib/combobox-multi-select/combobox-multi-select.cjs.map +1 -1
  220. package/dist/lib/combobox-multi-select/combobox-multi-select.js +53 -53
  221. package/dist/lib/combobox-multi-select/combobox-multi-select.js.map +1 -1
  222. package/dist/lib/combobox-with-popover/combobox-with-popover.cjs +1 -1
  223. package/dist/lib/combobox-with-popover/combobox-with-popover.cjs.map +1 -1
  224. package/dist/lib/combobox-with-popover/combobox-with-popover.js +48 -47
  225. package/dist/lib/combobox-with-popover/combobox-with-popover.js.map +1 -1
  226. package/dist/lib/editor/editor.cjs +1 -1
  227. package/dist/lib/editor/editor.js +1 -1
  228. package/dist/lib/emoji/emoji.cjs +1 -1
  229. package/dist/lib/emoji/emoji.cjs.map +1 -1
  230. package/dist/lib/emoji/emoji.js +25 -24
  231. package/dist/lib/emoji/emoji.js.map +1 -1
  232. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs +1 -1
  233. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs.map +1 -1
  234. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js +20 -19
  235. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js.map +1 -1
  236. package/dist/lib/empty-state/empty-state.cjs +1 -1
  237. package/dist/lib/empty-state/empty-state.cjs.map +1 -1
  238. package/dist/lib/empty-state/empty-state.js +31 -30
  239. package/dist/lib/empty-state/empty-state.js.map +1 -1
  240. package/dist/lib/filter-pill/filter-pill.cjs +1 -1
  241. package/dist/lib/filter-pill/filter-pill.cjs.map +1 -1
  242. package/dist/lib/filter-pill/filter-pill.js +73 -72
  243. package/dist/lib/filter-pill/filter-pill.js.map +1 -1
  244. package/dist/lib/icon/icon.cjs +1 -1
  245. package/dist/lib/icon/icon.cjs.map +1 -1
  246. package/dist/lib/icon/icon.js +16 -15
  247. package/dist/lib/icon/icon.js.map +1 -1
  248. package/dist/lib/input/input.cjs +1 -1
  249. package/dist/lib/input/input.cjs.map +1 -1
  250. package/dist/lib/input/input.js +64 -63
  251. package/dist/lib/input/input.js.map +1 -1
  252. package/dist/lib/link/link-constants.cjs +1 -1
  253. package/dist/lib/link/link-constants.cjs.map +1 -1
  254. package/dist/lib/link/link-constants.js +11 -9
  255. package/dist/lib/link/link-constants.js.map +1 -1
  256. package/dist/lib/link/link.cjs +1 -1
  257. package/dist/lib/link/link.cjs.map +1 -1
  258. package/dist/lib/link/link.js +17 -14
  259. package/dist/lib/link/link.js.map +1 -1
  260. package/dist/lib/loader/loader.cjs +3 -3
  261. package/dist/lib/loader/loader.cjs.map +1 -1
  262. package/dist/lib/loader/loader.js +21 -20
  263. package/dist/lib/loader/loader.js.map +1 -1
  264. package/dist/lib/message-input/index.cjs +1 -1
  265. package/dist/lib/message-input/index.js +1 -1
  266. package/dist/lib/message-input/message-input.cjs +1 -1
  267. package/dist/lib/message-input/message-input.js +1 -1
  268. package/dist/lib/modal/index.cjs +1 -1
  269. package/dist/lib/modal/index.js +3 -3
  270. package/dist/lib/modal/modal-constants.cjs +1 -1
  271. package/dist/lib/modal/modal-constants.cjs.map +1 -1
  272. package/dist/lib/modal/modal-constants.js +1 -4
  273. package/dist/lib/modal/modal-constants.js.map +1 -1
  274. package/dist/lib/modal/modal.cjs +1 -1
  275. package/dist/lib/modal/modal.cjs.map +1 -1
  276. package/dist/lib/modal/modal.js +40 -42
  277. package/dist/lib/modal/modal.js.map +1 -1
  278. package/dist/lib/progress-circle/progress-circle.cjs +1 -1
  279. package/dist/lib/progress-circle/progress-circle.cjs.map +1 -1
  280. package/dist/lib/progress-circle/progress-circle.js +33 -32
  281. package/dist/lib/progress-circle/progress-circle.js.map +1 -1
  282. package/dist/lib/prose/prose.cjs +1 -1
  283. package/dist/lib/prose/prose.cjs.map +1 -1
  284. package/dist/lib/prose/prose.js +23 -22
  285. package/dist/lib/prose/prose.js.map +1 -1
  286. package/dist/lib/segmented-control/segmented-control.cjs +1 -1
  287. package/dist/lib/segmented-control/segmented-control.cjs.map +1 -1
  288. package/dist/lib/segmented-control/segmented-control.js +42 -41
  289. package/dist/lib/segmented-control/segmented-control.js.map +1 -1
  290. package/dist/lib/select-menu/select-menu.cjs +1 -1
  291. package/dist/lib/select-menu/select-menu.cjs.map +1 -1
  292. package/dist/lib/select-menu/select-menu.js +48 -47
  293. package/dist/lib/select-menu/select-menu.js.map +1 -1
  294. package/dist/lib/split-button/split-button.cjs +1 -1
  295. package/dist/lib/split-button/split-button.cjs.map +1 -1
  296. package/dist/lib/split-button/split-button.js +45 -44
  297. package/dist/lib/split-button/split-button.js.map +1 -1
  298. package/dist/lib/tab/tab-group.cjs +1 -1
  299. package/dist/lib/tab/tab-group.cjs.map +1 -1
  300. package/dist/lib/tab/tab-group.js +34 -35
  301. package/dist/lib/tab/tab-group.js.map +1 -1
  302. package/dist/lib/text-list/index.cjs +1 -0
  303. package/dist/lib/text-list/index.js +4 -0
  304. package/dist/lib/text-list/text-list-constants.cjs +2 -0
  305. package/dist/lib/text-list/text-list-constants.cjs.map +1 -0
  306. package/dist/lib/text-list/text-list-constants.js +31 -0
  307. package/dist/lib/text-list/text-list-constants.js.map +1 -0
  308. package/dist/lib/text-list/text-list-item.cjs +1 -0
  309. package/dist/lib/text-list/text-list-item.js +2 -0
  310. package/dist/lib/text-list/text-list.cjs +1 -0
  311. package/dist/lib/text-list/text-list.js +2 -0
  312. package/dist/lib/text-list/validators.cjs +2 -0
  313. package/dist/lib/text-list/validators.cjs.map +1 -0
  314. package/dist/lib/text-list/validators.js +10 -0
  315. package/dist/lib/text-list/validators.js.map +1 -0
  316. package/dist/lib/toast/index.cjs +1 -1
  317. package/dist/lib/toast/index.js +1 -1
  318. package/dist/lib/toast/toast.cjs +1 -1
  319. package/dist/lib/toast/toast.js +1 -1
  320. package/dist/lib/toggle/toggle.cjs +1 -1
  321. package/dist/lib/toggle/toggle.cjs.map +1 -1
  322. package/dist/lib/toggle/toggle.js +23 -22
  323. package/dist/lib/toggle/toggle.js.map +1 -1
  324. package/dist/{message_input-DOE5NEU9.js → message_input-C6BcWqr8.js} +1 -1
  325. package/dist/{message_input-DOE5NEU9.js.map → message_input-C6BcWqr8.js.map} +1 -1
  326. package/dist/{message_input-DMyIOe4y.cjs → message_input-ftx8f8wC.cjs} +1 -1
  327. package/dist/{message_input-DMyIOe4y.cjs.map → message_input-ftx8f8wC.cjs.map} +1 -1
  328. package/dist/recipes/buttons/callbar_button/callbar_button.vue.d.ts +33 -33
  329. package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts +149 -149
  330. package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts.map +1 -1
  331. package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +147 -147
  332. package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts.map +1 -1
  333. package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts +173 -173
  334. package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts.map +1 -1
  335. package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts +40 -40
  336. package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts.map +1 -1
  337. package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +132 -132
  338. package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts.map +1 -1
  339. package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +97 -97
  340. package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts.map +1 -1
  341. package/dist/recipes/conversation_view/editor/EditorToolbarButton.vue.d.ts +25 -25
  342. package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts +107 -107
  343. package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts.map +1 -1
  344. package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts +103 -103
  345. package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts.map +1 -1
  346. package/dist/recipes/conversation_view/editor/editor.vue.d.ts +636 -636
  347. package/dist/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  348. package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +70 -70
  349. package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts.map +1 -1
  350. package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts +66 -66
  351. package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts.map +1 -1
  352. package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +55 -55
  353. package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
  354. package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts +55 -55
  355. package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts.map +1 -1
  356. package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts +604 -604
  357. package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  358. package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts +109 -109
  359. package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts.map +1 -1
  360. package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts +254 -254
  361. package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts.map +1 -1
  362. package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts +149 -149
  363. package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
  364. package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +30 -30
  365. package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts.map +1 -1
  366. package/dist/recipes/item_layout/contact_info/contact_info.vue.d.ts +30 -30
  367. package/dist/recipes/leftbar/callbox/callbox.vue.d.ts +28 -28
  368. package/dist/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
  369. package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +72 -72
  370. package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
  371. package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts +215 -215
  372. package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
  373. package/dist/recipes/leftbar/general_row/general_row.vue.d.ts +176 -176
  374. package/dist/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
  375. package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts +80 -80
  376. package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts.map +1 -1
  377. package/dist/recipes/leftbar/group_row/group_row.vue.d.ts +181 -181
  378. package/dist/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
  379. package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +10 -10
  380. package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts.map +1 -1
  381. package/package.json +4 -4
  382. package/dist/Combobox-By01ETlj.js.map +0 -1
  383. package/dist/Combobox-D4hc1-41.cjs +0 -3
  384. package/dist/Combobox-D4hc1-41.cjs.map +0 -1
  385. package/dist/Toast-CHbVmbBg.js.map +0 -1
  386. package/dist/Toast-DX-REYXG.cjs +0 -2
  387. package/dist/Toast-DX-REYXG.cjs.map +0 -1
@@ -1,8 +1,9 @@
1
- import { t as e } from "../../_plugin-vue_export-helper-BTgDAbhb.js";
2
- import { PROGRESS_CIRCLE_KINDS as t, PROGRESS_CIRCLE_SIZES as n } from "./progress-circle-constants.js";
3
- import { createCommentVNode as r, createElementBlock as i, createElementVNode as a, normalizeClass as o, normalizeStyle as s, openBlock as c } from "vue";
1
+ import { ordinalSizeValidator as e } from "../../common/validators/index.js";
2
+ import { t } from "../../_plugin-vue_export-helper-BTgDAbhb.js";
3
+ import { PROGRESS_CIRCLE_KINDS as n, PROGRESS_CIRCLE_SIZES as r } from "./progress-circle-constants.js";
4
+ import { createCommentVNode as i, createElementBlock as a, createElementVNode as o, normalizeClass as s, normalizeStyle as c, openBlock as l } from "vue";
4
5
  //#region components/ProgressCircle/ProgressCircle.vue
5
- var l = {
6
+ var u = {
6
7
  name: "DtProgressCircle",
7
8
  props: {
8
9
  ariaLabel: {
@@ -15,14 +16,14 @@ var l = {
15
16
  validator: (e) => e >= 0 && e <= 100
16
17
  },
17
18
  size: {
18
- type: String,
19
- default: "500",
20
- validator: (e) => Object.keys(n).includes(e)
19
+ type: [String, Number],
20
+ default: 500,
21
+ validator: e(r)
21
22
  },
22
23
  kind: {
23
24
  type: String,
24
25
  default: "default",
25
- validator: (e) => Object.keys(t).includes(e)
26
+ validator: (e) => Object.keys(n).includes(e)
26
27
  }
27
28
  },
28
29
  data() {
@@ -42,10 +43,10 @@ var l = {
42
43
  return this.isAi ? { stroke: `url(#${this.aiGradientId})` } : {};
43
44
  },
44
45
  sizeClass() {
45
- return n[this.size];
46
+ return r[this.size];
46
47
  },
47
48
  kindClass() {
48
- return t[this.kind];
49
+ return n[this.kind];
49
50
  },
50
51
  circleRadius() {
51
52
  return 12 - this.strokeWidth / 2;
@@ -68,10 +69,10 @@ var l = {
68
69
  };
69
70
  }
70
71
  }
71
- }, u = ["aria-label", "aria-valuenow"], d = { key: 0 }, f = ["id"], p = ["d", "stroke-width"], m = ["d", "stroke-width"];
72
- function h(e, t, n, l, h, g) {
73
- return c(), i("div", {
74
- class: o(["d-progress-circle", [g.sizeClass, g.kindClass]]),
72
+ }, d = ["aria-label", "aria-valuenow"], f = { key: 0 }, p = ["id"], m = ["d", "stroke-width"], h = ["d", "stroke-width"];
73
+ function g(e, t, n, r, u, g) {
74
+ return l(), a("div", {
75
+ class: s(["d-progress-circle", [g.sizeClass, g.kindClass]]),
75
76
  role: "progressbar",
76
77
  "aria-label": n.ariaLabel,
77
78
  tabindex: "-1",
@@ -79,56 +80,56 @@ function h(e, t, n, l, h, g) {
79
80
  "aria-valuemin": "0",
80
81
  "aria-valuemax": "100",
81
82
  "data-qa": "dt-progress-circle"
82
- }, [(c(), i("svg", {
83
+ }, [(l(), a("svg", {
83
84
  class: "d-progress-circle__bar",
84
- style: s(g.cssVars),
85
+ style: c(g.cssVars),
85
86
  viewBox: "0 0 24 24"
86
87
  }, [
87
- g.isAi ? (c(), i("defs", d, [a("linearGradient", {
88
+ g.isAi ? (l(), a("defs", f, [o("linearGradient", {
88
89
  id: g.aiGradientId,
89
90
  x1: "0%",
90
91
  y1: "0%",
91
92
  x2: "100%",
92
93
  y2: "100%"
93
94
  }, [...t[0] || (t[0] = [
94
- a("stop", {
95
+ o("stop", {
95
96
  offset: "0%",
96
97
  "stop-color": "var(--dt-color-brand-gold)"
97
98
  }, null, -1),
98
- a("stop", {
99
+ o("stop", {
99
100
  offset: "33%",
100
101
  "stop-color": "var(--dt-color-brand-red)"
101
102
  }, null, -1),
102
- a("stop", {
103
+ o("stop", {
103
104
  offset: "66%",
104
105
  "stop-color": "var(--dt-color-brand-magenta)"
105
106
  }, null, -1),
106
- a("stop", {
107
+ o("stop", {
107
108
  offset: "100%",
108
109
  "stop-color": "var(--dt-color-brand-purple)"
109
110
  }, null, -1)
110
- ])], 8, f)])) : r("", !0),
111
- n.progress <= 95 ? (c(), i("path", {
111
+ ])], 8, p)])) : i("", !0),
112
+ n.progress <= 95 ? (l(), a("path", {
112
113
  key: 1,
113
114
  d: g.circlePath,
114
115
  class: "d-progress-circle__shape d-progress-circle__shape--track",
115
116
  fill: "none",
116
- "stroke-width": h.strokeWidth,
117
+ "stroke-width": u.strokeWidth,
117
118
  "stroke-linecap": "round"
118
- }, null, 8, p)) : r("", !0),
119
- n.progress > 0 ? (c(), i("path", {
119
+ }, null, 8, m)) : i("", !0),
120
+ n.progress > 0 ? (l(), a("path", {
120
121
  key: 2,
121
122
  d: g.circlePath,
122
123
  class: "d-progress-circle__shape d-progress-circle__shape--fill",
123
124
  fill: "none",
124
- "stroke-width": h.strokeWidth,
125
+ "stroke-width": u.strokeWidth,
125
126
  "stroke-linecap": "round",
126
- style: s(g.fillStrokeStyle)
127
- }, null, 12, m)) : r("", !0)
128
- ], 4))], 10, u);
127
+ style: c(g.fillStrokeStyle)
128
+ }, null, 12, h)) : i("", !0)
129
+ ], 4))], 10, d);
129
130
  }
130
- var g = /* @__PURE__ */ e(l, [["render", h]]);
131
+ var _ = /* @__PURE__ */ t(u, [["render", g]]);
131
132
  //#endregion
132
- export { g as default };
133
+ export { _ as default };
133
134
 
134
135
  //# sourceMappingURL=progress-circle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-circle.js","names":[],"sources":["../../../components/ProgressCircle/ProgressCircle.vue"],"sourcesContent":["<script>\n/**\n * Circular SVG progress indicator for determinate upload or processing progress.\n * @see https://dialtone.dialpad.com/components/progress-circle.html\n */\nimport { PROGRESS_CIRCLE_SIZES, PROGRESS_CIRCLE_KINDS } from './ProgressCircleConstants';\n\nexport default {\n name: 'DtProgressCircle',\n props: {\n /** Accessible label read by screen readers. */\n ariaLabel: { type: String, required: true },\n /** Current progress value (0–100). */\n progress: {\n type: Number,\n default: 0,\n validator: (v) => v >= 0 && v <= 100,\n },\n\n /**\n * The size of the progress indicator, aligning to Dialtone icon sizes.\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n size: {\n type: String,\n default: '500',\n validator: (s) => Object.keys(PROGRESS_CIRCLE_SIZES).includes(s),\n },\n\n /**\n * The color variant of the progress indicator.\n * @values default, brand, critical, positive, warning, info, ai\n */\n kind: {\n type: String,\n default: 'default',\n validator: (k) => Object.keys(PROGRESS_CIRCLE_KINDS).includes(k),\n },\n },\n\n data () {\n return {\n strokeWidth: 3.25,\n uid: Math.random().toString(36).substring(2, 9),\n };\n },\n\n computed: {\n // SVG stroke doesn't support CSS gradients, so the \"ai\" kind uses an inline\n // SVG <linearGradient> referenced via url(#id) instead of a CSS variable.\n isAi () {\n return this.kind === 'ai';\n },\n\n // Unique per-instance to avoid collisions when multiple progress circles coexist.\n aiGradientId () {\n return `progress-circle-ai-gradient-${this.uid}`;\n },\n\n fillStrokeStyle () {\n return this.isAi ? { stroke: `url(#${this.aiGradientId})` } : {};\n },\n\n sizeClass () {\n return PROGRESS_CIRCLE_SIZES[this.size];\n },\n\n kindClass () {\n return PROGRESS_CIRCLE_KINDS[this.kind];\n },\n\n circleRadius () {\n return 12 - (this.strokeWidth / 2);\n },\n\n circleCircumference () {\n return 2 * Math.PI * this.circleRadius;\n },\n\n // Draws a full circle as two arcs so getTotalLength() returns the circumference.\n circlePath () {\n const r = this.circleRadius;\n const top = 12 - r;\n const bottom = 12 + r;\n return `M 12 ${top} A ${r} ${r} 0 0 1 12 ${bottom} A ${r} ${r} 0 0 1 12 ${top} Z`;\n },\n\n // stroke-dasharray/offset control how much of the circle is visually \"filled\".\n cssVars () {\n const C = this.circleCircumference;\n const MIN_VISUAL_PROGRESS = 5;\n const visualProgress = (this.progress > 0 && this.progress < MIN_VISUAL_PROGRESS)\n ? MIN_VISUAL_PROGRESS\n : this.progress;\n const fillLength = C * visualProgress / 100;\n const sw = this.strokeWidth;\n const capArc = sw / 2;\n\n // When both arcs are visible, round linecaps extend capArc past each endpoint.\n // Shorten each arc by capArc at both ends (total sw per arc) so the caps meet\n // exactly at each junction without overlapping. Rotate the fill forward by\n // capArc so its start cap lands at 12 o'clock.\n const both = this.progress > 0 && this.progress < 100;\n const adj = both ? sw : 0;\n\n return {\n // Full-circle arcs use 'none' to avoid round-cap overlap at the path seam.\n '--stroke-dasharray': (!both && this.progress >= 100) ? 'none' : C,\n '--fill-dashoffset': C - Math.max(0, fillLength - adj),\n '--fill-rotate': `${both ? (capArc / C * 360) : 0}deg`,\n '--track-dasharray': (!both && this.progress <= 0) ? 'none' : `${Math.max(0, C - fillLength - adj)} ${C}`,\n '--track-dashoffset': -(fillLength + (both ? capArc : 0)),\n };\n },\n },\n\n};\n</script>\n\n<template>\n <div\n class=\"d-progress-circle\"\n :class=\"[sizeClass, kindClass]\"\n role=\"progressbar\"\n :aria-label=\"ariaLabel\"\n tabindex=\"-1\"\n :aria-valuenow=\"progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n data-qa=\"dt-progress-circle\"\n >\n <svg\n class=\"d-progress-circle__bar\"\n :style=\"cssVars\"\n viewBox=\"0 0 24 24\"\n >\n <defs v-if=\"isAi\">\n <linearGradient\n :id=\"aiGradientId\"\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"100%\"\n >\n <!-- This emulates the AI gradient, for which each color isn't directly mappable to a CSS variable -->\n <stop\n offset=\"0%\"\n stop-color=\"var(--dt-color-brand-gold)\"\n />\n <stop\n offset=\"33%\"\n stop-color=\"var(--dt-color-brand-red)\"\n />\n <stop\n offset=\"66%\"\n stop-color=\"var(--dt-color-brand-magenta)\"\n />\n <stop\n offset=\"100%\"\n stop-color=\"var(--dt-color-brand-purple)\"\n />\n </linearGradient>\n </defs>\n <path\n v-if=\"progress <= 95\"\n :d=\"circlePath\"\n class=\"d-progress-circle__shape d-progress-circle__shape--track\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n stroke-linecap=\"round\"\n />\n <path\n v-if=\"progress > 0\"\n :d=\"circlePath\"\n class=\"d-progress-circle__shape d-progress-circle__shape--fill\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n stroke-linecap=\"round\"\n :style=\"fillStrokeStyle\"\n />\n </svg>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"progress-circle.js","names":[],"sources":["../../../components/ProgressCircle/ProgressCircle.vue"],"sourcesContent":["<script>\n/**\n * Circular SVG progress indicator for determinate upload or processing progress.\n * @see https://dialtone.dialpad.com/components/progress-circle.html\n */\nimport { PROGRESS_CIRCLE_SIZES, PROGRESS_CIRCLE_KINDS } from './ProgressCircleConstants';\nimport { ordinalSizeValidator } from '@/common/validators';\n\nexport default {\n name: 'DtProgressCircle',\n props: {\n /** Accessible label read by screen readers. */\n ariaLabel: { type: String, required: true },\n /** Current progress value (0–100). */\n progress: {\n type: Number,\n default: 0,\n validator: (v) => v >= 0 && v <= 100,\n },\n\n /**\n * The size of the progress indicator, aligning to Dialtone icon sizes.\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n size: {\n type: [String, Number],\n default: 500,\n validator: ordinalSizeValidator(PROGRESS_CIRCLE_SIZES),\n },\n\n /**\n * The color variant of the progress indicator.\n * @values default, brand, critical, positive, warning, info, ai\n */\n kind: {\n type: String,\n default: 'default',\n validator: (k) => Object.keys(PROGRESS_CIRCLE_KINDS).includes(k),\n },\n },\n\n data () {\n return {\n strokeWidth: 3.25,\n uid: Math.random().toString(36).substring(2, 9),\n };\n },\n\n computed: {\n // SVG stroke doesn't support CSS gradients, so the \"ai\" kind uses an inline\n // SVG <linearGradient> referenced via url(#id) instead of a CSS variable.\n isAi () {\n return this.kind === 'ai';\n },\n\n // Unique per-instance to avoid collisions when multiple progress circles coexist.\n aiGradientId () {\n return `progress-circle-ai-gradient-${this.uid}`;\n },\n\n fillStrokeStyle () {\n return this.isAi ? { stroke: `url(#${this.aiGradientId})` } : {};\n },\n\n sizeClass () {\n return PROGRESS_CIRCLE_SIZES[this.size];\n },\n\n kindClass () {\n return PROGRESS_CIRCLE_KINDS[this.kind];\n },\n\n circleRadius () {\n return 12 - (this.strokeWidth / 2);\n },\n\n circleCircumference () {\n return 2 * Math.PI * this.circleRadius;\n },\n\n // Draws a full circle as two arcs so getTotalLength() returns the circumference.\n circlePath () {\n const r = this.circleRadius;\n const top = 12 - r;\n const bottom = 12 + r;\n return `M 12 ${top} A ${r} ${r} 0 0 1 12 ${bottom} A ${r} ${r} 0 0 1 12 ${top} Z`;\n },\n\n // stroke-dasharray/offset control how much of the circle is visually \"filled\".\n cssVars () {\n const C = this.circleCircumference;\n const MIN_VISUAL_PROGRESS = 5;\n const visualProgress = (this.progress > 0 && this.progress < MIN_VISUAL_PROGRESS)\n ? MIN_VISUAL_PROGRESS\n : this.progress;\n const fillLength = C * visualProgress / 100;\n const sw = this.strokeWidth;\n const capArc = sw / 2;\n\n // When both arcs are visible, round linecaps extend capArc past each endpoint.\n // Shorten each arc by capArc at both ends (total sw per arc) so the caps meet\n // exactly at each junction without overlapping. Rotate the fill forward by\n // capArc so its start cap lands at 12 o'clock.\n const both = this.progress > 0 && this.progress < 100;\n const adj = both ? sw : 0;\n\n return {\n // Full-circle arcs use 'none' to avoid round-cap overlap at the path seam.\n '--stroke-dasharray': (!both && this.progress >= 100) ? 'none' : C,\n '--fill-dashoffset': C - Math.max(0, fillLength - adj),\n '--fill-rotate': `${both ? (capArc / C * 360) : 0}deg`,\n '--track-dasharray': (!both && this.progress <= 0) ? 'none' : `${Math.max(0, C - fillLength - adj)} ${C}`,\n '--track-dashoffset': -(fillLength + (both ? capArc : 0)),\n };\n },\n },\n\n};\n</script>\n\n<template>\n <div\n class=\"d-progress-circle\"\n :class=\"[sizeClass, kindClass]\"\n role=\"progressbar\"\n :aria-label=\"ariaLabel\"\n tabindex=\"-1\"\n :aria-valuenow=\"progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n data-qa=\"dt-progress-circle\"\n >\n <svg\n class=\"d-progress-circle__bar\"\n :style=\"cssVars\"\n viewBox=\"0 0 24 24\"\n >\n <defs v-if=\"isAi\">\n <linearGradient\n :id=\"aiGradientId\"\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"100%\"\n >\n <!-- This emulates the AI gradient, for which each color isn't directly mappable to a CSS variable -->\n <stop\n offset=\"0%\"\n stop-color=\"var(--dt-color-brand-gold)\"\n />\n <stop\n offset=\"33%\"\n stop-color=\"var(--dt-color-brand-red)\"\n />\n <stop\n offset=\"66%\"\n stop-color=\"var(--dt-color-brand-magenta)\"\n />\n <stop\n offset=\"100%\"\n stop-color=\"var(--dt-color-brand-purple)\"\n />\n </linearGradient>\n </defs>\n <path\n v-if=\"progress <= 95\"\n :d=\"circlePath\"\n class=\"d-progress-circle__shape d-progress-circle__shape--track\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n stroke-linecap=\"round\"\n />\n <path\n v-if=\"progress > 0\"\n :d=\"circlePath\"\n class=\"d-progress-circle__shape d-progress-circle__shape--fill\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n stroke-linecap=\"round\"\n :style=\"fillStrokeStyle\"\n />\n </svg>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`./prose-constants.cjs`);let t=require(`vue`);var n=Object.assign({name:`DtProse`},{__name:`Prose`,props:{size:{type:[String,Number],default:300,validator:t=>Object.keys(e.PROSE_SIZE_MODIFIERS).includes(String(t))},density:{type:[String,Number],default:200,validator:t=>Object.keys(e.PROSE_DENSITY_MODIFIERS).includes(String(t))}},setup(n){let r=n,i=(0,t.computed)(()=>[`d-prose`,e.PROSE_SIZE_MODIFIERS[String(r.size)],e.PROSE_DENSITY_MODIFIERS[String(r.density)]].filter(Boolean)),a=(0,t.ref)(null);function o(e){return e.includes(`-`)}function s(t,n){return e.PROSE_DISALLOWED_ELEMENTS.includes(n)?!(n===`input`&&t.getAttribute(`type`)===`checkbox`&&t.parentElement?.tagName.toLowerCase()===`li`):!1}function c(t,n){let r=e.PROSE_ALLOWED_ATTRIBUTES._global||[],i=e.PROSE_ALLOWED_ATTRIBUTES[n]||[],a=[...r,...i],o=[];for(let n of t.attributes){if(e._PROSE_URL_ATTRIBUTES.includes(n.name)&&!e._isSafeProseUrl(n.value)){o.push(n.name);continue}a.includes(n.name)||e._PROSE_ALLOWED_ATTRIBUTE_PREFIXES.some(e=>n.name.startsWith(e))||o.push(n.name)}for(let e of o)t.removeAttribute(e)}function l(){if(!a.value)return;let e=document.createTreeWalker(a.value,NodeFilter.SHOW_ELEMENT),t=e.nextNode();for(;t;){let n=t.tagName.toLowerCase();c(t,n),t=e.nextNode()}}function u(){if(!a.value)return;let e=document.createTreeWalker(a.value,NodeFilter.SHOW_ELEMENT),t=e.nextNode();for(;t;){let n=t.tagName.toLowerCase();o(n)?console.error(`DtProse: Custom element <${n}> is not allowed inside prose content. Only plain HTML elements are permitted.`):s(t,n)&&console.error(`DtProse: <${n}> is not allowed inside prose content. Form elements and interactive controls should not be used in prose blocks.`),t=e.nextNode()}}return(0,t.onMounted)(l),(0,t.onUpdated)(l),process.env.NODE_ENV!==`production`&&((0,t.onMounted)(u),(0,t.onUpdated)(u)),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`proseRef`,ref:a,class:(0,t.normalizeClass)(i.value),"data-qa":`dt-prose`},[(0,t.renderSlot)(e.$slots,`default`)],2))}});exports.default=n;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/validators/index.cjs`),t=require(`./prose-constants.cjs`);let n=require(`vue`);var r=Object.assign({name:`DtProse`},{__name:`Prose`,props:{size:{type:[String,Number],default:300,validator:e.ordinalSizeValidator(t.PROSE_SIZE_MODIFIERS)},density:{type:[String,Number],default:200,validator:e=>Object.keys(t.PROSE_DENSITY_MODIFIERS).includes(String(e))}},setup(e){let r=e,i=(0,n.computed)(()=>[`d-prose`,t.PROSE_SIZE_MODIFIERS[String(r.size)],t.PROSE_DENSITY_MODIFIERS[String(r.density)]].filter(Boolean)),a=(0,n.ref)(null);function o(e){return e.includes(`-`)}function s(e,n){return t.PROSE_DISALLOWED_ELEMENTS.includes(n)?!(n===`input`&&e.getAttribute(`type`)===`checkbox`&&e.parentElement?.tagName.toLowerCase()===`li`):!1}function c(e,n){let r=t.PROSE_ALLOWED_ATTRIBUTES._global||[],i=t.PROSE_ALLOWED_ATTRIBUTES[n]||[],a=[...r,...i],o=[];for(let n of e.attributes){if(t._PROSE_URL_ATTRIBUTES.includes(n.name)&&!t._isSafeProseUrl(n.value)){o.push(n.name);continue}a.includes(n.name)||t._PROSE_ALLOWED_ATTRIBUTE_PREFIXES.some(e=>n.name.startsWith(e))||o.push(n.name)}for(let t of o)e.removeAttribute(t)}function l(){if(!a.value)return;let e=document.createTreeWalker(a.value,NodeFilter.SHOW_ELEMENT),t=e.nextNode();for(;t;){let n=t.tagName.toLowerCase();c(t,n),t=e.nextNode()}}function u(){if(!a.value)return;let e=document.createTreeWalker(a.value,NodeFilter.SHOW_ELEMENT),t=e.nextNode();for(;t;){let n=t.tagName.toLowerCase();o(n)?console.error(`DtProse: Custom element <${n}> is not allowed inside prose content. Only plain HTML elements are permitted.`):s(t,n)&&console.error(`DtProse: <${n}> is not allowed inside prose content. Form elements and interactive controls should not be used in prose blocks.`),t=e.nextNode()}}return(0,n.onMounted)(l),(0,n.onUpdated)(l),process.env.NODE_ENV!==`production`&&((0,n.onMounted)(u),(0,n.onUpdated)(u)),(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{ref_key:`proseRef`,ref:a,class:(0,n.normalizeClass)(i.value),"data-qa":`dt-prose`},[(0,n.renderSlot)(e.$slots,`default`)],2))}});exports.default=r;
2
2
  //# sourceMappingURL=prose.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prose.cjs","names":[],"sources":["../../../components/Prose/Prose.vue"],"sourcesContent":["<!-- eslint-disable vue/no-restricted-class -->\n<template>\n <div\n ref=\"proseRef\"\n :class=\"proseClasses\"\n data-qa=\"dt-prose\"\n >\n <!-- @slot Default slot for raw HTML content -->\n <slot />\n </div>\n</template>\n\n<script setup>\ndefineOptions({ name: 'DtProse' });\n\nimport { computed, ref, onMounted, onUpdated } from 'vue';\nimport {\n PROSE_DISALLOWED_ELEMENTS,\n PROSE_ALLOWED_ATTRIBUTES,\n _PROSE_ALLOWED_ATTRIBUTE_PREFIXES,\n _PROSE_URL_ATTRIBUTES,\n PROSE_SIZE_MODIFIERS,\n PROSE_DENSITY_MODIFIERS,\n _isSafeProseUrl,\n} from './ProseConstants.js';\n\nconst props = defineProps({\n /**\n * The size of the prose typography scale.\n * @values 100, 200, 300\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: (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":"ueA0BA,IAAM,EAAQ,EAsBR,GAAA,EAAA,EAAA,cAA8B,CAClC,UACA,EAAA,qBAAqB,OAAO,EAAM,KAAK,EACvC,EAAA,wBAAwB,OAAO,EAAM,QAAQ,EAC9C,CAAC,OAAO,QAAQ,CAAC,CAEZ,GAAA,EAAA,EAAA,KAAe,KAAK,CAE1B,SAAS,EAAiB,EAAS,CACjC,OAAO,EAAQ,SAAS,IAAI,CAG9B,SAAS,EAAqB,EAAM,EAAS,CAI3C,OAHK,EAAA,0BAA0B,SAAS,EAAQ,CAGzC,EACL,IAAY,SACZ,EAAK,aAAa,OAAO,GAAK,YAC9B,EAAK,eAAe,QAAQ,aAAa,GAAK,MANS,GAU3D,SAAS,EAA2B,EAAM,EAAS,CACjD,IAAM,EAAgB,EAAA,yBAAyB,SAAW,EAAE,CACtD,EAAgB,EAAA,yBAAyB,IAAY,EAAE,CACvD,EAAU,CAAC,GAAG,EAAe,GAAG,EAAc,CAE9C,EAAgB,EAAE,CACxB,IAAK,IAAM,KAAQ,EAAK,WAAY,CAClC,GAAI,EAAA,sBAAsB,SAAS,EAAK,KAAK,EAAI,CAAC,EAAA,gBAAgB,EAAK,MAAM,CAAE,CAC7E,EAAc,KAAK,EAAK,KAAK,CAC7B,SAEE,EAAQ,SAAS,EAAK,KAAK,EAC3B,EAAA,kCAAkC,KAAK,GAAU,EAAK,KAAK,WAAW,EAAO,CAAC,EAClF,EAAc,KAAK,EAAK,KAAK,CAE/B,IAAK,IAAM,KAAY,EACrB,EAAK,gBAAgB,EAAS,CAIlC,SAAS,GAAmB,CAC1B,GAAI,CAAC,EAAS,MAAO,OAErB,IAAM,EAAS,SAAS,iBACtB,EAAS,MACT,WAAW,aACZ,CAEG,EAAO,EAAO,UAAU,CAC5B,KAAO,GAAM,CACX,IAAM,EAAU,EAAK,QAAQ,aAAa,CAC1C,EAA0B,EAAM,EAAQ,CAExC,EAAO,EAAO,UAAU,EAI5B,SAAS,GAAmB,CAC1B,GAAI,CAAC,EAAS,MAAO,OAErB,IAAM,EAAS,SAAS,iBACtB,EAAS,MACT,WAAW,aACZ,CAEG,EAAO,EAAO,UAAU,CAC5B,KAAO,GAAM,CACX,IAAM,EAAU,EAAK,QAAQ,aAAa,CAEtC,EAAgB,EAAQ,CAC1B,QAAQ,MACN,4BAA4B,EAAQ,gFAErC,CACQ,EAAoB,EAAM,EAAQ,EAC3C,QAAQ,MACN,aAAa,EAAQ,mHAEtB,CAGH,EAAO,EAAO,UAAU,SAI5B,EAAA,EAAA,WAAU,EAAgB,EAC1B,EAAA,EAAA,WAAU,EAAgB,CAE1B,QAAA,IAAA,WAA6B,gBAC3B,EAAA,EAAA,WAAU,EAAgB,EAC1B,EAAA,EAAA,WAAU,EAAgB,qDApIpB,MAAA,SANA,WAAJ,IAAI,EACH,OAAA,EAAA,EAAA,gBAAO,EAAA,MAAY,CACpB,UAAQ,8BAGA,EAAA,OAAA,UAAA,CAAA,CAAA,EAAA"}
1
+ {"version":3,"file":"prose.cjs","names":[],"sources":["../../../components/Prose/Prose.vue"],"sourcesContent":["<!-- eslint-disable vue/no-restricted-class -->\n<template>\n <div\n ref=\"proseRef\"\n :class=\"proseClasses\"\n data-qa=\"dt-prose\"\n >\n <!-- @slot Default slot for raw HTML content -->\n <slot />\n </div>\n</template>\n\n<script setup>\ndefineOptions({ name: 'DtProse' });\n\nimport { computed, ref, onMounted, onUpdated } from 'vue';\nimport { ordinalSizeValidator } from '@/common/validators';\nimport {\n PROSE_DISALLOWED_ELEMENTS,\n PROSE_ALLOWED_ATTRIBUTES,\n _PROSE_ALLOWED_ATTRIBUTE_PREFIXES,\n _PROSE_URL_ATTRIBUTES,\n PROSE_SIZE_MODIFIERS,\n PROSE_DENSITY_MODIFIERS,\n _isSafeProseUrl,\n} from './ProseConstants.js';\n\nconst props = defineProps({\n /**\n * The size of the prose typography scale.\n * @values 100, 200, 300\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: ordinalSizeValidator(PROSE_SIZE_MODIFIERS),\n },\n\n /**\n * The density (line-height) of prose content.\n * @values 100, 200, 300\n */\n density: {\n type: [String, Number],\n default: 200,\n validator: (s) => Object.keys(PROSE_DENSITY_MODIFIERS).includes(String(s)),\n },\n});\n\nconst proseClasses = computed(() => [\n 'd-prose',\n PROSE_SIZE_MODIFIERS[String(props.size)],\n PROSE_DENSITY_MODIFIERS[String(props.density)],\n].filter(Boolean));\n\nconst proseRef = ref(null);\n\nfunction isCustomElement (tagName) {\n return tagName.includes('-');\n}\n\nfunction isDisallowedElement (node, tagName) {\n if (!PROSE_DISALLOWED_ELEMENTS.includes(tagName)) return false;\n\n // Exception: <input type=\"checkbox\"> inside <li> (task list pattern)\n return !(\n tagName === 'input' &&\n node.getAttribute('type') === 'checkbox' &&\n node.parentElement?.tagName.toLowerCase() === 'li'\n );\n}\n\nfunction stripDisallowedAttributes (node, tagName) {\n const allowedGlobal = PROSE_ALLOWED_ATTRIBUTES._global || [];\n const allowedForTag = PROSE_ALLOWED_ATTRIBUTES[tagName] || [];\n const allowed = [...allowedGlobal, ...allowedForTag];\n\n const attrsToRemove = [];\n for (const attr of node.attributes) {\n if (_PROSE_URL_ATTRIBUTES.includes(attr.name) && !_isSafeProseUrl(attr.value)) {\n attrsToRemove.push(attr.name);\n continue;\n }\n if (allowed.includes(attr.name)) continue;\n if (_PROSE_ALLOWED_ATTRIBUTE_PREFIXES.some(prefix => attr.name.startsWith(prefix))) continue;\n attrsToRemove.push(attr.name);\n }\n for (const attrName of attrsToRemove) {\n node.removeAttribute(attrName);\n }\n}\n\nfunction sanitizeContent () {\n if (!proseRef.value) return;\n\n const walker = document.createTreeWalker(\n proseRef.value,\n NodeFilter.SHOW_ELEMENT,\n );\n\n let node = walker.nextNode();\n while (node) {\n const tagName = node.tagName.toLowerCase();\n stripDisallowedAttributes(node, tagName);\n\n node = walker.nextNode();\n }\n}\n\nfunction validateContent () {\n if (!proseRef.value) return;\n\n const walker = document.createTreeWalker(\n proseRef.value,\n NodeFilter.SHOW_ELEMENT,\n );\n\n let node = walker.nextNode();\n while (node) {\n const tagName = node.tagName.toLowerCase();\n\n if (isCustomElement(tagName)) {\n console.error(\n `DtProse: Custom element <${tagName}> is not allowed inside prose content. ` +\n 'Only plain HTML elements are permitted.',\n );\n } else if (isDisallowedElement(node, tagName)) {\n console.error(\n `DtProse: <${tagName}> is not allowed inside prose content. ` +\n 'Form elements and interactive controls should not be used in prose blocks.',\n );\n }\n\n node = walker.nextNode();\n }\n}\n\nonMounted(sanitizeContent);\nonUpdated(sanitizeContent);\n\nif (process.env.NODE_ENV !== 'production') {\n onMounted(validateContent);\n onUpdated(validateContent);\n}\n</script>\n"],"mappings":"0gBA2BA,IAAM,EAAQ,EAsBR,GAAA,EAAA,EAAA,cAA8B,CAClC,UACA,EAAA,qBAAqB,OAAO,EAAM,KAAK,EACvC,EAAA,wBAAwB,OAAO,EAAM,QAAQ,EAC9C,CAAC,OAAO,QAAQ,CAAC,CAEZ,GAAA,EAAA,EAAA,KAAe,KAAK,CAE1B,SAAS,EAAiB,EAAS,CACjC,OAAO,EAAQ,SAAS,IAAI,CAG9B,SAAS,EAAqB,EAAM,EAAS,CAI3C,OAHK,EAAA,0BAA0B,SAAS,EAAQ,CAGzC,EACL,IAAY,SACZ,EAAK,aAAa,OAAO,GAAK,YAC9B,EAAK,eAAe,QAAQ,aAAa,GAAK,MANS,GAU3D,SAAS,EAA2B,EAAM,EAAS,CACjD,IAAM,EAAgB,EAAA,yBAAyB,SAAW,EAAE,CACtD,EAAgB,EAAA,yBAAyB,IAAY,EAAE,CACvD,EAAU,CAAC,GAAG,EAAe,GAAG,EAAc,CAE9C,EAAgB,EAAE,CACxB,IAAK,IAAM,KAAQ,EAAK,WAAY,CAClC,GAAI,EAAA,sBAAsB,SAAS,EAAK,KAAK,EAAI,CAAC,EAAA,gBAAgB,EAAK,MAAM,CAAE,CAC7E,EAAc,KAAK,EAAK,KAAK,CAC7B,SAEE,EAAQ,SAAS,EAAK,KAAK,EAC3B,EAAA,kCAAkC,KAAK,GAAU,EAAK,KAAK,WAAW,EAAO,CAAC,EAClF,EAAc,KAAK,EAAK,KAAK,CAE/B,IAAK,IAAM,KAAY,EACrB,EAAK,gBAAgB,EAAS,CAIlC,SAAS,GAAmB,CAC1B,GAAI,CAAC,EAAS,MAAO,OAErB,IAAM,EAAS,SAAS,iBACtB,EAAS,MACT,WAAW,aACZ,CAEG,EAAO,EAAO,UAAU,CAC5B,KAAO,GAAM,CACX,IAAM,EAAU,EAAK,QAAQ,aAAa,CAC1C,EAA0B,EAAM,EAAQ,CAExC,EAAO,EAAO,UAAU,EAI5B,SAAS,GAAmB,CAC1B,GAAI,CAAC,EAAS,MAAO,OAErB,IAAM,EAAS,SAAS,iBACtB,EAAS,MACT,WAAW,aACZ,CAEG,EAAO,EAAO,UAAU,CAC5B,KAAO,GAAM,CACX,IAAM,EAAU,EAAK,QAAQ,aAAa,CAEtC,EAAgB,EAAQ,CAC1B,QAAQ,MACN,4BAA4B,EAAQ,gFAErC,CACQ,EAAoB,EAAM,EAAQ,EAC3C,QAAQ,MACN,aAAa,EAAQ,mHAEtB,CAGH,EAAO,EAAO,UAAU,SAI5B,EAAA,EAAA,WAAU,EAAgB,EAC1B,EAAA,EAAA,WAAU,EAAgB,CAE1B,QAAA,IAAA,WAA6B,gBAC3B,EAAA,EAAA,WAAU,EAAgB,EAC1B,EAAA,EAAA,WAAU,EAAgB,qDArIpB,MAAA,SANA,WAAJ,IAAI,EACH,OAAA,EAAA,EAAA,gBAAO,EAAA,MAAY,CACpB,UAAQ,8BAGA,EAAA,OAAA,UAAA,CAAA,CAAA,EAAA"}
@@ -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,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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"}