efficient-shell 4.131.0 → 4.132.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.
@@ -1,6 +1,6 @@
1
1
  import { useWindowMenuItem, Modal } from './chunk-ZKHD4J73.js';
2
2
  import { navIcons } from './chunk-GA35NEND.js';
3
- import { VERSION } from './chunk-UHPWZ2F4.js';
3
+ import { VERSION } from './chunk-JMKYYPOF.js';
4
4
  import { useState, useCallback, isValidElement, cloneElement } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
6
 
@@ -75,5 +75,5 @@ function AboutApp({ app }) {
75
75
  }
76
76
 
77
77
  export { AboutApp, BUILTIN_APP_INFO };
78
- //# sourceMappingURL=chunk-2GZQ352J.js.map
79
- //# sourceMappingURL=chunk-2GZQ352J.js.map
78
+ //# sourceMappingURL=chunk-CJYO4RVV.js.map
79
+ //# sourceMappingURL=chunk-CJYO4RVV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/apps/_about.tsx"],"names":[],"mappings":"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","file":"chunk-2GZQ352J.js","sourcesContent":["/**\n * Shared \"About\" dialog for the bundled apps.\n *\n * Each bundled app carries its own version (independent of the package\n * version) so app-level changes can be tracked without bumping every app at\n * once. `<AboutApp app=\"…\" />` registers an \"About <Name>\" item in the\n * window title menu and renders the dialog: app icon, name, app version and\n * the react-os-shell attribution + shell version.\n *\n * Bump an app's version in `BUILTIN_APP_INFO` whenever that app's behaviour\n * changes, alongside the package-level CHANGELOG entry.\n */\nimport { useCallback, useState, isValidElement, cloneElement, type ReactElement } from 'react';\nimport Modal, { useWindowMenuItem } from '../shell/Modal';\nimport { navIcons } from '../shell-config/nav';\nimport { VERSION } from '../version';\n\nexport interface BuiltinAppInfo {\n /** Display name — matches the window-registry label. */\n name: string;\n /** App version, independent of the package version. */\n version: string;\n /** One-line summary shown in the About dialog. */\n description: string;\n /** Registry route — used to look up the consumer-registered nav icon. */\n route: string;\n}\n\nexport const BUILTIN_APP_INFO = {\n spreadsheet: {\n name: 'Spreadsheets',\n version: '1.1.3',\n route: '/spreadsheet',\n description: 'Multi-sheet spreadsheet editor with CSV / TSV import and export.',\n },\n notepad: {\n name: 'Notepad',\n version: '1.0.0',\n route: '/notepad',\n description: 'Color-coded notes with checklists, desktop stickies and entity autolinking.',\n },\n documents: {\n name: 'Documents',\n version: '1.1.0',\n route: '/documents',\n description: 'Letter-page editor for Word documents and plain-text files — images, lists, alignment.',\n },\n preview: {\n name: 'Preview',\n version: '1.3.2',\n route: '/preview',\n description: 'Viewer for PDF documents, images, DXF drawings and 3D models — CAD-style measuring with object snap and an AutoCAD-like command bar.',\n },\n files: {\n name: 'Files',\n version: '1.1.0',\n route: '/files',\n description: 'Personal file manager with folders, uploads, quota, trash and desktop shortcut folders.',\n },\n browser: {\n name: 'Browser',\n version: '1.0.1',\n route: '/browser',\n description: 'Minimal web browser with bookmarks, history and navigation bar.',\n },\n} satisfies Record<string, BuiltinAppInfo>;\n\nexport type BuiltinAppId = keyof typeof BUILTIN_APP_INFO;\n\nconst ABOUT_MENU_ICON = (\n <svg className=\"h-4 w-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" />\n </svg>\n);\n\n// Generic window glyph shown when the consumer hasn't registered a nav icon\n// for the app's route (same fallback shape as the Modal title bar).\nconst FALLBACK_APP_ICON = (\n <svg className=\"h-9 w-9\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 6.75A2.25 2.25 0 016 4.5h12a2.25 2.25 0 012.25 2.25v10.5A2.25 2.25 0 0118 19.5H6a2.25 2.25 0 01-2.25-2.25V6.75z M3.75 9h16.5\" />\n </svg>\n);\n\n/** Registers \"About <Name>\" in the window title menu and renders the dialog.\n * Render anywhere inside the app's window. */\nexport default function AboutApp({ app }: { app: BuiltinAppId }) {\n const info = BUILTIN_APP_INFO[app];\n const [open, setOpen] = useState(false);\n const openDialog = useCallback(() => setOpen(true), []);\n useWindowMenuItem(`About ${info.name}`, openDialog, ABOUT_MENU_ICON);\n\n if (!open) return null;\n\n const registered = navIcons[info.route];\n const appIcon = isValidElement(registered)\n ? cloneElement(registered as ReactElement, { className: 'h-9 w-9' } as any)\n : FALLBACK_APP_ICON;\n\n return (\n <Modal open onClose={() => setOpen(false)} title={`About ${info.name}`} size=\"sm\" compact bodyScroll={false} autoHeight dimensions={[320, 320]}>\n <div className=\"flex flex-col items-center text-center px-5 pt-5 pb-4\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-gray-100 text-gray-600 shrink-0\">\n {appIcon}\n </div>\n <h2 className=\"mt-3 text-lg font-bold text-gray-900\">{info.name}</h2>\n <p className=\"text-[11px] font-mono text-gray-400\">Version {info.version}</p>\n <p className=\"mt-2 text-xs text-gray-500 leading-relaxed\">{info.description}</p>\n <div className=\"mt-4 pt-3 border-t border-gray-200 w-full\">\n <p className=\"text-[11px] text-gray-500\">\n Part of the <span className=\"font-medium text-gray-700\">react-os-shell</span> desktop environment\n </p>\n {VERSION && <p className=\"mt-0.5 text-[10px] font-mono text-gray-400\">shell v{VERSION}</p>}\n </div>\n </div>\n </Modal>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/apps/_about.tsx"],"names":[],"mappings":"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","file":"chunk-CJYO4RVV.js","sourcesContent":["/**\n * Shared \"About\" dialog for the bundled apps.\n *\n * Each bundled app carries its own version (independent of the package\n * version) so app-level changes can be tracked without bumping every app at\n * once. `<AboutApp app=\"…\" />` registers an \"About <Name>\" item in the\n * window title menu and renders the dialog: app icon, name, app version and\n * the react-os-shell attribution + shell version.\n *\n * Bump an app's version in `BUILTIN_APP_INFO` whenever that app's behaviour\n * changes, alongside the package-level CHANGELOG entry.\n */\nimport { useCallback, useState, isValidElement, cloneElement, type ReactElement } from 'react';\nimport Modal, { useWindowMenuItem } from '../shell/Modal';\nimport { navIcons } from '../shell-config/nav';\nimport { VERSION } from '../version';\n\nexport interface BuiltinAppInfo {\n /** Display name — matches the window-registry label. */\n name: string;\n /** App version, independent of the package version. */\n version: string;\n /** One-line summary shown in the About dialog. */\n description: string;\n /** Registry route — used to look up the consumer-registered nav icon. */\n route: string;\n}\n\nexport const BUILTIN_APP_INFO = {\n spreadsheet: {\n name: 'Spreadsheets',\n version: '1.1.3',\n route: '/spreadsheet',\n description: 'Multi-sheet spreadsheet editor with CSV / TSV import and export.',\n },\n notepad: {\n name: 'Notepad',\n version: '1.0.0',\n route: '/notepad',\n description: 'Color-coded notes with checklists, desktop stickies and entity autolinking.',\n },\n documents: {\n name: 'Documents',\n version: '1.1.0',\n route: '/documents',\n description: 'Letter-page editor for Word documents and plain-text files — images, lists, alignment.',\n },\n preview: {\n name: 'Preview',\n version: '1.3.2',\n route: '/preview',\n description: 'Viewer for PDF documents, images, DXF drawings and 3D models — CAD-style measuring with object snap and an AutoCAD-like command bar.',\n },\n files: {\n name: 'Files',\n version: '1.1.0',\n route: '/files',\n description: 'Personal file manager with folders, uploads, quota, trash and desktop shortcut folders.',\n },\n browser: {\n name: 'Browser',\n version: '1.0.1',\n route: '/browser',\n description: 'Minimal web browser with bookmarks, history and navigation bar.',\n },\n} satisfies Record<string, BuiltinAppInfo>;\n\nexport type BuiltinAppId = keyof typeof BUILTIN_APP_INFO;\n\nconst ABOUT_MENU_ICON = (\n <svg className=\"h-4 w-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" />\n </svg>\n);\n\n// Generic window glyph shown when the consumer hasn't registered a nav icon\n// for the app's route (same fallback shape as the Modal title bar).\nconst FALLBACK_APP_ICON = (\n <svg className=\"h-9 w-9\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 6.75A2.25 2.25 0 016 4.5h12a2.25 2.25 0 012.25 2.25v10.5A2.25 2.25 0 0118 19.5H6a2.25 2.25 0 01-2.25-2.25V6.75z M3.75 9h16.5\" />\n </svg>\n);\n\n/** Registers \"About <Name>\" in the window title menu and renders the dialog.\n * Render anywhere inside the app's window. */\nexport default function AboutApp({ app }: { app: BuiltinAppId }) {\n const info = BUILTIN_APP_INFO[app];\n const [open, setOpen] = useState(false);\n const openDialog = useCallback(() => setOpen(true), []);\n useWindowMenuItem(`About ${info.name}`, openDialog, ABOUT_MENU_ICON);\n\n if (!open) return null;\n\n const registered = navIcons[info.route];\n const appIcon = isValidElement(registered)\n ? cloneElement(registered as ReactElement, { className: 'h-9 w-9' } as any)\n : FALLBACK_APP_ICON;\n\n return (\n <Modal open onClose={() => setOpen(false)} title={`About ${info.name}`} size=\"sm\" compact bodyScroll={false} autoHeight dimensions={[320, 320]}>\n <div className=\"flex flex-col items-center text-center px-5 pt-5 pb-4\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-gray-100 text-gray-600 shrink-0\">\n {appIcon}\n </div>\n <h2 className=\"mt-3 text-lg font-bold text-gray-900\">{info.name}</h2>\n <p className=\"text-[11px] font-mono text-gray-400\">Version {info.version}</p>\n <p className=\"mt-2 text-xs text-gray-500 leading-relaxed\">{info.description}</p>\n <div className=\"mt-4 pt-3 border-t border-gray-200 w-full\">\n <p className=\"text-[11px] text-gray-500\">\n Part of the <span className=\"font-medium text-gray-700\">react-os-shell</span> desktop environment\n </p>\n {VERSION && <p className=\"mt-0.5 text-[10px] font-mono text-gray-400\">shell v{VERSION}</p>}\n </div>\n </div>\n </Modal>\n );\n}\n"]}
@@ -0,0 +1,7 @@
1
+ // src/version.ts
2
+ var VERSION = "4.132.0" ;
3
+ var APP_VERSION = VERSION;
4
+
5
+ export { APP_VERSION, VERSION };
6
+ //# sourceMappingURL=chunk-JMKYYPOF.js.map
7
+ //# sourceMappingURL=chunk-JMKYYPOF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"names":[],"mappings":";AAIO,IAAM,OAAA,GAAwD,SAAA;AAG9D,IAAM,WAAA,GAAc","file":"chunk-UHPWZ2F4.js","sourcesContent":["declare const __PKG_VERSION__: string | undefined;\n\n/** Package version, injected by tsup at build time. Stays as an empty\n * string when the source is consumed without a build (e.g. tests). */\nexport const VERSION: string = typeof __PKG_VERSION__ === 'string' ? __PKG_VERSION__ : '';\n\n/** Legacy alias kept so existing consumers do not break. */\nexport const APP_VERSION = VERSION;\n"]}
1
+ {"version":3,"sources":["../src/version.ts"],"names":[],"mappings":";AAIO,IAAM,OAAA,GAAwD,SAAA;AAG9D,IAAM,WAAA,GAAc","file":"chunk-JMKYYPOF.js","sourcesContent":["declare const __PKG_VERSION__: string | undefined;\n\n/** Package version, injected by tsup at build time. Stays as an empty\n * string when the source is consumed without a build (e.g. tests). */\nexport const VERSION: string = typeof __PKG_VERSION__ === 'string' ? __PKG_VERSION__ : '';\n\n/** Legacy alias kept so existing consumers do not break. */\nexport const APP_VERSION = VERSION;\n"]}
package/dist/index.js CHANGED
@@ -23,8 +23,8 @@ export { BrandMark, resolveBrandMarkTreatment } from './chunk-TRCWINHF.js';
23
23
  import { withSpareRow, EditableGrid } from './chunk-KWEX4ZAF.js';
