react-os-shell 0.2.43 → 0.2.45

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 (73) hide show
  1. package/dist/{Browser-5ZCLRIRU.js → Browser-LSJORULM.js} +3 -3
  2. package/dist/{Browser-5ZCLRIRU.js.map → Browser-LSJORULM.js.map} +1 -1
  3. package/dist/{Calculator-OHL2AZ52.js → Calculator-ZKEH53OV.js} +4 -4
  4. package/dist/{Calculator-OHL2AZ52.js.map → Calculator-ZKEH53OV.js.map} +1 -1
  5. package/dist/{Calendar-6AHL3UJY.js → Calendar-PKRZ5MBU.js} +154 -55
  6. package/dist/Calendar-PKRZ5MBU.js.map +1 -0
  7. package/dist/{CurrencyConverter-XZVZ7XOF.js → CurrencyConverter-5N44NZ6Z.js} +56 -50
  8. package/dist/CurrencyConverter-5N44NZ6Z.js.map +1 -0
  9. package/dist/{Documents-IPVZ47JX.js → Documents-CQVIIFZV.js} +3 -3
  10. package/dist/{Documents-IPVZ47JX.js.map → Documents-CQVIIFZV.js.map} +1 -1
  11. package/dist/{Email-Z7FDKAFD.js → Email-CR6XS2AD.js} +5 -5
  12. package/dist/{Email-Z7FDKAFD.js.map → Email-CR6XS2AD.js.map} +1 -1
  13. package/dist/Files-ITIKVHIE.js +8 -0
  14. package/dist/{Files-KEHRZ2UY.js.map → Files-ITIKVHIE.js.map} +1 -1
  15. package/dist/{GeminiChat-ITU46EH4.js → GeminiChat-XTEBZIVK.js} +3 -3
  16. package/dist/{GeminiChat-ITU46EH4.js.map → GeminiChat-XTEBZIVK.js.map} +1 -1
  17. package/dist/{Minesweeper-NGN4O6C4.js → Minesweeper-QGUPDVRS.js} +3 -3
  18. package/dist/{Minesweeper-NGN4O6C4.js.map → Minesweeper-QGUPDVRS.js.map} +1 -1
  19. package/dist/{Notepad-W3YYZ3GS.js → Notepad-74CQPZCV.js} +3 -3
  20. package/dist/{Notepad-W3YYZ3GS.js.map → Notepad-74CQPZCV.js.map} +1 -1
  21. package/dist/PomodoroTimer-FHSOLF3O.js +627 -0
  22. package/dist/PomodoroTimer-FHSOLF3O.js.map +1 -0
  23. package/dist/Preview-4MBQI66Q.js +7 -0
  24. package/dist/{Preview-4354N46U.js.map → Preview-4MBQI66Q.js.map} +1 -1
  25. package/dist/{Spreadsheet-FCFII6DW.js → Spreadsheet-MKXPPSKV.js} +3 -3
  26. package/dist/{Spreadsheet-FCFII6DW.js.map → Spreadsheet-MKXPPSKV.js.map} +1 -1
  27. package/dist/TodoList-7JZ2SLDI.js +494 -0
  28. package/dist/TodoList-7JZ2SLDI.js.map +1 -0
  29. package/dist/Weather-YXSCSPQT.js +424 -0
  30. package/dist/Weather-YXSCSPQT.js.map +1 -0
  31. package/dist/WorldClock-XHM7WAUV.js +196 -0
  32. package/dist/WorldClock-XHM7WAUV.js.map +1 -0
  33. package/dist/apps/index.d.ts +10 -11
  34. package/dist/apps/index.js +23 -21
  35. package/dist/apps/index.js.map +1 -1
  36. package/dist/chunk-25L4DIKH.js +90 -0
  37. package/dist/chunk-25L4DIKH.js.map +1 -0
  38. package/dist/{chunk-62MVMTBT.js → chunk-5VXRBUEH.js} +20 -3
  39. package/dist/chunk-5VXRBUEH.js.map +1 -0
  40. package/dist/chunk-7CCHEEYC.js +94 -0
  41. package/dist/chunk-7CCHEEYC.js.map +1 -0
  42. package/dist/{chunk-T2NQXP2J.js → chunk-7M3BBAHQ.js} +10 -4
  43. package/dist/chunk-7M3BBAHQ.js.map +1 -0
  44. package/dist/{chunk-IY7JJVHR.js → chunk-DUUANLLE.js} +3 -3
  45. package/dist/{chunk-IY7JJVHR.js.map → chunk-DUUANLLE.js.map} +1 -1
  46. package/dist/chunk-MK3HLUO4.js +380 -0
  47. package/dist/chunk-MK3HLUO4.js.map +1 -0
  48. package/dist/{chunk-2SRU4BYH.js → chunk-MTLVXT2C.js} +4 -4
  49. package/dist/{chunk-2SRU4BYH.js.map → chunk-MTLVXT2C.js.map} +1 -1
  50. package/dist/{chunk-46LICZUM.js → chunk-MVWEL34Y.js} +3 -2
  51. package/dist/chunk-MVWEL34Y.js.map +1 -0
  52. package/dist/{chunk-TVOBLSSV.js → chunk-UK2AA3J6.js} +3 -3
  53. package/dist/{chunk-TVOBLSSV.js.map → chunk-UK2AA3J6.js.map} +1 -1
  54. package/dist/index.d.ts +16 -1
  55. package/dist/index.js +4089 -11
  56. package/dist/index.js.map +1 -1
  57. package/dist/styles.css +6 -4
  58. package/package.json +1 -1
  59. package/dist/Calendar-6AHL3UJY.js.map +0 -1
  60. package/dist/CurrencyConverter-XZVZ7XOF.js.map +0 -1
  61. package/dist/Files-KEHRZ2UY.js +0 -8
  62. package/dist/PomodoroTimer-T2J5NDJR.js +0 -196
  63. package/dist/PomodoroTimer-T2J5NDJR.js.map +0 -1
  64. package/dist/Preview-4354N46U.js +0 -7
  65. package/dist/Weather-XTADR7Z3.js +0 -266
  66. package/dist/Weather-XTADR7Z3.js.map +0 -1
  67. package/dist/WorldClock-OFK2EA2H.js +0 -126
  68. package/dist/WorldClock-OFK2EA2H.js.map +0 -1
  69. package/dist/chunk-46LICZUM.js.map +0 -1
  70. package/dist/chunk-62MVMTBT.js.map +0 -1
  71. package/dist/chunk-7KZWBIDL.js +0 -4144
  72. package/dist/chunk-7KZWBIDL.js.map +0 -1
  73. package/dist/chunk-T2NQXP2J.js.map +0 -1
