@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":"avatar.js","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 '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\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_GROUP_VALIDATOR,\n};\n","import iconNames from '@dialpad/dialtone-icons/icons.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 component this will get the component name\n * @param defaultTemplate we will mount in this component\n * @param argsData storybook control args\n * @returns {component} the template component with props and args added.\n */\n\nexport function createRenderConfig (component, defaultTemplate, argsData) {\n return {\n components: { [component.name]: defaultTemplate },\n props: [...Object.keys(component.props ?? {}), ...Object.keys(argsData)],\n setup (props) {\n return { props };\n },\n template: `<${component.name} v-bind=\"props\" />`,\n };\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\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 getIconNames,\n createRenderConfig,\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_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_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":["AVATAR_SIZE_MODIFIERS","AVATAR_KIND_MODIFIERS","AVATAR_PRESENCE_SIZE_MODIFIERS","AVATAR_PRESENCE_STATES","AVATAR_ICON_SIZES","AVATAR_COLORS","AVATAR_GROUP_VALIDATOR","group","getIconNames","iconNames","extractInitialsFromName","fullName","names","_","index","name","ICONS_LIST","_sfc_main","DtPresence","DtIcon","getUniqueString","size","state","ICON_SIZE_MODIFIERS","newSrc","el","initials","getRandomElement","e"],"mappings":";;;;;;;;;;AAAY,MAACA,IAAwB;AAAA,EACnC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAAwB;AAAA,EACnC,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AACZ,GAEaC,IAAiC;AAAA,EAC5C,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAAyB;AAAA,EACpC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AACV,GAEaC,IAAoB;AAAA,EAC/B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAyB,CAACC,MAAUA,IAAQ;AC5BlD,SAASC,IAAgB;AAC9B,SAAO,CAAC,QAAW,GAAGC,CAAS;AACjC;AC9BO,MAAMC,IAA0B,CAACC,MAAa;AACnD,MAAI,OAAOA,KAAa,YAAY,CAACA,EAAS,KAAI;AAAI,WAAO;AAE7D,QAAMC,IAAQD,EAAS,KAAM,EAAC,MAAM,MAAM;AAE1C,SAAOC,EAAM,WAAW,IACpBA,EAAM,KAAK,EAAE,EAAE,UAAU,GAAG,CAAC,IAC7BA,EAAM,OAAO,CAACC,GAAGC,MAAWA,MAAU,KAAKA,MAAUF,EAAM,SAAS,CAAE,EACrE,IAAI,CAAAG,MAAQA,EAAK,MAAM,GAAG,CAAC,EAAE,aAAa,EAC1C,KAAK,EAAE;AACd,GCgFAC,IAAAR,EAAA,GAMAS,IAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA,EAAA,YAAAC,GAAA,QAAAC,EAAA;AAAA,EAEA,cAAA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,eAAAC,EAAA;AAAA,MAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAC,MAAA,OAAA,KAAArB,CAAA,EAAA,SAAAqB,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MACA,MAAA,CAAA,QAAA,OAAA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MACA,MAAA,CAAA,QAAA,OAAA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,WAAA;AAAA,MACA,MAAA,CAAA,QAAA,OAAA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAAlB,EAAA;AAAA,MACA,WAAA,CAAAmB,MACA,OAAA,OAAAnB,CAAA,EAAA,SAAAmB,CAAA;AAAA,IAEA;AAAA;AAAA;AAAA;AAAA,IAKA,eAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,OAAA,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAf,MAAAD,EAAAC,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,cAAA;AAAA,MACA,MAAA,CAAA,QAAA,OAAA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAQ,MAAAC,EAAA,SAAAD,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAM,MAAA,CAAAA,KAAA,OAAA,KAAAE,CAAA,EAAA,SAAAF,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,eAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,uBAAArB;AAAA,MACA,uBAAAC;AAAA,MACA,gCAAAC;AAAA,MACA,mBAAAE;AAAA,MACA,yBAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AAAA,IACA,gBAAA;AACA,aAAA,CAAA,KAAA;AAAA,IACA;AAAA,IAEA,gBAAA;AACA,aAAA;AAAA,QACA;AAAA,QACAJ,EAAA,KAAA,aAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,UACA,mBAAA,KAAA;AAAA,UACA,CAAA,mBAAA,KAAA,SAAA,CAAA,EAAA,GAAA,KAAA;AAAA,UACA,uBAAA,KAAA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,IAEA,iBAAA;AACA,aAAA;AAAA,QACA;AAAA,QACA,KAAA;AAAA,MACA;AAAA,IACA;AAAA,IAEA,YAAA;AACA,aAAAM,EAAA,KAAA,KAAA;AAAA,IACA;AAAA,IAEA,iBAAA;AACA,aAAA,KAAA,QAAA,KAAA,QAAA,KAAA;AAAA,IACA;AAAA,IAEA,gBAAA;AAEA,aAAA,KAAA,QAAA,OAAA,KAAA;AAAA,IACA;AAAA,IAEA,YAAA;AACA,aAAA,KAAA,4BAAA,MAAA,KAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AACA,aAAA,eAAA;AAAA,MACA;AAAA,IACA;AAAA,IAEA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AACA,aAAA,eAAA;AAAA,MACA;AAAA,IACA;AAAA,IAEA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AACA,aAAA,eAAA;AAAA,MACA;AAAA,IACA;AAAA,IAEA,SAAAkB,GAAA;AAEA,MADA,KAAA,0BAAA,MACAA,MAEA,KAAA,cAAA,GACA,KAAA,kBAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AACA,SAAA,cAAA,GACA,KAAA,kBAAA;AAAA,EACA;AAAA,EAEA,SAAA;AAAA,IACA,MAAA,oBAAA;AACA,YAAA,KAAA;AACA,YAAAC,IAAA,KAAA,MAAA;AACA,MAAAA,MAEAA,EAAA,iBAAA,QAAA,MAAA,KAAA,yBAAAA,CAAA,GAAA,EAAA,MAAA,GAAA,CAAA,GACAA,EAAA,iBAAA,SAAA,MAAA,KAAA,0BAAAA,CAAA,GAAA,EAAA,MAAA,GAAA,CAAA;AAAA,IACA;AAAA,IAEA,iBAAA;AACA,YAAAC,IAAAhB,EAAA,KAAA,QAAA;AAEA,MAAA,KAAA,kBAAA,OACA,KAAA,oBAAA,KACA,KAAA,kBAAA,OACA,KAAA,oBAAAgB,EAAA,CAAA,IAEA,KAAA,oBAAAA;AAAA,IAEA;AAAA,IAEA,WAAA;AACA,aAAA,KAAA,SAAAC,EAAAtB,GAAA,KAAA,IAAA;AAAA,IACA;AAAA,IAEA,yBAAAoB,GAAA;AACA,WAAA,0BAAA,IACAA,EAAA,UAAA,OAAA,UAAA;AAAA,IACA;AAAA,IAEA,0BAAAA,GAAA;AACA,WAAA,0BAAA,IACAA,EAAA,UAAA,IAAA,UAAA;AAAA,IACA;AAAA,IAEA,gBAAA;AACA,MAAA,KAAA,YAAA,KAAA,aAAA,UACA,QAAA,MAAA,uHAAA;AAAA,IAEA;AAAA,IAEA,YAAAG,GAAA;AACA,MAAA,KAAA,aACA,KAAA,MAAA,SAAAA,CAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,169 @@
1
+ import { n } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.js";
2
+ import { DtIcon as i } from "./icon.js";
3
+ import "@dialpad/dialtone-icons/vue2";
4
+ import "../chunks/icon_constants-OpYAAKwF.js";
5
+ import "@dialpad/dialtone-icons/icons.json";
6
+ import "./skeleton.js";
7
+ const d = {
8
+ default: "",
9
+ info: "d-badge--info",
10
+ success: "d-badge--success",
11
+ warning: "d-badge--warning",
12
+ critical: "d-badge--critical",
13
+ bulletin: "d-badge--bulletin",
14
+ ai: "d-badge--ai"
15
+ }, r = {
16
+ label: "",
17
+ count: "d-badge--count"
18
+ }, o = {
19
+ "black-400": "d-badge--decorate-black-400",
20
+ "black-500": "d-badge--decorate-black-500",
21
+ "black-900": "d-badge--decorate-black-900",
22
+ "red-200": "d-badge--decorate-red-200",
23
+ "red-300": "d-badge--decorate-red-300",
24
+ "red-400": "d-badge--decorate-red-400",
25
+ "purple-200": "d-badge--decorate-purple-200",
26
+ "purple-300": "d-badge--decorate-purple-300",
27
+ "purple-400": "d-badge--decorate-purple-400",
28
+ "purple-500": "d-badge--decorate-purple-500",
29
+ "blue-200": "d-badge--decorate-blue-200",
30
+ "blue-300": "d-badge--decorate-blue-300",
31
+ "blue-400": "d-badge--decorate-blue-400",
32
+ "green-300": "d-badge--decorate-green-300",
33
+ "green-400": "d-badge--decorate-green-400",
34
+ "green-500": "d-badge--decorate-green-500",
35
+ "gold-300": "d-badge--decorate-gold-300",
36
+ "gold-400": "d-badge--decorate-gold-400",
37
+ "gold-500": "d-badge--decorate-gold-500",
38
+ "magenta-200": "d-badge--decorate-magenta-200",
39
+ "magenta-300": "d-badge--decorate-magenta-300",
40
+ "magenta-400": "d-badge--decorate-magenta-400"
41
+ }, c = {
42
+ name: "DtBadge",
43
+ components: {
44
+ DtIcon: i
45
+ },
46
+ props: {
47
+ /**
48
+ * Icon on the left side of the badge. Supports any valid icon name from the icon catalog at
49
+ * https://dialtone.dialpad.com/components/icon.html#icon-catalog. If type:'ai' is set, the ai icon
50
+ * will automatically be shown here, but this can be overridden by setting this prop.
51
+ */
52
+ iconLeft: {
53
+ type: String,
54
+ default: ""
55
+ },
56
+ /**
57
+ * Icon on the right side of the badge. Supports any valid icon name from the icon catalog at
58
+ * https://dialtone.dialpad.com/components/icon.html#icon-catalog
59
+ */
60
+ iconRight: {
61
+ type: String,
62
+ default: ""
63
+ },
64
+ /**
65
+ * Text for the badge content
66
+ */
67
+ text: {
68
+ type: String,
69
+ default: ""
70
+ },
71
+ /**
72
+ * The kind of badge which determines the styling
73
+ * @values label, count
74
+ */
75
+ kind: {
76
+ type: String,
77
+ default: "label",
78
+ validator: (t) => Object.keys(r).includes(t)
79
+ },
80
+ /**
81
+ * Color for the badge background
82
+ * @values default, info, success, warning, critical, bulletin, ai
83
+ */
84
+ type: {
85
+ type: String,
86
+ default: "default",
87
+ validator: (t) => Object.keys(d).includes(t)
88
+ },
89
+ /**
90
+ * Decoration for the badge. This can be only used with kind: label and type: default
91
+ * with no iconLeft and iconRight
92
+ * @values default, black-400, black-500, black-900, red-200, red-300, red-400, purple-200,
93
+ * purple-300, purple-400, purple-500, blue-200, blue-300, blue-400, green-300, green-400,
94
+ * green-500, gold-300, gold-400, gold-500, magenta-200, magenta-300, magenta-400
95
+ */
96
+ decoration: {
97
+ type: String,
98
+ default: void 0,
99
+ validator: (t) => Object.keys(o).includes(t)
100
+ },
101
+ /**
102
+ * Used to customize the label container
103
+ */
104
+ labelClass: {
105
+ type: [String, Array, Object],
106
+ default: ""
107
+ }
108
+ },
109
+ data() {
110
+ return {
111
+ BADGE_TYPE_MODIFIERS: d,
112
+ BADGE_KIND_MODIFIERS: r,
113
+ BADGE_DECORATION_MODIFIERS: o
114
+ };
115
+ },
116
+ computed: {
117
+ hasIcons() {
118
+ return this.iconLeft !== "" || this.iconRight !== "";
119
+ }
120
+ },
121
+ watch: {
122
+ $props: {
123
+ immediate: !0,
124
+ deep: !0,
125
+ handler() {
126
+ this.validateProps();
127
+ }
128
+ }
129
+ },
130
+ methods: {
131
+ validateProps() {
132
+ this.validateTypePropCombination(), this.validateDecorationPropCombination();
133
+ },
134
+ validateTypePropCombination() {
135
+ this.type === "ai" && this.kind === "count" && console.error("DtBadge error: type: 'ai' with kind: 'count' is an invalid combination.");
136
+ },
137
+ validateDecorationPropCombination() {
138
+ this.decoration && ((this.kind !== "label" || this.type !== "default") && console.error("DtBadge error: decoration prop can only be used with kind: 'label' and type: 'default'."), this.hasIcons && console.error("DtBadge error: decoration prop cannot be used with iconLeft or iconRight."));
139
+ }
140
+ }
141
+ };
142
+ var l = function() {
143
+ var e = this, a = e._self._c;
144
+ return a("span", { class: [
145
+ "d-badge",
146
+ e.BADGE_TYPE_MODIFIERS[e.type],
147
+ e.BADGE_KIND_MODIFIERS[e.kind],
148
+ e.BADGE_DECORATION_MODIFIERS[e.decoration]
149
+ ], attrs: { "data-qa": "dt-badge" } }, [e.decoration ? a("span", { staticClass: "d-badge__decorative" }) : e._e(), e.iconLeft || e.type === "ai" ? a("span", { staticClass: "d-badge__icon-left" }, [a("dt-icon", { attrs: { name: e.iconLeft || "dialpad-ai", size: "200" } })], 1) : e._e(), a("span", { class: ["d-badge__label", e.labelClass] }, [e._t("default", function() {
150
+ return [e._v(" " + e._s(e.text) + " ")];
151
+ })], 2), e.iconRight ? a("span", { staticClass: "d-badge__icon-right" }, [a("dt-icon", { attrs: { name: e.iconRight, size: "200" } })], 1) : e._e()]);
152
+ }, s = [], g = /* @__PURE__ */ n(
153
+ c,
154
+ l,
155
+ s,
156
+ !1,
157
+ null,
158
+ null,
159
+ null,
160
+ null
161
+ );
162
+ const h = g.exports;
163
+ export {
164
+ o as BADGE_DECORATION_MODIFIERS,
165
+ r as BADGE_KIND_MODIFIERS,
166
+ d as BADGE_TYPE_MODIFIERS,
167
+ h as DtBadge
168
+ };
169
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sources":["../../components/badge/badge_constants.js","../../components/badge/badge.vue"],"sourcesContent":["export const BADGE_TYPE_MODIFIERS = {\n default: '',\n info: 'd-badge--info',\n success: 'd-badge--success',\n warning: 'd-badge--warning',\n critical: 'd-badge--critical',\n bulletin: 'd-badge--bulletin',\n ai: 'd-badge--ai',\n};\n\nexport const BADGE_KIND_MODIFIERS = {\n label: '',\n count: 'd-badge--count',\n};\n\nexport const BADGE_DECORATION_MODIFIERS = {\n 'black-400': 'd-badge--decorate-black-400',\n 'black-500': 'd-badge--decorate-black-500',\n 'black-900': 'd-badge--decorate-black-900',\n 'red-200': 'd-badge--decorate-red-200',\n 'red-300': 'd-badge--decorate-red-300',\n 'red-400': 'd-badge--decorate-red-400',\n 'purple-200': 'd-badge--decorate-purple-200',\n 'purple-300': 'd-badge--decorate-purple-300',\n 'purple-400': 'd-badge--decorate-purple-400',\n 'purple-500': 'd-badge--decorate-purple-500',\n 'blue-200': 'd-badge--decorate-blue-200',\n 'blue-300': 'd-badge--decorate-blue-300',\n 'blue-400': 'd-badge--decorate-blue-400',\n 'green-300': 'd-badge--decorate-green-300',\n 'green-400': 'd-badge--decorate-green-400',\n 'green-500': 'd-badge--decorate-green-500',\n 'gold-300': 'd-badge--decorate-gold-300',\n 'gold-400': 'd-badge--decorate-gold-400',\n 'gold-500': 'd-badge--decorate-gold-500',\n 'magenta-200': 'd-badge--decorate-magenta-200',\n 'magenta-300': 'd-badge--decorate-magenta-300',\n 'magenta-400': 'd-badge--decorate-magenta-400',\n};\n","<template>\n <span\n :class=\"[\n 'd-badge',\n BADGE_TYPE_MODIFIERS[type],\n BADGE_KIND_MODIFIERS[kind],\n BADGE_DECORATION_MODIFIERS[decoration],\n ]\"\n data-qa=\"dt-badge\"\n >\n <span\n v-if=\"decoration\"\n class=\"d-badge__decorative\"\n />\n <span\n v-if=\"iconLeft || type === 'ai'\"\n class=\"d-badge__icon-left\"\n >\n <dt-icon\n :name=\"iconLeft || 'dialpad-ai'\"\n size=\"200\"\n />\n </span>\n <span :class=\"['d-badge__label', labelClass]\">\n <!-- @slot Slot for badge content, defaults to text prop -->\n <slot>\n {{ text }}\n </slot>\n </span>\n <span\n v-if=\"iconRight\"\n class=\"d-badge__icon-right\"\n >\n <dt-icon\n :name=\"iconRight\"\n size=\"200\"\n />\n </span>\n </span>\n</template>\n\n<script>\nimport { BADGE_TYPE_MODIFIERS, BADGE_KIND_MODIFIERS, BADGE_DECORATION_MODIFIERS } from './badge_constants';\nimport { DtIcon } from '@/components/icon';\n\n/**\n * A badge is a compact UI element that provides brief, descriptive information about an element.\n * It is terse, ideally one word.\n * @see https://dialtone.dialpad.com/components/badge.html\n */\nexport default {\n name: 'DtBadge',\n\n components: {\n DtIcon,\n },\n\n props: {\n /**\n * Icon on the left side of the badge. Supports any valid icon name from the icon catalog at\n * https://dialtone.dialpad.com/components/icon.html#icon-catalog. If type:'ai' is set, the ai icon\n * will automatically be shown here, but this can be overridden by setting this prop.\n */\n iconLeft: {\n type: String,\n default: '',\n },\n\n /**\n * Icon on the right side of the badge. Supports any valid icon name from the icon catalog at\n * https://dialtone.dialpad.com/components/icon.html#icon-catalog\n */\n iconRight: {\n type: String,\n default: '',\n },\n\n /**\n * Text for the badge content\n */\n text: {\n type: String,\n default: '',\n },\n\n /**\n * The kind of badge which determines the styling\n * @values label, count\n */\n kind: {\n type: String,\n default: 'label',\n validator: (kind) => Object.keys(BADGE_KIND_MODIFIERS).includes(kind),\n },\n\n /**\n * Color for the badge background\n * @values default, info, success, warning, critical, bulletin, ai\n */\n type: {\n type: String,\n default: 'default',\n validator: (type) => Object.keys(BADGE_TYPE_MODIFIERS).includes(type),\n },\n\n /**\n * Decoration for the badge. This can be only used with kind: label and type: default\n * with no iconLeft and iconRight\n * @values default, black-400, black-500, black-900, red-200, red-300, red-400, purple-200,\n * purple-300, purple-400, purple-500, blue-200, blue-300, blue-400, green-300, green-400,\n * green-500, gold-300, gold-400, gold-500, magenta-200, magenta-300, magenta-400\n */\n decoration: {\n type: String,\n default: undefined,\n validator: (type) => Object.keys(BADGE_DECORATION_MODIFIERS).includes(type),\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n },\n\n data () {\n return {\n BADGE_TYPE_MODIFIERS,\n BADGE_KIND_MODIFIERS,\n BADGE_DECORATION_MODIFIERS,\n };\n },\n\n computed: {\n hasIcons () {\n return this.iconLeft !== '' || this.iconRight !== '';\n },\n },\n\n watch: {\n $props: {\n immediate: true,\n deep: true,\n handler () {\n this.validateProps();\n },\n },\n },\n\n methods: {\n validateProps () {\n this.validateTypePropCombination();\n this.validateDecorationPropCombination();\n },\n\n validateTypePropCombination () {\n if (this.type === 'ai' && this.kind === 'count') {\n console.error('DtBadge error: type: \\'ai\\' with kind: \\'count\\' is an invalid combination.');\n }\n },\n\n validateDecorationPropCombination () {\n if (!this.decoration) return;\n\n if (this.kind !== 'label' || this.type !== 'default') {\n console.error('DtBadge error: decoration prop can only be used with kind: \\'label\\' and type: \\'default\\'.');\n }\n\n if (this.hasIcons) {\n console.error('DtBadge error: decoration prop cannot be used with iconLeft or iconRight.');\n }\n },\n },\n};\n</script>\n"],"names":["BADGE_TYPE_MODIFIERS","BADGE_KIND_MODIFIERS","BADGE_DECORATION_MODIFIERS","_sfc_main","DtIcon","kind","type"],"mappings":";;;;;;AAAY,MAACA,IAAuB;AAAA,EAClC,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,IAAI;AACN,GAEaC,IAAuB;AAAA,EAClC,OAAO;AAAA,EACP,OAAO;AACT,GAEaC,IAA6B;AAAA,EACxC,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB,GCYAC,IAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA,QAAAC;AAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAC,MAAA,OAAA,KAAAJ,CAAA,EAAA,SAAAI,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAC,MAAA,OAAA,KAAAN,CAAA,EAAA,SAAAM,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAA,MAAA,OAAA,KAAAJ,CAAA,EAAA,SAAAI,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,YAAA;AAAA,MACA,MAAA,CAAA,QAAA,OAAA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,sBAAAN;AAAA,MACA,sBAAAC;AAAA,MACA,4BAAAC;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AAAA,IACA,WAAA;AACA,aAAA,KAAA,aAAA,MAAA,KAAA,cAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AACA,aAAA,cAAA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,SAAA;AAAA,IACA,gBAAA;AACA,WAAA,4BAAA,GACA,KAAA,kCAAA;AAAA,IACA;AAAA,IAEA,8BAAA;AACA,MAAA,KAAA,SAAA,QAAA,KAAA,SAAA,WACA,QAAA,MAAA,yEAAA;AAAA,IAEA;AAAA,IAEA,oCAAA;AACA,MAAA,KAAA,gBAEA,KAAA,SAAA,WAAA,KAAA,SAAA,cACA,QAAA,MAAA,yFAAA,GAGA,KAAA,YACA,QAAA,MAAA,2EAAA;AAAA,IAEA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,200 @@
1
+ import { M as a } from "../chunks/modal-VuMFkZFH.js";
2
+ import r from "./utils.js";
3
+ import { a as o } from "../chunks/sr_only_close_button-JGole5Xi.js";
4
+ import { n as s } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.js";
5
+ import { a as l, b as d, D as u } from "../chunks/notice_action-9NmtQRai.js";
6
+ import { N as c } from "../chunks/notice_constants-c--hBFQw.js";
7
+ import "./constants.js";
8
+ import "vue";
9
+ import "./icon.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
+ import "./button.js";
15
+ import "../chunks/link_constants-vIUB92L4.js";
16
+ const p = {
17
+ name: "DtBanner",
18
+ components: {
19
+ DtNoticeIcon: l,
20
+ DtNoticeContent: d,
21
+ DtNoticeAction: u
22
+ },
23
+ mixins: [a, o],
24
+ props: {
25
+ /**
26
+ * Sets an ID on the title element of the component. Useful for aria-describedby
27
+ * or aria-labelledby or any other reason you may need an id to refer to the title.
28
+ */
29
+ titleId: {
30
+ type: String,
31
+ default() {
32
+ return r.getUniqueString();
33
+ }
34
+ },
35
+ /**
36
+ * Sets an ID on the content element of the component. Useful for aria-describedby
37
+ * or aria-labelledby or any other reason you may need an id to refer to the content.
38
+ */
39
+ contentId: {
40
+ type: String,
41
+ default() {
42
+ return r.getUniqueString();
43
+ }
44
+ },
45
+ /**
46
+ * Title header of the notice. This can be left blank to remove the title from the notice entirely.
47
+ */
48
+ title: {
49
+ type: String,
50
+ default: ""
51
+ },
52
+ /**
53
+ * Used in scenarios where the message needs to visually dominate the screen.
54
+ * This will also change the aria role from status to alertdialog.
55
+ * and will modally trap the keyboard focus in the dialog as soon as it displays.
56
+ * @values true, false
57
+ */
58
+ important: {
59
+ type: Boolean,
60
+ default: !1
61
+ },
62
+ /**
63
+ * Pins the banner to the top of the window and pushes all app content down.
64
+ * @values true, false
65
+ */
66
+ pinned: {
67
+ type: Boolean,
68
+ default: !1
69
+ },
70
+ /**
71
+ * Severity level of the notice, sets the icon and background
72
+ * @values base, error, info, success, warning
73
+ */
74
+ kind: {
75
+ type: String,
76
+ default: "base",
77
+ validate(e) {
78
+ return c.includes(e);
79
+ }
80
+ },
81
+ /**
82
+ * Props for the notice close button.
83
+ */
84
+ closeButtonProps: {
85
+ type: Object,
86
+ default: () => ({})
87
+ },
88
+ /**
89
+ * Hides the close button from the notice
90
+ * @values true, false
91
+ */
92
+ hideClose: {
93
+ type: Boolean,
94
+ default: !1
95
+ },
96
+ /**
97
+ * Hides the icon from the notice
98
+ * @values true, false
99
+ */
100
+ hideIcon: {
101
+ type: Boolean,
102
+ default: !1
103
+ },
104
+ /**
105
+ * Hides the action from the notice
106
+ * @values true, false
107
+ */
108
+ hideAction: {
109
+ type: Boolean,
110
+ default: !1
111
+ },
112
+ /**
113
+ * Inner dialog class
114
+ */
115
+ dialogClass: {
116
+ type: String,
117
+ default: ""
118
+ },
119
+ /**
120
+ * Banner background image
121
+ */
122
+ backgroundImage: {
123
+ type: String,
124
+ default: ""
125
+ },
126
+ /**
127
+ * Background image size, follows the background-size CSS property values
128
+ * <a class="d-link" href="https://developer.mozilla.org/en-US/docs/Web/CSS/background-size" target="_blank">
129
+ * CSS background-sizes
130
+ * </a>
131
+ */
132
+ backgroundSize: {
133
+ type: String,
134
+ default: "cover"
135
+ }
136
+ },
137
+ emits: [
138
+ /**
139
+ * Close button click event
140
+ *
141
+ * @event close
142
+ */
143
+ "close"
144
+ ],
145
+ computed: {
146
+ role() {
147
+ return this.important ? "alertdialog" : "status";
148
+ },
149
+ bannerClass() {
150
+ return [
151
+ "d-banner",
152
+ {
153
+ error: "d-banner--error",
154
+ info: "d-banner--info",
155
+ success: "d-banner--success",
156
+ warning: "d-banner--warning",
157
+ base: "d-banner--base"
158
+ }[this.kind],
159
+ {
160
+ "d-banner--important": this.important,
161
+ "d-banner--pinned": this.pinned
162
+ }
163
+ ];
164
+ },
165
+ bannerBackgroundImage() {
166
+ return this.backgroundImage === "" ? null : `background-image: url(${this.backgroundImage});
167
+ background-size: ${this.backgroundSize};`;
168
+ }
169
+ },
170
+ mounted() {
171
+ this.important && this.focusFirstElement();
172
+ },
173
+ methods: {
174
+ trapFocus(e) {
175
+ this.important && this.focusTrappedTabPress(e);
176
+ }
177
+ }
178
+ };
179
+ var m = function() {
180
+ var t = this, n = t._self._c;
181
+ return n("aside", { class: t.bannerClass, style: t.bannerBackgroundImage, on: { keydown: function(i) {
182
+ return !i.type.indexOf("key") && t._k(i.keyCode, "tab", 9, i.key, "Tab") ? null : t.trapFocus.apply(null, arguments);
183
+ } } }, [n("div", { staticClass: "d-banner__dialog", class: t.dialogClass, attrs: { role: t.role, "aria-labelledby": t.titleId, "aria-describedby": t.contentId } }, [t.hideIcon ? t._e() : n("dt-notice-icon", t._g({ attrs: { kind: t.kind } }, t.$listeners), [t._t("icon")], 2), n("dt-notice-content", t._g({ attrs: { "title-id": t.titleId, "content-id": t.contentId, title: t.title }, scopedSlots: t._u([{ key: "titleOverride", fn: function() {
184
+ return [t._t("titleOverride")];
185
+ }, proxy: !0 }], null, !0) }, t.$listeners), [t._t("default")], 2), n("dt-notice-action", t._g({ attrs: { "hide-action": t.hideAction, "hide-close": t.hideClose, "close-button-props": t.closeButtonProps, "visually-hidden-close": t.visuallyHiddenClose, "visually-hidden-close-label": t.visuallyHiddenCloseLabel } }, t.$listeners), [t._t("action")], 2)], 1)]);
186
+ }, f = [], b = /* @__PURE__ */ s(
187
+ p,
188
+ m,
189
+ f,
190
+ !1,
191
+ null,
192
+ null,
193
+ null,
194
+ null
195
+ );
196
+ const F = b.exports;
197
+ export {
198
+ F as DtBanner
199
+ };
200
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sources":["../../components/banner/banner.vue"],"sourcesContent":["<!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->\n<template>\n <aside\n :class=\"bannerClass\"\n :style=\"bannerBackgroundImage\"\n @keydown.tab=\"trapFocus\"\n >\n <div\n class=\"d-banner__dialog\"\n :class=\"dialogClass\"\n :role=\"role\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"contentId\"\n >\n <dt-notice-icon\n v-if=\"!hideIcon\"\n :kind=\"kind\"\n v-on=\"$listeners\"\n >\n <!-- @slot Slot for custom icon -->\n <slot name=\"icon\" />\n </dt-notice-icon>\n <dt-notice-content\n :title-id=\"titleId\"\n :content-id=\"contentId\"\n :title=\"title\"\n v-on=\"$listeners\"\n >\n <template #titleOverride>\n <!-- eslint-disable-next-line max-len -->\n <!-- @slot Allows you to override the title, only use this if you need to override with something other than text. Otherwise use the \"title\" prop. -->\n <slot name=\"titleOverride\" />\n </template>\n <!-- @slot the main textual content of the banner -->\n <slot />\n </dt-notice-content>\n <dt-notice-action\n :hide-action=\"hideAction\"\n :hide-close=\"hideClose\"\n :close-button-props=\"closeButtonProps\"\n :visually-hidden-close=\"visuallyHiddenClose\"\n :visually-hidden-close-label=\"visuallyHiddenCloseLabel\"\n v-on=\"$listeners\"\n >\n <!-- @slot Enter a possible action for the user to take, such as a link to another page -->\n <slot name=\"action\" />\n </dt-notice-action>\n </div>\n </aside>\n</template>\n\n<script>\nimport { DtNoticeIcon, DtNoticeContent, DtNoticeAction, NOTICE_KINDS } from '@/components/notice';\nimport Modal from '@/common/mixins/modal';\nimport utils from '@/common/utils';\nimport SrOnlyCloseButtonMixin from '@/common/mixins/sr_only_close_button';\n\n/**\n * Banners are a type of notice, delivering system and engagement messaging.\n * These are highly intrusive notices and should be used sparingly and appropriately.\n * @see https://dialtone.dialpad.com/components/banner.html\n */\nexport default {\n name: 'DtBanner',\n\n components: {\n DtNoticeIcon,\n DtNoticeContent,\n DtNoticeAction,\n },\n\n mixins: [Modal, SrOnlyCloseButtonMixin],\n\n props: {\n /**\n * Sets an ID on the title element of the component. Useful for aria-describedby\n * or aria-labelledby or any other reason you may need an id to refer to the title.\n */\n titleId: {\n type: String,\n default () { return utils.getUniqueString(); },\n },\n\n /**\n * Sets an ID on the content element of the component. Useful for aria-describedby\n * or aria-labelledby or any other reason you may need an id to refer to the content.\n */\n contentId: {\n type: String,\n default () { return utils.getUniqueString(); },\n },\n\n /**\n * Title header of the notice. This can be left blank to remove the title from the notice entirely.\n */\n title: {\n type: String,\n default: '',\n },\n\n /**\n * Used in scenarios where the message needs to visually dominate the screen.\n * This will also change the aria role from status to alertdialog.\n * and will modally trap the keyboard focus in the dialog as soon as it displays.\n * @values true, false\n */\n important: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Pins the banner to the top of the window and pushes all app content down.\n * @values true, false\n */\n pinned: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Severity level of the notice, sets the icon and background\n * @values base, error, info, success, warning\n */\n kind: {\n type: String,\n default: 'base',\n validate (kind) {\n return NOTICE_KINDS.includes(kind);\n },\n },\n\n /**\n * Props for the notice close button.\n */\n closeButtonProps: {\n type: Object,\n default: () => ({}),\n },\n\n /**\n * Hides the close button from the notice\n * @values true, false\n */\n hideClose: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Hides the icon from the notice\n * @values true, false\n */\n hideIcon: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Hides the action from the notice\n * @values true, false\n */\n hideAction: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Inner dialog class\n */\n dialogClass: {\n type: String,\n default: '',\n },\n\n /**\n * Banner background image\n */\n backgroundImage: {\n type: String,\n default: '',\n },\n\n /**\n * Background image size, follows the background-size CSS property values\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/background-size\" target=\"_blank\">\n * CSS background-sizes\n * </a>\n */\n backgroundSize: {\n type: String,\n default: 'cover',\n },\n },\n\n emits: [\n /**\n * Close button click event\n *\n * @event close\n */\n 'close',\n ],\n\n computed: {\n role () {\n return this.important ? 'alertdialog' : 'status';\n },\n\n bannerClass () {\n const kindClasses = {\n error: 'd-banner--error',\n info: 'd-banner--info',\n success: 'd-banner--success',\n warning: 'd-banner--warning',\n base: 'd-banner--base',\n };\n\n return [\n 'd-banner',\n kindClasses[this.kind],\n {\n 'd-banner--important': this.important,\n 'd-banner--pinned': this.pinned,\n },\n ];\n },\n\n bannerBackgroundImage () {\n if (this.backgroundImage === '') return null;\n\n return `background-image: url(${this.backgroundImage});\n background-size: ${this.backgroundSize};`;\n },\n },\n\n mounted () {\n if (this.important) {\n this.focusFirstElement();\n }\n },\n\n methods: {\n trapFocus (e) {\n if (this.important) {\n this.focusTrappedTabPress(e);\n }\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtNoticeIcon","DtNoticeContent","DtNoticeAction","Modal","SrOnlyCloseButtonMixin","utils","kind","NOTICE_KINDS"],"mappings":";;;;;;;;;;;;;;;AA8DA,MAAAA,IAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,gBAAAC;AAAA,EACA;AAAA,EAEA,QAAA,CAAAC,GAAAC,CAAA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,eAAAC,EAAA,gBAAA;AAAA,MAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,eAAAA,EAAA,gBAAA;AAAA,MAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAAC,GAAA;AACA,eAAAC,EAAA,SAAAD,CAAA;AAAA,MACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,kBAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,OAAA,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,gBAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA;AAAA,EACA;AAAA,EAEA,UAAA;AAAA,IACA,OAAA;AACA,aAAA,KAAA,YAAA,gBAAA;AAAA,IACA;AAAA,IAEA,cAAA;AASA,aAAA;AAAA,QACA;AAAA,QATA;AAAA,UACA,OAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAA;AAAA,QACA,EAIA,KAAA,IAAA;AAAA,QACA;AAAA,UACA,uBAAA,KAAA;AAAA,UACA,oBAAA,KAAA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,IAEA,wBAAA;AACA,aAAA,KAAA,oBAAA,KAAA,OAEA,yBAAA,KAAA,eAAA;AAAA,iCACA,KAAA,cAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AACA,IAAA,KAAA,aACA,KAAA,kBAAA;AAAA,EAEA;AAAA,EAEA,SAAA;AAAA,IACA,UAAA,GAAA;AACA,MAAA,KAAA,aACA,KAAA,qBAAA,CAAA;AAAA,IAEA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,138 @@
1
+ import { I as s, M as l } from "../chunks/link_constants-vIUB92L4.js";
2
+ import { n as a } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.js";
3
+ import { DtLink as i } from "./link.js";
4
+ import u from "./utils.js";
5
+ import "./constants.js";
6
+ import "vue";
7
+ const c = "d-breadcrumbs__item--selected", m = "d-breadcrumbs--inverted", _ = {
8
+ name: "DtBreadcrumbItem",
9
+ components: {
10
+ DtLink: i
11
+ },
12
+ inheritAttrs: !1,
13
+ props: {
14
+ /**
15
+ * Passed through to link. If true, applies inverted styles to the link.
16
+ */
17
+ inverted: {
18
+ type: Boolean,
19
+ default: !1
20
+ },
21
+ /**
22
+ * Applies selected styles to the breadcrumb
23
+ */
24
+ selected: {
25
+ type: Boolean,
26
+ default: !1
27
+ },
28
+ /**
29
+ * Describes the breadcrumb. Overridden by default slot
30
+ */
31
+ label: {
32
+ type: String,
33
+ default: ""
34
+ }
35
+ },
36
+ data() {
37
+ return {
38
+ BREADCRUMB_ITEM_SELECTED_MODIFIER: c
39
+ };
40
+ },
41
+ computed: {
42
+ linkKind() {
43
+ return this.inverted ? s : l;
44
+ },
45
+ ariaCurrent() {
46
+ return this.selected ? "location" : void 0;
47
+ }
48
+ }
49
+ };
50
+ var o = function() {
51
+ var e = this, r = e._self._c;
52
+ return r("li", { class: [
53
+ "d-breadcrumbs__item",
54
+ { [e.BREADCRUMB_ITEM_SELECTED_MODIFIER]: e.selected }
55
+ ], attrs: { "data-qa": "dt-breadcrumb-item" } }, [r("dt-link", e._b({ attrs: { kind: e.linkKind, "aria-current": e.ariaCurrent, "data-qa": "breadcrumb-item" } }, "dt-link", e.$attrs, !1), [e._t("default", function() {
56
+ return [e._v(" " + e._s(e.label) + " ")];
57
+ })], 2)], 1);
58
+ }, b = [], f = /* @__PURE__ */ a(
59
+ _,
60
+ o,
61
+ b,
62
+ !1,
63
+ null,
64
+ null,
65
+ null,
66
+ null
67
+ );
68
+ const p = f.exports, E = {
69
+ name: "DtBreadcrumbs",
70
+ components: {
71
+ DtBreadcrumbItem: p
72
+ },
73
+ props: {
74
+ /**
75
+ * A provided list of breadcrumbs. Overridden by default slot
76
+ */
77
+ breadcrumbs: {
78
+ type: Array,
79
+ default: () => [],
80
+ validate(t) {
81
+ return t.every(({ href: e, label: r }) => e !== void 0 && r !== void 0);
82
+ }
83
+ },
84
+ /**
85
+ * Passed through to link. If true, applies inverted styles to the link.
86
+ * @values true, false
87
+ */
88
+ inverted: {
89
+ type: Boolean,
90
+ default: !1
91
+ },
92
+ /**
93
+ * Descriptive label for the navigation content.
94
+ */
95
+ ariaLabel: {
96
+ type: String,
97
+ default: "breadcrumb"
98
+ }
99
+ },
100
+ data() {
101
+ return {
102
+ BREADCRUMBS_INVERTED_MODIFIER: m
103
+ };
104
+ },
105
+ methods: {
106
+ getBreadcrumbItemKey(t) {
107
+ return `breadcrumbs-item-${t}-${u.getUniqueString()}`;
108
+ }
109
+ }
110
+ };
111
+ var v = function() {
112
+ var e = this, r = e._self._c;
113
+ return r("nav", { class: [
114
+ "d-breadcrumbs",
115
+ { [e.BREADCRUMBS_INVERTED_MODIFIER]: e.inverted }
116
+ ], attrs: { "aria-label": e.ariaLabel, "data-qa": "dt-breadcrumbs" } }, [r("ol", [e._t("default", function() {
117
+ return e._l(e.breadcrumbs, function(n, d) {
118
+ return r("dt-breadcrumb-item", e._g(e._b({ key: e.getBreadcrumbItemKey(d), attrs: { inverted: e.inverted } }, "dt-breadcrumb-item", n, !1), e.$listeners));
119
+ });
120
+ })], 2)]);
121
+ }, D = [], I = /* @__PURE__ */ a(
122
+ E,
123
+ v,
124
+ D,
125
+ !1,
126
+ null,
127
+ null,
128
+ null,
129
+ null
130
+ );
131
+ const $ = I.exports;
132
+ export {
133
+ m as BREADCRUMBS_INVERTED_MODIFIER,
134
+ c as BREADCRUMB_ITEM_SELECTED_MODIFIER,
135
+ p as DtBreadcrumbItem,
136
+ $ as DtBreadcrumbs
137
+ };
138
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.js","sources":["../../components/breadcrumbs/breadcrumbs_constants.js","../../components/breadcrumbs/breadcrumb_item.vue","../../components/breadcrumbs/breadcrumbs.vue"],"sourcesContent":["export const BREADCRUMB_ITEM_SELECTED_MODIFIER = 'd-breadcrumbs__item--selected';\nexport const BREADCRUMBS_INVERTED_MODIFIER = 'd-breadcrumbs--inverted';\n","<template>\n <li\n data-qa=\"dt-breadcrumb-item\"\n :class=\"[\n 'd-breadcrumbs__item',\n { [BREADCRUMB_ITEM_SELECTED_MODIFIER]: selected },\n ]\"\n >\n <dt-link\n :kind=\"linkKind\"\n :aria-current=\"ariaCurrent\"\n data-qa=\"breadcrumb-item\"\n v-bind=\"$attrs\"\n >\n <!-- @slot default slot for breadcrumb item's label -->\n <slot>\n {{ label }}\n </slot>\n </dt-link>\n </li>\n</template>\n\n<script>\nimport { BREADCRUMB_ITEM_SELECTED_MODIFIER } from './breadcrumbs_constants';\nimport { DtLink } from '../link';\nimport { INVERTED, MUTED } from '../link/link_constants';\n\nexport default {\n name: 'DtBreadcrumbItem',\n\n components: {\n DtLink,\n },\n\n inheritAttrs: false,\n\n props: {\n /**\n * Passed through to link. If true, applies inverted styles to the link.\n */\n inverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Applies selected styles to the breadcrumb\n */\n selected: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Describes the breadcrumb. Overridden by default slot\n */\n label: {\n type: String,\n default: '',\n },\n },\n\n data () {\n return {\n BREADCRUMB_ITEM_SELECTED_MODIFIER,\n };\n },\n\n computed: {\n linkKind () {\n return this.inverted ? INVERTED : MUTED;\n },\n\n ariaCurrent () {\n return this.selected ? 'location' : undefined;\n },\n },\n};\n</script>\n","<template>\n <nav\n :aria-label=\"ariaLabel\"\n data-qa=\"dt-breadcrumbs\"\n :class=\"[\n 'd-breadcrumbs',\n { [BREADCRUMBS_INVERTED_MODIFIER]: inverted },\n ]\"\n >\n <ol>\n <!-- @slot default slot for breadcrumbs content -->\n <slot>\n <dt-breadcrumb-item\n v-for=\"(item, index) in breadcrumbs\"\n :key=\"getBreadcrumbItemKey(index)\"\n :inverted=\"inverted\"\n v-bind=\"item\"\n v-on=\"$listeners\"\n />\n </slot>\n </ol>\n </nav>\n</template>\n\n<script>\nimport { BREADCRUMBS_INVERTED_MODIFIER } from './breadcrumbs_constants';\nimport DtBreadcrumbItem from './breadcrumb_item.vue';\nimport utils from '@/common/utils';\n\n/**\n * Breadcrumbs are links used to provide context for the currently-viewed page\n * and where it is located within the overall site structure.\n * @see https://dialtone.dialpad.com/components/breadcrumbs.html\n */\nexport default {\n name: 'DtBreadcrumbs',\n\n components: {\n DtBreadcrumbItem,\n },\n\n props: {\n /**\n * A provided list of breadcrumbs. Overridden by default slot\n */\n breadcrumbs: {\n type: Array,\n default: () => [],\n validate (breadcrumbs) {\n return breadcrumbs.every(({ href, label }) => {\n return href !== undefined && label !== undefined;\n });\n },\n },\n\n /**\n * Passed through to link. If true, applies inverted styles to the link.\n * @values true, false\n */\n inverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Descriptive label for the navigation content.\n */\n ariaLabel: {\n type: String,\n default: 'breadcrumb',\n },\n },\n\n data () {\n return {\n BREADCRUMBS_INVERTED_MODIFIER,\n };\n },\n\n methods: {\n getBreadcrumbItemKey (index) {\n return `breadcrumbs-item-${index}-${utils.getUniqueString()}`;\n },\n },\n};\n</script>\n"],"names":["BREADCRUMB_ITEM_SELECTED_MODIFIER","BREADCRUMBS_INVERTED_MODIFIER","_sfc_main","DtLink","INVERTED","MUTED","DtBreadcrumbItem","breadcrumbs","href","label","index","utils"],"mappings":";;;;;;AAAY,MAACA,IAAoC,iCACpCC,IAAgC,2BC0B7CC,IAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA,QAAAC;AAAA,EACA;AAAA,EAEA,cAAA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,mCAAAH;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AAAA,IACA,WAAA;AACA,aAAA,KAAA,WAAAI,IAAAC;AAAA,IACA;AAAA,IAEA,cAAA;AACA,aAAA,KAAA,WAAA,aAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;qBC3CAH,IAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA,kBAAAI;AAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,MAAA,CAAA;AAAA,MACA,SAAAC,GAAA;AACA,eAAAA,EAAA,MAAA,CAAA,EAAA,MAAAC,GAAA,OAAAC,EAAA,MACAD,MAAA,UAAAC,MAAA,MACA;AAAA,MACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,+BAAAR;AAAA,IACA;AAAA,EACA;AAAA,EAEA,SAAA;AAAA,IACA,qBAAAS,GAAA;AACA,aAAA,oBAAAA,CAAA,IAAAC,EAAA,gBAAA,CAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,45 @@
1
+ import { n as o } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.js";
2
+ const e = {
3
+ start: "d-btn-group--start",
4
+ end: "d-btn-group--end",
5
+ "space-between": "d-btn-group--space-between"
6
+ }, a = {
7
+ name: "DtButtonGroup",
8
+ props: {
9
+ /**
10
+ * Alignment of the buttons inside the container
11
+ */
12
+ alignment: {
13
+ type: String,
14
+ default: "start",
15
+ validator: (n) => Object.keys(e).includes(n)
16
+ }
17
+ },
18
+ data() {
19
+ return {
20
+ BUTTON_GROUP_ALIGNMENT: e
21
+ };
22
+ }
23
+ };
24
+ var s = function() {
25
+ var t = this, r = t._self._c;
26
+ return r("div", { class: [
27
+ "d-btn-group",
28
+ t.BUTTON_GROUP_ALIGNMENT[t.alignment]
29
+ ], attrs: { role: "group" } }, [t._t("default")], 2);
30
+ }, u = [], _ = /* @__PURE__ */ o(
31
+ a,
32
+ s,
33
+ u,
34
+ !1,
35
+ null,
36
+ null,
37
+ null,
38
+ null
39
+ );
40
+ const p = _.exports;
41
+ export {
42
+ e as BUTTON_GROUP_ALIGNMENT,
43
+ p as DtButtonGroup
44
+ };
45
+ //# sourceMappingURL=button-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-group.js","sources":["../../components/button_group/button_group_constants.js","../../components/button_group/button_group.vue"],"sourcesContent":["export const BUTTON_GROUP_ALIGNMENT = {\n start: 'd-btn-group--start',\n end: 'd-btn-group--end',\n 'space-between': 'd-btn-group--space-between',\n};\n","<template>\n <div\n :class=\"[\n 'd-btn-group',\n BUTTON_GROUP_ALIGNMENT[alignment],\n ]\"\n role=\"group\"\n >\n <!-- @slot Default slot for button items -->\n <slot />\n </div>\n</template>\n\n<script>\nimport { BUTTON_GROUP_ALIGNMENT } from './button_group_constants';\n\nexport default {\n name: 'DtButtonGroup',\n\n props: {\n /**\n * Alignment of the buttons inside the container\n */\n alignment: {\n type: String,\n default: 'start',\n validator: (alignment) => Object.keys(BUTTON_GROUP_ALIGNMENT).includes(alignment),\n },\n },\n\n data () {\n return {\n BUTTON_GROUP_ALIGNMENT,\n };\n },\n};\n</script>\n"],"names":["BUTTON_GROUP_ALIGNMENT","_sfc_main","alignment"],"mappings":";AAAY,MAACA,IAAyB;AAAA,EACpC,OAAO;AAAA,EACP,KAAK;AAAA,EACL,iBAAiB;AACnB,GCYAC,IAAA;AAAA,EACA,MAAA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAC,MAAA,OAAA,KAAAF,CAAA,EAAA,SAAAE,CAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,wBAAAF;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;"}