dsh-life-pack 0.3.6 → 0.3.13

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.
@@ -0,0 +1,294 @@
1
+ /** 共用配置面板 · 视图半:一行怎么画(`Row`)、整面怎么画(`PanelBody`)。
2
+ *
3
+ * 本件是**纯函数**:吃一份状态与一组回调,回一棵 React 元素树,自己不留任何状态、不取任何数。
4
+ * 为什么这么分:状态机与副作用住在 `config-panel.ts` 那一层,于是本件在 Node 里就能直测
5
+ * (照 `directory-browser-ui.ts` 的既有作法:用例把组件当普通函数调,直接读回那棵树)。
6
+ *
7
+ * 手写 `React.createElement`(本包 client 束禁 JSX)。样式表 `S` 就在本件里——面板怎么画只有这一处。
8
+ *
9
+ * **外观真源=`docs/agents/配置区域视觉模型-v3.1.html`(#920 阶段二起)**:本件的 `S` 逐项照它的
10
+ * CSS(`:32-205`)、行模板照它的 `rowShell`/`masterShell`/`cardShell`(`:349-451`)、状态徽标照它的
11
+ * `badgeHTML`(`:544-552`)那七档。**颜色/间距/圆角/字号/层级一律照取值,不许自己重新设计**;
12
+ * 与本件不同的只有下面这四条(每条都在这里写明为什么,改之前先读 #920 的证据件):
13
+ * ① **字号一律 em,没有 px**:跨包锁 `test/panel-type-739.test.mjs` 钉死「零 `font:` 简写/零字族/
14
+ * 字号一律相对单位」——宿主没有界面字号 token,绝对 px 会在别的窗口尺寸上失真。v3.1 的 px 按它
15
+ * 自己已锁死的那两对锚点换算(`13.5px↔1.08em`、`11.5px↔0.92em` ⇒ **1px=0.08em**),一个不丢。
16
+ * ② **值列不写等宽字族**:v3.1 的值列要 `font-family: var(--ic-mono)`,而 `#739 ①` 明令共用件零
17
+ * `fontFamily`/零 `font:` 简写 ⇒ 值继承宿主字族。这是与 v3.1 的**一处已知不同**(#920 证据件有账)。
18
+ * ③ **换行判据交给 CSS,不按字符数估宽**:v3.1 靠 JS 量文本宽在两套模板间两选一(审查 P0-4/P0-5:
19
+ * 每列 6.048px、真阈值 40–43 列而注释按 34 估 ⇒ 9 行被无谓拆两行、快面一次性长高 194px)。
20
+ * 本件没有 DOM 可量,故照审查给的修法把同一个决定交给排版引擎:行是 `flex-wrap` 容器,标签列定宽、
21
+ * 值列 `flex-basis:auto`(=内容的自然宽)——装不下时**整行让位**(值落第二行、按钮仍在第一行行尾,
22
+ * 与 v3.1 的 `.is-wide` 同形);值再长就在自己那一行里 `overflow-wrap:anywhere` 折下去。
23
+ * **零省略号、零截断**(`white-space` 不用 `nowrap`、`text-overflow` 一次都不出现)。
24
+ * ④ **画不出来的三样**用等价形态顶上:分组箭头 `::before`/`[open]` 旋转/keyframes 动画内联样式
25
+ * 给不出 ⇒ 画静态「›」与静态环(形状与 v3.1 同,只少了动)。
26
+ *
27
+ * 三条定稿(v3)在本件落地:
28
+ * ① **只读行的目录按钮不画**(不画一枚点了也没反应的死按钮);
29
+ * ② 目录行的按钮字面**两档合一**,一律「浏览文件夹」(入口供不了时整枚不画);
30
+ * ③ **每行一枚「复制」**:复制这一行完好的值文本;点下去按钮就地变「已复制」再变回,不弹提示。
31
+ *
32
+ * 对外只经 `config-panel-api.ts` 那一道门;本件自己不出门。
33
+ */
34
+ import * as React from 'react';
35
+ import type { ConfigItem, ConfigSurfaceReply } from './config-panel-contract.js';
36
+ import type { DirectoryRowBrowser } from './directory-browser-state.js';
37
+ import type { DirectoryRowEntry } from './directory-browser-api.js';
38
+ /** 面板的样式表:取值逐项照 v3.1(颜色走 DSH 主题别名,写死值只做回退;字号一律相对单位 em)。
39
+ *
40
+ * 键名一个都不许改:六家附加块真消费 `okText`/`error`/`rows`/`label`/`muted`/`hint`/`info`/
41
+ * `bar`/`btn` 这九格(`plugin-memo-ilife/src/client.ts`、`plugin-schedule-ilife/src/client.ts` 的
42
+ * `PanelStyleSlots`),跨包锁另钉 `card`/`input`/`btnPrimary`/`btnPick`/`summary`/`title`/`version`。 */
43
+ declare const S: {
44
+ /** `.ic-card`:`background:var(--ic-surface)`(=bg-layer-1)+`border:1px solid var(--ic-line-strong)`
45
+ * +`border-radius:12px`+`padding:14px`+`box-shadow:inset 0 1px 0 rgba(255,255,255,.06)`。
46
+ * 基准字号**不钉在卡片上**(#739 ⑤:跟着宿主走)。 */
47
+ card: React.CSSProperties;
48
+ /** `.ic-head{display:flex;align-items:center;gap:10px;min-height:22px}`(徽标靠 `margin-left:auto` 右贴)。 */
49
+ head: React.CSSProperties;
50
+ /** `.ic-title{font-size:13.5px;font-weight:640}`——字号按 60 行那条锚点换算成 `1.08em`。 */
51
+ title: React.CSSProperties;
52
+ /** `.ic-file{margin-top:4px}` 的那 4px 挂在两行的公共容器上:`info` 自己一格 margin 都不写
53
+ * (#743 ①:头部两行间距不一家一个数,故这一项一律不写 margin)。 */
54
+ fileWrap: React.CSSProperties;
55
+ /** `.ic-file b{color:var(--ic-faint);font-weight:400;margin-right:5px}`(「配置文件」「数据目录」那两个字)。 */
56
+ fileLabel: React.CSSProperties;
57
+ /** `.ic-file{color:var(--ic-muted);font-size:11.5px;word-break:break-all}`(11.5px ⇒ `0.92em`)。 */
58
+ info: React.CSSProperties;
59
+ /** `.ic-muted` 那一档(次要字)。 */
60
+ muted: React.CSSProperties;
61
+ /** 错误字:取 v3.1 的 `--ic-danger`;字号 `1em`(#739 钉死)。 */
62
+ error: React.CSSProperties;
63
+ /** 成功字:取 v3.1 的 `--ic-ok`;字号 `0.96em`(#739 钉死)。 */
64
+ okText: React.CSSProperties;
65
+ /** 行组的容器(六家附加块也拿它当外框;v3.1 没有对应类,故只给一个中性块)。 */
66
+ rows: React.CSSProperties;
67
+ /** `.ic-row`:三列栅格 + `gap:4px 10px` + `padding:7px 0` + 一条 `.ic-line` 下边线。
68
+ * 本件把它落成**换行弹性盒**(见文件头 ③):标签定宽在第一行,值装不下时整行让位,
69
+ * 动作槽绝对定位贴在行尾(`.ic-row .ic-slot[data-slot^="a:"]` 那一格)。 */
70
+ row: React.CSSProperties;
71
+ /** `.ic-row:last-child{border-bottom:0}`——内联样式没有 `:last-child`,由画它的人明说。 */
72
+ rowLast: React.CSSProperties;
73
+ /** `.ic-under{margin:9px 0 0 8px;border-left:1px solid var(--ic-line-strong);padding-left:13px}`:
74
+ * **跟随行**相对它的可改行(母版行)缩进 8+1+13=**22px**,左边挂一条线。
75
+ *
76
+ * 取值逐字照抄;只有一处形态差别要说清:`.ic-under` 在 v3.1 里是**一整块**(同一个可改行的一批
77
+ * 跟随者共用一个 div、共一条左边线、块首还有 9px 上边距),而共用件手上只有「谁是跟随行」这一个
78
+ * 集合(由六家交的 `followKeysOf` 钩子逐键探出),**没有**「这一行归哪一块」的分块归属
79
+ * (同一个键可以同时挂在两张跟随表上,钩子只回一个去重后的并集)。故这里按**行**落这条缩进:
80
+ * 缩进量与左边线同值,块首那 9px 上边距不落(落下去会在每两行之间多出一道 9px 的缝)。 */
81
+ followerRow: React.CSSProperties;
82
+ /** 跟随行的最后一行:同上,去掉下边线(照 `.ic-row:last-child{border-bottom:0}`)。 */
83
+ followerRowLast: React.CSSProperties;
84
+ /** `.ic-row .ic-k{font-size:11.5px;color:var(--ic-muted)}`;`--ic-kw:118px` 是标签列的定宽。 */
85
+ rowKey: React.CSSProperties;
86
+ /** `.ic-row .ic-v{font-size:11px;min-width:0}`(11px ⇒ `0.88em`)+ 文件头 ③ 的让位口径:
87
+ * `flex:1 1 auto` ⇒ 装不下整行让位;`overflow-wrap:anywhere` ⇒ 折下去、零省略号;
88
+ * `paddingRight` 给行尾那枚按钮(+列间距)让出宽度——就是 `.ic-row` 第三列那一格。 */
89
+ rowValue: React.CSSProperties;
90
+ /** 行尾动作槽(复制/跟随标记):绝对定位贴行尾,行一换行它仍留在第一行行尾(=`.is-wide` 那一形)。 */
91
+ rowActs: React.CSSProperties;
92
+ /** `.ic-follow{font-size:11px;color:var(--ic-attn);white-space:nowrap}`(11px ⇒ `0.88em`)。 */
93
+ follow: React.CSSProperties;
94
+ /** `.ic-follow::before{content:'↳';opacity:.8}`——内联样式给不出伪元素,画成真的那一个字符。 */
95
+ followMark: React.CSSProperties;
96
+ /** `.ic-master`:母版行那一块盒子(`--ic-sunken` 底 + `border-radius:8px` + `padding:11px 12px`
97
+ * + `margin-top:11px` + 内高光)。 */
98
+ master: React.CSSProperties;
99
+ /** `.ic-master .ic-lab{font-weight:600;display:flex;align-items:center;gap:7px}`;
100
+ * 字号**不写**(#739 ④:`label` 这一项该继承宿主字号)。 */
101
+ label: React.CSSProperties;
102
+ /** `.ic-chip{font-size:10.5px;border:1px solid var(--ic-accent);border-radius:999px;padding:0 6px}`(10.5px ⇒ `0.84em`)。 */
103
+ chip: React.CSSProperties;
104
+ /** `.ic-master .ic-hint{color:var(--ic-muted);font-size:11.5px;margin-top:3px;line-height:1.5}`。 */
105
+ hint: React.CSSProperties;
106
+ /** `.ic-master input`:整行宽、`margin-top:7px`、`padding:5px 8px`、`--ic-bg` 底、`--ic-line-strong` 描边、
107
+ * `border-radius:6px`。字号与字族**不写**(#739 ④/①:`input` 继承宿主)。 */
108
+ input: React.CSSProperties;
109
+ /** `.ic-master input.is-dirty`:`border:2px solid var(--ic-attn)` + `padding:4px 7px`
110
+ * + `box-shadow:0 0 0 3px <琥珀 22%>`;2px 描边与 5→4 的内边距对消,宽高不变
111
+ * (审查「站得住」第 7 条)。 */
112
+ inputDirty: React.CSSProperties;
113
+ /** 布尔档那枚方框(v3.1 的母版行只有文本框,这一格按输入框的同一套外边距对齐)。 */
114
+ checkbox: React.CSSProperties;
115
+ /** `.ic-acts{display:flex;gap:5px;margin-top:7px;flex-wrap:wrap;align-items:center}`(母版行的按钮行)。 */
116
+ acts: React.CSSProperties;
117
+ /** `.ic-btn.is-mini{font-size:11px;padding:2px 7px;color:var(--ic-muted)}`——`btnPick` 是锁钉死的那一格,
118
+ * 字号**不写**(#739 ④:该继承宿主字号),形状照 v3.1。 */
119
+ btnPick: React.CSSProperties;
120
+ /** `.ic-invalid{margin-top:7px;padding:7px 9px;border-radius:6px;font-size:11.5px;line-height:1.5;
121
+ * background:color-mix(in srgb, var(--ic-attn) 16%, transparent);border:1px solid var(--ic-attn)}`。 */
122
+ invalid: React.CSSProperties;
123
+ /** `.ic-group{margin-top:14px}`(高级组默认收起)。 */
124
+ advanced: React.CSSProperties;
125
+ /** `.ic-group > .ic-ghead{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;
126
+ * font-weight:600;padding:2px 0}`——字号**不写**(#739 ④:`summary` 该继承宿主字号)。 */
127
+ summary: React.CSSProperties;
128
+ /** `.ic-ghead::before{content:'›';color:var(--ic-muted)}`——画成真的那一个字符(内联样式给不出伪元素)。 */
129
+ groupMark: React.CSSProperties;
130
+ /** `.ic-ghead .ic-gnote{color:var(--ic-faint);font-weight:400;font-size:11.5px}`(11.5px ⇒ `0.92em`)。 */
131
+ groupNote: React.CSSProperties;
132
+ /** `.ic-group > .ic-gbody{margin-top:9px;padding:11px 12px;background:var(--ic-sunken);
133
+ * border-radius:8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}`。 */
134
+ groupBody: React.CSSProperties;
135
+ /** `.ic-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:14px;padding-top:12px;
136
+ * border-top:1px solid var(--ic-line)}` + **贴下沿吸住**(v3.1 的 `.ic-attnbar.is-sticky` 是它唯一的
137
+ * 吸底口径:`position:sticky;bottom:6px;z-index:3`;本票按票面「贴下沿」取 0,好让底栏与下沿齐平)。 */
138
+ bar: React.CSSProperties;
139
+ /** `.ic-bar .ic-note{margin-left:auto;color:var(--ic-faint);font-size:11.5px}`(就绪态那半句)。 */
140
+ barNote: React.CSSProperties;
141
+ /** 有改动时底栏那半句(黄字,粘在按钮组左侧)。 */
142
+ saveMsg: React.CSSProperties;
143
+ /** `.ic-btn{font-size:12px;padding:4px 10px;border-radius:6px;border:1px solid var(--ic-line-strong);
144
+ * background:transparent;color:var(--ic-text)}`——字号**不写**(#739 ④)。 */
145
+ btn: React.CSSProperties;
146
+ /** `.ic-btn.is-primary{background:var(--ic-accent);border-color:var(--ic-accent);color:var(--ic-accent-ink);
147
+ * font-weight:500}`——`--ic-accent` 取 `--dsw-alias-brand-primary`,前景取 `label-primary-foreground`。 */
148
+ btnPrimary: React.CSSProperties;
149
+ /** 附加块(版本行/状态行)那份字面:`--ic-faint` + `0.92em`(#739 ③ 钉死这一格)。 */
150
+ version: React.CSSProperties;
151
+ /** `.ic-badge{font-size:11px;line-height:1;padding:4px 9px;border-radius:999px;white-space:nowrap;
152
+ * display:inline-flex;align-items:center;gap:6px;border:1px solid transparent}`(11px ⇒ `0.88em`)。 */
153
+ badge: React.CSSProperties;
154
+ /** `.ic-badge .ic-bd{width:6px;height:6px;border-radius:50%;background:currentColor}`。 */
155
+ badgeDot: React.CSSProperties;
156
+ /** `.ic-spin{width:11px;height:11px;border-radius:50%;border:1.5px solid rgba(0,0,0,.25);
157
+ * border-top-color:currentColor}`——旋转那半要 `@keyframes`(内联样式给不出),故只画环。 */
158
+ badgeSpinner: React.CSSProperties;
159
+ /** `.ic-badge.is-dirty`:`--ic-attn` 实底 + `--ic-attn-ink` 深字(那 3:1 是设计专门解过的对比度)。 */
160
+ badgeDirty: React.CSSProperties;
161
+ /** `.ic-badge.is-busy`:与 dirty 同色(写的时候还在那一档上)。 */
162
+ badgeBusy: React.CSSProperties;
163
+ /** `.ic-badge.is-ok{color:var(--ic-ok);border-color:var(--ic-ok);background:color-mix(in srgb, var(--ic-ok) 14%, transparent)}`。 */
164
+ badgeOk: React.CSSProperties;
165
+ /** `.ic-badge.is-bad{color:var(--ic-danger-ink);background:var(--ic-danger);border-color:var(--ic-danger)}`。 */
166
+ badgeBad: React.CSSProperties;
167
+ };
168
+ /** 样式表的形状(附加块照面板的视觉写,不各写一套内联样式)。 */
169
+ export type ConfigStyles = typeof S;
170
+ /** 附加块拿到的那两格。 */
171
+ export interface PanelParts {
172
+ /** 面板自己的样式表。 */
173
+ readonly styles: ConfigStyles;
174
+ /** 配置面整面回执;还没读到(读取中/读取失败)时为 null。 */
175
+ readonly reply: ConfigSurfaceReply | null;
176
+ }
177
+ /** 一行点「复制」之后就地显示成哪一档字面。 */
178
+ export type CopyState = 'idle' | 'done' | 'failed';
179
+ /** 复制那一枚按钮的字面(定稿 v3 第三条:就地变,不弹提示)。 */
180
+ export declare function copyLabelOf(state: CopyState | undefined): string;
181
+ /** 面板状态徽标那七档(v3.1 的 `SKILL_STATES` 与 `badgeHTML` 逐档对应)。
182
+ *
183
+ * 七档的落点各不相同:`readFailed` 不画徽标——它把整面换成「一整屏错误 + 恰两枚按钮」那一支;
184
+ * `ready`(就绪)也不画(v3.1 的 `badgeHTML` 在就绪态回空串);其余五档画在卡片标题行右端。 */
185
+ export type PanelBadge = 'ready' | 'dirty' | 'busy' | 'saved' | 'invalid' | 'writeFailed' | 'readFailed';
186
+ /** 算徽标要看的几格事实(全是面板已经拿到的东西,不另取数)。 */
187
+ export interface BadgeFacts {
188
+ readonly readFailed: boolean;
189
+ readonly busy: boolean;
190
+ readonly writeFailed: boolean;
191
+ /** 技能侧报出「配置里有值用不了」这一事实(#915 第二步落地前恒为 false,见票面「遗留出口」)。 */
192
+ readonly invalid: boolean;
193
+ readonly dirtyCount: number;
194
+ readonly saved: boolean;
195
+ }
196
+ /** 状态 → 徽标那一档(v3.1 `paint()` 里的先后次序:读取失败/写入中/写入失败/值非法/有改动/已保存/就绪)。 */
197
+ export declare function panelBadgeOf(facts: BadgeFacts): PanelBadge;
198
+ /** 徽标那一档画的字(v3.1 `badgeHTML` 的字面,只把「已保存 · 刚刚」的演示时刻换成档名)。 */
199
+ export declare function badgeTextOf(kind: PanelBadge, dirtyCount: number): string;
200
+ /** 画卡片标题行右端那枚状态徽标(就绪态与读取失败那一支不画)。 */
201
+ export declare function PanelBadgeView(props: {
202
+ readonly kind: PanelBadge;
203
+ readonly dirtyCount: number;
204
+ }): React.ReactElement | null;
205
+ export interface RowProps {
206
+ readonly item: ConfigItem;
207
+ readonly value: string;
208
+ readonly disabled: boolean;
209
+ readonly onChange: (key: string, next: string) => void;
210
+ /** 目录行才有:入口三态(`native`/`browse`/`none`)。 */
211
+ readonly browser?: DirectoryRowEntry | null | undefined;
212
+ /** 脏行:这一行与刚读到的整面不一致时画标记。 */
213
+ readonly dirty?: boolean;
214
+ /** 跟随行:只读派生行在触发键变脏时给「将跟随更新」态。 */
215
+ readonly follow?: boolean;
216
+ /** 点这一行的「复制」:把该行的值文本交出去。
217
+ * 定稿 v3 要求每行一枚,所以按钮**一律画**;这一格缺席时按钮 `disabled` 而不是点了就炸
218
+ * (面板那边永远给这一格,缺席只可能是别的调用点少交了东西)。 */
219
+ readonly onCopy?: ((key: string, text: string) => void) | undefined;
220
+ /** 复制那一枚按钮当刻的字面(不给=「复制」)。 */
221
+ readonly copyState?: CopyState | undefined;
222
+ /** 技能侧报出的「这一行真用不了」(#915 第二步):给了就原样画 `message`,不比较、不合成。
223
+ * 缺席=这一行没问题,什么都不画。 */
224
+ readonly alert?: {
225
+ readonly code: string;
226
+ readonly message: string;
227
+ } | null | undefined;
228
+ /** 这一行是所在那一组的最后一行(v3.1 的 `.ic-row:last-child{border-bottom:0}`;
229
+ * 内联样式没有 `:last-child`,行序是客户端常量,故由画整面的人算好交进来)。 */
230
+ readonly last?: boolean | undefined;
231
+ /** **跟随行**:这一行跟着某个可改行变(静态关系,与当刻脏不脏无关)⇒ 照 v3.1 的 `.ic-under`
232
+ * 相对那个可改行缩进 22px、左边挂一条线。只读行才用得上(可改行自己是母版行,不缩进)。 */
233
+ readonly nested?: boolean | undefined;
234
+ }
235
+ /** 一行怎么画(照 v3.1 的两套行模板):
236
+ *
237
+ * **只读行**(`.ic-row`)=标签—值同行、值装不下整行让位、行尾一枚「复制」——**不画输入框**
238
+ * (值来自技能侧解析,页面上本来就不给改),也不画那行说明(v3.1 的 `rowShell` 里没有它)。
239
+ * **可改行**(`.ic-master`)=标签 +「可改」小徽标 + 说明 + 整行输入框 + 按钮行。
240
+ *
241
+ * 目录档=文本框 + 一枚唤起目录选择的按钮;入口三态是 `none`(命名空间拿不到、或这条路已被拒)
242
+ * **就不画按钮**,文本框照旧——那是该缝自己的契约(供不了就收起入口,不是失败)。
243
+ * 只读行:目录入口**一枚都不画**(定稿 v3 ①)。 */
244
+ export declare function Row(props: RowProps): React.ReactElement;
245
+ /** 面板状态:读取中/就绪/整面读取失败。 */
246
+ export type PanelState = {
247
+ readonly kind: 'loading';
248
+ } | {
249
+ readonly kind: 'ready';
250
+ readonly surface: ConfigSurfaceReply;
251
+ } | {
252
+ readonly kind: 'failed';
253
+ readonly message: string;
254
+ };
255
+ /** 整面的全部输入:状态 + 行表 + 各档回调(本件只读它、只回调)。 */
256
+ export interface PanelBodyProps {
257
+ /** 卡片标题(各家自己的产品名)。 */
258
+ readonly title: string | undefined;
259
+ readonly items: readonly ConfigItem[];
260
+ readonly state: PanelState;
261
+ readonly draft: Readonly<Record<string, string>>;
262
+ readonly busy: boolean;
263
+ /** 成功提示(已保存/已重置)。 */
264
+ readonly notice: string | null;
265
+ /** 写入失败那一支:落点在底栏紧下面(与「就地失败」分开摆)。 */
266
+ readonly writeError: string | null;
267
+ /** 就地失败那一支(选目录那类)。 */
268
+ readonly error: string | null;
269
+ readonly picking: boolean;
270
+ readonly browseRow: DirectoryRowBrowser | null;
271
+ readonly rowEntry: DirectoryRowEntry | null;
272
+ readonly dirtyKeys: readonly string[];
273
+ readonly followKeys: readonly string[];
274
+ /** **静态**跟随行名单(由各家交的 `followKeysOf` 钩子逐键探出来的,与当刻脏不脏无关):
275
+ * 名单里的只读行按 v3.1 的 `.ic-under` 缩进;空缺=一行都不缩进。 */
276
+ readonly followerKeys?: readonly string[] | undefined;
277
+ readonly copy: {
278
+ readonly key: string;
279
+ readonly ok: boolean;
280
+ } | null;
281
+ /** 技能侧报出的「配置里有值用不了」那一格事实(#915 第二步落地前缺席=不亮那一档)。 */
282
+ readonly invalid?: boolean | undefined;
283
+ readonly onCopy: (key: string, text: string) => void;
284
+ readonly onChange: (key: string, next: string) => void;
285
+ readonly onSave: () => void;
286
+ readonly onReset: () => void;
287
+ readonly onRetry: () => void;
288
+ /** 自家附加块(版本行/状态行):给了就画在面板主体之后、动作条之前。 */
289
+ readonly extra?: ((parts: PanelParts) => React.ReactNode) | undefined;
290
+ }
291
+ /** 画整面(四支控件、三支错误落位、底栏、附加块槽都在这里)。 */
292
+ export declare function PanelBody(props: PanelBodyProps): React.ReactElement;
293
+ export {};
294
+ //# sourceMappingURL=config-panel-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-panel-view.d.ts","sourceRoot":"","sources":["../src/config-panel-view.ts"],"names":[],"mappings":"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"}