@octavius2929-personal/design-system 1.4.1 → 1.5.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/index.cjs CHANGED
@@ -1000,36 +1000,103 @@ var import_react17 = require("react");
1000
1000
  var import_react16 = require("react");
1001
1001
 
1002
1002
  // src/components/avatar/use-styles.css.ts
1003
+ var dot = "use-styles_dot__1mn1rmu8";
1004
+ var dotSize = { sm: "use-styles_dotSize_sm__1mn1rmu9", md: "use-styles_dotSize_md__1mn1rmua", lg: "use-styles_dotSize_lg__1mn1rmub" };
1005
+ var dotTone = { online: "use-styles_dotTone_online__1mn1rmuc", away: "use-styles_dotTone_away__1mn1rmud", busy: "use-styles_dotTone_busy__1mn1rmue", offline: "use-styles_dotTone_offline__1mn1rmuf" };
1006
+ var image = "use-styles_image__1mn1rmu2";
1007
+ var mark = "use-styles_mark__1mn1rmug";
1008
+ var markShape = { online: "use-styles_markShape_online__1mn1rmuh", busy: "use-styles_markShape_busy__1mn1rmui", away: "use-styles_markShape_away__1mn1rmuj", offline: "use-styles_markShape_offline__1mn1rmuk" };
1003
1009
  var root3 = "use-styles_root__1mn1rmu0";
1004
- var size2 = { sm: "use-styles_size_sm__1mn1rmu1", md: "use-styles_size_md__1mn1rmu2", lg: "use-styles_size_lg__1mn1rmu3" };
1005
- var variant = { "default": "use-styles_variant_default__1mn1rmu4", filled: "use-styles_variant_filled__1mn1rmu5" };
1010
+ var size2 = { sm: "use-styles_size_sm__1mn1rmu3", md: "use-styles_size_md__1mn1rmu4", lg: "use-styles_size_lg__1mn1rmu5" };
1011
+ var statusText = "surfaces_srOnly__1qa7atn0";
1012
+ var variant = { "default": "use-styles_variant_default__1mn1rmu6", filled: "use-styles_variant_filled__1mn1rmu7" };
1013
+ var visual = "use-styles_visual__1mn1rmu1";
1006
1014
 
1007
1015
  // src/components/avatar/use-styles.ts
