@dialpad/dialtone 9.69.0 → 9.70.0-beta.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 (228) hide show
  1. package/dist/tokens/doc.json +5884 -5884
  2. package/dist/vue2/chunks/{icon_constants-Dy4MEUJL.js → icon_constants-H9ahUVCG.js} +2 -2
  3. package/dist/vue2/chunks/icon_constants-H9ahUVCG.js.map +1 -0
  4. package/dist/vue2/chunks/{icon_constants-QYpmdE0R.js → icon_constants-da57m7BZ.js} +2 -2
  5. package/dist/vue2/chunks/icon_constants-da57m7BZ.js.map +1 -0
  6. package/dist/vue2/dialtone-vue.cjs +3 -3
  7. package/dist/vue2/dialtone-vue.js +3 -3
  8. package/dist/vue2/lib/attachment-carousel.cjs +2 -2
  9. package/dist/vue2/lib/attachment-carousel.js +2 -2
  10. package/dist/vue2/lib/avatar.cjs +2 -2
  11. package/dist/vue2/lib/avatar.cjs.map +1 -1
  12. package/dist/vue2/lib/avatar.js +2 -2
  13. package/dist/vue2/lib/avatar.js.map +1 -1
  14. package/dist/vue2/lib/badge.cjs +2 -2
  15. package/dist/vue2/lib/badge.js +2 -2
  16. package/dist/vue2/lib/banner.cjs +2 -2
  17. package/dist/vue2/lib/banner.js +2 -2
  18. package/dist/vue2/lib/callbar-button-with-popover.cjs +2 -2
  19. package/dist/vue2/lib/callbar-button-with-popover.js +2 -2
  20. package/dist/vue2/lib/callbox.cjs +2 -2
  21. package/dist/vue2/lib/callbox.js +2 -2
  22. package/dist/vue2/lib/chip.cjs +2 -2
  23. package/dist/vue2/lib/chip.js +2 -2
  24. package/dist/vue2/lib/collapsible.cjs +2 -2
  25. package/dist/vue2/lib/collapsible.js +2 -2
  26. package/dist/vue2/lib/combobox-multi-select.cjs +2 -2
  27. package/dist/vue2/lib/combobox-multi-select.js +2 -2
  28. package/dist/vue2/lib/combobox-with-popover.cjs +2 -2
  29. package/dist/vue2/lib/combobox-with-popover.js +2 -2
  30. package/dist/vue2/lib/combobox.cjs +2 -2
  31. package/dist/vue2/lib/combobox.js +2 -2
  32. package/dist/vue2/lib/contact-centers-row.cjs +2 -2
  33. package/dist/vue2/lib/contact-centers-row.js +2 -2
  34. package/dist/vue2/lib/contact-info.cjs +2 -2
  35. package/dist/vue2/lib/contact-info.js +2 -2
  36. package/dist/vue2/lib/contact-row.cjs +2 -2
  37. package/dist/vue2/lib/contact-row.js +2 -2
  38. package/dist/vue2/lib/datepicker.cjs +2 -2
  39. package/dist/vue2/lib/datepicker.js +2 -2
  40. package/dist/vue2/lib/dropdown.cjs +2 -2
  41. package/dist/vue2/lib/dropdown.js +2 -2
  42. package/dist/vue2/lib/editor.cjs +2 -2
  43. package/dist/vue2/lib/editor.js +2 -2
  44. package/dist/vue2/lib/emoji-picker.cjs +2 -2
  45. package/dist/vue2/lib/emoji-picker.js +2 -2
  46. package/dist/vue2/lib/emoji-row.cjs +2 -2
  47. package/dist/vue2/lib/emoji-row.js +2 -2
  48. package/dist/vue2/lib/emoji-text-wrapper.cjs +2 -2
  49. package/dist/vue2/lib/emoji-text-wrapper.js +2 -2
  50. package/dist/vue2/lib/emoji.cjs +2 -2
  51. package/dist/vue2/lib/emoji.js +2 -2
  52. package/dist/vue2/lib/empty-state.cjs +3 -3
  53. package/dist/vue2/lib/empty-state.js +3 -3
  54. package/dist/vue2/lib/feed-item-row.cjs +2 -2
  55. package/dist/vue2/lib/feed-item-row.js +2 -2
  56. package/dist/vue2/lib/feed-pill.cjs +2 -2
  57. package/dist/vue2/lib/feed-pill.js +2 -2
  58. package/dist/vue2/lib/general-row.cjs +2 -2
  59. package/dist/vue2/lib/general-row.js +2 -2
  60. package/dist/vue2/lib/group-row.cjs +2 -2
  61. package/dist/vue2/lib/group-row.js +2 -2
  62. package/dist/vue2/lib/grouped-chip.cjs +2 -2
  63. package/dist/vue2/lib/grouped-chip.js +2 -2
  64. package/dist/vue2/lib/hovercard.cjs +2 -2
  65. package/dist/vue2/lib/hovercard.js +2 -2
  66. package/dist/vue2/lib/icon.cjs +2 -2
  67. package/dist/vue2/lib/icon.js +2 -2
  68. package/dist/vue2/lib/illustration.cjs +1 -1
  69. package/dist/vue2/lib/illustration.cjs.map +1 -1
  70. package/dist/vue2/lib/illustration.js +1 -1
  71. package/dist/vue2/lib/illustration.js.map +1 -1
  72. package/dist/vue2/lib/image-viewer.cjs +2 -2
  73. package/dist/vue2/lib/image-viewer.js +2 -2
  74. package/dist/vue2/lib/ivr-node.cjs +2 -2
  75. package/dist/vue2/lib/ivr-node.js +2 -2
  76. package/dist/vue2/lib/keyboard-shortcut.cjs +2 -2
  77. package/dist/vue2/lib/keyboard-shortcut.js +2 -2
  78. package/dist/vue2/lib/list-item.cjs +2 -2
  79. package/dist/vue2/lib/list-item.js +2 -2
  80. package/dist/vue2/lib/message-input.cjs +2 -2
  81. package/dist/vue2/lib/message-input.js +2 -2
  82. package/dist/vue2/lib/modal.cjs +2 -2
  83. package/dist/vue2/lib/modal.js +2 -2
  84. package/dist/vue2/lib/notice.cjs +2 -2
  85. package/dist/vue2/lib/notice.js +2 -2
  86. package/dist/vue2/lib/pagination.cjs +2 -2
  87. package/dist/vue2/lib/pagination.js +2 -2
  88. package/dist/vue2/lib/popover.cjs +2 -2
  89. package/dist/vue2/lib/popover.js +2 -2
  90. package/dist/vue2/lib/rich-text-editor.cjs +2 -2
  91. package/dist/vue2/lib/rich-text-editor.js +2 -2
  92. package/dist/vue2/lib/settings-menu-button.cjs +2 -2
  93. package/dist/vue2/lib/settings-menu-button.js +2 -2
  94. package/dist/vue2/lib/split-button.cjs +2 -2
  95. package/dist/vue2/lib/split-button.js +2 -2
  96. package/dist/vue2/lib/toast.cjs +2 -2
  97. package/dist/vue2/lib/toast.js +2 -2
  98. package/dist/vue2/lib/unread-pill.cjs +2 -2
  99. package/dist/vue2/lib/unread-pill.js +2 -2
  100. package/dist/vue3/chunks/{icon_constants-Dy4MEUJL.js → icon_constants-H9ahUVCG.js} +2 -2
  101. package/dist/vue3/chunks/icon_constants-H9ahUVCG.js.map +1 -0
  102. package/dist/vue3/chunks/{icon_constants-QYpmdE0R.js → icon_constants-da57m7BZ.js} +2 -2
  103. package/dist/vue3/chunks/icon_constants-da57m7BZ.js.map +1 -0
  104. package/dist/vue3/component-documentation.json +1 -1
  105. package/dist/vue3/dialtone-vue.cjs +3 -3
  106. package/dist/vue3/dialtone-vue.js +3 -3
  107. package/dist/vue3/lib/attachment-carousel.cjs +2 -2
  108. package/dist/vue3/lib/attachment-carousel.js +2 -2
  109. package/dist/vue3/lib/avatar.cjs +32 -46
  110. package/dist/vue3/lib/avatar.cjs.map +1 -1
  111. package/dist/vue3/lib/avatar.js +34 -48
  112. package/dist/vue3/lib/avatar.js.map +1 -1
  113. package/dist/vue3/lib/badge.cjs +2 -2
  114. package/dist/vue3/lib/badge.js +2 -2
  115. package/dist/vue3/lib/banner.cjs +2 -2
  116. package/dist/vue3/lib/banner.js +2 -2
  117. package/dist/vue3/lib/callbar-button-with-popover.cjs +2 -2
  118. package/dist/vue3/lib/callbar-button-with-popover.js +2 -2
  119. package/dist/vue3/lib/callbox.cjs +15 -7
  120. package/dist/vue3/lib/callbox.cjs.map +1 -1
  121. package/dist/vue3/lib/callbox.js +16 -8
  122. package/dist/vue3/lib/callbox.js.map +1 -1
  123. package/dist/vue3/lib/chip.cjs +2 -2
  124. package/dist/vue3/lib/chip.js +2 -2
  125. package/dist/vue3/lib/collapsible.cjs +2 -2
  126. package/dist/vue3/lib/collapsible.js +2 -2
  127. package/dist/vue3/lib/combobox-multi-select.cjs +2 -2
  128. package/dist/vue3/lib/combobox-multi-select.js +2 -2
  129. package/dist/vue3/lib/combobox-with-popover.cjs +2 -2
  130. package/dist/vue3/lib/combobox-with-popover.js +2 -2
  131. package/dist/vue3/lib/combobox.cjs +2 -2
  132. package/dist/vue3/lib/combobox.js +2 -2
  133. package/dist/vue3/lib/contact-centers-row.cjs +2 -2
  134. package/dist/vue3/lib/contact-centers-row.js +2 -2
  135. package/dist/vue3/lib/contact-info.cjs +29 -11
  136. package/dist/vue3/lib/contact-info.cjs.map +1 -1
  137. package/dist/vue3/lib/contact-info.js +30 -12
  138. package/dist/vue3/lib/contact-info.js.map +1 -1
  139. package/dist/vue3/lib/contact-row.cjs +16 -11
  140. package/dist/vue3/lib/contact-row.cjs.map +1 -1
  141. package/dist/vue3/lib/contact-row.js +17 -12
  142. package/dist/vue3/lib/contact-row.js.map +1 -1
  143. package/dist/vue3/lib/datepicker.cjs +2 -2
  144. package/dist/vue3/lib/datepicker.js +2 -2
  145. package/dist/vue3/lib/dropdown.cjs +2 -2
  146. package/dist/vue3/lib/dropdown.js +2 -2
  147. package/dist/vue3/lib/editor.cjs +2 -2
  148. package/dist/vue3/lib/editor.js +2 -2
  149. package/dist/vue3/lib/emoji-picker.cjs +2 -2
  150. package/dist/vue3/lib/emoji-picker.js +2 -2
  151. package/dist/vue3/lib/emoji-row.cjs +2 -2
  152. package/dist/vue3/lib/emoji-row.js +2 -2
  153. package/dist/vue3/lib/emoji-text-wrapper.cjs +2 -2
  154. package/dist/vue3/lib/emoji-text-wrapper.js +2 -2
  155. package/dist/vue3/lib/emoji.cjs +2 -2
  156. package/dist/vue3/lib/emoji.js +2 -2
  157. package/dist/vue3/lib/empty-state.cjs +3 -3
  158. package/dist/vue3/lib/empty-state.js +3 -3
  159. package/dist/vue3/lib/feed-item-row.cjs +17 -11
  160. package/dist/vue3/lib/feed-item-row.cjs.map +1 -1
  161. package/dist/vue3/lib/feed-item-row.js +18 -12
  162. package/dist/vue3/lib/feed-item-row.js.map +1 -1
  163. package/dist/vue3/lib/feed-pill.cjs +2 -2
  164. package/dist/vue3/lib/feed-pill.js +2 -2
  165. package/dist/vue3/lib/general-row.cjs +2 -2
  166. package/dist/vue3/lib/general-row.js +2 -2
  167. package/dist/vue3/lib/group-row.cjs +2 -2
  168. package/dist/vue3/lib/group-row.js +2 -2
  169. package/dist/vue3/lib/grouped-chip.cjs +2 -2
  170. package/dist/vue3/lib/grouped-chip.js +2 -2
  171. package/dist/vue3/lib/hovercard.cjs +2 -2
  172. package/dist/vue3/lib/hovercard.js +2 -2
  173. package/dist/vue3/lib/icon.cjs +2 -2
  174. package/dist/vue3/lib/icon.js +2 -2
  175. package/dist/vue3/lib/illustration.cjs +1 -1
  176. package/dist/vue3/lib/illustration.cjs.map +1 -1
  177. package/dist/vue3/lib/illustration.js +1 -1
  178. package/dist/vue3/lib/illustration.js.map +1 -1
  179. package/dist/vue3/lib/image-viewer.cjs +2 -2
  180. package/dist/vue3/lib/image-viewer.js +2 -2
  181. package/dist/vue3/lib/ivr-node.cjs +2 -2
  182. package/dist/vue3/lib/ivr-node.js +2 -2
  183. package/dist/vue3/lib/keyboard-shortcut.cjs +2 -2
  184. package/dist/vue3/lib/keyboard-shortcut.js +2 -2
  185. package/dist/vue3/lib/list-item.cjs +2 -2
  186. package/dist/vue3/lib/list-item.js +2 -2
  187. package/dist/vue3/lib/message-input.cjs +2 -2
  188. package/dist/vue3/lib/message-input.js +2 -2
  189. package/dist/vue3/lib/modal.cjs +2 -2
  190. package/dist/vue3/lib/modal.js +2 -2
  191. package/dist/vue3/lib/notice.cjs +2 -2
  192. package/dist/vue3/lib/notice.js +2 -2
  193. package/dist/vue3/lib/pagination.cjs +2 -2
  194. package/dist/vue3/lib/pagination.js +2 -2
  195. package/dist/vue3/lib/popover.cjs +2 -2
  196. package/dist/vue3/lib/popover.js +2 -2
  197. package/dist/vue3/lib/rich-text-editor.cjs +2 -2
  198. package/dist/vue3/lib/rich-text-editor.js +2 -2
  199. package/dist/vue3/lib/settings-menu-button.cjs +2 -2
  200. package/dist/vue3/lib/settings-menu-button.js +2 -2
  201. package/dist/vue3/lib/split-button.cjs +2 -2
  202. package/dist/vue3/lib/split-button.js +2 -2
  203. package/dist/vue3/lib/toast.cjs +2 -2
  204. package/dist/vue3/lib/toast.js +2 -2
  205. package/dist/vue3/lib/unread-pill.cjs +2 -2
  206. package/dist/vue3/lib/unread-pill.js +2 -2
  207. package/dist/vue3/style.css +49 -49
  208. package/dist/vue3/types/components/avatar/avatar.vue.d.ts +6 -34
  209. package/dist/vue3/types/components/avatar/avatar.vue.d.ts.map +1 -1
  210. package/dist/vue3/types/components/chip/chip.vue.d.ts +1 -1
  211. package/dist/vue3/types/components/collapsible/collapsible.vue.d.ts +1 -1
  212. package/dist/vue3/types/components/split_button/split_button-omega.vue.d.ts +1 -1
  213. package/dist/vue3/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts +1 -1
  214. package/dist/vue3/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +1 -1
  215. package/dist/vue3/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +0 -1
  216. package/dist/vue3/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
  217. package/dist/vue3/types/recipes/item_layout/contact_info/contact_info.vue.d.ts +3 -3
  218. package/dist/vue3/types/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
  219. package/dist/vue3/types/recipes/leftbar/contact_row/contact_row.vue.d.ts +0 -1
  220. package/dist/vue3/types/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
  221. package/dist/vue3/types/recipes/leftbar/general_row/general_row.vue.d.ts +1 -1
  222. package/package.json +2 -2
  223. package/dist/vue2/chunks/icon_constants-Dy4MEUJL.js.map +0 -1
  224. package/dist/vue2/chunks/icon_constants-QYpmdE0R.js.map +0 -1
  225. package/dist/vue3/chunks/icon_constants-Dy4MEUJL.js.map +0 -1
  226. package/dist/vue3/chunks/icon_constants-QYpmdE0R.js.map +0 -1
  227. package/dist/vue3/types/common/storybook_utils.d.ts +0 -25
  228. package/dist/vue3/types/common/storybook_utils.d.ts.map +0 -1
