react-os-shell 0.2.60 → 0.2.63
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-P7TWQQYY.js → Browser-F7TJRHMK.js} +4 -3
- package/dist/Browser-F7TJRHMK.js.map +1 -0
- package/dist/{Calculator-PVTLAMJG.js → Calculator-FO3NUVCK.js} +5 -4
- package/dist/Calculator-FO3NUVCK.js.map +1 -0
- package/dist/{Calendar-UUBCO6DL.js → Calendar-ZGKMZ5TU.js} +4 -3
- package/dist/Calendar-ZGKMZ5TU.js.map +1 -0
- package/dist/{CurrencyConverter-C6YPYMKF.js → CurrencyConverter-IMHQD6XV.js} +5 -4
- package/dist/CurrencyConverter-IMHQD6XV.js.map +1 -0
- package/dist/{Documents-W2KVAGMZ.js → Documents-PHVXWN4S.js} +4 -3
- package/dist/Documents-PHVXWN4S.js.map +1 -0
- package/dist/{Email-LL5ABOWG.js → Email-VXTFMSS5.js} +5 -4
- package/dist/Email-VXTFMSS5.js.map +1 -0
- package/dist/Files-YO5YOKD7.js +9 -0
- package/dist/{Files-EJOCVUFL.js.map → Files-YO5YOKD7.js.map} +1 -1
- package/dist/{Minesweeper-A63TCDW2.js → Minesweeper-PX4DUPOE.js} +4 -3
- package/dist/Minesweeper-PX4DUPOE.js.map +1 -0
- package/dist/{Notepad-6J6NAWRN.js → Notepad-LFCZD2Y3.js} +4 -3
- package/dist/Notepad-LFCZD2Y3.js.map +1 -0
- package/dist/{PomodoroTimer-2O2YIXLM.js → PomodoroTimer-7Y36AEWF.js} +5 -4
- package/dist/PomodoroTimer-7Y36AEWF.js.map +1 -0
- package/dist/Preview-UMGXEYCV.js +8 -0
- package/dist/{Preview-GTN5ZMQA.js.map → Preview-UMGXEYCV.js.map} +1 -1
- package/dist/Sidebar-4V6NQROQ.js +234 -0
- package/dist/Sidebar-4V6NQROQ.js.map +1 -0
- package/dist/Spreadsheet-L2DOK2JK.js +7 -0
- package/dist/Spreadsheet-L2DOK2JK.js.map +1 -0
- package/dist/{Weather-LTHMP7VM.js → Weather-FDL7CFDL.js} +5 -4
- package/dist/Weather-FDL7CFDL.js.map +1 -0
- package/dist/{WorldClock-LKSGXQ4D.js → WorldClock-4PCYEMLF.js} +5 -4
- package/dist/WorldClock-4PCYEMLF.js.map +1 -0
- package/dist/apps/index.d.ts +9 -1
- package/dist/apps/index.js +20 -17
- package/dist/apps/index.js.map +1 -1
- package/dist/{chunk-YMXAXNA5.js → chunk-6JAAM5TA.js} +4 -4
- package/dist/{chunk-YMXAXNA5.js.map → chunk-6JAAM5TA.js.map} +1 -1
- package/dist/chunk-ADJ3CERD.js +31 -0
- package/dist/chunk-ADJ3CERD.js.map +1 -0
- package/dist/{chunk-7ZPVS3H2.js → chunk-E7ZO44KU.js} +3 -3
- package/dist/{chunk-7ZPVS3H2.js.map → chunk-E7ZO44KU.js.map} +1 -1
- package/dist/{Spreadsheet-T3AHYV5C.js → chunk-FJ6NSPYF.js} +46 -7
- package/dist/chunk-FJ6NSPYF.js.map +1 -0
- package/dist/{chunk-FBOBSZM5.js → chunk-ONQJGZCL.js} +34 -78
- package/dist/chunk-ONQJGZCL.js.map +1 -0
- package/dist/chunk-SSA762W5.js +71 -0
- package/dist/chunk-SSA762W5.js.map +1 -0
- package/dist/{chunk-6W6HAU2K.js → chunk-TRYZ75AV.js} +3 -3
- package/dist/{chunk-6W6HAU2K.js.map → chunk-TRYZ75AV.js.map} +1 -1
- package/dist/index.js +68 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Browser-P7TWQQYY.js.map +0 -1
- package/dist/Calculator-PVTLAMJG.js.map +0 -1
- package/dist/Calendar-UUBCO6DL.js.map +0 -1
- package/dist/CurrencyConverter-C6YPYMKF.js.map +0 -1
- package/dist/Documents-W2KVAGMZ.js.map +0 -1
- package/dist/Email-LL5ABOWG.js.map +0 -1
- package/dist/Files-EJOCVUFL.js +0 -8
- package/dist/Minesweeper-A63TCDW2.js.map +0 -1
- package/dist/Notepad-6J6NAWRN.js.map +0 -1
- package/dist/PomodoroTimer-2O2YIXLM.js.map +0 -1
- package/dist/Preview-GTN5ZMQA.js +0 -7
- package/dist/Spreadsheet-T3AHYV5C.js.map +0 -1
- package/dist/Weather-LTHMP7VM.js.map +0 -1
- package/dist/WorldClock-LKSGXQ4D.js.map +0 -1
- package/dist/chunk-FBOBSZM5.js.map +0 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// src/shell/nav-types.ts
|
|
2
|
+
function isSection(item) {
|
|
3
|
+
return "items" in item;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
// src/shell-config/nav.tsx
|
|
7
|
+
var _navIcons = {};
|
|
8
|
+
var navIcons = new Proxy(_navIcons, {
|
|
9
|
+
get(_t, k) {
|
|
10
|
+
return _navIcons[k];
|
|
11
|
+
},
|
|
12
|
+
has(_t, k) {
|
|
13
|
+
return k in _navIcons;
|
|
14
|
+
},
|
|
15
|
+
ownKeys() {
|
|
16
|
+
return Object.keys(_navIcons);
|
|
17
|
+
},
|
|
18
|
+
getOwnPropertyDescriptor(_t, k) {
|
|
19
|
+
if (k in _navIcons) return { configurable: true, enumerable: true, value: _navIcons[k] };
|
|
20
|
+
return void 0;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
function setShellNavIcons(icons) {
|
|
24
|
+
for (const k of Object.keys(_navIcons)) delete _navIcons[k];
|
|
25
|
+
Object.assign(_navIcons, icons);
|
|
26
|
+
}
|
|
27
|
+
var sectionIcons = {};
|
|
28
|
+
var navSections = [];
|
|
29
|
+
var startMenuCategories = { erp: [], system: [], virtual: [] };
|
|
30
|
+
|
|
31
|
+
// src/utils/glass.ts
|
|
32
|
+
function getMenuOpacity() {
|
|
33
|
+
try {
|
|
34
|
+
const val = getComputedStyle(document.documentElement).getPropertyValue("--menu-opacity")?.trim();
|
|
35
|
+
if (val) return parseFloat(val);
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
return 0.95;
|
|
39
|
+
}
|
|
40
|
+
function isDarkTheme() {
|
|
41
|
+
try {
|
|
42
|
+
return document.documentElement.getAttribute("data-theme") === "dark";
|
|
43
|
+
} catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function glassStyle(opacity) {
|
|
48
|
+
const o = opacity ?? getMenuOpacity();
|
|
49
|
+
if (isDarkTheme()) {
|
|
50
|
+
return {
|
|
51
|
+
background: `linear-gradient(135deg, rgba(30,30,46,${o * 0.85}) 0%, rgba(24,24,37,${o * 0.75}) 50%, rgba(30,30,46,${o * 0.85}) 100%)`,
|
|
52
|
+
backdropFilter: "blur(40px) saturate(1.6)",
|
|
53
|
+
WebkitBackdropFilter: "blur(40px) saturate(1.6)",
|
|
54
|
+
border: "1px solid rgba(255,255,255,0.08)",
|
|
55
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.06), inset 0 -1px 0 rgba(0,0,0,0.4), 0 8px 32px rgba(0,0,0,0.5), 0 2px 8px rgba(0,0,0,0.3)"
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
background: `linear-gradient(135deg, rgba(255,255,255,${o * 0.85}) 0%, rgba(255,255,255,${o * 0.65}) 50%, rgba(255,255,255,${o * 0.75}) 100%)`,
|
|
60
|
+
backdropFilter: "blur(40px) saturate(1.8)",
|
|
61
|
+
WebkitBackdropFilter: "blur(40px) saturate(1.8)",
|
|
62
|
+
border: "1px solid rgba(255,255,255,0.35)",
|
|
63
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.4), inset 0 -1px 0 rgba(255,255,255,0.1), 0 8px 32px rgba(0,0,0,0.15), 0 2px 8px rgba(0,0,0,0.08)"
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
var GLASS_DIVIDER = "border-white/20";
|
|
67
|
+
var GLASS_INPUT_BG = "glass-input-bg";
|
|
68
|
+
|
|
69
|
+
export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle, isSection, navIcons, navSections, sectionIcons, setShellNavIcons, startMenuCategories };
|
|
70
|
+
//# sourceMappingURL=chunk-SSA762W5.js.map
|
|
71
|
+
//# sourceMappingURL=chunk-SSA762W5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shell/nav-types.ts","../src/shell-config/nav.tsx","../src/utils/glass.ts"],"names":[],"mappings":";AAsCO,SAAS,UAAU,IAAA,EAAgD;AACxE,EAAA,OAAO,OAAA,IAAW,IAAA;AACpB;;;ACxBA,IAAM,YAAuC,EAAC;AACvC,IAAM,QAAA,GAAsC,IAAI,KAAA,CAAM,SAAA,EAAW;AAAA,EACtE,GAAA,CAAI,IAAI,CAAA,EAAW;AAAE,IAAA,OAAO,UAAU,CAAC,CAAA;AAAA,EAAG,CAAA;AAAA,EAC1C,GAAA,CAAI,IAAI,CAAA,EAAW;AAAE,IAAA,OAAO,CAAA,IAAK,SAAA;AAAA,EAAW,CAAA;AAAA,EAC5C,OAAA,GAAU;AAAE,IAAA,OAAO,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,EAAG,CAAA;AAAA,EAC3C,wBAAA,CAAyB,IAAI,CAAA,EAAW;AACtC,IAAA,IAAI,CAAA,IAAK,SAAA,EAAW,OAAO,EAAE,YAAA,EAAc,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAE;AACvF,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAC;AACM,SAAS,iBAAiB,KAAA,EAAwC;AACvE,EAAA,KAAA,MAAW,KAAK,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG,OAAO,UAAU,CAAC,CAAA;AAC1D,EAAA,MAAA,CAAO,MAAA,CAAO,WAAW,KAAK,CAAA;AAChC;AAEO,IAAM,eAA0C;AAChD,IAAM,cAAwC;AAC9C,IAAM,mBAAA,GAA2C,EAAE,GAAA,EAAK,EAAC,EAAG,QAAQ,EAAC,EAAG,OAAA,EAAS,EAAC;;;AC9BzF,SAAS,cAAA,GAAyB;AAChC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,iBAAiB,QAAA,CAAS,eAAe,EAAE,gBAAA,CAAiB,gBAAgB,GAAG,IAAA,EAAK;AAChG,IAAA,IAAI,GAAA,EAAK,OAAO,UAAA,CAAW,GAAG,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AAAA,EAAC;AACT,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,GAAuB;AAC9B,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,eAAA,CAAgB,YAAA,CAAa,YAAY,CAAA,KAAM,MAAA;AAAA,EACjE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKO,SAAS,WAAW,OAAA,EAAiC;AAC1D,EAAA,MAAM,CAAA,GAAI,WAAW,cAAA,EAAe;AACpC,EAAA,IAAI,aAAY,EAAG;AAGjB,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,yCAAyC,CAAA,GAAI,IAAI,uBAAuB,CAAA,GAAI,IAAI,CAAA,qBAAA,EAAwB,CAAA,GAAI,IAAI,CAAA,OAAA,CAAA;AAAA,MAC5H,cAAA,EAAgB,0BAAA;AAAA,MAChB,oBAAA,EAAsB,0BAAA;AAAA,MACtB,MAAA,EAAQ,kCAAA;AAAA,MACR,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,4CAA4C,CAAA,GAAI,IAAI,0BAA0B,CAAA,GAAI,IAAI,CAAA,wBAAA,EAA2B,CAAA,GAAI,IAAI,CAAA,OAAA,CAAA;AAAA,IACrI,cAAA,EAAgB,0BAAA;AAAA,IAChB,oBAAA,EAAsB,0BAAA;AAAA,IACtB,MAAA,EAAQ,kCAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AACF;AAGO,IAAM,aAAA,GAAgB;AAKtB,IAAM,cAAA,GAAiB","file":"chunk-SSA762W5.js","sourcesContent":["/**\n * Nav data types used by <Layout> + <StartMenu>. The actual sections, icons,\n * and categories are consumer-supplied via Layout props — the package never\n * ships nav DATA, only the shape it expects.\n */\nimport type { ReactNode } from 'react';\n\nexport interface NavItem {\n to: string;\n label: string;\n perms?: string[];\n dividerAfter?: boolean;\n}\n\nexport interface NavSection {\n label: string;\n items: NavItem[];\n perms?: string[];\n /** Optional landing route for clicks on the section title itself\n * (e.g. R&D's `/rd` dashboard). */\n to?: string;\n}\n\nexport interface VirtualSection {\n label: string;\n items: NavItem[];\n icon?: ReactNode;\n}\n\nexport interface StartMenuCategories {\n /** Section labels rendered in the \"ERP\" group (bold, with section icon). */\n erp: string[];\n /** Section labels rendered in the \"system\" group. */\n system: string[];\n /** Optional virtual flyouts (e.g. a \"Utilities\" tray). */\n virtual?: VirtualSection[];\n}\n\nexport function isSection(item: NavSection | NavItem): item is NavSection {\n return 'items' in item;\n}\n","/**\n * INTERNAL stub — package-side compatibility for files that legacy-imported\n * default nav data from `shell-config/nav`. The package never ships nav\n * DATA; consumers always supply `navSections` / `navIcons` / `sectionIcons` /\n * `categories` as Layout props.\n *\n * Empty defaults exported here so the copied files compile during the\n * extraction transition. Each consumer-facing field is also re-exported as\n * a TYPE alias for code that only needed the shape.\n */\nimport type { ReactNode } from 'react';\nimport type { NavItem, NavSection, StartMenuCategories, VirtualSection } from '../shell/nav-types';\n\n// Live proxy: WindowManager reads window-title icons from this module-level\n// map. Consumers register their full icon set once at app startup so the\n// title bars show the same glyphs as the start menu.\nconst _navIcons: Record<string, ReactNode> = {};\nexport const navIcons: Record<string, ReactNode> = new Proxy(_navIcons, {\n get(_t, k: string) { return _navIcons[k]; },\n has(_t, k: string) { return k in _navIcons; },\n ownKeys() { return Object.keys(_navIcons); },\n getOwnPropertyDescriptor(_t, k: string) {\n if (k in _navIcons) return { configurable: true, enumerable: true, value: _navIcons[k] };\n return undefined;\n },\n});\nexport function setShellNavIcons(icons: Record<string, ReactNode>): void {\n for (const k of Object.keys(_navIcons)) delete _navIcons[k];\n Object.assign(_navIcons, icons);\n}\n\nexport const sectionIcons: Record<string, ReactNode> = {};\nexport const navSections: (NavSection | NavItem)[] = [];\nexport const startMenuCategories: StartMenuCategories = { erp: [], system: [], virtual: [] };\n\nexport { isSection } from '../shell/nav-types';\nexport type { NavItem, NavSection, StartMenuCategories, VirtualSection };\n","import type { CSSProperties } from 'react';\n\n/** Read the system menu opacity from CSS custom property set by Layout */\nfunction getMenuOpacity(): number {\n try {\n const val = getComputedStyle(document.documentElement).getPropertyValue('--menu-opacity')?.trim();\n if (val) return parseFloat(val);\n } catch {}\n return 0.95;\n}\n\nfunction isDarkTheme(): boolean {\n try {\n return document.documentElement.getAttribute('data-theme') === 'dark';\n } catch {\n return false;\n }\n}\n\n/** Frosted glass style — shared across all menus, popups, and glass UI elements.\n * Reads --menu-opacity CSS variable set by the theme system, and adapts the\n * base tint to dark mode so menus don't stay light-cream when text is light. */\nexport function glassStyle(opacity?: number): CSSProperties {\n const o = opacity ?? getMenuOpacity();\n if (isDarkTheme()) {\n // Dark frosted glass — Catppuccin-aligned base (#1e1e2e / 30,30,46) with\n // a subtle gradient and lighter inner highlight.\n return {\n background: `linear-gradient(135deg, rgba(30,30,46,${o * 0.85}) 0%, rgba(24,24,37,${o * 0.75}) 50%, rgba(30,30,46,${o * 0.85}) 100%)`,\n backdropFilter: 'blur(40px) saturate(1.6)',\n WebkitBackdropFilter: 'blur(40px) saturate(1.6)',\n border: '1px solid rgba(255,255,255,0.08)',\n boxShadow: 'inset 0 1px 0 rgba(255,255,255,0.06), inset 0 -1px 0 rgba(0,0,0,0.4), 0 8px 32px rgba(0,0,0,0.5), 0 2px 8px rgba(0,0,0,0.3)',\n };\n }\n return {\n background: `linear-gradient(135deg, rgba(255,255,255,${o * 0.85}) 0%, rgba(255,255,255,${o * 0.65}) 50%, rgba(255,255,255,${o * 0.75}) 100%)`,\n backdropFilter: 'blur(40px) saturate(1.8)',\n WebkitBackdropFilter: 'blur(40px) saturate(1.8)',\n border: '1px solid rgba(255,255,255,0.35)',\n boxShadow: 'inset 0 1px 0 rgba(255,255,255,0.4), inset 0 -1px 0 rgba(255,255,255,0.1), 0 8px 32px rgba(0,0,0,0.15), 0 2px 8px rgba(0,0,0,0.08)',\n };\n}\n\n/** Glass divider border color */\nexport const GLASS_DIVIDER = 'border-white/20';\n\n/** Glass input/search bar background — declared in styles.css so it can adapt\n * to dark mode (a flat `bg-white/15` reads as a too-bright tile on the dark\n * glass gradient). */\nexport const GLASS_INPUT_BG = 'glass-input-bg';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ImageAnnotator_default } from './chunk-KUIPWCTJ.js';
|
|
2
2
|
import { toast_default } from './chunk-WIJ45SYD.js';
|
|
3
|
-
import { WindowTitle, getActiveModalId } from './chunk-
|
|
3
|
+
import { WindowTitle, getActiveModalId } from './chunk-ONQJGZCL.js';
|
|
4
4
|
import { createContext, useState, useEffect, useRef, useContext } from 'react';
|
|
5
5
|
import { createPortal } from 'react-dom';
|
|
6
6
|
import * as pdfjsLib from 'pdfjs-dist';
|
|
@@ -2396,5 +2396,5 @@ function ImagePanel({ url, filename, onDownload, onEmail }) {
|
|
|
2396
2396
|
}
|
|
2397
2397
|
|
|
2398
2398
|
export { Preview, setPdfPreview };
|
|
2399
|
-
//# sourceMappingURL=chunk-
|
|
2400
|
-
//# sourceMappingURL=chunk-
|
|
2399
|
+
//# sourceMappingURL=chunk-TRYZ75AV.js.map
|
|
2400
|
+
//# sourceMappingURL=chunk-TRYZ75AV.js.map
|