@omega.js/desktop 0.51.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +18 -13
  2. package/dist/assets/css/core/_initialize.scss +1 -1
  3. package/dist/assets/js/core/app-shell.js +14 -15
  4. package/dist/assets/themes/_template/_theme.js +6 -6
  5. package/dist/assets/themes/base/_includes/global/sections/account.html +4 -4
  6. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +5 -5
  7. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +3 -3
  8. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +1 -1
  9. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +1 -1
  10. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +1 -1
  11. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +2 -3
  12. package/dist/assets/themes/base/_sections/verts/unit/section.html +1 -1
  13. package/dist/assets/themes/base/_sections/verts/unit/section.js +3 -4
  14. package/dist/assets/themes/base/_theme.js +4 -3
  15. package/dist/assets/themes/bootstrap/_theme.js +2 -2
  16. package/dist/assets/themes/bootstrap/overrides/_links.scss +1 -1
  17. package/dist/assets/themes/classy/_theme.js +8 -6
  18. package/dist/assets/themes/classy/css/marketing/_sections.scss +1 -2
  19. package/dist/assets/themes/classy/js/hero-demo-form.js +3 -2
  20. package/dist/assets/themes/neobrutalism/_theme.js +5 -5
  21. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +1 -1
  22. package/dist/assets/themes/newsflash/_theme.js +6 -6
  23. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +1 -1
  24. package/dist/build.js +87 -111
  25. package/dist/cli.js +1 -1
  26. package/dist/commands/build.js +2 -2
  27. package/dist/commands/cdp/capture.js +2 -2
  28. package/dist/commands/cdp/quit.js +2 -2
  29. package/dist/commands/cdp/relaunch.js +2 -2
  30. package/dist/commands/cdp/theme.js +1 -1
  31. package/dist/commands/clean.js +2 -2
  32. package/dist/commands/deploy.js +4 -4
  33. package/dist/commands/finalize-release.js +4 -4
  34. package/dist/commands/install.js +3 -3
  35. package/dist/commands/launch.js +2 -2
  36. package/dist/commands/lib/deploy-precheck.js +3 -3
  37. package/dist/commands/lib/ensure-target.js +6 -6
  38. package/dist/commands/package.js +2 -2
  39. package/dist/commands/publish.js +2 -2
  40. package/dist/commands/release.js +3 -3
  41. package/dist/commands/runner.js +145 -48
  42. package/dist/commands/sign-windows.js +5 -5
  43. package/dist/commands/test.js +4 -4
  44. package/dist/commands/update.js +2 -2
  45. package/dist/commands/validate-certs.js +4 -4
  46. package/dist/commands/version.js +3 -3
  47. package/dist/defaults/.github/workflows/build.yml +2 -0
  48. package/dist/defaults/AGENTS.md +17 -8
  49. package/dist/defaults/config/omega.json5 +7 -7
  50. package/dist/defaults/hooks/build/post.js +1 -1
  51. package/dist/defaults/hooks/build/pre.js +1 -1
  52. package/dist/defaults/hooks/deploy/pre.js +1 -1
  53. package/dist/defaults/hooks/release/post.js +1 -1
  54. package/dist/defaults/hooks/release/pre.js +1 -1
  55. package/dist/defaults/src/assets/js/components/about/index.js +3 -5
  56. package/dist/defaults/src/assets/js/components/main/index.js +3 -5
  57. package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
  58. package/dist/defaults/src/integrations/context-menu/index.js +2 -2
  59. package/dist/defaults/src/integrations/menu/index.js +3 -3
  60. package/dist/defaults/src/integrations/tray/index.js +3 -3
  61. package/dist/defaults/src/main.js +3 -5
  62. package/dist/defaults/src/preload.js +3 -5
  63. package/dist/defaults/test/README.md +2 -2
  64. package/dist/gulp/main.js +9 -10
  65. package/dist/gulp/tasks/audit.js +7 -7
  66. package/dist/gulp/tasks/build-config.js +8 -8
  67. package/dist/gulp/tasks/bundle.js +16 -16
  68. package/dist/gulp/tasks/defaults.js +3 -3
  69. package/dist/gulp/tasks/distribute.js +2 -2
  70. package/dist/gulp/tasks/html.js +9 -9
  71. package/dist/gulp/tasks/package-quick.js +3 -3
  72. package/dist/gulp/tasks/package.js +3 -3
  73. package/dist/gulp/tasks/release.js +3 -3
  74. package/dist/gulp/tasks/sass.js +6 -6
  75. package/dist/gulp/tasks/serve.js +4 -4
  76. package/dist/hooks/notarize-artifacts.js +1 -1
  77. package/dist/hooks/notarize.js +1 -1
  78. package/dist/index.js +5 -8
  79. package/dist/lib/_environment-mixin.js +50 -0
  80. package/dist/lib/_lifecycle-mixin.js +45 -0
  81. package/dist/lib/analytics.js +33 -35
  82. package/dist/lib/app-state.js +14 -14
  83. package/dist/lib/auth-flow.js +18 -18
  84. package/dist/lib/auth-persistence.js +12 -12
  85. package/dist/lib/auth.js +421 -0
  86. package/dist/lib/auto-updater.js +49 -49
  87. package/dist/lib/context-menu.js +13 -13
  88. package/dist/lib/context.js +19 -19
  89. package/dist/lib/deep-link.js +34 -34
  90. package/dist/lib/fontawesome.js +5 -5
  91. package/dist/lib/ipc.js +4 -4
  92. package/dist/lib/menu.js +25 -25
  93. package/dist/lib/protocol.js +5 -5
  94. package/dist/lib/remote-config.js +22 -22
  95. package/dist/lib/remote-scripts.js +21 -21
  96. package/dist/lib/restart-manager/index.js +28 -28
  97. package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
  98. package/dist/lib/sign-helpers/sign-events.js +1 -1
  99. package/dist/lib/startup.js +18 -13
  100. package/dist/lib/storage.js +10 -10
  101. package/dist/lib/templating.js +16 -16
  102. package/dist/lib/theme.js +10 -10
  103. package/dist/lib/tray.js +27 -27
  104. package/dist/lib/usage.js +11 -11
  105. package/dist/lib/window-manager.js +26 -26
  106. package/dist/main.js +398 -483
  107. package/dist/preload.js +236 -176
  108. package/dist/renderer.js +417 -391
  109. package/dist/runner/job-started.js +1 -1
  110. package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
  111. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
  112. package/dist/test/fixtures/consumer-app/src/main.js +5 -7
  113. package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
  114. package/dist/test/harness/boot-entry.js +22 -20
  115. package/dist/test/harness/main-entry.js +31 -30
  116. package/dist/test/harness/renderer-entry.js +5 -5
  117. package/dist/test/harness/renderer-preload.js +137 -141
  118. package/dist/test/index.js +10 -10
  119. package/dist/test/runner.js +2 -2
  120. package/dist/test/runners/boot.js +7 -6
  121. package/dist/test/runners/electron.js +3 -2
  122. package/dist/test/runners/render-event.js +2 -2
  123. package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
  124. package/dist/test/suites/boot/restart-manager.test.js +2 -2
  125. package/dist/test/suites/boot/storage-bundled.test.js +5 -5
  126. package/dist/test/suites/boot/theme.test.js +13 -13
  127. package/dist/test/suites/build/audit.test.js +1 -1
  128. package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
  129. package/dist/test/suites/build/boot-fixture.test.js +2 -2
  130. package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
  131. package/dist/test/suites/build/brand-scss.test.js +1 -1
  132. package/dist/test/suites/build/build-json-bake.test.js +1 -1
  133. package/dist/test/suites/build/cli.test.js +2 -2
  134. package/dist/test/suites/build/config-schema.test.js +5 -5
  135. package/dist/test/suites/build/defaults-scaffold.test.js +2 -2
  136. package/dist/test/suites/build/deploy-hook.test.js +3 -3
  137. package/dist/test/suites/build/ensure-target.test.js +2 -2
  138. package/dist/test/suites/build/env-delivery.test.js +2 -2
  139. package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
  140. package/dist/test/suites/build/exports.test.js +9 -8
  141. package/dist/test/suites/build/get-config.test.js +4 -4
  142. package/dist/test/suites/build/manifest-deps.test.js +1 -1
  143. package/dist/test/suites/build/merge-line-files.test.js +1 -1
  144. package/dist/test/suites/build/omega-shell.test.js +34 -2
  145. package/dist/test/suites/build/omega.test.js +350 -0
  146. package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
  147. package/dist/test/suites/build/runner.test.js +612 -5
  148. package/dist/test/suites/build/sentry.test.js +2 -2
  149. package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
  150. package/dist/test/suites/build/templating.test.js +3 -3
  151. package/dist/test/suites/build/test-stealth.test.js +7 -9
  152. package/dist/test/suites/build/url-helpers.test.js +55 -56
  153. package/dist/test/suites/build/validate-config.test.js +2 -2
  154. package/dist/test/suites/build/wave5-pins.test.js +2 -2
  155. package/dist/test/suites/main/analytics.test.js +59 -59
  156. package/dist/test/suites/main/app-state.test.js +66 -66
  157. package/dist/test/suites/main/auth-flow.test.js +41 -41
  158. package/dist/test/suites/main/auth-persistence.test.js +54 -43
  159. package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
  160. package/dist/test/suites/main/auth.test.js +336 -0
  161. package/dist/test/suites/main/auto-updater.test.js +134 -134
  162. package/dist/test/suites/main/boot-sequence.test.js +37 -49
  163. package/dist/test/suites/main/context-menu.test.js +51 -50
  164. package/dist/test/suites/main/context.test.js +25 -25
  165. package/dist/test/suites/main/deep-link.test.js +74 -74
  166. package/dist/test/suites/main/fontawesome.test.js +27 -27
  167. package/dist/test/suites/main/ipc.test.js +35 -35
  168. package/dist/test/suites/main/menu.test.js +101 -100
  169. package/dist/test/suites/main/protocol.test.js +19 -19
  170. package/dist/test/suites/main/remote-config.test.js +63 -63
  171. package/dist/test/suites/main/remote-scripts.test.js +103 -103
  172. package/dist/test/suites/main/request.test.js +71 -0
  173. package/dist/test/suites/main/restart-manager.test.js +33 -33
  174. package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
  175. package/dist/test/suites/main/startup.test.js +26 -26
  176. package/dist/test/suites/main/stealth-window.test.js +1 -1
  177. package/dist/test/suites/main/storage.test.js +25 -25
  178. package/dist/test/suites/main/theme.test.js +34 -34
  179. package/dist/test/suites/main/tray.test.js +79 -79
  180. package/dist/test/suites/main/url-helpers.test.js +133 -133
  181. package/dist/test/suites/main/usage.test.js +25 -25
  182. package/dist/test/suites/main/window-bounds.test.js +27 -27
  183. package/dist/test/suites/main/window-manager.test.js +44 -44
  184. package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
  185. package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
  186. package/dist/test/suites/renderer/round-trip.test.js +3 -3
  187. package/dist/test/suites/renderer/tooltips.test.js +15 -15
  188. package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +27 -7
  189. package/dist/test/utils/extended-mode-warning.js +1 -1
  190. package/dist/utils/boot-harness.js +56 -0
  191. package/dist/utils/mode-helpers.js +2 -15
  192. package/dist/utils/ship-keys.js +3 -3
  193. package/dist/utils/signing-status.js +51 -0
  194. package/dist/utils/test-events.js +7 -0
  195. package/dist/utils/test-stealth.js +6 -6
  196. package/dist/utils/url-helpers.js +52 -42
  197. package/dist/utils/user-agent.js +44 -0
  198. package/dist/vendor/account/engine.js +3 -3
  199. package/dist/vendor/account/index.js +14 -45
  200. package/dist/vendor/account/resolve-account.js +44 -0
  201. package/dist/vendor/account/schema.js +1 -1
  202. package/dist/vendor/account/user.js +99 -0
  203. package/dist/vendor/config/client-config.js +1 -1
  204. package/dist/vendor/config/environment.js +11 -30
  205. package/dist/vendor/config/index.js +13 -12
  206. package/dist/vendor/config/load.js +1 -2
  207. package/dist/vendor/config/platforms.js +1 -1
  208. package/dist/vendor/config/repo.js +24 -0
  209. package/dist/vendor/config/retired-keys.js +2 -2
  210. package/dist/vendor/config/schema.js +5 -8
  211. package/dist/vendor/config/site-global.js +2 -3
  212. package/dist/vendor/config/validate.js +1 -2
  213. package/dist/vendor/config/winback.js +1 -1
  214. package/dist/vendor/devkit/actions-secrets.js +1 -1
  215. package/dist/vendor/devkit/attach-log-file.js +1 -1
  216. package/dist/vendor/devkit/brand-version.js +162 -1
  217. package/dist/vendor/devkit/build-json.js +1 -1
  218. package/dist/vendor/devkit/cli-router.js +3 -4
  219. package/dist/vendor/devkit/defaults-engine.js +9 -11
  220. package/dist/vendor/devkit/deploy.js +64 -4
  221. package/dist/vendor/devkit/git-remote.js +78 -1
  222. package/dist/vendor/devkit/local.js +53 -3
  223. package/dist/vendor/devkit/lockfile.js +127 -0
  224. package/dist/vendor/devkit/merge-line-files.js +2 -3
  225. package/dist/vendor/devkit/pack-local.js +4 -7
  226. package/dist/vendor/devkit/preludes/origin-heal.js +35 -49
  227. package/dist/vendor/devkit/target-secrets.js +34 -45
  228. package/dist/vendor/devkit/test/runner-core.js +6 -6
  229. package/dist/vendor/monitoring/env.js +2 -2
  230. package/dist/vendor/monitoring/index.js +1 -1
  231. package/dist/vendor/monitoring/main.js +1 -1
  232. package/dist/vendor/monitoring/preload.js +1 -1
  233. package/dist/vendor/monitoring/renderer.js +1 -1
  234. package/docs/analytics.md +8 -8
  235. package/docs/app-state.md +19 -19
  236. package/docs/audit.md +4 -4
  237. package/docs/{client-bridge.md → auth.md} +88 -73
  238. package/docs/auto-updater.md +8 -8
  239. package/docs/boot-sequence.md +11 -6
  240. package/docs/build-system.md +1 -1
  241. package/docs/cdp-debugging.md +1 -1
  242. package/docs/common-mistakes.md +7 -7
  243. package/docs/config-schema.md +1 -1
  244. package/docs/context-menu.md +13 -13
  245. package/docs/context.md +11 -11
  246. package/docs/css.md +3 -9
  247. package/docs/deep-link.md +25 -25
  248. package/docs/environment-detection.md +16 -16
  249. package/docs/fontawesome.md +7 -5
  250. package/docs/hooks.md +8 -8
  251. package/docs/index.md +39 -28
  252. package/docs/ipc.md +10 -10
  253. package/docs/lib-modules.md +9 -9
  254. package/docs/logging.md +12 -14
  255. package/docs/menu.md +18 -18
  256. package/docs/releasing.md +4 -2
  257. package/docs/remote-config.md +9 -9
  258. package/docs/remote-scripts.md +12 -12
  259. package/docs/restart-manager.md +8 -8
  260. package/docs/runner.md +12 -10
  261. package/docs/sentry.md +4 -4
  262. package/docs/shared/analytics.md +1 -1
  263. package/docs/shared/brands.md +1 -1
  264. package/docs/shared/breaking-changes.md +79 -13
  265. package/docs/shared/config.md +24 -21
  266. package/docs/shared/deploys.md +30 -7
  267. package/docs/shared/local-dev.md +5 -3
  268. package/docs/shared/logging.md +1 -1
  269. package/docs/shared/monitoring.md +5 -5
  270. package/docs/shared/testing.md +2 -2
  271. package/docs/shared/theming.md +1 -1
  272. package/docs/shared/translation.md +19 -10
  273. package/docs/signing.md +1 -1
  274. package/docs/startup.md +16 -16
  275. package/docs/storage.md +11 -11
  276. package/docs/templating.md +3 -3
  277. package/docs/test-boot-layer.md +12 -12
  278. package/docs/test-framework.md +17 -17
  279. package/docs/themes.md +7 -7
  280. package/docs/tooltips.md +2 -2
  281. package/docs/tray.md +31 -31
  282. package/docs/usage.md +7 -7
  283. package/docs/verts.md +1 -1
  284. package/docs/windows.md +22 -22
  285. package/package.json +3 -4
  286. package/dist/lib/client-bridge.js +0 -374
  287. package/dist/lib/logger.js +0 -4
  288. package/dist/test/suites/build/manager.test.js +0 -213
  289. package/dist/test/suites/main/client-bridge.test.js +0 -262
