react-os-shell 0.2.62 → 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.
Files changed (64) hide show
  1. package/dist/{Browser-46QICOBV.js → Browser-F7TJRHMK.js} +4 -3
  2. package/dist/Browser-F7TJRHMK.js.map +1 -0
  3. package/dist/{Calculator-2454MDQH.js → Calculator-FO3NUVCK.js} +5 -4
  4. package/dist/Calculator-FO3NUVCK.js.map +1 -0
  5. package/dist/{Calendar-NOVX5TSS.js → Calendar-ZGKMZ5TU.js} +4 -3
  6. package/dist/Calendar-ZGKMZ5TU.js.map +1 -0
  7. package/dist/{CurrencyConverter-LVUXSR57.js → CurrencyConverter-IMHQD6XV.js} +5 -4
  8. package/dist/CurrencyConverter-IMHQD6XV.js.map +1 -0
  9. package/dist/{Documents-QJDM3JQZ.js → Documents-PHVXWN4S.js} +4 -3
  10. package/dist/Documents-PHVXWN4S.js.map +1 -0
  11. package/dist/{Email-N27XXAW3.js → Email-VXTFMSS5.js} +5 -4
  12. package/dist/Email-VXTFMSS5.js.map +1 -0
  13. package/dist/Files-YO5YOKD7.js +9 -0
  14. package/dist/{Files-W3PU2D6S.js.map → Files-YO5YOKD7.js.map} +1 -1
  15. package/dist/{Minesweeper-Q4UYGWYG.js → Minesweeper-PX4DUPOE.js} +4 -3
  16. package/dist/Minesweeper-PX4DUPOE.js.map +1 -0
  17. package/dist/{Notepad-XU7VIXYV.js → Notepad-LFCZD2Y3.js} +4 -3
  18. package/dist/Notepad-LFCZD2Y3.js.map +1 -0
  19. package/dist/{PomodoroTimer-4UXR4OLK.js → PomodoroTimer-7Y36AEWF.js} +5 -4
  20. package/dist/PomodoroTimer-7Y36AEWF.js.map +1 -0
  21. package/dist/Preview-UMGXEYCV.js +8 -0
  22. package/dist/{Preview-EOZK5EBA.js.map → Preview-UMGXEYCV.js.map} +1 -1
  23. package/dist/Sidebar-4V6NQROQ.js +234 -0
  24. package/dist/Sidebar-4V6NQROQ.js.map +1 -0
  25. package/dist/Spreadsheet-L2DOK2JK.js +7 -0
  26. package/dist/{Spreadsheet-2GWD45U4.js.map → Spreadsheet-L2DOK2JK.js.map} +1 -1
  27. package/dist/{Weather-6GOXYALT.js → Weather-FDL7CFDL.js} +5 -4
  28. package/dist/Weather-FDL7CFDL.js.map +1 -0
  29. package/dist/{WorldClock-35S3SRPP.js → WorldClock-4PCYEMLF.js} +5 -4
  30. package/dist/WorldClock-4PCYEMLF.js.map +1 -0
  31. package/dist/apps/index.js +20 -19
  32. package/dist/apps/index.js.map +1 -1
  33. package/dist/{chunk-NGGVYK5F.js → chunk-6JAAM5TA.js} +4 -4
  34. package/dist/{chunk-NGGVYK5F.js.map → chunk-6JAAM5TA.js.map} +1 -1
  35. package/dist/chunk-ADJ3CERD.js +31 -0
  36. package/dist/chunk-ADJ3CERD.js.map +1 -0
  37. package/dist/{chunk-VH7LZ3JT.js → chunk-E7ZO44KU.js} +3 -3
  38. package/dist/{chunk-VH7LZ3JT.js.map → chunk-E7ZO44KU.js.map} +1 -1
  39. package/dist/{chunk-BZQALPHC.js → chunk-FJ6NSPYF.js} +3 -3
  40. package/dist/{chunk-BZQALPHC.js.map → chunk-FJ6NSPYF.js.map} +1 -1
  41. package/dist/{chunk-RGAFGLUW.js → chunk-ONQJGZCL.js} +4 -71
  42. package/dist/chunk-ONQJGZCL.js.map +1 -0
  43. package/dist/chunk-SSA762W5.js +71 -0
  44. package/dist/chunk-SSA762W5.js.map +1 -0
  45. package/dist/{chunk-ST7KKB2W.js → chunk-TRYZ75AV.js} +3 -3
  46. package/dist/{chunk-ST7KKB2W.js.map → chunk-TRYZ75AV.js.map} +1 -1
  47. package/dist/index.js +14 -257
  48. package/dist/index.js.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/Browser-46QICOBV.js.map +0 -1
  51. package/dist/Calculator-2454MDQH.js.map +0 -1
  52. package/dist/Calendar-NOVX5TSS.js.map +0 -1
  53. package/dist/CurrencyConverter-LVUXSR57.js.map +0 -1
  54. package/dist/Documents-QJDM3JQZ.js.map +0 -1
  55. package/dist/Email-N27XXAW3.js.map +0 -1
  56. package/dist/Files-W3PU2D6S.js +0 -8
  57. package/dist/Minesweeper-Q4UYGWYG.js.map +0 -1
  58. package/dist/Notepad-XU7VIXYV.js.map +0 -1
  59. package/dist/PomodoroTimer-4UXR4OLK.js.map +0 -1
  60. package/dist/Preview-EOZK5EBA.js +0 -7
  61. package/dist/Spreadsheet-2GWD45U4.js +0 -6
  62. package/dist/Weather-6GOXYALT.js.map +0 -1
  63. package/dist/WorldClock-35S3SRPP.js.map +0 -1
  64. package/dist/chunk-RGAFGLUW.js.map +0 -1
