@lark-apaas/client-toolkit-lite 1.1.1-alpha.0 → 1.1.1-alpha.10

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,
@@ -373,26 +374,18 @@ function splitWorkspaceUrl(fullUrl) {
373
374
  __name(splitWorkspaceUrl, "splitWorkspaceUrl");
374
375
 
375
376
  // src/integrations/dataloom.ts
376
- var import_js = require("@data-loom/js");
377
+ var import_dataloom = require("@lark-apaas/dataloom");
377
378
  var createDataLoomClient = /* @__PURE__ */ __name((url, pat) => {
378
- const { baseUrl, workspace } = url ? splitWorkspaceUrl(url) : {
379
- baseUrl: "",
380
- workspace: ""
379
+ const { baseUrl } = url ? splitWorkspaceUrl(url) : {
380
+ baseUrl: ""
381
381
  };
382
382
  const appId = getAppId() ?? "";
383
- return (0, import_js.createClient)(baseUrl, pat ?? "", workspace, {
383
+ return (0, import_dataloom.createClient)(baseUrl, pat ?? "", {
384
384
  global: {
385
385
  enableDataloomLog: process.env.NODE_ENV !== "production",
386
386
  requestRateLimit: process.env.NODE_ENV !== "production" ? 100 : void 0,
387
387
  brandName: "miaoda",
388
- appId,
389
- onError: /* @__PURE__ */ __name((error, dataloomInstance) => {
390
- if (error?.status === 401) {
391
- if (error?.code === "k_ident_013001") {
392
- dataloomInstance.service.session.redirectToLogin();
393
- }
394
- }
395
- }, "onError")
388
+ appId
396
389
  }
397
390
  });
398
391
  }, "createDataLoomClient");
@@ -531,6 +524,65 @@ function useLogout() {
531
524
  }
532
525
  __name(useLogout, "useLogout");
533
526
 
527
+ // src/locales/messages.ts
528
+ var messages = {
529
+ // ── Safety 组件 ──────────────────────────────────────────────
530
+ "safety.badge.label": {
531
+ zh: "\u5999\u642D",
532
+ en: "Spark"
533
+ },
534
+ "safety.badge.builtWith": {
535
+ zh: "\u7531\u5999\u642D\u642D\u5EFA",
536
+ en: "Built with Spark"
537
+ },
538
+ "safety.ai.disclaimer": {
539
+ zh: "\u5305\u542B AI \u751F\u6210\u5185\u5BB9\uFF0C\u8BF7\u6CE8\u610F\u7504\u522B",
540
+ en: "AI-generated content. Use with care."
541
+ },
542
+ "safety.tenant.operated": {
543
+ zh: "{name}\u8FD0\u8425",
544
+ en: "Operated by {name}"
545
+ },
546
+ "safety.button.dontShowAgain": {
547
+ zh: "\u4E0D\u518D\u5C55\u793A",
548
+ en: "Don't show again"
549
+ },
550
+ "safety.button.learnMore": {
551
+ zh: "\u4E86\u89E3\u66F4\u591A",
552
+ en: "Learn more"
553
+ },
554
+ "safety.cover.pc": {
555
+ zh: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover.png",
556
+ en: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-weben.png"
557
+ },
558
+ "safety.cover.mobile": {
559
+ zh: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobile.png",
560
+ en: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobileen.png"
561
+ }
562
+ };
563
+ var messages_default = messages;
564
+
565
+ // src/utils/locale.ts
566
+ function getLocale() {
567
+ const lang = navigator.language || "zh";
568
+ return lang.startsWith("zh") ? "zh" : "en";
569
+ }
570
+ __name(getLocale, "getLocale");
571
+
572
+ // src/locales/index.ts
573
+ function t(key, params) {
574
+ const locale = getLocale();
575
+ const entry = messages_default[key];
576
+ let text = entry?.[locale] ?? entry?.zh ?? key;
577
+ if (params) {
578
+ for (const [k, v] of Object.entries(params)) {
579
+ text = text.replace(`{${k}}`, v);
580
+ }
581
+ }
582
+ return text;
583
+ }
584
+ __name(t, "t");
585
+
534
586
  // src/components/AppContainer/safety.tsx
535
587
  var resetBase = {
536
588
  boxSizing: "border-box",
@@ -553,8 +605,8 @@ var FONT_FAMILY = "'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI',
553
605
  var Z_BADGE = 1e7;
554
606
  var Z_OVERLAY = 10000001;
555
607
  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";
608
+ var getCoverUrl = /* @__PURE__ */ __name(() => t("safety.cover.pc"), "getCoverUrl");
609
+ var getCoverMobileUrl = /* @__PURE__ */ __name(() => t("safety.cover.mobile"), "getCoverMobileUrl");
558
610
  var ICON_COMPANY_URL = "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_company_outlined.svg";
559
611
  var ICON_AI_URL = "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_efficiency-ai_outlined.svg";
560
612
  var LANDING_URL = "https://miaoda.feishu.cn/landing";
@@ -840,7 +892,7 @@ var Safety = /* @__PURE__ */ __name(() => {
840
892
  const link = document.createElement("link");
841
893
  link.rel = "preload";
842
894
  link.as = "image";
843
- link.href = COVER_MOBILE_URL;
895
+ link.href = getCoverMobileUrl();
844
896
  document.head.appendChild(link);
845
897
  }
846
898
  }, [
@@ -867,7 +919,7 @@ var Safety = /* @__PURE__ */ __name(() => {
867
919
  ...badgeTextStyle,
868
920
  minWidth: 28
869
921
  }
870
- }, "\u5999\u642D"))), /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Overlay, {
922
+ }, t("safety.badge.label")))), /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Overlay, {
871
923
  style: overlayStyle
872
924
  }), /* @__PURE__ */ import_react5.default.createElement(DialogPrimitive.Content, {
873
925
  style: sheetContent,
@@ -877,13 +929,13 @@ var Safety = /* @__PURE__ */ __name(() => {
877
929
  position: "absolute",
878
930
  clip: "rect(0 0 0 0)"
879
931
  }
880
- }, "\u5999\u642D\u54C1\u724C\u4FE1\u606F"), /* @__PURE__ */ import_react5.default.createElement("div", {
932
+ }, t("safety.badge.builtWith")), /* @__PURE__ */ import_react5.default.createElement("div", {
881
933
  style: sheetInner
882
934
  }, /* @__PURE__ */ import_react5.default.createElement(XIcon, {
883
935
  style: sheetCloseBtn,
884
936
  onClick: /* @__PURE__ */ __name(() => setOpen(false), "onClick")
885
937
  }), /* @__PURE__ */ import_react5.default.createElement("img", {
886
- src: COVER_MOBILE_URL,
938
+ src: getCoverMobileUrl(),
887
939
  alt: "",
888
940
  style: sheetCover,
889
941
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
@@ -903,14 +955,16 @@ var Safety = /* @__PURE__ */ __name(() => {
903
955
  style: infoIconMobile
904
956
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
905
957
  style: sheetInfoText
906
- }, userinfo?.name, "\u8FD0\u8425")), /* @__PURE__ */ import_react5.default.createElement("div", {
958
+ }, t("safety.tenant.operated", {
959
+ name: userinfo?.name ?? ""
960
+ }))), /* @__PURE__ */ import_react5.default.createElement("div", {
907
961
  style: infoRow
908
962
  }, /* @__PURE__ */ import_react5.default.createElement("img", {
909
963
  src: ICON_AI_URL,
910
964
  style: infoIconMobile
911
965
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
912
966
  style: sheetInfoText
913
- }, "\u5305\u542B AI \u751F\u6210\u5185\u5BB9\uFF0C\u8BF7\u6CE8\u610F\u7504\u522B"))), /* @__PURE__ */ import_react5.default.createElement("div", {
967
+ }, t("safety.ai.disclaimer")))), /* @__PURE__ */ import_react5.default.createElement("div", {
914
968
  style: mobileBtnRow
915
969
  }, /* @__PURE__ */ import_react5.default.createElement("div", {
916
970
  style: mobileBtnOutline,
@@ -921,10 +975,10 @@ var Safety = /* @__PURE__ */ __name(() => {
921
975
  setTimeout(() => setVisible(false), 200);
922
976
  window.localStorage?.setItem(HasClosedKey, "true");
923
977
  }, "onClick")
924
- }, "\u4E0D\u518D\u5C55\u793A"), /* @__PURE__ */ import_react5.default.createElement("div", {
978
+ }, t("safety.button.dontShowAgain")), /* @__PURE__ */ import_react5.default.createElement("div", {
925
979
  style: mobileBtnFilled,
926
980
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
927
- }, "\u4E86\u89E3\u66F4\u591A")))))));
981
+ }, t("safety.button.learnMore"))))))));
928
982
  }
