dsh-life-pack 0.3.62 → 0.3.64

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/client.js CHANGED
@@ -471,7 +471,7 @@ window.__ModuleLoader__.load({
471
471
  path: "/api/ilife-manager"
472
472
  };
473
473
  //#endregion
474
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/config.js
474
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/config.js
475
475
  const DEFAULT_PANEL_POLL_MS = 1e3;
476
476
  function assertPrefix(value, role) {
477
477
  if (typeof value !== "string" || value.length === 0) throw new Error("[dsh-plugin-update] " + role + " 非法:须为非空字符串(收到 " + JSON.stringify(value) + ")");
@@ -492,7 +492,7 @@ window.__ModuleLoader__.load({
492
492
  return buildPhoneNames(prefix).logAppend;
493
493
  }
494
494
  //#endregion
495
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/redaction.js
495
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/redaction.js
496
496
  const COPY_BUDGET_CHARS = 1500;
497
497
  const REDACTED_PATH = "<路径>";
498
498
  const REDACTED_SECRET = "<脱敏>";
@@ -556,7 +556,7 @@ window.__ModuleLoader__.load({
556
556
  return truncateForCopy(scrubWithoutBudget(flat));
557
557
  }
558
558
  //#endregion
559
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/service.js
559
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/service.js
560
560
  function updateError(code) {
561
561
  return Object.assign(new Error(code), { code });
562
562
  }
@@ -643,7 +643,7 @@ window.__ModuleLoader__.load({
643
643
  return 0;
644
644
  }
645
645
  //#endregion
646
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/lang.js
646
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/lang.js
647
647
  function normalizeLangTag(tag) {
648
648
  if (typeof tag !== "string") return "zh";
649
649
  const s = tag.trim().toLowerCase().replace(/_/g, "-");
@@ -785,7 +785,7 @@ window.__ModuleLoader__.load({
785
785
  };
786
786
  }
787
787
  //#endregion
788
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/bilingual.js
788
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/bilingual.js
789
789
  const BILINGUAL_STRINGS = {
790
790
  "entry.label.idle": {
791
791
  en: "Check for updates",
@@ -942,6 +942,16 @@ window.__ModuleLoader__.load({
942
942
  zh: "重新执行安装;若持续,请按第 6 节排错",
943
943
  draft: true
944
944
  },
945
+ "panel.blocked.dev-source.title": {
946
+ en: "Dev-mode source link, update center unavailable",
947
+ zh: "开发态挂载(源码链接),更新中心不可用",
948
+ draft: true
949
+ },
950
+ "panel.blocked.dev-source.action": {
951
+ en: "Edit the repo and restart the host to take effect; the update center only serves version installs, no manual command is provided here.",
952
+ zh: "改完仓库代码后重启宿主生效;更新中心只服务按版本安装,此场景不提供手工命令",
953
+ draft: true
954
+ },
945
955
  "panel.failure.check-failed.title": {
946
956
  en: "Couldn’t check for updates (network, source, or rate limit)",
947
957
  zh: "版本信息查询失败(网络 / 数据源 / 限流)",
@@ -2397,6 +2407,11 @@ window.__ModuleLoader__.load({
2397
2407
  zh: "上次安装异常中断,存在未完成任务",
2398
2408
  draft: true
2399
2409
  },
2410
+ "diag.fallback.dev-source": {
2411
+ en: "Dev-mode source link; update center unavailable",
2412
+ zh: "开发态源码链接,更新中心不可用",
2413
+ draft: true
2414
+ },
2400
2415
  "install-button.action.installed": {
2401
2416
  en: "Installed",
2402
2417
  zh: "已安装",
@@ -2432,7 +2447,7 @@ window.__ModuleLoader__.load({
2432
2447
  }
2433
2448
  const BILINGUAL_CSS = [".dsh-upd-bi{display:inline;overflow-wrap:anywhere}", ".dsh-upd-bi [lang]{overflow-wrap:anywhere}"].join("\n");
2434
2449
  //#endregion
2435
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/changelog.js
2450
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/changelog.js
2436
2451
  const CHANGELOG_MAX_CHARS = 65536;
2437
2452
  const CHANGELOG_ALL_CATEGORIES = [
2438
2453
  "Added",
@@ -3540,7 +3555,7 @@ ${note}${blocks.join("\n")}
3540
3555
  }
3541
3556
  }
3542
3557
  //#endregion
3543
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/log-events.js
3558
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/log-events.js
3544
3559
  const LOG_EVENT_CALL = "host.call";
3545
3560
  const LOG_EVENT_CALL_FAIL = "host.call.fail";
3546
3561
  const LOG_EVENT_INSTALL_EXEC = "update.install.exec";
@@ -3791,7 +3806,7 @@ ${note}${blocks.join("\n")}
3791
3806
  };
3792
3807
  }
3793
3808
  //#endregion
3794
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/codes.js
3809
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/codes.js
3795
3810
  const BLOCKED_REASONS = [
3796
3811
  "unknown-profile",
3797
3812
  "channel-mismatch",
@@ -3801,7 +3816,8 @@ ${note}${blocks.join("\n")}
3801
3816
  "pending-restart",
3802
3817
  "registry-conflict",
3803
3818
  "incompatible-node",
3804
- "recovery-required"
3819
+ "recovery-required",
3820
+ "dev-source"
3805
3821
  ];
3806
3822
  const PHONE_FAILURE_CODES = [
3807
3823
  "check-failed",
@@ -3825,7 +3841,7 @@ ${note}${blocks.join("\n")}
3825
3841
  return typeof code === "string" && isOneOf(CHECK_SIDE_FAILURE_CODES, code.trim());
3826
3842
  }
3827
3843
  //#endregion
3828
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/panel.js
3844
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/panel.js
3829
3845
  function normalizePanelTheme(value) {
3830
3846
  return value === "archive" ? "archive" : "default";
3831
3847
  }
@@ -3972,6 +3988,10 @@ ${note}${blocks.join("\n")}
3972
3988
  "recovery-required": {
3973
3989
  title: "panel.blocked.recovery-required.title",
3974
3990
  action: "panel.blocked.recovery-required.action"
3991
+ },
3992
+ "dev-source": {
3993
+ title: "panel.blocked.dev-source.title",
3994
+ action: "panel.blocked.dev-source.action"
3975
3995
  }
3976
3996
  };
3977
3997
  function blockedCopy(reason, lang) {
@@ -4918,7 +4938,8 @@ ${note}${blocks.join("\n")}
4918
4938
  if (view.showManual && manual) actions.push(`<button type="button" data-action="copy-manual" title="${escapeHtml$3(copyText("panel.action.copy-manual-title", l))}">${escapeHtml$3(copyText("panel.action.copy-manual", l))}</button>`);
4919
4939
  if (b.kind === "restart") actions.push(`<button type="button" data-action="restart-hint" title="${escapeHtml$3(copyText("panel.action.restart-host-title", l))}">${escapeHtml$3(copyText("panel.action.restart-host", l))}</button>`);
4920
4940
  if (b.kind === "failed") actions.push(`<button type="button" data-action="dismiss-failure" title="${escapeHtml$3(copyText("panel.action.dismiss-title", l))}">${escapeHtml$3(copyText("panel.action.dismiss", l))}</button>`);
4921
- if (snapshot) actions.push(`<button type="button" data-action="copy-diag" title="${escapeHtml$3(copyText("panel.action.copy-diag-title", l))}">${escapeHtml$3(copyText("panel.action.copy-diag", l))}</button>`);
4941
+ const failureRef = input.failure;
4942
+ if (snapshot || b.kind === "failed" || !!failureRef) actions.push(`<button type="button" data-action="copy-diag" title="${escapeHtml$3(copyText("panel.action.copy-diag-title", l))}">${escapeHtml$3(copyText("panel.action.copy-diag", l))}</button>`);
4922
4943
  actions.push("</div>");
4923
4944
  }
4924
4945
  actions.push(progressBar(snapshot, l));
@@ -5060,7 +5081,7 @@ ${UPDATE_PANEL_ARCHIVE_CSS}` : UPDATE_PANEL_CSS}</style>
5060
5081
  ${body}`;
5061
5082
  }
5062
5083
  //#endregion
5063
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/entry.js
5084
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/entry.js
5064
5085
  const UPDATE_ENTRY_CSS = [
5065
5086
  ".dsh-upd-entry{display:inline-flex;align-items:center;gap:8px;font:13px/1.6 var(--dsh-update-font-sans,system-ui,\"Microsoft YaHei\",sans-serif);font-size:var(--dsh-update-entry-font-size,13px);color:var(--dsh-update-text,#1f2937)}",
5066
5087
  ".dsh-upd-entry-btn{font:inherit;border:1px solid var(--dsh-update-border,#d1d5db);border-radius:var(--dsh-update-entry-border-radius,6px);",
@@ -5174,7 +5195,7 @@ ${body}`;
5174
5195
  }
5175
5196
  }
5176
5197
  //#endregion
5177
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/panel-batch.js
5198
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/panel-batch.js
5178
5199
  const BATCH_PANEL_POLL = {
5179
5200
  defaultMs: 1500,
5180
5201
  minMs: 250
@@ -6700,7 +6721,7 @@ ${body}`;
6700
6721
  };
6701
6722
  }
6702
6723
  //#endregion
6703
- //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.2/node_modules/dsh-plugin-update/dist/entry-batch.js
6724
+ //#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.3/node_modules/dsh-plugin-update/dist/entry-batch.js
6704
6725
  function isObject$1(value) {
6705
6726
  return !!value && typeof value === "object" && !Array.isArray(value);
6706
6727
  }
@@ -10530,7 +10551,7 @@ ${body}`;
10530
10551
  button.unmount();
10531
10552
  };
10532
10553
  }, [callReady, props.tab]);
10533
- return react.createElement("span", {
10554
+ return react.createElement("div", {
10534
10555
  ref: slotRef,
10535
10556
  style: S.installSlot,
10536
10557
  "data-ilife-install": "slot"
@@ -10547,7 +10568,7 @@ ${body}`;
10547
10568
  * 只有当③的精确命令取到了(`data-manual="ready"`)才藏它——取不到时它仍是兜底。 */
10548
10569
  const ABSENT_TOAST_MS = 1500;
10549
10570
  function absentStepsCss() {
10550
- return "[data-ilife-absent=\"panel\"]>.ilife-step{display:block;position:relative;padding:10px 4px 10px 40px;border-bottom:1px solid rgba(255,255,255,.07)}[data-ilife-absent=\"panel\"]>.ilife-step:last-child{border-bottom:0}[data-ilife-absent=\"panel\"]>.ilife-step::before{content:attr(data-step);position:absolute;left:4px;top:10px;width:24px;height:24px;border-radius:50%;background:#2b2b2b;color:#9a9a9a;font-size:12px;display:flex;align-items:center;justify-content:center;font-weight:700}[data-ilife-absent=\"panel\"]>.ilife-step[data-step=\"1\"]::before{background:#e5534b;color:#fff}[data-ilife-absent=\"panel\"]>.ilife-step[data-step=\"2\"]::before{background:#f2a65a;color:#1a1206}[data-ilife-absent=\"panel\"] .ilife-step-t{display:block;color:#fff;font-weight:700;font-size:14px;margin-bottom:2px}[data-ilife-absent=\"panel\"] .ilife-tray{background:rgba(242,166,90,.14);border-radius:8px;padding:10px 12px}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]{background:#f2a65a;color:#1a1206;border:0;border-radius:8px;padding:9px 24px;font-size:14px;font-weight:700;cursor:pointer;transition:background .15s,color .15s,transform .06s,box-shadow .15s}[data-ilife-absent=\"panel\"][data-manual=\"ready\"] .dsh-upd-ib-manual{display:none}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:hover{background:#cf6f1f;color:#fff;transform:translateY(-1px);box-shadow:0 4px 14px rgba(207,111,31,.45)}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:active{transform:translateY(1px);box-shadow:none;background:#a8561a;color:#fff}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:disabled{opacity:.55;cursor:default;transform:none;box-shadow:none}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:focus-visible{outline:2px solid #f2a65a;outline-offset:2px}[data-ilife-absent=\"panel\"] .ilife-cmdrow{display:flex;gap:8px;align-items:stretch;margin-top:8px}[data-ilife-absent=\"panel\"] .ilife-cmdrow>code{flex:1;padding:8px 10px;border-radius:8px;background:rgba(128,128,128,.12);color:#57b883;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;user-select:all;white-space:pre-wrap;overflow-wrap:anywhere}[data-ilife-absent=\"panel\"] .ilife-cmdrow>code.plain{color:#e8e8e8}[data-ilife-absent=\"panel\"] .ilife-copycmd{flex:0 0 auto;align-self:center;background:#2b2b2b;color:#e8e8e8;border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:6px 14px;font-size:12.5px;cursor:pointer;transition:background .15s,border-color .15s,color .15s,transform .06s,box-shadow .15s}[data-ilife-absent=\"panel\"] .ilife-copycmd:hover{border-color:#f2a65a;color:#f2a65a;background:#353535;transform:translateY(-1px);box-shadow:0 2px 8px rgba(242,166,90,.25)}[data-ilife-absent=\"panel\"] .ilife-copycmd:active{transform:translateY(1px);box-shadow:none;background:#242424}[data-ilife-absent=\"panel\"] .ilife-copycmd:focus-visible{outline:2px solid #f2a65a;outline-offset:2px}[data-ilife-absent=\"toast\"]{position:fixed;left:50%;bottom:48px;transform:translateX(-50%) translateY(" + String(8) + "px);background:#1f1f1f;color:#fff;border:1px solid rgba(87,184,131,.6);border-radius:999px;padding:6px 18px;font-size:13px;z-index:99;animation:absentToastIn " + String(180 / 1e3) + "s ease}@keyframes absentToastIn{from{opacity:0;transform:translateX(-50%) translateY(" + String(8) + "px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}";
10571
+ return "[data-ilife-absent=\"panel\"]>.ilife-step{display:block;position:relative;padding:10px 4px 10px 40px;border-bottom:1px solid rgba(255,255,255,.07)}[data-ilife-absent=\"panel\"]>.ilife-step:last-child{border-bottom:0}[data-ilife-absent=\"panel\"]>.ilife-step::before{content:attr(data-step);position:absolute;left:4px;top:10px;width:24px;height:24px;border-radius:50%;background:#2b2b2b;color:#9a9a9a;font-size:12px;display:flex;align-items:center;justify-content:center;font-weight:700}[data-ilife-absent=\"panel\"]>.ilife-step[data-step=\"1\"]::before{background:#e5534b;color:#fff}[data-ilife-absent=\"panel\"]>.ilife-step[data-step=\"2\"]::before{background:#f2a65a;color:#1a1206}[data-ilife-absent=\"panel\"] .ilife-step-t{display:block;color:#fff;font-weight:700;font-size:14px;margin-bottom:2px}[data-ilife-absent=\"panel\"] .ilife-tray{display:block;background:rgba(242,166,90,.14);border-radius:8px;padding:10px 12px}[data-ilife-absent=\"panel\"] .ilife-tray:empty,[data-ilife-absent=\"panel\"] .ilife-tray:has([data-ilife-install=\"slot\"]:empty){display:none}[data-ilife-absent=\"panel\"] [data-ilife-install=\"slot\"]:empty{display:none}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]{background:#f2a65a;color:#1a1206;border:0;border-radius:8px;padding:9px 24px;font-size:14px;font-weight:700;cursor:pointer;transition:background .15s,color .15s,transform .06s,box-shadow .15s}[data-ilife-absent=\"panel\"][data-manual=\"ready\"] .dsh-upd-ib-manual{display:none}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:hover{background:#cf6f1f;color:#fff;transform:translateY(-1px);box-shadow:0 4px 14px rgba(207,111,31,.45)}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:active{transform:translateY(1px);box-shadow:none;background:#a8561a;color:#fff}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:disabled{opacity:.55;cursor:default;transform:none;box-shadow:none}[data-ilife-absent=\"panel\"] .dsh-upd-ib button[data-primary=\"1\"]:focus-visible{outline:2px solid #f2a65a;outline-offset:2px}[data-ilife-absent=\"panel\"] .ilife-cmdrow{display:flex;gap:8px;align-items:stretch;margin-top:8px}[data-ilife-absent=\"panel\"] .ilife-cmdrow>code{flex:1;padding:8px 10px;border-radius:8px;background:rgba(128,128,128,.12);color:#57b883;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;user-select:all;white-space:pre-wrap;overflow-wrap:anywhere}[data-ilife-absent=\"panel\"] .ilife-cmdrow>code.plain{color:#e8e8e8}[data-ilife-absent=\"panel\"] .ilife-copycmd{flex:0 0 auto;align-self:center;background:#2b2b2b;color:#e8e8e8;border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:6px 14px;font-size:12.5px;cursor:pointer;transition:background .15s,border-color .15s,color .15s,transform .06s,box-shadow .15s}[data-ilife-absent=\"panel\"] .ilife-copycmd:hover{border-color:#f2a65a;color:#f2a65a;background:#353535;transform:translateY(-1px);box-shadow:0 2px 8px rgba(242,166,90,.25)}[data-ilife-absent=\"panel\"] .ilife-copycmd:active{transform:translateY(1px);box-shadow:none;background:#242424}[data-ilife-absent=\"panel\"] .ilife-copycmd:focus-visible{outline:2px solid #f2a65a;outline-offset:2px}[data-ilife-absent=\"toast\"]{position:fixed;left:50%;bottom:48px;transform:translateX(-50%) translateY(" + String(8) + "px);background:#1f1f1f;color:#fff;border:1px solid rgba(87,184,131,.6);border-radius:999px;padding:6px 18px;font-size:13px;z-index:99;animation:absentToastIn " + String(180 / 1e3) + "s ease}@keyframes absentToastIn{from{opacity:0;transform:translateX(-50%) translateY(" + String(8) + "px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}";
10551
10572
  }
10552
10573
  /** 命令行文本进剪贴板:先走 Clipboard API,摸不到(老宿主/非安全上下文)就地降级为隐藏 textarea。
10553
10574
  * 文案保持「复制」二字不动(用户口径):成功只弹 Toast,不改按钮字。 */
@@ -10621,19 +10642,19 @@ ${body}`;
10621
10642
  style: S.reco,
10622
10643
  "data-ilife-absent": "panel",
10623
10644
  "data-manual": manual !== null ? "ready" : "pending"
10624
- }, react.createElement("style", { "data-ilife-absent": "steps-css" }, absentStepsCss()), react.createElement("span", {
10645
+ }, react.createElement("style", { "data-ilife-absent": "steps-css" }, absentStepsCss()), react.createElement("div", {
10625
10646
  className: "ilife-step",
10626
10647
  "data-step": "1"
10627
- }, react.createElement("span", { className: "ilife-step-t" }, props.tab.plugin + " 未安装"), "请补装后使用。"), react.createElement("span", {
10648
+ }, react.createElement("span", { className: "ilife-step-t" }, props.tab.plugin + " 未安装"), "请补装后使用。"), react.createElement("div", {
10628
10649
  className: "ilife-step",
10629
10650
  "data-step": "2"
10630
- }, react.createElement("span", { className: "ilife-step-t" }, "一键安装"), react.createElement("span", { className: "ilife-tray" }, react.createElement(TabInstallSlot, {
10651
+ }, react.createElement("span", { className: "ilife-step-t" }, "一键安装"), react.createElement("div", { className: "ilife-tray" }, react.createElement(TabInstallSlot, {
10631
10652
  tab: props.tab,
10632
10653
  getCall: props.getCall,
10633
10654
  onManual: (text) => {
10634
10655
  setManual(text);
10635
10656
  }
10636
- }))), react.createElement("span", {
10657
+ }))), react.createElement("div", {
10637
10658
  className: "ilife-step",
10638
10659
  "data-step": "3"
10639
10660
  }, react.createElement("span", { className: "ilife-step-t" }, "备选:手动安装"), cmdRows.map((row) => react.createElement("span", {
@@ -10659,7 +10680,7 @@ ${body}`;
10659
10680
  }, react.createElement("span", { style: S.morePkg }, row.pkg), react.createElement("span", { style: S.moreDesc }, row.desc), react.createElement("span", { style: S.moreIcon }, react.createElement(ExternalIcon, null)))));
10660
10681
  }
10661
10682
  /** 版本胶囊那一行字:只在这里拼一次,屏上与用例读的是同一串。 */
10662
- const MANAGER_VERSION_TEXT = "dsh-life-pack · 0.3.62";
10683
+ const MANAGER_VERSION_TEXT = "dsh-life-pack · 0.3.64";
10663
10684
  /** 右下角那本书离面板两沿的距离:用户口径「一直处于面板右下角、不随列表滑动消失」
10664
10685
  * ⇒ sticky 吸附(面板相对,视口多大都落在面板角上);INSET=右沿,BOTTOM=底沿。 */
10665
10686
  const MANUAL_ENTRY_INSET = 16;