react-os-shell 2.9.1 → 2.9.3

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 (55) hide show
  1. package/dist/Browser-23ULR34J.js +7 -0
  2. package/dist/{Browser-HDKOMCUA.js.map → Browser-23ULR34J.js.map} +1 -1
  3. package/dist/{Calculator-LF2IH7NZ.js → Calculator-RI2AXFNQ.js} +4 -4
  4. package/dist/{Calculator-LF2IH7NZ.js.map → Calculator-RI2AXFNQ.js.map} +1 -1
  5. package/dist/{CurrencyConverter-AZ5RBU7E.js → CurrencyConverter-TVSLZLYL.js} +5 -6
  6. package/dist/CurrencyConverter-TVSLZLYL.js.map +1 -0
  7. package/dist/{Documents-JXLU2ILH.js → Documents-BGCOIW5E.js} +4 -4
  8. package/dist/{Documents-JXLU2ILH.js.map → Documents-BGCOIW5E.js.map} +1 -1
  9. package/dist/Files-X7ERMLDM.js +13 -0
  10. package/dist/{Files-Q2YCSHYG.js.map → Files-X7ERMLDM.js.map} +1 -1
  11. package/dist/{Notepad-TBAF2SHJ.js → Notepad-OTOYAF4L.js} +4 -4
  12. package/dist/{Notepad-TBAF2SHJ.js.map → Notepad-OTOYAF4L.js.map} +1 -1
  13. package/dist/{PomodoroTimer-CDAJC2NX.js → PomodoroTimer-FZP7SKPY.js} +5 -5
  14. package/dist/{PomodoroTimer-CDAJC2NX.js.map → PomodoroTimer-FZP7SKPY.js.map} +1 -1
  15. package/dist/Preview-XSX4HVK6.js +9 -0
  16. package/dist/{Preview-CHYOTNEP.js.map → Preview-XSX4HVK6.js.map} +1 -1
  17. package/dist/Spreadsheet-4FOA6E6K.js +7 -0
  18. package/dist/{Spreadsheet-I2GJKC6Y.js.map → Spreadsheet-4FOA6E6K.js.map} +1 -1
  19. package/dist/{Stock-7JFY7KUK.js → Stock-36BKWEUO.js} +5 -6
  20. package/dist/Stock-36BKWEUO.js.map +1 -0
  21. package/dist/{Weather-B55N3VEX.js → Weather-QUHBOFVA.js} +4 -4
  22. package/dist/{Weather-B55N3VEX.js.map → Weather-QUHBOFVA.js.map} +1 -1
  23. package/dist/{WorldClock-SARH4X3Y.js → WorldClock-2UY5R4L3.js} +4 -4
  24. package/dist/{WorldClock-SARH4X3Y.js.map → WorldClock-2UY5R4L3.js.map} +1 -1
  25. package/dist/apps/index.d.ts +1 -1
  26. package/dist/apps/index.js +19 -19
  27. package/dist/{chunk-JNF5VRPB.js → chunk-BJS5UCR6.js} +40 -22
  28. package/dist/chunk-BJS5UCR6.js.map +1 -0
  29. package/dist/{chunk-EHB2QYJX.js → chunk-DVXRDQEN.js} +4 -4
  30. package/dist/{chunk-EHB2QYJX.js.map → chunk-DVXRDQEN.js.map} +1 -1
  31. package/dist/{chunk-DF6TNR4B.js → chunk-HKBUFA4V.js} +4 -4
  32. package/dist/{chunk-DF6TNR4B.js.map → chunk-HKBUFA4V.js.map} +1 -1
  33. package/dist/{chunk-75YZMM5Q.js → chunk-HMV37F2X.js} +4 -4
  34. package/dist/{chunk-75YZMM5Q.js.map → chunk-HMV37F2X.js.map} +1 -1
  35. package/dist/{chunk-FIUUGSGJ.js → chunk-MIFS2574.js} +3 -3
  36. package/dist/{chunk-FIUUGSGJ.js.map → chunk-MIFS2574.js.map} +1 -1
  37. package/dist/{chunk-IQTT4ZBV.js → chunk-T2P7CZ3S.js} +3 -3
  38. package/dist/{chunk-IQTT4ZBV.js.map → chunk-T2P7CZ3S.js.map} +1 -1
  39. package/dist/{chunk-RADCIHYG.js → chunk-UWNETCYO.js} +4 -4
  40. package/dist/{chunk-RADCIHYG.js.map → chunk-UWNETCYO.js.map} +1 -1
  41. package/dist/{chunk-QFOOSV3I.js → chunk-Y2L2DBL6.js} +5 -5
  42. package/dist/{chunk-QFOOSV3I.js.map → chunk-Y2L2DBL6.js.map} +1 -1
  43. package/dist/{chunk-IONOMHM2.js → chunk-YWANIOU6.js} +4 -4
  44. package/dist/{chunk-IONOMHM2.js.map → chunk-YWANIOU6.js.map} +1 -1
  45. package/dist/index.d.ts +7 -6
  46. package/dist/index.js +10 -10
  47. package/dist/{types-08BmPknt.d.ts → types-CTPtgkiG.d.ts} +4 -3
  48. package/package.json +1 -1
  49. package/dist/Browser-HDKOMCUA.js +0 -7
  50. package/dist/CurrencyConverter-AZ5RBU7E.js.map +0 -1
  51. package/dist/Files-Q2YCSHYG.js +0 -13
  52. package/dist/Preview-CHYOTNEP.js +0 -9
  53. package/dist/Spreadsheet-I2GJKC6Y.js +0 -7
  54. package/dist/Stock-7JFY7KUK.js.map +0 -1
  55. package/dist/chunk-JNF5VRPB.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/apps/CurrencyConverter.tsx"],"names":[],"mappings":"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","file":"CurrencyConverter-AZ5RBU7E.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport { useWidgetSettings } from '../shell/Modal';\nimport WidgetSettingsModal, { loadAppearance, type WidgetAppearance } from '../shell/WidgetSettingsModal';\n\nconst ALL_CURRENCIES = ['USD', 'CNY', 'AUD', 'GBP', 'EUR', 'JPY', 'CAD', 'THB', 'NZD', 'SGD', 'HKD', 'CHF', 'KRW', 'INR', 'MXN', 'BRL'];\n\n/** Cap the rate list at 4 — keeps the widget compact and avoids\n * overwhelming the user with currencies they don't actually track. */\nconst MAX_PAIRS = 4;\n\nconst DEFAULT_PAIRS: [string, string][] = [\n ['USD', 'CNY'], ['USD', 'AUD'], ['GBP', 'USD'], ['USD', 'JPY'],\n];\n\nconst PAIRS_KEY = 'currency_pairs';\nconst SETTINGS_KEY = 'currency_appearance';\nconst CACHE_KEY = 'currency_rates_cache';\nconst CACHE_TTL = 3600000;\n\ntype CacheEntry = { rates: Record<string, number>; timestamp: number };\n\nfunction getCached(base: string): Record<string, number> | null {\n try { const c: Record<string, CacheEntry> = JSON.parse(localStorage.getItem(CACHE_KEY) || '{}'); const e = c[base]; if (e && Date.now() - e.timestamp < CACHE_TTL) return e.rates; } catch {} return null;\n}\nfunction setCache(base: string, rates: Record<string, number>) {\n try { const c = JSON.parse(localStorage.getItem(CACHE_KEY) || '{}'); c[base] = { rates, timestamp: Date.now() }; localStorage.setItem(CACHE_KEY, JSON.stringify(c)); } catch {}\n}\nfunction loadPairs(): [string, string][] {\n try {\n const s = JSON.parse(localStorage.getItem(PAIRS_KEY) || '');\n if (Array.isArray(s) && s.length) return s.slice(0, MAX_PAIRS);\n } catch {}\n return DEFAULT_PAIRS;\n}\n\nconst FLAG: Record<string, string> = {\n USD: '\\u{1F1FA}\\u{1F1F8}', CNY: '\\u{1F1E8}\\u{1F1F3}', AUD: '\\u{1F1E6}\\u{1F1FA}',\n GBP: '\\u{1F1EC}\\u{1F1E7}', JPY: '\\u{1F1EF}\\u{1F1F5}', CAD: '\\u{1F1E8}\\u{1F1E6}',\n EUR: '\\u{1F1EA}\\u{1F1FA}', THB: '\\u{1F1F9}\\u{1F1ED}', NZD: '\\u{1F1F3}\\u{1F1FF}',\n SGD: '\\u{1F1F8}\\u{1F1EC}', HKD: '\\u{1F1ED}\\u{1F1F0}', CHF: '\\u{1F1E8}\\u{1F1ED}',\n KRW: '\\u{1F1F0}\\u{1F1F7}', INR: '\\u{1F1EE}\\u{1F1F3}', MXN: '\\u{1F1F2}\\u{1F1FD}',\n BRL: '\\u{1F1E7}\\u{1F1F7}',\n};\n\nexport default function CurrencyConverter() {\n const [pairs, setPairs] = useState(loadPairs);\n const [appearance, setAppearance] = useState(() => loadAppearance(SETTINGS_KEY));\n const [allRates, setAllRates] = useState<Record<string, Record<string, number>>>({});\n const [loading, setLoading] = useState(false);\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [configPairs, setConfigPairs] = useState<[string, string][]>([]);\n const [configAppearance, setConfigAppearance] = useState<WidgetAppearance>(appearance);\n const [newFrom, setNewFrom] = useState('USD');\n const [newTo, setNewTo] = useState('CNY');\n\n useWidgetSettings(useCallback(() => {\n setConfigPairs([...pairs]);\n setConfigAppearance({ ...appearance });\n setSettingsOpen(true);\n }, [pairs, appearance]));\n\n useEffect(() => {\n const bases = [...new Set(pairs.map(([from]) => from))];\n let mounted = true;\n async function fetchAll() {\n setLoading(true);\n const result: Record<string, Record<string, number>> = {};\n for (const base of bases) {\n const cached = getCached(base);\n if (cached) { result[base] = cached; continue; }\n try { const res = await fetch(`https://open.er-api.com/v6/latest/${base}`); const data = await res.json(); if (data.rates) { result[base] = data.rates; setCache(base, data.rates); } } catch {}\n }\n if (mounted) { setAllRates(result); setLoading(false); }\n }\n fetchAll();\n return () => { mounted = false; };\n }, [pairs]);\n\n const saveSettings = () => {\n if (configPairs.length === 0) return;\n const capped = configPairs.slice(0, MAX_PAIRS);\n setPairs(capped); setAppearance(configAppearance);\n localStorage.setItem(PAIRS_KEY, JSON.stringify(capped));\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(configAppearance));\n setSettingsOpen(false);\n };\n\n return (\n <>\n {/* Theme-aware panel — pulls the same `--taskbar-bg-rgb` colour the\n * taskbar uses so the widget matches it across all themes\n * (gray-100-ish on light, Catppuccin mantle in dark). Tailwind\n * gray-* text/border classes auto-invert in dark via the existing\n * `[data-theme=\"dark\"]` overrides in styles.css. */}\n <div className=\"flex flex-col h-full\"\n style={{ backgroundColor: `rgb(var(--taskbar-bg-rgb, 243 244 246) / ${appearance.activeOpacity / 100})`, backdropFilter: appearance.activeBlur > 0 ? `blur(${appearance.activeBlur}px)` : undefined }}>\n <div className=\"px-4 py-3 space-y-1 flex-1\">\n {loading && <div className=\"text-xs text-gray-400 text-center py-4\">Loading rates...</div>}\n {pairs.map(([from, to], idx) => {\n const rate = allRates[from]?.[to];\n return (\n <button key={`${from}-${to}-${idx}`} onClick={() => {\n const swapped: [string, string][] = pairs.map((p, i) => i === idx ? [p[1], p[0]] : p);\n setPairs(swapped);\n localStorage.setItem(PAIRS_KEY, JSON.stringify(swapped));\n }}\n className=\"flex items-center justify-between px-2 py-2 border-b border-gray-200 last:border-0 w-full hover:bg-gray-100 rounded transition-colors cursor-pointer\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-base\">{FLAG[from] || ''}</span>\n <span className=\"text-sm font-semibold text-gray-700\">{from}</span>\n <svg className=\"h-3 w-3 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\" /></svg>\n <span className=\"text-base\">{FLAG[to] || ''}</span>\n <span className=\"text-sm font-semibold text-gray-700\">{to}</span>\n </div>\n <div className=\"text-base font-mono font-semibold text-gray-900 tabular-nums\">\n {rate != null ? rate.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 4 }) : '—'}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n\n <WidgetSettingsModal open={settingsOpen} onClose={() => setSettingsOpen(false)} title=\"Currency Settings\"\n appearance={configAppearance} onAppearanceChange={setConfigAppearance} onSave={saveSettings}>\n <div>\n <h3 className=\"text-sm font-semibold text-gray-700 mb-2\">Currency Pairs <span className=\"text-[11px] font-normal text-gray-400\">({configPairs.length}/{MAX_PAIRS})</span></h3>\n <div className=\"space-y-1 mb-2\">\n {configPairs.map(([f, t], i) => (\n <div key={i} className=\"flex items-center justify-between py-1 px-2 bg-gray-50 rounded\">\n <span className=\"text-sm\">{FLAG[f] || ''} {f} → {FLAG[t] || ''} {t}</span>\n <button onClick={() => setConfigPairs(p => p.filter((_, idx) => idx !== i))} className=\"text-red-400 hover:text-red-600\">&times;</button>\n </div>\n ))}\n </div>\n {configPairs.length < MAX_PAIRS ? (\n <div className=\"flex items-center gap-2\">\n <select value={newFrom} onChange={e => setNewFrom(e.target.value)}\n className=\"bg-gray-50 border border-gray-200 rounded px-2 py-1 text-sm focus:outline-none focus:ring-1 focus:ring-blue-500\">\n {ALL_CURRENCIES.map(c => <option key={c}>{c}</option>)}\n </select>\n <span className=\"text-gray-400\">→</span>\n <select value={newTo} onChange={e => setNewTo(e.target.value)}\n className=\"bg-gray-50 border border-gray-200 rounded px-2 py-1 text-sm focus:outline-none focus:ring-1 focus:ring-blue-500\">\n {ALL_CURRENCIES.map(c => <option key={c}>{c}</option>)}\n </select>\n <button onClick={() => { if (newFrom !== newTo && configPairs.length < MAX_PAIRS) setConfigPairs(p => [...p, [newFrom, newTo]]); }}\n className=\"text-sm font-medium text-blue-600 hover:text-blue-800 px-2\">+ Add</button>\n </div>\n ) : (\n <p className=\"text-[11px] text-gray-400 italic\">Max {MAX_PAIRS} pairs — remove one to add another.</p>\n )}\n </div>\n </WidgetSettingsModal>\n </>\n );\n}\n"]}