929
983
  return /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Root, {
930
984
  open,
@@ -948,7 +1002,7 @@ var Safety = /* @__PURE__ */ __name(() => {
948
1002
  ...badgeTextStyle,
949
1003
  minWidth: 60
950
1004
  }
951
- }, "\u7531\u5999\u642D\u642D\u5EFA"))), /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Content, {
1005
+ }, t("safety.badge.builtWith")))), /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Portal, null, /* @__PURE__ */ import_react5.default.createElement(PopoverPrimitive.Content, {
952
1006
  style: popoverContent,
953
1007
  side: "top",
954
1008
  align: "end",
@@ -963,7 +1017,7 @@ var Safety = /* @__PURE__ */ __name(() => {
963
1017
  }, /* @__PURE__ */ import_react5.default.createElement("div", {
964
1018
  style: popoverInner
965
1019
  }, /* @__PURE__ */ import_react5.default.createElement("img", {
966
- src: COVER_URL,
1020
+ src: getCoverUrl(),
967
1021
  alt: "",
968
1022
  style: popoverCover,
969
1023
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
@@ -983,14 +1037,16 @@ var Safety = /* @__PURE__ */ __name(() => {
983
1037
  style: infoIcon
984
1038
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
985
1039
  style: infoText
986
- }, userinfo?.name, "\u8FD0\u8425")), /* @__PURE__ */ import_react5.default.createElement("div", {
1040
+ }, t("safety.tenant.operated", {
1041
+ name: userinfo?.name ?? ""
1042
+ }))), /* @__PURE__ */ import_react5.default.createElement("div", {
987
1043
  style: infoRow
988
1044
  }, /* @__PURE__ */ import_react5.default.createElement("img", {
989
1045
  src: ICON_AI_URL,
990
1046
  style: infoIcon
991
1047
  }), /* @__PURE__ */ import_react5.default.createElement("p", {
992
1048
  style: infoText
993
- }, "\u5305\u542B AI \u751F\u6210\u5185\u5BB9\uFF0C\u8BF7\u6CE8\u610F\u7504\u522B"))), /* @__PURE__ */ import_react5.default.createElement("div", {
1049
+ }, t("safety.ai.disclaimer")))), /* @__PURE__ */ import_react5.default.createElement("div", {
994
1050
  style: btnRow
995
1051
  }, /* @__PURE__ */ import_react5.default.createElement(HoverButton, {
996
1052
  style: btnBase,
@@ -1001,11 +1057,11 @@ var Safety = /* @__PURE__ */ __name(() => {
1001
1057
  setVisible(false);
1002
1058
  window.localStorage?.setItem(HasClosedKey, "true");
1003
1059
  }, "onClick")
1004
- }, "\u4E0D\u518D\u5C55\u793A"), /* @__PURE__ */ import_react5.default.createElement(HoverButton, {
1060
+ }, t("safety.button.dontShowAgain")), /* @__PURE__ */ import_react5.default.createElement(HoverButton, {
1005
1061
  style: btnBase,
1006
1062
  "data-custom-element": "safety-more",
1007
1063
  onClick: /* @__PURE__ */ __name(() => window.open(LANDING_URL, "_blank"), "onClick")
1008
- }, "\u4E86\u89E3\u66F4\u591A")))))));
1064
+ }, t("safety.button.learnMore"))))))));
1009
1065
  }, "Safety");