@@ -32,7 +32,7 @@ const lib_emojiTextWrapper = require("./lib/emoji-text-wrapper.cjs");
32
32
  const lib_emptyState = require("./lib/empty-state.cjs");
33
33
  const lib_hovercard = require("./lib/hovercard.cjs");
34
34
  const lib_icon = require("./lib/icon.cjs");
35
- const icon_constants = require("./chunks/icon_constants-QYpmdE0R.js");
35
+ const icon_constants = require("./chunks/icon_constants-da57m7BZ.js");
36
36
  const lib_illustration = require("./lib/illustration.cjs");
37
37
  const lib_imageViewer = require("./lib/image-viewer.cjs");
38
38
  const lib_input = require("./lib/input.cjs");
@@ -96,12 +96,12 @@ const lib_topBannerInfo = require("./lib/top-banner-info.cjs");
96
96
  require("vue");
97
97
  require("date-fns");
98
98
  require("@dialpad/dialtone-emojis");
99
- require("@dialpad/dialtone-icons/icons.json");
100
99
  require("./chunks/_plugin-vue_export-helper-fhnQq0tA.js");
101
100
  require("./chunks/modal-VgxXAQFP.js");
102
101
  require("./chunks/sr_only_close_button-xGrHFjwA.js");
103
102
  require("@dialpad/dialtone-icons/vue3");
