react-os-shell 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Browser-TFQONJQX.js → Browser-ZNEYNG2T.js} +4 -4
- package/dist/{Browser-TFQONJQX.js.map → Browser-ZNEYNG2T.js.map} +1 -1
- package/dist/{Documents-Z4O2GRZT.js → Documents-JLFY2LT2.js} +3 -3
- package/dist/{Documents-Z4O2GRZT.js.map → Documents-JLFY2LT2.js.map} +1 -1
- package/dist/Files-PX52MFPM.js +12 -0
- package/dist/{Files-WAOETZWW.js.map → Files-PX52MFPM.js.map} +1 -1
- package/dist/{Notepad-LANT34EE.js → Notepad-XA45TQKF.js} +3 -3
- package/dist/{Notepad-LANT34EE.js.map → Notepad-XA45TQKF.js.map} +1 -1
- package/dist/Preview-V4D7KDJW.js +8 -0
- package/dist/{Preview-V7XEP6IS.js.map → Preview-V4D7KDJW.js.map} +1 -1
- package/dist/{Spreadsheet-H72MNLPY.js → Spreadsheet-DFOEXXRX.js} +4 -4
- package/dist/{Spreadsheet-H72MNLPY.js.map → Spreadsheet-DFOEXXRX.js.map} +1 -1
- package/dist/apps/index.d.ts +13 -14
- package/dist/apps/index.js +12 -12
- package/dist/{chunk-BP64T33A.js → chunk-4WUEFQWP.js} +3 -3
- package/dist/{chunk-BP64T33A.js.map → chunk-4WUEFQWP.js.map} +1 -1
- package/dist/{chunk-NPUPL2BV.js → chunk-F25NBUMJ.js} +3 -3
- package/dist/{chunk-NPUPL2BV.js.map → chunk-F25NBUMJ.js.map} +1 -1
- package/dist/{chunk-Q3URRVBM.js → chunk-GM3VN2NL.js} +4 -4
- package/dist/{chunk-Q3URRVBM.js.map → chunk-GM3VN2NL.js.map} +1 -1
- package/dist/{chunk-JOS6DJXX.js → chunk-WKJ4YVF5.js} +4 -4
- package/dist/{chunk-JOS6DJXX.js.map → chunk-WKJ4YVF5.js.map} +1 -1
- package/dist/{chunk-2KG5N3NF.js → chunk-WZIH7WZM.js} +3 -3
- package/dist/{chunk-2KG5N3NF.js.map → chunk-WZIH7WZM.js.map} +1 -1
- package/dist/{chunk-S4EUCOF4.js → chunk-XM647QLH.js} +3 -3
- package/dist/{chunk-S4EUCOF4.js.map → chunk-XM647QLH.js.map} +1 -1
- package/dist/index.d.ts +45 -46
- package/dist/index.js +45 -7
- package/dist/index.js.map +1 -1
- package/dist/{types-CTPtgkiG.d.ts → types-CXBKusuC.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/Files-WAOETZWW.js +0 -12
- package/dist/Preview-V7XEP6IS.js +0 -8
|
@@ -4,7 +4,7 @@ import { useState, useCallback, isValidElement, cloneElement } from 'react';
|
|
|
4
4
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
// src/version.ts
|
|
7
|
-
var VERSION = "3.
|
|
7
|
+
var VERSION = "3.3.0" ;
|
|
8
8
|
var APP_VERSION = VERSION;
|
|
9
9
|
var BUILTIN_APP_INFO = {
|
|
10
10
|
spreadsheet: {
|
|
@@ -77,5 +77,5 @@ function AboutApp({ app }) {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
export { APP_VERSION, AboutApp, BUILTIN_APP_INFO, VERSION };
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
//# sourceMappingURL=chunk-XM647QLH.js.map
|
|
81
|
+
//# sourceMappingURL=chunk-XM647QLH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/apps/_about.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/apps/_about.tsx"],"names":[],"mappings":"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","file":"chunk-XM647QLH.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","/**\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.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { W as WindowRegistry } from './types-
|
|
2
|
-
export { M as ModalRegistryEntry, P as PageRegistryEntry, a as WindowRegistryEntry, i as isEntityEntry, b as isPageEntry, s as setShellWindowRegistry } from './types-
|
|
1
|
+
import { W as WindowRegistry } from './types-CXBKusuC.js';
|
|
2
|
+
export { M as ModalRegistryEntry, P as PageRegistryEntry, a as WindowRegistryEntry, i as isEntityEntry, b as isPageEntry, s as setShellWindowRegistry } from './types-CXBKusuC.js';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import react__default, { ReactNode, Component, ErrorInfo, CSSProperties, Dispatch, SetStateAction, RefObject } from 'react';
|
|
5
|
-
import * as
|
|
6
|
-
import * as _tanstack_query_core from '@tanstack/query-core';
|
|
5
|
+
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
7
6
|
import { AxiosInstance } from 'axios';
|
|
8
7
|
|
|
9
8
|
/**
|
|
@@ -90,7 +89,7 @@ declare function useWindowMenuItem(label: string, onClick: () => void, icon?: Re
|
|
|
90
89
|
* than React Context, which has separate instances in each bundle). */
|
|
91
90
|
declare function WindowTitle({ title }: {
|
|
92
91
|
title: string;
|
|
93
|
-
}):
|
|
92
|
+
}): react.JSX.Element;
|
|
94
93
|
/** @deprecated Use <WindowTitle> instead — the hook variant doesn't work
|
|
95
94
|
* across bundle boundaries (apps barrel has its own ModalIdContext). */
|
|
96
95
|
declare function useWindowTitle(_title: string): void;
|
|
@@ -100,7 +99,7 @@ declare function useWindowTitle(_title: string): void;
|
|
|
100
99
|
*/
|
|
101
100
|
declare function CopyButton({ text }: {
|
|
102
101
|
text: string;
|
|
103
|
-
}):
|
|
102
|
+
}): react.JSX.Element;
|
|
104
103
|
/** Hook to check if the current modal is active (frontmost) */
|
|
105
104
|
declare function useModalActive(): boolean;
|
|
106
105
|
declare function ModalActions({ children, position }: {
|
|
@@ -115,7 +114,7 @@ declare function CancelButton({ onClick, children, className }: {
|
|
|
115
114
|
onClick: () => void;
|
|
116
115
|
children?: React.ReactNode;
|
|
117
116
|
className?: string;
|
|
118
|
-
}):
|
|
117
|
+
}): react.JSX.Element;
|
|
119
118
|
/**
|
|
120
119
|
* Seed an initial position for a window — applied only when no saved
|
|
121
120
|
* position already exists for the given key. Use this from the consumer
|
|
@@ -247,7 +246,7 @@ declare function Modal({ open, onClose, title, icon, copyText, size, dirty, onNe
|
|
|
247
246
|
declare function WindowCrashedFallback({ error, onReload }: {
|
|
248
247
|
error: Error;
|
|
249
248
|
onReload: () => void;
|
|
250
|
-
}):
|
|
249
|
+
}): react.JSX.Element;
|
|
251
250
|
interface WindowErrorBoundaryProps {
|
|
252
251
|
children: ReactNode;
|
|
253
252
|
/** Replaces the default inline {@link WindowCrashedFallback}. `reset`
|
|
@@ -274,7 +273,7 @@ declare class WindowErrorBoundary extends Component<WindowErrorBoundaryProps, {
|
|
|
274
273
|
};
|
|
275
274
|
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
276
275
|
reset: () => void;
|
|
277
|
-
render(): string | number | boolean | Iterable<ReactNode> |
|
|
276
|
+
render(): string | number | boolean | Iterable<ReactNode> | react.JSX.Element | null | undefined;
|
|
278
277
|
}
|
|
279
278
|
|
|
280
279
|
/**
|
|
@@ -296,7 +295,7 @@ interface PopupMenuProps {
|
|
|
296
295
|
portal?: boolean;
|
|
297
296
|
}
|
|
298
297
|
/** Container for a popup menu — auto-clamps to stay within viewport */
|
|
299
|
-
declare function PopupMenu({ children, style, className, onClose, minWidth, portal }: PopupMenuProps):
|
|
298
|
+
declare function PopupMenu({ children, style, className, onClose, minWidth, portal }: PopupMenuProps): react.JSX.Element;
|
|
300
299
|
/** A clickable menu item */
|
|
301
300
|
declare function PopupMenuItem({ onClick, children, className, danger, disabled }: {
|
|
302
301
|
onClick?: () => void;
|
|
@@ -304,13 +303,13 @@ declare function PopupMenuItem({ onClick, children, className, danger, disabled
|
|
|
304
303
|
className?: string;
|
|
305
304
|
danger?: boolean;
|
|
306
305
|
disabled?: boolean;
|
|
307
|
-
}):
|
|
306
|
+
}): react.JSX.Element;
|
|
308
307
|
/** A divider line between menu items */
|
|
309
|
-
declare function PopupMenuDivider():
|
|
308
|
+
declare function PopupMenuDivider(): react.JSX.Element;
|
|
310
309
|
/** A section header label */
|
|
311
310
|
declare function PopupMenuLabel({ children }: {
|
|
312
311
|
children: ReactNode;
|
|
313
|
-
}):
|
|
312
|
+
}): react.JSX.Element;
|
|
314
313
|
|
|
315
314
|
interface ConfirmOptions {
|
|
316
315
|
title?: string;
|
|
@@ -339,7 +338,7 @@ interface PromptOptions {
|
|
|
339
338
|
declare const prompt: (opts: PromptOptions | string) => Promise<string | null>;
|
|
340
339
|
declare function ConfirmProvider({ children }: {
|
|
341
340
|
children: React.ReactNode;
|
|
342
|
-
}):
|
|
341
|
+
}): react.JSX.Element;
|
|
343
342
|
|
|
344
343
|
interface SearchResult {
|
|
345
344
|
/** Category label, e.g. "Sales Order". */
|
|
@@ -365,9 +364,9 @@ interface SearchConfig {
|
|
|
365
364
|
}
|
|
366
365
|
interface GlobalSearchProps extends Partial<SearchConfig> {
|
|
367
366
|
}
|
|
368
|
-
declare function GlobalSearch({ providers, typeIcons, placeholder }?: GlobalSearchProps):
|
|
367
|
+
declare function GlobalSearch({ providers, typeIcons, placeholder }?: GlobalSearchProps): react.JSX.Element | null;
|
|
369
368
|
|
|
370
|
-
declare function ShortcutHelp():
|
|
369
|
+
declare function ShortcutHelp(): react.JSX.Element;
|
|
371
370
|
|
|
372
371
|
/**
|
|
373
372
|
* One help article. Generic shape — the consuming portal maps its own
|
|
@@ -412,13 +411,13 @@ interface HelpCenterProps {
|
|
|
412
411
|
* Search is client-side: a case-insensitive substring match over title, body
|
|
413
412
|
* and category label. While searching, matching groups auto-expand.
|
|
414
413
|
*/
|
|
415
|
-
declare function HelpCenter({ docs, loading, categoryOrder, canEdit, onNew, onEdit, renderBody, emptyMessage, }: HelpCenterProps):
|
|
414
|
+
declare function HelpCenter({ docs, loading, categoryOrder, canEdit, onNew, onEdit, renderBody, emptyMessage, }: HelpCenterProps): react.JSX.Element;
|
|
416
415
|
|
|
417
416
|
interface MarkdownProps {
|
|
418
417
|
children: string;
|
|
419
418
|
className?: string;
|
|
420
419
|
}
|
|
421
|
-
declare function Markdown({ children, className }: MarkdownProps):
|
|
420
|
+
declare function Markdown({ children, className }: MarkdownProps): react.JSX.Element;
|
|
422
421
|
|
|
423
422
|
declare const isMac: boolean;
|
|
424
423
|
/** Platform-aware modifier symbols */
|
|
@@ -507,7 +506,7 @@ interface EditableGridProps {
|
|
|
507
506
|
* - Multi-cell paste from spreadsheets (Ctrl+V)
|
|
508
507
|
* - Tab/Enter/Arrow keyboard navigation
|
|
509
508
|
*/
|
|
510
|
-
declare function EditableGrid({ columns, data, onChange, onColumnsChange, fixedRows, minRows, maxHeight, cellStyles, onFocusChange, onSelectionChange }: EditableGridProps):
|
|
509
|
+
declare function EditableGrid({ columns, data, onChange, onColumnsChange, fixedRows, minRows, maxHeight, cellStyles, onFocusChange, onSelectionChange }: EditableGridProps): react.JSX.Element;
|
|
511
510
|
|
|
512
511
|
/**
|
|
513
512
|
* Two-pane layout with a drag-to-resize sidebar (left or right).
|
|
@@ -550,7 +549,7 @@ interface SidebarLayoutProps {
|
|
|
550
549
|
/** Classes for the main content pane. Defaults to a white background. */
|
|
551
550
|
contentClassName?: string;
|
|
552
551
|
}
|
|
553
|
-
declare function SidebarLayout({ sidebar, children, side, storageKey, defaultWidth, minWidth, maxWidth, className, sidebarClassName, contentClassName, }: SidebarLayoutProps):
|
|
552
|
+
declare function SidebarLayout({ sidebar, children, side, storageKey, defaultWidth, minWidth, maxWidth, className, sidebarClassName, contentClassName, }: SidebarLayoutProps): react.JSX.Element;
|
|
554
553
|
|
|
555
554
|
interface SearchableOption {
|
|
556
555
|
value: string;
|
|
@@ -592,7 +591,7 @@ interface SearchableSelectProps {
|
|
|
592
591
|
* Hidden while the user is typing so the search text stays legible. */
|
|
593
592
|
rightAdornment?: ReactNode;
|
|
594
593
|
}
|
|
595
|
-
declare function SearchableSelect({ value, onChange, options, placeholder, emptyOptionLabel, className, disabled, id, allowFreeText, onSearchChange, rightAdornment, }: SearchableSelectProps):
|
|
594
|
+
declare function SearchableSelect({ value, onChange, options, placeholder, emptyOptionLabel, className, disabled, id, allowFreeText, onSearchChange, rightAdornment, }: SearchableSelectProps): react.JSX.Element;
|
|
596
595
|
|
|
597
596
|
/**
|
|
598
597
|
* Generic top navigation bar. A horizontal row of tab-style links with an
|
|
@@ -624,7 +623,7 @@ interface TopNavProps {
|
|
|
624
623
|
actions?: ReactNode;
|
|
625
624
|
className?: string;
|
|
626
625
|
}
|
|
627
|
-
declare function TopNav({ items, activeKey, onSelect, brand, actions, className }: TopNavProps):
|
|
626
|
+
declare function TopNav({ items, activeKey, onSelect, brand, actions, className }: TopNavProps): react.JSX.Element;
|
|
628
627
|
|
|
629
628
|
/**
|
|
630
629
|
* Generic breadcrumb trail. Self-contained and styled with the same Tailwind
|
|
@@ -653,7 +652,7 @@ interface BreadcrumbsProps {
|
|
|
653
652
|
maxItems?: number;
|
|
654
653
|
className?: string;
|
|
655
654
|
}
|
|
656
|
-
declare function Breadcrumbs({ items, separator, maxItems, className }: BreadcrumbsProps):
|
|
655
|
+
declare function Breadcrumbs({ items, separator, maxItems, className }: BreadcrumbsProps): react.JSX.Element | null;
|
|
657
656
|
|
|
658
657
|
/** Generic notification shape consumed by the shell. Consumer-specific
|
|
659
658
|
* fields live on `extra` (or just on additional properties — TS structural
|
|
@@ -693,17 +692,17 @@ interface NotificationsConfig {
|
|
|
693
692
|
interface NotificationBellProps extends NotificationsConfig {
|
|
694
693
|
popDirection?: 'left' | 'right';
|
|
695
694
|
}
|
|
696
|
-
declare function NotificationBell({ useUnreadCount, list, markRead, markAllRead, onItemClick, onViewAll, popDirection, }: NotificationBellProps):
|
|
695
|
+
declare function NotificationBell({ useUnreadCount, list, markRead, markAllRead, onItemClick, onViewAll, popDirection, }: NotificationBellProps): react.JSX.Element;
|
|
697
696
|
|
|
698
697
|
type SemanticGroup = 'success' | 'active' | 'queued' | 'info' | 'pending' | 'warning' | 'danger' | 'draft' | 'neutral';
|
|
699
698
|
declare function StatusBadgeProvider({ groups, children, }: {
|
|
700
699
|
groups: Record<string, SemanticGroup>;
|
|
701
700
|
children: ReactNode;
|
|
702
|
-
}):
|
|
701
|
+
}): react.JSX.Element;
|
|
703
702
|
interface StatusBadgeProps {
|
|
704
703
|
status: string;
|
|
705
704
|
}
|
|
706
|
-
declare function StatusBadge({ status }: StatusBadgeProps):
|
|
705
|
+
declare function StatusBadge({ status }: StatusBadgeProps): react.JSX.Element;
|
|
707
706
|
|
|
708
707
|
/**
|
|
709
708
|
* System-tray badge shown only when the app is served from a developer's own
|
|
@@ -711,7 +710,7 @@ declare function StatusBadge({ status }: StatusBadgeProps): react_jsx_runtime.JS
|
|
|
711
710
|
* slot — it renders nothing off-localhost, so it's safe to leave wired on every
|
|
712
711
|
* build. Visibility is gated on the runtime hostname; see utils/env.ts.
|
|
713
712
|
*/
|
|
714
|
-
declare function DevIndicator():
|
|
713
|
+
declare function DevIndicator(): react.JSX.Element | null;
|
|
715
714
|
|
|
716
715
|
/**
|
|
717
716
|
* Dev-environment detection + browser chrome.
|
|
@@ -790,7 +789,7 @@ declare function DocFavStar({ entityType, entityId, label }: {
|
|
|
790
789
|
entityType: string;
|
|
791
790
|
entityId: string;
|
|
792
791
|
label: string;
|
|
793
|
-
}):
|
|
792
|
+
}): react.JSX.Element;
|
|
794
793
|
/** Public, framework-free helper: route ('/orders', '/qc-reports', …)
|
|
795
794
|
* of the window the user is currently focused on. Returns undefined
|
|
796
795
|
* when no app window is active (start menu / dashboard with nothing
|
|
@@ -800,7 +799,7 @@ declare function DocFavStar({ entityType, entityId, label }: {
|
|
|
800
799
|
declare function getActiveWindowRoute(): string | undefined;
|
|
801
800
|
declare function WindowManagerProvider({ children }: {
|
|
802
801
|
children: ReactNode;
|
|
803
|
-
}):
|
|
802
|
+
}): react.JSX.Element;
|
|
804
803
|
|
|
805
804
|
/**
|
|
806
805
|
* INTERNAL stub — Desktop's About modal references the consumer-side
|
|
@@ -893,11 +892,11 @@ interface DesktopHostConfig {
|
|
|
893
892
|
declare function DesktopHostProvider({ value, children }: {
|
|
894
893
|
value: DesktopHostConfig;
|
|
895
894
|
children: ReactNode;
|
|
896
|
-
}):
|
|
895
|
+
}): react.JSX.Element;
|
|
897
896
|
declare function useDesktopHost(): DesktopHostConfig;
|
|
898
897
|
declare function Desktop({ profile }: {
|
|
899
898
|
profile: any;
|
|
900
|
-
}):
|
|
899
|
+
}): react.JSX.Element;
|
|
901
900
|
|
|
902
901
|
interface LayoutProps {
|
|
903
902
|
/** Brand label rendered on the start-menu button. */
|
|
@@ -946,7 +945,7 @@ interface ClockCalendarConfig {
|
|
|
946
945
|
close: () => void;
|
|
947
946
|
}) => ReactNode;
|
|
948
947
|
}
|
|
949
|
-
declare function Layout({ productName, productIcon, wallpapers, navSections, navIcons, sectionIcons, categories, notifications, search, taskbarTrayLeft, clockCalendar, }?: LayoutProps):
|
|
948
|
+
declare function Layout({ productName, productIcon, wallpapers, navSections, navIcons, sectionIcons, categories, notifications, search, taskbarTrayLeft, clockCalendar, }?: LayoutProps): react.JSX.Element;
|
|
950
949
|
|
|
951
950
|
interface StartMenuProps {
|
|
952
951
|
open: boolean;
|
|
@@ -973,7 +972,7 @@ interface StartMenuProps {
|
|
|
973
972
|
/** Section grouping + virtual flyouts (Utilities-style trays). */
|
|
974
973
|
categories?: StartMenuCategories;
|
|
975
974
|
}
|
|
976
|
-
declare function StartMenu({ open, onClose, openPage, profile, user, onLogout, taskbarPosition, taskbarH, taskbarW, size, navSections, navIcons, sectionIcons, categories, }: StartMenuProps):
|
|
975
|
+
declare function StartMenu({ open, onClose, openPage, profile, user, onLogout, taskbarPosition, taskbarH, taskbarW, size, navSections, navIcons, sectionIcons, categories, }: StartMenuProps): react.JSX.Element | null;
|
|
977
976
|
|
|
978
977
|
/**
|
|
979
978
|
* Widget gallery — the "manage widgets on the desktop" surface.
|
|
@@ -993,7 +992,7 @@ declare function StartMenu({ open, onClose, openPage, profile, user, onLogout, t
|
|
|
993
992
|
declare function WidgetManager({ open, onClose }: {
|
|
994
993
|
open: boolean;
|
|
995
994
|
onClose: () => void;
|
|
996
|
-
}):
|
|
995
|
+
}): react.JSX.Element | null;
|
|
997
996
|
|
|
998
997
|
/** Sections that can be omitted from the inline Customization page when the
|
|
999
998
|
* consumer renders them elsewhere (e.g. as separate entries in SystemPreferences). */
|
|
@@ -1007,7 +1006,7 @@ interface CustomizationProps {
|
|
|
1007
1006
|
/** Render only one logical group of settings. Omit to render everything. */
|
|
1008
1007
|
section?: CustomizationSection;
|
|
1009
1008
|
}
|
|
1010
|
-
declare function Customization({ omit, section }?: CustomizationProps):
|
|
1009
|
+
declare function Customization({ omit, section }?: CustomizationProps): react.JSX.Element;
|
|
1011
1010
|
|
|
1012
1011
|
/**
|
|
1013
1012
|
* Standalone Behavior settings panel — window position, double-click,
|
|
@@ -1017,7 +1016,7 @@ declare function Customization({ omit, section }?: CustomizationProps): react_js
|
|
|
1017
1016
|
* Reads/writes shell prefs via `useShellPrefs()`. Suitable for use as a
|
|
1018
1017
|
* section in `SystemPreferences` or rendered standalone.
|
|
1019
1018
|
*/
|
|
1020
|
-
declare function BehaviorPanel():
|
|
1019
|
+
declare function BehaviorPanel(): react.JSX.Element;
|
|
1021
1020
|
|
|
1022
1021
|
/**
|
|
1023
1022
|
* Standalone Sounds settings panel — sound effects toggle + per-event
|
|
@@ -1026,7 +1025,7 @@ declare function BehaviorPanel(): react_jsx_runtime.JSX.Element;
|
|
|
1026
1025
|
* picked. Suitable as a section in `SystemPreferences` or rendered
|
|
1027
1026
|
* standalone.
|
|
1028
1027
|
*/
|
|
1029
|
-
declare function SoundsPanel():
|
|
1028
|
+
declare function SoundsPanel(): react.JSX.Element;
|
|
1030
1029
|
|
|
1031
1030
|
/** One section in the SystemPreferences sidebar. */
|
|
1032
1031
|
interface SystemPreferencesSection {
|
|
@@ -1073,7 +1072,7 @@ interface SystemPreferencesProps {
|
|
|
1073
1072
|
* ]} />
|
|
1074
1073
|
* ```
|
|
1075
1074
|
*/
|
|
1076
|
-
declare function SystemPreferences({ sections, defaultSelected, className, }: SystemPreferencesProps):
|
|
1075
|
+
declare function SystemPreferences({ sections, defaultSelected, className, }: SystemPreferencesProps): react.JSX.Element;
|
|
1077
1076
|
|
|
1078
1077
|
interface ImageAnnotatorHandle {
|
|
1079
1078
|
copy: () => Promise<void>;
|
|
@@ -1158,7 +1157,7 @@ interface EntityListProps<T> {
|
|
|
1158
1157
|
* emptyState={<EmptyState message="No suppliers yet." />}
|
|
1159
1158
|
* />
|
|
1160
1159
|
*/
|
|
1161
|
-
declare function EntityList<T>(props: EntityListProps<T>):
|
|
1160
|
+
declare function EntityList<T>(props: EntityListProps<T>): react.JSX.Element;
|
|
1162
1161
|
|
|
1163
1162
|
/**
|
|
1164
1163
|
* Generic, drag-and-drop Kanban board. Self-contained (native HTML5 DnD, no
|
|
@@ -1220,7 +1219,7 @@ interface KanbanProps<T> {
|
|
|
1220
1219
|
/** Label for the per-column add button. */
|
|
1221
1220
|
addItemText?: string;
|
|
1222
1221
|
}
|
|
1223
|
-
declare function Kanban<T>({ items, columns, columnOf, getId, onMove, renderCard, onCardClick, sortInColumn, isLoading, loadingText, emptyState, columnEmptyText, onAddItem, addItemText, }: KanbanProps<T>):
|
|
1222
|
+
declare function Kanban<T>({ items, columns, columnOf, getId, onMove, renderCard, onCardClick, sortInColumn, isLoading, loadingText, emptyState, columnEmptyText, onAddItem, addItemText, }: KanbanProps<T>): react.JSX.Element;
|
|
1224
1223
|
|
|
1225
1224
|
interface PaginatedResponse<T> {
|
|
1226
1225
|
count: number;
|
|
@@ -1269,7 +1268,7 @@ interface ResizableTableProps {
|
|
|
1269
1268
|
* - per-user persistence (via the shell-registered apiClient)
|
|
1270
1269
|
* - mobile-aware selection mode toggle
|
|
1271
1270
|
*/
|
|
1272
|
-
declare function ResizableTable({ tableId, columns, sort, onSort, footer, afterBody, saveDefaultPerms, children, }: ResizableTableProps):
|
|
1271
|
+
declare function ResizableTable({ tableId, columns, sort, onSort, footer, afterBody, saveDefaultPerms, children, }: ResizableTableProps): react.JSX.Element;
|
|
1273
1272
|
|
|
1274
1273
|
interface ListFooterProps {
|
|
1275
1274
|
selectedCount: number;
|
|
@@ -1285,7 +1284,7 @@ interface ListFooterProps {
|
|
|
1285
1284
|
* "Y of Z records · Loading more..."
|
|
1286
1285
|
* "All N records loaded"
|
|
1287
1286
|
*/
|
|
1288
|
-
declare function ListFooter({ selectedCount, loadedCount, totalCount, label, isFetchingMore, extra, }: ListFooterProps):
|
|
1287
|
+
declare function ListFooter({ selectedCount, loadedCount, totalCount, label, isFetchingMore, extra, }: ListFooterProps): react.JSX.Element;
|
|
1289
1288
|
|
|
1290
1289
|
/**
|
|
1291
1290
|
* Keyboard + shift-click navigation for table rows.
|
|
@@ -1363,7 +1362,7 @@ declare function useInfiniteScroll<T>({ queryKey, fetchFn, extraParams, pageSize
|
|
|
1363
1362
|
isFetchingNextPage: boolean;
|
|
1364
1363
|
hasNextPage: boolean;
|
|
1365
1364
|
sentinelRef: react.RefObject<HTMLDivElement>;
|
|
1366
|
-
refetch: (options?:
|
|
1365
|
+
refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<_tanstack_react_query.InfiniteData<PaginatedResponse<T>, unknown>, Error>>;
|
|
1367
1366
|
};
|
|
1368
1367
|
|
|
1369
1368
|
/**
|
|
@@ -1390,7 +1389,7 @@ interface ShellAuth {
|
|
|
1390
1389
|
declare function ShellAuthProvider({ value, children }: {
|
|
1391
1390
|
value: ShellAuth;
|
|
1392
1391
|
children: ReactNode;
|
|
1393
|
-
}):
|
|
1392
|
+
}): react.JSX.Element;
|
|
1394
1393
|
declare function useShellAuth(): ShellAuth;
|
|
1395
1394
|
|
|
1396
1395
|
interface ShellPrefsAdapter {
|
|
@@ -1403,7 +1402,7 @@ interface ShellPrefsAdapter {
|
|
|
1403
1402
|
declare function ShellPrefsProvider({ value, children, }: {
|
|
1404
1403
|
value: ShellPrefsAdapter;
|
|
1405
1404
|
children: ReactNode;
|
|
1406
|
-
}):
|
|
1405
|
+
}): react.JSX.Element;
|
|
1407
1406
|
/** Default localStorage-backed adapter — useful when the consumer doesn't
|
|
1408
1407
|
* ship a backend. Pass the result into <ShellPrefsProvider value={…}>.
|
|
1409
1408
|
*
|
|
@@ -1420,7 +1419,7 @@ type EntityFetcher = (endpoint: string, id: string) => Promise<any>;
|
|
|
1420
1419
|
declare function ShellEntityFetcherProvider({ value, children, }: {
|
|
1421
1420
|
value: EntityFetcher;
|
|
1422
1421
|
children: ReactNode;
|
|
1423
|
-
}):
|
|
1422
|
+
}): react.JSX.Element;
|
|
1424
1423
|
/** Returns the consumer-supplied entity fetcher, or a stub that throws
|
|
1425
1424
|
* on call. Components that fetch entities call this hook eagerly so any
|
|
1426
1425
|
* misconfiguration surfaces synchronously rather than at click-time. */
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { subscribePomo, getPomoSnapshot } from './chunk-6VMTAVUD.js';
|
|
2
2
|
export { setShellTodoProvider } from './chunk-6VMTAVUD.js';
|
|
3
|
-
import { PREVIEW_OPENED_EVENT, publishDesktopFolders, requestFilesTrashView, FolderGlyph, openPreviewFile, requestFilesDesktopFolderView, FileIconTile, hashGradient } from './chunk-
|
|
4
|
-
export { Breadcrumbs } from './chunk-
|
|
3
|
+
import { PREVIEW_OPENED_EVENT, publishDesktopFolders, requestFilesTrashView, FolderGlyph, openPreviewFile, requestFilesDesktopFolderView, FileIconTile, hashGradient } from './chunk-GM3VN2NL.js';
|
|
4
|
+
export { Breadcrumbs } from './chunk-GM3VN2NL.js';
|
|
5
5
|
import { SidebarLayout } from './chunk-VGTEM5RZ.js';
|
|
6
6
|
export { SidebarLayout } from './chunk-VGTEM5RZ.js';
|
|
7
7
|
import { playNotification, playStartup, soundsEnabled, getSoundConfig, SOUND_PACK_KEYS, SOUND_PACKS, SOUND_TYPES, SOUND_TYPE_LABELS, setSoundForType, previewSound, setAllSounds, playLogout } from './chunk-D7PYW2QS.js';
|
|
8
|
-
export { ImageAnnotator_default as ImageAnnotator } from './chunk-
|
|
8
|
+
export { ImageAnnotator_default as ImageAnnotator } from './chunk-4WUEFQWP.js';
|
|
9
9
|
import { toast_default } from './chunk-VENYVK3L.js';
|
|
10
10
|
export { toast_default as toast } from './chunk-VENYVK3L.js';
|
|
11
|
-
export { EditableGrid } from './chunk-
|
|
11
|
+
export { EditableGrid } from './chunk-WZIH7WZM.js';
|
|
12
12
|
import { useAuth, useShellAuth } from './chunk-ADJ3CERD.js';
|
|
13
13
|
export { ShellAuthProvider, setShellAuthBridge, useShellAuth } from './chunk-ADJ3CERD.js';
|
|
14
|
-
import { APP_VERSION } from './chunk-
|
|
15
|
-
export { VERSION } from './chunk-
|
|
14
|
+
import { APP_VERSION } from './chunk-XM647QLH.js';
|
|
15
|
+
export { VERSION } from './chunk-XM647QLH.js';
|
|
16
16
|
import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, WINDOW_REGISTRY, isPageEntry, Modal, useShellPrefs, useIsMobile, ModalActions, useModalActive, client_default, LoadingSpinner, setWindowPosition, ThumbCard, activateModal } from './chunk-6OWYD4O6.js';
|
|
17
17
|
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-6OWYD4O6.js';
|
|
18
18
|
export { ConfirmProvider, confirm, confirmDestructive, prompt } from './chunk-UBN4IUDE.js';
|
|
@@ -1470,6 +1470,24 @@ function Desktop({ profile }) {
|
|
|
1470
1470
|
if (!dragging) return;
|
|
1471
1471
|
const entries = dragEntriesRef.current;
|
|
1472
1472
|
const isSingleItemDrag = entries.length === 1 && entries[0].type === "item";
|
|
1473
|
+
const draggedPageRoute = () => {
|
|
1474
|
+
if (!isSingleItemDrag) return null;
|
|
1475
|
+
const itm = desktopItems[entries[0].idx];
|
|
1476
|
+
return itm?.entityType === "page" ? itm.entityId : null;
|
|
1477
|
+
};
|
|
1478
|
+
const taskbarEl = () => document.querySelector("[data-taskbar-dropzone]");
|
|
1479
|
+
const pointOverTaskbar = (x, y) => {
|
|
1480
|
+
const tb = taskbarEl();
|
|
1481
|
+
if (!tb) return false;
|
|
1482
|
+
const r = tb.getBoundingClientRect();
|
|
1483
|
+
return x >= r.left && x <= r.right && y >= r.top && y <= r.bottom;
|
|
1484
|
+
};
|
|
1485
|
+
const setTaskbarDropHint = (on) => {
|
|
1486
|
+
const tb = taskbarEl();
|
|
1487
|
+
if (!tb) return;
|
|
1488
|
+
tb.style.outline = on ? "2px solid var(--accent-600, #7c3aed)" : "";
|
|
1489
|
+
tb.style.outlineOffset = on ? "-2px" : "";
|
|
1490
|
+
};
|
|
1473
1491
|
const move = (e) => {
|
|
1474
1492
|
const dx = e.clientX - dragging.startX;
|
|
1475
1493
|
const dy = e.clientY - dragging.startY;
|
|
@@ -1498,6 +1516,7 @@ function Desktop({ profile }) {
|
|
|
1498
1516
|
}
|
|
1499
1517
|
hoverFolderIdxRef.current = nextHover;
|
|
1500
1518
|
setHoverFolderIdx((prev) => prev === nextHover ? prev : nextHover);
|
|
1519
|
+
setTaskbarDropHint(draggedPageRoute() != null && pointOverTaskbar(e.clientX, e.clientY));
|
|
1501
1520
|
}
|
|
1502
1521
|
};
|
|
1503
1522
|
const up = (e) => {
|
|
@@ -1508,6 +1527,24 @@ function Desktop({ profile }) {
|
|
|
1508
1527
|
entry.el.style.zIndex = "";
|
|
1509
1528
|
entry.el.style.opacity = "";
|
|
1510
1529
|
}
|
|
1530
|
+
const pinRoute = draggedPageRoute();
|
|
1531
|
+
if (pinRoute && pointOverTaskbar(e.clientX, e.clientY)) {
|
|
1532
|
+
setTaskbarDropHint(false);
|
|
1533
|
+
for (const entry of entries) {
|
|
1534
|
+
if (!entry.el) continue;
|
|
1535
|
+
entry.el.style.left = "auto";
|
|
1536
|
+
entry.el.style.right = `${entry.origX}px`;
|
|
1537
|
+
entry.el.style.top = `${entry.origY}px`;
|
|
1538
|
+
}
|
|
1539
|
+
const pages = Array.isArray(shellPrefs.favorite_pages) ? shellPrefs.favorite_pages : [];
|
|
1540
|
+
if (!pages.includes(pinRoute)) saveShellPrefs({ favorite_pages: [...pages, pinRoute] });
|
|
1541
|
+
hoverFolderIdxRef.current = null;
|
|
1542
|
+
setHoverFolderIdx(null);
|
|
1543
|
+
setDragging(null);
|
|
1544
|
+
dragEntriesRef.current = [];
|
|
1545
|
+
return;
|
|
1546
|
+
}
|
|
1547
|
+
setTaskbarDropHint(false);
|
|
1511
1548
|
const liveHoverIdx = hoverFolderIdxRef.current;
|
|
1512
1549
|
const hoveredFolder = liveHoverIdx != null ? folders[liveHoverIdx] : null;
|
|
1513
1550
|
hoverFolderIdxRef.current = null;
|
|
@@ -1598,7 +1635,7 @@ function Desktop({ profile }) {
|
|
|
1598
1635
|
window.removeEventListener("pointermove", move);
|
|
1599
1636
|
window.removeEventListener("pointerup", up);
|
|
1600
1637
|
};
|
|
1601
|
-
}, [dragging, snapEnabled, favDocs, folders, desktopItems]);
|
|
1638
|
+
}, [dragging, snapEnabled, favDocs, folders, desktopItems, shellPrefs]);
|
|
1602
1639
|
const favDocsKey = JSON.stringify(favDocs.map((d) => `${d.entityId}:${d.x ?? ""}:${d.y ?? ""}:${d.folderId ?? ""}`));
|
|
1603
1640
|
const foldersKey = JSON.stringify(folders.map((f) => `${f.id}:${f.x ?? ""}:${f.y ?? ""}`));
|
|
1604
1641
|
useEffect(() => {
|
|
@@ -4408,6 +4445,7 @@ function Layout({
|
|
|
4408
4445
|
backgroundColor: `rgb(var(--taskbar-bg-rgb, 243 244 246) / ${taskbarOpacity})`,
|
|
4409
4446
|
...isVerticalTaskbar ? {} : { left: sidebarWidth }
|
|
4410
4447
|
},
|
|
4448
|
+
"data-taskbar-dropzone": true,
|
|
4411
4449
|
onContextMenu: (e) => {
|
|
4412
4450
|
e.preventDefault();
|
|
4413
4451
|
setTaskbarMenu({ x: e.clientX, y: e.clientY });
|