1010
1066
  var safety_default = Safety;
1011
1067
 
@@ -1177,28 +1233,96 @@ var AppContainer_default = AppContainer;
1177
1233
  var import_react8 = __toESM(require("react"), 1);
1178
1234
  var Welcome = /* @__PURE__ */ __name(({ title = "\u9875\u9762\u5F85\u5F00\u53D1", description = "\u9875\u9762\u6682\u672A\u5F00\u53D1\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85..." }) => {
1179
1235
  return /* @__PURE__ */ import_react8.default.createElement("div", {
1180
- className: "flex flex-col items-center justify-center px-6 w-full h-[calc(100vh-64px)] text-center"
1236
+ style: {
1237
+ display: "flex",
1238
+ flexDirection: "column",
1239
+ alignItems: "center",
1240
+ justifyContent: "center",
1241
+ width: "100%",
1242
+ height: "calc(100vh - 64px)",
1243
+ padding: "0 24px",
1244
+ textAlign: "center"
1245
+ }
1181
1246
  }, /* @__PURE__ */ import_react8.default.createElement("img", {
1182
- className: "rounded-md mb-6",
1247
+ style: {
1248
+ borderRadius: 6,
1249
+ marginBottom: 24
1250
+ },
1183
1251
  width: "320",
1184
1252
  height: "200",
1185
1253
  src: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/miao/welcome.svg",
1186
1254
  alt: "Welcome"
1187
1255
  }), /* @__PURE__ */ import_react8.default.createElement("div", {
1188
- className: "text-center text-foreground text-base font-medium mb-1 leading-6"
1256
+ style: {
1257
+ fontSize: 16,
1258
+ fontWeight: 500,
1259
+ lineHeight: "24px",
1260
+ marginBottom: 4,
1261
+ color: "#1f2329"
1262
+ }
1189
1263
  }, title), /* @__PURE__ */ import_react8.default.createElement("div", {
1190
- className: "text-center text-muted-foreground text-base leading-6 line-clamp-2 sm:max-w-[480px]"
1264
+ style: {
1265
+ fontSize: 16,
1266
+ lineHeight: "24px",
1267
+ color: "#8f959e",
1268
+ maxWidth: 480
1269
+ }
1191
1270
  }, description));
1192
1271
  }, "Welcome");