104
- require("@dialpad/dialtone-icons/illustrations.json");
103
+ require("@dialpad/dialtone-icons/icons.js");
104
+ require("@dialpad/dialtone-icons/illustrations.js");
105
105
  require("tippy.js");
106
106
  require("@tiptap/vue-3");
107
107
  require("@tiptap/extension-blockquote");
@@ -30,7 +30,7 @@ import { DtEmojiTextWrapper } from "./lib/emoji-text-wrapper.js";
30
30
  import { DtEmptyState, EMPTY_STATE_SIZE_MODIFIERS } from "./lib/empty-state.js";
31
31
  import { DtHovercard } from "./lib/hovercard.js";
32
32
  import { DtIcon } from "./lib/icon.js";
33
- import { ICON_NAMES, ICON_SIZE_MODIFIERS } from "./chunks/icon_constants-Dy4MEUJL.js";
33
+ import { ICON_NAMES, ICON_SIZE_MODIFIERS } from "./chunks/icon_constants-H9ahUVCG.js";
34
34
  import { DtIllustration, ILLUSTRATION_NAMES } from "./lib/illustration.js";
35
35
  import { DtImageViewer } from "./lib/image-viewer.js";
36
36
  import { DtInput, INPUT_SIZES, INPUT_TYPES } from "./lib/input.js";
