react-os-shell 2.9.4 → 3.0.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-M5FCUZ3B.js → Browser-3SDJFEZW.js} +4 -4
- package/dist/{Browser-M5FCUZ3B.js.map → Browser-3SDJFEZW.js.map} +1 -1
- package/dist/{Documents-ZBSGZ6IS.js → Documents-HCHGAFPB.js} +3 -3
- package/dist/{Documents-ZBSGZ6IS.js.map → Documents-HCHGAFPB.js.map} +1 -1
- package/dist/Files-FYWUNLBY.js +12 -0
- package/dist/{Files-RCBB7L6F.js.map → Files-FYWUNLBY.js.map} +1 -1
- package/dist/{Notepad-MBYDR7WZ.js → Notepad-WRS7EMCK.js} +3 -3
- package/dist/{Notepad-MBYDR7WZ.js.map → Notepad-WRS7EMCK.js.map} +1 -1
- package/dist/Preview-HOLQVFSU.js +8 -0
- package/dist/{Preview-7AIWQDP7.js.map → Preview-HOLQVFSU.js.map} +1 -1
- package/dist/{Spreadsheet-USNVGYAH.js → Spreadsheet-MRUQ4LJR.js} +4 -4
- package/dist/{Spreadsheet-USNVGYAH.js.map → Spreadsheet-MRUQ4LJR.js.map} +1 -1
- package/dist/apps/index.js +12 -13
- package/dist/apps/index.js.map +1 -1
- package/dist/{chunk-JZKFHLA6.js → chunk-D7QQTFM3.js} +3 -3
- package/dist/{chunk-JZKFHLA6.js.map → chunk-D7QQTFM3.js.map} +1 -1
- package/dist/{chunk-XJFI35IK.js → chunk-QS2MEW6R.js} +4 -4
- package/dist/{chunk-XJFI35IK.js.map → chunk-QS2MEW6R.js.map} +1 -1
- package/dist/{chunk-3HIKRXNT.js → chunk-SKNOGIDC.js} +996 -6
- package/dist/chunk-SKNOGIDC.js.map +1 -0
- package/dist/{chunk-5ICRXHJ7.js → chunk-X4MB43G2.js} +4 -4
- package/dist/{chunk-5ICRXHJ7.js.map → chunk-X4MB43G2.js.map} +1 -1
- package/dist/{chunk-AJFUAG54.js → chunk-XRCABX52.js} +3 -3
- package/dist/{chunk-AJFUAG54.js.map → chunk-XRCABX52.js.map} +1 -1
- package/dist/{chunk-2XERB3XN.js → chunk-XVCEFF6M.js} +3 -3
- package/dist/{chunk-2XERB3XN.js.map → chunk-XVCEFF6M.js.map} +1 -1
- package/dist/index.d.ts +1 -125
- package/dist/index.js +15 -510
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Files-RCBB7L6F.js +0 -13
- package/dist/ImageAnnotator-55NPWJ2R.js +0 -4
- package/dist/ImageAnnotator-55NPWJ2R.js.map +0 -1
- package/dist/Preview-7AIWQDP7.js +0 -9
- package/dist/chunk-3HIKRXNT.js.map +0 -1
- package/dist/chunk-NUPYEVU4.js +0 -999
- package/dist/chunk-NUPYEVU4.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
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-X4MB43G2.js';
|
|
4
|
+
export { Breadcrumbs } from './chunk-X4MB43G2.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
|
-
import
|
|
9
|
-
import './chunk-NUPYEVU4.js';
|
|
8
|
+
import './chunk-SKNOGIDC.js';
|
|
10
9
|
import { toast_default } from './chunk-VENYVK3L.js';
|
|
11
10
|
export { toast_default as toast } from './chunk-VENYVK3L.js';
|
|
12
|
-
export { EditableGrid } from './chunk-
|
|
13
|
-
import { APP_VERSION } from './chunk-AJFUAG54.js';
|
|
14
|
-
export { VERSION } from './chunk-AJFUAG54.js';
|
|
15
|
-
import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, Modal, WINDOW_REGISTRY, isPageEntry, useShellPrefs, useIsMobile, ModalActions, useModalActive, client_default, LoadingSpinner, setWindowPosition, ThumbCard, activateModal } from './chunk-6OWYD4O6.js';
|
|
16
|
-
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';
|
|
17
|
-
import { confirm } from './chunk-UBN4IUDE.js';
|
|
18
|
-
export { ConfirmProvider, confirm, confirmDestructive, prompt } from './chunk-UBN4IUDE.js';
|
|
11
|
+
export { EditableGrid } from './chunk-XVCEFF6M.js';
|
|
19
12
|
import { useAuth, useShellAuth } from './chunk-ADJ3CERD.js';
|
|
20
13
|
export { ShellAuthProvider, setShellAuthBridge, useShellAuth } from './chunk-ADJ3CERD.js';
|
|
14
|
+
import { APP_VERSION } from './chunk-XRCABX52.js';
|
|
15
|
+
export { VERSION } from './chunk-XRCABX52.js';
|
|
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
|
+
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
|
+
export { ConfirmProvider, confirm, confirmDestructive, prompt } from './chunk-UBN4IUDE.js';
|
|
21
19
|
import { glassStyle, startMenuCategories, navSections, isSection, GLASS_INPUT_BG, navIcons, sectionIcons } from './chunk-ZF6AYO4G.js';
|
|
22
20
|
export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle, setShellNavIcons } from './chunk-ZF6AYO4G.js';
|
|
23
|
-
import { createContext, lazy, useState, useRef, useEffect, useCallback, useMemo, useLayoutEffect, useContext,
|
|
21
|
+
import { createContext, lazy, useState, useRef, useEffect, useCallback, useMemo, useLayoutEffect, useContext, isValidElement, cloneElement, Suspense, Fragment as Fragment$1, useSyncExternalStore } from 'react';
|
|
24
22
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
25
|
-
import { Dialog, DialogBackdrop, DialogPanel
|
|
23
|
+
import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react';
|
|
26
24
|
import { createPortal } from 'react-dom';
|
|
27
25
|
import { useQueryClient, useQuery, useMutation, useInfiniteQuery } from '@tanstack/react-query';
|
|
28
26
|
import 'react-router-dom';
|
|
@@ -1016,419 +1014,6 @@ function NotificationBell({
|
|
|
1016
1014
|
)
|
|
1017
1015
|
] });
|
|
1018
1016
|
}
|
|
1019
|
-
var BugReportContext = createContext(null);
|
|
1020
|
-
function BugReportConfigProvider({ value, children }) {
|
|
1021
|
-
return /* @__PURE__ */ jsx(BugReportContext.Provider, { value, children });
|
|
1022
|
-
}
|
|
1023
|
-
function useBugReport() {
|
|
1024
|
-
return useContext(BugReportContext);
|
|
1025
|
-
}
|
|
1026
|
-
var globalOpen = () => Promise.resolve(null);
|
|
1027
|
-
var openBugReportDialog = (screenshot) => globalOpen(screenshot);
|
|
1028
|
-
function BugReportProvider({ children }) {
|
|
1029
|
-
const [open, setOpen] = useState(false);
|
|
1030
|
-
const [screenshot, setScreenshot] = useState(null);
|
|
1031
|
-
const [previewUrl, setPreviewUrl] = useState(null);
|
|
1032
|
-
const [description, setDescription] = useState("");
|
|
1033
|
-
const [reportType, setReportType] = useState("bug");
|
|
1034
|
-
const [extras, setExtras] = useState({});
|
|
1035
|
-
const [annotating, setAnnotating] = useState(false);
|
|
1036
|
-
const resolveRef = useRef();
|
|
1037
|
-
const config = useContext(BugReportContext);
|
|
1038
|
-
const extraFields = config?.extraFields ?? [];
|
|
1039
|
-
const openFn = useCallback((s) => {
|
|
1040
|
-
setScreenshot(s);
|
|
1041
|
-
setDescription("");
|
|
1042
|
-
setReportType("bug");
|
|
1043
|
-
const seeded = {};
|
|
1044
|
-
const ctx = { url: window.location.href, reportType: "bug" };
|
|
1045
|
-
for (const f of extraFields) {
|
|
1046
|
-
if (typeof f.defaultValue === "function") {
|
|
1047
|
-
try {
|
|
1048
|
-
seeded[f.key] = f.defaultValue(ctx) ?? "";
|
|
1049
|
-
} catch {
|
|
1050
|
-
seeded[f.key] = f.options[0]?.value ?? "";
|
|
1051
|
-
}
|
|
1052
|
-
} else if (typeof f.defaultValue === "string") {
|
|
1053
|
-
seeded[f.key] = f.defaultValue;
|
|
1054
|
-
} else {
|
|
1055
|
-
seeded[f.key] = f.options[0]?.value ?? "";
|
|
1056
|
-
}
|
|
1057
|
-
}
|
|
1058
|
-
setExtras(seeded);
|
|
1059
|
-
setAnnotating(false);
|
|
1060
|
-
setOpen(true);
|
|
1061
|
-
return new Promise((resolve) => {
|
|
1062
|
-
resolveRef.current = resolve;
|
|
1063
|
-
});
|
|
1064
|
-
}, [extraFields]);
|
|
1065
|
-
useEffect(() => {
|
|
1066
|
-
globalOpen = openFn;
|
|
1067
|
-
}, [openFn]);
|
|
1068
|
-
useEffect(() => {
|
|
1069
|
-
if (!screenshot) {
|
|
1070
|
-
setPreviewUrl(null);
|
|
1071
|
-
return;
|
|
1072
|
-
}
|
|
1073
|
-
const url = URL.createObjectURL(screenshot);
|
|
1074
|
-
setPreviewUrl(url);
|
|
1075
|
-
return () => URL.revokeObjectURL(url);
|
|
1076
|
-
}, [screenshot]);
|
|
1077
|
-
useEffect(() => {
|
|
1078
|
-
if (!open) return;
|
|
1079
|
-
const onPaste = (e) => {
|
|
1080
|
-
const items = Array.from(e.clipboardData?.items ?? []);
|
|
1081
|
-
const imageItem = items.find((it) => it.kind === "file" && it.type.startsWith("image/"));
|
|
1082
|
-
if (!imageItem) return;
|
|
1083
|
-
const blob = imageItem.getAsFile();
|
|
1084
|
-
if (!blob) return;
|
|
1085
|
-
setScreenshot(blob);
|
|
1086
|
-
};
|
|
1087
|
-
document.addEventListener("paste", onPaste);
|
|
1088
|
-
return () => document.removeEventListener("paste", onPaste);
|
|
1089
|
-
}, [open]);
|
|
1090
|
-
const handleSubmit = () => {
|
|
1091
|
-
setAnnotating(false);
|
|
1092
|
-
setOpen(false);
|
|
1093
|
-
resolveRef.current?.({ description: description.trim(), reportType, screenshot, extras });
|
|
1094
|
-
};
|
|
1095
|
-
const handleCancel = () => {
|
|
1096
|
-
setAnnotating(false);
|
|
1097
|
-
setOpen(false);
|
|
1098
|
-
resolveRef.current?.(null);
|
|
1099
|
-
};
|
|
1100
|
-
const isBug = reportType === "bug";
|
|
1101
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1102
|
-
children,
|
|
1103
|
-
/* @__PURE__ */ jsxs(
|
|
1104
|
-
Dialog,
|
|
1105
|
-
{
|
|
1106
|
-
open,
|
|
1107
|
-
onClose: annotating ? () => {
|
|
1108
|
-
} : handleCancel,
|
|
1109
|
-
className: "relative z-[9999]",
|
|
1110
|
-
children: [
|
|
1111
|
-
/* @__PURE__ */ jsx(DialogBackdrop, { className: "fixed inset-0 bg-black/40" }),
|
|
1112
|
-
/* @__PURE__ */ jsx("div", { className: "fixed inset-0 flex items-center justify-center p-4", children: /* @__PURE__ */ jsxs(DialogPanel, { className: "w-full max-w-2xl rounded-lg bg-white p-6 shadow-xl", children: [
|
|
1113
|
-
/* @__PURE__ */ jsx(DialogTitle, { className: "text-base font-semibold text-gray-900", children: "Suggestion or Bug" }),
|
|
1114
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-gray-500", children: "A screenshot of your current view will be sent to the admin team." }),
|
|
1115
|
-
/* @__PURE__ */ jsxs("div", { className: "mt-4 inline-flex rounded-lg border border-gray-300 bg-gray-50 p-0.5", children: [
|
|
1116
|
-
/* @__PURE__ */ jsx(
|
|
1117
|
-
"button",
|
|
1118
|
-
{
|
|
1119
|
-
type: "button",
|
|
1120
|
-
onClick: () => setReportType("bug"),
|
|
1121
|
-
className: `px-3 py-1 text-sm font-medium rounded-md transition-colors ${isBug ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900"}`,
|
|
1122
|
-
children: "Bug"
|
|
1123
|
-
}
|
|
1124
|
-
),
|
|
1125
|
-
/* @__PURE__ */ jsx(
|
|
1126
|
-
"button",
|
|
1127
|
-
{
|
|
1128
|
-
type: "button",
|
|
1129
|
-
onClick: () => setReportType("suggestion"),
|
|
1130
|
-
className: `px-3 py-1 text-sm font-medium rounded-md transition-colors ${!isBug ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900"}`,
|
|
1131
|
-
children: "Suggestion"
|
|
1132
|
-
}
|
|
1133
|
-
)
|
|
1134
|
-
] }),
|
|
1135
|
-
previewUrl && /* @__PURE__ */ jsxs("div", { className: "mt-4", children: [
|
|
1136
|
-
/* @__PURE__ */ jsxs("div", { className: "relative rounded-md border border-gray-200 overflow-hidden bg-gray-50 max-h-64", children: [
|
|
1137
|
-
/* @__PURE__ */ jsx("img", { src: previewUrl, alt: "Screenshot preview", className: "w-full h-auto max-h-64 object-contain" }),
|
|
1138
|
-
/* @__PURE__ */ jsxs(
|
|
1139
|
-
"button",
|
|
1140
|
-
{
|
|
1141
|
-
type: "button",
|
|
1142
|
-
onClick: () => setAnnotating(true),
|
|
1143
|
-
className: "absolute top-2 right-2 inline-flex items-center gap-1 px-2.5 py-1 rounded-md bg-white/95 backdrop-blur border border-gray-200 shadow-sm text-xs font-medium text-gray-700 hover:bg-white",
|
|
1144
|
-
title: "Mark up the screenshot \u2014 circle, arrow, mosaic, text\u2026",
|
|
1145
|
-
children: [
|
|
1146
|
-
/* @__PURE__ */ jsx("svg", { className: "h-3.5 w-3.5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.7, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125" }) }),
|
|
1147
|
-
"Annotate"
|
|
1148
|
-
]
|
|
1149
|
-
}
|
|
1150
|
-
)
|
|
1151
|
-
] }),
|
|
1152
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-[11px] text-gray-400", children: "Click Annotate to mark up the screenshot before sending. Or paste a different image from the clipboard to replace it." })
|
|
1153
|
-
] }),
|
|
1154
|
-
!previewUrl && /* @__PURE__ */ jsx(UploadDropZone, { onSelect: (blob) => setScreenshot(blob) }),
|
|
1155
|
-
extraFields.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-4 space-y-3", children: extraFields.map((f) => /* @__PURE__ */ jsxs("div", { children: [
|
|
1156
|
-
/* @__PURE__ */ jsx("label", { htmlFor: `bug-report-extra-${f.key}`, className: "block text-sm font-medium text-gray-700", children: f.label }),
|
|
1157
|
-
/* @__PURE__ */ jsx(
|
|
1158
|
-
"select",
|
|
1159
|
-
{
|
|
1160
|
-
id: `bug-report-extra-${f.key}`,
|
|
1161
|
-
value: extras[f.key] ?? "",
|
|
1162
|
-
onChange: (e) => setExtras((prev) => ({ ...prev, [f.key]: e.target.value })),
|
|
1163
|
-
className: "mt-1 block w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:ring-1 focus:ring-blue-500 focus:outline-none",
|
|
1164
|
-
children: f.options.map((o) => /* @__PURE__ */ jsx("option", { value: o.value, children: o.label }, o.value))
|
|
1165
|
-
}
|
|
1166
|
-
),
|
|
1167
|
-
f.hint && /* @__PURE__ */ jsx("p", { className: "mt-1 text-[11px] text-gray-500", children: f.hint })
|
|
1168
|
-
] }, f.key)) }),
|
|
1169
|
-
/* @__PURE__ */ jsxs("label", { className: "mt-4 block text-sm font-medium text-gray-700", children: [
|
|
1170
|
-
isBug ? "What went wrong?" : "What's your suggestion?",
|
|
1171
|
-
/* @__PURE__ */ jsx("span", { className: "font-normal text-gray-400 ml-1", children: "(optional)" })
|
|
1172
|
-
] }),
|
|
1173
|
-
/* @__PURE__ */ jsx(
|
|
1174
|
-
"textarea",
|
|
1175
|
-
{
|
|
1176
|
-
autoFocus: true,
|
|
1177
|
-
value: description,
|
|
1178
|
-
onChange: (e) => setDescription(e.target.value),
|
|
1179
|
-
onKeyDown: (e) => {
|
|
1180
|
-
if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) handleSubmit();
|
|
1181
|
-
},
|
|
1182
|
-
placeholder: isBug ? "Briefly describe the issue, what you were doing, what you expected to happen\u2026" : "Briefly describe what would make this better\u2026",
|
|
1183
|
-
rows: 3,
|
|
1184
|
-
className: "mt-1 w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:ring-1 focus:ring-blue-500 focus:outline-none resize-none"
|
|
1185
|
-
}
|
|
1186
|
-
),
|
|
1187
|
-
/* @__PURE__ */ jsxs("div", { className: "mt-6 flex justify-end gap-3", children: [
|
|
1188
|
-
/* @__PURE__ */ jsx(
|
|
1189
|
-
"button",
|
|
1190
|
-
{
|
|
1191
|
-
type: "button",
|
|
1192
|
-
onClick: handleCancel,
|
|
1193
|
-
className: "bg-white text-gray-700 border border-gray-300 px-4 py-2 text-sm font-medium rounded-lg hover:bg-gray-50",
|
|
1194
|
-
children: "Cancel"
|
|
1195
|
-
}
|
|
1196
|
-
),
|
|
1197
|
-
/* @__PURE__ */ jsx(
|
|
1198
|
-
"button",
|
|
1199
|
-
{
|
|
1200
|
-
type: "button",
|
|
1201
|
-
onClick: handleSubmit,
|
|
1202
|
-
className: "bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 text-sm font-medium rounded-lg",
|
|
1203
|
-
children: "Send"
|
|
1204
|
-
}
|
|
1205
|
-
)
|
|
1206
|
-
] })
|
|
1207
|
-
] }) }),
|
|
1208
|
-
annotating && previewUrl && /* @__PURE__ */ jsx(
|
|
1209
|
-
BugReportAnnotator,
|
|
1210
|
-
{
|
|
1211
|
-
src: previewUrl,
|
|
1212
|
-
onApply: (blob) => {
|
|
1213
|
-
setScreenshot(blob);
|
|
1214
|
-
setAnnotating(false);
|
|
1215
|
-
},
|
|
1216
|
-
onCancel: () => setAnnotating(false)
|
|
1217
|
-
}
|
|
1218
|
-
)
|
|
1219
|
-
]
|
|
1220
|
-
}
|
|
1221
|
-
)
|
|
1222
|
-
] });
|
|
1223
|
-
}
|
|
1224
|
-
var LazyImageAnnotator = lazy(() => import('./ImageAnnotator-55NPWJ2R.js'));
|
|
1225
|
-
function UploadDropZone({ onSelect }) {
|
|
1226
|
-
const inputRef = useRef(null);
|
|
1227
|
-
const [hover, setHover] = useState(false);
|
|
1228
|
-
const accept = (file) => {
|
|
1229
|
-
if (!file) return;
|
|
1230
|
-
if (!file.type.startsWith("image/")) return;
|
|
1231
|
-
onSelect(file);
|
|
1232
|
-
};
|
|
1233
|
-
return /* @__PURE__ */ jsxs(
|
|
1234
|
-
"div",
|
|
1235
|
-
{
|
|
1236
|
-
onClick: () => inputRef.current?.click(),
|
|
1237
|
-
onDragOver: (e) => {
|
|
1238
|
-
e.preventDefault();
|
|
1239
|
-
setHover(true);
|
|
1240
|
-
},
|
|
1241
|
-
onDragLeave: () => setHover(false),
|
|
1242
|
-
onDrop: (e) => {
|
|
1243
|
-
e.preventDefault();
|
|
1244
|
-
setHover(false);
|
|
1245
|
-
accept(e.dataTransfer.files?.[0]);
|
|
1246
|
-
},
|
|
1247
|
-
className: `mt-4 rounded-md border border-dashed px-4 py-6 text-center text-sm cursor-pointer transition-colors ${hover ? "border-blue-400 bg-blue-50 text-blue-700" : "border-gray-300 text-gray-500 hover:border-gray-400 hover:bg-gray-50"}`,
|
|
1248
|
-
children: [
|
|
1249
|
-
/* @__PURE__ */ jsx("p", { className: "text-gray-700 font-medium", children: "Screenshot capture failed" }),
|
|
1250
|
-
/* @__PURE__ */ jsxs("p", { className: "mt-1 text-xs text-gray-500", children: [
|
|
1251
|
-
"Drop an image here, paste one from the clipboard, or ",
|
|
1252
|
-
/* @__PURE__ */ jsx("span", { className: "text-blue-600 underline", children: "click to upload" }),
|
|
1253
|
-
". Your description will be sent either way."
|
|
1254
|
-
] }),
|
|
1255
|
-
/* @__PURE__ */ jsx(
|
|
1256
|
-
"input",
|
|
1257
|
-
{
|
|
1258
|
-
ref: inputRef,
|
|
1259
|
-
type: "file",
|
|
1260
|
-
accept: "image/*",
|
|
1261
|
-
onChange: (e) => accept(e.target.files?.[0]),
|
|
1262
|
-
className: "hidden"
|
|
1263
|
-
}
|
|
1264
|
-
)
|
|
1265
|
-
]
|
|
1266
|
-
}
|
|
1267
|
-
);
|
|
1268
|
-
}
|
|
1269
|
-
function BugReportAnnotator({
|
|
1270
|
-
src,
|
|
1271
|
-
onApply,
|
|
1272
|
-
onCancel
|
|
1273
|
-
}) {
|
|
1274
|
-
return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-[10000] bg-black/60 backdrop-blur-sm flex flex-col", children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx("div", { className: "flex-1 flex items-center justify-center text-sm text-white/80", children: "Loading editor\u2026" }), children: /* @__PURE__ */ jsx("div", { className: "flex-1 m-4 rounded-lg overflow-hidden bg-white shadow-2xl", children: /* @__PURE__ */ jsx(LazyImageAnnotator, { src, filename: "screenshot.png", onApply, onCancel }) }) }) });
|
|
1275
|
-
}
|
|
1276
|
-
function StatePill({ resolved }) {
|
|
1277
|
-
return /* @__PURE__ */ jsx("span", { className: `inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${resolved ? "bg-green-100 text-green-800" : "bg-yellow-100 text-yellow-800"}`, children: resolved ? "Resolved" : "Open" });
|
|
1278
|
-
}
|
|
1279
|
-
function BugReportDetail({ report, onClose }) {
|
|
1280
|
-
const qc = useQueryClient();
|
|
1281
|
-
const config = useBugReport();
|
|
1282
|
-
const { openPage } = useWindowManager();
|
|
1283
|
-
const [resolveOpen, setResolveOpen] = useState(false);
|
|
1284
|
-
const [note, setNote] = useState("");
|
|
1285
|
-
const kind = report.report_type === "suggestion" ? "suggestion" : "bug";
|
|
1286
|
-
const Kind = kind === "suggestion" ? "Suggestion" : "Bug";
|
|
1287
|
-
const openScreenshot = () => {
|
|
1288
|
-
if (!report.screenshot_url) return;
|
|
1289
|
-
const filename = `${kind}-${report.id}-screenshot.png`;
|
|
1290
|
-
setPdfPreview({ url: report.screenshot_url, filename, kind: "image" });
|
|
1291
|
-
openPage("/preview");
|
|
1292
|
-
};
|
|
1293
|
-
const resolve = useMutation({
|
|
1294
|
-
mutationFn: ({ is_resolved, resolution_note }) => {
|
|
1295
|
-
if (!config?.resolve) {
|
|
1296
|
-
return Promise.reject(new Error("Resolve is not configured."));
|
|
1297
|
-
}
|
|
1298
|
-
return config.resolve(report.id, is_resolved, resolution_note);
|
|
1299
|
-
},
|
|
1300
|
-
onSuccess: () => {
|
|
1301
|
-
qc.invalidateQueries({ queryKey: ["bug-reports"] });
|
|
1302
|
-
qc.invalidateQueries({ queryKey: ["entity", "bug_report", report.id] });
|
|
1303
|
-
setResolveOpen(false);
|
|
1304
|
-
setNote("");
|
|
1305
|
-
},
|
|
1306
|
-
meta: { success: (d) => d.is_resolved ? `${Kind} marked resolved.` : `${Kind} reopened.` }
|
|
1307
|
-
});
|
|
1308
|
-
const del = useMutation({
|
|
1309
|
-
mutationFn: () => {
|
|
1310
|
-
if (!config?.delete) return Promise.reject(new Error("Delete is not configured."));
|
|
1311
|
-
return config.delete(report.id);
|
|
1312
|
-
},
|
|
1313
|
-
onSuccess: () => {
|
|
1314
|
-
qc.invalidateQueries({ queryKey: ["bug-reports"] });
|
|
1315
|
-
qc.removeQueries({ queryKey: ["entity", "bug_report", report.id] });
|
|
1316
|
-
onClose?.();
|
|
1317
|
-
},
|
|
1318
|
-
meta: { success: () => `${Kind} deleted.` }
|
|
1319
|
-
});
|
|
1320
|
-
const handleDelete = async () => {
|
|
1321
|
-
const ok = await confirm({
|
|
1322
|
-
title: `Delete this ${kind}?`,
|
|
1323
|
-
message: "This is permanent and cannot be undone.",
|
|
1324
|
-
confirmLabel: "Delete",
|
|
1325
|
-
cancelLabel: "Keep",
|
|
1326
|
-
variant: "danger"
|
|
1327
|
-
});
|
|
1328
|
-
if (!ok) return;
|
|
1329
|
-
del.mutate();
|
|
1330
|
-
};
|
|
1331
|
-
const handleAction = () => {
|
|
1332
|
-
if (report.is_resolved) {
|
|
1333
|
-
resolve.mutate({ is_resolved: false, resolution_note: "" });
|
|
1334
|
-
} else {
|
|
1335
|
-
setNote("");
|
|
1336
|
-
setResolveOpen(true);
|
|
1337
|
-
}
|
|
1338
|
-
};
|
|
1339
|
-
const submitResolve = () => {
|
|
1340
|
-
resolve.mutate({ is_resolved: true, resolution_note: note.trim() });
|
|
1341
|
-
};
|
|
1342
|
-
return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
1343
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 text-sm", children: [
|
|
1344
|
-
/* @__PURE__ */ jsx("span", { className: "font-semibold text-gray-900", children: report.reporter_name || "Unknown" }),
|
|
1345
|
-
/* @__PURE__ */ jsx(StatePill, { resolved: report.is_resolved }),
|
|
1346
|
-
/* @__PURE__ */ jsx("span", { className: "text-gray-500 ml-auto", children: formatDate(report.created_at) })
|
|
1347
|
-
] }),
|
|
1348
|
-
report.description && /* @__PURE__ */ jsx("div", { className: "rounded-lg bg-gray-50 border border-gray-200 p-3 text-sm text-gray-800 whitespace-pre-wrap", children: report.description }),
|
|
1349
|
-
report.is_resolved && report.resolution_note && /* @__PURE__ */ jsxs("div", { className: "rounded-lg bg-green-50 border border-green-200 p-3 text-sm text-green-900 whitespace-pre-wrap", children: [
|
|
1350
|
-
/* @__PURE__ */ jsx("div", { className: "text-xs font-medium uppercase tracking-wide text-green-700 mb-1", children: "Resolution note" }),
|
|
1351
|
-
report.resolution_note
|
|
1352
|
-
] }),
|
|
1353
|
-
/* @__PURE__ */ jsxs("dl", { className: "text-xs text-gray-600 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1.5", children: [
|
|
1354
|
-
/* @__PURE__ */ jsx("dt", { className: "font-medium text-gray-700", children: "Page" }),
|
|
1355
|
-
/* @__PURE__ */ jsx("dd", { className: "break-all", children: /* @__PURE__ */ jsx("a", { href: report.url, target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:underline", children: report.url }) }),
|
|
1356
|
-
/* @__PURE__ */ jsx("dt", { className: "font-medium text-gray-700", children: "Viewport" }),
|
|
1357
|
-
/* @__PURE__ */ jsx("dd", { children: report.viewport }),
|
|
1358
|
-
/* @__PURE__ */ jsx("dt", { className: "font-medium text-gray-700", children: "Browser" }),
|
|
1359
|
-
/* @__PURE__ */ jsx("dd", { className: "break-all", children: report.user_agent })
|
|
1360
|
-
] }),
|
|
1361
|
-
report.screenshot_url ? /* @__PURE__ */ jsx("button", { type: "button", onClick: openScreenshot, className: "block w-full text-left p-0 bg-transparent border-0 cursor-pointer", children: /* @__PURE__ */ jsx(
|
|
1362
|
-
"img",
|
|
1363
|
-
{
|
|
1364
|
-
src: report.screenshot_url,
|
|
1365
|
-
alt: "Screenshot at time of report",
|
|
1366
|
-
className: "w-full rounded-lg border border-gray-200 hover:border-blue-400 transition-colors"
|
|
1367
|
-
}
|
|
1368
|
-
) }) : /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed border-gray-300 p-6 text-center text-sm text-gray-400", children: "No screenshot was captured for this report." }),
|
|
1369
|
-
(config?.resolve || config?.delete) && /* @__PURE__ */ jsxs("div", { className: "flex justify-end items-center gap-2 pt-2 border-t border-gray-200", children: [
|
|
1370
|
-
config?.delete && /* @__PURE__ */ jsx(
|
|
1371
|
-
"button",
|
|
1372
|
-
{
|
|
1373
|
-
onClick: handleDelete,
|
|
1374
|
-
disabled: del.isPending || resolve.isPending,
|
|
1375
|
-
className: "px-3 py-1.5 text-sm rounded-lg font-medium transition-colors bg-white border border-red-300 text-red-700 hover:bg-red-50 disabled:opacity-50 mr-auto",
|
|
1376
|
-
children: del.isPending ? "Deleting\u2026" : "Delete"
|
|
1377
|
-
}
|
|
1378
|
-
),
|
|
1379
|
-
config?.resolve && /* @__PURE__ */ jsx(
|
|
1380
|
-
"button",
|
|
1381
|
-
{
|
|
1382
|
-
onClick: handleAction,
|
|
1383
|
-
disabled: resolve.isPending || del.isPending,
|
|
1384
|
-
className: `px-3 py-1.5 text-sm rounded-lg font-medium transition-colors ${report.is_resolved ? "bg-white border border-gray-300 text-gray-700 hover:bg-gray-50" : "bg-blue-600 text-white hover:bg-blue-700"}`,
|
|
1385
|
-
children: resolve.isPending ? "..." : report.is_resolved ? "Reopen" : "Mark Resolved"
|
|
1386
|
-
}
|
|
1387
|
-
)
|
|
1388
|
-
] }),
|
|
1389
|
-
/* @__PURE__ */ jsx(Modal, { open: resolveOpen, onClose: () => !resolve.isPending && setResolveOpen(false), title: `Resolve ${report.report_code ?? Kind}`, size: "md", compact: true, children: /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
1390
|
-
/* @__PURE__ */ jsxs("p", { className: "text-sm text-gray-600", children: [
|
|
1391
|
-
"Add a short note for ",
|
|
1392
|
-
report.reporter_name || "the reporter",
|
|
1393
|
-
" (optional)."
|
|
1394
|
-
] }),
|
|
1395
|
-
/* @__PURE__ */ jsx(
|
|
1396
|
-
"textarea",
|
|
1397
|
-
{
|
|
1398
|
-
value: note,
|
|
1399
|
-
onChange: (e) => setNote(e.target.value),
|
|
1400
|
-
onKeyDown: (e) => {
|
|
1401
|
-
if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) submitResolve();
|
|
1402
|
-
},
|
|
1403
|
-
rows: 3,
|
|
1404
|
-
autoFocus: true,
|
|
1405
|
-
placeholder: "e.g. Fixed in v1256 \u2014 let me know if you still see it.",
|
|
1406
|
-
className: "w-full rounded-lg border border-gray-300 px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent resize-none"
|
|
1407
|
-
}
|
|
1408
|
-
),
|
|
1409
|
-
/* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2 pt-2 border-t border-gray-200", children: [
|
|
1410
|
-
/* @__PURE__ */ jsx(
|
|
1411
|
-
"button",
|
|
1412
|
-
{
|
|
1413
|
-
onClick: () => setResolveOpen(false),
|
|
1414
|
-
disabled: resolve.isPending,
|
|
1415
|
-
className: "px-3 py-1.5 text-sm rounded-lg font-medium bg-white border border-gray-300 text-gray-700 hover:bg-gray-50 transition-colors",
|
|
1416
|
-
children: "Cancel"
|
|
1417
|
-
}
|
|
1418
|
-
),
|
|
1419
|
-
/* @__PURE__ */ jsx(
|
|
1420
|
-
"button",
|
|
1421
|
-
{
|
|
1422
|
-
onClick: submitResolve,
|
|
1423
|
-
disabled: resolve.isPending,
|
|
1424
|
-
className: "px-3 py-1.5 text-sm rounded-lg font-medium bg-blue-600 text-white hover:bg-blue-700 transition-colors",
|
|
1425
|
-
children: resolve.isPending ? "Resolving..." : "Resolve"
|
|
1426
|
-
}
|
|
1427
|
-
)
|
|
1428
|
-
] })
|
|
1429
|
-
] }) })
|
|
1430
|
-
] });
|
|
1431
|
-
}
|
|
1432
1017
|
var GROUP_COLORS = {
|
|
1433
1018
|
success: "bg-green-100 text-green-800",
|
|
1434
1019
|
active: "bg-blue-100 text-blue-800",
|
|
@@ -1639,55 +1224,6 @@ function WidgetManager({ open, onClose }) {
|
|
|
1639
1224
|
// src/changelog.ts
|
|
1640
1225
|
var changelog = [];
|
|
1641
1226
|
var changelog_default = changelog;
|
|
1642
|
-
|
|
1643
|
-
// src/utils/reportBug.ts
|
|
1644
|
-
async function captureViewport() {
|
|
1645
|
-
try {
|
|
1646
|
-
const stream = await navigator.mediaDevices.getDisplayMedia({
|
|
1647
|
-
video: { displaySurface: "browser" },
|
|
1648
|
-
audio: false,
|
|
1649
|
-
// Chromium-only hints — ignored by other engines, no harm done.
|
|
1650
|
-
preferCurrentTab: true,
|
|
1651
|
-
selfBrowserSurface: "include",
|
|
1652
|
-
surfaceSwitching: "exclude"
|
|
1653
|
-
});
|
|
1654
|
-
const video = document.createElement("video");
|
|
1655
|
-
video.srcObject = stream;
|
|
1656
|
-
video.muted = true;
|
|
1657
|
-
await video.play();
|
|
1658
|
-
const canvas = document.createElement("canvas");
|
|
1659
|
-
canvas.width = video.videoWidth;
|
|
1660
|
-
canvas.height = video.videoHeight;
|
|
1661
|
-
canvas.getContext("2d").drawImage(video, 0, 0);
|
|
1662
|
-
stream.getTracks().forEach((t) => t.stop());
|
|
1663
|
-
return await new Promise((resolve) => {
|
|
1664
|
-
canvas.toBlob((b) => resolve(b), "image/jpeg", 0.9);
|
|
1665
|
-
});
|
|
1666
|
-
} catch (err) {
|
|
1667
|
-
console.error("Bug report screenshot failed:", err);
|
|
1668
|
-
return null;
|
|
1669
|
-
}
|
|
1670
|
-
}
|
|
1671
|
-
async function reportBug(submit) {
|
|
1672
|
-
const screenshot = await captureViewport();
|
|
1673
|
-
const submission = await openBugReportDialog(screenshot);
|
|
1674
|
-
if (submission === null) return;
|
|
1675
|
-
const finalScreenshot = submission.screenshot ?? screenshot;
|
|
1676
|
-
try {
|
|
1677
|
-
await submit({
|
|
1678
|
-
description: submission.description || void 0,
|
|
1679
|
-
screenshot: finalScreenshot ?? void 0,
|
|
1680
|
-
url: window.location.href,
|
|
1681
|
-
userAgent: navigator.userAgent,
|
|
1682
|
-
viewport: `${window.innerWidth}x${window.innerHeight}`,
|
|
1683
|
-
reportType: submission.reportType,
|
|
1684
|
-
extras: submission.extras ?? {}
|
|
1685
|
-
});
|
|
1686
|
-
toast_default.success(submission.reportType === "bug" ? "Bug sent to admins." : "Suggestion sent to admins.");
|
|
1687
|
-
} catch (err) {
|
|
1688
|
-
toast_default.error(err?.response?.data?.detail || "Failed to send.");
|
|
1689
|
-
}
|
|
1690
|
-
}
|
|
1691
1227
|
var DOCUMENTS_FOLDER_ID = "documents";
|
|
1692
1228
|
var DOCUMENTS_FOLDER_NAME = "Recent Documents";
|
|
1693
1229
|
var GRID = 90;
|
|
@@ -1704,7 +1240,6 @@ function useDesktopHost() {
|
|
|
1704
1240
|
function Desktop({ profile }) {
|
|
1705
1241
|
useQueryClient();
|
|
1706
1242
|
const { openEntity, openPage } = useWindowManager();
|
|
1707
|
-
const bugReport = useBugReport();
|
|
1708
1243
|
const containerRef = useRef(null);
|
|
1709
1244
|
const { prefs: shellPrefs, save: saveShellPrefs } = useShellPrefs();
|
|
1710
1245
|
const prefs = { ...profile?.preferences || {}, ...shellPrefs };
|
|
@@ -2732,16 +2267,6 @@ function Desktop({ profile }) {
|
|
|
2732
2267
|
/* @__PURE__ */ jsx("svg", { className: "h-4 w-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("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" }) }),
|
|
2733
2268
|
"About ",
|
|
2734
2269
|
host.productName ?? "this app"
|
|
2735
|
-
] }),
|
|
2736
|
-
bugReport && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2737
|
-
/* @__PURE__ */ jsx(PopupMenuDivider, {}),
|
|
2738
|
-
/* @__PURE__ */ jsxs(PopupMenuItem, { onClick: () => {
|
|
2739
|
-
setContextMenu(null);
|
|
2740
|
-
reportBug(bugReport.submit);
|
|
2741
|
-
}, children: [
|
|
2742
|
-
/* @__PURE__ */ jsx("svg", { className: "h-4 w-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z" }) }),
|
|
2743
|
-
"Suggestion or Bug"
|
|
2744
|
-
] })
|
|
2745
2270
|
] })
|
|
2746
2271
|
] }),
|
|
2747
2272
|
contextMenu && contextMenu.itemIdx != null && /* @__PURE__ */ jsxs(PopupMenu, { style: menuStyle(contextMenu.x, contextMenu.y), minWidth: 160, children: [
|
|
@@ -4485,7 +4010,7 @@ function CalendarPopup({ now, config, close }) {
|
|
|
4485
4010
|
config?.renderDay && /* @__PURE__ */ jsx("div", { className: "mt-2.5 max-h-[280px] overflow-y-auto border-t border-gray-100 pt-2", children: config.renderDay(selected, { close }) }, selected)
|
|
4486
4011
|
] });
|
|
4487
4012
|
}
|
|
4488
|
-
function TaskbarContextMenu({ x, y, position, size, onChangePosition, onChangeSize, onClose
|
|
4013
|
+
function TaskbarContextMenu({ x, y, position, size, onChangePosition, onChangeSize, onClose }) {
|
|
4489
4014
|
const ref = useRef(null);
|
|
4490
4015
|
useClickOutside(ref, onClose);
|
|
4491
4016
|
const posStyle = position === "top" ? { left: Math.min(x, window.innerWidth - 200), top: y + 4 } : position === "left" ? { left: x + 4, top: Math.min(y, window.innerHeight - 300) } : position === "right" ? { right: window.innerWidth - x + 4, top: Math.min(y, window.innerHeight - 300) } : { left: Math.min(x, window.innerWidth - 200), bottom: window.innerHeight - y + 4 };
|
|
@@ -4519,25 +4044,7 @@ function TaskbarContextMenu({ x, y, position, size, onChangePosition, onChangeSi
|
|
|
4519
4044
|
]
|
|
4520
4045
|
},
|
|
4521
4046
|
s
|
|
4522
|
-
))
|
|
4523
|
-
onReportBug && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4524
|
-
/* @__PURE__ */ jsx("div", { className: "border-t border-white/20 my-1 mx-3" }),
|
|
4525
|
-
/* @__PURE__ */ jsxs(
|
|
4526
|
-
"button",
|
|
4527
|
-
{
|
|
4528
|
-
onClick: () => {
|
|
4529
|
-
onClose();
|
|
4530
|
-
onReportBug();
|
|
4531
|
-
},
|
|
4532
|
-
className: "w-full text-left px-3 py-1.5 text-sm text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition-colors rounded-lg mx-1 flex items-center gap-2",
|
|
4533
|
-
style: { width: "calc(100% - 8px)" },
|
|
4534
|
-
children: [
|
|
4535
|
-
/* @__PURE__ */ jsx("span", { className: "w-3.5 shrink-0" }),
|
|
4536
|
-
"Suggestion or Bug"
|
|
4537
|
-
]
|
|
4538
|
-
}
|
|
4539
|
-
)
|
|
4540
|
-
] })
|
|
4047
|
+
))
|
|
4541
4048
|
] });
|
|
4542
4049
|
}
|
|
4543
4050
|
function TaskbarFavorites({ favorites, vertical, taskbarPosition, navSections: navSections2, navIcons: navIcons2, onOpen, onToggleFavorite }) {
|
|
@@ -4619,7 +4126,6 @@ function Layout({
|
|
|
4619
4126
|
taskbarTrayLeft,
|
|
4620
4127
|
clockCalendar
|
|
4621
4128
|
} = {}) {
|
|
4622
|
-
const bugReport = useBugReport();
|
|
4623
4129
|
const { user, logout, hasAnyPerm } = useAuth();
|
|
4624
4130
|
const { openPage, openEntity, openWindows } = useWindowManager();
|
|
4625
4131
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
@@ -4987,8 +4493,7 @@ function Layout({
|
|
|
4987
4493
|
savePref("taskbar_size", v);
|
|
4988
4494
|
setTaskbarMenu(null);
|
|
4989
4495
|
},
|
|
4990
|
-
onClose: () => setTaskbarMenu(null)
|
|
4991
|
-
onReportBug: bugReport ? () => reportBug(bugReport.submit) : void 0
|
|
4496
|
+
onClose: () => setTaskbarMenu(null)
|
|
4992
4497
|
}
|
|
4993
4498
|
),
|
|
4994
4499
|
/* @__PURE__ */ jsx(GlobalSearch, { ...search }),
|
|
@@ -6626,6 +6131,6 @@ function useEditHotkey(callback) {
|
|
|
6626
6131
|
}, [callback, isActive]);
|
|
6627
6132
|
}
|
|
6628
6133
|
|
|
6629
|
-
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BehaviorPanel,
|
|
6134
|
+
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BehaviorPanel, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Customization, DEV_BANNER_TEXT, Desktop, DesktopHostProvider, DevIndicator, ENTER, EntityList, GlobalSearch, HelpCenter, Kanban, Layout, ListFooter, MOD, Markdown, NotificationBell, ResizableTable, SHIFT, SearchableSelect, ShellEntityFetcherProvider, ShortcutHelp, SoundsPanel, StartMenu, StatusBadge, StatusBadgeProvider, SystemPreferences, TopNav, WidgetManager, applyDevTitle, createWindowRegistry, formatDate, isDevEnv, isMac, useClickOutside, useColumnConfig, useDesktopHost, useEditHotkey, useInfiniteScroll, useNewHotkey, useShellEntityFetcher, useSort, useTableNav };
|
|
6630
6135
|
//# sourceMappingURL=index.js.map
|
|
6631
6136
|
//# sourceMappingURL=index.js.map
|