@oyerinde/caliper 0.2.0 → 0.2.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/solid-js@1.9.11/node_modules/solid-js/dist/solid.js","../../../node_modules/.pnpm/solid-js@1.9.11/node_modules/solid-js/web/dist/web.js","../../core/src/scheduling/reader.ts","../../core/src/shared/constants/index.ts","../../core/src/scheduling/frequency-control.ts","../../core/src/scheduling/suppression.ts","../../core/src/shared/utils/dom-utils.ts","../../core/src/element-picking/utils/filter-visible.ts","../../core/src/cursor-context/utils/priority-rules.ts","../../core/src/geometry/utils/scroll-aware.ts","../../core/src/measurement-model/utils/measurement-result.ts","../../core/src/measurement-model/utils/create-measurement.ts","../../core/src/measurement-model/utils/state-machine.ts","../../core/src/calculator-model/utils/calculator-state.ts","../../core/src/measurement-model/utils/calculator-integration.ts","../../core/src/measurement-model/utils/projection-system.ts","../../core/src/shared/utils/id.ts","../../core/src/ruler-model/utils/ruler-system.ts","../../core/src/measurement-model/utils/measurement-system.ts","../../core/src/shared/utils/raf.ts","../../core/src/measurement-model/utils/selection-system.ts","../../core/src/shared/utils/os.ts","../../core/src/shared/config/overlay-config.ts","../../core/src/shared/config/config-utils.ts","../../core/src/shared/utils/version-check.ts","../../core/src/shared/utils/math.ts","../../core/src/shared/utils/text-content.ts","../../core/src/shared/utils/class-filter.ts","../../core/src/shared/utils/selector.ts","../../core/src/shared/utils/logger.ts","../../core/src/shared/utils/keyboard.ts","../../overlay/dist/index.js","../src/auto-lite.ts"],"names":["equalFn","a","b","$TRACK","signalOptions","runEffects","runQueue","STALE","PENDING","UNOWNED","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createRoot","fn","detachedOwner","listener","owner","unowned","current","root","updateFn","untrack","cleanNode","runUpdates","createSignal","value","options","s","setter","writeSignal","readSignal","createRenderEffect","c","createComputation","updateComputation","createEffect","runUserEffects","createMemo","on","deps","isArray","prevInput","prevValue","input","i","result","onMount","onCleanup","getOwner","runWithOwner","o","prev","prevListener","err","handleError","transPending","setTransPending","runningTransition","updates","lookUpstream","sSlot","node","isComp","TransitionRunning","markDownstream","time","runComputation","nextValue","init","pure","state","runTop","ancestors","wait","res","completeUpdates","e","queue","userLength","ignore","source","index","obs","n","castError","error","FALLBACK","dispose","d","mapArray","list","mapFn","items","mapped","disposers","len","indexes","newItems","newLen","j","newIndices","newIndicesNext","temp","tempdisposers","tempIndexes","start","end","newEnd","item","disposer","mapper","set","createComponent","Comp","props","narrowedError","name","For","fallback","Show","keyed","conditionValue","condition","child","memo","reconcileArrays","parentNode","bLength","aEnd","bEnd","aStart","bStart","after","map","sequence","t","$$EVENTS","render","code","element","insert","template","html","isImportNode","isSVG","isMathML","create","delegateEvents","eventNames","document","l","eventHandler","setAttribute","className","style","nodeStyle","v","setStyleProperty","parent","accessor","marker","initial","insertExpression","key","oriTarget","oriCurrentTarget","retarget","handleNode","handler","data","walkUpTree","path","unwrapArray","multi","cleanChildren","array","currentArray","normalizeIncomingArray","appendNodes","normalized","unwrap","dynamic","replacement","inserted","el","isParent","SVG_NAMESPACE","createElement","tagName","is","Portal","useShadow","mount","content","clean","setClean","cleanup","container","renderRoot","createReader","rafId","idleId","taskController","timeoutId","detectBestStrategy","scheduleWithScheduler","callback","urgent","scheduleWithIdle","Scheduler","TaskController","scheduleWithRAF","deadline","scheduleWithTimeout","scheduleRead","cancel","MAX_FRAME_TIMES","DEFAULT_READ_INTERVAL","SUPPRESSION_MAX_FRAMES","RESIZE_THROTTLE_MS","SUPPRESSION_DELAY","MAX_RULER_PAIRS","MAX_RULER_LINES","RULER_SNAP_THRESHOLD","RULER_HIT_SIZE","CALIPER_PREFIX","BRIDGE_TAB_ID_KEY","OVERLAY_CONTAINER_ID","MAX_SAFE_Z_INDEX","RUNTIME_CLASS_IGNORE_PREFIXES","createFrequencyControlledReader","baseReader","lastReadTime","readInterval","frameTimes","trailingTimeoutId","pendingTask","adaptToFrameRate","fps","recordFrameTime","timestamp","last","first","duration","executeNow","timeSinceLastRead","createSuppressionDelegate","action","maxFrames","delay","suppressionFrames","trailingTimer","shouldSuppress","args","isRenderable","win","HTMLElement","SVGElement","getOverlayRoot","isVisible","contentVisibility","hasSize","rect","isEligible","HYSTERESIS_THRESHOLD","isCaliperNode","getElementAtPoint","x","y","getTopElementAtPoint","detectBestContext","selectedElement","cursorX","cursorY","getDistanceToEdge","dx","dy","resolveAmbiguousContext","previousContext","previousElement","winnerContext","winnerElement","getScrollGeometryStyle","computedStyle","getScrollAwareRect","elementRect","overflowIndicatesClipping","isScrollContainer","establishesScrollingBox","getFullHierarchy","styles","hasStickyAbove","nextStyle","scrollHierarchy","positionMode","scrollAnchor","containingBlock","anchorAbsoluteDepth","ancestor","depthFromRoot","containerElement","calculateStickyRef","scrollOffset","naturalPosition","threshold","containerDimension","elementDimension","isOppositeMode","staticRelationship","isCrossContainerMode","absContainerDim","stuck","maxViewportPos","calculateStickyDelta","currentScroll","initialScroll","startRef","endRef","getTotalScrollDelta","hierarchy","position","sticky","initialWindowX","initialWindowY","hasContainingBlock","totalDeltaX","totalDeltaY","stickyApplied","scrollState","isFixed","isDescendantOfStickyAnchor","thresholdX","thresholdY","isOppX","isOppY","scrollDeltaX","scrollDeltaY","stickyViewportDeltaX","stickyViewportDeltaY","getCommonVisibilityWindow","hierarchy1","hierarchy2","element1","element2","initWinX","initWinY","h1Map","h2Map","commonElements","scrollIndex","minX","maxX","minY","maxY","getSuffixSums","sumsX","sumsY","h1Suffix","h2Suffix","isH1","suffix","sIndex","containerRect","ancestorDeltaX","ancestorDeltaY","windowScrollAdjustmentX","windowScrollAdjustmentY","hasStickyAncestorFlag","checkElement","checkStyle","containerLiveLeft","containerLiveTop","clipLeft","clipTop","clipRight","clipBottom","getLiveGeometry","stableRect","deltaX","deltaY","vMinX","vMaxX","vMinY","vMaxY","hierarchyLength","suffixSumsX","suffixSumsY","left","top","width","height","isHidden","topClip","leftClip","bottomClip","rightClip","parseStickyOffset","rawValue","parsed","getRootOffset","curr","collectStickyOnPath","from","to","out","getDistanceFromContainer","targetElement","stickyElements","targetOffset","containerOffset","originalPosition","getDistancesWithSingleToggle","scrollingContainer","cappingContainer","seen","anchorOffset","cappingNaturalPosition","capOffset","deduceGeometry","treeDepth","stickyConfig","currentParent","isDocLevelCapping","isCappingContainerSticky","anchorRect","childRelTop","childRelLeft","childRelBottom","childRelRight","topSticky","bottomSticky","leftSticky","rightSticky","needCappingDistance","dist","containerHeight","containerWidth","isWindowLevel","cappingHeight","cappingWidth","parentTrackHeight","parentTrackWidth","scrollerHeight","scrollerWidth","clampPointToGeometry","point","geometry","viewport","createMeasurementLines","context","primary","secondary","lines","distance","calculateSiblingDistance","padding","calculatePaddingLines","sibling","overlapXStart","overlapXEnd","hasOverlapX","overlapYStart","overlapYEnd","hasOverlapY","syncBase","centerX","distBtoT","distTtoB","startY","endY","centerY","distRtoL","distLtoR","startX","endX","pFaces","sFaces","minD2","bestP","bestS","p","d2","pFace","sFace","getLivePoint","pt","line","primaryDelta","secondaryDelta","scrollX","scrollY","syncX","syncY","getLiveLineValue","startPoint","endPoint","createMeasurement","secondaryElement","createMeasurementBetween","primaryElement","resolvedContext","primaryGeom","secondaryGeom","createStateMachine","getState","transitionTo","newState","allowed","isIdle","isArmed","isMeasuring","isFrozen","createCalculatorState","calculate","val","inputNum","dispatch","isDot","alreadyHasDot","hasResult","isSwitchable","createCalculatorIntegration","calculator","open","baseValue","handleInput","handleBackspace","handleDelete","handleEnter","close","syncValue","getResult","createProjectionSystem","listeners","notify","direction","char","max","newValueStr","newValueNum","generateId","prefix","randomPart","createRulerSystem","hLine","vLine","id","createMeasurementSystem","reader","stateMachine","projection","ruler","currentResult","notifyListeners","measure","cursor","measurement","freeze","unfreeze","isAltDown","abort","stop","getCurrentResult","getSecondaryElement","getCalculator","getProjection","getRuler","onStateChange","updatePrimaryRect","newPrimary","updateSecondaryRect","newSecondary","applyResult","waitPostRaf","resolve","reject","createSelectionSystem","selectedRect","depth","updateListeners","getMetadata","metadata","select","getSelected","getSelectedRect","clear","onUpdate","updateRect","IS_BROWSER","detectOS","platform","ua","OS_NAME","IS_APPLE","OS","DEFAULT_COMMANDS","DEFAULT_THEME","DEFAULT_ANIMATION","parseNumber","defaultValue","num","withOpacity","color","opacity","hex","r","g","applyTheme","theme","target","mergeCommands","userCommands","mergeAnimation","userAnimation","mergeTheme","userTheme","getConfig","windowConfig","dataConfig","CALIPER_LOGO_SVG","fetchLatestVersion","response","compareVersions","v1","v2","parts1","parts2","part1","part2","showVersionInfo","currentVersion","latestInfo","lerp","lerpRect","getElementDirectText","maxLength","directText","children","trimmed","filterRuntimeClasses","classes","buildSelectorInfo","agentId","text","nthChild","info","scrollStateItem","_removedElement","serializableScrollState","tabId","isGlobalEnabled","Logger","enabled","logger","getNormalizedModifiers","isAltGraph","getLogicalKey","isKeyMatch","OVERLAY_STYLES","PREFIX","_tmpl$","_tmpl$2","_tmpl$3","MeasurementLinesWithCalculator","hoveredLine","setHoveredLine","hasClipping","clipPathId","vCommon","_el$","_el$5","_el$2","_el$3","_el$4","_p$","_v$","_v$2","_v$3","_v$4","lineData","sRaw","eRaw","liveValue","isHovered","_el$6","_el$7","_el$8","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","_tmpl$4","_tmpl$22","MeasurementLabels","dxRaw","dyRaw","naturalX","naturalY","vpMinX","vpMaxX","vpMinY","vpMaxY","common","hasCommon","cMinX","cMaxX","cMinY","cMaxY","lineMinX","lineMaxX","lineMinY","lineMaxY","visibleLineMinX","visibleLineMaxX","visibleLineMinY","visibleLineMaxY","targetX","targetY","pos","_$p","_tmpl$5","_tmpl$23","_tmpl$32","_tmpl$42","iconStyle","Icons","_tmpl$6","_tmpl$24","_tmpl$33","Calculator","formatValue","operation","Icon","_c$","_tmpl$7","BoundaryBoxes","anchor","setAnchor","setTarget","lastElement","isRectSame","lerpTo","targetGeo","lerpFactor","next","liveSelectionTarget","liveSecondaryTarget","selection","factor","isNewElement","useLerp","animate","currentAnchor","nextAnchor","_tmpl$8","_tmpl$25","_tmpl$34","SelectionLabel","liveGeo","labelData","geo","vLeft","vRight","vBottom","cLeft","cRight","cBottom","effectiveMinX","effectiveMaxX","effectiveMaxY","visibleLeft","visibleRight","snapX","snapY","_tmpl$9","_tmpl$26","_tmpl$35","ProjectionOverlay","ProjectionLines","ProjectionInput","vp","live","x1","y1","x2","y2","labelX","labelY","visibleY1","visibleY2","visibleX1","visibleX2","docWidth","docHeight","liveX","liveY","isOffScreen","actualValue","labelWidthGuess","labelHeightGuess","isHorizontal","showLabel","setIsHovered","handleLineClick","windowTop","windowLeft","inputHeight","margin","_tmpl$10","_tmpl$27","_tmpl$36","_tmpl$43","_tmpl$52","RulerOverlay","draggingId","setDraggingId","hoveredId","setHoveredId","selectedIds","setSelectedIds","rulerOrigins","setRulerOrigins","currentIds","validIds","origins","updated","newOrigins","lineIds","_","getProportionalPosition","origin","isV","originDim","currentDim","getSnapPoints","points","meta","applySnap","handleKeyDown","activeIds","activeLines","step","firstLine","delta","isLineV","currentPos","newPos","handleGlobalClick","handlePointerDown","type","line2","onPointerMove","moveEvent","vp2","onPointerUp","upEvent","handlePointerOver","handlePointerOut","bridges","ids","vLinesWithPos","hLinesWithPos","l1","l2","handleClick","bridge","RulerLineItem","lineStyle","isActive","hitSize","hitOffset","_el$9","_v$12","_v$13","_v$14","_v$15","_v$16","_el$0","_el$1","_v$17","_v$18","_tmpl$11","Overlay","resultData","primaryGeo","base","hasSameStack","isDirectParentChild","Root","config","commands","animation","setResult","setCursor","setViewport","selectionMetadata","setSelectionMetadata","calculatorState","setCalculatorState","projectionState","setProjectionState","activeCalculatorLine","setActiveCalculatorLine","isSelectKeyDown","setIsSelectKeyDown","activeInputFocus","setActiveInputFocus","pinnedCalculatorPos","setPinnedCalculatorPos","system","selectionSystem","projectionSystem","rulerSystem","rulerState","setRulerState","isActivatePressed","setIsActivatePressed","setIsFrozen","isCopied","setIsCopied","isAgentActive","setIsAgentActive","copyTimeoutId","ignoredElements","viewportRafId","resizeObserver","observedRoot","observedPrimary","observedSecondary","resetCopyFeedback","resetCalculatorUI","syncCalculatorUI","syncViewport","scheduleUpdate","unsubscribeProjection","unsubscribeRuler","unsubscribe","unsubscribeUpdate","handleAgentLockChange","selectionTimeoutId","lastPointerPos","performSelection","lastHoveredElement","selectionDelegate","measureDelegate","isCommandActive","mods","isActivateActive","handlePointerUp","handleContextMenu","contextEvent","measurementResult","clipboardContent","lastMouseEvent","mouseMoveRafId","cursor2","hover","processMouseMove","cursorPoint","isAlt","hoveredElement","isAncestor","handleMouseMove","isCalcActive","isProjActive","shouldCalcGetNumbers","isNumeric","isOperator","isDecimal","isBackspace","isDelete","isEnter","isEscape","handleCalculatorInput","handleCalculatorBackspace","handleCalculatorDelete","handleCalculatorEnter","handleCalculatorClose","dir","currentElement","maxRunway","dir2","getMaxProjectionDistance","hasPriority","currentDir","targetType","targetLine","handleKeyUp","handleBlur","handleFocus","handleDblClick","lastPathname","clearOnNavigate","newPathname","originalPushState","originalReplaceState","updateResizeObservations","active","primaryEl","secondaryEl","resizeTimer","lastRun","sentinelResized","primaryChanged","secondaryChanged","entries","hasActualResize","entry","now","remaining","calcLine","matchingLine","calc","styleElement","injectionCount","injectStyles","removeStyles","activeInstance","createOverlay","instance","mergedConfig","debug","systems","plugins","pendingSystemsResolvers","overlayContainer","disposeRender","readySystems","currentResolvers","plugin"],"mappings":"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","file":"index.global.min.js","sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port = channel.port2;\n scheduleCallback = () => port.postMessage(null);\n channel.port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(c.fn, trigger);\n onCleanup(() => ordinary.dispose());\n const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());\n const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);\n c.fn = x => {\n track();\n return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const res = keys.map(k => {\n return new Proxy({\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n }\n let Comp;\n return createMemo(() => (Comp = comp()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, createRoot, createRenderEffect, untrack, sharedConfig, enableHydration, getOwner, createEffect, runWithOwner, createSignal, onCleanup, splitProps } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","type ReadStrategy = \"post-raf\" | \"idle\" | \"scheduler\" | \"timeout\";\n\nexport interface Reader {\n /**\n * Schedules a read. Only the latest scheduled read will be executed.\n */\n scheduleRead: (callback: () => void, urgent?: boolean) => void;\n cancel: () => void;\n}\n\ninterface TaskController extends AbortController {\n setPriority(priority: string): void;\n readonly signal: TaskSignal;\n}\n\ninterface TaskSignal extends AbortSignal {\n readonly priority: string;\n onprioritychange: ((this: TaskSignal, ev: Event) => any) | null;\n}\n\nexport function createReader(): Reader {\n let rafId: number | null = null;\n let idleId: number | null = null;\n let taskController: TaskController | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n function detectBestStrategy(): ReadStrategy {\n // Prefer scheduler if available\n if (\"scheduler\" in globalThis) {\n return \"scheduler\";\n }\n // Fallback to idle callback\n if (\"requestIdleCallback\" in window) {\n return \"idle\";\n }\n // Last resort: post-RAF\n return \"post-raf\";\n }\n\n function scheduleWithScheduler(callback: () => void, urgent: boolean) {\n if (!(\"scheduler\" in globalThis)) {\n scheduleWithIdle(callback, urgent);\n return;\n }\n\n const Scheduler = (globalThis as any).scheduler;\n const TaskController = (globalThis as any).TaskController;\n\n if (!TaskController) {\n scheduleWithIdle(callback, urgent);\n return;\n }\n\n taskController = new TaskController({\n priority: urgent ? \"user-visible\" : \"background\",\n });\n\n Scheduler.postTask(\n () => {\n callback();\n },\n {\n signal: taskController?.signal,\n priority: urgent ? \"user-visible\" : \"background\",\n }\n ).catch(() => {\n // Ignore abort errors\n });\n }\n\n function scheduleWithIdle(callback: () => void, urgent: boolean) {\n if (!(\"requestIdleCallback\" in window)) {\n scheduleWithRAF(callback);\n return;\n }\n\n idleId = requestIdleCallback(\n (deadline) => {\n if (deadline.timeRemaining() > 0 || deadline.didTimeout) {\n callback();\n } else if (!urgent) {\n // Reschedule if not urgent\n scheduleWithIdle(callback, false);\n } else {\n // Urgent: fallback to RAF\n scheduleWithRAF(callback);\n }\n },\n { timeout: urgent ? 5 : 50 }\n );\n }\n\n function scheduleWithRAF(callback: () => void) {\n rafId = requestAnimationFrame(() => {\n // Use microtask to run after app's RAF\n Promise.resolve().then(() => {\n callback();\n });\n });\n }\n\n function scheduleWithTimeout(callback: () => void) {\n timeoutId = setTimeout(() => {\n callback();\n }, 0);\n }\n\n function scheduleRead(callback: () => void, urgent = false): void {\n cancel();\n\n const strategy = detectBestStrategy();\n\n switch (strategy) {\n case \"scheduler\":\n scheduleWithScheduler(callback, urgent);\n break;\n case \"idle\":\n scheduleWithIdle(callback, urgent);\n break;\n case \"post-raf\":\n scheduleWithRAF(callback);\n break;\n case \"timeout\":\n scheduleWithTimeout(callback);\n break;\n }\n }\n\n function cancel() {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n if (idleId !== null && \"cancelIdleCallback\" in window) {\n cancelIdleCallback(idleId);\n idleId = null;\n }\n if (taskController) {\n taskController.abort();\n taskController = null;\n }\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n }\n\n return { scheduleRead, cancel };\n}\n","export const MAX_FRAME_TIMES = 30;\nexport const DEFAULT_READ_INTERVAL = 16; // ~60fps\n\nexport const SUPPRESSION_MAX_FRAMES = 8;\nexport const RESIZE_THROTTLE_MS = 60;\nexport const SUPPRESSION_DELAY = 30;\n\nexport const MAX_RULER_PAIRS = 8;\nexport const MAX_RULER_LINES = MAX_RULER_PAIRS * 2;\n\nexport const RULER_SNAP_THRESHOLD = 6;\nexport const RULER_HIT_SIZE = 11;\n\nexport const CALIPER_PREFIX = \"caliper-\";\nexport const BRIDGE_TAB_ID_KEY = \"caliper-bridge-tab-id\";\n\nexport const OVERLAY_CONTAINER_ID = \"caliper-overlay-root\";\nexport const MAX_SAFE_Z_INDEX = 2147483647;\n\nexport const RUNTIME_CLASS_IGNORE_PREFIXES = [\n \"caliper-\",\n \"is-\",\n \"has-\",\n \"js-\",\n \"framer-\",\n \"motion-\",\n];\n","import type { Reader } from \"./reader.js\";\nimport { MAX_FRAME_TIMES, DEFAULT_READ_INTERVAL } from \"../shared/constants/index.js\";\n\nexport interface FrequencyControlledReader extends Reader {\n adaptToFrameRate: (fps: number) => void;\n recordFrameTime: (timestamp: number) => void;\n}\n\nexport function createFrequencyControlledReader(baseReader: Reader): FrequencyControlledReader {\n let lastReadTime = 0;\n let readInterval = DEFAULT_READ_INTERVAL;\n const frameTimes: number[] = [];\n let trailingTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let pendingTask: { callback: () => void; urgent: boolean } | null = null;\n\n function adaptToFrameRate(fps: number) {\n readInterval = Math.ceil(1000 / (fps / 2));\n }\n\n function recordFrameTime(timestamp: number) {\n frameTimes.push(timestamp);\n if (frameTimes.length > MAX_FRAME_TIMES) {\n frameTimes.shift();\n }\n\n if (frameTimes.length >= 2) {\n const last = frameTimes[frameTimes.length - 1];\n const first = frameTimes[0];\n if (last !== undefined && first !== undefined) {\n const duration = last - first;\n const fps = (frameTimes.length / duration) * 1000;\n adaptToFrameRate(fps);\n }\n }\n }\n\n function executeNow() {\n if (!pendingTask) return;\n const { callback, urgent } = pendingTask;\n pendingTask = null;\n\n lastReadTime = performance.now();\n baseReader.scheduleRead(callback, urgent);\n }\n\n function scheduleRead(callback: () => void, urgent = false): void {\n pendingTask = { callback, urgent };\n\n const now = performance.now();\n const timeSinceLastRead = now - lastReadTime;\n\n if (urgent || timeSinceLastRead >= readInterval) {\n if (trailingTimeoutId !== null) {\n clearTimeout(trailingTimeoutId);\n trailingTimeoutId = null;\n }\n executeNow();\n return;\n }\n\n if (trailingTimeoutId === null) {\n trailingTimeoutId = setTimeout(() => {\n trailingTimeoutId = null;\n executeNow();\n }, readInterval - timeSinceLastRead);\n }\n }\n\n function cancel() {\n baseReader.cancel();\n pendingTask = null;\n if (trailingTimeoutId !== null) {\n clearTimeout(trailingTimeoutId);\n trailingTimeoutId = null;\n }\n }\n\n return {\n scheduleRead,\n cancel,\n adaptToFrameRate,\n recordFrameTime,\n };\n}\n","import { SUPPRESSION_MAX_FRAMES, SUPPRESSION_DELAY } from \"../shared/constants/index.js\";\n\nexport interface SuppressionOptions {\n maxFrames?: number;\n delay?: number;\n}\n\n/**\n * Creates a delegated action that can suppress execution for a number of calls\n * if a condition is met. Useful for avoiding \"staircase\" effects where hover\n * events jump between parent/child elements too quickly.\n */\nexport function createSuppressionDelegate<T extends any[]>(\n action: (...args: T) => void,\n options: SuppressionOptions = {}\n) {\n const maxFrames = options.maxFrames ?? SUPPRESSION_MAX_FRAMES;\n const delay = options.delay ?? SUPPRESSION_DELAY;\n\n let suppressionFrames = 0;\n let trailingTimer: ReturnType<typeof setTimeout> | null = null;\n\n return {\n execute(shouldSuppress: boolean, ...args: T) {\n if (trailingTimer) {\n clearTimeout(trailingTimer);\n trailingTimer = null;\n }\n\n if (shouldSuppress && suppressionFrames < maxFrames) {\n suppressionFrames++;\n trailingTimer = setTimeout(() => {\n suppressionFrames = 0;\n action(...args);\n trailingTimer = null;\n }, delay);\n } else {\n suppressionFrames = 0;\n action(...args);\n }\n },\n\n cancel() {\n if (trailingTimer) {\n clearTimeout(trailingTimer);\n trailingTimer = null;\n }\n suppressionFrames = 0;\n },\n };\n}\n","import { OVERLAY_CONTAINER_ID } from \"../constants/index.js\";\n\n/**\n * Check if the provided element is a valid renderable object in any context.\n */\nexport function isRenderable(\n element: Element | null | undefined\n): element is HTMLElement | SVGElement {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) return false;\n\n const doc = element.ownerDocument;\n const win = doc?.defaultView;\n\n const HTMLElement = win?.HTMLElement;\n const SVGElement = win?.SVGElement;\n\n if (HTMLElement && element instanceof HTMLElement) return true;\n if (SVGElement && element instanceof SVGElement) return true;\n\n return \"tagName\" in element && \"getAttribute\" in element;\n}\n\n/**\n * Retrieves the root element where the Caliper overlay is mounted.\n *\n * @returns The overlay container element if it exists, otherwise document.documentElement.\n */\nexport function getOverlayRoot(): HTMLElement {\n return (document.getElementById(OVERLAY_CONTAINER_ID) as HTMLElement) || document.documentElement;\n}\n","import { isRenderable } from \"../../shared/utils/dom-utils.js\";\n\n/**\n * Check if an element is visible\n * Elements are ignored if they are invisible or zero-size\n */\nexport function isVisible(element: Element): boolean {\n if (!isRenderable(element)) {\n return false;\n }\n\n const tagName = element.tagName.toUpperCase();\n\n // Explicitly ignore non-renderable metadata/structural tags\n if ([\"STYLE\", \"SCRIPT\", \"NOSCRIPT\", \"TEMPLATE\", \"META\", \"LINK\", \"HEAD\"].includes(tagName)) {\n return false;\n }\n\n const style = window.getComputedStyle(element);\n const contentVisibility = style.contentVisibility || style.getPropertyValue(\"content-visibility\");\n\n if (style.display === \"none\" || contentVisibility === \"hidden\") {\n return false;\n }\n\n // We include visibility: hidden and opacity: 0 elements because they\n // still occupy space in the layout and are relevant for geometric audits.\n // The walk engine and picker will handle the \"hidden\" state via computed styles.\n return true;\n}\n\n/**\n * Check if an element has dimensions\n * Elements with zero width or height are ignored\n */\nexport function hasSize(element: Element): boolean {\n if (!isRenderable(element)) {\n return false;\n }\n\n const rect = element.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n}\n\n/**\n * Check if an element is a form input or editable area\n */\nexport function isEditable(element: Element | null): boolean {\n if (!element || !(element instanceof HTMLElement)) {\n return false;\n }\n\n const tagName = element.tagName;\n return (\n tagName === \"INPUT\" ||\n tagName === \"TEXTAREA\" ||\n tagName === \"SELECT\" ||\n element.isContentEditable\n );\n}\n\n/**\n * Check if element is eligible for measurement\n * Combines visibility and size checks\n */\nexport function isEligible(element: Element): boolean {\n if (element.closest(\"[data-caliper-ignore]\")) {\n return false;\n }\n return isVisible(element) && hasSize(element);\n}\n","import type { CursorContext } from \"../../shared/types/index.js\";\nimport { isEligible } from \"../../element-picking/utils/filter-visible.js\";\n\n/**\n * ============================================================================\n * HIT-TESTING CONTRACT\n * ============================================================================\n * Hit testing is paint-order based (via document.elementFromPoint).\n *\n * To ensure correct behavior:\n * - Overlay and editor UI layers MUST be non-interactive\n * (pointer-events: none) OR filtered via isEligible\n * - Use data-caliper-ignore attribute to exclude elements\n * ============================================================================\n */\n\n/**\n * Hysteresis configuration\n */\nconst HYSTERESIS_THRESHOLD = 2; // pixels\n\n/**\n * Check if an element belongs to Caliper's portaled UI\n */\nfunction isCaliperNode(node: Node | null): boolean {\n if (!node || !(node instanceof Element)) return false;\n return !!(node.closest(\"#caliper-overlay-root\") || node.closest(\"[class*='caliper-']\"));\n}\n\n/**\n * Find the first eligible element at a point, skipping Caliper's own UI\n */\nexport function getElementAtPoint(x: number, y: number): Element | null {\n const nodes = document.elementsFromPoint(x, y);\n\n return (\n nodes.find((node) => {\n if (isCaliperNode(node)) return false;\n return isEligible(node);\n }) || null\n );\n}\n\n/**\n * Find the topmost eligible element at a point (standard selection)\n */\nexport function getTopElementAtPoint(x: number, y: number): Element | null {\n const node = document.elementFromPoint(x, y);\n if (!node || isCaliperNode(node) || !isEligible(node)) return null;\n return node;\n}\n\n/**\n * Detect the best matching context and element using priority rules\n */\nfunction detectBestContext(\n selectedElement: Element,\n cursorX: number,\n cursorY: number\n): { context: CursorContext; element: Element } | null {\n let node = getElementAtPoint(cursorX, cursorY);\n if (!node) return null;\n\n while (node) {\n if (node !== selectedElement) {\n // 1. Child context: Target is inside selection\n if (selectedElement.contains(node)) {\n return { context: \"child\", element: node };\n }\n\n // 2. Parent context: Selection is inside target (ancestor)\n if (node.contains(selectedElement)) {\n return { context: \"parent\", element: node };\n }\n\n // 3. Sibling context: Target is an external element\n return { context: \"sibling\", element: node };\n }\n\n node = node.parentElement;\n }\n\n return null;\n}\n\n/**\n * Calculate distance from point to nearest edge of rectangle\n */\nfunction getDistanceToEdge(x: number, y: number, rect: DOMRect): number {\n const dx = Math.min(Math.abs(x - rect.left), Math.abs(x - rect.right));\n const dy = Math.min(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n return Math.min(dx, dy);\n}\n\n/**\n * Apply priority rules when cursor position is ambiguous\n */\nexport function resolveAmbiguousContext(\n selectedElement: Element,\n cursorX: number,\n cursorY: number,\n previousContext: CursorContext | null,\n previousElement: Element | null = null\n): { context: CursorContext; element: Element } | null {\n const result = detectBestContext(selectedElement, cursorX, cursorY);\n if (!result) return null;\n\n const { context: winnerContext, element: winnerElement } = result;\n\n if (\n previousContext &&\n previousElement &&\n (winnerContext !== previousContext || winnerElement !== previousElement)\n ) {\n const rect = previousElement.getBoundingClientRect();\n const distance = getDistanceToEdge(cursorX, cursorY, rect);\n\n if (distance <= HYSTERESIS_THRESHOLD) {\n // Sibling/Child context is more specific than Parent.\n // If we are moving FROM a parent TO a sibling/child, we should switch\n // immediately regardless of hysteresis to feel responsive and avoid \"sticky\" parents.\n const isSwitchingToSpecific =\n (winnerContext === \"sibling\" || winnerContext === \"child\") && previousContext === \"parent\";\n\n if (!isSwitchingToSpecific) {\n return { context: previousContext, element: previousElement };\n }\n }\n }\n\n return result;\n}\n\n/**\n * Detect the cursor context relative to the selected element\n */\nexport function detectContext(\n selectedElement: Element,\n cursorX: number,\n cursorY: number\n): CursorContext {\n const result = resolveAmbiguousContext(selectedElement, cursorX, cursorY, null, null);\n return result?.context ?? null;\n}\n","/**\n * Scroll-Aware Geometry Engine\n */\nimport type { ScrollState, PositionMode, StickyConfig } from \"../../shared/types/index.js\";\nimport type { SelectionMetadata as BaseSelectionMetadata } from \"@oyerinde/caliper-schema\";\nimport { isRenderable } from \"../../shared/utils/dom-utils.js\";\n\nexport interface DeducedGeometry extends Omit<\n BaseSelectionMetadata,\n \"scrollHierarchy\" | \"rect\" | \"stickyConfig\"\n> {\n rect: DOMRect;\n scrollHierarchy: ScrollState[];\n stickyConfig?: StickyConfig;\n depth: number;\n containingBlock: HTMLElement | null;\n position: PositionMode;\n initialWindowX: number;\n initialWindowY: number;\n}\n\nexport interface LiveGeometry {\n left: number;\n top: number;\n width: number;\n height: number;\n clipPath: string;\n isHidden: boolean;\n visibleMinX: number;\n visibleMaxX: number;\n visibleMinY: number;\n visibleMaxY: number;\n}\n\nexport type ScrollGeometryStyle = Pick<\n CSSStyleDeclaration,\n | \"position\"\n | \"overflow\"\n | \"overflowX\"\n | \"overflowY\"\n | \"transform\"\n | \"filter\"\n | \"perspective\"\n | \"contain\"\n | \"willChange\"\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n>;\n\nfunction getScrollGeometryStyle(element: Element): ScrollGeometryStyle {\n const computedStyle = window.getComputedStyle(element);\n return {\n position: computedStyle.position,\n overflow: computedStyle.overflow,\n overflowX: computedStyle.overflowX,\n overflowY: computedStyle.overflowY,\n transform: computedStyle.transform,\n filter: computedStyle.filter,\n perspective: computedStyle.perspective,\n contain: computedStyle.contain,\n willChange: computedStyle.willChange,\n top: computedStyle.top,\n bottom: computedStyle.bottom,\n left: computedStyle.left,\n right: computedStyle.right,\n };\n}\n\nexport function getScrollAwareRect(elementRect: DOMRect): DOMRect {\n return new DOMRect(\n elementRect.left + window.scrollX,\n elementRect.top + window.scrollY,\n elementRect.width,\n elementRect.height\n );\n}\n\n/** True if overflow/overflowX/overflowY indicate a clipping or scrolling box (auto, scroll, hidden, clip). */\nfunction overflowIndicatesClipping(style: ScrollGeometryStyle | CSSStyleDeclaration): boolean {\n return /(auto|scroll|hidden|clip)/.test(style.overflow + style.overflowY + style.overflowX);\n}\n\nexport function isScrollContainer(element: Element): boolean {\n if (!isRenderable(element)) return false;\n if (element.tagName.toLowerCase() === \"svg\") return false;\n const style = getScrollGeometryStyle(element);\n // Broad definition: scroll or clip.\n return overflowIndicatesClipping(style);\n}\n\n/**\n * Returns true if an element establishes a scrolling box (can have scrollTop/Left).\n * 'overflow: clip' does NOT establish a scrolling box.\n */\nfunction establishesScrollingBox(element: Element): boolean {\n const style = getScrollGeometryStyle(element);\n return /(auto|scroll|hidden)/.test(style.overflow + style.overflowY + style.overflowX);\n}\n\ninterface FullHierarchyResult {\n scrollHierarchy: ScrollState[];\n positionMode: PositionMode;\n scrollAnchor: HTMLElement | null;\n containingBlock: HTMLElement | null;\n treeDepth: number;\n anchorAbsoluteDepth: number;\n}\n\n/**\n * Build scroll hierarchy and inherited position mode (fixed/sticky) from element to document.\n * Depth from document root is computed per ancestor during the same walk.\n */\nfunction getFullHierarchy(element: Element): FullHierarchyResult {\n const ancestors: Element[] = [];\n let current: Element | null = element;\n while (current) {\n ancestors.push(current);\n if (current === document.documentElement) break;\n current = current.parentElement;\n }\n const n = ancestors.length;\n if (n <= 1) {\n return {\n scrollHierarchy: [],\n positionMode: \"static\",\n scrollAnchor: null,\n containingBlock: null,\n treeDepth: 0,\n anchorAbsoluteDepth: -1,\n };\n }\n\n const styles: ScrollGeometryStyle[] = [];\n for (let i = 0; i < n; i++) {\n const node = ancestors[i];\n if (node !== undefined) styles.push(getScrollGeometryStyle(node));\n }\n\n const hasStickyAbove: boolean[] = [];\n hasStickyAbove[n - 1] = false;\n for (let i = n - 2; i >= 0; i--) {\n const nextStyle = styles[i + 1];\n hasStickyAbove[i] =\n (nextStyle !== undefined && nextStyle.position === \"sticky\") ||\n (hasStickyAbove[i + 1] ?? false);\n }\n\n const scrollHierarchy: ScrollState[] = [];\n let positionMode: PositionMode = \"static\";\n let scrollAnchor: HTMLElement | null = null;\n let containingBlock: HTMLElement | null = null;\n let anchorAbsoluteDepth = -1;\n\n for (let i = 0; i < n; i++) {\n const ancestor = ancestors[i];\n if (ancestor === undefined || ancestor === document.documentElement) break;\n if (!isRenderable(ancestor)) continue;\n\n const style = styles[i];\n if (style === undefined) continue;\n const depthFromRoot = n - 1 - i;\n\n if (positionMode === \"static\") {\n if (style.position === \"fixed\") {\n positionMode = \"fixed\";\n scrollAnchor = ancestor as HTMLElement;\n anchorAbsoluteDepth = depthFromRoot;\n } else if (style.position === \"sticky\") {\n positionMode = \"sticky\";\n scrollAnchor = ancestor as HTMLElement;\n anchorAbsoluteDepth = depthFromRoot;\n }\n }\n\n if (\n ancestor !== element &&\n !containingBlock &&\n (style.transform !== \"none\" ||\n style.filter !== \"none\" ||\n style.perspective !== \"none\" ||\n style.contain === \"paint\" ||\n style.contain === \"layout\" ||\n style.willChange === \"transform\" ||\n style.willChange === \"filter\")\n ) {\n containingBlock = ancestor as HTMLElement;\n }\n\n if (i >= 1 && overflowIndicatesClipping(style)) {\n const containerElement = ancestor as HTMLElement;\n scrollHierarchy.push({\n element: containerElement,\n initialScrollTop: containerElement.scrollTop,\n initialScrollLeft: containerElement.scrollLeft,\n containerRect: getScrollAwareRect(containerElement.getBoundingClientRect()),\n absoluteDepth: depthFromRoot,\n hasStickyAncestor: hasStickyAbove[i] ?? false,\n });\n }\n }\n\n return {\n scrollHierarchy,\n positionMode,\n scrollAnchor,\n containingBlock,\n treeDepth: n - 1,\n anchorAbsoluteDepth,\n };\n}\n\nexport function getScrollHierarchy(element: Element): ScrollState[] {\n return getFullHierarchy(element).scrollHierarchy;\n}\n\n/**\n * Internal logic for capped sticky position\n */\nfunction calculateStickyRef(\n scrollOffset: number,\n naturalPosition: number,\n threshold: number,\n containerDimension: number,\n elementDimension: number,\n isOppositeMode: boolean\n): number {\n const staticRelationship = naturalPosition - scrollOffset;\n\n // Check if containerDimension is negative (indicates cross-container capping mode)\n const isCrossContainerMode = containerDimension < 0;\n const absContainerDim = Math.abs(containerDimension);\n\n if (!isOppositeMode) {\n let stuck = Math.max(staticRelationship, threshold);\n\n if (isCrossContainerMode) {\n // Cross-container capping: distance from element to container bottom\n // Max viewport pos = (naturalPos + distance) - elementDim - scrollOffset\n const maxViewportPos = naturalPosition + absContainerDim - elementDimension - scrollOffset;\n stuck = Math.min(stuck, maxViewportPos);\n } else {\n // Same-container capping: total container height\n stuck = Math.min(stuck, absContainerDim - elementDimension);\n }\n\n return stuck;\n } else {\n let stuck = Math.min(staticRelationship, absContainerDim - elementDimension - threshold);\n stuck = Math.max(stuck, 0);\n\n return stuck;\n }\n}\n\n/**\n * Internal logic for capped sticky delta\n */\nfunction calculateStickyDelta(\n currentScroll: number,\n initialScroll: number,\n naturalPosition: number,\n threshold: number | null,\n containerDimension: number,\n elementDimension: number,\n isOppositeMode = false\n): number {\n if (threshold === null) return currentScroll - initialScroll;\n\n const startRef = calculateStickyRef(\n initialScroll,\n naturalPosition,\n threshold ?? -Infinity,\n containerDimension,\n elementDimension,\n isOppositeMode\n );\n\n const endRef = calculateStickyRef(\n currentScroll,\n naturalPosition,\n threshold ?? -Infinity,\n containerDimension,\n elementDimension,\n isOppositeMode\n );\n\n return startRef - endRef;\n}\n\n/**\n * Calculates the total scroll offset required to sync an overlay element\n * with its DOM target.\n *\n * UNIFIED COORDINATE MODEL (Document-Space Shift):\n * To keep a fixed-root overlay synced with a moving target element, we calculate\n * how much the target has moved in Document Space since the selection was captured.\n *\n * Shift = InitialDocumentPosition - CurrentDocumentPosition\n *\n * 1. Internal Scrollers: Movement of child relative to container parent.\n * 2. Window Scroller: Movement of the entire document relative to the viewport.\n *\n * By accumulating (Initial - Current) across the entire hierarchy, we get the exact\n * negative displacement needed to \"counter-act\" the move and stay glued to the target.\n */\nexport function getTotalScrollDelta(\n hierarchy: ScrollState[],\n position: PositionMode = \"static\",\n sticky?: StickyConfig,\n initialWindowX = 0,\n initialWindowY = 0,\n hasContainingBlock = false\n) {\n let totalDeltaX = 0;\n let totalDeltaY = 0;\n let stickyApplied = false;\n\n for (let index = 0; index < hierarchy.length; index++) {\n const scrollState = hierarchy[index];\n if (!scrollState) continue;\n\n const element = scrollState.element!;\n const style = getScrollGeometryStyle(element);\n const isFixed = style.position === \"fixed\";\n const isScrollingBox = establishesScrollingBox(element);\n\n if (isScrollingBox) {\n /**\n * Depth-Aware Sticky Logic:\n * Only apply sticky pinning thresholds if the current scroller is at or above\n * the sticky anchor's depth in the tree. This prevents \"sticky leakage\"\n * where internal scrollers inside a sticky element incorrectly attempt to pin.\n */\n const isDescendantOfStickyAnchor =\n sticky && scrollState.absoluteDepth > sticky.anchorAbsoluteDepth;\n\n let thresholdX = null;\n let thresholdY = null;\n let isOppX = false;\n let isOppY = false;\n\n if (!stickyApplied && position === \"sticky\" && sticky && !isDescendantOfStickyAnchor) {\n if (sticky.top !== null) {\n thresholdY = sticky.top;\n } else if (sticky.bottom !== null) {\n thresholdY = sticky.bottom;\n isOppY = true;\n }\n\n if (sticky.left !== null) {\n thresholdX = sticky.left;\n } else if (sticky.right !== null) {\n thresholdX = sticky.right;\n isOppX = true;\n }\n }\n\n /**\n * Internal Document Shift:\n * calculateStickyDelta returns (InitialRef - CurrentRef), which handles\n * both static scrolling and sticky pinning within this specific box.\n */\n totalDeltaX += calculateStickyDelta(\n element.scrollLeft,\n scrollState.initialScrollLeft,\n sticky?.naturalLeft ?? 0,\n thresholdX,\n sticky?.containerWidth ?? 0,\n sticky?.elementWidth ?? 0,\n isOppX\n );\n totalDeltaY += calculateStickyDelta(\n element.scrollTop,\n scrollState.initialScrollTop,\n sticky?.naturalTop ?? 0,\n thresholdY,\n sticky?.containerHeight ?? 0,\n sticky?.elementHeight ?? 0,\n isOppY\n );\n\n if (thresholdX !== null || thresholdY !== null) {\n stickyApplied = true;\n }\n }\n\n /**\n * Terminate hierarchy at fixed elements (unless portaled/constrained).\n * Since 'fixed' elements are pinned to the viewport, when the window scrolls,\n * their Document Position changes by exactly (InitialWindowScroll - CurrentWindowScroll).\n */\n if (isFixed && !hasContainingBlock) {\n totalDeltaX += initialWindowX - window.scrollX;\n totalDeltaY += initialWindowY - window.scrollY;\n return { deltaX: totalDeltaX, deltaY: totalDeltaY };\n }\n }\n\n /**\n * Window Scroll Fallback:\n * After processing all internal scrollers, handle positioning relative to the window.\n *\n * CRITICAL INSIGHT:\n * - For STATIC elements: Document position is INVARIANT with window scroll.\n * stableRect is already in document coords, so NO window delta is needed.\n * - For FIXED elements: They pin to viewport, so document position shifts by\n * (currentWindowScroll - initialWindowScroll). Our delta = (initial - current).\n * - For STICKY elements: Apply sticky clamping formula to get the delta from\n * captured position to current live position.\n */\n if (!hasContainingBlock) {\n if (position === \"fixed\") {\n // Fixed elements: viewport-pinned, document position changes inversely with scroll\n totalDeltaX += initialWindowX - window.scrollX;\n totalDeltaY += initialWindowY - window.scrollY;\n } else if (position === \"sticky\" && sticky && !stickyApplied) {\n // Sticky elements: clamped pinning at window level\n //\n // DERIVATION:\n // liveDoc = liveViewport + currentScroll\n // stableDoc = captureViewport + captureScroll\n // deltaY = stableDoc - liveDoc\n // = (captureViewport - liveViewport) + (captureScroll - currentScroll)\n // = stickyViewportDelta + (initWinY - window.scrollY)\n //\n // Where:\n // stickyViewportDelta = captureViewport - liveViewport\n // = stickyRef(initWinY, ...) - stickyRef(window.scrollY, ...)\n // = calculateStickyDelta(window.scrollY, initWinY, ...)\n // scrollDelta = initWinY - window.scrollY\n //\n const scrollDeltaX = initialWindowX - window.scrollX;\n const scrollDeltaY = initialWindowY - window.scrollY;\n\n let thresholdX = null;\n let thresholdY = null;\n let isOppX = false;\n let isOppY = false;\n\n if (sticky.top !== null) {\n thresholdY = sticky.top;\n } else if (sticky.bottom !== null) {\n thresholdY = sticky.bottom;\n isOppY = true;\n }\n\n if (sticky.left !== null) {\n thresholdX = sticky.left;\n } else if (sticky.right !== null) {\n thresholdX = sticky.right;\n isOppX = true;\n }\n\n const stickyViewportDeltaX = calculateStickyDelta(\n window.scrollX,\n initialWindowX,\n sticky.naturalLeft,\n thresholdX,\n sticky.containerWidth,\n sticky.elementWidth,\n isOppX\n );\n const stickyViewportDeltaY = calculateStickyDelta(\n window.scrollY,\n initialWindowY,\n sticky.naturalTop,\n thresholdY,\n sticky.containerHeight,\n sticky.elementHeight,\n isOppY\n );\n\n // deltaY = stickyViewportDelta + scrollDelta\n totalDeltaX += stickyViewportDeltaX + scrollDeltaX;\n totalDeltaY += stickyViewportDeltaY + scrollDeltaY;\n }\n\n // For STATIC: No window delta needed. Document position is invariant.\n }\n\n return { deltaX: totalDeltaX, deltaY: totalDeltaY };\n}\n\n/**\n * Find shared scroll containers between two elements.\n * When containers have sticky ancestors, their document-space position shifts\n * with window scroll. initWinX/initWinY specify the window scroll at capture\n * time so the clipping bounds can be adjusted to their live positions.\n */\nexport function getCommonVisibilityWindow(\n hierarchy1: ScrollState[],\n hierarchy2: ScrollState[],\n element1: Element,\n element2: Element,\n initWinX = 0,\n initWinY = 0\n) {\n const h1Map = new Map<HTMLElement, number>();\n for (let index = 0; index < hierarchy1.length; index++) {\n const item = hierarchy1[index];\n if (item && item.element) h1Map.set(item.element, index);\n }\n\n const h2Map = new Map<HTMLElement, number>();\n for (let index = 0; index < hierarchy2.length; index++) {\n const item = hierarchy2[index];\n if (item && item.element) h2Map.set(item.element, index);\n }\n\n const commonElements: ScrollState[] = [];\n\n // Check shared ancestors\n for (let index = 0; index < hierarchy1.length; index++) {\n const scrollState = hierarchy1[index];\n if (scrollState && scrollState.element && h2Map.has(scrollState.element)) {\n commonElements.push(scrollState);\n }\n }\n\n // Check edge cases where one element is the container of the other\n if (isScrollContainer(element2)) {\n const scrollIndex = h1Map.get(element2 as HTMLElement);\n if (scrollIndex !== undefined) {\n const scrollState = hierarchy1[scrollIndex];\n if (scrollState && !commonElements.includes(scrollState)) commonElements.push(scrollState);\n }\n }\n if (isScrollContainer(element1)) {\n const scrollIndex = h2Map.get(element1 as HTMLElement);\n if (scrollIndex !== undefined) {\n const scrollState = hierarchy2[scrollIndex];\n if (scrollState && !commonElements.includes(scrollState)) commonElements.push(scrollState);\n }\n }\n\n if (commonElements.length === 0) {\n return { minX: -Infinity, maxX: Infinity, minY: -Infinity, maxY: Infinity };\n }\n\n let minX = -Infinity;\n let maxX = Infinity;\n let minY = -Infinity;\n let maxY = Infinity;\n\n // Pre-calculate suffix sums for deltas\n const getSuffixSums = (scrollHierarchy: ScrollState[]) => {\n const sumsX = new Float64Array(scrollHierarchy.length + 1);\n const sumsY = new Float64Array(scrollHierarchy.length + 1);\n for (let index = scrollHierarchy.length - 1; index >= 0; index--) {\n const item = scrollHierarchy[index];\n if (item && item.element) {\n sumsX[index] = (sumsX[index + 1] ?? 0) + (item.element.scrollLeft - item.initialScrollLeft);\n sumsY[index] = (sumsY[index + 1] ?? 0) + (item.element.scrollTop - item.initialScrollTop);\n } else if (item) {\n sumsX[index] = sumsX[index + 1] ?? 0;\n sumsY[index] = sumsY[index + 1] ?? 0;\n }\n }\n return { sumsX, sumsY };\n };\n\n const h1Suffix = getSuffixSums(hierarchy1);\n const h2Suffix = getSuffixSums(hierarchy2);\n\n for (let index = 0; index < commonElements.length; index++) {\n const scrollState = commonElements[index];\n if (!scrollState) continue;\n\n if (!scrollState.element) continue;\n\n const isH1 = h1Map.has(scrollState.element);\n const suffix = isH1 ? h1Suffix : h2Suffix;\n const sIndex = isH1 ? h1Map.get(scrollState.element) : h2Map.get(scrollState.element);\n\n if (sIndex === undefined || sIndex === -1) continue;\n\n const containerRect = scrollState.containerRect;\n if (!containerRect) continue;\n\n const ancestorDeltaX = suffix.sumsX[sIndex + 1] ?? 0;\n const ancestorDeltaY = suffix.sumsY[sIndex + 1] ?? 0;\n\n // Sticky ancestor adjustment: if this container sits inside a sticky\n // element, its document-space position drifts with window scroll.\n let windowScrollAdjustmentX = 0;\n let windowScrollAdjustmentY = 0;\n\n let hasStickyAncestorFlag: boolean;\n if (typeof scrollState.hasStickyAncestor === \"boolean\") {\n hasStickyAncestorFlag = scrollState.hasStickyAncestor;\n } else if (scrollState.element) {\n let checkElement: Element | null = scrollState.element;\n hasStickyAncestorFlag = false;\n while (checkElement && checkElement !== document.documentElement) {\n const checkStyle = getScrollGeometryStyle(checkElement);\n if (checkStyle.position === \"sticky\") {\n hasStickyAncestorFlag = true;\n break;\n }\n if (checkStyle.position === \"fixed\") break;\n checkElement = checkElement.parentElement;\n }\n } else {\n hasStickyAncestorFlag = false;\n }\n\n if (hasStickyAncestorFlag) {\n windowScrollAdjustmentX = window.scrollX - initWinX;\n windowScrollAdjustmentY = window.scrollY - initWinY;\n }\n\n const containerLiveLeft = containerRect.left - ancestorDeltaX + windowScrollAdjustmentX;\n const containerLiveTop = containerRect.top - ancestorDeltaY + windowScrollAdjustmentY;\n\n const clipLeft = containerLiveLeft + (scrollState.element?.clientLeft ?? 0);\n const clipTop = containerLiveTop + (scrollState.element?.clientTop ?? 0);\n const clipRight = clipLeft + (scrollState.element?.clientWidth ?? containerRect.width);\n const clipBottom = clipTop + (scrollState.element?.clientHeight ?? containerRect.height);\n\n if (minX === -Infinity) {\n minX = clipLeft;\n maxX = clipRight;\n minY = clipTop;\n maxY = clipBottom;\n } else {\n minX = Math.max(minX, clipLeft);\n maxX = Math.min(maxX, clipRight);\n minY = Math.max(minY, clipTop);\n maxY = Math.min(maxY, clipBottom);\n }\n }\n\n return { minX, maxX, minY, maxY };\n}\n\n/**\n * Calculate live document position and visibility clipping.\n */\nexport function getLiveGeometry(\n stableRect: DOMRect | null,\n hierarchy: ScrollState[],\n position: PositionMode = \"static\",\n sticky?: StickyConfig,\n initWinX = 0,\n initWinY = 0,\n hasContainingBlock = false\n): LiveGeometry | null {\n if (!stableRect) return null;\n\n const { deltaX, deltaY } = getTotalScrollDelta(\n hierarchy,\n position,\n sticky,\n initWinX,\n initWinY,\n hasContainingBlock\n );\n\n let vMinX = -Infinity;\n let vMaxX = Infinity;\n let vMinY = -Infinity;\n let vMaxY = Infinity;\n\n const hierarchyLength = hierarchy.length;\n const suffixSumsX = new Float64Array(hierarchyLength + 1);\n const suffixSumsY = new Float64Array(hierarchyLength + 1);\n for (let index = hierarchyLength - 1; index >= 0; index--) {\n const item = hierarchy[index];\n if (item && item.element) {\n suffixSumsX[index] =\n (suffixSumsX[index + 1] ?? 0) + (item.element.scrollLeft - item.initialScrollLeft);\n suffixSumsY[index] =\n (suffixSumsY[index + 1] ?? 0) + (item.element.scrollTop - item.initialScrollTop);\n } else if (item) {\n suffixSumsX[index] = suffixSumsX[index + 1] ?? 0;\n suffixSumsY[index] = suffixSumsY[index + 1] ?? 0;\n }\n }\n\n // Clipping logic - calculate each container's live document position\n // For sticky containers, their doc position changes with window scroll\n // Semantics: initWinX/Y = capture-time scroll, window.scrollX/Y = current scroll\n\n for (let index = 0; index < hierarchyLength; index++) {\n const scrollState = hierarchy[index];\n if (!scrollState) continue;\n\n const containerRect = scrollState.containerRect;\n if (!containerRect) continue;\n\n const ancestorDeltaX = suffixSumsX[index + 1] ?? 0;\n const ancestorDeltaY = suffixSumsY[index + 1] ?? 0;\n\n let windowScrollAdjustmentX = 0;\n let windowScrollAdjustmentY = 0;\n\n let hasStickyAncestorFlag: boolean;\n if (typeof scrollState.hasStickyAncestor === \"boolean\") {\n hasStickyAncestorFlag = scrollState.hasStickyAncestor;\n } else if (scrollState.element) {\n let checkElement: Element | null = scrollState.element;\n hasStickyAncestorFlag = false;\n while (checkElement && checkElement !== document.documentElement) {\n const checkStyle = getScrollGeometryStyle(checkElement);\n if (checkStyle.position === \"sticky\") {\n hasStickyAncestorFlag = true;\n break;\n }\n // Fixed elements break the chain - their children don't move with window scroll\n if (checkStyle.position === \"fixed\") break;\n checkElement = checkElement.parentElement;\n }\n } else {\n hasStickyAncestorFlag = false;\n }\n\n if (hasStickyAncestorFlag) {\n // For containers with sticky ancestors: they move with the sticky element,\n // so their document position changes with window scroll.\n // liveDoc = capturedDoc + (currentScroll - captureScroll)\n windowScrollAdjustmentX = window.scrollX - initWinX;\n windowScrollAdjustmentY = window.scrollY - initWinY;\n }\n\n const containerLiveLeft = containerRect.left - ancestorDeltaX + windowScrollAdjustmentX;\n const containerLiveTop = containerRect.top - ancestorDeltaY + windowScrollAdjustmentY;\n\n const clipLeft = containerLiveLeft + (scrollState.element?.clientLeft ?? 0);\n const clipTop = containerLiveTop + (scrollState.element?.clientTop ?? 0);\n\n if (vMinX === -Infinity) {\n vMinX = clipLeft;\n vMaxX = clipLeft + (scrollState.element?.clientWidth ?? containerRect.width);\n vMinY = clipTop;\n vMaxY = clipTop + (scrollState.element?.clientHeight ?? containerRect.height);\n } else {\n vMinX = Math.max(vMinX, clipLeft);\n vMaxX = Math.min(vMaxX, clipLeft + (scrollState.element?.clientWidth ?? containerRect.width));\n vMinY = Math.max(vMinY, clipTop);\n vMaxY = Math.min(\n vMaxY,\n clipTop + (scrollState.element?.clientHeight ?? containerRect.height)\n );\n }\n }\n\n const left = stableRect.left - deltaX;\n const top = stableRect.top - deltaY;\n const width = stableRect.width;\n const height = stableRect.height;\n\n const isHidden =\n vMinX !== -Infinity &&\n (top + height < vMinY || top > vMaxY || left + width < vMinX || left > vMaxX);\n\n const topClip = Math.max(0, vMinY - top);\n const leftClip = Math.max(0, vMinX - left);\n const bottomClip = Math.max(0, top + height - vMaxY);\n const rightClip = Math.max(0, left + width - vMaxX);\n\n return {\n left,\n top,\n width,\n height,\n clipPath:\n vMinX === -Infinity\n ? \"none\"\n : `inset(${topClip}px ${rightClip}px ${bottomClip}px ${leftClip}px)`,\n isHidden,\n visibleMinX: vMinX,\n visibleMaxX: vMaxX,\n visibleMinY: vMinY,\n visibleMaxY: vMaxY,\n };\n}\n\nfunction parseStickyOffset(rawValue: string): number | null {\n if (rawValue === \"auto\") return null;\n const parsed = parseFloat(rawValue);\n return isNaN(parsed) ? null : parsed;\n}\n\n/** Finds effectively inherited positioning mode (fixed/sticky) from ancestors. */\nexport function getInheritedPositionMode(element: Element): {\n positionMode: PositionMode;\n scrollAnchor: HTMLElement | null;\n containingBlock: HTMLElement | null;\n treeDepth: number;\n anchorAbsoluteDepth: number;\n} {\n const full = getFullHierarchy(element);\n return {\n positionMode: full.positionMode,\n scrollAnchor: full.scrollAnchor,\n containingBlock: full.containingBlock,\n treeDepth: full.treeDepth,\n anchorAbsoluteDepth: full.anchorAbsoluteDepth,\n };\n}\n\nfunction getRootOffset(element: Element): { top: number; left: number } {\n let top = 0;\n let left = 0;\n let curr: Element | null = element;\n while (curr instanceof HTMLElement) {\n top += curr.offsetTop;\n left += curr.offsetLeft;\n const parent: Element | null = curr.offsetParent;\n if (parent instanceof HTMLElement) {\n top += parent.clientTop || 0;\n left += parent.clientLeft || 0;\n }\n curr = parent;\n }\n return { top, left };\n}\n\nfunction collectStickyOnPath(\n from: HTMLElement,\n to: Element\n): Array<{ element: HTMLElement; originalPosition: string }> {\n const out: Array<{ element: HTMLElement; originalPosition: string }> = [];\n let current: Element | null = from;\n while (current) {\n if (current instanceof HTMLElement) {\n const style = getScrollGeometryStyle(current);\n if (style.position === \"sticky\") {\n out.push({ element: current, originalPosition: current.style.position });\n }\n }\n if (current === to) break;\n if (current === document.documentElement) break;\n current = current.parentElement;\n }\n return out;\n}\n\n/**\n * Calculates the exact layout offset of an element relative to a container.\n * Sticky elements on the path are temporarily set to static so the offset chain is consistent, then restored.\n */\nfunction getDistanceFromContainer(targetElement: HTMLElement, containerElement: Element) {\n const stickyElements = collectStickyOnPath(targetElement, containerElement);\n for (const { element } of stickyElements) element.style.position = \"static\";\n try {\n const targetOffset = getRootOffset(targetElement);\n const containerOffset = getRootOffset(containerElement);\n return {\n offsetX: targetOffset.left - containerOffset.left,\n offsetY: targetOffset.top - containerOffset.top,\n };\n } finally {\n for (const { element, originalPosition } of stickyElements) {\n element.style.position = originalPosition || \"sticky\";\n }\n }\n}\n\n/**\n * Compute natural position (anchor to scroller) and optionally capping position (capping to scroller)\n * with sticky set to static along both paths, then restore.\n */\nfunction getDistancesWithSingleToggle(\n scrollAnchor: HTMLElement,\n scrollingContainer: Element,\n cappingContainer: HTMLElement | null\n): {\n naturalPosition: { offsetX: number; offsetY: number };\n cappingNaturalPosition: { offsetX: number; offsetY: number } | null;\n} {\n const seen = new Set<HTMLElement>();\n const list: Array<{ element: HTMLElement; originalPosition: string }> = [];\n for (const { element, originalPosition } of collectStickyOnPath(\n scrollAnchor,\n scrollingContainer\n )) {\n if (!seen.has(element)) {\n seen.add(element);\n list.push({ element, originalPosition });\n }\n }\n if (cappingContainer && cappingContainer !== scrollAnchor) {\n for (const { element, originalPosition } of collectStickyOnPath(\n cappingContainer,\n scrollingContainer\n )) {\n if (!seen.has(element)) {\n seen.add(element);\n list.push({ element, originalPosition });\n }\n }\n }\n for (const { element } of list) element.style.position = \"static\";\n try {\n const scrollOffset = getRootOffset(scrollingContainer as HTMLElement);\n const anchorOffset = getRootOffset(scrollAnchor);\n const naturalPosition = {\n offsetX: anchorOffset.left - scrollOffset.left,\n offsetY: anchorOffset.top - scrollOffset.top,\n };\n let cappingNaturalPosition: { offsetX: number; offsetY: number } | null = null;\n if (cappingContainer && cappingContainer !== scrollingContainer) {\n const capOffset = getRootOffset(cappingContainer);\n cappingNaturalPosition = {\n offsetX: capOffset.left - scrollOffset.left,\n offsetY: capOffset.top - scrollOffset.top,\n };\n }\n return { naturalPosition, cappingNaturalPosition };\n } finally {\n for (const { element, originalPosition } of list) {\n element.style.position = originalPosition || \"sticky\";\n }\n }\n}\n\nexport function deduceGeometry(element: Element): DeducedGeometry {\n const rect = element.getBoundingClientRect();\n const initialWindowX = window.scrollX;\n const initialWindowY = window.scrollY;\n\n const {\n scrollHierarchy,\n positionMode,\n scrollAnchor,\n containingBlock,\n treeDepth,\n anchorAbsoluteDepth,\n } = getFullHierarchy(element);\n\n let stickyConfig;\n if (positionMode === \"sticky\" && scrollAnchor) {\n const style = getScrollGeometryStyle(scrollAnchor);\n\n let scrollingContainer: Element = document.documentElement;\n let currentParent = scrollAnchor.parentElement;\n while (currentParent && currentParent !== document.documentElement) {\n if (establishesScrollingBox(currentParent)) {\n scrollingContainer = currentParent;\n break;\n }\n currentParent = currentParent.parentElement;\n }\n\n const cappingContainer = scrollAnchor.parentElement || document.documentElement;\n const isDocLevelCapping =\n cappingContainer === document.documentElement || cappingContainer === document.body;\n const cappingStyle =\n cappingContainer instanceof HTMLElement ? getScrollGeometryStyle(cappingContainer) : null;\n const isCappingContainerSticky = cappingStyle?.position === \"sticky\";\n\n const anchorRect = scrollAnchor.getBoundingClientRect();\n const childRelTop = rect.top - anchorRect.top;\n const childRelLeft = rect.left - anchorRect.left;\n const childRelBottom = anchorRect.bottom - rect.bottom;\n const childRelRight = anchorRect.right - rect.right;\n\n const topSticky = parseStickyOffset(style.top);\n const bottomSticky = parseStickyOffset(style.bottom);\n const leftSticky = parseStickyOffset(style.left);\n const rightSticky = parseStickyOffset(style.right);\n\n const needCappingDistance =\n !isDocLevelCapping && cappingContainer !== scrollingContainer && !isCappingContainerSticky;\n\n let naturalPosition: { offsetX: number; offsetY: number };\n let cappingNaturalPosition: { offsetX: number; offsetY: number } | null = null;\n if (needCappingDistance) {\n const dist = getDistancesWithSingleToggle(\n scrollAnchor,\n scrollingContainer,\n cappingContainer as HTMLElement\n );\n naturalPosition = dist.naturalPosition;\n cappingNaturalPosition = dist.cappingNaturalPosition;\n } else {\n naturalPosition = getDistanceFromContainer(scrollAnchor, scrollingContainer);\n }\n\n let containerHeight: number;\n let containerWidth: number;\n const isWindowLevel = scrollingContainer === document.documentElement;\n\n if (isDocLevelCapping) {\n containerHeight = window.innerHeight;\n containerWidth = window.innerWidth;\n } else if (cappingContainer === scrollingContainer || isCappingContainerSticky) {\n containerHeight = (scrollingContainer as HTMLElement).clientHeight;\n containerWidth = (scrollingContainer as HTMLElement).clientWidth;\n } else if (isWindowLevel && cappingNaturalPosition) {\n const cappingHeight = (cappingContainer as HTMLElement).clientHeight;\n const cappingWidth = (cappingContainer as HTMLElement).clientWidth;\n const parentTrackHeight =\n cappingNaturalPosition.offsetY + cappingHeight - naturalPosition.offsetY;\n const parentTrackWidth =\n cappingNaturalPosition.offsetX + cappingWidth - naturalPosition.offsetX;\n containerHeight = -parentTrackHeight;\n containerWidth = -parentTrackWidth;\n } else if (cappingNaturalPosition) {\n const scrollerHeight = (scrollingContainer as HTMLElement).clientHeight;\n const scrollerWidth = (scrollingContainer as HTMLElement).clientWidth;\n const cappingHeight = (cappingContainer as HTMLElement).clientHeight;\n const cappingWidth = (cappingContainer as HTMLElement).clientWidth;\n const parentTrackHeight =\n cappingNaturalPosition.offsetY + cappingHeight - naturalPosition.offsetY;\n const parentTrackWidth =\n cappingNaturalPosition.offsetX + cappingWidth - naturalPosition.offsetX;\n containerHeight = parentTrackHeight < scrollerHeight ? -parentTrackHeight : scrollerHeight;\n containerWidth = parentTrackWidth < scrollerWidth ? -parentTrackWidth : scrollerWidth;\n } else {\n containerHeight = (scrollingContainer as HTMLElement).clientHeight;\n containerWidth = (scrollingContainer as HTMLElement).clientWidth;\n }\n\n stickyConfig = {\n top: topSticky === null ? null : topSticky + childRelTop,\n bottom: bottomSticky === null ? null : bottomSticky + childRelBottom,\n left: leftSticky === null ? null : leftSticky + childRelLeft,\n right: rightSticky === null ? null : rightSticky + childRelRight,\n naturalTop: naturalPosition.offsetY + childRelTop,\n naturalLeft: naturalPosition.offsetX + childRelLeft,\n containerWidth,\n containerHeight,\n elementWidth: anchorRect.width,\n elementHeight: anchorRect.height,\n anchorAbsoluteDepth: anchorAbsoluteDepth,\n };\n }\n\n return {\n rect: getScrollAwareRect(rect),\n scrollHierarchy,\n position: positionMode,\n stickyConfig,\n initialWindowX,\n initialWindowY,\n depth: treeDepth,\n hasContainingBlock: !!containingBlock,\n containingBlock,\n };\n}\n\n/**\n * Clamp a viewport-relative point to the visibility window of a geometry,\n * accounting for the current viewport scroll.\n */\nexport function clampPointToGeometry(\n point: { x: number; y: number },\n geometry: LiveGeometry | null | undefined,\n viewport: { scrollX: number; scrollY: number }\n): { x: number; y: number } {\n if (!geometry) return point;\n\n return {\n x: Math.max(\n geometry.visibleMinX - viewport.scrollX,\n Math.min(point.x, geometry.visibleMaxX - viewport.scrollX)\n ),\n y: Math.max(\n geometry.visibleMinY - viewport.scrollY,\n Math.min(point.y, geometry.visibleMaxY - viewport.scrollY)\n ),\n };\n}\n","import type { SyncSource, CursorContext, Remap, ScrollState } from \"../../shared/types/index.js\";\nimport type {\n MeasurementLine as BaseMeasurementLine,\n MeasurementResult as BaseMeasurementResult,\n} from \"@oyerinde/caliper-schema\";\nimport { getTotalScrollDelta } from \"../../geometry/utils/scroll-aware.js\";\n\nexport type MeasurementLine = BaseMeasurementLine;\n\nexport type MeasurementResult = Remap<\n BaseMeasurementResult,\n {\n primary: DOMRect;\n secondary: DOMRect | null;\n primaryHierarchy: ScrollState[];\n secondaryHierarchy: ScrollState[];\n secondaryElement: Element | null;\n }\n>;\n\n/**\n * Computes the geometric measurement lines between two rectangles based\n * on their relationship (parent, child, or sibling).\n *\n * @param context - The cursor context (parent/child/sibling).\n * @param primary - The DOMRect of the selected element.\n * @param secondary - The DOMRect of the target element.\n * @returns An array of MeasurementLine objects.\n */\nexport function createMeasurementLines(\n context: CursorContext,\n primary: DOMRect,\n secondary: DOMRect | null\n): MeasurementLine[] {\n if (!context || !secondary) {\n return [];\n }\n\n const lines: MeasurementLine[] = [];\n\n if (context === \"sibling\") {\n const distance = calculateSiblingDistance(primary, secondary);\n lines.push(distance);\n } else if (context === \"parent\" || context === \"child\") {\n const padding = calculatePaddingLines(primary, secondary, context);\n lines.push(...padding);\n }\n\n return lines;\n}\n\n/**\n * Calculate distance between two elements using Top/Bottom faces\n */\nfunction calculateSiblingDistance(primary: DOMRect, sibling: DOMRect): MeasurementLine {\n const overlapXStart = Math.max(primary.left, sibling.left);\n const overlapXEnd = Math.min(primary.right, sibling.right);\n const hasOverlapX = overlapXEnd > overlapXStart;\n\n const overlapYStart = Math.max(primary.top, sibling.top);\n const overlapYEnd = Math.min(primary.bottom, sibling.bottom);\n const hasOverlapY = overlapYEnd > overlapYStart;\n\n const syncBase = { startSync: \"primary\", endSync: \"secondary\" } as const;\n\n if (hasOverlapX && !hasOverlapY) {\n const centerX = (overlapXStart + overlapXEnd) / 2;\n const distBtoT = Math.abs(sibling.top - primary.bottom);\n const distTtoB = Math.abs(primary.top - sibling.bottom);\n\n const startY = distBtoT < distTtoB ? primary.bottom : primary.top;\n const endY = distBtoT < distTtoB ? sibling.top : sibling.bottom;\n\n return {\n type: \"distance\",\n value: Math.min(distBtoT, distTtoB),\n start: { x: centerX, y: startY },\n end: { x: centerX, y: endY },\n ...syncBase,\n };\n }\n\n if (hasOverlapY && !hasOverlapX) {\n const centerY = (overlapYStart + overlapYEnd) / 2;\n const distRtoL = Math.abs(sibling.left - primary.right);\n const distLtoR = Math.abs(primary.left - sibling.right);\n\n const startX = distRtoL < distLtoR ? primary.right : primary.left;\n const endX = distRtoL < distLtoR ? sibling.left : sibling.right;\n\n return {\n type: \"distance\",\n value: Math.min(distRtoL, distLtoR),\n start: { x: startX, y: centerY },\n end: { x: endX, y: centerY },\n ...syncBase,\n };\n }\n\n const pFaces = [\n { x: (primary.left + primary.right) / 2, y: primary.top },\n { x: (primary.left + primary.right) / 2, y: primary.bottom },\n ];\n const sFaces = [\n { x: (sibling.left + sibling.right) / 2, y: sibling.top },\n { x: (sibling.left + sibling.right) / 2, y: sibling.bottom },\n ];\n\n let minD2 = Infinity;\n let bestP = pFaces[0];\n let bestS = sFaces[0];\n\n for (const p of pFaces) {\n for (const s of sFaces) {\n const dx = p.x - s.x;\n const dy = p.y - s.y;\n const d2 = dx * dx + dy * dy;\n if (d2 < minD2) {\n minD2 = d2;\n bestP = p;\n bestS = s;\n }\n }\n }\n\n const pFace = bestP ?? pFaces[0]!;\n const sFace = bestS ?? sFaces[0]!;\n\n return {\n type: \"distance\",\n value: Math.sqrt(minD2),\n start: { x: pFace.x, y: pFace.y },\n end: { x: sFace.x, y: sFace.y },\n ...syncBase,\n };\n}\n\n/**\n * Calculate padding lines (left, top, right, bottom)\n */\nfunction calculatePaddingLines(\n primary: DOMRect,\n container: DOMRect,\n context: \"parent\" | \"child\"\n): MeasurementLine[] {\n if (context === \"parent\") {\n // Primary element's distance to parent edges\n return [\n {\n type: \"left\",\n value: Math.abs(primary.left - container.left),\n start: { x: container.left, y: primary.top + primary.height / 2 },\n end: { x: primary.left, y: primary.top + primary.height / 2 },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n {\n type: \"top\",\n value: Math.abs(primary.top - container.top),\n start: { x: primary.left + primary.width / 2, y: container.top },\n end: { x: primary.left + primary.width / 2, y: primary.top },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n {\n type: \"right\",\n value: Math.abs(container.right - primary.right),\n start: { x: primary.right, y: primary.top + primary.height / 2 },\n end: { x: container.right, y: primary.top + primary.height / 2 },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n {\n type: \"bottom\",\n value: Math.abs(container.bottom - primary.bottom),\n start: { x: primary.left + primary.width / 2, y: primary.bottom },\n end: { x: primary.left + primary.width / 2, y: container.bottom },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n ];\n } else {\n // Child element's distance to primary (selected) element edges\n return [\n {\n type: \"left\",\n value: Math.abs(container.left - primary.left),\n start: { x: primary.left, y: container.top + container.height / 2 },\n end: { x: container.left, y: container.top + container.height / 2 },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n {\n type: \"top\",\n value: Math.abs(container.top - primary.top),\n start: { x: container.left + container.width / 2, y: primary.top },\n end: { x: container.left + container.width / 2, y: container.top },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n {\n type: \"right\",\n value: Math.abs(primary.right - container.right),\n start: { x: container.right, y: container.top + container.height / 2 },\n end: { x: primary.right, y: container.top + container.height / 2 },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n {\n type: \"bottom\",\n value: Math.abs(primary.bottom - container.bottom),\n start: { x: container.left + container.width / 2, y: container.bottom },\n end: { x: container.left + container.width / 2, y: primary.bottom },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n ];\n }\n}\n\n/**\n * Calculate the live coordinates of a point in a line, accounting for scroll.\n */\nexport function getLivePoint(\n pt: { x: number; y: number },\n owner: SyncSource | undefined,\n line: Pick<MeasurementLine, \"type\" | \"start\" | \"end\">,\n primaryDelta: { deltaX: number; deltaY: number },\n secondaryDelta: { deltaX: number; deltaY: number },\n scrollX: number = 0,\n scrollY: number = 0\n) {\n const syncX = owner === \"secondary\" ? secondaryDelta : primaryDelta;\n const syncY = owner === \"secondary\" ? secondaryDelta : primaryDelta;\n\n return {\n x: pt.x - (syncX?.deltaX ?? 0) - scrollX,\n y: pt.y - (syncY?.deltaY ?? 0) - scrollY,\n };\n}\n\n/**\n * Pure math helper to calculate the live distance of a line.\n */\nexport function getLiveLineValue(line: MeasurementLine, result: MeasurementResult | null): number {\n if (!result) {\n return line.value;\n }\n\n const primaryDelta = getTotalScrollDelta(\n result.primaryHierarchy,\n result.primaryPosition,\n result.primarySticky,\n result.primaryWinX,\n result.primaryWinY,\n !!result.primaryHasContainingBlock\n );\n\n const secondaryDelta = getTotalScrollDelta(\n result.secondaryHierarchy,\n result.secondaryPosition,\n result.secondarySticky,\n result.secondaryWinX,\n result.secondaryWinY,\n !!result.secondaryHasContainingBlock\n );\n\n const startPoint = getLivePoint(line.start, line.startSync, line, primaryDelta, secondaryDelta);\n\n const endPoint = getLivePoint(line.end, line.endSync, line, primaryDelta, secondaryDelta);\n\n const dx = Math.abs(startPoint.x - endPoint.x);\n const dy = Math.abs(startPoint.y - endPoint.y);\n\n if (line.type === \"top\" || line.type === \"bottom\") {\n return dy;\n }\n if (line.type === \"left\" || line.type === \"right\") {\n return dx;\n }\n\n return Math.sqrt(dx * dx + dy * dy);\n}\n","import type { CursorContext } from \"../../shared/types/index.js\";\nimport { resolveAmbiguousContext } from \"../../cursor-context/utils/priority-rules.js\";\nimport { createMeasurementLines, type MeasurementResult } from \"./measurement-result.js\";\nimport { deduceGeometry } from \"../../geometry/utils/scroll-aware.js\";\n\n/**\n * Computes a measurement result for a selected element relative to another\n * element at specific cursor coordinates. It automatically resolves the\n * context (sibling, parent, etc.).\n *\n * @param selectedElement - The primary element being measured from.\n * @param cursorX - Current X coordinate.\n * @param cursorY - Current Y coordinate.\n * @param previousContext - Optional context from previous frame to stabilize results.\n * @param previousElement - Optional element from previous frame to stabilize results.\n * @returns An object containing the secondary element and the measurement result, or null if invalid.\n */\nexport function createMeasurement(\n selectedElement: Element,\n cursorX: number,\n cursorY: number,\n previousContext: CursorContext | null = null,\n previousElement: Element | null = null\n): { element: Element; result: MeasurementResult } | null {\n const result = resolveAmbiguousContext(\n selectedElement,\n cursorX,\n cursorY,\n previousContext,\n previousElement\n );\n\n if (!result) {\n return null;\n }\n\n const { context, element: secondaryElement } = result;\n return createMeasurementBetween(selectedElement, secondaryElement, context);\n}\n\n/**\n * Creates a measurement result between two specific elements with a defined context.\n *\n * If no context is provided, it will be automatically detected based on the\n * containment relationship (parent/child/sibling).\n *\n * @param primaryElement - The primary element.\n * @param secondaryElement - The target element.\n * @param context - Optional explicit context override.\n * @returns The measurement result object.\n */\nexport function createMeasurementBetween(\n primaryElement: Element,\n secondaryElement: Element,\n context?: CursorContext\n): { element: Element; result: MeasurementResult } | null {\n if (secondaryElement === primaryElement) return null;\n\n const resolvedContext =\n context ??\n (primaryElement.contains(secondaryElement)\n ? \"child\"\n : secondaryElement.contains(primaryElement)\n ? \"parent\"\n : \"sibling\");\n\n const primaryGeom = deduceGeometry(primaryElement);\n const secondaryGeom = deduceGeometry(secondaryElement);\n\n const primary = primaryGeom.rect;\n const secondary = secondaryGeom.rect;\n\n const lines = createMeasurementLines(resolvedContext, primary, secondary);\n\n return {\n element: secondaryElement,\n result: {\n context: resolvedContext,\n lines,\n primary,\n secondary,\n timestamp: Date.now(),\n primaryHierarchy: primaryGeom.scrollHierarchy,\n secondaryHierarchy: secondaryGeom.scrollHierarchy,\n secondaryElement,\n primaryPosition: primaryGeom.position,\n secondaryPosition: secondaryGeom.position,\n primarySticky: primaryGeom.stickyConfig,\n secondarySticky: secondaryGeom.stickyConfig,\n primaryWinX: primaryGeom.initialWindowX,\n primaryWinY: primaryGeom.initialWindowY,\n secondaryWinX: secondaryGeom.initialWindowX,\n secondaryWinY: secondaryGeom.initialWindowY,\n },\n };\n}\n","/**\n * Measurement state machine\n * IDLE → ARMED → MEASURING → FROZEN → IDLE\n */\nexport type MeasurementState = \"IDLE\" | \"ARMED\" | \"MEASURING\" | \"FROZEN\";\n\nexport interface StateMachine {\n getState: () => MeasurementState;\n transitionTo: (newState: MeasurementState) => boolean;\n isIdle: () => boolean;\n isArmed: () => boolean;\n isMeasuring: () => boolean;\n isFrozen: () => boolean;\n}\n\nexport function createStateMachine(): StateMachine {\n let state: MeasurementState = \"IDLE\";\n\n function getState(): MeasurementState {\n return state;\n }\n\n function transitionTo(newState: MeasurementState): boolean {\n const validTransitions: Record<MeasurementState, MeasurementState[]> = {\n IDLE: [\"ARMED\", \"FROZEN\"],\n ARMED: [\"MEASURING\", \"FROZEN\", \"IDLE\"],\n MEASURING: [\"FROZEN\", \"IDLE\"],\n FROZEN: [\"MEASURING\", \"IDLE\"],\n };\n\n const allowed = validTransitions[state];\n if (allowed && allowed.includes(newState)) {\n state = newState;\n return true;\n }\n\n return false;\n }\n\n function isIdle(): boolean {\n return state === \"IDLE\";\n }\n\n function isArmed(): boolean {\n return state === \"ARMED\";\n }\n\n function isMeasuring(): boolean {\n return state === \"MEASURING\";\n }\n\n function isFrozen(): boolean {\n return state === \"FROZEN\";\n }\n\n return {\n getState,\n transitionTo,\n isIdle,\n isArmed,\n isMeasuring,\n isFrozen,\n };\n}\n","/**\n * Calculator state machine\n */\n\nexport type CalculatorOperation = \"+\" | \"-\" | \"*\" | \"/\";\n\nexport interface CalculatorState {\n baseValue: number;\n operation: CalculatorOperation | null;\n inputValue: string;\n result: number | null;\n isActive: boolean;\n}\n\nexport type CalculatorAction =\n | { type: \"OPEN\"; baseValue: number }\n | { type: \"INPUT_DIGIT\"; digit: string }\n | { type: \"INPUT_OPERATION\"; operation: CalculatorOperation }\n | { type: \"BACKSPACE\" }\n | { type: \"DELETE\" }\n | { type: \"ENTER\" }\n | { type: \"SYNC_VALUE\"; value: number }\n | { type: \"CLOSE\" };\n\nexport function createCalculatorState(): {\n getState: () => CalculatorState;\n dispatch: (action: CalculatorAction) => CalculatorState;\n calculate: () => number | null;\n} {\n let state: CalculatorState = {\n baseValue: 0,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: false,\n };\n\n function calculate(): number | null {\n const val = state.inputValue === \"\" ? \"0\" : state.inputValue;\n const inputNum = parseFloat(val);\n if (isNaN(inputNum)) {\n return null;\n }\n\n switch (state.operation) {\n case \"+\":\n return state.baseValue + inputNum;\n case \"-\":\n return state.baseValue - inputNum;\n case \"*\":\n return state.baseValue * inputNum;\n case \"/\":\n return inputNum !== 0 ? state.baseValue / inputNum : null;\n default:\n return null;\n }\n }\n\n function dispatch(action: CalculatorAction): CalculatorState {\n switch (action.type) {\n case \"OPEN\":\n state = {\n baseValue: action.baseValue,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: true,\n };\n break;\n\n case \"SYNC_VALUE\":\n // Only sync if the user hasn't started an operation yet\n if (state.isActive && state.operation === null) {\n state = {\n ...state,\n baseValue: action.value,\n };\n }\n break;\n\n case \"INPUT_DIGIT\":\n if (!state.isActive || !state.operation) return state;\n\n const isDot = action.digit === \".\";\n const alreadyHasDot = (state.inputValue || \"\").includes(\".\");\n\n if (isDot && alreadyHasDot) return state;\n\n if (state.result !== null) {\n state = {\n ...state,\n inputValue: isDot ? \"0.\" : action.digit,\n result: null,\n };\n } else {\n state = {\n ...state,\n inputValue:\n state.inputValue === \"0\" && !isDot ? action.digit : state.inputValue + action.digit,\n };\n }\n break;\n\n case \"INPUT_OPERATION\":\n if (!state.isActive) return state;\n\n const hasResult = state.result !== null;\n // Allow switching if input is empty or just a single \"0\" (placeholder/mistake)\n const isSwitchable = state.inputValue === \"\" || state.inputValue === \"0\";\n\n if (hasResult || (state.operation && !isSwitchable)) {\n // If we have a result or meaningful input, commit current calc as new base\n const newBase = hasResult ? state.result! : (calculate() ?? state.baseValue);\n state = {\n baseValue: newBase,\n operation: action.operation,\n inputValue: \"\",\n result: null,\n isActive: true,\n };\n } else {\n // Just switch the operation\n state = {\n ...state,\n operation: action.operation,\n inputValue: \"\",\n result: null,\n };\n }\n break;\n\n case \"BACKSPACE\":\n if (!state.isActive) return state;\n\n if (state.result !== null) {\n // Remove result first, keeping operation and input\n state = {\n ...state,\n result: null,\n };\n } else if (state.inputValue.length > 0) {\n // Remove last digit\n state = {\n ...state,\n inputValue: state.inputValue.slice(0, -1),\n };\n } else if (state.operation) {\n // Remove operation\n state = {\n ...state,\n operation: null,\n };\n } else {\n // Close if nothing left\n state = {\n ...state,\n isActive: false,\n };\n }\n break;\n\n case \"DELETE\":\n if (!state.isActive) return state;\n state = {\n baseValue: state.baseValue,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: false,\n };\n break;\n\n case \"ENTER\":\n if (!state.isActive || !state.operation) {\n return state;\n }\n const result = calculate();\n state = {\n ...state,\n result: result,\n };\n break;\n\n case \"CLOSE\":\n state = {\n baseValue: 0,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: false,\n };\n break;\n }\n\n return state;\n }\n\n function getState(): CalculatorState {\n return { ...state };\n }\n\n return { getState, dispatch, calculate };\n}\n","import {\n createCalculatorState,\n type CalculatorState,\n type CalculatorOperation,\n} from \"../../calculator-model/utils/calculator-state.js\";\nimport type { MeasurementLine } from \"./measurement-result.js\";\n\nexport interface CalculatorIntegration {\n getState: () => CalculatorState;\n open: (baseValue: number) => void;\n handleInput: (key: string) => void;\n handleBackspace: () => void;\n handleDelete: () => void;\n handleEnter: () => void;\n close: () => void;\n syncValue: (value: number) => void;\n getResult: () => number | null;\n}\n\n/**\n * Calculator Integration Factory\n *\n * Creates an integration bridge between the raw calculator state machine and\n * the measurement system. It handles mapping user inputs (keys, actions)\n * to calculator state transitions.\n *\n * @returns A CalculatorIntegration instance.\n */\nexport function createCalculatorIntegration(): CalculatorIntegration {\n const calculator = createCalculatorState();\n\n function open(baseValue: number) {\n calculator.dispatch({ type: \"OPEN\", baseValue });\n }\n\n function handleInput(key: string) {\n if (/^[0-9.]$/.test(key)) {\n calculator.dispatch({ type: \"INPUT_DIGIT\", digit: key });\n } else if (/^[+\\-*/]$/.test(key)) {\n calculator.dispatch({\n type: \"INPUT_OPERATION\",\n operation: key as CalculatorOperation,\n });\n }\n }\n\n function handleBackspace() {\n calculator.dispatch({ type: \"BACKSPACE\" });\n }\n\n function handleDelete() {\n calculator.dispatch({ type: \"DELETE\" });\n }\n\n function handleEnter() {\n calculator.dispatch({ type: \"ENTER\" });\n }\n\n function close() {\n calculator.dispatch({ type: \"CLOSE\" });\n }\n\n function syncValue(value: number) {\n calculator.dispatch({ type: \"SYNC_VALUE\", value });\n }\n\n function getResult(): number | null {\n const state = calculator.getState();\n return state.result;\n }\n\n return {\n getState: calculator.getState,\n open,\n handleInput,\n handleBackspace,\n handleDelete,\n handleEnter,\n close,\n syncValue,\n getResult,\n };\n}\n\n/**\n * Opens and initializes the calculator using the value from a specific measurement line.\n *\n * @param calculator - The calculator integration instance to open.\n * @param line - The measurement line providing the base numeric value.\n */\nexport function openCalculatorFromLine(calculator: CalculatorIntegration, line: MeasurementLine) {\n calculator.open(line.value);\n}\n","import { ProjectionState, ProjectionDirection } from \"../../shared/types/index.js\";\n\nexport type ProjectionListener = (state: ProjectionState) => void;\n\nexport interface ProjectionSystem {\n getState: () => ProjectionState;\n setDirection: (direction: ProjectionDirection | null) => void;\n setElement: (element: HTMLElement | null) => void;\n appendValue: (char: string, max?: number) => void;\n capValue: (max: number) => void;\n backspace: () => void;\n clear: () => void;\n onUpdate: (listener: ProjectionListener) => () => void;\n}\n\n/**\n * Projection System Factory\n *\n * Creates a system that manages measurement projections (e.g., projecting a\n * line from an element to a specific coordinate). It tracks the direction,\n * numeric value, and target element for the projection.\n *\n * @returns A ProjectionSystem instance.\n */\nexport function createProjectionSystem(): ProjectionSystem {\n let state: ProjectionState = {\n direction: null,\n value: \"\",\n element: null,\n };\n\n const listeners = new Set<ProjectionListener>();\n\n const notify = () => {\n listeners.forEach((listener) => listener({ ...state }));\n };\n\n return {\n getState: () => ({ ...state }),\n setDirection: (direction) => {\n state.direction = direction;\n // When direction changes but no value exists, we keep value empty.\n // If user switches direction while typing, we keep the value.\n notify();\n },\n setElement: (element) => {\n state.element = element;\n notify();\n },\n appendValue: (char, max) => {\n if (/^[0-9.]$/.test(char)) {\n const isDot = char === \".\";\n const alreadyHasDot = state.value.includes(\".\");\n\n if (isDot && alreadyHasDot) return;\n\n const newValueStr = state.value + char;\n const newValueNum = parseFloat(newValueStr) || 0;\n\n if (max !== undefined && newValueNum > max) {\n state.value = Math.floor(max).toString();\n } else {\n state.value = newValueStr;\n }\n notify();\n }\n },\n capValue: (max) => {\n const currentVal = parseFloat(state.value) || 0;\n if (currentVal > max) {\n state.value = Math.floor(max).toString();\n notify();\n }\n },\n backspace: () => {\n if (state.value.length > 0) {\n state.value = state.value.slice(0, -1);\n notify();\n } else if (state.direction) {\n // If value is empty, backspace clears the direction\n state.direction = null;\n notify();\n }\n },\n clear: () => {\n state = { direction: null, value: \"\", element: null };\n notify();\n },\n onUpdate: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n","/**\n * Generates a unique ID with an optional prefix.\n */\nexport function generateId(prefix: string = \"\"): string {\n const randomPart = Math.random().toString(36).substring(2, 11);\n return prefix ? `${prefix}-${randomPart}` : randomPart;\n}\n","import { RulerLine, RulerState } from \"../../shared/types/index.js\";\nimport { MAX_RULER_LINES } from \"../../shared/constants/index.js\";\nimport { generateId } from \"../../shared/utils/id.js\";\n\nexport type RulerListener = (state: RulerState) => void;\n\nexport interface RulerSystem {\n getState: () => RulerState;\n addPair: (x: number, y: number) => string | null;\n updateLine: (id: string, position: number) => void;\n removeLine: (id: string) => void;\n clear: () => void;\n onUpdate: (listener: RulerListener) => () => void;\n}\n\n/**\n * Ruler System Factory\n *\n * Creates a system that manages customized ruler lines on the viewport.\n * Allows users to drop horizontal and vertical guides and track their positions.\n *\n * @returns A RulerSystem instance.\n */\nexport function createRulerSystem(): RulerSystem {\n let state: RulerState = {\n lines: [],\n };\n\n const listeners = new Set<RulerListener>();\n\n const notify = () => {\n listeners.forEach((listener) => listener({ lines: [...state.lines] }));\n };\n\n return {\n getState: () => ({ lines: [...state.lines] }),\n addPair: (x, y) => {\n if (state.lines.length >= MAX_RULER_LINES) return null;\n\n const hLine: RulerLine = {\n id: generateId(\"ruler-h\"),\n type: \"horizontal\",\n position: y,\n };\n const vLine: RulerLine = {\n id: generateId(\"ruler-v\"),\n type: \"vertical\",\n position: x,\n };\n\n state.lines.push(hLine, vLine);\n notify();\n return vLine.id;\n },\n updateLine: (id, position) => {\n const index = state.lines.findIndex((line) => line.id === id);\n if (index !== -1 && state.lines[index]) {\n state.lines[index] = { ...state.lines[index]!, position };\n notify();\n }\n },\n removeLine: (id) => {\n state.lines = state.lines.filter((line) => line.id !== id);\n notify();\n },\n clear: () => {\n state.lines = [];\n notify();\n },\n onUpdate: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n","import { createReader } from \"../../scheduling/reader.js\";\nimport { createFrequencyControlledReader } from \"../../scheduling/frequency-control.js\";\nimport type { CursorContext } from \"../../shared/types/index.js\";\nimport type { MeasurementResult } from \"./measurement-result.js\";\nimport { createMeasurementLines } from \"./measurement-result.js\";\nimport { createMeasurement } from \"./create-measurement.js\";\nimport { createStateMachine, type MeasurementState } from \"./state-machine.js\";\nimport {\n createCalculatorIntegration,\n type CalculatorIntegration,\n} from \"./calculator-integration.js\";\nimport { createProjectionSystem, type ProjectionSystem } from \"./projection-system.js\";\nimport { createRulerSystem, type RulerSystem } from \"../../ruler-model/utils/ruler-system.js\";\n\nexport type { MeasurementState };\n\nexport type MeasurementSystemListener = () => void;\n\nexport interface MeasurementSystem {\n measure: (selectedElement: Element, cursor: { x: number; y: number }) => void;\n abort: () => void;\n stop: () => void;\n freeze: () => void;\n unfreeze: (isAltDown: boolean) => void;\n cleanup: () => void;\n getState: () => MeasurementState;\n getCurrentResult: () => MeasurementResult | null;\n getSecondaryElement: () => Element | null;\n getCalculator: () => CalculatorIntegration;\n getProjection: () => ProjectionSystem;\n getRuler: () => RulerSystem;\n onStateChange: (listener: MeasurementSystemListener) => () => void;\n updatePrimaryRect: (rect: DOMRect) => void;\n updateSecondaryRect: (rect: DOMRect) => void;\n applyResult: (result: MeasurementResult) => void;\n}\n\n/**\n * Measurement System Factory\n *\n * Creates a system that tracks measurements between a primary selected element\n * and other elements under the cursor. It manages the lifecycle of the\n * measurement (active, frozen, aborted) and integrates with the secondary systems\n * like calculator and projection.\n *\n * @returns A MeasurementSystem instance.\n */\nexport function createMeasurementSystem(): MeasurementSystem {\n const baseReader = createReader();\n const reader = createFrequencyControlledReader(baseReader);\n const stateMachine = createStateMachine();\n const calculator = createCalculatorIntegration();\n const projection = createProjectionSystem();\n const ruler = createRulerSystem();\n const listeners = new Set<MeasurementSystemListener>();\n\n let currentResult: MeasurementResult | null = null;\n let previousContext: CursorContext | null = null;\n let previousElement: Element | null = null;\n\n function notifyListeners() {\n listeners.forEach((listener) => listener());\n }\n\n function measure(selectedElement: Element, cursor: { x: number; y: number }): void {\n stateMachine.transitionTo(\"ARMED\");\n\n reader.scheduleRead(() => {\n const start = performance.now();\n\n const measurement = createMeasurement(\n selectedElement,\n cursor.x,\n cursor.y,\n previousContext,\n previousElement\n );\n\n // reader.recordFrameTime(performance.now());\n\n if (measurement) {\n const { result, element } = measurement;\n\n if (!stateMachine.isMeasuring() && !stateMachine.isArmed()) {\n return;\n }\n\n if (\n stateMachine.isMeasuring() &&\n element === previousElement &&\n result.context === previousContext\n ) {\n return;\n }\n\n currentResult = result;\n previousContext = result.context;\n previousElement = element;\n stateMachine.transitionTo(\"MEASURING\");\n notifyListeners();\n }\n });\n }\n\n function freeze() {\n const state = stateMachine.getState();\n if (state === \"MEASURING\" || state === \"IDLE\" || state === \"ARMED\") {\n reader.cancel();\n stateMachine.transitionTo(\"FROZEN\");\n notifyListeners();\n }\n }\n\n function unfreeze(isAltDown: boolean) {\n if (stateMachine.isFrozen()) {\n stateMachine.transitionTo(isAltDown ? \"MEASURING\" : \"IDLE\");\n notifyListeners();\n }\n }\n\n function abort() {\n reader.cancel();\n stateMachine.transitionTo(\"IDLE\");\n calculator.close();\n projection.clear();\n ruler.clear();\n currentResult = null;\n previousContext = null;\n previousElement = null;\n notifyListeners();\n }\n\n function stop() {\n reader.cancel();\n if (stateMachine.getState() === \"MEASURING\") {\n stateMachine.transitionTo(\"IDLE\");\n notifyListeners();\n }\n }\n\n function cleanup() {\n abort();\n listeners.clear();\n currentResult = null;\n previousContext = null;\n previousElement = null;\n }\n\n function getState(): MeasurementState {\n return stateMachine.getState();\n }\n\n function getCurrentResult(): MeasurementResult | null {\n return currentResult;\n }\n\n function getSecondaryElement(): Element | null {\n return previousElement;\n }\n\n function getCalculator(): CalculatorIntegration {\n return calculator;\n }\n\n function getProjection(): ProjectionSystem {\n return projection;\n }\n\n function getRuler(): RulerSystem {\n return ruler;\n }\n\n function onStateChange(listener: MeasurementSystemListener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n\n function updatePrimaryRect(rect: DOMRect) {\n if (!currentResult) return;\n const newPrimary = new DOMRect(\n rect.left + window.scrollX,\n rect.top + window.scrollY,\n rect.width,\n rect.height\n );\n currentResult = {\n ...currentResult,\n primary: newPrimary,\n primaryWinX: window.scrollX,\n primaryWinY: window.scrollY,\n lines: createMeasurementLines(currentResult.context, newPrimary, currentResult.secondary),\n };\n notifyListeners();\n }\n\n function updateSecondaryRect(rect: DOMRect) {\n if (!currentResult) return;\n const newSecondary = new DOMRect(\n rect.left + window.scrollX,\n rect.top + window.scrollY,\n rect.width,\n rect.height\n );\n currentResult = {\n ...currentResult,\n secondary: newSecondary,\n secondaryWinX: window.scrollX,\n secondaryWinY: window.scrollY,\n lines: createMeasurementLines(currentResult.context, currentResult.primary, newSecondary),\n };\n notifyListeners();\n }\n\n function applyResult(result: MeasurementResult) {\n currentResult = result;\n stateMachine.transitionTo(\"MEASURING\");\n notifyListeners();\n }\n\n return {\n measure,\n abort,\n stop,\n freeze,\n unfreeze,\n cleanup,\n getState,\n getCurrentResult,\n getSecondaryElement,\n getCalculator,\n getProjection,\n getRuler,\n onStateChange,\n updatePrimaryRect,\n updateSecondaryRect,\n applyResult,\n };\n}\n","/**\n * Schedules a callback to run after requestAnimationFrame and a microtask.\n * This ensures the DOM has settled and coordinates are accurate.\n */\nexport async function waitPostRaf<T>(callback: () => T): Promise<T> {\n return new Promise((resolve, reject) => {\n if (\n typeof requestAnimationFrame === \"undefined\" ||\n (typeof document !== \"undefined\" && document.hidden)\n ) {\n setTimeout(() => {\n try {\n resolve(callback());\n } catch (e) {\n reject(e);\n }\n }, 0);\n return;\n }\n\n requestAnimationFrame(() => {\n Promise.resolve().then(() => {\n try {\n resolve(callback());\n } catch (e) {\n reject(e);\n }\n });\n });\n });\n}\n","import type { SelectionMetadata as BaseSelectionMetadata } from \"@oyerinde/caliper-schema\";\nimport { deduceGeometry } from \"../../geometry/utils/scroll-aware.js\";\nimport { waitPostRaf } from \"../../shared/utils/raf.js\";\nimport type { Remap, ScrollState, PositionMode, StickyConfig } from \"../../shared/types/index.js\";\n\n/**\n * Selection system for tracking selected elements\n */\nexport type SelectionMetadata = Remap<\n BaseSelectionMetadata,\n {\n element: Element | null;\n rect: DOMRect | null;\n scrollHierarchy: ScrollState[];\n }\n>;\n\nexport interface SelectionSystem {\n select: (element: Element | null) => void;\n getSelected: () => Element | null;\n getSelectedRect: () => DOMRect | null;\n getMetadata: () => SelectionMetadata;\n clear: () => void;\n onUpdate: (callback: (metadata: SelectionMetadata) => void) => () => void;\n updateRect: (rect: DOMRect) => void;\n}\n\n/**\n * Selection System Factory\n *\n * Creates a system that manages the \"primary\" selected element. It handles\n * tracking the element's geometry, scroll hierarchy, and notifies listeners\n * when the selection changes or is cleared.\n *\n * @returns A SelectionSystem instance.\n */\nexport function createSelectionSystem(): SelectionSystem {\n let selectedElement: Element | null = null;\n let selectedRect: DOMRect | null = null;\n let scrollHierarchy: ScrollState[] = [];\n let position: PositionMode = \"static\";\n let stickyConfig: StickyConfig | undefined;\n let initialWindowX = 0;\n let initialWindowY = 0;\n let depth = 0;\n\n const updateListeners = new Set<(metadata: SelectionMetadata) => void>();\n\n function getMetadata(): SelectionMetadata {\n return {\n element: selectedElement,\n rect: selectedRect,\n scrollHierarchy,\n position,\n stickyConfig,\n initialWindowX,\n initialWindowY,\n depth,\n };\n }\n\n function notifyListeners() {\n const metadata = getMetadata();\n updateListeners.forEach((listener) => listener(metadata));\n }\n\n function select(element: Element | null) {\n if (selectedElement === element && (element !== null || selectedRect === null)) return;\n\n selectedElement = element;\n\n if (element) {\n waitPostRaf(() => {\n if (selectedElement === element && document.contains(element)) {\n const geometry = deduceGeometry(element);\n selectedRect = geometry.rect;\n scrollHierarchy = geometry.scrollHierarchy;\n position = geometry.position;\n stickyConfig = geometry.stickyConfig;\n initialWindowX = geometry.initialWindowX;\n initialWindowY = geometry.initialWindowY;\n depth = geometry.depth;\n\n notifyListeners();\n }\n });\n } else {\n selectedRect = null;\n scrollHierarchy = [];\n position = \"static\";\n stickyConfig = undefined;\n initialWindowX = 0;\n initialWindowY = 0;\n depth = 0;\n notifyListeners();\n }\n }\n\n function getSelected(): Element | null {\n return selectedElement;\n }\n\n function getSelectedRect(): DOMRect | null {\n return selectedRect;\n }\n\n function clear() {\n select(null);\n }\n\n function onUpdate(callback: (metadata: SelectionMetadata) => void) {\n updateListeners.add(callback);\n return () => {\n updateListeners.delete(callback);\n };\n }\n\n function updateRect(rect: DOMRect) {\n if (!selectedElement) return;\n selectedRect = new DOMRect(\n rect.left + window.scrollX,\n rect.top + window.scrollY,\n rect.width,\n rect.height\n );\n initialWindowX = window.scrollX;\n initialWindowY = window.scrollY;\n notifyListeners();\n }\n\n return {\n select,\n getSelected,\n getSelectedRect,\n getMetadata,\n clear,\n onUpdate,\n updateRect,\n };\n}\n","const IS_BROWSER = typeof window !== \"undefined\";\n\ntype OS = \"macos\" | \"ios\" | \"windows\" | \"android\" | \"linux\" | \"other\";\n\nfunction detectOS(): OS {\n if (!IS_BROWSER) return \"other\";\n\n // @ts-ignore\n const platform = navigator.userAgentData?.platform;\n if (platform) {\n switch (platform) {\n case \"macOS\":\n return \"macos\";\n case \"iOS\":\n return \"ios\";\n case \"Windows\":\n return \"windows\";\n case \"Android\":\n return \"android\";\n case \"Linux\":\n return \"linux\";\n }\n }\n\n const ua = navigator.userAgent;\n\n if (/iPhone|iPad|iPod/.test(ua)) return \"ios\";\n if (/Macintosh/.test(ua)) return \"macos\";\n if (/Windows/.test(ua)) return \"windows\";\n if (/Android/.test(ua)) return \"android\";\n if (/Linux/.test(ua)) return \"linux\";\n\n return \"other\";\n}\n\nconst OS_NAME = detectOS();\nconst IS_APPLE = OS_NAME === \"macos\" || OS_NAME === \"ios\";\n\nexport const OS = {\n IS_BROWSER,\n NAME: OS_NAME,\n\n IS_MAC: OS_NAME === \"macos\",\n IS_IOS: OS_NAME === \"ios\",\n IS_APPLE,\n\n getControlKey: () => (IS_APPLE ? \"Meta\" : \"Control\"),\n};\n","/**\n * Calculator configuration and shortcuts.\n * This file defines how users can customize the calculator triggers and appearance.\n */\nimport { OS } from \"../utils/os.js\";\nimport type { CaliperAgentState } from \"@oyerinde/caliper-schema\";\nexport type { CaliperAgentState };\n\nexport type DeepRequired<T> = {\n [K in keyof T]-?: DeepRequired<T[K]>;\n};\n\nexport interface ThemeConfig {\n primary?: string;\n secondary?: string;\n calcBg?: string;\n calcShadow?: string;\n calcOpHighlight?: string;\n calcText?: string;\n text?: string;\n projection?: string;\n ruler?: string;\n}\n\n/**\n * Keyboard shortcuts for measurement sides.\n */\nexport interface CalculatorShortcuts {\n top?: string;\n bottom?: string;\n left?: string;\n right?: string;\n distance?: string;\n}\n\n/**\n * Keyboard shortcuts for projection directions.\n */\nexport interface ProjectionShortcuts {\n top?: string;\n left?: string;\n bottom?: string;\n right?: string;\n}\n\nexport interface CommandsConfig {\n /** Key to activate measuring mode (default: Alt) */\n activate?: string;\n /** Key to freeze current measurement (default: Space) */\n freeze?: string;\n /** Key to select an element - must be held + click (default: Control) */\n select?: string;\n /** Key to clear current selection (default: Escape) */\n clear?: string;\n /** Custom keys to trigger calculator for specific sides (default: t, r, b, l) */\n calculator?: CalculatorShortcuts;\n /** Custom keys to trigger projection for specific directions (default: w, a, s, d) */\n projection?: ProjectionShortcuts;\n /** Key to trigger ruler lines - must be Shift + this key (default: r) */\n ruler?: string;\n /** Duration in ms to hold the select key to trigger selection (default: 250) */\n selectionHoldDuration?: number;\n}\n\nexport interface AnimationConfig {\n /** Enable smooth lerp animation for boundary box hover (default: true) */\n enabled?: boolean;\n /** Lerp factor for animation smoothness (0-1, lower = smoother, default: 0.25) */\n lerpFactor?: number;\n}\n\nexport interface AgentBridgeConfig {\n /** Enable the agentic bridge for AI integration (default: false) */\n enabled?: boolean;\n /** WebSocket port for the MCP relay (default: 9876) */\n wsPort?: number;\n /** Callback for agent state changes */\n onStateChange?: (state: CaliperAgentState) => void;\n}\n\nexport interface OverlayConfig {\n /** Customize the visual appearance of the overlay (colors, shadows). */\n theme?: ThemeConfig;\n /** Customize keyboard shortcuts for all interactions. */\n commands?: CommandsConfig;\n /** Control the boundary box lerp animation behavior. */\n animation?: AnimationConfig;\n /** Configure the Agent Bridge for AI/MCP integration. */\n bridge?: AgentBridgeConfig;\n /** Enable debug logging (default: true). All logs are stripped from production builds. */\n debug?: boolean;\n}\n\nexport const DEFAULT_COMMANDS: DeepRequired<CommandsConfig> = {\n activate: \"Alt\",\n freeze: \" \",\n select: OS.getControlKey(),\n clear: \"Escape\",\n calculator: {\n top: \"t\",\n right: \"r\",\n bottom: \"b\",\n left: \"l\",\n distance: \"g\",\n },\n projection: {\n top: \"w\",\n left: \"a\",\n bottom: \"s\",\n right: \"d\",\n },\n ruler: \"r\",\n selectionHoldDuration: 250,\n};\n\nexport const DEFAULT_THEME: DeepRequired<ThemeConfig> = {\n primary: \"rgba(24, 160, 251, 1)\",\n secondary: \"rgba(242, 78, 30, 1)\",\n calcBg: \"rgba(30, 30, 30, 0.95)\",\n calcShadow: \"rgba(0, 0, 0, 0.25)\",\n calcOpHighlight: \"rgba(24, 160, 251, 0.3)\",\n calcText: \"rgba(255, 255, 255, 1)\",\n text: \"rgba(255, 255, 255, 1)\",\n projection: \"rgba(155, 81, 224, 1)\",\n ruler: \"rgba(24, 160, 251, 1)\",\n};\n\nexport const DEFAULT_ANIMATION: DeepRequired<AnimationConfig> = {\n enabled: true,\n lerpFactor: 0.25,\n};\n","import type {\n OverlayConfig,\n ThemeConfig,\n AnimationConfig,\n CommandsConfig,\n DeepRequired,\n} from \"./overlay-config.js\";\nimport { DEFAULT_COMMANDS, DEFAULT_ANIMATION, DEFAULT_THEME } from \"./overlay-config.js\";\n\nfunction parseNumber(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === \"\") return defaultValue;\n const num = Number(value);\n return isFinite(num) && !isNaN(num) ? num : defaultValue;\n}\n\n/**\n * Helper to inject opacity into both Hex and RGBA colors\n */\nfunction withOpacity(color: string, opacity: number): string {\n if (color.startsWith(\"#\")) {\n let hex = color.slice(1);\n if (hex.length === 3)\n hex = hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\");\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n if (color.startsWith(\"rgba\")) {\n return color.replace(/[\\d.]+\\)$/g, `${opacity})`);\n }\n if (color.startsWith(\"rgb\")) {\n return color.replace(\")\", `, ${opacity})`).replace(\"rgb\", \"rgba\");\n }\n return color;\n}\n\n/**\n * Applies a Caliper theme to an HTML element by setting CSS variables.\n *\n * This is used internally to inject the custom theme into the Shadow DOM root\n * or can be used manually to sync theme variables with a host application.\n *\n * @param theme - The theme configuration object.\n * @param target - The element to apply styles to. Defaults to documentElement.\n */\nexport function applyTheme(theme?: ThemeConfig, target: HTMLElement = document.documentElement) {\n if (!theme || !target) return;\n\n const root = target;\n\n if (theme.primary) {\n root.style.setProperty(\"--caliper-primary\", theme.primary);\n root.style.setProperty(\"--caliper-primary-90\", withOpacity(theme.primary, 0.9));\n root.style.setProperty(\"--caliper-primary-95\", withOpacity(theme.primary, 0.95));\n root.style.setProperty(\"--caliper-primary-50\", withOpacity(theme.primary, 0.5));\n root.style.setProperty(\"--caliper-primary-05\", withOpacity(theme.primary, 0.05));\n }\n if (theme.secondary) {\n root.style.setProperty(\"--caliper-secondary\", theme.secondary);\n root.style.setProperty(\"--caliper-secondary-50\", withOpacity(theme.secondary, 0.5));\n root.style.setProperty(\"--caliper-secondary-05\", withOpacity(theme.secondary, 0.05));\n }\n if (theme.calcBg) root.style.setProperty(\"--caliper-calc-bg\", theme.calcBg);\n if (theme.calcShadow) root.style.setProperty(\"--caliper-calc-shadow\", theme.calcShadow);\n if (theme.calcOpHighlight)\n root.style.setProperty(\"--caliper-calc-op-highlight\", theme.calcOpHighlight);\n if (theme.calcText) root.style.setProperty(\"--caliper-calc-text\", theme.calcText);\n if (theme.text) root.style.setProperty(\"--caliper-text\", theme.text);\n if (theme.projection) {\n root.style.setProperty(\"--caliper-projection\", theme.projection);\n root.style.setProperty(\"--caliper-projection-90\", withOpacity(theme.projection, 0.9));\n root.style.setProperty(\"--caliper-projection-light\", withOpacity(theme.projection, 0.2));\n }\n if (theme.ruler) root.style.setProperty(\"--caliper-ruler\", theme.ruler);\n}\n\nexport function mergeCommands(userCommands?: CommandsConfig): DeepRequired<CommandsConfig> {\n return {\n activate: userCommands?.activate ?? DEFAULT_COMMANDS.activate,\n freeze: userCommands?.freeze ?? DEFAULT_COMMANDS.freeze,\n select: userCommands?.select ?? DEFAULT_COMMANDS.select,\n clear: userCommands?.clear ?? DEFAULT_COMMANDS.clear,\n calculator: {\n top: userCommands?.calculator?.top ?? DEFAULT_COMMANDS.calculator.top,\n right: userCommands?.calculator?.right ?? DEFAULT_COMMANDS.calculator.right,\n bottom: userCommands?.calculator?.bottom ?? DEFAULT_COMMANDS.calculator.bottom,\n left: userCommands?.calculator?.left ?? DEFAULT_COMMANDS.calculator.left,\n distance: userCommands?.calculator?.distance ?? DEFAULT_COMMANDS.calculator.distance,\n },\n projection: {\n top: userCommands?.projection?.top ?? DEFAULT_COMMANDS.projection.top,\n left: userCommands?.projection?.left ?? DEFAULT_COMMANDS.projection.left,\n bottom: userCommands?.projection?.bottom ?? DEFAULT_COMMANDS.projection.bottom,\n right: userCommands?.projection?.right ?? DEFAULT_COMMANDS.projection.right,\n },\n ruler: userCommands?.ruler ?? DEFAULT_COMMANDS.ruler,\n selectionHoldDuration: parseNumber(\n userCommands?.selectionHoldDuration,\n DEFAULT_COMMANDS.selectionHoldDuration\n ),\n };\n}\n\nexport function mergeAnimation(userAnimation?: AnimationConfig): DeepRequired<AnimationConfig> {\n return {\n enabled: userAnimation?.enabled ?? DEFAULT_ANIMATION.enabled,\n lerpFactor: parseNumber(userAnimation?.lerpFactor, DEFAULT_ANIMATION.lerpFactor),\n };\n}\n\nexport function mergeTheme(userTheme?: ThemeConfig): DeepRequired<ThemeConfig> {\n return {\n primary: userTheme?.primary ?? DEFAULT_THEME.primary,\n secondary: userTheme?.secondary ?? DEFAULT_THEME.secondary,\n calcBg: userTheme?.calcBg ?? DEFAULT_THEME.calcBg,\n calcShadow: userTheme?.calcShadow ?? DEFAULT_THEME.calcShadow,\n calcOpHighlight: userTheme?.calcOpHighlight ?? DEFAULT_THEME.calcOpHighlight,\n calcText: userTheme?.calcText ?? DEFAULT_THEME.calcText,\n text: userTheme?.text ?? DEFAULT_THEME.text,\n projection: userTheme?.projection ?? DEFAULT_THEME.projection,\n ruler: userTheme?.ruler ?? DEFAULT_THEME.ruler,\n };\n}\n\ndeclare global {\n interface Window {\n __CALIPER_CONFIG__?: OverlayConfig;\n }\n}\n\n/**\n * Retrieves the current Caliper configuration from the environment.\n *\n * It resolves configuration in the following priority:\n * 1. Global window object (`window.__CALIPER_CONFIG__`)\n * 2. `data-config` attribute on the script tag (useful for UMD/CDN usage)\n *\n * @returns The resolved OverlayConfig object.\n */\nexport function getConfig(): OverlayConfig {\n if (typeof window !== \"undefined\") {\n const windowConfig = window.__CALIPER_CONFIG__ ?? {};\n\n const currentScript =\n typeof document !== \"undefined\" ? (document.currentScript as HTMLScriptElement) : null;\n const dataConfig =\n currentScript?.getAttribute(\"data-config\") ||\n (typeof document !== \"undefined\"\n ? document.querySelector(\"script[data-config]\")?.getAttribute(\"data-config\")\n : null);\n\n if (dataConfig) {\n try {\n const parsed = JSON.parse(dataConfig) as OverlayConfig;\n return {\n ...windowConfig,\n ...parsed,\n theme: { ...windowConfig.theme, ...parsed.theme },\n commands: { ...windowConfig.commands, ...parsed.commands },\n animation: { ...windowConfig.animation, ...parsed.animation },\n bridge: { ...windowConfig.bridge, ...parsed.bridge },\n };\n } catch (e) {\n console.warn(\"[CALIPER] Failed to parse data-config attribute\", e);\n }\n }\n\n return windowConfig;\n }\n return {};\n}\n\n/**\n * Sets the global Caliper configuration.\n * This is a typed wrapper around window.__CALIPER_CONFIG__.\n *\n * @param config - The configuration object to set\n *\n * @example\n * ```ts\n * import { setConfig } from \"@caliper/core\";\n *\n * setConfig({\n * theme: { primary: \"#ff0000\" },\n * commands: { activate: \"Alt\" }\n * });\n * ```\n */\nexport function setConfig(config: OverlayConfig): void {\n if (typeof window !== \"undefined\") {\n window.__CALIPER_CONFIG__ = config;\n }\n}\n","interface VersionInfo {\n version: string;\n timestamp: string;\n}\n\nconst CALIPER_LOGO_SVG = `data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTcyIiBoZWlnaHQ9IjUwIiB2aWV3Qm94PSIwIDAgMTcyIDUwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ3LjIxNDQgNy42MjkzOWUtMDZIMzIuNzkyOEwyNS44MjUgNDMuMzIyNUgzNS4wNjEzTDM2LjE5NTYgMzUuMDE2M0g0NC4xMzU2TDQ1LjI2OTkgNDMuMzIyNUg1NC42NjgzTDQ3LjIxNDQgNy42MjkzOWUtMDZaTTM5LjU5ODUgOC4zMDYySDQwLjczMjhMNDQuMTM1NiAyOC4xNzU5SDM2LjE5NTZMMzkuNTk4NSA4LjMwNjJaIiBmaWxsPSIjQUMyMzIzIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNS4wMjMyOCAwTDAgNS4wNDg4NlYyOC4zMzg4TDUuMTg1MzIgMzMuMzg3NkgxNy41MDA0VjM1LjM0MkgxNS41NTZWNDYuNzQyN0gxOS4xMjA5TDI0LjMwNjIgMzUuNjY3OFYyNS44OTU4SDcuMTI5ODFWNy4zMjg5OUgxMy40NDk0VjBINS4wMjMyOFoiIGZpbGw9IiNBQzIzMjMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02Ni40OTc0IDcuNjI5MzllLTA2SDU3LjI2MVY0LjM5NzRINjIuNDQ2M1Y1LjIxMTczSDU3LjI2MVY2LjY3NzU0SDYwLjE3NzdWNy4zMjg5OUg1Ny4yNjFWOC45NTc2Nkg2MC4xNzc3VjkuNjA5MTNINTcuMjYxVjExLjA3NDlINjAuMTc3N1YxMS43MjY0SDU3LjI2MVYxMy4xOTIySDYyLjQ0NjNWMTMuODQzN0g1Ny4yNjFWMTUuNDcyM0g2MC4xNzc3VjE2LjEyMzhINTcuMjYxVjE3LjU4OTZINjAuMTc3N1YxOC4yNDExSDU3LjI2MVYxOS44Njk3SDYwLjE3NzdWMjAuNTIxMkg1Ny4yNjFWMjEuODI0MUg2Mi40NDYzVjIyLjYzODRINTcuMjYxVjI0LjI2NzFINjAuMTc3N1YyNC43NTU3SDU3LjI2MVYyNi4zODQ0SDYwLjE3NzdWMjcuMDM1OEg1Ny4yNjFWMjguNTAxNkg2MC4xNzc3VjI5LjE1MzFINTcuMjYxVjMwLjYxODlINjIuNDQ2M1YzMS40MzMySDU3LjI2MVYzMi44OTlINjAuMTc3N1YzMy41NTA1SDU3LjI2MVYzNS4wMTYzSDYwLjE3NzdWMzUuODMwNkg1Ny4yNjFWMzcuMjk2NEg2MC4xNzc3VjM3Ljk0NzlINTcuMjYxVjM5LjQxMzdINjIuNDQ2M1Y0MC4yMjhINTcuMjYxVjQzLjMyMjVINzcuODQwMlYzNS4wMTYzSDY2LjQ5NzRWNy42MjkzOWUtMDZaIiBmaWxsPSIjQUMyMzIzIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNzcuODQwMiAyNy42ODczSDY3LjQ2OTZMNjkuNDE0MSAzMC42MTg5TDc5Ljc4NDcgMzQuMjAyVjQzLjk3MzlDNzcuNTQzOSA0NC4zNzMgNzYuNTQzOSA0NS4yNzY5IDc2LjU0MzkgNDcuMDY4NEM3Ni41NDM5IDQ5LjE4NTcgNzcuNTc4IDQ5Ljg1MjEgNzkuNzg0NyA1MEg4Mi44NjM1VjI4LjUwMTZINzcuODQwMlYyNy42ODczWiIgZmlsbD0iI0FDMjMyMyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTg5Ljk5MzMgNy42MjkzOWUtMDZIODAuNzU3VjQuMzk3NEg4NS43ODAzVjUuMjExNzNIODAuNzU3VjYuNjc3NTRIODMuNTExN1Y3LjMyODk5SDgwLjc1N1Y4Ljk1NzY2SDgzLjUxMTdWOS40NDYyNkg4MC43NTdWMTEuMDc0OUg4My41MTE3VjExLjcyNjRIODAuNzU3VjEzLjE5MjJIODUuNzgwM1YxMy44NDM3SDgwLjc1N1YxNS40NzIzSDgzLjUxMTdWMTYuMTIzOEg4MC43NTdWMTcuNTg5Nkg4My41MTE3VjE4LjI0MTFIODAuNzU3VjE5Ljg2OTdIODMuNTExN1YyMC41MjEySDgwLjc1N1YyMS44MjQxSDg1Ljc4MDNWMjIuNjM4NEg4MC43NTdWMjcuMDM1OEg4My44MzU4VjQzLjMyMjVIODcuMjM4NlYxMi4zNzc5SDkyLjI2MTlWOS40NDYyNkg5My4wNzIxVjEwLjA5NzdIOTkuNzE1OEM5OC45MDU2IDguNzk0NzkgOTcuMTIzMSA3LjY1NDczIDk0Ljg1NDYgNy4wMDMyN0g4OS45OTMzVjcuNjI5MzllLTA2WiIgZmlsbD0iI0FDMjMyMyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTkyLjI2MTkgMTMuODQzN0g4OC4wNDg4VjQzLjMyMjVIOTIuMjYxOVYyOC41MDE2SDkzLjA3MjFWMjkuMzE2SDk0Ljg1NDZWMjUuNTdIOTMuMDcyMVYyNi4zODQ0SDkyLjI2MTlWMTMuODQzN1oiIGZpbGw9IiNBQzIzMjMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05NS42NjQ4IDYuMzUxOFY3LjYyOTM5ZS0wNkgxMTMuMDAzTDExOS42NDcgNi4zNTE4VjIxLjgyNDFMMTEzLjAwMyAyOC41MDE2SDEwNC45MDFMMTA0LjczOSA0My4zMjI1SDk1LjY2NDhWMTEuMDc0OUgxMDAuODVDMTAwLjUyNiA4LjYzMTkzIDk4LjkwNTYgNy4zMjkgOTUuNjY0OCA2LjM1MThaTTEwNC45MDEgNy45ODA0NkgxMTAuNTczVjIwLjUyMTJIMTA0LjkwMVY3Ljk4MDQ2WiIgZmlsbD0iI0FDMjMyMyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE0My4zMDUgNy42MjkzOWUtMDZIMTIzLjIxMlY0My4zMjI1SDE0My4zMDVWMzUuMDE2M0gxMzIuNDQ4VjI0LjQzSDE0MS42ODVWMTYuMTIzOEgxMzIuNDQ4VjcuOTgwNDZIMTQzLjMwNVY3LjYyOTM5ZS0wNloiIGZpbGw9IiNBQzIzMjMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNDcuMTk0IDQzLjMyMjVWNy42MjkzOWUtMDZIMTY1LjE4TDE3MS41IDUuODYzMlYxNi45MzgxTDE2Ni4xNTMgMjEuODI0MUwxNzEuNSAyNS41N1Y0My4zMjI1SDE2Mi40MjZWMjUuNTdIMTU2LjI2OFY0My4zMjI1SDE0Ny4xOTRaTTE1Ni4yNjggNy45ODA0NkgxNjIuNDI2VjE3LjU4OTZIMTU2LjI2OFY3Ljk4MDQ2WiIgZmlsbD0iI0FDMjMyMyIvPgo8L3N2Zz4K`;\n\nasync function fetchLatestVersion(): Promise<VersionInfo | null> {\n try {\n const endpoint = `https://unpkg.com/@oyerinde/caliper@latest/dist/version.json`;\n const response = await fetch(endpoint, {\n method: \"GET\",\n cache: \"no-store\",\n headers: {\n Accept: \"application/json\",\n },\n signal: AbortSignal.timeout(3000),\n });\n\n if (response.ok) {\n return await response.json();\n }\n } catch (error) {\n // Silently fail\n }\n return null;\n}\n\n/**\n * Compares two version strings (semver format)\n * Returns: -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2\n */\nfunction compareVersions(v1: string, v2: string): number {\n const parts1 = v1.split(\".\").map(Number);\n const parts2 = v2.split(\".\").map(Number);\n\n for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {\n const part1 = parts1[i] || 0;\n const part2 = parts2[i] || 0;\n if (part1 < part2) return -1;\n if (part1 > part2) return 1;\n }\n return 0;\n}\n\n/**\n * Logs the current Caliper version and check for updates in the browser console.\n *\n * @param currentVersion - The current version of the package.\n */\nexport async function showVersionInfo(currentVersion: string): Promise<void> {\n if (typeof window === \"undefined\") return;\n\n const style = `\n font-size: 1px;\n padding: 10px 34px;\n background-image: url('${CALIPER_LOGO_SVG}');\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n `;\n\n console.log(`%c `, style);\n console.log(\n `%cMeasurement Tool v${currentVersion}\\n%cDocs -> https://caliper.danieloyerinde.com`,\n \"color: #3b82f6; font-weight: bold; font-family: monospace; padding-top: 5px;\",\n \"color: #6b7280; font-family: monospace;\"\n );\n\n if (currentVersion === \"[DEV]\") return;\n\n fetchLatestVersion()\n .then((latestInfo) => {\n if (!latestInfo) return;\n\n const comparison = compareVersions(currentVersion, latestInfo.version);\n if (comparison < 0) {\n console.log(\n `%c⚠ Update available: ${latestInfo.version} (you're on ${currentVersion})`,\n \"color: #f59e0b; font-weight: bold; font-family: monospace;\"\n );\n }\n })\n .catch(() => {\n // Silently fail\n });\n}\n","/**\n * Linear interpolation between two values\n * @param start - Starting value\n * @param end - Target value\n * @param t - Interpolation factor (0-1, but can exceed for extrapolation)\n */\nexport function lerp(start: number, end: number, t: number): number {\n return start + (end - start) * t;\n}\n\n/**\n * Lerp a DOMRect-like object\n * @param start - Starting rect\n * @param end - Target rect\n * @param t - Interpolation factor\n */\nexport function lerpRect(\n start: { left: number; top: number; width: number; height: number },\n end: { left: number; top: number; width: number; height: number },\n t: number\n): { left: number; top: number; width: number; height: number } {\n return {\n left: lerp(start.left, end.left, t),\n top: lerp(start.top, end.top, t),\n width: lerp(start.width, end.width, t),\n height: lerp(start.height, end.height, t),\n };\n}\n","/**\n * Extracts and cleans the direct text content of an element, excluding text\n * from child elements.\n *\n * @param element - The element to extract text from.\n * @param maxLength - Optional maximum length for the extracted string.\n * @returns The cleaned text content or undefined if no text found.\n */\nexport function getElementDirectText(\n element: Element,\n maxLength: number = 100\n): string | undefined {\n let directText = \"\";\n\n const children = element.childNodes;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child?.nodeType === Node.TEXT_NODE) {\n directText += child.textContent || \"\";\n }\n }\n\n const trimmed = directText.trim().replace(/\\s+/g, \" \");\n if (!trimmed) return undefined;\n\n if (trimmed.length > maxLength) {\n return trimmed.slice(0, maxLength);\n }\n\n return trimmed;\n}\n","import { RUNTIME_CLASS_IGNORE_PREFIXES } from \"../constants/index.js\";\n\n/**\n * Filters out ephemeral CSS classes that are used for runtime state tracking.\n *\n * @param classes - An array or DOMTokenList of class names.\n * @returns A filtered array of stable class names.\n */\nexport function filterRuntimeClasses(classes: string[] | DOMTokenList): string[] {\n const list = Array.from(classes);\n return list.filter((className) => {\n // 1. Check known ephemeral prefixes\n // We keep stable prefixes even if they look generated.\n // Ephemeral prefixes are strictly for runtime state (is-active, caliper-measure, etc.)\n if (RUNTIME_CLASS_IGNORE_PREFIXES.some((prefix) => className.startsWith(prefix))) {\n return false;\n }\n\n // We specifically WANT CSS Modules and Hashed classes now because they are\n // useful for stable reconciliation during HMR design sessions.\n\n return true;\n });\n}\n","import { generateId } from \"./id.js\";\nimport { filterRuntimeClasses } from \"./class-filter.js\";\nimport { getElementDirectText } from \"./text-content.js\";\nimport { BRIDGE_TAB_ID_KEY } from \"../constants/index.js\";\nimport type { CaliperSelectorInput, SelectionMetadata } from \"@oyerinde/caliper-schema\";\n\nexport function buildSelectorInfo(\n element: Element,\n metadata?: Partial<SelectionMetadata>\n): CaliperSelectorInput {\n const tagName = element.tagName.toLowerCase();\n\n let agentId = element.getAttribute(\"data-caliper-agent-id\");\n if (!agentId) {\n agentId = generateId(\"caliper\");\n element.setAttribute(\"data-caliper-agent-id\", agentId);\n }\n\n const id = (element as HTMLElement).id;\n const text = getElementDirectText(element);\n const classes = filterRuntimeClasses(element.classList);\n\n const parent = element.parentElement;\n let nthChild = -1;\n if (parent) {\n nthChild = Array.from(parent.children).indexOf(element);\n }\n\n const marker = element.getAttribute(\"data-caliper-marker\") || undefined;\n\n let x: number;\n let y: number;\n\n if (metadata?.rect) {\n x = Math.round(metadata.rect.left);\n y = Math.round(metadata.rect.top);\n } else {\n const rect = element.getBoundingClientRect();\n x = Math.round(rect.left + (typeof window !== \"undefined\" ? window.scrollX : 0));\n y = Math.round(rect.top + (typeof window !== \"undefined\" ? window.scrollY : 0));\n }\n\n const info: CaliperSelectorInput = {\n selector: agentId,\n tag: tagName,\n timestamp: Date.now(),\n nthChild: nthChild !== -1 ? nthChild : undefined,\n x,\n y,\n marker,\n };\n\n if (metadata?.scrollHierarchy) {\n info.scrollHierarchy = metadata.scrollHierarchy.map((scrollStateItem) => {\n const { element: _removedElement, ...serializableScrollState } =\n scrollStateItem as typeof scrollStateItem & {\n element?: unknown;\n };\n return serializableScrollState;\n });\n }\n\n if (metadata?.position) info.position = metadata.position;\n if (metadata?.stickyConfig) info.stickyConfig = metadata.stickyConfig;\n if (metadata?.initialWindowX !== undefined) info.initialWindowX = metadata.initialWindowX;\n if (metadata?.initialWindowY !== undefined) info.initialWindowY = metadata.initialWindowY;\n if (metadata?.hasContainingBlock !== undefined)\n info.hasContainingBlock = metadata.hasContainingBlock;\n if (metadata?.rect) info.rect = metadata.rect;\n\n if (id) info.id = id;\n if (text) info.text = text;\n if (classes.length > 0) info.classes = classes;\n\n const tabId =\n typeof sessionStorage !== \"undefined\" ? sessionStorage.getItem(BRIDGE_TAB_ID_KEY) : null;\n if (tabId) info.tabId = tabId;\n\n return info;\n}\n\n/**\n * A helper function for developers to add stable markers to their components.\n * Returns an object with the data-caliper-marker attribute.\n *\n * @example\n * <div {...caliperProps(\"main-logo\")}>...</div>\n */\nexport function caliperProps(marker: string) {\n if (process.env.NODE_ENV === \"production\") {\n return {};\n }\n return {\n \"data-caliper-marker\": marker,\n };\n}\n","declare const __DEV__: boolean;\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"none\";\n\nexport interface LoggerOptions {\n prefix?: string;\n enabled?: boolean;\n}\n\n/**\n * Global master switch for all logger instances.\n * This allows a single config point to silence the entire library.\n */\nlet isGlobalEnabled = true;\n\nclass Logger {\n private prefix: string;\n\n constructor(options: LoggerOptions = {}) {\n this.prefix = options.prefix ? `[${options.prefix}]` : \"[Caliper]\";\n }\n\n setEnabled(enabled: boolean) {\n isGlobalEnabled = enabled;\n }\n\n debug(...args: any[]) {\n if (typeof __DEV__ !== \"undefined\" && !__DEV__) return;\n if (!isGlobalEnabled) return;\n console.debug(this.prefix, ...args);\n }\n\n info(...args: any[]) {\n if (typeof __DEV__ !== \"undefined\" && !__DEV__) return;\n if (!isGlobalEnabled) return;\n console.info(this.prefix, ...args);\n }\n\n warn(...args: any[]) {\n if (!isGlobalEnabled) return;\n console.warn(this.prefix, ...args);\n }\n\n error(...args: any[]) {\n if (!isGlobalEnabled) return;\n console.error(this.prefix, ...args);\n }\n\n log(...args: any[]) {\n if (typeof __DEV__ !== \"undefined\" && !__DEV__) return;\n if (!isGlobalEnabled) return;\n console.log(this.prefix, ...args);\n }\n}\n\n/**\n * Global logger instance used by Caliper core.\n */\nexport const logger = new Logger({ prefix: \"Caliper\" });\n\n/**\n * Creates a specialized logger for a specific module or component.\n * All loggers created this way share the same global enabled state.\n *\n * @param prefix - The prefix to prepended to log messages (e.g., 'agent-bridge').\n * @returns A new Logger instance.\n */\nexport function createLogger(prefix: string) {\n return new Logger({ prefix: `Caliper:${prefix}` });\n}\n\n/**\n * Formats a DOMRect into a human-readable string for logging.\n *\n * @param rect - The rect to format.\n * @returns A formatted string or \"null\".\n */\nexport function formatRect(rect: DOMRect | null): string {\n if (!rect) return \"null\";\n return `{L:${rect.left.toFixed(1)}, T:${rect.top.toFixed(1)}, W:${rect.width}, H:${rect.height}}`;\n}\n\n/**\n * Formats an Element into a descriptive string including its tag name,\n * classes, and a snippet of its text content.\n *\n * @param element - The element to format.\n * @returns A formatted string or \"null\".\n */\nexport function formatElement(element: Element | null): string {\n if (!element) return \"null\";\n const text = (element.textContent || \"\").trim().slice(0, 20);\n return `${element.tagName}${element.className ? \".\" + element.className : \"\"} [\"${text}${text.length >= 20 ? \"...\" : \"\"}\"]`;\n}\n","export const getNormalizedModifiers = (e: MouseEvent | PointerEvent | KeyboardEvent) => {\n const isAltGraph = e.getModifierState?.(\"AltGraph\");\n return {\n Control: isAltGraph ? false : e.ctrlKey,\n Meta: e.metaKey,\n Alt: isAltGraph || e.altKey,\n Shift: e.shiftKey,\n };\n};\n\n/**\n * Resolves the logical key name for a KeyboardEvent, accounting for\n * platform-specific quirks (like Windows AltGraph behavior).\n *\n * @param e - The keyboard event to analyze.\n * @returns The normalized key name.\n */\nexport const getLogicalKey = (e: KeyboardEvent) => {\n // Ignore fake Control events sent by AltGraph on Windows\n if (e.key === \"Control\" && e.getModifierState?.(\"AltGraph\")) return \"\";\n if (e.key === \"AltGraph\") return \"Alt\";\n return e.key;\n};\n\n/**\n * Checks if the logical key of an event matches a target key string.\n *\n * @param target - The key name to match against.\n * @param e - The keyboard event.\n * @returns True if the key matches.\n */\nexport const isKeyMatch = (target: string, e: KeyboardEvent) => {\n return getLogicalKey(e) === target;\n};\n","// src/index.ts\nimport { render } from \"solid-js/web\";\n\n// src/root.tsx\nimport { createComponent as _$createComponent9 } from \"solid-js/web\";\nimport { onMount as onMount2, onCleanup as onCleanup3, createSignal as createSignal5, createEffect as createEffect3, untrack, createMemo as createMemo8 } from \"solid-js\";\nimport { createMeasurementSystem, createSelectionSystem, createSuppressionDelegate, getTopElementAtPoint, getLiveLineValue, getLiveGeometry as getLiveGeometry6, getNormalizedModifiers, getLogicalKey, isKeyMatch, RESIZE_THROTTLE_MS, buildSelectorInfo } from \"@caliper/core\";\n\n// src/ui/utils/render-overlay.tsx\nimport { template as _$template9 } from \"solid-js/web\";\nimport { insert as _$insert7 } from \"solid-js/web\";\nimport { className as _$className7 } from \"solid-js/web\";\nimport { memo as _$memo5 } from \"solid-js/web\";\nimport { createComponent as _$createComponent8 } from \"solid-js/web\";\nimport { Show as Show8, createMemo as createMemo7 } from \"solid-js\";\nimport { Portal as Portal3 } from \"solid-js/web\";\nimport { getLiveGeometry as getLiveGeometry5, getTotalScrollDelta, getCommonVisibilityWindow, getOverlayRoot as getOverlayRoot3 } from \"@caliper/core\";\n\n// src/ui/utils/render-lines-with-calculator.tsx\nimport { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { createSignal, createMemo, For, Show } from \"solid-js\";\nimport { getLivePoint, clampPointToGeometry, generateId } from \"@caliper/core\";\n\n// src/css/styles.ts\nimport { DEFAULT_THEME, CALIPER_PREFIX } from \"@caliper/core\";\nvar OVERLAY_STYLES = `\n:root {\n interpolate-size: allow-keywords;\n --caliper-primary: ${DEFAULT_THEME.primary};\n --caliper-secondary: ${DEFAULT_THEME.secondary};\n --caliper-calc-bg: ${DEFAULT_THEME.calcBg};\n --caliper-calc-shadow: ${DEFAULT_THEME.calcShadow};\n --caliper-calc-op-highlight: ${DEFAULT_THEME.calcOpHighlight};\n --caliper-calc-text: ${DEFAULT_THEME.calcText};\n --caliper-text: ${DEFAULT_THEME.text};\n --caliper-projection: ${DEFAULT_THEME.projection};\n --caliper-ruler: ${DEFAULT_THEME.ruler};\n --caliper-success: rgba(74, 222, 128, 1);\n --caliper-font-sans: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n}\n\n#caliper-overlay-root {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n overflow: visible;\n}\n\n.${CALIPER_PREFIX}viewport-fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n overflow: visible;\n}\n\n.${CALIPER_PREFIX}overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 999999;\n}\n\n.${CALIPER_PREFIX}ruler-layer {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 1000000;\n touch-action: none;\n}\n\n.${CALIPER_PREFIX}alt-mode * {\n pointer-events: none !important;\n}\n\n.${CALIPER_PREFIX}line {\n stroke: var(--caliper-secondary);\n stroke-width: 1px;\n pointer-events: auto;\n cursor: pointer;\n}\n\n.${CALIPER_PREFIX}projection-line {\n stroke: var(--caliper-projection);\n stroke-width: 2px;\n stroke-dasharray: 4 2;\n pointer-events: auto;\n}\n\n.${CALIPER_PREFIX}label {\n position: fixed;\n pointer-events: auto;\n cursor: pointer;\n background: var(--caliper-secondary);\n color: var(--caliper-text);\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 11px;\n font-weight: 500;\n font-family: var(--caliper-font-sans);\n white-space: nowrap;\n z-index: 1000000;\n will-change: transform;\n}\n\n.${CALIPER_PREFIX}projection-label {\n background: var(--caliper-projection);\n z-index: 1000001;\n}\n\n.${CALIPER_PREFIX}selection-label {\n position: fixed;\n pointer-events: none;\n background: var(--caliper-primary);\n color: white;\n padding: 2px 6px;\n border-radius: 2px;\n font-size: 10px;\n font-weight: 600;\n font-family: var(--caliper-font-sans);\n white-space: nowrap;\n z-index: 1000001;\n display: flex;\n align-items: center;\n justify-content: center;\n will-change: transform, opacity, background-color;\n transition: opacity 0.2s ease-in-out, background-color 0.2s ease-in-out;\n}\n\n.${CALIPER_PREFIX}selection-label-success {\n background: var(--caliper-success);\n}\n\n.${CALIPER_PREFIX}selection-label-content {\n display: flex;\n align-items: center;\n justify-content: center;\n animation: caliper-fade-in 0.15s forwards ease-in-out;\n}\n\n@keyframes caliper-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes caliper-fade-out {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n\n.${CALIPER_PREFIX}boundary-box {\n position: fixed;\n pointer-events: none;\n box-sizing: border-box;\n touch-action: none;\n}\n\n.${CALIPER_PREFIX}boundary-box-selected {\n border: 2px solid var(--caliper-primary);\n background: transparent;\n z-index: 999998;\n will-change: transform, width, height;\n}\n\n.${CALIPER_PREFIX}boundary-box-secondary {\n border: 1px dashed var(--caliper-secondary-50);\n background: var(--caliper-secondary-05);\n z-index: 999997;\n}\n\n.${CALIPER_PREFIX}calculator, .${CALIPER_PREFIX}projection-input {\n position: fixed;\n pointer-events: auto;\n background: var(--caliper-calc-bg);\n color: var(--caliper-calc-text);\n padding: 0 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n font-family: var(--caliper-font-sans);\n z-index: 1000005;\n box-shadow: 0 4px 12px var(--caliper-calc-shadow);\n display: flex;\n align-items: center;\n gap: 6px;\n height: 28px;\n user-select: none;\n overflow: hidden;\n will-change: transform, width;\n transform-origin: center;\n width: fit-content;\n min-width: 32px;\n white-space: nowrap;\n transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.2s, box-shadow 0.2s, background-color 0.2s;\n border: 1px solid transparent;\n}\n\n.${CALIPER_PREFIX}calculator-focused, .${CALIPER_PREFIX}projection-input-focused {\n border-color: var(--caliper-primary);\n box-shadow: 0 0 0 2px var(--caliper-primary-50), 0 4px 12px var(--caliper-calc-shadow);\n background: var(--caliper-calc-bg);\n}\n\n.${CALIPER_PREFIX}projection-input {\n border-left: 3px solid var(--caliper-projection);\n}\n\n.${CALIPER_PREFIX}projection-direction-tag {\n background: var(--caliper-projection-light);\n color: var(--caliper-projection);\n font-size: 10px;\n padding: 2px 4px;\n border-radius: 2px;\n text-transform: uppercase;\n font-weight: 700;\n}\n\n.${CALIPER_PREFIX}calculator-base {\n opacity: 0.7;\n transition: opacity 0.2s;\n}\n\n.${CALIPER_PREFIX}calculator-base-active {\n opacity: 1;\n}\n\n.${CALIPER_PREFIX}calculator-operation {\n background-color: var(--caliper-calc-op-highlight);\n padding: 4px;\n border-radius: 2px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n animation: pulse 0.3s ease-in-out;\n}\n\n.${CALIPER_PREFIX}calculator-input, .${CALIPER_PREFIX}projection-current-value {\n min-width: 8px;\n text-align: right;\n transition: all 0.2s;\n}\n\n.${CALIPER_PREFIX}projection-current-value {\n color: var(--caliper-projection);\n font-weight: bold;\n}\n\n.${CALIPER_PREFIX}calculator-result {\n font-weight: bold;\n color: var(--caliper-primary);\n animation: slideIn 0.3s ease-out;\n}\n\n@keyframes pulse {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(-10px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slideOut {\n from {\n opacity: 1;\n transform: translateX(0);\n }\n to {\n opacity: 0;\n transform: translateX(10px);\n }\n}\n\n.${CALIPER_PREFIX}line-clickable {\n pointer-events: auto;\n cursor: pointer;\n transition: stroke-width 0.2s;\n}\n\n.${CALIPER_PREFIX}line-hit-target {\n stroke: transparent;\n stroke-width: 12px;\n pointer-events: auto;\n cursor: pointer;\n}\n\n\n.${CALIPER_PREFIX}line-clickable:hover {\n}\n\n.${CALIPER_PREFIX}ruler-line-visual {\n transition: transform 0.1s ease-out;\n will-change: transform;\n position: fixed;\n background-color: var(--caliper-ruler, var(--caliper-primary, rgba(24, 160, 251, 1)));\n z-index: 1000000;\n}\n\n.${CALIPER_PREFIX}ruler-label {\n background: var(--caliper-primary);\n border: 1px solid rgba(255, 255, 255, 0.2);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n position: fixed;\n z-index: 1000002;\n}\n\n.${CALIPER_PREFIX}ruler-bridge-label {\n position: fixed;\n background: var(--caliper-secondary);\n z-index: 1000003;\n color: white;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n`;\nvar PREFIX = CALIPER_PREFIX;\n\n// src/ui/utils/render-lines-with-calculator.tsx\nvar _tmpl$ = /* @__PURE__ */ _$template(`<svg><defs><clipPath><rect></svg>`, false, true, false);\nvar _tmpl$2 = /* @__PURE__ */ _$template(`<svg style=z-index:999999><g>`);\nvar _tmpl$3 = /* @__PURE__ */ _$template(`<svg><g data-caliper-ignore style=pointer-events:auto;cursor:pointer><line></line><line></svg>`, false, true, false);\nfunction MeasurementLinesWithCalculator(props) {\n const [hoveredLine, setHoveredLine] = createSignal(null);\n const hasClipping = () => isFinite(props.data.common.minX);\n const clipPathId = createSignal(generateId(\"lines-clip\"))[0]();\n const vCommon = () => ({\n minX: props.data.common.minX - props.viewport.scrollX,\n maxX: props.data.common.maxX - props.viewport.scrollX,\n minY: props.data.common.minY - props.viewport.scrollY,\n maxY: props.data.common.maxY - props.viewport.scrollY\n });\n return (() => {\n var _el$ = _tmpl$2(), _el$5 = _el$.firstChild;\n _$setAttribute(_el$, \"class\", `${PREFIX}viewport-fixed`);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return hasClipping();\n },\n get children() {\n var _el$2 = _tmpl$(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;\n _$setAttribute(_el$3, \"id\", clipPathId);\n _$effect((_p$) => {\n var _v$ = vCommon().minX, _v$2 = vCommon().minY, _v$3 = Math.max(0, vCommon().maxX - vCommon().minX), _v$4 = Math.max(0, vCommon().maxY - vCommon().minY);\n _v$ !== _p$.e && _$setAttribute(_el$4, \"x\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute(_el$4, \"y\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setAttribute(_el$4, \"width\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute(_el$4, \"height\", _p$.o = _v$4);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0\n });\n return _el$2;\n }\n }), _el$5);\n _$insert(_el$5, _$createComponent(For, {\n get each() {\n return props.lines;\n },\n children: (line, index) => {\n const lineData = createMemo(() => {\n const sRaw = getLivePoint(line.start, line.startSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n const eRaw = getLivePoint(line.end, line.endSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n let start = sRaw;\n let end = eRaw;\n if (!props.data.isSameContext) {\n start = clampPointToGeometry(sRaw, line.startSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n const eRawClamped = clampPointToGeometry(eRaw, line.endSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n end = {\n ...eRawClamped\n };\n }\n if (line.type === \"top\" || line.type === \"bottom\") {\n if (line.startSync === \"primary\") end.x = start.x;\n else start.x = end.x;\n } else if (line.type === \"left\" || line.type === \"right\") {\n if (line.startSync === \"primary\") end.y = start.y;\n else start.y = end.y;\n }\n let liveValue = 0;\n if (line.type === \"top\" || line.type === \"bottom\") {\n liveValue = Math.abs(start.y - end.y);\n } else if (line.type === \"left\" || line.type === \"right\") {\n liveValue = Math.abs(start.x - end.x);\n } else {\n liveValue = Math.sqrt(Math.pow(start.x - end.x, 2) + Math.pow(start.y - end.y, 2));\n }\n return {\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n liveValue\n };\n });\n const isHovered = () => hoveredLine() === index();\n return (() => {\n var _el$6 = _tmpl$3(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;\n _el$6.$$click = (e) => {\n e.stopPropagation();\n const data = lineData();\n props.onLineClick?.(line, data.liveValue);\n };\n _el$6.addEventListener(\"mouseleave\", () => setHoveredLine(null));\n _el$6.addEventListener(\"mouseenter\", () => setHoveredLine(index()));\n _$setAttribute(_el$7, \"class\", `${PREFIX}line-hit-target`);\n _$setAttribute(_el$8, \"class\", `${PREFIX}line ${PREFIX}line-clickable`);\n _$effect((_p$) => {\n var _v$5 = lineData().x1, _v$6 = lineData().y1, _v$7 = lineData().x2, _v$8 = lineData().y2, _v$9 = lineData().x1, _v$0 = lineData().y1, _v$1 = lineData().x2, _v$10 = lineData().y2, _v$11 = isHovered() ? 2 : 1;\n _v$5 !== _p$.e && _$setAttribute(_el$7, \"x1\", _p$.e = _v$5);\n _v$6 !== _p$.t && _$setAttribute(_el$7, \"y1\", _p$.t = _v$6);\n _v$7 !== _p$.a && _$setAttribute(_el$7, \"x2\", _p$.a = _v$7);\n _v$8 !== _p$.o && _$setAttribute(_el$7, \"y2\", _p$.o = _v$8);\n _v$9 !== _p$.i && _$setAttribute(_el$8, \"x1\", _p$.i = _v$9);\n _v$0 !== _p$.n && _$setAttribute(_el$8, \"y1\", _p$.n = _v$0);\n _v$1 !== _p$.s && _$setAttribute(_el$8, \"x2\", _p$.s = _v$1);\n _v$10 !== _p$.h && _$setAttribute(_el$8, \"y2\", _p$.h = _v$10);\n _v$11 !== _p$.r && _$setAttribute(_el$8, \"stroke-width\", _p$.r = _v$11);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0,\n s: void 0,\n h: void 0,\n r: void 0\n });\n return _el$6;\n })();\n }\n }));\n _$effect(() => _$setAttribute(_el$5, \"clip-path\", hasClipping() ? `url(#${clipPathId})` : void 0));\n return _el$;\n })();\n}\n_$delegateEvents([\"click\"]);\n\n// src/ui/utils/render-labels.tsx\nimport { template as _$template2 } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents2 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty } from \"solid-js/web\";\nimport { effect as _$effect2 } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { insert as _$insert2 } from \"solid-js/web\";\nimport { createComponent as _$createComponent2 } from \"solid-js/web\";\nimport { className as _$className } from \"solid-js/web\";\nimport { For as For2, Show as Show2, createMemo as createMemo2 } from \"solid-js\";\nimport { getLivePoint as getLivePoint2, clampPointToGeometry as clampPointToGeometry2 } from \"@caliper/core\";\nvar _tmpl$4 = /* @__PURE__ */ _$template2(`<div style=z-index:1000000>`);\nvar _tmpl$22 = /* @__PURE__ */ _$template2(`<div data-caliper-ignore style=left:0;top:0>`);\nfunction MeasurementLabels(props) {\n const margin = 16;\n return (() => {\n var _el$ = _tmpl$4();\n _$className(_el$, `${PREFIX}viewport-fixed`);\n _$insert2(_el$, _$createComponent2(For2, {\n get each() {\n return props.lines;\n },\n children: (line) => {\n const position = createMemo2(() => {\n props.viewport.version;\n const sRaw = getLivePoint2(line.start, line.startSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n const eRaw = getLivePoint2(line.end, line.endSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n const dxRaw = Math.abs(sRaw.x - eRaw.x);\n const dyRaw = Math.abs(sRaw.y - eRaw.y);\n let liveValue = 0;\n if (line.type === \"top\" || line.type === \"bottom\") {\n liveValue = dyRaw;\n } else if (line.type === \"left\" || line.type === \"right\") {\n liveValue = dxRaw;\n } else {\n liveValue = Math.sqrt(dxRaw * dxRaw + dyRaw * dyRaw);\n }\n let start = sRaw;\n let end = eRaw;\n if (!props.data.isSameContext) {\n start = clampPointToGeometry2(sRaw, line.startSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n const eClamped = clampPointToGeometry2(eRaw, line.endSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n end = {\n ...eClamped\n };\n }\n if (line.type === \"top\" || line.type === \"bottom\") {\n if (line.startSync === \"primary\") end.x = start.x;\n else start.x = end.x;\n } else if (line.type === \"left\" || line.type === \"right\") {\n if (line.startSync === \"primary\") end.y = start.y;\n else start.y = end.y;\n }\n const naturalX = (start.x + end.x) / 2;\n const naturalY = (start.y + end.y) / 2;\n const vpMinX = 0;\n const vpMaxX = props.viewport.width;\n const vpMinY = 0;\n const vpMaxY = props.viewport.height;\n const common = props.data.common;\n const hasCommon = isFinite(common.minX);\n const cMinX = hasCommon ? Math.max(vpMinX, common.minX - props.viewport.scrollX) : vpMinX;\n const cMaxX = hasCommon ? Math.min(vpMaxX, common.maxX - props.viewport.scrollX) : vpMaxX;\n const cMinY = hasCommon ? Math.max(vpMinY, common.minY - props.viewport.scrollY) : vpMinY;\n const cMaxY = hasCommon ? Math.min(vpMaxY, common.maxY - props.viewport.scrollY) : vpMaxY;\n const lineMinX = Math.min(start.x, end.x);\n const lineMaxX = Math.max(start.x, end.x);\n const lineMinY = Math.min(start.y, end.y);\n const lineMaxY = Math.max(start.y, end.y);\n const isFullyHidden = lineMaxY < cMinY || lineMinY > cMaxY || lineMaxX < cMinX || lineMinX > cMaxX;\n if (isFullyHidden) return {\n x: 0,\n y: 0,\n isHidden: true,\n value: 0\n };\n const visibleLineMinX = Math.max(lineMinX, cMinX);\n const visibleLineMaxX = Math.min(lineMaxX, cMaxX);\n const visibleLineMinY = Math.max(lineMinY, cMinY);\n const visibleLineMaxY = Math.min(lineMaxY, cMaxY);\n const centerX = (visibleLineMinX + visibleLineMaxX) / 2;\n const centerY = (visibleLineMinY + visibleLineMaxY) / 2;\n let targetX = naturalX;\n let targetY = naturalY;\n if (Math.abs(start.x - end.x) < 1) {\n targetY = centerY;\n targetX = Math.max(cMinX + margin, Math.min(cMaxX - margin, targetX));\n } else if (Math.abs(start.y - end.y) < 1) {\n targetX = centerX;\n targetY = Math.max(cMinY + margin, Math.min(cMaxY - margin, targetY));\n } else {\n targetX = Math.max(cMinX + margin, Math.min(cMaxX - margin, naturalX));\n targetY = Math.max(cMinY + margin, Math.min(cMaxY - margin, naturalY));\n }\n return {\n x: targetX,\n y: targetY,\n isHidden: false,\n value: liveValue\n };\n });\n return _$createComponent2(Show2, {\n get when() {\n return _$memo(() => !!position())() && !position().isHidden;\n },\n get children() {\n var _el$2 = _tmpl$22();\n _el$2.$$click = (e) => {\n e.stopPropagation();\n const pos = position();\n if (pos && !pos.isHidden) {\n props.onLineClick?.(line, pos.value);\n }\n };\n _$className(_el$2, `${PREFIX}label`);\n _$insert2(_el$2, () => Math.round(position().value * 100) / 100);\n _$effect2((_$p) => _$setStyleProperty(_el$2, \"transform\", `translate3d(${position().x}px, ${position().y}px, 0) translate(-50%, -50%)`));\n return _el$2;\n }\n });\n }\n }));\n return _el$;\n })();\n}\n_$delegateEvents2([\"click\"]);\n\n// src/ui/utils/calculator.tsx\nimport { template as _$template4 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty2 } from \"solid-js/web\";\nimport { effect as _$effect4 } from \"solid-js/web\";\nimport { className as _$className2 } from \"solid-js/web\";\nimport { memo as _$memo2 } from \"solid-js/web\";\nimport { createComponent as _$createComponent3 } from \"solid-js/web\";\nimport { insert as _$insert3 } from \"solid-js/web\";\nimport { Show as Show3 } from \"solid-js\";\n\n// src/ui/utils/icons.tsx\nimport { template as _$template3 } from \"solid-js/web\";\nimport { style as _$style } from \"solid-js/web\";\nimport { effect as _$effect3 } from \"solid-js/web\";\nvar _tmpl$5 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=12 y1=5 x2=12 y2=19></line><line x1=5 y1=12 x2=19 y2=12>`);\nvar _tmpl$23 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=5 y1=12 x2=19 y2=12>`);\nvar _tmpl$32 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=18 y1=6 x2=6 y2=18></line><line x1=6 y1=6 x2=18 y2=18>`);\nvar _tmpl$42 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=19 y1=5 x2=5 y2=19>`);\nvar iconStyle = {\n width: \"12px\",\n height: \"12px\",\n \"stroke-width\": \"2.5\",\n stroke: \"currentColor\",\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n display: \"block\"\n};\nvar Icons = {\n \"+\": () => (() => {\n var _el$ = _tmpl$5();\n _$effect3((_$p) => _$style(_el$, iconStyle, _$p));\n return _el$;\n })(),\n \"-\": () => (() => {\n var _el$2 = _tmpl$23();\n _$effect3((_$p) => _$style(_el$2, iconStyle, _$p));\n return _el$2;\n })(),\n \"*\": () => (() => {\n var _el$3 = _tmpl$32();\n _$effect3((_$p) => _$style(_el$3, iconStyle, _$p));\n return _el$3;\n })(),\n \"/\": () => (() => {\n var _el$4 = _tmpl$42();\n _$effect3((_$p) => _$style(_el$4, iconStyle, _$p));\n return _el$4;\n })()\n};\n\n// src/ui/utils/calculator.tsx\nvar _tmpl$6 = /* @__PURE__ */ _$template4(`<span>`);\nvar _tmpl$24 = /* @__PURE__ */ _$template4(`<span>= `);\nvar _tmpl$33 = /* @__PURE__ */ _$template4(`<div data-caliper-ignore style=top:0;left:0><span>`);\nfunction Calculator(props) {\n const formatValue = (value) => {\n return Math.round(value * 100) / 100 + \"\";\n };\n return _$createComponent3(Show3, {\n get when() {\n return props.state.isActive;\n },\n get children() {\n var _el$ = _tmpl$33(), _el$2 = _el$.firstChild;\n _$insert3(_el$2, () => formatValue(props.state.baseValue));\n _$insert3(_el$, _$createComponent3(Show3, {\n keyed: true,\n get when() {\n return props.state.operation;\n },\n children: (operation) => {\n const Icon = Icons[operation];\n return (() => {\n var _el$6 = _tmpl$6();\n _$className2(_el$6, `${PREFIX}calculator-operation`);\n _$insert3(_el$6, _$createComponent3(Show3, {\n when: Icon,\n fallback: operation,\n get children() {\n return _$createComponent3(Icon, {});\n }\n }));\n return _el$6;\n })();\n }\n }), null);\n _$insert3(_el$, _$createComponent3(Show3, {\n get when() {\n return props.state.inputValue || props.state.operation;\n },\n get children() {\n var _el$3 = _tmpl$6();\n _$className2(_el$3, `${PREFIX}calculator-input`);\n _$insert3(_el$3, () => props.state.inputValue || \"0\");\n return _el$3;\n }\n }), null);\n _$insert3(_el$, _$createComponent3(Show3, {\n get when() {\n return props.state.result !== null;\n },\n get children() {\n var _el$4 = _tmpl$24(), _el$5 = _el$4.firstChild;\n _$className2(_el$4, `${PREFIX}calculator-result`);\n _$insert3(_el$4, (() => {\n var _c$ = _$memo2(() => props.state.result !== null);\n return () => _c$() ? formatValue(props.state.result) : \"\";\n })(), null);\n return _el$4;\n }\n }), null);\n _$effect4((_p$) => {\n var _v$ = `${PREFIX}calculator ${props.isFocused ? `${PREFIX}calculator-focused` : \"\"}`, _v$2 = `translate3d(${props.position.x + 10}px, ${props.position.y + 10}px, 0)`, _v$3 = `${PREFIX}calculator-base ${props.state.operation ? `${PREFIX}calculator-base-active` : \"\"}`;\n _v$ !== _p$.e && _$className2(_el$, _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty2(_el$, \"transform\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$className2(_el$2, _p$.a = _v$3);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0\n });\n return _el$;\n }\n });\n}\n\n// src/ui/utils/render-boundary-boxes.tsx\nimport { template as _$template5 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty3 } from \"solid-js/web\";\nimport { effect as _$effect5 } from \"solid-js/web\";\nimport { className as _$className3 } from \"solid-js/web\";\nimport { createComponent as _$createComponent4 } from \"solid-js/web\";\nimport { createEffect, createSignal as createSignal2, on, onCleanup, Show as Show4, createMemo as createMemo3 } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { lerpRect, getLiveGeometry, getOverlayRoot } from \"@caliper/core\";\nvar _tmpl$7 = /* @__PURE__ */ _$template5(`<div style=left:0;top:0>`);\nfunction BoundaryBoxes(props) {\n const [anchor, setAnchor] = createSignal2(null);\n const [target, setTarget] = createSignal2(null);\n let lastElement = null;\n let rafId = null;\n const isRectSame = (a, b, threshold = 0.1) => {\n if (!a || !b) return false;\n return Math.abs(a.left - b.left) < threshold && Math.abs(a.top - b.top) < threshold && Math.abs(a.width - b.width) < threshold && Math.abs(a.height - b.height) < threshold;\n };\n const lerpTo = (current, targetGeo, lerpFactor) => {\n if (!targetGeo) return null;\n if (!current) return {\n ...targetGeo\n };\n const next = lerpRect(current, targetGeo, lerpFactor);\n if (isRectSame(next, targetGeo, 0.1)) {\n return {\n ...targetGeo\n };\n }\n return {\n ...targetGeo,\n left: next.left,\n top: next.top,\n width: next.width,\n height: next.height\n };\n };\n const liveSelectionTarget = createMemo3(() => {\n props.viewport.version;\n return getLiveGeometry(props.metadata.rect, props.metadata.scrollHierarchy, props.metadata.position, props.metadata.stickyConfig, props.metadata.initialWindowX, props.metadata.initialWindowY);\n });\n const liveSecondaryTarget = createMemo3(() => {\n props.viewport.version;\n const res = props.result;\n if (!(props.isActivatePressed || props.isFrozen) || !res) return null;\n return getLiveGeometry(res.secondary, res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY);\n });\n createEffect(on([liveSelectionTarget, liveSecondaryTarget, () => props.animation.lerpFactor, () => props.metadata.element], ([selection, secondary, factor, element]) => {\n if (!selection) {\n setAnchor(null);\n setTarget(null);\n lastElement = null;\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n return;\n }\n const isNewElement = lastElement !== element;\n const useLerp = props.animation.enabled !== false;\n setTarget(secondary);\n if (isNewElement) {\n lastElement = element;\n if (useLerp) {\n const animate = () => {\n const currentAnchor = anchor();\n const nextAnchor = lerpTo(currentAnchor, selection, factor);\n setAnchor(nextAnchor);\n if (selection && !isRectSame(nextAnchor, selection, 0.05)) {\n rafId = requestAnimationFrame(animate);\n } else {\n rafId = null;\n }\n };\n if (rafId) cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(animate);\n } else {\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n setAnchor(selection);\n }\n } else {\n if (!rafId) {\n setAnchor(selection);\n }\n }\n }));\n onCleanup(() => {\n if (rafId) cancelAnimationFrame(rafId);\n });\n return [_$createComponent4(Show4, {\n get when() {\n return anchor();\n },\n children: (current) => _$createComponent4(Portal, {\n get mount() {\n return getOverlayRoot();\n },\n get children() {\n var _el$ = _tmpl$7();\n _$className3(_el$, `${PREFIX}boundary-box ${PREFIX}boundary-box-selected`);\n _$effect5((_p$) => {\n var _v$ = `${current().width}px`, _v$2 = `${current().height}px`, _v$3 = `translate3d(${current().left - props.viewport.scrollX}px, ${current().top - props.viewport.scrollY}px, 0)`, _v$4 = current().clipPath;\n _v$ !== _p$.e && _$setStyleProperty3(_el$, \"width\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty3(_el$, \"height\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setStyleProperty3(_el$, \"transform\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setStyleProperty3(_el$, \"clip-path\", _p$.o = _v$4);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0\n });\n return _el$;\n }\n })\n }), _$createComponent4(Show4, {\n get when() {\n return target();\n },\n children: (current) => _$createComponent4(Portal, {\n get mount() {\n return getOverlayRoot();\n },\n get children() {\n var _el$2 = _tmpl$7();\n _$className3(_el$2, `${PREFIX}boundary-box ${PREFIX}boundary-box-secondary`);\n _$effect5((_p$) => {\n var _v$5 = `${current().width}px`, _v$6 = `${current().height}px`, _v$7 = `translate3d(${current().left - props.viewport.scrollX}px, ${current().top - props.viewport.scrollY}px, 0)`, _v$8 = current().clipPath;\n _v$5 !== _p$.e && _$setStyleProperty3(_el$2, \"width\", _p$.e = _v$5);\n _v$6 !== _p$.t && _$setStyleProperty3(_el$2, \"height\", _p$.t = _v$6);\n _v$7 !== _p$.a && _$setStyleProperty3(_el$2, \"transform\", _p$.a = _v$7);\n _v$8 !== _p$.o && _$setStyleProperty3(_el$2, \"clip-path\", _p$.o = _v$8);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0\n });\n return _el$2;\n }\n })\n })];\n}\n\n// src/ui/utils/render-selection-label.tsx\nimport { template as _$template6 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty4 } from \"solid-js/web\";\nimport { effect as _$effect6 } from \"solid-js/web\";\nimport { insert as _$insert4 } from \"solid-js/web\";\nimport { className as _$className4 } from \"solid-js/web\";\nimport { createComponent as _$createComponent5 } from \"solid-js/web\";\nimport { Show as Show5, createMemo as createMemo4 } from \"solid-js\";\nimport { getLiveGeometry as getLiveGeometry2, getOverlayRoot as getOverlayRoot2 } from \"@caliper/core\";\nimport { Portal as Portal2 } from \"solid-js/web\";\nvar _tmpl$8 = /* @__PURE__ */ _$template6(`<span>Copied!`);\nvar _tmpl$25 = /* @__PURE__ */ _$template6(`<div style=left:0;top:0>`);\nvar _tmpl$34 = /* @__PURE__ */ _$template6(`<span> \\xD7 `);\nfunction SelectionLabel(props) {\n const margin = 16;\n const liveGeo = createMemo4(() => {\n props.viewport.version;\n return getLiveGeometry2(props.metadata.rect, props.metadata.scrollHierarchy, props.metadata.position, props.metadata.stickyConfig, props.metadata.initialWindowX, props.metadata.initialWindowY);\n });\n const labelData = createMemo4(() => {\n const geo = liveGeo();\n if (!geo || geo.isHidden) return null;\n const vLeft = props.viewport.scrollX;\n const vRight = props.viewport.scrollX + props.viewport.width;\n const vBottom = props.viewport.scrollY + props.viewport.height;\n const cLeft = geo.visibleMinX;\n const cRight = geo.visibleMaxX;\n const cBottom = geo.visibleMaxY;\n const effectiveMinX = Math.max(vLeft, cLeft);\n const effectiveMaxX = Math.min(vRight, cRight);\n const effectiveMaxY = Math.min(vBottom, cBottom);\n const visibleLeft = Math.max(geo.left, effectiveMinX + margin);\n const visibleRight = Math.min(geo.left + geo.width, effectiveMaxX - margin);\n let snapX = (visibleLeft + visibleRight) / 2;\n let snapY = geo.top + geo.height + 8;\n if (snapY > effectiveMaxY - margin - 24) {\n if (geo.top < effectiveMaxY - margin) {\n snapY = effectiveMaxY - margin - 24;\n }\n }\n snapY = Math.max(snapY, geo.top + margin);\n return {\n width: Math.round(geo.width),\n height: Math.round(geo.height),\n x: snapX,\n y: snapY\n };\n });\n return _$createComponent5(Show5, {\n get when() {\n return labelData();\n },\n children: (data) => _$createComponent5(Portal2, {\n get mount() {\n return getOverlayRoot2();\n },\n get children() {\n var _el$ = _tmpl$25();\n _$insert4(_el$, _$createComponent5(Show5, {\n get when() {\n return props.isCopied;\n },\n get fallback() {\n return (() => {\n var _el$3 = _tmpl$34(), _el$4 = _el$3.firstChild;\n _$className4(_el$3, `${PREFIX}selection-label-content`);\n _$insert4(_el$3, () => data().width, _el$4);\n _$insert4(_el$3, () => data().height, null);\n return _el$3;\n })();\n },\n get children() {\n var _el$2 = _tmpl$8();\n _$className4(_el$2, `${PREFIX}selection-label-content`);\n return _el$2;\n }\n }));\n _$effect6((_p$) => {\n var _v$ = `${PREFIX}selection-label ${props.isCopied ? `${PREFIX}selection-label-success` : \"\"}`, _v$2 = `translate3d(${data().x - props.viewport.scrollX}px, ${data().y - props.viewport.scrollY}px, 0) translate(-50%, 0)`, _v$3 = props.isActivatePressed ? 0 : 1;\n _v$ !== _p$.e && _$className4(_el$, _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty4(_el$, \"transform\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setStyleProperty4(_el$, \"opacity\", _p$.a = _v$3);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0\n });\n return _el$;\n }\n })\n });\n}\n\n// src/ui/utils/projection.tsx\nimport { template as _$template7 } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents3 } from \"solid-js/web\";\nimport { style as _$style2 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty5 } from \"solid-js/web\";\nimport { insert as _$insert5 } from \"solid-js/web\";\nimport { className as _$className5 } from \"solid-js/web\";\nimport { effect as _$effect7 } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute2 } from \"solid-js/web\";\nimport { createComponent as _$createComponent6 } from \"solid-js/web\";\nimport { memo as _$memo3 } from \"solid-js/web\";\nimport { Show as Show6, createMemo as createMemo5, createSignal as createSignal3 } from \"solid-js\";\nimport { getLiveGeometry as getLiveGeometry3 } from \"@caliper/core\";\nvar _tmpl$9 = /* @__PURE__ */ _$template7(`<svg style=z-index:1000000><line data-caliper-ignore stroke=transparent stroke-width=15></line><line>`);\nvar _tmpl$26 = /* @__PURE__ */ _$template7(`<div data-caliper-ignore style=top:0;left:0>`);\nvar _tmpl$35 = /* @__PURE__ */ _$template7(`<div data-caliper-ignore><span></span><span>`);\nfunction ProjectionOverlay(props) {\n return _$createComponent6(Show6, {\n get when() {\n return _$memo3(() => !!props.metadata().element)() && props.projectionState().direction;\n },\n get children() {\n return [_$createComponent6(ProjectionLines, {\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.metadata;\n },\n get viewport() {\n return props.viewport;\n },\n get onLineClick() {\n return props.onLineClick;\n }\n }), _$createComponent6(ProjectionInput, {\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.metadata;\n },\n get viewport() {\n return props.viewport;\n },\n get isFocused() {\n return props.isFocused;\n }\n })];\n }\n });\n}\nfunction ProjectionLines(props) {\n const lineData = createMemo5(() => {\n const vp = props.viewport();\n vp.version;\n const state = props.projectionState();\n const value = parseFloat(state.value) || 0;\n const metadata = props.metadata();\n const live = getLiveGeometry3(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n if (!live) return null;\n let x1 = 0, y1 = 0, x2 = 0, y2 = 0;\n let labelX = 0, labelY = 0;\n let visibleY1 = 0, visibleY2 = 0, visibleX1 = 0, visibleX2 = 0;\n const docWidth = document.documentElement.scrollWidth;\n const docHeight = document.documentElement.scrollHeight;\n const liveX = live.left - vp.scrollX;\n const liveY = live.top - vp.scrollY;\n let isOffScreen = false;\n switch (state.direction) {\n case \"top\":\n x1 = x2 = liveX + live.width / 2;\n y1 = liveY;\n y2 = Math.max(-vp.scrollY, y1 - value);\n labelX = x1;\n visibleY1 = Math.max(0, Math.min(vp.height, y1));\n visibleY2 = Math.max(0, Math.min(vp.height, y2));\n if (Math.abs(visibleY1 - visibleY2) < 1) isOffScreen = true;\n labelY = (Math.min(visibleY1, visibleY2) + Math.max(visibleY1, visibleY2)) / 2;\n break;\n case \"bottom\":\n x1 = x2 = liveX + live.width / 2;\n y1 = liveY + live.height;\n y2 = Math.min(docHeight - vp.scrollY, y1 + value);\n labelX = x1;\n visibleY1 = Math.max(0, Math.min(vp.height, y1));\n visibleY2 = Math.max(0, Math.min(vp.height, y2));\n if (Math.abs(visibleY1 - visibleY2) < 1) isOffScreen = true;\n labelY = (Math.min(visibleY1, visibleY2) + Math.max(visibleY1, visibleY2)) / 2;\n break;\n case \"left\":\n y1 = y2 = liveY + live.height / 2;\n x1 = liveX;\n x2 = Math.max(-vp.scrollX, x1 - value);\n visibleX1 = Math.max(0, Math.min(vp.width, x1));\n visibleX2 = Math.max(0, Math.min(vp.width, x2));\n if (Math.abs(visibleX1 - visibleX2) < 1) isOffScreen = true;\n labelX = (Math.min(visibleX1, visibleX2) + Math.max(visibleX1, visibleX2)) / 2;\n labelY = y1;\n break;\n case \"right\":\n y1 = y2 = liveY + live.height / 2;\n x1 = liveX + live.width;\n x2 = Math.min(docWidth - vp.scrollX, x1 + value);\n visibleX1 = Math.max(0, Math.min(vp.width, x1));\n visibleX2 = Math.max(0, Math.min(vp.width, x2));\n if (Math.abs(visibleX1 - visibleX2) < 1) isOffScreen = true;\n labelX = (Math.min(visibleX1, visibleX2) + Math.max(visibleX1, visibleX2)) / 2;\n labelY = y1;\n break;\n }\n const rawValue = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n const actualValue = Number.isInteger(rawValue) ? rawValue : Math.round(rawValue * 100) / 100;\n const displayValue = state.value || String(actualValue);\n const labelWidthGuess = displayValue.length * 8 + 12;\n const labelHeightGuess = 20;\n const isHorizontal = state.direction === \"left\" || state.direction === \"right\";\n const visibleLineLength = isHorizontal ? Math.abs(visibleX1 - visibleX2) : Math.abs(visibleY1 - visibleY2);\n const labelSize = isHorizontal ? labelWidthGuess : labelHeightGuess;\n const showLabel = visibleLineLength >= labelSize * 1.5;\n return {\n x1,\n y1,\n x2,\n y2,\n labelX,\n labelY,\n actualValue,\n isHidden: live.isHidden || isOffScreen,\n showLabel\n };\n });\n const [isHovered, setIsHovered] = createSignal3(false);\n const handleLineClick = (e) => {\n e.stopPropagation();\n const data = lineData();\n if (data) {\n props.onLineClick?.({\n type: \"distance\",\n value: data.actualValue,\n start: {\n x: data.x1,\n y: data.y1\n },\n end: {\n x: data.x2,\n y: data.y2\n }\n }, data.actualValue);\n }\n };\n return _$createComponent6(Show6, {\n get when() {\n return _$memo3(() => !!lineData())() && !lineData()?.isHidden;\n },\n get children() {\n return [(() => {\n var _el$ = _tmpl$9(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;\n _$setAttribute2(_el$, \"class\", `${PREFIX}viewport-fixed`);\n _el$2.addEventListener(\"mouseleave\", () => setIsHovered(false));\n _el$2.addEventListener(\"mouseenter\", () => setIsHovered(true));\n _el$2.$$click = handleLineClick;\n _$setAttribute2(_el$2, \"class\", `${PREFIX}line-hit-target`);\n _$setAttribute2(_el$3, \"class\", `${PREFIX}projection-line`);\n _$effect7((_p$) => {\n var _v$ = lineData().x1, _v$2 = lineData().y1, _v$3 = lineData().x2, _v$4 = lineData().y2, _v$5 = lineData().x1, _v$6 = lineData().y1, _v$7 = lineData().x2, _v$8 = lineData().y2, _v$9 = isHovered() ? 2 : 1;\n _v$ !== _p$.e && _$setAttribute2(_el$2, \"x1\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute2(_el$2, \"y1\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setAttribute2(_el$2, \"x2\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute2(_el$2, \"y2\", _p$.o = _v$4);\n _v$5 !== _p$.i && _$setAttribute2(_el$3, \"x1\", _p$.i = _v$5);\n _v$6 !== _p$.n && _$setAttribute2(_el$3, \"y1\", _p$.n = _v$6);\n _v$7 !== _p$.s && _$setAttribute2(_el$3, \"x2\", _p$.s = _v$7);\n _v$8 !== _p$.h && _$setAttribute2(_el$3, \"y2\", _p$.h = _v$8);\n _v$9 !== _p$.r && _$setAttribute2(_el$3, \"stroke-width\", _p$.r = _v$9);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0,\n s: void 0,\n h: void 0,\n r: void 0\n });\n return _el$;\n })(), _$createComponent6(Show6, {\n get when() {\n return lineData().showLabel;\n },\n get children() {\n var _el$4 = _tmpl$26();\n _el$4.$$click = handleLineClick;\n _$className5(_el$4, `${PREFIX}label ${PREFIX}projection-label`);\n _$insert5(_el$4, () => lineData().actualValue);\n _$effect7((_$p) => _$setStyleProperty5(_el$4, \"transform\", `translate3d(${lineData().labelX}px, ${lineData().labelY}px, 0) translate(-50%, -50%)`));\n return _el$4;\n }\n })];\n }\n });\n}\nfunction ProjectionInput(props) {\n const style = createMemo5(() => {\n const vp = props.viewport();\n vp.version;\n const metadata = props.metadata();\n const live = getLiveGeometry3(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n if (!live || live.isHidden) return {\n display: \"none\"\n };\n const windowTop = live.top - vp.scrollY;\n const windowLeft = live.left - vp.scrollX;\n const inputHeight = 35;\n const margin = 10;\n const shouldFlip = windowTop < inputHeight + margin;\n const y = shouldFlip ? windowTop + live.height + margin : windowTop - inputHeight;\n return {\n top: \"0\",\n left: \"0\",\n transform: `translate3d(${windowLeft}px, ${y}px, 0)`\n };\n });\n return (() => {\n var _el$5 = _tmpl$35(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;\n _$className5(_el$6, `${PREFIX}projection-direction-tag`);\n _$insert5(_el$6, () => props.projectionState().direction);\n _$className5(_el$7, `${PREFIX}projection-current-value`);\n _$insert5(_el$7, () => props.projectionState().value || \"0\");\n _$effect7((_p$) => {\n var _v$0 = `${PREFIX}projection-input ${props.isFocused ? `${PREFIX}projection-input-focused` : \"\"}`, _v$1 = style();\n _v$0 !== _p$.e && _$className5(_el$5, _p$.e = _v$0);\n _p$.t = _$style2(_el$5, _v$1, _p$.t);\n return _p$;\n }, {\n e: void 0,\n t: void 0\n });\n return _el$5;\n })();\n}\n_$delegateEvents3([\"click\"]);\n\n// src/ui/utils/ruler.tsx\nimport { template as _$template8 } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents4 } from \"solid-js/web\";\nimport { memo as _$memo4 } from \"solid-js/web\";\nimport { style as _$style3 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty6 } from \"solid-js/web\";\nimport { effect as _$effect8 } from \"solid-js/web\";\nimport { insert as _$insert6 } from \"solid-js/web\";\nimport { createComponent as _$createComponent7 } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute3 } from \"solid-js/web\";\nimport { className as _$className6 } from \"solid-js/web\";\nimport { For as For3, Show as Show7, createSignal as createSignal4, createMemo as createMemo6, onMount, onCleanup as onCleanup2, createEffect as createEffect2 } from \"solid-js\";\nimport { getLiveGeometry as getLiveGeometry4, RULER_SNAP_THRESHOLD, RULER_HIT_SIZE } from \"@caliper/core\";\nvar _tmpl$10 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore><svg style=z-index:999999>`);\nvar _tmpl$27 = /* @__PURE__ */ _$template8(`<svg><g data-caliper-ignore style=cursor:pointer;pointer-events:auto><line stroke=transparent stroke-width=15></line><line stroke=var(--caliper-secondary) stroke-width=1 stroke-dasharray=\"4 2\"></line><circle r=2.5 fill=var(--caliper-secondary)></circle><circle r=2.5 fill=var(--caliper-secondary)></svg>`, false, true, false);\nvar _tmpl$36 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore style=left:0;top:0>`);\nvar _tmpl$43 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore style=position:fixed;left:0;top:0;pointer-events:auto;z-index:1000001>`);\nvar _tmpl$52 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore>`);\nfunction RulerOverlay(props) {\n const [draggingId, setDraggingId] = createSignal4(null);\n const [hoveredId, setHoveredId] = createSignal4(null);\n const [selectedIds, setSelectedIds] = createSignal4(/* @__PURE__ */ new Set());\n const [rulerOrigins, setRulerOrigins] = createSignal4(/* @__PURE__ */ new Map());\n createEffect2(() => {\n const lines = props.state().lines;\n const currentIds = selectedIds();\n const validIds = /* @__PURE__ */ new Set();\n currentIds.forEach((id) => {\n if (lines.find((line) => line.id === id)) {\n validIds.add(id);\n }\n });\n if (validIds.size !== currentIds.size) {\n setSelectedIds(validIds);\n }\n });\n createEffect2(() => {\n const lines = props.state().lines;\n const vp = props.viewport();\n const origins = rulerOrigins();\n let updated = false;\n const newOrigins = new Map(origins);\n lines.forEach((line) => {\n if (!newOrigins.has(line.id)) {\n newOrigins.set(line.id, {\n width: vp.width,\n height: vp.height\n });\n updated = true;\n }\n });\n const lineIds = new Set(lines.map((line) => line.id));\n newOrigins.forEach((_, id) => {\n if (!lineIds.has(id)) {\n newOrigins.delete(id);\n updated = true;\n }\n });\n if (updated) {\n setRulerOrigins(newOrigins);\n }\n });\n const getProportionalPosition = (line) => {\n const vp = props.viewport();\n const origin = rulerOrigins().get(line.id);\n if (!origin) {\n return line.position;\n }\n const isV = line.type === \"vertical\";\n const originDim = isV ? origin.width : origin.height;\n const currentDim = isV ? vp.width : vp.height;\n if (originDim === 0) return line.position;\n const ratio = line.position / originDim;\n return ratio * currentDim;\n };\n const getSnapPoints = (isV) => {\n const points = [];\n const state = props.projectionState?.();\n const meta = props.metadata?.();\n const res = props.result?.();\n const vp = props.viewport();\n if (meta && meta.element) {\n const live = getLiveGeometry4(meta.rect, meta.scrollHierarchy, meta.position, meta.stickyConfig, meta.initialWindowX, meta.initialWindowY);\n if (live) {\n const liveX = live.left - vp.scrollX;\n const liveY = live.top - vp.scrollY;\n if (isV) {\n points.push(liveX, liveX + live.width, liveX + live.width / 2);\n } else {\n points.push(liveY, liveY + live.height, liveY + live.height / 2);\n }\n if (state && state.direction && state.element === meta.element) {\n const value = parseFloat(state.value) || 0;\n if (isV) {\n if (state.direction === \"left\") points.push(liveX - value);\n else if (state.direction === \"right\") points.push(liveX + live.width + value);\n } else {\n if (state.direction === \"top\") points.push(liveY - value);\n else if (state.direction === \"bottom\") points.push(liveY + live.height + value);\n }\n }\n }\n }\n if (res && res.secondary) {\n const live = getLiveGeometry4(res.secondary, res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY);\n if (live) {\n const liveX = live.left - vp.scrollX;\n const liveY = live.top - vp.scrollY;\n if (isV) {\n points.push(liveX, liveX + live.width, liveX + live.width / 2);\n } else {\n points.push(liveY, liveY + live.height, liveY + live.height / 2);\n }\n }\n }\n return points;\n };\n const applySnap = (pos, isV) => {\n const points = getSnapPoints(isV);\n for (const p of points) {\n if (Math.abs(pos - p) <= RULER_SNAP_THRESHOLD) {\n return p;\n }\n }\n return pos;\n };\n const handleKeyDown = (e) => {\n const activeIds = selectedIds();\n if (activeIds.size === 0) return;\n if (e.key === \"Delete\" || e.key === \"Backspace\") {\n const idsToRemove = Array.from(activeIds);\n idsToRemove.forEach((id) => props.onRemove(id));\n setSelectedIds(/* @__PURE__ */ new Set());\n return;\n }\n const lines = props.state().lines;\n const activeLines = lines.filter((line) => activeIds.has(line.id));\n if (activeLines.length === 0) return;\n let step = 1;\n if (e.ctrlKey || e.metaKey) step = 10;\n else if (e.shiftKey) step = 0.1;\n const firstLine = activeLines[0];\n if (!firstLine) return;\n const isV = firstLine.type === \"vertical\";\n let delta = 0;\n if (isV) {\n if (e.key === \"ArrowLeft\") delta = -step;\n if (e.key === \"ArrowRight\") delta = step;\n } else {\n if (e.key === \"ArrowUp\") delta = -step;\n if (e.key === \"ArrowDown\") delta = step;\n }\n if (delta !== 0) {\n e.preventDefault();\n const vp = props.viewport();\n activeLines.forEach((line) => {\n const isLineV = line.type === \"vertical\";\n const max = (isLineV ? vp.width : vp.height) - 1;\n const currentPos = getProportionalPosition(line);\n let newPos = Math.max(0, Math.min(currentPos + delta, max));\n newPos = applySnap(newPos, isLineV);\n setRulerOrigins((prev) => {\n const next = new Map(prev);\n next.set(line.id, {\n width: vp.width,\n height: vp.height\n });\n return next;\n });\n props.onUpdate(line.id, newPos);\n });\n }\n };\n onMount(() => {\n const handleGlobalClick = (e) => {\n const target = e.target;\n if (!target.closest(`.${PREFIX}ruler-line-hit`) && !target.closest(`.${PREFIX}ruler-bridge-label`) && !target.closest(`.${PREFIX}line-hit-target`) && !target.closest(`[data-caliper-ignore]`)) {\n setSelectedIds(/* @__PURE__ */ new Set());\n }\n };\n window.addEventListener(\"pointerdown\", handleGlobalClick, {\n capture: true\n });\n window.addEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n onCleanup2(() => {\n window.removeEventListener(\"pointerdown\", handleGlobalClick, {\n capture: true\n });\n window.removeEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n });\n });\n const handlePointerDown = (e) => {\n const target = e.target;\n const id = target.getAttribute(\"data-ruler-id\");\n const type = target.getAttribute(\"data-ruler-type\");\n if (!id || !type) return;\n e.preventDefault();\n e.stopPropagation();\n setDraggingId(id);\n target.setPointerCapture(e.pointerId);\n const vp = props.viewport();\n const line = props.state().lines.find((line2) => line2.id === id);\n if (line) {\n const currentPos = getProportionalPosition(line);\n setRulerOrigins((prev) => {\n const next = new Map(prev);\n next.set(id, {\n width: vp.width,\n height: vp.height\n });\n return next;\n });\n props.onUpdate(id, currentPos);\n }\n if (e.shiftKey) {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n } else {\n if (!selectedIds().has(id)) {\n setSelectedIds(/* @__PURE__ */ new Set([id]));\n }\n }\n const onPointerMove = (moveEvent) => {\n const vp2 = props.viewport();\n const isV = type === \"vertical\";\n let pos = isV ? moveEvent.clientX : moveEvent.clientY;\n const max = (isV ? vp2.width : vp2.height) - 1;\n pos = Math.max(0, Math.min(pos, max));\n pos = applySnap(pos, isV);\n props.onUpdate(id, pos);\n };\n const onPointerUp = (upEvent) => {\n setDraggingId(null);\n target.releasePointerCapture(upEvent.pointerId);\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n };\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n };\n const handlePointerOver = (e) => {\n const target = e.target;\n const id = target.getAttribute(\"data-ruler-id\");\n if (id) setHoveredId(id);\n };\n const handlePointerOut = (e) => {\n const target = e.target;\n if (target.hasAttribute(\"data-ruler-id\")) setHoveredId(null);\n };\n const bridges = createMemo6(() => {\n const ids = selectedIds();\n if (ids.size < 2) return [];\n const lines = props.state().lines.filter((line) => ids.has(line.id));\n const vLinesWithPos = lines.filter((line) => line.type === \"vertical\").map((line) => ({\n line,\n pos: getProportionalPosition(line)\n })).sort((a, b) => a.pos - b.pos);\n const hLinesWithPos = lines.filter((line) => line.type === \"horizontal\").map((line) => ({\n line,\n pos: getProportionalPosition(line)\n })).sort((a, b) => a.pos - b.pos);\n const result = [];\n const vp = props.viewport();\n for (let i = 0; i < vLinesWithPos.length - 1; i++) {\n const l1 = vLinesWithPos[i];\n const l2 = vLinesWithPos[i + 1];\n const val = l2.pos - l1.pos;\n if (val > 0) {\n result.push({\n x1: l1.pos,\n y1: vp.height / 2 + 100,\n // Move default bridge line off center for better visibility\n x2: l2.pos,\n y2: vp.height / 2 + 100,\n value: val,\n type: \"vertical\",\n labelX: l1.pos + val / 2,\n labelY: vp.height / 2 + 85\n });\n }\n }\n for (let i = 0; i < hLinesWithPos.length - 1; i++) {\n const l1 = hLinesWithPos[i];\n const l2 = hLinesWithPos[i + 1];\n const val = l2.pos - l1.pos;\n if (val > 0) {\n result.push({\n x1: vp.width / 2 + 100,\n y1: l1.pos,\n x2: vp.width / 2 + 100,\n y2: l2.pos,\n value: val,\n type: \"horizontal\",\n labelX: vp.width / 2 + 115,\n labelY: l1.pos + val / 2\n });\n }\n }\n return result;\n });\n const handleClick = (bridge, e) => {\n e.stopPropagation();\n props.onLineClick?.({\n type: \"distance\",\n value: bridge.value,\n start: {\n x: bridge.x1,\n y: bridge.y1\n },\n end: {\n x: bridge.x2,\n y: bridge.y2\n }\n }, bridge.value);\n };\n return (() => {\n var _el$ = _tmpl$10(), _el$2 = _el$.firstChild;\n _el$.$$pointerout = handlePointerOut;\n _el$.$$pointerover = handlePointerOver;\n _el$.$$pointerdown = handlePointerDown;\n _$className6(_el$, `${PREFIX}ruler-layer`);\n _$setAttribute3(_el$2, \"class\", `${PREFIX}viewport-fixed`);\n _$insert6(_el$2, _$createComponent7(For3, {\n get each() {\n return bridges();\n },\n children: (bridge) => (() => {\n var _el$3 = _tmpl$27(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling;\n _el$3.$$click = (e) => handleClick(bridge, e);\n _$setAttribute3(_el$4, \"class\", `${PREFIX}line-hit-target`);\n _$effect8((_p$) => {\n var _v$ = bridge.x1, _v$2 = bridge.y1, _v$3 = bridge.x2, _v$4 = bridge.y2, _v$5 = bridge.x1, _v$6 = bridge.y1, _v$7 = bridge.x2, _v$8 = bridge.y2, _v$9 = bridge.x1, _v$0 = bridge.y1, _v$1 = bridge.x2, _v$10 = bridge.y2;\n _v$ !== _p$.e && _$setAttribute3(_el$4, \"x1\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute3(_el$4, \"y1\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setAttribute3(_el$4, \"x2\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute3(_el$4, \"y2\", _p$.o = _v$4);\n _v$5 !== _p$.i && _$setAttribute3(_el$5, \"x1\", _p$.i = _v$5);\n _v$6 !== _p$.n && _$setAttribute3(_el$5, \"y1\", _p$.n = _v$6);\n _v$7 !== _p$.s && _$setAttribute3(_el$5, \"x2\", _p$.s = _v$7);\n _v$8 !== _p$.h && _$setAttribute3(_el$5, \"y2\", _p$.h = _v$8);\n _v$9 !== _p$.r && _$setAttribute3(_el$6, \"cx\", _p$.r = _v$9);\n _v$0 !== _p$.d && _$setAttribute3(_el$6, \"cy\", _p$.d = _v$0);\n _v$1 !== _p$.l && _$setAttribute3(_el$7, \"cx\", _p$.l = _v$1);\n _v$10 !== _p$.u && _$setAttribute3(_el$7, \"cy\", _p$.u = _v$10);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0,\n s: void 0,\n h: void 0,\n r: void 0,\n d: void 0,\n l: void 0,\n u: void 0\n });\n return _el$3;\n })()\n }));\n _$insert6(_el$, _$createComponent7(For3, {\n get each() {\n return bridges();\n },\n children: (bridge) => (() => {\n var _el$8 = _tmpl$36();\n _el$8.$$click = (e) => handleClick(bridge, e);\n _$className6(_el$8, `${PREFIX}label ${PREFIX}ruler-bridge-label`);\n _$insert6(_el$8, () => Math.round(bridge.value * 100) / 100);\n _$effect8((_$p) => _$setStyleProperty6(_el$8, \"transform\", `translate3d(${bridge.labelX}px, ${bridge.labelY}px, 0) translate(-50%, -50%)`));\n return _el$8;\n })()\n }), null);\n _$insert6(_el$, _$createComponent7(For3, {\n get each() {\n return props.state().lines;\n },\n children: (line) => _$createComponent7(RulerLineItem, {\n line,\n get pixelPosition() {\n return getProportionalPosition(line);\n },\n get isDragging() {\n return draggingId() === line.id;\n },\n get isHovered() {\n return hoveredId() === line.id;\n },\n get isSelected() {\n return selectedIds().has(line.id);\n },\n get onLineClick() {\n return props.onLineClick;\n },\n get viewport() {\n return props.viewport;\n }\n })\n }), null);\n return _el$;\n })();\n}\nfunction RulerLineItem(props) {\n const lineStyle = createMemo6(() => {\n const isV = props.line.type === \"vertical\";\n const pos = props.pixelPosition;\n const isActive = props.isDragging || props.isHovered || props.isSelected;\n return {\n left: \"0\",\n top: \"0\",\n width: isV ? \"1px\" : \"100%\",\n height: isV ? \"100%\" : \"1px\",\n transform: `translate3d(${isV ? pos : 0}px, ${isV ? 0 : pos}px, 0) ${isActive ? isV ? \"scaleX(1.5)\" : \"scaleY(1.5)\" : \"scale(1)\"}`,\n opacity: props.isSelected ? \"1\" : props.isHovered ? \"0.8\" : \"0.6\",\n filter: props.isSelected ? \"drop-shadow(0 0 1.5px var(--caliper-primary))\" : \"none\",\n \"transform-origin\": \"center\"\n };\n });\n const hitSize = createMemo6(() => `${RULER_HIT_SIZE}px`);\n const hitOffset = createMemo6(() => (RULER_HIT_SIZE - 1) / 2);\n return [(() => {\n var _el$9 = _tmpl$43();\n _$className6(_el$9, `${PREFIX}ruler-line-hit`);\n _$effect8((_p$) => {\n var _v$11 = props.line.id, _v$12 = props.line.type, _v$13 = props.line.type === \"vertical\" ? hitSize() : \"100%\", _v$14 = props.line.type === \"vertical\" ? \"100%\" : hitSize(), _v$15 = `translate3d(${props.line.type === \"vertical\" ? props.pixelPosition - hitOffset() : 0}px, ${props.line.type === \"vertical\" ? 0 : props.pixelPosition - hitOffset()}px, 0)`, _v$16 = props.line.type === \"vertical\" ? \"col-resize\" : \"row-resize\";\n _v$11 !== _p$.e && _$setAttribute3(_el$9, \"data-ruler-id\", _p$.e = _v$11);\n _v$12 !== _p$.t && _$setAttribute3(_el$9, \"data-ruler-type\", _p$.t = _v$12);\n _v$13 !== _p$.a && _$setStyleProperty6(_el$9, \"width\", _p$.a = _v$13);\n _v$14 !== _p$.o && _$setStyleProperty6(_el$9, \"height\", _p$.o = _v$14);\n _v$15 !== _p$.i && _$setStyleProperty6(_el$9, \"transform\", _p$.i = _v$15);\n _v$16 !== _p$.n && _$setStyleProperty6(_el$9, \"cursor\", _p$.n = _v$16);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0\n });\n return _el$9;\n })(), (() => {\n var _el$0 = _tmpl$52();\n _$className6(_el$0, `${PREFIX}ruler-line-visual`);\n _$effect8((_$p) => _$style3(_el$0, {\n ...lineStyle()\n }, _$p));\n return _el$0;\n })(), _$createComponent7(Show7, {\n get when() {\n return props.isDragging || props.isHovered || props.isSelected;\n },\n get children() {\n var _el$1 = _tmpl$36();\n _el$1.$$click = (e) => {\n e.stopPropagation();\n const isV = props.line.type === \"vertical\";\n const vp = props.viewport();\n const pos = props.pixelPosition;\n props.onLineClick?.({\n type: \"distance\",\n value: pos,\n start: isV ? {\n x: pos,\n y: 0\n } : {\n x: 0,\n y: pos\n },\n end: isV ? {\n x: pos,\n y: vp.height\n } : {\n x: vp.width,\n y: pos\n }\n }, pos);\n };\n _$className6(_el$1, `${PREFIX}label ${PREFIX}ruler-label`);\n _$insert6(_el$1, () => Math.round(props.pixelPosition * 100) / 100);\n _$effect8((_p$) => {\n var _v$17 = `translate3d(${props.line.type === \"vertical\" ? props.pixelPosition + 10 : 20}px, ${props.line.type === \"vertical\" ? 20 : props.pixelPosition + 10}px, 0)`, _v$18 = props.isSelected && !props.isHovered && !props.isDragging ? \"0.7\" : \"1\";\n _v$17 !== _p$.e && _$setStyleProperty6(_el$1, \"transform\", _p$.e = _v$17);\n _v$18 !== _p$.t && _$setStyleProperty6(_el$1, \"opacity\", _p$.t = _v$18);\n return _p$;\n }, {\n e: void 0,\n t: void 0\n });\n return _el$1;\n }\n })];\n}\n_$delegateEvents4([\"pointerdown\", \"pointerover\", \"pointerout\", \"click\"]);\n\n// src/ui/utils/render-overlay.tsx\nvar _tmpl$11 = /* @__PURE__ */ _$template9(`<div>`);\nfunction Overlay(props) {\n const resultData = createMemo7(() => {\n const res = props.result();\n if (!res) return null;\n props.viewport().version;\n const primaryGeo = getLiveGeometry5(res.primary, res.primaryHierarchy, res.primaryPosition, res.primarySticky, res.primaryWinX, res.primaryWinY, !!res.primaryHasContainingBlock);\n if (!primaryGeo) return null;\n const base = {\n primary: {\n geo: primaryGeo,\n delta: getTotalScrollDelta(res.primaryHierarchy, res.primaryPosition, res.primarySticky, res.primaryWinX, res.primaryWinY, !!res.primaryHasContainingBlock)\n },\n secondary: {\n geo: getLiveGeometry5(res.secondary, res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY, !!res.secondaryHasContainingBlock),\n delta: getTotalScrollDelta(res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY, !!res.secondaryHasContainingBlock)\n },\n common: getCommonVisibilityWindow(res.primaryHierarchy, res.secondaryHierarchy, props.selectionMetadata().element, res.secondaryElement, res.primaryWinX, res.primaryWinY)\n };\n const hasSameStack = res.primaryPosition === res.secondaryPosition && res.primaryHierarchy.length === res.secondaryHierarchy.length && res.primaryHierarchy.every((scrollState, index) => scrollState.element === res.secondaryHierarchy[index]?.element);\n const isDirectParentChild = res.primaryHierarchy.length > 0 && res.primaryHierarchy[0]?.element === res.secondaryElement || res.secondaryHierarchy.length > 0 && res.secondaryHierarchy[0]?.element === props.selectionMetadata().element;\n return {\n ...base,\n isSameContext: hasSameStack || isDirectParentChild\n };\n });\n return [_$createComponent8(BoundaryBoxes, {\n get metadata() {\n return props.selectionMetadata();\n },\n get result() {\n return props.result();\n },\n get isActivatePressed() {\n return props.isActivatePressed();\n },\n get isFrozen() {\n return props.isFrozen();\n },\n get animation() {\n return props.animation;\n },\n get viewport() {\n return props.viewport();\n }\n }), _$createComponent8(SelectionLabel, {\n get metadata() {\n return props.selectionMetadata();\n },\n get isActivatePressed() {\n return props.isActivatePressed();\n },\n get isCopied() {\n return props.isCopied?.() ?? false;\n },\n get viewport() {\n return props.viewport();\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!(props.isActivatePressed() || props.isFrozen()))() && resultData();\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n var _el$ = _tmpl$11();\n _$className7(_el$, `${PREFIX}overlay`);\n _$insert7(_el$, _$createComponent8(MeasurementLinesWithCalculator, {\n get lines() {\n return props.result().lines;\n },\n get data() {\n return resultData();\n },\n get viewport() {\n return props.viewport();\n },\n get onLineClick() {\n return props.onLineClick;\n }\n }), null);\n _$insert7(_el$, _$createComponent8(MeasurementLabels, {\n get lines() {\n return props.result().lines;\n },\n get data() {\n return resultData();\n },\n get viewport() {\n return props.viewport();\n },\n get onLineClick() {\n return props.onLineClick;\n }\n }), null);\n return _el$;\n }\n });\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!props.calculatorState)() && props.calculatorState() !== null;\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n return _$createComponent8(Calculator, {\n get state() {\n return props.calculatorState();\n },\n get onClose() {\n return props.onCalculatorClose || (() => {\n });\n },\n get position() {\n return {\n x: props.cursor().x,\n y: props.cursor().y\n };\n },\n get isFocused() {\n return props.activeFocus?.() === \"calculator\";\n }\n });\n }\n });\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!(props.projectionState && props.projectionState()?.direction !== null))() && props.projectionState()?.element === props.selectionMetadata().element;\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n return _$createComponent8(ProjectionOverlay, {\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.selectionMetadata;\n },\n get viewport() {\n return props.viewport;\n },\n get isFocused() {\n return props.activeFocus?.() === \"projection\";\n },\n get onLineClick() {\n return props.onLineClick;\n }\n });\n }\n });\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!props.rulerState)() && props.rulerState().lines.length > 0;\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n return _$createComponent8(RulerOverlay, {\n get state() {\n return props.rulerState;\n },\n get viewport() {\n return props.viewport;\n },\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.selectionMetadata;\n },\n get result() {\n return props.result;\n },\n get onUpdate() {\n return props.onRulerUpdate || (() => {\n });\n },\n get onRemove() {\n return props.onRulerRemove || (() => {\n });\n },\n get onLineClick() {\n return props.onLineClick;\n }\n });\n }\n });\n }\n })];\n}\n\n// src/root.tsx\nfunction Root(config) {\n const {\n commands,\n animation\n } = config;\n const [result, setResult] = createSignal5(null);\n const [cursor, setCursor] = createSignal5({\n x: 0,\n y: 0\n });\n const [viewport, setViewport] = createSignal5({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n version: 0\n });\n const [selectionMetadata, setSelectionMetadata] = createSignal5({\n element: null,\n rect: null,\n scrollHierarchy: [],\n position: \"static\",\n initialWindowX: 0,\n initialWindowY: 0,\n depth: 0\n });\n const [calculatorState, setCalculatorState] = createSignal5(null);\n const [projectionState, setProjectionState] = createSignal5({\n direction: null,\n value: \"\",\n element: null\n });\n const [activeCalculatorLine, setActiveCalculatorLine] = createSignal5(null);\n const [isSelectKeyDown, setIsSelectKeyDown] = createSignal5(false);\n const [activeInputFocus, setActiveInputFocus] = createSignal5(\"calculator\");\n const [pinnedCalculatorPos, setPinnedCalculatorPos] = createSignal5(null);\n let system = null;\n let selectionSystem = null;\n let projectionSystem = null;\n let rulerSystem = null;\n const [rulerState, setRulerState] = createSignal5({\n lines: []\n });\n const [isActivatePressed, setIsActivatePressed] = createSignal5(false);\n const [isFrozen, setIsFrozen] = createSignal5(false);\n const [isCopied, setIsCopied] = createSignal5(false);\n const [isAgentActive, setIsAgentActive] = createSignal5(false);\n let copyTimeoutId = null;\n const ignoredElements = /* @__PURE__ */ new WeakSet();\n let viewportRafId = null;\n let resizeObserver = null;\n let observedRoot = false;\n let observedPrimary = null;\n let observedSecondary = null;\n const resetCopyFeedback = () => {\n if (copyTimeoutId) {\n window.clearTimeout(copyTimeoutId);\n copyTimeoutId = null;\n }\n setIsCopied(false);\n };\n const resetCalculatorUI = () => {\n setCalculatorState(null);\n setActiveCalculatorLine(null);\n setPinnedCalculatorPos(null);\n if (projectionState().direction !== null) {\n setActiveInputFocus(\"projection\");\n }\n };\n const syncCalculatorUI = (state) => {\n if (!state.isActive) {\n resetCalculatorUI();\n return;\n }\n setCalculatorState(state);\n if (state.operation) {\n setActiveCalculatorLine(null);\n }\n };\n const isActive = createMemo8(() => {\n return !!selectionMetadata().element || !!result() || rulerState().lines.length > 0 || projectionState().direction !== null;\n });\n const syncViewport = () => {\n setViewport((prev) => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n version: (prev.version || 0) + 1\n }));\n viewportRafId = null;\n };\n const scheduleUpdate = () => {\n if (!isActive()) return;\n if (!viewportRafId) {\n viewportRafId = requestAnimationFrame(syncViewport);\n }\n };\n onMount2(() => {\n selectionSystem = createSelectionSystem();\n system = createMeasurementSystem();\n projectionSystem = system.getProjection();\n rulerSystem = system.getRuler();\n if (config.onSystemsReady) {\n config.onSystemsReady({\n measurementSystem: system,\n selectionSystem\n });\n }\n const unsubscribeProjection = projectionSystem.onUpdate((state) => {\n setProjectionState(state);\n if (state.direction === null) {\n if (calculatorState()?.isActive) {\n setActiveInputFocus(\"calculator\");\n }\n if (system?.getState() === \"FROZEN\") {\n system?.unfreeze(false);\n }\n } else {\n setActiveInputFocus(\"projection\");\n }\n });\n const unsubscribeRuler = rulerSystem.onUpdate((state) => {\n setRulerState(state);\n });\n const unsubscribe = system.onStateChange(() => {\n if (!system) return;\n setResult(system.getCurrentResult());\n setIsFrozen(system.getState() === \"FROZEN\");\n });\n const unsubscribeUpdate = selectionSystem.onUpdate((metadata) => {\n setSelectionMetadata(metadata);\n });\n const handleAgentLockChange = (e) => {\n const customEvent = e;\n setIsAgentActive(customEvent.detail.locked);\n };\n let selectionTimeoutId = null;\n let lastPointerPos = {\n x: 0,\n y: 0\n };\n const performSelection = (x, y) => {\n if (isAgentActive()) return;\n const element = getTopElementAtPoint(x, y);\n if (element && selectionSystem) {\n if (system) {\n system.abort();\n }\n resetCalculatorUI();\n resetCopyFeedback();\n setActiveInputFocus(\"calculator\");\n lastHoveredElement = null;\n selectionDelegate.cancel();\n measureDelegate.cancel();\n selectionSystem.select(element);\n }\n };\n const isCommandActive = (e) => {\n const mods = getNormalizedModifiers(e);\n const key = commands.select;\n if (key in mods) {\n return Object.entries(mods).every(([name, value]) => name === key ? value === true : value === false);\n }\n return isSelectKeyDown() && !mods.Control && !mods.Meta && !mods.Alt && !mods.Shift;\n };\n const isActivateActive = (e) => {\n return isKeyMatch(commands.activate, e);\n };\n const handlePointerDown = (e) => {\n if (isAgentActive()) return;\n lastPointerPos = {\n x: e.clientX,\n y: e.clientY\n };\n if (isCommandActive(e)) {\n e.preventDefault();\n e.stopImmediatePropagation();\n if (selectionTimeoutId) window.clearTimeout(selectionTimeoutId);\n selectionTimeoutId = window.setTimeout(() => {\n performSelection(lastPointerPos.x, lastPointerPos.y);\n selectionTimeoutId = null;\n }, commands.selectionHoldDuration);\n } else {\n if (selectionTimeoutId) window.clearTimeout(selectionTimeoutId);\n }\n };\n const handleClick = (e) => {\n if (isAgentActive()) return;\n if (isCommandActive(e)) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n };\n const handlePointerUp = (e) => {\n if (selectionTimeoutId) {\n window.clearTimeout(selectionTimeoutId);\n selectionTimeoutId = null;\n }\n const target = e.target;\n if (target.closest(`[data-caliper-ignore]`) || target.closest(`.${PREFIX}projection-input`)) {\n if (target.closest(`.${PREFIX}projection-input`)) {\n setActiveInputFocus(\"projection\");\n } else if (target.closest(`.${PREFIX}calculator`)) {\n setActiveInputFocus(\"calculator\");\n }\n }\n };\n const handleContextMenu = (contextEvent) => {\n if (isAgentActive()) return;\n const selectedElement = selectionMetadata().element;\n const measurementResult = result();\n if (selectedElement || measurementResult) {\n contextEvent.preventDefault();\n contextEvent.stopImmediatePropagation();\n let clipboardContent = \"\";\n if (contextEvent.shiftKey && selectedElement) {\n clipboardContent = selectedElement.getAttribute(\"data-caliper-agent-id\") || \"\";\n } else if (measurementResult && system && selectionSystem) {\n const primaryElement = selectionSystem.getSelected();\n const secondaryElement = system.getSecondaryElement();\n if (primaryElement && secondaryElement) {\n clipboardContent = JSON.stringify({\n primary: buildSelectorInfo(primaryElement, selectionMetadata()),\n secondary: buildSelectorInfo(secondaryElement, {\n rect: measurementResult.secondary,\n scrollHierarchy: measurementResult.secondaryHierarchy,\n position: measurementResult.secondaryPosition,\n stickyConfig: measurementResult.secondarySticky,\n initialWindowX: measurementResult.secondaryWinX,\n initialWindowY: measurementResult.secondaryWinY,\n hasContainingBlock: measurementResult.secondaryHasContainingBlock\n })\n });\n }\n } else if (selectedElement) {\n clipboardContent = JSON.stringify(buildSelectorInfo(selectedElement, selectionMetadata()));\n }\n if (clipboardContent) {\n navigator.clipboard.writeText(clipboardContent).then(() => {\n if (copyTimeoutId) clearTimeout(copyTimeoutId);\n setIsCopied(true);\n copyTimeoutId = window.setTimeout(() => {\n setIsCopied(false);\n copyTimeoutId = null;\n }, 1500);\n }).catch(() => {\n });\n }\n return;\n }\n if (isCommandActive(contextEvent)) {\n contextEvent.preventDefault();\n }\n };\n let lastMouseEvent = null;\n let mouseMoveRafId = null;\n let lastHoveredElement = null;\n const selectionDelegate = createSuppressionDelegate((el) => {\n if (selectionSystem?.getSelected() !== el) {\n system?.abort();\n resetCopyFeedback();\n }\n lastHoveredElement = el;\n selectionSystem?.select(el);\n });\n const measureDelegate = createSuppressionDelegate((el, cursor2, hover) => {\n if (hover) {\n lastHoveredElement = hover;\n }\n system?.measure(el, cursor2);\n });\n const processMouseMove = () => {\n if (!lastMouseEvent || !selectionSystem) {\n mouseMoveRafId = null;\n return;\n }\n if (isAgentActive()) {\n mouseMoveRafId = null;\n return;\n }\n const e = lastMouseEvent;\n const cursorPoint = {\n x: e.clientX,\n y: e.clientY\n };\n setCursor(cursorPoint);\n const selectedElement = selectionSystem.getSelected();\n const isAlt = isActivatePressed();\n const state = system?.getState();\n if (selectedElement) {\n const hoveredElement = getTopElementAtPoint(e.clientX, e.clientY);\n const isAncestor = hoveredElement && lastHoveredElement && hoveredElement.contains(lastHoveredElement) && hoveredElement !== lastHoveredElement;\n if (isAlt) {\n if (system) {\n measureDelegate.execute(!!isAncestor, selectedElement, cursorPoint, hoveredElement);\n }\n } else if (state !== \"FROZEN\") {\n if (hoveredElement) {\n selectionDelegate.execute(!!isAncestor, hoveredElement);\n }\n }\n }\n mouseMoveRafId = null;\n };\n const handleMouseMove = (e) => {\n lastMouseEvent = e;\n lastPointerPos = {\n x: e.clientX,\n y: e.clientY\n };\n if (!mouseMoveRafId) {\n mouseMoveRafId = requestAnimationFrame(processMouseMove);\n }\n };\n const handleKeyDown = (e) => {\n if (isAgentActive() && !isKeyMatch(commands.clear, e)) return;\n if (isKeyMatch(commands.clear, e)) {\n if (!isActive()) return;\n e.preventDefault();\n e.stopImmediatePropagation();\n setIsActivatePressed(false);\n resetCalculatorUI();\n resetCopyFeedback();\n if (system) {\n system.abort();\n }\n if (selectionSystem) {\n lastHoveredElement = null;\n selectionDelegate.cancel();\n measureDelegate.cancel();\n selectionSystem.clear();\n }\n return;\n }\n if (isKeyMatch(commands.select, e)) {\n setIsSelectKeyDown(true);\n }\n if (getLogicalKey(e).toLowerCase() === commands.ruler.toLowerCase() && e.shiftKey && rulerSystem && !isAgentActive()) {\n e.preventDefault();\n const vp = viewport();\n const x = Math.max(0, Math.min(cursor().x, vp.width));\n const y = Math.max(0, Math.min(cursor().y, vp.height));\n rulerSystem.addPair(x, y);\n return;\n }\n if (isActivateActive(e)) {\n if (selectionMetadata().element) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n if (!isActivatePressed() && isActive()) {\n if (system) {\n system.abort();\n }\n resetCalculatorUI();\n }\n setIsActivatePressed(true);\n } else if (isKeyMatch(commands.freeze, e) && system) {\n const state = system.getState();\n if (state === \"FROZEN\") {\n e.preventDefault();\n e.stopImmediatePropagation();\n system.unfreeze(isActivatePressed());\n } else if (selectionMetadata().element) {\n e.preventDefault();\n e.stopImmediatePropagation();\n system.freeze();\n }\n } else {\n const key = getLogicalKey(e);\n const {\n calculator,\n projection\n } = commands;\n const isCalcActive = !!calculatorState();\n const isProjActive = projectionState().direction !== null;\n const shouldCalcGetNumbers = isCalcActive && (activeInputFocus() === \"calculator\" || !isProjActive);\n if (isCalcActive && (shouldCalcGetNumbers || !/^\\d$/.test(e.key))) {\n const isNumeric = /^[0-9]$/.test(e.key);\n const isOperator = /^[+\\-*/]$/.test(e.key);\n const isDecimal = e.key === \".\";\n const isBackspace = e.key === \"Backspace\";\n const isDelete = e.key === \"Delete\";\n const isEnter = e.key === \"Enter\";\n const isEscape = e.key === \"Escape\";\n if (isNumeric || isOperator || isDecimal || isBackspace || isDelete || isEnter || isEscape) {\n if ((isNumeric || isBackspace || isDecimal) && !shouldCalcGetNumbers) {\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n if (isNumeric || isOperator || isDecimal) handleCalculatorInput(e.key);\n else if (isBackspace) handleCalculatorBackspace();\n else if (isDelete) handleCalculatorDelete();\n else if (isEnter) handleCalculatorEnter();\n else if (isEscape) handleCalculatorClose();\n return;\n }\n }\n }\n const dirMap = {\n [projection.top]: \"top\",\n [projection.left]: \"left\",\n [projection.bottom]: \"bottom\",\n [projection.right]: \"right\"\n };\n const dir = dirMap[key];\n if (dir && selectionMetadata().element) {\n e.preventDefault();\n e.stopImmediatePropagation();\n setActiveInputFocus(\"projection\");\n const currentElement = selectionMetadata().element;\n if (currentElement) {\n projectionSystem?.setElement(currentElement);\n }\n projectionSystem?.setDirection(dir);\n if (system) {\n system.freeze();\n }\n const getRunway = (dir2) => {\n const metadata = selectionMetadata();\n const live = getLiveGeometry6(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n if (!live) return void 0;\n return getMaxProjectionDistance(dir2, live);\n };\n const maxRunway = getRunway(dir);\n if (maxRunway !== void 0) projectionSystem?.capValue(maxRunway);\n return;\n }\n if (isProjActive) {\n const isNumeric = /^[0-9.]$/.test(key);\n const isBackspace = e.key === \"Backspace\";\n const hasPriority = activeInputFocus() === \"projection\" || !isCalcActive;\n if ((isNumeric || isBackspace) && hasPriority) {\n e.preventDefault();\n e.stopImmediatePropagation();\n const currentDir = projectionState().direction;\n if (isNumeric && currentDir) {\n const metadata = selectionMetadata();\n const live = getLiveGeometry6(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n let max;\n if (live) {\n max = getMaxProjectionDistance(currentDir, live);\n }\n projectionSystem?.appendValue(key, max);\n } else if (isBackspace) {\n projectionSystem?.backspace();\n }\n return;\n }\n }\n if (isFrozen() && result()) {\n const typeMap = {\n [calculator.top]: \"top\",\n [calculator.right]: \"right\",\n [calculator.bottom]: \"bottom\",\n [calculator.left]: \"left\",\n [calculator.distance]: \"distance\"\n };\n const targetType = typeMap[key];\n if (targetType) {\n const currentLines = result()?.lines || [];\n const targetLine = currentLines.find((line) => line.type === targetType);\n if (targetLine) {\n e.preventDefault();\n e.stopImmediatePropagation();\n const liveValue = getLiveLineValue(targetLine, result());\n handleLineClick(targetLine, liveValue);\n }\n }\n }\n }\n };\n const handleKeyUp = (e) => {\n if (isKeyMatch(commands.select, e)) {\n setIsSelectKeyDown(false);\n }\n if (isActivateActive(e)) {\n e.preventDefault();\n if (isActivatePressed()) {\n setIsActivatePressed(false);\n if (system && isActive()) {\n system.stop();\n }\n }\n }\n };\n const handleBlur = () => {\n if (isActivatePressed()) {\n setIsActivatePressed(false);\n if (system && isActive()) {\n system.stop();\n }\n }\n };\n const handleFocus = () => {\n if (!isActive()) return;\n scheduleUpdate();\n window.focus();\n };\n const handleDblClick = (e) => {\n if (!calculatorState()?.isActive) return;\n const target = e.target;\n const isOnCalculator = target.closest(`.${PREFIX}calculator`);\n if (isOnCalculator) {\n e.preventDefault();\n e.stopImmediatePropagation();\n setPinnedCalculatorPos(null);\n } else if (pinnedCalculatorPos() === null) {\n e.preventDefault();\n e.stopImmediatePropagation();\n setPinnedCalculatorPos({\n x: e.clientX,\n y: e.clientY\n });\n }\n };\n window.addEventListener(\"caliper:agent-lock-change\", handleAgentLockChange);\n window.addEventListener(\"pointerdown\", handlePointerDown, {\n capture: true\n });\n window.addEventListener(\"pointerup\", handlePointerUp, {\n capture: true\n });\n window.addEventListener(\"click\", handleClick, {\n capture: true\n });\n window.addEventListener(\"dblclick\", handleDblClick, {\n capture: true\n });\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n window.addEventListener(\"keyup\", handleKeyUp, {\n capture: true\n });\n window.addEventListener(\"contextmenu\", handleContextMenu, {\n capture: true\n });\n window.addEventListener(\"blur\", handleBlur);\n window.addEventListener(\"focus\", handleFocus);\n let lastPathname = location.pathname;\n const clearOnNavigate = () => {\n const newPathname = location.pathname;\n if (newPathname === lastPathname) return;\n lastPathname = newPathname;\n setIsActivatePressed(false);\n resetCalculatorUI();\n resetCopyFeedback();\n if (system) {\n system.abort();\n }\n if (selectionSystem) {\n lastHoveredElement = null;\n selectionDelegate.cancel();\n measureDelegate.cancel();\n selectionSystem.clear();\n }\n };\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n history.pushState = function(...args) {\n originalPushState(...args);\n clearOnNavigate();\n };\n history.replaceState = function(...args) {\n originalReplaceState(...args);\n clearOnNavigate();\n };\n window.addEventListener(\"popstate\", clearOnNavigate);\n onCleanup3(() => {\n window.removeEventListener(\"caliper:agent-lock-change\", handleAgentLockChange);\n window.removeEventListener(\"pointerdown\", handlePointerDown, {\n capture: true\n });\n window.removeEventListener(\"pointerup\", handlePointerUp, {\n capture: true\n });\n window.removeEventListener(\"click\", handleClick, {\n capture: true\n });\n window.removeEventListener(\"dblclick\", handleDblClick, {\n capture: true\n });\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n window.removeEventListener(\"keyup\", handleKeyUp, {\n capture: true\n });\n window.removeEventListener(\"contextmenu\", handleContextMenu, {\n capture: true\n });\n window.removeEventListener(\"blur\", handleBlur);\n window.removeEventListener(\"focus\", handleFocus);\n window.removeEventListener(\"popstate\", clearOnNavigate);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n if (mouseMoveRafId) {\n cancelAnimationFrame(mouseMoveRafId);\n }\n selectionDelegate.cancel();\n measureDelegate.cancel();\n unsubscribe();\n unsubscribeUpdate();\n unsubscribeProjection();\n unsubscribeRuler();\n if (system) {\n system.cleanup();\n }\n if (projectionSystem) {\n projectionSystem = null;\n }\n if (rulerSystem) {\n rulerSystem = null;\n }\n });\n });\n createEffect3(() => {\n if (isActive()) {\n window.addEventListener(\"scroll\", scheduleUpdate, {\n passive: true,\n capture: true\n });\n syncViewport();\n onCleanup3(() => {\n window.removeEventListener(\"scroll\", scheduleUpdate, {\n capture: true\n });\n if (viewportRafId) {\n cancelAnimationFrame(viewportRafId);\n viewportRafId = null;\n }\n });\n }\n });\n const updateResizeObservations = (active, primaryEl, secondaryEl) => {\n if (!resizeObserver) return;\n if (active && !observedRoot) {\n resizeObserver.observe(document.documentElement);\n observedRoot = true;\n } else if (!active && observedRoot) {\n resizeObserver.unobserve(document.documentElement);\n observedRoot = false;\n }\n if (primaryEl === observedPrimary && secondaryEl === observedSecondary) {\n return;\n }\n if (observedPrimary && observedPrimary !== primaryEl) {\n resizeObserver.unobserve(observedPrimary);\n observedPrimary = null;\n }\n if (observedSecondary && observedSecondary !== secondaryEl && observedSecondary !== primaryEl) {\n resizeObserver.unobserve(observedSecondary);\n observedSecondary = null;\n }\n if (primaryEl && primaryEl !== observedPrimary) {\n ignoredElements.add(primaryEl);\n resizeObserver.observe(primaryEl);\n observedPrimary = primaryEl;\n }\n if (secondaryEl && secondaryEl !== primaryEl && secondaryEl !== observedSecondary) {\n ignoredElements.add(secondaryEl);\n resizeObserver.observe(secondaryEl);\n observedSecondary = secondaryEl;\n }\n };\n createEffect3(() => {\n let resizeTimer = null;\n let lastRun = 0;\n let sentinelResized = false;\n let primaryChanged = false;\n let secondaryChanged = false;\n const runUpdates = () => {\n if (sentinelResized || primaryChanged) {\n if (observedPrimary) {\n const rect = observedPrimary.getBoundingClientRect();\n selectionSystem?.updateRect(rect);\n if (system) system.updatePrimaryRect(rect);\n }\n }\n if (sentinelResized || secondaryChanged) {\n if (observedSecondary) {\n const rect = observedSecondary.getBoundingClientRect();\n system?.updateSecondaryRect(rect);\n }\n }\n sentinelResized = false;\n primaryChanged = false;\n secondaryChanged = false;\n };\n resizeObserver = new ResizeObserver((entries) => {\n if (!isActive()) return;\n let hasActualResize = false;\n for (const entry of entries) {\n if (ignoredElements.has(entry.target)) {\n ignoredElements.delete(entry.target);\n continue;\n }\n hasActualResize = true;\n }\n if (!hasActualResize) return;\n for (const entry of entries) {\n if (entry.target === document.documentElement) {\n sentinelResized = true;\n } else if (entry.target === observedPrimary) {\n primaryChanged = true;\n } else if (entry.target === observedSecondary) {\n secondaryChanged = true;\n }\n }\n if (sentinelResized) {\n scheduleUpdate();\n }\n const now = Date.now();\n const remaining = RESIZE_THROTTLE_MS - (now - lastRun);\n if (remaining <= 0) {\n if (resizeTimer) clearTimeout(resizeTimer);\n lastRun = now;\n runUpdates();\n } else if (!resizeTimer) {\n resizeTimer = window.setTimeout(() => {\n lastRun = Date.now();\n resizeTimer = null;\n runUpdates();\n }, remaining);\n }\n });\n onCleanup3(() => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n observedPrimary = null;\n observedSecondary = null;\n if (resizeTimer) clearTimeout(resizeTimer);\n });\n });\n createEffect3(() => {\n const active = isActive();\n const primaryEl = selectionMetadata().element;\n const currentResult = result();\n const secondaryEl = isFrozen() ? currentResult?.secondaryElement ?? null : null;\n if (!active) {\n updateResizeObservations(false, null, null);\n return;\n }\n updateResizeObservations(true, primaryEl, secondaryEl);\n });\n createEffect3(() => {\n const calcLine = activeCalculatorLine();\n const currentResult = result();\n if (calcLine && currentResult && system) {\n const state = untrack(() => calculatorState());\n if (state?.isActive) {\n viewport().version;\n const matchingLine = currentResult.lines.find((line) => line.type === calcLine.type);\n if (matchingLine) {\n const liveValue = getLiveLineValue(matchingLine, currentResult);\n const calc = system.getCalculator();\n calc.syncValue(liveValue);\n setCalculatorState(calc.getState());\n }\n }\n }\n });\n const handleLineClick = (line, liveValue) => {\n if (system) {\n const calc = system.getCalculator();\n calc.open(liveValue);\n setActiveInputFocus(\"calculator\");\n syncCalculatorUI(calc.getState());\n if (\"startSync\" in line) {\n setActiveCalculatorLine(line);\n }\n }\n };\n const handleCalculatorInput = (key) => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleInput(key);\n if (/^[+\\-*/.]$/.test(key)) {\n setActiveInputFocus(\"calculator\");\n }\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorBackspace = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleBackspace();\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorDelete = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleDelete();\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorEnter = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleEnter();\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorClose = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.close();\n resetCalculatorUI();\n }\n };\n const handleRulerUpdate = (id, position) => {\n rulerSystem?.updateLine(id, position);\n };\n const handleRulerRemove = (id) => {\n rulerSystem?.removeLine(id);\n };\n return _$createComponent9(Overlay, {\n result,\n cursor: () => pinnedCalculatorPos() ?? cursor(),\n selectionMetadata,\n isActivatePressed,\n isFrozen,\n animation,\n viewport,\n calculatorState,\n projectionState,\n rulerState,\n activeFocus: activeInputFocus,\n isCopied,\n onLineClick: handleLineClick,\n onRulerUpdate: handleRulerUpdate,\n onRulerRemove: handleRulerRemove,\n onCalculatorClose: handleCalculatorClose\n });\n}\nfunction getMaxProjectionDistance(dir, live) {\n const docWidth = document.documentElement.scrollWidth;\n const docHeight = document.documentElement.scrollHeight;\n switch (dir) {\n case \"top\":\n return live.top;\n case \"bottom\":\n return docHeight - (live.top + live.height);\n case \"left\":\n return live.left;\n case \"right\":\n return docWidth - (live.left + live.width);\n }\n}\n\n// src/index.ts\nimport {\n applyTheme,\n mergeCommands,\n mergeAnimation,\n mergeTheme,\n getConfig,\n showVersionInfo,\n OVERLAY_CONTAINER_ID,\n MAX_SAFE_Z_INDEX,\n logger\n} from \"@caliper/core\";\n\n// src/style-injector/utils/inject-styles.ts\nvar styleElement = null;\nvar injectionCount = 0;\nfunction injectStyles() {\n if (styleElement) {\n injectionCount++;\n return;\n }\n styleElement = document.createElement(\"style\");\n styleElement.textContent = OVERLAY_STYLES;\n styleElement.setAttribute(\"data-caliper-styles\", \"true\");\n const head = document.head || document.getElementsByTagName(\"head\")[0];\n head.appendChild(styleElement);\n injectionCount = 1;\n}\nfunction removeStyles() {\n if (!styleElement) {\n return;\n }\n injectionCount--;\n if (injectionCount <= 0) {\n styleElement.remove();\n styleElement = null;\n injectionCount = 0;\n }\n}\n\n// src/index.ts\nvar IS_BROWSER = typeof window !== \"undefined\";\nvar activeInstance = null;\nfunction createOverlay(config) {\n if (!IS_BROWSER) {\n return {\n mount: () => {\n },\n dispose: () => {\n },\n getSystems: () => null,\n waitForSystems: () => new Promise(() => {\n }),\n use: () => instance,\n mounted: false\n };\n }\n if (activeInstance?.mounted) {\n return activeInstance;\n }\n if (window.__CALIPER__?.mounted) {\n activeInstance = window.__CALIPER__;\n return activeInstance;\n }\n const windowConfig = getConfig();\n const mergedConfig = {\n theme: { ...windowConfig?.theme, ...config?.theme },\n commands: {\n ...windowConfig?.commands,\n ...config?.commands,\n calculator: {\n ...windowConfig?.commands?.calculator,\n ...config?.commands?.calculator\n },\n projection: {\n ...windowConfig?.commands?.projection,\n ...config?.commands?.projection\n }\n },\n animation: { ...windowConfig?.animation, ...config?.animation }\n };\n const commands = mergeCommands(mergedConfig.commands);\n const animation = mergeAnimation(mergedConfig.animation);\n const theme = mergeTheme(mergedConfig.theme);\n const debug = config?.debug ?? windowConfig?.debug ?? true;\n logger.setEnabled(debug);\n let cleanup = null;\n let systems = null;\n const plugins = /* @__PURE__ */ new Map();\n const pendingSystemsResolvers = [];\n const waitForSystems = () => {\n if (systems) return Promise.resolve(systems);\n return new Promise((resolve, reject) => pendingSystemsResolvers.push({ resolve, reject }));\n };\n const instance = {\n mounted: false,\n mount: (container) => {\n if (instance.mounted) return;\n if (document.getElementById(OVERLAY_CONTAINER_ID)) {\n instance.mounted = true;\n return;\n }\n const target = container || document.documentElement;\n injectStyles();\n const overlayContainer = document.createElement(\"div\");\n overlayContainer.id = OVERLAY_CONTAINER_ID;\n overlayContainer.style.zIndex = MAX_SAFE_Z_INDEX.toString();\n target.appendChild(overlayContainer);\n applyTheme(theme, overlayContainer);\n const disposeRender = render(\n () => Root({\n commands,\n animation,\n onSystemsReady: (readySystems) => {\n systems = readySystems;\n const currentResolvers = [...pendingSystemsResolvers];\n pendingSystemsResolvers.length = 0;\n currentResolvers.forEach(({ resolve }) => resolve(readySystems));\n }\n }),\n overlayContainer\n );\n cleanup = () => {\n disposeRender();\n overlayContainer.remove();\n removeStyles();\n instance.mounted = false;\n systems = null;\n plugins.forEach((plugin) => plugin.dispose?.());\n plugins.clear();\n pendingSystemsResolvers.forEach(({ reject }) => reject(new Error(\"Overlay disposed\")));\n pendingSystemsResolvers.length = 0;\n if (activeInstance === instance) activeInstance = null;\n };\n instance.mounted = true;\n },\n dispose: () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n },\n getSystems: () => systems,\n waitForSystems,\n use: (plugin) => {\n if (plugins.has(plugin.name)) {\n return instance;\n }\n plugins.set(plugin.name, plugin);\n plugin.install(instance);\n return instance;\n }\n };\n activeInstance = instance;\n window.__CALIPER__ = instance;\n if (IS_BROWSER) {\n instance.mount();\n }\n return instance;\n}\nif (IS_BROWSER) {\n showVersionInfo(process.env.VERSION).catch(() => {\n });\n}\nexport {\n createOverlay\n};\n","import { createOverlay } from \"@caliper/overlay\";\n\n/**\n * Auto-initialization entry point (Lite version).\n */\nif (typeof window !== \"undefined\") {\n createOverlay();\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/solid-js@1.9.11/node_modules/solid-js/dist/solid.js","../../../node_modules/.pnpm/solid-js@1.9.11/node_modules/solid-js/web/dist/web.js","../../core/src/scheduling/reader.ts","../../core/src/shared/constants/index.ts","../../core/src/scheduling/frequency-control.ts","../../core/src/scheduling/suppression.ts","../../core/src/shared/utils/dom-utils.ts","../../core/src/element-picking/utils/filter-visible.ts","../../core/src/cursor-context/utils/priority-rules.ts","../../core/src/geometry/utils/scroll-aware.ts","../../core/src/measurement-model/utils/measurement-result.ts","../../core/src/measurement-model/utils/create-measurement.ts","../../core/src/measurement-model/utils/state-machine.ts","../../core/src/calculator-model/utils/calculator-state.ts","../../core/src/measurement-model/utils/calculator-integration.ts","../../core/src/measurement-model/utils/projection-system.ts","../../core/src/shared/utils/id.ts","../../core/src/ruler-model/utils/ruler-system.ts","../../core/src/measurement-model/utils/measurement-system.ts","../../core/src/shared/utils/raf.ts","../../core/src/measurement-model/utils/selection-system.ts","../../core/src/shared/utils/os.ts","../../core/src/shared/config/overlay-config.ts","../../core/src/shared/config/config-utils.ts","../../core/src/shared/utils/version-check.ts","../../core/src/shared/utils/math.ts","../../core/src/shared/utils/text-content.ts","../../core/src/shared/utils/class-filter.ts","../../core/src/shared/utils/selector.ts","../../core/src/shared/utils/logger.ts","../../core/src/shared/utils/keyboard.ts","../../overlay/dist/index.js","../src/auto-lite.ts"],"names":["equalFn","a","b","$TRACK","signalOptions","runEffects","runQueue","STALE","PENDING","UNOWNED","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createRoot","fn","detachedOwner","listener","owner","unowned","current","root","updateFn","untrack","cleanNode","runUpdates","createSignal","value","options","s","setter","writeSignal","readSignal","createRenderEffect","c","createComputation","updateComputation","createEffect","runUserEffects","createMemo","on","deps","isArray","prevInput","prevValue","input","i","result","onMount","onCleanup","getOwner","runWithOwner","o","prev","prevListener","err","handleError","transPending","setTransPending","runningTransition","updates","lookUpstream","sSlot","node","isComp","TransitionRunning","markDownstream","time","runComputation","nextValue","init","pure","state","runTop","ancestors","wait","res","completeUpdates","e","queue","userLength","ignore","source","index","obs","n","castError","error","FALLBACK","dispose","d","mapArray","list","mapFn","items","mapped","disposers","len","indexes","newItems","newLen","j","newIndices","newIndicesNext","temp","tempdisposers","tempIndexes","start","end","newEnd","item","disposer","mapper","set","createComponent","Comp","props","narrowedError","name","For","fallback","Show","keyed","conditionValue","condition","child","memo","reconcileArrays","parentNode","bLength","aEnd","bEnd","aStart","bStart","after","map","sequence","t","$$EVENTS","render","code","element","insert","template","html","isImportNode","isSVG","isMathML","create","delegateEvents","eventNames","document","l","eventHandler","setAttribute","className","style","nodeStyle","v","setStyleProperty","parent","accessor","marker","initial","insertExpression","key","oriTarget","oriCurrentTarget","retarget","handleNode","handler","data","walkUpTree","path","unwrapArray","multi","cleanChildren","array","currentArray","normalizeIncomingArray","appendNodes","normalized","unwrap","dynamic","replacement","inserted","el","isParent","SVG_NAMESPACE","createElement","tagName","is","Portal","useShadow","mount","content","clean","setClean","cleanup","container","renderRoot","createReader","rafId","idleId","taskController","timeoutId","detectBestStrategy","scheduleWithScheduler","callback","urgent","scheduleWithIdle","Scheduler","TaskController","scheduleWithRAF","deadline","scheduleWithTimeout","scheduleRead","cancel","MAX_FRAME_TIMES","DEFAULT_READ_INTERVAL","SUPPRESSION_MAX_FRAMES","RESIZE_THROTTLE_MS","SUPPRESSION_DELAY","MAX_RULER_PAIRS","MAX_RULER_LINES","RULER_SNAP_THRESHOLD","RULER_HIT_SIZE","CALIPER_PREFIX","BRIDGE_TAB_ID_KEY","OVERLAY_CONTAINER_ID","MAX_SAFE_Z_INDEX","RUNTIME_CLASS_IGNORE_PREFIXES","createFrequencyControlledReader","baseReader","lastReadTime","readInterval","frameTimes","trailingTimeoutId","pendingTask","adaptToFrameRate","fps","recordFrameTime","timestamp","last","first","duration","executeNow","timeSinceLastRead","createSuppressionDelegate","action","maxFrames","delay","suppressionFrames","trailingTimer","shouldSuppress","args","isRenderable","win","HTMLElement","SVGElement","getOverlayRoot","isVisible","contentVisibility","hasSize","rect","isEligible","HYSTERESIS_THRESHOLD","isCaliperNode","getElementAtPoint","x","y","getTopElementAtPoint","detectBestContext","selectedElement","cursorX","cursorY","getDistanceToEdge","dx","dy","resolveAmbiguousContext","previousContext","previousElement","winnerContext","winnerElement","getScrollGeometryStyle","computedStyle","getScrollAwareRect","elementRect","overflowIndicatesClipping","isScrollContainer","establishesScrollingBox","getFullHierarchy","styles","hasStickyAbove","nextStyle","scrollHierarchy","positionMode","scrollAnchor","containingBlock","anchorAbsoluteDepth","ancestor","depthFromRoot","containerElement","calculateStickyRef","scrollOffset","naturalPosition","threshold","containerDimension","elementDimension","isOppositeMode","staticRelationship","isCrossContainerMode","absContainerDim","stuck","maxViewportPos","calculateStickyDelta","currentScroll","initialScroll","startRef","endRef","getTotalScrollDelta","hierarchy","position","sticky","initialWindowX","initialWindowY","hasContainingBlock","totalDeltaX","totalDeltaY","stickyApplied","scrollState","isFixed","isDescendantOfStickyAnchor","thresholdX","thresholdY","isOppX","isOppY","scrollDeltaX","scrollDeltaY","stickyViewportDeltaX","stickyViewportDeltaY","getCommonVisibilityWindow","hierarchy1","hierarchy2","element1","element2","initWinX","initWinY","h1Map","h2Map","commonElements","scrollIndex","minX","maxX","minY","maxY","getSuffixSums","sumsX","sumsY","h1Suffix","h2Suffix","isH1","suffix","sIndex","containerRect","ancestorDeltaX","ancestorDeltaY","windowScrollAdjustmentX","windowScrollAdjustmentY","hasStickyAncestorFlag","checkElement","checkStyle","containerLiveLeft","containerLiveTop","clipLeft","clipTop","clipRight","clipBottom","getLiveGeometry","stableRect","deltaX","deltaY","vMinX","vMaxX","vMinY","vMaxY","hierarchyLength","suffixSumsX","suffixSumsY","left","top","width","height","isHidden","topClip","leftClip","bottomClip","rightClip","parseStickyOffset","rawValue","parsed","getRootOffset","curr","collectStickyOnPath","from","to","out","getDistanceFromContainer","targetElement","stickyElements","targetOffset","containerOffset","originalPosition","getDistancesWithSingleToggle","scrollingContainer","cappingContainer","seen","anchorOffset","cappingNaturalPosition","capOffset","deduceGeometry","treeDepth","stickyConfig","currentParent","isDocLevelCapping","isCappingContainerSticky","anchorRect","childRelTop","childRelLeft","childRelBottom","childRelRight","topSticky","bottomSticky","leftSticky","rightSticky","needCappingDistance","dist","containerHeight","containerWidth","isWindowLevel","cappingHeight","cappingWidth","parentTrackHeight","parentTrackWidth","scrollerHeight","scrollerWidth","clampPointToGeometry","point","geometry","viewport","createMeasurementLines","context","primary","secondary","lines","distance","calculateSiblingDistance","padding","calculatePaddingLines","sibling","overlapXStart","overlapXEnd","hasOverlapX","overlapYStart","overlapYEnd","hasOverlapY","syncBase","centerX","distBtoT","distTtoB","startY","endY","centerY","distRtoL","distLtoR","startX","endX","pFaces","sFaces","minD2","bestP","bestS","p","d2","pFace","sFace","getLivePoint","pt","line","primaryDelta","secondaryDelta","scrollX","scrollY","syncX","syncY","getLiveLineValue","startPoint","endPoint","createMeasurement","secondaryElement","createMeasurementBetween","primaryElement","resolvedContext","primaryGeom","secondaryGeom","createStateMachine","getState","transitionTo","newState","allowed","isIdle","isArmed","isMeasuring","isFrozen","createCalculatorState","calculate","val","inputNum","dispatch","isDot","alreadyHasDot","hasResult","isSwitchable","createCalculatorIntegration","calculator","open","baseValue","handleInput","handleBackspace","handleDelete","handleEnter","close","syncValue","getResult","createProjectionSystem","listeners","notify","direction","char","max","newValueStr","newValueNum","generateId","prefix","randomPart","createRulerSystem","hLine","vLine","id","createMeasurementSystem","reader","stateMachine","projection","ruler","currentResult","notifyListeners","measure","cursor","measurement","freeze","unfreeze","isAltDown","abort","stop","getCurrentResult","getSecondaryElement","getCalculator","getProjection","getRuler","onStateChange","updatePrimaryRect","newPrimary","updateSecondaryRect","newSecondary","applyResult","waitPostRaf","resolve","reject","createSelectionSystem","selectedRect","depth","updateListeners","getMetadata","metadata","select","getSelected","getSelectedRect","clear","onUpdate","updateRect","IS_BROWSER","detectOS","platform","ua","OS_NAME","IS_APPLE","OS","DEFAULT_COMMANDS","DEFAULT_THEME","DEFAULT_ANIMATION","parseNumber","defaultValue","num","withOpacity","color","opacity","hex","r","g","applyTheme","theme","target","mergeCommands","userCommands","mergeAnimation","userAnimation","mergeTheme","userTheme","getConfig","windowConfig","dataConfig","CALIPER_LOGO_SVG","fetchLatestVersion","response","compareVersions","v1","v2","parts1","parts2","part1","part2","showVersionInfo","currentVersion","latestInfo","lerp","lerpRect","getElementDirectText","maxLength","directText","children","trimmed","filterRuntimeClasses","classes","buildSelectorInfo","agentId","text","nthChild","info","scrollStateItem","_removedElement","serializableScrollState","tabId","isGlobalEnabled","Logger","enabled","logger","getNormalizedModifiers","isAltGraph","getLogicalKey","isKeyMatch","OVERLAY_STYLES","PREFIX","_tmpl$","_tmpl$2","_tmpl$3","MeasurementLinesWithCalculator","hoveredLine","setHoveredLine","hasClipping","clipPathId","vCommon","_el$","_el$5","_el$2","_el$3","_el$4","_p$","_v$","_v$2","_v$3","_v$4","lineData","sRaw","eRaw","liveValue","isHovered","_el$6","_el$7","_el$8","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","_tmpl$4","_tmpl$22","MeasurementLabels","dxRaw","dyRaw","naturalX","naturalY","vpMinX","vpMaxX","vpMinY","vpMaxY","common","hasCommon","cMinX","cMaxX","cMinY","cMaxY","lineMinX","lineMaxX","lineMinY","lineMaxY","visibleLineMinX","visibleLineMaxX","visibleLineMinY","visibleLineMaxY","targetX","targetY","pos","_$p","_tmpl$5","_tmpl$23","_tmpl$32","_tmpl$42","iconStyle","Icons","_tmpl$6","_tmpl$24","_tmpl$33","Calculator","formatValue","operation","Icon","_c$","_tmpl$7","BoundaryBoxes","anchor","setAnchor","setTarget","lastElement","isRectSame","lerpTo","targetGeo","lerpFactor","next","isDegenerate","geo","liveSelectionTarget","liveSecondaryTarget","selection","factor","isNewElement","useLerp","animate","currentAnchor","nextAnchor","_tmpl$8","_tmpl$25","_tmpl$34","SelectionLabel","liveGeo","labelData","vLeft","vRight","vBottom","cLeft","cRight","cBottom","effectiveMinX","effectiveMaxX","effectiveMaxY","visibleLeft","visibleRight","snapX","snapY","_tmpl$9","_tmpl$26","_tmpl$35","ProjectionOverlay","ProjectionLines","ProjectionInput","vp","live","x1","y1","x2","y2","labelX","labelY","visibleY1","visibleY2","visibleX1","visibleX2","docWidth","docHeight","liveX","liveY","isOffScreen","actualValue","labelWidthGuess","labelHeightGuess","isHorizontal","showLabel","setIsHovered","handleLineClick","windowTop","windowLeft","inputHeight","margin","_tmpl$10","_tmpl$27","_tmpl$36","_tmpl$43","_tmpl$52","RulerOverlay","draggingId","setDraggingId","hoveredId","setHoveredId","selectedIds","setSelectedIds","rulerOrigins","setRulerOrigins","currentIds","validIds","origins","updated","newOrigins","lineIds","_","getProportionalPosition","origin","isV","originDim","currentDim","getSnapPoints","points","meta","applySnap","handleKeyDown","activeIds","activeLines","step","firstLine","delta","isLineV","currentPos","newPos","handleGlobalClick","handlePointerDown","type","line2","onPointerMove","moveEvent","vp2","onPointerUp","upEvent","handlePointerOver","handlePointerOut","bridges","ids","vLinesWithPos","hLinesWithPos","l1","l2","handleClick","bridge","RulerLineItem","lineStyle","isActive","hitSize","hitOffset","_el$9","_v$12","_v$13","_v$14","_v$15","_v$16","_el$0","_el$1","_v$17","_v$18","_tmpl$11","Overlay","resultData","primaryGeo","base","hasSameStack","isDirectParentChild","Root","config","commands","animation","setResult","setCursor","setViewport","selectionMetadata","setSelectionMetadata","calculatorState","setCalculatorState","projectionState","setProjectionState","activeCalculatorLine","setActiveCalculatorLine","isSelectKeyDown","setIsSelectKeyDown","activeInputFocus","setActiveInputFocus","pinnedCalculatorPos","setPinnedCalculatorPos","system","selectionSystem","projectionSystem","rulerSystem","rulerState","setRulerState","isActivatePressed","setIsActivatePressed","setIsFrozen","isCopied","setIsCopied","isAgentActive","setIsAgentActive","copyTimeoutId","ignoredElements","viewportRafId","resizeObserver","observedRoot","observedPrimary","observedSecondary","resetCopyFeedback","resetCalculatorUI","syncCalculatorUI","syncViewport","scheduleUpdate","unsubscribeProjection","unsubscribeRuler","unsubscribe","unsubscribeUpdate","handleAgentLockChange","selectionTimeoutId","lastPointerPos","performSelection","lastHoveredElement","selectionDelegate","measureDelegate","isCommandActive","mods","isActivateActive","handlePointerUp","handleContextMenu","contextEvent","measurementResult","clipboardContent","lastMouseEvent","mouseMoveRafId","cursor2","hover","processMouseMove","cursorPoint","isAlt","hoveredElement","isAncestor","lastHoveredDetached","handleMouseMove","isCalcActive","isProjActive","shouldCalcGetNumbers","isNumeric","isOperator","isDecimal","isBackspace","isDelete","isEnter","isEscape","handleCalculatorInput","handleCalculatorBackspace","handleCalculatorDelete","handleCalculatorEnter","handleCalculatorClose","dir","currentElement","maxRunway","dir2","getMaxProjectionDistance","hasPriority","currentDir","targetType","targetLine","handleKeyUp","handleBlur","handleFocus","handleDblClick","lastPathname","clearOnNavigate","newPathname","originalPushState","originalReplaceState","updateResizeObservations","active","primaryEl","secondaryEl","resizeTimer","lastRun","sentinelResized","primaryChanged","secondaryChanged","entries","hasActualResize","entry","now","remaining","calcLine","matchingLine","calc","styleElement","injectionCount","injectStyles","removeStyles","activeInstance","createOverlay","instance","mergedConfig","debug","systems","plugins","pendingSystemsResolvers","overlayContainer","disposeRender","readySystems","currentResolvers","plugin"],"mappings":"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","file":"index.global.min.js","sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port = channel.port2;\n scheduleCallback = () => port.postMessage(null);\n channel.port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(c.fn, trigger);\n onCleanup(() => ordinary.dispose());\n const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());\n const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);\n c.fn = x => {\n track();\n return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const res = keys.map(k => {\n return new Proxy({\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n }\n let Comp;\n return createMemo(() => (Comp = comp()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, createRoot, createRenderEffect, untrack, sharedConfig, enableHydration, getOwner, createEffect, runWithOwner, createSignal, onCleanup, splitProps } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","type ReadStrategy = \"post-raf\" | \"idle\" | \"scheduler\" | \"timeout\";\n\nexport interface Reader {\n /**\n * Schedules a read. Only the latest scheduled read will be executed.\n */\n scheduleRead: (callback: () => void, urgent?: boolean) => void;\n cancel: () => void;\n}\n\ninterface TaskController extends AbortController {\n setPriority(priority: string): void;\n readonly signal: TaskSignal;\n}\n\ninterface TaskSignal extends AbortSignal {\n readonly priority: string;\n onprioritychange: ((this: TaskSignal, ev: Event) => any) | null;\n}\n\nexport function createReader(): Reader {\n let rafId: number | null = null;\n let idleId: number | null = null;\n let taskController: TaskController | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n function detectBestStrategy(): ReadStrategy {\n // Prefer scheduler if available\n if (\"scheduler\" in globalThis) {\n return \"scheduler\";\n }\n // Fallback to idle callback\n if (\"requestIdleCallback\" in window) {\n return \"idle\";\n }\n // Last resort: post-RAF\n return \"post-raf\";\n }\n\n function scheduleWithScheduler(callback: () => void, urgent: boolean) {\n if (!(\"scheduler\" in globalThis)) {\n scheduleWithIdle(callback, urgent);\n return;\n }\n\n const Scheduler = (globalThis as any).scheduler;\n const TaskController = (globalThis as any).TaskController;\n\n if (!TaskController) {\n scheduleWithIdle(callback, urgent);\n return;\n }\n\n taskController = new TaskController({\n priority: urgent ? \"user-visible\" : \"background\",\n });\n\n Scheduler.postTask(\n () => {\n callback();\n },\n {\n signal: taskController?.signal,\n priority: urgent ? \"user-visible\" : \"background\",\n }\n ).catch(() => {\n // Ignore abort errors\n });\n }\n\n function scheduleWithIdle(callback: () => void, urgent: boolean) {\n if (!(\"requestIdleCallback\" in window)) {\n scheduleWithRAF(callback);\n return;\n }\n\n idleId = requestIdleCallback(\n (deadline) => {\n if (deadline.timeRemaining() > 0 || deadline.didTimeout) {\n callback();\n } else if (!urgent) {\n // Reschedule if not urgent\n scheduleWithIdle(callback, false);\n } else {\n // Urgent: fallback to RAF\n scheduleWithRAF(callback);\n }\n },\n { timeout: urgent ? 5 : 50 }\n );\n }\n\n function scheduleWithRAF(callback: () => void) {\n rafId = requestAnimationFrame(() => {\n // Use microtask to run after app's RAF\n Promise.resolve().then(() => {\n callback();\n });\n });\n }\n\n function scheduleWithTimeout(callback: () => void) {\n timeoutId = setTimeout(() => {\n callback();\n }, 0);\n }\n\n function scheduleRead(callback: () => void, urgent = false): void {\n cancel();\n\n const strategy = detectBestStrategy();\n\n switch (strategy) {\n case \"scheduler\":\n scheduleWithScheduler(callback, urgent);\n break;\n case \"idle\":\n scheduleWithIdle(callback, urgent);\n break;\n case \"post-raf\":\n scheduleWithRAF(callback);\n break;\n case \"timeout\":\n scheduleWithTimeout(callback);\n break;\n }\n }\n\n function cancel() {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n if (idleId !== null && \"cancelIdleCallback\" in window) {\n cancelIdleCallback(idleId);\n idleId = null;\n }\n if (taskController) {\n taskController.abort();\n taskController = null;\n }\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n }\n\n return { scheduleRead, cancel };\n}\n","export const MAX_FRAME_TIMES = 30;\nexport const DEFAULT_READ_INTERVAL = 16; // ~60fps\n\nexport const SUPPRESSION_MAX_FRAMES = 8;\nexport const RESIZE_THROTTLE_MS = 60;\nexport const SUPPRESSION_DELAY = 30;\n\nexport const MAX_RULER_PAIRS = 8;\nexport const MAX_RULER_LINES = MAX_RULER_PAIRS * 2;\n\nexport const RULER_SNAP_THRESHOLD = 6;\nexport const RULER_HIT_SIZE = 11;\n\nexport const CALIPER_PREFIX = \"caliper-\";\nexport const BRIDGE_TAB_ID_KEY = \"caliper-bridge-tab-id\";\n\nexport const OVERLAY_CONTAINER_ID = \"caliper-overlay-root\";\nexport const MAX_SAFE_Z_INDEX = 2147483647;\n\nexport const RUNTIME_CLASS_IGNORE_PREFIXES = [\n \"caliper-\",\n \"is-\",\n \"has-\",\n \"js-\",\n \"framer-\",\n \"motion-\",\n];\n","import type { Reader } from \"./reader.js\";\nimport { MAX_FRAME_TIMES, DEFAULT_READ_INTERVAL } from \"../shared/constants/index.js\";\n\nexport interface FrequencyControlledReader extends Reader {\n adaptToFrameRate: (fps: number) => void;\n recordFrameTime: (timestamp: number) => void;\n}\n\nexport function createFrequencyControlledReader(baseReader: Reader): FrequencyControlledReader {\n let lastReadTime = 0;\n let readInterval = DEFAULT_READ_INTERVAL;\n const frameTimes: number[] = [];\n let trailingTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let pendingTask: { callback: () => void; urgent: boolean } | null = null;\n\n function adaptToFrameRate(fps: number) {\n readInterval = Math.ceil(1000 / (fps / 2));\n }\n\n function recordFrameTime(timestamp: number) {\n frameTimes.push(timestamp);\n if (frameTimes.length > MAX_FRAME_TIMES) {\n frameTimes.shift();\n }\n\n if (frameTimes.length >= 2) {\n const last = frameTimes[frameTimes.length - 1];\n const first = frameTimes[0];\n if (last !== undefined && first !== undefined) {\n const duration = last - first;\n const fps = (frameTimes.length / duration) * 1000;\n adaptToFrameRate(fps);\n }\n }\n }\n\n function executeNow() {\n if (!pendingTask) return;\n const { callback, urgent } = pendingTask;\n pendingTask = null;\n\n lastReadTime = performance.now();\n baseReader.scheduleRead(callback, urgent);\n }\n\n function scheduleRead(callback: () => void, urgent = false): void {\n pendingTask = { callback, urgent };\n\n const now = performance.now();\n const timeSinceLastRead = now - lastReadTime;\n\n if (urgent || timeSinceLastRead >= readInterval) {\n if (trailingTimeoutId !== null) {\n clearTimeout(trailingTimeoutId);\n trailingTimeoutId = null;\n }\n executeNow();\n return;\n }\n\n if (trailingTimeoutId === null) {\n trailingTimeoutId = setTimeout(() => {\n trailingTimeoutId = null;\n executeNow();\n }, readInterval - timeSinceLastRead);\n }\n }\n\n function cancel() {\n baseReader.cancel();\n pendingTask = null;\n if (trailingTimeoutId !== null) {\n clearTimeout(trailingTimeoutId);\n trailingTimeoutId = null;\n }\n }\n\n return {\n scheduleRead,\n cancel,\n adaptToFrameRate,\n recordFrameTime,\n };\n}\n","import { SUPPRESSION_MAX_FRAMES, SUPPRESSION_DELAY } from \"../shared/constants/index.js\";\n\nexport interface SuppressionOptions {\n maxFrames?: number;\n delay?: number;\n}\n\n/**\n * Creates a delegated action that can suppress execution for a number of calls\n * if a condition is met. Useful for avoiding \"staircase\" effects where hover\n * events jump between parent/child elements too quickly.\n */\nexport function createSuppressionDelegate<T extends any[]>(\n action: (...args: T) => void,\n options: SuppressionOptions = {}\n) {\n const maxFrames = options.maxFrames ?? SUPPRESSION_MAX_FRAMES;\n const delay = options.delay ?? SUPPRESSION_DELAY;\n\n let suppressionFrames = 0;\n let trailingTimer: ReturnType<typeof setTimeout> | null = null;\n\n return {\n execute(shouldSuppress: boolean, ...args: T) {\n if (trailingTimer) {\n clearTimeout(trailingTimer);\n trailingTimer = null;\n }\n\n if (shouldSuppress && suppressionFrames < maxFrames) {\n suppressionFrames++;\n trailingTimer = setTimeout(() => {\n suppressionFrames = 0;\n action(...args);\n trailingTimer = null;\n }, delay);\n } else {\n suppressionFrames = 0;\n action(...args);\n }\n },\n\n cancel() {\n if (trailingTimer) {\n clearTimeout(trailingTimer);\n trailingTimer = null;\n }\n suppressionFrames = 0;\n },\n };\n}\n","import { OVERLAY_CONTAINER_ID } from \"../constants/index.js\";\n\n/**\n * Check if the provided element is a valid renderable object in any context.\n */\nexport function isRenderable(\n element: Element | null | undefined\n): element is HTMLElement | SVGElement {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) return false;\n\n const doc = element.ownerDocument;\n const win = doc?.defaultView;\n\n const HTMLElement = win?.HTMLElement;\n const SVGElement = win?.SVGElement;\n\n if (HTMLElement && element instanceof HTMLElement) return true;\n if (SVGElement && element instanceof SVGElement) return true;\n\n return \"tagName\" in element && \"getAttribute\" in element;\n}\n\n/**\n * Retrieves the root element where the Caliper overlay is mounted.\n *\n * @returns The overlay container element if it exists, otherwise document.documentElement.\n */\nexport function getOverlayRoot(): HTMLElement {\n return (document.getElementById(OVERLAY_CONTAINER_ID) as HTMLElement) || document.documentElement;\n}\n","import { isRenderable } from \"../../shared/utils/dom-utils.js\";\n\n/**\n * Check if an element is visible\n * Elements are ignored if they are invisible or zero-size\n */\nexport function isVisible(element: Element): boolean {\n if (!isRenderable(element)) {\n return false;\n }\n\n const tagName = element.tagName.toUpperCase();\n\n // Explicitly ignore non-renderable metadata/structural tags\n if ([\"STYLE\", \"SCRIPT\", \"NOSCRIPT\", \"TEMPLATE\", \"META\", \"LINK\", \"HEAD\"].includes(tagName)) {\n return false;\n }\n\n const style = window.getComputedStyle(element);\n const contentVisibility = style.contentVisibility || style.getPropertyValue(\"content-visibility\");\n\n if (style.display === \"none\" || contentVisibility === \"hidden\") {\n return false;\n }\n\n // We include visibility: hidden and opacity: 0 elements because they\n // still occupy space in the layout and are relevant for geometric audits.\n // The walk engine and picker will handle the \"hidden\" state via computed styles.\n return true;\n}\n\n/**\n * Check if an element has dimensions\n * Elements with zero width or height are ignored\n */\nexport function hasSize(element: Element): boolean {\n if (!isRenderable(element)) {\n return false;\n }\n\n const rect = element.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n}\n\n/**\n * Check if an element is a form input or editable area\n */\nexport function isEditable(element: Element | null): boolean {\n if (!element || !(element instanceof HTMLElement)) {\n return false;\n }\n\n const tagName = element.tagName;\n return (\n tagName === \"INPUT\" ||\n tagName === \"TEXTAREA\" ||\n tagName === \"SELECT\" ||\n element.isContentEditable\n );\n}\n\n/**\n * Check if element is eligible for measurement\n * Combines visibility and size checks\n */\nexport function isEligible(element: Element): boolean {\n if (element.closest(\"[data-caliper-ignore]\")) {\n return false;\n }\n return isVisible(element) && hasSize(element);\n}\n","import type { CursorContext } from \"../../shared/types/index.js\";\nimport { isEligible } from \"../../element-picking/utils/filter-visible.js\";\n\n/**\n * ============================================================================\n * HIT-TESTING CONTRACT\n * ============================================================================\n * Hit testing is paint-order based (via document.elementFromPoint).\n *\n * To ensure correct behavior:\n * - Overlay and editor UI layers MUST be non-interactive\n * (pointer-events: none) OR filtered via isEligible\n * - Use data-caliper-ignore attribute to exclude elements\n * ============================================================================\n */\n\n/**\n * Hysteresis configuration\n */\nconst HYSTERESIS_THRESHOLD = 2; // pixels\n\n/**\n * Check if an element belongs to Caliper's portaled UI\n */\nfunction isCaliperNode(node: Node | null): boolean {\n if (!node || !(node instanceof Element)) return false;\n return !!(node.closest(\"#caliper-overlay-root\") || node.closest(\"[class*='caliper-']\"));\n}\n\n/**\n * Find the first eligible element at a point, skipping Caliper's own UI\n */\nexport function getElementAtPoint(x: number, y: number): Element | null {\n const nodes = document.elementsFromPoint(x, y);\n\n return (\n nodes.find((node) => {\n if (isCaliperNode(node)) return false;\n return isEligible(node);\n }) || null\n );\n}\n\n/**\n * Find the topmost eligible element at a point (standard selection)\n */\nexport function getTopElementAtPoint(x: number, y: number): Element | null {\n const node = document.elementFromPoint(x, y);\n if (!node || isCaliperNode(node) || !isEligible(node)) return null;\n return node;\n}\n\n/**\n * Detect the best matching context and element using priority rules\n */\nfunction detectBestContext(\n selectedElement: Element,\n cursorX: number,\n cursorY: number\n): { context: CursorContext; element: Element } | null {\n let node = getElementAtPoint(cursorX, cursorY);\n if (!node) return null;\n\n while (node) {\n if (node !== selectedElement) {\n // 1. Child context: Target is inside selection\n if (selectedElement.contains(node)) {\n return { context: \"child\", element: node };\n }\n\n // 2. Parent context: Selection is inside target (ancestor)\n if (node.contains(selectedElement)) {\n return { context: \"parent\", element: node };\n }\n\n // 3. Sibling context: Target is an external element\n return { context: \"sibling\", element: node };\n }\n\n node = node.parentElement;\n }\n\n return null;\n}\n\n/**\n * Calculate distance from point to nearest edge of rectangle\n */\nfunction getDistanceToEdge(x: number, y: number, rect: DOMRect): number {\n const dx = Math.min(Math.abs(x - rect.left), Math.abs(x - rect.right));\n const dy = Math.min(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n return Math.min(dx, dy);\n}\n\n/**\n * Apply priority rules when cursor position is ambiguous\n */\nexport function resolveAmbiguousContext(\n selectedElement: Element,\n cursorX: number,\n cursorY: number,\n previousContext: CursorContext | null,\n previousElement: Element | null = null\n): { context: CursorContext; element: Element } | null {\n const result = detectBestContext(selectedElement, cursorX, cursorY);\n if (!result) return null;\n\n const { context: winnerContext, element: winnerElement } = result;\n\n if (\n previousContext &&\n previousElement &&\n (winnerContext !== previousContext || winnerElement !== previousElement)\n ) {\n const rect = previousElement.getBoundingClientRect();\n const distance = getDistanceToEdge(cursorX, cursorY, rect);\n\n if (distance <= HYSTERESIS_THRESHOLD) {\n // Sibling/Child context is more specific than Parent.\n // If we are moving FROM a parent TO a sibling/child, we should switch\n // immediately regardless of hysteresis to feel responsive and avoid \"sticky\" parents.\n const isSwitchingToSpecific =\n (winnerContext === \"sibling\" || winnerContext === \"child\") && previousContext === \"parent\";\n\n if (!isSwitchingToSpecific) {\n return { context: previousContext, element: previousElement };\n }\n }\n }\n\n return result;\n}\n\n/**\n * Detect the cursor context relative to the selected element\n */\nexport function detectContext(\n selectedElement: Element,\n cursorX: number,\n cursorY: number\n): CursorContext {\n const result = resolveAmbiguousContext(selectedElement, cursorX, cursorY, null, null);\n return result?.context ?? null;\n}\n","/**\n * Scroll-Aware Geometry Engine\n */\nimport type { ScrollState, PositionMode, StickyConfig } from \"../../shared/types/index.js\";\nimport type { SelectionMetadata as BaseSelectionMetadata } from \"@oyerinde/caliper-schema\";\nimport { isRenderable } from \"../../shared/utils/dom-utils.js\";\n\nexport interface DeducedGeometry extends Omit<\n BaseSelectionMetadata,\n \"scrollHierarchy\" | \"rect\" | \"stickyConfig\"\n> {\n rect: DOMRect;\n scrollHierarchy: ScrollState[];\n stickyConfig?: StickyConfig;\n depth: number;\n containingBlock: HTMLElement | null;\n position: PositionMode;\n initialWindowX: number;\n initialWindowY: number;\n}\n\nexport interface LiveGeometry {\n left: number;\n top: number;\n width: number;\n height: number;\n clipPath: string;\n isHidden: boolean;\n visibleMinX: number;\n visibleMaxX: number;\n visibleMinY: number;\n visibleMaxY: number;\n}\n\nexport type ScrollGeometryStyle = Pick<\n CSSStyleDeclaration,\n | \"position\"\n | \"overflow\"\n | \"overflowX\"\n | \"overflowY\"\n | \"transform\"\n | \"filter\"\n | \"perspective\"\n | \"contain\"\n | \"willChange\"\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n>;\n\nfunction getScrollGeometryStyle(element: Element): ScrollGeometryStyle {\n const computedStyle = window.getComputedStyle(element);\n return {\n position: computedStyle.position,\n overflow: computedStyle.overflow,\n overflowX: computedStyle.overflowX,\n overflowY: computedStyle.overflowY,\n transform: computedStyle.transform,\n filter: computedStyle.filter,\n perspective: computedStyle.perspective,\n contain: computedStyle.contain,\n willChange: computedStyle.willChange,\n top: computedStyle.top,\n bottom: computedStyle.bottom,\n left: computedStyle.left,\n right: computedStyle.right,\n };\n}\n\nexport function getScrollAwareRect(elementRect: DOMRect): DOMRect {\n return new DOMRect(\n elementRect.left + window.scrollX,\n elementRect.top + window.scrollY,\n elementRect.width,\n elementRect.height\n );\n}\n\n/** True if overflow/overflowX/overflowY indicate a clipping or scrolling box (auto, scroll, hidden, clip). */\nfunction overflowIndicatesClipping(style: ScrollGeometryStyle | CSSStyleDeclaration): boolean {\n return /(auto|scroll|hidden|clip)/.test(style.overflow + style.overflowY + style.overflowX);\n}\n\nexport function isScrollContainer(element: Element): boolean {\n if (!isRenderable(element)) return false;\n if (element.tagName.toLowerCase() === \"svg\") return false;\n const style = getScrollGeometryStyle(element);\n // Broad definition: scroll or clip.\n return overflowIndicatesClipping(style);\n}\n\n/**\n * Returns true if an element establishes a scrolling box (can have scrollTop/Left).\n * 'overflow: clip' does NOT establish a scrolling box.\n */\nfunction establishesScrollingBox(element: Element): boolean {\n const style = getScrollGeometryStyle(element);\n return /(auto|scroll|hidden)/.test(style.overflow + style.overflowY + style.overflowX);\n}\n\ninterface FullHierarchyResult {\n scrollHierarchy: ScrollState[];\n positionMode: PositionMode;\n scrollAnchor: HTMLElement | null;\n containingBlock: HTMLElement | null;\n treeDepth: number;\n anchorAbsoluteDepth: number;\n}\n\n/**\n * Build scroll hierarchy and inherited position mode (fixed/sticky) from element to document.\n * Depth from document root is computed per ancestor during the same walk.\n */\nfunction getFullHierarchy(element: Element): FullHierarchyResult {\n const ancestors: Element[] = [];\n let current: Element | null = element;\n while (current) {\n ancestors.push(current);\n if (current === document.documentElement) break;\n current = current.parentElement;\n }\n const n = ancestors.length;\n if (n <= 1) {\n return {\n scrollHierarchy: [],\n positionMode: \"static\",\n scrollAnchor: null,\n containingBlock: null,\n treeDepth: 0,\n anchorAbsoluteDepth: -1,\n };\n }\n\n const styles: ScrollGeometryStyle[] = [];\n for (let i = 0; i < n; i++) {\n const node = ancestors[i];\n if (node !== undefined) styles.push(getScrollGeometryStyle(node));\n }\n\n const hasStickyAbove: boolean[] = [];\n hasStickyAbove[n - 1] = false;\n for (let i = n - 2; i >= 0; i--) {\n const nextStyle = styles[i + 1];\n hasStickyAbove[i] =\n (nextStyle !== undefined && nextStyle.position === \"sticky\") ||\n (hasStickyAbove[i + 1] ?? false);\n }\n\n const scrollHierarchy: ScrollState[] = [];\n let positionMode: PositionMode = \"static\";\n let scrollAnchor: HTMLElement | null = null;\n let containingBlock: HTMLElement | null = null;\n let anchorAbsoluteDepth = -1;\n\n for (let i = 0; i < n; i++) {\n const ancestor = ancestors[i];\n if (ancestor === undefined || ancestor === document.documentElement) break;\n if (!isRenderable(ancestor)) continue;\n\n const style = styles[i];\n if (style === undefined) continue;\n const depthFromRoot = n - 1 - i;\n\n if (positionMode === \"static\") {\n if (style.position === \"fixed\") {\n positionMode = \"fixed\";\n scrollAnchor = ancestor as HTMLElement;\n anchorAbsoluteDepth = depthFromRoot;\n } else if (style.position === \"sticky\") {\n positionMode = \"sticky\";\n scrollAnchor = ancestor as HTMLElement;\n anchorAbsoluteDepth = depthFromRoot;\n }\n }\n\n if (\n ancestor !== element &&\n !containingBlock &&\n (style.transform !== \"none\" ||\n style.filter !== \"none\" ||\n style.perspective !== \"none\" ||\n style.contain === \"paint\" ||\n style.contain === \"layout\" ||\n style.willChange === \"transform\" ||\n style.willChange === \"filter\")\n ) {\n containingBlock = ancestor as HTMLElement;\n }\n\n if (i >= 1 && overflowIndicatesClipping(style)) {\n const containerElement = ancestor as HTMLElement;\n scrollHierarchy.push({\n element: containerElement,\n initialScrollTop: containerElement.scrollTop,\n initialScrollLeft: containerElement.scrollLeft,\n containerRect: getScrollAwareRect(containerElement.getBoundingClientRect()),\n absoluteDepth: depthFromRoot,\n hasStickyAncestor: hasStickyAbove[i] ?? false,\n });\n }\n }\n\n return {\n scrollHierarchy,\n positionMode,\n scrollAnchor,\n containingBlock,\n treeDepth: n - 1,\n anchorAbsoluteDepth,\n };\n}\n\nexport function getScrollHierarchy(element: Element): ScrollState[] {\n return getFullHierarchy(element).scrollHierarchy;\n}\n\n/**\n * Internal logic for capped sticky position\n */\nfunction calculateStickyRef(\n scrollOffset: number,\n naturalPosition: number,\n threshold: number,\n containerDimension: number,\n elementDimension: number,\n isOppositeMode: boolean\n): number {\n const staticRelationship = naturalPosition - scrollOffset;\n\n // Check if containerDimension is negative (indicates cross-container capping mode)\n const isCrossContainerMode = containerDimension < 0;\n const absContainerDim = Math.abs(containerDimension);\n\n if (!isOppositeMode) {\n let stuck = Math.max(staticRelationship, threshold);\n\n if (isCrossContainerMode) {\n // Cross-container capping: distance from element to container bottom\n // Max viewport pos = (naturalPos + distance) - elementDim - scrollOffset\n const maxViewportPos = naturalPosition + absContainerDim - elementDimension - scrollOffset;\n stuck = Math.min(stuck, maxViewportPos);\n } else {\n // Same-container capping: total container height\n stuck = Math.min(stuck, absContainerDim - elementDimension);\n }\n\n return stuck;\n } else {\n let stuck = Math.min(staticRelationship, absContainerDim - elementDimension - threshold);\n stuck = Math.max(stuck, 0);\n\n return stuck;\n }\n}\n\n/**\n * Internal logic for capped sticky delta\n */\nfunction calculateStickyDelta(\n currentScroll: number,\n initialScroll: number,\n naturalPosition: number,\n threshold: number | null,\n containerDimension: number,\n elementDimension: number,\n isOppositeMode = false\n): number {\n if (threshold === null) return currentScroll - initialScroll;\n\n const startRef = calculateStickyRef(\n initialScroll,\n naturalPosition,\n threshold ?? -Infinity,\n containerDimension,\n elementDimension,\n isOppositeMode\n );\n\n const endRef = calculateStickyRef(\n currentScroll,\n naturalPosition,\n threshold ?? -Infinity,\n containerDimension,\n elementDimension,\n isOppositeMode\n );\n\n return startRef - endRef;\n}\n\n/**\n * Calculates the total scroll offset required to sync an overlay element\n * with its DOM target.\n *\n * UNIFIED COORDINATE MODEL (Document-Space Shift):\n * To keep a fixed-root overlay synced with a moving target element, we calculate\n * how much the target has moved in Document Space since the selection was captured.\n *\n * Shift = InitialDocumentPosition - CurrentDocumentPosition\n *\n * 1. Internal Scrollers: Movement of child relative to container parent.\n * 2. Window Scroller: Movement of the entire document relative to the viewport.\n *\n * By accumulating (Initial - Current) across the entire hierarchy, we get the exact\n * negative displacement needed to \"counter-act\" the move and stay glued to the target.\n */\nexport function getTotalScrollDelta(\n hierarchy: ScrollState[],\n position: PositionMode = \"static\",\n sticky?: StickyConfig,\n initialWindowX = 0,\n initialWindowY = 0,\n hasContainingBlock = false\n) {\n let totalDeltaX = 0;\n let totalDeltaY = 0;\n let stickyApplied = false;\n\n for (let index = 0; index < hierarchy.length; index++) {\n const scrollState = hierarchy[index];\n if (!scrollState) continue;\n\n const element = scrollState.element!;\n const style = getScrollGeometryStyle(element);\n const isFixed = style.position === \"fixed\";\n const isScrollingBox = establishesScrollingBox(element);\n\n if (isScrollingBox) {\n /**\n * Depth-Aware Sticky Logic:\n * Only apply sticky pinning thresholds if the current scroller is at or above\n * the sticky anchor's depth in the tree. This prevents \"sticky leakage\"\n * where internal scrollers inside a sticky element incorrectly attempt to pin.\n */\n const isDescendantOfStickyAnchor =\n sticky && scrollState.absoluteDepth > sticky.anchorAbsoluteDepth;\n\n let thresholdX = null;\n let thresholdY = null;\n let isOppX = false;\n let isOppY = false;\n\n if (!stickyApplied && position === \"sticky\" && sticky && !isDescendantOfStickyAnchor) {\n if (sticky.top !== null) {\n thresholdY = sticky.top;\n } else if (sticky.bottom !== null) {\n thresholdY = sticky.bottom;\n isOppY = true;\n }\n\n if (sticky.left !== null) {\n thresholdX = sticky.left;\n } else if (sticky.right !== null) {\n thresholdX = sticky.right;\n isOppX = true;\n }\n }\n\n /**\n * Internal Document Shift:\n * calculateStickyDelta returns (InitialRef - CurrentRef), which handles\n * both static scrolling and sticky pinning within this specific box.\n */\n totalDeltaX += calculateStickyDelta(\n element.scrollLeft,\n scrollState.initialScrollLeft,\n sticky?.naturalLeft ?? 0,\n thresholdX,\n sticky?.containerWidth ?? 0,\n sticky?.elementWidth ?? 0,\n isOppX\n );\n totalDeltaY += calculateStickyDelta(\n element.scrollTop,\n scrollState.initialScrollTop,\n sticky?.naturalTop ?? 0,\n thresholdY,\n sticky?.containerHeight ?? 0,\n sticky?.elementHeight ?? 0,\n isOppY\n );\n\n if (thresholdX !== null || thresholdY !== null) {\n stickyApplied = true;\n }\n }\n\n /**\n * Terminate hierarchy at fixed elements (unless portaled/constrained).\n * Since 'fixed' elements are pinned to the viewport, when the window scrolls,\n * their Document Position changes by exactly (InitialWindowScroll - CurrentWindowScroll).\n */\n if (isFixed && !hasContainingBlock) {\n totalDeltaX += initialWindowX - window.scrollX;\n totalDeltaY += initialWindowY - window.scrollY;\n return { deltaX: totalDeltaX, deltaY: totalDeltaY };\n }\n }\n\n /**\n * Window Scroll Fallback:\n * After processing all internal scrollers, handle positioning relative to the window.\n *\n * CRITICAL INSIGHT:\n * - For STATIC elements: Document position is INVARIANT with window scroll.\n * stableRect is already in document coords, so NO window delta is needed.\n * - For FIXED elements: They pin to viewport, so document position shifts by\n * (currentWindowScroll - initialWindowScroll). Our delta = (initial - current).\n * - For STICKY elements: Apply sticky clamping formula to get the delta from\n * captured position to current live position.\n */\n if (!hasContainingBlock) {\n if (position === \"fixed\") {\n // Fixed elements: viewport-pinned, document position changes inversely with scroll\n totalDeltaX += initialWindowX - window.scrollX;\n totalDeltaY += initialWindowY - window.scrollY;\n } else if (position === \"sticky\" && sticky && !stickyApplied) {\n // Sticky elements: clamped pinning at window level\n //\n // DERIVATION:\n // liveDoc = liveViewport + currentScroll\n // stableDoc = captureViewport + captureScroll\n // deltaY = stableDoc - liveDoc\n // = (captureViewport - liveViewport) + (captureScroll - currentScroll)\n // = stickyViewportDelta + (initWinY - window.scrollY)\n //\n // Where:\n // stickyViewportDelta = captureViewport - liveViewport\n // = stickyRef(initWinY, ...) - stickyRef(window.scrollY, ...)\n // = calculateStickyDelta(window.scrollY, initWinY, ...)\n // scrollDelta = initWinY - window.scrollY\n //\n const scrollDeltaX = initialWindowX - window.scrollX;\n const scrollDeltaY = initialWindowY - window.scrollY;\n\n let thresholdX = null;\n let thresholdY = null;\n let isOppX = false;\n let isOppY = false;\n\n if (sticky.top !== null) {\n thresholdY = sticky.top;\n } else if (sticky.bottom !== null) {\n thresholdY = sticky.bottom;\n isOppY = true;\n }\n\n if (sticky.left !== null) {\n thresholdX = sticky.left;\n } else if (sticky.right !== null) {\n thresholdX = sticky.right;\n isOppX = true;\n }\n\n const stickyViewportDeltaX = calculateStickyDelta(\n window.scrollX,\n initialWindowX,\n sticky.naturalLeft,\n thresholdX,\n sticky.containerWidth,\n sticky.elementWidth,\n isOppX\n );\n const stickyViewportDeltaY = calculateStickyDelta(\n window.scrollY,\n initialWindowY,\n sticky.naturalTop,\n thresholdY,\n sticky.containerHeight,\n sticky.elementHeight,\n isOppY\n );\n\n // deltaY = stickyViewportDelta + scrollDelta\n totalDeltaX += stickyViewportDeltaX + scrollDeltaX;\n totalDeltaY += stickyViewportDeltaY + scrollDeltaY;\n }\n\n // For STATIC: No window delta needed. Document position is invariant.\n }\n\n return { deltaX: totalDeltaX, deltaY: totalDeltaY };\n}\n\n/**\n * Find shared scroll containers between two elements.\n * When containers have sticky ancestors, their document-space position shifts\n * with window scroll. initWinX/initWinY specify the window scroll at capture\n * time so the clipping bounds can be adjusted to their live positions.\n */\nexport function getCommonVisibilityWindow(\n hierarchy1: ScrollState[],\n hierarchy2: ScrollState[],\n element1: Element,\n element2: Element,\n initWinX = 0,\n initWinY = 0\n) {\n const h1Map = new Map<HTMLElement, number>();\n for (let index = 0; index < hierarchy1.length; index++) {\n const item = hierarchy1[index];\n if (item && item.element) h1Map.set(item.element, index);\n }\n\n const h2Map = new Map<HTMLElement, number>();\n for (let index = 0; index < hierarchy2.length; index++) {\n const item = hierarchy2[index];\n if (item && item.element) h2Map.set(item.element, index);\n }\n\n const commonElements: ScrollState[] = [];\n\n // Check shared ancestors\n for (let index = 0; index < hierarchy1.length; index++) {\n const scrollState = hierarchy1[index];\n if (scrollState && scrollState.element && h2Map.has(scrollState.element)) {\n commonElements.push(scrollState);\n }\n }\n\n // Check edge cases where one element is the container of the other\n if (isScrollContainer(element2)) {\n const scrollIndex = h1Map.get(element2 as HTMLElement);\n if (scrollIndex !== undefined) {\n const scrollState = hierarchy1[scrollIndex];\n if (scrollState && !commonElements.includes(scrollState)) commonElements.push(scrollState);\n }\n }\n if (isScrollContainer(element1)) {\n const scrollIndex = h2Map.get(element1 as HTMLElement);\n if (scrollIndex !== undefined) {\n const scrollState = hierarchy2[scrollIndex];\n if (scrollState && !commonElements.includes(scrollState)) commonElements.push(scrollState);\n }\n }\n\n if (commonElements.length === 0) {\n return { minX: -Infinity, maxX: Infinity, minY: -Infinity, maxY: Infinity };\n }\n\n let minX = -Infinity;\n let maxX = Infinity;\n let minY = -Infinity;\n let maxY = Infinity;\n\n // Pre-calculate suffix sums for deltas\n const getSuffixSums = (scrollHierarchy: ScrollState[]) => {\n const sumsX = new Float64Array(scrollHierarchy.length + 1);\n const sumsY = new Float64Array(scrollHierarchy.length + 1);\n for (let index = scrollHierarchy.length - 1; index >= 0; index--) {\n const item = scrollHierarchy[index];\n if (item && item.element) {\n sumsX[index] = (sumsX[index + 1] ?? 0) + (item.element.scrollLeft - item.initialScrollLeft);\n sumsY[index] = (sumsY[index + 1] ?? 0) + (item.element.scrollTop - item.initialScrollTop);\n } else if (item) {\n sumsX[index] = sumsX[index + 1] ?? 0;\n sumsY[index] = sumsY[index + 1] ?? 0;\n }\n }\n return { sumsX, sumsY };\n };\n\n const h1Suffix = getSuffixSums(hierarchy1);\n const h2Suffix = getSuffixSums(hierarchy2);\n\n for (let index = 0; index < commonElements.length; index++) {\n const scrollState = commonElements[index];\n if (!scrollState) continue;\n\n if (!scrollState.element) continue;\n\n const isH1 = h1Map.has(scrollState.element);\n const suffix = isH1 ? h1Suffix : h2Suffix;\n const sIndex = isH1 ? h1Map.get(scrollState.element) : h2Map.get(scrollState.element);\n\n if (sIndex === undefined || sIndex === -1) continue;\n\n const containerRect = scrollState.containerRect;\n if (!containerRect) continue;\n\n const ancestorDeltaX = suffix.sumsX[sIndex + 1] ?? 0;\n const ancestorDeltaY = suffix.sumsY[sIndex + 1] ?? 0;\n\n // Sticky ancestor adjustment: if this container sits inside a sticky\n // element, its document-space position drifts with window scroll.\n let windowScrollAdjustmentX = 0;\n let windowScrollAdjustmentY = 0;\n\n let hasStickyAncestorFlag: boolean;\n if (typeof scrollState.hasStickyAncestor === \"boolean\") {\n hasStickyAncestorFlag = scrollState.hasStickyAncestor;\n } else if (scrollState.element) {\n let checkElement: Element | null = scrollState.element;\n hasStickyAncestorFlag = false;\n while (checkElement && checkElement !== document.documentElement) {\n const checkStyle = getScrollGeometryStyle(checkElement);\n if (checkStyle.position === \"sticky\") {\n hasStickyAncestorFlag = true;\n break;\n }\n if (checkStyle.position === \"fixed\") break;\n checkElement = checkElement.parentElement;\n }\n } else {\n hasStickyAncestorFlag = false;\n }\n\n if (hasStickyAncestorFlag) {\n windowScrollAdjustmentX = window.scrollX - initWinX;\n windowScrollAdjustmentY = window.scrollY - initWinY;\n }\n\n const containerLiveLeft = containerRect.left - ancestorDeltaX + windowScrollAdjustmentX;\n const containerLiveTop = containerRect.top - ancestorDeltaY + windowScrollAdjustmentY;\n\n const clipLeft = containerLiveLeft + (scrollState.element?.clientLeft ?? 0);\n const clipTop = containerLiveTop + (scrollState.element?.clientTop ?? 0);\n const clipRight = clipLeft + (scrollState.element?.clientWidth ?? containerRect.width);\n const clipBottom = clipTop + (scrollState.element?.clientHeight ?? containerRect.height);\n\n if (minX === -Infinity) {\n minX = clipLeft;\n maxX = clipRight;\n minY = clipTop;\n maxY = clipBottom;\n } else {\n minX = Math.max(minX, clipLeft);\n maxX = Math.min(maxX, clipRight);\n minY = Math.max(minY, clipTop);\n maxY = Math.min(maxY, clipBottom);\n }\n }\n\n return { minX, maxX, minY, maxY };\n}\n\n/**\n * Calculate live document position and visibility clipping.\n */\nexport function getLiveGeometry(\n stableRect: DOMRect | null,\n hierarchy: ScrollState[],\n position: PositionMode = \"static\",\n sticky?: StickyConfig,\n initWinX = 0,\n initWinY = 0,\n hasContainingBlock = false\n): LiveGeometry | null {\n if (!stableRect) return null;\n\n const { deltaX, deltaY } = getTotalScrollDelta(\n hierarchy,\n position,\n sticky,\n initWinX,\n initWinY,\n hasContainingBlock\n );\n\n let vMinX = -Infinity;\n let vMaxX = Infinity;\n let vMinY = -Infinity;\n let vMaxY = Infinity;\n\n const hierarchyLength = hierarchy.length;\n const suffixSumsX = new Float64Array(hierarchyLength + 1);\n const suffixSumsY = new Float64Array(hierarchyLength + 1);\n for (let index = hierarchyLength - 1; index >= 0; index--) {\n const item = hierarchy[index];\n if (item && item.element) {\n suffixSumsX[index] =\n (suffixSumsX[index + 1] ?? 0) + (item.element.scrollLeft - item.initialScrollLeft);\n suffixSumsY[index] =\n (suffixSumsY[index + 1] ?? 0) + (item.element.scrollTop - item.initialScrollTop);\n } else if (item) {\n suffixSumsX[index] = suffixSumsX[index + 1] ?? 0;\n suffixSumsY[index] = suffixSumsY[index + 1] ?? 0;\n }\n }\n\n // Clipping logic - calculate each container's live document position\n // For sticky containers, their doc position changes with window scroll\n // Semantics: initWinX/Y = capture-time scroll, window.scrollX/Y = current scroll\n\n for (let index = 0; index < hierarchyLength; index++) {\n const scrollState = hierarchy[index];\n if (!scrollState) continue;\n\n const containerRect = scrollState.containerRect;\n if (!containerRect) continue;\n\n const ancestorDeltaX = suffixSumsX[index + 1] ?? 0;\n const ancestorDeltaY = suffixSumsY[index + 1] ?? 0;\n\n let windowScrollAdjustmentX = 0;\n let windowScrollAdjustmentY = 0;\n\n let hasStickyAncestorFlag: boolean;\n if (typeof scrollState.hasStickyAncestor === \"boolean\") {\n hasStickyAncestorFlag = scrollState.hasStickyAncestor;\n } else if (scrollState.element) {\n let checkElement: Element | null = scrollState.element;\n hasStickyAncestorFlag = false;\n while (checkElement && checkElement !== document.documentElement) {\n const checkStyle = getScrollGeometryStyle(checkElement);\n if (checkStyle.position === \"sticky\") {\n hasStickyAncestorFlag = true;\n break;\n }\n // Fixed elements break the chain - their children don't move with window scroll\n if (checkStyle.position === \"fixed\") break;\n checkElement = checkElement.parentElement;\n }\n } else {\n hasStickyAncestorFlag = false;\n }\n\n if (hasStickyAncestorFlag) {\n // For containers with sticky ancestors: they move with the sticky element,\n // so their document position changes with window scroll.\n // liveDoc = capturedDoc + (currentScroll - captureScroll)\n windowScrollAdjustmentX = window.scrollX - initWinX;\n windowScrollAdjustmentY = window.scrollY - initWinY;\n }\n\n const containerLiveLeft = containerRect.left - ancestorDeltaX + windowScrollAdjustmentX;\n const containerLiveTop = containerRect.top - ancestorDeltaY + windowScrollAdjustmentY;\n\n const clipLeft = containerLiveLeft + (scrollState.element?.clientLeft ?? 0);\n const clipTop = containerLiveTop + (scrollState.element?.clientTop ?? 0);\n\n if (vMinX === -Infinity) {\n vMinX = clipLeft;\n vMaxX = clipLeft + (scrollState.element?.clientWidth ?? containerRect.width);\n vMinY = clipTop;\n vMaxY = clipTop + (scrollState.element?.clientHeight ?? containerRect.height);\n } else {\n vMinX = Math.max(vMinX, clipLeft);\n vMaxX = Math.min(vMaxX, clipLeft + (scrollState.element?.clientWidth ?? containerRect.width));\n vMinY = Math.max(vMinY, clipTop);\n vMaxY = Math.min(\n vMaxY,\n clipTop + (scrollState.element?.clientHeight ?? containerRect.height)\n );\n }\n }\n\n const left = stableRect.left - deltaX;\n const top = stableRect.top - deltaY;\n const width = stableRect.width;\n const height = stableRect.height;\n\n const isHidden =\n vMinX !== -Infinity &&\n (top + height < vMinY || top > vMaxY || left + width < vMinX || left > vMaxX);\n\n const topClip = Math.max(0, vMinY - top);\n const leftClip = Math.max(0, vMinX - left);\n const bottomClip = Math.max(0, top + height - vMaxY);\n const rightClip = Math.max(0, left + width - vMaxX);\n\n return {\n left,\n top,\n width,\n height,\n clipPath:\n vMinX === -Infinity\n ? \"none\"\n : `inset(${topClip}px ${rightClip}px ${bottomClip}px ${leftClip}px)`,\n isHidden,\n visibleMinX: vMinX,\n visibleMaxX: vMaxX,\n visibleMinY: vMinY,\n visibleMaxY: vMaxY,\n };\n}\n\nfunction parseStickyOffset(rawValue: string): number | null {\n if (rawValue === \"auto\") return null;\n const parsed = parseFloat(rawValue);\n return isNaN(parsed) ? null : parsed;\n}\n\n/** Finds effectively inherited positioning mode (fixed/sticky) from ancestors. */\nexport function getInheritedPositionMode(element: Element): {\n positionMode: PositionMode;\n scrollAnchor: HTMLElement | null;\n containingBlock: HTMLElement | null;\n treeDepth: number;\n anchorAbsoluteDepth: number;\n} {\n const full = getFullHierarchy(element);\n return {\n positionMode: full.positionMode,\n scrollAnchor: full.scrollAnchor,\n containingBlock: full.containingBlock,\n treeDepth: full.treeDepth,\n anchorAbsoluteDepth: full.anchorAbsoluteDepth,\n };\n}\n\nfunction getRootOffset(element: Element): { top: number; left: number } {\n let top = 0;\n let left = 0;\n let curr: Element | null = element;\n while (curr instanceof HTMLElement) {\n top += curr.offsetTop;\n left += curr.offsetLeft;\n const parent: Element | null = curr.offsetParent;\n if (parent instanceof HTMLElement) {\n top += parent.clientTop || 0;\n left += parent.clientLeft || 0;\n }\n curr = parent;\n }\n return { top, left };\n}\n\nfunction collectStickyOnPath(\n from: HTMLElement,\n to: Element\n): Array<{ element: HTMLElement; originalPosition: string }> {\n const out: Array<{ element: HTMLElement; originalPosition: string }> = [];\n let current: Element | null = from;\n while (current) {\n if (current instanceof HTMLElement) {\n const style = getScrollGeometryStyle(current);\n if (style.position === \"sticky\") {\n out.push({ element: current, originalPosition: current.style.position });\n }\n }\n if (current === to) break;\n if (current === document.documentElement) break;\n current = current.parentElement;\n }\n return out;\n}\n\n/**\n * Calculates the exact layout offset of an element relative to a container.\n * Sticky elements on the path are temporarily set to static so the offset chain is consistent, then restored.\n */\nfunction getDistanceFromContainer(targetElement: HTMLElement, containerElement: Element) {\n const stickyElements = collectStickyOnPath(targetElement, containerElement);\n for (const { element } of stickyElements) element.style.position = \"static\";\n try {\n const targetOffset = getRootOffset(targetElement);\n const containerOffset = getRootOffset(containerElement);\n return {\n offsetX: targetOffset.left - containerOffset.left,\n offsetY: targetOffset.top - containerOffset.top,\n };\n } finally {\n for (const { element, originalPosition } of stickyElements) {\n element.style.position = originalPosition || \"sticky\";\n }\n }\n}\n\n/**\n * Compute natural position (anchor to scroller) and optionally capping position (capping to scroller)\n * with sticky set to static along both paths, then restore.\n */\nfunction getDistancesWithSingleToggle(\n scrollAnchor: HTMLElement,\n scrollingContainer: Element,\n cappingContainer: HTMLElement | null\n): {\n naturalPosition: { offsetX: number; offsetY: number };\n cappingNaturalPosition: { offsetX: number; offsetY: number } | null;\n} {\n const seen = new Set<HTMLElement>();\n const list: Array<{ element: HTMLElement; originalPosition: string }> = [];\n for (const { element, originalPosition } of collectStickyOnPath(\n scrollAnchor,\n scrollingContainer\n )) {\n if (!seen.has(element)) {\n seen.add(element);\n list.push({ element, originalPosition });\n }\n }\n if (cappingContainer && cappingContainer !== scrollAnchor) {\n for (const { element, originalPosition } of collectStickyOnPath(\n cappingContainer,\n scrollingContainer\n )) {\n if (!seen.has(element)) {\n seen.add(element);\n list.push({ element, originalPosition });\n }\n }\n }\n for (const { element } of list) element.style.position = \"static\";\n try {\n const scrollOffset = getRootOffset(scrollingContainer as HTMLElement);\n const anchorOffset = getRootOffset(scrollAnchor);\n const naturalPosition = {\n offsetX: anchorOffset.left - scrollOffset.left,\n offsetY: anchorOffset.top - scrollOffset.top,\n };\n let cappingNaturalPosition: { offsetX: number; offsetY: number } | null = null;\n if (cappingContainer && cappingContainer !== scrollingContainer) {\n const capOffset = getRootOffset(cappingContainer);\n cappingNaturalPosition = {\n offsetX: capOffset.left - scrollOffset.left,\n offsetY: capOffset.top - scrollOffset.top,\n };\n }\n return { naturalPosition, cappingNaturalPosition };\n } finally {\n for (const { element, originalPosition } of list) {\n element.style.position = originalPosition || \"sticky\";\n }\n }\n}\n\nexport function deduceGeometry(element: Element): DeducedGeometry {\n const rect = element.getBoundingClientRect();\n const initialWindowX = window.scrollX;\n const initialWindowY = window.scrollY;\n\n const {\n scrollHierarchy,\n positionMode,\n scrollAnchor,\n containingBlock,\n treeDepth,\n anchorAbsoluteDepth,\n } = getFullHierarchy(element);\n\n let stickyConfig;\n if (positionMode === \"sticky\" && scrollAnchor) {\n const style = getScrollGeometryStyle(scrollAnchor);\n\n let scrollingContainer: Element = document.documentElement;\n let currentParent = scrollAnchor.parentElement;\n while (currentParent && currentParent !== document.documentElement) {\n if (establishesScrollingBox(currentParent)) {\n scrollingContainer = currentParent;\n break;\n }\n currentParent = currentParent.parentElement;\n }\n\n const cappingContainer = scrollAnchor.parentElement || document.documentElement;\n const isDocLevelCapping =\n cappingContainer === document.documentElement || cappingContainer === document.body;\n const cappingStyle =\n cappingContainer instanceof HTMLElement ? getScrollGeometryStyle(cappingContainer) : null;\n const isCappingContainerSticky = cappingStyle?.position === \"sticky\";\n\n const anchorRect = scrollAnchor.getBoundingClientRect();\n const childRelTop = rect.top - anchorRect.top;\n const childRelLeft = rect.left - anchorRect.left;\n const childRelBottom = anchorRect.bottom - rect.bottom;\n const childRelRight = anchorRect.right - rect.right;\n\n const topSticky = parseStickyOffset(style.top);\n const bottomSticky = parseStickyOffset(style.bottom);\n const leftSticky = parseStickyOffset(style.left);\n const rightSticky = parseStickyOffset(style.right);\n\n const needCappingDistance =\n !isDocLevelCapping && cappingContainer !== scrollingContainer && !isCappingContainerSticky;\n\n let naturalPosition: { offsetX: number; offsetY: number };\n let cappingNaturalPosition: { offsetX: number; offsetY: number } | null = null;\n if (needCappingDistance) {\n const dist = getDistancesWithSingleToggle(\n scrollAnchor,\n scrollingContainer,\n cappingContainer as HTMLElement\n );\n naturalPosition = dist.naturalPosition;\n cappingNaturalPosition = dist.cappingNaturalPosition;\n } else {\n naturalPosition = getDistanceFromContainer(scrollAnchor, scrollingContainer);\n }\n\n let containerHeight: number;\n let containerWidth: number;\n const isWindowLevel = scrollingContainer === document.documentElement;\n\n if (isDocLevelCapping) {\n containerHeight = window.innerHeight;\n containerWidth = window.innerWidth;\n } else if (cappingContainer === scrollingContainer || isCappingContainerSticky) {\n containerHeight = (scrollingContainer as HTMLElement).clientHeight;\n containerWidth = (scrollingContainer as HTMLElement).clientWidth;\n } else if (isWindowLevel && cappingNaturalPosition) {\n const cappingHeight = (cappingContainer as HTMLElement).clientHeight;\n const cappingWidth = (cappingContainer as HTMLElement).clientWidth;\n const parentTrackHeight =\n cappingNaturalPosition.offsetY + cappingHeight - naturalPosition.offsetY;\n const parentTrackWidth =\n cappingNaturalPosition.offsetX + cappingWidth - naturalPosition.offsetX;\n containerHeight = -parentTrackHeight;\n containerWidth = -parentTrackWidth;\n } else if (cappingNaturalPosition) {\n const scrollerHeight = (scrollingContainer as HTMLElement).clientHeight;\n const scrollerWidth = (scrollingContainer as HTMLElement).clientWidth;\n const cappingHeight = (cappingContainer as HTMLElement).clientHeight;\n const cappingWidth = (cappingContainer as HTMLElement).clientWidth;\n const parentTrackHeight =\n cappingNaturalPosition.offsetY + cappingHeight - naturalPosition.offsetY;\n const parentTrackWidth =\n cappingNaturalPosition.offsetX + cappingWidth - naturalPosition.offsetX;\n containerHeight = parentTrackHeight < scrollerHeight ? -parentTrackHeight : scrollerHeight;\n containerWidth = parentTrackWidth < scrollerWidth ? -parentTrackWidth : scrollerWidth;\n } else {\n containerHeight = (scrollingContainer as HTMLElement).clientHeight;\n containerWidth = (scrollingContainer as HTMLElement).clientWidth;\n }\n\n stickyConfig = {\n top: topSticky === null ? null : topSticky + childRelTop,\n bottom: bottomSticky === null ? null : bottomSticky + childRelBottom,\n left: leftSticky === null ? null : leftSticky + childRelLeft,\n right: rightSticky === null ? null : rightSticky + childRelRight,\n naturalTop: naturalPosition.offsetY + childRelTop,\n naturalLeft: naturalPosition.offsetX + childRelLeft,\n containerWidth,\n containerHeight,\n elementWidth: anchorRect.width,\n elementHeight: anchorRect.height,\n anchorAbsoluteDepth: anchorAbsoluteDepth,\n };\n }\n\n return {\n rect: getScrollAwareRect(rect),\n scrollHierarchy,\n position: positionMode,\n stickyConfig,\n initialWindowX,\n initialWindowY,\n depth: treeDepth,\n hasContainingBlock: !!containingBlock,\n containingBlock,\n };\n}\n\n/**\n * Clamp a viewport-relative point to the visibility window of a geometry,\n * accounting for the current viewport scroll.\n */\nexport function clampPointToGeometry(\n point: { x: number; y: number },\n geometry: LiveGeometry | null | undefined,\n viewport: { scrollX: number; scrollY: number }\n): { x: number; y: number } {\n if (!geometry) return point;\n\n return {\n x: Math.max(\n geometry.visibleMinX - viewport.scrollX,\n Math.min(point.x, geometry.visibleMaxX - viewport.scrollX)\n ),\n y: Math.max(\n geometry.visibleMinY - viewport.scrollY,\n Math.min(point.y, geometry.visibleMaxY - viewport.scrollY)\n ),\n };\n}\n","import type { SyncSource, CursorContext, Remap, ScrollState } from \"../../shared/types/index.js\";\nimport type {\n MeasurementLine as BaseMeasurementLine,\n MeasurementResult as BaseMeasurementResult,\n} from \"@oyerinde/caliper-schema\";\nimport { getTotalScrollDelta } from \"../../geometry/utils/scroll-aware.js\";\n\nexport type MeasurementLine = BaseMeasurementLine;\n\nexport type MeasurementResult = Remap<\n BaseMeasurementResult,\n {\n primary: DOMRect;\n secondary: DOMRect | null;\n primaryHierarchy: ScrollState[];\n secondaryHierarchy: ScrollState[];\n secondaryElement: Element | null;\n }\n>;\n\n/**\n * Computes the geometric measurement lines between two rectangles based\n * on their relationship (parent, child, or sibling).\n *\n * @param context - The cursor context (parent/child/sibling).\n * @param primary - The DOMRect of the selected element.\n * @param secondary - The DOMRect of the target element.\n * @returns An array of MeasurementLine objects.\n */\nexport function createMeasurementLines(\n context: CursorContext,\n primary: DOMRect,\n secondary: DOMRect | null\n): MeasurementLine[] {\n if (!context || !secondary) {\n return [];\n }\n\n const lines: MeasurementLine[] = [];\n\n if (context === \"sibling\") {\n const distance = calculateSiblingDistance(primary, secondary);\n lines.push(distance);\n } else if (context === \"parent\" || context === \"child\") {\n const padding = calculatePaddingLines(primary, secondary, context);\n lines.push(...padding);\n }\n\n return lines;\n}\n\n/**\n * Calculate distance between two elements using Top/Bottom faces\n */\nfunction calculateSiblingDistance(primary: DOMRect, sibling: DOMRect): MeasurementLine {\n const overlapXStart = Math.max(primary.left, sibling.left);\n const overlapXEnd = Math.min(primary.right, sibling.right);\n const hasOverlapX = overlapXEnd > overlapXStart;\n\n const overlapYStart = Math.max(primary.top, sibling.top);\n const overlapYEnd = Math.min(primary.bottom, sibling.bottom);\n const hasOverlapY = overlapYEnd > overlapYStart;\n\n const syncBase = { startSync: \"primary\", endSync: \"secondary\" } as const;\n\n if (hasOverlapX && !hasOverlapY) {\n const centerX = (overlapXStart + overlapXEnd) / 2;\n const distBtoT = Math.abs(sibling.top - primary.bottom);\n const distTtoB = Math.abs(primary.top - sibling.bottom);\n\n const startY = distBtoT < distTtoB ? primary.bottom : primary.top;\n const endY = distBtoT < distTtoB ? sibling.top : sibling.bottom;\n\n return {\n type: \"distance\",\n value: Math.min(distBtoT, distTtoB),\n start: { x: centerX, y: startY },\n end: { x: centerX, y: endY },\n ...syncBase,\n };\n }\n\n if (hasOverlapY && !hasOverlapX) {\n const centerY = (overlapYStart + overlapYEnd) / 2;\n const distRtoL = Math.abs(sibling.left - primary.right);\n const distLtoR = Math.abs(primary.left - sibling.right);\n\n const startX = distRtoL < distLtoR ? primary.right : primary.left;\n const endX = distRtoL < distLtoR ? sibling.left : sibling.right;\n\n return {\n type: \"distance\",\n value: Math.min(distRtoL, distLtoR),\n start: { x: startX, y: centerY },\n end: { x: endX, y: centerY },\n ...syncBase,\n };\n }\n\n const pFaces = [\n { x: (primary.left + primary.right) / 2, y: primary.top },\n { x: (primary.left + primary.right) / 2, y: primary.bottom },\n ];\n const sFaces = [\n { x: (sibling.left + sibling.right) / 2, y: sibling.top },\n { x: (sibling.left + sibling.right) / 2, y: sibling.bottom },\n ];\n\n let minD2 = Infinity;\n let bestP = pFaces[0];\n let bestS = sFaces[0];\n\n for (const p of pFaces) {\n for (const s of sFaces) {\n const dx = p.x - s.x;\n const dy = p.y - s.y;\n const d2 = dx * dx + dy * dy;\n if (d2 < minD2) {\n minD2 = d2;\n bestP = p;\n bestS = s;\n }\n }\n }\n\n const pFace = bestP ?? pFaces[0]!;\n const sFace = bestS ?? sFaces[0]!;\n\n return {\n type: \"distance\",\n value: Math.sqrt(minD2),\n start: { x: pFace.x, y: pFace.y },\n end: { x: sFace.x, y: sFace.y },\n ...syncBase,\n };\n}\n\n/**\n * Calculate padding lines (left, top, right, bottom)\n */\nfunction calculatePaddingLines(\n primary: DOMRect,\n container: DOMRect,\n context: \"parent\" | \"child\"\n): MeasurementLine[] {\n if (context === \"parent\") {\n // Primary element's distance to parent edges\n return [\n {\n type: \"left\",\n value: Math.abs(primary.left - container.left),\n start: { x: container.left, y: primary.top + primary.height / 2 },\n end: { x: primary.left, y: primary.top + primary.height / 2 },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n {\n type: \"top\",\n value: Math.abs(primary.top - container.top),\n start: { x: primary.left + primary.width / 2, y: container.top },\n end: { x: primary.left + primary.width / 2, y: primary.top },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n {\n type: \"right\",\n value: Math.abs(container.right - primary.right),\n start: { x: primary.right, y: primary.top + primary.height / 2 },\n end: { x: container.right, y: primary.top + primary.height / 2 },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n {\n type: \"bottom\",\n value: Math.abs(container.bottom - primary.bottom),\n start: { x: primary.left + primary.width / 2, y: primary.bottom },\n end: { x: primary.left + primary.width / 2, y: container.bottom },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n ];\n } else {\n // Child element's distance to primary (selected) element edges\n return [\n {\n type: \"left\",\n value: Math.abs(container.left - primary.left),\n start: { x: primary.left, y: container.top + container.height / 2 },\n end: { x: container.left, y: container.top + container.height / 2 },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n {\n type: \"top\",\n value: Math.abs(container.top - primary.top),\n start: { x: container.left + container.width / 2, y: primary.top },\n end: { x: container.left + container.width / 2, y: container.top },\n startSync: \"primary\",\n endSync: \"secondary\",\n },\n {\n type: \"right\",\n value: Math.abs(primary.right - container.right),\n start: { x: container.right, y: container.top + container.height / 2 },\n end: { x: primary.right, y: container.top + container.height / 2 },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n {\n type: \"bottom\",\n value: Math.abs(primary.bottom - container.bottom),\n start: { x: container.left + container.width / 2, y: container.bottom },\n end: { x: container.left + container.width / 2, y: primary.bottom },\n startSync: \"secondary\",\n endSync: \"primary\",\n },\n ];\n }\n}\n\n/**\n * Calculate the live coordinates of a point in a line, accounting for scroll.\n */\nexport function getLivePoint(\n pt: { x: number; y: number },\n owner: SyncSource | undefined,\n line: Pick<MeasurementLine, \"type\" | \"start\" | \"end\">,\n primaryDelta: { deltaX: number; deltaY: number },\n secondaryDelta: { deltaX: number; deltaY: number },\n scrollX: number = 0,\n scrollY: number = 0\n) {\n const syncX = owner === \"secondary\" ? secondaryDelta : primaryDelta;\n const syncY = owner === \"secondary\" ? secondaryDelta : primaryDelta;\n\n return {\n x: pt.x - (syncX?.deltaX ?? 0) - scrollX,\n y: pt.y - (syncY?.deltaY ?? 0) - scrollY,\n };\n}\n\n/**\n * Pure math helper to calculate the live distance of a line.\n */\nexport function getLiveLineValue(line: MeasurementLine, result: MeasurementResult | null): number {\n if (!result) {\n return line.value;\n }\n\n const primaryDelta = getTotalScrollDelta(\n result.primaryHierarchy,\n result.primaryPosition,\n result.primarySticky,\n result.primaryWinX,\n result.primaryWinY,\n !!result.primaryHasContainingBlock\n );\n\n const secondaryDelta = getTotalScrollDelta(\n result.secondaryHierarchy,\n result.secondaryPosition,\n result.secondarySticky,\n result.secondaryWinX,\n result.secondaryWinY,\n !!result.secondaryHasContainingBlock\n );\n\n const startPoint = getLivePoint(line.start, line.startSync, line, primaryDelta, secondaryDelta);\n\n const endPoint = getLivePoint(line.end, line.endSync, line, primaryDelta, secondaryDelta);\n\n const dx = Math.abs(startPoint.x - endPoint.x);\n const dy = Math.abs(startPoint.y - endPoint.y);\n\n if (line.type === \"top\" || line.type === \"bottom\") {\n return dy;\n }\n if (line.type === \"left\" || line.type === \"right\") {\n return dx;\n }\n\n return Math.sqrt(dx * dx + dy * dy);\n}\n","import type { CursorContext } from \"../../shared/types/index.js\";\nimport { resolveAmbiguousContext } from \"../../cursor-context/utils/priority-rules.js\";\nimport { createMeasurementLines, type MeasurementResult } from \"./measurement-result.js\";\nimport { deduceGeometry } from \"../../geometry/utils/scroll-aware.js\";\n\n/**\n * Computes a measurement result for a selected element relative to another\n * element at specific cursor coordinates. It automatically resolves the\n * context (sibling, parent, etc.).\n *\n * @param selectedElement - The primary element being measured from.\n * @param cursorX - Current X coordinate.\n * @param cursorY - Current Y coordinate.\n * @param previousContext - Optional context from previous frame to stabilize results.\n * @param previousElement - Optional element from previous frame to stabilize results.\n * @returns An object containing the secondary element and the measurement result, or null if invalid.\n */\nexport function createMeasurement(\n selectedElement: Element,\n cursorX: number,\n cursorY: number,\n previousContext: CursorContext | null = null,\n previousElement: Element | null = null\n): { element: Element; result: MeasurementResult } | null {\n const result = resolveAmbiguousContext(\n selectedElement,\n cursorX,\n cursorY,\n previousContext,\n previousElement\n );\n\n if (!result) {\n return null;\n }\n\n const { context, element: secondaryElement } = result;\n return createMeasurementBetween(selectedElement, secondaryElement, context);\n}\n\n/**\n * Creates a measurement result between two specific elements with a defined context.\n *\n * If no context is provided, it will be automatically detected based on the\n * containment relationship (parent/child/sibling).\n *\n * @param primaryElement - The primary element.\n * @param secondaryElement - The target element.\n * @param context - Optional explicit context override.\n * @returns The measurement result object.\n */\nexport function createMeasurementBetween(\n primaryElement: Element,\n secondaryElement: Element,\n context?: CursorContext\n): { element: Element; result: MeasurementResult } | null {\n if (secondaryElement === primaryElement) return null;\n\n const resolvedContext =\n context ??\n (primaryElement.contains(secondaryElement)\n ? \"child\"\n : secondaryElement.contains(primaryElement)\n ? \"parent\"\n : \"sibling\");\n\n const primaryGeom = deduceGeometry(primaryElement);\n const secondaryGeom = deduceGeometry(secondaryElement);\n\n const primary = primaryGeom.rect;\n const secondary = secondaryGeom.rect;\n\n const lines = createMeasurementLines(resolvedContext, primary, secondary);\n\n return {\n element: secondaryElement,\n result: {\n context: resolvedContext,\n lines,\n primary,\n secondary,\n timestamp: Date.now(),\n primaryHierarchy: primaryGeom.scrollHierarchy,\n secondaryHierarchy: secondaryGeom.scrollHierarchy,\n secondaryElement,\n primaryPosition: primaryGeom.position,\n secondaryPosition: secondaryGeom.position,\n primarySticky: primaryGeom.stickyConfig,\n secondarySticky: secondaryGeom.stickyConfig,\n primaryWinX: primaryGeom.initialWindowX,\n primaryWinY: primaryGeom.initialWindowY,\n secondaryWinX: secondaryGeom.initialWindowX,\n secondaryWinY: secondaryGeom.initialWindowY,\n },\n };\n}\n","/**\n * Measurement state machine\n * IDLE → ARMED → MEASURING → FROZEN → IDLE\n */\nexport type MeasurementState = \"IDLE\" | \"ARMED\" | \"MEASURING\" | \"FROZEN\";\n\nexport interface StateMachine {\n getState: () => MeasurementState;\n transitionTo: (newState: MeasurementState) => boolean;\n isIdle: () => boolean;\n isArmed: () => boolean;\n isMeasuring: () => boolean;\n isFrozen: () => boolean;\n}\n\nexport function createStateMachine(): StateMachine {\n let state: MeasurementState = \"IDLE\";\n\n function getState(): MeasurementState {\n return state;\n }\n\n function transitionTo(newState: MeasurementState): boolean {\n const validTransitions: Record<MeasurementState, MeasurementState[]> = {\n IDLE: [\"ARMED\", \"FROZEN\"],\n ARMED: [\"MEASURING\", \"FROZEN\", \"IDLE\"],\n MEASURING: [\"FROZEN\", \"IDLE\"],\n FROZEN: [\"MEASURING\", \"IDLE\"],\n };\n\n const allowed = validTransitions[state];\n if (allowed && allowed.includes(newState)) {\n state = newState;\n return true;\n }\n\n return false;\n }\n\n function isIdle(): boolean {\n return state === \"IDLE\";\n }\n\n function isArmed(): boolean {\n return state === \"ARMED\";\n }\n\n function isMeasuring(): boolean {\n return state === \"MEASURING\";\n }\n\n function isFrozen(): boolean {\n return state === \"FROZEN\";\n }\n\n return {\n getState,\n transitionTo,\n isIdle,\n isArmed,\n isMeasuring,\n isFrozen,\n };\n}\n","/**\n * Calculator state machine\n */\n\nexport type CalculatorOperation = \"+\" | \"-\" | \"*\" | \"/\";\n\nexport interface CalculatorState {\n baseValue: number;\n operation: CalculatorOperation | null;\n inputValue: string;\n result: number | null;\n isActive: boolean;\n}\n\nexport type CalculatorAction =\n | { type: \"OPEN\"; baseValue: number }\n | { type: \"INPUT_DIGIT\"; digit: string }\n | { type: \"INPUT_OPERATION\"; operation: CalculatorOperation }\n | { type: \"BACKSPACE\" }\n | { type: \"DELETE\" }\n | { type: \"ENTER\" }\n | { type: \"SYNC_VALUE\"; value: number }\n | { type: \"CLOSE\" };\n\nexport function createCalculatorState(): {\n getState: () => CalculatorState;\n dispatch: (action: CalculatorAction) => CalculatorState;\n calculate: () => number | null;\n} {\n let state: CalculatorState = {\n baseValue: 0,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: false,\n };\n\n function calculate(): number | null {\n const val = state.inputValue === \"\" ? \"0\" : state.inputValue;\n const inputNum = parseFloat(val);\n if (isNaN(inputNum)) {\n return null;\n }\n\n switch (state.operation) {\n case \"+\":\n return state.baseValue + inputNum;\n case \"-\":\n return state.baseValue - inputNum;\n case \"*\":\n return state.baseValue * inputNum;\n case \"/\":\n return inputNum !== 0 ? state.baseValue / inputNum : null;\n default:\n return null;\n }\n }\n\n function dispatch(action: CalculatorAction): CalculatorState {\n switch (action.type) {\n case \"OPEN\":\n state = {\n baseValue: action.baseValue,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: true,\n };\n break;\n\n case \"SYNC_VALUE\":\n // Only sync if the user hasn't started an operation yet\n if (state.isActive && state.operation === null) {\n state = {\n ...state,\n baseValue: action.value,\n };\n }\n break;\n\n case \"INPUT_DIGIT\":\n if (!state.isActive || !state.operation) return state;\n\n const isDot = action.digit === \".\";\n const alreadyHasDot = (state.inputValue || \"\").includes(\".\");\n\n if (isDot && alreadyHasDot) return state;\n\n if (state.result !== null) {\n state = {\n ...state,\n inputValue: isDot ? \"0.\" : action.digit,\n result: null,\n };\n } else {\n state = {\n ...state,\n inputValue:\n state.inputValue === \"0\" && !isDot ? action.digit : state.inputValue + action.digit,\n };\n }\n break;\n\n case \"INPUT_OPERATION\":\n if (!state.isActive) return state;\n\n const hasResult = state.result !== null;\n // Allow switching if input is empty or just a single \"0\" (placeholder/mistake)\n const isSwitchable = state.inputValue === \"\" || state.inputValue === \"0\";\n\n if (hasResult || (state.operation && !isSwitchable)) {\n // If we have a result or meaningful input, commit current calc as new base\n const newBase = hasResult ? state.result! : (calculate() ?? state.baseValue);\n state = {\n baseValue: newBase,\n operation: action.operation,\n inputValue: \"\",\n result: null,\n isActive: true,\n };\n } else {\n // Just switch the operation\n state = {\n ...state,\n operation: action.operation,\n inputValue: \"\",\n result: null,\n };\n }\n break;\n\n case \"BACKSPACE\":\n if (!state.isActive) return state;\n\n if (state.result !== null) {\n // Remove result first, keeping operation and input\n state = {\n ...state,\n result: null,\n };\n } else if (state.inputValue.length > 0) {\n // Remove last digit\n state = {\n ...state,\n inputValue: state.inputValue.slice(0, -1),\n };\n } else if (state.operation) {\n // Remove operation\n state = {\n ...state,\n operation: null,\n };\n } else {\n // Close if nothing left\n state = {\n ...state,\n isActive: false,\n };\n }\n break;\n\n case \"DELETE\":\n if (!state.isActive) return state;\n state = {\n baseValue: state.baseValue,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: false,\n };\n break;\n\n case \"ENTER\":\n if (!state.isActive || !state.operation) {\n return state;\n }\n const result = calculate();\n state = {\n ...state,\n result: result,\n };\n break;\n\n case \"CLOSE\":\n state = {\n baseValue: 0,\n operation: null,\n inputValue: \"\",\n result: null,\n isActive: false,\n };\n break;\n }\n\n return state;\n }\n\n function getState(): CalculatorState {\n return { ...state };\n }\n\n return { getState, dispatch, calculate };\n}\n","import {\n createCalculatorState,\n type CalculatorState,\n type CalculatorOperation,\n} from \"../../calculator-model/utils/calculator-state.js\";\nimport type { MeasurementLine } from \"./measurement-result.js\";\n\nexport interface CalculatorIntegration {\n getState: () => CalculatorState;\n open: (baseValue: number) => void;\n handleInput: (key: string) => void;\n handleBackspace: () => void;\n handleDelete: () => void;\n handleEnter: () => void;\n close: () => void;\n syncValue: (value: number) => void;\n getResult: () => number | null;\n}\n\n/**\n * Calculator Integration Factory\n *\n * Creates an integration bridge between the raw calculator state machine and\n * the measurement system. It handles mapping user inputs (keys, actions)\n * to calculator state transitions.\n *\n * @returns A CalculatorIntegration instance.\n */\nexport function createCalculatorIntegration(): CalculatorIntegration {\n const calculator = createCalculatorState();\n\n function open(baseValue: number) {\n calculator.dispatch({ type: \"OPEN\", baseValue });\n }\n\n function handleInput(key: string) {\n if (/^[0-9.]$/.test(key)) {\n calculator.dispatch({ type: \"INPUT_DIGIT\", digit: key });\n } else if (/^[+\\-*/]$/.test(key)) {\n calculator.dispatch({\n type: \"INPUT_OPERATION\",\n operation: key as CalculatorOperation,\n });\n }\n }\n\n function handleBackspace() {\n calculator.dispatch({ type: \"BACKSPACE\" });\n }\n\n function handleDelete() {\n calculator.dispatch({ type: \"DELETE\" });\n }\n\n function handleEnter() {\n calculator.dispatch({ type: \"ENTER\" });\n }\n\n function close() {\n calculator.dispatch({ type: \"CLOSE\" });\n }\n\n function syncValue(value: number) {\n calculator.dispatch({ type: \"SYNC_VALUE\", value });\n }\n\n function getResult(): number | null {\n const state = calculator.getState();\n return state.result;\n }\n\n return {\n getState: calculator.getState,\n open,\n handleInput,\n handleBackspace,\n handleDelete,\n handleEnter,\n close,\n syncValue,\n getResult,\n };\n}\n\n/**\n * Opens and initializes the calculator using the value from a specific measurement line.\n *\n * @param calculator - The calculator integration instance to open.\n * @param line - The measurement line providing the base numeric value.\n */\nexport function openCalculatorFromLine(calculator: CalculatorIntegration, line: MeasurementLine) {\n calculator.open(line.value);\n}\n","import { ProjectionState, ProjectionDirection } from \"../../shared/types/index.js\";\n\nexport type ProjectionListener = (state: ProjectionState) => void;\n\nexport interface ProjectionSystem {\n getState: () => ProjectionState;\n setDirection: (direction: ProjectionDirection | null) => void;\n setElement: (element: HTMLElement | null) => void;\n appendValue: (char: string, max?: number) => void;\n capValue: (max: number) => void;\n backspace: () => void;\n clear: () => void;\n onUpdate: (listener: ProjectionListener) => () => void;\n}\n\n/**\n * Projection System Factory\n *\n * Creates a system that manages measurement projections (e.g., projecting a\n * line from an element to a specific coordinate). It tracks the direction,\n * numeric value, and target element for the projection.\n *\n * @returns A ProjectionSystem instance.\n */\nexport function createProjectionSystem(): ProjectionSystem {\n let state: ProjectionState = {\n direction: null,\n value: \"\",\n element: null,\n };\n\n const listeners = new Set<ProjectionListener>();\n\n const notify = () => {\n listeners.forEach((listener) => listener({ ...state }));\n };\n\n return {\n getState: () => ({ ...state }),\n setDirection: (direction) => {\n state.direction = direction;\n // When direction changes but no value exists, we keep value empty.\n // If user switches direction while typing, we keep the value.\n notify();\n },\n setElement: (element) => {\n state.element = element;\n notify();\n },\n appendValue: (char, max) => {\n if (/^[0-9.]$/.test(char)) {\n const isDot = char === \".\";\n const alreadyHasDot = state.value.includes(\".\");\n\n if (isDot && alreadyHasDot) return;\n\n const newValueStr = state.value + char;\n const newValueNum = parseFloat(newValueStr) || 0;\n\n if (max !== undefined && newValueNum > max) {\n state.value = Math.floor(max).toString();\n } else {\n state.value = newValueStr;\n }\n notify();\n }\n },\n capValue: (max) => {\n const currentVal = parseFloat(state.value) || 0;\n if (currentVal > max) {\n state.value = Math.floor(max).toString();\n notify();\n }\n },\n backspace: () => {\n if (state.value.length > 0) {\n state.value = state.value.slice(0, -1);\n notify();\n } else if (state.direction) {\n // If value is empty, backspace clears the direction\n state.direction = null;\n notify();\n }\n },\n clear: () => {\n state = { direction: null, value: \"\", element: null };\n notify();\n },\n onUpdate: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n","/**\n * Generates a unique ID with an optional prefix.\n */\nexport function generateId(prefix: string = \"\"): string {\n const randomPart = Math.random().toString(36).substring(2, 11);\n return prefix ? `${prefix}-${randomPart}` : randomPart;\n}\n","import { RulerLine, RulerState } from \"../../shared/types/index.js\";\nimport { MAX_RULER_LINES } from \"../../shared/constants/index.js\";\nimport { generateId } from \"../../shared/utils/id.js\";\n\nexport type RulerListener = (state: RulerState) => void;\n\nexport interface RulerSystem {\n getState: () => RulerState;\n addPair: (x: number, y: number) => string | null;\n updateLine: (id: string, position: number) => void;\n removeLine: (id: string) => void;\n clear: () => void;\n onUpdate: (listener: RulerListener) => () => void;\n}\n\n/**\n * Ruler System Factory\n *\n * Creates a system that manages customized ruler lines on the viewport.\n * Allows users to drop horizontal and vertical guides and track their positions.\n *\n * @returns A RulerSystem instance.\n */\nexport function createRulerSystem(): RulerSystem {\n let state: RulerState = {\n lines: [],\n };\n\n const listeners = new Set<RulerListener>();\n\n const notify = () => {\n listeners.forEach((listener) => listener({ lines: [...state.lines] }));\n };\n\n return {\n getState: () => ({ lines: [...state.lines] }),\n addPair: (x, y) => {\n if (state.lines.length >= MAX_RULER_LINES) return null;\n\n const hLine: RulerLine = {\n id: generateId(\"ruler-h\"),\n type: \"horizontal\",\n position: y,\n };\n const vLine: RulerLine = {\n id: generateId(\"ruler-v\"),\n type: \"vertical\",\n position: x,\n };\n\n state.lines.push(hLine, vLine);\n notify();\n return vLine.id;\n },\n updateLine: (id, position) => {\n const index = state.lines.findIndex((line) => line.id === id);\n if (index !== -1 && state.lines[index]) {\n state.lines[index] = { ...state.lines[index]!, position };\n notify();\n }\n },\n removeLine: (id) => {\n state.lines = state.lines.filter((line) => line.id !== id);\n notify();\n },\n clear: () => {\n state.lines = [];\n notify();\n },\n onUpdate: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n","import { createReader } from \"../../scheduling/reader.js\";\nimport { createFrequencyControlledReader } from \"../../scheduling/frequency-control.js\";\nimport type { CursorContext } from \"../../shared/types/index.js\";\nimport type { MeasurementResult } from \"./measurement-result.js\";\nimport { createMeasurementLines } from \"./measurement-result.js\";\nimport { createMeasurement } from \"./create-measurement.js\";\nimport { createStateMachine, type MeasurementState } from \"./state-machine.js\";\nimport {\n createCalculatorIntegration,\n type CalculatorIntegration,\n} from \"./calculator-integration.js\";\nimport { createProjectionSystem, type ProjectionSystem } from \"./projection-system.js\";\nimport { createRulerSystem, type RulerSystem } from \"../../ruler-model/utils/ruler-system.js\";\n\nexport type { MeasurementState };\n\nexport type MeasurementSystemListener = () => void;\n\nexport interface MeasurementSystem {\n measure: (selectedElement: Element, cursor: { x: number; y: number }) => void;\n abort: () => void;\n stop: () => void;\n freeze: () => void;\n unfreeze: (isAltDown: boolean) => void;\n cleanup: () => void;\n getState: () => MeasurementState;\n getCurrentResult: () => MeasurementResult | null;\n getSecondaryElement: () => Element | null;\n getCalculator: () => CalculatorIntegration;\n getProjection: () => ProjectionSystem;\n getRuler: () => RulerSystem;\n onStateChange: (listener: MeasurementSystemListener) => () => void;\n updatePrimaryRect: (rect: DOMRect) => void;\n updateSecondaryRect: (rect: DOMRect) => void;\n applyResult: (result: MeasurementResult) => void;\n}\n\n/**\n * Measurement System Factory\n *\n * Creates a system that tracks measurements between a primary selected element\n * and other elements under the cursor. It manages the lifecycle of the\n * measurement (active, frozen, aborted) and integrates with the secondary systems\n * like calculator and projection.\n *\n * @returns A MeasurementSystem instance.\n */\nexport function createMeasurementSystem(): MeasurementSystem {\n const baseReader = createReader();\n const reader = createFrequencyControlledReader(baseReader);\n const stateMachine = createStateMachine();\n const calculator = createCalculatorIntegration();\n const projection = createProjectionSystem();\n const ruler = createRulerSystem();\n const listeners = new Set<MeasurementSystemListener>();\n\n let currentResult: MeasurementResult | null = null;\n let previousContext: CursorContext | null = null;\n let previousElement: Element | null = null;\n\n function notifyListeners() {\n listeners.forEach((listener) => listener());\n }\n\n function measure(selectedElement: Element, cursor: { x: number; y: number }): void {\n stateMachine.transitionTo(\"ARMED\");\n\n reader.scheduleRead(() => {\n const start = performance.now();\n\n const measurement = createMeasurement(\n selectedElement,\n cursor.x,\n cursor.y,\n previousContext,\n previousElement\n );\n\n // reader.recordFrameTime(performance.now());\n\n if (measurement) {\n const { result, element } = measurement;\n\n if (!stateMachine.isMeasuring() && !stateMachine.isArmed()) {\n return;\n }\n\n if (\n stateMachine.isMeasuring() &&\n element === previousElement &&\n result.context === previousContext\n ) {\n return;\n }\n\n currentResult = result;\n previousContext = result.context;\n previousElement = element;\n stateMachine.transitionTo(\"MEASURING\");\n notifyListeners();\n }\n });\n }\n\n function freeze() {\n const state = stateMachine.getState();\n if (state === \"MEASURING\" || state === \"IDLE\" || state === \"ARMED\") {\n reader.cancel();\n stateMachine.transitionTo(\"FROZEN\");\n notifyListeners();\n }\n }\n\n function unfreeze(isAltDown: boolean) {\n if (stateMachine.isFrozen()) {\n stateMachine.transitionTo(isAltDown ? \"MEASURING\" : \"IDLE\");\n notifyListeners();\n }\n }\n\n function abort() {\n reader.cancel();\n stateMachine.transitionTo(\"IDLE\");\n calculator.close();\n projection.clear();\n ruler.clear();\n currentResult = null;\n previousContext = null;\n previousElement = null;\n notifyListeners();\n }\n\n function stop() {\n reader.cancel();\n if (stateMachine.getState() === \"MEASURING\") {\n stateMachine.transitionTo(\"IDLE\");\n notifyListeners();\n }\n }\n\n function cleanup() {\n abort();\n listeners.clear();\n currentResult = null;\n previousContext = null;\n previousElement = null;\n }\n\n function getState(): MeasurementState {\n return stateMachine.getState();\n }\n\n function getCurrentResult(): MeasurementResult | null {\n return currentResult;\n }\n\n function getSecondaryElement(): Element | null {\n return previousElement;\n }\n\n function getCalculator(): CalculatorIntegration {\n return calculator;\n }\n\n function getProjection(): ProjectionSystem {\n return projection;\n }\n\n function getRuler(): RulerSystem {\n return ruler;\n }\n\n function onStateChange(listener: MeasurementSystemListener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n\n function updatePrimaryRect(rect: DOMRect) {\n if (!currentResult) return;\n const newPrimary = new DOMRect(\n rect.left + window.scrollX,\n rect.top + window.scrollY,\n rect.width,\n rect.height\n );\n currentResult = {\n ...currentResult,\n primary: newPrimary,\n primaryWinX: window.scrollX,\n primaryWinY: window.scrollY,\n lines: createMeasurementLines(currentResult.context, newPrimary, currentResult.secondary),\n };\n notifyListeners();\n }\n\n function updateSecondaryRect(rect: DOMRect) {\n if (!currentResult) return;\n const newSecondary = new DOMRect(\n rect.left + window.scrollX,\n rect.top + window.scrollY,\n rect.width,\n rect.height\n );\n currentResult = {\n ...currentResult,\n secondary: newSecondary,\n secondaryWinX: window.scrollX,\n secondaryWinY: window.scrollY,\n lines: createMeasurementLines(currentResult.context, currentResult.primary, newSecondary),\n };\n notifyListeners();\n }\n\n function applyResult(result: MeasurementResult) {\n currentResult = result;\n stateMachine.transitionTo(\"MEASURING\");\n notifyListeners();\n }\n\n return {\n measure,\n abort,\n stop,\n freeze,\n unfreeze,\n cleanup,\n getState,\n getCurrentResult,\n getSecondaryElement,\n getCalculator,\n getProjection,\n getRuler,\n onStateChange,\n updatePrimaryRect,\n updateSecondaryRect,\n applyResult,\n };\n}\n","/**\n * Schedules a callback to run after requestAnimationFrame and a microtask.\n * This ensures the DOM has settled and coordinates are accurate.\n */\nexport async function waitPostRaf<T>(callback: () => T): Promise<T> {\n return new Promise((resolve, reject) => {\n if (\n typeof requestAnimationFrame === \"undefined\" ||\n (typeof document !== \"undefined\" && document.hidden)\n ) {\n setTimeout(() => {\n try {\n resolve(callback());\n } catch (e) {\n reject(e);\n }\n }, 0);\n return;\n }\n\n requestAnimationFrame(() => {\n Promise.resolve().then(() => {\n try {\n resolve(callback());\n } catch (e) {\n reject(e);\n }\n });\n });\n });\n}\n","import type { SelectionMetadata as BaseSelectionMetadata } from \"@oyerinde/caliper-schema\";\nimport { deduceGeometry } from \"../../geometry/utils/scroll-aware.js\";\nimport { waitPostRaf } from \"../../shared/utils/raf.js\";\nimport type { Remap, ScrollState, PositionMode, StickyConfig } from \"../../shared/types/index.js\";\n\n/**\n * Selection system for tracking selected elements\n */\nexport type SelectionMetadata = Remap<\n BaseSelectionMetadata,\n {\n element: Element | null;\n rect: DOMRect | null;\n scrollHierarchy: ScrollState[];\n }\n>;\n\nexport interface SelectionSystem {\n select: (element: Element | null) => void;\n getSelected: () => Element | null;\n getSelectedRect: () => DOMRect | null;\n getMetadata: () => SelectionMetadata;\n clear: () => void;\n onUpdate: (callback: (metadata: SelectionMetadata) => void) => () => void;\n updateRect: (rect: DOMRect) => void;\n}\n\n/**\n * Selection System Factory\n *\n * Creates a system that manages the \"primary\" selected element. It handles\n * tracking the element's geometry, scroll hierarchy, and notifies listeners\n * when the selection changes or is cleared.\n *\n * @returns A SelectionSystem instance.\n */\nexport function createSelectionSystem(): SelectionSystem {\n let selectedElement: Element | null = null;\n let selectedRect: DOMRect | null = null;\n let scrollHierarchy: ScrollState[] = [];\n let position: PositionMode = \"static\";\n let stickyConfig: StickyConfig | undefined;\n let initialWindowX = 0;\n let initialWindowY = 0;\n let depth = 0;\n\n const updateListeners = new Set<(metadata: SelectionMetadata) => void>();\n\n function getMetadata(): SelectionMetadata {\n return {\n element: selectedElement,\n rect: selectedRect,\n scrollHierarchy,\n position,\n stickyConfig,\n initialWindowX,\n initialWindowY,\n depth,\n };\n }\n\n function notifyListeners() {\n const metadata = getMetadata();\n updateListeners.forEach((listener) => listener(metadata));\n }\n\n function select(element: Element | null) {\n if (selectedElement === element && (element !== null || selectedRect === null)) return;\n\n selectedElement = element;\n\n if (element) {\n waitPostRaf(() => {\n if (selectedElement === element && document.contains(element)) {\n const geometry = deduceGeometry(element);\n selectedRect = geometry.rect;\n scrollHierarchy = geometry.scrollHierarchy;\n position = geometry.position;\n stickyConfig = geometry.stickyConfig;\n initialWindowX = geometry.initialWindowX;\n initialWindowY = geometry.initialWindowY;\n depth = geometry.depth;\n\n notifyListeners();\n }\n });\n } else {\n selectedRect = null;\n scrollHierarchy = [];\n position = \"static\";\n stickyConfig = undefined;\n initialWindowX = 0;\n initialWindowY = 0;\n depth = 0;\n notifyListeners();\n }\n }\n\n function getSelected(): Element | null {\n return selectedElement;\n }\n\n function getSelectedRect(): DOMRect | null {\n return selectedRect;\n }\n\n function clear() {\n select(null);\n }\n\n function onUpdate(callback: (metadata: SelectionMetadata) => void) {\n updateListeners.add(callback);\n return () => {\n updateListeners.delete(callback);\n };\n }\n\n function updateRect(rect: DOMRect) {\n if (!selectedElement) return;\n selectedRect = new DOMRect(\n rect.left + window.scrollX,\n rect.top + window.scrollY,\n rect.width,\n rect.height\n );\n initialWindowX = window.scrollX;\n initialWindowY = window.scrollY;\n notifyListeners();\n }\n\n return {\n select,\n getSelected,\n getSelectedRect,\n getMetadata,\n clear,\n onUpdate,\n updateRect,\n };\n}\n","const IS_BROWSER = typeof window !== \"undefined\";\n\ntype OS = \"macos\" | \"ios\" | \"windows\" | \"android\" | \"linux\" | \"other\";\n\nfunction detectOS(): OS {\n if (!IS_BROWSER) return \"other\";\n\n // @ts-ignore\n const platform = navigator.userAgentData?.platform;\n if (platform) {\n switch (platform) {\n case \"macOS\":\n return \"macos\";\n case \"iOS\":\n return \"ios\";\n case \"Windows\":\n return \"windows\";\n case \"Android\":\n return \"android\";\n case \"Linux\":\n return \"linux\";\n }\n }\n\n const ua = navigator.userAgent;\n\n if (/iPhone|iPad|iPod/.test(ua)) return \"ios\";\n if (/Macintosh/.test(ua)) return \"macos\";\n if (/Windows/.test(ua)) return \"windows\";\n if (/Android/.test(ua)) return \"android\";\n if (/Linux/.test(ua)) return \"linux\";\n\n return \"other\";\n}\n\nconst OS_NAME = detectOS();\nconst IS_APPLE = OS_NAME === \"macos\" || OS_NAME === \"ios\";\n\nexport const OS = {\n IS_BROWSER,\n NAME: OS_NAME,\n\n IS_MAC: OS_NAME === \"macos\",\n IS_IOS: OS_NAME === \"ios\",\n IS_APPLE,\n\n getControlKey: () => (IS_APPLE ? \"Meta\" : \"Control\"),\n};\n","/**\n * Calculator configuration and shortcuts.\n * This file defines how users can customize the calculator triggers and appearance.\n */\nimport { OS } from \"../utils/os.js\";\nimport type { CaliperAgentState } from \"@oyerinde/caliper-schema\";\nexport type { CaliperAgentState };\n\nexport type DeepRequired<T> = {\n [K in keyof T]-?: DeepRequired<T[K]>;\n};\n\nexport interface ThemeConfig {\n primary?: string;\n secondary?: string;\n calcBg?: string;\n calcShadow?: string;\n calcOpHighlight?: string;\n calcText?: string;\n text?: string;\n projection?: string;\n ruler?: string;\n}\n\n/**\n * Keyboard shortcuts for measurement sides.\n */\nexport interface CalculatorShortcuts {\n top?: string;\n bottom?: string;\n left?: string;\n right?: string;\n distance?: string;\n}\n\n/**\n * Keyboard shortcuts for projection directions.\n */\nexport interface ProjectionShortcuts {\n top?: string;\n left?: string;\n bottom?: string;\n right?: string;\n}\n\nexport interface CommandsConfig {\n /** Key to activate measuring mode (default: Alt) */\n activate?: string;\n /** Key to freeze current measurement (default: Space) */\n freeze?: string;\n /** Key to select an element - must be held + click (default: Control) */\n select?: string;\n /** Key to clear current selection (default: Escape) */\n clear?: string;\n /** Custom keys to trigger calculator for specific sides (default: t, r, b, l) */\n calculator?: CalculatorShortcuts;\n /** Custom keys to trigger projection for specific directions (default: w, a, s, d) */\n projection?: ProjectionShortcuts;\n /** Key to trigger ruler lines - must be Shift + this key (default: r) */\n ruler?: string;\n /** Duration in ms to hold the select key to trigger selection (default: 250) */\n selectionHoldDuration?: number;\n}\n\nexport interface AnimationConfig {\n /** Enable smooth lerp animation for boundary box hover (default: true) */\n enabled?: boolean;\n /** Lerp factor for animation smoothness (0-1, lower = smoother, default: 0.25) */\n lerpFactor?: number;\n}\n\nexport interface AgentBridgeConfig {\n /** Enable the agentic bridge for AI integration (default: false) */\n enabled?: boolean;\n /** WebSocket port for the MCP relay (default: 9876) */\n wsPort?: number;\n /** Callback for agent state changes */\n onStateChange?: (state: CaliperAgentState) => void;\n /** Name of a global window function to call on state changes (IIFE/CDN-safe, JSON-serializable) */\n onStateChangeGlobal?: string;\n}\n\nexport interface CaliperConfig {\n /** Customize the visual appearance of the overlay (colors, shadows). */\n theme?: ThemeConfig;\n /** Customize keyboard shortcuts for all interactions. */\n commands?: CommandsConfig;\n /** Control the boundary box lerp animation behavior. */\n animation?: AnimationConfig;\n /** Enable debug logging (default: true). All logs are stripped from production builds. */\n debug?: boolean;\n}\n\n/** @deprecated Use CaliperConfig instead */\nexport type OverlayConfig = CaliperConfig;\n\nexport const DEFAULT_COMMANDS: DeepRequired<CommandsConfig> = {\n activate: \"Alt\",\n freeze: \" \",\n select: OS.getControlKey(),\n clear: \"Escape\",\n calculator: {\n top: \"t\",\n right: \"r\",\n bottom: \"b\",\n left: \"l\",\n distance: \"g\",\n },\n projection: {\n top: \"w\",\n left: \"a\",\n bottom: \"s\",\n right: \"d\",\n },\n ruler: \"r\",\n selectionHoldDuration: 250,\n};\n\nexport const DEFAULT_THEME: DeepRequired<ThemeConfig> = {\n primary: \"rgba(24, 160, 251, 1)\",\n secondary: \"rgba(242, 78, 30, 1)\",\n calcBg: \"rgba(30, 30, 30, 0.95)\",\n calcShadow: \"rgba(0, 0, 0, 0.25)\",\n calcOpHighlight: \"rgba(24, 160, 251, 0.3)\",\n calcText: \"rgba(255, 255, 255, 1)\",\n text: \"rgba(255, 255, 255, 1)\",\n projection: \"rgba(155, 81, 224, 1)\",\n ruler: \"rgba(24, 160, 251, 1)\",\n};\n\nexport const DEFAULT_ANIMATION: DeepRequired<AnimationConfig> = {\n enabled: true,\n lerpFactor: 0.25,\n};\n","import type {\n CaliperConfig,\n ThemeConfig,\n AnimationConfig,\n CommandsConfig,\n DeepRequired,\n} from \"./overlay-config.js\";\nimport { DEFAULT_COMMANDS, DEFAULT_ANIMATION, DEFAULT_THEME } from \"./overlay-config.js\";\n\nfunction parseNumber(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === \"\") return defaultValue;\n const num = Number(value);\n return isFinite(num) && !isNaN(num) ? num : defaultValue;\n}\n\n/**\n * Helper to inject opacity into both Hex and RGBA colors\n */\nfunction withOpacity(color: string, opacity: number): string {\n if (color.startsWith(\"#\")) {\n let hex = color.slice(1);\n if (hex.length === 3)\n hex = hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\");\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n if (color.startsWith(\"rgba\")) {\n return color.replace(/[\\d.]+\\)$/g, `${opacity})`);\n }\n if (color.startsWith(\"rgb\")) {\n return color.replace(\")\", `, ${opacity})`).replace(\"rgb\", \"rgba\");\n }\n return color;\n}\n\n/**\n * Applies a Caliper theme to an HTML element by setting CSS variables.\n *\n * This is used internally to inject the custom theme into the Shadow DOM root\n * or can be used manually to sync theme variables with a host application.\n *\n * @param theme - The theme configuration object.\n * @param target - The element to apply styles to. Defaults to documentElement.\n */\nexport function applyTheme(theme?: ThemeConfig, target: HTMLElement = document.documentElement) {\n if (!theme || !target) return;\n\n const root = target;\n\n if (theme.primary) {\n root.style.setProperty(\"--caliper-primary\", theme.primary);\n root.style.setProperty(\"--caliper-primary-90\", withOpacity(theme.primary, 0.9));\n root.style.setProperty(\"--caliper-primary-95\", withOpacity(theme.primary, 0.95));\n root.style.setProperty(\"--caliper-primary-50\", withOpacity(theme.primary, 0.5));\n root.style.setProperty(\"--caliper-primary-05\", withOpacity(theme.primary, 0.05));\n }\n if (theme.secondary) {\n root.style.setProperty(\"--caliper-secondary\", theme.secondary);\n root.style.setProperty(\"--caliper-secondary-50\", withOpacity(theme.secondary, 0.5));\n root.style.setProperty(\"--caliper-secondary-05\", withOpacity(theme.secondary, 0.05));\n }\n if (theme.calcBg) root.style.setProperty(\"--caliper-calc-bg\", theme.calcBg);\n if (theme.calcShadow) root.style.setProperty(\"--caliper-calc-shadow\", theme.calcShadow);\n if (theme.calcOpHighlight)\n root.style.setProperty(\"--caliper-calc-op-highlight\", theme.calcOpHighlight);\n if (theme.calcText) root.style.setProperty(\"--caliper-calc-text\", theme.calcText);\n if (theme.text) root.style.setProperty(\"--caliper-text\", theme.text);\n if (theme.projection) {\n root.style.setProperty(\"--caliper-projection\", theme.projection);\n root.style.setProperty(\"--caliper-projection-90\", withOpacity(theme.projection, 0.9));\n root.style.setProperty(\"--caliper-projection-light\", withOpacity(theme.projection, 0.2));\n }\n if (theme.ruler) root.style.setProperty(\"--caliper-ruler\", theme.ruler);\n}\n\nexport function mergeCommands(userCommands?: CommandsConfig): DeepRequired<CommandsConfig> {\n return {\n activate: userCommands?.activate ?? DEFAULT_COMMANDS.activate,\n freeze: userCommands?.freeze ?? DEFAULT_COMMANDS.freeze,\n select: userCommands?.select ?? DEFAULT_COMMANDS.select,\n clear: userCommands?.clear ?? DEFAULT_COMMANDS.clear,\n calculator: {\n top: userCommands?.calculator?.top ?? DEFAULT_COMMANDS.calculator.top,\n right: userCommands?.calculator?.right ?? DEFAULT_COMMANDS.calculator.right,\n bottom: userCommands?.calculator?.bottom ?? DEFAULT_COMMANDS.calculator.bottom,\n left: userCommands?.calculator?.left ?? DEFAULT_COMMANDS.calculator.left,\n distance: userCommands?.calculator?.distance ?? DEFAULT_COMMANDS.calculator.distance,\n },\n projection: {\n top: userCommands?.projection?.top ?? DEFAULT_COMMANDS.projection.top,\n left: userCommands?.projection?.left ?? DEFAULT_COMMANDS.projection.left,\n bottom: userCommands?.projection?.bottom ?? DEFAULT_COMMANDS.projection.bottom,\n right: userCommands?.projection?.right ?? DEFAULT_COMMANDS.projection.right,\n },\n ruler: userCommands?.ruler ?? DEFAULT_COMMANDS.ruler,\n selectionHoldDuration: parseNumber(\n userCommands?.selectionHoldDuration,\n DEFAULT_COMMANDS.selectionHoldDuration\n ),\n };\n}\n\nexport function mergeAnimation(userAnimation?: AnimationConfig): DeepRequired<AnimationConfig> {\n return {\n enabled: userAnimation?.enabled ?? DEFAULT_ANIMATION.enabled,\n lerpFactor: parseNumber(userAnimation?.lerpFactor, DEFAULT_ANIMATION.lerpFactor),\n };\n}\n\nexport function mergeTheme(userTheme?: ThemeConfig): DeepRequired<ThemeConfig> {\n return {\n primary: userTheme?.primary ?? DEFAULT_THEME.primary,\n secondary: userTheme?.secondary ?? DEFAULT_THEME.secondary,\n calcBg: userTheme?.calcBg ?? DEFAULT_THEME.calcBg,\n calcShadow: userTheme?.calcShadow ?? DEFAULT_THEME.calcShadow,\n calcOpHighlight: userTheme?.calcOpHighlight ?? DEFAULT_THEME.calcOpHighlight,\n calcText: userTheme?.calcText ?? DEFAULT_THEME.calcText,\n text: userTheme?.text ?? DEFAULT_THEME.text,\n projection: userTheme?.projection ?? DEFAULT_THEME.projection,\n ruler: userTheme?.ruler ?? DEFAULT_THEME.ruler,\n };\n}\n\ndeclare global {\n interface Window {\n __CALIPER_CONFIG__?: CaliperConfig;\n }\n}\n\n/**\n * Retrieves the current Caliper configuration from the environment.\n *\n * It resolves configuration in the following priority:\n * 1. Global window object (`window.__CALIPER_CONFIG__`)\n * 2. `data-config` attribute on the script tag (useful for UMD/CDN usage)\n *\n * @returns The resolved CaliperConfig object.\n */\nexport function getConfig(): CaliperConfig {\n if (typeof window !== \"undefined\") {\n const windowConfig = window.__CALIPER_CONFIG__ ?? {};\n\n const currentScript =\n typeof document !== \"undefined\" ? (document.currentScript as HTMLScriptElement) : null;\n const dataConfig =\n currentScript?.getAttribute(\"data-config\") ||\n (typeof document !== \"undefined\"\n ? document.querySelector(\"script[data-config]\")?.getAttribute(\"data-config\")\n : null);\n\n if (dataConfig) {\n try {\n const parsed = JSON.parse(dataConfig) as CaliperConfig;\n return {\n ...windowConfig,\n ...parsed,\n theme: { ...windowConfig.theme, ...parsed.theme },\n commands: { ...windowConfig.commands, ...parsed.commands },\n animation: { ...windowConfig.animation, ...parsed.animation },\n };\n } catch (e) {\n console.warn(\"[CALIPER] Failed to parse data-config attribute\", e);\n }\n }\n\n return windowConfig;\n }\n return {};\n}\n\n/**\n * Sets the global Caliper configuration.\n * This is a typed wrapper around window.__CALIPER_CONFIG__.\n *\n * @param config - The configuration object to set\n *\n * @example\n * ```ts\n * import { setConfig } from \"@caliper/core\";\n *\n * setConfig({\n * theme: { primary: \"#ff0000\" },\n * commands: { activate: \"Alt\" }\n * });\n * ```\n */\nexport function setConfig(config: CaliperConfig): void {\n if (typeof window !== \"undefined\") {\n window.__CALIPER_CONFIG__ = config;\n }\n}\n","interface VersionInfo {\n version: string;\n timestamp: string;\n}\n\nconst CALIPER_LOGO_SVG = `data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTcyIiBoZWlnaHQ9IjUwIiB2aWV3Qm94PSIwIDAgMTcyIDUwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ3LjIxNDQgNy42MjkzOWUtMDZIMzIuNzkyOEwyNS44MjUgNDMuMzIyNUgzNS4wNjEzTDM2LjE5NTYgMzUuMDE2M0g0NC4xMzU2TDQ1LjI2OTkgNDMuMzIyNUg1NC42NjgzTDQ3LjIxNDQgNy42MjkzOWUtMDZaTTM5LjU5ODUgOC4zMDYySDQwLjczMjhMNDQuMTM1NiAyOC4xNzU5SDM2LjE5NTZMMzkuNTk4NSA4LjMwNjJaIiBmaWxsPSIjQUMyMzIzIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNS4wMjMyOCAwTDAgNS4wNDg4NlYyOC4zMzg4TDUuMTg1MzIgMzMuMzg3NkgxNy41MDA0VjM1LjM0MkgxNS41NTZWNDYuNzQyN0gxOS4xMjA5TDI0LjMwNjIgMzUuNjY3OFYyNS44OTU4SDcuMTI5ODFWNy4zMjg5OUgxMy40NDk0VjBINS4wMjMyOFoiIGZpbGw9IiNBQzIzMjMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02Ni40OTc0IDcuNjI5MzllLTA2SDU3LjI2MVY0LjM5NzRINjIuNDQ2M1Y1LjIxMTczSDU3LjI2MVY2LjY3NzU0SDYwLjE3NzdWNy4zMjg5OUg1Ny4yNjFWOC45NTc2Nkg2MC4xNzc3VjkuNjA5MTNINTcuMjYxVjExLjA3NDlINjAuMTc3N1YxMS43MjY0SDU3LjI2MVYxMy4xOTIySDYyLjQ0NjNWMTMuODQzN0g1Ny4yNjFWMTUuNDcyM0g2MC4xNzc3VjE2LjEyMzhINTcuMjYxVjE3LjU4OTZINjAuMTc3N1YxOC4yNDExSDU3LjI2MVYxOS44Njk3SDYwLjE3NzdWMjAuNTIxMkg1Ny4yNjFWMjEuODI0MUg2Mi40NDYzVjIyLjYzODRINTcuMjYxVjI0LjI2NzFINjAuMTc3N1YyNC43NTU3SDU3LjI2MVYyNi4zODQ0SDYwLjE3NzdWMjcuMDM1OEg1Ny4yNjFWMjguNTAxNkg2MC4xNzc3VjI5LjE1MzFINTcuMjYxVjMwLjYxODlINjIuNDQ2M1YzMS40MzMySDU3LjI2MVYzMi44OTlINjAuMTc3N1YzMy41NTA1SDU3LjI2MVYzNS4wMTYzSDYwLjE3NzdWMzUuODMwNkg1Ny4yNjFWMzcuMjk2NEg2MC4xNzc3VjM3Ljk0NzlINTcuMjYxVjM5LjQxMzdINjIuNDQ2M1Y0MC4yMjhINTcuMjYxVjQzLjMyMjVINzcuODQwMlYzNS4wMTYzSDY2LjQ5NzRWNy42MjkzOWUtMDZaIiBmaWxsPSIjQUMyMzIzIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNzcuODQwMiAyNy42ODczSDY3LjQ2OTZMNjkuNDE0MSAzMC42MTg5TDc5Ljc4NDcgMzQuMjAyVjQzLjk3MzlDNzcuNTQzOSA0NC4zNzMgNzYuNTQzOSA0NS4yNzY5IDc2LjU0MzkgNDcuMDY4NEM3Ni41NDM5IDQ5LjE4NTcgNzcuNTc4IDQ5Ljg1MjEgNzkuNzg0NyA1MEg4Mi44NjM1VjI4LjUwMTZINzcuODQwMlYyNy42ODczWiIgZmlsbD0iI0FDMjMyMyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTg5Ljk5MzMgNy42MjkzOWUtMDZIODAuNzU3VjQuMzk3NEg4NS43ODAzVjUuMjExNzNIODAuNzU3VjYuNjc3NTRIODMuNTExN1Y3LjMyODk5SDgwLjc1N1Y4Ljk1NzY2SDgzLjUxMTdWOS40NDYyNkg4MC43NTdWMTEuMDc0OUg4My41MTE3VjExLjcyNjRIODAuNzU3VjEzLjE5MjJIODUuNzgwM1YxMy44NDM3SDgwLjc1N1YxNS40NzIzSDgzLjUxMTdWMTYuMTIzOEg4MC43NTdWMTcuNTg5Nkg4My41MTE3VjE4LjI0MTFIODAuNzU3VjE5Ljg2OTdIODMuNTExN1YyMC41MjEySDgwLjc1N1YyMS44MjQxSDg1Ljc4MDNWMjIuNjM4NEg4MC43NTdWMjcuMDM1OEg4My44MzU4VjQzLjMyMjVIODcuMjM4NlYxMi4zNzc5SDkyLjI2MTlWOS40NDYyNkg5My4wNzIxVjEwLjA5NzdIOTkuNzE1OEM5OC45MDU2IDguNzk0NzkgOTcuMTIzMSA3LjY1NDczIDk0Ljg1NDYgNy4wMDMyN0g4OS45OTMzVjcuNjI5MzllLTA2WiIgZmlsbD0iI0FDMjMyMyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTkyLjI2MTkgMTMuODQzN0g4OC4wNDg4VjQzLjMyMjVIOTIuMjYxOVYyOC41MDE2SDkzLjA3MjFWMjkuMzE2SDk0Ljg1NDZWMjUuNTdIOTMuMDcyMVYyNi4zODQ0SDkyLjI2MTlWMTMuODQzN1oiIGZpbGw9IiNBQzIzMjMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05NS42NjQ4IDYuMzUxOFY3LjYyOTM5ZS0wNkgxMTMuMDAzTDExOS42NDcgNi4zNTE4VjIxLjgyNDFMMTEzLjAwMyAyOC41MDE2SDEwNC45MDFMMTA0LjczOSA0My4zMjI1SDk1LjY2NDhWMTEuMDc0OUgxMDAuODVDMTAwLjUyNiA4LjYzMTkzIDk4LjkwNTYgNy4zMjkgOTUuNjY0OCA2LjM1MThaTTEwNC45MDEgNy45ODA0NkgxMTAuNTczVjIwLjUyMTJIMTA0LjkwMVY3Ljk4MDQ2WiIgZmlsbD0iI0FDMjMyMyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE0My4zMDUgNy42MjkzOWUtMDZIMTIzLjIxMlY0My4zMjI1SDE0My4zMDVWMzUuMDE2M0gxMzIuNDQ4VjI0LjQzSDE0MS42ODVWMTYuMTIzOEgxMzIuNDQ4VjcuOTgwNDZIMTQzLjMwNVY3LjYyOTM5ZS0wNloiIGZpbGw9IiNBQzIzMjMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNDcuMTk0IDQzLjMyMjVWNy42MjkzOWUtMDZIMTY1LjE4TDE3MS41IDUuODYzMlYxNi45MzgxTDE2Ni4xNTMgMjEuODI0MUwxNzEuNSAyNS41N1Y0My4zMjI1SDE2Mi40MjZWMjUuNTdIMTU2LjI2OFY0My4zMjI1SDE0Ny4xOTRaTTE1Ni4yNjggNy45ODA0NkgxNjIuNDI2VjE3LjU4OTZIMTU2LjI2OFY3Ljk4MDQ2WiIgZmlsbD0iI0FDMjMyMyIvPgo8L3N2Zz4K`;\n\nasync function fetchLatestVersion(): Promise<VersionInfo | null> {\n try {\n const endpoint = `https://unpkg.com/@oyerinde/caliper@latest/dist/version.json`;\n const response = await fetch(endpoint, {\n method: \"GET\",\n cache: \"no-store\",\n headers: {\n Accept: \"application/json\",\n },\n signal: AbortSignal.timeout(3000),\n });\n\n if (response.ok) {\n return await response.json();\n }\n } catch (error) {\n // Silently fail\n }\n return null;\n}\n\n/**\n * Compares two version strings (semver format)\n * Returns: -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2\n */\nfunction compareVersions(v1: string, v2: string): number {\n const parts1 = v1.split(\".\").map(Number);\n const parts2 = v2.split(\".\").map(Number);\n\n for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {\n const part1 = parts1[i] || 0;\n const part2 = parts2[i] || 0;\n if (part1 < part2) return -1;\n if (part1 > part2) return 1;\n }\n return 0;\n}\n\n/**\n * Logs the current Caliper version and check for updates in the browser console.\n *\n * @param currentVersion - The current version of the package.\n */\nexport async function showVersionInfo(currentVersion: string): Promise<void> {\n if (typeof window === \"undefined\") return;\n\n const style = `\n font-size: 1px;\n padding: 10px 34px;\n background-image: url('${CALIPER_LOGO_SVG}');\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n `;\n\n console.log(`%c `, style);\n console.log(\n `%cMeasurement Tool v${currentVersion}\\n%cDocs -> https://caliper.danieloyerinde.com`,\n \"color: #3b82f6; font-weight: bold; font-family: monospace; padding-top: 5px;\",\n \"color: #6b7280; font-family: monospace;\"\n );\n\n if (currentVersion === \"[DEV]\") return;\n\n fetchLatestVersion()\n .then((latestInfo) => {\n if (!latestInfo) return;\n\n const comparison = compareVersions(currentVersion, latestInfo.version);\n if (comparison < 0) {\n console.log(\n `%c⚠ Update available: ${latestInfo.version} (you're on ${currentVersion})`,\n \"color: #f59e0b; font-weight: bold; font-family: monospace;\"\n );\n }\n })\n .catch(() => {\n // Silently fail\n });\n}\n","/**\n * Linear interpolation between two values\n * @param start - Starting value\n * @param end - Target value\n * @param t - Interpolation factor (0-1, but can exceed for extrapolation)\n */\nexport function lerp(start: number, end: number, t: number): number {\n return start + (end - start) * t;\n}\n\n/**\n * Lerp a DOMRect-like object\n * @param start - Starting rect\n * @param end - Target rect\n * @param t - Interpolation factor\n */\nexport function lerpRect(\n start: { left: number; top: number; width: number; height: number },\n end: { left: number; top: number; width: number; height: number },\n t: number\n): { left: number; top: number; width: number; height: number } {\n return {\n left: lerp(start.left, end.left, t),\n top: lerp(start.top, end.top, t),\n width: lerp(start.width, end.width, t),\n height: lerp(start.height, end.height, t),\n };\n}\n","/**\n * Extracts and cleans the direct text content of an element, excluding text\n * from child elements.\n *\n * @param element - The element to extract text from.\n * @param maxLength - Optional maximum length for the extracted string.\n * @returns The cleaned text content or undefined if no text found.\n */\nexport function getElementDirectText(\n element: Element,\n maxLength: number = 100\n): string | undefined {\n let directText = \"\";\n\n const children = element.childNodes;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child?.nodeType === Node.TEXT_NODE) {\n directText += child.textContent || \"\";\n }\n }\n\n const trimmed = directText.trim().replace(/\\s+/g, \" \");\n if (!trimmed) return undefined;\n\n if (trimmed.length > maxLength) {\n return trimmed.slice(0, maxLength);\n }\n\n return trimmed;\n}\n","import { RUNTIME_CLASS_IGNORE_PREFIXES } from \"../constants/index.js\";\n\n/**\n * Filters out ephemeral CSS classes that are used for runtime state tracking.\n *\n * @param classes - An array or DOMTokenList of class names.\n * @returns A filtered array of stable class names.\n */\nexport function filterRuntimeClasses(classes: string[] | DOMTokenList): string[] {\n const list = Array.from(classes);\n return list.filter((className) => {\n // 1. Check known ephemeral prefixes\n // We keep stable prefixes even if they look generated.\n // Ephemeral prefixes are strictly for runtime state (is-active, caliper-measure, etc.)\n if (RUNTIME_CLASS_IGNORE_PREFIXES.some((prefix) => className.startsWith(prefix))) {\n return false;\n }\n\n // We specifically WANT CSS Modules and Hashed classes now because they are\n // useful for stable reconciliation during HMR design sessions.\n\n return true;\n });\n}\n","import { generateId } from \"./id.js\";\nimport { filterRuntimeClasses } from \"./class-filter.js\";\nimport { getElementDirectText } from \"./text-content.js\";\nimport { BRIDGE_TAB_ID_KEY } from \"../constants/index.js\";\nimport type { CaliperSelectorInput, SelectionMetadata } from \"@oyerinde/caliper-schema\";\n\nexport function buildSelectorInfo(\n element: Element,\n metadata?: Partial<SelectionMetadata>\n): CaliperSelectorInput {\n const tagName = element.tagName.toLowerCase();\n\n let agentId = element.getAttribute(\"data-caliper-agent-id\");\n if (!agentId) {\n agentId = generateId(\"caliper\");\n element.setAttribute(\"data-caliper-agent-id\", agentId);\n }\n\n const id = (element as HTMLElement).id;\n const text = getElementDirectText(element);\n const classes = filterRuntimeClasses(element.classList);\n\n const parent = element.parentElement;\n let nthChild = -1;\n if (parent) {\n nthChild = Array.from(parent.children).indexOf(element);\n }\n\n const marker = element.getAttribute(\"data-caliper-marker\") || undefined;\n\n let x: number;\n let y: number;\n\n if (metadata?.rect) {\n x = Math.round(metadata.rect.left);\n y = Math.round(metadata.rect.top);\n } else {\n const rect = element.getBoundingClientRect();\n x = Math.round(rect.left + (typeof window !== \"undefined\" ? window.scrollX : 0));\n y = Math.round(rect.top + (typeof window !== \"undefined\" ? window.scrollY : 0));\n }\n\n const info: CaliperSelectorInput = {\n selector: agentId,\n tag: tagName,\n timestamp: Date.now(),\n nthChild: nthChild !== -1 ? nthChild : undefined,\n x,\n y,\n marker,\n };\n\n if (metadata?.scrollHierarchy) {\n info.scrollHierarchy = metadata.scrollHierarchy.map((scrollStateItem) => {\n const { element: _removedElement, ...serializableScrollState } =\n scrollStateItem as typeof scrollStateItem & {\n element?: unknown;\n };\n return serializableScrollState;\n });\n }\n\n if (metadata?.position) info.position = metadata.position;\n if (metadata?.stickyConfig) info.stickyConfig = metadata.stickyConfig;\n if (metadata?.initialWindowX !== undefined) info.initialWindowX = metadata.initialWindowX;\n if (metadata?.initialWindowY !== undefined) info.initialWindowY = metadata.initialWindowY;\n if (metadata?.hasContainingBlock !== undefined)\n info.hasContainingBlock = metadata.hasContainingBlock;\n if (metadata?.rect) info.rect = metadata.rect;\n\n if (id) info.id = id;\n if (text) info.text = text;\n if (classes.length > 0) info.classes = classes;\n\n const tabId =\n typeof sessionStorage !== \"undefined\" ? sessionStorage.getItem(BRIDGE_TAB_ID_KEY) : null;\n if (tabId) info.tabId = tabId;\n\n return info;\n}\n\n/**\n * A helper function for developers to add stable markers to their components.\n * Returns an object with the data-caliper-marker attribute.\n *\n * @example\n * <div {...caliperProps(\"main-logo\")}>...</div>\n */\nexport function caliperProps(marker: string) {\n if (process.env.NODE_ENV === \"production\") {\n return {};\n }\n return {\n \"data-caliper-marker\": marker,\n };\n}\n","declare const __DEV__: boolean;\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"none\";\n\nexport interface LoggerOptions {\n prefix?: string;\n enabled?: boolean;\n}\n\n/**\n * Global master switch for all logger instances.\n * This allows a single config point to silence the entire library.\n */\nlet isGlobalEnabled = true;\n\nclass Logger {\n private prefix: string;\n\n constructor(options: LoggerOptions = {}) {\n this.prefix = options.prefix ? `[${options.prefix}]` : \"[Caliper]\";\n }\n\n setEnabled(enabled: boolean) {\n isGlobalEnabled = enabled;\n }\n\n debug(...args: any[]) {\n if (typeof __DEV__ !== \"undefined\" && !__DEV__) return;\n if (!isGlobalEnabled) return;\n console.debug(this.prefix, ...args);\n }\n\n info(...args: any[]) {\n if (typeof __DEV__ !== \"undefined\" && !__DEV__) return;\n if (!isGlobalEnabled) return;\n console.info(this.prefix, ...args);\n }\n\n warn(...args: any[]) {\n if (!isGlobalEnabled) return;\n console.warn(this.prefix, ...args);\n }\n\n error(...args: any[]) {\n if (!isGlobalEnabled) return;\n console.error(this.prefix, ...args);\n }\n\n log(...args: any[]) {\n if (typeof __DEV__ !== \"undefined\" && !__DEV__) return;\n if (!isGlobalEnabled) return;\n console.log(this.prefix, ...args);\n }\n}\n\n/**\n * Global logger instance used by Caliper core.\n */\nexport const logger = new Logger({ prefix: \"Caliper\" });\n\n/**\n * Creates a specialized logger for a specific module or component.\n * All loggers created this way share the same global enabled state.\n *\n * @param prefix - The prefix to prepended to log messages (e.g., 'agent-bridge').\n * @returns A new Logger instance.\n */\nexport function createLogger(prefix: string) {\n return new Logger({ prefix: `Caliper:${prefix}` });\n}\n\n/**\n * Formats a DOMRect into a human-readable string for logging.\n *\n * @param rect - The rect to format.\n * @returns A formatted string or \"null\".\n */\nexport function formatRect(rect: DOMRect | null): string {\n if (!rect) return \"null\";\n return `{L:${rect.left.toFixed(1)}, T:${rect.top.toFixed(1)}, W:${rect.width}, H:${rect.height}}`;\n}\n\n/**\n * Formats an Element into a descriptive string including its tag name,\n * classes, and a snippet of its text content.\n *\n * @param element - The element to format.\n * @returns A formatted string or \"null\".\n */\nexport function formatElement(element: Element | null): string {\n if (!element) return \"null\";\n const text = (element.textContent || \"\").trim().slice(0, 20);\n return `${element.tagName}${element.className ? \".\" + element.className : \"\"} [\"${text}${text.length >= 20 ? \"...\" : \"\"}\"]`;\n}\n","export const getNormalizedModifiers = (e: MouseEvent | PointerEvent | KeyboardEvent) => {\n const isAltGraph = e.getModifierState?.(\"AltGraph\");\n return {\n Control: isAltGraph ? false : e.ctrlKey,\n Meta: e.metaKey,\n Alt: isAltGraph || e.altKey,\n Shift: e.shiftKey,\n };\n};\n\n/**\n * Resolves the logical key name for a KeyboardEvent, accounting for\n * platform-specific quirks (like Windows AltGraph behavior).\n *\n * @param e - The keyboard event to analyze.\n * @returns The normalized key name.\n */\nexport const getLogicalKey = (e: KeyboardEvent) => {\n // Ignore fake Control events sent by AltGraph on Windows\n if (e.key === \"Control\" && e.getModifierState?.(\"AltGraph\")) return \"\";\n if (e.key === \"AltGraph\") return \"Alt\";\n return e.key;\n};\n\n/**\n * Checks if the logical key of an event matches a target key string.\n *\n * @param target - The key name to match against.\n * @param e - The keyboard event.\n * @returns True if the key matches.\n */\nexport const isKeyMatch = (target: string, e: KeyboardEvent) => {\n return getLogicalKey(e) === target;\n};\n","// src/index.ts\nimport { render } from \"solid-js/web\";\n\n// src/root.tsx\nimport { createComponent as _$createComponent9 } from \"solid-js/web\";\nimport { onMount as onMount2, onCleanup as onCleanup3, createSignal as createSignal5, createEffect as createEffect3, untrack, createMemo as createMemo8 } from \"solid-js\";\nimport { createMeasurementSystem, createSelectionSystem, createSuppressionDelegate, getTopElementAtPoint, getLiveLineValue, getLiveGeometry as getLiveGeometry6, getNormalizedModifiers, getLogicalKey, isKeyMatch, RESIZE_THROTTLE_MS, buildSelectorInfo } from \"@caliper/core\";\n\n// src/ui/utils/render-overlay.tsx\nimport { template as _$template9 } from \"solid-js/web\";\nimport { insert as _$insert7 } from \"solid-js/web\";\nimport { className as _$className7 } from \"solid-js/web\";\nimport { memo as _$memo5 } from \"solid-js/web\";\nimport { createComponent as _$createComponent8 } from \"solid-js/web\";\nimport { Show as Show8, createMemo as createMemo7 } from \"solid-js\";\nimport { Portal as Portal3 } from \"solid-js/web\";\nimport { getLiveGeometry as getLiveGeometry5, getTotalScrollDelta, getCommonVisibilityWindow, getOverlayRoot as getOverlayRoot3 } from \"@caliper/core\";\n\n// src/ui/utils/render-lines-with-calculator.tsx\nimport { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { createSignal, createMemo, For, Show } from \"solid-js\";\nimport { getLivePoint, clampPointToGeometry, generateId } from \"@caliper/core\";\n\n// src/css/styles.ts\nimport { DEFAULT_THEME, CALIPER_PREFIX } from \"@caliper/core\";\nvar OVERLAY_STYLES = `\n:root {\n interpolate-size: allow-keywords;\n --caliper-primary: ${DEFAULT_THEME.primary};\n --caliper-secondary: ${DEFAULT_THEME.secondary};\n --caliper-calc-bg: ${DEFAULT_THEME.calcBg};\n --caliper-calc-shadow: ${DEFAULT_THEME.calcShadow};\n --caliper-calc-op-highlight: ${DEFAULT_THEME.calcOpHighlight};\n --caliper-calc-text: ${DEFAULT_THEME.calcText};\n --caliper-text: ${DEFAULT_THEME.text};\n --caliper-projection: ${DEFAULT_THEME.projection};\n --caliper-ruler: ${DEFAULT_THEME.ruler};\n --caliper-success: rgba(74, 222, 128, 1);\n --caliper-font-sans: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n}\n\n#caliper-overlay-root {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n overflow: visible;\n}\n\n.${CALIPER_PREFIX}viewport-fixed {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n overflow: visible;\n}\n\n.${CALIPER_PREFIX}overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 999999;\n}\n\n.${CALIPER_PREFIX}ruler-layer {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 1000000;\n touch-action: none;\n}\n\n.${CALIPER_PREFIX}alt-mode * {\n pointer-events: none !important;\n}\n\n.${CALIPER_PREFIX}line {\n stroke: var(--caliper-secondary);\n stroke-width: 1px;\n pointer-events: auto;\n cursor: pointer;\n}\n\n.${CALIPER_PREFIX}projection-line {\n stroke: var(--caliper-projection);\n stroke-width: 2px;\n stroke-dasharray: 4 2;\n pointer-events: auto;\n}\n\n.${CALIPER_PREFIX}label {\n position: fixed;\n pointer-events: auto;\n cursor: pointer;\n background: var(--caliper-secondary);\n color: var(--caliper-text);\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 11px;\n font-weight: 500;\n font-family: var(--caliper-font-sans);\n white-space: nowrap;\n z-index: 1000000;\n will-change: transform;\n}\n\n.${CALIPER_PREFIX}projection-label {\n background: var(--caliper-projection);\n z-index: 1000001;\n}\n\n.${CALIPER_PREFIX}selection-label {\n position: fixed;\n pointer-events: none;\n background: var(--caliper-primary);\n color: white;\n padding: 2px 6px;\n border-radius: 2px;\n font-size: 10px;\n font-weight: 600;\n font-family: var(--caliper-font-sans);\n white-space: nowrap;\n z-index: 1000001;\n display: flex;\n align-items: center;\n justify-content: center;\n will-change: transform, opacity, background-color;\n transition: opacity 0.2s ease-in-out, background-color 0.2s ease-in-out;\n}\n\n.${CALIPER_PREFIX}selection-label-success {\n background: var(--caliper-success);\n}\n\n.${CALIPER_PREFIX}selection-label-content {\n display: flex;\n align-items: center;\n justify-content: center;\n animation: caliper-fade-in 0.15s forwards ease-in-out;\n}\n\n@keyframes caliper-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes caliper-fade-out {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n\n.${CALIPER_PREFIX}boundary-box {\n position: fixed;\n pointer-events: none;\n box-sizing: border-box;\n touch-action: none;\n}\n\n.${CALIPER_PREFIX}boundary-box-selected {\n border: 2px solid var(--caliper-primary);\n background: transparent;\n z-index: 999998;\n will-change: transform, width, height;\n}\n\n.${CALIPER_PREFIX}boundary-box-secondary {\n border: 1px dashed var(--caliper-secondary-50);\n background: var(--caliper-secondary-05);\n z-index: 999997;\n}\n\n.${CALIPER_PREFIX}calculator, .${CALIPER_PREFIX}projection-input {\n position: fixed;\n pointer-events: auto;\n background: var(--caliper-calc-bg);\n color: var(--caliper-calc-text);\n padding: 0 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n font-family: var(--caliper-font-sans);\n z-index: 1000005;\n box-shadow: 0 4px 12px var(--caliper-calc-shadow);\n display: flex;\n align-items: center;\n gap: 6px;\n height: 28px;\n user-select: none;\n overflow: hidden;\n will-change: transform, width;\n transform-origin: center;\n width: fit-content;\n min-width: 32px;\n white-space: nowrap;\n transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.2s, box-shadow 0.2s, background-color 0.2s;\n border: 1px solid transparent;\n}\n\n.${CALIPER_PREFIX}calculator-focused, .${CALIPER_PREFIX}projection-input-focused {\n border-color: var(--caliper-primary);\n box-shadow: 0 0 0 2px var(--caliper-primary-50), 0 4px 12px var(--caliper-calc-shadow);\n background: var(--caliper-calc-bg);\n}\n\n.${CALIPER_PREFIX}projection-input {\n border-left: 3px solid var(--caliper-projection);\n}\n\n.${CALIPER_PREFIX}projection-direction-tag {\n background: var(--caliper-projection-light);\n color: var(--caliper-projection);\n font-size: 10px;\n padding: 2px 4px;\n border-radius: 2px;\n text-transform: uppercase;\n font-weight: 700;\n}\n\n.${CALIPER_PREFIX}calculator-base {\n opacity: 0.7;\n transition: opacity 0.2s;\n}\n\n.${CALIPER_PREFIX}calculator-base-active {\n opacity: 1;\n}\n\n.${CALIPER_PREFIX}calculator-operation {\n background-color: var(--caliper-calc-op-highlight);\n padding: 4px;\n border-radius: 2px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n animation: pulse 0.3s ease-in-out;\n}\n\n.${CALIPER_PREFIX}calculator-input, .${CALIPER_PREFIX}projection-current-value {\n min-width: 8px;\n text-align: right;\n transition: all 0.2s;\n}\n\n.${CALIPER_PREFIX}projection-current-value {\n color: var(--caliper-projection);\n font-weight: bold;\n}\n\n.${CALIPER_PREFIX}calculator-result {\n font-weight: bold;\n color: var(--caliper-primary);\n animation: slideIn 0.3s ease-out;\n}\n\n@keyframes pulse {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(-10px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slideOut {\n from {\n opacity: 1;\n transform: translateX(0);\n }\n to {\n opacity: 0;\n transform: translateX(10px);\n }\n}\n\n.${CALIPER_PREFIX}line-clickable {\n pointer-events: auto;\n cursor: pointer;\n transition: stroke-width 0.2s;\n}\n\n.${CALIPER_PREFIX}line-hit-target {\n stroke: transparent;\n stroke-width: 12px;\n pointer-events: auto;\n cursor: pointer;\n}\n\n\n.${CALIPER_PREFIX}line-clickable:hover {\n}\n\n.${CALIPER_PREFIX}ruler-line-visual {\n transition: transform 0.1s ease-out;\n will-change: transform;\n position: fixed;\n background-color: var(--caliper-ruler, var(--caliper-primary, rgba(24, 160, 251, 1)));\n z-index: 1000000;\n}\n\n.${CALIPER_PREFIX}ruler-label {\n background: var(--caliper-primary);\n border: 1px solid rgba(255, 255, 255, 0.2);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n position: fixed;\n z-index: 1000002;\n}\n\n.${CALIPER_PREFIX}ruler-bridge-label {\n position: fixed;\n background: var(--caliper-secondary);\n z-index: 1000003;\n color: white;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n`;\nvar PREFIX = CALIPER_PREFIX;\n\n// src/ui/utils/render-lines-with-calculator.tsx\nvar _tmpl$ = /* @__PURE__ */ _$template(`<svg><defs><clipPath><rect></svg>`, false, true, false);\nvar _tmpl$2 = /* @__PURE__ */ _$template(`<svg style=z-index:999999><g>`);\nvar _tmpl$3 = /* @__PURE__ */ _$template(`<svg><g data-caliper-ignore style=pointer-events:auto;cursor:pointer><line></line><line></svg>`, false, true, false);\nfunction MeasurementLinesWithCalculator(props) {\n const [hoveredLine, setHoveredLine] = createSignal(null);\n const hasClipping = () => isFinite(props.data.common.minX);\n const clipPathId = createSignal(generateId(\"lines-clip\"))[0]();\n const vCommon = () => ({\n minX: props.data.common.minX - props.viewport.scrollX,\n maxX: props.data.common.maxX - props.viewport.scrollX,\n minY: props.data.common.minY - props.viewport.scrollY,\n maxY: props.data.common.maxY - props.viewport.scrollY\n });\n return (() => {\n var _el$ = _tmpl$2(), _el$5 = _el$.firstChild;\n _$setAttribute(_el$, \"class\", `${PREFIX}viewport-fixed`);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return hasClipping();\n },\n get children() {\n var _el$2 = _tmpl$(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;\n _$setAttribute(_el$3, \"id\", clipPathId);\n _$effect((_p$) => {\n var _v$ = vCommon().minX, _v$2 = vCommon().minY, _v$3 = Math.max(0, vCommon().maxX - vCommon().minX), _v$4 = Math.max(0, vCommon().maxY - vCommon().minY);\n _v$ !== _p$.e && _$setAttribute(_el$4, \"x\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute(_el$4, \"y\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setAttribute(_el$4, \"width\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute(_el$4, \"height\", _p$.o = _v$4);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0\n });\n return _el$2;\n }\n }), _el$5);\n _$insert(_el$5, _$createComponent(For, {\n get each() {\n return props.lines;\n },\n children: (line, index) => {\n const lineData = createMemo(() => {\n const sRaw = getLivePoint(line.start, line.startSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n const eRaw = getLivePoint(line.end, line.endSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n let start = sRaw;\n let end = eRaw;\n if (!props.data.isSameContext) {\n start = clampPointToGeometry(sRaw, line.startSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n const eRawClamped = clampPointToGeometry(eRaw, line.endSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n end = {\n ...eRawClamped\n };\n }\n if (line.type === \"top\" || line.type === \"bottom\") {\n if (line.startSync === \"primary\") end.x = start.x;\n else start.x = end.x;\n } else if (line.type === \"left\" || line.type === \"right\") {\n if (line.startSync === \"primary\") end.y = start.y;\n else start.y = end.y;\n }\n let liveValue = 0;\n if (line.type === \"top\" || line.type === \"bottom\") {\n liveValue = Math.abs(start.y - end.y);\n } else if (line.type === \"left\" || line.type === \"right\") {\n liveValue = Math.abs(start.x - end.x);\n } else {\n liveValue = Math.sqrt(Math.pow(start.x - end.x, 2) + Math.pow(start.y - end.y, 2));\n }\n return {\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n liveValue\n };\n });\n const isHovered = () => hoveredLine() === index();\n return (() => {\n var _el$6 = _tmpl$3(), _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;\n _el$6.$$click = (e) => {\n e.stopPropagation();\n const data = lineData();\n props.onLineClick?.(line, data.liveValue);\n };\n _el$6.addEventListener(\"mouseleave\", () => setHoveredLine(null));\n _el$6.addEventListener(\"mouseenter\", () => setHoveredLine(index()));\n _$setAttribute(_el$7, \"class\", `${PREFIX}line-hit-target`);\n _$setAttribute(_el$8, \"class\", `${PREFIX}line ${PREFIX}line-clickable`);\n _$effect((_p$) => {\n var _v$5 = lineData().x1, _v$6 = lineData().y1, _v$7 = lineData().x2, _v$8 = lineData().y2, _v$9 = lineData().x1, _v$0 = lineData().y1, _v$1 = lineData().x2, _v$10 = lineData().y2, _v$11 = isHovered() ? 2 : 1;\n _v$5 !== _p$.e && _$setAttribute(_el$7, \"x1\", _p$.e = _v$5);\n _v$6 !== _p$.t && _$setAttribute(_el$7, \"y1\", _p$.t = _v$6);\n _v$7 !== _p$.a && _$setAttribute(_el$7, \"x2\", _p$.a = _v$7);\n _v$8 !== _p$.o && _$setAttribute(_el$7, \"y2\", _p$.o = _v$8);\n _v$9 !== _p$.i && _$setAttribute(_el$8, \"x1\", _p$.i = _v$9);\n _v$0 !== _p$.n && _$setAttribute(_el$8, \"y1\", _p$.n = _v$0);\n _v$1 !== _p$.s && _$setAttribute(_el$8, \"x2\", _p$.s = _v$1);\n _v$10 !== _p$.h && _$setAttribute(_el$8, \"y2\", _p$.h = _v$10);\n _v$11 !== _p$.r && _$setAttribute(_el$8, \"stroke-width\", _p$.r = _v$11);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0,\n s: void 0,\n h: void 0,\n r: void 0\n });\n return _el$6;\n })();\n }\n }));\n _$effect(() => _$setAttribute(_el$5, \"clip-path\", hasClipping() ? `url(#${clipPathId})` : void 0));\n return _el$;\n })();\n}\n_$delegateEvents([\"click\"]);\n\n// src/ui/utils/render-labels.tsx\nimport { template as _$template2 } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents2 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty } from \"solid-js/web\";\nimport { effect as _$effect2 } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { insert as _$insert2 } from \"solid-js/web\";\nimport { createComponent as _$createComponent2 } from \"solid-js/web\";\nimport { className as _$className } from \"solid-js/web\";\nimport { For as For2, Show as Show2, createMemo as createMemo2 } from \"solid-js\";\nimport { getLivePoint as getLivePoint2, clampPointToGeometry as clampPointToGeometry2 } from \"@caliper/core\";\nvar _tmpl$4 = /* @__PURE__ */ _$template2(`<div style=z-index:1000000>`);\nvar _tmpl$22 = /* @__PURE__ */ _$template2(`<div data-caliper-ignore style=left:0;top:0>`);\nfunction MeasurementLabels(props) {\n const margin = 16;\n return (() => {\n var _el$ = _tmpl$4();\n _$className(_el$, `${PREFIX}viewport-fixed`);\n _$insert2(_el$, _$createComponent2(For2, {\n get each() {\n return props.lines;\n },\n children: (line) => {\n const position = createMemo2(() => {\n props.viewport.version;\n const sRaw = getLivePoint2(line.start, line.startSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n const eRaw = getLivePoint2(line.end, line.endSync, line, props.data.primary.delta, props.data.secondary.delta, props.viewport.scrollX, props.viewport.scrollY);\n const dxRaw = Math.abs(sRaw.x - eRaw.x);\n const dyRaw = Math.abs(sRaw.y - eRaw.y);\n let liveValue = 0;\n if (line.type === \"top\" || line.type === \"bottom\") {\n liveValue = dyRaw;\n } else if (line.type === \"left\" || line.type === \"right\") {\n liveValue = dxRaw;\n } else {\n liveValue = Math.sqrt(dxRaw * dxRaw + dyRaw * dyRaw);\n }\n let start = sRaw;\n let end = eRaw;\n if (!props.data.isSameContext) {\n start = clampPointToGeometry2(sRaw, line.startSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n const eClamped = clampPointToGeometry2(eRaw, line.endSync === \"secondary\" ? props.data.secondary.geo : props.data.primary.geo, props.viewport);\n end = {\n ...eClamped\n };\n }\n if (line.type === \"top\" || line.type === \"bottom\") {\n if (line.startSync === \"primary\") end.x = start.x;\n else start.x = end.x;\n } else if (line.type === \"left\" || line.type === \"right\") {\n if (line.startSync === \"primary\") end.y = start.y;\n else start.y = end.y;\n }\n const naturalX = (start.x + end.x) / 2;\n const naturalY = (start.y + end.y) / 2;\n const vpMinX = 0;\n const vpMaxX = props.viewport.width;\n const vpMinY = 0;\n const vpMaxY = props.viewport.height;\n const common = props.data.common;\n const hasCommon = isFinite(common.minX);\n const cMinX = hasCommon ? Math.max(vpMinX, common.minX - props.viewport.scrollX) : vpMinX;\n const cMaxX = hasCommon ? Math.min(vpMaxX, common.maxX - props.viewport.scrollX) : vpMaxX;\n const cMinY = hasCommon ? Math.max(vpMinY, common.minY - props.viewport.scrollY) : vpMinY;\n const cMaxY = hasCommon ? Math.min(vpMaxY, common.maxY - props.viewport.scrollY) : vpMaxY;\n const lineMinX = Math.min(start.x, end.x);\n const lineMaxX = Math.max(start.x, end.x);\n const lineMinY = Math.min(start.y, end.y);\n const lineMaxY = Math.max(start.y, end.y);\n const isFullyHidden = lineMaxY < cMinY || lineMinY > cMaxY || lineMaxX < cMinX || lineMinX > cMaxX;\n if (isFullyHidden) return {\n x: 0,\n y: 0,\n isHidden: true,\n value: 0\n };\n const visibleLineMinX = Math.max(lineMinX, cMinX);\n const visibleLineMaxX = Math.min(lineMaxX, cMaxX);\n const visibleLineMinY = Math.max(lineMinY, cMinY);\n const visibleLineMaxY = Math.min(lineMaxY, cMaxY);\n const centerX = (visibleLineMinX + visibleLineMaxX) / 2;\n const centerY = (visibleLineMinY + visibleLineMaxY) / 2;\n let targetX = naturalX;\n let targetY = naturalY;\n if (Math.abs(start.x - end.x) < 1) {\n targetY = centerY;\n targetX = Math.max(cMinX + margin, Math.min(cMaxX - margin, targetX));\n } else if (Math.abs(start.y - end.y) < 1) {\n targetX = centerX;\n targetY = Math.max(cMinY + margin, Math.min(cMaxY - margin, targetY));\n } else {\n targetX = Math.max(cMinX + margin, Math.min(cMaxX - margin, naturalX));\n targetY = Math.max(cMinY + margin, Math.min(cMaxY - margin, naturalY));\n }\n return {\n x: targetX,\n y: targetY,\n isHidden: false,\n value: liveValue\n };\n });\n return _$createComponent2(Show2, {\n get when() {\n return _$memo(() => !!position())() && !position().isHidden;\n },\n get children() {\n var _el$2 = _tmpl$22();\n _el$2.$$click = (e) => {\n e.stopPropagation();\n const pos = position();\n if (pos && !pos.isHidden) {\n props.onLineClick?.(line, pos.value);\n }\n };\n _$className(_el$2, `${PREFIX}label`);\n _$insert2(_el$2, () => Math.round(position().value * 100) / 100);\n _$effect2((_$p) => _$setStyleProperty(_el$2, \"transform\", `translate3d(${position().x}px, ${position().y}px, 0) translate(-50%, -50%)`));\n return _el$2;\n }\n });\n }\n }));\n return _el$;\n })();\n}\n_$delegateEvents2([\"click\"]);\n\n// src/ui/utils/calculator.tsx\nimport { template as _$template4 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty2 } from \"solid-js/web\";\nimport { effect as _$effect4 } from \"solid-js/web\";\nimport { className as _$className2 } from \"solid-js/web\";\nimport { memo as _$memo2 } from \"solid-js/web\";\nimport { createComponent as _$createComponent3 } from \"solid-js/web\";\nimport { insert as _$insert3 } from \"solid-js/web\";\nimport { Show as Show3 } from \"solid-js\";\n\n// src/ui/utils/icons.tsx\nimport { template as _$template3 } from \"solid-js/web\";\nimport { style as _$style } from \"solid-js/web\";\nimport { effect as _$effect3 } from \"solid-js/web\";\nvar _tmpl$5 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=12 y1=5 x2=12 y2=19></line><line x1=5 y1=12 x2=19 y2=12>`);\nvar _tmpl$23 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=5 y1=12 x2=19 y2=12>`);\nvar _tmpl$32 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=18 y1=6 x2=6 y2=18></line><line x1=6 y1=6 x2=18 y2=18>`);\nvar _tmpl$42 = /* @__PURE__ */ _$template3(`<svg viewBox=\"0 0 24 24\"><line x1=19 y1=5 x2=5 y2=19>`);\nvar iconStyle = {\n width: \"12px\",\n height: \"12px\",\n \"stroke-width\": \"2.5\",\n stroke: \"currentColor\",\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n display: \"block\"\n};\nvar Icons = {\n \"+\": () => (() => {\n var _el$ = _tmpl$5();\n _$effect3((_$p) => _$style(_el$, iconStyle, _$p));\n return _el$;\n })(),\n \"-\": () => (() => {\n var _el$2 = _tmpl$23();\n _$effect3((_$p) => _$style(_el$2, iconStyle, _$p));\n return _el$2;\n })(),\n \"*\": () => (() => {\n var _el$3 = _tmpl$32();\n _$effect3((_$p) => _$style(_el$3, iconStyle, _$p));\n return _el$3;\n })(),\n \"/\": () => (() => {\n var _el$4 = _tmpl$42();\n _$effect3((_$p) => _$style(_el$4, iconStyle, _$p));\n return _el$4;\n })()\n};\n\n// src/ui/utils/calculator.tsx\nvar _tmpl$6 = /* @__PURE__ */ _$template4(`<span>`);\nvar _tmpl$24 = /* @__PURE__ */ _$template4(`<span>= `);\nvar _tmpl$33 = /* @__PURE__ */ _$template4(`<div data-caliper-ignore style=top:0;left:0><span>`);\nfunction Calculator(props) {\n const formatValue = (value) => {\n return Math.round(value * 100) / 100 + \"\";\n };\n return _$createComponent3(Show3, {\n get when() {\n return props.state.isActive;\n },\n get children() {\n var _el$ = _tmpl$33(), _el$2 = _el$.firstChild;\n _$insert3(_el$2, () => formatValue(props.state.baseValue));\n _$insert3(_el$, _$createComponent3(Show3, {\n keyed: true,\n get when() {\n return props.state.operation;\n },\n children: (operation) => {\n const Icon = Icons[operation];\n return (() => {\n var _el$6 = _tmpl$6();\n _$className2(_el$6, `${PREFIX}calculator-operation`);\n _$insert3(_el$6, _$createComponent3(Show3, {\n when: Icon,\n fallback: operation,\n get children() {\n return _$createComponent3(Icon, {});\n }\n }));\n return _el$6;\n })();\n }\n }), null);\n _$insert3(_el$, _$createComponent3(Show3, {\n get when() {\n return props.state.inputValue || props.state.operation;\n },\n get children() {\n var _el$3 = _tmpl$6();\n _$className2(_el$3, `${PREFIX}calculator-input`);\n _$insert3(_el$3, () => props.state.inputValue || \"0\");\n return _el$3;\n }\n }), null);\n _$insert3(_el$, _$createComponent3(Show3, {\n get when() {\n return props.state.result !== null;\n },\n get children() {\n var _el$4 = _tmpl$24(), _el$5 = _el$4.firstChild;\n _$className2(_el$4, `${PREFIX}calculator-result`);\n _$insert3(_el$4, (() => {\n var _c$ = _$memo2(() => props.state.result !== null);\n return () => _c$() ? formatValue(props.state.result) : \"\";\n })(), null);\n return _el$4;\n }\n }), null);\n _$effect4((_p$) => {\n var _v$ = `${PREFIX}calculator ${props.isFocused ? `${PREFIX}calculator-focused` : \"\"}`, _v$2 = `translate3d(${props.position.x + 10}px, ${props.position.y + 10}px, 0)`, _v$3 = `${PREFIX}calculator-base ${props.state.operation ? `${PREFIX}calculator-base-active` : \"\"}`;\n _v$ !== _p$.e && _$className2(_el$, _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty2(_el$, \"transform\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$className2(_el$2, _p$.a = _v$3);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0\n });\n return _el$;\n }\n });\n}\n\n// src/ui/utils/render-boundary-boxes.tsx\nimport { template as _$template5 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty3 } from \"solid-js/web\";\nimport { effect as _$effect5 } from \"solid-js/web\";\nimport { className as _$className3 } from \"solid-js/web\";\nimport { createComponent as _$createComponent4 } from \"solid-js/web\";\nimport { createEffect, createSignal as createSignal2, on, onCleanup, Show as Show4, createMemo as createMemo3 } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { lerpRect, getLiveGeometry, getOverlayRoot } from \"@caliper/core\";\nvar _tmpl$7 = /* @__PURE__ */ _$template5(`<div style=left:0;top:0>`);\nfunction BoundaryBoxes(props) {\n const [anchor, setAnchor] = createSignal2(null);\n const [target, setTarget] = createSignal2(null);\n let lastElement = null;\n let rafId = null;\n const isRectSame = (a, b, threshold = 0.1) => {\n if (!a || !b) return false;\n return Math.abs(a.left - b.left) < threshold && Math.abs(a.top - b.top) < threshold && Math.abs(a.width - b.width) < threshold && Math.abs(a.height - b.height) < threshold;\n };\n const lerpTo = (current, targetGeo, lerpFactor) => {\n if (!targetGeo) return null;\n if (!current) return {\n ...targetGeo\n };\n const next = lerpRect(current, targetGeo, lerpFactor);\n if (isRectSame(next, targetGeo, 0.1)) {\n return {\n ...targetGeo\n };\n }\n return {\n ...targetGeo,\n left: next.left,\n top: next.top,\n width: next.width,\n height: next.height\n };\n };\n const isDegenerate = (geo) => geo !== null && geo.width === 0 && geo.height === 0;\n const liveSelectionTarget = createMemo3((prev) => {\n props.viewport.version;\n if (prev && props.metadata.element && !document.contains(props.metadata.element)) {\n return prev;\n }\n const geo = getLiveGeometry(props.metadata.rect, props.metadata.scrollHierarchy, props.metadata.position, props.metadata.stickyConfig, props.metadata.initialWindowX, props.metadata.initialWindowY);\n if (isDegenerate(geo)) return prev;\n return geo;\n }, null);\n const liveSecondaryTarget = createMemo3((prev) => {\n props.viewport.version;\n const res = props.result;\n if (!(props.isActivatePressed || props.isFrozen) || !res) return null;\n if (prev && res.secondaryElement && !document.contains(res.secondaryElement)) {\n return prev;\n }\n const geo = getLiveGeometry(res.secondary, res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY);\n if (isDegenerate(geo)) return prev;\n return geo;\n }, null);\n createEffect(on([liveSelectionTarget, liveSecondaryTarget, () => props.animation.lerpFactor, () => props.metadata.element], ([selection, secondary, factor, element]) => {\n if (!selection) {\n setAnchor(null);\n setTarget(null);\n lastElement = null;\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n return;\n }\n const isNewElement = lastElement !== element;\n const useLerp = props.animation.enabled !== false;\n setTarget(secondary);\n if (isNewElement) {\n lastElement = element;\n if (useLerp) {\n const animate = () => {\n const currentAnchor = anchor();\n const nextAnchor = lerpTo(currentAnchor, selection, factor);\n setAnchor(nextAnchor);\n if (selection && !isRectSame(nextAnchor, selection, 0.05)) {\n rafId = requestAnimationFrame(animate);\n } else {\n rafId = null;\n }\n };\n if (rafId) cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(animate);\n } else {\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n setAnchor(selection);\n }\n } else {\n if (!rafId) {\n setAnchor(selection);\n }\n }\n }));\n onCleanup(() => {\n if (rafId) cancelAnimationFrame(rafId);\n });\n return [_$createComponent4(Show4, {\n get when() {\n return anchor();\n },\n children: (current) => _$createComponent4(Portal, {\n get mount() {\n return getOverlayRoot();\n },\n get children() {\n var _el$ = _tmpl$7();\n _$className3(_el$, `${PREFIX}boundary-box ${PREFIX}boundary-box-selected`);\n _$effect5((_p$) => {\n var _v$ = `${current().width}px`, _v$2 = `${current().height}px`, _v$3 = `translate3d(${current().left - props.viewport.scrollX}px, ${current().top - props.viewport.scrollY}px, 0)`, _v$4 = current().clipPath;\n _v$ !== _p$.e && _$setStyleProperty3(_el$, \"width\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty3(_el$, \"height\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setStyleProperty3(_el$, \"transform\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setStyleProperty3(_el$, \"clip-path\", _p$.o = _v$4);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0\n });\n return _el$;\n }\n })\n }), _$createComponent4(Show4, {\n get when() {\n return target();\n },\n children: (current) => _$createComponent4(Portal, {\n get mount() {\n return getOverlayRoot();\n },\n get children() {\n var _el$2 = _tmpl$7();\n _$className3(_el$2, `${PREFIX}boundary-box ${PREFIX}boundary-box-secondary`);\n _$effect5((_p$) => {\n var _v$5 = `${current().width}px`, _v$6 = `${current().height}px`, _v$7 = `translate3d(${current().left - props.viewport.scrollX}px, ${current().top - props.viewport.scrollY}px, 0)`, _v$8 = current().clipPath;\n _v$5 !== _p$.e && _$setStyleProperty3(_el$2, \"width\", _p$.e = _v$5);\n _v$6 !== _p$.t && _$setStyleProperty3(_el$2, \"height\", _p$.t = _v$6);\n _v$7 !== _p$.a && _$setStyleProperty3(_el$2, \"transform\", _p$.a = _v$7);\n _v$8 !== _p$.o && _$setStyleProperty3(_el$2, \"clip-path\", _p$.o = _v$8);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0\n });\n return _el$2;\n }\n })\n })];\n}\n\n// src/ui/utils/render-selection-label.tsx\nimport { template as _$template6 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty4 } from \"solid-js/web\";\nimport { effect as _$effect6 } from \"solid-js/web\";\nimport { insert as _$insert4 } from \"solid-js/web\";\nimport { className as _$className4 } from \"solid-js/web\";\nimport { createComponent as _$createComponent5 } from \"solid-js/web\";\nimport { Show as Show5, createMemo as createMemo4 } from \"solid-js\";\nimport { getLiveGeometry as getLiveGeometry2, getOverlayRoot as getOverlayRoot2 } from \"@caliper/core\";\nimport { Portal as Portal2 } from \"solid-js/web\";\nvar _tmpl$8 = /* @__PURE__ */ _$template6(`<span>Copied!`);\nvar _tmpl$25 = /* @__PURE__ */ _$template6(`<div style=left:0;top:0>`);\nvar _tmpl$34 = /* @__PURE__ */ _$template6(`<span> \\xD7 `);\nfunction SelectionLabel(props) {\n const margin = 16;\n const liveGeo = createMemo4(() => {\n props.viewport.version;\n return getLiveGeometry2(props.metadata.rect, props.metadata.scrollHierarchy, props.metadata.position, props.metadata.stickyConfig, props.metadata.initialWindowX, props.metadata.initialWindowY);\n });\n const labelData = createMemo4(() => {\n const geo = liveGeo();\n if (!geo || geo.isHidden) return null;\n const vLeft = props.viewport.scrollX;\n const vRight = props.viewport.scrollX + props.viewport.width;\n const vBottom = props.viewport.scrollY + props.viewport.height;\n const cLeft = geo.visibleMinX;\n const cRight = geo.visibleMaxX;\n const cBottom = geo.visibleMaxY;\n const effectiveMinX = Math.max(vLeft, cLeft);\n const effectiveMaxX = Math.min(vRight, cRight);\n const effectiveMaxY = Math.min(vBottom, cBottom);\n const visibleLeft = Math.max(geo.left, effectiveMinX + margin);\n const visibleRight = Math.min(geo.left + geo.width, effectiveMaxX - margin);\n let snapX = (visibleLeft + visibleRight) / 2;\n let snapY = geo.top + geo.height + 8;\n if (snapY > effectiveMaxY - margin - 24) {\n if (geo.top < effectiveMaxY - margin) {\n snapY = effectiveMaxY - margin - 24;\n }\n }\n snapY = Math.max(snapY, geo.top + margin);\n return {\n width: Math.round(geo.width),\n height: Math.round(geo.height),\n x: snapX,\n y: snapY\n };\n });\n return _$createComponent5(Show5, {\n get when() {\n return labelData();\n },\n children: (data) => _$createComponent5(Portal2, {\n get mount() {\n return getOverlayRoot2();\n },\n get children() {\n var _el$ = _tmpl$25();\n _$insert4(_el$, _$createComponent5(Show5, {\n get when() {\n return props.isCopied;\n },\n get fallback() {\n return (() => {\n var _el$3 = _tmpl$34(), _el$4 = _el$3.firstChild;\n _$className4(_el$3, `${PREFIX}selection-label-content`);\n _$insert4(_el$3, () => data().width, _el$4);\n _$insert4(_el$3, () => data().height, null);\n return _el$3;\n })();\n },\n get children() {\n var _el$2 = _tmpl$8();\n _$className4(_el$2, `${PREFIX}selection-label-content`);\n return _el$2;\n }\n }));\n _$effect6((_p$) => {\n var _v$ = `${PREFIX}selection-label ${props.isCopied ? `${PREFIX}selection-label-success` : \"\"}`, _v$2 = `translate3d(${data().x - props.viewport.scrollX}px, ${data().y - props.viewport.scrollY}px, 0) translate(-50%, 0)`, _v$3 = props.isActivatePressed ? 0 : 1;\n _v$ !== _p$.e && _$className4(_el$, _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty4(_el$, \"transform\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setStyleProperty4(_el$, \"opacity\", _p$.a = _v$3);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0\n });\n return _el$;\n }\n })\n });\n}\n\n// src/ui/utils/projection.tsx\nimport { template as _$template7 } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents3 } from \"solid-js/web\";\nimport { style as _$style2 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty5 } from \"solid-js/web\";\nimport { insert as _$insert5 } from \"solid-js/web\";\nimport { className as _$className5 } from \"solid-js/web\";\nimport { effect as _$effect7 } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute2 } from \"solid-js/web\";\nimport { createComponent as _$createComponent6 } from \"solid-js/web\";\nimport { memo as _$memo3 } from \"solid-js/web\";\nimport { Show as Show6, createMemo as createMemo5, createSignal as createSignal3 } from \"solid-js\";\nimport { getLiveGeometry as getLiveGeometry3 } from \"@caliper/core\";\nvar _tmpl$9 = /* @__PURE__ */ _$template7(`<svg style=z-index:1000000><line data-caliper-ignore stroke=transparent stroke-width=15></line><line>`);\nvar _tmpl$26 = /* @__PURE__ */ _$template7(`<div data-caliper-ignore style=top:0;left:0>`);\nvar _tmpl$35 = /* @__PURE__ */ _$template7(`<div data-caliper-ignore><span></span><span>`);\nfunction ProjectionOverlay(props) {\n return _$createComponent6(Show6, {\n get when() {\n return _$memo3(() => !!props.metadata().element)() && props.projectionState().direction;\n },\n get children() {\n return [_$createComponent6(ProjectionLines, {\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.metadata;\n },\n get viewport() {\n return props.viewport;\n },\n get onLineClick() {\n return props.onLineClick;\n }\n }), _$createComponent6(ProjectionInput, {\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.metadata;\n },\n get viewport() {\n return props.viewport;\n },\n get isFocused() {\n return props.isFocused;\n }\n })];\n }\n });\n}\nfunction ProjectionLines(props) {\n const lineData = createMemo5(() => {\n const vp = props.viewport();\n vp.version;\n const state = props.projectionState();\n const value = parseFloat(state.value) || 0;\n const metadata = props.metadata();\n const live = getLiveGeometry3(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n if (!live) return null;\n let x1 = 0, y1 = 0, x2 = 0, y2 = 0;\n let labelX = 0, labelY = 0;\n let visibleY1 = 0, visibleY2 = 0, visibleX1 = 0, visibleX2 = 0;\n const docWidth = document.documentElement.scrollWidth;\n const docHeight = document.documentElement.scrollHeight;\n const liveX = live.left - vp.scrollX;\n const liveY = live.top - vp.scrollY;\n let isOffScreen = false;\n switch (state.direction) {\n case \"top\":\n x1 = x2 = liveX + live.width / 2;\n y1 = liveY;\n y2 = Math.max(-vp.scrollY, y1 - value);\n labelX = x1;\n visibleY1 = Math.max(0, Math.min(vp.height, y1));\n visibleY2 = Math.max(0, Math.min(vp.height, y2));\n if (Math.abs(visibleY1 - visibleY2) < 1) isOffScreen = true;\n labelY = (Math.min(visibleY1, visibleY2) + Math.max(visibleY1, visibleY2)) / 2;\n break;\n case \"bottom\":\n x1 = x2 = liveX + live.width / 2;\n y1 = liveY + live.height;\n y2 = Math.min(docHeight - vp.scrollY, y1 + value);\n labelX = x1;\n visibleY1 = Math.max(0, Math.min(vp.height, y1));\n visibleY2 = Math.max(0, Math.min(vp.height, y2));\n if (Math.abs(visibleY1 - visibleY2) < 1) isOffScreen = true;\n labelY = (Math.min(visibleY1, visibleY2) + Math.max(visibleY1, visibleY2)) / 2;\n break;\n case \"left\":\n y1 = y2 = liveY + live.height / 2;\n x1 = liveX;\n x2 = Math.max(-vp.scrollX, x1 - value);\n visibleX1 = Math.max(0, Math.min(vp.width, x1));\n visibleX2 = Math.max(0, Math.min(vp.width, x2));\n if (Math.abs(visibleX1 - visibleX2) < 1) isOffScreen = true;\n labelX = (Math.min(visibleX1, visibleX2) + Math.max(visibleX1, visibleX2)) / 2;\n labelY = y1;\n break;\n case \"right\":\n y1 = y2 = liveY + live.height / 2;\n x1 = liveX + live.width;\n x2 = Math.min(docWidth - vp.scrollX, x1 + value);\n visibleX1 = Math.max(0, Math.min(vp.width, x1));\n visibleX2 = Math.max(0, Math.min(vp.width, x2));\n if (Math.abs(visibleX1 - visibleX2) < 1) isOffScreen = true;\n labelX = (Math.min(visibleX1, visibleX2) + Math.max(visibleX1, visibleX2)) / 2;\n labelY = y1;\n break;\n }\n const rawValue = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n const actualValue = Number.isInteger(rawValue) ? rawValue : Math.round(rawValue * 100) / 100;\n const displayValue = state.value || String(actualValue);\n const labelWidthGuess = displayValue.length * 8 + 12;\n const labelHeightGuess = 20;\n const isHorizontal = state.direction === \"left\" || state.direction === \"right\";\n const visibleLineLength = isHorizontal ? Math.abs(visibleX1 - visibleX2) : Math.abs(visibleY1 - visibleY2);\n const labelSize = isHorizontal ? labelWidthGuess : labelHeightGuess;\n const showLabel = visibleLineLength >= labelSize * 1.5;\n return {\n x1,\n y1,\n x2,\n y2,\n labelX,\n labelY,\n actualValue,\n isHidden: live.isHidden || isOffScreen,\n showLabel\n };\n });\n const [isHovered, setIsHovered] = createSignal3(false);\n const handleLineClick = (e) => {\n e.stopPropagation();\n const data = lineData();\n if (data) {\n props.onLineClick?.({\n type: \"distance\",\n value: data.actualValue,\n start: {\n x: data.x1,\n y: data.y1\n },\n end: {\n x: data.x2,\n y: data.y2\n }\n }, data.actualValue);\n }\n };\n return _$createComponent6(Show6, {\n get when() {\n return _$memo3(() => !!lineData())() && !lineData()?.isHidden;\n },\n get children() {\n return [(() => {\n var _el$ = _tmpl$9(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;\n _$setAttribute2(_el$, \"class\", `${PREFIX}viewport-fixed`);\n _el$2.addEventListener(\"mouseleave\", () => setIsHovered(false));\n _el$2.addEventListener(\"mouseenter\", () => setIsHovered(true));\n _el$2.$$click = handleLineClick;\n _$setAttribute2(_el$2, \"class\", `${PREFIX}line-hit-target`);\n _$setAttribute2(_el$3, \"class\", `${PREFIX}projection-line`);\n _$effect7((_p$) => {\n var _v$ = lineData().x1, _v$2 = lineData().y1, _v$3 = lineData().x2, _v$4 = lineData().y2, _v$5 = lineData().x1, _v$6 = lineData().y1, _v$7 = lineData().x2, _v$8 = lineData().y2, _v$9 = isHovered() ? 2 : 1;\n _v$ !== _p$.e && _$setAttribute2(_el$2, \"x1\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute2(_el$2, \"y1\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setAttribute2(_el$2, \"x2\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute2(_el$2, \"y2\", _p$.o = _v$4);\n _v$5 !== _p$.i && _$setAttribute2(_el$3, \"x1\", _p$.i = _v$5);\n _v$6 !== _p$.n && _$setAttribute2(_el$3, \"y1\", _p$.n = _v$6);\n _v$7 !== _p$.s && _$setAttribute2(_el$3, \"x2\", _p$.s = _v$7);\n _v$8 !== _p$.h && _$setAttribute2(_el$3, \"y2\", _p$.h = _v$8);\n _v$9 !== _p$.r && _$setAttribute2(_el$3, \"stroke-width\", _p$.r = _v$9);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0,\n s: void 0,\n h: void 0,\n r: void 0\n });\n return _el$;\n })(), _$createComponent6(Show6, {\n get when() {\n return lineData().showLabel;\n },\n get children() {\n var _el$4 = _tmpl$26();\n _el$4.$$click = handleLineClick;\n _$className5(_el$4, `${PREFIX}label ${PREFIX}projection-label`);\n _$insert5(_el$4, () => lineData().actualValue);\n _$effect7((_$p) => _$setStyleProperty5(_el$4, \"transform\", `translate3d(${lineData().labelX}px, ${lineData().labelY}px, 0) translate(-50%, -50%)`));\n return _el$4;\n }\n })];\n }\n });\n}\nfunction ProjectionInput(props) {\n const style = createMemo5(() => {\n const vp = props.viewport();\n vp.version;\n const metadata = props.metadata();\n const live = getLiveGeometry3(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n if (!live || live.isHidden) return {\n display: \"none\"\n };\n const windowTop = live.top - vp.scrollY;\n const windowLeft = live.left - vp.scrollX;\n const inputHeight = 35;\n const margin = 10;\n const shouldFlip = windowTop < inputHeight + margin;\n const y = shouldFlip ? windowTop + live.height + margin : windowTop - inputHeight;\n return {\n top: \"0\",\n left: \"0\",\n transform: `translate3d(${windowLeft}px, ${y}px, 0)`\n };\n });\n return (() => {\n var _el$5 = _tmpl$35(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;\n _$className5(_el$6, `${PREFIX}projection-direction-tag`);\n _$insert5(_el$6, () => props.projectionState().direction);\n _$className5(_el$7, `${PREFIX}projection-current-value`);\n _$insert5(_el$7, () => props.projectionState().value || \"0\");\n _$effect7((_p$) => {\n var _v$0 = `${PREFIX}projection-input ${props.isFocused ? `${PREFIX}projection-input-focused` : \"\"}`, _v$1 = style();\n _v$0 !== _p$.e && _$className5(_el$5, _p$.e = _v$0);\n _p$.t = _$style2(_el$5, _v$1, _p$.t);\n return _p$;\n }, {\n e: void 0,\n t: void 0\n });\n return _el$5;\n })();\n}\n_$delegateEvents3([\"click\"]);\n\n// src/ui/utils/ruler.tsx\nimport { template as _$template8 } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents4 } from \"solid-js/web\";\nimport { memo as _$memo4 } from \"solid-js/web\";\nimport { style as _$style3 } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty6 } from \"solid-js/web\";\nimport { effect as _$effect8 } from \"solid-js/web\";\nimport { insert as _$insert6 } from \"solid-js/web\";\nimport { createComponent as _$createComponent7 } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute3 } from \"solid-js/web\";\nimport { className as _$className6 } from \"solid-js/web\";\nimport { For as For3, Show as Show7, createSignal as createSignal4, createMemo as createMemo6, onMount, onCleanup as onCleanup2, createEffect as createEffect2 } from \"solid-js\";\nimport { getLiveGeometry as getLiveGeometry4, RULER_SNAP_THRESHOLD, RULER_HIT_SIZE } from \"@caliper/core\";\nvar _tmpl$10 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore><svg style=z-index:999999>`);\nvar _tmpl$27 = /* @__PURE__ */ _$template8(`<svg><g data-caliper-ignore style=cursor:pointer;pointer-events:auto><line stroke=transparent stroke-width=15></line><line stroke=var(--caliper-secondary) stroke-width=1 stroke-dasharray=\"4 2\"></line><circle r=2.5 fill=var(--caliper-secondary)></circle><circle r=2.5 fill=var(--caliper-secondary)></svg>`, false, true, false);\nvar _tmpl$36 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore style=left:0;top:0>`);\nvar _tmpl$43 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore style=position:fixed;left:0;top:0;pointer-events:auto;z-index:1000001>`);\nvar _tmpl$52 = /* @__PURE__ */ _$template8(`<div data-caliper-ignore>`);\nfunction RulerOverlay(props) {\n const [draggingId, setDraggingId] = createSignal4(null);\n const [hoveredId, setHoveredId] = createSignal4(null);\n const [selectedIds, setSelectedIds] = createSignal4(/* @__PURE__ */ new Set());\n const [rulerOrigins, setRulerOrigins] = createSignal4(/* @__PURE__ */ new Map());\n createEffect2(() => {\n const lines = props.state().lines;\n const currentIds = selectedIds();\n const validIds = /* @__PURE__ */ new Set();\n currentIds.forEach((id) => {\n if (lines.find((line) => line.id === id)) {\n validIds.add(id);\n }\n });\n if (validIds.size !== currentIds.size) {\n setSelectedIds(validIds);\n }\n });\n createEffect2(() => {\n const lines = props.state().lines;\n const vp = props.viewport();\n const origins = rulerOrigins();\n let updated = false;\n const newOrigins = new Map(origins);\n lines.forEach((line) => {\n if (!newOrigins.has(line.id)) {\n newOrigins.set(line.id, {\n width: vp.width,\n height: vp.height\n });\n updated = true;\n }\n });\n const lineIds = new Set(lines.map((line) => line.id));\n newOrigins.forEach((_, id) => {\n if (!lineIds.has(id)) {\n newOrigins.delete(id);\n updated = true;\n }\n });\n if (updated) {\n setRulerOrigins(newOrigins);\n }\n });\n const getProportionalPosition = (line) => {\n const vp = props.viewport();\n const origin = rulerOrigins().get(line.id);\n if (!origin) {\n return line.position;\n }\n const isV = line.type === \"vertical\";\n const originDim = isV ? origin.width : origin.height;\n const currentDim = isV ? vp.width : vp.height;\n if (originDim === 0) return line.position;\n const ratio = line.position / originDim;\n return ratio * currentDim;\n };\n const getSnapPoints = (isV) => {\n const points = [];\n const state = props.projectionState?.();\n const meta = props.metadata?.();\n const res = props.result?.();\n const vp = props.viewport();\n if (meta && meta.element) {\n const live = getLiveGeometry4(meta.rect, meta.scrollHierarchy, meta.position, meta.stickyConfig, meta.initialWindowX, meta.initialWindowY);\n if (live) {\n const liveX = live.left - vp.scrollX;\n const liveY = live.top - vp.scrollY;\n if (isV) {\n points.push(liveX, liveX + live.width, liveX + live.width / 2);\n } else {\n points.push(liveY, liveY + live.height, liveY + live.height / 2);\n }\n if (state && state.direction && state.element === meta.element) {\n const value = parseFloat(state.value) || 0;\n if (isV) {\n if (state.direction === \"left\") points.push(liveX - value);\n else if (state.direction === \"right\") points.push(liveX + live.width + value);\n } else {\n if (state.direction === \"top\") points.push(liveY - value);\n else if (state.direction === \"bottom\") points.push(liveY + live.height + value);\n }\n }\n }\n }\n if (res && res.secondary) {\n const live = getLiveGeometry4(res.secondary, res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY);\n if (live) {\n const liveX = live.left - vp.scrollX;\n const liveY = live.top - vp.scrollY;\n if (isV) {\n points.push(liveX, liveX + live.width, liveX + live.width / 2);\n } else {\n points.push(liveY, liveY + live.height, liveY + live.height / 2);\n }\n }\n }\n return points;\n };\n const applySnap = (pos, isV) => {\n const points = getSnapPoints(isV);\n for (const p of points) {\n if (Math.abs(pos - p) <= RULER_SNAP_THRESHOLD) {\n return p;\n }\n }\n return pos;\n };\n const handleKeyDown = (e) => {\n const activeIds = selectedIds();\n if (activeIds.size === 0) return;\n if (e.key === \"Delete\" || e.key === \"Backspace\") {\n const idsToRemove = Array.from(activeIds);\n idsToRemove.forEach((id) => props.onRemove(id));\n setSelectedIds(/* @__PURE__ */ new Set());\n return;\n }\n const lines = props.state().lines;\n const activeLines = lines.filter((line) => activeIds.has(line.id));\n if (activeLines.length === 0) return;\n let step = 1;\n if (e.ctrlKey || e.metaKey) step = 10;\n else if (e.shiftKey) step = 0.1;\n const firstLine = activeLines[0];\n if (!firstLine) return;\n const isV = firstLine.type === \"vertical\";\n let delta = 0;\n if (isV) {\n if (e.key === \"ArrowLeft\") delta = -step;\n if (e.key === \"ArrowRight\") delta = step;\n } else {\n if (e.key === \"ArrowUp\") delta = -step;\n if (e.key === \"ArrowDown\") delta = step;\n }\n if (delta !== 0) {\n e.preventDefault();\n const vp = props.viewport();\n activeLines.forEach((line) => {\n const isLineV = line.type === \"vertical\";\n const max = (isLineV ? vp.width : vp.height) - 1;\n const currentPos = getProportionalPosition(line);\n let newPos = Math.max(0, Math.min(currentPos + delta, max));\n newPos = applySnap(newPos, isLineV);\n setRulerOrigins((prev) => {\n const next = new Map(prev);\n next.set(line.id, {\n width: vp.width,\n height: vp.height\n });\n return next;\n });\n props.onUpdate(line.id, newPos);\n });\n }\n };\n onMount(() => {\n const handleGlobalClick = (e) => {\n const target = e.target;\n if (!target.closest(`.${PREFIX}ruler-line-hit`) && !target.closest(`.${PREFIX}ruler-bridge-label`) && !target.closest(`.${PREFIX}line-hit-target`) && !target.closest(`[data-caliper-ignore]`)) {\n setSelectedIds(/* @__PURE__ */ new Set());\n }\n };\n window.addEventListener(\"pointerdown\", handleGlobalClick, {\n capture: true\n });\n window.addEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n onCleanup2(() => {\n window.removeEventListener(\"pointerdown\", handleGlobalClick, {\n capture: true\n });\n window.removeEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n });\n });\n const handlePointerDown = (e) => {\n const target = e.target;\n const id = target.getAttribute(\"data-ruler-id\");\n const type = target.getAttribute(\"data-ruler-type\");\n if (!id || !type) return;\n e.preventDefault();\n e.stopPropagation();\n setDraggingId(id);\n target.setPointerCapture(e.pointerId);\n const vp = props.viewport();\n const line = props.state().lines.find((line2) => line2.id === id);\n if (line) {\n const currentPos = getProportionalPosition(line);\n setRulerOrigins((prev) => {\n const next = new Map(prev);\n next.set(id, {\n width: vp.width,\n height: vp.height\n });\n return next;\n });\n props.onUpdate(id, currentPos);\n }\n if (e.shiftKey) {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n } else {\n if (!selectedIds().has(id)) {\n setSelectedIds(/* @__PURE__ */ new Set([id]));\n }\n }\n const onPointerMove = (moveEvent) => {\n const vp2 = props.viewport();\n const isV = type === \"vertical\";\n let pos = isV ? moveEvent.clientX : moveEvent.clientY;\n const max = (isV ? vp2.width : vp2.height) - 1;\n pos = Math.max(0, Math.min(pos, max));\n pos = applySnap(pos, isV);\n props.onUpdate(id, pos);\n };\n const onPointerUp = (upEvent) => {\n setDraggingId(null);\n target.releasePointerCapture(upEvent.pointerId);\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n };\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n };\n const handlePointerOver = (e) => {\n const target = e.target;\n const id = target.getAttribute(\"data-ruler-id\");\n if (id) setHoveredId(id);\n };\n const handlePointerOut = (e) => {\n const target = e.target;\n if (target.hasAttribute(\"data-ruler-id\")) setHoveredId(null);\n };\n const bridges = createMemo6(() => {\n const ids = selectedIds();\n if (ids.size < 2) return [];\n const lines = props.state().lines.filter((line) => ids.has(line.id));\n const vLinesWithPos = lines.filter((line) => line.type === \"vertical\").map((line) => ({\n line,\n pos: getProportionalPosition(line)\n })).sort((a, b) => a.pos - b.pos);\n const hLinesWithPos = lines.filter((line) => line.type === \"horizontal\").map((line) => ({\n line,\n pos: getProportionalPosition(line)\n })).sort((a, b) => a.pos - b.pos);\n const result = [];\n const vp = props.viewport();\n for (let i = 0; i < vLinesWithPos.length - 1; i++) {\n const l1 = vLinesWithPos[i];\n const l2 = vLinesWithPos[i + 1];\n const val = l2.pos - l1.pos;\n if (val > 0) {\n result.push({\n x1: l1.pos,\n y1: vp.height / 2 + 100,\n // Move default bridge line off center for better visibility\n x2: l2.pos,\n y2: vp.height / 2 + 100,\n value: val,\n type: \"vertical\",\n labelX: l1.pos + val / 2,\n labelY: vp.height / 2 + 85\n });\n }\n }\n for (let i = 0; i < hLinesWithPos.length - 1; i++) {\n const l1 = hLinesWithPos[i];\n const l2 = hLinesWithPos[i + 1];\n const val = l2.pos - l1.pos;\n if (val > 0) {\n result.push({\n x1: vp.width / 2 + 100,\n y1: l1.pos,\n x2: vp.width / 2 + 100,\n y2: l2.pos,\n value: val,\n type: \"horizontal\",\n labelX: vp.width / 2 + 115,\n labelY: l1.pos + val / 2\n });\n }\n }\n return result;\n });\n const handleClick = (bridge, e) => {\n e.stopPropagation();\n props.onLineClick?.({\n type: \"distance\",\n value: bridge.value,\n start: {\n x: bridge.x1,\n y: bridge.y1\n },\n end: {\n x: bridge.x2,\n y: bridge.y2\n }\n }, bridge.value);\n };\n return (() => {\n var _el$ = _tmpl$10(), _el$2 = _el$.firstChild;\n _el$.$$pointerout = handlePointerOut;\n _el$.$$pointerover = handlePointerOver;\n _el$.$$pointerdown = handlePointerDown;\n _$className6(_el$, `${PREFIX}ruler-layer`);\n _$setAttribute3(_el$2, \"class\", `${PREFIX}viewport-fixed`);\n _$insert6(_el$2, _$createComponent7(For3, {\n get each() {\n return bridges();\n },\n children: (bridge) => (() => {\n var _el$3 = _tmpl$27(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling;\n _el$3.$$click = (e) => handleClick(bridge, e);\n _$setAttribute3(_el$4, \"class\", `${PREFIX}line-hit-target`);\n _$effect8((_p$) => {\n var _v$ = bridge.x1, _v$2 = bridge.y1, _v$3 = bridge.x2, _v$4 = bridge.y2, _v$5 = bridge.x1, _v$6 = bridge.y1, _v$7 = bridge.x2, _v$8 = bridge.y2, _v$9 = bridge.x1, _v$0 = bridge.y1, _v$1 = bridge.x2, _v$10 = bridge.y2;\n _v$ !== _p$.e && _$setAttribute3(_el$4, \"x1\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute3(_el$4, \"y1\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setAttribute3(_el$4, \"x2\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute3(_el$4, \"y2\", _p$.o = _v$4);\n _v$5 !== _p$.i && _$setAttribute3(_el$5, \"x1\", _p$.i = _v$5);\n _v$6 !== _p$.n && _$setAttribute3(_el$5, \"y1\", _p$.n = _v$6);\n _v$7 !== _p$.s && _$setAttribute3(_el$5, \"x2\", _p$.s = _v$7);\n _v$8 !== _p$.h && _$setAttribute3(_el$5, \"y2\", _p$.h = _v$8);\n _v$9 !== _p$.r && _$setAttribute3(_el$6, \"cx\", _p$.r = _v$9);\n _v$0 !== _p$.d && _$setAttribute3(_el$6, \"cy\", _p$.d = _v$0);\n _v$1 !== _p$.l && _$setAttribute3(_el$7, \"cx\", _p$.l = _v$1);\n _v$10 !== _p$.u && _$setAttribute3(_el$7, \"cy\", _p$.u = _v$10);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0,\n s: void 0,\n h: void 0,\n r: void 0,\n d: void 0,\n l: void 0,\n u: void 0\n });\n return _el$3;\n })()\n }));\n _$insert6(_el$, _$createComponent7(For3, {\n get each() {\n return bridges();\n },\n children: (bridge) => (() => {\n var _el$8 = _tmpl$36();\n _el$8.$$click = (e) => handleClick(bridge, e);\n _$className6(_el$8, `${PREFIX}label ${PREFIX}ruler-bridge-label`);\n _$insert6(_el$8, () => Math.round(bridge.value * 100) / 100);\n _$effect8((_$p) => _$setStyleProperty6(_el$8, \"transform\", `translate3d(${bridge.labelX}px, ${bridge.labelY}px, 0) translate(-50%, -50%)`));\n return _el$8;\n })()\n }), null);\n _$insert6(_el$, _$createComponent7(For3, {\n get each() {\n return props.state().lines;\n },\n children: (line) => _$createComponent7(RulerLineItem, {\n line,\n get pixelPosition() {\n return getProportionalPosition(line);\n },\n get isDragging() {\n return draggingId() === line.id;\n },\n get isHovered() {\n return hoveredId() === line.id;\n },\n get isSelected() {\n return selectedIds().has(line.id);\n },\n get onLineClick() {\n return props.onLineClick;\n },\n get viewport() {\n return props.viewport;\n }\n })\n }), null);\n return _el$;\n })();\n}\nfunction RulerLineItem(props) {\n const lineStyle = createMemo6(() => {\n const isV = props.line.type === \"vertical\";\n const pos = props.pixelPosition;\n const isActive = props.isDragging || props.isHovered || props.isSelected;\n return {\n left: \"0\",\n top: \"0\",\n width: isV ? \"1px\" : \"100%\",\n height: isV ? \"100%\" : \"1px\",\n transform: `translate3d(${isV ? pos : 0}px, ${isV ? 0 : pos}px, 0) ${isActive ? isV ? \"scaleX(1.5)\" : \"scaleY(1.5)\" : \"scale(1)\"}`,\n opacity: props.isSelected ? \"1\" : props.isHovered ? \"0.8\" : \"0.6\",\n filter: props.isSelected ? \"drop-shadow(0 0 1.5px var(--caliper-primary))\" : \"none\",\n \"transform-origin\": \"center\"\n };\n });\n const hitSize = createMemo6(() => `${RULER_HIT_SIZE}px`);\n const hitOffset = createMemo6(() => (RULER_HIT_SIZE - 1) / 2);\n return [(() => {\n var _el$9 = _tmpl$43();\n _$className6(_el$9, `${PREFIX}ruler-line-hit`);\n _$effect8((_p$) => {\n var _v$11 = props.line.id, _v$12 = props.line.type, _v$13 = props.line.type === \"vertical\" ? hitSize() : \"100%\", _v$14 = props.line.type === \"vertical\" ? \"100%\" : hitSize(), _v$15 = `translate3d(${props.line.type === \"vertical\" ? props.pixelPosition - hitOffset() : 0}px, ${props.line.type === \"vertical\" ? 0 : props.pixelPosition - hitOffset()}px, 0)`, _v$16 = props.line.type === \"vertical\" ? \"col-resize\" : \"row-resize\";\n _v$11 !== _p$.e && _$setAttribute3(_el$9, \"data-ruler-id\", _p$.e = _v$11);\n _v$12 !== _p$.t && _$setAttribute3(_el$9, \"data-ruler-type\", _p$.t = _v$12);\n _v$13 !== _p$.a && _$setStyleProperty6(_el$9, \"width\", _p$.a = _v$13);\n _v$14 !== _p$.o && _$setStyleProperty6(_el$9, \"height\", _p$.o = _v$14);\n _v$15 !== _p$.i && _$setStyleProperty6(_el$9, \"transform\", _p$.i = _v$15);\n _v$16 !== _p$.n && _$setStyleProperty6(_el$9, \"cursor\", _p$.n = _v$16);\n return _p$;\n }, {\n e: void 0,\n t: void 0,\n a: void 0,\n o: void 0,\n i: void 0,\n n: void 0\n });\n return _el$9;\n })(), (() => {\n var _el$0 = _tmpl$52();\n _$className6(_el$0, `${PREFIX}ruler-line-visual`);\n _$effect8((_$p) => _$style3(_el$0, {\n ...lineStyle()\n }, _$p));\n return _el$0;\n })(), _$createComponent7(Show7, {\n get when() {\n return props.isDragging || props.isHovered || props.isSelected;\n },\n get children() {\n var _el$1 = _tmpl$36();\n _el$1.$$click = (e) => {\n e.stopPropagation();\n const isV = props.line.type === \"vertical\";\n const vp = props.viewport();\n const pos = props.pixelPosition;\n props.onLineClick?.({\n type: \"distance\",\n value: pos,\n start: isV ? {\n x: pos,\n y: 0\n } : {\n x: 0,\n y: pos\n },\n end: isV ? {\n x: pos,\n y: vp.height\n } : {\n x: vp.width,\n y: pos\n }\n }, pos);\n };\n _$className6(_el$1, `${PREFIX}label ${PREFIX}ruler-label`);\n _$insert6(_el$1, () => Math.round(props.pixelPosition * 100) / 100);\n _$effect8((_p$) => {\n var _v$17 = `translate3d(${props.line.type === \"vertical\" ? props.pixelPosition + 10 : 20}px, ${props.line.type === \"vertical\" ? 20 : props.pixelPosition + 10}px, 0)`, _v$18 = props.isSelected && !props.isHovered && !props.isDragging ? \"0.7\" : \"1\";\n _v$17 !== _p$.e && _$setStyleProperty6(_el$1, \"transform\", _p$.e = _v$17);\n _v$18 !== _p$.t && _$setStyleProperty6(_el$1, \"opacity\", _p$.t = _v$18);\n return _p$;\n }, {\n e: void 0,\n t: void 0\n });\n return _el$1;\n }\n })];\n}\n_$delegateEvents4([\"pointerdown\", \"pointerover\", \"pointerout\", \"click\"]);\n\n// src/ui/utils/render-overlay.tsx\nvar _tmpl$11 = /* @__PURE__ */ _$template9(`<div>`);\nfunction Overlay(props) {\n const resultData = createMemo7(() => {\n const res = props.result();\n if (!res) return null;\n props.viewport().version;\n const primaryGeo = getLiveGeometry5(res.primary, res.primaryHierarchy, res.primaryPosition, res.primarySticky, res.primaryWinX, res.primaryWinY, !!res.primaryHasContainingBlock);\n if (!primaryGeo) return null;\n const base = {\n primary: {\n geo: primaryGeo,\n delta: getTotalScrollDelta(res.primaryHierarchy, res.primaryPosition, res.primarySticky, res.primaryWinX, res.primaryWinY, !!res.primaryHasContainingBlock)\n },\n secondary: {\n geo: getLiveGeometry5(res.secondary, res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY, !!res.secondaryHasContainingBlock),\n delta: getTotalScrollDelta(res.secondaryHierarchy, res.secondaryPosition, res.secondarySticky, res.secondaryWinX, res.secondaryWinY, !!res.secondaryHasContainingBlock)\n },\n common: getCommonVisibilityWindow(res.primaryHierarchy, res.secondaryHierarchy, props.selectionMetadata().element, res.secondaryElement, res.primaryWinX, res.primaryWinY)\n };\n const hasSameStack = res.primaryPosition === res.secondaryPosition && res.primaryHierarchy.length === res.secondaryHierarchy.length && res.primaryHierarchy.every((scrollState, index) => scrollState.element === res.secondaryHierarchy[index]?.element);\n const isDirectParentChild = res.primaryHierarchy.length > 0 && res.primaryHierarchy[0]?.element === res.secondaryElement || res.secondaryHierarchy.length > 0 && res.secondaryHierarchy[0]?.element === props.selectionMetadata().element;\n return {\n ...base,\n isSameContext: hasSameStack || isDirectParentChild\n };\n });\n return [_$createComponent8(BoundaryBoxes, {\n get metadata() {\n return props.selectionMetadata();\n },\n get result() {\n return props.result();\n },\n get isActivatePressed() {\n return props.isActivatePressed();\n },\n get isFrozen() {\n return props.isFrozen();\n },\n get animation() {\n return props.animation;\n },\n get viewport() {\n return props.viewport();\n }\n }), _$createComponent8(SelectionLabel, {\n get metadata() {\n return props.selectionMetadata();\n },\n get isActivatePressed() {\n return props.isActivatePressed();\n },\n get isCopied() {\n return props.isCopied?.() ?? false;\n },\n get viewport() {\n return props.viewport();\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!(props.isActivatePressed() || props.isFrozen()))() && resultData();\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n var _el$ = _tmpl$11();\n _$className7(_el$, `${PREFIX}overlay`);\n _$insert7(_el$, _$createComponent8(MeasurementLinesWithCalculator, {\n get lines() {\n return props.result().lines;\n },\n get data() {\n return resultData();\n },\n get viewport() {\n return props.viewport();\n },\n get onLineClick() {\n return props.onLineClick;\n }\n }), null);\n _$insert7(_el$, _$createComponent8(MeasurementLabels, {\n get lines() {\n return props.result().lines;\n },\n get data() {\n return resultData();\n },\n get viewport() {\n return props.viewport();\n },\n get onLineClick() {\n return props.onLineClick;\n }\n }), null);\n return _el$;\n }\n });\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!props.calculatorState)() && props.calculatorState() !== null;\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n return _$createComponent8(Calculator, {\n get state() {\n return props.calculatorState();\n },\n get onClose() {\n return props.onCalculatorClose || (() => {\n });\n },\n get position() {\n return {\n x: props.cursor().x,\n y: props.cursor().y\n };\n },\n get isFocused() {\n return props.activeFocus?.() === \"calculator\";\n }\n });\n }\n });\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!(props.projectionState && props.projectionState()?.direction !== null))() && props.projectionState()?.element === props.selectionMetadata().element;\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n return _$createComponent8(ProjectionOverlay, {\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.selectionMetadata;\n },\n get viewport() {\n return props.viewport;\n },\n get isFocused() {\n return props.activeFocus?.() === \"projection\";\n },\n get onLineClick() {\n return props.onLineClick;\n }\n });\n }\n });\n }\n }), _$createComponent8(Show8, {\n get when() {\n return _$memo5(() => !!props.rulerState)() && props.rulerState().lines.length > 0;\n },\n get children() {\n return _$createComponent8(Portal3, {\n get mount() {\n return getOverlayRoot3();\n },\n get children() {\n return _$createComponent8(RulerOverlay, {\n get state() {\n return props.rulerState;\n },\n get viewport() {\n return props.viewport;\n },\n get projectionState() {\n return props.projectionState;\n },\n get metadata() {\n return props.selectionMetadata;\n },\n get result() {\n return props.result;\n },\n get onUpdate() {\n return props.onRulerUpdate || (() => {\n });\n },\n get onRemove() {\n return props.onRulerRemove || (() => {\n });\n },\n get onLineClick() {\n return props.onLineClick;\n }\n });\n }\n });\n }\n })];\n}\n\n// src/root.tsx\nfunction Root(config) {\n const {\n commands,\n animation\n } = config;\n const [result, setResult] = createSignal5(null);\n const [cursor, setCursor] = createSignal5({\n x: 0,\n y: 0\n });\n const [viewport, setViewport] = createSignal5({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n version: 0\n });\n const [selectionMetadata, setSelectionMetadata] = createSignal5({\n element: null,\n rect: null,\n scrollHierarchy: [],\n position: \"static\",\n initialWindowX: 0,\n initialWindowY: 0,\n depth: 0\n });\n const [calculatorState, setCalculatorState] = createSignal5(null);\n const [projectionState, setProjectionState] = createSignal5({\n direction: null,\n value: \"\",\n element: null\n });\n const [activeCalculatorLine, setActiveCalculatorLine] = createSignal5(null);\n const [isSelectKeyDown, setIsSelectKeyDown] = createSignal5(false);\n const [activeInputFocus, setActiveInputFocus] = createSignal5(\"calculator\");\n const [pinnedCalculatorPos, setPinnedCalculatorPos] = createSignal5(null);\n let system = null;\n let selectionSystem = null;\n let projectionSystem = null;\n let rulerSystem = null;\n const [rulerState, setRulerState] = createSignal5({\n lines: []\n });\n const [isActivatePressed, setIsActivatePressed] = createSignal5(false);\n const [isFrozen, setIsFrozen] = createSignal5(false);\n const [isCopied, setIsCopied] = createSignal5(false);\n const [isAgentActive, setIsAgentActive] = createSignal5(false);\n let copyTimeoutId = null;\n const ignoredElements = /* @__PURE__ */ new WeakSet();\n let viewportRafId = null;\n let resizeObserver = null;\n let observedRoot = false;\n let observedPrimary = null;\n let observedSecondary = null;\n const resetCopyFeedback = () => {\n if (copyTimeoutId) {\n window.clearTimeout(copyTimeoutId);\n copyTimeoutId = null;\n }\n setIsCopied(false);\n };\n const resetCalculatorUI = () => {\n setCalculatorState(null);\n setActiveCalculatorLine(null);\n setPinnedCalculatorPos(null);\n if (projectionState().direction !== null) {\n setActiveInputFocus(\"projection\");\n }\n };\n const syncCalculatorUI = (state) => {\n if (!state.isActive) {\n resetCalculatorUI();\n return;\n }\n setCalculatorState(state);\n if (state.operation) {\n setActiveCalculatorLine(null);\n }\n };\n const isActive = createMemo8(() => {\n return !!selectionMetadata().element || !!result() || rulerState().lines.length > 0 || projectionState().direction !== null;\n });\n const syncViewport = () => {\n setViewport((prev) => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n version: (prev.version || 0) + 1\n }));\n viewportRafId = null;\n };\n const scheduleUpdate = () => {\n if (!isActive()) return;\n if (!viewportRafId) {\n viewportRafId = requestAnimationFrame(syncViewport);\n }\n };\n onMount2(() => {\n selectionSystem = createSelectionSystem();\n system = createMeasurementSystem();\n projectionSystem = system.getProjection();\n rulerSystem = system.getRuler();\n if (config.onSystemsReady) {\n config.onSystemsReady({\n measurementSystem: system,\n selectionSystem\n });\n }\n const unsubscribeProjection = projectionSystem.onUpdate((state) => {\n setProjectionState(state);\n if (state.direction === null) {\n if (calculatorState()?.isActive) {\n setActiveInputFocus(\"calculator\");\n }\n if (system?.getState() === \"FROZEN\") {\n system?.unfreeze(false);\n }\n } else {\n setActiveInputFocus(\"projection\");\n }\n });\n const unsubscribeRuler = rulerSystem.onUpdate((state) => {\n setRulerState(state);\n });\n const unsubscribe = system.onStateChange(() => {\n if (!system) return;\n setResult(system.getCurrentResult());\n setIsFrozen(system.getState() === \"FROZEN\");\n });\n const unsubscribeUpdate = selectionSystem.onUpdate((metadata) => {\n setSelectionMetadata(metadata);\n });\n const handleAgentLockChange = (e) => {\n const customEvent = e;\n setIsAgentActive(customEvent.detail.locked);\n };\n let selectionTimeoutId = null;\n let lastPointerPos = {\n x: 0,\n y: 0\n };\n const performSelection = (x, y) => {\n if (isAgentActive()) return;\n const element = getTopElementAtPoint(x, y);\n if (element && selectionSystem) {\n if (system) {\n system.abort();\n }\n resetCalculatorUI();\n resetCopyFeedback();\n setActiveInputFocus(\"calculator\");\n lastHoveredElement = null;\n selectionDelegate.cancel();\n measureDelegate.cancel();\n selectionSystem.select(element);\n }\n };\n const isCommandActive = (e) => {\n const mods = getNormalizedModifiers(e);\n const key = commands.select;\n if (key in mods) {\n return Object.entries(mods).every(([name, value]) => name === key ? value === true : value === false);\n }\n return isSelectKeyDown() && !mods.Control && !mods.Meta && !mods.Alt && !mods.Shift;\n };\n const isActivateActive = (e) => {\n return isKeyMatch(commands.activate, e);\n };\n const handlePointerDown = (e) => {\n if (isAgentActive()) return;\n lastPointerPos = {\n x: e.clientX,\n y: e.clientY\n };\n if (isCommandActive(e)) {\n e.preventDefault();\n e.stopImmediatePropagation();\n if (selectionTimeoutId) window.clearTimeout(selectionTimeoutId);\n selectionTimeoutId = window.setTimeout(() => {\n performSelection(lastPointerPos.x, lastPointerPos.y);\n selectionTimeoutId = null;\n }, commands.selectionHoldDuration);\n } else {\n if (selectionTimeoutId) window.clearTimeout(selectionTimeoutId);\n }\n };\n const handleClick = (e) => {\n if (isAgentActive()) return;\n if (isCommandActive(e)) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n };\n const handlePointerUp = (e) => {\n if (selectionTimeoutId) {\n window.clearTimeout(selectionTimeoutId);\n selectionTimeoutId = null;\n }\n const target = e.target;\n if (target.closest(`[data-caliper-ignore]`) || target.closest(`.${PREFIX}projection-input`)) {\n if (target.closest(`.${PREFIX}projection-input`)) {\n setActiveInputFocus(\"projection\");\n } else if (target.closest(`.${PREFIX}calculator`)) {\n setActiveInputFocus(\"calculator\");\n }\n }\n };\n const handleContextMenu = (contextEvent) => {\n if (isAgentActive()) return;\n const selectedElement = selectionMetadata().element;\n const measurementResult = result();\n if (selectedElement || measurementResult) {\n contextEvent.preventDefault();\n contextEvent.stopImmediatePropagation();\n let clipboardContent = \"\";\n if (contextEvent.shiftKey && selectedElement) {\n clipboardContent = selectedElement.getAttribute(\"data-caliper-agent-id\") || \"\";\n } else if (measurementResult && system && selectionSystem) {\n const primaryElement = selectionSystem.getSelected();\n const secondaryElement = system.getSecondaryElement();\n if (primaryElement && secondaryElement) {\n clipboardContent = JSON.stringify({\n primary: buildSelectorInfo(primaryElement, selectionMetadata()),\n secondary: buildSelectorInfo(secondaryElement, {\n rect: measurementResult.secondary,\n scrollHierarchy: measurementResult.secondaryHierarchy,\n position: measurementResult.secondaryPosition,\n stickyConfig: measurementResult.secondarySticky,\n initialWindowX: measurementResult.secondaryWinX,\n initialWindowY: measurementResult.secondaryWinY,\n hasContainingBlock: measurementResult.secondaryHasContainingBlock\n })\n });\n }\n } else if (selectedElement) {\n clipboardContent = JSON.stringify(buildSelectorInfo(selectedElement, selectionMetadata()));\n }\n if (clipboardContent) {\n navigator.clipboard.writeText(clipboardContent).then(() => {\n if (copyTimeoutId) clearTimeout(copyTimeoutId);\n setIsCopied(true);\n copyTimeoutId = window.setTimeout(() => {\n setIsCopied(false);\n copyTimeoutId = null;\n }, 1500);\n }).catch(() => {\n });\n }\n return;\n }\n if (isCommandActive(contextEvent)) {\n contextEvent.preventDefault();\n }\n };\n let lastMouseEvent = null;\n let mouseMoveRafId = null;\n let lastHoveredElement = null;\n const selectionDelegate = createSuppressionDelegate((el) => {\n if (selectionSystem?.getSelected() !== el) {\n system?.abort();\n resetCopyFeedback();\n }\n lastHoveredElement = el;\n selectionSystem?.select(el);\n });\n const measureDelegate = createSuppressionDelegate((el, cursor2, hover) => {\n if (hover) {\n lastHoveredElement = hover;\n }\n system?.measure(el, cursor2);\n });\n const processMouseMove = () => {\n if (!lastMouseEvent || !selectionSystem) {\n mouseMoveRafId = null;\n return;\n }\n if (isAgentActive()) {\n mouseMoveRafId = null;\n return;\n }\n const e = lastMouseEvent;\n const cursorPoint = {\n x: e.clientX,\n y: e.clientY\n };\n setCursor(cursorPoint);\n const selectedElement = selectionSystem.getSelected();\n const isAlt = isActivatePressed();\n const state = system?.getState();\n if (selectedElement) {\n const hoveredElement = getTopElementAtPoint(e.clientX, e.clientY);\n const isAncestor = hoveredElement && lastHoveredElement && hoveredElement.contains(lastHoveredElement) && hoveredElement !== lastHoveredElement;\n const lastHoveredDetached = lastHoveredElement && !document.contains(lastHoveredElement);\n if (isAlt) {\n if (system) {\n measureDelegate.execute(!!isAncestor, selectedElement, cursorPoint, hoveredElement);\n }\n } else if (state !== \"FROZEN\") {\n if (hoveredElement && !lastHoveredDetached) {\n selectionDelegate.execute(!!isAncestor, hoveredElement);\n }\n }\n }\n mouseMoveRafId = null;\n };\n const handleMouseMove = (e) => {\n lastMouseEvent = e;\n lastPointerPos = {\n x: e.clientX,\n y: e.clientY\n };\n if (!mouseMoveRafId) {\n mouseMoveRafId = requestAnimationFrame(processMouseMove);\n }\n };\n const handleKeyDown = (e) => {\n if (isAgentActive() && !isKeyMatch(commands.clear, e)) return;\n if (isKeyMatch(commands.clear, e)) {\n if (!isActive()) return;\n e.preventDefault();\n e.stopImmediatePropagation();\n setIsActivatePressed(false);\n resetCalculatorUI();\n resetCopyFeedback();\n if (system) {\n system.abort();\n }\n if (selectionSystem) {\n lastHoveredElement = null;\n selectionDelegate.cancel();\n measureDelegate.cancel();\n selectionSystem.clear();\n }\n return;\n }\n if (isKeyMatch(commands.select, e)) {\n setIsSelectKeyDown(true);\n }\n if (getLogicalKey(e).toLowerCase() === commands.ruler.toLowerCase() && e.shiftKey && rulerSystem && !isAgentActive()) {\n e.preventDefault();\n const vp = viewport();\n const x = Math.max(0, Math.min(cursor().x, vp.width));\n const y = Math.max(0, Math.min(cursor().y, vp.height));\n rulerSystem.addPair(x, y);\n return;\n }\n if (isActivateActive(e)) {\n if (selectionMetadata().element) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n if (!isActivatePressed() && isActive()) {\n if (system) {\n system.abort();\n }\n resetCalculatorUI();\n }\n setIsActivatePressed(true);\n } else if (isKeyMatch(commands.freeze, e) && system) {\n const state = system.getState();\n if (state === \"FROZEN\") {\n e.preventDefault();\n e.stopImmediatePropagation();\n system.unfreeze(isActivatePressed());\n } else if (selectionMetadata().element) {\n e.preventDefault();\n e.stopImmediatePropagation();\n system.freeze();\n }\n } else {\n const key = getLogicalKey(e);\n const {\n calculator,\n projection\n } = commands;\n const isCalcActive = !!calculatorState();\n const isProjActive = projectionState().direction !== null;\n const shouldCalcGetNumbers = isCalcActive && (activeInputFocus() === \"calculator\" || !isProjActive);\n if (isCalcActive && (shouldCalcGetNumbers || !/^\\d$/.test(e.key))) {\n const isNumeric = /^[0-9]$/.test(e.key);\n const isOperator = /^[+\\-*/]$/.test(e.key);\n const isDecimal = e.key === \".\";\n const isBackspace = e.key === \"Backspace\";\n const isDelete = e.key === \"Delete\";\n const isEnter = e.key === \"Enter\";\n const isEscape = e.key === \"Escape\";\n if (isNumeric || isOperator || isDecimal || isBackspace || isDelete || isEnter || isEscape) {\n if ((isNumeric || isBackspace || isDecimal) && !shouldCalcGetNumbers) {\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n if (isNumeric || isOperator || isDecimal) handleCalculatorInput(e.key);\n else if (isBackspace) handleCalculatorBackspace();\n else if (isDelete) handleCalculatorDelete();\n else if (isEnter) handleCalculatorEnter();\n else if (isEscape) handleCalculatorClose();\n return;\n }\n }\n }\n const dirMap = {\n [projection.top]: \"top\",\n [projection.left]: \"left\",\n [projection.bottom]: \"bottom\",\n [projection.right]: \"right\"\n };\n const dir = dirMap[key];\n if (dir && selectionMetadata().element) {\n e.preventDefault();\n e.stopImmediatePropagation();\n setActiveInputFocus(\"projection\");\n const currentElement = selectionMetadata().element;\n if (currentElement) {\n projectionSystem?.setElement(currentElement);\n }\n projectionSystem?.setDirection(dir);\n if (system) {\n system.freeze();\n }\n const getRunway = (dir2) => {\n const metadata = selectionMetadata();\n const live = getLiveGeometry6(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n if (!live) return void 0;\n return getMaxProjectionDistance(dir2, live);\n };\n const maxRunway = getRunway(dir);\n if (maxRunway !== void 0) projectionSystem?.capValue(maxRunway);\n return;\n }\n if (isProjActive) {\n const isNumeric = /^[0-9.]$/.test(key);\n const isBackspace = e.key === \"Backspace\";\n const hasPriority = activeInputFocus() === \"projection\" || !isCalcActive;\n if ((isNumeric || isBackspace) && hasPriority) {\n e.preventDefault();\n e.stopImmediatePropagation();\n const currentDir = projectionState().direction;\n if (isNumeric && currentDir) {\n const metadata = selectionMetadata();\n const live = getLiveGeometry6(metadata.rect, metadata.scrollHierarchy, metadata.position, metadata.stickyConfig, metadata.initialWindowX, metadata.initialWindowY);\n let max;\n if (live) {\n max = getMaxProjectionDistance(currentDir, live);\n }\n projectionSystem?.appendValue(key, max);\n } else if (isBackspace) {\n projectionSystem?.backspace();\n }\n return;\n }\n }\n if (isFrozen() && result()) {\n const typeMap = {\n [calculator.top]: \"top\",\n [calculator.right]: \"right\",\n [calculator.bottom]: \"bottom\",\n [calculator.left]: \"left\",\n [calculator.distance]: \"distance\"\n };\n const targetType = typeMap[key];\n if (targetType) {\n const currentLines = result()?.lines || [];\n const targetLine = currentLines.find((line) => line.type === targetType);\n if (targetLine) {\n e.preventDefault();\n e.stopImmediatePropagation();\n const liveValue = getLiveLineValue(targetLine, result());\n handleLineClick(targetLine, liveValue);\n }\n }\n }\n }\n };\n const handleKeyUp = (e) => {\n if (isKeyMatch(commands.select, e)) {\n setIsSelectKeyDown(false);\n }\n if (isActivateActive(e)) {\n e.preventDefault();\n if (isActivatePressed()) {\n setIsActivatePressed(false);\n if (system && isActive()) {\n system.stop();\n }\n }\n }\n };\n const handleBlur = () => {\n if (isActivatePressed()) {\n setIsActivatePressed(false);\n if (system && isActive()) {\n system.stop();\n }\n }\n };\n const handleFocus = () => {\n if (!isActive()) return;\n scheduleUpdate();\n window.focus();\n };\n const handleDblClick = (e) => {\n if (!calculatorState()?.isActive) return;\n const target = e.target;\n const isOnCalculator = target.closest(`.${PREFIX}calculator`);\n if (isOnCalculator) {\n e.preventDefault();\n e.stopImmediatePropagation();\n setPinnedCalculatorPos(null);\n } else if (pinnedCalculatorPos() === null) {\n e.preventDefault();\n e.stopImmediatePropagation();\n setPinnedCalculatorPos({\n x: e.clientX,\n y: e.clientY\n });\n }\n };\n window.addEventListener(\"caliper:agent-lock-change\", handleAgentLockChange);\n window.addEventListener(\"pointerdown\", handlePointerDown, {\n capture: true\n });\n window.addEventListener(\"pointerup\", handlePointerUp, {\n capture: true\n });\n window.addEventListener(\"click\", handleClick, {\n capture: true\n });\n window.addEventListener(\"dblclick\", handleDblClick, {\n capture: true\n });\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n window.addEventListener(\"keyup\", handleKeyUp, {\n capture: true\n });\n window.addEventListener(\"contextmenu\", handleContextMenu, {\n capture: true\n });\n window.addEventListener(\"blur\", handleBlur);\n window.addEventListener(\"focus\", handleFocus);\n let lastPathname = location.pathname;\n const clearOnNavigate = () => {\n const newPathname = location.pathname;\n if (newPathname === lastPathname) return;\n lastPathname = newPathname;\n setIsActivatePressed(false);\n resetCalculatorUI();\n resetCopyFeedback();\n if (system) {\n system.abort();\n }\n if (selectionSystem) {\n lastHoveredElement = null;\n selectionDelegate.cancel();\n measureDelegate.cancel();\n selectionSystem.clear();\n }\n };\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n history.pushState = function(...args) {\n originalPushState(...args);\n clearOnNavigate();\n };\n history.replaceState = function(...args) {\n originalReplaceState(...args);\n clearOnNavigate();\n };\n window.addEventListener(\"popstate\", clearOnNavigate);\n onCleanup3(() => {\n window.removeEventListener(\"caliper:agent-lock-change\", handleAgentLockChange);\n window.removeEventListener(\"pointerdown\", handlePointerDown, {\n capture: true\n });\n window.removeEventListener(\"pointerup\", handlePointerUp, {\n capture: true\n });\n window.removeEventListener(\"click\", handleClick, {\n capture: true\n });\n window.removeEventListener(\"dblclick\", handleDblClick, {\n capture: true\n });\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n window.removeEventListener(\"keyup\", handleKeyUp, {\n capture: true\n });\n window.removeEventListener(\"contextmenu\", handleContextMenu, {\n capture: true\n });\n window.removeEventListener(\"blur\", handleBlur);\n window.removeEventListener(\"focus\", handleFocus);\n window.removeEventListener(\"popstate\", clearOnNavigate);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n if (mouseMoveRafId) {\n cancelAnimationFrame(mouseMoveRafId);\n }\n selectionDelegate.cancel();\n measureDelegate.cancel();\n unsubscribe();\n unsubscribeUpdate();\n unsubscribeProjection();\n unsubscribeRuler();\n if (system) {\n system.cleanup();\n }\n if (projectionSystem) {\n projectionSystem = null;\n }\n if (rulerSystem) {\n rulerSystem = null;\n }\n });\n });\n createEffect3(() => {\n if (isActive()) {\n window.addEventListener(\"scroll\", scheduleUpdate, {\n passive: true,\n capture: true\n });\n syncViewport();\n onCleanup3(() => {\n window.removeEventListener(\"scroll\", scheduleUpdate, {\n capture: true\n });\n if (viewportRafId) {\n cancelAnimationFrame(viewportRafId);\n viewportRafId = null;\n }\n });\n }\n });\n const updateResizeObservations = (active, primaryEl, secondaryEl) => {\n if (!resizeObserver) return;\n if (active && !observedRoot) {\n resizeObserver.observe(document.documentElement);\n observedRoot = true;\n } else if (!active && observedRoot) {\n resizeObserver.unobserve(document.documentElement);\n observedRoot = false;\n }\n if (primaryEl === observedPrimary && secondaryEl === observedSecondary) {\n return;\n }\n if (observedPrimary && observedPrimary !== primaryEl) {\n resizeObserver.unobserve(observedPrimary);\n observedPrimary = null;\n }\n if (observedSecondary && observedSecondary !== secondaryEl && observedSecondary !== primaryEl) {\n resizeObserver.unobserve(observedSecondary);\n observedSecondary = null;\n }\n if (primaryEl && primaryEl !== observedPrimary) {\n ignoredElements.add(primaryEl);\n resizeObserver.observe(primaryEl);\n observedPrimary = primaryEl;\n }\n if (secondaryEl && secondaryEl !== primaryEl && secondaryEl !== observedSecondary) {\n ignoredElements.add(secondaryEl);\n resizeObserver.observe(secondaryEl);\n observedSecondary = secondaryEl;\n }\n };\n createEffect3(() => {\n let resizeTimer = null;\n let lastRun = 0;\n let sentinelResized = false;\n let primaryChanged = false;\n let secondaryChanged = false;\n const runUpdates = () => {\n if (sentinelResized || primaryChanged) {\n if (observedPrimary && document.contains(observedPrimary)) {\n const rect = observedPrimary.getBoundingClientRect();\n selectionSystem?.updateRect(rect);\n if (system) system.updatePrimaryRect(rect);\n }\n }\n if (sentinelResized || secondaryChanged) {\n if (observedSecondary && document.contains(observedSecondary)) {\n const rect = observedSecondary.getBoundingClientRect();\n system?.updateSecondaryRect(rect);\n }\n }\n sentinelResized = false;\n primaryChanged = false;\n secondaryChanged = false;\n };\n resizeObserver = new ResizeObserver((entries) => {\n if (!isActive()) return;\n let hasActualResize = false;\n for (const entry of entries) {\n if (ignoredElements.has(entry.target)) {\n ignoredElements.delete(entry.target);\n continue;\n }\n hasActualResize = true;\n }\n if (!hasActualResize) return;\n for (const entry of entries) {\n if (entry.target === document.documentElement) {\n sentinelResized = true;\n } else if (entry.target === observedPrimary) {\n primaryChanged = true;\n } else if (entry.target === observedSecondary) {\n secondaryChanged = true;\n }\n }\n if (sentinelResized) {\n scheduleUpdate();\n }\n const now = Date.now();\n const remaining = RESIZE_THROTTLE_MS - (now - lastRun);\n if (remaining <= 0) {\n if (resizeTimer) clearTimeout(resizeTimer);\n lastRun = now;\n runUpdates();\n } else if (!resizeTimer) {\n resizeTimer = window.setTimeout(() => {\n lastRun = Date.now();\n resizeTimer = null;\n runUpdates();\n }, remaining);\n }\n });\n onCleanup3(() => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n observedPrimary = null;\n observedSecondary = null;\n if (resizeTimer) clearTimeout(resizeTimer);\n });\n });\n createEffect3(() => {\n const active = isActive();\n const primaryEl = selectionMetadata().element;\n const currentResult = result();\n const secondaryEl = isFrozen() ? currentResult?.secondaryElement ?? null : null;\n if (!active) {\n updateResizeObservations(false, null, null);\n return;\n }\n updateResizeObservations(true, primaryEl, secondaryEl);\n });\n createEffect3(() => {\n const calcLine = activeCalculatorLine();\n const currentResult = result();\n if (calcLine && currentResult && system) {\n const state = untrack(() => calculatorState());\n if (state?.isActive) {\n viewport().version;\n const matchingLine = currentResult.lines.find((line) => line.type === calcLine.type);\n if (matchingLine) {\n const liveValue = getLiveLineValue(matchingLine, currentResult);\n const calc = system.getCalculator();\n calc.syncValue(liveValue);\n setCalculatorState(calc.getState());\n }\n }\n }\n });\n const handleLineClick = (line, liveValue) => {\n if (system) {\n const calc = system.getCalculator();\n calc.open(liveValue);\n setActiveInputFocus(\"calculator\");\n syncCalculatorUI(calc.getState());\n if (\"startSync\" in line) {\n setActiveCalculatorLine(line);\n }\n }\n };\n const handleCalculatorInput = (key) => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleInput(key);\n if (/^[+\\-*/.]$/.test(key)) {\n setActiveInputFocus(\"calculator\");\n }\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorBackspace = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleBackspace();\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorDelete = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleDelete();\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorEnter = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.handleEnter();\n syncCalculatorUI(calc.getState());\n }\n };\n const handleCalculatorClose = () => {\n if (system) {\n const calc = system.getCalculator();\n calc.close();\n resetCalculatorUI();\n }\n };\n const handleRulerUpdate = (id, position) => {\n rulerSystem?.updateLine(id, position);\n };\n const handleRulerRemove = (id) => {\n rulerSystem?.removeLine(id);\n };\n return _$createComponent9(Overlay, {\n result,\n cursor: () => pinnedCalculatorPos() ?? cursor(),\n selectionMetadata,\n isActivatePressed,\n isFrozen,\n animation,\n viewport,\n calculatorState,\n projectionState,\n rulerState,\n activeFocus: activeInputFocus,\n isCopied,\n onLineClick: handleLineClick,\n onRulerUpdate: handleRulerUpdate,\n onRulerRemove: handleRulerRemove,\n onCalculatorClose: handleCalculatorClose\n });\n}\nfunction getMaxProjectionDistance(dir, live) {\n const docWidth = document.documentElement.scrollWidth;\n const docHeight = document.documentElement.scrollHeight;\n switch (dir) {\n case \"top\":\n return live.top;\n case \"bottom\":\n return docHeight - (live.top + live.height);\n case \"left\":\n return live.left;\n case \"right\":\n return docWidth - (live.left + live.width);\n }\n}\n\n// src/index.ts\nimport {\n applyTheme,\n mergeCommands,\n mergeAnimation,\n mergeTheme,\n getConfig,\n showVersionInfo,\n OVERLAY_CONTAINER_ID,\n MAX_SAFE_Z_INDEX,\n logger\n} from \"@caliper/core\";\n\n// src/style-injector/utils/inject-styles.ts\nvar styleElement = null;\nvar injectionCount = 0;\nfunction injectStyles() {\n if (styleElement) {\n injectionCount++;\n return;\n }\n styleElement = document.createElement(\"style\");\n styleElement.textContent = OVERLAY_STYLES;\n styleElement.setAttribute(\"data-caliper-styles\", \"true\");\n const head = document.head || document.getElementsByTagName(\"head\")[0];\n head.appendChild(styleElement);\n injectionCount = 1;\n}\nfunction removeStyles() {\n if (!styleElement) {\n return;\n }\n injectionCount--;\n if (injectionCount <= 0) {\n styleElement.remove();\n styleElement = null;\n injectionCount = 0;\n }\n}\n\n// src/index.ts\nvar IS_BROWSER = typeof window !== \"undefined\";\nvar activeInstance = null;\nfunction createOverlay(config) {\n if (!IS_BROWSER) {\n return {\n mount: () => {\n },\n dispose: () => {\n },\n getSystems: () => null,\n waitForSystems: () => new Promise(() => {\n }),\n use: () => instance,\n mounted: false\n };\n }\n if (activeInstance?.mounted) {\n return activeInstance;\n }\n if (window.__CALIPER__?.mounted) {\n activeInstance = window.__CALIPER__;\n return activeInstance;\n }\n const windowConfig = getConfig();\n const mergedConfig = {\n theme: { ...windowConfig?.theme, ...config?.theme },\n commands: {\n ...windowConfig?.commands,\n ...config?.commands,\n calculator: {\n ...windowConfig?.commands?.calculator,\n ...config?.commands?.calculator\n },\n projection: {\n ...windowConfig?.commands?.projection,\n ...config?.commands?.projection\n }\n },\n animation: { ...windowConfig?.animation, ...config?.animation }\n };\n const commands = mergeCommands(mergedConfig.commands);\n const animation = mergeAnimation(mergedConfig.animation);\n const theme = mergeTheme(mergedConfig.theme);\n const debug = config?.debug ?? windowConfig?.debug ?? true;\n logger.setEnabled(debug);\n let cleanup = null;\n let systems = null;\n const plugins = /* @__PURE__ */ new Map();\n const pendingSystemsResolvers = [];\n const waitForSystems = () => {\n if (systems) return Promise.resolve(systems);\n return new Promise((resolve, reject) => pendingSystemsResolvers.push({ resolve, reject }));\n };\n const instance = {\n mounted: false,\n mount: (container) => {\n if (instance.mounted) return;\n if (document.getElementById(OVERLAY_CONTAINER_ID)) {\n instance.mounted = true;\n return;\n }\n const target = container || document.documentElement;\n injectStyles();\n const overlayContainer = document.createElement(\"div\");\n overlayContainer.id = OVERLAY_CONTAINER_ID;\n overlayContainer.style.zIndex = MAX_SAFE_Z_INDEX.toString();\n target.appendChild(overlayContainer);\n applyTheme(theme, overlayContainer);\n const disposeRender = render(\n () => Root({\n commands,\n animation,\n onSystemsReady: (readySystems) => {\n systems = readySystems;\n const currentResolvers = [...pendingSystemsResolvers];\n pendingSystemsResolvers.length = 0;\n currentResolvers.forEach(({ resolve }) => resolve(readySystems));\n }\n }),\n overlayContainer\n );\n cleanup = () => {\n disposeRender();\n overlayContainer.remove();\n removeStyles();\n instance.mounted = false;\n systems = null;\n plugins.forEach((plugin) => plugin.dispose?.());\n plugins.clear();\n pendingSystemsResolvers.forEach(({ reject }) => reject(new Error(\"Overlay disposed\")));\n pendingSystemsResolvers.length = 0;\n if (activeInstance === instance) activeInstance = null;\n };\n instance.mounted = true;\n },\n dispose: () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n },\n getSystems: () => systems,\n waitForSystems,\n use: (plugin) => {\n if (plugins.has(plugin.name)) {\n return instance;\n }\n plugins.set(plugin.name, plugin);\n plugin.install(instance);\n return instance;\n }\n };\n activeInstance = instance;\n window.__CALIPER__ = instance;\n if (IS_BROWSER) {\n instance.mount();\n }\n return instance;\n}\nif (IS_BROWSER) {\n showVersionInfo(process.env.VERSION).catch(() => {\n });\n}\nexport {\n createOverlay\n};\n","import { createOverlay } from \"@caliper/overlay\";\n\n/**\n * Auto-initialization entry point (Lite version).\n */\nif (typeof window !== \"undefined\") {\n createOverlay();\n}\n"]}