package/dist/index.js CHANGED
@@ -6,15 +6,19 @@ import { useGoogleAuth } from './chunk-MVWEL34Y.js';
6
6
  import { useShellPrefs } from './chunk-36VM54SC.js';
7
7
  export { ShellPrefsProvider, useLocalStoragePrefs, useShellPrefs } from './chunk-36VM54SC.js';
8
8
  import { playNotification, playStartup, soundsEnabled, getSoundConfig, SOUND_PACK_KEYS, SOUND_PACKS, SOUND_TYPES, SOUND_TYPE_LABELS, playLogout, setSoundForType, previewSound, setAllSounds } from './chunk-D7PYW2QS.js';
9
- export { EditableGrid } from './chunk-GP4Y3VCB.js';
10
- import { setPdfPreview } from './chunk-ST7KKB2W.js';
9
+ import { setPdfPreview } from './chunk-TRYZ75AV.js';
11
10
  import './chunk-KUIPWCTJ.js';
12
11
  import { toast_default } from './chunk-WIJ45SYD.js';
13
12
  export { toast_default as toast } from './chunk-WIJ45SYD.js';
14
- import { useWindowManager, glassStyle, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, Modal, startMenuCategories, useIsMobile, navSections, isSection, GLASS_INPUT_BG, navIcons, sectionIcons, ModalActions, useModalActive, WINDOW_REGISTRY, isPageEntry, LoadingSpinner, ThumbCard, activateModal } from './chunk-RGAFGLUW.js';
15
- export { CancelButton, CopyButton, DocFavStar, GLASS_DIVIDER, GLASS_INPUT_BG, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, WindowManagerProvider, WindowTitle, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, glassStyle, isEntityEntry, isPageEntry, setExposeHighlight, setShellApiClient, setShellNavIcons, setShellWindowRegistry, setWindowDefaultPosition, subscribeExposeHighlight, toggleExposeMode, useModalActive, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-RGAFGLUW.js';
13
+ import { useAuth } from './chunk-ADJ3CERD.js';
14
+ export { ShellAuthProvider, setShellAuthBridge, useShellAuth } from './chunk-ADJ3CERD.js';
15
+ export { EditableGrid } from './chunk-GP4Y3VCB.js';
16
+ import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, Modal, useIsMobile, ModalActions, useModalActive, WINDOW_REGISTRY, isPageEntry, LoadingSpinner, ThumbCard, activateModal } from './chunk-ONQJGZCL.js';
17
+ export { CancelButton, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, WindowManagerProvider, WindowTitle, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, isEntityEntry, isPageEntry, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, subscribeExposeHighlight, toggleExposeMode, useModalActive, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-ONQJGZCL.js';
16
18
  import { confirm } from './chunk-PLGHQ7QW.js';
17
19
  export { ConfirmProvider, confirm, confirmDestructive, prompt } from './chunk-PLGHQ7QW.js';
20
+ import { glassStyle, startMenuCategories, navSections, isSection, GLASS_INPUT_BG, navIcons, sectionIcons } from './chunk-SSA762W5.js';
21
+ export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle, setShellNavIcons } from './chunk-SSA762W5.js';
18
22
  import { createContext, lazy, useState, useRef, useEffect, useCallback, useLayoutEffect, useContext, Suspense, isValidElement, cloneElement, useSyncExternalStore, useMemo } from 'react';
