react-os-shell 3.17.1 → 3.19.1

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 (50) hide show
  1. package/dist/{Browser-77H2ZZLT.js → Browser-CHCL2XCI.js} +6 -6
  2. package/dist/{Browser-77H2ZZLT.js.map → Browser-CHCL2XCI.js.map} +1 -1
  3. package/dist/{Calculator-VNAHCUPX.js → Calculator-IYQBRKNC.js} +5 -5
  4. package/dist/{Calculator-VNAHCUPX.js.map → Calculator-IYQBRKNC.js.map} +1 -1
  5. package/dist/{CurrencyConverter-6KCSMTK3.js → CurrencyConverter-JC2U6AD5.js} +5 -5
  6. package/dist/{CurrencyConverter-6KCSMTK3.js.map → CurrencyConverter-JC2U6AD5.js.map} +1 -1
  7. package/dist/{Documents-LQTYAUKW.js → Documents-ZKNFPZSQ.js} +6 -6
  8. package/dist/{Documents-LQTYAUKW.js.map → Documents-ZKNFPZSQ.js.map} +1 -1
  9. package/dist/{Files-757RXEST.js → Files-D3DLAWPB.js} +8 -8
  10. package/dist/{Files-757RXEST.js.map → Files-D3DLAWPB.js.map} +1 -1
  11. package/dist/{Notepad-GYLYX7T3.js → Notepad-ROCYE66F.js} +6 -6
  12. package/dist/{Notepad-GYLYX7T3.js.map → Notepad-ROCYE66F.js.map} +1 -1
  13. package/dist/{PomodoroTimer-JXQ7AUGT.js → PomodoroTimer-5HUENCFB.js} +6 -6
  14. package/dist/{PomodoroTimer-JXQ7AUGT.js.map → PomodoroTimer-5HUENCFB.js.map} +1 -1
  15. package/dist/{Preview-YR23SFGX.js → Preview-YBEAIJWC.js} +6 -6
  16. package/dist/{Preview-YR23SFGX.js.map → Preview-YBEAIJWC.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-ZPZ3ZSQW.js} +6 -6
  20. package/dist/{Spreadsheet-NCAGYS2M.js.map → Spreadsheet-ZPZ3ZSQW.js.map} +1 -1
  21. package/dist/{Stock-4KKYNRLJ.js → Stock-OX7CDMRJ.js} +5 -5
  22. package/dist/{Stock-4KKYNRLJ.js.map → Stock-OX7CDMRJ.js.map} +1 -1
  23. package/dist/{Weather-AGOD4HUE.js → Weather-5MCEUYIK.js} +5 -5
  24. package/dist/{Weather-AGOD4HUE.js.map → Weather-5MCEUYIK.js.map} +1 -1
  25. package/dist/{WorldClock-NIHBWJUF.js → WorldClock-I4E7BXFK.js} +5 -5
  26. package/dist/{WorldClock-NIHBWJUF.js.map → WorldClock-I4E7BXFK.js.map} +1 -1
  27. package/dist/apps/index.js +18 -18
  28. package/dist/{chunk-YOSS3REK.js → chunk-3ZRS7MY7.js} +3 -3
  29. package/dist/{chunk-YOSS3REK.js.map → chunk-3ZRS7MY7.js.map} +1 -1
  30. package/dist/{chunk-5Z3GCMCZ.js → chunk-73IUVYII.js} +3 -3
  31. package/dist/{chunk-5Z3GCMCZ.js.map → chunk-73IUVYII.js.map} +1 -1
  32. package/dist/{chunk-UPO23MX4.js → chunk-AA24QYTD.js} +3 -3
  33. package/dist/{chunk-UPO23MX4.js.map → chunk-AA24QYTD.js.map} +1 -1
  34. package/dist/{chunk-ZF6AYO4G.js → chunk-GW3RA6IS.js} +20 -2
  35. package/dist/chunk-GW3RA6IS.js.map +1 -0
  36. package/dist/{chunk-UFR3CXIF.js → chunk-LRVPNWRE.js} +3 -3
  37. package/dist/{chunk-UFR3CXIF.js.map → chunk-LRVPNWRE.js.map} +1 -1
  38. package/dist/{chunk-DQXFKKET.js → chunk-RPSFO2H2.js} +86 -25
  39. package/dist/chunk-RPSFO2H2.js.map +1 -0
  40. package/dist/chunk-TMV4ZMIJ.js +7 -0
  41. package/dist/{chunk-FTOV2TSV.js.map → chunk-TMV4ZMIJ.js.map} +1 -1
  42. package/dist/{chunk-EOJXG5DW.js → chunk-VF2OX22J.js} +5 -5
  43. package/dist/{chunk-EOJXG5DW.js.map → chunk-VF2OX22J.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-DQXFKKET.js.map +0 -1
  49. package/dist/chunk-FTOV2TSV.js +0 -7
  50. package/dist/chunk-ZF6AYO4G.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ // src/version.ts
2
+ var VERSION = "3.19.1" ;
3
+ var APP_VERSION = VERSION;
4
+
5
+ export { APP_VERSION, VERSION };
6
+ //# sourceMappingURL=chunk-TMV4ZMIJ.js.map
7
+ //# sourceMappingURL=chunk-TMV4ZMIJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"names":[],"mappings":";AAIO,IAAM,OAAA,GAAwD,QAAA;AAG9D,IAAM,WAAA,GAAc","file":"chunk-FTOV2TSV.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,QAAA;AAG9D,IAAM,WAAA,GAAc","file":"chunk-TMV4ZMIJ.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,6 +1,6 @@
1
- import { VERSION } from './chunk-FTOV2TSV.js';
2
- import { useWindowMenuItem, Modal } from './chunk-DQXFKKET.js';
3
- import { navIcons } from './chunk-ZF6AYO4G.js';
1
+ import { VERSION } from './chunk-TMV4ZMIJ.js';
2
+ import { useWindowMenuItem, Modal } from './chunk-RPSFO2H2.js';
3
+ import { navIcons } from './chunk-GW3RA6IS.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-EOJXG5DW.js.map
79
- //# sourceMappingURL=chunk-EOJXG5DW.js.map
78
+ //# sourceMappingURL=chunk-VF2OX22J.js.map
79
+ //# sourceMappingURL=chunk-VF2OX22J.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/apps/_about.tsx"],"names":[],"mappings":"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","file":"chunk-EOJXG5DW.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.0',\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.2.1',\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.0',\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-VF2OX22J.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.0',\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.2.1',\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.0',\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"]}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { subscribePomo, getPomoSnapshot } from './chunk-5Z3GCMCZ.js';
2
- export { setShellTodoProvider } from './chunk-5Z3GCMCZ.js';
1
+ import { subscribePomo, getPomoSnapshot } from './chunk-73IUVYII.js';
2
+ export { setShellTodoProvider } from './chunk-73IUVYII.js';
3
3
  export { ImageAnnotator_default as ImageAnnotator } from './chunk-QU5L5ZYM.js';
4
4
  import { PREVIEW_OPENED_EVENT, openPreviewFile } from './chunk-DINNWYVB.js';
5
5
  export { Breadcrumbs } from './chunk-DINNWYVB.js';
@@ -7,7 +7,7 @@ import { SidebarLayout } from './chunk-YG45DAUT.js';
7
7
  export { SidebarLayout } from './chunk-YG45DAUT.js';
8
8
  import { toast_default } from './chunk-VENYVK3L.js';
9
9
  export { toast_default as toast } from './chunk-VENYVK3L.js';
10
- import { publishDesktopFolders, requestFilesTrashView, FolderGlyph, requestFilesDesktopFolderView, FileIconTile, hashGradient } from './chunk-UFR3CXIF.js';
10
+ import { publishDesktopFolders, requestFilesTrashView, FolderGlyph, requestFilesDesktopFolderView, FileIconTile, hashGradient } from './chunk-LRVPNWRE.js';
11
11
  import { setPdfPreview } from './chunk-BV6SQ46N.js';
12
12
  import { playNotification, playStartup, soundsEnabled, getSoundConfig, SOUND_PACK_KEYS, SOUND_PACKS, SOUND_TYPES, SOUND_TYPE_LABELS, setSoundForType, previewSound, setAllSounds, playLogout } from './chunk-D7PYW2QS.js';
13
13
  import { useAuth, useShellAuth } from './chunk-ADJ3CERD.js';
@@ -15,13 +15,13 @@ export { ShellAuthProvider, setShellAuthBridge, useShellAuth } from './chunk-ADJ
15
15
  import { EditableGrid } from './chunk-GP4Y3VCB.js';
16
16
  export { EditableGrid } from './chunk-GP4Y3VCB.js';
17
17
  import './chunk-4SQU5YV6.js';
18
- import { APP_VERSION, VERSION } from './chunk-FTOV2TSV.js';
19
- export { VERSION } from './chunk-FTOV2TSV.js';
20
- import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, WINDOW_REGISTRY, isPageEntry, Modal, useShellPrefs, useIsMobile, ModalActions, useModalActive, client_default, LoadingSpinner, isShellApiClientConfigured, CancelButton, setWindowPosition, ThumbCard, activateModal } from './chunk-DQXFKKET.js';
21
- export { CancelButton, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, registerModalEscapeInterceptor, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useLocalStoragePrefs, useModalActive, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-DQXFKKET.js';
18
+ import { APP_VERSION, VERSION } from './chunk-TMV4ZMIJ.js';
19
+ export { VERSION } from './chunk-TMV4ZMIJ.js';
20
+ import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, WINDOW_REGISTRY, isPageEntry, Modal, useShellPrefs, useIsMobile, ModalActions, useModalActive, client_default, LoadingSpinner, isShellApiClientConfigured, CancelButton, setWindowPosition, ThumbCard, activateModal } from './chunk-RPSFO2H2.js';
21
+ export { CancelButton, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, registerModalEscapeInterceptor, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useLocalStoragePrefs, useModalActive, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-RPSFO2H2.js';
22
22
  export { ConfirmProvider, confirm, confirmDestructive, prompt } from './chunk-UBN4IUDE.js';
23
- import { glassStyle, startMenuCategories, navSections, isSection, GLASS_INPUT_BG, navIcons, sectionIcons } from './chunk-ZF6AYO4G.js';
24
- export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle, setShellNavIcons } from './chunk-ZF6AYO4G.js';
23
+ import { glassStyle, startMenuCategories, navSections, isSection, GLASS_INPUT_BG, navIcons, sectionIcons } from './chunk-GW3RA6IS.js';
24
+ export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle, setShellNavIcons } from './chunk-GW3RA6IS.js';
25
25
  import { createContext, lazy, forwardRef, useCallback, useState, useRef, useEffect, useMemo, useLayoutEffect, useContext, isValidElement, cloneElement, Suspense, Fragment as Fragment$1, useId, Children, useSyncExternalStore } from 'react';
