@blcklab/freedom 0.1.1 → 0.1.4
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/dist/index.cjs +60 -53
- package/dist/index.js +60 -53
- package/dist/manager.cjs +11 -7
- package/dist/manager.js +11 -7
- package/dist/snap.cjs +3 -4
- package/dist/snap.js +3 -4
- package/dist/window.cjs +60 -53
- package/dist/window.js +60 -53
- package/package.json +11 -5
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/manager.cjs.map +0 -1
- package/dist/manager.js.map +0 -1
- package/dist/snap.cjs.map +0 -1
- package/dist/snap.js.map +0 -1
- package/dist/window.cjs.map +0 -1
- package/dist/window.js.map +0 -1
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/events.ts","../src/core/math.ts","../src/engine/constraints.ts","../src/engine/drag.ts","../src/engine/resize.ts","../src/core/interaction-manager.ts","../src/dom/render.ts","../src/dom/handles.ts","../src/dom/scheduler.ts","../src/runtime/window.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["type Handler<T> = (data: T) => void;\n\nexport class Emitter<EventMap extends object> {\n private readonly listeners = new Map<keyof EventMap, Set<Handler<unknown>>>();\n\n on<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): () => void {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(handler as Handler<unknown>);\n return () => this.off(event, handler);\n }\n\n off<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): void {\n this.listeners.get(event)?.delete(handler as Handler<unknown>);\n }\n\n emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void {\n const set = this.listeners.get(event);\n if (!set || set.size === 0) return;\n\n // Snapshot so listeners can unsubscribe during emit.\n for (const handler of [...set]) {\n (handler as Handler<EventMap[K]>)(data);\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import type { Bounds, Point, Size } from './types';\n\nexport function clamp(value: number, min: number, max: number): number {\n if (min > max) return min;\n return Math.min(Math.max(value, min), max);\n}\n\nexport interface SizeLimits {\n minWidth: number;\n minHeight: number;\n maxWidth: number;\n maxHeight: number;\n}\n\nexport function clampSize(size: Size, limits: SizeLimits): Size {\n return {\n width: clamp(size.width, limits.minWidth, Math.max(limits.minWidth, limits.maxWidth)),\n height: clamp(size.height, limits.minHeight, Math.max(limits.minHeight, limits.maxHeight)),\n };\n}\n\nexport function clampPointToBounds(point: Point, size: Size, bounds: Bounds): Point {\n const maxX = Math.max(bounds.minX, bounds.maxX - size.width);\n const maxY = Math.max(bounds.minY, bounds.maxY - size.height);\n return {\n x: clamp(point.x, bounds.minX, maxX),\n y: clamp(point.y, bounds.minY, maxY),\n };\n}\n","import type { Bounds, BoundsOption, Point, Size } from '../core/types';\nimport { clampPointToBounds, clampSize, type SizeLimits } from '../core/math';\n\nexport { clampPointToBounds, clampSize };\nexport type { SizeLimits };\n\nexport function resolveBounds(\n option: BoundsOption | undefined,\n element: HTMLElement\n): Bounds | null {\n if (!option || option === 'none') return null;\n\n if (option === 'viewport') {\n return { minX: 0, minY: 0, maxX: window.innerWidth, maxY: window.innerHeight };\n }\n\n if (option === 'parent') {\n const parent = element.offsetParent as HTMLElement | null;\n if (!parent) return null;\n return { minX: 0, minY: 0, maxX: parent.clientWidth, maxY: parent.clientHeight };\n }\n\n return {\n minX: option.x,\n minY: option.y,\n maxX: option.x + option.width,\n maxY: option.y + option.height,\n };\n}\n\nexport function constrainToBounds(\n point: Point,\n size: Size,\n option: BoundsOption | undefined,\n element: HTMLElement\n): Point {\n const bounds = resolveBounds(option, element);\n return bounds ? clampPointToBounds(point, size, bounds) : point;\n}\n","import type {\n BoundsOption,\n DragEventData,\n FreedomPlugin,\n Point,\n PluginContext,\n Size,\n} from '../core/types';\nimport { constrainToBounds } from './constraints';\n\nexport interface DragEngineOptions {\n element: HTMLElement;\n bounds: BoundsOption | undefined;\n plugins: readonly FreedomPlugin[];\n pluginContext: PluginContext;\n getPosition(): Point;\n getSize(): Size;\n}\n\nexport interface DragMoveResult {\n position: Point;\n data: DragEventData;\n}\n\nexport interface DragEngine {\n begin(pointer: Point, pointerEvent: PointerEvent): DragEventData;\n move(pointer: Point, pointerEvent: PointerEvent): DragMoveResult;\n end(pointer: Point, pointerEvent: PointerEvent): DragEventData;\n}\n\nexport function createDragEngine(options: DragEngineOptions): DragEngine {\n let startPointer: Point = { x: 0, y: 0 };\n let startPosition: Point = { x: 0, y: 0 };\n\n return {\n begin(pointer, pointerEvent) {\n startPointer = pointer;\n startPosition = options.getPosition();\n return { position: startPosition, delta: { x: 0, y: 0 }, pointerEvent };\n },\n\n move(pointer, pointerEvent) {\n const delta: Point = {\n x: pointer.x - startPointer.x,\n y: pointer.y - startPointer.y,\n };\n\n let next: Point = { x: startPosition.x + delta.x, y: startPosition.y + delta.y };\n next = constrainToBounds(next, options.getSize(), options.bounds, options.element);\n\n for (const plugin of options.plugins) {\n if (!plugin.onDrag) continue;\n const result = plugin.onDrag(\n { position: next, delta, pointerEvent },\n options.pluginContext\n );\n if (result) next = result;\n }\n\n return { position: next, data: { position: next, delta, pointerEvent } };\n },\n\n end(pointer, pointerEvent) {\n const delta: Point = {\n x: pointer.x - startPointer.x,\n y: pointer.y - startPointer.y,\n };\n return { position: options.getPosition(), delta, pointerEvent };\n },\n };\n}\n","import type {\n BoundsOption,\n FreedomPlugin,\n Point,\n PluginContext,\n ResizeEventData,\n ResizeHandle,\n Size,\n} from '../core/types';\nimport { clamp } from '../core/math';\nimport { constrainToBounds, type SizeLimits } from './constraints';\n\nexport interface ResizeEngineOptions extends SizeLimits {\n element: HTMLElement;\n bounds: BoundsOption | undefined;\n plugins: readonly FreedomPlugin[];\n pluginContext: PluginContext;\n getPosition(): Point;\n getSize(): Size;\n}\n\nexport interface ResizeMoveResult {\n position: Point;\n size: Size;\n data: ResizeEventData;\n}\n\nexport interface ResizeEngine {\n begin(handle: ResizeHandle, pointer: Point, pointerEvent: PointerEvent): ResizeEventData;\n move(pointer: Point, pointerEvent: PointerEvent): ResizeMoveResult;\n end(pointer: Point, pointerEvent: PointerEvent): ResizeEventData;\n}\n\nconst WEST_HANDLES: readonly ResizeHandle[] = ['nw', 'w', 'sw'];\nconst NORTH_HANDLES: readonly ResizeHandle[] = ['nw', 'n', 'ne'];\nconst VERTICAL_ONLY_HANDLES: readonly ResizeHandle[] = ['n', 's'];\nconst HORIZONTAL_ONLY_HANDLES: readonly ResizeHandle[] = ['e', 'w'];\n\nexport function createResizeEngine(options: ResizeEngineOptions): ResizeEngine {\n let activeHandle: ResizeHandle = 'se';\n let startPointer: Point = { x: 0, y: 0 };\n let startPosition: Point = { x: 0, y: 0 };\n let startSize: Size = { width: 0, height: 0 };\n let affectsWest = false;\n let affectsNorth = false;\n let affectsWidth = true;\n let affectsHeight = true;\n\n return {\n begin(handle, pointer, pointerEvent) {\n activeHandle = handle;\n affectsWest = WEST_HANDLES.includes(handle);\n affectsNorth = NORTH_HANDLES.includes(handle);\n affectsWidth = !VERTICAL_ONLY_HANDLES.includes(handle);\n affectsHeight = !HORIZONTAL_ONLY_HANDLES.includes(handle);\n startPointer = pointer;\n startPosition = options.getPosition();\n startSize = options.getSize();\n return { size: startSize, position: startPosition, handle, pointerEvent };\n },\n\n move(pointer, pointerEvent) {\n const dx = pointer.x - startPointer.x;\n const dy = pointer.y - startPointer.y;\n\n let x = startPosition.x;\n let y = startPosition.y;\n\n const width = affectsWidth\n ? (affectsWest ? startSize.width - dx : startSize.width + dx)\n : startSize.width;\n const height = affectsHeight\n ? (affectsNorth ? startSize.height - dy : startSize.height + dy)\n : startSize.height;\n\n const clampedWidth = clamp(width, options.minWidth, Math.max(options.minWidth, options.maxWidth));\n const clampedHeight = clamp(height, options.minHeight, Math.max(options.minHeight, options.maxHeight));\n\n // Keep the opposite edge visually anchored after size clamping.\n if (affectsWest) x = startPosition.x + (startSize.width - clampedWidth);\n if (affectsNorth) y = startPosition.y + (startSize.height - clampedHeight);\n\n let nextSize: Size = { width: clampedWidth, height: clampedHeight };\n let nextPosition: Point = constrainToBounds({ x, y }, nextSize, options.bounds, options.element);\n\n for (const plugin of options.plugins) {\n if (!plugin.onResize) continue;\n const result = plugin.onResize(\n { size: nextSize, position: nextPosition, handle: activeHandle, pointerEvent },\n options.pluginContext\n );\n if (result) {\n nextSize = result.size;\n nextPosition = result.position;\n }\n }\n\n return {\n position: nextPosition,\n size: nextSize,\n data: { size: nextSize, position: nextPosition, handle: activeHandle, pointerEvent },\n };\n },\n\n end(pointer, pointerEvent) {\n return {\n size: options.getSize(),\n position: options.getPosition(),\n handle: activeHandle,\n pointerEvent,\n };\n },\n };\n}\n","import type { Point, ResizeHandle, DragEventData, ResizeEventData } from './types';\nimport type { DragEngine, DragMoveResult } from '../engine/drag';\nimport type { ResizeEngine, ResizeMoveResult } from '../engine/resize';\n\nexport type ActiveInteraction = 'drag' | 'resize' | null;\n\nexport interface InteractionManagerOptions {\n element: HTMLElement;\n\n dragEngine: DragEngine;\n resizeEngine: ResizeEngine;\n\n resolveResizeHandle(target: EventTarget | null): ResizeHandle | null;\n isDragTarget(target: EventTarget | null): boolean;\n\n onDragStart(data: DragEventData): void;\n onDragMove(result: DragMoveResult): void;\n onDragEnd(data: DragEventData): void;\n\n onResizeStart(data: ResizeEventData): void;\n onResizeMove(result: ResizeMoveResult): void;\n onResizeEnd(data: ResizeEventData): void;\n}\n\nfunction toPoint(event: PointerEvent): Point {\n return { x: event.clientX, y: event.clientY };\n}\n\nexport class InteractionManager {\n private readonly options: InteractionManagerOptions;\n private activePointerId: number | null = null;\n private captureTarget: Element | null = null;\n private _active: ActiveInteraction = null;\n private destroyed = false;\n\n constructor(options: InteractionManagerOptions) {\n this.options = options;\n this.options.element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n get active(): ActiveInteraction {\n return this._active;\n }\n\n startDrag(event: PointerEvent): void {\n if (this.destroyed || this._active !== null) return;\n this._active = 'drag';\n this.captureGesture(event);\n const data = this.options.dragEngine.begin(toPoint(event), event);\n this.options.onDragStart(data);\n }\n\n startResize(handle: ResizeHandle, event: PointerEvent): void {\n if (this.destroyed || this._active !== null) return;\n this._active = 'resize';\n this.captureGesture(event);\n const data = this.options.resizeEngine.begin(handle, toPoint(event), event);\n this.options.onResizeStart(data);\n }\n\n cancel(): void {\n this.teardown();\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.options.element.removeEventListener('pointerdown', this.handlePointerDown);\n this.teardown();\n }\n\n private captureGesture(event: PointerEvent): void {\n this.activePointerId = event.pointerId;\n this.captureTarget = event.target instanceof Element ? event.target : this.options.element;\n\n try {\n this.captureTarget.setPointerCapture?.(event.pointerId);\n } catch {\n // Capture can fail after cancel/detach; window listeners still continue.\n }\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n window.addEventListener('pointercancel', this.handlePointerUp);\n }\n\n private teardown(): void {\n if (this.activePointerId !== null && this.captureTarget) {\n try {\n this.captureTarget.releasePointerCapture?.(this.activePointerId);\n } catch {\n // Release must stay best-effort during teardown.\n }\n }\n\n this.activePointerId = null;\n this.captureTarget = null;\n this._active = null;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n window.removeEventListener('pointercancel', this.handlePointerUp);\n }\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (this.destroyed || this._active !== null) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n // Resize handles must win over drag handles.\n const resizeHandle = this.options.resolveResizeHandle(event.target);\n if (resizeHandle) {\n event.preventDefault();\n event.stopPropagation();\n this.startResize(resizeHandle, event);\n return;\n }\n\n if (this.options.isDragTarget(event.target)) {\n this.startDrag(event);\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (this.destroyed || event.pointerId !== this.activePointerId) return;\n\n if (this._active === 'drag') {\n this.options.onDragMove(this.options.dragEngine.move(toPoint(event), event));\n } else if (this._active === 'resize') {\n this.options.onResizeMove(this.options.resizeEngine.move(toPoint(event), event));\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (this.destroyed || event.pointerId !== this.activePointerId) return;\n\n if (this._active === 'drag') {\n this.options.onDragEnd(this.options.dragEngine.end(toPoint(event), event));\n } else if (this._active === 'resize') {\n this.options.onResizeEnd(this.options.resizeEngine.end(toPoint(event), event));\n }\n\n this.teardown();\n };\n}\n\nexport function createInteractionManager(options: InteractionManagerOptions): InteractionManager {\n return new InteractionManager(options);\n}\n","import type { Point, PositioningMode, Size } from '../core/types';\n\nexport interface BaseStyleOptions {\n positioning: PositioningMode;\n forcePositioning?: boolean;\n}\n\nexport interface PositionRenderer {\n positioning: PositioningMode;\n origin: Point;\n baseTransform: string;\n flowRelative: boolean;\n}\n\nexport function applyBaseStyles(element: HTMLElement, options: BaseStyleOptions): void {\n const style = element.style;\n const computedPosition = window.getComputedStyle?.(element).position ?? style.position;\n\n if (options.forcePositioning || computedPosition === 'static') {\n style.position = options.positioning;\n }\n\n if (!style.touchAction) style.touchAction = 'none';\n if (!style.userSelect) style.userSelect = 'none';\n if (!style.boxSizing) style.boxSizing = 'border-box';\n if (!style.willChange) style.willChange = 'transform';\n}\n\nexport function readRenderedPosition(element: HTMLElement, positioning: PositioningMode): Point {\n const rect = element.getBoundingClientRect();\n\n if (positioning === 'fixed') {\n return { x: rect.left || 0, y: rect.top || 0 };\n }\n\n if (positioning === 'absolute') {\n const parent = element.offsetParent as HTMLElement | null;\n\n if (parent) {\n const parentRect = parent.getBoundingClientRect();\n return {\n x: (rect.left || 0) - (parentRect.left || 0) + (parent.scrollLeft || 0),\n y: (rect.top || 0) - (parentRect.top || 0) + (parent.scrollTop || 0),\n };\n }\n\n return {\n x: (rect.left || 0) + (window.scrollX || 0),\n y: (rect.top || 0) + (window.scrollY || 0),\n };\n }\n\n // Normal-flow windows move relative to their original rendered position.\n return { x: rect.left || 0, y: rect.top || 0 };\n}\n\nexport function createPositionRenderer(\n element: HTMLElement,\n positioning: PositioningMode,\n initialPosition: Point\n): PositionRenderer {\n const baseTransform = normalizeTransform(element.style.transform);\n\n if (positioning === 'relative') {\n return {\n positioning,\n origin: readRenderedPosition(element, positioning),\n baseTransform,\n flowRelative: true,\n };\n }\n\n // Normalize right/bottom anchored CSS to left/top once for stable resizing.\n element.style.left = `${initialPosition.x}px`;\n element.style.top = `${initialPosition.y}px`;\n element.style.right = 'auto';\n element.style.bottom = 'auto';\n\n return {\n positioning,\n origin: { ...initialPosition },\n baseTransform: '',\n flowRelative: false,\n };\n}\n\nexport function writePosition(element: HTMLElement, point: Point, renderer: PositionRenderer): void {\n const dx = point.x - renderer.origin.x;\n const dy = point.y - renderer.origin.y;\n const translate = dx === 0 && dy === 0 ? '' : `translate3d(${dx}px, ${dy}px, 0)`;\n element.style.transform = joinTransforms(renderer.baseTransform, translate);\n}\n\nexport function writeSize(element: HTMLElement, size: Size): void {\n element.style.width = `${size.width}px`;\n element.style.height = `${size.height}px`;\n}\n\nfunction normalizeTransform(value: string | undefined): string {\n if (!value || value === 'none') return '';\n return value.trim();\n}\n\nfunction joinTransforms(base: string, translate: string): string {\n if (base && translate) return `${base} ${translate}`;\n if (base) return base;\n return translate;\n}\n","import type { ResizeHandle } from '../core/types';\n\nconst CORNER_SIZE_PX = 14;\nconst EDGE_THICKNESS_PX = 8;\n\nconst EDGE_STYLES: Record<ResizeHandle, Partial<CSSStyleDeclaration>> = {\n nw: { top: '0', left: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nwse-resize' },\n ne: { top: '0', right: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nesw-resize' },\n sw: { bottom: '0', left: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nesw-resize' },\n se: { bottom: '0', right: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nwse-resize' },\n\n n: { top: '0', left: `${CORNER_SIZE_PX}px`, right: `${CORNER_SIZE_PX}px`, height: `${EDGE_THICKNESS_PX}px`, cursor: 'ns-resize' },\n s: { bottom: '0', left: `${CORNER_SIZE_PX}px`, right: `${CORNER_SIZE_PX}px`, height: `${EDGE_THICKNESS_PX}px`, cursor: 'ns-resize' },\n e: { right: '0', top: `${CORNER_SIZE_PX}px`, bottom: `${CORNER_SIZE_PX}px`, width: `${EDGE_THICKNESS_PX}px`, cursor: 'ew-resize' },\n w: { left: '0', top: `${CORNER_SIZE_PX}px`, bottom: `${CORNER_SIZE_PX}px`, width: `${EDGE_THICKNESS_PX}px`, cursor: 'ew-resize' },\n};\n\nexport function createResizeHandle(handle: ResizeHandle): HTMLElement {\n const el = document.createElement('div');\n el.dataset.freedomResizeHandle = handle;\n el.className = `freedom-resize-handle freedom-resize-handle--${handle}`;\n\n Object.assign(el.style, {\n position: 'absolute',\n boxSizing: 'border-box',\n touchAction: 'none',\n userSelect: 'none',\n pointerEvents: 'auto',\n zIndex: '1',\n ...EDGE_STYLES[handle],\n });\n\n return el;\n}\n","export interface FrameScheduler {\n schedule(): void;\n cancel(): void;\n}\n\nexport function createFrameScheduler(flush: () => void): FrameScheduler {\n let frameHandle: number | null = null;\n\n return {\n schedule(): void {\n if (frameHandle !== null) return;\n frameHandle = requestAnimationFrame(() => {\n frameHandle = null;\n flush();\n });\n },\n cancel(): void {\n if (frameHandle !== null) {\n cancelAnimationFrame(frameHandle);\n frameHandle = null;\n }\n },\n };\n}\n","import type {\n BoundsOption,\n FreedomPlugin,\n FreedomWindow,\n FreedomWindowOptions,\n InitialPosition,\n Point,\n PositioningMode,\n PluginContext,\n ResizeHandle,\n Size,\n WindowEventMap,\n} from '../core/types';\nimport { Emitter } from '../core/events';\nimport { clampSize, type SizeLimits } from '../core/math';\nimport { createDragEngine } from '../engine/drag';\nimport { createResizeEngine } from '../engine/resize';\nimport { createInteractionManager } from '../core/interaction-manager';\nimport {\n applyBaseStyles,\n createPositionRenderer,\n readRenderedPosition,\n writePosition,\n writeSize,\n} from '../dom/render';\nimport { createResizeHandle } from '../dom/handles';\nimport { createFrameScheduler } from '../dom/scheduler';\n\nconst ALL_HANDLES: readonly ResizeHandle[] = ['n', 's', 'e', 'w', 'nw', 'ne', 'sw', 'se'];\nconst instances = new WeakMap<HTMLElement, FreedomWindow>();\n\nlet autoId = 0;\n\nexport function createWindow(element: HTMLElement, options: FreedomWindowOptions = {}): FreedomWindow {\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n throw new Error('freedom.window() requires a browser environment. Importing is SSR-safe, but creating a window must run in the browser.');\n }\n\n assertHTMLElement(element);\n\n if (instances.has(element)) {\n throw new Error('freedom.window() was called more than once for the same element. Destroy the existing instance before creating a new one.');\n }\n\n const id = options.id ?? `freedom-window-${++autoId}`;\n const emitter = new Emitter<WindowEventMap>();\n const plugins: readonly FreedomPlugin[] = options.plugins ?? [];\n const limits = normalizeSizeLimits(options);\n const positioning = resolvePositioning(element, options);\n\n // Initialization stays synchronous to prevent top-left first paint.\n applyBaseStyles(element, {\n positioning,\n forcePositioning: shouldForcePositioning(element, options),\n });\n\n let size: Size = clampSize(sanitizeSize(options.initialSize ?? readInitialSize(element), 'initialSize'), limits);\n let position: Point = resolveInitialPosition(options.initialPosition, element, size, options.bounds, positioning);\n const renderer = createPositionRenderer(element, positioning, position);\n let zIndex = normalizeZIndex(options.zIndex ?? 0);\n let focused = false;\n let isDraggable = options.draggable ?? true;\n let isDestroyed = false;\n\n writeSize(element, size);\n writePosition(element, position, renderer);\n if (zIndex) element.style.zIndex = String(zIndex);\n revealIfRequested(element, options);\n\n let pendingPosition: Point | null = null;\n let pendingSize: Size | null = null;\n\n const scheduler = createFrameScheduler(() => {\n if (isDestroyed) return;\n\n if (pendingPosition) {\n writePosition(element, pendingPosition, renderer);\n pendingPosition = null;\n }\n if (pendingSize) {\n writeSize(element, pendingSize);\n pendingSize = null;\n }\n });\n\n function paint(nextPosition?: Point, nextSize?: Size): void {\n if (nextPosition) pendingPosition = nextPosition;\n if (nextSize) pendingSize = nextSize;\n scheduler.schedule();\n }\n\n function assertAlive(method: string): void {\n if (isDestroyed) {\n throw new Error(`Cannot call ${method}() on a destroyed freedom window.`);\n }\n }\n\n const pluginContext: PluginContext = {\n element,\n get window(): FreedomWindow {\n return api;\n },\n };\n\n const dragHandleElement = resolveDragHandle(element, options.dragHandle);\n\n function isDragTarget(target: EventTarget | null): boolean {\n if (!isDraggable || !dragHandleElement) return false;\n if (!(target instanceof Node)) return false;\n return dragHandleElement === target || dragHandleElement.contains(target);\n }\n\n const dragEngine = createDragEngine({\n element,\n bounds: options.bounds,\n plugins,\n pluginContext,\n getPosition: () => position,\n getSize: () => size,\n });\n\n const resizeHandleElements = new Map<ResizeHandle, HTMLElement>();\n\n function resolveResizeHandle(target: EventTarget | null): ResizeHandle | null {\n if (!(target instanceof Element)) return null;\n const handleEl = target.closest<HTMLElement>('.freedom-resize-handle');\n if (!handleEl) return null;\n\n for (const [handle, el] of resizeHandleElements) {\n if (el === handleEl) return handle;\n }\n\n return null;\n }\n\n const resizeEngine = createResizeEngine({\n element,\n bounds: options.bounds,\n ...limits,\n plugins,\n pluginContext,\n getPosition: () => position,\n getSize: () => size,\n });\n\n function setupResizeHandles(handles: readonly ResizeHandle[]): void {\n const normalizedHandles = normalizeResizeHandles(handles);\n for (const handle of normalizedHandles) {\n if (resizeHandleElements.has(handle)) continue;\n const handleEl = createResizeHandle(handle);\n element.appendChild(handleEl);\n resizeHandleElements.set(handle, handleEl);\n }\n }\n\n function teardownResizeHandles(handles: readonly ResizeHandle[] = ALL_HANDLES): void {\n for (const handle of handles) {\n const handleEl = resizeHandleElements.get(handle);\n if (handleEl) {\n handleEl.remove();\n resizeHandleElements.delete(handle);\n }\n }\n }\n\n const interactionManager = createInteractionManager({\n element,\n dragEngine,\n resizeEngine,\n resolveResizeHandle,\n isDragTarget,\n\n onDragStart(data) {\n element.classList.add('freedom-dragging');\n emitter.emit('dragstart', data);\n },\n onDragMove({ position: next, data }) {\n position = next;\n paint(position);\n emitter.emit('drag', data);\n },\n onDragEnd(data) {\n element.classList.remove('freedom-dragging');\n emitter.emit('dragend', data);\n },\n\n onResizeStart(data) {\n element.classList.add('freedom-resizing');\n emitter.emit('resizestart', data);\n },\n onResizeMove({ position: nextPosition, size: nextSize, data }) {\n position = nextPosition;\n size = nextSize;\n paint(position, size);\n emitter.emit('resize', data);\n },\n onResizeEnd(data) {\n element.classList.remove('freedom-resizing');\n emitter.emit('resizeend', data);\n },\n });\n\n const initialResizeHandles = resolveEnabledHandles(options.resizable ?? true);\n if (initialResizeHandles.length > 0) setupResizeHandles(initialResizeHandles);\n\n const api: FreedomWindow = {\n id,\n element,\n\n getPosition(): Point {\n assertAlive('getPosition');\n return { ...position };\n },\n\n getSize(): Size {\n assertAlive('getSize');\n return { ...size };\n },\n\n setPosition(point: Point): void {\n assertAlive('setPosition');\n position = sanitizePoint(point, 'setPosition');\n paint(position);\n },\n\n setSize(nextSize: Size): void {\n assertAlive('setSize');\n size = clampSize(sanitizeSize(nextSize, 'setSize'), limits);\n paint(undefined, size);\n },\n\n focus(): void {\n assertAlive('focus');\n if (focused) return;\n focused = true;\n element.classList.add('freedom-focused');\n emitter.emit('focus', undefined);\n options.onFocus?.();\n },\n\n blur(): void {\n assertAlive('blur');\n if (!focused) return;\n focused = false;\n element.classList.remove('freedom-focused');\n emitter.emit('blur', undefined);\n options.onBlur?.();\n },\n\n isFocused(): boolean {\n assertAlive('isFocused');\n return focused;\n },\n\n setZIndex(next: number): void {\n assertAlive('setZIndex');\n zIndex = normalizeZIndex(next);\n element.style.zIndex = String(zIndex);\n },\n\n getZIndex(): number {\n assertAlive('getZIndex');\n return zIndex;\n },\n\n enableDrag(): void {\n assertAlive('enableDrag');\n isDraggable = true;\n },\n\n disableDrag(): void {\n assertAlive('disableDrag');\n isDraggable = false;\n if (interactionManager.active === 'drag') {\n interactionManager.cancel();\n element.classList.remove('freedom-dragging');\n }\n },\n\n enableResize(handles: ResizeHandle[] = ALL_HANDLES as ResizeHandle[]): void {\n assertAlive('enableResize');\n setupResizeHandles(handles);\n },\n\n disableResize(): void {\n assertAlive('disableResize');\n if (interactionManager.active === 'resize') {\n interactionManager.cancel();\n element.classList.remove('freedom-resizing');\n }\n teardownResizeHandles();\n },\n\n destroy(): void {\n if (isDestroyed) return;\n isDestroyed = true;\n interactionManager.destroy();\n teardownResizeHandles();\n scheduler.cancel();\n element.classList.remove('freedom-dragging', 'freedom-resizing', 'freedom-focused');\n for (const plugin of plugins) plugin.onDestroy?.(pluginContext);\n emitter.emit('destroy', undefined);\n emitter.clear();\n instances.delete(element);\n },\n\n on(event, handler) {\n assertAlive('on');\n return emitter.on(event, handler);\n },\n };\n\n instances.set(element, api);\n\n if (options.onDragStart) api.on('dragstart', options.onDragStart);\n if (options.onDrag) api.on('drag', options.onDrag);\n if (options.onDragEnd) api.on('dragend', options.onDragEnd);\n if (options.onResizeStart) api.on('resizestart', options.onResizeStart);\n if (options.onResize) api.on('resize', options.onResize);\n if (options.onResizeEnd) api.on('resizeend', options.onResizeEnd);\n\n for (const plugin of plugins) plugin.onInit?.(pluginContext);\n\n return api;\n}\n\nfunction assertHTMLElement(element: unknown): asserts element is HTMLElement {\n const maybeElement = element as Partial<HTMLElement> | null | undefined;\n const isUsableElement =\n !!maybeElement &&\n typeof maybeElement === 'object' &&\n (maybeElement as { nodeType?: number }).nodeType === 1 &&\n typeof maybeElement.getBoundingClientRect === 'function' &&\n !!maybeElement.style &&\n typeof maybeElement.addEventListener === 'function' &&\n typeof maybeElement.removeEventListener === 'function';\n\n if (!isUsableElement) {\n throw new TypeError('freedom.window(element) expected a real HTMLElement. Received null, undefined, or a non-element value.');\n }\n}\n\nfunction normalizeSizeLimits(options: FreedomWindowOptions): SizeLimits {\n const minWidth = finiteNonNegative(options.minWidth, 0);\n const minHeight = finiteNonNegative(options.minHeight, 0);\n const maxWidth = finitePositiveOrInfinity(options.maxWidth, Infinity);\n const maxHeight = finitePositiveOrInfinity(options.maxHeight, Infinity);\n\n return {\n minWidth,\n minHeight,\n maxWidth: Math.max(minWidth, maxWidth),\n maxHeight: Math.max(minHeight, maxHeight),\n };\n}\n\nfunction finiteNonNegative(value: number | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction finitePositiveOrInfinity(value: number | undefined, fallback: number): number {\n if (value === Infinity) return Infinity;\n return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction normalizeZIndex(value: number): number {\n return Number.isFinite(value) ? Math.trunc(value) : 0;\n}\n\nfunction sanitizePoint(point: Point, source: string): Point {\n if (!point || typeof point.x !== 'number' || typeof point.y !== 'number' || !Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n throw new TypeError(`freedom.window(): ${source} expected a finite { x, y } point.`);\n }\n return { x: point.x, y: point.y };\n}\n\nfunction sanitizeSize(size: Size, source: string): Size {\n if (!size || typeof size.width !== 'number' || typeof size.height !== 'number' || !Number.isFinite(size.width) || !Number.isFinite(size.height)) {\n throw new TypeError(`freedom.window(): ${source} expected a finite { width, height } size.`);\n }\n return { width: Math.max(0, size.width), height: Math.max(0, size.height) };\n}\n\nfunction shouldForcePositioning(element: HTMLElement, options: FreedomWindowOptions): boolean {\n const computed = window.getComputedStyle(element).position;\n return Boolean(options.positioning) || computed === 'static';\n}\n\nfunction resolvePositioning(element: HTMLElement, options: FreedomWindowOptions): PositioningMode {\n if (options.positioning) return options.positioning;\n\n const computed = window.getComputedStyle(element);\n if (computed.position === 'fixed') return 'fixed';\n if (computed.position === 'absolute') return 'absolute';\n if (computed.position === 'relative' || computed.position === 'sticky') return 'relative';\n\n if (hasAuthoredInset(computed)) return 'fixed';\n\n if (options.initialPosition !== undefined) {\n return options.bounds === 'parent' ? 'absolute' : 'fixed';\n }\n\n return 'relative';\n}\n\nfunction hasAuthoredInset(style: CSSStyleDeclaration): boolean {\n return [style.top, style.right, style.bottom, style.left].some((value) => {\n if (!value || value === 'auto') return false;\n return value !== '0px' && value !== '0';\n });\n}\n\nfunction resolveInitialPosition(\n initialPosition: InitialPosition | undefined,\n element: HTMLElement,\n size: Size,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): Point {\n if (initialPosition === 'center') {\n return centerPosition(element, size, bounds, positioning);\n }\n\n if (initialPosition) {\n return sanitizePoint(initialPosition, 'initialPosition');\n }\n\n return readRenderedPosition(element, positioning);\n}\n\nfunction centerPosition(\n element: HTMLElement,\n size: Size,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): Point {\n const box = resolveCenterBox(element, bounds, positioning);\n\n return {\n x: Math.round(box.x + Math.max(0, box.width - size.width) / 2),\n y: Math.round(box.y + Math.max(0, box.height - size.height) / 2),\n };\n}\n\nfunction resolveCenterBox(\n element: HTMLElement,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): { x: number; y: number; width: number; height: number } {\n if (bounds && typeof bounds === 'object') {\n return { x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height };\n }\n\n if (bounds === 'parent') {\n const parent = element.offsetParent as HTMLElement | null;\n if (parent) return { x: 0, y: 0, width: parent.clientWidth, height: parent.clientHeight };\n }\n\n if (positioning === 'absolute' && bounds !== 'viewport') {\n const parent = element.offsetParent as HTMLElement | null;\n if (parent) return { x: 0, y: 0, width: parent.clientWidth, height: parent.clientHeight };\n }\n\n const root = document.documentElement;\n return {\n x: 0,\n y: 0,\n width: window.innerWidth || root.clientWidth,\n height: window.innerHeight || root.clientHeight,\n };\n}\n\nfunction readInitialSize(element: HTMLElement): Size {\n const rect = element.getBoundingClientRect();\n return {\n width: rect.width || element.offsetWidth || 0,\n height: rect.height || element.offsetHeight || 0,\n };\n}\n\nfunction revealIfRequested(element: HTMLElement, options: FreedomWindowOptions): void {\n if (options.autoReveal === false) return;\n const visibility = window.getComputedStyle(element).visibility;\n if (visibility === 'hidden') {\n element.style.visibility = 'visible';\n }\n}\n\nfunction resolveDragHandle(\n element: HTMLElement,\n handleOption: FreedomWindowOptions['dragHandle']\n): HTMLElement | null {\n if (handleOption === null) return null;\n if (handleOption === undefined) return element;\n if (typeof handleOption === 'string') return element.querySelector<HTMLElement>(handleOption);\n return handleOption;\n}\n\nfunction resolveEnabledHandles(option: NonNullable<FreedomWindowOptions['resizable']>): ResizeHandle[] {\n if (option === false) return [];\n if (option === true) return [...ALL_HANDLES];\n return normalizeResizeHandles(option);\n}\n\nfunction normalizeResizeHandles(handles: readonly ResizeHandle[]): ResizeHandle[] {\n const unique = new Set<ResizeHandle>();\n\n for (const handle of handles) {\n if (!ALL_HANDLES.includes(handle)) {\n throw new TypeError(`freedom.window(): invalid resize handle \"${String(handle)}\".`);\n }\n unique.add(handle);\n }\n\n return [...unique];\n}\n","import { createWindow } from './runtime/window';\n\nexport const freedom = {\n window: createWindow,\n};\n\nexport default freedom;\n\nexport { createWindow };\nexport { createWindow as window };\n\nexport type {\n Point,\n Size,\n Rect,\n Bounds,\n BoundsOption,\n ResizeHandle,\n InitialPosition,\n PositioningMode,\n DragEventData,\n ResizeEventData,\n WindowEventMap,\n ManagerEventMap,\n FreedomPlugin,\n PluginContext,\n FreedomWindow,\n FreedomWindowOptions,\n FreedomManager,\n FreedomManagerOptions,\n} from './core/types';\n"]}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/events.ts","../src/core/math.ts","../src/engine/constraints.ts","../src/engine/drag.ts","../src/engine/resize.ts","../src/core/interaction-manager.ts","../src/dom/render.ts","../src/dom/handles.ts","../src/dom/scheduler.ts","../src/runtime/window.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type Handler<T> = (data: T) => void;\n\nexport class Emitter<EventMap extends object> {\n private readonly listeners = new Map<keyof EventMap, Set<Handler<unknown>>>();\n\n on<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): () => void {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(handler as Handler<unknown>);\n return () => this.off(event, handler);\n }\n\n off<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): void {\n this.listeners.get(event)?.delete(handler as Handler<unknown>);\n }\n\n emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void {\n const set = this.listeners.get(event);\n if (!set || set.size === 0) return;\n\n // Snapshot so listeners can unsubscribe during emit.\n for (const handler of [...set]) {\n (handler as Handler<EventMap[K]>)(data);\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import type { Bounds, Point, Size } from './types';\n\nexport function clamp(value: number, min: number, max: number): number {\n if (min > max) return min;\n return Math.min(Math.max(value, min), max);\n}\n\nexport interface SizeLimits {\n minWidth: number;\n minHeight: number;\n maxWidth: number;\n maxHeight: number;\n}\n\nexport function clampSize(size: Size, limits: SizeLimits): Size {\n return {\n width: clamp(size.width, limits.minWidth, Math.max(limits.minWidth, limits.maxWidth)),\n height: clamp(size.height, limits.minHeight, Math.max(limits.minHeight, limits.maxHeight)),\n };\n}\n\nexport function clampPointToBounds(point: Point, size: Size, bounds: Bounds): Point {\n const maxX = Math.max(bounds.minX, bounds.maxX - size.width);\n const maxY = Math.max(bounds.minY, bounds.maxY - size.height);\n return {\n x: clamp(point.x, bounds.minX, maxX),\n y: clamp(point.y, bounds.minY, maxY),\n };\n}\n","import type { Bounds, BoundsOption, Point, Size } from '../core/types';\nimport { clampPointToBounds, clampSize, type SizeLimits } from '../core/math';\n\nexport { clampPointToBounds, clampSize };\nexport type { SizeLimits };\n\nexport function resolveBounds(\n option: BoundsOption | undefined,\n element: HTMLElement\n): Bounds | null {\n if (!option || option === 'none') return null;\n\n if (option === 'viewport') {\n return { minX: 0, minY: 0, maxX: window.innerWidth, maxY: window.innerHeight };\n }\n\n if (option === 'parent') {\n const parent = element.offsetParent as HTMLElement | null;\n if (!parent) return null;\n return { minX: 0, minY: 0, maxX: parent.clientWidth, maxY: parent.clientHeight };\n }\n\n return {\n minX: option.x,\n minY: option.y,\n maxX: option.x + option.width,\n maxY: option.y + option.height,\n };\n}\n\nexport function constrainToBounds(\n point: Point,\n size: Size,\n option: BoundsOption | undefined,\n element: HTMLElement\n): Point {\n const bounds = resolveBounds(option, element);\n return bounds ? clampPointToBounds(point, size, bounds) : point;\n}\n","import type {\n BoundsOption,\n DragEventData,\n FreedomPlugin,\n Point,\n PluginContext,\n Size,\n} from '../core/types';\nimport { constrainToBounds } from './constraints';\n\nexport interface DragEngineOptions {\n element: HTMLElement;\n bounds: BoundsOption | undefined;\n plugins: readonly FreedomPlugin[];\n pluginContext: PluginContext;\n getPosition(): Point;\n getSize(): Size;\n}\n\nexport interface DragMoveResult {\n position: Point;\n data: DragEventData;\n}\n\nexport interface DragEngine {\n begin(pointer: Point, pointerEvent: PointerEvent): DragEventData;\n move(pointer: Point, pointerEvent: PointerEvent): DragMoveResult;\n end(pointer: Point, pointerEvent: PointerEvent): DragEventData;\n}\n\nexport function createDragEngine(options: DragEngineOptions): DragEngine {\n let startPointer: Point = { x: 0, y: 0 };\n let startPosition: Point = { x: 0, y: 0 };\n\n return {\n begin(pointer, pointerEvent) {\n startPointer = pointer;\n startPosition = options.getPosition();\n return { position: startPosition, delta: { x: 0, y: 0 }, pointerEvent };\n },\n\n move(pointer, pointerEvent) {\n const delta: Point = {\n x: pointer.x - startPointer.x,\n y: pointer.y - startPointer.y,\n };\n\n let next: Point = { x: startPosition.x + delta.x, y: startPosition.y + delta.y };\n next = constrainToBounds(next, options.getSize(), options.bounds, options.element);\n\n for (const plugin of options.plugins) {\n if (!plugin.onDrag) continue;\n const result = plugin.onDrag(\n { position: next, delta, pointerEvent },\n options.pluginContext\n );\n if (result) next = result;\n }\n\n return { position: next, data: { position: next, delta, pointerEvent } };\n },\n\n end(pointer, pointerEvent) {\n const delta: Point = {\n x: pointer.x - startPointer.x,\n y: pointer.y - startPointer.y,\n };\n return { position: options.getPosition(), delta, pointerEvent };\n },\n };\n}\n","import type {\n BoundsOption,\n FreedomPlugin,\n Point,\n PluginContext,\n ResizeEventData,\n ResizeHandle,\n Size,\n} from '../core/types';\nimport { clamp } from '../core/math';\nimport { constrainToBounds, type SizeLimits } from './constraints';\n\nexport interface ResizeEngineOptions extends SizeLimits {\n element: HTMLElement;\n bounds: BoundsOption | undefined;\n plugins: readonly FreedomPlugin[];\n pluginContext: PluginContext;\n getPosition(): Point;\n getSize(): Size;\n}\n\nexport interface ResizeMoveResult {\n position: Point;\n size: Size;\n data: ResizeEventData;\n}\n\nexport interface ResizeEngine {\n begin(handle: ResizeHandle, pointer: Point, pointerEvent: PointerEvent): ResizeEventData;\n move(pointer: Point, pointerEvent: PointerEvent): ResizeMoveResult;\n end(pointer: Point, pointerEvent: PointerEvent): ResizeEventData;\n}\n\nconst WEST_HANDLES: readonly ResizeHandle[] = ['nw', 'w', 'sw'];\nconst NORTH_HANDLES: readonly ResizeHandle[] = ['nw', 'n', 'ne'];\nconst VERTICAL_ONLY_HANDLES: readonly ResizeHandle[] = ['n', 's'];\nconst HORIZONTAL_ONLY_HANDLES: readonly ResizeHandle[] = ['e', 'w'];\n\nexport function createResizeEngine(options: ResizeEngineOptions): ResizeEngine {\n let activeHandle: ResizeHandle = 'se';\n let startPointer: Point = { x: 0, y: 0 };\n let startPosition: Point = { x: 0, y: 0 };\n let startSize: Size = { width: 0, height: 0 };\n let affectsWest = false;\n let affectsNorth = false;\n let affectsWidth = true;\n let affectsHeight = true;\n\n return {\n begin(handle, pointer, pointerEvent) {\n activeHandle = handle;\n affectsWest = WEST_HANDLES.includes(handle);\n affectsNorth = NORTH_HANDLES.includes(handle);\n affectsWidth = !VERTICAL_ONLY_HANDLES.includes(handle);\n affectsHeight = !HORIZONTAL_ONLY_HANDLES.includes(handle);\n startPointer = pointer;\n startPosition = options.getPosition();\n startSize = options.getSize();\n return { size: startSize, position: startPosition, handle, pointerEvent };\n },\n\n move(pointer, pointerEvent) {\n const dx = pointer.x - startPointer.x;\n const dy = pointer.y - startPointer.y;\n\n let x = startPosition.x;\n let y = startPosition.y;\n\n const width = affectsWidth\n ? (affectsWest ? startSize.width - dx : startSize.width + dx)\n : startSize.width;\n const height = affectsHeight\n ? (affectsNorth ? startSize.height - dy : startSize.height + dy)\n : startSize.height;\n\n const clampedWidth = clamp(width, options.minWidth, Math.max(options.minWidth, options.maxWidth));\n const clampedHeight = clamp(height, options.minHeight, Math.max(options.minHeight, options.maxHeight));\n\n // Keep the opposite edge visually anchored after size clamping.\n if (affectsWest) x = startPosition.x + (startSize.width - clampedWidth);\n if (affectsNorth) y = startPosition.y + (startSize.height - clampedHeight);\n\n let nextSize: Size = { width: clampedWidth, height: clampedHeight };\n let nextPosition: Point = constrainToBounds({ x, y }, nextSize, options.bounds, options.element);\n\n for (const plugin of options.plugins) {\n if (!plugin.onResize) continue;\n const result = plugin.onResize(\n { size: nextSize, position: nextPosition, handle: activeHandle, pointerEvent },\n options.pluginContext\n );\n if (result) {\n nextSize = result.size;\n nextPosition = result.position;\n }\n }\n\n return {\n position: nextPosition,\n size: nextSize,\n data: { size: nextSize, position: nextPosition, handle: activeHandle, pointerEvent },\n };\n },\n\n end(pointer, pointerEvent) {\n return {\n size: options.getSize(),\n position: options.getPosition(),\n handle: activeHandle,\n pointerEvent,\n };\n },\n };\n}\n","import type { Point, ResizeHandle, DragEventData, ResizeEventData } from './types';\nimport type { DragEngine, DragMoveResult } from '../engine/drag';\nimport type { ResizeEngine, ResizeMoveResult } from '../engine/resize';\n\nexport type ActiveInteraction = 'drag' | 'resize' | null;\n\nexport interface InteractionManagerOptions {\n element: HTMLElement;\n\n dragEngine: DragEngine;\n resizeEngine: ResizeEngine;\n\n resolveResizeHandle(target: EventTarget | null): ResizeHandle | null;\n isDragTarget(target: EventTarget | null): boolean;\n\n onDragStart(data: DragEventData): void;\n onDragMove(result: DragMoveResult): void;\n onDragEnd(data: DragEventData): void;\n\n onResizeStart(data: ResizeEventData): void;\n onResizeMove(result: ResizeMoveResult): void;\n onResizeEnd(data: ResizeEventData): void;\n}\n\nfunction toPoint(event: PointerEvent): Point {\n return { x: event.clientX, y: event.clientY };\n}\n\nexport class InteractionManager {\n private readonly options: InteractionManagerOptions;\n private activePointerId: number | null = null;\n private captureTarget: Element | null = null;\n private _active: ActiveInteraction = null;\n private destroyed = false;\n\n constructor(options: InteractionManagerOptions) {\n this.options = options;\n this.options.element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n get active(): ActiveInteraction {\n return this._active;\n }\n\n startDrag(event: PointerEvent): void {\n if (this.destroyed || this._active !== null) return;\n this._active = 'drag';\n this.captureGesture(event);\n const data = this.options.dragEngine.begin(toPoint(event), event);\n this.options.onDragStart(data);\n }\n\n startResize(handle: ResizeHandle, event: PointerEvent): void {\n if (this.destroyed || this._active !== null) return;\n this._active = 'resize';\n this.captureGesture(event);\n const data = this.options.resizeEngine.begin(handle, toPoint(event), event);\n this.options.onResizeStart(data);\n }\n\n cancel(): void {\n this.teardown();\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.options.element.removeEventListener('pointerdown', this.handlePointerDown);\n this.teardown();\n }\n\n private captureGesture(event: PointerEvent): void {\n this.activePointerId = event.pointerId;\n this.captureTarget = event.target instanceof Element ? event.target : this.options.element;\n\n try {\n this.captureTarget.setPointerCapture?.(event.pointerId);\n } catch {\n // Capture can fail after cancel/detach; window listeners still continue.\n }\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n window.addEventListener('pointercancel', this.handlePointerUp);\n }\n\n private teardown(): void {\n if (this.activePointerId !== null && this.captureTarget) {\n try {\n this.captureTarget.releasePointerCapture?.(this.activePointerId);\n } catch {\n // Release must stay best-effort during teardown.\n }\n }\n\n this.activePointerId = null;\n this.captureTarget = null;\n this._active = null;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n window.removeEventListener('pointercancel', this.handlePointerUp);\n }\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (this.destroyed || this._active !== null) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n // Resize handles must win over drag handles.\n const resizeHandle = this.options.resolveResizeHandle(event.target);\n if (resizeHandle) {\n event.preventDefault();\n event.stopPropagation();\n this.startResize(resizeHandle, event);\n return;\n }\n\n if (this.options.isDragTarget(event.target)) {\n this.startDrag(event);\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (this.destroyed || event.pointerId !== this.activePointerId) return;\n\n if (this._active === 'drag') {\n this.options.onDragMove(this.options.dragEngine.move(toPoint(event), event));\n } else if (this._active === 'resize') {\n this.options.onResizeMove(this.options.resizeEngine.move(toPoint(event), event));\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (this.destroyed || event.pointerId !== this.activePointerId) return;\n\n if (this._active === 'drag') {\n this.options.onDragEnd(this.options.dragEngine.end(toPoint(event), event));\n } else if (this._active === 'resize') {\n this.options.onResizeEnd(this.options.resizeEngine.end(toPoint(event), event));\n }\n\n this.teardown();\n };\n}\n\nexport function createInteractionManager(options: InteractionManagerOptions): InteractionManager {\n return new InteractionManager(options);\n}\n","import type { Point, PositioningMode, Size } from '../core/types';\n\nexport interface BaseStyleOptions {\n positioning: PositioningMode;\n forcePositioning?: boolean;\n}\n\nexport interface PositionRenderer {\n positioning: PositioningMode;\n origin: Point;\n baseTransform: string;\n flowRelative: boolean;\n}\n\nexport function applyBaseStyles(element: HTMLElement, options: BaseStyleOptions): void {\n const style = element.style;\n const computedPosition = window.getComputedStyle?.(element).position ?? style.position;\n\n if (options.forcePositioning || computedPosition === 'static') {\n style.position = options.positioning;\n }\n\n if (!style.touchAction) style.touchAction = 'none';\n if (!style.userSelect) style.userSelect = 'none';\n if (!style.boxSizing) style.boxSizing = 'border-box';\n if (!style.willChange) style.willChange = 'transform';\n}\n\nexport function readRenderedPosition(element: HTMLElement, positioning: PositioningMode): Point {\n const rect = element.getBoundingClientRect();\n\n if (positioning === 'fixed') {\n return { x: rect.left || 0, y: rect.top || 0 };\n }\n\n if (positioning === 'absolute') {\n const parent = element.offsetParent as HTMLElement | null;\n\n if (parent) {\n const parentRect = parent.getBoundingClientRect();\n return {\n x: (rect.left || 0) - (parentRect.left || 0) + (parent.scrollLeft || 0),\n y: (rect.top || 0) - (parentRect.top || 0) + (parent.scrollTop || 0),\n };\n }\n\n return {\n x: (rect.left || 0) + (window.scrollX || 0),\n y: (rect.top || 0) + (window.scrollY || 0),\n };\n }\n\n // Normal-flow windows move relative to their original rendered position.\n return { x: rect.left || 0, y: rect.top || 0 };\n}\n\nexport function createPositionRenderer(\n element: HTMLElement,\n positioning: PositioningMode,\n initialPosition: Point\n): PositionRenderer {\n const baseTransform = normalizeTransform(element.style.transform);\n\n if (positioning === 'relative') {\n return {\n positioning,\n origin: readRenderedPosition(element, positioning),\n baseTransform,\n flowRelative: true,\n };\n }\n\n // Normalize right/bottom anchored CSS to left/top once for stable resizing.\n element.style.left = `${initialPosition.x}px`;\n element.style.top = `${initialPosition.y}px`;\n element.style.right = 'auto';\n element.style.bottom = 'auto';\n\n return {\n positioning,\n origin: { ...initialPosition },\n baseTransform: '',\n flowRelative: false,\n };\n}\n\nexport function writePosition(element: HTMLElement, point: Point, renderer: PositionRenderer): void {\n const dx = point.x - renderer.origin.x;\n const dy = point.y - renderer.origin.y;\n const translate = dx === 0 && dy === 0 ? '' : `translate3d(${dx}px, ${dy}px, 0)`;\n element.style.transform = joinTransforms(renderer.baseTransform, translate);\n}\n\nexport function writeSize(element: HTMLElement, size: Size): void {\n element.style.width = `${size.width}px`;\n element.style.height = `${size.height}px`;\n}\n\nfunction normalizeTransform(value: string | undefined): string {\n if (!value || value === 'none') return '';\n return value.trim();\n}\n\nfunction joinTransforms(base: string, translate: string): string {\n if (base && translate) return `${base} ${translate}`;\n if (base) return base;\n return translate;\n}\n","import type { ResizeHandle } from '../core/types';\n\nconst CORNER_SIZE_PX = 14;\nconst EDGE_THICKNESS_PX = 8;\n\nconst EDGE_STYLES: Record<ResizeHandle, Partial<CSSStyleDeclaration>> = {\n nw: { top: '0', left: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nwse-resize' },\n ne: { top: '0', right: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nesw-resize' },\n sw: { bottom: '0', left: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nesw-resize' },\n se: { bottom: '0', right: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nwse-resize' },\n\n n: { top: '0', left: `${CORNER_SIZE_PX}px`, right: `${CORNER_SIZE_PX}px`, height: `${EDGE_THICKNESS_PX}px`, cursor: 'ns-resize' },\n s: { bottom: '0', left: `${CORNER_SIZE_PX}px`, right: `${CORNER_SIZE_PX}px`, height: `${EDGE_THICKNESS_PX}px`, cursor: 'ns-resize' },\n e: { right: '0', top: `${CORNER_SIZE_PX}px`, bottom: `${CORNER_SIZE_PX}px`, width: `${EDGE_THICKNESS_PX}px`, cursor: 'ew-resize' },\n w: { left: '0', top: `${CORNER_SIZE_PX}px`, bottom: `${CORNER_SIZE_PX}px`, width: `${EDGE_THICKNESS_PX}px`, cursor: 'ew-resize' },\n};\n\nexport function createResizeHandle(handle: ResizeHandle): HTMLElement {\n const el = document.createElement('div');\n el.dataset.freedomResizeHandle = handle;\n el.className = `freedom-resize-handle freedom-resize-handle--${handle}`;\n\n Object.assign(el.style, {\n position: 'absolute',\n boxSizing: 'border-box',\n touchAction: 'none',\n userSelect: 'none',\n pointerEvents: 'auto',\n zIndex: '1',\n ...EDGE_STYLES[handle],\n });\n\n return el;\n}\n","export interface FrameScheduler {\n schedule(): void;\n cancel(): void;\n}\n\nexport function createFrameScheduler(flush: () => void): FrameScheduler {\n let frameHandle: number | null = null;\n\n return {\n schedule(): void {\n if (frameHandle !== null) return;\n frameHandle = requestAnimationFrame(() => {\n frameHandle = null;\n flush();\n });\n },\n cancel(): void {\n if (frameHandle !== null) {\n cancelAnimationFrame(frameHandle);\n frameHandle = null;\n }\n },\n };\n}\n","import type {\n BoundsOption,\n FreedomPlugin,\n FreedomWindow,\n FreedomWindowOptions,\n InitialPosition,\n Point,\n PositioningMode,\n PluginContext,\n ResizeHandle,\n Size,\n WindowEventMap,\n} from '../core/types';\nimport { Emitter } from '../core/events';\nimport { clampSize, type SizeLimits } from '../core/math';\nimport { createDragEngine } from '../engine/drag';\nimport { createResizeEngine } from '../engine/resize';\nimport { createInteractionManager } from '../core/interaction-manager';\nimport {\n applyBaseStyles,\n createPositionRenderer,\n readRenderedPosition,\n writePosition,\n writeSize,\n} from '../dom/render';\nimport { createResizeHandle } from '../dom/handles';\nimport { createFrameScheduler } from '../dom/scheduler';\n\nconst ALL_HANDLES: readonly ResizeHandle[] = ['n', 's', 'e', 'w', 'nw', 'ne', 'sw', 'se'];\nconst instances = new WeakMap<HTMLElement, FreedomWindow>();\n\nlet autoId = 0;\n\nexport function createWindow(element: HTMLElement, options: FreedomWindowOptions = {}): FreedomWindow {\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n throw new Error('freedom.window() requires a browser environment. Importing is SSR-safe, but creating a window must run in the browser.');\n }\n\n assertHTMLElement(element);\n\n if (instances.has(element)) {\n throw new Error('freedom.window() was called more than once for the same element. Destroy the existing instance before creating a new one.');\n }\n\n const id = options.id ?? `freedom-window-${++autoId}`;\n const emitter = new Emitter<WindowEventMap>();\n const plugins: readonly FreedomPlugin[] = options.plugins ?? [];\n const limits = normalizeSizeLimits(options);\n const positioning = resolvePositioning(element, options);\n\n // Initialization stays synchronous to prevent top-left first paint.\n applyBaseStyles(element, {\n positioning,\n forcePositioning: shouldForcePositioning(element, options),\n });\n\n let size: Size = clampSize(sanitizeSize(options.initialSize ?? readInitialSize(element), 'initialSize'), limits);\n let position: Point = resolveInitialPosition(options.initialPosition, element, size, options.bounds, positioning);\n const renderer = createPositionRenderer(element, positioning, position);\n let zIndex = normalizeZIndex(options.zIndex ?? 0);\n let focused = false;\n let isDraggable = options.draggable ?? true;\n let isDestroyed = false;\n\n writeSize(element, size);\n writePosition(element, position, renderer);\n if (zIndex) element.style.zIndex = String(zIndex);\n revealIfRequested(element, options);\n\n let pendingPosition: Point | null = null;\n let pendingSize: Size | null = null;\n\n const scheduler = createFrameScheduler(() => {\n if (isDestroyed) return;\n\n if (pendingPosition) {\n writePosition(element, pendingPosition, renderer);\n pendingPosition = null;\n }\n if (pendingSize) {\n writeSize(element, pendingSize);\n pendingSize = null;\n }\n });\n\n function paint(nextPosition?: Point, nextSize?: Size): void {\n if (nextPosition) pendingPosition = nextPosition;\n if (nextSize) pendingSize = nextSize;\n scheduler.schedule();\n }\n\n function assertAlive(method: string): void {\n if (isDestroyed) {\n throw new Error(`Cannot call ${method}() on a destroyed freedom window.`);\n }\n }\n\n const pluginContext: PluginContext = {\n element,\n get window(): FreedomWindow {\n return api;\n },\n };\n\n const dragHandleElement = resolveDragHandle(element, options.dragHandle);\n\n function isDragTarget(target: EventTarget | null): boolean {\n if (!isDraggable || !dragHandleElement) return false;\n if (!(target instanceof Node)) return false;\n return dragHandleElement === target || dragHandleElement.contains(target);\n }\n\n const dragEngine = createDragEngine({\n element,\n bounds: options.bounds,\n plugins,\n pluginContext,\n getPosition: () => position,\n getSize: () => size,\n });\n\n const resizeHandleElements = new Map<ResizeHandle, HTMLElement>();\n\n function resolveResizeHandle(target: EventTarget | null): ResizeHandle | null {\n if (!(target instanceof Element)) return null;\n const handleEl = target.closest<HTMLElement>('.freedom-resize-handle');\n if (!handleEl) return null;\n\n for (const [handle, el] of resizeHandleElements) {\n if (el === handleEl) return handle;\n }\n\n return null;\n }\n\n const resizeEngine = createResizeEngine({\n element,\n bounds: options.bounds,\n ...limits,\n plugins,\n pluginContext,\n getPosition: () => position,\n getSize: () => size,\n });\n\n function setupResizeHandles(handles: readonly ResizeHandle[]): void {\n const normalizedHandles = normalizeResizeHandles(handles);\n for (const handle of normalizedHandles) {\n if (resizeHandleElements.has(handle)) continue;\n const handleEl = createResizeHandle(handle);\n element.appendChild(handleEl);\n resizeHandleElements.set(handle, handleEl);\n }\n }\n\n function teardownResizeHandles(handles: readonly ResizeHandle[] = ALL_HANDLES): void {\n for (const handle of handles) {\n const handleEl = resizeHandleElements.get(handle);\n if (handleEl) {\n handleEl.remove();\n resizeHandleElements.delete(handle);\n }\n }\n }\n\n const interactionManager = createInteractionManager({\n element,\n dragEngine,\n resizeEngine,\n resolveResizeHandle,\n isDragTarget,\n\n onDragStart(data) {\n element.classList.add('freedom-dragging');\n emitter.emit('dragstart', data);\n },\n onDragMove({ position: next, data }) {\n position = next;\n paint(position);\n emitter.emit('drag', data);\n },\n onDragEnd(data) {\n element.classList.remove('freedom-dragging');\n emitter.emit('dragend', data);\n },\n\n onResizeStart(data) {\n element.classList.add('freedom-resizing');\n emitter.emit('resizestart', data);\n },\n onResizeMove({ position: nextPosition, size: nextSize, data }) {\n position = nextPosition;\n size = nextSize;\n paint(position, size);\n emitter.emit('resize', data);\n },\n onResizeEnd(data) {\n element.classList.remove('freedom-resizing');\n emitter.emit('resizeend', data);\n },\n });\n\n const initialResizeHandles = resolveEnabledHandles(options.resizable ?? true);\n if (initialResizeHandles.length > 0) setupResizeHandles(initialResizeHandles);\n\n const api: FreedomWindow = {\n id,\n element,\n\n getPosition(): Point {\n assertAlive('getPosition');\n return { ...position };\n },\n\n getSize(): Size {\n assertAlive('getSize');\n return { ...size };\n },\n\n setPosition(point: Point): void {\n assertAlive('setPosition');\n position = sanitizePoint(point, 'setPosition');\n paint(position);\n },\n\n setSize(nextSize: Size): void {\n assertAlive('setSize');\n size = clampSize(sanitizeSize(nextSize, 'setSize'), limits);\n paint(undefined, size);\n },\n\n focus(): void {\n assertAlive('focus');\n if (focused) return;\n focused = true;\n element.classList.add('freedom-focused');\n emitter.emit('focus', undefined);\n options.onFocus?.();\n },\n\n blur(): void {\n assertAlive('blur');\n if (!focused) return;\n focused = false;\n element.classList.remove('freedom-focused');\n emitter.emit('blur', undefined);\n options.onBlur?.();\n },\n\n isFocused(): boolean {\n assertAlive('isFocused');\n return focused;\n },\n\n setZIndex(next: number): void {\n assertAlive('setZIndex');\n zIndex = normalizeZIndex(next);\n element.style.zIndex = String(zIndex);\n },\n\n getZIndex(): number {\n assertAlive('getZIndex');\n return zIndex;\n },\n\n enableDrag(): void {\n assertAlive('enableDrag');\n isDraggable = true;\n },\n\n disableDrag(): void {\n assertAlive('disableDrag');\n isDraggable = false;\n if (interactionManager.active === 'drag') {\n interactionManager.cancel();\n element.classList.remove('freedom-dragging');\n }\n },\n\n enableResize(handles: ResizeHandle[] = ALL_HANDLES as ResizeHandle[]): void {\n assertAlive('enableResize');\n setupResizeHandles(handles);\n },\n\n disableResize(): void {\n assertAlive('disableResize');\n if (interactionManager.active === 'resize') {\n interactionManager.cancel();\n element.classList.remove('freedom-resizing');\n }\n teardownResizeHandles();\n },\n\n destroy(): void {\n if (isDestroyed) return;\n isDestroyed = true;\n interactionManager.destroy();\n teardownResizeHandles();\n scheduler.cancel();\n element.classList.remove('freedom-dragging', 'freedom-resizing', 'freedom-focused');\n for (const plugin of plugins) plugin.onDestroy?.(pluginContext);\n emitter.emit('destroy', undefined);\n emitter.clear();\n instances.delete(element);\n },\n\n on(event, handler) {\n assertAlive('on');\n return emitter.on(event, handler);\n },\n };\n\n instances.set(element, api);\n\n if (options.onDragStart) api.on('dragstart', options.onDragStart);\n if (options.onDrag) api.on('drag', options.onDrag);\n if (options.onDragEnd) api.on('dragend', options.onDragEnd);\n if (options.onResizeStart) api.on('resizestart', options.onResizeStart);\n if (options.onResize) api.on('resize', options.onResize);\n if (options.onResizeEnd) api.on('resizeend', options.onResizeEnd);\n\n for (const plugin of plugins) plugin.onInit?.(pluginContext);\n\n return api;\n}\n\nfunction assertHTMLElement(element: unknown): asserts element is HTMLElement {\n const maybeElement = element as Partial<HTMLElement> | null | undefined;\n const isUsableElement =\n !!maybeElement &&\n typeof maybeElement === 'object' &&\n (maybeElement as { nodeType?: number }).nodeType === 1 &&\n typeof maybeElement.getBoundingClientRect === 'function' &&\n !!maybeElement.style &&\n typeof maybeElement.addEventListener === 'function' &&\n typeof maybeElement.removeEventListener === 'function';\n\n if (!isUsableElement) {\n throw new TypeError('freedom.window(element) expected a real HTMLElement. Received null, undefined, or a non-element value.');\n }\n}\n\nfunction normalizeSizeLimits(options: FreedomWindowOptions): SizeLimits {\n const minWidth = finiteNonNegative(options.minWidth, 0);\n const minHeight = finiteNonNegative(options.minHeight, 0);\n const maxWidth = finitePositiveOrInfinity(options.maxWidth, Infinity);\n const maxHeight = finitePositiveOrInfinity(options.maxHeight, Infinity);\n\n return {\n minWidth,\n minHeight,\n maxWidth: Math.max(minWidth, maxWidth),\n maxHeight: Math.max(minHeight, maxHeight),\n };\n}\n\nfunction finiteNonNegative(value: number | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction finitePositiveOrInfinity(value: number | undefined, fallback: number): number {\n if (value === Infinity) return Infinity;\n return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction normalizeZIndex(value: number): number {\n return Number.isFinite(value) ? Math.trunc(value) : 0;\n}\n\nfunction sanitizePoint(point: Point, source: string): Point {\n if (!point || typeof point.x !== 'number' || typeof point.y !== 'number' || !Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n throw new TypeError(`freedom.window(): ${source} expected a finite { x, y } point.`);\n }\n return { x: point.x, y: point.y };\n}\n\nfunction sanitizeSize(size: Size, source: string): Size {\n if (!size || typeof size.width !== 'number' || typeof size.height !== 'number' || !Number.isFinite(size.width) || !Number.isFinite(size.height)) {\n throw new TypeError(`freedom.window(): ${source} expected a finite { width, height } size.`);\n }\n return { width: Math.max(0, size.width), height: Math.max(0, size.height) };\n}\n\nfunction shouldForcePositioning(element: HTMLElement, options: FreedomWindowOptions): boolean {\n const computed = window.getComputedStyle(element).position;\n return Boolean(options.positioning) || computed === 'static';\n}\n\nfunction resolvePositioning(element: HTMLElement, options: FreedomWindowOptions): PositioningMode {\n if (options.positioning) return options.positioning;\n\n const computed = window.getComputedStyle(element);\n if (computed.position === 'fixed') return 'fixed';\n if (computed.position === 'absolute') return 'absolute';\n if (computed.position === 'relative' || computed.position === 'sticky') return 'relative';\n\n if (hasAuthoredInset(computed)) return 'fixed';\n\n if (options.initialPosition !== undefined) {\n return options.bounds === 'parent' ? 'absolute' : 'fixed';\n }\n\n return 'relative';\n}\n\nfunction hasAuthoredInset(style: CSSStyleDeclaration): boolean {\n return [style.top, style.right, style.bottom, style.left].some((value) => {\n if (!value || value === 'auto') return false;\n return value !== '0px' && value !== '0';\n });\n}\n\nfunction resolveInitialPosition(\n initialPosition: InitialPosition | undefined,\n element: HTMLElement,\n size: Size,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): Point {\n if (initialPosition === 'center') {\n return centerPosition(element, size, bounds, positioning);\n }\n\n if (initialPosition) {\n return sanitizePoint(initialPosition, 'initialPosition');\n }\n\n return readRenderedPosition(element, positioning);\n}\n\nfunction centerPosition(\n element: HTMLElement,\n size: Size,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): Point {\n const box = resolveCenterBox(element, bounds, positioning);\n\n return {\n x: Math.round(box.x + Math.max(0, box.width - size.width) / 2),\n y: Math.round(box.y + Math.max(0, box.height - size.height) / 2),\n };\n}\n\nfunction resolveCenterBox(\n element: HTMLElement,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): { x: number; y: number; width: number; height: number } {\n if (bounds && typeof bounds === 'object') {\n return { x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height };\n }\n\n if (bounds === 'parent') {\n const parent = element.offsetParent as HTMLElement | null;\n if (parent) return { x: 0, y: 0, width: parent.clientWidth, height: parent.clientHeight };\n }\n\n if (positioning === 'absolute' && bounds !== 'viewport') {\n const parent = element.offsetParent as HTMLElement | null;\n if (parent) return { x: 0, y: 0, width: parent.clientWidth, height: parent.clientHeight };\n }\n\n const root = document.documentElement;\n return {\n x: 0,\n y: 0,\n width: window.innerWidth || root.clientWidth,\n height: window.innerHeight || root.clientHeight,\n };\n}\n\nfunction readInitialSize(element: HTMLElement): Size {\n const rect = element.getBoundingClientRect();\n return {\n width: rect.width || element.offsetWidth || 0,\n height: rect.height || element.offsetHeight || 0,\n };\n}\n\nfunction revealIfRequested(element: HTMLElement, options: FreedomWindowOptions): void {\n if (options.autoReveal === false) return;\n const visibility = window.getComputedStyle(element).visibility;\n if (visibility === 'hidden') {\n element.style.visibility = 'visible';\n }\n}\n\nfunction resolveDragHandle(\n element: HTMLElement,\n handleOption: FreedomWindowOptions['dragHandle']\n): HTMLElement | null {\n if (handleOption === null) return null;\n if (handleOption === undefined) return element;\n if (typeof handleOption === 'string') return element.querySelector<HTMLElement>(handleOption);\n return handleOption;\n}\n\nfunction resolveEnabledHandles(option: NonNullable<FreedomWindowOptions['resizable']>): ResizeHandle[] {\n if (option === false) return [];\n if (option === true) return [...ALL_HANDLES];\n return normalizeResizeHandles(option);\n}\n\nfunction normalizeResizeHandles(handles: readonly ResizeHandle[]): ResizeHandle[] {\n const unique = new Set<ResizeHandle>();\n\n for (const handle of handles) {\n if (!ALL_HANDLES.includes(handle)) {\n throw new TypeError(`freedom.window(): invalid resize handle \"${String(handle)}\".`);\n }\n unique.add(handle);\n }\n\n return [...unique];\n}\n","import { createWindow } from './runtime/window';\n\nexport const freedom = {\n window: createWindow,\n};\n\nexport default freedom;\n\nexport { createWindow };\nexport { createWindow as window };\n\nexport type {\n Point,\n Size,\n Rect,\n Bounds,\n BoundsOption,\n ResizeHandle,\n InitialPosition,\n PositioningMode,\n DragEventData,\n ResizeEventData,\n WindowEventMap,\n ManagerEventMap,\n FreedomPlugin,\n PluginContext,\n FreedomWindow,\n FreedomWindowOptions,\n FreedomManager,\n FreedomManagerOptions,\n} from './core/types';\n"]}
|
package/dist/manager.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/events.ts","../src/manager/manager.ts"],"names":[],"mappings":"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","file":"manager.cjs","sourcesContent":["type Handler<T> = (data: T) => void;\n\nexport class Emitter<EventMap extends object> {\n private readonly listeners = new Map<keyof EventMap, Set<Handler<unknown>>>();\n\n on<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): () => void {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(handler as Handler<unknown>);\n return () => this.off(event, handler);\n }\n\n off<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): void {\n this.listeners.get(event)?.delete(handler as Handler<unknown>);\n }\n\n emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void {\n const set = this.listeners.get(event);\n if (!set || set.size === 0) return;\n\n // Snapshot so listeners can unsubscribe during emit.\n for (const handler of [...set]) {\n (handler as Handler<EventMap[K]>)(data);\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import type {\n FreedomManager,\n FreedomManagerOptions,\n FreedomWindow,\n ManagerEventMap,\n} from '../core/types';\nimport { Emitter } from '../core/events';\n\nexport function createManager(options: FreedomManagerOptions = {}): FreedomManager {\n const baseZIndex = options.baseZIndex ?? 1;\n\n const windows: FreedomWindow[] = [];\n const unsubscribeDestroy = new Map<FreedomWindow, () => void>();\n const emitter = new Emitter<ManagerEventMap>();\n\n let topZIndex = baseZIndex;\n let focused: FreedomWindow | null = null;\n\n function register(win: FreedomWindow): void {\n if (windows.includes(win)) return;\n\n windows.push(win);\n topZIndex += 1;\n win.setZIndex(topZIndex);\n\n const off = win.on('destroy', () => unregister(win));\n unsubscribeDestroy.set(win, off);\n\n emitter.emit('register', win);\n }\n\n function unregister(win: FreedomWindow): void {\n const index = windows.indexOf(win);\n if (index === -1) return;\n\n windows.splice(index, 1);\n unsubscribeDestroy.get(win)?.();\n unsubscribeDestroy.delete(win);\n\n if (focused === win) {\n focused = null;\n win.blur();\n }\n\n emitter.emit('unregister', win);\n }\n\n function focus(win: FreedomWindow): void {\n if (!windows.includes(win) || focused === win) return;\n\n const previous = focused;\n topZIndex += 1;\n win.setZIndex(topZIndex);\n win.focus();\n focused = win;\n\n if (previous) {\n previous.blur();\n emitter.emit('blur', previous);\n }\n emitter.emit('focus', win);\n }\n\n function destroy(): void {\n for (const win of windows) unsubscribeDestroy.get(win)?.();\n windows.length = 0;\n unsubscribeDestroy.clear();\n focused = null;\n emitter.clear();\n }\n\n return {\n register,\n unregister,\n focus,\n bringToFront: focus,\n getFocused: () => focused,\n list: () => [...windows],\n on: (event, handler) => emitter.on(event, handler),\n destroy,\n };\n}\n"]}
|
package/dist/manager.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/events.ts","../src/manager/manager.ts"],"names":[],"mappings":"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","file":"manager.js","sourcesContent":["type Handler<T> = (data: T) => void;\n\nexport class Emitter<EventMap extends object> {\n private readonly listeners = new Map<keyof EventMap, Set<Handler<unknown>>>();\n\n on<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): () => void {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(handler as Handler<unknown>);\n return () => this.off(event, handler);\n }\n\n off<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): void {\n this.listeners.get(event)?.delete(handler as Handler<unknown>);\n }\n\n emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void {\n const set = this.listeners.get(event);\n if (!set || set.size === 0) return;\n\n // Snapshot so listeners can unsubscribe during emit.\n for (const handler of [...set]) {\n (handler as Handler<EventMap[K]>)(data);\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import type {\n FreedomManager,\n FreedomManagerOptions,\n FreedomWindow,\n ManagerEventMap,\n} from '../core/types';\nimport { Emitter } from '../core/events';\n\nexport function createManager(options: FreedomManagerOptions = {}): FreedomManager {\n const baseZIndex = options.baseZIndex ?? 1;\n\n const windows: FreedomWindow[] = [];\n const unsubscribeDestroy = new Map<FreedomWindow, () => void>();\n const emitter = new Emitter<ManagerEventMap>();\n\n let topZIndex = baseZIndex;\n let focused: FreedomWindow | null = null;\n\n function register(win: FreedomWindow): void {\n if (windows.includes(win)) return;\n\n windows.push(win);\n topZIndex += 1;\n win.setZIndex(topZIndex);\n\n const off = win.on('destroy', () => unregister(win));\n unsubscribeDestroy.set(win, off);\n\n emitter.emit('register', win);\n }\n\n function unregister(win: FreedomWindow): void {\n const index = windows.indexOf(win);\n if (index === -1) return;\n\n windows.splice(index, 1);\n unsubscribeDestroy.get(win)?.();\n unsubscribeDestroy.delete(win);\n\n if (focused === win) {\n focused = null;\n win.blur();\n }\n\n emitter.emit('unregister', win);\n }\n\n function focus(win: FreedomWindow): void {\n if (!windows.includes(win) || focused === win) return;\n\n const previous = focused;\n topZIndex += 1;\n win.setZIndex(topZIndex);\n win.focus();\n focused = win;\n\n if (previous) {\n previous.blur();\n emitter.emit('blur', previous);\n }\n emitter.emit('focus', win);\n }\n\n function destroy(): void {\n for (const win of windows) unsubscribeDestroy.get(win)?.();\n windows.length = 0;\n unsubscribeDestroy.clear();\n focused = null;\n emitter.clear();\n }\n\n return {\n register,\n unregister,\n focus,\n bringToFront: focus,\n getFocused: () => focused,\n list: () => [...windows],\n on: (event, handler) => emitter.on(event, handler),\n destroy,\n };\n}\n"]}
|
package/dist/snap.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugins/snap.ts"],"names":[],"mappings":";;;AAQO,SAAS,UAAA,CAAW,OAAA,GAA6B,EAAC,EAAkB;AACzE,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,CAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,IAAA;AAEjD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IAEN,MAAA,CAAO,MAAM,GAAA,EAAK;AAChB,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,OAAA,EAAQ;AAChC,MAAA,IAAI,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,IAAA,CAAK,QAAA;AAEpB,MAAA,MAAM,UAAkB,EAAC;AACzB,MAAA,IAAI,cAAA,IAAkB,OAAO,MAAA,KAAW,WAAA,EAAa;AACnD,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,UAAA,EAAY,MAAA,EAAQ,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,MACnF;AACA,MAAA,IAAI,QAAQ,cAAA,EAAgB,OAAA,CAAQ,KAAK,GAAG,OAAA,CAAQ,gBAAgB,CAAA;AAEpE,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,IAAI,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,IAAK,SAAA,MAAe,MAAA,CAAO,CAAA;AACpD,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,IAAA,CAAK,KAAA,IAAS,OAAO,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,SAAA,EAAW;AACrE,UAAA,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,KAAA;AAAA,QACrC;AACA,QAAA,IAAI,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,IAAK,SAAA,MAAe,MAAA,CAAO,CAAA;AACpD,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU,OAAO,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,CAAA,IAAK,SAAA,EAAW;AACvE,UAAA,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,QACtC;AAAA,MACF;AAEA,MAAA,OAAO,EAAE,GAAG,CAAA,EAAE;AAAA,IAChB;AAAA,GACF;AACF","file":"snap.cjs","sourcesContent":["import type { FreedomPlugin, Rect } from '../core/types';\n\nexport interface SnapPluginOptions {\n threshold?: number;\n snapToViewport?: boolean;\n getSnapTargets?(): Rect[];\n}\n\nexport function snapPlugin(options: SnapPluginOptions = {}): FreedomPlugin {\n const threshold = options.threshold ?? 8;\n const snapToViewport = options.snapToViewport ?? true;\n\n return {\n name: 'freedom-snap',\n\n onDrag(data, ctx) {\n const size = ctx.window.getSize();\n let { x, y } = data.position;\n\n const targets: Rect[] = [];\n if (snapToViewport && typeof window !== 'undefined') {\n targets.push({ x: 0, y: 0, width: window.innerWidth, height: window.innerHeight });\n }\n if (options.getSnapTargets) targets.push(...options.getSnapTargets());\n\n for (const target of targets) {\n if (Math.abs(x - target.x) <= threshold) x = target.x;\n if (Math.abs(x + size.width - (target.x + target.width)) <= threshold) {\n x = target.x + target.width - size.width;\n }\n if (Math.abs(y - target.y) <= threshold) y = target.y;\n if (Math.abs(y + size.height - (target.y + target.height)) <= threshold) {\n y = target.y + target.height - size.height;\n }\n }\n\n return { x, y };\n },\n };\n}\n"]}
|
package/dist/snap.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugins/snap.ts"],"names":[],"mappings":";AAQO,SAAS,UAAA,CAAW,OAAA,GAA6B,EAAC,EAAkB;AACzE,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,CAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,IAAA;AAEjD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IAEN,MAAA,CAAO,MAAM,GAAA,EAAK;AAChB,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,OAAA,EAAQ;AAChC,MAAA,IAAI,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,IAAA,CAAK,QAAA;AAEpB,MAAA,MAAM,UAAkB,EAAC;AACzB,MAAA,IAAI,cAAA,IAAkB,OAAO,MAAA,KAAW,WAAA,EAAa;AACnD,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,UAAA,EAAY,MAAA,EAAQ,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,MACnF;AACA,MAAA,IAAI,QAAQ,cAAA,EAAgB,OAAA,CAAQ,KAAK,GAAG,OAAA,CAAQ,gBAAgB,CAAA;AAEpE,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,IAAI,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,IAAK,SAAA,MAAe,MAAA,CAAO,CAAA;AACpD,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,IAAA,CAAK,KAAA,IAAS,OAAO,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,SAAA,EAAW;AACrE,UAAA,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,KAAA;AAAA,QACrC;AACA,QAAA,IAAI,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,IAAK,SAAA,MAAe,MAAA,CAAO,CAAA;AACpD,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU,OAAO,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,CAAA,IAAK,SAAA,EAAW;AACvE,UAAA,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,QACtC;AAAA,MACF;AAEA,MAAA,OAAO,EAAE,GAAG,CAAA,EAAE;AAAA,IAChB;AAAA,GACF;AACF","file":"snap.js","sourcesContent":["import type { FreedomPlugin, Rect } from '../core/types';\n\nexport interface SnapPluginOptions {\n threshold?: number;\n snapToViewport?: boolean;\n getSnapTargets?(): Rect[];\n}\n\nexport function snapPlugin(options: SnapPluginOptions = {}): FreedomPlugin {\n const threshold = options.threshold ?? 8;\n const snapToViewport = options.snapToViewport ?? true;\n\n return {\n name: 'freedom-snap',\n\n onDrag(data, ctx) {\n const size = ctx.window.getSize();\n let { x, y } = data.position;\n\n const targets: Rect[] = [];\n if (snapToViewport && typeof window !== 'undefined') {\n targets.push({ x: 0, y: 0, width: window.innerWidth, height: window.innerHeight });\n }\n if (options.getSnapTargets) targets.push(...options.getSnapTargets());\n\n for (const target of targets) {\n if (Math.abs(x - target.x) <= threshold) x = target.x;\n if (Math.abs(x + size.width - (target.x + target.width)) <= threshold) {\n x = target.x + target.width - size.width;\n }\n if (Math.abs(y - target.y) <= threshold) y = target.y;\n if (Math.abs(y + size.height - (target.y + target.height)) <= threshold) {\n y = target.y + target.height - size.height;\n }\n }\n\n return { x, y };\n },\n };\n}\n"]}
|
package/dist/window.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/events.ts","../src/core/math.ts","../src/engine/constraints.ts","../src/engine/drag.ts","../src/engine/resize.ts","../src/core/interaction-manager.ts","../src/dom/render.ts","../src/dom/handles.ts","../src/dom/scheduler.ts","../src/runtime/window.ts"],"names":[],"mappings":"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","file":"window.cjs","sourcesContent":["type Handler<T> = (data: T) => void;\n\nexport class Emitter<EventMap extends object> {\n private readonly listeners = new Map<keyof EventMap, Set<Handler<unknown>>>();\n\n on<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): () => void {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(handler as Handler<unknown>);\n return () => this.off(event, handler);\n }\n\n off<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): void {\n this.listeners.get(event)?.delete(handler as Handler<unknown>);\n }\n\n emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void {\n const set = this.listeners.get(event);\n if (!set || set.size === 0) return;\n\n // Snapshot so listeners can unsubscribe during emit.\n for (const handler of [...set]) {\n (handler as Handler<EventMap[K]>)(data);\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import type { Bounds, Point, Size } from './types';\n\nexport function clamp(value: number, min: number, max: number): number {\n if (min > max) return min;\n return Math.min(Math.max(value, min), max);\n}\n\nexport interface SizeLimits {\n minWidth: number;\n minHeight: number;\n maxWidth: number;\n maxHeight: number;\n}\n\nexport function clampSize(size: Size, limits: SizeLimits): Size {\n return {\n width: clamp(size.width, limits.minWidth, Math.max(limits.minWidth, limits.maxWidth)),\n height: clamp(size.height, limits.minHeight, Math.max(limits.minHeight, limits.maxHeight)),\n };\n}\n\nexport function clampPointToBounds(point: Point, size: Size, bounds: Bounds): Point {\n const maxX = Math.max(bounds.minX, bounds.maxX - size.width);\n const maxY = Math.max(bounds.minY, bounds.maxY - size.height);\n return {\n x: clamp(point.x, bounds.minX, maxX),\n y: clamp(point.y, bounds.minY, maxY),\n };\n}\n","import type { Bounds, BoundsOption, Point, Size } from '../core/types';\nimport { clampPointToBounds, clampSize, type SizeLimits } from '../core/math';\n\nexport { clampPointToBounds, clampSize };\nexport type { SizeLimits };\n\nexport function resolveBounds(\n option: BoundsOption | undefined,\n element: HTMLElement\n): Bounds | null {\n if (!option || option === 'none') return null;\n\n if (option === 'viewport') {\n return { minX: 0, minY: 0, maxX: window.innerWidth, maxY: window.innerHeight };\n }\n\n if (option === 'parent') {\n const parent = element.offsetParent as HTMLElement | null;\n if (!parent) return null;\n return { minX: 0, minY: 0, maxX: parent.clientWidth, maxY: parent.clientHeight };\n }\n\n return {\n minX: option.x,\n minY: option.y,\n maxX: option.x + option.width,\n maxY: option.y + option.height,\n };\n}\n\nexport function constrainToBounds(\n point: Point,\n size: Size,\n option: BoundsOption | undefined,\n element: HTMLElement\n): Point {\n const bounds = resolveBounds(option, element);\n return bounds ? clampPointToBounds(point, size, bounds) : point;\n}\n","import type {\n BoundsOption,\n DragEventData,\n FreedomPlugin,\n Point,\n PluginContext,\n Size,\n} from '../core/types';\nimport { constrainToBounds } from './constraints';\n\nexport interface DragEngineOptions {\n element: HTMLElement;\n bounds: BoundsOption | undefined;\n plugins: readonly FreedomPlugin[];\n pluginContext: PluginContext;\n getPosition(): Point;\n getSize(): Size;\n}\n\nexport interface DragMoveResult {\n position: Point;\n data: DragEventData;\n}\n\nexport interface DragEngine {\n begin(pointer: Point, pointerEvent: PointerEvent): DragEventData;\n move(pointer: Point, pointerEvent: PointerEvent): DragMoveResult;\n end(pointer: Point, pointerEvent: PointerEvent): DragEventData;\n}\n\nexport function createDragEngine(options: DragEngineOptions): DragEngine {\n let startPointer: Point = { x: 0, y: 0 };\n let startPosition: Point = { x: 0, y: 0 };\n\n return {\n begin(pointer, pointerEvent) {\n startPointer = pointer;\n startPosition = options.getPosition();\n return { position: startPosition, delta: { x: 0, y: 0 }, pointerEvent };\n },\n\n move(pointer, pointerEvent) {\n const delta: Point = {\n x: pointer.x - startPointer.x,\n y: pointer.y - startPointer.y,\n };\n\n let next: Point = { x: startPosition.x + delta.x, y: startPosition.y + delta.y };\n next = constrainToBounds(next, options.getSize(), options.bounds, options.element);\n\n for (const plugin of options.plugins) {\n if (!plugin.onDrag) continue;\n const result = plugin.onDrag(\n { position: next, delta, pointerEvent },\n options.pluginContext\n );\n if (result) next = result;\n }\n\n return { position: next, data: { position: next, delta, pointerEvent } };\n },\n\n end(pointer, pointerEvent) {\n const delta: Point = {\n x: pointer.x - startPointer.x,\n y: pointer.y - startPointer.y,\n };\n return { position: options.getPosition(), delta, pointerEvent };\n },\n };\n}\n","import type {\n BoundsOption,\n FreedomPlugin,\n Point,\n PluginContext,\n ResizeEventData,\n ResizeHandle,\n Size,\n} from '../core/types';\nimport { clamp } from '../core/math';\nimport { constrainToBounds, type SizeLimits } from './constraints';\n\nexport interface ResizeEngineOptions extends SizeLimits {\n element: HTMLElement;\n bounds: BoundsOption | undefined;\n plugins: readonly FreedomPlugin[];\n pluginContext: PluginContext;\n getPosition(): Point;\n getSize(): Size;\n}\n\nexport interface ResizeMoveResult {\n position: Point;\n size: Size;\n data: ResizeEventData;\n}\n\nexport interface ResizeEngine {\n begin(handle: ResizeHandle, pointer: Point, pointerEvent: PointerEvent): ResizeEventData;\n move(pointer: Point, pointerEvent: PointerEvent): ResizeMoveResult;\n end(pointer: Point, pointerEvent: PointerEvent): ResizeEventData;\n}\n\nconst WEST_HANDLES: readonly ResizeHandle[] = ['nw', 'w', 'sw'];\nconst NORTH_HANDLES: readonly ResizeHandle[] = ['nw', 'n', 'ne'];\nconst VERTICAL_ONLY_HANDLES: readonly ResizeHandle[] = ['n', 's'];\nconst HORIZONTAL_ONLY_HANDLES: readonly ResizeHandle[] = ['e', 'w'];\n\nexport function createResizeEngine(options: ResizeEngineOptions): ResizeEngine {\n let activeHandle: ResizeHandle = 'se';\n let startPointer: Point = { x: 0, y: 0 };\n let startPosition: Point = { x: 0, y: 0 };\n let startSize: Size = { width: 0, height: 0 };\n let affectsWest = false;\n let affectsNorth = false;\n let affectsWidth = true;\n let affectsHeight = true;\n\n return {\n begin(handle, pointer, pointerEvent) {\n activeHandle = handle;\n affectsWest = WEST_HANDLES.includes(handle);\n affectsNorth = NORTH_HANDLES.includes(handle);\n affectsWidth = !VERTICAL_ONLY_HANDLES.includes(handle);\n affectsHeight = !HORIZONTAL_ONLY_HANDLES.includes(handle);\n startPointer = pointer;\n startPosition = options.getPosition();\n startSize = options.getSize();\n return { size: startSize, position: startPosition, handle, pointerEvent };\n },\n\n move(pointer, pointerEvent) {\n const dx = pointer.x - startPointer.x;\n const dy = pointer.y - startPointer.y;\n\n let x = startPosition.x;\n let y = startPosition.y;\n\n const width = affectsWidth\n ? (affectsWest ? startSize.width - dx : startSize.width + dx)\n : startSize.width;\n const height = affectsHeight\n ? (affectsNorth ? startSize.height - dy : startSize.height + dy)\n : startSize.height;\n\n const clampedWidth = clamp(width, options.minWidth, Math.max(options.minWidth, options.maxWidth));\n const clampedHeight = clamp(height, options.minHeight, Math.max(options.minHeight, options.maxHeight));\n\n // Keep the opposite edge visually anchored after size clamping.\n if (affectsWest) x = startPosition.x + (startSize.width - clampedWidth);\n if (affectsNorth) y = startPosition.y + (startSize.height - clampedHeight);\n\n let nextSize: Size = { width: clampedWidth, height: clampedHeight };\n let nextPosition: Point = constrainToBounds({ x, y }, nextSize, options.bounds, options.element);\n\n for (const plugin of options.plugins) {\n if (!plugin.onResize) continue;\n const result = plugin.onResize(\n { size: nextSize, position: nextPosition, handle: activeHandle, pointerEvent },\n options.pluginContext\n );\n if (result) {\n nextSize = result.size;\n nextPosition = result.position;\n }\n }\n\n return {\n position: nextPosition,\n size: nextSize,\n data: { size: nextSize, position: nextPosition, handle: activeHandle, pointerEvent },\n };\n },\n\n end(pointer, pointerEvent) {\n return {\n size: options.getSize(),\n position: options.getPosition(),\n handle: activeHandle,\n pointerEvent,\n };\n },\n };\n}\n","import type { Point, ResizeHandle, DragEventData, ResizeEventData } from './types';\nimport type { DragEngine, DragMoveResult } from '../engine/drag';\nimport type { ResizeEngine, ResizeMoveResult } from '../engine/resize';\n\nexport type ActiveInteraction = 'drag' | 'resize' | null;\n\nexport interface InteractionManagerOptions {\n element: HTMLElement;\n\n dragEngine: DragEngine;\n resizeEngine: ResizeEngine;\n\n resolveResizeHandle(target: EventTarget | null): ResizeHandle | null;\n isDragTarget(target: EventTarget | null): boolean;\n\n onDragStart(data: DragEventData): void;\n onDragMove(result: DragMoveResult): void;\n onDragEnd(data: DragEventData): void;\n\n onResizeStart(data: ResizeEventData): void;\n onResizeMove(result: ResizeMoveResult): void;\n onResizeEnd(data: ResizeEventData): void;\n}\n\nfunction toPoint(event: PointerEvent): Point {\n return { x: event.clientX, y: event.clientY };\n}\n\nexport class InteractionManager {\n private readonly options: InteractionManagerOptions;\n private activePointerId: number | null = null;\n private captureTarget: Element | null = null;\n private _active: ActiveInteraction = null;\n private destroyed = false;\n\n constructor(options: InteractionManagerOptions) {\n this.options = options;\n this.options.element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n get active(): ActiveInteraction {\n return this._active;\n }\n\n startDrag(event: PointerEvent): void {\n if (this.destroyed || this._active !== null) return;\n this._active = 'drag';\n this.captureGesture(event);\n const data = this.options.dragEngine.begin(toPoint(event), event);\n this.options.onDragStart(data);\n }\n\n startResize(handle: ResizeHandle, event: PointerEvent): void {\n if (this.destroyed || this._active !== null) return;\n this._active = 'resize';\n this.captureGesture(event);\n const data = this.options.resizeEngine.begin(handle, toPoint(event), event);\n this.options.onResizeStart(data);\n }\n\n cancel(): void {\n this.teardown();\n }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.options.element.removeEventListener('pointerdown', this.handlePointerDown);\n this.teardown();\n }\n\n private captureGesture(event: PointerEvent): void {\n this.activePointerId = event.pointerId;\n this.captureTarget = event.target instanceof Element ? event.target : this.options.element;\n\n try {\n this.captureTarget.setPointerCapture?.(event.pointerId);\n } catch {\n // Capture can fail after cancel/detach; window listeners still continue.\n }\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n window.addEventListener('pointercancel', this.handlePointerUp);\n }\n\n private teardown(): void {\n if (this.activePointerId !== null && this.captureTarget) {\n try {\n this.captureTarget.releasePointerCapture?.(this.activePointerId);\n } catch {\n // Release must stay best-effort during teardown.\n }\n }\n\n this.activePointerId = null;\n this.captureTarget = null;\n this._active = null;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n window.removeEventListener('pointercancel', this.handlePointerUp);\n }\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (this.destroyed || this._active !== null) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n // Resize handles must win over drag handles.\n const resizeHandle = this.options.resolveResizeHandle(event.target);\n if (resizeHandle) {\n event.preventDefault();\n event.stopPropagation();\n this.startResize(resizeHandle, event);\n return;\n }\n\n if (this.options.isDragTarget(event.target)) {\n this.startDrag(event);\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (this.destroyed || event.pointerId !== this.activePointerId) return;\n\n if (this._active === 'drag') {\n this.options.onDragMove(this.options.dragEngine.move(toPoint(event), event));\n } else if (this._active === 'resize') {\n this.options.onResizeMove(this.options.resizeEngine.move(toPoint(event), event));\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (this.destroyed || event.pointerId !== this.activePointerId) return;\n\n if (this._active === 'drag') {\n this.options.onDragEnd(this.options.dragEngine.end(toPoint(event), event));\n } else if (this._active === 'resize') {\n this.options.onResizeEnd(this.options.resizeEngine.end(toPoint(event), event));\n }\n\n this.teardown();\n };\n}\n\nexport function createInteractionManager(options: InteractionManagerOptions): InteractionManager {\n return new InteractionManager(options);\n}\n","import type { Point, PositioningMode, Size } from '../core/types';\n\nexport interface BaseStyleOptions {\n positioning: PositioningMode;\n forcePositioning?: boolean;\n}\n\nexport interface PositionRenderer {\n positioning: PositioningMode;\n origin: Point;\n baseTransform: string;\n flowRelative: boolean;\n}\n\nexport function applyBaseStyles(element: HTMLElement, options: BaseStyleOptions): void {\n const style = element.style;\n const computedPosition = window.getComputedStyle?.(element).position ?? style.position;\n\n if (options.forcePositioning || computedPosition === 'static') {\n style.position = options.positioning;\n }\n\n if (!style.touchAction) style.touchAction = 'none';\n if (!style.userSelect) style.userSelect = 'none';\n if (!style.boxSizing) style.boxSizing = 'border-box';\n if (!style.willChange) style.willChange = 'transform';\n}\n\nexport function readRenderedPosition(element: HTMLElement, positioning: PositioningMode): Point {\n const rect = element.getBoundingClientRect();\n\n if (positioning === 'fixed') {\n return { x: rect.left || 0, y: rect.top || 0 };\n }\n\n if (positioning === 'absolute') {\n const parent = element.offsetParent as HTMLElement | null;\n\n if (parent) {\n const parentRect = parent.getBoundingClientRect();\n return {\n x: (rect.left || 0) - (parentRect.left || 0) + (parent.scrollLeft || 0),\n y: (rect.top || 0) - (parentRect.top || 0) + (parent.scrollTop || 0),\n };\n }\n\n return {\n x: (rect.left || 0) + (window.scrollX || 0),\n y: (rect.top || 0) + (window.scrollY || 0),\n };\n }\n\n // Normal-flow windows move relative to their original rendered position.\n return { x: rect.left || 0, y: rect.top || 0 };\n}\n\nexport function createPositionRenderer(\n element: HTMLElement,\n positioning: PositioningMode,\n initialPosition: Point\n): PositionRenderer {\n const baseTransform = normalizeTransform(element.style.transform);\n\n if (positioning === 'relative') {\n return {\n positioning,\n origin: readRenderedPosition(element, positioning),\n baseTransform,\n flowRelative: true,\n };\n }\n\n // Normalize right/bottom anchored CSS to left/top once for stable resizing.\n element.style.left = `${initialPosition.x}px`;\n element.style.top = `${initialPosition.y}px`;\n element.style.right = 'auto';\n element.style.bottom = 'auto';\n\n return {\n positioning,\n origin: { ...initialPosition },\n baseTransform: '',\n flowRelative: false,\n };\n}\n\nexport function writePosition(element: HTMLElement, point: Point, renderer: PositionRenderer): void {\n const dx = point.x - renderer.origin.x;\n const dy = point.y - renderer.origin.y;\n const translate = dx === 0 && dy === 0 ? '' : `translate3d(${dx}px, ${dy}px, 0)`;\n element.style.transform = joinTransforms(renderer.baseTransform, translate);\n}\n\nexport function writeSize(element: HTMLElement, size: Size): void {\n element.style.width = `${size.width}px`;\n element.style.height = `${size.height}px`;\n}\n\nfunction normalizeTransform(value: string | undefined): string {\n if (!value || value === 'none') return '';\n return value.trim();\n}\n\nfunction joinTransforms(base: string, translate: string): string {\n if (base && translate) return `${base} ${translate}`;\n if (base) return base;\n return translate;\n}\n","import type { ResizeHandle } from '../core/types';\n\nconst CORNER_SIZE_PX = 14;\nconst EDGE_THICKNESS_PX = 8;\n\nconst EDGE_STYLES: Record<ResizeHandle, Partial<CSSStyleDeclaration>> = {\n nw: { top: '0', left: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nwse-resize' },\n ne: { top: '0', right: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nesw-resize' },\n sw: { bottom: '0', left: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nesw-resize' },\n se: { bottom: '0', right: '0', width: `${CORNER_SIZE_PX}px`, height: `${CORNER_SIZE_PX}px`, cursor: 'nwse-resize' },\n\n n: { top: '0', left: `${CORNER_SIZE_PX}px`, right: `${CORNER_SIZE_PX}px`, height: `${EDGE_THICKNESS_PX}px`, cursor: 'ns-resize' },\n s: { bottom: '0', left: `${CORNER_SIZE_PX}px`, right: `${CORNER_SIZE_PX}px`, height: `${EDGE_THICKNESS_PX}px`, cursor: 'ns-resize' },\n e: { right: '0', top: `${CORNER_SIZE_PX}px`, bottom: `${CORNER_SIZE_PX}px`, width: `${EDGE_THICKNESS_PX}px`, cursor: 'ew-resize' },\n w: { left: '0', top: `${CORNER_SIZE_PX}px`, bottom: `${CORNER_SIZE_PX}px`, width: `${EDGE_THICKNESS_PX}px`, cursor: 'ew-resize' },\n};\n\nexport function createResizeHandle(handle: ResizeHandle): HTMLElement {\n const el = document.createElement('div');\n el.dataset.freedomResizeHandle = handle;\n el.className = `freedom-resize-handle freedom-resize-handle--${handle}`;\n\n Object.assign(el.style, {\n position: 'absolute',\n boxSizing: 'border-box',\n touchAction: 'none',\n userSelect: 'none',\n pointerEvents: 'auto',\n zIndex: '1',\n ...EDGE_STYLES[handle],\n });\n\n return el;\n}\n","export interface FrameScheduler {\n schedule(): void;\n cancel(): void;\n}\n\nexport function createFrameScheduler(flush: () => void): FrameScheduler {\n let frameHandle: number | null = null;\n\n return {\n schedule(): void {\n if (frameHandle !== null) return;\n frameHandle = requestAnimationFrame(() => {\n frameHandle = null;\n flush();\n });\n },\n cancel(): void {\n if (frameHandle !== null) {\n cancelAnimationFrame(frameHandle);\n frameHandle = null;\n }\n },\n };\n}\n","import type {\n BoundsOption,\n FreedomPlugin,\n FreedomWindow,\n FreedomWindowOptions,\n InitialPosition,\n Point,\n PositioningMode,\n PluginContext,\n ResizeHandle,\n Size,\n WindowEventMap,\n} from '../core/types';\nimport { Emitter } from '../core/events';\nimport { clampSize, type SizeLimits } from '../core/math';\nimport { createDragEngine } from '../engine/drag';\nimport { createResizeEngine } from '../engine/resize';\nimport { createInteractionManager } from '../core/interaction-manager';\nimport {\n applyBaseStyles,\n createPositionRenderer,\n readRenderedPosition,\n writePosition,\n writeSize,\n} from '../dom/render';\nimport { createResizeHandle } from '../dom/handles';\nimport { createFrameScheduler } from '../dom/scheduler';\n\nconst ALL_HANDLES: readonly ResizeHandle[] = ['n', 's', 'e', 'w', 'nw', 'ne', 'sw', 'se'];\nconst instances = new WeakMap<HTMLElement, FreedomWindow>();\n\nlet autoId = 0;\n\nexport function createWindow(element: HTMLElement, options: FreedomWindowOptions = {}): FreedomWindow {\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n throw new Error('freedom.window() requires a browser environment. Importing is SSR-safe, but creating a window must run in the browser.');\n }\n\n assertHTMLElement(element);\n\n if (instances.has(element)) {\n throw new Error('freedom.window() was called more than once for the same element. Destroy the existing instance before creating a new one.');\n }\n\n const id = options.id ?? `freedom-window-${++autoId}`;\n const emitter = new Emitter<WindowEventMap>();\n const plugins: readonly FreedomPlugin[] = options.plugins ?? [];\n const limits = normalizeSizeLimits(options);\n const positioning = resolvePositioning(element, options);\n\n // Initialization stays synchronous to prevent top-left first paint.\n applyBaseStyles(element, {\n positioning,\n forcePositioning: shouldForcePositioning(element, options),\n });\n\n let size: Size = clampSize(sanitizeSize(options.initialSize ?? readInitialSize(element), 'initialSize'), limits);\n let position: Point = resolveInitialPosition(options.initialPosition, element, size, options.bounds, positioning);\n const renderer = createPositionRenderer(element, positioning, position);\n let zIndex = normalizeZIndex(options.zIndex ?? 0);\n let focused = false;\n let isDraggable = options.draggable ?? true;\n let isDestroyed = false;\n\n writeSize(element, size);\n writePosition(element, position, renderer);\n if (zIndex) element.style.zIndex = String(zIndex);\n revealIfRequested(element, options);\n\n let pendingPosition: Point | null = null;\n let pendingSize: Size | null = null;\n\n const scheduler = createFrameScheduler(() => {\n if (isDestroyed) return;\n\n if (pendingPosition) {\n writePosition(element, pendingPosition, renderer);\n pendingPosition = null;\n }\n if (pendingSize) {\n writeSize(element, pendingSize);\n pendingSize = null;\n }\n });\n\n function paint(nextPosition?: Point, nextSize?: Size): void {\n if (nextPosition) pendingPosition = nextPosition;\n if (nextSize) pendingSize = nextSize;\n scheduler.schedule();\n }\n\n function assertAlive(method: string): void {\n if (isDestroyed) {\n throw new Error(`Cannot call ${method}() on a destroyed freedom window.`);\n }\n }\n\n const pluginContext: PluginContext = {\n element,\n get window(): FreedomWindow {\n return api;\n },\n };\n\n const dragHandleElement = resolveDragHandle(element, options.dragHandle);\n\n function isDragTarget(target: EventTarget | null): boolean {\n if (!isDraggable || !dragHandleElement) return false;\n if (!(target instanceof Node)) return false;\n return dragHandleElement === target || dragHandleElement.contains(target);\n }\n\n const dragEngine = createDragEngine({\n element,\n bounds: options.bounds,\n plugins,\n pluginContext,\n getPosition: () => position,\n getSize: () => size,\n });\n\n const resizeHandleElements = new Map<ResizeHandle, HTMLElement>();\n\n function resolveResizeHandle(target: EventTarget | null): ResizeHandle | null {\n if (!(target instanceof Element)) return null;\n const handleEl = target.closest<HTMLElement>('.freedom-resize-handle');\n if (!handleEl) return null;\n\n for (const [handle, el] of resizeHandleElements) {\n if (el === handleEl) return handle;\n }\n\n return null;\n }\n\n const resizeEngine = createResizeEngine({\n element,\n bounds: options.bounds,\n ...limits,\n plugins,\n pluginContext,\n getPosition: () => position,\n getSize: () => size,\n });\n\n function setupResizeHandles(handles: readonly ResizeHandle[]): void {\n const normalizedHandles = normalizeResizeHandles(handles);\n for (const handle of normalizedHandles) {\n if (resizeHandleElements.has(handle)) continue;\n const handleEl = createResizeHandle(handle);\n element.appendChild(handleEl);\n resizeHandleElements.set(handle, handleEl);\n }\n }\n\n function teardownResizeHandles(handles: readonly ResizeHandle[] = ALL_HANDLES): void {\n for (const handle of handles) {\n const handleEl = resizeHandleElements.get(handle);\n if (handleEl) {\n handleEl.remove();\n resizeHandleElements.delete(handle);\n }\n }\n }\n\n const interactionManager = createInteractionManager({\n element,\n dragEngine,\n resizeEngine,\n resolveResizeHandle,\n isDragTarget,\n\n onDragStart(data) {\n element.classList.add('freedom-dragging');\n emitter.emit('dragstart', data);\n },\n onDragMove({ position: next, data }) {\n position = next;\n paint(position);\n emitter.emit('drag', data);\n },\n onDragEnd(data) {\n element.classList.remove('freedom-dragging');\n emitter.emit('dragend', data);\n },\n\n onResizeStart(data) {\n element.classList.add('freedom-resizing');\n emitter.emit('resizestart', data);\n },\n onResizeMove({ position: nextPosition, size: nextSize, data }) {\n position = nextPosition;\n size = nextSize;\n paint(position, size);\n emitter.emit('resize', data);\n },\n onResizeEnd(data) {\n element.classList.remove('freedom-resizing');\n emitter.emit('resizeend', data);\n },\n });\n\n const initialResizeHandles = resolveEnabledHandles(options.resizable ?? true);\n if (initialResizeHandles.length > 0) setupResizeHandles(initialResizeHandles);\n\n const api: FreedomWindow = {\n id,\n element,\n\n getPosition(): Point {\n assertAlive('getPosition');\n return { ...position };\n },\n\n getSize(): Size {\n assertAlive('getSize');\n return { ...size };\n },\n\n setPosition(point: Point): void {\n assertAlive('setPosition');\n position = sanitizePoint(point, 'setPosition');\n paint(position);\n },\n\n setSize(nextSize: Size): void {\n assertAlive('setSize');\n size = clampSize(sanitizeSize(nextSize, 'setSize'), limits);\n paint(undefined, size);\n },\n\n focus(): void {\n assertAlive('focus');\n if (focused) return;\n focused = true;\n element.classList.add('freedom-focused');\n emitter.emit('focus', undefined);\n options.onFocus?.();\n },\n\n blur(): void {\n assertAlive('blur');\n if (!focused) return;\n focused = false;\n element.classList.remove('freedom-focused');\n emitter.emit('blur', undefined);\n options.onBlur?.();\n },\n\n isFocused(): boolean {\n assertAlive('isFocused');\n return focused;\n },\n\n setZIndex(next: number): void {\n assertAlive('setZIndex');\n zIndex = normalizeZIndex(next);\n element.style.zIndex = String(zIndex);\n },\n\n getZIndex(): number {\n assertAlive('getZIndex');\n return zIndex;\n },\n\n enableDrag(): void {\n assertAlive('enableDrag');\n isDraggable = true;\n },\n\n disableDrag(): void {\n assertAlive('disableDrag');\n isDraggable = false;\n if (interactionManager.active === 'drag') {\n interactionManager.cancel();\n element.classList.remove('freedom-dragging');\n }\n },\n\n enableResize(handles: ResizeHandle[] = ALL_HANDLES as ResizeHandle[]): void {\n assertAlive('enableResize');\n setupResizeHandles(handles);\n },\n\n disableResize(): void {\n assertAlive('disableResize');\n if (interactionManager.active === 'resize') {\n interactionManager.cancel();\n element.classList.remove('freedom-resizing');\n }\n teardownResizeHandles();\n },\n\n destroy(): void {\n if (isDestroyed) return;\n isDestroyed = true;\n interactionManager.destroy();\n teardownResizeHandles();\n scheduler.cancel();\n element.classList.remove('freedom-dragging', 'freedom-resizing', 'freedom-focused');\n for (const plugin of plugins) plugin.onDestroy?.(pluginContext);\n emitter.emit('destroy', undefined);\n emitter.clear();\n instances.delete(element);\n },\n\n on(event, handler) {\n assertAlive('on');\n return emitter.on(event, handler);\n },\n };\n\n instances.set(element, api);\n\n if (options.onDragStart) api.on('dragstart', options.onDragStart);\n if (options.onDrag) api.on('drag', options.onDrag);\n if (options.onDragEnd) api.on('dragend', options.onDragEnd);\n if (options.onResizeStart) api.on('resizestart', options.onResizeStart);\n if (options.onResize) api.on('resize', options.onResize);\n if (options.onResizeEnd) api.on('resizeend', options.onResizeEnd);\n\n for (const plugin of plugins) plugin.onInit?.(pluginContext);\n\n return api;\n}\n\nfunction assertHTMLElement(element: unknown): asserts element is HTMLElement {\n const maybeElement = element as Partial<HTMLElement> | null | undefined;\n const isUsableElement =\n !!maybeElement &&\n typeof maybeElement === 'object' &&\n (maybeElement as { nodeType?: number }).nodeType === 1 &&\n typeof maybeElement.getBoundingClientRect === 'function' &&\n !!maybeElement.style &&\n typeof maybeElement.addEventListener === 'function' &&\n typeof maybeElement.removeEventListener === 'function';\n\n if (!isUsableElement) {\n throw new TypeError('freedom.window(element) expected a real HTMLElement. Received null, undefined, or a non-element value.');\n }\n}\n\nfunction normalizeSizeLimits(options: FreedomWindowOptions): SizeLimits {\n const minWidth = finiteNonNegative(options.minWidth, 0);\n const minHeight = finiteNonNegative(options.minHeight, 0);\n const maxWidth = finitePositiveOrInfinity(options.maxWidth, Infinity);\n const maxHeight = finitePositiveOrInfinity(options.maxHeight, Infinity);\n\n return {\n minWidth,\n minHeight,\n maxWidth: Math.max(minWidth, maxWidth),\n maxHeight: Math.max(minHeight, maxHeight),\n };\n}\n\nfunction finiteNonNegative(value: number | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction finitePositiveOrInfinity(value: number | undefined, fallback: number): number {\n if (value === Infinity) return Infinity;\n return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\n\nfunction normalizeZIndex(value: number): number {\n return Number.isFinite(value) ? Math.trunc(value) : 0;\n}\n\nfunction sanitizePoint(point: Point, source: string): Point {\n if (!point || typeof point.x !== 'number' || typeof point.y !== 'number' || !Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n throw new TypeError(`freedom.window(): ${source} expected a finite { x, y } point.`);\n }\n return { x: point.x, y: point.y };\n}\n\nfunction sanitizeSize(size: Size, source: string): Size {\n if (!size || typeof size.width !== 'number' || typeof size.height !== 'number' || !Number.isFinite(size.width) || !Number.isFinite(size.height)) {\n throw new TypeError(`freedom.window(): ${source} expected a finite { width, height } size.`);\n }\n return { width: Math.max(0, size.width), height: Math.max(0, size.height) };\n}\n\nfunction shouldForcePositioning(element: HTMLElement, options: FreedomWindowOptions): boolean {\n const computed = window.getComputedStyle(element).position;\n return Boolean(options.positioning) || computed === 'static';\n}\n\nfunction resolvePositioning(element: HTMLElement, options: FreedomWindowOptions): PositioningMode {\n if (options.positioning) return options.positioning;\n\n const computed = window.getComputedStyle(element);\n if (computed.position === 'fixed') return 'fixed';\n if (computed.position === 'absolute') return 'absolute';\n if (computed.position === 'relative' || computed.position === 'sticky') return 'relative';\n\n if (hasAuthoredInset(computed)) return 'fixed';\n\n if (options.initialPosition !== undefined) {\n return options.bounds === 'parent' ? 'absolute' : 'fixed';\n }\n\n return 'relative';\n}\n\nfunction hasAuthoredInset(style: CSSStyleDeclaration): boolean {\n return [style.top, style.right, style.bottom, style.left].some((value) => {\n if (!value || value === 'auto') return false;\n return value !== '0px' && value !== '0';\n });\n}\n\nfunction resolveInitialPosition(\n initialPosition: InitialPosition | undefined,\n element: HTMLElement,\n size: Size,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): Point {\n if (initialPosition === 'center') {\n return centerPosition(element, size, bounds, positioning);\n }\n\n if (initialPosition) {\n return sanitizePoint(initialPosition, 'initialPosition');\n }\n\n return readRenderedPosition(element, positioning);\n}\n\nfunction centerPosition(\n element: HTMLElement,\n size: Size,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): Point {\n const box = resolveCenterBox(element, bounds, positioning);\n\n return {\n x: Math.round(box.x + Math.max(0, box.width - size.width) / 2),\n y: Math.round(box.y + Math.max(0, box.height - size.height) / 2),\n };\n}\n\nfunction resolveCenterBox(\n element: HTMLElement,\n bounds: BoundsOption | undefined,\n positioning: PositioningMode\n): { x: number; y: number; width: number; height: number } {\n if (bounds && typeof bounds === 'object') {\n return { x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height };\n }\n\n if (bounds === 'parent') {\n const parent = element.offsetParent as HTMLElement | null;\n if (parent) return { x: 0, y: 0, width: parent.clientWidth, height: parent.clientHeight };\n }\n\n if (positioning === 'absolute' && bounds !== 'viewport') {\n const parent = element.offsetParent as HTMLElement | null;\n if (parent) return { x: 0, y: 0, width: parent.clientWidth, height: parent.clientHeight };\n }\n\n const root = document.documentElement;\n return {\n x: 0,\n y: 0,\n width: window.innerWidth || root.clientWidth,\n height: window.innerHeight || root.clientHeight,\n };\n}\n\nfunction readInitialSize(element: HTMLElement): Size {\n const rect = element.getBoundingClientRect();\n return {\n width: rect.width || element.offsetWidth || 0,\n height: rect.height || element.offsetHeight || 0,\n };\n}\n\nfunction revealIfRequested(element: HTMLElement, options: FreedomWindowOptions): void {\n if (options.autoReveal === false) return;\n const visibility = window.getComputedStyle(element).visibility;\n if (visibility === 'hidden') {\n element.style.visibility = 'visible';\n }\n}\n\nfunction resolveDragHandle(\n element: HTMLElement,\n handleOption: FreedomWindowOptions['dragHandle']\n): HTMLElement | null {\n if (handleOption === null) return null;\n if (handleOption === undefined) return element;\n if (typeof handleOption === 'string') return element.querySelector<HTMLElement>(handleOption);\n return handleOption;\n}\n\nfunction resolveEnabledHandles(option: NonNullable<FreedomWindowOptions['resizable']>): ResizeHandle[] {\n if (option === false) return [];\n if (option === true) return [...ALL_HANDLES];\n return normalizeResizeHandles(option);\n}\n\nfunction normalizeResizeHandles(handles: readonly ResizeHandle[]): ResizeHandle[] {\n const unique = new Set<ResizeHandle>();\n\n for (const handle of handles) {\n if (!ALL_HANDLES.includes(handle)) {\n throw new TypeError(`freedom.window(): invalid resize handle \"${String(handle)}\".`);\n }\n unique.add(handle);\n }\n\n return [...unique];\n}\n"]}
|