react-os-shell 3.12.0 → 3.14.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/dist/Browser-XFQRBIF2.js +7 -0
- package/dist/{Browser-2FY74OL6.js.map → Browser-XFQRBIF2.js.map} +1 -1
- package/dist/{Calculator-47JKICCY.js → Calculator-V7OU5TSD.js} +4 -4
- package/dist/{Calculator-47JKICCY.js.map → Calculator-V7OU5TSD.js.map} +1 -1
- package/dist/{CurrencyConverter-V6MDJF34.js → CurrencyConverter-SUSY6HRW.js} +4 -4
- package/dist/{CurrencyConverter-V6MDJF34.js.map → CurrencyConverter-SUSY6HRW.js.map} +1 -1
- package/dist/{Documents-IHK2JMWI.js → Documents-GEBFR23U.js} +4 -4
- package/dist/{Documents-IHK2JMWI.js.map → Documents-GEBFR23U.js.map} +1 -1
- package/dist/Files-PZ3XY3QV.js +12 -0
- package/dist/{Files-JK45SHMI.js.map → Files-PZ3XY3QV.js.map} +1 -1
- package/dist/{Notepad-2WJML7F3.js → Notepad-QLWMRFXJ.js} +4 -4
- package/dist/{Notepad-2WJML7F3.js.map → Notepad-QLWMRFXJ.js.map} +1 -1
- package/dist/{PomodoroTimer-GH2L545O.js → PomodoroTimer-KCKA254T.js} +5 -5
- package/dist/{PomodoroTimer-GH2L545O.js.map → PomodoroTimer-KCKA254T.js.map} +1 -1
- package/dist/Preview-XSENQ2JX.js +8 -0
- package/dist/{Preview-EH5SPVRS.js.map → Preview-XSENQ2JX.js.map} +1 -1
- package/dist/Spreadsheet-VE2FEXFK.js +7 -0
- package/dist/{Spreadsheet-ZYL35FIB.js.map → Spreadsheet-VE2FEXFK.js.map} +1 -1
- package/dist/{Stock-D2GVQNCO.js → Stock-YRQMQXTG.js} +4 -4
- package/dist/{Stock-D2GVQNCO.js.map → Stock-YRQMQXTG.js.map} +1 -1
- package/dist/{Weather-LMBR67BX.js → Weather-RWEAJS36.js} +4 -4
- package/dist/{Weather-LMBR67BX.js.map → Weather-RWEAJS36.js.map} +1 -1
- package/dist/{WorldClock-HWHH52IB.js → WorldClock-E6MSOW5A.js} +4 -4
- package/dist/{WorldClock-HWHH52IB.js.map → WorldClock-E6MSOW5A.js.map} +1 -1
- package/dist/apps/index.d.ts +1 -1
- package/dist/apps/index.js +19 -19
- package/dist/{chunk-HT74MVNF.js → chunk-6GVIP3TJ.js} +4 -4
- package/dist/{chunk-HT74MVNF.js.map → chunk-6GVIP3TJ.js.map} +1 -1
- package/dist/{chunk-5GXZVC32.js → chunk-7E7UQYFL.js} +4 -4
- package/dist/{chunk-5GXZVC32.js.map → chunk-7E7UQYFL.js.map} +1 -1
- package/dist/{chunk-JSBH5CKG.js → chunk-7GSHFSWI.js} +4 -4
- package/dist/{chunk-JSBH5CKG.js.map → chunk-7GSHFSWI.js.map} +1 -1
- package/dist/{chunk-PXJWC5FZ.js → chunk-ATLWPGXH.js} +5 -5
- package/dist/{chunk-PXJWC5FZ.js.map → chunk-ATLWPGXH.js.map} +1 -1
- package/dist/{chunk-EOHB7ETC.js → chunk-FKZTCOOQ.js} +4 -4
- package/dist/{chunk-EOHB7ETC.js.map → chunk-FKZTCOOQ.js.map} +1 -1
- package/dist/{chunk-UY2ZQNVM.js → chunk-GYAP4IBA.js} +4 -4
- package/dist/{chunk-UY2ZQNVM.js.map → chunk-GYAP4IBA.js.map} +1 -1
- package/dist/{chunk-HDXKSJDT.js → chunk-H564CUGN.js} +3 -3
- package/dist/{chunk-HDXKSJDT.js.map → chunk-H564CUGN.js.map} +1 -1
- package/dist/{chunk-55MDWJQ2.js → chunk-KHKPAF5R.js} +3 -3
- package/dist/{chunk-55MDWJQ2.js.map → chunk-KHKPAF5R.js.map} +1 -1
- package/dist/{chunk-PQFF4IXI.js → chunk-ZGLERMDX.js} +32 -17
- package/dist/chunk-ZGLERMDX.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +12 -12
- package/dist/{types-DqonitKD.d.ts → types-BHVq95fp.d.ts} +11 -0
- package/package.json +1 -1
- package/dist/Browser-2FY74OL6.js +0 -7
- package/dist/Files-JK45SHMI.js +0 -12
- package/dist/Preview-EH5SPVRS.js +0 -8
- package/dist/Spreadsheet-ZYL35FIB.js +0 -7
- package/dist/chunk-PQFF4IXI.js.map +0 -1
|
@@ -667,11 +667,11 @@ function ensureGestureStyle() {
|
|
|
667
667
|
if (typeof document === "undefined" || document.getElementById(GESTURE_STYLE_ID)) return;
|
|
668
668
|
const style = document.createElement("style");
|
|
669
669
|
style.id = GESTURE_STYLE_ID;
|
|
670
|
-
style.textContent = //
|
|
671
|
-
// window
|
|
672
|
-
//
|
|
673
|
-
//
|
|
674
|
-
"body.rosh-gesturing
|
|
670
|
+
style.textContent = // Promote every window to its own compositor layer for the gesture so
|
|
671
|
+
// dragging the foreground window doesn't repaint the ones behind it. We do
|
|
672
|
+
// NOT drop backdrop-blur — every window keeps its frosted glass while a
|
|
673
|
+
// drag/resize is in progress (only the grabbed window re-samples, cheaply).
|
|
674
|
+
"body.rosh-gesturing [data-modal-panel]{will-change:transform}";
|
|
675
675
|
document.head.appendChild(style);
|
|
676
676
|
}
|
|
677
677
|
var RESIZE_CURSOR = {
|
|
@@ -692,8 +692,6 @@ function beginPointerGesture(handle, pointerId, cursor) {
|
|
|
692
692
|
} catch {
|
|
693
693
|
}
|
|
694
694
|
document.body.classList.add("rosh-gesturing");
|
|
695
|
-
const gestureWindow = handle.closest("[data-modal-panel]");
|
|
696
|
-
gestureWindow?.classList.add("rosh-gesture-window");
|
|
697
695
|
const shield = document.createElement("div");
|
|
698
696
|
shield.setAttribute("data-drag-shield", "");
|
|
699
697
|
shield.style.cssText = `position:fixed;inset:0;z-index:2147483647;cursor:${cursor};background:transparent;touch-action:none`;
|
|
@@ -707,7 +705,6 @@ function beginPointerGesture(handle, pointerId, cursor) {
|
|
|
707
705
|
} catch {
|
|
708
706
|
}
|
|
709
707
|
shield.remove();
|
|
710
|
-
gestureWindow?.classList.remove("rosh-gesture-window");
|
|
711
708
|
document.body.classList.remove("rosh-gesturing");
|
|
712
709
|
};
|
|
713
710
|
}
|
|
@@ -2099,7 +2096,7 @@ function RestoredRegistryModal({ item, onClose, onMinimize }) {
|
|
|
2099
2096
|
icon: entityIcon,
|
|
2100
2097
|
title: titleContent,
|
|
2101
2098
|
footer: footerContent,
|
|
2102
|
-
copyText: item.
|
|
2099
|
+
copyText: item.label,
|
|
2103
2100
|
windowKey: item.id,
|
|
2104
2101
|
openedFromKey: item.openedFrom,
|
|
2105
2102
|
size: entry.size || "2xl",
|
|
@@ -2349,14 +2346,16 @@ function TaskbarWindows({ openWindows, onRemove, onCloseAll, onSplitView, onActi
|
|
|
2349
2346
|
const groups = [];
|
|
2350
2347
|
const idx = /* @__PURE__ */ new Map();
|
|
2351
2348
|
for (const item of tabWindows) {
|
|
2352
|
-
const
|
|
2349
|
+
const entry = item.route ? WINDOW_REGISTRY[item.route] : void 0;
|
|
2350
|
+
const grp = entry?.taskbarGroup;
|
|
2351
|
+
const key = grp?.key ?? item.route ?? `entity:${item.id}`;
|
|
2353
2352
|
const i = idx.get(key);
|
|
2354
2353
|
if (i !== void 0) {
|
|
2355
2354
|
groups[i].items.push(item);
|
|
2356
2355
|
} else {
|
|
2357
2356
|
idx.set(key, groups.length);
|
|
2358
|
-
const
|
|
2359
|
-
groups.push({ key, route: item.route, label
|
|
2357
|
+
const label = grp?.label ?? entry?.label ?? item.label;
|
|
2358
|
+
groups.push({ key, route: grp?.icon ?? item.route, label, items: [item] });
|
|
2360
2359
|
}
|
|
2361
2360
|
}
|
|
2362
2361
|
return createPortal(
|
|
@@ -2487,12 +2486,28 @@ function seedDefaultWidgetPositions(widgets) {
|
|
|
2487
2486
|
y += stackH + GAP;
|
|
2488
2487
|
}
|
|
2489
2488
|
}
|
|
2489
|
+
function healWindowIds(items) {
|
|
2490
|
+
const counts = /* @__PURE__ */ new Map();
|
|
2491
|
+
for (const it of items) counts.set(it.id, (counts.get(it.id) ?? 0) + 1);
|
|
2492
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2493
|
+
const out = [];
|
|
2494
|
+
for (const it of items) {
|
|
2495
|
+
let id = it.id;
|
|
2496
|
+
if ((counts.get(it.id) ?? 0) > 1 && it.type === "modal" && it.entityType && it.entityId) {
|
|
2497
|
+
id = `${it.entityType}:${it.entityId}`;
|
|
2498
|
+
}
|
|
2499
|
+
if (seen.has(id)) continue;
|
|
2500
|
+
seen.add(id);
|
|
2501
|
+
out.push(id === it.id ? it : { ...it, id });
|
|
2502
|
+
}
|
|
2503
|
+
return out;
|
|
2504
|
+
}
|
|
2490
2505
|
function restoreWindowState() {
|
|
2491
2506
|
try {
|
|
2492
2507
|
if (window.location.pathname === "/login") return [];
|
|
2493
2508
|
if (!localStorage.getItem("access_token")) return [];
|
|
2494
2509
|
const stored = localStorage.getItem(SESSION_KEY);
|
|
2495
|
-
if (stored) return JSON.parse(stored);
|
|
2510
|
+
if (stored) return healWindowIds(JSON.parse(stored));
|
|
2496
2511
|
} catch {
|
|
2497
2512
|
}
|
|
2498
2513
|
seedDefaultWidgetPositions(DEFAULT_WIDGETS);
|
|
@@ -2524,10 +2539,10 @@ function WindowManagerProvider({ children }) {
|
|
|
2524
2539
|
};
|
|
2525
2540
|
const openEntity = useCallback((entityType, entityId, snapshot, label, route) => {
|
|
2526
2541
|
if (!WINDOW_REGISTRY[entityType] || !isEntityEntry(WINDOW_REGISTRY[entityType])) return;
|
|
2527
|
-
const id =
|
|
2542
|
+
const id = `${entityType}:${entityId}`;
|
|
2528
2543
|
const openedFrom = currentlyActiveWindowKey();
|
|
2529
2544
|
setOpenWindows((prev) => {
|
|
2530
|
-
const existing = prev.find((m) => m.
|
|
2545
|
+
const existing = prev.find((m) => m.entityType === entityType && String(m.entityId) === String(entityId));
|
|
2531
2546
|
if (existing) {
|
|
2532
2547
|
activateAfterMount(existing.id);
|
|
2533
2548
|
return prev;
|
|
@@ -2635,5 +2650,5 @@ function WindowManagerProvider({ children }) {
|
|
|
2635
2650
|
}
|
|
2636
2651
|
|
|
2637
2652
|
export { CancelButton, CopyButton, DocFavStar, LoadingSpinner, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, ThumbCard, WINDOW_REGISTRY, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, activateModal, client_default, commitExposeHighlight, exitExposeMode, getActiveModalId, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, registerModalEscapeInterceptor, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useIsMobile, useLocalStoragePrefs, useModalActive, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle };
|
|
2638
|
-
//# sourceMappingURL=chunk-
|
|
2639
|
-
//# sourceMappingURL=chunk-
|
|
2653
|
+
//# sourceMappingURL=chunk-ZGLERMDX.js.map
|
|
2654
|
+
//# sourceMappingURL=chunk-ZGLERMDX.js.map
|