1008
- function useStyles6({
1009
- size: size3 = "md",
1010
- filled,
1011
- className
1012
- }) {
1016
+ function useStyles6({ size: size3 = "md", filled, status, className }) {
1013
1017
  const { themeClass } = useTheme();
1014
1018
  const root25 = (0, import_react16.useMemo)(
1015
- () => [
1016
- themeClass,
1017
- root3,
1018
- size2[size3],
1019
- filled ? variant.filled : variant.default,
1020
- className
1021
- ].filter(Boolean).join(" "),
1022
- [themeClass, size3, filled, className]
1019
+ () => [themeClass, root3, size2[size3]].filter(Boolean).join(" "),
1020
+ [themeClass, size3]
1023
1021
  );
1024
- return { root: root25 };
1022
+ const visual2 = (0, import_react16.useMemo)(
1023
+ () => [visual, filled ? variant.filled : variant.default, className].filter(Boolean).join(" "),
1024
+ [filled, className]
1025
+ );
1026
+ const dot4 = (0, import_react16.useMemo)(
1027
+ () => status ? [dot, dotSize[size3], dotTone[status]].filter(Boolean).join(" ") : "",
1028
+ [status, size3]
1029
+ );
1030
+ const mark2 = (0, import_react16.useMemo)(
1031
+ () => status ? [mark, markShape[status]].filter(Boolean).join(" ") : "",
1032
+ [status]
1033
+ );
1034
+ return { root: root25, visual: visual2, image, dot: dot4, mark: mark2, statusText };
1025
1035
  }
1026
1036
 
1027
1037
  // src/components/avatar/index.tsx
1028
1038
  var import_jsx_runtime8 = require("react/jsx-runtime");
1029
- var Avatar = (0, import_react17.forwardRef)(function Avatar2({ size: size3, filled, className, children, testId, ...rest }, ref) {
1030
- const { root: root25 } = useStyles6({ size: size3, filled, className });
1031
- const { testId: dataTestId } = useTestId("media", testId);
1032
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { ref, className: root25, "data-testid": dataTestId, ...rest, children });
1039
+ function getInitials(name) {
1040
+ const words = name?.trim().split(/\s+/).filter(Boolean) ?? [];
1041
+ if (words.length === 0) return "";
1042
+ const firstWord = words[0] ?? "";
1043
+ const firstLetter = Array.from(firstWord)[0] ?? "";
1044
+ if (words.length === 1) return firstLetter.toLocaleUpperCase();
1045
+ const secondWord = words[1] ?? "";
1046
+ const secondLetter = Array.from(secondWord)[0] ?? "";
1047
+ return (firstLetter + secondLetter).toLocaleUpperCase();
1048
+ }
1049
+ var statusLabel = {
1050
+ online: "Online",
1051
+ away: "Away",
1052
+ busy: "Busy",
1053
+ offline: "Offline"
1054
+ };
1055
+ var Avatar = (0, import_react17.forwardRef)(function Avatar2({
1056
+ size: size3,
1057
+ filled,
1058
+ src,
1059
+ alt,
1060
+ name,
1061
+ status,
1062
+ decorative = false,
1063
+ className,
1064
+ children,
1065
+ testId,
1066
+ ...rest
1067
+ }, ref) {
1068
+ const [imgFailed, setImgFailed] = (0, import_react17.useState)(false);
1069
+ const [lastSrc, setLastSrc] = (0, import_react17.useState)(src);
1070
+ if (src !== lastSrc) {
1071
+ setLastSrc(src);
1072
+ setImgFailed(false);
1073
+ }
1074
+ const { root: root25, visual: visual2, image: image2, dot: dot4, mark: mark2, statusText: statusText2 } = useStyles6({
1075
+ size: size3,
1076
+ filled,
1077
+ status,
1078
+ className
1079
+ });
1080
+ const { testId: dataTestId, slot } = useTestId("media", testId);
1081
+ const showImage = Boolean(src) && !imgFailed;
1082
+ const accessibleName = alt?.trim() || name?.trim() || void 0;
1083
+ const fallback = children ?? getInitials(name);
1084
+ const visualA11yProps = decorative ? { "aria-hidden": true } : showImage ? {} : accessibleName ? { role: "img", "aria-label": accessibleName } : {};
1085
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { ref, className: root25, "data-testid": dataTestId, ...rest, children: [
1086
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: visual2, "data-testid": slot("visual"), ...visualA11yProps, children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1087
+ "img",
1088
+ {
1089
+ src,
1090
+ alt: decorative ? "" : accessibleName ?? "",
1091
+ className: image2,
1092
+ onError: () => setImgFailed(true)
1093
+ }
1094
+ ) : fallback }),
1095
+ status && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: dot4, "data-testid": slot("status"), "data-status": status, children: [
1096
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: mark2, "aria-hidden": "true" }),
1097
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: statusText2, children: statusLabel[status] })
1098
+ ] })
1099
+ ] });
1033
1100
  });
1034
1101
 
1035
1102
  // src/components/badge/index.tsx
@@ -1039,7 +1106,7 @@ var import_react19 = require("react");
1039
1106
  var import_react18 = require("react");
1040
1107
 
1041
1108
  // src/components/badge/use-styles.css.ts
1042
- var dot = "use-styles_dot__1wpei6p1";
1109
+ var dot2 = "use-styles_dot__1wpei6p1";
1043
1110
  var root4 = "use-styles_root__1wpei6p0";
1044
1111
  var tone2 = { ink: "use-styles_tone_ink__1wpei6p2", accent: "use-styles_tone_accent__1wpei6p3" };