1193
1272
  var Welcome_default = Welcome;
1194
1273
 
1195
- // src/route-components/ActiveLink.tsx
1274
+ // src/components/PagePlaceholder/index.tsx
1196
1275
  var import_react9 = __toESM(require("react"), 1);
1276
+ var PagePlaceholder = /* @__PURE__ */ __name(({ title = "\u9875\u9762\u5F85\u5F00\u53D1", description = "\u9875\u9762\u6682\u672A\u5F00\u53D1\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85..." }) => {
1277
+ return /* @__PURE__ */ import_react9.default.createElement("div", {
1278
+ style: {
1279
+ display: "flex",
1280
+ flexDirection: "column",
1281
+ alignItems: "center",
1282
+ justifyContent: "center",
1283
+ padding: "0 24px",
1284
+ width: "100%",
1285
+ height: "calc(100vh - 64px)",
1286
+ textAlign: "center"
1287
+ }
1288
+ }, /* @__PURE__ */ import_react9.default.createElement("img", {
1289
+ style: {
1290
+ borderRadius: "6px",
1291
+ marginBottom: "24px"
1292
+ },
1293
+ width: "320",
1294
+ height: "200",
1295
+ src: "https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/miao/welcome.svg",
1296
+ alt: "Welcome"
1297
+ }), /* @__PURE__ */ import_react9.default.createElement("div", {
1298
+ style: {
1299
+ fontSize: "16px",
1300
+ fontWeight: 500,
1301
+ marginBottom: "4px",
1302
+ lineHeight: "24px"
1303
+ }
1304
+ }, title), /* @__PURE__ */ import_react9.default.createElement("div", {
1305
+ style: {
1306
+ color: "#6b7280",
1307
+ fontSize: "16px",
1308
+ lineHeight: "24px",
1309
+ maxWidth: "480px",
1310
+ overflow: "hidden",
1311
+ display: "-webkit-box",
1312
+ WebkitLineClamp: 2,
1313
+ WebkitBoxOrient: "vertical"
1314
+ }
1315
+ }, description));
1316
+ }, "PagePlaceholder");
1317
+ var PagePlaceholder_default = PagePlaceholder;
1318
+
1319
+ // src/route-components/ActiveLink.tsx
1320
+ var import_react10 = __toESM(require("react"), 1);
1197
1321
  var import_react_router_dom = require("react-router-dom");