@@ -0,0 +1,94 @@
1
+ // src/apps/_weatherData.ts
2
+ var WMO = {
3
+ 0: ["Clear Sky", "\u2600\uFE0F", "\u{1F319}", "from-sky-400 to-blue-500", "from-indigo-900 to-slate-950"],
4
+ 1: ["Mainly Clear", "\u{1F324}\uFE0F", "\u{1F319}", "from-sky-400 to-blue-500", "from-indigo-900 to-slate-950"],
5
+ 2: ["Partly Cloudy", "\u26C5", "\u2601\uFE0F", "from-sky-400 to-blue-400", "from-indigo-800 to-slate-900"],
6
+ 3: ["Overcast", "\u2601\uFE0F", "\u2601\uFE0F", "from-gray-400 to-gray-500", "from-gray-700 to-slate-900"],
7
+ 45: ["Foggy", "\u{1F32B}\uFE0F", "\u{1F32B}\uFE0F", "from-gray-400 to-gray-500", "from-gray-700 to-slate-800"],
8
+ 48: ["Foggy", "\u{1F32B}\uFE0F", "\u{1F32B}\uFE0F", "from-gray-400 to-gray-500", "from-gray-700 to-slate-800"],
9
+ 51: ["Light Drizzle", "\u{1F326}\uFE0F", "\u{1F327}\uFE0F", "from-gray-400 to-blue-500", "from-gray-700 to-indigo-900"],
10
+ 53: ["Drizzle", "\u{1F327}\uFE0F", "\u{1F327}\uFE0F", "from-gray-500 to-blue-600", "from-gray-700 to-indigo-900"],
11
+ 55: ["Heavy Drizzle", "\u{1F327}\uFE0F", "\u{1F327}\uFE0F", "from-gray-500 to-blue-600", "from-gray-700 to-indigo-900"],
12
+ 61: ["Light Rain", "\u{1F326}\uFE0F", "\u{1F327}\uFE0F", "from-gray-400 to-blue-500", "from-gray-700 to-indigo-900"],
13
+ 63: ["Rain", "\u{1F327}\uFE0F", "\u{1F327}\uFE0F", "from-gray-500 to-blue-600", "from-gray-700 to-indigo-900"],
14
+ 65: ["Heavy Rain", "\u{1F327}\uFE0F", "\u{1F327}\uFE0F", "from-gray-600 to-blue-700", "from-gray-700 to-indigo-950"],
15
+ 71: ["Light Snow", "\u{1F328}\uFE0F", "\u{1F328}\uFE0F", "from-blue-200 to-blue-400", "from-blue-800 to-slate-900"],
16
+ 73: ["Snow", "\u2744\uFE0F", "\u2744\uFE0F", "from-blue-300 to-blue-500", "from-blue-800 to-slate-900"],
17
+ 75: ["Heavy Snow", "\u2744\uFE0F", "\u2744\uFE0F", "from-blue-400 to-blue-600", "from-blue-800 to-slate-900"],
18
+ 80: ["Rain Showers", "\u{1F327}\uFE0F", "\u{1F327}\uFE0F", "from-gray-500 to-blue-600", "from-gray-700 to-indigo-900"],
19
+ 82: ["Heavy Showers", "\u{1F327}\uFE0F", "\u{1F327}\uFE0F", "from-gray-600 to-blue-700", "from-gray-700 to-indigo-950"],
20
+ 95: ["Thunderstorm", "\u26C8\uFE0F", "\u26C8\uFE0F", "from-gray-700 to-indigo-800", "from-gray-800 to-indigo-950"],
21
+ 96: ["Thunderstorm", "\u26C8\uFE0F", "\u26C8\uFE0F", "from-gray-700 to-indigo-800", "from-gray-800 to-indigo-950"],
22
+ 99: ["Thunderstorm", "\u26C8\uFE0F", "\u26C8\uFE0F", "from-gray-700 to-indigo-900", "from-gray-800 to-indigo-950"]
23
+ };
24
+ var getCondition = (code, isDay = true) => {
25
+ const entry = WMO[code] || ["Unknown", "\u2753", "\u2753", "from-gray-400 to-gray-500", "from-gray-700 to-slate-800"];
26
+ return [entry[0], isDay ? entry[1] : entry[2], isDay ? entry[3] : entry[4]];
27
+ };
28
+ var AVAILABLE_CITIES = {
29
+ "Sydney": { lat: -33.8688, lon: 151.2093, tz: "Australia/Sydney" },
30
+ "Melbourne": { lat: -37.8136, lon: 144.9631, tz: "Australia/Melbourne" },
31
+ "Auckland": { lat: -36.8485, lon: 174.7633, tz: "Pacific/Auckland" },
32
+ "Tokyo": { lat: 35.6762, lon: 139.6503, tz: "Asia/Tokyo" },
33
+ "Shanghai": { lat: 31.2304, lon: 121.4737, tz: "Asia/Shanghai" },
34
+ "Hong Kong": { lat: 22.3193, lon: 114.1694, tz: "Asia/Hong_Kong" },
35
+ "Singapore": { lat: 1.3521, lon: 103.8198, tz: "Asia/Singapore" },
36
+ "Bangkok": { lat: 13.7563, lon: 100.5018, tz: "Asia/Bangkok" },
37
+ "Mumbai": { lat: 19.076, lon: 72.8777, tz: "Asia/Kolkata" },
38
+ "Dubai": { lat: 25.2048, lon: 55.2708, tz: "Asia/Dubai" },
39
+ "Berlin": { lat: 52.52, lon: 13.405, tz: "Europe/Berlin" },
40
+ "Paris": { lat: 48.8566, lon: 2.3522, tz: "Europe/Paris" },
41
+ "London": { lat: 51.5074, lon: -0.1278, tz: "Europe/London" },
42
+ "New York": { lat: 40.7128, lon: -74.006, tz: "America/New_York" },
43
+ "Miami": { lat: 25.7617, lon: -80.1918, tz: "America/New_York" },
44
+ "Toronto": { lat: 43.6532, lon: -79.3832, tz: "America/Toronto" },
45
+ "Chicago": { lat: 41.8781, lon: -87.6298, tz: "America/Chicago" },
46
+ "Los Angeles": { lat: 34.0522, lon: -118.2437, tz: "America/Los_Angeles" }
47
+ };
48
+ var WEATHER_CACHE_KEY = "weather_local_cache";
49
+ var WEATHER_CACHE_TTL = 30 * 60 * 1e3;
50
+ function readCache() {
51
+ try {
52
+ return JSON.parse(localStorage.getItem(WEATHER_CACHE_KEY) || "{}");
53
+ } catch {
54
+ return {};
55
+ }
56
+ }
57
+ function writeCache(c) {
58
+ try {
59
+ localStorage.setItem(WEATHER_CACHE_KEY, JSON.stringify(c));
60
+ } catch {
61
+ }
62
+ }
63
+ async function fetchCityWeather(cityName, force = false) {
64
+ const coords = AVAILABLE_CITIES[cityName];
65
+ if (!coords) return null;
66
+ if (!force) {
67
+ const cached = readCache()[cityName];
68
+ if (cached && Date.now() - cached.ts < WEATHER_CACHE_TTL) return cached.data;
69
+ }
70
+ try {
71
+ 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`);
72
+ const w = await res.json();
73
+ const cw = {
74
+ city: cityName,
75
+ temp: Math.round(w.current.temperature_2m),
76
+ code: w.current.weather_code,
77
+ high: Math.round(w.daily.temperature_2m_max[0]),
78
+ low: Math.round(w.daily.temperature_2m_min[0]),
79
+ isDay: w.current.is_day === 1,
80
+ timezone: w.timezone || "UTC"
81
+ };
82
+ const c = readCache();
83
+ c[cityName] = { data: cw, ts: Date.now() };
84
+ writeCache(c);
85
+ return cw;
86
+ } catch {
87
+ return null;
88
+ }
89
+ }
90
+ var toFahrenheit = (c) => Math.round(c * 9 / 5 + 32);
91
+
92
+ export { AVAILABLE_CITIES, fetchCityWeather, getCondition, toFahrenheit };
93
+ //# sourceMappingURL=chunk-7CCHEEYC.js.map
94
+ //# sourceMappingURL=chunk-7CCHEEYC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/apps/_weatherData.ts"],"names":[],"mappings":"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","file":"chunk-7CCHEEYC.js","sourcesContent":["/**\n * Shared weather data — used by Weather (single-city tile with animations)\n * and WorldClock (multi-city list with per-row weather + day/night via the\n * emoji). Single source of truth for the WMO code map, the supported city\n * coordinates, and the localStorage cache so both widgets share fetched\n * data.\n */\n\n// [condition, day emoji, night emoji, day gradient, night gradient]\nexport const WMO: Record<number, [string, string, string, string, string]> = {\n 0: ['Clear Sky', '☀️', '🌙', 'from-sky-400 to-blue-500', 'from-indigo-900 to-slate-950'],\n 1: ['Mainly Clear', '🌤️', '🌙', 'from-sky-400 to-blue-500', 'from-indigo-900 to-slate-950'],\n 2: ['Partly Cloudy', '⛅', '☁️', 'from-sky-400 to-blue-400', 'from-indigo-800 to-slate-900'],\n 3: ['Overcast', '☁️', '☁️', 'from-gray-400 to-gray-500', 'from-gray-700 to-slate-900'],\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-900'],\n 53: ['Drizzle', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-900'],\n 55: ['Heavy Drizzle', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-900'],\n 61: ['Light Rain', '🌦️', '🌧️', 'from-gray-400 to-blue-500', 'from-gray-700 to-indigo-900'],\n 63: ['Rain', '🌧️', '🌧️', 'from-gray-500 to-blue-600', 'from-gray-700 to-indigo-900'],\n 65: ['Heavy Rain', '🌧️', '🌧️', 'from-gray-600 to-blue-700', 'from-gray-700 to-indigo-950'],\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-900'],\n 82: ['Heavy Showers', '🌧️', '🌧️', 'from-gray-600 to-blue-700', 'from-gray-700 to-indigo-950'],\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\nexport const getCondition = (code: number, isDay = true): [string, string, string] => {\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]];\n};\n\nexport const AVAILABLE_CITIES: Record<string, { lat: number; lon: number; tz: string }> = {\n 'Sydney': { lat: -33.8688, lon: 151.2093, tz: 'Australia/Sydney' },\n 'Melbourne': { lat: -37.8136, lon: 144.9631, tz: 'Australia/Melbourne' },\n 'Auckland': { lat: -36.8485, lon: 174.7633, tz: 'Pacific/Auckland' },\n 'Tokyo': { lat: 35.6762, lon: 139.6503, tz: 'Asia/Tokyo' },\n 'Shanghai': { lat: 31.2304, lon: 121.4737, tz: 'Asia/Shanghai' },\n 'Hong Kong': { lat: 22.3193, lon: 114.1694, tz: 'Asia/Hong_Kong' },\n 'Singapore': { lat: 1.3521, lon: 103.8198, tz: 'Asia/Singapore' },\n 'Bangkok': { lat: 13.7563, lon: 100.5018, tz: 'Asia/Bangkok' },\n 'Mumbai': { lat: 19.0760, lon: 72.8777, tz: 'Asia/Kolkata' },\n 'Dubai': { lat: 25.2048, lon: 55.2708, tz: 'Asia/Dubai' },\n 'Berlin': { lat: 52.5200, lon: 13.4050, tz: 'Europe/Berlin' },\n 'Paris': { lat: 48.8566, lon: 2.3522, tz: 'Europe/Paris' },\n 'London': { lat: 51.5074, lon: -0.1278, tz: 'Europe/London' },\n 'New York': { lat: 40.7128, lon: -74.0060, tz: 'America/New_York' },\n 'Miami': { lat: 25.7617, lon: -80.1918, tz: 'America/New_York' },\n 'Toronto': { lat: 43.6532, lon: -79.3832, tz: 'America/Toronto' },\n 'Chicago': { lat: 41.8781, lon: -87.6298, tz: 'America/Chicago' },\n 'Los Angeles': { lat: 34.0522, lon: -118.2437, tz: 'America/Los_Angeles' },\n};\n\nexport const WEATHER_CACHE_KEY = 'weather_local_cache';\nexport const WEATHER_CACHE_TTL = 30 * 60 * 1000;\n\nexport interface CityWeather {\n city: string;\n temp: number;\n code: number;\n high: number;\n low: number;\n isDay: boolean;\n timezone: string;\n}\n\nexport interface WeatherCacheEntry { data: CityWeather; ts: number }\ntype WeatherCache = Record<string, WeatherCacheEntry>;\n\nfunction readCache(): WeatherCache {\n try { return JSON.parse(localStorage.getItem(WEATHER_CACHE_KEY) || '{}'); } catch { return {}; }\n}\nfunction writeCache(c: WeatherCache) {\n try { localStorage.setItem(WEATHER_CACHE_KEY, JSON.stringify(c)); } catch {}\n}\n\n/** Fetch a city's current weather + today's high/low, with a 30-min\n * localStorage cache shared across widgets. */\nexport async function fetchCityWeather(cityName: string, force = false): Promise<CityWeather | null> {\n const coords = AVAILABLE_CITIES[cityName];\n if (!coords) return null;\n if (!force) {\n const cached = readCache()[cityName];\n if (cached && Date.now() - cached.ts < WEATHER_CACHE_TTL) return cached.data;\n }\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 const cw: CityWeather = {\n city: cityName,\n temp: Math.round(w.current.temperature_2m),\n code: w.current.weather_code,\n high: Math.round(w.daily.temperature_2m_max[0]),\n low: Math.round(w.daily.temperature_2m_min[0]),\n isDay: w.current.is_day === 1,\n timezone: w.timezone || 'UTC',\n };\n const c = readCache();\n c[cityName] = { data: cw, ts: Date.now() };\n writeCache(c);\n return cw;\n } catch {\n return null;\n }\n}\n\nexport const toFahrenheit = (c: number) => Math.round(c * 9 / 5 + 32);\n"]}
@@ -424,6 +424,11 @@ function _savePositionsDebounced() {
424
424
  }
425
425
  }, 500);
426
426
  }
427
+ function setWindowDefaultPosition(key, pos) {
428
+ if (_windowPositions[key]) return;
429
+ _windowPositions[key] = pos;
430
+ _savePositionsDebounced();
431
+ }
427
432
  var sizeDefaults = {
428
433
  sm: 384,
429
434
  md: 512,
@@ -2108,7 +2113,8 @@ function saveWindowState(windows) {
2108
2113
  }
2109
2114
  var DEFAULT_WIDGETS = [
2110
2115
  { id: "page:/weather", type: "page", label: "Weather", route: "/weather" },
2111
- { id: "page:/currency", type: "page", label: "Currency", route: "/currency" }
2116
+ { id: "page:/currency", type: "page", label: "Currency Converter", route: "/currency" },
2117
+ { id: "page:/world-clock", type: "page", label: "World Clock", route: "/world-clock" }
2112
2118
  ];
2113
2119
  function restoreWindowState() {
2114
2120
  try {
@@ -2253,6 +2259,6 @@ function WindowManagerProvider({ children }) {
2253
2259
  ] });
2254
2260
  }
2255
2261
 
2256
- export { CancelButton, CopyButton, DocFavStar, GLASS_DIVIDER, GLASS_INPUT_BG, LoadingSpinner, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ThumbCard, WINDOW_REGISTRY, WindowManagerProvider, WindowTitle, activateModal, client_default, getActiveModalId, glassStyle, isEntityEntry, isPageEntry, isSection, navIcons, navSections, sectionIcons, setShellApiClient, setShellNavIcons, setShellWindowRegistry, startMenuCategories, useIsMobile, useModalActive, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle };
2257
- //# sourceMappingURL=chunk-T2NQXP2J.js.map
2258
- //# sourceMappingURL=chunk-T2NQXP2J.js.map
2262
+ export { CancelButton, CopyButton, DocFavStar, GLASS_DIVIDER, GLASS_INPUT_BG, LoadingSpinner, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ThumbCard, WINDOW_REGISTRY, WindowManagerProvider, WindowTitle, activateModal, client_default, getActiveModalId, glassStyle, isEntityEntry, isPageEntry, isSection, navIcons, navSections, sectionIcons, setShellApiClient, setShellNavIcons, setShellWindowRegistry, setWindowDefaultPosition, startMenuCategories, useIsMobile, useModalActive, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle };
2263
+ //# sourceMappingURL=chunk-7M3BBAHQ.js.map
2264
+ //# sourceMappingURL=chunk-7M3BBAHQ.js.map