@dialpad/dialtone-vue 2.124.0 → 2.125.1-alpha.1

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 (269) hide show
  1. package/dist/chunks/_plugin-vue2_normalizer-u6G_3nkj.js +33 -0
  2. package/dist/chunks/_plugin-vue2_normalizer-u6G_3nkj.js.map +1 -0
  3. package/dist/chunks/dropdown-SMWaTWyF.js +357 -0
  4. package/dist/chunks/dropdown-SMWaTWyF.js.map +1 -0
  5. package/dist/chunks/dropdown_constants-EUcDxBrX.js +9 -0
  6. package/dist/chunks/dropdown_constants-EUcDxBrX.js.map +1 -0
  7. package/dist/chunks/icon_constants-OpYAAKwF.js +16 -0
  8. package/dist/chunks/icon_constants-OpYAAKwF.js.map +1 -0
  9. package/dist/chunks/index-nIyl_PL6.js +372 -0
  10. package/dist/chunks/index-nIyl_PL6.js.map +1 -0
  11. package/dist/chunks/index-o4OMWMuv.js +244 -0
  12. package/dist/chunks/index-o4OMWMuv.js.map +1 -0
  13. package/dist/chunks/input-1tm09l_-.js +273 -0
  14. package/dist/chunks/input-1tm09l_-.js.map +1 -0
  15. package/dist/chunks/input_group-zcAq3DQl.js +141 -0
  16. package/dist/chunks/input_group-zcAq3DQl.js.map +1 -0
  17. package/dist/chunks/keyboard_list_navigation-F0O8nht0.js +197 -0
  18. package/dist/chunks/keyboard_list_navigation-F0O8nht0.js.map +1 -0
  19. package/dist/chunks/link_constants-vIUB92L4.js +16 -0
  20. package/dist/chunks/link_constants-vIUB92L4.js.map +1 -0
  21. package/dist/chunks/list_item_constants-LTUc74pD.js +13 -0
  22. package/dist/chunks/list_item_constants-LTUc74pD.js.map +1 -0
  23. package/dist/chunks/modal-VuMFkZFH.js +82 -0
  24. package/dist/chunks/modal-VuMFkZFH.js.map +1 -0
  25. package/dist/chunks/notice_action-9NmtQRai.js +182 -0
  26. package/dist/chunks/notice_action-9NmtQRai.js.map +1 -0
  27. package/dist/chunks/notice_constants-c--hBFQw.js +6 -0
  28. package/dist/chunks/notice_constants-c--hBFQw.js.map +1 -0
  29. package/dist/chunks/popover_constants-qjlEkroB.js +114 -0
  30. package/dist/chunks/popover_constants-qjlEkroB.js.map +1 -0
  31. package/dist/chunks/sr_only_close_button-JGole5Xi.js +86 -0
  32. package/dist/chunks/sr_only_close_button-JGole5Xi.js.map +1 -0
  33. package/dist/chunks/stack_constants-u7tNqGtc.js +13 -0
  34. package/dist/chunks/stack_constants-u7tNqGtc.js.map +1 -0
  35. package/dist/chunks/tab-Qm9LVkYj.js +346 -0
  36. package/dist/chunks/tab-Qm9LVkYj.js.map +1 -0
  37. package/dist/component-documentation.json +1 -1
  38. package/dist/dialtone-vue.js +356 -10364
  39. package/dist/dialtone-vue.js.map +1 -0
  40. package/dist/lib/attachment-carousel.js +250 -0
  41. package/dist/lib/attachment-carousel.js.map +1 -0
  42. package/dist/lib/avatar.js +369 -0
  43. package/dist/lib/avatar.js.map +1 -0
  44. package/dist/lib/badge.js +169 -0
  45. package/dist/lib/badge.js.map +1 -0
  46. package/dist/lib/banner.js +200 -0
  47. package/dist/lib/banner.js.map +1 -0
  48. package/dist/lib/breadcrumbs.js +138 -0
  49. package/dist/lib/breadcrumbs.js.map +1 -0
  50. package/dist/lib/button-group.js +45 -0
  51. package/dist/lib/button-group.js.map +1 -0
  52. package/dist/lib/button.js +328 -0
  53. package/dist/lib/button.js.map +1 -0
  54. package/dist/lib/callbar-button-with-popover.js +235 -0
  55. package/dist/lib/callbar-button-with-popover.js.map +1 -0
  56. package/dist/lib/callbar-button.js +175 -0
  57. package/dist/lib/callbar-button.js.map +1 -0
  58. package/dist/lib/callbox.js +142 -0
  59. package/dist/lib/callbox.js.map +1 -0
  60. package/dist/lib/card.js +72 -0
  61. package/dist/lib/card.js.map +1 -0
  62. package/dist/lib/checkbox-group.js +117 -0
  63. package/dist/lib/checkbox-group.js.map +1 -0
  64. package/dist/lib/checkbox.js +117 -0
  65. package/dist/lib/checkbox.js.map +1 -0
  66. package/dist/lib/chip.js +186 -0
  67. package/dist/lib/chip.js.map +1 -0
  68. package/dist/lib/codeblock.js +29 -0
  69. package/dist/lib/codeblock.js.map +1 -0
  70. package/dist/lib/collapsible.js +313 -0
  71. package/dist/lib/collapsible.js.map +1 -0
  72. package/dist/lib/combobox-multi-select.js +433 -0
  73. package/dist/lib/combobox-multi-select.js.map +1 -0
  74. package/dist/lib/combobox-with-popover.js +341 -0
  75. package/dist/lib/combobox-with-popover.js.map +1 -0
  76. package/dist/lib/combobox.js +19 -0
  77. package/dist/lib/combobox.js.map +1 -0
  78. package/dist/lib/constants.js +53 -0
  79. package/dist/lib/constants.js.map +1 -0
  80. package/dist/lib/contact-info.js +145 -0
  81. package/dist/lib/contact-info.js.map +1 -0
  82. package/dist/lib/contact-row.js +203 -0
  83. package/dist/lib/contact-row.js.map +1 -0
  84. package/dist/lib/datepicker.js +552 -0
  85. package/dist/lib/datepicker.js.map +1 -0
  86. package/dist/lib/dates.js +57 -0
  87. package/dist/lib/dates.js.map +1 -0
  88. package/dist/lib/description-list.js +83 -0
  89. package/dist/lib/description-list.js.map +1 -0
  90. package/dist/lib/dropdown.js +45 -0
  91. package/dist/lib/dropdown.js.map +1 -0
  92. package/dist/lib/editor.js +527 -0
  93. package/dist/lib/editor.js.map +1 -0
  94. package/dist/{emoji_picker-kiTOKaq8.js → lib/emoji-picker.js} +30 -11
  95. package/dist/lib/emoji-picker.js.map +1 -0
  96. package/dist/lib/emoji-row.js +83 -0
  97. package/dist/lib/emoji-row.js.map +1 -0
  98. package/dist/{emoji_text_wrapper-48ClwKvf.js → lib/emoji-text-wrapper.js} +19 -13
  99. package/dist/lib/emoji-text-wrapper.js.map +1 -0
  100. package/dist/lib/emoji.js +11 -0
  101. package/dist/lib/emoji.js.map +1 -0
  102. package/dist/lib/feed-item-row.js +207 -0
  103. package/dist/lib/feed-item-row.js.map +1 -0
  104. package/dist/lib/feed-pill.js +142 -0
  105. package/dist/lib/feed-pill.js.map +1 -0
  106. package/dist/lib/general-row.js +379 -0
  107. package/dist/lib/general-row.js.map +1 -0
  108. package/dist/lib/group-row.js +115 -0
  109. package/dist/lib/group-row.js.map +1 -0
  110. package/dist/lib/grouped-chip.js +45 -0
  111. package/dist/lib/grouped-chip.js.map +1 -0
  112. package/dist/lib/hovercard.js +194 -0
  113. package/dist/lib/hovercard.js.map +1 -0
  114. package/dist/lib/icon.js +82 -0
  115. package/dist/lib/icon.js.map +1 -0
  116. package/dist/lib/image-viewer.js +171 -0
  117. package/dist/lib/image-viewer.js.map +1 -0
  118. package/dist/lib/input-group.js +90 -0
  119. package/dist/lib/input-group.js.map +1 -0
  120. package/dist/lib/input.js +455 -0
  121. package/dist/lib/input.js.map +1 -0
  122. package/dist/lib/item-layout.js +39 -0
  123. package/dist/lib/item-layout.js.map +1 -0
  124. package/dist/lib/ivr-node.js +195 -0
  125. package/dist/lib/ivr-node.js.map +1 -0
  126. package/dist/lib/keyboard-shortcut.js +100 -0
  127. package/dist/lib/keyboard-shortcut.js.map +1 -0
  128. package/dist/lib/lazy-show.js +77 -0
  129. package/dist/lib/lazy-show.js.map +1 -0
  130. package/dist/lib/link.js +69 -0
  131. package/dist/lib/link.js.map +1 -0
  132. package/dist/lib/list-item-group.js +59 -0
  133. package/dist/lib/list-item-group.js.map +1 -0
  134. package/dist/lib/list-item.js +195 -0
  135. package/dist/lib/list-item.js.map +1 -0
  136. package/dist/{message_input.js → lib/message-input.js} +107 -55
  137. package/dist/lib/message-input.js.map +1 -0
  138. package/dist/lib/mixins.js +17 -0
  139. package/dist/lib/mixins.js.map +1 -0
  140. package/dist/lib/modal.js +324 -0
  141. package/dist/lib/modal.js.map +1 -0
  142. package/dist/lib/notice.js +158 -0
  143. package/dist/lib/notice.js.map +1 -0
  144. package/dist/lib/pagination.js +142 -0
  145. package/dist/lib/pagination.js.map +1 -0
  146. package/dist/lib/popover.js +779 -0
  147. package/dist/lib/popover.js.map +1 -0
  148. package/dist/lib/presence.js +60 -0
  149. package/dist/lib/presence.js.map +1 -0
  150. package/dist/lib/radio-group.js +97 -0
  151. package/dist/lib/radio-group.js.map +1 -0
  152. package/dist/lib/radio.js +111 -0
  153. package/dist/lib/radio.js.map +1 -0
  154. package/dist/lib/rich-text-editor.js +920 -0
  155. package/dist/lib/rich-text-editor.js.map +1 -0
  156. package/dist/lib/root-layout.js +127 -0
  157. package/dist/lib/root-layout.js.map +1 -0
  158. package/dist/lib/select-menu.js +243 -0
  159. package/dist/lib/select-menu.js.map +1 -0
  160. package/dist/lib/settings-menu-button.js +65 -0
  161. package/dist/lib/settings-menu-button.js.map +1 -0
  162. package/dist/lib/skeleton.js +574 -0
  163. package/dist/lib/skeleton.js.map +1 -0
  164. package/dist/lib/stack.js +118 -0
  165. package/dist/lib/stack.js.map +1 -0
  166. package/dist/lib/tabs.js +93 -0
  167. package/dist/lib/tabs.js.map +1 -0
  168. package/dist/lib/time-pill.js +43 -0
  169. package/dist/lib/time-pill.js.map +1 -0
  170. package/dist/lib/toast.js +226 -0
  171. package/dist/lib/toast.js.map +1 -0
  172. package/dist/lib/toggle.js +169 -0
  173. package/dist/lib/toggle.js.map +1 -0
  174. package/dist/{directives.js → lib/tooltip-directive.js} +24 -17
  175. package/dist/lib/tooltip-directive.js.map +1 -0
  176. package/dist/lib/tooltip.js +376 -0
  177. package/dist/lib/tooltip.js.map +1 -0
  178. package/dist/lib/top-banner-info.js +60 -0
  179. package/dist/lib/top-banner-info.js.map +1 -0
  180. package/dist/lib/unread-pill.js +61 -0
  181. package/dist/lib/unread-pill.js.map +1 -0
  182. package/dist/lib/utils.js +175 -0
  183. package/dist/lib/utils.js.map +1 -0
  184. package/dist/lib/validation-messages.js +83 -0
  185. package/dist/lib/validation-messages.js.map +1 -0
  186. package/dist/lib/validators.js +12 -0
  187. package/dist/lib/validators.js.map +1 -0
  188. package/dist/style.css +1 -1
  189. package/dist/types/common/{constants.d.ts → constants/index.d.ts} +1 -1
  190. package/dist/types/common/constants/index.d.ts.map +1 -0
  191. package/dist/types/common/{dates.d.ts → dates/index.d.ts} +1 -1
  192. package/dist/types/common/dates/index.d.ts.map +1 -0
  193. package/dist/types/common/{emoji.d.ts → emoji/index.d.ts} +1 -1
  194. package/dist/types/common/{emoji.d.ts.map → emoji/index.d.ts.map} +1 -1
  195. package/dist/types/common/{utils.d.ts → utils/index.d.ts} +1 -1
  196. package/dist/types/common/utils/index.d.ts.map +1 -0
  197. package/dist/types/common/{validators.d.ts → validators/index.d.ts} +1 -1
  198. package/dist/types/common/validators/index.d.ts.map +1 -0
  199. package/dist/types/components/avatar/avatar.vue.d.ts +1 -1
  200. package/dist/types/components/button/button.vue.d.ts +2 -2
  201. package/dist/types/components/card/card.vue.d.ts +1 -1
  202. package/dist/types/components/checkbox/checkbox.vue.d.ts +7 -7
  203. package/dist/types/components/checkbox/checkbox.vue.d.ts.map +1 -1
  204. package/dist/types/components/chip/chip.vue.d.ts +2 -2
  205. package/dist/types/components/collapsible/collapsible.vue.d.ts +3 -3
  206. package/dist/types/components/combobox/combobox.vue.d.ts +7 -8
  207. package/dist/types/components/combobox/combobox.vue.d.ts.map +1 -1
  208. package/dist/types/components/dropdown/dropdown.vue.d.ts +1 -1
  209. package/dist/types/components/emoji/emoji.vue.d.ts +1 -1
  210. package/dist/types/components/emoji_picker/modules/emoji_selector.vue.d.ts +1 -219
  211. package/dist/types/components/icon/icon.vue.d.ts +20 -16
  212. package/dist/types/components/icon/icon.vue.d.ts.map +1 -1
  213. package/dist/types/components/icon/icon_constants.d.ts +2 -0
  214. package/dist/types/components/icon/icon_constants.d.ts.map +1 -1
  215. package/dist/types/components/icon/index.d.ts +1 -1
  216. package/dist/types/components/input_group/input_group.vue.d.ts +15 -6
  217. package/dist/types/components/input_group/input_group.vue.d.ts.map +1 -1
  218. package/dist/types/components/list_item_group/list_item_group.vue.d.ts +1 -1
  219. package/dist/types/components/modal/modal.vue.d.ts +7 -2
  220. package/dist/types/components/modal/modal.vue.d.ts.map +1 -1
  221. package/dist/types/components/notice/notice_action.vue.d.ts +3 -1
  222. package/dist/types/components/notice/notice_action.vue.d.ts.map +1 -1
  223. package/dist/types/components/popover/popover_header_footer.vue.d.ts +1 -1
  224. package/dist/types/components/radio/radio.vue.d.ts +2 -12
  225. package/dist/types/components/radio/radio.vue.d.ts.map +1 -1
  226. package/dist/types/components/rich_text_editor/extensions/suggestion/SuggestionList.vue.d.ts +1 -1
  227. package/dist/types/components/skeleton/skeleton-list-item.vue.d.ts +1 -1
  228. package/dist/types/components/skeleton/skeleton-paragraph.vue.d.ts +3 -3
  229. package/dist/types/components/skeleton/skeleton-shape.vue.d.ts +2 -2
  230. package/dist/types/components/skeleton/skeleton-text.vue.d.ts +8 -3
  231. package/dist/types/components/skeleton/skeleton-text.vue.d.ts.map +1 -1
  232. package/dist/types/components/skeleton/skeleton.vue.d.ts +1 -1
  233. package/dist/types/components/toggle/toggle.vue.d.ts +1 -1
  234. package/dist/types/components/tooltip/tooltip.vue.d.ts +2 -2
  235. package/dist/types/index.d.ts +36 -29
  236. package/dist/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts +1 -1
  237. package/dist/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +2 -2
  238. package/dist/types/recipes/comboboxes/combobox_multi_select/combobox_multi_select.vue.d.ts +1 -1
  239. package/dist/types/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue.d.ts +2 -2
  240. package/dist/types/recipes/conversation_view/editor/editor.vue.d.ts +9 -0
  241. package/dist/types/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  242. package/package.json +19 -59
  243. package/CHANGELOG.json +0 -1
  244. package/CHANGELOG.md +0 -2890
  245. package/dist/dialtone-vue.cjs +0 -5
  246. package/dist/directives.cjs +0 -1
  247. package/dist/emoji.cjs +0 -1
  248. package/dist/emoji.js +0 -35
  249. package/dist/emoji_picker-njWWAm6V.cjs +0 -1
  250. package/dist/emoji_text_wrapper-ZlynvHnd.cjs +0 -1
  251. package/dist/index-OF94C6nQ.js +0 -142833
  252. package/dist/index-Wx7Jagcr.cjs +0 -1
  253. package/dist/message_input.cjs +0 -1
  254. package/dist/rich_text_editor-9sMob7ck.js +0 -16478
  255. package/dist/rich_text_editor-Eh5kYokw.cjs +0 -97
  256. package/dist/tooltip-88U5vFMA.js +0 -2516
  257. package/dist/tooltip-i2wxFIIi.cjs +0 -21
  258. package/dist/types/common/constants.d.ts.map +0 -1
  259. package/dist/types/common/dates.d.ts.map +0 -1
  260. package/dist/types/common/utils.d.ts.map +0 -1
  261. package/dist/types/common/validators.d.ts.map +0 -1
  262. package/dist/types/components/emoji_picker/emojis/index.d.ts +0 -50
  263. package/dist/types/components/emoji_picker/emojis/index.d.ts.map +0 -1
  264. package/dist/types/directives.d.ts +0 -2
  265. package/dist/types/directives.d.ts.map +0 -1
  266. package/dist/types/emoji.d.ts +0 -5
  267. package/dist/types/emoji.d.ts.map +0 -1
  268. package/dist/types/message_input.d.ts +0 -3
  269. package/dist/types/message_input.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialtone-vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,250 @@