1198
- var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, className, style, children, ...rest }, ref) => {
1199
- const [currentHash, setCurrentHash] = (0, import_react9.useState)(() => typeof window !== "undefined" ? window.location.hash : "");
1322
+ var ActiveLink = /* @__PURE__ */ (0, import_react10.forwardRef)(({ to, onClick, className, style, children, ...rest }, ref) => {
1323
+ const [currentHash, setCurrentHash] = (0, import_react10.useState)(() => typeof window !== "undefined" ? window.location.hash : "");
1200
1324
  const isHashRoute = typeof to === "string" && to.startsWith("#");
1201
- (0, import_react9.useEffect)(() => {
1325
+ (0, import_react10.useEffect)(() => {
1202
1326
  if (!isHashRoute) return;
1203
1327
  const handleHashChange = /* @__PURE__ */ __name(() => {
1204
1328
  setCurrentHash(window.location.hash);
@@ -1210,7 +1334,7 @@ var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, c
1210
1334
  ]);
1211
1335
  const isActive = isHashRoute && currentHash === to;
1212
1336
  if (!isHashRoute) {
1213
- return /* @__PURE__ */ import_react9.default.createElement(import_react_router_dom.NavLink, {
1337
+ return /* @__PURE__ */ import_react10.default.createElement(import_react_router_dom.NavLink, {
1214
1338
  ref,
1215
1339
  to,
1216
1340
  onClick,
@@ -1251,7 +1375,7 @@ var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, c
1251
1375
  isPending: false,
1252
1376
  isTransitioning: false
1253
1377
  }) : children;
1254
- return /* @__PURE__ */ import_react9.default.createElement("a", {
1378
+ return /* @__PURE__ */ import_react10.default.createElement("a", {
1255
1379
  ref,
1256
1380
  href: to,
1257
1381
  onClick: handleHashClick,
@@ -1263,9 +1387,9 @@ var ActiveLink = /* @__PURE__ */ (0, import_react9.forwardRef)(({ to, onClick, c
1263
1387
  ActiveLink.displayName = "ActiveLink";
1264
1388
 
1265
1389
  // src/route-components/NavLink.tsx
1266
- var React7 = __toESM(require("react"), 1);
1390
+ var React8 = __toESM(require("react"), 1);
1267
1391
  var import_react_router_dom2 = require("react-router-dom");
1268
- var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, style, ...props }, ref) => {
1392
+ var NavLink2 = /* @__PURE__ */ React8.forwardRef(({ to, children, className, style, ...props }, ref) => {
1269
1393
  const isHashLink = typeof to === "string" && to.startsWith("#");
1270
1394
  const location = (0, import_react_router_dom2.useLocation)();
1271
1395
  const navigate = (0, import_react_router_dom2.useNavigate)();
@@ -1289,7 +1413,7 @@ var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, sty
1289
1413
  const resolvedClassName = typeof className === "function" ? className(renderProps) : className;
1290
1414
  const resolvedStyle = typeof style === "function" ? style(renderProps) : style;
1291
1415
  const { caseSensitive, end, replace, state, preventScrollReset, relative, viewTransition, ...restProps } = props;
1292
- return /* @__PURE__ */ React7.createElement("a", {
1416
+ return /* @__PURE__ */ React8.createElement("a", {
1293
1417
  href: to,
1294
1418
  onClick: handleClick,
1295
1419
  ref,
@@ -1298,7 +1422,7 @@ var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, sty
1298
1422
  ...restProps
1299
1423
  }, typeof children === "function" ? children(renderProps) : children);
1300
1424
  }
1301
- return /* @__PURE__ */ React7.createElement(import_react_router_dom2.NavLink, {
1425
+ return /* @__PURE__ */ React8.createElement(import_react_router_dom2.NavLink, {
1302
1426
  to,
1303
1427
  ref,
1304
1428
  className,
@@ -1313,7 +1437,7 @@ var NavLink2 = /* @__PURE__ */ React7.forwardRef(({ to, children, className, sty
1313
1437
  NavLink2.displayName = "NavLink";
1314
1438
 
1315
1439
  // src/route-components/UniversalLink.tsx
1316
- var import_react10 = __toESM(require("react"), 1);
1440
+ var import_react11 = __toESM(require("react"), 1);
1317
1441
  var import_react_router_dom3 = require("react-router-dom");
1318
1442
  function isInternalRoute(to) {
1319
1443
  return !to.startsWith("#") && !to.startsWith("http://") && !to.startsWith("https://") && !to.startsWith("//");
@@ -1323,15 +1447,15 @@ function isExternalLink(to) {
1323
1447
  return to.startsWith("http://") || to.startsWith("https://") || to.startsWith("//");
1324
1448
  }
1325
1449
  __name(isExternalLink, "isExternalLink");
1326
- var UniversalLink = /* @__PURE__ */ import_react10.default.forwardRef(/* @__PURE__ */ __name(function UniversalLink2({ to, ...props }, ref) {
1450
+ var UniversalLink = /* @__PURE__ */ import_react11.default.forwardRef(/* @__PURE__ */ __name(function UniversalLink2({ to, ...props }, ref) {
1327
1451
  if (isInternalRoute(to)) {
1328
- return /* @__PURE__ */ import_react10.default.createElement(import_react_router_dom3.Link, {
1452
+ return /* @__PURE__ */ import_react11.default.createElement(import_react_router_dom3.Link, {
1329
1453
  to,
1330
1454
  ref,
1331
1455
  ...props
1332
1456
  });
1333
1457
  }
1334
- return /* @__PURE__ */ import_react10.default.createElement("a", {
1458
+ return /* @__PURE__ */ import_react11.default.createElement("a", {
1335
1459
  href: to,
1336
1460
  ref,
1337
1461
  ...props,
@@ -1756,6 +1880,7 @@ var abstractArt3dRenderingCoverImg6 = "https://lf3-static.bytednsdoc.com/obj/ede
1756
1880
  ActiveLink,
1757
1881
  AppContainer,
1758
1882
  NavLink,
1883
+ PagePlaceholder,
1759
1884
  QueryProvider,
1760
1885
  TrackKey,
1761
1886
  UniversalLink,