@nativedesktop/react 0.4.40 → 0.4.42
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/index.js +117 -42
- package/dist/packages/react/src/dialogs.d.ts +2 -0
- package/dist/packages/react/src/generated/intrinsics.d.ts +4 -0
- package/dist/packages/react/src/generated/schema-meta.d.ts +1 -1
- package/dist/packages/react/src/host-config.d.ts +1 -1
- package/dist/packages/react/src/index.d.ts +2 -2
- package/dist/packages/react/src/ops.d.ts +1 -0
- package/dist/packages/react/src/system.d.ts +25 -0
- package/dist/packages/react/src/webview.d.ts +21 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -595,7 +595,7 @@ var widgetEvents = {
|
|
|
595
595
|
tabview: [{ name: "selectionChanged", handler: "onSelectionChanged", payload: "index" }, { name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
596
596
|
grid: [{ name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
597
597
|
listview: [{ name: "rowActivated", handler: "onRowActivated", payload: "index" }, { name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
598
|
-
webview: [{ name: "navigate", handler: "onNavigate", payload: "text" }, { name: "titleChanged", handler: "onTitleChanged", payload: "text" }, { name: "loadingChanged", handler: "onLoadingChanged", payload: "checked" }, { name: "backAvailable", handler: "onBackAvailable", payload: "checked" }, { name: "forwardAvailable", handler: "onForwardAvailable", payload: "checked" }, { name: "loadProgress", handler: "onLoadProgress", payload: "value" }, { name: "loadFailed", handler: "onLoadFailed", payload: "data" }, { name: "newWindow", handler: "onNewWindow", payload: "text" }, { name: "browserCommand", handler: "onBrowserCommand", payload: "text" }, { name: "downloadRequested", handler: "onDownloadRequested", payload: "data" }, { name: "downloadUpdated", handler: "onDownloadUpdated", payload: "data" }, { name: "javaScriptResult", handler: "onJavaScriptResult", payload: "data" }, { name: "scriptMessage", handler: "onScriptMessage", payload: "data" }, { name: "schemeRequest", handler: "onSchemeRequest", payload: "data" }, { name: "cookiesResult", handler: "onCookiesResult", payload: "data" }, { name: "cookiesChanged", handler: "onCookiesChanged", payload: "data" }, { name: "faviconChanged", handler: "onFaviconChanged", payload: "data" }, { name: "findResult", handler: "onFindResult", payload: "data" }, { name: "securityChanged", handler: "onSecurityChanged", payload: "data" }, { name: "linkHover", handler: "onLinkHover", payload: "text" }, { name: "contextMenu", handler: "onContextMenu", payload: "data" }, { name: "contextMenuItemClicked", handler: "onContextMenuItemClicked", payload: "data" }, { name: "sessionSaved", handler: "onSessionSaved", payload: "data" }, { name: "audioStateChanged", handler: "onAudioStateChanged", payload: "data" }, { name: "extensionsList", handler: "onExtensionsList", payload: "data" }, { name: "extensionActions", handler: "onExtensionActions", payload: "data" }, { name: "extensionsChanged", handler: "onExtensionsChanged", payload: "data" }, { name: "chromeDialog", handler: "onChromeDialog", payload: "data" }, { name: "permissionRequest", handler: "onPermissionRequest", payload: "data" }, { name: "permissionRequestDismissed", handler: "onPermissionRequestDismissed", payload: "data" }, { name: "zoomChanged", handler: "onZoomChanged", payload: "data" }, { name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
598
|
+
webview: [{ name: "navigate", handler: "onNavigate", payload: "text" }, { name: "titleChanged", handler: "onTitleChanged", payload: "text" }, { name: "loadingChanged", handler: "onLoadingChanged", payload: "checked" }, { name: "focusChanged", handler: "onFocusChanged", payload: "checked" }, { name: "backAvailable", handler: "onBackAvailable", payload: "checked" }, { name: "forwardAvailable", handler: "onForwardAvailable", payload: "checked" }, { name: "loadProgress", handler: "onLoadProgress", payload: "value" }, { name: "loadFailed", handler: "onLoadFailed", payload: "data" }, { name: "newWindow", handler: "onNewWindow", payload: "text" }, { name: "browserCommand", handler: "onBrowserCommand", payload: "text" }, { name: "downloadRequested", handler: "onDownloadRequested", payload: "data" }, { name: "downloadUpdated", handler: "onDownloadUpdated", payload: "data" }, { name: "javaScriptResult", handler: "onJavaScriptResult", payload: "data" }, { name: "scriptMessage", handler: "onScriptMessage", payload: "data" }, { name: "schemeRequest", handler: "onSchemeRequest", payload: "data" }, { name: "cookiesResult", handler: "onCookiesResult", payload: "data" }, { name: "cookiesChanged", handler: "onCookiesChanged", payload: "data" }, { name: "faviconChanged", handler: "onFaviconChanged", payload: "data" }, { name: "findResult", handler: "onFindResult", payload: "data" }, { name: "securityChanged", handler: "onSecurityChanged", payload: "data" }, { name: "linkHover", handler: "onLinkHover", payload: "text" }, { name: "contextMenu", handler: "onContextMenu", payload: "data" }, { name: "contextMenuItemClicked", handler: "onContextMenuItemClicked", payload: "data" }, { name: "sessionSaved", handler: "onSessionSaved", payload: "data" }, { name: "audioStateChanged", handler: "onAudioStateChanged", payload: "data" }, { name: "extensionsList", handler: "onExtensionsList", payload: "data" }, { name: "extensionActions", handler: "onExtensionActions", payload: "data" }, { name: "extensionsChanged", handler: "onExtensionsChanged", payload: "data" }, { name: "chromeDialog", handler: "onChromeDialog", payload: "data" }, { name: "permissionRequest", handler: "onPermissionRequest", payload: "data" }, { name: "permissionRequestDismissed", handler: "onPermissionRequestDismissed", payload: "data" }, { name: "zoomChanged", handler: "onZoomChanged", payload: "data" }, { name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
599
599
|
nativeview: [{ name: "nativeEvent", handler: "onNativeEvent", payload: "data" }, { name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
600
600
|
splitview: [{ name: "revealChanged", handler: "onRevealChanged", payload: "checked" }, { name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
601
601
|
headerbar: [{ name: "back", handler: "onBack", payload: "none" }, { name: "forward", handler: "onForward", payload: "none" }, { name: "dragStarted", handler: "onDragStarted", payload: "text" }, { name: "dragEnded", handler: "onDragEnded", payload: "none" }, { name: "dragOver", handler: "onDragOver", payload: "dragPoint" }, { name: "dropped", handler: "onDropped", payload: "dragPoint" }],
|
|
@@ -672,7 +672,7 @@ var handlerPropNames = {
|
|
|
672
672
|
tabview: ["onSelectionChanged", "onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
673
673
|
grid: ["onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
674
674
|
listview: ["onRowActivated", "onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
675
|
-
webview: ["onNavigate", "onTitleChanged", "onLoadingChanged", "onBackAvailable", "onForwardAvailable", "onLoadProgress", "onLoadFailed", "onNewWindow", "onBrowserCommand", "onDownloadRequested", "onDownloadUpdated", "onJavaScriptResult", "onScriptMessage", "onSchemeRequest", "onCookiesResult", "onCookiesChanged", "onFaviconChanged", "onFindResult", "onSecurityChanged", "onLinkHover", "onContextMenu", "onContextMenuItemClicked", "onSessionSaved", "onAudioStateChanged", "onExtensionsList", "onExtensionActions", "onExtensionsChanged", "onChromeDialog", "onPermissionRequest", "onPermissionRequestDismissed", "onZoomChanged", "onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
675
|
+
webview: ["onNavigate", "onTitleChanged", "onLoadingChanged", "onFocusChanged", "onBackAvailable", "onForwardAvailable", "onLoadProgress", "onLoadFailed", "onNewWindow", "onBrowserCommand", "onDownloadRequested", "onDownloadUpdated", "onJavaScriptResult", "onScriptMessage", "onSchemeRequest", "onCookiesResult", "onCookiesChanged", "onFaviconChanged", "onFindResult", "onSecurityChanged", "onLinkHover", "onContextMenu", "onContextMenuItemClicked", "onSessionSaved", "onAudioStateChanged", "onExtensionsList", "onExtensionActions", "onExtensionsChanged", "onChromeDialog", "onPermissionRequest", "onPermissionRequestDismissed", "onZoomChanged", "onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
676
676
|
nativeview: ["onNativeEvent", "onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
677
677
|
splitview: ["onRevealChanged", "onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
678
678
|
headerbar: ["onBack", "onForward", "onDragStarted", "onDragEnded", "onDragOver", "onDropped"],
|
|
@@ -746,7 +746,7 @@ var widgetCommands = {
|
|
|
746
746
|
tabview: [],
|
|
747
747
|
grid: [],
|
|
748
748
|
listview: [],
|
|
749
|
-
webview: ["goBack", "goForward", "reload", "stop", "executeJavaScript", "setZoom", "setUserAgent", "openDevTools", "addUserScript", "removeUserScript", "clearUserScripts", "registerScriptMessage", "unregisterScriptMessage", "respondScheme", "respondPermission", "resetPermissions", "respondDownload", "getCookies", "setCookie", "deleteCookie", "findStart", "findNext", "findPrevious", "findStop", "saveSession", "restoreSession", "setMuted", "setContextMenuItems", "listExtensions", "watchExtensions", "listExtensionActions", "readExtensionAction", "installExtension", "uninstallExtension", "setExtensionEnabled", "focus"],
|
|
749
|
+
webview: ["goBack", "goForward", "reload", "stop", "executeJavaScript", "setZoom", "setUserAgent", "openDevTools", "addUserScript", "removeUserScript", "clearUserScripts", "registerScriptMessage", "unregisterScriptMessage", "respondScheme", "respondPermission", "resetPermissions", "respondDownload", "startDownload", "pauseDownload", "resumeDownload", "cancelDownload", "getCookies", "setCookie", "deleteCookie", "findStart", "findNext", "findPrevious", "findStop", "saveSession", "restoreSession", "setMuted", "setContextMenuItems", "listExtensions", "watchExtensions", "listExtensionActions", "readExtensionAction", "triggerExtensionAction", "installExtension", "uninstallExtension", "setExtensionEnabled", "focus"],
|
|
750
750
|
nativeview: [],
|
|
751
751
|
splitview: ["revealSidebar", "concealSidebar"],
|
|
752
752
|
headerbar: [],
|
|
@@ -909,6 +909,10 @@ class Batch {
|
|
|
909
909
|
return this.ops.length;
|
|
910
910
|
}
|
|
911
911
|
}
|
|
912
|
+
var removalListeners = new Set;
|
|
913
|
+
function onNodeRemoved(listener) {
|
|
914
|
+
removalListeners.add(listener);
|
|
915
|
+
}
|
|
912
916
|
|
|
913
917
|
class NodeRegistry {
|
|
914
918
|
byId = new Map;
|
|
@@ -919,7 +923,10 @@ class NodeRegistry {
|
|
|
919
923
|
return this.byId.get(id);
|
|
920
924
|
}
|
|
921
925
|
unregister(id) {
|
|
922
|
-
this.byId.delete(id)
|
|
926
|
+
if (!this.byId.delete(id))
|
|
927
|
+
return;
|
|
928
|
+
for (const listener of removalListeners)
|
|
929
|
+
listener(id);
|
|
923
930
|
}
|
|
924
931
|
}
|
|
925
932
|
|
|
@@ -1400,7 +1407,9 @@ var hostConfig = {
|
|
|
1400
1407
|
hideTextInstance() {},
|
|
1401
1408
|
unhideTextInstance() {},
|
|
1402
1409
|
getPublicInstance: (i) => i,
|
|
1403
|
-
detachDeletedInstance() {
|
|
1410
|
+
detachDeletedInstance(inst) {
|
|
1411
|
+
registry.unregister(inst.id);
|
|
1412
|
+
},
|
|
1404
1413
|
maySuspendCommit: () => false,
|
|
1405
1414
|
preloadInstance: () => true,
|
|
1406
1415
|
startSuspendingCommit() {},
|
|
@@ -1445,6 +1454,13 @@ function dispatchSystemEvent(channel, data) {
|
|
|
1445
1454
|
globalThis.__nd_app_active = true;
|
|
1446
1455
|
else if (channel === "app.deactivate")
|
|
1447
1456
|
globalThis.__nd_app_active = false;
|
|
1457
|
+
else if (channel === "webview.engine") {
|
|
1458
|
+
const d = data;
|
|
1459
|
+
globalThis.__nd_webview_engine = {
|
|
1460
|
+
engine: d?.engine === "chromium" ? "chromium" : "system",
|
|
1461
|
+
style: d?.style === "chrome" || d?.style === "alloy" ? d.style : null
|
|
1462
|
+
};
|
|
1463
|
+
}
|
|
1448
1464
|
for (const handler of registry2().get(channel) ?? [])
|
|
1449
1465
|
handler(data);
|
|
1450
1466
|
if (channel === "notification.click") {
|
|
@@ -1553,6 +1569,12 @@ var system = {
|
|
|
1553
1569
|
}
|
|
1554
1570
|
};
|
|
1555
1571
|
var webviewEngine = {
|
|
1572
|
+
active() {
|
|
1573
|
+
return globalThis.__nd_webview_engine?.engine ?? "system";
|
|
1574
|
+
},
|
|
1575
|
+
cefStyle() {
|
|
1576
|
+
return globalThis.__nd_webview_engine?.style ?? null;
|
|
1577
|
+
},
|
|
1556
1578
|
async registerScheme(scheme, options = {}) {
|
|
1557
1579
|
await call("webviewEngine.registerScheme", {
|
|
1558
1580
|
scheme,
|
|
@@ -1947,17 +1969,61 @@ var pendingExtensions = new Map;
|
|
|
1947
1969
|
var pendingActions = new Map;
|
|
1948
1970
|
var pendingWatches = new Map;
|
|
1949
1971
|
var pendingActionState = new Map;
|
|
1972
|
+
var pendingTriggers = new Map;
|
|
1950
1973
|
var seq2 = 0;
|
|
1951
1974
|
function nextId(prefix) {
|
|
1952
1975
|
return `${prefix}${++seq2}`;
|
|
1953
1976
|
}
|
|
1954
|
-
|
|
1955
|
-
|
|
1977
|
+
var inFlight = new Map;
|
|
1978
|
+
onNodeRemoved((nodeId) => {
|
|
1979
|
+
const calls = inFlight.get(nodeId);
|
|
1980
|
+
if (!calls)
|
|
1981
|
+
return;
|
|
1982
|
+
inFlight.delete(nodeId);
|
|
1983
|
+
for (const [id, reject2] of calls)
|
|
1984
|
+
reject2(new Error(`the <webview> was removed before request ${id} was answered`));
|
|
1985
|
+
});
|
|
1986
|
+
function request(node, pending, prefix, command, args) {
|
|
1987
|
+
const id = nextId(prefix);
|
|
1956
1988
|
return new Promise((resolve2, reject2) => {
|
|
1957
|
-
|
|
1958
|
-
|
|
1989
|
+
if (!registry.get(node.id)) {
|
|
1990
|
+
reject2(new Error(`${command}: the <webview> is no longer mounted`));
|
|
1991
|
+
return;
|
|
1992
|
+
}
|
|
1993
|
+
let calls = inFlight.get(node.id);
|
|
1994
|
+
if (!calls)
|
|
1995
|
+
inFlight.set(node.id, calls = new Map);
|
|
1996
|
+
const forget = () => {
|
|
1997
|
+
pending.delete(id);
|
|
1998
|
+
calls.delete(id);
|
|
1999
|
+
if (calls.size === 0 && inFlight.get(node.id) === calls)
|
|
2000
|
+
inFlight.delete(node.id);
|
|
2001
|
+
};
|
|
2002
|
+
pending.set(id, {
|
|
2003
|
+
resolve: (value) => {
|
|
2004
|
+
forget();
|
|
2005
|
+
resolve2(value);
|
|
2006
|
+
},
|
|
2007
|
+
reject: (reason) => {
|
|
2008
|
+
forget();
|
|
2009
|
+
reject2(reason);
|
|
2010
|
+
}
|
|
2011
|
+
});
|
|
2012
|
+
calls.set(id, (reason) => {
|
|
2013
|
+
forget();
|
|
2014
|
+
reject2(reason);
|
|
2015
|
+
});
|
|
2016
|
+
try {
|
|
2017
|
+
sendCommand(node, command, { id, ...args });
|
|
2018
|
+
} catch (error) {
|
|
2019
|
+
forget();
|
|
2020
|
+
reject2(error);
|
|
2021
|
+
}
|
|
1959
2022
|
});
|
|
1960
2023
|
}
|
|
2024
|
+
function executeJavaScript(node, code, world) {
|
|
2025
|
+
return request(node, pendingEvals, "js", "executeJavaScript", world ? { code, world } : { code });
|
|
2026
|
+
}
|
|
1961
2027
|
function onJavaScriptResult(e) {
|
|
1962
2028
|
const result = e.data;
|
|
1963
2029
|
const call2 = pendingEvals.get(result.id);
|
|
@@ -1970,11 +2036,7 @@ function onJavaScriptResult(e) {
|
|
|
1970
2036
|
call2.reject(new Error(result.error ?? "executeJavaScript failed"));
|
|
1971
2037
|
}
|
|
1972
2038
|
function getCookies(node, url) {
|
|
1973
|
-
|
|
1974
|
-
return new Promise((resolve2, reject2) => {
|
|
1975
|
-
pendingCookies.set(id, { resolve: resolve2, reject: reject2 });
|
|
1976
|
-
sendCommand(node, "getCookies", url ? { id, url } : { id });
|
|
1977
|
-
});
|
|
2039
|
+
return request(node, pendingCookies, "ck", "getCookies", url ? { url } : {});
|
|
1978
2040
|
}
|
|
1979
2041
|
function onCookiesResult(e) {
|
|
1980
2042
|
const result = e.data;
|
|
@@ -1988,11 +2050,7 @@ function onCookiesResult(e) {
|
|
|
1988
2050
|
call2.reject(new Error(result.error ?? "getCookies failed"));
|
|
1989
2051
|
}
|
|
1990
2052
|
function saveSession(node) {
|
|
1991
|
-
|
|
1992
|
-
return new Promise((resolve2, reject2) => {
|
|
1993
|
-
pendingSessions.set(id, { resolve: resolve2, reject: reject2 });
|
|
1994
|
-
sendCommand(node, "saveSession", { id });
|
|
1995
|
-
});
|
|
2053
|
+
return request(node, pendingSessions, "ss", "saveSession", {});
|
|
1996
2054
|
}
|
|
1997
2055
|
function onSessionSaved(e) {
|
|
1998
2056
|
const result = e.data;
|
|
@@ -2003,11 +2061,7 @@ function onSessionSaved(e) {
|
|
|
2003
2061
|
call2.resolve(result.state ?? "");
|
|
2004
2062
|
}
|
|
2005
2063
|
function listExtensions(node) {
|
|
2006
|
-
|
|
2007
|
-
return new Promise((resolve2, reject2) => {
|
|
2008
|
-
pendingExtensions.set(id, { resolve: resolve2, reject: reject2 });
|
|
2009
|
-
sendCommand(node, "listExtensions", { id });
|
|
2010
|
-
});
|
|
2064
|
+
return request(node, pendingExtensions, "ext", "listExtensions", {});
|
|
2011
2065
|
}
|
|
2012
2066
|
function onExtensionsList(e) {
|
|
2013
2067
|
const result = e.data;
|
|
@@ -2030,20 +2084,12 @@ function setExtensionEnabled(node, extensionId, enabled) {
|
|
|
2030
2084
|
return extensionMutation(node, "setExtensionEnabled", { extensionId, enabled });
|
|
2031
2085
|
}
|
|
2032
2086
|
function extensionMutation(node, command, args) {
|
|
2033
|
-
|
|
2034
|
-
return new Promise((resolve2, reject2) => {
|
|
2035
|
-
pendingExtensions.set(id, { resolve: resolve2, reject: reject2 });
|
|
2036
|
-
sendCommand(node, command, { id, ...args });
|
|
2037
|
-
});
|
|
2087
|
+
return request(node, pendingExtensions, "ext", command, args);
|
|
2038
2088
|
}
|
|
2039
2089
|
var extensionsWatchers = [];
|
|
2040
2090
|
function watchExtensions(node, listener) {
|
|
2041
|
-
|
|
2042
|
-
return
|
|
2043
|
-
pendingWatches.set(id, { resolve: resolve2, reject: reject2 });
|
|
2044
|
-
extensionsWatchers.push(listener);
|
|
2045
|
-
sendCommand(node, "watchExtensions", { id });
|
|
2046
|
-
});
|
|
2091
|
+
extensionsWatchers.push(listener);
|
|
2092
|
+
return request(node, pendingWatches, "ext", "watchExtensions", {});
|
|
2047
2093
|
}
|
|
2048
2094
|
function onExtensionsChanged(e) {
|
|
2049
2095
|
const result = e.data;
|
|
@@ -2062,21 +2108,29 @@ function onExtensionsChanged(e) {
|
|
|
2062
2108
|
listener({ reason: result.reason ?? "" });
|
|
2063
2109
|
}
|
|
2064
2110
|
function readExtensionAction(node) {
|
|
2111
|
+
return request(node, pendingActionState, "ext", "readExtensionAction", {});
|
|
2112
|
+
}
|
|
2113
|
+
function triggerExtensionAction(node, extensionId) {
|
|
2065
2114
|
const id = nextId("ext");
|
|
2066
2115
|
return new Promise((resolve2, reject2) => {
|
|
2067
|
-
|
|
2068
|
-
sendCommand(node, "
|
|
2116
|
+
pendingTriggers.set(id, { resolve: resolve2, reject: reject2 });
|
|
2117
|
+
sendCommand(node, "triggerExtensionAction", { id, extensionId });
|
|
2069
2118
|
});
|
|
2070
2119
|
}
|
|
2071
2120
|
function listExtensionActions(node) {
|
|
2072
|
-
|
|
2073
|
-
return new Promise((resolve2, reject2) => {
|
|
2074
|
-
pendingActions.set(id, { resolve: resolve2, reject: reject2 });
|
|
2075
|
-
sendCommand(node, "listExtensionActions", { id });
|
|
2076
|
-
});
|
|
2121
|
+
return request(node, pendingActions, "ext", "listExtensionActions", {});
|
|
2077
2122
|
}
|
|
2078
2123
|
function onExtensionActions(e) {
|
|
2079
2124
|
const result = e.data;
|
|
2125
|
+
const trigger = pendingTriggers.get(result.id);
|
|
2126
|
+
if (trigger) {
|
|
2127
|
+
pendingTriggers.delete(result.id);
|
|
2128
|
+
if (result.ok)
|
|
2129
|
+
trigger.resolve();
|
|
2130
|
+
else
|
|
2131
|
+
trigger.reject(new Error(result.error ?? "triggerExtensionAction failed"));
|
|
2132
|
+
return;
|
|
2133
|
+
}
|
|
2080
2134
|
const state3 = pendingActionState.get(result.id);
|
|
2081
2135
|
if (state3) {
|
|
2082
2136
|
pendingActionState.delete(result.id);
|
|
@@ -2098,6 +2152,21 @@ function onExtensionActions(e) {
|
|
|
2098
2152
|
function setContextMenuItems(node, items) {
|
|
2099
2153
|
sendCommand(node, "setContextMenuItems", { items });
|
|
2100
2154
|
}
|
|
2155
|
+
function respondDownload(node, id, path) {
|
|
2156
|
+
sendCommand(node, "respondDownload", path ? { id, path } : { id });
|
|
2157
|
+
}
|
|
2158
|
+
function startDownload(node, url) {
|
|
2159
|
+
sendCommand(node, "startDownload", { url });
|
|
2160
|
+
}
|
|
2161
|
+
function pauseDownload(node, id) {
|
|
2162
|
+
sendCommand(node, "pauseDownload", { id });
|
|
2163
|
+
}
|
|
2164
|
+
function resumeDownload(node, id) {
|
|
2165
|
+
sendCommand(node, "resumeDownload", { id });
|
|
2166
|
+
}
|
|
2167
|
+
function cancelDownload(node, id) {
|
|
2168
|
+
sendCommand(node, "cancelDownload", { id });
|
|
2169
|
+
}
|
|
2101
2170
|
// src/dialogs.ts
|
|
2102
2171
|
var pending = new Map;
|
|
2103
2172
|
function checkAvailable(node, reject2) {
|
|
@@ -2466,8 +2535,10 @@ export {
|
|
|
2466
2535
|
useCallback,
|
|
2467
2536
|
use,
|
|
2468
2537
|
uninstallExtension,
|
|
2538
|
+
triggerExtensionAction,
|
|
2469
2539
|
system,
|
|
2470
2540
|
startTransition,
|
|
2541
|
+
startDownload,
|
|
2471
2542
|
showToast,
|
|
2472
2543
|
showTabOverview,
|
|
2473
2544
|
showAlert,
|
|
@@ -2480,11 +2551,14 @@ export {
|
|
|
2480
2551
|
saveSession,
|
|
2481
2552
|
saveFile,
|
|
2482
2553
|
revealPath,
|
|
2554
|
+
resumeDownload,
|
|
2555
|
+
respondDownload,
|
|
2483
2556
|
render,
|
|
2484
2557
|
registerExports,
|
|
2485
2558
|
recentDocuments,
|
|
2486
2559
|
readExtensionAction,
|
|
2487
2560
|
performRefresh,
|
|
2561
|
+
pauseDownload,
|
|
2488
2562
|
openPath,
|
|
2489
2563
|
openFile,
|
|
2490
2564
|
openExternal,
|
|
@@ -2523,6 +2597,7 @@ export {
|
|
|
2523
2597
|
createPool,
|
|
2524
2598
|
createContext,
|
|
2525
2599
|
clipboard,
|
|
2600
|
+
cancelDownload,
|
|
2526
2601
|
audio,
|
|
2527
2602
|
app,
|
|
2528
2603
|
Suspense2 as Suspense,
|
|
@@ -242,6 +242,7 @@ export declare namespace JSX {
|
|
|
242
242
|
label: {
|
|
243
243
|
text?: string;
|
|
244
244
|
ellipsize?: boolean;
|
|
245
|
+
ellipsizeMode?: "end" | "middle" | "start";
|
|
245
246
|
variant?: "body" | "title1" | "title2" | "title3" | "title4" | "heading" | "caption" | "captionHeading" | "monospace";
|
|
246
247
|
enabled?: boolean;
|
|
247
248
|
tooltip?: string;
|
|
@@ -952,6 +953,9 @@ export declare namespace JSX {
|
|
|
952
953
|
onLoadingChanged?: (e: {
|
|
953
954
|
checked: boolean;
|
|
954
955
|
}) => void;
|
|
956
|
+
onFocusChanged?: (e: {
|
|
957
|
+
checked: boolean;
|
|
958
|
+
}) => void;
|
|
955
959
|
onBackAvailable?: (e: {
|
|
956
960
|
checked: boolean;
|
|
957
961
|
}) => void;
|
|
@@ -29,7 +29,7 @@ export type WidgetCommandNames = {
|
|
|
29
29
|
"checkbox": "focus";
|
|
30
30
|
"radio": "focus";
|
|
31
31
|
"select": "focus";
|
|
32
|
-
"webview": "goBack" | "goForward" | "reload" | "stop" | "executeJavaScript" | "setZoom" | "setUserAgent" | "openDevTools" | "addUserScript" | "removeUserScript" | "clearUserScripts" | "registerScriptMessage" | "unregisterScriptMessage" | "respondScheme" | "respondPermission" | "resetPermissions" | "respondDownload" | "getCookies" | "setCookie" | "deleteCookie" | "findStart" | "findNext" | "findPrevious" | "findStop" | "saveSession" | "restoreSession" | "setMuted" | "setContextMenuItems" | "listExtensions" | "watchExtensions" | "listExtensionActions" | "readExtensionAction" | "installExtension" | "uninstallExtension" | "setExtensionEnabled" | "focus";
|
|
32
|
+
"webview": "goBack" | "goForward" | "reload" | "stop" | "executeJavaScript" | "setZoom" | "setUserAgent" | "openDevTools" | "addUserScript" | "removeUserScript" | "clearUserScripts" | "registerScriptMessage" | "unregisterScriptMessage" | "respondScheme" | "respondPermission" | "resetPermissions" | "respondDownload" | "startDownload" | "pauseDownload" | "resumeDownload" | "cancelDownload" | "getCookies" | "setCookie" | "deleteCookie" | "findStart" | "findNext" | "findPrevious" | "findStop" | "saveSession" | "restoreSession" | "setMuted" | "setContextMenuItems" | "listExtensions" | "watchExtensions" | "listExtensionActions" | "readExtensionAction" | "triggerExtensionAction" | "installExtension" | "uninstallExtension" | "setExtensionEnabled" | "focus";
|
|
33
33
|
"splitview": "revealSidebar" | "concealSidebar";
|
|
34
34
|
"toolbarview": "revealTopBars" | "concealTopBars";
|
|
35
35
|
"searchinput": "focus" | "activateLeadingIcon" | "activateTrailingIcon";
|
|
@@ -55,7 +55,7 @@ export declare const hostConfig: {
|
|
|
55
55
|
hideTextInstance(): void;
|
|
56
56
|
unhideTextInstance(): void;
|
|
57
57
|
getPublicInstance: (i: Instance) => Instance;
|
|
58
|
-
detachDeletedInstance(): void;
|
|
58
|
+
detachDeletedInstance(inst: Instance): void;
|
|
59
59
|
maySuspendCommit: () => boolean;
|
|
60
60
|
preloadInstance: () => boolean;
|
|
61
61
|
startSuspendingCommit(): void;
|
|
@@ -7,8 +7,8 @@ export type { SpacingScale } from "./metrics.ts";
|
|
|
7
7
|
export { getAppDataDir, ensureAppDataDir } from "./paths.ts";
|
|
8
8
|
export { defineNativeComponent } from "./native-component.ts";
|
|
9
9
|
export type { NativeComponentOptions, NativeComponentProps, NativeComponentRef } from "./native-component.ts";
|
|
10
|
-
export { executeJavaScript, onJavaScriptResult, getCookies, onCookiesResult, saveSession, onSessionSaved, setContextMenuItems, listExtensions, onExtensionsList, listExtensionActions, readExtensionAction, onExtensionActions, watchExtensions, onExtensionsChanged, installExtension, uninstallExtension, setExtensionEnabled, } from "./webview.ts";
|
|
11
|
-
export type { Cookie, ContextMenuContext, ContextMenuItem, ContextMenuItemClick, ExtensionAction, ExtensionActionState, ExtensionsChange, InstalledExtension, } from "./webview.ts";
|
|
10
|
+
export { executeJavaScript, onJavaScriptResult, getCookies, onCookiesResult, saveSession, onSessionSaved, setContextMenuItems, listExtensions, onExtensionsList, listExtensionActions, readExtensionAction, triggerExtensionAction, onExtensionActions, watchExtensions, onExtensionsChanged, installExtension, uninstallExtension, setExtensionEnabled, respondDownload, startDownload, pauseDownload, resumeDownload, cancelDownload, } from "./webview.ts";
|
|
11
|
+
export type { Cookie, DownloadRequest, DownloadState, DownloadUpdate, ContextMenuContext, ContextMenuItem, ContextMenuItemClick, ExtensionAction, ExtensionActionState, ExtensionsChange, InstalledExtension, } from "./webview.ts";
|
|
12
12
|
export { showAlert, openFile, saveFile, showAbout, showTabOverview, onAlertResult, onOpenFileResult, onSaveFileResult, } from "./dialogs.ts";
|
|
13
13
|
export type { DialogButton, ShowAlertOptions, AlertResult, OpenFileOptions as WindowOpenFileOptions, OpenFileResult as WindowOpenFileResult, SaveFileOptions as WindowSaveFileOptions, SaveFileResult as WindowSaveFileResult, ShowAboutOptions, } from "./dialogs.ts";
|
|
14
14
|
export { showToast, dismissToast, onToastButtonClicked, onToastDismissed } from "./toast.ts";
|
|
@@ -12,6 +12,7 @@ export interface NodeRecord {
|
|
|
12
12
|
props: Record<string, unknown>;
|
|
13
13
|
handlers: Record<string, Handler>;
|
|
14
14
|
}
|
|
15
|
+
export declare function onNodeRemoved(listener: (id: number) => void): void;
|
|
15
16
|
export declare class NodeRegistry {
|
|
16
17
|
private byId;
|
|
17
18
|
register(rec: NodeRecord): void;
|
|
@@ -3,6 +3,10 @@ declare global {
|
|
|
3
3
|
var __nd_system_events: Map<string, Set<SystemEventHandler>> | undefined;
|
|
4
4
|
var __nd_notification_data: Map<string, unknown> | undefined;
|
|
5
5
|
var __nd_app_active: boolean | undefined;
|
|
6
|
+
var __nd_webview_engine: {
|
|
7
|
+
engine: WebviewEngineName;
|
|
8
|
+
style: CefStyle;
|
|
9
|
+
} | undefined;
|
|
6
10
|
}
|
|
7
11
|
/** Wired up by renderer.ts from `ndp.onSystemEvent()` — not part of the public API. */
|
|
8
12
|
export declare function dispatchSystemEvent(channel: string, data: unknown): void;
|
|
@@ -141,8 +145,29 @@ export interface RegisterSchemeOptions {
|
|
|
141
145
|
*/
|
|
142
146
|
secure?: boolean;
|
|
143
147
|
}
|
|
148
|
+
/** Which web engine the host actually started. */
|
|
149
|
+
export type WebviewEngineName = "chromium" | "system";
|
|
150
|
+
/** CEF's browser style, or null when the host is not running CEF at all. */
|
|
151
|
+
export type CefStyle = "chrome" | "alloy" | null;
|
|
144
152
|
/** Engine-level `<webview>` configuration. `core:webview` is default-granted. */
|
|
145
153
|
export declare const webviewEngine: {
|
|
154
|
+
/**
|
|
155
|
+
* Which engine this host actually started, synchronously. Asking for
|
|
156
|
+
* `chromium` is not the same as getting it: a host with no usable CEF
|
|
157
|
+
* distribution falls back to the system engine, and before this the only
|
|
158
|
+
* way to tell was to read `navigator.userAgent` out of a live view.
|
|
159
|
+
*
|
|
160
|
+
* Backed by the host's `webview.engine` stream, replayed right after the
|
|
161
|
+
* handshake like `app.isActive()`, so it is correct from the first render.
|
|
162
|
+
* "system" against a host that predates the stream.
|
|
163
|
+
*/
|
|
164
|
+
active(): WebviewEngineName;
|
|
165
|
+
/**
|
|
166
|
+
* CEF's browser style: "chrome" (Chromium's own browser runtime, which is
|
|
167
|
+
* what runs the extension system) or "alloy". Null whenever `active()` is
|
|
168
|
+
* not "chromium".
|
|
169
|
+
*/
|
|
170
|
+
cefStyle(): CefStyle;
|
|
146
171
|
/**
|
|
147
172
|
* Registers a custom URI scheme (`crx`, `app`, …) with the web engine.
|
|
148
173
|
* Requests for it arrive as the `schemeRequest` event on the `<webview>`
|
|
@@ -70,6 +70,7 @@ export interface ExtensionActionState {
|
|
|
70
70
|
enabled: boolean;
|
|
71
71
|
}
|
|
72
72
|
export declare function readExtensionAction(node: NdNodeRef<"webview">): Promise<ExtensionActionState>;
|
|
73
|
+
export declare function triggerExtensionAction(node: NdNodeRef<"webview">, extensionId: string): Promise<void>;
|
|
73
74
|
export declare function listExtensionActions(node: NdNodeRef<"webview">): Promise<ExtensionAction[]>;
|
|
74
75
|
export declare function onExtensionActions(e: {
|
|
75
76
|
data: unknown;
|
|
@@ -96,3 +97,23 @@ export interface ContextMenuItemClick {
|
|
|
96
97
|
wasChecked?: boolean;
|
|
97
98
|
}
|
|
98
99
|
export declare function setContextMenuItems(node: NdNodeRef<"webview">, items: ContextMenuItem[]): void;
|
|
100
|
+
export interface DownloadRequest {
|
|
101
|
+
id?: string;
|
|
102
|
+
url: string;
|
|
103
|
+
suggestedFilename?: string;
|
|
104
|
+
}
|
|
105
|
+
export type DownloadState = "running" | "done" | "failed" | "cancelled";
|
|
106
|
+
export interface DownloadUpdate {
|
|
107
|
+
id: string;
|
|
108
|
+
state: DownloadState;
|
|
109
|
+
received: number;
|
|
110
|
+
total: number;
|
|
111
|
+
path: string;
|
|
112
|
+
speed?: number;
|
|
113
|
+
paused?: boolean;
|
|
114
|
+
}
|
|
115
|
+
export declare function respondDownload(node: NdNodeRef<"webview">, id: string, path?: string): void;
|
|
116
|
+
export declare function startDownload(node: NdNodeRef<"webview">, url: string): void;
|
|
117
|
+
export declare function pauseDownload(node: NdNodeRef<"webview">, id: string): void;
|
|
118
|
+
export declare function resumeDownload(node: NdNodeRef<"webview">, id: string): void;
|
|
119
|
+
export declare function cancelDownload(node: NdNodeRef<"webview">, id: string): void;
|