react-os-shell 0.1.15 → 0.1.17
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/Preview-5GRB2ADJ.js +4 -0
- package/dist/{Preview-Z7U7VV7N.js.map → Preview-5GRB2ADJ.js.map} +1 -1
- package/dist/apps/index.js +2 -2
- package/dist/{chunk-6HUAE6SB.js → chunk-KLAHLSYK.js} +3 -3
- package/dist/chunk-KLAHLSYK.js.map +1 -0
- package/dist/index.d.ts +15 -1
- package/dist/index.js +53 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Preview-Z7U7VV7N.js +0 -4
- package/dist/chunk-6HUAE6SB.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"Preview-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"Preview-5GRB2ADJ.js"}
|
package/dist/apps/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { setPdfPreview } from '../chunk-
|
|
1
|
+
export { setPdfPreview } from '../chunk-KLAHLSYK.js';
|
|
2
2
|
import '../chunk-WIJ45SYD.js';
|
|
3
3
|
import { lazy } from 'react';
|
|
4
4
|
|
|
@@ -17,7 +17,7 @@ var Minesweeper = lazy(() => import('../Minesweeper-CGOAQKR7.js'));
|
|
|
17
17
|
var Email = lazy(() => import('../Email-TD6OTHBH.js'));
|
|
18
18
|
var GeminiChat = lazy(() => import('../GeminiChat-BXLBJFT4.js'));
|
|
19
19
|
var Calendar = lazy(() => import('../Calendar-T2LRMLL4.js'));
|
|
20
|
-
var Preview = lazy(() => import('../Preview-
|
|
20
|
+
var Preview = lazy(() => import('../Preview-5GRB2ADJ.js'));
|
|
21
21
|
var utilityApps = {
|
|
22
22
|
"/calculator": { component: Calculator, label: "Calculator", size: "sm", allowPinOnTop: true, utility: true, widget: true, autoHeight: true, dimensions: [280, 420] },
|
|
23
23
|
"/spreadsheet": { component: Spreadsheet, label: "Spreadsheets", size: "2xl", compact: true, multiInstance: true },
|
|
@@ -4,7 +4,7 @@ import * as pdfjsLib from 'pdfjs-dist';
|
|
|
4
4
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
if (typeof window !== "undefined" && !pdfjsLib.GlobalWorkerOptions.workerSrc) {
|
|
7
|
-
pdfjsLib.GlobalWorkerOptions.workerSrc = `https://
|
|
7
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`;
|
|
8
8
|
}
|
|
9
9
|
var EVENT_NAME = "react-os-shell:pdf-preview";
|
|
10
10
|
var pendingData = null;
|
|
@@ -179,5 +179,5 @@ function PdfPanel({ url, filename, onDownload, onEmail }) {
|
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
export { Preview, setPdfPreview };
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
183
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-KLAHLSYK.js.map
|
|
183
|
+
//# sourceMappingURL=chunk-KLAHLSYK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/apps/Preview.tsx"],"names":[],"mappings":"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","file":"chunk-KLAHLSYK.js","sourcesContent":["/**\n * Preview — windowed PDF viewer app.\n *\n * Consumers stage a PDF via `setPdfPreview({ url, filename, ... })` and then\n * call `openPage('/preview')`. If the window is already open, it swaps to the\n * new PDF in-place via a custom event.\n */\nimport { useState, useEffect, useRef } from 'react';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport toast from '../shell/toast';\n\n// Default the worker to the matching unpkg build (mirrors the consumer's\n// installed npm version exactly). Consumers can override by setting\n// pdfjsLib.GlobalWorkerOptions.workerSrc themselves before opening the\n// Preview window.\nif (typeof window !== 'undefined' && !pdfjsLib.GlobalWorkerOptions.workerSrc) {\n pdfjsLib.GlobalWorkerOptions.workerSrc =\n `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`;\n}\n\nexport interface PdfPreviewData {\n /** Object URL or remote URL of the PDF. Blob URLs are revoked when the window unmounts. */\n url: string;\n /** Display name (and download filename). */\n filename: string;\n /** Optional download handler — replaces the built-in \"save URL as filename\" if supplied. */\n onDownload?: () => void;\n /** Optional email handler — only shown when supplied. */\n onEmail?: () => void;\n}\n\nconst EVENT_NAME = 'react-os-shell:pdf-preview';\n\nlet pendingData: PdfPreviewData | null = null;\n\n/** Stage a PDF for the next Preview window mount, or swap into an open one. */\nexport function setPdfPreview(data: PdfPreviewData) {\n pendingData = data;\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(EVENT_NAME, { detail: data }));\n }\n}\n\nexport default function Preview() {\n const [data, setData] = useState<PdfPreviewData | null>(() => {\n const d = pendingData;\n pendingData = null;\n return d;\n });\n\n // Swap to a new PDF if `setPdfPreview` is called while the window is open.\n useEffect(() => {\n const handler = (e: Event) => {\n const next = (e as CustomEvent<PdfPreviewData>).detail;\n setData(prev => {\n if (prev?.url && prev.url !== next.url && prev.url.startsWith('blob:')) {\n URL.revokeObjectURL(prev.url);\n }\n return next;\n });\n };\n window.addEventListener(EVENT_NAME, handler);\n return () => window.removeEventListener(EVENT_NAME, handler);\n }, []);\n\n // Revoke blob URL on unmount.\n useEffect(() => () => {\n if (data?.url?.startsWith('blob:')) URL.revokeObjectURL(data.url);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!data) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full text-gray-400 text-sm gap-2\">\n <svg className=\"h-10 w-10 text-gray-300\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\" /></svg>\n No PDF loaded\n </div>\n );\n }\n\n return <PdfPanel key={data.url} {...data} />;\n}\n\nfunction PdfPanel({ url, filename, onDownload, onEmail }: PdfPreviewData) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [pdf, setPdf] = useState<pdfjsLib.PDFDocumentProxy | null>(null);\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(0);\n const [scale, setScale] = useState(1.5);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n pdfjsLib.getDocument(url).promise.then(doc => {\n if (cancelled) return;\n setPdf(doc);\n setTotalPages(doc.numPages);\n setLoading(false);\n }).catch(() => {\n if (!cancelled) { toast.error('Failed to load PDF'); setLoading(false); }\n });\n return () => { cancelled = true; };\n }, [url]);\n\n useEffect(() => {\n if (!pdf || !containerRef.current) return;\n pdf.getPage(1).then(p => {\n const containerW = containerRef.current?.clientWidth || 800;\n const viewport = p.getViewport({ scale: 1 });\n const fitScale = (containerW - 40) / viewport.width;\n setScale(Math.min(Math.max(fitScale, 0.5), 3));\n });\n }, [pdf]);\n\n useEffect(() => {\n if (!pdf || !canvasRef.current) return;\n let cancelled = false;\n pdf.getPage(page).then(p => {\n if (cancelled || !canvasRef.current) return;\n const viewport = p.getViewport({ scale });\n const canvas = canvasRef.current;\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n const ctx = canvas.getContext('2d')!;\n p.render({ canvas, canvasContext: ctx, viewport }).promise.catch(() => {});\n });\n return () => { cancelled = true; };\n }, [pdf, page, scale]);\n\n const handlePrint = () => {\n if (!pdf) return;\n const win = window.open('', '_blank');\n if (!win) { toast.error('Allow popups to print'); return; }\n const promises: Promise<string>[] = [];\n for (let i = 1; i <= totalPages; i++) {\n promises.push(pdf.getPage(i).then(p => {\n const vp = p.getViewport({ scale: 2 });\n const c = document.createElement('canvas');\n c.width = vp.width; c.height = vp.height;\n return p.render({ canvas: c, canvasContext: c.getContext('2d')!, viewport: vp }).promise.then(() => c.toDataURL());\n }));\n }\n Promise.all(promises).then(images => {\n win.document.write(`<html><head><title>${filename}</title><style>@media print{body{margin:0}img{width:100%;page-break-after:always}}</style></head><body>`);\n win.document.write(images.map(src => `<img src=\"${src}\"/>`).join(''));\n win.document.write('</body></html>');\n win.document.close();\n setTimeout(() => { win.print(); win.close(); }, 300);\n });\n };\n\n const handleDefaultDownload = () => {\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n };\n\n const fitWidth = () => {\n if (!pdf || !containerRef.current) return;\n pdf.getPage(page).then(p => {\n const containerW = containerRef.current?.clientWidth || 800;\n const viewport = p.getViewport({ scale: 1 });\n setScale(Math.min(Math.max((containerW - 40) / viewport.width, 0.5), 3));\n });\n };\n\n const btn = 'px-2 py-1 rounded hover:bg-gray-200 transition-colors text-gray-600 flex items-center gap-1';\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"flex items-center justify-between px-3 py-1.5 border-b border-gray-200 bg-gray-50 shrink-0 text-xs\">\n <div className=\"flex items-center gap-1\">\n <button onClick={() => setPage(p => Math.max(1, p - 1))} disabled={page <= 1} className=\"px-2 py-1 rounded hover:bg-gray-200 disabled:opacity-30\">\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 19.5L8.25 12l7.5-7.5\" /></svg>\n </button>\n <span className=\"text-gray-600 font-medium tabular-nums\">{page} / {totalPages}</span>\n <button onClick={() => setPage(p => Math.min(totalPages, p + 1))} disabled={page >= totalPages} className=\"px-2 py-1 rounded hover:bg-gray-200 disabled:opacity-30\">\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8.25 4.5l7.5 7.5-7.5 7.5\" /></svg>\n </button>\n </div>\n\n <div className=\"flex items-center gap-1\">\n <button onClick={() => setScale(s => Math.max(0.3, Math.round((s - 0.25) * 100) / 100))} className={btn}>−</button>\n <span className=\"text-gray-500 w-12 text-center tabular-nums\">{Math.round(scale * 100)}%</span>\n <button onClick={() => setScale(s => Math.min(4, Math.round((s + 0.25) * 100) / 100))} className={btn}>+</button>\n <button onClick={fitWidth} className={btn}>Fit</button>\n </div>\n\n <div className=\"flex items-center gap-1\">\n <button onClick={handlePrint} className={btn}>\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6.72 13.829c-.24.03-.48.062-.72.096m.72-.096a42.415 42.415 0 0110.56 0m-10.56 0L6.34 18m10.94-4.171c.24.03.48.062.72.096m-.72-.096L17.66 18m0 0l.229 2.523a1.125 1.125 0 01-1.12 1.227H7.231c-.662 0-1.18-.568-1.12-1.227L6.34 18m11.318 0h1.091A2.25 2.25 0 0021 15.75V9.456c0-1.081-.768-2.015-1.837-2.175a48.055 48.055 0 00-1.913-.247M6.34 18H5.25A2.25 2.25 0 013 15.75V9.456c0-1.081.768-2.015 1.837-2.175a48.041 48.041 0 011.913-.247m10.5 0a48.536 48.536 0 00-10.5 0m10.5 0V3.375c0-.621-.504-1.125-1.125-1.125h-8.25c-.621 0-1.125.504-1.125 1.125v3.659M18 10.5h.008v.008H18V10.5zm-3 0h.008v.008H15V10.5z\" /></svg>\n Print\n </button>\n <button onClick={onDownload ?? handleDefaultDownload} className={btn}>\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3\" /></svg>\n Download\n </button>\n {onEmail && (\n <button onClick={onEmail} className={btn}>\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75\" /></svg>\n Email\n </button>\n )}\n </div>\n </div>\n\n <div ref={containerRef} className=\"flex-1 overflow-auto bg-gray-100 flex justify-center p-4\">\n {loading ? (\n <div className=\"flex items-center justify-center py-20 text-gray-400 text-sm\">Loading PDF...</div>\n ) : (\n <canvas ref={canvasRef} className=\"shadow-lg rounded\" />\n )}\n </div>\n </div>\n );\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -426,6 +426,18 @@ declare function WindowManagerProvider({ children }: {
|
|
|
426
426
|
children: ReactNode;
|
|
427
427
|
}): react_jsx_runtime.JSX.Element;
|
|
428
428
|
|
|
429
|
+
/**
|
|
430
|
+
* INTERNAL stub — Desktop's About modal references the consumer-side
|
|
431
|
+
* changelog. The package ships no built-in changelog; consumer wires their
|
|
432
|
+
* own through the eventual `branding` prop (TODO). Default = empty array
|
|
433
|
+
* keeps the import compiling.
|
|
434
|
+
*/
|
|
435
|
+
interface ChangelogEntry {
|
|
436
|
+
version: string;
|
|
437
|
+
date: string;
|
|
438
|
+
changes: string[];
|
|
439
|
+
}
|
|
440
|
+
|
|
429
441
|
interface DesktopItem {
|
|
430
442
|
entityType: string;
|
|
431
443
|
entityId: string;
|
|
@@ -460,6 +472,8 @@ interface DesktopHostConfig {
|
|
|
460
472
|
/** Version string shown on the desktop watermark and About dialog. Falls
|
|
461
473
|
* back to the react-os-shell package version if omitted. */
|
|
462
474
|
productVersion?: string;
|
|
475
|
+
/** Changelog rendered in the "What's New" dialog. Hidden when omitted. */
|
|
476
|
+
productChangelog?: ChangelogEntry[];
|
|
463
477
|
/** Copyright line in the About dialog footer. Hidden when omitted. */
|
|
464
478
|
productCopyright?: string;
|
|
465
479
|
/** Website URL in the About dialog footer. Hidden when omitted. */
|
|
@@ -650,4 +664,4 @@ declare function useNewHotkey(callback: () => void): void;
|
|
|
650
664
|
*/
|
|
651
665
|
declare function useEditHotkey(callback: (() => void) | null): void;
|
|
652
666
|
|
|
653
|
-
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, type BugReport, type BugReportConfig, BugReportConfigProvider, BugReportDetail, BugReportProvider, type BugReportSubmission, type BugReportSubmitPayload, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, CancelButton, ConfirmProvider, CopyButton, Customization, Desktop, type DesktopHostConfig, DesktopHostProvider, DocFavStar, ENTER, type EntityFetcher, GLASS_DIVIDER, GLASS_INPUT_BG, GlobalSearch, Layout, type LayoutProps, MOD, Modal, ModalActions, NotificationBell, type NotificationsConfig, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, SHIFT, type SearchConfig, type SearchProvider, type SearchResult, type SemanticGroup, type ShellAuth, ShellAuthProvider, ShellEntityFetcherProvider, type ShellNotification, type ShellPrefsAdapter, ShellPrefsProvider, ShortcutHelp, StartMenu, StatusBadge, StatusBadgeProvider, type StickyEntityRef, type StickyResolver, VERSION, WindowManagerProvider, WindowRegistry, WindowTitle, confirm, confirmDestructive, createWindowRegistry, formatDate, glassStyle, isMac, openBugReportDialog, reportBug, setShellApiClient, setShellAuthBridge, setShellNavIcons, toast, useBugReport, useClickOutside, useDesktopHost, useEditHotkey, useLocalStoragePrefs, useModalActive, useNewHotkey, useShellAuth, useShellEntityFetcher, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle };
|
|
667
|
+
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, type BugReport, type BugReportConfig, BugReportConfigProvider, BugReportDetail, BugReportProvider, type BugReportSubmission, type BugReportSubmitPayload, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, CancelButton, type ChangelogEntry, ConfirmProvider, CopyButton, Customization, Desktop, type DesktopHostConfig, DesktopHostProvider, DocFavStar, ENTER, type EntityFetcher, GLASS_DIVIDER, GLASS_INPUT_BG, GlobalSearch, Layout, type LayoutProps, MOD, Modal, ModalActions, NotificationBell, type NotificationsConfig, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, SHIFT, type SearchConfig, type SearchProvider, type SearchResult, type SemanticGroup, type ShellAuth, ShellAuthProvider, ShellEntityFetcherProvider, type ShellNotification, type ShellPrefsAdapter, ShellPrefsProvider, ShortcutHelp, StartMenu, StatusBadge, StatusBadgeProvider, type StickyEntityRef, type StickyResolver, VERSION, WindowManagerProvider, WindowRegistry, WindowTitle, confirm, confirmDestructive, createWindowRegistry, formatDate, glassStyle, isMac, openBugReportDialog, reportBug, setShellApiClient, setShellAuthBridge, setShellNavIcons, toast, useBugReport, useClickOutside, useDesktopHost, useEditHotkey, useLocalStoragePrefs, useModalActive, useNewHotkey, useShellAuth, useShellEntityFetcher, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle };
|
package/dist/index.js
CHANGED
|
@@ -643,7 +643,7 @@ function StatusBadge({ status }) {
|
|
|
643
643
|
}
|
|
644
644
|
|
|
645
645
|
// src/version.ts
|
|
646
|
-
var VERSION = "0.1.
|
|
646
|
+
var VERSION = "0.1.17" ;
|
|
647
647
|
var APP_VERSION = VERSION;
|
|
648
648
|
|
|
649
649
|
// src/changelog.ts
|
|
@@ -1034,6 +1034,8 @@ function Desktop({ profile }) {
|
|
|
1034
1034
|
const [editingStickyId, setEditingStickyId] = useState(null);
|
|
1035
1035
|
const [stickyDrag, setStickyDrag] = useState(null);
|
|
1036
1036
|
const [stickyResize, setStickyResize] = useState(null);
|
|
1037
|
+
const [hoverFolderIdx, setHoverFolderIdx] = useState(null);
|
|
1038
|
+
const hoverFolderIdxRef = useRef(null);
|
|
1037
1039
|
const saveDocs = useCallback((docs) => {
|
|
1038
1040
|
if (host.saveShortcuts) host.saveShortcuts(docs);
|
|
1039
1041
|
else saveShellPrefs({ favorite_documents: docs });
|
|
@@ -1095,6 +1097,7 @@ function Desktop({ profile }) {
|
|
|
1095
1097
|
useEffect(() => {
|
|
1096
1098
|
if (!dragging) return;
|
|
1097
1099
|
const entries = dragEntriesRef.current;
|
|
1100
|
+
const isSingleItemDrag = entries.length === 1 && entries[0].type === "item";
|
|
1098
1101
|
const move = (e) => {
|
|
1099
1102
|
const dx = e.clientX - dragging.startX;
|
|
1100
1103
|
const dy = e.clientY - dragging.startY;
|
|
@@ -1106,6 +1109,20 @@ function Desktop({ profile }) {
|
|
|
1106
1109
|
entry.el.style.zIndex = "100";
|
|
1107
1110
|
entry.el.style.opacity = "0.7";
|
|
1108
1111
|
}
|
|
1112
|
+
if (isSingleItemDrag) {
|
|
1113
|
+
const elsBelow = document.elementsFromPoint(e.clientX, e.clientY);
|
|
1114
|
+
let nextHover = null;
|
|
1115
|
+
for (const el of elsBelow) {
|
|
1116
|
+
const fk = el.closest?.('[data-desktop-icon^="folder-"]');
|
|
1117
|
+
if (fk) {
|
|
1118
|
+
const key = fk.getAttribute("data-desktop-icon");
|
|
1119
|
+
if (key) nextHover = parseInt(key.slice(7), 10);
|
|
1120
|
+
break;
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
hoverFolderIdxRef.current = nextHover;
|
|
1124
|
+
setHoverFolderIdx((prev) => prev === nextHover ? prev : nextHover);
|
|
1125
|
+
}
|
|
1109
1126
|
};
|
|
1110
1127
|
const up = (e) => {
|
|
1111
1128
|
const dx = e.clientX - dragging.startX;
|
|
@@ -1115,6 +1132,10 @@ function Desktop({ profile }) {
|
|
|
1115
1132
|
entry.el.style.zIndex = "";
|
|
1116
1133
|
entry.el.style.opacity = "";
|
|
1117
1134
|
}
|
|
1135
|
+
const liveHoverIdx = hoverFolderIdxRef.current;
|
|
1136
|
+
const hoveredFolder = liveHoverIdx != null ? folders[liveHoverIdx] : null;
|
|
1137
|
+
hoverFolderIdxRef.current = null;
|
|
1138
|
+
setHoverFolderIdx(null);
|
|
1118
1139
|
const computedPositions = entries.map((entry) => {
|
|
1119
1140
|
let finalRight = entry.origX - dx;
|
|
1120
1141
|
let finalTop = Math.max(0, entry.origY + dy);
|
|
@@ -1131,7 +1152,7 @@ function Desktop({ profile }) {
|
|
|
1131
1152
|
const updated = [...favDocs];
|
|
1132
1153
|
const positionsPatch = {};
|
|
1133
1154
|
const singleItem = itemMoves.length === 1 && entries.length === 1 ? itemMoves[0] : null;
|
|
1134
|
-
const droppedOnFolder = singleItem ? folders.find((f, fi) => {
|
|
1155
|
+
const droppedOnFolder = singleItem ? hoveredFolder ?? folders.find((f, fi) => {
|
|
1135
1156
|
const fp = getFolderPos(f, fi);
|
|
1136
1157
|
return Math.abs(singleItem.finalRight - fp.right) < 40 && Math.abs(singleItem.finalTop - fp.top) < 40;
|
|
1137
1158
|
}) : void 0;
|
|
@@ -1275,8 +1296,11 @@ function Desktop({ profile }) {
|
|
|
1275
1296
|
}, [contextMenu]);
|
|
1276
1297
|
const createFolder = () => {
|
|
1277
1298
|
const rect = containerRef.current?.getBoundingClientRect();
|
|
1278
|
-
const
|
|
1279
|
-
const
|
|
1299
|
+
const containerW = rect?.width ?? 0;
|
|
1300
|
+
const cursorLeft = contextMenu ? contextMenu.x - (rect?.left ?? 0) : containerW - 100;
|
|
1301
|
+
const cursorTop = contextMenu ? contextMenu.y - (rect?.top ?? 0) : 100;
|
|
1302
|
+
const x = Math.max(0, containerW - cursorLeft - 40);
|
|
1303
|
+
const y = Math.max(0, cursorTop - 20);
|
|
1280
1304
|
const id = `folder-${Date.now()}`;
|
|
1281
1305
|
saveFolders([...folders, { id, name: "New Folder", x, y }]);
|
|
1282
1306
|
setContextMenu(null);
|
|
@@ -1506,12 +1530,20 @@ function Desktop({ profile }) {
|
|
|
1506
1530
|
folders.map((folder, i) => {
|
|
1507
1531
|
const pos = localPositions[`folder-${i}`] || getFolderPos(folder, i);
|
|
1508
1532
|
const isSelected = selected.has(`folder-${i}`);
|
|
1533
|
+
const isHovered = hoverFolderIdx === i;
|
|
1509
1534
|
const itemCount = folderItems(folder.id).length;
|
|
1510
1535
|
return /* @__PURE__ */ jsx(
|
|
1511
1536
|
"div",
|
|
1512
1537
|
{
|
|
1513
1538
|
"data-desktop-icon": `folder-${i}`,
|
|
1514
|
-
style: {
|
|
1539
|
+
style: {
|
|
1540
|
+
position: "absolute",
|
|
1541
|
+
right: pos.right,
|
|
1542
|
+
top: pos.top,
|
|
1543
|
+
zIndex: 1,
|
|
1544
|
+
transform: isHovered ? "scale(1.15)" : "scale(1)",
|
|
1545
|
+
transition: "transform 180ms ease-out"
|
|
1546
|
+
},
|
|
1515
1547
|
onPointerDown: (e) => {
|
|
1516
1548
|
e.stopPropagation();
|
|
1517
1549
|
startDrag("folder", i, e);
|
|
@@ -1535,7 +1567,7 @@ function Desktop({ profile }) {
|
|
|
1535
1567
|
},
|
|
1536
1568
|
className: "cursor-default select-none",
|
|
1537
1569
|
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-1 w-20 p-2", children: [
|
|
1538
|
-
/* @__PURE__ */ jsx("div", { className: `w-12 h-12 flex items-center justify-center ${isSelected ? "rounded-lg bg-blue-400/30 ring-2 ring-blue-500" : ""}`, children: /* @__PURE__ */ jsxs("svg", { className: "h-12 w-12 drop-shadow-[0_2px_3px_rgba(0,0,0,0.3)]", viewBox: "0 0 48 48", children: [
|
|
1570
|
+
/* @__PURE__ */ jsx("div", { className: `w-12 h-12 flex items-center justify-center ${isSelected ? "rounded-lg bg-blue-400/30 ring-2 ring-blue-500" : ""} ${isHovered ? "rounded-lg ring-4 ring-amber-400 shadow-[0_0_20px_rgba(245,158,11,0.6)]" : ""}`, children: /* @__PURE__ */ jsxs("svg", { className: "h-12 w-12 drop-shadow-[0_2px_3px_rgba(0,0,0,0.3)]", viewBox: "0 0 48 48", children: [
|
|
1539
1571
|
/* @__PURE__ */ jsx("path", { d: "M6 12a4 4 0 014-4h10l4 4h14a4 4 0 014 4v20a4 4 0 01-4 4H10a4 4 0 01-4-4V12z", fill: "white", stroke: "#eab308", strokeWidth: "2", strokeLinejoin: "round" }),
|
|
1540
1572
|
/* @__PURE__ */ jsx("path", { d: "M6 18h36", stroke: "#eab308", strokeWidth: "1.5" })
|
|
1541
1573
|
] }) }),
|
|
@@ -1847,7 +1879,7 @@ function Desktop({ profile }) {
|
|
|
1847
1879
|
] })
|
|
1848
1880
|
] }) });
|
|
1849
1881
|
})(),
|
|
1850
|
-
|
|
1882
|
+
prefs.show_desktop_version === true && (host.productVersion ?? APP_VERSION) && /* @__PURE__ */ jsx(
|
|
1851
1883
|
"button",
|
|
1852
1884
|
{
|
|
1853
1885
|
onClick: (e) => {
|
|
@@ -1858,17 +1890,20 @@ function Desktop({ profile }) {
|
|
|
1858
1890
|
children: host.productVersion ?? APP_VERSION
|
|
1859
1891
|
}
|
|
1860
1892
|
),
|
|
1861
|
-
whatsNewOpen &&
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
/* @__PURE__ */
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
change
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1893
|
+
whatsNewOpen && (() => {
|
|
1894
|
+
const entries = host.productChangelog ?? changelog_default;
|
|
1895
|
+
return /* @__PURE__ */ jsx(Modal, { open: true, onClose: () => setWhatsNewOpen(false), title: "What's New", size: "md", bodyScroll: false, children: /* @__PURE__ */ jsx("div", { className: "space-y-5 max-h-[60vh] overflow-y-auto px-1", children: entries.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-400 text-center py-6", children: "No changelog available." }) : entries.map((entry, i) => /* @__PURE__ */ jsxs("div", { children: [
|
|
1896
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 mb-2", children: [
|
|
1897
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-gray-900 font-mono", children: entry.version }),
|
|
1898
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-gray-400", children: formatDate(entry.date) })
|
|
1899
|
+
] }),
|
|
1900
|
+
/* @__PURE__ */ jsx("ul", { className: "space-y-1.5 ml-1", children: entry.changes.map((change, j) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-gray-600", children: [
|
|
1901
|
+
/* @__PURE__ */ jsx("span", { className: "text-blue-500 mt-1 shrink-0", children: "\u2022" }),
|
|
1902
|
+
change
|
|
1903
|
+
] }, j)) }),
|
|
1904
|
+
i < entries.length - 1 && /* @__PURE__ */ jsx("div", { className: "border-b border-gray-200 mt-4" })
|
|
1905
|
+
] }, entry.version)) }) });
|
|
1906
|
+
})()
|
|
1872
1907
|
]
|
|
1873
1908
|
}
|
|
1874
1909
|
);
|