@lark-apaas/client-toolkit-lite 1.1.1-alpha.2 → 1.1.1-beta.1

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
@@ -34,6 +34,7 @@ __export(index_exports, {
34
34
  ActiveLink: () => ActiveLink,
35
35
  AppContainer: () => AppContainer_default,
36
36
  NavLink: () => NavLink2,
37
+ PagePlaceholder: () => PagePlaceholder_default,
37
38
  QueryProvider: () => QueryProvider_default,
38
39
  TrackKey: () => TrackKey,
39
40
  UniversalLink: () => UniversalLink,
@@ -531,6 +532,65 @@ function useLogout() {
531
532
  }
532
533
  __name(useLogout, "useLogout");
533
534
 
535
+ // src/locales/messages.ts
536
+ var messages = {
537
+ // ── Safety 组件 ──────────────────────────────────────────────
538
+ "safety.badge.label": {
539
+ zh: "\u5999\u642D",
540
+ en: "Spark"
541
+ },
542
+ "safety.badge.builtWith": {
543
+ zh: "\u7531\u5999\u642D\u642D\u5EFA",
544
+ en: "Built with Spark"
545
+ },
546
+ "safety.ai.disclaimer": {
547
+ zh: "\u5305\u542B AI \u751F\u6210\u5185\u5BB9\uFF0C\u8BF7\u6CE8\u610F\u7504\u522B",
548
+ en: "AI-generated content. Use with care."
549
+ },
550
+ "safety.tenant.operated": {
551
+ zh: "{name}\u8FD0\u8425",
552
+ en: "Operated by {name}"
553
+ },
554
+ "safety.button.dontShowAgain": {
555
+ zh: "\u4E0D\u518D\u5C55\u793A",
556
+ en: "Don't show again"
557
+ },
558
+ "safety.button.learnMore": {
559
+ zh: "\u4E86\u89E3\u66F4\u591A",
560
+ en: "Learn more"
561
+ },
562
+ "safety.cover.pc": {
563
+ zh: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover.png",
564
+ en: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-weben.png"
565
+ },
566
+ "safety.cover.mobile": {
567
+ zh: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobile.png",
568
+ en: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobileen.png"
569
+ }
570
+ };
571
+ var messages_default = messages;
572
+
573
+ // src/utils/locale.ts
574
+ function getLocale() {
575
+ const lang = navigator.language || "zh";
576
+ return lang.startsWith("zh") ? "zh" : "en";
577
+ }
578
+ __name(getLocale, "getLocale");
579
+
580
+ // src/locales/index.ts
581
+ function t(key, params) {
582
+ const locale = getLocale();
583
+ const entry = messages_default[key];
584
+ let text = entry?.[locale] ?? entry?.zh ?? key;
585
+ if (params) {
586
+ for (const [k, v] of Object.entries(params)) {
587
+ text = text.replace(`{${k}}`, v);
588
+ }
589
+ }
590
+ return text;
591
+ }
592
+ __name(t, "t");
593
+
534
594
  // src/components/AppContainer/safety.tsx
535
595
  var resetBase = {
536
596
  boxSizing: "border-box",
@@ -553,8 +613,8 @@ var FONT_FAMILY = "'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI',
553
613
  var Z_BADGE = 1e7;
554
614
  var Z_OVERLAY = 10000001;
555
615
  var LOGO_URL = "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodalogo.svg";
556
- var COVER_URL = "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover.png";
557
- var COVER_MOBILE_URL = "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobile.png";
616
+ var getCoverUrl = /* @__PURE__ */ __name(() => t("safety.cover.pc"), "getCoverUrl");
617
+ var getCoverMobileUrl = /* @__PURE__ */ __name(() => t("safety.cover.mobile"), "getCoverMobileUrl");
558
618
  var ICON_COMPANY_URL = "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_company_outlined.svg";
559
619
  var ICON_AI_URL = "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_efficiency-ai_outlined.svg";
560
620
  var LANDING_URL = "https://miaoda.feishu.cn/landing";
@@ -840,7 +900,7 @@ var Safety = /* @__PURE__ */ __name(() => {
840
900
  const link = document.createElement("link");
841
901
  link.rel = "preload";
842
902
  link.as = "image";
843
- link.href = COVER_MOBILE_URL;
903
+ link.href = getCoverMobileUrl();
844
904
  document.head.appendChild(link);
845
905
  }
846
906
  }, [
@@ -867,7 +927,7 @@ var Safety = /* @__PURE__ */ __name(() => {
867
927
  ...badgeTextStyle,
868
928
  minWidth: 28
869
929
  }
870
- }, "\u5999\u642D"))), /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Overlay, {
930
+ }, t("safety.badge.label")))), /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Overlay, {
871
931
  style: overlayStyle
872
932
  }), /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Content, {
873
933
  style: sheetContent,
@@ -877,13 +937,13 @@ var Safety = /* @__PURE__ */ __name(() => {
877
937
  position: "absolute",
878
938
  clip: "rect(0 0 0 0)"
879
939
  }
880
- }, "\u5999\u642D\u54C1\u724C\u4FE1\u606F"), /* @__PURE__ */ import_react5.default.createElement("div", {
940
+ }, t("safety.badge.builtWith")), /* @__PURE__ */ import_react5.default.createElement("div", {
881
941
  style: sheetInner
882
942
  }, /* @__PURE__ */ import_react5.default.createElement(XIcon, {
883
943
  style: sheetCloseBtn,
884
944
  onClick: /* @__PURE__ */ __name(() => setOpen(false), "onClick")
885
945
  }), /* @__PURE__ */ import_react5.default.createElement("img", {
886
- src: COVER_MOBILE_URL,
946
+ src: getCoverMobileUrl(),
887
947
  alt: "",
888
948
  style: sheetCover,
889
949
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
@@ -903,14 +963,16 @@ var Safety = /* @__PURE__ */ __name(() => {
903
963
  style: infoIconMobile
904
964
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
905
965
  style: sheetInfoText
906
- }, userinfo?.name, "\u8FD0\u8425")), /* @__PURE__ */ import_react5.default.createElement("div", {
966
+ }, t("safety.tenant.operated", {
967
+ name: userinfo?.name ?? ""
968
+ }))), /* @__PURE__ */ import_react5.default.createElement("div", {
907
969
  style: infoRow
908
970
  }, /* @__PURE__ */ import_react5.default.createElement("img", {
909
971
  src: ICON_AI_URL,
910
972
  style: infoIconMobile
911
973
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
912
974
  style: sheetInfoText
913
- }, "\u5305\u542B AI \u751F\u6210\u5185\u5BB9\uFF0C\u8BF7\u6CE8\u610F\u7504\u522B"))), /* @__PURE__ */ import_react5.default.createElement("div", {
975
+ }, t("safety.ai.disclaimer")))), /* @__PURE__ */ import_react5.default.createElement("div", {
914
976
  style: mobileBtnRow
915
977
  }, /* @__PURE__ */ import_react5.default.createElement("div", {
916
978
  style: mobileBtnOutline,
@@ -921,10 +983,10 @@ var Safety = /* @__PURE__ */ __name(() => {
921
983
  setTimeout(() => setVisible(false), 200);
922
984
  window.localStorage?.setItem(HasClosedKey, "true");
923
985
  }, "onClick")
924
- }, "\u4E0D\u518D\u5C55\u793A"), /* @__PURE__ */ import_react5.default.createElement("div", {
986
+ }, t("safety.button.dontShowAgain")), /* @__PURE__ */ import_react5.default.createElement("div", {
925
987
  style: mobileBtnFilled,
926
988
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
927
- }, "\u4E86\u89E3\u66F4\u591A")))))));
989
+ }, t("safety.button.learnMore"))))))));
928
990
  }
