dsh-life-pack 0.3.39 → 0.3.41
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 +3825 -2176
- package/dist/client.js.map +1 -1
- package/dist/config-panel-contract.d.ts +84 -2
- package/dist/config-panel-contract.d.ts.map +1 -1
- package/dist/config-panel-contract.js +84 -2
- package/dist/config-panel-contract.js.map +1 -1
- package/dist/config-panel-view.d.ts +11 -0
- package/dist/config-panel-view.d.ts.map +1 -1
- package/dist/config-panel-view.js +147 -16
- package/dist/config-panel-view.js.map +1 -1
- package/dist/config-panel.js +1 -1
- package/dist/config-panel.js.map +1 -1
- package/dist/directory-browser-parts.d.ts.map +1 -1
- package/dist/directory-browser-parts.js +39 -2
- package/dist/directory-browser-parts.js.map +1 -1
- package/dist/directory-browser-ui.d.ts.map +1 -1
- package/dist/directory-browser-ui.js +65 -6
- package/dist/directory-browser-ui.js.map +1 -1
- package/dist/health-fetch.d.ts +3 -3
- package/dist/health-fetch.d.ts.map +1 -1
- package/dist/health-view.d.ts.map +1 -1
- package/dist/health-view.js +8 -1
- package/dist/health-view.js.map +1 -1
- package/dist/index.d.ts +16 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -30
- package/dist/index.js.map +1 -1
- package/dist/seal-scroll.d.ts +6 -2
- package/dist/seal-scroll.d.ts.map +1 -1
- package/dist/seal-scroll.js +35 -16
- package/dist/seal-scroll.js.map +1 -1
- package/dist/seal-stamp.d.ts.map +1 -1
- package/dist/seal-stamp.js +4 -2
- package/dist/seal-stamp.js.map +1 -1
- package/dist/update-batch.d.ts +17 -0
- package/dist/update-batch.d.ts.map +1 -0
- package/dist/update-batch.js +84 -0
- package/dist/update-batch.js.map +1 -0
- package/dist/update-contract.d.ts +4 -63
- package/dist/update-contract.d.ts.map +1 -1
- package/dist/update-contract.js +9 -95
- package/dist/update-contract.js.map +1 -1
- package/dist/update-dialog.d.ts +17 -0
- package/dist/update-dialog.d.ts.map +1 -0
- package/dist/update-dialog.js +58 -0
- package/dist/update-dialog.js.map +1 -0
- package/dist/update-targets.d.ts +2 -7
- package/dist/update-targets.d.ts.map +1 -1
- package/dist/update-targets.js +5 -11
- package/dist/update-targets.js.map +1 -1
- package/package.json +2 -2
|
@@ -73,8 +73,90 @@ export declare const READ_TIMEOUT_MS: 20000;
|
|
|
73
73
|
*
|
|
74
74
|
* 有界、调用方负责卸载清理(见 `config-panel.ts` 的取数),不是无界轮询;仅读整面用,保存/重置永不自动重试。 */
|
|
75
75
|
export declare const CONFIG_READ_RETRY_MS: readonly number[];
|
|
76
|
-
/** 复制那一枚按钮就地变「已复制」之后,多久变回「复制」(定稿 v3
|
|
77
|
-
|
|
76
|
+
/** 复制那一枚按钮就地变「已复制」之后,多久变回「复制」(定稿 v3 第三条:终值 900ms,不弹提示)。
|
|
77
|
+
*
|
|
78
|
+
* #1162 差值终结:由现状 1500 切到终值 900(真相源 #1159 参数表+原型 `},900)`);老期望变红属预期,见 #1162。 */
|
|
79
|
+
export declare const COPY_FEEDBACK_MS: 900;
|
|
80
|
+
/** T1 交互 tokens(#1160,唯一定义地,真相源 #1159 参数表)。
|
|
81
|
+
*
|
|
82
|
+
* 按压 .97、焦点隔离 2px+主题色 5px、过渡 .15s——取值逐字照原型 V1
|
|
83
|
+
*(`.scratch/1155-real-panel-prototype.html`:`btn:active{transform:scale(.97)}`、
|
|
84
|
+
* `btn:focus-visible{box-shadow:0 0 0 2px #0b0b0d,0 0 0 5px var(--focus)}`、
|
|
85
|
+
* 主题橙 #f6ad55/蓝 #0a84ff/绿 #30d158、过渡 background/transform/box-shadow/border-color 各 .15s)。
|
|
86
|
+
*
|
|
87
|
+
* 颜色全走主题变量、永不写死蓝:隔离环取卡面底(深浅自适应),焦点环取
|
|
88
|
+
* `--ilife-focus`(缺席时退到宿主品牌色,宿主品牌色本身跟主题走)。
|
|
89
|
+
* 悬停/长按/折叠/复制变勾/提示/液态归后票,本件只定按压与焦点四格。 */
|
|
90
|
+
export declare const PRESS_SCALE: 0.97;
|
|
91
|
+
export declare const FOCUS_RING_GAP_PX: 2;
|
|
92
|
+
export declare const FOCUS_RING_WIDTH_PX: 5;
|
|
93
|
+
export declare const INTERACTION_TRANSITION: "background .15s ease,transform .15s ease,box-shadow .15s ease,border-color .15s ease";
|
|
94
|
+
/** T2 指针与按住 tokens(#1161,唯一定义地,真相源 #1159 参数表+原型 V1)。
|
|
95
|
+
*
|
|
96
|
+
* 悬停:聚光半径 120、淡洗 13%、辉光内圈 55%+外发光 25%、上浮 1px——逐字照原型 V1
|
|
97
|
+
*(`.scratch/1155-real-panel-prototype.html`:`.btn:hover{background:color-mix(…13%…);…box-shadow:0 0 0 1px …55%…,0 4px 16px …25%…;transform:translateY(-1px)}`、
|
|
98
|
+
* `::before{background:radial-gradient(120px circle at var(--mx) var(--my),…22%…,transparent 65%)}`)。
|
|
99
|
+
* 页签 12%/高级行 10%不归本票(页签见 #1165,高级见 #1162),这里只定按钮 13% 一档。
|
|
100
|
+
*
|
|
101
|
+
* 禁用:摇头 ±2px/.3s、禁止指针、不透明度 .4——照原型(`shakeV1`+`.btn:disabled{cursor:not-allowed;opacity:.4}`)。
|
|
102
|
+
*
|
|
103
|
+
* 长按:500ms 纯视觉环(底边 3px 主题色条,`:active` 驱动 0→100%,永不触发动作、不进状态机分支)+
|
|
104
|
+
* 回弹(沿用 T1 按压释放 .15s 回弹,不另起回弹曲线)。原型环色 `#30d158` 在生产侧换成主题变量。
|
|
105
|
+
*
|
|
106
|
+
* 颜色全走主题变量、永不写死蓝:悬停/辉光/聚光/环一律取 `--ilife-focus` 退品牌色。
|
|
107
|
+
* 触屏降级与减少动态无静态常量(媒体查询即定义,见视图 `interactionCss`)。 */
|
|
108
|
+
export declare const HOVER_SPOTLIGHT_RADIUS_PX: 120;
|
|
109
|
+
export declare const HOVER_WASH_PERCENT: 13;
|
|
110
|
+
export declare const HOVER_GLOW_EDGE_PERCENT: 55;
|
|
111
|
+
export declare const HOVER_GLOW_SOFT_PERCENT: 25;
|
|
112
|
+
export declare const HOVER_LIFT_PX: 1;
|
|
113
|
+
export declare const SPOTLIGHT_PEAK_PERCENT: 22;
|
|
114
|
+
export declare const SPOTLIGHT_FADE_MS: 180;
|
|
115
|
+
export declare const DISABLED_OPACITY: 0.4;
|
|
116
|
+
export declare const DISABLED_SHAKE_MS: 300;
|
|
117
|
+
export declare const LONGPRESS_MS: 500;
|
|
118
|
+
export declare const LONGPRESS_RING_HEIGHT_PX: 3;
|
|
119
|
+
/** T3 展开与结果 tokens(#1162,唯一定义地,真相源 #1159 参数表+原型 V1)。
|
|
120
|
+
*
|
|
121
|
+
* 高级组:220ms 分级展开(`.advbody{transition:max-height .22s ease,opacity .22s ease}`,
|
|
122
|
+
* 开态 cap 300px 即 `.open{max-height:300px;opacity:1}`;原生 details 开关离散、过渡跑不起来,
|
|
123
|
+
* 故生产侧取等价形态 `ilifeFoldIn` 关键帧 0→300+0→1 同 .22s)+箭头旋转
|
|
124
|
+
* (`.chev{transition:transform .2s}`、开态 `rotate(90deg)`)+悬停箭头右移 2px 并跟焦点色
|
|
125
|
+
* (`:hover .chev{translateX(2px)}`)。页签 12%/按钮 13% 淡洗各归其票,这里只定高级头。
|
|
126
|
+
*
|
|
127
|
+
* 轻提示:渐显 .18s(`.toast{transition:opacity .18s ease,transform .18s ease}`,
|
|
128
|
+
* 入场位移 8px 即 `translateY(8px)→0`;生产侧 `notice` 条件挂载,进场即跑 `ilifeToastIn`)。
|
|
129
|
+
*
|
|
130
|
+
* 复制变勾只切时长(字面「已复制」由 #920/#908 锁死不改,见 #1162 进展)。
|
|
131
|
+
* 液态拉伸影子消散与时长公式归 #1165(本工作区已落地 LIQUID_*,本票不另起第二套);
|
|
132
|
+
* 低端机模糊降级无静态常量(`@media (update: slow)` 即定义,见两处 CSS 函数尾部)。
|
|
133
|
+
* 颜色全走主题变量、永不写死蓝。 */
|
|
134
|
+
export declare const ADVANCED_OPEN_MS: 220;
|
|
135
|
+
export declare const ADVANCED_CHEV_MS: 200;
|
|
136
|
+
export declare const ADVANCED_CHEV_SHIFT_PX: 2;
|
|
137
|
+
export declare const ADVANCED_OPEN_MAX_PX: 300;
|
|
138
|
+
export declare const NOTICE_FADE_MS: 180;
|
|
139
|
+
export declare const NOTICE_RISE_PX: 8;
|
|
140
|
+
/** T6 页签与液态 tokens(#1165,唯一定义地,真相源 #1159 参数表+原型 V1)。
|
|
141
|
+
*
|
|
142
|
+
* 页签悬停淡洗 12%(原型 V1 `.tab:hover{background:color-mix(…12%…)}`,按钮 13% 不串用);
|
|
143
|
+
* 圆点呼吸 .8s(`dotPulseV1`:scale 1→1.5、opacity 1→.6,悬停驱动);
|
|
144
|
+
* 液态彗星式:拉伸 1.28/.86(45% 处)+影子 180ms 消散(ghost opacity .18s),
|
|
145
|
+
* 滑移时长 200+距离×0.35、夹 220–380ms、缓动 cubic-bezier(.3,1.1,.4,1)(原型 `liquidTo` 原式);
|
|
146
|
+
* 页签过渡只 background+border-color 各 .15s(不带 transform:页签不收缩,滑移由 glider 走)。
|
|
147
|
+
* 颜色全走主题变量(`--ilife-focus` 退品牌色、缺席退橙,永不写死蓝);触屏/减少动态无静态常量(媒体查询即定义,见视图 `tabInteractionCss`)。
|
|
148
|
+
* 共用位第二个用法:配置面板按钮(T1/T2)+爱生活页签条(本票)共用同一契约。 */
|
|
149
|
+
export declare const TAB_HOVER_WASH_PERCENT: 12;
|
|
150
|
+
export declare const TAB_DOT_PULSE_MS: 800;
|
|
151
|
+
export declare const TAB_TRANSITION: "background .15s ease,border-color .15s ease";
|
|
152
|
+
export declare const LIQUID_STRETCH_X: 1.28;
|
|
153
|
+
export declare const LIQUID_STRETCH_Y: 0.86;
|
|
154
|
+
export declare const LIQUID_GHOST_MS: 180;
|
|
155
|
+
export declare const LIQUID_MIN_MS: 220;
|
|
156
|
+
export declare const LIQUID_MAX_MS: 380;
|
|
157
|
+
export declare const LIQUID_BASE_MS: 200;
|
|
158
|
+
export declare const LIQUID_DIST_FACTOR: 0.35;
|
|
159
|
+
export declare const LIQUID_EASE: "cubic-bezier(.3,1.1,.4,1)";
|
|
78
160
|
/** 宿主给「这是哪一种目录选择能力」时用的那两格原语的名字(软依赖:按名字现取,缺席即没有入口)。 */
|
|
79
161
|
export declare const REMOTE_DIRECTORY_PICKER: "remote.directoryPicker";
|
|
80
162
|
/** 宿主在「这条路不给」时回的那个码(`directory-browser-state` 的 `openRowBrowser` 只照比不认名)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-panel-contract.d.ts","sourceRoot":"","sources":["../src/config-panel-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,mCAAmC;AACnC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/C,yDAAyD;AACzD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEvE;6DAC6D;AAC7D,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;oDACgD;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;yCACqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;oEACgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;qDAGqD;AACrD,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACjE;0DACsD;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,GAAG,SAAS,CAAC;CACxE;AAED,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,sDAAsD;AACtD,eAAO,MAAM,uBAAuB,EAAG,YAAqB,CAAC;AAC7D,eAAO,MAAM,wBAAwB,EAAG,aAAsB,CAAC;AAC/D,eAAO,MAAM,yBAAyB,EAAG,cAAuB,CAAC;AAEjE;;;;gEAIgE;AAChE,eAAO,MAAM,oBAAoB,EAAG,cAAa,CAAC;AAElD,gDAAgD;AAChD,eAAO,MAAM,eAAe,EAAG,KAAe,CAAC;AAE/C;;qEAEqE;AACrE,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAE1E,
|
|
1
|
+
{"version":3,"file":"config-panel-contract.d.ts","sourceRoot":"","sources":["../src/config-panel-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,90 @@ export const READ_TIMEOUT_MS = 20_000;
|
|
|
24
24
|
*
|
|
25
25
|
* 有界、调用方负责卸载清理(见 `config-panel.ts` 的取数),不是无界轮询;仅读整面用,保存/重置永不自动重试。 */
|
|
26
26
|
export const CONFIG_READ_RETRY_MS = [1000, 3000, 8000];
|
|
27
|
-
/** 复制那一枚按钮就地变「已复制」之后,多久变回「复制」(定稿 v3
|
|
28
|
-
|
|
27
|
+
/** 复制那一枚按钮就地变「已复制」之后,多久变回「复制」(定稿 v3 第三条:终值 900ms,不弹提示)。
|
|
28
|
+
*
|
|
29
|
+
* #1162 差值终结:由现状 1500 切到终值 900(真相源 #1159 参数表+原型 `},900)`);老期望变红属预期,见 #1162。 */
|
|
30
|
+
export const COPY_FEEDBACK_MS = 900;
|
|
31
|
+
/** T1 交互 tokens(#1160,唯一定义地,真相源 #1159 参数表)。
|
|
32
|
+
*
|
|
33
|
+
* 按压 .97、焦点隔离 2px+主题色 5px、过渡 .15s——取值逐字照原型 V1
|
|
34
|
+
*(`.scratch/1155-real-panel-prototype.html`:`btn:active{transform:scale(.97)}`、
|
|
35
|
+
* `btn:focus-visible{box-shadow:0 0 0 2px #0b0b0d,0 0 0 5px var(--focus)}`、
|
|
36
|
+
* 主题橙 #f6ad55/蓝 #0a84ff/绿 #30d158、过渡 background/transform/box-shadow/border-color 各 .15s)。
|
|
37
|
+
*
|
|
38
|
+
* 颜色全走主题变量、永不写死蓝:隔离环取卡面底(深浅自适应),焦点环取
|
|
39
|
+
* `--ilife-focus`(缺席时退到宿主品牌色,宿主品牌色本身跟主题走)。
|
|
40
|
+
* 悬停/长按/折叠/复制变勾/提示/液态归后票,本件只定按压与焦点四格。 */
|
|
41
|
+
export const PRESS_SCALE = 0.97;
|
|
42
|
+
export const FOCUS_RING_GAP_PX = 2;
|
|
43
|
+
export const FOCUS_RING_WIDTH_PX = 5;
|
|
44
|
+
export const INTERACTION_TRANSITION = 'background .15s ease,transform .15s ease,box-shadow .15s ease,border-color .15s ease';
|
|
45
|
+
/** T2 指针与按住 tokens(#1161,唯一定义地,真相源 #1159 参数表+原型 V1)。
|
|
46
|
+
*
|
|
47
|
+
* 悬停:聚光半径 120、淡洗 13%、辉光内圈 55%+外发光 25%、上浮 1px——逐字照原型 V1
|
|
48
|
+
*(`.scratch/1155-real-panel-prototype.html`:`.btn:hover{background:color-mix(…13%…);…box-shadow:0 0 0 1px …55%…,0 4px 16px …25%…;transform:translateY(-1px)}`、
|
|
49
|
+
* `::before{background:radial-gradient(120px circle at var(--mx) var(--my),…22%…,transparent 65%)}`)。
|
|
50
|
+
* 页签 12%/高级行 10%不归本票(页签见 #1165,高级见 #1162),这里只定按钮 13% 一档。
|
|
51
|
+
*
|
|
52
|
+
* 禁用:摇头 ±2px/.3s、禁止指针、不透明度 .4——照原型(`shakeV1`+`.btn:disabled{cursor:not-allowed;opacity:.4}`)。
|
|
53
|
+
*
|
|
54
|
+
* 长按:500ms 纯视觉环(底边 3px 主题色条,`:active` 驱动 0→100%,永不触发动作、不进状态机分支)+
|
|
55
|
+
* 回弹(沿用 T1 按压释放 .15s 回弹,不另起回弹曲线)。原型环色 `#30d158` 在生产侧换成主题变量。
|
|
56
|
+
*
|
|
57
|
+
* 颜色全走主题变量、永不写死蓝:悬停/辉光/聚光/环一律取 `--ilife-focus` 退品牌色。
|
|
58
|
+
* 触屏降级与减少动态无静态常量(媒体查询即定义,见视图 `interactionCss`)。 */
|
|
59
|
+
export const HOVER_SPOTLIGHT_RADIUS_PX = 120;
|
|
60
|
+
export const HOVER_WASH_PERCENT = 13;
|
|
61
|
+
export const HOVER_GLOW_EDGE_PERCENT = 55;
|
|
62
|
+
export const HOVER_GLOW_SOFT_PERCENT = 25;
|
|
63
|
+
export const HOVER_LIFT_PX = 1;
|
|
64
|
+
export const SPOTLIGHT_PEAK_PERCENT = 22;
|
|
65
|
+
export const SPOTLIGHT_FADE_MS = 180;
|
|
66
|
+
export const DISABLED_OPACITY = 0.4;
|
|
67
|
+
export const DISABLED_SHAKE_MS = 300;
|
|
68
|
+
export const LONGPRESS_MS = 500;
|
|
69
|
+
export const LONGPRESS_RING_HEIGHT_PX = 3;
|
|
70
|
+
/** T3 展开与结果 tokens(#1162,唯一定义地,真相源 #1159 参数表+原型 V1)。
|
|
71
|
+
*
|
|
72
|
+
* 高级组:220ms 分级展开(`.advbody{transition:max-height .22s ease,opacity .22s ease}`,
|
|
73
|
+
* 开态 cap 300px 即 `.open{max-height:300px;opacity:1}`;原生 details 开关离散、过渡跑不起来,
|
|
74
|
+
* 故生产侧取等价形态 `ilifeFoldIn` 关键帧 0→300+0→1 同 .22s)+箭头旋转
|
|
75
|
+
* (`.chev{transition:transform .2s}`、开态 `rotate(90deg)`)+悬停箭头右移 2px 并跟焦点色
|
|
76
|
+
* (`:hover .chev{translateX(2px)}`)。页签 12%/按钮 13% 淡洗各归其票,这里只定高级头。
|
|
77
|
+
*
|
|
78
|
+
* 轻提示:渐显 .18s(`.toast{transition:opacity .18s ease,transform .18s ease}`,
|
|
79
|
+
* 入场位移 8px 即 `translateY(8px)→0`;生产侧 `notice` 条件挂载,进场即跑 `ilifeToastIn`)。
|
|
80
|
+
*
|
|
81
|
+
* 复制变勾只切时长(字面「已复制」由 #920/#908 锁死不改,见 #1162 进展)。
|
|
82
|
+
* 液态拉伸影子消散与时长公式归 #1165(本工作区已落地 LIQUID_*,本票不另起第二套);
|
|
83
|
+
* 低端机模糊降级无静态常量(`@media (update: slow)` 即定义,见两处 CSS 函数尾部)。
|
|
84
|
+
* 颜色全走主题变量、永不写死蓝。 */
|
|
85
|
+
export const ADVANCED_OPEN_MS = 220;
|
|
86
|
+
export const ADVANCED_CHEV_MS = 200;
|
|
87
|
+
export const ADVANCED_CHEV_SHIFT_PX = 2;
|
|
88
|
+
export const ADVANCED_OPEN_MAX_PX = 300;
|
|
89
|
+
export const NOTICE_FADE_MS = 180;
|
|
90
|
+
export const NOTICE_RISE_PX = 8;
|
|
91
|
+
/** T6 页签与液态 tokens(#1165,唯一定义地,真相源 #1159 参数表+原型 V1)。
|
|
92
|
+
*
|
|
93
|
+
* 页签悬停淡洗 12%(原型 V1 `.tab:hover{background:color-mix(…12%…)}`,按钮 13% 不串用);
|
|
94
|
+
* 圆点呼吸 .8s(`dotPulseV1`:scale 1→1.5、opacity 1→.6,悬停驱动);
|
|
95
|
+
* 液态彗星式:拉伸 1.28/.86(45% 处)+影子 180ms 消散(ghost opacity .18s),
|
|
96
|
+
* 滑移时长 200+距离×0.35、夹 220–380ms、缓动 cubic-bezier(.3,1.1,.4,1)(原型 `liquidTo` 原式);
|
|
97
|
+
* 页签过渡只 background+border-color 各 .15s(不带 transform:页签不收缩,滑移由 glider 走)。
|
|
98
|
+
* 颜色全走主题变量(`--ilife-focus` 退品牌色、缺席退橙,永不写死蓝);触屏/减少动态无静态常量(媒体查询即定义,见视图 `tabInteractionCss`)。
|
|
99
|
+
* 共用位第二个用法:配置面板按钮(T1/T2)+爱生活页签条(本票)共用同一契约。 */
|
|
100
|
+
export const TAB_HOVER_WASH_PERCENT = 12;
|
|
101
|
+
export const TAB_DOT_PULSE_MS = 800;
|
|
102
|
+
export const TAB_TRANSITION = 'background .15s ease,border-color .15s ease';
|
|
103
|
+
export const LIQUID_STRETCH_X = 1.28;
|
|
104
|
+
export const LIQUID_STRETCH_Y = 0.86;
|
|
105
|
+
export const LIQUID_GHOST_MS = 180;
|
|
106
|
+
export const LIQUID_MIN_MS = 220;
|
|
107
|
+
export const LIQUID_MAX_MS = 380;
|
|
108
|
+
export const LIQUID_BASE_MS = 200;
|
|
109
|
+
export const LIQUID_DIST_FACTOR = 0.35;
|
|
110
|
+
export const LIQUID_EASE = 'cubic-bezier(.3,1.1,.4,1)';
|
|
29
111
|
/** 宿主给「这是哪一种目录选择能力」时用的那两格原语的名字(软依赖:按名字现取,缺席即没有入口)。 */
|
|
30
112
|
export const REMOTE_DIRECTORY_PICKER = 'remote.directoryPicker';
|
|
31
113
|
/** 宿主在「这条路不给」时回的那个码(`directory-browser-state` 的 `openRowBrowser` 只照比不认名)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-panel-contract.js","sourceRoot":"","sources":["../src/config-panel-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAwDH,sDAAsD;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAqB,CAAC;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAsB,CAAC;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAuB,CAAC;AAEjE;;;;gEAIgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAa,CAAC;AAElD,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAe,CAAC;AAE/C;;qEAEqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE1E,
|
|
1
|
+
{"version":3,"file":"config-panel-contract.js","sourceRoot":"","sources":["../src/config-panel-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,17 @@ import type { ConfigItem, ConfigSurfaceReply } from './config-panel-contract.js'
|
|
|
36
36
|
import type { DirectoryRowBrowser } from './directory-browser-state.js';
|
|
37
37
|
import type { DirectoryRowEntry } from './directory-browser-api.js';
|
|
38
38
|
import type { SealInstance } from './config-panel-contract.js';
|
|
39
|
+
export declare function interactionCss(): string;
|
|
40
|
+
/** T6 页签条交互(#1165,唯一生成处;载体 `client.ts` 页签条消费,不自画)。
|
|
41
|
+
*
|
|
42
|
+
* 原型 V1 页签四件:悬停淡洗 12%+辉光边框(无上浮、无聚光,按钮那套不串用)、圆点呼吸 .8s
|
|
43
|
+
*(悬停驱动,scale 1→1.5/opacity 1→.6)、焦点双环(沿用 T1 2px+5px,跟主题色,同色页签可见)、
|
|
44
|
+
* 选中态透明(glider 在下层给 pill,页签自身透明;减少动态时 CSS 以 !important 回实心 pill)。
|
|
45
|
+
* 液态彗星式由载体 `liquidTo` 驱动(拉伸+影子消散+时长公式见契约 T6 tokens),本函数只出静态层:
|
|
46
|
+
* glider-layer 定位+goo 滤镜引用、ghost 影子过渡(180ms)、glider/ghost 底色(主题变量)。
|
|
47
|
+
* 数值全引契约 T6 四格(淡洗/呼吸/过渡/影子),颜色永不写死蓝(缺席退橙 #f6ad55)。
|
|
48
|
+
* 低端机模糊降级(#1162):update: slow 下 glider 层(含 goo 模糊)关闭、选中态回实心 pill(与减少动态同形)。 */
|
|
49
|
+
export declare function tabInteractionCss(): string;
|
|
39
50
|
declare const S: {
|
|
40
51
|
/** `.ic-card`:`background:var(--ic-surface)`(=bg-layer-1)+`border:1px solid var(--ic-line-strong)`
|
|
41
52
|
* +`border-radius:12px`+`padding:14px`+`box-shadow:inset 0 1px 0 rgba(255,255,255,.06)`。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-panel-view.d.ts","sourceRoot":"","sources":["../src/config-panel-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"config-panel-view.d.ts","sourceRoot":"","sources":["../src/config-panel-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* 对外只经 `config-panel-api.ts` 那一道门;本件自己不出门。
|
|
33
33
|
*/
|
|
34
34
|
import * as React from 'react';
|
|
35
|
-
import { ADVANCED_GROUP_TITLE } from './config-panel-contract.js';
|
|
35
|
+
import { ADVANCED_CHEV_MS, ADVANCED_CHEV_SHIFT_PX, ADVANCED_GROUP_TITLE, ADVANCED_OPEN_MAX_PX, ADVANCED_OPEN_MS, DISABLED_OPACITY, DISABLED_SHAKE_MS, FOCUS_RING_GAP_PX, FOCUS_RING_WIDTH_PX, HOVER_GLOW_EDGE_PERCENT, HOVER_GLOW_SOFT_PERCENT, HOVER_LIFT_PX, HOVER_SPOTLIGHT_RADIUS_PX, HOVER_WASH_PERCENT, INTERACTION_TRANSITION, LIQUID_GHOST_MS, LONGPRESS_MS, LONGPRESS_RING_HEIGHT_PX, NOTICE_FADE_MS, NOTICE_RISE_PX, PRESS_SCALE, SPOTLIGHT_FADE_MS, SPOTLIGHT_PEAK_PERCENT, TAB_DOT_PULSE_MS, TAB_HOVER_WASH_PERCENT, TAB_TRANSITION } from './config-panel-contract.js';
|
|
36
36
|
import { DirectoryBrowserFromRow } from './directory-browser-ui.js';
|
|
37
37
|
import { TitleBlock } from './title-seal.js';
|
|
38
38
|
import { SealStamp } from './seal-stamp.js';
|
|
@@ -61,6 +61,109 @@ const PANEL_SUNKEN_FILL = inkMix(9, 'var(--dsw-alias-bg-layer-1, #232324)');
|
|
|
61
61
|
const PANEL_FIELD_EDGE = inkMix(24);
|
|
62
62
|
/** 骨架条:浅色 ≈`#c9ccd2`(1.6:1)⇔ 深色 ≈`#404143`。 */
|
|
63
63
|
const PANEL_SKELETON_FILL = inkMix(21);
|
|
64
|
+
/** T1 按压与焦点(#1160):原型 V1 的两个真实行为,样式只此一处生成。
|
|
65
|
+
*
|
|
66
|
+
* 用法:按钮加 `data-ilife-press`(按压+焦点双环),输入框加 `data-ilife-focus`
|
|
67
|
+
*(仅焦点双环,文本框不收缩)。`PanelBody` 在卡片首位挂一枚 `<style>`,选择器按属性名收敛、
|
|
68
|
+
* 只罩本卡内的这两类,不漏到宿主别的按钮上。数值全引契约四格(按压/隔离/宽度/过渡),
|
|
69
|
+
* 颜色全走主题变量(隔离环取卡面底,焦点环取 `--ilife-focus` 退品牌色,永不写死蓝)。
|
|
70
|
+
* 悬停/长按/折叠/复制变勾/提示/液态归后票,本函数只出按压与焦点。
|
|
71
|
+
*
|
|
72
|
+
* T2 追加(#1161):悬停聚光+淡洗+辉光+上浮、禁用摇头+禁止指针、长按 500ms 纯视觉环+回弹、
|
|
73
|
+
* 无障碍三约束(触屏降级、键盘焦点可见、减少动态静态替代)——数值全引契约 T2 十格,详见函数内注释。
|
|
74
|
+
*
|
|
75
|
+
* T3 追加(#1162):高级折叠(220ms 分级入场+箭头旋转 200ms+悬停右移 2px)+轻提示渐显
|
|
76
|
+
* (180ms 上浮 8px)+低端机(update: slow)静态兜底——数值全引契约 T3 六格;
|
|
77
|
+
* 液态拉伸影子消散归 #1165(本函数不动页签,页签静态层见 tabInteractionCss)。 */
|
|
78
|
+
// T2 焦点色变量(与 T1 行内字面逐字同值;T1 那一行保持字面不变——像素脚本按源码窗口断言它,改动会误报)。
|
|
79
|
+
const T2_FOCUS_VAR = 'var(--ilife-focus, var(--dsw-alias-brand-primary, #f6ad55))';
|
|
80
|
+
export function interactionCss() {
|
|
81
|
+
return ('[data-ilife-press]{transition:' + INTERACTION_TRANSITION + '}' +
|
|
82
|
+
'[data-ilife-focus]{transition:' + INTERACTION_TRANSITION + '}' +
|
|
83
|
+
'[data-ilife-press]:active{transform:scale(' + String(PRESS_SCALE) + ')}' +
|
|
84
|
+
'[data-ilife-press]:focus-visible,[data-ilife-focus]:focus-visible{outline:none;' +
|
|
85
|
+
'box-shadow:0 0 0 ' + String(FOCUS_RING_GAP_PX) + 'px var(--dsw-alias-bg-layer-1, #232324),' +
|
|
86
|
+
'0 0 0 ' + String(FOCUS_RING_WIDTH_PX) + 'px var(--ilife-focus, var(--dsw-alias-brand-primary, #f6ad55))}' +
|
|
87
|
+
'[data-ilife-press]{position:relative;overflow:hidden}' +
|
|
88
|
+
'[data-ilife-press]:hover:not(:disabled){background:color-mix(in srgb, ' + T2_FOCUS_VAR + ' ' + String(HOVER_WASH_PERCENT) + '%, transparent);' +
|
|
89
|
+
'border-color:' + T2_FOCUS_VAR + ';' +
|
|
90
|
+
'box-shadow:0 0 0 1px color-mix(in srgb, ' + T2_FOCUS_VAR + ' ' + String(HOVER_GLOW_EDGE_PERCENT) + '%, transparent),' +
|
|
91
|
+
'0 4px 16px color-mix(in srgb, ' + T2_FOCUS_VAR + ' ' + String(HOVER_GLOW_SOFT_PERCENT) + '%, transparent);' +
|
|
92
|
+
'transform:translateY(-' + String(HOVER_LIFT_PX) + 'px)}' +
|
|
93
|
+
'[data-ilife-press]:active:hover:not(:disabled){transform:scale(' + String(PRESS_SCALE) + ')}' +
|
|
94
|
+
'[data-ilife-press]:focus-visible:hover:not(:disabled){box-shadow:0 0 0 ' + String(FOCUS_RING_GAP_PX) + 'px var(--dsw-alias-bg-layer-1, #232324),' +
|
|
95
|
+
'0 0 0 ' + String(FOCUS_RING_WIDTH_PX) + 'px ' + T2_FOCUS_VAR + ',' +
|
|
96
|
+
'0 4px 16px color-mix(in srgb, ' + T2_FOCUS_VAR + ' ' + String(HOVER_GLOW_SOFT_PERCENT) + '%, transparent)}' +
|
|
97
|
+
'[data-ilife-press]::before{content:"";position:absolute;inset:0;' +
|
|
98
|
+
'background:radial-gradient(' + String(HOVER_SPOTLIGHT_RADIUS_PX) + 'px circle at var(--mx,50%) var(--my,50%),' +
|
|
99
|
+
'color-mix(in srgb, ' + T2_FOCUS_VAR + ' ' + String(SPOTLIGHT_PEAK_PERCENT) + '%, transparent),transparent 65%);' +
|
|
100
|
+
'opacity:0;transition:opacity ' + String(SPOTLIGHT_FADE_MS / 1000) + 's ease;pointer-events:none}' +
|
|
101
|
+
'[data-ilife-press]:hover:not(:disabled)::before{opacity:1}' +
|
|
102
|
+
'[data-ilife-press]:disabled{cursor:not-allowed;opacity:' + String(DISABLED_OPACITY) + '}' +
|
|
103
|
+
'[data-ilife-press]:disabled:hover{animation:ilifeShake ' + String(DISABLED_SHAKE_MS / 1000) + 's ease}' +
|
|
104
|
+
'@keyframes ilifeShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-2px)}75%{transform:translateX(2px)}}' +
|
|
105
|
+
'[data-ilife-longpress]{position:relative;overflow:hidden}' +
|
|
106
|
+
'[data-ilife-longpress]::after{content:"";position:absolute;left:0;bottom:0;height:' + String(LONGPRESS_RING_HEIGHT_PX) + 'px;width:0;' +
|
|
107
|
+
'background:' + T2_FOCUS_VAR + ';pointer-events:none}' +
|
|
108
|
+
'[data-ilife-longpress]:active:not(:disabled)::after{animation:ilifeLongRing ' + String(LONGPRESS_MS / 1000) + 's linear forwards}' +
|
|
109
|
+
'@keyframes ilifeLongRing{from{width:0}to{width:100%}}' +
|
|
110
|
+
'[data-ilife-advanced="head"]{transition:' + INTERACTION_TRANSITION + '}' +
|
|
111
|
+
'[data-ilife-advanced="mark"]{display:inline-block;transition:transform ' + String(ADVANCED_CHEV_MS / 1000) + 's ease}' +
|
|
112
|
+
'[data-ilife-advanced="group"][open] [data-ilife-advanced="mark"]{transform:rotate(90deg)}' +
|
|
113
|
+
'[data-ilife-advanced="head"]:hover [data-ilife-advanced="mark"]{color:' + T2_FOCUS_VAR + ';transform:translateX(' + String(ADVANCED_CHEV_SHIFT_PX) + 'px)}' +
|
|
114
|
+
'[data-ilife-advanced="group"][open] [data-ilife-advanced="body"]{animation:ilifeFoldIn ' + String(ADVANCED_OPEN_MS / 1000) + 's ease}' +
|
|
115
|
+
'@keyframes ilifeFoldIn{from{max-height:0;opacity:0}to{max-height:' + String(ADVANCED_OPEN_MAX_PX) + 'px;opacity:1}}' +
|
|
116
|
+
'[data-ilife-notice="line"]{animation:ilifeToastIn ' + String(NOTICE_FADE_MS / 1000) + 's ease}' +
|
|
117
|
+
'@keyframes ilifeToastIn{from{opacity:0;transform:translateY(' + String(NOTICE_RISE_PX) + 'px)}to{opacity:1;transform:none}}' +
|
|
118
|
+
'@media (hover:none){[data-ilife-press]:hover:not(:disabled){transform:none}[data-ilife-press]::before{display:none}}' +
|
|
119
|
+
'@media (prefers-reduced-motion:reduce){[data-ilife-press],[data-ilife-focus]{transition:none}' +
|
|
120
|
+
'[data-ilife-press]:disabled:hover{animation:none}' +
|
|
121
|
+
'[data-ilife-longpress]:active:not(:disabled)::after{animation:none;width:100%}' +
|
|
122
|
+
'[data-ilife-advanced="mark"]{transition:none}' +
|
|
123
|
+
'[data-ilife-advanced="group"][open] [data-ilife-advanced="body"]{animation:none}' +
|
|
124
|
+
'[data-ilife-notice="line"]{animation:none}}' +
|
|
125
|
+
'@media (update: slow){[data-ilife-press],[data-ilife-focus]{transition:none}' +
|
|
126
|
+
'[data-ilife-press]::before{display:none}' +
|
|
127
|
+
'[data-ilife-press]:disabled:hover{animation:none}' +
|
|
128
|
+
'[data-ilife-longpress]:active:not(:disabled)::after{animation:none;width:100%}' +
|
|
129
|
+
'[data-ilife-advanced="mark"]{transition:none}' +
|
|
130
|
+
'[data-ilife-advanced="group"][open] [data-ilife-advanced="body"]{animation:none}' +
|
|
131
|
+
'[data-ilife-notice="line"]{animation:none}}');
|
|
132
|
+
}
|
|
133
|
+
/** T6 页签条交互(#1165,唯一生成处;载体 `client.ts` 页签条消费,不自画)。
|
|
134
|
+
*
|
|
135
|
+
* 原型 V1 页签四件:悬停淡洗 12%+辉光边框(无上浮、无聚光,按钮那套不串用)、圆点呼吸 .8s
|
|
136
|
+
*(悬停驱动,scale 1→1.5/opacity 1→.6)、焦点双环(沿用 T1 2px+5px,跟主题色,同色页签可见)、
|
|
137
|
+
* 选中态透明(glider 在下层给 pill,页签自身透明;减少动态时 CSS 以 !important 回实心 pill)。
|
|
138
|
+
* 液态彗星式由载体 `liquidTo` 驱动(拉伸+影子消散+时长公式见契约 T6 tokens),本函数只出静态层:
|
|
139
|
+
* glider-layer 定位+goo 滤镜引用、ghost 影子过渡(180ms)、glider/ghost 底色(主题变量)。
|
|
140
|
+
* 数值全引契约 T6 四格(淡洗/呼吸/过渡/影子),颜色永不写死蓝(缺席退橙 #f6ad55)。
|
|
141
|
+
* 低端机模糊降级(#1162):update: slow 下 glider 层(含 goo 模糊)关闭、选中态回实心 pill(与减少动态同形)。 */
|
|
142
|
+
export function tabInteractionCss() {
|
|
143
|
+
return ('[data-ilife-tablist]{position:relative;isolation:isolate}' +
|
|
144
|
+
'[data-ilife-glider-layer]{position:absolute;inset:0;z-index:0;filter:url(#ilife-goo);pointer-events:none}' +
|
|
145
|
+
'[data-ilife-glider],[data-ilife-ghost]{position:absolute;top:0;left:0;border-radius:999px;background:' + T2_FOCUS_VAR + '}' +
|
|
146
|
+
'[data-ilife-ghost]{opacity:0}' +
|
|
147
|
+
'[data-ilife-tab]{position:relative;z-index:1;transition:' + TAB_TRANSITION + '}' +
|
|
148
|
+
'[data-ilife-tab]:hover{background:color-mix(in srgb, ' + T2_FOCUS_VAR + ' ' + String(TAB_HOVER_WASH_PERCENT) + '%, transparent);' +
|
|
149
|
+
'border-color:' + T2_FOCUS_VAR + '}' +
|
|
150
|
+
'[data-ilife-tab]:hover [data-ilife-health="tab-dot"]{animation:ilifeDotPulse ' + String(TAB_DOT_PULSE_MS / 1000) + 's ease infinite}' +
|
|
151
|
+
'@keyframes ilifeDotPulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.6}}' +
|
|
152
|
+
'[data-ilife-tab]:focus-visible{outline:none;' +
|
|
153
|
+
'box-shadow:0 0 0 ' + String(FOCUS_RING_GAP_PX) + 'px var(--dsw-alias-bg-layer-1, #232324),' +
|
|
154
|
+
'0 0 0 ' + String(FOCUS_RING_WIDTH_PX) + 'px ' + T2_FOCUS_VAR + '}' +
|
|
155
|
+
'[data-ilife-tab][aria-selected="true"]{background:transparent;border-color:transparent}' +
|
|
156
|
+
'[data-ilife-ghost]{transition:opacity ' + String(LIQUID_GHOST_MS / 1000) + 's ease}' +
|
|
157
|
+
'@media (hover:none){[data-ilife-tab]:hover [data-ilife-health="tab-dot"]{animation:none}}' +
|
|
158
|
+
'@media (prefers-reduced-motion:reduce){[data-ilife-tablist] [data-ilife-glider-layer]{display:none}' +
|
|
159
|
+
'[data-ilife-tab]{transition:none}' +
|
|
160
|
+
'[data-ilife-tab]:hover [data-ilife-health="tab-dot"]{animation:none}' +
|
|
161
|
+
'[data-ilife-tab][aria-selected="true"]{background:var(--ilife-focus, var(--dsw-alias-brand-primary, #f6ad55))!important;border-color:transparent!important}}' +
|
|
162
|
+
'@media (update: slow){[data-ilife-tablist] [data-ilife-glider-layer]{display:none}' +
|
|
163
|
+
'[data-ilife-tab]{transition:none}' +
|
|
164
|
+
'[data-ilife-tab]:hover [data-ilife-health="tab-dot"]{animation:none}' +
|
|
165
|
+
'[data-ilife-tab][aria-selected="true"]{background:var(--ilife-focus, var(--dsw-alias-brand-primary, #f6ad55))!important;border-color:transparent!important}}');
|
|
166
|
+
}
|
|
64
167
|
const S = {
|
|
65
168
|
/** `.ic-card`:`background:var(--ic-surface)`(=bg-layer-1)+`border:1px solid var(--ic-line-strong)`
|
|
66
169
|
* +`border-radius:12px`+`padding:14px`+`box-shadow:inset 0 1px 0 rgba(255,255,255,.06)`。
|
|
@@ -564,6 +667,10 @@ export function Row(props) {
|
|
|
564
667
|
style: S.btnPick,
|
|
565
668
|
type: 'button',
|
|
566
669
|
disabled: props.onCopy === undefined,
|
|
670
|
+
// #1160 T1:按压收缩+焦点双环(纯视觉,不进状态机;禁用态浏览器不触发 :active)。
|
|
671
|
+
// #1161 T2:长按 500ms 纯视觉环(只做视觉标记,不注册任何动作回调、不进状态机分支)。
|
|
672
|
+
'data-ilife-press': 'copy',
|
|
673
|
+
'data-ilife-longpress': 'copy',
|
|
567
674
|
onClick: () => props.onCopy?.(item.key, props.value),
|
|
568
675
|
}, copyLabelOf(props.copyState));
|
|
569
676
|
const follow = props.follow === true
|
|
@@ -581,6 +688,8 @@ export function Row(props) {
|
|
|
581
688
|
style: S.checkbox,
|
|
582
689
|
checked: props.value === 'true',
|
|
583
690
|
disabled,
|
|
691
|
+
// #1160 T1:键盘焦点双环(文本框不收缩,只给焦点)。
|
|
692
|
+
'data-ilife-focus': 'input',
|
|
584
693
|
onChange: (e) => props.onChange(item.key, e.target.checked ? 'true' : 'false'),
|
|
585
694
|
})
|
|
586
695
|
: React.createElement('input', {
|
|
@@ -589,6 +698,8 @@ export function Row(props) {
|
|
|
589
698
|
value: props.value,
|
|
590
699
|
disabled,
|
|
591
700
|
spellCheck: false,
|
|
701
|
+
// #1160 T1:键盘焦点双环(文本框不收缩,只给焦点)。
|
|
702
|
+
'data-ilife-focus': 'input',
|
|
592
703
|
onChange,
|
|
593
704
|
});
|
|
594
705
|
/** 目录入口:只读行不画(定稿 v3 ①),供不了(`none`/缺席)也不画。 */
|
|
@@ -598,6 +709,10 @@ export function Row(props) {
|
|
|
598
709
|
style: S.btnPick,
|
|
599
710
|
type: 'button',
|
|
600
711
|
disabled,
|
|
712
|
+
// #1160 T1:按压收缩+焦点双环(只读行不画本枚,见定稿 v3 ①)。
|
|
713
|
+
// #1161 T2:长按纯视觉环(同上)。
|
|
714
|
+
'data-ilife-press': 'browse',
|
|
715
|
+
'data-ilife-longpress': 'browse',
|
|
601
716
|
// 回这枚 Promise 是有意的:React 不看 onClick 的返回值,而用例能直接 await 它。
|
|
602
717
|
onClick: () => entry.onOpen(item.key),
|
|
603
718
|
}, '浏览文件夹')
|
|
@@ -631,19 +746,20 @@ export function PanelBody(props) {
|
|
|
631
746
|
const surface = state.kind === 'ready' ? state.surface : null;
|
|
632
747
|
const product = title ?? '';
|
|
633
748
|
const seals = props.seals ?? [];
|
|
634
|
-
/** 18 枚倾角各不同(1158):家下标×3+位序,步进错开。 */
|
|
635
|
-
const TILT18 = [-4, -2.5, -1, -3, 1.5, 3, -1.5, 2, 4, -3.5, 0.5, 2.5, -4.5, 1, -2, 3.5, -0.5, 4.5];
|
|
636
|
-
/** 三枚落位(卡片坐标:右上/左中/右下三处,互不遮挡)。右上与右下两枚按右钉死——
|
|
637
|
-
* HELP 是单行最长的一枚,左钉会在窄卡上整体飞出面板右侧,右钉则右边界天然收敛;
|
|
638
|
-
* 左中那枚按左钉(左钉的章向右长,左边界天然收敛)。 */
|
|
639
|
-
const SPOT = [{ right: '0.2em', top: '0.3em' }, { left: '2%', top: '3.2em' }, { right: '6%', top: '5.6em' }];
|
|
640
749
|
const seed = props.sealSeed ?? 0;
|
|
641
|
-
/**
|
|
642
|
-
const
|
|
643
|
-
|
|
644
|
-
const
|
|
750
|
+
/** 三行定序(六家一致:HELP 上/技能中/插件下;HELP 永远 z 最上)。 */
|
|
751
|
+
const order = [0, 1, 2];
|
|
752
|
+
/** 三行行高(上/中/下;纵向净空各留约 10px,糙边抖动也碰不到)。 */
|
|
753
|
+
const TOPS = ['0.3em', '3.4em', '6.2em'];
|
|
754
|
+
/** 轻微倾角(±0.5°~±2.5°,方向随机):家下标×槽位哈希,纯函数、每次同值,不过大。 */
|
|
755
|
+
const tiltOfSlot = (slot) => {
|
|
756
|
+
const q = (seed * 5 + slot * 11 + 3) % 10;
|
|
757
|
+
return String((q % 2 === 0 ? -1 : 1) * (0.5 + Math.floor(q / 2) * 0.5));
|
|
758
|
+
};
|
|
759
|
+
/** 右间距(三枚全部居右收敛,各家各行 0.2em~1.1em 错开,永不出面板右边界)。 */
|
|
760
|
+
const padRightOfSlot = (slot) => String(0.2 + ((seed * 7 + slot * 3 + 1) % 6) * 0.18) + 'em';
|
|
645
761
|
const zOfRole = (role) => role === 'help' ? 4 : role === 'skill' ? 3 : 2;
|
|
646
|
-
const overlay = seals.length === 0 ? null : React.createElement('div', { style: S.sealOverlay }, React.createElement(SealFilterDefs, {}), ...order.map((dataIndex, slot) => React.createElement('span', { key: seals[dataIndex].role + ':' + seals[dataIndex].tier, style: { position: 'absolute', top:
|
|
762
|
+
const overlay = seals.length === 0 ? null : React.createElement('div', { style: S.sealOverlay }, React.createElement(SealFilterDefs, {}), ...order.map((dataIndex, slot) => React.createElement('span', { key: seals[dataIndex].role + ':' + seals[dataIndex].tier, style: { position: 'absolute', top: TOPS[slot], right: padRightOfSlot(slot), zIndex: zOfRole(seals[dataIndex].role), pointerEvents: 'auto', display: 'inline-flex', transform: 'rotate(' + tiltOfSlot(slot) + 'deg)' } },
|
|
647
763
|
// 章面缩到 80%:印本体(九档锁死值)不动,只在用法处压一层字号——印内 em 全跟下来,3px 边线原样保留。
|
|
648
764
|
React.createElement('span', { style: { fontSize: '0.8em', display: 'inline-flex' } }, React.createElement(SealStamp, { role: seals[dataIndex].role, tier: seals[dataIndex].tier, label: seals[dataIndex].label, onSelect: props.onSealSelect === undefined ? undefined : props.onSealSelect.bind(null, dataIndex) })))));
|
|
649
765
|
const openSeal = props.selectedSeal === null || props.selectedSeal === undefined ? null : seals[props.selectedSeal] ?? null;
|
|
@@ -684,7 +800,10 @@ export function PanelBody(props) {
|
|
|
684
800
|
const parts = { styles: S, reply: surface };
|
|
685
801
|
const extra = props.extra === undefined ? null : props.extra(parts);
|
|
686
802
|
if (state.kind === 'failed') {
|
|
687
|
-
return React.createElement('div', { style: S.card }, head, fileLines, React.createElement('div', { style: S.error }, state.message), extra, overlay, React.createElement('div', { style: S.bar }, React.createElement('button', { style: S.btn, type: 'button', onClick: props.onRetry }, '重试'), React.createElement('button', { style: S.btn, type: 'button', onClick: props.onReset }, '重置为默认'))
|
|
803
|
+
return React.createElement('div', { style: S.card }, head, fileLines, React.createElement('div', { style: S.error }, state.message), extra, overlay, React.createElement('div', { style: S.bar }, React.createElement('button', { style: S.btn, type: 'button', 'data-ilife-press': 'retry', 'data-ilife-longpress': 'retry', onClick: props.onRetry }, '重试'), React.createElement('button', { style: S.btn, type: 'button', 'data-ilife-press': 'reset', 'data-ilife-longpress': 'reset', onClick: props.onReset }, '重置为默认')),
|
|
804
|
+
// #1160 T1:按压+焦点双环的样式只此一枚 <style>,罩本卡内 data-ilife-press/focus 两类。
|
|
805
|
+
// 放末位:首位会把既有形状判据 kidsOf(card)[0]===head 顶掉(920 红),末位不影响任何既有断言。
|
|
806
|
+
React.createElement('style', { 'data-ilife-interaction': 't1' }, interactionCss()));
|
|
688
807
|
}
|
|
689
808
|
const common = props.items.filter((item) => item.tier === 'common');
|
|
690
809
|
const advanced = props.items.filter((item) => item.tier === 'advanced');
|
|
@@ -719,7 +838,7 @@ export function PanelBody(props) {
|
|
|
719
838
|
const dirty = ready && dirtyCount > 0;
|
|
720
839
|
return React.createElement('div', { style: S.card }, head, fileLines, React.createElement('div', { style: S.rows }, common.map((item, index) => renderRow(item, index === commonLast))), advanced.length === 0
|
|
721
840
|
? null
|
|
722
|
-
: React.createElement('details', { style: S.advanced }, React.createElement('summary', { style: S.summary }, React.createElement('span', { style: S.groupMark }, '›'), ADVANCED_GROUP_TITLE), React.createElement('div', { style: S.groupBody }, advanced.map((item, index) => renderRow(item, index === advancedLast)))), extra, React.createElement('div', { style: S.bar }, React.createElement('button', { style: dirty ? S.btnPrimary : S.btn, type: 'button', disabled: frozen || !dirty, onClick: props.onSave }, props.busy ? '处理中' : dirty ? `保存(${dirtyCount} 项未保存)` : '保存'), React.createElement('button', { style: S.btn, type: 'button', disabled: frozen, onClick: props.onReset }, '重置为默认'), React.createElement('button', { style: S.btn, type: 'button', disabled: frozen, onClick: props.onRetry }, '重新读取'),
|
|
841
|
+
: React.createElement('details', { style: S.advanced, 'data-ilife-advanced': 'group' }, React.createElement('summary', { style: S.summary, 'data-ilife-advanced': 'head' }, React.createElement('span', { style: S.groupMark, 'data-ilife-advanced': 'mark' }, '›'), ADVANCED_GROUP_TITLE), React.createElement('div', { style: S.groupBody, 'data-ilife-advanced': 'body' }, advanced.map((item, index) => renderRow(item, index === advancedLast)))), extra, React.createElement('div', { style: S.bar }, React.createElement('button', { style: dirty ? S.btnPrimary : S.btn, type: 'button', disabled: frozen || !dirty, 'data-ilife-press': 'save', 'data-ilife-longpress': 'save', onClick: props.onSave }, props.busy ? '处理中' : dirty ? `保存(${dirtyCount} 项未保存)` : '保存'), React.createElement('button', { style: S.btn, type: 'button', disabled: frozen, 'data-ilife-press': 'reset', 'data-ilife-longpress': 'reset', onClick: props.onReset }, '重置为默认'), React.createElement('button', { style: S.btn, type: 'button', disabled: frozen, 'data-ilife-press': 'retry', 'data-ilife-longpress': 'retry', onClick: props.onRetry }, '重新读取'),
|
|
723
842
|
// 那半句话是**最后一个孩子**:v3.1 的 `.ic-bar .ic-note{margin-left:auto}` 靠它把说明顶到行尾,
|
|
724
843
|
// 三枚按钮留在左边(顺序反了就会成「说明靠左、按钮靠右」,与真源相反)。
|
|
725
844
|
dirty
|
|
@@ -732,7 +851,9 @@ export function PanelBody(props) {
|
|
|
732
851
|
? React.createElement(DirectoryBrowserFromRow, { open: true, row: props.browseRow, labels: BROWSER_LABELS })
|
|
733
852
|
: null, props.writeError !== null
|
|
734
853
|
? React.createElement('div', { style: S.error, role: 'alert' }, props.writeError)
|
|
735
|
-
: null, props.error !== null ? React.createElement('div', { style: S.error }, props.error) : null, props.notice !== null ? React.createElement('div', { style: S.okText }, props.notice) : null, overlay
|
|
854
|
+
: null, props.error !== null ? React.createElement('div', { style: S.error }, props.error) : null, props.notice !== null ? React.createElement('div', { style: S.okText, 'data-ilife-notice': 'line' }, props.notice) : null, overlay,
|
|
855
|
+
// #1160 T1:按压+焦点双环的样式只此一枚 <style>,放末位(首位会顶掉 kidsOf(card)[0]===head 的既有判据)。
|
|
856
|
+
React.createElement('style', { 'data-ilife-interaction': 't1' }, interactionCss()));
|
|
736
857
|
}
|
|
737
858
|
/** 状态点的底色:三档状态色 + 默认灰(照真源 `.is-ok/.is-warn/.is-bad` 与 `.ic-dot` 的默认档)。 */
|
|
738
859
|
const STATUS_DOT_COLOR = {
|
|
@@ -747,6 +868,9 @@ export function StatusBlock(props) {
|
|
|
747
868
|
key: action.text,
|
|
748
869
|
style: index === 0 ? { ...S.btnPick, marginLeft: 'auto' } : S.btnPick,
|
|
749
870
|
type: 'button',
|
|
871
|
+
// #1160 T1:按压收缩+焦点双环(状态行动作钮同口径)。
|
|
872
|
+
'data-ilife-press': 'status-action',
|
|
873
|
+
'data-ilife-longpress': 'status-action',
|
|
750
874
|
onClick: action.onPress,
|
|
751
875
|
}, action.text))), React.createElement('div', { style: S.statusFind }, props.path === null
|
|
752
876
|
// #981:状态行路径位恢复真源定宽 180px(v3.1 `:422`),不跟面板走。
|
|
@@ -755,6 +879,13 @@ export function StatusBlock(props) {
|
|
|
755
879
|
? null
|
|
756
880
|
: React.createElement('span', { style: S.statusVersion }, props.version)), props.link === undefined
|
|
757
881
|
? null
|
|
758
|
-
: React.createElement('a', {
|
|
882
|
+
: React.createElement('a', {
|
|
883
|
+
style: S.statusUrl,
|
|
884
|
+
href: props.link.href,
|
|
885
|
+
target: '_blank',
|
|
886
|
+
rel: 'noreferrer',
|
|
887
|
+
// #1160 T1:键盘焦点双环(链接只给焦点,不收缩)。
|
|
888
|
+
'data-ilife-focus': 'status-link',
|
|
889
|
+
}, props.link.text));
|
|
759
890
|
}
|
|
760
891
|
//# sourceMappingURL=config-panel-view.js.map
|