@sarunyu/system-one 4.9.27 → 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 +187 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +187 -19
- 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
|
@@ -1515,11 +1515,20 @@ function BottomSheet({
|
|
|
1515
1515
|
className,
|
|
1516
1516
|
contentClassName
|
|
1517
1517
|
}) {
|
|
1518
|
-
|
|
1518
|
+
const [everOpened, setEverOpened] = useState(!!open);
|
|
1519
|
+
useEffect(() => {
|
|
1520
|
+
if (open) setEverOpened(true);
|
|
1521
|
+
}, [open]);
|
|
1522
|
+
const handleOpenChange = (next) => {
|
|
1523
|
+
if (next) setEverOpened(true);
|
|
1524
|
+
onOpenChange == null ? void 0 : onOpenChange(next);
|
|
1525
|
+
};
|
|
1526
|
+
return /* @__PURE__ */ jsxs(Drawer, { direction: "bottom", open, onOpenChange: handleOpenChange, children: [
|
|
1519
1527
|
trigger ? /* @__PURE__ */ jsx(DrawerTrigger, { asChild: true, children: trigger }) : null,
|
|
1520
|
-
/* @__PURE__ */ jsxs(
|
|
1528
|
+
everOpened && /* @__PURE__ */ jsxs(
|
|
1521
1529
|
DrawerContent,
|
|
1522
1530
|
{
|
|
1531
|
+
"aria-describedby": void 0,
|
|
1523
1532
|
className: cn(
|
|
1524
1533
|
"[&>div:first-child]:hidden rounded-t-[24px] border-t-0 px-4 pb-6 pt-2",
|
|
1525
1534
|
className
|
|
@@ -1556,21 +1565,37 @@ function Header({
|
|
|
1556
1565
|
rightIcon,
|
|
1557
1566
|
onActionClick
|
|
1558
1567
|
}) {
|
|
1559
|
-
return /* @__PURE__ */ jsxs(
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
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
|
+
);
|
|
1574
1599
|
}
|
|
1575
1600
|
function Leading({
|
|
1576
1601
|
headerType,
|
|
@@ -1578,7 +1603,14 @@ function Leading({
|
|
|
1578
1603
|
leftIcon
|
|
1579
1604
|
}) {
|
|
1580
1605
|
if (headerType === "image") {
|
|
1581
|
-
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" });
|
|
1582
1614
|
}
|
|
1583
1615
|
if (headerType === "icon") {
|
|
1584
1616
|
return /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-foreground", children: leftIcon ?? /* @__PURE__ */ jsx(Circle, { size: 22 }) });
|
|
@@ -1595,7 +1627,7 @@ function Trailing({
|
|
|
1595
1627
|
return /* @__PURE__ */ jsx(
|
|
1596
1628
|
Button,
|
|
1597
1629
|
{
|
|
1598
|
-
className: "
|
|
1630
|
+
className: "text-base leading-6 font-bold",
|
|
1599
1631
|
onClick: onActionClick,
|
|
1600
1632
|
size: "md",
|
|
1601
1633
|
variant: "plain",
|
|
@@ -5938,6 +5970,138 @@ const TimeInput = forwardRef(
|
|
|
5938
5970
|
}
|
|
5939
5971
|
);
|
|
5940
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
|
+
}
|
|
5941
6105
|
const index = {
|
|
5942
6106
|
Button,
|
|
5943
6107
|
Badge,
|
|
@@ -5971,11 +6135,15 @@ const index = {
|
|
|
5971
6135
|
TableCell,
|
|
5972
6136
|
TextArea,
|
|
5973
6137
|
TimeInput,
|
|
6138
|
+
Avatar,
|
|
6139
|
+
AvatarStack,
|
|
5974
6140
|
cn,
|
|
5975
6141
|
useIsMobile
|
|
5976
6142
|
};
|
|
5977
6143
|
export {
|
|
5978
6144
|
Alert,
|
|
6145
|
+
Avatar,
|
|
6146
|
+
AvatarStack,
|
|
5979
6147
|
Badge,
|
|
5980
6148
|
BottomSheet,
|
|
5981
6149
|
Button,
|