@tachui/viewport 0.8.0-alpha
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/LICENSE +363 -0
- package/README.md +394 -0
- package/dist/index.js +2823 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/platform-detection.ts","../src/types.ts","../src/adapters/web-adapter.ts","../src/viewport-manager.ts","../src/components.ts","../src/environment.ts","../../core/dist/reactive/types.js","../../core/dist/scheduler-BKeqwrYE.js","../../core/dist/effect-B9Knft0b.js","../../core/dist/modifiers/base.js","../src/modifiers/lifecycle.ts","../src/index.ts"],"sourcesContent":["/**\n * Platform Detection Utilities\n *\n * Detects the current runtime environment and capabilities for viewport management.\n * Provides accurate platform identification and capability detection.\n */\n\nimport type { ViewportCapabilities, ViewportEnvironment } from './types'\n\n/**\n * Configuration for platform detection behavior\n */\nexport interface PlatformDetectionConfig {\n /** Enable popup capability testing (creates temporary 1x1 window). Default: false */\n enablePopupTest?: boolean\n}\n\n/**\n * Detect the current platform and capabilities\n */\nexport function detectViewportEnvironment(\n config: PlatformDetectionConfig = {}\n): ViewportEnvironment {\n const platform = detectPlatform()\n const capabilities = detectCapabilities(platform, config)\n const userAgent = getUserAgent()\n const screenSize = getScreenSize()\n const isTouch = detectTouchSupport()\n\n return {\n platform,\n capabilities,\n userAgent,\n screenSize,\n isTouch,\n }\n}\n\n/**\n * Detect the primary platform\n */\nfunction detectPlatform(): ViewportEnvironment['platform'] {\n // Check for Electron first\n if (isElectron()) {\n return 'electron'\n }\n\n // Check for mobile\n if (isMobile()) {\n return 'mobile'\n }\n\n // Check for embedded contexts (iframe, web component, etc.)\n if (isEmbedded()) {\n return 'embedded'\n }\n\n // Default to web\n return 'web'\n}\n\n/**\n * Detect if running in Electron\n */\nfunction isElectron(): boolean {\n // Check for Electron-specific globals\n if (typeof window !== 'undefined') {\n // Electron renderer process\n return (\n !!(window as any).electronAPI ||\n !!(window as any).electron ||\n !!(window as any).require ||\n navigator.userAgent.toLowerCase().includes('electron')\n )\n }\n\n // Node.js environment (main process)\n if (typeof process !== 'undefined') {\n return (\n !!(process as any).electron ||\n !!(process as any).versions?.electron ||\n process.env.ELECTRON === 'true'\n )\n }\n\n return false\n}\n\n/**\n * Detect mobile platform\n */\nfunction isMobile(): boolean {\n if (typeof window === 'undefined') return false\n\n // Check for mobile-specific features\n const isTouchOnly = 'ontouchstart' in window && !('onmousedown' in window)\n const hasSmallScreen = window.innerWidth <= 768 || window.innerHeight <= 768\n const isMobileUserAgent =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n )\n\n // Modern mobile detection\n const hasCoarsePointer = window.matchMedia?.('(pointer: coarse)')?.matches\n const hasSmallViewport = window.matchMedia?.('(max-width: 768px)')?.matches\n\n return (\n isTouchOnly ||\n (hasSmallScreen && isMobileUserAgent) ||\n hasCoarsePointer ||\n hasSmallViewport\n )\n}\n\n/**\n * Detect if running in embedded context\n */\nfunction isEmbedded(): boolean {\n if (typeof window === 'undefined') return false\n\n try {\n // Check if we're in an iframe\n return window.self !== window.top\n } catch {\n // Cross-origin iframe - can't access window.top\n return true\n }\n}\n\n/**\n * Detect platform capabilities\n */\nfunction detectCapabilities(\n platform: ViewportEnvironment['platform'],\n config: PlatformDetectionConfig\n): ViewportCapabilities {\n const base: ViewportCapabilities = {\n multiWindow: false,\n nativeWindows: false,\n modalOverlays: true,\n crossWindowCommunication: false,\n windowResizing: false,\n windowMinimizing: false,\n fullscreenSupport: false,\n menuBarSupport: false,\n }\n\n switch (platform) {\n case 'electron':\n return {\n ...base,\n multiWindow: true,\n nativeWindows: true,\n crossWindowCommunication: true,\n windowResizing: true,\n windowMinimizing: true,\n fullscreenSupport: true,\n menuBarSupport: true,\n }\n\n case 'web':\n return {\n ...base,\n multiWindow: config.enablePopupTest ? canOpenPopups() : false,\n crossWindowCommunication:\n canUseBroadcastChannel() || canUseMessageChannel(),\n fullscreenSupport: canUseFullscreen(),\n windowResizing: false, // Browser windows can't be resized programmatically\n windowMinimizing: false,\n }\n\n case 'mobile':\n return {\n ...base,\n fullscreenSupport: canUseFullscreen(),\n modalOverlays: true,\n }\n\n case 'embedded':\n return {\n ...base,\n modalOverlays: true,\n }\n\n default:\n return base\n }\n}\n\n/**\n * Check if we can open popup windows\n */\nfunction canOpenPopups(): boolean {\n if (typeof window === 'undefined') return false\n\n // Check for jsdom test environment\n if (\n typeof window.navigator !== 'undefined' &&\n window.navigator.userAgent.includes('jsdom')\n ) {\n return false // jsdom doesn't support window.open\n }\n\n try {\n // Try to open and immediately close a popup to test\n const testWindow = window.open('', '', 'width=1,height=1')\n if (testWindow) {\n testWindow.close()\n return true\n }\n return false\n } catch {\n return false\n }\n}\n\n/**\n * Check if BroadcastChannel is supported\n */\nfunction canUseBroadcastChannel(): boolean {\n return typeof window !== 'undefined' && 'BroadcastChannel' in window\n}\n\n/**\n * Check if MessageChannel is supported\n */\nfunction canUseMessageChannel(): boolean {\n return typeof window !== 'undefined' && 'MessageChannel' in window\n}\n\n/**\n * Check if Fullscreen API is supported\n */\nfunction canUseFullscreen(): boolean {\n if (typeof document === 'undefined') return false\n\n return !!(\n document.fullscreenEnabled ||\n (document as any).webkitFullscreenEnabled ||\n (document as any).mozFullScreenEnabled ||\n (document as any).msFullscreenEnabled\n )\n}\n\n/**\n * Get user agent string safely\n */\nfunction getUserAgent(): string {\n if (typeof navigator === 'undefined') return 'unknown'\n return navigator.userAgent\n}\n\n/**\n * Get screen size safely\n */\nfunction getScreenSize(): { width: number; height: number } {\n if (typeof window === 'undefined') {\n return { width: 1920, height: 1080 } // Default fallback\n }\n\n return {\n width: window.screen?.width || window.innerWidth || 1920,\n height: window.screen?.height || window.innerHeight || 1080,\n }\n}\n\n/**\n * Detect touch support\n */\nfunction detectTouchSupport(): boolean {\n if (typeof window === 'undefined') return false\n\n return !!(\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (navigator as any).msMaxTouchPoints > 0\n )\n}\n\n/**\n * Get detailed browser information\n */\nexport function getBrowserInfo() {\n if (typeof navigator === 'undefined') {\n return {\n name: 'unknown',\n version: 'unknown',\n engine: 'unknown',\n }\n }\n\n const ua = navigator.userAgent\n let name = 'unknown'\n let version = 'unknown'\n let engine = 'unknown'\n\n // Detect browser\n if (ua.includes('Chrome')) {\n name = 'Chrome'\n const match = ua.match(/Chrome\\/(\\d+)/)\n version = match ? match[1] : 'unknown'\n engine = 'Blink'\n } else if (ua.includes('Firefox')) {\n name = 'Firefox'\n const match = ua.match(/Firefox\\/(\\d+)/)\n version = match ? match[1] : 'unknown'\n engine = 'Gecko'\n } else if (ua.includes('Safari') && !ua.includes('Chrome')) {\n name = 'Safari'\n const match = ua.match(/Version\\/(\\d+)/)\n version = match ? match[1] : 'unknown'\n engine = 'WebKit'\n } else if (ua.includes('Edge')) {\n name = 'Edge'\n const match = ua.match(/Edge\\/(\\d+)/) || ua.match(/Edg\\/(\\d+)/)\n version = match ? match[1] : 'unknown'\n engine = 'Blink'\n }\n\n return { name, version, engine }\n}\n\n/**\n * Get OS information\n */\nexport function getOSInfo() {\n if (typeof navigator === 'undefined') {\n return {\n name: 'unknown',\n version: 'unknown',\n }\n }\n\n const ua = navigator.userAgent\n let name = 'unknown'\n let version = 'unknown'\n\n if (ua.includes('Windows')) {\n name = 'Windows'\n if (ua.includes('Windows NT 10.0')) version = '10/11'\n else if (ua.includes('Windows NT 6.3')) version = '8.1'\n else if (ua.includes('Windows NT 6.2')) version = '8'\n else if (ua.includes('Windows NT 6.1')) version = '7'\n } else if (ua.includes('Mac OS X')) {\n name = 'macOS'\n const match = ua.match(/Mac OS X (\\d+_\\d+_?\\d*)/)\n if (match) {\n version = match[1].replace(/_/g, '.')\n }\n } else if (ua.includes('Linux')) {\n name = 'Linux'\n } else if (ua.includes('Android')) {\n name = 'Android'\n const match = ua.match(/Android (\\d+\\.?\\d*\\.?\\d*)/)\n version = match ? match[1] : 'unknown'\n } else if (ua.includes('iPhone OS') || ua.includes('OS ')) {\n name = 'iOS'\n const match = ua.match(/OS (\\d+_\\d+_?\\d*)/)\n if (match) {\n version = match[1].replace(/_/g, '.')\n }\n }\n\n return { name, version }\n}\n\n/**\n * Check if specific features are available\n */\nexport function checkFeatureSupport() {\n if (typeof window === 'undefined') {\n return {\n webgl: false,\n webgl2: false,\n webWorkers: false,\n serviceWorkers: false,\n pushNotifications: false,\n webAssembly: false,\n intersectionObserver: false,\n resizeObserver: false,\n }\n }\n\n return {\n webgl: !!window.WebGLRenderingContext,\n webgl2: !!window.WebGL2RenderingContext,\n webWorkers: 'Worker' in window,\n serviceWorkers: 'serviceWorker' in navigator,\n pushNotifications: 'PushManager' in window,\n webAssembly: 'WebAssembly' in window,\n intersectionObserver: 'IntersectionObserver' in window,\n resizeObserver: 'ResizeObserver' in window,\n }\n}\n\n/**\n * Create a capability checker function\n */\nexport function createCapabilityChecker(environment: ViewportEnvironment) {\n return {\n canOpenWindow: (preferNative = false) => {\n if (preferNative) {\n return environment.capabilities.nativeWindows\n }\n return (\n environment.capabilities.multiWindow ||\n environment.capabilities.modalOverlays\n )\n },\n\n canCommunicateBetweenWindows: () => {\n return environment.capabilities.crossWindowCommunication\n },\n\n canResizeWindows: () => {\n return environment.capabilities.windowResizing\n },\n\n canMinimizeWindows: () => {\n return environment.capabilities.windowMinimizing\n },\n\n canUseFullscreen: () => {\n return environment.capabilities.fullscreenSupport\n },\n\n canUseMenuBar: () => {\n return environment.capabilities.menuBarSupport\n },\n\n getOptimalViewportType: (preferNative = false) => {\n if (preferNative && environment.capabilities.nativeWindows) {\n return 'window'\n }\n\n if (environment.capabilities.modalOverlays) {\n return 'modal'\n }\n\n if (environment.platform === 'mobile') {\n return 'sheet'\n }\n\n return 'portal'\n },\n }\n}\n","/**\n * Core types for TachUI Viewport Management System\n *\n * Defines the fundamental interfaces and types for window/viewport management\n * across web, desktop, and mobile platforms.\n */\n\nimport type { Signal } from '@tachui/core'\nimport type { ComponentInstance } from '@tachui/core'\n\n/**\n * Platform detection and capabilities\n */\nexport interface ViewportEnvironment {\n platform: 'web' | 'electron' | 'mobile' | 'embedded'\n capabilities: ViewportCapabilities\n userAgent: string\n screenSize: { width: number; height: number }\n isTouch: boolean\n}\n\nexport interface ViewportCapabilities {\n multiWindow: boolean\n nativeWindows: boolean\n modalOverlays: boolean\n crossWindowCommunication: boolean\n windowResizing: boolean\n windowMinimizing: boolean\n fullscreenSupport: boolean\n menuBarSupport: boolean\n}\n\n/**\n * Window/Viewport configuration\n */\nexport interface WindowConfig {\n id: string\n title?: string\n width?: number\n height?: number\n minWidth?: number\n minHeight?: number\n maxWidth?: number\n maxHeight?: number\n x?: number\n y?: number\n resizable?: boolean\n minimizable?: boolean\n maximizable?: boolean\n closable?: boolean\n alwaysOnTop?: boolean\n modal?: boolean\n parent?: string // Parent window ID\n preferNativeWindow?: boolean\n backdropDismiss?: boolean\n escapeKeyDismiss?: boolean\n webPreferences?: {\n nodeIntegration?: boolean\n contextIsolation?: boolean\n webSecurity?: boolean\n }\n}\n\n/**\n * Viewport instance state\n */\nexport interface ViewportState {\n id: string\n title: string\n isVisible: boolean\n isMinimized: boolean\n isMaximized: boolean\n isFullscreen: boolean\n isFocused: boolean\n bounds: {\n x: number\n y: number\n width: number\n height: number\n }\n zIndex?: number\n\n // Phase 2: Enhanced state management\n isPooled: boolean // Whether window is in the pool\n lastUsed: number // Timestamp of last interaction\n groupId?: string // Window group this belongs to\n tabIndex?: number // Tab index within group\n parentWindowId?: string // Parent window for modal/child windows\n}\n\n/**\n * Viewport instance interface\n */\nexport interface ViewportInstance {\n readonly id: string\n readonly type: ViewportType\n readonly config: WindowConfig\n state: Signal<ViewportState>\n\n // Lifecycle methods\n render(component: ComponentInstance): void\n show(): Promise<void>\n hide(): Promise<void>\n focus(): Promise<void>\n minimize(): Promise<void>\n maximize(): Promise<void>\n restore(): Promise<void>\n close(): Promise<void>\n dispose(): void\n\n // Communication\n postMessage(message: any): void\n onMessage(handler: (message: any) => void): () => void // Returns unsubscribe function\n\n // Events\n onShow(handler: () => void): () => void\n onHide(handler: () => void): () => void\n onFocus(handler: () => void): () => void\n onBlur(handler: () => void): () => void\n onResize(handler: (bounds: ViewportState['bounds']) => void): () => void\n onClose(handler: () => void): () => void\n\n // Phase 2: Enhanced capabilities\n\n // Window pooling and reuse\n prepareForReuse(): Promise<void> // Clean up for reuse\n isReusable(): boolean // Check if window can be reused\n markAsUsed(): void // Update last used timestamp\n returnToPool(): Promise<void> // Return to window pool\n\n // State synchronization\n syncState<T>(key: string, value: T): void // Sync state within group\n getSharedState<T>(key: string): T | undefined // Get shared state\n onSharedStateChange<T>(key: string, callback: (value: T) => void): () => void\n\n // Tab grouping (desktop platforms)\n attachToTab(tabContainer: ViewportInstance): Promise<void>\n detachFromTab(): Promise<ViewportInstance> // Returns new standalone window\n getTabContainer(): ViewportInstance | null\n getTabIndex(): number\n setTabIndex(index: number): void\n\n // Parent-child relationships\n setParentWindow(parent: ViewportInstance): void\n getParentWindow(): ViewportInstance | null\n getChildWindows(): ViewportInstance[]\n addChildWindow(child: ViewportInstance): void\n removeChildWindow(childId: string): void\n}\n\n/**\n * Viewport types\n */\nexport type ViewportType =\n | 'window'\n | 'modal'\n | 'portal'\n | 'route'\n | 'sheet'\n | 'popover'\n\n/**\n * Window options for opening new viewports\n */\nexport interface WindowOptions extends Partial<WindowConfig> {\n preferNativeWindow?: boolean\n fallbackToModal?: boolean\n animation?: 'none' | 'fade' | 'slide' | 'scale'\n backdropDismiss?: boolean\n escapeKeyDismiss?: boolean\n}\n\n/**\n * Viewport manager interface\n */\nexport interface ViewportManager {\n readonly environment: ViewportEnvironment\n\n // Window management\n openWindow(\n id: string,\n component: ComponentInstance,\n options?: WindowOptions\n ): Promise<ViewportInstance>\n dismissWindow(id: string): Promise<void>\n getWindow(id: string): ViewportInstance | null\n getAllWindows(): ViewportInstance[]\n\n // Window groups\n createWindowGroup(groupId: string): WindowGroup\n getWindowGroup(groupId: string): WindowGroup | null\n\n // Utilities\n canOpenWindow(options?: WindowOptions): boolean\n getOptimalWindowType(options?: WindowOptions): ViewportType\n\n // Events\n onWindowOpened(handler: (window: ViewportInstance) => void): () => void\n onWindowClosed(handler: (windowId: string) => void): () => void\n}\n\n/**\n * Window group for data-driven window management\n */\n/**\n * Window grouping strategy\n */\nexport type WindowGroupingStrategy =\n | 'tabs' // Group windows as tabs (desktop)\n | 'stack' // Stack windows (mobile/web)\n | 'cascade' // Cascade windows (desktop)\n | 'tile' // Tile windows (desktop)\n\n/**\n * Window state synchronization scope\n */\nexport type StateSyncScope =\n | 'none' // No synchronization\n | 'group' // Sync within window group\n | 'global' // Sync across all windows\n\n/**\n * Window tab grouping configuration\n */\nexport interface WindowTabConfig {\n enabled: boolean\n maxTabs?: number\n tabPosition: 'top' | 'bottom' | 'left' | 'right'\n allowDetach: boolean\n allowReorder: boolean\n}\n\n/**\n * Window pool configuration\n */\nexport interface WindowPoolConfig {\n enabled: boolean\n maxPoolSize: number\n reuseThreshold: number // Reuse windows if idle for X milliseconds\n keepAliveTime: number // Keep pooled windows alive for X milliseconds\n}\n\n/**\n * Enhanced window group interface with Phase 2 features\n */\nexport interface WindowGroup {\n readonly id: string\n readonly dataType: string // For type safety with data-driven windows\n\n // Window management\n openWindow<T>(\n data: T,\n component: (data: T) => ComponentInstance\n ): Promise<ViewportInstance>\n getWindowForData<T>(data: T): ViewportInstance | null\n getAllWindows(): ViewportInstance[]\n closeAllWindows(): Promise<void>\n\n // Configuration\n setDefaultOptions(options: WindowOptions): void\n setMaxInstances(max: number): void\n\n // Phase 2: Enhanced features\n\n // Window grouping and tabbing\n setGroupingStrategy(strategy: WindowGroupingStrategy): void\n getGroupingStrategy(): WindowGroupingStrategy\n configureTabbing(config: WindowTabConfig): void\n getTabConfig(): WindowTabConfig\n\n // Window pooling and reuse\n configurePool(config: WindowPoolConfig): void\n getPoolConfig(): WindowPoolConfig\n getPooledWindows(): ViewportInstance[]\n returnToPool(window: ViewportInstance): void\n\n // State synchronization\n enableStateSync(scope: StateSyncScope): void\n syncState<T>(key: string, value: T): void\n getSharedState<T>(key: string): T | undefined\n onStateChange<T>(key: string, callback: (value: T) => void): () => void\n\n // Window lifecycle events\n onWindowCreated(callback: (window: ViewportInstance) => void): () => void\n onWindowDestroyed(callback: (windowId: string) => void): () => void\n onWindowReused(\n callback: (window: ViewportInstance, previousData: any) => void\n ): () => void\n\n // Group-level events\n onGroupEmpty(callback: () => void): () => void\n onGroupFull(callback: () => void): () => void\n}\n\n/**\n * Environment values for viewport operations (SwiftUI-style)\n */\nexport interface ViewportEnvironmentValues {\n openWindow: (\n id: string,\n component: ComponentInstance,\n options?: WindowOptions\n ) => Promise<ViewportInstance>\n dismissWindow: (id: string) => Promise<void>\n viewportEnvironment: ViewportEnvironment\n currentWindow: ViewportInstance | null\n}\n\n/**\n * Viewport adapter for platform-specific implementations\n */\nexport abstract class ViewportAdapter {\n abstract readonly environment: ViewportEnvironment\n\n // Core viewport operations\n abstract canCreateWindow(config: WindowConfig): boolean\n abstract createWindow(config: WindowConfig): ViewportInstance\n abstract destroyWindow(windowId: string): Promise<void>\n\n // Communication\n abstract setupCrossWindowCommunication(): void\n abstract broadcastMessage(message: any, excludeWindow?: string): void\n\n // Platform-specific optimizations\n abstract optimizeForPlatform(): void\n\n // Fallback strategies\n protected createModal(_config: WindowConfig): ViewportInstance {\n throw new Error('Modal fallback not implemented')\n }\n\n protected createPortal(_config: WindowConfig): ViewportInstance {\n throw new Error('Portal fallback not implemented')\n }\n}\n\n/**\n * Cross-window communication message types\n */\nexport interface WindowMessage {\n type: string\n payload: any\n source: string\n target?: string\n timestamp: number\n}\n\n/**\n * Viewport events\n */\nexport interface ViewportEvents {\n 'window:opened': { window: ViewportInstance }\n 'window:closed': { windowId: string }\n 'window:focused': { windowId: string }\n 'window:minimized': { windowId: string }\n 'window:maximized': { windowId: string }\n 'window:resized': { windowId: string; bounds: ViewportState['bounds'] }\n message: { message: WindowMessage }\n}\n\n/**\n * Viewport configuration for different platforms\n */\nexport interface ViewportPlatformConfig {\n web: {\n modalBackdropBlur: boolean\n portalContainerId: string\n animationDuration: number\n zIndexBase: number\n }\n electron: {\n enableNodeIntegration: boolean\n contextIsolation: boolean\n webSecurity: boolean\n preloadScript?: string\n }\n mobile: {\n swipeGestures: boolean\n statusBarHandling: 'auto' | 'hide' | 'overlay'\n orientationLock?: 'portrait' | 'landscape' | 'auto'\n }\n}\n","/**\n * Web Viewport Adapter\n *\n * Handles viewport management for web browsers using modals, portals, and popup windows.\n * Provides fallback strategies for different browser capabilities.\n */\n\nimport { createSignal } from '@tachui/core'\nimport type { Signal } from '@tachui/core'\nimport type { ComponentInstance } from '@tachui/core'\nimport { mountComponentTree } from '@tachui/core'\nimport {\n detectViewportEnvironment,\n type PlatformDetectionConfig,\n} from '../platform-detection'\nimport {\n ViewportAdapter,\n type ViewportEnvironment,\n type ViewportInstance,\n type ViewportState,\n type ViewportType,\n type WindowConfig,\n} from '../types'\n\n/**\n * Web-specific viewport adapter\n */\nexport class WebViewportAdapter extends ViewportAdapter {\n readonly environment: ViewportEnvironment\n private portals = new Map<string, WebPortalInstance>()\n private modals = new Map<string, WebModalInstance>()\n private popups = new Map<string, WebPopupInstance>()\n private portalContainer: HTMLElement | null = null\n private broadcastChannel: BroadcastChannel | null = null\n\n constructor(config: PlatformDetectionConfig = {}) {\n super()\n this.environment = detectViewportEnvironment(config)\n this.initializePortalContainer()\n }\n\n /**\n * Check if we can create a window with given config\n */\n canCreateWindow(config: WindowConfig): boolean {\n // Always can create modals and portals\n if (!config.preferNativeWindow) {\n return true\n }\n\n // Check if we can create popup windows\n try {\n return this.environment.capabilities.multiWindow\n } catch {\n return false\n }\n }\n\n /**\n * Create a viewport instance\n */\n createWindow(config: WindowConfig): ViewportInstance {\n const windowType = this.determineWindowType(config)\n\n switch (windowType) {\n case 'window':\n return this.createPopupWindow(config)\n\n case 'modal':\n return this.createModal(config)\n\n case 'portal':\n return this.createPortal(config)\n\n default:\n return this.createModal(config)\n }\n }\n\n /**\n * Destroy a window\n */\n async destroyWindow(windowId: string): Promise<void> {\n // Try each type\n const portal = this.portals.get(windowId)\n if (portal) {\n portal.dispose()\n this.portals.delete(windowId)\n return\n }\n\n const modal = this.modals.get(windowId)\n if (modal) {\n modal.dispose()\n this.modals.delete(windowId)\n return\n }\n\n const popup = this.popups.get(windowId)\n if (popup) {\n popup.dispose()\n this.popups.delete(windowId)\n return\n }\n }\n\n /**\n * Set up cross-window communication\n */\n setupCrossWindowCommunication(): void {\n if ('BroadcastChannel' in window) {\n // Use BroadcastChannel for same-origin communication\n this.broadcastChannel = new BroadcastChannel('tachui-viewport')\n\n this.broadcastChannel.addEventListener(\n 'message',\n (event: MessageEvent) => {\n this.handleCrossWindowMessage(event.data)\n }\n )\n } else {\n // Fallback to localStorage events\n const handleStorage = (event: StorageEvent) => {\n if (event.key === 'tachui-viewport-message') {\n try {\n const message = JSON.parse(event.newValue || '{}')\n this.handleCrossWindowMessage(message)\n } catch {\n // Ignore malformed messages\n }\n }\n }\n if (typeof window !== 'undefined') {\n ;(window as any).addEventListener('storage', handleStorage)\n }\n }\n }\n\n /**\n * Broadcast message to other windows\n */\n broadcastMessage(message: any, _excludeWindow?: string): void {\n const messageData = {\n ...message,\n timestamp: Date.now(),\n source: window.location.href,\n }\n\n if (this.broadcastChannel) {\n this.broadcastChannel.postMessage(messageData)\n } else {\n // Fallback to localStorage\n localStorage.setItem(\n 'tachui-viewport-message',\n JSON.stringify(messageData)\n )\n // Clear after a moment to avoid storage bloat\n setTimeout(() => {\n localStorage.removeItem('tachui-viewport-message')\n }, 100)\n }\n }\n\n /**\n * Optimize for web platform\n */\n optimizeForPlatform(): void {\n // Set up CSS custom properties for theming\n document.documentElement.style.setProperty(\n '--tachui-modal-backdrop-blur',\n '8px'\n )\n document.documentElement.style.setProperty(\n '--tachui-modal-animation-duration',\n '200ms'\n )\n document.documentElement.style.setProperty('--tachui-modal-z-index', '1000')\n\n // Set up global styles for modals if needed\n this.injectGlobalStyles()\n }\n\n /**\n * Create popup window (native browser window)\n */\n private createPopupWindow(config: WindowConfig): WebPopupInstance {\n const popup = new WebPopupInstance(config)\n this.popups.set(config.id, popup)\n return popup\n }\n\n /**\n * Create modal overlay\n */\n protected createModal(config: WindowConfig): WebModalInstance {\n const modal = new WebModalInstance(config)\n this.modals.set(config.id, modal)\n return modal\n }\n\n /**\n * Create portal\n */\n protected createPortal(config: WindowConfig): WebPortalInstance {\n const portal = new WebPortalInstance(config, this.portalContainer!)\n this.portals.set(config.id, portal)\n return portal\n }\n\n /**\n * Determine optimal window type\n */\n private determineWindowType(config: WindowConfig): ViewportType {\n if (\n config.preferNativeWindow &&\n this.environment.capabilities.multiWindow\n ) {\n return 'window'\n }\n\n if (config.modal !== false) {\n return 'modal'\n }\n\n return 'portal'\n }\n\n /**\n * Initialize portal container\n */\n private initializePortalContainer(): void {\n // For single-page apps, try to use the existing app container first\n let container = document.getElementById('app')\n\n if (container) {\n this.portalContainer = container\n return\n }\n\n // Fallback to creating a separate portal container\n container = document.getElementById('tachui-portals')\n\n if (!container) {\n container = document.createElement('div')\n container.id = 'tachui-portals'\n container.style.position = 'relative'\n container.style.zIndex = '999'\n document.body.appendChild(container)\n }\n\n this.portalContainer = container\n }\n\n /**\n * Handle cross-window messages\n */\n private handleCrossWindowMessage(message: any): void {\n // Forward to all viewport instances\n this.portals.forEach(portal => portal.receiveMessage(message))\n this.modals.forEach(modal => modal.receiveMessage(message))\n this.popups.forEach(popup => popup.receiveMessage(message))\n }\n\n /**\n * Inject global CSS styles\n */\n private injectGlobalStyles(): void {\n const styleId = 'tachui-viewport-styles'\n\n if (document.getElementById(styleId)) {\n return // Already injected\n }\n\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = `\n .tachui-modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(var(--tachui-modal-backdrop-blur, 8px));\n z-index: var(--tachui-modal-z-index, 1000);\n display: flex;\n align-items: center;\n justify-content: center;\n animation: tachui-fade-in var(--tachui-modal-animation-duration, 200ms) ease-out;\n }\n\n .tachui-modal-content {\n background: white;\n border-radius: 8px;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n max-width: 90vw;\n max-height: 90vh;\n overflow: auto;\n animation: tachui-scale-in var(--tachui-modal-animation-duration, 200ms) ease-out;\n }\n\n .tachui-portal {\n position: relative;\n }\n\n @keyframes tachui-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes tachui-scale-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .tachui-modal-backdrop,\n .tachui-modal-content {\n animation: none;\n }\n }\n `\n\n document.head.appendChild(style)\n }\n}\n\n/**\n * Web popup window instance (using window.open)\n */\nclass WebPopupInstance implements ViewportInstance {\n readonly id: string\n readonly type: ViewportType = 'window'\n readonly config: WindowConfig\n state: Signal<ViewportState>\n\n private nativeWindow: Window | null = null\n private messageHandlers = new Set<(message: any) => void>()\n private eventHandlers = new Map<string, Set<() => void>>()\n private setState: (\n value: ViewportState | ((prev: ViewportState) => ViewportState)\n ) => ViewportState\n\n constructor(config: WindowConfig) {\n this.id = config.id\n this.config = config\n\n const [state, setState] = createSignal<ViewportState>({\n id: config.id,\n title: config.title || config.id,\n isVisible: false,\n isMinimized: false,\n isMaximized: false,\n isFullscreen: false,\n isFocused: false,\n bounds: {\n x: config.x || 100,\n y: config.y || 100,\n width: config.width || 800,\n height: config.height || 600,\n },\n // Phase 2: Enhanced state properties\n isPooled: false,\n lastUsed: Date.now(),\n groupId: undefined,\n tabIndex: undefined,\n parentWindowId: undefined,\n })\n\n this.state = state as Signal<ViewportState>\n this.setState = setState\n }\n\n render(_component: ComponentInstance): void {\n // For popup windows, we need to render the component in the popup's document\n if (!this.nativeWindow) return\n\n // This would need integration with TachUI's rendering system\n // For now, just set basic content\n this.nativeWindow.document.title = this.config.title || this.config.id\n }\n\n async show(): Promise<void> {\n if (this.nativeWindow && !this.nativeWindow.closed) {\n this.nativeWindow.focus()\n return\n }\n\n const features = this.buildWindowFeatures()\n this.nativeWindow = window.open('', this.config.id, features)\n\n if (!this.nativeWindow) {\n throw new Error(\n 'Failed to open popup window (likely blocked by popup blocker)'\n )\n }\n\n this.setupPopupEventHandlers()\n\n // Update state\n this.setState(prevState => ({\n ...prevState,\n isVisible: true,\n isFocused: true,\n }))\n }\n\n async hide(): Promise<void> {\n if (this.nativeWindow && !this.nativeWindow.closed) {\n this.nativeWindow.blur()\n }\n }\n\n async focus(): Promise<void> {\n if (this.nativeWindow && !this.nativeWindow.closed) {\n this.nativeWindow.focus()\n }\n }\n\n async minimize(): Promise<void> {\n // Not supported in web popups\n }\n\n async maximize(): Promise<void> {\n // Not supported in web popups\n }\n\n async restore(): Promise<void> {\n // Not supported in web popups\n }\n\n async close(): Promise<void> {\n if (this.nativeWindow && !this.nativeWindow.closed) {\n this.nativeWindow.close()\n }\n this.dispose()\n }\n\n dispose(): void {\n this.messageHandlers.clear()\n this.eventHandlers.clear()\n this.nativeWindow = null\n }\n\n postMessage(message: any): void {\n if (this.nativeWindow && !this.nativeWindow.closed) {\n this.nativeWindow.postMessage(message, '*')\n }\n }\n\n onMessage(handler: (message: any) => void): () => void {\n this.messageHandlers.add(handler)\n return () => this.messageHandlers.delete(handler)\n }\n\n receiveMessage(message: any): void {\n this.messageHandlers.forEach(handler => handler(message))\n }\n\n onShow(handler: () => void): () => void {\n return this.addEventListener('show', handler)\n }\n\n onHide(handler: () => void): () => void {\n return this.addEventListener('hide', handler)\n }\n\n onFocus(handler: () => void): () => void {\n return this.addEventListener('focus', handler)\n }\n\n onBlur(handler: () => void): () => void {\n return this.addEventListener('blur', handler)\n }\n\n onResize(_handler: (bounds: ViewportState['bounds']) => void): () => void {\n // Web popups don't provide reliable resize events\n return () => {}\n }\n\n onClose(handler: () => void): () => void {\n return this.addEventListener('close', handler)\n }\n\n private addEventListener(event: string, handler: () => void): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set())\n }\n\n this.eventHandlers.get(event)!.add(handler)\n\n return () => {\n this.eventHandlers.get(event)?.delete(handler)\n }\n }\n\n private emit(event: string): void {\n const handlers = this.eventHandlers.get(event)\n if (handlers) {\n handlers.forEach(handler => handler())\n }\n }\n\n private buildWindowFeatures(): string {\n const features = []\n\n if (this.config.width) features.push(`width=${this.config.width}`)\n if (this.config.height) features.push(`height=${this.config.height}`)\n if (this.config.x) features.push(`left=${this.config.x}`)\n if (this.config.y) features.push(`top=${this.config.y}`)\n\n features.push(`resizable=${this.config.resizable !== false ? 'yes' : 'no'}`)\n features.push('scrollbars=yes')\n features.push('status=no')\n features.push('toolbar=no')\n features.push('menubar=no')\n features.push('location=no')\n\n return features.join(',')\n }\n\n private setupPopupEventHandlers(): void {\n if (!this.nativeWindow) return\n\n // Check if window is closed\n const checkClosed = () => {\n if (this.nativeWindow?.closed) {\n this.emit('close')\n return\n }\n setTimeout(checkClosed, 1000)\n }\n checkClosed()\n\n // Listen for messages\n window.addEventListener('message', event => {\n if (event.source === this.nativeWindow) {\n this.messageHandlers.forEach(handler => handler(event.data))\n }\n })\n }\n\n // ==================== Phase 2: Enhanced Methods ====================\n\n /**\n * Window pooling and reuse\n */\n async prepareForReuse(): Promise<void> {\n // Clear current content and reset state for reuse\n if (this.nativeWindow && !this.nativeWindow.closed) {\n this.nativeWindow.document.body.innerHTML = ''\n this.nativeWindow.document.title = ''\n }\n this.messageHandlers.clear()\n }\n\n isReusable(): boolean {\n return this.nativeWindow != null && !this.nativeWindow.closed\n }\n\n markAsUsed(): void {\n this.setState(prev => ({\n ...prev,\n lastUsed: Date.now(),\n }))\n }\n\n async returnToPool(): Promise<void> {\n await this.hide()\n this.setState(prev => ({\n ...prev,\n isPooled: true,\n lastUsed: Date.now(),\n }))\n }\n\n /**\n * State synchronization (limited in popup windows due to cross-origin restrictions)\n */\n syncState<T>(_key: string, _value: T): void {\n // Store locally for this window\n if (!this.nativeWindow || this.nativeWindow.closed) return\n\n try {\n // Try to sync via postMessage (may fail due to CORS)\n this.nativeWindow.postMessage(\n { type: 'sync_state', key: _key, value: _value },\n '*'\n )\n } catch (error) {\n console.warn('Failed to sync state to popup window:', error)\n }\n }\n\n getSharedState<T>(_key: string): T | undefined {\n // Cannot access shared state from popup due to security restrictions\n return undefined\n }\n\n onSharedStateChange<T>(\n _key: string,\n _callback: (value: T) => void\n ): () => void {\n // Limited implementation due to popup security restrictions\n return () => {} // No-op unsubscribe\n }\n\n /**\n * Tab grouping (not supported for popup windows)\n */\n async attachToTab(_tabContainer: ViewportInstance): Promise<void> {\n throw new Error('Tab grouping not supported for popup windows')\n }\n\n async detachFromTab(): Promise<ViewportInstance> {\n return this // Already detached\n }\n\n getTabContainer(): ViewportInstance | null {\n return null\n }\n\n getTabIndex(): number {\n return this.state().tabIndex || 0\n }\n\n setTabIndex(index: number): void {\n this.setState(prev => ({\n ...prev,\n tabIndex: index,\n }))\n }\n\n /**\n * Parent-child relationships (limited for popup windows)\n */\n setParentWindow(parent: ViewportInstance): void {\n this.setState(prev => ({\n ...prev,\n parentWindowId: parent.id,\n }))\n }\n\n getParentWindow(): ViewportInstance | null {\n // Cannot access parent window reference due to security\n return null\n }\n\n getChildWindows(): ViewportInstance[] {\n // Cannot track child windows from popup\n return []\n }\n\n addChildWindow(_child: ViewportInstance): void {\n // Not supported for popup windows\n }\n\n removeChildWindow(_childId: string): void {\n // Not supported for popup windows\n }\n}\n\n/**\n * Web modal instance (overlay on current page)\n */\nclass WebModalInstance implements ViewportInstance {\n readonly id: string\n readonly type: ViewportType = 'modal'\n readonly config: WindowConfig\n state: Signal<ViewportState>\n\n private backdropElement: HTMLElement | null = null\n private contentElement: HTMLElement | null = null\n private messageHandlers = new Set<(message: any) => void>()\n private eventHandlers = new Map<string, Set<() => void>>()\n private setState: (\n value: ViewportState | ((prev: ViewportState) => ViewportState)\n ) => ViewportState\n\n constructor(config: WindowConfig) {\n this.id = config.id\n this.config = config\n\n const [state, setState] = createSignal<ViewportState>({\n id: config.id,\n title: config.title || config.id,\n isVisible: false,\n isMinimized: false,\n isMaximized: false,\n isFullscreen: false,\n isFocused: false,\n bounds: {\n x: 0,\n y: 0,\n width: config.width || 600,\n height: config.height || 400,\n },\n zIndex: 1000,\n // Phase 2: Enhanced state properties\n isPooled: false,\n lastUsed: Date.now(),\n groupId: undefined,\n tabIndex: undefined,\n parentWindowId: undefined,\n })\n\n this.state = state as Signal<ViewportState>\n this.setState = setState\n this.createElement()\n }\n\n render(_component: ComponentInstance): void {\n if (!this.contentElement) return\n\n // This would integrate with TachUI's renderer\n // For now, just set basic content\n this.contentElement.innerHTML = `<div>Modal: ${this.config.title}</div>`\n }\n\n async show(): Promise<void> {\n if (!this.backdropElement) return\n\n document.body.appendChild(this.backdropElement)\n\n // Update state\n this.setState(prevState => ({\n ...prevState,\n isVisible: true,\n isFocused: true,\n }))\n\n this.emit('show')\n }\n\n async hide(): Promise<void> {\n if (this.backdropElement?.parentNode) {\n this.backdropElement.parentNode.removeChild(this.backdropElement)\n }\n\n // Update state\n this.setState(prevState => ({\n ...prevState,\n isVisible: false,\n isFocused: false,\n }))\n\n this.emit('hide')\n }\n\n async focus(): Promise<void> {\n if (this.contentElement) {\n this.contentElement.focus()\n }\n this.emit('focus')\n }\n\n async minimize(): Promise<void> {\n await this.hide()\n }\n\n async maximize(): Promise<void> {\n // Could implement fullscreen modal\n }\n\n async restore(): Promise<void> {\n await this.show()\n }\n\n async close(): Promise<void> {\n await this.hide()\n this.emit('close')\n this.dispose()\n }\n\n dispose(): void {\n if (this.backdropElement?.parentNode) {\n this.backdropElement.parentNode.removeChild(this.backdropElement)\n }\n this.messageHandlers.clear()\n this.eventHandlers.clear()\n }\n\n postMessage(_message: any): void {\n // Broadcast to other modals/windows\n }\n\n onMessage(handler: (message: any) => void): () => void {\n this.messageHandlers.add(handler)\n return () => this.messageHandlers.delete(handler)\n }\n\n receiveMessage(message: any): void {\n this.messageHandlers.forEach(handler => handler(message))\n }\n\n onShow(handler: () => void): () => void {\n return this.addEventListener('show', handler)\n }\n onHide(handler: () => void): () => void {\n return this.addEventListener('hide', handler)\n }\n onFocus(handler: () => void): () => void {\n return this.addEventListener('focus', handler)\n }\n onBlur(handler: () => void): () => void {\n return this.addEventListener('blur', handler)\n }\n onResize(_handler: (bounds: ViewportState['bounds']) => void): () => void {\n return () => {}\n }\n onClose(handler: () => void): () => void {\n return this.addEventListener('close', handler)\n }\n\n private addEventListener(event: string, handler: () => void): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set())\n }\n\n this.eventHandlers.get(event)!.add(handler)\n\n return () => {\n this.eventHandlers.get(event)?.delete(handler)\n }\n }\n\n private emit(event: string): void {\n const handlers = this.eventHandlers.get(event)\n if (handlers) {\n handlers.forEach(handler => handler())\n }\n }\n\n private createElement(): void {\n // Create backdrop\n this.backdropElement = document.createElement('div')\n this.backdropElement.className = 'tachui-modal-backdrop'\n\n // Create content container\n this.contentElement = document.createElement('div')\n this.contentElement.className = 'tachui-modal-content'\n this.contentElement.style.width = `${this.config.width || 600}px`\n this.contentElement.style.height = `${this.config.height || 400}px`\n\n this.backdropElement.appendChild(this.contentElement)\n\n // Handle backdrop clicks\n this.backdropElement.addEventListener('click', e => {\n if (\n e.target === this.backdropElement &&\n this.config.backdropDismiss !== false\n ) {\n this.close()\n }\n })\n\n // Handle escape key\n document.addEventListener('keydown', e => {\n if (e.key === 'Escape' && this.config.escapeKeyDismiss !== false) {\n this.close()\n }\n })\n }\n\n // ==================== Phase 2: Enhanced Methods ====================\n\n private sharedState = new Map<string, any>()\n private stateChangeCallbacks = new Map<string, Set<(value: any) => void>>()\n private childWindows = new Map<string, ViewportInstance>()\n private parentWindow: ViewportInstance | null = null\n private tabContainer: ViewportInstance | null = null\n\n /**\n * Window pooling and reuse\n */\n async prepareForReuse(): Promise<void> {\n // Clear current content and reset for reuse\n if (this.contentElement) {\n this.contentElement.innerHTML = ''\n }\n this.messageHandlers.clear()\n this.sharedState.clear()\n this.stateChangeCallbacks.clear()\n }\n\n isReusable(): boolean {\n return this.backdropElement != null && this.contentElement != null\n }\n\n markAsUsed(): void {\n this.setState(prev => ({\n ...prev,\n lastUsed: Date.now(),\n }))\n }\n\n async returnToPool(): Promise<void> {\n await this.hide()\n this.setState(prev => ({\n ...prev,\n isPooled: true,\n lastUsed: Date.now(),\n }))\n }\n\n /**\n * State synchronization (full support for modals)\n */\n syncState<T>(key: string, value: T): void {\n this.sharedState.set(key, value)\n\n // Notify local callbacks\n const callbacks = this.stateChangeCallbacks.get(key)\n if (callbacks) {\n callbacks.forEach(callback => callback(value))\n }\n\n // Sync to child windows\n this.childWindows.forEach(child => {\n child.syncState(key, value)\n })\n }\n\n getSharedState<T>(key: string): T | undefined {\n return this.sharedState.get(key)\n }\n\n onSharedStateChange<T>(\n key: string,\n callback: (value: T) => void\n ): () => void {\n if (!this.stateChangeCallbacks.has(key)) {\n this.stateChangeCallbacks.set(key, new Set())\n }\n\n this.stateChangeCallbacks.get(key)!.add(callback)\n\n return () => {\n this.stateChangeCallbacks.get(key)?.delete(callback)\n }\n }\n\n /**\n * Tab grouping (web modal tab simulation)\n */\n async attachToTab(tabContainer: ViewportInstance): Promise<void> {\n this.tabContainer = tabContainer\n // For web modals, we can simulate tabs by adding tab headers\n this.createTabInterface()\n }\n\n async detachFromTab(): Promise<ViewportInstance> {\n this.tabContainer = null\n this.removeTabInterface()\n return this\n }\n\n getTabContainer(): ViewportInstance | null {\n return this.tabContainer\n }\n\n getTabIndex(): number {\n return this.state().tabIndex || 0\n }\n\n setTabIndex(index: number): void {\n this.setState(prev => ({\n ...prev,\n tabIndex: index,\n }))\n }\n\n /**\n * Parent-child relationships (full support for modals)\n */\n setParentWindow(parent: ViewportInstance): void {\n this.parentWindow = parent\n this.setState(prev => ({\n ...prev,\n parentWindowId: parent.id,\n }))\n }\n\n getParentWindow(): ViewportInstance | null {\n return this.parentWindow\n }\n\n getChildWindows(): ViewportInstance[] {\n return Array.from(this.childWindows.values())\n }\n\n addChildWindow(child: ViewportInstance): void {\n this.childWindows.set(child.id, child)\n child.setParentWindow(this)\n }\n\n removeChildWindow(childId: string): void {\n this.childWindows.delete(childId)\n }\n\n /**\n * Tab interface helpers\n */\n private createTabInterface(): void {\n if (!this.contentElement || !this.tabContainer) return\n\n // Create tab header\n const tabHeader = document.createElement('div')\n tabHeader.className = 'tachui-modal-tab-header'\n tabHeader.style.cssText = `\n display: flex;\n border-bottom: 1px solid #e0e0e0;\n background: #f5f5f5;\n min-height: 40px;\n `\n\n // Insert tab header\n this.contentElement.insertBefore(tabHeader, this.contentElement.firstChild)\n }\n\n private removeTabInterface(): void {\n if (!this.contentElement) return\n\n const tabHeader = this.contentElement.querySelector(\n '.tachui-modal-tab-header'\n )\n if (tabHeader) {\n tabHeader.remove()\n }\n }\n}\n\n/**\n * Web portal instance (renders in portal container)\n */\nclass WebPortalInstance implements ViewportInstance {\n readonly id: string\n readonly type: ViewportType = 'portal'\n readonly config: WindowConfig\n state: Signal<ViewportState>\n\n private portalElement: HTMLElement | null = null\n private messageHandlers = new Set<(message: any) => void>()\n private eventHandlers = new Map<string, Set<() => void>>()\n private cleanupFunction: (() => void) | null = null\n private setState: (\n value: ViewportState | ((prev: ViewportState) => ViewportState)\n ) => ViewportState\n\n constructor(\n config: WindowConfig,\n private container: HTMLElement\n ) {\n this.id = config.id\n this.config = config\n\n const [state, setState] = createSignal<ViewportState>({\n id: config.id,\n title: config.title || config.id,\n isVisible: false,\n isMinimized: false,\n isMaximized: false,\n isFullscreen: false,\n isFocused: false,\n bounds: {\n x: config.x || 0,\n y: config.y || 0,\n width: config.width || 400,\n height: config.height || 300,\n },\n // Phase 2: Enhanced state properties\n isPooled: false,\n lastUsed: Date.now(),\n groupId: undefined,\n tabIndex: undefined,\n parentWindowId: undefined,\n })\n\n this.state = state as Signal<ViewportState>\n this.setState = setState\n this.createElement()\n }\n\n render(component: ComponentInstance): void {\n if (!this.portalElement) {\n return\n }\n\n // Clear existing content\n this.portalElement.innerHTML = ''\n\n try {\n // Use enhanced DOM bridge mounting to ensure lifecycle hooks are called\n const cleanup = mountComponentTree(component, this.portalElement)\n\n // Store cleanup function for later disposal\n this.cleanupFunction = cleanup\n } catch (error) {\n console.error('Error during mountComponentTree:', error)\n }\n }\n\n async show(): Promise<void> {\n if (!this.portalElement) {\n return\n }\n\n // For single-page apps, replace the loading content instead of appending\n if (this.container.id === 'app') {\n this.container.innerHTML = ''\n }\n\n this.container.appendChild(this.portalElement)\n this.portalElement.style.display = 'block'\n\n this.setState(prevState => ({\n ...prevState,\n isVisible: true,\n }))\n\n this.emit('show')\n }\n\n async hide(): Promise<void> {\n if (this.portalElement) {\n this.portalElement.style.display = 'none'\n }\n\n this.setState(prevState => ({\n ...prevState,\n isVisible: false,\n }))\n\n this.emit('hide')\n }\n\n async focus(): Promise<void> {\n this.emit('focus')\n }\n async minimize(): Promise<void> {\n await this.hide()\n }\n async maximize(): Promise<void> {}\n async restore(): Promise<void> {\n await this.show()\n }\n\n async close(): Promise<void> {\n if (this.portalElement?.parentNode) {\n this.portalElement.parentNode.removeChild(this.portalElement)\n }\n this.emit('close')\n this.dispose()\n }\n\n dispose(): void {\n // Call component cleanup function first\n if (this.cleanupFunction) {\n this.cleanupFunction()\n this.cleanupFunction = null\n }\n\n if (this.portalElement?.parentNode) {\n this.portalElement.parentNode.removeChild(this.portalElement)\n }\n this.messageHandlers.clear()\n this.eventHandlers.clear()\n }\n\n postMessage(_message: any): void {}\n onMessage(handler: (message: any) => void): () => void {\n this.messageHandlers.add(handler)\n return () => this.messageHandlers.delete(handler)\n }\n\n receiveMessage(message: any): void {\n this.messageHandlers.forEach(handler => handler(message))\n }\n\n onShow(handler: () => void): () => void {\n return this.addEventListener('show', handler)\n }\n onHide(handler: () => void): () => void {\n return this.addEventListener('hide', handler)\n }\n onFocus(handler: () => void): () => void {\n return this.addEventListener('focus', handler)\n }\n onBlur(handler: () => void): () => void {\n return this.addEventListener('blur', handler)\n }\n onResize(_handler: (bounds: ViewportState['bounds']) => void): () => void {\n return () => {}\n }\n onClose(handler: () => void): () => void {\n return this.addEventListener('close', handler)\n }\n\n private addEventListener(event: string, handler: () => void): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set())\n }\n\n this.eventHandlers.get(event)!.add(handler)\n\n return () => {\n this.eventHandlers.get(event)?.delete(handler)\n }\n }\n\n private emit(event: string): void {\n const handlers = this.eventHandlers.get(event)\n if (handlers) {\n handlers.forEach(handler => handler())\n }\n }\n\n private createElement(): void {\n this.portalElement = document.createElement('div')\n this.portalElement.className = 'tachui-portal'\n\n // For single-page apps using the #app container, render transparently\n if (this.container && this.container.id === 'app') {\n // No positioning, background, or borders - just a transparent container\n this.portalElement.style.position = 'static'\n this.portalElement.style.width = '100%'\n this.portalElement.style.height = 'auto'\n this.portalElement.style.background = 'transparent'\n this.portalElement.style.border = 'none'\n this.portalElement.style.display = 'block'\n } else {\n // Traditional portal with positioning and styling\n this.portalElement.style.position = 'absolute'\n this.portalElement.style.left = `${this.config.x || 0}px`\n this.portalElement.style.top = `${this.config.y || 0}px`\n this.portalElement.style.width = `${this.config.width || 400}px`\n this.portalElement.style.height = `${this.config.height || 300}px`\n this.portalElement.style.background = 'white'\n this.portalElement.style.border = '1px solid #ccc'\n this.portalElement.style.borderRadius = '8px'\n this.portalElement.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)'\n this.portalElement.style.display = 'none'\n }\n }\n\n // ==================== Phase 2: Enhanced Methods ====================\n\n private sharedState = new Map<string, any>()\n private stateChangeCallbacks = new Map<string, Set<(value: any) => void>>()\n private childWindows = new Map<string, ViewportInstance>()\n private parentWindow: ViewportInstance | null = null\n private tabContainer: ViewportInstance | null = null\n\n /**\n * Window pooling and reuse (excellent for portals)\n */\n async prepareForReuse(): Promise<void> {\n // Clear current content and reset for reuse\n if (this.portalElement) {\n this.portalElement.innerHTML = ''\n }\n this.messageHandlers.clear()\n this.sharedState.clear()\n this.stateChangeCallbacks.clear()\n }\n\n isReusable(): boolean {\n return this.portalElement != null\n }\n\n markAsUsed(): void {\n this.setState(prev => ({\n ...prev,\n lastUsed: Date.now(),\n }))\n }\n\n async returnToPool(): Promise<void> {\n await this.hide()\n this.setState(prev => ({\n ...prev,\n isPooled: true,\n lastUsed: Date.now(),\n }))\n }\n\n /**\n * State synchronization (full support for portals)\n */\n syncState<T>(key: string, value: T): void {\n this.sharedState.set(key, value)\n\n // Notify local callbacks\n const callbacks = this.stateChangeCallbacks.get(key)\n if (callbacks) {\n callbacks.forEach(callback => callback(value))\n }\n\n // Sync to child windows\n this.childWindows.forEach(child => {\n child.syncState(key, value)\n })\n }\n\n getSharedState<T>(key: string): T | undefined {\n return this.sharedState.get(key)\n }\n\n onSharedStateChange<T>(\n key: string,\n callback: (value: T) => void\n ): () => void {\n if (!this.stateChangeCallbacks.has(key)) {\n this.stateChangeCallbacks.set(key, new Set())\n }\n\n this.stateChangeCallbacks.get(key)!.add(callback)\n\n return () => {\n this.stateChangeCallbacks.get(key)?.delete(callback)\n }\n }\n\n /**\n * Tab grouping (portal-based tab simulation)\n */\n async attachToTab(tabContainer: ViewportInstance): Promise<void> {\n this.tabContainer = tabContainer\n // Create visual tab interface for portals\n this.createPortalTabInterface()\n }\n\n async detachFromTab(): Promise<ViewportInstance> {\n this.tabContainer = null\n this.removePortalTabInterface()\n return this\n }\n\n getTabContainer(): ViewportInstance | null {\n return this.tabContainer\n }\n\n getTabIndex(): number {\n return this.state().tabIndex || 0\n }\n\n setTabIndex(index: number): void {\n this.setState(prev => ({\n ...prev,\n tabIndex: index,\n }))\n }\n\n /**\n * Parent-child relationships (full support for portals)\n */\n setParentWindow(parent: ViewportInstance): void {\n this.parentWindow = parent\n this.setState(prev => ({\n ...prev,\n parentWindowId: parent.id,\n }))\n }\n\n getParentWindow(): ViewportInstance | null {\n return this.parentWindow\n }\n\n getChildWindows(): ViewportInstance[] {\n return Array.from(this.childWindows.values())\n }\n\n addChildWindow(child: ViewportInstance): void {\n this.childWindows.set(child.id, child)\n child.setParentWindow(this)\n }\n\n removeChildWindow(childId: string): void {\n this.childWindows.delete(childId)\n }\n\n /**\n * Portal tab interface helpers\n */\n private createPortalTabInterface(): void {\n if (!this.portalElement || !this.tabContainer) return\n\n // Create tab header for portals\n const tabHeader = document.createElement('div')\n tabHeader.className = 'tachui-portal-tab-header'\n tabHeader.style.cssText = `\n display: flex;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n min-height: 36px;\n padding: 0 8px;\n align-items: center;\n `\n\n // Insert tab header\n this.portalElement.insertBefore(tabHeader, this.portalElement.firstChild)\n }\n\n private removePortalTabInterface(): void {\n if (!this.portalElement) return\n\n const tabHeader = this.portalElement.querySelector(\n '.tachui-portal-tab-header'\n )\n if (tabHeader) {\n tabHeader.remove()\n }\n }\n}\n","/**\n * TachUI Viewport Manager\n *\n * Core viewport management system that coordinates window/modal/portal creation\n * across different platforms with SwiftUI-style APIs.\n */\n\nimport type { ComponentInstance } from '@tachui/core'\nimport { WebViewportAdapter } from './adapters/web-adapter'\nimport {\n createCapabilityChecker,\n detectViewportEnvironment,\n type PlatformDetectionConfig,\n} from './platform-detection'\nimport type {\n StateSyncScope,\n ViewportAdapter,\n ViewportEnvironment,\n ViewportInstance,\n ViewportManager,\n ViewportType,\n WindowConfig,\n WindowGroup,\n WindowGroupingStrategy,\n WindowOptions,\n WindowPoolConfig,\n WindowTabConfig,\n} from './types'\n\n/**\n * Main viewport manager implementation\n */\nexport class TachUIViewportManager implements ViewportManager {\n private adapter: ViewportAdapter\n private windows = new Map<string, ViewportInstance>()\n private windowGroups = new Map<string, WindowGroup>()\n private eventHandlers = new Map<string, Set<(...args: any[]) => void>>()\n\n // Phase 2: Global state management\n private globalState = new Map<string, any>()\n private globalStateCallbacks = new Map<string, Set<(value: any) => void>>()\n\n readonly environment: ViewportEnvironment\n private platformConfig: PlatformDetectionConfig\n\n constructor(adapter?: ViewportAdapter, config: PlatformDetectionConfig = {}) {\n this.platformConfig = config\n this.environment = detectViewportEnvironment(config)\n\n if (adapter) {\n this.adapter = adapter\n } else {\n // Auto-select adapter based on platform\n this.adapter = this.createDefaultAdapter()\n }\n\n this.adapter.setupCrossWindowCommunication()\n this.adapter.optimizeForPlatform()\n }\n\n /**\n * Open a new window/viewport\n */\n async openWindow(\n id: string,\n component: ComponentInstance,\n options: WindowOptions = {}\n ): Promise<ViewportInstance> {\n // Check if window already exists\n const existingWindow = this.windows.get(id)\n if (existingWindow) {\n await existingWindow.show()\n await existingWindow.focus()\n return existingWindow\n }\n\n // Create window configuration\n const config: WindowConfig = {\n id,\n title: options.title || id,\n width: options.width || 800,\n height: options.height || 600,\n ...options,\n }\n\n // Determine optimal viewport type\n this.getOptimalWindowType(options)\n\n // Create the viewport instance\n const window = this.adapter.createWindow(config)\n\n // Store the window\n this.windows.set(id, window)\n\n // Render the component\n window.render(component)\n\n // Set up window event handlers\n this.setupWindowEventHandlers(window)\n\n // Show the window\n await window.show()\n\n // Emit window opened event\n this.emit('window:opened', { window })\n\n return window\n }\n\n /**\n * Dismiss/close a window\n */\n async dismissWindow(id: string): Promise<void> {\n const window = this.windows.get(id)\n if (!window) {\n throw new Error(`Window with id '${id}' not found`)\n }\n\n // Close the window\n await window.close()\n\n // Remove from our tracking\n this.windows.delete(id)\n\n // Emit window closed event\n this.emit('window:closed', { windowId: id })\n }\n\n /**\n * Get a specific window\n */\n getWindow(id: string): ViewportInstance | null {\n return this.windows.get(id) || null\n }\n\n /**\n * Get all open windows\n */\n getAllWindows(): ViewportInstance[] {\n return Array.from(this.windows.values())\n }\n\n /**\n * Create a window group for data-driven window management\n */\n createWindowGroup(groupId: string): WindowGroup {\n if (this.windowGroups.has(groupId)) {\n return this.windowGroups.get(groupId)!\n }\n\n const group = new TachUIWindowGroup(groupId, this)\n this.windowGroups.set(groupId, group)\n return group\n }\n\n /**\n * Check if we can open a window with given options\n */\n canOpenWindow(options: WindowOptions = {}): boolean {\n const checker = createCapabilityChecker(this.environment)\n return checker.canOpenWindow(options.preferNativeWindow)\n }\n\n /**\n * Get optimal window type for given options\n */\n getOptimalWindowType(options: WindowOptions = {}): ViewportType {\n const checker = createCapabilityChecker(this.environment)\n\n if (\n options.preferNativeWindow &&\n this.environment.capabilities.nativeWindows\n ) {\n return 'window'\n }\n\n if (\n options.modal !== false &&\n this.environment.capabilities.modalOverlays\n ) {\n return 'modal'\n }\n\n return checker.getOptimalViewportType(options.preferNativeWindow)\n }\n\n /**\n * Event handling\n */\n onWindowOpened(handler: (window: ViewportInstance) => void): () => void {\n return this.on('window:opened', ({ window }) => handler(window))\n }\n\n onWindowClosed(handler: (windowId: string) => void): () => void {\n return this.on('window:closed', ({ windowId }) => handler(windowId))\n }\n\n /**\n * Generic event subscription\n */\n private on(event: string, handler: (...args: any[]) => void): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set())\n }\n\n this.eventHandlers.get(event)!.add(handler)\n\n // Return unsubscribe function\n return () => {\n this.eventHandlers.get(event)?.delete(handler)\n }\n }\n\n /**\n * Emit an event to all handlers\n */\n private emit(event: string, data: any): void {\n const handlers = this.eventHandlers.get(event)\n if (handlers) {\n handlers.forEach(handler => handler(data))\n }\n }\n\n /**\n * Set up event handlers for a window\n */\n private setupWindowEventHandlers(window: ViewportInstance): void {\n // Window focus events\n window.onFocus(() => {\n this.emit('window:focused', { windowId: window.id })\n })\n\n // Window resize events\n window.onResize(bounds => {\n this.emit('window:resized', { windowId: window.id, bounds })\n })\n\n // Window close events\n window.onClose(() => {\n this.windows.delete(window.id)\n this.emit('window:closed', { windowId: window.id })\n })\n }\n\n /**\n * Create default adapter based on platform\n */\n private createDefaultAdapter(): ViewportAdapter {\n switch (this.environment.platform) {\n case 'electron':\n // TODO: Import ElectronViewportAdapter when implemented\n return new WebViewportAdapter(this.platformConfig)\n default:\n return new WebViewportAdapter(this.platformConfig)\n }\n }\n\n // ==================== Phase 2: Global State Management ====================\n\n /**\n * Synchronize state globally across all windows\n */\n syncGlobalState<T>(key: string, value: T, originGroupId?: string): void {\n this.globalState.set(key, value)\n\n // Notify global callbacks\n const callbacks = this.globalStateCallbacks.get(key)\n if (callbacks) {\n callbacks.forEach(callback => callback(value))\n }\n\n // Propagate to all windows\n this.windows.forEach(window => {\n window.syncState(key, value)\n })\n\n // Propagate to all window groups (except the origin to prevent recursion)\n this.windowGroups.forEach((group, groupId) => {\n if (groupId !== originGroupId) {\n // Use internal sync method to prevent recursion\n ;(group as any).syncStateInternal(key, value)\n }\n })\n }\n\n /**\n * Get global shared state\n */\n getGlobalState<T>(key: string): T | undefined {\n return this.globalState.get(key)\n }\n\n /**\n * Listen for global state changes\n */\n onGlobalStateChange<T>(\n key: string,\n callback: (value: T) => void\n ): () => void {\n if (!this.globalStateCallbacks.has(key)) {\n this.globalStateCallbacks.set(key, new Set())\n }\n\n this.globalStateCallbacks.get(key)!.add(callback)\n\n return () => {\n this.globalStateCallbacks.get(key)?.delete(callback)\n }\n }\n\n /**\n * Get window group by ID\n */\n getWindowGroup(groupId: string): WindowGroup | null {\n return this.windowGroups.get(groupId) || null\n }\n\n /**\n * Get all window groups\n */\n getAllWindowGroups(): WindowGroup[] {\n return Array.from(this.windowGroups.values())\n }\n\n /**\n * Window group management utilities\n */\n configureWindowGroupDefaults(\n groupId: string,\n options: {\n groupingStrategy?: WindowGroupingStrategy\n tabConfig?: WindowTabConfig\n poolConfig?: WindowPoolConfig\n stateSyncScope?: StateSyncScope\n }\n ): void {\n const group = this.windowGroups.get(groupId)\n if (!group) return\n\n if (options.groupingStrategy) {\n group.setGroupingStrategy(options.groupingStrategy)\n }\n if (options.tabConfig) {\n group.configureTabbing(options.tabConfig)\n }\n if (options.poolConfig) {\n group.configurePool(options.poolConfig)\n }\n if (options.stateSyncScope) {\n group.enableStateSync(options.stateSyncScope)\n }\n }\n\n /**\n * Cleanup all resources\n */\n dispose(): void {\n // Clean up global state\n this.globalState.clear()\n this.globalStateCallbacks.clear()\n\n // Close all windows\n const windowPromises = Array.from(this.windows.values()).map(\n window => window.close().catch(() => {}) // Ignore errors during cleanup\n )\n\n Promise.all(windowPromises).finally(() => {\n this.windows.clear()\n this.windowGroups.clear()\n this.eventHandlers.clear()\n })\n }\n}\n\n/**\n * Window group implementation for data-driven window management\n */\nclass TachUIWindowGroup implements WindowGroup {\n private windows = new Map<string, ViewportInstance>()\n private defaultOptions: WindowOptions = {}\n private maxInstances = Infinity\n\n // Phase 2: Enhanced features\n private groupingStrategy: WindowGroupingStrategy = 'stack'\n private tabConfig: WindowTabConfig = {\n enabled: false,\n tabPosition: 'top',\n allowDetach: true,\n allowReorder: true,\n }\n private poolConfig: WindowPoolConfig = {\n enabled: false,\n maxPoolSize: 5,\n reuseThreshold: 30000, // 30 seconds\n keepAliveTime: 300000, // 5 minutes\n }\n private stateSyncScope: StateSyncScope = 'none'\n private sharedState = new Map<string, any>()\n private stateCallbacks = new Map<string, Set<(value: any) => void>>()\n private windowPool = new Map<string, ViewportInstance>()\n private eventCallbacks = new Map<string, Set<(...args: any[]) => void>>()\n private windowMetadata = new Map<string, any>()\n\n constructor(\n readonly id: string,\n private manager: TachUIViewportManager,\n readonly dataType: string = 'any'\n ) {\n // Start pool cleanup timer if pooling is enabled\n this.startPoolCleanup()\n }\n\n /**\n * Open a window for specific data (Enhanced with pooling and reuse)\n */\n async openWindow<T>(\n data: T,\n component: (data: T) => ComponentInstance\n ): Promise<ViewportInstance> {\n // Create unique ID for this data\n const dataKey = this.createDataKey(data)\n const windowId = `${this.id}:${dataKey}`\n\n // Check if window already exists for this data\n const existingWindow = this.windows.get(dataKey)\n if (existingWindow) {\n await existingWindow.show()\n await existingWindow.focus()\n existingWindow.markAsUsed()\n return existingWindow\n }\n\n // Try to get a pooled window for reuse\n let window = await this.getPooledWindow()\n\n if (window) {\n // Reuse pooled window\n const componentInstance = component(data)\n window.render(componentInstance)\n\n // Update window metadata\n this.setWindowGroupMetadata(window, {\n id: windowId,\n groupId: this.id,\n isPooled: false,\n lastUsed: Date.now(),\n })\n\n await window.show()\n await window.focus()\n\n // Track the window\n this.windows.set(dataKey, window)\n\n // Emit reuse event\n this.emitEvent('window:reused', window, data)\n\n return window\n }\n\n // Check max instances limit\n if (this.windows.size >= this.maxInstances) {\n // Return oldest window to pool instead of closing\n const oldestWindow = this.windows.values().next().value\n if (oldestWindow) {\n if (this.poolConfig.enabled) {\n await this.returnToPool(oldestWindow)\n } else {\n await oldestWindow.close()\n }\n }\n }\n\n // Create new window\n const componentInstance = component(data)\n window = await this.manager.openWindow(\n windowId,\n componentInstance,\n this.defaultOptions\n )\n\n // Set up window state for group management - need to access setState from window\n // Note: This is a limitation of the current architecture - signals don't expose setters\n // For now, we'll track group metadata separately\n this.setWindowGroupMetadata(window, {\n groupId: this.id,\n isPooled: false,\n lastUsed: Date.now(),\n tabIndex: this.tabConfig.enabled ? this.windows.size : undefined,\n })\n\n // Track the window\n this.windows.set(dataKey, window)\n\n // Handle window closure\n window.onClose(() => {\n if (this.poolConfig.enabled && window.isReusable()) {\n this.returnToPool(window)\n } else {\n this.windows.delete(dataKey)\n this.emitEvent('window:destroyed', window.id)\n\n // Check if group is now empty\n if (this.windows.size === 0) {\n this.emitEvent('group:empty')\n }\n }\n })\n\n // Apply grouping strategy if needed\n if (this.groupingStrategy !== 'stack') {\n this.applyGroupingStrategy()\n }\n\n // Emit creation event\n this.emitEvent('window:created', window)\n\n // Check if group is now full\n if (this.windows.size >= this.maxInstances) {\n this.emitEvent('group:full')\n }\n\n return window\n }\n\n /**\n * Get window for specific data\n */\n getWindowForData<T>(data: T): ViewportInstance | null {\n const dataKey = this.createDataKey(data)\n return this.windows.get(dataKey) || null\n }\n\n /**\n * Get all windows in this group\n */\n getAllWindows(): ViewportInstance[] {\n return Array.from(this.windows.values())\n }\n\n /**\n * Close all windows in this group\n */\n async closeAllWindows(): Promise<void> {\n const closePromises = Array.from(this.windows.values()).map(\n window => window.close().catch(() => {}) // Ignore errors\n )\n\n await Promise.all(closePromises)\n this.windows.clear()\n }\n\n /**\n * Set default options for windows in this group\n */\n setDefaultOptions(options: WindowOptions): void {\n this.defaultOptions = { ...options }\n }\n\n /**\n * Set maximum number of instances\n */\n setMaxInstances(max: number): void {\n this.maxInstances = Math.max(1, max)\n }\n\n // ==================== Phase 2: Enhanced Features ====================\n\n /**\n * Window grouping and tabbing\n */\n setGroupingStrategy(strategy: WindowGroupingStrategy): void {\n this.groupingStrategy = strategy\n this.applyGroupingStrategy()\n }\n\n getGroupingStrategy(): WindowGroupingStrategy {\n return this.groupingStrategy\n }\n\n configureTabbing(config: WindowTabConfig): void {\n this.tabConfig = { ...config }\n if (config.enabled && this.manager.environment.platform === 'electron') {\n this.enableTabGrouping()\n }\n }\n\n getTabConfig(): WindowTabConfig {\n return { ...this.tabConfig }\n }\n\n /**\n * Window pooling and reuse\n */\n configurePool(config: WindowPoolConfig): void {\n this.poolConfig = { ...config }\n if (config.enabled) {\n this.startPoolCleanup()\n }\n }\n\n getPoolConfig(): WindowPoolConfig {\n return { ...this.poolConfig }\n }\n\n getPooledWindows(): ViewportInstance[] {\n return Array.from(this.windowPool.values())\n }\n\n async returnToPool(window: ViewportInstance): Promise<void> {\n if (!this.poolConfig.enabled) {\n await window.close()\n return\n }\n\n // Prepare window for reuse\n await window.prepareForReuse()\n await window.hide()\n\n // Update window metadata\n this.setWindowGroupMetadata(window, {\n isPooled: true,\n lastUsed: Date.now(),\n })\n\n // Add to pool\n this.windowPool.set(window.id, window)\n this.windows.delete(this.getDataKeyForWindow(window))\n\n // Emit event\n this.emitEvent('window:pooled', window)\n }\n\n /**\n * State synchronization\n */\n enableStateSync(scope: StateSyncScope): void {\n this.stateSyncScope = scope\n }\n\n syncState<T>(key: string, value: T): void {\n this.syncStateInternal(key, value)\n\n // Sync to other windows based on scope\n if (this.stateSyncScope === 'group') {\n this.syncStateToGroupWindows(key, value)\n } else if (this.stateSyncScope === 'global') {\n this.manager.syncGlobalState(key, value, this.id)\n }\n }\n\n /**\n * Internal state sync without propagation (prevents recursion)\n */\n private syncStateInternal<T>(key: string, value: T): void {\n this.sharedState.set(key, value)\n\n // Notify callbacks\n const callbacks = this.stateCallbacks.get(key)\n if (callbacks) {\n callbacks.forEach(callback => callback(value))\n }\n }\n\n getSharedState<T>(key: string): T | undefined {\n return this.sharedState.get(key)\n }\n\n onStateChange<T>(key: string, callback: (value: T) => void): () => void {\n if (!this.stateCallbacks.has(key)) {\n this.stateCallbacks.set(key, new Set())\n }\n\n this.stateCallbacks.get(key)!.add(callback)\n\n // Return unsubscribe function\n return () => {\n this.stateCallbacks.get(key)?.delete(callback)\n }\n }\n\n /**\n * Window lifecycle events\n */\n onWindowCreated(callback: (window: ViewportInstance) => void): () => void {\n return this.addEventCallback('window:created', callback)\n }\n\n onWindowDestroyed(callback: (windowId: string) => void): () => void {\n return this.addEventCallback('window:destroyed', callback)\n }\n\n onWindowReused(\n callback: (window: ViewportInstance, previousData: any) => void\n ): () => void {\n return this.addEventCallback('window:reused', callback)\n }\n\n /**\n * Group-level events\n */\n onGroupEmpty(callback: () => void): () => void {\n return this.addEventCallback('group:empty', callback)\n }\n\n onGroupFull(callback: () => void): () => void {\n return this.addEventCallback('group:full', callback)\n }\n\n // ==================== Private Implementation ====================\n\n /**\n * Apply grouping strategy to existing windows\n */\n private applyGroupingStrategy(): void {\n const windows = this.getAllWindows()\n\n switch (this.groupingStrategy) {\n case 'tabs':\n this.arrangeWindowsAsTabs(windows)\n break\n case 'cascade':\n this.arrangeWindowsAsCascade(windows)\n break\n case 'tile':\n this.arrangeWindowsAsTiles(windows)\n break\n default:\n this.arrangeWindowsAsStack(windows)\n break\n }\n }\n\n /**\n * Enable tab grouping for windows\n */\n private enableTabGrouping(): void {\n if (\n !this.tabConfig.enabled ||\n this.manager.environment.platform !== 'electron'\n ) {\n return\n }\n\n // Implementation depends on Electron BrowserView API\n // This would create a tabbed interface for windows in the group\n }\n\n /**\n * Start pool cleanup timer\n */\n private startPoolCleanup(): void {\n if (!this.poolConfig.enabled) return\n\n setInterval(() => {\n this.cleanupPool()\n }, 60000) // Check every minute\n }\n\n /**\n * Clean up expired pooled windows\n */\n private cleanupPool(): void {\n const now = Date.now()\n const toRemove: string[] = []\n\n this.windowPool.forEach((window, id) => {\n const metadata = this.getWindowGroupMetadata(window)\n if (now - (metadata.lastUsed || 0) > this.poolConfig.keepAliveTime) {\n toRemove.push(id)\n }\n })\n\n toRemove.forEach(async id => {\n const window = this.windowPool.get(id)\n if (window) {\n await window.dispose()\n this.windowPool.delete(id)\n }\n })\n }\n\n /**\n * Try to get a pooled window for reuse\n */\n private async getPooledWindow(): Promise<ViewportInstance | null> {\n if (!this.poolConfig.enabled || this.windowPool.size === 0) {\n return null\n }\n\n // Find the most recently used pooled window\n let bestWindow: ViewportInstance | null = null\n let bestScore = 0\n\n this.windowPool.forEach(window => {\n const metadata = this.getWindowGroupMetadata(window)\n const age = Date.now() - (metadata.lastUsed || 0)\n if (age < this.poolConfig.reuseThreshold) {\n const score = this.poolConfig.reuseThreshold - age\n if (score > bestScore) {\n bestWindow = window\n bestScore = score\n }\n }\n })\n\n if (bestWindow) {\n this.windowPool.delete((bestWindow as ViewportInstance).id)\n // Reset pooled metadata\n this.setWindowGroupMetadata(bestWindow as ViewportInstance, {\n isPooled: false,\n lastUsed: Date.now(),\n })\n }\n\n return bestWindow\n }\n\n /**\n * Sync state to all windows in group (with recursion prevention)\n */\n private syncStateToGroupWindows<T>(key: string, value: T): void {\n // Prevent infinite recursion by only calling syncState on window's local storage\n this.windows.forEach(window => {\n // Only sync to window's local state, not trigger further group syncs\n const windowState = this.getWindowGroupMetadata(window)\n this.setWindowGroupMetadata(window, {\n ...windowState,\n [`shared:${key}`]: value,\n })\n })\n }\n\n /**\n * Get data key for a window instance\n */\n private getDataKeyForWindow(window: ViewportInstance): string {\n // Find the data key that maps to this window\n for (const [dataKey, win] of this.windows.entries()) {\n if (win.id === window.id) {\n return dataKey\n }\n }\n return ''\n }\n\n /**\n * Window arrangement strategies\n */\n private arrangeWindowsAsTabs(windows: ViewportInstance[]): void {\n // Tab arrangement logic - platform specific\n if (this.manager.environment.platform === 'electron') {\n // Use Electron BrowserView for true tabs\n // Implementation would depend on Electron main process\n } else {\n // Fallback to modal tabs for web\n this.arrangeWindowsAsModalTabs(windows)\n }\n }\n\n private arrangeWindowsAsCascade(windows: ViewportInstance[]): void {\n windows.forEach((window, index) => {\n const offset = index * 30\n // For now, just track the intended position in metadata\n // Actual positioning would need window-specific setState access\n this.setWindowGroupMetadata(window, {\n cascadeOffset: offset,\n arrangementStyle: 'cascade',\n })\n })\n }\n\n private arrangeWindowsAsTiles(windows: ViewportInstance[]): void {\n const screenWidth =\n typeof window !== 'undefined' ? window.screen.width : 1920\n const screenHeight =\n typeof window !== 'undefined' ? window.screen.height : 1080\n\n const cols = Math.ceil(Math.sqrt(windows.length))\n const rows = Math.ceil(windows.length / cols)\n const windowWidth = screenWidth / cols\n const windowHeight = screenHeight / rows\n\n windows.forEach((win, index) => {\n const col = index % cols\n const row = Math.floor(index / cols)\n\n // Track tile positioning in metadata\n this.setWindowGroupMetadata(win, {\n tilePosition: {\n col,\n row,\n x: col * windowWidth,\n y: row * windowHeight,\n width: windowWidth,\n height: windowHeight,\n },\n arrangementStyle: 'tile',\n })\n })\n }\n\n private arrangeWindowsAsStack(_windows: ViewportInstance[]): void {\n // Default behavior - no special arrangement\n // Windows use their natural positioning\n }\n\n private arrangeWindowsAsModalTabs(_windows: ViewportInstance[]): void {\n // Web fallback for tab grouping using modal overlays\n // Create a tab container modal that hosts the windows\n }\n\n /**\n * Window metadata management (workaround for signal setter access)\n */\n private setWindowGroupMetadata(\n window: ViewportInstance,\n metadata: any\n ): void {\n this.windowMetadata.set(window.id, {\n ...this.windowMetadata.get(window.id),\n ...metadata,\n })\n }\n\n private getWindowGroupMetadata(window: ViewportInstance): any {\n return this.windowMetadata.get(window.id) || {}\n }\n\n /**\n * Event management helpers\n */\n private addEventCallback(\n event: string,\n callback: (...args: any[]) => void\n ): () => void {\n if (!this.eventCallbacks.has(event)) {\n this.eventCallbacks.set(event, new Set())\n }\n\n this.eventCallbacks.get(event)!.add(callback)\n\n return () => {\n this.eventCallbacks.get(event)?.delete(callback)\n }\n }\n\n private emitEvent(event: string, ...args: any[]): void {\n const callbacks = this.eventCallbacks.get(event)\n if (callbacks) {\n callbacks.forEach(callback => callback(...args))\n }\n }\n\n /**\n * Create a unique key for data\n */\n private createDataKey<T>(data: T): string {\n if (data === null || data === undefined) {\n return 'null'\n }\n\n if (\n typeof data === 'string' ||\n typeof data === 'number' ||\n typeof data === 'boolean'\n ) {\n return String(data)\n }\n\n if (typeof data === 'object' && 'id' in data) {\n return String((data as any).id)\n }\n\n // Fallback to JSON serialization (not ideal for complex objects)\n try {\n return JSON.stringify(data)\n } catch {\n return String(data)\n }\n }\n}\n\n/**\n * Global viewport manager instance\n */\nlet globalViewportManager: TachUIViewportManager | null = null\n\n/**\n * Get or create the global viewport manager\n */\nexport function getViewportManager(\n config: PlatformDetectionConfig = {}\n): TachUIViewportManager {\n if (!globalViewportManager) {\n globalViewportManager = new TachUIViewportManager(undefined, config)\n }\n return globalViewportManager\n}\n\n/**\n * Set a custom viewport manager\n */\nexport function setViewportManager(manager: TachUIViewportManager): void {\n globalViewportManager?.dispose()\n globalViewportManager = manager\n}\n\n/**\n * Dispose the global viewport manager\n */\nexport function disposeViewportManager(): void {\n globalViewportManager?.dispose()\n globalViewportManager = null\n}\n","/**\n * SwiftUI-Style Viewport Components\n *\n * Provides Window and WindowGroup components that mirror SwiftUI's window management APIs.\n */\n\nimport type { ComponentInstance } from '@tachui/core'\nimport { withComponentContext } from '@tachui/core'\nimport { createRoot } from '@tachui/core'\nimport type { PlatformDetectionConfig } from './platform-detection'\nimport type {\n WindowGroup as IWindowGroup,\n StateSyncScope,\n WindowGroupingStrategy,\n WindowOptions,\n WindowPoolConfig,\n WindowTabConfig,\n} from './types'\nimport { getViewportManager } from './viewport-manager'\n\n/**\n * SwiftUI-style Window component\n * Creates a single, unique window that prevents duplicates\n */\nexport interface WindowProps extends WindowOptions {\n id: string\n title?: string\n children: () => ComponentInstance\n}\n\nexport function Window(props: WindowProps): WindowSceneComponent {\n return {\n type: 'window-scene',\n sceneType: 'window',\n id: props.id,\n title: props.title || props.id,\n content: props.children,\n options: props,\n\n // Render method for scene management\n render(): ComponentInstance {\n return {\n type: 'component',\n id: `window-scene-${props.id}`,\n props: {},\n render: () => {\n // This component doesn't render directly - it's managed by the viewport system\n return {\n type: 'element' as const,\n tag: 'div',\n props: {},\n children: [],\n element: document.createElement('div'),\n }\n },\n }\n },\n\n // Open this window\n async open(): Promise<void> {\n const manager = getViewportManager()\n\n // First establish reactive root, then component context within it\n const wrappedComponent = createRoot(() => {\n return withComponentContext((_: any) => {\n // Execute children function within both reactive and component context\n const childComponent = props.children()\n return childComponent\n }, `Window-${props.id}`)({})\n })\n\n await manager.openWindow(props.id, wrappedComponent, props)\n },\n\n // Close this window\n async close(): Promise<void> {\n const manager = getViewportManager()\n await manager.dismissWindow(props.id)\n },\n }\n}\n\n/**\n * SwiftUI-style WindowGroup component\n * Creates a group of windows that can have multiple instances\n */\nexport interface WindowGroupProps<T = any> extends WindowOptions {\n id: string\n title?: string\n for?: new () => T // Type parameter for data-driven windows\n children: T extends undefined\n ? () => ComponentInstance\n : (data: T) => ComponentInstance\n\n // Phase 2: Enhanced configuration options\n groupingStrategy?: WindowGroupingStrategy\n tabConfig?: WindowTabConfig\n poolConfig?: WindowPoolConfig\n stateSyncScope?: StateSyncScope\n maxInstances?: number\n}\n\nexport function WindowGroup<T = undefined>(\n props: WindowGroupProps<T>\n): WindowGroupComponent<T> {\n const manager = getViewportManager()\n const group = manager.createWindowGroup(props.id)\n\n // Phase 2: Configure enhanced features\n if (props.groupingStrategy) {\n group.setGroupingStrategy(props.groupingStrategy)\n }\n\n if (props.tabConfig) {\n group.configureTabbing(props.tabConfig)\n }\n\n if (props.poolConfig) {\n group.configurePool(props.poolConfig)\n }\n\n if (props.stateSyncScope) {\n group.enableStateSync(props.stateSyncScope)\n }\n\n if (props.maxInstances) {\n group.setMaxInstances(props.maxInstances)\n }\n\n // Set default window options\n const {\n groupingStrategy: _groupingStrategy,\n tabConfig: _tabConfig,\n poolConfig: _poolConfig,\n stateSyncScope: _stateSyncScope,\n maxInstances: _maxInstances,\n ...windowOptions\n } = props\n group.setDefaultOptions(windowOptions)\n\n return {\n type: 'window-group',\n sceneType: 'window-group',\n id: props.id,\n title: props.title || props.id,\n content: props.children,\n options: props,\n group,\n\n // Render method for scene management\n render(): ComponentInstance {\n return {\n type: 'component',\n id: `window-group-${props.id}`,\n props: {},\n render: () => {\n // This component doesn't render directly - it's managed by the viewport system\n return {\n type: 'element' as const,\n tag: 'div',\n props: {},\n children: [],\n element: document.createElement('div'),\n }\n },\n }\n },\n\n // Open a window (data-driven or simple)\n async open(data?: T): Promise<void> {\n if (data !== undefined && props.for) {\n // Data-driven window\n await group.openWindow(\n data,\n props.children as (data: T) => ComponentInstance\n )\n } else {\n // Simple window\n const component = (props.children as () => ComponentInstance)()\n await manager.openWindow(props.id, component, props)\n }\n },\n\n // Open window for specific data\n async openForData(data: T): Promise<void> {\n if (!props.for) {\n throw new Error(\n 'WindowGroup must specify \"for\" parameter for data-driven windows'\n )\n }\n await group.openWindow(\n data,\n props.children as (data: T) => ComponentInstance\n )\n },\n\n // Close all windows in this group\n async closeAll(): Promise<void> {\n await group.closeAllWindows()\n },\n\n // Get all windows in this group\n getWindows() {\n return group.getAllWindows()\n },\n\n // Phase 2: Enhanced methods\n configureGrouping(strategy: WindowGroupingStrategy): void {\n group.setGroupingStrategy(strategy)\n },\n\n configureTabs(config: WindowTabConfig): void {\n group.configureTabbing(config)\n },\n\n configurePooling(config: WindowPoolConfig): void {\n group.configurePool(config)\n },\n\n enableStateSync(scope: StateSyncScope): void {\n group.enableStateSync(scope)\n },\n\n syncGroupState<S>(key: string, value: S): void {\n group.syncState(key, value)\n },\n\n getGroupState<S>(key: string): S | undefined {\n return group.getSharedState(key)\n },\n\n onGroupStateChange<S>(\n key: string,\n callback: (value: S) => void\n ): () => void {\n return group.onStateChange(key, callback)\n },\n }\n}\n\n/**\n * WindowScene component interface\n */\nexport interface WindowSceneComponent {\n type: 'window-scene'\n sceneType: 'window'\n id: string\n title: string\n content: () => ComponentInstance\n options: WindowOptions\n\n render(): ComponentInstance\n open(): Promise<void>\n close(): Promise<void>\n}\n\n/**\n * WindowGroup component interface\n */\nexport interface WindowGroupComponent<T = any> {\n type: 'window-group'\n sceneType: 'window-group'\n id: string\n title: string\n content: T extends undefined\n ? () => ComponentInstance\n : (data: T) => ComponentInstance\n options: WindowOptions\n group: IWindowGroup\n\n render(): ComponentInstance\n open(data?: T): Promise<void>\n openForData(data: T): Promise<void>\n closeAll(): Promise<void>\n getWindows(): import('./types').ViewportInstance[]\n\n // Phase 2: Enhanced methods\n configureGrouping(strategy: WindowGroupingStrategy): void\n configureTabs(config: WindowTabConfig): void\n configurePooling(config: WindowPoolConfig): void\n enableStateSync(scope: StateSyncScope): void\n syncGroupState<S>(key: string, value: S): void\n getGroupState<S>(key: string): S | undefined\n onGroupStateChange<S>(key: string, callback: (value: S) => void): () => void\n}\n\n/**\n * Scene type union\n */\nexport type WindowScene = WindowSceneComponent | WindowGroupComponent\n\n/**\n * App-level scene container (SwiftUI App equivalent)\n */\nexport interface AppSceneProps {\n children: WindowScene[]\n /** Platform detection configuration to disable potentially intrusive capability tests */\n platformConfig?: PlatformDetectionConfig\n}\n\nexport function App(props: AppSceneProps): AppComponent {\n return {\n type: 'app',\n scenes: props.children,\n\n render(): ComponentInstance {\n return {\n type: 'component',\n id: 'tachui-app',\n props: {},\n render: () => {\n // App component manages scenes but doesn't render them directly\n return {\n type: 'element' as const,\n tag: 'div',\n props: {},\n children: [],\n element: document.createElement('div'),\n }\n },\n }\n },\n\n // Initialize all scenes\n async initialize(): Promise<void> {\n // Set up viewport environment for the app\n const manager = getViewportManager(props.platformConfig)\n // Initialize the viewport system if not already done\n if (!manager) {\n const { initializeViewportSystem } = await import('./index')\n initializeViewportSystem()\n }\n },\n\n // Get scene by ID\n getScene(id: string): WindowScene | undefined {\n return props.children.find(scene => scene.id === id)\n },\n\n // Open a specific scene\n async openScene(id: string, data?: any): Promise<void> {\n const scene = this.getScene(id)\n if (!scene) {\n throw new Error(`Scene with id '${id}' not found`)\n }\n\n if (scene.type === 'window-scene') {\n await scene.open()\n } else if (scene.type === 'window-group') {\n await scene.open(data)\n }\n },\n }\n}\n\n/**\n * App component interface\n */\nexport interface AppComponent {\n type: 'app'\n scenes: WindowScene[]\n\n render(): ComponentInstance\n initialize(): Promise<void>\n getScene(id: string): WindowScene | undefined\n openScene(id: string, data?: any): Promise<void>\n}\n\n/**\n * Utility functions for window management\n */\nexport const WindowUtils = {\n /**\n * Create a document window group\n */\n documentGroup<T>(\n id: string,\n title: string,\n documentType: new () => T,\n content: (document: T) => ComponentInstance\n ): WindowGroupComponent<T> {\n return WindowGroup({\n id,\n title,\n for: documentType,\n children: content as any,\n width: 800,\n height: 600,\n resizable: true,\n })\n },\n\n /**\n * Create a settings window\n */\n settingsWindow(content: () => ComponentInstance): WindowSceneComponent {\n return Window({\n id: 'settings',\n title: 'Settings',\n width: 600,\n height: 400,\n resizable: false,\n children: content,\n })\n },\n\n /**\n * Create an inspector window\n */\n inspectorWindow(content: () => ComponentInstance): WindowSceneComponent {\n return Window({\n id: 'inspector',\n title: 'Inspector',\n width: 300,\n height: 500,\n resizable: true,\n alwaysOnTop: true,\n children: content,\n })\n },\n\n /**\n * Create a palette window\n */\n paletteWindow(\n id: string,\n title: string,\n content: () => ComponentInstance\n ): WindowSceneComponent {\n return Window({\n id,\n title,\n width: 250,\n height: 400,\n resizable: false,\n alwaysOnTop: true,\n children: content,\n })\n },\n}\n\n/**\n * Example usage patterns\n */\nexport const ExampleScenes = {\n /**\n * Basic app with main window and settings\n */\n basicApp: () =>\n App({\n children: [\n Window({\n id: 'main',\n title: 'My App',\n children: () => ({\n type: 'component',\n id: 'main-content',\n props: {},\n render: () => ({\n type: 'element' as const,\n tag: 'div',\n props: {},\n children: [],\n element: document.createElement('div'),\n }),\n }),\n }),\n\n WindowUtils.settingsWindow(() => ({\n type: 'component',\n id: 'settings-content',\n props: {},\n render: () => ({\n type: 'element' as const,\n tag: 'div',\n props: {},\n children: [],\n element: document.createElement('div'),\n }),\n })),\n ],\n }),\n\n /**\n * Document-based app\n */\n documentApp: () =>\n App({\n children: [\n WindowGroup({\n id: 'document',\n title: 'Document',\n for: class Document {\n id!: string\n title!: string\n },\n children: doc => ({\n type: 'component',\n id: `document-${doc.id}`,\n props: {},\n render: () => ({\n type: 'element' as const,\n tag: 'div',\n props: {},\n children: [],\n element: document.createElement('div'),\n }),\n }),\n }),\n\n WindowUtils.settingsWindow(() => ({\n type: 'component',\n id: 'settings',\n props: {},\n render: () => ({\n type: 'element' as const,\n tag: 'div',\n props: {},\n children: [],\n element: document.createElement('div'),\n }),\n })),\n ],\n }),\n}\n","/**\n * Viewport Environment System\n *\n * Provides SwiftUI-style environment values for viewport operations.\n * Enables components to access viewport management through @Environment.\n */\n\nimport { createContext, useContext } from '@tachui/core'\nimport type { ComponentInstance } from '@tachui/core'\nimport type {\n ViewportEnvironment,\n ViewportEnvironmentValues,\n ViewportInstance,\n ViewportManager,\n WindowOptions,\n} from './types'\nimport { getViewportManager } from './viewport-manager'\n\n/**\n * Viewport environment context\n */\nconst ViewportEnvironmentContext =\n createContext<ViewportEnvironmentValues | null>(null)\n\n/**\n * Provider component for viewport environment\n */\nexport function ViewportEnvironmentProvider({\n children,\n manager,\n}: {\n children: ComponentInstance | ComponentInstance[]\n manager?: ViewportManager\n}) {\n const viewportManager = manager || getViewportManager()\n\n const environmentValues: ViewportEnvironmentValues = {\n openWindow: async (\n id: string,\n component: ComponentInstance,\n options?: WindowOptions\n ) => {\n return await viewportManager.openWindow(id, component, options)\n },\n\n dismissWindow: async (id: string) => {\n return await viewportManager.dismissWindow(id)\n },\n\n viewportEnvironment: viewportManager.environment,\n\n currentWindow: null, // This would be set based on current context\n }\n\n return {\n type: 'context-provider' as const,\n context: ViewportEnvironmentContext,\n value: environmentValues,\n children: Array.isArray(children) ? children : [children],\n }\n}\n\n/**\n * Hook to access viewport environment values\n */\nexport function useViewportEnvironment(): ViewportEnvironmentValues {\n const context = useContext(ViewportEnvironmentContext)\n\n if (!context) {\n throw new Error(\n 'useViewportEnvironment must be used within a ViewportEnvironmentProvider'\n )\n }\n\n return context() as ViewportEnvironmentValues\n}\n\n/**\n * Hook for opening windows (SwiftUI-style @Environment(\\.openWindow))\n */\nexport function useOpenWindow(): (\n id: string,\n component: ComponentInstance,\n options?: WindowOptions\n) => Promise<ViewportInstance> {\n const { openWindow } = useViewportEnvironment()\n return openWindow\n}\n\n/**\n * Hook for dismissing windows (SwiftUI-style @Environment(\\.dismissWindow))\n */\nexport function useDismissWindow(): (id: string) => Promise<void> {\n const { dismissWindow } = useViewportEnvironment()\n return dismissWindow\n}\n\n/**\n * Hook to get the viewport environment info\n */\nexport function useViewportInfo(): ViewportEnvironment {\n const { viewportEnvironment } = useViewportEnvironment()\n return viewportEnvironment\n}\n\n/**\n * Hook to get the current window (if any)\n */\nexport function useCurrentWindow(): ViewportInstance | null {\n const { currentWindow } = useViewportEnvironment()\n return currentWindow\n}\n\n/**\n * Hook to access the viewport manager directly\n */\nexport function useViewportManager(): ViewportManager {\n return getViewportManager()\n}\n\n/**\n * Higher-order component that provides viewport environment\n */\nexport function withViewportEnvironment<T>(\n Component: (props: T) => ComponentInstance,\n manager?: ViewportManager\n) {\n return (props: T) => {\n return ViewportEnvironmentProvider({\n children: Component(props),\n manager,\n })\n }\n}\n\n/**\n * Utility to create a window-aware component\n */\nexport function createWindowAwareComponent<T>(\n Component: (\n props: T & {\n openWindow: ViewportEnvironmentValues['openWindow']\n dismissWindow: ViewportEnvironmentValues['dismissWindow']\n viewportEnvironment: ViewportEnvironment\n }\n ) => ComponentInstance\n) {\n return (props: T) => {\n const openWindow = useOpenWindow()\n const dismissWindow = useDismissWindow()\n const viewportEnvironment = useViewportInfo()\n\n return Component({\n ...props,\n openWindow,\n dismissWindow,\n viewportEnvironment,\n })\n }\n}\n\n/**\n * Environment key constants (SwiftUI-style)\n */\nexport const EnvironmentKeys = {\n openWindow: 'openWindow' as const,\n dismissWindow: 'dismissWindow' as const,\n viewportEnvironment: 'viewportEnvironment' as const,\n currentWindow: 'currentWindow' as const,\n}\n\n/**\n * Type-safe environment value getter\n */\nexport function getEnvironmentValue<K extends keyof ViewportEnvironmentValues>(\n key: K\n): ViewportEnvironmentValues[K] {\n const environment = useViewportEnvironment()\n return environment[key]\n}\n","var s = /* @__PURE__ */ ((r) => (r[r.Clean = 0] = \"Clean\", r[r.Check = 1] = \"Check\", r[r.Dirty = 2] = \"Dirty\", r[r.Disposed = 3] = \"Disposed\", r))(s || {});\nexport {\n s as ComputationState\n};\n","import { ComputationState as n } from \"./reactive/types.js\";\nvar P = Object.defineProperty, T = (t, e, s) => e in t ? P(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, u = (t, e, s) => T(t, typeof e != \"symbol\" ? e + \"\" : e, s);\nlet O = 0, D = 0, h = null, a = null, d = !1;\nfunction I() {\n return h;\n}\nfunction N() {\n return a;\n}\nfunction Q() {\n return d;\n}\nclass H {\n constructor(e = null) {\n u(this, \"id\"), u(this, \"parent\"), u(this, \"context\", /* @__PURE__ */ new Map()), u(this, \"cleanups\", []), u(this, \"sources\", /* @__PURE__ */ new Set()), u(this, \"disposed\", !1), this.id = ++D, this.parent = e;\n }\n dispose() {\n if (!this.disposed) {\n this.disposed = !0;\n for (const e of this.sources)\n e.dispose();\n this.sources.clear();\n for (const e of this.cleanups)\n try {\n e();\n } catch (s) {\n console.error(\"Error in cleanup function:\", s);\n }\n this.cleanups.length = 0, this.parent && !this.parent.disposed && this.parent.sources.delete(this);\n }\n }\n}\nclass V {\n constructor(e, s = null) {\n u(this, \"id\"), u(this, \"owner\"), u(this, \"fn\"), u(this, \"sources\", /* @__PURE__ */ new Set()), u(this, \"observers\", /* @__PURE__ */ new Set()), u(this, \"state\", n.Dirty), u(this, \"value\"), this.id = ++O, this.fn = e, this.owner = s, s && !s.disposed && s.sources.add(this);\n }\n execute() {\n if (this.state === n.Disposed)\n return this.value;\n for (const s of this.sources)\n s && typeof s == \"object\" && \"removeObserver\" in s && s.removeObserver(this);\n this.sources.clear();\n const e = h;\n h = this;\n try {\n return this.state = n.Clean, this.value = this.fn(), this.value;\n } catch (s) {\n throw this.state = n.Disposed, (typeof process > \"u\" || process.env.NODE_ENV !== \"test\") && console.error(\"Error in computation:\", s), s;\n } finally {\n h = e;\n }\n }\n dispose() {\n if (this.state !== n.Disposed) {\n this.state = n.Disposed;\n for (const e of this.sources)\n e && typeof e == \"object\" && \"removeObserver\" in e && e.removeObserver(this);\n this.sources.clear();\n for (const e of this.observers)\n e.sources.delete(this);\n this.observers.clear(), this.owner && !this.owner.disposed && this.owner.sources.delete(this);\n }\n }\n}\nfunction ce(t) {\n const e = new H(a), s = a;\n a = e;\n try {\n return t(() => e.dispose());\n } finally {\n a = s;\n }\n}\nfunction he(t, e) {\n const s = a;\n a = t;\n try {\n return e();\n } finally {\n a = s;\n }\n}\nfunction fe() {\n return a;\n}\nlet C = null;\nfunction B(t) {\n C = t;\n}\nfunction de(t) {\n if (d)\n return t();\n const e = d;\n d = !0;\n try {\n const s = t();\n return !e && C && C(), s;\n } finally {\n d = e;\n }\n}\nfunction pe(t) {\n const e = h;\n h = null;\n try {\n return t();\n } finally {\n h = e;\n }\n}\nfunction me(t, e) {\n const s = new V(t, e || a);\n return s.execute(), s;\n}\nfunction ye() {\n return {\n computation: h,\n batch: d\n };\n}\nconst ge = {\n getCurrentComputation: () => h,\n getCurrentOwner: () => a,\n getComputationCount: () => O,\n getOwnerCount: () => D,\n isBatching: () => d\n};\nvar U = Object.defineProperty, W = (t, e, s) => e in t ? U(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, q = (t, e, s) => W(t, typeof e != \"symbol\" ? e + \"\" : e, s);\nlet L = 0;\nclass G {\n constructor(e) {\n q(this, \"id\"), q(this, \"observers\", /* @__PURE__ */ new Set()), q(this, \"_value\"), this.id = ++L, this._value = e;\n }\n /**\n * Get the current value and track dependency\n */\n getValue() {\n const e = I();\n return e && e.state !== n.Disposed && (this.observers.add(e), e.sources.add(this)), this._value;\n }\n /**\n * Get the current value without tracking dependency\n */\n peek() {\n return this._value;\n }\n /**\n * Set a new value and notify observers\n */\n set(e) {\n const s = typeof e == \"function\" ? e(this._value) : e;\n return s !== this._value && (this._value = s, this.notify()), s;\n }\n /**\n * Notify all observers that this signal has changed\n */\n notify() {\n for (const e of this.observers)\n e.state !== n.Disposed && (e.state = n.Dirty, J(e));\n }\n /**\n * Remove an observer (cleanup)\n */\n removeObserver(e) {\n this.observers.delete(e);\n }\n /**\n * Get debug information about this signal\n */\n [Symbol.for(\"tachui.debug\")]() {\n return {\n id: this.id,\n value: this._value,\n observerCount: this.observers.size,\n type: \"Signal\"\n };\n }\n}\nconst b = /* @__PURE__ */ new Set();\nlet _ = !1;\nfunction J(t) {\n b.add(t), !_ && !Q() && queueMicrotask(M);\n}\nfunction M() {\n if (!_) {\n _ = !0;\n try {\n for (; b.size > 0; ) {\n const t = Array.from(b).sort((e, s) => e.id - s.id);\n b.clear();\n for (const e of t)\n e.state === n.Dirty && e.execute();\n }\n } finally {\n _ = !1;\n }\n }\n}\nfunction K(t) {\n const e = new G(t), s = e.getValue.bind(e);\n s.peek = e.peek.bind(e);\n const r = e.set.bind(e);\n return Object.defineProperty(s, Symbol.for(\"tachui.signal\"), {\n value: e,\n enumerable: !1\n }), [s, r];\n}\nfunction ve(t) {\n return typeof t == \"function\" && Symbol.for(\"tachui.signal\") in t;\n}\nfunction be(t) {\n return t[Symbol.for(\"tachui.signal\")] || null;\n}\nB(M);\nconst w = (t, e) => t === e, E = (t, e) => {\n if (t === e) return !0;\n if (t == null || e == null || typeof t != typeof e) return !1;\n if (typeof t == \"object\") {\n if (Array.isArray(t) !== Array.isArray(e)) return !1;\n if (Array.isArray(t)) {\n const l = t, F = e;\n return l.length !== F.length ? !1 : l.every((A, j) => E(A, F[j]));\n }\n const s = t, r = e, i = Object.keys(s), o = Object.keys(r);\n return i.length !== o.length ? !1 : i.every((l) => E(s[l], r[l]));\n }\n return !1;\n}, _e = (t, e) => {\n if (t === e) return !0;\n if (typeof t != \"object\" || typeof e != \"object\" || t == null || e == null) return !1;\n const s = t, r = e, i = Object.keys(s), o = Object.keys(r);\n return i.length !== o.length ? !1 : i.every((l) => s[l] === r[l]);\n}, we = (t, e) => {\n if (t === e) return !0;\n if (t instanceof Date && e instanceof Date)\n return t.getTime() === e.getTime();\n if (t instanceof RegExp && e instanceof RegExp)\n return t.toString() === e.toString();\n if (t instanceof Set && e instanceof Set) {\n if (t.size !== e.size) return !1;\n for (const s of t)\n if (!e.has(s)) return !1;\n return !0;\n }\n if (t instanceof Map && e instanceof Map) {\n if (t.size !== e.size) return !1;\n for (const [s, r] of t)\n if (!e.has(s) || e.get(s) !== r) return !1;\n return !0;\n }\n return E(t, e);\n}, Se = (t, e) => {\n if (t === e) return !0;\n try {\n return JSON.stringify(t) === JSON.stringify(e);\n } catch {\n return t === e;\n }\n}, qe = (t, e = w) => (s, r) => e(t(s), t(r)), Ce = (t = w) => (e, s) => e === s ? !0 : e.length !== s.length ? !1 : e.every((r, i) => t(r, s[i])), Ee = (t = w) => (e, s) => {\n if (e === s) return !0;\n if (e == null || s == null) return !1;\n const r = Object.keys(e), i = Object.keys(s);\n return r.length !== i.length ? !1 : r.every((o) => t(e[o], s[o]));\n}, Fe = (...t) => (e, s) => t.every((r) => r(e, s)), Oe = (t, e) => (s, r) => {\n const i = t(s, r);\n return process.env.NODE_ENV === \"development\" && console.log(`[${e || \"equals\"}]`, { a: s, b: r, equal: i }), i;\n};\nvar X = Object.defineProperty, Y = (t, e, s) => e in t ? X(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, c = (t, e, s) => Y(t, typeof e != \"symbol\" ? e + \"\" : e, s), g = /* @__PURE__ */ ((t) => (t[t.Immediate = 0] = \"Immediate\", t[t.High = 1] = \"High\", t[t.Normal = 2] = \"Normal\", t[t.Low = 3] = \"Low\", t[t.Idle = 4] = \"Idle\", t))(g || {});\nclass Z extends Error {\n constructor(e, s, r) {\n super(e), this.cause = s, this.node = r, this.name = \"ReactiveError\";\n }\n}\nconst k = class m {\n constructor() {\n c(this, \"updateQueues\", /* @__PURE__ */ new Map()), c(this, \"isFlushPending\", !1), c(this, \"isDestroyed\", !1), c(this, \"errorHandlers\", /* @__PURE__ */ new Set()), c(this, \"maxRetries\", 3), c(this, \"totalUpdateCycles\", 0), c(this, \"totalUpdateTime\", 0), c(this, \"errorCount\", 0), c(this, \"nodeRegistry\", /* @__PURE__ */ new WeakSet());\n for (const e of Object.values(g))\n typeof e == \"number\" && this.updateQueues.set(e, /* @__PURE__ */ new Set());\n }\n static getInstance() {\n return m.instance || (m.instance = new m()), m.instance;\n }\n /**\n * Schedule reactive node for update\n */\n schedule(e) {\n if (this.isDestroyed) return;\n this.nodeRegistry.add(e), this.getQueue(e.priority).add(e), this.isFlushPending || (this.isFlushPending = !0, this.scheduleFlush(e.priority));\n }\n /**\n * Process all queued updates by priority\n */\n async flush() {\n if (this.isDestroyed) return;\n this.isFlushPending = !1;\n const e = performance.now();\n try {\n for (const s of [\n 0,\n 1,\n 2,\n 3,\n 4\n /* Idle */\n ]) {\n const r = this.updateQueues.get(s);\n if (!r || r.size === 0) continue;\n const i = Array.from(r);\n r.clear();\n for (const o of i)\n try {\n await this.updateNodeWithRetry(o);\n } catch (l) {\n this.handleReactiveError(\n new Z(`Failed to update ${o.type} node ${o.id}`, l, o)\n );\n }\n if (this.hasHigherPriorityWork(s))\n return this.flush();\n }\n this.totalUpdateCycles++;\n } finally {\n const s = performance.now();\n this.totalUpdateTime += s - e;\n }\n }\n /**\n * Update node with retry logic\n */\n async updateNodeWithRetry(e, s = 1) {\n try {\n e.notify();\n } catch (r) {\n if (s < this.maxRetries)\n return console.warn(`Reactive update failed, retrying (${s}/${this.maxRetries})`), await new Promise((i) => setTimeout(i, s * 10)), this.updateNodeWithRetry(e, s + 1);\n throw r;\n }\n }\n /**\n * Schedule flush based on priority\n */\n scheduleFlush(e) {\n switch (e) {\n case 0:\n this.flush();\n break;\n case 1:\n queueMicrotask(() => this.flush());\n break;\n case 2:\n typeof requestAnimationFrame < \"u\" ? requestAnimationFrame(() => this.flush()) : queueMicrotask(() => this.flush());\n break;\n case 3:\n case 4:\n typeof requestIdleCallback < \"u\" ? requestIdleCallback(() => this.flush(), { timeout: 1e3 }) : setTimeout(() => this.flush(), 50);\n break;\n }\n }\n /**\n * Check if there's higher priority work waiting\n */\n hasHigherPriorityWork(e) {\n for (let s = 0; s < e; s++) {\n const r = this.updateQueues.get(s);\n if (r && r.size > 0)\n return !0;\n }\n return !1;\n }\n /**\n * Get queue for priority level\n */\n getQueue(e) {\n const s = this.updateQueues.get(e);\n if (!s)\n throw new Error(`Invalid priority level: ${e}`);\n return s;\n }\n /**\n * Register error handler\n */\n onError(e) {\n return this.errorHandlers.add(e), () => this.errorHandlers.delete(e);\n }\n /**\n * Handle reactive errors with recovery\n */\n handleReactiveError(e) {\n this.errorCount++;\n let s = !1;\n for (const r of this.errorHandlers)\n try {\n r(e), s = !0;\n } catch (i) {\n console.error(\"Error handler threw error:\", i);\n }\n if (!s && (console.error(\"Unhandled reactive error:\", e), process.env.NODE_ENV === \"development\"))\n throw e;\n }\n /**\n * Get performance metrics\n */\n getPerformanceMetrics() {\n let e = 0;\n for (const s of this.updateQueues.values())\n e += s.size;\n return {\n totalNodes: e,\n updateCycles: this.totalUpdateCycles,\n averageUpdateTime: this.totalUpdateCycles > 0 ? this.totalUpdateTime / this.totalUpdateCycles : 0,\n memoryUsage: this.estimateMemoryUsage(),\n errorCount: this.errorCount\n };\n }\n /**\n * Estimate memory usage (rough approximation)\n */\n estimateMemoryUsage() {\n let e = 0;\n for (const s of this.updateQueues.values())\n e += s.size * 50;\n return e += this.errorHandlers.size * 100, e;\n }\n /**\n * Check if node is scheduled\n */\n hasNode(e) {\n for (const s of this.updateQueues.values())\n if (s.has(e))\n return !0;\n return !1;\n }\n /**\n * Flush all pending updates synchronously\n */\n flushSync() {\n this.isFlushPending && (this.isFlushPending = !1, this.flush());\n }\n /**\n * Clear all pending updates\n */\n clearPending() {\n for (const e of this.updateQueues.values())\n e.clear();\n this.isFlushPending = !1;\n }\n /**\n * Cleanup all reactive nodes and destroy scheduler\n */\n destroy() {\n this.isDestroyed = !0;\n for (const e of this.updateQueues.values()) {\n for (const s of e)\n try {\n s.cleanup();\n } catch (r) {\n console.error(\"Error cleaning up reactive node:\", r);\n }\n e.clear();\n }\n this.updateQueues.clear(), this.errorHandlers.clear(), m.instance = null;\n }\n /**\n * Get debug information\n */\n getDebugInfo() {\n const e = {};\n for (const [s, r] of this.updateQueues)\n e[g[s]] = r.size;\n return {\n isFlushPending: this.isFlushPending,\n isDestroyed: this.isDestroyed,\n queueSizes: e,\n errorHandlerCount: this.errorHandlers.size,\n performance: this.getPerformanceMetrics()\n };\n }\n};\nc(k, \"instance\", null);\nlet De = k;\nvar ee = Object.defineProperty, te = (t, e, s) => e in t ? ee(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, p = (t, e, s) => te(t, typeof e != \"symbol\" ? e + \"\" : e, s);\nclass se extends V {\n constructor(e, s = {}, r = N()) {\n super(e, r), p(this, \"type\", \"computed\"), p(this, \"priority\"), p(this, \"_hasValue\", !1), p(this, \"_error\", null), p(this, \"equalsFn\"), p(this, \"options\"), this.priority = s.priority ?? g.Normal, this.equalsFn = s.equals ?? w, this.options = s;\n }\n /**\n * Get the computed value, tracking dependency and lazily computing\n */\n getValue() {\n const e = I();\n return e && e.state !== n.Disposed && (this.observers.add(e), e.sources.add(this)), (this.state === n.Dirty || !this._hasValue) && (this.execute(), this._hasValue = !0), this.value;\n }\n /**\n * Get the current value without tracking dependency\n */\n peek() {\n return (this.state === n.Dirty || !this._hasValue) && (this.execute(), this._hasValue = !0), this.value;\n }\n /**\n * Remove an observer (cleanup)\n */\n removeObserver(e) {\n this.observers.delete(e);\n }\n /**\n * Execute the computation and notify observers\n */\n execute() {\n const e = this._hasValue ? this.value : void 0, s = super.execute();\n if (!this._hasValue || !this.equalsFn(e, s))\n for (const r of this.observers)\n r.state !== n.Disposed && (r.state = n.Dirty, \"execute\" in r && typeof r.execute == \"function\" && queueMicrotask(() => {\n r.state === n.Dirty && r.execute();\n }));\n return s;\n }\n /**\n * Notify method for ReactiveNode compatibility\n */\n notify() {\n this.execute();\n }\n /**\n * Complete cleanup for memory management\n */\n cleanup() {\n for (const e of this.sources)\n \"removeObserver\" in e && e.removeObserver(this);\n this.sources.clear();\n for (const e of this.observers)\n e.sources.delete(this);\n this.observers.clear(), this._hasValue = !1, this._error = null, this.state = n.Disposed;\n }\n /**\n * Dispose the computed value\n */\n dispose() {\n this.cleanup(), super.dispose();\n }\n /**\n * Debug information\n */\n [Symbol.for(\"tachui.debug\")]() {\n return {\n id: this.id,\n type: this.type,\n value: this._hasValue ? this.value : void 0,\n hasValue: this._hasValue,\n error: this._error?.message,\n state: this.state,\n sourceCount: this.sources.size,\n observerCount: this.observers.size,\n priority: g[this.priority],\n debugName: this.options.debugName,\n equalsFn: this.equalsFn.name || \"anonymous\"\n };\n }\n toString() {\n return `Computed(${this.options.debugName || this.id}): ${this._hasValue ? this.value : \"no value\"}`;\n }\n}\nfunction v(t, e) {\n const s = new se(t, e), r = s.getValue.bind(s);\n return r.peek = s.peek.bind(s), Object.defineProperty(r, Symbol.for(\"tachui.computed\"), {\n value: s,\n enumerable: !1\n }), r;\n}\nfunction Ie(t, e) {\n return v(t, e);\n}\nfunction Ne(t) {\n return typeof t == \"function\" && Symbol.for(\"tachui.computed\") in t;\n}\nfunction Ve(t) {\n return t[Symbol.for(\"tachui.computed\")] || null;\n}\nfunction Me(t, e) {\n return v(e ? () => {\n for (const r of e)\n r();\n return t();\n } : t);\n}\nfunction ke(t, e) {\n let s, r = !1;\n return v(() => (e() && (s = t(), r = !0), r || (s = t(), r = !0), s));\n}\nconst [x, re] = K(\"light\");\nfunction xe() {\n const t = x();\n return t === \"system\" ? $() : t;\n}\nfunction $e(t) {\n re(t);\n}\nconst ie = v(() => {\n const t = x();\n return t === \"system\" ? $() : t;\n});\nfunction ze() {\n return ie;\n}\nfunction $() {\n return typeof window < \"u\" && window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\nfunction S(t) {\n const e = N();\n e && !e.disposed ? e.cleanups.push(t) : __DEV__ && console.warn(\"onCleanup called outside of reactive context\");\n}\nfunction Re(t) {\n \"dispose\" in t && typeof t.dispose == \"function\" && t.dispose();\n}\nfunction Ae(t) {\n const [e, s] = t();\n return S(s), e;\n}\nfunction je() {\n const t = [];\n let e = !1;\n return {\n add(s) {\n if (e) {\n __DEV__ && console.warn(\"Adding cleanup to disposed group\");\n return;\n }\n t.push(s);\n },\n dispose() {\n if (!e) {\n e = !0;\n for (const s of t)\n try {\n s();\n } catch (r) {\n console.error(\"Error in cleanup function:\", r);\n }\n t.length = 0;\n }\n },\n get disposed() {\n return e;\n }\n };\n}\nfunction Pe(t, e) {\n const s = setTimeout(t, e);\n return S(() => clearTimeout(s)), s;\n}\nfunction Te(t, e) {\n const s = setInterval(t, e);\n return S(() => clearInterval(s)), s;\n}\nfunction Qe(t, e, s, r) {\n t.addEventListener(e, s, r), S(() => t.removeEventListener(e, s, r));\n}\ntypeof globalThis.__DEV__ > \"u\" && (globalThis.__DEV__ = process.env.NODE_ENV !== \"production\");\nvar ne = Object.defineProperty, oe = (t, e, s) => e in t ? ne(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, y = (t, e, s) => oe(t, typeof e != \"symbol\" ? e + \"\" : e, s);\nclass z {\n constructor() {\n y(this, \"pending\", /* @__PURE__ */ new Set()), y(this, \"isFlushScheduled\", !1);\n }\n schedule(e) {\n this.pending.add(e), this.isFlushScheduled || (this.isFlushScheduled = !0, queueMicrotask(() => this.flush()));\n }\n flush() {\n if (this.pending.size === 0) {\n this.isFlushScheduled = !1;\n return;\n }\n const e = Array.from(this.pending);\n this.pending.clear(), this.isFlushScheduled = !1;\n for (const s of e)\n try {\n s();\n } catch (r) {\n console.error(\"Error in scheduled task:\", r);\n }\n this.pending.size > 0 && (this.isFlushScheduled = !0, queueMicrotask(() => this.flush()));\n }\n}\nclass ue {\n schedule(e) {\n try {\n e();\n } catch (s) {\n console.error(\"Error in sync scheduled task:\", s);\n }\n }\n flush() {\n }\n}\nvar R = /* @__PURE__ */ ((t) => (t[t.Immediate = 0] = \"Immediate\", t[t.High = 1] = \"High\", t[t.Normal = 2] = \"Normal\", t[t.Low = 3] = \"Low\", t[t.Idle = 4] = \"Idle\", t))(R || {});\nclass ae {\n constructor() {\n y(this, \"queues\", /* @__PURE__ */ new Map()), y(this, \"taskIdCounter\", 0), y(this, \"isFlushScheduled\", !1);\n for (const e of Object.values(R))\n typeof e == \"number\" && this.queues.set(e, /* @__PURE__ */ new Set());\n }\n schedule(e, s = 2) {\n const r = {\n fn: e,\n priority: s,\n id: ++this.taskIdCounter\n }, i = this.queues.get(s);\n i && i.add(r), this.isFlushScheduled || (this.isFlushScheduled = !0, s === 0 ? this.flush() : queueMicrotask(() => this.flush()));\n }\n flush() {\n this.isFlushScheduled = !1;\n for (const e of [\n 0,\n 1,\n 2,\n 3,\n 4\n /* Idle */\n ]) {\n const s = this.queues.get(e);\n if (!s || s.size === 0) continue;\n const r = Array.from(s).sort((i, o) => i.id - o.id);\n s.clear();\n for (const i of r)\n try {\n i.fn();\n } catch (o) {\n console.error(`Error in priority ${e} task:`, o);\n }\n if (s.size === 0 && this.hasMoreTasks()) {\n queueMicrotask(() => this.flush());\n return;\n }\n }\n }\n hasMoreTasks() {\n for (const e of this.queues.values())\n if (e.size > 0) return !0;\n return !1;\n }\n}\nlet f = new z();\nfunction He() {\n return f;\n}\nfunction Be(t) {\n f = t;\n}\nfunction Ue(t = !0) {\n t ? f = new z() : f = new ue();\n}\nfunction We(t) {\n f.schedule(t);\n}\nfunction Le(t, e) {\n f instanceof ae ? f.schedule(t, e) : f.schedule(t);\n}\nfunction Ge(t) {\n typeof requestIdleCallback < \"u\" ? requestIdleCallback(t) : setTimeout(t, 0);\n}\nexport {\n ge as $,\n Ue as A,\n He as B,\n Ge as C,\n We as D,\n Le as E,\n Be as F,\n K as G,\n M as H,\n be as I,\n ve as J,\n $ as K,\n xe as L,\n ze as M,\n $e as N,\n De as O,\n Ve as P,\n Me as Q,\n Z as R,\n ke as S,\n R as T,\n g as U,\n I as V,\n N as W,\n Q as X,\n V as Y,\n B as Z,\n me as _,\n Qe as a,\n Te as b,\n je as c,\n Ae as d,\n Pe as e,\n Re as f,\n v as g,\n Ie as h,\n Ne as i,\n de as j,\n ce as k,\n fe as l,\n ye as m,\n Fe as n,\n S as o,\n Ce as p,\n Ee as q,\n he as r,\n qe as s,\n Oe as t,\n pe as u,\n E as v,\n w,\n Se as x,\n _e as y,\n we as z\n};\n","import { Y as o, W as f } from \"./scheduler-BKeqwrYE.js\";\nfunction i(e, n = {}) {\n const c = f();\n let r, t = !0;\n const u = () => {\n const a = e(r);\n return t && (t = !1), r = a, a;\n }, s = new o(u, c);\n return n.name && Object.defineProperty(s, \"name\", {\n value: n.name,\n enumerable: !1\n }), s.execute(), s;\n}\nfunction d(e, n = {}) {\n const c = f();\n let r, t = !1;\n const u = () => {\n if (!t)\n return t = !0, e(r);\n const a = e(r);\n return r = a, a;\n }, s = new o(u, c);\n return n.name && Object.defineProperty(s, \"name\", {\n value: n.name,\n enumerable: !1\n }), s.execute(), s;\n}\nfunction p(e, n = {}) {\n const c = f(), r = () => {\n const u = e(void 0);\n return t.dispose(), u;\n }, t = new o(r, c);\n return n.name && Object.defineProperty(t, \"name\", {\n value: `${n.name}(once)`,\n enumerable: !1\n }), t.execute(), t;\n}\nfunction b(e, n = {}) {\n return i(e, { ...n, name: `${n.name || \"sync\"}(sync)` });\n}\nfunction v(e) {\n e.dispose();\n}\nfunction l(e) {\n return e.state === 3;\n}\nfunction y(e) {\n return {\n id: e.id,\n name: e.name || \"anonymous\",\n state: e.state,\n sourceCount: e.sources.size,\n observerCount: e.observers.size,\n disposed: l(e),\n type: \"Effect\"\n };\n}\nexport {\n p as a,\n d as b,\n i as c,\n b as d,\n v as e,\n y as g,\n l as i\n};\n","import { J as p, i as v, M as E } from \"../scheduler-BKeqwrYE.js\";\nimport { c as h } from \"../effect-B9Knft0b.js\";\nimport { ModifierPriority as g } from \"./types.js\";\nimport { shouldExpandForInfinity as L, dimensionToCSS as u, isInfinity as m } from \"../constants/layout.js\";\nvar A = Object.defineProperty, T = (d, i, t) => i in d ? A(d, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : d[i] = t, l = (d, i, t) => T(d, typeof i != \"symbol\" ? i + \"\" : i, t);\nclass y {\n constructor(i) {\n this.properties = i;\n }\n /**\n * Helper to resolve reactive properties\n */\n resolveReactiveProps(i, t) {\n const e = {};\n for (const [n, r] of Object.entries(i))\n p(r) || v(r), e[n] = r;\n return e;\n }\n /**\n * Apply a single style change to an element with reactive support\n */\n applyStyleChange(i, t, e) {\n if (i instanceof HTMLElement) {\n const n = this.toCSSProperty(t);\n if (p(e) || v(e))\n h(() => {\n const r = e(), o = String(r);\n if (o.includes(\"!important\")) {\n const a = o.replace(/\\s*!important\\s*$/, \"\").trim();\n i.style.setProperty(n, a, \"important\");\n } else\n i.style.setProperty(n, o);\n });\n else {\n const r = String(e);\n if (r.includes(\"!important\")) {\n const o = r.replace(/\\s*!important\\s*$/, \"\").trim();\n i.style.setProperty(n, o, \"important\");\n } else\n i.style.setProperty(n, r);\n }\n }\n }\n /**\n * Convert camelCase property to CSS kebab-case\n */\n toCSSProperty(i) {\n return i.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n }\n /**\n * Convert value to CSS value string\n */\n toCSSValue(i) {\n return typeof i == \"number\" ? `${i}px` : String(i);\n }\n /**\n * Convert value to CSS value string with property-specific handling\n */\n toCSSValueForProperty(i, t) {\n return typeof t == \"number\" ? [\n \"opacity\",\n \"z-index\",\n \"line-height\",\n \"flex-grow\",\n \"flex-shrink\",\n \"order\",\n \"column-count\",\n \"font-weight\"\n ].includes(i) ? String(t) : `${t}px` : ([\n \"filter\",\n // CSS filter strings should not be processed\n \"transform\",\n // CSS transform strings\n \"clip-path\"\n // CSS clip-path strings\n ].includes(i), String(t));\n }\n /**\n * Apply multiple CSS properties to an element with reactive support\n */\n applyStyles(i, t) {\n if (i instanceof HTMLElement || i.style) {\n const e = (i instanceof HTMLElement, i.style);\n for (const [n, r] of Object.entries(t))\n if (r !== void 0) {\n const o = this.toCSSProperty(n);\n if (p(r) || v(r))\n h(() => {\n const a = r(), s = this.toCSSValueForProperty(\n o,\n a\n );\n if (e.setProperty)\n if (typeof s == \"string\" && s.includes(\"!important\")) {\n const f = s.replace(/\\s*!important\\s*$/, \"\").trim();\n e.setProperty(o, f, \"important\");\n } else\n e.setProperty(o, s);\n else\n e[o] = s;\n });\n else {\n const a = this.toCSSValueForProperty(o, r);\n if (e.setProperty)\n if (typeof a == \"string\" && a.includes(\"!important\")) {\n const s = a.replace(/\\s*!important\\s*$/, \"\").trim();\n e.setProperty(o, s, \"important\");\n } else\n e.setProperty(o, a);\n else\n e[o] = a;\n }\n }\n }\n }\n /**\n * Add CSS classes to an element\n */\n addClasses(i, t) {\n i instanceof HTMLElement && i.classList.add(...t);\n }\n /**\n * Remove CSS classes from an element\n */\n removeClasses(i, t) {\n i instanceof HTMLElement && i.classList.remove(...t);\n }\n /**\n * Create a style computation context\n */\n createStyleContext(i, t, e) {\n return {\n componentId: i,\n element: t,\n modifiers: e,\n signals: /* @__PURE__ */ new Set(),\n cleanup: []\n };\n }\n}\nclass k extends y {\n constructor() {\n super(...arguments), l(this, \"type\", \"layout\"), l(this, \"priority\", g.LAYOUT);\n }\n apply(i, t) {\n if (!i.element || !t.element) return;\n const e = this.createStyleContext(\n t.componentId,\n t.element,\n []\n ), n = this.computeLayoutStyles(\n this.properties,\n e\n );\n this.applyStyles(t.element, n);\n const r = this.properties;\n r.position && t.element instanceof HTMLElement && this.applyAbsolutePosition(t.element, r.position);\n }\n // Layout modifier implementations have been migrated to @tachui/modifiers/layout\n applyAbsolutePosition(i, t) {\n const { x: e, y: n } = t, r = e ?? \"auto\", o = n ?? \"auto\";\n i.style.left = this.toCSSValue(r), i.style.top = this.toCSSValue(o);\n }\n computeLayoutStyles(i, t) {\n const e = {};\n if (i.frame) {\n const n = i.frame, r = L(n);\n if (Object.assign(e, r.cssProps), n.width !== void 0) {\n const o = u(n.width);\n o !== void 0 && !m(n.width) && !r.expandWidth && (e.width = o);\n }\n if (n.height !== void 0) {\n const o = u(n.height);\n o !== void 0 && !m(n.height) && !r.expandHeight && (e.height = o);\n }\n if (n.minWidth !== void 0) {\n const o = u(n.minWidth);\n o !== void 0 && (e.minWidth = o);\n }\n if (n.maxWidth !== void 0 && !m(n.maxWidth)) {\n const o = u(n.maxWidth);\n o !== void 0 && (e.maxWidth = o);\n } else m(n.maxWidth) && (e.maxWidth = \"none\", e.flexGrow = \"1 !important\", e.flexShrink = \"1 !important\", e.flexBasis = \"0% !important\", e.alignSelf = \"stretch !important\");\n if (n.minHeight !== void 0) {\n const o = u(n.minHeight);\n o !== void 0 && (e.minHeight = o);\n }\n if (n.maxHeight !== void 0 && !m(n.maxHeight)) {\n const o = u(n.maxHeight);\n o !== void 0 && (e.maxHeight = o);\n } else m(n.maxHeight) && (e.maxHeight = \"none\", e.flexGrow = \"1 !important\", e.flexShrink = \"1 !important\", e.flexBasis = \"0% !important\", e.alignSelf = \"stretch !important\");\n }\n if (i.padding !== void 0)\n if (typeof i.padding == \"number\")\n e.padding = this.toCSSValue(i.padding);\n else {\n const n = i.padding;\n n.top !== void 0 && (e.paddingTop = this.toCSSValue(n.top)), n.right !== void 0 && (e.paddingRight = this.toCSSValue(n.right)), n.bottom !== void 0 && (e.paddingBottom = this.toCSSValue(n.bottom)), n.left !== void 0 && (e.paddingLeft = this.toCSSValue(n.left));\n }\n if (i.margin !== void 0)\n if (typeof i.margin == \"number\")\n e.margin = this.toCSSValue(i.margin);\n else {\n const n = i.margin;\n n.top !== void 0 && (e.marginTop = this.toCSSValue(n.top)), n.right !== void 0 && (e.marginRight = this.toCSSValue(n.right)), n.bottom !== void 0 && (e.marginBottom = this.toCSSValue(n.bottom)), n.left !== void 0 && (e.marginLeft = this.toCSSValue(n.left));\n }\n if (i.alignment)\n switch (i.alignment) {\n case \"leading\":\n e.textAlign = \"left\", e.alignItems = \"flex-start\";\n break;\n case \"center\":\n e.textAlign = \"center\", e.alignItems = \"center\";\n break;\n case \"trailing\":\n e.textAlign = \"right\", e.alignItems = \"flex-end\";\n break;\n case \"top\":\n e.alignItems = \"flex-start\";\n break;\n case \"bottom\":\n e.alignItems = \"flex-end\";\n break;\n }\n if (i.layoutPriority !== void 0) {\n const n = Number(i.layoutPriority);\n n > 0 ? (e.flexShrink = \"0\", e.flexGrow = String(Math.max(1, n / 10)), e.zIndex = String(n), e.gridRowEnd = `span ${String(Math.min(10, Math.max(1, Math.ceil(n / 10))))}`, e.gridColumnEnd = `span ${String(Math.min(10, Math.max(1, Math.ceil(n / 10))))}`) : n === 0 ? (e.flexShrink = \"1\", e.flexGrow = \"1\") : (e.flexShrink = String(Math.abs(n)), e.flexGrow = \"0\", e.zIndex = String(n)), e && typeof e == \"object\" && \"setProperty\" in e && e.setProperty(\"--layout-priority\", String(n));\n }\n if (i.offset, i.aspectRatio) {\n const { ratio: n, contentMode: r } = i.aspectRatio;\n n !== void 0 && (e.aspectRatio = typeof n == \"number\" ? String(n) : n, r === \"fill\" ? e.objectFit = \"cover\" : e.objectFit = \"contain\");\n }\n if (i.fixedSize) {\n const { horizontal: n, vertical: r } = i.fixedSize;\n n && (e.flexShrink = \"0\", e.width = \"max-content\"), r && (e.flexShrink = \"0\", e.height = \"max-content\");\n }\n return e;\n }\n}\nclass $ extends y {\n constructor() {\n super(...arguments), l(this, \"type\", \"appearance\"), l(this, \"priority\", g.APPEARANCE);\n }\n apply(i, t) {\n if (!i.element || !t.element)\n return;\n const e = this.createStyleContext(\n t.componentId,\n t.element,\n []\n ), n = this.resolveReactiveProps(\n this.properties,\n e\n );\n this.applyAssetBasedStyles(t.element, n);\n const r = this.computeAppearanceStyles(n);\n this.applyStyles(t.element, r), this.applyAttributes(t.element, n);\n }\n /**\n * Apply Asset-based styles with theme reactivity\n */\n applyAssetBasedStyles(i, t) {\n const e = E();\n t.foregroundColor && this.isAsset(t.foregroundColor) && h(() => {\n e();\n const n = t.foregroundColor.resolve();\n this.applyStyleChange(i, \"color\", n);\n }), t.backgroundColor && this.isAsset(t.backgroundColor) && h(() => {\n e();\n const n = t.backgroundColor.resolve();\n this.applyStyleChange(i, \"backgroundColor\", n);\n }), t.border?.color && this.isAsset(t.border.color) && h(() => {\n e();\n const n = t.border.color.resolve();\n this.applyStyleChange(i, \"borderColor\", n);\n });\n }\n /**\n * Check if a value is an Asset object (including Asset proxies)\n */\n isAsset(i) {\n return i != null && typeof i == \"object\" && \"resolve\" in i && typeof i.resolve == \"function\";\n }\n computeAppearanceStyles(i) {\n const t = {};\n if (i.foregroundColor && !this.isAsset(i.foregroundColor) && (t.color = i.foregroundColor), i.backgroundColor && !this.isAsset(i.backgroundColor) && (t.backgroundColor = i.backgroundColor), i.opacity !== void 0 && (t.opacity = i.opacity), i.font) {\n const n = i.font;\n n.family && (typeof n.family == \"object\" && n.family !== null && \"resolve\" in n.family ? t.fontFamily = n.family.resolve() : t.fontFamily = n.family), n.size && (t.fontSize = this.toCSSValue(n.size)), n.weight && (t.fontWeight = String(n.weight)), n.style && (t.fontStyle = n.style);\n }\n if (i.cornerRadius !== void 0 && (t.borderRadius = this.toCSSValue(i.cornerRadius)), i.border) {\n const n = i.border;\n n.width !== void 0 && (t.borderWidth = this.toCSSValue(n.width)), n.color && !this.isAsset(n.color) && (t.borderColor = n.color), n.style && (t.borderStyle = n.style);\n }\n const e = [];\n return i.blur !== void 0 && e.push(`blur(${i.blur}px)`), i.brightness !== void 0 && e.push(`brightness(${i.brightness})`), i.contrast !== void 0 && e.push(`contrast(${i.contrast})`), i.saturation !== void 0 && e.push(`saturate(${i.saturation})`), i.hueRotation !== void 0 && e.push(`hue-rotate(${i.hueRotation}deg)`), i.grayscale !== void 0 && e.push(`grayscale(${i.grayscale})`), i.colorInvert !== void 0 && e.push(`invert(${i.colorInvert})`), e.length > 0 && (t.filter = e.join(\" \")), t;\n }\n /**\n * Apply HTML attributes (ARIA, role, data attributes, etc.)\n */\n applyAttributes(i, t) {\n if (!i) return;\n const e = this.findComponentFromElement(i);\n t.role !== void 0 && (i.setAttribute(\"role\", String(t.role)), e?.props && (e.props.role = String(t.role))), t[\"aria-label\"] !== void 0 && (i.setAttribute(\"aria-label\", String(t[\"aria-label\"])), e?.props && (e.props[\"aria-label\"] = String(t[\"aria-label\"]))), t[\"aria-live\"] !== void 0 && (i.setAttribute(\"aria-live\", String(t[\"aria-live\"])), e?.props && (e.props[\"aria-live\"] = String(t[\"aria-live\"]))), t[\"aria-describedby\"] !== void 0 && (i.setAttribute(\n \"aria-describedby\",\n String(t[\"aria-describedby\"])\n ), e?.props && (e.props[\"aria-describedby\"] = String(t[\"aria-describedby\"]))), t[\"aria-modal\"] !== void 0 && (i.setAttribute(\"aria-modal\", String(t[\"aria-modal\"])), e?.props && (e.props[\"aria-modal\"] = String(t[\"aria-modal\"]))), t[\"aria-hidden\"] !== void 0 && (i.setAttribute(\"aria-hidden\", String(t[\"aria-hidden\"])), e?.props && (e.props[\"aria-hidden\"] = String(t[\"aria-hidden\"]))), t.navigationTitle !== void 0 && (i.setAttribute(\n \"data-navigation-title\",\n String(t.navigationTitle)\n ), e?.props && (e.props.navigationTitle = String(t.navigationTitle))), t.navigationBarHidden !== void 0 && (i.setAttribute(\n \"data-navigation-bar-hidden\",\n String(t.navigationBarHidden)\n ), e?.props && (e.props.navigationBarHidden = t.navigationBarHidden), t.navigationBarHidden && (i.setAttribute(\"aria-hidden\", \"true\"), e?.props && (e.props[\"aria-hidden\"] = \"true\"))), t.navigationBarItems !== void 0 && (i.setAttribute(\n \"data-navigation-bar-items\",\n JSON.stringify(t.navigationBarItems)\n ), e?.props && (e.props.navigationBarItems = t.navigationBarItems));\n }\n findComponentFromElement(i) {\n return i._tachui_component || null;\n }\n}\nclass H extends y {\n constructor() {\n super(...arguments), l(this, \"type\", \"interaction\"), l(this, \"priority\", g.INTERACTION);\n }\n apply(i, t) {\n if (!t.element) return;\n const e = this.properties;\n if (e.onTap && t.element.addEventListener(\"click\", e.onTap), e.onHover && (t.element.addEventListener(\"mouseenter\", () => e.onHover(!0)), t.element.addEventListener(\"mouseleave\", () => e.onHover(!1))), e.onMouseEnter && t.element.addEventListener(\"mouseenter\", e.onMouseEnter), e.onMouseLeave && t.element.addEventListener(\"mouseleave\", e.onMouseLeave), e.onMouseDown && t.element.addEventListener(\"mousedown\", e.onMouseDown), e.onMouseUp && t.element.addEventListener(\"mouseup\", e.onMouseUp), e.onDragStart && t.element.addEventListener(\"dragstart\", e.onDragStart), e.onDragOver && t.element.addEventListener(\"dragover\", e.onDragOver), e.onDragLeave && t.element.addEventListener(\"dragleave\", e.onDragLeave), e.onDrop && t.element.addEventListener(\"drop\", e.onDrop), e.onDoubleClick && t.element.addEventListener(\"dblclick\", e.onDoubleClick), e.onContextMenu && t.element.addEventListener(\"contextmenu\", e.onContextMenu), e.onFocus && (t.element.addEventListener(\"focus\", () => e.onFocus(!0)), t.element.addEventListener(\"blur\", () => e.onFocus(!1))), e.onBlur && t.element.addEventListener(\"blur\", () => e.onBlur(!1)), e.onKeyPress && t.element.addEventListener(\"keypress\", e.onKeyPress), e.onKeyDown && t.element.addEventListener(\"keydown\", e.onKeyDown), e.onKeyUp && t.element.addEventListener(\"keyup\", e.onKeyUp), e.onTouchStart && t.element.addEventListener(\"touchstart\", e.onTouchStart, {\n passive: !0\n }), e.onTouchMove && t.element.addEventListener(\"touchmove\", e.onTouchMove, {\n passive: !0\n }), e.onTouchEnd && t.element.addEventListener(\"touchend\", e.onTouchEnd, {\n passive: !0\n }), e.onTouchCancel && t.element.addEventListener(\"touchcancel\", e.onTouchCancel, {\n passive: !0\n }), e.onSwipeLeft || e.onSwipeRight) {\n let n = 0, r = 0;\n t.element.addEventListener(\n \"touchstart\",\n (o) => {\n const s = o.touches[0];\n n = s.clientX, r = s.clientY;\n },\n { passive: !0 }\n ), t.element.addEventListener(\n \"touchend\",\n (o) => {\n const s = o.changedTouches[0], f = s.clientX - n, c = s.clientY - r;\n Math.abs(f) > Math.abs(c) && Math.abs(f) > 50 && (f < 0 && e.onSwipeLeft ? e.onSwipeLeft() : f > 0 && e.onSwipeRight && e.onSwipeRight());\n },\n { passive: !0 }\n );\n }\n e.onScroll && t.element.addEventListener(\"scroll\", e.onScroll, {\n passive: !0\n }), e.onWheel && t.element.addEventListener(\"wheel\", e.onWheel, {\n passive: !1\n }), e.onInput && t.element.addEventListener(\"input\", e.onInput), e.onChange && t.element.addEventListener(\"change\", (n) => {\n const r = n.target, o = r.value || r.textContent || \"\";\n e.onChange(o, n);\n }), e.onCopy && t.element.addEventListener(\"copy\", e.onCopy), e.onCut && t.element.addEventListener(\"cut\", e.onCut), e.onPaste && t.element.addEventListener(\"paste\", e.onPaste), e.onSelect && t.element.addEventListener(\"select\", e.onSelect), e.disabled !== void 0 && t.element instanceof HTMLElement && (e.disabled ? (t.element.setAttribute(\"disabled\", \"true\"), t.element.style.pointerEvents = \"none\", t.element.style.opacity = \"0.6\") : (t.element.removeAttribute(\"disabled\"), t.element.style.pointerEvents = \"\", t.element.style.opacity = \"\")), e.draggable !== void 0 && t.element instanceof HTMLElement && (t.element.draggable = e.draggable), e.accessibilityLabel && t.element.setAttribute(\"aria-label\", e.accessibilityLabel), e.accessibilityHint && t.element.setAttribute(\"aria-describedby\", e.accessibilityHint);\n }\n}\nclass I extends y {\n constructor() {\n super(...arguments), l(this, \"type\", \"animation\"), l(this, \"priority\", g.ANIMATION);\n }\n apply(i, t) {\n if (!t.element) return;\n const e = this.properties;\n if (e.transition) {\n const n = e.transition, r = n.property || \"all\", o = n.duration || 300, a = n.easing || \"ease\", s = n.delay || 0;\n t.element instanceof HTMLElement && (t.element.style.transition = `${r} ${o}ms ${a} ${s}ms`);\n }\n if (e.animation && t.element instanceof HTMLElement) {\n const n = e.animation;\n if (n.keyframes) {\n const r = `tachui-animation-${t.componentId}-${Date.now()}`, o = this.createKeyframeRule(\n r,\n n.keyframes\n );\n this.addKeyframesToStylesheet(o);\n const a = n.duration || 1e3, s = n.easing || \"ease\", f = n.iterations || 1, c = n.direction || \"normal\";\n t.element.style.animation = `${r} ${a}ms ${s} ${f} ${c}`;\n }\n }\n if (e.transform && t.element instanceof HTMLElement && (p(e.transform) || v(e.transform) ? h(() => {\n const n = e.transform();\n t.element instanceof HTMLElement && (t.element.style.transform = n);\n }) : t.element.style.transform = e.transform), e.scaleEffect && t.element instanceof HTMLElement) {\n const { x: n, y: r, anchor: o } = e.scaleEffect, a = r ?? n, f = {\n center: \"50% 50%\",\n top: \"50% 0%\",\n topLeading: \"0% 0%\",\n topTrailing: \"100% 0%\",\n bottom: \"50% 100%\",\n bottomLeading: \"0% 100%\",\n bottomTrailing: \"100% 100%\",\n leading: \"0% 50%\",\n trailing: \"100% 50%\"\n }[o || \"center\"] || \"50% 50%\";\n t.element.style.transformOrigin = f;\n const c = `scale(${n}, ${a})`, b = (t.element.style.transform || \"\").replace(/\\s*scale[XYZ3d]*\\([^)]*\\)\\s*/g, \" \").replace(/\\s+/g, \" \").trim(), C = b ? `${b} ${c}`.trim() : c;\n t.element.style.transform = C;\n }\n }\n createKeyframeRule(i, t) {\n let e = `@keyframes ${i} {\n`;\n for (const [n, r] of Object.entries(t)) {\n e += ` ${n} {\n`;\n for (const [o, a] of Object.entries(r)) {\n const s = this.toCSSProperty(o);\n e += ` ${s}: ${a};\n`;\n }\n e += ` }\n`;\n }\n return e += \"}\", e;\n }\n addKeyframesToStylesheet(i) {\n let t = document.querySelector(\n \"#tachui-animations\"\n );\n t || (t = document.createElement(\"style\"), t.id = \"tachui-animations\", document.head.appendChild(t)), t.appendChild(document.createTextNode(i));\n }\n}\nclass R extends y {\n constructor() {\n super(...arguments), l(this, \"type\", \"lifecycle\"), l(this, \"priority\", g.CUSTOM), l(this, \"activeAbortController\");\n }\n apply(i, t) {\n if (!t.element) return;\n const e = this.properties;\n this.activeAbortController && this.activeAbortController.abort(), e.task && this.setupTask(t, e.task), (e.onAppear || e.onDisappear) && this.setupViewportObserver(t, e);\n }\n setupTask(i, t) {\n if (!t) return;\n this.activeAbortController = new AbortController();\n const { signal: e } = this.activeAbortController;\n (async () => {\n try {\n if (e.aborted) return;\n const r = t.operation();\n r instanceof Promise && await r;\n } catch (r) {\n if (e.aborted) return;\n console.error(\"TachUI Task Error:\", r);\n }\n })(), this.addCleanup(() => {\n this.activeAbortController && this.activeAbortController.abort();\n });\n }\n setupViewportObserver(i, t) {\n if (!i.element) return;\n const e = new IntersectionObserver((n) => {\n n.forEach((r) => {\n r.isIntersecting && t.onAppear ? t.onAppear() : !r.isIntersecting && t.onDisappear && t.onDisappear();\n });\n });\n e.observe(i.element), this.addCleanup(() => {\n e.disconnect();\n });\n }\n addCleanup(i) {\n this.properties._cleanupFunctions || (this.properties._cleanupFunctions = []), this.properties._cleanupFunctions.push(i);\n }\n}\nclass D extends y {\n constructor() {\n super(...arguments), l(this, \"type\", \"resizable\"), l(this, \"priority\", g.APPEARANCE);\n }\n apply(i, t) {\n t.element && t.element instanceof HTMLImageElement && (t.element.style.objectFit = \"fill\");\n }\n}\nexport {\n I as AnimationModifier,\n $ as AppearanceModifier,\n y as BaseModifier,\n H as InteractionModifier,\n k as LayoutModifier,\n R as LifecycleModifier,\n D as ResizableModifier\n};\n","/**\n * Viewport Lifecycle Modifiers\n *\n * Modifiers for detecting when elements enter and leave the viewport\n * using IntersectionObserver API.\n */\n\nimport { BaseModifier } from '@tachui/core/modifiers/base'\nimport type { ModifierContext } from '@tachui/core/modifiers/types'\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport type { ViewportLifecycleOptions } from './types'\n\nexport class ViewportLifecycleModifier extends BaseModifier<ViewportLifecycleOptions> {\n readonly type = 'viewportLifecycle'\n readonly priority = 100 // High priority for lifecycle events\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n if (this.properties.onAppear || this.properties.onDisappear) {\n this.setupLifecycleObserver(context.element, this.properties)\n }\n\n return undefined\n }\n\n private setupLifecycleObserver(\n element: Element,\n props: ViewportLifecycleOptions\n ): void {\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting && props.onAppear) {\n // Element has appeared in viewport\n props.onAppear()\n } else if (!entry.isIntersecting && props.onDisappear) {\n // Element has disappeared from viewport\n props.onDisappear()\n }\n })\n },\n {\n threshold: 0.1, // Trigger when 10% of element is visible\n rootMargin: '10px', // Add some margin for better UX\n }\n )\n\n observer.observe(element)\n\n // Note: Cleanup would need to be integrated with the component's cleanup system\n // For now, the observer will be cleaned up when the element is removed from DOM\n }\n}\n\n/**\n * Modifier that triggers when an element enters the viewport\n *\n * @param handler - Function to call when element becomes visible\n * @returns ViewportLifecycleModifier\n *\n * @example\n * ```typescript\n * VStack({ children: [] })\n * .modifier.onAppear(() => console.log('Element is now visible'))\n * .build()\n * ```\n */\nexport function onAppear(handler: () => void): ViewportLifecycleModifier {\n return new ViewportLifecycleModifier({ onAppear: handler })\n}\n\n/**\n * Modifier that triggers when an element leaves the viewport\n *\n * @param handler - Function to call when element becomes hidden\n * @returns ViewportLifecycleModifier\n *\n * @example\n * ```typescript\n * VStack({ children: [] })\n * .modifier.onDisappear(() => console.log('Element is now hidden'))\n * .build()\n * ```\n */\nexport function onDisappear(handler: () => void): ViewportLifecycleModifier {\n return new ViewportLifecycleModifier({ onDisappear: handler })\n}\n","/**\n * TachUI Viewport Management System\n *\n * SwiftUI-inspired window and viewport management for web, desktop, and mobile platforms.\n * Provides consistent APIs across different runtime environments.\n */\n\nimport {\n App,\n ExampleScenes,\n Window,\n WindowGroup,\n WindowUtils,\n} from './components'\nimport { useDismissWindow, useOpenWindow, useViewportInfo } from './environment'\n// Import everything we need for re-export\nimport {\n disposeViewportManager,\n getViewportManager,\n setViewportManager,\n TachUIViewportManager,\n} from './viewport-manager'\n\n// Platform detection utilities\nexport {\n checkFeatureSupport,\n createCapabilityChecker,\n detectViewportEnvironment,\n getBrowserInfo,\n getOSInfo,\n} from './platform-detection'\n// Core types and interfaces\nexport type {\n ViewportAdapter,\n ViewportCapabilities,\n ViewportEnvironment,\n ViewportEnvironmentValues,\n ViewportEvents,\n ViewportInstance,\n ViewportManager,\n ViewportPlatformConfig,\n ViewportState,\n ViewportType,\n WindowConfig,\n WindowMessage,\n WindowOptions,\n} from './types'\n\n// Core viewport manager\nexport {\n TachUIViewportManager,\n getViewportManager,\n setViewportManager,\n disposeViewportManager,\n}\n\n// Platform adapters\nexport { WebViewportAdapter } from './adapters/web-adapter'\nexport type {\n AppComponent,\n AppSceneProps,\n WindowGroupComponent,\n WindowGroupProps,\n WindowProps,\n WindowScene,\n WindowSceneComponent,\n} from './components'\n\n// SwiftUI-style components\nexport {\n App,\n ExampleScenes,\n Window,\n WindowGroup,\n WindowUtils,\n} from './components'\n// Environment context system\nexport {\n createWindowAwareComponent,\n EnvironmentKeys,\n getEnvironmentValue,\n useCurrentWindow,\n useDismissWindow,\n useOpenWindow,\n useViewportEnvironment,\n useViewportInfo,\n useViewportManager,\n ViewportEnvironmentProvider,\n withViewportEnvironment,\n} from './environment'\n\n// Viewport modifiers\nexport * from './modifiers'\n\n/**\n * Convenience re-exports for common usage patterns\n */\n\n// Environment hooks (SwiftUI-style)\nexport {\n useDismissWindow as useEnvironmentDismissWindow,\n useOpenWindow as useEnvironmentOpenWindow,\n} from './environment'\n\n/**\n * Default exports for common scenarios\n */\nexport const Viewport = {\n // Manager\n getManager: getViewportManager,\n\n // Environment\n useOpenWindow,\n useDismissWindow,\n useViewportInfo,\n\n // Components\n Window,\n WindowGroup,\n App,\n\n // Utilities\n Utils: WindowUtils,\n Examples: ExampleScenes,\n}\n\n/**\n * Initialize TachUI Viewport System\n *\n * Call this once during app initialization to set up the viewport management system.\n */\nexport function initializeViewportSystem(options?: {\n customAdapter?: import('./types').ViewportAdapter\n platformConfig?: Partial<import('./types').ViewportPlatformConfig>\n}): TachUIViewportManager {\n const manager = new TachUIViewportManager(options?.customAdapter)\n setViewportManager(manager)\n return manager\n}\n\n/**\n * Type guards for viewport instances\n */\nexport const ViewportTypeGuards = {\n isWindow: (\n viewport: import('./types').ViewportInstance\n ): viewport is import('./types').ViewportInstance & { type: 'window' } =>\n viewport.type === 'window',\n\n isModal: (\n viewport: import('./types').ViewportInstance\n ): viewport is import('./types').ViewportInstance & { type: 'modal' } =>\n viewport.type === 'modal',\n\n isPortal: (\n viewport: import('./types').ViewportInstance\n ): viewport is import('./types').ViewportInstance & { type: 'portal' } =>\n viewport.type === 'portal',\n\n isSheet: (\n viewport: import('./types').ViewportInstance\n ): viewport is import('./types').ViewportInstance & { type: 'sheet' } =>\n viewport.type === 'sheet',\n\n isPopover: (\n viewport: import('./types').ViewportInstance\n ): viewport is import('./types').ViewportInstance & { type: 'popover' } =>\n viewport.type === 'popover',\n}\n\n/**\n * Platform-specific utilities\n */\nexport const PlatformUtils = {\n /**\n * Check if running in Electron\n */\n isElectron: () => {\n const manager = getViewportManager()\n return manager.environment.platform === 'electron'\n },\n\n /**\n * Check if on mobile\n */\n isMobile: () => {\n const manager = getViewportManager()\n return manager.environment.platform === 'mobile'\n },\n\n /**\n * Check if multi-window is supported\n */\n supportsMultiWindow: () => {\n const manager = getViewportManager()\n return manager.environment.capabilities.multiWindow\n },\n\n /**\n * Check if native windows are supported\n */\n supportsNativeWindows: () => {\n const manager = getViewportManager()\n return manager.environment.capabilities.nativeWindows\n },\n\n /**\n * Get optimal window type for current platform\n */\n getOptimalWindowType: (\n preferNative = false\n ): import('./types').ViewportType => {\n const manager = getViewportManager()\n return manager.getOptimalWindowType({ preferNativeWindow: preferNative })\n },\n}\n\n/**\n * Common window configurations\n */\nexport const WindowConfigs = {\n /**\n * Standard document window\n */\n document: (title?: string): import('./types').WindowOptions => ({\n title: title || 'Document',\n width: 800,\n height: 600,\n resizable: true,\n minimizable: true,\n maximizable: true,\n }),\n\n /**\n * Settings/preferences window\n */\n settings: (title?: string): import('./types').WindowOptions => ({\n title: title || 'Settings',\n width: 600,\n height: 400,\n resizable: false,\n minimizable: false,\n maximizable: false,\n modal: true,\n }),\n\n /**\n * Inspector/sidebar window\n */\n inspector: (title?: string): import('./types').WindowOptions => ({\n title: title || 'Inspector',\n width: 300,\n height: 500,\n resizable: true,\n alwaysOnTop: true,\n }),\n\n /**\n * Palette/tool window\n */\n palette: (title?: string): import('./types').WindowOptions => ({\n title: title || 'Palette',\n width: 250,\n height: 400,\n resizable: false,\n alwaysOnTop: true,\n }),\n\n /**\n * Dialog/alert window\n */\n dialog: (title?: string): import('./types').WindowOptions => ({\n title: title || 'Dialog',\n width: 400,\n height: 200,\n resizable: false,\n modal: true,\n minimizable: false,\n maximizable: false,\n }),\n\n /**\n * Fullscreen window\n */\n fullscreen: (title?: string): import('./types').WindowOptions => ({\n title: title || 'Fullscreen',\n width: (typeof window !== 'undefined' && window.screen?.width) || 1920,\n height: (typeof window !== 'undefined' && window.screen?.height) || 1080,\n resizable: false,\n minimizable: false,\n maximizable: false,\n }),\n}\n\n/**\n * Viewport management constants\n */\nexport const ViewportConstants = {\n DEFAULT_WINDOW_WIDTH: 800,\n DEFAULT_WINDOW_HEIGHT: 600,\n MIN_WINDOW_WIDTH: 300,\n MIN_WINDOW_HEIGHT: 200,\n MODAL_Z_INDEX: 1000,\n PORTAL_Z_INDEX: 999,\n ANIMATION_DURATION: 200,\n}\n"],"names":["detectViewportEnvironment","config","platform","detectPlatform","capabilities","detectCapabilities","userAgent","getUserAgent","screenSize","getScreenSize","isTouch","detectTouchSupport","isElectron","isMobile","isEmbedded","isTouchOnly","hasSmallScreen","isMobileUserAgent","hasCoarsePointer","hasSmallViewport","base","canOpenPopups","canUseBroadcastChannel","canUseMessageChannel","canUseFullscreen","testWindow","getBrowserInfo","ua","name","version","engine","match","getOSInfo","checkFeatureSupport","createCapabilityChecker","environment","preferNative","ViewportAdapter","_config","WebViewportAdapter","__publicField","windowId","portal","modal","popup","event","handleStorage","message","_excludeWindow","messageData","WebPopupInstance","WebModalInstance","WebPortalInstance","container","styleId","style","state","setState","createSignal","_component","features","prevState","handler","_handler","handlers","checkClosed","prev","_key","_value","error","_callback","_tabContainer","index","parent","_child","_childId","_message","key","value","callbacks","callback","child","tabContainer","childId","tabHeader","component","cleanup","mountComponentTree","TachUIViewportManager","adapter","id","options","existingWindow","window","groupId","group","TachUIWindowGroup","checker","data","bounds","originGroupId","windowPromises","manager","dataType","dataKey","componentInstance","oldestWindow","closePromises","max","strategy","scope","windows","now","toRemove","metadata","bestWindow","bestScore","age","score","windowState","win","offset","screenWidth","screenHeight","cols","rows","windowWidth","windowHeight","col","row","_windows","args","globalViewportManager","getViewportManager","setViewportManager","disposeViewportManager","Window","props","wrappedComponent","createRoot","withComponentContext","_","WindowGroup","_groupingStrategy","_tabConfig","_poolConfig","_stateSyncScope","_maxInstances","windowOptions","App","initializeViewportSystem","scene","WindowUtils","title","documentType","content","ExampleScenes","doc","ViewportEnvironmentContext","createContext","ViewportEnvironmentProvider","children","viewportManager","environmentValues","useViewportEnvironment","context","useContext","useOpenWindow","openWindow","useDismissWindow","dismissWindow","useViewportInfo","viewportEnvironment","useCurrentWindow","currentWindow","useViewportManager","withViewportEnvironment","Component","createWindowAwareComponent","EnvironmentKeys","getEnvironmentValue","s","r","P","T","t","u","O","h","a","I","N","V","n","U","W","q","L","G","J","b","M","K","ve","w","X","Y","c","g","Z","k","m","i","o","l","ee","te","p","se","v","Ne","x","re","$","ne","oe","y","z","e","f","ViewportLifecycleModifier","BaseModifier","_node","element","entries","entry","onAppear","onDisappear","Viewport","ViewportTypeGuards","viewport","PlatformUtils","WindowConfigs","ViewportConstants"],"mappings":"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"}
|