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.
- package/dist/{Browser-46QICOBV.js → Browser-F7TJRHMK.js} +4 -3
- package/dist/Browser-F7TJRHMK.js.map +1 -0
- package/dist/{Calculator-2454MDQH.js → Calculator-FO3NUVCK.js} +5 -4
- package/dist/Calculator-FO3NUVCK.js.map +1 -0
- package/dist/{Calendar-NOVX5TSS.js → Calendar-ZGKMZ5TU.js} +4 -3
- package/dist/Calendar-ZGKMZ5TU.js.map +1 -0
- package/dist/{CurrencyConverter-LVUXSR57.js → CurrencyConverter-IMHQD6XV.js} +5 -4
- package/dist/CurrencyConverter-IMHQD6XV.js.map +1 -0
- package/dist/{Documents-QJDM3JQZ.js → Documents-PHVXWN4S.js} +4 -3
- package/dist/Documents-PHVXWN4S.js.map +1 -0
- package/dist/{Email-N27XXAW3.js → Email-VXTFMSS5.js} +5 -4
- package/dist/Email-VXTFMSS5.js.map +1 -0
- package/dist/Files-YO5YOKD7.js +9 -0
- package/dist/{Files-W3PU2D6S.js.map → Files-YO5YOKD7.js.map} +1 -1
- package/dist/{Minesweeper-Q4UYGWYG.js → Minesweeper-PX4DUPOE.js} +4 -3
- package/dist/Minesweeper-PX4DUPOE.js.map +1 -0
- package/dist/{Notepad-XU7VIXYV.js → Notepad-LFCZD2Y3.js} +4 -3
- package/dist/Notepad-LFCZD2Y3.js.map +1 -0
- package/dist/{PomodoroTimer-4UXR4OLK.js → PomodoroTimer-7Y36AEWF.js} +5 -4
- package/dist/PomodoroTimer-7Y36AEWF.js.map +1 -0
- package/dist/Preview-UMGXEYCV.js +8 -0
- package/dist/{Preview-EOZK5EBA.js.map → Preview-UMGXEYCV.js.map} +1 -1
- package/dist/Sidebar-4V6NQROQ.js +234 -0
- package/dist/Sidebar-4V6NQROQ.js.map +1 -0
- package/dist/Spreadsheet-L2DOK2JK.js +7 -0
- package/dist/{Spreadsheet-2GWD45U4.js.map → Spreadsheet-L2DOK2JK.js.map} +1 -1
- package/dist/{Weather-6GOXYALT.js → Weather-FDL7CFDL.js} +5 -4
- package/dist/Weather-FDL7CFDL.js.map +1 -0
- package/dist/{WorldClock-35S3SRPP.js → WorldClock-4PCYEMLF.js} +5 -4
- package/dist/WorldClock-4PCYEMLF.js.map +1 -0
- package/dist/apps/index.js +20 -19
- package/dist/apps/index.js.map +1 -1
- package/dist/{chunk-NGGVYK5F.js → chunk-6JAAM5TA.js} +4 -4
- package/dist/{chunk-NGGVYK5F.js.map → chunk-6JAAM5TA.js.map} +1 -1
- package/dist/chunk-ADJ3CERD.js +31 -0
- package/dist/chunk-ADJ3CERD.js.map +1 -0
- package/dist/{chunk-VH7LZ3JT.js → chunk-E7ZO44KU.js} +3 -3
- package/dist/{chunk-VH7LZ3JT.js.map → chunk-E7ZO44KU.js.map} +1 -1
- package/dist/{chunk-BZQALPHC.js → chunk-FJ6NSPYF.js} +3 -3
- package/dist/{chunk-BZQALPHC.js.map → chunk-FJ6NSPYF.js.map} +1 -1
- package/dist/{chunk-RGAFGLUW.js → chunk-ONQJGZCL.js} +4 -71
- package/dist/chunk-ONQJGZCL.js.map +1 -0
- package/dist/chunk-SSA762W5.js +71 -0
- package/dist/chunk-SSA762W5.js.map +1 -0
- package/dist/{chunk-ST7KKB2W.js → chunk-TRYZ75AV.js} +3 -3
- package/dist/{chunk-ST7KKB2W.js.map → chunk-TRYZ75AV.js.map} +1 -1
- package/dist/index.js +14 -257
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Browser-46QICOBV.js.map +0 -1
- package/dist/Calculator-2454MDQH.js.map +0 -1
- package/dist/Calendar-NOVX5TSS.js.map +0 -1
- package/dist/CurrencyConverter-LVUXSR57.js.map +0 -1
- package/dist/Documents-QJDM3JQZ.js.map +0 -1
- package/dist/Email-N27XXAW3.js.map +0 -1
- package/dist/Files-W3PU2D6S.js +0 -8
- package/dist/Minesweeper-Q4UYGWYG.js.map +0 -1
- package/dist/Notepad-XU7VIXYV.js.map +0 -1
- package/dist/PomodoroTimer-4UXR4OLK.js.map +0 -1
- package/dist/Preview-EOZK5EBA.js +0 -7
- package/dist/Spreadsheet-2GWD45U4.js +0 -6
- package/dist/Weather-6GOXYALT.js.map +0 -1
- package/dist/WorldClock-35S3SRPP.js.map +0 -1
- 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
|
-
|
|
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 {
|
|
15
|
-
export {
|
|
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.
|
|
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,
|
|
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
|