@tanzerfe/page-use 0.0.8 → 0.0.10
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.
|
@@ -363,9 +363,19 @@ declare function createPageUse(options: PageUseOptions): PageUseHandle;
|
|
|
363
363
|
//#endregion
|
|
364
364
|
//#region src/ui/launcher.d.ts
|
|
365
365
|
declare const PAGE_USE_LAUNCHER_TAG = "tz-page-use-launcher";
|
|
366
|
+
/**
|
|
367
|
+
* 面板布局:
|
|
368
|
+
* - `desktop`(默认):可拖动的浮动窗口,展开位置由入口按钮所在角推导;
|
|
369
|
+
* - `mobile`:贴底的移动端面板,宽度占满视口、高度约七成视口,位置不可拖动。
|
|
370
|
+
*
|
|
371
|
+
* 由宿主显式声明,不按视口尺寸或 UA 自动判断:同一页面可能既有窄屏也有宽屏使用场景。
|
|
372
|
+
*/
|
|
373
|
+
type PageUseLauncherLayout = 'desktop' | 'mobile';
|
|
366
374
|
interface PageUseLauncherConfig {
|
|
367
375
|
/** 入口与面板标题,默认 'Page Use' */
|
|
368
376
|
title?: string;
|
|
377
|
+
/** 面板布局,默认 'desktop'(与未声明该配置的旧版本行为一致) */
|
|
378
|
+
layout?: PageUseLauncherLayout;
|
|
369
379
|
/** 追加到「常用」分组的快捷指令(排在菜单生成的「打开 XX」与通用示例之后) */
|
|
370
380
|
presets?: PageUsePreset[];
|
|
371
381
|
/** 「复杂场景」分组的快捷指令;为空时不显示该分组 */
|
|
@@ -432,7 +442,26 @@ declare class PageUseLauncherElement extends LitElement {
|
|
|
432
442
|
private fabFromWidth;
|
|
433
443
|
/** 进行中宽度过渡的结束回调注销函数;过渡中再次切换时先注销,避免旧回调提前清除宽度 */
|
|
434
444
|
private fabWidthCleanup;
|
|
445
|
+
/** 本次入口手势是否已判定为拖动。指针捕获会把手势结束后浏览器补发的 click 重定向到入口,该 click 不是点击意图,不得展开面板。 */
|
|
446
|
+
private fabDragged;
|
|
447
|
+
/**
|
|
448
|
+
* 移动端面板的纵向位移(px,0 为贴底原位)。跟手期间由指针事件直写样式,不进入响应式状态:
|
|
449
|
+
* 每帧触发模板重渲染会带来不必要的开销,且重渲染写 style 属性会覆盖内联位移。
|
|
450
|
+
* 也不写入设置,位移不持久化。
|
|
451
|
+
*/
|
|
452
|
+
private sheetOffsetY;
|
|
453
|
+
/** 本次下拉手势的纵向位移采样,用于松手判定与速度计算 */
|
|
454
|
+
private sheetSamples;
|
|
455
|
+
/** 进行中的面板位移动效的取消函数;调用后等待中的收起流程会中止 */
|
|
456
|
+
private sheetAnimCancel;
|
|
435
457
|
private cleanups;
|
|
458
|
+
/** 生效的面板布局:未声明或取值非法时按桌面端处理,既有接入方的行为不变 */
|
|
459
|
+
private get isMobileLayout();
|
|
460
|
+
/**
|
|
461
|
+
* 下达指令后是否自动收起面板:仅移动端布局生效,默认开启,可在设置页关闭。
|
|
462
|
+
* 桌面端不提供该行为,也不显示设置项,存储中被改过的值在桌面端不生效。
|
|
463
|
+
*/
|
|
464
|
+
private get collapseOnRun();
|
|
436
465
|
private get fabEl();
|
|
437
466
|
private get panelEl();
|
|
438
467
|
private get logEl();
|
|
@@ -468,10 +497,26 @@ declare class PageUseLauncherElement extends LitElement {
|
|
|
468
497
|
private resolvePanelAnchor;
|
|
469
498
|
/** 未拖动过时用默认角落定位,拖动后切换为 left/top */
|
|
470
499
|
private fabStyle;
|
|
471
|
-
/**
|
|
500
|
+
/**
|
|
501
|
+
* 面板位置完全由入口位置推导,展开时与入口重合于同一角。
|
|
502
|
+
* 移动端不使用内联几何:位置与尺寸由 styles.ts 的 .panel.mobile 决定(贴底、占满宽度)。
|
|
503
|
+
*/
|
|
472
504
|
private panelStyle;
|
|
473
505
|
/** 调试入口是否显示:持久化状态优先,未操作过时跟随宿主 defaultHidden */
|
|
474
506
|
private isVisible;
|
|
507
|
+
/**
|
|
508
|
+
* 入口按下:先清掉上一次手势遗留的拖动标记,本次是否为拖动由 fabDrag 判定。
|
|
509
|
+
* 必须挂在 pointerdown 最前面,否则拖动未补发 click 时标记会残留到下一次真实点击。
|
|
510
|
+
*/
|
|
511
|
+
private onFabPointerDown;
|
|
512
|
+
/**
|
|
513
|
+
* 入口点击展开。
|
|
514
|
+
* 展开动作挂在 click 而非 pointerup:fabDrag 对手势调用 preventDefault 后浏览器没有 mousedown / mouseup 目标,
|
|
515
|
+
* 会在 pointerup 之后按当时坐标重新命中测试补发一次 click;若 pointerup 时面板已展开,
|
|
516
|
+
* 这次 click 就落在与入口重叠的面板底部控件上(「执行」「重跑」或快捷指令胶囊),造成误触提交。
|
|
517
|
+
* 由入口自身消费这次 click,即不再有穿透。
|
|
518
|
+
*/
|
|
519
|
+
private onFabClick;
|
|
475
520
|
/** 展开面板(showPageUseLauncher 调用):等入口按新的显示状态渲染后再测量定位 */
|
|
476
521
|
private expand;
|
|
477
522
|
/** 关闭调试入口:收起面板并持久化隐藏状态,之后需调用显示方法或 URL 参数调出 */
|
|
@@ -483,7 +528,31 @@ declare class PageUseLauncherElement extends LitElement {
|
|
|
483
528
|
/** 在面板内显示轻提示,TOAST_DURATION_MS 后自动消失;连续触发时以最后一次为准并重新计时 */
|
|
484
529
|
private showToast;
|
|
485
530
|
private clearHistory;
|
|
531
|
+
/**
|
|
532
|
+
* 收起面板为浮动入口。移动端先向下滑出视口再隐藏,滑出期间面板不拦截页面点击——
|
|
533
|
+
* 「执行后自动收起」时页面上紧接着就是 agent 的操作,动画不能挡住它。
|
|
534
|
+
* 系统关闭动态效果(过渡时长为 0)时直接隐藏,不做动效。
|
|
535
|
+
*/
|
|
486
536
|
private collapse;
|
|
537
|
+
/** 面板过渡被禁用时为 true:系统「减少动态效果」或样式未生效,此时直接切换状态 */
|
|
538
|
+
private sheetMotionDisabled;
|
|
539
|
+
/** 写入面板纵向位移;0 表示回到贴底原位 */
|
|
540
|
+
private setSheetOffset;
|
|
541
|
+
/** 清除位移与内联过渡:先关过渡再清位移,避免清除动作本身被过渡动画化 */
|
|
542
|
+
private resetSheetStyles;
|
|
543
|
+
/** 取消进行中的位移动效并让面板回到原位;等待中的收起流程因取消而中止 */
|
|
544
|
+
private cancelSheetAnimation;
|
|
545
|
+
/**
|
|
546
|
+
* 把面板位移过渡到目标值,返回是否走到终点(被 cancelSheetAnimation 取消时为 false)。
|
|
547
|
+
* 过渡事件缺失(元素被隐藏、标签页切到后台)时由定时器兜底结束,面板不停在半途。
|
|
548
|
+
*/
|
|
549
|
+
private sheetTransition;
|
|
550
|
+
/** 下拉手势开始:终止进行中的动效,并关闭过渡让面板直接跟手 */
|
|
551
|
+
private beginSheetGesture;
|
|
552
|
+
/** 跟手位移:只认纵向占优的向下拖动;上滑与横向拖动不移动面板(面板没有第二档高度可展开) */
|
|
553
|
+
private onSheetDragMove;
|
|
554
|
+
/** 松手:按位移或速度判定收起,否则回弹归位 */
|
|
555
|
+
private onSheetDragEnd;
|
|
487
556
|
/** tourStyle:快捷指令携带的讲解风格;输入框提交时不传,按面板设置与宿主默认 */
|
|
488
557
|
private submit;
|
|
489
558
|
private applyPreset;
|
|
@@ -510,6 +579,10 @@ declare class PageUseLauncherElement extends LitElement {
|
|
|
510
579
|
private renderChips;
|
|
511
580
|
/** 分组顺序:我的 → 常用 → 复杂场景;空分组不显示,全部为空时提示去设置中维护 */
|
|
512
581
|
private renderPresetGroups;
|
|
582
|
+
/**
|
|
583
|
+
* checked 为复选框的显示状态,默认取存储值。
|
|
584
|
+
* 「未设置时按布局取默认」的设置项(如 autoCollapseOnRun)需要传生效值,否则未操作过时显示与生效状态不一致。
|
|
585
|
+
*/
|
|
513
586
|
private renderCheckbox;
|
|
514
587
|
private renderSettings;
|
|
515
588
|
/** 打开表单:id 为 null 时新增,否则编辑该条;替换当前未保存的草稿 */
|
|
@@ -719,6 +792,11 @@ interface PageUseSettings {
|
|
|
719
792
|
* null 表示从未操作过,跟随宿主 PageUseLauncherConfig.defaultHidden。
|
|
720
793
|
*/
|
|
721
794
|
launcherVisible: boolean | null;
|
|
795
|
+
/**
|
|
796
|
+
* 面板内下达指令后是否自动收起面板(收起为浮动入口,从入口查看执行进度)。
|
|
797
|
+
* 仅移动端布局生效;null 表示从未操作过,按默认开启处理。桌面端不显示该设置项,值也不生效。
|
|
798
|
+
*/
|
|
799
|
+
autoCollapseOnRun: boolean | null;
|
|
722
800
|
/** 浮动入口位置(null = 默认右下角);面板展开时以入口为锚点定位,不单独存位置 */
|
|
723
801
|
fabPos: PageUsePoint | null;
|
|
724
802
|
}
|
|
@@ -858,4 +936,4 @@ declare const PAGE_USE_MASK_COLORS: {
|
|
|
858
936
|
readonly warning: "#fa8c16";
|
|
859
937
|
};
|
|
860
938
|
//#endregion
|
|
861
|
-
export {
|
|
939
|
+
export { DEFAULT_TOUR_MAX_TAB_SWITCHES as $, PageUseGlobal as A, MountPageUseUIOptions as B, getElapsedSeconds as C, PageUseTaskResult as Ct, pageUseStore as D, isRunning as E, PAGE_USE_TOOL_NAME as F, PageUseLauncherElement as G, mountPageUseUI as H, PageUseCommand as I, createPageUse as J, PageUseLauncherLayout as K, formatPageUseResultForModel as L, showPageUseLauncher as M, PAGE_USE_COMMAND_TYPE as N, ReadonlyStore as O, PAGE_USE_TOOL as P, DEFAULT_STORAGE_KEY_PREFIX as Q, isPageUseCommand as R, clearPageUseLog as S, PageUseStepLog as St, isPageUseConfigured as T, PageUseTaskStatus as Tt, PAGE_USE_LAUNCHER_TAG as U, definePageUseElements as V, PageUseLauncherConfig as W, DEFAULT_MODEL as X, DEFAULT_MAX_STEPS as Y, DEFAULT_SESSION_HEADER as Z, pageUseSettings as _, PageUseMenuNode as _t, PAGE_USE_ROBOT_ICON_SVG as a, normalizeOptions as at, PageUseQuestion as b, PageUseRunOptions as bt, PageUseCustomPreset as c, PageUseTtsSpeakOptions as ct, pageUsePresets as d, PageUseTourStyle as dt, NormalizedPageUseOptions as et, PageUseHistoryEntry as f, TOUR_STYLE_TRAINER as ft, PageUseSettings as g, PageUseErrorCode as gt, PageUsePoint as h, pageUseCapability as ht, PageUseGlowElement as i, PageUseTourOptions as it, hidePageUseLauncher as j, PAGE_USE_GLOBAL_KEY as k, PageUsePresetSaveResult as l, PageUseTtsVoice as lt, DEFAULT_PAGE_USE_SETTINGS as m, PageUseCapability as mt, SIMULATOR_MASK_ID as n, PageUseOptions as nt, PAGE_USE_STATIC_PRESETS as o, readLauncherSwitch as ot, pageUseHistory as p, TOUR_STYLE_USER as pt, PageUseHandle as q, PAGE_USE_GLOW_TAG as r, PageUseRouterMode as rt, buildMenuPresets as s, PageUseTtsEngine as st, PAGE_USE_MASK_COLORS as t, PageUseLLMOptions as tt, PageUsePresetState as u, DEFAULT_TOUR_STYLES as ut, BROWSER_ENGINE_ID as v, PageUsePreset as vt, getPageUseConfig as w, PageUseTaskSource as wt, PageUseState as x, PageUseSnapshot as xt, browserTtsEngine as y, PageUseProgressEvent as yt, runPageUseTool as z };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
export { BROWSER_ENGINE_ID, DEFAULT_MAX_STEPS, DEFAULT_MODEL, DEFAULT_PAGE_USE_SETTINGS, DEFAULT_SESSION_HEADER, DEFAULT_STORAGE_KEY_PREFIX, DEFAULT_TOUR_MAX_TAB_SWITCHES, DEFAULT_TOUR_STYLES, type MountPageUseUIOptions, type NormalizedPageUseOptions, PAGE_USE_COMMAND_TYPE, PAGE_USE_GLOBAL_KEY, PAGE_USE_GLOW_TAG, PAGE_USE_LAUNCHER_TAG, PAGE_USE_MASK_COLORS, PAGE_USE_ROBOT_ICON_SVG, PAGE_USE_STATIC_PRESETS, PAGE_USE_TOOL, PAGE_USE_TOOL_NAME, type PageUseCapability, type PageUseCommand, type PageUseCustomPreset, type PageUseErrorCode, type PageUseGlobal, PageUseGlowElement, type PageUseHandle, type PageUseHistoryEntry, type PageUseLLMOptions, type PageUseLauncherConfig, PageUseLauncherElement, type PageUseMenuNode, type PageUseOptions, type PageUsePoint, type PageUsePreset, type PageUsePresetSaveResult, type PageUsePresetState, type PageUseProgressEvent, type PageUseQuestion, type PageUseRouterMode, type PageUseRunOptions, type PageUseSettings, type PageUseSnapshot, type PageUseState, type PageUseStepLog, type PageUseTaskResult, type PageUseTaskSource, type PageUseTaskStatus, type PageUseTourOptions, type PageUseTourStyle, type PageUseTtsEngine, type PageUseTtsSpeakOptions, type PageUseTtsVoice, type ReadonlyStore, SIMULATOR_MASK_ID, TOUR_STYLE_TRAINER, TOUR_STYLE_USER, browserTtsEngine, buildMenuPresets, clearPageUseLog, createPageUse, definePageUseElements, formatPageUseResultForModel, getElapsedSeconds, getPageUseConfig, hidePageUseLauncher, isPageUseCommand, isPageUseConfigured, isRunning, mountPageUseUI, normalizeOptions, pageUseCapability, pageUseHistory, pageUsePresets, pageUseSettings, pageUseStore, readLauncherSwitch, runPageUseTool, showPageUseLauncher };
|
|
1
|
+
import { $ as DEFAULT_TOUR_MAX_TAB_SWITCHES, A as PageUseGlobal, B as MountPageUseUIOptions, C as getElapsedSeconds, Ct as PageUseTaskResult, D as pageUseStore, E as isRunning, F as PAGE_USE_TOOL_NAME, G as PageUseLauncherElement, H as mountPageUseUI, I as PageUseCommand, J as createPageUse, K as PageUseLauncherLayout, L as formatPageUseResultForModel, M as showPageUseLauncher, N as PAGE_USE_COMMAND_TYPE, O as ReadonlyStore, P as PAGE_USE_TOOL, Q as DEFAULT_STORAGE_KEY_PREFIX, R as isPageUseCommand, S as clearPageUseLog, St as PageUseStepLog, T as isPageUseConfigured, Tt as PageUseTaskStatus, U as PAGE_USE_LAUNCHER_TAG, V as definePageUseElements, W as PageUseLauncherConfig, X as DEFAULT_MODEL, Y as DEFAULT_MAX_STEPS, Z as DEFAULT_SESSION_HEADER, _ as pageUseSettings, _t as PageUseMenuNode, a as PAGE_USE_ROBOT_ICON_SVG, at as normalizeOptions, b as PageUseQuestion, bt as PageUseRunOptions, c as PageUseCustomPreset, ct as PageUseTtsSpeakOptions, d as pageUsePresets, dt as PageUseTourStyle, et as NormalizedPageUseOptions, f as PageUseHistoryEntry, ft as TOUR_STYLE_TRAINER, g as PageUseSettings, gt as PageUseErrorCode, h as PageUsePoint, ht as pageUseCapability, i as PageUseGlowElement, it as PageUseTourOptions, j as hidePageUseLauncher, k as PAGE_USE_GLOBAL_KEY, l as PageUsePresetSaveResult, lt as PageUseTtsVoice, m as DEFAULT_PAGE_USE_SETTINGS, mt as PageUseCapability, n as SIMULATOR_MASK_ID, nt as PageUseOptions, o as PAGE_USE_STATIC_PRESETS, ot as readLauncherSwitch, p as pageUseHistory, pt as TOUR_STYLE_USER, q as PageUseHandle, r as PAGE_USE_GLOW_TAG, rt as PageUseRouterMode, s as buildMenuPresets, st as PageUseTtsEngine, t as PAGE_USE_MASK_COLORS, tt as PageUseLLMOptions, u as PageUsePresetState, ut as DEFAULT_TOUR_STYLES, v as BROWSER_ENGINE_ID, vt as PageUsePreset, w as getPageUseConfig, wt as PageUseTaskSource, x as PageUseState, xt as PageUseSnapshot, y as browserTtsEngine, yt as PageUseProgressEvent, z as runPageUseTool } from "./index-DAwlbs2a.mjs";
|
|
2
|
+
export { BROWSER_ENGINE_ID, DEFAULT_MAX_STEPS, DEFAULT_MODEL, DEFAULT_PAGE_USE_SETTINGS, DEFAULT_SESSION_HEADER, DEFAULT_STORAGE_KEY_PREFIX, DEFAULT_TOUR_MAX_TAB_SWITCHES, DEFAULT_TOUR_STYLES, type MountPageUseUIOptions, type NormalizedPageUseOptions, PAGE_USE_COMMAND_TYPE, PAGE_USE_GLOBAL_KEY, PAGE_USE_GLOW_TAG, PAGE_USE_LAUNCHER_TAG, PAGE_USE_MASK_COLORS, PAGE_USE_ROBOT_ICON_SVG, PAGE_USE_STATIC_PRESETS, PAGE_USE_TOOL, PAGE_USE_TOOL_NAME, type PageUseCapability, type PageUseCommand, type PageUseCustomPreset, type PageUseErrorCode, type PageUseGlobal, PageUseGlowElement, type PageUseHandle, type PageUseHistoryEntry, type PageUseLLMOptions, type PageUseLauncherConfig, PageUseLauncherElement, type PageUseLauncherLayout, type PageUseMenuNode, type PageUseOptions, type PageUsePoint, type PageUsePreset, type PageUsePresetSaveResult, type PageUsePresetState, type PageUseProgressEvent, type PageUseQuestion, type PageUseRouterMode, type PageUseRunOptions, type PageUseSettings, type PageUseSnapshot, type PageUseState, type PageUseStepLog, type PageUseTaskResult, type PageUseTaskSource, type PageUseTaskStatus, type PageUseTourOptions, type PageUseTourStyle, type PageUseTtsEngine, type PageUseTtsSpeakOptions, type PageUseTtsVoice, type ReadonlyStore, SIMULATOR_MASK_ID, TOUR_STYLE_TRAINER, TOUR_STYLE_USER, browserTtsEngine, buildMenuPresets, clearPageUseLog, createPageUse, definePageUseElements, formatPageUseResultForModel, getElapsedSeconds, getPageUseConfig, hidePageUseLauncher, isPageUseCommand, isPageUseConfigured, isRunning, mountPageUseUI, normalizeOptions, pageUseCapability, pageUseHistory, pageUsePresets, pageUseSettings, pageUseStore, readLauncherSwitch, runPageUseTool, showPageUseLauncher };
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { A as pageUseSettings, B as BROWSER_ENGINE_ID, C as getPageUseConfig, D as pageUsePresets, E as pageUseStore, F as DEFAULT_TOUR_MAX_TAB_SWITCHES, H as DEFAULT_TOUR_STYLES, I as normalizeOptions, L as readLauncherSwitch, M as DEFAULT_MODEL, N as DEFAULT_SESSION_HEADER, O as pageUseHistory, P as DEFAULT_STORAGE_KEY_PREFIX, R as PAGE_USE_MASK_COLORS, S as getElapsedSeconds, T as isRunning, U as TOUR_STYLE_TRAINER, V as browserTtsEngine, W as TOUR_STYLE_USER, _ as runPageUseTool, a as PAGE_USE_STATIC_PRESETS, b as pageUseCapability, c as PAGE_USE_GLOW_TAG, d as PAGE_USE_GLOBAL_KEY, f as PAGE_USE_COMMAND_TYPE, g as isPageUseCommand, h as formatPageUseResultForModel, i as PageUseLauncherElement, j as DEFAULT_MAX_STEPS, k as DEFAULT_PAGE_USE_SETTINGS, l as PageUseGlowElement, m as PAGE_USE_TOOL_NAME, n as mountPageUseUI, o as buildMenuPresets, p as PAGE_USE_TOOL, r as PAGE_USE_LAUNCHER_TAG, s as PAGE_USE_ROBOT_ICON_SVG, t as definePageUseElements, u as createPageUse, v as hidePageUseLauncher, w as isPageUseConfigured, x as clearPageUseLog, y as showPageUseLauncher, z as SIMULATOR_MASK_ID } from "./src-
|
|
1
|
+
import { A as pageUseSettings, B as BROWSER_ENGINE_ID, C as getPageUseConfig, D as pageUsePresets, E as pageUseStore, F as DEFAULT_TOUR_MAX_TAB_SWITCHES, H as DEFAULT_TOUR_STYLES, I as normalizeOptions, L as readLauncherSwitch, M as DEFAULT_MODEL, N as DEFAULT_SESSION_HEADER, O as pageUseHistory, P as DEFAULT_STORAGE_KEY_PREFIX, R as PAGE_USE_MASK_COLORS, S as getElapsedSeconds, T as isRunning, U as TOUR_STYLE_TRAINER, V as browserTtsEngine, W as TOUR_STYLE_USER, _ as runPageUseTool, a as PAGE_USE_STATIC_PRESETS, b as pageUseCapability, c as PAGE_USE_GLOW_TAG, d as PAGE_USE_GLOBAL_KEY, f as PAGE_USE_COMMAND_TYPE, g as isPageUseCommand, h as formatPageUseResultForModel, i as PageUseLauncherElement, j as DEFAULT_MAX_STEPS, k as DEFAULT_PAGE_USE_SETTINGS, l as PageUseGlowElement, m as PAGE_USE_TOOL_NAME, n as mountPageUseUI, o as buildMenuPresets, p as PAGE_USE_TOOL, r as PAGE_USE_LAUNCHER_TAG, s as PAGE_USE_ROBOT_ICON_SVG, t as definePageUseElements, u as createPageUse, v as hidePageUseLauncher, w as isPageUseConfigured, x as clearPageUseLog, y as showPageUseLauncher, z as SIMULATOR_MASK_ID } from "./src-nVu9CCnz.mjs";
|
|
2
2
|
|
|
3
3
|
export { BROWSER_ENGINE_ID, DEFAULT_MAX_STEPS, DEFAULT_MODEL, DEFAULT_PAGE_USE_SETTINGS, DEFAULT_SESSION_HEADER, DEFAULT_STORAGE_KEY_PREFIX, DEFAULT_TOUR_MAX_TAB_SWITCHES, DEFAULT_TOUR_STYLES, PAGE_USE_COMMAND_TYPE, PAGE_USE_GLOBAL_KEY, PAGE_USE_GLOW_TAG, PAGE_USE_LAUNCHER_TAG, PAGE_USE_MASK_COLORS, PAGE_USE_ROBOT_ICON_SVG, PAGE_USE_STATIC_PRESETS, PAGE_USE_TOOL, PAGE_USE_TOOL_NAME, PageUseGlowElement, PageUseLauncherElement, SIMULATOR_MASK_ID, TOUR_STYLE_TRAINER, TOUR_STYLE_USER, browserTtsEngine, buildMenuPresets, clearPageUseLog, createPageUse, definePageUseElements, formatPageUseResultForModel, getElapsedSeconds, getPageUseConfig, hidePageUseLauncher, isPageUseCommand, isPageUseConfigured, isRunning, mountPageUseUI, normalizeOptions, pageUseCapability, pageUseHistory, pageUsePresets, pageUseSettings, pageUseStore, readLauncherSwitch, runPageUseTool, showPageUseLauncher };
|
|
@@ -436,6 +436,7 @@ const DEFAULT_PAGE_USE_SETTINGS = {
|
|
|
436
436
|
voiceNames: {},
|
|
437
437
|
tourStyle: "",
|
|
438
438
|
launcherVisible: null,
|
|
439
|
+
autoCollapseOnRun: null,
|
|
439
440
|
fabPos: null
|
|
440
441
|
};
|
|
441
442
|
/**
|
|
@@ -3044,7 +3045,7 @@ var PageUseGlowElement = class extends LitElement {
|
|
|
3044
3045
|
|
|
3045
3046
|
//#endregion
|
|
3046
3047
|
//#region package.json
|
|
3047
|
-
var version = "0.0.
|
|
3048
|
+
var version = "0.0.10";
|
|
3048
3049
|
|
|
3049
3050
|
//#endregion
|
|
3050
3051
|
//#region src/ui/drag.ts
|
|
@@ -3082,26 +3083,32 @@ function createDrag(options) {
|
|
|
3082
3083
|
const dx = e.clientX - startX;
|
|
3083
3084
|
const dy = e.clientY - startY;
|
|
3084
3085
|
if (!moved && Math.hypot(dx, dy) < DRAG_THRESHOLD) return;
|
|
3086
|
+
if (!moved) options.onDragStart?.();
|
|
3085
3087
|
moved = true;
|
|
3088
|
+
options.onMove?.(dx, dy);
|
|
3086
3089
|
options.setPos(clampToViewport({
|
|
3087
3090
|
x: rect.left + dx,
|
|
3088
3091
|
y: rect.top + dy
|
|
3089
3092
|
}, el));
|
|
3090
3093
|
};
|
|
3091
|
-
const
|
|
3094
|
+
const finish = (cancelled) => {
|
|
3095
|
+
if (!dragging) return;
|
|
3092
3096
|
dragging = false;
|
|
3093
3097
|
handle.removeEventListener("pointermove", onMove);
|
|
3094
3098
|
handle.removeEventListener("pointerup", onUp);
|
|
3095
|
-
handle.removeEventListener("pointercancel",
|
|
3099
|
+
handle.removeEventListener("pointercancel", onCancel);
|
|
3096
3100
|
try {
|
|
3097
3101
|
handle.releasePointerCapture(event.pointerId);
|
|
3098
3102
|
} catch {}
|
|
3103
|
+
options.onEnd?.({ cancelled });
|
|
3099
3104
|
if (!moved) options.onTap?.(tapTarget);
|
|
3100
3105
|
};
|
|
3106
|
+
const onUp = () => finish(false);
|
|
3107
|
+
const onCancel = () => finish(true);
|
|
3101
3108
|
handle.setPointerCapture(event.pointerId);
|
|
3102
3109
|
handle.addEventListener("pointermove", onMove);
|
|
3103
3110
|
handle.addEventListener("pointerup", onUp);
|
|
3104
|
-
handle.addEventListener("pointercancel",
|
|
3111
|
+
handle.addEventListener("pointercancel", onCancel);
|
|
3105
3112
|
event.preventDefault();
|
|
3106
3113
|
}
|
|
3107
3114
|
/** 视口尺寸变化后把已存位置夹回可见区域 */
|
|
@@ -3115,6 +3122,46 @@ function createDrag(options) {
|
|
|
3115
3122
|
reclamp
|
|
3116
3123
|
};
|
|
3117
3124
|
}
|
|
3125
|
+
/** 判定收起所需的纵向位移占面板高度的比例 */
|
|
3126
|
+
const SHEET_DISTANCE_RATIO = .25;
|
|
3127
|
+
/** 判定收起所需的纵向速度(px/ms) */
|
|
3128
|
+
const SHEET_VELOCITY_THRESHOLD = .5;
|
|
3129
|
+
/** 速度取样的时间窗口(ms):只取最近这一段,避免起手时的慢速稀释甩动判定 */
|
|
3130
|
+
const SHEET_VELOCITY_WINDOW_MS = 100;
|
|
3131
|
+
/** 速度判定要求的最小位移(px):防止轻微抖动被当成甩动 */
|
|
3132
|
+
const SHEET_VELOCITY_MIN_DISTANCE = 24;
|
|
3133
|
+
/** 滑出时长的基准值(ms)与折算系数:剩余距离越短越快结束,避免短距离也拖满整个时长 */
|
|
3134
|
+
const SHEET_EXIT_BASE_MS = 120;
|
|
3135
|
+
const SHEET_EXIT_MAX_MS = 220;
|
|
3136
|
+
const SHEET_EXIT_PER_PX = .35;
|
|
3137
|
+
/** 滑出时长(ms):随剩余距离增长,上限 220ms(需求上限为 240ms) */
|
|
3138
|
+
function sheetExitDuration(remainingPx) {
|
|
3139
|
+
return Math.min(SHEET_EXIT_MAX_MS, SHEET_EXIT_BASE_MS + Math.max(0, remainingPx) * SHEET_EXIT_PER_PX);
|
|
3140
|
+
}
|
|
3141
|
+
/**
|
|
3142
|
+
* 松手判定:位移达到面板高度的四分之一,或最近 100ms 的平均速度达到阈值且位移足够时收起。
|
|
3143
|
+
* 手势被系统中断时一律回弹——中断不代表用户表达了收起意图。
|
|
3144
|
+
*/
|
|
3145
|
+
function decideSheetRelease(samples, options) {
|
|
3146
|
+
if (options.cancelled) return "snapback";
|
|
3147
|
+
const last = samples[samples.length - 1];
|
|
3148
|
+
if (!last) return "snapback";
|
|
3149
|
+
if (last.dy >= options.panelHeight * SHEET_DISTANCE_RATIO) return "dismiss";
|
|
3150
|
+
if (last.dy < SHEET_VELOCITY_MIN_DISTANCE) return "snapback";
|
|
3151
|
+
return sheetReleaseVelocity(samples, last) >= SHEET_VELOCITY_THRESHOLD ? "dismiss" : "snapback";
|
|
3152
|
+
}
|
|
3153
|
+
/**
|
|
3154
|
+
* 最近一个时间窗口内的平均纵向速度(px/ms)。
|
|
3155
|
+
* 窗口内不足两个采样时(采样稀疏、间隔超过窗口)退回上一个采样,否则速度不可测。
|
|
3156
|
+
*/
|
|
3157
|
+
function sheetReleaseVelocity(samples, last) {
|
|
3158
|
+
const windowStart = last.t - SHEET_VELOCITY_WINDOW_MS;
|
|
3159
|
+
const index = samples.findIndex((sample) => sample.t >= windowStart);
|
|
3160
|
+
const start = index < samples.length - 1 ? samples[index] : samples[Math.max(0, samples.length - 2)];
|
|
3161
|
+
const dt = last.t - start.t;
|
|
3162
|
+
if (dt <= 0) return 0;
|
|
3163
|
+
return (last.dy - start.dy) / dt;
|
|
3164
|
+
}
|
|
3118
3165
|
|
|
3119
3166
|
//#endregion
|
|
3120
3167
|
//#region src/ui/formatTokens.ts
|
|
@@ -3417,6 +3464,10 @@ const launcherStyles = css`
|
|
|
3417
3464
|
.fab {
|
|
3418
3465
|
transition: none;
|
|
3419
3466
|
}
|
|
3467
|
+
/* 面板位移过渡关闭后,launcher 读到 transitionDuration 为 0,收起与回弹直接切换状态 */
|
|
3468
|
+
.panel.mobile {
|
|
3469
|
+
transition: none;
|
|
3470
|
+
}
|
|
3420
3471
|
.fab,
|
|
3421
3472
|
.panel::before,
|
|
3422
3473
|
.fab.running .robot-antenna,
|
|
@@ -3508,6 +3559,60 @@ const launcherStyles = css`
|
|
|
3508
3559
|
animation-duration: 10s;
|
|
3509
3560
|
}
|
|
3510
3561
|
|
|
3562
|
+
/*
|
|
3563
|
+
* 移动端布局(launcher.layout = 'mobile'):贴底面板。
|
|
3564
|
+
* 宽度不写死数值,用左右内缩占满视口,避免 100vw 在桌面端把滚动条宽度算进去。
|
|
3565
|
+
*/
|
|
3566
|
+
.panel.mobile {
|
|
3567
|
+
/* 回退值:不支持安全区 / dvh 的浏览器贴满两侧、按 vh 计算高度 */
|
|
3568
|
+
left: 0;
|
|
3569
|
+
right: 0;
|
|
3570
|
+
bottom: 0;
|
|
3571
|
+
height: 70vh;
|
|
3572
|
+
/* 左右内缩取安全区(横屏刘海屏),高度取七成动态视口(地址栏收缩时 vh 会跳变) */
|
|
3573
|
+
left: env(safe-area-inset-left, 0px);
|
|
3574
|
+
right: env(safe-area-inset-right, 0px);
|
|
3575
|
+
height: 70dvh;
|
|
3576
|
+
/* 底边与屏幕贴合,去掉下圆角 */
|
|
3577
|
+
border-radius: 12px 12px 0 0;
|
|
3578
|
+
/*
|
|
3579
|
+
* 下拉收起与回弹通过 transform 位移实现。过渡声明的另一作用是作为「可播放动效」的判据:
|
|
3580
|
+
* launcher 读取生效的 transitionDuration,为 0 时(下方减少动态效果媒体查询)直接切换状态。
|
|
3581
|
+
* 跟手期间由 launcher 临时置为 none,避免位移被过渡拖慢。
|
|
3582
|
+
*/
|
|
3583
|
+
transition: transform 180ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
3584
|
+
}
|
|
3585
|
+
/*
|
|
3586
|
+
* 移动端头部:位置由布局决定,不再是拖动改位置的区域,但仍保留按下检测——
|
|
3587
|
+
* 向下拉动即收起面板。touch-action 必须保持 none:否则浏览器把手势解释为滚动或下拉刷新,
|
|
3588
|
+
* 中途以 pointercancel 打断指针流,且 pointerdown 上的 preventDefault 对触摸滚动无效。
|
|
3589
|
+
*/
|
|
3590
|
+
.panel.mobile .head,
|
|
3591
|
+
.panel.mobile .head:active {
|
|
3592
|
+
position: relative;
|
|
3593
|
+
cursor: default;
|
|
3594
|
+
touch-action: none;
|
|
3595
|
+
}
|
|
3596
|
+
/* 抓取条:绝对定位在头部顶端居中,不参与布局流,面板几何与桌面端头部高度均不受影响 */
|
|
3597
|
+
.panel.mobile .grabber {
|
|
3598
|
+
position: absolute;
|
|
3599
|
+
top: 4px;
|
|
3600
|
+
left: 50%;
|
|
3601
|
+
width: 32px;
|
|
3602
|
+
height: 4px;
|
|
3603
|
+
margin-left: -16px;
|
|
3604
|
+
border-radius: 2px;
|
|
3605
|
+
background: rgba(100, 116, 139, 0.45);
|
|
3606
|
+
}
|
|
3607
|
+
/* 底边与屏幕贴合,不需要下圆角;底部内边距让出 iPhone 手势条 */
|
|
3608
|
+
.panel.mobile .composer {
|
|
3609
|
+
border-radius: 0;
|
|
3610
|
+
padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
|
|
3611
|
+
}
|
|
3612
|
+
.panel.mobile .toast {
|
|
3613
|
+
bottom: calc(24px + env(safe-area-inset-bottom, 0px));
|
|
3614
|
+
}
|
|
3615
|
+
|
|
3511
3616
|
.head {
|
|
3512
3617
|
display: flex;
|
|
3513
3618
|
align-items: center;
|
|
@@ -4186,6 +4291,10 @@ const TEXTAREA_MIN_ROWS = 2;
|
|
|
4186
4291
|
/** 元信息面板解锁:任意连续 META_UNLOCK_WINDOW_MS 毫秒内点击标题达到 META_UNLOCK_CLICKS 次(滑动窗口) */
|
|
4187
4292
|
const META_UNLOCK_WINDOW_MS = 5e3;
|
|
4188
4293
|
const META_UNLOCK_CLICKS = 10;
|
|
4294
|
+
/** 面板位移过渡曲线:下拉滑出与回弹共用,接近 iOS 的减速曲线 */
|
|
4295
|
+
const SHEET_EASING = "cubic-bezier(0.22, 1, 0.36, 1)";
|
|
4296
|
+
/** 面板位移动效兜底时长(ms):过渡事件丢失时据此结束动效,避免面板停在半途 */
|
|
4297
|
+
const SHEET_ANIM_FALLBACK_MS = 60;
|
|
4189
4298
|
/** 面板内轻提示(toast)的显示时长(毫秒) */
|
|
4190
4299
|
const TOAST_DURATION_MS = 2e3;
|
|
4191
4300
|
/** 标题栏返回按钮的目标视图:按层级返回;main 无上级,此时按钮用于进入设置页 */
|
|
@@ -4286,7 +4395,30 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4286
4395
|
fabFromWidth = null;
|
|
4287
4396
|
/** 进行中宽度过渡的结束回调注销函数;过渡中再次切换时先注销,避免旧回调提前清除宽度 */
|
|
4288
4397
|
fabWidthCleanup = null;
|
|
4398
|
+
/** 本次入口手势是否已判定为拖动。指针捕获会把手势结束后浏览器补发的 click 重定向到入口,该 click 不是点击意图,不得展开面板。 */
|
|
4399
|
+
fabDragged = false;
|
|
4400
|
+
/**
|
|
4401
|
+
* 移动端面板的纵向位移(px,0 为贴底原位)。跟手期间由指针事件直写样式,不进入响应式状态:
|
|
4402
|
+
* 每帧触发模板重渲染会带来不必要的开销,且重渲染写 style 属性会覆盖内联位移。
|
|
4403
|
+
* 也不写入设置,位移不持久化。
|
|
4404
|
+
*/
|
|
4405
|
+
sheetOffsetY = 0;
|
|
4406
|
+
/** 本次下拉手势的纵向位移采样,用于松手判定与速度计算 */
|
|
4407
|
+
sheetSamples = [];
|
|
4408
|
+
/** 进行中的面板位移动效的取消函数;调用后等待中的收起流程会中止 */
|
|
4409
|
+
sheetAnimCancel = null;
|
|
4289
4410
|
cleanups = [];
|
|
4411
|
+
/** 生效的面板布局:未声明或取值非法时按桌面端处理,既有接入方的行为不变 */
|
|
4412
|
+
get isMobileLayout() {
|
|
4413
|
+
return this._config.layout === "mobile";
|
|
4414
|
+
}
|
|
4415
|
+
/**
|
|
4416
|
+
* 下达指令后是否自动收起面板:仅移动端布局生效,默认开启,可在设置页关闭。
|
|
4417
|
+
* 桌面端不提供该行为,也不显示设置项,存储中被改过的值在桌面端不生效。
|
|
4418
|
+
*/
|
|
4419
|
+
get collapseOnRun() {
|
|
4420
|
+
return this.isMobileLayout && (pageUseSettings.get().autoCollapseOnRun ?? true);
|
|
4421
|
+
}
|
|
4290
4422
|
get fabEl() {
|
|
4291
4423
|
return this.renderRoot.querySelector(".fab");
|
|
4292
4424
|
}
|
|
@@ -4303,11 +4435,8 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4303
4435
|
getEl: () => this.fabEl,
|
|
4304
4436
|
getPos: () => pageUseSettings.get().fabPos,
|
|
4305
4437
|
setPos: (pos) => pageUseSettings.update({ fabPos: pos }),
|
|
4306
|
-
|
|
4307
|
-
this.
|
|
4308
|
-
this.resolvePanelAnchor();
|
|
4309
|
-
this.open = true;
|
|
4310
|
-
this.requestUpdate();
|
|
4438
|
+
onDragStart: () => {
|
|
4439
|
+
this.fabDragged = true;
|
|
4311
4440
|
},
|
|
4312
4441
|
skipInteractive: false
|
|
4313
4442
|
});
|
|
@@ -4318,7 +4447,11 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4318
4447
|
onTap: (target) => {
|
|
4319
4448
|
if (target?.closest?.(".title")) this.onTitleTap();
|
|
4320
4449
|
},
|
|
4450
|
+
onDragStart: () => this.beginSheetGesture(),
|
|
4451
|
+
onMove: (dx, dy) => this.onSheetDragMove(dx, dy),
|
|
4452
|
+
onEnd: ({ cancelled }) => this.onSheetDragEnd(cancelled),
|
|
4321
4453
|
setPos: ({ x, y }) => {
|
|
4454
|
+
if (this.isMobileLayout) return;
|
|
4322
4455
|
const el = this.panelEl;
|
|
4323
4456
|
if (!el) return;
|
|
4324
4457
|
const { width: fabWidth, height: fabHeight } = this.fabSize;
|
|
@@ -4355,6 +4488,7 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4355
4488
|
this.unregisterPanelName?.();
|
|
4356
4489
|
this.unregisterPanelName = null;
|
|
4357
4490
|
stopPreview();
|
|
4491
|
+
this.cancelSheetAnimation();
|
|
4358
4492
|
window.removeEventListener("resize", this.onResize);
|
|
4359
4493
|
if (this.toastTimer) clearTimeout(this.toastTimer);
|
|
4360
4494
|
this.toastTimer = null;
|
|
@@ -4499,8 +4633,12 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4499
4633
|
bottom: `${FAB_DEFAULT_BOTTOM}px`
|
|
4500
4634
|
});
|
|
4501
4635
|
}
|
|
4502
|
-
/**
|
|
4636
|
+
/**
|
|
4637
|
+
* 面板位置完全由入口位置推导,展开时与入口重合于同一角。
|
|
4638
|
+
* 移动端不使用内联几何:位置与尺寸由 styles.ts 的 .panel.mobile 决定(贴底、占满宽度)。
|
|
4639
|
+
*/
|
|
4503
4640
|
panelStyle(settings) {
|
|
4641
|
+
if (this.isMobileLayout) return "";
|
|
4504
4642
|
const rect = this.fabRect(settings);
|
|
4505
4643
|
const { width: vw, height: vh } = this.viewport;
|
|
4506
4644
|
const { alignRight, alignBottom } = this.panelAnchor;
|
|
@@ -4519,11 +4657,38 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4519
4657
|
isVisible(settings) {
|
|
4520
4658
|
return settings.launcherVisible ?? !this._config.defaultHidden;
|
|
4521
4659
|
}
|
|
4660
|
+
/**
|
|
4661
|
+
* 入口按下:先清掉上一次手势遗留的拖动标记,本次是否为拖动由 fabDrag 判定。
|
|
4662
|
+
* 必须挂在 pointerdown 最前面,否则拖动未补发 click 时标记会残留到下一次真实点击。
|
|
4663
|
+
*/
|
|
4664
|
+
onFabPointerDown = (event) => {
|
|
4665
|
+
this.fabDragged = false;
|
|
4666
|
+
this.fabDrag.onPointerDown(event);
|
|
4667
|
+
};
|
|
4668
|
+
/**
|
|
4669
|
+
* 入口点击展开。
|
|
4670
|
+
* 展开动作挂在 click 而非 pointerup:fabDrag 对手势调用 preventDefault 后浏览器没有 mousedown / mouseup 目标,
|
|
4671
|
+
* 会在 pointerup 之后按当时坐标重新命中测试补发一次 click;若 pointerup 时面板已展开,
|
|
4672
|
+
* 这次 click 就落在与入口重叠的面板底部控件上(「执行」「重跑」或快捷指令胶囊),造成误触提交。
|
|
4673
|
+
* 由入口自身消费这次 click,即不再有穿透。
|
|
4674
|
+
*/
|
|
4675
|
+
onFabClick = () => {
|
|
4676
|
+
if (this.fabDragged) {
|
|
4677
|
+
this.fabDragged = false;
|
|
4678
|
+
return;
|
|
4679
|
+
}
|
|
4680
|
+
this.measureFab();
|
|
4681
|
+
this.resolvePanelAnchor();
|
|
4682
|
+
this.cancelSheetAnimation();
|
|
4683
|
+
this.open = true;
|
|
4684
|
+
this.requestUpdate();
|
|
4685
|
+
};
|
|
4522
4686
|
/** 展开面板(showPageUseLauncher 调用):等入口按新的显示状态渲染后再测量定位 */
|
|
4523
4687
|
async expand() {
|
|
4524
4688
|
await this.updateComplete;
|
|
4525
4689
|
this.measureFab();
|
|
4526
4690
|
this.resolvePanelAnchor();
|
|
4691
|
+
this.cancelSheetAnimation();
|
|
4527
4692
|
this.open = true;
|
|
4528
4693
|
this.requestUpdate();
|
|
4529
4694
|
}
|
|
@@ -4568,13 +4733,125 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4568
4733
|
pageUseHistory.clear();
|
|
4569
4734
|
this.showToast(count ? `已清空 ${count} 条历史指令` : "暂无历史指令");
|
|
4570
4735
|
}
|
|
4736
|
+
/**
|
|
4737
|
+
* 收起面板为浮动入口。移动端先向下滑出视口再隐藏,滑出期间面板不拦截页面点击——
|
|
4738
|
+
* 「执行后自动收起」时页面上紧接着就是 agent 的操作,动画不能挡住它。
|
|
4739
|
+
* 系统关闭动态效果(过渡时长为 0)时直接隐藏,不做动效。
|
|
4740
|
+
*/
|
|
4571
4741
|
async collapse() {
|
|
4572
4742
|
stopPreview();
|
|
4743
|
+
const el = this.panelEl;
|
|
4744
|
+
if (this.isMobileLayout && el && !this.sheetMotionDisabled(el)) {
|
|
4745
|
+
el.style.pointerEvents = "none";
|
|
4746
|
+
const remaining = Math.max(0, el.offsetHeight - this.sheetOffsetY);
|
|
4747
|
+
const completed = await this.sheetTransition(el, el.offsetHeight, sheetExitDuration(remaining));
|
|
4748
|
+
el.style.pointerEvents = "";
|
|
4749
|
+
if (!completed) return;
|
|
4750
|
+
}
|
|
4573
4751
|
this.open = false;
|
|
4574
4752
|
this.requestUpdate();
|
|
4575
4753
|
await this.updateComplete;
|
|
4576
4754
|
this.measureFab();
|
|
4577
4755
|
this.fabDrag.reclamp();
|
|
4756
|
+
if (el) this.resetSheetStyles(el);
|
|
4757
|
+
}
|
|
4758
|
+
/** 面板过渡被禁用时为 true:系统「减少动态效果」或样式未生效,此时直接切换状态 */
|
|
4759
|
+
sheetMotionDisabled(el) {
|
|
4760
|
+
return parseFloat(getComputedStyle(el).transitionDuration) === 0;
|
|
4761
|
+
}
|
|
4762
|
+
/** 写入面板纵向位移;0 表示回到贴底原位 */
|
|
4763
|
+
setSheetOffset(el, offsetY) {
|
|
4764
|
+
this.sheetOffsetY = offsetY;
|
|
4765
|
+
el.style.transform = offsetY ? `translateY(${offsetY}px)` : "";
|
|
4766
|
+
}
|
|
4767
|
+
/** 清除位移与内联过渡:先关过渡再清位移,避免清除动作本身被过渡动画化 */
|
|
4768
|
+
resetSheetStyles(el) {
|
|
4769
|
+
el.style.transition = "none";
|
|
4770
|
+
this.setSheetOffset(el, 0);
|
|
4771
|
+
el.style.transition = "";
|
|
4772
|
+
}
|
|
4773
|
+
/** 取消进行中的位移动效并让面板回到原位;等待中的收起流程因取消而中止 */
|
|
4774
|
+
cancelSheetAnimation() {
|
|
4775
|
+
const cancel = this.sheetAnimCancel;
|
|
4776
|
+
this.sheetAnimCancel = null;
|
|
4777
|
+
cancel?.();
|
|
4778
|
+
const el = this.panelEl;
|
|
4779
|
+
if (el && this.sheetOffsetY) this.resetSheetStyles(el);
|
|
4780
|
+
}
|
|
4781
|
+
/**
|
|
4782
|
+
* 把面板位移过渡到目标值,返回是否走到终点(被 cancelSheetAnimation 取消时为 false)。
|
|
4783
|
+
* 过渡事件缺失(元素被隐藏、标签页切到后台)时由定时器兜底结束,面板不停在半途。
|
|
4784
|
+
*/
|
|
4785
|
+
sheetTransition(el, target, duration) {
|
|
4786
|
+
return new Promise((resolve) => {
|
|
4787
|
+
let settled = false;
|
|
4788
|
+
let timer;
|
|
4789
|
+
const finish = (completed) => {
|
|
4790
|
+
if (settled) return;
|
|
4791
|
+
settled = true;
|
|
4792
|
+
el.removeEventListener("transitionend", onEnd);
|
|
4793
|
+
el.removeEventListener("transitioncancel", onCancel);
|
|
4794
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
4795
|
+
if (this.sheetAnimCancel === cancel) this.sheetAnimCancel = null;
|
|
4796
|
+
resolve(completed);
|
|
4797
|
+
};
|
|
4798
|
+
const cancel = () => finish(false);
|
|
4799
|
+
const onEnd = (event) => {
|
|
4800
|
+
if (event.propertyName === "transform") finish(true);
|
|
4801
|
+
};
|
|
4802
|
+
const onCancel = (event) => {
|
|
4803
|
+
if (event.propertyName === "transform") finish(false);
|
|
4804
|
+
};
|
|
4805
|
+
timer = setTimeout(() => finish(true), duration + SHEET_ANIM_FALLBACK_MS);
|
|
4806
|
+
this.sheetAnimCancel = cancel;
|
|
4807
|
+
el.addEventListener("transitionend", onEnd);
|
|
4808
|
+
el.addEventListener("transitioncancel", onCancel);
|
|
4809
|
+
el.style.transition = `transform ${duration}ms ${SHEET_EASING}`;
|
|
4810
|
+
el.style.transform = `translateY(${target}px)`;
|
|
4811
|
+
});
|
|
4812
|
+
}
|
|
4813
|
+
/** 下拉手势开始:终止进行中的动效,并关闭过渡让面板直接跟手 */
|
|
4814
|
+
beginSheetGesture() {
|
|
4815
|
+
if (!this.isMobileLayout) return;
|
|
4816
|
+
this.cancelSheetAnimation();
|
|
4817
|
+
this.sheetSamples = [];
|
|
4818
|
+
const el = this.panelEl;
|
|
4819
|
+
if (el) el.style.transition = "none";
|
|
4820
|
+
}
|
|
4821
|
+
/** 跟手位移:只认纵向占优的向下拖动;上滑与横向拖动不移动面板(面板没有第二档高度可展开) */
|
|
4822
|
+
onSheetDragMove(dx, dy) {
|
|
4823
|
+
if (!this.isMobileLayout) return;
|
|
4824
|
+
const el = this.panelEl;
|
|
4825
|
+
if (!el) return;
|
|
4826
|
+
const offsetY = dy > 0 && Math.abs(dy) > Math.abs(dx) ? dy : 0;
|
|
4827
|
+
this.sheetSamples.push({
|
|
4828
|
+
t: performance.now(),
|
|
4829
|
+
dy: offsetY
|
|
4830
|
+
});
|
|
4831
|
+
this.setSheetOffset(el, offsetY);
|
|
4832
|
+
}
|
|
4833
|
+
/** 松手:按位移或速度判定收起,否则回弹归位 */
|
|
4834
|
+
onSheetDragEnd(cancelled) {
|
|
4835
|
+
if (!this.isMobileLayout) return;
|
|
4836
|
+
const el = this.panelEl;
|
|
4837
|
+
const samples = this.sheetSamples;
|
|
4838
|
+
this.sheetSamples = [];
|
|
4839
|
+
if (!el) return;
|
|
4840
|
+
if (decideSheetRelease(samples, {
|
|
4841
|
+
panelHeight: el.offsetHeight,
|
|
4842
|
+
cancelled
|
|
4843
|
+
}) === "dismiss") {
|
|
4844
|
+
this.collapse();
|
|
4845
|
+
return;
|
|
4846
|
+
}
|
|
4847
|
+
if (!this.sheetOffsetY) return;
|
|
4848
|
+
if (this.sheetMotionDisabled(el)) {
|
|
4849
|
+
this.resetSheetStyles(el);
|
|
4850
|
+
return;
|
|
4851
|
+
}
|
|
4852
|
+
this.sheetTransition(el, 0, 180).then((completed) => {
|
|
4853
|
+
if (completed) this.resetSheetStyles(el);
|
|
4854
|
+
});
|
|
4578
4855
|
}
|
|
4579
4856
|
/** tourStyle:快捷指令携带的讲解风格;输入框提交时不传,按面板设置与宿主默认 */
|
|
4580
4857
|
async submit(tourStyle) {
|
|
@@ -4582,6 +4859,7 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4582
4859
|
if (isRunning() || !text) return;
|
|
4583
4860
|
this.task = "";
|
|
4584
4861
|
this.requestUpdate();
|
|
4862
|
+
if (this.collapseOnRun) this.collapse();
|
|
4585
4863
|
await runTask(text, {
|
|
4586
4864
|
source: LAUNCHER_SOURCE,
|
|
4587
4865
|
...tourStyle ? { tourStyle } : {}
|
|
@@ -4704,12 +4982,16 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4704
4982
|
${this.renderChips(presets, accent)}
|
|
4705
4983
|
</div>`);
|
|
4706
4984
|
}
|
|
4707
|
-
|
|
4985
|
+
/**
|
|
4986
|
+
* checked 为复选框的显示状态,默认取存储值。
|
|
4987
|
+
* 「未设置时按布局取默认」的设置项(如 autoCollapseOnRun)需要传生效值,否则未操作过时显示与生效状态不一致。
|
|
4988
|
+
*/
|
|
4989
|
+
renderCheckbox(key, label, hint, disabled = false, checked) {
|
|
4708
4990
|
const settings = pageUseSettings.get();
|
|
4709
4991
|
return html`<label class="checkbox ${disabled ? "disabled" : ""}">
|
|
4710
4992
|
<input
|
|
4711
4993
|
type="checkbox"
|
|
4712
|
-
.checked=${Boolean(settings[key])}
|
|
4994
|
+
.checked=${checked ?? Boolean(settings[key])}
|
|
4713
4995
|
?disabled=${disabled}
|
|
4714
4996
|
@change=${(e) => pageUseSettings.update({ [key]: e.target.checked })}
|
|
4715
4997
|
/>
|
|
@@ -4727,6 +5009,7 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
4727
5009
|
${this.renderCheckbox("enableMask", "运行时蒙层防误触", "下次任务开始生效")}
|
|
4728
5010
|
${config?.beforeTask ? this.renderCheckbox("enableBeforeTask", config.beforeTaskLabel) : nothing}
|
|
4729
5011
|
${this.renderCheckbox("showStepDetails", "步骤显示模型思考与返回")}
|
|
5012
|
+
${this.isMobileLayout ? this.renderCheckbox("autoCollapseOnRun", "执行后自动收起面板", "收起后可看到页面执行过程", false, this.collapseOnRun) : nothing}
|
|
4730
5013
|
${this.renderVoiceSettings(settings)}
|
|
4731
5014
|
${config?.pageTour.enabled ? this.renderTourStyleSetting(settings, config) : nothing}
|
|
4732
5015
|
<div class="row settings-actions">
|
|
@@ -5210,18 +5493,20 @@ var PageUseLauncherElement = class extends LitElement {
|
|
|
5210
5493
|
?hidden=${this.open}
|
|
5211
5494
|
style=${this.fabStyle(settings)}
|
|
5212
5495
|
title=${running ? `执行中:${state.activityText || state.currentTask}` : `打开 ${title}`}
|
|
5213
|
-
@pointerdown=${this.
|
|
5496
|
+
@pointerdown=${this.onFabPointerDown}
|
|
5497
|
+
@click=${this.onFabClick}
|
|
5214
5498
|
>
|
|
5215
5499
|
<span class="fab-icon">${robotIcon}</span>
|
|
5216
5500
|
<span>${running ? "执行中" : title}</span>
|
|
5217
5501
|
</button>
|
|
5218
5502
|
|
|
5219
5503
|
<section
|
|
5220
|
-
class="panel ${running ? "running" : ""}"
|
|
5504
|
+
class="panel ${running ? "running" : ""} ${this.isMobileLayout ? "mobile" : ""}"
|
|
5221
5505
|
?hidden=${!this.open}
|
|
5222
5506
|
style=${this.open ? this.panelStyle(settings) : ""}
|
|
5223
5507
|
>
|
|
5224
5508
|
<header class="head" @pointerdown=${this.panelDrag.onPointerDown}>
|
|
5509
|
+
${this.isMobileLayout ? html`<span class="grabber" aria-hidden="true"></span>` : nothing}
|
|
5225
5510
|
<span class="dot ${state.status}" title=${STATUS_LABELS[state.status] || state.status}></span>
|
|
5226
5511
|
<span class="title">${title}</span>
|
|
5227
5512
|
<span class="status">
|
package/dist/vue.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as
|
|
1
|
+
import { $ as DEFAULT_TOUR_MAX_TAB_SWITCHES, A as PageUseGlobal, B as MountPageUseUIOptions, C as getElapsedSeconds, Ct as PageUseTaskResult, D as pageUseStore, E as isRunning, F as PAGE_USE_TOOL_NAME, G as PageUseLauncherElement, H as mountPageUseUI, I as PageUseCommand, J as createPageUse, K as PageUseLauncherLayout, L as formatPageUseResultForModel, M as showPageUseLauncher, N as PAGE_USE_COMMAND_TYPE, O as ReadonlyStore, P as PAGE_USE_TOOL, Q as DEFAULT_STORAGE_KEY_PREFIX, R as isPageUseCommand, S as clearPageUseLog, St as PageUseStepLog, T as isPageUseConfigured, Tt as PageUseTaskStatus, U as PAGE_USE_LAUNCHER_TAG, V as definePageUseElements, W as PageUseLauncherConfig, X as DEFAULT_MODEL, Y as DEFAULT_MAX_STEPS, Z as DEFAULT_SESSION_HEADER, _ as pageUseSettings, _t as PageUseMenuNode, a as PAGE_USE_ROBOT_ICON_SVG, at as normalizeOptions, b as PageUseQuestion, bt as PageUseRunOptions, c as PageUseCustomPreset, ct as PageUseTtsSpeakOptions, d as pageUsePresets, dt as PageUseTourStyle, et as NormalizedPageUseOptions, f as PageUseHistoryEntry, ft as TOUR_STYLE_TRAINER, g as PageUseSettings, gt as PageUseErrorCode, h as PageUsePoint, ht as pageUseCapability, i as PageUseGlowElement, it as PageUseTourOptions, j as hidePageUseLauncher, k as PAGE_USE_GLOBAL_KEY, l as PageUsePresetSaveResult, lt as PageUseTtsVoice, m as DEFAULT_PAGE_USE_SETTINGS, mt as PageUseCapability, n as SIMULATOR_MASK_ID, nt as PageUseOptions, o as PAGE_USE_STATIC_PRESETS, ot as readLauncherSwitch, p as pageUseHistory, pt as TOUR_STYLE_USER, q as PageUseHandle, r as PAGE_USE_GLOW_TAG, rt as PageUseRouterMode, s as buildMenuPresets, st as PageUseTtsEngine, t as PAGE_USE_MASK_COLORS, tt as PageUseLLMOptions, u as PageUsePresetState, ut as DEFAULT_TOUR_STYLES, v as BROWSER_ENGINE_ID, vt as PageUsePreset, w as getPageUseConfig, wt as PageUseTaskSource, x as PageUseState, xt as PageUseSnapshot, y as browserTtsEngine, yt as PageUseProgressEvent, z as runPageUseTool } from "./index-DAwlbs2a.mjs";
|
|
2
2
|
import { PropType, ShallowRef } from "vue";
|
|
3
3
|
import { Router } from "vue-router";
|
|
4
4
|
//#region src/vue.d.ts
|
|
@@ -50,4 +50,4 @@ export declare function usePageUseState(): Readonly<ShallowRef<PageUseState>>;
|
|
|
50
50
|
/** 本地设置的 Vue 响应式引用;修改请调用 pageUseSettings.update */
|
|
51
51
|
export declare function usePageUseSettings(): Readonly<ShallowRef<PageUseSettings>>;
|
|
52
52
|
//#endregion
|
|
53
|
-
export { BROWSER_ENGINE_ID, DEFAULT_MAX_STEPS, DEFAULT_MODEL, DEFAULT_PAGE_USE_SETTINGS, DEFAULT_SESSION_HEADER, DEFAULT_STORAGE_KEY_PREFIX, DEFAULT_TOUR_MAX_TAB_SWITCHES, DEFAULT_TOUR_STYLES, type MountPageUseUIOptions, type NormalizedPageUseOptions, PAGE_USE_COMMAND_TYPE, PAGE_USE_GLOBAL_KEY, PAGE_USE_GLOW_TAG, PAGE_USE_LAUNCHER_TAG, PAGE_USE_MASK_COLORS, PAGE_USE_ROBOT_ICON_SVG, PAGE_USE_STATIC_PRESETS, PAGE_USE_TOOL, PAGE_USE_TOOL_NAME, type PageUseCapability, type PageUseCommand, type PageUseCustomPreset, type PageUseErrorCode, type PageUseGlobal, PageUseGlowElement, type PageUseHandle, type PageUseHistoryEntry, type PageUseLLMOptions, type PageUseLauncherConfig, PageUseLauncherElement, type PageUseMenuNode, type PageUseOptions, type PageUsePoint, type PageUsePreset, type PageUsePresetSaveResult, type PageUsePresetState, type PageUseProgressEvent, type PageUseQuestion, type PageUseRouterMode, type PageUseRunOptions, type PageUseSettings, type PageUseSnapshot, type PageUseState, type PageUseStepLog, type PageUseTaskResult, type PageUseTaskSource, type PageUseTaskStatus, type PageUseTourOptions, type PageUseTourStyle, type PageUseTtsEngine, type PageUseTtsSpeakOptions, type PageUseTtsVoice, type ReadonlyStore, SIMULATOR_MASK_ID, TOUR_STYLE_TRAINER, TOUR_STYLE_USER, browserTtsEngine, buildMenuPresets, clearPageUseLog, createPageUse, definePageUseElements, formatPageUseResultForModel, getElapsedSeconds, getPageUseConfig, hidePageUseLauncher, isPageUseCommand, isPageUseConfigured, isRunning, mountPageUseUI, normalizeOptions, pageUseCapability, pageUseHistory, pageUsePresets, pageUseSettings, pageUseStore, readLauncherSwitch, runPageUseTool, showPageUseLauncher };
|
|
53
|
+
export { BROWSER_ENGINE_ID, DEFAULT_MAX_STEPS, DEFAULT_MODEL, DEFAULT_PAGE_USE_SETTINGS, DEFAULT_SESSION_HEADER, DEFAULT_STORAGE_KEY_PREFIX, DEFAULT_TOUR_MAX_TAB_SWITCHES, DEFAULT_TOUR_STYLES, type MountPageUseUIOptions, type NormalizedPageUseOptions, PAGE_USE_COMMAND_TYPE, PAGE_USE_GLOBAL_KEY, PAGE_USE_GLOW_TAG, PAGE_USE_LAUNCHER_TAG, PAGE_USE_MASK_COLORS, PAGE_USE_ROBOT_ICON_SVG, PAGE_USE_STATIC_PRESETS, PAGE_USE_TOOL, PAGE_USE_TOOL_NAME, type PageUseCapability, type PageUseCommand, type PageUseCustomPreset, type PageUseErrorCode, type PageUseGlobal, PageUseGlowElement, type PageUseHandle, type PageUseHistoryEntry, type PageUseLLMOptions, type PageUseLauncherConfig, PageUseLauncherElement, type PageUseLauncherLayout, type PageUseMenuNode, type PageUseOptions, type PageUsePoint, type PageUsePreset, type PageUsePresetSaveResult, type PageUsePresetState, type PageUseProgressEvent, type PageUseQuestion, type PageUseRouterMode, type PageUseRunOptions, type PageUseSettings, type PageUseSnapshot, type PageUseState, type PageUseStepLog, type PageUseTaskResult, type PageUseTaskSource, type PageUseTaskStatus, type PageUseTourOptions, type PageUseTourStyle, type PageUseTtsEngine, type PageUseTtsSpeakOptions, type PageUseTtsVoice, type ReadonlyStore, SIMULATOR_MASK_ID, TOUR_STYLE_TRAINER, TOUR_STYLE_USER, browserTtsEngine, buildMenuPresets, clearPageUseLog, createPageUse, definePageUseElements, formatPageUseResultForModel, getElapsedSeconds, getPageUseConfig, hidePageUseLauncher, isPageUseCommand, isPageUseConfigured, isRunning, mountPageUseUI, normalizeOptions, pageUseCapability, pageUseHistory, pageUsePresets, pageUseSettings, pageUseStore, readLauncherSwitch, runPageUseTool, showPageUseLauncher };
|
package/dist/vue.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as pageUseSettings, B as BROWSER_ENGINE_ID, C as getPageUseConfig, D as pageUsePresets, E as pageUseStore, F as DEFAULT_TOUR_MAX_TAB_SWITCHES, H as DEFAULT_TOUR_STYLES, I as normalizeOptions, L as readLauncherSwitch, M as DEFAULT_MODEL, N as DEFAULT_SESSION_HEADER, O as pageUseHistory, P as DEFAULT_STORAGE_KEY_PREFIX, R as PAGE_USE_MASK_COLORS, S as getElapsedSeconds, T as isRunning, U as TOUR_STYLE_TRAINER, V as browserTtsEngine, W as TOUR_STYLE_USER, _ as runPageUseTool, a as PAGE_USE_STATIC_PRESETS, b as pageUseCapability, c as PAGE_USE_GLOW_TAG, d as PAGE_USE_GLOBAL_KEY, f as PAGE_USE_COMMAND_TYPE, g as isPageUseCommand, h as formatPageUseResultForModel, i as PageUseLauncherElement, j as DEFAULT_MAX_STEPS, k as DEFAULT_PAGE_USE_SETTINGS, l as PageUseGlowElement, m as PAGE_USE_TOOL_NAME, n as mountPageUseUI, o as buildMenuPresets, p as PAGE_USE_TOOL, r as PAGE_USE_LAUNCHER_TAG, s as PAGE_USE_ROBOT_ICON_SVG, t as definePageUseElements, u as createPageUse, v as hidePageUseLauncher, w as isPageUseConfigured, x as clearPageUseLog, y as showPageUseLauncher, z as SIMULATOR_MASK_ID } from "./src-
|
|
1
|
+
import { A as pageUseSettings, B as BROWSER_ENGINE_ID, C as getPageUseConfig, D as pageUsePresets, E as pageUseStore, F as DEFAULT_TOUR_MAX_TAB_SWITCHES, H as DEFAULT_TOUR_STYLES, I as normalizeOptions, L as readLauncherSwitch, M as DEFAULT_MODEL, N as DEFAULT_SESSION_HEADER, O as pageUseHistory, P as DEFAULT_STORAGE_KEY_PREFIX, R as PAGE_USE_MASK_COLORS, S as getElapsedSeconds, T as isRunning, U as TOUR_STYLE_TRAINER, V as browserTtsEngine, W as TOUR_STYLE_USER, _ as runPageUseTool, a as PAGE_USE_STATIC_PRESETS, b as pageUseCapability, c as PAGE_USE_GLOW_TAG, d as PAGE_USE_GLOBAL_KEY, f as PAGE_USE_COMMAND_TYPE, g as isPageUseCommand, h as formatPageUseResultForModel, i as PageUseLauncherElement, j as DEFAULT_MAX_STEPS, k as DEFAULT_PAGE_USE_SETTINGS, l as PageUseGlowElement, m as PAGE_USE_TOOL_NAME, n as mountPageUseUI, o as buildMenuPresets, p as PAGE_USE_TOOL, r as PAGE_USE_LAUNCHER_TAG, s as PAGE_USE_ROBOT_ICON_SVG, t as definePageUseElements, u as createPageUse, v as hidePageUseLauncher, w as isPageUseConfigured, x as clearPageUseLog, y as showPageUseLauncher, z as SIMULATOR_MASK_ID } from "./src-nVu9CCnz.mjs";
|
|
2
2
|
import { defineComponent, inject, onBeforeUnmount, onScopeDispose, shallowRef } from "vue";
|
|
3
3
|
import { routerKey } from "vue-router";
|
|
4
4
|
|
package/package.json
CHANGED