24
24
  export { EditableGrid } from './chunk-KWEX4ZAF.js';
25
25
  import { escapeHtml } from './chunk-MGGY74RY.js';
26
- import { APP_VERSION, VERSION } from './chunk-UHPWZ2F4.js';
27
- export { VERSION } from './chunk-UHPWZ2F4.js';
26
+ import { APP_VERSION, VERSION } from './chunk-JMKYYPOF.js';
27
+ export { VERSION } from './chunk-JMKYYPOF.js';
28
28
  import { toast_default } from './chunk-EENVXIVU.js';
29
29
  export { toast_default as toast } from './chunk-EENVXIVU.js';
30
30
  import { CMD_K, CMD_DOT, SHIFT, MOD, ENTER, CMD_A, ALT_SHIFT_N, ALT_SHIFT_E, CMD_ENTER, CMD_S, ALT_SHIFT_D, CMD_Z, CMD_SHIFT_Z, useShellPrefs, useIsMobile, useShellPrefsAdapter } from './chunk-TQURTLK2.js';
package/dist/ui/index.js CHANGED
@@ -5,7 +5,7 @@ export { SidebarLayout } from '../chunk-FONEQRBH.js';
5
5
  export { BrandMark, resolveBrandMarkTreatment } from '../chunk-TRCWINHF.js';
