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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/dist/Combobox-CYEmi3dv.cjs +3 -0
  2. package/dist/Combobox-CYEmi3dv.cjs.map +1 -0
  3. package/dist/{Combobox-By01ETlj.js → Combobox-D8nQeBIf.js} +33 -32
  4. package/dist/Combobox-D8nQeBIf.js.map +1 -0
  5. package/dist/MarkdownRenderer-D5XWsyQk.cjs.map +1 -1
  6. package/dist/{MarkdownRenderer-C3MZDB2I.js → MarkdownRenderer-NSSny0ID.js} +2 -2
  7. package/dist/{MarkdownRenderer-C3MZDB2I.js.map → MarkdownRenderer-NSSny0ID.js.map} +1 -1
  8. package/dist/{RichTextEditor-BX-5tCOx.cjs → RichTextEditor-B9NGgB03.cjs} +2 -2
  9. package/dist/{RichTextEditor-BX-5tCOx.cjs.map → RichTextEditor-B9NGgB03.cjs.map} +1 -1
  10. package/dist/{RichTextEditor-D8Kas5A3.js → RichTextEditor-DxbZSRop.js} +4 -4
  11. package/dist/{RichTextEditor-D8Kas5A3.js.map → RichTextEditor-DxbZSRop.js.map} +1 -1
  12. package/dist/TextList-B6XFfQfD.js +88 -0
  13. package/dist/TextList-B6XFfQfD.js.map +1 -0
  14. package/dist/TextList-Dd-ROFiI.cjs +2 -0
  15. package/dist/TextList-Dd-ROFiI.cjs.map +1 -0
  16. package/dist/TextListItem-DIlrCkaM.cjs +2 -0
  17. package/dist/TextListItem-DIlrCkaM.cjs.map +1 -0
  18. package/dist/TextListItem-ImUi_FWh.js +62 -0
  19. package/dist/TextListItem-ImUi_FWh.js.map +1 -0
  20. package/dist/{Toast-CHbVmbBg.js → Toast-BIHkIpZP.js} +95 -94
  21. package/dist/Toast-BIHkIpZP.js.map +1 -0
  22. package/dist/Toast-D8ARDEgT.cjs +2 -0
  23. package/dist/Toast-D8ARDEgT.cjs.map +1 -0
  24. package/dist/{attachment_carousel-BFIAXWOZ.js → attachment_carousel-CyiexPBk.js} +1 -1
  25. package/dist/{attachment_carousel-BFIAXWOZ.js.map → attachment_carousel-CyiexPBk.js.map} +1 -1
  26. package/dist/{attachment_carousel-BJxqNJ5T.cjs → attachment_carousel-DJqILY7f.cjs} +1 -1
  27. package/dist/{attachment_carousel-BJxqNJ5T.cjs.map → attachment_carousel-DJqILY7f.cjs.map} +1 -1
  28. package/dist/common/mixins/input.d.ts +4 -4
  29. package/dist/common/mixins/input_group.d.ts +2 -2
  30. package/dist/common/sr_only_close_button.vue.d.ts +30 -30
  31. package/dist/common/sr_only_close_button.vue.d.ts.map +1 -1
  32. package/dist/common/validators/index.cjs +1 -1
  33. package/dist/common/validators/index.cjs.map +1 -1
  34. package/dist/common/validators/index.d.ts +2 -0
  35. package/dist/common/validators/index.d.ts.map +1 -1
  36. package/dist/common/validators/index.js +9 -2
  37. package/dist/common/validators/index.js.map +1 -1
  38. package/dist/component-documentation.json +1 -1
  39. package/dist/components/Avatar/Avatar.vue.d.ts +10 -10
  40. package/dist/components/Avatar/Avatar.vue.d.ts.map +1 -1
  41. package/dist/components/Badge/Badge.vue.d.ts +13 -13
  42. package/dist/components/Banner/Banner.vue.d.ts +142 -107
  43. package/dist/components/Banner/Banner.vue.d.ts.map +1 -1
  44. package/dist/components/Box/Box.vue.d.ts +18 -0
  45. package/dist/components/Box/Box.vue.d.ts.map +1 -1
  46. package/dist/components/Box/BoxConstants.d.ts +4 -0
  47. package/dist/components/Box/BoxConstants.d.ts.map +1 -1
  48. package/dist/components/Box/Validators.d.ts +4 -0
  49. package/dist/components/Box/Validators.d.ts.map +1 -1
  50. package/dist/components/Box/index.d.ts +1 -1
  51. package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts +1 -0
  52. package/dist/components/Breadcrumbs/BreadcrumbItem.vue.d.ts.map +1 -1
  53. package/dist/components/Breadcrumbs/Breadcrumbs.vue.d.ts +3 -2
  54. package/dist/components/Button/Button.vue.d.ts +25 -25
  55. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  56. package/dist/components/Card/Card.vue.d.ts +6 -6
  57. package/dist/components/Checkbox/Checkbox.vue.d.ts +62 -27
  58. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
  59. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +82 -47
  60. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -1
  61. package/dist/components/Chip/Chip.vue.d.ts +40 -40
  62. package/dist/components/Chip/Chip.vue.d.ts.map +1 -1
  63. package/dist/components/Codeblock/Codeblock.vue.d.ts +2 -2
  64. package/dist/components/Collapsible/Collapsible.vue.d.ts +39 -39
  65. package/dist/components/Collapsible/Collapsible.vue.d.ts.map +1 -1
  66. package/dist/components/Combobox/Combobox.vue.d.ts +66 -66
  67. package/dist/components/Combobox/Combobox.vue.d.ts.map +1 -1
  68. package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts +29 -29
  69. package/dist/components/Combobox/ComboboxEmptyList.vue.d.ts.map +1 -1
  70. package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts +35 -35
  71. package/dist/components/Combobox/ComboboxLoadingList.vue.d.ts.map +1 -1
  72. package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts +216 -216
  73. package/dist/components/ComboboxWithPopover/ComboboxWithPopover.vue.d.ts.map +1 -1
  74. package/dist/components/DescriptionList/DescriptionList.vue.d.ts +4 -4
  75. package/dist/components/Dropdown/Dropdown.vue.d.ts +82 -82
  76. package/dist/components/Dropdown/Dropdown.vue.d.ts.map +1 -1
  77. package/dist/components/Emoji/Emoji.vue.d.ts +17 -17
  78. package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts +73 -38
  79. package/dist/components/EmojiPicker/EmojiPicker.vue.d.ts.map +1 -1
  80. package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts +73 -38
  81. package/dist/components/EmojiPicker/Modules/EmojiSearch.vue.d.ts.map +1 -1
  82. package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts +24 -24
  83. package/dist/components/EmojiTextWrapper/EmojiTextWrapper.vue.d.ts.map +1 -1
  84. package/dist/components/EmptyState/EmptyState.vue.d.ts.map +1 -1
  85. package/dist/components/FilterPill/FilterPill.vue.d.ts +380 -310
  86. package/dist/components/FilterPill/FilterPill.vue.d.ts.map +1 -1
  87. package/dist/components/Hovercard/Hovercard.vue.d.ts +156 -156
  88. package/dist/components/Hovercard/Hovercard.vue.d.ts.map +1 -1
  89. package/dist/components/Icon/Icon.vue.d.ts +7 -7
  90. package/dist/components/ImageViewer/ImageViewer.vue.d.ts +60 -60
  91. package/dist/components/ImageViewer/ImageViewer.vue.d.ts.map +1 -1
  92. package/dist/components/Input/Input.vue.d.ts +73 -38
  93. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  94. package/dist/components/InputGroup/InputGroup.vue.d.ts +82 -47
  95. package/dist/components/InputGroup/InputGroup.vue.d.ts.map +1 -1
  96. package/dist/components/ItemLayout/ItemLayout.vue.d.ts +20 -20
  97. package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts +116 -81
  98. package/dist/components/KeyboardShortcut/KeyboardShortcut.vue.d.ts.map +1 -1
  99. package/dist/components/Link/Link.vue.d.ts +1 -0
  100. package/dist/components/Link/LinkConstants.d.ts +3 -0
  101. package/dist/components/Link/LinkConstants.d.ts.map +1 -1
  102. package/dist/components/ListItem/ListItem.vue.d.ts +27 -27
  103. package/dist/components/ListItem/ListItem.vue.d.ts.map +1 -1
  104. package/dist/components/ListItemGroup/ListItemGroup.vue.d.ts +4 -4
  105. package/dist/components/Loader/Loader.vue.d.ts +7 -7
  106. package/dist/components/Modal/Modal.vue.d.ts +115 -86
  107. package/dist/components/Modal/Modal.vue.d.ts.map +1 -1
  108. package/dist/components/Modal/ModalConstants.d.ts +0 -5
  109. package/dist/components/Modal/index.d.ts +1 -1
  110. package/dist/components/Notice/Notice.vue.d.ts +142 -107
  111. package/dist/components/Notice/Notice.vue.d.ts.map +1 -1
  112. package/dist/components/Notice/NoticeAction.vue.d.ts +62 -62
  113. package/dist/components/Notice/NoticeAction.vue.d.ts.map +1 -1
  114. package/dist/components/Notice/NoticeContent.vue.d.ts +40 -5
  115. package/dist/components/Notice/NoticeContent.vue.d.ts.map +1 -1
  116. package/dist/components/Notice/NoticeIcon.vue.d.ts +32 -32
  117. package/dist/components/Notice/NoticeIcon.vue.d.ts.map +1 -1
  118. package/dist/components/Pagination/Pagination.vue.d.ts +40 -40
  119. package/dist/components/Pagination/Pagination.vue.d.ts.map +1 -1
  120. package/dist/components/Popover/Popover.vue.d.ts +78 -78
  121. package/dist/components/Popover/Popover.vue.d.ts.map +1 -1
  122. package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts +34 -34
  123. package/dist/components/Popover/PopoverHeaderFooter.vue.d.ts.map +1 -1
  124. package/dist/components/ProgressCircle/ProgressCircle.vue.d.ts +7 -7
  125. package/dist/components/Prose/Prose.vue.d.ts.map +1 -1
  126. package/dist/components/Radio/Radio.vue.d.ts +62 -27
  127. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  128. package/dist/components/RadioGroup/RadioGroup.vue.d.ts +82 -47
  129. package/dist/components/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
  130. package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts +6 -5
  131. package/dist/components/RichTextEditor/Extensions/Channels/ChannelComponent.vue.d.ts.map +1 -1
  132. package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts +10 -10
  133. package/dist/components/RichTextEditor/Extensions/Channels/ChannelSuggestion.vue.d.ts.map +1 -1
  134. package/dist/components/RichTextEditor/Extensions/Emoji/EmojiComponent.vue.d.ts +17 -17
  135. package/dist/components/RichTextEditor/Extensions/Emoji/EmojiSuggestion.vue.d.ts +17 -17
  136. package/dist/components/RichTextEditor/Extensions/Mentions/MentionComponent.vue.d.ts +1 -0
  137. package/dist/components/RichTextEditor/Extensions/Mentions/MentionSuggestion.vue.d.ts +46 -11
  138. package/dist/components/RichTextEditor/Extensions/SlashCommand/SlashCommandSuggestion.vue.d.ts +36 -1
  139. package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts +27 -27
  140. package/dist/components/RichTextEditor/Extensions/Suggestion/SuggestionList.vue.d.ts.map +1 -1
  141. package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts +189 -154
  142. package/dist/components/RichTextEditor/Extensions/Variable/VariableComponent.vue.d.ts.map +1 -1
  143. package/dist/components/RootLayout/RootLayout.vue.d.ts +10 -10
  144. package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
  145. package/dist/components/SelectMenu/SelectMenu.vue.d.ts +69 -34
  146. package/dist/components/SelectMenu/SelectMenu.vue.d.ts.map +1 -1
  147. package/dist/components/Skeleton/Skeleton.vue.d.ts +8 -8
  148. package/dist/components/Skeleton/SkeletonListItem.vue.d.ts +4 -4
  149. package/dist/components/Skeleton/SkeletonParagraph.vue.d.ts +2 -2
  150. package/dist/components/Skeleton/SkeletonShape.vue.d.ts +2 -2
  151. package/dist/components/SplitButton/SplitButton.vue.d.ts +157 -157
  152. package/dist/components/SplitButton/SplitButton.vue.d.ts.map +1 -1
  153. package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts +30 -30
  154. package/dist/components/SplitButton/SplitButtonEnd.vue.d.ts.map +1 -1
  155. package/dist/components/SplitButton/SplitButtonStart.vue.d.ts +31 -31
  156. package/dist/components/Tab/Tab.vue.d.ts +33 -33
  157. package/dist/components/Tab/TabGroup.vue.d.ts +6 -6
  158. package/dist/components/Tab/TabPanel.vue.d.ts +2 -2
  159. package/dist/components/Text/Text.vue.d.ts +36 -1
  160. package/dist/components/Text/Text.vue.d.ts.map +1 -1
  161. package/dist/components/Text/TextConstants.d.ts +53 -0
  162. package/dist/components/Text/TextConstants.d.ts.map +1 -1
  163. package/dist/components/Text/index.d.ts +1 -1
  164. package/dist/components/TextList/TextList.vue.d.ts +87 -0
  165. package/dist/components/TextList/TextList.vue.d.ts.map +1 -0
  166. package/dist/components/TextList/TextListConstants.d.ts +20 -0
  167. package/dist/components/TextList/TextListConstants.d.ts.map +1 -0
  168. package/dist/components/TextList/TextListItem.vue.d.ts +60 -0
  169. package/dist/components/TextList/TextListItem.vue.d.ts.map +1 -0
  170. package/dist/components/TextList/Validators.d.ts +5 -0
  171. package/dist/components/TextList/Validators.d.ts.map +1 -0
  172. package/dist/components/TextList/index.d.ts +4 -0
  173. package/dist/components/TextList/index.d.ts.map +1 -0
  174. package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts +144 -109
  175. package/dist/components/Toast/Layouts/ToastLayoutAlternate.vue.d.ts.map +1 -1
  176. package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts +34 -34
  177. package/dist/components/Toast/Layouts/ToastLayoutAlternateIcon.vue.d.ts.map +1 -1
  178. package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts +142 -107
  179. package/dist/components/Toast/Layouts/ToastLayoutDefault.vue.d.ts.map +1 -1
  180. package/dist/components/Toast/Toast.vue.d.ts +580 -440
  181. package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
  182. package/dist/components/Toggle/Toggle.vue.d.ts +4 -4
  183. package/dist/components/Toggle/Toggle.vue.d.ts.map +1 -1
  184. package/dist/components/Tooltip/Tooltip.vue.d.ts +4 -4
  185. package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts +22 -22
  186. package/dist/components/ValidationMessages/ValidationMessages.vue.d.ts.map +1 -1
  187. package/dist/dialtone-vue.cjs +1 -1
  188. package/dist/dialtone-vue.js +146 -142
  189. package/dist/index.d.ts +1 -0
  190. package/dist/lib/attachment-carousel/attachment-carousel.cjs +1 -1
  191. package/dist/lib/attachment-carousel/attachment-carousel.js +1 -1
  192. package/dist/lib/attachment-carousel/index.cjs +1 -1
  193. package/dist/lib/attachment-carousel/index.js +1 -1
  194. package/dist/lib/avatar/avatar.cjs +1 -1
  195. package/dist/lib/avatar/avatar.cjs.map +1 -1
  196. package/dist/lib/avatar/avatar.js +55 -54
  197. package/dist/lib/avatar/avatar.js.map +1 -1
  198. package/dist/lib/badge/badge.cjs +1 -1
  199. package/dist/lib/badge/badge.cjs.map +1 -1
  200. package/dist/lib/badge/badge.js +36 -35
  201. package/dist/lib/badge/badge.js.map +1 -1
  202. package/dist/lib/box/box-constants.cjs +1 -1
  203. package/dist/lib/box/box-constants.cjs.map +1 -1
  204. package/dist/lib/box/box-constants.js +34 -7
  205. package/dist/lib/box/box-constants.js.map +1 -1
  206. package/dist/lib/box/box.cjs +1 -1
  207. package/dist/lib/box/box.cjs.map +1 -1
  208. package/dist/lib/box/box.js +93 -34
  209. package/dist/lib/box/box.js.map +1 -1
  210. package/dist/lib/box/index.cjs +1 -1
  211. package/dist/lib/box/index.js +3 -3
  212. package/dist/lib/box/validators.cjs +1 -1
  213. package/dist/lib/box/validators.cjs.map +1 -1
  214. package/dist/lib/box/validators.js +4 -4
  215. package/dist/lib/box/validators.js.map +1 -1
  216. package/dist/lib/button/button.cjs +1 -1
  217. package/dist/lib/button/button.cjs.map +1 -1
  218. package/dist/lib/button/button.js +69 -68
  219. package/dist/lib/button/button.js.map +1 -1
  220. package/dist/lib/chip/chip.cjs +1 -1
  221. package/dist/lib/chip/chip.cjs.map +1 -1
  222. package/dist/lib/chip/chip.js +36 -35
  223. package/dist/lib/chip/chip.js.map +1 -1
  224. package/dist/lib/codeblock/codeblock.cjs +1 -1
  225. package/dist/lib/codeblock/codeblock.cjs.map +1 -1
  226. package/dist/lib/codeblock/codeblock.js +11 -10
  227. package/dist/lib/codeblock/codeblock.js.map +1 -1
  228. package/dist/lib/combobox/combobox.cjs +1 -1
  229. package/dist/lib/combobox/combobox.js +1 -1
  230. package/dist/lib/combobox/index.cjs +1 -1
  231. package/dist/lib/combobox/index.js +1 -1
  232. package/dist/lib/combobox-multi-select/combobox-multi-select.cjs +1 -1
  233. package/dist/lib/combobox-multi-select/combobox-multi-select.cjs.map +1 -1
  234. package/dist/lib/combobox-multi-select/combobox-multi-select.js +53 -53
  235. package/dist/lib/combobox-multi-select/combobox-multi-select.js.map +1 -1
  236. package/dist/lib/combobox-with-popover/combobox-with-popover.cjs +1 -1
  237. package/dist/lib/combobox-with-popover/combobox-with-popover.cjs.map +1 -1
  238. package/dist/lib/combobox-with-popover/combobox-with-popover.js +48 -47
  239. package/dist/lib/combobox-with-popover/combobox-with-popover.js.map +1 -1
  240. package/dist/lib/editor/editor.cjs +1 -1
  241. package/dist/lib/editor/editor.js +2 -2
  242. package/dist/lib/emoji/emoji.cjs +1 -1
  243. package/dist/lib/emoji/emoji.cjs.map +1 -1
  244. package/dist/lib/emoji/emoji.js +25 -24
  245. package/dist/lib/emoji/emoji.js.map +1 -1
  246. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs +1 -1
  247. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.cjs.map +1 -1
  248. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js +20 -19
  249. package/dist/lib/emoji-text-wrapper/emoji-text-wrapper.js.map +1 -1
  250. package/dist/lib/empty-state/empty-state.cjs +1 -1
  251. package/dist/lib/empty-state/empty-state.cjs.map +1 -1
  252. package/dist/lib/empty-state/empty-state.js +31 -30
  253. package/dist/lib/empty-state/empty-state.js.map +1 -1
  254. package/dist/lib/filter-pill/filter-pill.cjs +1 -1
  255. package/dist/lib/filter-pill/filter-pill.cjs.map +1 -1
  256. package/dist/lib/filter-pill/filter-pill.js +73 -72
  257. package/dist/lib/filter-pill/filter-pill.js.map +1 -1
  258. package/dist/lib/icon/icon.cjs +1 -1
  259. package/dist/lib/icon/icon.cjs.map +1 -1
  260. package/dist/lib/icon/icon.js +16 -15
  261. package/dist/lib/icon/icon.js.map +1 -1
  262. package/dist/lib/input/input.cjs +1 -1
  263. package/dist/lib/input/input.cjs.map +1 -1
  264. package/dist/lib/input/input.js +64 -63
  265. package/dist/lib/input/input.js.map +1 -1
  266. package/dist/lib/link/link-constants.cjs +1 -1
  267. package/dist/lib/link/link-constants.cjs.map +1 -1
  268. package/dist/lib/link/link-constants.js +11 -9
  269. package/dist/lib/link/link-constants.js.map +1 -1
  270. package/dist/lib/link/link.cjs +1 -1
  271. package/dist/lib/link/link.cjs.map +1 -1
  272. package/dist/lib/link/link.js +17 -14
  273. package/dist/lib/link/link.js.map +1 -1
  274. package/dist/lib/loader/loader.cjs +3 -3
  275. package/dist/lib/loader/loader.cjs.map +1 -1
  276. package/dist/lib/loader/loader.js +21 -20
  277. package/dist/lib/loader/loader.js.map +1 -1
  278. package/dist/lib/message-input/index.cjs +1 -1
  279. package/dist/lib/message-input/index.js +1 -1
  280. package/dist/lib/message-input/message-input.cjs +1 -1
  281. package/dist/lib/message-input/message-input.js +1 -1
  282. package/dist/lib/modal/index.cjs +1 -1
  283. package/dist/lib/modal/index.js +3 -3
  284. package/dist/lib/modal/modal-constants.cjs +1 -1
  285. package/dist/lib/modal/modal-constants.cjs.map +1 -1
  286. package/dist/lib/modal/modal-constants.js +1 -4
  287. package/dist/lib/modal/modal-constants.js.map +1 -1
  288. package/dist/lib/modal/modal.cjs +1 -1
  289. package/dist/lib/modal/modal.cjs.map +1 -1
  290. package/dist/lib/modal/modal.js +40 -42
  291. package/dist/lib/modal/modal.js.map +1 -1
  292. package/dist/lib/popover/popover.cjs +1 -1
  293. package/dist/lib/popover/popover.cjs.map +1 -1
  294. package/dist/lib/popover/popover.js +1 -1
  295. package/dist/lib/popover/popover.js.map +1 -1
  296. package/dist/lib/progress-circle/progress-circle.cjs +1 -1
  297. package/dist/lib/progress-circle/progress-circle.cjs.map +1 -1
  298. package/dist/lib/progress-circle/progress-circle.js +33 -32
  299. package/dist/lib/progress-circle/progress-circle.js.map +1 -1
  300. package/dist/lib/prose/prose.cjs +1 -1
  301. package/dist/lib/prose/prose.cjs.map +1 -1
  302. package/dist/lib/prose/prose.js +23 -22
  303. package/dist/lib/prose/prose.js.map +1 -1
  304. package/dist/lib/rich-text-editor/index.cjs +1 -1
  305. package/dist/lib/rich-text-editor/index.js +1 -1
  306. package/dist/lib/rich-text-editor/markdown-renderer.js +1 -1
  307. package/dist/lib/rich-text-editor/rich-text-editor.cjs +1 -1
  308. package/dist/lib/rich-text-editor/rich-text-editor.js +1 -1
  309. package/dist/lib/segmented-control/segmented-control.cjs +1 -1
  310. package/dist/lib/segmented-control/segmented-control.cjs.map +1 -1
  311. package/dist/lib/segmented-control/segmented-control.js +42 -41
  312. package/dist/lib/segmented-control/segmented-control.js.map +1 -1
  313. package/dist/lib/select-menu/select-menu.cjs +1 -1
  314. package/dist/lib/select-menu/select-menu.cjs.map +1 -1
  315. package/dist/lib/select-menu/select-menu.js +48 -47
  316. package/dist/lib/select-menu/select-menu.js.map +1 -1
  317. package/dist/lib/split-button/split-button.cjs +1 -1
  318. package/dist/lib/split-button/split-button.cjs.map +1 -1
  319. package/dist/lib/split-button/split-button.js +45 -44
  320. package/dist/lib/split-button/split-button.js.map +1 -1
  321. package/dist/lib/tab/tab-group.cjs +1 -1
  322. package/dist/lib/tab/tab-group.cjs.map +1 -1
  323. package/dist/lib/tab/tab-group.js +34 -35
  324. package/dist/lib/tab/tab-group.js.map +1 -1
  325. package/dist/lib/text/index.cjs +1 -1
  326. package/dist/lib/text/index.js +3 -3
  327. package/dist/lib/text/text-constants.cjs +1 -1
  328. package/dist/lib/text/text-constants.cjs.map +1 -1
  329. package/dist/lib/text/text-constants.js +70 -21
  330. package/dist/lib/text/text-constants.js.map +1 -1
  331. package/dist/lib/text/text.cjs +1 -1
  332. package/dist/lib/text/text.cjs.map +1 -1
  333. package/dist/lib/text/text.js +72 -37
  334. package/dist/lib/text/text.js.map +1 -1
  335. package/dist/lib/text-list/index.cjs +1 -0
  336. package/dist/lib/text-list/index.js +4 -0
  337. package/dist/lib/text-list/text-list-constants.cjs +2 -0
  338. package/dist/lib/text-list/text-list-constants.cjs.map +1 -0
  339. package/dist/lib/text-list/text-list-constants.js +31 -0
  340. package/dist/lib/text-list/text-list-constants.js.map +1 -0
  341. package/dist/lib/text-list/text-list-item.cjs +1 -0
  342. package/dist/lib/text-list/text-list-item.js +2 -0
  343. package/dist/lib/text-list/text-list.cjs +1 -0
  344. package/dist/lib/text-list/text-list.js +2 -0
  345. package/dist/lib/text-list/validators.cjs +2 -0
  346. package/dist/lib/text-list/validators.cjs.map +1 -0
  347. package/dist/lib/text-list/validators.js +10 -0
  348. package/dist/lib/text-list/validators.js.map +1 -0
  349. package/dist/lib/toast/index.cjs +1 -1
  350. package/dist/lib/toast/index.js +1 -1
  351. package/dist/lib/toast/toast.cjs +1 -1
  352. package/dist/lib/toast/toast.js +1 -1
  353. package/dist/lib/toggle/toggle.cjs +1 -1
  354. package/dist/lib/toggle/toggle.cjs.map +1 -1
  355. package/dist/lib/toggle/toggle.js +23 -22
  356. package/dist/lib/toggle/toggle.js.map +1 -1
  357. package/dist/{message_input-CbQCd07F.js → message_input-C6BcWqr8.js} +2 -2
  358. package/dist/{message_input-CbQCd07F.js.map → message_input-C6BcWqr8.js.map} +1 -1
  359. package/dist/{message_input-dBQwgyjI.cjs → message_input-ftx8f8wC.cjs} +2 -2
  360. package/dist/{message_input-dBQwgyjI.cjs.map → message_input-ftx8f8wC.cjs.map} +1 -1
  361. package/dist/node_modules/@tiptap/vue-3.cjs.map +1 -1
  362. package/dist/node_modules/@tiptap/vue-3.js +1 -1
  363. package/dist/node_modules/@tiptap/vue-3.js.map +1 -1
  364. package/dist/recipes/buttons/callbar_button/callbar_button.vue.d.ts +33 -33
  365. package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts +149 -149
  366. package/dist/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts.map +1 -1
  367. package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +147 -147
  368. package/dist/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts.map +1 -1
  369. package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts +173 -173
  370. package/dist/recipes/cards/ivr_node/ivr_node.vue.d.ts.map +1 -1
  371. package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts +40 -40
  372. package/dist/recipes/chips/grouped_chip/grouped_chip.vue.d.ts.map +1 -1
  373. package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +132 -132
  374. package/dist/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts.map +1 -1
  375. package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +97 -97
  376. package/dist/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts.map +1 -1
  377. package/dist/recipes/conversation_view/editor/EditorToolbarButton.vue.d.ts +25 -25
  378. package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts +107 -107
  379. package/dist/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts.map +1 -1
  380. package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts +103 -103
  381. package/dist/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts.map +1 -1
  382. package/dist/recipes/conversation_view/editor/editor.vue.d.ts +672 -637
  383. package/dist/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  384. package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +70 -70
  385. package/dist/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts.map +1 -1
  386. package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts +66 -66
  387. package/dist/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts.map +1 -1
  388. package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +55 -55
  389. package/dist/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
  390. package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts +55 -55
  391. package/dist/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts.map +1 -1
  392. package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts +784 -609
  393. package/dist/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  394. package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts +145 -110
  395. package/dist/recipes/conversation_view/message_input/message_input_button.vue.d.ts.map +1 -1
  396. package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts +326 -256
  397. package/dist/recipes/conversation_view/message_input/message_input_link.vue.d.ts.map +1 -1
  398. package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts +185 -150
  399. package/dist/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
  400. package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +30 -30
  401. package/dist/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts.map +1 -1
  402. package/dist/recipes/item_layout/contact_info/contact_info.vue.d.ts +30 -30
  403. package/dist/recipes/leftbar/callbox/callbox.vue.d.ts +28 -28
  404. package/dist/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
  405. package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +72 -72
  406. package/dist/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
  407. package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts +215 -215
  408. package/dist/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
  409. package/dist/recipes/leftbar/general_row/general_row.vue.d.ts +176 -176
  410. package/dist/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
  411. package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts +80 -80
  412. package/dist/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts.map +1 -1
  413. package/dist/recipes/leftbar/group_row/group_row.vue.d.ts +181 -181
  414. package/dist/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
  415. package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +10 -10
  416. package/dist/recipes/leftbar/unread_pill/unread_pill.vue.d.ts.map +1 -1
  417. package/package.json +4 -4
  418. package/dist/Combobox-By01ETlj.js.map +0 -1
  419. package/dist/Combobox-D4hc1-41.cjs +0 -3
  420. package/dist/Combobox-D4hc1-41.cjs.map +0 -1
  421. package/dist/Toast-CHbVmbBg.js.map +0 -1
  422. package/dist/Toast-DX-REYXG.cjs +0 -2
  423. package/dist/Toast-DX-REYXG.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.cjs","names":[],"sources":["../../../components/Avatar/Avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"resolvedInteractive ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n :style=\"avatarStyles\"\n :data-avatar-family=\"!iconOnly ? computedFamily : undefined\"\n :data-avatar-variant=\"!iconOnly ? computedVariant : undefined\"\n data-qa=\"dt-avatar\"\n :type=\"resolvedInteractive ? 'button' : undefined\"\n @click=\"handleClick\"\n >\n <div\n ref=\"canvas\"\n :class=\"[\n canvasClass,\n 'd-avatar__canvas',\n { 'd-avatar--image-loaded': imageLoadedSuccessfully },\n ]\"\n >\n <div class=\"d-avatar__canvas-inner\">\n <img\n v-if=\"showImage\"\n ref=\"avatarImage\"\n class=\"d-avatar__image\"\n data-qa=\"dt-avatar-image\"\n :src=\"imageSrc\"\n :alt=\"imageAlt\"\n >\n <div\n v-else-if=\"isIconType\"\n :class=\"[iconClass, AVATAR_KIND_MODIFIERS.icon]\"\n :aria-label=\"resolvedInteractive ? iconAriaLabel : ''\"\n :data-qa=\"iconDataQa\"\n >\n <!-- @slot Slot for avatar icon. It will display if no imageSrc is provided -->\n <slot name=\"icon\" />\n </div>\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\n </div>\n </div>\n <div\n v-if=\"hasOverlayIcon || overlayText\"\n :class=\"overlayClasses\"\n >\n <!-- @slot Slot for overlay icon. -->\n <slot\n v-if=\"hasOverlayIcon\"\n name=\"overlayIcon\"\n />\n <p\n v-else-if=\"overlayText\"\n class=\"d-avatar__overlay-text\"\n >\n {{ overlayText }}\n </p>\n </div>\n <span\n v-if=\"showGroup\"\n class=\"d-avatar__count\"\n data-qa=\"dt-avatar-count\"\n role=\"img\"\n :aria-label=\"`${group} participants`\"\n >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup && AVATAR_PRESENCE_SIZE_MODIFIERS[size]\"\n :presence=\"presence\"\n :class=\"[\n 'd-avatar__presence',\n AVATAR_PRESENCE_SIZE_MODIFIERS[size],\n ]\"\n v-bind=\"presenceProps\"\n data-qa=\"dt-presence\"\n />\n </component>\n</template>\n\n<script>\nimport { getUniqueString, hasSlotContent } from '@/common/utils';\nimport { DtPresence } from '../Presence';\nimport {\n AVATAR_KIND_MODIFIERS,\n AVATAR_SIZE_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_FAMILY_COUNT,\n AVATAR_VARIANT_COUNT,\n colorToFamilyVariant,\n getRandomFamilyVariant,\n computeAvatarHex,\n} from './AvatarConstants';\nimport { extractInitialsFromName } from './Utils';\n\n// Check if browser supports oklch() - only compute hex fallback if not\nconst supportsOklch = typeof CSS !== 'undefined' && CSS.supports?.('background', 'oklch(0.5 0.1 0)');\n\n/**\n * An avatar is a visual representation of a user or object.\n * @see https://dialtone.dialpad.com/components/avatar.html\n */\nexport default {\n name: 'DtAvatar',\n components: { DtPresence },\n\n props: {\n /**\n * Id of the avatar content wrapper element\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * **Recommended.** Pass a unique identifier (e.g., user ID) to generate consistent,\n * deterministic colors for this avatar. The same seed always produces the same color.\n * This is the preferred approach for most use cases.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * **Advanced.** Avatar color family (1-12). Each family represents a different hue\n * offset from the theme's anchor. Only use this if you need explicit control over\n * the color. For most cases, use `seed` instead.\n * Families: 1=Red, 2=Orange, 3=Amber, 4=Yellow-Green, 5=Green, 6=Teal, 7=Cyan,\n * 8=Blue, 9=Indigo, 10=Purple, 11=Magenta, 12=Pink\n * @values 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\n */\n family: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 1 && val <= AVATAR_FAMILY_COUNT,\n },\n\n /**\n * **Advanced.** Avatar color variant (0-9). Controls lightness/chroma within the family.\n * Only use this if you need explicit control over the color. For most cases, use `seed` instead.\n * 0 = darkest, 9 = lightest. Variants 0-5 have light text, 6-9 have dark text.\n * @values 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n */\n variant: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 0 && val < AVATAR_VARIANT_COUNT,\n },\n\n /**\n * Avatar color code for backward compatibility. Converted internally\n * to family/variant. For new code, use `seed` (recommended) or `family`/`variant`.\n * Format: family (1-12) * 100 + variant (0-9) * 10, e.g., '540' = family 5, variant 4.\n * @deprecated Use seed or family/variant instead.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar.\n * T-shirt sizes (xs, sm, md, lg, xl) are deprecated and will be removed in the next major version.\n * Please use the numeric scale instead.\n * @values 100, 150, 200, 250, 300, 400, 500, 600, 700, 800, 900\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: (size) => Object.keys(AVATAR_SIZE_MODIFIERS).includes(String(size)),\n },\n\n /**\n * Used to customize the avatar container\n */\n avatarClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Set classes on the avatar canvas. Wrapper around the core avatar image.\n */\n canvasClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Pass through classes. Used to customize the avatar icon\n */\n iconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Determines whether to show the presence indicator for\n * Avatar - accepts PRESENCE_STATES values: 'busy', 'away', 'offline',\n * 'active', or 'dnd'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active, dnd\n */\n presence: {\n type: String,\n default: AVATAR_PRESENCE_STATES.NONE,\n validator: (state) => {\n return Object.values(AVATAR_PRESENCE_STATES).includes(state);\n },\n },\n\n /**\n * A set of props to be passed into the presence component.\n */\n presenceProps: {\n type: Object,\n default: () => ({}),\n },\n\n /**\n * Determines whether to show a group avatar.\n * Limit to 2 digits max, more than 99 will be rendered as \"99+\".\n * if the number is 1 or less it would just show the regular avatar as if group had not been set.\n */\n group: {\n type: Number,\n default: undefined,\n validator: (group) => AVATAR_GROUP_VALIDATOR(group),\n },\n\n /**\n * The text that overlays the avatar\n */\n overlayText: {\n type: String,\n default: '',\n },\n\n /**\n * Used to customize the avatar overlay\n */\n overlayClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Source of the image\n */\n imageSrc: {\n type: String,\n default: '',\n },\n\n /**\n * Alt attribute of the image, required if imageSrc is provided.\n * Can be set to '' (empty string) if the image is described\n * in text nearby\n */\n imageAlt: {\n type: String,\n default: undefined,\n },\n\n /**\n * Full name used to extract initials.\n */\n fullName: {\n type: String,\n default: '',\n },\n\n /**\n * Makes the avatar focusable and interactive,\n * emits a click event when clicked.\n */\n interactive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * @deprecated Use interactive instead.\n */\n clickable: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Descriptive label for the icon.\n * To avoid a11y issues, set this prop if clickable and iconName are set.\n */\n iconAriaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * When true, renders the avatar with a transparent background and no color.\n * Useful for displaying icons that should not have a colored background,\n * such as channel or navigation icons.\n */\n iconOnly: {\n type: Boolean,\n default: false,\n },\n\n /**\n * When true, renders the avatar in a desaturated/washed-out state.\n * Use this to indicate that a user is deactivated or inactive.\n */\n deactivated: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Avatar click event\n *\n * @event click\n * @type {PointerEvent | KeyboardEvent}\n */\n 'click',\n ],\n\n data () {\n return {\n AVATAR_SIZE_MODIFIERS,\n AVATAR_KIND_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n hasSlotContent,\n anchorHue: 0,\n };\n },\n\n computed: {\n resolvedInteractive () {\n return this.clickable ?? this.interactive;\n },\n\n hasOverlayIcon () {\n return hasSlotContent(this.$slots.overlayIcon);\n },\n\n isIconType () {\n return hasSlotContent(this.$slots.icon);\n },\n\n iconDataQa () {\n return 'dt-avatar-icon';\n },\n\n /**\n * Compute family from props, color prop, or random\n */\n computedFamily () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit family prop takes precedence\n if (this.family !== undefined) return this.family;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.family;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.family;\n },\n\n /**\n * Compute variant from props, color prop, or random\n */\n computedVariant () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit variant prop takes precedence\n if (this.variant !== undefined) return this.variant;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.variant;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.variant;\n },\n\n avatarClasses () {\n return [\n 'd-avatar',\n AVATAR_SIZE_MODIFIERS[this.validatedSize],\n this.avatarClass,\n {\n 'd-avatar--group': this.showGroup,\n 'd-avatar--group-digits-2': this.showGroup && String(this.formattedGroup).length === 2,\n 'd-avatar--group-digits-3': this.showGroup && String(this.formattedGroup).length >= 3,\n 'd-avatar--clickable': this.resolvedInteractive,\n 'd-avatar--presence': this.presence && !this.showGroup,\n 'd-avatar--icon-only': this.iconOnly,\n 'd-avatar--deactivated': this.deactivated,\n },\n ];\n },\n\n /**\n * Compute inline styles for fallback color in browsers that don't support oklch()\n */\n avatarStyles () {\n const baseStyles = [];\n\n // Only compute hex fallback for browsers that don't support oklch()\n if (!supportsOklch && !this.isIconType && this.computedFamily && this.computedVariant !== undefined) {\n const fallbackHex = computeAvatarHex(this.computedFamily, this.computedVariant, this.anchorHue);\n baseStyles.push({ '--avatar-color-background': fallbackHex });\n }\n\n return baseStyles.length > 0 ? baseStyles : undefined;\n },\n\n overlayClasses () {\n return [\n 'd-avatar__overlay',\n this.overlayClass,\n { 'd-avatar__overlay-icon': this.hasOverlayIcon },\n ];\n },\n\n showGroup () {\n return AVATAR_GROUP_VALIDATOR(this.group);\n },\n\n formattedGroup () {\n const size = String(this.validatedSize);\n // Sizes 100-250 cap at 2 digits — too small for 3\n const smallSizes = ['xs', '100', '150', '200', '250'];\n const maxDigits = smallSizes.includes(size) ? 2 : 3;\n if (maxDigits === 2) {\n return this.group > 9 ? '9+' : this.group;\n }\n return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n return this.size;\n },\n\n showImage () {\n return this.imageLoadedSuccessfully !== false && this.imageSrc;\n },\n },\n\n watch: {\n fullName: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n size: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n group: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n imageSrc (newSrc) {\n this.imageLoadedSuccessfully = null;\n if (!newSrc) return;\n\n this.validateProps();\n this.setImageListeners();\n },\n },\n\n mounted () {\n this.validateProps();\n this.setImageListeners();\n // Only read anchor hue for fallback computation in browsers without oklch() support\n if (!supportsOklch) {\n this.readAnchorHue();\n }\n },\n\n methods: {\n async setImageListeners () {\n await this.$nextTick();\n const el = this.$refs.avatarImage;\n if (!el) return;\n\n el.addEventListener('load', () => this._loadedImageEventHandler(el), { once: true });\n el.addEventListener('error', () => this._erroredImageEventHandler(el), { once: true });\n },\n\n formatInitials () {\n const initials = extractInitialsFromName(this.fullName);\n const size = String(this.validatedSize);\n\n // xs/100 are too small for initials\n if (size === 'xs' || size === '100') {\n this.formattedInitials = '';\n // sm/150/200 show single initial\n } else if (size === 'sm' || size === '150' || size === '200') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n /**\n * Read the anchor hue from CSS custom property for fallback computation\n */\n readAnchorHue () {\n try {\n const hueValue = getComputedStyle(document.documentElement)\n .getPropertyValue('--dt-avatar-anchor-hue')\n .trim();\n this.anchorHue = parseFloat(hueValue) || 0;\n } catch {\n this.anchorHue = 0;\n }\n },\n\n _loadedImageEventHandler (el) {\n this.imageLoadedSuccessfully = true;\n el.classList.remove('d-d-none');\n },\n\n _erroredImageEventHandler (el) {\n this.imageLoadedSuccessfully = false;\n el.classList.add('d-d-none');\n },\n\n validateProps () {\n if (this.imageSrc && this.imageAlt === undefined) {\n console.error('image-alt required if image-src is provided. Can be set to \"\" (empty string) if the image is described in text nearby');\n }\n },\n\n handleClick (e) {\n if (!this.resolvedInteractive) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"avatar.cjs","names":[],"sources":["../../../components/Avatar/Avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"resolvedInteractive ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n :style=\"avatarStyles\"\n :data-avatar-family=\"!iconOnly ? computedFamily : undefined\"\n :data-avatar-variant=\"!iconOnly ? computedVariant : undefined\"\n data-qa=\"dt-avatar\"\n :type=\"resolvedInteractive ? 'button' : undefined\"\n @click=\"handleClick\"\n >\n <div\n ref=\"canvas\"\n :class=\"[\n canvasClass,\n 'd-avatar__canvas',\n { 'd-avatar--image-loaded': imageLoadedSuccessfully },\n ]\"\n >\n <div class=\"d-avatar__canvas-inner\">\n <img\n v-if=\"showImage\"\n ref=\"avatarImage\"\n class=\"d-avatar__image\"\n data-qa=\"dt-avatar-image\"\n :src=\"imageSrc\"\n :alt=\"imageAlt\"\n >\n <div\n v-else-if=\"isIconType\"\n :class=\"[iconClass, AVATAR_KIND_MODIFIERS.icon]\"\n :aria-label=\"resolvedInteractive ? iconAriaLabel : ''\"\n :data-qa=\"iconDataQa\"\n >\n <!-- @slot Slot for avatar icon. It will display if no imageSrc is provided -->\n <slot name=\"icon\" />\n </div>\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\n </div>\n </div>\n <div\n v-if=\"hasOverlayIcon || overlayText\"\n :class=\"overlayClasses\"\n >\n <!-- @slot Slot for overlay icon. -->\n <slot\n v-if=\"hasOverlayIcon\"\n name=\"overlayIcon\"\n />\n <p\n v-else-if=\"overlayText\"\n class=\"d-avatar__overlay-text\"\n >\n {{ overlayText }}\n </p>\n </div>\n <span\n v-if=\"showGroup\"\n class=\"d-avatar__count\"\n data-qa=\"dt-avatar-count\"\n role=\"img\"\n :aria-label=\"`${group} participants`\"\n >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup && AVATAR_PRESENCE_SIZE_MODIFIERS[size]\"\n :presence=\"presence\"\n :class=\"[\n 'd-avatar__presence',\n AVATAR_PRESENCE_SIZE_MODIFIERS[size],\n ]\"\n v-bind=\"presenceProps\"\n data-qa=\"dt-presence\"\n />\n </component>\n</template>\n\n<script>\nimport { getUniqueString, hasSlotContent } from '@/common/utils';\nimport { ordinalSizeValidator } from '@/common/validators';\nimport { DtPresence } from '../Presence';\nimport {\n AVATAR_KIND_MODIFIERS,\n AVATAR_SIZE_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_FAMILY_COUNT,\n AVATAR_VARIANT_COUNT,\n colorToFamilyVariant,\n getRandomFamilyVariant,\n computeAvatarHex,\n} from './AvatarConstants';\nimport { extractInitialsFromName } from './Utils';\n\n// Check if browser supports oklch() - only compute hex fallback if not\nconst supportsOklch = typeof CSS !== 'undefined' && CSS.supports?.('background', 'oklch(0.5 0.1 0)');\n\n/**\n * An avatar is a visual representation of a user or object.\n * @see https://dialtone.dialpad.com/components/avatar.html\n */\nexport default {\n name: 'DtAvatar',\n components: { DtPresence },\n\n props: {\n /**\n * Id of the avatar content wrapper element\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * **Recommended.** Pass a unique identifier (e.g., user ID) to generate consistent,\n * deterministic colors for this avatar. The same seed always produces the same color.\n * This is the preferred approach for most use cases.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * **Advanced.** Avatar color family (1-12). Each family represents a different hue\n * offset from the theme's anchor. Only use this if you need explicit control over\n * the color. For most cases, use `seed` instead.\n * Families: 1=Red, 2=Orange, 3=Amber, 4=Yellow-Green, 5=Green, 6=Teal, 7=Cyan,\n * 8=Blue, 9=Indigo, 10=Purple, 11=Magenta, 12=Pink\n * @values 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\n */\n family: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 1 && val <= AVATAR_FAMILY_COUNT,\n },\n\n /**\n * **Advanced.** Avatar color variant (0-9). Controls lightness/chroma within the family.\n * Only use this if you need explicit control over the color. For most cases, use `seed` instead.\n * 0 = darkest, 9 = lightest. Variants 0-5 have light text, 6-9 have dark text.\n * @values 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n */\n variant: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 0 && val < AVATAR_VARIANT_COUNT,\n },\n\n /**\n * Avatar color code for backward compatibility. Converted internally\n * to family/variant. For new code, use `seed` (recommended) or `family`/`variant`.\n * Format: family (1-12) * 100 + variant (0-9) * 10, e.g., '540' = family 5, variant 4.\n * @deprecated Use seed or family/variant instead.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar.\n * T-shirt sizes (xs, sm, md, lg, xl) are deprecated and will be removed in the next major version.\n * Please use the numeric scale instead.\n * @values 100, 150, 200, 250, 300, 400, 500, 600, 700, 800, 900\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: ordinalSizeValidator(AVATAR_SIZE_MODIFIERS),\n },\n\n /**\n * Used to customize the avatar container\n */\n avatarClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Set classes on the avatar canvas. Wrapper around the core avatar image.\n */\n canvasClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Pass through classes. Used to customize the avatar icon\n */\n iconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Determines whether to show the presence indicator for\n * Avatar - accepts PRESENCE_STATES values: 'busy', 'away', 'offline',\n * 'active', or 'dnd'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active, dnd\n */\n presence: {\n type: String,\n default: AVATAR_PRESENCE_STATES.NONE,\n validator: (state) => {\n return Object.values(AVATAR_PRESENCE_STATES).includes(state);\n },\n },\n\n /**\n * A set of props to be passed into the presence component.\n */\n presenceProps: {\n type: Object,\n default: () => ({}),\n },\n\n /**\n * Determines whether to show a group avatar.\n * Limit to 2 digits max, more than 99 will be rendered as \"99+\".\n * if the number is 1 or less it would just show the regular avatar as if group had not been set.\n */\n group: {\n type: Number,\n default: undefined,\n validator: (group) => AVATAR_GROUP_VALIDATOR(group),\n },\n\n /**\n * The text that overlays the avatar\n */\n overlayText: {\n type: String,\n default: '',\n },\n\n /**\n * Used to customize the avatar overlay\n */\n overlayClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Source of the image\n */\n imageSrc: {\n type: String,\n default: '',\n },\n\n /**\n * Alt attribute of the image, required if imageSrc is provided.\n * Can be set to '' (empty string) if the image is described\n * in text nearby\n */\n imageAlt: {\n type: String,\n default: undefined,\n },\n\n /**\n * Full name used to extract initials.\n */\n fullName: {\n type: String,\n default: '',\n },\n\n /**\n * Makes the avatar focusable and interactive,\n * emits a click event when clicked.\n */\n interactive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * @deprecated Use interactive instead.\n */\n clickable: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Descriptive label for the icon.\n * To avoid a11y issues, set this prop if clickable and iconName are set.\n */\n iconAriaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * When true, renders the avatar with a transparent background and no color.\n * Useful for displaying icons that should not have a colored background,\n * such as channel or navigation icons.\n */\n iconOnly: {\n type: Boolean,\n default: false,\n },\n\n /**\n * When true, renders the avatar in a desaturated/washed-out state.\n * Use this to indicate that a user is deactivated or inactive.\n */\n deactivated: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Avatar click event\n *\n * @event click\n * @type {PointerEvent | KeyboardEvent}\n */\n 'click',\n ],\n\n data () {\n return {\n AVATAR_SIZE_MODIFIERS,\n AVATAR_KIND_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n hasSlotContent,\n anchorHue: 0,\n };\n },\n\n computed: {\n resolvedInteractive () {\n return this.clickable ?? this.interactive;\n },\n\n hasOverlayIcon () {\n return hasSlotContent(this.$slots.overlayIcon);\n },\n\n isIconType () {\n return hasSlotContent(this.$slots.icon);\n },\n\n iconDataQa () {\n return 'dt-avatar-icon';\n },\n\n /**\n * Compute family from props, color prop, or random\n */\n computedFamily () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit family prop takes precedence\n if (this.family !== undefined) return this.family;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.family;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.family;\n },\n\n /**\n * Compute variant from props, color prop, or random\n */\n computedVariant () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit variant prop takes precedence\n if (this.variant !== undefined) return this.variant;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.variant;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.variant;\n },\n\n avatarClasses () {\n return [\n 'd-avatar',\n AVATAR_SIZE_MODIFIERS[this.validatedSize],\n this.avatarClass,\n {\n 'd-avatar--group': this.showGroup,\n 'd-avatar--group-digits-2': this.showGroup && String(this.formattedGroup).length === 2,\n 'd-avatar--group-digits-3': this.showGroup && String(this.formattedGroup).length >= 3,\n 'd-avatar--clickable': this.resolvedInteractive,\n 'd-avatar--presence': this.presence && !this.showGroup,\n 'd-avatar--icon-only': this.iconOnly,\n 'd-avatar--deactivated': this.deactivated,\n },\n ];\n },\n\n /**\n * Compute inline styles for fallback color in browsers that don't support oklch()\n */\n avatarStyles () {\n const baseStyles = [];\n\n // Only compute hex fallback for browsers that don't support oklch()\n if (!supportsOklch && !this.isIconType && this.computedFamily && this.computedVariant !== undefined) {\n const fallbackHex = computeAvatarHex(this.computedFamily, this.computedVariant, this.anchorHue);\n baseStyles.push({ '--avatar-color-background': fallbackHex });\n }\n\n return baseStyles.length > 0 ? baseStyles : undefined;\n },\n\n overlayClasses () {\n return [\n 'd-avatar__overlay',\n this.overlayClass,\n { 'd-avatar__overlay-icon': this.hasOverlayIcon },\n ];\n },\n\n showGroup () {\n return AVATAR_GROUP_VALIDATOR(this.group);\n },\n\n formattedGroup () {\n const size = String(this.validatedSize);\n // Sizes 100-250 cap at 2 digits — too small for 3\n const smallSizes = ['xs', '100', '150', '200', '250'];\n const maxDigits = smallSizes.includes(size) ? 2 : 3;\n if (maxDigits === 2) {\n return this.group > 9 ? '9+' : this.group;\n }\n return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n return this.size;\n },\n\n showImage () {\n return this.imageLoadedSuccessfully !== false && this.imageSrc;\n },\n },\n\n watch: {\n fullName: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n size: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n group: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n imageSrc (newSrc) {\n this.imageLoadedSuccessfully = null;\n if (!newSrc) return;\n\n this.validateProps();\n this.setImageListeners();\n },\n },\n\n mounted () {\n this.validateProps();\n this.setImageListeners();\n // Only read anchor hue for fallback computation in browsers without oklch() support\n if (!supportsOklch) {\n this.readAnchorHue();\n }\n },\n\n methods: {\n async setImageListeners () {\n await this.$nextTick();\n const el = this.$refs.avatarImage;\n if (!el) return;\n\n el.addEventListener('load', () => this._loadedImageEventHandler(el), { once: true });\n el.addEventListener('error', () => this._erroredImageEventHandler(el), { once: true });\n },\n\n formatInitials () {\n const initials = extractInitialsFromName(this.fullName);\n const size = String(this.validatedSize);\n\n // xs/100 are too small for initials\n if (size === 'xs' || size === '100') {\n this.formattedInitials = '';\n // sm/150/200 show single initial\n } else if (size === 'sm' || size === '150' || size === '200') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n /**\n * Read the anchor hue from CSS custom property for fallback computation\n */\n readAnchorHue () {\n try {\n const hueValue = getComputedStyle(document.documentElement)\n .getPropertyValue('--dt-avatar-anchor-hue')\n .trim();\n this.anchorHue = parseFloat(hueValue) || 0;\n } catch {\n this.anchorHue = 0;\n }\n },\n\n _loadedImageEventHandler (el) {\n this.imageLoadedSuccessfully = true;\n el.classList.remove('d-d-none');\n },\n\n _erroredImageEventHandler (el) {\n this.imageLoadedSuccessfully = false;\n el.classList.add('d-d-none');\n },\n\n validateProps () {\n if (this.imageSrc && this.imageAlt === undefined) {\n console.error('image-alt required if image-src is provided. Can be set to \"\" (empty string) if the image is described in text nearby');\n }\n },\n\n handleClick (e) {\n if (!this.resolvedInteractive) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n"],"mappings":"uZAqGA,IAAM,EAAgB,OAAO,IAAQ,KAAe,IAAI,WAAW,aAAc,mBAAmB,CAM/F,EAAU,CACb,KAAM,WACN,WAAY,CAAE,WAAA,EAAA,EAAY,CAE1B,MAAO,CAIL,GAAI,CACF,KAAM,OACN,SAAW,CAAE,OAAO,EAAA,iBAAiB,EACtC,CAOD,KAAM,CACJ,KAAM,OACN,QAAS,IAAA,GACV,CAUD,OAAQ,CACN,KAAM,OACN,QAAS,IAAA,GACT,UAAY,GAAQ,GAAO,GAAK,GAAA,GACjC,CAQD,QAAS,CACP,KAAM,OACN,QAAS,IAAA,GACT,UAAY,GAAQ,GAAO,GAAK,EAAA,GACjC,CAQD,MAAO,CACL,KAAM,OACN,QAAS,IAAA,GACV,CAQD,KAAM,CACJ,KAAM,CAAC,OAAQ,OAAO,CACtB,QAAS,IACT,UAAW,EAAA,qBAAqB,EAAA,sBAAsB,CACvD,CAKD,YAAa,CACX,KAAM,CAAC,OAAQ,MAAO,OAAO,CAC7B,QAAS,GACV,CAKD,YAAa,CACX,KAAM,CAAC,OAAQ,MAAO,OAAO,CAC7B,QAAS,GACV,CAKD,UAAW,CACT,KAAM,CAAC,OAAQ,MAAO,OAAO,CAC7B,QAAS,GACV,CAQD,SAAU,CACR,KAAM,OACN,QAAS,EAAA,uBAAuB,KAChC,UAAY,GACH,OAAO,OAAO,EAAA,uBAAuB,CAAC,SAAS,EAAM,CAE/D,CAKD,cAAe,CACb,KAAM,OACN,aAAgB,EAAE,EACnB,CAOD,MAAO,CACL,KAAM,OACN,QAAS,IAAA,GACT,UAAY,GAAU,EAAA,uBAAuB,EAAM,CACpD,CAKD,YAAa,CACX,KAAM,OACN,QAAS,GACV,CAKD,aAAc,CACZ,KAAM,CAAC,OAAQ,MAAO,OAAO,CAC7B,QAAS,GACV,CAKD,SAAU,CACR,KAAM,OACN,QAAS,GACV,CAOD,SAAU,CACR,KAAM,OACN,QAAS,IAAA,GACV,CAKD,SAAU,CACR,KAAM,OACN,QAAS,GACV,CAMD,YAAa,CACX,KAAM,QACN,QAAS,GACV,CAKD,UAAW,CACT,KAAM,QACN,QAAS,KACV,CAMD,cAAe,CACb,KAAM,OACN,QAAS,IAAA,GACV,CAOD,SAAU,CACR,KAAM,QACN,QAAS,GACV,CAMD,YAAa,CACX,KAAM,QACN,QAAS,GACV,CACF,CAED,MAAO,CAOL,QACD,CAED,MAAQ,CACN,MAAO,CACL,sBAAA,EAAA,sBACA,sBAAA,EAAA,sBACA,+BAAA,EAAA,+BACA,wBAAyB,KACzB,kBAAmB,GACnB,aAAc,GACd,eAAA,EAAA,eACA,UAAW,EACZ,EAGH,SAAU,CACR,qBAAuB,CACrB,OAAO,KAAK,WAAa,KAAK,aAGhC,gBAAkB,CAChB,OAAO,EAAA,eAAe,KAAK,OAAO,YAAY,EAGhD,YAAc,CACZ,OAAO,EAAA,eAAe,KAAK,OAAO,KAAK,EAGzC,YAAc,CACZ,MAAO,kBAMT,gBAAkB,CAEZ,SAAK,WAGT,IAAI,KAAK,SAAW,IAAA,GAAW,OAAO,KAAK,OAG3C,GAAI,KAAK,QAAU,IAAA,GAAW,CAC5B,IAAM,EAAS,EAAA,qBAAqB,KAAK,MAAM,CAC/C,GAAI,EAAQ,OAAO,EAAO,OAK5B,OADe,EAAA,uBAAuB,KAAK,KAAK,CAClC,SAMhB,iBAAmB,CAEb,SAAK,WAGT,IAAI,KAAK,UAAY,IAAA,GAAW,OAAO,KAAK,QAG5C,GAAI,KAAK,QAAU,IAAA,GAAW,CAC5B,IAAM,EAAS,EAAA,qBAAqB,KAAK,MAAM,CAC/C,GAAI,EAAQ,OAAO,EAAO,QAK5B,OADe,EAAA,uBAAuB,KAAK,KAAK,CAClC,UAGhB,eAAiB,CACf,MAAO,CACL,WACA,EAAA,sBAAsB,KAAK,eAC3B,KAAK,YACL,CACE,kBAAmB,KAAK,UACxB,2BAA4B,KAAK,WAAa,OAAO,KAAK,eAAe,CAAC,SAAW,EACrF,2BAA4B,KAAK,WAAa,OAAO,KAAK,eAAe,CAAC,QAAU,EACpF,sBAAuB,KAAK,oBAC5B,qBAAsB,KAAK,UAAY,CAAC,KAAK,UAC7C,sBAAuB,KAAK,SAC5B,wBAAyB,KAAK,YAC/B,CACF,EAMH,cAAgB,CACd,IAAM,EAAa,EAAE,CAGrB,GAAI,CAAC,GAAiB,CAAC,KAAK,YAAc,KAAK,gBAAkB,KAAK,kBAAoB,IAAA,GAAW,CACnG,IAAM,EAAc,EAAA,iBAAiB,KAAK,eAAgB,KAAK,gBAAiB,KAAK,UAAU,CAC/F,EAAW,KAAK,CAAE,4BAA6B,EAAa,CAAC,CAG/D,OAAO,EAAW,OAAS,EAAI,EAAa,IAAA,IAG9C,gBAAkB,CAChB,MAAO,CACL,oBACA,KAAK,aACL,CAAE,yBAA0B,KAAK,eAAgB,CAClD,EAGH,WAAa,CACX,OAAO,EAAA,uBAAuB,KAAK,MAAM,EAG3C,gBAAkB,CAChB,IAAM,EAAO,OAAO,KAAK,cAAc,CAOvC,OALmB,CAAC,KAAM,MAAO,MAAO,MAAO,MAAM,CACxB,SAAS,EAAI,CAAI,EAAI,IAChC,EACT,KAAK,MAAQ,EAAI,KAAO,KAAK,MAE/B,KAAK,MAAQ,GAAK,MAAQ,KAAK,OAGxC,eAAiB,CACf,OAAO,KAAK,MAGd,WAAa,CACX,OAAO,KAAK,0BAA4B,IAAS,KAAK,UAEzD,CAED,MAAO,CACL,SAAU,CACR,UAAW,GACX,SAAW,CACT,KAAK,gBAAgB,EAExB,CAED,KAAM,CACJ,UAAW,GACX,SAAW,CACT,KAAK,gBAAgB,EAExB,CAED,MAAO,CACL,UAAW,GACX,SAAW,CACT,KAAK,gBAAgB,EAExB,CAED,SAAU,EAAQ,CAChB,KAAK,wBAA0B,KAC1B,IAEL,KAAK,eAAe,CACpB,KAAK,mBAAmB,GAE3B,CAED,SAAW,CACT,KAAK,eAAe,CACpB,KAAK,mBAAmB,CAEnB,GACH,KAAK,eAAe,EAIxB,QAAS,CACP,MAAM,mBAAqB,CACzB,MAAM,KAAK,WAAW,CACtB,IAAM,EAAK,KAAK,MAAM,YACjB,IAEL,EAAG,iBAAiB,WAAc,KAAK,yBAAyB,EAAG,CAAE,CAAE,KAAM,GAAM,CAAC,CACpF,EAAG,iBAAiB,YAAe,KAAK,0BAA0B,EAAG,CAAE,CAAE,KAAM,GAAM,CAAC,GAGxF,gBAAkB,CAChB,IAAM,EAAW,EAAA,wBAAwB,KAAK,SAAS,CACjD,EAAO,OAAO,KAAK,cAAc,CAGnC,IAAS,MAAQ,IAAS,MAC5B,KAAK,kBAAoB,GAEhB,IAAS,MAAQ,IAAS,OAAS,IAAS,MACrD,KAAK,kBAAoB,EAAS,GAElC,KAAK,kBAAoB,GAO7B,eAAiB,CACf,GAAI,CACF,IAAM,EAAW,iBAAiB,SAAS,gBAAe,CACvD,iBAAiB,yBAAwB,CACzC,MAAM,CACT,KAAK,UAAY,WAAW,EAAQ,EAAK,OACnC,CACN,KAAK,UAAY,IAIrB,yBAA0B,EAAI,CAC5B,KAAK,wBAA0B,GAC/B,EAAG,UAAU,OAAO,WAAW,EAGjC,0BAA2B,EAAI,CAC7B,KAAK,wBAA0B,GAC/B,EAAG,UAAU,IAAI,WAAW,EAG9B,eAAiB,CACX,KAAK,UAAY,KAAK,WAAa,IAAA,IACrC,QAAQ,MAAM,wHAAwH,EAI1I,YAAa,EAAG,CACT,KAAK,qBACV,KAAK,MAAM,QAAS,EAAE,EAEzB,CACF,IAtiBU,MAAM,yBAAwB,qDAqCjC,MAAM,uLAvDL,EAAA,oBAAmB,SAAA,MAAA,CAAA,CACvB,GAAI,EAAA,GACJ,OAAA,EAAA,EAAA,gBAAO,EAAA,cAAa,CACpB,OAAA,EAAA,EAAA,gBAAO,EAAA,aAAY,CACnB,qBAAqB,EAAA,SAA4B,IAAA,GAAjB,EAAA,eAChC,sBAAsB,EAAA,SAA6B,IAAA,GAAlB,EAAA,gBAClC,UAAQ,YACP,KAAM,EAAA,oBAAmB,SAAc,IAAA,GACvC,QAAO,EAAA,wCAmCF,0BAAA,MAAA,CAhCJ,IAAI,SACH,OAAA,EAAA,EAAA,gBAAK,CAAY,EAAA,yDAA6E,EAAA,wBAAuB,8BA8BhH,MAxBN,EAwBM,CAtBI,EAAA,YAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAMP,MAAA,OALC,IAAI,cACJ,MAAM,kBACN,UAAQ,kBACP,IAAK,EAAA,SACL,IAAK,EAAA,qBAGK,EAAA,aAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAOP,MAAA,OANH,OAAA,EAAA,EAAA,gBAAK,CAAG,EAAA,UAAW,EAAA,sBAAsB,KAAI,CAAA,CAC7C,aAAY,EAAA,oBAAsB,EAAA,cAAa,GAC/C,UAAS,EAAA,8BAGU,EAAA,OAAA,OAAA,CAAA,CAAA,GAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAOf,OAAA,OAHJ,OAAA,EAAA,EAAA,gBAAK,CAAG,EAAA,sBAAsB,SAAQ,CAAA,wBAEpC,EAAA,kBAAiB,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAKlB,EAAA,gBAAkB,EAAA,cAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAcpB,MAAA,OAbH,OAAA,EAAA,EAAA,gBAAO,EAAA,eAAc,GAId,EAAA,gBAAA,EAAA,EAAA,YAEN,EAAA,OAAA,cAAA,CAAA,IAAA,EAAA,CAAA,CAEW,EAAA,cAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAIT,IALJ,GAAA,EAAA,EAAA,iBAIK,EAAA,YAAW,CAAA,EAAA,GAAA,EAAA,EAAA,oBAAA,GAAA,GAAA,CAAA,CAAA,EAAA,GAAA,EAAA,EAAA,oBAAA,GAAA,GAAA,CAIV,EAAA,YAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAKoB,OAAA,OAJ1B,MAAM,kBACN,UAAQ,kBACR,KAAK,MACJ,aAAU,GAAK,EAAA,MAAK,sCACnB,EAAA,eAAc,CAAA,EAAA,EAAA,GAAA,EAAA,EAAA,oBAAA,GAAA,GAAA,CAEV,EAAA,UAAQ,CAAK,EAAA,WAAa,EAAA,+BAA+B,EAAA,QAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,aAQ/D,GAAA,EAAA,EAAA,YAAA,OAPC,SAAU,EAAA,SACV,MAAK,CAAA,qBAA0C,EAAA,+BAA+B,EAAA,MAAA,EAIvE,EAAA,cAAa,CACrB,UAAQ,cAAa,CAAA,CAAA,KAAA,GAAA,CAAA,WAAA,QAAA,CAAA,GAAA,EAAA,EAAA,oBAAA,GAAA,GAAA"}
