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.
Files changed (38) hide show
  1. package/dist/ui/QuickToolbar.d.ts +54 -0
  2. package/dist/ui/QuickToolbar.d.ts.map +1 -0
  3. package/dist/ui/QuickToolbar.js +254 -0
  4. package/dist/ui/QuickToolbar.js.map +1 -0
  5. package/dist/ui/controls/quick-toolbar-css.generated.d.ts +2 -0
  6. package/dist/ui/controls/quick-toolbar-css.generated.d.ts.map +1 -0
  7. package/dist/ui/controls/quick-toolbar-css.generated.js +4 -0
  8. package/dist/ui/controls/quick-toolbar-css.generated.js.map +1 -0
  9. package/dist/ui/controls-css.d.ts +1 -1
  10. package/dist/ui/controls-css.d.ts.map +1 -1
  11. package/dist/ui/controls-css.js +1 -1
  12. package/dist/ui/controls-css.js.map +1 -1
  13. package/dist/ui/index.d.ts +2 -1
  14. package/dist/ui/index.d.ts.map +1 -1
  15. package/dist/ui/index.js +2 -1
  16. package/dist/ui/index.js.map +1 -1
  17. package/dist/ui/quick-toolbar-logic.d.ts +76 -0
  18. package/dist/ui/quick-toolbar-logic.d.ts.map +1 -0
  19. package/dist/ui/quick-toolbar-logic.js +40 -0
  20. package/dist/ui/quick-toolbar-logic.js.map +1 -0
  21. package/dist/utils/i18n.d.ts +1 -1
  22. package/dist/utils/i18n.d.ts.map +1 -1
  23. package/dist/utils/i18n.js +4 -0
  24. package/dist/utils/i18n.js.map +1 -1
  25. package/docs/design/external/dsh-host.md +2 -2
  26. package/docs/design/structure.md +7 -4
  27. package/docs/help/ui.doc.ts +90 -2
  28. package/docs/help/ui.md +83 -2
  29. package/docs/requirements.md +1 -0
  30. package/package.json +1 -1
  31. package/dist/ui/BackToTop.d.ts +0 -8
  32. package/dist/ui/BackToTop.d.ts.map +0 -1
  33. package/dist/ui/BackToTop.js +0 -112
  34. package/dist/ui/BackToTop.js.map +0 -1
  35. package/dist/ui/controls/back-to-top-css.generated.d.ts +0 -2
  36. package/dist/ui/controls/back-to-top-css.generated.d.ts.map +0 -1
  37. package/dist/ui/controls/back-to-top-css.generated.js +0 -4
  38. 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 { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
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,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,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"}
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"}
@@ -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 { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
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,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,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"}
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"}
@@ -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 { BackToTop, type BackToTopProps } from './BackToTop.js';
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';
@@ -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 { BackToTop } from './BackToTop.js';
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';
@@ -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"}