@dialpad/dialtone 9.73.0-beta.1 → 9.73.0-beta.2

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 (388) hide show
  1. package/dist/css/dialtone-default-theme.css +14545 -13955
  2. package/dist/css/dialtone-default-theme.min.css +1 -1
  3. package/dist/css/dialtone.css +263 -24
  4. package/dist/css/dialtone.min.css +1 -1
  5. package/dist/css/tokens/tokens-base-dark.css +898 -895
  6. package/dist/css/tokens/tokens-base-light.css +673 -670
  7. package/dist/css/tokens/tokens-dp-dark.css +1831 -1831
  8. package/dist/css/tokens/tokens-dp-light.css +1832 -1832
  9. package/dist/css/tokens/tokens-expressive-dark.css +1793 -1793
  10. package/dist/css/tokens/tokens-expressive-light.css +1793 -1793
  11. package/dist/css/tokens/tokens-expressive-sm-dark.css +1793 -1793
  12. package/dist/css/tokens/tokens-expressive-sm-light.css +1793 -1793
  13. package/dist/css/tokens/tokens-tmo-dark.css +1787 -1787
  14. package/dist/css/tokens/tokens-tmo-light.css +1787 -1787
  15. package/dist/tokens/css/tokens-base-dark.css +898 -895
  16. package/dist/tokens/css/tokens-base-light.css +673 -670
  17. package/dist/tokens/css/tokens-dp-dark.css +1831 -1831
  18. package/dist/tokens/css/tokens-dp-light.css +1832 -1832
  19. package/dist/tokens/css/tokens-expressive-dark.css +1793 -1793
  20. package/dist/tokens/css/tokens-expressive-light.css +1793 -1793
  21. package/dist/tokens/css/tokens-expressive-sm-dark.css +1793 -1793
  22. package/dist/tokens/css/tokens-expressive-sm-light.css +1793 -1793
  23. package/dist/tokens/css/tokens-tmo-dark.css +1787 -1787
  24. package/dist/tokens/css/tokens-tmo-light.css +1787 -1787
  25. package/dist/tokens/doc.json +47849 -47677
  26. package/dist/tokens/less/tokens-base-dark.less +20 -17
  27. package/dist/tokens/less/tokens-base-light.less +20 -17
  28. package/dist/tokens/less/tokens-dp-dark.less +59 -59
  29. package/dist/tokens/less/tokens-dp-light.less +59 -59
  30. package/dist/tokens/less/tokens-expressive-dark.less +55 -55
  31. package/dist/tokens/less/tokens-expressive-light.less +55 -55
  32. package/dist/tokens/less/tokens-expressive-sm-dark.less +55 -55
  33. package/dist/tokens/less/tokens-expressive-sm-light.less +55 -55
  34. package/dist/tokens/less/tokens-tmo-dark.less +49 -49
  35. package/dist/tokens/less/tokens-tmo-light.less +49 -49
  36. package/dist/tokens/themes/chunks/tokens-base-dark-D3v4_NMT.js +4 -0
  37. package/dist/tokens/themes/chunks/tokens-base-dark-SlAAMLw5.js +1 -0
  38. package/dist/tokens/themes/chunks/tokens-base-light-BUcyLIIS.js +4 -0
  39. package/dist/tokens/themes/chunks/tokens-base-light-Dx0sRL2j.js +1 -0
  40. package/dist/tokens/themes/dp-dark.cjs +1 -1
  41. package/dist/tokens/themes/dp-dark.js +4 -4
  42. package/dist/tokens/themes/dp-light.cjs +1 -1
  43. package/dist/tokens/themes/dp-light.js +4 -4
  44. package/dist/tokens/themes/expressive-dark.cjs +1 -1
  45. package/dist/tokens/themes/expressive-dark.js +2 -2
  46. package/dist/tokens/themes/expressive-light.cjs +1 -1
  47. package/dist/tokens/themes/expressive-light.js +4 -4
  48. package/dist/tokens/themes/expressive-sm-dark.cjs +1 -1
  49. package/dist/tokens/themes/expressive-sm-dark.js +2 -2
  50. package/dist/tokens/themes/expressive-sm-light.cjs +1 -1
  51. package/dist/tokens/themes/expressive-sm-light.js +4 -4
  52. package/dist/tokens/themes/tmo-dark.cjs +1 -1
  53. package/dist/tokens/themes/tmo-dark.js +4 -4
  54. package/dist/tokens/themes/tmo-light.cjs +1 -1
  55. package/dist/tokens/themes/tmo-light.js +4 -4
  56. package/dist/tokens/tokens-base-dark.json +20 -17
  57. package/dist/tokens/tokens-base-light.json +20 -17
  58. package/dist/tokens/tokens-dp-dark.json +59 -59
  59. package/dist/tokens/tokens-dp-light.json +59 -59
  60. package/dist/tokens/tokens-expressive-dark.json +55 -55
  61. package/dist/tokens/tokens-expressive-light.json +55 -55
  62. package/dist/tokens/tokens-expressive-sm-dark.json +55 -55
  63. package/dist/tokens/tokens-expressive-sm-light.json +55 -55
  64. package/dist/tokens/tokens-tmo-dark.json +49 -49
  65. package/dist/tokens/tokens-tmo-light.json +49 -49
  66. package/dist/vue2/component-documentation.json +1 -1
  67. package/dist/vue2/components/avatar/avatar.vue.cjs +13 -24
  68. package/dist/vue2/components/avatar/avatar.vue.cjs.map +1 -1
  69. package/dist/vue2/components/avatar/avatar.vue.js +13 -24
  70. package/dist/vue2/components/avatar/avatar.vue.js.map +1 -1
  71. package/dist/vue2/components/icon/icon.vue.cjs +2 -2
  72. package/dist/vue2/components/icon/icon.vue.js +2 -2
  73. package/dist/vue2/directives/scrollbar/scrollbar.cjs.map +1 -1
  74. package/dist/vue2/directives/scrollbar/scrollbar.js.map +1 -1
  75. package/dist/vue2/recipes/conversation_view/feed_item_row/feed_item_row.vue.cjs +7 -6
  76. package/dist/vue2/recipes/conversation_view/feed_item_row/feed_item_row.vue.cjs.map +1 -1
  77. package/dist/vue2/recipes/conversation_view/feed_item_row/feed_item_row.vue.js +7 -6
  78. package/dist/vue2/recipes/conversation_view/feed_item_row/feed_item_row.vue.js.map +1 -1
  79. package/dist/vue2/recipes/conversation_view/feed_pill/feed_item_pill.vue.cjs +9 -17
  80. package/dist/vue2/recipes/conversation_view/feed_pill/feed_item_pill.vue.cjs.map +1 -1
  81. package/dist/vue2/recipes/conversation_view/feed_pill/feed_item_pill.vue.js +9 -17
  82. package/dist/vue2/recipes/conversation_view/feed_pill/feed_item_pill.vue.js.map +1 -1
  83. package/dist/vue2/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.cjs +3 -2
  84. package/dist/vue2/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.cjs.map +1 -1
  85. package/dist/vue2/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.js +4 -3
  86. package/dist/vue2/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.js.map +1 -1
  87. package/dist/vue2/recipes/conversation_view/message_input/message_input.vue.cjs +22 -11
  88. package/dist/vue2/recipes/conversation_view/message_input/message_input.vue.cjs.map +1 -1
  89. package/dist/vue2/recipes/conversation_view/message_input/message_input.vue.js +22 -11
  90. package/dist/vue2/recipes/conversation_view/message_input/message_input.vue.js.map +1 -1
  91. package/dist/vue2/recipes/item_layout/contact_info/contact_info.vue.cjs +14 -10
  92. package/dist/vue2/recipes/item_layout/contact_info/contact_info.vue.cjs.map +1 -1
  93. package/dist/vue2/recipes/item_layout/contact_info/contact_info.vue.js +14 -10
  94. package/dist/vue2/recipes/item_layout/contact_info/contact_info.vue.js.map +1 -1
  95. package/dist/vue2/recipes/leftbar/callbox/callbox.vue.cjs +6 -3
  96. package/dist/vue2/recipes/leftbar/callbox/callbox.vue.cjs.map +1 -1
  97. package/dist/vue2/recipes/leftbar/callbox/callbox.vue.js +6 -3
  98. package/dist/vue2/recipes/leftbar/callbox/callbox.vue.js.map +1 -1
  99. package/dist/vue2/recipes/leftbar/contact_row/contact_row.vue.cjs +6 -5
  100. package/dist/vue2/recipes/leftbar/contact_row/contact_row.vue.cjs.map +1 -1
  101. package/dist/vue2/recipes/leftbar/contact_row/contact_row.vue.js +6 -5
  102. package/dist/vue2/recipes/leftbar/contact_row/contact_row.vue.js.map +1 -1
  103. package/dist/vue2/style.css +65 -62
  104. package/dist/vue2/types/common/sr_only_close_button.vue.d.ts +1 -1
  105. package/dist/vue2/types/components/avatar/avatar.vue.d.ts +5 -35
  106. package/dist/vue2/types/components/avatar/avatar.vue.d.ts.map +1 -1
  107. package/dist/vue2/types/components/badge/badge.vue.d.ts +4 -4
  108. package/dist/vue2/types/components/banner/banner.vue.d.ts +1 -1
  109. package/dist/vue2/types/components/breadcrumbs/breadcrumb_item.vue.d.ts +1 -1
  110. package/dist/vue2/types/components/breadcrumbs/breadcrumbs.vue.d.ts +1 -1
  111. package/dist/vue2/types/components/button/button.vue.d.ts +1 -1
  112. package/dist/vue2/types/components/button_group/button_group.vue.d.ts +1 -1
  113. package/dist/vue2/types/components/button_group/buttons_decorator.vue.d.ts +1 -1
  114. package/dist/vue2/types/components/card/card.vue.d.ts +1 -1
  115. package/dist/vue2/types/components/checkbox/checkbox.vue.d.ts +1 -1
  116. package/dist/vue2/types/components/checkbox_group/checkbox_group.vue.d.ts +3 -3
  117. package/dist/vue2/types/components/checkbox_group/checkboxes_decorator.vue.d.ts +1 -1
  118. package/dist/vue2/types/components/chip/chip.vue.d.ts +2 -2
  119. package/dist/vue2/types/components/codeblock/codeblock.vue.d.ts +1 -1
  120. package/dist/vue2/types/components/collapsible/collapsible.vue.d.ts +2 -2
  121. package/dist/vue2/types/components/collapsible/collapsible_lazy_show.vue.d.ts +1 -1
  122. package/dist/vue2/types/components/combobox/combobox.vue.d.ts +1 -1
  123. package/dist/vue2/types/components/combobox/combobox_empty-list.vue.d.ts +1 -1
  124. package/dist/vue2/types/components/combobox/combobox_loading-list.vue.d.ts +1 -1
  125. package/dist/vue2/types/components/datepicker/datepicker.vue.d.ts +1 -1
  126. package/dist/vue2/types/components/datepicker/modules/calendar.vue.d.ts +1 -1
  127. package/dist/vue2/types/components/datepicker/modules/month-year-picker.vue.d.ts +1 -1
  128. package/dist/vue2/types/components/description_list/description_list.vue.d.ts +1 -1
  129. package/dist/vue2/types/components/dropdown/dropdown.vue.d.ts +2 -2
  130. package/dist/vue2/types/components/dropdown/dropdown_list.vue.d.ts +1 -1
  131. package/dist/vue2/types/components/dropdown/dropdown_separator.vue.d.ts +1 -1
  132. package/dist/vue2/types/components/emoji/emoji.vue.d.ts +1 -1
  133. package/dist/vue2/types/components/emoji_picker/emoji_picker.vue.d.ts +1 -1
  134. package/dist/vue2/types/components/emoji_picker/modules/emoji_description.vue.d.ts +1 -1
  135. package/dist/vue2/types/components/emoji_picker/modules/emoji_search.vue.d.ts +1 -1
  136. package/dist/vue2/types/components/emoji_picker/modules/emoji_selector.vue.d.ts +1 -1
  137. package/dist/vue2/types/components/emoji_picker/modules/emoji_skin_selector.vue.d.ts +1 -1
  138. package/dist/vue2/types/components/emoji_picker/modules/emoji_tabset.vue.d.ts +1 -1
  139. package/dist/vue2/types/components/emoji_text_wrapper/emoji_text_wrapper.vue.d.ts +1 -1
  140. package/dist/vue2/types/components/empty_state/empty_state.vue.d.ts +1 -1
  141. package/dist/vue2/types/components/hovercard/hovercard.vue.d.ts +1 -1
  142. package/dist/vue2/types/components/icon/icon.vue.d.ts +1 -1
  143. package/dist/vue2/types/components/illustration/illustration.vue.d.ts +1 -1
  144. package/dist/vue2/types/components/image_viewer/image_viewer.vue.d.ts +1 -1
  145. package/dist/vue2/types/components/input/input.vue.d.ts +1 -1
  146. package/dist/vue2/types/components/input_group/decorators/input.vue.d.ts +1 -1
  147. package/dist/vue2/types/components/input_group/decorators/inputs.vue.d.ts +1 -1
  148. package/dist/vue2/types/components/input_group/input_group.vue.d.ts +2 -2
  149. package/dist/vue2/types/components/item_layout/item_layout.vue.d.ts +1 -1
  150. package/dist/vue2/types/components/keyboard_shortcut/keyboard_shortcut.vue.d.ts +1 -1
  151. package/dist/vue2/types/components/lazy_show/lazy_show.vue.d.ts +1 -1
  152. package/dist/vue2/types/components/link/link.vue.d.ts +1 -1
  153. package/dist/vue2/types/components/list_item/list_item.vue.d.ts +2 -2
  154. package/dist/vue2/types/components/list_item_group/list_item_group.vue.d.ts +1 -1
  155. package/dist/vue2/types/components/modal/modal.vue.d.ts +1 -1
  156. package/dist/vue2/types/components/notice/notice.vue.d.ts +1 -1
  157. package/dist/vue2/types/components/notice/notice_action.vue.d.ts +1 -1
  158. package/dist/vue2/types/components/notice/notice_content.vue.d.ts +1 -1
  159. package/dist/vue2/types/components/notice/notice_icon.vue.d.ts +1 -1
  160. package/dist/vue2/types/components/pagination/pagination.vue.d.ts +1 -1
  161. package/dist/vue2/types/components/popover/popover.vue.d.ts +1 -1
  162. package/dist/vue2/types/components/popover/popover_header_footer.vue.d.ts +1 -1
  163. package/dist/vue2/types/components/presence/presence.vue.d.ts +1 -1
  164. package/dist/vue2/types/components/radio/radio.vue.d.ts +1 -1
  165. package/dist/vue2/types/components/radio_group/radio_group.vue.d.ts +3 -3
  166. package/dist/vue2/types/components/radio_group/radios_decorator.vue.d.ts +1 -1
  167. package/dist/vue2/types/components/rich_text_editor/extensions/channels/ChannelComponent.vue.d.ts +17 -17
  168. package/dist/vue2/types/components/rich_text_editor/extensions/channels/ChannelSuggestion.vue.d.ts +1 -1
  169. package/dist/vue2/types/components/rich_text_editor/extensions/emoji/EmojiComponent.vue.d.ts +17 -17
  170. package/dist/vue2/types/components/rich_text_editor/extensions/emoji/EmojiSuggestion.vue.d.ts +1 -1
  171. package/dist/vue2/types/components/rich_text_editor/extensions/mentions/MentionComponent.vue.d.ts +17 -17
  172. package/dist/vue2/types/components/rich_text_editor/extensions/mentions/MentionSuggestion.vue.d.ts +1 -1
  173. package/dist/vue2/types/components/rich_text_editor/extensions/slash_command/SlashCommandComponent.vue.d.ts +17 -17
  174. package/dist/vue2/types/components/rich_text_editor/extensions/slash_command/SlashCommandSuggestion.vue.d.ts +1 -1
  175. package/dist/vue2/types/components/rich_text_editor/extensions/suggestion/SuggestionList.vue.d.ts +1 -1
  176. package/dist/vue2/types/components/rich_text_editor/rich_text_editor.vue.d.ts +1 -1
  177. package/dist/vue2/types/components/root_layout/root_layout.vue.d.ts +1 -1
  178. package/dist/vue2/types/components/select_menu/select_menu.vue.d.ts +1 -1
  179. package/dist/vue2/types/components/skeleton/skeleton-list-item.vue.d.ts +1 -1
  180. package/dist/vue2/types/components/skeleton/skeleton-paragraph.vue.d.ts +1 -1
  181. package/dist/vue2/types/components/skeleton/skeleton-shape.vue.d.ts +1 -1
  182. package/dist/vue2/types/components/skeleton/skeleton-text.vue.d.ts +1 -1
  183. package/dist/vue2/types/components/skeleton/skeleton.vue.d.ts +1 -1
  184. package/dist/vue2/types/components/split_button/split_button-alpha.vue.d.ts +1 -1
  185. package/dist/vue2/types/components/split_button/split_button-omega.vue.d.ts +2 -2
  186. package/dist/vue2/types/components/split_button/split_button.vue.d.ts +2 -2
  187. package/dist/vue2/types/components/stack/stack.vue.d.ts +1 -1
  188. package/dist/vue2/types/components/tabs/tab.vue.d.ts +1 -1
  189. package/dist/vue2/types/components/tabs/tab_group.vue.d.ts +1 -1
  190. package/dist/vue2/types/components/tabs/tab_panel.vue.d.ts +1 -1
  191. package/dist/vue2/types/components/toast/toast.vue.d.ts +1 -1
  192. package/dist/vue2/types/components/toggle/toggle.vue.d.ts +1 -1
  193. package/dist/vue2/types/components/tooltip/tooltip.vue.d.ts +2 -2
  194. package/dist/vue2/types/components/validation_messages/validation_messages.vue.d.ts +1 -1
  195. package/dist/vue2/types/directives/scrollbar/scrollbar.d.ts.map +1 -1
  196. package/dist/vue2/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts +2 -2
  197. package/dist/vue2/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +2 -2
  198. package/dist/vue2/types/recipes/cards/ivr_node/ivr_node.vue.d.ts +1 -1
  199. package/dist/vue2/types/recipes/chips/grouped_chip/grouped_chip.vue.d.ts +1 -1
  200. package/dist/vue2/types/recipes/comboboxes/combobox_multi_select/combobox_multi_select.vue.d.ts +1 -1
  201. package/dist/vue2/types/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue.d.ts +1 -1
  202. package/dist/vue2/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +1 -1
  203. package/dist/vue2/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +1 -1
  204. package/dist/vue2/types/recipes/conversation_view/attachment_carousel/media_components/progress_bar.vue.d.ts +1 -1
  205. package/dist/vue2/types/recipes/conversation_view/editor/editor.vue.d.ts +1 -1
  206. package/dist/vue2/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +1 -1
  207. package/dist/vue2/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +1 -2
  208. package/dist/vue2/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
  209. package/dist/vue2/types/recipes/conversation_view/feed_pill/feed_item_pill.vue.d.ts +3 -17
  210. package/dist/vue2/types/recipes/conversation_view/feed_pill/feed_item_pill.vue.d.ts.map +1 -1
  211. package/dist/vue2/types/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.d.ts +17 -17
  212. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts +5 -7
  213. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  214. package/dist/vue2/types/recipes/conversation_view/time_pill/time_pill.vue.d.ts +1 -1
  215. package/dist/vue2/types/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +1 -1
  216. package/dist/vue2/types/recipes/item_layout/contact_info/contact_info.vue.d.ts +4 -17
  217. package/dist/vue2/types/recipes/item_layout/contact_info/contact_info.vue.d.ts.map +1 -1
  218. package/dist/vue2/types/recipes/leftbar/callbox/callbox.vue.d.ts +1 -1
  219. package/dist/vue2/types/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
  220. package/dist/vue2/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +1 -1
  221. package/dist/vue2/types/recipes/leftbar/contact_row/contact_row.vue.d.ts +1 -2
  222. package/dist/vue2/types/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
  223. package/dist/vue2/types/recipes/leftbar/general_row/general_row.vue.d.ts +2 -2
  224. package/dist/vue2/types/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts +1 -1
  225. package/dist/vue2/types/recipes/leftbar/group_row/group_row.vue.d.ts +1 -1
  226. package/dist/vue2/types/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +1 -1
  227. package/dist/vue2/types/recipes/notices/top_banner_info/top_banner_info.vue.d.ts +1 -1
  228. package/dist/vue3/components/checkbox/checkbox.vue.cjs +1 -1
  229. package/dist/vue3/components/checkbox/checkbox.vue.js +1 -1
  230. package/dist/vue3/components/icon/icon.vue.cjs +2 -2
  231. package/dist/vue3/components/icon/icon.vue.js +2 -2
  232. package/dist/vue3/directives/scrollbar/scrollbar.cjs.map +1 -1
  233. package/dist/vue3/directives/scrollbar/scrollbar.js.map +1 -1
  234. package/dist/vue3/recipes/conversation_view/feed_pill/feed_item_pill.vue.cjs +23 -25
  235. package/dist/vue3/recipes/conversation_view/feed_pill/feed_item_pill.vue.cjs.map +1 -1
  236. package/dist/vue3/recipes/conversation_view/feed_pill/feed_item_pill.vue.js +24 -26
  237. package/dist/vue3/recipes/conversation_view/feed_pill/feed_item_pill.vue.js.map +1 -1
  238. package/dist/vue3/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.cjs +4 -6
  239. package/dist/vue3/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.cjs.map +1 -1
  240. package/dist/vue3/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.js +5 -7
  241. package/dist/vue3/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.js.map +1 -1
  242. package/dist/vue3/recipes/conversation_view/message_input/message_input.vue.cjs +29 -18
  243. package/dist/vue3/recipes/conversation_view/message_input/message_input.vue.cjs.map +1 -1
  244. package/dist/vue3/recipes/conversation_view/message_input/message_input.vue.js +29 -18
  245. package/dist/vue3/recipes/conversation_view/message_input/message_input.vue.js.map +1 -1
  246. package/dist/vue3/recipes/item_layout/contact_info/contact_info.vue.cjs +26 -26
  247. package/dist/vue3/recipes/item_layout/contact_info/contact_info.vue.cjs.map +1 -1
  248. package/dist/vue3/recipes/item_layout/contact_info/contact_info.vue.js +27 -27
  249. package/dist/vue3/recipes/item_layout/contact_info/contact_info.vue.js.map +1 -1
  250. package/dist/vue3/recipes/leftbar/contact_row/contact_row.vue.cjs +1 -1
  251. package/dist/vue3/recipes/leftbar/contact_row/contact_row.vue.cjs.map +1 -1
  252. package/dist/vue3/recipes/leftbar/contact_row/contact_row.vue.js +1 -1
  253. package/dist/vue3/recipes/leftbar/contact_row/contact_row.vue.js.map +1 -1
  254. package/dist/vue3/style.css +24 -21
  255. package/dist/vue3/types/common/sr_only_close_button.vue.d.ts +1 -1
  256. package/dist/vue3/types/components/avatar/avatar.vue.d.ts +6 -6
  257. package/dist/vue3/types/components/badge/badge.vue.d.ts +1 -1
  258. package/dist/vue3/types/components/banner/banner.vue.d.ts +1 -1
  259. package/dist/vue3/types/components/breadcrumbs/breadcrumb_item.vue.d.ts +1 -1
  260. package/dist/vue3/types/components/breadcrumbs/breadcrumbs.vue.d.ts +1 -1
  261. package/dist/vue3/types/components/button/button.vue.d.ts +3 -3
  262. package/dist/vue3/types/components/button_group/button_group.vue.d.ts +1 -1
  263. package/dist/vue3/types/components/button_group/buttons_decorator.vue.d.ts +1 -1
  264. package/dist/vue3/types/components/card/card.vue.d.ts +1 -1
  265. package/dist/vue3/types/components/checkbox/checkbox.vue.d.ts +2 -2
  266. package/dist/vue3/types/components/checkbox_group/checkbox_group.vue.d.ts +4 -4
  267. package/dist/vue3/types/components/checkbox_group/checkboxes_decorator.vue.d.ts +1 -1
  268. package/dist/vue3/types/components/chip/chip.vue.d.ts +2 -2
  269. package/dist/vue3/types/components/codeblock/codeblock.vue.d.ts +1 -1
  270. package/dist/vue3/types/components/collapsible/collapsible.vue.d.ts +2 -2
  271. package/dist/vue3/types/components/collapsible/collapsible_lazy_show.vue.d.ts +1 -1
  272. package/dist/vue3/types/components/combobox/combobox.vue.d.ts +14 -14
  273. package/dist/vue3/types/components/combobox/combobox_empty-list.vue.d.ts +1 -1
  274. package/dist/vue3/types/components/combobox/combobox_loading-list.vue.d.ts +1 -1
  275. package/dist/vue3/types/components/datepicker/datepicker.vue.d.ts +1 -1
  276. package/dist/vue3/types/components/datepicker/modules/calendar.vue.d.ts +1 -1
  277. package/dist/vue3/types/components/datepicker/modules/month-year-picker.vue.d.ts +1 -1
  278. package/dist/vue3/types/components/description_list/description_list.vue.d.ts +1 -1
  279. package/dist/vue3/types/components/dropdown/dropdown.vue.d.ts +7 -5
  280. package/dist/vue3/types/components/dropdown/dropdown.vue.d.ts.map +1 -1
  281. package/dist/vue3/types/components/dropdown/dropdown_list.vue.d.ts +1 -1
  282. package/dist/vue3/types/components/dropdown/dropdown_separator.vue.d.ts +1 -1
  283. package/dist/vue3/types/components/emoji/emoji.vue.d.ts +1 -1
  284. package/dist/vue3/types/components/emoji_picker/emoji_picker.vue.d.ts +1 -1
  285. package/dist/vue3/types/components/emoji_picker/modules/emoji_description.vue.d.ts +1 -1
  286. package/dist/vue3/types/components/emoji_picker/modules/emoji_search.vue.d.ts +1 -1
  287. package/dist/vue3/types/components/emoji_picker/modules/emoji_selector.vue.d.ts +1 -1
  288. package/dist/vue3/types/components/emoji_picker/modules/emoji_skin_selector.vue.d.ts +1 -1
  289. package/dist/vue3/types/components/emoji_picker/modules/emoji_tabset.vue.d.ts +1 -1
  290. package/dist/vue3/types/components/emoji_text_wrapper/emoji_text_wrapper.vue.d.ts +1 -1
  291. package/dist/vue3/types/components/empty_state/empty_state.vue.d.ts +1 -1
  292. package/dist/vue3/types/components/hovercard/hovercard.vue.d.ts +1 -1
  293. package/dist/vue3/types/components/icon/icon.vue.d.ts +1 -1
  294. package/dist/vue3/types/components/illustration/illustration.vue.d.ts +1 -1
  295. package/dist/vue3/types/components/image_viewer/image_viewer.vue.d.ts +1 -1
  296. package/dist/vue3/types/components/input/input.vue.d.ts +7 -7
  297. package/dist/vue3/types/components/input_group/decorators/input.vue.d.ts +1 -1
  298. package/dist/vue3/types/components/input_group/decorators/inputs.vue.d.ts +1 -1
  299. package/dist/vue3/types/components/input_group/input_group.vue.d.ts +2 -2
  300. package/dist/vue3/types/components/item_layout/item_layout.vue.d.ts +1 -1
  301. package/dist/vue3/types/components/keyboard_shortcut/keyboard_shortcut.vue.d.ts +4 -4
  302. package/dist/vue3/types/components/lazy_show/lazy_show.vue.d.ts +2 -2
  303. package/dist/vue3/types/components/link/link.vue.d.ts +1 -1
  304. package/dist/vue3/types/components/list_item/list_item.vue.d.ts +2 -2
  305. package/dist/vue3/types/components/list_item_group/list_item_group.vue.d.ts +1 -1
  306. package/dist/vue3/types/components/modal/modal.vue.d.ts +3 -3
  307. package/dist/vue3/types/components/notice/notice.vue.d.ts +1 -1
  308. package/dist/vue3/types/components/notice/notice_action.vue.d.ts +1 -1
  309. package/dist/vue3/types/components/notice/notice_content.vue.d.ts +1 -1
  310. package/dist/vue3/types/components/notice/notice_icon.vue.d.ts +1 -1
  311. package/dist/vue3/types/components/pagination/pagination.vue.d.ts +1 -1
  312. package/dist/vue3/types/components/popover/popover_header_footer.vue.d.ts +1 -1
  313. package/dist/vue3/types/components/presence/presence.vue.d.ts +1 -1
  314. package/dist/vue3/types/components/radio/radio.vue.d.ts +3 -3
  315. package/dist/vue3/types/components/radio_group/radio_group.vue.d.ts +4 -4
  316. package/dist/vue3/types/components/radio_group/radios_decorator.vue.d.ts +1 -1
  317. package/dist/vue3/types/components/rich_text_editor/extensions/channels/ChannelComponent.vue.d.ts +1 -1
  318. package/dist/vue3/types/components/rich_text_editor/extensions/channels/ChannelSuggestion.vue.d.ts +1 -1
  319. package/dist/vue3/types/components/rich_text_editor/extensions/emoji/EmojiComponent.vue.d.ts +1 -1
  320. package/dist/vue3/types/components/rich_text_editor/extensions/emoji/EmojiSuggestion.vue.d.ts +1 -1
  321. package/dist/vue3/types/components/rich_text_editor/extensions/mentions/MentionComponent.vue.d.ts +1 -1
  322. package/dist/vue3/types/components/rich_text_editor/extensions/mentions/MentionSuggestion.vue.d.ts +1 -1
  323. package/dist/vue3/types/components/rich_text_editor/extensions/slash_command/SlashCommandComponent.vue.d.ts +1 -1
  324. package/dist/vue3/types/components/rich_text_editor/extensions/slash_command/SlashCommandSuggestion.vue.d.ts +1 -1
  325. package/dist/vue3/types/components/rich_text_editor/extensions/suggestion/SuggestionList.vue.d.ts +1 -1
  326. package/dist/vue3/types/components/rich_text_editor/rich_text_editor.vue.d.ts +4 -4
  327. package/dist/vue3/types/components/root_layout/root_layout.vue.d.ts +1 -1
  328. package/dist/vue3/types/components/scroller/DtScroller.vue.d.ts +1 -1
  329. package/dist/vue3/types/components/scroller/modules/core_scroller.vue.d.ts +1 -1
  330. package/dist/vue3/types/components/scroller/modules/dynamic_scroller.vue.d.ts +4 -4
  331. package/dist/vue3/types/components/scroller/modules/scroller_item.vue.d.ts +1 -1
  332. package/dist/vue3/types/components/select_menu/select_menu.vue.d.ts +2 -2
  333. package/dist/vue3/types/components/skeleton/skeleton-list-item.vue.d.ts +1 -1
  334. package/dist/vue3/types/components/skeleton/skeleton-paragraph.vue.d.ts +1 -1
  335. package/dist/vue3/types/components/skeleton/skeleton-shape.vue.d.ts +2 -2
  336. package/dist/vue3/types/components/skeleton/skeleton-text.vue.d.ts +1 -1
  337. package/dist/vue3/types/components/skeleton/skeleton.vue.d.ts +1 -1
  338. package/dist/vue3/types/components/split_button/split_button-alpha.vue.d.ts +2 -2
  339. package/dist/vue3/types/components/split_button/split_button-omega.vue.d.ts +1 -1
  340. package/dist/vue3/types/components/split_button/split_button.vue.d.ts +20 -20
  341. package/dist/vue3/types/components/tabs/tab.vue.d.ts +2 -2
  342. package/dist/vue3/types/components/tabs/tab_group.vue.d.ts +1 -1
  343. package/dist/vue3/types/components/tabs/tab_panel.vue.d.ts +2 -2
  344. package/dist/vue3/types/components/toast/toast.vue.d.ts +1 -1
  345. package/dist/vue3/types/components/toggle/toggle.vue.d.ts +1 -1
  346. package/dist/vue3/types/components/tooltip/tooltip.vue.d.ts +6 -6
  347. package/dist/vue3/types/components/validation_messages/validation_messages.vue.d.ts +1 -1
  348. package/dist/vue3/types/directives/scrollbar/scrollbar.d.ts.map +1 -1
  349. package/dist/vue3/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts +1 -1
  350. package/dist/vue3/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +3 -3
  351. package/dist/vue3/types/recipes/cards/ivr_node/ivr_node.vue.d.ts +1 -1
  352. package/dist/vue3/types/recipes/chips/grouped_chip/grouped_chip.vue.d.ts +1 -1
  353. package/dist/vue3/types/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue.d.ts +6 -6
  354. package/dist/vue3/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +1 -1
  355. package/dist/vue3/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +1 -1
  356. package/dist/vue3/types/recipes/conversation_view/attachment_carousel/media_components/progress_bar.vue.d.ts +1 -1
  357. package/dist/vue3/types/recipes/conversation_view/editor/editor.vue.d.ts +13 -13
  358. package/dist/vue3/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +1 -1
  359. package/dist/vue3/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +8 -2
  360. package/dist/vue3/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
  361. package/dist/vue3/types/recipes/conversation_view/feed_pill/feed_item_pill.vue.d.ts +32 -17
  362. package/dist/vue3/types/recipes/conversation_view/feed_pill/feed_item_pill.vue.d.ts.map +1 -1
  363. package/dist/vue3/types/recipes/conversation_view/message_input/meeting_pill/MeetingPill.vue.d.ts +1 -1
  364. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts +8 -10
  365. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  366. package/dist/vue3/types/recipes/conversation_view/time_pill/time_pill.vue.d.ts +1 -1
  367. package/dist/vue3/types/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +1 -1
  368. package/dist/vue3/types/recipes/item_layout/contact_info/contact_info.vue.d.ts +4 -17
  369. package/dist/vue3/types/recipes/item_layout/contact_info/contact_info.vue.d.ts.map +1 -1
  370. package/dist/vue3/types/recipes/leftbar/callbox/callbox.vue.d.ts +1 -1
  371. package/dist/vue3/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +3 -3
  372. package/dist/vue3/types/recipes/leftbar/contact_row/contact_row.vue.d.ts +1 -1
  373. package/dist/vue3/types/recipes/leftbar/general_row/general_row.vue.d.ts +10 -10
  374. package/dist/vue3/types/recipes/leftbar/general_row/leftbar_general_row_icon.vue.d.ts +1 -1
  375. package/dist/vue3/types/recipes/leftbar/group_row/group_row.vue.d.ts +1 -1
  376. package/dist/vue3/types/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +1 -1
  377. package/dist/vue3/types/recipes/notices/top_banner_info/top_banner_info.vue.d.ts +1 -1
  378. package/package.json +2 -2
  379. package/dist/tokens/themes/chunks/tokens-base-dark-BEsKKfTV.js +0 -4
  380. package/dist/tokens/themes/chunks/tokens-base-dark-Bxzti7ig.js +0 -1
  381. package/dist/tokens/themes/chunks/tokens-base-light-DV0xl0Dv.js +0 -1
  382. package/dist/tokens/themes/chunks/tokens-base-light-jdZ77WhZ.js +0 -4
  383. package/dist/vue2/common/storybook_utils.cjs +0 -8
  384. package/dist/vue2/common/storybook_utils.cjs.map +0 -1
  385. package/dist/vue2/common/storybook_utils.js +0 -8
  386. package/dist/vue2/common/storybook_utils.js.map +0 -1
  387. package/dist/vue2/types/common/storybook_utils.d.ts +0 -35
  388. package/dist/vue2/types/common/storybook_utils.d.ts.map +0 -1