6
6
  export { EditableGrid } from '../chunk-KWEX4ZAF.js';
7
7
  import '../chunk-MGGY74RY.js';
8
- export { VERSION } from '../chunk-UHPWZ2F4.js';
8
+ export { VERSION } from '../chunk-JMKYYPOF.js';
9
9
  export { toast_default as toast } from '../chunk-EENVXIVU.js';
10
10
  export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, ENTER, Kbd, LoadingSpinner, MOD, NEXT_CHUNK_PATH_PREFIX, Result, SHIFT, STALE_CHUNK_RELOAD_COOLDOWN_MS, STALE_CHUNK_RELOAD_KEY, ShellPrefsProvider, VITE_PRELOAD_ERROR_EVENT, installStaleChunkReload, isMac, isStaleChunkError, useIsMobile, useLocalStoragePrefs, useShellPrefs } from '../chunk-TQURTLK2.js';
11
11
  export { FileIntakeAlert, acceptsFile, useFileIntake } from '../chunk-CLGNTGC5.js';
package/dist/ui.css CHANGED
@@ -1370,30 +1370,48 @@ html.rosh-reduce-transparency *::after {
1370
1370
  :is([data-theme="dark"], .dark) .hover\:bg-gray-100:hover { background-color: var(--surface-raised) !important; }
1371
1371
  :is([data-theme="dark"], .dark) .hover\:bg-gray-200:hover { background-color: var(--line-strong) !important; }
1372
1372
 
1373
+ /* ── The accent, in dark ───────────────────────────────────────────────────
1374
+ * The kit's accent is Tailwind's blue. In light it is painted with the blue
1375
+ * utilities themselves, so a host that maps `--color-blue-*` onto its own accent
1376
+ * recolours it. In dark these remaps paint it instead, and they used to write
1377
+ * blue as literals, so a host's accent turned blue at night. They read these four
1378
+ * now. Channels rather than colours, because most of them are washes at an alpha
1379
+ * of their own (`rgba(var(--rosh-dark-accent-rgb), 0.26)`).
1380
+ *
1381
+ * Every default is the literal it replaced (blue-500 / blue-400 / blue-300 /
1382
+ * blue-200), so nothing renders differently for a host that sets none.
1383
+ * `tests/darkAccentTokens.test.ts` holds every dark blue rule to them. */
1384
+ :root {
1385
+ --rosh-dark-accent-rgb: 59, 130, 246;
1386
+ --rosh-dark-accent-line-rgb: 96, 165, 250;
1387
+ --rosh-dark-accent-ink-rgb: 147, 197, 253;
1388
+ --rosh-dark-accent-ink-strong-rgb: 191, 219, 254;
1389
+ }
1390
+
1373
1391
  /* Blue hover states — used by menu items, profile row, etc.
1374
1392
  In dark mode swap the near-white bg for a dark blue tint and the dark
1375
1393
  blue text for a light shade so highlighted items stay readable. */
1376
1394
  :is([data-theme="dark"], .dark) .bg-blue-50,
1377
- :is([data-theme="dark"], .dark) .hover\:bg-blue-50:hover { background-color: rgba(59, 130, 246, 0.26) !important; }
1395
+ :is([data-theme="dark"], .dark) .hover\:bg-blue-50:hover { background-color: rgba(var(--rosh-dark-accent-rgb), 0.26) !important; }
1378
1396
  :is([data-theme="dark"], .dark) .text-blue-700,
1379
- :is([data-theme="dark"], .dark) .hover\:text-blue-700:hover { color: #bfdbfe !important; }
1380
- :is([data-theme="dark"], .dark) .text-blue-600 { color: #93c5fd !important; }
1381
- :is([data-theme="dark"], .dark) .text-blue-800 { color: #bfdbfe !important; }
1397
+ :is([data-theme="dark"], .dark) .hover\:text-blue-700:hover { color: rgb(var(--rosh-dark-accent-ink-strong-rgb)) !important; }
1398
+ :is([data-theme="dark"], .dark) .text-blue-600 { color: rgb(var(--rosh-dark-accent-ink-rgb)) !important; }
1399
+ :is([data-theme="dark"], .dark) .text-blue-800 { color: rgb(var(--rosh-dark-accent-ink-strong-rgb)) !important; }
1382
1400
 
1383
1401
  /* Bare *-100 highlight backgrounds + *-700 text (status pills, badges, avatars,
1384
1402
  dialog icons) have no dark override otherwise, so they keep their bright
1385
1403
  light-mode value and wash out the text on top. Mute the background to a low
1386
1404
  tint and lighten the text so highlighted content stays readable in dark mode. */
1387
- :is([data-theme="dark"], .dark) .bg-blue-100 { background-color: rgba(59, 130, 246, 0.22) !important; }
1405
+ :is([data-theme="dark"], .dark) .bg-blue-100 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.22) !important; }
1388
1406
 
1389
1407
  /* Tailwind's `!` important modifier compiles to distinct class names
1390
1408
  (`.\!bg-blue-100` etc.), so the EditableGrid selection utilities escape the
1391
1409
  remaps above: the selection keeps its light-mode background while the cell
1392
1410
  text goes light, making selected cells unreadable in dark mode. The
1393
1411
  attribute selector outranks the utility's own !important. */
1394
- :is([data-theme="dark"], .dark) .\!bg-blue-50 { background-color: rgba(59, 130, 246, 0.26) !important; }
1395
- :is([data-theme="dark"], .dark) .\!bg-blue-100 { background-color: rgba(59, 130, 246, 0.22) !important; }
1396
- :is([data-theme="dark"], .dark) .\!bg-blue-200 { background-color: rgba(59, 130, 246, 0.35) !important; }
1412
+ :is([data-theme="dark"], .dark) .\!bg-blue-50 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.26) !important; }
1413
+ :is([data-theme="dark"], .dark) .\!bg-blue-100 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.22) !important; }
1414
+ :is([data-theme="dark"], .dark) .\!bg-blue-200 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.35) !important; }
1397
1415
  :is([data-theme="dark"], .dark) .\!text-gray-700 { color: var(--ink) !important; }