@@ -1,18 +1,19 @@
1
- import { getUniqueString as e, hasSlotContent as t } from "../../common/utils/index.js";
2
- import { t as n } from "../../_plugin-vue_export-helper-BTgDAbhb.js";
3
- import { t as r } from "../../Presence-CGgyodnC.js";
4
- import { AVATAR_GROUP_VALIDATOR as i, AVATAR_KIND_MODIFIERS as a, AVATAR_PRESENCE_SIZE_MODIFIERS as o, AVATAR_PRESENCE_STATES as s, AVATAR_SIZE_MODIFIERS as c, colorToFamilyVariant as l, computeAvatarHex as u, getRandomFamilyVariant as d } from "./avatar-constants.js";
5
- import { extractInitialsFromName as f } from "./utils.js";
6
- import { createBlock as p, createCommentVNode as m, createElementBlock as h, createElementVNode as g, mergeProps as _, normalizeClass as v, normalizeStyle as y, openBlock as b, renderSlot as x, resolveComponent as S, resolveDynamicComponent as C, toDisplayString as w, withCtx as T } from "vue";
1
+ import { ordinalSizeValidator as e } from "../../common/validators/index.js";
2
+ import { getUniqueString as t, hasSlotContent as n } from "../../common/utils/index.js";
3
+ import { t as r } from "../../_plugin-vue_export-helper-BTgDAbhb.js";
4
+ import { t as i } from "../../Presence-CGgyodnC.js";
5
+ import { AVATAR_GROUP_VALIDATOR as a, AVATAR_KIND_MODIFIERS as o, AVATAR_PRESENCE_SIZE_MODIFIERS as s, AVATAR_PRESENCE_STATES as c, AVATAR_SIZE_MODIFIERS as l, colorToFamilyVariant as u, computeAvatarHex as d, getRandomFamilyVariant as f } from "./avatar-constants.js";
6
+ import { extractInitialsFromName as p } from "./utils.js";
7
+ import { createBlock as m, createCommentVNode as h, createElementBlock as g, createElementVNode as _, mergeProps as v, normalizeClass as y, normalizeStyle as b, openBlock as x, renderSlot as S, resolveComponent as C, resolveDynamicComponent as w, toDisplayString as T, withCtx as E } from "vue";
7
8
  //#region components/Avatar/Avatar.vue
