@mdigital_ui/ui 0.2.6 → 0.2.7
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/LICENSE +21 -0
- package/README.md +1023 -341
- package/dist/accordion/index.js +3 -3
- package/dist/avatar/index.js +4 -0
- package/dist/avatar/index.js.map +1 -0
- package/dist/badge/index.js +3 -3
- package/dist/breadcrumbs/index.js +5 -5
- package/dist/button/index.js +4 -4
- package/dist/button-group/index.js +2 -2
- package/dist/card/index.js +2 -2
- package/dist/carousel/index.js +2 -2
- package/dist/cascader/index.js +2 -2
- package/dist/chart/index.js +2 -2
- package/dist/checkbox/index.js +3 -3
- package/dist/checkbox-group/index.js +2 -2
- package/dist/{chunk-23BPDLT4.js → chunk-27QEPVKU.js} +42 -22
- package/dist/chunk-27QEPVKU.js.map +1 -0
- package/dist/{chunk-IRNJZ754.js → chunk-2J57G7XG.js} +76 -18
- package/dist/chunk-2J57G7XG.js.map +1 -0
- package/dist/{chunk-SOIF4SHB.js → chunk-2NYVRAG4.js} +24 -15
- package/dist/chunk-2NYVRAG4.js.map +1 -0
- package/dist/{chunk-3WVJE5MF.js → chunk-2OUGJBXK.js} +19 -12
- package/dist/chunk-2OUGJBXK.js.map +1 -0
- package/dist/{chunk-YII4K64U.js → chunk-2WZVD7P3.js} +36 -10
- package/dist/chunk-2WZVD7P3.js.map +1 -0
- package/dist/{chunk-7ODPSHIQ.js → chunk-3UCZ4GMN.js} +10 -4
- package/dist/chunk-3UCZ4GMN.js.map +1 -0
- package/dist/{chunk-7YPX6NJK.js → chunk-4LSKRZOT.js} +12 -7
- package/dist/chunk-4LSKRZOT.js.map +1 -0
- package/dist/{chunk-R2FZO7AM.js → chunk-4SQOFZ3N.js} +26 -9
- package/dist/chunk-4SQOFZ3N.js.map +1 -0
- package/dist/chunk-5PUATOLR.js +127 -0
- package/dist/chunk-5PUATOLR.js.map +1 -0
- package/dist/{chunk-555KXZRK.js → chunk-6TMOKYR7.js} +6 -4
- package/dist/chunk-6TMOKYR7.js.map +1 -0
- package/dist/{chunk-6IPISGTP.js → chunk-7UCNBMCV.js} +102 -27
- package/dist/chunk-7UCNBMCV.js.map +1 -0
- package/dist/{chunk-JFGLDCAK.js → chunk-AQYOVYPS.js} +19 -7
- package/dist/chunk-AQYOVYPS.js.map +1 -0
- package/dist/{chunk-Y2CXG3PT.js → chunk-C5YO5VZS.js} +8 -8
- package/dist/chunk-C5YO5VZS.js.map +1 -0
- package/dist/{chunk-7TN4PGYF.js → chunk-CHGJX5F2.js} +49 -33
- package/dist/chunk-CHGJX5F2.js.map +1 -0
- package/dist/{chunk-22FIGRGO.js → chunk-CK6A2R66.js} +31 -7
- package/dist/chunk-CK6A2R66.js.map +1 -0
- package/dist/{chunk-INH7KYCK.js → chunk-CMGCJXE5.js} +275 -95
- package/dist/chunk-CMGCJXE5.js.map +1 -0
- package/dist/{chunk-6MYKJE6A.js → chunk-CSRMVLPR.js} +109 -27
- package/dist/chunk-CSRMVLPR.js.map +1 -0
- package/dist/{chunk-EFMKUCGX.js → chunk-DH7R6NBG.js} +8 -5
- package/dist/chunk-DH7R6NBG.js.map +1 -0
- package/dist/{chunk-7BUNJYZO.js → chunk-FEMHXG2P.js} +22 -6
- package/dist/chunk-FEMHXG2P.js.map +1 -0
- package/dist/chunk-FIGSNRWY.js +382 -0
- package/dist/chunk-FIGSNRWY.js.map +1 -0
- package/dist/{chunk-JGQOEAWL.js → chunk-FVTMKQUE.js} +5 -3
- package/dist/chunk-FVTMKQUE.js.map +1 -0
- package/dist/{chunk-QVCGNOBE.js → chunk-GBVIACYQ.js} +78 -31
- package/dist/chunk-GBVIACYQ.js.map +1 -0
- package/dist/chunk-H47C2ENJ.js +215 -0
- package/dist/chunk-H47C2ENJ.js.map +1 -0
- package/dist/chunk-HWFI4GJE.js +130 -0
- package/dist/chunk-HWFI4GJE.js.map +1 -0
- package/dist/chunk-IA42ELUP.js +72 -0
- package/dist/chunk-IA42ELUP.js.map +1 -0
- package/dist/{chunk-SGMIDNPI.js → chunk-INQI3UUI.js} +73 -19
- package/dist/chunk-INQI3UUI.js.map +1 -0
- package/dist/{chunk-IHKPZOE5.js → chunk-J525ROGL.js} +6 -4
- package/dist/chunk-J525ROGL.js.map +1 -0
- package/dist/{chunk-AVPPV5OM.js → chunk-JLS4MBHN.js} +6 -4
- package/dist/chunk-JLS4MBHN.js.map +1 -0
- package/dist/{chunk-GGREAJO5.js → chunk-KTHWXHDN.js} +10 -5
- package/dist/chunk-KTHWXHDN.js.map +1 -0
- package/dist/{chunk-35K7N4JT.js → chunk-LMR7TKDJ.js} +17 -6
- package/dist/chunk-LMR7TKDJ.js.map +1 -0
- package/dist/{chunk-BYWYC7RC.js → chunk-MRFCITKK.js} +19 -10
- package/dist/chunk-MRFCITKK.js.map +1 -0
- package/dist/{chunk-TG2AECIN.js → chunk-MXDTUN3V.js} +22 -9
- package/dist/chunk-MXDTUN3V.js.map +1 -0
- package/dist/{chunk-2OGZENFC.js → chunk-NGYLRX6F.js} +2 -16
- package/dist/chunk-NGYLRX6F.js.map +1 -0
- package/dist/{chunk-TUTOU4X6.js → chunk-NTPWR57C.js} +6 -135
- package/dist/chunk-NTPWR57C.js.map +1 -0
- package/dist/{chunk-GFQXGLFD.js → chunk-OWXQ45GS.js} +82 -62
- package/dist/chunk-OWXQ45GS.js.map +1 -0
- package/dist/{chunk-L6EVOPWH.js → chunk-P6A75RAH.js} +6 -4
- package/dist/chunk-P6A75RAH.js.map +1 -0
- package/dist/{chunk-SYDNDYZJ.js → chunk-PXOHJJBE.js} +22 -9
- package/dist/chunk-PXOHJJBE.js.map +1 -0
- package/dist/{chunk-HWSLJGT7.js → chunk-Q57THXIU.js} +28 -10
- package/dist/chunk-Q57THXIU.js.map +1 -0
- package/dist/{chunk-NQB4V5P7.js → chunk-QDHGE7IF.js} +5 -5
- package/dist/chunk-QDHGE7IF.js.map +1 -0
- package/dist/{chunk-CPPFXCNB.js → chunk-QKSDVYKF.js} +4 -4
- package/dist/chunk-QKSDVYKF.js.map +1 -0
- package/dist/{chunk-DP6AWUH5.js → chunk-ROA7BYGB.js} +49 -19
- package/dist/chunk-ROA7BYGB.js.map +1 -0
- package/dist/{chunk-XG3KLPPS.js → chunk-RPIJ2KY7.js} +9 -4
- package/dist/chunk-RPIJ2KY7.js.map +1 -0
- package/dist/{chunk-C2MZL644.js → chunk-RW4RW4DV.js} +80 -30
- package/dist/chunk-RW4RW4DV.js.map +1 -0
- package/dist/chunk-RYKVZFGB.js +607 -0
- package/dist/chunk-RYKVZFGB.js.map +1 -0
- package/dist/chunk-SAVEKACZ.js +552 -0
- package/dist/chunk-SAVEKACZ.js.map +1 -0
- package/dist/chunk-SDNT2JGC.js +143 -0
- package/dist/chunk-SDNT2JGC.js.map +1 -0
- package/dist/{chunk-SMVVCZNM.js → chunk-SGRACNBP.js} +12 -7
- package/dist/chunk-SGRACNBP.js.map +1 -0
- package/dist/{chunk-PQZB43VJ.js → chunk-TTEBZZ3T.js} +28 -11
- package/dist/chunk-TTEBZZ3T.js.map +1 -0
- package/dist/{chunk-HBEJ4S2Y.js → chunk-US4ZCMNU.js} +19 -13
- package/dist/chunk-US4ZCMNU.js.map +1 -0
- package/dist/chunk-UUP7YGOS.js +299 -0
- package/dist/chunk-UUP7YGOS.js.map +1 -0
- package/dist/{chunk-MDY3HCRC.js → chunk-VUBU7Y4F.js} +47 -18
- package/dist/chunk-VUBU7Y4F.js.map +1 -0
- package/dist/chunk-WUBMNJGC.js +141 -0
- package/dist/chunk-WUBMNJGC.js.map +1 -0
- package/dist/{chunk-TWZ5LXLL.js → chunk-WVG3QQDN.js} +45 -16
- package/dist/chunk-WVG3QQDN.js.map +1 -0
- package/dist/{chunk-NZA526GC.js → chunk-WZ2KDHFP.js} +16 -13
- package/dist/chunk-WZ2KDHFP.js.map +1 -0
- package/dist/{chunk-O2VJ6KP4.js → chunk-X5SCI7KH.js} +190 -142
- package/dist/chunk-X5SCI7KH.js.map +1 -0
- package/dist/{chunk-DV5J5NLI.js → chunk-XJCWPPMM.js} +8 -5
- package/dist/chunk-XJCWPPMM.js.map +1 -0
- package/dist/{chunk-ARK3EROZ.js → chunk-YAAV7FQG.js} +20 -12
- package/dist/chunk-YAAV7FQG.js.map +1 -0
- package/dist/{chunk-MLNIKNLI.js → chunk-YOG5GXIC.js} +57 -11
- package/dist/chunk-YOG5GXIC.js.map +1 -0
- package/dist/chunk-Z5VJ6MJP.js +234 -0
- package/dist/chunk-Z5VJ6MJP.js.map +1 -0
- package/dist/{chunk-77YTCM7G.js → chunk-ZC3E3PWH.js} +75 -32
- package/dist/chunk-ZC3E3PWH.js.map +1 -0
- package/dist/clipboard/index.js +2 -2
- package/dist/collapse/index.js +2 -2
- package/dist/command/index.js +3 -3
- package/dist/context-menu/index.js +4 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/date-picker/index.js +4 -4
- package/dist/descriptions/index.js +2 -2
- package/dist/divider/index.js +4 -0
- package/dist/divider/index.js.map +1 -0
- package/dist/drawer/index.js +2 -2
- package/dist/dropdown/index.js +4 -4
- package/dist/empty/index.js +2 -2
- package/dist/fetching-overlay/index.js +4 -4
- package/dist/grid/index.js +2 -2
- package/dist/image/index.js +2 -2
- package/dist/index.d.ts +1242 -161
- package/dist/index.js +63 -883
- package/dist/index.js.map +1 -1
- package/dist/input/index.js +4 -4
- package/dist/input-group/index.js +2 -2
- package/dist/input-otp/index.js +2 -2
- package/dist/input-password/index.js +5 -5
- package/dist/kbd/index.js +3 -3
- package/dist/modal/index.js +2 -2
- package/dist/multi-select/index.js +4 -4
- package/dist/notification/index.js +3 -3
- package/dist/pagination/index.js +2 -2
- package/dist/popover/index.js +3 -3
- package/dist/progress/index.js +2 -2
- package/dist/radio/index.js +3 -3
- package/dist/radio-group/index.js +2 -2
- package/dist/rating/index.js +2 -2
- package/dist/ribbon/index.js +2 -2
- package/dist/select/index.js +5 -5
- package/dist/skeleton/index.js +3 -3
- package/dist/slider/index.js +2 -2
- package/dist/spinner/index.js +3 -3
- package/dist/stepper/index.js +2 -2
- package/dist/styles/base.css +169 -99
- package/dist/styles/global.css +1295 -721
- package/dist/styles/themes/dark.css +3 -1
- package/dist/styles/themes/light.css +3 -1
- package/dist/styles/themes/presets/corporate.css +126 -0
- package/dist/styles/themes/presets/minimal.css +126 -0
- package/dist/styles/themes/presets/vibrant.css +126 -0
- package/dist/switch/index.js +3 -3
- package/dist/table/index.js +10 -10
- package/dist/tabs/index.js +3 -3
- package/dist/tag/index.js +5 -0
- package/dist/tag/index.js.map +1 -0
- package/dist/textarea/index.js +2 -2
- package/dist/theme/index.js +3 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/toggle/index.js +2 -2
- package/dist/toggle-group/index.js +2 -2
- package/dist/tooltip/index.js +3 -3
- package/dist/transfer/index.js +4 -4
- package/dist/tree/index.js +2 -2
- package/dist/tree-select/index.js +5 -5
- package/dist/upload/index.js +2 -2
- package/package.json +460 -72
- package/dist/chunk-22FIGRGO.js.map +0 -1
- package/dist/chunk-23BPDLT4.js.map +0 -1
- package/dist/chunk-2OGZENFC.js.map +0 -1
- package/dist/chunk-35K7N4JT.js.map +0 -1
- package/dist/chunk-3QKPSJTV.js +0 -120
- package/dist/chunk-3QKPSJTV.js.map +0 -1
- package/dist/chunk-3WVJE5MF.js.map +0 -1
- package/dist/chunk-555KXZRK.js.map +0 -1
- package/dist/chunk-6IPISGTP.js.map +0 -1
- package/dist/chunk-6MYKJE6A.js.map +0 -1
- package/dist/chunk-6PFBSVLK.js +0 -39
- package/dist/chunk-6PFBSVLK.js.map +0 -1
- package/dist/chunk-77YTCM7G.js.map +0 -1
- package/dist/chunk-7BUNJYZO.js.map +0 -1
- package/dist/chunk-7ODPSHIQ.js.map +0 -1
- package/dist/chunk-7TN4PGYF.js.map +0 -1
- package/dist/chunk-7YPX6NJK.js.map +0 -1
- package/dist/chunk-ARK3EROZ.js.map +0 -1
- package/dist/chunk-AVPPV5OM.js.map +0 -1
- package/dist/chunk-BYWYC7RC.js.map +0 -1
- package/dist/chunk-C2MZL644.js.map +0 -1
- package/dist/chunk-CPPFXCNB.js.map +0 -1
- package/dist/chunk-DP6AWUH5.js.map +0 -1
- package/dist/chunk-DV5J5NLI.js.map +0 -1
- package/dist/chunk-EFMKUCGX.js.map +0 -1
- package/dist/chunk-GFQXGLFD.js.map +0 -1
- package/dist/chunk-GGREAJO5.js.map +0 -1
- package/dist/chunk-GH3CNX5N.js +0 -178
- package/dist/chunk-GH3CNX5N.js.map +0 -1
- package/dist/chunk-HBEJ4S2Y.js.map +0 -1
- package/dist/chunk-HWSLJGT7.js.map +0 -1
- package/dist/chunk-IHKPZOE5.js.map +0 -1
- package/dist/chunk-INH7KYCK.js.map +0 -1
- package/dist/chunk-IRNJZ754.js.map +0 -1
- package/dist/chunk-IUUEYOMN.js +0 -470
- package/dist/chunk-IUUEYOMN.js.map +0 -1
- package/dist/chunk-JFGLDCAK.js.map +0 -1
- package/dist/chunk-JGQOEAWL.js.map +0 -1
- package/dist/chunk-L6EVOPWH.js.map +0 -1
- package/dist/chunk-LSQLUYTD.js +0 -192
- package/dist/chunk-LSQLUYTD.js.map +0 -1
- package/dist/chunk-MDY3HCRC.js.map +0 -1
- package/dist/chunk-MLNIKNLI.js.map +0 -1
- package/dist/chunk-NQB4V5P7.js.map +0 -1
- package/dist/chunk-NZA526GC.js.map +0 -1
- package/dist/chunk-O2VJ6KP4.js.map +0 -1
- package/dist/chunk-PQZB43VJ.js.map +0 -1
- package/dist/chunk-QVCGNOBE.js.map +0 -1
- package/dist/chunk-R2FZO7AM.js.map +0 -1
- package/dist/chunk-SGMIDNPI.js.map +0 -1
- package/dist/chunk-SMVVCZNM.js.map +0 -1
- package/dist/chunk-SOIF4SHB.js.map +0 -1
- package/dist/chunk-SYDNDYZJ.js.map +0 -1
- package/dist/chunk-TG2AECIN.js.map +0 -1
- package/dist/chunk-TIMRHEKH.js +0 -452
- package/dist/chunk-TIMRHEKH.js.map +0 -1
- package/dist/chunk-TUTOU4X6.js.map +0 -1
- package/dist/chunk-TWZ5LXLL.js.map +0 -1
- package/dist/chunk-XG3KLPPS.js.map +0 -1
- package/dist/chunk-Y2CXG3PT.js.map +0 -1
- package/dist/chunk-YII4K64U.js.map +0 -1
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { cn } from './chunk-NGYLRX6F.js';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import React, { useState, useEffect } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var avatarVariants = cva(
|
|
7
|
+
"relative inline-flex items-center justify-center font-medium select-none shrink-0",
|
|
8
|
+
{
|
|
9
|
+
variants: {
|
|
10
|
+
size: {
|
|
11
|
+
xs: "size-6 text-xs",
|
|
12
|
+
sm: "size-8 text-sm",
|
|
13
|
+
md: "size-10 text-base",
|
|
14
|
+
lg: "size-12 text-lg"
|
|
15
|
+
},
|
|
16
|
+
shape: {
|
|
17
|
+
circle: "rounded-full",
|
|
18
|
+
square: "rounded-lg"
|
|
19
|
+
},
|
|
20
|
+
color: {
|
|
21
|
+
default: "bg-surface text-text-primary",
|
|
22
|
+
primary: "bg-primary/10 text-primary",
|
|
23
|
+
secondary: "bg-secondary/10 text-secondary",
|
|
24
|
+
accent: "bg-accent/10 text-accent",
|
|
25
|
+
success: "bg-success/10 text-success",
|
|
26
|
+
error: "bg-error/10 text-error",
|
|
27
|
+
warning: "bg-warning/10 text-warning",
|
|
28
|
+
info: "bg-info/10 text-info"
|
|
29
|
+
},
|
|
30
|
+
bordered: {
|
|
31
|
+
true: "ring-2 ring-background",
|
|
32
|
+
false: ""
|
|
33
|
+
},
|
|
34
|
+
disabled: {
|
|
35
|
+
true: "opacity-50 cursor-not-allowed",
|
|
36
|
+
false: ""
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
defaultVariants: {
|
|
40
|
+
size: "md",
|
|
41
|
+
shape: "circle",
|
|
42
|
+
color: "default",
|
|
43
|
+
bordered: false,
|
|
44
|
+
disabled: false
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
var statusSizeClasses = {
|
|
49
|
+
xs: "size-1.5",
|
|
50
|
+
sm: "size-2",
|
|
51
|
+
md: "size-2.5",
|
|
52
|
+
lg: "size-3"
|
|
53
|
+
};
|
|
54
|
+
var statusColorClasses = {
|
|
55
|
+
online: "bg-success",
|
|
56
|
+
offline: "bg-border",
|
|
57
|
+
away: "bg-warning",
|
|
58
|
+
busy: "bg-error"
|
|
59
|
+
};
|
|
60
|
+
var badgeSizeClasses = {
|
|
61
|
+
xs: "min-w-3 h-3 text-[8px]",
|
|
62
|
+
sm: "min-w-4 h-4 text-[10px]",
|
|
63
|
+
md: "min-w-5 h-5 text-xs",
|
|
64
|
+
lg: "min-w-6 h-6 text-xs"
|
|
65
|
+
};
|
|
66
|
+
var overlapClasses = {
|
|
67
|
+
xs: "-space-x-1",
|
|
68
|
+
sm: "-space-x-1.5",
|
|
69
|
+
md: "-space-x-2",
|
|
70
|
+
lg: "-space-x-2.5"
|
|
71
|
+
};
|
|
72
|
+
function getInitialsFromName(name) {
|
|
73
|
+
const words = name.trim().split(/\s+/).filter(Boolean);
|
|
74
|
+
if (words.length === 0) return "";
|
|
75
|
+
const firstWord = words[0];
|
|
76
|
+
if (words.length === 1 && firstWord) {
|
|
77
|
+
return firstWord.slice(0, 2).toUpperCase();
|
|
78
|
+
}
|
|
79
|
+
const lastWord = words[words.length - 1];
|
|
80
|
+
const firstInitial = firstWord?.[0] ?? "";
|
|
81
|
+
const lastInitial = lastWord?.[0] ?? "";
|
|
82
|
+
return (firstInitial + lastInitial).toUpperCase();
|
|
83
|
+
}
|
|
84
|
+
var DefaultUserIcon = () => /* @__PURE__ */ jsx(
|
|
85
|
+
"svg",
|
|
86
|
+
{
|
|
87
|
+
className: "size-[60%] text-text-secondary",
|
|
88
|
+
fill: "currentColor",
|
|
89
|
+
viewBox: "0 0 24 24",
|
|
90
|
+
role: "img",
|
|
91
|
+
"aria-hidden": "true",
|
|
92
|
+
children: /* @__PURE__ */ jsx("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" })
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
var Avatar = React.memo(
|
|
96
|
+
({
|
|
97
|
+
src,
|
|
98
|
+
alt = "",
|
|
99
|
+
fallback,
|
|
100
|
+
name,
|
|
101
|
+
size = "md",
|
|
102
|
+
shape = "circle",
|
|
103
|
+
status,
|
|
104
|
+
color = "default",
|
|
105
|
+
bordered = false,
|
|
106
|
+
icon,
|
|
107
|
+
badge,
|
|
108
|
+
disabled = false,
|
|
109
|
+
className,
|
|
110
|
+
classNames,
|
|
111
|
+
onError,
|
|
112
|
+
ref,
|
|
113
|
+
...props
|
|
114
|
+
}) => {
|
|
115
|
+
const [imageError, setImageError] = useState(false);
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
setImageError(false);
|
|
118
|
+
}, [src]);
|
|
119
|
+
const handleImageError = (e) => {
|
|
120
|
+
setImageError(true);
|
|
121
|
+
onError?.(e);
|
|
122
|
+
};
|
|
123
|
+
const getInitials = () => {
|
|
124
|
+
if (fallback) return fallback.slice(0, 2).toUpperCase();
|
|
125
|
+
if (name) return getInitialsFromName(name);
|
|
126
|
+
return "";
|
|
127
|
+
};
|
|
128
|
+
const showImage = src && !imageError;
|
|
129
|
+
const initials = getInitials();
|
|
130
|
+
const showFallback = !showImage && (initials || icon);
|
|
131
|
+
const showDefaultIcon = !showImage && !showFallback;
|
|
132
|
+
return /* @__PURE__ */ jsxs(
|
|
133
|
+
"div",
|
|
134
|
+
{
|
|
135
|
+
ref,
|
|
136
|
+
className: cn(
|
|
137
|
+
"avatar_root",
|
|
138
|
+
avatarVariants({
|
|
139
|
+
size,
|
|
140
|
+
shape,
|
|
141
|
+
color: showImage ? "default" : color,
|
|
142
|
+
bordered,
|
|
143
|
+
disabled
|
|
144
|
+
}),
|
|
145
|
+
// Apply overflow-hidden only when no badge/status to prevent clipping
|
|
146
|
+
!badge && !status && "overflow-hidden",
|
|
147
|
+
classNames?.root,
|
|
148
|
+
className
|
|
149
|
+
),
|
|
150
|
+
"aria-disabled": disabled || void 0,
|
|
151
|
+
"data-slot": "root",
|
|
152
|
+
...props,
|
|
153
|
+
children: [
|
|
154
|
+
showImage && /* @__PURE__ */ jsx(
|
|
155
|
+
"img",
|
|
156
|
+
{
|
|
157
|
+
src,
|
|
158
|
+
alt: alt || name || "User avatar",
|
|
159
|
+
onError: handleImageError,
|
|
160
|
+
className: cn(
|
|
161
|
+
"avatar_image",
|
|
162
|
+
"size-full object-cover",
|
|
163
|
+
shape === "circle" ? "rounded-full" : "rounded-lg",
|
|
164
|
+
classNames?.image
|
|
165
|
+
),
|
|
166
|
+
loading: "lazy",
|
|
167
|
+
"data-slot": "image"
|
|
168
|
+
}
|
|
169
|
+
),
|
|
170
|
+
showFallback && (icon ? /* @__PURE__ */ jsx(
|
|
171
|
+
"span",
|
|
172
|
+
{
|
|
173
|
+
className: cn(
|
|
174
|
+
"avatar_fallback",
|
|
175
|
+
"flex items-center justify-center size-[60%]",
|
|
176
|
+
classNames?.fallback
|
|
177
|
+
),
|
|
178
|
+
"data-slot": "fallback",
|
|
179
|
+
children: icon
|
|
180
|
+
}
|
|
181
|
+
) : /* @__PURE__ */ jsx(
|
|
182
|
+
"span",
|
|
183
|
+
{
|
|
184
|
+
className: cn("avatar_fallback", classNames?.fallback),
|
|
185
|
+
"aria-label": `Avatar for ${name || initials}`,
|
|
186
|
+
"data-slot": "fallback",
|
|
187
|
+
children: initials
|
|
188
|
+
}
|
|
189
|
+
)),
|
|
190
|
+
showDefaultIcon && /* @__PURE__ */ jsx(DefaultUserIcon, {}),
|
|
191
|
+
status && /* @__PURE__ */ jsx(
|
|
192
|
+
"span",
|
|
193
|
+
{
|
|
194
|
+
className: cn(
|
|
195
|
+
"avatar_status",
|
|
196
|
+
"absolute bottom-0 right-0 rounded-full ring-2 ring-background",
|
|
197
|
+
statusSizeClasses[size],
|
|
198
|
+
statusColorClasses[status],
|
|
199
|
+
classNames?.status
|
|
200
|
+
),
|
|
201
|
+
"aria-label": `Status: ${status}`,
|
|
202
|
+
"data-slot": "status"
|
|
203
|
+
}
|
|
204
|
+
),
|
|
205
|
+
badge && /* @__PURE__ */ jsx(
|
|
206
|
+
"span",
|
|
207
|
+
{
|
|
208
|
+
className: cn(
|
|
209
|
+
"absolute -top-1 -right-1 flex items-center justify-center rounded-full bg-error text-white font-medium px-1",
|
|
210
|
+
badgeSizeClasses[size]
|
|
211
|
+
),
|
|
212
|
+
"aria-label": typeof badge === "number" ? `${badge} notifications` : void 0,
|
|
213
|
+
role: typeof badge === "number" ? "status" : void 0,
|
|
214
|
+
children: badge
|
|
215
|
+
}
|
|
216
|
+
)
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
);
|
|
222
|
+
Avatar.displayName = "Avatar";
|
|
223
|
+
var AvatarGroup = React.memo(
|
|
224
|
+
({
|
|
225
|
+
children,
|
|
226
|
+
max,
|
|
227
|
+
size = "md",
|
|
228
|
+
shape = "circle",
|
|
229
|
+
showTotal = false,
|
|
230
|
+
renderSurplus,
|
|
231
|
+
bordered = false,
|
|
232
|
+
className,
|
|
233
|
+
classNames,
|
|
234
|
+
ref,
|
|
235
|
+
...props
|
|
236
|
+
}) => {
|
|
237
|
+
const childrenArray = React.Children.toArray(children);
|
|
238
|
+
const total = childrenArray.length;
|
|
239
|
+
const visibleChildren = max ? childrenArray.slice(0, max) : childrenArray;
|
|
240
|
+
const remainingCount = max && total > max ? total - max : 0;
|
|
241
|
+
const surplusDisplay = showTotal ? total : remainingCount;
|
|
242
|
+
return /* @__PURE__ */ jsxs(
|
|
243
|
+
"div",
|
|
244
|
+
{
|
|
245
|
+
ref,
|
|
246
|
+
className: cn(
|
|
247
|
+
"avatarGroup_root",
|
|
248
|
+
"flex items-center",
|
|
249
|
+
overlapClasses[size],
|
|
250
|
+
classNames?.root,
|
|
251
|
+
className
|
|
252
|
+
),
|
|
253
|
+
role: "group",
|
|
254
|
+
"aria-label": `Avatar group with ${total} members`,
|
|
255
|
+
"data-slot": "root",
|
|
256
|
+
...props,
|
|
257
|
+
children: [
|
|
258
|
+
visibleChildren.map((child, index) => {
|
|
259
|
+
if (React.isValidElement(child)) {
|
|
260
|
+
return React.cloneElement(child, {
|
|
261
|
+
key: index,
|
|
262
|
+
size: child.props.size ?? size,
|
|
263
|
+
shape: child.props.shape ?? shape,
|
|
264
|
+
bordered: child.props.bordered ?? bordered ?? true,
|
|
265
|
+
className: cn(child.props.className)
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
return child;
|
|
269
|
+
}),
|
|
270
|
+
remainingCount > 0 && (renderSurplus ? renderSurplus(surplusDisplay) : /* @__PURE__ */ jsx(
|
|
271
|
+
"div",
|
|
272
|
+
{
|
|
273
|
+
className: cn(
|
|
274
|
+
"avatarGroup_overflow",
|
|
275
|
+
avatarVariants({
|
|
276
|
+
size,
|
|
277
|
+
shape,
|
|
278
|
+
color: "default",
|
|
279
|
+
bordered: true
|
|
280
|
+
}),
|
|
281
|
+
"bg-surface/80 backdrop-blur-sm overflow-hidden",
|
|
282
|
+
classNames?.overflow
|
|
283
|
+
),
|
|
284
|
+
"aria-label": showTotal ? `${total} total members` : `${remainingCount} more members`,
|
|
285
|
+
"data-slot": "overflow",
|
|
286
|
+
children: /* @__PURE__ */ jsx("span", { className: "text-text-secondary font-medium", children: showTotal ? total : `+${remainingCount}` })
|
|
287
|
+
}
|
|
288
|
+
))
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
);
|
|
294
|
+
AvatarGroup.displayName = "AvatarGroup";
|
|
295
|
+
var avatar_default = Avatar;
|
|
296
|
+
|
|
297
|
+
export { Avatar, AvatarGroup, avatar_default };
|
|
298
|
+
//# sourceMappingURL=chunk-UUP7YGOS.js.map
|
|
299
|
+
//# sourceMappingURL=chunk-UUP7YGOS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/avatar/index.tsx"],"names":[],"mappings":";;;;;AAWA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,mFAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,gBAAA;AAAA,QACJ,EAAA,EAAI,gBAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,8BAAA;AAAA,QACT,OAAA,EAAS,4BAAA;AAAA,QACT,SAAA,EAAW,gCAAA;AAAA,QACX,MAAA,EAAQ,0BAAA;AAAA,QACR,OAAA,EAAS,4BAAA;AAAA,QACT,KAAA,EAAO,wBAAA;AAAA,QACP,OAAA,EAAS,4BAAA;AAAA,QACT,IAAA,EAAM;AAAA,OACR;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,wBAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,+BAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;AAKA,IAAM,iBAAA,GAAgD;AAAA,EACpD,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAKA,IAAM,kBAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,YAAA;AAAA,EACR,OAAA,EAAS,WAAA;AAAA,EACT,IAAA,EAAM,YAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAKA,IAAM,gBAAA,GAA+C;AAAA,EACnD,EAAA,EAAI,wBAAA;AAAA,EACJ,EAAA,EAAI,yBAAA;AAAA,EACJ,EAAA,EAAI,qBAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAKA,IAAM,cAAA,GAA6C;AAAA,EACjD,EAAA,EAAI,YAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,YAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAKA,SAAS,oBAAoB,IAAA,EAAsB;AACjD,EAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK,CAAE,MAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AACrD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,SAAA,EAAW;AACnC,IAAA,OAAO,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AAAA,EAC3C;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,EAAA,MAAM,YAAA,GAAe,SAAA,GAAY,CAAC,CAAA,IAAK,EAAA;AACvC,EAAA,MAAM,WAAA,GAAc,QAAA,GAAW,CAAC,CAAA,IAAK,EAAA;AACrC,EAAA,OAAA,CAAQ,YAAA,GAAe,aAAa,WAAA,EAAY;AAClD;AAKA,IAAM,kBAAkB,sBACtB,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAU,gCAAA;AAAA,IACV,IAAA,EAAK,cAAA;AAAA,IACL,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,KAAA;AAAA,IACL,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+GAAA,EAAgH;AAAA;AAC1H,CAAA;AAMF,IAAM,SAAS,KAAA,CAAM,IAAA;AAAA,EACnB,CAAC;AAAA,IACC,GAAA;AAAA,IACA,GAAA,GAAM,EAAA;AAAA,IACN,QAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA,GAAO,IAAA;AAAA,IACP,KAAA,GAAQ,QAAA;AAAA,IACR,MAAA;AAAA,IACA,KAAA,GAAQ,SAAA;AAAA,IACR,QAAA,GAAW,KAAA;AAAA,IACX,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAG;AAAA,GACL,KAAM;AACJ,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAGlD,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,IAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA8C;AACtE,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,OAAA,GAAU,CAAC,CAAA;AAAA,IACb,CAAA;AAGA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,UAAU,OAAO,QAAA,CAAS,MAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AACtD,MAAA,IAAI,IAAA,EAAM,OAAO,mBAAA,CAAoB,IAAI,CAAA;AACzC,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,OAAO,CAAC,UAAA;AAC1B,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,MAAM,YAAA,GAAe,CAAC,SAAA,KAAc,QAAA,IAAY,IAAA,CAAA;AAChD,IAAA,MAAM,eAAA,GAAkB,CAAC,SAAA,IAAa,CAAC,YAAA;AAEvC,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,aAAA;AAAA,UACA,cAAA,CAAe;AAAA,YACb,IAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA,EAAO,YAAY,SAAA,GAAY,KAAA;AAAA,YAC/B,QAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA;AAAA,UAED,CAAC,KAAA,IAAS,CAAC,MAAA,IAAU,iBAAA;AAAA,UACrB,UAAA,EAAY,IAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACA,iBAAe,QAAA,IAAY,MAAA;AAAA,QAC3B,WAAA,EAAU,MAAA;AAAA,QACT,GAAG,KAAA;AAAA,QAGH,QAAA,EAAA;AAAA,UAAA,SAAA,oBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,GAAA,EAAK,OAAO,IAAA,IAAQ,aAAA;AAAA,cACpB,OAAA,EAAS,gBAAA;AAAA,cACT,SAAA,EAAW,EAAA;AAAA,gBACT,cAAA;AAAA,gBACA,wBAAA;AAAA,gBACA,KAAA,KAAU,WAAW,cAAA,GAAiB,YAAA;AAAA,gBACtC,UAAA,EAAY;AAAA,eACd;AAAA,cACA,OAAA,EAAQ,MAAA;AAAA,cACR,WAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UAID,iBACE,IAAA,mBACC,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,iBAAA;AAAA,gBACA,6CAAA;AAAA,gBACA,UAAA,EAAY;AAAA,eACd;AAAA,cACA,WAAA,EAAU,UAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH,mBAEA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,UAAA,EAAY,QAAQ,CAAA;AAAA,cACrD,YAAA,EAAY,CAAA,WAAA,EAAc,IAAA,IAAQ,QAAQ,CAAA,CAAA;AAAA,cAC1C,WAAA,EAAU,UAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH,CAAA;AAAA,UAIH,eAAA,wBAAoB,eAAA,EAAA,EAAgB,CAAA;AAAA,UAGpC,MAAA,oBACC,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,eAAA;AAAA,gBACA,+DAAA;AAAA,gBACA,kBAAkB,IAAI,CAAA;AAAA,gBACtB,mBAAmB,MAAM,CAAA;AAAA,gBACzB,UAAA,EAAY;AAAA,eACd;AAAA,cACA,YAAA,EAAY,WAAW,MAAM,CAAA,CAAA;AAAA,cAC7B,WAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UAID,KAAA,oBACC,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,6GAAA;AAAA,gBACA,iBAAiB,IAAI;AAAA,eACvB;AAAA,cACA,cAAY,OAAO,KAAA,KAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,cAAA,CAAA,GAAmB,MAAA;AAAA,cACnE,IAAA,EAAM,OAAO,KAAA,KAAU,QAAA,GAAW,QAAA,GAAW,MAAA;AAAA,cAE5C,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AAKrB,IAAM,cAAc,KAAA,CAAM,IAAA;AAAA,EACxB,CAAC;AAAA,IACC,QAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA,GAAO,IAAA;AAAA,IACP,KAAA,GAAQ,QAAA;AAAA,IACR,SAAA,GAAY,KAAA;AAAA,IACZ,aAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAG;AAAA,GACL,KAAM;AACJ,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AACrD,IAAA,MAAM,QAAQ,aAAA,CAAc,MAAA;AAC5B,IAAA,MAAM,kBAAkB,GAAA,GAAM,aAAA,CAAc,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,aAAA;AAC5D,IAAA,MAAM,cAAA,GAAiB,GAAA,IAAO,KAAA,GAAQ,GAAA,GAAM,QAAQ,GAAA,GAAM,CAAA;AAC1D,IAAA,MAAM,cAAA,GAAiB,YAAY,KAAA,GAAQ,cAAA;AAE3C,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,kBAAA;AAAA,UACA,mBAAA;AAAA,UACA,eAAe,IAAI,CAAA;AAAA,UACnB,UAAA,EAAY,IAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,YAAA,EAAY,qBAAqB,KAAK,CAAA,QAAA,CAAA;AAAA,QACtC,WAAA,EAAU,MAAA;AAAA,QACT,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AACrC,YAAA,IAAI,KAAA,CAAM,cAAA,CAA4B,KAAK,CAAA,EAAG;AAC5C,cAAA,OAAO,KAAA,CAAM,aAAa,KAAA,EAAO;AAAA,gBAC/B,GAAA,EAAK,KAAA;AAAA,gBACL,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,IAAA,IAAQ,IAAA;AAAA,gBAC1B,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,KAAA,IAAS,KAAA;AAAA,gBAC5B,QAAA,EAAU,KAAA,CAAM,KAAA,CAAM,QAAA,IAAY,QAAA,IAAY,IAAA;AAAA,gBAC9C,SAAA,EAAW,EAAA,CAAG,KAAA,CAAM,KAAA,CAAM,SAAS;AAAA,eACpC,CAAA;AAAA,YACH;AACA,YAAA,OAAO,KAAA;AAAA,UACT,CAAC,CAAA;AAAA,UAEA,cAAA,GAAiB,CAAA,KACf,aAAA,GACC,aAAA,CAAc,cAAc,CAAA,mBAE5B,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,sBAAA;AAAA,gBACA,cAAA,CAAe;AAAA,kBACb,IAAA;AAAA,kBACA,KAAA;AAAA,kBACA,KAAA,EAAO,SAAA;AAAA,kBACP,QAAA,EAAU;AAAA,iBACX,CAAA;AAAA,gBACD,gDAAA;AAAA,gBACA,UAAA,EAAY;AAAA,eACd;AAAA,cACA,cACE,SAAA,GACI,CAAA,EAAG,KAAK,CAAA,cAAA,CAAA,GACR,GAAG,cAAc,CAAA,aAAA,CAAA;AAAA,cAEvB,WAAA,EAAU,UAAA;AAAA,cAEV,QAAA,kBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,iCAAA,EACb,sBAAY,KAAA,GAAQ,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA,EACzC;AAAA;AAAA,WACF;AAAA;AAAA;AAAA,KAEN;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAI1B,IAAO,cAAA,GAAQ","file":"chunk-UUP7YGOS.js","sourcesContent":["'use client'\n\nimport { cva } from \"class-variance-authority\";\nimport React, { useState, useEffect } from \"react\";\n\nimport { cn } from \"../utils\";\nimport type { AvatarGroupProps, AvatarProps, AvatarSize } from \"./types\";\n\n/**\n * Avatar size variants\n */\nconst avatarVariants = cva(\n \"relative inline-flex items-center justify-center font-medium select-none shrink-0\",\n {\n variants: {\n size: {\n xs: \"size-6 text-xs\",\n sm: \"size-8 text-sm\",\n md: \"size-10 text-base\",\n lg: \"size-12 text-lg\",\n },\n shape: {\n circle: \"rounded-full\",\n square: \"rounded-lg\",\n },\n color: {\n default: \"bg-surface text-text-primary\",\n primary: \"bg-primary/10 text-primary\",\n secondary: \"bg-secondary/10 text-secondary\",\n accent: \"bg-accent/10 text-accent\",\n success: \"bg-success/10 text-success\",\n error: \"bg-error/10 text-error\",\n warning: \"bg-warning/10 text-warning\",\n info: \"bg-info/10 text-info\",\n },\n bordered: {\n true: \"ring-2 ring-background\",\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n shape: \"circle\",\n color: \"default\",\n bordered: false,\n disabled: false,\n },\n },\n);\n\n/**\n * Status indicator size classes\n */\nconst statusSizeClasses: Record<AvatarSize, string> = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n};\n\n/**\n * Status indicator color classes\n */\nconst statusColorClasses = {\n online: \"bg-success\",\n offline: \"bg-border\",\n away: \"bg-warning\",\n busy: \"bg-error\",\n};\n\n/**\n * Badge size classes\n */\nconst badgeSizeClasses: Record<AvatarSize, string> = {\n xs: \"min-w-3 h-3 text-[8px]\",\n sm: \"min-w-4 h-4 text-[10px]\",\n md: \"min-w-5 h-5 text-xs\",\n lg: \"min-w-6 h-6 text-xs\",\n};\n\n/**\n * Overlap spacing classes for AvatarGroup\n */\nconst overlapClasses: Record<AvatarSize, string> = {\n xs: \"-space-x-1\",\n sm: \"-space-x-1.5\",\n md: \"-space-x-2\",\n lg: \"-space-x-2.5\",\n};\n\n/**\n * Generate initials from a name\n */\nfunction getInitialsFromName(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return \"\";\n\n const firstWord = words[0];\n if (words.length === 1 && firstWord) {\n return firstWord.slice(0, 2).toUpperCase();\n }\n\n const lastWord = words[words.length - 1];\n const firstInitial = firstWord?.[0] ?? \"\";\n const lastInitial = lastWord?.[0] ?? \"\";\n return (firstInitial + lastInitial).toUpperCase();\n}\n\n/**\n * Default user icon SVG\n */\nconst DefaultUserIcon = () => (\n <svg\n className=\"size-[60%] text-text-secondary\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n);\n\n/**\n * Avatar Component\n */\nconst Avatar = React.memo<AvatarProps>(\n ({\n src,\n alt = \"\",\n fallback,\n name,\n size = \"md\",\n shape = \"circle\",\n status,\n color = \"default\",\n bordered = false,\n icon,\n badge,\n disabled = false,\n className,\n classNames,\n onError,\n ref,\n ...props\n }) => {\n const [imageError, setImageError] = useState(false);\n\n // Reset image error state when src changes\n useEffect(() => {\n setImageError(false);\n }, [src]);\n\n const handleImageError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageError(true);\n onError?.(e);\n };\n\n // Get initials from fallback or name\n const getInitials = () => {\n if (fallback) return fallback.slice(0, 2).toUpperCase();\n if (name) return getInitialsFromName(name);\n return \"\";\n };\n\n const showImage = src && !imageError;\n const initials = getInitials();\n const showFallback = !showImage && (initials || icon);\n const showDefaultIcon = !showImage && !showFallback;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"avatar_root\",\n avatarVariants({\n size,\n shape,\n color: showImage ? \"default\" : color,\n bordered,\n disabled,\n }),\n // Apply overflow-hidden only when no badge/status to prevent clipping\n !badge && !status && \"overflow-hidden\",\n classNames?.root,\n className,\n )}\n aria-disabled={disabled || undefined}\n data-slot=\"root\"\n {...props}\n >\n {/* Image */}\n {showImage && (\n <img\n src={src}\n alt={alt || name || \"User avatar\"}\n onError={handleImageError}\n className={cn(\n \"avatar_image\",\n \"size-full object-cover\",\n shape === \"circle\" ? \"rounded-full\" : \"rounded-lg\",\n classNames?.image,\n )}\n loading=\"lazy\"\n data-slot=\"image\"\n />\n )}\n\n {/* Fallback: Icon or Initials */}\n {showFallback &&\n (icon ? (\n <span\n className={cn(\n \"avatar_fallback\",\n \"flex items-center justify-center size-[60%]\",\n classNames?.fallback,\n )}\n data-slot=\"fallback\"\n >\n {icon}\n </span>\n ) : (\n <span\n className={cn(\"avatar_fallback\", classNames?.fallback)}\n aria-label={`Avatar for ${name || initials}`}\n data-slot=\"fallback\"\n >\n {initials}\n </span>\n ))}\n\n {/* Default user icon */}\n {showDefaultIcon && <DefaultUserIcon />}\n\n {/* Status indicator */}\n {status && (\n <span\n className={cn(\n \"avatar_status\",\n \"absolute bottom-0 right-0 rounded-full ring-2 ring-background\",\n statusSizeClasses[size],\n statusColorClasses[status],\n classNames?.status,\n )}\n aria-label={`Status: ${status}`}\n data-slot=\"status\"\n />\n )}\n\n {/* Badge */}\n {badge && (\n <span\n className={cn(\n \"absolute -top-1 -right-1 flex items-center justify-center rounded-full bg-error text-white font-medium px-1\",\n badgeSizeClasses[size],\n )}\n aria-label={typeof badge === \"number\" ? `${badge} notifications` : undefined}\n role={typeof badge === \"number\" ? \"status\" : undefined}\n >\n {badge}\n </span>\n )}\n </div>\n );\n },\n);\n\nAvatar.displayName = \"Avatar\";\n\n/**\n * AvatarGroup Component\n */\nconst AvatarGroup = React.memo<AvatarGroupProps>(\n ({\n children,\n max,\n size = \"md\",\n shape = \"circle\",\n showTotal = false,\n renderSurplus,\n bordered = false,\n className,\n classNames,\n ref,\n ...props\n }) => {\n const childrenArray = React.Children.toArray(children);\n const total = childrenArray.length;\n const visibleChildren = max ? childrenArray.slice(0, max) : childrenArray;\n const remainingCount = max && total > max ? total - max : 0;\n const surplusDisplay = showTotal ? total : remainingCount;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"avatarGroup_root\",\n \"flex items-center\",\n overlapClasses[size],\n classNames?.root,\n className,\n )}\n role=\"group\"\n aria-label={`Avatar group with ${total} members`}\n data-slot=\"root\"\n {...props}\n >\n {visibleChildren.map((child, index) => {\n if (React.isValidElement<AvatarProps>(child)) {\n return React.cloneElement(child, {\n key: index,\n size: child.props.size ?? size,\n shape: child.props.shape ?? shape,\n bordered: child.props.bordered ?? bordered ?? true,\n className: cn(child.props.className),\n });\n }\n return child;\n })}\n\n {remainingCount > 0 &&\n (renderSurplus ? (\n renderSurplus(surplusDisplay)\n ) : (\n <div\n className={cn(\n \"avatarGroup_overflow\",\n avatarVariants({\n size,\n shape,\n color: \"default\",\n bordered: true,\n }),\n \"bg-surface/80 backdrop-blur-sm overflow-hidden\",\n classNames?.overflow,\n )}\n aria-label={\n showTotal\n ? `${total} total members`\n : `${remainingCount} more members`\n }\n data-slot=\"overflow\"\n >\n <span className=\"text-text-secondary font-medium\">\n {showTotal ? total : `+${remainingCount}`}\n </span>\n </div>\n ))}\n </div>\n );\n },\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport type * from \"./types\";\nexport { Avatar, AvatarGroup };\nexport default Avatar;\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Popover, PopoverTrigger, PopoverContent } from './chunk-
|
|
2
|
-
import { cn, iconSizes } from './chunk-
|
|
1
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-DH7R6NBG.js';
|
|
2
|
+
import { cn, iconSizes } from './chunk-NGYLRX6F.js';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import ReactDatePicker from 'react-datepicker';
|
|
5
5
|
import 'react-datepicker/dist/react-datepicker.css';
|
|
@@ -42,6 +42,7 @@ var pickerInputVariants = cva(
|
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
44
|
var datePickerStyles = `
|
|
45
|
+
datePicker_day
|
|
45
46
|
[&_.react-datepicker]:!bg-background
|
|
46
47
|
[&_.react-datepicker]:!border-border
|
|
47
48
|
[&_.react-datepicker]:!text-text-primary
|
|
@@ -79,6 +80,7 @@ var datePickerStyles = `
|
|
|
79
80
|
[&_.react-datepicker__day]:!m-0
|
|
80
81
|
[&_.react-datepicker__day]:!cursor-pointer
|
|
81
82
|
[&_.react-datepicker__day]:!transition-colors
|
|
83
|
+
[&_.react-datepicker__day--selected]:datePicker_daySelected
|
|
82
84
|
[&_.react-datepicker__day--selected]:!bg-primary
|
|
83
85
|
[&_.react-datepicker__day--selected]:!text-white
|
|
84
86
|
[&_.react-datepicker__day--keyboard-selected]:!bg-primary/50
|
|
@@ -87,6 +89,7 @@ var datePickerStyles = `
|
|
|
87
89
|
[&_.react-datepicker__day--disabled]:!opacity-40
|
|
88
90
|
[&_.react-datepicker__day--disabled]:hover:!bg-transparent
|
|
89
91
|
[&_.react-datepicker__day--outside-month]:!text-text-secondary
|
|
92
|
+
[&_.react-datepicker__day--today]:datePicker_dayToday
|
|
90
93
|
[&_.react-datepicker__day--today]:!font-semibold
|
|
91
94
|
[&_.react-datepicker__day--today]:!border
|
|
92
95
|
[&_.react-datepicker__day--today]:!border-primary
|
|
@@ -104,6 +107,14 @@ var datePickerStyles = `
|
|
|
104
107
|
[&_.react-datepicker__day--range-end]:!bg-primary
|
|
105
108
|
[&_.react-datepicker__day--range-end]:!text-white
|
|
106
109
|
`;
|
|
110
|
+
var getDatePickerStyles = (classNames) => {
|
|
111
|
+
return cn(
|
|
112
|
+
datePickerStyles,
|
|
113
|
+
classNames?.day && `[&_.react-datepicker__day]:${classNames.day}`,
|
|
114
|
+
classNames?.daySelected && `[&_.react-datepicker__day--selected]:${classNames.daySelected}`,
|
|
115
|
+
classNames?.dayToday && `[&_.react-datepicker__day--today]:${classNames.dayToday}`
|
|
116
|
+
);
|
|
117
|
+
};
|
|
107
118
|
var YearSelector = ({
|
|
108
119
|
date,
|
|
109
120
|
onYearSelect,
|
|
@@ -236,12 +247,14 @@ var CustomCalendarHeader = ({
|
|
|
236
247
|
nextYearButtonDisabled,
|
|
237
248
|
showMonthSelector = false,
|
|
238
249
|
onMonthClick,
|
|
239
|
-
onYearClick
|
|
250
|
+
onYearClick,
|
|
251
|
+
headerClassName,
|
|
252
|
+
navigationClassName
|
|
240
253
|
}) => {
|
|
241
254
|
const monthName = date.toLocaleDateString("en-US", { month: "long" });
|
|
242
255
|
const year = date.getFullYear();
|
|
243
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-surface border-b border-border", children: [
|
|
244
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
256
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("datePicker_header", "flex items-center justify-between px-4 py-3 bg-surface border-b border-border", headerClassName), "data-slot": "header", children: [
|
|
257
|
+
/* @__PURE__ */ jsxs("div", { className: cn("datePicker_navigation", "flex items-center gap-1", navigationClassName), "data-slot": "navigation", children: [
|
|
245
258
|
/* @__PURE__ */ jsx(
|
|
246
259
|
"button",
|
|
247
260
|
{
|
|
@@ -285,7 +298,7 @@ var CustomCalendarHeader = ({
|
|
|
285
298
|
}
|
|
286
299
|
)
|
|
287
300
|
] }),
|
|
288
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
301
|
+
/* @__PURE__ */ jsxs("div", { className: cn("datePicker_navigation", "flex items-center gap-1", navigationClassName), "data-slot": "navigation", children: [
|
|
289
302
|
/* @__PURE__ */ jsx(
|
|
290
303
|
"button",
|
|
291
304
|
{
|
|
@@ -401,6 +414,7 @@ var DatePickerComponent = React.memo(
|
|
|
401
414
|
clearable = false,
|
|
402
415
|
fullWidth = true,
|
|
403
416
|
className,
|
|
417
|
+
classNames,
|
|
404
418
|
value,
|
|
405
419
|
defaultValue,
|
|
406
420
|
onChange,
|
|
@@ -487,7 +501,9 @@ var DatePickerComponent = React.memo(
|
|
|
487
501
|
...props,
|
|
488
502
|
showMonthSelector,
|
|
489
503
|
onMonthClick: () => setShowMonthSelector(!showMonthSelector),
|
|
490
|
-
onYearClick: () => setShowYearSelector(true)
|
|
504
|
+
onYearClick: () => setShowYearSelector(true),
|
|
505
|
+
headerClassName: classNames?.header,
|
|
506
|
+
navigationClassName: classNames?.navigation
|
|
491
507
|
}
|
|
492
508
|
);
|
|
493
509
|
const triggerButton = /* @__PURE__ */ jsx(
|
|
@@ -497,11 +513,14 @@ var DatePickerComponent = React.memo(
|
|
|
497
513
|
disabled,
|
|
498
514
|
onClick: () => setIsOpen(!isOpen),
|
|
499
515
|
className: cn(
|
|
516
|
+
"datePicker_trigger",
|
|
500
517
|
pickerInputVariants({ variant, status, size, fullWidth }),
|
|
501
518
|
"pl-10 flex items-center justify-start cursor-pointer",
|
|
502
519
|
showClear && "pr-10",
|
|
503
|
-
className
|
|
520
|
+
className,
|
|
521
|
+
classNames?.trigger
|
|
504
522
|
),
|
|
523
|
+
"data-slot": "trigger",
|
|
505
524
|
children: confirmed || preview ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
506
525
|
confirmed && /* @__PURE__ */ jsx("span", { children: confirmed }),
|
|
507
526
|
preview && /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: preview })
|
|
@@ -520,7 +539,7 @@ var DatePickerComponent = React.memo(
|
|
|
520
539
|
messagePosition,
|
|
521
540
|
required,
|
|
522
541
|
fullWidth,
|
|
523
|
-
children: /* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
|
|
542
|
+
children: /* @__PURE__ */ jsxs("div", { className: cn("datePicker_root", "relative w-full", classNames?.root), "data-slot": "root", children: [
|
|
524
543
|
/* @__PURE__ */ jsx("div", { className: "absolute left-3 flex items-center h-full top-0 text-text-secondary pointer-events-none z-10", children: /* @__PURE__ */ jsx(Calendar, { className: iconSizes[size] }) }),
|
|
525
544
|
/* @__PURE__ */ jsxs(
|
|
526
545
|
Popover,
|
|
@@ -558,7 +577,7 @@ var DatePickerComponent = React.memo(
|
|
|
558
577
|
onYearClick: () => setShowYearSelector(true),
|
|
559
578
|
onYearChange: handleYearChange
|
|
560
579
|
}
|
|
561
|
-
) : /* @__PURE__ */ jsx("div", { className:
|
|
580
|
+
) : /* @__PURE__ */ jsx("div", { className: cn("datePicker_calendar", getDatePickerStyles(classNames), classNames?.calendar), "data-slot": "calendar", children: /* @__PURE__ */ jsx(
|
|
562
581
|
ReactDatePicker,
|
|
563
582
|
{
|
|
564
583
|
ref: datePickerRef,
|
|
@@ -613,6 +632,7 @@ var RangePickerComponent = React.memo(
|
|
|
613
632
|
clearable = false,
|
|
614
633
|
fullWidth = true,
|
|
615
634
|
className,
|
|
635
|
+
classNames,
|
|
616
636
|
startDate,
|
|
617
637
|
endDate,
|
|
618
638
|
defaultStartDate,
|
|
@@ -723,7 +743,9 @@ var RangePickerComponent = React.memo(
|
|
|
723
743
|
...props,
|
|
724
744
|
showMonthSelector,
|
|
725
745
|
onMonthClick: () => setShowMonthSelector(!showMonthSelector),
|
|
726
|
-
onYearClick: () => setShowYearSelector(true)
|
|
746
|
+
onYearClick: () => setShowYearSelector(true),
|
|
747
|
+
headerClassName: classNames?.header,
|
|
748
|
+
navigationClassName: classNames?.navigation
|
|
727
749
|
}
|
|
728
750
|
);
|
|
729
751
|
const rangeTriggerButton = /* @__PURE__ */ jsx(
|
|
@@ -733,11 +755,14 @@ var RangePickerComponent = React.memo(
|
|
|
733
755
|
disabled,
|
|
734
756
|
onClick: () => setIsOpen(!isOpen),
|
|
735
757
|
className: cn(
|
|
758
|
+
"datePicker_trigger",
|
|
736
759
|
pickerInputVariants({ variant, status, size, fullWidth }),
|
|
737
760
|
"pl-10 flex items-center justify-start cursor-pointer",
|
|
738
761
|
showClear && "pr-10",
|
|
739
|
-
className
|
|
762
|
+
className,
|
|
763
|
+
classNames?.trigger
|
|
740
764
|
),
|
|
765
|
+
"data-slot": "trigger",
|
|
741
766
|
children: rangeConfirmed || rangePreview ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
742
767
|
rangeConfirmed && /* @__PURE__ */ jsx("span", { children: rangeConfirmed }),
|
|
743
768
|
rangePreview && /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: rangePreview })
|
|
@@ -756,7 +781,7 @@ var RangePickerComponent = React.memo(
|
|
|
756
781
|
messagePosition,
|
|
757
782
|
required,
|
|
758
783
|
fullWidth,
|
|
759
|
-
children: /* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
|
|
784
|
+
children: /* @__PURE__ */ jsxs("div", { className: cn("datePicker_root", "relative w-full", classNames?.root), "data-slot": "root", children: [
|
|
760
785
|
/* @__PURE__ */ jsx("div", { className: "absolute left-3 flex items-center h-full top-0 text-text-secondary pointer-events-none z-10", children: /* @__PURE__ */ jsx(Calendar, { className: iconSizes[size] }) }),
|
|
761
786
|
/* @__PURE__ */ jsxs(
|
|
762
787
|
Popover,
|
|
@@ -794,7 +819,7 @@ var RangePickerComponent = React.memo(
|
|
|
794
819
|
onYearClick: () => setShowYearSelector(true),
|
|
795
820
|
onYearChange: handleYearChange
|
|
796
821
|
}
|
|
797
|
-
) : /* @__PURE__ */ jsx("div", { className:
|
|
822
|
+
) : /* @__PURE__ */ jsx("div", { className: cn("datePicker_calendar", getDatePickerStyles(classNames), classNames?.calendar), "data-slot": "calendar", children: /* @__PURE__ */ jsx(
|
|
798
823
|
ReactDatePicker,
|
|
799
824
|
{
|
|
800
825
|
ref: datePickerRef,
|
|
@@ -1000,6 +1025,7 @@ var TimePickerComponent = React.memo(
|
|
|
1000
1025
|
clearable = false,
|
|
1001
1026
|
fullWidth = true,
|
|
1002
1027
|
className,
|
|
1028
|
+
classNames,
|
|
1003
1029
|
value,
|
|
1004
1030
|
defaultValue,
|
|
1005
1031
|
onChange,
|
|
@@ -1056,11 +1082,14 @@ var TimePickerComponent = React.memo(
|
|
|
1056
1082
|
disabled,
|
|
1057
1083
|
onClick: () => setIsOpen(!isOpen),
|
|
1058
1084
|
className: cn(
|
|
1085
|
+
"datePicker_trigger",
|
|
1059
1086
|
pickerInputVariants({ variant, status, size, fullWidth }),
|
|
1060
1087
|
"pl-10 flex items-center justify-start cursor-pointer",
|
|
1061
1088
|
showClear && "pr-10",
|
|
1062
|
-
className
|
|
1089
|
+
className,
|
|
1090
|
+
classNames?.trigger
|
|
1063
1091
|
),
|
|
1092
|
+
"data-slot": "trigger",
|
|
1064
1093
|
children: timeConfirmed || timePreview ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1065
1094
|
timeConfirmed && /* @__PURE__ */ jsx("span", { children: timeConfirmed }),
|
|
1066
1095
|
timePreview && /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: timePreview })
|
|
@@ -1079,7 +1108,7 @@ var TimePickerComponent = React.memo(
|
|
|
1079
1108
|
messagePosition,
|
|
1080
1109
|
required,
|
|
1081
1110
|
fullWidth,
|
|
1082
|
-
children: /* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
|
|
1111
|
+
children: /* @__PURE__ */ jsxs("div", { className: cn("datePicker_root", "relative w-full", classNames?.root), "data-slot": "root", children: [
|
|
1083
1112
|
/* @__PURE__ */ jsx("div", { className: "absolute left-3 flex items-center h-full top-0 text-text-secondary pointer-events-none z-10", children: /* @__PURE__ */ jsx(Clock, { className: iconSizes[size] }) }),
|
|
1084
1113
|
/* @__PURE__ */ jsxs(
|
|
1085
1114
|
Popover,
|
|
@@ -1136,5 +1165,5 @@ var DatePicker = Object.assign(DatePickerComponent, {
|
|
|
1136
1165
|
});
|
|
1137
1166
|
|
|
1138
1167
|
export { DatePicker, RangePickerComponent, TimePickerComponent };
|
|
1139
|
-
//# sourceMappingURL=chunk-
|
|
1140
|
-
//# sourceMappingURL=chunk-
|
|
1168
|
+
//# sourceMappingURL=chunk-VUBU7Y4F.js.map
|
|
1169
|
+
//# sourceMappingURL=chunk-VUBU7Y4F.js.map
|