1398
1416
  :is([data-theme="dark"], .dark) .bg-green-100 { background-color: rgba(34, 197, 94, 0.18) !important; }
1399
1417
  :is([data-theme="dark"], .dark) .bg-emerald-100 { background-color: rgba(16, 185, 129, 0.18) !important; }
@@ -1437,16 +1455,16 @@ html.rosh-reduce-transparency *::after {
1437
1455
  :is([data-theme="dark"], .dark) .bg-gray-100\/60 { background-color: rgba(30, 30, 46, 0.6) !important; }
1438
1456
  :is([data-theme="dark"], .dark) .bg-gray-200\/40 { background-color: rgba(49, 50, 68, 0.4) !important; }
1439
1457
  :is([data-theme="dark"], .dark) .bg-gray-200\/50 { background-color: rgba(49, 50, 68, 0.5) !important; }
1440
- :is([data-theme="dark"], .dark) .bg-blue-100\/60 { background-color: rgba(59, 130, 246, 0.22) !important; }
1458
+ :is([data-theme="dark"], .dark) .bg-blue-100\/60 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.22) !important; }
1441
1459
  /* Pale-blue tinted panels (selected rows, inline-reply box) — scale the
1442
1460
  .bg-blue-50 dark tint (0.26) down through the alpha steps. */