@@ -1,17 +1,14 @@
1
1
  "use strict";
2
2
  const common_utils = require("../../common/utils.cjs");
3
3
  const avatar_constants = require("./avatar_constants.cjs");
4
- const storybook_utils = require("../../common/storybook_utils.cjs");
5
4
  const icon_constants = require("../icon/icon_constants.cjs");
6
5
  const utils = require("./utils.cjs");
7
6
  ;/* empty css */
8
7
  const _pluginVue2_normalizer = require("../../_virtual/_plugin-vue2_normalizer.cjs");
9
8
  const presence = require("../presence/presence.vue.cjs");
10
- const icon = require("../icon/icon.vue.cjs");
11
- const ICONS_LIST = storybook_utils.getIconNames();
12
9
  const _sfc_main = {
13
10
  name: "DtAvatar",
14
- components: { DtPresence: presence, DtIcon: icon },
11
+ components: { DtPresence: presence },
15
12
  inheritAttrs: false,
16
13
  props: {
17
14
  /**
@@ -99,13 +96,6 @@ const _sfc_main = {
99
96
  default: void 0,
100
97
  validator: (group) => avatar_constants.AVATAR_GROUP_VALIDATOR(group)
101
98
  },
102
- /**
103
- * The icon that overlays the avatar
104
- */
105
- overlayIcon: {
106
- type: String,
107
- default: ""
108
- },
109
99
  /**
110
100
  * The text that overlays the avatar
111
101
  */
@@ -136,14 +126,6 @@ const _sfc_main = {
136
126
  type: String,
137
127
  default: void 0
138
128
  },
139
- /**
140
- * Icon name to be displayed on the avatar
141
- */
142
- iconName: {
143
- type: String,
144
- default: void 0,
145
- validator: (name) => ICONS_LIST.includes(name)
146
- },
147
129
  /**
148
130
  * Icon size to be displayed on the avatar
149
131
  * @values 100, 200, 300, 400, 500, 600, 700, 800
@@ -198,8 +180,14 @@ const _sfc_main = {
198
180
  };
199
181
  },
200
182
  computed: {
201
- isNotIconType() {
202
- return !this.iconName;
183
+ isIconType() {
184
+ return this.$scopedSlots.icon && this.$scopedSlots.icon();
185
+ },
186
+ hasOverlayIcon() {
187
+ return !!this.$slots.overlayIcon;
188
+ },
189
+ iconDataQa() {
190
+ return "dt-avatar-icon";
203
191
  },
204
192
  avatarClasses() {
205
193
  return [
@@ -208,7 +196,7 @@ const _sfc_main = {
208
196
  this.avatarClass,
209
197
  {
210
198
  "d-avatar--group": this.showGroup,
211
- [`d-avatar--color-${this.getColor()}`]: this.isNotIconType,
199
+ [`d-avatar--color-${this.getColor()}`]: !this.isIconType,
212
200
  "d-avatar--clickable": this.clickable
213
201
  }
214
202
  ];
@@ -216,7 +204,8 @@ const _sfc_main = {
216
204
  overlayClasses() {
217
205
  return [
218
206
  "d-avatar__overlay",
219
- this.overlayClass
207
+ this.overlayClass,
208
+ { "d-avatar__overlay-icon": this.hasOverlayIcon }
220
209
  ];
221
210
  },
222
211
  showGroup() {
@@ -308,7 +297,7 @@ var _sfc_render = function render() {
308
297
  _vm.canvasClass,
309
298
  "d-avatar__canvas",
310
299
  { "d-avatar--image-loaded": _vm.imageLoadedSuccessfully }
311
- ] }, [_vm.showImage ? _c("img", { ref: "avatarImage", staticClass: "d-avatar__image", attrs: { "data-qa": "dt-avatar-image", "src": _vm.imageSrc, "alt": _vm.imageAlt } }) : _vm.iconName ? _c("dt-icon", { class: [_vm.iconClass, _vm.AVATAR_KIND_MODIFIERS.icon], attrs: { "name": _vm.iconName, "aria-label": _vm.iconAriaLabel, "size": _vm.iconSize || _vm.AVATAR_ICON_SIZES[_vm.size], "data-qa": "dt-avatar-icon" } }) : _c("span", { class: [_vm.AVATAR_KIND_MODIFIERS.initials] }, [_vm._v(" " + _vm._s(_vm.formattedInitials) + " ")])], 1), _vm.overlayIcon || _vm.overlayText ? _c("div", { class: _vm.overlayClasses }, [_vm.overlayIcon ? _c("dt-icon", { staticClass: "d-avatar__overlay-icon", attrs: { "name": _vm.overlayIcon } }) : _vm.overlayText ? _c("p", { staticClass: "d-avatar__overlay-text" }, [_vm._v(" " + _vm._s(_vm.overlayText) + " ")]) : _vm._e()], 1) : _vm._e(), _vm.showGroup ? _c("span", { staticClass: "d-avatar__count", attrs: { "data-qa": "dt-avatar-count" } }, [_vm._v(_vm._s(_vm.formattedGroup))]) : _vm._e(), _vm.presence && !_vm.showGroup ? _c("dt-presence", _vm._b({ class: [
300
+ ] }, [_vm.showImage ? _c("img", { ref: "avatarImage", staticClass: "d-avatar__image", attrs: { "data-qa": "dt-avatar-image", "src": _vm.imageSrc, "alt": _vm.imageAlt } }) : _vm.isIconType ? _c("div", { class: [_vm.iconClass, _vm.AVATAR_KIND_MODIFIERS.icon], attrs: { "aria-label": _vm.clickable ? _vm.iconAriaLabel : "", "data-qa": _vm.iconDataQa, "role": _vm.clickable ? "button" : "" } }, [_vm._t("icon", null, { "iconSize": _vm.iconSize || _vm.AVATAR_ICON_SIZES[_vm.size] })], 2) : _c("span", { class: [_vm.AVATAR_KIND_MODIFIERS.initials] }, [_vm._v(" " + _vm._s(_vm.formattedInitials) + " ")])]), _vm.hasOverlayIcon || _vm.overlayText ? _c("div", { class: _vm.overlayClasses }, [_vm.hasOverlayIcon ? _vm._t("overlayIcon") : _vm.overlayText ? _c("p", { staticClass: "d-avatar__overlay-text" }, [_vm._v(" " + _vm._s(_vm.overlayText) + " ")]) : _vm._e()], 2) : _vm._e(), _vm.showGroup ? _c("span", { staticClass: "d-avatar__count", attrs: { "data-qa": "dt-avatar-count" } }, [_vm._v(_vm._s(_vm.formattedGroup))]) : _vm._e(), _vm.presence && !_vm.showGroup ? _c("dt-presence", _vm._b({ class: [
312
301
  "d-avatar__presence",
313
302
  _vm.AVATAR_PRESENCE_SIZE_MODIFIERS[_vm.size]
314
303
  ], attrs: { "presence": _vm.presence, "data-qa": "dt-presence" } }, "dt-presence", _vm.presenceProps, false)) : _vm._e()], 1);
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.vue.cjs","sources":["../../../components/avatar/avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"clickable ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n data-qa=\"dt-avatar\"\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 <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 <dt-icon\n v-else-if=\"iconName\"\n :name=\"iconName\"\n :aria-label=\"iconAriaLabel\"\n :size=\"iconSize || AVATAR_ICON_SIZES[size]\"\n :class=\"[iconClass, AVATAR_KIND_MODIFIERS.icon]\"\n data-qa=\"dt-avatar-icon\"\n />\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\n </div>\n <div\n v-if=\"overlayIcon || overlayText\"\n :class=\"overlayClasses\"\n >\n <dt-icon\n v-if=\"overlayIcon\"\n class=\"d-avatar__overlay-icon\"\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 >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup\"\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, getRandomElement } from '@/common/utils';\nimport { DtPresence } from '../presence';\nimport { DtIcon } from '@/components/icon';\nimport {\n AVATAR_KIND_MODIFIERS,\n AVATAR_SIZE_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_RANDOM_COLORS,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_ICON_SIZES,\n} from './avatar_constants';\nimport { getIconNames } from '@/common/storybook_utils.js';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants.js';\nimport { extractInitialsFromName } from './utils';\n\nconst ICONS_LIST = getIconNames();\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, DtIcon },\n\n inheritAttrs: false,\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 * Pass in a seed to get the random color generation based on that string. For example if you pass in a\n * user ID as the string it will return the same randomly generated colors every time for that user.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * Set the avatar background to a specific color. If undefined will randomize the color which can be deterministic\n * if the seed prop is set.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (size) => Object.keys(AVATAR_SIZE_MODIFIERS).includes(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 * or 'active'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active\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 icon that overlays the avatar\n */\n overlayIcon: {\n type: String,\n default: '',\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 * Icon name to be displayed on the avatar\n */\n iconName: {\n type: String,\n default: undefined,\n validator: (name) => ICONS_LIST.includes(name),\n },\n\n /**\n * Icon size to be displayed on the avatar\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n iconSize: {\n type: String,\n default: '',\n validator: (size) => !size || Object.keys(ICON_SIZE_MODIFIERS).includes(size),\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 clickable,\n * emits a click event when clicked.\n */\n clickable: {\n type: Boolean,\n default: false,\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 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 AVATAR_ICON_SIZES,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n };\n },\n\n computed: {\n isNotIconType () {\n return !this.iconName;\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--color-${this.getColor()}`]: this.isNotIconType,\n 'd-avatar--clickable': this.clickable,\n },\n ];\n },\n\n overlayClasses () {\n return [\n 'd-avatar__overlay',\n this.overlayClass,\n ];\n },\n\n showGroup () {\n return AVATAR_GROUP_VALIDATOR(this.group);\n },\n\n formattedGroup () {\n return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n // TODO: Group only supports xs size for now. Remove this when we support other sizes.\n return this.group ? 'xs' : 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 },\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\n if (this.validatedSize === 'xs') {\n this.formattedInitials = '';\n } else if (this.validatedSize === 'sm') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n getColor () {\n return this.color ?? getRandomElement(AVATAR_RANDOM_COLORS, this.seed);\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.clickable) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n\n<style lang=\"less\">\n//TODO: Move these classes to dialtone and document.\n.d-avatar--image-loaded {\n background-color: transparent;\n background-image: unset;\n}\n\n.d-avatar__count {\n z-index: var(--zi-base);\n}\n\n.d-avatar__presence {\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay {\n background-color: var(--dt-color-surface-contrast-opaque);\n opacity: var(--dt-opacity-900);\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dt-size-radius-circle);\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay-icon {\n color: var(--dt-color-foreground-primary-inverted);\n width: 100%;\n}\n\n.d-avatar__overlay-text {\n color: var(--dt-color-foreground-primary-inverted);\n font-weight: var(--dt-font-weight-bold);\n font-size: var(--dt-font-size-200);\n width: 100%;\n text-align: center;\n}\n\n.d-avatar--clickable {\n --avatar-color-border: transparent;\n\n cursor: pointer;\n padding: 0;\n background-color: transparent;\n\n border-radius: var(--dt-size-radius-circle);\n border: var(--dt-size-border-100) solid var(--avatar-color-border);\n\n &:focus-visible {\n outline: none;\n box-shadow: var(--dt-shadow-focus);\n }\n\n &:hover {\n --avatar-color-border: var(--dt-color-border-default);\n }\n\n &:active {\n --avatar-color-border: var(--dt-color-border-moderate);\n\n transform: scale(0.98);\n }\n}\n</style>\n"],"names":["getIconNames","DtPresence","DtIcon","getUniqueString","AVATAR_SIZE_MODIFIERS","AVATAR_PRESENCE_STATES","AVATAR_GROUP_VALIDATOR","ICON_SIZE_MODIFIERS","AVATAR_KIND_MODIFIERS","AVATAR_PRESENCE_SIZE_MODIFIERS","AVATAR_ICON_SIZES","extractInitialsFromName","getRandomElement","AVATAR_RANDOM_COLORS"],"mappings":"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"}
1
+ {"version":3,"file":"avatar.vue.cjs","sources":["../../../components/avatar/avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"clickable ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n data-qa=\"dt-avatar\"\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 <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=\"clickable ? iconAriaLabel : ''\"\n :data-qa=\"iconDataQa\"\n :role=\"clickable ? 'button' : ''\"\n >\n <!-- @slot Slot for avatar icon. It will display if no imageSrc is provided -->\n <slot\n name=\"icon\"\n :icon-size=\"iconSize || AVATAR_ICON_SIZES[size]\"\n />\n </div>\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\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 >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup\"\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, getRandomElement } 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_RANDOM_COLORS,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_ICON_SIZES,\n} from './avatar_constants';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants.js';\nimport { extractInitialsFromName } from './utils';\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 inheritAttrs: false,\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 * Pass in a seed to get the random color generation based on that string. For example if you pass in a\n * user ID as the string it will return the same randomly generated colors every time for that user.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * Set the avatar background to a specific color. If undefined will randomize the color which can be deterministic\n * if the seed prop is set.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (size) => Object.keys(AVATAR_SIZE_MODIFIERS).includes(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 * or 'active'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active\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 * Icon size to be displayed on the avatar\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n iconSize: {\n type: String,\n default: '',\n validator: (size) => !size || Object.keys(ICON_SIZE_MODIFIERS).includes(size),\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 clickable,\n * emits a click event when clicked.\n */\n clickable: {\n type: Boolean,\n default: false,\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 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 AVATAR_ICON_SIZES,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n };\n },\n\n computed: {\n isIconType () {\n return this.$scopedSlots.icon && this.$scopedSlots.icon();\n },\n\n hasOverlayIcon () {\n return !!this.$slots.overlayIcon;\n },\n\n iconDataQa () {\n return 'dt-avatar-icon';\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--color-${this.getColor()}`]: !this.isIconType,\n 'd-avatar--clickable': this.clickable,\n },\n ];\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 return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n // TODO: Group only supports xs size for now. Remove this when we support other sizes.\n return this.group ? 'xs' : 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 },\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\n if (this.validatedSize === 'xs') {\n this.formattedInitials = '';\n } else if (this.validatedSize === 'sm') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n getColor () {\n return this.color ?? getRandomElement(AVATAR_RANDOM_COLORS, this.seed);\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.clickable) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n\n<style lang=\"less\">\n//TODO: Move these classes to dialtone and document.\n.d-avatar--image-loaded {\n background-color: transparent;\n background-image: unset;\n}\n\n.d-avatar__count {\n z-index: var(--zi-base);\n}\n\n.d-avatar__presence {\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay {\n background-color: var(--dt-color-surface-contrast-opaque);\n opacity: var(--dt-opacity-900);\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dt-size-radius-circle);\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay-icon {\n color: var(--dt-color-foreground-primary-inverted);\n width: 100%;\n}\n\n.d-avatar__overlay-text {\n color: var(--dt-color-foreground-primary-inverted);\n font-weight: var(--dt-font-weight-bold);\n font-size: var(--dt-font-size-200);\n width: 100%;\n text-align: center;\n}\n\n.d-avatar--clickable {\n --avatar-color-border: transparent;\n\n cursor: pointer;\n padding: 0;\n background-color: transparent;\n\n border-radius: var(--dt-size-radius-circle);\n border: var(--dt-size-border-100) solid var(--avatar-color-border);\n\n &:focus-visible {\n outline: none;\n box-shadow: var(--dt-shadow-focus);\n }\n\n &:hover {\n --avatar-color-border: var(--dt-color-border-default);\n }\n\n &:active {\n --avatar-color-border: var(--dt-color-border-moderate);\n\n transform: scale(0.98);\n }\n}\n</style>\n"],"names":["DtPresence","getUniqueString","AVATAR_SIZE_MODIFIERS","AVATAR_PRESENCE_STATES","AVATAR_GROUP_VALIDATOR","ICON_SIZE_MODIFIERS","AVATAR_KIND_MODIFIERS","AVATAR_PRESENCE_SIZE_MODIFIERS","AVATAR_ICON_SIZES","extractInitialsFromName","getRandomElement","AVATAR_RANDOM_COLORS"],"mappings":"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"}
@@ -1,16 +1,13 @@
1
1
  import { getUniqueString, getRandomElement } from "../../common/utils.js";
2
2
  import { AVATAR_SIZE_MODIFIERS, AVATAR_PRESENCE_STATES, AVATAR_GROUP_VALIDATOR, AVATAR_KIND_MODIFIERS, AVATAR_PRESENCE_SIZE_MODIFIERS, AVATAR_ICON_SIZES, AVATAR_RANDOM_COLORS } from "./avatar_constants.js";
3
- import { getIconNames } from "../../common/storybook_utils.js";
4
3
  import { ICON_SIZE_MODIFIERS } from "../icon/icon_constants.js";
5
4
  import { extractInitialsFromName } from "./utils.js";
6
5
  /* empty css */
7
6
  import normalizeComponent from "../../_virtual/_plugin-vue2_normalizer.js";
8
7
  import DtPresence from "../presence/presence.vue.js";
9
- import DtIcon from "../icon/icon.vue.js";
10
- const ICONS_LIST = getIconNames();
11
8
  const _sfc_main = {
12
9
  name: "DtAvatar",
13
- components: { DtPresence, DtIcon },
10
+ components: { DtPresence },
14
11
  inheritAttrs: false,
15
12
  props: {
16
13
  /**
@@ -98,13 +95,6 @@ const _sfc_main = {
98
95
  default: void 0,
99
96
  validator: (group) => AVATAR_GROUP_VALIDATOR(group)
100
97
  },
101
- /**
102
- * The icon that overlays the avatar
103
- */
104
- overlayIcon: {
105
- type: String,
106
- default: ""
107
- },
108
98
  /**
109
99
  * The text that overlays the avatar
110
100
  */
@@ -135,14 +125,6 @@ const _sfc_main = {
135
125
  type: String,
136
126
  default: void 0
137
127
  },
138
- /**
139
- * Icon name to be displayed on the avatar
140
- */
141
- iconName: {
142
- type: String,
143
- default: void 0,
144
- validator: (name) => ICONS_LIST.includes(name)
145
- },
146
128
  /**
147
129
  * Icon size to be displayed on the avatar
148
130
  * @values 100, 200, 300, 400, 500, 600, 700, 800
@@ -197,8 +179,14 @@ const _sfc_main = {
197
179
  };
198
180
  },
199
181
  computed: {
200
- isNotIconType() {
201
- return !this.iconName;
182
+ isIconType() {
183
+ return this.$scopedSlots.icon && this.$scopedSlots.icon();
184
+ },
185
+ hasOverlayIcon() {
186
+ return !!this.$slots.overlayIcon;
187
+ },
188
+ iconDataQa() {
189
+ return "dt-avatar-icon";
202
190
  },
203
191
  avatarClasses() {
204
192
  return [
@@ -207,7 +195,7 @@ const _sfc_main = {
207
195
  this.avatarClass,
208
196
  {
209
197
  "d-avatar--group": this.showGroup,
210
- [`d-avatar--color-${this.getColor()}`]: this.isNotIconType,
198
+ [`d-avatar--color-${this.getColor()}`]: !this.isIconType,
211
199
  "d-avatar--clickable": this.clickable
212
200
  }
213
201
  ];
@@ -215,7 +203,8 @@ const _sfc_main = {
215
203
  overlayClasses() {
216
204
  return [
217
205
  "d-avatar__overlay",
218
- this.overlayClass
206
+ this.overlayClass,
207
+ { "d-avatar__overlay-icon": this.hasOverlayIcon }
219
208
  ];
220
209
  },
221
210
  showGroup() {
@@ -307,7 +296,7 @@ var _sfc_render = function render() {
307
296
  _vm.canvasClass,
308
297
  "d-avatar__canvas",
309
298
  { "d-avatar--image-loaded": _vm.imageLoadedSuccessfully }
310
- ] }, [_vm.showImage ? _c("img", { ref: "avatarImage", staticClass: "d-avatar__image", attrs: { "data-qa": "dt-avatar-image", "src": _vm.imageSrc, "alt": _vm.imageAlt } }) : _vm.iconName ? _c("dt-icon", { class: [_vm.iconClass, _vm.AVATAR_KIND_MODIFIERS.icon], attrs: { "name": _vm.iconName, "aria-label": _vm.iconAriaLabel, "size": _vm.iconSize || _vm.AVATAR_ICON_SIZES[_vm.size], "data-qa": "dt-avatar-icon" } }) : _c("span", { class: [_vm.AVATAR_KIND_MODIFIERS.initials] }, [_vm._v(" " + _vm._s(_vm.formattedInitials) + " ")])], 1), _vm.overlayIcon || _vm.overlayText ? _c("div", { class: _vm.overlayClasses }, [_vm.overlayIcon ? _c("dt-icon", { staticClass: "d-avatar__overlay-icon", attrs: { "name": _vm.overlayIcon } }) : _vm.overlayText ? _c("p", { staticClass: "d-avatar__overlay-text" }, [_vm._v(" " + _vm._s(_vm.overlayText) + " ")]) : _vm._e()], 1) : _vm._e(), _vm.showGroup ? _c("span", { staticClass: "d-avatar__count", attrs: { "data-qa": "dt-avatar-count" } }, [_vm._v(_vm._s(_vm.formattedGroup))]) : _vm._e(), _vm.presence && !_vm.showGroup ? _c("dt-presence", _vm._b({ class: [
299
+ ] }, [_vm.showImage ? _c("img", { ref: "avatarImage", staticClass: "d-avatar__image", attrs: { "data-qa": "dt-avatar-image", "src": _vm.imageSrc, "alt": _vm.imageAlt } }) : _vm.isIconType ? _c("div", { class: [_vm.iconClass, _vm.AVATAR_KIND_MODIFIERS.icon], attrs: { "aria-label": _vm.clickable ? _vm.iconAriaLabel : "", "data-qa": _vm.iconDataQa, "role": _vm.clickable ? "button" : "" } }, [_vm._t("icon", null, { "iconSize": _vm.iconSize || _vm.AVATAR_ICON_SIZES[_vm.size] })], 2) : _c("span", { class: [_vm.AVATAR_KIND_MODIFIERS.initials] }, [_vm._v(" " + _vm._s(_vm.formattedInitials) + " ")])]), _vm.hasOverlayIcon || _vm.overlayText ? _c("div", { class: _vm.overlayClasses }, [_vm.hasOverlayIcon ? _vm._t("overlayIcon") : _vm.overlayText ? _c("p", { staticClass: "d-avatar__overlay-text" }, [_vm._v(" " + _vm._s(_vm.overlayText) + " ")]) : _vm._e()], 2) : _vm._e(), _vm.showGroup ? _c("span", { staticClass: "d-avatar__count", attrs: { "data-qa": "dt-avatar-count" } }, [_vm._v(_vm._s(_vm.formattedGroup))]) : _vm._e(), _vm.presence && !_vm.showGroup ? _c("dt-presence", _vm._b({ class: [
311
300
  "d-avatar__presence",
312
301
  _vm.AVATAR_PRESENCE_SIZE_MODIFIERS[_vm.size]
313
302
  ], attrs: { "presence": _vm.presence, "data-qa": "dt-presence" } }, "dt-presence", _vm.presenceProps, false)) : _vm._e()], 1);
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.vue.js","sources":["../../../components/avatar/avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"clickable ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n data-qa=\"dt-avatar\"\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 <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 <dt-icon\n v-else-if=\"iconName\"\n :name=\"iconName\"\n :aria-label=\"iconAriaLabel\"\n :size=\"iconSize || AVATAR_ICON_SIZES[size]\"\n :class=\"[iconClass, AVATAR_KIND_MODIFIERS.icon]\"\n data-qa=\"dt-avatar-icon\"\n />\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\n </div>\n <div\n v-if=\"overlayIcon || overlayText\"\n :class=\"overlayClasses\"\n >\n <dt-icon\n v-if=\"overlayIcon\"\n class=\"d-avatar__overlay-icon\"\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 >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup\"\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, getRandomElement } from '@/common/utils';\nimport { DtPresence } from '../presence';\nimport { DtIcon } from '@/components/icon';\nimport {\n AVATAR_KIND_MODIFIERS,\n AVATAR_SIZE_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_RANDOM_COLORS,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_ICON_SIZES,\n} from './avatar_constants';\nimport { getIconNames } from '@/common/storybook_utils.js';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants.js';\nimport { extractInitialsFromName } from './utils';\n\nconst ICONS_LIST = getIconNames();\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, DtIcon },\n\n inheritAttrs: false,\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 * Pass in a seed to get the random color generation based on that string. For example if you pass in a\n * user ID as the string it will return the same randomly generated colors every time for that user.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * Set the avatar background to a specific color. If undefined will randomize the color which can be deterministic\n * if the seed prop is set.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (size) => Object.keys(AVATAR_SIZE_MODIFIERS).includes(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 * or 'active'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active\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 icon that overlays the avatar\n */\n overlayIcon: {\n type: String,\n default: '',\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 * Icon name to be displayed on the avatar\n */\n iconName: {\n type: String,\n default: undefined,\n validator: (name) => ICONS_LIST.includes(name),\n },\n\n /**\n * Icon size to be displayed on the avatar\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n iconSize: {\n type: String,\n default: '',\n validator: (size) => !size || Object.keys(ICON_SIZE_MODIFIERS).includes(size),\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 clickable,\n * emits a click event when clicked.\n */\n clickable: {\n type: Boolean,\n default: false,\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 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 AVATAR_ICON_SIZES,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n };\n },\n\n computed: {\n isNotIconType () {\n return !this.iconName;\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--color-${this.getColor()}`]: this.isNotIconType,\n 'd-avatar--clickable': this.clickable,\n },\n ];\n },\n\n overlayClasses () {\n return [\n 'd-avatar__overlay',\n this.overlayClass,\n ];\n },\n\n showGroup () {\n return AVATAR_GROUP_VALIDATOR(this.group);\n },\n\n formattedGroup () {\n return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n // TODO: Group only supports xs size for now. Remove this when we support other sizes.\n return this.group ? 'xs' : 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 },\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\n if (this.validatedSize === 'xs') {\n this.formattedInitials = '';\n } else if (this.validatedSize === 'sm') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n getColor () {\n return this.color ?? getRandomElement(AVATAR_RANDOM_COLORS, this.seed);\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.clickable) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n\n<style lang=\"less\">\n//TODO: Move these classes to dialtone and document.\n.d-avatar--image-loaded {\n background-color: transparent;\n background-image: unset;\n}\n\n.d-avatar__count {\n z-index: var(--zi-base);\n}\n\n.d-avatar__presence {\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay {\n background-color: var(--dt-color-surface-contrast-opaque);\n opacity: var(--dt-opacity-900);\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dt-size-radius-circle);\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay-icon {\n color: var(--dt-color-foreground-primary-inverted);\n width: 100%;\n}\n\n.d-avatar__overlay-text {\n color: var(--dt-color-foreground-primary-inverted);\n font-weight: var(--dt-font-weight-bold);\n font-size: var(--dt-font-size-200);\n width: 100%;\n text-align: center;\n}\n\n.d-avatar--clickable {\n --avatar-color-border: transparent;\n\n cursor: pointer;\n padding: 0;\n background-color: transparent;\n\n border-radius: var(--dt-size-radius-circle);\n border: var(--dt-size-border-100) solid var(--avatar-color-border);\n\n &:focus-visible {\n outline: none;\n box-shadow: var(--dt-shadow-focus);\n }\n\n &:hover {\n --avatar-color-border: var(--dt-color-border-default);\n }\n\n &:active {\n --avatar-color-border: var(--dt-color-border-moderate);\n\n transform: scale(0.98);\n }\n}\n</style>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avatar.vue.js","sources":["../../../components/avatar/avatar.vue"],"sourcesContent":["<template>\n <component\n :is=\"clickable ? 'button' : 'div'\"\n :id=\"id\"\n :class=\"avatarClasses\"\n data-qa=\"dt-avatar\"\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 <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=\"clickable ? iconAriaLabel : ''\"\n :data-qa=\"iconDataQa\"\n :role=\"clickable ? 'button' : ''\"\n >\n <!-- @slot Slot for avatar icon. It will display if no imageSrc is provided -->\n <slot\n name=\"icon\"\n :icon-size=\"iconSize || AVATAR_ICON_SIZES[size]\"\n />\n </div>\n <span\n v-else\n :class=\"[AVATAR_KIND_MODIFIERS.initials]\"\n >\n {{ formattedInitials }}\n </span>\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 >{{ formattedGroup }}</span>\n <dt-presence\n v-if=\"presence && !showGroup\"\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, getRandomElement } 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_RANDOM_COLORS,\n AVATAR_GROUP_VALIDATOR,\n AVATAR_ICON_SIZES,\n} from './avatar_constants';\nimport { ICON_SIZE_MODIFIERS } from '@/components/icon/icon_constants.js';\nimport { extractInitialsFromName } from './utils';\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 inheritAttrs: false,\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 * Pass in a seed to get the random color generation based on that string. For example if you pass in a\n * user ID as the string it will return the same randomly generated colors every time for that user.\n */\n seed: {\n type: String,\n default: undefined,\n },\n\n /**\n * Set the avatar background to a specific color. If undefined will randomize the color which can be deterministic\n * if the seed prop is set.\n */\n color: {\n type: String,\n default: undefined,\n },\n\n /**\n * The size of the avatar\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (size) => Object.keys(AVATAR_SIZE_MODIFIERS).includes(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 * or 'active'. By default, it's null and nothing is shown.\n * @values null, busy, away, offline, active\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 * Icon size to be displayed on the avatar\n * @values 100, 200, 300, 400, 500, 600, 700, 800\n */\n iconSize: {\n type: String,\n default: '',\n validator: (size) => !size || Object.keys(ICON_SIZE_MODIFIERS).includes(size),\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 clickable,\n * emits a click event when clicked.\n */\n clickable: {\n type: Boolean,\n default: false,\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 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 AVATAR_ICON_SIZES,\n imageLoadedSuccessfully: null,\n formattedInitials: '',\n initializing: false,\n };\n },\n\n computed: {\n isIconType () {\n return this.$scopedSlots.icon && this.$scopedSlots.icon();\n },\n\n hasOverlayIcon () {\n return !!this.$slots.overlayIcon;\n },\n\n iconDataQa () {\n return 'dt-avatar-icon';\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--color-${this.getColor()}`]: !this.isIconType,\n 'd-avatar--clickable': this.clickable,\n },\n ];\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 return this.group > 99 ? '99+' : this.group;\n },\n\n validatedSize () {\n // TODO: Group only supports xs size for now. Remove this when we support other sizes.\n return this.group ? 'xs' : 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 },\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\n if (this.validatedSize === 'xs') {\n this.formattedInitials = '';\n } else if (this.validatedSize === 'sm') {\n this.formattedInitials = initials[0];\n } else {\n this.formattedInitials = initials;\n }\n },\n\n getColor () {\n return this.color ?? getRandomElement(AVATAR_RANDOM_COLORS, this.seed);\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.clickable) return;\n this.$emit('click', e);\n },\n },\n};\n</script>\n\n<style lang=\"less\">\n//TODO: Move these classes to dialtone and document.\n.d-avatar--image-loaded {\n background-color: transparent;\n background-image: unset;\n}\n\n.d-avatar__count {\n z-index: var(--zi-base);\n}\n\n.d-avatar__presence {\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay {\n background-color: var(--dt-color-surface-contrast-opaque);\n opacity: var(--dt-opacity-900);\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dt-size-radius-circle);\n z-index: var(--zi-base);\n}\n\n.d-avatar__overlay-icon {\n color: var(--dt-color-foreground-primary-inverted);\n width: 100%;\n}\n\n.d-avatar__overlay-text {\n color: var(--dt-color-foreground-primary-inverted);\n font-weight: var(--dt-font-weight-bold);\n font-size: var(--dt-font-size-200);\n width: 100%;\n text-align: center;\n}\n\n.d-avatar--clickable {\n --avatar-color-border: transparent;\n\n cursor: pointer;\n padding: 0;\n background-color: transparent;\n\n border-radius: var(--dt-size-radius-circle);\n border: var(--dt-size-border-100) solid var(--avatar-color-border);\n\n &:focus-visible {\n outline: none;\n box-shadow: var(--dt-shadow-focus);\n }\n\n &:hover {\n --avatar-color-border: var(--dt-color-border-default);\n }\n\n &:active {\n --avatar-color-border: var(--dt-color-border-moderate);\n\n transform: scale(0.98);\n }\n}\n</style>\n"],"names":[],"mappings":"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"}
@@ -49,6 +49,6 @@ var __component__ = /* @__PURE__ */ _pluginVue2_normalizer(
49
49
  null,
50
50
  null
51
51
  );
52
- const DtIcon = __component__.exports;
53
- module.exports = DtIcon;
52
+ const icon = __component__.exports;
53
+ module.exports = icon;
54
54
  //# sourceMappingURL=icon.vue.cjs.map
@@ -48,8 +48,8 @@ var __component__ = /* @__PURE__ */ normalizeComponent(
48
48
  null,
49
49
  null
50
50
  );
51
- const DtIcon = __component__.exports;
51
+ const icon = __component__.exports;
52
52
  export {
53
- DtIcon as default
53
+ icon as default
54
54
  };
55
55
  //# sourceMappingURL=icon.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbar.cjs","sources":["../../../directives/scrollbar/scrollbar.js"],"sourcesContent":["import { OverlayScrollbars, ClickScrollPlugin } from 'overlayscrollbars';\nimport 'overlayscrollbars/overlayscrollbars.css';\n\nexport const DtScrollbarDirective = {\n name: 'dt-scrollbar-directive',\n install (Vue) {\n OverlayScrollbars.plugin(ClickScrollPlugin);\n Vue.directive('dt-scrollbar', {\n inserted (el, binding) {\n OverlayScrollbars({\n target: el,\n elements: {\n viewport: el.children[0],\n },\n }, {\n scrollbars: {\n autoHide: `${binding.arg || 'leave'}`,\n clickScroll: true,\n autoHideDelay: `${!binding.arg || binding.arg === 'leave' ? 0 : 1300}`,\n },\n });\n el.setAttribute('data-overlayscrollbars-initialize', true);\n el.classList.add('d-scrollbar');\n },\n });\n },\n};\n\nexport default DtScrollbarDirective;\n"],"names":["OverlayScrollbars","ClickScrollPlugin"],"mappings":";;;AAGY,MAAC,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,QAAS,KAAK;AACZA,wCAAkB,OAAOC,kBAAAA,iBAAiB;AAC1C,QAAI,UAAU,gBAAgB;AAAA,MAC5B,SAAU,IAAI,SAAS;AACrBD,4CAAkB;AAAA,UAChB,QAAQ;AAAA,UACR,UAAU;AAAA,YACR,UAAU,GAAG,SAAS,CAAC;AAAA,UACxB;AAAA,QACX,GAAW;AAAA,UACD,YAAY;AAAA,YACV,UAAU,GAAG,QAAQ,OAAO,OAAO;AAAA,YACnC,aAAa;AAAA,YACb,eAAe,GAAG,CAAC,QAAQ,OAAO,QAAQ,QAAQ,UAAU,IAAI,IAAI;AAAA,UACrE;AAAA,QACX,CAAS;AACD,WAAG,aAAa,qCAAqC,IAAI;AACzD,WAAG,UAAU,IAAI,aAAa;AAAA,MAC/B;AAAA,IACP,CAAK;AAAA,EACF;AACH;AAEA,MAAA,yBAAe;;;"}
1
+ {"version":3,"file":"scrollbar.cjs","sources":["../../../directives/scrollbar/scrollbar.js"],"sourcesContent":["import { OverlayScrollbars, ClickScrollPlugin } from 'overlayscrollbars';\n\nexport const DtScrollbarDirective = {\n name: 'dt-scrollbar-directive',\n install (Vue) {\n OverlayScrollbars.plugin(ClickScrollPlugin);\n Vue.directive('dt-scrollbar', {\n inserted (el, binding) {\n OverlayScrollbars({\n target: el,\n elements: {\n viewport: el.children[0],\n },\n }, {\n scrollbars: {\n autoHide: `${binding.arg || 'leave'}`,\n clickScroll: true,\n autoHideDelay: `${!binding.arg || binding.arg === 'leave' ? 0 : 1300}`,\n },\n });\n el.setAttribute('data-overlayscrollbars-initialize', true);\n el.classList.add('d-scrollbar');\n },\n });\n },\n};\n\nexport default DtScrollbarDirective;\n"],"names":["OverlayScrollbars","ClickScrollPlugin"],"mappings":";;;AAEY,MAAC,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,QAAS,KAAK;AACZA,wCAAkB,OAAOC,kBAAAA,iBAAiB;AAC1C,QAAI,UAAU,gBAAgB;AAAA,MAC5B,SAAU,IAAI,SAAS;AACrBD,4CAAkB;AAAA,UAChB,QAAQ;AAAA,UACR,UAAU;AAAA,YACR,UAAU,GAAG,SAAS,CAAC;AAAA,UACxB;AAAA,QACX,GAAW;AAAA,UACD,YAAY;AAAA,YACV,UAAU,GAAG,QAAQ,OAAO,OAAO;AAAA,YACnC,aAAa;AAAA,YACb,eAAe,GAAG,CAAC,QAAQ,OAAO,QAAQ,QAAQ,UAAU,IAAI,IAAI;AAAA,UACrE;AAAA,QACX,CAAS;AACD,WAAG,aAAa,qCAAqC,IAAI;AACzD,WAAG,UAAU,IAAI,aAAa;AAAA,MAC/B;AAAA,IACP,CAAK;AAAA,EACF;AACH;AAEA,MAAA,yBAAe;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbar.js","sources":["../../../directives/scrollbar/scrollbar.js"],"sourcesContent":["import { OverlayScrollbars, ClickScrollPlugin } from 'overlayscrollbars';\nimport 'overlayscrollbars/overlayscrollbars.css';\n\nexport const DtScrollbarDirective = {\n name: 'dt-scrollbar-directive',\n install (Vue) {\n OverlayScrollbars.plugin(ClickScrollPlugin);\n Vue.directive('dt-scrollbar', {\n inserted (el, binding) {\n OverlayScrollbars({\n target: el,\n elements: {\n viewport: el.children[0],\n },\n }, {\n scrollbars: {\n autoHide: `${binding.arg || 'leave'}`,\n clickScroll: true,\n autoHideDelay: `${!binding.arg || binding.arg === 'leave' ? 0 : 1300}`,\n },\n });\n el.setAttribute('data-overlayscrollbars-initialize', true);\n el.classList.add('d-scrollbar');\n },\n });\n },\n};\n\nexport default DtScrollbarDirective;\n"],"names":[],"mappings":";AAGY,MAAC,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,QAAS,KAAK;AACZ,sBAAkB,OAAO,iBAAiB;AAC1C,QAAI,UAAU,gBAAgB;AAAA,MAC5B,SAAU,IAAI,SAAS;AACrB,0BAAkB;AAAA,UAChB,QAAQ;AAAA,UACR,UAAU;AAAA,YACR,UAAU,GAAG,SAAS,CAAC;AAAA,UACxB;AAAA,QACX,GAAW;AAAA,UACD,YAAY;AAAA,YACV,UAAU,GAAG,QAAQ,OAAO,OAAO;AAAA,YACnC,aAAa;AAAA,YACb,eAAe,GAAG,CAAC,QAAQ,OAAO,QAAQ,QAAQ,UAAU,IAAI,IAAI;AAAA,UACrE;AAAA,QACX,CAAS;AACD,WAAG,aAAa,qCAAqC,IAAI;AACzD,WAAG,UAAU,IAAI,aAAa;AAAA,MAC/B;AAAA,IACP,CAAK;AAAA,EACF;AACH;AAEA,MAAA,yBAAe;"}
1
+ {"version":3,"file":"scrollbar.js","sources":["../../../directives/scrollbar/scrollbar.js"],"sourcesContent":["import { OverlayScrollbars, ClickScrollPlugin } from 'overlayscrollbars';\n\nexport const DtScrollbarDirective = {\n name: 'dt-scrollbar-directive',\n install (Vue) {\n OverlayScrollbars.plugin(ClickScrollPlugin);\n Vue.directive('dt-scrollbar', {\n inserted (el, binding) {\n OverlayScrollbars({\n target: el,\n elements: {\n viewport: el.children[0],\n },\n }, {\n scrollbars: {\n autoHide: `${binding.arg || 'leave'}`,\n clickScroll: true,\n autoHideDelay: `${!binding.arg || binding.arg === 'leave' ? 0 : 1300}`,\n },\n });\n el.setAttribute('data-overlayscrollbars-initialize', true);\n el.classList.add('d-scrollbar');\n },\n });\n },\n};\n\nexport default DtScrollbarDirective;\n"],"names":[],"mappings":";AAEY,MAAC,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,QAAS,KAAK;AACZ,sBAAkB,OAAO,iBAAiB;AAC1C,QAAI,UAAU,gBAAgB;AAAA,MAC5B,SAAU,IAAI,SAAS;AACrB,0BAAkB;AAAA,UAChB,QAAQ;AAAA,UACR,UAAU;AAAA,YACR,UAAU,GAAG,SAAS,CAAC;AAAA,UACxB;AAAA,QACX,GAAW;AAAA,UACD,YAAY;AAAA,YACV,UAAU,GAAG,QAAQ,OAAO,OAAO;AAAA,YACnC,aAAa;AAAA,YACb,eAAe,GAAG,CAAC,QAAQ,OAAO,QAAQ,QAAQ,UAAU,IAAI,IAAI;AAAA,UACrE;AAAA,QACX,CAAS;AACD,WAAG,aAAa,qCAAqC,IAAI;AACzD,WAAG,UAAU,IAAI,aAAa;AAAA,MAC/B;AAAA,IACP,CAAK;AAAA,EACF;AACH;AAEA,MAAA,yBAAe;"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  const feed_item_row_constants = require("./feed_item_row_constants.cjs");
3
3
  const modal = require("../../../common/mixins/modal.cjs");
4
+ const vue2 = require("@dialpad/dialtone-icons/vue2");
4
5
  ;/* empty css */
5
6
  const _pluginVue2_normalizer = require("../../../_virtual/_plugin-vue2_normalizer.cjs");
6
7
  const avatar = require("../../../components/avatar/avatar.vue.cjs");
@@ -13,7 +14,8 @@ const _sfc_main = {
13
14
  DtAvatar: avatar,
14
15
  DtLazyShow: lazy_show,
15
16
  DtListItem: list_item,
16
- DtBadge: badge
17
+ DtBadge: badge,
18
+ DtIconUser: vue2.DtIconUser
17
19
  },
18
20
  mixins: [modal],
19
21
  inheritAttrs: false,
@@ -140,9 +142,6 @@ const _sfc_main = {
140
142
  }
141
143
  };
142
144
  },
143
- iconName() {
144
- return this.noInitials ? "user" : null;
145
- },
146
145
  listItemClasses() {
147
146
  return [
148
147
  "dt-feed-item-row",
@@ -183,7 +182,9 @@ var _sfc_render = function render() {
183
182
  var _vm = this, _c = _vm._self._c;
184
183
  return _c("dt-list-item", _vm._g(_vm._b({ ref: "FeedItemRef", class: ["dt-feed-item-row", _vm.listItemClasses], attrs: { "navigation-type": "none", "data-qa": "dt-feed-item-row" }, scopedSlots: _vm._u([{ key: "left", fn: function() {
185
184
  return [_vm.showHeader ? _c("div", { staticClass: "dt-feed-item-row__avatar-container" }, [_vm._t("avatar", function() {
186
- return [_c("dt-avatar", { attrs: { "full-name": _vm.displayName, "image-src": _vm.avatarImageUrl, "image-alt": "", "icon-name": _vm.iconName, "seed": _vm.avatarSeed } })];
185
+ return [_c("dt-avatar", { attrs: { "full-name": _vm.displayName, "image-src": _vm.avatarImageUrl, "image-alt": "", "seed": _vm.avatarSeed }, scopedSlots: _vm._u([_vm.noInitials ? { key: "icon", fn: function({ iconSize }) {
186
+ return [_c("dt-icon-user", { attrs: { "size": iconSize } })];
187
+ } } : null], null, true) })];
187
188
  })], 2) : _vm._e(), !_vm.showHeader ? _c("span", { directives: [{ name: "show", rawName: "v-show", value: _vm.isActive, expression: "isActive" }], staticClass: "dt-feed-item-row__left-time", attrs: { "data-qa": "dt-feed-item-row--left-time" } }, [_vm._v(" " + _vm._s(_vm.shortTime) + " ")]) : _vm._e()];
188
189
  }, proxy: true }, { key: "bottom", fn: function() {
189
190
  return [_vm.$slots.reactions ? _c("div", { staticClass: "dt-feed-item-row__reactions", attrs: { "data-qa": "dt-feed-item-row--reactions" } }, [_vm._t("reactions")], 2) : _vm._e(), _vm.$slots.threading ? _c("div", { staticClass: "dt-feed-item-row__threading" }, [_vm._t("threading")], 2) : _vm._e()];
@@ -198,7 +199,7 @@ var __component__ = /* @__PURE__ */ _pluginVue2_normalizer(
198
199
  _sfc_staticRenderFns,
199
200
  false,
200
201
  null,
201
- "047dcbe5"
202
+ "90e0798e"
202
203
  );
203
204
  const feed_item_row = __component__.exports;
204
205
  module.exports = feed_item_row;
@@ -1 +1 @@
1
- {"version":3,"file":"feed_item_row.vue.cjs","sources":["../../../../recipes/conversation_view/feed_item_row/feed_item_row.vue"],"sourcesContent":["<template>\n <dt-list-item\n ref=\"FeedItemRef\"\n navigation-type=\"none\"\n v-bind=\"$attrs\"\n :class=\"['dt-feed-item-row', listItemClasses]\"\n data-qa=\"dt-feed-item-row\"\n v-on=\"feedListeners\"\n >\n <!-- Avatar or time -->\n <template #left>\n <div\n v-if=\"showHeader\"\n class=\"dt-feed-item-row__avatar-container\"\n >\n <!-- @slot Slot to contain the avatar, overrides avatar props. -->\n <slot\n name=\"avatar\"\n >\n <dt-avatar\n :full-name=\"displayName\"\n :image-src=\"avatarImageUrl\"\n image-alt=\"\"\n :icon-name=\"iconName\"\n :seed=\"avatarSeed\"\n />\n </slot>\n </div>\n <!-- show time instead of avatar when headers not present -->\n <span\n v-if=\"!showHeader\"\n v-show=\"isActive\"\n class=\"dt-feed-item-row__left-time\"\n data-qa=\"dt-feed-item-row--left-time\"\n >\n {{ shortTime }}\n </span>\n </template>\n\n <article class=\"dt-feed-item-row__content\">\n <!-- Feed Item -->\n <div\n v-if=\"showHeader\"\n data-qa=\"dt-feed-item-row--header\"\n class=\"dt-feed-item-row__header\"\n >\n <p class=\"dt-feed-item-row__header__name\">\n {{ displayName }}\n </p>\n <time\n class=\"dt-feed-item-row__header__time\"\n >\n {{ time }}\n </time>\n <dt-badge\n v-if=\"labelText\"\n :text=\"labelText\"\n />\n </div>\n <!-- @slot Default content slot for feed item row -->\n <span\n data-qa=\"dt-feed-item-row--content\"\n >\n <slot />\n </span>\n <div\n v-if=\"$slots.attachment\"\n data-qa=\"dt-feed-item-row--attachment\"\n class=\"dt-feed-item-row__attachment\"\n >\n <slot name=\"attachment\" />\n </div>\n </article>\n\n <template #bottom>\n <div\n v-if=\"$slots.reactions\"\n class=\"dt-feed-item-row__reactions\"\n data-qa=\"dt-feed-item-row--reactions\"\n >\n <!-- @slot Slot for reactions row component -->\n <slot name=\"reactions\" />\n </div>\n <div\n v-if=\"$slots.threading\"\n class=\"dt-feed-item-row__threading\"\n >\n <!-- @slot Slot for threading row component -->\n <slot name=\"threading\" />\n </div>\n </template>\n\n <!-- Action menu -->\n <template #right>\n <div\n v-show=\"isActive\"\n data-qa=\"dt-feed-item-row--menu\"\n class=\"dt-feed-item-row__menu\"\n >\n <dt-lazy-show\n :appear=\"true\"\n transition=\"fade\"\n :show=\"isActive\"\n >\n <!-- @slot Slot for actions hover menu component -->\n <slot name=\"menu\" />\n </dt-lazy-show>\n </div>\n </template>\n </dt-list-item>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport { DEFAULT_FEED_ROW_STATE, FEED_ROW_STATE_BACKGROUND_COLOR } from './feed_item_row_constants.js';\nimport { DtAvatar } from '@/components/avatar';\nimport { DtLazyShow } from '@/components/lazy_show';\nimport { DtListItem } from '@/components/list_item';\nimport { DtBadge } from '@/components/badge';\nimport Modal from '@/common/mixins/modal';\n\nexport default {\n name: 'DtRecipeFeedItemRow',\n\n components: {\n DtAvatar,\n DtLazyShow,\n DtListItem,\n DtBadge,\n },\n\n mixins: [Modal],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Avatar seed, set this to the user's ID to get the same avatar background gradient each time it is displayed.\n */\n avatarSeed: {\n type: String,\n default: null,\n },\n\n /**\n * Show avatar, show header text or dont show left time and vice versa\n */\n showHeader: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Optional avatar image url.\n * If not provided it will use extracted initials from displayName.\n */\n avatarImageUrl: {\n type: String,\n default: '',\n },\n\n /**\n * The display name of the sender\n */\n displayName: {\n type: String,\n default: '',\n },\n\n /**\n * Initials will never be shown. Instead it will show a \"User\" icon.\n */\n noInitials: {\n type: Boolean,\n default: false,\n },\n\n /**\n * time string displayed as is.\n * Shown on the header when showHeader is true\n */\n time: {\n type: String,\n default: '',\n },\n\n /**\n * short time string without AM/PM displayed as is.\n * Shown on the left of feed item when showHeader is false and isActive is true\n */\n shortTime: {\n type: String,\n default: '',\n },\n\n /**\n * A label displayed next to the displayName. Will not show if empty.\n */\n labelText: {\n type: String,\n default: '',\n },\n\n /**\n * displays a darkened background on the row.\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * state for the feed item row. Can be normal, searched & error\n */\n state: {\n type: String,\n default: DEFAULT_FEED_ROW_STATE,\n validator: state => Object.keys(FEED_ROW_STATE_BACKGROUND_COLOR).includes(state),\n },\n },\n\n emits: [\n /**\n * Fires when hovered over feed row\n *\n * @event hover\n * @type {Boolean}\n */\n 'hover',\n\n /**\n * Fires when focused over feed row\n *\n * @event focus\n * @type {Boolean}\n */\n 'focus',\n\n /**\n * Key down event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n ],\n\n data () {\n return {\n transitionActive: false,\n };\n },\n\n computed: {\n feedListeners () {\n return {\n ...this.$listeners,\n mouseenter: () => this.setHover(true),\n mouseleave: () => this.setHover(false),\n focusin: () => this.setFocus(true),\n focusout: () => this.setFocus(false),\n transitionend: () => this.transitionComplete(),\n keydown: event => {\n switch (event.code) {\n case 'Tab':\n this.trapFocus(event);\n break;\n }\n this.$emit('keydown', event);\n },\n };\n },\n\n iconName () {\n return this.noInitials ? 'user' : null;\n },\n\n listItemClasses () {\n return [\n 'dt-feed-item-row',\n { 'dt-feed-item-row--active': this.isActive && this.state === DEFAULT_FEED_ROW_STATE },\n { 'dt-feed-item-row--state-transition': this.transitionActive },\n FEED_ROW_STATE_BACKGROUND_COLOR[this.state],\n\n ];\n },\n },\n\n watch: {\n state: {\n immediate: true,\n handler: function (newState, oldState) {\n if (newState !== DEFAULT_FEED_ROW_STATE) {\n this.transitionActive = true;\n }\n },\n },\n },\n\n methods: {\n transitionComplete () {\n if (this.state === DEFAULT_FEED_ROW_STATE) {\n this.transitionActive = false;\n }\n },\n\n trapFocus (e) {\n this.focusTrappedTabPress(e);\n },\n\n setFocus (bool) {\n this.$emit('focus', bool);\n },\n\n setHover (bool) {\n this.$emit('hover', bool);\n },\n },\n};\n</script>\n\n<style lang=\"less\" scoped>\n.dt-feed-item-row {\n\n width: var(--dt-size-100-percent);\n box-sizing: border-box;\n position: relative;\n padding: var(--dt-space-300) var(--dt-space-500);\n\n &:focus-visible {\n box-shadow: var(--dt-shadow-focus-inset);\n }\n\n &--state-searched {\n background-color: var(--dt-color-surface-warning-subtle);\n }\n\n &--state-error {\n background-color: var(--dt-color-surface-critical-subtle);\n }\n\n &--active {\n background-color: var(--dt-color-surface-secondary-opaque);\n }\n\n &--state-transition {\n transition-duration: 2s;\n transition-delay: 0s;\n transition-timing-function: var(--ttf-in-out);\n transition-property: background-color;\n }\n\n &__avatar-container {\n padding-top: var(--dt-space-300);\n padding-bottom: var(--dt-space-300);\n }\n\n &__content {\n padding-left: var(--dt-space-300);\n }\n\n &__attachment {\n padding-top: var(--dt-space-200);\n padding-bottom: var(--dt-space-300);\n\n &:deep(.dt-feed-item-row__image) {\n border: var(--dt-color-border-subtle) solid var(--dt-size-border-100);\n border-radius: var(--dt-size-radius-400);\n display: block;\n max-width: 30rem;\n max-height: 30rem;\n min-width: 5.6rem;\n min-height: 5.6rem;\n }\n\n &:deep(.dt-feed-item-row__video) {\n display: block;\n height: 25.0rem;\n }\n }\n\n &__header {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: var(--dt-space-300);\n font-size: var(--dt-font-size-200);\n line-height: var(--dt-font-line-height-300);\n\n &__name {\n font-weight: var(--dt-font-weight-bold);\n }\n\n &__time {\n font-size: var(--dt-font-size-100);\n color: var(--dt-color-foreground-tertiary);\n flex-shrink: 0;\n }\n }\n\n &__reactions {\n display: flex;\n flex-wrap: wrap;\n padding-top: var(--dt-space-200);\n padding-bottom: var(--dt-space-200);\n padding-left: var(--dt-space-300);\n }\n\n &__threading {\n padding-top: var(--dt-space-200);\n padding-bottom: var(--dt-space-200);\n }\n\n &__left-time {\n color: var(--dt-color-foreground-tertiary);\n font-size: var(--dt-font-size-100);\n font-weight: var(--dt-font-weight-normal);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n &__menu {\n position: absolute;\n top: var(--dt-space-550-negative);\n right: var(--dt-space-450);\n }\n\n &:deep(> .dt-item-layout) {\n font: var(--dt-typography-body-md-compact);\n min-height: initial;\n padding: 0px;\n }\n\n &:deep(> .dt-item-layout > .dt-item-layout--left) {\n align-self: flex-start;\n text-align: end;\n display: block;\n padding-right: var(--dt-space-300);\n padding-left: var(--dt-space-0);\n // min-width = avatar width + padding\n min-width: calc(var(--dt-space-600) + var(--dt-space-300));\n }\n\n &:deep(> .dt-item-layout > .dt-item-layout--right) {\n padding: 0;\n min-width: initial;\n }\n\n &:deep(> .dt-item-layout > .dt-item-layout--content > .dt-item-layout--bottom) {\n display: flex;\n flex-direction: column;\n margin-top: 0;\n }\n}\n</style>\n"],"names":["DtAvatar","DtLazyShow","DtListItem","DtBadge","Modal","DEFAULT_FEED_ROW_STATE","FEED_ROW_STATE_BACKGROUND_COLOR"],"mappings":"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"}
1
+ {"version":3,"file":"feed_item_row.vue.cjs","sources":["../../../../recipes/conversation_view/feed_item_row/feed_item_row.vue"],"sourcesContent":["<template>\n <dt-list-item\n ref=\"FeedItemRef\"\n navigation-type=\"none\"\n v-bind=\"$attrs\"\n :class=\"['dt-feed-item-row', listItemClasses]\"\n data-qa=\"dt-feed-item-row\"\n v-on=\"feedListeners\"\n >\n <!-- Avatar or time -->\n <template #left>\n <div\n v-if=\"showHeader\"\n class=\"dt-feed-item-row__avatar-container\"\n >\n <!-- @slot Slot to contain the avatar, overrides avatar props. -->\n <slot\n name=\"avatar\"\n >\n <dt-avatar\n :full-name=\"displayName\"\n :image-src=\"avatarImageUrl\"\n image-alt=\"\"\n :seed=\"avatarSeed\"\n >\n <template\n v-if=\"noInitials\"\n #icon=\"{ iconSize }\"\n >\n <dt-icon-user\n :size=\"iconSize\"\n />\n </template>\n </dt-avatar>\n </slot>\n </div>\n <!-- show time instead of avatar when headers not present -->\n <span\n v-if=\"!showHeader\"\n v-show=\"isActive\"\n class=\"dt-feed-item-row__left-time\"\n data-qa=\"dt-feed-item-row--left-time\"\n >\n {{ shortTime }}\n </span>\n </template>\n\n <article class=\"dt-feed-item-row__content\">\n <!-- Feed Item -->\n <div\n v-if=\"showHeader\"\n data-qa=\"dt-feed-item-row--header\"\n class=\"dt-feed-item-row__header\"\n >\n <p class=\"dt-feed-item-row__header__name\">\n {{ displayName }}\n </p>\n <time\n class=\"dt-feed-item-row__header__time\"\n >\n {{ time }}\n </time>\n <dt-badge\n v-if=\"labelText\"\n :text=\"labelText\"\n />\n </div>\n <!-- @slot Default content slot for feed item row -->\n <span\n data-qa=\"dt-feed-item-row--content\"\n >\n <slot />\n </span>\n <div\n v-if=\"$slots.attachment\"\n data-qa=\"dt-feed-item-row--attachment\"\n class=\"dt-feed-item-row__attachment\"\n >\n <slot name=\"attachment\" />\n </div>\n </article>\n\n <template #bottom>\n <div\n v-if=\"$slots.reactions\"\n class=\"dt-feed-item-row__reactions\"\n data-qa=\"dt-feed-item-row--reactions\"\n >\n <!-- @slot Slot for reactions row component -->\n <slot name=\"reactions\" />\n </div>\n <div\n v-if=\"$slots.threading\"\n class=\"dt-feed-item-row__threading\"\n >\n <!-- @slot Slot for threading row component -->\n <slot name=\"threading\" />\n </div>\n </template>\n\n <!-- Action menu -->\n <template #right>\n <div\n v-show=\"isActive\"\n data-qa=\"dt-feed-item-row--menu\"\n class=\"dt-feed-item-row__menu\"\n >\n <dt-lazy-show\n :appear=\"true\"\n transition=\"fade\"\n :show=\"isActive\"\n >\n <!-- @slot Slot for actions hover menu component -->\n <slot name=\"menu\" />\n </dt-lazy-show>\n </div>\n </template>\n </dt-list-item>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport { DEFAULT_FEED_ROW_STATE, FEED_ROW_STATE_BACKGROUND_COLOR } from './feed_item_row_constants.js';\nimport { DtAvatar } from '@/components/avatar';\nimport { DtLazyShow } from '@/components/lazy_show';\nimport { DtListItem } from '@/components/list_item';\nimport { DtBadge } from '@/components/badge';\nimport Modal from '@/common/mixins/modal';\nimport { DtIconUser } from '@dialpad/dialtone-icons/vue2';\n\nexport default {\n name: 'DtRecipeFeedItemRow',\n\n components: {\n DtAvatar,\n DtLazyShow,\n DtListItem,\n DtBadge,\n DtIconUser,\n },\n\n mixins: [Modal],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Avatar seed, set this to the user's ID to get the same avatar background gradient each time it is displayed.\n */\n avatarSeed: {\n type: String,\n default: null,\n },\n\n /**\n * Show avatar, show header text or dont show left time and vice versa\n */\n showHeader: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Optional avatar image url.\n * If not provided it will use extracted initials from displayName.\n */\n avatarImageUrl: {\n type: String,\n default: '',\n },\n\n /**\n * The display name of the sender\n */\n displayName: {\n type: String,\n default: '',\n },\n\n /**\n * Initials will never be shown. Instead it will show a \"User\" icon.\n */\n noInitials: {\n type: Boolean,\n default: false,\n },\n\n /**\n * time string displayed as is.\n * Shown on the header when showHeader is true\n */\n time: {\n type: String,\n default: '',\n },\n\n /**\n * short time string without AM/PM displayed as is.\n * Shown on the left of feed item when showHeader is false and isActive is true\n */\n shortTime: {\n type: String,\n default: '',\n },\n\n /**\n * A label displayed next to the displayName. Will not show if empty.\n */\n labelText: {\n type: String,\n default: '',\n },\n\n /**\n * displays a darkened background on the row.\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * state for the feed item row. Can be normal, searched & error\n */\n state: {\n type: String,\n default: DEFAULT_FEED_ROW_STATE,\n validator: state => Object.keys(FEED_ROW_STATE_BACKGROUND_COLOR).includes(state),\n },\n },\n\n emits: [\n /**\n * Fires when hovered over feed row\n *\n * @event hover\n * @type {Boolean}\n */\n 'hover',\n\n /**\n * Fires when focused over feed row\n *\n * @event focus\n * @type {Boolean}\n */\n 'focus',\n\n /**\n * Key down event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n ],\n\n data () {\n return {\n transitionActive: false,\n };\n },\n\n computed: {\n feedListeners () {\n return {\n ...this.$listeners,\n mouseenter: () => this.setHover(true),\n mouseleave: () => this.setHover(false),\n focusin: () => this.setFocus(true),\n focusout: () => this.setFocus(false),\n transitionend: () => this.transitionComplete(),\n keydown: event => {\n switch (event.code) {\n case 'Tab':\n this.trapFocus(event);\n break;\n }\n this.$emit('keydown', event);\n },\n };\n },\n\n listItemClasses () {\n return [\n 'dt-feed-item-row',\n { 'dt-feed-item-row--active': this.isActive && this.state === DEFAULT_FEED_ROW_STATE },\n { 'dt-feed-item-row--state-transition': this.transitionActive },\n FEED_ROW_STATE_BACKGROUND_COLOR[this.state],\n\n ];\n },\n },\n\n watch: {\n state: {\n immediate: true,\n handler: function (newState, oldState) {\n if (newState !== DEFAULT_FEED_ROW_STATE) {\n this.transitionActive = true;\n }\n },\n },\n },\n\n methods: {\n transitionComplete () {\n if (this.state === DEFAULT_FEED_ROW_STATE) {\n this.transitionActive = false;\n }\n },\n\n trapFocus (e) {\n this.focusTrappedTabPress(e);\n },\n\n setFocus (bool) {\n this.$emit('focus', bool);\n },\n\n setHover (bool) {\n this.$emit('hover', bool);\n },\n },\n};\n</script>\n\n<style lang=\"less\" scoped>\n.dt-feed-item-row {\n\n width: var(--dt-size-100-percent);\n box-sizing: border-box;\n position: relative;\n padding: var(--dt-space-300) var(--dt-space-500);\n\n &:focus-visible {\n box-shadow: var(--dt-shadow-focus-inset);\n }\n\n &--state-searched {\n background-color: var(--dt-color-surface-warning-subtle);\n }\n\n &--state-error {\n background-color: var(--dt-color-surface-critical-subtle);\n }\n\n &--active {\n background-color: var(--dt-color-surface-secondary-opaque);\n }\n\n &--state-transition {\n transition-duration: 2s;\n transition-delay: 0s;\n transition-timing-function: var(--ttf-in-out);\n transition-property: background-color;\n }\n\n &__avatar-container {\n padding-top: var(--dt-space-300);\n padding-bottom: var(--dt-space-300);\n }\n\n &__content {\n padding-left: var(--dt-space-300);\n }\n\n &__attachment {\n padding-top: var(--dt-space-200);\n padding-bottom: var(--dt-space-300);\n\n &:deep(.dt-feed-item-row__image) {\n border: var(--dt-color-border-subtle) solid var(--dt-size-border-100);\n border-radius: var(--dt-size-radius-400);\n display: block;\n max-width: 30rem;\n max-height: 30rem;\n min-width: 5.6rem;\n min-height: 5.6rem;\n }\n\n &:deep(.dt-feed-item-row__video) {\n display: block;\n height: 25.0rem;\n }\n }\n\n &__header {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: var(--dt-space-300);\n font-size: var(--dt-font-size-200);\n line-height: var(--dt-font-line-height-300);\n\n &__name {\n font-weight: var(--dt-font-weight-bold);\n }\n\n &__time {\n font-size: var(--dt-font-size-100);\n color: var(--dt-color-foreground-tertiary);\n flex-shrink: 0;\n }\n }\n\n &__reactions {\n display: flex;\n flex-wrap: wrap;\n padding-top: var(--dt-space-200);\n padding-bottom: var(--dt-space-200);\n padding-left: var(--dt-space-300);\n }\n\n &__threading {\n padding-top: var(--dt-space-200);\n padding-bottom: var(--dt-space-200);\n }\n\n &__left-time {\n color: var(--dt-color-foreground-tertiary);\n font-size: var(--dt-font-size-100);\n font-weight: var(--dt-font-weight-normal);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n &__menu {\n position: absolute;\n top: var(--dt-space-550-negative);\n right: var(--dt-space-450);\n }\n\n &:deep(> .dt-item-layout) {\n font: var(--dt-typography-body-md-compact);\n min-height: initial;\n padding: 0px;\n }\n\n &:deep(> .dt-item-layout > .dt-item-layout--left) {\n align-self: flex-start;\n text-align: end;\n display: block;\n padding-right: var(--dt-space-300);\n padding-left: var(--dt-space-0);\n // min-width = avatar width + padding\n min-width: calc(var(--dt-space-600) + var(--dt-space-300));\n }\n\n &:deep(> .dt-item-layout > .dt-item-layout--right) {\n padding: 0;\n min-width: initial;\n }\n\n &:deep(> .dt-item-layout > .dt-item-layout--content > .dt-item-layout--bottom) {\n display: flex;\n flex-direction: column;\n margin-top: 0;\n }\n}\n</style>\n"],"names":["DtAvatar","DtLazyShow","DtListItem","DtBadge","DtIconUser","Modal","DEFAULT_FEED_ROW_STATE","FEED_ROW_STATE_BACKGROUND_COLOR"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { DEFAULT_FEED_ROW_STATE, FEED_ROW_STATE_BACKGROUND_COLOR } from "./feed_item_row_constants.js";
2
2
  import Modal from "../../../common/mixins/modal.js";
3
+ import { DtIconUser } from "@dialpad/dialtone-icons/vue2";
3
4
  /* empty css */
4
5
  import normalizeComponent from "../../../_virtual/_plugin-vue2_normalizer.js";
5
6
  import DtAvatar from "../../../components/avatar/avatar.vue.js";
@@ -12,7 +13,8 @@ const _sfc_main = {
12
13
  DtAvatar,
13
14
  DtLazyShow,
14
15
  DtListItem,
15
- DtBadge
16
+ DtBadge,
17
+ DtIconUser
16
18
  },
17
19
  mixins: [Modal],
18
20
  inheritAttrs: false,
@@ -139,9 +141,6 @@ const _sfc_main = {
139
141
  }
140
142
  };
141
143
  },
142
- iconName() {
143
- return this.noInitials ? "user" : null;
144
- },
145
144
  listItemClasses() {
146
145
  return [
147
146
  "dt-feed-item-row",
@@ -182,7 +181,9 @@ var _sfc_render = function render() {
182
181
  var _vm = this, _c = _vm._self._c;
183
182
  return _c("dt-list-item", _vm._g(_vm._b({ ref: "FeedItemRef", class: ["dt-feed-item-row", _vm.listItemClasses], attrs: { "navigation-type": "none", "data-qa": "dt-feed-item-row" }, scopedSlots: _vm._u([{ key: "left", fn: function() {
184
183
  return [_vm.showHeader ? _c("div", { staticClass: "dt-feed-item-row__avatar-container" }, [_vm._t("avatar", function() {
185
- return [_c("dt-avatar", { attrs: { "full-name": _vm.displayName, "image-src": _vm.avatarImageUrl, "image-alt": "", "icon-name": _vm.iconName, "seed": _vm.avatarSeed } })];
184
+ return [_c("dt-avatar", { attrs: { "full-name": _vm.displayName, "image-src": _vm.avatarImageUrl, "image-alt": "", "seed": _vm.avatarSeed }, scopedSlots: _vm._u([_vm.noInitials ? { key: "icon", fn: function({ iconSize }) {
185
+ return [_c("dt-icon-user", { attrs: { "size": iconSize } })];
186
+ } } : null], null, true) })];
186
187
  })], 2) : _vm._e(), !_vm.showHeader ? _c("span", { directives: [{ name: "show", rawName: "v-show", value: _vm.isActive, expression: "isActive" }], staticClass: "dt-feed-item-row__left-time", attrs: { "data-qa": "dt-feed-item-row--left-time" } }, [_vm._v(" " + _vm._s(_vm.shortTime) + " ")]) : _vm._e()];
187
188
  }, proxy: true }, { key: "bottom", fn: function() {
188
189
  return [_vm.$slots.reactions ? _c("div", { staticClass: "dt-feed-item-row__reactions", attrs: { "data-qa": "dt-feed-item-row--reactions" } }, [_vm._t("reactions")], 2) : _vm._e(), _vm.$slots.threading ? _c("div", { staticClass: "dt-feed-item-row__threading" }, [_vm._t("threading")], 2) : _vm._e()];
@@ -197,7 +198,7 @@ var __component__ = /* @__PURE__ */ normalizeComponent(
197
198
  _sfc_staticRenderFns,
198
199
  false,
199
200
  null,
200
- "047dcbe5"
201
+ "90e0798e"
201
202
  );
202
203
  const feed_item_row = __component__.exports;
203
204
  export {