8
- var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D = {
9
+ var D = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), O = {
9
10
  name: "DtAvatar",
10
- components: { DtPresence: r },
11
+ components: { DtPresence: i },
11
12
  props: {
12
13
  id: {
13
14
  type: String,
14
15
  default() {
15
- return e();
16
+ return t();
16
17
  }
17
18
  },
18
19
  seed: {
@@ -36,7 +37,7 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
36
37
  size: {
37
38
  type: [String, Number],
38
39
  default: 300,
39
- validator: (e) => Object.keys(c).includes(String(e))
40
+ validator: e(l)
40
41
  },
41
42
  avatarClass: {
42
43
  type: [
@@ -64,8 +65,8 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
64
65
  },
65
66
  presence: {
66
67
  type: String,
67
- default: s.NONE,
68
- validator: (e) => Object.values(s).includes(e)
68
+ default: c.NONE,
69
+ validator: (e) => Object.values(c).includes(e)
69
70
  },
70
71
  presenceProps: {
71
72
  type: Object,
@@ -74,7 +75,7 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
74
75
  group: {
75
76
  type: Number,
76
77
  default: void 0,
77
- validator: (e) => i(e)
78
+ validator: (e) => a(e)
78
79
  },
79
80
  overlayText: {
80
81
  type: String,
@@ -124,13 +125,13 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
124
125
  emits: ["click"],
125
126
  data() {
126
127
  return {
127
- AVATAR_SIZE_MODIFIERS: c,
128
- AVATAR_KIND_MODIFIERS: a,
129
- AVATAR_PRESENCE_SIZE_MODIFIERS: o,
128
+ AVATAR_SIZE_MODIFIERS: l,
129
+ AVATAR_KIND_MODIFIERS: o,
130
+ AVATAR_PRESENCE_SIZE_MODIFIERS: s,
130
131
  imageLoadedSuccessfully: null,
131
132
  formattedInitials: "",
132
133
  initializing: !1,
133
- hasSlotContent: t,
134
+ hasSlotContent: n,
134
135
  anchorHue: 0
135
136
  };
136
137
  },
@@ -139,10 +140,10 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
139
140
  return this.clickable ?? this.interactive;
140
141
  },
141
142
  hasOverlayIcon() {
142
- return t(this.$slots.overlayIcon);
143
+ return n(this.$slots.overlayIcon);
143
144
  },
144
145
  isIconType() {
145
- return t(this.$slots.icon);
146
+ return n(this.$slots.icon);
146
147
  },
147
148
  iconDataQa() {
148
149
  return "dt-avatar-icon";
@@ -151,26 +152,26 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
151
152
  if (!this.isIconType) {
152
153
  if (this.family !== void 0) return this.family;
153
154
  if (this.color !== void 0) {
154
- let e = l(this.color);
155
+ let e = u(this.color);
155
156
  if (e) return e.family;
156
157
  }
157
- return d(this.seed).family;
158
+ return f(this.seed).family;
158
159
  }
159
160
  },
160
161
  computedVariant() {
161
162
  if (!this.isIconType) {
162
163
  if (this.variant !== void 0) return this.variant;
163
164
  if (this.color !== void 0) {
164
- let e = l(this.color);
165
+ let e = u(this.color);
165
166
  if (e) return e.variant;
166
167
  }
167
- return d(this.seed).variant;
168
+ return f(this.seed).variant;
168
169
  }
169
170
  },
170
171
  avatarClasses() {
171
172
  return [
172
173
  "d-avatar",
173
- c[this.validatedSize],
174
+ l[this.validatedSize],
174
175
  this.avatarClass,
175
176
  {
176
177
  "d-avatar--group": this.showGroup,
@@ -185,8 +186,8 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
185
186
  },
186
187
  avatarStyles() {
187
188
  let e = [];
188
- if (!E && !this.isIconType && this.computedFamily && this.computedVariant !== void 0) {
189
- let t = u(this.computedFamily, this.computedVariant, this.anchorHue);
189
+ if (!D && !this.isIconType && this.computedFamily && this.computedVariant !== void 0) {
190
+ let t = d(this.computedFamily, this.computedVariant, this.anchorHue);
190
191
  e.push({ "--avatar-color-background": t });
191
192
  }
192
193
  return e.length > 0 ? e : void 0;
@@ -199,7 +200,7 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
199
200
  ];
200
201
  },
201
202
  showGroup() {
202
- return i(this.group);
203
+ return a(this.group);
203
204
  },
204
205
  formattedGroup() {
205
206
  let e = String(this.validatedSize);
@@ -242,7 +243,7 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
242
243
  }
243
244
  },
244
245
  mounted() {
245
- this.validateProps(), this.setImageListeners(), E || this.readAnchorHue();
246
+ this.validateProps(), this.setImageListeners(), D || this.readAnchorHue();
246
247
  },
247
248
  methods: {
248
249
  async setImageListeners() {
@@ -251,7 +252,7 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
251
252
  e && (e.addEventListener("load", () => this._loadedImageEventHandler(e), { once: !0 }), e.addEventListener("error", () => this._erroredImageEventHandler(e), { once: !0 }));
252
253
  },
253
254
  formatInitials() {
254
- let e = f(this.fullName), t = String(this.validatedSize);
255
+ let e = p(this.fullName), t = String(this.validatedSize);
255
256
  t === "xs" || t === "100" ? this.formattedInitials = "" : t === "sm" || t === "150" || t === "200" ? this.formattedInitials = e[0] : this.formattedInitials = e;
256
257
  },
257
258
  readAnchorHue() {
@@ -275,62 +276,62 @@ var E = typeof CSS < "u" && CSS.supports?.("background", "oklch(0.5 0.1 0)"), D
275
276
  this.resolvedInteractive && this.$emit("click", e);
276
277
  }
277
278
  }
278
- }, O = { class: "d-avatar__canvas-inner" }, k = ["src", "alt"], A = ["aria-label", "data-qa"], j = {
279
+ }, k = { class: "d-avatar__canvas-inner" }, A = ["src", "alt"], j = ["aria-label", "data-qa"], M = {
279
280
  key: 1,
280
281
  class: "d-avatar__overlay-text"
281
- }, M = ["aria-label"];
282
- function N(e, t, n, r, i, a) {
283
- let o = S("dt-presence");
284
- return b(), p(C(a.resolvedInteractive ? "button" : "div"), {
282
+ }, N = ["aria-label"];
283
+ function P(e, t, n, r, i, a) {
284
+ let o = C("dt-presence");
285
+ return x(), m(w(a.resolvedInteractive ? "button" : "div"), {
285
286
  id: n.id,
286
- class: v(a.avatarClasses),
287
- style: y(a.avatarStyles),
287
+ class: y(a.avatarClasses),
288
+ style: b(a.avatarStyles),
288
289
  "data-avatar-family": n.iconOnly ? void 0 : a.computedFamily,
289
290
  "data-avatar-variant": n.iconOnly ? void 0 : a.computedVariant,
290
291
  "data-qa": "dt-avatar",
291
292
  type: a.resolvedInteractive ? "button" : void 0,
292
293
  onClick: a.handleClick
293
294
  }, {
294
- default: T(() => [
295
- g("div", {
295
+ default: E(() => [
296
+ _("div", {
296
297
  ref: "canvas",
297
- class: v([
298
+ class: y([
298
299
  n.canvasClass,
299
300
  "d-avatar__canvas",
300
301
  { "d-avatar--image-loaded": i.imageLoadedSuccessfully }
301
302
  ])
302
- }, [g("div", O, [a.showImage ? (b(), h("img", {
303
+ }, [_("div", k, [a.showImage ? (x(), g("img", {
303
304
  key: 0,
304
305
  ref: "avatarImage",
305
306
  class: "d-avatar__image",
306
307
  "data-qa": "dt-avatar-image",
307
308
  src: n.imageSrc,
308
309
  alt: n.imageAlt
309
- }, null, 8, k)) : a.isIconType ? (b(), h("div", {
310
+ }, null, 8, A)) : a.isIconType ? (x(), g("div", {
310
311
  key: 1,
311
- class: v([n.iconClass, i.AVATAR_KIND_MODIFIERS.icon]),
312
+ class: y([n.iconClass, i.AVATAR_KIND_MODIFIERS.icon]),
312
313
  "aria-label": a.resolvedInteractive ? n.iconAriaLabel : "",
313
314
  "data-qa": a.iconDataQa
314
- }, [x(e.$slots, "icon")], 10, A)) : (b(), h("span", {
315
+ }, [S(e.$slots, "icon")], 10, j)) : (x(), g("span", {
315
316
  key: 2,
316
- class: v([i.AVATAR_KIND_MODIFIERS.initials])
317
- }, w(i.formattedInitials), 3))])], 2),
318
- a.hasOverlayIcon || n.overlayText ? (b(), h("div", {
317
+ class: y([i.AVATAR_KIND_MODIFIERS.initials])
318
+ }, T(i.formattedInitials), 3))])], 2),
319
+ a.hasOverlayIcon || n.overlayText ? (x(), g("div", {
319
320
  key: 0,
320
- class: v(a.overlayClasses)
321
- }, [a.hasOverlayIcon ? x(e.$slots, "overlayIcon", { key: 0 }) : n.overlayText ? (b(), h("p", j, w(n.overlayText), 1)) : m("", !0)], 2)) : m("", !0),
322
- a.showGroup ? (b(), h("span", {
321
+ class: y(a.overlayClasses)
322
+ }, [a.hasOverlayIcon ? S(e.$slots, "overlayIcon", { key: 0 }) : n.overlayText ? (x(), g("p", M, T(n.overlayText), 1)) : h("", !0)], 2)) : h("", !0),
323
+ a.showGroup ? (x(), g("span", {
323
324
  key: 1,
324
325
  class: "d-avatar__count",
325
326
  "data-qa": "dt-avatar-count",
326
327
  role: "img",
327
328
  "aria-label": `${n.group} participants`
328
- }, w(a.formattedGroup), 9, M)) : m("", !0),
329
- n.presence && !a.showGroup && i.AVATAR_PRESENCE_SIZE_MODIFIERS[n.size] ? (b(), p(o, _({
329
+ }, T(a.formattedGroup), 9, N)) : h("", !0),
330
+ n.presence && !a.showGroup && i.AVATAR_PRESENCE_SIZE_MODIFIERS[n.size] ? (x(), m(o, v({
330
331
  key: 2,
331
332
  presence: n.presence,
332
333
  class: ["d-avatar__presence", i.AVATAR_PRESENCE_SIZE_MODIFIERS[n.size]]
333
- }, n.presenceProps, { "data-qa": "dt-presence" }), null, 16, ["presence", "class"])) : m("", !0)
334
+ }, n.presenceProps, { "data-qa": "dt-presence" }), null, 16, ["presence", "class"])) : h("", !0)
334
335
  ]),
335
336
  _: 3
336
337
  }, 8, [
@@ -343,8 +344,8 @@ function N(e, t, n, r, i, a) {
343
344
  "onClick"
344
345
  ]);
345
346
  }
346
- var P = /* @__PURE__ */ n(D, [["render", N]]);
347
+ var F = /* @__PURE__ */ r(O, [["render", P]]);
347
348
  //#endregion
348
- export { P as default };
349
+ export { F as default };
349
350
 
350
351
  //# sourceMappingURL=avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.js","names":[],"sources":["../../../components/Avatar/Avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"resolvedInteractive ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n :style=\"avatarStyles\"\n :data-avatar-family=\"!iconOnly ? computedFamily : undefined\"\n :data-avatar-variant=\"!iconOnly ? computedVariant : undefined\"\n data-qa=\"dt-avatar\"\n :type=\"resolvedInteractive ? 'button' : undefined\"\n @click=\"handleClick\"\n >\n <div\n ref=\"canvas\"\n :class=\"[\n canvasClass,\n 'd-avatar__canvas',\n { 'd-avatar--image-loaded': imageLoadedSuccessfully },\n ]\"\n >\n <div class=\"d-avatar__canvas-inner\">\n <img\n v-if=\"showImage\"\n ref=\"avatarImage\"\n class=\"d-avatar__image\"\n data-qa=\"dt-avatar-image\"\n :src=\"imageSrc\"\n :alt=\"imageAlt\"\n >\n <div\n v-else-if=\"isIconType\"\n :class=\"[iconClass, AVATAR_KIND_MODIFIERS.icon]\"\n :aria-label=\"resolvedInteractive ? iconAriaLabel : ''\"\n :data-qa=\"iconDataQa\"\n >\n <!-- @slot Slot for avatar icon. It will display if no imageSrc is provided -->\n <slot name=\"icon\" />\n </div>\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\n </div>\n </div>\n <div\n v-if=\"hasOverlayIcon || overlayText\"\n :class=\"overlayClasses\"\n >\n <!-- @slot Slot for overlay icon. -->\n <slot\n v-if=\"hasOverlayIcon\"\n name=\"overlayIcon\"\n />\n <p\n v-else-if=\"overlayText\"\n class=\"d-avatar__overlay-text\"\n >\n {{ overlayText }}\n </p>\n </div>\n <span\n v-if=\"showGroup\"\n class=\"d-avatar__count\"\n data-qa=\"dt-avatar-count\"\n role=\"img\"\n :aria-label=\"`${group} participants`\"\n >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup && AVATAR_PRESENCE_SIZE_MODIFIERS[size]\"\n :presence=\"presence\"\n :class=\"[\n 'd-avatar__presence',\n AVATAR_PRESENCE_SIZE_MODIFIERS[size],\n ]\"\n v-bind=\"presenceProps\"\n data-qa=\"dt-presence\"\n />\n </component>\n</template>\n\n<script>\nimport { getUniqueString, hasSlotContent } from '@/common/utils';\nimport { DtPresence } from '../Presence';\nimport {\n AVATAR_KIND_MODIFIERS,\n AVATAR_SIZE_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_FAMILY_COUNT,\n AVATAR_VARIANT_COUNT,\n colorToFamilyVariant,\n getRandomFamilyVariant,\n computeAvatarHex,\n} from './AvatarConstants';\nimport { extractInitialsFromName } from './Utils';\n\n// Check if browser supports oklch() - only compute hex fallback if not\nconst supportsOklch = typeof CSS !== 'undefined' && CSS.supports?.('background', 'oklch(0.5 0.1 0)');\n\n/**\n * An avatar is a visual representation of a user or object.\n * @see https://dialtone.dialpad.com/components/avatar.html\n */\nexport default {\n name: 'DtAvatar',\n components: { DtPresence },\n\n props: {\n /**\n * Id of the avatar content wrapper element\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * **Recommended.** Pass a unique identifier (e.g., user ID) to generate consistent,\n * deterministic colors for this avatar. The same seed always produces the same color.\n * This is the preferred approach for most use cases.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * **Advanced.** Avatar color family (1-12). Each family represents a different hue\n * offset from the theme's anchor. Only use this if you need explicit control over\n * the color. For most cases, use `seed` instead.\n * Families: 1=Red, 2=Orange, 3=Amber, 4=Yellow-Green, 5=Green, 6=Teal, 7=Cyan,\n * 8=Blue, 9=Indigo, 10=Purple, 11=Magenta, 12=Pink\n * @values 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\n */\n family: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 1 && val <= AVATAR_FAMILY_COUNT,\n },\n\n /**\n * **Advanced.** Avatar color variant (0-9). Controls lightness/chroma within the family.\n * Only use this if you need explicit control over the color. For most cases, use `seed` instead.\n * 0 = darkest, 9 = lightest. Variants 0-5 have light text, 6-9 have dark text.\n * @values 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n */\n variant: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 0 && val < AVATAR_VARIANT_COUNT,\n },\n\n /**\n * Avatar color code for backward compatibility. Converted internally\n * to family/variant. For new code, use `seed` (recommended) or `family`/`variant`.\n * Format: family (1-12) * 100 + variant (0-9) * 10, e.g., '540' = family 5, variant 4.\n * @deprecated Use seed or family/variant instead.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar.\n * T-shirt sizes (xs, sm, md, lg, xl) are deprecated and will be removed in the next major version.\n * Please use the numeric scale instead.\n * @values 100, 150, 200, 250, 300, 400, 500, 600, 700, 800, 900\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: (size) => Object.keys(AVATAR_SIZE_MODIFIERS).includes(String(size)),\n },\n\n /**\n * Used to customize the avatar container\n */\n avatarClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Set classes on the avatar canvas. Wrapper around the core avatar image.\n */\n canvasClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Pass through classes. Used to customize the avatar icon\n */\n iconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Determines whether to show the presence indicator for\n * Avatar - accepts PRESENCE_STATES values: 'busy', 'away', 'offline',\n * 'active', or 'dnd'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active, dnd\n */\n presence: {\n type: String,\n default: AVATAR_PRESENCE_STATES.NONE,\n validator: (state) => {\n return Object.values(AVATAR_PRESENCE_STATES).includes(state);\n },\n },\n\n /**\n * A set of props to be passed into the presence component.\n */\n presenceProps: {\n type: Object,\n default: () => ({}),\n },\n\n /**\n * Determines whether to show a group avatar.\n * Limit to 2 digits max, more than 99 will be rendered as \"99+\".\n * if the number is 1 or less it would just show the regular avatar as if group had not been set.\n */\n group: {\n type: Number,\n default: undefined,\n validator: (group) => AVATAR_GROUP_VALIDATOR(group),\n },\n\n /**\n * The text that overlays the avatar\n */\n overlayText: {\n type: String,\n default: '',\n },\n\n /**\n * Used to customize the avatar overlay\n */\n overlayClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Source of the image\n */\n imageSrc: {\n type: String,\n default: '',\n },\n\n /**\n * Alt attribute of the image, required if imageSrc is provided.\n * Can be set to '' (empty string) if the image is described\n * in text nearby\n */\n imageAlt: {\n type: String,\n default: undefined,\n },\n\n /**\n * Full name used to extract initials.\n */\n fullName: {\n type: String,\n default: '',\n },\n\n /**\n * Makes the avatar focusable and interactive,\n * emits a click event when clicked.\n */\n interactive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * @deprecated Use interactive instead.\n */\n clickable: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Descriptive label for the icon.\n * To avoid a11y issues, set this prop if clickable and iconName are set.\n */\n iconAriaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * When true, renders the avatar with a transparent background and no color.\n * Useful for displaying icons that should not have a colored background,\n * such as channel or navigation icons.\n */\n iconOnly: {\n type: Boolean,\n default: false,\n },\n\n /**\n * When true, renders the avatar in a desaturated/washed-out state.\n * Use this to indicate that a user is deactivated or inactive.\n */\n deactivated: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Avatar click event\n *\n * @event click\n * @type {PointerEvent | KeyboardEvent}\n */\n 'click',\n ],\n\n data () {\n return {\n AVATAR_SIZE_MODIFIERS,\n AVATAR_KIND_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n hasSlotContent,\n anchorHue: 0,\n };\n },\n\n computed: {\n resolvedInteractive () {\n return this.clickable ?? this.interactive;\n },\n\n hasOverlayIcon () {\n return hasSlotContent(this.$slots.overlayIcon);\n },\n\n isIconType () {\n return hasSlotContent(this.$slots.icon);\n },\n\n iconDataQa () {\n return 'dt-avatar-icon';\n },\n\n /**\n * Compute family from props, color prop, or random\n */\n computedFamily () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit family prop takes precedence\n if (this.family !== undefined) return this.family;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.family;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.family;\n },\n\n /**\n * Compute variant from props, color prop, or random\n */\n computedVariant () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit variant prop takes precedence\n if (this.variant !== undefined) return this.variant;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.variant;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.variant;\n },\n\n avatarClasses () {\n return [\n 'd-avatar',\n AVATAR_SIZE_MODIFIERS[this.validatedSize],\n this.avatarClass,\n {\n 'd-avatar--group': this.showGroup,\n 'd-avatar--group-digits-2': this.showGroup && String(this.formattedGroup).length === 2,\n 'd-avatar--group-digits-3': this.showGroup && String(this.formattedGroup).length >= 3,\n 'd-avatar--clickable': this.resolvedInteractive,\n 'd-avatar--presence': this.presence && !this.showGroup,\n 'd-avatar--icon-only': this.iconOnly,\n 'd-avatar--deactivated': this.deactivated,\n },\n ];\n },\n\n /**\n * Compute inline styles for fallback color in browsers that don't support oklch()\n */\n avatarStyles () {\n const baseStyles = [];\n\n // Only compute hex fallback for browsers that don't support oklch()\n if (!supportsOklch && !this.isIconType && this.computedFamily && this.computedVariant !== undefined) {\n const fallbackHex = computeAvatarHex(this.computedFamily, this.computedVariant, this.anchorHue);\n baseStyles.push({ '--avatar-color-background': fallbackHex });\n }\n\n return baseStyles.length > 0 ? baseStyles : undefined;\n },\n\n overlayClasses () {\n return [\n 'd-avatar__overlay',\n this.overlayClass,\n { 'd-avatar__overlay-icon': this.hasOverlayIcon },\n ];\n },\n\n showGroup () {\n return AVATAR_GROUP_VALIDATOR(this.group);\n },\n\n formattedGroup () {\n const size = String(this.validatedSize);\n // Sizes 100-250 cap at 2 digits — too small for 3\n const smallSizes = ['xs', '100', '150', '200', '250'];\n const maxDigits = smallSizes.includes(size) ? 2 : 3;\n if (maxDigits === 2) {\n return this.group > 9 ? '9+' : this.group;\n }\n return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n return this.size;\n },\n\n showImage () {\n return this.imageLoadedSuccessfully !== false && this.imageSrc;\n },\n },\n\n watch: {\n fullName: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n size: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n group: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n imageSrc (newSrc) {\n this.imageLoadedSuccessfully = null;\n if (!newSrc) return;\n\n this.validateProps();\n this.setImageListeners();\n },\n },\n\n mounted () {\n this.validateProps();\n this.setImageListeners();\n // Only read anchor hue for fallback computation in browsers without oklch() support\n if (!supportsOklch) {\n this.readAnchorHue();\n }\n },\n\n methods: {\n async setImageListeners () {\n await this.$nextTick();\n const el = this.$refs.avatarImage;\n if (!el) return;\n\n el.addEventListener('load', () => this._loadedImageEventHandler(el), { once: true });\n el.addEventListener('error', () => this._erroredImageEventHandler(el), { once: true });\n },\n\n formatInitials () {\n const initials = extractInitialsFromName(this.fullName);\n const size = String(this.validatedSize);\n\n // xs/100 are too small for initials\n if (size === 'xs' || size === '100') {\n this.formattedInitials = '';\n // sm/150/200 show single initial\n } else if (size === 'sm' || size === '150' || size === '200') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n /**\n * Read the anchor hue from CSS custom property for fallback computation\n */\n readAnchorHue () {\n try {\n const hueValue = getComputedStyle(document.documentElement)\n .getPropertyValue('--dt-avatar-anchor-hue')\n .trim();\n this.anchorHue = parseFloat(hueValue) || 0;\n } catch {\n this.anchorHue = 0;\n }\n },\n\n _loadedImageEventHandler (el) {\n this.imageLoadedSuccessfully = true;\n el.classList.remove('d-d-none');\n },\n\n _erroredImageEventHandler (el) {\n this.imageLoadedSuccessfully = false;\n el.classList.add('d-d-none');\n },\n\n validateProps () {\n if (this.imageSrc && this.imageAlt === undefined) {\n console.error('image-alt required if image-src is provided. Can be set to \"\" (empty string) if the image is described in text nearby');\n }\n },\n\n handleClick (e) {\n if (!this.resolvedInteractive) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"avatar.js","names":[],"sources":["../../../components/Avatar/Avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"resolvedInteractive ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n :style=\"avatarStyles\"\n :data-avatar-family=\"!iconOnly ? computedFamily : undefined\"\n :data-avatar-variant=\"!iconOnly ? computedVariant : undefined\"\n data-qa=\"dt-avatar\"\n :type=\"resolvedInteractive ? 'button' : undefined\"\n @click=\"handleClick\"\n >\n <div\n ref=\"canvas\"\n :class=\"[\n canvasClass,\n 'd-avatar__canvas',\n { 'd-avatar--image-loaded': imageLoadedSuccessfully },\n ]\"\n >\n <div class=\"d-avatar__canvas-inner\">\n <img\n v-if=\"showImage\"\n ref=\"avatarImage\"\n class=\"d-avatar__image\"\n data-qa=\"dt-avatar-image\"\n :src=\"imageSrc\"\n :alt=\"imageAlt\"\n >\n <div\n v-else-if=\"isIconType\"\n :class=\"[iconClass, AVATAR_KIND_MODIFIERS.icon]\"\n :aria-label=\"resolvedInteractive ? iconAriaLabel : ''\"\n :data-qa=\"iconDataQa\"\n >\n <!-- @slot Slot for avatar icon. It will display if no imageSrc is provided -->\n <slot name=\"icon\" />\n </div>\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\n </div>\n </div>\n <div\n v-if=\"hasOverlayIcon || overlayText\"\n :class=\"overlayClasses\"\n >\n <!-- @slot Slot for overlay icon. -->\n <slot\n v-if=\"hasOverlayIcon\"\n name=\"overlayIcon\"\n />\n <p\n v-else-if=\"overlayText\"\n class=\"d-avatar__overlay-text\"\n >\n {{ overlayText }}\n </p>\n </div>\n <span\n v-if=\"showGroup\"\n class=\"d-avatar__count\"\n data-qa=\"dt-avatar-count\"\n role=\"img\"\n :aria-label=\"`${group} participants`\"\n >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup && AVATAR_PRESENCE_SIZE_MODIFIERS[size]\"\n :presence=\"presence\"\n :class=\"[\n 'd-avatar__presence',\n AVATAR_PRESENCE_SIZE_MODIFIERS[size],\n ]\"\n v-bind=\"presenceProps\"\n data-qa=\"dt-presence\"\n />\n </component>\n</template>\n\n<script>\nimport { getUniqueString, hasSlotContent } from '@/common/utils';\nimport { ordinalSizeValidator } from '@/common/validators';\nimport { DtPresence } from '../Presence';\nimport {\n AVATAR_KIND_MODIFIERS,\n AVATAR_SIZE_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_FAMILY_COUNT,\n AVATAR_VARIANT_COUNT,\n colorToFamilyVariant,\n getRandomFamilyVariant,\n computeAvatarHex,\n} from './AvatarConstants';\nimport { extractInitialsFromName } from './Utils';\n\n// Check if browser supports oklch() - only compute hex fallback if not\nconst supportsOklch = typeof CSS !== 'undefined' && CSS.supports?.('background', 'oklch(0.5 0.1 0)');\n\n/**\n * An avatar is a visual representation of a user or object.\n * @see https://dialtone.dialpad.com/components/avatar.html\n */\nexport default {\n name: 'DtAvatar',\n components: { DtPresence },\n\n props: {\n /**\n * Id of the avatar content wrapper element\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * **Recommended.** Pass a unique identifier (e.g., user ID) to generate consistent,\n * deterministic colors for this avatar. The same seed always produces the same color.\n * This is the preferred approach for most use cases.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * **Advanced.** Avatar color family (1-12). Each family represents a different hue\n * offset from the theme's anchor. Only use this if you need explicit control over\n * the color. For most cases, use `seed` instead.\n * Families: 1=Red, 2=Orange, 3=Amber, 4=Yellow-Green, 5=Green, 6=Teal, 7=Cyan,\n * 8=Blue, 9=Indigo, 10=Purple, 11=Magenta, 12=Pink\n * @values 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\n */\n family: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 1 && val <= AVATAR_FAMILY_COUNT,\n },\n\n /**\n * **Advanced.** Avatar color variant (0-9). Controls lightness/chroma within the family.\n * Only use this if you need explicit control over the color. For most cases, use `seed` instead.\n * 0 = darkest, 9 = lightest. Variants 0-5 have light text, 6-9 have dark text.\n * @values 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n */\n variant: {\n type: Number,\n default: undefined,\n validator: (val) => val >= 0 && val < AVATAR_VARIANT_COUNT,\n },\n\n /**\n * Avatar color code for backward compatibility. Converted internally\n * to family/variant. For new code, use `seed` (recommended) or `family`/`variant`.\n * Format: family (1-12) * 100 + variant (0-9) * 10, e.g., '540' = family 5, variant 4.\n * @deprecated Use seed or family/variant instead.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar.\n * T-shirt sizes (xs, sm, md, lg, xl) are deprecated and will be removed in the next major version.\n * Please use the numeric scale instead.\n * @values 100, 150, 200, 250, 300, 400, 500, 600, 700, 800, 900\n */\n size: {\n type: [String, Number],\n default: 300,\n validator: ordinalSizeValidator(AVATAR_SIZE_MODIFIERS),\n },\n\n /**\n * Used to customize the avatar container\n */\n avatarClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Set classes on the avatar canvas. Wrapper around the core avatar image.\n */\n canvasClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Pass through classes. Used to customize the avatar icon\n */\n iconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Determines whether to show the presence indicator for\n * Avatar - accepts PRESENCE_STATES values: 'busy', 'away', 'offline',\n * 'active', or 'dnd'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active, dnd\n */\n presence: {\n type: String,\n default: AVATAR_PRESENCE_STATES.NONE,\n validator: (state) => {\n return Object.values(AVATAR_PRESENCE_STATES).includes(state);\n },\n },\n\n /**\n * A set of props to be passed into the presence component.\n */\n presenceProps: {\n type: Object,\n default: () => ({}),\n },\n\n /**\n * Determines whether to show a group avatar.\n * Limit to 2 digits max, more than 99 will be rendered as \"99+\".\n * if the number is 1 or less it would just show the regular avatar as if group had not been set.\n */\n group: {\n type: Number,\n default: undefined,\n validator: (group) => AVATAR_GROUP_VALIDATOR(group),\n },\n\n /**\n * The text that overlays the avatar\n */\n overlayText: {\n type: String,\n default: '',\n },\n\n /**\n * Used to customize the avatar overlay\n */\n overlayClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Source of the image\n */\n imageSrc: {\n type: String,\n default: '',\n },\n\n /**\n * Alt attribute of the image, required if imageSrc is provided.\n * Can be set to '' (empty string) if the image is described\n * in text nearby\n */\n imageAlt: {\n type: String,\n default: undefined,\n },\n\n /**\n * Full name used to extract initials.\n */\n fullName: {\n type: String,\n default: '',\n },\n\n /**\n * Makes the avatar focusable and interactive,\n * emits a click event when clicked.\n */\n interactive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * @deprecated Use interactive instead.\n */\n clickable: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Descriptive label for the icon.\n * To avoid a11y issues, set this prop if clickable and iconName are set.\n */\n iconAriaLabel: {\n type: String,\n default: undefined,\n },\n\n /**\n * When true, renders the avatar with a transparent background and no color.\n * Useful for displaying icons that should not have a colored background,\n * such as channel or navigation icons.\n */\n iconOnly: {\n type: Boolean,\n default: false,\n },\n\n /**\n * When true, renders the avatar in a desaturated/washed-out state.\n * Use this to indicate that a user is deactivated or inactive.\n */\n deactivated: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Avatar click event\n *\n * @event click\n * @type {PointerEvent | KeyboardEvent}\n */\n 'click',\n ],\n\n data () {\n return {\n AVATAR_SIZE_MODIFIERS,\n AVATAR_KIND_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n hasSlotContent,\n anchorHue: 0,\n };\n },\n\n computed: {\n resolvedInteractive () {\n return this.clickable ?? this.interactive;\n },\n\n hasOverlayIcon () {\n return hasSlotContent(this.$slots.overlayIcon);\n },\n\n isIconType () {\n return hasSlotContent(this.$slots.icon);\n },\n\n iconDataQa () {\n return 'dt-avatar-icon';\n },\n\n /**\n * Compute family from props, color prop, or random\n */\n computedFamily () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit family prop takes precedence\n if (this.family !== undefined) return this.family;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.family;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.family;\n },\n\n /**\n * Compute variant from props, color prop, or random\n */\n computedVariant () {\n // Icon-type avatars don't use color\n if (this.isIconType) return undefined;\n\n // Explicit variant prop takes precedence\n if (this.variant !== undefined) return this.variant;\n\n // Color prop (converted to family/variant)\n if (this.color !== undefined) {\n const parsed = colorToFamilyVariant(this.color);\n if (parsed) return parsed.variant;\n }\n\n // Random based on seed\n const random = getRandomFamilyVariant(this.seed);\n return random.variant;\n },\n\n avatarClasses () {\n return [\n 'd-avatar',\n AVATAR_SIZE_MODIFIERS[this.validatedSize],\n this.avatarClass,\n {\n 'd-avatar--group': this.showGroup,\n 'd-avatar--group-digits-2': this.showGroup && String(this.formattedGroup).length === 2,\n 'd-avatar--group-digits-3': this.showGroup && String(this.formattedGroup).length >= 3,\n 'd-avatar--clickable': this.resolvedInteractive,\n 'd-avatar--presence': this.presence && !this.showGroup,\n 'd-avatar--icon-only': this.iconOnly,\n 'd-avatar--deactivated': this.deactivated,\n },\n ];\n },\n\n /**\n * Compute inline styles for fallback color in browsers that don't support oklch()\n */\n avatarStyles () {\n const baseStyles = [];\n\n // Only compute hex fallback for browsers that don't support oklch()\n if (!supportsOklch && !this.isIconType && this.computedFamily && this.computedVariant !== undefined) {\n const fallbackHex = computeAvatarHex(this.computedFamily, this.computedVariant, this.anchorHue);\n baseStyles.push({ '--avatar-color-background': fallbackHex });\n }\n\n return baseStyles.length > 0 ? baseStyles : undefined;\n },\n\n overlayClasses () {\n return [\n 'd-avatar__overlay',\n this.overlayClass,\n { 'd-avatar__overlay-icon': this.hasOverlayIcon },\n ];\n },\n\n showGroup () {\n return AVATAR_GROUP_VALIDATOR(this.group);\n },\n\n formattedGroup () {\n const size = String(this.validatedSize);\n // Sizes 100-250 cap at 2 digits — too small for 3\n const smallSizes = ['xs', '100', '150', '200', '250'];\n const maxDigits = smallSizes.includes(size) ? 2 : 3;\n if (maxDigits === 2) {\n return this.group > 9 ? '9+' : this.group;\n }\n return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n return this.size;\n },\n\n showImage () {\n return this.imageLoadedSuccessfully !== false && this.imageSrc;\n },\n },\n\n watch: {\n fullName: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n size: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n group: {\n immediate: true,\n handler () {\n this.formatInitials();\n },\n },\n\n imageSrc (newSrc) {\n this.imageLoadedSuccessfully = null;\n if (!newSrc) return;\n\n this.validateProps();\n this.setImageListeners();\n },\n },\n\n mounted () {\n this.validateProps();\n this.setImageListeners();\n // Only read anchor hue for fallback computation in browsers without oklch() support\n if (!supportsOklch) {\n this.readAnchorHue();\n }\n },\n\n methods: {\n async setImageListeners () {\n await this.$nextTick();\n const el = this.$refs.avatarImage;\n if (!el) return;\n\n el.addEventListener('load', () => this._loadedImageEventHandler(el), { once: true });\n el.addEventListener('error', () => this._erroredImageEventHandler(el), { once: true });\n },\n\n formatInitials () {\n const initials = extractInitialsFromName(this.fullName);\n const size = String(this.validatedSize);\n\n // xs/100 are too small for initials\n if (size === 'xs' || size === '100') {\n this.formattedInitials = '';\n // sm/150/200 show single initial\n } else if (size === 'sm' || size === '150' || size === '200') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n /**\n * Read the anchor hue from CSS custom property for fallback computation\n */\n readAnchorHue () {\n try {\n const hueValue = getComputedStyle(document.documentElement)\n .getPropertyValue('--dt-avatar-anchor-hue')\n .trim();\n this.anchorHue = parseFloat(hueValue) || 0;\n } catch {\n this.anchorHue = 0;\n }\n },\n\n _loadedImageEventHandler (el) {\n this.imageLoadedSuccessfully = true;\n el.classList.remove('d-d-none');\n },\n\n _erroredImageEventHandler (el) {\n this.imageLoadedSuccessfully = false;\n el.classList.add('d-d-none');\n },\n\n validateProps () {\n if (this.imageSrc && this.imageAlt === undefined) {\n console.error('image-alt required if image-src is provided. Can be set to \"\" (empty string) if the image is described in text nearby');\n }\n },\n\n handleClick (e) {\n if (!this.resolvedInteractive) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../../chunk-Bmb41Sf3.cjs`);const e=require(`../../common/utils/index.cjs`),t=require(`../../_plugin-vue_export-helper-D8jCH6HB.cjs`),n=require(`./badge-constants.cjs`),r=require(`../icon/icon-constants.cjs`);let i=require(`vue`);var a={name:`DtBadge`,props:{iconSize:{type:String,default:`200`,validator:e=>Object.keys(r.ICON_SIZE_MODIFIERS).includes(e)},text:{type:String,default:``},kind:{type:String,default:`label`,validator:e=>Object.keys(n.BADGE_KIND_MODIFIERS).includes(e)},type:{type:String,default:`default`,validator:e=>Object.keys(n.BADGE_TYPE_MODIFIERS).includes(e)},decoration:{type:String,default:void 0,validator:e=>Object.keys(n.BADGE_DECORATION_MODIFIERS).includes(e)},labelClass:{type:[String,Array,Object],default:``},startIconClass:{type:[String,Array,Object],default:``},endIconClass:{type:[String,Array,Object],default:``},subtle:{type:Boolean,default:!1},outlined:{type:Boolean,default:!1}},data(){return{BADGE_TYPE_MODIFIERS:n.BADGE_TYPE_MODIFIERS,BADGE_KIND_MODIFIERS:n.BADGE_KIND_MODIFIERS,BADGE_DECORATION_MODIFIERS:n.BADGE_DECORATION_MODIFIERS}},computed:{hasLeftIcon(){return e.hasSlotContent(this.$slots.startIcon)||e.hasSlotContent(this.$slots.leftIcon)},hasRightIcon(){return e.hasSlotContent(this.$slots.endIcon)||e.hasSlotContent(this.$slots.rightIcon)},hasIcons(){return this.hasLeftIcon||this.hasRightIcon}},mounted(){this.validateProps()},updated(){this.validateProps()},methods:{validateProps(){this.validateTypePropCombination(),this.validateDecorationPropCombination()},validateTypePropCombination(){this.type===`ai`&&this.kind===`count`&&console.error(`DtBadge error: type: 'ai' with kind: 'count' is an invalid combination.`),this.type!==`bulletin`&&this.subtle&&console.error(`DtBadge error: subtle can only be used with type 'bulletin'`)},validateDecorationPropCombination(){this.decoration&&((this.kind!==`label`||this.type!==`default`)&&console.error(`DtBadge error: decoration prop can only be used with kind: 'label' and type: 'default'.`),this.hasIcons&&console.error(`DtBadge error: decoration prop cannot be used with startIcon or endIcon.`))}}},o={key:0,class:`d-badge__decorative`};function s(e,t,n,r,a,s){return(0,i.openBlock)(),(0,i.createElementBlock)(`span`,{class:(0,i.normalizeClass)([`d-badge`,a.BADGE_TYPE_MODIFIERS[n.type],a.BADGE_KIND_MODIFIERS[n.kind],a.BADGE_DECORATION_MODIFIERS[n.decoration],{"d-badge--subtle":n.subtle},{"d-badge--outlined":n.outlined}]),"data-qa":`dt-badge`},[n.decoration?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,o)):(0,i.createCommentVNode)(``,!0),s.hasLeftIcon?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,{key:1,class:(0,i.normalizeClass)([`d-badge__icon-left`,n.startIconClass])},[e.$slots.startIcon?(0,i.renderSlot)(e.$slots,`startIcon`,{key:0,iconSize:n.iconSize}):(0,i.renderSlot)(e.$slots,`leftIcon`,{key:1,iconSize:n.iconSize})],2)):(0,i.createCommentVNode)(``,!0),(0,i.createElementVNode)(`span`,{class:(0,i.normalizeClass)([`d-badge__label`,n.labelClass])},[(0,i.renderSlot)(e.$slots,`default`,{},()=>[(0,i.createTextVNode)((0,i.toDisplayString)(n.text),1)])],2),s.hasRightIcon?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,{key:2,class:(0,i.normalizeClass)([`d-badge__icon-right`,n.endIconClass])},[e.$slots.endIcon?(0,i.renderSlot)(e.$slots,`endIcon`,{key:0,iconSize:n.iconSize}):(0,i.renderSlot)(e.$slots,`rightIcon`,{key:1,iconSize:n.iconSize})],2)):(0,i.createCommentVNode)(``,!0)],2)}var c=t.t(a,[[`render`,s]]);exports.default=c;
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(`../../_plugin-vue_export-helper-D8jCH6HB.cjs`),r=require(`./badge-constants.cjs`),i=require(`../icon/icon-constants.cjs`);let a=require(`vue`);var o={name:`DtBadge`,props:{iconSize:{type:[String,Number],default:200,validator:e.ordinalSizeValidator(i.ICON_SIZE_MODIFIERS)},text:{type:String,default:``},kind:{type:String,default:`label`,validator:e=>Object.keys(r.BADGE_KIND_MODIFIERS).includes(e)},type:{type:String,default:`default`,validator:e=>Object.keys(r.BADGE_TYPE_MODIFIERS).includes(e)},decoration:{type:String,default:void 0,validator:e=>Object.keys(r.BADGE_DECORATION_MODIFIERS).includes(e)},labelClass:{type:[String,Array,Object],default:``},startIconClass:{type:[String,Array,Object],default:``},endIconClass:{type:[String,Array,Object],default:``},subtle:{type:Boolean,default:!1},outlined:{type:Boolean,default:!1}},data(){return{BADGE_TYPE_MODIFIERS:r.BADGE_TYPE_MODIFIERS,BADGE_KIND_MODIFIERS:r.BADGE_KIND_MODIFIERS,BADGE_DECORATION_MODIFIERS:r.BADGE_DECORATION_MODIFIERS}},computed:{hasLeftIcon(){return t.hasSlotContent(this.$slots.startIcon)||t.hasSlotContent(this.$slots.leftIcon)},hasRightIcon(){return t.hasSlotContent(this.$slots.endIcon)||t.hasSlotContent(this.$slots.rightIcon)},hasIcons(){return this.hasLeftIcon||this.hasRightIcon}},mounted(){this.validateProps()},updated(){this.validateProps()},methods:{validateProps(){this.validateTypePropCombination(),this.validateDecorationPropCombination()},validateTypePropCombination(){this.type===`ai`&&this.kind===`count`&&console.error(`DtBadge error: type: 'ai' with kind: 'count' is an invalid combination.`),this.type!==`bulletin`&&this.subtle&&console.error(`DtBadge error: subtle can only be used with type 'bulletin'`)},validateDecorationPropCombination(){this.decoration&&((this.kind!==`label`||this.type!==`default`)&&console.error(`DtBadge error: decoration prop can only be used with kind: 'label' and type: 'default'.`),this.hasIcons&&console.error(`DtBadge error: decoration prop cannot be used with startIcon or endIcon.`))}}},s={key:0,class:`d-badge__decorative`};function c(e,t,n,r,i,o){return(0,a.openBlock)(),(0,a.createElementBlock)(`span`,{class:(0,a.normalizeClass)([`d-badge`,i.BADGE_TYPE_MODIFIERS[n.type],i.BADGE_KIND_MODIFIERS[n.kind],i.BADGE_DECORATION_MODIFIERS[n.decoration],{"d-badge--subtle":n.subtle},{"d-badge--outlined":n.outlined}]),"data-qa":`dt-badge`},[n.decoration?((0,a.openBlock)(),(0,a.createElementBlock)(`span`,s)):(0,a.createCommentVNode)(``,!0),o.hasLeftIcon?((0,a.openBlock)(),(0,a.createElementBlock)(`span`,{key:1,class:(0,a.normalizeClass)([`d-badge__icon-left`,n.startIconClass])},[e.$slots.startIcon?(0,a.renderSlot)(e.$slots,`startIcon`,{key:0,iconSize:n.iconSize}):(0,a.renderSlot)(e.$slots,`leftIcon`,{key:1,iconSize:n.iconSize})],2)):(0,a.createCommentVNode)(``,!0),(0,a.createElementVNode)(`span`,{class:(0,a.normalizeClass)([`d-badge__label`,n.labelClass])},[(0,a.renderSlot)(e.$slots,`default`,{},()=>[(0,a.createTextVNode)((0,a.toDisplayString)(n.text),1)])],2),o.hasRightIcon?((0,a.openBlock)(),(0,a.createElementBlock)(`span`,{key:2,class:(0,a.normalizeClass)([`d-badge__icon-right`,n.endIconClass])},[e.$slots.endIcon?(0,a.renderSlot)(e.$slots,`endIcon`,{key:0,iconSize:n.iconSize}):(0,a.renderSlot)(e.$slots,`rightIcon`,{key:1,iconSize:n.iconSize})],2)):(0,a.createCommentVNode)(``,!0)],2)}var l=n.t(o,[[`render`,c]]);exports.default=l;
2
2
  //# sourceMappingURL=badge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge.cjs","names":[],"sources":["../../../components/Badge/Badge.vue"],"sourcesContent":["<template>\n <span\n :class=\"[\n 'd-badge',\n BADGE_TYPE_MODIFIERS[type],\n BADGE_KIND_MODIFIERS[kind],\n BADGE_DECORATION_MODIFIERS[decoration],\n { 'd-badge--subtle': subtle },\n { 'd-badge--outlined': outlined },\n ]\"\n data-qa=\"dt-badge\"\n >\n <span\n v-if=\"decoration\"\n class=\"d-badge__decorative\"\n />\n <span\n v-if=\"hasLeftIcon\"\n :class=\"['d-badge__icon-left', startIconClass]\"\n >\n <!-- @slot Slot for start icon, icon-size slot prop defaults to '200' -->\n <slot\n v-if=\"$slots.startIcon\"\n name=\"startIcon\"\n :icon-size=\"iconSize\"\n />\n <!-- @slot @deprecated Use startIcon -->\n <slot\n v-else\n name=\"leftIcon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <span :class=\"['d-badge__label', labelClass]\">\n <!-- @slot Slot for badge content, defaults to text prop -->\n <slot>\n {{ text }}\n </slot>\n </span>\n <span\n v-if=\"hasRightIcon\"\n :class=\"['d-badge__icon-right', endIconClass]\"\n >\n <!-- @slot Slot for end icon, icon-size slot prop defaults to '200' -->\n <slot\n v-if=\"$slots.endIcon\"\n name=\"endIcon\"\n :icon-size=\"iconSize\"\n />\n <!-- @slot @deprecated Use endIcon -->\n <slot\n v-else\n name=\"rightIcon\"\n :icon-size=\"iconSize\"\n />\n </span>\n </span>\n</template>\n\n<script>\nimport { BADGE_TYPE_MODIFIERS, BADGE_KIND_MODIFIERS, BADGE_DECORATION_MODIFIERS } from './BadgeConstants';\nimport { ICON_SIZE_MODIFIERS } from '@/components/Icon';\nimport { hasSlotContent } from '@/common/utils/index.js';\n\n/**\n * A badge is a compact UI element that provides brief, descriptive information about an element.\n * It is terse, ideally one word.\n * @see https://dialtone.dialpad.com/components/badge.html\n */\nexport default {\n name: 'DtBadge',\n\n props: {\n /**\n * The size of the left and right icons.\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n iconSize: {\n type: String,\n default: '200',\n validator: (s) => Object.keys(ICON_SIZE_MODIFIERS).includes(s),\n },\n\n /**\n * Text for the badge content\n */\n text: {\n type: String,\n default: '',\n },\n\n /**\n * The kind of badge which determines the styling\n * @values label, count\n */\n kind: {\n type: String,\n default: 'label',\n validator: (kind) => Object.keys(BADGE_KIND_MODIFIERS).includes(kind),\n },\n\n /**\n * Color for the badge background\n * @values default, info, positive, warning, critical, bulletin, ai\n */\n type: {\n type: String,\n default: 'default',\n validator: (type) => Object.keys(BADGE_TYPE_MODIFIERS).includes(type),\n },\n\n /**\n * Decoration for the badge. This can be only used with kind: label and type: default\n * with no left and right icons\n * @values black-400, black-500, black-900, red-200, red-300, red-400, purple-200,\n * purple-300, purple-400, purple-500, blue-200, blue-300, blue-400, green-300, green-400,\n * green-500, gold-300, gold-400, gold-500, magenta-200, magenta-300, magenta-400\n */\n decoration: {\n type: String,\n default: undefined,\n validator: (type) => Object.keys(BADGE_DECORATION_MODIFIERS).includes(type),\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Used to customize the start icon container\n */\n startIconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Used to customize the end icon container\n */\n endIconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Shows a subtle appearance for the badge\n * Currently only affects the badge when type is bulletin.\n */\n subtle: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Outlines the badge with a border\n */\n outlined: {\n type: Boolean,\n default: false,\n },\n },\n\n data () {\n return {\n BADGE_TYPE_MODIFIERS,\n BADGE_KIND_MODIFIERS,\n BADGE_DECORATION_MODIFIERS,\n };\n },\n\n computed: {\n hasLeftIcon () {\n return hasSlotContent(this.$slots.startIcon) || hasSlotContent(this.$slots.leftIcon);\n },\n\n hasRightIcon () {\n return hasSlotContent(this.$slots.endIcon) || hasSlotContent(this.$slots.rightIcon);\n },\n\n hasIcons () {\n return this.hasLeftIcon || this.hasRightIcon;\n },\n },\n\n mounted () {\n this.validateProps();\n },\n\n updated () {\n this.validateProps();\n },\n\n methods: {\n validateProps () {\n this.validateTypePropCombination();\n this.validateDecorationPropCombination();\n },\n\n validateTypePropCombination () {\n if (this.type === 'ai' && this.kind === 'count') {\n console.error('DtBadge error: type: \\'ai\\' with kind: \\'count\\' is an invalid combination.');\n }\n if (this.type !== 'bulletin' && this.subtle) {\n console.error('DtBadge error: subtle can only be used with type \\'bulletin\\'');\n }\n },\n\n validateDecorationPropCombination () {\n if (!this.decoration) return;\n\n if (this.kind !== 'label' || this.type !== 'default') {\n console.error('DtBadge error: decoration prop can only be used with kind: \\'label\\' and type: \\'default\\'.');\n }\n\n if (this.hasIcons) {\n console.error('DtBadge error: decoration prop cannot be used with startIcon or endIcon.');\n }\n },\n },\n};\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"badge.cjs","names":[],"sources":["../../../components/Badge/Badge.vue"],"sourcesContent":["<template>\n <span\n :class=\"[\n 'd-badge',\n BADGE_TYPE_MODIFIERS[type],\n BADGE_KIND_MODIFIERS[kind],\n BADGE_DECORATION_MODIFIERS[decoration],\n { 'd-badge--subtle': subtle },\n { 'd-badge--outlined': outlined },\n ]\"\n data-qa=\"dt-badge\"\n >\n <span\n v-if=\"decoration\"\n class=\"d-badge__decorative\"\n />\n <span\n v-if=\"hasLeftIcon\"\n :class=\"['d-badge__icon-left', startIconClass]\"\n >\n <!-- @slot Slot for start icon, icon-size slot prop defaults to '200' -->\n <slot\n v-if=\"$slots.startIcon\"\n name=\"startIcon\"\n :icon-size=\"iconSize\"\n />\n <!-- @slot @deprecated Use startIcon -->\n <slot\n v-else\n name=\"leftIcon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <span :class=\"['d-badge__label', labelClass]\">\n <!-- @slot Slot for badge content, defaults to text prop -->\n <slot>\n {{ text }}\n </slot>\n </span>\n <span\n v-if=\"hasRightIcon\"\n :class=\"['d-badge__icon-right', endIconClass]\"\n >\n <!-- @slot Slot for end icon, icon-size slot prop defaults to '200' -->\n <slot\n v-if=\"$slots.endIcon\"\n name=\"endIcon\"\n :icon-size=\"iconSize\"\n />\n <!-- @slot @deprecated Use endIcon -->\n <slot\n v-else\n name=\"rightIcon\"\n :icon-size=\"iconSize\"\n />\n </span>\n </span>\n</template>\n\n<script>\nimport { BADGE_TYPE_MODIFIERS, BADGE_KIND_MODIFIERS, BADGE_DECORATION_MODIFIERS } from './BadgeConstants';\nimport { ICON_SIZE_MODIFIERS } from '@/components/Icon';\nimport { hasSlotContent } from '@/common/utils/index.js';\nimport { ordinalSizeValidator } from '@/common/validators';\n\n/**\n * A badge is a compact UI element that provides brief, descriptive information about an element.\n * It is terse, ideally one word.\n * @see https://dialtone.dialpad.com/components/badge.html\n */\nexport default {\n name: 'DtBadge',\n\n props: {\n /**\n * The size of the left and right icons.\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n iconSize: {\n type: [String, Number],\n default: 200,\n validator: ordinalSizeValidator(ICON_SIZE_MODIFIERS),\n },\n\n /**\n * Text for the badge content\n */\n text: {\n type: String,\n default: '',\n },\n\n /**\n * The kind of badge which determines the styling\n * @values label, count\n */\n kind: {\n type: String,\n default: 'label',\n validator: (kind) => Object.keys(BADGE_KIND_MODIFIERS).includes(kind),\n },\n\n /**\n * Color for the badge background\n * @values default, info, positive, warning, critical, bulletin, ai\n */\n type: {\n type: String,\n default: 'default',\n validator: (type) => Object.keys(BADGE_TYPE_MODIFIERS).includes(type),\n },\n\n /**\n * Decoration for the badge. This can be only used with kind: label and type: default\n * with no left and right icons\n * @values black-400, black-500, black-900, red-200, red-300, red-400, purple-200,\n * purple-300, purple-400, purple-500, blue-200, blue-300, blue-400, green-300, green-400,\n * green-500, gold-300, gold-400, gold-500, magenta-200, magenta-300, magenta-400\n */\n decoration: {\n type: String,\n default: undefined,\n validator: (type) => Object.keys(BADGE_DECORATION_MODIFIERS).includes(type),\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Used to customize the start icon container\n */\n startIconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Used to customize the end icon container\n */\n endIconClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Shows a subtle appearance for the badge\n * Currently only affects the badge when type is bulletin.\n */\n subtle: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Outlines the badge with a border\n */\n outlined: {\n type: Boolean,\n default: false,\n },\n },\n\n data () {\n return {\n BADGE_TYPE_MODIFIERS,\n BADGE_KIND_MODIFIERS,\n BADGE_DECORATION_MODIFIERS,\n };\n },\n\n computed: {\n hasLeftIcon () {\n return hasSlotContent(this.$slots.startIcon) || hasSlotContent(this.$slots.leftIcon);\n },\n\n hasRightIcon () {\n return hasSlotContent(this.$slots.endIcon) || hasSlotContent(this.$slots.rightIcon);\n },\n\n hasIcons () {\n return this.hasLeftIcon || this.hasRightIcon;\n },\n },\n\n mounted () {\n this.validateProps();\n },\n\n updated () {\n this.validateProps();\n },\n\n methods: {\n validateProps () {\n this.validateTypePropCombination();\n this.validateDecorationPropCombination();\n },\n\n validateTypePropCombination () {\n if (this.type === 'ai' && this.kind === 'count') {\n console.error('DtBadge error: type: \\'ai\\' with kind: \\'count\\' is an invalid combination.');\n }\n if (this.type !== 'bulletin' && this.subtle) {\n console.error('DtBadge error: subtle can only be used with type \\'bulletin\\'');\n }\n },\n\n validateDecorationPropCombination () {\n if (!this.decoration) return;\n\n if (this.kind !== 'label' || this.type !== 'default') {\n console.error('DtBadge error: decoration prop can only be used with kind: \\'label\\' and type: \\'default\\'.');\n }\n\n if (this.hasIcons) {\n console.error('DtBadge error: decoration prop cannot be used with startIcon or endIcon.');\n }\n },\n },\n};\n</script>\n"],"mappings":"4XAsEA,IAAK,EAAU,CACb,KAAM,UAEN,MAAO,CAKL,SAAU,CACR,KAAM,CAAC,OAAQ,OAAO,CACtB,QAAS,IACT,UAAW,EAAA,qBAAqB,EAAA,oBAAoB,CACrD,CAKD,KAAM,CACJ,KAAM,OACN,QAAS,GACV,CAMD,KAAM,CACJ,KAAM,OACN,QAAS,QACT,UAAY,GAAS,OAAO,KAAK,EAAA,qBAAqB,CAAC,SAAS,EAAK,CACtE,CAMD,KAAM,CACJ,KAAM,OACN,QAAS,UACT,UAAY,GAAS,OAAO,KAAK,EAAA,qBAAqB,CAAC,SAAS,EAAK,CACtE,CASD,WAAY,CACV,KAAM,OACN,QAAS,IAAA,GACT,UAAY,GAAS,OAAO,KAAK,EAAA,2BAA2B,CAAC,SAAS,EAAK,CAC5E,CAKD,WAAY,CACV,KAAM,CAAC,OAAQ,MAAO,OAAO,CAC7B,QAAS,GACV,CAKD,eAAgB,CACd,KAAM,CAAC,OAAQ,MAAO,OAAO,CAC7B,QAAS,GACV,CAKD,aAAc,CACZ,KAAM,CAAC,OAAQ,MAAO,OAAO,CAC7B,QAAS,GACV,CAMD,OAAQ,CACN,KAAM,QACN,QAAS,GACV,CAKD,SAAU,CACR,KAAM,QACN,QAAS,GACV,CACF,CAED,MAAQ,CACN,MAAO,CACL,qBAAA,EAAA,qBACA,qBAAA,EAAA,qBACA,2BAAA,EAAA,2BACD,EAGH,SAAU,CACR,aAAe,CACb,OAAO,EAAA,eAAe,KAAK,OAAO,UAAS,EAAK,EAAA,eAAe,KAAK,OAAO,SAAS,EAGtF,cAAgB,CACd,OAAO,EAAA,eAAe,KAAK,OAAO,QAAO,EAAK,EAAA,eAAe,KAAK,OAAO,UAAU,EAGrF,UAAY,CACV,OAAO,KAAK,aAAe,KAAK,cAEnC,CAED,SAAW,CACT,KAAK,eAAe,EAGtB,SAAW,CACT,KAAK,eAAe,EAGtB,QAAS,CACP,eAAiB,CACf,KAAK,6BAA6B,CAClC,KAAK,mCAAmC,EAG1C,6BAA+B,CACzB,KAAK,OAAS,MAAQ,KAAK,OAAS,SACtC,QAAQ,MAAM,0EAA8E,CAE1F,KAAK,OAAS,YAAc,KAAK,QACnC,QAAQ,MAAM,8DAAgE,EAIlF,mCAAqC,CAC9B,KAAK,cAEN,KAAK,OAAS,SAAW,KAAK,OAAS,YACzC,QAAQ,MAAM,0FAA8F,CAG1G,KAAK,UACP,QAAQ,MAAM,2EAA2E,GAG9F,CACF,UAlNK,MAAM,gGA0CH,OAAA,CAtDJ,OAAA,EAAA,EAAA,gBAAK,WAA2B,EAAA,qBAAqB,EAAA,MAAa,EAAA,qBAAqB,EAAA,MAAa,EAAA,2BAA2B,EAAA,+BAAwC,EAAA,OAAM,sBAAiC,EAAA,SAAQ,GAQvN,UAAQ,aAGA,EAAA,aAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAEN,OAHF,EAGE,GAAA,EAAA,EAAA,oBAAA,GAAA,GAAA,CAEM,EAAA,cAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAeD,OAAA,OAdJ,OAAA,EAAA,EAAA,gBAAK,CAAA,qBAAyB,EAAA,eAAc,CAAA,GAIrC,EAAA,OAAO,WAAA,EAAA,EAAA,YAGb,EAAA,OAAA,YAAA,OADC,SAAW,EAAA,4BAOZ,EAAA,OAAA,WAAA,OADC,SAAW,EAAA,yEAQT,OAAA,CALA,OAAA,EAAA,EAAA,gBAAK,CAAA,iBAAqB,EAAA,WAAU,CAAA,CAAA,CAAA,EAAA,EAAA,EAAA,YAIlC,EAAA,OAAA,UAAA,EAAA,KAAA,EAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBADF,EAAA,KAAI,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAIH,EAAA,eAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAeD,OAAA,OAdJ,OAAA,EAAA,EAAA,gBAAK,CAAA,sBAA0B,EAAA,aAAY,CAAA,GAIpC,EAAA,OAAO,SAAA,EAAA,EAAA,YAGb,EAAA,OAAA,UAAA,OADC,SAAW,EAAA,4BAOZ,EAAA,OAAA,YAAA,OADC,SAAW,EAAA"}