929
991
  return /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Root, {
930
992
  open,
@@ -948,7 +1010,7 @@ var Safety = /* @__PURE__ */ __name(() => {
948
1010
  ...badgeTextStyle,
949
1011
  minWidth: 60
950
1012
  }
951
- }, "\u7531\u5999\u642D\u642D\u5EFA"))), /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Content, {
1013
+ }, t("safety.badge.builtWith")))), /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Content, {
952
1014
  style: popoverContent,
953
1015
  side: "top",
954
1016
  align: "end",
@@ -963,7 +1025,7 @@ var Safety = /* @__PURE__ */ __name(() => {
963
1025
  }, /* @__PURE__ */ import_react5.default.createElement("div", {
964
1026
  style: popoverInner
965
1027
  }, /* @__PURE__ */ import_react5.default.createElement("img", {
966
- src: COVER_URL,
1028
+ src: getCoverUrl(),
967
1029
  alt: "",
968
1030
  style: popoverCover,
969
1031
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
@@ -983,14 +1045,16 @@ var Safety = /* @__PURE__ */ __name(() => {
983
1045
  style: infoIcon
984
1046
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
985
1047
  style: infoText
986
- }, userinfo?.name, "\u8FD0\u8425")), /* @__PURE__ */ import_react5.default.createElement("div", {
1048
+ }, t("safety.tenant.operated", {
1049
+ name: userinfo?.name ?? ""
1050
+ }))), /* @__PURE__ */ import_react5.default.createElement("div", {
987
1051
  style: infoRow
988
1052
  }, /* @__PURE__ */ import_react5.default.createElement("img", {
989
1053
  src: ICON_AI_URL,
990
1054
  style: infoIcon
991
1055
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
992
1056
  style: infoText
993
- }, "\u5305\u542B AI \u751F\u6210\u5185\u5BB9\uFF0C\u8BF7\u6CE8\u610F\u7504\u522B"))), /* @__PURE__ */ import_react5.default.createElement("div", {
1057
+ }, t("safety.ai.disclaimer")))), /* @__PURE__ */ import_react5.default.createElement("div", {
994
1058
  style: btnRow
995
1059
  }, /* @__PURE__ */ import_react5.default.createElement(HoverButton, {
996
1060
  style: btnBase,
@@ -1001,11 +1065,11 @@ var Safety = /* @__PURE__ */ __name(() => {
1001
1065
  setVisible(false);
1002
1066
  window.localStorage?.setItem(HasClosedKey, "true");
1003
1067
  }, "onClick")
1004
- }, "\u4E0D\u518D\u5C55\u793A"), /* @__PURE__ */ import_react5.default.createElement(HoverButton, {
1068
+ }, t("safety.button.dontShowAgain")), /* @__PURE__ */ import_react5.default.createElement(HoverButton, {
1005
1069
  style: btnBase,
1006
1070
  "data-custom-element": "safety-more",
1007
1071
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
1008
- }, "\u4E86\u89E3\u66F4\u591A")))))));
1072
+ }, t("safety.button.learnMore"))))))));
1009
1073
  }, "Safety");
