react-os-shell 0.7.4 → 0.8.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/README.md +9 -32
- package/dist/{Minesweeper-N73MSPJV.js → Minesweeper-M6HIJYPL.js} +3 -3
- package/dist/{Minesweeper-N73MSPJV.js.map → Minesweeper-M6HIJYPL.js.map} +1 -1
- package/dist/{PomodoroTimer-YTV5Z6AC.js → PomodoroTimer-5K55K26A.js} +3 -3
- package/dist/{PomodoroTimer-YTV5Z6AC.js.map → PomodoroTimer-5K55K26A.js.map} +1 -1
- package/dist/{TodoList-PI4SGVGI.js → TodoList-26N6ZTLN.js} +4 -3
- package/dist/TodoList-26N6ZTLN.js.map +1 -0
- package/dist/apps/index.d.ts +1 -8
- package/dist/apps/index.js +4 -11
- package/dist/apps/index.js.map +1 -1
- package/dist/chunk-QTJ2CHJX.js +174 -0
- package/dist/chunk-QTJ2CHJX.js.map +1 -0
- package/dist/{chunk-NSU7OHPC.js → chunk-Y4QYGQKS.js} +3 -11
- package/dist/chunk-Y4QYGQKS.js.map +1 -0
- package/dist/index.d.ts +45 -58
- package/dist/index.js +12 -271
- package/dist/index.js.map +1 -1
- package/package.json +3 -10
- package/dist/Calendar-KCZQJ5CY.js +0 -598
- package/dist/Calendar-KCZQJ5CY.js.map +0 -1
- package/dist/Email-ZUDCRZKB.js +0 -475
- package/dist/Email-ZUDCRZKB.js.map +0 -1
- package/dist/TodoList-PI4SGVGI.js.map +0 -1
- package/dist/chunk-25L4DIKH.js +0 -90
- package/dist/chunk-25L4DIKH.js.map +0 -1
- package/dist/chunk-NSU7OHPC.js.map +0 -1
- package/dist/chunk-PDFQNHW7.js +0 -24
- package/dist/chunk-PDFQNHW7.js.map +0 -1
- package/dist/chunk-VBFB3ZIN.js +0 -129
- package/dist/chunk-VBFB3ZIN.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export { setShellMailServer, useMailAuth } from './chunk-VBFB3ZIN.js';
|
|
4
|
-
import { formatDate } from './chunk-NSU7OHPC.js';
|
|
5
|
-
export { formatDate } from './chunk-NSU7OHPC.js';
|
|
1
|
+
import { formatDate } from './chunk-Y4QYGQKS.js';
|
|
2
|
+
export { formatDate } from './chunk-Y4QYGQKS.js';
|
|
6
3
|
import { subscribePomo, getPomoSnapshot } from './chunk-MK3HLUO4.js';
|
|
4
|
+
export { setShellTodoProvider } from './chunk-QTJ2CHJX.js';
|
|
7
5
|
import { useShellPrefs } from './chunk-36VM54SC.js';
|
|
8
6
|
export { ShellPrefsProvider, useLocalStoragePrefs, useShellPrefs } from './chunk-36VM54SC.js';
|
|
9
7
|
import { PREVIEW_OPENED_EVENT, openPreviewFile } from './chunk-SUUADOG6.js';
|
|
@@ -13,7 +11,7 @@ import './chunk-KUIPWCTJ.js';
|
|
|
13
11
|
import { toast_default } from './chunk-WIJ45SYD.js';
|
|
14
12
|
export { toast_default as toast } from './chunk-WIJ45SYD.js';
|
|
15
13
|
export { EditableGrid } from './chunk-ZETQWO2W.js';
|
|
16
|
-
import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, Modal, WINDOW_REGISTRY, isPageEntry,
|
|
14
|
+
import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, Modal, WINDOW_REGISTRY, isPageEntry, useIsMobile, ModalActions, useModalActive, client_default, LoadingSpinner, setWindowPosition, ThumbCard, activateModal } from './chunk-3T6SQ4UO.js';
|
|
17
15
|
export { CancelButton, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, WindowManagerProvider, WindowTitle, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useModalActive, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-3T6SQ4UO.js';
|
|
18
16
|
import { confirm } from './chunk-UBN4IUDE.js';
|
|
19
17
|
export { ConfirmProvider, confirm, confirmDestructive, prompt } from './chunk-UBN4IUDE.js';
|
|
@@ -1402,7 +1400,7 @@ function WidgetManager({ open, onClose }) {
|
|
|
1402
1400
|
}
|
|
1403
1401
|
|
|
1404
1402
|
// src/version.ts
|
|
1405
|
-
var VERSION = "0.
|
|
1403
|
+
var VERSION = "0.8.0" ;
|
|
1406
1404
|
var APP_VERSION = VERSION;
|
|
1407
1405
|
|
|
1408
1406
|
// src/changelog.ts
|
|
@@ -3011,221 +3009,6 @@ function useTheme() {
|
|
|
3011
3009
|
}, [accentColor, customBgColor, customTitleColor, customWindowColor, customButtonColor]);
|
|
3012
3010
|
return { theme: saved, resolved };
|
|
3013
3011
|
}
|
|
3014
|
-
var PRESETS = [
|
|
3015
|
-
{
|
|
3016
|
-
id: "fastmail",
|
|
3017
|
-
label: "Fastmail",
|
|
3018
|
-
imap: { host: "imap.fastmail.com", port: 993, secure: true },
|
|
3019
|
-
smtp: { host: "smtp.fastmail.com", port: 465, secure: true },
|
|
3020
|
-
caldav: "https://caldav.fastmail.com/"
|
|
3021
|
-
},
|
|
3022
|
-
{
|
|
3023
|
-
id: "icloud",
|
|
3024
|
-
label: "iCloud",
|
|
3025
|
-
note: "Requires an app-specific password (appleid.apple.com).",
|
|
3026
|
-
imap: { host: "imap.mail.me.com", port: 993, secure: true },
|
|
3027
|
-
smtp: { host: "smtp.mail.me.com", port: 587, secure: false },
|
|
3028
|
-
caldav: "https://caldav.icloud.com/"
|
|
3029
|
-
},
|
|
3030
|
-
{
|
|
3031
|
-
id: "yahoo",
|
|
3032
|
-
label: "Yahoo",
|
|
3033
|
-
note: "Requires an app password (account.yahoo.com).",
|
|
3034
|
-
imap: { host: "imap.mail.yahoo.com", port: 993, secure: true },
|
|
3035
|
-
smtp: { host: "smtp.mail.yahoo.com", port: 465, secure: true },
|
|
3036
|
-
caldav: "https://caldav.calendar.yahoo.com/"
|
|
3037
|
-
},
|
|
3038
|
-
{
|
|
3039
|
-
id: "gmail",
|
|
3040
|
-
label: "Gmail (app password required)",
|
|
3041
|
-
note: "Enable 2FA and create an app password \u2014 Gmail rejects regular passwords for IMAP.",
|
|
3042
|
-
imap: { host: "imap.gmail.com", port: 993, secure: true },
|
|
3043
|
-
smtp: { host: "smtp.gmail.com", port: 465, secure: true }
|
|
3044
|
-
},
|
|
3045
|
-
{
|
|
3046
|
-
id: "outlook",
|
|
3047
|
-
label: "Outlook (app password required)",
|
|
3048
|
-
note: "Modern auth not supported \u2014 generate an app password in Microsoft account settings.",
|
|
3049
|
-
imap: { host: "outlook.office365.com", port: 993, secure: true },
|
|
3050
|
-
smtp: { host: "smtp.office365.com", port: 587, secure: false }
|
|
3051
|
-
},
|
|
3052
|
-
{
|
|
3053
|
-
id: "custom",
|
|
3054
|
-
label: "Custom",
|
|
3055
|
-
imap: { host: "", port: 993, secure: true },
|
|
3056
|
-
smtp: { host: "", port: 465, secure: true }
|
|
3057
|
-
}
|
|
3058
|
-
];
|
|
3059
|
-
function MailConnectModal({ open, onClose }) {
|
|
3060
|
-
const { isConnected, user, capabilities, login, logout, loading, error } = useMailAuth();
|
|
3061
|
-
const [presetId, setPresetId] = useState("fastmail");
|
|
3062
|
-
const preset = PRESETS.find((p) => p.id === presetId) || PRESETS[0];
|
|
3063
|
-
const prefill = typeof window !== "undefined" ? localStorage.getItem("mail_login_prefill_email") || "" : "";
|
|
3064
|
-
const [email, setEmail] = useState(prefill);
|
|
3065
|
-
const [password, setPassword] = useState("");
|
|
3066
|
-
const [imapHost, setImapHost] = useState(preset.imap.host);
|
|
3067
|
-
const [imapPort, setImapPort] = useState(preset.imap.port);
|
|
3068
|
-
const [imapSecure, setImapSecure] = useState(preset.imap.secure);
|
|
3069
|
-
const [smtpHost, setSmtpHost] = useState(preset.smtp.host);
|
|
3070
|
-
const [smtpPort, setSmtpPort] = useState(preset.smtp.port);
|
|
3071
|
-
const [smtpSecure, setSmtpSecure] = useState(preset.smtp.secure);
|
|
3072
|
-
const [caldavUrl, setCaldavUrl] = useState(preset.caldav || "");
|
|
3073
|
-
const [localError, setLocalError] = useState(null);
|
|
3074
|
-
useEffect(() => {
|
|
3075
|
-
setImapHost(preset.imap.host);
|
|
3076
|
-
setImapPort(preset.imap.port);
|
|
3077
|
-
setImapSecure(preset.imap.secure);
|
|
3078
|
-
setSmtpHost(preset.smtp.host);
|
|
3079
|
-
setSmtpPort(preset.smtp.port);
|
|
3080
|
-
setSmtpSecure(preset.smtp.secure);
|
|
3081
|
-
setCaldavUrl(preset.caldav || "");
|
|
3082
|
-
}, [preset]);
|
|
3083
|
-
async function handleSubmit(e) {
|
|
3084
|
-
e.preventDefault();
|
|
3085
|
-
setLocalError(null);
|
|
3086
|
-
if (!email || !password) {
|
|
3087
|
-
setLocalError("Email and password are required");
|
|
3088
|
-
return;
|
|
3089
|
-
}
|
|
3090
|
-
const payload = {
|
|
3091
|
-
imap: { host: imapHost, port: imapPort, secure: imapSecure, user: email, pass: password },
|
|
3092
|
-
smtp: { host: smtpHost, port: smtpPort, secure: smtpSecure, user: email, pass: password },
|
|
3093
|
-
caldav: caldavUrl ? { serverUrl: caldavUrl, user: email, pass: password } : void 0
|
|
3094
|
-
};
|
|
3095
|
-
try {
|
|
3096
|
-
await login(payload);
|
|
3097
|
-
onClose();
|
|
3098
|
-
} catch {
|
|
3099
|
-
}
|
|
3100
|
-
}
|
|
3101
|
-
return /* @__PURE__ */ jsxs(Modal, { open, onClose, title: "Mail & Calendar", size: "md", children: [
|
|
3102
|
-
isConnected ? /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
3103
|
-
/* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-green-200 bg-green-50 p-4", children: [
|
|
3104
|
-
/* @__PURE__ */ jsxs("p", { className: "text-sm font-medium text-green-900", children: [
|
|
3105
|
-
"Connected as ",
|
|
3106
|
-
user?.email
|
|
3107
|
-
] }),
|
|
3108
|
-
/* @__PURE__ */ jsxs("p", { className: "text-xs text-green-700 mt-1", children: [
|
|
3109
|
-
"IMAP: ok \xB7 SMTP: ok \xB7 CalDAV: ",
|
|
3110
|
-
capabilities?.caldav ? "ok" : "not configured"
|
|
3111
|
-
] })
|
|
3112
|
-
] }),
|
|
3113
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500", children: "Disconnect to switch accounts. Credentials are not persisted to disk \u2014 restarting the bridge server signs you out." })
|
|
3114
|
-
] }) : /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
|
|
3115
|
-
/* @__PURE__ */ jsxs("label", { className: "block", children: [
|
|
3116
|
-
/* @__PURE__ */ jsx("span", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Provider" }),
|
|
3117
|
-
/* @__PURE__ */ jsx(
|
|
3118
|
-
"select",
|
|
3119
|
-
{
|
|
3120
|
-
value: presetId,
|
|
3121
|
-
onChange: (e) => setPresetId(e.target.value),
|
|
3122
|
-
className: "w-full rounded-md border border-gray-300 px-3 py-2 text-sm",
|
|
3123
|
-
children: PRESETS.map((p) => /* @__PURE__ */ jsx("option", { value: p.id, children: p.label }, p.id))
|
|
3124
|
-
}
|
|
3125
|
-
)
|
|
3126
|
-
] }),
|
|
3127
|
-
preset.note && /* @__PURE__ */ jsx("p", { className: "text-[11px] text-amber-700 bg-amber-50 border border-amber-200 rounded p-2", children: preset.note }),
|
|
3128
|
-
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
|
|
3129
|
-
/* @__PURE__ */ jsxs("label", { className: "block col-span-2", children: [
|
|
3130
|
-
/* @__PURE__ */ jsx("span", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Email" }),
|
|
3131
|
-
/* @__PURE__ */ jsx(
|
|
3132
|
-
"input",
|
|
3133
|
-
{
|
|
3134
|
-
type: "email",
|
|
3135
|
-
value: email,
|
|
3136
|
-
onChange: (e) => setEmail(e.target.value),
|
|
3137
|
-
autoComplete: "username",
|
|
3138
|
-
className: "w-full rounded-md border border-gray-300 px-3 py-2 text-sm"
|
|
3139
|
-
}
|
|
3140
|
-
)
|
|
3141
|
-
] }),
|
|
3142
|
-
/* @__PURE__ */ jsxs("label", { className: "block col-span-2", children: [
|
|
3143
|
-
/* @__PURE__ */ jsx("span", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Password" }),
|
|
3144
|
-
/* @__PURE__ */ jsx(
|
|
3145
|
-
"input",
|
|
3146
|
-
{
|
|
3147
|
-
type: "password",
|
|
3148
|
-
value: password,
|
|
3149
|
-
onChange: (e) => setPassword(e.target.value),
|
|
3150
|
-
autoComplete: "current-password",
|
|
3151
|
-
className: "w-full rounded-md border border-gray-300 px-3 py-2 text-sm"
|
|
3152
|
-
}
|
|
3153
|
-
)
|
|
3154
|
-
] })
|
|
3155
|
-
] }),
|
|
3156
|
-
/* @__PURE__ */ jsxs("fieldset", { className: "border border-gray-200 rounded-md p-3", children: [
|
|
3157
|
-
/* @__PURE__ */ jsx("legend", { className: "px-1 text-xs font-medium text-gray-600", children: "IMAP (incoming)" }),
|
|
3158
|
-
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
|
|
3159
|
-
/* @__PURE__ */ jsxs("label", { className: "block col-span-2", children: [
|
|
3160
|
-
/* @__PURE__ */ jsx("span", { className: "block text-[11px] text-gray-600 mb-1", children: "Host" }),
|
|
3161
|
-
/* @__PURE__ */ jsx("input", { value: imapHost, onChange: (e) => setImapHost(e.target.value), className: "w-full rounded border border-gray-300 px-2 py-1 text-sm" })
|
|
3162
|
-
] }),
|
|
3163
|
-
/* @__PURE__ */ jsxs("label", { className: "block", children: [
|
|
3164
|
-
/* @__PURE__ */ jsx("span", { className: "block text-[11px] text-gray-600 mb-1", children: "Port" }),
|
|
3165
|
-
/* @__PURE__ */ jsx("input", { type: "number", value: imapPort, onChange: (e) => setImapPort(Number(e.target.value)), className: "w-full rounded border border-gray-300 px-2 py-1 text-sm" })
|
|
3166
|
-
] }),
|
|
3167
|
-
/* @__PURE__ */ jsxs("label", { className: "col-span-3 flex items-center gap-2 text-xs text-gray-600 mt-1", children: [
|
|
3168
|
-
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: imapSecure, onChange: (e) => setImapSecure(e.target.checked) }),
|
|
3169
|
-
"Use TLS/SSL (recommended for port 993)"
|
|
3170
|
-
] })
|
|
3171
|
-
] })
|
|
3172
|
-
] }),
|
|
3173
|
-
/* @__PURE__ */ jsxs("fieldset", { className: "border border-gray-200 rounded-md p-3", children: [
|
|
3174
|
-
/* @__PURE__ */ jsx("legend", { className: "px-1 text-xs font-medium text-gray-600", children: "SMTP (outgoing)" }),
|
|
3175
|
-
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
|
|
3176
|
-
/* @__PURE__ */ jsxs("label", { className: "block col-span-2", children: [
|
|
3177
|
-
/* @__PURE__ */ jsx("span", { className: "block text-[11px] text-gray-600 mb-1", children: "Host" }),
|
|
3178
|
-
/* @__PURE__ */ jsx("input", { value: smtpHost, onChange: (e) => setSmtpHost(e.target.value), className: "w-full rounded border border-gray-300 px-2 py-1 text-sm" })
|
|
3179
|
-
] }),
|
|
3180
|
-
/* @__PURE__ */ jsxs("label", { className: "block", children: [
|
|
3181
|
-
/* @__PURE__ */ jsx("span", { className: "block text-[11px] text-gray-600 mb-1", children: "Port" }),
|
|
3182
|
-
/* @__PURE__ */ jsx("input", { type: "number", value: smtpPort, onChange: (e) => setSmtpPort(Number(e.target.value)), className: "w-full rounded border border-gray-300 px-2 py-1 text-sm" })
|
|
3183
|
-
] }),
|
|
3184
|
-
/* @__PURE__ */ jsxs("label", { className: "col-span-3 flex items-center gap-2 text-xs text-gray-600 mt-1", children: [
|
|
3185
|
-
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: smtpSecure, onChange: (e) => setSmtpSecure(e.target.checked) }),
|
|
3186
|
-
"Use TLS/SSL (recommended for port 465)"
|
|
3187
|
-
] })
|
|
3188
|
-
] })
|
|
3189
|
-
] }),
|
|
3190
|
-
/* @__PURE__ */ jsxs("fieldset", { className: "border border-gray-200 rounded-md p-3", children: [
|
|
3191
|
-
/* @__PURE__ */ jsx("legend", { className: "px-1 text-xs font-medium text-gray-600", children: "CalDAV (optional)" }),
|
|
3192
|
-
/* @__PURE__ */ jsxs("label", { className: "block", children: [
|
|
3193
|
-
/* @__PURE__ */ jsx("span", { className: "block text-[11px] text-gray-600 mb-1", children: "Server URL" }),
|
|
3194
|
-
/* @__PURE__ */ jsx(
|
|
3195
|
-
"input",
|
|
3196
|
-
{
|
|
3197
|
-
type: "url",
|
|
3198
|
-
value: caldavUrl,
|
|
3199
|
-
onChange: (e) => setCaldavUrl(e.target.value),
|
|
3200
|
-
placeholder: "https://caldav.example.com/",
|
|
3201
|
-
className: "w-full rounded border border-gray-300 px-2 py-1 text-sm"
|
|
3202
|
-
}
|
|
3203
|
-
)
|
|
3204
|
-
] }),
|
|
3205
|
-
/* @__PURE__ */ jsx("p", { className: "text-[10px] text-gray-500 mt-1", children: "Leave blank to skip calendar setup." })
|
|
3206
|
-
] }),
|
|
3207
|
-
(localError || error) && /* @__PURE__ */ jsx("p", { className: "text-sm text-red-600 bg-red-50 border border-red-200 rounded p-2", children: localError || error })
|
|
3208
|
-
] }),
|
|
3209
|
-
/* @__PURE__ */ jsx(ModalActions, { children: isConnected ? /* @__PURE__ */ jsx(
|
|
3210
|
-
"button",
|
|
3211
|
-
{
|
|
3212
|
-
onClick: logout,
|
|
3213
|
-
disabled: loading,
|
|
3214
|
-
className: "inline-flex items-center gap-1.5 text-red-600 border border-red-200 bg-white px-4 py-2 text-sm font-medium rounded-lg hover:bg-red-50 disabled:opacity-50",
|
|
3215
|
-
children: loading ? "Disconnecting\u2026" : "Disconnect"
|
|
3216
|
-
}
|
|
3217
|
-
) : /* @__PURE__ */ jsx(
|
|
3218
|
-
"button",
|
|
3219
|
-
{
|
|
3220
|
-
type: "button",
|
|
3221
|
-
onClick: (e) => handleSubmit(e),
|
|
3222
|
-
disabled: loading,
|
|
3223
|
-
className: "inline-flex items-center gap-2 bg-gray-900 text-white px-5 py-2 text-sm font-medium rounded-lg hover:bg-gray-800 disabled:opacity-50",
|
|
3224
|
-
children: loading ? "Connecting\u2026" : "Connect"
|
|
3225
|
-
}
|
|
3226
|
-
) })
|
|
3227
|
-
] });
|
|
3228
|
-
}
|
|
3229
3012
|
function useClickOutside(ref, onClose) {
|
|
3230
3013
|
useEffect(() => {
|
|
3231
3014
|
const handler = (e) => {
|
|
@@ -4693,14 +4476,11 @@ function TaskbarClock() {
|
|
|
4693
4476
|
const rect = buttonRef.current?.getBoundingClientRect();
|
|
4694
4477
|
const right = rect ? Math.max(8, window.innerWidth - rect.right) : 8;
|
|
4695
4478
|
const posStyle = taskbarPos === "top" ? { right, top: (rect?.bottom ?? 0) + 4 } : { right, bottom: window.innerHeight - (rect?.top ?? 0) + 4 };
|
|
4696
|
-
return /* @__PURE__ */ jsx("div", { className: "fixed z-[300] rounded-lg border border-gray-200 bg-white shadow-xl", style: posStyle, children: /* @__PURE__ */ jsx(CalendarPopup, { now
|
|
4697
|
-
openPage("/calendar");
|
|
4698
|
-
setOpen(false);
|
|
4699
|
-
} }) });
|
|
4479
|
+
return /* @__PURE__ */ jsx("div", { className: "fixed z-[300] rounded-lg border border-gray-200 bg-white shadow-xl", style: posStyle, children: /* @__PURE__ */ jsx(CalendarPopup, { now }) });
|
|
4700
4480
|
})()
|
|
4701
4481
|
] });
|
|
4702
4482
|
}
|
|
4703
|
-
function CalendarPopup({ now
|
|
4483
|
+
function CalendarPopup({ now }) {
|
|
4704
4484
|
const [month, setMonth] = useState(() => new Date(now.getFullYear(), now.getMonth(), 1));
|
|
4705
4485
|
const monthLabel = month.toLocaleDateString(void 0, { month: "long", year: "numeric" });
|
|
4706
4486
|
const fullDate = now.toLocaleDateString(void 0, { weekday: "long", month: "long", day: "numeric" });
|
|
@@ -4747,18 +4527,7 @@ function CalendarPopup({ now, onOpenCalendar }) {
|
|
|
4747
4527
|
},
|
|
4748
4528
|
i
|
|
4749
4529
|
);
|
|
4750
|
-
}) })
|
|
4751
|
-
/* @__PURE__ */ jsx("div", { className: "mt-2 pt-2 border-t border-gray-100", children: /* @__PURE__ */ jsxs(
|
|
4752
|
-
"button",
|
|
4753
|
-
{
|
|
4754
|
-
onClick: onOpenCalendar,
|
|
4755
|
-
className: "w-full text-[11px] font-medium text-gray-500 hover:text-blue-600 hover:bg-blue-50 rounded py-1 transition-colors flex items-center justify-center gap-1.5",
|
|
4756
|
-
children: [
|
|
4757
|
-
/* @__PURE__ */ jsx("svg", { className: "h-3.5 w-3.5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5" }) }),
|
|
4758
|
-
"Open Calendar"
|
|
4759
|
-
]
|
|
4760
|
-
}
|
|
4761
|
-
) })
|
|
4530
|
+
}) })
|
|
4762
4531
|
] });
|
|
4763
4532
|
}
|
|
4764
4533
|
function TaskbarContextMenu({ x, y, position, size, onChangePosition, onChangeSize, onClose, onReportBug }) {
|
|
@@ -4826,14 +4595,12 @@ function Layout({
|
|
|
4826
4595
|
categories = startMenuCategories,
|
|
4827
4596
|
notifications,
|
|
4828
4597
|
search,
|
|
4829
|
-
taskbarTrayLeft
|
|
4830
|
-
showMail = true
|
|
4598
|
+
taskbarTrayLeft
|
|
4831
4599
|
} = {}) {
|
|
4832
4600
|
const bugReport = useBugReport();
|
|
4833
4601
|
const { user, logout, hasAnyPerm } = useAuth();
|
|
4834
4602
|
const { openPage, openEntity, openWindows } = useWindowManager();
|
|
4835
4603
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
4836
|
-
useEmailUnreadCount();
|
|
4837
4604
|
const isMobile = useIsMobile();
|
|
4838
4605
|
const profile = user || {};
|
|
4839
4606
|
useTheme();
|
|
@@ -4892,14 +4659,7 @@ function Layout({
|
|
|
4892
4659
|
const [balloonDismissed, setBalloonDismissed] = useState(false);
|
|
4893
4660
|
const [isFullscreen, setIsFullscreen] = useState(!!document.fullscreenElement);
|
|
4894
4661
|
const [taskbarMenu, setTaskbarMenu] = useState(null);
|
|
4895
|
-
const [mailConnectOpen, setMailConnectOpen] = useState(false);
|
|
4896
|
-
const { isConnected: mailConnected } = useMailAuth();
|
|
4897
4662
|
const [showLogout, setShowLogout] = useState(false);
|
|
4898
|
-
useEffect(() => {
|
|
4899
|
-
const handler = () => setMailConnectOpen(true);
|
|
4900
|
-
window.addEventListener("open-mail-connect", handler);
|
|
4901
|
-
return () => window.removeEventListener("open-mail-connect", handler);
|
|
4902
|
-
}, []);
|
|
4903
4663
|
const savePref = useCallback((key, value) => {
|
|
4904
4664
|
savePrefs({ [key]: value });
|
|
4905
4665
|
}, [savePrefs]);
|
|
@@ -5157,18 +4917,9 @@ function Layout({
|
|
|
5157
4917
|
/* @__PURE__ */ jsx("div", { id: "taskbar-windows", className: `flex-1 flex ${isVerticalTaskbar ? "flex-col items-center gap-1 min-h-0 overflow-y-auto w-full" : "items-center gap-1.5 min-w-0 overflow-x-auto"}` }),
|
|
5158
4918
|
/* @__PURE__ */ jsx("div", { className: isVerticalTaskbar ? "h-px w-6 bg-gray-300 my-1" : "w-px h-6 bg-gray-300 mx-1" }),
|
|
5159
4919
|
isVerticalTaskbar ? (
|
|
5160
|
-
/* Vertical: clock +
|
|
4920
|
+
/* Vertical: clock + bell evenly spaced */
|
|
5161
4921
|
/* @__PURE__ */ jsx("div", { className: "w-full px-2", children: /* @__PURE__ */ jsxs("div", { className: `flex items-center justify-center gap-2 ${taskbarPosition === "right" ? "flex-row-reverse" : ""}`, children: [
|
|
5162
4922
|
/* @__PURE__ */ jsx(TaskbarClock, {}),
|
|
5163
|
-
showMail && /* @__PURE__ */ jsx(
|
|
5164
|
-
"button",
|
|
5165
|
-
{
|
|
5166
|
-
onClick: () => setMailConnectOpen(true),
|
|
5167
|
-
title: mailConnected ? "Mail & Calendar Connected" : "Connect Mail & Calendar",
|
|
5168
|
-
className: `shrink-0 rounded-md p-1.5 transition-colors ${mailConnected ? "hover:bg-green-50 text-green-600" : "text-gray-500 hover:text-gray-900 hover:bg-gray-200"}`,
|
|
5169
|
-
children: /* @__PURE__ */ jsx("svg", { className: "h-3.5 w-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.8, children: /* @__PURE__ */ jsx("path", { d: "M3 7l9 6 9-6M5 5h14a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2z", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
5170
|
-
}
|
|
5171
|
-
),
|
|
5172
4923
|
/* @__PURE__ */ jsx(TaskbarPomodoro, {}),
|
|
5173
4924
|
taskbarTrayLeft,
|
|
5174
4925
|
notifications && /* @__PURE__ */ jsx(NotificationBell, { ...notifications, popDirection: taskbarPosition === "right" ? "left" : "right" })
|
|
@@ -5179,15 +4930,6 @@ function Layout({
|
|
|
5179
4930
|
/* @__PURE__ */ jsx(TaskbarPomodoro, {}),
|
|
5180
4931
|
taskbarTrayLeft,
|
|
5181
4932
|
notifications && /* @__PURE__ */ jsx(NotificationBell, { ...notifications }),
|
|
5182
|
-
showMail && /* @__PURE__ */ jsx(
|
|
5183
|
-
"button",
|
|
5184
|
-
{
|
|
5185
|
-
onClick: () => setMailConnectOpen(true),
|
|
5186
|
-
title: mailConnected ? "Mail & Calendar Connected" : "Connect Mail & Calendar",
|
|
5187
|
-
className: `shrink-0 rounded-md p-2 transition-colors ${mailConnected ? "hover:bg-green-50 text-green-600" : "text-gray-500 hover:text-gray-900 hover:bg-gray-200"}`,
|
|
5188
|
-
children: /* @__PURE__ */ jsx("svg", { className: "h-4 w-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.8, children: /* @__PURE__ */ jsx("path", { d: "M3 7l9 6 9-6M5 5h14a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2z", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
5189
|
-
}
|
|
5190
|
-
),
|
|
5191
4933
|
/* @__PURE__ */ jsx(TaskbarClock, {})
|
|
5192
4934
|
] })
|
|
5193
4935
|
)
|
|
@@ -5216,8 +4958,7 @@ function Layout({
|
|
|
5216
4958
|
}
|
|
5217
4959
|
),
|
|
5218
4960
|
/* @__PURE__ */ jsx(GlobalSearch, { ...search }),
|
|
5219
|
-
/* @__PURE__ */ jsx(ShortcutHelp, {})
|
|
5220
|
-
/* @__PURE__ */ jsx(MailConnectModal, { open: mailConnectOpen, onClose: () => setMailConnectOpen(false) })
|
|
4961
|
+
/* @__PURE__ */ jsx(ShortcutHelp, {})
|
|
5221
4962
|
] });
|
|
5222
4963
|
}
|
|
5223
4964
|
var THEMES = [
|
|
@@ -6633,6 +6374,6 @@ function useEditHotkey(callback) {
|
|
|
6633
6374
|
}, [callback, isActive]);
|
|
6634
6375
|
}
|
|
6635
6376
|
|
|
6636
|
-
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BehaviorPanel, BugReportConfigProvider, BugReportDetail, BugReportProvider, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Customization, DEV_BANNER_TEXT, Desktop, DesktopHostProvider, DevIndicator, ENTER, EntityList, GlobalSearch, HelpCenter, Layout, ListFooter, MOD,
|
|
6377
|
+
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BehaviorPanel, BugReportConfigProvider, BugReportDetail, BugReportProvider, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Customization, DEV_BANNER_TEXT, Desktop, DesktopHostProvider, DevIndicator, ENTER, EntityList, GlobalSearch, HelpCenter, Layout, ListFooter, MOD, Markdown, NotificationBell, ResizableTable, SHIFT, ShellEntityFetcherProvider, ShortcutHelp, SoundsPanel, StartMenu, StatusBadge, StatusBadgeProvider, SystemPreferences, VERSION, WidgetManager, applyDevTitle, createWindowRegistry, isDevEnv, isMac, openBugReportDialog, reportBug, useBugReport, useClickOutside, useColumnConfig, useDesktopHost, useEditHotkey, useInfiniteScroll, useNewHotkey, useShellEntityFetcher, useSort, useTableNav };
|
|
6637
6378
|
//# sourceMappingURL=index.js.map
|
|
6638
6379
|
//# sourceMappingURL=index.js.map
|