@shellui/core 0.0.18 → 0.0.20
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/package.json +2 -2
- package/src/dist/CookiePreferencesView.52b5aec8.js +1182 -0
- package/src/dist/CookiePreferencesView.52b5aec8.js.map +1 -0
- package/src/dist/DefaultLayout.045a82ff.js +1964 -0
- package/src/dist/DefaultLayout.045a82ff.js.map +1 -0
- package/src/dist/DefaultLayout.4454f259.js +4414 -0
- package/src/dist/DefaultLayout.4454f259.js.map +1 -0
- package/src/dist/FullscreenLayout.555c4987.js +1054 -0
- package/src/dist/FullscreenLayout.555c4987.js.map +1 -0
- package/src/dist/HomeView.ddfa7b68.js +771 -0
- package/src/dist/HomeView.ddfa7b68.js.map +1 -0
- package/src/dist/NotFoundView.c75be4f1.js +811 -0
- package/src/dist/NotFoundView.c75be4f1.js.map +1 -0
- package/src/dist/SettingsView.052b03a6.js +4965 -0
- package/src/dist/SettingsView.052b03a6.js.map +1 -0
- package/src/dist/ViewRoute.e6e3b142.js +1042 -0
- package/src/dist/ViewRoute.e6e3b142.js.map +1 -0
- package/src/dist/WindowsLayout.08724167.js +1762 -0
- package/src/dist/WindowsLayout.08724167.js.map +1 -0
- package/src/dist/esm.f0d741e6.js +29520 -0
- package/src/dist/esm.f0d741e6.js.map +1 -0
- package/src/dist/favicon.4367ac1e.svg +14 -0
- package/src/dist/index.parcel.36d65383.js +54089 -0
- package/src/dist/index.parcel.36d65383.js.map +1 -0
- package/src/dist/index.parcel.ca6d8a47.css +3493 -0
- package/src/dist/index.parcel.ca6d8a47.css.map +1 -0
- package/src/dist/index.parcel.html +88 -0
- package/src/index.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["node_modules/@parcel/runtime-browser-hmr/lib/runtime-a2ad37ea30cd2a6e.js","packages/core/src/features/layouts/WindowsLayout.tsx","packages/core/src/components/ContentView.tsx","packages/core/src/components/LoadingOverlay.tsx"],"sourcesContent":["var HMR_HOST = \"localhost\";var HMR_PORT = null;var HMR_SERVER_PORT = 4000;var HMR_SECURE = false;var HMR_ENV_HASH = \"439701173a9199ea\";var HMR_USE_SSE = false;module.bundle.HMR_BUNDLE_ID = \"254ea4fd08724167\";\"use strict\";\n\n/* global HMR_HOST, HMR_PORT, HMR_SERVER_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */\n/*::\nimport type {\n HMRAsset,\n HMRMessage,\n} from '@parcel/reporter-dev-server/src/HMRServer.js';\ninterface ParcelRequire {\n (string): mixed;\n cache: {|[string]: ParcelModule|};\n hotData: {|[string]: mixed|};\n Module: any;\n parent: ?ParcelRequire;\n isParcelRequire: true;\n modules: {|[string]: [Function, {|[string]: string|}]|};\n HMR_BUNDLE_ID: string;\n root: ParcelRequire;\n}\ninterface ParcelModule {\n hot: {|\n data: mixed,\n accept(cb: (Function) => void): void,\n dispose(cb: (mixed) => void): void,\n // accept(deps: Array<string> | string, cb: (Function) => void): void,\n // decline(): void,\n _acceptCallbacks: Array<(Function) => void>,\n _disposeCallbacks: Array<(mixed) => void>,\n |};\n}\ninterface ExtensionContext {\n runtime: {|\n reload(): void,\n getURL(url: string): string;\n getManifest(): {manifest_version: number, ...};\n |};\n}\ndeclare var module: {bundle: ParcelRequire, ...};\ndeclare var HMR_HOST: string;\ndeclare var HMR_PORT: string;\ndeclare var HMR_SERVER_PORT: string;\ndeclare var HMR_ENV_HASH: string;\ndeclare var HMR_SECURE: boolean;\ndeclare var HMR_USE_SSE: boolean;\ndeclare var chrome: ExtensionContext;\ndeclare var browser: ExtensionContext;\ndeclare var __parcel__import__: (string) => Promise<void>;\ndeclare var __parcel__importScripts__: (string) => Promise<void>;\ndeclare var globalThis: typeof self;\ndeclare var ServiceWorkerGlobalScope: Object;\n*/\nvar OVERLAY_ID = '__parcel__error__overlay__';\nvar OldModule = module.bundle.Module;\nfunction Module(moduleName) {\n OldModule.call(this, moduleName);\n this.hot = {\n data: module.bundle.hotData[moduleName],\n _acceptCallbacks: [],\n _disposeCallbacks: [],\n accept: function (fn) {\n this._acceptCallbacks.push(fn || function () {});\n },\n dispose: function (fn) {\n this._disposeCallbacks.push(fn);\n }\n };\n module.bundle.hotData[moduleName] = undefined;\n}\nmodule.bundle.Module = Module;\nmodule.bundle.hotData = {};\nvar checkedAssets /*: {|[string]: boolean|} */,\n disposedAssets /*: {|[string]: boolean|} */,\n assetsToDispose /*: Array<[ParcelRequire, string]> */,\n assetsToAccept /*: Array<[ParcelRequire, string]> */,\n bundleNotFound = false;\nfunction getHostname() {\n return HMR_HOST || (typeof location !== 'undefined' && location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost');\n}\nfunction getPort() {\n return HMR_PORT || (typeof location !== 'undefined' ? location.port : HMR_SERVER_PORT);\n}\n\n// eslint-disable-next-line no-redeclare\nlet WebSocket = globalThis.WebSocket;\nif (!WebSocket && typeof module.bundle.root === 'function') {\n try {\n // eslint-disable-next-line no-global-assign\n WebSocket = module.bundle.root('ws');\n } catch {\n // ignore.\n }\n}\nvar hostname = getHostname();\nvar port = getPort();\nvar protocol = HMR_SECURE || typeof location !== 'undefined' && location.protocol === 'https:' && !['localhost', '127.0.0.1', '0.0.0.0'].includes(hostname) ? 'wss' : 'ws';\n\n// eslint-disable-next-line no-redeclare\nvar parent = module.bundle.parent;\nif (!parent || !parent.isParcelRequire) {\n // Web extension context\n var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser;\n\n // Safari doesn't support sourceURL in error stacks.\n // eval may also be disabled via CSP, so do a quick check.\n var supportsSourceURL = false;\n try {\n (0, eval)('throw new Error(\"test\"); //# sourceURL=test.js');\n } catch (err) {\n supportsSourceURL = err.stack.includes('test.js');\n }\n var ws;\n if (HMR_USE_SSE) {\n ws = new EventSource('/__parcel_hmr');\n } else {\n try {\n // If we're running in the dev server's node runner, listen for messages on the parent port.\n let {\n workerData,\n parentPort\n } = module.bundle.root('node:worker_threads') /*: any*/;\n if (workerData !== null && workerData !== void 0 && workerData.__parcel) {\n parentPort.on('message', async message => {\n try {\n await handleMessage(message);\n parentPort.postMessage('updated');\n } catch {\n parentPort.postMessage('restart');\n }\n });\n\n // After the bundle has finished running, notify the dev server that the HMR update is complete.\n queueMicrotask(() => parentPort.postMessage('ready'));\n }\n } catch {\n if (typeof WebSocket !== 'undefined') {\n try {\n ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/');\n } catch (err) {\n // Ignore cloudflare workers error.\n if (err.message && !err.message.includes('Disallowed operation called within global scope')) {\n console.error(err.message);\n }\n }\n }\n }\n }\n if (ws) {\n // $FlowFixMe\n ws.onmessage = async function (event /*: {data: string, ...} */) {\n var data /*: HMRMessage */ = JSON.parse(event.data);\n await handleMessage(data);\n };\n if (ws instanceof WebSocket) {\n ws.onerror = function (e) {\n if (e.message) {\n console.error(e.message);\n }\n };\n ws.onclose = function () {\n console.warn('[parcel] 🚨 Connection to the HMR server was lost');\n };\n }\n }\n}\nasync function handleMessage(data /*: HMRMessage */) {\n checkedAssets = {} /*: {|[string]: boolean|} */;\n disposedAssets = {} /*: {|[string]: boolean|} */;\n assetsToAccept = [];\n assetsToDispose = [];\n bundleNotFound = false;\n if (data.type === 'reload') {\n fullReload();\n } else if (data.type === 'update') {\n // Remove error overlay if there is one\n if (typeof document !== 'undefined') {\n removeErrorOverlay();\n }\n let assets = data.assets;\n\n // Handle HMR Update\n let handled = assets.every(asset => {\n return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle);\n });\n\n // Dispatch a custom event in case a bundle was not found. This might mean\n // an asset on the server changed and we should reload the page. This event\n // gives the client an opportunity to refresh without losing state\n // (e.g. via React Server Components). If e.preventDefault() is not called,\n // we will trigger a full page reload.\n if (handled && bundleNotFound && assets.some(a => a.envHash !== HMR_ENV_HASH) && typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') {\n handled = !window.dispatchEvent(new CustomEvent('parcelhmrreload', {\n cancelable: true\n }));\n }\n if (handled) {\n console.clear();\n\n // Dispatch custom event so other runtimes (e.g React Refresh) are aware.\n if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') {\n window.dispatchEvent(new CustomEvent('parcelhmraccept'));\n }\n await hmrApplyUpdates(assets);\n hmrDisposeQueue();\n\n // Run accept callbacks. This will also re-execute other disposed assets in topological order.\n let processedAssets = {};\n for (let i = 0; i < assetsToAccept.length; i++) {\n let id = assetsToAccept[i][1];\n if (!processedAssets[id]) {\n hmrAccept(assetsToAccept[i][0], id);\n processedAssets[id] = true;\n }\n }\n } else fullReload();\n }\n if (data.type === 'error') {\n // Log parcel errors to console\n for (let ansiDiagnostic of data.diagnostics.ansi) {\n let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack;\n console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\\n' + stack + '\\n\\n' + ansiDiagnostic.hints.join('\\n'));\n }\n if (typeof document !== 'undefined') {\n // Render the fancy html overlay\n removeErrorOverlay();\n var overlay = createErrorOverlay(data.diagnostics.html);\n // $FlowFixMe\n document.body.appendChild(overlay);\n }\n }\n}\nfunction removeErrorOverlay() {\n var overlay = document.getElementById(OVERLAY_ID);\n if (overlay) {\n overlay.remove();\n console.log('[parcel] ✨ Error resolved');\n }\n}\nfunction createErrorOverlay(diagnostics) {\n var overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n let errorHTML = '<div style=\"background: black; opacity: 0.85; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; font-family: Menlo, Consolas, monospace; z-index: 9999;\">';\n for (let diagnostic of diagnostics) {\n let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame) => {\n return `${p}\n<a href=\"${protocol === 'wss' ? 'https' : 'http'}://${hostname}:${port}/__parcel_launch_editor?file=${encodeURIComponent(frame.location)}\" style=\"text-decoration: underline; color: #888\" onclick=\"fetch(this.href); return false\">${frame.location}</a>\n${frame.code}`;\n }, '') : diagnostic.stack;\n errorHTML += `\n <div>\n <div style=\"font-size: 18px; font-weight: bold; margin-top: 20px;\">\n 🚨 ${diagnostic.message}\n </div>\n <pre>${stack}</pre>\n <div>\n ${diagnostic.hints.map(hint => '<div>💡 ' + hint + '</div>').join('')}\n </div>\n ${diagnostic.documentation ? `<div>📝 <a style=\"color: violet\" href=\"${diagnostic.documentation}\" target=\"_blank\">Learn more</a></div>` : ''}\n </div>\n `;\n }\n errorHTML += '</div>';\n overlay.innerHTML = errorHTML;\n return overlay;\n}\nfunction fullReload() {\n if (typeof location !== 'undefined' && 'reload' in location) {\n location.reload();\n } else if (typeof extCtx !== 'undefined' && extCtx && extCtx.runtime && extCtx.runtime.reload) {\n extCtx.runtime.reload();\n } else {\n try {\n let {\n workerData,\n parentPort\n } = module.bundle.root('node:worker_threads') /*: any*/;\n if (workerData !== null && workerData !== void 0 && workerData.__parcel) {\n parentPort.postMessage('restart');\n }\n } catch (err) {\n console.error('[parcel] ⚠️ An HMR update was not accepted. Please restart the process.');\n }\n }\n}\nfunction getParents(bundle, id) /*: Array<[ParcelRequire, string]> */{\n var modules = bundle.modules;\n if (!modules) {\n return [];\n }\n var parents = [];\n var k, d, dep;\n for (k in modules) {\n for (d in modules[k][1]) {\n dep = modules[k][1][d];\n if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {\n parents.push([bundle, k]);\n }\n }\n }\n if (bundle.parent) {\n parents = parents.concat(getParents(bundle.parent, id));\n }\n return parents;\n}\nfunction updateLink(link) {\n var href = link.getAttribute('href');\n if (!href) {\n return;\n }\n var newLink = link.cloneNode();\n newLink.onload = function () {\n if (link.parentNode !== null) {\n // $FlowFixMe\n link.parentNode.removeChild(link);\n }\n };\n newLink.setAttribute('href',\n // $FlowFixMe\n href.split('?')[0] + '?' + Date.now());\n // $FlowFixMe\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout || typeof document === 'undefined') {\n return;\n }\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n // $FlowFixMe[incompatible-type]\n var href /*: string */ = links[i].getAttribute('href');\n var hostname = getHostname();\n var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\\\/\\\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort());\n var absolute = /^https?:\\/\\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer;\n if (!absolute) {\n updateLink(links[i]);\n }\n }\n cssTimeout = null;\n }, 50);\n}\nfunction hmrDownload(asset) {\n if (asset.type === 'js') {\n if (typeof document !== 'undefined') {\n let script = document.createElement('script');\n script.src = asset.url + '?t=' + Date.now();\n if (asset.outputFormat === 'esmodule') {\n script.type = 'module';\n }\n return new Promise((resolve, reject) => {\n var _document$head;\n script.onload = () => resolve(script);\n script.onerror = reject;\n (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script);\n });\n } else if (typeof importScripts === 'function') {\n // Worker scripts\n if (asset.outputFormat === 'esmodule') {\n return __parcel__import__(asset.url + '?t=' + Date.now());\n } else {\n return new Promise((resolve, reject) => {\n try {\n __parcel__importScripts__(asset.url + '?t=' + Date.now());\n resolve();\n } catch (err) {\n reject(err);\n }\n });\n }\n }\n }\n}\nasync function hmrApplyUpdates(assets) {\n global.parcelHotUpdate = Object.create(null);\n let scriptsToRemove;\n try {\n // If sourceURL comments aren't supported in eval, we need to load\n // the update from the dev server over HTTP so that stack traces\n // are correct in errors/logs. This is much slower than eval, so\n // we only do it if needed (currently just Safari).\n // https://bugs.webkit.org/show_bug.cgi?id=137297\n // This path is also taken if a CSP disallows eval.\n if (!supportsSourceURL) {\n let promises = assets.map(asset => {\n var _hmrDownload;\n return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch(err => {\n // Web extension fix\n if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) {\n extCtx.runtime.reload();\n return;\n }\n throw err;\n });\n });\n scriptsToRemove = await Promise.all(promises);\n }\n assets.forEach(function (asset) {\n hmrApply(module.bundle.root, asset);\n });\n } finally {\n delete global.parcelHotUpdate;\n if (scriptsToRemove) {\n scriptsToRemove.forEach(script => {\n if (script) {\n var _document$head2;\n (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script);\n }\n });\n }\n }\n}\nfunction hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (asset.type === 'css') {\n reloadCSS();\n } else if (asset.type === 'js') {\n let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID];\n if (deps) {\n if (modules[asset.id]) {\n // Remove dependencies that are removed and will become orphaned.\n // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload.\n let oldDeps = modules[asset.id][1];\n for (let dep in oldDeps) {\n if (!deps[dep] || deps[dep] !== oldDeps[dep]) {\n let id = oldDeps[dep];\n let parents = getParents(module.bundle.root, id);\n if (parents.length === 1) {\n hmrDelete(module.bundle.root, id);\n }\n }\n }\n }\n if (supportsSourceURL) {\n // Global eval. We would use `new Function` here but browser\n // support for source maps is better with eval.\n (0, eval)(asset.output);\n }\n\n // $FlowFixMe\n let fn = global.parcelHotUpdate[asset.id];\n modules[asset.id] = [fn, deps];\n }\n\n // Always traverse to the parent bundle, even if we already replaced the asset in this bundle.\n // This is required in case modules are duplicated. We need to ensure all instances have the updated code.\n if (bundle.parent) {\n hmrApply(bundle.parent, asset);\n }\n }\n}\nfunction hmrDelete(bundle, id) {\n let modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (modules[id]) {\n // Collect dependencies that will become orphaned when this module is deleted.\n let deps = modules[id][1];\n let orphans = [];\n for (let dep in deps) {\n let parents = getParents(module.bundle.root, deps[dep]);\n if (parents.length === 1) {\n orphans.push(deps[dep]);\n }\n }\n\n // Delete the module. This must be done before deleting dependencies in case of circular dependencies.\n delete modules[id];\n delete bundle.cache[id];\n\n // Now delete the orphans.\n orphans.forEach(id => {\n hmrDelete(module.bundle.root, id);\n });\n } else if (bundle.parent) {\n hmrDelete(bundle.parent, id);\n }\n}\nfunction hmrAcceptCheck(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n checkedAssets = {};\n if (hmrAcceptCheckOne(bundle, id, depsByBundle)) {\n return true;\n }\n\n // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload.\n let parents = getParents(module.bundle.root, id);\n let accepted = false;\n while (parents.length > 0) {\n let v = parents.shift();\n let a = hmrAcceptCheckOne(v[0], v[1], null);\n if (a) {\n // If this parent accepts, stop traversing upward, but still consider siblings.\n accepted = true;\n } else if (a !== null) {\n // Otherwise, queue the parents in the next level upward.\n let p = getParents(module.bundle.root, v[1]);\n if (p.length === 0) {\n // If there are no parents, then we've reached an entry without accepting. Reload.\n accepted = false;\n break;\n }\n parents.push(...p);\n }\n }\n return accepted;\n}\nfunction hmrAcceptCheckOne(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) {\n // If we reached the root bundle without finding where the asset should go,\n // there's nothing to do. Mark as \"accepted\" so we don't reload the page.\n if (!bundle.parent) {\n bundleNotFound = true;\n return true;\n }\n return hmrAcceptCheckOne(bundle.parent, id, depsByBundle);\n }\n if (checkedAssets[id]) {\n return null;\n }\n checkedAssets[id] = true;\n var cached = bundle.cache[id];\n if (!cached) {\n return true;\n }\n assetsToDispose.push([bundle, id]);\n if (cached && cached.hot && cached.hot._acceptCallbacks.length) {\n assetsToAccept.push([bundle, id]);\n return true;\n }\n return false;\n}\nfunction hmrDisposeQueue() {\n // Dispose all old assets.\n for (let i = 0; i < assetsToDispose.length; i++) {\n let id = assetsToDispose[i][1];\n if (!disposedAssets[id]) {\n hmrDispose(assetsToDispose[i][0], id);\n disposedAssets[id] = true;\n }\n }\n assetsToDispose = [];\n}\nfunction hmrDispose(bundle /*: ParcelRequire */, id /*: string */) {\n var cached = bundle.cache[id];\n bundle.hotData[id] = {};\n if (cached && cached.hot) {\n cached.hot.data = bundle.hotData[id];\n }\n if (cached && cached.hot && cached.hot._disposeCallbacks.length) {\n cached.hot._disposeCallbacks.forEach(function (cb) {\n cb(bundle.hotData[id]);\n });\n }\n delete bundle.cache[id];\n}\nfunction hmrAccept(bundle /*: ParcelRequire */, id /*: string */) {\n // Execute the module.\n bundle(id);\n\n // Run the accept callbacks in the new version of the module.\n var cached = bundle.cache[id];\n if (cached && cached.hot && cached.hot._acceptCallbacks.length) {\n let assetsToAlsoAccept = [];\n cached.hot._acceptCallbacks.forEach(function (cb) {\n let additionalAssets = cb(function () {\n return getParents(module.bundle.root, id);\n });\n if (Array.isArray(additionalAssets) && additionalAssets.length) {\n assetsToAlsoAccept.push(...additionalAssets);\n }\n });\n if (assetsToAlsoAccept.length) {\n let handled = assetsToAlsoAccept.every(function (a) {\n return hmrAcceptCheck(a[0], a[1]);\n });\n if (!handled) {\n return fullReload();\n }\n hmrDisposeQueue();\n }\n }\n}","import {\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { shellui } from '@shellui/sdk';\nimport type { NavigationItem, NavigationGroup } from '../config/types';\nimport {\n flattenNavigationItems,\n resolveLocalizedString as resolveNavLabel,\n splitNavigationByPosition,\n} from './utils';\nimport { useSettings } from '../settings/hooks/useSettings';\nimport { LayoutProviders } from './LayoutProviders';\nimport { OverlayShell } from './OverlayShell';\nimport { ContentView } from '@/components/ContentView';\nimport { cn } from '@/lib/utils';\nimport { Z_INDEX } from '@/lib/z-index';\n\ninterface WindowsLayoutProps {\n title?: string;\n appIcon?: string;\n logo?: string;\n navigation: (NavigationItem | NavigationGroup)[];\n}\n\nconst getExternalFaviconUrl = (url: string): string | null => {\n try {\n const parsed = new URL(url);\n const hostname = parsed.hostname;\n if (!hostname) return null;\n return `https://icons.duckduckgo.com/ip3/${hostname}.ico`;\n } catch {\n return null;\n }\n};\n\n/** True when the icon is a local app icon (/icons/); apply theme (dark invert) so it matches foreground. */\nconst isAppIcon = (src: string) => src.startsWith('/icons/');\n\nconst genId = () => `win-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n\nexport interface WindowState {\n id: string;\n path: string;\n pathname: string;\n baseUrl: string;\n label: string;\n icon: string | null;\n bounds: { x: number; y: number; w: number; h: number };\n}\n\nconst MIN_WIDTH = 280;\nconst MIN_HEIGHT = 200;\nconst DEFAULT_WIDTH = 720;\nconst DEFAULT_HEIGHT = 480;\nconst TASKBAR_HEIGHT = 48;\n\nfunction getMaximizedBounds(): WindowState['bounds'] {\n return {\n x: 0,\n y: 0,\n w: typeof window !== 'undefined' ? window.innerWidth : 800,\n h: typeof window !== 'undefined' ? window.innerHeight - TASKBAR_HEIGHT : 600,\n };\n}\n\nfunction buildFinalUrl(baseUrl: string, path: string, pathname: string): string {\n const pathPrefix = `/${path}`;\n const subPath = pathname.length > pathPrefix.length ? pathname.slice(pathPrefix.length + 1) : '';\n if (!subPath) return baseUrl;\n const base = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n return `${base}${subPath}`;\n}\n\n/** Single draggable/resizable window */\nfunction AppWindow({\n win,\n navItem,\n currentLanguage,\n isFocused,\n onFocus,\n onClose,\n onBoundsChange,\n maxZIndex,\n zIndex,\n}: {\n win: WindowState;\n navItem: NavigationItem;\n currentLanguage: string;\n isFocused: boolean;\n onFocus: () => void;\n onClose: () => void;\n onBoundsChange: (bounds: WindowState['bounds']) => void;\n maxZIndex: number;\n zIndex: number;\n}) {\n const windowLabel = resolveNavLabel(navItem.label, currentLanguage);\n const [bounds, setBounds] = useState(win.bounds);\n const [isMaximized, setIsMaximized] = useState(false);\n const boundsBeforeMaximizeRef = useRef<WindowState['bounds']>(bounds);\n const containerRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startBounds: WindowState['bounds'];\n lastDx: number;\n lastDy: number;\n } | null>(null);\n const resizeRef = useRef<{\n edge: string;\n startX: number;\n startY: number;\n startBounds: WindowState['bounds'];\n } | null>(null);\n const resizeRafRef = useRef<number | null>(null);\n const pendingResizeBoundsRef = useRef<WindowState['bounds'] | null>(null);\n\n useEffect(() => {\n setBounds(win.bounds);\n }, [win.bounds]);\n\n useEffect(() => {\n onBoundsChange(bounds);\n }, [bounds, onBoundsChange]);\n\n // When maximized, keep filling the viewport on window resize\n useEffect(() => {\n if (!isMaximized) return;\n const onResize = () => setBounds(getMaximizedBounds());\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, [isMaximized]);\n\n const onPointerMove = useCallback((e: PointerEvent) => {\n if (!dragRef.current) return;\n const d = dragRef.current;\n const dx = e.clientX - d.startX;\n const dy = e.clientY - d.startY;\n d.lastDx = dx;\n d.lastDy = dy;\n const el = containerRef.current;\n if (el) {\n el.style.willChange = 'transform';\n el.style.transform = `translate(${dx}px, ${dy}px)`;\n }\n }, []);\n\n const onPointerUp = useCallback(\n (e: PointerEvent) => {\n const el = containerRef.current;\n if (el) {\n el.removeEventListener('pointermove', onPointerMove);\n el.removeEventListener('pointerup', onPointerUp as (e: Event) => void);\n el.releasePointerCapture(e.pointerId);\n }\n if (dragRef.current) {\n const d = dragRef.current;\n if (el) {\n el.style.transform = '';\n el.style.willChange = '';\n }\n const finalBounds: WindowState['bounds'] = {\n ...d.startBounds,\n x: Math.max(0, d.startBounds.x + d.lastDx),\n y: Math.max(0, d.startBounds.y + d.lastDy),\n };\n setBounds(finalBounds);\n dragRef.current = null;\n }\n },\n [onPointerMove],\n );\n\n const handleTitlePointerDown = useCallback(\n (e: ReactPointerEvent) => {\n if (e.button !== 0 || isMaximized) return;\n // Don't start drag when clicking a button (close, maximize) so their click handlers run\n if ((e.target as Element).closest('button')) return;\n e.preventDefault();\n onFocus();\n dragRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startBounds: { ...bounds },\n lastDx: 0,\n lastDy: 0,\n };\n const el = containerRef.current;\n if (el) {\n el.setPointerCapture(e.pointerId);\n el.addEventListener('pointermove', onPointerMove, { passive: true });\n el.addEventListener('pointerup', onPointerUp as (e: Event) => void);\n }\n },\n [bounds, isMaximized, onFocus, onPointerMove, onPointerUp],\n );\n\n const handleMaximizeToggle = useCallback(() => {\n if (isMaximized) {\n setBounds(boundsBeforeMaximizeRef.current);\n setIsMaximized(false);\n } else {\n boundsBeforeMaximizeRef.current = { ...bounds };\n setBounds(getMaximizedBounds());\n setIsMaximized(true);\n }\n }, [isMaximized, bounds]);\n\n const onResizePointerMove = useCallback((e: PointerEvent) => {\n if (!resizeRef.current) return;\n const { edge, startX, startY, startBounds } = resizeRef.current;\n const dx = e.clientX - startX;\n const dy = e.clientY - startY;\n const next: WindowState['bounds'] = { ...startBounds };\n if (edge.includes('e')) next.w = Math.max(MIN_WIDTH, startBounds.w + dx);\n if (edge.includes('w')) {\n const newW = Math.max(MIN_WIDTH, startBounds.w - dx);\n next.x = startBounds.x + startBounds.w - newW;\n next.w = newW;\n }\n if (edge.includes('s')) next.h = Math.max(MIN_HEIGHT, startBounds.h + dy);\n if (edge.includes('n')) {\n const newH = Math.max(MIN_HEIGHT, startBounds.h - dy);\n next.y = startBounds.y + startBounds.h - newH;\n next.h = newH;\n }\n pendingResizeBoundsRef.current = next;\n if (resizeRafRef.current === null) {\n resizeRafRef.current = requestAnimationFrame(() => {\n const pending = pendingResizeBoundsRef.current;\n resizeRafRef.current = null;\n pendingResizeBoundsRef.current = null;\n if (pending) setBounds(pending);\n });\n }\n }, []);\n\n const onResizePointerUp = useCallback(\n (e: PointerEvent) => {\n const el = containerRef.current;\n if (el) {\n el.removeEventListener('pointermove', onResizePointerMove as (e: Event) => void);\n el.removeEventListener('pointerup', onResizePointerUp as (e: Event) => void);\n el.releasePointerCapture(e.pointerId);\n }\n resizeRef.current = null;\n },\n [onResizePointerMove],\n );\n\n const handleResizePointerDown = useCallback(\n (e: ReactPointerEvent, edge: string) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n onFocus();\n resizeRef.current = {\n edge,\n startX: e.clientX,\n startY: e.clientY,\n startBounds: { ...bounds },\n };\n const el = containerRef.current;\n if (el) {\n el.setPointerCapture(e.pointerId);\n el.addEventListener('pointermove', onResizePointerMove as (e: Event) => void, {\n passive: true,\n });\n el.addEventListener('pointerup', onResizePointerUp as (e: Event) => void);\n }\n },\n [bounds, onFocus, onResizePointerMove, onResizePointerUp],\n );\n\n const finalUrl = useMemo(\n () => buildFinalUrl(win.baseUrl, win.path, win.pathname),\n [win.baseUrl, win.path, win.pathname],\n );\n\n const z = isFocused ? maxZIndex : zIndex;\n\n return (\n <div\n ref={containerRef}\n className=\"absolute flex flex-col rounded-lg border border-border bg-card shadow-lg overflow-hidden\"\n style={{\n left: bounds.x,\n top: bounds.y,\n width: bounds.w,\n height: bounds.h,\n zIndex: z,\n }}\n onClick={onFocus}\n onMouseDown={onFocus}\n >\n {/* Title bar: pointer capture so drag continues when cursor is over iframe or outside window */}\n <div\n className=\"flex items-center gap-2 pl-2 pr-1 py-1 bg-muted/80 border-b border-border cursor-move select-none shrink-0\"\n onPointerDown={handleTitlePointerDown}\n >\n {win.icon && (\n <img\n src={win.icon}\n alt=\"\"\n className={cn(\n 'h-4 w-4 shrink-0 rounded-sm object-cover',\n isAppIcon(win.icon) && 'opacity-90 dark:opacity-100 dark:invert',\n )}\n />\n )}\n <span className=\"flex-1 text-sm font-medium truncate min-w-0\">{windowLabel}</span>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleMaximizeToggle();\n }}\n className=\"p-1 rounded cursor-pointer text-muted-foreground hover:bg-sidebar-accent/50 hover:text-sidebar-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n aria-label={isMaximized ? 'Restore' : 'Maximize'}\n >\n {isMaximized ? <RestoreIcon className=\"h-4 w-4\" /> : <MaximizeIcon className=\"h-4 w-4\" />}\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n className=\"p-1 rounded cursor-pointer text-muted-foreground hover:bg-destructive/20 hover:text-destructive transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n aria-label=\"Close\"\n >\n <CloseIcon className=\"h-4 w-4\" />\n </button>\n </div>\n {/* Content */}\n <div className=\"flex-1 min-h-0 relative bg-background\">\n {/* When not focused, overlay captures clicks to bring window to front */}\n {!isFocused && (\n <div\n className=\"absolute inset-0 z-10 cursor-pointer\"\n onClick={onFocus}\n onMouseDown={(e) => {\n e.stopPropagation();\n onFocus();\n }}\n aria-hidden\n />\n )}\n <ContentView\n url={finalUrl}\n pathPrefix={win.path}\n ignoreMessages={true}\n navItem={navItem}\n />\n </div>\n {/* Resize handles (hidden when maximized) */}\n {!isMaximized &&\n (['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'] as const).map((edge) => (\n <div\n key={edge}\n className={cn(\n 'absolute bg-transparent',\n edge.includes('n') && 'top-0 h-2 cursor-n-resize',\n edge.includes('s') && 'bottom-0 h-2 cursor-s-resize',\n edge.includes('e') && 'right-0 w-2 cursor-e-resize',\n edge.includes('w') && 'left-0 w-2 cursor-w-resize',\n edge === 'n' && 'left-2 right-2',\n edge === 's' && 'left-2 right-2',\n edge === 'e' && 'top-2 bottom-2',\n edge === 'w' && 'top-2 bottom-2',\n edge === 'ne' && 'top-0 right-0 w-2 h-2 cursor-ne-resize',\n edge === 'nw' && 'top-0 left-0 w-2 h-2 cursor-nw-resize',\n edge === 'se' && 'bottom-0 right-0 w-2 h-2 cursor-se-resize',\n edge === 'sw' && 'bottom-0 left-0 w-2 h-2 cursor-sw-resize',\n )}\n style={\n edge === 'n'\n ? { left: 8, right: 8 }\n : edge === 's'\n ? { left: 8, right: 8 }\n : edge === 'e'\n ? { top: 8, bottom: 8 }\n : edge === 'w'\n ? { top: 8, bottom: 8 }\n : undefined\n }\n onPointerDown={(e) => handleResizePointerDown(e, edge)}\n />\n ))}\n </div>\n );\n}\n\nfunction MaximizeIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3\" />\n <path d=\"M21 8V5a2 2 0 0 0-2-2h-3\" />\n <path d=\"M3 16v3a2 2 0 0 0 2 2h3\" />\n <path d=\"M16 21h3a2 2 0 0 0 2-2v-3\" />\n </svg>\n );\n}\n\nfunction RestoreIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <rect\n x=\"3\"\n y=\"3\"\n width=\"10\"\n height=\"10\"\n rx=\"1\"\n />\n <rect\n x=\"11\"\n y=\"11\"\n width=\"10\"\n height=\"10\"\n rx=\"1\"\n />\n </svg>\n );\n}\n\nfunction CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\n/** Start menu icon (Windows-style) */\nfunction StartIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n aria-hidden\n >\n <path d=\"M3 3h8v8H3V3zm10 0h8v8h-8V3zM3 13h8v8H3v-8zm10 0h8v8h-8v-8z\" />\n </svg>\n );\n}\n\nfunction getBrowserTimezone(): string {\n if (typeof window !== 'undefined' && Intl.DateTimeFormat) {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n return 'UTC';\n}\n\nexport function WindowsLayout({\n title,\n appIcon: _appIcon,\n logo: _logo,\n navigation,\n}: WindowsLayoutProps) {\n const { i18n } = useTranslation();\n const { settings } = useSettings();\n const currentLanguage = i18n.language || 'en';\n const timeZone = settings.region?.timezone ?? getBrowserTimezone();\n const { startNavItems, endNavItems, navigationItems } = useMemo(() => {\n const { start, end } = splitNavigationByPosition(navigation);\n return {\n startNavItems: flattenNavigationItems(start),\n endNavItems: end,\n navigationItems: flattenNavigationItems(navigation),\n };\n }, [navigation]);\n\n const [windows, setWindows] = useState<WindowState[]>([]);\n /** Id of the window that is on top (first plan). Clicking a window or its taskbar button sets this. */\n const [frontWindowId, setFrontWindowId] = useState<string | null>(null);\n const [startMenuOpen, setStartMenuOpen] = useState(false);\n const [now, setNow] = useState(() => new Date());\n const startPanelRef = useRef<HTMLDivElement>(null);\n\n // Update date/time every second for taskbar clock\n useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 1000);\n return () => clearInterval(interval);\n }, []);\n\n /** Highest z-index: front window always gets this so it stays on top. */\n const maxZIndex = useMemo(\n () => Z_INDEX.WINDOWS_WINDOW_BASE + Math.max(windows.length, 1),\n [windows.length],\n );\n\n const openWindow = useCallback(\n (item: NavigationItem) => {\n const label =\n typeof item.label === 'string' ? item.label : resolveNavLabel(item.label, currentLanguage);\n const faviconUrl =\n item.openIn === 'external' && !item.icon ? getExternalFaviconUrl(item.url) : null;\n const icon = item.icon ?? faviconUrl ?? null;\n const id = genId();\n const bounds = {\n x: 60 + windows.length * 24,\n y: 60 + windows.length * 24,\n w: DEFAULT_WIDTH,\n h: DEFAULT_HEIGHT,\n };\n setWindows((prev) => [\n ...prev,\n {\n id,\n path: item.path,\n pathname: `/${item.path}`,\n baseUrl: item.url,\n label,\n icon,\n bounds,\n },\n ]);\n setFrontWindowId(id);\n setStartMenuOpen(false);\n },\n [currentLanguage, windows.length],\n );\n\n const closeWindow = useCallback((id: string) => {\n setWindows((prev) => prev.filter((w) => w.id !== id));\n setFrontWindowId((current) => (current === id ? null : current));\n }, []);\n\n // When front window is closed or missing, bring first window to front\n useEffect(() => {\n if (windows.length === 0) {\n setFrontWindowId(null);\n return;\n }\n const frontStillExists = frontWindowId !== null && windows.some((w) => w.id === frontWindowId);\n if (!frontStillExists) {\n setFrontWindowId(windows[0].id);\n }\n }, [windows, frontWindowId]);\n\n /** Bring the window to front (first plan). Used when clicking the window or its taskbar button. */\n const focusWindow = useCallback((id: string) => {\n setFrontWindowId(id);\n }, []);\n\n const updateWindowBounds = useCallback((id: string, bounds: WindowState['bounds']) => {\n setWindows((prev) => prev.map((w) => (w.id === id ? { ...w, bounds } : w)));\n }, []);\n\n // Close start menu on click outside\n useEffect(() => {\n if (!startMenuOpen) return;\n const onDocClick = (e: MouseEvent) => {\n if (startPanelRef.current && !startPanelRef.current.contains(e.target as Node)) {\n setStartMenuOpen(false);\n }\n };\n document.addEventListener('mousedown', onDocClick);\n return () => document.removeEventListener('mousedown', onDocClick);\n }, [startMenuOpen]);\n\n const handleNavClick = useCallback(\n (item: NavigationItem) => {\n if (item.openIn === 'modal') {\n shellui.openModal(item.url);\n setStartMenuOpen(false);\n return;\n }\n if (item.openIn === 'drawer') {\n shellui.openDrawer({ url: item.url, position: item.drawerPosition });\n setStartMenuOpen(false);\n return;\n }\n if (item.openIn === 'external') {\n window.open(item.url, '_blank', 'noopener,noreferrer');\n setStartMenuOpen(false);\n return;\n }\n openWindow(item);\n },\n [openWindow],\n );\n\n return (\n <LayoutProviders>\n <OverlayShell navigationItems={navigationItems}>\n <div\n className=\"fixed inset-0 bg-muted/30\"\n style={{ paddingBottom: TASKBAR_HEIGHT }}\n >\n {/* Desktop area: windows */}\n {windows.map((win, index) => {\n const navItem = navigationItems.find((n) => n.path === win.path);\n if (!navItem) return null;\n const isFocused = win.id === frontWindowId;\n const zIndex = Z_INDEX.WINDOWS_WINDOW_BASE + index;\n return (\n <AppWindow\n key={win.id}\n win={win}\n navItem={navItem}\n currentLanguage={currentLanguage}\n isFocused={isFocused}\n onFocus={() => focusWindow(win.id)}\n onClose={() => closeWindow(win.id)}\n onBoundsChange={(bounds) => updateWindowBounds(win.id, bounds)}\n maxZIndex={maxZIndex}\n zIndex={zIndex}\n />\n );\n })}\n </div>\n\n {/* Taskbar */}\n <div\n className=\"fixed left-0 right-0 bottom-0 flex items-center gap-1 px-2 border-t border-border bg-sidebar-background\"\n style={{\n height: TASKBAR_HEIGHT,\n zIndex: Z_INDEX.WINDOWS_TASKBAR,\n paddingBottom: 'env(safe-area-inset-bottom, 0px)',\n }}\n >\n {/* Start button */}\n <div\n className=\"relative shrink-0\"\n ref={startPanelRef}\n >\n <button\n type=\"button\"\n onClick={() => setStartMenuOpen((o) => !o)}\n className={cn(\n 'flex items-center gap-2 h-9 px-3 rounded cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n startMenuOpen\n ? 'bg-sidebar-accent text-sidebar-accent-foreground'\n : 'text-sidebar-foreground hover:bg-sidebar-accent/50 hover:text-sidebar-foreground',\n )}\n aria-expanded={startMenuOpen}\n aria-haspopup=\"true\"\n aria-label=\"Start\"\n >\n <StartIcon className=\"h-5 w-5\" />\n <span className=\"font-semibold text-sm hidden sm:inline\">{title || 'Start'}</span>\n </button>\n {/* Start menu panel */}\n {startMenuOpen && (\n <div\n className=\"absolute bottom-full left-0 mb-1 w-64 max-h-[70vh] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg py-2 z-[10001]\"\n style={{ zIndex: Z_INDEX.MODAL_CONTENT }}\n >\n <div className=\"px-2 pb-2 border-b border-border mb-2\">\n <span className=\"text-sm font-semibold text-popover-foreground\">\n {title || 'Applications'}\n </span>\n </div>\n <div className=\"grid gap-0.5\">\n {startNavItems\n .filter((item) => !item.hidden)\n .map((item) => {\n const label =\n typeof item.label === 'string'\n ? item.label\n : resolveNavLabel(item.label, currentLanguage);\n const icon =\n item.icon ??\n (item.openIn === 'external' ? getExternalFaviconUrl(item.url) : null);\n return (\n <button\n key={item.path}\n type=\"button\"\n onClick={() => handleNavClick(item)}\n className=\"flex items-center gap-3 w-full px-3 py-2 text-left text-sm cursor-pointer text-popover-foreground hover:bg-accent hover:text-accent-foreground rounded-none transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n >\n {icon ? (\n <img\n src={icon}\n alt=\"\"\n className={cn(\n 'h-5 w-5 shrink-0 rounded-sm object-cover',\n isAppIcon(icon) && 'opacity-90 dark:opacity-100 dark:invert',\n )}\n />\n ) : (\n <span className=\"h-5 w-5 shrink-0 rounded-sm bg-muted\" />\n )}\n <span className=\"truncate\">{label}</span>\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n\n {/* Window list */}\n <div className=\"flex-1 flex items-center gap-1 min-w-0 overflow-x-auto\">\n {windows.map((win) => {\n const navItem = navigationItems.find((n) => n.path === win.path);\n const windowLabel = navItem\n ? resolveNavLabel(navItem.label, currentLanguage)\n : win.label;\n const isFocused = win.id === frontWindowId;\n return (\n <button\n key={win.id}\n type=\"button\"\n onClick={() => focusWindow(win.id)}\n onContextMenu={(e) => {\n e.preventDefault();\n closeWindow(win.id);\n }}\n className={cn(\n 'flex items-center gap-2 h-8 px-2 rounded min-w-0 max-w-[140px] shrink-0 cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n isFocused\n ? 'bg-sidebar-accent text-sidebar-accent-foreground'\n : 'text-sidebar-foreground hover:bg-sidebar-accent/50 hover:text-sidebar-foreground',\n )}\n title={windowLabel}\n >\n {win.icon ? (\n <img\n src={win.icon}\n alt=\"\"\n className={cn(\n 'h-4 w-4 shrink-0 rounded-sm object-cover',\n isAppIcon(win.icon) && 'opacity-90 dark:opacity-100 dark:invert',\n )}\n />\n ) : (\n <span className=\"h-4 w-4 shrink-0 rounded-sm bg-muted\" />\n )}\n <span className=\"text-xs truncate\">{windowLabel}</span>\n </button>\n );\n })}\n </div>\n\n {/* End navigation items (right side of taskbar) */}\n {endNavItems.length > 0 && (\n <div className=\"flex items-center gap-0.5 shrink-0 border-l border-sidebar-border pl-2 ml-1\">\n {endNavItems.map((item) => {\n const label =\n typeof item.label === 'string'\n ? item.label\n : resolveNavLabel(item.label, currentLanguage);\n const icon =\n item.icon ??\n (item.openIn === 'external' ? getExternalFaviconUrl(item.url) : null);\n return (\n <button\n key={item.path}\n type=\"button\"\n onClick={() => handleNavClick(item)}\n className=\"flex items-center gap-2 h-8 px-2 rounded cursor-pointer text-sidebar-foreground hover:bg-sidebar-accent/50 hover:text-sidebar-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n title={label}\n >\n {icon ? (\n <img\n src={icon}\n alt=\"\"\n className={cn(\n 'h-4 w-4 shrink-0 rounded-sm object-cover',\n isAppIcon(icon) && 'opacity-90 dark:opacity-100 dark:invert',\n )}\n />\n ) : (\n <span className=\"h-4 w-4 shrink-0 rounded-sm bg-muted\" />\n )}\n <span className=\"text-xs truncate max-w-[100px]\">{label}</span>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Date and time (extreme bottom right, OS-style); uses region timezone from settings */}\n <div\n className=\"flex flex-col items-end justify-center shrink-0 px-3 py-1 text-sidebar-foreground border-l border-sidebar-border ml-1 min-w-0\"\n style={{ paddingRight: 'max(0.75rem, env(safe-area-inset-right))' }}\n role=\"timer\"\n aria-live=\"off\"\n aria-label={new Intl.DateTimeFormat(currentLanguage, {\n timeZone,\n dateStyle: 'full',\n timeStyle: 'medium',\n }).format(now)}\n >\n <time\n dateTime={now.toISOString()}\n className=\"text-xs leading-tight tabular-nums whitespace-nowrap\"\n >\n {new Intl.DateTimeFormat(currentLanguage, {\n timeZone,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }).format(now)}\n </time>\n <time\n dateTime={now.toISOString()}\n className=\"text-[10px] leading-tight whitespace-nowrap text-sidebar-foreground/90\"\n >\n {new Intl.DateTimeFormat(currentLanguage, {\n timeZone,\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n }).format(now)}\n </time>\n </div>\n </div>\n </OverlayShell>\n </LayoutProviders>\n );\n}\n","/* eslint-disable no-console */\nimport type { NavigationItem } from '@/features/config/types';\nimport {\n addIframe,\n removeIframe,\n shellui,\n getLogger,\n type ShellUIUrlPayload,\n type ShellUIMessage,\n} from '@shellui/sdk';\nimport { useEffect, useRef, useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { LoadingOverlay } from './LoadingOverlay';\n\nconst logger = getLogger('shellcore');\n\ninterface ContentViewProps {\n url: string;\n pathPrefix: string;\n ignoreMessages?: boolean;\n navItem: NavigationItem;\n}\n\nexport const ContentView = ({\n url,\n pathPrefix,\n ignoreMessages = false,\n navItem,\n}: ContentViewProps) => {\n const navigate = useNavigate();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const isInternalNavigation = useRef(false);\n const [initialUrl] = useState(url);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!iframeRef.current) {\n return;\n }\n const iframeId = addIframe(iframeRef.current);\n return () => {\n removeIframe(iframeId);\n };\n }, []);\n\n // Sync parent URL when iframe notifies us of a change\n useEffect(() => {\n const cleanup = shellui.addMessageListener(\n 'SHELLUI_URL_CHANGED',\n (data: ShellUIMessage, event: MessageEvent) => {\n if (ignoreMessages) {\n return;\n }\n\n // Ignore URL CHANGE from other than ContentView iframe\n if (event.source !== iframeRef.current?.contentWindow) {\n return;\n }\n\n const { pathname, search, hash } = data.payload as ShellUIUrlPayload;\n // Remove leading slash and trailing slashes from iframe pathname\n let cleanPathname = pathname.startsWith(navItem.url)\n ? pathname.slice(navItem.url.length)\n : pathname;\n cleanPathname = cleanPathname.startsWith('/') ? cleanPathname.slice(1) : cleanPathname;\n cleanPathname = cleanPathname.replace(/\\/+$/, ''); // Remove trailing slashes\n // Construct the new path without trailing slashes\n let newShellPath = cleanPathname\n ? `/${pathPrefix}/${cleanPathname}${search}${hash}`\n : `/${pathPrefix}${search}${hash}`;\n\n // Normalize: remove trailing slashes from pathname part only (preserve query/hash)\n const urlParts = newShellPath.match(/^([^?#]*)([?#].*)?$/);\n if (urlParts) {\n const pathnamePart = urlParts[1].replace(/\\/+$/, '') || '/';\n const queryHashPart = urlParts[2] || '';\n newShellPath = pathnamePart + queryHashPart;\n }\n\n // Normalize current path for comparison (remove trailing slashes from pathname)\n const currentPathname = window.location.pathname.replace(/\\/+$/, '') || '/';\n const currentPath = currentPathname + window.location.search + window.location.hash;\n\n // Normalize new path for comparison\n const newPathParts = newShellPath.match(/^([^?#]*)([?#].*)?$/);\n const normalizedNewPathname = newPathParts?.[1]?.replace(/\\/+$/, '') || '/';\n const normalizedNewPath = normalizedNewPathname + (newPathParts?.[2] || '');\n\n if (currentPath !== normalizedNewPath) {\n // Mark this navigation as internal so we don't try to \"push\" it back to the iframe\n isInternalNavigation.current = true;\n navigate(newShellPath, { replace: true });\n\n // Reset the flag after a short delay to allow the render cycle to complete\n setTimeout(() => {\n isInternalNavigation.current = false;\n }, 100);\n }\n },\n );\n\n return () => {\n cleanup();\n };\n }, [pathPrefix, navigate]);\n\n // Hide loading overlay when iframe sends SHELLUI_INITIALIZED\n useEffect(() => {\n const cleanup = shellui.addMessageListener(\n 'SHELLUI_INITIALIZED',\n (_data: ShellUIMessage, event: MessageEvent) => {\n if (event.source === iframeRef.current?.contentWindow) {\n setIsLoading(false);\n }\n },\n );\n return () => cleanup();\n }, []);\n\n // Fallback: hide overlay after 400ms if SHELLUI_INITIALIZED was not received\n useEffect(() => {\n if (!isLoading) return;\n const timeoutId = setTimeout(() => {\n logger.info('ContentView: Timeout expired, hiding loading overlay');\n setIsLoading(false);\n }, 400);\n return () => clearTimeout(timeoutId);\n }, [isLoading]);\n\n // Handle external URL changes (e.g. from Sidebar)\n useEffect(() => {\n if (iframeRef.current && !isInternalNavigation.current) {\n // Only update iframe src if it's actually different from its current src\n // to avoid unnecessary reloads\n if (iframeRef.current.src !== url) {\n iframeRef.current.src = url;\n setIsLoading(true);\n }\n }\n }, [url]);\n\n // Inject script to prevent \"Layout was forced\" warning by deferring layout until stylesheets load\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n const handleLoad = () => {\n try {\n const iframeWindow = iframe.contentWindow;\n const iframeDoc = iframe.contentDocument || iframeWindow?.document;\n if (!iframeDoc || !iframeWindow) return;\n\n // Inject a script that waits for stylesheets before allowing layout calculations\n const script = iframeDoc.createElement('script');\n script.textContent = `\n (function() {\n // Wait for all stylesheets to load\n function waitForStylesheets() {\n const styleSheets = Array.from(document.styleSheets);\n const pendingSheets = styleSheets.filter(function(sheet) {\n try {\n return sheet.cssRules === null;\n } catch (e) {\n return false; // Cross-origin stylesheets, assume loaded\n }\n });\n \n if (pendingSheets.length === 0) {\n // All stylesheets loaded\n return;\n }\n \n // Check again after a short delay\n setTimeout(waitForStylesheets, 10);\n }\n \n // Start checking after DOM is ready\n if (document.readyState === 'complete') {\n waitForStylesheets();\n } else {\n window.addEventListener('load', waitForStylesheets);\n }\n })();\n `;\n iframeDoc.head.appendChild(script);\n } catch (error) {\n // Cross-origin or other errors - ignore (this is expected for some iframes)\n logger.debug('Could not inject stylesheet wait script:', { error });\n }\n };\n\n // Wait for iframe to load before injecting script\n iframe.addEventListener('load', handleLoad);\n\n // Also try immediately if already loaded\n if (iframe.contentDocument?.readyState === 'complete') {\n handleLoad();\n }\n\n return () => {\n iframe.removeEventListener('load', handleLoad);\n };\n }, [initialUrl]);\n\n // Suppress browser warnings that are expected and acceptable\n useEffect(() => {\n if (process.env.NODE_ENV === 'development') {\n const originalWarn = console.warn;\n console.warn = (...args: unknown[]) => {\n const message = String(args[0] ?? '');\n // Suppress the specific sandbox warning\n if (\n message.includes('allow-scripts') &&\n message.includes('allow-same-origin') &&\n message.includes('sandbox')\n ) {\n return;\n }\n // Suppress \"Layout was forced\" warning from iframe content\n // This is a performance warning that occurs when iframe content calculates layout before stylesheets load\n // It's harmless and common in iframe scenarios, especially with React apps\n if (\n message.includes('Layout was forced') &&\n message.includes('before the page was fully loaded')\n ) {\n return;\n }\n originalWarn.apply(console, args);\n };\n return () => {\n console.warn = originalWarn;\n };\n }\n }, []);\n\n return (\n <div style={{ width: '100%', height: '100%', display: 'flex', position: 'relative' }}>\n {/* Note: allow-same-origin is required for same-origin iframe content (e.g., Vite dev server, cookies, localStorage).\n While this allows the iframe to remove its own sandboxing, it's acceptable here because the iframe content\n is trusted microfrontend content from the same application origin.\n Browser security warnings about this combination cannot be suppressed programmatically. */}\n <iframe\n ref={iframeRef}\n src={initialUrl}\n style={{\n width: '100%',\n height: '100%',\n border: 'none',\n display: 'block',\n }}\n title=\"Content Frame\"\n sandbox=\"allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox\"\n referrerPolicy=\"no-referrer-when-downgrade\"\n />\n {isLoading && <LoadingOverlay />}\n </div>\n );\n};\n","export function LoadingOverlay() {\n return (\n <div className=\"absolute inset-0 z-10 flex flex-col bg-background\">\n <div className=\"h-1 w-full overflow-hidden bg-muted/30\">\n <div\n className=\"h-full w-0 bg-muted-foreground/50\"\n style={{ animation: 'loading-bar-slide 400ms linear infinite' }}\n />\n </div>\n </div>\n );\n}\n"],"names":[],"version":3,"file":"WindowsLayout.08724167.js.map","sourceRoot":"/__parcel_source_root/"}
|