dsh-life-pack 0.3.59 → 0.3.61
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 +145 -112
- package/dist/client.js.map +1 -1
- package/package.json +2 -2
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.
|
|
474
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/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.
|
|
495
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/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.
|
|
559
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/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.
|
|
646
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/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.
|
|
788
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/bilingual.js
|
|
789
789
|
const BILINGUAL_STRINGS = {
|
|
790
790
|
"entry.label.idle": {
|
|
791
791
|
en: "Check for updates",
|
|
@@ -2432,7 +2432,7 @@ window.__ModuleLoader__.load({
|
|
|
2432
2432
|
}
|
|
2433
2433
|
const BILINGUAL_CSS = [".dsh-upd-bi{display:inline;overflow-wrap:anywhere}", ".dsh-upd-bi [lang]{overflow-wrap:anywhere}"].join("\n");
|
|
2434
2434
|
//#endregion
|
|
2435
|
-
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.
|
|
2435
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/changelog.js
|
|
2436
2436
|
const CHANGELOG_MAX_CHARS = 65536;
|
|
2437
2437
|
const CHANGELOG_ALL_CATEGORIES = [
|
|
2438
2438
|
"Added",
|
|
@@ -3540,7 +3540,7 @@ ${note}${blocks.join("\n")}
|
|
|
3540
3540
|
}
|
|
3541
3541
|
}
|
|
3542
3542
|
//#endregion
|
|
3543
|
-
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.
|
|
3543
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/log-events.js
|
|
3544
3544
|
const LOG_EVENT_CALL = "host.call";
|
|
3545
3545
|
const LOG_EVENT_CALL_FAIL = "host.call.fail";
|
|
3546
3546
|
const LOG_EVENT_INSTALL_EXEC = "update.install.exec";
|
|
@@ -3791,7 +3791,7 @@ ${note}${blocks.join("\n")}
|
|
|
3791
3791
|
};
|
|
3792
3792
|
}
|
|
3793
3793
|
//#endregion
|
|
3794
|
-
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.
|
|
3794
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/codes.js
|
|
3795
3795
|
const BLOCKED_REASONS = [
|
|
3796
3796
|
"unknown-profile",
|
|
3797
3797
|
"channel-mismatch",
|
|
@@ -3825,7 +3825,7 @@ ${note}${blocks.join("\n")}
|
|
|
3825
3825
|
return typeof code === "string" && isOneOf(CHECK_SIDE_FAILURE_CODES, code.trim());
|
|
3826
3826
|
}
|
|
3827
3827
|
//#endregion
|
|
3828
|
-
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.
|
|
3828
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/panel.js
|
|
3829
3829
|
function normalizePanelTheme(value) {
|
|
3830
3830
|
return value === "archive" ? "archive" : "default";
|
|
3831
3831
|
}
|
|
@@ -4048,6 +4048,29 @@ ${note}${blocks.join("\n")}
|
|
|
4048
4048
|
if (typeof fallback === "string" && fallback.trim()) return fallback.trim();
|
|
4049
4049
|
return INTERNAL_CODE;
|
|
4050
4050
|
}
|
|
4051
|
+
function replyIsCheckExpired(reply) {
|
|
4052
|
+
if (!reply || typeof reply !== "object") return false;
|
|
4053
|
+
const kind = reply["errorKind"];
|
|
4054
|
+
if (typeof kind === "string" && kind.trim() === "check-expired") return true;
|
|
4055
|
+
const err = reply["error"];
|
|
4056
|
+
return typeof err === "string" && err.trim() === "check-expired";
|
|
4057
|
+
}
|
|
4058
|
+
function thrownIsCheckExpired(err) {
|
|
4059
|
+
if (typeof err === "string") return err.trim() === "check-expired";
|
|
4060
|
+
if (err instanceof Error) {
|
|
4061
|
+
if (err.message.trim() === "check-expired") return true;
|
|
4062
|
+
const code = err.code;
|
|
4063
|
+
return typeof code === "string" && code.trim() === "check-expired";
|
|
4064
|
+
}
|
|
4065
|
+
if (err && typeof err === "object" && !Array.isArray(err)) {
|
|
4066
|
+
const rec = err;
|
|
4067
|
+
const e = typeof rec["error"] === "string" ? rec["error"].trim() : "";
|
|
4068
|
+
const k = typeof rec["errorKind"] === "string" ? rec["errorKind"].trim() : "";
|
|
4069
|
+
const c = typeof rec["code"] === "string" ? rec["code"].trim() : "";
|
|
4070
|
+
return e === "check-expired" || k === "check-expired" || c === "check-expired";
|
|
4071
|
+
}
|
|
4072
|
+
return false;
|
|
4073
|
+
}
|
|
4051
4074
|
function redactForCopy(text) {
|
|
4052
4075
|
return sanitizeForCopy(text);
|
|
4053
4076
|
}
|
|
@@ -5037,7 +5060,7 @@ ${UPDATE_PANEL_ARCHIVE_CSS}` : UPDATE_PANEL_CSS}</style>
|
|
|
5037
5060
|
${body}`;
|
|
5038
5061
|
}
|
|
5039
5062
|
//#endregion
|
|
5040
|
-
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.
|
|
5063
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/entry.js
|
|
5041
5064
|
const UPDATE_ENTRY_CSS = [
|
|
5042
5065
|
".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)}",
|
|
5043
5066
|
".dsh-upd-entry-btn{font:inherit;border:1px solid var(--dsh-update-border,#d1d5db);border-radius:var(--dsh-update-entry-border-radius,6px);",
|
|
@@ -5151,7 +5174,7 @@ ${body}`;
|
|
|
5151
5174
|
}
|
|
5152
5175
|
}
|
|
5153
5176
|
//#endregion
|
|
5154
|
-
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.
|
|
5177
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/panel-batch.js
|
|
5155
5178
|
const BATCH_PANEL_POLL = {
|
|
5156
5179
|
defaultMs: 1500,
|
|
5157
5180
|
minMs: 250
|
|
@@ -6670,7 +6693,7 @@ ${body}`;
|
|
|
6670
6693
|
};
|
|
6671
6694
|
}
|
|
6672
6695
|
//#endregion
|
|
6673
|
-
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.
|
|
6696
|
+
//#region ../../node_modules/.pnpm/dsh-plugin-update@0.18.1/node_modules/dsh-plugin-update/dist/entry-batch.js
|
|
6674
6697
|
function isObject$1(value) {
|
|
6675
6698
|
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
6676
6699
|
}
|
|
@@ -7585,93 +7608,93 @@ ${body}`;
|
|
|
7585
7608
|
}
|
|
7586
7609
|
}
|
|
7587
7610
|
async function doInstall() {
|
|
7588
|
-
|
|
7589
|
-
|
|
7590
|
-
|
|
7591
|
-
|
|
7592
|
-
|
|
7611
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
7612
|
+
if (!receipt) {
|
|
7613
|
+
const prevLatch = latch;
|
|
7614
|
+
try {
|
|
7615
|
+
const checked = await call(phoneNames.updateCheck, queueArgs());
|
|
7616
|
+
if (!mounted) return;
|
|
7617
|
+
applyStatusReply(checked, "check");
|
|
7618
|
+
} catch (err) {
|
|
7619
|
+
if (!mounted) return;
|
|
7620
|
+
if (thrownBusy(err)) {
|
|
7621
|
+
await refresh();
|
|
7622
|
+
return;
|
|
7623
|
+
}
|
|
7624
|
+
const env = currentEnvPair();
|
|
7625
|
+
setLatch({
|
|
7626
|
+
code: "check-failed",
|
|
7627
|
+
kind: null,
|
|
7628
|
+
detail: thrownDetail(err),
|
|
7629
|
+
diag: null,
|
|
7630
|
+
requestId: null,
|
|
7631
|
+
checkId: null,
|
|
7632
|
+
runningVersion: snapshot?.runningVersion ?? null,
|
|
7633
|
+
installedVersion: snapshot?.installedVersion ?? null,
|
|
7634
|
+
latestVersion: snapshot?.latestVersion ?? null,
|
|
7635
|
+
targetVersion: null,
|
|
7636
|
+
hostKind: env.hostKind,
|
|
7637
|
+
profileName: env.profileName,
|
|
7638
|
+
source: "check",
|
|
7639
|
+
volatile: false,
|
|
7640
|
+
atMs: latchNow()
|
|
7641
|
+
});
|
|
7642
|
+
return;
|
|
7643
|
+
}
|
|
7644
|
+
if (!mounted) return;
|
|
7645
|
+
if (!receipt) {
|
|
7646
|
+
if (latch === prevLatch) clearLatch();
|
|
7647
|
+
return;
|
|
7648
|
+
}
|
|
7649
|
+
}
|
|
7593
7650
|
if (!mounted) return;
|
|
7594
|
-
|
|
7595
|
-
|
|
7651
|
+
requestId = randomRequestId();
|
|
7652
|
+
pollCount = 0;
|
|
7653
|
+
pollCapped = false;
|
|
7654
|
+
let reply;
|
|
7655
|
+
try {
|
|
7656
|
+
reply = await call(phoneNames.updateInstall, {
|
|
7657
|
+
checkId: receipt.checkId,
|
|
7658
|
+
requestId,
|
|
7659
|
+
...queueArgs()
|
|
7660
|
+
});
|
|
7661
|
+
} catch (err) {
|
|
7662
|
+
if (!mounted) return;
|
|
7663
|
+
if (thrownBusy(err)) {
|
|
7664
|
+
await refresh();
|
|
7665
|
+
return;
|
|
7666
|
+
}
|
|
7667
|
+
if (thrownIsCheckExpired(err) && attempt === 0) {
|
|
7668
|
+
receipt = null;
|
|
7669
|
+
continue;
|
|
7670
|
+
}
|
|
7671
|
+
const env = currentEnvPair();
|
|
7672
|
+
setLatch({
|
|
7673
|
+
code: "install-failed",
|
|
7674
|
+
kind: null,
|
|
7675
|
+
detail: thrownDetail(err),
|
|
7676
|
+
diag: null,
|
|
7677
|
+
requestId,
|
|
7678
|
+
checkId: receipt?.checkId ?? null,
|
|
7679
|
+
runningVersion: snapshot?.runningVersion ?? null,
|
|
7680
|
+
installedVersion: snapshot?.installedVersion ?? null,
|
|
7681
|
+
latestVersion: snapshot?.latestVersion ?? null,
|
|
7682
|
+
targetVersion: null,
|
|
7683
|
+
hostKind: env.hostKind,
|
|
7684
|
+
profileName: env.profileName,
|
|
7685
|
+
source: "install",
|
|
7686
|
+
volatile: false,
|
|
7687
|
+
atMs: latchNow()
|
|
7688
|
+
});
|
|
7596
7689
|
return;
|
|
7597
7690
|
}
|
|
7598
|
-
const env = currentEnvPair();
|
|
7599
|
-
setLatch({
|
|
7600
|
-
code: "check-failed",
|
|
7601
|
-
kind: null,
|
|
7602
|
-
detail: thrownDetail(err),
|
|
7603
|
-
diag: null,
|
|
7604
|
-
requestId: null,
|
|
7605
|
-
checkId: null,
|
|
7606
|
-
runningVersion: snapshot?.runningVersion ?? null,
|
|
7607
|
-
installedVersion: snapshot?.installedVersion ?? null,
|
|
7608
|
-
latestVersion: snapshot?.latestVersion ?? null,
|
|
7609
|
-
targetVersion: null,
|
|
7610
|
-
hostKind: env.hostKind,
|
|
7611
|
-
profileName: env.profileName,
|
|
7612
|
-
source: "check",
|
|
7613
|
-
volatile: false,
|
|
7614
|
-
atMs: latchNow()
|
|
7615
|
-
});
|
|
7616
|
-
return;
|
|
7617
|
-
}
|
|
7618
|
-
if (!mounted) return;
|
|
7619
|
-
if (!receipt) {
|
|
7620
|
-
const env = currentEnvPair();
|
|
7621
|
-
setLatch({
|
|
7622
|
-
code: "check-expired",
|
|
7623
|
-
kind: "check-expired",
|
|
7624
|
-
detail: null,
|
|
7625
|
-
diag: null,
|
|
7626
|
-
requestId,
|
|
7627
|
-
checkId: null,
|
|
7628
|
-
runningVersion: snapshot?.runningVersion ?? null,
|
|
7629
|
-
installedVersion: snapshot?.installedVersion ?? null,
|
|
7630
|
-
latestVersion: snapshot?.latestVersion ?? null,
|
|
7631
|
-
targetVersion: null,
|
|
7632
|
-
hostKind: env.hostKind,
|
|
7633
|
-
profileName: env.profileName,
|
|
7634
|
-
source: "install",
|
|
7635
|
-
volatile: false,
|
|
7636
|
-
atMs: latchNow()
|
|
7637
|
-
});
|
|
7638
|
-
return;
|
|
7639
|
-
}
|
|
7640
|
-
requestId = randomRequestId();
|
|
7641
|
-
pollCount = 0;
|
|
7642
|
-
pollCapped = false;
|
|
7643
|
-
try {
|
|
7644
|
-
const reply = await call(phoneNames.updateInstall, {
|
|
7645
|
-
checkId: receipt.checkId,
|
|
7646
|
-
requestId,
|
|
7647
|
-
...queueArgs()
|
|
7648
|
-
});
|
|
7649
|
-
if (!mounted) return;
|
|
7650
|
-
applyStatusReply(reply, "install");
|
|
7651
|
-
} catch (err) {
|
|
7652
7691
|
if (!mounted) return;
|
|
7653
|
-
if (
|
|
7654
|
-
|
|
7655
|
-
|
|
7692
|
+
if (replyIsCheckExpired(reply) && attempt === 0) {
|
|
7693
|
+
receipt = null;
|
|
7694
|
+
continue;
|
|
7656
7695
|
}
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
code: "install-failed",
|
|
7660
|
-
kind: null,
|
|
7661
|
-
detail: thrownDetail(err),
|
|
7662
|
-
diag: null,
|
|
7663
|
-
requestId,
|
|
7664
|
-
checkId: receipt?.checkId ?? null,
|
|
7665
|
-
runningVersion: snapshot?.runningVersion ?? null,
|
|
7666
|
-
installedVersion: snapshot?.installedVersion ?? null,
|
|
7667
|
-
latestVersion: snapshot?.latestVersion ?? null,
|
|
7668
|
-
targetVersion: null,
|
|
7669
|
-
hostKind: env.hostKind,
|
|
7670
|
-
profileName: env.profileName,
|
|
7671
|
-
source: "install",
|
|
7672
|
-
volatile: false,
|
|
7673
|
-
atMs: latchNow()
|
|
7674
|
-
});
|
|
7696
|
+
applyStatusReply(reply, "install");
|
|
7697
|
+
return;
|
|
7675
7698
|
}
|
|
7676
7699
|
}
|
|
7677
7700
|
function diagText() {
|
|
@@ -10465,32 +10488,38 @@ ${body}`;
|
|
|
10465
10488
|
*
|
|
10466
10489
|
* 上游首查回包里的 `manual`(精确手工命令)读出来交 `onManual`:带精确版本号与 registry,
|
|
10467
10490
|
* 调用方拿它画自己的命令行+复制按钮(单一定位,不复述上游 details 里的同一条)。
|
|
10468
|
-
*
|
|
10491
|
+
* 只读、不重查:每秒读一次、读到为止、最多 10 次(0.3.60 现场:固定两次读不到,首查落定比预期晚)。 */
|
|
10469
10492
|
function TabInstallSlot(props) {
|
|
10470
10493
|
const slotRef = react.useRef(null);
|
|
10471
10494
|
const callReady = props.getCall() !== null;
|
|
10472
10495
|
const onManualRef = react.useRef(props.onManual);
|
|
10473
|
-
|
|
10496
|
+
react.useEffect(() => {
|
|
10497
|
+
onManualRef.current = props.onManual;
|
|
10498
|
+
}, [props.onManual]);
|
|
10474
10499
|
react.useEffect(() => {
|
|
10475
10500
|
const mount = slotRef.current;
|
|
10476
10501
|
if (mount === null || !callReady) return;
|
|
10477
10502
|
const button = mountLifeInstallButton(mount, managerCallAdapter(props.getCall()), props.tab);
|
|
10478
10503
|
if (button === null) return;
|
|
10479
10504
|
let alive = true;
|
|
10480
|
-
|
|
10481
|
-
|
|
10482
|
-
if (
|
|
10483
|
-
|
|
10484
|
-
|
|
10485
|
-
|
|
10486
|
-
|
|
10487
|
-
|
|
10488
|
-
|
|
10489
|
-
|
|
10490
|
-
|
|
10505
|
+
let attempts = 0;
|
|
10506
|
+
const readOnce = () => {
|
|
10507
|
+
if (!alive) return;
|
|
10508
|
+
attempts += 1;
|
|
10509
|
+
try {
|
|
10510
|
+
const manual = button.state().manual;
|
|
10511
|
+
if (typeof manual === "string" && manual.length > 0) {
|
|
10512
|
+
onManualRef.current?.(manual);
|
|
10513
|
+
return;
|
|
10514
|
+
}
|
|
10515
|
+
} catch {}
|
|
10516
|
+
if (attempts < 10 && typeof setTimeout === "function") timer = setTimeout(readOnce, 1e3);
|
|
10517
|
+
};
|
|
10518
|
+
let timer = null;
|
|
10519
|
+
if (typeof setTimeout === "function") timer = setTimeout(readOnce, 800);
|
|
10491
10520
|
return () => {
|
|
10492
10521
|
alive = false;
|
|
10493
|
-
|
|
10522
|
+
if (timer !== null) clearTimeout(timer);
|
|
10494
10523
|
button.unmount();
|
|
10495
10524
|
};
|
|
10496
10525
|
}, [callReady, props.tab]);
|
|
@@ -10505,10 +10534,13 @@ ${body}`;
|
|
|
10505
10534
|
* 全收敛在 `[data-ilife-absent]` 作用域下;容器 `S.reco` 与子顺序一字不动。
|
|
10506
10535
|
* 上游主按钮换色用容器覆盖(`button[data-primary="1"]` 特异度压上游缺省;上游自带 CSS 无 hover
|
|
10507
10536
|
* 规则,见 update-dialog.ts 注释——themeTokens 对安装控件无视觉效果,故悬停也收在这里)。
|
|
10508
|
-
* 悬停取深橙+白字+投影(用户 verdict:8% 提亮看不见);颜色原型定稿 hex,见 v4 原型。
|
|
10537
|
+
* 悬停取深橙+白字+投影(用户 verdict:8% 提亮看不见);颜色原型定稿 hex,见 v4 原型。
|
|
10538
|
+
* 常态橙底(0.3.61 补上:首版只写了 hover 没写常态,线上按钮常态掉回宿主灰——原型 L33 整条)。
|
|
10539
|
+
* 上游自带折叠手工行(0.3.60 现场:②里贴着按钮又冒出一条“手工命令”):默认不动,
|
|
10540
|
+
* 只有当③的精确命令取到了(`data-manual="ready"`)才藏它——取不到时它仍是兜底。 */
|
|
10509
10541
|
const ABSENT_TOAST_MS = 1500;
|
|
10510
10542
|
function absentStepsCss() {
|
|
10511
|
-
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,.
|
|
10543
|
+
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)}}";
|
|
10512
10544
|
}
|
|
10513
10545
|
/** 命令行文本进剪贴板:先走 Clipboard API,摸不到(老宿主/非安全上下文)就地降级为隐藏 textarea。
|
|
10514
10546
|
* 文案保持「复制」二字不动(用户口径):成功只弹 Toast,不改按钮字。 */
|
|
@@ -10580,7 +10612,8 @@ ${body}`;
|
|
|
10580
10612
|
});
|
|
10581
10613
|
return react.createElement("div", {
|
|
10582
10614
|
style: S.reco,
|
|
10583
|
-
"data-ilife-absent": "panel"
|
|
10615
|
+
"data-ilife-absent": "panel",
|
|
10616
|
+
"data-manual": manual !== null ? "ready" : "pending"
|
|
10584
10617
|
}, react.createElement("style", { "data-ilife-absent": "steps-css" }, absentStepsCss()), react.createElement("span", {
|
|
10585
10618
|
className: "ilife-step",
|
|
10586
10619
|
"data-step": "1"
|
|
@@ -10619,7 +10652,7 @@ ${body}`;
|
|
|
10619
10652
|
}, 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)))));
|
|
10620
10653
|
}
|
|
10621
10654
|
/** 版本胶囊那一行字:只在这里拼一次,屏上与用例读的是同一串。 */
|
|
10622
|
-
const MANAGER_VERSION_TEXT = "dsh-life-pack · 0.3.
|
|
10655
|
+
const MANAGER_VERSION_TEXT = "dsh-life-pack · 0.3.61";
|
|
10623
10656
|
/** 右下角那本书离面板两沿的距离:用户口径「一直处于面板右下角、不随列表滑动消失」
|
|
10624
10657
|
* ⇒ sticky 吸附(面板相对,视口多大都落在面板角上);INSET=右沿,BOTTOM=底沿。 */
|
|
10625
10658
|
const MANUAL_ENTRY_INSET = 16;
|