1443
- :is([data-theme="dark"], .dark) .bg-blue-50\/30 { background-color: rgba(59, 130, 246, 0.10) !important; }
1444
- :is([data-theme="dark"], .dark) .bg-blue-50\/40 { background-color: rgba(59, 130, 246, 0.12) !important; }
1445
- :is([data-theme="dark"], .dark) .bg-blue-50\/50 { background-color: rgba(59, 130, 246, 0.15) !important; }
1446
- :is([data-theme="dark"], .dark) .bg-blue-50\/60 { background-color: rgba(59, 130, 246, 0.18) !important; }
1461
+ :is([data-theme="dark"], .dark) .bg-blue-50\/30 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.10) !important; }
1462
+ :is([data-theme="dark"], .dark) .bg-blue-50\/40 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.12) !important; }
1463
+ :is([data-theme="dark"], .dark) .bg-blue-50\/50 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.15) !important; }
1464
+ :is([data-theme="dark"], .dark) .bg-blue-50\/60 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.18) !important; }
1447
1465
  :is([data-theme="dark"], .dark) .border-gray-200\/40 { border-color: rgba(69, 71, 90, 0.4) !important; }
1448
1466
  :is([data-theme="dark"], .dark) .border-gray-300\/40 { border-color: rgba(88, 91, 112, 0.4) !important; }