19
23
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
20
24
  import { Dialog, DialogBackdrop, DialogPanel, DialogTitle } from '@headlessui/react';
@@ -909,7 +913,7 @@ function StatusBadge({ status }) {
909
913
  }
910
914
 
911
915
  // src/version.ts
912
- var VERSION = "0.2.61" ;
916
+ var VERSION = "0.2.62" ;
913
917
  var APP_VERSION = VERSION;
914
918
 
915
919
  // src/changelog.ts
@@ -2251,29 +2255,6 @@ function Desktop({ profile }) {
2251
2255
  }
2252
2256
  );
2253
2257
  }
2254
- var DEFAULT = { hasAnyPerm: () => true };
2255
- var ShellAuthContext = createContext(DEFAULT);
2256
- function ShellAuthProvider({ value, children }) {
2257
- return /* @__PURE__ */ jsx(ShellAuthContext.Provider, { value, children });
2258
- }
2259
- function useShellAuth() {
2260
- return useContext(ShellAuthContext);
2261
- }
2262
-
2263
- // src/contexts/AuthContext.tsx
2264
- var _authBridge = {};
2265
- function setShellAuthBridge(bridge) {
2266
- _authBridge = bridge;
2267
- }
2268
- function useAuth() {
2269
- const { hasAnyPerm } = useShellAuth();
2270
- return {
2271
- user: _authBridge.user,
2272
- logout: _authBridge.logout ?? (() => {
2273
- }),
2274
- hasAnyPerm
2275
- };
2276
- }
2277
2258
  function subscribeMediaQuery(cb) {
2278
2259
  const mq = window.matchMedia("(prefers-color-scheme: dark)");
2279
2260
  mq.addEventListener("change", cb);
@@ -2997,231 +2978,6 @@ function StartMenu({
2997
2978
  ` })
2998
2979
  ] });
2999
2980
  }
3000
- function Sidebar({
3001
- width,
3002
- openPage,
3003
- profile,
3004
- user,
3005
- onLogout,
3006
- onNavigate,
3007
- navSections: navSections2 = navSections,
3008
- navIcons: navIcons2 = navIcons,
3009
- sectionIcons: sectionIcons2 = sectionIcons,
3010
- categories = startMenuCategories,
3011
- productName,
3012
- productIcon
3013
- }) {
3014
- const { hasAnyPerm } = useAuth();
3015
- const erpLabels = new Set(categories.erp);
3016
- const systemLabels = new Set(categories.system);
3017
- const virtualSections = categories.virtual ?? [];
3018
- const [search, setSearch] = useState("");
3019
- const [expanded, setExpanded] = useState(/* @__PURE__ */ new Set());
3020
- const searchRef = useRef(null);
3021
- const toggleExpanded = (label) => {
3022
- setExpanded((prev) => {
3023
- const next = new Set(prev);
3024
- if (next.has(label)) next.delete(label);
3025
- else next.add(label);
3026
- return next;
3027
- });
3028
- };
3029
- const topItems = navSections2.filter((item) => !isSection(item));
3030
- const erpSections = navSections2.filter((item) => isSection(item) && erpLabels.has(item.label));
3031
- const systemSections = navSections2.filter((item) => isSection(item) && systemLabels.has(item.label));
3032
- const getVisibleItems = (section) => {
3033
- if (section.perms && !hasAnyPerm(section.perms)) return [];
3034
- return section.items.filter((it) => !it.perms || hasAnyPerm(it.perms));
3035
- };
3036
- const searchResults = useMemo(() => {
3037
- if (search.length < 2) return [];
3038
- const q = search.toLowerCase();
3039
- return navSections2.flatMap((entry) => {
3040
- if (isSection(entry)) {
3041
- return getVisibleItems(entry).filter((it) => it.label.toLowerCase().includes(q));
3042
- }
3043
- return entry.label.toLowerCase().includes(q) ? [entry] : [];
3044
- });
3045
- }, [search, navSections2, hasAnyPerm]);
3046
- useEffect(() => {
3047
- const onKey = (e) => {
3048
- if (e.key === "Escape") {
3049
- setExpanded(/* @__PURE__ */ new Set());
3050
- setSearch("");
3051
- } else if (e.key === "/" && document.activeElement?.tagName !== "INPUT" && document.activeElement?.tagName !== "TEXTAREA") {
3052
- e.preventDefault();
3053
- searchRef.current?.focus();
3054
- }
3055
- };
3056
- window.addEventListener("keydown", onKey);
3057
- return () => window.removeEventListener("keydown", onKey);
3058
- }, []);
3059
- const handleClick = (path) => {
3060
- onNavigate(path);
3061
- onPageOpenedReset();
3062
- };
3063
- const onPageOpenedReset = () => {
3064
- setSearch("");
3065
- };
3066
- const itemCls = "w-full flex items-center gap-2 rounded-lg px-3 py-2 text-sm";
3067
- const menuGlass = glassStyle();
3068
- const iconEl = (to) => {
3069
- const icon = navIcons2[to];
3070
- if (icon && isValidElement(icon)) {
3071
- return cloneElement(icon, {
3072
- className: "h-4 w-4 shrink-0 text-gray-500"
3073
- });
3074
- }
3075
- return /* @__PURE__ */ jsx("span", { className: "h-4 w-4 shrink-0" });
3076
- };
3077
- const secIcon = (label) => {
3078
- const icon = sectionIcons2[label];
3079
- if (icon && isValidElement(icon)) {
3080
- return cloneElement(icon, {
3081
- className: "h-4 w-4 shrink-0 text-gray-500"
3082
- });
3083
- }
3084
- return /* @__PURE__ */ jsx("span", { className: "h-4 w-4 shrink-0" });
3085
- };
3086
- const renderItem = (item) => /* @__PURE__ */ jsxs("div", { children: [
3087
- /* @__PURE__ */ jsxs(
3088
- "button",
3089
- {
3090
- onClick: () => handleClick(item.to),
3091
- className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
3092
- children: [
3093
- iconEl(item.to),
3094
- /* @__PURE__ */ jsx("span", { className: "truncate", children: item.label })
3095
- ]
3096
- }
3097
- ),
3098
- item.dividerAfter && /* @__PURE__ */ jsx("div", { className: "border-t border-white/20 my-1.5 mx-2" })
3099
- ] }, item.to);
3100
- const renderSectionAccordion = (section, isErp) => {
3101
- const items = "perms" in section ? getVisibleItems(section) : section.items;
3102
- if (items.length === 0) return null;
3103
- const isOpen = expanded.has(section.label);
3104
- return /* @__PURE__ */ jsxs("div", { children: [
3105
- /* @__PURE__ */ jsxs(
3106
- "button",
3107
- {
3108
- onClick: () => toggleExpanded(section.label),
3109
- "aria-expanded": isOpen,
3110
- className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
3111
- children: [
3112
- "icon" in section && section.icon ? section.icon : secIcon(section.label),
3113
- /* @__PURE__ */ jsx("span", { className: `truncate ${isErp ? "font-medium" : ""}`, children: section.label }),
3114
- /* @__PURE__ */ jsx(
3115
- "svg",
3116
- {
3117
- className: `h-3.5 w-3.5 ml-auto text-gray-500 transition-transform ${isOpen ? "rotate-90" : ""}`,
3118
- fill: "none",
3119
- viewBox: "0 0 24 24",
3120
- stroke: "currentColor",
3121
- strokeWidth: 2,
3122
- children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 4.5l7.5 7.5-7.5 7.5" })
3123
- }
3124
- )
3125
- ]
3126
- }
3127
- ),
3128
- isOpen && /* @__PURE__ */ jsx("div", { className: "pl-4 mt-0.5 mb-1 space-y-0.5", children: items.map((it) => /* @__PURE__ */ jsxs(
3129
- "button",
3130
- {
3131
- onClick: () => handleClick(it.to),
3132
- className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
3133
- children: [
3134
- iconEl(it.to),
3135
- /* @__PURE__ */ jsx("span", { className: "truncate", children: it.label })
3136
- ]
3137
- },
3138
- it.to
3139
- )) })
3140
- ] }, section.label);
3141
- };
3142
- return /* @__PURE__ */ jsxs(
3143
- "div",
3144
- {
3145
- className: "fixed top-0 left-0 bottom-0 z-[260] flex flex-col rounded-r-2xl overflow-hidden",
3146
- style: { width, ...menuGlass },
3147
- children: [
3148
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-4 py-3 border-b border-white/15 shrink-0", children: [
3149
- productIcon && /* @__PURE__ */ jsx("img", { src: productIcon, alt: "", className: "h-5 w-5 shrink-0 opacity-80" }),
3150
- /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-gray-800 truncate", children: productName ?? "Apps" })
3151
- ] }),
3152
- /* @__PURE__ */ jsx("div", { className: "px-3 pt-3 pb-2 shrink-0", children: /* @__PURE__ */ jsxs("div", { className: `flex items-center gap-2 ${GLASS_INPUT_BG} rounded-lg px-2.5 py-1.5`, children: [
3153
- /* @__PURE__ */ jsx("svg", { className: "h-3.5 w-3.5 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }),
3154
- /* @__PURE__ */ jsx(
3155
- "input",
3156
- {
3157
- ref: searchRef,
3158
- value: search,
3159
- onChange: (e) => setSearch(e.target.value),
3160
- placeholder: "Search...",
3161
- className: "flex-1 bg-transparent text-xs outline-none placeholder-gray-400"
3162
- }
3163
- ),
3164
- search && /* @__PURE__ */ jsx("button", { onClick: () => setSearch(""), className: "text-gray-400 hover:text-gray-600 text-xs", children: "\xD7" })
3165
- ] }) }),
3166
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-1 pb-1", children: search.length >= 2 ? (
3167
- // Search results take over the body.
3168
- /* @__PURE__ */ jsx("div", { children: searchResults.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-6 text-center text-xs text-gray-400", children: "No matches" }) : searchResults.map((r) => /* @__PURE__ */ jsxs(
3169
- "button",
3170
- {
3171
- onClick: () => handleClick(r.to),
3172
- className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
3173
- children: [
3174
- iconEl(r.to),
3175
- /* @__PURE__ */ jsx("span", { className: "truncate", children: r.label })
3176
- ]
3177
- },
3178
- r.to
3179
- )) })
3180
- ) : /* @__PURE__ */ jsxs(Fragment, { children: [
3181
- topItems.map(renderItem),
3182
- /* @__PURE__ */ jsxs(
3183
- "button",
3184
- {
3185
- onClick: () => handleClick("/notifications"),
3186
- className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
3187
- children: [
3188
- /* @__PURE__ */ jsx("svg", { className: "h-4 w-4 shrink-0 text-gray-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }),
3189
- /* @__PURE__ */ jsx("span", { children: "Notifications" })
3190
- ]
3191
- }
3192
- ),
3193
- /* @__PURE__ */ jsx("div", { className: "border-t border-white/15 my-1.5 mx-2" }),
3194
- erpSections.map((s) => renderSectionAccordion(s, true)),
3195
- systemSections.map((s) => renderSectionAccordion(s, false)),
3196
- virtualSections.map((v) => renderSectionAccordion(v, false))
3197
- ] }) }),
3198
- /* @__PURE__ */ jsx("div", { className: "border-t border-white/15 p-1 shrink-0", children: /* @__PURE__ */ jsxs(
3199
- "div",
3200
- {
3201
- onClick: () => handleClick("/profile"),
3202
- className: "rounded-lg px-2 py-1.5 flex items-center gap-2.5 hover:bg-blue-50 hover:text-blue-700 transition-colors cursor-pointer",
3203
- children: [
3204
- profile?.avatar_url ? /* @__PURE__ */ jsx("img", { src: profile.avatar_url, alt: "", className: "h-8 w-8 rounded-full object-cover border border-white/20 shrink-0" }) : /* @__PURE__ */ jsx("div", { className: "h-8 w-8 rounded-full bg-blue-100 flex items-center justify-center text-sm font-bold text-blue-700 shrink-0", children: (profile?.first_name?.charAt(0) || user?.email?.charAt(0) || "?").toUpperCase() }),
3205
- /* @__PURE__ */ jsx("p", { className: "flex-1 min-w-0 text-sm font-medium text-gray-900 truncate", children: profile?.first_name ? `${profile.first_name} ${profile.last_name || ""}`.trim() : user?.email }),
3206
- /* @__PURE__ */ jsx(
3207
- "button",
3208
- {
3209
- onClick: (e) => {
3210
- e.stopPropagation();
3211
- onLogout();
3212
- },
3213
- title: "Sign Out",
3214
- className: "shrink-0 p-1.5 rounded-md text-gray-500 hover:text-red-600 hover:bg-red-50 transition-colors",
3215
- children: /* @__PURE__ */ jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9" }) })
3216
- }
3217
- )
3218
- ]
3219
- }
3220
- ) })
3221
- ]
3222
- }
3223
- );
3224
- }
3225
2981
 
3226
2982
  // src/shell/mobileShellStore.ts
3227
2983
  var _mode = "home";
@@ -3985,6 +3741,7 @@ function MobileBottomNav({
3985
3741
  }
3986
3742
  );
3987
3743
  }
3744
+ var Sidebar = lazy(() => import('./Sidebar-4V6NQROQ.js'));
3988
3745
  function useFavorites(wallpapers) {
3989
3746
  const { prefs, save } = useShellPrefs();
3990
3747
  const favorites = prefs.favorite_pages || [];
@@ -4184,7 +3941,7 @@ function Layout({
4184
3941
  taskbarTrayLeft
4185
3942
  } = {}) {
4186
3943
  const bugReport = useBugReport();
4187
- const { user, logout} = useAuth();
3944
+ const { user, logout, hasAnyPerm } = useAuth();
4188
3945
  const { openPage, openEntity, openWindows } = useWindowManager();
4189
3946
  const [menuOpen, setMenuOpen] = useState(false);
4190
3947
  useEmailUnreadCount();
@@ -4373,7 +4130,7 @@ function Layout({
4373
4130
  categories
4374
4131
  }
4375
4132
  ),
4376
- sidebarMode && /* @__PURE__ */ jsx(
4133
+ sidebarMode && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
4377
4134
  Sidebar,
4378
4135
  {
4379
4136
  width: sidebarWidth,
@@ -4389,7 +4146,7 @@ function Layout({
4389
4146
  productName,
4390
4147
  productIcon
4391
4148
  }
4392
- ),
4149
+ ) }),
4393
4150
  (() => {
4394
4151
  const wallpaperStyle = {
4395
4152
  backgroundColor: desktopBg?.startsWith("#") ? desktopBg : desktopBg === "none" ? (() => {
@@ -5127,6 +4884,6 @@ function useEditHotkey(callback) {
5127
4884
  }, [callback, isActive]);
5128
4885
  }
5129
4886
 
5130
- export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BugReportConfigProvider, BugReportDetail, BugReportProvider, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Customization, Desktop, DesktopHostProvider, ENTER, GlobalSearch, Layout, MOD, NotificationBell, SHIFT, ShellAuthProvider, ShellEntityFetcherProvider, ShortcutHelp, StartMenu, StatusBadge, StatusBadgeProvider, VERSION, createWindowRegistry, isMac, openBugReportDialog, reportBug, setShellAuthBridge, useBugReport, useClickOutside, useDesktopHost, useEditHotkey, useNewHotkey, useShellAuth, useShellEntityFetcher };
4887
+ export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BugReportConfigProvider, BugReportDetail, BugReportProvider, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Customization, Desktop, DesktopHostProvider, ENTER, GlobalSearch, Layout, MOD, NotificationBell, SHIFT, ShellEntityFetcherProvider, ShortcutHelp, StartMenu, StatusBadge, StatusBadgeProvider, VERSION, createWindowRegistry, isMac, openBugReportDialog, reportBug, useBugReport, useClickOutside, useDesktopHost, useEditHotkey, useNewHotkey, useShellEntityFetcher };
5131
4888
  //# sourceMappingURL=index.js.map
5132
4889
  //# sourceMappingURL=index.js.map