@forgeax/interface 0.9.0 → 0.9.2

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.
@@ -61,14 +61,12 @@ export async function bootstrapAppHost(overrides = {}) {
61
61
  ...m,
62
62
  async setup(ctx) {
63
63
  control.beginSetup(m);
64
- const menuCleanups = [];
64
+ const cleanups = [];
65
+ let pageCleanup;
65
66
  try {
66
- const cleanups = [];
67
- let pageCleanup;
68
67
  for (const menu of m.contributes?.menus ?? []) {
69
- menuCleanups.push(host.menus.register(menu));
68
+ cleanups.push(host.menus.register(menu));
70
69
  }
71
- cleanups.push(...menuCleanups);
72
70
  if (m.contributes?.panels) {
73
71
  cleanups.push(control.contributePanels(m.id, m.contributes.panels));
74
72
  }
@@ -100,7 +98,10 @@ export async function bootstrapAppHost(overrides = {}) {
100
98
  };
101
99
  }
102
100
  catch (error) {
103
- for (const cleanup of menuCleanups.slice().reverse())
101
+ // Preserve the same page-close decision boundary on failed setup.
102
+ // A dirty page must not lose its surrounding contributions underneath it.
103
+ await pageCleanup?.();
104
+ for (const cleanup of cleanups.slice().reverse())
104
105
  await cleanup();
105
106
  throw error;
106
107
  }
@@ -1693,7 +1693,6 @@
1693
1693
  "openRecent": "Open Recent",
1694
1694
  "openRecentEmpty": "No recent items",
1695
1695
  "closeGame": "Close Game",
1696
- "save": "Save",
1697
1696
  "saveAll": "Save All",
1698
1697
  "reveal": "Show in System",
1699
1698
  "import": "Import Asset…",
@@ -1701,21 +1700,15 @@
1701
1700
  "package": "Package and Preview"
1702
1701
  },
1703
1702
  "edit": {
1704
- "undo": "Undo",
1705
- "redo": "Redo",
1706
1703
  "cut": "Cut",
1707
1704
  "copy": "Copy",
1708
1705
  "paste": "Paste",
1709
- "delete": "Delete",
1710
1706
  "copyPath": "Copy Path",
1711
1707
  "copyGuid": "Copy GUID",
1712
1708
  "find": "Find…",
1713
1709
  "rollback": "Rollback to Checkpoint…"
1714
1710
  },
1715
1711
  "window": {
1716
- "outline": "Outline",
1717
- "inspector": "Inspector",
1718
- "files": "Files",
1719
1712
  "timeline": "Timeline",
1720
1713
  "runtime": "Runtime",
1721
1714
  "viewport": "Viewport",
@@ -1724,25 +1717,9 @@
1724
1717
  "fullscreen": "Enter Fullscreen"
1725
1718
  },
1726
1719
  "build": {
1727
- "play": "▶ Play",
1728
- "stop": "■ Stop",
1729
- "editScene": "✎ Edit Scene",
1730
- "reload": "Reload Preview",
1731
1720
  "export": "Export as Standalone Site…",
1732
1721
  "settings": "Build Settings…"
1733
1722
  },
1734
- "select": {
1735
- "all": "Select All",
1736
- "none": "Deselect",
1737
- "invert": "Invert Selection",
1738
- "byType": "Select by Type",
1739
- "byType.mesh": "Meshes",
1740
- "byType.light": "Lights",
1741
- "byType.camera": "Cameras",
1742
- "byType.collider": "Colliders",
1743
- "marquee": "Marquee Mode",
1744
- "frame": "Frame Selected"
1745
- },
1746
1723
  "help": {
1747
1724
  "docs": "Documentation",
1748
1725
  "tutorials": "Tutorials",
@@ -1693,7 +1693,6 @@
1693
1693
  "openRecent": "打开最近",
1694
1694
  "openRecentEmpty": "暂无最近记录",
1695
1695
  "closeGame": "关闭游戏",
1696
- "save": "保存",
1697
1696
  "saveAll": "全部保存",
1698
1697
  "reveal": "在系统中显示",
1699
1698
  "import": "导入资产…",
@@ -1701,21 +1700,15 @@
1701
1700
  "package": "打包并预览"
1702
1701
  },
1703
1702
  "edit": {
1704
- "undo": "撤销",
1705
- "redo": "重做",
1706
1703
  "cut": "剪切",
1707
1704
  "copy": "复制",
1708
1705
  "paste": "粘贴",
1709
- "delete": "删除",
1710
1706
  "copyPath": "复制路径",
1711
1707
  "copyGuid": "复制 GUID",
1712
1708
  "find": "查找…",
1713
1709
  "rollback": "回滚到检查点…"
1714
1710
  },
1715
1711
  "window": {
1716
- "outline": "大纲",
1717
- "inspector": "检查器",
1718
- "files": "文件",
1719
1712
  "timeline": "时间线",
1720
1713
  "runtime": "运行时",
1721
1714
  "viewport": "视口",
@@ -1724,25 +1717,9 @@
1724
1717
  "fullscreen": "进入全屏"
1725
1718
  },
1726
1719
  "build": {
1727
- "play": "▶ Play",
1728
- "stop": "■ Stop",
1729
- "editScene": "✎ Edit 场景",
1730
- "reload": "重新加载预览",
1731
1720
  "export": "导出为独立站点…",
1732
1721
  "settings": "构建设置…"
1733
1722
  },
1734
- "select": {
1735
- "all": "全选",
1736
- "none": "取消选择",
1737
- "invert": "反选",
1738
- "byType": "按类型选择",
1739
- "byType.mesh": "网格",
1740
- "byType.light": "灯光",
1741
- "byType.camera": "相机",
1742
- "byType.collider": "碰撞体",
1743
- "marquee": "框选模式",
1744
- "frame": "聚焦选中(Frame)"
1745
- },
1746
1723
  "help": {
1747
1724
  "docs": "文档",
1748
1725
  "tutorials": "教程",
@@ -61,14 +61,12 @@ export async function bootstrapAppHost(overrides = {}) {
61
61
  ...m,
62
62
  async setup(ctx) {
63
63
  control.beginSetup(m);
64
- const menuCleanups = [];
64
+ const cleanups = [];
65
+ let pageCleanup;
65
66
  try {
66
- const cleanups = [];
67
- let pageCleanup;
68
67
  for (const menu of m.contributes?.menus ?? []) {
69
- menuCleanups.push(host.menus.register(menu));
68
+ cleanups.push(host.menus.register(menu));
70
69
  }
71
- cleanups.push(...menuCleanups);
72
70
  if (m.contributes?.panels) {
73
71
  cleanups.push(control.contributePanels(m.id, m.contributes.panels));
74
72
  }
@@ -100,7 +98,10 @@ export async function bootstrapAppHost(overrides = {}) {
100
98
  };
101
99
  }
102
100
  catch (error) {
103
- for (const cleanup of menuCleanups.slice().reverse())
101
+ // Preserve the same page-close decision boundary on failed setup.
102
+ // A dirty page must not lose its surrounding contributions underneath it.
103
+ await pageCleanup?.();
104
+ for (const cleanup of cleanups.slice().reverse())
104
105
  await cleanup();
105
106
  throw error;
106
107
  }
@@ -1693,7 +1693,6 @@
1693
1693
  "openRecent": "Open Recent",
1694
1694
  "openRecentEmpty": "No recent items",
1695
1695
  "closeGame": "Close Game",
1696
- "save": "Save",
1697
1696
  "saveAll": "Save All",
1698
1697
  "reveal": "Show in System",
1699
1698
  "import": "Import Asset…",
@@ -1701,21 +1700,15 @@
1701
1700
  "package": "Package and Preview"
1702
1701
  },
1703
1702
  "edit": {
1704
- "undo": "Undo",
1705
- "redo": "Redo",
1706
1703
  "cut": "Cut",
1707
1704
  "copy": "Copy",
1708
1705
  "paste": "Paste",
1709
- "delete": "Delete",
1710
1706
  "copyPath": "Copy Path",
1711
1707
  "copyGuid": "Copy GUID",
1712
1708
  "find": "Find…",
1713
1709
  "rollback": "Rollback to Checkpoint…"
1714
1710
  },
1715
1711
  "window": {
1716
- "outline": "Outline",
1717
- "inspector": "Inspector",
1718
- "files": "Files",
1719
1712
  "timeline": "Timeline",
1720
1713
  "runtime": "Runtime",
1721
1714
  "viewport": "Viewport",
@@ -1724,25 +1717,9 @@
1724
1717
  "fullscreen": "Enter Fullscreen"
1725
1718
  },
1726
1719
  "build": {
1727
- "play": "▶ Play",
1728
- "stop": "■ Stop",
1729
- "editScene": "✎ Edit Scene",
1730
- "reload": "Reload Preview",
1731
1720
  "export": "Export as Standalone Site…",
1732
1721
  "settings": "Build Settings…"
1733
1722
  },
1734
- "select": {
1735
- "all": "Select All",
1736
- "none": "Deselect",
1737
- "invert": "Invert Selection",
1738
- "byType": "Select by Type",
1739
- "byType.mesh": "Meshes",
1740
- "byType.light": "Lights",
1741
- "byType.camera": "Cameras",
1742
- "byType.collider": "Colliders",
1743
- "marquee": "Marquee Mode",
1744
- "frame": "Frame Selected"
1745
- },
1746
1723
  "help": {
1747
1724
  "docs": "Documentation",
1748
1725
  "tutorials": "Tutorials",
@@ -1693,7 +1693,6 @@
1693
1693
  "openRecent": "打开最近",
1694
1694
  "openRecentEmpty": "暂无最近记录",
1695
1695
  "closeGame": "关闭游戏",
1696
- "save": "保存",
1697
1696
  "saveAll": "全部保存",
1698
1697
  "reveal": "在系统中显示",
1699
1698
  "import": "导入资产…",
@@ -1701,21 +1700,15 @@
1701
1700
  "package": "打包并预览"
1702
1701
  },
1703
1702
  "edit": {
1704
- "undo": "撤销",
1705
- "redo": "重做",
1706
1703
  "cut": "剪切",
1707
1704
  "copy": "复制",
1708
1705
  "paste": "粘贴",
1709
- "delete": "删除",
1710
1706
  "copyPath": "复制路径",
1711
1707
  "copyGuid": "复制 GUID",
1712
1708
  "find": "查找…",
1713
1709
  "rollback": "回滚到检查点…"
1714
1710
  },
1715
1711
  "window": {
1716
- "outline": "大纲",
1717
- "inspector": "检查器",
1718
- "files": "文件",
1719
1712
  "timeline": "时间线",
1720
1713
  "runtime": "运行时",
1721
1714
  "viewport": "视口",
@@ -1724,25 +1717,9 @@
1724
1717
  "fullscreen": "进入全屏"
1725
1718
  },
1726
1719
  "build": {
1727
- "play": "▶ Play",
1728
- "stop": "■ Stop",
1729
- "editScene": "✎ Edit 场景",
1730
- "reload": "重新加载预览",
1731
1720
  "export": "导出为独立站点…",
1732
1721
  "settings": "构建设置…"
1733
1722
  },
1734
- "select": {
1735
- "all": "全选",
1736
- "none": "取消选择",
1737
- "invert": "反选",
1738
- "byType": "按类型选择",
1739
- "byType.mesh": "网格",
1740
- "byType.light": "灯光",
1741
- "byType.camera": "相机",
1742
- "byType.collider": "碰撞体",
1743
- "marquee": "框选模式",
1744
- "frame": "聚焦选中(Frame)"
1745
- },
1746
1723
  "help": {
1747
1724
  "docs": "文档",
1748
1725
  "tutorials": "教程",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/interface",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "type": "module",
5
5
  "description": "ForgeaX product interface shell and application composition boundary.",
6
6
  "license": "Apache-2.0",