local-operator-ui 0.42.1 → 0.42.2
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/out/main/index.js +496 -2
- package/out/renderer/assets/{_basePickBy-bSYERMaj.js → _basePickBy-BA9uepHv.js} +1 -1
- package/out/renderer/assets/{_baseUniq-XXFAU1GI.js → _baseUniq-CVACH15m.js} +1 -1
- package/out/renderer/assets/{agent-details-page-FzlOCzmB.js → agent-details-page-xNTNJ7kP.js} +2 -2
- package/out/renderer/assets/{agent-hub-page-V0BSbGBu.js → agent-hub-page-B-zE3Ln0.js} +2 -2
- package/out/renderer/assets/{agents-page-DHu2xkX8.js → agents-page-BeZQ1S7f.js} +3 -3
- package/out/renderer/assets/approvalsOverlay-BBr6f98F.css +1 -0
- package/out/renderer/assets/approvalsOverlay-BmSmF8Ga.js +1 -0
- package/out/renderer/assets/{arc-DJDaWivU.js → arc-DYIy54Kn.js} +1 -1
- package/out/renderer/assets/architectureDiagram-IEHRJDOE-CmfaKw-J.js +36 -0
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-BGcgINKS.js → blockDiagram-JOT3LUYC-bQf90tJr.js} +2 -2
- package/out/renderer/assets/{book-open-CTVKA12r.js → book-open-iGajLTwQ.js} +1 -1
- package/out/renderer/assets/browser-page-B63Z8oE2.js +1 -0
- package/out/renderer/assets/browser-webauthn-prompt-DX5l4JNA.js +1 -0
- package/out/renderer/assets/{building-2-Bky--3rC.js → building-2-bjja6JTC.js} +1 -1
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-Dxg4lYU_.js → c4Diagram-VJAJSXHY-BxIFIYVW.js} +2 -2
- package/out/renderer/assets/channel-Blax8LQd.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-Bbfr_o8o.js → chunk-4BMEZGHF-C2LQ_mlD.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-CnzwrRQc.js → chunk-A2AXSNBT-BKH53MbC.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-DIq6FzSQ.js → chunk-AEK57VVT-CuB5dlAL.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-BhQgOD8q.js → chunk-D6G4REZN-CECeg3Wn.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-1bt5bhUU.js → chunk-RZ5BOZE2-D-zkJWYc.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-BV47b5FV.js → chunk-XZIHB7SX-DstteBuH.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-DA1IQG_V.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-DA1IQG_V.js +1 -0
- package/out/renderer/assets/clone-mVVuLCMS.js +1 -0
- package/out/renderer/assets/{console-mirror-CfrfbIAp.js → console-mirror-gqAdwBWl.js} +2 -2
- package/out/renderer/assets/consoleCapture-BQQVRcXT.js +1 -0
- package/out/renderer/assets/{conversation-input-sync-DKNOMiIp.js → conversation-input-sync-grry80zS.js} +41 -41
- package/out/renderer/assets/dagre-OKDRZEBW-D6RBxeJd.js +4 -0
- package/out/renderer/assets/diagram-SSKATNLV--xUREIPn.js +43 -0
- package/out/renderer/assets/diagram-VNBRO52H-BYjZ86BM.js +24 -0
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-jChbtQ8s.js → erDiagram-Q7BY3M3F-CmajcoOO.js} +2 -2
- package/out/renderer/assets/{error-boundary-CQf4hj53.js → error-boundary-DfTTKe65.js} +3 -3
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-C-ETkl-L.js → flowDiagram-4HSFHLVR-CtQab7ap.js} +2 -2
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-D42KlmKC.js → ganttDiagram-APWFNJXF-CuKez3d0.js} +2 -2
- package/out/renderer/assets/gitGraphDiagram-7IBYFJ6S-D9QOaWwN.js +65 -0
- package/out/renderer/assets/{graph-BdWT-wGp.js → graph-Ccifoj7G.js} +1 -1
- package/out/renderer/assets/{hash-C5NRsgoq.js → hash-EZ0d40pW.js} +1 -1
- package/out/renderer/assets/{heart-B_TWxEVI.js → heart-Bo3ZudoI.js} +1 -1
- package/out/renderer/assets/index-ByZv232u.css +1 -0
- package/out/renderer/assets/index-CLJ4-1jd.js +1 -0
- package/out/renderer/assets/index-DXk6NfLu.js +55 -0
- package/out/renderer/assets/index-Dw4hyitu.js +7 -0
- package/out/renderer/assets/{index-DiHe1x_2.js → index-LBzSehKd.js} +30 -30
- package/out/renderer/assets/infoDiagram-PH2N3AL5-DrTRSok5.js +2 -0
- package/out/renderer/assets/installer-B7DhTrnG.js +1 -0
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-Dvj6m4R3.js → journeyDiagram-U35MCT3I-YTjOSo-b.js} +2 -2
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-Dcs6Y93q.js → kanban-definition-NDS4AKOZ-C1UmNEaT.js} +4 -4
- package/out/renderer/assets/{layout--rr1tBJG.js → layout-CWPZ7noV.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-bX8ZD1oF.js → legacy-agents-page-ikCownYN.js} +2 -2
- package/out/renderer/assets/library-page-DBSSkZvn.js +157 -0
- package/out/renderer/assets/{mermaid.core-DlGo2U0C.js → mermaid.core-B_nZt27J.js} +5 -5
- package/out/renderer/assets/mesh-page-CgjL4HIw.js +1 -0
- package/out/renderer/assets/messages-Bswe4yCX.js +3 -0
- package/out/renderer/assets/mindmap-definition-ALO5MXBD-D-Y3n0RT.js +95 -0
- package/out/renderer/assets/mini-BdCfujvn.js +1 -0
- package/out/renderer/assets/{notebook-pen-BhmcgRiW.js → notebook-pen-BvZPJ7Yv.js} +1 -1
- package/out/renderer/assets/org-access-C1u_2VVY.js +1 -0
- package/out/renderer/assets/{org-surface-gate-BpVvnvxX.js → org-surface-gate-CyIC6H59.js} +1 -1
- package/out/renderer/assets/{page-header-rgKs_qEp.js → page-header-C9IFgiIB.js} +1 -1
- package/out/renderer/assets/{path-utils-Ch7GC1fh.js → path-utils-DC6z9Ymz.js} +17 -17
- package/out/renderer/assets/pieDiagram-IB7DONF6-BJ2PZoWa.js +30 -0
- package/out/renderer/assets/{projects-page-BQd1Mkfd.js → projects-page-CwwrR-j7.js} +2 -2
- package/out/renderer/assets/{publication-validation-DyFQAbl6.js → publication-validation-DAffiuLy.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-wWLUIv_7.js → quadrantDiagram-7GDLP6J5-Dpr0N86G.js} +2 -2
- package/out/renderer/assets/{radar-MK3ICKWK-DD77Iyne.js → radar-MK3ICKWK-CwLLK6fK.js} +1 -1
- package/out/renderer/assets/radient-auth-buttons-DN7K_uGZ.js +1 -0
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-Bu415aDm.js → requirementDiagram-KVF5MWMF-LI2fP6nJ.js} +2 -2
- package/out/renderer/assets/sankeyDiagram-QLVOVGJD-uUOWgFO1.js +10 -0
- package/out/renderer/assets/{schedules-page-BbKsER5C.js → schedules-page-Cf1PQGDR.js} +2 -2
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-BTO-WEKG.js → sequenceDiagram-X6HHIX6F-DperbqVG.js} +2 -2
- package/out/renderer/assets/{settings-page-qICF0iah.js → settings-page-CrnST8YF.js} +3 -3
- package/out/renderer/assets/smartart-qEAWtDlk.js +1 -0
- package/out/renderer/assets/stateDiagram-DGXRK772-RvRbNkSX.js +1 -0
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-fK1yLl-v.js +1 -0
- package/out/renderer/assets/{team-bridge-page-bhH2QlXH.js → team-bridge-page-BgcLwc5M.js} +2 -2
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-DcGupo97.js → timeline-definition-BDJGKUSR-CeQ3AsWj.js} +2 -2
- package/out/renderer/assets/{use-download-agent-mutation-DFoPvSHB.js → use-download-agent-mutation-C_zDZ6-1.js} +2 -2
- package/out/renderer/assets/{use-session-snapshot-BTmPQFBS.js → use-session-snapshot-BMDB4uZ0.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-Bqjodw42.js → xychartDiagram-VJFVF3MP-C6-d6maF.js} +5 -5
- package/out/renderer/browser-approvals-overlay.html +40 -0
- package/out/renderer/console-capture.html +6 -5
- package/out/renderer/index.html +8 -7
- package/out/renderer/installer.html +5 -4
- package/out/renderer/mini.html +8 -7
- package/package.json +6 -4
- package/out/renderer/assets/architectureDiagram-IEHRJDOE-BnQwEGXh.js +0 -36
- package/out/renderer/assets/browser-page-DFFwHX_q.js +0 -1
- package/out/renderer/assets/browser-webauthn-prompt-BWCI9wPS.js +0 -1
- package/out/renderer/assets/channel-EkPte-cJ.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-CFmWhsn7.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-CFmWhsn7.js +0 -1
- package/out/renderer/assets/clone-kXBnCGzD.js +0 -1
- package/out/renderer/assets/consoleCapture-BFG3Xbps.js +0 -1
- package/out/renderer/assets/dagre-OKDRZEBW-DA1nw5sl.js +0 -4
- package/out/renderer/assets/diagram-SSKATNLV-CVVTgWt7.js +0 -43
- package/out/renderer/assets/diagram-VNBRO52H-DHTfzrp0.js +0 -24
- package/out/renderer/assets/gitGraphDiagram-7IBYFJ6S-P9nmqR2u.js +0 -65
- package/out/renderer/assets/index-CdcfcuWL.js +0 -7
- package/out/renderer/assets/index-CgLFXaCJ.js +0 -57
- package/out/renderer/assets/index-CjtdK8OG.css +0 -1
- package/out/renderer/assets/index-uHBz6pD4.js +0 -1
- package/out/renderer/assets/infoDiagram-PH2N3AL5-CGwg5naH.js +0 -2
- package/out/renderer/assets/installer-BPsqzY3G.js +0 -1
- package/out/renderer/assets/library-page-DeVhJsuP.js +0 -157
- package/out/renderer/assets/mesh-page-BOHX8DXw.js +0 -1
- package/out/renderer/assets/mindmap-definition-ALO5MXBD-D2k6gjX2.js +0 -95
- package/out/renderer/assets/mini-D58TB08i.js +0 -1
- package/out/renderer/assets/org-access-BIqG4bO9.js +0 -1
- package/out/renderer/assets/pieDiagram-IB7DONF6-TkoS-yEQ.js +0 -30
- package/out/renderer/assets/radient-auth-buttons-DOUeYctr.js +0 -1
- package/out/renderer/assets/sankeyDiagram-QLVOVGJD-DicsIJ4H.js +0 -10
- package/out/renderer/assets/smartart-drXgC4cZ.js +0 -1
- package/out/renderer/assets/stateDiagram-DGXRK772-DRBkBLBL.js +0 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CCFNyg2W.js +0 -1
package/out/main/index.js
CHANGED
|
@@ -32054,6 +32054,408 @@ class ApprovalStore {
|
|
|
32054
32054
|
);
|
|
32055
32055
|
}
|
|
32056
32056
|
}
|
|
32057
|
+
const APPROVALS_CARD_MAX_WIDTH = 352;
|
|
32058
|
+
const APPROVALS_CARD_MAX_HEIGHT = 480;
|
|
32059
|
+
const APPROVALS_CARD_MIN_HEIGHT = 96;
|
|
32060
|
+
const APPROVALS_CARD_INSET = 8;
|
|
32061
|
+
const APPROVALS_CARD_PAD = 8;
|
|
32062
|
+
function integer(value) {
|
|
32063
|
+
return Math.round(value);
|
|
32064
|
+
}
|
|
32065
|
+
function approvalsCardBoundsFor(input) {
|
|
32066
|
+
const pad = input.opaque === true ? 0 : APPROVALS_CARD_PAD;
|
|
32067
|
+
const inset = input.opaque === true ? 0 : APPROVALS_CARD_INSET;
|
|
32068
|
+
const content = input.contentRect;
|
|
32069
|
+
if (!Number.isFinite(content.x) || !Number.isFinite(content.y) || !Number.isFinite(content.width) || !Number.isFinite(content.height) || content.width <= 0 || content.height <= 0) {
|
|
32070
|
+
return null;
|
|
32071
|
+
}
|
|
32072
|
+
const width = Math.min(
|
|
32073
|
+
APPROVALS_CARD_MAX_WIDTH,
|
|
32074
|
+
Math.floor(content.width - 2 * pad)
|
|
32075
|
+
);
|
|
32076
|
+
if (width <= 0) return null;
|
|
32077
|
+
const ceiling = Math.min(
|
|
32078
|
+
APPROVALS_CARD_MAX_HEIGHT,
|
|
32079
|
+
Math.floor(content.height - 2 * pad)
|
|
32080
|
+
);
|
|
32081
|
+
if (ceiling < APPROVALS_CARD_MIN_HEIGHT) return null;
|
|
32082
|
+
const natural = Number.isFinite(input.naturalHeight) ? input.naturalHeight : APPROVALS_CARD_MIN_HEIGHT;
|
|
32083
|
+
const height = Math.min(
|
|
32084
|
+
ceiling,
|
|
32085
|
+
Math.max(APPROVALS_CARD_MIN_HEIGHT, Math.ceil(natural))
|
|
32086
|
+
);
|
|
32087
|
+
const viewWidth = width + 2 * pad;
|
|
32088
|
+
const viewHeight = height + 2 * pad;
|
|
32089
|
+
const viewX = integer(content.x + content.width - inset - width - pad);
|
|
32090
|
+
const viewY = integer(content.y + content.height - inset - height - pad);
|
|
32091
|
+
const view = {
|
|
32092
|
+
x: viewX,
|
|
32093
|
+
y: viewY,
|
|
32094
|
+
width: viewWidth,
|
|
32095
|
+
height: viewHeight
|
|
32096
|
+
};
|
|
32097
|
+
if (view.x < content.x || view.y < content.y || view.x + view.width > content.x + content.width || view.y + view.height > content.y + content.height) {
|
|
32098
|
+
return null;
|
|
32099
|
+
}
|
|
32100
|
+
return {
|
|
32101
|
+
view,
|
|
32102
|
+
card: {
|
|
32103
|
+
x: view.x + pad,
|
|
32104
|
+
y: view.y + pad,
|
|
32105
|
+
width,
|
|
32106
|
+
height
|
|
32107
|
+
},
|
|
32108
|
+
width,
|
|
32109
|
+
height,
|
|
32110
|
+
pad
|
|
32111
|
+
};
|
|
32112
|
+
}
|
|
32113
|
+
const APPROVALS_OVERLAY_S6A_ENV = "LOCAL_OPERATOR_UI_BROWSER_APPROVALS_OVERLAY_S6A";
|
|
32114
|
+
const TRANSPARENT = "#00000000";
|
|
32115
|
+
const OPAQUE = "#1b1f24";
|
|
32116
|
+
function approvalsOverlayEnabled(env) {
|
|
32117
|
+
return env[APPROVALS_OVERLAY_S6A_ENV] === "1";
|
|
32118
|
+
}
|
|
32119
|
+
function approvalsExpiryDelay(entries, now = Date.now()) {
|
|
32120
|
+
if (entries.length === 0) return null;
|
|
32121
|
+
return Math.max(
|
|
32122
|
+
0,
|
|
32123
|
+
Math.min(...entries.map((entry) => entry.expiresAt)) - now
|
|
32124
|
+
);
|
|
32125
|
+
}
|
|
32126
|
+
function approvalsDocumentUrl(documentUrl, count, theme, opaque) {
|
|
32127
|
+
try {
|
|
32128
|
+
const url = new URL(documentUrl);
|
|
32129
|
+
if (count > 0) url.searchParams.set("count", String(count));
|
|
32130
|
+
url.searchParams.set("theme", theme);
|
|
32131
|
+
if (opaque) url.searchParams.set("opaque", "1");
|
|
32132
|
+
return url.toString();
|
|
32133
|
+
} catch {
|
|
32134
|
+
return documentUrl;
|
|
32135
|
+
}
|
|
32136
|
+
}
|
|
32137
|
+
class ApprovalsOverlayController {
|
|
32138
|
+
window;
|
|
32139
|
+
documentUrl;
|
|
32140
|
+
opaque;
|
|
32141
|
+
theme;
|
|
32142
|
+
log;
|
|
32143
|
+
view;
|
|
32144
|
+
childListeners;
|
|
32145
|
+
pending;
|
|
32146
|
+
ready;
|
|
32147
|
+
visible;
|
|
32148
|
+
failedReason;
|
|
32149
|
+
disposed;
|
|
32150
|
+
naturalHeight;
|
|
32151
|
+
layout;
|
|
32152
|
+
bounds;
|
|
32153
|
+
constructor(deps) {
|
|
32154
|
+
this.window = deps.window;
|
|
32155
|
+
this.documentUrl = deps.documentUrl;
|
|
32156
|
+
this.opaque = deps.opaque === true;
|
|
32157
|
+
this.theme = deps.theme ?? "dark";
|
|
32158
|
+
this.log = deps.log ?? (() => {
|
|
32159
|
+
});
|
|
32160
|
+
this.view = null;
|
|
32161
|
+
this.childListeners = [];
|
|
32162
|
+
this.pending = 0;
|
|
32163
|
+
this.ready = false;
|
|
32164
|
+
this.visible = false;
|
|
32165
|
+
this.failedReason = null;
|
|
32166
|
+
this.disposed = false;
|
|
32167
|
+
this.naturalHeight = APPROVALS_CARD_MIN_HEIGHT;
|
|
32168
|
+
this.layout = {
|
|
32169
|
+
presented: false,
|
|
32170
|
+
contentRect: null,
|
|
32171
|
+
revision: 0
|
|
32172
|
+
};
|
|
32173
|
+
this.bounds = null;
|
|
32174
|
+
this.ensureChild();
|
|
32175
|
+
}
|
|
32176
|
+
/** The live queue's count. Zero hides; a positive count auto-presents. */
|
|
32177
|
+
setPending(count) {
|
|
32178
|
+
if (this.disposed) return;
|
|
32179
|
+
this.pending = Math.max(0, Math.floor(Number.isFinite(count) ? count : 0));
|
|
32180
|
+
if (this.pending === 0) {
|
|
32181
|
+
this.hide();
|
|
32182
|
+
return;
|
|
32183
|
+
}
|
|
32184
|
+
this.updateCount();
|
|
32185
|
+
this.maybeShow();
|
|
32186
|
+
}
|
|
32187
|
+
/** The registry's copied layout snapshot, after every page layout pass. */
|
|
32188
|
+
onLayout(snapshot2) {
|
|
32189
|
+
if (this.disposed) return;
|
|
32190
|
+
this.layout = {
|
|
32191
|
+
presented: snapshot2.presented,
|
|
32192
|
+
contentRect: snapshot2.contentRect ? { ...snapshot2.contentRect } : null,
|
|
32193
|
+
revision: snapshot2.revision
|
|
32194
|
+
};
|
|
32195
|
+
if (!snapshot2.presented || !snapshot2.contentRect) {
|
|
32196
|
+
this.hide();
|
|
32197
|
+
return;
|
|
32198
|
+
}
|
|
32199
|
+
if (this.pending > 0) this.maybeShow();
|
|
32200
|
+
}
|
|
32201
|
+
facts() {
|
|
32202
|
+
const view = this.view;
|
|
32203
|
+
const children = this.window.isDestroyed() ? [] : this.window.contentView.children;
|
|
32204
|
+
const index = view ? children.indexOf(view) : -1;
|
|
32205
|
+
let focused = null;
|
|
32206
|
+
try {
|
|
32207
|
+
focused = electron.webContents.getFocusedWebContents()?.id ?? null;
|
|
32208
|
+
} catch {
|
|
32209
|
+
focused = null;
|
|
32210
|
+
}
|
|
32211
|
+
return {
|
|
32212
|
+
pending: this.pending,
|
|
32213
|
+
presented: this.layout.presented,
|
|
32214
|
+
contentRect: this.layout.contentRect,
|
|
32215
|
+
ready: this.ready,
|
|
32216
|
+
visible: this.visible,
|
|
32217
|
+
failedReason: this.failedReason,
|
|
32218
|
+
bounds: this.bounds,
|
|
32219
|
+
childIndex: index,
|
|
32220
|
+
childCount: children.length,
|
|
32221
|
+
childWebContentsId: view ? view.webContents.id : null,
|
|
32222
|
+
focusedWebContentsId: focused,
|
|
32223
|
+
documentUrl: this.documentUrl,
|
|
32224
|
+
opaque: this.opaque
|
|
32225
|
+
};
|
|
32226
|
+
}
|
|
32227
|
+
dispose(reason = "dispose") {
|
|
32228
|
+
if (this.disposed) return;
|
|
32229
|
+
this.disposed = true;
|
|
32230
|
+
this.visible = false;
|
|
32231
|
+
this.ready = false;
|
|
32232
|
+
this.releaseView(reason);
|
|
32233
|
+
}
|
|
32234
|
+
ensureChild() {
|
|
32235
|
+
if (this.view || this.failedReason !== null || this.disposed) return;
|
|
32236
|
+
this.createChild();
|
|
32237
|
+
}
|
|
32238
|
+
maybeShow() {
|
|
32239
|
+
if (this.disposed || this.failedReason !== null || this.pending <= 0 || !this.layout.presented || !this.layout.contentRect) {
|
|
32240
|
+
this.hide();
|
|
32241
|
+
return;
|
|
32242
|
+
}
|
|
32243
|
+
this.ensureChild();
|
|
32244
|
+
if (!this.view || !this.ready) return;
|
|
32245
|
+
this.applyBounds();
|
|
32246
|
+
}
|
|
32247
|
+
applyBounds() {
|
|
32248
|
+
const view = this.view;
|
|
32249
|
+
if (!view || !this.layout.contentRect) return;
|
|
32250
|
+
const bounds = approvalsCardBoundsFor({
|
|
32251
|
+
contentRect: this.layout.contentRect,
|
|
32252
|
+
naturalHeight: this.naturalHeight,
|
|
32253
|
+
opaque: this.opaque
|
|
32254
|
+
});
|
|
32255
|
+
this.bounds = bounds;
|
|
32256
|
+
if (!bounds) {
|
|
32257
|
+
this.hide();
|
|
32258
|
+
return;
|
|
32259
|
+
}
|
|
32260
|
+
try {
|
|
32261
|
+
const current = view.getBounds();
|
|
32262
|
+
if (current.width !== bounds.view.width || current.height !== bounds.view.height) {
|
|
32263
|
+
this.rebuildAt(bounds);
|
|
32264
|
+
return;
|
|
32265
|
+
}
|
|
32266
|
+
view.setBounds(bounds.view);
|
|
32267
|
+
const children = this.window.contentView.children;
|
|
32268
|
+
if (children[children.length - 1] !== view) {
|
|
32269
|
+
this.window.contentView.addChildView(view);
|
|
32270
|
+
}
|
|
32271
|
+
view.setVisible(true);
|
|
32272
|
+
this.visible = true;
|
|
32273
|
+
} catch (error) {
|
|
32274
|
+
this.fail(`bounds_apply_failed:${String(error)}`);
|
|
32275
|
+
}
|
|
32276
|
+
}
|
|
32277
|
+
rebuildAt(bounds) {
|
|
32278
|
+
this.releaseView("resize");
|
|
32279
|
+
this.visible = false;
|
|
32280
|
+
this.ready = false;
|
|
32281
|
+
this.bounds = bounds;
|
|
32282
|
+
this.createChild();
|
|
32283
|
+
const view = this.view;
|
|
32284
|
+
if (!view) return;
|
|
32285
|
+
view.setBounds(bounds.view);
|
|
32286
|
+
view.setVisible(true);
|
|
32287
|
+
this.visible = true;
|
|
32288
|
+
}
|
|
32289
|
+
releaseView(reason) {
|
|
32290
|
+
const view = this.view;
|
|
32291
|
+
this.view = null;
|
|
32292
|
+
for (const remove of this.childListeners.splice(0)) remove();
|
|
32293
|
+
if (!view) return;
|
|
32294
|
+
try {
|
|
32295
|
+
if (!view.webContents.isDestroyed()) view.webContents.close();
|
|
32296
|
+
} catch {
|
|
32297
|
+
}
|
|
32298
|
+
try {
|
|
32299
|
+
this.window.contentView.removeChildView(view);
|
|
32300
|
+
} catch {
|
|
32301
|
+
}
|
|
32302
|
+
this.log(`[browser] approvals overlay child released: ${reason}`);
|
|
32303
|
+
}
|
|
32304
|
+
createChild() {
|
|
32305
|
+
let view;
|
|
32306
|
+
try {
|
|
32307
|
+
const partition = `approvals-overlay-${node_crypto.randomUUID()}`;
|
|
32308
|
+
const childSession = electron.session.fromPartition(partition);
|
|
32309
|
+
childSession.setPermissionRequestHandler(
|
|
32310
|
+
(_contents, _permission, callback) => callback(false)
|
|
32311
|
+
);
|
|
32312
|
+
childSession.setPermissionCheckHandler(() => false);
|
|
32313
|
+
childSession.on("will-download", (event) => {
|
|
32314
|
+
event.preventDefault();
|
|
32315
|
+
});
|
|
32316
|
+
view = new electron.WebContentsView({
|
|
32317
|
+
webPreferences: {
|
|
32318
|
+
partition,
|
|
32319
|
+
sandbox: true,
|
|
32320
|
+
contextIsolation: true,
|
|
32321
|
+
nodeIntegration: false,
|
|
32322
|
+
webSecurity: true,
|
|
32323
|
+
allowRunningInsecureContent: false,
|
|
32324
|
+
// The document's own module measures itself and paints the count;
|
|
32325
|
+
// there is still no preload, no exposed IPC and no focus path.
|
|
32326
|
+
javascript: true,
|
|
32327
|
+
backgroundThrottling: false
|
|
32328
|
+
}
|
|
32329
|
+
});
|
|
32330
|
+
view.webContents.setWindowOpenHandler(() => ({ action: "deny" }));
|
|
32331
|
+
const allow = approvalsDocumentUrl(
|
|
32332
|
+
this.documentUrl,
|
|
32333
|
+
this.pending,
|
|
32334
|
+
this.theme,
|
|
32335
|
+
this.opaque
|
|
32336
|
+
);
|
|
32337
|
+
const base = (() => {
|
|
32338
|
+
try {
|
|
32339
|
+
const url = new URL(allow);
|
|
32340
|
+
url.search = "";
|
|
32341
|
+
return url.toString();
|
|
32342
|
+
} catch {
|
|
32343
|
+
return allow;
|
|
32344
|
+
}
|
|
32345
|
+
})();
|
|
32346
|
+
view.webContents.on("will-navigate", (event, url) => {
|
|
32347
|
+
const target2 = url.split("?")[0];
|
|
32348
|
+
if (target2 !== base) event.preventDefault();
|
|
32349
|
+
});
|
|
32350
|
+
view.webContents.on("will-redirect", (event, url) => {
|
|
32351
|
+
const target2 = url.split("?")[0];
|
|
32352
|
+
if (target2 !== base) event.preventDefault();
|
|
32353
|
+
});
|
|
32354
|
+
view.setBackgroundColor(this.opaque ? OPAQUE : TRANSPARENT);
|
|
32355
|
+
this.window.contentView.addChildView(view);
|
|
32356
|
+
const initial = this.bounds?.view ?? {
|
|
32357
|
+
x: 0,
|
|
32358
|
+
y: 0,
|
|
32359
|
+
width: 0,
|
|
32360
|
+
height: 0
|
|
32361
|
+
};
|
|
32362
|
+
view.setBounds(initial);
|
|
32363
|
+
view.setVisible(this.bounds !== null);
|
|
32364
|
+
this.view = view;
|
|
32365
|
+
this.ready = false;
|
|
32366
|
+
const onFinish = () => {
|
|
32367
|
+
this.ready = true;
|
|
32368
|
+
this.measureAndShow();
|
|
32369
|
+
};
|
|
32370
|
+
const onFail = (_event, code, description) => {
|
|
32371
|
+
this.fail(`load_failed:${code}:${description}`);
|
|
32372
|
+
};
|
|
32373
|
+
view.webContents.on("did-finish-load", onFinish);
|
|
32374
|
+
view.webContents.on("did-fail-load", onFail);
|
|
32375
|
+
this.childListeners.push(
|
|
32376
|
+
() => view.webContents.removeListener("did-finish-load", onFinish)
|
|
32377
|
+
);
|
|
32378
|
+
this.childListeners.push(
|
|
32379
|
+
() => view.webContents.removeListener("did-fail-load", onFail)
|
|
32380
|
+
);
|
|
32381
|
+
void view.webContents.loadURL(allow).catch((error) => {
|
|
32382
|
+
this.fail(`load_rejected:${String(error)}`);
|
|
32383
|
+
});
|
|
32384
|
+
} catch (error) {
|
|
32385
|
+
this.fail(`child_create_failed:${String(error)}`);
|
|
32386
|
+
return;
|
|
32387
|
+
}
|
|
32388
|
+
}
|
|
32389
|
+
measureAndShow() {
|
|
32390
|
+
const view = this.view;
|
|
32391
|
+
if (!view || view.webContents.isDestroyed()) return;
|
|
32392
|
+
if (view.getBounds().width <= 0) {
|
|
32393
|
+
this.updateCount();
|
|
32394
|
+
this.maybeShow();
|
|
32395
|
+
return;
|
|
32396
|
+
}
|
|
32397
|
+
const measured = view.webContents.executeJavaScript(
|
|
32398
|
+
`new Promise((resolve) => {
|
|
32399
|
+
const read = () => {
|
|
32400
|
+
const el = document.getElementById('approvals-card');
|
|
32401
|
+
if (!el) { resolve(0); return; }
|
|
32402
|
+
/*
|
|
32403
|
+
* Read the UNCLAMPED height. The card's own max-height is the
|
|
32404
|
+
* viewport minus its insets, so measuring the clamped box would
|
|
32405
|
+
* return the provisional 96 DIP view's ceiling forever: a
|
|
32406
|
+
* circular size that never reaches the card's real height.
|
|
32407
|
+
*/
|
|
32408
|
+
const previous = el.style.maxHeight;
|
|
32409
|
+
el.style.maxHeight = 'none';
|
|
32410
|
+
const height = el.getBoundingClientRect().height;
|
|
32411
|
+
el.style.maxHeight = previous;
|
|
32412
|
+
resolve(height);
|
|
32413
|
+
};
|
|
32414
|
+
if (document.readyState === 'complete') read();
|
|
32415
|
+
else addEventListener('load', read, { once: true });
|
|
32416
|
+
})`
|
|
32417
|
+
);
|
|
32418
|
+
const timer = new Promise((resolve) => {
|
|
32419
|
+
setTimeout(() => resolve(0), 1500);
|
|
32420
|
+
});
|
|
32421
|
+
void Promise.race([measured, timer]).then((height) => {
|
|
32422
|
+
if (this.view !== view) return;
|
|
32423
|
+
if (typeof height === "number" && Number.isFinite(height) && height > 0) {
|
|
32424
|
+
this.naturalHeight = height;
|
|
32425
|
+
}
|
|
32426
|
+
this.maybeShow();
|
|
32427
|
+
}).catch((error) => {
|
|
32428
|
+
if (this.view !== view) return;
|
|
32429
|
+
this.fail(`measure_failed:${String(error)}`);
|
|
32430
|
+
});
|
|
32431
|
+
this.updateCount();
|
|
32432
|
+
this.maybeShow();
|
|
32433
|
+
}
|
|
32434
|
+
updateCount() {
|
|
32435
|
+
const view = this.view;
|
|
32436
|
+
if (!view || view.webContents.isDestroyed()) return;
|
|
32437
|
+
void view.webContents.executeJavaScript(
|
|
32438
|
+
`(() => { window.__approvalsCard?.setCount(${this.pending}); })()`
|
|
32439
|
+
).catch(() => {
|
|
32440
|
+
});
|
|
32441
|
+
}
|
|
32442
|
+
hide() {
|
|
32443
|
+
if (this.view) {
|
|
32444
|
+
try {
|
|
32445
|
+
this.view.setVisible(false);
|
|
32446
|
+
} catch {
|
|
32447
|
+
}
|
|
32448
|
+
}
|
|
32449
|
+
this.visible = false;
|
|
32450
|
+
}
|
|
32451
|
+
fail(reason) {
|
|
32452
|
+
if (this.failedReason !== null) return;
|
|
32453
|
+
this.failedReason = reason;
|
|
32454
|
+
this.hide();
|
|
32455
|
+
this.dispose("failed");
|
|
32456
|
+
this.log(`[browser] approvals overlay latched off: ${reason}`);
|
|
32457
|
+
}
|
|
32458
|
+
}
|
|
32057
32459
|
function browserWindowForeground(window) {
|
|
32058
32460
|
return !window.isDestroyed() && window.isVisible() && window.isFocused();
|
|
32059
32461
|
}
|
|
@@ -35925,7 +36327,9 @@ const enUiBrowser = {
|
|
|
35925
36327
|
"ui.browser.page_context_menu.cut": "Cut",
|
|
35926
36328
|
"ui.browser.page_context_menu.open_link_in_new_tab": "Open link in new tab",
|
|
35927
36329
|
"ui.browser.page_context_menu.paste": "Paste",
|
|
36330
|
+
"ui.browser.page_context_menu.redo": "Redo",
|
|
35928
36331
|
"ui.browser.page_context_menu.select_all": "Select all",
|
|
36332
|
+
"ui.browser.page_context_menu.undo": "Undo",
|
|
35929
36333
|
"ui.browser.use_browser_chrome.downloads_folder_failed": "Could not open the downloads folder. {message}",
|
|
35930
36334
|
"ui.browser.use_consent_attention_lifetime.that_request_is_no_longer_waiting": "That request is no longer waiting.",
|
|
35931
36335
|
"ui.browser.webauthn_chooser.a_site": "A site",
|
|
@@ -37217,6 +37621,7 @@ const enUiLibrary = {
|
|
|
37217
37621
|
"ui.library.page.loaded_count": "{loaded} of {total} assets",
|
|
37218
37622
|
"ui.library.page.preview": "Asset preview",
|
|
37219
37623
|
"ui.library.page.results": "Library results",
|
|
37624
|
+
"ui.library.page.resize_preview": "Resize details drawer. Double-click to reset.",
|
|
37220
37625
|
"ui.library.preview.unavailable": "This asset isn't available",
|
|
37221
37626
|
"ui.library.preview.unavailable_detail": "It may no longer be in the catalog.",
|
|
37222
37627
|
"ui.library.preview.pptx_preparing": "Preparing presentation…",
|
|
@@ -39720,6 +40125,8 @@ const esUiBrowser = {
|
|
|
39720
40125
|
"ui.browser.page_context_menu.copy": "Copiar",
|
|
39721
40126
|
"ui.browser.page_context_menu.paste": "Pegar",
|
|
39722
40127
|
"ui.browser.page_context_menu.select_all": "Seleccionar todo",
|
|
40128
|
+
"ui.browser.page_context_menu.redo": "Rehacer",
|
|
40129
|
+
"ui.browser.page_context_menu.undo": "Deshacer",
|
|
39723
40130
|
"ui.browser.page_context_menu.copy_page_address": "Copiar dirección de la página",
|
|
39724
40131
|
"ui.browser.browser_url_bar.home": "Inicio",
|
|
39725
40132
|
"ui.browser.browser_url_bar.site_secure": "Conexión segura con {origin}",
|
|
@@ -40886,6 +41293,7 @@ const esUiLibrary = {
|
|
|
40886
41293
|
"ui.library.page.loaded_count": "{loaded} de {total} recursos",
|
|
40887
41294
|
"ui.library.page.preview": "Vista previa del recurso",
|
|
40888
41295
|
"ui.library.page.results": "Resultados de la Biblioteca",
|
|
41296
|
+
"ui.library.page.resize_preview": "Cambiar el tamaño del panel de detalles. Doble clic para restablecer.",
|
|
40889
41297
|
"ui.library.preview.unavailable": "Este recurso no está disponible",
|
|
40890
41298
|
"ui.library.preview.unavailable_detail": "Puede que ya no esté en el catálogo.",
|
|
40891
41299
|
"ui.library.preview.pptx_preparing": "Preparando la presentación…",
|
|
@@ -43389,6 +43797,8 @@ const frUiBrowser = {
|
|
|
43389
43797
|
"ui.browser.page_context_menu.copy": "Copier",
|
|
43390
43798
|
"ui.browser.page_context_menu.paste": "Coller",
|
|
43391
43799
|
"ui.browser.page_context_menu.select_all": "Tout sélectionner",
|
|
43800
|
+
"ui.browser.page_context_menu.redo": "Rétablir",
|
|
43801
|
+
"ui.browser.page_context_menu.undo": "Annuler",
|
|
43392
43802
|
"ui.browser.page_context_menu.copy_page_address": "Copier l’adresse de la page",
|
|
43393
43803
|
"ui.browser.browser_url_bar.home": "Accueil",
|
|
43394
43804
|
"ui.browser.browser_url_bar.site_secure": "Connexion sécurisée à {origin}",
|
|
@@ -44555,6 +44965,7 @@ const frUiLibrary = {
|
|
|
44555
44965
|
"ui.library.page.loaded_count": "{loaded} éléments sur {total}",
|
|
44556
44966
|
"ui.library.page.preview": "Aperçu de l’élément",
|
|
44557
44967
|
"ui.library.page.results": "Résultats de la Bibliothèque",
|
|
44968
|
+
"ui.library.page.resize_preview": "Redimensionner le panneau de détails. Double-cliquer pour réinitialiser.",
|
|
44558
44969
|
"ui.library.preview.unavailable": "Cet élément n’est pas disponible",
|
|
44559
44970
|
"ui.library.preview.unavailable_detail": "Il n’est peut-être plus dans le catalogue.",
|
|
44560
44971
|
"ui.library.preview.pptx_preparing": "Préparation de la présentation…",
|
|
@@ -47085,6 +47496,8 @@ const hiUiBrowser = {
|
|
|
47085
47496
|
"ui.browser.page_context_menu.open_link_in_new_tab": "लिंक नए टैब में खोलें",
|
|
47086
47497
|
"ui.browser.page_context_menu.paste": "पेस्ट करें",
|
|
47087
47498
|
"ui.browser.page_context_menu.select_all": "सभी चुनें",
|
|
47499
|
+
"ui.browser.page_context_menu.redo": "फिर से करें",
|
|
47500
|
+
"ui.browser.page_context_menu.undo": "पूर्ववत करें",
|
|
47088
47501
|
"ui.browser.use_browser_chrome.downloads_folder_failed": "डाउनलोड फ़ोल्डर नहीं खुल सका। {message}",
|
|
47089
47502
|
"ui.browser.use_consent_attention_lifetime.that_request_is_no_longer_waiting": "वह अनुरोध अब इंतज़ार में नहीं है।",
|
|
47090
47503
|
"ui.browser.webauthn_chooser.a_site": "एक साइट",
|
|
@@ -48193,6 +48606,7 @@ const hiUiLibrary = {
|
|
|
48193
48606
|
"ui.library.page.loaded_count": "{loaded} एसेट कुल {total} में से",
|
|
48194
48607
|
"ui.library.page.preview": "एसेट का प्रीव्यू",
|
|
48195
48608
|
"ui.library.page.results": "लाइब्रेरी के नतीजे",
|
|
48609
|
+
"ui.library.page.resize_preview": "विवरण ड्रॉअर का आकार बदलें। रीसेट करने के लिए दो बार क्लिक करें।",
|
|
48196
48610
|
"ui.library.preview.unavailable": "यह एसेट उपलब्ध नहीं है",
|
|
48197
48611
|
"ui.library.preview.unavailable_detail": "हो सकता है यह अब कैटलॉग में न हो।",
|
|
48198
48612
|
"ui.library.preview.pptx_preparing": "प्रस्तुति तैयार हो रही है…",
|
|
@@ -50712,6 +51126,8 @@ const ruUiBrowser = {
|
|
|
50712
51126
|
"ui.browser.page_context_menu.open_link_in_new_tab": "Открыть ссылку в новой вкладке",
|
|
50713
51127
|
"ui.browser.page_context_menu.paste": "Вставить",
|
|
50714
51128
|
"ui.browser.page_context_menu.select_all": "Выделить всё",
|
|
51129
|
+
"ui.browser.page_context_menu.redo": "Повторить",
|
|
51130
|
+
"ui.browser.page_context_menu.undo": "Отменить",
|
|
50715
51131
|
"ui.browser.use_browser_chrome.downloads_folder_failed": "Не удалось открыть папку загрузок. {message}",
|
|
50716
51132
|
"ui.browser.use_consent_attention_lifetime.that_request_is_no_longer_waiting": "Этот запрос больше не ожидает.",
|
|
50717
51133
|
"ui.browser.webauthn_chooser.a_site": "Сайт",
|
|
@@ -51840,6 +52256,7 @@ const ruUiLibrary = {
|
|
|
51840
52256
|
"ui.library.page.loaded_count": "Файлы: {loaded} из {total}",
|
|
51841
52257
|
"ui.library.page.preview": "Предпросмотр файла",
|
|
51842
52258
|
"ui.library.page.results": "Результаты Библиотеки",
|
|
52259
|
+
"ui.library.page.resize_preview": "Изменить ширину панели сведений. Дважды щёлкните, чтобы сбросить её.",
|
|
51843
52260
|
"ui.library.preview.unavailable": "Этот файл недоступен",
|
|
51844
52261
|
"ui.library.preview.unavailable_detail": "Возможно, его больше нет в каталоге.",
|
|
51845
52262
|
"ui.library.preview.pptx_preparing": "Подготовка презентации…",
|
|
@@ -54359,6 +54776,8 @@ const urUiBrowser = {
|
|
|
54359
54776
|
"ui.browser.page_context_menu.open_link_in_new_tab": "لنک نئے ٹیب میں کھولیں",
|
|
54360
54777
|
"ui.browser.page_context_menu.paste": "چسپاں کریں",
|
|
54361
54778
|
"ui.browser.page_context_menu.select_all": "سب منتخب کریں",
|
|
54779
|
+
"ui.browser.page_context_menu.redo": "دوبارہ کریں",
|
|
54780
|
+
"ui.browser.page_context_menu.undo": "کالعدم کریں",
|
|
54362
54781
|
"ui.browser.use_browser_chrome.downloads_folder_failed": "ڈاؤن لوڈ فولڈر نہیں کھل سکا۔ {message}",
|
|
54363
54782
|
"ui.browser.use_consent_attention_lifetime.that_request_is_no_longer_waiting": "وہ درخواست اب منتظر نہیں ہے۔",
|
|
54364
54783
|
"ui.browser.webauthn_chooser.a_site": "ایک سائٹ",
|
|
@@ -55487,6 +55906,7 @@ const urUiLibrary = {
|
|
|
55487
55906
|
"ui.library.page.loaded_count": "{total} اثاثوں میں سے {loaded}",
|
|
55488
55907
|
"ui.library.page.preview": "اثاثے کا پیش منظر",
|
|
55489
55908
|
"ui.library.page.results": "لائبریری کے نتائج",
|
|
55909
|
+
"ui.library.page.resize_preview": "تفصیلات کے پینل کی چوڑائی بدلیں۔ ڈبل کلک کر کے ری سیٹ کریں۔",
|
|
55490
55910
|
"ui.library.preview.unavailable": "یہ اثاثہ دستیاب نہیں",
|
|
55491
55911
|
"ui.library.preview.unavailable_detail": "ممکن ہے اب یہ کیٹلاگ میں نہ ہو۔",
|
|
55492
55912
|
"ui.library.preview.pptx_preparing": "پریزنٹیشن تیار ہو رہی ہے…",
|
|
@@ -58006,6 +58426,8 @@ const viUiBrowser = {
|
|
|
58006
58426
|
"ui.browser.page_context_menu.open_link_in_new_tab": "Mở liên kết trong tab mới",
|
|
58007
58427
|
"ui.browser.page_context_menu.paste": "Dán",
|
|
58008
58428
|
"ui.browser.page_context_menu.select_all": "Chọn tất cả",
|
|
58429
|
+
"ui.browser.page_context_menu.redo": "Làm lại",
|
|
58430
|
+
"ui.browser.page_context_menu.undo": "Hoàn tác",
|
|
58009
58431
|
"ui.browser.use_browser_chrome.downloads_folder_failed": "Không thể mở thư mục tải xuống. {message}",
|
|
58010
58432
|
"ui.browser.use_consent_attention_lifetime.that_request_is_no_longer_waiting": "Yêu cầu đó không còn chờ xử lý.",
|
|
58011
58433
|
"ui.browser.webauthn_chooser.a_site": "Một trang web",
|
|
@@ -59134,6 +59556,7 @@ const viUiLibrary = {
|
|
|
59134
59556
|
"ui.library.page.loaded_count": "{loaded}/{total} tệp",
|
|
59135
59557
|
"ui.library.page.preview": "Xem trước tệp",
|
|
59136
59558
|
"ui.library.page.results": "Kết quả Thư viện",
|
|
59559
|
+
"ui.library.page.resize_preview": "Điều chỉnh kích thước ngăn chi tiết. Nhấp đúp để đặt lại.",
|
|
59137
59560
|
"ui.library.preview.unavailable": "Tệp này không khả dụng",
|
|
59138
59561
|
"ui.library.preview.unavailable_detail": "Có thể tệp không còn trong thư viện.",
|
|
59139
59562
|
"ui.library.preview.pptx_preparing": "Đang chuẩn bị bản trình bày…",
|
|
@@ -61462,6 +61885,8 @@ const zhCNUiBrowser = {
|
|
|
61462
61885
|
"ui.browser.page_context_menu.open_link_in_new_tab": "在新标签页中打开链接",
|
|
61463
61886
|
"ui.browser.page_context_menu.paste": "粘贴",
|
|
61464
61887
|
"ui.browser.page_context_menu.select_all": "全选",
|
|
61888
|
+
"ui.browser.page_context_menu.redo": "重做",
|
|
61889
|
+
"ui.browser.page_context_menu.undo": "撤销",
|
|
61465
61890
|
"ui.browser.use_browser_chrome.downloads_folder_failed": "无法打开下载文件夹。{message}",
|
|
61466
61891
|
"ui.browser.use_consent_attention_lifetime.that_request_is_no_longer_waiting": "此请求已不再等待处理。",
|
|
61467
61892
|
"ui.browser.webauthn_chooser.a_site": "某个网站",
|
|
@@ -62601,6 +63026,7 @@ const zhCNUiLibrary = {
|
|
|
62601
63026
|
"ui.library.page.loaded_count": "{loaded}/{total}个资源",
|
|
62602
63027
|
"ui.library.page.preview": "资源预览",
|
|
62603
63028
|
"ui.library.page.results": "资源库结果",
|
|
63029
|
+
"ui.library.page.resize_preview": "调整详情抽屉宽度。双击可重置。",
|
|
62604
63030
|
"ui.library.preview.unavailable": "此资源不可用",
|
|
62605
63031
|
"ui.library.preview.unavailable_detail": "该资源可能已不在目录中。",
|
|
62606
63032
|
"ui.library.preview.pptx_preparing": "正在准备演示文稿……",
|
|
@@ -69045,6 +69471,10 @@ function withTimeout(work, ms) {
|
|
|
69045
69471
|
function isReportableLoadFailure(code) {
|
|
69046
69472
|
return code !== 0 && code !== -3;
|
|
69047
69473
|
}
|
|
69474
|
+
function isSupersededRestore(error) {
|
|
69475
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
69476
|
+
return message.includes("ERR_ABORTED (-3)");
|
|
69477
|
+
}
|
|
69048
69478
|
function sessionRequesterOf(requester) {
|
|
69049
69479
|
if (!requester.startsWith("session:")) return null;
|
|
69050
69480
|
const id2 = requester.slice("session:".length);
|
|
@@ -69941,7 +70371,7 @@ class BrowserHost {
|
|
|
69941
70371
|
if (started) await withTimeout(started, RESTORE_TAB_TIMEOUT_MS);
|
|
69942
70372
|
} catch (error) {
|
|
69943
70373
|
this.log(`[browser] could not restore tab ${tabId}: ${String(error)}`);
|
|
69944
|
-
if (!committed && !this.loadFailures.has(tabId) && this.registry.get(tabId) && !contents.isDestroyed()) {
|
|
70374
|
+
if (!committed && !isSupersededRestore(error) && !this.loadFailures.has(tabId) && this.registry.get(tabId) && !contents.isDestroyed()) {
|
|
69945
70375
|
const entry = recorded.entries[recorded.activeIndex];
|
|
69946
70376
|
this.recordLoadFailure(tabId, {
|
|
69947
70377
|
code: -2,
|
|
@@ -71899,6 +72329,17 @@ function buildPageContextMenuItems(input) {
|
|
|
71899
72329
|
if (input.isEditable) {
|
|
71900
72330
|
const flags = input.editFlags ?? {};
|
|
71901
72331
|
return [
|
|
72332
|
+
{
|
|
72333
|
+
id: "undo",
|
|
72334
|
+
label: t("ui.browser.page_context_menu.undo"),
|
|
72335
|
+
enabled: flags.canUndo ?? true
|
|
72336
|
+
},
|
|
72337
|
+
{
|
|
72338
|
+
id: "redo",
|
|
72339
|
+
label: t("ui.browser.page_context_menu.redo"),
|
|
72340
|
+
enabled: flags.canRedo ?? true
|
|
72341
|
+
},
|
|
72342
|
+
SEPARATOR,
|
|
71902
72343
|
{
|
|
71903
72344
|
id: "cut",
|
|
71904
72345
|
label: t("ui.browser.page_context_menu.cut"),
|
|
@@ -71938,6 +72379,13 @@ function buildPageContextMenuItems(input) {
|
|
|
71938
72379
|
enabled: true
|
|
71939
72380
|
}
|
|
71940
72381
|
];
|
|
72382
|
+
if (input.selectionText) {
|
|
72383
|
+
items.push(SEPARATOR, {
|
|
72384
|
+
id: "copy",
|
|
72385
|
+
label: t("ui.browser.page_context_menu.copy"),
|
|
72386
|
+
enabled: true
|
|
72387
|
+
});
|
|
72388
|
+
}
|
|
71941
72389
|
if (input.linkUrl) {
|
|
71942
72390
|
items.push(
|
|
71943
72391
|
SEPARATOR,
|
|
@@ -73686,6 +74134,7 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
73686
74134
|
canGoBack: navigation ? navigation.canGoBack() : false,
|
|
73687
74135
|
canGoForward: navigation ? navigation.canGoForward() : false,
|
|
73688
74136
|
isEditable: params.isEditable,
|
|
74137
|
+
selectionText: params.selectionText ?? "",
|
|
73689
74138
|
editFlags: params.editFlags
|
|
73690
74139
|
});
|
|
73691
74140
|
const menu = electron.Menu.buildFromTemplate(
|
|
@@ -73702,6 +74151,8 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
73702
74151
|
electron.clipboard.writeText(params.linkURL ?? "");
|
|
73703
74152
|
else if (item.id === "copy-page")
|
|
73704
74153
|
electron.clipboard.writeText(contents.getURL());
|
|
74154
|
+
else if (item.id === "undo") contents.undo();
|
|
74155
|
+
else if (item.id === "redo") contents.redo();
|
|
73705
74156
|
else if (item.id === "cut") contents.cut();
|
|
73706
74157
|
else if (item.id === "copy") contents.copy();
|
|
73707
74158
|
else if (item.id === "paste") contents.paste();
|
|
@@ -73961,6 +74412,12 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
73961
74412
|
type: metric.type
|
|
73962
74413
|
}))
|
|
73963
74414
|
}) : null;
|
|
74415
|
+
const approvalsOverlay = options.approvalsOverlay?.enabled === true && approvalsOverlayEnabled(process.env) ? new ApprovalsOverlayController({
|
|
74416
|
+
window: options.window,
|
|
74417
|
+
documentUrl: options.approvalsOverlay.documentUrl,
|
|
74418
|
+
opaque: process.platform !== "darwin",
|
|
74419
|
+
log: log2
|
|
74420
|
+
}) : null;
|
|
73964
74421
|
const sessionStore = new BrowserSessionStore({
|
|
73965
74422
|
dir: path$1.join(options.userDataDir, "browser"),
|
|
73966
74423
|
log: log2
|
|
@@ -74016,7 +74473,10 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74016
74473
|
},
|
|
74017
74474
|
releaseTab,
|
|
74018
74475
|
notifyChanged,
|
|
74019
|
-
(snapshot2) =>
|
|
74476
|
+
(snapshot2) => {
|
|
74477
|
+
addressOverlay?.onLayout(snapshot2);
|
|
74478
|
+
approvalsOverlay?.onLayout(snapshot2);
|
|
74479
|
+
}
|
|
74020
74480
|
);
|
|
74021
74481
|
registryForDownloads = registry;
|
|
74022
74482
|
rollback.add(async () => {
|
|
@@ -74026,6 +74486,7 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74026
74486
|
await Promise.allSettled([...releases]);
|
|
74027
74487
|
});
|
|
74028
74488
|
rollback.add(() => addressOverlay?.dispose("startup-rollback"));
|
|
74489
|
+
rollback.add(() => approvalsOverlay?.dispose("startup-rollback"));
|
|
74029
74490
|
const ownership = new OwnershipLedger({
|
|
74030
74491
|
mayAdopt: (token, requester) => {
|
|
74031
74492
|
const record = registry.requireSurface(token);
|
|
@@ -74049,6 +74510,9 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74049
74510
|
}
|
|
74050
74511
|
}
|
|
74051
74512
|
});
|
|
74513
|
+
let approvalsExpiryTimer = null;
|
|
74514
|
+
let syncApprovalsOverlay = () => {
|
|
74515
|
+
};
|
|
74052
74516
|
const approvals = new ApprovalStore({
|
|
74053
74517
|
dir: path$1.join(options.userDataDir, "browser"),
|
|
74054
74518
|
onChanged: () => {
|
|
@@ -74056,9 +74520,26 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74056
74520
|
options.window.webContents.send("browser-consent-changed");
|
|
74057
74521
|
}
|
|
74058
74522
|
consentNotifier.announce(approvals.pendingEntries());
|
|
74523
|
+
syncApprovalsOverlay();
|
|
74059
74524
|
},
|
|
74060
74525
|
log: log2
|
|
74061
74526
|
});
|
|
74527
|
+
syncApprovalsOverlay = () => {
|
|
74528
|
+
if (!approvalsOverlay) return;
|
|
74529
|
+
if (approvalsExpiryTimer) {
|
|
74530
|
+
clearTimeout(approvalsExpiryTimer);
|
|
74531
|
+
approvalsExpiryTimer = null;
|
|
74532
|
+
}
|
|
74533
|
+
const entries = approvals.pendingEntries();
|
|
74534
|
+
approvalsOverlay?.setPending(entries.length);
|
|
74535
|
+
if (entries.length === 0) return;
|
|
74536
|
+
const delay2 = approvalsExpiryDelay(entries);
|
|
74537
|
+
if (delay2 !== null) {
|
|
74538
|
+
approvalsExpiryTimer = setTimeout(syncApprovalsOverlay, delay2 + 25);
|
|
74539
|
+
approvalsExpiryTimer.unref?.();
|
|
74540
|
+
}
|
|
74541
|
+
};
|
|
74542
|
+
syncApprovalsOverlay();
|
|
74062
74543
|
const profileDir = browserStoragePath(browserSession) ?? "";
|
|
74063
74544
|
const facts = {
|
|
74064
74545
|
proto: 1,
|
|
@@ -74349,6 +74830,11 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74349
74830
|
}
|
|
74350
74831
|
sessionStore.flush();
|
|
74351
74832
|
addressOverlay?.dispose("host-stop");
|
|
74833
|
+
if (approvalsExpiryTimer) {
|
|
74834
|
+
clearTimeout(approvalsExpiryTimer);
|
|
74835
|
+
approvalsExpiryTimer = null;
|
|
74836
|
+
}
|
|
74837
|
+
approvalsOverlay?.dispose("host-stop");
|
|
74352
74838
|
registry.destroyAll();
|
|
74353
74839
|
await Promise.allSettled([...releases]);
|
|
74354
74840
|
await cdp.close();
|
|
@@ -86189,6 +86675,8 @@ electron.app.whenReady().then(async () => {
|
|
|
86189
86675
|
const rendererUrl = rendererDocumentUrl();
|
|
86190
86676
|
const consoleCaptureUrl = consoleCaptureUrlFor(rendererUrl);
|
|
86191
86677
|
const addressOverlayDocumentUrl = addressOverlayGate.list || addressOverlayProduct ? addressListDocumentUrlFor(rendererUrl) : addressOverlayDocumentUrlFor(rendererUrl);
|
|
86678
|
+
const approvalsOverlayS6a = process.env[APPROVALS_OVERLAY_S6A_ENV] === "1";
|
|
86679
|
+
const approvalsOverlayDocumentUrl = approvalsOverlayS6a ? documentUrlFor(rendererUrl, "browser-approvals-overlay.html") : null;
|
|
86192
86680
|
backendService.observeDesktopFeed(
|
|
86193
86681
|
(frame) => {
|
|
86194
86682
|
if (frame.type === "notification") {
|
|
@@ -87041,6 +87529,12 @@ electron.app.whenReady().then(async () => {
|
|
|
87041
87529
|
documentUrl: addressOverlayDocumentUrl
|
|
87042
87530
|
}
|
|
87043
87531
|
} : {},
|
|
87532
|
+
...approvalsOverlayS6a && approvalsOverlayDocumentUrl ? {
|
|
87533
|
+
approvalsOverlay: {
|
|
87534
|
+
enabled: true,
|
|
87535
|
+
documentUrl: approvalsOverlayDocumentUrl
|
|
87536
|
+
}
|
|
87537
|
+
} : {},
|
|
87044
87538
|
preloadPath: path$1.join(__dirname, "../preload/index.js"),
|
|
87045
87539
|
/*
|
|
87046
87540
|
* The console's surfaces are handed the user's own PATH, from the same
|