opentray 0.15.0 → 0.17.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.
- package/README.md +65 -3
- package/dist/index.d.mts +33 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +435 -26
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -110,6 +110,32 @@ that need exact wire shapes.
|
|
|
110
110
|
Use `tray.onTrayClick(...)` when you want to listen to raw tray-icon clicks
|
|
111
111
|
without making a menu item the primary route.
|
|
112
112
|
|
|
113
|
+
## Darwin App Bundle
|
|
114
|
+
|
|
115
|
+
On macOS, `createTray()` launches the broker from a stable caller-owned bundle.
|
|
116
|
+
The default is derived from the caller package name:
|
|
117
|
+
`~/.opentray/apps/@scope+name/App Name.app`. The bundle is regenerated in place
|
|
118
|
+
on each managed start, so the Dock identity uses the caller's `appName` and
|
|
119
|
+
`appIcon` before the first window is shown.
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
const tray = await createTray(options, {
|
|
123
|
+
appId: "com.example.first-app",
|
|
124
|
+
appName: "First App",
|
|
125
|
+
appIcon,
|
|
126
|
+
appBundle: {
|
|
127
|
+
// Relative paths resolve from the caller package root.
|
|
128
|
+
path: "dist/First App.app",
|
|
129
|
+
// A plugin-generated bundle can be validated without mutation.
|
|
130
|
+
reinitialize: false,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`appBundle.reinitialize` defaults to `true`. A prebuilt bundle must contain the
|
|
136
|
+
matching broker, `Info.plist`, target, icon, and OpenTray manifest; incompatible
|
|
137
|
+
bundles fail with a typed error instead of being silently rebuilt.
|
|
138
|
+
|
|
113
139
|
## Runtime Ownership
|
|
114
140
|
|
|
115
141
|
OpenTray does not ask developers to create a public broker object. The application process or an application-owned background service imports `opentray`, calls `createTray()`, and owns its event handlers. Calling the returned handle's `destroy()` removes the tray and closes the caller-owned broker session; repeated calls share the same teardown. Process exit remains the final fallback rather than a required cleanup mechanism.
|
|
@@ -133,16 +159,52 @@ pnpm run npm:cp-bin:webview -- -t debug
|
|
|
133
159
|
|
|
134
160
|
By default, `createTray()` routes through the local runtime host and starts it on first use when needed. It resolves the broker executable from the installed current-platform package first; source-tree contributors can either stage fresh package artifacts with `npm:cp-bin*` or point directly at a debug broker with `OPENTRAY_BROKER_BIN`. The executable host remains the source of truth for tray lifecycle, session cleanup, and native event routing on supported platforms.
|
|
135
161
|
|
|
136
|
-
Runtime options may also carry app identity facts
|
|
162
|
+
Runtime options may also carry app identity facts. For a Darwin runtime, the
|
|
163
|
+
identity catalog and App handle look like this:
|
|
137
164
|
|
|
138
165
|
```ts
|
|
139
|
-
|
|
166
|
+
import { createTray, type AppIcon, type AppIconVariantOf } from "opentray";
|
|
167
|
+
|
|
168
|
+
const appIcon = [
|
|
169
|
+
{
|
|
170
|
+
platform: "darwin",
|
|
171
|
+
format: "icns",
|
|
172
|
+
variant: ["default", "light"],
|
|
173
|
+
source: { type: "file", path: "./assets/app-light.icns" },
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
platform: "darwin",
|
|
177
|
+
format: "icns",
|
|
178
|
+
variant: "dark",
|
|
179
|
+
source: { type: "file", path: "./assets/app-dark.icns" },
|
|
180
|
+
},
|
|
181
|
+
] as const satisfies AppIcon;
|
|
182
|
+
type AppIconVariant = AppIconVariantOf<typeof appIcon>;
|
|
183
|
+
|
|
184
|
+
const tray = await createTray(options, {
|
|
140
185
|
appId: "com.example.status",
|
|
141
186
|
appName: "Status",
|
|
187
|
+
appIcon,
|
|
142
188
|
});
|
|
189
|
+
|
|
190
|
+
const selectAppIcon = (variant: AppIconVariant) =>
|
|
191
|
+
tray.app.setAppIcon(variant);
|
|
192
|
+
|
|
193
|
+
await selectAppIcon("dark");
|
|
143
194
|
```
|
|
144
195
|
|
|
145
|
-
|
|
196
|
+
`appIcon` is a current-platform catalog of native App identity assets: ICNS on
|
|
197
|
+
macOS, ICO on Windows, and sized PNG or SVG assets on Linux. Omitted `variant`
|
|
198
|
+
means `default`; an array aliases one file to several semantic names. Names are
|
|
199
|
+
application states, so `empty/files` is as valid as `light/dark`. Every catalog
|
|
200
|
+
must provide `default` and every selectable variant for the current platform.
|
|
201
|
+
|
|
202
|
+
`tray.app.getAppIcon()` returns the complete catalog,
|
|
203
|
+
`tray.app.getAppIconVariant()` returns the selected name, and
|
|
204
|
+
`tray.app.setAppIcon(...)` either selects a name, replaces the catalog and resets
|
|
205
|
+
selection to `default`, or clears explicit artwork with `null`. Selection does
|
|
206
|
+
not add WebView IPC or automatic theme behavior. Tray icon text, menu labels,
|
|
207
|
+
tooltip text, and WebView window metadata remain separate projection data.
|
|
146
208
|
|
|
147
209
|
## Examples
|
|
148
210
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AppId, AppIdentity, AppOptions, AppRef, BrokerEndpointIdentity, BrokerEndpointIdentityOptions, ClientFrame, ClientFrame as ClientFrame$1, ClientRequestFrame, ClientRequestFrame as ClientRequestFrame$1, DarwinIcon, DarwinIconText, ExpectedExtensionIdentity, ExtensionEnvelope, ExtensionEnvelope as ExtensionEnvelope$1, Icon, Icon as Icon$1, Icon as TrayIcon, IconCandidates, IconImage, IconText, LinuxIcon, Menu, Menu as Menu$1, MenuItem, MenuItemId, MenuItemId as MenuItemId$1, MouseButton, PROTOCOL_VERSION, Rect, RequestId, ServerFrame, ServerFrame as ServerFrame$1, SimpleIcon, Tooltip, Tooltip as Tooltip$1, Tooltip as TrayTooltip, TrayBoundsKind, TrayBoundsResult, TrayBoundsResult as TrayBoundsResult$1, TrayEvent, TrayEvent as TrayEvent$1, TrayId, TrayId as TrayId$1, TrayOptions, TrayOptions as TrayOptions$1, Win32Icon, createBrokerEndpointIdentity, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion } from "@opentray/spec";
|
|
1
|
+
import { AppIcon, AppIcon as AppIcon$1, AppIconAsset, AppIconSource, AppIconVariant, AppIconVariantOf, AppId, AppIdentity, AppOptions, AppRef, BrokerEndpointIdentity, BrokerEndpointIdentityOptions, ClientFrame, ClientFrame as ClientFrame$1, ClientRequestFrame, ClientRequestFrame as ClientRequestFrame$1, DarwinIcon, DarwinIconText, ExpectedExtensionIdentity, ExtensionEnvelope, ExtensionEnvelope as ExtensionEnvelope$1, Icon, Icon as Icon$1, Icon as TrayIcon, IconCandidates, IconImage, IconText, LinuxIcon, Menu, Menu as Menu$1, MenuItem, MenuItemId, MenuItemId as MenuItemId$1, MouseButton, PROTOCOL_VERSION, Rect, RequestId, ServerFrame, ServerFrame as ServerFrame$1, SimpleIcon, Tooltip, Tooltip as Tooltip$1, Tooltip as TrayTooltip, TrayBoundsKind, TrayBoundsResult, TrayBoundsResult as TrayBoundsResult$1, TrayEvent, TrayEvent as TrayEvent$1, TrayId, TrayId as TrayId$1, TrayOptions, TrayOptions as TrayOptions$1, Win32Icon, createBrokerEndpointIdentity, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion } from "@opentray/spec";
|
|
2
|
+
import { OpenTrayAppBundleOptions, OpenTrayAppBundleOptions as OpenTrayAppBundleOptions$1 } from "@opentray/packaging";
|
|
2
3
|
|
|
3
4
|
//#region src/native-extension-artifact.d.ts
|
|
4
5
|
type NativeExtensionArch = "arm64" | "x64";
|
|
@@ -67,6 +68,7 @@ interface OpenTrayEventfulClient extends OpenTrayClient {
|
|
|
67
68
|
}
|
|
68
69
|
interface TrayHandle {
|
|
69
70
|
trayId: TrayId$1;
|
|
71
|
+
app: AppHandle;
|
|
70
72
|
getBounds(): Promise<TrayBoundsResult$1>;
|
|
71
73
|
setMenu(menu: Menu$1): Promise<void>;
|
|
72
74
|
setTooltip(tooltip: Tooltip$1): Promise<void>;
|
|
@@ -77,6 +79,14 @@ interface TrayHandle {
|
|
|
77
79
|
extend<TCapability extends object, TOptions = undefined>(extension: TrayExtension<TCapability, TOptions>, options?: TOptions): TrayHandle & TCapability;
|
|
78
80
|
destroy(): Promise<void>;
|
|
79
81
|
}
|
|
82
|
+
interface AppHandle {
|
|
83
|
+
readonly appId: string;
|
|
84
|
+
getName(): Promise<string>;
|
|
85
|
+
setName(name: string): Promise<string>;
|
|
86
|
+
getAppIcon(): Promise<AppIcon$1 | null>;
|
|
87
|
+
getAppIconVariant(): Promise<string | null>;
|
|
88
|
+
setAppIcon(iconOrVariant: AppIcon$1 | string | null): Promise<void>;
|
|
89
|
+
}
|
|
80
90
|
type TrayScopedEvent = Exclude<TrayEvent$1, {
|
|
81
91
|
type: "ready";
|
|
82
92
|
}>;
|
|
@@ -121,6 +131,10 @@ interface TrayExtension<TCapability extends object, TOptions = undefined> {
|
|
|
121
131
|
declare const createInitFrame: (clientVersion: string) => ClientFrame$1;
|
|
122
132
|
interface CreateClientOptions {
|
|
123
133
|
requestIdPrefix?: string;
|
|
134
|
+
appOptions?: {
|
|
135
|
+
name?: string;
|
|
136
|
+
appIcon?: AppIcon$1;
|
|
137
|
+
};
|
|
124
138
|
}
|
|
125
139
|
declare function createClient(transport: OpenTrayConnection, options?: CreateClientOptions): OpenTrayEventfulClient;
|
|
126
140
|
declare function createClient(transport: OpenTrayTransport, options?: CreateClientOptions): OpenTrayClient;
|
|
@@ -180,6 +194,8 @@ interface OpenTrayRuntimeOptions {
|
|
|
180
194
|
clientVersion?: string;
|
|
181
195
|
appId?: string;
|
|
182
196
|
appName?: string;
|
|
197
|
+
appIcon?: AppIcon$1;
|
|
198
|
+
appBundle?: OpenTrayAppBundleOptions$1;
|
|
183
199
|
autoStart?: boolean;
|
|
184
200
|
}
|
|
185
201
|
/** App-facing tray options accepted by top-level createTray. */
|
|
@@ -197,5 +213,20 @@ interface CreateTrayHandle extends Omit<EventfulTrayHandle, "setMenu" | "extend"
|
|
|
197
213
|
}
|
|
198
214
|
declare const createTray: (options: CreateTrayOptions, runtimeOptions?: OpenTrayRuntimeOptions) => Promise<CreateTrayHandle>;
|
|
199
215
|
//#endregion
|
|
200
|
-
|
|
216
|
+
//#region src/app-icon.d.ts
|
|
217
|
+
declare const DEFAULT_APP_ICON_VARIANT: "default";
|
|
218
|
+
declare class InvalidAppIconError extends Error {
|
|
219
|
+
readonly code = "OPENTRAY_INVALID_APP_ICON";
|
|
220
|
+
readonly reason: string;
|
|
221
|
+
constructor(reason: string, platform?: NodeJS.Platform);
|
|
222
|
+
}
|
|
223
|
+
declare class AppIconVariantNotFoundError extends Error {
|
|
224
|
+
readonly code = "OPENTRAY_APP_ICON_VARIANT_NOT_FOUND";
|
|
225
|
+
readonly variant: string;
|
|
226
|
+
constructor(variant: string, platform?: NodeJS.Platform);
|
|
227
|
+
}
|
|
228
|
+
/** Validate an explicit AppIcon, including native file signatures, before broker startup. */
|
|
229
|
+
declare const validateAppIcon: (icon: unknown, platform?: NodeJS.Platform) => Promise<void>;
|
|
230
|
+
//#endregion
|
|
231
|
+
export { type AppHandle, type AppIcon, type AppIconAsset, type AppIconSource, type AppIconVariant, AppIconVariantNotFoundError, type AppIconVariantOf, type AppId, type AppIdentity, type AppOptions, type AppRef, type BrokerEndpointIdentity, type BrokerEndpointIdentityOptions, type ClientFrame, type ClientRequestFrame, type CreateClientOptions, type CreateTrayCheckItem, type CreateTrayHandle, type CreateTrayItem, type CreateTrayMenu, type CreateTrayMenu as TrayMenu, type CreateTrayMenuClickHandler, type CreateTrayMenuItem, type CreateTrayOptions, type CreateTrayRadioItem, type CreateTraySeparatorItem, type CreateTraySubmenuItem, DEFAULT_APP_ICON_VARIANT, type DarwinIcon, type DarwinIconText, type EventfulTrayHandle, type ExtensionEnvelope, type ExtensionLoadOptions, type Icon, type IconCandidates, type IconImage, type IconText, InvalidAppIconError, type LinuxIcon, type Menu, type MenuItem, type MenuItemId, type MouseButton, type NativeExtensionArch, type NativeExtensionArtifact, NativeExtensionArtifactResolutionError, type NativeExtensionExpectedIdentity, type NativeExtensionFileArtifact, type NativeExtensionIdentitySource, type NativeExtensionPackageArtifact, type NativeExtensionPackageTarget, type NativeExtensionTarget, type OpenTrayAppBundleOptions, type OpenTrayClient, type OpenTrayConnection, type OpenTrayEventFrame, type OpenTrayEventSource, type OpenTrayRuntimeOptions, type OpenTrayTransport, PROTOCOL_VERSION, type Rect, type ResolvedNativeExtensionArtifact, type ServerFrame, type SimpleIcon, type Tooltip, type TrayBoundsKind, type TrayBoundsResult, type TrayEvent, type TrayEventByType, type TrayEventType, type TrayExtension, type TrayExtensionContext, type TrayExtensionMountSpec, type TrayHandle, type TrayIcon, type TrayId, type TrayOptions, type TrayTooltip, type Win32Icon, createBrokerEndpointIdentity, createClient, createInitFrame, createTray, createTrayHandle, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion, resolveNativeExtensionArtifact, validateAppIcon };
|
|
201
232
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/native-extension-artifact.ts","../src/client.ts","../src/menu-input.ts","../src/sdk.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/native-extension-artifact.ts","../src/client.ts","../src/menu-input.ts","../src/sdk.ts","../src/app-icon.ts"],"mappings":"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"}
|