react-os-shell 0.2.41 → 0.2.42
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/{WorldClock-OAVNGMET.js → WorldClock-GCN4NKQT.js} +3 -3
- package/dist/{WorldClock-OAVNGMET.js.map → WorldClock-GCN4NKQT.js.map} +1 -1
- package/dist/apps/index.js +1 -1
- package/dist/{chunk-L7SQZFP3.js → chunk-WAMARCOS.js} +11 -45
- package/dist/chunk-WAMARCOS.js.map +1 -0
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-L7SQZFP3.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ALL_TIMEZONES } from './chunk-
|
|
1
|
+
import { ALL_TIMEZONES } from './chunk-WAMARCOS.js';
|
|
2
2
|
import './chunk-PDFQNHW7.js';
|
|
3
3
|
import './chunk-NSU7OHPC.js';
|
|
4
4
|
import './chunk-46LICZUM.js';
|
|
@@ -110,5 +110,5 @@ function WorldClock() {
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
export { WorldClock as default };
|
|
113
|
-
//# sourceMappingURL=WorldClock-
|
|
114
|
-
//# sourceMappingURL=WorldClock-
|
|
113
|
+
//# sourceMappingURL=WorldClock-GCN4NKQT.js.map
|
|
114
|
+
//# sourceMappingURL=WorldClock-GCN4NKQT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/apps/WorldClock.tsx"],"names":[],"mappings":"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","file":"WorldClock-OAVNGMET.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport { useWidgetSettings } from '../shell/Modal';\nimport WidgetSettingsModal, { loadAppearance, type WidgetAppearance } from '../shell/WidgetSettingsModal';\nimport { useShellPrefs } from '../shell/ShellPrefs';\nimport { ALL_TIMEZONES } from '../shell/Layout';\n\nconst DEFAULT_CLOCKS = ['Europe/London', 'Asia/Shanghai', 'America/Los_Angeles', 'America/New_York'];\nconst SETTINGS_KEY = 'world_clock_appearance';\n\n/**\n * World Clock widget — same shape as Currency / Weather. Theme-aware bg via\n * `--window-content-rgb`, settings opened via the right-click menu (no\n * inline \"+ Add World Clock\" button anymore — that lives in the\n * <WidgetSettingsModal> alongside the appearance sliders).\n */\nexport default function WorldClock() {\n const [now, setNow] = useState(new Date());\n const [appearance, setAppearance] = useState(() => loadAppearance(SETTINGS_KEY));\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [configClocks, setConfigClocks] = useState<string[]>([]);\n const [configAppearance, setConfigAppearance] = useState<WidgetAppearance>(appearance);\n\n const { prefs, save } = useShellPrefs();\n const worldClocks: string[] = (prefs.world_clocks as string[] | undefined) ?? DEFAULT_CLOCKS;\n\n useEffect(() => {\n const t = setInterval(() => setNow(new Date()), 10000);\n return () => clearInterval(t);\n }, []);\n\n useWidgetSettings(useCallback(() => {\n setConfigClocks([...worldClocks]);\n setConfigAppearance({ ...appearance });\n setSettingsOpen(true);\n }, [worldClocks, appearance]));\n\n const fmtTime = (tz: string) => now.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', timeZone: tz });\n const fmtOffset = (tz: string) => {\n const parts = new Intl.DateTimeFormat('en', { timeZone: tz, timeZoneName: 'shortOffset' }).formatToParts(now);\n return parts.find(p => p.type === 'timeZoneName')?.value || '';\n };\n const fmtDate = (tz: string) => now.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric', timeZone: tz });\n\n const localTz = (typeof localStorage !== 'undefined' && localStorage.getItem('user_timezone'))\n || Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n const saveSettings = () => {\n if (configClocks.length === 0) return;\n save({ world_clocks: configClocks });\n setAppearance(configAppearance);\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(configAppearance));\n setSettingsOpen(false);\n };\n\n const labelFor = (tz: string) =>\n ALL_TIMEZONES.find(t => t.tz === tz)?.label\n || tz.split('/').pop()?.replace(/_/g, ' ')\n || tz;\n\n return (\n <>\n {/* Theme-aware background — matches the Currency widget. */}\n <div className=\"flex flex-col h-full rounded-lg\"\n style={{\n backgroundColor: `rgb(var(--window-content-rgb) / ${appearance.activeOpacity / 100})`,\n backdropFilter: appearance.activeBlur > 0 ? `blur(${appearance.activeBlur}px)` : undefined,\n }}>\n {/* Local time header */}\n <div className=\"px-3 pt-2.5 pb-2 border-b border-gray-200/50\">\n <p className=\"text-[10px] font-medium text-gray-500 uppercase tracking-wide\">Local Time</p>\n <div className=\"flex items-baseline justify-between mt-0.5\">\n <span className=\"text-2xl font-semibold text-gray-800 tabular-nums\">{fmtTime(localTz)}</span>\n <span className=\"text-[10px] text-gray-400\">{fmtOffset(localTz)}</span>\n </div>\n <p className=\"text-[10px] text-gray-500 mt-0.5 truncate\">{fmtDate(localTz)} · {localTz.replace(/_/g, ' ')}</p>\n </div>\n\n {/* Cities */}\n <div className=\"px-3 py-2 space-y-0.5 flex-1\">\n {worldClocks.length === 0 && (\n <p className=\"text-xs text-gray-400 text-center py-3\">No cities — right-click to add.</p>\n )}\n {worldClocks.map(tz => (\n <div key={tz} className=\"flex items-center justify-between py-1.5 border-b border-gray-200/50 last:border-0\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-gray-800 truncate\">{labelFor(tz)}</p>\n <p className=\"text-[10px] text-gray-400 tabular-nums\">{fmtOffset(tz)}</p>\n </div>\n <span className=\"text-sm font-semibold text-gray-700 tabular-nums shrink-0\">{fmtTime(tz)}</span>\n </div>\n ))}\n </div>\n </div>\n\n <WidgetSettingsModal open={settingsOpen} onClose={() => setSettingsOpen(false)} title=\"World Clock Settings\"\n appearance={configAppearance} onAppearanceChange={setConfigAppearance} onSave={saveSettings}>\n <div>\n <h3 className=\"text-sm font-semibold text-gray-700 mb-2\">Cities</h3>\n <div className=\"grid grid-cols-2 gap-1 max-h-56 overflow-y-auto\">\n {ALL_TIMEZONES.filter(t => t.tz !== localTz).map(({ tz, label }) => (\n <label key={tz} className=\"flex items-center gap-2 text-sm py-1 cursor-pointer hover:bg-gray-50 rounded px-2\">\n <input type=\"checkbox\" checked={configClocks.includes(tz)}\n onChange={() => setConfigClocks(prev => prev.includes(tz) ? prev.filter(t => t !== tz) : [...prev, tz])}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500 h-3.5 w-3.5\" />\n {label}\n </label>\n ))}\n </div>\n </div>\n </WidgetSettingsModal>\n </>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/apps/WorldClock.tsx"],"names":[],"mappings":"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","file":"WorldClock-GCN4NKQT.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport { useWidgetSettings } from '../shell/Modal';\nimport WidgetSettingsModal, { loadAppearance, type WidgetAppearance } from '../shell/WidgetSettingsModal';\nimport { useShellPrefs } from '../shell/ShellPrefs';\nimport { ALL_TIMEZONES } from '../shell/Layout';\n\nconst DEFAULT_CLOCKS = ['Europe/London', 'Asia/Shanghai', 'America/Los_Angeles', 'America/New_York'];\nconst SETTINGS_KEY = 'world_clock_appearance';\n\n/**\n * World Clock widget — same shape as Currency / Weather. Theme-aware bg via\n * `--window-content-rgb`, settings opened via the right-click menu (no\n * inline \"+ Add World Clock\" button anymore — that lives in the\n * <WidgetSettingsModal> alongside the appearance sliders).\n */\nexport default function WorldClock() {\n const [now, setNow] = useState(new Date());\n const [appearance, setAppearance] = useState(() => loadAppearance(SETTINGS_KEY));\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [configClocks, setConfigClocks] = useState<string[]>([]);\n const [configAppearance, setConfigAppearance] = useState<WidgetAppearance>(appearance);\n\n const { prefs, save } = useShellPrefs();\n const worldClocks: string[] = (prefs.world_clocks as string[] | undefined) ?? DEFAULT_CLOCKS;\n\n useEffect(() => {\n const t = setInterval(() => setNow(new Date()), 10000);\n return () => clearInterval(t);\n }, []);\n\n useWidgetSettings(useCallback(() => {\n setConfigClocks([...worldClocks]);\n setConfigAppearance({ ...appearance });\n setSettingsOpen(true);\n }, [worldClocks, appearance]));\n\n const fmtTime = (tz: string) => now.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', timeZone: tz });\n const fmtOffset = (tz: string) => {\n const parts = new Intl.DateTimeFormat('en', { timeZone: tz, timeZoneName: 'shortOffset' }).formatToParts(now);\n return parts.find(p => p.type === 'timeZoneName')?.value || '';\n };\n const fmtDate = (tz: string) => now.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric', timeZone: tz });\n\n const localTz = (typeof localStorage !== 'undefined' && localStorage.getItem('user_timezone'))\n || Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n const saveSettings = () => {\n if (configClocks.length === 0) return;\n save({ world_clocks: configClocks });\n setAppearance(configAppearance);\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(configAppearance));\n setSettingsOpen(false);\n };\n\n const labelFor = (tz: string) =>\n ALL_TIMEZONES.find(t => t.tz === tz)?.label\n || tz.split('/').pop()?.replace(/_/g, ' ')\n || tz;\n\n return (\n <>\n {/* Theme-aware background — matches the Currency widget. */}\n <div className=\"flex flex-col h-full rounded-lg\"\n style={{\n backgroundColor: `rgb(var(--window-content-rgb) / ${appearance.activeOpacity / 100})`,\n backdropFilter: appearance.activeBlur > 0 ? `blur(${appearance.activeBlur}px)` : undefined,\n }}>\n {/* Local time header */}\n <div className=\"px-3 pt-2.5 pb-2 border-b border-gray-200/50\">\n <p className=\"text-[10px] font-medium text-gray-500 uppercase tracking-wide\">Local Time</p>\n <div className=\"flex items-baseline justify-between mt-0.5\">\n <span className=\"text-2xl font-semibold text-gray-800 tabular-nums\">{fmtTime(localTz)}</span>\n <span className=\"text-[10px] text-gray-400\">{fmtOffset(localTz)}</span>\n </div>\n <p className=\"text-[10px] text-gray-500 mt-0.5 truncate\">{fmtDate(localTz)} · {localTz.replace(/_/g, ' ')}</p>\n </div>\n\n {/* Cities */}\n <div className=\"px-3 py-2 space-y-0.5 flex-1\">\n {worldClocks.length === 0 && (\n <p className=\"text-xs text-gray-400 text-center py-3\">No cities — right-click to add.</p>\n )}\n {worldClocks.map(tz => (\n <div key={tz} className=\"flex items-center justify-between py-1.5 border-b border-gray-200/50 last:border-0\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-gray-800 truncate\">{labelFor(tz)}</p>\n <p className=\"text-[10px] text-gray-400 tabular-nums\">{fmtOffset(tz)}</p>\n </div>\n <span className=\"text-sm font-semibold text-gray-700 tabular-nums shrink-0\">{fmtTime(tz)}</span>\n </div>\n ))}\n </div>\n </div>\n\n <WidgetSettingsModal open={settingsOpen} onClose={() => setSettingsOpen(false)} title=\"World Clock Settings\"\n appearance={configAppearance} onAppearanceChange={setConfigAppearance} onSave={saveSettings}>\n <div>\n <h3 className=\"text-sm font-semibold text-gray-700 mb-2\">Cities</h3>\n <div className=\"grid grid-cols-2 gap-1 max-h-56 overflow-y-auto\">\n {ALL_TIMEZONES.filter(t => t.tz !== localTz).map(({ tz, label }) => (\n <label key={tz} className=\"flex items-center gap-2 text-sm py-1 cursor-pointer hover:bg-gray-50 rounded px-2\">\n <input type=\"checkbox\" checked={configClocks.includes(tz)}\n onChange={() => setConfigClocks(prev => prev.includes(tz) ? prev.filter(t => t !== tz) : [...prev, tz])}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500 h-3.5 w-3.5\" />\n {label}\n </label>\n ))}\n </div>\n </div>\n </WidgetSettingsModal>\n </>\n );\n}\n"]}
|
package/dist/apps/index.js
CHANGED
|
@@ -12,7 +12,7 @@ var Weather = lazy(() => import('../Weather-XTADR7Z3.js'));
|
|
|
12
12
|
var CurrencyConverter = lazy(() => import('../CurrencyConverter-XZVZ7XOF.js'));
|
|
13
13
|
var PomodoroTimer = lazy(() => import('../PomodoroTimer-T2J5NDJR.js'));
|
|
14
14
|
var Notepad = lazy(() => import('../Notepad-W3YYZ3GS.js'));
|
|
15
|
-
var WorldClock = lazy(() => import('../WorldClock-
|
|
15
|
+
var WorldClock = lazy(() => import('../WorldClock-GCN4NKQT.js'));
|
|
16
16
|
var Chess = lazy(() => import('../Chess-C5BY45NA.js'));
|
|
17
17
|
var Checkers = lazy(() => import('../Checkers-MIAHIKJH.js'));
|
|
18
18
|
var Sudoku = lazy(() => import('../Sudoku-XHLYCEVT.js'));
|
|
@@ -668,7 +668,7 @@ function BugReportAnnotator({
|
|
|
668
668
|
}
|
|
669
669
|
|
|
670
670
|
// src/version.ts
|
|
671
|
-
var VERSION = "0.2.
|
|
671
|
+
var VERSION = "0.2.42" ;
|
|
672
672
|
var APP_VERSION = VERSION;
|
|
673
673
|
|
|
674
674
|
// src/utils/reportBug.ts
|
|
@@ -3625,21 +3625,21 @@ function TaskbarClock() {
|
|
|
3625
3625
|
const [now, setNow] = useState(/* @__PURE__ */ new Date());
|
|
3626
3626
|
const [open, setOpen] = useState(false);
|
|
3627
3627
|
const [adding, setAdding] = useState(false);
|
|
3628
|
-
const [pinned, setPinned] = useState(false);
|
|
3629
3628
|
const ref = useRef(null);
|
|
3630
3629
|
const buttonRef = useRef(null);
|
|
3631
3630
|
const { prefs, save } = useShellPrefs();
|
|
3631
|
+
const { openPage } = useWindowManager();
|
|
3632
3632
|
const worldClocks = prefs.world_clocks || ["Europe/London", "Asia/Shanghai", "America/Los_Angeles", "America/New_York"];
|
|
3633
3633
|
useEffect(() => {
|
|
3634
3634
|
const t = setInterval(() => setNow(/* @__PURE__ */ new Date()), 1e4);
|
|
3635
3635
|
return () => clearInterval(t);
|
|
3636
3636
|
}, []);
|
|
3637
3637
|
useClickOutside(ref, useCallback(() => {
|
|
3638
|
-
if (open
|
|
3638
|
+
if (open) {
|
|
3639
3639
|
setOpen(false);
|
|
3640
3640
|
setAdding(false);
|
|
3641
3641
|
}
|
|
3642
|
-
}, [open
|
|
3642
|
+
}, [open]));
|
|
3643
3643
|
const fmtTime = (tz) => now.toLocaleTimeString(void 0, { hour: "2-digit", minute: "2-digit", timeZone: tz });
|
|
3644
3644
|
const fmtDate = (tz) => now.toLocaleDateString(void 0, { weekday: "short", month: "short", day: "numeric", timeZone: tz });
|
|
3645
3645
|
const fmtOffset = (tz) => {
|
|
@@ -3663,7 +3663,7 @@ function TaskbarClock() {
|
|
|
3663
3663
|
/* @__PURE__ */ jsx("p", { className: "text-[11px] font-medium text-gray-800", children: now.toLocaleTimeString(void 0, { hour: "2-digit", minute: "2-digit" }) }),
|
|
3664
3664
|
/* @__PURE__ */ jsx("p", { className: "text-[10px] text-gray-700", children: now.toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" }) })
|
|
3665
3665
|
] }),
|
|
3666
|
-
open &&
|
|
3666
|
+
open && (() => {
|
|
3667
3667
|
const taskbarPos = getComputedStyle(document.documentElement).getPropertyValue("--taskbar-position")?.trim() || "bottom";
|
|
3668
3668
|
const rect = buttonRef.current?.getBoundingClientRect();
|
|
3669
3669
|
const right = rect ? window.innerWidth - rect.right : 0;
|
|
@@ -3673,9 +3673,10 @@ function TaskbarClock() {
|
|
|
3673
3673
|
"button",
|
|
3674
3674
|
{
|
|
3675
3675
|
onClick: () => {
|
|
3676
|
-
|
|
3676
|
+
openPage("/world-clock");
|
|
3677
|
+
setOpen(false);
|
|
3677
3678
|
},
|
|
3678
|
-
title: "
|
|
3679
|
+
title: "Open as widget",
|
|
3679
3680
|
className: "absolute top-2 right-2 text-gray-300 hover:text-gray-600 transition-colors z-10",
|
|
3680
3681
|
children: /* @__PURE__ */ jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 3.75L8.25 10.5m0 0l-3-1.5L3 12.75l5.25 5.25 3.75-2.25-1.5-3L17.25 6M8.25 10.5l-3 3M17.25 6l3 3" }) })
|
|
3681
3682
|
}
|
|
@@ -3698,42 +3699,7 @@ function TaskbarClock() {
|
|
|
3698
3699
|
}
|
|
3699
3700
|
)
|
|
3700
3701
|
] });
|
|
3701
|
-
})()
|
|
3702
|
-
pinned && /* @__PURE__ */ jsx(
|
|
3703
|
-
Modal,
|
|
3704
|
-
{
|
|
3705
|
-
open: true,
|
|
3706
|
-
onClose: () => {
|
|
3707
|
-
setPinned(false);
|
|
3708
|
-
setOpen(false);
|
|
3709
|
-
},
|
|
3710
|
-
title: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
3711
|
-
/* @__PURE__ */ jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z" }) }),
|
|
3712
|
-
"World Clock"
|
|
3713
|
-
] }),
|
|
3714
|
-
size: "sm",
|
|
3715
|
-
allowPinOnTop: true,
|
|
3716
|
-
initialPosition: "top-right",
|
|
3717
|
-
widget: true,
|
|
3718
|
-
children: /* @__PURE__ */ jsx(
|
|
3719
|
-
ClockContent,
|
|
3720
|
-
{
|
|
3721
|
-
localTz,
|
|
3722
|
-
worldClocks,
|
|
3723
|
-
now,
|
|
3724
|
-
fmtTime,
|
|
3725
|
-
fmtDate,
|
|
3726
|
-
fmtOffset,
|
|
3727
|
-
removeClock,
|
|
3728
|
-
adding,
|
|
3729
|
-
setAdding,
|
|
3730
|
-
addClock,
|
|
3731
|
-
availableToAdd,
|
|
3732
|
-
showAdd: false
|
|
3733
|
-
}
|
|
3734
|
-
)
|
|
3735
|
-
}
|
|
3736
|
-
)
|
|
3702
|
+
})()
|
|
3737
3703
|
] });
|
|
3738
3704
|
}
|
|
3739
3705
|
function TaskbarContextMenu({ x, y, position, size, onChangePosition, onChangeSize, onClose, onReportBug }) {
|
|
@@ -4174,5 +4140,5 @@ function Layout({
|
|
|
4174
4140
|
}
|
|
4175
4141
|
|
|
4176
4142
|
export { ALL_TIMEZONES, ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, BugReportConfigProvider, BugReportProvider, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Desktop, DesktopHostProvider, ENTER, GlobalSearch, Layout, MOD, NotificationBell, SHIFT, ShellAuthProvider, ShortcutHelp, StartMenu, VERSION, isMac, openBugReportDialog, reportBug, setShellAuthBridge, useBugReport, useClickOutside, useDesktopHost, useShellAuth };
|
|
4177
|
-
//# sourceMappingURL=chunk-
|
|
4178
|
-
//# sourceMappingURL=chunk-
|
|
4143
|
+
//# sourceMappingURL=chunk-WAMARCOS.js.map
|
|
4144
|
+
//# sourceMappingURL=chunk-WAMARCOS.js.map
|