react-os-shell 3.17.1 → 3.18.0

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.
Files changed (49) hide show
  1. package/dist/{Browser-77H2ZZLT.js → Browser-IOBONCZC.js} +6 -6
  2. package/dist/{Browser-77H2ZZLT.js.map → Browser-IOBONCZC.js.map} +1 -1
  3. package/dist/{Calculator-VNAHCUPX.js → Calculator-B3KGTYLY.js} +5 -5
  4. package/dist/{Calculator-VNAHCUPX.js.map → Calculator-B3KGTYLY.js.map} +1 -1
  5. package/dist/{CurrencyConverter-6KCSMTK3.js → CurrencyConverter-WZIIGN4U.js} +5 -5
  6. package/dist/{CurrencyConverter-6KCSMTK3.js.map → CurrencyConverter-WZIIGN4U.js.map} +1 -1
  7. package/dist/{Documents-LQTYAUKW.js → Documents-ANDEPGKO.js} +6 -6
  8. package/dist/{Documents-LQTYAUKW.js.map → Documents-ANDEPGKO.js.map} +1 -1
  9. package/dist/{Files-757RXEST.js → Files-XT4MLFCU.js} +8 -8
  10. package/dist/{Files-757RXEST.js.map → Files-XT4MLFCU.js.map} +1 -1
  11. package/dist/{Notepad-GYLYX7T3.js → Notepad-NPOWW7MO.js} +6 -6
  12. package/dist/{Notepad-GYLYX7T3.js.map → Notepad-NPOWW7MO.js.map} +1 -1
  13. package/dist/{PomodoroTimer-JXQ7AUGT.js → PomodoroTimer-2LV36KKW.js} +6 -6
  14. package/dist/{PomodoroTimer-JXQ7AUGT.js.map → PomodoroTimer-2LV36KKW.js.map} +1 -1
  15. package/dist/{Preview-YR23SFGX.js → Preview-QSLIBJN2.js} +6 -6
  16. package/dist/{Preview-YR23SFGX.js.map → Preview-QSLIBJN2.js.map} +1 -1
  17. package/dist/{Sidebar-PY762ANK.js → Sidebar-AGFOKQ5J.js} +3 -3
  18. package/dist/{Sidebar-PY762ANK.js.map → Sidebar-AGFOKQ5J.js.map} +1 -1
  19. package/dist/{Spreadsheet-NCAGYS2M.js → Spreadsheet-HMUD3DQT.js} +6 -6
  20. package/dist/{Spreadsheet-NCAGYS2M.js.map → Spreadsheet-HMUD3DQT.js.map} +1 -1
  21. package/dist/{Stock-4KKYNRLJ.js → Stock-7XUOKZXY.js} +5 -5
  22. package/dist/{Stock-4KKYNRLJ.js.map → Stock-7XUOKZXY.js.map} +1 -1
  23. package/dist/{Weather-AGOD4HUE.js → Weather-TEQ5QYND.js} +5 -5
  24. package/dist/{Weather-AGOD4HUE.js.map → Weather-TEQ5QYND.js.map} +1 -1
  25. package/dist/{WorldClock-NIHBWJUF.js → WorldClock-BKEAN2VD.js} +5 -5
  26. package/dist/{WorldClock-NIHBWJUF.js.map → WorldClock-BKEAN2VD.js.map} +1 -1
  27. package/dist/apps/index.js +18 -18
  28. package/dist/{chunk-EOJXG5DW.js → chunk-2ZA5WWBZ.js} +5 -5
  29. package/dist/{chunk-EOJXG5DW.js.map → chunk-2ZA5WWBZ.js.map} +1 -1
  30. package/dist/chunk-5GBXXTFJ.js +7 -0
  31. package/dist/{chunk-FTOV2TSV.js.map → chunk-5GBXXTFJ.js.map} +1 -1
  32. package/dist/{chunk-5Z3GCMCZ.js → chunk-777B3U2Q.js} +3 -3
  33. package/dist/{chunk-5Z3GCMCZ.js.map → chunk-777B3U2Q.js.map} +1 -1
  34. package/dist/{chunk-UPO23MX4.js → chunk-AA24QYTD.js} +3 -3
  35. package/dist/{chunk-UPO23MX4.js.map → chunk-AA24QYTD.js.map} +1 -1
  36. package/dist/{chunk-ZF6AYO4G.js → chunk-GW3RA6IS.js} +20 -2
  37. package/dist/chunk-GW3RA6IS.js.map +1 -0
  38. package/dist/{chunk-UFR3CXIF.js → chunk-LRVPNWRE.js} +3 -3
  39. package/dist/{chunk-UFR3CXIF.js.map → chunk-LRVPNWRE.js.map} +1 -1
  40. package/dist/{chunk-DQXFKKET.js → chunk-PAAX2MHL.js} +3 -3
  41. package/dist/{chunk-DQXFKKET.js.map → chunk-PAAX2MHL.js.map} +1 -1
  42. package/dist/{chunk-YOSS3REK.js → chunk-XTIQ4WTK.js} +3 -3
  43. package/dist/{chunk-YOSS3REK.js.map → chunk-XTIQ4WTK.js.map} +1 -1
  44. package/dist/index.js +71 -40
  45. package/dist/index.js.map +1 -1
  46. package/dist/styles.css +27 -0
  47. package/package.json +1 -1
  48. package/dist/chunk-FTOV2TSV.js +0 -7
  49. package/dist/chunk-ZF6AYO4G.js.map +0 -1