1449
- :is([data-theme="dark"], .dark) .border-blue-400\/60 { border-color: rgba(96, 165, 250, 0.45) !important; }
1467
+ :is([data-theme="dark"], .dark) .border-blue-400\/60 { border-color: rgba(var(--rosh-dark-accent-line-rgb), 0.45) !important; }
1450
1468
  :is([data-theme="dark"], .dark) .hover\:bg-gray-200\/40:hover { background-color: rgba(49, 50, 68, 0.4) !important; }
1451
1469
 
1452
1470
  /* White alpha variants — the bare .bg-white override doesn't match the /50../95
@@ -1459,7 +1477,7 @@ html.rosh-reduce-transparency *::after {
1459
1477
  :is([data-theme="dark"], .dark) .bg-white\/80 { background-color: rgba(30, 30, 46, 0.85) !important; }
1460
1478
  :is([data-theme="dark"], .dark) .bg-white\/90 { background-color: rgba(30, 30, 46, 0.92) !important; }
1461
1479
  :is([data-theme="dark"], .dark) .bg-white\/95 { background-color: rgba(30, 30, 46, 0.95) !important; }
1462
- :is([data-theme="dark"], .dark) .bg-blue-50\/70 { background-color: rgba(59, 130, 246, 0.22) !important; }
1480
+ :is([data-theme="dark"], .dark) .bg-blue-50\/70 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.22) !important; }
1463
1481
 
1464
1482
  /* ── Bare elements ─────────────────────────────────────────────────────────
1465
1483
  The next three rules style elements by TAG — every input, select and
@@ -1506,7 +1524,7 @@ html.rosh-reduce-transparency *::after {
1506
1524
  :is([data-theme="dark"], .dark) .bg-gray-100.text-gray-800 { background-color: var(--surface-raised) !important; color: var(--ink) !important; }
1507
1525
  :is([data-theme="dark"], .dark) .bg-gray-300.text-gray-800 { background-color: var(--line-strong) !important; color: var(--ink-strongest) !important; }
1508
1526
  :is([data-theme="dark"], .dark) .bg-green-100.text-green-800 { background-color: rgba(34, 197, 94, 0.18) !important; color: #86efac !important; }
1509
- :is([data-theme="dark"], .dark) .bg-blue-100.text-blue-800 { background-color: rgba(59, 130, 246, 0.18) !important; color: #93c5fd !important; }
1527
+ :is([data-theme="dark"], .dark) .bg-blue-100.text-blue-800 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.18) !important; color: rgb(var(--rosh-dark-accent-ink-rgb)) !important; }
1510
1528
  :is([data-theme="dark"], .dark) .bg-indigo-100.text-indigo-800 { background-color: rgba(99, 102, 241, 0.18) !important; color: #a5b4fc !important; }
1511
1529
  :is([data-theme="dark"], .dark) .bg-sky-100.text-sky-800 { background-color: rgba(14, 165, 233, 0.18) !important; color: #7dd3fc !important; }
1512
1530
  :is([data-theme="dark"], .dark) .bg-yellow-100.text-yellow-800 { background-color: rgba(234, 179, 8, 0.18) !important; color: #fde68a !important; }
@@ -1656,27 +1674,27 @@ html.rosh-reduce-transparency *::after {
1656
1674
  /* Blue — gaps beyond the accent remaps above. Hover/active steps sit one
1657
1675
  ladder step above their resting tint (base .26 → active .30; the /30../50
1658
1676
  alpha ladder steps 0.10/0.12/0.15 → hovers 0.12/0.15/0.18). */
