dsh-plugin-core 0.2.4 → 0.2.5
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/ui/FieldHint.d.ts +7 -1
- package/dist/ui/FieldHint.d.ts.map +1 -1
- package/dist/ui/FieldHint.js +30 -11
- package/dist/ui/FieldHint.js.map +1 -1
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +1 -0
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/tooltip.d.ts +29 -0
- package/dist/ui/tooltip.d.ts.map +1 -0
- package/dist/ui/tooltip.js +10 -0
- package/dist/ui/tooltip.js.map +1 -0
- package/docs/design/features/ui.md +11 -0
- package/package.json +1 -1
package/dist/ui/FieldHint.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { createElement as h, type CSSProperties } from 'react';
|
|
2
2
|
export interface FieldHintProps {
|
|
3
|
-
/** 气泡里的说明文字(也是读屏播报的 aria-label
|
|
3
|
+
/** 气泡里的说明文字(也是读屏播报的 aria-label);`\n` 是真实换行。 */
|
|
4
4
|
text: string;
|
|
5
|
+
/** 气泡方位(注入路径走官方;默认 top)。 */
|
|
6
|
+
side?: 'top' | 'bottom' | 'right';
|
|
7
|
+
/** 上 / 下气泡的水平对齐(注入路径走官方)。 */
|
|
8
|
+
align?: 'center' | 'end';
|
|
9
|
+
/** 气泡宽度上限 px(注入路径走官方)。 */
|
|
10
|
+
maxWidth?: number;
|
|
5
11
|
/** 追加 class。 */
|
|
6
12
|
className?: string;
|
|
7
13
|
/** 追加样式(只允许补布局)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldHint.d.ts","sourceRoot":"","sources":["../../src/ui/FieldHint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FieldHint.d.ts","sourceRoot":"","sources":["../../src/ui/FieldHint.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AAE9D,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAA;IACjC,6BAA6B;IAC7B,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,mCAAmC;AACnC,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAgCrE"}
|
package/dist/ui/FieldHint.js
CHANGED
|
@@ -2,26 +2,45 @@
|
|
|
2
2
|
* 问号提示 —— **全站唯一实现、独立组件**(L2,P4)
|
|
3
3
|
*
|
|
4
4
|
* ⚠️ 它**不属于 Input 家族**:任何地方都能挂——表单行尾、标题后面、卡片角落……
|
|
5
|
-
* 调用点自己把它排进自己的 flex / label 里即可(组件只是
|
|
5
|
+
* 调用点自己把它排进自己的 flex / label 里即可(组件只是 14px 的内联图标 + 气泡)。
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* h('label', null, '开始时间', h(FieldHint, { text: '任务自该日起开始执行……' }), h(Input, {...}))
|
|
12
|
-
* h('div', null, h('b', null, '附加文件'), h(FieldHint, { text: '会随任务一起派发给 Agent……' }))
|
|
7
|
+
* 气泡的渲染分两条路(2026-10-19 用户拍板「必须和悬停提示用**同一个**」):
|
|
8
|
+
* - 插件启动时注入了官方 Tooltip(`setTooltipRenderer`,demo 已注入)⇒ 气泡由**官方组件本体**渲染,
|
|
9
|
+
* 定位 / 边界回避 / 明暗用色全归官方;
|
|
10
|
+
* - 未注入(node 自检、非宿主预览)⇒ 降级自绘气泡(HINT_CSS,皮肤与官方对齐,含 `\n` 换行)。
|
|
13
11
|
*/
|
|
14
12
|
import { ensureControls } from './css.js';
|
|
13
|
+
import { getTooltipRenderer } from './tooltip.js';
|
|
15
14
|
import { createElement as h } from 'react';
|
|
16
15
|
/** 问号提示图标:hover / focus 浮出说明气泡。 */
|
|
17
16
|
export function FieldHint(props) {
|
|
18
17
|
ensureControls();
|
|
18
|
+
const { text, side, align, maxWidth, className, style } = props;
|
|
19
|
+
// 官方往子元素挂 ref / 事件 ⇒ 锚点必须是真实 DOM 元素(兄弟仓踩过两次的坑),这里恒为原生 span。
|
|
20
|
+
const anchor = h('span', {
|
|
21
|
+
className: `dshpc-hint${className !== undefined && className !== '' ? ` ${className}` : ''}`,
|
|
22
|
+
style,
|
|
23
|
+
tabIndex: 0,
|
|
24
|
+
role: 'note',
|
|
25
|
+
'aria-label': text,
|
|
26
|
+
}, '?');
|
|
27
|
+
const renderer = getTooltipRenderer();
|
|
28
|
+
if (renderer !== undefined) {
|
|
29
|
+
return renderer({
|
|
30
|
+
label: text,
|
|
31
|
+
side: side ?? 'top',
|
|
32
|
+
...(align !== undefined ? { align } : {}),
|
|
33
|
+
...(maxWidth !== undefined ? { maxWidth } : {}),
|
|
34
|
+
children: anchor,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
// 降级:自绘气泡(皮肤已对齐官方:--dshpc-tooltip-bg + pre-line)
|
|
19
38
|
return h('span', {
|
|
20
|
-
className: `dshpc-hint${
|
|
21
|
-
style
|
|
39
|
+
className: `dshpc-hint${className !== undefined && className !== '' ? ` ${className}` : ''}`,
|
|
40
|
+
style,
|
|
22
41
|
tabIndex: 0,
|
|
23
42
|
role: 'note',
|
|
24
|
-
'aria-label':
|
|
25
|
-
}, '?', h('span', { className: 'dshpc-hint__bubble', role: 'tooltip' },
|
|
43
|
+
'aria-label': text,
|
|
44
|
+
}, '?', h('span', { className: 'dshpc-hint__bubble', role: 'tooltip' }, text));
|
|
26
45
|
}
|
|
27
46
|
//# sourceMappingURL=FieldHint.js.map
|
package/dist/ui/FieldHint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldHint.js","sourceRoot":"","sources":["../../src/ui/FieldHint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"FieldHint.js","sourceRoot":"","sources":["../../src/ui/FieldHint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,aAAa,IAAI,CAAC,EAAsB,MAAM,OAAO,CAAA;AAiB9D,mCAAmC;AACnC,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,cAAc,EAAE,CAAA;IAChB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IAC/D,4DAA4D;IAC5D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE;QACvB,SAAS,EAAE,aAAa,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5F,KAAK;QACL,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,IAAI;KACnB,EAAE,GAAG,CAAC,CAAA;IACP,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAA;IACrC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;YACd,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI,IAAI,KAAK;YACnB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAA;IACJ,CAAC;IACD,iDAAiD;IACjD,OAAO,CAAC,CAAC,MAAM,EAAE;QACf,SAAS,EAAE,aAAa,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5F,KAAK;QACL,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,IAAI;KACnB,EACC,GAAG,EACH,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,CACtE,CAAA;AACH,CAAC"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { MarqueeText } from './MarqueeText.js';
|
|
|
17
17
|
export { Loading, RunningBlocks, type LoadingProps } from './Loading.js';
|
|
18
18
|
export { SectionHead } from './SectionHead.js';
|
|
19
19
|
export { FieldHint, type FieldHintProps } from './FieldHint.js';
|
|
20
|
+
export { getTooltipRenderer, setTooltipRenderer, type TooltipRenderProps, type TooltipRenderer, } from './tooltip.js';
|
|
20
21
|
export { LiveText } from './LiveText.js';
|
|
21
22
|
export { BackToTop, type BackToTopProps } from './BackToTop.js';
|
|
22
23
|
export { startResizeLayoutWidth, type ResizeOptions } from './resizer.js';
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
|
package/dist/ui/index.js
CHANGED
|
@@ -20,6 +20,7 @@ export { MarqueeText } from './MarqueeText.js';
|
|
|
20
20
|
export { Loading, RunningBlocks } from './Loading.js';
|
|
21
21
|
export { SectionHead } from './SectionHead.js';
|
|
22
22
|
export { FieldHint } from './FieldHint.js';
|
|
23
|
+
export { getTooltipRenderer, setTooltipRenderer, } from './tooltip.js';
|
|
23
24
|
export { LiveText } from './LiveText.js';
|
|
24
25
|
export { BackToTop } from './BackToTop.js';
|
|
25
26
|
export { startResizeLayoutWidth } from './resizer.js';
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,sDAAsD;AACtD,gDAAgD;AAChD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,GAGZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAqC,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAkD,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,GAGhB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,GAGV,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAkB,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAA+E,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAMf,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,sDAAsD;AACtD,gDAAgD;AAChD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,GAGZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAqC,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAkD,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,GAGhB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,GAGV,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAkB,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAA+E,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAMf,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 官方 Tooltip 的注入位 —— core 不许静态依赖 `@deepseek-ai/*`(硬约束:官方包只在宿主内核可解析,
|
|
3
|
+
* 静态 import 会让整个入口在宿主外直接崩),但「问号提示」的气泡又必须和官方悬停提示**用同一个**。
|
|
4
|
+
*
|
|
5
|
+
* 解法 = 依赖注入:插件启动时调一次 {@link setTooltipRenderer},把官方 Tooltip 交给 core;
|
|
6
|
+
* FieldHint 渲染气泡时走注入的 renderer(即官方组件本体),没注入的环境(node 自检、
|
|
7
|
+
* 非宿主预览)自动降级为自绘气泡(HINT_CSS,皮肤与官方对齐)。
|
|
8
|
+
*/
|
|
9
|
+
import type { ReactElement } from 'react';
|
|
10
|
+
/** 传给注入 renderer 的参数:与官方 Tooltip 的 props 同名同义,注入方可以直接展开透传。 */
|
|
11
|
+
export interface TooltipRenderProps {
|
|
12
|
+
/** 气泡文本。文本里的 `\n` 是真实换行(官方气泡 white-space: pre-line)。 */
|
|
13
|
+
label: string;
|
|
14
|
+
/** 气泡方位(官方只有上 / 下 / 右,没有左)。默认 top。 */
|
|
15
|
+
side?: 'top' | 'bottom' | 'right';
|
|
16
|
+
/** 上 / 下气泡的水平对齐;官方仅 center | end。 */
|
|
17
|
+
align?: 'center' | 'end';
|
|
18
|
+
/** 气泡宽度上限(px),长文本靠它折行。 */
|
|
19
|
+
maxWidth?: number;
|
|
20
|
+
/** 锚点元素:必须是能挂 ref 的真实 DOM 元素(官方往子元素挂 ref,函数组件挂不上)。 */
|
|
21
|
+
children: ReactElement;
|
|
22
|
+
}
|
|
23
|
+
/** 注入方签名:`h(OfficialTooltip, props)` 的薄包装。 */
|
|
24
|
+
export type TooltipRenderer = (props: TooltipRenderProps) => ReactElement;
|
|
25
|
+
/** 注入官方 Tooltip(插件启动时调一次;传 undefined 撤销,回到自绘降级)。 */
|
|
26
|
+
export declare function setTooltipRenderer(fn: TooltipRenderer | undefined): void;
|
|
27
|
+
/** 当前注入的 renderer;未注入返回 undefined(FieldHint 据此走降级路径)。 */
|
|
28
|
+
export declare function getTooltipRenderer(): TooltipRenderer | undefined;
|
|
29
|
+
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/ui/tooltip.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEzC,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,sCAAsC;IACtC,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAA;IACjC,qCAAqC;IACrC,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sDAAsD;IACtD,QAAQ,EAAE,YAAY,CAAA;CACvB;AAED,8CAA8C;AAC9C,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,YAAY,CAAA;AAIzE,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAExE;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,SAAS,CAEhE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
let renderer;
|
|
2
|
+
/** 注入官方 Tooltip(插件启动时调一次;传 undefined 撤销,回到自绘降级)。 */
|
|
3
|
+
export function setTooltipRenderer(fn) {
|
|
4
|
+
renderer = fn;
|
|
5
|
+
}
|
|
6
|
+
/** 当前注入的 renderer;未注入返回 undefined(FieldHint 据此走降级路径)。 */
|
|
7
|
+
export function getTooltipRenderer() {
|
|
8
|
+
return renderer;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/ui/tooltip.ts"],"names":[],"mappings":"AA2BA,IAAI,QAAqC,CAAA;AAEzC,oDAAoD;AACpD,MAAM,UAAU,kBAAkB,CAAC,EAA+B;IAChE,QAAQ,GAAG,EAAE,CAAA;AACf,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,kBAAkB;IAChC,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -194,6 +194,17 @@ h(StripCard, {
|
|
|
194
194
|
|
|
195
195
|
### 反馈件
|
|
196
196
|
|
|
197
|
+
**FieldHint(问号提示)**:独立组件,不属于 Input 家族——标题后、按钮后、文字后、输入框后随处可挂。
|
|
198
|
+
气泡渲染走两条路(2026-10-19 拍板「必须与悬停提示**用同一个**」):
|
|
199
|
+
|
|
200
|
+
- 插件启动时 `setTooltipRenderer((props) => h(OfficialTooltip, props))` 把官方 Tooltip 交给 core
|
|
201
|
+
⇒ 气泡 = **官方组件本体**(定位 / 边界回避 / 明暗用色全归官方),`side` / `align` / `maxWidth` 可选透传;
|
|
202
|
+
- 未注入(node 自检、非宿主预览)⇒ 降级自绘气泡(皮肤与官方对齐,`white-space: pre-line` ⇒ `\n` 是真实换行)。
|
|
203
|
+
|
|
204
|
+
core 保持零官方依赖:官方 Tooltip 只能由插件侧注入(`src/ui/tooltip.ts`),不许静态 import。
|
|
205
|
+
|
|
206
|
+
### 反馈件
|
|
207
|
+
|
|
197
208
|
| 组件 / 函数 | 说明 |
|
|
198
209
|
|---|---|
|
|
199
210
|
| `showToast(message, opts?)` | **命令式**,不要求挂组件。`opts: { variant?: 'info' \| 'success' \| 'error', durationMs? }`(默认 2600ms)。无 `document` 静默跳过 |
|
package/package.json
CHANGED