26
26
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
27
27
  import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react';
@@ -4029,7 +4029,7 @@ function MobileBottomNav({
4029
4029
  }
4030
4030
  );
4031
4031
  }
4032
- var Sidebar = lazy(() => import('./Sidebar-PY762ANK.js'));
4032
+ var Sidebar = lazy(() => import('./Sidebar-AGFOKQ5J.js'));
4033
4033
  function useFavorites(wallpapers) {
4034
4034
  const { prefs, save } = useShellPrefs();
4035
4035
  const favorites = prefs.favorite_pages || [];
@@ -4333,7 +4333,8 @@ function Layout({
4333
4333
  const taskbarGap = taskbarSize === "small" ? 2 : taskbarSize === "large" ? 6 : 4;
4334
4334
  const taskbarHClass = taskbarSize === "small" ? "h-[42px]" : taskbarSize === "large" ? "h-[72px]" : "h-14";
4335
4335
  const taskbarWClass = taskbarSize === "small" ? "w-[180px]" : taskbarSize === "large" ? "w-[260px]" : "w-[220px]";
4336
- const taskbarOpacity = (prefs.transparency_taskbar ?? 70) / 100;
4336
+ const reduceTransparency = !!prefs.reduce_transparency;
4337
+ const taskbarOpacity = reduceTransparency ? 1 : (prefs.transparency_taskbar ?? 70) / 100;
4337
4338
  const menuOpacity = (prefs.transparency_start_menu ?? 95) / 100;
4338
4339
  const inactiveHeaderOpacity = (prefs.transparency_inactive_header ?? 70) / 100;
4339
4340
  const inactiveContentOpacity = (prefs.transparency_inactive_content ?? 80) / 100;
@@ -4341,6 +4342,7 @@ function Layout({
4341
4342
  const activeContentOpacity = (prefs.transparency_active_content ?? 90) / 100;
4342
4343
  useEffect(() => {
4343
4344
  const root = document.documentElement;
4345
+ root.classList.toggle("rosh-reduce-transparency", reduceTransparency);
4344
4346
  root.style.setProperty("--inactive-header-opacity", String(inactiveHeaderOpacity));
4345
4347
  root.style.setProperty("--inactive-content-opacity", String(inactiveContentOpacity));
4346
4348
  root.style.setProperty("--active-header-opacity", String(activeHeaderOpacity));
@@ -4367,7 +4369,7 @@ function Layout({
4367
4369
  root.style.setProperty("--menu-padding-y", sv.py);
4368
4370
  root.style.setProperty("--window-tab-width", sv.tabW);
4369
4371
  root.style.setProperty("--window-tab-font-size", sv.tabFont);
4370
- }, [inactiveHeaderOpacity, inactiveContentOpacity, activeHeaderOpacity, activeContentOpacity, taskbarH, taskbarPosition, prefs.default_window_size, prefs.window_position, prefs.menu_density, prefs.start_menu_size, sidebarWidth, layoutMode]);
4372
+ }, [reduceTransparency, inactiveHeaderOpacity, inactiveContentOpacity, activeHeaderOpacity, activeContentOpacity, taskbarH, taskbarPosition, prefs.default_window_size, prefs.window_position, prefs.menu_density, prefs.start_menu_size, sidebarWidth, layoutMode]);
4371
4373
  useEffect(() => {
4372
4374
  document.documentElement.style.setProperty("--mobile-bottom-nav", isMobile ? "100px" : "0px");
4373
4375
  }, [isMobile]);
@@ -4751,6 +4753,12 @@ function Customization({ omit, section } = {}) {
4751
4753
  const savePref = (key, value) => {
4752
4754
  save({ [key]: value });
4753
4755
  };
4756
+ const reduceOn = !!pref("reduce_transparency");
4757
+ const setReduce = (on) => {
4758
+ document.documentElement.classList.toggle("rosh-reduce-transparency", on);
4759
+ setOptimisticAppearance((prev) => ({ ...prev, reduce_transparency: on }));
4760
+ save({ reduce_transparency: on });
4761
+ };
4754
4762
  const [localSliders, setLocalSliders] = useState({});
4755
4763
  const sliderTimers = useRef({});
4756
4764
  const saveSlider = useCallback((key, value) => {
@@ -4969,34 +4977,57 @@ function Customization({ omit, section } = {}) {
4969
4977
  ] }),
4970
4978
  /* @__PURE__ */ jsxs("div", { children: [
4971
4979
  /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-gray-900 mb-3", children: "Transparency" }),
4972
- /* @__PURE__ */ jsx("div", { className: "space-y-3", children: [
4973
- { key: "transparency_taskbar", label: "Taskbar", defaultVal: 70 },
4974
- { key: "transparency_start_menu", label: "Start Menu", defaultVal: 70 },
4975
- { key: "transparency_inactive_header", label: "Inactive Windows Header / Footer", defaultVal: 70 },
4976
- { key: "transparency_inactive_content", label: "Inactive Windows Content", defaultVal: 80 },
4977
- { key: "transparency_active_header", label: "Active Windows Header / Footer", defaultVal: 80 },
4978
- { key: "transparency_active_content", label: "Active Windows Content", defaultVal: 90 }
4979
- ].map((item) => {
4980
- const val = localSliders[item.key] ?? prefs[item.key] ?? item.defaultVal;
4981
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
4982
- /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-700 w-64 shrink-0", children: item.label }),
4983
- /* @__PURE__ */ jsx(
4984
- "input",
4985
- {
4986
- type: "range",
4987
- min: 20,
4988
- max: 100,
4989
- value: val,
4990
- onChange: (e) => saveSlider(item.key, Number(e.target.value)),
4991
- className: "flex-1 h-1.5 accent-blue-600 cursor-pointer"
4992
- }
4993
- ),
4994
- /* @__PURE__ */ jsxs("span", { className: "text-xs text-gray-500 w-10 text-right font-mono", children: [
4995
- val,
4996
- "%"
4997
- ] })
4998
- ] }, item.key);
4999
- }) })
4980
+ /* @__PURE__ */ jsxs("label", { className: "flex items-start gap-2 cursor-pointer mb-3", children: [
4981
+ /* @__PURE__ */ jsx(
4982
+ "input",
4983
+ {
4984
+ type: "checkbox",
4985
+ checked: reduceOn,
4986
+ onChange: (e) => setReduce(e.target.checked),
4987
+ className: "h-4 w-4 mt-0.5 rounded border-gray-300 text-blue-600"
4988
+ }
4989
+ ),
4990
+ /* @__PURE__ */ jsxs("span", { className: "text-sm text-gray-700", children: [
4991
+ "Reduce transparency",
4992
+ /* @__PURE__ */ jsx("span", { className: "block text-xs text-gray-400", children: "Turn off the frosted-glass blur and make windows, menus and the taskbar solid. Improves performance on older machines." })
4993
+ ] })
4994
+ ] }),
4995
+ /* @__PURE__ */ jsx(
4996
+ "div",
4997
+ {
4998
+ className: `space-y-3 transition-opacity ${reduceOn ? "opacity-40 pointer-events-none select-none" : ""}`,
4999
+ "aria-disabled": reduceOn,
5000
+ children: [
5001
+ { key: "transparency_taskbar", label: "Taskbar", defaultVal: 70 },
5002
+ { key: "transparency_start_menu", label: "Start Menu", defaultVal: 70 },
5003
+ { key: "transparency_inactive_header", label: "Inactive Windows Header / Footer", defaultVal: 70 },
5004
+ { key: "transparency_inactive_content", label: "Inactive Windows Content", defaultVal: 80 },
5005
+ { key: "transparency_active_header", label: "Active Windows Header / Footer", defaultVal: 80 },
5006
+ { key: "transparency_active_content", label: "Active Windows Content", defaultVal: 90 }
5007
+ ].map((item) => {
5008
+ const val = localSliders[item.key] ?? prefs[item.key] ?? item.defaultVal;
5009
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
5010
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-700 w-64 shrink-0", children: item.label }),
5011
+ /* @__PURE__ */ jsx(
5012
+ "input",
5013
+ {
5014
+ type: "range",
5015
+ min: 20,
5016
+ max: 100,
5017
+ value: val,
5018
+ disabled: reduceOn,
5019
+ onChange: (e) => saveSlider(item.key, Number(e.target.value)),
5020
+ className: "flex-1 h-1.5 accent-blue-600 cursor-pointer disabled:cursor-not-allowed"
5021
+ }
5022
+ ),
5023
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-gray-500 w-10 text-right font-mono", children: [
5024
+ val,
5025
+ "%"
5026
+ ] })
5027
+ ] }, item.key);
5028
+ })
5029
+ }
5030
+ )
5000
5031
  ] })
5001
5032
  ] }),
5002
5033
  inSection("layout") && /* @__PURE__ */ jsxs(Fragment, { children: [