1659
- :is([data-theme="dark"], .dark) .bg-blue-200 { background-color: rgba(59, 130, 246, 0.35) !important; }
1660
- :is([data-theme="dark"], .dark) .active\:bg-blue-200:active { background-color: rgba(59, 130, 246, 0.40) !important; }
1661
- :is([data-theme="dark"], .dark) .bg-blue-200\/60 { background-color: rgba(59, 130, 246, 0.20) !important; }
1662
- :is([data-theme="dark"], .dark) .hover\:bg-blue-100:hover { background-color: rgba(59, 130, 246, 0.26) !important; }
1663
- :is([data-theme="dark"], .dark) .active\:bg-blue-50:active { background-color: rgba(59, 130, 246, 0.30) !important; }
1664
- :is([data-theme="dark"], .dark) .hover\:bg-blue-50\/30:hover { background-color: rgba(59, 130, 246, 0.12) !important; }
1665
- :is([data-theme="dark"], .dark) .hover\:bg-blue-50\/40:hover { background-color: rgba(59, 130, 246, 0.15) !important; }
1666
- :is([data-theme="dark"], .dark) .hover\:bg-blue-50\/50:hover { background-color: rgba(59, 130, 246, 0.18) !important; }
1667
- :is([data-theme="dark"], .dark) .border-blue-100 { border-color: rgba(59, 130, 246, 0.22) !important; }
1677
+ :is([data-theme="dark"], .dark) .bg-blue-200 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.35) !important; }
1678
+ :is([data-theme="dark"], .dark) .active\:bg-blue-200:active { background-color: rgba(var(--rosh-dark-accent-rgb), 0.40) !important; }
1679
+ :is([data-theme="dark"], .dark) .bg-blue-200\/60 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.20) !important; }
1680
+ :is([data-theme="dark"], .dark) .hover\:bg-blue-100:hover { background-color: rgba(var(--rosh-dark-accent-rgb), 0.26) !important; }
1681
+ :is([data-theme="dark"], .dark) .active\:bg-blue-50:active { background-color: rgba(var(--rosh-dark-accent-rgb), 0.30) !important; }
1682
+ :is([data-theme="dark"], .dark) .hover\:bg-blue-50\/30:hover { background-color: rgba(var(--rosh-dark-accent-rgb), 0.12) !important; }
1683
+ :is([data-theme="dark"], .dark) .hover\:bg-blue-50\/40:hover { background-color: rgba(var(--rosh-dark-accent-rgb), 0.15) !important; }
1684
+ :is([data-theme="dark"], .dark) .hover\:bg-blue-50\/50:hover { background-color: rgba(var(--rosh-dark-accent-rgb), 0.18) !important; }
1685
+ :is([data-theme="dark"], .dark) .border-blue-100 { border-color: rgba(var(--rosh-dark-accent-rgb), 0.22) !important; }
1668
1686
  :is([data-theme="dark"], .dark) .border-blue-200,
1669
- :is([data-theme="dark"], .dark) .hover\:border-blue-200:hover { border-color: rgba(59, 130, 246, 0.32) !important; }
1687
+ :is([data-theme="dark"], .dark) .hover\:border-blue-200:hover { border-color: rgba(var(--rosh-dark-accent-rgb), 0.32) !important; }
1670
1688
  :is([data-theme="dark"], .dark) .border-blue-300,