package/dist/styles.css CHANGED
@@ -44,6 +44,33 @@
44
44
  background-color: rgba(255, 255, 255, 0.06);
45
45
  }
46
46
 
47
+ /* ── Reduce transparency (Preferences → Customization) ──────────────────────
48
+ * When the user turns on "Reduce transparency", Layout adds this class to
49
+ * <html>. Two effects, applied globally so every present-and-future glass
50
+ * surface is covered without per-component edits:
51
+ * 1. Force every window/taskbar/menu opacity variable fully opaque, so the
52
+ * surfaces that tint via `rgb(... / var(--*-opacity))` become solid. The
53
+ * `!important` beats Layout's inline (non-important) custom-property writes.
54
+ * 2. Strip backdrop-filter everywhere — the blur is the GPU-expensive part on
55
+ * older machines. `!important` overrides both Tailwind `backdrop-blur-*`
56
+ * utilities and inline `backdropFilter` from glassStyle(). glassStyle()
57
+ * also returns a solid background under this class so menus/popups don't
58
+ * read as washed-out translucent panels once the blur is gone. */
59
+ html.rosh-reduce-transparency {
60
+ --active-header-opacity: 1 !important;
61
+ --active-content-opacity: 1 !important;
62
+ --inactive-header-opacity: 1 !important;
63
+ --inactive-content-opacity: 1 !important;
64
+ --menu-opacity: 1 !important;
65
+ --taskbar-opacity: 1 !important;
66
+ }
67
+ html.rosh-reduce-transparency *,
68
+ html.rosh-reduce-transparency *::before,
69
+ html.rosh-reduce-transparency *::after {
70
+ backdrop-filter: none !important;
71
+ -webkit-backdrop-filter: none !important;
72
+ }
73
+
47
74
  /* Base theme colors for transparent windows */
48
75
  :root {
49
76
  --window-header-rgb: 243 244 246;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-os-shell",
3
- "version": "3.17.1",
3
+ "version": "3.18.0",
4
4
  "description": "Desktop-style React UI shell — windows, taskbar, start menu, sticky notes, frosted glass theming, and bundled apps.",
5
5
  "license": "MIT",
6
6
  "author": "Victor Y. Mau",
@@ -1,7 +0,0 @@
1
- // src/version.ts
2
- var VERSION = "3.17.1" ;
3
- var APP_VERSION = VERSION;
4
-
5
- export { APP_VERSION, VERSION };
6
- //# sourceMappingURL=chunk-FTOV2TSV.js.map
7
- //# sourceMappingURL=chunk-FTOV2TSV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shell/nav-types.ts","../src/shell-config/nav.tsx","../src/utils/glass.ts"],"names":[],"mappings":";AAkDO,SAAS,UAAU,IAAA,EAAgD;AACxE,EAAA,OAAO,OAAA,IAAW,IAAA;AACpB;;;ACpCA,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,MAAA,EAAQ,EAAC,EAAG,OAAA,EAAS,EAAC,EAAG,MAAA,EAAQ,EAAC;;;AC9BrG,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-ZF6AYO4G.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 /** Optional 3rd-level sub-items. Hovering the parent in <StartMenu> opens\n * a nested flyout; in <Sidebar> the parent becomes an inline sub-accordion. */\n children?: NavItem[];\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 /** Optional section labels pinned to the bottom of the menu, next to the user\n * profile, separated from the ERP group by a divider. */\n footer?: string[];\n /** Optional flat top-level items pinned to the bottom of the menu, next to\n * the user profile, separated from the ERP group by a divider. Unlike\n * `footer` (section labels rendered as flyouts), these render as direct\n * clickable rows — use for standalone destinations like System Preferences\n * or a bug-report link. */\n footerItems?: NavItem[];\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: [], footer: [] };\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"]}