Continue FreeCAD Web UI parity repairs
Some checks failed
FreeCAD master CI / Prepare (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
FreeCAD master CI / Pixi (push) Has been cancelled
FreeCAD master CI / Ubuntu (push) Has been cancelled
FreeCAD master CI / Windows (push) Has been cancelled
FreeCAD master CI / Lint (push) Has been cancelled
FreeCAD master CI / WrapUp (push) Has been cancelled
Stale Issues / stale (push) Has been cancelled
CodeQL Advanced (c-cpp) / Analyze (c-cpp) (push) Has been cancelled
Push Crowdin Translations / update-crowdin (push) Has been cancelled
Fetch Crowdin Translations / update-crowdin (push) Has been cancelled
Build Release / upload_src (push) Has been cancelled
Build Release / build (10.13, macos-15-intel, osx-64) (push) Has been cancelled
Build Release / build (11.0, macos-latest, osx-arm64) (push) Has been cancelled
Build Release / build (15.0, macos-latest, osx-arm64) (push) Has been cancelled
Build Release / build (ubuntu-22.04, linux-64) (push) Has been cancelled
Build Release / build (ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Build Release / build (windows-latest, win-64) (push) Has been cancelled
Monthly issue metrics / issue metrics (push) Has been cancelled

This commit is contained in:
2026-09-23 14:03:56 +08:00
parent 2121db4358
commit 789e18ca3e
27 changed files with 48881 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
# Codex 重启接续 — 2026-09-23 13:56 CST
## 暂停状态
用户要求“暂停一下 codex,准备接续文件”。已执行:
```sh
systemctl --user stop freecad-web-acceptance.service
```
暂停后确认:`freecad-web-acceptance.service` 为 `inactive/dead`,MainPID=0;没有留下 OpenSCAD ninja、Vite 或 scheduler 子进程。重启 Codex 后不要擅自恢复后台,等待用户要求继续;继续时只恢复这个原单一服务,不启动第二调度器。
工作区:`/home/mes123456/FreeCADWasmDev`;项目目录:`working/FreeCAD`。
## 主线铁律
- 唯一主线:桌面 FreeCAD UI → Web FreeCAD UI 和功能完全对标,覆盖菜单、工具栏、任务/控制面板、属性页、对话框、右键菜单、状态反馈和完整操作者流程。
- 按共享工作台、原生文档所有者和构建目标集中处理同类问题,不拆孤立按钮;复用已有 task、facade、owner、原生产物。
- 只做源码接线、样式、原生调用和必要增量构建;不运行测试、烟测、浏览器、截图、独立类型检查、验收或证据复核。状态使用 `implemented_unvalidated`;构建成功不是业务完成。
- 原生构建固定 `-j8`;前端使用 `python3 tools/build_web_frontend.py`,该 helper 已包含 `web/.freecad-web-frontend-build.lock`,避免调度器与前台同时清理/写入 `web/dist`。
- 不把空队列、查缺结果、心跳、烟测 68/68、路由标记或构建成功当全部主线完成。所有共享台账用 `tools/policy_io.py` 原子写入。
- 不改动正在执行的包,不重复已完成源码/构建;出现冷却或无任务时沿源码游标轮转,保存下一确切文件和行号。
## 暂停前实际状态
最后运行 `./当前执行情况 --details` 的结果:
- 查询约 2026-09-23 13:56 CST;调度已停止,第 10807 轮。
- 停止前第 10807 轮为 Import 源码查缺,不验证;当时没有待完成具体任务,也没有排队任务。
- 最后阶段说明:读取 Import 保存的源码索引和接续游标,只写 discovery JSON,不构建、不验证。
- 最后命令读取 Import 的 `ImportExportPreferencesTask`、`ReadShapeCompoundMode`、`VisibleImportDialog`、`ExpandCompound`、`UseLinkGroup`、`ImportHidden`、`ReduceObjects`、`ShowProgress`、`KeepPlacement`、`exportHidden` 等入口;该查缺回合在暂停时尚未写出新的结果文件。
- 最新已完成查缺文件:`docs/current/operator-gap-discovery/run-000312.json`(OpenSCAD);该文件记录的 OpenSCAD printVerbose residual 已被实现并登记,不能重做。
- 状态文件:`docs/current/freecad-web-scheduler-status.json`;最后 live log:`docs/current/continuation-runs/cycle-010807.log`。
## 最近完成且必须复用
### OpenSCAD
第 10806 轮已完成并登记:`operator-gap-openscad-preferences-runtime-bridge`,状态 `implemented_unvalidated`。`importCSG` 在 `open/insert/processcsg` 边界刷新 `printVerbose`,Add/Refresh 路径也显式刷新;原生目标 `FreeCADWebOpenSCADRuntimeProbe` 已用 `ninja ... -j8` 增量构建,前端 helper 已交付。记录保留在 `docs/current/operator-gap-openscad-preferences-runtime-bridge-implementation.json`。不要重建或重复实现。
### Start
`docs/current/start-first-start-general-settings-20260923/README.md`:
- `start-preferences.tsx` 新增 `readStartGeneral`、`saveStartGeneral`、`FirstStartGeneralSettings`、`applyStartTheme`;Language、UserSchema(Int)、NavigationStyle、Theme 复用现有参数 owner。
- `start-launch-panel.tsx` 首次启动面板挂载共享 General settings;Done 等待设置读取完成,设置写入时显示 busy/error。
- 前端构建退出 0,最后一次约 1.64s;未运行验证。
- 仓库暂无独立 Web locale loader,语言参数持久化和刷新事件已接通,但静态 shell 即时翻译仍是明确限制;不要把这项描述成已实现完整本地化。
### 共享工具栏/Tux
- `docs/current/desktop-ui-toolbar-preferences-repair-20260923/README.md`:PersistentToolbars root Enabled 与 User FCParam 共同快照、OPFS、广播、失败回滚、重试和焦点恢复。
- `docs/current/desktop-ui-toolbar-visibility-20260923/README.md`:工具栏右键/Toolbars 显隐、`BaseApp/MainWindow/Toolbars` Bool 保存、键盘菜单、隐藏宿主、共享锁。
- `web/src/toolbar-preferences.ts`、`persistent-toolbar-workspace.tsx`、`toolbar-visibility-menu.tsx` 已完成范围状态为 implemented_unvalidated。
### Part UI 包
`operator-gap-ui-part-menu-toolbar-family` 仍为 `open`,但已完成的范围必须复用:
- 菜单层级、工具栏、桌面 SVG、键盘/Esc/焦点在 `docs/current/desktop-ui-part-entry-repair-20260923/README.md`。
- 网格转换、采样、附着、Part DocumentProbe 框选和同文档 New Sketch 已实现;New Sketch 的记录为 `sketch-delivery.md`。
- 当前真正剩余:PartDesign/其他 owner 的 `sketcherCommand` 路由、跨 owner 框选、未追溯的快捷键元数据。源码读取阻塞已修复,接续说明在 `source-access-recovery.md`、`owner-routing-blocker.md`。
- 不要依据旧 continuation.md 中“尚未挂载 task / New Sketch 未接线”的历史文字重复施工。
## 工具/执行问题修复
- `tools/read_implementation_source.py` 允许确认包命名源码的一跳直接前端 import 依赖,仍保留 packet、窗口数、总字节、单窗口和指纹预算;用于解决 Part 跨 owner 读取被错误拒绝的问题。记录:`docs/current/desktop-ui-part-entry-repair-20260923/source-access-recovery.md`。
- `tools/prepare_implementation_business_batch.py` 的 sourceAccess 文案已同步该规则;无须重启后台以加载到下一轮,恢复服务后自然读取。
- `tools/build_web_frontend.py` 现在用 `web/.freecad-web-frontend-build.lock` 串行化共享 `web/dist` 写入;等待超过 1800 秒返回 124,不反复重启。
- 上下文 413 修复仍有效:scheduler session token limit 24000、prompt byte limit 16000,超限保存有界接续,不重复发送超大请求。记录:`docs/current/context-budget-recovery-20260923/README.md`。
## 恢复后的第一步
1. 读取本文件、`docs/WEB_BUSINESS_MIGRATION_RULES.md`、`docs/current/execution-policy.json`。
2. 确认服务仍为 inactive;用户明确要求继续后,运行 `systemctl --user start freecad-web-acceptance.service`,只恢复原服务。
3. 运行 `./当前执行情况 --details`,读取新的 live cycle;不要把旧的 10806 OpenSCAD 或 13:47 快照当当前状态。
4. 读取当前 `cycle-*.log` 和新的 Import discovery JSON。若 Import 产生具体 gap,先登记/执行整组包;若为空,沿其 `nextCursor` 轮转,不宣称完成。
5. 对任何现有 open key,优先使用其 `continuationNotes`、`lastExecutionCheckpoint` 和记录路径;不重复已完成构建。原生修改才构建受影响目标 `-j8`;前端相关组只调用一次锁定 helper。
6. 每轮继续保持不验证。汇报格式:处理模块 | 对标项 | 源码落点 | 路由入口 | OCCT 边界 | 状态 | 结论。
## 暂停前台账结论
当前没有已登记的具体 open 任务,但这只是调度队列快照;桌面 UI → Web UI 和功能完全对标**尚未完成**。不要用空队列或 68/68 烟测记录改变完成定义。

View File

@@ -0,0 +1,44 @@
# Part 桌面菜单/工具栏入口集中补漏 — 2026-09-23
状态:入口布局与键盘修改已实现,未验证;原 Part 包的主工作区任务接线仍待完成。
## 本轮已修改
`web/src/part-workbench-ui.tsx`:
- 依据 `freecad-source/src/Mod/Part/Gui/Workbench.cpp::setupMenuBar/setupToolBars`,将 Box Selection 放回首项;Shape From Mesh、Points From Shape、Attachment、材料检查放回顶层,移除额外 Feature/Inspection 子菜单及重复检查命令。
- New Sketch 放回 Part 菜单和 Part Tools 工具栏,继续使用既有 activatePartAction。
- 从桌面命令定义采用 Primitive、Persistent Section Cut、Points From Shape、New Sketch、Attachment 标签。
- 修正 Shape From Mesh 和 Attachment 图标名;复制五个原生 SVG 到 `web/public/icons/part/`:Part_BoxSelection、Part_Shape_from_Mesh、Part_PointsFromMesh、Part_Attachment、Sketcher_NewSketch。材料检查命令在桌面无图标,移除不存在的 SVG 引用并保留菜单图标占位空间。
- 整组菜单共用键盘行为:上下键在当前层移动、右键/Enter 进入子菜单、左键/Esc 返回当前父层、Home/End 跳转、Tab 收起并返回入口焦点;打开同级菜单时收起其他菜单,执行命令前恢复入口焦点。
沿用 `partUiActions → PartWorkbenchMenu/PartWorkbenchToolbars → project-shell.tsx::activatePartAction`。本轮未改几何算法、原生所有者或 Three.js 模型逻辑。
## 有源码依据的原包残余(不能用已有菜单标记宣称完成)
在 `web/src/project-shell.tsx::activatePartAction`,shape-from-mesh、points-from-mesh、edit-attachment、box-selection 仅设置 workspaceTask 并请求 read;相应任务组件没有在主工作区挂载。Sketcher_NewSketch 只切换工作台并设置 sketcher-new-sketch,未挂载对应创建流程。
1. Mesh 转换和几何采样:复用 `part-mesh-conversion-task.tsx`、`part-sample-points-task.tsx` 及 workbench-shell 中现有挂载。增加嵌入方式,使用当前文档快照/选择、同一 nativeRequest 和 applyNativeDocument;保留 tolerance/sew/sampleDistance、真实 Accept/Cancel/错误反馈,不新建 fixture 或第二文档。适配器已有 createShapeFromMesh/createPointSamples 原生请求。
2. Attachment:复用 `part-attachment-task.tsx` 和 executePartAttachmentDesktop 的 begin/apply/accept/cancelAttachment 事务,挂载主工作区并保留引用、MapMode、offset/rotation、取消回滚及卸载处理。单纯 read/snapshot 不会启动编辑。
3. BoxSelection:复用 WebViewTask/当前视口的区域框选与 selection callback。executePartBoxSelectionDesktop 发出 part.viewCommand 或 part.documentViewCommand,并非 PART_DOCUMENT_COMMAND。当前 runRetainedPartCommand 里的假 router 忽略 command 且一律把 payload.action 送 nativeRequest,不适合此路由;必须按 owner/command 接到真实视图协议。
4. New Sketch:接通既有 Sketcher 创建任务和当前文档所有者,明确平面/支持选择、确认、取消与模型树更新;切换工作台和写任务字符串不是创建流程。
以上属于已有 `operator-gap-ui-part-menu-toolbar-family` 未交付的原范围,回写同一个 key,不新建孤立按钮任务。原有 Tube/Primitives/Tolerance、快捷基本体与布尔路由、已完成菜单布局直接复用。
## 构建与接续
- 命令(项目目录):`python3 tools/build_web_frontend.py`。
- 日志:`docs/current/desktop-ui-part-entry-repair-20260923/build.log`。
- 退出码 0;Vite 日志 built in 1.65s,保留已有大 chunk 提示。
- 无原生源码修改,未运行原生构建;无未结束的本轮构建进程。
- 未运行测试、浏览器、截图、独立类型检查或验收。构建成功不代表完整功能通过。
- 第 10780 轮原调度器正在执行 Material 两个包,本轮只改 Part 独立源码与资源,未启动第二调度器;共享策略通过 tools/policy_io.py 原子更新。
处理模块 | 对标项 | 源码落点 | 路由入口 | OCCT 边界 | 状态 | 结论
--- | --- | --- | --- | --- | --- | ---
Part | 菜单层级/工具栏/图标/键盘 | part-workbench-ui.tsx;web/public/icons/part | PartWorkbenchMenu/PartWorkbenchToolbars | 沿用既有 native owner;无算法变更 | 已补漏(未验证) | 保留
Part | 主工作区任务/视图协议/草图创建 | project-shell.tsx;既有 Part task 组件和适配器 | activatePartAction/runRetainedPartCommand | 需正确接到现有 Part/Sketcher 文档与视图所有者 | 已定位待接 | 继续
## 主任务续接更新
参见 [continuation.md](continuation.md):网格转换、几何采样、附着、框选已接主工作区并完成一次配置前端交付;New Sketch 仍未完成,整包保持 open。

View File

@@ -0,0 +1,36 @@
# Part 包跨所有者接线:源码读取阻塞补漏
2026-09-23 本轮依据 `owner-routing-blocker.md` 接续。该记录明确指出两种不同阻塞:
1. 已有依赖 `web/src/partdesign-document-facade.ts`、`web/src/web-view-task.tsx` 被读取器当作不在模块范围拒绝。
2. 已耗尽 16 个源码窗口/48000 字节后继续请求被拒绝。
第一项是任务包依赖/工具策略缺口;第二项应保存精确接续、进入新有界回合,不能取消预算或循环同一请求。
## 本轮源码修改
- `tools/read_implementation_source.py`:已确认功能包可读取其命名源码直接相对 import/from/dynamic import 引用的前端依赖。仅追踪一跳,`.js` 按本仓库惯例映射 `.ts/.tsx`;候选限于 `web/src`,锚点最大 512 KiB,不递归扫描。原窗口数、总字节、每窗上限、同窗指纹去重和调度器预算标记保留。
- `tools/prepare_implementation_business_batch.py`:复用包说明同步直接 import 能力,预算用尽后保存下一文件/行,不重读已完成范围。
- 原 Part key 的 `sourceAnchors` 补入以下确切依赖,使下一包既可直接读取又保留跨所有者接续边界。没有修改当前正在执行的 ReverseEngineering 查缺包,也没有另启调度器或手工重建当前 packet。
## 已定位调用链:下一轮直接按这些落点实现
1. `project-shell.tsx:82` 已 import PartDesign facade,`:61` 已 import WebViewTask。这两个被拒绝的文件都是正式主工作区直接依赖。
2. `project-shell.tsx:205` remoteRequest 发送 `freecad-project-native-request`;`workbench-shell.tsx:617` forward 验证来源并按保留 owner 构造 `partdesign.document` / `part.document` payload;不是把对象迁入另一个文档。
3. `partdesign-document-facade.ts:1` 是 DesignAction 与请求/结果协议;`partdesign.worker.ts:6` 分派它,加载 `FreeCADWebPartDesignRuntimeProbe`。独立 `partdesign-save.worker.ts` 不是普通文档命令所有者,不必继续读取它。
4. `PartDesignRuntimeProbe.cpp:1345` 将 `partdesign.document` 发往 `PartDesignDocumentWorkflow.cpp:661::dispatchPartDesignDocument`。sketcherCommand 必须逐层接通动作合同和真实原生消费者,不能只给 action map 添字符串。
5. `module-router.ts:284` 对登记为 Assembly modeling 的文档改派 `assembly.worker.ts`,同名 PartDesign 命令不代表相同 WASM 所有者。沿实际消费者判断所需构建目标,避免以字段名代替支持声明。
6. 框选:`web-view-task.tsx:23` 接收 runtimeOwner;`part-view-facade.ts` 的公开 ViewOwner 当前只有 PartBox/DocumentProbe,协议检查也仅接受这两个。扩展所有者必须追到 native endpoint;不能将 PartDesign 文档标成 DocumentProbe 读取另一份同名文档。
## 复用与真实剩余
New Sketch 的 Part DocumentProbe 原生路由、已完成链接、创建/关闭控件,以及 Appearance per Face 的 View 入口已由此前记录交付。复用 `sketch-delivery.md`、`owner-routing-blocker.md` 和已有日志,不重复构建/实现。
原 Part 包继续 open,实际剩余是其他文档所有者 sketch 分派、跨所有者框选和未追溯的快捷键元数据。本轮解决读取阻塞并提供调用链,不宣称这些业务接线已经完成。
无需编译:本轮仅改 Python 执行工具与接续元数据;脚本由后续调用加载,无需重启后台。未执行测试、语法检查、业务验证、浏览器、截图或构建,无本轮未结束进程。原服务在第 10791 轮继续 ReverseEngineering 源码查缺。
处理模块 | 对标项 | 源码落点 | 路由入口 | OCCT 边界 | 状态 | 结论
--- | --- | --- | --- | --- | --- | ---
Part 接续工具 | 跨工作台精确依赖读取 | read_implementation_source.py;prepare_implementation_business_batch.py | 原单一调度器读取工具 | 不改模型算法 | 已补漏(未验证) | 保留
Part 跨所有者 UI | 草图/框选的真实文档调用链 | project-shell → facade/worker → native owner | 已保存精确落点 | 继续复用实际 WASM 消费者 | 已定位待接 | 继续

View File

@@ -0,0 +1,46 @@
# 共享工具栏偏好持久化与失败恢复补漏
状态:本次具体缺口已实现,未验证。属于原任务 `operator-gap-tux-persistent-toolbars-enabled-startup`,不新增孤立任务。
## 源码差异与修改
桌面依据:`freecad-source/src/Mod/Tux/InitGui.py` 以 `Tux/PersistentToolbars/Enabled` 原生 Bool 决定是否加载持久工具栏,缺省为 true。
原 Web 实现虽然在 restoreToolbars/saveToolbars 中读取 Enabled,但 `toolbarParameters` 只导出/恢复 User 子组。此前任务记录声称快照已携带根 Bool,与本轮读取到的代码不一致。只有偏好开关读写路由,无法保证关闭后重载仍关闭。
本次在 `web/src/toolbar-preferences.ts` 集中修复:
- 共同保存根 Enabled 和原生 User FCParam 内容。内部快照带 schema,保存为 `Std_DlgParameter-PersistentToolbars.json`,继续使用现有 OPFS saved/persist 和广播通道,不向用户暴露 JSON 操作。
- 首次恢复优先读新快照,兼容已有 `Std_DlgParameter-PersistentToolbars.FCParam`;旧 User-only 快照不覆盖当前原生 Enabled。开关缺省、显式 false/0 均按原生语义处理。
- 导入、保存失败时恢复 User 和 Enabled。快照不导出 System/addTop/addLeft/addRight/addBottom,因此这些原生会话预设保留。
- 仅快照真正变化时落盘/广播。关闭持久化后临时调整布局不会写入保存布局,也不再触发一次无意义的广播刷新将临时排列立刻恢复。
- 原生请求仍使用 requestOwnerParameters;保存、参数面板和恢复共享同一串行参数入口。
在 `web/src/persistent-toolbar-workspace.tsx` 补齐同一工作流:
- 偏好恢复失败后提供 Retry toolbar preferences,避免按钮一直 disabled 且只能刷新页面。
- 每次恢复清除旧错误,沿用 revision 防止旧异步回调覆盖新文档/工作台。
- 排列面板打开时聚焦首个控件;Cancel/Escape 返回 Arrange toolbars 按钮。
- 旧工作台保存失败不覆盖当前工作台反馈。
## 复用与边界
复用包:
1. 既有原生 Enabled 默认值和布局排序/Break 逻辑,记录 `docs/current/operator-gap-tux-persistent-toolbars-enabled-startup-20260921/README.md`。
2. 既有 `view-navigation-preferences.ts::requestOwnerParameters`、OPFS saved/persist 及工具栏广播通道。
3. 既有 `persistent-toolbar-workspace.tsx` 的宿主、revision 和布局预览;不改变建模文档、任务草稿或历史。
路由:Std_DlgParameter → requestToolbarParameters → toolbarParameters → requestOwnerParameters → 已有 DocumentProbe/PartBox 原生参数接口。这里只处理 UI 偏好,无几何算法/OCCT/Three.js 计算变更。
## 本轮构建和接续
- 修改位置:上述两个 Web 源文件。无原生源码修改,无需原生构建。
- 必要前端构建:项目目录执行 `python3 tools/build_web_frontend.py`;使用现有 web 配置、依赖与快速链接产物。
- 日志:`docs/current/desktop-ui-toolbar-preferences-repair-20260923/build.log`;退出码 0;built in 1.63s,保留已有 chunk 大小提示。
- 未执行测试、类型检查、烟测、浏览器、截图或验收;不以构建成功宣称全部 UI 对标完成。
- 无本轮遗留构建进程。原单一调度器第 10783 轮继续处理 Part 当前文档 New Sketch,未启动第二调度器,未修改其正在开发的 project-shell 或原生源码。
- 本范围后续直接复用;剩余整体验收等待用户明确授权,不能自动启动。后续功能按原调度器队列继续。
处理模块 | 对标项 | 源码落点 | 路由入口 | OCCT 边界 | 状态 | 结论
--- | --- | --- | --- | --- | --- | ---
共享工具栏/Tux | Enabled 与布局保存、失败回滚、重试与焦点 | toolbar-preferences.ts;persistent-toolbar-workspace.tsx | Std_DlgParameter 与既有 toolbarParameters | 仅原生参数;无几何变更 | 已补漏(未验证) | 保留

View File

@@ -0,0 +1,362 @@
vite v8.2.1 building client environment for production...
Public assets synchronized incrementally in 0.056s

transforming...✓ 2448 modules transformed.
rendering chunks...
computing gzip size...
dist/assets/dynamic-worker-bootstrap-CX1JKGrb.js 0.73 kB
dist/part-inspect.html 1.04 kB │ gzip: 0.48 kB
dist/partdesign-save.html 1.04 kB │ gzip: 0.44 kB
dist/sketcher-inspect.html 1.05 kB │ gzip: 0.49 kB
dist/part.html 1.10 kB │ gzip: 0.49 kB
dist/partdesign-inspect.html 1.11 kB │ gzip: 0.50 kB
dist/part-io.html 1.11 kB │ gzip: 0.49 kB
dist/points.html 1.11 kB │ gzip: 0.49 kB
dist/sandbox.html 1.11 kB │ gzip: 0.49 kB
dist/surface.html 1.11 kB │ gzip: 0.49 kB
dist/start.html 1.11 kB │ gzip: 0.49 kB
dist/sketcher.html 1.12 kB │ gzip: 0.49 kB
dist/robot-save.html 1.12 kB │ gzip: 0.50 kB
dist/meshpart.html 1.12 kB │ gzip: 0.50 kB
dist/robot-create.html 1.13 kB │ gzip: 0.49 kB
dist/robot-python.html 1.13 kB │ gzip: 0.50 kB
dist/show-inspect.html 1.13 kB │ gzip: 0.50 kB
dist/spreadsheet.html 1.13 kB │ gzip: 0.49 kB
dist/part-python.html 1.13 kB │ gzip: 0.50 kB
dist/show-python.html 1.13 kB │ gzip: 0.50 kB
dist/sandbox-save.html 1.13 kB │ gzip: 0.50 kB
dist/robot-inspect.html 1.13 kB │ gzip: 0.50 kB
dist/templatepymod.html 1.13 kB │ gzip: 0.50 kB
dist/start-python.html 1.13 kB │ gzip: 0.50 kB
dist/sandbox-python.html 1.13 kB │ gzip: 0.50 kB
dist/surface-save.html 1.14 kB │ gzip: 0.50 kB
dist/points-save.html 1.14 kB │ gzip: 0.51 kB
dist/sketcher-python.html 1.14 kB │ gzip: 0.50 kB
dist/surface-python.html 1.14 kB │ gzip: 0.50 kB
dist/sandbox-inspect.html 1.14 kB │ gzip: 0.50 kB
dist/surface-inspect.html 1.14 kB │ gzip: 0.50 kB
dist/start-inspect.html 1.14 kB │ gzip: 0.51 kB
dist/partdesign-python.html 1.15 kB │ gzip: 0.51 kB
dist/spreadsheet-save.html 1.15 kB │ gzip: 0.50 kB
dist/spreadsheet-python.html 1.15 kB │ gzip: 0.50 kB
dist/sketcher-persistence.html 1.15 kB │ gzip: 0.51 kB
dist/templatepymod-python.html 1.16 kB │ gzip: 0.51 kB
dist/spreadsheet-inspect.html 1.16 kB │ gzip: 0.51 kB
dist/reverseengineering-save.html 1.16 kB │ gzip: 0.51 kB
dist/reverseengineering-create.html 1.17 kB │ gzip: 0.51 kB
dist/reverseengineering-python.html 1.17 kB │ gzip: 0.51 kB
dist/reverseengineering-inspect.html 1.17 kB │ gzip: 0.51 kB
dist/mesh.html 1.20 kB │ gzip: 0.51 kB
dist/part-save.html 1.21 kB │ gzip: 0.51 kB
dist/measure.html 1.22 kB │ gzip: 0.51 kB
dist/material.html 1.23 kB │ gzip: 0.52 kB
dist/jtreader.html 1.23 kB │ gzip: 0.52 kB
dist/fem.html 1.26 kB │ gzip: 0.53 kB
dist/core.html 1.26 kB │ gzip: 0.52 kB
dist/document.html 1.26 kB │ gzip: 0.52 kB
dist/techdraw-inspect.html 1.26 kB │ gzip: 0.53 kB
dist/techdraw.html 1.27 kB │ gzip: 0.52 kB
dist/openscad.html 1.31 kB │ gzip: 0.54 kB
dist/tux.html 1.32 kB │ gzip: 0.53 kB
dist/test.html 1.33 kB │ gzip: 0.53 kB
dist/web.html 1.33 kB │ gzip: 0.53 kB
dist/techdraw-native.html 1.35 kB │ gzip: 0.54 kB
dist/techdraw-save.html 1.35 kB │ gzip: 0.54 kB
dist/techdraw-python.html 1.35 kB │ gzip: 0.54 kB
dist/web-persistence.html 1.36 kB │ gzip: 0.55 kB
dist/points-python.html 1.37 kB │ gzip: 0.57 kB
dist/points-inspect.html 1.38 kB │ gzip: 0.58 kB
dist/help.html 1.39 kB │ gzip: 0.57 kB
dist/python.html 1.44 kB │ gzip: 0.57 kB
dist/bim.html 1.45 kB │ gzip: 0.57 kB
dist/import.html 1.46 kB │ gzip: 0.57 kB
dist/draft.html 1.46 kB │ gzip: 0.58 kB
dist/inspection.html 1.48 kB │ gzip: 0.57 kB
dist/cloud.html 1.49 kB │ gzip: 0.56 kB
dist/plot-python.html 1.59 kB │ gzip: 0.60 kB
dist/cam.html 1.61 kB │ gzip: 0.59 kB
dist/assembly.html 1.64 kB │ gzip: 0.60 kB
dist/partdesign.html 2.27 kB │ gzip: 0.73 kB
dist/project.html 3.59 kB │ gzip: 0.99 kB
dist/index.html 3.74 kB │ gzip: 1.00 kB
dist/assets/robot-inspect.worker-CVODVnCd.js 4.53 kB
dist/assets/web-persistence.worker-2Zxcj3QT.js 4.55 kB
dist/assets/start-python.worker-B5vaxGty.js 4.56 kB
dist/assets/tux.worker-BOg1krec.js 4.58 kB
dist/assets/sketcher-inspect.worker-C9AvvwhY.js 4.59 kB
dist/assets/sketcher-persistence.worker-CfeXMZbg.js 4.62 kB
dist/assets/robot-create.worker-DPChGyOR.js 4.66 kB
dist/assets/templatepymod.worker-hg1ejMJB.js 4.67 kB
dist/assets/surface-inspect.worker-F-GdNdw_.js 4.72 kB
dist/assets/surface-save.worker-CUtK-04F.js 4.74 kB
dist/assets/python-runtime.worker-B-aJYkJT.js 4.76 kB
dist/assets/techdraw-inspect.worker-xPT-ga1B.js 4.77 kB
dist/assets/web-dock-overlay.worker-BCsmLfKX.js 4.79 kB
dist/assets/sandbox-save.worker-DCebp-Q8.js 4.83 kB
dist/assets/robot-save.worker-B9iH5YAv.js 4.89 kB
dist/assets/show-inspect.worker-B2QD7gst.js 4.90 kB
dist/assets/techdraw-save.worker-sojHDFzQ.js 4.91 kB
dist/assets/start-inventory.worker-CFKlvZmC.js 4.96 kB
dist/assets/sandbox-inspect.worker-C5YazrBn.js 5.03 kB
dist/assets/spreadsheet-save.worker-BiNG1wGg.js 5.04 kB
dist/assets/partdesign-inspect.worker-DeojPCWC.js 5.07 kB
dist/assets/reverseengineering-save.worker-CgUN2OLj.js 5.07 kB
dist/assets/partdesign-save.worker-gVh5xTPd.js 5.10 kB
dist/assets/reverseengineering-inspect.worker-CpKjB0Ej.js 5.12 kB
dist/assets/reverseengineering-create.worker-BnYvMNcQ.js 5.14 kB
dist/assets/spreadsheet-inspect.worker-Qa8cffR8.js 5.31 kB
dist/assets/techdraw-native.worker-DzdTH1-p.js 5.43 kB
dist/assets/points-persistence.worker-Q2RjUTfj.js 5.66 kB
dist/full.html 5.66 kB │ gzip: 1.26 kB
dist/assets/techdraw.worker-mfYkJLI7.js 5.74 kB
dist/assets/surface.worker-CxzaO0n3.js 5.75 kB
dist/main-chain.html 5.90 kB │ gzip: 1.32 kB
dist/assets/web.worker-C7hjw4lI.js 6.19 kB
dist/assets/help.worker-_0RHyS-0.js 6.23 kB
dist/assets/sandbox.worker-Q8ky_HwA.js 6.70 kB
dist/assets/spreadsheet.worker-Bbehg6Py.js 6.74 kB
dist/assets/workbench-command.worker-BQ7_z6oJ.js 6.95 kB
dist/assets/start.worker-CIavZLau.js 6.98 kB
dist/assets/plot-python.worker-DtIDsfZF.js 6.98 kB
dist/assets/sketcher.worker-DF02tOmg.js 7.12 kB
dist/assets/reverseengineering-python.worker-DKZTinnr.js 7.36 kB
dist/assets/spreadsheet-python.worker-DMdejRPT.js 7.63 kB
dist/assets/templatepymod-python.worker-PsnxyRD5.js 7.81 kB
dist/assets/robot-python.worker-CtPujTTt.js 8.96 kB
dist/assets/meshpart.worker-DZfzSxZ7.js 9.09 kB
dist/workbench.html 9.98 kB │ gzip: 1.93 kB
dist/assets/surface-python.worker-DSo_Egxm.js 10.79 kB
dist/assets/show-python.worker-DPiddEMC.js 10.89 kB
dist/assets/import.worker-C-AQ4J_x.js 12.43 kB
dist/assets/partdesign-python.worker-ydIZ9rk7.js 12.48 kB
dist/assets/fem.worker-DGQs784X.js 12.82 kB
dist/assets/sandbox-python.worker-DQsLVBHZ.js 12.84 kB
dist/assets/cloud.worker-DNuING5d.js 13.68 kB
dist/assets/inspection.worker-Bk6WfE00.js 13.99 kB
dist/assets/cam.worker-we3i0GjL.js 14.42 kB
dist/assets/sketcher-python.worker-DCmXcCgC.js 14.45 kB
dist/assets/material-python.worker-BcGZQmQt.js 14.67 kB
dist/assets/material.worker-BcGZQmQt.js 14.67 kB
dist/assets/draft.worker-CV1zzRV7.js 15.11 kB
dist/assets/test.worker-CE1QL_n0.js 15.75 kB
dist/assets/measure.worker-xIEFKJEl.js 15.96 kB
dist/assets/openscad.worker-DrNMAW2-.js 19.09 kB
dist/assets/points.worker-9rmxQC5I.js 19.81 kB
dist/assets/mesh.worker-DtnBKzpD.js 20.93 kB
dist/assets/techdraw-python.worker-DpV5IJ2G.js 21.30 kB
dist/assets/bim.worker-B0fOxOsJ.js 22.85 kB
dist/assets/partdesign.worker-kFU8GaIi.js 32.30 kB
dist/assets/assembly.worker-Dw6ddz-J.js 34.39 kB
dist/assets/core.worker-u_jdRzAP.js 35.22 kB
dist/assets/PartDesignExample-BpwNhVch.FCStd 49.34 kB
dist/assets/part-save.worker-C05hXSGZ.js 62.17 kB
dist/assets/part.worker-D61crV2p.js 80.29 kB
dist/assets/EngineBlock-CVb0N6vw.FCStd 92.45 kB
dist/assets/jtreader.worker-C8dK-7Jp.js 95.78 kB
dist/assets/draft_test_objects-Ce4A2NfX.FCStd 113.95 kB
dist/assets/AssemblyExample-Hf3Yo9S1.FCStd 173.57 kB
dist/assets/FEMExample-HgXO02sk.FCStd 528.07 kB
dist/assets/Schenkel-CxpzxKld.stp 590.05 kB
dist/assets/ArchDetail-jj9o7oVJ.FCStd 1,876.08 kB
dist/assets/BIMExample-47hOGPj8.FCStd 2,072.78 kB
dist/assets/workbench-DtksdrdB.css 2.11 kB │ gzip: 0.74 kB
dist/assets/partdesign-workspace-component-B0OVOYiL.css 2.38 kB │ gzip: 0.76 kB
dist/assets/partdesign-c4C7lohl.css 4.62 kB │ gzip: 1.55 kB
dist/assets/play-D-_ZNeFC.js 0.12 kB │ gzip: 0.12 kB
dist/assets/show-python-family-facade-DMqlrdIP.js 0.19 kB │ gzip: 0.14 kB
dist/assets/show-python-facade-ButUz4Qy.js 0.24 kB │ gzip: 0.20 kB
dist/assets/file-input-D8HGScs0.js 0.24 kB │ gzip: 0.16 kB
dist/assets/core-runtime-NDNIHpBU.js 0.24 kB │ gzip: 0.17 kB
dist/assets/file-search-DnMZlG9r.js 0.26 kB │ gzip: 0.18 kB
dist/assets/mesh-persistence-facade-DS9ndFlX.js 0.26 kB │ gzip: 0.21 kB
dist/assets/robot-create-facade-DsFLU8rr.js 0.26 kB │ gzip: 0.21 kB
dist/assets/surface-save-facade-DqYkLu2D.js 0.26 kB │ gzip: 0.21 kB
dist/assets/cloud-persistence-facade-slrLU7xE.js 0.26 kB │ gzip: 0.21 kB
dist/assets/points-persistence-facade-DVLoCS9l.js 0.26 kB │ gzip: 0.21 kB
dist/assets/robot-save-facade-46s9sMyB.js 0.26 kB │ gzip: 0.21 kB
dist/assets/part-python-facade-DuAK0FpU.js 0.27 kB │ gzip: 0.21 kB
dist/assets/start-python-facade-B1CMhCGP.js 0.27 kB │ gzip: 0.21 kB
dist/assets/route-BjiIcSqv.js 0.27 kB │ gzip: 0.17 kB
dist/assets/measure-persistence-facade-Bcss4aJL.js 0.27 kB │ gzip: 0.22 kB
dist/assets/robot-python-facade-q2JVYdPx.js 0.27 kB │ gzip: 0.22 kB
dist/assets/web-facade-Ck29HNBt.js 0.27 kB │ gzip: 0.22 kB
dist/assets/partdesign-save-facade-B34V-F79.js 0.28 kB │ gzip: 0.22 kB
dist/assets/points-python-facade-5Lmbu8kQ.js 0.28 kB │ gzip: 0.22 kB
dist/assets/jtreader-persistence-facade-CuW_tMqV.js 0.28 kB │ gzip: 0.22 kB
dist/assets/sandbox-python-facade-D7HVYX_W.js 0.28 kB │ gzip: 0.22 kB
dist/assets/surface-python-facade-8DAhyuZd.js 0.28 kB │ gzip: 0.22 kB
dist/assets/spreadsheet-save-facade--Pk6YEHd.js 0.28 kB │ gzip: 0.21 kB
dist/assets/material-persistence-facade-MroMCUFU.js 0.28 kB │ gzip: 0.22 kB
dist/assets/part-facade-Dqdz2CMv.js 0.28 kB │ gzip: 0.22 kB
dist/assets/measure-python-facade-DXH12EoV.js 0.29 kB │ gzip: 0.21 kB
dist/assets/sketcher-python-facade-s_09asE0.js 0.29 kB │ gzip: 0.22 kB
dist/assets/openscad-python-facade-CeB9lZUw.js 0.29 kB │ gzip: 0.22 kB
dist/assets/techdraw-python-facade-BtOLupRJ.js 0.29 kB │ gzip: 0.22 kB
dist/assets/tux-facade-D2bVxp8w.js 0.29 kB │ gzip: 0.23 kB
dist/assets/inspection-persistence-facade-nvVV4ARG.js 0.29 kB │ gzip: 0.22 kB
dist/assets/sketcher-persistence-facade-BDuI9FpW.js 0.29 kB │ gzip: 0.23 kB
dist/assets/points-facade-BXGQ-Ppz.js 0.29 kB │ gzip: 0.23 kB
dist/assets/techdraw-save-facade-BvoReCX8.js 0.29 kB │ gzip: 0.23 kB
dist/assets/part-save-facade-QekuosWe.js 0.30 kB │ gzip: 0.23 kB
dist/assets/web-persistence-facade-BoD2jJgN.js 0.30 kB │ gzip: 0.23 kB
dist/assets/part-io-facade-CbFxtVBz.js 0.30 kB │ gzip: 0.23 kB
dist/assets/show-inspect-facade-B7fdNKtX.js 0.30 kB │ gzip: 0.23 kB
dist/assets/partdesign-python-facade-CO-vQEgQ.js 0.31 kB │ gzip: 0.22 kB
dist/assets/points-inspect-facade-BEeDt8S-.js 0.31 kB │ gzip: 0.23 kB
dist/assets/sandbox-facade-D7dzZFLP.js 0.31 kB │ gzip: 0.23 kB
dist/assets/sandbox-save-facade-Ct4d_E5A.js 0.31 kB │ gzip: 0.24 kB
dist/assets/sketcher-facade-NnwQipJc.js 0.31 kB │ gzip: 0.23 kB
dist/assets/techdraw-facade-aagF3oSr.js 0.31 kB │ gzip: 0.25 kB
dist/assets/templatepymod-python-facade-COub4Pml.js 0.31 kB │ gzip: 0.23 kB
dist/assets/robot-inspect-facade-DtM6g5eT.js 0.31 kB │ gzip: 0.23 kB
dist/assets/start-inventory-facade-B8L6WXtA.js 0.31 kB │ gzip: 0.23 kB
dist/assets/reverseengineering-save-facade-jaDJAoek.js 0.32 kB │ gzip: 0.22 kB
dist/assets/partdesign-DkRY68_C.js 0.32 kB │ gzip: 0.25 kB
dist/assets/surface-facade-BkxAqFEl.js 0.32 kB │ gzip: 0.23 kB
dist/assets/spreadsheet-python-facade-DNQ06kqq.js 0.32 kB │ gzip: 0.23 kB
dist/assets/surface-inspect-facade--FM1PBKH.js 0.33 kB │ gzip: 0.23 kB
dist/assets/reverseengineering-create-facade-_gePfDI9.js 0.33 kB │ gzip: 0.23 kB
dist/assets/fem-facade-CTWbg8W4.js 0.33 kB │ gzip: 0.26 kB
dist/assets/sandbox-inspect-facade-ChelQkD0.js 0.33 kB │ gzip: 0.23 kB
dist/assets/draft-facade-DuQJqsW2.js 0.33 kB │ gzip: 0.26 kB
dist/assets/templatepymod-facade-BIEatdOS.js 0.33 kB │ gzip: 0.23 kB
dist/assets/techdraw-native-facade-DFqX--Jm.js 0.34 kB │ gzip: 0.26 kB
dist/assets/openscad-inspect-facade-CD1x9jF-.js 0.35 kB │ gzip: 0.25 kB
dist/assets/reverseengineering-python-facade-D0ETOYnk.js 0.35 kB │ gzip: 0.23 kB
dist/assets/spreadsheet-inspect-facade-Be9KXsQS.js 0.37 kB │ gzip: 0.25 kB
dist/assets/reverseengineering-inspect-facade-D4Ki188U.js 0.40 kB │ gzip: 0.24 kB
dist/assets/start-facade-CUkdj_rn.js 0.43 kB │ gzip: 0.26 kB
dist/assets/inspection-facade-CBfFciGw.js 0.43 kB │ gzip: 0.28 kB
dist/assets/save-DdXNGgDu.js 0.44 kB │ gzip: 0.21 kB
dist/assets/cam-persistence-facade-BubrF1Zi.js 0.47 kB │ gzip: 0.31 kB
dist/assets/spreadsheet-facade-LrDmQfdq.js 0.49 kB │ gzip: 0.31 kB
dist/assets/help-python-facade-DtavuPjQ.js 0.51 kB │ gzip: 0.31 kB
dist/assets/rotate-ccw-DUGzGpVv.js 0.54 kB │ gzip: 0.38 kB
dist/assets/bim-python-facade-b1qXNzBY.js 0.54 kB │ gzip: 0.31 kB
dist/assets/facade-envelope-D0Aixh7X.js 0.61 kB │ gzip: 0.30 kB
dist/assets/test-facade-8wF3KR_U.js 0.62 kB │ gzip: 0.35 kB
dist/assets/boxes-v6_sbvwg.js 0.63 kB │ gzip: 0.26 kB
dist/assets/plot-python-Dnb4yZAX.js 0.65 kB │ gzip: 0.43 kB
dist/assets/jsx-runtime-CriDp1zE.js 0.66 kB │ gzip: 0.43 kB
dist/assets/modulepreload-polyfill-P2Xu9kJm.js 0.67 kB │ gzip: 0.38 kB
dist/assets/jtreader-inspect-facade-MuD5LO2G.js 0.67 kB │ gzip: 0.38 kB
dist/assets/mesh-python-facade-BqFrGnKZ.js 0.77 kB │ gzip: 0.40 kB
dist/assets/assembly-python-facade-lnqmT0xQ.js 0.78 kB │ gzip: 0.38 kB
dist/assets/meshpart-python-facade-C0BClkPM.js 0.83 kB │ gzip: 0.39 kB
dist/assets/cam-python-facade-B7bklSZs.js 0.86 kB │ gzip: 0.46 kB
dist/assets/material-python-facade-D9fGPPR7.js 0.90 kB │ gzip: 0.44 kB
dist/assets/cloud-python-facade-BnucAy4n.js 0.96 kB │ gzip: 0.52 kB
dist/assets/export-service-3DLpdk4G.js 0.99 kB │ gzip: 0.57 kB
dist/assets/import-python-facade-BSX0J_vZ.js 1.16 kB │ gzip: 0.53 kB
dist/assets/preload-helper-Czpn1I53.js 1.19 kB │ gzip: 0.67 kB
dist/assets/assembly-persistence-facade-Dn6bIi3m.js 1.30 kB │ gzip: 0.70 kB
dist/assets/points-python-BMRX_Ssp.js 1.43 kB │ gzip: 0.65 kB
dist/assets/points-inspect-Db6j5N-G.js 1.45 kB │ gzip: 0.66 kB
dist/assets/draft-stretch-controls-l_shOKCY.js 1.48 kB │ gzip: 0.74 kB
dist/assets/recovery-controller-O2kjgylK.js 1.54 kB │ gzip: 0.71 kB
dist/assets/partdesign-save-CbeoS6zN.js 1.77 kB │ gzip: 0.73 kB
dist/assets/openscad-format-facade-CDmXl5v1.js 1.99 kB │ gzip: 0.87 kB
dist/assets/bim-panel-ifc-task-33ENMpVH.js 2.02 kB │ gzip: 0.95 kB
dist/assets/lucide-Bj4YvMR1.js 2.10 kB │ gzip: 1.14 kB
dist/assets/app-services-Cdf3CnXp.js 2.21 kB │ gzip: 1.26 kB
dist/assets/spreadsheet-save-DpOiejKi.js 2.38 kB │ gzip: 1.03 kB
dist/assets/openscad-desktop-adapter-CHdUZLWA.js 2.91 kB │ gzip: 1.24 kB
dist/assets/test-FWLm90kJ.js 3.34 kB │ gzip: 1.47 kB
dist/assets/web-Bm2cXYR8.js 3.35 kB │ gzip: 1.48 kB
dist/assets/bim-panel-structure-task-BGdyN2BA.js 3.38 kB │ gzip: 1.24 kB
dist/assets/tux-D80RpCwQ.js 3.39 kB │ gzip: 1.49 kB
dist/assets/part-save--7-bwKEF.js 3.43 kB │ gzip: 1.52 kB
dist/assets/part-python-CgyPLzBK.js 3.44 kB │ gzip: 1.53 kB
dist/assets/part-io-BtZUXrip.js 3.46 kB │ gzip: 1.54 kB
dist/assets/web-action-03-Dr7GSCtb.js 3.53 kB │ gzip: 1.53 kB
dist/assets/part-BkXJyIbn.js 3.54 kB │ gzip: 1.58 kB
dist/assets/techdraw-save-C_vsQmHN.js 3.54 kB │ gzip: 1.55 kB
dist/assets/robot-python-CYNqMOnV.js 3.54 kB │ gzip: 1.62 kB
dist/assets/techdraw-python-DvetJb7U.js 3.57 kB │ gzip: 1.53 kB
dist/assets/points-DN0w01T1.js 3.58 kB │ gzip: 1.59 kB
dist/assets/ui-accessibility-ZOglN_8v.js 3.60 kB │ gzip: 1.67 kB
dist/assets/techdraw-native-_QNwBGlH.js 3.62 kB │ gzip: 1.56 kB
dist/assets/robot-inspect-CYa2be4E.js 3.67 kB │ gzip: 1.65 kB
dist/assets/sandbox-python-BCGBxJqf.js 3.68 kB │ gzip: 1.62 kB
dist/assets/sketcher-python-BL2_OJ2j.js 3.69 kB │ gzip: 1.62 kB
dist/assets/part-inspect-0SExly6v.js 3.72 kB │ gzip: 1.63 kB
dist/assets/sketcher-D2K5ZZoZ.js 3.72 kB │ gzip: 1.61 kB
dist/assets/templatepymod-D8K3ra-l.js 3.76 kB │ gzip: 1.68 kB
dist/assets/sandbox-C4VUMo8D.js 3.77 kB │ gzip: 1.62 kB
dist/assets/show-python-DacsS6fQ.js 3.77 kB │ gzip: 1.67 kB
dist/assets/templatepymod-python-CWQMDm0W.js 3.78 kB │ gzip: 1.68 kB
dist/assets/spreadsheet-5hm81bzD.js 3.81 kB │ gzip: 1.67 kB
dist/assets/surface-python-BZKBmjcs.js 3.82 kB │ gzip: 1.71 kB
dist/assets/robot-create-CWrpDvJA.js 3.82 kB │ gzip: 1.69 kB
dist/assets/sandbox-save-Bk1WFx3P.js 3.83 kB │ gzip: 1.66 kB
dist/assets/storage-BcICQHZX.js 3.85 kB │ gzip: 1.30 kB
dist/assets/robot-save-_Y-zT22T.js 3.85 kB │ gzip: 1.72 kB
dist/assets/techdraw-inspect-BSrApN_Q.js 3.86 kB │ gzip: 1.63 kB
dist/assets/partdesign-python-Bf3-NqsC.js 3.87 kB │ gzip: 1.66 kB
dist/assets/show-inspect-CwJha_c4.js 3.88 kB │ gzip: 1.73 kB
dist/assets/points-save-CGe_EUOx.js 3.91 kB │ gzip: 1.67 kB
dist/assets/sandbox-inspect-Dja0gG9n.js 3.91 kB │ gzip: 1.69 kB
dist/assets/surface-save-CBdaDQb7.js 3.92 kB │ gzip: 1.72 kB
dist/assets/sketcher-persistence-0PpuZ_0a.js 3.93 kB │ gzip: 1.68 kB
dist/assets/start-WtivU9aJ.js 3.94 kB │ gzip: 1.74 kB
dist/assets/start-python-D3PwrGwY.js 3.95 kB │ gzip: 1.73 kB
dist/assets/spreadsheet-python-Cd-0coHp.js 3.95 kB │ gzip: 1.74 kB
dist/assets/surface-inspect-Bh4WXF9o.js 3.96 kB │ gzip: 1.74 kB
dist/assets/start-inspect-CsarTd3K.js 3.98 kB │ gzip: 1.75 kB
dist/assets/surface-BMuAvYRi.js 3.98 kB │ gzip: 1.73 kB
dist/assets/reverseengineering-python-BrLJGi9x.js 4.00 kB │ gzip: 1.78 kB
dist/assets/reverseengineering-create-HZcw3dYz.js 4.08 kB │ gzip: 1.79 kB
dist/assets/reverseengineering-save-FzGCucym.js 4.09 kB │ gzip: 1.81 kB
dist/assets/spreadsheet-inspect-dFA6Vq6g.js 4.11 kB │ gzip: 1.77 kB
dist/assets/sketcher-inspect-Wm52KgOO.js 4.11 kB │ gzip: 1.77 kB
dist/assets/reverseengineering-inspect-8nav7qXB.js 4.20 kB │ gzip: 1.82 kB
dist/assets/partdesign-inspect-SAd-UGRC.js 4.33 kB │ gzip: 1.81 kB
dist/assets/python-BHYtdqGM.js 4.59 kB │ gzip: 2.08 kB
dist/assets/bim-axis-material-task-D0PFD79p.js 4.80 kB │ gzip: 1.46 kB
dist/assets/part-document-facade-rI9zA1CA.js 4.88 kB │ gzip: 1.90 kB
dist/assets/meshpart-Cq3YMnKd.js 5.32 kB │ gzip: 2.19 kB
dist/assets/jtreader-D4wdvXBd.js 5.43 kB │ gzip: 2.22 kB
dist/assets/material-BtydbLAq.js 5.76 kB │ gzip: 2.33 kB
dist/assets/full-DaFiYDN6.js 5.89 kB │ gzip: 2.60 kB
dist/assets/techdraw-BJsb309W.js 5.95 kB │ gzip: 2.66 kB
dist/assets/fem-BB7u_DYL.js 6.35 kB │ gzip: 2.48 kB
dist/assets/openscad-CFW1QTCA.js 6.35 kB │ gzip: 2.43 kB
dist/assets/test-desktop-output-B7b_AS0y.js 6.38 kB │ gzip: 2.43 kB
dist/assets/session-persistence-Dn8_y31c.js 6.80 kB │ gzip: 2.31 kB
dist/assets/mesh-CeS4WbVB.js 6.86 kB │ gzip: 2.71 kB
dist/assets/help-BDS1O4w7.js 7.00 kB │ gzip: 2.60 kB
dist/assets/draft-OYHAw_73.js 7.02 kB │ gzip: 2.67 kB
dist/assets/react-CYoUnH_4.js 7.16 kB │ gzip: 2.83 kB
dist/assets/measure-CBI0LP-w.js 7.66 kB │ gzip: 2.91 kB
dist/assets/test-desktop-adapter-3EjrcfzZ.js 8.08 kB │ gzip: 2.43 kB
dist/assets/import-CMv4bYIE.js 8.87 kB │ gzip: 3.42 kB
dist/assets/inspection-DiCbiJhh.js 8.92 kB │ gzip: 3.18 kB
dist/assets/bim-xGmbnKPO.js 8.92 kB │ gzip: 2.91 kB
dist/assets/assembly-DlAANWeX.js 9.46 kB │ gzip: 3.09 kB
dist/assets/document-C6cPH-tZ.js 10.00 kB │ gzip: 3.50 kB
dist/assets/core-F-zBHDcX.js 10.00 kB │ gzip: 3.50 kB
dist/assets/cam-CA5KV68x.js 12.62 kB │ gzip: 3.86 kB
dist/assets/main-chain-CRseZQJq.js 12.80 kB │ gzip: 4.47 kB
dist/assets/stateful-family-dispatcher-Cw_QUwP7.js 13.54 kB │ gzip: 3.86 kB
dist/assets/cloud-Csavllry.js 14.41 kB │ gzip: 4.26 kB
dist/assets/python-family-dispatcher-C3iPbGJV.js 17.54 kB │ gzip: 3.49 kB
dist/assets/plot-axes-task-DrizjbDn.js 18.79 kB │ gzip: 6.13 kB
dist/assets/draft-desktop-adapter-BZX2hBxE.js 19.62 kB │ gzip: 4.59 kB
dist/assets/module-router-Cdhzfrw5.js 24.94 kB │ gzip: 6.97 kB
dist/assets/bim-desktop-adapter-5rkAISAK.js 24.94 kB │ gzip: 6.48 kB
dist/assets/sketcher-desktop-adapter-Cx7vYbY-.js 25.64 kB │ gzip: 6.00 kB
dist/assets/module-registry.generated-ZA3zU2Fi.js 29.46 kB │ gzip: 4.94 kB
dist/assets/techdraw-desktop-adapter-BYxSjq3R.js 43.67 kB │ gzip: 7.59 kB
dist/assets/client-Bz7rxqNA.js 132.71 kB │ gzip: 43.06 kB
dist/assets/project-shell-Fj8cttEd.js 181.70 kB │ gzip: 49.48 kB
dist/assets/partdesign-workspace-component-CQMImWVP.js 184.71 kB │ gzip: 47.78 kB
dist/assets/web-view-task-B0ApBVvM.js 208.33 kB │ gzip: 49.02 kB
dist/assets/import-export-preferences-BELvTpiu.js 319.10 kB │ gzip: 66.74 kB
dist/assets/three.module-CmYU8HHc.js 565.41 kB │ gzip: 142.71 kB
dist/assets/workbench-BHcelkbO.js 1,133.51 kB │ gzip: 281.09 kB
✓ built in 1.63s
[plugin builtin:vite-reporter]
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting

View File

@@ -0,0 +1,23 @@
{
"status": "implemented_unvalidated",
"record": "docs/current/desktop-ui-toolbar-preferences-repair-20260923/README.md",
"result": "Repaired source-confirmed omission of root Enabled from toolbar persistence. Versioned OPFS snapshot carries Enabled plus native User FCParam, migrates legacy User-only storage without overwriting the native gate, preserves System presets, rolls back root gate and layout on failure, and suppresses unchanged writes/notifications. Shared workspace now offers restore retry, guarded stale error feedback, and arrangement enter/cancel focus. Configured frontend build exit 0 (1.63s), no validation.",
"implementedAt": "2026-09-23T03:49:15.385779+00:00",
"continuationNotes": "This specific Enabled persistence and recovery repair is delivered. Reuse web/src/toolbar-preferences.ts, web/src/persistent-toolbar-workspace.tsx and docs/current/desktop-ui-toolbar-preferences-repair-20260923/build.log; do not rebuild unchanged inputs or run validation. OPFS snapshot is now Std_DlgParameter-PersistentToolbars.json with schema/root gate/native User FCParam; legacy .FCParam remains readable. System presets stay session-local. Current Part New Sketch owner work belongs to the existing scheduler and must not be duplicated.",
"remainingFunctionalLimitations": [],
"completionCorrection": "Previous record claimed root Enabled was in exported User-only snapshot. Source still exported only User; this turn implements the missing durable gate. Historical record is retained, new record describes actual storage format and limits.",
"manualCheckpoint": {
"at": "2026-09-23T03:49:15.385792+00:00",
"modifiedSources": [
"web/src/toolbar-preferences.ts",
"web/src/persistent-toolbar-workspace.tsx"
],
"buildDirectory": "web",
"buildTarget": "configured Vite frontend",
"buildCommand": "python3 tools/build_web_frontend.py",
"exitCode": 0,
"log": "docs/current/desktop-ui-toolbar-preferences-repair-20260923/build.log",
"unfinishedBuildProcesses": [],
"nextStep": "Reuse completed shared toolbar repair; continue queued UI packages in the existing scheduler. No validation."
}
}

View File

@@ -0,0 +1,36 @@
# 共享工具栏显隐与右键菜单整组接线
状态:本次范围已实现,未验证。主线整体仍未完成。
## 桌面依据和具体缺口
`freecad-source/src/Gui/MainWindow.cpp::createPopupMenu/populateToolBarMenu` 将工具栏 toggleViewAction 放入上下文菜单。`ToolBarManager.cpp` 使用 `User parameter:BaseApp/MainWindow/Toolbars` 下以工具栏名字命名的 Bool 恢复和保存显隐。Web 原有 PersistentToolbarWorkspace 只能排列宿主,没有工具栏组显隐操作和对应原生偏好接线。
## 实现范围
- 新增 `web/src/toolbar-visibility-menu.tsx`,工具栏停靠区/排列控制区的右键和普通 Toolbars 按钮共享菜单。当前工作台工具栏组显示勾选状态、键盘上下/Home/End、Enter/Space 原生按钮激活、Esc/Tab 关闭及焦点恢复;菜单按视口边界定位、支持滚动和外部点击关闭。
- `persistent-toolbar-workspace.tsx` 统一连接当前工作台组、可见性恢复及保存。宿主仅通过 hidden 隐藏,不卸载其命令组件;保留菜单入口,可恢复所有隐藏组。保存期间阻止重复切换;失败显示错误且保留先前可见性。布局编辑草稿期间禁用显隐操作,避免通知刷新丢弃草稿。
- `toolbar-preferences.ts` 使用桌面 `BaseApp/MainWindow/Toolbars` Bool 参数;原生 read/set/export/import 通过现有 requestOwnerParameters,工具栏组显隐无需开发面板。
- 显隐 FCParam 加入上一轮版本化快照,与 Enabled/User 布局共同持久化、广播和失败回滚。兼容旧 User-only FCParam 和尚无 visibilityParameters 的快照;旧快照不覆盖当前显隐。System 布局预设仍不导出。
- 显隐独立于 Tux 布局持久化开关:关闭自动恢复排列不应禁止工具栏显示/隐藏偏好。参数编辑器对显隐路径及祖先的修改复用该入口同步。
覆盖现有宿主:Workbench、3D display controls,以及 Part 的 Solids/Part Tools/Boolean Tools、Spreadsheet tools。其他工作台尚未注册到该共享宿主的工具栏不因本次修改被宣称已交付。标准 View→Toolbars 菜单和工具栏锁定命令不在本次上下文显隐范围内,仍需主线后续按源码接续。
## 复用包
1. 上轮根 Enabled 和 User 快照实现:`docs/current/desktop-ui-toolbar-preferences-repair-20260923/README.md`;源码 `toolbar-preferences.ts`。
2. 既有停靠区、Portal 宿主和布局生命周期:`persistent-toolbar-workspace.tsx`;原布局任务 `operator-gap-tux-workbench-toolbar-placement-persistence`。
3. 原生参数/存储:`view-navigation-preferences.ts::requestOwnerParameters`、`parameter-storage.ts`、`WebParameterEditor.inc`,无新文档所有者。
## 构建、共享写入和接续
- 项目目录执行 `python3 tools/build_web_frontend.py`;日志 `docs/current/desktop-ui-toolbar-visibility-20260923/build.log`,退出码 0,built in 1.61s。没有原生源码修改,没有原生构建。
- 本轮交付时原单一调度器也进入 Part 前端交付;发现既有 helper 没有串行保护。已修改 `tools/build_web_frontend.py`,下一次调用会取得 `web/.freecad-web-frontend-build.lock` 再运行 Vite。锁在 dist 外,子进程继承锁描述符;等待超过 1800 秒退出 124,保存修改后接续,不清理缓存或启动第二调度器。
- 锁修改在本次前端构建后完成;未为工具脚本修改重跑无变化前端,也未运行任何锁测试或验证。已在锁前启动的进程不受追溯保护,不中断其交付。
- 未执行测试、烟测、浏览器、截图、独立类型检查或验收。无本轮未结束构建进程。
- 原调度器第 10784 轮继续 Part 当前文档 New Sketch,未改其 project-shell、Sketcher 或原生目标;本次共享工具栏修改按独立完整范围记录。
处理模块 | 对标项 | 源码落点 | 路由入口 | OCCT 边界 | 状态 | 结论
--- | --- | --- | --- | --- | --- | ---
共享工具栏/Web | 上下文显隐、偏好保存和键盘反馈 | toolbar-visibility-menu.tsx、persistent-toolbar-workspace.tsx、toolbar-preferences.ts | Toolbars/停靠区右键 → 原生参数接口 | 无几何算法变更 | 已补漏(未验证) | 保留
共享交付 | 防止多个交付同时写 web/dist | tools/build_web_frontend.py | 原有前端构建 helper | 无原生重建 | 已补漏(未验证) | 保留

View File

@@ -0,0 +1,362 @@
vite v8.2.1 building client environment for production...
Public assets synchronized incrementally in 0.057s

transforming...✓ 2450 modules transformed.
rendering chunks...
computing gzip size...
dist/assets/dynamic-worker-bootstrap-CX1JKGrb.js 0.73 kB
dist/part-inspect.html 1.04 kB │ gzip: 0.48 kB
dist/partdesign-save.html 1.04 kB │ gzip: 0.44 kB
dist/sketcher-inspect.html 1.05 kB │ gzip: 0.49 kB
dist/part.html 1.10 kB │ gzip: 0.49 kB
dist/partdesign-inspect.html 1.11 kB │ gzip: 0.50 kB
dist/part-io.html 1.11 kB │ gzip: 0.49 kB
dist/points.html 1.11 kB │ gzip: 0.49 kB
dist/sandbox.html 1.11 kB │ gzip: 0.49 kB
dist/surface.html 1.11 kB │ gzip: 0.49 kB
dist/start.html 1.11 kB │ gzip: 0.49 kB
dist/sketcher.html 1.12 kB │ gzip: 0.49 kB
dist/robot-save.html 1.12 kB │ gzip: 0.50 kB
dist/meshpart.html 1.12 kB │ gzip: 0.50 kB
dist/robot-create.html 1.13 kB │ gzip: 0.49 kB
dist/robot-python.html 1.13 kB │ gzip: 0.50 kB
dist/show-inspect.html 1.13 kB │ gzip: 0.50 kB
dist/spreadsheet.html 1.13 kB │ gzip: 0.49 kB
dist/part-python.html 1.13 kB │ gzip: 0.50 kB
dist/show-python.html 1.13 kB │ gzip: 0.50 kB
dist/sandbox-save.html 1.13 kB │ gzip: 0.50 kB
dist/robot-inspect.html 1.13 kB │ gzip: 0.50 kB
dist/templatepymod.html 1.13 kB │ gzip: 0.50 kB
dist/start-python.html 1.13 kB │ gzip: 0.50 kB
dist/sandbox-python.html 1.13 kB │ gzip: 0.50 kB
dist/surface-save.html 1.14 kB │ gzip: 0.50 kB
dist/points-save.html 1.14 kB │ gzip: 0.51 kB
dist/sketcher-python.html 1.14 kB │ gzip: 0.50 kB
dist/surface-python.html 1.14 kB │ gzip: 0.50 kB
dist/sandbox-inspect.html 1.14 kB │ gzip: 0.50 kB
dist/surface-inspect.html 1.14 kB │ gzip: 0.50 kB
dist/start-inspect.html 1.14 kB │ gzip: 0.51 kB
dist/partdesign-python.html 1.15 kB │ gzip: 0.51 kB
dist/spreadsheet-save.html 1.15 kB │ gzip: 0.50 kB
dist/spreadsheet-python.html 1.15 kB │ gzip: 0.50 kB
dist/sketcher-persistence.html 1.15 kB │ gzip: 0.51 kB
dist/templatepymod-python.html 1.16 kB │ gzip: 0.51 kB
dist/spreadsheet-inspect.html 1.16 kB │ gzip: 0.51 kB
dist/reverseengineering-save.html 1.16 kB │ gzip: 0.51 kB
dist/reverseengineering-create.html 1.17 kB │ gzip: 0.51 kB
dist/reverseengineering-python.html 1.17 kB │ gzip: 0.51 kB
dist/reverseengineering-inspect.html 1.17 kB │ gzip: 0.51 kB
dist/mesh.html 1.20 kB │ gzip: 0.51 kB
dist/part-save.html 1.21 kB │ gzip: 0.52 kB
dist/measure.html 1.22 kB │ gzip: 0.51 kB
dist/material.html 1.23 kB │ gzip: 0.52 kB
dist/jtreader.html 1.23 kB │ gzip: 0.52 kB
dist/fem.html 1.26 kB │ gzip: 0.53 kB
dist/core.html 1.26 kB │ gzip: 0.52 kB
dist/document.html 1.26 kB │ gzip: 0.52 kB
dist/techdraw-inspect.html 1.26 kB │ gzip: 0.53 kB
dist/techdraw.html 1.27 kB │ gzip: 0.52 kB
dist/openscad.html 1.31 kB │ gzip: 0.54 kB
dist/tux.html 1.32 kB │ gzip: 0.53 kB
dist/test.html 1.33 kB │ gzip: 0.53 kB
dist/web.html 1.33 kB │ gzip: 0.53 kB
dist/techdraw-native.html 1.35 kB │ gzip: 0.54 kB
dist/techdraw-save.html 1.35 kB │ gzip: 0.54 kB
dist/techdraw-python.html 1.35 kB │ gzip: 0.54 kB
dist/web-persistence.html 1.36 kB │ gzip: 0.55 kB
dist/points-python.html 1.37 kB │ gzip: 0.57 kB
dist/points-inspect.html 1.38 kB │ gzip: 0.58 kB
dist/help.html 1.39 kB │ gzip: 0.57 kB
dist/python.html 1.44 kB │ gzip: 0.57 kB
dist/bim.html 1.45 kB │ gzip: 0.57 kB
dist/import.html 1.46 kB │ gzip: 0.57 kB
dist/draft.html 1.46 kB │ gzip: 0.58 kB
dist/inspection.html 1.48 kB │ gzip: 0.57 kB
dist/cloud.html 1.49 kB │ gzip: 0.56 kB
dist/plot-python.html 1.59 kB │ gzip: 0.60 kB
dist/cam.html 1.61 kB │ gzip: 0.59 kB
dist/assembly.html 1.64 kB │ gzip: 0.60 kB
dist/partdesign.html 2.27 kB │ gzip: 0.73 kB
dist/project.html 3.59 kB │ gzip: 0.98 kB
dist/index.html 3.74 kB │ gzip: 1.00 kB
dist/assets/robot-inspect.worker-CVODVnCd.js 4.53 kB
dist/assets/web-persistence.worker-2Zxcj3QT.js 4.55 kB
dist/assets/start-python.worker-B5vaxGty.js 4.56 kB
dist/assets/tux.worker-BOg1krec.js 4.58 kB
dist/assets/sketcher-inspect.worker-C9AvvwhY.js 4.59 kB
dist/assets/sketcher-persistence.worker-CfeXMZbg.js 4.62 kB
dist/assets/robot-create.worker-DPChGyOR.js 4.66 kB
dist/assets/templatepymod.worker-hg1ejMJB.js 4.67 kB
dist/assets/surface-inspect.worker-F-GdNdw_.js 4.72 kB
dist/assets/surface-save.worker-CUtK-04F.js 4.74 kB
dist/assets/python-runtime.worker-B-aJYkJT.js 4.76 kB
dist/assets/techdraw-inspect.worker-xPT-ga1B.js 4.77 kB
dist/assets/web-dock-overlay.worker-BCsmLfKX.js 4.79 kB
dist/assets/sandbox-save.worker-DCebp-Q8.js 4.83 kB
dist/assets/robot-save.worker-B9iH5YAv.js 4.89 kB
dist/assets/show-inspect.worker-B2QD7gst.js 4.90 kB
dist/assets/techdraw-save.worker-sojHDFzQ.js 4.91 kB
dist/assets/start-inventory.worker-CFKlvZmC.js 4.96 kB
dist/assets/sandbox-inspect.worker-C5YazrBn.js 5.03 kB
dist/assets/spreadsheet-save.worker-BiNG1wGg.js 5.04 kB
dist/assets/partdesign-inspect.worker-DeojPCWC.js 5.07 kB
dist/assets/reverseengineering-save.worker-CgUN2OLj.js 5.07 kB
dist/assets/partdesign-save.worker-gVh5xTPd.js 5.10 kB
dist/assets/reverseengineering-inspect.worker-CpKjB0Ej.js 5.12 kB
dist/assets/reverseengineering-create.worker-BnYvMNcQ.js 5.14 kB
dist/assets/spreadsheet-inspect.worker-Qa8cffR8.js 5.31 kB
dist/assets/techdraw-native.worker-DzdTH1-p.js 5.43 kB
dist/assets/points-persistence.worker-Q2RjUTfj.js 5.66 kB
dist/full.html 5.66 kB │ gzip: 1.26 kB
dist/assets/techdraw.worker-mfYkJLI7.js 5.74 kB
dist/assets/surface.worker-CxzaO0n3.js 5.75 kB
dist/main-chain.html 5.90 kB │ gzip: 1.32 kB
dist/assets/web.worker-C7hjw4lI.js 6.19 kB
dist/assets/help.worker-_0RHyS-0.js 6.23 kB
dist/assets/sandbox.worker-Q8ky_HwA.js 6.70 kB
dist/assets/spreadsheet.worker-Bbehg6Py.js 6.74 kB
dist/assets/workbench-command.worker-BQ7_z6oJ.js 6.95 kB
dist/assets/start.worker-CIavZLau.js 6.98 kB
dist/assets/plot-python.worker-DtIDsfZF.js 6.98 kB
dist/assets/sketcher.worker-DF02tOmg.js 7.12 kB
dist/assets/reverseengineering-python.worker-DKZTinnr.js 7.36 kB
dist/assets/spreadsheet-python.worker-DMdejRPT.js 7.63 kB
dist/assets/templatepymod-python.worker-PsnxyRD5.js 7.81 kB
dist/assets/robot-python.worker-CtPujTTt.js 8.96 kB
dist/assets/meshpart.worker-DZfzSxZ7.js 9.09 kB
dist/workbench.html 9.98 kB │ gzip: 1.93 kB
dist/assets/surface-python.worker-DSo_Egxm.js 10.79 kB
dist/assets/show-python.worker-DPiddEMC.js 10.89 kB
dist/assets/import.worker-C-AQ4J_x.js 12.43 kB
dist/assets/partdesign-python.worker-ydIZ9rk7.js 12.48 kB
dist/assets/fem.worker-DGQs784X.js 12.82 kB
dist/assets/sandbox-python.worker-DQsLVBHZ.js 12.84 kB
dist/assets/cloud.worker-DNuING5d.js 13.68 kB
dist/assets/inspection.worker-Bk6WfE00.js 13.99 kB
dist/assets/cam.worker-we3i0GjL.js 14.42 kB
dist/assets/sketcher-python.worker-DCmXcCgC.js 14.45 kB
dist/assets/material-python.worker-BcGZQmQt.js 14.67 kB
dist/assets/material.worker-BcGZQmQt.js 14.67 kB
dist/assets/draft.worker-CV1zzRV7.js 15.11 kB
dist/assets/test.worker-CE1QL_n0.js 15.75 kB
dist/assets/measure.worker-xIEFKJEl.js 15.96 kB
dist/assets/openscad.worker-DrNMAW2-.js 19.09 kB
dist/assets/points.worker-9rmxQC5I.js 19.81 kB
dist/assets/mesh.worker-DtnBKzpD.js 20.93 kB
dist/assets/techdraw-python.worker-DpV5IJ2G.js 21.30 kB
dist/assets/bim.worker-B0fOxOsJ.js 22.85 kB
dist/assets/partdesign.worker-kFU8GaIi.js 32.30 kB
dist/assets/assembly.worker-Dw6ddz-J.js 34.39 kB
dist/assets/core.worker-u_jdRzAP.js 35.22 kB
dist/assets/PartDesignExample-BpwNhVch.FCStd 49.34 kB
dist/assets/part-save.worker-CXZ1hJkW.js 62.20 kB
dist/assets/part.worker-DfEBz_3G.js 80.32 kB
dist/assets/EngineBlock-CVb0N6vw.FCStd 92.45 kB
dist/assets/jtreader.worker-C8dK-7Jp.js 95.78 kB
dist/assets/draft_test_objects-Ce4A2NfX.FCStd 113.95 kB
dist/assets/AssemblyExample-Hf3Yo9S1.FCStd 173.57 kB
dist/assets/FEMExample-HgXO02sk.FCStd 528.07 kB
dist/assets/Schenkel-CxpzxKld.stp 590.05 kB
dist/assets/ArchDetail-jj9o7oVJ.FCStd 1,876.08 kB
dist/assets/BIMExample-47hOGPj8.FCStd 2,072.78 kB
dist/assets/workbench-DtksdrdB.css 2.11 kB │ gzip: 0.74 kB
dist/assets/partdesign-workspace-component-B0OVOYiL.css 2.38 kB │ gzip: 0.76 kB
dist/assets/partdesign-c4C7lohl.css 4.62 kB │ gzip: 1.55 kB
dist/assets/play-D-_ZNeFC.js 0.12 kB │ gzip: 0.12 kB
dist/assets/show-python-family-facade-DMqlrdIP.js 0.19 kB │ gzip: 0.14 kB
dist/assets/show-python-facade-ButUz4Qy.js 0.24 kB │ gzip: 0.20 kB
dist/assets/file-input-D8HGScs0.js 0.24 kB │ gzip: 0.16 kB
dist/assets/core-runtime-NDNIHpBU.js 0.24 kB │ gzip: 0.17 kB
dist/assets/file-search-DnMZlG9r.js 0.26 kB │ gzip: 0.18 kB
dist/assets/mesh-persistence-facade-DS9ndFlX.js 0.26 kB │ gzip: 0.21 kB
dist/assets/robot-create-facade-DsFLU8rr.js 0.26 kB │ gzip: 0.21 kB
dist/assets/surface-save-facade-DqYkLu2D.js 0.26 kB │ gzip: 0.21 kB
dist/assets/cloud-persistence-facade-slrLU7xE.js 0.26 kB │ gzip: 0.21 kB
dist/assets/points-persistence-facade-DVLoCS9l.js 0.26 kB │ gzip: 0.21 kB
dist/assets/robot-save-facade-46s9sMyB.js 0.26 kB │ gzip: 0.21 kB
dist/assets/part-python-facade-DuAK0FpU.js 0.27 kB │ gzip: 0.21 kB
dist/assets/start-python-facade-B1CMhCGP.js 0.27 kB │ gzip: 0.21 kB
dist/assets/route-BjiIcSqv.js 0.27 kB │ gzip: 0.17 kB
dist/assets/measure-persistence-facade-Bcss4aJL.js 0.27 kB │ gzip: 0.22 kB
dist/assets/robot-python-facade-q2JVYdPx.js 0.27 kB │ gzip: 0.22 kB
dist/assets/web-facade-Ck29HNBt.js 0.27 kB │ gzip: 0.22 kB
dist/assets/partdesign-save-facade-B34V-F79.js 0.28 kB │ gzip: 0.22 kB
dist/assets/points-python-facade-5Lmbu8kQ.js 0.28 kB │ gzip: 0.22 kB
dist/assets/jtreader-persistence-facade-CuW_tMqV.js 0.28 kB │ gzip: 0.22 kB
dist/assets/sandbox-python-facade-D7HVYX_W.js 0.28 kB │ gzip: 0.22 kB
dist/assets/surface-python-facade-8DAhyuZd.js 0.28 kB │ gzip: 0.22 kB
dist/assets/spreadsheet-save-facade--Pk6YEHd.js 0.28 kB │ gzip: 0.21 kB
dist/assets/material-persistence-facade-MroMCUFU.js 0.28 kB │ gzip: 0.22 kB
dist/assets/part-facade-Dqdz2CMv.js 0.28 kB │ gzip: 0.22 kB
dist/assets/measure-python-facade-DXH12EoV.js 0.29 kB │ gzip: 0.21 kB
dist/assets/sketcher-python-facade-s_09asE0.js 0.29 kB │ gzip: 0.22 kB
dist/assets/openscad-python-facade-CeB9lZUw.js 0.29 kB │ gzip: 0.22 kB
dist/assets/techdraw-python-facade-BtOLupRJ.js 0.29 kB │ gzip: 0.22 kB
dist/assets/tux-facade-D2bVxp8w.js 0.29 kB │ gzip: 0.23 kB
dist/assets/inspection-persistence-facade-nvVV4ARG.js 0.29 kB │ gzip: 0.22 kB
dist/assets/sketcher-persistence-facade-BDuI9FpW.js 0.29 kB │ gzip: 0.23 kB
dist/assets/points-facade-BXGQ-Ppz.js 0.29 kB │ gzip: 0.23 kB
dist/assets/techdraw-save-facade-BvoReCX8.js 0.29 kB │ gzip: 0.23 kB
dist/assets/part-save-facade-D_VXaZj8.js 0.30 kB │ gzip: 0.23 kB
dist/assets/web-persistence-facade-BoD2jJgN.js 0.30 kB │ gzip: 0.23 kB
dist/assets/part-io-facade-CbFxtVBz.js 0.30 kB │ gzip: 0.23 kB
dist/assets/show-inspect-facade-B7fdNKtX.js 0.30 kB │ gzip: 0.23 kB
dist/assets/partdesign-python-facade-CO-vQEgQ.js 0.31 kB │ gzip: 0.22 kB
dist/assets/points-inspect-facade-BEeDt8S-.js 0.31 kB │ gzip: 0.23 kB
dist/assets/sandbox-facade-D7dzZFLP.js 0.31 kB │ gzip: 0.23 kB
dist/assets/sandbox-save-facade-Ct4d_E5A.js 0.31 kB │ gzip: 0.24 kB
dist/assets/sketcher-facade-NnwQipJc.js 0.31 kB │ gzip: 0.23 kB
dist/assets/techdraw-facade-aagF3oSr.js 0.31 kB │ gzip: 0.25 kB
dist/assets/templatepymod-python-facade-COub4Pml.js 0.31 kB │ gzip: 0.23 kB
dist/assets/robot-inspect-facade-DtM6g5eT.js 0.31 kB │ gzip: 0.23 kB
dist/assets/start-inventory-facade-B8L6WXtA.js 0.31 kB │ gzip: 0.23 kB
dist/assets/reverseengineering-save-facade-jaDJAoek.js 0.32 kB │ gzip: 0.22 kB
dist/assets/partdesign-CmEboxME.js 0.32 kB │ gzip: 0.25 kB
dist/assets/surface-facade-BkxAqFEl.js 0.32 kB │ gzip: 0.23 kB
dist/assets/spreadsheet-python-facade-DNQ06kqq.js 0.32 kB │ gzip: 0.23 kB
dist/assets/surface-inspect-facade--FM1PBKH.js 0.33 kB │ gzip: 0.23 kB
dist/assets/reverseengineering-create-facade-_gePfDI9.js 0.33 kB │ gzip: 0.23 kB
dist/assets/fem-facade-CTWbg8W4.js 0.33 kB │ gzip: 0.26 kB
dist/assets/sandbox-inspect-facade-ChelQkD0.js 0.33 kB │ gzip: 0.23 kB
dist/assets/draft-facade-DuQJqsW2.js 0.33 kB │ gzip: 0.26 kB
dist/assets/templatepymod-facade-BIEatdOS.js 0.33 kB │ gzip: 0.23 kB
dist/assets/techdraw-native-facade-DFqX--Jm.js 0.34 kB │ gzip: 0.26 kB
dist/assets/openscad-inspect-facade-CD1x9jF-.js 0.35 kB │ gzip: 0.25 kB
dist/assets/reverseengineering-python-facade-D0ETOYnk.js 0.35 kB │ gzip: 0.23 kB
dist/assets/spreadsheet-inspect-facade-Be9KXsQS.js 0.37 kB │ gzip: 0.25 kB
dist/assets/reverseengineering-inspect-facade-D4Ki188U.js 0.40 kB │ gzip: 0.24 kB
dist/assets/start-facade-CUkdj_rn.js 0.43 kB │ gzip: 0.26 kB
dist/assets/inspection-facade-CBfFciGw.js 0.43 kB │ gzip: 0.28 kB
dist/assets/save-DdXNGgDu.js 0.44 kB │ gzip: 0.21 kB
dist/assets/cam-persistence-facade-BubrF1Zi.js 0.47 kB │ gzip: 0.31 kB
dist/assets/spreadsheet-facade-LrDmQfdq.js 0.49 kB │ gzip: 0.31 kB
dist/assets/help-python-facade-DtavuPjQ.js 0.51 kB │ gzip: 0.31 kB
dist/assets/rotate-ccw-DUGzGpVv.js 0.54 kB │ gzip: 0.38 kB
dist/assets/bim-python-facade-b1qXNzBY.js 0.54 kB │ gzip: 0.31 kB
dist/assets/facade-envelope-D0Aixh7X.js 0.61 kB │ gzip: 0.30 kB
dist/assets/test-facade-8wF3KR_U.js 0.62 kB │ gzip: 0.35 kB
dist/assets/boxes-v6_sbvwg.js 0.63 kB │ gzip: 0.26 kB
dist/assets/plot-python-Dnb4yZAX.js 0.65 kB │ gzip: 0.43 kB
dist/assets/jsx-runtime-CriDp1zE.js 0.66 kB │ gzip: 0.43 kB
dist/assets/modulepreload-polyfill-P2Xu9kJm.js 0.67 kB │ gzip: 0.38 kB
dist/assets/jtreader-inspect-facade-MuD5LO2G.js 0.67 kB │ gzip: 0.38 kB
dist/assets/mesh-python-facade-BqFrGnKZ.js 0.77 kB │ gzip: 0.40 kB
dist/assets/assembly-python-facade-lnqmT0xQ.js 0.78 kB │ gzip: 0.38 kB
dist/assets/meshpart-python-facade-C0BClkPM.js 0.83 kB │ gzip: 0.39 kB
dist/assets/cam-python-facade-B7bklSZs.js 0.86 kB │ gzip: 0.46 kB
dist/assets/material-python-facade-D9fGPPR7.js 0.90 kB │ gzip: 0.44 kB
dist/assets/cloud-python-facade-BnucAy4n.js 0.96 kB │ gzip: 0.52 kB
dist/assets/export-service-3DLpdk4G.js 0.99 kB │ gzip: 0.57 kB
dist/assets/import-python-facade-BSX0J_vZ.js 1.16 kB │ gzip: 0.53 kB
dist/assets/preload-helper-Czpn1I53.js 1.19 kB │ gzip: 0.67 kB
dist/assets/assembly-persistence-facade-Dn6bIi3m.js 1.30 kB │ gzip: 0.70 kB
dist/assets/points-python-BMRX_Ssp.js 1.43 kB │ gzip: 0.65 kB
dist/assets/points-inspect-Db6j5N-G.js 1.45 kB │ gzip: 0.66 kB
dist/assets/draft-stretch-controls-l_shOKCY.js 1.48 kB │ gzip: 0.74 kB
dist/assets/recovery-controller-O2kjgylK.js 1.54 kB │ gzip: 0.71 kB
dist/assets/partdesign-save-CbeoS6zN.js 1.77 kB │ gzip: 0.73 kB
dist/assets/openscad-format-facade-CDmXl5v1.js 1.99 kB │ gzip: 0.87 kB
dist/assets/bim-panel-ifc-task-33ENMpVH.js 2.02 kB │ gzip: 0.95 kB
dist/assets/lucide-Bj4YvMR1.js 2.10 kB │ gzip: 1.14 kB
dist/assets/app-services-Cdf3CnXp.js 2.21 kB │ gzip: 1.26 kB
dist/assets/spreadsheet-save-DpOiejKi.js 2.38 kB │ gzip: 1.03 kB
dist/assets/openscad-desktop-adapter-CHdUZLWA.js 2.91 kB │ gzip: 1.24 kB
dist/assets/test-FWLm90kJ.js 3.34 kB │ gzip: 1.47 kB
dist/assets/web-Bm2cXYR8.js 3.35 kB │ gzip: 1.48 kB
dist/assets/bim-panel-structure-task-BGdyN2BA.js 3.38 kB │ gzip: 1.24 kB
dist/assets/tux-D80RpCwQ.js 3.39 kB │ gzip: 1.49 kB
dist/assets/part-save-BORCDu7H.js 3.43 kB │ gzip: 1.52 kB
dist/assets/part-python-_KRaawsm.js 3.44 kB │ gzip: 1.53 kB
dist/assets/part-io-CSDGV46a.js 3.46 kB │ gzip: 1.54 kB
dist/assets/web-action-03-Dr7GSCtb.js 3.53 kB │ gzip: 1.53 kB
dist/assets/part-D5vqhDw2.js 3.54 kB │ gzip: 1.58 kB
dist/assets/techdraw-save-C_vsQmHN.js 3.54 kB │ gzip: 1.55 kB
dist/assets/robot-python-CYNqMOnV.js 3.54 kB │ gzip: 1.62 kB
dist/assets/techdraw-python-DvetJb7U.js 3.57 kB │ gzip: 1.53 kB
dist/assets/points-DN0w01T1.js 3.58 kB │ gzip: 1.59 kB
dist/assets/ui-accessibility-CmcunZz9.js 3.60 kB │ gzip: 1.67 kB
dist/assets/techdraw-native-_QNwBGlH.js 3.62 kB │ gzip: 1.56 kB
dist/assets/robot-inspect-CYa2be4E.js 3.67 kB │ gzip: 1.65 kB
dist/assets/sandbox-python-BCGBxJqf.js 3.68 kB │ gzip: 1.62 kB
dist/assets/sketcher-python-BL2_OJ2j.js 3.69 kB │ gzip: 1.62 kB
dist/assets/part-inspect-7StgHyvD.js 3.72 kB │ gzip: 1.63 kB
dist/assets/sketcher-D2K5ZZoZ.js 3.72 kB │ gzip: 1.61 kB
dist/assets/templatepymod-D8K3ra-l.js 3.76 kB │ gzip: 1.68 kB
dist/assets/sandbox-C4VUMo8D.js 3.77 kB │ gzip: 1.62 kB
dist/assets/show-python-DacsS6fQ.js 3.77 kB │ gzip: 1.67 kB
dist/assets/templatepymod-python-CWQMDm0W.js 3.78 kB │ gzip: 1.68 kB
dist/assets/spreadsheet-5hm81bzD.js 3.81 kB │ gzip: 1.67 kB
dist/assets/surface-python-BZKBmjcs.js 3.82 kB │ gzip: 1.71 kB
dist/assets/robot-create-CWrpDvJA.js 3.82 kB │ gzip: 1.69 kB
dist/assets/sandbox-save-Bk1WFx3P.js 3.83 kB │ gzip: 1.66 kB
dist/assets/storage-BcICQHZX.js 3.85 kB │ gzip: 1.30 kB
dist/assets/robot-save-_Y-zT22T.js 3.85 kB │ gzip: 1.72 kB
dist/assets/techdraw-inspect-BSrApN_Q.js 3.86 kB │ gzip: 1.63 kB
dist/assets/partdesign-python-Bf3-NqsC.js 3.87 kB │ gzip: 1.66 kB
dist/assets/show-inspect-CwJha_c4.js 3.88 kB │ gzip: 1.73 kB
dist/assets/points-save-CGe_EUOx.js 3.91 kB │ gzip: 1.67 kB
dist/assets/sandbox-inspect-Dja0gG9n.js 3.91 kB │ gzip: 1.69 kB
dist/assets/surface-save-CBdaDQb7.js 3.92 kB │ gzip: 1.72 kB
dist/assets/sketcher-persistence-0PpuZ_0a.js 3.93 kB │ gzip: 1.68 kB
dist/assets/start-WtivU9aJ.js 3.94 kB │ gzip: 1.74 kB
dist/assets/start-python-D3PwrGwY.js 3.95 kB │ gzip: 1.73 kB
dist/assets/spreadsheet-python-Cd-0coHp.js 3.95 kB │ gzip: 1.74 kB
dist/assets/surface-inspect-Bh4WXF9o.js 3.96 kB │ gzip: 1.74 kB
dist/assets/start-inspect-CsarTd3K.js 3.98 kB │ gzip: 1.75 kB
dist/assets/surface-BMuAvYRi.js 3.98 kB │ gzip: 1.73 kB
dist/assets/reverseengineering-python-BrLJGi9x.js 4.00 kB │ gzip: 1.78 kB
dist/assets/reverseengineering-create-HZcw3dYz.js 4.08 kB │ gzip: 1.79 kB
dist/assets/reverseengineering-save-FzGCucym.js 4.09 kB │ gzip: 1.81 kB
dist/assets/spreadsheet-inspect-dFA6Vq6g.js 4.11 kB │ gzip: 1.77 kB
dist/assets/sketcher-inspect-Wm52KgOO.js 4.11 kB │ gzip: 1.77 kB
dist/assets/reverseengineering-inspect-8nav7qXB.js 4.20 kB │ gzip: 1.82 kB
dist/assets/partdesign-inspect-SAd-UGRC.js 4.33 kB │ gzip: 1.81 kB
dist/assets/python-CaN_1Pu9.js 4.59 kB │ gzip: 2.08 kB
dist/assets/bim-axis-material-task-D0PFD79p.js 4.80 kB │ gzip: 1.46 kB
dist/assets/part-document-facade-CBPMQ3uN.js 4.91 kB │ gzip: 1.91 kB
dist/assets/meshpart-Cq3YMnKd.js 5.32 kB │ gzip: 2.19 kB
dist/assets/jtreader-D4wdvXBd.js 5.43 kB │ gzip: 2.22 kB
dist/assets/material-BtydbLAq.js 5.76 kB │ gzip: 2.33 kB
dist/assets/full-DWaFaW7Z.js 5.89 kB │ gzip: 2.60 kB
dist/assets/techdraw-BJsb309W.js 5.95 kB │ gzip: 2.66 kB
dist/assets/fem-BB7u_DYL.js 6.35 kB │ gzip: 2.48 kB
dist/assets/openscad-CFW1QTCA.js 6.35 kB │ gzip: 2.43 kB
dist/assets/test-desktop-output-B7b_AS0y.js 6.38 kB │ gzip: 2.43 kB
dist/assets/session-persistence-Dn8_y31c.js 6.80 kB │ gzip: 2.31 kB
dist/assets/mesh-CeS4WbVB.js 6.86 kB │ gzip: 2.71 kB
dist/assets/help-BDS1O4w7.js 7.00 kB │ gzip: 2.60 kB
dist/assets/draft-OYHAw_73.js 7.02 kB │ gzip: 2.67 kB
dist/assets/react-CYoUnH_4.js 7.16 kB │ gzip: 2.83 kB
dist/assets/measure-CBI0LP-w.js 7.66 kB │ gzip: 2.91 kB
dist/assets/test-desktop-adapter-3EjrcfzZ.js 8.08 kB │ gzip: 2.43 kB
dist/assets/import-CMv4bYIE.js 8.87 kB │ gzip: 3.42 kB
dist/assets/inspection-DiCbiJhh.js 8.92 kB │ gzip: 3.18 kB
dist/assets/bim-xGmbnKPO.js 8.92 kB │ gzip: 2.91 kB
dist/assets/assembly-DlAANWeX.js 9.46 kB │ gzip: 3.09 kB
dist/assets/document-C6cPH-tZ.js 10.00 kB │ gzip: 3.50 kB
dist/assets/core-F-zBHDcX.js 10.00 kB │ gzip: 3.50 kB
dist/assets/cam-CA5KV68x.js 12.62 kB │ gzip: 3.86 kB
dist/assets/main-chain-2R6AVk_4.js 12.80 kB │ gzip: 4.47 kB
dist/assets/stateful-family-dispatcher-DlrGRfkh.js 13.54 kB │ gzip: 3.86 kB
dist/assets/cloud-Csavllry.js 14.41 kB │ gzip: 4.26 kB
dist/assets/python-family-dispatcher-C3iPbGJV.js 17.54 kB │ gzip: 3.49 kB
dist/assets/plot-axes-task-DrizjbDn.js 18.79 kB │ gzip: 6.13 kB
dist/assets/draft-desktop-adapter-BZX2hBxE.js 19.62 kB │ gzip: 4.59 kB
dist/assets/module-router-DylSyHDq.js 24.94 kB │ gzip: 6.97 kB
dist/assets/bim-desktop-adapter-5rkAISAK.js 24.94 kB │ gzip: 6.48 kB
dist/assets/sketcher-desktop-adapter-CVUOtLw7.js 25.94 kB │ gzip: 6.01 kB
dist/assets/module-registry.generated-DIDdoq0I.js 29.46 kB │ gzip: 4.95 kB
dist/assets/techdraw-desktop-adapter-BYxSjq3R.js 43.67 kB │ gzip: 7.59 kB
dist/assets/client-Bz7rxqNA.js 132.71 kB │ gzip: 43.06 kB
dist/assets/partdesign-workspace-component-u2b9EwZd.js 184.71 kB │ gzip: 47.79 kB
dist/assets/project-shell-C5kGSplH.js 190.79 kB │ gzip: 51.72 kB
dist/assets/web-view-task-CdQzOrOj.js 209.24 kB │ gzip: 49.17 kB
dist/assets/import-export-preferences-BmhoeWSA.js 357.79 kB │ gzip: 76.21 kB
dist/assets/three.module-CmYU8HHc.js 565.41 kB │ gzip: 142.71 kB
dist/assets/workbench-QM-AFhDB.js 1,094.70 kB │ gzip: 272.71 kB
[plugin builtin:vite-reporter]
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.

View File

@@ -0,0 +1,3 @@
{
"continuationNotes": "Resume ONLY actual residuals from docs/current/desktop-ui-part-entry-repair-20260923/sketch-delivery.md (cycle 10784). Mesh conversion, sampling, attachment and Part DocumentProbe box selection are already mounted; PartNewSketchTask and same-document sketcherCommand now exist, with real empty Sketcher::SketchObject plane/support creation and retained editing. Reuse completed FreeCADWebDocumentProbe/FreeCADWebSketcherProbe links in sketch-native-build.log and frontend exit 0 in sketch-frontend-build.log; no unchanged rebuild. Next: project-shell.tsx designDocuments/nativeOwnerRequest mapping lacks sketcherCommand; trace PartDesign and actual remote owner consumers rather than assuming Part DocumentProbe is universal. Continue part-new-sketch-task.tsx near line 100 for remaining edit/close controls. Remaining shared Part UI: native shortcut metadata, Appearance per Face in View menu, correct cross-owner box selection. Old README/continuation.md absent-panel/new-sketch statements are historical and must not drive reimplementation. Shared toolbar context visibility/persistence is delivered separately at docs/current/desktop-ui-toolbar-visibility-20260923/README.md. Future frontend deliveries must use python3 tools/build_web_frontend.py, now serialized by a shared lock. No verification."
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,37 @@
# Start 首次启动常规设置补漏
状态:已实现,未验证;复用既有 Start 包,不新增孤立任务。
## 具体修复
桌面依据 `freecad-source/src/Mod/Start/Gui/GeneralSettingsWidget.cpp`:首次启动页面中的 Language、Unit System、Navigation Style 会立即写入 General、Units.UserSchema 和 View.NavigationStyle,并与 ThemeSelector 一起作用。Web 原先只有 `StartPreferencesEditor` 的后置偏好页,`StartLaunchPanel` 首次启动区只有 Theme、ShowExamples、CustomFolder 和 closeStart,导致首次设置入口漏掉三项常规设置;并且 UserSchema 数值被当成 String 发给参数桥。
本轮复用并集中修复:
- `web/src/start-preferences.tsx` 新增 `readStartGeneral`、`saveStartGeneral` 和 `FirstStartGeneralSettings`,从已有 PartBox 参数所有者读取并立即保存 Language、UserSchema、NavigationStyle、Theme;UserSchema 使用原生 Int 类型,保存失败保留错误提示和可恢复当前值。
- `applyStartTheme` 统一写入 `data-theme`、`color-scheme`,并广播 `freecad-theme-changed`;既有后置 General settings 复用同一个控件和原生桥,不再保留两份行为不同的实现。
- `web/src/start-launch-panel.tsx` 的 First start setup 挂载同一 General settings 控件,保留原有 FirstStart2024、ShowExamples、CustomFolder、closeStart、Done、Reload、Dismiss 生命周期;主题不再只写 localStorage,而由共享控件实时应用。
参数路径与桌面语义:
- `User parameter:BaseApp/Preferences/General/Language`
- `User parameter:BaseApp/Preferences/Units/UserSchema`(Int)
- `User parameter:BaseApp/Preferences/View/NavigationStyle`
- Web shell theme via `document.documentElement.dataset.theme` and `colorScheme`
## 复用与边界
复用 `startParameters`、`requestOwnerParameters`、`navigationStyles`、PartBox/DocumentProbe 参数持久化和现有 StartPreferencesEditor;不新建文档、不改变 Start 文件打开/新建/示例/自定义目录流程,不改 OCCT 或 Three.js。
语言选择写入原生 General 参数,并广播设置刷新事件;当前仓库没有独立 Web 翻译目录/运行时 locale loader,本轮保留已有静态 shell 文案机制,未虚构桌面 Qt 的即时翻译能力。后续若加入实际 locale loader,应复用该事件和参数 owner,而不是重新添加第二套首次启动页面。
## 构建
- 修改:`web/src/start-preferences.tsx`、`web/src/start-launch-panel.tsx`。
- 必要前端构建:`python3 tools/build_web_frontend.py`。
- 日志:`docs/current/start-first-start-general-settings-20260923/build.log`,退出码 0,built in 1.64s。
- 未运行测试、类型检查、浏览器、截图、烟测或验收;没有原生源码变化,无原生构建。
处理模块 | 对标项 | 源码落点 | 路由入口 | OCCT 边界 | 状态 | 结论
--- | --- | --- | --- | --- | --- | ---
Start | 首次启动语言/单位/导航/主题 | start-launch-panel.tsx;start-preferences.tsx | Start_Start → FirstStartGeneralSettings → requestOwnerParameters | 仅原生偏好,无几何算法 | 已补漏(未验证) | 保留

View File

@@ -0,0 +1,362 @@
vite v8.2.1 building client environment for production...
Public assets synchronized incrementally in 0.055s

transforming...✓ 2450 modules transformed.
rendering chunks...
computing gzip size...
dist/assets/dynamic-worker-bootstrap-CX1JKGrb.js 0.73 kB
dist/part-inspect.html 1.04 kB │ gzip: 0.48 kB
dist/partdesign-save.html 1.04 kB │ gzip: 0.44 kB
dist/sketcher-inspect.html 1.05 kB │ gzip: 0.49 kB
dist/part.html 1.10 kB │ gzip: 0.49 kB
dist/partdesign-inspect.html 1.11 kB │ gzip: 0.50 kB
dist/part-io.html 1.11 kB │ gzip: 0.49 kB
dist/points.html 1.11 kB │ gzip: 0.49 kB
dist/sandbox.html 1.11 kB │ gzip: 0.49 kB
dist/surface.html 1.11 kB │ gzip: 0.49 kB
dist/start.html 1.11 kB │ gzip: 0.49 kB
dist/sketcher.html 1.12 kB │ gzip: 0.49 kB
dist/robot-save.html 1.12 kB │ gzip: 0.50 kB
dist/meshpart.html 1.12 kB │ gzip: 0.50 kB
dist/robot-create.html 1.13 kB │ gzip: 0.49 kB
dist/robot-python.html 1.13 kB │ gzip: 0.50 kB
dist/show-inspect.html 1.13 kB │ gzip: 0.50 kB
dist/spreadsheet.html 1.13 kB │ gzip: 0.49 kB
dist/part-python.html 1.13 kB │ gzip: 0.50 kB
dist/show-python.html 1.13 kB │ gzip: 0.50 kB
dist/sandbox-save.html 1.13 kB │ gzip: 0.50 kB
dist/robot-inspect.html 1.13 kB │ gzip: 0.50 kB
dist/templatepymod.html 1.13 kB │ gzip: 0.50 kB
dist/start-python.html 1.13 kB │ gzip: 0.50 kB
dist/sandbox-python.html 1.13 kB │ gzip: 0.50 kB
dist/surface-save.html 1.14 kB │ gzip: 0.50 kB
dist/points-save.html 1.14 kB │ gzip: 0.51 kB
dist/sketcher-python.html 1.14 kB │ gzip: 0.50 kB
dist/surface-python.html 1.14 kB │ gzip: 0.50 kB
dist/sandbox-inspect.html 1.14 kB │ gzip: 0.50 kB
dist/surface-inspect.html 1.14 kB │ gzip: 0.50 kB
dist/start-inspect.html 1.14 kB │ gzip: 0.51 kB
dist/partdesign-python.html 1.15 kB │ gzip: 0.51 kB
dist/spreadsheet-save.html 1.15 kB │ gzip: 0.50 kB
dist/spreadsheet-python.html 1.15 kB │ gzip: 0.50 kB
dist/sketcher-persistence.html 1.15 kB │ gzip: 0.51 kB
dist/templatepymod-python.html 1.16 kB │ gzip: 0.51 kB
dist/spreadsheet-inspect.html 1.16 kB │ gzip: 0.51 kB
dist/reverseengineering-save.html 1.16 kB │ gzip: 0.51 kB
dist/reverseengineering-create.html 1.17 kB │ gzip: 0.51 kB
dist/reverseengineering-python.html 1.17 kB │ gzip: 0.51 kB
dist/reverseengineering-inspect.html 1.17 kB │ gzip: 0.51 kB
dist/mesh.html 1.20 kB │ gzip: 0.51 kB
dist/part-save.html 1.21 kB │ gzip: 0.52 kB
dist/measure.html 1.22 kB │ gzip: 0.51 kB
dist/material.html 1.23 kB │ gzip: 0.52 kB
dist/jtreader.html 1.23 kB │ gzip: 0.52 kB
dist/fem.html 1.26 kB │ gzip: 0.53 kB
dist/core.html 1.26 kB │ gzip: 0.52 kB
dist/document.html 1.26 kB │ gzip: 0.52 kB
dist/techdraw-inspect.html 1.26 kB │ gzip: 0.53 kB
dist/techdraw.html 1.27 kB │ gzip: 0.52 kB
dist/openscad.html 1.31 kB │ gzip: 0.54 kB
dist/tux.html 1.32 kB │ gzip: 0.53 kB
dist/test.html 1.33 kB │ gzip: 0.53 kB
dist/web.html 1.33 kB │ gzip: 0.53 kB
dist/techdraw-native.html 1.35 kB │ gzip: 0.54 kB
dist/techdraw-save.html 1.35 kB │ gzip: 0.54 kB
dist/techdraw-python.html 1.35 kB │ gzip: 0.54 kB
dist/web-persistence.html 1.36 kB │ gzip: 0.55 kB
dist/points-python.html 1.37 kB │ gzip: 0.57 kB
dist/points-inspect.html 1.38 kB │ gzip: 0.58 kB
dist/help.html 1.39 kB │ gzip: 0.57 kB
dist/python.html 1.44 kB │ gzip: 0.57 kB
dist/bim.html 1.45 kB │ gzip: 0.57 kB
dist/import.html 1.46 kB │ gzip: 0.57 kB
dist/draft.html 1.46 kB │ gzip: 0.58 kB
dist/inspection.html 1.48 kB │ gzip: 0.57 kB
dist/cloud.html 1.49 kB │ gzip: 0.56 kB
dist/plot-python.html 1.59 kB │ gzip: 0.60 kB
dist/cam.html 1.61 kB │ gzip: 0.59 kB
dist/assembly.html 1.64 kB │ gzip: 0.61 kB
dist/partdesign.html 2.27 kB │ gzip: 0.73 kB
dist/project.html 3.59 kB │ gzip: 0.99 kB
dist/index.html 3.74 kB │ gzip: 1.01 kB
dist/assets/robot-inspect.worker-CVODVnCd.js 4.53 kB
dist/assets/web-persistence.worker-2Zxcj3QT.js 4.55 kB
dist/assets/start-python.worker-B5vaxGty.js 4.56 kB
dist/assets/tux.worker-BOg1krec.js 4.58 kB
dist/assets/sketcher-inspect.worker-C9AvvwhY.js 4.59 kB
dist/assets/sketcher-persistence.worker-CfeXMZbg.js 4.62 kB
dist/assets/robot-create.worker-DPChGyOR.js 4.66 kB
dist/assets/templatepymod.worker-hg1ejMJB.js 4.67 kB
dist/assets/surface-inspect.worker-F-GdNdw_.js 4.72 kB
dist/assets/surface-save.worker-CUtK-04F.js 4.74 kB
dist/assets/python-runtime.worker-B-aJYkJT.js 4.76 kB
dist/assets/techdraw-inspect.worker-xPT-ga1B.js 4.77 kB
dist/assets/web-dock-overlay.worker-BCsmLfKX.js 4.79 kB
dist/assets/sandbox-save.worker-DCebp-Q8.js 4.83 kB
dist/assets/robot-save.worker-B9iH5YAv.js 4.89 kB
dist/assets/show-inspect.worker-B2QD7gst.js 4.90 kB
dist/assets/techdraw-save.worker-sojHDFzQ.js 4.91 kB
dist/assets/start-inventory.worker-CFKlvZmC.js 4.96 kB
dist/assets/sandbox-inspect.worker-C5YazrBn.js 5.03 kB
dist/assets/spreadsheet-save.worker-BiNG1wGg.js 5.04 kB
dist/assets/partdesign-inspect.worker-DeojPCWC.js 5.07 kB
dist/assets/reverseengineering-save.worker-CgUN2OLj.js 5.07 kB
dist/assets/partdesign-save.worker-gVh5xTPd.js 5.10 kB
dist/assets/reverseengineering-inspect.worker-CpKjB0Ej.js 5.12 kB
dist/assets/reverseengineering-create.worker-BnYvMNcQ.js 5.14 kB
dist/assets/spreadsheet-inspect.worker-Qa8cffR8.js 5.31 kB
dist/assets/techdraw-native.worker-DzdTH1-p.js 5.43 kB
dist/assets/points-persistence.worker-Q2RjUTfj.js 5.66 kB
dist/full.html 5.66 kB │ gzip: 1.26 kB
dist/assets/techdraw.worker-mfYkJLI7.js 5.74 kB
dist/assets/surface.worker-CxzaO0n3.js 5.75 kB
dist/main-chain.html 5.90 kB │ gzip: 1.32 kB
dist/assets/web.worker-C7hjw4lI.js 6.19 kB
dist/assets/help.worker-_0RHyS-0.js 6.23 kB
dist/assets/sandbox.worker-Q8ky_HwA.js 6.70 kB
dist/assets/spreadsheet.worker-Bbehg6Py.js 6.74 kB
dist/assets/workbench-command.worker-BQ7_z6oJ.js 6.95 kB
dist/assets/start.worker-CIavZLau.js 6.98 kB
dist/assets/plot-python.worker-DtIDsfZF.js 6.98 kB
dist/assets/sketcher.worker-DF02tOmg.js 7.12 kB
dist/assets/reverseengineering-python.worker-DKZTinnr.js 7.36 kB
dist/assets/spreadsheet-python.worker-DMdejRPT.js 7.63 kB
dist/assets/templatepymod-python.worker-PsnxyRD5.js 7.81 kB
dist/assets/robot-python.worker-CtPujTTt.js 8.96 kB
dist/assets/meshpart.worker-DZfzSxZ7.js 9.09 kB
dist/workbench.html 9.98 kB │ gzip: 1.93 kB
dist/assets/surface-python.worker-DSo_Egxm.js 10.79 kB
dist/assets/show-python.worker-DPiddEMC.js 10.89 kB
dist/assets/import.worker-C-AQ4J_x.js 12.43 kB
dist/assets/partdesign-python.worker-ydIZ9rk7.js 12.48 kB
dist/assets/fem.worker-DGQs784X.js 12.82 kB
dist/assets/sandbox-python.worker-DQsLVBHZ.js 12.84 kB
dist/assets/cloud.worker-DNuING5d.js 13.68 kB
dist/assets/inspection.worker-Bk6WfE00.js 13.99 kB
dist/assets/cam.worker-we3i0GjL.js 14.42 kB
dist/assets/sketcher-python.worker-DCmXcCgC.js 14.45 kB
dist/assets/material-python.worker-BcGZQmQt.js 14.67 kB
dist/assets/material.worker-BcGZQmQt.js 14.67 kB
dist/assets/draft.worker-CV1zzRV7.js 15.11 kB
dist/assets/test.worker-CE1QL_n0.js 15.75 kB
dist/assets/measure.worker-xIEFKJEl.js 15.96 kB
dist/assets/openscad.worker-DrNMAW2-.js 19.09 kB
dist/assets/points.worker-9rmxQC5I.js 19.81 kB
dist/assets/techdraw-python.worker-DpV5IJ2G.js 21.30 kB
dist/assets/mesh.worker-CdHgCr3i.js 21.50 kB
dist/assets/bim.worker-B0fOxOsJ.js 22.85 kB
dist/assets/partdesign.worker-BKGepl5j.js 32.32 kB
dist/assets/assembly.worker-D7Cm_S8g.js 34.41 kB
dist/assets/core.worker-u_jdRzAP.js 35.22 kB
dist/assets/PartDesignExample-BpwNhVch.FCStd 49.34 kB
dist/assets/part-save.worker-CXZ1hJkW.js 62.20 kB
dist/assets/part.worker-DfEBz_3G.js 80.32 kB
dist/assets/EngineBlock-CVb0N6vw.FCStd 92.45 kB
dist/assets/jtreader.worker-C8dK-7Jp.js 95.78 kB
dist/assets/draft_test_objects-Ce4A2NfX.FCStd 113.95 kB
dist/assets/AssemblyExample-Hf3Yo9S1.FCStd 173.57 kB
dist/assets/FEMExample-HgXO02sk.FCStd 528.07 kB
dist/assets/Schenkel-CxpzxKld.stp 590.05 kB
dist/assets/ArchDetail-jj9o7oVJ.FCStd 1,876.08 kB
dist/assets/BIMExample-47hOGPj8.FCStd 2,072.78 kB
dist/assets/workbench-DtksdrdB.css 2.11 kB │ gzip: 0.74 kB
dist/assets/partdesign-workspace-component-B0OVOYiL.css 2.38 kB │ gzip: 0.76 kB
dist/assets/partdesign-c4C7lohl.css 4.62 kB │ gzip: 1.55 kB
dist/assets/play-D-_ZNeFC.js 0.12 kB │ gzip: 0.12 kB
dist/assets/show-python-family-facade-DMqlrdIP.js 0.19 kB │ gzip: 0.14 kB
dist/assets/show-python-facade-ButUz4Qy.js 0.24 kB │ gzip: 0.20 kB
dist/assets/file-input-D8HGScs0.js 0.24 kB │ gzip: 0.16 kB
dist/assets/core-runtime-NDNIHpBU.js 0.24 kB │ gzip: 0.17 kB
dist/assets/file-search-DnMZlG9r.js 0.26 kB │ gzip: 0.18 kB
dist/assets/mesh-persistence-facade-DS9ndFlX.js 0.26 kB │ gzip: 0.21 kB
dist/assets/robot-create-facade-DsFLU8rr.js 0.26 kB │ gzip: 0.21 kB
dist/assets/surface-save-facade-DqYkLu2D.js 0.26 kB │ gzip: 0.21 kB
dist/assets/cloud-persistence-facade-slrLU7xE.js 0.26 kB │ gzip: 0.21 kB
dist/assets/points-persistence-facade-DVLoCS9l.js 0.26 kB │ gzip: 0.21 kB
dist/assets/robot-save-facade-46s9sMyB.js 0.26 kB │ gzip: 0.21 kB
dist/assets/part-python-facade-DuAK0FpU.js 0.27 kB │ gzip: 0.21 kB
dist/assets/start-python-facade-B1CMhCGP.js 0.27 kB │ gzip: 0.21 kB
dist/assets/route-BjiIcSqv.js 0.27 kB │ gzip: 0.17 kB
dist/assets/measure-persistence-facade-Bcss4aJL.js 0.27 kB │ gzip: 0.22 kB
dist/assets/robot-python-facade-q2JVYdPx.js 0.27 kB │ gzip: 0.22 kB
dist/assets/web-facade-Ck29HNBt.js 0.27 kB │ gzip: 0.22 kB
dist/assets/partdesign-save-facade-B34V-F79.js 0.28 kB │ gzip: 0.22 kB
dist/assets/points-python-facade-5Lmbu8kQ.js 0.28 kB │ gzip: 0.22 kB
dist/assets/jtreader-persistence-facade-CuW_tMqV.js 0.28 kB │ gzip: 0.22 kB
dist/assets/sandbox-python-facade-D7HVYX_W.js 0.28 kB │ gzip: 0.22 kB
dist/assets/surface-python-facade-8DAhyuZd.js 0.28 kB │ gzip: 0.22 kB
dist/assets/spreadsheet-save-facade--Pk6YEHd.js 0.28 kB │ gzip: 0.21 kB
dist/assets/material-persistence-facade-MroMCUFU.js 0.28 kB │ gzip: 0.22 kB
dist/assets/part-facade-Dqdz2CMv.js 0.28 kB │ gzip: 0.22 kB
dist/assets/measure-python-facade-DXH12EoV.js 0.29 kB │ gzip: 0.21 kB
dist/assets/sketcher-python-facade-s_09asE0.js 0.29 kB │ gzip: 0.22 kB
dist/assets/openscad-python-facade-CeB9lZUw.js 0.29 kB │ gzip: 0.22 kB
dist/assets/techdraw-python-facade-BtOLupRJ.js 0.29 kB │ gzip: 0.22 kB
dist/assets/tux-facade-D2bVxp8w.js 0.29 kB │ gzip: 0.23 kB
dist/assets/inspection-persistence-facade-nvVV4ARG.js 0.29 kB │ gzip: 0.22 kB
dist/assets/sketcher-persistence-facade-BDuI9FpW.js 0.29 kB │ gzip: 0.23 kB
dist/assets/points-facade-BXGQ-Ppz.js 0.29 kB │ gzip: 0.23 kB
dist/assets/techdraw-save-facade-BvoReCX8.js 0.29 kB │ gzip: 0.23 kB
dist/assets/part-save-facade-D_VXaZj8.js 0.30 kB │ gzip: 0.23 kB
dist/assets/web-persistence-facade-BoD2jJgN.js 0.30 kB │ gzip: 0.23 kB
dist/assets/part-io-facade-CbFxtVBz.js 0.30 kB │ gzip: 0.23 kB
dist/assets/show-inspect-facade-B7fdNKtX.js 0.30 kB │ gzip: 0.23 kB
dist/assets/partdesign-python-facade-CO-vQEgQ.js 0.31 kB │ gzip: 0.22 kB
dist/assets/points-inspect-facade-BEeDt8S-.js 0.31 kB │ gzip: 0.23 kB
dist/assets/sandbox-facade-D7dzZFLP.js 0.31 kB │ gzip: 0.23 kB
dist/assets/sandbox-save-facade-Ct4d_E5A.js 0.31 kB │ gzip: 0.24 kB
dist/assets/sketcher-facade-NnwQipJc.js 0.31 kB │ gzip: 0.23 kB
dist/assets/techdraw-facade-aagF3oSr.js 0.31 kB │ gzip: 0.25 kB
dist/assets/templatepymod-python-facade-COub4Pml.js 0.31 kB │ gzip: 0.23 kB
dist/assets/robot-inspect-facade-DtM6g5eT.js 0.31 kB │ gzip: 0.23 kB
dist/assets/start-inventory-facade-B8L6WXtA.js 0.31 kB │ gzip: 0.23 kB
dist/assets/reverseengineering-save-facade-jaDJAoek.js 0.32 kB │ gzip: 0.22 kB
dist/assets/partdesign-BQdKhBdz.js 0.32 kB │ gzip: 0.25 kB
dist/assets/surface-facade-BkxAqFEl.js 0.32 kB │ gzip: 0.23 kB
dist/assets/spreadsheet-python-facade-DNQ06kqq.js 0.32 kB │ gzip: 0.23 kB
dist/assets/surface-inspect-facade--FM1PBKH.js 0.33 kB │ gzip: 0.23 kB
dist/assets/reverseengineering-create-facade-_gePfDI9.js 0.33 kB │ gzip: 0.23 kB
dist/assets/fem-facade-CTWbg8W4.js 0.33 kB │ gzip: 0.26 kB
dist/assets/sandbox-inspect-facade-ChelQkD0.js 0.33 kB │ gzip: 0.23 kB
dist/assets/draft-facade-DuQJqsW2.js 0.33 kB │ gzip: 0.26 kB
dist/assets/templatepymod-facade-BIEatdOS.js 0.33 kB │ gzip: 0.23 kB
dist/assets/techdraw-native-facade-DFqX--Jm.js 0.34 kB │ gzip: 0.26 kB
dist/assets/openscad-inspect-facade-CD1x9jF-.js 0.35 kB │ gzip: 0.25 kB
dist/assets/reverseengineering-python-facade-D0ETOYnk.js 0.35 kB │ gzip: 0.23 kB
dist/assets/spreadsheet-inspect-facade-Be9KXsQS.js 0.37 kB │ gzip: 0.25 kB
dist/assets/reverseengineering-inspect-facade-D4Ki188U.js 0.40 kB │ gzip: 0.24 kB
dist/assets/start-facade-CUkdj_rn.js 0.43 kB │ gzip: 0.26 kB
dist/assets/inspection-facade-CBfFciGw.js 0.43 kB │ gzip: 0.28 kB
dist/assets/save-DdXNGgDu.js 0.44 kB │ gzip: 0.21 kB
dist/assets/cam-persistence-facade-BubrF1Zi.js 0.47 kB │ gzip: 0.31 kB
dist/assets/spreadsheet-facade-LrDmQfdq.js 0.49 kB │ gzip: 0.31 kB
dist/assets/help-python-facade-DtavuPjQ.js 0.51 kB │ gzip: 0.31 kB
dist/assets/rotate-ccw-DUGzGpVv.js 0.54 kB │ gzip: 0.38 kB
dist/assets/bim-python-facade-b1qXNzBY.js 0.54 kB │ gzip: 0.31 kB
dist/assets/facade-envelope-D0Aixh7X.js 0.61 kB │ gzip: 0.30 kB
dist/assets/test-facade-8wF3KR_U.js 0.62 kB │ gzip: 0.35 kB
dist/assets/boxes-v6_sbvwg.js 0.63 kB │ gzip: 0.26 kB
dist/assets/plot-python-Dnb4yZAX.js 0.65 kB │ gzip: 0.43 kB
dist/assets/jsx-runtime-CriDp1zE.js 0.66 kB │ gzip: 0.43 kB
dist/assets/modulepreload-polyfill-P2Xu9kJm.js 0.67 kB │ gzip: 0.38 kB
dist/assets/jtreader-inspect-facade-MuD5LO2G.js 0.67 kB │ gzip: 0.38 kB
dist/assets/mesh-python-facade-BqFrGnKZ.js 0.77 kB │ gzip: 0.40 kB
dist/assets/assembly-python-facade-lnqmT0xQ.js 0.78 kB │ gzip: 0.38 kB
dist/assets/meshpart-python-facade-C0BClkPM.js 0.83 kB │ gzip: 0.39 kB
dist/assets/cam-python-facade-B7bklSZs.js 0.86 kB │ gzip: 0.46 kB
dist/assets/material-python-facade-D9fGPPR7.js 0.90 kB │ gzip: 0.44 kB
dist/assets/cloud-python-facade-BnucAy4n.js 0.96 kB │ gzip: 0.52 kB
dist/assets/export-service-3DLpdk4G.js 0.99 kB │ gzip: 0.57 kB
dist/assets/import-python-facade-BSX0J_vZ.js 1.16 kB │ gzip: 0.53 kB
dist/assets/preload-helper-Czpn1I53.js 1.19 kB │ gzip: 0.67 kB
dist/assets/assembly-persistence-facade-Dn6bIi3m.js 1.30 kB │ gzip: 0.70 kB
dist/assets/points-python-BMRX_Ssp.js 1.43 kB │ gzip: 0.65 kB
dist/assets/points-inspect-Db6j5N-G.js 1.45 kB │ gzip: 0.66 kB
dist/assets/draft-stretch-controls-l_shOKCY.js 1.48 kB │ gzip: 0.74 kB
dist/assets/recovery-controller-O2kjgylK.js 1.54 kB │ gzip: 0.71 kB
dist/assets/partdesign-save-CbeoS6zN.js 1.77 kB │ gzip: 0.73 kB
dist/assets/openscad-format-facade-CDmXl5v1.js 1.99 kB │ gzip: 0.87 kB
dist/assets/bim-panel-ifc-task-33ENMpVH.js 2.02 kB │ gzip: 0.95 kB
dist/assets/lucide-Bj4YvMR1.js 2.10 kB │ gzip: 1.14 kB
dist/assets/app-services-Cdf3CnXp.js 2.21 kB │ gzip: 1.26 kB
dist/assets/spreadsheet-save-DpOiejKi.js 2.38 kB │ gzip: 1.03 kB
dist/assets/openscad-desktop-adapter-CHdUZLWA.js 2.91 kB │ gzip: 1.24 kB
dist/assets/test-FWLm90kJ.js 3.34 kB │ gzip: 1.47 kB
dist/assets/web-Bm2cXYR8.js 3.35 kB │ gzip: 1.48 kB
dist/assets/bim-panel-structure-task-BGdyN2BA.js 3.38 kB │ gzip: 1.24 kB
dist/assets/tux-D80RpCwQ.js 3.39 kB │ gzip: 1.49 kB
dist/assets/part-save-BORCDu7H.js 3.43 kB │ gzip: 1.52 kB
dist/assets/part-python-_KRaawsm.js 3.44 kB │ gzip: 1.53 kB
dist/assets/part-io-CSDGV46a.js 3.46 kB │ gzip: 1.54 kB
dist/assets/web-action-03-Dr7GSCtb.js 3.53 kB │ gzip: 1.53 kB
dist/assets/part-D5vqhDw2.js 3.54 kB │ gzip: 1.58 kB
dist/assets/techdraw-save-C_vsQmHN.js 3.54 kB │ gzip: 1.55 kB
dist/assets/robot-python-CYNqMOnV.js 3.54 kB │ gzip: 1.62 kB
dist/assets/techdraw-python-DvetJb7U.js 3.57 kB │ gzip: 1.53 kB
dist/assets/points-DN0w01T1.js 3.58 kB │ gzip: 1.59 kB
dist/assets/ui-accessibility-Bx2JN2aO.js 3.60 kB │ gzip: 1.67 kB
dist/assets/techdraw-native-_QNwBGlH.js 3.62 kB │ gzip: 1.56 kB
dist/assets/robot-inspect-CYa2be4E.js 3.67 kB │ gzip: 1.65 kB
dist/assets/sandbox-python-BCGBxJqf.js 3.68 kB │ gzip: 1.62 kB
dist/assets/sketcher-python-BL2_OJ2j.js 3.69 kB │ gzip: 1.62 kB
dist/assets/part-inspect-7StgHyvD.js 3.72 kB │ gzip: 1.63 kB
dist/assets/sketcher-D2K5ZZoZ.js 3.72 kB │ gzip: 1.61 kB
dist/assets/templatepymod-D8K3ra-l.js 3.76 kB │ gzip: 1.68 kB
dist/assets/sandbox-C4VUMo8D.js 3.77 kB │ gzip: 1.62 kB
dist/assets/show-python-DacsS6fQ.js 3.77 kB │ gzip: 1.67 kB
dist/assets/templatepymod-python-CWQMDm0W.js 3.78 kB │ gzip: 1.68 kB
dist/assets/spreadsheet-5hm81bzD.js 3.81 kB │ gzip: 1.67 kB
dist/assets/surface-python-BZKBmjcs.js 3.82 kB │ gzip: 1.71 kB
dist/assets/robot-create-CWrpDvJA.js 3.82 kB │ gzip: 1.69 kB
dist/assets/sandbox-save-Bk1WFx3P.js 3.83 kB │ gzip: 1.66 kB
dist/assets/storage-BcICQHZX.js 3.85 kB │ gzip: 1.30 kB
dist/assets/robot-save-_Y-zT22T.js 3.85 kB │ gzip: 1.72 kB
dist/assets/techdraw-inspect-BSrApN_Q.js 3.86 kB │ gzip: 1.63 kB
dist/assets/partdesign-python-Bf3-NqsC.js 3.87 kB │ gzip: 1.66 kB
dist/assets/show-inspect-CwJha_c4.js 3.88 kB │ gzip: 1.73 kB
dist/assets/points-save-CGe_EUOx.js 3.91 kB │ gzip: 1.67 kB
dist/assets/sandbox-inspect-Dja0gG9n.js 3.91 kB │ gzip: 1.69 kB
dist/assets/surface-save-CBdaDQb7.js 3.92 kB │ gzip: 1.72 kB
dist/assets/sketcher-persistence-0PpuZ_0a.js 3.93 kB │ gzip: 1.68 kB
dist/assets/start-WtivU9aJ.js 3.94 kB │ gzip: 1.74 kB
dist/assets/start-python-D3PwrGwY.js 3.95 kB │ gzip: 1.73 kB
dist/assets/spreadsheet-python-Cd-0coHp.js 3.95 kB │ gzip: 1.74 kB
dist/assets/surface-inspect-Bh4WXF9o.js 3.96 kB │ gzip: 1.74 kB
dist/assets/start-inspect-CsarTd3K.js 3.98 kB │ gzip: 1.75 kB
dist/assets/surface-BMuAvYRi.js 3.98 kB │ gzip: 1.73 kB
dist/assets/reverseengineering-python-BrLJGi9x.js 4.00 kB │ gzip: 1.78 kB
dist/assets/reverseengineering-create-HZcw3dYz.js 4.08 kB │ gzip: 1.79 kB
dist/assets/reverseengineering-save-FzGCucym.js 4.09 kB │ gzip: 1.81 kB
dist/assets/spreadsheet-inspect-dFA6Vq6g.js 4.11 kB │ gzip: 1.77 kB
dist/assets/sketcher-inspect-Wm52KgOO.js 4.11 kB │ gzip: 1.77 kB
dist/assets/reverseengineering-inspect-8nav7qXB.js 4.20 kB │ gzip: 1.82 kB
dist/assets/partdesign-inspect-SAd-UGRC.js 4.33 kB │ gzip: 1.81 kB
dist/assets/python-Ba27GsIn.js 4.59 kB │ gzip: 2.08 kB
dist/assets/bim-axis-material-task-D0PFD79p.js 4.80 kB │ gzip: 1.46 kB
dist/assets/part-document-facade-CBPMQ3uN.js 4.91 kB │ gzip: 1.91 kB
dist/assets/meshpart-Cq3YMnKd.js 5.32 kB │ gzip: 2.19 kB
dist/assets/jtreader-D4wdvXBd.js 5.43 kB │ gzip: 2.22 kB
dist/assets/material-BtydbLAq.js 5.76 kB │ gzip: 2.33 kB
dist/assets/full-C3TosNrX.js 5.89 kB │ gzip: 2.60 kB
dist/assets/techdraw-BJsb309W.js 5.95 kB │ gzip: 2.66 kB
dist/assets/fem-BB7u_DYL.js 6.35 kB │ gzip: 2.48 kB
dist/assets/openscad-CFW1QTCA.js 6.35 kB │ gzip: 2.43 kB
dist/assets/test-desktop-output-B7b_AS0y.js 6.38 kB │ gzip: 2.43 kB
dist/assets/session-persistence-Dn8_y31c.js 6.80 kB │ gzip: 2.31 kB
dist/assets/mesh-CHc1j622.js 6.86 kB │ gzip: 2.71 kB
dist/assets/help-BDS1O4w7.js 7.00 kB │ gzip: 2.60 kB
dist/assets/draft-OYHAw_73.js 7.02 kB │ gzip: 2.67 kB
dist/assets/react-CYoUnH_4.js 7.16 kB │ gzip: 2.83 kB
dist/assets/measure-CBI0LP-w.js 7.66 kB │ gzip: 2.91 kB
dist/assets/test-desktop-adapter-3EjrcfzZ.js 8.08 kB │ gzip: 2.43 kB
dist/assets/import-CMv4bYIE.js 8.87 kB │ gzip: 3.42 kB
dist/assets/inspection-DiCbiJhh.js 8.92 kB │ gzip: 3.18 kB
dist/assets/bim-xGmbnKPO.js 8.92 kB │ gzip: 2.91 kB
dist/assets/assembly-BKfj7iHh.js 9.46 kB │ gzip: 3.09 kB
dist/assets/document-C6cPH-tZ.js 10.00 kB │ gzip: 3.50 kB
dist/assets/core-F-zBHDcX.js 10.00 kB │ gzip: 3.50 kB
dist/assets/cam-CA5KV68x.js 12.62 kB │ gzip: 3.86 kB
dist/assets/main-chain-CmvdvKLc.js 12.80 kB │ gzip: 4.47 kB
dist/assets/stateful-family-dispatcher-DlrGRfkh.js 13.54 kB │ gzip: 3.86 kB
dist/assets/cloud-Csavllry.js 14.41 kB │ gzip: 4.26 kB
dist/assets/python-family-dispatcher-C3iPbGJV.js 17.54 kB │ gzip: 3.49 kB
dist/assets/plot-axes-task-DrizjbDn.js 18.79 kB │ gzip: 6.13 kB
dist/assets/draft-desktop-adapter-BZX2hBxE.js 19.62 kB │ gzip: 4.59 kB
dist/assets/module-router-CTLekBqC.js 24.94 kB │ gzip: 6.97 kB
dist/assets/bim-desktop-adapter-5rkAISAK.js 24.94 kB │ gzip: 6.48 kB
dist/assets/sketcher-desktop-adapter-CVUOtLw7.js 25.94 kB │ gzip: 6.01 kB
dist/assets/module-registry.generated-C_xajxGw.js 29.46 kB │ gzip: 4.95 kB
dist/assets/techdraw-desktop-adapter-BYxSjq3R.js 43.67 kB │ gzip: 7.59 kB
dist/assets/client-Bz7rxqNA.js 132.71 kB │ gzip: 43.06 kB
dist/assets/partdesign-workspace-component-6g59gGkR.js 184.75 kB │ gzip: 47.81 kB
dist/assets/project-shell-D-4Q5sGi.js 190.74 kB │ gzip: 51.78 kB
dist/assets/web-view-task-BjjKw_QO.js 209.59 kB │ gzip: 49.26 kB
dist/assets/import-export-preferences-B2mEfXKQ.js 361.69 kB │ gzip: 77.23 kB
dist/assets/three.module-B4Clv3wn.js 566.00 kB │ gzip: 142.94 kB
dist/assets/workbench-tsiS8CU2.js 1,103.37 kB │ gzip: 274.98 kB
[plugin builtin:vite-reporter]
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.