@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.
- package/dist/tokens/doc.json +5884 -5884
- package/dist/vue2/chunks/{icon_constants-Dy4MEUJL.js → icon_constants-H9ahUVCG.js} +2 -2
- package/dist/vue2/chunks/icon_constants-H9ahUVCG.js.map +1 -0
- package/dist/vue2/chunks/{icon_constants-QYpmdE0R.js → icon_constants-da57m7BZ.js} +2 -2
- package/dist/vue2/chunks/icon_constants-da57m7BZ.js.map +1 -0
- package/dist/vue2/dialtone-vue.cjs +3 -3
- package/dist/vue2/dialtone-vue.js +3 -3
- package/dist/vue2/lib/attachment-carousel.cjs +2 -2
- package/dist/vue2/lib/attachment-carousel.js +2 -2
- package/dist/vue2/lib/avatar.cjs +2 -2
- package/dist/vue2/lib/avatar.cjs.map +1 -1
- package/dist/vue2/lib/avatar.js +2 -2
- package/dist/vue2/lib/avatar.js.map +1 -1
- package/dist/vue2/lib/badge.cjs +2 -2
- package/dist/vue2/lib/badge.js +2 -2
- package/dist/vue2/lib/banner.cjs +2 -2
- package/dist/vue2/lib/banner.js +2 -2
- package/dist/vue2/lib/callbar-button-with-popover.cjs +2 -2
- package/dist/vue2/lib/callbar-button-with-popover.js +2 -2
- package/dist/vue2/lib/callbox.cjs +2 -2
- package/dist/vue2/lib/callbox.js +2 -2
- package/dist/vue2/lib/chip.cjs +2 -2
- package/dist/vue2/lib/chip.js +2 -2
- package/dist/vue2/lib/collapsible.cjs +2 -2
- package/dist/vue2/lib/collapsible.js +2 -2
- package/dist/vue2/lib/combobox-multi-select.cjs +2 -2
- package/dist/vue2/lib/combobox-multi-select.js +2 -2
- package/dist/vue2/lib/combobox-with-popover.cjs +2 -2
- package/dist/vue2/lib/combobox-with-popover.js +2 -2
- package/dist/vue2/lib/combobox.cjs +2 -2
- package/dist/vue2/lib/combobox.js +2 -2
- package/dist/vue2/lib/contact-centers-row.cjs +2 -2
- package/dist/vue2/lib/contact-centers-row.js +2 -2
- package/dist/vue2/lib/contact-info.cjs +2 -2
- package/dist/vue2/lib/contact-info.js +2 -2
- package/dist/vue2/lib/contact-row.cjs +2 -2
- package/dist/vue2/lib/contact-row.js +2 -2
- package/dist/vue2/lib/datepicker.cjs +2 -2
- package/dist/vue2/lib/datepicker.js +2 -2
- package/dist/vue2/lib/dropdown.cjs +2 -2
- package/dist/vue2/lib/dropdown.js +2 -2
- package/dist/vue2/lib/editor.cjs +2 -2
- package/dist/vue2/lib/editor.js +2 -2
- package/dist/vue2/lib/emoji-picker.cjs +2 -2
- package/dist/vue2/lib/emoji-picker.js +2 -2
- package/dist/vue2/lib/emoji-row.cjs +2 -2
- package/dist/vue2/lib/emoji-row.js +2 -2
- package/dist/vue2/lib/emoji-text-wrapper.cjs +2 -2
- package/dist/vue2/lib/emoji-text-wrapper.js +2 -2
- package/dist/vue2/lib/emoji.cjs +2 -2
- package/dist/vue2/lib/emoji.js +2 -2
- package/dist/vue2/lib/empty-state.cjs +3 -3
- package/dist/vue2/lib/empty-state.js +3 -3
- package/dist/vue2/lib/feed-item-row.cjs +2 -2
- package/dist/vue2/lib/feed-item-row.js +2 -2
- package/dist/vue2/lib/feed-pill.cjs +2 -2
- package/dist/vue2/lib/feed-pill.js +2 -2
- package/dist/vue2/lib/general-row.cjs +2 -2
- package/dist/vue2/lib/general-row.js +2 -2
- package/dist/vue2/lib/group-row.cjs +2 -2
- package/dist/vue2/lib/group-row.js +2 -2
- package/dist/vue2/lib/grouped-chip.cjs +2 -2
- package/dist/vue2/lib/grouped-chip.js +2 -2
- package/dist/vue2/lib/hovercard.cjs +2 -2
- package/dist/vue2/lib/hovercard.js +2 -2
- package/dist/vue2/lib/icon.cjs +2 -2
- package/dist/vue2/lib/icon.js +2 -2
- package/dist/vue2/lib/illustration.cjs +1 -1
- package/dist/vue2/lib/illustration.cjs.map +1 -1
- package/dist/vue2/lib/illustration.js +1 -1
- package/dist/vue2/lib/illustration.js.map +1 -1
- package/dist/vue2/lib/image-viewer.cjs +2 -2
- package/dist/vue2/lib/image-viewer.js +2 -2
- package/dist/vue2/lib/ivr-node.cjs +2 -2
- package/dist/vue2/lib/ivr-node.js +2 -2
- package/dist/vue2/lib/keyboard-shortcut.cjs +2 -2
- package/dist/vue2/lib/keyboard-shortcut.js +2 -2
- package/dist/vue2/lib/list-item.cjs +2 -2
- package/dist/vue2/lib/list-item.js +2 -2
- package/dist/vue2/lib/message-input.cjs +2 -2
- package/dist/vue2/lib/message-input.js +2 -2
- package/dist/vue2/lib/modal.cjs +2 -2
- package/dist/vue2/lib/modal.js +2 -2
- package/dist/vue2/lib/notice.cjs +2 -2
- package/dist/vue2/lib/notice.js +2 -2
- package/dist/vue2/lib/pagination.cjs +2 -2
- package/dist/vue2/lib/pagination.js +2 -2
- package/dist/vue2/lib/popover.cjs +2 -2
- package/dist/vue2/lib/popover.js +2 -2
- package/dist/vue2/lib/rich-text-editor.cjs +2 -2
- package/dist/vue2/lib/rich-text-editor.js +2 -2
- package/dist/vue2/lib/settings-menu-button.cjs +2 -2
- package/dist/vue2/lib/settings-menu-button.js +2 -2
- package/dist/vue2/lib/split-button.cjs +2 -2
- package/dist/vue2/lib/split-button.js +2 -2
- package/dist/vue2/lib/toast.cjs +2 -2
- package/dist/vue2/lib/toast.js +2 -2
- package/dist/vue2/lib/unread-pill.cjs +2 -2
- package/dist/vue2/lib/unread-pill.js +2 -2
- package/dist/vue3/chunks/{icon_constants-Dy4MEUJL.js → icon_constants-H9ahUVCG.js} +2 -2
- package/dist/vue3/chunks/icon_constants-H9ahUVCG.js.map +1 -0
- package/dist/vue3/chunks/{icon_constants-QYpmdE0R.js → icon_constants-da57m7BZ.js} +2 -2
- package/dist/vue3/chunks/icon_constants-da57m7BZ.js.map +1 -0
- package/dist/vue3/component-documentation.json +1 -1
- package/dist/vue3/dialtone-vue.cjs +3 -3
- package/dist/vue3/dialtone-vue.js +3 -3
- package/dist/vue3/lib/attachment-carousel.cjs +2 -2
- package/dist/vue3/lib/attachment-carousel.js +2 -2
- package/dist/vue3/lib/avatar.cjs +32 -46
- package/dist/vue3/lib/avatar.cjs.map +1 -1
- package/dist/vue3/lib/avatar.js +34 -48
- package/dist/vue3/lib/avatar.js.map +1 -1
- package/dist/vue3/lib/badge.cjs +2 -2
- package/dist/vue3/lib/badge.js +2 -2
- package/dist/vue3/lib/banner.cjs +2 -2
- package/dist/vue3/lib/banner.js +2 -2
- package/dist/vue3/lib/callbar-button-with-popover.cjs +2 -2
- package/dist/vue3/lib/callbar-button-with-popover.js +2 -2
- package/dist/vue3/lib/callbox.cjs +15 -7
- package/dist/vue3/lib/callbox.cjs.map +1 -1
- package/dist/vue3/lib/callbox.js +16 -8
- package/dist/vue3/lib/callbox.js.map +1 -1
- package/dist/vue3/lib/chip.cjs +2 -2
- package/dist/vue3/lib/chip.js +2 -2
- package/dist/vue3/lib/collapsible.cjs +2 -2
- package/dist/vue3/lib/collapsible.js +2 -2
- package/dist/vue3/lib/combobox-multi-select.cjs +2 -2
- package/dist/vue3/lib/combobox-multi-select.js +2 -2
- package/dist/vue3/lib/combobox-with-popover.cjs +2 -2
- package/dist/vue3/lib/combobox-with-popover.js +2 -2
- package/dist/vue3/lib/combobox.cjs +2 -2
- package/dist/vue3/lib/combobox.js +2 -2
- package/dist/vue3/lib/contact-centers-row.cjs +2 -2
- package/dist/vue3/lib/contact-centers-row.js +2 -2
- package/dist/vue3/lib/contact-info.cjs +29 -11
- package/dist/vue3/lib/contact-info.cjs.map +1 -1
- package/dist/vue3/lib/contact-info.js +30 -12
- package/dist/vue3/lib/contact-info.js.map +1 -1
- package/dist/vue3/lib/contact-row.cjs +16 -11
- package/dist/vue3/lib/contact-row.cjs.map +1 -1
- package/dist/vue3/lib/contact-row.js +17 -12
- package/dist/vue3/lib/contact-row.js.map +1 -1
- package/dist/vue3/lib/datepicker.cjs +2 -2
- package/dist/vue3/lib/datepicker.js +2 -2
- package/dist/vue3/lib/dropdown.cjs +2 -2
- package/dist/vue3/lib/dropdown.js +2 -2
- package/dist/vue3/lib/editor.cjs +2 -2
- package/dist/vue3/lib/editor.js +2 -2
- package/dist/vue3/lib/emoji-picker.cjs +2 -2
- package/dist/vue3/lib/emoji-picker.js +2 -2
- package/dist/vue3/lib/emoji-row.cjs +2 -2
- package/dist/vue3/lib/emoji-row.js +2 -2
- package/dist/vue3/lib/emoji-text-wrapper.cjs +2 -2
- package/dist/vue3/lib/emoji-text-wrapper.js +2 -2
- package/dist/vue3/lib/emoji.cjs +2 -2
- package/dist/vue3/lib/emoji.js +2 -2
- package/dist/vue3/lib/empty-state.cjs +3 -3
- package/dist/vue3/lib/empty-state.js +3 -3
- package/dist/vue3/lib/feed-item-row.cjs +17 -11
- package/dist/vue3/lib/feed-item-row.cjs.map +1 -1
- package/dist/vue3/lib/feed-item-row.js +18 -12
- package/dist/vue3/lib/feed-item-row.js.map +1 -1
- package/dist/vue3/lib/feed-pill.cjs +2 -2
- package/dist/vue3/lib/feed-pill.js +2 -2
- package/dist/vue3/lib/general-row.cjs +2 -2
- package/dist/vue3/lib/general-row.js +2 -2
- package/dist/vue3/lib/group-row.cjs +2 -2
- package/dist/vue3/lib/group-row.js +2 -2
- package/dist/vue3/lib/grouped-chip.cjs +2 -2
- package/dist/vue3/lib/grouped-chip.js +2 -2
- package/dist/vue3/lib/hovercard.cjs +2 -2
- package/dist/vue3/lib/hovercard.js +2 -2
- package/dist/vue3/lib/icon.cjs +2 -2
- package/dist/vue3/lib/icon.js +2 -2
- package/dist/vue3/lib/illustration.cjs +1 -1
- package/dist/vue3/lib/illustration.cjs.map +1 -1
- package/dist/vue3/lib/illustration.js +1 -1
- package/dist/vue3/lib/illustration.js.map +1 -1
- package/dist/vue3/lib/image-viewer.cjs +2 -2
- package/dist/vue3/lib/image-viewer.js +2 -2
- package/dist/vue3/lib/ivr-node.cjs +2 -2
- package/dist/vue3/lib/ivr-node.js +2 -2
- package/dist/vue3/lib/keyboard-shortcut.cjs +2 -2
- package/dist/vue3/lib/keyboard-shortcut.js +2 -2
- package/dist/vue3/lib/list-item.cjs +2 -2
- package/dist/vue3/lib/list-item.js +2 -2
- package/dist/vue3/lib/message-input.cjs +2 -2
- package/dist/vue3/lib/message-input.js +2 -2
- package/dist/vue3/lib/modal.cjs +2 -2
- package/dist/vue3/lib/modal.js +2 -2
- package/dist/vue3/lib/notice.cjs +2 -2
- package/dist/vue3/lib/notice.js +2 -2
- package/dist/vue3/lib/pagination.cjs +2 -2
- package/dist/vue3/lib/pagination.js +2 -2
- package/dist/vue3/lib/popover.cjs +2 -2
- package/dist/vue3/lib/popover.js +2 -2
- package/dist/vue3/lib/rich-text-editor.cjs +2 -2
- package/dist/vue3/lib/rich-text-editor.js +2 -2
- package/dist/vue3/lib/settings-menu-button.cjs +2 -2
- package/dist/vue3/lib/settings-menu-button.js +2 -2
- package/dist/vue3/lib/split-button.cjs +2 -2
- package/dist/vue3/lib/split-button.js +2 -2
- package/dist/vue3/lib/toast.cjs +2 -2
- package/dist/vue3/lib/toast.js +2 -2
- package/dist/vue3/lib/unread-pill.cjs +2 -2
- package/dist/vue3/lib/unread-pill.js +2 -2
- package/dist/vue3/style.css +49 -49
- package/dist/vue3/types/components/avatar/avatar.vue.d.ts +6 -34
- package/dist/vue3/types/components/avatar/avatar.vue.d.ts.map +1 -1
- package/dist/vue3/types/components/chip/chip.vue.d.ts +1 -1
- package/dist/vue3/types/components/collapsible/collapsible.vue.d.ts +1 -1
- package/dist/vue3/types/components/split_button/split_button-omega.vue.d.ts +1 -1
- package/dist/vue3/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts +1 -1
- package/dist/vue3/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +1 -1
- package/dist/vue3/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts +0 -1
- package/dist/vue3/types/recipes/conversation_view/feed_item_row/feed_item_row.vue.d.ts.map +1 -1
- package/dist/vue3/types/recipes/item_layout/contact_info/contact_info.vue.d.ts +3 -3
- package/dist/vue3/types/recipes/leftbar/callbox/callbox.vue.d.ts.map +1 -1
- package/dist/vue3/types/recipes/leftbar/contact_row/contact_row.vue.d.ts +0 -1
- package/dist/vue3/types/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
- package/dist/vue3/types/recipes/leftbar/general_row/general_row.vue.d.ts +1 -1
- package/package.json +2 -2
- package/dist/vue2/chunks/icon_constants-Dy4MEUJL.js.map +0 -1
- package/dist/vue2/chunks/icon_constants-QYpmdE0R.js.map +0 -1
- package/dist/vue3/chunks/icon_constants-Dy4MEUJL.js.map +0 -1
- package/dist/vue3/chunks/icon_constants-QYpmdE0R.js.map +0 -1
- package/dist/vue3/types/common/storybook_utils.d.ts +0 -25
- 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-
|
|
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/
|
|
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-
|
|
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/
|
|
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-
|
|
14
|
-
require("@dialpad/dialtone-icons/icons.
|
|
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-
|
|
12
|
-
import "@dialpad/dialtone-icons/icons.
|
|
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: {
|
package/dist/vue3/lib/avatar.cjs
CHANGED
|
@@ -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
|
|
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/
|
|
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
|
|
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
|
-
|
|
265
|
-
return
|
|
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.
|
|
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
|
|
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)) : $
|
|
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
|
-
"
|
|
413
|
-
|
|
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
|
-
$
|
|
408
|
+
$options.hasOverlayIcon || $props.overlayText ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
419
409
|
key: 0,
|
|
420
410
|
class: vue.normalizeClass($options.overlayClasses)
|
|
421
411
|
}, [
|
|
422
|
-
$
|
|
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",
|
|
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
|
-
_:
|
|
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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"}
|
package/dist/vue3/lib/avatar.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { getUniqueString, getRandomElement } from "../common/utils.js";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
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/
|
|
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
|
|
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
|
-
|
|
263
|
-
return
|
|
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.
|
|
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
|
|
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)) : $
|
|
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
|
-
"
|
|
411
|
-
|
|
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
|
-
$
|
|
406
|
+
$options.hasOverlayIcon || $props.overlayText ? (openBlock(), createElementBlock("div", {
|
|
417
407
|
key: 0,
|
|
418
408
|
class: normalizeClass($options.overlayClasses)
|
|
419
409
|
}, [
|
|
420
|
-
$
|
|
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",
|
|
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
|
-
_:
|
|
422
|
+
_: 3
|
|
437
423
|
}, 8, ["id", "class", "onClick"]);
|
|
438
424
|
}
|
|
439
425
|
const DtAvatar = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
|