1010
1074
  var safety_default = Safety;
1011
1075
 
@@ -1215,13 +1279,58 @@ var Welcome = /* @__PURE__ */ __name(({ title = "\u9875\u9762\u5F85\u5F00\u53D1"
1215
1279
  }, "Welcome");
1216
1280
  var Welcome_default = Welcome;
1217
1281
 
1218
- // src/route-components/ActiveLink.tsx
1282
+ // src/components/PagePlaceholder/index.tsx
1219
1283
  var import_react9 = __toESM(require("react"), 1);
1284
+ var PagePlaceholder = /* @__PURE__ */ __name(({ title = "\u9875\u9762\u5F85\u5F00\u53D1", description = "\u9875\u9762\u6682\u672A\u5F00\u53D1\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85..." }) => {
1285
+ return /* @__PURE__ */ import_react9.default.createElement("div", {
1286
+ style: {
1287
+ display: "flex",
1288
+ flexDirection: "column",
1289
+ alignItems: "center",
1290
+ justifyContent: "center",
1291
+ padding: "0 24px",
1292
+ width: "100%",
1293
+ height: "calc(100vh - 64px)",
1294
+ textAlign: "center"
1295
+ }
1296
+ }, /* @__PURE__ */ import_react9.default.createElement("img", {
1297
+ style: {
1298
+ borderRadius: "6px",
1299
+ marginBottom: "24px"
1300
+ },
1301
+ width: "320",
1302
+ height: "200",
1303
+ src: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/miao/welcome.svg",
1304
+ alt: "Welcome"
1305
+ }), /* @__PURE__ */ import_react9.default.createElement("div", {
1306
+ style: {
1307
+ fontSize: "16px",
1308
+ fontWeight: 500,
1309
+ marginBottom: "4px",
1310
+ lineHeight: "24px"
1311
+ }
1312
+ }, title), /* @__PURE__ */ import_react9.default.createElement("div", {
1313
+ style: {
1314
+ color: "#6b7280",
1315
+ fontSize: "16px",
1316
+ lineHeight: "24px",
1317
+ maxWidth: "480px",
1318
+ overflow: "hidden",
1319
+ display: "-webkit-box",
1320
+ WebkitLineClamp: 2,
1321
+ WebkitBoxOrient: "vertical"
1322
+ }
1323
+ }, description));
1324
+ }, "PagePlaceholder");
1325
+ var PagePlaceholder_default = PagePlaceholder;
1326
+
1327
+ // src/route-components/ActiveLink.tsx
1328
+ var import_react10 = __toESM(require("react"), 1);
1220
1329
  var import_react_router_dom = require("react-router-dom");
1221
- var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, className, style, children, ...rest }, ref) => {
1222
- const [currentHash, setCurrentHash] = (0, import_react9.useState)(() => typeof window !== "undefined" ? window.location.hash : "");
1330
+ var ActiveLink = /* @__PURE__ */ (0, import_react10.forwardRef)(({ to, onClick, className, style, children, ...rest }, ref) => {
1331
+ const [currentHash, setCurrentHash] = (0, import_react10.useState)(() => typeof window !== "undefined" ? window.location.hash : "");
1223
1332
  const isHashRoute = typeof to === "string" && to.startsWith("#");
1224
- (0, import_react9.useEffect)(() => {
1333
+ (0, import_react10.useEffect)(() => {
1225
1334
  if (!isHashRoute) return;
1226
1335
  const handleHashChange = /* @__PURE__ */ __name(() => {
1227
1336
  setCurrentHash(window.location.hash);
@@ -1233,7 +1342,7 @@ var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, c
1233
1342
  ]);
1234
1343
  const isActive = isHashRoute && currentHash === to;
1235
1344
  if (!isHashRoute) {
1236
- return /* @__PURE__ */ import_react9.default.createElement(import_react_router_dom.NavLink, {
1345
+ return /* @__PURE__ */ import_react10.default.createElement(import_react_router_dom.NavLink, {
1237
1346
  ref,
1238
1347
  to,
1239
1348
  onClick,
@@ -1274,7 +1383,7 @@ var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, c
1274
1383
  isPending: false,
1275
1384
  isTransitioning: false
1276
1385
  }) : children;
1277
- return /* @__PURE__ */ import_react9.default.createElement("a", {
1386
+ return /* @__PURE__ */ import_react10.default.createElement("a", {
1278
1387
  ref,
1279
1388
  href: to,
1280
1389
  onClick: handleHashClick,
@@ -1286,9 +1395,9 @@ var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, c
1286
1395
  ActiveLink.displayName = "ActiveLink";
1287
1396
 
1288
1397
  // src/route-components/NavLink.tsx
1289
- var React7 = __toESM(require("react"), 1);
1398
+ var React8 = __toESM(require("react"), 1);
1290
1399
  var import_react_router_dom2 = require("react-router-dom");
1291
- var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, style, ...props }, ref) => {
1400
+ var NavLink2 = /* @__PURE__ */ React8.forwardRef(({ to, children, className, style, ...props }, ref) => {
1292
1401
  const isHashLink = typeof to === "string" && to.startsWith("#");
1293
1402
  const location = (0, import_react_router_dom2.useLocation)();
1294
1403
  const navigate = (0, import_react_router_dom2.useNavigate)();
@@ -1312,7 +1421,7 @@ var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, sty
1312
1421
  const resolvedClassName = typeof className === "function" ? className(renderProps) : className;
1313
1422
  const resolvedStyle = typeof style === "function" ? style(renderProps) : style;
1314
1423
  const { caseSensitive, end, replace, state, preventScrollReset, relative, viewTransition, ...restProps } = props;
1315
- return /* @__PURE__ */ React7.createElement("a", {
1424
+ return /* @__PURE__ */ React8.createElement("a", {
1316
1425
  href: to,
1317
1426
  onClick: handleClick,
1318
1427
  ref,
@@ -1321,7 +1430,7 @@ var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, sty
1321
1430
  ...restProps
1322
1431
  }, typeof children === "function" ? children(renderProps) : children);
1323
1432
  }
1324
- return /* @__PURE__ */ React7.createElement(import_react_router_dom2.NavLink, {
1433
+ return /* @__PURE__ */ React8.createElement(import_react_router_dom2.NavLink, {
1325
1434
  to,
1326
1435
  ref,
1327
1436
  className,
@@ -1336,7 +1445,7 @@ var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, sty
1336
1445
  NavLink2.displayName = "NavLink";
1337
1446
 
1338
1447
  // src/route-components/UniversalLink.tsx
1339
- var import_react10 = __toESM(require("react"), 1);
1448
+ var import_react11 = __toESM(require("react"), 1);
1340
1449
  var import_react_router_dom3 = require("react-router-dom");
1341
1450
  function isInternalRoute(to) {
1342
1451
  return !to.startsWith("#") && !to.startsWith("http://") && !to.startsWith("https://") && !to.startsWith("//");
@@ -1346,15 +1455,15 @@ function isExternalLink(to) {
1346
1455
  return to.startsWith("http://") || to.startsWith("https://") || to.startsWith("//");
1347
1456
  }
1348
1457
  __name(isExternalLink, "isExternalLink");
1349
- var UniversalLink = /* @__PURE__ */ import_react10.default.forwardRef(/* @__PURE__ */ __name(function UniversalLink2({ to, ...props }, ref) {
1458
+ var UniversalLink = /* @__PURE__ */ import_react11.default.forwardRef(/* @__PURE__ */ __name(function UniversalLink2({ to, ...props }, ref) {
1350
1459
  if (isInternalRoute(to)) {
1351
- return /* @__PURE__ */ import_react10.default.createElement(import_react_router_dom3.Link, {
1460
+ return /* @__PURE__ */ import_react11.default.createElement(import_react_router_dom3.Link, {
1352
1461
  to,
1353
1462
  ref,
1354
1463
  ...props
1355
1464
  });
1356
1465
  }
1357
- return /* @__PURE__ */ import_react10.default.createElement("a", {
1466
+ return /* @__PURE__ */ import_react11.default.createElement("a", {
1358
1467
  href: to,
1359
1468
  ref,
1360
1469
  ...props,
@@ -1779,6 +1888,7 @@ var abstractArt3dRenderingCoverImg6 = "https://lf3-static.bytednsdoc.com/obj/ede
1779
1888
  ActiveLink,
1780
1889
  AppContainer,
1781
1890
  NavLink,
1891
+ PagePlaceholder,
1782
1892
  QueryProvider,
1783
1893
  TrackKey,
1784
1894
  UniversalLink,