murasaki 0.3.0 → 0.4.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/dist/jsx/dom/index.d.ts +2 -0
- package/dist/jsx/dom/index.d.ts.map +1 -1
- package/dist/jsx/dom/index.js +1 -0
- package/dist/jsx/dom/index.js.map +1 -1
- package/dist/jsx/dom/native.d.ts +45 -0
- package/dist/jsx/dom/native.d.ts.map +1 -0
- package/dist/jsx/dom/native.js +88 -0
- package/dist/jsx/dom/native.js.map +1 -0
- package/dist/runtime/native.d.ts +19 -0
- package/dist/runtime/native.d.ts.map +1 -0
- package/dist/runtime/native.js +111 -0
- package/dist/runtime/native.js.map +1 -0
- package/dist/runtime/window.d.ts.map +1 -1
- package/dist/runtime/window.js +8 -0
- package/dist/runtime/window.js.map +1 -1
- package/package.json +1 -1
package/dist/jsx/dom/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { createElement, createRoot, Fragment, jsx, jsxDEV, jsxs, useEffect, useRef, useState, } from './runtime.ts';
|
|
2
|
+
export { useNotification, useClipboard, useShell } from './native.ts';
|
|
3
|
+
export type { NotifyOptions } from './native.ts';
|
|
2
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/jsx/dom/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
// Public surface for `import { ... } from 'murasaki/jsx/dom'`.
|
|
2
2
|
export { createElement, createRoot, Fragment, jsx, jsxDEV, jsxs, useEffect, useRef, useState, } from "./runtime.js";
|
|
3
|
+
export { useNotification, useClipboard, useShell } from "./native.js";
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type NotifyOptions = {
|
|
2
|
+
title: string;
|
|
3
|
+
body?: string;
|
|
4
|
+
sound?: boolean;
|
|
5
|
+
};
|
|
6
|
+
type Bridge = {
|
|
7
|
+
notify(opts: NotifyOptions): Promise<void>;
|
|
8
|
+
clipboardWrite(text: string): Promise<void>;
|
|
9
|
+
clipboardRead(): Promise<string>;
|
|
10
|
+
openExternal(target: string): Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
declare global {
|
|
13
|
+
interface Window {
|
|
14
|
+
murasaki?: Bridge;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns a function that shows an OS notification.
|
|
19
|
+
*
|
|
20
|
+
* const notify = useNotification()
|
|
21
|
+
* notify({ title: 'Hello', body: 'from murasaki' })
|
|
22
|
+
*/
|
|
23
|
+
export declare function useNotification(): (opts: NotifyOptions) => Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Returns { read, write } for the system clipboard.
|
|
26
|
+
*
|
|
27
|
+
* const clipboard = useClipboard()
|
|
28
|
+
* clipboard.write('hello')
|
|
29
|
+
* const text = await clipboard.read()
|
|
30
|
+
*/
|
|
31
|
+
export declare function useClipboard(): {
|
|
32
|
+
read(): Promise<string>;
|
|
33
|
+
write(text: string): Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Returns { openExternal } — opens URLs / files in the system default app.
|
|
37
|
+
*
|
|
38
|
+
* const shell = useShell()
|
|
39
|
+
* shell.openExternal('https://murasaki.dev')
|
|
40
|
+
*/
|
|
41
|
+
export declare function useShell(): {
|
|
42
|
+
openExternal(target: string): Promise<void>;
|
|
43
|
+
};
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/native.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAChC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C,CAAA;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB;CACF;AAOD;;;;;GAKG;AACH,wBAAgB,eAAe,KACf,MAAM,aAAa,KAAG,OAAO,CAAC,IAAI,CAAC,CASlD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY;YAEV,OAAO,CAAC,MAAM,CAAC;gBAUX,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAU3C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ;yBAEO,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAUpD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Client-side React-style hooks for native APIs.
|
|
2
|
+
//
|
|
3
|
+
// All of these proxy to the Node side via window.murasaki.*, which the
|
|
4
|
+
// dev runner exposes through @webviewjs/webview's webview.expose().
|
|
5
|
+
//
|
|
6
|
+
// Safe to import server-side — every hook detects the missing bridge
|
|
7
|
+
// and degrades to no-op (notify/openExternal/clipboardWrite) or empty
|
|
8
|
+
// value (clipboardRead → '').
|
|
9
|
+
function bridge() {
|
|
10
|
+
if (typeof window === 'undefined')
|
|
11
|
+
return null;
|
|
12
|
+
return window.murasaki ?? null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Returns a function that shows an OS notification.
|
|
16
|
+
*
|
|
17
|
+
* const notify = useNotification()
|
|
18
|
+
* notify({ title: 'Hello', body: 'from murasaki' })
|
|
19
|
+
*/
|
|
20
|
+
export function useNotification() {
|
|
21
|
+
return async (opts) => {
|
|
22
|
+
const b = bridge();
|
|
23
|
+
if (!b)
|
|
24
|
+
return;
|
|
25
|
+
try {
|
|
26
|
+
await b.notify(opts);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
console.warn('[murasaki] notify failed:', e);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns { read, write } for the system clipboard.
|
|
35
|
+
*
|
|
36
|
+
* const clipboard = useClipboard()
|
|
37
|
+
* clipboard.write('hello')
|
|
38
|
+
* const text = await clipboard.read()
|
|
39
|
+
*/
|
|
40
|
+
export function useClipboard() {
|
|
41
|
+
return {
|
|
42
|
+
async read() {
|
|
43
|
+
const b = bridge();
|
|
44
|
+
if (!b)
|
|
45
|
+
return '';
|
|
46
|
+
try {
|
|
47
|
+
return await b.clipboardRead();
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
console.warn('[murasaki] clipboard.read failed:', e);
|
|
51
|
+
return '';
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
async write(text) {
|
|
55
|
+
const b = bridge();
|
|
56
|
+
if (!b)
|
|
57
|
+
return;
|
|
58
|
+
try {
|
|
59
|
+
await b.clipboardWrite(text);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
console.warn('[murasaki] clipboard.write failed:', e);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns { openExternal } — opens URLs / files in the system default app.
|
|
69
|
+
*
|
|
70
|
+
* const shell = useShell()
|
|
71
|
+
* shell.openExternal('https://murasaki.dev')
|
|
72
|
+
*/
|
|
73
|
+
export function useShell() {
|
|
74
|
+
return {
|
|
75
|
+
async openExternal(target) {
|
|
76
|
+
const b = bridge();
|
|
77
|
+
if (!b)
|
|
78
|
+
return;
|
|
79
|
+
try {
|
|
80
|
+
await b.openExternal(target);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
console.warn('[murasaki] openExternal failed:', e);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../src/jsx/dom/native.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,uEAAuE;AACvE,oEAAoE;AACpE,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,8BAA8B;AAqB9B,SAAS,MAAM;IACb,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IAC9C,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAA;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,EAAE,IAAmB,EAAiB,EAAE;QAClD,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;QAClB,IAAI,CAAC,CAAC;YAAE,OAAM;QACd,IAAI,CAAC;YACH,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;YAClB,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAA;YACjB,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;YAChC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAA;gBACpD,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAY;YACtB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;YAClB,IAAI,CAAC,CAAC;gBAAE,OAAM;YACd,IAAI,CAAC;gBACH,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO;QACL,KAAK,CAAC,YAAY,CAAC,MAAc;YAC/B,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;YAClB,IAAI,CAAC,CAAC;gBAAE,OAAM;YACd,IAAI,CAAC;gBACH,MAAM,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAA;YACpD,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type NotifyOptions = {
|
|
2
|
+
title: string;
|
|
3
|
+
body?: string;
|
|
4
|
+
sound?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const nativeBridge: {
|
|
7
|
+
/** Show an OS notification. */
|
|
8
|
+
notify(opts: NotifyOptions): Promise<void>;
|
|
9
|
+
/** Copy text to the system clipboard. */
|
|
10
|
+
clipboardWrite(text: string): Promise<void>;
|
|
11
|
+
/** Read text from the system clipboard. */
|
|
12
|
+
clipboardRead(): Promise<string>;
|
|
13
|
+
/** Open a URL or file path in the system default handler (browser, etc). */
|
|
14
|
+
openExternal(target: string): Promise<void>;
|
|
15
|
+
/** Murasaki version (debug/probe). */
|
|
16
|
+
version: string;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/runtime/native.ts"],"names":[],"mappings":"AAWA,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAoCD,eAAO,MAAM,YAAY;IACvB,+BAA+B;iBACZ,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhD,yCAAyC;yBACd,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjD,2CAA2C;qBACpB,OAAO,CAAC,MAAM,CAAC;IAYtC,4EAA4E;yBACjD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,sCAAsC;;CAEvC,CAAA"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Native bridge exposed to the WebView under `window.murasaki`.
|
|
2
|
+
//
|
|
3
|
+
// Each function here becomes callable from client code via
|
|
4
|
+
// await window.murasaki.<name>(args)
|
|
5
|
+
// (the underlying transport is @webviewjs/webview's `webview.expose`).
|
|
6
|
+
//
|
|
7
|
+
// macOS-first; Windows/Linux paths are best-effort. All values & arguments
|
|
8
|
+
// must be JSON-serializable.
|
|
9
|
+
import { spawn } from 'node:child_process';
|
|
10
|
+
function runSilent(cmd, args, stdin) {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const proc = spawn(cmd, args, { stdio: ['pipe', 'ignore', 'ignore'] });
|
|
13
|
+
proc.on('error', reject);
|
|
14
|
+
proc.on('exit', (code) => {
|
|
15
|
+
if (code === 0)
|
|
16
|
+
resolve();
|
|
17
|
+
else
|
|
18
|
+
reject(new Error(`${cmd} exited with code ${code}`));
|
|
19
|
+
});
|
|
20
|
+
if (stdin !== undefined) {
|
|
21
|
+
proc.stdin.write(stdin);
|
|
22
|
+
proc.stdin.end();
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function runCapture(cmd, args) {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
const proc = spawn(cmd, args, { stdio: ['ignore', 'pipe', 'ignore'] });
|
|
29
|
+
let out = '';
|
|
30
|
+
proc.stdout.on('data', (chunk) => {
|
|
31
|
+
out += chunk.toString();
|
|
32
|
+
});
|
|
33
|
+
proc.on('error', reject);
|
|
34
|
+
proc.on('exit', (code) => {
|
|
35
|
+
if (code === 0)
|
|
36
|
+
resolve(out);
|
|
37
|
+
else
|
|
38
|
+
reject(new Error(`${cmd} exited with code ${code}`));
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function escapeAppleScript(s) {
|
|
43
|
+
return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
44
|
+
}
|
|
45
|
+
export const nativeBridge = {
|
|
46
|
+
/** Show an OS notification. */
|
|
47
|
+
async notify(opts) {
|
|
48
|
+
if (process.platform === 'darwin') {
|
|
49
|
+
const title = escapeAppleScript(opts.title);
|
|
50
|
+
const body = escapeAppleScript(opts.body ?? '');
|
|
51
|
+
const sound = opts.sound ? ' sound name "default"' : '';
|
|
52
|
+
const script = `display notification "${body}" with title "${title}"${sound}`;
|
|
53
|
+
await runSilent('osascript', ['-e', script]);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (process.platform === 'win32') {
|
|
57
|
+
// Best-effort PowerShell toast
|
|
58
|
+
const escaped = opts.title.replace(/"/g, '\\"');
|
|
59
|
+
const body = (opts.body ?? '').replace(/"/g, '\\"');
|
|
60
|
+
const ps = `New-BurntToastNotification -Text "${escaped}","${body}"`;
|
|
61
|
+
await runSilent('powershell', ['-Command', ps]);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Linux
|
|
65
|
+
const args = [];
|
|
66
|
+
if (opts.body)
|
|
67
|
+
args.push(opts.title, opts.body);
|
|
68
|
+
else
|
|
69
|
+
args.push(opts.title);
|
|
70
|
+
await runSilent('notify-send', args);
|
|
71
|
+
},
|
|
72
|
+
/** Copy text to the system clipboard. */
|
|
73
|
+
async clipboardWrite(text) {
|
|
74
|
+
if (process.platform === 'darwin')
|
|
75
|
+
return runSilent('pbcopy', [], text);
|
|
76
|
+
if (process.platform === 'win32')
|
|
77
|
+
return runSilent('clip', [], text);
|
|
78
|
+
// Linux: try wl-copy (Wayland) then xclip (X11)
|
|
79
|
+
try {
|
|
80
|
+
return await runSilent('wl-copy', [], text);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return runSilent('xclip', ['-selection', 'clipboard'], text);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
/** Read text from the system clipboard. */
|
|
87
|
+
async clipboardRead() {
|
|
88
|
+
if (process.platform === 'darwin')
|
|
89
|
+
return runCapture('pbpaste', []);
|
|
90
|
+
if (process.platform === 'win32') {
|
|
91
|
+
return runCapture('powershell', ['-Command', 'Get-Clipboard']);
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
return await runCapture('wl-paste', ['--no-newline']);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return runCapture('xclip', ['-selection', 'clipboard', '-o']);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
/** Open a URL or file path in the system default handler (browser, etc). */
|
|
101
|
+
async openExternal(target) {
|
|
102
|
+
const cmd = process.platform === 'darwin' ? 'open'
|
|
103
|
+
: process.platform === 'win32' ? 'cmd'
|
|
104
|
+
: 'xdg-open';
|
|
105
|
+
const args = process.platform === 'win32' ? ['/c', 'start', '', target] : [target];
|
|
106
|
+
return runSilent(cmd, args);
|
|
107
|
+
},
|
|
108
|
+
/** Murasaki version (debug/probe). */
|
|
109
|
+
version: '0.3.0',
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/runtime/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../src/runtime/window.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAA;AAI7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../src/runtime/window.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAA;AAI7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,eAAO,MAAM,GAAG,aAAqD,CAAA;AA+BrE,wBAAgB,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC,CAElD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBhD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAOlC;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASrE;AAED,wBAAgB,MAAM,IAAI,IAAI,CAE7B;AAED,wBAAgB,OAAO,IAAI,IAAI,CAI9B"}
|
package/dist/runtime/window.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { Application, ControlFlow } from '@webviewjs/webview';
|
|
7
7
|
import { printClosed, printError, printHint, printReloaded } from "../cli/log.js";
|
|
8
8
|
import { DEFAULT_WIN_SIZE, DEFAULT_WIN_TITLE, projectRoot } from "../env.js";
|
|
9
|
+
import { nativeBridge } from "./native.js";
|
|
9
10
|
import { renderApp } from "./render.js";
|
|
10
11
|
const config = {
|
|
11
12
|
title: DEFAULT_WIN_TITLE,
|
|
@@ -58,6 +59,13 @@ export async function openWindow() {
|
|
|
58
59
|
height: config.height,
|
|
59
60
|
});
|
|
60
61
|
webview = win.createWebview({ html });
|
|
62
|
+
// Expose native bridge under window.murasaki for client hooks.
|
|
63
|
+
try {
|
|
64
|
+
webview.expose('murasaki', nativeBridge);
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
printError(`Native bridge expose failed: ${e.message}`);
|
|
68
|
+
}
|
|
61
69
|
}
|
|
62
70
|
export function closeWindow() {
|
|
63
71
|
if (!win)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../src/runtime/window.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,iFAAiF;AACjF,4EAA4E;AAC5E,6CAA6C;AAE7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAc,CAAA;AAExC,MAAM,MAAM,GAAiB;IAC3B,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,gBAAgB,CAAC,KAAK;IAC7B,MAAM,EAAE,gBAAgB,CAAC,MAAM;CAChC,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;AAKrE,IAAI,GAAG,GAAyB,IAAI,CAAA;AACpC,IAAI,OAAO,GAAmB,IAAI,CAAA;AAElC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;IACpB,MAAM,IAAI,GAAG,KAAK,IAAI,CAAE,KAAa,CAAC,IAAI,IAAK,KAAa,CAAC,KAAK,CAAC,CAAA;IACnE,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,2EAA2E;QAC3E,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,GAAG,CAAC,OAAO,EAAE,CAAA;YACf,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,GAAG,GAAG,IAAI,CAAA;QACV,OAAO,GAAG,IAAI,CAAA;QACd,WAAW,EAAE,CAAA;IACf,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,SAAS,aAAa,CAAC,QAAmB;IACxC,IAAI,CAAC,QAAQ;QAAE,OAAM;IACrB,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAA;SAC3D,IAAI,QAAQ,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IACtD,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAA;IAChE,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,GAAG,EAAE,CAAC;QACR,SAAS,CAAC,wBAAwB,CAAC,CAAA;QACnC,OAAM;IACR,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IAC5C,aAAa,CAAC,QAAQ,CAAC,CAAA;IACvB,GAAG,GAAG,GAAG,CAAC,mBAAmB,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;IACF,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../src/runtime/window.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,iFAAiF;AACjF,4EAA4E;AAC5E,6CAA6C;AAE7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAG5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAc,CAAA;AAExC,MAAM,MAAM,GAAiB;IAC3B,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,gBAAgB,CAAC,KAAK;IAC7B,MAAM,EAAE,gBAAgB,CAAC,MAAM;CAChC,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;AAKrE,IAAI,GAAG,GAAyB,IAAI,CAAA;AACpC,IAAI,OAAO,GAAmB,IAAI,CAAA;AAElC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;IACpB,MAAM,IAAI,GAAG,KAAK,IAAI,CAAE,KAAa,CAAC,IAAI,IAAK,KAAa,CAAC,KAAK,CAAC,CAAA;IACnE,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,2EAA2E;QAC3E,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,GAAG,CAAC,OAAO,EAAE,CAAA;YACf,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,GAAG,GAAG,IAAI,CAAA;QACV,OAAO,GAAG,IAAI,CAAA;QACd,WAAW,EAAE,CAAA;IACf,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,SAAS,aAAa,CAAC,QAAmB;IACxC,IAAI,CAAC,QAAQ;QAAE,OAAM;IACrB,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAA;SAC3D,IAAI,QAAQ,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IACtD,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAA;IAChE,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,GAAG,EAAE,CAAC;QACR,SAAS,CAAC,wBAAwB,CAAC,CAAA;QACnC,OAAM;IACR,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IAC5C,aAAa,CAAC,QAAQ,CAAC,CAAA;IACvB,GAAG,GAAG,GAAG,CAAC,mBAAmB,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;IACF,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,+DAA+D;IAC/D,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC1C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,UAAU,CAAC,gCAAgC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACzD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,IAAI,CAAC;QACH,GAAG,CAAC,OAAO,EAAE,CAAA;IACf,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,GAAG,GAAG,IAAI,CAAA;IACV,OAAO,GAAG,IAAI,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,IAAI,CAAC,OAAO;QAAE,OAAM;IACpB,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;QAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACtB,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,UAAU,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,GAAG,CAAC,GAAG,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,EAAE,CAAA;IACZ,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC"}
|