@sarunyu/system-one 4.9.28 → 4.9.30
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/AGENTS.md +1 -0
- package/DESIGN.md +2 -2
- package/dist/index.cjs +176 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +176 -17
- package/dist/index.js.map +1 -1
- package/dist/src/components/avatar-stack.d.ts +24 -0
- package/dist/src/components/avatar-stack.d.ts.map +1 -0
- package/dist/src/components/avatar.d.ts +20 -0
- package/dist/src/components/avatar.d.ts.map +1 -0
- package/dist/src/components/bottom-sheet.d.ts.map +1 -1
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/llms.txt +53 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1565,21 +1565,37 @@ function Header({
|
|
|
1565
1565
|
rightIcon,
|
|
1566
1566
|
onActionClick
|
|
1567
1567
|
}) {
|
|
1568
|
-
return /* @__PURE__ */ jsxs(
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1568
|
+
return /* @__PURE__ */ jsxs(
|
|
1569
|
+
"div",
|
|
1570
|
+
{
|
|
1571
|
+
className: cn(
|
|
1572
|
+
"flex items-center gap-3",
|
|
1573
|
+
rightSide === "action" ? "pr-2" : void 0
|
|
1574
|
+
),
|
|
1575
|
+
children: [
|
|
1576
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
1577
|
+
/* @__PURE__ */ jsx(
|
|
1578
|
+
Leading,
|
|
1579
|
+
{
|
|
1580
|
+
headerType,
|
|
1581
|
+
imageSrc,
|
|
1582
|
+
leftIcon
|
|
1583
|
+
}
|
|
1584
|
+
),
|
|
1585
|
+
/* @__PURE__ */ jsx("p", { className: "truncate text-base leading-6 font-bold text-foreground", children: title })
|
|
1586
|
+
] }),
|
|
1587
|
+
/* @__PURE__ */ jsx(
|
|
1588
|
+
Trailing,
|
|
1589
|
+
{
|
|
1590
|
+
rightSide,
|
|
1591
|
+
actionLabel,
|
|
1592
|
+
rightIcon,
|
|
1593
|
+
onActionClick
|
|
1594
|
+
}
|
|
1595
|
+
)
|
|
1596
|
+
]
|
|
1597
|
+
}
|
|
1598
|
+
);
|
|
1583
1599
|
}
|
|
1584
1600
|
function Leading({
|
|
1585
1601
|
headerType,
|
|
@@ -1587,7 +1603,14 @@ function Leading({
|
|
|
1587
1603
|
leftIcon
|
|
1588
1604
|
}) {
|
|
1589
1605
|
if (headerType === "image") {
|
|
1590
|
-
return imageSrc ? /* @__PURE__ */ jsx(
|
|
1606
|
+
return imageSrc ? /* @__PURE__ */ jsx(
|
|
1607
|
+
"img",
|
|
1608
|
+
{
|
|
1609
|
+
alt: "",
|
|
1610
|
+
className: "size-8 shrink-0 rounded-md object-cover",
|
|
1611
|
+
src: imageSrc
|
|
1612
|
+
}
|
|
1613
|
+
) : /* @__PURE__ */ jsx("div", { className: "size-8 shrink-0 rounded-md bg-muted" });
|
|
1591
1614
|
}
|
|
1592
1615
|
if (headerType === "icon") {
|
|
1593
1616
|
return /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-foreground", children: leftIcon ?? /* @__PURE__ */ jsx(Circle, { size: 22 }) });
|
|
@@ -1604,7 +1627,7 @@ function Trailing({
|
|
|
1604
1627
|
return /* @__PURE__ */ jsx(
|
|
1605
1628
|
Button,
|
|
1606
1629
|
{
|
|
1607
|
-
className: "
|
|
1630
|
+
className: "text-base leading-6 font-bold",
|
|
1608
1631
|
onClick: onActionClick,
|
|
1609
1632
|
size: "md",
|
|
1610
1633
|
variant: "plain",
|
|
@@ -5947,6 +5970,138 @@ const TimeInput = forwardRef(
|
|
|
5947
5970
|
}
|
|
5948
5971
|
);
|
|
5949
5972
|
TimeInput.displayName = "TimeInput";
|
|
5973
|
+
const avatarPlaceholder = "data:image/png;base64,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";
|
|
5974
|
+
const TEXT_GRADIENT = "linear-gradient(to top right, #B5D3F8, #E6F6FB)";
|
|
5975
|
+
const TEXT_COLOR = "#00A2D9";
|
|
5976
|
+
const SIZE_CONFIG = {
|
|
5977
|
+
xxs: { container: "size-4", fontSize: "text-[11px]", dotSize: "size-[5px]", dotRing: "ring-[1.5px]" },
|
|
5978
|
+
xs: { container: "size-5", fontSize: "text-sm", dotSize: "size-[5px]", dotRing: "ring-[1.5px]" },
|
|
5979
|
+
s: { container: "size-6", fontSize: "text-base", dotSize: "size-[6px]", dotRing: "ring-[1.5px]" },
|
|
5980
|
+
m: { container: "size-8", fontSize: "text-xl", dotSize: "size-[7px]", dotRing: "ring-2" },
|
|
5981
|
+
l: { container: "size-10", fontSize: "text-[26px]", dotSize: "size-[9px]", dotRing: "ring-2" },
|
|
5982
|
+
xl: { container: "size-12", fontSize: "text-[32px]", dotSize: "size-[11px]", dotRing: "ring-2" },
|
|
5983
|
+
xxl: { container: "size-13", fontSize: "text-[37px]", dotSize: "size-[13px]", dotRing: "ring-2" }
|
|
5984
|
+
};
|
|
5985
|
+
function Avatar({
|
|
5986
|
+
type = "photo",
|
|
5987
|
+
size = "m",
|
|
5988
|
+
status = false,
|
|
5989
|
+
src,
|
|
5990
|
+
alt = "",
|
|
5991
|
+
initials,
|
|
5992
|
+
className
|
|
5993
|
+
}) {
|
|
5994
|
+
const { container, fontSize, dotSize, dotRing } = SIZE_CONFIG[size];
|
|
5995
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("relative inline-flex shrink-0", container, className), children: [
|
|
5996
|
+
type === "photo" && /* @__PURE__ */ jsx(
|
|
5997
|
+
"img",
|
|
5998
|
+
{
|
|
5999
|
+
src,
|
|
6000
|
+
alt,
|
|
6001
|
+
className: "size-full rounded-full object-cover bg-bg-default-tertiary"
|
|
6002
|
+
}
|
|
6003
|
+
),
|
|
6004
|
+
type === "placeholder" && /* @__PURE__ */ jsx(
|
|
6005
|
+
"img",
|
|
6006
|
+
{
|
|
6007
|
+
src: avatarPlaceholder,
|
|
6008
|
+
alt: "",
|
|
6009
|
+
className: "size-full rounded-full object-cover",
|
|
6010
|
+
"aria-hidden": "true"
|
|
6011
|
+
}
|
|
6012
|
+
),
|
|
6013
|
+
type === "text" && /* @__PURE__ */ jsx(
|
|
6014
|
+
"div",
|
|
6015
|
+
{
|
|
6016
|
+
className: "relative size-full rounded-full overflow-hidden",
|
|
6017
|
+
style: { background: TEXT_GRADIENT },
|
|
6018
|
+
children: /* @__PURE__ */ jsx(
|
|
6019
|
+
"span",
|
|
6020
|
+
{
|
|
6021
|
+
className: cn(
|
|
6022
|
+
"absolute left-1/2 top-1/2 font-bold leading-none select-none whitespace-nowrap",
|
|
6023
|
+
fontSize
|
|
6024
|
+
),
|
|
6025
|
+
style: {
|
|
6026
|
+
color: TEXT_COLOR,
|
|
6027
|
+
transform: "translate(-50%, calc(-50% + 0.07em))"
|
|
6028
|
+
},
|
|
6029
|
+
children: (initials ?? "").slice(0, 2).toUpperCase()
|
|
6030
|
+
}
|
|
6031
|
+
)
|
|
6032
|
+
}
|
|
6033
|
+
),
|
|
6034
|
+
status && type === "photo" && /* @__PURE__ */ jsx(
|
|
6035
|
+
"span",
|
|
6036
|
+
{
|
|
6037
|
+
"aria-label": "Online",
|
|
6038
|
+
className: cn(
|
|
6039
|
+
"absolute bottom-0 right-0 block rounded-full bg-bg-success",
|
|
6040
|
+
dotSize,
|
|
6041
|
+
dotRing,
|
|
6042
|
+
"ring-white"
|
|
6043
|
+
)
|
|
6044
|
+
}
|
|
6045
|
+
)
|
|
6046
|
+
] });
|
|
6047
|
+
}
|
|
6048
|
+
const STACK_CONFIG = {
|
|
6049
|
+
small: { avatarSize: "xxs", avatarPx: 16, overlapPx: 4 },
|
|
6050
|
+
medium: { avatarSize: "xs", avatarPx: 20, overlapPx: 5 },
|
|
6051
|
+
large: { avatarSize: "s", avatarPx: 24, overlapPx: 5 }
|
|
6052
|
+
};
|
|
6053
|
+
function subtractMask(avatarPx, overlapPx) {
|
|
6054
|
+
const r = avatarPx / 2;
|
|
6055
|
+
const spacingPx = avatarPx - overlapPx;
|
|
6056
|
+
const biteX = spacingPx + r;
|
|
6057
|
+
const biteY = r;
|
|
6058
|
+
const biteR = r + 1;
|
|
6059
|
+
const self = `radial-gradient(circle at ${r}px ${r}px, white ${r}px, transparent ${r}px)`;
|
|
6060
|
+
const bite = `radial-gradient(circle at ${biteX}px ${biteY}px, white ${biteR}px, transparent ${biteR}px)`;
|
|
6061
|
+
return {
|
|
6062
|
+
maskImage: `${self}, ${bite}`,
|
|
6063
|
+
maskComposite: "subtract",
|
|
6064
|
+
WebkitMaskImage: `${bite}, ${self}`,
|
|
6065
|
+
WebkitMaskComposite: "destination-out"
|
|
6066
|
+
};
|
|
6067
|
+
}
|
|
6068
|
+
function AvatarStack({
|
|
6069
|
+
items,
|
|
6070
|
+
size = "small",
|
|
6071
|
+
max = 5,
|
|
6072
|
+
className
|
|
6073
|
+
}) {
|
|
6074
|
+
const { avatarSize, avatarPx, overlapPx } = STACK_CONFIG[size];
|
|
6075
|
+
const visible = items.slice(0, max);
|
|
6076
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex shrink-0", className), children: visible.map((item, i) => {
|
|
6077
|
+
const isLast = i === visible.length - 1;
|
|
6078
|
+
return /* @__PURE__ */ jsx(
|
|
6079
|
+
"div",
|
|
6080
|
+
{
|
|
6081
|
+
className: "relative flex shrink-0",
|
|
6082
|
+
style: {
|
|
6083
|
+
width: avatarPx,
|
|
6084
|
+
height: avatarPx,
|
|
6085
|
+
marginLeft: i > 0 ? -overlapPx : 0,
|
|
6086
|
+
// Leftmost = highest z-index: its transparent bite reveals the avatar below.
|
|
6087
|
+
zIndex: visible.length - i,
|
|
6088
|
+
...isLast ? {} : subtractMask(avatarPx, overlapPx)
|
|
6089
|
+
},
|
|
6090
|
+
children: /* @__PURE__ */ jsx(
|
|
6091
|
+
Avatar,
|
|
6092
|
+
{
|
|
6093
|
+
type: item.type ?? "photo",
|
|
6094
|
+
size: avatarSize,
|
|
6095
|
+
src: item.src,
|
|
6096
|
+
alt: item.alt,
|
|
6097
|
+
initials: item.initials
|
|
6098
|
+
}
|
|
6099
|
+
)
|
|
6100
|
+
},
|
|
6101
|
+
i
|
|
6102
|
+
);
|
|
6103
|
+
}) });
|
|
6104
|
+
}
|
|
5950
6105
|
const index = {
|
|
5951
6106
|
Button,
|
|
5952
6107
|
Badge,
|
|
@@ -5980,11 +6135,15 @@ const index = {
|
|
|
5980
6135
|
TableCell,
|
|
5981
6136
|
TextArea,
|
|
5982
6137
|
TimeInput,
|
|
6138
|
+
Avatar,
|
|
6139
|
+
AvatarStack,
|
|
5983
6140
|
cn,
|
|
5984
6141
|
useIsMobile
|
|
5985
6142
|
};
|
|
5986
6143
|
export {
|
|
5987
6144
|
Alert,
|
|
6145
|
+
Avatar,
|
|
6146
|
+
AvatarStack,
|
|
5988
6147
|
Badge,
|
|
5989
6148
|
BottomSheet,
|
|
5990
6149
|
Button,
|