dsh-plugin-core 0.14.2 → 0.15.1
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/QuickToolbar.d.ts +54 -0
- package/dist/ui/QuickToolbar.d.ts.map +1 -0
- package/dist/ui/QuickToolbar.js +254 -0
- package/dist/ui/QuickToolbar.js.map +1 -0
- package/dist/ui/controls/quick-toolbar-css.generated.d.ts +2 -0
- package/dist/ui/controls/quick-toolbar-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/quick-toolbar-css.generated.js +4 -0
- package/dist/ui/controls/quick-toolbar-css.generated.js.map +1 -0
- package/dist/ui/controls-css.d.ts +1 -1
- package/dist/ui/controls-css.d.ts.map +1 -1
- package/dist/ui/controls-css.js +1 -1
- package/dist/ui/controls-css.js.map +1 -1
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/quick-toolbar-logic.d.ts +76 -0
- package/dist/ui/quick-toolbar-logic.d.ts.map +1 -0
- package/dist/ui/quick-toolbar-logic.js +40 -0
- package/dist/ui/quick-toolbar-logic.js.map +1 -0
- package/dist/utils/i18n.d.ts +1 -1
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +4 -0
- package/dist/utils/i18n.js.map +1 -1
- package/docs/design/external/dsh-host.md +2 -2
- package/docs/design/structure.md +7 -4
- package/docs/help/ui.doc.ts +90 -2
- package/docs/help/ui.md +83 -2
- package/docs/requirements.md +1 -0
- package/package.json +1 -1
- package/dist/ui/BackToTop.d.ts +0 -8
- package/dist/ui/BackToTop.d.ts.map +0 -1
- package/dist/ui/BackToTop.js +0 -112
- package/dist/ui/BackToTop.js.map +0 -1
- package/dist/ui/controls/back-to-top-css.generated.d.ts +0 -2
- package/dist/ui/controls/back-to-top-css.generated.d.ts.map +0 -1
- package/dist/ui/controls/back-to-top-css.generated.js +0 -4
- package/dist/ui/controls/back-to-top-css.generated.js.map +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 快捷工具栏(UI 基础层):**右侧悬浮的一列圆钮**,内置「回到顶部」,并可挂自定义按钮。
|
|
3
|
+
*
|
|
4
|
+
* 用法:
|
|
5
|
+
* <QuickToolbar
|
|
6
|
+
* anchorId="dshpc-main"
|
|
7
|
+
* onAction={(id) => …}
|
|
8
|
+
* items={[{ id: 'search', icon: <SearchIcon />, label: '搜索' }]}
|
|
9
|
+
* />
|
|
10
|
+
*
|
|
11
|
+
* 行为(2026-10-31 用户拍板):
|
|
12
|
+
* - **纵向恒定**贴屏幕底边,距离 `offset`(默认 16px);按钮从下往上排。
|
|
13
|
+
* - **横向默认**贴屏幕右缘、留 `offset`;给了 `anchorId` / `anchor()` 就贴到那个控件的
|
|
14
|
+
* **右缘外侧**,同样留 `offset`。右侧放不下(再留一个 `offset` 后越界)就退回贴屏幕右缘。
|
|
15
|
+
* 控件找不到按「跟随窗口」处理,不报错。
|
|
16
|
+
* - 内置「回到顶部」默认 `when: 'scroll'`、阈值 320:滚过才出现;可传 `backToTop: false` 关掉,
|
|
17
|
+
* 或用 `{ order, label, threshold }` 调整。
|
|
18
|
+
* - 自定义项:`icon` / `label` / `onClick`;`visible` / `when` / `order` / `threshold` / `color` /
|
|
19
|
+
* `fgColor` 都可配。点击后先调 `onClick`,再统一回调 `onAction(id, item)`。
|
|
20
|
+
* - 滚动容器默认取工具栏最近的「可纵向滚动」祖先,也可以显式给 `scrollContainer`。
|
|
21
|
+
* - 显隐切换带 0.2s 动画:挂载淡入,消失先淡出、播完才卸载(`reduced-motion` 下关闭)。
|
|
22
|
+
*
|
|
23
|
+
* 样式只注入自己那一份(`controls/quick-toolbar.css`),横向位置 / 尺寸 / 间距由本组件在
|
|
24
|
+
* style 上实时写入,不写死 CSS。
|
|
25
|
+
*/
|
|
26
|
+
import { createElement as h } from 'react';
|
|
27
|
+
import { type QuickToolbarBackToTop, type QuickToolbarItem } from './quick-toolbar-logic.js';
|
|
28
|
+
export interface QuickToolbarProps {
|
|
29
|
+
/** 自定义按钮;按数组顺序排在「回到顶部」下面。 */
|
|
30
|
+
items?: QuickToolbarItem[];
|
|
31
|
+
/** 内置回顶部:`false` 关掉;对象可调 `order` / `label` / `threshold`。 */
|
|
32
|
+
backToTop?: boolean | QuickToolbarBackToTop;
|
|
33
|
+
/** 自定义项点击后的统一回调(在单项 `onClick` 之后触发)。 */
|
|
34
|
+
onAction?: (id: string, item: QuickToolbarItem) => void;
|
|
35
|
+
/** 与屏幕 / 锚点右缘、屏幕底边的距离(px,默认 16)。 */
|
|
36
|
+
offset?: number;
|
|
37
|
+
/** 相邻按钮的纵向间距(px,默认 12)。 */
|
|
38
|
+
gap?: number;
|
|
39
|
+
/** 按钮直径(px,默认 44)。 */
|
|
40
|
+
size?: number;
|
|
41
|
+
/** 跟随这个 id 的控件:横向贴它的右缘外侧;不传 = 跟随窗口右缘。 */
|
|
42
|
+
anchorId?: string;
|
|
43
|
+
/** 动态锚点函数(优先于 `anchorId`):返回 null 时按跟随窗口处理。 */
|
|
44
|
+
anchor?: () => HTMLElement | null;
|
|
45
|
+
/** 滚动容器;不传则取工具栏最近的可纵向滚动祖先,再退回窗口。 */
|
|
46
|
+
scrollContainer?: HTMLElement | (() => HTMLElement | null);
|
|
47
|
+
/** 无障碍名,默认内置字典「快捷工具栏」。 */
|
|
48
|
+
ariaLabel?: string;
|
|
49
|
+
/** 追加 class(只允许补布局)。 */
|
|
50
|
+
className?: string;
|
|
51
|
+
}
|
|
52
|
+
/** 右侧浮动的快捷工具栏:内置回顶部 + 自定义按钮。 */
|
|
53
|
+
export declare function QuickToolbar(props: QuickToolbarProps): ReturnType<typeof h>;
|
|
54
|
+
//# sourceMappingURL=QuickToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickToolbar.d.ts","sourceRoot":"","sources":["../../src/ui/QuickToolbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAmE,MAAM,OAAO,CAAA;AAI3G,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAA;AAYjC,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC1B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAA;IAC3C,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACvD,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IACjC,oCAAoC;IACpC,eAAe,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAA;IAC1D,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA+CD,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAoL3E"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 快捷工具栏(UI 基础层):**右侧悬浮的一列圆钮**,内置「回到顶部」,并可挂自定义按钮。
|
|
3
|
+
*
|
|
4
|
+
* 用法:
|
|
5
|
+
* <QuickToolbar
|
|
6
|
+
* anchorId="dshpc-main"
|
|
7
|
+
* onAction={(id) => …}
|
|
8
|
+
* items={[{ id: 'search', icon: <SearchIcon />, label: '搜索' }]}
|
|
9
|
+
* />
|
|
10
|
+
*
|
|
11
|
+
* 行为(2026-10-31 用户拍板):
|
|
12
|
+
* - **纵向恒定**贴屏幕底边,距离 `offset`(默认 16px);按钮从下往上排。
|
|
13
|
+
* - **横向默认**贴屏幕右缘、留 `offset`;给了 `anchorId` / `anchor()` 就贴到那个控件的
|
|
14
|
+
* **右缘外侧**,同样留 `offset`。右侧放不下(再留一个 `offset` 后越界)就退回贴屏幕右缘。
|
|
15
|
+
* 控件找不到按「跟随窗口」处理,不报错。
|
|
16
|
+
* - 内置「回到顶部」默认 `when: 'scroll'`、阈值 320:滚过才出现;可传 `backToTop: false` 关掉,
|
|
17
|
+
* 或用 `{ order, label, threshold }` 调整。
|
|
18
|
+
* - 自定义项:`icon` / `label` / `onClick`;`visible` / `when` / `order` / `threshold` / `color` /
|
|
19
|
+
* `fgColor` 都可配。点击后先调 `onClick`,再统一回调 `onAction(id, item)`。
|
|
20
|
+
* - 滚动容器默认取工具栏最近的「可纵向滚动」祖先,也可以显式给 `scrollContainer`。
|
|
21
|
+
* - 显隐切换带 0.2s 动画:挂载淡入,消失先淡出、播完才卸载(`reduced-motion` 下关闭)。
|
|
22
|
+
*
|
|
23
|
+
* 样式只注入自己那一份(`controls/quick-toolbar.css`),横向位置 / 尺寸 / 间距由本组件在
|
|
24
|
+
* style 上实时写入,不写死 CSS。
|
|
25
|
+
*/
|
|
26
|
+
import { createElement as h, useEffect, useRef, useState } from 'react';
|
|
27
|
+
import { Chevron } from './chevron.js';
|
|
28
|
+
import { ensureComponentStyles } from './css.js';
|
|
29
|
+
import { QUICK_TOOLBAR_CSS } from './controls-css.js';
|
|
30
|
+
import { DEFAULT_SCROLL_THRESHOLD, isToolbarEntryVisible, resolveToolbarLeft, sortToolbarEntries, } from './quick-toolbar-logic.js';
|
|
31
|
+
import { t } from '../utils/i18n.js';
|
|
32
|
+
/** 默认贴边距离(px)。 */
|
|
33
|
+
const DEFAULT_OFFSET = 16;
|
|
34
|
+
/** 默认按钮直径(px)。 */
|
|
35
|
+
const DEFAULT_SIZE = 44;
|
|
36
|
+
/** 默认按钮间距(px)。 */
|
|
37
|
+
const DEFAULT_GAP = 12;
|
|
38
|
+
/** 退场动画的卸载延迟(ms,与 CSS 的 0.2s 对齐并留余量)。 */
|
|
39
|
+
const LEAVE_MS = 220;
|
|
40
|
+
/** 向上找最近的「可纵向滚动」祖先。 */
|
|
41
|
+
function findScrollParent(node) {
|
|
42
|
+
let el = node?.parentElement ?? null;
|
|
43
|
+
while (el !== null) {
|
|
44
|
+
const oy = getComputedStyle(el).overflowY;
|
|
45
|
+
if (oy === 'auto' || oy === 'scroll')
|
|
46
|
+
return el;
|
|
47
|
+
el = el.parentElement;
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
/** 显式 scrollContainer 优先,其次最近的可滚动祖先,最后退回窗口。 */
|
|
52
|
+
function resolveScrollTarget(explicit, node) {
|
|
53
|
+
let target = null;
|
|
54
|
+
if (typeof explicit === 'function')
|
|
55
|
+
target = explicit();
|
|
56
|
+
else if (explicit !== undefined)
|
|
57
|
+
target = explicit;
|
|
58
|
+
if (target === null)
|
|
59
|
+
target = findScrollParent(node);
|
|
60
|
+
return target ?? window;
|
|
61
|
+
}
|
|
62
|
+
/** 读当前滚动距离。 */
|
|
63
|
+
function scrollTopOf(target) {
|
|
64
|
+
if (typeof HTMLElement !== 'undefined' && target instanceof HTMLElement)
|
|
65
|
+
return target.scrollTop;
|
|
66
|
+
if (typeof window === 'undefined')
|
|
67
|
+
return 0;
|
|
68
|
+
return window.scrollY || document.documentElement.scrollTop || 0;
|
|
69
|
+
}
|
|
70
|
+
/** 平滑回到顶部(reduced-motion 下瞬时)。 */
|
|
71
|
+
function scrollToTop(target) {
|
|
72
|
+
const reduce = typeof window !== 'undefined'
|
|
73
|
+
&& typeof window.matchMedia === 'function'
|
|
74
|
+
&& window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
75
|
+
const behavior = reduce ? 'auto' : 'smooth';
|
|
76
|
+
if (typeof HTMLElement !== 'undefined' && target instanceof HTMLElement)
|
|
77
|
+
target.scrollTo({ top: 0, behavior });
|
|
78
|
+
else if (typeof window !== 'undefined')
|
|
79
|
+
window.scrollTo({ top: 0, behavior });
|
|
80
|
+
}
|
|
81
|
+
/** 右侧浮动的快捷工具栏:内置回顶部 + 自定义按钮。 */
|
|
82
|
+
export function QuickToolbar(props) {
|
|
83
|
+
ensureComponentStyles('quick-toolbar', QUICK_TOOLBAR_CSS);
|
|
84
|
+
const ref = useRef(null);
|
|
85
|
+
const [left, setLeft] = useState(null);
|
|
86
|
+
const [scrollTop, setScrollTop] = useState(0);
|
|
87
|
+
// 正在退场的按钮:先留在 DOM 里播 fade-out,计时到了才卸载。
|
|
88
|
+
const [leaving, setLeaving] = useState([]);
|
|
89
|
+
const shownRef = useRef([]);
|
|
90
|
+
const leaveTimers = useRef(new Map());
|
|
91
|
+
const offset = props.offset ?? DEFAULT_OFFSET;
|
|
92
|
+
const size = props.size ?? DEFAULT_SIZE;
|
|
93
|
+
const gap = props.gap ?? DEFAULT_GAP;
|
|
94
|
+
// 横向定位:锚点右缘外侧;放不下 / 没锚点 ⇒ 贴视口右缘。
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
const node = ref.current;
|
|
97
|
+
if (node === null)
|
|
98
|
+
return;
|
|
99
|
+
const resolveAnchor = () => {
|
|
100
|
+
if (props.anchor !== undefined)
|
|
101
|
+
return props.anchor();
|
|
102
|
+
const id = props.anchorId;
|
|
103
|
+
return id === undefined ? null : document.getElementById(id);
|
|
104
|
+
};
|
|
105
|
+
let observed = null;
|
|
106
|
+
let lastRight = null;
|
|
107
|
+
let lastViewport = -1;
|
|
108
|
+
const ro = new ResizeObserver(update);
|
|
109
|
+
function update() {
|
|
110
|
+
const anchorEl = resolveAnchor();
|
|
111
|
+
if (anchorEl !== observed) {
|
|
112
|
+
if (observed !== null)
|
|
113
|
+
ro.unobserve(observed);
|
|
114
|
+
if (anchorEl !== null)
|
|
115
|
+
ro.observe(anchorEl);
|
|
116
|
+
observed = anchorEl;
|
|
117
|
+
}
|
|
118
|
+
const viewportWidth = document.documentElement.clientWidth;
|
|
119
|
+
const rect = anchorEl === null ? null : anchorEl.getBoundingClientRect();
|
|
120
|
+
// 锚点被隐藏 / 收起(宽高均为 0)时不跟随,按「找不到控件」退回贴视口右缘。
|
|
121
|
+
const anchorRight = rect === null || (rect.width === 0 && rect.height === 0) ? null : rect.right;
|
|
122
|
+
// 值没变就不写 state。位置另做轮询兜底:侧栏开合可能只改 clientWidth(滚动条增减)
|
|
123
|
+
// 或推动锚点位置(尺寸不变),这两种都不会触发 resize / ResizeObserver。
|
|
124
|
+
if (viewportWidth === lastViewport && anchorRight === lastRight)
|
|
125
|
+
return;
|
|
126
|
+
lastViewport = viewportWidth;
|
|
127
|
+
lastRight = anchorRight;
|
|
128
|
+
setLeft(resolveToolbarLeft({ viewportWidth, offset, size }, anchorRight));
|
|
129
|
+
}
|
|
130
|
+
update();
|
|
131
|
+
const poll = setInterval(update, 100);
|
|
132
|
+
window.addEventListener('resize', update);
|
|
133
|
+
return () => {
|
|
134
|
+
clearInterval(poll);
|
|
135
|
+
window.removeEventListener('resize', update);
|
|
136
|
+
ro.disconnect();
|
|
137
|
+
};
|
|
138
|
+
}, [props.anchor, props.anchorId, offset, size]);
|
|
139
|
+
// 滚动距离:驱动 `when: 'scroll'` 的显隐。
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
const node = ref.current;
|
|
142
|
+
if (node === null)
|
|
143
|
+
return;
|
|
144
|
+
const target = resolveScrollTarget(props.scrollContainer, node);
|
|
145
|
+
const onScroll = () => setScrollTop(scrollTopOf(target));
|
|
146
|
+
onScroll();
|
|
147
|
+
target.addEventListener('scroll', onScroll, { passive: true });
|
|
148
|
+
return () => target.removeEventListener('scroll', onScroll);
|
|
149
|
+
}, [props.scrollContainer]);
|
|
150
|
+
// 内置回顶部与自定义项摊平成同一张排序表。
|
|
151
|
+
const backTop = props.backToTop === false
|
|
152
|
+
? null
|
|
153
|
+
: (typeof props.backToTop === 'object' ? props.backToTop : {});
|
|
154
|
+
const entries = [];
|
|
155
|
+
if (backTop !== null) {
|
|
156
|
+
entries.push({ id: '__backtop', kind: 'backtop', order: backTop.order ?? 0, index: 0 });
|
|
157
|
+
}
|
|
158
|
+
for (const [index, item] of (props.items ?? []).entries()) {
|
|
159
|
+
entries.push({ id: item.id, kind: 'custom', order: item.order ?? index + 1, index, item });
|
|
160
|
+
}
|
|
161
|
+
const threshold = backTop?.threshold ?? DEFAULT_SCROLL_THRESHOLD;
|
|
162
|
+
const sorted = sortToolbarEntries(entries);
|
|
163
|
+
const visible = sorted.filter((entry) => {
|
|
164
|
+
if (entry.kind === 'backtop')
|
|
165
|
+
return isToolbarEntryVisible({ when: 'scroll', threshold }, scrollTop);
|
|
166
|
+
return isToolbarEntryVisible(entry.item ?? {}, scrollTop);
|
|
167
|
+
});
|
|
168
|
+
const visibleKey = JSON.stringify(visible.map((entry) => entry.id));
|
|
169
|
+
// 显隐切换:新出现的项挂载即淡入;消失的项先转为退场态、延迟卸载。
|
|
170
|
+
useEffect(() => {
|
|
171
|
+
const next = JSON.parse(visibleKey);
|
|
172
|
+
const revived = next.filter((id) => leaveTimers.current.has(id));
|
|
173
|
+
for (const id of revived) {
|
|
174
|
+
const timer = leaveTimers.current.get(id);
|
|
175
|
+
if (timer !== undefined)
|
|
176
|
+
clearTimeout(timer);
|
|
177
|
+
leaveTimers.current.delete(id);
|
|
178
|
+
}
|
|
179
|
+
if (revived.length > 0)
|
|
180
|
+
setLeaving((prev) => prev.filter((id) => !revived.includes(id)));
|
|
181
|
+
const gone = shownRef.current.filter((id) => !next.includes(id));
|
|
182
|
+
if (gone.length > 0) {
|
|
183
|
+
setLeaving((prev) => [...prev, ...gone.filter((id) => !prev.includes(id))]);
|
|
184
|
+
for (const id of gone) {
|
|
185
|
+
const timer = leaveTimers.current.get(id);
|
|
186
|
+
if (timer !== undefined)
|
|
187
|
+
clearTimeout(timer);
|
|
188
|
+
leaveTimers.current.set(id, setTimeout(() => {
|
|
189
|
+
leaveTimers.current.delete(id);
|
|
190
|
+
setLeaving((prev) => prev.filter((value) => value !== id));
|
|
191
|
+
}, LEAVE_MS));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
shownRef.current = next;
|
|
195
|
+
}, [visibleKey]);
|
|
196
|
+
useEffect(() => () => {
|
|
197
|
+
for (const timer of leaveTimers.current.values())
|
|
198
|
+
clearTimeout(timer);
|
|
199
|
+
leaveTimers.current.clear();
|
|
200
|
+
}, []);
|
|
201
|
+
const style = {
|
|
202
|
+
bottom: `${offset}px`,
|
|
203
|
+
gap: `${gap}px`,
|
|
204
|
+
...(left === null ? { right: `${offset}px` } : { left: `${left}px` }),
|
|
205
|
+
};
|
|
206
|
+
const shownSet = new Set(visible.map((entry) => entry.id));
|
|
207
|
+
const leavingSet = new Set(leaving);
|
|
208
|
+
const rendered = sorted.filter((entry) => shownSet.has(entry.id) || leavingSet.has(entry.id));
|
|
209
|
+
const renderItem = (entry, isLeaving) => {
|
|
210
|
+
const leaveClass = isLeaving ? ' is-leaving' : '';
|
|
211
|
+
if (entry.kind === 'backtop') {
|
|
212
|
+
const label = backTop?.label ?? t('backToTop');
|
|
213
|
+
return h('button', {
|
|
214
|
+
key: entry.id,
|
|
215
|
+
type: 'button',
|
|
216
|
+
className: `dshpc-quick-toolbar__item dshpc-quick-toolbar__backtop${leaveClass}`,
|
|
217
|
+
style: { width: size, height: size },
|
|
218
|
+
'aria-label': label,
|
|
219
|
+
title: label,
|
|
220
|
+
onClick: () => scrollToTop(resolveScrollTarget(props.scrollContainer, ref.current)),
|
|
221
|
+
}, h(Chevron, { dir: 'up', size: 18 }));
|
|
222
|
+
}
|
|
223
|
+
const item = entry.item;
|
|
224
|
+
if (item === undefined)
|
|
225
|
+
return null;
|
|
226
|
+
// 自定义配色只写 CSS 变量,不直接写 background / color —— 否则会压过 hover / active 的混色规则。
|
|
227
|
+
const buttonStyle = { width: size, height: size };
|
|
228
|
+
if (item.color !== undefined)
|
|
229
|
+
buttonStyle['--dshpc-quick-toolbar-bg'] = item.color;
|
|
230
|
+
if (item.fgColor !== undefined)
|
|
231
|
+
buttonStyle['--dshpc-quick-toolbar-fg'] = item.fgColor;
|
|
232
|
+
const onClick = () => {
|
|
233
|
+
item.onClick?.();
|
|
234
|
+
props.onAction?.(item.id, item);
|
|
235
|
+
};
|
|
236
|
+
return h('button', {
|
|
237
|
+
key: entry.id,
|
|
238
|
+
type: 'button',
|
|
239
|
+
className: `dshpc-quick-toolbar__item${leaveClass}`,
|
|
240
|
+
style: buttonStyle,
|
|
241
|
+
'aria-label': item.label,
|
|
242
|
+
title: item.label,
|
|
243
|
+
onClick,
|
|
244
|
+
}, item.icon);
|
|
245
|
+
};
|
|
246
|
+
return h('div', {
|
|
247
|
+
ref,
|
|
248
|
+
className: `dshpc-quick-toolbar${props.className === undefined ? '' : ` ${props.className}`}`,
|
|
249
|
+
style,
|
|
250
|
+
role: 'toolbar',
|
|
251
|
+
'aria-label': props.ariaLabel ?? t('quickToolbarAria'),
|
|
252
|
+
}, ...rendered.map((entry) => renderItem(entry, leavingSet.has(entry.id))));
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=QuickToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickToolbar.js","sourceRoot":"","sources":["../../src/ui/QuickToolbar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const QUICK_TOOLBAR_CSS = "/* \u5FEB\u6377\u5DE5\u5177\u680F\uFF1A\u53F3\u4FA7\u60AC\u6D6E\u7684\u4E00\u5217\u72EC\u7ACB\u5706\u94AE\u3002\n \u6A2A\u5411 left / right \u4E0E bottom\u3001\u6309\u94AE\u76F4\u5F84\u3001\u7EB5\u5411\u95F4\u8DDD\u7531\u7EC4\u4EF6\u6309 props \u5B9E\u65F6\u5199\u5165 style\uFF1B\n \u8FD9\u91CC\u53EA\u653E\u4E0E\u4F4D\u7F6E\u65E0\u5173\u7684\u76AE\u80A4\u3002 */\n.dshpc-quick-toolbar{\n position:fixed;\n z-index:var(--dshpc-z-dock);\n display:flex;\n flex-direction:column;\n align-items:center;\n}\n/* \u51FA\u73B0 / \u6D88\u5931\uFF1A\u6302\u8F7D\u5373\u6DE1\u5165\uFF0C\u9000\u573A\u5148\u64AD fade-out\uFF08\u7EC4\u4EF6\u5EF6\u8FDF\u5378\u8F7D\uFF0C\u89C1 QuickToolbar.ts\uFF09\u3002 */\n@keyframes dshpc-quick-toolbar-in{\n from{opacity:0;transform:translateY(6px) scale(.9);}\n to{opacity:1;transform:none;}\n}\n@keyframes dshpc-quick-toolbar-out{\n from{opacity:1;transform:none;}\n to{opacity:0;transform:translateY(6px) scale(.9);}\n}\n.dshpc-quick-toolbar__item{\n display:inline-flex;\n align-items:center;\n justify-content:center;\n padding:0;\n margin:0;\n box-sizing:border-box;\n border:1px solid var(--dshpc-border);\n border-radius:50%;\n /* \u81EA\u5B9A\u4E49\u5E95\u8272 / \u5B57\u8272\u53EA\u5199\u8FD9\u4E24\u4E2A\u53D8\u91CF\uFF08\u89C1 QuickToolbar.ts\uFF09\uFF0Chover/active \u624D\u80FD\u8DDF\u7740\u6DF7\u8272\u3002 */\n background:var(--dshpc-quick-toolbar-bg, var(--dshpc-solid));\n color:var(--dshpc-quick-toolbar-fg, var(--dshpc-on-solid));\n box-shadow:var(--dshpc-shadow-2);\n cursor:pointer;\n animation:dshpc-quick-toolbar-in var(--dshpc-dur) var(--dshpc-ease);\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),\n color var(--dshpc-dur-fast) var(--dshpc-ease),\n transform var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n/* \u9000\u573A\u671F\u4FDD\u7559\u5360\u4F4D\uFF0C\u907F\u514D\u540C\u5217\u5176\u4ED6\u6309\u94AE\u77AC\u65F6\u8DF3\u4F4D\u3002 */\n.dshpc-quick-toolbar__item.is-leaving{\n animation:dshpc-quick-toolbar-out var(--dshpc-dur) var(--dshpc-ease) forwards;\n pointer-events:none;\n}\n/* \u53D8\u8272\u4E0E\u6838\u5FC3 Button \u5B9E\u5FC3\u6863\u540C\u4E00\u5957\uFF1A\u6309 --dshpc-fg \u6DF7\u51FA hover / active \u5E95\u8272\uFF08\u81EA\u5B9A\u4E49 color \u4E5F\u8DDF\u968F\uFF09\u3002 */\n.dshpc-quick-toolbar__item:hover{\n background:color-mix(in srgb, var(--dshpc-quick-toolbar-bg, var(--dshpc-solid)) 82%, var(--dshpc-fg));\n}\n.dshpc-quick-toolbar__item:active{\n background:color-mix(in srgb, var(--dshpc-quick-toolbar-bg, var(--dshpc-solid)) 70%, var(--dshpc-fg));\n transform:scale(.94);\n}\n.dshpc-quick-toolbar__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n@media (prefers-reduced-motion: reduce){\n .dshpc-quick-toolbar__item{transition:none;transform:none;animation:none;}\n .dshpc-quick-toolbar__item.is-leaving{animation:none;opacity:0;}\n}\n";
|
|
2
|
+
//# sourceMappingURL=quick-toolbar-css.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-toolbar-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/quick-toolbar-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,k3FAA+nE,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// ⚠️ 生成物,勿手改。真源 = src/ui/controls/quick-toolbar.css
|
|
2
|
+
// 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
|
|
3
|
+
export const QUICK_TOOLBAR_CSS = "/* 快捷工具栏:右侧悬浮的一列独立圆钮。\n 横向 left / right 与 bottom、按钮直径、纵向间距由组件按 props 实时写入 style;\n 这里只放与位置无关的皮肤。 */\n.dshpc-quick-toolbar{\n position:fixed;\n z-index:var(--dshpc-z-dock);\n display:flex;\n flex-direction:column;\n align-items:center;\n}\n/* 出现 / 消失:挂载即淡入,退场先播 fade-out(组件延迟卸载,见 QuickToolbar.ts)。 */\n@keyframes dshpc-quick-toolbar-in{\n from{opacity:0;transform:translateY(6px) scale(.9);}\n to{opacity:1;transform:none;}\n}\n@keyframes dshpc-quick-toolbar-out{\n from{opacity:1;transform:none;}\n to{opacity:0;transform:translateY(6px) scale(.9);}\n}\n.dshpc-quick-toolbar__item{\n display:inline-flex;\n align-items:center;\n justify-content:center;\n padding:0;\n margin:0;\n box-sizing:border-box;\n border:1px solid var(--dshpc-border);\n border-radius:50%;\n /* 自定义底色 / 字色只写这两个变量(见 QuickToolbar.ts),hover/active 才能跟着混色。 */\n background:var(--dshpc-quick-toolbar-bg, var(--dshpc-solid));\n color:var(--dshpc-quick-toolbar-fg, var(--dshpc-on-solid));\n box-shadow:var(--dshpc-shadow-2);\n cursor:pointer;\n animation:dshpc-quick-toolbar-in var(--dshpc-dur) var(--dshpc-ease);\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),\n color var(--dshpc-dur-fast) var(--dshpc-ease),\n transform var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n/* 退场期保留占位,避免同列其他按钮瞬时跳位。 */\n.dshpc-quick-toolbar__item.is-leaving{\n animation:dshpc-quick-toolbar-out var(--dshpc-dur) var(--dshpc-ease) forwards;\n pointer-events:none;\n}\n/* 变色与核心 Button 实心档同一套:按 --dshpc-fg 混出 hover / active 底色(自定义 color 也跟随)。 */\n.dshpc-quick-toolbar__item:hover{\n background:color-mix(in srgb, var(--dshpc-quick-toolbar-bg, var(--dshpc-solid)) 82%, var(--dshpc-fg));\n}\n.dshpc-quick-toolbar__item:active{\n background:color-mix(in srgb, var(--dshpc-quick-toolbar-bg, var(--dshpc-solid)) 70%, var(--dshpc-fg));\n transform:scale(.94);\n}\n.dshpc-quick-toolbar__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n@media (prefers-reduced-motion: reduce){\n .dshpc-quick-toolbar__item{transition:none;transform:none;animation:none;}\n .dshpc-quick-toolbar__item.is-leaving{animation:none;opacity:0;}\n}\n";
|
|
4
|
+
//# sourceMappingURL=quick-toolbar-css.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-toolbar-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/quick-toolbar-css.generated.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,qEAAqE;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,4nEAA4nE,CAAA"}
|
|
@@ -4,7 +4,7 @@ export { FIELD_CSS } from './controls/field-css.generated.js';
|
|
|
4
4
|
export { LOADING_CSS } from './controls/loading-css.generated.js';
|
|
5
5
|
export { LOADER_CSS } from './controls/loader-css.generated.js';
|
|
6
6
|
export { LOADER_BAR_CSS } from './controls/loader-bar-css.generated.js';
|
|
7
|
-
export {
|
|
7
|
+
export { QUICK_TOOLBAR_CSS } from './controls/quick-toolbar-css.generated.js';
|
|
8
8
|
export { HINT_CSS } from './controls/hint-css.generated.js';
|
|
9
9
|
export { DATETIME_CSS } from './controls/datetime-css.generated.js';
|
|
10
10
|
export { SPLIT_GROUP_CSS } from './controls/split-group-css.generated.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA"}
|
package/dist/ui/controls-css.js
CHANGED
|
@@ -11,7 +11,7 @@ export { FIELD_CSS } from './controls/field-css.generated.js';
|
|
|
11
11
|
export { LOADING_CSS } from './controls/loading-css.generated.js';
|
|
12
12
|
export { LOADER_CSS } from './controls/loader-css.generated.js';
|
|
13
13
|
export { LOADER_BAR_CSS } from './controls/loader-bar-css.generated.js';
|
|
14
|
-
export {
|
|
14
|
+
export { QUICK_TOOLBAR_CSS } from './controls/quick-toolbar-css.generated.js';
|
|
15
15
|
export { HINT_CSS } from './controls/hint-css.generated.js';
|
|
16
16
|
export { DATETIME_CSS } from './controls/datetime-css.generated.js';
|
|
17
17
|
export { SPLIT_GROUP_CSS } from './controls/split-group-css.generated.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,mCAAmC;AACnC,8DAA8D;AAC9D,kEAAkE;AAClE,gDAAgD;AAChD,kDAAkD;AAClD,4DAA4D;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,mCAAmC;AACnC,8DAA8D;AAC9D,kEAAkE;AAClE,gDAAgD;AAChD,kDAAkD;AAClD,4DAA4D;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,gDAAgD;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,6BAA6B;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -31,7 +31,8 @@ export { SectionHead, type SectionHeadAccent, type SectionHeadProps } from './Se
|
|
|
31
31
|
export { FieldHint, type FieldHintProps } from './FieldHint.js';
|
|
32
32
|
export { getTooltipRenderer, setTooltipRenderer, type TooltipRenderProps, type TooltipRenderer, } from './tooltip.js';
|
|
33
33
|
export { LiveText } from './LiveText.js';
|
|
34
|
-
export {
|
|
34
|
+
export { QuickToolbar, type QuickToolbarProps, } from './QuickToolbar.js';
|
|
35
|
+
export { DEFAULT_SCROLL_THRESHOLD, isToolbarEntryVisible, resolveToolbarLeft, sortToolbarEntries, type QuickToolbarBackToTop, type QuickToolbarItem, type QuickToolbarWhen, type ToolbarEntry, type ToolbarGeometry, } from './quick-toolbar-logic.js';
|
|
35
36
|
export { startResizeLayoutWidth, type ResizeOptions } from './resizer.js';
|
|
36
37
|
export { DockPanel, PanelDock, createPanelDock, type DockCloseButton, type DockCloseReason, type DockPanelProps, type PanelDockController, type PanelDockOptions, type PanelDockProps, } from './PanelDock.js';
|
|
37
38
|
export { DEFAULT_PANEL_ID, clampWidth, closePanel, collapsePanel, emptyDock, expandPanel, isCollapsed, isOpen, openPanel, othersWidth, setPanelWidth, type DockState, type OpenResult, } from './panel-dock-logic.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":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/index.js
CHANGED
|
@@ -37,7 +37,8 @@ export { SectionHead } from './SectionHead.js';
|
|
|
37
37
|
export { FieldHint } from './FieldHint.js';
|
|
38
38
|
export { getTooltipRenderer, setTooltipRenderer, } from './tooltip.js';
|
|
39
39
|
export { LiveText } from './LiveText.js';
|
|
40
|
-
export {
|
|
40
|
+
export { QuickToolbar, } from './QuickToolbar.js';
|
|
41
|
+
export { DEFAULT_SCROLL_THRESHOLD, isToolbarEntryVisible, resolveToolbarLeft, sortToolbarEntries, } from './quick-toolbar-logic.js';
|
|
41
42
|
export { startResizeLayoutWidth } from './resizer.js';
|
|
42
43
|
export { DockPanel, PanelDock, createPanelDock, } from './PanelDock.js';
|
|
43
44
|
export { DEFAULT_PANEL_ID, clampWidth, closePanel, collapsePanel, emptyDock, expandPanel, isCollapsed, isOpen, openPanel, othersWidth, setPanelWidth, } from './panel-dock-logic.js';
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuickToolbar 的纯逻辑(零 DOM、零 React 运行时)。
|
|
3
|
+
*
|
|
4
|
+
* 只回答三件事:横向贴哪、按钮按什么顺序排、某一项此刻该不该出现。
|
|
5
|
+
* 真机尺寸 / 滚动 / 锚点解析留在组件里 —— 这里全部可直接进 Node 单测。
|
|
6
|
+
*/
|
|
7
|
+
import type { ReactNode } from 'react';
|
|
8
|
+
/** 某一项的显隐时机:`always` 一直显示,`scroll` 滚过阈值才显示。 */
|
|
9
|
+
export type QuickToolbarWhen = 'always' | 'scroll';
|
|
10
|
+
/** 自定义按钮。 */
|
|
11
|
+
export interface QuickToolbarItem {
|
|
12
|
+
/** 唯一标识;`onAction` 里原样回传。 */
|
|
13
|
+
id: string;
|
|
14
|
+
/** 图标(自绘或调用方自己的图标组件渲染结果)。 */
|
|
15
|
+
icon: ReactNode;
|
|
16
|
+
/** 无障碍名,同时作为 title。 */
|
|
17
|
+
label: string;
|
|
18
|
+
/** 单项点击回调(与 `onAction` 都会触发)。 */
|
|
19
|
+
onClick?: () => void;
|
|
20
|
+
/** `false` = 永久隐藏;默认显示。 */
|
|
21
|
+
visible?: boolean;
|
|
22
|
+
/** 默认 `always`。 */
|
|
23
|
+
when?: QuickToolbarWhen;
|
|
24
|
+
/** 排序值,越小越靠上;默认按数组下标 + 1(内置回顶部默认 0 在最上)。 */
|
|
25
|
+
order?: number;
|
|
26
|
+
/** `when: 'scroll'` 的触发阈值(px),默认 320。 */
|
|
27
|
+
threshold?: number;
|
|
28
|
+
/** 覆盖底色(任意 CSS 颜色值)。 */
|
|
29
|
+
color?: string;
|
|
30
|
+
/** 覆盖图标 / 文字色(任意 CSS 颜色值)。 */
|
|
31
|
+
fgColor?: string;
|
|
32
|
+
}
|
|
33
|
+
/** 内置回顶部的配置;传 `false` 关掉。 */
|
|
34
|
+
export interface QuickToolbarBackToTop {
|
|
35
|
+
/** 排序值,默认 0(最上)。 */
|
|
36
|
+
order?: number;
|
|
37
|
+
/** 无障碍名,默认内置字典「回到顶部」。 */
|
|
38
|
+
label?: string;
|
|
39
|
+
/** 滚动超过这个距离(px)才出现,默认 320。 */
|
|
40
|
+
threshold?: number;
|
|
41
|
+
}
|
|
42
|
+
/** 滚过多少像素才触发 `when: 'scroll'`。 */
|
|
43
|
+
export declare const DEFAULT_SCROLL_THRESHOLD = 320;
|
|
44
|
+
/** 排序用条目:组件把内置回顶部与自定义项都摊平成这个形状。 */
|
|
45
|
+
export interface ToolbarEntry {
|
|
46
|
+
id: string;
|
|
47
|
+
kind: 'backtop' | 'custom';
|
|
48
|
+
order: number;
|
|
49
|
+
/** 自定义项在 `items` 里的下标;内置项固定 0。 */
|
|
50
|
+
index: number;
|
|
51
|
+
}
|
|
52
|
+
/** 横向贴边所需的三个数。 */
|
|
53
|
+
export interface ToolbarGeometry {
|
|
54
|
+
/** 视口宽(documentElement.clientWidth)。 */
|
|
55
|
+
viewportWidth: number;
|
|
56
|
+
/** 与屏幕 / 锚点右缘的距离。 */
|
|
57
|
+
offset: number;
|
|
58
|
+
/** 按钮直径。 */
|
|
59
|
+
size: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 算出工具栏左缘的 x 坐标。
|
|
63
|
+
*
|
|
64
|
+
* - 没有锚点(或锚点取不到):贴视口右缘,留 `offset`。
|
|
65
|
+
* - 有锚点:贴锚点右缘外侧,留 `offset`;但右侧还必须再留 `offset`,
|
|
66
|
+
* 放不下(`锚点右缘 + offset + size + offset > 视口宽`)就退回贴视口右缘。
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveToolbarLeft(geometry: ToolbarGeometry, anchorRight: number | null): number;
|
|
69
|
+
/**
|
|
70
|
+
* 排序:先按 `order`,相同 order 时内置回顶部在前、自定义项按数组顺序。
|
|
71
|
+
* 不修改入参。
|
|
72
|
+
*/
|
|
73
|
+
export declare function sortToolbarEntries<T extends ToolbarEntry>(entries: readonly T[]): T[];
|
|
74
|
+
/** 某一项此刻是否该出现(显隐判定)。 */
|
|
75
|
+
export declare function isToolbarEntryVisible(entry: Pick<QuickToolbarItem, 'visible' | 'when' | 'threshold'>, scrollTop: number): boolean;
|
|
76
|
+
//# sourceMappingURL=quick-toolbar-logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-toolbar-logic.d.ts","sourceRoot":"","sources":["../../src/ui/quick-toolbar-logic.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAElD,aAAa;AACb,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,6BAA6B;IAC7B,IAAI,EAAE,SAAS,CAAA;IACf,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mBAAmB;IACnB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,6BAA6B;AAC7B,MAAM,WAAW,qBAAqB;IACpC,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,kCAAkC;AAClC,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAE3C,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,kBAAkB;AAClB,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMhG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAMrF;AAED,wBAAwB;AACxB,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC,EAC/D,SAAS,EAAE,MAAM,GAChB,OAAO,CAMT"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** 滚过多少像素才触发 `when: 'scroll'`。 */
|
|
2
|
+
export const DEFAULT_SCROLL_THRESHOLD = 320;
|
|
3
|
+
/**
|
|
4
|
+
* 算出工具栏左缘的 x 坐标。
|
|
5
|
+
*
|
|
6
|
+
* - 没有锚点(或锚点取不到):贴视口右缘,留 `offset`。
|
|
7
|
+
* - 有锚点:贴锚点右缘外侧,留 `offset`;但右侧还必须再留 `offset`,
|
|
8
|
+
* 放不下(`锚点右缘 + offset + size + offset > 视口宽`)就退回贴视口右缘。
|
|
9
|
+
*/
|
|
10
|
+
export function resolveToolbarLeft(geometry, anchorRight) {
|
|
11
|
+
const { viewportWidth, offset, size } = geometry;
|
|
12
|
+
const pinned = Math.max(0, viewportWidth - offset - size);
|
|
13
|
+
if (anchorRight === null || !Number.isFinite(anchorRight))
|
|
14
|
+
return pinned;
|
|
15
|
+
const anchored = anchorRight + offset;
|
|
16
|
+
return anchored + size + offset <= viewportWidth ? anchored : pinned;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 排序:先按 `order`,相同 order 时内置回顶部在前、自定义项按数组顺序。
|
|
20
|
+
* 不修改入参。
|
|
21
|
+
*/
|
|
22
|
+
export function sortToolbarEntries(entries) {
|
|
23
|
+
return [...entries].sort((a, b) => {
|
|
24
|
+
if (a.order !== b.order)
|
|
25
|
+
return a.order - b.order;
|
|
26
|
+
if (a.kind !== b.kind)
|
|
27
|
+
return a.kind === 'backtop' ? -1 : 1;
|
|
28
|
+
return a.index - b.index;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** 某一项此刻是否该出现(显隐判定)。 */
|
|
32
|
+
export function isToolbarEntryVisible(entry, scrollTop) {
|
|
33
|
+
if (entry.visible === false)
|
|
34
|
+
return false;
|
|
35
|
+
if ((entry.when ?? 'always') === 'scroll') {
|
|
36
|
+
return scrollTop > (entry.threshold ?? DEFAULT_SCROLL_THRESHOLD);
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=quick-toolbar-logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-toolbar-logic.js","sourceRoot":"","sources":["../../src/ui/quick-toolbar-logic.ts"],"names":[],"mappings":"AA6CA,kCAAkC;AAClC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAqB3C;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAyB,EAAE,WAA0B;IACtF,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC,CAAA;IACzD,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAA;IACxE,MAAM,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAA;IACrC,OAAO,QAAQ,GAAG,IAAI,GAAG,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAyB,OAAqB;IAC9E,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;QACjD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3D,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;IAC1B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,qBAAqB,CACnC,KAA+D,EAC/D,SAAiB;IAEjB,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IACzC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,wBAAwB,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|