@@ -1,13 +0,0 @@
1
- export { Files as default, openFilesInTrashMode, setFilesDemoTree } from './chunk-QFOOSV3I.js';
2
- import './chunk-75YZMM5Q.js';
3
- import './chunk-VGTEM5RZ.js';
4
- import './chunk-DF6TNR4B.js';
5
- import './chunk-NUPYEVU4.js';
6
- import './chunk-VENYVK3L.js';
7
- import './chunk-RADCIHYG.js';
8
- import './chunk-IONOMHM2.js';
9
- import './chunk-JNF5VRPB.js';
10
- import './chunk-UBN4IUDE.js';
11
- import './chunk-ZF6AYO4G.js';
12
- //# sourceMappingURL=Files-Q2YCSHYG.js.map
13
- //# sourceMappingURL=Files-Q2YCSHYG.js.map
@@ -1,9 +0,0 @@
1
- export { Preview as default, setPdfPreview } from './chunk-DF6TNR4B.js';
2
- import './chunk-NUPYEVU4.js';
3
- import './chunk-VENYVK3L.js';
4
- import './chunk-IONOMHM2.js';
5
- import './chunk-JNF5VRPB.js';
6
- import './chunk-UBN4IUDE.js';
7
- import './chunk-ZF6AYO4G.js';
8
- //# sourceMappingURL=Preview-CHYOTNEP.js.map
9
- //# sourceMappingURL=Preview-CHYOTNEP.js.map
@@ -1,7 +0,0 @@
1
- export { Spreadsheet as default, setSpreadsheetPreview } from './chunk-RADCIHYG.js';
2
- import './chunk-IONOMHM2.js';
3
- import './chunk-JNF5VRPB.js';
4
- import './chunk-UBN4IUDE.js';
5
- import './chunk-ZF6AYO4G.js';
6
- //# sourceMappingURL=Spreadsheet-I2GJKC6Y.js.map
7
- //# sourceMappingURL=Spreadsheet-I2GJKC6Y.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/apps/Stock.tsx"],"names":[],"mappings":"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","file":"Stock-7JFY7KUK.js","sourcesContent":["import { useState, useCallback } from 'react';\nimport { useWidgetSettings } from '../shell/Modal';\nimport WidgetSettingsModal, { loadAppearance, type WidgetAppearance } from '../shell/WidgetSettingsModal';\n\n/**\n * Stock ticker widget — track a watchlist of equities with demo prices.\n *\n * Prices are static, in-file demo data (DEMO_QUOTES) so the widget works with\n * no API key and no server. \"Setup\" is just picking which demo tickers to show.\n */\n\n/** Cap the watchlist — keeps the widget compact. */\nconst MAX_SYMBOLS = 8;\nconst DEFAULT_SYMBOLS = ['AAPL', 'MSFT', 'GOOGL', 'TSLA', 'NVDA'];\n\nconst SYMBOLS_KEY = 'stock_symbols';\nconst SETTINGS_KEY = 'stock_appearance';\n\ninterface Quote { price: number; change: number; changePct: number }\n\n/** Static demo quotes — realistic-ish values, a mix of gainers and losers. */\nconst DEMO_QUOTES: Record<string, Quote> = {\n AAPL: { price: 229.87, change: 1.42, changePct: 0.62 },\n MSFT: { price: 451.16, change: -2.31, changePct: -0.51 },\n GOOGL: { price: 178.34, change: 0.89, changePct: 0.50 },\n AMZN: { price: 201.45, change: -1.08, changePct: -0.53 },\n TSLA: { price: 248.92, change: 6.74, changePct: 2.78 },\n NVDA: { price: 134.81, change: -3.12, changePct: -2.26 },\n META: { price: 563.27, change: 4.55, changePct: 0.81 },\n};\n\n/** Demo tickers offered in the symbol picker. */\nconst DEMO_TICKERS = Object.keys(DEMO_QUOTES);\n\nfunction loadSymbols(): string[] {\n try { const s = JSON.parse(localStorage.getItem(SYMBOLS_KEY) || ''); if (Array.isArray(s) && s.length) return s.slice(0, MAX_SYMBOLS); } catch {}\n return DEFAULT_SYMBOLS;\n}\n\nconst fmtPrice = (n: number) => `$${n.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\nconst fmtSigned = (n: number) => `${n >= 0 ? '+' : ''}${n.toFixed(2)}`;\n\nexport default function Stock() {\n const [symbols, setSymbols] = useState(loadSymbols);\n const [appearance, setAppearance] = useState(() => loadAppearance(SETTINGS_KEY));\n\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [configSymbols, setConfigSymbols] = useState<string[]>([]);\n const [configAppearance, setConfigAppearance] = useState<WidgetAppearance>(appearance);\n const [newSymbol, setNewSymbol] = useState('');\n\n const openSettings = useCallback(() => {\n setConfigSymbols([...symbols]);\n setConfigAppearance({ ...appearance });\n setNewSymbol('');\n setSettingsOpen(true);\n }, [symbols, appearance]);\n\n useWidgetSettings(openSettings);\n\n const addSymbol = () => {\n const s = newSymbol.trim().toUpperCase();\n if (!s || configSymbols.includes(s) || configSymbols.length >= MAX_SYMBOLS) return;\n setConfigSymbols(p => [...p, s]);\n setNewSymbol('');\n };\n\n const saveSettings = () => {\n const cleaned = configSymbols.map(s => s.toUpperCase()).slice(0, MAX_SYMBOLS);\n setSymbols(cleaned); setAppearance(configAppearance);\n localStorage.setItem(SYMBOLS_KEY, JSON.stringify(cleaned));\n localStorage.setItem(SETTINGS_KEY, JSON.stringify(configAppearance));\n setSettingsOpen(false);\n };\n\n // Tickers the picker can still offer (demo set minus what's already added).\n const availableTickers = DEMO_TICKERS.filter(t => !configSymbols.includes(t));\n\n return (\n <>\n {/* Theme-aware panel — mirrors the taskbar's `--taskbar-bg-rgb` so the\n * widget matches it across themes; gray-* classes auto-invert in dark. */}\n <div className=\"flex flex-col h-full\"\n style={{ backgroundColor: `rgb(var(--taskbar-bg-rgb, 243 244 246) / ${appearance.activeOpacity / 100})`, backdropFilter: appearance.activeBlur > 0 ? `blur(${appearance.activeBlur}px)` : undefined }}>\n <div className=\"px-4 py-3 flex-1\">\n {symbols.length === 0 ? (\n <div className=\"text-xs text-gray-500 text-center py-6\">No symbols yet — add some in settings.</div>\n ) : (\n <div className=\"space-y-0.5\">\n {symbols.map(sym => {\n const q = DEMO_QUOTES[sym];\n const up = (q?.change ?? 0) >= 0;\n const color = !q ? 'text-gray-400' : q.change > 0 ? 'text-green-600' : q.change < 0 ? 'text-red-600' : 'text-gray-500';\n return (\n <div key={sym} className=\"flex items-center justify-between px-2 py-2 border-b border-gray-200 last:border-0\">\n <span className=\"text-sm font-bold text-gray-800 tracking-tight\">{sym}</span>\n {q ? (\n <div className=\"flex flex-col items-end leading-tight\">\n <span className=\"text-sm font-mono font-semibold text-gray-900 tabular-nums\">{fmtPrice(q.price)}</span>\n <span className={`text-[11px] font-medium tabular-nums ${color}`}>{up ? '▲' : '▼'} {fmtSigned(q.change)} ({fmtSigned(q.changePct)}%)</span>\n </div>\n ) : (\n <span className=\"text-sm font-mono text-gray-400 tabular-nums\">—</span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n\n <WidgetSettingsModal open={settingsOpen} onClose={() => setSettingsOpen(false)} title=\"Stock Settings\"\n appearance={configAppearance} onAppearanceChange={setConfigAppearance} onSave={saveSettings}>\n <div>\n <h3 className=\"text-sm font-semibold text-gray-700 mb-2\">Symbols <span className=\"text-[11px] font-normal text-gray-400\">({configSymbols.length}/{MAX_SYMBOLS})</span></h3>\n <div className=\"space-y-1 mb-2\">\n {configSymbols.map((s, i) => (\n <div key={i} className=\"flex items-center justify-between py-1 px-2 bg-gray-50 rounded\">\n <span className=\"text-sm font-semibold text-gray-700\">{s}</span>\n <button onClick={() => setConfigSymbols(p => p.filter((_, idx) => idx !== i))} className=\"text-red-400 hover:text-red-600\">&times;</button>\n </div>\n ))}\n {configSymbols.length === 0 && <p className=\"text-[11px] text-gray-400 italic\">No symbols — add a ticker below.</p>}\n </div>\n {configSymbols.length < MAX_SYMBOLS ? (\n <div className=\"flex items-center gap-2\">\n <input value={newSymbol} onChange={e => setNewSymbol(e.target.value)} onKeyDown={e => { if (e.key === 'Enter') addSymbol(); }}\n placeholder=\"e.g. NVDA\" className=\"flex-1 bg-gray-50 border border-gray-200 rounded px-2 py-1 text-sm uppercase focus:outline-none focus:ring-1 focus:ring-blue-500\" />\n <button onClick={addSymbol} className=\"text-sm font-medium text-blue-600 hover:text-blue-800 px-2\">+ Add</button>\n </div>\n ) : (\n <p className=\"text-[11px] text-gray-400 italic\">Max {MAX_SYMBOLS} symbols — remove one to add another.</p>\n )}\n {availableTickers.length > 0 && configSymbols.length < MAX_SYMBOLS && (\n <div className=\"flex flex-wrap gap-1.5 mt-2\">\n {availableTickers.map(t => (\n <button key={t} onClick={() => setConfigSymbols(p => p.length < MAX_SYMBOLS ? [...p, t] : p)}\n className=\"text-[11px] font-medium text-gray-600 bg-gray-100 hover:bg-gray-200 rounded px-2 py-0.5 transition-colors\">{t}</button>\n ))}\n </div>\n )}\n <p className=\"text-[11px] text-gray-400 mt-2\">Demo prices — static sample data, no live feed.</p>\n </div>\n </WidgetSettingsModal>\n </>\n );\n}\n"]}