react-os-shell 4.79.4 → 4.83.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.
- package/README.md +38 -0
- package/dist/{Browser-3Z6IC25F.js → Browser-TGOOIGEP.js} +7 -7
- package/dist/{Browser-3Z6IC25F.js.map → Browser-TGOOIGEP.js.map} +1 -1
- package/dist/{Calculator-PAPSDNSJ.js → Calculator-2FCNKTPN.js} +6 -6
- package/dist/{Calculator-PAPSDNSJ.js.map → Calculator-2FCNKTPN.js.map} +1 -1
- package/dist/{CurrencyConverter-VJQI2XVV.js → CurrencyConverter-KZU7MTWE.js} +6 -6
- package/dist/{CurrencyConverter-VJQI2XVV.js.map → CurrencyConverter-KZU7MTWE.js.map} +1 -1
- package/dist/{Documents-6LSU5BZL.js → Documents-TRV2LWMG.js} +8 -16
- package/dist/Documents-TRV2LWMG.js.map +1 -0
- package/dist/{Files-6WCC7TQO.js → Files-PFVZJYRV.js} +9 -9
- package/dist/{Files-6WCC7TQO.js.map → Files-PFVZJYRV.js.map} +1 -1
- package/dist/{Notepad-NOA4XZBK.js → Notepad-UBDMMVLB.js} +7 -7
- package/dist/{Notepad-NOA4XZBK.js.map → Notepad-UBDMMVLB.js.map} +1 -1
- package/dist/{PomodoroTimer-GFL4L3XS.js → PomodoroTimer-SL372V3I.js} +7 -7
- package/dist/{PomodoroTimer-GFL4L3XS.js.map → PomodoroTimer-SL372V3I.js.map} +1 -1
- package/dist/{Preview-GEDTZPMG.js → Preview-7QUDHTDN.js} +35 -8
- package/dist/Preview-7QUDHTDN.js.map +1 -0
- package/dist/{Sidebar-B3LY5T2U.js → Sidebar-GFDPPC4X.js} +24 -6
- package/dist/Sidebar-GFDPPC4X.js.map +1 -0
- package/dist/{Spreadsheet-664SZSSQ.js → Spreadsheet-F24CHTRL.js} +9 -8
- package/dist/Spreadsheet-F24CHTRL.js.map +1 -0
- package/dist/{Stock-WZXVQX3G.js → Stock-YDCHLKSV.js} +6 -6
- package/dist/{Stock-WZXVQX3G.js.map → Stock-YDCHLKSV.js.map} +1 -1
- package/dist/{Weather-FQ7ZVXVR.js → Weather-HM3Y5LMI.js} +6 -6
- package/dist/{Weather-FQ7ZVXVR.js.map → Weather-HM3Y5LMI.js.map} +1 -1
- package/dist/{WorldClock-XAFQ5ZQF.js → WorldClock-RXKMY3YJ.js} +6 -6
- package/dist/{WorldClock-XAFQ5ZQF.js.map → WorldClock-RXKMY3YJ.js.map} +1 -1
- package/dist/apps/index.js +19 -19
- package/dist/{chunk-DC6BYGZ6.js → chunk-2P6CJAR5.js} +4 -4
- package/dist/chunk-2P6CJAR5.js.map +1 -0
- package/dist/{chunk-EWDYCO65.js → chunk-35RG2LD2.js} +3 -3
- package/dist/{chunk-EWDYCO65.js.map → chunk-35RG2LD2.js.map} +1 -1
- package/dist/{chunk-ZO4XGUZQ.js → chunk-3TSIRZUW.js} +3 -3
- package/dist/{chunk-ZO4XGUZQ.js.map → chunk-3TSIRZUW.js.map} +1 -1
- package/dist/{chunk-BLLINYDD.js → chunk-5TLIIDRZ.js} +186 -5
- package/dist/chunk-5TLIIDRZ.js.map +1 -0
- package/dist/chunk-6XQHH7D2.js +105 -0
- package/dist/chunk-6XQHH7D2.js.map +1 -0
- package/dist/{chunk-OQ7GRU7G.js → chunk-7RUYFI6O.js} +3 -3
- package/dist/{chunk-OQ7GRU7G.js.map → chunk-7RUYFI6O.js.map} +1 -1
- package/dist/{chunk-TT2WNTDS.js → chunk-IZ2FABWU.js} +3 -3
- package/dist/{chunk-TT2WNTDS.js.map → chunk-IZ2FABWU.js.map} +1 -1
- package/dist/{chunk-YZVJCHXV.js → chunk-LEMEFL6U.js} +300 -194
- package/dist/chunk-LEMEFL6U.js.map +1 -0
- package/dist/chunk-LZJW4FMH.js +7 -0
- package/dist/{chunk-QKVUOX5N.js.map → chunk-LZJW4FMH.js.map} +1 -1
- package/dist/chunk-MGGY74RY.js +14 -0
- package/dist/chunk-MGGY74RY.js.map +1 -0
- package/dist/{chunk-EXSEW5F3.js → chunk-MHUVU7ZX.js} +102 -16
- package/dist/chunk-MHUVU7ZX.js.map +1 -0
- package/dist/{chunk-QJS6RBH4.js → chunk-XWLEA4B7.js} +3 -3
- package/dist/{chunk-QJS6RBH4.js.map → chunk-XWLEA4B7.js.map} +1 -1
- package/dist/{chunk-J46YHNHL.js → chunk-Y2F2RTXM.js} +6 -6
- package/dist/{chunk-J46YHNHL.js.map → chunk-Y2F2RTXM.js.map} +1 -1
- package/dist/{chunk-WNLPTLT6.js → chunk-ZESNO4TZ.js} +2 -2
- package/dist/chunk-ZESNO4TZ.js.map +1 -0
- package/dist/{index-BjEcKEsJ.d.ts → index-D9ZuIsBe.d.ts} +130 -1
- package/dist/index.d.ts +53 -3
- package/dist/index.js +157 -55
- package/dist/index.js.map +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +6 -4
- package/package.json +4 -4
- package/dist/Documents-6LSU5BZL.js.map +0 -1
- package/dist/Preview-GEDTZPMG.js.map +0 -1
- package/dist/Sidebar-B3LY5T2U.js.map +0 -1
- package/dist/Spreadsheet-664SZSSQ.js.map +0 -1
- package/dist/chunk-BLLINYDD.js.map +0 -1
- package/dist/chunk-DC6BYGZ6.js.map +0 -1
- package/dist/chunk-EXSEW5F3.js.map +0 -1
- package/dist/chunk-QKVUOX5N.js +0 -7
- package/dist/chunk-WNLPTLT6.js.map +0 -1
- package/dist/chunk-YZVJCHXV.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
import { PREVIEW_OPENED_EVENT, openPreviewFile } from './chunk-GO2LCDHS.js';
|
|
2
|
-
import { subscribePomo, getPomoSnapshot } from './chunk-
|
|
3
|
-
export { setShellTodoProvider } from './chunk-
|
|
2
|
+
import { subscribePomo, getPomoSnapshot } from './chunk-IZ2FABWU.js';
|
|
3
|
+
export { setShellTodoProvider } from './chunk-IZ2FABWU.js';
|
|
4
4
|
export { ImageAnnotator_default as ImageAnnotator } from './chunk-AXWC3332.js';
|
|
5
|
-
import { publishDesktopFolders, requestFilesTrashView, FolderGlyph, requestFilesDesktopFolderView, FileIconTile } from './chunk-
|
|
5
|
+
import { publishDesktopFolders, requestFilesTrashView, FolderGlyph, requestFilesDesktopFolderView, FileIconTile } from './chunk-7RUYFI6O.js';
|
|
6
6
|
import './chunk-CT3HVZRZ.js';
|
|
7
7
|
import { setPdfPreview } from './chunk-3L463T5H.js';
|
|
8
|
-
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, formatDate, useTheme, GlobalSearch, resolveTheme, useClickOutside, ListLoadError, ListFooter, firstEnabledIndex,
|
|
9
|
-
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, Accordion, AuthScreen, Avatar, AvatarGroup, Banner, BarChart,
|
|
8
|
+
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, formatDate, useTheme, GlobalSearch, resolveTheme, useClickOutside, ListLoadError, ListFooter, firstEnabledIndex, FormField, Input_default, applyThemePrefs, lastEnabledIndex, nextEnabledIndex, matchTypeahead } from './chunk-LEMEFL6U.js';
|
|
9
|
+
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, Accordion, AuthScreen, Avatar, AvatarGroup, Banner, BarChart, BrandAssetEditor, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Calendar, Card, ChatTemplate, Checkbox_default as Checkbox, CheckoutTemplate, ColoredBadge, ContainerFillChart, CountBadge, DashboardTemplate, DataTable, DataTablePage, DatePicker_default as DatePicker, DateRangePicker, DateTimePicker_default as DateTimePicker, DescriptionList, Divider, DonutChart, Drawer, DropdownMenu, ENTER, EmailTemplate, EmptyState, ErrorBoundary, ErrorPage, FilePicker, FormErrorSummary, FormField, FormLayoutPage, GROUP_COLORS, GalleryTemplate, GlobalSearch, Grid, HelpCenter, INPUT_BASE, INPUT_SIZES, IconButton_default as IconButton, Inline, Input_default as Input, InputNumber_default as InputNumber, Kanban, Label, LineChart, ListFooter, ListLoadError, MAX_FRACTION_DIGITS, MOD, Markdown, MediaUploadField, MediaUploadGrid, MetricBar, MilestoneTimeline, NativeSelect, NumericKeypad, PageHeader, Pagination, Paragraph, PortalBrandingProvider, Radio_default as Radio, SHIFT, SearchableSelect, Segmented, Select_default as Select, SidebarActionButton, SidebarGroupLabel, SidebarNavItem, Skeleton, Sparkline, Stack, StatCard, Statistic, StatusBadge, StatusBadgeProvider, Stepper, Switch_default as Switch, Tabs, TagInput, Text, Textarea_default as Textarea, TileButton_default as TileButton, TimePicker_default as TimePicker, Title, Tooltip, TopNav, appendKey, applyThemePrefs, backspace, formatDate, fromKey as fromDateKey, inputClasses, isMac, isSeverityTone, mediaFileName, resolvePortalBrandAsset, resolveTheme, severityOf, tabButtonId, tabPanelId, toKey as toDateKey, toISODate, useClickOutside, usePortalBranding, useTheme } from './chunk-LEMEFL6U.js';
|
|
10
10
|
export { Breadcrumbs } from './chunk-HNH7FOYB.js';
|
|
11
|
-
import { withSpareRow, EditableGrid } from './chunk-
|
|
12
|
-
export { EditableGrid } from './chunk-
|
|
11
|
+
import { withSpareRow, EditableGrid } from './chunk-2P6CJAR5.js';
|
|
12
|
+
export { EditableGrid } from './chunk-2P6CJAR5.js';
|
|
13
|
+
import './chunk-MGGY74RY.js';
|
|
13
14
|
import { SidebarLayout } from './chunk-YG45DAUT.js';
|
|
14
15
|
export { SidebarLayout } from './chunk-YG45DAUT.js';
|
|
15
16
|
import { toast_default } from './chunk-2VM2FRZJ.js';
|
|
16
17
|
export { toast_default as toast } from './chunk-2VM2FRZJ.js';
|
|
17
|
-
import { APP_VERSION, VERSION } from './chunk-
|
|
18
|
-
export { VERSION } from './chunk-
|
|
18
|
+
import { APP_VERSION, VERSION } from './chunk-LZJW4FMH.js';
|
|
19
|
+
export { VERSION } from './chunk-LZJW4FMH.js';
|
|
19
20
|
import { playNotification, playStartup, soundsEnabled, getSoundConfig, SOUND_PACK_KEYS, SOUND_PACKS, SOUND_TYPES, SOUND_TYPE_LABELS, setSoundForType, previewSound, setAllSounds, playLogout } from './chunk-D7PYW2QS.js';
|
|
20
|
-
import { useAuth } from './chunk-
|
|
21
|
-
export { setShellAuthBridge } from './chunk-
|
|
22
|
-
import {
|
|
23
|
-
export {
|
|
24
|
-
import {
|
|
25
|
-
export {
|
|
21
|
+
import { useAuth } from './chunk-35RG2LD2.js';
|
|
22
|
+
export { setShellAuthBridge } from './chunk-35RG2LD2.js';
|
|
23
|
+
import { BrandMark } from './chunk-6XQHH7D2.js';
|
|
24
|
+
export { BrandMark, resolveBrandMarkTreatment } from './chunk-6XQHH7D2.js';
|
|
25
|
+
import { cancelWindowFront, requestWindowFront, useWindowManager, WINDOW_REGISTRY, isPageEntry, Modal, setPerfCollecting, drainPerfEvents, markMenuOpen, SIDEBAR_STRIP_W, forgetMaximizedWindowBoxes, ModalActions, useModalActive, client_default, LoadingSpinner, isShellApiClientConfigured, useUndo, useEnclosingModalId, CancelButton, setWindowPosition } from './chunk-MHUVU7ZX.js';
|
|
26
|
+
export { CancelButton, CopyButton, DocFavStar, EntityWindowFallback, EntityWindowLoading, EntityWindowState, MODAL_SUBMIT_SELECTOR, Modal, ModalActions, UndoProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, beginWindowGesture, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, markMenuOpen, requestWindowFront, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useEnclosingModalId, useIsActiveWindow, useModalActive, useUndo, useUndoable, useUndoableState, useWidgetSettings, useWindowDirty, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-MHUVU7ZX.js';
|
|
27
|
+
import { useShellStrings, useShellPrefs, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, useIsMobile, Button_default } from './chunk-5TLIIDRZ.js';
|
|
28
|
+
export { Button_default as Button, DEFAULT_SHELL_STRINGS, LoadingSpinner, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, Result, ShellPrefsProvider, ShellStringsProvider, useIsMobile, useLocalStoragePrefs, useShellPrefs, useShellStrings } from './chunk-5TLIIDRZ.js';
|
|
26
29
|
import { registerModalEscapeInterceptor } from './chunk-CDR2Q64Q.js';
|
|
27
30
|
export { ConfirmProvider, Dialog, confirm, confirmDestructive, prompt, registerModalEscapeInterceptor, useConfirm, useFocusTrap, useScrollLock } from './chunk-CDR2Q64Q.js';
|
|
28
|
-
import { startMenuCategories, navVisible, navSections, isSection, navIcons, isReachable, sectionIcons, useShellAuth, visibleChildren } from './chunk-
|
|
29
|
-
export { ShellAuthProvider, setShellNavIcons, useShellAuth } from './chunk-
|
|
31
|
+
import { startMenuCategories, navVisible, navSections, isSection, navIcons, isReachable, sectionIcons, useShellAuth, visibleChildren } from './chunk-ZESNO4TZ.js';
|
|
32
|
+
export { ShellAuthProvider, setShellNavIcons, useShellAuth } from './chunk-ZESNO4TZ.js';
|
|
30
33
|
import { GLASS_INPUT_BG, glassStyle } from './chunk-3CUSBZWG.js';
|
|
31
34
|
export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle } from './chunk-3CUSBZWG.js';
|
|
32
35
|
import { createContext, lazy, useSyncExternalStore, useState, useEffect, useRef, useCallback, useLayoutEffect, useMemo, useContext, isValidElement, cloneElement, Suspense, useId } from 'react';
|
|
@@ -2502,7 +2505,7 @@ function Desktop({ profile }) {
|
|
|
2502
2505
|
}
|
|
2503
2506
|
);
|
|
2504
2507
|
}
|
|
2505
|
-
function StartupAnimation({ onComplete, ready = false, productName = "react-os-shell", subtitle, logo = "/favicon.svg" }) {
|
|
2508
|
+
function StartupAnimation({ onComplete, ready = false, productName = "react-os-shell", subtitle, logo = "/favicon.svg", adaptiveLogo = false, logoHasAlpha = null, logoIsLight = null }) {
|
|
2506
2509
|
const [phase, setPhase] = useState("logo");
|
|
2507
2510
|
const [minTimePassed, setMinTimePassed] = useState(false);
|
|
2508
2511
|
const onCompleteRef = useRef(onComplete);
|
|
@@ -2546,11 +2549,18 @@ function StartupAnimation({ onComplete, ready = false, productName = "react-os-s
|
|
|
2546
2549
|
}
|
|
2547
2550
|
) }),
|
|
2548
2551
|
/* @__PURE__ */ jsx("div", { className: `relative transition-all duration-700 ease-out ${phase === "logo" ? "scale-75 opacity-0" : "scale-100 opacity-100"}`, children: /* @__PURE__ */ jsx(
|
|
2549
|
-
|
|
2552
|
+
BrandMark,
|
|
2550
2553
|
{
|
|
2551
2554
|
src: logo,
|
|
2552
2555
|
alt: "",
|
|
2553
|
-
|
|
2556
|
+
slot: "compact",
|
|
2557
|
+
surface: "dark",
|
|
2558
|
+
size: 80,
|
|
2559
|
+
adaptive: adaptiveLogo,
|
|
2560
|
+
hasAlpha: logoHasAlpha,
|
|
2561
|
+
isLight: logoIsLight,
|
|
2562
|
+
decorative: true,
|
|
2563
|
+
className: "drop-shadow-[0_0_30px_rgba(124,58,237,0.5)]",
|
|
2554
2564
|
style: { animation: "spin-in 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards" }
|
|
2555
2565
|
}
|
|
2556
2566
|
) }),
|
|
@@ -2596,7 +2606,7 @@ function StartupAnimation({ onComplete, ready = false, productName = "react-os-s
|
|
|
2596
2606
|
}
|
|
2597
2607
|
);
|
|
2598
2608
|
}
|
|
2599
|
-
function LogoutAnimation({ onComplete, subtitle, logo = "/favicon.svg" }) {
|
|
2609
|
+
function LogoutAnimation({ onComplete, subtitle, logo = "/favicon.svg", adaptiveLogo = false, logoHasAlpha = null, logoIsLight = null }) {
|
|
2600
2610
|
const [phase, setPhase] = useState("show");
|
|
2601
2611
|
const strings = useShellStrings();
|
|
2602
2612
|
useEffect(() => {
|
|
@@ -2632,7 +2642,21 @@ function LogoutAnimation({ onComplete, subtitle, logo = "/favicon.svg" }) {
|
|
|
2632
2642
|
{
|
|
2633
2643
|
className: `relative transition-all duration-1000 ease-in ${phase === "out" ? "scale-0 opacity-0" : "scale-100 opacity-100"}`,
|
|
2634
2644
|
style: phase === "out" ? { transform: "scale(0) rotate(180deg)" } : void 0,
|
|
2635
|
-
children: /* @__PURE__ */ jsx(
|
|
2645
|
+
children: /* @__PURE__ */ jsx(
|
|
2646
|
+
BrandMark,
|
|
2647
|
+
{
|
|
2648
|
+
src: logo,
|
|
2649
|
+
alt: "",
|
|
2650
|
+
slot: "compact",
|
|
2651
|
+
surface: "dark",
|
|
2652
|
+
size: 80,
|
|
2653
|
+
adaptive: adaptiveLogo,
|
|
2654
|
+
hasAlpha: logoHasAlpha,
|
|
2655
|
+
isLight: logoIsLight,
|
|
2656
|
+
decorative: true,
|
|
2657
|
+
className: "drop-shadow-[0_0_30px_rgba(124,58,237,0.5)]"
|
|
2658
|
+
}
|
|
2659
|
+
)
|
|
2636
2660
|
}
|
|
2637
2661
|
),
|
|
2638
2662
|
/* @__PURE__ */ jsxs("div", { className: `mt-6 text-center transition-all duration-700 ${phase === "show" ? "opacity-100 translate-y-0" : "opacity-0 translate-y-4"}`, children: [
|
|
@@ -2736,6 +2760,23 @@ function menuPanelLeft(ownerLeft, ownerRight, width, viewportW, gap, preferLeft
|
|
|
2736
2760
|
}
|
|
2737
2761
|
var PANEL_GAP = 4;
|
|
2738
2762
|
var CLOSE_DELAY = 200;
|
|
2763
|
+
var visibleMenuLabel = (entry) => entry.menuLabel ?? entry.label;
|
|
2764
|
+
var isAbbreviated = (entry) => Boolean(entry.menuLabel && entry.menuLabel !== entry.label);
|
|
2765
|
+
var menuAriaLabel = (entry) => isAbbreviated(entry) ? `${entry.menuLabel}, ${entry.label}` : void 0;
|
|
2766
|
+
function MenuLabel({ entry, className }) {
|
|
2767
|
+
const abbreviated = isAbbreviated(entry);
|
|
2768
|
+
const [titled, setTitled] = useState(abbreviated);
|
|
2769
|
+
return /* @__PURE__ */ jsx(
|
|
2770
|
+
"span",
|
|
2771
|
+
{
|
|
2772
|
+
className,
|
|
2773
|
+
title: titled ? entry.label : void 0,
|
|
2774
|
+
"data-menu-label": true,
|
|
2775
|
+
onMouseEnter: (e) => setTitled(abbreviated || e.currentTarget.scrollWidth > e.currentTarget.clientWidth),
|
|
2776
|
+
children: visibleMenuLabel(entry)
|
|
2777
|
+
}
|
|
2778
|
+
);
|
|
2779
|
+
}
|
|
2739
2780
|
function MenuPanel({ left, anchorY, estHeight, minTop, maxBottom, flipped, className, style, onMouseEnter, onMouseLeave, children }) {
|
|
2740
2781
|
const ref = useRef(null);
|
|
2741
2782
|
useLayoutEffect(() => {
|
|
@@ -2866,17 +2907,18 @@ function StartMenu({
|
|
|
2866
2907
|
)
|
|
2867
2908
|
] })
|
|
2868
2909
|
] }),
|
|
2869
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden
|
|
2910
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden", children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-400 text-center py-12", children: "No matching apps" }) : filtered.map(({ item, sectionLabel }, i) => {
|
|
2870
2911
|
const icon = navIcons2[item.to];
|
|
2871
2912
|
return /* @__PURE__ */ jsxs(
|
|
2872
2913
|
"button",
|
|
2873
2914
|
{
|
|
2874
2915
|
onClick: () => handleClick(item.to),
|
|
2916
|
+
"aria-label": menuAriaLabel(item),
|
|
2875
2917
|
className: "w-full flex items-center gap-3 px-4 py-3 active:bg-gray-100 border-b border-gray-100 text-left",
|
|
2876
2918
|
children: [
|
|
2877
2919
|
/* @__PURE__ */ jsx("span", { className: "h-8 w-8 rounded-lg bg-gray-100 flex items-center justify-center text-gray-600 shrink-0", children: icon && isValidElement(icon) ? cloneElement(icon, { className: "h-5 w-5" }) : null }),
|
|
2878
2920
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
2879
|
-
/* @__PURE__ */ jsx(
|
|
2921
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: item, className: "block truncate text-sm font-medium text-gray-900" }),
|
|
2880
2922
|
sectionLabel && /* @__PURE__ */ jsx("div", { className: "text-[11px] text-gray-500 truncate", children: sectionLabel })
|
|
2881
2923
|
] })
|
|
2882
2924
|
]
|
|
@@ -2921,12 +2963,12 @@ function StartMenu({
|
|
|
2921
2963
|
const posStyle = taskbarPosition === "top" ? { top: taskbarH + taskbarGap, left: 8 } : taskbarPosition === "left" ? { top: 8, left: taskbarW + taskbarGap } : taskbarPosition === "right" ? { top: 8, right: taskbarW + taskbarGap } : { bottom: taskbarH + taskbarGap, left: 8 };
|
|
2922
2964
|
const iconEl = (path) => {
|
|
2923
2965
|
const icon = navIcons2[path];
|
|
2924
|
-
if (icon && isValidElement(icon)) return cloneElement(icon, { className: "h-4 w-4" });
|
|
2966
|
+
if (icon && isValidElement(icon)) return cloneElement(icon, { className: "h-4 w-4 shrink-0" });
|
|
2925
2967
|
return null;
|
|
2926
2968
|
};
|
|
2927
2969
|
const secIcon = (label) => {
|
|
2928
2970
|
const icon = sectionIcons2[label];
|
|
2929
|
-
if (icon && isValidElement(icon)) return cloneElement(icon, { className: "h-4 w-4" });
|
|
2971
|
+
if (icon && isValidElement(icon)) return cloneElement(icon, { className: "h-4 w-4 shrink-0" });
|
|
2930
2972
|
return null;
|
|
2931
2973
|
};
|
|
2932
2974
|
const hoveredSection = openPath.length > 0 ? openPath[0].key : null;
|
|
@@ -2942,7 +2984,8 @@ function StartMenu({
|
|
|
2942
2984
|
};
|
|
2943
2985
|
const sizeConfig = sizeConfigByDensity[density][size];
|
|
2944
2986
|
const menuGlass = glassStyle();
|
|
2945
|
-
const itemCls = `w-full flex items-center gap-2 rounded-lg ${sizeConfig.px} ${sizeConfig.py} ${sizeConfig.text}`;
|
|
2987
|
+
const itemCls = `w-full min-w-0 overflow-hidden whitespace-nowrap flex items-center gap-2 rounded-lg ${sizeConfig.px} ${sizeConfig.py} ${sizeConfig.text}`;
|
|
2988
|
+
const itemLabelCls = "min-w-0 flex-1 truncate text-left";
|
|
2946
2989
|
const viewportH = typeof window !== "undefined" ? window.innerHeight : 800;
|
|
2947
2990
|
const viewportW = typeof window !== "undefined" ? window.innerWidth : 1280;
|
|
2948
2991
|
const minTop = (taskbarPosition === "top" ? taskbarH : 0) + 8;
|
|
@@ -2969,29 +3012,43 @@ function StartMenu({
|
|
|
2969
3012
|
cancelClose();
|
|
2970
3013
|
closeTimer.current = setTimeout(() => setOpenPath((prev) => closeMenuBelow(prev, depth)), CLOSE_DELAY);
|
|
2971
3014
|
};
|
|
2972
|
-
const chevron = /* @__PURE__ */ jsx("svg", { className: "h-3.5 w-3.5 ml-auto text-gray-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 4.5l7.5 7.5-7.5 7.5" }) });
|
|
3015
|
+
const chevron = /* @__PURE__ */ jsx("svg", { className: "h-3.5 w-3.5 shrink-0 ml-auto text-gray-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 4.5l7.5 7.5-7.5 7.5" }) });
|
|
2973
3016
|
const renderSection = (section, isErp) => {
|
|
2974
3017
|
if (!navVisible(section, hasAnyPerm)) return null;
|
|
2975
3018
|
const items = getVisibleItems(section);
|
|
2976
3019
|
if (items.length === 0) return null;
|
|
2977
3020
|
const isHovered = hoveredSection === section.label;
|
|
2978
3021
|
return /* @__PURE__ */ jsxs("div", { onMouseEnter: (e) => openSubmenu(0, section.label, e), children: [
|
|
2979
|
-
/* @__PURE__ */ jsxs(
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
3022
|
+
/* @__PURE__ */ jsxs(
|
|
3023
|
+
"button",
|
|
3024
|
+
{
|
|
3025
|
+
"aria-label": menuAriaLabel(section),
|
|
3026
|
+
className: `${itemCls} transition-colors ${isHovered ? "bg-blue-50 text-blue-700" : "text-gray-700 hover:bg-blue-50 hover:text-blue-700"}`,
|
|
3027
|
+
children: [
|
|
3028
|
+
secIcon(section.label),
|
|
3029
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: section, className: `${itemLabelCls} ${isErp ? "font-medium" : ""}` }),
|
|
3030
|
+
chevron
|
|
3031
|
+
]
|
|
3032
|
+
}
|
|
3033
|
+
),
|
|
2984
3034
|
section.dividerAfter && /* @__PURE__ */ jsx("div", { className: "border-t border-white/20 my-1.5 mx-2" })
|
|
2985
3035
|
] }, section.label);
|
|
2986
3036
|
};
|
|
2987
3037
|
const renderVirtualSection = (v) => {
|
|
2988
3038
|
if (v.items.length === 0) return null;
|
|
2989
3039
|
const isHovered = hoveredSection === v.label;
|
|
2990
|
-
return /* @__PURE__ */ jsx("div", { onMouseEnter: (e) => openSubmenu(0, v.label, e), children: /* @__PURE__ */ jsxs(
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
3040
|
+
return /* @__PURE__ */ jsx("div", { onMouseEnter: (e) => openSubmenu(0, v.label, e), children: /* @__PURE__ */ jsxs(
|
|
3041
|
+
"button",
|
|
3042
|
+
{
|
|
3043
|
+
"aria-label": menuAriaLabel(v),
|
|
3044
|
+
className: `${itemCls} transition-colors ${isHovered ? "bg-blue-50 text-blue-700" : "text-gray-700 hover:bg-blue-50 hover:text-blue-700"}`,
|
|
3045
|
+
children: [
|
|
3046
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0", children: v.icon }),
|
|
3047
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: v, className: itemLabelCls }),
|
|
3048
|
+
chevron
|
|
3049
|
+
]
|
|
3050
|
+
}
|
|
3051
|
+
) }, v.label);
|
|
2995
3052
|
};
|
|
2996
3053
|
return (
|
|
2997
3054
|
/* z-[1100]: sit above the entire window stack — normal windows climb to
|
|
@@ -3049,30 +3106,32 @@ function StartMenu({
|
|
|
3049
3106
|
] })
|
|
3050
3107
|
}
|
|
3051
3108
|
),
|
|
3052
|
-
search.length >= 2 ? /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden
|
|
3109
|
+
search.length >= 2 ? /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden px-1 pb-2 max-h-[400px]", children: searchResults.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-400 text-center py-4", children: "No results" }) : searchResults.map((r, i) => /* @__PURE__ */ jsxs(
|
|
3053
3110
|
"button",
|
|
3054
3111
|
{
|
|
3055
3112
|
onClick: () => handleClick(r.to),
|
|
3056
3113
|
onMouseEnter: () => setSearchIdx(i),
|
|
3114
|
+
"aria-label": menuAriaLabel(r),
|
|
3057
3115
|
className: `${itemCls} transition-colors ${i === searchIdx ? "bg-blue-50 text-blue-700" : "text-gray-700 hover:bg-blue-50 hover:text-blue-700"}`,
|
|
3058
3116
|
children: [
|
|
3059
3117
|
iconEl(r.to),
|
|
3060
|
-
/* @__PURE__ */ jsx(
|
|
3061
|
-
r.section && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-gray-400 ml-auto", children: r.section })
|
|
3118
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: r, className: itemLabelCls }),
|
|
3119
|
+
r.section && /* @__PURE__ */ jsx("span", { className: "max-w-[40%] shrink-0 truncate text-[10px] text-gray-400 ml-auto", children: r.section })
|
|
3062
3120
|
]
|
|
3063
3121
|
},
|
|
3064
3122
|
i
|
|
3065
|
-
)) }) : /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto overflow-x-hidden
|
|
3123
|
+
)) }) : /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto overflow-x-hidden px-1 pb-1 flex flex-col", children: [
|
|
3066
3124
|
isVertical && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3067
3125
|
footerItems.map((item) => /* @__PURE__ */ jsxs(
|
|
3068
3126
|
"button",
|
|
3069
3127
|
{
|
|
3070
3128
|
onClick: () => handleClick(item.to),
|
|
3071
3129
|
onMouseEnter: () => scheduleClose(0),
|
|
3130
|
+
"aria-label": menuAriaLabel(item),
|
|
3072
3131
|
className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
|
|
3073
3132
|
children: [
|
|
3074
3133
|
iconEl(item.to),
|
|
3075
|
-
/* @__PURE__ */ jsx(
|
|
3134
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: item, className: itemLabelCls })
|
|
3076
3135
|
]
|
|
3077
3136
|
},
|
|
3078
3137
|
item.to
|
|
@@ -3086,10 +3145,11 @@ function StartMenu({
|
|
|
3086
3145
|
"button",
|
|
3087
3146
|
{
|
|
3088
3147
|
onClick: () => handleClick(item.to),
|
|
3148
|
+
"aria-label": menuAriaLabel(item),
|
|
3089
3149
|
className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
|
|
3090
3150
|
children: [
|
|
3091
3151
|
iconEl(item.to),
|
|
3092
|
-
/* @__PURE__ */ jsx(
|
|
3152
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: item, className: itemLabelCls })
|
|
3093
3153
|
]
|
|
3094
3154
|
}
|
|
3095
3155
|
),
|
|
@@ -3104,10 +3164,11 @@ function StartMenu({
|
|
|
3104
3164
|
"button",
|
|
3105
3165
|
{
|
|
3106
3166
|
onClick: () => handleClick(item.to),
|
|
3167
|
+
"aria-label": menuAriaLabel(item),
|
|
3107
3168
|
className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
|
|
3108
3169
|
children: [
|
|
3109
3170
|
iconEl(item.to),
|
|
3110
|
-
/* @__PURE__ */ jsx(
|
|
3171
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: item, className: itemLabelCls })
|
|
3111
3172
|
]
|
|
3112
3173
|
}
|
|
3113
3174
|
),
|
|
@@ -3124,10 +3185,11 @@ function StartMenu({
|
|
|
3124
3185
|
{
|
|
3125
3186
|
onClick: () => handleClick(item.to),
|
|
3126
3187
|
onMouseEnter: () => scheduleClose(0),
|
|
3188
|
+
"aria-label": menuAriaLabel(item),
|
|
3127
3189
|
className: `${itemCls} text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors`,
|
|
3128
3190
|
children: [
|
|
3129
3191
|
iconEl(item.to),
|
|
3130
|
-
/* @__PURE__ */ jsx(
|
|
3192
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: item, className: itemLabelCls })
|
|
3131
3193
|
]
|
|
3132
3194
|
},
|
|
3133
3195
|
item.to
|
|
@@ -3174,7 +3236,7 @@ function StartMenu({
|
|
|
3174
3236
|
style: menuGlass,
|
|
3175
3237
|
onMouseEnter: () => scheduleClose(i + 1),
|
|
3176
3238
|
onMouseLeave: () => scheduleClose(i),
|
|
3177
|
-
children: /* @__PURE__ */ jsx("div", { className: "py-1 px-1 overflow-y-auto overflow-x-hidden
|
|
3239
|
+
children: /* @__PURE__ */ jsx("div", { className: "py-1 px-1 overflow-y-auto overflow-x-hidden overscroll-contain", style: { maxHeight: availH }, children: items.map((item) => {
|
|
3178
3240
|
const kids = submenuItems(item);
|
|
3179
3241
|
const isOpen = openPath[i + 1]?.key === item.to;
|
|
3180
3242
|
return /* @__PURE__ */ jsxs(
|
|
@@ -3186,10 +3248,11 @@ function StartMenu({
|
|
|
3186
3248
|
"button",
|
|
3187
3249
|
{
|
|
3188
3250
|
onClick: kids.length > 0 ? (e) => openSubmenu(i + 1, item.to, e) : () => handleClick(item.to),
|
|
3251
|
+
"aria-label": menuAriaLabel(item),
|
|
3189
3252
|
className: `${itemCls} transition-colors ${isOpen ? "bg-blue-50 text-blue-700" : "text-gray-700 hover:bg-blue-50 hover:text-blue-700"}`,
|
|
3190
3253
|
children: [
|
|
3191
3254
|
iconEl(item.to),
|
|
3192
|
-
/* @__PURE__ */ jsx(
|
|
3255
|
+
/* @__PURE__ */ jsx(MenuLabel, { entry: item, className: itemLabelCls }),
|
|
3193
3256
|
kids.length > 0 && chevron
|
|
3194
3257
|
]
|
|
3195
3258
|
}
|
|
@@ -3215,6 +3278,9 @@ function StartMenu({
|
|
|
3215
3278
|
function MobileAppLanding({
|
|
3216
3279
|
productName,
|
|
3217
3280
|
productIcon,
|
|
3281
|
+
adaptiveLogo = false,
|
|
3282
|
+
logoHasAlpha = null,
|
|
3283
|
+
logoIsLight = null,
|
|
3218
3284
|
config,
|
|
3219
3285
|
wallpaperStyle
|
|
3220
3286
|
}) {
|
|
@@ -3233,7 +3299,20 @@ function MobileAppLanding({
|
|
|
3233
3299
|
className: "w-full max-w-sm rounded-3xl p-8 flex flex-col items-center text-center",
|
|
3234
3300
|
style: glassStyle(),
|
|
3235
3301
|
children: [
|
|
3236
|
-
/* @__PURE__ */ jsx("div", { className: "h-20 w-20 rounded-2xl overflow-hidden bg-white/60 flex items-center justify-center shadow-sm mb-5", children: /* @__PURE__ */ jsx(
|
|
3302
|
+
/* @__PURE__ */ jsx("div", { className: "h-20 w-20 rounded-2xl overflow-hidden bg-white/60 flex items-center justify-center shadow-sm mb-5", children: /* @__PURE__ */ jsx(
|
|
3303
|
+
BrandMark,
|
|
3304
|
+
{
|
|
3305
|
+
src: productIcon,
|
|
3306
|
+
alt: "",
|
|
3307
|
+
slot: "compact",
|
|
3308
|
+
surface: "light",
|
|
3309
|
+
size: 56,
|
|
3310
|
+
adaptive: adaptiveLogo,
|
|
3311
|
+
hasAlpha: logoHasAlpha,
|
|
3312
|
+
isLight: logoIsLight,
|
|
3313
|
+
decorative: true
|
|
3314
|
+
}
|
|
3315
|
+
) }),
|
|
3237
3316
|
/* @__PURE__ */ jsx("h1", { className: "text-xl font-semibold text-gray-900 leading-snug", children: heading }),
|
|
3238
3317
|
/* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-gray-600 leading-relaxed", children: description }),
|
|
3239
3318
|
hasLink && /* @__PURE__ */ jsxs(
|
|
@@ -3254,7 +3333,7 @@ function MobileAppLanding({
|
|
|
3254
3333
|
}
|
|
3255
3334
|
);
|
|
3256
3335
|
}
|
|
3257
|
-
var Sidebar = lazy(() => import('./Sidebar-
|
|
3336
|
+
var Sidebar = lazy(() => import('./Sidebar-GFDPPC4X.js'));
|
|
3258
3337
|
function useFavorites(wallpapers) {
|
|
3259
3338
|
const { prefs, save } = useShellPrefs();
|
|
3260
3339
|
const favorites = prefs.favorite_pages || [];
|
|
@@ -3541,6 +3620,9 @@ function Layout({
|
|
|
3541
3620
|
const brandName = branding?.productName ?? productName;
|
|
3542
3621
|
const brandIcon = branding?.logo ?? productIcon;
|
|
3543
3622
|
const brandTagline = branding?.tagline;
|
|
3623
|
+
const brandAdaptive = branding?.adaptiveLogo ?? false;
|
|
3624
|
+
const brandHasAlpha = branding?.logoHasAlpha ?? null;
|
|
3625
|
+
const brandIsLight = branding?.logoIsLight ?? null;
|
|
3544
3626
|
const host = useDesktopHost();
|
|
3545
3627
|
const { user, logout, hasAnyPerm } = useAuth();
|
|
3546
3628
|
const { openPage, openEntity, openWindows } = useWindowManager();
|
|
@@ -3695,11 +3777,11 @@ function Layout({
|
|
|
3695
3777
|
}, [toggleFullscreen]);
|
|
3696
3778
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-screen", children: [
|
|
3697
3779
|
/* @__PURE__ */ jsx(SessionWindowRestore, {}),
|
|
3698
|
-
showStartup && /* @__PURE__ */ jsx(StartupAnimation, { onComplete: () => setShowStartup(false), ready: !!profile, productName: brandName, logo: brandIcon, subtitle: brandTagline }),
|
|
3780
|
+
showStartup && /* @__PURE__ */ jsx(StartupAnimation, { onComplete: () => setShowStartup(false), ready: !!profile, productName: brandName, logo: brandIcon, subtitle: brandTagline, adaptiveLogo: brandAdaptive, logoHasAlpha: brandHasAlpha, logoIsLight: brandIsLight }),
|
|
3699
3781
|
showLogout && /* @__PURE__ */ jsx(LogoutAnimation, { onComplete: () => {
|
|
3700
3782
|
sessionStorage.removeItem("erp_startup_shown");
|
|
3701
3783
|
logout();
|
|
3702
|
-
}, logo: brandIcon, subtitle: brandTagline }),
|
|
3784
|
+
}, logo: brandIcon, subtitle: brandTagline, adaptiveLogo: brandAdaptive, logoHasAlpha: brandHasAlpha, logoIsLight: brandIsLight }),
|
|
3703
3785
|
!sidebarMode && /* @__PURE__ */ jsx(
|
|
3704
3786
|
StartMenu,
|
|
3705
3787
|
{
|
|
@@ -3742,7 +3824,10 @@ function Layout({
|
|
|
3742
3824
|
sectionIcons: sectionIcons2,
|
|
3743
3825
|
categories,
|
|
3744
3826
|
productName: brandName,
|
|
3745
|
-
productIcon: brandIcon
|
|
3827
|
+
productIcon: brandIcon,
|
|
3828
|
+
adaptiveLogo: brandAdaptive,
|
|
3829
|
+
logoHasAlpha: brandHasAlpha,
|
|
3830
|
+
logoIsLight: brandIsLight
|
|
3746
3831
|
}
|
|
3747
3832
|
) }),
|
|
3748
3833
|
(() => {
|
|
@@ -3765,6 +3850,9 @@ function Layout({
|
|
|
3765
3850
|
{
|
|
3766
3851
|
productName: brandName,
|
|
3767
3852
|
productIcon: brandIcon,
|
|
3853
|
+
adaptiveLogo: brandAdaptive,
|
|
3854
|
+
logoHasAlpha: brandHasAlpha,
|
|
3855
|
+
logoIsLight: brandIsLight,
|
|
3768
3856
|
config: mobileApp,
|
|
3769
3857
|
wallpaperStyle
|
|
3770
3858
|
}
|
|
@@ -3850,7 +3938,21 @@ function Layout({
|
|
|
3850
3938
|
style: { background: "radial-gradient(circle 60px at var(--mx, 50%) var(--my, 50%), rgba(255,255,255,0.25) 0%, transparent 100%)" }
|
|
3851
3939
|
}
|
|
3852
3940
|
),
|
|
3853
|
-
brandIcon && /* @__PURE__ */ jsx(
|
|
3941
|
+
brandIcon && /* @__PURE__ */ jsx(
|
|
3942
|
+
BrandMark,
|
|
3943
|
+
{
|
|
3944
|
+
src: brandIcon,
|
|
3945
|
+
alt: "",
|
|
3946
|
+
slot: "compact",
|
|
3947
|
+
surface: "light",
|
|
3948
|
+
adaptive: brandAdaptive,
|
|
3949
|
+
hasAlpha: brandHasAlpha,
|
|
3950
|
+
isLight: brandIsLight,
|
|
3951
|
+
size: 14,
|
|
3952
|
+
decorative: true,
|
|
3953
|
+
className: "relative z-10 opacity-60"
|
|
3954
|
+
}
|
|
3955
|
+
),
|
|
3854
3956
|
/* @__PURE__ */ jsx("span", { className: "relative z-10 truncate", children: brandName })
|
|
3855
3957
|
]
|
|
3856
3958
|
}
|
|
@@ -3916,7 +4018,7 @@ function Layout({
|
|
|
3916
4018
|
GlobalSearch,
|
|
3917
4019
|
{
|
|
3918
4020
|
...search,
|
|
3919
|
-
onSelect: (result) => openEntity(result.entity_type, result.entity_id,
|
|
4021
|
+
onSelect: (result) => openEntity(result.entity_type, result.entity_id, void 0, result.label)
|
|
3920
4022
|
}
|
|
3921
4023
|
),
|
|
3922
4024
|
/* @__PURE__ */ jsx(ShortcutHelp, {})
|