1
+ import { n as i } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.js";
2
+ import { DtImageViewer as c } from "./image-viewer.js";
3
+ import { DtButton as o } from "./button.js";
4
+ import { DtIcon as l } from "./icon.js";
5
+ import "../chunks/modal-VuMFkZFH.js";
6
+ import "./constants.js";
7
+ import "@linusborg/vue-simple-portal";
8
+ import "vue";
9
+ import "../chunks/link_constants-vIUB92L4.js";
10
+ import "@dialpad/dialtone-icons/vue2";
11
+ import "../chunks/icon_constants-OpYAAKwF.js";
12
+ import "@dialpad/dialtone-icons/icons.json";
13
+ import "./skeleton.js";
14
+ const n = {
15
+ name: "DtProgressBar",
16
+ props: {
17
+ progressbarAriaLabel: {
18
+ type: String,
19
+ required: !0
20
+ },
21
+ progress: {
22
+ type: Number,
23
+ default: 20
24
+ }
25
+ },
26
+ data: () => ({
27
+ circleCircumference: 50
28
+ }),
29
+ computed: {
30
+ cssVars() {
31
+ return {
32
+ "--stroke-dashoffset": this.circleCircumference - this.circleCircumference * this.progress / 100,
33
+ "--stroke-dasharray": this.circleCircumference
34
+ };
35
+ }
36
+ },
37
+ mounted() {
38
+ this.circleCircumference = this.$refs.progressbarCircle.getTotalLength();
39
+ }
40
+ };
41
+ var m = function() {
42
+ var e = this, t = e._self._c;
43
+ return t("div", { attrs: { role: "progressbar", "aria-label": e.progressbarAriaLabel, tabindex: "-1", "aria-valuenow": e.progress, "aria-valuemin": "0", "aria-valuemax": "100" } }, [t("svg", { staticClass: "progress-bar", style: e.cssVars }, [t("circle", { ref: "progressbarCircle", staticClass: "progress-bar__circle", attrs: { r: "8", cx: "12", cy: "12" } }), t("circle", { staticClass: "progress-bar__circle", attrs: { r: "8", cx: "12", cy: "12" } })])]);
44
+ }, u = [], d = /* @__PURE__ */ i(
45
+ n,
46
+ m,
47
+ u,
48
+ !1,
49
+ null,
50
+ null,
51
+ null,
52
+ null
53
+ );
54
+ const h = d.exports, p = {
55
+ name: "DtImageCarousel",
56
+ components: {
57
+ DtImageViewer: c,
58
+ DtButton: o,
59
+ DtIcon: l,
60
+ DtProgressBar: h
61
+ },
62
+ props: {
63
+ mediaItem: {
64
+ type: Object,
65
+ required: !0
66
+ },
67
+ index: {
68
+ type: Number,
69
+ required: !0
70
+ },
71
+ closeAriaLabel: {
72
+ type: String,
73
+ required: !0
74
+ },
75
+ clickToOpenAriaLabel: {
76
+ type: String,
77
+ required: !0
78
+ },
79
+ progressbarAriaLabel: {
80
+ type: String,
81
+ required: !0
82
+ }
83
+ },
84
+ emits: [
85
+ /**
86
+ * Emitted when media close button is clicked to remove the image
87
+ *
88
+ * @event remove-media
89
+ * @type {Number}
90
+ */
91
+ "remove-media"
92
+ ],
93
+ methods: {
94
+ removeMediaItem(r) {
95
+ this.$emit("remove-media", r);
96
+ }
97
+ }
98
+ };
99
+ var f = function() {
100
+ var e = this, t = e._self._c;
101
+ return t("li", { staticClass: "dt-attachment-image" }, [t("dt-image-viewer", { attrs: { "image-button-class": "dt-attachment-image__image-viewer", "image-src": e.mediaItem.path, "image-alt": e.mediaItem.altText, "close-aria-label": e.closeAriaLabel, "aria-label": e.clickToOpenAriaLabel } }), t("div", { staticClass: "dt-attachment-image__top-right" }, [e.mediaItem.isUploading ? t("dt-progress-bar", { staticClass: "dt-attachment-image__progress-bar", attrs: { progress: e.mediaItem.progress, "progressbar-aria-label": e.progressbarAriaLabel } }) : e._e(), t("dt-button", { staticClass: "dt-attachment-image__close-button", attrs: { id: `closeButton-${e.index}`, tabindex: "0", circle: "", size: "xs", importance: "clear", "aria-label": e.closeAriaLabel }, on: { click: function(a) {
102
+ return e.removeMediaItem(e.index);
103
+ } }, scopedSlots: e._u([{ key: "icon", fn: function() {
104
+ return [t("dt-icon", { attrs: { name: "close", size: "200" } })];
105
+ }, proxy: !0 }]) })], 1)], 1);
106
+ }, _ = [], g = /* @__PURE__ */ i(
107
+ p,
108
+ f,
109
+ _,
110
+ !1,
111
+ null,
112
+ null,
113
+ null,
114
+ null
115
+ );
116
+ const b = g.exports, w = 64, v = {
117
+ name: "DtRecipeAttachmentCarousel",
118
+ components: {
119
+ DtButton: o,
120
+ DtIcon: l,
121
+ DtImageCarousel: b
122
+ },
123
+ mixins: [],
124
+ /* inheritAttrs: false is generally an option we want to set on library
125
+ components. This allows any attributes passed in that are not recognized
126
+ as props to be passed down to another element or component using v-bind:$attrs
127
+ more info: https://vuejs.org/v2/api/#inheritAttrs */
128
+ // inheritAttrs: false,
129
+ props: {
130
+ /**
131
+ * media - object array of media objects
132
+ * @type {Array}
133
+ *
134
+ * Object: {
135
+ * path: String,
136
+ * altText: String | null,
137
+ * }
138
+ */
139
+ mediaList: {
140
+ type: Array,
141
+ default: () => []
142
+ },
143
+ closeAriaLabel: {
144
+ type: String,
145
+ required: !0
146
+ },
147
+ clickToOpenAriaLabel: {
148
+ type: String,
149
+ required: !0
150
+ },
151
+ progressbarAriaLabel: {
152
+ type: String,
153
+ required: !0
154
+ },
155
+ leftArrowAriaLabel: {
156
+ type: String,
157
+ required: !0
158
+ },
159
+ rightArrowAriaLabel: {
160
+ type: String,
161
+ required: !0
162
+ }
163
+ },
164
+ emits: [
165
+ /**
166
+ * Emitted when popover is shown or hidden
167
+ *
168
+ * @event remove-media
169
+ * @type {Number}
170
+ */
171
+ "remove-media"
172
+ ],
173
+ data() {
174
+ return {
175
+ showCloseButton: {},
176
+ showRightArrow: !0,
177
+ showLeftArrow: !1,
178
+ isMounted: !1
179
+ };
180
+ },
181
+ computed: {
182
+ filteredMediaList() {
183
+ return this.mediaList.filter((r) => r.type === "image" || r.type === "video");
184
+ }
185
+ },
186
+ mounted: function() {
187
+ this.showLeftArrow = this.$refs.carousel.scrollLeft > 0, this.showRightArrow = this.$refs.carousel.scrollWidth > this.$refs.carousel.clientWidth;
188
+ },
189
+ methods: {
190
+ onItemFocus(r) {
191
+ r.currentTarget.scrollIntoView({ behavior: "smooth" });
192
+ },
193
+ mediaComponent(r) {
194
+ switch (r) {
195
+ case "image":
196
+ return "dt-image-carousel";
197
+ default:
198
+ return null;
199
+ }
200
+ },
201
+ removeMediaItem(r) {
202
+ this.showRightArrow = this.$refs.carousel.scrollWidth > this.$refs.carousel.clientWidth + w, this.$emit("remove-media", r);
203
+ },
204
+ closeButton(r, e) {
205
+ this.showCloseButton[e] = r;
206
+ },
207
+ handleScroll() {
208
+ const r = this.$refs.carousel;
209
+ this.showLeftArrow = r.scrollLeft > 0, this.showRightArrow = r.scrollLeft + r.clientWidth !== r.scrollWidth;
210
+ },
211
+ leftScroll() {
212
+ this.$refs.carousel.scrollTo({
213
+ left: this.$refs.carousel.scrollLeft - 100,
214
+ behavior: "smooth"
215
+ });
216
+ },
217
+ rightScroll() {
218
+ this.$refs.carousel.scrollTo({
219
+ left: this.$refs.carousel.scrollLeft + 100,
220
+ behavior: "smooth"
221
+ });
222
+ }
223
+ }
224
+ };
225
+ var A = function() {
226
+ var e = this, t = e._self._c;
227
+ return t("div", { staticClass: "dt-attachment-carousel", attrs: { role: "presentation" } }, [e.mediaList.length > 0 ? t("ul", { ref: "carousel", staticClass: "dt-attachment-carousel__media-list", on: { scroll: e.handleScroll } }, e._l(e.filteredMediaList, function(a, s) {
228
+ return t(e.mediaComponent(a.type), { key: `media-${s}`, tag: "component", attrs: { index: s, "media-item": a, "close-aria-label": e.closeAriaLabel, "click-to-open-aria-label": e.clickToOpenAriaLabel, "progressbar-aria-label": e.progressbarAriaLabel }, on: { "remove-media": function(C) {
229
+ return e.removeMediaItem(s);
230
+ }, focusin: e.onItemFocus } });
231
+ }), 1) : e._e(), t("dt-button", { directives: [{ name: "show", rawName: "v-show", value: e.showLeftArrow, expression: "showLeftArrow" }], staticClass: "dt-attachment-carousel__arrow dt-attachment-carousel__arrow--left", attrs: { tabindex: "-1", "aria-label": e.leftArrowAriaLabel, circle: "", size: "xs", importance: "clear" }, on: { click: e.leftScroll }, scopedSlots: e._u([{ key: "icon", fn: function() {
232
+ return [t("dt-icon", { attrs: { name: "arrow-left", size: "100" } })];
233
+ }, proxy: !0 }]) }), t("dt-button", { directives: [{ name: "show", rawName: "v-show", value: e.showRightArrow, expression: "showRightArrow" }], staticClass: "dt-attachment-carousel__arrow dt-attachment-carousel__arrow--right", attrs: { tabindex: "-1", "aria-label": e.rightArrowAriaLabel, circle: "", size: "xs", importance: "clear" }, on: { click: e.rightScroll }, scopedSlots: e._u([{ key: "icon", fn: function() {
234
+ return [t("dt-icon", { attrs: { name: "arrow-right", size: "100" } })];
235
+ }, proxy: !0 }]) })], 1);
236
+ }, L = [], y = /* @__PURE__ */ i(
237
+ v,
238
+ A,
239
+ L,
240
+ !1,
241
+ null,
242
+ null,
243
+ null,
244
+ null
245
+ );
246
+ const F = y.exports;
247
+ export {
248
+ F as DtRecipeAttachmentCarousel
249
+ };
250
+ //# sourceMappingURL=attachment-carousel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-carousel.js","sources":["../../recipes/conversation_view/attachment_carousel/media_components/progress_bar.vue","../../recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue","../../recipes/conversation_view/attachment_carousel/attachment_carousel.vue"],"sourcesContent":["<script>\nexport default {\n name: 'DtProgressBar',\n props: {\n progressbarAriaLabel: {\n type: String,\n required: true,\n },\n\n progress: {\n type: Number,\n default: 20,\n },\n },\n\n data: () => ({\n circleCircumference: 50,\n }),\n\n computed: {\n cssVars () {\n return {\n '--stroke-dashoffset':\n (this.circleCircumference - (this.circleCircumference * this.progress / 100)),\n\n '--stroke-dasharray': this.circleCircumference,\n };\n },\n },\n\n mounted () {\n this.circleCircumference = this.$refs.progressbarCircle.getTotalLength();\n },\n};\n</script>\n\n<template>\n <div\n role=\"progressbar\"\n :aria-label=\"progressbarAriaLabel\"\n tabindex=\"-1\"\n :aria-valuenow=\"progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <svg\n class=\"progress-bar\"\n :style=\"cssVars\"\n >\n <circle\n ref=\"progressbarCircle\"\n r=\"8\"\n cx=\"12\"\n cy=\"12\"\n class=\"progress-bar__circle\"\n />\n <circle\n r=\"8\"\n cx=\"12\"\n cy=\"12\"\n class=\"progress-bar__circle\"\n />\n </svg>\n </div>\n</template>\n\n<style lang=\"less\">\n.progress-bar {\n width: var(--dt-size-550);\n height: var(--dt-size-550);\n}\n\n.progress-bar__circle {\n fill: none;\n stroke-width: 2;\n stroke-dasharray: var(--stroke-dasharray);\n}\n\n.progress-bar__circle:nth-child(1) {\n stroke-dashoffset: 0;\n stroke: var(--dt-color-black-100);\n}\n\n.progress-bar__circle:nth-child(2) {\n stroke-dashoffset: var(--stroke-dashoffset);\n stroke: var(--dt-color-purple-500);\n transition: stroke-dashoffset 500ms linear;\n}\n</style>\n","<template>\n <li\n class=\"dt-attachment-image\"\n >\n <dt-image-viewer\n image-button-class=\"dt-attachment-image__image-viewer\"\n :image-src=\"mediaItem.path\"\n :image-alt=\"mediaItem.altText\"\n :close-aria-label=\"closeAriaLabel\"\n :aria-label=\"clickToOpenAriaLabel\"\n />\n\n <!-- Loader / Close button -->\n <div\n class=\"dt-attachment-image__top-right\"\n >\n <dt-progress-bar\n v-if=\"mediaItem.isUploading\"\n class=\"dt-attachment-image__progress-bar\"\n :progress=\"mediaItem.progress\"\n :progressbar-aria-label=\"progressbarAriaLabel\"\n />\n <dt-button\n :id=\"`closeButton-${index}`\"\n tabindex=\"0\"\n class=\"dt-attachment-image__close-button\"\n circle\n size=\"xs\"\n importance=\"clear\"\n :aria-label=\"closeAriaLabel\"\n @click=\"removeMediaItem(index)\"\n >\n <template #icon>\n <dt-icon\n name=\"close\"\n size=\"200\"\n />\n </template>\n </dt-button>\n </div>\n </li>\n</template>\n\n<script>\nimport { DtImageViewer } from '@/components/image_viewer';\nimport { DtButton } from '@/components/button';\nimport { DtIcon } from '@/components/icon';\n\nimport DtProgressBar from './progress_bar.vue';\n\nexport default {\n name: 'DtImageCarousel',\n\n components: {\n DtImageViewer,\n DtButton,\n DtIcon,\n DtProgressBar,\n },\n\n props: {\n mediaItem: {\n type: Object,\n required: true,\n },\n\n index: {\n type: Number,\n required: true,\n },\n\n closeAriaLabel: {\n type: String,\n required: true,\n },\n\n clickToOpenAriaLabel: {\n type: String,\n required: true,\n },\n\n progressbarAriaLabel: {\n type: String,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when media close button is clicked to remove the image\n *\n * @event remove-media\n * @type {Number}\n */\n 'remove-media',\n ],\n\n methods: {\n removeMediaItem (index) {\n this.$emit('remove-media', index);\n },\n },\n};\n</script>\n\n<style lang=\"less\">\n.dt-attachment-image {\n position: relative;\n\n &:focus-within .dt-attachment-image__close-button, &:hover .dt-attachment-image__close-button {\n opacity: 1;\n }\n}\n.dt-attachment-image__image-viewer {\n height: var(--dt-size-700);\n width: var(--dt-size-700);\n border: var(--dt-space-100) solid;\n border-radius: var(--br4);\n border-width: var(--dt-size-350);\n border-color: var(--dt-color-border-subtle);\n object-fit: cover;\n}\n.dt-attachment-image__top-right {\n position: absolute;\n top: var(--dt-size-100);\n right: var(--dt-size-100);\n}\n.dt-attachment-image__close-button {\n opacity: 0;\n position: absolute;\n top: inherit;\n right: inherit;\n color: var(--dt-color-neutral-white);\n background-color: var(--dt-color-black-400);\n border: var(--dt-space-100) solid;\n border-width: var(--dt-size-200);\n border-color: var(--dt-color-neutral-white);\n}\n.dt-attachment-image__progress-bar {\n position: absolute;\n top: inherit;\n right: inherit;\n background-color: var(--dt-color-neutral-white);\n border-radius: 50%;\n display: flex;\n transform: rotate(-90deg);\n border: var(--dt-space-100) solid;\n border-width: var(--dt-size-200);\n border-color: var(--dt-color-border-subtle);\n}\n</style>\n","<template>\n <div\n class=\"dt-attachment-carousel\"\n role=\"presentation\"\n >\n <ul\n v-if=\"mediaList.length > 0\"\n ref=\"carousel\"\n class=\"dt-attachment-carousel__media-list\"\n @scroll=\"handleScroll\"\n >\n <!-- media list -->\n <component\n :is=\"mediaComponent(mediaItem.type)\"\n v-for=\"(mediaItem, index) in filteredMediaList\"\n :key=\"`media-${index}`\"\n :index=\"index\"\n :media-item=\"mediaItem\"\n :close-aria-label=\"closeAriaLabel\"\n :click-to-open-aria-label=\"clickToOpenAriaLabel\"\n :progressbar-aria-label=\"progressbarAriaLabel\"\n @remove-media=\"removeMediaItem(index)\"\n @focusin=\"onItemFocus\"\n />\n </ul>\n\n <!-- Carousel Arrows -->\n <dt-button\n v-show=\"showLeftArrow\"\n tabindex=\"-1\"\n :aria-label=\"leftArrowAriaLabel\"\n class=\"dt-attachment-carousel__arrow dt-attachment-carousel__arrow--left\"\n circle\n size=\"xs\"\n importance=\"clear\"\n @click=\"leftScroll\"\n >\n <template #icon>\n <dt-icon\n name=\"arrow-left\"\n size=\"100\"\n />\n </template>\n </dt-button>\n <dt-button\n v-show=\"showRightArrow\"\n tabindex=\"-1\"\n :aria-label=\"rightArrowAriaLabel\"\n class=\"dt-attachment-carousel__arrow dt-attachment-carousel__arrow--right\"\n circle\n size=\"xs\"\n importance=\"clear\"\n @click=\"rightScroll\"\n >\n <template #icon>\n <dt-icon\n name=\"arrow-right\"\n size=\"100\"\n />\n </template>\n </dt-button>\n </div>\n</template>\n\n<script>\nimport { DtIcon } from '@/components/icon';\nimport { DtButton } from '@/components/button';\n\nimport DtImageCarousel from './media_components/image_carousel.vue';\n\nconst MEDIA_ITEM_WIDTH = 64;\n\nexport default {\n name: 'DtRecipeAttachmentCarousel',\n\n components: {\n DtButton,\n DtIcon,\n DtImageCarousel,\n },\n\n mixins: [],\n\n /* inheritAttrs: false is generally an option we want to set on library\n components. This allows any attributes passed in that are not recognized\n as props to be passed down to another element or component using v-bind:$attrs\n more info: https://vuejs.org/v2/api/#inheritAttrs */\n // inheritAttrs: false,\n\n props: {\n /**\n * media - object array of media objects\n * @type {Array}\n *\n * Object: {\n * path: String,\n * altText: String | null,\n * }\n */\n mediaList: {\n type: Array,\n default: () => [],\n },\n\n closeAriaLabel: {\n type: String,\n required: true,\n },\n\n clickToOpenAriaLabel: {\n type: String,\n required: true,\n },\n\n progressbarAriaLabel: {\n type: String,\n required: true,\n },\n\n leftArrowAriaLabel: {\n type: String,\n required: true,\n },\n\n rightArrowAriaLabel: {\n type: String,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when popover is shown or hidden\n *\n * @event remove-media\n * @type {Number}\n */\n 'remove-media',\n ],\n\n data () {\n return {\n showCloseButton: {},\n showRightArrow: true,\n showLeftArrow: false,\n isMounted: false,\n };\n },\n\n computed: {\n filteredMediaList () {\n return this.mediaList.filter((mediaItem) => mediaItem.type === 'image' || mediaItem.type === 'video');\n },\n },\n\n mounted: function () {\n this.showLeftArrow = this.$refs.carousel.scrollLeft > 0;\n this.showRightArrow = this.$refs.carousel.scrollWidth > this.$refs.carousel.clientWidth;\n },\n\n methods: {\n onItemFocus (e) {\n e.currentTarget.scrollIntoView({ behavior: 'smooth' });\n },\n\n mediaComponent (type) {\n switch (type) {\n case 'image':\n return 'dt-image-carousel';\n default:\n // unknown media type\n return null;\n }\n },\n\n removeMediaItem (index) {\n // make sure the carousel arrows is updated. 64 is the width of each media item\n this.showRightArrow = this.$refs.carousel.scrollWidth > (this.$refs.carousel.clientWidth + MEDIA_ITEM_WIDTH);\n this.$emit('remove-media', index);\n },\n\n closeButton (val, index) {\n this.showCloseButton[index] = val;\n },\n\n handleScroll () {\n const carousel = this.$refs.carousel;\n this.showLeftArrow = carousel.scrollLeft > 0;\n this.showRightArrow = !((carousel.scrollLeft + carousel.clientWidth) === carousel.scrollWidth);\n },\n\n leftScroll () {\n this.$refs.carousel.scrollTo({\n left: this.$refs.carousel.scrollLeft - 100,\n behavior: 'smooth',\n });\n },\n\n rightScroll () {\n this.$refs.carousel.scrollTo({\n left: this.$refs.carousel.scrollLeft + 100,\n behavior: 'smooth',\n });\n },\n },\n};\n</script>\n\n<style lang=\"less\">\n.dt-attachment-carousel {\n position: relative;\n max-height: 100px;\n width: var(--dt-space-1000);\n}\n\n.dt-attachment-carousel__media-list {\n display: flex;\n flex-direction: row;\n padding-left: 0px;\n overflow-x: scroll;\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.dt-attachment-carousel__arrow {\n position: absolute;\n opacity: 0;\n\n .dt-attachment-carousel:hover & {\n opacity: 1;\n }\n background-color: var(--dt-color-neutral-white);\n top: var(--dt-space-30-percent);\n border: var(--dt-space-100) solid;\n border-width: var(--dt-size-100);\n border-color: var(--bc-default);\n}\n.dt-attachment-carousel__arrow--left {\n left: var(--dt-space-300);\n}\n.dt-attachment-carousel__arrow--right {\n right: var(--dt-space-300);\n}\n\n.dt-attachment-carousel__image-viewer {\n height: var(--dt-size-700);\n width: var(--dt-size-700);\n border-radius: var(--br4);\n border: var(--dt-space-100) solid;\n border-width: var(--dt-size-350);\n border-color: var(--dt-color-border-subtle);\n}\n</style>\n"],"names":["_sfc_main","DtImageViewer","DtButton","DtIcon","DtProgressBar","index","MEDIA_ITEM_WIDTH","DtImageCarousel","mediaItem","e","type","val","carousel"],"mappings":"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"}
@@ -0,0 +1,369 @@
1
+ import { getUniqueString as l, getRandomElement as o } from "./utils.js";
2
+ import d from "@dialpad/dialtone-icons/icons.json";
3
+ import { I as c } from "../chunks/icon_constants-OpYAAKwF.js";
4
+ import { n as m } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.js";
5
+ import { DtPresence as u } from "./presence.js";
6
+ import { DtIcon as v } from "./icon.js";
7
+ import "./constants.js";
8
+ import "vue";
9
+ import "@dialpad/dialtone-icons/vue2";
10
+ import "./skeleton.js";
11
+ const s = {
12
+ xs: "d-avatar--xs",
13
+ sm: "d-avatar--sm",
14
+ md: "d-avatar--md",
15
+ lg: "d-avatar--lg",
16
+ xl: "d-avatar--xl"
17
+ }, f = {
18
+ default: "",
19
+ icon: "d-avatar__icon",
20
+ initials: "d-avatar__initials"
21
+ }, p = {
22
+ md: "d-avatar__presence--md",
23
+ lg: "d-avatar__presence--lg"
24
+ }, i = {
25
+ NONE: "",
26
+ BUSY: "busy",
27
+ AWAY: "away",
28
+ OFFLINE: "offline",
29
+ ACTIVE: "active"
30
+ }, _ = {
31
+ xs: "100",
32
+ sm: "200",
33
+ md: "300",
34
+ lg: "500",
35
+ xl: "600"
36
+ }, g = [
37
+ "100",
38
+ "200",
39
+ "300",
40
+ "400",
41
+ "500",
42
+ "600",
43
+ "700",
44
+ "800",
45
+ "900",
46
+ "1000",
47
+ "1100",
48
+ "1200",
49
+ "1300",
50
+ "1400",
51
+ "1500",
52
+ "1600",
53
+ "1700",
54
+ "1800"
55
+ ], n = (a) => a > 1;
56
+ function I() {
57
+ return [void 0, ...d];
58
+ }
59
+ const h = (a) => {
60
+ if (typeof a != "string" || !a.trim())
61
+ return "";
62
+ const e = a.trim().split(/\s+/g);
63
+ return e.length === 1 ? e.join("").substring(0, 2) : e.filter((t, r) => r === 0 || r === e.length - 1).map((t) => t.slice(0, 1).toUpperCase()).join("");
64
+ }, S = I(), y = {
65
+ name: "DtAvatar",
66
+ components: { DtPresence: u, DtIcon: v },
67
+ inheritAttrs: !1,
68
+ props: {
69
+ /**
70
+ * Id of the avatar content wrapper element
71
+ */
72
+ id: {
73
+ type: String,
74
+ default() {
75
+ return l();
76
+ }
77
+ },
78
+ /**
79
+ * Pass in a seed to get the random color generation based on that string. For example if you pass in a
80
+ * user ID as the string it will return the same randomly generated colors every time for that user.
81
+ */
82
+ seed: {
83
+ type: String,
84
+ default: void 0
85
+ },
86
+ /**
87
+ * Set the avatar background to a specific color. If undefined will randomize the color which can be deterministic
88
+ * if the seed prop is set.
89
+ */
90
+ color: {
91
+ type: String,
92
+ default: void 0
93
+ },
94
+ /**
95
+ * The size of the avatar
96
+ * @values xs, sm, md, lg, xl
97
+ */
98
+ size: {
99
+ type: String,
100
+ default: "md",
101
+ validator: (a) => Object.keys(s).includes(a)
102
+ },
103
+ /**
104
+ * Used to customize the avatar container
105
+ */
106
+ avatarClass: {
107
+ type: [String, Array, Object],
108
+ default: ""
109
+ },
110
+ /**
111
+ * Set classes on the avatar canvas. Wrapper around the core avatar image.
112
+ */
113
+ canvasClass: {
114
+ type: [String, Array, Object],
115
+ default: ""
116
+ },
117
+ /**
118
+ * Pass through classes. Used to customize the avatar icon
119
+ */
120
+ iconClass: {
121
+ type: [String, Array, Object],
122
+ default: ""
123
+ },
124
+ /**
125
+ * Determines whether to show the presence indicator for
126
+ * Avatar - accepts PRESENCE_STATES values: 'busy', 'away', 'offline',
127
+ * or 'active'. By default, it's null and nothing is shown.
128
+ * @values null, busy, away, offline, active
129
+ */
130
+ presence: {
131
+ type: String,
132
+ default: i.NONE,
133
+ validator: (a) => Object.values(i).includes(a)
134
+ },
135
+ /**
136
+ * A set of props to be passed into the presence component.
137
+ */
138
+ presenceProps: {
139
+ type: Object,
140
+ default: () => ({})
141
+ },
142
+ /**
143
+ * Determines whether to show a group avatar.
144
+ * Limit to 2 digits max, more than 99 will be rendered as “99+”.
145
+ * if the number is 1 or less it would just show the regular avatar as if group had not been set.
146
+ */
147
+ group: {
148
+ type: Number,
149
+ default: void 0,
150
+ validator: (a) => n(a)
151
+ },
152
+ /**
153
+ * The icon that overlays the avatar
154
+ */
155
+ overlayIcon: {
156
+ type: String,
157
+ default: ""
158
+ },
159
+ /**
160
+ * The text that overlays the avatar
161
+ */
162
+ overlayText: {
163
+ type: String,
164
+ default: ""
165
+ },
166
+ /**
167
+ * Used to customize the avatar overlay
168
+ */
169
+ overlayClass: {
170
+ type: [String, Array, Object],
171
+ default: ""
172
+ },
173
+ /**
174
+ * Source of the image
175
+ */
176
+ imageSrc: {
177
+ type: String,
178
+ default: ""
179
+ },
180
+ /**
181
+ * Alt attribute of the image, required if imageSrc is provided.
182
+ * Can be set to '' (empty string) if the image is described
183
+ * in text nearby
184
+ */
185
+ imageAlt: {
186
+ type: String,
187
+ default: void 0
188
+ },
189
+ /**
190
+ * Icon name to be displayed on the avatar
191
+ */
192
+ iconName: {
193
+ type: String,
194
+ default: void 0,
195
+ validator: (a) => S.includes(a)
196
+ },
197
+ /**
198
+ * Icon size to be displayed on the avatar
199
+ * @values 100, 200, 300, 400, 500, 600, 700, 800
200
+ */
201
+ iconSize: {
202
+ type: String,
203
+ default: "",
204
+ validator: (a) => !a || Object.keys(c).includes(a)
205
+ },
206
+ /**
207
+ * Full name used to extract initials.
208
+ */
209
+ fullName: {
210
+ type: String,
211
+ default: ""
212
+ },
213
+ /**
214
+ * Makes the avatar focusable and clickable,
215
+ * emits a click event when clicked.
216
+ */
217
+ clickable: {
218
+ type: Boolean,
219
+ default: !1
220
+ },
221
+ /**
222
+ * Descriptive label for the icon.
223
+ * To avoid a11y issues, set this prop if clickable and iconName are set.
224
+ */
225
+ iconAriaLabel: {
226
+ type: String,
227
+ default: void 0
228
+ }
229
+ },
230
+ emits: [
231
+ /**
232
+ * Avatar click event
233
+ *
234
+ * @event click
235
+ * @type {PointerEvent | KeyboardEvent}
236
+ */
237
+ "click"
238
+ ],
239
+ data() {
240
+ return {
241
+ AVATAR_SIZE_MODIFIERS: s,
242
+ AVATAR_KIND_MODIFIERS: f,
243
+ AVATAR_PRESENCE_SIZE_MODIFIERS: p,
244
+ AVATAR_ICON_SIZES: _,
245
+ imageLoadedSuccessfully: null,
246
+ formattedInitials: "",
247
+ initializing: !1
248
+ };
249
+ },
250
+ computed: {
251
+ isNotIconType() {
252
+ return !this.iconName;
253
+ },
254
+ avatarClasses() {
255
+ return [
256
+ "d-avatar",
257
+ s[this.validatedSize],
258
+ this.avatarClass,
259
+ {
260
+ "d-avatar--group": this.showGroup,
261
+ [`d-avatar--color-${this.getColor()}`]: this.isNotIconType,
262
+ "d-avatar--clickable": this.clickable
263
+ }
264
+ ];
265
+ },
266
+ overlayClasses() {
267
+ return [
268
+ "d-avatar__overlay",
269
+ this.overlayClass
270
+ ];
271
+ },
272
+ showGroup() {
273
+ return n(this.group);
274
+ },
275
+ formattedGroup() {
276
+ return this.group > 99 ? "99+" : this.group;
277
+ },
278
+ validatedSize() {
279
+ return this.group ? "xs" : this.size;
280
+ },
281
+ showImage() {
282
+ return this.imageLoadedSuccessfully !== !1 && this.imageSrc;
283
+ }
284
+ },
285
+ watch: {
286
+ fullName: {
287
+ immediate: !0,
288
+ handler() {
289
+ this.formatInitials();
290
+ }
291
+ },
292
+ size: {
293
+ immediate: !0,
294
+ handler() {
295
+ this.formatInitials();
296
+ }
297
+ },
298
+ group: {
299
+ immediate: !0,
300
+ handler() {
301
+ this.formatInitials();
302
+ }
303
+ },
304
+ imageSrc(a) {
305
+ this.imageLoadedSuccessfully = null, a && (this.validateProps(), this.setImageListeners());
306
+ }
307
+ },
308
+ mounted() {
309
+ this.validateProps(), this.setImageListeners();
310
+ },
311
+ methods: {
312
+ async setImageListeners() {
313
+ await this.$nextTick();
314
+ const a = this.$refs.avatarImage;
315
+ a && (a.addEventListener("load", () => this._loadedImageEventHandler(a), { once: !0 }), a.addEventListener("error", () => this._erroredImageEventHandler(a), { once: !0 }));
316
+ },
317
+ formatInitials() {
318
+ const a = h(this.fullName);
319
+ this.validatedSize === "xs" ? this.formattedInitials = "" : this.validatedSize === "sm" ? this.formattedInitials = a[0] : this.formattedInitials = a;
320
+ },
321
+ getColor() {
322
+ return this.color ?? o(g, this.seed);
323
+ },
324
+ _loadedImageEventHandler(a) {
325
+ this.imageLoadedSuccessfully = !0, a.classList.remove("d-d-none");
326
+ },
327
+ _erroredImageEventHandler(a) {
328
+ this.imageLoadedSuccessfully = !1, a.classList.add("d-d-none");
329
+ },
330
+ validateProps() {
331
+ this.imageSrc && this.imageAlt === void 0 && console.error('image-alt required if image-src is provided. Can be set to "" (empty string) if the image is described in text nearby');
332
+ },
333
+ handleClick(a) {
334
+ this.clickable && this.$emit("click", a);
335
+ }
336
+ }
337
+ };
338
+ var A = function() {
339
+ var e = this, t = e._self._c;
340
+ return t(e.clickable ? "button" : "div", { tag: "component", class: e.avatarClasses, attrs: { id: e.id, "data-qa": "dt-avatar" }, on: { click: e.handleClick } }, [t("div", { ref: "canvas", class: [
341
+ e.canvasClass,
342
+ "d-avatar__canvas",
343
+ { "d-avatar--image-loaded": e.imageLoadedSuccessfully }
344
+ ] }, [e.showImage ? t("img", { ref: "avatarImage", staticClass: "d-avatar__image", attrs: { "data-qa": "dt-avatar-image", src: e.imageSrc, alt: e.imageAlt } }) : e.iconName ? t("dt-icon", { class: [e.iconClass, e.AVATAR_KIND_MODIFIERS.icon], attrs: { name: e.iconName, "aria-label": e.iconAriaLabel, size: e.iconSize || e.AVATAR_ICON_SIZES[e.size], "data-qa": "dt-avatar-icon" } }) : t("span", { class: [e.AVATAR_KIND_MODIFIERS.initials] }, [e._v(" " + e._s(e.formattedInitials) + " ")])], 1), e.overlayIcon || e.overlayText ? t("div", { class: e.overlayClasses }, [e.overlayIcon ? t("dt-icon", { staticClass: "d-avatar__overlay-icon", attrs: { name: e.overlayIcon } }) : e.overlayText ? t("p", { staticClass: "d-avatar__overlay-text" }, [e._v(" " + e._s(e.overlayText) + " ")]) : e._e()], 1) : e._e(), e.showGroup ? t("span", { staticClass: "d-avatar__count", attrs: { "data-qa": "dt-avatar-count" } }, [e._v(e._s(e.formattedGroup))]) : e._e(), e.presence && !e.showGroup ? t("dt-presence", e._b({ class: [
345
+ "d-avatar__presence",
346
+ e.AVATAR_PRESENCE_SIZE_MODIFIERS[e.size]
347
+ ], attrs: { presence: e.presence, "data-qa": "dt-presence" } }, "dt-presence", e.presenceProps, !1)) : e._e()], 1);
348
+ }, E = [], C = /* @__PURE__ */ m(
349
+ y,
350
+ A,
351
+ E,
352
+ !1,
353
+ null,
354
+ null,
355
+ null,
356
+ null
357
+ );
358
+ const V = C.exports;
359
+ export {
360
+ g as AVATAR_COLORS,
361
+ n as AVATAR_GROUP_VALIDATOR,
362
+ _ as AVATAR_ICON_SIZES,
363
+ f as AVATAR_KIND_MODIFIERS,
364
+ p as AVATAR_PRESENCE_SIZE_MODIFIERS,
365
+ i as AVATAR_PRESENCE_STATES,
366
+ s as AVATAR_SIZE_MODIFIERS,
367
+ V as DtAvatar
368
+ };
369
+ //# sourceMappingURL=avatar.js.map