@@ -94,12 +94,12 @@ import { COLOR_CODES, DtRecipeTopBannerInfo } from "./lib/top-banner-info.js";
94
94
  import "vue";
95
95
  import "date-fns";
96
96
  import "@dialpad/dialtone-emojis";
97
- import "@dialpad/dialtone-icons/icons.json";
98
97
  import "./chunks/_plugin-vue_export-helper-caHeSgYY.js";
99
98
  import "./chunks/modal-XOr4kiNZ.js";
100
99
  import "./chunks/sr_only_close_button-3EdsV-dH.js";
101
100
  import "@dialpad/dialtone-icons/vue3";
102
- import "@dialpad/dialtone-icons/illustrations.json";
101
+ import "@dialpad/dialtone-icons/icons.js";
102
+ import "@dialpad/dialtone-icons/illustrations.js";
103
103
  import "tippy.js";
104
104
  import "@tiptap/vue-3";
105
105
  import "@tiptap/extension-blockquote";
@@ -10,8 +10,8 @@ require("../common/constants.cjs");
10
10
  require("../common/utils.cjs");
11
11
  require("../chunks/link_constants-x8NwdqmA.js");
12
12
  require("@dialpad/dialtone-icons/vue3");
13
- require("../chunks/icon_constants-QYpmdE0R.js");
14
- require("@dialpad/dialtone-icons/icons.json");
13
+ require("../chunks/icon_constants-da57m7BZ.js");
14
+ require("@dialpad/dialtone-icons/icons.js");
15
15
  const _sfc_main$2 = {
16
16
  name: "DtProgressBar",
17
17
  props: {
@@ -8,8 +8,8 @@ import "../common/constants.js";
8
8
  import "../common/utils.js";
9
9
  import "../chunks/link_constants-AfTWrr-n.js";
10
10
  import "@dialpad/dialtone-icons/vue3";
11
- import "../chunks/icon_constants-Dy4MEUJL.js";
12
- import "@dialpad/dialtone-icons/icons.json";
11
+ import "../chunks/icon_constants-H9ahUVCG.js";
12
+ import "@dialpad/dialtone-icons/icons.js";
13
13
  const _sfc_main$2 = {
14
14
  name: "DtProgressBar",
15
15
  props: {
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const common_utils = require("../common/utils.cjs");
4
- const iconNames = require("@dialpad/dialtone-icons/icons.json");
5
- const icon_constants = require("../chunks/icon_constants-QYpmdE0R.js");
4
+ const icon_constants = require("../chunks/icon_constants-da57m7BZ.js");
6
5
  const vue = require("vue");
7
6
  const _pluginVue_exportHelper = require("../chunks/_plugin-vue_export-helper-fhnQq0tA.js");
8
7
  const lib_presence = require("./presence.cjs");
9
- const lib_icon = require("./icon.cjs");
10
8
  require("../common/constants.cjs");
11
- require("@dialpad/dialtone-icons/vue3");
9
+ require("@dialpad/dialtone-icons/icons.js");
12
10
  const AVATAR_SIZE_MODIFIERS = {
13
11
  xs: "d-avatar--xs",
14
12
  sm: "d-avatar--sm",
@@ -62,19 +60,15 @@ const AVATAR_COLORS = [
62
60
  ];
63
61
  const AVATAR_RANDOM_COLORS = AVATAR_COLORS.slice(1);
64
62
  const AVATAR_GROUP_VALIDATOR = (group) => group > 1;
65
- function getIconNames() {
66
- return [void 0, ...iconNames];
67
- }
68
63
  const extractInitialsFromName = (fullName) => {
69
64
  if (typeof fullName !== "string" || !fullName.trim())
70
65
  return "";
71
66
  const names = fullName.trim().split(/\s+/g);
72
67
  return names.length === 1 ? names.join("").substring(0, 2) : names.filter((_, index) => index === 0 || index === names.length - 1).map((name) => name.slice(0, 1).toUpperCase()).join("");
73
68
  };
74
- const ICONS_LIST = getIconNames();
75
69
  const _sfc_main = {
76
70
  name: "DtAvatar",
77
- components: { DtPresence: lib_presence.DtPresence, DtIcon: lib_icon.DtIcon },
71
+ components: { DtPresence: lib_presence.DtPresence },
78
72
  inheritAttrs: false,
79
73
  props: {
80
74
  /**
@@ -162,13 +156,6 @@ const _sfc_main = {
162
156
  default: void 0,
163
157
  validator: (group) => AVATAR_GROUP_VALIDATOR(group)
164
158
  },
165
- /**
166
- * The icon that overlays the avatar
167
- */
168
- overlayIcon: {
169
- type: String,
170
- default: ""
171
- },
172
159
  /**
173
160
  * The text that overlays the avatar
174
161
  */
@@ -199,14 +186,6 @@ const _sfc_main = {
199
186
  type: String,
200
187
  default: void 0
201
188
  },
202
- /**
203
- * Icon name to be displayed on the avatar
204
- */
205
- iconName: {
206
- type: String,
207
- default: void 0,
208
- validator: (name) => ICONS_LIST.includes(name)
209
- },
210
189
  /**
211
190
  * Icon size to be displayed on the avatar
212
191
  * @values 100, 200, 300, 400, 500, 600, 700, 800
@@ -257,12 +236,19 @@ const _sfc_main = {
257
236
  AVATAR_ICON_SIZES,
258
237
  imageLoadedSuccessfully: null,
259
238
  formattedInitials: "",
260
- initializing: false
239
+ initializing: false,
240
+ hasSlotContent: common_utils.hasSlotContent
261
241
  };
262
242
  },
263
243
  computed: {
264
- isNotIconType() {
265
- return !this.iconName;
244
+ isIconType() {
245
+ return common_utils.hasSlotContent(this.$slots.icon);
246
+ },
247
+ hasOverlayIcon() {
248
+ return common_utils.hasSlotContent(this.$slots.overlayIcon);
249
+ },
250
+ iconDataQa() {
251
+ return "dt-avatar-icon";
266
252
  },
267
253
  avatarClasses() {
268
254
  return [
@@ -271,7 +257,7 @@ const _sfc_main = {
271
257
  this.avatarClass,
272
258
  {
273
259
  "d-avatar--group": this.showGroup,
274
- [`d-avatar--color-${this.getColor()}`]: this.isNotIconType,
260
+ [`d-avatar--color-${this.getColor()}`]: !this.isIconType,
275
261
  "d-avatar--clickable": this.clickable
276
262
  }
277
263
  ];
@@ -279,7 +265,8 @@ const _sfc_main = {
279
265
  overlayClasses() {
280
266
  return [
281
267
  "d-avatar__overlay",
282
- this.overlayClass
268
+ this.overlayClass,
269
+ { "d-avatar__overlay-icon": this.hasOverlayIcon }
283
270
  ];
284
271
  },
285
272
  showGroup() {
@@ -369,17 +356,17 @@ const _sfc_main = {
369
356
  }
370
357
  };
371
358
  const _hoisted_1 = ["src", "alt"];
372
- const _hoisted_2 = {
359
+ const _hoisted_2 = ["aria-label", "data-qa", "role"];
360
+ const _hoisted_3 = {
373
361
  key: 1,
374
362
  class: "d-avatar__overlay-text"
375
363
  };
376
- const _hoisted_3 = {
364
+ const _hoisted_4 = {
377
365
  key: 1,
378
366
  class: "d-avatar__count",
379
367
  "data-qa": "dt-avatar-count"
380
368
  };
381
369
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
382
- const _component_dt_icon = vue.resolveComponent("dt-icon");
383
370
  const _component_dt_presence = vue.resolveComponent("dt-presence");
384
371
  return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($props.clickable ? "button" : "div"), {
385
372
  id: $props.id,
@@ -403,29 +390,28 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
403
390
  "data-qa": "dt-avatar-image",
404
391
  src: $props.imageSrc,
405
392
  alt: $props.imageAlt
406
- }, null, 8, _hoisted_1)) : $props.iconName ? (vue.openBlock(), vue.createBlock(_component_dt_icon, {
393
+ }, null, 8, _hoisted_1)) : $options.isIconType ? (vue.openBlock(), vue.createElementBlock("div", {
407
394
  key: 1,
408
- name: $props.iconName,
409
- "aria-label": $props.iconAriaLabel,
410
- size: $props.iconSize || $data.AVATAR_ICON_SIZES[$props.size],
411
395
  class: vue.normalizeClass([$props.iconClass, $data.AVATAR_KIND_MODIFIERS.icon]),
412
- "data-qa": "dt-avatar-icon"
413
- }, null, 8, ["name", "aria-label", "size", "class"])) : (vue.openBlock(), vue.createElementBlock("span", {
396
+ "aria-label": $props.clickable ? $props.iconAriaLabel : "",
397
+ "data-qa": $options.iconDataQa,
398
+ role: $props.clickable ? "button" : ""
399
+ }, [
400
+ vue.renderSlot(_ctx.$slots, "icon", {
401
+ iconSize: $props.iconSize || $data.AVATAR_ICON_SIZES[$props.size]
402
+ })
403
+ ], 10, _hoisted_2)) : (vue.openBlock(), vue.createElementBlock("span", {
414
404
  key: 2,
415
405
  class: vue.normalizeClass([$data.AVATAR_KIND_MODIFIERS.initials])
416
406
  }, vue.toDisplayString($data.formattedInitials), 3))
417
407
  ], 2),
418
- $props.overlayIcon || $props.overlayText ? (vue.openBlock(), vue.createElementBlock("div", {
408
+ $options.hasOverlayIcon || $props.overlayText ? (vue.openBlock(), vue.createElementBlock("div", {
419
409
  key: 0,
420
410
  class: vue.normalizeClass($options.overlayClasses)
421
411
  }, [
422
- $props.overlayIcon ? (vue.openBlock(), vue.createBlock(_component_dt_icon, {
423
- key: 0,
424
- class: "d-avatar__overlay-icon",
425
- name: $props.overlayIcon
426
- }, null, 8, ["name"])) : $props.overlayText ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_2, vue.toDisplayString($props.overlayText), 1)) : vue.createCommentVNode("", true)
412
+ $options.hasOverlayIcon ? vue.renderSlot(_ctx.$slots, "overlayIcon", { key: 0 }) : $props.overlayText ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_3, vue.toDisplayString($props.overlayText), 1)) : vue.createCommentVNode("", true)
427
413
  ], 2)) : vue.createCommentVNode("", true),
428
- $options.showGroup ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3, vue.toDisplayString($options.formattedGroup), 1)) : vue.createCommentVNode("", true),
414
+ $options.showGroup ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4, vue.toDisplayString($options.formattedGroup), 1)) : vue.createCommentVNode("", true),
429
415
  $props.presence && !$options.showGroup ? (vue.openBlock(), vue.createBlock(_component_dt_presence, vue.mergeProps({
430
416
  key: 2,
431
417
  presence: $props.presence,
@@ -435,7 +421,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
435
421
  ]
436
422
  }, $props.presenceProps, { "data-qa": "dt-presence" }), null, 16, ["presence", "class"])) : vue.createCommentVNode("", true)
437
423
  ]),
438
- _: 1
424
+ _: 3
439
425
  }, 8, ["id", "class", "onClick"]);
440
426
  }
441
427
  const DtAvatar = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main, [["render", _sfc_render]]);
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.cjs","sources":["../../components/avatar/avatar_constants.js","../../common/storybook_utils.js","../../components/avatar/utils.js","../../components/avatar/avatar.vue"],"sourcesContent":["export const AVATAR_SIZE_MODIFIERS = {\n xs: 'd-avatar--xs',\n sm: 'd-avatar--sm',\n md: 'd-avatar--md',\n lg: 'd-avatar--lg',\n xl: 'd-avatar--xl',\n};\n\nexport const AVATAR_KIND_MODIFIERS = {\n default: '',\n icon: 'd-avatar__icon',\n initials: 'd-avatar__initials',\n};\n\nexport const AVATAR_PRESENCE_SIZE_MODIFIERS = {\n md: 'd-avatar__presence--md',\n lg: 'd-avatar__presence--lg',\n};\n\nexport const AVATAR_PRESENCE_STATES = {\n NONE: '',\n BUSY: 'busy',\n AWAY: 'away',\n OFFLINE: 'offline',\n ACTIVE: 'active',\n};\n\nexport const AVATAR_ICON_SIZES = {\n xs: '100',\n sm: '200',\n md: '300',\n lg: '500',\n xl: '600',\n};\n\nexport const AVATAR_COLORS = [\n '000',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n '1000',\n '1100',\n '1200',\n '1300',\n '1400',\n '1500',\n '1600',\n '1700',\n '1800',\n];\n\n// We do not use the color '000' (grey) in the randomized avatar colors, but it can still be set manually.\nexport const AVATAR_RANDOM_COLORS = AVATAR_COLORS.slice(1);\n\nexport const AVATAR_GROUP_VALIDATOR = (group) => group > 1;\n\nexport default {\n AVATAR_SIZE_MODIFIERS,\n AVATAR_KIND_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_ICON_SIZES,\n AVATAR_COLORS,\n AVATAR_RANDOM_COLORS,\n AVATAR_GROUP_VALIDATOR,\n};\n","import iconNames from '@dialpad/dialtone-icons/icons.json' with { type: 'json' };\nimport illustrationNames from '@dialpad/dialtone-icons/illustrations.json' with { type: 'json' };\n\n/**\n * Will use a Vue SFC to render the template rather than a template string.\n * This is useful for more complex components that are hard to work with and\n * get messy when rendered via a template string. Will pass args and argTypes\n * into the component so it is able to be live edited with storybook controls addon.\n * @param {object} args storybook control args\n * @param {component} templateComponent vue component template for rendering to storybook.\n * Note this should not be the component itself,\n * but rather the usage of that component.\n * @returns {component} the template component with props and args added.\n */\nexport const createTemplateFromVueFile = (args, argTypes, templateComponent) => ({\n components: { templateComponent },\n setup () {\n return { args };\n },\n template: '<template-component v-bind=\"args\"></template-component>',\n});\n\n/**\n * Gets the full list of icon component names from the dialtone package\n * @returns {string[]} icon component names\n */\nexport function getIconNames () {\n return [undefined, ...iconNames];\n}\n\n/**\n * Gets the full list of icon component names from the dialtone package\n * @returns {string[]} icon component names\n */\nexport function getIllustrationNames () {\n return [undefined, ...illustrationNames];\n}\n\nexport const generateTemplate = (component,\n { props = [], excludeProps = [], customProps = [], childTemplate } = {}) => {\n if (!component) {\n console.warn('Generate template: Please provide a component');\n return '';\n }\n\n const { name, props: componentProps } = component;\n const finalProps = props.length ? props : Object.keys(componentProps);\n const normalizedName = name.split(/(?=[A-Z])/).join('-').toLowerCase();\n\n const startFragment = `<${normalizedName}`;\n\n const propFragments = finalProps\n .filter(prop => !excludeProps.includes(prop))\n .map(prop => `:${prop}=\"${prop}\"`);\n\n const endFragment = childTemplate ? `>${childTemplate}</${normalizedName}>` : ' />';\n\n return [startFragment, ...propFragments, ...customProps, endFragment].join(' ');\n};\n\nexport default {\n generateTemplate,\n createTemplateFromVueFile,\n getIllustrationNames,\n getIconNames,\n};\n","export const extractInitialsFromName = (fullName) => {\n if (typeof fullName !== 'string' || !fullName.trim()) return '';\n\n const names = fullName.trim().split(/\\s+/g);\n\n return names.length === 1\n ? names.join('').substring(0, 2)\n : names.filter((_, index) => (index === 0 || index === names.length - 1))\n .map(name => name.slice(0, 1).toUpperCase())\n .join('');\n};\n","<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":["DtPresence","DtIcon","getUniqueString","ICON_SIZE_MODIFIERS","getRandomElement","_openBlock","_createBlock","_resolveDynamicComponent","_createElementVNode","_normalizeClass","_createElementBlock","_toDisplayString","_mergeProps"],"mappings":"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"}
1
+ {"version":3,"file":"avatar.cjs","sources":["../../components/avatar/avatar_constants.js","../../components/avatar/utils.js","../../components/avatar/avatar.vue"],"sourcesContent":["export const AVATAR_SIZE_MODIFIERS = {\n xs: 'd-avatar--xs',\n sm: 'd-avatar--sm',\n md: 'd-avatar--md',\n lg: 'd-avatar--lg',\n xl: 'd-avatar--xl',\n};\n\nexport const AVATAR_KIND_MODIFIERS = {\n default: '',\n icon: 'd-avatar__icon',\n initials: 'd-avatar__initials',\n};\n\nexport const AVATAR_PRESENCE_SIZE_MODIFIERS = {\n md: 'd-avatar__presence--md',\n lg: 'd-avatar__presence--lg',\n};\n\nexport const AVATAR_PRESENCE_STATES = {\n NONE: '',\n BUSY: 'busy',\n AWAY: 'away',\n OFFLINE: 'offline',\n ACTIVE: 'active',\n};\n\nexport const AVATAR_ICON_SIZES = {\n xs: '100',\n sm: '200',\n md: '300',\n lg: '500',\n xl: '600',\n};\n\nexport const AVATAR_COLORS = [\n '000',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n '1000',\n '1100',\n '1200',\n '1300',\n '1400',\n '1500',\n '1600',\n '1700',\n '1800',\n];\n\n// We do not use the color '000' (grey) in the randomized avatar colors, but it can still be set manually.\nexport const AVATAR_RANDOM_COLORS = AVATAR_COLORS.slice(1);\n\nexport const AVATAR_GROUP_VALIDATOR = (group) => group > 1;\n\nexport default {\n AVATAR_SIZE_MODIFIERS,\n AVATAR_KIND_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_ICON_SIZES,\n AVATAR_COLORS,\n AVATAR_RANDOM_COLORS,\n AVATAR_GROUP_VALIDATOR,\n};\n","export const extractInitialsFromName = (fullName) => {\n if (typeof fullName !== 'string' || !fullName.trim()) return '';\n\n const names = fullName.trim().split(/\\s+/g);\n\n return names.length === 1\n ? names.join('').substring(0, 2)\n : names.filter((_, index) => (index === 0 || index === names.length - 1))\n .map(name => name.slice(0, 1).toUpperCase())\n .join('');\n};\n","<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, hasSlotContent } from '@/common/utils';\nimport { DtPresence } from '../presence';\nimport {\n AVATAR_KIND_MODIFIERS,\n AVATAR_SIZE_MODIFIERS,\n AVATAR_PRESENCE_SIZE_MODIFIERS,\n AVATAR_PRESENCE_STATES,\n AVATAR_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 hasSlotContent,\n };\n },\n\n computed: {\n isIconType () {\n return hasSlotContent(this.$slots.icon);\n },\n\n hasOverlayIcon () {\n return hasSlotContent(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","ICON_SIZE_MODIFIERS","hasSlotContent","getRandomElement","_openBlock","_createBlock","_resolveDynamicComponent","_createElementVNode","_normalizeClass","_createElementBlock","_renderSlot","_toDisplayString","_mergeProps"],"mappings":"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"}
@@ -1,12 +1,10 @@
1
- import { getUniqueString, getRandomElement } from "../common/utils.js";
2
- import iconNames from "@dialpad/dialtone-icons/icons.json";
3
- import { ICON_SIZE_MODIFIERS } from "../chunks/icon_constants-Dy4MEUJL.js";
4
- import { resolveComponent, openBlock, createBlock, resolveDynamicComponent, normalizeClass, withCtx, createElementVNode, createElementBlock, toDisplayString, createCommentVNode, mergeProps } from "vue";
1
+ import { getUniqueString, hasSlotContent, getRandomElement } from "../common/utils.js";
2
+ import { ICON_SIZE_MODIFIERS } from "../chunks/icon_constants-H9ahUVCG.js";
3
+ import { resolveComponent, openBlock, createBlock, resolveDynamicComponent, normalizeClass, withCtx, createElementVNode, createElementBlock, renderSlot, toDisplayString, createCommentVNode, mergeProps } from "vue";
5
4
  import { _export_sfc } from "../chunks/_plugin-vue_export-helper-caHeSgYY.js";
6
5
  import { DtPresence } from "./presence.js";
7
- import { DtIcon } from "./icon.js";
8
6
  import "../common/constants.js";
9
- import "@dialpad/dialtone-icons/vue3";
7
+ import "@dialpad/dialtone-icons/icons.js";
10
8
  const AVATAR_SIZE_MODIFIERS = {
11
9
  xs: "d-avatar--xs",
12
10
  sm: "d-avatar--sm",
@@ -60,19 +58,15 @@ const AVATAR_COLORS = [
60
58
  ];
61
59
  const AVATAR_RANDOM_COLORS = AVATAR_COLORS.slice(1);
62
60
  const AVATAR_GROUP_VALIDATOR = (group) => group > 1;
63
- function getIconNames() {
64
- return [void 0, ...iconNames];
65
- }
66
61
  const extractInitialsFromName = (fullName) => {
67
62
  if (typeof fullName !== "string" || !fullName.trim())
68
63
  return "";
69
64
  const names = fullName.trim().split(/\s+/g);
70
65
  return names.length === 1 ? names.join("").substring(0, 2) : names.filter((_, index) => index === 0 || index === names.length - 1).map((name) => name.slice(0, 1).toUpperCase()).join("");
71
66
  };
72
- const ICONS_LIST = getIconNames();
73
67
  const _sfc_main = {
74
68
  name: "DtAvatar",
75
- components: { DtPresence, DtIcon },
69
+ components: { DtPresence },
76
70
  inheritAttrs: false,
77
71
  props: {
78
72
  /**
@@ -160,13 +154,6 @@ const _sfc_main = {
160
154
  default: void 0,
161
155
  validator: (group) => AVATAR_GROUP_VALIDATOR(group)
162
156
  },
163
- /**
164
- * The icon that overlays the avatar
165
- */
166
- overlayIcon: {
167
- type: String,
168
- default: ""
169
- },
170
157
  /**
171
158
  * The text that overlays the avatar
172
159
  */
@@ -197,14 +184,6 @@ const _sfc_main = {
197
184
  type: String,
198
185
  default: void 0
199
186
  },
200
- /**
201
- * Icon name to be displayed on the avatar
202
- */
203
- iconName: {
204
- type: String,
205
- default: void 0,
206
- validator: (name) => ICONS_LIST.includes(name)
207
- },
208
187
  /**
209
188
  * Icon size to be displayed on the avatar
210
189
  * @values 100, 200, 300, 400, 500, 600, 700, 800
@@ -255,12 +234,19 @@ const _sfc_main = {
255
234
  AVATAR_ICON_SIZES,
256
235
  imageLoadedSuccessfully: null,
257
236
  formattedInitials: "",
258
- initializing: false
237
+ initializing: false,
238
+ hasSlotContent
259
239
  };
260
240
  },
261
241
  computed: {
262
- isNotIconType() {
263
- return !this.iconName;
242
+ isIconType() {
243
+ return hasSlotContent(this.$slots.icon);
244
+ },
245
+ hasOverlayIcon() {
246
+ return hasSlotContent(this.$slots.overlayIcon);
247
+ },
248
+ iconDataQa() {
249
+ return "dt-avatar-icon";
264
250
  },
265
251
  avatarClasses() {
266
252
  return [
@@ -269,7 +255,7 @@ const _sfc_main = {
269
255
  this.avatarClass,
270
256
  {
271
257
  "d-avatar--group": this.showGroup,
272
- [`d-avatar--color-${this.getColor()}`]: this.isNotIconType,
258
+ [`d-avatar--color-${this.getColor()}`]: !this.isIconType,
273
259
  "d-avatar--clickable": this.clickable
274
260
  }
275
261
  ];
@@ -277,7 +263,8 @@ const _sfc_main = {
277
263
  overlayClasses() {
278
264
  return [
279
265
  "d-avatar__overlay",
280
- this.overlayClass
266
+ this.overlayClass,
267
+ { "d-avatar__overlay-icon": this.hasOverlayIcon }
281
268
  ];
282
269
  },
283
270
  showGroup() {
@@ -367,17 +354,17 @@ const _sfc_main = {
367
354
  }
368
355
  };
369
356
  const _hoisted_1 = ["src", "alt"];
370
- const _hoisted_2 = {
357
+ const _hoisted_2 = ["aria-label", "data-qa", "role"];
358
+ const _hoisted_3 = {
371
359
  key: 1,
372
360
  class: "d-avatar__overlay-text"
373
361
  };
374
- const _hoisted_3 = {
362
+ const _hoisted_4 = {
375
363
  key: 1,
376
364
  class: "d-avatar__count",
377
365
  "data-qa": "dt-avatar-count"
378
366
  };
379
367
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
380
- const _component_dt_icon = resolveComponent("dt-icon");
381
368
  const _component_dt_presence = resolveComponent("dt-presence");
382
369
  return openBlock(), createBlock(resolveDynamicComponent($props.clickable ? "button" : "div"), {
383
370
  id: $props.id,
@@ -401,29 +388,28 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
401
388
  "data-qa": "dt-avatar-image",
402
389
  src: $props.imageSrc,
403
390
  alt: $props.imageAlt
404
- }, null, 8, _hoisted_1)) : $props.iconName ? (openBlock(), createBlock(_component_dt_icon, {
391
+ }, null, 8, _hoisted_1)) : $options.isIconType ? (openBlock(), createElementBlock("div", {
405
392
  key: 1,
406
- name: $props.iconName,
407
- "aria-label": $props.iconAriaLabel,
408
- size: $props.iconSize || $data.AVATAR_ICON_SIZES[$props.size],
409
393
  class: normalizeClass([$props.iconClass, $data.AVATAR_KIND_MODIFIERS.icon]),
410
- "data-qa": "dt-avatar-icon"
411
- }, null, 8, ["name", "aria-label", "size", "class"])) : (openBlock(), createElementBlock("span", {
394
+ "aria-label": $props.clickable ? $props.iconAriaLabel : "",
395
+ "data-qa": $options.iconDataQa,
396
+ role: $props.clickable ? "button" : ""
397
+ }, [
398
+ renderSlot(_ctx.$slots, "icon", {
399
+ iconSize: $props.iconSize || $data.AVATAR_ICON_SIZES[$props.size]
400
+ })
401
+ ], 10, _hoisted_2)) : (openBlock(), createElementBlock("span", {
412
402
  key: 2,
413
403
  class: normalizeClass([$data.AVATAR_KIND_MODIFIERS.initials])
414
404
  }, toDisplayString($data.formattedInitials), 3))
415
405
  ], 2),
416
- $props.overlayIcon || $props.overlayText ? (openBlock(), createElementBlock("div", {
406
+ $options.hasOverlayIcon || $props.overlayText ? (openBlock(), createElementBlock("div", {
417
407
  key: 0,
418
408
  class: normalizeClass($options.overlayClasses)
419
409
  }, [
420
- $props.overlayIcon ? (openBlock(), createBlock(_component_dt_icon, {
421
- key: 0,
422
- class: "d-avatar__overlay-icon",
423
- name: $props.overlayIcon
424
- }, null, 8, ["name"])) : $props.overlayText ? (openBlock(), createElementBlock("p", _hoisted_2, toDisplayString($props.overlayText), 1)) : createCommentVNode("", true)
410
+ $options.hasOverlayIcon ? renderSlot(_ctx.$slots, "overlayIcon", { key: 0 }) : $props.overlayText ? (openBlock(), createElementBlock("p", _hoisted_3, toDisplayString($props.overlayText), 1)) : createCommentVNode("", true)
425
411
  ], 2)) : createCommentVNode("", true),
426
- $options.showGroup ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString($options.formattedGroup), 1)) : createCommentVNode("", true),
412
+ $options.showGroup ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString($options.formattedGroup), 1)) : createCommentVNode("", true),
427
413
  $props.presence && !$options.showGroup ? (openBlock(), createBlock(_component_dt_presence, mergeProps({
428
414
  key: 2,
429
415
  presence: $props.presence,
@@ -433,7 +419,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
433
419
  ]
434
420
  }, $props.presenceProps, { "data-qa": "dt-presence" }), null, 16, ["presence", "class"])) : createCommentVNode("", true)
435
421
  ]),
436
- _: 1
422
+ _: 3
437
423
  }, 8, ["id", "class", "onClick"]);
438
424
  }
439
425
  const DtAvatar = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);