@dxos/plugin-native 0.7.5-labs.a279d8c → 0.7.5-labs.e27f9b9

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.
@@ -11,7 +11,7 @@ var NativePlugin = () => definePlugin(meta, [
11
11
  id: `${meta.id}/module/startup`,
12
12
  activatesOn: Events.Startup,
13
13
  activate: async (context) => {
14
- const { initializeNativeApp } = await import("./initialize-6OEQRMUZ.mjs");
14
+ const { initializeNativeApp } = await import("./initialize-XWHZ2OWK.mjs");
15
15
  await initializeNativeApp(context);
16
16
  return [];
17
17
  }
@@ -1,5 +1,5 @@
1
1
  // packages/plugins/experimental/plugin-native/src/initialize.ts
2
- import { NavigationAction, SettingsAction, LayoutAction, createIntent, Capabilities } from "@dxos/app-framework";
2
+ import { SettingsAction, LayoutAction, createIntent, Capabilities } from "@dxos/app-framework";
3
3
  import { HELP_PLUGIN } from "@dxos/plugin-help";
4
4
  import { COMMANDS_DIALOG } from "@dxos/plugin-navtree";
5
5
  import { safeParseJson } from "@dxos/util";
@@ -15,10 +15,16 @@ var loadSocketSupplyModules = async () => {
15
15
  /* @vite-ignore */
16
16
  windowModule
17
17
  );
18
+ const osModule = "socket:os";
19
+ const socketOs = await import(
20
+ /* @vite-ignore */
21
+ osModule
22
+ );
18
23
  const { meta_title: appName } = app.config;
19
24
  return {
20
25
  app,
21
26
  socketWindow,
27
+ socketOs,
22
28
  appName
23
29
  };
24
30
  };
@@ -76,10 +82,12 @@ var setupMenuItemListener = (dispatch, app) => {
76
82
  const id = `${event.detail.parent}:${event.detail.title}`;
77
83
  switch (id) {
78
84
  case "App Name:Search commands": {
79
- void dispatch(createIntent(LayoutAction.SetLayout, {
80
- element: "dialog",
81
- component: COMMANDS_DIALOG,
82
- dialogBlockAlign: "start"
85
+ void dispatch(createIntent(LayoutAction.UpdateDialog, {
86
+ part: "dialog",
87
+ subject: COMMANDS_DIALOG,
88
+ options: {
89
+ blockAlign: "start"
90
+ }
83
91
  }));
84
92
  break;
85
93
  }
@@ -88,9 +96,12 @@ var setupMenuItemListener = (dispatch, app) => {
88
96
  break;
89
97
  }
90
98
  case "App Name:Show shortcuts": {
91
- void dispatch(createIntent(LayoutAction.SetLayout, {
92
- element: "dialog",
93
- component: `${HELP_PLUGIN}/Shortcuts`
99
+ void dispatch(createIntent(LayoutAction.UpdateDialog, {
100
+ part: "dialog",
101
+ subject: `${HELP_PLUGIN}/Shortcuts`,
102
+ options: {
103
+ blockAlign: "center"
104
+ }
94
105
  }));
95
106
  break;
96
107
  }
@@ -109,17 +120,12 @@ var setupApplicationUrlListener = (app, dispatch) => {
109
120
  if (location.includes("InvitationCode")) {
110
121
  window.location.href = location;
111
122
  } else {
112
- void dispatch(createIntent(
113
- NavigationAction.Open,
114
- // TODO(thure): what is `location` and is this right?
115
- {
116
- activeParts: {
117
- main: [
118
- location
119
- ]
120
- }
121
- }
122
- ));
123
+ void dispatch(createIntent(LayoutAction.Open, {
124
+ part: "main",
125
+ subject: [
126
+ location
127
+ ]
128
+ }));
123
129
  }
124
130
  });
125
131
  };
@@ -127,17 +133,21 @@ var setupGlobalHotkey = async (socketWindow, appWindow, dispatch) => {
127
133
  const binding = await socketWindow.hotkey.bind("cmd + k");
128
134
  binding.addEventListener("hotkey", () => {
129
135
  appWindow.restore();
130
- void dispatch(createIntent(LayoutAction.SetLayout, {
131
- element: "dialog",
132
- component: COMMANDS_DIALOG,
133
- dialogBlockAlign: "start"
136
+ void dispatch(createIntent(LayoutAction.UpdateDialog, {
137
+ part: "dialog",
138
+ subject: COMMANDS_DIALOG,
139
+ options: {
140
+ blockAlign: "start"
141
+ }
134
142
  }));
135
143
  });
136
144
  };
137
145
  var initializeNativeApp = async (context) => {
138
- const { app, socketWindow, appName } = await loadSocketSupplyModules();
146
+ const { app, socketWindow, socketOs, appName } = await loadSocketSupplyModules();
139
147
  const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
140
- if (process.platform === "darwin" || process.platform === "win32") {
148
+ const platform = socketOs.platform();
149
+ document.body.setAttribute("data-platform", platform);
150
+ if (platform === "darwin" || platform === "win32") {
141
151
  await configureDesktopWindowSizing(app);
142
152
  await configureSystemMenu(app, appName);
143
153
  setupMenuItemListener(dispatch, app);
@@ -148,4 +158,4 @@ var initializeNativeApp = async (context) => {
148
158
  export {
149
159
  initializeNativeApp
150
160
  };
151
- //# sourceMappingURL=initialize-6OEQRMUZ.mjs.map
161
+ //# sourceMappingURL=initialize-XWHZ2OWK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/initialize.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type { PluginsContext } from '@dxos/app-framework';\nimport { SettingsAction, LayoutAction, createIntent, Capabilities } from '@dxos/app-framework';\nimport { HELP_PLUGIN } from '@dxos/plugin-help';\nimport { COMMANDS_DIALOG } from '@dxos/plugin-navtree';\nimport { safeParseJson } from '@dxos/util';\n\n// TODO(burdon): Reconcile with other properties.\nconst KEY_WINDOW_SIZE = 'dxos.org/plugin/native/window-size';\n\n/**\n * Native code for socketsupply app.\n * https://www.npmjs.com/package/@socketsupply/socket\n * https://github.com/socketsupply/socket-examples\n */\n\nconst loadSocketSupplyModules = async () => {\n // SocketSupply implements the dynamic import.\n const module = 'socket:application';\n const app = await import(/* @vite-ignore */ module);\n const windowModule = 'socket:window';\n const socketWindow = await import(/* @vite-ignore */ windowModule);\n const osModule = 'socket:os';\n const socketOs = await import(/* @vite-ignore */ osModule);\n const { meta_title: appName } = app.config;\n\n return { app, socketWindow, socketOs, appName };\n};\n\nconst configureDesktopWindowSizing = async (app: any) => {\n const { width, height } = safeParseJson<{ width?: number; height?: number }>(\n localStorage.getItem(KEY_WINDOW_SIZE),\n {},\n );\n\n if (width && height) {\n const appWindow = await app.getCurrentWindow();\n await appWindow.setSize({ width, height });\n }\n\n window.addEventListener('resize', async () => {\n const appWindow = await app.getCurrentWindow();\n const { width, height } = appWindow.getSize();\n localStorage.setItem(KEY_WINDOW_SIZE, JSON.stringify({ width, height }));\n });\n};\n\nconst configureSystemMenu = async (app: any, appName: string) => {\n const itemsMac = `\n Hide ${appName}: h + CommandOrControl\n Hide Others: h + Control + Meta\n ---\n `;\n\n // TODO(mjamesderocher) Change menu names to use translations\n const menu = `\n App Name:\n About ${appName}: _\n Settings...: , + CommandOrControl\n ---\n Show shortcuts: / + CommandOrControl\n Search commands: k + CommandOrControl\n ---\n ${itemsMac}\n Quit: q + CommandOrControl\n ;\n\n Edit:\n Cut: x + CommandOrControl\n Copy: c + CommandOrControl\n Paste: v + CommandOrControl\n Delete: _\n Select All: a + CommandOrControl\n ;\n `;\n\n void app.setSystemMenu({ index: 0, value: menu });\n};\n\nconst setupMenuItemListener = (dispatch: any, app: any) => {\n window.addEventListener('menuItemSelected', async (event: any) => {\n const id = `${event.detail.parent}:${event.detail.title}`;\n switch (id) {\n case 'App Name:Search commands': {\n void dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n );\n break;\n }\n case 'App Name:Settings...': {\n void dispatch(createIntent(SettingsAction.Open));\n break;\n }\n case 'App Name:Show shortcuts': {\n void dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: `${HELP_PLUGIN}/Shortcuts`,\n options: {\n blockAlign: 'center',\n },\n }),\n );\n break;\n }\n case 'App Name:Quit': {\n await app.exit();\n break;\n }\n }\n });\n};\n\nconst setupApplicationUrlListener = (app: any, dispatch: any) => {\n const appWindow = app.getCurrentWindow();\n\n // applicationurl is a custom event fired by the Socket Supply Runtime:\n // https://github.com/socketsupply/socket/blob/ef7fb5559876e41062d5896aafb7b79989fc96e5/api/internal/events.js#L6\n window.addEventListener('applicationurl', ({ url }: any) => {\n appWindow.restore();\n const location = url.toString().replace('composer://', '');\n if (location.includes('InvitationCode')) {\n // TODO(mjamesderocher): Integrate this with app routing.\n // Currently, the dialogs are controlled by Client Plugin and not the Layout Plugin.\n window.location.href = location;\n } else {\n // TODO(thure): What is `location` and is this right?\n void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [location] }));\n }\n });\n};\n\nconst setupGlobalHotkey = async (socketWindow: any, appWindow: any, dispatch: any) => {\n const binding = await socketWindow.hotkey.bind('cmd + k');\n\n // Global hotkey listener\n binding.addEventListener('hotkey', () => {\n appWindow.restore();\n void dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n );\n });\n};\n\nexport const initializeNativeApp = async (context: PluginsContext) => {\n const { app, socketWindow, socketOs, appName } = await loadSocketSupplyModules();\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n\n const platform = socketOs.platform();\n\n document.body.setAttribute('data-platform', platform);\n\n if (platform === 'darwin' || platform === 'win32') {\n await configureDesktopWindowSizing(app);\n await configureSystemMenu(app, appName);\n setupMenuItemListener(dispatch, app);\n setupApplicationUrlListener(app, dispatch);\n await setupGlobalHotkey(socketWindow, app, dispatch);\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["SettingsAction", "LayoutAction", "createIntent", "Capabilities", "HELP_PLUGIN", "COMMANDS_DIALOG", "safeParseJson", "KEY_WINDOW_SIZE", "loadSocketSupplyModules", "module", "app", "windowModule", "socketWindow", "osModule", "socketOs", "meta_title", "appName", "config", "configureDesktopWindowSizing", "width", "height", "safeParseJson", "localStorage", "getItem", "appWindow", "getCurrentWindow", "setSize", "window", "addEventListener", "getSize", "setItem", "JSON", "stringify", "configureSystemMenu", "itemsMac", "menu", "setSystemMenu", "index", "value", "setupMenuItemListener", "dispatch", "event", "id", "detail", "parent", "title", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "COMMANDS_DIALOG", "options", "blockAlign", "SettingsAction", "Open", "HELP_PLUGIN", "exit", "setupApplicationUrlListener", "url", "restore", "location", "toString", "replace", "includes", "href", "setupGlobalHotkey", "binding", "hotkey", "bind", "initializeNativeApp", "context", "dispatchPromise", "requestCapability", "Capabilities", "IntentDispatcher", "platform", "document", "body", "setAttribute"]
7
+ }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/experimental/plugin-native/src/meta.ts":{"bytes":916,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-native/src/initialize.ts":{"bytes":18131,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-help","kind":"import-statement","external":true},{"path":"@dxos/plugin-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-native/src/NativePlugin.tsx":{"bytes":2499,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-native/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-native/src/initialize.ts","kind":"dynamic-import","original":"./initialize"}],"format":"esm"},"packages/plugins/experimental/plugin-native/src/index.ts":{"bytes":607,"imports":[{"path":"packages/plugins/experimental/plugin-native/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-native/src/NativePlugin.tsx","kind":"import-statement","original":"./NativePlugin"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-native/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1563},"packages/plugins/experimental/plugin-native/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-native/dist/lib/browser/initialize-6OEQRMUZ.mjs","kind":"dynamic-import"}],"exports":["NATIVE_PLUGIN","NativePlugin","meta"],"entryPoint":"packages/plugins/experimental/plugin-native/src/index.ts","inputs":{"packages/plugins/experimental/plugin-native/src/meta.ts":{"bytesInOutput":82},"packages/plugins/experimental/plugin-native/src/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-native/src/NativePlugin.tsx":{"bytesInOutput":397}},"bytes":694},"packages/plugins/experimental/plugin-native/dist/lib/browser/initialize-6OEQRMUZ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9061},"packages/plugins/experimental/plugin-native/dist/lib/browser/initialize-6OEQRMUZ.mjs":{"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-help","kind":"import-statement","external":true},{"path":"@dxos/plugin-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["initializeNativeApp"],"entryPoint":"packages/plugins/experimental/plugin-native/src/initialize.ts","inputs":{"packages/plugins/experimental/plugin-native/src/initialize.ts":{"bytesInOutput":4316}},"bytes":4464}}}
1
+ {"inputs":{"packages/plugins/experimental/plugin-native/src/meta.ts":{"bytes":916,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-native/src/initialize.ts":{"bytes":19087,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-help","kind":"import-statement","external":true},{"path":"@dxos/plugin-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-native/src/NativePlugin.tsx":{"bytes":2499,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-native/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-native/src/initialize.ts","kind":"dynamic-import","original":"./initialize"}],"format":"esm"},"packages/plugins/experimental/plugin-native/src/index.ts":{"bytes":607,"imports":[{"path":"packages/plugins/experimental/plugin-native/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-native/src/NativePlugin.tsx","kind":"import-statement","original":"./NativePlugin"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-native/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1563},"packages/plugins/experimental/plugin-native/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-native/dist/lib/browser/initialize-XWHZ2OWK.mjs","kind":"dynamic-import"}],"exports":["NATIVE_PLUGIN","NativePlugin","meta"],"entryPoint":"packages/plugins/experimental/plugin-native/src/index.ts","inputs":{"packages/plugins/experimental/plugin-native/src/meta.ts":{"bytesInOutput":82},"packages/plugins/experimental/plugin-native/src/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-native/src/NativePlugin.tsx":{"bytesInOutput":397}},"bytes":694},"packages/plugins/experimental/plugin-native/dist/lib/browser/initialize-XWHZ2OWK.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9462},"packages/plugins/experimental/plugin-native/dist/lib/browser/initialize-XWHZ2OWK.mjs":{"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-help","kind":"import-statement","external":true},{"path":"@dxos/plugin-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["initializeNativeApp"],"entryPoint":"packages/plugins/experimental/plugin-native/src/initialize.ts","inputs":{"packages/plugins/experimental/plugin-native/src/initialize.ts":{"bytesInOutput":4504}},"bytes":4652}}}
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../src/initialize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAuJ1D,eAAO,MAAM,mBAAmB,YAAmB,cAAc,kBAWhE,CAAC"}
1
+ {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../src/initialize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA2J1D,eAAO,MAAM,mBAAmB,YAAmB,cAAc,kBAehE,CAAC"}
@@ -1 +1 @@
1
- {"version":"5.7.2"}
1
+ {"version":"5.7.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-native",
3
- "version": "0.7.5-labs.a279d8c",
3
+ "version": "0.7.5-labs.e27f9b9",
4
4
  "description": "Composer plugin that runs when on a native device.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -22,11 +22,11 @@
22
22
  "src"
23
23
  ],
24
24
  "dependencies": {
25
- "@dxos/app-framework": "0.7.5-labs.a279d8c",
26
- "@dxos/plugin-navtree": "0.7.5-labs.a279d8c",
27
- "@dxos/plugin-help": "0.7.5-labs.a279d8c",
28
- "@dxos/util": "0.7.5-labs.a279d8c",
29
- "@dxos/log": "0.7.5-labs.a279d8c"
25
+ "@dxos/log": "0.7.5-labs.e27f9b9",
26
+ "@dxos/app-framework": "0.7.5-labs.e27f9b9",
27
+ "@dxos/plugin-navtree": "0.7.5-labs.e27f9b9",
28
+ "@dxos/util": "0.7.5-labs.e27f9b9",
29
+ "@dxos/plugin-help": "0.7.5-labs.e27f9b9"
30
30
  },
31
31
  "devDependencies": {
32
32
  "vite": "5.4.7"
package/src/initialize.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import type { PluginsContext } from '@dxos/app-framework';
6
- import { NavigationAction, SettingsAction, LayoutAction, createIntent, Capabilities } from '@dxos/app-framework';
6
+ import { SettingsAction, LayoutAction, createIntent, Capabilities } from '@dxos/app-framework';
7
7
  import { HELP_PLUGIN } from '@dxos/plugin-help';
8
8
  import { COMMANDS_DIALOG } from '@dxos/plugin-navtree';
9
9
  import { safeParseJson } from '@dxos/util';
@@ -23,9 +23,11 @@ const loadSocketSupplyModules = async () => {
23
23
  const app = await import(/* @vite-ignore */ module);
24
24
  const windowModule = 'socket:window';
25
25
  const socketWindow = await import(/* @vite-ignore */ windowModule);
26
+ const osModule = 'socket:os';
27
+ const socketOs = await import(/* @vite-ignore */ osModule);
26
28
  const { meta_title: appName } = app.config;
27
29
 
28
- return { app, socketWindow, appName };
30
+ return { app, socketWindow, socketOs, appName };
29
31
  };
30
32
 
31
33
  const configureDesktopWindowSizing = async (app: any) => {
@@ -84,10 +86,12 @@ const setupMenuItemListener = (dispatch: any, app: any) => {
84
86
  switch (id) {
85
87
  case 'App Name:Search commands': {
86
88
  void dispatch(
87
- createIntent(LayoutAction.SetLayout, {
88
- element: 'dialog',
89
- component: COMMANDS_DIALOG,
90
- dialogBlockAlign: 'start',
89
+ createIntent(LayoutAction.UpdateDialog, {
90
+ part: 'dialog',
91
+ subject: COMMANDS_DIALOG,
92
+ options: {
93
+ blockAlign: 'start',
94
+ },
91
95
  }),
92
96
  );
93
97
  break;
@@ -98,9 +102,12 @@ const setupMenuItemListener = (dispatch: any, app: any) => {
98
102
  }
99
103
  case 'App Name:Show shortcuts': {
100
104
  void dispatch(
101
- createIntent(LayoutAction.SetLayout, {
102
- element: 'dialog',
103
- component: `${HELP_PLUGIN}/Shortcuts`,
105
+ createIntent(LayoutAction.UpdateDialog, {
106
+ part: 'dialog',
107
+ subject: `${HELP_PLUGIN}/Shortcuts`,
108
+ options: {
109
+ blockAlign: 'center',
110
+ },
104
111
  }),
105
112
  );
106
113
  break;
@@ -126,13 +133,8 @@ const setupApplicationUrlListener = (app: any, dispatch: any) => {
126
133
  // Currently, the dialogs are controlled by Client Plugin and not the Layout Plugin.
127
134
  window.location.href = location;
128
135
  } else {
129
- void dispatch(
130
- createIntent(
131
- NavigationAction.Open,
132
- // TODO(thure): what is `location` and is this right?
133
- { activeParts: { main: [location] } },
134
- ),
135
- );
136
+ // TODO(thure): What is `location` and is this right?
137
+ void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [location] }));
136
138
  }
137
139
  });
138
140
  };
@@ -144,20 +146,26 @@ const setupGlobalHotkey = async (socketWindow: any, appWindow: any, dispatch: an
144
146
  binding.addEventListener('hotkey', () => {
145
147
  appWindow.restore();
146
148
  void dispatch(
147
- createIntent(LayoutAction.SetLayout, {
148
- element: 'dialog',
149
- component: COMMANDS_DIALOG,
150
- dialogBlockAlign: 'start',
149
+ createIntent(LayoutAction.UpdateDialog, {
150
+ part: 'dialog',
151
+ subject: COMMANDS_DIALOG,
152
+ options: {
153
+ blockAlign: 'start',
154
+ },
151
155
  }),
152
156
  );
153
157
  });
154
158
  };
155
159
 
156
160
  export const initializeNativeApp = async (context: PluginsContext) => {
157
- const { app, socketWindow, appName } = await loadSocketSupplyModules();
161
+ const { app, socketWindow, socketOs, appName } = await loadSocketSupplyModules();
158
162
  const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
159
163
 
160
- if (process.platform === 'darwin' || process.platform === 'win32') {
164
+ const platform = socketOs.platform();
165
+
166
+ document.body.setAttribute('data-platform', platform);
167
+
168
+ if (platform === 'darwin' || platform === 'win32') {
161
169
  await configureDesktopWindowSizing(app);
162
170
  await configureSystemMenu(app, appName);
163
171
  setupMenuItemListener(dispatch, app);
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/initialize.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type { PluginsContext } from '@dxos/app-framework';\nimport { NavigationAction, SettingsAction, LayoutAction, createIntent, Capabilities } from '@dxos/app-framework';\nimport { HELP_PLUGIN } from '@dxos/plugin-help';\nimport { COMMANDS_DIALOG } from '@dxos/plugin-navtree';\nimport { safeParseJson } from '@dxos/util';\n\n// TODO(burdon): Reconcile with other properties.\nconst KEY_WINDOW_SIZE = 'dxos.org/plugin/native/window-size';\n\n/**\n * Native code for socketsupply app.\n * https://www.npmjs.com/package/@socketsupply/socket\n * https://github.com/socketsupply/socket-examples\n */\n\nconst loadSocketSupplyModules = async () => {\n // SocketSupply implements the dynamic import.\n const module = 'socket:application';\n const app = await import(/* @vite-ignore */ module);\n const windowModule = 'socket:window';\n const socketWindow = await import(/* @vite-ignore */ windowModule);\n const { meta_title: appName } = app.config;\n\n return { app, socketWindow, appName };\n};\n\nconst configureDesktopWindowSizing = async (app: any) => {\n const { width, height } = safeParseJson<{ width?: number; height?: number }>(\n localStorage.getItem(KEY_WINDOW_SIZE),\n {},\n );\n\n if (width && height) {\n const appWindow = await app.getCurrentWindow();\n await appWindow.setSize({ width, height });\n }\n\n window.addEventListener('resize', async () => {\n const appWindow = await app.getCurrentWindow();\n const { width, height } = appWindow.getSize();\n localStorage.setItem(KEY_WINDOW_SIZE, JSON.stringify({ width, height }));\n });\n};\n\nconst configureSystemMenu = async (app: any, appName: string) => {\n const itemsMac = `\n Hide ${appName}: h + CommandOrControl\n Hide Others: h + Control + Meta\n ---\n `;\n\n // TODO(mjamesderocher) Change menu names to use translations\n const menu = `\n App Name:\n About ${appName}: _\n Settings...: , + CommandOrControl\n ---\n Show shortcuts: / + CommandOrControl\n Search commands: k + CommandOrControl\n ---\n ${itemsMac}\n Quit: q + CommandOrControl\n ;\n\n Edit:\n Cut: x + CommandOrControl\n Copy: c + CommandOrControl\n Paste: v + CommandOrControl\n Delete: _\n Select All: a + CommandOrControl\n ;\n `;\n\n void app.setSystemMenu({ index: 0, value: menu });\n};\n\nconst setupMenuItemListener = (dispatch: any, app: any) => {\n window.addEventListener('menuItemSelected', async (event: any) => {\n const id = `${event.detail.parent}:${event.detail.title}`;\n switch (id) {\n case 'App Name:Search commands': {\n void dispatch(\n createIntent(LayoutAction.SetLayout, {\n element: 'dialog',\n component: COMMANDS_DIALOG,\n dialogBlockAlign: 'start',\n }),\n );\n break;\n }\n case 'App Name:Settings...': {\n void dispatch(createIntent(SettingsAction.Open));\n break;\n }\n case 'App Name:Show shortcuts': {\n void dispatch(\n createIntent(LayoutAction.SetLayout, {\n element: 'dialog',\n component: `${HELP_PLUGIN}/Shortcuts`,\n }),\n );\n break;\n }\n case 'App Name:Quit': {\n await app.exit();\n break;\n }\n }\n });\n};\n\nconst setupApplicationUrlListener = (app: any, dispatch: any) => {\n const appWindow = app.getCurrentWindow();\n\n // applicationurl is a custom event fired by the Socket Supply Runtime:\n // https://github.com/socketsupply/socket/blob/ef7fb5559876e41062d5896aafb7b79989fc96e5/api/internal/events.js#L6\n window.addEventListener('applicationurl', ({ url }: any) => {\n appWindow.restore();\n const location = url.toString().replace('composer://', '');\n if (location.includes('InvitationCode')) {\n // TODO(mjamesderocher): Integrate this with app routing.\n // Currently, the dialogs are controlled by Client Plugin and not the Layout Plugin.\n window.location.href = location;\n } else {\n void dispatch(\n createIntent(\n NavigationAction.Open,\n // TODO(thure): what is `location` and is this right?\n { activeParts: { main: [location] } },\n ),\n );\n }\n });\n};\n\nconst setupGlobalHotkey = async (socketWindow: any, appWindow: any, dispatch: any) => {\n const binding = await socketWindow.hotkey.bind('cmd + k');\n\n // Global hotkey listener\n binding.addEventListener('hotkey', () => {\n appWindow.restore();\n void dispatch(\n createIntent(LayoutAction.SetLayout, {\n element: 'dialog',\n component: COMMANDS_DIALOG,\n dialogBlockAlign: 'start',\n }),\n );\n });\n};\n\nexport const initializeNativeApp = async (context: PluginsContext) => {\n const { app, socketWindow, appName } = await loadSocketSupplyModules();\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n\n if (process.platform === 'darwin' || process.platform === 'win32') {\n await configureDesktopWindowSizing(app);\n await configureSystemMenu(app, appName);\n setupMenuItemListener(dispatch, app);\n setupApplicationUrlListener(app, dispatch);\n await setupGlobalHotkey(socketWindow, app, dispatch);\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["NavigationAction", "SettingsAction", "LayoutAction", "createIntent", "Capabilities", "HELP_PLUGIN", "COMMANDS_DIALOG", "safeParseJson", "KEY_WINDOW_SIZE", "loadSocketSupplyModules", "module", "app", "windowModule", "socketWindow", "meta_title", "appName", "config", "configureDesktopWindowSizing", "width", "height", "safeParseJson", "localStorage", "getItem", "appWindow", "getCurrentWindow", "setSize", "window", "addEventListener", "getSize", "setItem", "JSON", "stringify", "configureSystemMenu", "itemsMac", "menu", "setSystemMenu", "index", "value", "setupMenuItemListener", "dispatch", "event", "id", "detail", "parent", "title", "createIntent", "LayoutAction", "SetLayout", "element", "component", "COMMANDS_DIALOG", "dialogBlockAlign", "SettingsAction", "Open", "HELP_PLUGIN", "exit", "setupApplicationUrlListener", "url", "restore", "location", "toString", "replace", "includes", "href", "NavigationAction", "activeParts", "main", "setupGlobalHotkey", "binding", "hotkey", "bind", "initializeNativeApp", "context", "dispatchPromise", "requestCapability", "Capabilities", "IntentDispatcher", "process", "platform"]
7
- }