1045
1112
 
@@ -1053,18 +1120,18 @@ function useStyles7({
1053
1120
  () => [themeClass, root4, className].filter(Boolean).join(" "),
1054
1121
  [themeClass, className]
1055
1122
  );
1056
- const dot3 = (0, import_react18.useMemo)(() => [dot, tone2[tone4]].join(" "), [tone4]);
1057
- return { root: root25, dot: dot3 };
1123
+ const dot4 = (0, import_react18.useMemo)(() => [dot2, tone2[tone4]].join(" "), [tone4]);
1124
+ return { root: root25, dot: dot4 };
1058
1125
  }
1059
1126
 
1060
1127
  // src/components/badge/index.tsx
1061
1128
  var import_jsx_runtime9 = require("react/jsx-runtime");
1062
1129
  var Badge = (0, import_react19.forwardRef)(function Badge2({ count, tone: tone4, className, children, testId, ...rest }, ref) {
1063
- const { root: root25, dot: dot3 } = useStyles7({ tone: tone4, className });
1130
+ const { root: root25, dot: dot4 } = useStyles7({ tone: tone4, className });
1064
1131
  const { testId: dataTestId, slot } = useTestId("media", testId);
1065
1132
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { ref, className: root25, "data-testid": dataTestId, ...rest, children: [
1066
1133
  children,
1067
- count != null && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: dot3, "data-testid": slot("dot"), children: count })
1134
+ count != null && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: dot4, "data-testid": slot("dot"), children: count })
1068
1135
  ] });
1069
1136
  });
1070
1137
 
@@ -1331,7 +1398,7 @@ var import_react26 = require("react");
1331
1398
  // src/components/radio/use-styles.css.ts
1332
1399
  var circle = "use-styles_circle__vy61b42";
1333
1400
  var disabled2 = "use-styles_disabled__vy61b41";
1334
- var dot2 = "use-styles_dot__vy61b43";
1401
+ var dot3 = "use-styles_dot__vy61b43";
1335
1402
  var input2 = "surfaces_srOnly__1qa7atn0";
1336
1403
  var label2 = "use-styles_label__vy61b44";
1337
1404
  var root7 = "use-styles_root__vy61b40";
@@ -1350,7 +1417,7 @@ function useStyles11({
1350
1417
  root: root25,
1351
1418
  input: input2,
1352
1419
  circle,
1353
- dot: dot2,
1420
+ dot: dot3,
1354
1421
  label: label2
1355
1422
  };
1356
1423
  }
@@ -1358,7 +1425,7 @@ function useStyles11({
1358
1425
  // src/components/radio/index.tsx
1359
1426
  var import_jsx_runtime15 = require("react/jsx-runtime");
1360
1427
  var Radio = (0, import_react27.forwardRef)(function Radio2({ checked, onChange, label: label8, name, value, disabled: disabled4, testId, ...rest }, ref) {
1361
- const { root: root25, input: input6, circle: circle2, dot: dot3, label: labelClass } = useStyles11({ disabled: disabled4 });
1428
+ const { root: root25, input: input6, circle: circle2, dot: dot4, label: labelClass } = useStyles11({ disabled: disabled4 });
1362
1429
  const { testId: dataTestId } = useTestId("toggle", testId);
1363
1430
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("label", { className: root25, "data-testid": dataTestId, "data-state": states({ checked, disabled: disabled4 }), children: [
1364
1431
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
@@ -1375,7 +1442,7 @@ var Radio = (0, import_react27.forwardRef)(function Radio2({ checked, onChange,
1375
1442
  ...rest
1376
1443
  }
1377
1444
  ),
1378
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: circle2, children: checked && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: dot3 }) }),
1445
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: circle2, children: checked && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: dot4 }) }),
1379
1446
  label8 != null && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: labelClass, children: label8 })
1380
1447
  ] });
1381
1448
  });