@ai-matrx/summon 0.1.7 → 0.1.9
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/CHANGELOG.md +15 -2
- package/dist/gate-CfjdNWP6.d.cts +397 -0
- package/dist/gate-CfjdNWP6.d.ts +397 -0
- package/dist/handles.cjs +1 -0
- package/dist/handles.cjs.map +1 -1
- package/dist/handles.d.cts +3 -61
- package/dist/handles.d.ts +3 -61
- package/dist/handles.js +1 -0
- package/dist/handles.js.map +1 -1
- package/dist/helpers-2NY1ha0V.d.cts +63 -0
- package/dist/helpers-2NY1ha0V.d.ts +63 -0
- package/dist/index.cjs +194 -159
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -350
- package/dist/index.d.ts +12 -350
- package/dist/index.js +200 -165
- package/dist/index.js.map +1 -1
- package/dist/instanceBody-CgZAFnic.d.cts +23 -0
- package/dist/instanceBody-CgZAFnic.d.ts +23 -0
- package/dist/open.cjs +408 -0
- package/dist/open.cjs.map +1 -0
- package/dist/open.d.cts +23 -0
- package/dist/open.d.ts +23 -0
- package/dist/open.js +375 -0
- package/dist/open.js.map +1 -0
- package/dist/react.cjs +249 -352
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +11 -151
- package/dist/react.d.ts +11 -151
- package/dist/react.js +210 -306
- package/dist/react.js.map +1 -1
- package/dist/root.cjs +277 -0
- package/dist/root.cjs.map +1 -0
- package/dist/root.d.cts +175 -0
- package/dist/root.d.ts +175 -0
- package/dist/root.js +254 -0
- package/dist/root.js.map +1 -0
- package/dist/window-host.cjs +11 -2
- package/dist/window-host.cjs.map +1 -1
- package/dist/window-host.d.cts +1 -0
- package/dist/window-host.d.ts +1 -0
- package/dist/window-host.js +11 -2
- package/dist/window-host.js.map +1 -1
- package/dist/window.cjs +2 -1
- package/dist/window.cjs.map +1 -1
- package/dist/window.d.cts +3 -2
- package/dist/window.d.ts +3 -2
- package/dist/window.js +2 -1
- package/dist/window.js.map +1 -1
- package/package.json +28 -5
package/dist/index.cjs
CHANGED
|
@@ -55,7 +55,7 @@ __export(src_exports, {
|
|
|
55
55
|
clearOverlaySurfaceRender: () => clearOverlaySurfaceRender,
|
|
56
56
|
clearWindowPersistenceState: () => clearWindowPersistenceState,
|
|
57
57
|
closeAllInstancesOfOverlay: () => closeAllInstancesOfOverlay,
|
|
58
|
-
closeAllOverlays: () =>
|
|
58
|
+
closeAllOverlays: () => closeAllOverlays2,
|
|
59
59
|
closeLifecycleMiddleware: () => closeLifecycleMiddleware,
|
|
60
60
|
closeOverlay: () => closeOverlay,
|
|
61
61
|
closeOverlaysBoundToPage: () => closeOverlaysBoundToPage,
|
|
@@ -73,7 +73,7 @@ __export(src_exports, {
|
|
|
73
73
|
diagnoseOverlayRender: () => diagnoseOverlayRender,
|
|
74
74
|
discardPendingWindowSession: () => discardPendingWindowSession,
|
|
75
75
|
dockWindow: () => dockWindow,
|
|
76
|
-
focusWindow: () =>
|
|
76
|
+
focusWindow: () => focusWindow2,
|
|
77
77
|
getGrid12Rect: () => getGrid12Rect,
|
|
78
78
|
getGrid4Rect: () => getGrid4Rect,
|
|
79
79
|
getGrid6Rect: () => getGrid6Rect,
|
|
@@ -98,7 +98,7 @@ __export(src_exports, {
|
|
|
98
98
|
locationRouter: () => locationRouter,
|
|
99
99
|
markWindowClosing: () => markWindowClosing,
|
|
100
100
|
maximizeWindow: () => maximizeWindow,
|
|
101
|
-
minimizeAll: () =>
|
|
101
|
+
minimizeAll: () => minimizeAll2,
|
|
102
102
|
minimizeWindow: () => minimizeWindow,
|
|
103
103
|
moveTraySlot: () => moveTraySlot,
|
|
104
104
|
openOverlay: () => openOverlay,
|
|
@@ -108,7 +108,7 @@ __export(src_exports, {
|
|
|
108
108
|
overlaysReducer: () => overlaysReducer,
|
|
109
109
|
parseInstanceKey: () => parseInstanceKey,
|
|
110
110
|
popOutWindow: () => popOutWindow,
|
|
111
|
-
pruneStaleInstances: () =>
|
|
111
|
+
pruneStaleInstances: () => pruneStaleInstances2,
|
|
112
112
|
raiseTransientWindow: () => raiseTransientWindow,
|
|
113
113
|
recomputeTrayPositions: () => recomputeTrayPositions,
|
|
114
114
|
rectOnScreen: () => rectOnScreen,
|
|
@@ -123,8 +123,8 @@ __export(src_exports, {
|
|
|
123
123
|
resetOverlayRegistry: () => resetOverlayRegistry,
|
|
124
124
|
resetOverlayRenderWatchdog: () => resetOverlayRenderWatchdog,
|
|
125
125
|
resolvePorts: () => resolvePorts,
|
|
126
|
-
restoreAll: () =>
|
|
127
|
-
restoreWindow: () =>
|
|
126
|
+
restoreAll: () => restoreAll2,
|
|
127
|
+
restoreWindow: () => restoreWindow2,
|
|
128
128
|
restoreWindowState: () => restoreWindowState,
|
|
129
129
|
revealWindow: () => revealWindow,
|
|
130
130
|
safeViewportDims: () => safeViewportDims,
|
|
@@ -159,9 +159,10 @@ __export(src_exports, {
|
|
|
159
159
|
setOverlayStateValue: () => setOverlayStateValue,
|
|
160
160
|
setPopoutCandidate: () => setPopoutCandidate,
|
|
161
161
|
subscribeToOverlayRegistry: () => subscribeToOverlayRegistry,
|
|
162
|
+
summonCore: () => summonCore,
|
|
162
163
|
summonReducers: () => summonReducers,
|
|
163
164
|
toggleOverlay: () => toggleOverlay,
|
|
164
|
-
toggleWindowsHidden: () =>
|
|
165
|
+
toggleWindowsHidden: () => toggleWindowsHidden2,
|
|
165
166
|
trayChipsPerRow: () => trayChipsPerRow,
|
|
166
167
|
traySlotRect: () => traySlotRect,
|
|
167
168
|
unregisterSyncEntry: () => unregisterSyncEntry,
|
|
@@ -279,15 +280,107 @@ function resetOverlayRegistry() {
|
|
|
279
280
|
|
|
280
281
|
// src/core/overlaysSlice.ts
|
|
281
282
|
var import_toolkit = require("@reduxjs/toolkit");
|
|
283
|
+
|
|
284
|
+
// src/open/actions.ts
|
|
285
|
+
function creator(type, build) {
|
|
286
|
+
const create = (...args) => ({ type, payload: build(...args) });
|
|
287
|
+
return Object.assign(create, {
|
|
288
|
+
type,
|
|
289
|
+
toString: () => type,
|
|
290
|
+
match: (action) => typeof action === "object" && action !== null && action.type === type
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
function isPlainRecord(value) {
|
|
294
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
295
|
+
}
|
|
296
|
+
function stripFunctions(overlayId, data) {
|
|
297
|
+
if (!isPlainRecord(data)) return data;
|
|
298
|
+
const offenders = Object.keys(data).filter((key) => typeof data[key] === "function");
|
|
299
|
+
if (offenders.length === 0) return data;
|
|
300
|
+
console.error(
|
|
301
|
+
`[summon] BUG: function value(s) in openOverlay data for "${overlayId}" (keys: ${offenders.join(", ")}). Functions cannot travel through Redux \u2014 the handler would NEVER fire. Register a handle (@ai-matrx/summon/handles) and pass its id string instead. The offending key(s) were stripped from state.`
|
|
302
|
+
);
|
|
303
|
+
const cleaned = { ...data };
|
|
304
|
+
for (const key of offenders) delete cleaned[key];
|
|
305
|
+
return cleaned;
|
|
306
|
+
}
|
|
307
|
+
function rawOpen(payload) {
|
|
308
|
+
const raw = { overlayId: payload.overlayId };
|
|
309
|
+
if (payload.instanceId !== void 0) raw.instanceId = payload.instanceId;
|
|
310
|
+
if (payload.data !== void 0) raw.data = stripFunctions(payload.overlayId, payload.data);
|
|
311
|
+
const defaults = getOverlayMeta(payload.overlayId)?.defaults;
|
|
312
|
+
if (isPlainRecord(defaults)) raw.defaults = stripFunctions(payload.overlayId, defaults);
|
|
313
|
+
return raw;
|
|
314
|
+
}
|
|
315
|
+
var O = "overlays/";
|
|
316
|
+
var openOverlay = creator(O + "openOverlay", (payload) => rawOpen(payload));
|
|
317
|
+
var closeOverlay = creator(
|
|
318
|
+
O + "closeOverlay",
|
|
319
|
+
(payload) => payload.instanceId === void 0 ? { overlayId: payload.overlayId } : { overlayId: payload.overlayId, instanceId: payload.instanceId }
|
|
320
|
+
);
|
|
321
|
+
var toggleOverlay = creator(O + "toggleOverlay", (payload) => rawOpen(payload));
|
|
322
|
+
var closeAllInstancesOfOverlay = creator(
|
|
323
|
+
O + "closeAllInstancesOfOverlay",
|
|
324
|
+
(payload) => ({ overlayId: payload.overlayId })
|
|
325
|
+
);
|
|
326
|
+
function overlayIdsBoundToPage() {
|
|
327
|
+
return allOverlayMeta().filter((meta) => meta.closesOnNavigation === true).map((meta) => meta.id);
|
|
328
|
+
}
|
|
329
|
+
var closeOverlaysBoundToPage = creator(
|
|
330
|
+
O + "closeOverlaysBoundToPage",
|
|
331
|
+
(payload) => ({
|
|
332
|
+
overlayIds: [...payload?.overlayIds ?? overlayIdsBoundToPage()]
|
|
333
|
+
})
|
|
334
|
+
);
|
|
335
|
+
var closeAllOverlays = creator(O + "closeAllOverlays", () => void 0);
|
|
336
|
+
var pruneStaleInstances = creator(O + "pruneStaleInstances", (payload) => payload);
|
|
337
|
+
var W = "windowManager/";
|
|
338
|
+
var pass = () => (payload) => payload;
|
|
339
|
+
var focusWindow = creator(W + "focusWindow", pass());
|
|
340
|
+
var restoreWindow = creator(W + "restoreWindow", pass());
|
|
341
|
+
var toggleWindowsHidden = creator(W + "toggleWindowsHidden", () => void 0);
|
|
342
|
+
var restoreAll = creator(W + "restoreAll", () => void 0);
|
|
343
|
+
var minimizeAll = creator(W + "minimizeAll", pass());
|
|
344
|
+
|
|
345
|
+
// src/open/selectors.ts
|
|
282
346
|
var import_global_slot2 = require("@ai-matrx/kit/global-slot");
|
|
347
|
+
var CLOSED = Object.freeze({ isOpen: false, data: null });
|
|
348
|
+
var EMPTY = Object.freeze([]);
|
|
349
|
+
var selectOverlay = (state2, overlayId, instanceId = DEFAULT_INSTANCE_ID) => state2.overlays?.overlays[overlayId]?.[instanceId] ?? CLOSED;
|
|
350
|
+
var selectIsOverlayOpen = (state2, overlayId, instanceId = DEFAULT_INSTANCE_ID) => selectOverlay(state2, overlayId, instanceId).isOpen;
|
|
351
|
+
var selectOverlayData = (state2, overlayId, instanceId = DEFAULT_INSTANCE_ID) => selectOverlay(state2, overlayId, instanceId).data;
|
|
352
|
+
var openCache = () => (0, import_global_slot2.globalSlot)("ai-matrx.summon.openInstances", () => /* @__PURE__ */ new Map());
|
|
353
|
+
var selectOpenInstances = (state2, overlayId) => {
|
|
354
|
+
const bucket = state2.overlays?.overlays[overlayId];
|
|
355
|
+
const cache = openCache();
|
|
356
|
+
const hit = cache.get(overlayId);
|
|
357
|
+
if (hit && hit.bucket === bucket) return hit.result;
|
|
358
|
+
let result = EMPTY;
|
|
359
|
+
if (bucket) {
|
|
360
|
+
const open = [];
|
|
361
|
+
for (const [instanceId, inst] of Object.entries(bucket)) if (inst.isOpen) open.push({ instanceId, data: inst.data });
|
|
362
|
+
if (open.length > 0) result = open;
|
|
363
|
+
}
|
|
364
|
+
cache.set(overlayId, { bucket, result });
|
|
365
|
+
return result;
|
|
366
|
+
};
|
|
367
|
+
function listOpenInstanceKeys(state2) {
|
|
368
|
+
const keys = [];
|
|
369
|
+
for (const [overlayId, bucket] of Object.entries(state2.overlays?.overlays ?? {})) {
|
|
370
|
+
for (const [instanceId, inst] of Object.entries(bucket)) if (inst.isOpen) keys.push(`${overlayId}:${instanceId}`);
|
|
371
|
+
}
|
|
372
|
+
return keys;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// src/core/overlaysSlice.ts
|
|
283
376
|
var initialState = { overlays: {} };
|
|
284
|
-
function
|
|
377
|
+
function isPlainRecord2(value) {
|
|
285
378
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
286
379
|
}
|
|
287
380
|
function withDefaults(data, defaults) {
|
|
288
381
|
if (!defaults) return data ?? null;
|
|
289
382
|
if (data === void 0 || data === null) return { ...defaults };
|
|
290
|
-
if (
|
|
383
|
+
if (isPlainRecord2(data)) return { ...defaults, ...data };
|
|
291
384
|
return data;
|
|
292
385
|
}
|
|
293
386
|
function closeInstance(state2, overlayId, instanceId) {
|
|
@@ -387,92 +480,7 @@ var overlaysSlice = (0, import_toolkit.createSlice)({
|
|
|
387
480
|
});
|
|
388
481
|
var overlaysReducer = overlaysSlice.reducer;
|
|
389
482
|
var overlaysRawActions = overlaysSlice.actions;
|
|
390
|
-
|
|
391
|
-
if (!isPlainRecord(data)) return data;
|
|
392
|
-
const offenders = Object.keys(data).filter((key) => typeof data[key] === "function");
|
|
393
|
-
if (offenders.length === 0) return data;
|
|
394
|
-
console.error(
|
|
395
|
-
`[summon] BUG: function value(s) in openOverlay data for "${overlayId}" (keys: ${offenders.join(", ")}). Functions cannot travel through Redux \u2014 the handler would NEVER fire. Register a handle (@ai-matrx/summon/handles) and pass its id string instead. The offending key(s) were stripped from state.`
|
|
396
|
-
);
|
|
397
|
-
const cleaned = { ...data };
|
|
398
|
-
for (const key of offenders) delete cleaned[key];
|
|
399
|
-
return cleaned;
|
|
400
|
-
}
|
|
401
|
-
function rawOpenPayload(payload) {
|
|
402
|
-
const raw = { overlayId: payload.overlayId };
|
|
403
|
-
if (payload.instanceId !== void 0) raw.instanceId = payload.instanceId;
|
|
404
|
-
if (payload.data !== void 0) raw.data = stripFunctionsFromOverlayData(payload.overlayId, payload.data);
|
|
405
|
-
const defaults = getOverlayMeta(payload.overlayId)?.defaults;
|
|
406
|
-
if (isPlainRecord(defaults)) {
|
|
407
|
-
raw.defaults = stripFunctionsFromOverlayData(payload.overlayId, defaults);
|
|
408
|
-
}
|
|
409
|
-
return raw;
|
|
410
|
-
}
|
|
411
|
-
function withMatcher(create, raw) {
|
|
412
|
-
return Object.assign(create, { type: raw.type, match: raw.match });
|
|
413
|
-
}
|
|
414
|
-
var openOverlay = withMatcher(
|
|
415
|
-
(payload) => overlaysSlice.actions.openOverlay(rawOpenPayload(payload)),
|
|
416
|
-
overlaysSlice.actions.openOverlay
|
|
417
|
-
);
|
|
418
|
-
var closeOverlay = withMatcher(
|
|
419
|
-
(payload) => overlaysSlice.actions.closeOverlay(
|
|
420
|
-
payload.instanceId === void 0 ? { overlayId: payload.overlayId } : { overlayId: payload.overlayId, instanceId: payload.instanceId }
|
|
421
|
-
),
|
|
422
|
-
overlaysSlice.actions.closeOverlay
|
|
423
|
-
);
|
|
424
|
-
var toggleOverlay = withMatcher(
|
|
425
|
-
(payload) => overlaysSlice.actions.toggleOverlay(rawOpenPayload(payload)),
|
|
426
|
-
overlaysSlice.actions.toggleOverlay
|
|
427
|
-
);
|
|
428
|
-
var closeAllInstancesOfOverlay = withMatcher(
|
|
429
|
-
(payload) => overlaysSlice.actions.closeAllInstancesOfOverlay({ overlayId: payload.overlayId }),
|
|
430
|
-
overlaysSlice.actions.closeAllInstancesOfOverlay
|
|
431
|
-
);
|
|
432
|
-
function overlayIdsBoundToPage() {
|
|
433
|
-
return allOverlayMeta().filter((meta) => meta.closesOnNavigation === true).map((meta) => meta.id);
|
|
434
|
-
}
|
|
435
|
-
var closeOverlaysBoundToPage = withMatcher(
|
|
436
|
-
(payload) => overlaysSlice.actions.closeOverlaysBoundToPage({
|
|
437
|
-
overlayIds: [...payload?.overlayIds ?? overlayIdsBoundToPage()]
|
|
438
|
-
}),
|
|
439
|
-
overlaysSlice.actions.closeOverlaysBoundToPage
|
|
440
|
-
);
|
|
441
|
-
var { closeAllOverlays, pruneStaleInstances } = overlaysSlice.actions;
|
|
442
|
-
var CLOSED_OVERLAY_INSTANCE = Object.freeze({ isOpen: false, data: null });
|
|
443
|
-
var EMPTY_INSTANCES = Object.freeze([]);
|
|
444
|
-
var selectOverlay = (state2, overlayId, instanceId = DEFAULT_INSTANCE_ID) => state2.overlays.overlays[overlayId]?.[instanceId] ?? CLOSED_OVERLAY_INSTANCE;
|
|
445
|
-
var selectIsOverlayOpen = (state2, overlayId, instanceId = DEFAULT_INSTANCE_ID) => selectOverlay(state2, overlayId, instanceId).isOpen;
|
|
446
|
-
var selectOverlayData = (state2, overlayId, instanceId = DEFAULT_INSTANCE_ID) => selectOverlay(state2, overlayId, instanceId).data;
|
|
447
|
-
var openInstancesCache = () => (0, import_global_slot2.globalSlot)("ai-matrx.summon.openInstancesSelectors", () => /* @__PURE__ */ new Map());
|
|
448
|
-
var selectOpenInstances = (state2, overlayId) => {
|
|
449
|
-
const cache = openInstancesCache();
|
|
450
|
-
let selector = cache.get(overlayId);
|
|
451
|
-
if (!selector) {
|
|
452
|
-
selector = (0, import_toolkit.createSelector)(
|
|
453
|
-
(s) => s.overlays.overlays[overlayId],
|
|
454
|
-
(instances) => {
|
|
455
|
-
if (!instances) return EMPTY_INSTANCES;
|
|
456
|
-
const result = [];
|
|
457
|
-
for (const [instanceId, inst] of Object.entries(instances)) {
|
|
458
|
-
if (inst.isOpen) result.push({ instanceId, data: inst.data });
|
|
459
|
-
}
|
|
460
|
-
return result.length === 0 ? EMPTY_INSTANCES : result;
|
|
461
|
-
}
|
|
462
|
-
);
|
|
463
|
-
cache.set(overlayId, selector);
|
|
464
|
-
}
|
|
465
|
-
return selector(state2);
|
|
466
|
-
};
|
|
467
|
-
function listOpenInstanceKeys(state2) {
|
|
468
|
-
const keys = [];
|
|
469
|
-
for (const [overlayId, bucket] of Object.entries(state2.overlays.overlays)) {
|
|
470
|
-
for (const [instanceId, inst] of Object.entries(bucket)) {
|
|
471
|
-
if (inst.isOpen) keys.push(`${overlayId}:${instanceId}`);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
return keys;
|
|
475
|
-
}
|
|
483
|
+
var { closeAllOverlays: closeAllOverlays2, pruneStaleInstances: pruneStaleInstances2 } = overlaysSlice.actions;
|
|
476
484
|
|
|
477
485
|
// src/core/windowManagerSlice.ts
|
|
478
486
|
var import_toolkit2 = require("@reduxjs/toolkit");
|
|
@@ -775,11 +783,11 @@ function trayChipsPerRow(viewportWidth) {
|
|
|
775
783
|
Math.floor((usable + TRAY_GAP_X) / (chipWidth + TRAY_GAP_X))
|
|
776
784
|
);
|
|
777
785
|
}
|
|
778
|
-
function traySlotRect(
|
|
786
|
+
function traySlotRect(slot2, viewportWidth, viewportHeight, totalSlots = slot2 + 1) {
|
|
779
787
|
const chipWidth = computeTrayChipWidth(viewportWidth);
|
|
780
788
|
const chipHeight = computeTrayChipHeight(viewportWidth);
|
|
781
789
|
const perRow = trayChipsPerRow(viewportWidth);
|
|
782
|
-
const safeSlot = Math.max(0, Math.floor(
|
|
790
|
+
const safeSlot = Math.max(0, Math.floor(slot2));
|
|
783
791
|
const usableHeight = Math.max(1, viewportHeight - TRAY_MARGIN_B - 8);
|
|
784
792
|
const fullRows = Math.max(
|
|
785
793
|
1,
|
|
@@ -928,44 +936,44 @@ var windowManagerSlice = (0, import_toolkit2.createSlice)({
|
|
|
928
936
|
const { id, title, initial, initialState: initialState5, persistence, viewport } = action.payload;
|
|
929
937
|
if (state2.windows[id]) return;
|
|
930
938
|
const safeInitial = viewport ? clampRectToViewport(initial, viewport) : initial;
|
|
931
|
-
const
|
|
932
|
-
const pendingRenderRect =
|
|
933
|
-
|
|
939
|
+
const pending2 = persistence ? state2.pendingRestores[windowSessionKey(persistence.overlayId, persistence.instanceId)] : void 0;
|
|
940
|
+
const pendingRenderRect = pending2 ? pending2.state === "minimized" && pending2.traySlot !== null && viewport ? traySlotRect(
|
|
941
|
+
pending2.traySlot,
|
|
934
942
|
viewport.width,
|
|
935
943
|
viewport.height,
|
|
936
944
|
state2.trayCount
|
|
937
|
-
) : viewport ? clampRectToViewport(
|
|
938
|
-
const startsMinimized = !
|
|
945
|
+
) : viewport ? clampRectToViewport(pending2.windowedRect, viewport) : pending2.renderRect : void 0;
|
|
946
|
+
const startsMinimized = !pending2 && initialState5 === "minimized" && viewport !== void 0;
|
|
939
947
|
const initialTraySlot = startsMinimized ? state2.trayCount : null;
|
|
940
948
|
state2.windows[id] = {
|
|
941
949
|
id,
|
|
942
|
-
title: title ??
|
|
943
|
-
state:
|
|
950
|
+
title: title ?? pending2?.title ?? id,
|
|
951
|
+
state: pending2?.state ?? (startsMinimized ? "minimized" : "windowed"),
|
|
944
952
|
windowed: pendingRenderRect ?? safeInitial,
|
|
945
|
-
preMinimizedRect:
|
|
946
|
-
zIndex:
|
|
947
|
-
traySlot:
|
|
953
|
+
preMinimizedRect: pending2?.state === "minimized" ? pending2.windowedRect : startsMinimized ? safeInitial : null,
|
|
954
|
+
zIndex: pending2?.zIndex ?? state2.nextZIndex++,
|
|
955
|
+
traySlot: pending2?.state === "minimized" ? pending2.traySlot : initialTraySlot,
|
|
948
956
|
popoutMode: null,
|
|
949
957
|
prePopoutRect: null,
|
|
950
958
|
...persistence ? {
|
|
951
959
|
persistence: {
|
|
952
960
|
...persistence,
|
|
953
|
-
data: { ...
|
|
954
|
-
sidebarOpen:
|
|
955
|
-
sidebarSize:
|
|
961
|
+
data: { ...pending2?.data ?? {}, ...persistence.data },
|
|
962
|
+
sidebarOpen: pending2?.sidebarOpen ?? persistence.sidebarOpen,
|
|
963
|
+
sidebarSize: pending2?.sidebarSize ?? persistence.sidebarSize,
|
|
956
964
|
closing: false
|
|
957
965
|
}
|
|
958
966
|
} : {}
|
|
959
967
|
};
|
|
960
|
-
if (
|
|
961
|
-
state2.trayCount = Math.max(state2.trayCount,
|
|
968
|
+
if (pending2?.state === "minimized" && pending2.traySlot !== null) {
|
|
969
|
+
state2.trayCount = Math.max(state2.trayCount, pending2.traySlot + 1);
|
|
962
970
|
} else if (startsMinimized && viewport) {
|
|
963
971
|
state2.trayCount += 1;
|
|
964
972
|
state2.trayViewport = viewport;
|
|
965
973
|
recomputeAllTrayRects(state2);
|
|
966
974
|
}
|
|
967
|
-
if (
|
|
968
|
-
state2.nextZIndex =
|
|
975
|
+
if (pending2 && pending2.zIndex >= state2.nextZIndex) {
|
|
976
|
+
state2.nextZIndex = pending2.zIndex + 1;
|
|
969
977
|
}
|
|
970
978
|
if (state2.windowsHidden) state2.windowsHidden = false;
|
|
971
979
|
},
|
|
@@ -1028,14 +1036,14 @@ var windowManagerSlice = (0, import_toolkit2.createSlice)({
|
|
|
1028
1036
|
delete state2.pendingRestores[action.payload];
|
|
1029
1037
|
},
|
|
1030
1038
|
discardPendingWindowSession(state2, action) {
|
|
1031
|
-
const
|
|
1032
|
-
if (
|
|
1039
|
+
const pending2 = state2.pendingRestores[action.payload];
|
|
1040
|
+
if (pending2?.traySlot !== null && pending2?.traySlot !== void 0 && !hasMatchingLiveTrayReservation(
|
|
1033
1041
|
state2,
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1042
|
+
pending2.overlayId,
|
|
1043
|
+
pending2.instanceId,
|
|
1044
|
+
pending2.traySlot
|
|
1037
1045
|
)) {
|
|
1038
|
-
compactReservedTraySlot(state2,
|
|
1046
|
+
compactReservedTraySlot(state2, pending2.traySlot, pending2.renderRect);
|
|
1039
1047
|
}
|
|
1040
1048
|
delete state2.pendingRestores[action.payload];
|
|
1041
1049
|
},
|
|
@@ -1058,15 +1066,15 @@ var windowManagerSlice = (0, import_toolkit2.createSlice)({
|
|
|
1058
1066
|
action.payload.overlayId,
|
|
1059
1067
|
action.payload.instanceId
|
|
1060
1068
|
);
|
|
1061
|
-
const
|
|
1062
|
-
const hasMatchingLiveReservation =
|
|
1069
|
+
const pending2 = state2.pendingRestores[key];
|
|
1070
|
+
const hasMatchingLiveReservation = pending2 ? hasMatchingLiveTrayReservation(
|
|
1063
1071
|
state2,
|
|
1064
1072
|
action.payload.overlayId,
|
|
1065
1073
|
action.payload.instanceId,
|
|
1066
|
-
|
|
1074
|
+
pending2.traySlot
|
|
1067
1075
|
) : false;
|
|
1068
|
-
if (!hasMatchingLiveReservation &&
|
|
1069
|
-
compactReservedTraySlot(state2,
|
|
1076
|
+
if (!hasMatchingLiveReservation && pending2?.traySlot !== null && pending2?.traySlot !== void 0) {
|
|
1077
|
+
compactReservedTraySlot(state2, pending2.traySlot, pending2.renderRect);
|
|
1070
1078
|
}
|
|
1071
1079
|
delete state2.pendingRestores[key];
|
|
1072
1080
|
Object.values(state2.windows).forEach((entry) => {
|
|
@@ -1102,16 +1110,16 @@ var windowManagerSlice = (0, import_toolkit2.createSlice)({
|
|
|
1102
1110
|
unregisterWindow(state2, action) {
|
|
1103
1111
|
const win = state2.windows[action.payload];
|
|
1104
1112
|
if (!win) return;
|
|
1105
|
-
const
|
|
1113
|
+
const pending2 = win.persistence ? state2.pendingRestores[windowSessionKey(
|
|
1106
1114
|
win.persistence.overlayId,
|
|
1107
1115
|
win.persistence.instanceId
|
|
1108
1116
|
)] : void 0;
|
|
1109
1117
|
const pendingOwnsLiveReservation = Boolean(
|
|
1110
|
-
win.persistence &&
|
|
1118
|
+
win.persistence && pending2 && hasMatchingLiveTrayReservation(
|
|
1111
1119
|
state2,
|
|
1112
1120
|
win.persistence.overlayId,
|
|
1113
1121
|
win.persistence.instanceId,
|
|
1114
|
-
|
|
1122
|
+
pending2.traySlot
|
|
1115
1123
|
)
|
|
1116
1124
|
);
|
|
1117
1125
|
if (!pendingOwnsLiveReservation) releaseTraySlot(state2, win);
|
|
@@ -1205,8 +1213,8 @@ var windowManagerSlice = (0, import_toolkit2.createSlice)({
|
|
|
1205
1213
|
if (!win || win.state === "minimized") return;
|
|
1206
1214
|
if (win.popoutMode !== null) return;
|
|
1207
1215
|
win.preMinimizedRect = { ...win.windowed };
|
|
1208
|
-
const
|
|
1209
|
-
win.traySlot =
|
|
1216
|
+
const slot2 = state2.trayCount;
|
|
1217
|
+
win.traySlot = slot2;
|
|
1210
1218
|
state2.trayCount += 1;
|
|
1211
1219
|
state2.trayViewport = { width: viewportWidth, height: viewportHeight };
|
|
1212
1220
|
win.state = "minimized";
|
|
@@ -1223,8 +1231,8 @@ var windowManagerSlice = (0, import_toolkit2.createSlice)({
|
|
|
1223
1231
|
if (win.state !== "windowed") return;
|
|
1224
1232
|
if (win.popoutMode !== null) return;
|
|
1225
1233
|
win.preMinimizedRect = { ...win.windowed };
|
|
1226
|
-
const
|
|
1227
|
-
win.traySlot =
|
|
1234
|
+
const slot2 = state2.trayCount;
|
|
1235
|
+
win.traySlot = slot2;
|
|
1228
1236
|
state2.trayCount += 1;
|
|
1229
1237
|
win.state = "minimized";
|
|
1230
1238
|
});
|
|
@@ -1520,19 +1528,19 @@ var windowManagerSlice = (0, import_toolkit2.createSlice)({
|
|
|
1520
1528
|
if (typeof overlayId !== "string" || typeof instanceId !== "string") {
|
|
1521
1529
|
return;
|
|
1522
1530
|
}
|
|
1523
|
-
const
|
|
1531
|
+
const pending2 = Object.values(state2.pendingRestores).find(
|
|
1524
1532
|
(session) => session.overlayId === overlayId && session.instanceId === instanceId
|
|
1525
1533
|
);
|
|
1526
|
-
const hasMatchingLive =
|
|
1534
|
+
const hasMatchingLive = pending2 ? hasMatchingLiveTrayReservation(
|
|
1527
1535
|
state2,
|
|
1528
1536
|
overlayId,
|
|
1529
1537
|
instanceId,
|
|
1530
|
-
|
|
1538
|
+
pending2.traySlot
|
|
1531
1539
|
) : false;
|
|
1532
|
-
if (!hasMatchingLive &&
|
|
1533
|
-
compactReservedTraySlot(state2,
|
|
1540
|
+
if (!hasMatchingLive && pending2?.traySlot != null) {
|
|
1541
|
+
compactReservedTraySlot(state2, pending2.traySlot, pending2.renderRect);
|
|
1534
1542
|
}
|
|
1535
|
-
if (
|
|
1543
|
+
if (pending2) delete state2.pendingRestores[pending2.sessionKey];
|
|
1536
1544
|
Object.values(state2.windows).forEach((entry) => {
|
|
1537
1545
|
if (entry.persistence?.overlayId === overlayId && entry.persistence.instanceId === instanceId) {
|
|
1538
1546
|
entry.persistence.closing = true;
|
|
@@ -1605,17 +1613,17 @@ var {
|
|
|
1605
1613
|
releaseTransientWindow,
|
|
1606
1614
|
registerWindow,
|
|
1607
1615
|
unregisterWindow,
|
|
1608
|
-
focusWindow,
|
|
1609
|
-
restoreWindow,
|
|
1616
|
+
focusWindow: focusWindow2,
|
|
1617
|
+
restoreWindow: restoreWindow2,
|
|
1610
1618
|
revealWindow,
|
|
1611
1619
|
maximizeWindow,
|
|
1612
1620
|
minimizeWindow,
|
|
1613
|
-
minimizeAll,
|
|
1614
|
-
restoreAll,
|
|
1621
|
+
minimizeAll: minimizeAll2,
|
|
1622
|
+
restoreAll: restoreAll2,
|
|
1615
1623
|
recomputeTrayPositions,
|
|
1616
1624
|
updateWindowRect,
|
|
1617
1625
|
updateWindowTitle,
|
|
1618
|
-
toggleWindowsHidden,
|
|
1626
|
+
toggleWindowsHidden: toggleWindowsHidden2,
|
|
1619
1627
|
moveTraySlot,
|
|
1620
1628
|
arrangeActiveWindows,
|
|
1621
1629
|
popOutWindow,
|
|
@@ -1734,7 +1742,7 @@ var selectOverlayStateFor = (state2, key) => state2.overlayState.entries[key]?.v
|
|
|
1734
1742
|
var import_toolkit5 = require("@reduxjs/toolkit");
|
|
1735
1743
|
|
|
1736
1744
|
// src/core/middleware/closeLifecycle.ts
|
|
1737
|
-
var
|
|
1745
|
+
var import_global_slot5 = require("@ai-matrx/kit/global-slot");
|
|
1738
1746
|
|
|
1739
1747
|
// src/handles/callbackManager.ts
|
|
1740
1748
|
var import_global_slot3 = require("@ai-matrx/kit/global-slot");
|
|
@@ -1763,9 +1771,9 @@ var handlesState = () => (0, import_global_slot3.globalSlot)(HANDLES_SLOT, () =>
|
|
|
1763
1771
|
owners: /* @__PURE__ */ new Map(),
|
|
1764
1772
|
registryListeners: /* @__PURE__ */ new Set()
|
|
1765
1773
|
}));
|
|
1766
|
-
function invoke(
|
|
1767
|
-
if (typeof
|
|
1768
|
-
return
|
|
1774
|
+
function invoke(slot2, data, context) {
|
|
1775
|
+
if (typeof slot2 !== "function") return void 0;
|
|
1776
|
+
return slot2(data, context);
|
|
1769
1777
|
}
|
|
1770
1778
|
function invokeListener(listener, data, context) {
|
|
1771
1779
|
return listener(data, context);
|
|
@@ -1797,11 +1805,11 @@ var CallbackManager = class {
|
|
|
1797
1805
|
return this.registerEntry(callback, options);
|
|
1798
1806
|
}
|
|
1799
1807
|
/** @internal The one insertion path (typed helpers pass a fixed id and a removal hook). */
|
|
1800
|
-
registerEntry(
|
|
1808
|
+
registerEntry(slot2, options) {
|
|
1801
1809
|
const s = this.s;
|
|
1802
1810
|
const callbackId = options.id ?? newHandleId();
|
|
1803
1811
|
if (s.callbacks.has(callbackId)) this.deleteEntry(callbackId, false);
|
|
1804
|
-
const entry = { callback:
|
|
1812
|
+
const entry = { callback: slot2 };
|
|
1805
1813
|
if (options.context !== void 0) entry.context = options.context;
|
|
1806
1814
|
if (options.groupId !== void 0) entry.groupId = options.groupId;
|
|
1807
1815
|
if (options.owner !== void 0) entry.owner = options.owner;
|
|
@@ -1991,8 +1999,16 @@ var CallbackManager = class {
|
|
|
1991
1999
|
};
|
|
1992
2000
|
var callbackManager = new CallbackManager();
|
|
1993
2001
|
|
|
2002
|
+
// src/open/channels.ts
|
|
2003
|
+
var import_global_slot4 = require("@ai-matrx/kit/global-slot");
|
|
2004
|
+
var pending = () => (0, import_global_slot4.globalSlot)("ai-matrx.summon.pendingChannels", () => /* @__PURE__ */ new Map());
|
|
2005
|
+
function dropPendingChannelsOf(owner) {
|
|
2006
|
+
const map = pending();
|
|
2007
|
+
for (const [id, entry] of [...map]) if (entry.owner === owner) map.delete(id);
|
|
2008
|
+
}
|
|
2009
|
+
|
|
1994
2010
|
// src/core/middleware/closeLifecycle.ts
|
|
1995
|
-
var closeState = () => (0,
|
|
2011
|
+
var closeState = () => (0, import_global_slot5.globalSlot)("ai-matrx.summon.closeLifecycle", () => ({ flushers: /* @__PURE__ */ new Set() }));
|
|
1996
2012
|
function registerCloseFlusher(flush) {
|
|
1997
2013
|
const { flushers } = closeState();
|
|
1998
2014
|
flushers.add(flush);
|
|
@@ -2018,7 +2034,7 @@ function preservedIdentities(state2, overlayId) {
|
|
|
2018
2034
|
}
|
|
2019
2035
|
return identities;
|
|
2020
2036
|
}
|
|
2021
|
-
function
|
|
2037
|
+
function isPlainRecord3(value) {
|
|
2022
2038
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2023
2039
|
}
|
|
2024
2040
|
var CLOSE_TYPES = /* @__PURE__ */ new Set([
|
|
@@ -2030,6 +2046,7 @@ var CLOSE_TYPES = /* @__PURE__ */ new Set([
|
|
|
2030
2046
|
]);
|
|
2031
2047
|
function releaseOverlayInstance(dispatch, key, options = {}) {
|
|
2032
2048
|
callbackManager.disposeOwner(key);
|
|
2049
|
+
dropPendingChannelsOf(key);
|
|
2033
2050
|
if (!options.keepState) dispatch(clearOverlayState({ key }));
|
|
2034
2051
|
}
|
|
2035
2052
|
function closeInstanceResources(api, key) {
|
|
@@ -2038,14 +2055,15 @@ function closeInstanceResources(api, key) {
|
|
|
2038
2055
|
if (keepAlive === "hidden") return;
|
|
2039
2056
|
const hasState = api.getState().overlayState?.entries[key] !== void 0;
|
|
2040
2057
|
callbackManager.disposeOwner(key);
|
|
2058
|
+
dropPendingChannelsOf(key);
|
|
2041
2059
|
if (keepAlive !== "restore" && hasState) api.dispatch(clearOverlayState({ key }));
|
|
2042
2060
|
}
|
|
2043
2061
|
var closeLifecycleMiddleware = (api) => (next) => (action) => {
|
|
2044
|
-
if (!
|
|
2062
|
+
if (!isPlainRecord3(action) || typeof action.type !== "string" || !CLOSE_TYPES.has(action.type)) {
|
|
2045
2063
|
return next(action);
|
|
2046
2064
|
}
|
|
2047
2065
|
const type = action.type;
|
|
2048
|
-
const payload =
|
|
2066
|
+
const payload = isPlainRecord3(action.payload) ? action.payload : null;
|
|
2049
2067
|
const before = api.getState();
|
|
2050
2068
|
const openBefore = new Set(listOpenInstanceKeys(before));
|
|
2051
2069
|
let closing = [];
|
|
@@ -2059,7 +2077,7 @@ var closeLifecycleMiddleware = (api) => (next) => (action) => {
|
|
|
2059
2077
|
intents.push({ scope: "overlay", overlayId });
|
|
2060
2078
|
} else if ((type === overlaysRawActions.closeOverlay.type || type === overlaysRawActions.toggleOverlay.type) && overlayId) {
|
|
2061
2079
|
const instanceId = typeof payload?.instanceId === "string" ? payload.instanceId : DEFAULT_INSTANCE_ID;
|
|
2062
|
-
const wasOpen = before.overlays
|
|
2080
|
+
const wasOpen = before.overlays?.overlays[overlayId]?.[instanceId]?.isOpen === true;
|
|
2063
2081
|
if (type === overlaysRawActions.closeOverlay.type || wasOpen) {
|
|
2064
2082
|
closing = [{ overlayId, instanceId }];
|
|
2065
2083
|
intents.push({ scope: "exact", overlayId, instanceId });
|
|
@@ -2091,12 +2109,12 @@ var closeLifecycleMiddleware = (api) => (next) => (action) => {
|
|
|
2091
2109
|
};
|
|
2092
2110
|
|
|
2093
2111
|
// src/core/middleware/renderWatchdog.ts
|
|
2094
|
-
var
|
|
2112
|
+
var import_global_slot6 = require("@ai-matrx/kit/global-slot");
|
|
2095
2113
|
var LAZY_WINDOW_MOUNT_DEADLINE_MS = process.env.NODE_ENV === "production" ? 12e3 : 45e3;
|
|
2096
2114
|
var OPEN_TYPE = "overlays/openOverlay";
|
|
2097
2115
|
var TOGGLE_TYPE = "overlays/toggleOverlay";
|
|
2098
2116
|
var DEFAULT_INSTANCE_ID2 = "default";
|
|
2099
|
-
function
|
|
2117
|
+
function isPlainRecord4(value) {
|
|
2100
2118
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2101
2119
|
}
|
|
2102
2120
|
var CHECK_DELAY_MS = 2500;
|
|
@@ -2106,7 +2124,7 @@ var NO_MOUNT_DEADLINE_MS = LAZY_WINDOW_MOUNT_DEADLINE_MS;
|
|
|
2106
2124
|
var TOAST_DURATION_MS = 8e3;
|
|
2107
2125
|
var RECOVERY_POLL_MS = 500;
|
|
2108
2126
|
var RENDER_WATCHDOG_SLOT = "ai-matrx.summon.renderWatchdog";
|
|
2109
|
-
var watchdogState = () => (0,
|
|
2127
|
+
var watchdogState = () => (0, import_global_slot6.globalSlot)(RENDER_WATCHDOG_SLOT, () => ({
|
|
2110
2128
|
renderAcks: /* @__PURE__ */ new Map(),
|
|
2111
2129
|
ackWaiters: /* @__PURE__ */ new Map(),
|
|
2112
2130
|
watches: /* @__PURE__ */ new Map()
|
|
@@ -2323,9 +2341,9 @@ function createOverlayRenderWatchdogMiddleware(ports) {
|
|
|
2323
2341
|
const typed = action;
|
|
2324
2342
|
if (typed.type !== OPEN_TYPE && typed.type !== TOGGLE_TYPE) return result;
|
|
2325
2343
|
const payload = typed.payload;
|
|
2326
|
-
const overlayId =
|
|
2344
|
+
const overlayId = isPlainRecord4(payload) && typeof payload.overlayId === "string" ? payload.overlayId : void 0;
|
|
2327
2345
|
if (!overlayId) return result;
|
|
2328
|
-
const instanceIdRaw =
|
|
2346
|
+
const instanceIdRaw = isPlainRecord4(payload) && typeof payload.instanceId === "string" ? payload.instanceId : void 0;
|
|
2329
2347
|
const meta = getOverlayMeta(overlayId);
|
|
2330
2348
|
if (!meta || !watchdogTracksOpen(meta, instanceIdRaw ?? DEFAULT_INSTANCE_ID2)) {
|
|
2331
2349
|
return result;
|
|
@@ -2383,4 +2401,21 @@ function buildDockWindowPayload(windowId) {
|
|
|
2383
2401
|
viewportHeight: window.innerHeight
|
|
2384
2402
|
};
|
|
2385
2403
|
}
|
|
2404
|
+
|
|
2405
|
+
// src/open/gate.ts
|
|
2406
|
+
var import_global_slot7 = require("@ai-matrx/kit/global-slot");
|
|
2407
|
+
var slot = () => (0, import_global_slot7.globalSlot)("ai-matrx.summon.gate", () => ({ core: null, loading: null, gates: /* @__PURE__ */ new Set(), listeners: /* @__PURE__ */ new Set() }));
|
|
2408
|
+
function installSummonCore(core) {
|
|
2409
|
+
const s = slot();
|
|
2410
|
+
if (s.core) return;
|
|
2411
|
+
s.core = core;
|
|
2412
|
+
const gates = [...s.gates];
|
|
2413
|
+
s.gates.clear();
|
|
2414
|
+
for (const gate of gates) gate.install(core);
|
|
2415
|
+
for (const listener of [...s.listeners]) listener();
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2418
|
+
// src/index.ts
|
|
2419
|
+
var summonCore = { reducers: summonReducers, createMiddleware: createSummonMiddleware };
|
|
2420
|
+
installSummonCore(summonCore);
|
|
2386
2421
|
//# sourceMappingURL=index.cjs.map
|