@flipdish/ui-library 0.17.0 → 0.19.0
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/components/atoms/AppStoreButton/components/app-store-buttons-outline.cjs +5 -12
- package/dist/components/atoms/AppStoreButton/components/app-store-buttons-outline.cjs.map +1 -1
- package/dist/components/atoms/AppStoreButton/components/app-store-buttons-outline.d.ts.map +1 -1
- package/dist/components/atoms/AppStoreButton/components/app-store-buttons-outline.js +5 -12
- package/dist/components/atoms/AppStoreButton/components/app-store-buttons-outline.js.map +1 -1
- package/dist/components/atoms/AppStoreButton/index.cjs +6 -15
- package/dist/components/atoms/AppStoreButton/index.cjs.map +1 -1
- package/dist/components/atoms/AppStoreButton/index.d.ts.map +1 -1
- package/dist/components/atoms/AppStoreButton/index.js +6 -15
- package/dist/components/atoms/AppStoreButton/index.js.map +1 -1
- package/dist/components/atoms/Avatar/components/avatar-base.cjs +60 -0
- package/dist/components/atoms/Avatar/components/avatar-base.cjs.map +1 -0
- package/dist/components/atoms/Avatar/components/avatar-base.d.ts +77 -0
- package/dist/components/atoms/Avatar/components/avatar-base.d.ts.map +1 -0
- package/dist/components/atoms/Avatar/components/avatar-base.js +58 -0
- package/dist/components/atoms/Avatar/components/avatar-base.js.map +1 -0
- package/dist/components/atoms/Avatar/components/avatar-label-group.cjs +2 -2
- package/dist/components/atoms/Avatar/components/avatar-label-group.cjs.map +1 -1
- package/dist/components/atoms/Avatar/components/avatar-label-group.d.ts +1 -1
- package/dist/components/atoms/Avatar/components/avatar-label-group.d.ts.map +1 -1
- package/dist/components/atoms/Avatar/components/avatar-label-group.js +1 -1
- package/dist/components/atoms/Avatar/index.cjs +3 -55
- package/dist/components/atoms/Avatar/index.cjs.map +1 -1
- package/dist/components/atoms/Avatar/index.d.ts +2 -70
- package/dist/components/atoms/Avatar/index.d.ts.map +1 -1
- package/dist/components/atoms/Avatar/index.js +1 -57
- package/dist/components/atoms/Avatar/index.js.map +1 -1
- package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs +2 -1
- package/dist/components/atoms/BackgroundPattern/components/grid-check.cjs.map +1 -1
- package/dist/components/atoms/BackgroundPattern/components/grid-check.d.ts.map +1 -1
- package/dist/components/atoms/BackgroundPattern/components/grid-check.js +2 -1
- package/dist/components/atoms/BackgroundPattern/components/grid-check.js.map +1 -1
- package/dist/components/atoms/BackgroundPattern/index.cjs +4 -1
- package/dist/components/atoms/BackgroundPattern/index.cjs.map +1 -1
- package/dist/components/atoms/BackgroundPattern/index.d.ts +8 -3
- package/dist/components/atoms/BackgroundPattern/index.d.ts.map +1 -1
- package/dist/components/atoms/BackgroundPattern/index.js +4 -1
- package/dist/components/atoms/BackgroundPattern/index.js.map +1 -1
- package/dist/components/atoms/Button/index.cjs +3 -3
- package/dist/components/atoms/Button/index.cjs.map +1 -1
- package/dist/components/atoms/Button/index.d.ts.map +1 -1
- package/dist/components/atoms/Button/index.js +1 -1
- package/dist/components/atoms/FeaturedIcon/index.cjs +2 -2
- package/dist/components/atoms/FeaturedIcon/index.cjs.map +1 -1
- package/dist/components/atoms/FeaturedIcon/index.d.ts.map +1 -1
- package/dist/components/atoms/FeaturedIcon/index.js +1 -1
- package/dist/components/atoms/UtilityButton/index.cjs +2 -2
- package/dist/components/atoms/UtilityButton/index.cjs.map +1 -1
- package/dist/components/atoms/UtilityButton/index.d.ts.map +1 -1
- package/dist/components/atoms/UtilityButton/index.js +1 -1
- package/dist/components/molecules/BadgeGroup/index.cjs +3 -3
- package/dist/components/molecules/BadgeGroup/index.cjs.map +1 -1
- package/dist/components/molecules/BadgeGroup/index.d.ts.map +1 -1
- package/dist/components/molecules/BadgeGroup/index.js +1 -1
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-account-item.cjs +2 -2
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-account-item.cjs.map +1 -1
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-account-item.js +1 -1
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-item.cjs +9 -6
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-item.cjs.map +1 -1
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-item.d.ts +1 -1
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-item.d.ts.map +1 -1
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-item.js +7 -4
- package/dist/components/molecules/Breadcrumbs/components/breadcrumb-item.js.map +1 -1
- package/dist/components/molecules/Breadcrumbs/index.cjs +3 -6
- package/dist/components/molecules/Breadcrumbs/index.cjs.map +1 -1
- package/dist/components/molecules/Breadcrumbs/index.d.ts +2 -6
- package/dist/components/molecules/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/components/molecules/Breadcrumbs/index.js +2 -5
- package/dist/components/molecules/Breadcrumbs/index.js.map +1 -1
- package/dist/components/molecules/Breadcrumbs/providers/breadcrumbs-context.cjs +17 -0
- package/dist/components/molecules/Breadcrumbs/providers/breadcrumbs-context.cjs.map +1 -0
- package/dist/components/molecules/Breadcrumbs/providers/breadcrumbs-context.d.ts +13 -0
- package/dist/components/molecules/Breadcrumbs/providers/breadcrumbs-context.d.ts.map +1 -0
- package/dist/components/molecules/Breadcrumbs/providers/breadcrumbs-context.js +15 -0
- package/dist/components/molecules/Breadcrumbs/providers/breadcrumbs-context.js.map +1 -0
- package/dist/components/molecules/ButtonGroup/index.cjs +2 -2
- package/dist/components/molecules/ButtonGroup/index.cjs.map +1 -1
- package/dist/components/molecules/ButtonGroup/index.d.ts.map +1 -1
- package/dist/components/molecules/ButtonGroup/index.js +1 -1
- package/dist/components/molecules/EmptyState/index.cjs +4 -1
- package/dist/components/molecules/EmptyState/index.cjs.map +1 -1
- package/dist/components/molecules/EmptyState/index.d.ts.map +1 -1
- package/dist/components/molecules/EmptyState/index.js +4 -1
- package/dist/components/molecules/EmptyState/index.js.map +1 -1
- package/dist/components/molecules/Pagination/index.cjs +2 -2
- package/dist/components/molecules/Pagination/index.cjs.map +1 -1
- package/dist/components/molecules/Pagination/index.d.ts +1 -1
- package/dist/components/molecules/Pagination/index.d.ts.map +1 -1
- package/dist/components/molecules/Pagination/index.js +2 -2
- package/dist/components/molecules/Pagination/index.js.map +1 -1
- package/dist/components/molecules/Select/components/combobox.cjs +2 -2
- package/dist/components/molecules/Select/components/combobox.cjs.map +1 -1
- package/dist/components/molecules/Select/components/combobox.d.ts.map +1 -1
- package/dist/components/molecules/Select/components/combobox.js +1 -1
- package/dist/components/molecules/Select/components/select-item.cjs +2 -2
- package/dist/components/molecules/Select/components/select-item.cjs.map +1 -1
- package/dist/components/molecules/Select/components/select-item.d.ts.map +1 -1
- package/dist/components/molecules/Select/components/select-item.js +1 -1
- package/dist/components/molecules/Select/index.cjs +2 -2
- package/dist/components/molecules/Select/index.cjs.map +1 -1
- package/dist/components/molecules/Select/index.d.ts.map +1 -1
- package/dist/components/molecules/Select/index.js +1 -1
- package/dist/components/molecules/Tabs/index.cjs +2 -2
- package/dist/components/molecules/Tabs/index.cjs.map +1 -1
- package/dist/components/molecules/Tabs/index.d.ts.map +1 -1
- package/dist/components/molecules/Tabs/index.js +1 -1
- package/dist/components/organisms/ActivityFeed/index.cjs +5 -1
- package/dist/components/organisms/ActivityFeed/index.cjs.map +1 -1
- package/dist/components/organisms/ActivityFeed/index.d.ts.map +1 -1
- package/dist/components/organisms/ActivityFeed/index.js +5 -1
- package/dist/components/organisms/ActivityFeed/index.js.map +1 -1
- package/dist/components/organisms/Calendar/calendar.utils.cjs +16 -0
- package/dist/components/organisms/Calendar/calendar.utils.cjs.map +1 -0
- package/dist/components/organisms/Calendar/calendar.utils.d.ts +6 -0
- package/dist/components/organisms/Calendar/calendar.utils.d.ts.map +1 -0
- package/dist/components/organisms/Calendar/calendar.utils.js +14 -0
- package/dist/components/organisms/Calendar/calendar.utils.js.map +1 -0
- package/dist/components/organisms/Calendar/components/calendar-header.cjs +2 -1
- package/dist/components/organisms/Calendar/components/calendar-header.cjs.map +1 -1
- package/dist/components/organisms/Calendar/components/calendar-header.d.ts.map +1 -1
- package/dist/components/organisms/Calendar/components/calendar-header.js +2 -1
- package/dist/components/organisms/Calendar/components/calendar-header.js.map +1 -1
- package/dist/components/organisms/Calendar/index.cjs +13 -7
- package/dist/components/organisms/Calendar/index.cjs.map +1 -1
- package/dist/components/organisms/Calendar/index.d.ts.map +1 -1
- package/dist/components/organisms/Calendar/index.js +13 -7
- package/dist/components/organisms/Calendar/index.js.map +1 -1
- package/dist/components/organisms/Charts/components/charts-base.cjs +4 -0
- package/dist/components/organisms/Charts/components/charts-base.cjs.map +1 -1
- package/dist/components/organisms/Charts/components/charts-base.d.ts.map +1 -1
- package/dist/components/organisms/Charts/components/charts-base.js +4 -0
- package/dist/components/organisms/Charts/components/charts-base.js.map +1 -1
- package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.cjs +6 -0
- package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.cjs.map +1 -1
- package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.d.ts.map +1 -1
- package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.js +6 -0
- package/dist/components/organisms/GradientPicker/providers/gradient-picker-context.js.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs +2 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.cjs.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.d.ts.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js +2 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-account-card.js.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-item.cjs +4 -3
- package/dist/components/organisms/HeaderNavigation/components/nav-item.cjs.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-item.d.ts.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-item.js +4 -3
- package/dist/components/organisms/HeaderNavigation/components/nav-item.js.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-list.cjs +4 -2
- package/dist/components/organisms/HeaderNavigation/components/nav-list.cjs.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-list.d.ts.map +1 -1
- package/dist/components/organisms/HeaderNavigation/components/nav-list.js +4 -2
- package/dist/components/organisms/HeaderNavigation/components/nav-list.js.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-button.cjs +5 -2
- package/dist/components/organisms/SidebarNavigation/components/nav-button.cjs.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-button.d.ts.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-button.js +5 -2
- package/dist/components/organisms/SidebarNavigation/components/nav-button.js.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-item.cjs +5 -4
- package/dist/components/organisms/SidebarNavigation/components/nav-item.cjs.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-item.d.ts.map +1 -1
- package/dist/components/organisms/SidebarNavigation/components/nav-item.js +5 -4
- package/dist/components/organisms/SidebarNavigation/components/nav-item.js.map +1 -1
- package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs +7 -2
- package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.cjs.map +1 -1
- package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.d.ts.map +1 -1
- package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js +7 -2
- package/dist/components/organisms/SidebarNavigation/hooks/use-dual-tier-keyboard.js.map +1 -1
- package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs +32 -15
- package/dist/components/organisms/TextEditor/components/text-editor-extensions.cjs.map +1 -1
- package/dist/components/organisms/TextEditor/components/text-editor-extensions.d.ts.map +1 -1
- package/dist/components/organisms/TextEditor/components/text-editor-extensions.js +20 -3
- package/dist/components/organisms/TextEditor/components/text-editor-extensions.js.map +1 -1
- package/dist/components/organisms/TextEditor/components/text-editor-tooltip.cjs +2 -2
- package/dist/components/organisms/TextEditor/components/text-editor-tooltip.cjs.map +1 -1
- package/dist/components/organisms/TextEditor/components/text-editor-tooltip.js +1 -1
- package/dist/components/organisms/TextEditor/index.cjs +30 -18
- package/dist/components/organisms/TextEditor/index.cjs.map +1 -1
- package/dist/components/organisms/TextEditor/index.d.ts +2 -10
- package/dist/components/organisms/TextEditor/index.d.ts.map +1 -1
- package/dist/components/organisms/TextEditor/index.js +26 -14
- package/dist/components/organisms/TextEditor/index.js.map +1 -1
- package/dist/components/organisms/TextEditor/providers/text-editor-context.cjs +21 -0
- package/dist/components/organisms/TextEditor/providers/text-editor-context.cjs.map +1 -0
- package/dist/components/organisms/TextEditor/providers/text-editor-context.d.ts +17 -0
- package/dist/components/organisms/TextEditor/providers/text-editor-context.d.ts.map +1 -0
- package/dist/components/organisms/TextEditor/providers/text-editor-context.js +18 -0
- package/dist/components/organisms/TextEditor/providers/text-editor-context.js.map +1 -0
- package/dist/components/organisms/TextEditor/textEditor.utils.cjs +32 -0
- package/dist/components/organisms/TextEditor/textEditor.utils.cjs.map +1 -0
- package/dist/components/organisms/TextEditor/textEditor.utils.d.ts +14 -0
- package/dist/components/organisms/TextEditor/textEditor.utils.d.ts.map +1 -0
- package/dist/components/organisms/TextEditor/textEditor.utils.js +29 -0
- package/dist/components/organisms/TextEditor/textEditor.utils.js.map +1 -0
- package/dist/components/organisms/TreeView/index.cjs +2 -2
- package/dist/components/organisms/TreeView/index.cjs.map +1 -1
- package/dist/components/organisms/TreeView/index.d.ts.map +1 -1
- package/dist/components/organisms/TreeView/index.js +1 -1
- package/dist/hooks/{useAriaDisclosureAttrs/index.cjs → __internal__/useAriaDisclosureAttrs/useAriaDisclosureAttrs.cjs} +1 -1
- package/dist/hooks/__internal__/useAriaDisclosureAttrs/useAriaDisclosureAttrs.cjs.map +1 -0
- package/dist/hooks/{useAriaDisclosureAttrs/index.d.ts → __internal__/useAriaDisclosureAttrs/useAriaDisclosureAttrs.d.ts} +1 -1
- package/dist/hooks/__internal__/useAriaDisclosureAttrs/useAriaDisclosureAttrs.d.ts.map +1 -0
- package/dist/hooks/{useAriaDisclosureAttrs/index.js → __internal__/useAriaDisclosureAttrs/useAriaDisclosureAttrs.js} +1 -1
- package/dist/hooks/__internal__/useAriaDisclosureAttrs/useAriaDisclosureAttrs.js.map +1 -0
- package/dist/hooks/useClipboard/index.cjs +10 -3
- package/dist/hooks/useClipboard/index.cjs.map +1 -1
- package/dist/hooks/useClipboard/index.d.ts.map +1 -1
- package/dist/hooks/useClipboard/index.js +10 -3
- package/dist/hooks/useClipboard/index.js.map +1 -1
- package/dist/native/components/atoms/Button/index.d.ts.map +1 -1
- package/dist/native/components/atoms/Button/index.js +1 -1
- package/dist/{utilities/isReactComponent/index.d.ts → native/utilities/__internal__/componentGuardUtils/componentGuard.utils.d.ts} +3 -3
- package/dist/native/utilities/__internal__/componentGuardUtils/componentGuard.utils.d.ts.map +1 -0
- package/dist/{utilities/isReactComponent/index.js → native/utilities/__internal__/componentGuardUtils/componentGuard.utils.js} +3 -3
- package/dist/native/utilities/__internal__/componentGuardUtils/componentGuard.utils.js.map +1 -0
- package/dist/native/{hooks/useAriaDisclosureAttrs → utilities/hrefUtils}/index.d.ts +3 -3
- package/dist/utilities/{isReactComponent/index.cjs → __internal__/componentGuardUtils/componentGuard.utils.cjs} +3 -3
- package/dist/utilities/__internal__/componentGuardUtils/componentGuard.utils.cjs.map +1 -0
- package/dist/{native/utilities/isReactComponent/index.d.ts → utilities/__internal__/componentGuardUtils/componentGuard.utils.d.ts} +3 -3
- package/dist/utilities/__internal__/componentGuardUtils/componentGuard.utils.d.ts.map +1 -0
- package/dist/{native/utilities/isReactComponent/index.js → utilities/__internal__/componentGuardUtils/componentGuard.utils.js} +3 -3
- package/dist/utilities/__internal__/componentGuardUtils/componentGuard.utils.js.map +1 -0
- package/dist/utilities/__internal__/logUtils/log.utils.cjs +32 -0
- package/dist/utilities/__internal__/logUtils/log.utils.cjs.map +1 -0
- package/dist/utilities/__internal__/logUtils/log.utils.d.ts +23 -0
- package/dist/utilities/__internal__/logUtils/log.utils.d.ts.map +1 -0
- package/dist/utilities/__internal__/logUtils/log.utils.js +30 -0
- package/dist/utilities/__internal__/logUtils/log.utils.js.map +1 -0
- package/dist/utilities/hrefUtils/index.cjs +50 -0
- package/dist/utilities/hrefUtils/index.cjs.map +1 -0
- package/dist/utilities/hrefUtils/index.d.ts +19 -0
- package/dist/utilities/hrefUtils/index.d.ts.map +1 -0
- package/dist/utilities/hrefUtils/index.js +47 -0
- package/dist/utilities/hrefUtils/index.js.map +1 -0
- package/dist/utilities/renderUtils/index.cjs +7 -12
- package/dist/utilities/renderUtils/index.cjs.map +1 -1
- package/dist/utilities/renderUtils/index.d.ts.map +1 -1
- package/dist/utilities/renderUtils/index.js +7 -12
- package/dist/utilities/renderUtils/index.js.map +1 -1
- package/package.json +5 -1
- package/dist/hooks/useAriaDisclosureAttrs/index.cjs.map +0 -1
- package/dist/hooks/useAriaDisclosureAttrs/index.d.ts.map +0 -1
- package/dist/hooks/useAriaDisclosureAttrs/index.js.map +0 -1
- package/dist/native/utilities/isReactComponent/index.d.ts.map +0 -1
- package/dist/native/utilities/isReactComponent/index.js.map +0 -1
- package/dist/utilities/isReactComponent/index.cjs.map +0 -1
- package/dist/utilities/isReactComponent/index.d.ts.map +0 -1
- package/dist/utilities/isReactComponent/index.js.map +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { User01 } from '@flipdish/ui-icons';
|
|
3
|
+
import { cx } from '@flipdish/ui-library/utilities/cx';
|
|
4
|
+
import { useResolvedTestId, joinTestId } from '@flipdish/ui-library/utilities/testIdUtils';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { styles } from '../Avatar.styles.js';
|
|
7
|
+
import { AvatarCount } from './avatar-count.js';
|
|
8
|
+
import { AvatarOnlineIndicator } from './avatar-online-indicator.js';
|
|
9
|
+
import { VerifiedTick } from './verified-tick.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Represents a user or entity visually using a photo, initials, or fallback
|
|
13
|
+
* icon. Supports size variants, status indicators, verified badges, and count
|
|
14
|
+
* overlays.
|
|
15
|
+
*
|
|
16
|
+
* @summary displays a user or entity with an image, initials, or icon fallback
|
|
17
|
+
*/
|
|
18
|
+
const Avatar = ({ size = 'md', src, alt, initials, placeholder, placeholderIcon: PlaceholderIcon, border, badge, status, verified, count, focusable = false, rounded = true, className, contentClassName, 'data-testid': dataTestId, }) => {
|
|
19
|
+
const [isFailed, setIsFailed] = useState(false);
|
|
20
|
+
const avatarTestId = useResolvedTestId({ testId: dataTestId, segment: 'avatar', rootName: 'avatar' });
|
|
21
|
+
const canShowImage = src && !isFailed;
|
|
22
|
+
const renderMainContent = () => {
|
|
23
|
+
if (canShowImage) {
|
|
24
|
+
return (jsx("img", { "data-avatar-img": true, "data-testid": joinTestId(avatarTestId, 'image'), className: "size-full object-cover", src: src,
|
|
25
|
+
// Always emit an `alt` attribute (axe `image-alt`). Avatars are typically
|
|
26
|
+
// paired with a visible name, so default to `''` (decorative) unless the
|
|
27
|
+
// consumer supplies a meaningful description.
|
|
28
|
+
alt: alt ?? '', onError: () => setIsFailed(true) }));
|
|
29
|
+
}
|
|
30
|
+
if (initials) {
|
|
31
|
+
return jsx("span", { className: cx('text-quaternary', styles[size].initials), children: initials });
|
|
32
|
+
}
|
|
33
|
+
if (PlaceholderIcon) {
|
|
34
|
+
return jsx(PlaceholderIcon, { className: cx('text-fg-quaternary', styles[size].icon) });
|
|
35
|
+
}
|
|
36
|
+
return placeholder || jsx(User01, { className: cx('text-fg-quaternary', styles[size].icon) });
|
|
37
|
+
};
|
|
38
|
+
const renderBadgeContent = () => {
|
|
39
|
+
if (status) {
|
|
40
|
+
return jsx(AvatarOnlineIndicator, { status: status, size: size, "data-testid": joinTestId(avatarTestId, 'status') });
|
|
41
|
+
}
|
|
42
|
+
if (verified) {
|
|
43
|
+
return (jsx(VerifiedTick, { size: size, className: cx('absolute right-0 bottom-0', size === 'xs' && '-right-px -bottom-px'), "data-testid": joinTestId(avatarTestId, 'badge') }));
|
|
44
|
+
}
|
|
45
|
+
if (count) {
|
|
46
|
+
return jsx(AvatarCount, { count: count, "data-testid": joinTestId(avatarTestId, 'badge') });
|
|
47
|
+
}
|
|
48
|
+
return badge;
|
|
49
|
+
};
|
|
50
|
+
return (jsxs("div", { "data-avatar": true, "data-testid": avatarTestId, className: cx('relative inline-flex shrink-0 rounded-[7px]', rounded && 'rounded-full',
|
|
51
|
+
// Focus styles
|
|
52
|
+
focusable && 'outline-transparent group-focus-visible:outline-2 group-focus-visible:outline-offset-2 group-focus-visible:outline-focus-ring', border && 'ring-1 ring-secondary_alt', border && styles[size].rootWithBorder, styles[size].root, className), children: [jsx("div", { className: cx('relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]', rounded && 'rounded-full', canShowImage &&
|
|
53
|
+
size !== 'xs' &&
|
|
54
|
+
'before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]', contentClassName), children: renderMainContent() }), renderBadgeContent()] }));
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export { Avatar };
|
|
58
|
+
//# sourceMappingURL=avatar-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-base.js","sources":["../../../../../src/components/atoms/Avatar/components/avatar-base.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var cx = require('@flipdish/ui-library/utilities/cx');
|
|
5
|
-
var
|
|
5
|
+
var avatarBase = require('./avatar-base.cjs');
|
|
6
6
|
|
|
7
7
|
const styles = {
|
|
8
8
|
sm: { title: 'text-sm ', subtitle: 'text-xs' },
|
|
@@ -10,7 +10,7 @@ const styles = {
|
|
|
10
10
|
lg: { title: 'text-md ', subtitle: 'text-md' },
|
|
11
11
|
};
|
|
12
12
|
const AvatarLabelGroup = ({ title, subtitle, className, rounded, avatarClassName, ...props }) => {
|
|
13
|
-
return (jsxRuntime.jsxs("figure", { className: cx.cx('group flex min-w-0 flex-1 items-center gap-2', className), children: [jsxRuntime.jsx(
|
|
13
|
+
return (jsxRuntime.jsxs("figure", { className: cx.cx('group flex min-w-0 flex-1 items-center gap-2', className), children: [jsxRuntime.jsx(avatarBase.Avatar, { border: true, rounded: rounded, className: avatarClassName, ...props }), jsxRuntime.jsxs("figcaption", { className: "min-w-0 flex-1", children: [jsxRuntime.jsx("p", { className: cx.cx('font-semibold text-primary', styles[props.size].title), children: title }), jsxRuntime.jsx("p", { className: cx.cx('truncate text-tertiary', styles[props.size].subtitle), children: subtitle })] })] }));
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
exports.AvatarLabelGroup = AvatarLabelGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar-label-group.cjs","sources":["../../../../../src/components/atoms/Avatar/components/avatar-label-group.tsx"],"sourcesContent":[null],"names":["_jsxs","cx","_jsx","Avatar"],"mappings":";;;;;;AAMA,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC9C,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC9C,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;CAC/C;MAUY,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,EAAyB,KAAI;AAC5H,IAAA,QACEA,eAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAEC,KAAE,CAAC,8CAA8C,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,CAC9EC,cAAA,CAACC,
|
|
1
|
+
{"version":3,"file":"avatar-label-group.cjs","sources":["../../../../../src/components/atoms/Avatar/components/avatar-label-group.tsx"],"sourcesContent":[null],"names":["_jsxs","cx","_jsx","Avatar"],"mappings":";;;;;;AAMA,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC9C,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC9C,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;CAC/C;MAUY,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,EAAyB,KAAI;AAC5H,IAAA,QACEA,eAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAEC,KAAE,CAAC,8CAA8C,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,CAC9EC,cAAA,CAACC,iBAAM,EAAA,EAAC,MAAM,EAAA,IAAA,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAA,GAAM,KAAK,EAAA,CAAI,EAC1EH,eAAA,CAAA,YAAA,EAAA,EAAY,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CACpCE,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAED,KAAE,CAAC,4BAA4B,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAG,KAAK,EAAA,CAAK,EACrFC,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAED,KAAE,CAAC,wBAAwB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAG,QAAQ,EAAA,CAAK,CAAA,EAAA,CAC5E,CAAA,EAAA,CACN;AAEb;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar-label-group.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/Avatar/components/avatar-label-group.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"avatar-label-group.d.ts","sourceRoot":"","sources":["../../../../../src/components/atoms/Avatar/components/avatar-label-group.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAQzD,UAAU,qBAAsB,SAAQ,WAAW;IACjD,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,GAAI,oEAAoE,qBAAqB,gCAUzH,CAAC"}
|
|
@@ -1,66 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var uiIcons = require('@flipdish/ui-icons');
|
|
5
|
-
var cx = require('@flipdish/ui-library/utilities/cx');
|
|
6
|
-
var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
|
|
7
|
-
var React = require('react');
|
|
8
|
-
var Avatar_styles = require('./Avatar.styles.cjs');
|
|
9
|
-
var avatarCount = require('./components/avatar-count.cjs');
|
|
10
|
-
var avatarOnlineIndicator = require('./components/avatar-online-indicator.cjs');
|
|
11
|
-
var verifiedTick = require('./components/verified-tick.cjs');
|
|
12
3
|
var avatar_utils = require('./avatar.utils.cjs');
|
|
13
4
|
var avatarAddButton = require('./components/avatar-add-button.cjs');
|
|
5
|
+
var avatarBase = require('./components/avatar-base.cjs');
|
|
14
6
|
var avatarLabelGroup = require('./components/avatar-label-group.cjs');
|
|
15
7
|
|
|
16
|
-
|
|
17
|
-
* Represents a user or entity visually using a photo, initials, or fallback
|
|
18
|
-
* icon. Supports size variants, status indicators, verified badges, and count
|
|
19
|
-
* overlays.
|
|
20
|
-
*
|
|
21
|
-
* @summary displays a user or entity with an image, initials, or icon fallback
|
|
22
|
-
*/
|
|
23
|
-
const Avatar = ({ size = 'md', src, alt, initials, placeholder, placeholderIcon: PlaceholderIcon, border, badge, status, verified, count, focusable = false, rounded = true, className, contentClassName, 'data-testid': dataTestId, }) => {
|
|
24
|
-
const [isFailed, setIsFailed] = React.useState(false);
|
|
25
|
-
const avatarTestId = testIdUtils.useResolvedTestId({ testId: dataTestId, segment: 'avatar', rootName: 'avatar' });
|
|
26
|
-
const canShowImage = src && !isFailed;
|
|
27
|
-
const renderMainContent = () => {
|
|
28
|
-
if (canShowImage) {
|
|
29
|
-
return (jsxRuntime.jsx("img", { "data-avatar-img": true, "data-testid": testIdUtils.joinTestId(avatarTestId, 'image'), className: "size-full object-cover", src: src,
|
|
30
|
-
// Always emit an `alt` attribute (axe `image-alt`). Avatars are typically
|
|
31
|
-
// paired with a visible name, so default to `''` (decorative) unless the
|
|
32
|
-
// consumer supplies a meaningful description.
|
|
33
|
-
alt: alt ?? '', onError: () => setIsFailed(true) }));
|
|
34
|
-
}
|
|
35
|
-
if (initials) {
|
|
36
|
-
return jsxRuntime.jsx("span", { className: cx.cx('text-quaternary', Avatar_styles.styles[size].initials), children: initials });
|
|
37
|
-
}
|
|
38
|
-
if (PlaceholderIcon) {
|
|
39
|
-
return jsxRuntime.jsx(PlaceholderIcon, { className: cx.cx('text-fg-quaternary', Avatar_styles.styles[size].icon) });
|
|
40
|
-
}
|
|
41
|
-
return placeholder || jsxRuntime.jsx(uiIcons.User01, { className: cx.cx('text-fg-quaternary', Avatar_styles.styles[size].icon) });
|
|
42
|
-
};
|
|
43
|
-
const renderBadgeContent = () => {
|
|
44
|
-
if (status) {
|
|
45
|
-
return jsxRuntime.jsx(avatarOnlineIndicator.AvatarOnlineIndicator, { status: status, size: size, "data-testid": testIdUtils.joinTestId(avatarTestId, 'status') });
|
|
46
|
-
}
|
|
47
|
-
if (verified) {
|
|
48
|
-
return (jsxRuntime.jsx(verifiedTick.VerifiedTick, { size: size, className: cx.cx('absolute right-0 bottom-0', size === 'xs' && '-right-px -bottom-px'), "data-testid": testIdUtils.joinTestId(avatarTestId, 'badge') }));
|
|
49
|
-
}
|
|
50
|
-
if (count) {
|
|
51
|
-
return jsxRuntime.jsx(avatarCount.AvatarCount, { count: count, "data-testid": testIdUtils.joinTestId(avatarTestId, 'badge') });
|
|
52
|
-
}
|
|
53
|
-
return badge;
|
|
54
|
-
};
|
|
55
|
-
return (jsxRuntime.jsxs("div", { "data-avatar": true, "data-testid": avatarTestId, className: cx.cx('relative inline-flex shrink-0 rounded-[7px]', rounded && 'rounded-full',
|
|
56
|
-
// Focus styles
|
|
57
|
-
focusable && 'outline-transparent group-focus-visible:outline-2 group-focus-visible:outline-offset-2 group-focus-visible:outline-focus-ring', border && 'ring-1 ring-secondary_alt', border && Avatar_styles.styles[size].rootWithBorder, Avatar_styles.styles[size].root, className), children: [jsxRuntime.jsx("div", { className: cx.cx('relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]', rounded && 'rounded-full', canShowImage &&
|
|
58
|
-
size !== 'xs' &&
|
|
59
|
-
'before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]', contentClassName), children: renderMainContent() }), renderBadgeContent()] }));
|
|
60
|
-
};
|
|
8
|
+
|
|
61
9
|
|
|
62
10
|
exports.getInitials = avatar_utils.getInitials;
|
|
63
11
|
exports.AvatarAddButton = avatarAddButton.AvatarAddButton;
|
|
12
|
+
exports.Avatar = avatarBase.Avatar;
|
|
64
13
|
exports.AvatarLabelGroup = avatarLabelGroup.AvatarLabelGroup;
|
|
65
|
-
exports.Avatar = Avatar;
|
|
66
14
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -1,74 +1,5 @@
|
|
|
1
|
-
import { type FC, type ReactNode } from 'react';
|
|
2
1
|
export { getInitials } from './avatar.utils';
|
|
3
2
|
export { AvatarAddButton } from './components/avatar-add-button';
|
|
4
|
-
export { AvatarLabelGroup } from './components/avatar-label-group';
|
|
5
|
-
export interface AvatarProps {
|
|
6
|
-
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
7
|
-
className?: string;
|
|
8
|
-
/**
|
|
9
|
-
* The class name for the main child of the avatar.
|
|
10
|
-
*/
|
|
11
|
-
contentClassName?: string;
|
|
12
|
-
src?: string | null;
|
|
13
|
-
alt?: string;
|
|
14
|
-
/**
|
|
15
|
-
* Display an inner contrast border around the avatar image.
|
|
16
|
-
*/
|
|
17
|
-
contrastBorder?: boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Whether the avatar should be rounded.
|
|
20
|
-
* @default true
|
|
21
|
-
*/
|
|
22
|
-
rounded?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Display an outer border around the avatar.
|
|
25
|
-
*/
|
|
26
|
-
border?: boolean;
|
|
27
|
-
/**
|
|
28
|
-
* Display a badge (i.e. company logo).
|
|
29
|
-
*/
|
|
30
|
-
badge?: ReactNode;
|
|
31
|
-
/**
|
|
32
|
-
* Display a status indicator.
|
|
33
|
-
*/
|
|
34
|
-
status?: 'online' | 'offline';
|
|
35
|
-
/**
|
|
36
|
-
* Display a verified tick icon.
|
|
37
|
-
*
|
|
38
|
-
* @default false
|
|
39
|
-
*/
|
|
40
|
-
verified?: boolean;
|
|
41
|
-
/**
|
|
42
|
-
* Display a count badge.
|
|
43
|
-
*/
|
|
44
|
-
count?: number;
|
|
45
|
-
/**
|
|
46
|
-
* The initials of the user to display if no image is available.
|
|
47
|
-
*/
|
|
48
|
-
initials?: string;
|
|
49
|
-
/**
|
|
50
|
-
* An icon to display if no image is available.
|
|
51
|
-
*/
|
|
52
|
-
placeholderIcon?: FC<{
|
|
53
|
-
className?: string;
|
|
54
|
-
}>;
|
|
55
|
-
/**
|
|
56
|
-
* A placeholder to display if no image is available.
|
|
57
|
-
*/
|
|
58
|
-
placeholder?: ReactNode;
|
|
59
|
-
/**
|
|
60
|
-
* Whether the avatar should show a focus ring when the parent group is in focus.
|
|
61
|
-
* For example, when the avatar is wrapped inside a link.
|
|
62
|
-
*
|
|
63
|
-
* @default false
|
|
64
|
-
*/
|
|
65
|
-
focusable?: boolean;
|
|
66
|
-
/**
|
|
67
|
-
* Overrides the `data-testid` (defaults to `fd-avatar`). The image and badge
|
|
68
|
-
* slot (status indicator / verified tick / count) derive their ids from it.
|
|
69
|
-
*/
|
|
70
|
-
'data-testid'?: string;
|
|
71
|
-
}
|
|
72
3
|
/**
|
|
73
4
|
* Represents a user or entity visually using a photo, initials, or fallback
|
|
74
5
|
* icon. Supports size variants, status indicators, verified badges, and count
|
|
@@ -76,5 +7,6 @@ export interface AvatarProps {
|
|
|
76
7
|
*
|
|
77
8
|
* @summary displays a user or entity with an image, initials, or icon fallback
|
|
78
9
|
*/
|
|
79
|
-
export
|
|
10
|
+
export { Avatar, type AvatarProps } from './components/avatar-base';
|
|
11
|
+
export { AvatarLabelGroup } from './components/avatar-label-group';
|
|
80
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Avatar/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/Avatar/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1,61 +1,5 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { User01 } from '@flipdish/ui-icons';
|
|
3
|
-
import { cx } from '@flipdish/ui-library/utilities/cx';
|
|
4
|
-
import { useResolvedTestId, joinTestId } from '@flipdish/ui-library/utilities/testIdUtils';
|
|
5
|
-
import { useState } from 'react';
|
|
6
|
-
import { styles } from './Avatar.styles.js';
|
|
7
|
-
import { AvatarCount } from './components/avatar-count.js';
|
|
8
|
-
import { AvatarOnlineIndicator } from './components/avatar-online-indicator.js';
|
|
9
|
-
import { VerifiedTick } from './components/verified-tick.js';
|
|
10
1
|
export { getInitials } from './avatar.utils.js';
|
|
11
2
|
export { AvatarAddButton } from './components/avatar-add-button.js';
|
|
3
|
+
export { Avatar } from './components/avatar-base.js';
|
|
12
4
|
export { AvatarLabelGroup } from './components/avatar-label-group.js';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Represents a user or entity visually using a photo, initials, or fallback
|
|
16
|
-
* icon. Supports size variants, status indicators, verified badges, and count
|
|
17
|
-
* overlays.
|
|
18
|
-
*
|
|
19
|
-
* @summary displays a user or entity with an image, initials, or icon fallback
|
|
20
|
-
*/
|
|
21
|
-
const Avatar = ({ size = 'md', src, alt, initials, placeholder, placeholderIcon: PlaceholderIcon, border, badge, status, verified, count, focusable = false, rounded = true, className, contentClassName, 'data-testid': dataTestId, }) => {
|
|
22
|
-
const [isFailed, setIsFailed] = useState(false);
|
|
23
|
-
const avatarTestId = useResolvedTestId({ testId: dataTestId, segment: 'avatar', rootName: 'avatar' });
|
|
24
|
-
const canShowImage = src && !isFailed;
|
|
25
|
-
const renderMainContent = () => {
|
|
26
|
-
if (canShowImage) {
|
|
27
|
-
return (jsx("img", { "data-avatar-img": true, "data-testid": joinTestId(avatarTestId, 'image'), className: "size-full object-cover", src: src,
|
|
28
|
-
// Always emit an `alt` attribute (axe `image-alt`). Avatars are typically
|
|
29
|
-
// paired with a visible name, so default to `''` (decorative) unless the
|
|
30
|
-
// consumer supplies a meaningful description.
|
|
31
|
-
alt: alt ?? '', onError: () => setIsFailed(true) }));
|
|
32
|
-
}
|
|
33
|
-
if (initials) {
|
|
34
|
-
return jsx("span", { className: cx('text-quaternary', styles[size].initials), children: initials });
|
|
35
|
-
}
|
|
36
|
-
if (PlaceholderIcon) {
|
|
37
|
-
return jsx(PlaceholderIcon, { className: cx('text-fg-quaternary', styles[size].icon) });
|
|
38
|
-
}
|
|
39
|
-
return placeholder || jsx(User01, { className: cx('text-fg-quaternary', styles[size].icon) });
|
|
40
|
-
};
|
|
41
|
-
const renderBadgeContent = () => {
|
|
42
|
-
if (status) {
|
|
43
|
-
return jsx(AvatarOnlineIndicator, { status: status, size: size, "data-testid": joinTestId(avatarTestId, 'status') });
|
|
44
|
-
}
|
|
45
|
-
if (verified) {
|
|
46
|
-
return (jsx(VerifiedTick, { size: size, className: cx('absolute right-0 bottom-0', size === 'xs' && '-right-px -bottom-px'), "data-testid": joinTestId(avatarTestId, 'badge') }));
|
|
47
|
-
}
|
|
48
|
-
if (count) {
|
|
49
|
-
return jsx(AvatarCount, { count: count, "data-testid": joinTestId(avatarTestId, 'badge') });
|
|
50
|
-
}
|
|
51
|
-
return badge;
|
|
52
|
-
};
|
|
53
|
-
return (jsxs("div", { "data-avatar": true, "data-testid": avatarTestId, className: cx('relative inline-flex shrink-0 rounded-[7px]', rounded && 'rounded-full',
|
|
54
|
-
// Focus styles
|
|
55
|
-
focusable && 'outline-transparent group-focus-visible:outline-2 group-focus-visible:outline-offset-2 group-focus-visible:outline-focus-ring', border && 'ring-1 ring-secondary_alt', border && styles[size].rootWithBorder, styles[size].root, className), children: [jsx("div", { className: cx('relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]', rounded && 'rounded-full', canShowImage &&
|
|
56
|
-
size !== 'xs' &&
|
|
57
|
-
'before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]', contentClassName), children: renderMainContent() }), renderBadgeContent()] }));
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export { Avatar };
|
|
61
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -4,7 +4,8 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
|
|
5
5
|
const GridCheck = (props) => {
|
|
6
6
|
const { size = 'md', ...rest } = props;
|
|
7
|
-
|
|
7
|
+
// Fallback keeps an unknown size (e.g. a runtime 'lg' bypassing the types) rendering instead of crashing.
|
|
8
|
+
const Pattern = sizes[size] ?? sizes.md;
|
|
8
9
|
return jsxRuntime.jsx(Pattern, { ...rest });
|
|
9
10
|
};
|
|
10
11
|
const md = (props) => {
|