react-os-shell 0.1.48 → 0.1.49

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.
Files changed (38) hide show
  1. package/dist/{Browser-B3XVP6HC.js → Browser-34KKFXNU.js} +3 -3
  2. package/dist/{Browser-B3XVP6HC.js.map → Browser-34KKFXNU.js.map} +1 -1
  3. package/dist/{Calculator-HJKPXY2B.js → Calculator-LJMNOIS6.js} +4 -4
  4. package/dist/{Calculator-HJKPXY2B.js.map → Calculator-LJMNOIS6.js.map} +1 -1
  5. package/dist/{Calendar-GCQIWTU3.js → Calendar-UIF62GMX.js} +3 -3
  6. package/dist/{Calendar-GCQIWTU3.js.map → Calendar-UIF62GMX.js.map} +1 -1
  7. package/dist/{CurrencyConverter-FYF4JLKZ.js → CurrencyConverter-HFPJAIPX.js} +4 -4
  8. package/dist/{CurrencyConverter-FYF4JLKZ.js.map → CurrencyConverter-HFPJAIPX.js.map} +1 -1
  9. package/dist/{Documents-NTWVLYXJ.js → Documents-3UPQ5QTF.js} +3 -3
  10. package/dist/{Documents-NTWVLYXJ.js.map → Documents-3UPQ5QTF.js.map} +1 -1
  11. package/dist/{Email-3B63P7ML.js → Email-YPLU6HJL.js} +3 -3
  12. package/dist/{Email-3B63P7ML.js.map → Email-YPLU6HJL.js.map} +1 -1
  13. package/dist/{Files-JYXO4AXI.js → Files-IT4B7PP4.js} +174 -40
  14. package/dist/Files-IT4B7PP4.js.map +1 -0
  15. package/dist/{Minesweeper-MAA4NIV4.js → Minesweeper-UUHQCDAC.js} +3 -3
  16. package/dist/{Minesweeper-MAA4NIV4.js.map → Minesweeper-UUHQCDAC.js.map} +1 -1
  17. package/dist/{Notepad-2K6HQ2WA.js → Notepad-MSHSUSMG.js} +3 -3
  18. package/dist/{Notepad-2K6HQ2WA.js.map → Notepad-MSHSUSMG.js.map} +1 -1
  19. package/dist/{PomodoroTimer-IJUONN6I.js → PomodoroTimer-4ZYITLNH.js} +4 -4
  20. package/dist/{PomodoroTimer-IJUONN6I.js.map → PomodoroTimer-4ZYITLNH.js.map} +1 -1
  21. package/dist/Preview-IEPHQIJE.js +6 -0
  22. package/dist/{Preview-SEQ5NHLQ.js.map → Preview-IEPHQIJE.js.map} +1 -1
  23. package/dist/{Spreadsheet-W7F6IMTJ.js → Spreadsheet-QIBLYKVF.js} +3 -3
  24. package/dist/{Spreadsheet-W7F6IMTJ.js.map → Spreadsheet-QIBLYKVF.js.map} +1 -1
  25. package/dist/{Weather-MDTM6OEL.js → Weather-ZJE7DNKB.js} +4 -4
  26. package/dist/{Weather-MDTM6OEL.js.map → Weather-ZJE7DNKB.js.map} +1 -1
  27. package/dist/apps/index.js +15 -15
  28. package/dist/{chunk-UD2TKHR2.js → chunk-53CE7OVT.js} +129 -6
  29. package/dist/chunk-53CE7OVT.js.map +1 -0
  30. package/dist/{chunk-VEEO4U4E.js → chunk-K6COBRQA.js} +3 -3
  31. package/dist/{chunk-VEEO4U4E.js.map → chunk-K6COBRQA.js.map} +1 -1
  32. package/dist/{chunk-IMHD23FR.js → chunk-OZFHOQYG.js} +3 -3
  33. package/dist/{chunk-IMHD23FR.js.map → chunk-OZFHOQYG.js.map} +1 -1
  34. package/dist/index.js +4 -4
  35. package/package.json +1 -1
  36. package/dist/Files-JYXO4AXI.js.map +0 -1
  37. package/dist/Preview-SEQ5NHLQ.js +0 -6
  38. package/dist/chunk-UD2TKHR2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/apps/Weather.tsx"],"names":["t"],"mappings":"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","file":"Weather-MDTM6OEL.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';\n\n// [condition, day emoji, night emoji, day gradient, night gradient]\nconst WMO: Record<number, [string, string, string, string, string]> = {\n 0: ['Clear Sky', '☀️', '🌙', 'from-sky-400 to-blue-500', 'from-indigo-800 to-slate-900'],\n 1: ['Mainly Clear', '🌤️', '🌙', 'from-sky-400 to-blue-500', 'from-indigo-800 to-slate-900'],\n 2: ['Partly Cloudy', '⛅', '☁️', 'from-sky-400 to-blue-400', 'from-indigo-700 to-slate-800'],\n 3: ['Overcast', '☁️', '☁️', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'],\n 45: ['Foggy', '🌫️', '🌫️', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'],\n 48: ['Foggy', '🌫️', '🌫️', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'],\n 51: ['Light Drizzle', '🌦️', '🌧️', 'from-gray-400 to-blue-500', 'from-gray-700 to-indigo-800'],\n 53: ['Drizzle', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 55: ['Heavy Drizzle', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 61: ['Light Rain', '🌦️', '🌧️', 'from-gray-400 to-blue-500', 'from-gray-700 to-indigo-800'],\n 63: ['Rain', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 65: ['Heavy Rain', '🌧️', '🌧️', 'from-gray-600 to-blue-700', 'from-gray-700 to-indigo-900'],\n 71: ['Light Snow', '🌨️', '🌨️', 'from-blue-200 to-blue-400', 'from-blue-800 to-slate-900'],\n 73: ['Snow', '❄️', '❄️', 'from-blue-300 to-blue-500', 'from-blue-800 to-slate-900'],\n 75: ['Heavy Snow', '❄️', '❄️', 'from-blue-400 to-blue-600', 'from-blue-800 to-slate-900'],\n 80: ['Rain Showers', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 82: ['Heavy Showers', '🌧️', '🌧️', 'from-gray-600 to-blue-700', 'from-gray-700 to-indigo-900'],\n 95: ['Thunderstorm', '⛈️', '⛈️', 'from-gray-700 to-indigo-800', 'from-gray-800 to-indigo-950'],\n 96: ['Thunderstorm', '⛈️', '⛈️', 'from-gray-700 to-indigo-800', 'from-gray-800 to-indigo-950'],\n 99: ['Thunderstorm', '⛈️', '⛈️', 'from-gray-700 to-indigo-900', 'from-gray-800 to-indigo-950'],\n};\n\nconst getCondition = (code: number, isDay = true) => {\n const entry = WMO[code] || ['Unknown', '❓', '❓', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'];\n return [entry[0], isDay ? entry[1] : entry[2], isDay ? entry[3] : entry[4]] as [string, string, string];\n};\n\nconst AVAILABLE_CITIES: Record<string, { lat: number; lon: number }> = {\n 'Sydney': { lat: -33.8688, lon: 151.2093 },\n 'London': { lat: 51.5074, lon: -0.1278 },\n 'Los Angeles': { lat: 34.0522, lon: -118.2437 },\n 'Shanghai': { lat: 31.2304, lon: 121.4737 },\n 'New York': { lat: 40.7128, lon: -74.0060 },\n 'Tokyo': { lat: 35.6762, lon: 139.6503 },\n 'Dubai': { lat: 25.2048, lon: 55.2708 },\n 'Singapore': { lat: 1.3521, lon: 103.8198 },\n 'Hong Kong': { lat: 22.3193, lon: 114.1694 },\n 'Paris': { lat: 48.8566, lon: 2.3522 },\n 'Berlin': { lat: 52.5200, lon: 13.4050 },\n 'Mumbai': { lat: 19.0760, lon: 72.8777 },\n 'Bangkok': { lat: 13.7563, lon: 100.5018 },\n 'Melbourne': { lat: -37.8136, lon: 144.9631 },\n 'Toronto': { lat: 43.6532, lon: -79.3832 },\n 'Miami': { lat: 25.7617, lon: -80.1918 },\n 'Chicago': { lat: 41.8781, lon: -87.6298 },\n 'Auckland': { lat: -36.8485, lon: 174.7633 },\n};\n\nconst DEFAULT_CITIES = ['Sydney', 'London', 'Los Angeles', 'Shanghai'];\nconst STORAGE_KEY = 'weather_cities';\nconst SETTINGS_KEY = 'weather_appearance';\nconst CACHE_KEY = 'weather_multi_cache';\nconst CACHE_TTL = 30 * 60 * 1000;\n\ninterface CityWeather { city: string; temp: number; code: number; high: number; low: number; isDay: boolean; timezone: string }\ninterface WeatherPrefs { useFahrenheit: boolean; showLocalTime: boolean; use24Hour: boolean }\nconst DEFAULT_PREFS: WeatherPrefs = { useFahrenheit: false, showLocalTime: false, use24Hour: false };\n\nfunction loadCities(): string[] {\n try { const s = JSON.parse(localStorage.getItem(STORAGE_KEY) || ''); if (Array.isArray(s) && s.length) return s; } catch {}\n return DEFAULT_CITIES;\n}\n\nconst toF = (c: number) => Math.round(c * 9 / 5 + 32);\n\nfunction getTimeInTz(timezone: string, use24Hour = false): { hours: number; minutes: number; text: string } {\n try {\n const now = new Date();\n const h24Parts = new Intl.DateTimeFormat('en-US', { timeZone: timezone, hour: 'numeric', minute: '2-digit', hour12: false }).formatToParts(now);\n const h24 = parseInt(h24Parts.find(p => p.type === 'hour')?.value || '0');\n const m = parseInt(h24Parts.find(p => p.type === 'minute')?.value || '0');\n if (use24Hour) {\n return { hours: h24, minutes: m, text: `${String(h24).padStart(2, '0')}:${String(m).padStart(2, '0')}` };\n }\n const parts = new Intl.DateTimeFormat('en-US', { timeZone: timezone, hour: 'numeric', minute: '2-digit', hour12: true }).formatToParts(now);\n const h12 = parseInt(parts.find(p => p.type === 'hour')?.value || '12');\n const period = parts.find(p => p.type === 'dayPeriod')?.value || '';\n return { hours: h24, minutes: m, text: `${h12}:${String(m).padStart(2, '0')} ${period}` };\n } catch { return { hours: 0, minutes: 0, text: '' }; }\n}\n\n/** Tiny analog clock SVG */\nfunction MiniClock({ hours, minutes, size = 20 }: { hours: number; minutes: number; size?: number }) {\n const r = size / 2;\n const hAngle = ((hours % 12) + minutes / 60) * 30 - 90;\n const mAngle = minutes * 6 - 90;\n const hRad = (hAngle * Math.PI) / 180;\n const mRad = (mAngle * Math.PI) / 180;\n const hLen = r * 0.5;\n const mLen = r * 0.7;\n return (\n <svg width={size} height={size} className=\"shrink-0\">\n <circle cx={r} cy={r} r={r - 1} fill=\"rgba(255,255,255,0.15)\" stroke=\"rgba(255,255,255,0.4)\" strokeWidth={1} />\n {/* Hour hand */}\n <line x1={r} y1={r} x2={r + Math.cos(hRad) * hLen} y2={r + Math.sin(hRad) * hLen}\n stroke=\"white\" strokeWidth={1.5} strokeLinecap=\"round\" />\n {/* Minute hand */}\n <line x1={r} y1={r} x2={r + Math.cos(mRad) * mLen} y2={r + Math.sin(mRad) * mLen}\n stroke=\"white\" strokeWidth={1} strokeLinecap=\"round\" />\n {/* Center dot */}\n <circle cx={r} cy={r} r={1} fill=\"white\" />\n </svg>\n );\n}\n\nexport default function Weather() {\n const [cities, setCities] = useState(loadCities);\n const [appearance, setAppearance] = useState(() => loadAppearance(SETTINGS_KEY));\n const [data, setData] = useState<CityWeather[]>([]);\n const [loading, setLoading] = useState(true);\n // Tick every minute so clocks update\n const [, setTick] = useState(0);\n useEffect(() => { const t = setInterval(() => setTick(n => n + 1), 60000); return () => clearInterval(t); }, []);\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [configCities, setConfigCities] = useState<string[]>([]);\n const [configAppearance, setConfigAppearance] = useState<WidgetAppearance>(appearance);\n // Prefs live in the consumer-supplied prefs adapter so they persist\n // reliably across re-mounts without the local useState/localStorage dance.\n const { prefs: shellPrefs, save: saveShellPrefs } = useShellPrefs();\n const prefs: WeatherPrefs = { ...DEFAULT_PREFS, ...(shellPrefs.weather_prefs as WeatherPrefs | undefined ?? {}) };\n const [configPrefs, setConfigPrefs] = useState<WeatherPrefs>(prefs);\n\n useWidgetSettings(useCallback(() => {\n setConfigCities([...cities]);\n setConfigAppearance({ ...appearance });\n setConfigPrefs({ ...prefs });\n setSettingsOpen(true);\n }, [cities, appearance, prefs]));\n\n const fetchAll = useCallback(async (cityList: string[], force = false) => {\n if (!force) {\n try {\n const cached = JSON.parse(localStorage.getItem(CACHE_KEY) || '{}');\n const key = cityList.join(',');\n if (cached[key] && Date.now() - cached[key].ts < CACHE_TTL) {\n setData(cached[key].data); setLoading(false); return;\n }\n } catch {}\n }\n setLoading(true);\n const results: CityWeather[] = [];\n for (const city of cityList) {\n const coords = AVAILABLE_CITIES[city];\n if (!coords) continue;\n try {\n const res = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${coords.lat}&longitude=${coords.lon}&current=temperature_2m,weather_code,is_day&daily=temperature_2m_max,temperature_2m_min&forecast_days=1&timezone=auto`);\n const w = await res.json();\n results.push({ city, temp: Math.round(w.current.temperature_2m), code: w.current.weather_code, high: Math.round(w.daily.temperature_2m_max[0]), low: Math.round(w.daily.temperature_2m_min[0]), isDay: w.current.is_day === 1, timezone: w.timezone || 'UTC' });\n } catch {}\n }\n setData(results); setLoading(false);\n try { const c = JSON.parse(localStorage.getItem(CACHE_KEY) || '{}'); c[cityList.join(',')] = { data: results, ts: Date.now() }; localStorage.setItem(CACHE_KEY, JSON.stringify(c)); } catch {}\n }, []);\n\n useEffect(() => { fetchAll(cities); }, [cities, fetchAll]);\n\n const saveSettings = () => {\n if (configCities.length === 0) return;\n setCities(configCities);\n setAppearance(configAppearance);\n saveShellPrefs({ weather_prefs: configPrefs });\n localStorage.setItem(STORAGE_KEY, JSON.stringify(configCities));\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(configAppearance));\n setSettingsOpen(false);\n };\n\n const t = (c: number) => prefs.useFahrenheit ? `${toF(c)}°F` : `${c}°`;\n\n if (loading && data.length === 0) {\n return <div className=\"flex items-center justify-center h-full bg-gradient-to-b from-sky-400 to-blue-500 rounded-lg text-white/70 text-sm\">Loading...</div>;\n }\n\n // Use the first city's condition + day/night for the background gradient\n const firstIsDay = data.length > 0 ? data[0].isDay : true;\n const [, , gradient] = data.length > 0 ? getCondition(data[0].code, firstIsDay) : ['', '', 'from-sky-400 to-blue-500'];\n const dynamicHeight = data.length * 48 + 16;\n\n return (\n <>\n <div className={`flex flex-col bg-gradient-to-b ${gradient} rounded-lg text-white overflow-hidden`}\n style={{ minHeight: dynamicHeight, opacity: appearance.activeOpacity / 100, backdropFilter: appearance.activeBlur > 0 ? `blur(${appearance.activeBlur}px)` : undefined }}>\n <div className=\"flex-1 flex flex-col justify-between px-3 py-3\">\n {data.map(d => {\n const [condition, emoji] = getCondition(d.code, d.isDay);\n return (\n <div key={d.city} className={`flex items-center gap-2 rounded-lg px-2 py-1 -mx-1 ${d.isDay ? '' : 'bg-black/15'}`}>\n {prefs.showLocalTime && (() => {\n const time = getTimeInTz(d.timezone, prefs.use24Hour);\n return <MiniClock hours={time.hours} minutes={time.minutes} size={24} />;\n })()}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-semibold leading-tight\">{d.city}</div>\n <div className=\"text-[10px] opacity-70\">\n {prefs.showLocalTime ? getTimeInTz(d.timezone, prefs.use24Hour).text : condition}\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n <span className=\"text-lg\">{emoji}</span>\n <div className=\"text-right\">\n <div className=\"text-2xl font-light leading-none\">{t(d.temp)}</div>\n <div className=\"text-[9px] opacity-60\">H:{t(d.high)} L:{t(d.low)}</div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <WidgetSettingsModal open={settingsOpen} onClose={() => setSettingsOpen(false)} title=\"Weather Settings\"\n appearance={configAppearance} onAppearanceChange={setConfigAppearance} onSave={saveSettings}>\n <div className=\"space-y-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-gray-700 mb-2\">Display</h3>\n <div className=\"flex items-center gap-3 mb-2\">\n <span className=\"text-sm text-gray-600 w-24\">Temperature</span>\n <div className=\"flex gap-1\">\n {([{ key: false, label: '°C' }, { key: true, label: '°F' }] as const).map(o => (\n <button key={String(o.key)} onClick={() => setConfigPrefs(p => ({ ...p, useFahrenheit: o.key }))}\n className={`px-3 py-1 text-xs font-medium rounded-lg border transition-colors ${configPrefs.useFahrenheit === o.key ? 'bg-blue-600 text-white border-blue-600' : 'bg-white text-gray-700 border-gray-300 hover:bg-gray-50'}`}>\n {o.label}\n </button>\n ))}\n </div>\n </div>\n <div className=\"flex items-center gap-3 mb-2\">\n <span className=\"text-sm text-gray-600 w-24\">Time Format</span>\n <div className=\"flex gap-1\">\n {([{ key: false, label: 'AM/PM' }, { key: true, label: '24H' }] as const).map(o => (\n <button key={String(o.key)} onClick={() => setConfigPrefs(p => ({ ...p, use24Hour: o.key }))}\n className={`px-3 py-1 text-xs font-medium rounded-lg border transition-colors ${configPrefs.use24Hour === o.key ? 'bg-blue-600 text-white border-blue-600' : 'bg-white text-gray-700 border-gray-300 hover:bg-gray-50'}`}>\n {o.label}\n </button>\n ))}\n </div>\n </div>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input type=\"checkbox\" checked={configPrefs.showLocalTime} onChange={e => setConfigPrefs(p => ({ ...p, showLocalTime: e.target.checked }))}\n className=\"rounded border-gray-300 text-blue-600 h-3.5 w-3.5\" />\n <span className=\"text-sm text-gray-600\">Show local time</span>\n </label>\n </div>\n </div>\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-48 overflow-y-auto\">\n {Object.keys(AVAILABLE_CITIES).map(city => (\n <label key={city} className=\"flex items-center gap-2 text-sm py-1 cursor-pointer hover:bg-gray-50 rounded px-2\">\n <input type=\"checkbox\" checked={configCities.includes(city)}\n onChange={() => setConfigCities(prev => prev.includes(city) ? prev.filter(c => c !== city) : [...prev, city])}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500 h-3.5 w-3.5\" />\n {city}\n </label>\n ))}\n </div>\n </div>\n </WidgetSettingsModal>\n </>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/apps/Weather.tsx"],"names":["t"],"mappings":"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","file":"Weather-ZJE7DNKB.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';\n\n// [condition, day emoji, night emoji, day gradient, night gradient]\nconst WMO: Record<number, [string, string, string, string, string]> = {\n 0: ['Clear Sky', '☀️', '🌙', 'from-sky-400 to-blue-500', 'from-indigo-800 to-slate-900'],\n 1: ['Mainly Clear', '🌤️', '🌙', 'from-sky-400 to-blue-500', 'from-indigo-800 to-slate-900'],\n 2: ['Partly Cloudy', '⛅', '☁️', 'from-sky-400 to-blue-400', 'from-indigo-700 to-slate-800'],\n 3: ['Overcast', '☁️', '☁️', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'],\n 45: ['Foggy', '🌫️', '🌫️', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'],\n 48: ['Foggy', '🌫️', '🌫️', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'],\n 51: ['Light Drizzle', '🌦️', '🌧️', 'from-gray-400 to-blue-500', 'from-gray-700 to-indigo-800'],\n 53: ['Drizzle', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 55: ['Heavy Drizzle', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 61: ['Light Rain', '🌦️', '🌧️', 'from-gray-400 to-blue-500', 'from-gray-700 to-indigo-800'],\n 63: ['Rain', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 65: ['Heavy Rain', '🌧️', '🌧️', 'from-gray-600 to-blue-700', 'from-gray-700 to-indigo-900'],\n 71: ['Light Snow', '🌨️', '🌨️', 'from-blue-200 to-blue-400', 'from-blue-800 to-slate-900'],\n 73: ['Snow', '❄️', '❄️', 'from-blue-300 to-blue-500', 'from-blue-800 to-slate-900'],\n 75: ['Heavy Snow', '❄️', '❄️', 'from-blue-400 to-blue-600', 'from-blue-800 to-slate-900'],\n 80: ['Rain Showers', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-800'],\n 82: ['Heavy Showers', '🌧️', '🌧️', 'from-gray-600 to-blue-700', 'from-gray-700 to-indigo-900'],\n 95: ['Thunderstorm', '⛈️', '⛈️', 'from-gray-700 to-indigo-800', 'from-gray-800 to-indigo-950'],\n 96: ['Thunderstorm', '⛈️', '⛈️', 'from-gray-700 to-indigo-800', 'from-gray-800 to-indigo-950'],\n 99: ['Thunderstorm', '⛈️', '⛈️', 'from-gray-700 to-indigo-900', 'from-gray-800 to-indigo-950'],\n};\n\nconst getCondition = (code: number, isDay = true) => {\n const entry = WMO[code] || ['Unknown', '❓', '❓', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-800'];\n return [entry[0], isDay ? entry[1] : entry[2], isDay ? entry[3] : entry[4]] as [string, string, string];\n};\n\nconst AVAILABLE_CITIES: Record<string, { lat: number; lon: number }> = {\n 'Sydney': { lat: -33.8688, lon: 151.2093 },\n 'London': { lat: 51.5074, lon: -0.1278 },\n 'Los Angeles': { lat: 34.0522, lon: -118.2437 },\n 'Shanghai': { lat: 31.2304, lon: 121.4737 },\n 'New York': { lat: 40.7128, lon: -74.0060 },\n 'Tokyo': { lat: 35.6762, lon: 139.6503 },\n 'Dubai': { lat: 25.2048, lon: 55.2708 },\n 'Singapore': { lat: 1.3521, lon: 103.8198 },\n 'Hong Kong': { lat: 22.3193, lon: 114.1694 },\n 'Paris': { lat: 48.8566, lon: 2.3522 },\n 'Berlin': { lat: 52.5200, lon: 13.4050 },\n 'Mumbai': { lat: 19.0760, lon: 72.8777 },\n 'Bangkok': { lat: 13.7563, lon: 100.5018 },\n 'Melbourne': { lat: -37.8136, lon: 144.9631 },\n 'Toronto': { lat: 43.6532, lon: -79.3832 },\n 'Miami': { lat: 25.7617, lon: -80.1918 },\n 'Chicago': { lat: 41.8781, lon: -87.6298 },\n 'Auckland': { lat: -36.8485, lon: 174.7633 },\n};\n\nconst DEFAULT_CITIES = ['Sydney', 'London', 'Los Angeles', 'Shanghai'];\nconst STORAGE_KEY = 'weather_cities';\nconst SETTINGS_KEY = 'weather_appearance';\nconst CACHE_KEY = 'weather_multi_cache';\nconst CACHE_TTL = 30 * 60 * 1000;\n\ninterface CityWeather { city: string; temp: number; code: number; high: number; low: number; isDay: boolean; timezone: string }\ninterface WeatherPrefs { useFahrenheit: boolean; showLocalTime: boolean; use24Hour: boolean }\nconst DEFAULT_PREFS: WeatherPrefs = { useFahrenheit: false, showLocalTime: false, use24Hour: false };\n\nfunction loadCities(): string[] {\n try { const s = JSON.parse(localStorage.getItem(STORAGE_KEY) || ''); if (Array.isArray(s) && s.length) return s; } catch {}\n return DEFAULT_CITIES;\n}\n\nconst toF = (c: number) => Math.round(c * 9 / 5 + 32);\n\nfunction getTimeInTz(timezone: string, use24Hour = false): { hours: number; minutes: number; text: string } {\n try {\n const now = new Date();\n const h24Parts = new Intl.DateTimeFormat('en-US', { timeZone: timezone, hour: 'numeric', minute: '2-digit', hour12: false }).formatToParts(now);\n const h24 = parseInt(h24Parts.find(p => p.type === 'hour')?.value || '0');\n const m = parseInt(h24Parts.find(p => p.type === 'minute')?.value || '0');\n if (use24Hour) {\n return { hours: h24, minutes: m, text: `${String(h24).padStart(2, '0')}:${String(m).padStart(2, '0')}` };\n }\n const parts = new Intl.DateTimeFormat('en-US', { timeZone: timezone, hour: 'numeric', minute: '2-digit', hour12: true }).formatToParts(now);\n const h12 = parseInt(parts.find(p => p.type === 'hour')?.value || '12');\n const period = parts.find(p => p.type === 'dayPeriod')?.value || '';\n return { hours: h24, minutes: m, text: `${h12}:${String(m).padStart(2, '0')} ${period}` };\n } catch { return { hours: 0, minutes: 0, text: '' }; }\n}\n\n/** Tiny analog clock SVG */\nfunction MiniClock({ hours, minutes, size = 20 }: { hours: number; minutes: number; size?: number }) {\n const r = size / 2;\n const hAngle = ((hours % 12) + minutes / 60) * 30 - 90;\n const mAngle = minutes * 6 - 90;\n const hRad = (hAngle * Math.PI) / 180;\n const mRad = (mAngle * Math.PI) / 180;\n const hLen = r * 0.5;\n const mLen = r * 0.7;\n return (\n <svg width={size} height={size} className=\"shrink-0\">\n <circle cx={r} cy={r} r={r - 1} fill=\"rgba(255,255,255,0.15)\" stroke=\"rgba(255,255,255,0.4)\" strokeWidth={1} />\n {/* Hour hand */}\n <line x1={r} y1={r} x2={r + Math.cos(hRad) * hLen} y2={r + Math.sin(hRad) * hLen}\n stroke=\"white\" strokeWidth={1.5} strokeLinecap=\"round\" />\n {/* Minute hand */}\n <line x1={r} y1={r} x2={r + Math.cos(mRad) * mLen} y2={r + Math.sin(mRad) * mLen}\n stroke=\"white\" strokeWidth={1} strokeLinecap=\"round\" />\n {/* Center dot */}\n <circle cx={r} cy={r} r={1} fill=\"white\" />\n </svg>\n );\n}\n\nexport default function Weather() {\n const [cities, setCities] = useState(loadCities);\n const [appearance, setAppearance] = useState(() => loadAppearance(SETTINGS_KEY));\n const [data, setData] = useState<CityWeather[]>([]);\n const [loading, setLoading] = useState(true);\n // Tick every minute so clocks update\n const [, setTick] = useState(0);\n useEffect(() => { const t = setInterval(() => setTick(n => n + 1), 60000); return () => clearInterval(t); }, []);\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [configCities, setConfigCities] = useState<string[]>([]);\n const [configAppearance, setConfigAppearance] = useState<WidgetAppearance>(appearance);\n // Prefs live in the consumer-supplied prefs adapter so they persist\n // reliably across re-mounts without the local useState/localStorage dance.\n const { prefs: shellPrefs, save: saveShellPrefs } = useShellPrefs();\n const prefs: WeatherPrefs = { ...DEFAULT_PREFS, ...(shellPrefs.weather_prefs as WeatherPrefs | undefined ?? {}) };\n const [configPrefs, setConfigPrefs] = useState<WeatherPrefs>(prefs);\n\n useWidgetSettings(useCallback(() => {\n setConfigCities([...cities]);\n setConfigAppearance({ ...appearance });\n setConfigPrefs({ ...prefs });\n setSettingsOpen(true);\n }, [cities, appearance, prefs]));\n\n const fetchAll = useCallback(async (cityList: string[], force = false) => {\n if (!force) {\n try {\n const cached = JSON.parse(localStorage.getItem(CACHE_KEY) || '{}');\n const key = cityList.join(',');\n if (cached[key] && Date.now() - cached[key].ts < CACHE_TTL) {\n setData(cached[key].data); setLoading(false); return;\n }\n } catch {}\n }\n setLoading(true);\n const results: CityWeather[] = [];\n for (const city of cityList) {\n const coords = AVAILABLE_CITIES[city];\n if (!coords) continue;\n try {\n const res = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${coords.lat}&longitude=${coords.lon}&current=temperature_2m,weather_code,is_day&daily=temperature_2m_max,temperature_2m_min&forecast_days=1&timezone=auto`);\n const w = await res.json();\n results.push({ city, temp: Math.round(w.current.temperature_2m), code: w.current.weather_code, high: Math.round(w.daily.temperature_2m_max[0]), low: Math.round(w.daily.temperature_2m_min[0]), isDay: w.current.is_day === 1, timezone: w.timezone || 'UTC' });\n } catch {}\n }\n setData(results); setLoading(false);\n try { const c = JSON.parse(localStorage.getItem(CACHE_KEY) || '{}'); c[cityList.join(',')] = { data: results, ts: Date.now() }; localStorage.setItem(CACHE_KEY, JSON.stringify(c)); } catch {}\n }, []);\n\n useEffect(() => { fetchAll(cities); }, [cities, fetchAll]);\n\n const saveSettings = () => {\n if (configCities.length === 0) return;\n setCities(configCities);\n setAppearance(configAppearance);\n saveShellPrefs({ weather_prefs: configPrefs });\n localStorage.setItem(STORAGE_KEY, JSON.stringify(configCities));\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(configAppearance));\n setSettingsOpen(false);\n };\n\n const t = (c: number) => prefs.useFahrenheit ? `${toF(c)}°F` : `${c}°`;\n\n if (loading && data.length === 0) {\n return <div className=\"flex items-center justify-center h-full bg-gradient-to-b from-sky-400 to-blue-500 rounded-lg text-white/70 text-sm\">Loading...</div>;\n }\n\n // Use the first city's condition + day/night for the background gradient\n const firstIsDay = data.length > 0 ? data[0].isDay : true;\n const [, , gradient] = data.length > 0 ? getCondition(data[0].code, firstIsDay) : ['', '', 'from-sky-400 to-blue-500'];\n const dynamicHeight = data.length * 48 + 16;\n\n return (\n <>\n <div className={`flex flex-col bg-gradient-to-b ${gradient} rounded-lg text-white overflow-hidden`}\n style={{ minHeight: dynamicHeight, opacity: appearance.activeOpacity / 100, backdropFilter: appearance.activeBlur > 0 ? `blur(${appearance.activeBlur}px)` : undefined }}>\n <div className=\"flex-1 flex flex-col justify-between px-3 py-3\">\n {data.map(d => {\n const [condition, emoji] = getCondition(d.code, d.isDay);\n return (\n <div key={d.city} className={`flex items-center gap-2 rounded-lg px-2 py-1 -mx-1 ${d.isDay ? '' : 'bg-black/15'}`}>\n {prefs.showLocalTime && (() => {\n const time = getTimeInTz(d.timezone, prefs.use24Hour);\n return <MiniClock hours={time.hours} minutes={time.minutes} size={24} />;\n })()}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-semibold leading-tight\">{d.city}</div>\n <div className=\"text-[10px] opacity-70\">\n {prefs.showLocalTime ? getTimeInTz(d.timezone, prefs.use24Hour).text : condition}\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n <span className=\"text-lg\">{emoji}</span>\n <div className=\"text-right\">\n <div className=\"text-2xl font-light leading-none\">{t(d.temp)}</div>\n <div className=\"text-[9px] opacity-60\">H:{t(d.high)} L:{t(d.low)}</div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <WidgetSettingsModal open={settingsOpen} onClose={() => setSettingsOpen(false)} title=\"Weather Settings\"\n appearance={configAppearance} onAppearanceChange={setConfigAppearance} onSave={saveSettings}>\n <div className=\"space-y-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-gray-700 mb-2\">Display</h3>\n <div className=\"flex items-center gap-3 mb-2\">\n <span className=\"text-sm text-gray-600 w-24\">Temperature</span>\n <div className=\"flex gap-1\">\n {([{ key: false, label: '°C' }, { key: true, label: '°F' }] as const).map(o => (\n <button key={String(o.key)} onClick={() => setConfigPrefs(p => ({ ...p, useFahrenheit: o.key }))}\n className={`px-3 py-1 text-xs font-medium rounded-lg border transition-colors ${configPrefs.useFahrenheit === o.key ? 'bg-blue-600 text-white border-blue-600' : 'bg-white text-gray-700 border-gray-300 hover:bg-gray-50'}`}>\n {o.label}\n </button>\n ))}\n </div>\n </div>\n <div className=\"flex items-center gap-3 mb-2\">\n <span className=\"text-sm text-gray-600 w-24\">Time Format</span>\n <div className=\"flex gap-1\">\n {([{ key: false, label: 'AM/PM' }, { key: true, label: '24H' }] as const).map(o => (\n <button key={String(o.key)} onClick={() => setConfigPrefs(p => ({ ...p, use24Hour: o.key }))}\n className={`px-3 py-1 text-xs font-medium rounded-lg border transition-colors ${configPrefs.use24Hour === o.key ? 'bg-blue-600 text-white border-blue-600' : 'bg-white text-gray-700 border-gray-300 hover:bg-gray-50'}`}>\n {o.label}\n </button>\n ))}\n </div>\n </div>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input type=\"checkbox\" checked={configPrefs.showLocalTime} onChange={e => setConfigPrefs(p => ({ ...p, showLocalTime: e.target.checked }))}\n className=\"rounded border-gray-300 text-blue-600 h-3.5 w-3.5\" />\n <span className=\"text-sm text-gray-600\">Show local time</span>\n </label>\n </div>\n </div>\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-48 overflow-y-auto\">\n {Object.keys(AVAILABLE_CITIES).map(city => (\n <label key={city} className=\"flex items-center gap-2 text-sm py-1 cursor-pointer hover:bg-gray-50 rounded px-2\">\n <input type=\"checkbox\" checked={configCities.includes(city)}\n onChange={() => setConfigCities(prev => prev.includes(city) ? prev.filter(c => c !== city) : [...prev, city])}\n className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500 h-3.5 w-3.5\" />\n {city}\n </label>\n ))}\n </div>\n </div>\n </WidgetSettingsModal>\n </>\n );\n}\n"]}
@@ -1,28 +1,28 @@
1
- export { setPdfPreview } from '../chunk-VEEO4U4E.js';
1
+ export { setPdfPreview } from '../chunk-K6COBRQA.js';
2
2
  import '../chunk-WIJ45SYD.js';
3
- import '../chunk-UD2TKHR2.js';
3
+ import '../chunk-53CE7OVT.js';
4
4
  import '../chunk-PLGHQ7QW.js';
5
5
  import { lazy } from 'react';
6
6
 
7
- var Calculator = lazy(() => import('../Calculator-HJKPXY2B.js'));
8
- var Spreadsheet = lazy(() => import('../Spreadsheet-W7F6IMTJ.js'));
9
- var Weather = lazy(() => import('../Weather-MDTM6OEL.js'));
10
- var CurrencyConverter = lazy(() => import('../CurrencyConverter-FYF4JLKZ.js'));
11
- var PomodoroTimer = lazy(() => import('../PomodoroTimer-IJUONN6I.js'));
12
- var Notepad = lazy(() => import('../Notepad-2K6HQ2WA.js'));
7
+ var Calculator = lazy(() => import('../Calculator-LJMNOIS6.js'));
8
+ var Spreadsheet = lazy(() => import('../Spreadsheet-QIBLYKVF.js'));
9
+ var Weather = lazy(() => import('../Weather-ZJE7DNKB.js'));
10
+ var CurrencyConverter = lazy(() => import('../CurrencyConverter-HFPJAIPX.js'));
11
+ var PomodoroTimer = lazy(() => import('../PomodoroTimer-4ZYITLNH.js'));
12
+ var Notepad = lazy(() => import('../Notepad-MSHSUSMG.js'));
13
13
  var Chess = lazy(() => import('../Chess-C5BY45NA.js'));
14
14
  var Checkers = lazy(() => import('../Checkers-MIAHIKJH.js'));
15
15
  var Sudoku = lazy(() => import('../Sudoku-XHLYCEVT.js'));
16
16
  var Tetris = lazy(() => import('../Tetris-ZHCZYL24.js'));
17
17
  var Game2048 = lazy(() => import('../Game2048-3RH3ELRD.js'));
18
- var Minesweeper = lazy(() => import('../Minesweeper-MAA4NIV4.js'));
19
- var Email = lazy(() => import('../Email-3B63P7ML.js'));
18
+ var Minesweeper = lazy(() => import('../Minesweeper-UUHQCDAC.js'));
19
+ var Email = lazy(() => import('../Email-YPLU6HJL.js'));
20
20
  var GeminiChat = lazy(() => import('../GeminiChat-BXLBJFT4.js'));
21
- var Calendar = lazy(() => import('../Calendar-GCQIWTU3.js'));
22
- var Preview = lazy(() => import('../Preview-SEQ5NHLQ.js'));
23
- var Documents = lazy(() => import('../Documents-NTWVLYXJ.js'));
24
- var Files = lazy(() => import('../Files-JYXO4AXI.js'));
25
- var Browser = lazy(() => import('../Browser-B3XVP6HC.js'));
21
+ var Calendar = lazy(() => import('../Calendar-UIF62GMX.js'));
22
+ var Preview = lazy(() => import('../Preview-IEPHQIJE.js'));
23
+ var Documents = lazy(() => import('../Documents-3UPQ5QTF.js'));
24
+ var Files = lazy(() => import('../Files-IT4B7PP4.js'));
25
+ var Browser = lazy(() => import('../Browser-34KKFXNU.js'));
26
26
  var utilityApps = {
27
27
  "/calculator": { component: Calculator, label: "Calculator", size: "sm", allowPinOnTop: true, utility: true, widget: true, autoHeight: true, dimensions: [280, 420] },
28
28
  "/spreadsheet": { component: Spreadsheet, label: "Spreadsheets", size: "2xl", compact: true, multiInstance: true },
@@ -396,6 +396,95 @@ function deactivateAllModals() {
396
396
  activeListeners.forEach((fn) => fn());
397
397
  window.dispatchEvent(new CustomEvent("modal-reorder"));
398
398
  }
399
+ var EDGE_THRESHOLD = 8;
400
+ var CORNER_THRESHOLD = 32;
401
+ function workArea() {
402
+ const taskbarH = parseInt(getComputedStyle(document.documentElement).getPropertyValue("--taskbar-height")) || 0;
403
+ const taskbarW = parseInt(getComputedStyle(document.documentElement).getPropertyValue("--taskbar-width")) || 0;
404
+ const tbPos = getComputedStyle(document.documentElement).getPropertyValue("--taskbar-position")?.trim() || "bottom";
405
+ const x = tbPos === "left" ? taskbarW : 0;
406
+ const y = tbPos === "top" ? taskbarH : 0;
407
+ const w = window.innerWidth - (tbPos === "left" || tbPos === "right" ? taskbarW : 0);
408
+ const h = window.innerHeight - (tbPos === "top" || tbPos === "bottom" ? taskbarH : 0);
409
+ return { x, y, w, h };
410
+ }
411
+ function calcSnapBox(zone) {
412
+ const a = workArea();
413
+ const halfW = Math.floor(a.w / 2);
414
+ const halfH = Math.floor(a.h / 2);
415
+ switch (zone) {
416
+ case "top":
417
+ return { x: a.x, y: a.y, w: a.w, h: a.h };
418
+ case "left":
419
+ return { x: a.x, y: a.y, w: halfW, h: a.h };
420
+ case "right":
421
+ return { x: a.x + halfW, y: a.y, w: a.w - halfW, h: a.h };
422
+ case "tl":
423
+ return { x: a.x, y: a.y, w: halfW, h: halfH };
424
+ case "tr":
425
+ return { x: a.x + halfW, y: a.y, w: a.w - halfW, h: halfH };
426
+ case "bl":
427
+ return { x: a.x, y: a.y + halfH, w: halfW, h: a.h - halfH };
428
+ case "br":
429
+ return { x: a.x + halfW, y: a.y + halfH, w: a.w - halfW, h: a.h - halfH };
430
+ }
431
+ }
432
+ function detectSnapZone(clientX, clientY) {
433
+ const a = workArea();
434
+ const nearLeft = clientX <= a.x + EDGE_THRESHOLD;
435
+ const nearRight = clientX >= a.x + a.w - EDGE_THRESHOLD;
436
+ const nearTop = clientY <= a.y + EDGE_THRESHOLD;
437
+ const nearBottom = clientY >= a.y + a.h - EDGE_THRESHOLD;
438
+ const cornerLeft = clientX <= a.x + CORNER_THRESHOLD;
439
+ const cornerRight = clientX >= a.x + a.w - CORNER_THRESHOLD;
440
+ const cornerTop = clientY <= a.y + CORNER_THRESHOLD;
441
+ const cornerBottom = clientY >= a.y + a.h - CORNER_THRESHOLD;
442
+ if (nearTop && cornerLeft) return "tl";
443
+ if (nearTop && cornerRight) return "tr";
444
+ if (nearBottom && cornerLeft) return "bl";
445
+ if (nearBottom && cornerRight) return "br";
446
+ if (cornerTop && nearLeft) return "tl";
447
+ if (cornerTop && nearRight) return "tr";
448
+ if (cornerBottom && nearLeft) return "bl";
449
+ if (cornerBottom && nearRight) return "br";
450
+ if (nearTop) return "top";
451
+ if (nearLeft) return "left";
452
+ if (nearRight) return "right";
453
+ return null;
454
+ }
455
+ var snapPreviewEl = null;
456
+ function getSnapPreviewEl() {
457
+ if (!snapPreviewEl) {
458
+ snapPreviewEl = document.createElement("div");
459
+ snapPreviewEl.style.cssText = [
460
+ "position: fixed",
461
+ "pointer-events: none",
462
+ "z-index: 40",
463
+ "border-radius: 8px",
464
+ "background: rgba(59, 130, 246, 0.18)",
465
+ "border: 2px solid rgb(59, 130, 246)",
466
+ "transition: left 120ms ease, top 120ms ease, width 120ms ease, height 120ms ease, opacity 120ms ease",
467
+ "opacity: 0",
468
+ "display: none"
469
+ ].join(";");
470
+ document.body.appendChild(snapPreviewEl);
471
+ }
472
+ return snapPreviewEl;
473
+ }
474
+ function showSnapPreview(box) {
475
+ const el = getSnapPreviewEl();
476
+ el.style.display = "block";
477
+ el.style.left = `${box.x}px`;
478
+ el.style.top = `${box.y}px`;
479
+ el.style.width = `${box.w}px`;
480
+ el.style.height = `${box.h}px`;
481
+ el.style.opacity = "1";
482
+ }
483
+ function hideSnapPreview() {
484
+ if (!snapPreviewEl) return;
485
+ snapPreviewEl.style.opacity = "0";
486
+ snapPreviewEl.style.display = "none";
487
+ }
399
488
  window.addEventListener("deactivate-all-modals", deactivateAllModals);
400
489
  function getZForModal(id) {
401
490
  const idx = activationOrder.indexOf(id);
@@ -700,6 +789,7 @@ function Modal({ open, onClose, title, icon, copyText, size = "lg", dirty = fals
700
789
  }
701
790
  onClose();
702
791
  }, [isDirty, onClose]);
792
+ const preSnapBoxRef = useRef(null);
703
793
  const startDrag = useCallback((e) => {
704
794
  if (e.button !== 0) return;
705
795
  if (e.target.closest("button, input, a, kbd, select, textarea")) return;
@@ -709,11 +799,30 @@ function Modal({ open, onClose, title, icon, copyText, size = "lg", dirty = fals
709
799
  const sx = e.clientX, sy = e.clientY;
710
800
  const panel = panelRef.current;
711
801
  const rect = panel?.getBoundingClientRect();
712
- const ox = rect ? rect.left : boxRef.current.x;
713
- const oy = rect ? rect.top : boxRef.current.y;
714
- const actualH = rect ? rect.height : boxRef.current.h;
802
+ let ox, oy, actualH, actualW;
803
+ if (preSnapBoxRef.current) {
804
+ const restore = preSnapBoxRef.current;
805
+ preSnapBoxRef.current = null;
806
+ actualW = restore.w;
807
+ actualH = restore.h;
808
+ const offsetX = rect ? Math.min(Math.max(20, e.clientX - rect.left), restore.w - 20) : restore.w / 2;
809
+ ox = e.clientX - offsetX;
810
+ oy = e.clientY - 12;
811
+ if (panel) {
812
+ panel.style.width = `${actualW}px`;
813
+ panel.style.height = `${actualH}px`;
814
+ panel.style.left = `${ox}px`;
815
+ panel.style.top = `${oy}px`;
816
+ }
817
+ } else {
818
+ ox = rect ? rect.left : boxRef.current.x;
819
+ oy = rect ? rect.top : boxRef.current.y;
820
+ actualH = rect ? rect.height : boxRef.current.h;
821
+ actualW = rect ? rect.width : boxRef.current.w;
822
+ }
715
823
  setMaximized(false);
716
- setBox((b) => ({ ...b, x: ox, y: oy, h: actualH }));
824
+ setBox((b) => ({ ...b, x: ox, y: oy, w: actualW, h: actualH }));
825
+ let currentZone = null;
717
826
  const move = (ev) => {
718
827
  const nx = ox + ev.clientX - sx;
719
828
  const ny = Math.max(0, oy + ev.clientY - sy);
@@ -722,11 +831,25 @@ function Modal({ open, onClose, title, icon, copyText, size = "lg", dirty = fals
722
831
  panel.style.top = `${ny}px`;
723
832
  }
724
833
  boxRef.current = { ...boxRef.current, x: nx, y: ny };
834
+ if (!widget) {
835
+ const zone = detectSnapZone(ev.clientX, ev.clientY);
836
+ if (zone !== currentZone) {
837
+ currentZone = zone;
838
+ if (zone) showSnapPreview(calcSnapBox(zone));
839
+ else hideSnapPreview();
840
+ }
841
+ }
725
842
  };
726
843
  const up = () => {
727
844
  window.removeEventListener("pointermove", move);
728
845
  window.removeEventListener("pointerup", up);
846
+ hideSnapPreview();
729
847
  const finalBox = { ...boxRef.current };
848
+ if (!widget && currentZone) {
849
+ preSnapBoxRef.current = { x: ox, y: oy, w: actualW, h: actualH };
850
+ setBox(calcSnapBox(currentZone));
851
+ return;
852
+ }
730
853
  if (widget) {
731
854
  const centerX = finalBox.x + finalBox.w / 2;
732
855
  const mid = window.innerWidth / 2;
@@ -1723,5 +1846,5 @@ function WindowManagerProvider({ children }) {
1723
1846
  }
1724
1847
 
1725
1848
  export { CancelButton, CopyButton, DocFavStar, GLASS_DIVIDER, GLASS_INPUT_BG, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, WindowManagerProvider, WindowTitle, client_default, getActiveModalId, glassStyle, isEntityEntry, isPageEntry, isSection, navIcons, navSections, sectionIcons, setShellApiClient, setShellNavIcons, setShellWindowRegistry, startMenuCategories, useModalActive, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle };
1726
- //# sourceMappingURL=chunk-UD2TKHR2.js.map
1727
- //# sourceMappingURL=chunk-UD2TKHR2.js.map
1849
+ //# sourceMappingURL=chunk-53CE7OVT.js.map
1850
+ //# sourceMappingURL=chunk-53CE7OVT.js.map