@@ -14,13 +14,13 @@ module.exports = defineCases({
14
14
  layer: 'main',
15
15
  description: 'tray (main)',
16
16
  cleanup: (ctx) => {
17
- ctx.manager.tray.destroy();
17
+ ctx.omega.tray.destroy();
18
18
  },
19
19
  tests: [
20
20
  {
21
21
  name: 'initialize ran (enabled by default)',
22
22
  run: (ctx) => {
23
- ctx.expect(ctx.manager.tray._initialized).toBe(true);
23
+ ctx.expect(ctx.omega.tray._initialized).toBe(true);
24
24
  },
25
25
  },
26
26
  {
@@ -29,7 +29,7 @@ module.exports = defineCases({
29
29
  // With or without a consumer file, items is a non-empty array — consumer file
30
30
  // declares what it wants; absent consumer → @omega.js/desktop ships its default template
31
31
  // (title, open, check-for-updates, quit, ...).
32
- const items = ctx.manager.tray.getItems();
32
+ const items = ctx.omega.tray.getItems();
33
33
  ctx.expect(Array.isArray(items)).toBe(true);
34
34
  ctx.expect(items.length).toBeGreaterThan(0);
35
35
  },
@@ -37,41 +37,41 @@ module.exports = defineCases({
37
37
  {
38
38
  name: 'define() runs the builder fn and stores items',
39
39
  run: (ctx) => {
40
- ctx.manager.tray.define(({ tray }) => {
40
+ ctx.omega.tray.define(({ tray }) => {
41
41
  tray.tooltip('TestApp');
42
42
  tray.item({ label: 'Hello', click: () => {} });
43
43
  tray.separator();
44
44
  tray.item({ label: 'World', click: () => {} });
45
45
  });
46
46
 
47
- const items = ctx.manager.tray.getItems();
47
+ const items = ctx.omega.tray.getItems();
48
48
  ctx.expect(items.length).toBe(3);
49
49
  ctx.expect(items[0].label).toBe('Hello');
50
50
  ctx.expect(items[1].type).toBe('separator');
51
51
  ctx.expect(items[2].label).toBe('World');
52
- ctx.expect(ctx.manager.tray.getTooltip()).toBe('TestApp');
52
+ ctx.expect(ctx.omega.tray.getTooltip()).toBe('TestApp');
53
53
  },
54
54
  },
55
55
  {
56
56
  name: 'define() throws on non-function input',
57
57
  run: (ctx) => {
58
- ctx.expect(() => ctx.manager.tray.define(null)).toThrow(/must be a function/);
59
- ctx.expect(() => ctx.manager.tray.define('nope')).toThrow(/must be a function/);
58
+ ctx.expect(() => ctx.omega.tray.define(null)).toThrow(/must be a function/);
59
+ ctx.expect(() => ctx.omega.tray.define('nope')).toThrow(/must be a function/);
60
60
  },
61
61
  },
62
62
  {
63
63
  name: 'define() replaces previous items (not append)',
64
64
  run: (ctx) => {
65
- ctx.manager.tray.define(({ tray }) => {
65
+ ctx.omega.tray.define(({ tray }) => {
66
66
  tray.item({ label: 'First' });
67
67
  });
68
- ctx.expect(ctx.manager.tray.getItems().length).toBe(1);
68
+ ctx.expect(ctx.omega.tray.getItems().length).toBe(1);
69
69
 
70
- ctx.manager.tray.define(({ tray }) => {
70
+ ctx.omega.tray.define(({ tray }) => {
71
71
  tray.item({ label: 'Second' });
72
72
  tray.item({ label: 'Third' });
73
73
  });
74
- const items = ctx.manager.tray.getItems();
74
+ const items = ctx.omega.tray.getItems();
75
75
  ctx.expect(items.length).toBe(2);
76
76
  ctx.expect(items[0].label).toBe('Second');
77
77
  },
@@ -79,46 +79,46 @@ module.exports = defineCases({
79
79
  {
80
80
  name: 'addItem appends without nuking existing items',
81
81
  run: (ctx) => {
82
- ctx.manager.tray.define(({ tray }) => {
82
+ ctx.omega.tray.define(({ tray }) => {
83
83
  tray.item({ label: 'A' });
84
84
  tray.item({ label: 'B' });
85
85
  });
86
- ctx.manager.tray.addItem({ label: 'C' });
87
- const labels = ctx.manager.tray.getItems().map((i) => i.label);
86
+ ctx.omega.tray.addItem({ label: 'C' });
87
+ const labels = ctx.omega.tray.getItems().map((i) => i.label);
88
88
  ctx.expect(labels).toEqual(['A', 'B', 'C']);
89
89
  },
90
90
  },
91
91
  {
92
92
  name: 'clearItems empties the list',
93
93
  run: (ctx) => {
94
- ctx.manager.tray.addItem({ label: 'X' });
95
- ctx.manager.tray.clearItems();
96
- ctx.expect(ctx.manager.tray.getItems()).toEqual([]);
94
+ ctx.omega.tray.addItem({ label: 'X' });
95
+ ctx.omega.tray.clearItems();
96
+ ctx.expect(ctx.omega.tray.getItems()).toEqual([]);
97
97
  },
98
98
  },
99
99
  {
100
100
  name: 'setIcon / setTooltip update state',
101
101
  run: (ctx) => {
102
- ctx.manager.tray.setIcon('/tmp/some-icon.png');
103
- ctx.manager.tray.setTooltip('Hover me');
104
- ctx.expect(ctx.manager.tray.getIcon()).toBe('/tmp/some-icon.png');
105
- ctx.expect(ctx.manager.tray.getTooltip()).toBe('Hover me');
102
+ ctx.omega.tray.setIcon('/tmp/some-icon.png');
103
+ ctx.omega.tray.setTooltip('Hover me');
104
+ ctx.expect(ctx.omega.tray.getIcon()).toBe('/tmp/some-icon.png');
105
+ ctx.expect(ctx.omega.tray.getTooltip()).toBe('Hover me');
106
106
  },
107
107
  },
108
108
  {
109
109
  name: 'dynamic label functions are evaluated on refresh',
110
110
  run: (ctx) => {
111
111
  let count = 0;
112
- ctx.manager.tray.define(({ tray }) => {
112
+ ctx.omega.tray.define(({ tray }) => {
113
113
  tray.item({ label: () => `Count: ${count}` });
114
114
  });
115
115
 
116
116
  // Resolve internally to confirm the fn is called.
117
- const resolved1 = ctx.manager.tray._resolveItem(ctx.manager.tray.getItems()[0]);
117
+ const resolved1 = ctx.omega.tray._resolveItem(ctx.omega.tray.getItems()[0]);
118
118
  ctx.expect(resolved1.label).toBe('Count: 0');
119
119
 
120
120
  count = 5;
121
- const resolved2 = ctx.manager.tray._resolveItem(ctx.manager.tray.getItems()[0]);
121
+ const resolved2 = ctx.omega.tray._resolveItem(ctx.omega.tray.getItems()[0]);
122
122
  ctx.expect(resolved2.label).toBe('Count: 5');
123
123
  },
124
124
  },
@@ -126,11 +126,11 @@ module.exports = defineCases({
126
126
  name: 'click handlers are wrapped to catch errors',
127
127
  run: (ctx) => {
128
128
  let called = false;
129
- ctx.manager.tray.define(({ tray }) => {
129
+ ctx.omega.tray.define(({ tray }) => {
130
130
  tray.item({ label: 'Boom', click: () => { called = true; throw new Error('boom'); } });
131
131
  });
132
132
 
133
- const resolved = ctx.manager.tray._resolveItem(ctx.manager.tray.getItems()[0]);
133
+ const resolved = ctx.omega.tray._resolveItem(ctx.omega.tray.getItems()[0]);
134
134
  ctx.expect(typeof resolved.click).toBe('function');
135
135
 
136
136
  // Invoking the wrapped click must NOT throw, even though the handler does.
@@ -141,17 +141,17 @@ module.exports = defineCases({
141
141
  {
142
142
  name: 'separator descriptor resolves to {type:"separator"}',
143
143
  run: (ctx) => {
144
- ctx.manager.tray.define(({ tray }) => {
144
+ ctx.omega.tray.define(({ tray }) => {
145
145
  tray.separator();
146
146
  });
147
- const resolved = ctx.manager.tray._resolveItem(ctx.manager.tray.getItems()[0]);
147
+ const resolved = ctx.omega.tray._resolveItem(ctx.omega.tray.getItems()[0]);
148
148
  ctx.expect(resolved).toEqual({ type: 'separator' });
149
149
  },
150
150
  },
151
151
  {
152
152
  name: 'submenu items are recursively resolved',
153
153
  run: (ctx) => {
154
- ctx.manager.tray.define(({ tray }) => {
154
+ ctx.omega.tray.define(({ tray }) => {
155
155
  tray.item({
156
156
  label: 'Parent',
157
157
  submenu: [
@@ -160,7 +160,7 @@ module.exports = defineCases({
160
160
  ],
161
161
  });
162
162
  });
163
- const resolved = ctx.manager.tray._resolveItem(ctx.manager.tray.getItems()[0]);
163
+ const resolved = ctx.omega.tray._resolveItem(ctx.omega.tray.getItems()[0]);
164
164
  ctx.expect(resolved.label).toBe('Parent');
165
165
  ctx.expect(Array.isArray(resolved.submenu)).toBe(true);
166
166
  ctx.expect(resolved.submenu[0].label).toBe('Dyn child');
@@ -174,22 +174,22 @@ module.exports = defineCases({
174
174
  // We don't assert isRendered() because @omega.js/desktop auto-resolves an icon at init time, so
175
175
  // tray._tray may already exist from earlier — refresh() with null _icon just
176
176
  // skips the re-render but leaves the existing Tray instance alone.
177
- ctx.manager.tray._icon = null;
177
+ ctx.omega.tray._icon = null;
178
178
  // Should not throw.
179
- ctx.manager.tray.refresh();
179
+ ctx.omega.tray.refresh();
180
180
  },
181
181
  },
182
182
  {
183
- name: 'consumer function receives manager + tray builder (incl. id-path API)',
183
+ name: 'consumer function receives omega + tray builder (incl. id-path API)',
184
184
  run: (ctx) => {
185
- let receivedManager;
185
+ let receivedOmega;
186
186
  let receivedTray;
187
- ctx.manager.tray.define((arg) => {
188
- receivedManager = arg.manager;
187
+ ctx.omega.tray.define((arg) => {
188
+ receivedOmega = arg.omega;
189
189
  receivedTray = arg.tray;
190
190
  arg.tray.item({ label: 'probe' });
191
191
  });
192
- ctx.expect(receivedManager).toBe(ctx.manager);
192
+ ctx.expect(receivedOmega).toBe(ctx.omega);
193
193
  ctx.expect(typeof receivedTray.icon).toBe('function');
194
194
  ctx.expect(typeof receivedTray.tooltip).toBe('function');
195
195
  ctx.expect(typeof receivedTray.item).toBe('function');
@@ -205,38 +205,38 @@ module.exports = defineCases({
205
205
  {
206
206
  name: 'useDefaults() ships an id-tagged template (open, quit, ...)',
207
207
  run: (ctx) => {
208
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
209
- ctx.expect(ctx.manager.tray.find('open')).toBeTruthy();
210
- ctx.expect(ctx.manager.tray.find('quit')).toBeTruthy();
211
- ctx.expect(ctx.manager.tray.find('check-for-updates')).toBeTruthy();
208
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
209
+ ctx.expect(ctx.omega.tray.find('open')).toBeTruthy();
210
+ ctx.expect(ctx.omega.tray.find('quit')).toBeTruthy();
211
+ ctx.expect(ctx.omega.tray.find('check-for-updates')).toBeTruthy();
212
212
  },
213
213
  },
214
214
  {
215
215
  name: 'tray.update patches an item by id-path',
216
216
  run: (ctx) => {
217
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
218
- const ok = ctx.manager.tray.update('quit', { label: 'GOODBYE' });
217
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
218
+ const ok = ctx.omega.tray.update('quit', { label: 'GOODBYE' });
219
219
  ctx.expect(ok).toBe(true);
220
- ctx.expect(ctx.manager.tray.find('quit').label).toBe('GOODBYE');
220
+ ctx.expect(ctx.omega.tray.find('quit').label).toBe('GOODBYE');
221
221
  },
222
222
  },
223
223
  {
224
224
  name: 'tray.remove deletes an item by id-path',
225
225
  run: (ctx) => {
226
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
227
- ctx.expect(ctx.manager.tray.find('check-for-updates')).toBeTruthy();
228
- const ok = ctx.manager.tray.remove('check-for-updates');
226
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
227
+ ctx.expect(ctx.omega.tray.find('check-for-updates')).toBeTruthy();
228
+ const ok = ctx.omega.tray.remove('check-for-updates');
229
229
  ctx.expect(ok).toBe(true);
230
- ctx.expect(ctx.manager.tray.find('check-for-updates')).toBe(null);
230
+ ctx.expect(ctx.omega.tray.find('check-for-updates')).toBe(null);
231
231
  },
232
232
  },
233
233
  {
234
234
  name: 'tray.insertAfter splices a new sibling',
235
235
  run: (ctx) => {
236
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
237
- const ok = ctx.manager.tray.insertAfter('open', { id: 'probe', label: 'PROBE' });
236
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
237
+ const ok = ctx.omega.tray.insertAfter('open', { id: 'probe', label: 'PROBE' });
238
238
  ctx.expect(ok).toBe(true);
239
- const items = ctx.manager.tray.getItems();
239
+ const items = ctx.omega.tray.getItems();
240
240
  const openIdx = items.findIndex((i) => i.id === 'open');
241
241
  ctx.expect(items[openIdx + 1].id).toBe('probe');
242
242
  },
@@ -244,32 +244,32 @@ module.exports = defineCases({
244
244
  {
245
245
  name: 'tray.hide / tray.enable / tray.show are sugar over update',
246
246
  run: (ctx) => {
247
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
248
- ctx.manager.tray.hide('quit');
249
- ctx.expect(ctx.manager.tray.find('quit').visible).toBe(false);
250
- ctx.manager.tray.show('quit');
251
- ctx.expect(ctx.manager.tray.find('quit').visible).toBe(true);
252
- ctx.manager.tray.enable('quit', false);
253
- ctx.expect(ctx.manager.tray.find('quit').enabled).toBe(false);
254
- ctx.manager.tray.enable('quit');
255
- ctx.expect(ctx.manager.tray.find('quit').enabled).toBe(true);
247
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
248
+ ctx.omega.tray.hide('quit');
249
+ ctx.expect(ctx.omega.tray.find('quit').visible).toBe(false);
250
+ ctx.omega.tray.show('quit');
251
+ ctx.expect(ctx.omega.tray.find('quit').visible).toBe(true);
252
+ ctx.omega.tray.enable('quit', false);
253
+ ctx.expect(ctx.omega.tray.find('quit').enabled).toBe(false);
254
+ ctx.omega.tray.enable('quit');
255
+ ctx.expect(ctx.omega.tray.find('quit').enabled).toBe(true);
256
256
  },
257
257
  },
258
258
  {
259
259
  name: 'tray.has reports presence',
260
260
  run: (ctx) => {
261
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
262
- ctx.expect(ctx.manager.tray.has('quit')).toBe(true);
263
- ctx.expect(ctx.manager.tray.has('does-not-exist')).toBe(false);
261
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
262
+ ctx.expect(ctx.omega.tray.has('quit')).toBe(true);
263
+ ctx.expect(ctx.omega.tray.has('does-not-exist')).toBe(false);
264
264
  },
265
265
  },
266
266
  {
267
267
  name: 'tray.insertBefore splices a new sibling',
268
268
  run: (ctx) => {
269
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
270
- const ok = ctx.manager.tray.insertBefore('quit', { id: 'before-quit', label: 'BEFORE' });
269
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
270
+ const ok = ctx.omega.tray.insertBefore('quit', { id: 'before-quit', label: 'BEFORE' });
271
271
  ctx.expect(ok).toBe(true);
272
- const items = ctx.manager.tray.getItems();
272
+ const items = ctx.omega.tray.getItems();
273
273
  const quitIdx = items.findIndex((i) => i.id === 'quit');
274
274
  ctx.expect(items[quitIdx - 1].id).toBe('before-quit');
275
275
  },
@@ -277,42 +277,42 @@ module.exports = defineCases({
277
277
  {
278
278
  name: 'tray.appendTo pushes into a submenu (creates one if absent)',
279
279
  run: (ctx) => {
280
- ctx.manager.tray.define(({ tray }) => {
280
+ ctx.omega.tray.define(({ tray }) => {
281
281
  tray.item({ id: 'parent', label: 'Parent' });
282
282
  });
283
- const ok = ctx.manager.tray.appendTo('parent', { id: 'child', label: 'Child' });
283
+ const ok = ctx.omega.tray.appendTo('parent', { id: 'child', label: 'Child' });
284
284
  ctx.expect(ok).toBe(true);
285
- const parent = ctx.manager.tray.find('parent');
285
+ const parent = ctx.omega.tray.find('parent');
286
286
  ctx.expect(Array.isArray(parent.submenu)).toBe(true);
287
287
  ctx.expect(parent.submenu[0].id).toBe('child');
288
288
  // Resolves a nested id-path too:
289
- ctx.expect(ctx.manager.tray.find('parent/child').label).toBe('Child');
289
+ ctx.expect(ctx.omega.tray.find('parent/child').label).toBe('Child');
290
290
  },
291
291
  },
292
292
  {
293
293
  name: 'tray submenu items resolvable by parent/child path',
294
294
  run: (ctx) => {
295
- ctx.manager.tray.define(({ tray }) => {
295
+ ctx.omega.tray.define(({ tray }) => {
296
296
  tray.item({ id: 'account', label: 'Account', submenu: [
297
297
  { id: 'sign-out', label: 'Sign out' },
298
298
  ]});
299
299
  });
300
- ctx.expect(ctx.manager.tray.find('account/sign-out').label).toBe('Sign out');
301
- ctx.manager.tray.update('account/sign-out', { label: 'Bye' });
302
- ctx.expect(ctx.manager.tray.find('account/sign-out').label).toBe('Bye');
300
+ ctx.expect(ctx.omega.tray.find('account/sign-out').label).toBe('Sign out');
301
+ ctx.omega.tray.update('account/sign-out', { label: 'Bye' });
302
+ ctx.expect(ctx.omega.tray.find('account/sign-out').label).toBe('Bye');
303
303
  },
304
304
  },
305
305
  {
306
306
  name: 'auto-updater status updates the tray check-for-updates label',
307
307
  run: (ctx) => {
308
- ctx.manager.tray.define(({ tray }) => { tray.useDefaults(); });
308
+ ctx.omega.tray.define(({ tray }) => { tray.useDefaults(); });
309
309
 
310
- ctx.manager.autoUpdater._state = {
310
+ ctx.omega.autoUpdater._state = {
311
311
  code: 'downloaded', version: '7.0.0', percent: 100, error: null, downloadedAt: Date.now(), lastCheckedAt: null,
312
312
  };
313
- ctx.manager.autoUpdater._updateTrayItem();
313
+ ctx.omega.autoUpdater._updateTrayItem();
314
314
 
315
- const item = ctx.manager.tray.find('check-for-updates');
315
+ const item = ctx.omega.tray.find('check-for-updates');
316
316
  ctx.expect(item.label).toContain('Restart to Update');
317
317
  ctx.expect(item.label).toContain('7.0.0');
318
318
  ctx.expect(item.enabled).toBe(true);