@alekstar79/draggable-resizable-container 1.0.0
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 +21 -0
- package/README.md +265 -0
- package/dist/LICENSE +21 -0
- package/dist/README.md +265 -0
- package/dist/core/ContainerManager.d.ts +298 -0
- package/dist/core/types.d.ts +130 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.es.js +970 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +9 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/package.json +89 -0
- package/dist/plugins/EdgeDockingPlugin.d.ts +112 -0
- package/dist/plugins/LoggingPlugin.d.ts +53 -0
- package/dist/plugins/SnappingPlugin.d.ts +70 -0
- package/dist/plugins/StatePersistencePlugin.d.ts +159 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/utils/BoundaryTracker.d.ts +155 -0
- package/dist/utils/ContainerInitializer.d.ts +9 -0
- package/dist/utils/ContentCreator.d.ts +22 -0
- package/dist/utils/Notifications.d.ts +29 -0
- package/dist/utils/StatsManager.d.ts +51 -0
- package/dist/utils/TemplateLoader.d.ts +24 -0
- package/dist/utils/helpers.d.ts +31 -0
- package/dist/utils/index.d.ts +13 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/utils/Notifications.ts","../src/utils/ContainerInitializer.ts","../src/utils/ContentCreator.ts","../node_modules/@alekstar79/template-loader/dist/index.es.js","../src/utils/helpers.ts","../src/core/ContainerManager.ts"],"sourcesContent":["// src/utils/notifications.ts\n\n/**\n * Notification system for displaying toast messages\n * Adapted for TypeScript with improved functionality\n */\nexport class NotificationSystem\n{\n private container: HTMLElement\n\n constructor(container?: HTMLElement)\n {\n this.container = container || this.createContainer()\n }\n\n /**\n * Create notifications container\n */\n private createContainer(): HTMLElement\n {\n const existingContainer = document.querySelector('.notifications') as HTMLElement\n if (existingContainer) {\n return existingContainer\n }\n\n const container = document.createElement('div')\n container.className = 'notifications'\n document.body.appendChild(container)\n return container\n }\n\n /**\n * Show notification toast\n */\n show(text: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): void\n {\n const toast = document.createElement('li')\n const remove = this.removeToast.bind(this, toast)\n\n toast.innerHTML = this.getToastHTML(text, type)\n toast.className = `toast ${type}`;\n\n (toast as any).timeoutId = window.setTimeout(remove, 4000)\n\n const closeIcon = toast.querySelector('.icon')\n if (closeIcon) {\n closeIcon.addEventListener('click', remove)\n }\n\n // Add new toast to the bottom of the container\n this.container.appendChild(toast)\n }\n\n /**\n * Generate toast HTML based on type\n */\n private getToastHTML(text: string, type: 'success' | 'error' | 'warning' | 'info'): string\n {\n const icons = {\n success: 'fa-circle-check',\n error: 'fa-circle-xmark',\n warning: 'fa-triangle-exclamation',\n info: 'fa-circle-info'\n }\n\n return `\n <div class=\"column\">\n <i class=\"fa-solid ${icons[type]}\"></i>\n <span>${text}</span>\n </div>\n <i class=\"icon fa-solid fa-xmark\"></i>\n `\n }\n\n /**\n * Remove toast with animation\n */\n private removeToast(toast: HTMLLIElement): void\n {\n toast.classList.add('hide')\n\n // Use any for timeoutId property\n if ((toast as any).timeoutId) {\n clearTimeout((toast as any).timeoutId)\n }\n\n setTimeout(() => {\n if (toast.parentNode) {\n toast.parentNode.removeChild(toast)\n }\n }, 300)\n }\n\n /**\n * Clear all notifications\n */\n clear(): void\n {\n while (this.container.firstChild) {\n this.container.removeChild(this.container.firstChild)\n }\n }\n}\n\n// Default instance for convenience\nexport const defaultNotificationSystem = new NotificationSystem()\n","// src/utils/ContainerInitializer.ts\n\n/**\n * Utility for proper container initialization and state synchronization\n */\nexport class ContainerInitializer\n{\n /**\n * Create container element with proper initialization\n */\n static createContainerElement(\n width: number,\n height: number,\n x?: number,\n y?: number,\n color?: string\n ): HTMLElement {\n const container = document.createElement('div')\n container.className = 'container advanced-container new'\n\n container.style.position = 'absolute'\n container.style.width = `${width}px`\n container.style.height = `${height}px`\n\n if (x !== undefined) container.style.left = `${x}px`\n if (y !== undefined) container.style.top = `${y}px`\n if (color) container.style.borderColor = color\n\n return container\n }\n}\n","import { TemplateLoader } from './index'\n\n/**\n * Content creator utility for flexible content handling\n * Supports strings, DOM elements, and template loading\n */\nexport class ContentCreator\n{\n private templateLoader: TemplateLoader\n\n constructor(templateLoader: TemplateLoader)\n {\n this.templateLoader = templateLoader\n }\n\n /**\n * Create content from various sources\n * @param content - String, HTMLElement, or template name\n * @param container - Container element to append content to\n */\n async createContent(\n content: string | HTMLElement | { template: string },\n container: HTMLElement\n ): Promise<HTMLElement> {\n try {\n // Checking if the container is already container-content\n const isAlreadyContentContainer = container.classList.contains('container-content')\n\n // Find or create a target element for your content\n let targetElement: HTMLElement\n\n if (isAlreadyContentContainer) {\n // If the container is already a container-content, use it directly\n targetElement = container\n } else {\n // Searching for existing container-content inside a container\n targetElement = container.querySelector('.container-content') as HTMLElement\n\n if (!targetElement) {\n targetElement = document.createElement('div')\n targetElement.className = 'container-content'\n container.appendChild(targetElement)\n }\n }\n\n targetElement.innerHTML = ''\n\n if (typeof content === 'string') {\n // String content\n targetElement.innerHTML = content\n } else if (content instanceof HTMLElement) {\n // DOM element\n targetElement.appendChild(content)\n } else if (content.template) {\n // Template content\n try {\n targetElement.innerHTML = await this.templateLoader.loadTemplate(content.template)\n } catch (error) {\n console.error(`[ContentCreator] Failed to load template: ${content.template}`, error)\n targetElement.innerHTML = `<div class=\"template-error\">Failed to load template: ${content.template}</div>`\n }\n }\n\n return targetElement\n } catch (error) {\n console.error('[ContentCreator] Error creating content:', error)\n throw error\n }\n }\n\n /**\n * Set template loader instance\n */\n setTemplateLoader(loader: TemplateLoader): void\n {\n this.templateLoader = loader\n }\n}\n","var t=Object.defineProperty,e=(e,r,s)=>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[r]=s,r=(t,r,s)=>e(t,\"symbol\"!=typeof r?r+\"\":r,s);class s{constructor(){r(this,\"templates\",new Map),r(this,\"lastUpdated\",new Map)}register(t){if(!t.name.trim())throw new Error(\"Template name cannot be empty\");this.templates.set(t.name,t),this.lastUpdated.set(t.name,Date.now())}async registerBulk(t){for(const[e,r]of Object.entries(t))this.register({name:e,source:r})}get(t){return this.templates.get(t)}has(t){return this.templates.has(t)}remove(t){this.templates.delete(t),this.lastUpdated.delete(t)}list(){return Array.from(this.templates.keys())}clear(){this.templates.clear(),this.lastUpdated.clear()}getMetadata(t){return this.templates.get(t)?.metadata}}class a{constructor(t=36e5){r(this,\"cache\",new Map),r(this,\"ttl\"),this.ttl=t}set(t,e){this.cache.set(t,{content:e,timestamp:Date.now()})}get(t){const e=this.cache.get(t);return e?this.ttl<=0||Date.now()-e.timestamp>this.ttl?(this.cache.delete(t),null):e.content:null}has(t){return null!==this.get(t)}clear(){this.cache.clear()}size(){return this.cache.size}}class i{constructor(t,e={}){r(this,\"cache\"),r(this,\"config\"),r(this,\"metrics\"),r(this,\"retryQueue\",new Map),r(this,\"registry\"),this.registry=t??new s,this.cache=new a(e?.cacheTTL),this.config=this.normalizeConfig(e),this.metrics={totalLoads:0,totalHits:0,totalMisses:0,totalErrors:0,averageLoadTime:0,cacheHitRate:0}}normalizeConfig(t={}){const e=t||{};return{environment:\"auto\"===e.environment?typeof process<\"u\"&&\"production\"===process.env?.NODE_ENV?\"production\":\"development\":e.environment??\"development\",cache:e.cache??!0,cacheTTL:e.cacheTTL??36e5,enableMetrics:e.enableMetrics??!0,onError:e.onError??(()=>{}),onWarn:e.onWarn??(()=>{}),fallbackTemplate:e.fallbackTemplate??'<div class=\"template-error\">Template load failed</div>'}}async loadTemplate(t,e=2){const r=performance.now(),s=this.retryQueue.get(t)??0;if(this.metrics.totalLoads++,this.config.cache){const e=this.cache.get(t);if(e)return this.metrics.totalHits++,this.updateCacheHitRate(),e}this.metrics.totalMisses++;const a=this.registry.get(t);if(!a){const e=this.createError(`Template \"${t}\" not found. Available: ${this.registry.list().join(\", \")}`,t,s);return this.metrics.totalErrors++,this.config.onError(e),this.config.fallbackTemplate}try{let e=\"function\"==typeof a.source?await a.source():a.source;if(\"string\"!=typeof e){const r=this.createError(\"Template source must return a string, got \"+typeof e,t,s);return this.metrics.totalErrors++,this.config.onError(r),this.config.fallbackTemplate}return this.config.cache&&this.cache.set(t,e),this.retryQueue.delete(t),this.recordLoadTime(r),e}catch(r){const a=r instanceof Error?r:new Error(String(r));if(s<e)return this.retryQueue.set(t,s+1),this.config.onWarn(`Retrying template \"${t}\" (attempt ${s+1}/${e})`),await new Promise(t=>setTimeout(t,100*Math.pow(2,s))),this.loadTemplate(t,e);const i=this.createError(`Failed to load template \"${t}\": ${a.message}`,t,s);return this.metrics.totalErrors++,this.config.onError(i),this.retryQueue.delete(t),this.config.fallbackTemplate}}async loadTemplates(t){const e={};return await Promise.all(t.map(async t=>{e[t]=await this.loadTemplate(t)})),e}getMetrics(){return{...this.metrics}}clearCache(){this.cache.clear()}resetMetrics(){this.metrics={totalLoads:0,totalHits:0,totalMisses:0,totalErrors:0,averageLoadTime:0,cacheHitRate:0}}has(t){return this.registry.has(t)}list(){return this.registry.list()}info(t){return this.registry.get(t)}createError(t,e,r){return Object.assign(new Error(t),{name:\"TemplateLoadError\",templateName:e,timestamp:new Date,retryCount:r})}recordLoadTime(t){if(this.config.enableMetrics){const e=performance.now()-t,r=this.metrics.averageLoadTime*(this.metrics.totalLoads-1)+e;this.metrics.averageLoadTime=r/this.metrics.totalLoads}}updateCacheHitRate(){this.config.enableMetrics&&(this.metrics.cacheHitRate=this.metrics.totalHits/this.metrics.totalLoads)}}function o(){const t=new s;return new i(t,{environment:\"production\",cache:!0,cacheTTL:36e5,enableMetrics:!1,onWarn:t=>{},onError:t=>{}})}export{a as TemplateCache,i as TemplateLoader,s as TemplateRegistry,o as createTemplateLoader};","// src/utuls/dom.ts\n\nexport interface StateInterface {\n zIndex(uid: string): string;\n push(uid: string): this;\n remove(uid: string): this;\n sort(uid: string): this;\n}\n\nexport class State implements StateInterface\n{\n static inatance: StateInterface\n\n static highestZIndex = 1000\n\n static init = () => State.inatance ??= new State()\n\n private draggable: string[] = []\n\n zIndex(uid: string): string\n {\n return `${State.highestZIndex + this.draggable.findIndex(id => id === uid)}`\n }\n\n push(uid: string): this\n {\n this.draggable = [...new Set<string>([...this.draggable, uid])]\n\n return this\n }\n\n remove(uid: string): this\n {\n this.draggable = this.draggable.filter(id => id !== uid)\n\n return this\n }\n\n sort(uid: string): this\n {\n this.draggable.sort(($1: number | string, $2: number | string) => {\n return $1 === uid ? 1 : $2 === uid ? -1 : 0\n })\n\n return this\n }\n}\n\n/**\n * Check if element is within viewport boundaries\n */\nexport function isInViewport(element: HTMLElement): boolean\n{\n const rect = element.getBoundingClientRect()\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\n/**\n * Get viewport dimensions\n */\nexport function getViewportDimensions(): { width: number; height: number }\n{\n return {\n width: window.innerWidth || document.documentElement.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight\n }\n}\n\n/**\n * @returns {State} - Класс вычисляющий z-index позиции контейнеров\n */\nexport function getState(): StateInterface\n{\n return State.init()\n}\n","// src/core/ContainerManager.ts\n\nimport ReactiveEventSystem from '@alekstar79/reactive-event-system'\nimport { computed, effect, reactive } from '@alekstar79/reactive-event-system'\nimport { clamp, deepMerge } from '@alekstar79/utility'\n\nimport { getState, getViewportDimensions } from '../utils'\nimport type { StateInterface } from '../utils'\n\nimport {\n AutoAdjustConfig,\n Boundaries,\n ContainerManagerInterface,\n Plugin,\n ContainerConfig,\n ContainerEvent,\n ContainerState,\n DirectionMode,\n MovementMode,\n PluginMiddleware,\n ResizeConfig,\n ResizeDirection\n} from './types'\n\n/**\n * Main container management class for drag and resize operations\n * Implements ContainerManagerInterface for plugin compatibility\n * Now with reactive state management using @alekstar79/reactivity\n */\nexport class ContainerManager implements ContainerManagerInterface\n{\n private static MINWIDTH: number = 200\n private static MINHEIGHT: number = 45\n\n // Streams for reactive event handling\n private dragStream: ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n private resizeStream: ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n private readonly stateChangeStream: ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n private readonly eventEmitter: ReactiveEventSystem<ContainerEvent>\n private readonly pluginEventEmitter: ReactiveEventSystem\n\n private readonly config: ContainerConfig\n private readonly container: HTMLElement\n private dragHandle!: HTMLElement\n private resizeHandles: Map<ResizeDirection, HTMLElement> = new Map()\n private installedPlugins: Set<Plugin> = new Set()\n private reactiveEffects: (() => void)[] = []\n\n private isDragging: boolean = false\n private isResizing: boolean = false\n private resizeDirection: ResizeDirection | null = null\n private startX: number = 0\n private startY: number = 0\n private startState: ContainerState\n private resizeObserver: ResizeObserver | null = null\n private parentResizeObserver: ResizeObserver | null = null\n public zIndexState: StateInterface\n\n private reactiveState = reactive({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n mode: 'smooth' as MovementMode,\n draggingDirection: 'all' as DirectionMode\n })\n\n // Computed state with applied constraints\n private constrainedState = computed(() => {\n const state = this.reactiveState\n\n if (!this.config) return { ...state }\n\n let constrained: ContainerState = { ...state }\n\n // Apply boundaries constraints\n const { boundaries } = this.config\n constrained.width = clamp(\n state.width,\n boundaries.minWidth || ContainerManager.MINWIDTH,\n boundaries.maxWidth || Infinity\n )\n constrained.height = clamp(\n state.height,\n boundaries.minHeight || ContainerManager.MINHEIGHT,\n boundaries.maxHeight || Infinity\n )\n\n // Apply viewport constraints if needed\n if (this.shouldConstrainToViewport()) {\n const viewport = getViewportDimensions()\n constrained.x = clamp(state.x, 0, viewport.width - constrained.width)\n constrained.y = clamp(state.y, 0, viewport.height - constrained.height)\n }\n\n // Apply parent constraints if enabled\n if (this.config?.constrainToParent) {\n constrained = this.constrainToParent(constrained)\n }\n\n return constrained\n })\n\n // Automatic DOM updates with reactive effect\n private domUpdateEffect = effect(() => {\n const state = this.constrainedState.value\n\n if (!this.container) return\n\n this.container.style.left = `${state.x}px`\n this.container.style.top = `${state.y}px`\n this.container.style.width = `${state.width}px`\n this.container.style.height = `${state.height}px`\n\n this.eventEmitter?.emit('stateChange', {\n type: 'stateChange',\n state: { ...state },\n mode: this.reactiveState.mode,\n element: this.container\n })\n })\n\n /**\n * Create a new container manager instance with reactive state management\n * @param container - HTML element to manage\n * @param config - Configuration options\n */\n constructor(container: HTMLElement, config: Partial<ContainerConfig> = {})\n {\n this.config = deepMerge<ContainerConfig>({\n _uid: '',\n mode: 'smooth',\n constrainToViewport: false,\n draggingDirection: 'all',\n constrainToParent: false,\n boundaries: {\n minWidth: ContainerManager.MINWIDTH,\n minHeight: ContainerManager.MINHEIGHT\n },\n autoAdjust: {\n enabled: false,\n width: false,\n height: false\n },\n resize: {\n enabled: true,\n directions: ['se']\n }\n }, config)\n\n this.container = container\n this.zIndexState = getState()\n\n // Initialize reactive state from DOM\n const currentState = this.getCurrentState()\n this.reactiveState.x = currentState.x\n this.reactiveState.y = currentState.y\n this.reactiveState.width = currentState.width\n this.reactiveState.height = currentState.height\n this.reactiveState.mode = this.config.mode\n this.reactiveState.draggingDirection = this.config.draggingDirection\n\n // Initialize enhanced event emitters with metrics\n this.eventEmitter = new ReactiveEventSystem<ContainerEvent>({ enableMetrics: true })\n this.pluginEventEmitter = new ReactiveEventSystem({ enableMetrics: true })\n\n // Create reactive streams for common events\n this.stateChangeStream = this.eventEmitter.stream('stateChange')\n this.dragStream = this.eventEmitter.stream('drag')\n this.resizeStream = this.eventEmitter.stream('resize')\n\n this.startState = this.getState()\n\n this.setupEventMiddleware()\n this.initializeHandles()\n this.bindEvents()\n this.setupResizeObservers()\n this.setupReactiveMonitoring()\n }\n\n /**\n * Set up ResizeObserver to track viewport and parent size changes\n */\n private setupResizeObservers(): void\n {\n // Setup viewport resize observer if viewport constraints should be applied\n if (this.shouldConstrainToViewport()) {\n this.setupViewportResizeObserver()\n }\n\n // Setup parent element observer if auto-adjust is enabled\n if (this.config.autoAdjust?.enabled) {\n this.setupParentResizeObserver()\n }\n }\n\n /**\n * Determine if viewport constraints should be applied\n */\n private shouldConstrainToViewport(): boolean\n {\n return !this.config.constrainToParent || this.config.constrainToViewport\n }\n\n /**\n * Set up ResizeObserver to track viewport size changes\n */\n private setupViewportResizeObserver(): void\n {\n let rAFTimeout: number | null = null\n\n this.resizeObserver = new ResizeObserver(() => {\n rAFTimeout && cancelAnimationFrame(rAFTimeout)\n rAFTimeout = requestAnimationFrame(() => {\n this.handleViewportResize()\n })\n })\n\n this.resizeObserver.observe(document.body)\n }\n\n /**\n * Handle viewport resize event with reactive state updates\n */\n private handleViewportResize(): void\n {\n if (!this.shouldConstrainToViewport()) return\n\n const viewport = getViewportDimensions()\n const currentState = this.getState()\n const newState = { ...currentState }\n\n let needsUpdate = false\n\n // Check if container is outside viewport on right edge\n if (newState.x + newState.width > viewport.width) {\n newState.x = Math.max(0, viewport.width - newState.width)\n needsUpdate = true\n }\n\n // Check if container is outside viewport on bottom edge\n if (newState.y + newState.height > viewport.height) {\n newState.y = Math.max(0, viewport.height - newState.height)\n needsUpdate = true\n }\n\n // Check if container is outside viewport on left edge\n if (newState.x < 0) {\n newState.x = 0\n needsUpdate = true\n }\n\n // Check if container is outside viewport on top edge\n if (newState.y < 0) {\n newState.y = 0\n needsUpdate = true\n }\n\n if (needsUpdate) {\n this.setState(newState)\n\n this.eventEmitter.emit('viewportResize', {\n type: 'viewportResize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n }\n\n /**\n * Set up ResizeObserver for parent element auto-adjustment\n */\n private setupParentResizeObserver(): void\n {\n const parentElement = this.container.parentElement\n if (!parentElement) return\n\n this.parentResizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n this.handleParentResize(entry)\n }\n })\n\n this.parentResizeObserver.observe(parentElement)\n }\n\n /**\n * Handle parent element resize for auto-adjustment with reactive updates\n */\n private handleParentResize(entry: ResizeObserverEntry): void\n {\n const { autoAdjust } = this.config\n if (!autoAdjust?.enabled) return\n\n const parentRect = entry.contentRect\n const currentState = this.getState()\n const newState = { ...currentState }\n\n let needsUpdate = false\n\n if (autoAdjust.width) {\n const maxWidth = this.getMaxWidthConstraint()\n const newWidth = Math.min(parentRect.width, maxWidth)\n\n if (Math.abs(newState.width - newWidth) > 1) {\n newState.width = newWidth\n needsUpdate = true\n }\n }\n\n if (autoAdjust.height) {\n const maxHeight = this.getMaxHeightConstraint()\n const newHeight = Math.min(parentRect.height, maxHeight)\n\n if (Math.abs(newState.height - newHeight) > 1) {\n newState.height = newHeight\n needsUpdate = true\n }\n }\n\n if (needsUpdate) {\n this.setState(newState)\n\n this.eventEmitter.emit('autoAdjust', {\n type: 'autoAdjust',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n }\n\n /**\n * Initialize drag and resize handles based on configuration\n */\n private initializeHandles(): void\n {\n this.initializeDragHandle()\n\n if (this.config.resize?.enabled) {\n this.initializeResizeHandles()\n }\n }\n\n /**\n * Initialize drag handle\n */\n private initializeDragHandle(): void\n {\n this.dragHandle = this.container.querySelector('[data-drag-handle]') as HTMLElement\n if (!this.dragHandle) {\n this.dragHandle = document.createElement('div')\n this.dragHandle.className = 'drag-handle'\n this.dragHandle.setAttribute('data-drag-handle', 'true')\n this.dragHandle.setAttribute('oncontextmenu', 'return false')\n this.container.prepend(this.dragHandle)\n } else {\n this.dragHandle.setAttribute('oncontextmenu', 'return false')\n }\n }\n\n /**\n * Initialize resize handles for all configured directions\n */\n private initializeResizeHandles(): void\n {\n const directions = this.config.resize?.directions || ['se']\n\n directions.forEach(direction => {\n const handle = this.createResizeHandle(direction)\n this.resizeHandles.set(direction, handle)\n this.container.appendChild(handle)\n })\n }\n\n /**\n * Create individual resize handle for specific direction\n */\n private createResizeHandle(direction: ResizeDirection): HTMLElement\n {\n const handle = document.createElement('div')\n handle.className = `resize-handle resize-${direction}`\n handle.setAttribute('data-resize-handle', direction)\n handle.setAttribute('data-resize-direction', direction)\n\n // Add context menu prevention for resize handles\n handle.addEventListener('contextmenu', this.onContextMenu)\n\n this.applyResizeHandleStyles(handle, direction)\n\n return handle\n }\n\n /**\n * Apply styles and cursor for resize handle based on direction\n */\n private applyResizeHandleStyles(handle: HTMLElement, direction: ResizeDirection): void\n {\n const cursorMap: Record<ResizeDirection, string> = {\n 'n': 'ns-resize', 's': 'ns-resize', 'e': 'ew-resize', 'w': 'ew-resize',\n 'ne': 'nesw-resize', 'nw': 'nwse-resize', 'se': 'nwse-resize', 'sw': 'nesw-resize'\n }\n\n handle.style.position = 'absolute'\n handle.style.cursor = cursorMap[direction]\n\n this.positionResizeHandle(handle, direction)\n }\n\n /**\n * Position resize handle based on direction\n */\n private positionResizeHandle(handle: HTMLElement, direction: ResizeDirection): void\n {\n const size = 12\n\n switch (direction) {\n case 'n':\n handle.style.top = '0'\n handle.style.left = '0'\n handle.style.right = '0'\n handle.style.height = `${size}px`\n break\n case 's':\n handle.style.bottom = '0'\n handle.style.left = '0'\n handle.style.right = '0'\n handle.style.height = `${size}px`\n break\n case 'e':\n handle.style.right = '0'\n handle.style.top = '0'\n handle.style.bottom = '0'\n handle.style.width = `${size}px`\n break\n case 'w':\n handle.style.left = '0'\n handle.style.top = '0'\n handle.style.bottom = '0'\n handle.style.width = `${size}px`\n break\n case 'ne':\n handle.style.top = '0'\n handle.style.right = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n case 'nw':\n handle.style.top = '0'\n handle.style.left = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n case 'se':\n handle.style.bottom = '0'\n handle.style.right = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n case 'sw':\n handle.style.bottom = '0'\n handle.style.left = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n }\n }\n\n /**\n * Bind event listeners to handles\n */\n private bindEvents(): void\n {\n this.onDragStart = this.onDragStart.bind(this)\n this.onDragMove = this.onDragMove.bind(this)\n this.onDragEnd = this.onDragEnd.bind(this)\n\n this.onResizeStart = this.onResizeStart.bind(this)\n this.onResizeMove = this.onResizeMove.bind(this)\n this.onResizeEnd = this.onResizeEnd.bind(this)\n\n this.onContextMenu = this.onContextMenu.bind(this)\n\n // Only bind default drag events if no snapping plugin is installed\n if (!this.hasPluginByName('SnappingPlugin')) {\n this.dragHandle.addEventListener('mousedown', this.onDragStart)\n this.dragHandle.addEventListener('touchstart', this.onDragStart)\n }\n\n // Bind resize events for all resize handles\n if (this.config.resize?.enabled) {\n this.resizeHandles.forEach((handle, direction) => {\n handle.addEventListener('mousedown', (e) => this.onResizeStart(e, direction))\n handle.addEventListener('touchstart', (e) => this.onResizeStart(e, direction))\n })\n }\n\n // Disable context menu on drag handle\n this.dragHandle.addEventListener('contextmenu', this.onContextMenu)\n }\n\n /**\n * Apply movement mode to coordinates\n */\n private applyMovementMode(deltaX: number, deltaY: number): ContainerState\n {\n const newState = { ...this.startState }\n\n if (this.reactiveState.mode === 'smooth') {\n newState.x = this.startState.x + deltaX\n newState.y = this.startState.y + deltaY\n }\n\n return newState\n }\n\n /**\n * Calculate new state based on resize direction and deltas\n */\n private calculateResizeState(deltaX: number, deltaY: number, direction: ResizeDirection): ContainerState\n {\n const newState = { ...this.startState }\n\n switch (direction) {\n case 'e': // East - right only\n newState.width = this.startState.width + deltaX\n break\n case 'w': // West - left only\n newState.width = this.startState.width - deltaX\n newState.x = this.startState.x + deltaX\n break\n case 'n': // North - top only\n newState.height = this.startState.height - deltaY\n newState.y = this.startState.y + deltaY\n break\n case 's': // South - bottom only\n newState.height = this.startState.height + deltaY\n break\n case 'ne': // Northeast - top-right\n newState.width = this.startState.width + deltaX\n newState.height = this.startState.height - deltaY\n newState.y = this.startState.y + deltaY\n break\n case 'nw': // Northwest - top-left\n newState.width = this.startState.width - deltaX\n newState.height = this.startState.height - deltaY\n newState.x = this.startState.x + deltaX\n newState.y = this.startState.y + deltaY\n break\n case 'se': // Southeast - bottom-right\n newState.width = this.startState.width + deltaX\n newState.height = this.startState.height + deltaY\n break\n case 'sw': // Southwest - bottom-left\n newState.width = this.startState.width - deltaX\n newState.height = this.startState.height + deltaY\n newState.x = this.startState.x + deltaX\n break\n }\n\n return newState\n }\n\n /**\n * Constrain container to parent element boundaries (both position and size)\n */\n private constrainToParent(state: ContainerState): ContainerState\n {\n const parentElement = this.container.parentElement\n if (!parentElement) return state\n\n const parentRect = parentElement.getBoundingClientRect()\n\n // If the container has not yet been added to the DOM or the parent has a zero size,\n // return to the original state\n if (parentRect.width === 0 || parentRect.height === 0) {\n return state\n }\n\n // Calculating the maximum allowable coordinates\n const maxX = Math.max(0, parentRect.width - state.width)\n const maxY = Math.max(0, parentRect.height - state.height)\n\n // Calculating the maximum allowable sizes\n const maxWidth = parentRect.width - state.x\n const maxHeight = parentRect.height - state.y\n\n return {\n x: clamp(state.x, 0, maxX),\n y: clamp(state.y, 0, maxY),\n width: clamp(state.width, 0, maxWidth),\n height: clamp(state.height, 0, maxHeight)\n }\n }\n\n /**\n * Get maximum width constraint considering parent and boundaries\n */\n private getMaxWidthConstraint(): number\n {\n const { boundaries } = this.config\n let maxWidth = boundaries.maxWidth || Infinity\n\n if (this.config.constrainToParent && this.container.parentElement) {\n const parentWidth = this.container.parentElement.getBoundingClientRect().width\n maxWidth = Math.min(maxWidth, parentWidth)\n }\n\n return maxWidth\n }\n\n /**\n * Get maximum height constraint considering parent and boundaries\n */\n private getMaxHeightConstraint(): number\n {\n const { boundaries } = this.config\n let maxHeight = boundaries.maxHeight || Infinity\n\n if (this.config.constrainToParent && this.container.parentElement) {\n const parentHeight = this.container.parentElement.getBoundingClientRect().height\n maxHeight = Math.min(maxHeight, parentHeight)\n }\n\n return maxHeight\n }\n\n /**\n * Handle context menu event on drag handle\n */\n private onContextMenu(e: MouseEvent): void\n {\n e.preventDefault()\n e.stopPropagation()\n }\n\n /**\n * Check if snapping plugin is installed\n */\n private hasPluginByName(pluginName: string): boolean\n {\n return Array.from(this.installedPlugins)\n .some(plugin => plugin.constructor.name === pluginName)\n }\n\n /**\n * Get current container state from DOM\n */\n private getCurrentState(): ContainerState\n {\n const rect = this.container.getBoundingClientRect()\n const style = window.getComputedStyle(this.container)\n\n const styleWidth = parseFloat(style.width) || rect.width\n const styleHeight = parseFloat(style.height) || rect.height\n\n return {\n x: rect.left,\n y: rect.top,\n width: styleWidth,\n height: styleHeight\n }\n }\n\n /**\n * Setup event middleware for enhanced event processing\n */\n private setupEventMiddleware(): void\n {\n // Add logging middleware for all events\n this.eventEmitter.use('*', (data, event) => {\n if (typeof window !== 'undefined' && (window as any).DEBUG_CONTAINER_MANAGER) {\n console.log(`[ContainerManager] ${event}:`, data)\n }\n return data\n })\n\n // TODO Add validation middleware for drag events\n this.eventEmitter.use('dragStart', (data, _event) => {\n if (this.reactiveState.mode === 'pinned') {\n throw new Error('Cannot drag in pinned mode')\n }\n return data\n })\n\n // Add performance monitoring middleware\n this.eventEmitter.use('drag', (data, _event) => {\n // console.log(`[ContainerManager] ${event}:`, data)\n return data\n })\n }\n\n /**\n * Setup reactive monitoring for container metrics\n */\n private setupReactiveMonitoring(): void\n {\n // Monitor state changes reactively\n const stateMonitor = effect(() => {\n const { state } = this.stateChangeStream\n // Intentional side-effect-free access\n // We don't need to do anything here\n void state\n })\n\n this.reactiveEffects.push(stateMonitor)\n\n // Monitor emitter metrics\n const metricsMonitor = effect(() => {\n const metrics = this.eventEmitter.getMetrics()\n // Monitor event system health\n if (metrics.state.errorCount > 10) {\n console.warn('[ContainerManager] High error count in event system:', metrics.state.errorCount)\n }\n })\n\n this.reactiveEffects.push(metricsMonitor)\n }\n\n // Public API Implementation\n\n /**\n * Subscribe to container events\n * @param event - Event name\n * @param callback - Callback function\n */\n on(event: string, callback: (data: ContainerEvent) => void): void\n {\n this.eventEmitter.on(event, callback)\n }\n\n /**\n * Unsubscribe from container events\n * @param event - Event name\n * @param callback - Callback function\n */\n off(event: string, callback: (data: ContainerEvent) => void): void\n {\n this.eventEmitter.off(event, callback)\n }\n\n /**\n * Wait for specific container event\n * @example\n * // Wait for drag to complete\n * const dragResult = await manager.waitFor('dragEnd')\n * console.log('Drag completed:', dragResult.state)\n */\n waitFor(event: string, timeout?: number): Promise<ContainerEvent>\n {\n return this.eventEmitter.waitFor(event, timeout)\n }\n\n /**\n * Get reactive stream for specific event type\n * @example\n * // Get state change stream\n * const stateStream = manager.getStream('stateChange')\n * stateStream.subscribe((data) => {\n * console.log('State changed:', data.state)\n * })\n */\n getStream(event: string): ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n {\n return this.eventEmitter.stream(event)\n }\n\n /**\n * Pipe container events to another emitter\n * @example\n * // Pipe all events to analytics emitter\n * manager.pipe('*', analyticsEmitter)\n */\n pipe(event: string, targetEmitter: ReactiveEventSystem<ContainerEvent>, targetEvent?: string): () => void\n {\n return this.eventEmitter.pipe(event, targetEmitter, targetEvent)\n }\n\n /**\n * Get event system metrics for monitoring\n */\n getEventMetrics(): ReturnType<ReactiveEventSystem<ContainerEvent>['getMetrics']>\n {\n return this.eventEmitter.getMetrics()\n }\n\n /**\n * Plugin-specific event emission\n */\n emitPluginEvent(event: string, data: any): void\n {\n this.pluginEventEmitter.emit(event, data)\n }\n\n /**\n * Listen to plugin-specific events\n */\n onPluginEvent(event: string, listener: (data: any) => void): void\n {\n this.pluginEventEmitter.on(event, listener)\n }\n\n /**\n * Remove plugin event listener\n */\n offPluginEvent(event: string, listener: (data: any) => void): void\n {\n this.pluginEventEmitter.off(event, listener)\n }\n\n /**\n * Add middleware for plugin events\n */\n usePluginMiddleware(event: string, middleware: PluginMiddleware): () => void\n {\n return this.pluginEventEmitter.use(event, middleware)\n }\n\n /**\n * Handle drag start event\n */\n onDragStart(e: MouseEvent | TouchEvent): void\n {\n // Don't allow dragging in pinned mode\n if (this.reactiveState.mode === 'pinned') return\n\n e.preventDefault()\n this.bringToFront()\n\n this.isDragging = true\n\n const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX\n const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n\n this.startX = clientX\n this.startY = clientY\n this.startState = this.getState()\n\n this.eventEmitter.emit('dragStart', {\n type: 'drag',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n\n document.addEventListener('mousemove', this.onDragMove)\n document.addEventListener('mouseup', this.onDragEnd)\n document.addEventListener('touchmove', this.onDragMove)\n document.addEventListener('touchend', this.onDragEnd)\n }\n\n /**\n * Handle drag movement with reactive state updates\n */\n onDragMove(e: MouseEvent | TouchEvent): void\n {\n if (!this.isDragging) return\n\n const { clientX, clientY } = this.directionResolver(\n e instanceof MouseEvent ? e.clientX : e.touches[0].clientX,\n e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n )\n\n const deltaX = clientX - this.startX\n const deltaY = clientY - this.startY\n\n // Apply movement mode and update reactive state\n const newState = this.applyMovementMode(deltaX, deltaY)\n this.setState(newState)\n\n this.eventEmitter.emit('drag', {\n type: 'drag',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Handle drag end event\n */\n onDragEnd(): void\n {\n this.isDragging = false\n\n document.removeEventListener('mousemove', this.onDragMove)\n document.removeEventListener('mouseup', this.onDragEnd)\n document.removeEventListener('touchmove', this.onDragMove)\n document.removeEventListener('touchend', this.onDragEnd)\n\n this.eventEmitter.emit('dragEnd', {\n type: 'drag',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Handle resize start event with direction\n */\n onResizeStart(e: MouseEvent | TouchEvent, direction: ResizeDirection): void\n {\n e.preventDefault()\n e.stopPropagation()\n\n this.bringToFront()\n this.isResizing = true\n this.resizeDirection = direction\n\n const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX\n const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n\n this.startX = clientX\n this.startY = clientY\n this.startState = this.getState()\n\n document.addEventListener('mousemove', this.onResizeMove)\n document.addEventListener('mouseup', this.onResizeEnd)\n document.addEventListener('touchmove', this.onResizeMove)\n document.addEventListener('touchend', this.onResizeEnd)\n\n this.eventEmitter.emit('resizeStart', {\n type: 'resize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container,\n direction\n })\n }\n\n /**\n * Handle resize movement with multi-direction support and reactive updates\n */\n onResizeMove(e: MouseEvent | TouchEvent): void\n {\n if (!this.isResizing || !this.resizeDirection) return\n\n const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX\n const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n\n const deltaX = clientX - this.startX\n const deltaY = clientY - this.startY\n\n const newState = this.calculateResizeState(deltaX, deltaY, this.resizeDirection)\n\n // Use reactive state update which will automatically apply constraints\n this.setState(newState)\n\n this.eventEmitter.emit('resize', {\n type: 'resize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n direction: this.resizeDirection,\n element: this.container\n })\n }\n\n /**\n * Handle resize end event\n */\n onResizeEnd(): void\n {\n this.isResizing = false\n this.resizeDirection = null\n\n document.removeEventListener('mousemove', this.onResizeMove)\n document.removeEventListener('mouseup', this.onResizeEnd)\n document.removeEventListener('touchmove', this.onResizeMove)\n document.removeEventListener('touchend', this.onResizeEnd)\n\n this.eventEmitter.emit('resizeEnd', {\n type: 'resize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Set movement direction\n */\n setDirection(direction: DirectionMode): void\n {\n this.reactiveState.draggingDirection = direction\n\n this.emitPluginEvent('directionChanged', { direction })\n }\n\n /**\n * Get current movement direction\n */\n getDirection(): DirectionMode\n {\n return this.reactiveState.draggingDirection\n }\n\n /**\n * Resolve coordinates based on current direction mode\n */\n directionResolver(x: number, y: number)\n {\n const direction = this.reactiveState.draggingDirection\n\n // Determine which coordinates to lock based on direction mode\n const lockX = direction === 'vertical'\n const lockY = direction === 'horizontal'\n\n return {\n clientX: lockX ? this.startX : x,\n clientY: lockY ? this.startY : y\n }\n }\n\n /**\n * Get current movement mode\n */\n getMode(): MovementMode\n {\n return this.reactiveState.mode\n }\n\n /**\n * Set movement mode with reactive update\n */\n setMode(mode: MovementMode): void\n {\n this.reactiveState.mode = mode\n\n this.eventEmitter.emit('modeChange', {\n type: 'modeChange',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Update container boundaries\n */\n setBoundaries(boundaries: Partial<Boundaries>): void\n {\n this.config.boundaries = { ...this.config.boundaries, ...boundaries }\n }\n\n /**\n * Get current container state (reactive)\n */\n getState(): ContainerState\n {\n return {\n x: this.reactiveState.x,\n y: this.reactiveState.y,\n width: this.reactiveState.width,\n height: this.reactiveState.height\n }\n }\n\n /**\n * Update container position and size with reactive state\n */\n setState(state: Partial<ContainerState>): void\n {\n // Update reactive state directly\n if (state.height !== undefined) this.reactiveState.height = state.height\n if (state.width !== undefined) this.reactiveState.width = state.width\n if (state.x !== undefined) this.reactiveState.x = state.x\n if (state.y !== undefined) this.reactiveState.y = state.y\n\n this.applyStateToDOM()\n }\n\n /**\n * Apply current state to DOM immediately for synchronization\n */\n private applyStateToDOM(): void\n {\n const state = this.getState()\n\n this.container.style.left = `${state.x}px`\n this.container.style.top = `${state.y}px`\n this.container.style.width = `${state.width}px`\n this.container.style.height = `${state.height}px`\n }\n\n /**\n * Bring container to front programmatically\n */\n bringToFront(): void\n {\n const { _uid } = this.config\n this.container.style.zIndex = this.zIndexState.sort(_uid).zIndex(_uid)\n }\n\n /**\n * Get container DOM element\n */\n getContainer(): HTMLElement\n {\n return this.container\n }\n\n /**\n * Update auto-adjust configuration\n */\n setAutoAdjust(config: AutoAdjustConfig): void\n {\n this.config.autoAdjust = { ...this.config.autoAdjust, ...config }\n\n // Restart parent observer if auto-adjust is enabled\n if (this.parentResizeObserver) {\n this.parentResizeObserver.disconnect()\n this.parentResizeObserver = null\n }\n\n if (this.config.autoAdjust?.enabled) {\n this.setupParentResizeObserver()\n }\n }\n\n /**\n * Update resize configuration\n */\n setResizeConfig(config: ResizeConfig): void\n {\n this.config.resize = { ...this.config.resize, ...config }\n\n // Remove existing resize handles\n this.resizeHandles.forEach(handle => handle.remove())\n this.resizeHandles.clear()\n\n // Initialize new resize handles if enabled\n if (this.config.resize?.enabled) {\n this.initializeResizeHandles()\n this.bindEvents()\n }\n }\n\n /**\n * Set constrain to parent configuration\n */\n setConstrainToParent(enabled: boolean): void\n {\n this.config.constrainToParent = enabled\n\n // Update viewport observer based on new constraint configuration\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n\n if (this.shouldConstrainToViewport()) {\n this.setupViewportResizeObserver()\n }\n }\n\n /**\n * Set constrain to viewport configuration\n */\n setConstrainToViewport(enabled: boolean): void\n {\n this.config.constrainToViewport = enabled\n\n // Restart viewport observer if enabled\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n\n if (this.shouldConstrainToViewport()) {\n this.setupViewportResizeObserver()\n }\n }\n\n /**\n * Recalculate container state relative to parent element\n */\n recalculateForParent(): void\n {\n if (!this.config.constrainToParent || !this.container.parentElement) {\n return\n }\n\n const parentRect = this.container.parentElement.getBoundingClientRect()\n const currentState = this.getState()\n\n // If the parent has zero dimensions, exit\n if (parentRect.width === 0 || parentRect.height === 0) {\n return\n }\n\n // Keep the desired dimensions, but limit them to the parent dimensions\n const desiredWidth = currentState.width\n const desiredHeight = currentState.height\n\n const newWidth = Math.min(desiredWidth, parentRect.width)\n const newHeight = Math.min(desiredHeight, parentRect.height)\n\n // Save the desired coordinates, but limit them to the parent dimensions\n const desiredX = currentState.x\n const desiredY = currentState.y\n\n const newX = Math.min(desiredX, parentRect.width - newWidth)\n const newY = Math.min(desiredY, parentRect.height - newHeight)\n\n // Use reactive state update\n this.setState({\n x: newX,\n y: newY,\n width: newWidth,\n height: newHeight\n })\n\n this.eventEmitter.emit('parentRecalculated', {\n type: 'parentRecalculated',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Install plugin on this container manager instance\n */\n use(plugin: Plugin, options?: any): ContainerManagerInterface\n {\n // Prevent duplicate plugin installation\n if (this.installedPlugins.has(plugin)) return this\n\n try {\n plugin.install(this, options)\n this.installedPlugins.add(plugin)\n } catch (error) {\n console.error('[ContainerManager] Failed to install plugin:', error)\n }\n\n return this\n }\n\n /**\n * Check if plugin is installed on this instance\n */\n hasPlugin(plugin: Plugin): boolean\n {\n return this.installedPlugins.has(plugin)\n }\n\n /**\n * Get all installed plugins on this instance\n */\n getInstalledPlugins(): Plugin[]\n {\n return Array.from(this.installedPlugins)\n }\n\n /**\n * Destroy container manager with proper cleanup\n */\n destroy(): void\n {\n // Clean up reactive effects\n this.reactiveEffects.forEach(effect => effect())\n this.reactiveEffects = []\n\n // Destroy reactive streams\n this.stateChangeStream.destroy()\n this.dragStream.destroy()\n this.resizeStream.destroy()\n\n this.eventEmitter.destroy()\n this.pluginEventEmitter.destroy()\n this.domUpdateEffect()\n\n // Remove event listeners\n this.dragHandle.removeEventListener('mousedown', this.onDragStart)\n this.dragHandle.removeEventListener('touchstart', this.onDragStart)\n this.dragHandle.removeEventListener('contextmenu', this.onContextMenu)\n\n // Remove resize handle events\n this.resizeHandles.forEach((handle, direction) => {\n handle.removeEventListener('mousedown', (e) => this.onResizeStart(e, direction))\n handle.removeEventListener('touchstart', (e) => this.onResizeStart(e, direction))\n })\n\n // Clean up ResizeObservers\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n\n if (this.parentResizeObserver) {\n this.parentResizeObserver.disconnect()\n this.parentResizeObserver = null\n }\n\n // Clear installed plugins\n this.installedPlugins.clear()\n\n this.zIndexState.remove(this.config._uid)\n }\n}\n"],"names":["NotificationSystem","container","__publicField","existingContainer","text","type","toast","remove","closeIcon","ContainerInitializer","width","height","x","y","color","ContentCreator","templateLoader","content","isAlreadyContentContainer","targetElement","error","loader","t","e","r","s","_a","a","i","_State","uid","id","$1","$2","State","getViewportDimensions","getState","_ContainerManager","config","reactive","computed","state","constrained","boundaries","clamp","viewport","effect","deepMerge","currentState","ReactiveEventSystem","rAFTimeout","newState","needsUpdate","parentElement","entries","entry","autoAdjust","parentRect","maxWidth","newWidth","maxHeight","newHeight","direction","handle","cursorMap","deltaX","deltaY","maxX","maxY","parentWidth","parentHeight","pluginName","plugin","rect","style","styleWidth","styleHeight","data","event","_event","stateMonitor","metricsMonitor","metrics","callback","timeout","targetEmitter","targetEvent","listener","middleware","clientX","clientY","lockX","lockY","mode","_uid","enabled","desiredWidth","desiredHeight","desiredX","desiredY","newX","newY","options","ContainerManager"],"mappings":"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","x_google_ignoreList":[3]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
(function(h,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("@alekstar79/reactive-event-system"),require("@alekstar79/utility")):typeof define=="function"&&define.amd?define(["exports","@alekstar79/reactive-event-system","@alekstar79/utility"],o):(h=typeof globalThis<"u"?globalThis:h||self,o(h.ContainerManager={},h.ReactiveEventSystem,h.utility))})(this,function(h,o,c){"use strict";var D=Object.defineProperty;var k=(h,o,c)=>o in h?D(h,o,{enumerable:!0,configurable:!0,writable:!0,value:c}):h[o]=c;var a=(h,o,c)=>k(h,typeof o!="symbol"?o+"":o,c);var b=document.createElement("style");b.textContent=`.container{position:absolute;background:#fff;border:2px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 6px #0000001a;overflow:hidden;resize:none}.drag-handle{position:absolute;top:0;left:0;right:0;height:24px;background:#f7fafc;border-bottom:1px solid #e2e8f0;cursor:move;display:flex;align-items:center;justify-content:center;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.container-title{font-weight:600;font-size:.9rem;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.container-content{position:absolute;top:40px;left:0;right:0;bottom:0;padding:16px;overflow:auto;box-sizing:border-box}.container[data-mode=pinned]{border-color:#e53e3e}.container[data-mode=snap]{border-color:#38a169}.container[data-mode=smooth]{border-color:#3182ce}.resize-n,.resize-s{height:12px;cursor:ns-resize;left:0;right:0}.resize-e,.resize-w{width:12px;cursor:ew-resize;top:0;bottom:0}.resize-ne,.resize-nw,.resize-se,.resize-sw{width:16px;height:16px;background:transparent;border-radius:2px}.resize-n{top:0}.resize-s{bottom:0}.resize-e{right:0}.resize-w{left:0}.resize-ne{top:0;right:0;cursor:nesw-resize}.resize-nw{top:0;left:0;cursor:nwse-resize}.resize-se{bottom:0;right:0;cursor:nwse-resize}.resize-sw{bottom:0;left:0;cursor:nesw-resize}.resize-handle:hover{background:#4299e14d}.resize-ne:hover,.resize-nw:hover,.resize-se:hover,.resize-sw:hover{background:#4299e14d;transform:scale(1.1)}.resize-handle{position:absolute;background:transparent;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;transition:background-color .2s ease}.handle-content{display:flex;justify-content:space-between;align-items:center;width:100%;padding:0 8px;box-sizing:border-box}.mode-controls-container{display:flex;gap:6px;align-items:center;flex-shrink:0}.mode-btn{width:32px;height:32px;border:none;border-radius:8px;cursor:pointer;font-size:14px;transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;justify-content:center;background:transparent;color:#6b7280;position:relative;overflow:hidden}.mode-btn:hover{transform:scale(1.2);background:#0000000d}.mode-btn:active{transform:scale(1.1)}.mode-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.container-content::-webkit-scrollbar{width:6px}.container-content::-webkit-scrollbar-track{background:#f3f4f6;border-radius:3px}.container-content::-webkit-scrollbar-thumb{background:#9ca3af;border-radius:3px}.container-content::-webkit-scrollbar-thumb:hover{background:#6b7280}
|
|
2
|
+
/*$vite$:1*/`,document.head.appendChild(b);class y{constructor(t){a(this,"container");this.container=t||this.createContainer()}createContainer(){const t=document.querySelector(".notifications");if(t)return t;const e=document.createElement("div");return e.className="notifications",document.body.appendChild(e),e}show(t,e="info"){const i=document.createElement("li"),s=this.removeToast.bind(this,i);i.innerHTML=this.getToastHTML(t,e),i.className=`toast ${e}`,i.timeoutId=window.setTimeout(s,4e3);const r=i.querySelector(".icon");r&&r.addEventListener("click",s),this.container.appendChild(i)}getToastHTML(t,e){return`
|
|
3
|
+
<div class="column">
|
|
4
|
+
<i class="fa-solid ${{success:"fa-circle-check",error:"fa-circle-xmark",warning:"fa-triangle-exclamation",info:"fa-circle-info"}[e]}"></i>
|
|
5
|
+
<span>${t}</span>
|
|
6
|
+
</div>
|
|
7
|
+
<i class="icon fa-solid fa-xmark"></i>
|
|
8
|
+
`}removeToast(t){t.classList.add("hide"),t.timeoutId&&clearTimeout(t.timeoutId),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},300)}clear(){for(;this.container.firstChild;)this.container.removeChild(this.container.firstChild)}}new y;class E{static createContainerElement(t,e,i,s,r){const n=document.createElement("div");return n.className="container advanced-container new",n.style.position="absolute",n.style.width=`${t}px`,n.style.height=`${e}px`,i!==void 0&&(n.style.left=`${i}px`),s!==void 0&&(n.style.top=`${s}px`),r&&(n.style.borderColor=r),n}}class S{constructor(t){a(this,"templateLoader");this.templateLoader=t}async createContent(t,e){try{const i=e.classList.contains("container-content");let s;if(i?s=e:(s=e.querySelector(".container-content"),s||(s=document.createElement("div"),s.className="container-content",e.appendChild(s))),s.innerHTML="",typeof t=="string")s.innerHTML=t;else if(t instanceof HTMLElement)s.appendChild(t);else if(t.template)try{s.innerHTML=await this.templateLoader.loadTemplate(t.template)}catch(r){console.error(`[ContentCreator] Failed to load template: ${t.template}`,r),s.innerHTML=`<div class="template-error">Failed to load template: ${t.template}</div>`}return s}catch(i){throw console.error("[ContentCreator] Error creating content:",i),i}}setTemplateLoader(t){this.templateLoader=t}}var x=Object.defineProperty,M=(d,t,e)=>t in d?x(d,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):d[t]=e,u=(d,t,e)=>M(d,typeof t!="symbol"?t+"":t,e);class R{constructor(){u(this,"templates",new Map),u(this,"lastUpdated",new Map)}register(t){if(!t.name.trim())throw new Error("Template name cannot be empty");this.templates.set(t.name,t),this.lastUpdated.set(t.name,Date.now())}async registerBulk(t){for(const[e,i]of Object.entries(t))this.register({name:e,source:i})}get(t){return this.templates.get(t)}has(t){return this.templates.has(t)}remove(t){this.templates.delete(t),this.lastUpdated.delete(t)}list(){return Array.from(this.templates.keys())}clear(){this.templates.clear(),this.lastUpdated.clear()}getMetadata(t){var e;return(e=this.templates.get(t))==null?void 0:e.metadata}}class T{constructor(t=36e5){u(this,"cache",new Map),u(this,"ttl"),this.ttl=t}set(t,e){this.cache.set(t,{content:e,timestamp:Date.now()})}get(t){const e=this.cache.get(t);return e?this.ttl<=0||Date.now()-e.timestamp>this.ttl?(this.cache.delete(t),null):e.content:null}has(t){return this.get(t)!==null}clear(){this.cache.clear()}size(){return this.cache.size}}class C{constructor(t,e={}){u(this,"cache"),u(this,"config"),u(this,"metrics"),u(this,"retryQueue",new Map),u(this,"registry"),this.registry=t??new R,this.cache=new T(e==null?void 0:e.cacheTTL),this.config=this.normalizeConfig(e),this.metrics={totalLoads:0,totalHits:0,totalMisses:0,totalErrors:0,averageLoadTime:0,cacheHitRate:0}}normalizeConfig(t={}){var i;const e=t||{};return{environment:e.environment==="auto"?typeof process<"u"&&((i=process.env)==null?void 0:i.NODE_ENV)==="production"?"production":"development":e.environment??"development",cache:e.cache??!0,cacheTTL:e.cacheTTL??36e5,enableMetrics:e.enableMetrics??!0,onError:e.onError??(()=>{}),onWarn:e.onWarn??(()=>{}),fallbackTemplate:e.fallbackTemplate??'<div class="template-error">Template load failed</div>'}}async loadTemplate(t,e=2){const i=performance.now(),s=this.retryQueue.get(t)??0;if(this.metrics.totalLoads++,this.config.cache){const n=this.cache.get(t);if(n)return this.metrics.totalHits++,this.updateCacheHitRate(),n}this.metrics.totalMisses++;const r=this.registry.get(t);if(!r){const n=this.createError(`Template "${t}" not found. Available: ${this.registry.list().join(", ")}`,t,s);return this.metrics.totalErrors++,this.config.onError(n),this.config.fallbackTemplate}try{let n=typeof r.source=="function"?await r.source():r.source;if(typeof n!="string"){const l=this.createError("Template source must return a string, got "+typeof n,t,s);return this.metrics.totalErrors++,this.config.onError(l),this.config.fallbackTemplate}return this.config.cache&&this.cache.set(t,n),this.retryQueue.delete(t),this.recordLoadTime(i),n}catch(n){const l=n instanceof Error?n:new Error(String(n));if(s<e)return this.retryQueue.set(t,s+1),this.config.onWarn(`Retrying template "${t}" (attempt ${s+1}/${e})`),await new Promise(w=>setTimeout(w,100*Math.pow(2,s))),this.loadTemplate(t,e);const g=this.createError(`Failed to load template "${t}": ${l.message}`,t,s);return this.metrics.totalErrors++,this.config.onError(g),this.retryQueue.delete(t),this.config.fallbackTemplate}}async loadTemplates(t){const e={};return await Promise.all(t.map(async i=>{e[i]=await this.loadTemplate(i)})),e}getMetrics(){return{...this.metrics}}clearCache(){this.cache.clear()}resetMetrics(){this.metrics={totalLoads:0,totalHits:0,totalMisses:0,totalErrors:0,averageLoadTime:0,cacheHitRate:0}}has(t){return this.registry.has(t)}list(){return this.registry.list()}info(t){return this.registry.get(t)}createError(t,e,i){return Object.assign(new Error(t),{name:"TemplateLoadError",templateName:e,timestamp:new Date,retryCount:i})}recordLoadTime(t){if(this.config.enableMetrics){const e=performance.now()-t,i=this.metrics.averageLoadTime*(this.metrics.totalLoads-1)+e;this.metrics.averageLoadTime=i/this.metrics.totalLoads}}updateCacheHitRate(){this.config.enableMetrics&&(this.metrics.cacheHitRate=this.metrics.totalHits/this.metrics.totalLoads)}}const m=class m{constructor(){a(this,"draggable",[])}zIndex(t){return`${m.highestZIndex+this.draggable.findIndex(e=>e===t)}`}push(t){return this.draggable=[...new Set([...this.draggable,t])],this}remove(t){return this.draggable=this.draggable.filter(e=>e!==t),this}sort(t){return this.draggable.sort((e,i)=>e===t?1:i===t?-1:0),this}};a(m,"inatance"),a(m,"highestZIndex",1e3),a(m,"init",()=>m.inatance??(m.inatance=new m));let f=m;function z(){return{width:window.innerWidth||document.documentElement.clientWidth,height:window.innerHeight||document.documentElement.clientHeight}}function H(){return f.init()}const p=class p{constructor(t,e={}){a(this,"dragStream");a(this,"resizeStream");a(this,"stateChangeStream");a(this,"eventEmitter");a(this,"pluginEventEmitter");a(this,"config");a(this,"container");a(this,"dragHandle");a(this,"resizeHandles",new Map);a(this,"installedPlugins",new Set);a(this,"reactiveEffects",[]);a(this,"isDragging",!1);a(this,"isResizing",!1);a(this,"resizeDirection",null);a(this,"startX",0);a(this,"startY",0);a(this,"startState");a(this,"resizeObserver",null);a(this,"parentResizeObserver",null);a(this,"zIndexState");a(this,"reactiveState",o.reactive({x:0,y:0,width:0,height:0,mode:"smooth",draggingDirection:"all"}));a(this,"constrainedState",o.computed(()=>{var s;const t=this.reactiveState;if(!this.config)return{...t};let e={...t};const{boundaries:i}=this.config;if(e.width=c.clamp(t.width,i.minWidth||p.MINWIDTH,i.maxWidth||1/0),e.height=c.clamp(t.height,i.minHeight||p.MINHEIGHT,i.maxHeight||1/0),this.shouldConstrainToViewport()){const r=z();e.x=c.clamp(t.x,0,r.width-e.width),e.y=c.clamp(t.y,0,r.height-e.height)}return(s=this.config)!=null&&s.constrainToParent&&(e=this.constrainToParent(e)),e}));a(this,"domUpdateEffect",o.effect(()=>{var e;const t=this.constrainedState.value;this.container&&(this.container.style.left=`${t.x}px`,this.container.style.top=`${t.y}px`,this.container.style.width=`${t.width}px`,this.container.style.height=`${t.height}px`,(e=this.eventEmitter)==null||e.emit("stateChange",{type:"stateChange",state:{...t},mode:this.reactiveState.mode,element:this.container}))}));this.config=c.deepMerge({_uid:"",mode:"smooth",constrainToViewport:!1,draggingDirection:"all",constrainToParent:!1,boundaries:{minWidth:p.MINWIDTH,minHeight:p.MINHEIGHT},autoAdjust:{enabled:!1,width:!1,height:!1},resize:{enabled:!0,directions:["se"]}},e),this.container=t,this.zIndexState=H();const i=this.getCurrentState();this.reactiveState.x=i.x,this.reactiveState.y=i.y,this.reactiveState.width=i.width,this.reactiveState.height=i.height,this.reactiveState.mode=this.config.mode,this.reactiveState.draggingDirection=this.config.draggingDirection,this.eventEmitter=new o({enableMetrics:!0}),this.pluginEventEmitter=new o({enableMetrics:!0}),this.stateChangeStream=this.eventEmitter.stream("stateChange"),this.dragStream=this.eventEmitter.stream("drag"),this.resizeStream=this.eventEmitter.stream("resize"),this.startState=this.getState(),this.setupEventMiddleware(),this.initializeHandles(),this.bindEvents(),this.setupResizeObservers(),this.setupReactiveMonitoring()}setupResizeObservers(){var t;this.shouldConstrainToViewport()&&this.setupViewportResizeObserver(),(t=this.config.autoAdjust)!=null&&t.enabled&&this.setupParentResizeObserver()}shouldConstrainToViewport(){return!this.config.constrainToParent||this.config.constrainToViewport}setupViewportResizeObserver(){let t=null;this.resizeObserver=new ResizeObserver(()=>{t&&cancelAnimationFrame(t),t=requestAnimationFrame(()=>{this.handleViewportResize()})}),this.resizeObserver.observe(document.body)}handleViewportResize(){if(!this.shouldConstrainToViewport())return;const t=z(),i={...this.getState()};let s=!1;i.x+i.width>t.width&&(i.x=Math.max(0,t.width-i.width),s=!0),i.y+i.height>t.height&&(i.y=Math.max(0,t.height-i.height),s=!0),i.x<0&&(i.x=0,s=!0),i.y<0&&(i.y=0,s=!0),s&&(this.setState(i),this.eventEmitter.emit("viewportResize",{type:"viewportResize",state:this.getState(),mode:this.reactiveState.mode,element:this.container}))}setupParentResizeObserver(){const t=this.container.parentElement;t&&(this.parentResizeObserver=new ResizeObserver(e=>{for(const i of e)this.handleParentResize(i)}),this.parentResizeObserver.observe(t))}handleParentResize(t){const{autoAdjust:e}=this.config;if(!(e!=null&&e.enabled))return;const i=t.contentRect,r={...this.getState()};let n=!1;if(e.width){const l=this.getMaxWidthConstraint(),g=Math.min(i.width,l);Math.abs(r.width-g)>1&&(r.width=g,n=!0)}if(e.height){const l=this.getMaxHeightConstraint(),g=Math.min(i.height,l);Math.abs(r.height-g)>1&&(r.height=g,n=!0)}n&&(this.setState(r),this.eventEmitter.emit("autoAdjust",{type:"autoAdjust",state:this.getState(),mode:this.reactiveState.mode,element:this.container}))}initializeHandles(){var t;this.initializeDragHandle(),(t=this.config.resize)!=null&&t.enabled&&this.initializeResizeHandles()}initializeDragHandle(){this.dragHandle=this.container.querySelector("[data-drag-handle]"),this.dragHandle?this.dragHandle.setAttribute("oncontextmenu","return false"):(this.dragHandle=document.createElement("div"),this.dragHandle.className="drag-handle",this.dragHandle.setAttribute("data-drag-handle","true"),this.dragHandle.setAttribute("oncontextmenu","return false"),this.container.prepend(this.dragHandle))}initializeResizeHandles(){var e;(((e=this.config.resize)==null?void 0:e.directions)||["se"]).forEach(i=>{const s=this.createResizeHandle(i);this.resizeHandles.set(i,s),this.container.appendChild(s)})}createResizeHandle(t){const e=document.createElement("div");return e.className=`resize-handle resize-${t}`,e.setAttribute("data-resize-handle",t),e.setAttribute("data-resize-direction",t),e.addEventListener("contextmenu",this.onContextMenu),this.applyResizeHandleStyles(e,t),e}applyResizeHandleStyles(t,e){const i={n:"ns-resize",s:"ns-resize",e:"ew-resize",w:"ew-resize",ne:"nesw-resize",nw:"nwse-resize",se:"nwse-resize",sw:"nesw-resize"};t.style.position="absolute",t.style.cursor=i[e],this.positionResizeHandle(t,e)}positionResizeHandle(t,e){switch(e){case"n":t.style.top="0",t.style.left="0",t.style.right="0",t.style.height="12px";break;case"s":t.style.bottom="0",t.style.left="0",t.style.right="0",t.style.height="12px";break;case"e":t.style.right="0",t.style.top="0",t.style.bottom="0",t.style.width="12px";break;case"w":t.style.left="0",t.style.top="0",t.style.bottom="0",t.style.width="12px";break;case"ne":t.style.top="0",t.style.right="0",t.style.width="12px",t.style.height="12px";break;case"nw":t.style.top="0",t.style.left="0",t.style.width="12px",t.style.height="12px";break;case"se":t.style.bottom="0",t.style.right="0",t.style.width="12px",t.style.height="12px";break;case"sw":t.style.bottom="0",t.style.left="0",t.style.width="12px",t.style.height="12px";break}}bindEvents(){var t;this.onDragStart=this.onDragStart.bind(this),this.onDragMove=this.onDragMove.bind(this),this.onDragEnd=this.onDragEnd.bind(this),this.onResizeStart=this.onResizeStart.bind(this),this.onResizeMove=this.onResizeMove.bind(this),this.onResizeEnd=this.onResizeEnd.bind(this),this.onContextMenu=this.onContextMenu.bind(this),this.hasPluginByName("SnappingPlugin")||(this.dragHandle.addEventListener("mousedown",this.onDragStart),this.dragHandle.addEventListener("touchstart",this.onDragStart)),(t=this.config.resize)!=null&&t.enabled&&this.resizeHandles.forEach((e,i)=>{e.addEventListener("mousedown",s=>this.onResizeStart(s,i)),e.addEventListener("touchstart",s=>this.onResizeStart(s,i))}),this.dragHandle.addEventListener("contextmenu",this.onContextMenu)}applyMovementMode(t,e){const i={...this.startState};return this.reactiveState.mode==="smooth"&&(i.x=this.startState.x+t,i.y=this.startState.y+e),i}calculateResizeState(t,e,i){const s={...this.startState};switch(i){case"e":s.width=this.startState.width+t;break;case"w":s.width=this.startState.width-t,s.x=this.startState.x+t;break;case"n":s.height=this.startState.height-e,s.y=this.startState.y+e;break;case"s":s.height=this.startState.height+e;break;case"ne":s.width=this.startState.width+t,s.height=this.startState.height-e,s.y=this.startState.y+e;break;case"nw":s.width=this.startState.width-t,s.height=this.startState.height-e,s.x=this.startState.x+t,s.y=this.startState.y+e;break;case"se":s.width=this.startState.width+t,s.height=this.startState.height+e;break;case"sw":s.width=this.startState.width-t,s.height=this.startState.height+e,s.x=this.startState.x+t;break}return s}constrainToParent(t){const e=this.container.parentElement;if(!e)return t;const i=e.getBoundingClientRect();if(i.width===0||i.height===0)return t;const s=Math.max(0,i.width-t.width),r=Math.max(0,i.height-t.height),n=i.width-t.x,l=i.height-t.y;return{x:c.clamp(t.x,0,s),y:c.clamp(t.y,0,r),width:c.clamp(t.width,0,n),height:c.clamp(t.height,0,l)}}getMaxWidthConstraint(){const{boundaries:t}=this.config;let e=t.maxWidth||1/0;if(this.config.constrainToParent&&this.container.parentElement){const i=this.container.parentElement.getBoundingClientRect().width;e=Math.min(e,i)}return e}getMaxHeightConstraint(){const{boundaries:t}=this.config;let e=t.maxHeight||1/0;if(this.config.constrainToParent&&this.container.parentElement){const i=this.container.parentElement.getBoundingClientRect().height;e=Math.min(e,i)}return e}onContextMenu(t){t.preventDefault(),t.stopPropagation()}hasPluginByName(t){return Array.from(this.installedPlugins).some(e=>e.constructor.name===t)}getCurrentState(){const t=this.container.getBoundingClientRect(),e=window.getComputedStyle(this.container),i=parseFloat(e.width)||t.width,s=parseFloat(e.height)||t.height;return{x:t.left,y:t.top,width:i,height:s}}setupEventMiddleware(){this.eventEmitter.use("*",(t,e)=>(typeof window<"u"&&window.DEBUG_CONTAINER_MANAGER&&console.log(`[ContainerManager] ${e}:`,t),t)),this.eventEmitter.use("dragStart",(t,e)=>{if(this.reactiveState.mode==="pinned")throw new Error("Cannot drag in pinned mode");return t}),this.eventEmitter.use("drag",(t,e)=>t)}setupReactiveMonitoring(){const t=o.effect(()=>{const{state:i}=this.stateChangeStream});this.reactiveEffects.push(t);const e=o.effect(()=>{const i=this.eventEmitter.getMetrics();i.state.errorCount>10&&console.warn("[ContainerManager] High error count in event system:",i.state.errorCount)});this.reactiveEffects.push(e)}on(t,e){this.eventEmitter.on(t,e)}off(t,e){this.eventEmitter.off(t,e)}waitFor(t,e){return this.eventEmitter.waitFor(t,e)}getStream(t){return this.eventEmitter.stream(t)}pipe(t,e,i){return this.eventEmitter.pipe(t,e,i)}getEventMetrics(){return this.eventEmitter.getMetrics()}emitPluginEvent(t,e){this.pluginEventEmitter.emit(t,e)}onPluginEvent(t,e){this.pluginEventEmitter.on(t,e)}offPluginEvent(t,e){this.pluginEventEmitter.off(t,e)}usePluginMiddleware(t,e){return this.pluginEventEmitter.use(t,e)}onDragStart(t){if(this.reactiveState.mode==="pinned")return;t.preventDefault(),this.bringToFront(),this.isDragging=!0;const e=t instanceof MouseEvent?t.clientX:t.touches[0].clientX,i=t instanceof MouseEvent?t.clientY:t.touches[0].clientY;this.startX=e,this.startY=i,this.startState=this.getState(),this.eventEmitter.emit("dragStart",{type:"drag",state:this.getState(),mode:this.reactiveState.mode,element:this.container}),document.addEventListener("mousemove",this.onDragMove),document.addEventListener("mouseup",this.onDragEnd),document.addEventListener("touchmove",this.onDragMove),document.addEventListener("touchend",this.onDragEnd)}onDragMove(t){if(!this.isDragging)return;const{clientX:e,clientY:i}=this.directionResolver(t instanceof MouseEvent?t.clientX:t.touches[0].clientX,t instanceof MouseEvent?t.clientY:t.touches[0].clientY),s=e-this.startX,r=i-this.startY,n=this.applyMovementMode(s,r);this.setState(n),this.eventEmitter.emit("drag",{type:"drag",state:this.getState(),mode:this.reactiveState.mode,element:this.container})}onDragEnd(){this.isDragging=!1,document.removeEventListener("mousemove",this.onDragMove),document.removeEventListener("mouseup",this.onDragEnd),document.removeEventListener("touchmove",this.onDragMove),document.removeEventListener("touchend",this.onDragEnd),this.eventEmitter.emit("dragEnd",{type:"drag",state:this.getState(),mode:this.reactiveState.mode,element:this.container})}onResizeStart(t,e){t.preventDefault(),t.stopPropagation(),this.bringToFront(),this.isResizing=!0,this.resizeDirection=e;const i=t instanceof MouseEvent?t.clientX:t.touches[0].clientX,s=t instanceof MouseEvent?t.clientY:t.touches[0].clientY;this.startX=i,this.startY=s,this.startState=this.getState(),document.addEventListener("mousemove",this.onResizeMove),document.addEventListener("mouseup",this.onResizeEnd),document.addEventListener("touchmove",this.onResizeMove),document.addEventListener("touchend",this.onResizeEnd),this.eventEmitter.emit("resizeStart",{type:"resize",state:this.getState(),mode:this.reactiveState.mode,element:this.container,direction:e})}onResizeMove(t){if(!this.isResizing||!this.resizeDirection)return;const e=t instanceof MouseEvent?t.clientX:t.touches[0].clientX,i=t instanceof MouseEvent?t.clientY:t.touches[0].clientY,s=e-this.startX,r=i-this.startY,n=this.calculateResizeState(s,r,this.resizeDirection);this.setState(n),this.eventEmitter.emit("resize",{type:"resize",state:this.getState(),mode:this.reactiveState.mode,direction:this.resizeDirection,element:this.container})}onResizeEnd(){this.isResizing=!1,this.resizeDirection=null,document.removeEventListener("mousemove",this.onResizeMove),document.removeEventListener("mouseup",this.onResizeEnd),document.removeEventListener("touchmove",this.onResizeMove),document.removeEventListener("touchend",this.onResizeEnd),this.eventEmitter.emit("resizeEnd",{type:"resize",state:this.getState(),mode:this.reactiveState.mode,element:this.container})}setDirection(t){this.reactiveState.draggingDirection=t,this.emitPluginEvent("directionChanged",{direction:t})}getDirection(){return this.reactiveState.draggingDirection}directionResolver(t,e){const i=this.reactiveState.draggingDirection,s=i==="vertical",r=i==="horizontal";return{clientX:s?this.startX:t,clientY:r?this.startY:e}}getMode(){return this.reactiveState.mode}setMode(t){this.reactiveState.mode=t,this.eventEmitter.emit("modeChange",{type:"modeChange",state:this.getState(),mode:this.reactiveState.mode,element:this.container})}setBoundaries(t){this.config.boundaries={...this.config.boundaries,...t}}getState(){return{x:this.reactiveState.x,y:this.reactiveState.y,width:this.reactiveState.width,height:this.reactiveState.height}}setState(t){t.height!==void 0&&(this.reactiveState.height=t.height),t.width!==void 0&&(this.reactiveState.width=t.width),t.x!==void 0&&(this.reactiveState.x=t.x),t.y!==void 0&&(this.reactiveState.y=t.y),this.applyStateToDOM()}applyStateToDOM(){const t=this.getState();this.container.style.left=`${t.x}px`,this.container.style.top=`${t.y}px`,this.container.style.width=`${t.width}px`,this.container.style.height=`${t.height}px`}bringToFront(){const{_uid:t}=this.config;this.container.style.zIndex=this.zIndexState.sort(t).zIndex(t)}getContainer(){return this.container}setAutoAdjust(t){var e;this.config.autoAdjust={...this.config.autoAdjust,...t},this.parentResizeObserver&&(this.parentResizeObserver.disconnect(),this.parentResizeObserver=null),(e=this.config.autoAdjust)!=null&&e.enabled&&this.setupParentResizeObserver()}setResizeConfig(t){var e;this.config.resize={...this.config.resize,...t},this.resizeHandles.forEach(i=>i.remove()),this.resizeHandles.clear(),(e=this.config.resize)!=null&&e.enabled&&(this.initializeResizeHandles(),this.bindEvents())}setConstrainToParent(t){this.config.constrainToParent=t,this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.shouldConstrainToViewport()&&this.setupViewportResizeObserver()}setConstrainToViewport(t){this.config.constrainToViewport=t,this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.shouldConstrainToViewport()&&this.setupViewportResizeObserver()}recalculateForParent(){if(!this.config.constrainToParent||!this.container.parentElement)return;const t=this.container.parentElement.getBoundingClientRect(),e=this.getState();if(t.width===0||t.height===0)return;const i=e.width,s=e.height,r=Math.min(i,t.width),n=Math.min(s,t.height),l=e.x,g=e.y,w=Math.min(l,t.width-r),L=Math.min(g,t.height-n);this.setState({x:w,y:L,width:r,height:n}),this.eventEmitter.emit("parentRecalculated",{type:"parentRecalculated",state:this.getState(),mode:this.reactiveState.mode,element:this.container})}use(t,e){if(this.installedPlugins.has(t))return this;try{t.install(this,e),this.installedPlugins.add(t)}catch(i){console.error("[ContainerManager] Failed to install plugin:",i)}return this}hasPlugin(t){return this.installedPlugins.has(t)}getInstalledPlugins(){return Array.from(this.installedPlugins)}destroy(){this.reactiveEffects.forEach(t=>t()),this.reactiveEffects=[],this.stateChangeStream.destroy(),this.dragStream.destroy(),this.resizeStream.destroy(),this.eventEmitter.destroy(),this.pluginEventEmitter.destroy(),this.domUpdateEffect(),this.dragHandle.removeEventListener("mousedown",this.onDragStart),this.dragHandle.removeEventListener("touchstart",this.onDragStart),this.dragHandle.removeEventListener("contextmenu",this.onContextMenu),this.resizeHandles.forEach((t,e)=>{t.removeEventListener("mousedown",i=>this.onResizeStart(i,e)),t.removeEventListener("touchstart",i=>this.onResizeStart(i,e))}),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.parentResizeObserver&&(this.parentResizeObserver.disconnect(),this.parentResizeObserver=null),this.installedPlugins.clear(),this.zIndexState.remove(this.config._uid)}};a(p,"MINWIDTH",200),a(p,"MINHEIGHT",45);let v=p;h.ContainerInitializer=E,h.ContainerManager=v,h.ContentCreator=S,h.TemplateLoader=C,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
|
|
9
|
+
//# sourceMappingURL=index.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/utils/Notifications.ts","../src/utils/ContainerInitializer.ts","../src/utils/ContentCreator.ts","../node_modules/@alekstar79/template-loader/dist/index.es.js","../src/utils/helpers.ts","../src/core/ContainerManager.ts"],"sourcesContent":["// src/utils/notifications.ts\n\n/**\n * Notification system for displaying toast messages\n * Adapted for TypeScript with improved functionality\n */\nexport class NotificationSystem\n{\n private container: HTMLElement\n\n constructor(container?: HTMLElement)\n {\n this.container = container || this.createContainer()\n }\n\n /**\n * Create notifications container\n */\n private createContainer(): HTMLElement\n {\n const existingContainer = document.querySelector('.notifications') as HTMLElement\n if (existingContainer) {\n return existingContainer\n }\n\n const container = document.createElement('div')\n container.className = 'notifications'\n document.body.appendChild(container)\n return container\n }\n\n /**\n * Show notification toast\n */\n show(text: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): void\n {\n const toast = document.createElement('li')\n const remove = this.removeToast.bind(this, toast)\n\n toast.innerHTML = this.getToastHTML(text, type)\n toast.className = `toast ${type}`;\n\n (toast as any).timeoutId = window.setTimeout(remove, 4000)\n\n const closeIcon = toast.querySelector('.icon')\n if (closeIcon) {\n closeIcon.addEventListener('click', remove)\n }\n\n // Add new toast to the bottom of the container\n this.container.appendChild(toast)\n }\n\n /**\n * Generate toast HTML based on type\n */\n private getToastHTML(text: string, type: 'success' | 'error' | 'warning' | 'info'): string\n {\n const icons = {\n success: 'fa-circle-check',\n error: 'fa-circle-xmark',\n warning: 'fa-triangle-exclamation',\n info: 'fa-circle-info'\n }\n\n return `\n <div class=\"column\">\n <i class=\"fa-solid ${icons[type]}\"></i>\n <span>${text}</span>\n </div>\n <i class=\"icon fa-solid fa-xmark\"></i>\n `\n }\n\n /**\n * Remove toast with animation\n */\n private removeToast(toast: HTMLLIElement): void\n {\n toast.classList.add('hide')\n\n // Use any for timeoutId property\n if ((toast as any).timeoutId) {\n clearTimeout((toast as any).timeoutId)\n }\n\n setTimeout(() => {\n if (toast.parentNode) {\n toast.parentNode.removeChild(toast)\n }\n }, 300)\n }\n\n /**\n * Clear all notifications\n */\n clear(): void\n {\n while (this.container.firstChild) {\n this.container.removeChild(this.container.firstChild)\n }\n }\n}\n\n// Default instance for convenience\nexport const defaultNotificationSystem = new NotificationSystem()\n","// src/utils/ContainerInitializer.ts\n\n/**\n * Utility for proper container initialization and state synchronization\n */\nexport class ContainerInitializer\n{\n /**\n * Create container element with proper initialization\n */\n static createContainerElement(\n width: number,\n height: number,\n x?: number,\n y?: number,\n color?: string\n ): HTMLElement {\n const container = document.createElement('div')\n container.className = 'container advanced-container new'\n\n container.style.position = 'absolute'\n container.style.width = `${width}px`\n container.style.height = `${height}px`\n\n if (x !== undefined) container.style.left = `${x}px`\n if (y !== undefined) container.style.top = `${y}px`\n if (color) container.style.borderColor = color\n\n return container\n }\n}\n","import { TemplateLoader } from './index'\n\n/**\n * Content creator utility for flexible content handling\n * Supports strings, DOM elements, and template loading\n */\nexport class ContentCreator\n{\n private templateLoader: TemplateLoader\n\n constructor(templateLoader: TemplateLoader)\n {\n this.templateLoader = templateLoader\n }\n\n /**\n * Create content from various sources\n * @param content - String, HTMLElement, or template name\n * @param container - Container element to append content to\n */\n async createContent(\n content: string | HTMLElement | { template: string },\n container: HTMLElement\n ): Promise<HTMLElement> {\n try {\n // Checking if the container is already container-content\n const isAlreadyContentContainer = container.classList.contains('container-content')\n\n // Find or create a target element for your content\n let targetElement: HTMLElement\n\n if (isAlreadyContentContainer) {\n // If the container is already a container-content, use it directly\n targetElement = container\n } else {\n // Searching for existing container-content inside a container\n targetElement = container.querySelector('.container-content') as HTMLElement\n\n if (!targetElement) {\n targetElement = document.createElement('div')\n targetElement.className = 'container-content'\n container.appendChild(targetElement)\n }\n }\n\n targetElement.innerHTML = ''\n\n if (typeof content === 'string') {\n // String content\n targetElement.innerHTML = content\n } else if (content instanceof HTMLElement) {\n // DOM element\n targetElement.appendChild(content)\n } else if (content.template) {\n // Template content\n try {\n targetElement.innerHTML = await this.templateLoader.loadTemplate(content.template)\n } catch (error) {\n console.error(`[ContentCreator] Failed to load template: ${content.template}`, error)\n targetElement.innerHTML = `<div class=\"template-error\">Failed to load template: ${content.template}</div>`\n }\n }\n\n return targetElement\n } catch (error) {\n console.error('[ContentCreator] Error creating content:', error)\n throw error\n }\n }\n\n /**\n * Set template loader instance\n */\n setTemplateLoader(loader: TemplateLoader): void\n {\n this.templateLoader = loader\n }\n}\n","var t=Object.defineProperty,e=(e,r,s)=>r in e?t(e,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[r]=s,r=(t,r,s)=>e(t,\"symbol\"!=typeof r?r+\"\":r,s);class s{constructor(){r(this,\"templates\",new Map),r(this,\"lastUpdated\",new Map)}register(t){if(!t.name.trim())throw new Error(\"Template name cannot be empty\");this.templates.set(t.name,t),this.lastUpdated.set(t.name,Date.now())}async registerBulk(t){for(const[e,r]of Object.entries(t))this.register({name:e,source:r})}get(t){return this.templates.get(t)}has(t){return this.templates.has(t)}remove(t){this.templates.delete(t),this.lastUpdated.delete(t)}list(){return Array.from(this.templates.keys())}clear(){this.templates.clear(),this.lastUpdated.clear()}getMetadata(t){return this.templates.get(t)?.metadata}}class a{constructor(t=36e5){r(this,\"cache\",new Map),r(this,\"ttl\"),this.ttl=t}set(t,e){this.cache.set(t,{content:e,timestamp:Date.now()})}get(t){const e=this.cache.get(t);return e?this.ttl<=0||Date.now()-e.timestamp>this.ttl?(this.cache.delete(t),null):e.content:null}has(t){return null!==this.get(t)}clear(){this.cache.clear()}size(){return this.cache.size}}class i{constructor(t,e={}){r(this,\"cache\"),r(this,\"config\"),r(this,\"metrics\"),r(this,\"retryQueue\",new Map),r(this,\"registry\"),this.registry=t??new s,this.cache=new a(e?.cacheTTL),this.config=this.normalizeConfig(e),this.metrics={totalLoads:0,totalHits:0,totalMisses:0,totalErrors:0,averageLoadTime:0,cacheHitRate:0}}normalizeConfig(t={}){const e=t||{};return{environment:\"auto\"===e.environment?typeof process<\"u\"&&\"production\"===process.env?.NODE_ENV?\"production\":\"development\":e.environment??\"development\",cache:e.cache??!0,cacheTTL:e.cacheTTL??36e5,enableMetrics:e.enableMetrics??!0,onError:e.onError??(()=>{}),onWarn:e.onWarn??(()=>{}),fallbackTemplate:e.fallbackTemplate??'<div class=\"template-error\">Template load failed</div>'}}async loadTemplate(t,e=2){const r=performance.now(),s=this.retryQueue.get(t)??0;if(this.metrics.totalLoads++,this.config.cache){const e=this.cache.get(t);if(e)return this.metrics.totalHits++,this.updateCacheHitRate(),e}this.metrics.totalMisses++;const a=this.registry.get(t);if(!a){const e=this.createError(`Template \"${t}\" not found. Available: ${this.registry.list().join(\", \")}`,t,s);return this.metrics.totalErrors++,this.config.onError(e),this.config.fallbackTemplate}try{let e=\"function\"==typeof a.source?await a.source():a.source;if(\"string\"!=typeof e){const r=this.createError(\"Template source must return a string, got \"+typeof e,t,s);return this.metrics.totalErrors++,this.config.onError(r),this.config.fallbackTemplate}return this.config.cache&&this.cache.set(t,e),this.retryQueue.delete(t),this.recordLoadTime(r),e}catch(r){const a=r instanceof Error?r:new Error(String(r));if(s<e)return this.retryQueue.set(t,s+1),this.config.onWarn(`Retrying template \"${t}\" (attempt ${s+1}/${e})`),await new Promise(t=>setTimeout(t,100*Math.pow(2,s))),this.loadTemplate(t,e);const i=this.createError(`Failed to load template \"${t}\": ${a.message}`,t,s);return this.metrics.totalErrors++,this.config.onError(i),this.retryQueue.delete(t),this.config.fallbackTemplate}}async loadTemplates(t){const e={};return await Promise.all(t.map(async t=>{e[t]=await this.loadTemplate(t)})),e}getMetrics(){return{...this.metrics}}clearCache(){this.cache.clear()}resetMetrics(){this.metrics={totalLoads:0,totalHits:0,totalMisses:0,totalErrors:0,averageLoadTime:0,cacheHitRate:0}}has(t){return this.registry.has(t)}list(){return this.registry.list()}info(t){return this.registry.get(t)}createError(t,e,r){return Object.assign(new Error(t),{name:\"TemplateLoadError\",templateName:e,timestamp:new Date,retryCount:r})}recordLoadTime(t){if(this.config.enableMetrics){const e=performance.now()-t,r=this.metrics.averageLoadTime*(this.metrics.totalLoads-1)+e;this.metrics.averageLoadTime=r/this.metrics.totalLoads}}updateCacheHitRate(){this.config.enableMetrics&&(this.metrics.cacheHitRate=this.metrics.totalHits/this.metrics.totalLoads)}}function o(){const t=new s;return new i(t,{environment:\"production\",cache:!0,cacheTTL:36e5,enableMetrics:!1,onWarn:t=>{},onError:t=>{}})}export{a as TemplateCache,i as TemplateLoader,s as TemplateRegistry,o as createTemplateLoader};","// src/utuls/dom.ts\n\nexport interface StateInterface {\n zIndex(uid: string): string;\n push(uid: string): this;\n remove(uid: string): this;\n sort(uid: string): this;\n}\n\nexport class State implements StateInterface\n{\n static inatance: StateInterface\n\n static highestZIndex = 1000\n\n static init = () => State.inatance ??= new State()\n\n private draggable: string[] = []\n\n zIndex(uid: string): string\n {\n return `${State.highestZIndex + this.draggable.findIndex(id => id === uid)}`\n }\n\n push(uid: string): this\n {\n this.draggable = [...new Set<string>([...this.draggable, uid])]\n\n return this\n }\n\n remove(uid: string): this\n {\n this.draggable = this.draggable.filter(id => id !== uid)\n\n return this\n }\n\n sort(uid: string): this\n {\n this.draggable.sort(($1: number | string, $2: number | string) => {\n return $1 === uid ? 1 : $2 === uid ? -1 : 0\n })\n\n return this\n }\n}\n\n/**\n * Check if element is within viewport boundaries\n */\nexport function isInViewport(element: HTMLElement): boolean\n{\n const rect = element.getBoundingClientRect()\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\n/**\n * Get viewport dimensions\n */\nexport function getViewportDimensions(): { width: number; height: number }\n{\n return {\n width: window.innerWidth || document.documentElement.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight\n }\n}\n\n/**\n * @returns {State} - Класс вычисляющий z-index позиции контейнеров\n */\nexport function getState(): StateInterface\n{\n return State.init()\n}\n","// src/core/ContainerManager.ts\n\nimport ReactiveEventSystem from '@alekstar79/reactive-event-system'\nimport { computed, effect, reactive } from '@alekstar79/reactive-event-system'\nimport { clamp, deepMerge } from '@alekstar79/utility'\n\nimport { getState, getViewportDimensions } from '../utils'\nimport type { StateInterface } from '../utils'\n\nimport {\n AutoAdjustConfig,\n Boundaries,\n ContainerManagerInterface,\n Plugin,\n ContainerConfig,\n ContainerEvent,\n ContainerState,\n DirectionMode,\n MovementMode,\n PluginMiddleware,\n ResizeConfig,\n ResizeDirection\n} from './types'\n\n/**\n * Main container management class for drag and resize operations\n * Implements ContainerManagerInterface for plugin compatibility\n * Now with reactive state management using @alekstar79/reactivity\n */\nexport class ContainerManager implements ContainerManagerInterface\n{\n private static MINWIDTH: number = 200\n private static MINHEIGHT: number = 45\n\n // Streams for reactive event handling\n private dragStream: ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n private resizeStream: ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n private readonly stateChangeStream: ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n private readonly eventEmitter: ReactiveEventSystem<ContainerEvent>\n private readonly pluginEventEmitter: ReactiveEventSystem\n\n private readonly config: ContainerConfig\n private readonly container: HTMLElement\n private dragHandle!: HTMLElement\n private resizeHandles: Map<ResizeDirection, HTMLElement> = new Map()\n private installedPlugins: Set<Plugin> = new Set()\n private reactiveEffects: (() => void)[] = []\n\n private isDragging: boolean = false\n private isResizing: boolean = false\n private resizeDirection: ResizeDirection | null = null\n private startX: number = 0\n private startY: number = 0\n private startState: ContainerState\n private resizeObserver: ResizeObserver | null = null\n private parentResizeObserver: ResizeObserver | null = null\n public zIndexState: StateInterface\n\n private reactiveState = reactive({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n mode: 'smooth' as MovementMode,\n draggingDirection: 'all' as DirectionMode\n })\n\n // Computed state with applied constraints\n private constrainedState = computed(() => {\n const state = this.reactiveState\n\n if (!this.config) return { ...state }\n\n let constrained: ContainerState = { ...state }\n\n // Apply boundaries constraints\n const { boundaries } = this.config\n constrained.width = clamp(\n state.width,\n boundaries.minWidth || ContainerManager.MINWIDTH,\n boundaries.maxWidth || Infinity\n )\n constrained.height = clamp(\n state.height,\n boundaries.minHeight || ContainerManager.MINHEIGHT,\n boundaries.maxHeight || Infinity\n )\n\n // Apply viewport constraints if needed\n if (this.shouldConstrainToViewport()) {\n const viewport = getViewportDimensions()\n constrained.x = clamp(state.x, 0, viewport.width - constrained.width)\n constrained.y = clamp(state.y, 0, viewport.height - constrained.height)\n }\n\n // Apply parent constraints if enabled\n if (this.config?.constrainToParent) {\n constrained = this.constrainToParent(constrained)\n }\n\n return constrained\n })\n\n // Automatic DOM updates with reactive effect\n private domUpdateEffect = effect(() => {\n const state = this.constrainedState.value\n\n if (!this.container) return\n\n this.container.style.left = `${state.x}px`\n this.container.style.top = `${state.y}px`\n this.container.style.width = `${state.width}px`\n this.container.style.height = `${state.height}px`\n\n this.eventEmitter?.emit('stateChange', {\n type: 'stateChange',\n state: { ...state },\n mode: this.reactiveState.mode,\n element: this.container\n })\n })\n\n /**\n * Create a new container manager instance with reactive state management\n * @param container - HTML element to manage\n * @param config - Configuration options\n */\n constructor(container: HTMLElement, config: Partial<ContainerConfig> = {})\n {\n this.config = deepMerge<ContainerConfig>({\n _uid: '',\n mode: 'smooth',\n constrainToViewport: false,\n draggingDirection: 'all',\n constrainToParent: false,\n boundaries: {\n minWidth: ContainerManager.MINWIDTH,\n minHeight: ContainerManager.MINHEIGHT\n },\n autoAdjust: {\n enabled: false,\n width: false,\n height: false\n },\n resize: {\n enabled: true,\n directions: ['se']\n }\n }, config)\n\n this.container = container\n this.zIndexState = getState()\n\n // Initialize reactive state from DOM\n const currentState = this.getCurrentState()\n this.reactiveState.x = currentState.x\n this.reactiveState.y = currentState.y\n this.reactiveState.width = currentState.width\n this.reactiveState.height = currentState.height\n this.reactiveState.mode = this.config.mode\n this.reactiveState.draggingDirection = this.config.draggingDirection\n\n // Initialize enhanced event emitters with metrics\n this.eventEmitter = new ReactiveEventSystem<ContainerEvent>({ enableMetrics: true })\n this.pluginEventEmitter = new ReactiveEventSystem({ enableMetrics: true })\n\n // Create reactive streams for common events\n this.stateChangeStream = this.eventEmitter.stream('stateChange')\n this.dragStream = this.eventEmitter.stream('drag')\n this.resizeStream = this.eventEmitter.stream('resize')\n\n this.startState = this.getState()\n\n this.setupEventMiddleware()\n this.initializeHandles()\n this.bindEvents()\n this.setupResizeObservers()\n this.setupReactiveMonitoring()\n }\n\n /**\n * Set up ResizeObserver to track viewport and parent size changes\n */\n private setupResizeObservers(): void\n {\n // Setup viewport resize observer if viewport constraints should be applied\n if (this.shouldConstrainToViewport()) {\n this.setupViewportResizeObserver()\n }\n\n // Setup parent element observer if auto-adjust is enabled\n if (this.config.autoAdjust?.enabled) {\n this.setupParentResizeObserver()\n }\n }\n\n /**\n * Determine if viewport constraints should be applied\n */\n private shouldConstrainToViewport(): boolean\n {\n return !this.config.constrainToParent || this.config.constrainToViewport\n }\n\n /**\n * Set up ResizeObserver to track viewport size changes\n */\n private setupViewportResizeObserver(): void\n {\n let rAFTimeout: number | null = null\n\n this.resizeObserver = new ResizeObserver(() => {\n rAFTimeout && cancelAnimationFrame(rAFTimeout)\n rAFTimeout = requestAnimationFrame(() => {\n this.handleViewportResize()\n })\n })\n\n this.resizeObserver.observe(document.body)\n }\n\n /**\n * Handle viewport resize event with reactive state updates\n */\n private handleViewportResize(): void\n {\n if (!this.shouldConstrainToViewport()) return\n\n const viewport = getViewportDimensions()\n const currentState = this.getState()\n const newState = { ...currentState }\n\n let needsUpdate = false\n\n // Check if container is outside viewport on right edge\n if (newState.x + newState.width > viewport.width) {\n newState.x = Math.max(0, viewport.width - newState.width)\n needsUpdate = true\n }\n\n // Check if container is outside viewport on bottom edge\n if (newState.y + newState.height > viewport.height) {\n newState.y = Math.max(0, viewport.height - newState.height)\n needsUpdate = true\n }\n\n // Check if container is outside viewport on left edge\n if (newState.x < 0) {\n newState.x = 0\n needsUpdate = true\n }\n\n // Check if container is outside viewport on top edge\n if (newState.y < 0) {\n newState.y = 0\n needsUpdate = true\n }\n\n if (needsUpdate) {\n this.setState(newState)\n\n this.eventEmitter.emit('viewportResize', {\n type: 'viewportResize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n }\n\n /**\n * Set up ResizeObserver for parent element auto-adjustment\n */\n private setupParentResizeObserver(): void\n {\n const parentElement = this.container.parentElement\n if (!parentElement) return\n\n this.parentResizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n this.handleParentResize(entry)\n }\n })\n\n this.parentResizeObserver.observe(parentElement)\n }\n\n /**\n * Handle parent element resize for auto-adjustment with reactive updates\n */\n private handleParentResize(entry: ResizeObserverEntry): void\n {\n const { autoAdjust } = this.config\n if (!autoAdjust?.enabled) return\n\n const parentRect = entry.contentRect\n const currentState = this.getState()\n const newState = { ...currentState }\n\n let needsUpdate = false\n\n if (autoAdjust.width) {\n const maxWidth = this.getMaxWidthConstraint()\n const newWidth = Math.min(parentRect.width, maxWidth)\n\n if (Math.abs(newState.width - newWidth) > 1) {\n newState.width = newWidth\n needsUpdate = true\n }\n }\n\n if (autoAdjust.height) {\n const maxHeight = this.getMaxHeightConstraint()\n const newHeight = Math.min(parentRect.height, maxHeight)\n\n if (Math.abs(newState.height - newHeight) > 1) {\n newState.height = newHeight\n needsUpdate = true\n }\n }\n\n if (needsUpdate) {\n this.setState(newState)\n\n this.eventEmitter.emit('autoAdjust', {\n type: 'autoAdjust',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n }\n\n /**\n * Initialize drag and resize handles based on configuration\n */\n private initializeHandles(): void\n {\n this.initializeDragHandle()\n\n if (this.config.resize?.enabled) {\n this.initializeResizeHandles()\n }\n }\n\n /**\n * Initialize drag handle\n */\n private initializeDragHandle(): void\n {\n this.dragHandle = this.container.querySelector('[data-drag-handle]') as HTMLElement\n if (!this.dragHandle) {\n this.dragHandle = document.createElement('div')\n this.dragHandle.className = 'drag-handle'\n this.dragHandle.setAttribute('data-drag-handle', 'true')\n this.dragHandle.setAttribute('oncontextmenu', 'return false')\n this.container.prepend(this.dragHandle)\n } else {\n this.dragHandle.setAttribute('oncontextmenu', 'return false')\n }\n }\n\n /**\n * Initialize resize handles for all configured directions\n */\n private initializeResizeHandles(): void\n {\n const directions = this.config.resize?.directions || ['se']\n\n directions.forEach(direction => {\n const handle = this.createResizeHandle(direction)\n this.resizeHandles.set(direction, handle)\n this.container.appendChild(handle)\n })\n }\n\n /**\n * Create individual resize handle for specific direction\n */\n private createResizeHandle(direction: ResizeDirection): HTMLElement\n {\n const handle = document.createElement('div')\n handle.className = `resize-handle resize-${direction}`\n handle.setAttribute('data-resize-handle', direction)\n handle.setAttribute('data-resize-direction', direction)\n\n // Add context menu prevention for resize handles\n handle.addEventListener('contextmenu', this.onContextMenu)\n\n this.applyResizeHandleStyles(handle, direction)\n\n return handle\n }\n\n /**\n * Apply styles and cursor for resize handle based on direction\n */\n private applyResizeHandleStyles(handle: HTMLElement, direction: ResizeDirection): void\n {\n const cursorMap: Record<ResizeDirection, string> = {\n 'n': 'ns-resize', 's': 'ns-resize', 'e': 'ew-resize', 'w': 'ew-resize',\n 'ne': 'nesw-resize', 'nw': 'nwse-resize', 'se': 'nwse-resize', 'sw': 'nesw-resize'\n }\n\n handle.style.position = 'absolute'\n handle.style.cursor = cursorMap[direction]\n\n this.positionResizeHandle(handle, direction)\n }\n\n /**\n * Position resize handle based on direction\n */\n private positionResizeHandle(handle: HTMLElement, direction: ResizeDirection): void\n {\n const size = 12\n\n switch (direction) {\n case 'n':\n handle.style.top = '0'\n handle.style.left = '0'\n handle.style.right = '0'\n handle.style.height = `${size}px`\n break\n case 's':\n handle.style.bottom = '0'\n handle.style.left = '0'\n handle.style.right = '0'\n handle.style.height = `${size}px`\n break\n case 'e':\n handle.style.right = '0'\n handle.style.top = '0'\n handle.style.bottom = '0'\n handle.style.width = `${size}px`\n break\n case 'w':\n handle.style.left = '0'\n handle.style.top = '0'\n handle.style.bottom = '0'\n handle.style.width = `${size}px`\n break\n case 'ne':\n handle.style.top = '0'\n handle.style.right = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n case 'nw':\n handle.style.top = '0'\n handle.style.left = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n case 'se':\n handle.style.bottom = '0'\n handle.style.right = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n case 'sw':\n handle.style.bottom = '0'\n handle.style.left = '0'\n handle.style.width = `${size}px`\n handle.style.height = `${size}px`\n break\n }\n }\n\n /**\n * Bind event listeners to handles\n */\n private bindEvents(): void\n {\n this.onDragStart = this.onDragStart.bind(this)\n this.onDragMove = this.onDragMove.bind(this)\n this.onDragEnd = this.onDragEnd.bind(this)\n\n this.onResizeStart = this.onResizeStart.bind(this)\n this.onResizeMove = this.onResizeMove.bind(this)\n this.onResizeEnd = this.onResizeEnd.bind(this)\n\n this.onContextMenu = this.onContextMenu.bind(this)\n\n // Only bind default drag events if no snapping plugin is installed\n if (!this.hasPluginByName('SnappingPlugin')) {\n this.dragHandle.addEventListener('mousedown', this.onDragStart)\n this.dragHandle.addEventListener('touchstart', this.onDragStart)\n }\n\n // Bind resize events for all resize handles\n if (this.config.resize?.enabled) {\n this.resizeHandles.forEach((handle, direction) => {\n handle.addEventListener('mousedown', (e) => this.onResizeStart(e, direction))\n handle.addEventListener('touchstart', (e) => this.onResizeStart(e, direction))\n })\n }\n\n // Disable context menu on drag handle\n this.dragHandle.addEventListener('contextmenu', this.onContextMenu)\n }\n\n /**\n * Apply movement mode to coordinates\n */\n private applyMovementMode(deltaX: number, deltaY: number): ContainerState\n {\n const newState = { ...this.startState }\n\n if (this.reactiveState.mode === 'smooth') {\n newState.x = this.startState.x + deltaX\n newState.y = this.startState.y + deltaY\n }\n\n return newState\n }\n\n /**\n * Calculate new state based on resize direction and deltas\n */\n private calculateResizeState(deltaX: number, deltaY: number, direction: ResizeDirection): ContainerState\n {\n const newState = { ...this.startState }\n\n switch (direction) {\n case 'e': // East - right only\n newState.width = this.startState.width + deltaX\n break\n case 'w': // West - left only\n newState.width = this.startState.width - deltaX\n newState.x = this.startState.x + deltaX\n break\n case 'n': // North - top only\n newState.height = this.startState.height - deltaY\n newState.y = this.startState.y + deltaY\n break\n case 's': // South - bottom only\n newState.height = this.startState.height + deltaY\n break\n case 'ne': // Northeast - top-right\n newState.width = this.startState.width + deltaX\n newState.height = this.startState.height - deltaY\n newState.y = this.startState.y + deltaY\n break\n case 'nw': // Northwest - top-left\n newState.width = this.startState.width - deltaX\n newState.height = this.startState.height - deltaY\n newState.x = this.startState.x + deltaX\n newState.y = this.startState.y + deltaY\n break\n case 'se': // Southeast - bottom-right\n newState.width = this.startState.width + deltaX\n newState.height = this.startState.height + deltaY\n break\n case 'sw': // Southwest - bottom-left\n newState.width = this.startState.width - deltaX\n newState.height = this.startState.height + deltaY\n newState.x = this.startState.x + deltaX\n break\n }\n\n return newState\n }\n\n /**\n * Constrain container to parent element boundaries (both position and size)\n */\n private constrainToParent(state: ContainerState): ContainerState\n {\n const parentElement = this.container.parentElement\n if (!parentElement) return state\n\n const parentRect = parentElement.getBoundingClientRect()\n\n // If the container has not yet been added to the DOM or the parent has a zero size,\n // return to the original state\n if (parentRect.width === 0 || parentRect.height === 0) {\n return state\n }\n\n // Calculating the maximum allowable coordinates\n const maxX = Math.max(0, parentRect.width - state.width)\n const maxY = Math.max(0, parentRect.height - state.height)\n\n // Calculating the maximum allowable sizes\n const maxWidth = parentRect.width - state.x\n const maxHeight = parentRect.height - state.y\n\n return {\n x: clamp(state.x, 0, maxX),\n y: clamp(state.y, 0, maxY),\n width: clamp(state.width, 0, maxWidth),\n height: clamp(state.height, 0, maxHeight)\n }\n }\n\n /**\n * Get maximum width constraint considering parent and boundaries\n */\n private getMaxWidthConstraint(): number\n {\n const { boundaries } = this.config\n let maxWidth = boundaries.maxWidth || Infinity\n\n if (this.config.constrainToParent && this.container.parentElement) {\n const parentWidth = this.container.parentElement.getBoundingClientRect().width\n maxWidth = Math.min(maxWidth, parentWidth)\n }\n\n return maxWidth\n }\n\n /**\n * Get maximum height constraint considering parent and boundaries\n */\n private getMaxHeightConstraint(): number\n {\n const { boundaries } = this.config\n let maxHeight = boundaries.maxHeight || Infinity\n\n if (this.config.constrainToParent && this.container.parentElement) {\n const parentHeight = this.container.parentElement.getBoundingClientRect().height\n maxHeight = Math.min(maxHeight, parentHeight)\n }\n\n return maxHeight\n }\n\n /**\n * Handle context menu event on drag handle\n */\n private onContextMenu(e: MouseEvent): void\n {\n e.preventDefault()\n e.stopPropagation()\n }\n\n /**\n * Check if snapping plugin is installed\n */\n private hasPluginByName(pluginName: string): boolean\n {\n return Array.from(this.installedPlugins)\n .some(plugin => plugin.constructor.name === pluginName)\n }\n\n /**\n * Get current container state from DOM\n */\n private getCurrentState(): ContainerState\n {\n const rect = this.container.getBoundingClientRect()\n const style = window.getComputedStyle(this.container)\n\n const styleWidth = parseFloat(style.width) || rect.width\n const styleHeight = parseFloat(style.height) || rect.height\n\n return {\n x: rect.left,\n y: rect.top,\n width: styleWidth,\n height: styleHeight\n }\n }\n\n /**\n * Setup event middleware for enhanced event processing\n */\n private setupEventMiddleware(): void\n {\n // Add logging middleware for all events\n this.eventEmitter.use('*', (data, event) => {\n if (typeof window !== 'undefined' && (window as any).DEBUG_CONTAINER_MANAGER) {\n console.log(`[ContainerManager] ${event}:`, data)\n }\n return data\n })\n\n // TODO Add validation middleware for drag events\n this.eventEmitter.use('dragStart', (data, _event) => {\n if (this.reactiveState.mode === 'pinned') {\n throw new Error('Cannot drag in pinned mode')\n }\n return data\n })\n\n // Add performance monitoring middleware\n this.eventEmitter.use('drag', (data, _event) => {\n // console.log(`[ContainerManager] ${event}:`, data)\n return data\n })\n }\n\n /**\n * Setup reactive monitoring for container metrics\n */\n private setupReactiveMonitoring(): void\n {\n // Monitor state changes reactively\n const stateMonitor = effect(() => {\n const { state } = this.stateChangeStream\n // Intentional side-effect-free access\n // We don't need to do anything here\n void state\n })\n\n this.reactiveEffects.push(stateMonitor)\n\n // Monitor emitter metrics\n const metricsMonitor = effect(() => {\n const metrics = this.eventEmitter.getMetrics()\n // Monitor event system health\n if (metrics.state.errorCount > 10) {\n console.warn('[ContainerManager] High error count in event system:', metrics.state.errorCount)\n }\n })\n\n this.reactiveEffects.push(metricsMonitor)\n }\n\n // Public API Implementation\n\n /**\n * Subscribe to container events\n * @param event - Event name\n * @param callback - Callback function\n */\n on(event: string, callback: (data: ContainerEvent) => void): void\n {\n this.eventEmitter.on(event, callback)\n }\n\n /**\n * Unsubscribe from container events\n * @param event - Event name\n * @param callback - Callback function\n */\n off(event: string, callback: (data: ContainerEvent) => void): void\n {\n this.eventEmitter.off(event, callback)\n }\n\n /**\n * Wait for specific container event\n * @example\n * // Wait for drag to complete\n * const dragResult = await manager.waitFor('dragEnd')\n * console.log('Drag completed:', dragResult.state)\n */\n waitFor(event: string, timeout?: number): Promise<ContainerEvent>\n {\n return this.eventEmitter.waitFor(event, timeout)\n }\n\n /**\n * Get reactive stream for specific event type\n * @example\n * // Get state change stream\n * const stateStream = manager.getStream('stateChange')\n * stateStream.subscribe((data) => {\n * console.log('State changed:', data.state)\n * })\n */\n getStream(event: string): ReturnType<ReactiveEventSystem<ContainerEvent>['stream']>\n {\n return this.eventEmitter.stream(event)\n }\n\n /**\n * Pipe container events to another emitter\n * @example\n * // Pipe all events to analytics emitter\n * manager.pipe('*', analyticsEmitter)\n */\n pipe(event: string, targetEmitter: ReactiveEventSystem<ContainerEvent>, targetEvent?: string): () => void\n {\n return this.eventEmitter.pipe(event, targetEmitter, targetEvent)\n }\n\n /**\n * Get event system metrics for monitoring\n */\n getEventMetrics(): ReturnType<ReactiveEventSystem<ContainerEvent>['getMetrics']>\n {\n return this.eventEmitter.getMetrics()\n }\n\n /**\n * Plugin-specific event emission\n */\n emitPluginEvent(event: string, data: any): void\n {\n this.pluginEventEmitter.emit(event, data)\n }\n\n /**\n * Listen to plugin-specific events\n */\n onPluginEvent(event: string, listener: (data: any) => void): void\n {\n this.pluginEventEmitter.on(event, listener)\n }\n\n /**\n * Remove plugin event listener\n */\n offPluginEvent(event: string, listener: (data: any) => void): void\n {\n this.pluginEventEmitter.off(event, listener)\n }\n\n /**\n * Add middleware for plugin events\n */\n usePluginMiddleware(event: string, middleware: PluginMiddleware): () => void\n {\n return this.pluginEventEmitter.use(event, middleware)\n }\n\n /**\n * Handle drag start event\n */\n onDragStart(e: MouseEvent | TouchEvent): void\n {\n // Don't allow dragging in pinned mode\n if (this.reactiveState.mode === 'pinned') return\n\n e.preventDefault()\n this.bringToFront()\n\n this.isDragging = true\n\n const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX\n const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n\n this.startX = clientX\n this.startY = clientY\n this.startState = this.getState()\n\n this.eventEmitter.emit('dragStart', {\n type: 'drag',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n\n document.addEventListener('mousemove', this.onDragMove)\n document.addEventListener('mouseup', this.onDragEnd)\n document.addEventListener('touchmove', this.onDragMove)\n document.addEventListener('touchend', this.onDragEnd)\n }\n\n /**\n * Handle drag movement with reactive state updates\n */\n onDragMove(e: MouseEvent | TouchEvent): void\n {\n if (!this.isDragging) return\n\n const { clientX, clientY } = this.directionResolver(\n e instanceof MouseEvent ? e.clientX : e.touches[0].clientX,\n e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n )\n\n const deltaX = clientX - this.startX\n const deltaY = clientY - this.startY\n\n // Apply movement mode and update reactive state\n const newState = this.applyMovementMode(deltaX, deltaY)\n this.setState(newState)\n\n this.eventEmitter.emit('drag', {\n type: 'drag',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Handle drag end event\n */\n onDragEnd(): void\n {\n this.isDragging = false\n\n document.removeEventListener('mousemove', this.onDragMove)\n document.removeEventListener('mouseup', this.onDragEnd)\n document.removeEventListener('touchmove', this.onDragMove)\n document.removeEventListener('touchend', this.onDragEnd)\n\n this.eventEmitter.emit('dragEnd', {\n type: 'drag',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Handle resize start event with direction\n */\n onResizeStart(e: MouseEvent | TouchEvent, direction: ResizeDirection): void\n {\n e.preventDefault()\n e.stopPropagation()\n\n this.bringToFront()\n this.isResizing = true\n this.resizeDirection = direction\n\n const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX\n const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n\n this.startX = clientX\n this.startY = clientY\n this.startState = this.getState()\n\n document.addEventListener('mousemove', this.onResizeMove)\n document.addEventListener('mouseup', this.onResizeEnd)\n document.addEventListener('touchmove', this.onResizeMove)\n document.addEventListener('touchend', this.onResizeEnd)\n\n this.eventEmitter.emit('resizeStart', {\n type: 'resize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container,\n direction\n })\n }\n\n /**\n * Handle resize movement with multi-direction support and reactive updates\n */\n onResizeMove(e: MouseEvent | TouchEvent): void\n {\n if (!this.isResizing || !this.resizeDirection) return\n\n const clientX = e instanceof MouseEvent ? e.clientX : e.touches[0].clientX\n const clientY = e instanceof MouseEvent ? e.clientY : e.touches[0].clientY\n\n const deltaX = clientX - this.startX\n const deltaY = clientY - this.startY\n\n const newState = this.calculateResizeState(deltaX, deltaY, this.resizeDirection)\n\n // Use reactive state update which will automatically apply constraints\n this.setState(newState)\n\n this.eventEmitter.emit('resize', {\n type: 'resize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n direction: this.resizeDirection,\n element: this.container\n })\n }\n\n /**\n * Handle resize end event\n */\n onResizeEnd(): void\n {\n this.isResizing = false\n this.resizeDirection = null\n\n document.removeEventListener('mousemove', this.onResizeMove)\n document.removeEventListener('mouseup', this.onResizeEnd)\n document.removeEventListener('touchmove', this.onResizeMove)\n document.removeEventListener('touchend', this.onResizeEnd)\n\n this.eventEmitter.emit('resizeEnd', {\n type: 'resize',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Set movement direction\n */\n setDirection(direction: DirectionMode): void\n {\n this.reactiveState.draggingDirection = direction\n\n this.emitPluginEvent('directionChanged', { direction })\n }\n\n /**\n * Get current movement direction\n */\n getDirection(): DirectionMode\n {\n return this.reactiveState.draggingDirection\n }\n\n /**\n * Resolve coordinates based on current direction mode\n */\n directionResolver(x: number, y: number)\n {\n const direction = this.reactiveState.draggingDirection\n\n // Determine which coordinates to lock based on direction mode\n const lockX = direction === 'vertical'\n const lockY = direction === 'horizontal'\n\n return {\n clientX: lockX ? this.startX : x,\n clientY: lockY ? this.startY : y\n }\n }\n\n /**\n * Get current movement mode\n */\n getMode(): MovementMode\n {\n return this.reactiveState.mode\n }\n\n /**\n * Set movement mode with reactive update\n */\n setMode(mode: MovementMode): void\n {\n this.reactiveState.mode = mode\n\n this.eventEmitter.emit('modeChange', {\n type: 'modeChange',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Update container boundaries\n */\n setBoundaries(boundaries: Partial<Boundaries>): void\n {\n this.config.boundaries = { ...this.config.boundaries, ...boundaries }\n }\n\n /**\n * Get current container state (reactive)\n */\n getState(): ContainerState\n {\n return {\n x: this.reactiveState.x,\n y: this.reactiveState.y,\n width: this.reactiveState.width,\n height: this.reactiveState.height\n }\n }\n\n /**\n * Update container position and size with reactive state\n */\n setState(state: Partial<ContainerState>): void\n {\n // Update reactive state directly\n if (state.height !== undefined) this.reactiveState.height = state.height\n if (state.width !== undefined) this.reactiveState.width = state.width\n if (state.x !== undefined) this.reactiveState.x = state.x\n if (state.y !== undefined) this.reactiveState.y = state.y\n\n this.applyStateToDOM()\n }\n\n /**\n * Apply current state to DOM immediately for synchronization\n */\n private applyStateToDOM(): void\n {\n const state = this.getState()\n\n this.container.style.left = `${state.x}px`\n this.container.style.top = `${state.y}px`\n this.container.style.width = `${state.width}px`\n this.container.style.height = `${state.height}px`\n }\n\n /**\n * Bring container to front programmatically\n */\n bringToFront(): void\n {\n const { _uid } = this.config\n this.container.style.zIndex = this.zIndexState.sort(_uid).zIndex(_uid)\n }\n\n /**\n * Get container DOM element\n */\n getContainer(): HTMLElement\n {\n return this.container\n }\n\n /**\n * Update auto-adjust configuration\n */\n setAutoAdjust(config: AutoAdjustConfig): void\n {\n this.config.autoAdjust = { ...this.config.autoAdjust, ...config }\n\n // Restart parent observer if auto-adjust is enabled\n if (this.parentResizeObserver) {\n this.parentResizeObserver.disconnect()\n this.parentResizeObserver = null\n }\n\n if (this.config.autoAdjust?.enabled) {\n this.setupParentResizeObserver()\n }\n }\n\n /**\n * Update resize configuration\n */\n setResizeConfig(config: ResizeConfig): void\n {\n this.config.resize = { ...this.config.resize, ...config }\n\n // Remove existing resize handles\n this.resizeHandles.forEach(handle => handle.remove())\n this.resizeHandles.clear()\n\n // Initialize new resize handles if enabled\n if (this.config.resize?.enabled) {\n this.initializeResizeHandles()\n this.bindEvents()\n }\n }\n\n /**\n * Set constrain to parent configuration\n */\n setConstrainToParent(enabled: boolean): void\n {\n this.config.constrainToParent = enabled\n\n // Update viewport observer based on new constraint configuration\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n\n if (this.shouldConstrainToViewport()) {\n this.setupViewportResizeObserver()\n }\n }\n\n /**\n * Set constrain to viewport configuration\n */\n setConstrainToViewport(enabled: boolean): void\n {\n this.config.constrainToViewport = enabled\n\n // Restart viewport observer if enabled\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n\n if (this.shouldConstrainToViewport()) {\n this.setupViewportResizeObserver()\n }\n }\n\n /**\n * Recalculate container state relative to parent element\n */\n recalculateForParent(): void\n {\n if (!this.config.constrainToParent || !this.container.parentElement) {\n return\n }\n\n const parentRect = this.container.parentElement.getBoundingClientRect()\n const currentState = this.getState()\n\n // If the parent has zero dimensions, exit\n if (parentRect.width === 0 || parentRect.height === 0) {\n return\n }\n\n // Keep the desired dimensions, but limit them to the parent dimensions\n const desiredWidth = currentState.width\n const desiredHeight = currentState.height\n\n const newWidth = Math.min(desiredWidth, parentRect.width)\n const newHeight = Math.min(desiredHeight, parentRect.height)\n\n // Save the desired coordinates, but limit them to the parent dimensions\n const desiredX = currentState.x\n const desiredY = currentState.y\n\n const newX = Math.min(desiredX, parentRect.width - newWidth)\n const newY = Math.min(desiredY, parentRect.height - newHeight)\n\n // Use reactive state update\n this.setState({\n x: newX,\n y: newY,\n width: newWidth,\n height: newHeight\n })\n\n this.eventEmitter.emit('parentRecalculated', {\n type: 'parentRecalculated',\n state: this.getState(),\n mode: this.reactiveState.mode,\n element: this.container\n })\n }\n\n /**\n * Install plugin on this container manager instance\n */\n use(plugin: Plugin, options?: any): ContainerManagerInterface\n {\n // Prevent duplicate plugin installation\n if (this.installedPlugins.has(plugin)) return this\n\n try {\n plugin.install(this, options)\n this.installedPlugins.add(plugin)\n } catch (error) {\n console.error('[ContainerManager] Failed to install plugin:', error)\n }\n\n return this\n }\n\n /**\n * Check if plugin is installed on this instance\n */\n hasPlugin(plugin: Plugin): boolean\n {\n return this.installedPlugins.has(plugin)\n }\n\n /**\n * Get all installed plugins on this instance\n */\n getInstalledPlugins(): Plugin[]\n {\n return Array.from(this.installedPlugins)\n }\n\n /**\n * Destroy container manager with proper cleanup\n */\n destroy(): void\n {\n // Clean up reactive effects\n this.reactiveEffects.forEach(effect => effect())\n this.reactiveEffects = []\n\n // Destroy reactive streams\n this.stateChangeStream.destroy()\n this.dragStream.destroy()\n this.resizeStream.destroy()\n\n this.eventEmitter.destroy()\n this.pluginEventEmitter.destroy()\n this.domUpdateEffect()\n\n // Remove event listeners\n this.dragHandle.removeEventListener('mousedown', this.onDragStart)\n this.dragHandle.removeEventListener('touchstart', this.onDragStart)\n this.dragHandle.removeEventListener('contextmenu', this.onContextMenu)\n\n // Remove resize handle events\n this.resizeHandles.forEach((handle, direction) => {\n handle.removeEventListener('mousedown', (e) => this.onResizeStart(e, direction))\n handle.removeEventListener('touchstart', (e) => this.onResizeStart(e, direction))\n })\n\n // Clean up ResizeObservers\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n\n if (this.parentResizeObserver) {\n this.parentResizeObserver.disconnect()\n this.parentResizeObserver = null\n }\n\n // Clear installed plugins\n this.installedPlugins.clear()\n\n this.zIndexState.remove(this.config._uid)\n }\n}\n"],"names":["NotificationSystem","container","__publicField","existingContainer","text","type","toast","remove","closeIcon","ContainerInitializer","width","height","x","y","color","ContentCreator","templateLoader","content","isAlreadyContentContainer","targetElement","error","loader","t","e","r","s","_a","a","i","_State","uid","id","$1","$2","State","getViewportDimensions","getState","_ContainerManager","config","reactive","computed","state","constrained","boundaries","clamp","viewport","effect","deepMerge","currentState","ReactiveEventSystem","rAFTimeout","newState","needsUpdate","parentElement","entries","entry","autoAdjust","parentRect","maxWidth","newWidth","maxHeight","newHeight","direction","handle","cursorMap","deltaX","deltaY","maxX","maxY","parentWidth","parentHeight","pluginName","plugin","rect","style","styleWidth","styleHeight","data","event","_event","stateMonitor","metricsMonitor","metrics","callback","timeout","targetEmitter","targetEvent","listener","middleware","clientX","clientY","lockX","lockY","mode","_uid","enabled","desiredWidth","desiredHeight","desiredX","desiredY","newX","newY","options","ContainerManager"],"mappings":"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","x_google_ignoreList":[3]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alekstar79/draggable-resizable-container",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A modern TypeScript library for managing draggable and resizable containers",
|
|
5
|
+
"author": "Aleksey Tarasenko <alekstar79@yandex.ru>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"main": "dist/index.esm.js",
|
|
10
|
+
"module": "dist/index.esm.js",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"require": "./dist/index.umd.js",
|
|
15
|
+
"import": "./dist/index.esm.js"
|
|
16
|
+
},
|
|
17
|
+
"./plugins": {
|
|
18
|
+
"types": "./dist/plugins/index.d.ts",
|
|
19
|
+
"require": "./dist/plugins/index.umd.js",
|
|
20
|
+
"import": "./dist/plugins/index.esm.js"
|
|
21
|
+
},
|
|
22
|
+
"./styles": {
|
|
23
|
+
"import": "./dist/styles/base.css",
|
|
24
|
+
"require": "./dist/styles/base.css"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"dev": "vite",
|
|
34
|
+
"build": "yarn build:lib && vite build --config vite.config.ts",
|
|
35
|
+
"build:lib": "vite build --config vite.lib.config.ts",
|
|
36
|
+
"test": "vitest",
|
|
37
|
+
"test:run": "vitest run",
|
|
38
|
+
"test:ui": "vitest --ui",
|
|
39
|
+
"coverage": "vitest run --coverage",
|
|
40
|
+
"type-check": "tsc --noEmit",
|
|
41
|
+
"preview": "vite preview",
|
|
42
|
+
"prepublishOnly": "yarn build:lib"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"reactive",
|
|
46
|
+
"edge-docking",
|
|
47
|
+
"draggable",
|
|
48
|
+
"resizable",
|
|
49
|
+
"container",
|
|
50
|
+
"typescript",
|
|
51
|
+
"plugin-system"
|
|
52
|
+
],
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "git+https://github.com/alekstar79/draggable-resizable-container.git"
|
|
56
|
+
},
|
|
57
|
+
"bugs": {
|
|
58
|
+
"url": "https://github.com/alekstar79/draggable-resizable-container/issues"
|
|
59
|
+
},
|
|
60
|
+
"homepage": "https://github.com/alekstar79/draggable-resizable-container#readme",
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/node": "^24.10.0",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^8.47.0",
|
|
64
|
+
"@typescript-eslint/parser": "^8.47.0",
|
|
65
|
+
"@vitest/coverage-v8": "^4.0.13",
|
|
66
|
+
"@vitest/ui": "^4.0.13",
|
|
67
|
+
"eslint": "^9.39.1",
|
|
68
|
+
"jsdom": "^27.2.0",
|
|
69
|
+
"typescript": "^5.3.3",
|
|
70
|
+
"vite": "^5.0.8",
|
|
71
|
+
"vite-plugin-dts": "^3.6.4",
|
|
72
|
+
"vite-plugin-generate-file": "^0.3.1",
|
|
73
|
+
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
74
|
+
"vite-plugin-static-copy": "^3.1.4",
|
|
75
|
+
"vitest": "^4.0.13"
|
|
76
|
+
},
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"@alekstar79/reactive-event-system": "^1.0.1",
|
|
79
|
+
"@alekstar79/template-loader": "^1.0.2",
|
|
80
|
+
"@alekstar79/utility": "^1.1.5"
|
|
81
|
+
},
|
|
82
|
+
"publishConfig": {
|
|
83
|
+
"access": "public"
|
|
84
|
+
},
|
|
85
|
+
"engines": {
|
|
86
|
+
"node": ">=20.0.0",
|
|
87
|
+
"npm": ">=10.0.0"
|
|
88
|
+
}
|
|
89
|
+
}
|