1671
- :is([data-theme="dark"], .dark) .hover\:border-blue-300:hover { border-color: rgba(59, 130, 246, 0.45) !important; }
1672
- :is([data-theme="dark"], .dark) .border-blue-300\/50 { border-color: rgba(59, 130, 246, 0.25) !important; }
1673
- :is([data-theme="dark"], .dark) .text-blue-900 { color: #bfdbfe !important; }
1674
- :is([data-theme="dark"], .dark) .hover\:text-blue-600:hover { color: #93c5fd !important; }
1675
- :is([data-theme="dark"], .dark) .hover\:text-blue-800:hover { color: #bfdbfe !important; }
1689
+ :is([data-theme="dark"], .dark) .hover\:border-blue-300:hover { border-color: rgba(var(--rosh-dark-accent-rgb), 0.45) !important; }
1690
+ :is([data-theme="dark"], .dark) .border-blue-300\/50 { border-color: rgba(var(--rosh-dark-accent-rgb), 0.25) !important; }
1691
+ :is([data-theme="dark"], .dark) .text-blue-900 { color: rgb(var(--rosh-dark-accent-ink-strong-rgb)) !important; }
1692
+ :is([data-theme="dark"], .dark) .hover\:text-blue-600:hover { color: rgb(var(--rosh-dark-accent-ink-rgb)) !important; }
1693
+ :is([data-theme="dark"], .dark) .hover\:text-blue-800:hover { color: rgb(var(--rosh-dark-accent-ink-strong-rgb)) !important; }
1676
1694
  /* File-input buttons (file: compiles to ::file-selector-button) */
1677
- :is([data-theme="dark"], .dark) .file\:bg-blue-50::file-selector-button { background-color: rgba(59, 130, 246, 0.26) !important; }
1678
- :is([data-theme="dark"], .dark) .file\:text-blue-700::file-selector-button { color: #bfdbfe !important; }
1679
- :is([data-theme="dark"], .dark) .hover\:file\:bg-blue-100:hover::file-selector-button { background-color: rgba(59, 130, 246, 0.26) !important; }
1695
+ :is([data-theme="dark"], .dark) .file\:bg-blue-50::file-selector-button { background-color: rgba(var(--rosh-dark-accent-rgb), 0.26) !important; }
1696
+ :is([data-theme="dark"], .dark) .file\:text-blue-700::file-selector-button { color: rgb(var(--rosh-dark-accent-ink-strong-rgb)) !important; }
1697
+ :is([data-theme="dark"], .dark) .hover\:file\:bg-blue-100:hover::file-selector-button { background-color: rgba(var(--rosh-dark-accent-rgb), 0.26) !important; }
1680
1698
 
1681
1699
  /* Gray interaction-state variants (separate class names from the bare remaps) */
1682
1700
  :is([data-theme="dark"], .dark) .hover\:text-gray-600:hover,
@@ -1896,12 +1914,12 @@ html.rosh-reduce-transparency *::after {
1896
1914
  :is([data-theme="dark"], .dark) .hover\:bg-gray-200\/70:hover { background-color: rgba(49, 50, 68, 0.7) !important; }
1897
1915
  :is([data-theme="dark"], .dark) .hover\:bg-gray-200\/90:hover { background-color: rgba(49, 50, 68, 0.9) !important; }
1898
1916
  :is([data-theme="dark"], .dark) .border-gray-200\/60 { border-color: rgba(69, 71, 90, 0.6) !important; }
1899
- :is([data-theme="dark"], .dark) .bg-blue-50\/80 { background-color: rgba(59, 130, 246, 0.24) !important; }
1900
- :is([data-theme="dark"], .dark) .bg-blue-50\/90 { background-color: rgba(59, 130, 246, 0.26) !important; }
1901
- :is([data-theme="dark"], .dark) .text-blue-600\/70 { color: rgba(147, 197, 253, 0.7) !important; }
1902
- :is([data-theme="dark"], .dark) .text-blue-700\/70 { color: rgba(191, 219, 254, 0.7) !important; }
1903
- :is([data-theme="dark"], .dark) .text-blue-800\/80 { color: rgba(191, 219, 254, 0.8) !important; }
1904
- :is([data-theme="dark"], .dark) .text-blue-900\/60 { color: rgba(191, 219, 254, 0.6) !important; }
1917
+ :is([data-theme="dark"], .dark) .bg-blue-50\/80 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.24) !important; }
1918
+ :is([data-theme="dark"], .dark) .bg-blue-50\/90 { background-color: rgba(var(--rosh-dark-accent-rgb), 0.26) !important; }
1919
+ :is([data-theme="dark"], .dark) .text-blue-600\/70 { color: rgba(var(--rosh-dark-accent-ink-rgb), 0.7) !important; }
1920
+ :is([data-theme="dark"], .dark) .text-blue-700\/70 { color: rgba(var(--rosh-dark-accent-ink-strong-rgb), 0.7) !important; }
1921
+ :is([data-theme="dark"], .dark) .text-blue-800\/80 { color: rgba(var(--rosh-dark-accent-ink-strong-rgb), 0.8) !important; }
1922
+ :is([data-theme="dark"], .dark) .text-blue-900\/60 { color: rgba(var(--rosh-dark-accent-ink-strong-rgb), 0.6) !important; }
1905
1923
  :is([data-theme="dark"], .dark) .bg-amber-200\/70 { background-color: rgba(245, 158, 11, 0.20) !important; }
1906
1924
  :is([data-theme="dark"], .dark) .hover\:bg-amber-50\/70:hover { background-color: rgba(245, 158, 11, 0.12) !important; }
1907
1925
  :is([data-theme="dark"], .dark) .text-amber-800\/80 { color: rgba(253, 230, 138, 0.8) !important; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-shell",
3
- "version": "4.131.0",
3
+ "version": "4.132.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 = "4.131.0" ;
3
- var APP_VERSION = VERSION;
4
-
5
- export { APP_VERSION, VERSION };
6
- //# sourceMappingURL=chunk-UHPWZ2F4.js.map
7
- //# sourceMappingURL=chunk-UHPWZ2F4.js.map