gaugeit.js 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +36 -0
- package/LICENSE +21 -0
- package/NOTICE.md +5 -0
- package/README.md +894 -0
- package/SECURITY.md +24 -0
- package/adapters/react/Gaugeit.d.ts +11 -0
- package/adapters/react/Gaugeit.js +66 -0
- package/adapters/react/Gaugeit.jsx +1 -0
- package/dist/gaugeit.cjs +4686 -0
- package/dist/gaugeit.cjs.map +7 -0
- package/dist/gaugeit.css +300 -0
- package/dist/gaugeit.d.ts +442 -0
- package/dist/gaugeit.esm.js +4683 -0
- package/dist/gaugeit.esm.js.map +7 -0
- package/dist/gaugeit.esm.min.js +2 -0
- package/dist/gaugeit.esm.min.js.map +7 -0
- package/dist/gaugeit.min.cjs +2 -0
- package/dist/gaugeit.min.cjs.map +7 -0
- package/dist/gaugeit.min.css +1 -0
- package/dist/gaugeit.standalone.js +4720 -0
- package/dist/gaugeit.standalone.js.map +7 -0
- package/dist/gaugeit.standalone.min.js +302 -0
- package/dist/gaugeit.standalone.min.js.map +7 -0
- package/dist/gaugeit.umd.js +4713 -0
- package/dist/gaugeit.umd.js.map +7 -0
- package/dist/gaugeit.umd.min.js +4 -0
- package/dist/gaugeit.umd.min.js.map +7 -0
- package/dist/manifest.json +24 -0
- package/docs/api.md +456 -0
- package/docs/architecture.md +224 -0
- package/docs/assets/arc_zones.png +0 -0
- package/docs/assets/center_zero.png +0 -0
- package/docs/assets/classic_instrument.png +0 -0
- package/docs/assets/classic_linear_center_zero.png +0 -0
- package/docs/assets/classic_linear_instrument.png +0 -0
- package/docs/assets/heritage_rolling_tape.png +0 -0
- package/docs/assets/heritage_round.png +0 -0
- package/docs/assets/line_scale.png +0 -0
- package/docs/assets/rose_balance.png +0 -0
- package/docs/creating-gauge-types.md +286 -0
- package/docs/development.md +56 -0
- package/docs/framework-integration.md +84 -0
- package/package.json +114 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.js", "../src/core/utils.js", "../src/geometry/scale.js", "../src/geometry/linear.js", "../src/geometry/tape.js", "../src/geometry/light.js", "../src/geometry/bounds.js", "../src/renderer/svg.js", "../src/core/easing.js", "../src/core/defaults.js", "../src/core/options.js", "../src/core/gauge.js", "../src/core/registry.js", "../src/layers/face.js", "../src/layers/zones.js", "../src/layers/ticks.js", "../src/layers/labels.js", "../src/layers/pointer.js", "../src/layers/readout.js", "../src/layers/light.js", "../src/types/arc.js", "../src/types/classic.js", "../src/types/line-scale.js", "../src/types/heritage-round.js", "../src/layers/linear-zones.js", "../src/layers/linear-ticks.js", "../src/layers/linear-labels.js", "../src/layers/linear-indicator.js", "../src/types/instrument-sizing.js", "../src/types/classic-linear.js", "../src/layers/zero-marker.js", "../src/types/classic-linear-zero.js", "../src/types/center-zero.js", "../src/layers/rolling-tape.js", "../src/types/rolling-tape.js", "../src/types/register-builtins.js", "../src/core/auto-mount.js", "../src/web-component.js"],
|
|
4
|
+
"sourcesContent": ["import { Gauge } from './core/gauge.js';\nimport { gaugeTypeRegistry, GaugeTypeRegistry } from './core/registry.js';\nimport { registerBuiltInTypes, builtInTypes } from './types/register-builtins.js';\nimport {\n autoMountElements,\n createManagedGauge,\n getMountedGauge,\n unmountGauge\n} from './core/auto-mount.js';\nimport { defineCustomElement } from './web-component.js';\nimport { faceLayer } from './layers/face.js';\nimport { zonesLayer } from './layers/zones.js';\nimport { ticksLayer } from './layers/ticks.js';\nimport { labelsLayer } from './layers/labels.js';\nimport { pointerLayer } from './layers/pointer.js';\nimport { readoutLayer } from './layers/readout.js';\nimport { linearZonesLayer } from './layers/linear-zones.js';\nimport { linearTicksLayer } from './layers/linear-ticks.js';\nimport { linearLabelsLayer } from './layers/linear-labels.js';\nimport { linearIndicatorLayer } from './layers/linear-indicator.js';\nimport { zeroMarkerLayer } from './layers/zero-marker.js';\nimport { rollingTapeLayer } from './layers/rolling-tape.js';\nimport { lightLayer } from './layers/light.js';\nimport {\n angleToValue,\n arcPath,\n buildMinorValues,\n buildScaleValues,\n centeredArcAngles,\n findZoneForValue,\n gaugeSweep,\n niceInterval,\n polarPoint,\n resolveZoneSegments,\n taperedArcPath,\n valueToAngle\n} from './geometry/scale.js';\nimport {\n calculateGaugeBounds,\n isClosedGauge,\n padBounds,\n resolveFaceBox,\n resolveReadoutPosition,\n resolveScaleEndpointValues,\n unionBounds\n} from './geometry/bounds.js';\nimport {\n linearAxis,\n linearIndicatorNormalOffset,\n linearNormalOffset,\n linearNormalSpan,\n linearYToSvg,\n linearPointToValue,\n offsetLinearPoint,\n valueToLinearPoint,\n valueToLinearRatio\n} from './geometry/linear.js';\nimport {\n resolveTapeInterval,\n tapeMinorSpacing,\n tapeMinorStep,\n tapeValueOffset,\n tapeWindowBox\n} from './geometry/tape.js';\nimport { lightIsActive, resolveLightPosition } from './geometry/light.js';\nimport { deepMerge } from './core/utils.js';\nimport { easingNames } from './core/easing.js';\n\nregisterBuiltInTypes(gaugeTypeRegistry);\n\n/** Creates a duplicate-safe Gaugeit instance. */\nexport function createGauge(target, options = {}) {\n const element = typeof target === 'string' ? document.querySelector(target) : target;\n if (!element) throw new Error(`Gaugeit target not found: ${target}`);\n return createManagedGauge(element, options, Gauge, gaugeTypeRegistry);\n}\n\n/** Registers or replaces a gauge type in the default registry. */\nexport function registerGaugeType(name, definition) {\n gaugeTypeRegistry.register(name, definition);\n return Gaugeit;\n}\n\n/** Initializes all [data-gaugeit] elements, or a custom selector. */\nexport function autoMount(selector = '[data-gaugeit]', root = document) {\n return autoMountElements(selector, Gauge, gaugeTypeRegistry, root);\n}\n\n/** Defines the optional <gauge-it> custom element. */\nexport function defineGaugeitElement(tagName = 'gauge-it') {\n return defineCustomElement(createGauge, tagName);\n}\n\nexport {\n Gauge,\n GaugeTypeRegistry,\n gaugeTypeRegistry,\n getMountedGauge,\n unmountGauge,\n deepMerge,\n easingNames\n};\n\nexport const layers = Object.freeze({\n face: faceLayer,\n zones: zonesLayer,\n ticks: ticksLayer,\n labels: labelsLayer,\n pointer: pointerLayer,\n readout: readoutLayer,\n linearZones: linearZonesLayer,\n linearTicks: linearTicksLayer,\n linearLabels: linearLabelsLayer,\n linearIndicator: linearIndicatorLayer,\n zeroMarker: zeroMarkerLayer,\n rollingTape: rollingTapeLayer,\n light: lightLayer\n});\n\nexport const geometry = Object.freeze({\n angleToValue,\n arcPath,\n calculateGaugeBounds,\n buildMinorValues,\n buildScaleValues,\n centeredArcAngles,\n findZoneForValue,\n gaugeSweep,\n isClosedGauge,\n linearAxis,\n linearIndicatorNormalOffset,\n linearNormalOffset,\n linearNormalSpan,\n linearYToSvg,\n linearPointToValue,\n niceInterval,\n offsetLinearPoint,\n padBounds,\n polarPoint,\n resolveFaceBox,\n resolveReadoutPosition,\n resolveScaleEndpointValues,\n resolveZoneSegments,\n taperedArcPath,\n unionBounds,\n valueToAngle,\n valueToLinearPoint,\n valueToLinearRatio,\n resolveTapeInterval,\n tapeMinorSpacing,\n tapeMinorStep,\n tapeValueOffset,\n tapeWindowBox,\n lightIsActive,\n resolveLightPosition\n});\n\nexport const types = builtInTypes;\n\nexport const VERSION = '0.1.0';\n\nconst Gaugeit = Object.freeze({\n VERSION,\n Gauge,\n GaugeTypeRegistry,\n createGauge,\n registerGaugeType,\n autoMount,\n defineGaugeitElement,\n getMountedGauge,\n unmountGauge,\n registry: gaugeTypeRegistry,\n types,\n layers,\n geometry,\n deepMerge,\n easingNames\n});\n\nexport default Gaugeit;\n", "/** Returns true when a value is a plain object, including objects from another realm. */\nexport function isPlainObject(value) {\n if (value === null || typeof value !== 'object') return false;\n if (Object.prototype.toString.call(value) !== '[object Object]') return false;\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype === null || prototype === Object.prototype) return true;\n\n // Objects created in an iframe or another Window have a different Object.prototype.\n // Constructor identity therefore cannot be compared directly across realms.\n const constructor = Object.prototype.hasOwnProperty.call(prototype, 'constructor')\n ? prototype.constructor\n : null;\n return typeof constructor === 'function' && constructor.name === 'Object';\n}\n\n/** Deeply merges plain objects. Arrays are replaced, not concatenated. */\nexport function deepMerge(base, override) {\n if (!isPlainObject(base)) return cloneValue(override);\n const result = { ...base };\n if (!isPlainObject(override)) return result;\n\n for (const [key, value] of Object.entries(override)) {\n if (isUnsafeObjectKey(key)) continue;\n if (isPlainObject(value) && isPlainObject(result[key])) {\n result[key] = deepMerge(result[key], value);\n } else {\n result[key] = cloneValue(value);\n }\n }\n\n return result;\n}\n\n/** Clones configuration data while preserving callback functions. */\nexport function cloneValue(value) {\n if (Array.isArray(value)) return value.map(cloneValue);\n if (isPlainObject(value)) {\n const copy = {};\n for (const [key, child] of Object.entries(value)) {\n if (!isUnsafeObjectKey(key)) copy[key] = cloneValue(child);\n }\n return copy;\n }\n return value;\n}\n\nfunction isUnsafeObjectKey(key) {\n return key === '__proto__' || key === 'prototype' || key === 'constructor';\n}\n\n/** Clamps a number to an inclusive range. */\nexport function clamp(value, min, max) {\n return Math.min(max, Math.max(min, value));\n}\n\n/** Returns a finite number or the supplied fallback. */\nexport function finiteNumber(value, fallback) {\n const number = Number(value);\n return Number.isFinite(number) ? number : fallback;\n}\n\n/** Returns a unique, stable identifier for generated SVG definitions. */\nlet idCounter = 0;\nexport function uniqueId(prefix = 'gaugeit') {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\n/** Resolves either an element or a CSS selector into an element. */\nexport function resolveElement(target) {\n if (typeof target === 'string') {\n const element = document.querySelector(target);\n if (!element) throw new Error(`Gaugeit target not found: ${target}`);\n return element;\n }\n\n if (target && typeof target === 'object' && target.nodeType === 1) return target;\n throw new TypeError('Gaugeit target must be an Element or a valid CSS selector.');\n}\n\n/** Returns true for transparent CSS color values supported by Gaugeit. */\nexport function isTransparentColor(color) {\n if (color === null || color === undefined) return true;\n const normalized = String(color).trim().toLowerCase();\n return normalized === '' || normalized === 'transparent' || normalized === 'none';\n}\n\n/** Performs a shallow equality check for small state objects. */\nexport function shallowEqual(left, right) {\n if (left === right) return true;\n if (!left || !right) return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) return false;\n return leftKeys.every((key) => Object.is(left[key], right[key]));\n}\n\n/** Defers a callback to the next animation frame with a safe fallback. */\nexport function requestFrame(callback) {\n if (typeof requestAnimationFrame === 'function') return requestAnimationFrame(callback);\n return setTimeout(() => callback(Date.now()), 16);\n}\n\n/** Cancels a scheduled animation frame or fallback timer. */\nexport function cancelFrame(handle) {\n if (handle === null || handle === undefined) return;\n if (typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(handle);\n return;\n }\n clearTimeout(handle);\n}\n\n/** Dispatches a namespaced CustomEvent when the platform supports it. */\nexport function dispatchGaugeEvent(target, name, detail) {\n if (!target || typeof target.dispatchEvent !== 'function' || typeof CustomEvent !== 'function') return;\n target.dispatchEvent(new CustomEvent(`gaugeit:${name}`, { detail }));\n}\n\n/** Parses a JSON object without throwing on malformed data attributes. */\nexport function parseJsonObject(value, fallback = {}) {\n if (typeof value !== 'string' || value.trim() === '') return fallback;\n try {\n const parsed = JSON.parse(value);\n return isPlainObject(parsed) ? parsed : fallback;\n } catch {\n return fallback;\n }\n}\n", "import { clamp, finiteNumber } from '../core/utils.js';\n\n/** Converts degrees to radians. */\nexport function degreesToRadians(degrees) {\n return degrees * Math.PI / 180;\n}\n\n/** Converts a polar coordinate into an SVG coordinate. */\nexport function polarPoint(centerX, centerY, radius, angleDegrees) {\n const radians = degreesToRadians(angleDegrees);\n return {\n x: centerX + radius * Math.cos(radians),\n y: centerY + radius * Math.sin(radians)\n };\n}\n\n/** Returns the configured angular sweep in degrees. */\nexport function gaugeSweep(options) {\n return options.geometry.endAngle - options.geometry.startAngle;\n}\n\n/**\n * Creates start/end angles from a developer-facing center angle.\n * Center angle 0 preserves Gaugeit.js's upright default orientation, which is\n * SVG angle 270. Positive values rotate the complete sweep clockwise.\n */\nexport function centeredArcAngles(sweep, centerAngle = 0) {\n const safeSweep = Math.min(360, Math.max(0.001, Math.abs(finiteNumber(sweep, 180))));\n const svgCenter = 270 + finiteNumber(centerAngle, 0);\n const halfSweep = safeSweep / 2;\n return {\n startAngle: svgCenter - halfSweep,\n endAngle: svgCenter + halfSweep\n };\n}\n\n/** Maps a gauge value to an angle. */\nexport function valueToAngle(value, options, clampValue = true) {\n const min = options.min;\n const max = options.max;\n const normalizedValue = clampValue ? clamp(value, min, max) : value;\n const valueRatio = (normalizedValue - min) / (max - min);\n const visualRatio = options.invert ? 1 - valueRatio : valueRatio;\n return options.geometry.startAngle + gaugeSweep(options) * visualRatio;\n}\n\n/** Maps an angle back to a gauge value. */\nexport function angleToValue(angle, options, clampResult = true) {\n const sweep = gaugeSweep(options);\n const visualRatio = (angle - options.geometry.startAngle) / sweep;\n const valueRatio = options.invert ? 1 - visualRatio : visualRatio;\n const value = options.min + valueRatio * (options.max - options.min);\n return clampResult ? clamp(value, options.min, options.max) : value;\n}\n\n/** Builds an SVG arc path between two angles. */\nexport function arcPath(centerX, centerY, radius, startAngle, endAngle) {\n const start = polarPoint(centerX, centerY, radius, startAngle);\n const end = polarPoint(centerX, centerY, radius, endAngle);\n const delta = endAngle - startAngle;\n const sweepFlag = delta >= 0 ? 1 : 0;\n\n // SVG cannot represent a complete circle with one arc command because the\n // start and end points coincide. Two half-arcs keep 360-degree tracks and\n // zones visible in every browser.\n if (Math.abs(delta) >= 360 - 0.001) {\n const midpoint = polarPoint(centerX, centerY, radius, startAngle + delta / 2);\n return [\n `M ${roundSvg(start.x)} ${roundSvg(start.y)}`,\n `A ${roundSvg(radius)} ${roundSvg(radius)} 0 1 ${sweepFlag} ${roundSvg(midpoint.x)} ${roundSvg(midpoint.y)}`,\n `A ${roundSvg(radius)} ${roundSvg(radius)} 0 1 ${sweepFlag} ${roundSvg(end.x)} ${roundSvg(end.y)}`\n ].join(' ');\n }\n\n const largeArcFlag = Math.abs(delta) > 180 ? 1 : 0;\n return [\n `M ${roundSvg(start.x)} ${roundSvg(start.y)}`,\n `A ${roundSvg(radius)} ${roundSvg(radius)} 0 ${largeArcFlag} ${sweepFlag} ${roundSvg(end.x)} ${roundSvg(end.y)}`\n ].join(' ');\n}\n\n\n/**\n * Builds a filled annular segment whose thickness changes smoothly from\n * startWidth to endWidth. SVG strokes cannot vary width along one path, so the\n * tapered zone is represented by sampled outer and inner boundaries.\n */\nexport function taperedArcPath(\n centerX,\n centerY,\n radius,\n startAngle,\n endAngle,\n startWidth,\n endWidth,\n segments = 48\n) {\n const delta = endAngle - startAngle;\n const sampleCount = Math.max(2, Math.min(256, Math.ceil(finiteNumber(segments, 48))));\n const safeRadius = Math.max(0, finiteNumber(radius, 0));\n const firstWidth = Math.max(0, finiteNumber(startWidth, 0));\n const lastWidth = Math.max(0, finiteNumber(endWidth, firstWidth));\n const outer = [];\n const inner = [];\n\n for (let index = 0; index <= sampleCount; index += 1) {\n const ratio = index / sampleCount;\n const angle = startAngle + delta * ratio;\n const width = firstWidth + (lastWidth - firstWidth) * ratio;\n outer.push(polarPoint(centerX, centerY, safeRadius + width / 2, angle));\n inner.push(polarPoint(centerX, centerY, Math.max(0, safeRadius - width / 2), angle));\n }\n\n const commands = [`M ${roundSvg(outer[0].x)} ${roundSvg(outer[0].y)}`];\n for (let index = 1; index < outer.length; index += 1) {\n commands.push(`L ${roundSvg(outer[index].x)} ${roundSvg(outer[index].y)}`);\n }\n for (let index = inner.length - 1; index >= 0; index -= 1) {\n commands.push(`L ${roundSvg(inner[index].x)} ${roundSvg(inner[index].y)}`);\n }\n commands.push('Z');\n return commands.join(' ');\n}\n\n/** Selects a human-friendly interval for a numeric range. */\nexport function niceInterval(range, desiredDivisions = 5) {\n const safeRange = Math.abs(finiteNumber(range, 1)) || 1;\n const raw = safeRange / Math.max(1, desiredDivisions);\n const exponent = Math.floor(Math.log10(raw));\n const fraction = raw / Math.pow(10, exponent);\n let niceFraction;\n if (fraction <= 1) niceFraction = 1;\n else if (fraction <= 2) niceFraction = 2;\n else if (fraction <= 2.5) niceFraction = 2.5;\n else if (fraction <= 5) niceFraction = 5;\n else niceFraction = 10;\n return niceFraction * Math.pow(10, exponent);\n}\n\n/** Builds inclusive values for ticks or labels without floating-point drift. */\nexport function buildScaleValues(min, max, interval) {\n const safeInterval = Math.abs(finiteNumber(interval, 0));\n if (safeInterval <= 0 || max <= min) return [min, max];\n\n const precision = Math.min(12, Math.max(0, decimalPlaces(safeInterval) + 2));\n const epsilon = safeInterval / 1_000_000;\n const values = [];\n let current = min;\n let guard = 0;\n\n while (current <= max + epsilon && guard < 10_000) {\n values.push(roundTo(current, precision));\n current += safeInterval;\n guard += 1;\n }\n\n if (values.length === 0 || Math.abs(values[values.length - 1] - max) > epsilon) {\n values.push(max);\n } else {\n values[values.length - 1] = max;\n }\n\n return values;\n}\n\n/** Builds minor tick values between major values. */\nexport function buildMinorValues(majorValues, subdivisions) {\n const count = Math.max(0, Math.floor(finiteNumber(subdivisions, 0)));\n if (count === 0 || majorValues.length < 2) return [];\n\n const values = [];\n for (let index = 0; index < majorValues.length - 1; index += 1) {\n const start = majorValues[index];\n const end = majorValues[index + 1];\n const step = (end - start) / (count + 1);\n for (let subdivision = 1; subdivision <= count; subdivision += 1) {\n values.push(start + step * subdivision);\n }\n }\n return values;\n}\n\n/** Produces non-overlapping visual segments, allowing transparent zones to create true gaps. */\nexport function resolveZoneSegments(min, max, zones) {\n const normalized = Array.isArray(zones)\n ? zones\n .filter((zone) => zone && typeof zone === 'object')\n .map((zone, index) => ({\n ...zone,\n min: clamp(finiteNumber(zone.min, min), min, max),\n max: clamp(finiteNumber(zone.max, max), min, max),\n _index: index\n }))\n .filter((zone) => zone.max > zone.min)\n : [];\n\n const breakpoints = new Set([min, max]);\n for (const zone of normalized) {\n breakpoints.add(zone.min);\n breakpoints.add(zone.max);\n }\n\n const points = [...breakpoints].sort((left, right) => left - right);\n const segments = [];\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const segmentMin = points[index];\n const segmentMax = points[index + 1];\n const midpoint = (segmentMin + segmentMax) / 2;\n const candidates = normalized.filter((zone) => midpoint >= zone.min && midpoint <= zone.max);\n const zone = candidates.length ? candidates[candidates.length - 1] : null;\n segments.push({ min: segmentMin, max: segmentMax, zone });\n }\n\n return segments;\n}\n\n/** Returns the last configured zone that contains a value. */\nexport function findZoneForValue(value, zones) {\n if (!Array.isArray(zones)) return null;\n let match = null;\n for (const zone of zones) {\n if (!zone || typeof zone !== 'object') continue;\n if (value >= Number(zone.min) && value <= Number(zone.max)) match = zone;\n }\n return match;\n}\n\n/** Rounds coordinates to keep generated SVG markup compact. */\nexport function roundSvg(value) {\n return Math.round(value * 1000) / 1000;\n}\n\nfunction roundTo(value, precision) {\n const factor = Math.pow(10, precision);\n return Math.round(value * factor) / factor;\n}\n\nfunction decimalPlaces(value) {\n const text = String(value).toLowerCase();\n if (text.includes('e-')) return Number(text.split('e-')[1]);\n const decimal = text.split('.')[1];\n return decimal ? decimal.length : 0;\n}\n", "import { clamp, finiteNumber } from '../core/utils.js';\n\n/** Converts a public Cartesian-style linear Y coordinate to SVG space. */\nexport function linearYToSvg(y, options) {\n const linear = options.linear || {};\n const originY = finiteNumber(linear.originY, 140);\n return originY - finiteNumber(y, 0);\n}\n\n/** Returns a normalized two-dimensional axis for a linear gauge. */\nexport function linearAxis(options) {\n const linear = options.linear || {};\n const startX = finiteNumber(linear.startX, 36);\n const startY = linearYToSvg(linear.startY, options);\n let endX = finiteNumber(linear.endX, 284);\n let endY = linearYToSvg(linear.endY, options);\n let dx = endX - startX;\n let dy = endY - startY;\n let length = Math.hypot(dx, dy);\n\n if (length < 0.001) {\n endX = startX + 1;\n endY = startY;\n dx = 1;\n dy = 0;\n length = 1;\n }\n\n const tangentX = dx / length;\n const tangentY = dy / length;\n return {\n startX,\n startY,\n endX,\n endY,\n dx,\n dy,\n length,\n tangentX,\n tangentY,\n normalX: -tangentY,\n normalY: tangentX,\n angle: Math.atan2(dy, dx) * 180 / Math.PI\n };\n}\n\n/** Maps a value to a normalized position along a linear gauge. */\nexport function valueToLinearRatio(value, options, clampValue = true) {\n const normalizedValue = clampValue ? clamp(value, options.min, options.max) : value;\n const valueRatio = (normalizedValue - options.min) / (options.max - options.min);\n return options.invert ? 1 - valueRatio : valueRatio;\n}\n\n/** Maps a value to a point on the configured linear axis. */\nexport function valueToLinearPoint(value, options, clampValue = true) {\n const axis = linearAxis(options);\n const ratio = valueToLinearRatio(value, options, clampValue);\n return {\n x: axis.startX + axis.dx * ratio,\n y: axis.startY + axis.dy * ratio\n };\n}\n\n/** Maps an arbitrary point back to a value by projecting it onto the linear axis. */\nexport function linearPointToValue(x, y, options, clampResult = true) {\n const axis = linearAxis(options);\n const relativeX = finiteNumber(x, axis.startX) - axis.startX;\n const relativeY = finiteNumber(y, axis.startY) - axis.startY;\n const visualRatio = (relativeX * axis.tangentX + relativeY * axis.tangentY) / axis.length;\n const boundedVisualRatio = clampResult ? clamp(visualRatio, 0, 1) : visualRatio;\n const valueRatio = options.invert ? 1 - boundedVisualRatio : boundedVisualRatio;\n const value = options.min + valueRatio * (options.max - options.min);\n return clampResult ? clamp(value, options.min, options.max) : value;\n}\n\n/** Offsets a point along the axis normal. Negative values use the upper side of a left-to-right axis. */\nexport function offsetLinearPoint(point, axis, distance) {\n const amount = finiteNumber(distance, 0);\n return {\n x: point.x + axis.normalX * amount,\n y: point.y + axis.normalY * amount\n };\n}\n\n/** Converts a public positive-up normal offset to the internal SVG axis normal. */\nexport function linearNormalOffset(value) {\n return -finiteNumber(value, 0);\n}\n\n/** Converts the public positive-up indicator center offset to the SVG axis normal. */\nexport function linearIndicatorNormalOffset(indicator) {\n return linearNormalOffset(indicator?.centerOffset);\n}\n\n/** Resolves a one-sided or centered span along the axis normal. */\nexport function linearNormalSpan(length, position = 'cross', offset = 0) {\n const size = Math.max(0, finiteNumber(length, 0));\n const shift = finiteNumber(offset, 0);\n if (position === 'negative') return { start: shift - size, end: shift };\n if (position === 'positive') return { start: shift, end: shift + size };\n return { start: shift - size / 2, end: shift + size / 2 };\n}\n", "import { finiteNumber } from '../core/utils.js';\nimport { niceInterval } from './scale.js';\n\n/** Returns the fixed viewport rectangle used by a rolling tape gauge. */\nexport function tapeWindowBox(options) {\n const tape = options.tape || {};\n return {\n x: finiteNumber(tape.x, 64),\n y: finiteNumber(tape.y, 58),\n width: Math.max(20, finiteNumber(tape.width, 192)),\n height: Math.max(20, finiteNumber(tape.height, 210))\n };\n}\n\n/** Resolves the major labelled interval for the moving scale. */\nexport function resolveTapeInterval(options) {\n const explicit = finiteNumber(options.tape?.interval, 0);\n if (explicit > 0) return explicit;\n return niceInterval(options.max - options.min, Math.max(2, options.scale?.major?.divisions || 5));\n}\n\n/** Returns the value step represented by one rendered tape slot. */\nexport function tapeMinorStep(options) {\n const subdivisions = Math.max(0, Math.floor(finiteNumber(options.tape?.minorSubdivisions, 4)));\n return resolveTapeInterval(options) / (subdivisions + 1);\n}\n\n/** Returns the visual spacing between adjacent minor tape slots. */\nexport function tapeMinorSpacing(options) {\n const subdivisions = Math.max(0, Math.floor(finiteNumber(options.tape?.minorSubdivisions, 4)));\n return Math.max(2, finiteNumber(options.tape?.majorSpacing, 54)) / (subdivisions + 1);\n}\n\n/** Maps a tape value to its signed pixel displacement from the fixed reference line. */\nexport function tapeValueOffset(value, currentValue, options) {\n const step = tapeMinorStep(options);\n const spacing = tapeMinorSpacing(options);\n const direction = options.invert ? -1 : 1;\n return (Number(value) - Number(currentValue)) / step * spacing * direction;\n}\n", "import { finiteNumber } from '../core/utils.js';\nimport { linearYToSvg } from './linear.js';\n\n/** Resolves a lamp position in the gauge type's logical coordinate system. */\nexport function resolveLightPosition(light, options) {\n return {\n x: finiteNumber(light?.x, options.geometry.width / 2),\n y: options.geometry.mode === 'linear'\n ? linearYToSvg(light?.y, options)\n : finiteNumber(light?.y, options.geometry.height / 2)\n };\n}\n\n/** Returns whether a lamp condition is active for a displayed gauge value. */\nexport function lightIsActive(light, value) {\n if (!light?.visible) return false;\n const trigger = light.trigger || {};\n const sample = finiteNumber(value, 0);\n\n switch (trigger.mode) {\n case 'below':\n return sample <= finiteNumber(trigger.value, 0);\n case 'above':\n return sample >= finiteNumber(trigger.value, 0);\n case 'between': {\n const first = finiteNumber(trigger.min, 0);\n const second = finiteNumber(trigger.max, first);\n return sample >= Math.min(first, second) && sample <= Math.max(first, second);\n }\n case 'manual':\n default:\n return light.on === true;\n }\n}\n", "import { buildScaleValues, gaugeSweep, polarPoint, valueToAngle } from './scale.js';\nimport { finiteNumber, isTransparentColor } from '../core/utils.js';\nimport {\n linearAxis,\n linearIndicatorNormalOffset,\n linearNormalOffset,\n linearNormalSpan,\n linearYToSvg,\n offsetLinearPoint,\n valueToLinearPoint\n} from './linear.js';\nimport { tapeWindowBox } from './tape.js';\nimport { resolveLightPosition } from './light.js';\n\nconst EPSILON = 0.001;\n\n/** Returns an immutable-looking bounds object suitable for SVG viewBox calculations. */\nexport function createBounds(x = Infinity, y = Infinity, width = -Infinity, height = -Infinity) {\n if (Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height)) {\n return { x, y, width, height };\n }\n return { minX: Infinity, minY: Infinity, maxX: -Infinity, maxY: -Infinity };\n}\n\n/** Expands a mutable accumulator with one point. */\nexport function includePoint(bounds, x, y) {\n if (!Number.isFinite(x) || !Number.isFinite(y)) return bounds;\n bounds.minX = Math.min(bounds.minX, x);\n bounds.minY = Math.min(bounds.minY, y);\n bounds.maxX = Math.max(bounds.maxX, x);\n bounds.maxY = Math.max(bounds.maxY, y);\n return bounds;\n}\n\n/** Expands a mutable accumulator with a rectangle. */\nexport function includeRect(bounds, x, y, width, height) {\n includePoint(bounds, x, y);\n includePoint(bounds, x + Math.max(0, width), y + Math.max(0, height));\n return bounds;\n}\n\n/** Converts an accumulator to a finite SVG rectangle. */\nexport function finalizeBounds(bounds, fallback = { x: 0, y: 0, width: 1, height: 1 }) {\n if (!bounds || !Number.isFinite(bounds.minX) || !Number.isFinite(bounds.minY)\n || !Number.isFinite(bounds.maxX) || !Number.isFinite(bounds.maxY)) {\n return { ...fallback };\n }\n return {\n x: bounds.minX,\n y: bounds.minY,\n width: Math.max(1, bounds.maxX - bounds.minX),\n height: Math.max(1, bounds.maxY - bounds.minY)\n };\n}\n\n/** Returns a bounds rectangle padded on every side. */\nexport function padBounds(bounds, padding = 0) {\n const amount = Math.max(0, finiteNumber(padding, 0));\n return {\n x: bounds.x - amount,\n y: bounds.y - amount,\n width: Math.max(1, bounds.width + amount * 2),\n height: Math.max(1, bounds.height + amount * 2)\n };\n}\n\n/** Returns the union of any finite bounds rectangles. */\nexport function unionBounds(...rectangles) {\n const accumulator = createBounds();\n for (const rectangle of rectangles) {\n if (!rectangle) continue;\n includeRect(accumulator, rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n }\n return finalizeBounds(accumulator);\n}\n\n/** True when the configured sweep closes the scale on itself. */\nexport function isClosedGauge(options) {\n return Math.abs(gaugeSweep(options)) >= 360 - EPSILON;\n}\n\n/** Removes the duplicate maximum endpoint from a closed scale unless explicitly requested. */\nexport function resolveScaleEndpointValues(values, options) {\n const mode = options.scale?.endpointMode || 'auto';\n if (values.length < 2 || mode === 'both') return values;\n if (mode === 'dedupe' || (mode === 'auto' && isClosedGauge(options))) return values.slice(0, -1);\n return values;\n}\n\n/** Resolves a readout part's automatic position without overloading coordinate zero. */\nexport function resolveReadoutPosition(part, options) {\n const reference = readoutReferenceBox(options);\n const fontSize = Math.max(1, finiteNumber(part.fontSize, 12));\n const margin = Math.max(0, finiteNumber(part.margin, 12));\n const position = part.position || 'top';\n const automaticX = part.x === 'auto';\n const automaticY = part.y === 'auto';\n const x = automaticX\n ? reference.x + reference.width / 2\n : finiteNumber(part.x, reference.x + reference.width / 2);\n let y;\n if (automaticY) {\n if (position === 'bottom') y = reference.y + reference.height - margin - fontSize / 2;\n else if (position === 'center') y = reference.y + reference.height / 2;\n else y = reference.y + margin + fontSize / 2;\n } else if (options.geometry.mode === 'linear') {\n y = linearYToSvg(part.y, options);\n } else {\n y = finiteNumber(part.y, reference.y + margin + fontSize / 2);\n }\n return {\n // Offsets refine automatic placement. Numeric coordinates are final, absolute\n // SVG positions and therefore do not inherit a type preset's auto offset.\n x: x + (automaticX ? finiteNumber(part.offsetX, 0) : 0),\n y: y + (automaticY ? finiteNumber(part.offsetY, 0) : 0)\n };\n}\n\n/** Resolves the actual face rectangle, including content-fitted panel faces. */\nexport function resolveFaceBox(options, contentBounds = null) {\n const face = options.face;\n const geometry = options.geometry;\n if (face.fit !== 'content' || !contentBounds) {\n return {\n x: face.x,\n y: face.y,\n width: face.width,\n height: face.height\n };\n }\n\n const padding = Math.max(0, finiteNumber(face.contentPadding, 8));\n const configured = { x: face.x, y: face.y, width: face.width, height: face.height };\n const minimumWidth = face.minWidth ?? configured.width;\n const minimumHeight = face.minHeight ?? configured.height;\n if (face.shape === 'circle') {\n const cx = geometry.centerX;\n const cy = geometry.centerY;\n const configuredRadius = Math.min(minimumWidth, minimumHeight) / 2;\n const contentRadius = Math.max(\n cx - contentBounds.x,\n contentBounds.x + contentBounds.width - cx,\n cy - contentBounds.y,\n contentBounds.y + contentBounds.height - cy\n ) + padding;\n const radius = Math.max(1, configuredRadius, contentRadius);\n return { x: cx - radius, y: cy - radius, width: radius * 2, height: radius * 2 };\n }\n\n // A content-fitted panel follows the rendered dial instead of permanently\n // retaining its original top-left corner. This keeps top and bottom margins\n // balanced when a title or another readout is moved, while the configured\n // configured face dimensions remain the default minimum instrument size,\n // while minWidth/minHeight may override that floor for compact presets.\n const padded = {\n x: contentBounds.x - padding,\n y: contentBounds.y - padding,\n width: contentBounds.width + padding * 2,\n height: contentBounds.height + padding * 2\n };\n const horizontalExtent = Math.max(\n geometry.centerX - padded.x,\n padded.x + padded.width - geometry.centerX\n );\n const width = Math.max(1, minimumWidth, horizontalExtent * 2);\n const height = Math.max(1, minimumHeight, padded.height);\n const contentCenterY = padded.y + padded.height / 2;\n return {\n x: geometry.centerX - width / 2,\n y: contentCenterY - height / 2,\n width,\n height\n };\n}\n\n/** Calculates conservative visual bounds for every built-in layer. */\nexport function calculateGaugeBounds(options, configuration = {}) {\n const includeFace = configuration.includeFace !== false;\n const includeBase = configuration.includeBase === undefined\n ? options.layout?.includeGeometry !== false\n : configuration.includeBase === true;\n const contentBounds = configuration.contentBounds || null;\n const geometry = options.geometry;\n const bounds = createBounds();\n\n if (includeBase) includeRect(bounds, 0, 0, geometry.width, geometry.height);\n\n if (includeFace && options.face.visible) {\n const box = resolveFaceBox(options, contentBounds);\n const expansion = options.face.shadow ? 10 : Math.max(0, options.face.strokeWidth / 2);\n includeRect(bounds, box.x - expansion, box.y - expansion, box.width + expansion * 2, box.height + expansion * 2);\n // A clipped framed instrument cannot affect layout outside its bezel. The\n // content bounds were already used to size content-fitted faces above.\n if (options.face.clipContent) {\n return finalizeBounds(bounds, { x: 0, y: 0, width: geometry.width, height: geometry.height });\n }\n }\n\n if (geometry.mode === 'linear') {\n includeLinearTrackAndZones(bounds, options);\n includeLinearScale(bounds, options);\n includeLinearLabels(bounds, options);\n includeLinearIndicator(bounds, options);\n includeZeroMarker(bounds, options);\n } else if (geometry.mode === 'tape') {\n includeTape(bounds, options);\n } else {\n includeTrackAndZones(bounds, options);\n includeScale(bounds, options);\n includeLabels(bounds, options);\n includeZeroMarker(bounds, options);\n includePointer(bounds, options);\n }\n includeReadout(bounds, options);\n includeLight(bounds, options);\n\n return finalizeBounds(bounds, { x: 0, y: 0, width: geometry.width, height: geometry.height });\n}\n\nfunction includeTrackAndZones(bounds, options) {\n const { geometry, track } = options;\n if (track.visible) {\n includeArc(bounds, geometry.centerX, geometry.centerY, track.radius, track.width, geometry.startAngle, geometry.endAngle);\n }\n for (const zone of options.zones || []) {\n if (isTransparentColor(zone.color)) continue;\n includeArc(\n bounds,\n geometry.centerX,\n geometry.centerY,\n zone.radius ?? track.radius ?? geometry.radius,\n zoneMaximumWidth(zone, track.width),\n valueToAngle(zone.min, options),\n valueToAngle(zone.max, options)\n );\n }\n}\n\n\nfunction zoneMaximumWidth(zone, fallbackWidth) {\n if (!zone?.taper) return zone?.width ?? fallbackWidth;\n return Math.max(\n 0,\n finiteNumber(zone.taper.startWidth, zone.width ?? fallbackWidth),\n finiteNumber(zone.taper.endWidth, zone.width ?? fallbackWidth)\n );\n}\n\nfunction includeScale(bounds, options) {\n const { geometry, scale } = options;\n const lengths = [];\n if (scale.major.visible) lengths.push(scale.major.length);\n if (scale.minor.visible) lengths.push(scale.minor.length);\n if (!lengths.length) return;\n const length = Math.max(...lengths, 0);\n let inner = scale.radius;\n let outer = scale.radius;\n if (scale.position === 'outside') outer += length;\n else if (scale.position === 'cross') {\n inner -= length / 2;\n outer += length / 2;\n } else inner -= length;\n includeArcSector(bounds, geometry.centerX, geometry.centerY, Math.max(0, inner), outer, geometry.startAngle, geometry.endAngle);\n}\n\nfunction includeLabels(bounds, options) {\n const labels = options.labels;\n if (!labels.visible) return;\n const interval = Number(labels.interval) > 0\n ? Number(labels.interval)\n : Math.abs(options.max - options.min) / Math.max(1, options.scale.major.divisions || 5);\n const values = resolveScaleEndpointValues(buildScaleValues(options.min, options.max, interval), options);\n for (const value of values) {\n const point = polarPoint(options.geometry.centerX, options.geometry.centerY, labels.radius, valueToAngle(value, options));\n let rendered = Number(value).toFixed(labels.fractionDigits);\n if (typeof labels.formatter === 'function') {\n try {\n rendered = String(labels.formatter(value, { min: options.min, max: options.max, options }));\n } catch {\n // Bounds must stay deterministic even when a user formatter fails during estimation.\n }\n }\n const halfWidth = Math.max(labels.fontSize * 0.55, rendered.length * labels.fontSize * 0.34);\n const halfHeight = labels.fontSize * 0.68;\n includeRect(bounds, point.x - halfWidth, point.y - halfHeight, halfWidth * 2, halfHeight * 2);\n }\n}\n\nfunction includePointer(bounds, options) {\n const { geometry, pointer } = options;\n if (!pointer.visible) return;\n const expansion = Math.max(pointer.width / 2, pointer.strokeWidth / 2, 1);\n includeArcSector(\n bounds,\n geometry.centerX,\n geometry.centerY,\n 0,\n pointer.length + expansion,\n geometry.startAngle,\n geometry.endAngle\n );\n if (pointer.tailLength > 0) {\n includeArcSector(\n bounds,\n geometry.centerX,\n geometry.centerY,\n 0,\n pointer.tailLength + expansion,\n geometry.startAngle + 180,\n geometry.endAngle + 180\n );\n }\n if (pointer.cap.visible) {\n const radius = pointer.cap.radius + pointer.cap.strokeWidth / 2;\n includeRect(bounds, geometry.centerX - radius, geometry.centerY - radius, radius * 2, radius * 2);\n }\n}\n\n\nfunction includeLinearTrackAndZones(bounds, options) {\n const axis = linearAxis(options);\n if (options.track.visible) {\n includeLinearStroke(\n bounds,\n axis,\n valueToLinearPoint(options.min, options),\n valueToLinearPoint(options.max, options),\n linearNormalOffset(options.linear.zoneOffset),\n options.track.width\n );\n }\n\n for (const zone of options.zones || []) {\n if (isTransparentColor(zone.color)) continue;\n includeLinearStroke(\n bounds,\n axis,\n valueToLinearPoint(zone.min, options),\n valueToLinearPoint(zone.max, options),\n linearNormalOffset(zone.offset ?? options.linear.zoneOffset),\n zone.width ?? options.track.width\n );\n }\n}\n\nfunction includeLinearScale(bounds, options) {\n const axis = linearAxis(options);\n const lengths = [];\n if (options.scale.major.visible) lengths.push(options.scale.major.length);\n if (options.scale.minor.visible) lengths.push(options.scale.minor.length);\n if (!lengths.length) return;\n\n const span = linearNormalSpan(Math.max(...lengths, 0), options.linear.tickSide);\n includeLinearExtent(bounds, axis, span.start, span.end);\n}\n\nfunction includeLinearLabels(bounds, options) {\n const labels = options.labels;\n if (!labels.visible) return;\n const interval = Number(labels.interval) > 0\n ? Number(labels.interval)\n : Math.abs(options.max - options.min) / Math.max(1, options.scale.major.divisions || 5);\n const values = buildScaleValues(options.min, options.max, interval);\n const axis = linearAxis(options);\n\n for (const value of values) {\n const point = offsetLinearPoint(\n valueToLinearPoint(value, options),\n axis,\n linearNormalOffset(options.linear.labelOffset)\n );\n let rendered = Number(value).toFixed(labels.fractionDigits);\n if (typeof labels.formatter === 'function') {\n try {\n rendered = String(labels.formatter(value, { min: options.min, max: options.max, options }));\n } catch {\n // Bounds remain deterministic even when a user formatter fails.\n }\n }\n const halfWidth = Math.max(labels.fontSize * 0.55, rendered.length * labels.fontSize * 0.34);\n const halfHeight = labels.fontSize * 0.68;\n includeRect(bounds, point.x - halfWidth, point.y - halfHeight, halfWidth * 2, halfHeight * 2);\n }\n}\n\nfunction includeLinearIndicator(bounds, options) {\n const indicator = options.indicator;\n if (!indicator.visible) return;\n const axis = linearAxis(options);\n const span = linearNormalSpan(\n indicator.length,\n indicator.position,\n linearIndicatorNormalOffset(indicator)\n );\n const strokeExpansion = Math.max(indicator.width / 2, indicator.strokeWidth / 2, 1);\n const normalStart = Math.min(span.start, span.end) - strokeExpansion;\n const normalEnd = Math.max(span.start, span.end) + strokeExpansion;\n let tangentExpansion = strokeExpansion;\n\n if (indicator.type === 'marker') tangentExpansion = Math.max(tangentExpansion, indicator.markerSize);\n if (indicator.type === 'carriage') tangentExpansion = Math.max(tangentExpansion, indicator.carriageWidth / 2);\n if (indicator.cap.visible) tangentExpansion = Math.max(tangentExpansion, indicator.cap.radius + indicator.cap.strokeWidth / 2);\n\n includeLinearExtent(bounds, axis, normalStart, normalEnd, tangentExpansion);\n}\n\nfunction includeZeroMarker(bounds, options) {\n const marker = options.centerZero?.marker;\n if (!marker?.visible) return;\n const expansion = Math.max(marker.width / 2, 0.5);\n\n if (options.geometry.mode === 'linear') {\n const axis = linearAxis(options);\n const point = valueToLinearPoint(options.centerZero.zeroValue, options);\n const span = linearNormalSpan(\n marker.length,\n marker.position,\n linearNormalOffset(marker.centerOffset)\n );\n const start = offsetLinearPoint(point, axis, span.start);\n const end = offsetLinearPoint(point, axis, span.end);\n includeRect(\n bounds,\n Math.min(start.x, end.x) - expansion,\n Math.min(start.y, end.y) - expansion,\n Math.abs(end.x - start.x) + expansion * 2,\n Math.abs(end.y - start.y) + expansion * 2\n );\n return;\n }\n\n const angle = valueToAngle(options.centerZero.zeroValue, options);\n const radius = marker.radius ?? options.scale.radius;\n const start = polarPoint(\n options.geometry.centerX,\n options.geometry.centerY,\n Math.max(0, radius - marker.length),\n angle\n );\n const end = polarPoint(options.geometry.centerX, options.geometry.centerY, radius, angle);\n includeRect(\n bounds,\n Math.min(start.x, end.x) - expansion,\n Math.min(start.y, end.y) - expansion,\n Math.abs(end.x - start.x) + expansion * 2,\n Math.abs(end.y - start.y) + expansion * 2\n );\n}\n\nfunction includeLinearStroke(bounds, axis, startPoint, endPoint, offset, width) {\n const halfWidth = Math.max(0, finiteNumber(width, 0)) / 2;\n const start = offsetLinearPoint(startPoint, axis, offset);\n const end = offsetLinearPoint(endPoint, axis, offset);\n const minX = Math.min(start.x, end.x) - halfWidth;\n const minY = Math.min(start.y, end.y) - halfWidth;\n includeRect(\n bounds,\n minX,\n minY,\n Math.abs(end.x - start.x) + halfWidth * 2,\n Math.abs(end.y - start.y) + halfWidth * 2\n );\n}\n\nfunction includeLinearExtent(bounds, axis, normalStart, normalEnd, tangentExpansion = 0) {\n for (const base of [\n { x: axis.startX, y: axis.startY },\n { x: axis.endX, y: axis.endY }\n ]) {\n for (const normal of [normalStart, normalEnd]) {\n const point = offsetLinearPoint(base, axis, normal);\n includePoint(\n bounds,\n point.x - axis.tangentX * tangentExpansion,\n point.y - axis.tangentY * tangentExpansion\n );\n includePoint(\n bounds,\n point.x + axis.tangentX * tangentExpansion,\n point.y + axis.tangentY * tangentExpansion\n );\n }\n }\n}\n\n\nfunction includeTape(bounds, options) {\n const box = tapeWindowBox(options);\n const expansion = Math.max(\n options.tape.windowStrokeWidth / 2,\n options.tape.windowInnerStrokeWidth / 2\n );\n includeRect(\n bounds,\n box.x - expansion,\n box.y - expansion,\n box.width + expansion * 2,\n box.height + expansion * 2\n );\n}\n\nfunction includeLight(bounds, options) {\n const light = options.light;\n if (!light?.visible) return;\n const point = resolveLightPosition(light, options);\n const radius = Math.max(1, finiteNumber(light.radius, 8));\n // The glow circle extends to 1.82r and its 0.38r Gaussian blur remains\n // visibly relevant for roughly another three standard deviations.\n const halo = light.glow ? radius * 2.96 : radius;\n const bezel = radius + Math.max(1.5, radius * 0.18);\n const extent = Math.max(halo, bezel);\n includeRect(bounds, point.x - extent, point.y - extent, extent * 2, extent * 2);\n}\n\nfunction includeReadout(bounds, options) {\n if (!options.readout.visible) return;\n for (const [kind, part] of Object.entries(options.readout)) {\n if (kind === 'visible' || !part?.visible) continue;\n const text = kind === 'value'\n ? `${part.prefix || ''}${options.max}${part.suffix || ''}`\n : String(part.text || '');\n if (!text && kind !== 'value') continue;\n const point = resolveReadoutPosition(part, options);\n const halfWidth = Math.max(part.fontSize * 0.55, text.length * part.fontSize * 0.34);\n const halfHeight = part.fontSize * 0.68;\n includeRect(bounds, point.x - halfWidth, point.y - halfHeight, halfWidth * 2, halfHeight * 2);\n }\n}\n\nfunction readoutReferenceBox(options) {\n const face = options.face;\n if (face.visible && face.fit !== 'content') return { x: face.x, y: face.y, width: face.width, height: face.height };\n return { x: 0, y: 0, width: options.geometry.width, height: options.geometry.height };\n}\n\nfunction includeArc(bounds, cx, cy, radius, width, startAngle, endAngle) {\n const halfWidth = Math.max(0, finiteNumber(width, 0)) / 2;\n includeArcSector(bounds, cx, cy, Math.max(0, radius - halfWidth), radius + halfWidth, startAngle, endAngle);\n}\n\nfunction includeArcSector(bounds, cx, cy, innerRadius, outerRadius, startAngle, endAngle) {\n const angles = [startAngle, endAngle];\n for (const cardinal of [0, 90, 180, 270]) {\n if (angleIsWithinSweep(cardinal, startAngle, endAngle)) angles.push(cardinal);\n }\n if (innerRadius <= EPSILON) includePoint(bounds, cx, cy);\n for (const angle of angles) {\n const outer = polarPoint(cx, cy, Math.max(0, outerRadius), angle);\n includePoint(bounds, outer.x, outer.y);\n if (innerRadius > EPSILON) {\n const inner = polarPoint(cx, cy, innerRadius, angle);\n includePoint(bounds, inner.x, inner.y);\n }\n }\n}\n\nfunction angleIsWithinSweep(angle, startAngle, endAngle) {\n const delta = endAngle - startAngle;\n if (Math.abs(delta) >= 360 - EPSILON) return true;\n if (delta >= 0) return positiveModulo(angle - startAngle, 360) <= delta + EPSILON;\n return positiveModulo(startAngle - angle, 360) <= -delta + EPSILON;\n}\n\nfunction positiveModulo(value, divisor) {\n return ((value % divisor) + divisor) % divisor;\n}\n", "import { uniqueId } from '../core/utils.js';\nimport { calculateGaugeBounds, padBounds, unionBounds } from '../geometry/bounds.js';\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\n/** Creates an SVG element and applies attributes without using innerHTML. */\nexport function svgElement(tagName, attributes = {}, text = null) {\n const element = document.createElementNS(SVG_NAMESPACE, tagName);\n setSvgAttributes(element, attributes);\n if (text !== null && text !== undefined) element.textContent = String(text);\n return element;\n}\n\n/** Applies SVG attributes, omitting null and undefined values. */\nexport function setSvgAttributes(element, attributes) {\n for (const [name, value] of Object.entries(attributes || {})) {\n if (value === null || value === undefined || value === false) continue;\n if (name === 'className') element.setAttribute('class', String(value));\n else element.setAttribute(name, String(value));\n }\n return element;\n}\n\n/** Owns the generated SVG tree and small dynamic reference registry. */\nexport class SvgRenderer {\n constructor(host, options) {\n this.host = host;\n this.options = options;\n this.id = uniqueId('gaugeit');\n this.controllers = [];\n this.references = new Map();\n this.root = null;\n this.svg = null;\n this.content = null;\n this.contentBounds = null;\n this.layoutBounds = null;\n this.contentClipPathId = null;\n }\n\n /** Creates a clean SVG root for a full render. */\n begin() {\n this.destroyControllers();\n this.references.clear();\n this.contentClipPathId = null;\n\n const root = document.createElement('div');\n root.className = [\n 'gaugeit',\n `gaugeit--${this.options.type}`,\n `gaugeit--layout-${this.options.layout.mode}`,\n this.options.className\n ].filter(Boolean).join(' ');\n root.dataset.gaugeitRoot = 'true';\n root.dataset.gaugeitLayout = this.options.layout.mode;\n\n this.contentBounds = calculateGaugeBounds(this.options, { includeFace: false, includeBase: false });\n this.layoutBounds = calculateGaugeBounds(this.options, { contentBounds: this.contentBounds });\n const initialViewport = padBounds(this.layoutBounds, this.options.layout.padding);\n\n const geometry = this.options.geometry;\n const svg = svgElement('svg', {\n class: 'gaugeit__svg',\n viewBox: viewBoxValue(initialViewport),\n preserveAspectRatio: geometry.preserveAspectRatio,\n focusable: 'false'\n });\n\n const title = svgElement('title', { id: `${this.id}-title` }, this.options.accessibility.label);\n svg.append(title);\n\n if (this.options.accessibility.description) {\n const description = svgElement(\n 'desc',\n { id: `${this.id}-description` },\n this.options.accessibility.description\n );\n svg.append(description);\n svg.setAttribute('aria-describedby', description.id);\n }\n\n svg.setAttribute('aria-labelledby', title.id);\n const content = svgElement('g', {\n class: 'gaugeit__viewport',\n 'data-gaugeit-viewport': 'true'\n });\n svg.append(content);\n root.append(svg);\n this.host.replaceChildren(root);\n this.host.classList.add('gaugeit-host');\n\n this.root = root;\n this.svg = svg;\n this.content = content;\n this.applySizing(initialViewport);\n return svg;\n }\n\n /** Finalizes the responsive viewBox after all layers have been rendered. */\n finish() {\n if (!this.svg || !this.content) return null;\n const measured = measureContent(this.content);\n const contentIsClipped = this.options.face.visible && this.options.face.clipContent;\n const combined = measured && !contentIsClipped\n ? unionBounds(this.layoutBounds, measured)\n : this.layoutBounds;\n const viewport = padBounds(combined, this.options.layout.padding);\n this.layoutBounds = combined;\n this.svg.setAttribute('viewBox', viewBoxValue(viewport));\n this.applySizing(viewport);\n this.root.dataset.gaugeitViewBox = viewBoxValue(viewport);\n return viewport;\n }\n\n /** Creates an SVG group for one logical layer. */\n group(name, attributes = {}) {\n const clipPath = name !== 'face' && this.contentClipPathId\n ? `url(#${this.contentClipPathId})`\n : undefined;\n const group = svgElement('g', {\n class: `gaugeit__layer gaugeit__layer--${name}`,\n 'data-gaugeit-layer': name,\n 'clip-path': clipPath,\n ...attributes\n });\n this.content.append(group);\n return group;\n }\n\n /** Clips subsequently created non-face layers to a reusable SVG clip path. */\n setContentClipPath(clipPathId) {\n this.contentClipPathId = clipPathId ? String(clipPathId) : null;\n }\n\n /** Returns conservative content bounds available before layer rendering. */\n getContentBounds() {\n return this.contentBounds;\n }\n\n /** Stores a generated node or value for later dynamic updates. */\n setReference(name, value) {\n this.references.set(name, value);\n return value;\n }\n\n getReference(name) {\n return this.references.get(name);\n }\n\n addController(controller) {\n if (controller && typeof controller.update === 'function') this.controllers.push(controller);\n }\n\n update(value, state) {\n for (const controller of this.controllers) controller.update(value, state);\n }\n\n destroyControllers() {\n for (const controller of this.controllers) {\n if (typeof controller.destroy === 'function') controller.destroy();\n }\n this.controllers = [];\n }\n\n destroy() {\n this.destroyControllers();\n this.references.clear();\n if (this.root && this.root.parentNode === this.host) this.root.remove();\n this.host.classList.remove('gaugeit-host');\n this.root = null;\n this.svg = null;\n this.content = null;\n this.contentBounds = null;\n this.layoutBounds = null;\n this.contentClipPathId = null;\n }\n\n applySizing(viewport) {\n const responsive = this.options.responsive;\n const contain = this.options.layout.mode === 'contain';\n this.root.style.width = responsive ? '100%' : `${viewport.width}px`;\n this.root.style.maxWidth = '100%';\n this.root.style.height = contain ? '100%' : 'auto';\n this.svg.style.display = 'block';\n this.svg.style.width = responsive ? '100%' : `${viewport.width}px`;\n this.svg.style.height = contain ? '100%' : 'auto';\n this.svg.style.maxWidth = '100%';\n this.svg.style.maxHeight = contain ? '100%' : 'none';\n this.svg.style.overflow = 'hidden';\n }\n}\n\nfunction viewBoxValue(bounds) {\n return `${round(bounds.x)} ${round(bounds.y)} ${round(bounds.width)} ${round(bounds.height)}`;\n}\n\nfunction round(value) {\n return Math.round(value * 1000) / 1000;\n}\n\nfunction measureContent(content) {\n if (typeof content.getBBox !== 'function') return null;\n try {\n const box = content.getBBox();\n if (![box.x, box.y, box.width, box.height].every(Number.isFinite)) return null;\n if (box.width <= 0 && box.height <= 0) return null;\n return { x: box.x, y: box.y, width: Math.max(1, box.width), height: Math.max(1, box.height) };\n } catch {\n return null;\n }\n}\n", "const EASINGS = {\n linear: (t) => t,\n easeInQuad: (t) => t * t,\n easeOutQuad: (t) => t * (2 - t),\n easeInOutQuad: (t) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeOutCubic: (t) => 1 - Math.pow(1 - t, 3),\n easeInOutCubic: (t) => (t < 0.5\n ? 4 * t * t * t\n : 1 - Math.pow(-2 * t + 2, 3) / 2),\n easeOutBack: (t) => {\n const c1 = 1.70158;\n const c3 = c1 + 1;\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n }\n};\n\n/** Resolves a named easing or accepts a custom easing callback. */\nexport function resolveEasing(easing) {\n if (typeof easing === 'function') return easing;\n return EASINGS[easing] || EASINGS.easeOutCubic;\n}\n\nexport const easingNames = Object.freeze(Object.keys(EASINGS));\n", "export const BASE_DEFAULTS = Object.freeze({\n type: 'arc',\n min: 0,\n max: 100,\n value: 0,\n invert: false,\n overflow: 'clamp',\n precision: 3,\n className: '',\n layout: {\n mode: 'intrinsic',\n padding: 8,\n includeGeometry: true\n },\n geometry: {\n mode: 'radial',\n width: 320,\n height: 220,\n centerX: 160,\n centerY: 174,\n radius: 120,\n startAngle: 180,\n endAngle: 360,\n preserveAspectRatio: 'xMidYMid meet',\n aspectRatio: null\n },\n linear: {\n originY: 140,\n startX: 36,\n startY: 0,\n endX: 284,\n endY: 0,\n tickSide: 'negative',\n labelOffset: 34,\n zoneOffset: -12\n },\n face: {\n visible: false,\n shape: 'panel',\n fit: 'geometry',\n contentPadding: 8,\n minWidth: null,\n minHeight: null,\n clipContent: false,\n x: 6,\n y: 6,\n width: 308,\n height: 208,\n cornerRadius: 18,\n color: '#ffffff',\n strokeColor: '#d1d5db',\n strokeWidth: 2,\n innerStrokeColor: '#f3f4f6',\n innerStrokeWidth: 1,\n shadow: false,\n glass: false\n },\n track: {\n visible: true,\n color: '#e5e7eb',\n width: 28,\n radius: 112,\n opacity: 1,\n lineCap: 'butt',\n showUnderZones: false\n },\n zones: [],\n scale: {\n endpointMode: 'auto',\n radius: 112,\n position: 'inside',\n major: {\n visible: true,\n interval: null,\n divisions: 5,\n length: 13,\n width: 2,\n color: '#111827',\n opacity: 1\n },\n minor: {\n visible: true,\n subdivisions: 4,\n length: 7,\n width: 1,\n color: '#6b7280',\n opacity: 0.9\n }\n },\n labels: {\n visible: true,\n interval: null,\n radius: 84,\n color: '#111827',\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: 11,\n fontWeight: 500,\n fractionDigits: 0,\n rotation: 'horizontal',\n formatter: null\n },\n pointer: {\n visible: true,\n type: 'needle',\n length: 94,\n shaftLength: null,\n tailLength: 13,\n width: 8,\n color: '#111827',\n strokeColor: 'none',\n strokeWidth: 0,\n opacity: 1,\n colorByZone: false,\n cap: {\n visible: true,\n stackOrder: 'above',\n radius: 8,\n color: '#111827',\n strokeColor: '#ffffff',\n strokeWidth: 2\n }\n },\n indicator: {\n visible: false,\n type: 'hairline',\n position: 'cross',\n length: 76,\n centerOffset: null,\n offset: 0,\n width: 2,\n color: '#b91c1c',\n strokeColor: 'none',\n strokeWidth: 0,\n opacity: 1,\n lineCap: 'round',\n colorByZone: false,\n markerSize: 8,\n carriageWidth: 14,\n carriageRadius: 4,\n cap: {\n visible: false,\n stackOrder: 'above',\n radius: 4,\n color: '#b91c1c',\n strokeColor: '#ffffff',\n strokeWidth: 1\n }\n },\n centerZero: {\n zeroValue: 0,\n symmetric: false,\n marker: {\n visible: false,\n radius: null,\n position: 'cross',\n centerOffset: 0,\n length: 20,\n width: 3,\n color: '#111827',\n opacity: 1,\n lineCap: 'round'\n }\n },\n tape: {\n orientation: 'vertical',\n x: 64,\n y: 58,\n width: 192,\n height: 210,\n cornerRadius: 12,\n windowColor: '#e5e7eb',\n windowStrokeColor: '#475569',\n windowStrokeWidth: 2,\n windowInnerStrokeColor: '#d1d5db',\n windowInnerStrokeWidth: 1,\n stripColor: '#ffffff',\n textColor: '#111827',\n tickColor: '#334155',\n minorTickColor: '#64748b',\n minorTickOpacity: 0.85,\n majorTickWidth: 2,\n minorTickWidth: 1,\n majorTickLength: 24,\n minorTickLength: 12,\n tickInset: 64,\n labelOffset: 10,\n interval: null,\n minorSubdivisions: 4,\n majorSpacing: 52,\n indicatorColor: '#b91c1c',\n indicatorWidth: 2.5,\n fadeSize: 32,\n fadeColor: '#ffffff',\n colorByZone: false\n },\n light: {\n visible: false,\n x: 160,\n y: 110,\n radius: 8,\n color: 'amber',\n customColor: '',\n offColor: '#f3ead6',\n offEdgeColor: '#817768',\n bezelColor: '#4b5563',\n bezelHighlightColor: '#f8fafc',\n opacity: 1,\n on: false,\n glow: true,\n pulse: true,\n pulseInterval: 2600,\n blink: false,\n blinkInterval: 1000,\n trigger: {\n mode: 'manual',\n source: 'target',\n value: 0,\n min: 0,\n max: 0\n }\n },\n readout: {\n visible: true,\n title: {\n visible: false,\n text: '',\n x: 'auto',\n y: 'auto',\n position: 'top',\n margin: 12,\n offsetX: 0,\n offsetY: 0,\n color: '#374151',\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: 14,\n fontWeight: 700,\n letterSpacing: 0.8\n },\n value: {\n visible: false,\n x: 'auto',\n y: 54,\n position: 'center',\n margin: 12,\n offsetX: 0,\n offsetY: 0,\n color: '#111827',\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: 38,\n fontWeight: 750,\n fractionDigits: 0,\n prefix: '',\n suffix: '',\n locale: undefined,\n formatter: null\n },\n unit: {\n visible: false,\n text: '',\n x: 'auto',\n y: 76,\n position: 'bottom',\n margin: 12,\n offsetX: 0,\n offsetY: 0,\n color: '#6b7280',\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: 12,\n fontWeight: 600\n }\n },\n animation: {\n enabled: true,\n duration: 850,\n easing: 'easeOutCubic',\n animateOnInit: true,\n startFrom: 'min',\n respectReducedMotion: true\n },\n effects: {\n jitter: {\n enabled: false,\n amplitude: 0.45,\n amplitudeUnit: 'value',\n frequency: 4,\n smoothing: 0.86,\n whenIdleOnly: true\n }\n },\n accessibility: {\n label: 'Gauge',\n description: '',\n valueText: null\n },\n performance: {\n pauseWhenHidden: true,\n pauseWhenOffscreen: true\n },\n responsive: true\n});\n", "import { BASE_DEFAULTS } from './defaults.js';\nimport { cloneValue, deepMerge, finiteNumber, isPlainObject } from './utils.js';\nimport { niceInterval } from '../geometry/scale.js';\n\nconst VALID_OVERFLOW = new Set(['clamp', 'expand', 'allow']);\nconst VALID_POINTERS = new Set(['needle', 'line', 'arrow', 'spear']);\nconst VALID_POSITIONS = new Set(['inside', 'outside', 'cross']);\nconst VALID_ROTATIONS = new Set(['horizontal', 'radial', 'tangent']);\nconst VALID_LAYOUT_MODES = new Set(['intrinsic', 'contain']);\nconst VALID_FACE_FITS = new Set(['geometry', 'content']);\nconst VALID_FACE_SHAPES = new Set(['panel', 'circle']);\nconst VALID_ENDPOINT_MODES = new Set(['auto', 'both', 'dedupe']);\nconst VALID_READOUT_POSITIONS = new Set(['top', 'center', 'bottom']);\nconst VALID_GEOMETRY_MODES = new Set(['radial', 'linear', 'tape']);\nconst VALID_LINEAR_TICK_SIDES = new Set(['negative', 'positive', 'cross']);\nconst VALID_INDICATOR_TYPES = new Set(['hairline', 'marker', 'carriage']);\nconst VALID_INDICATOR_POSITIONS = new Set(['negative', 'positive', 'cross']);\nconst VALID_CAP_STACK_ORDERS = new Set(['above', 'below']);\nconst VALID_ORIENTATIONS = new Set(['vertical', 'horizontal']);\nconst VALID_LIGHT_COLORS = new Set([\n 'red', 'green', 'blue', 'amber', 'yellow',\n 'orange', 'white', 'halogen', 'cyan', 'brown'\n]);\nconst VALID_LIGHT_TRIGGER_MODES = new Set(['manual', 'below', 'above', 'between']);\nconst VALID_LIGHT_TRIGGER_SOURCES = new Set(['target', 'displayed', 'pointer']);\n\n/** Resolves base defaults, type defaults, and user options into validated runtime options. */\nexport function resolveGaugeOptions(userOptions, registry) {\n const requested = isPlainObject(userOptions) ? userOptions : {};\n const requestedType = String(requested.type || BASE_DEFAULTS.type);\n const typeDefinition = registry.get(requestedType);\n\n const fallbacks = deepMerge(BASE_DEFAULTS, typeDefinition.defaults);\n let options = deepMerge(fallbacks, requested);\n options.type = requestedType;\n options = restoreOptionShape(options, fallbacks);\n\n if (typeof typeDefinition.configure === 'function') {\n const configured = typeDefinition.configure(options, {\n requested,\n typeDefaults: typeDefinition.defaults\n });\n if (isPlainObject(configured)) options = configured;\n }\n\n options = restoreOptionShape(options, fallbacks);\n options.min = finiteNumber(options.min, 0);\n options.max = finiteNumber(options.max, 100);\n if (options.max <= options.min) options.max = options.min + 1;\n options.value = finiteNumber(options.value, options.min);\n options.invert = options.invert === true;\n options.precision = Math.max(0, Math.min(12, Math.floor(finiteNumber(options.precision, 3))));\n options.overflow = VALID_OVERFLOW.has(options.overflow) ? options.overflow : 'clamp';\n\n validateLayout(options.layout);\n validateGeometry(options.geometry);\n validateLinear(options.linear);\n validateFace(options.face);\n validateScale(options);\n validatePointer(options.pointer);\n validateIndicator(options.indicator, requested.indicator);\n validateCenterZero(options.centerZero, options);\n validateTape(options.tape);\n validateLight(options.light);\n validateLabels(options.labels);\n validateReadout(options.readout);\n validateAnimation(options.animation);\n validateJitter(options.effects.jitter);\n options.zones = normalizeZones(options.zones, options.min, options.max, options.track.width);\n\n return options;\n}\n\n/** Returns a useful major interval from explicit interval or desired divisions. */\nexport function resolveMajorInterval(options) {\n const explicit = finiteNumber(options.scale.major.interval, 0);\n if (explicit > 0) return explicit;\n const divisions = Math.max(1, Math.floor(finiteNumber(options.scale.major.divisions, 5)));\n return niceInterval(options.max - options.min, divisions);\n}\n\n/** Merges a partial runtime update into the original user options. */\nexport function mergeUserOptions(currentUserOptions, patch) {\n return deepMerge(currentUserOptions || {}, patch || {});\n}\n\nfunction validateLayout(layout) {\n layout.mode = VALID_LAYOUT_MODES.has(layout.mode) ? layout.mode : 'intrinsic';\n layout.padding = Math.max(0, finiteNumber(layout.padding, 8));\n layout.includeGeometry = layout.includeGeometry !== false;\n}\n\nfunction validateGeometry(geometry) {\n geometry.mode = VALID_GEOMETRY_MODES.has(geometry.mode) ? geometry.mode : 'radial';\n geometry.width = Math.max(40, finiteNumber(geometry.width, 320));\n geometry.height = Math.max(40, finiteNumber(geometry.height, 220));\n geometry.centerX = finiteNumber(geometry.centerX, geometry.width / 2);\n geometry.centerY = finiteNumber(geometry.centerY, geometry.height * 0.78);\n geometry.radius = Math.max(1, finiteNumber(geometry.radius, Math.min(geometry.width, geometry.height) * 0.4));\n geometry.startAngle = finiteNumber(geometry.startAngle, 180);\n geometry.endAngle = finiteNumber(geometry.endAngle, 360);\n if (Math.abs(geometry.endAngle - geometry.startAngle) < 0.001) geometry.endAngle = geometry.startAngle + 180;\n if (Math.abs(geometry.endAngle - geometry.startAngle) > 360) {\n geometry.endAngle = geometry.startAngle + Math.sign(geometry.endAngle - geometry.startAngle) * 360;\n }\n geometry.preserveAspectRatio = String(geometry.preserveAspectRatio || 'xMidYMid meet');\n geometry.aspectRatio = geometry.aspectRatio === null || geometry.aspectRatio === undefined\n ? null\n : Math.max(0.000001, finiteNumber(geometry.aspectRatio, geometry.width / geometry.height));\n}\n\nfunction validateLinear(linear) {\n linear.originY = finiteNumber(linear.originY, 140);\n linear.startX = finiteNumber(linear.startX, 36);\n linear.startY = finiteNumber(linear.startY, 0);\n linear.endX = finiteNumber(linear.endX, 284);\n linear.endY = finiteNumber(linear.endY, linear.startY);\n if (Math.hypot(linear.endX - linear.startX, linear.endY - linear.startY) < 0.001) {\n linear.endX = linear.startX + 1;\n linear.endY = linear.startY;\n }\n linear.tickSide = VALID_LINEAR_TICK_SIDES.has(linear.tickSide) ? linear.tickSide : 'negative';\n linear.labelOffset = finiteNumber(linear.labelOffset, 34);\n linear.zoneOffset = finiteNumber(linear.zoneOffset, -12);\n}\n\nfunction validateFace(face) {\n face.shape = VALID_FACE_SHAPES.has(face.shape) ? face.shape : 'panel';\n face.fit = VALID_FACE_FITS.has(face.fit) ? face.fit : 'geometry';\n face.contentPadding = Math.max(0, finiteNumber(face.contentPadding, 8));\n face.minWidth = face.minWidth === null || face.minWidth === undefined\n ? null\n : Math.max(1, finiteNumber(face.minWidth, 1));\n face.minHeight = face.minHeight === null || face.minHeight === undefined\n ? null\n : Math.max(1, finiteNumber(face.minHeight, 1));\n face.clipContent = face.clipContent === true;\n face.x = finiteNumber(face.x, 6);\n face.y = finiteNumber(face.y, 6);\n face.width = Math.max(1, finiteNumber(face.width, 308));\n face.height = Math.max(1, finiteNumber(face.height, 208));\n face.cornerRadius = Math.max(0, finiteNumber(face.cornerRadius, 18));\n face.strokeWidth = Math.max(0, finiteNumber(face.strokeWidth, 2));\n face.innerStrokeWidth = Math.max(0, finiteNumber(face.innerStrokeWidth, 1));\n}\n\nfunction validateScale(options) {\n options.scale.endpointMode = VALID_ENDPOINT_MODES.has(options.scale.endpointMode)\n ? options.scale.endpointMode\n : 'auto';\n options.scale.radius = Math.max(1, finiteNumber(options.scale.radius, options.geometry.radius));\n options.scale.position = VALID_POSITIONS.has(options.scale.position) ? options.scale.position : 'inside';\n options.scale.major.divisions = Math.max(1, Math.floor(finiteNumber(options.scale.major.divisions, 5)));\n options.scale.major.length = Math.max(0, finiteNumber(options.scale.major.length, 13));\n options.scale.major.width = Math.max(0, finiteNumber(options.scale.major.width, 2));\n options.scale.minor.subdivisions = Math.max(0, Math.floor(finiteNumber(options.scale.minor.subdivisions, 4)));\n options.scale.minor.length = Math.max(0, finiteNumber(options.scale.minor.length, 7));\n options.scale.minor.width = Math.max(0, finiteNumber(options.scale.minor.width, 1));\n}\n\nfunction validatePointer(pointer) {\n pointer.type = VALID_POINTERS.has(pointer.type) ? pointer.type : 'needle';\n pointer.length = Math.max(0, finiteNumber(pointer.length, 94));\n pointer.shaftLength = pointer.shaftLength === null || pointer.shaftLength === undefined\n ? null\n : Math.min(pointer.length, Math.max(0, finiteNumber(pointer.shaftLength, pointer.length)));\n pointer.tailLength = Math.max(0, finiteNumber(pointer.tailLength, 13));\n pointer.width = Math.max(0.5, finiteNumber(pointer.width, 8));\n pointer.strokeWidth = Math.max(0, finiteNumber(pointer.strokeWidth, 0));\n pointer.cap.radius = Math.max(0, finiteNumber(pointer.cap.radius, 8));\n pointer.cap.strokeWidth = Math.max(0, finiteNumber(pointer.cap.strokeWidth, 2));\n pointer.cap.stackOrder = VALID_CAP_STACK_ORDERS.has(pointer.cap.stackOrder)\n ? pointer.cap.stackOrder\n : 'above';\n}\n\nfunction validateIndicator(indicator, requestedIndicator = {}) {\n indicator.visible = indicator.visible === true;\n indicator.type = VALID_INDICATOR_TYPES.has(indicator.type) ? indicator.type : 'hairline';\n indicator.position = VALID_INDICATOR_POSITIONS.has(indicator.position) ? indicator.position : 'cross';\n indicator.length = Math.max(0, finiteNumber(indicator.length, 76));\n // centerOffset is the public orientation-independent control: positive values\n // move a left-to-right horizontal indicator upward. The older signed offset\n // remains accepted and is converted without changing its previous behaviour.\n const explicitCenterOffset = isPlainObject(requestedIndicator)\n && Object.prototype.hasOwnProperty.call(requestedIndicator, 'centerOffset');\n const explicitLegacyOffset = isPlainObject(requestedIndicator)\n && Object.prototype.hasOwnProperty.call(requestedIndicator, 'offset');\n if (explicitCenterOffset) indicator.centerOffset = finiteNumber(requestedIndicator.centerOffset, 0);\n else if (explicitLegacyOffset) indicator.centerOffset = -finiteNumber(requestedIndicator.offset, 0);\n else if (indicator.centerOffset === null || indicator.centerOffset === undefined) {\n indicator.centerOffset = -finiteNumber(indicator.offset, 0);\n } else indicator.centerOffset = finiteNumber(indicator.centerOffset, 0);\n indicator.offset = -indicator.centerOffset;\n indicator.width = Math.max(0.5, finiteNumber(indicator.width, 2));\n indicator.strokeWidth = Math.max(0, finiteNumber(indicator.strokeWidth, 0));\n indicator.opacity = Math.min(1, Math.max(0, finiteNumber(indicator.opacity, 1)));\n indicator.markerSize = Math.max(1, finiteNumber(indicator.markerSize, 8));\n indicator.carriageWidth = Math.max(1, finiteNumber(indicator.carriageWidth, 14));\n indicator.carriageRadius = Math.max(0, finiteNumber(indicator.carriageRadius, 4));\n indicator.cap.radius = Math.max(0, finiteNumber(indicator.cap.radius, 4));\n indicator.cap.strokeWidth = Math.max(0, finiteNumber(indicator.cap.strokeWidth, 1));\n indicator.cap.stackOrder = VALID_CAP_STACK_ORDERS.has(indicator.cap.stackOrder)\n ? indicator.cap.stackOrder\n : 'above';\n}\n\nfunction validateCenterZero(centerZero, options) {\n centerZero.zeroValue = finiteNumber(centerZero.zeroValue, 0);\n centerZero.symmetric = centerZero.symmetric === true;\n if (centerZero.symmetric) {\n const magnitude = Math.max(\n Math.abs(options.min - centerZero.zeroValue),\n Math.abs(options.max - centerZero.zeroValue),\n 1\n );\n options.min = centerZero.zeroValue - magnitude;\n options.max = centerZero.zeroValue + magnitude;\n }\n centerZero.marker.visible = centerZero.marker.visible === true;\n centerZero.marker.radius = centerZero.marker.radius === null || centerZero.marker.radius === undefined\n ? null\n : Math.max(0, finiteNumber(centerZero.marker.radius, options.scale.radius));\n centerZero.marker.position = VALID_INDICATOR_POSITIONS.has(centerZero.marker.position)\n ? centerZero.marker.position\n : 'cross';\n centerZero.marker.centerOffset = finiteNumber(centerZero.marker.centerOffset, 0);\n centerZero.marker.length = Math.max(0, finiteNumber(centerZero.marker.length, 20));\n centerZero.marker.width = Math.max(0.5, finiteNumber(centerZero.marker.width, 3));\n centerZero.marker.opacity = Math.min(1, Math.max(0, finiteNumber(centerZero.marker.opacity, 1)));\n centerZero.marker.lineCap = String(centerZero.marker.lineCap || 'round');\n}\n\nfunction validateTape(tape) {\n tape.orientation = VALID_ORIENTATIONS.has(tape.orientation) ? tape.orientation : 'vertical';\n tape.x = finiteNumber(tape.x, 64);\n tape.y = finiteNumber(tape.y, 58);\n tape.width = Math.max(20, finiteNumber(tape.width, 192));\n tape.height = Math.max(20, finiteNumber(tape.height, 210));\n tape.cornerRadius = Math.max(0, finiteNumber(tape.cornerRadius, 12));\n tape.windowStrokeWidth = Math.max(0, finiteNumber(tape.windowStrokeWidth, 2));\n tape.windowInnerStrokeWidth = Math.max(0, finiteNumber(tape.windowInnerStrokeWidth, 1));\n tape.minorTickOpacity = Math.min(1, Math.max(0, finiteNumber(tape.minorTickOpacity, 0.85)));\n tape.majorTickWidth = Math.max(0.5, finiteNumber(tape.majorTickWidth, 2));\n tape.minorTickWidth = Math.max(0.5, finiteNumber(tape.minorTickWidth, 1));\n tape.majorTickLength = Math.max(0, finiteNumber(tape.majorTickLength, 24));\n tape.minorTickLength = Math.max(0, finiteNumber(tape.minorTickLength, 12));\n tape.tickInset = finiteNumber(tape.tickInset, 64);\n tape.labelOffset = finiteNumber(tape.labelOffset, 10);\n tape.interval = tape.interval === null || tape.interval === undefined\n ? null\n : Math.max(0.000001, finiteNumber(tape.interval, 1));\n tape.minorSubdivisions = Math.max(0, Math.floor(finiteNumber(tape.minorSubdivisions, 4)));\n tape.majorSpacing = Math.max(2, finiteNumber(tape.majorSpacing, 52));\n tape.indicatorWidth = Math.max(0.5, finiteNumber(tape.indicatorWidth, 2.5));\n const fadeAxisSize = tape.orientation === 'horizontal' ? tape.width : tape.height;\n tape.fadeSize = Math.min(fadeAxisSize / 2, Math.max(0, finiteNumber(tape.fadeSize, 32)));\n tape.colorByZone = tape.colorByZone === true;\n}\n\nfunction validateLight(light) {\n light.visible = light.visible === true;\n light.x = finiteNumber(light.x, 160);\n light.y = finiteNumber(light.y, 110);\n light.radius = Math.max(1, finiteNumber(light.radius, 8));\n light.color = VALID_LIGHT_COLORS.has(light.color) ? light.color : 'amber';\n light.customColor = light.customColor === null || light.customColor === undefined\n ? ''\n : String(light.customColor).trim();\n light.offColor = normalizeColor(light.offColor, '#f3ead6');\n light.offEdgeColor = normalizeColor(light.offEdgeColor, '#817768');\n light.bezelColor = normalizeColor(light.bezelColor, '#4b5563');\n light.bezelHighlightColor = normalizeColor(light.bezelHighlightColor, '#f8fafc');\n light.opacity = Math.min(1, Math.max(0, finiteNumber(light.opacity, 1)));\n light.on = light.on === true;\n light.glow = light.glow !== false;\n light.pulse = light.pulse !== false;\n light.pulseInterval = Math.max(400, finiteNumber(light.pulseInterval, 2600));\n light.blink = light.blink === true;\n light.blinkInterval = Math.max(100, finiteNumber(light.blinkInterval, 1000));\n light.trigger = isPlainObject(light.trigger) ? light.trigger : {};\n light.trigger.mode = VALID_LIGHT_TRIGGER_MODES.has(light.trigger.mode)\n ? light.trigger.mode\n : 'manual';\n light.trigger.source = VALID_LIGHT_TRIGGER_SOURCES.has(light.trigger.source)\n ? light.trigger.source\n : 'target';\n light.trigger.value = finiteNumber(light.trigger.value, 0);\n light.trigger.min = finiteNumber(light.trigger.min, light.trigger.value);\n light.trigger.max = finiteNumber(light.trigger.max, light.trigger.value);\n if (light.trigger.max < light.trigger.min) {\n [light.trigger.min, light.trigger.max] = [light.trigger.max, light.trigger.min];\n }\n}\n\nfunction normalizeColor(value, fallback) {\n if (value === null || value === undefined) return fallback;\n const normalized = String(value).trim();\n return normalized || fallback;\n}\n\nfunction validateLabels(labels) {\n labels.radius = Math.max(0, finiteNumber(labels.radius, 84));\n labels.fontSize = Math.max(1, finiteNumber(labels.fontSize, 11));\n labels.fractionDigits = Math.max(0, Math.min(12, Math.floor(finiteNumber(labels.fractionDigits, 0))));\n labels.rotation = VALID_ROTATIONS.has(labels.rotation) ? labels.rotation : 'horizontal';\n}\n\nfunction validateReadout(readout) {\n readout.visible = readout.visible !== false;\n validateReadoutPart(readout.title, 14);\n validateReadoutPart(readout.value, 38);\n validateReadoutPart(readout.unit, 12);\n readout.value.fractionDigits = Math.max(\n 0,\n Math.min(12, Math.floor(finiteNumber(readout.value.fractionDigits, 0)))\n );\n}\n\nfunction validateReadoutPart(part, defaultFontSize) {\n part.visible = part.visible === true;\n part.x = part.x === 'auto' ? 'auto' : finiteNumber(part.x, 160);\n part.y = part.y === 'auto' ? 'auto' : finiteNumber(part.y, 0);\n part.position = VALID_READOUT_POSITIONS.has(part.position) ? part.position : 'top';\n part.margin = Math.max(0, finiteNumber(part.margin, 12));\n part.offsetX = finiteNumber(part.offsetX, 0);\n part.offsetY = finiteNumber(part.offsetY, 0);\n part.fontSize = Math.max(1, finiteNumber(part.fontSize, defaultFontSize));\n part.letterSpacing = finiteNumber(part.letterSpacing, 0);\n}\n\nfunction validateAnimation(animation) {\n animation.duration = Math.max(0, finiteNumber(animation.duration, 850));\n if (typeof animation.startFrom !== 'number' && !['min', 'max', 'value'].includes(animation.startFrom)) {\n animation.startFrom = 'min';\n }\n}\n\nfunction validateJitter(jitter) {\n jitter.amplitude = Math.max(0, finiteNumber(jitter.amplitude, 0.45));\n jitter.amplitudeUnit = jitter.amplitudeUnit === 'percent' ? 'percent' : 'value';\n jitter.frequency = Math.max(0.1, finiteNumber(jitter.frequency, 4));\n jitter.smoothing = Math.min(0.999, Math.max(0, finiteNumber(jitter.smoothing, 0.86)));\n}\n\nfunction normalizeZones(zones, min, max, defaultWidth) {\n if (!Array.isArray(zones)) return [];\n return zones\n .filter(isPlainObject)\n .map((zone) => {\n const width = zone.width === undefined ? undefined : Math.max(0, finiteNumber(zone.width, 0));\n const taper = normalizeZoneTaper(zone.taper, width ?? defaultWidth);\n return {\n ...zone,\n min: Math.max(min, finiteNumber(zone.min, min)),\n max: Math.min(max, finiteNumber(zone.max, max)),\n color: zone.color ?? zone.strokeStyle ?? 'transparent',\n width,\n taper,\n radius: zone.radius === undefined ? undefined : Math.max(0, finiteNumber(zone.radius, 0)),\n offset: zone.offset === undefined ? undefined : finiteNumber(zone.offset, 0),\n opacity: zone.opacity === undefined ? 1 : Math.min(1, Math.max(0, finiteNumber(zone.opacity, 1)))\n };\n })\n .filter((zone) => zone.max > zone.min);\n}\n\nfunction restoreOptionShape(options, fallbacks) {\n if (!isPlainObject(options)) return cloneValue(fallbacks);\n for (const [key, fallback] of Object.entries(fallbacks)) {\n if (!isPlainObject(fallback)) continue;\n options[key] = restoreOptionShape(options[key], fallback);\n }\n return options;\n}\n\nfunction normalizeZoneTaper(taper, fallbackWidth) {\n if (!isPlainObject(taper)) return undefined;\n const startWidth = taper.startWidth === undefined\n ? fallbackWidth\n : Math.max(0, finiteNumber(taper.startWidth, fallbackWidth ?? 0));\n const endWidth = taper.endWidth === undefined\n ? fallbackWidth\n : Math.max(0, finiteNumber(taper.endWidth, fallbackWidth ?? startWidth ?? 0));\n return {\n startWidth,\n endWidth,\n segments: Math.max(2, Math.min(256, Math.floor(finiteNumber(taper.segments, 48))))\n };\n}\n", "import { SvgRenderer } from '../renderer/svg.js';\nimport { resolveEasing } from './easing.js';\nimport { mergeUserOptions, resolveGaugeOptions } from './options.js';\nimport {\n cancelFrame,\n clamp,\n dispatchGaugeEvent,\n finiteNumber,\n requestFrame,\n resolveElement\n} from './utils.js';\n\n/**\n * Main Gaugeit instance.\n *\n * The class owns configuration, lifecycle, animation, jitter, accessibility,\n * and a renderer. Gauge types remain declarative layer collections in the registry.\n */\nexport class Gauge {\n constructor(target, userOptions, registry, lifecycle = {}) {\n this.host = resolveElement(target);\n this.registry = registry;\n this._onDestroy = typeof lifecycle.onDestroy === 'function' ? lifecycle.onDestroy : null;\n this.userOptions = mergeUserOptions({}, userOptions || {});\n this.options = resolveGaugeOptions(this.userOptions, registry);\n this.renderer = new SvgRenderer(this.host, this.options);\n\n this._destroyed = false;\n this._paused = false;\n this._pausedAt = 0;\n this._lifecycleSuspendedAt = 0;\n this._onscreen = true;\n this._frameHandle = null;\n this._animation = null;\n this._targetValue = this._normalizeIncomingValue(this.options.value);\n this._baseValue = this._targetValue;\n this._displayValue = this._targetValue;\n this._pointerValue = this._targetValue;\n this._jitterOffset = 0;\n this._jitterTarget = 0;\n this._lastJitterTargetAt = 0;\n this._lastFrameAt = 0;\n this._visibilityHandler = null;\n this._intersectionObserver = null;\n\n this._syncLifecycleObservers();\n this.render();\n this._initializeValue();\n }\n\n /** Fully rebuilds static layers and dynamic controllers. */\n render() {\n this._assertAlive();\n this.renderer.options = this.options;\n this.renderer.begin();\n\n const definition = this.registry.get(this.options.type);\n const context = {\n gauge: this,\n options: this.options,\n renderer: this.renderer,\n registry: this.registry\n };\n\n for (const layer of definition.layers) {\n const controller = layer.render(context);\n this.renderer.addController(controller);\n }\n\n this._updateDynamic(this._displayValue, true, this._pointerValue);\n this.renderer.finish();\n dispatchGaugeEvent(this.host, 'render', {\n gauge: this,\n type: this.options.type,\n value: this._targetValue\n });\n return this;\n }\n\n /** Sets a new gauge value. */\n setValue(value, updateOptions = {}) {\n this._assertAlive();\n const normalized = this._normalizeIncomingValue(value);\n const duration = Math.max(0, finiteNumber(updateOptions.duration, this.options.animation.duration));\n const animate = updateOptions.animate !== false\n && this.options.animation.enabled\n && duration > 0\n && !this._prefersReducedMotion();\n\n this._targetValue = normalized;\n this.options.value = normalized;\n\n if (!animate) {\n this._animation = null;\n this._baseValue = normalized;\n this._displayValue = normalized;\n this._pointerValue = normalized;\n this._jitterOffset = 0;\n this._updateDynamic(normalized, true, normalized);\n this._ensureLoop();\n this._emitChange();\n return this;\n }\n\n const easing = resolveEasing(updateOptions.easing || this.options.animation.easing);\n const now = performanceNow();\n this._animation = {\n from: this._baseValue,\n to: normalized,\n startedAt: now,\n duration,\n easing\n };\n dispatchGaugeEvent(this.host, 'animationstart', {\n gauge: this,\n from: this._animation.from,\n to: normalized,\n duration\n });\n this._ensureLoop();\n this._emitChange();\n return this;\n }\n\n /** Gauge.js-compatible convenience alias. */\n set(value, updateOptions = {}) {\n return this.setValue(value, updateOptions);\n }\n\n /** Updates options by recursively merging a partial patch into the current user options. */\n updateOptions(patch, behavior = {}) {\n this._assertAlive();\n const requested = patch || {};\n return this._applyUserOptions(\n mergeUserOptions(this.userOptions, requested),\n Object.prototype.hasOwnProperty.call(requested, 'value'),\n behavior\n );\n }\n\n /** Replaces the complete user-option object while preserving the current value unless supplied. */\n replaceOptions(options = {}, behavior = {}) {\n this._assertAlive();\n const requested = options || {};\n return this._applyUserOptions(\n mergeUserOptions({}, requested),\n Object.prototype.hasOwnProperty.call(requested, 'value'),\n behavior\n );\n }\n\n /** Gauge.js-style alias for updateOptions. */\n setOptions(patch, behavior = {}) {\n return this.updateOptions(patch, behavior);\n }\n\n _applyUserOptions(nextUserOptions, hadExplicitValue, behavior) {\n const previousType = this.options.type;\n this.userOptions = nextUserOptions;\n this.options = resolveGaugeOptions(this.userOptions, this.registry);\n this.renderer.options = this.options;\n this._syncLifecycleObservers();\n\n const value = hadExplicitValue ? this.options.value : this._targetValue;\n this._targetValue = this._normalizeIncomingValue(value);\n\n if (hadExplicitValue && !behavior.animateToValue) {\n this._animation = null;\n this._baseValue = this._targetValue;\n this._displayValue = this._targetValue;\n this._pointerValue = this._targetValue;\n this._jitterOffset = 0;\n } else {\n this._baseValue = this._normalizeIncomingValue(this._baseValue);\n this._displayValue = this._normalizeIncomingValue(this._displayValue);\n this._pointerValue = this._displayClamp(this._baseValue + this._jitterOffset);\n }\n\n this.options.value = this._targetValue;\n this.render();\n\n if (behavior.animateToValue) this.setValue(this._targetValue, { animate: true });\n else this._updateDynamic(this._displayValue, true, this._pointerValue);\n\n if (previousType !== this.options.type) {\n dispatchGaugeEvent(this.host, 'typechange', {\n gauge: this,\n previousType,\n type: this.options.type\n });\n }\n this._ensureLoop();\n return this;\n }\n\n /** Returns the last requested stable value. */\n getValue() {\n return this._targetValue;\n }\n\n /** Returns the currently rendered base value; visual pointer jitter is excluded. */\n getDisplayedValue() {\n return this._displayValue;\n }\n\n /** Temporarily stops animation and jitter work. */\n pause() {\n if (this._destroyed || this._paused) return this;\n this._paused = true;\n this._pausedAt = performanceNow();\n cancelFrame(this._frameHandle);\n this._frameHandle = null;\n dispatchGaugeEvent(this.host, 'pause', { gauge: this });\n return this;\n }\n\n /** Resumes pending animation and jitter work. */\n resume() {\n if (this._destroyed || !this._paused) return this;\n const now = performanceNow();\n const suspensionStartedAt = this._lifecycleSuspendedAt > 0\n ? Math.min(this._pausedAt, this._lifecycleSuspendedAt)\n : this._pausedAt;\n this._paused = false;\n if (this._animation && suspensionStartedAt > 0) {\n this._animation.startedAt += Math.max(0, now - suspensionStartedAt);\n }\n this._pausedAt = 0;\n this._lifecycleSuspendedAt = this._isLifecycleBlocked() ? now : 0;\n this._lastFrameAt = 0;\n this._ensureLoop();\n dispatchGaugeEvent(this.host, 'resume', { gauge: this });\n return this;\n }\n\n /** Re-renders after custom CSS variables, fonts, or plugin state changed. */\n refresh() {\n return this.render();\n }\n\n /** Releases frames, observers, listeners, and generated DOM. */\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n cancelFrame(this._frameHandle);\n this._frameHandle = null;\n this._animation = null;\n\n this._removeLifecycleObservers();\n this.renderer.destroy();\n const onDestroy = this._onDestroy;\n this._onDestroy = null;\n if (onDestroy) onDestroy(this);\n dispatchGaugeEvent(this.host, 'destroy', { gauge: this });\n }\n\n _initializeValue() {\n const animation = this.options.animation;\n if (!animation.enabled || !animation.animateOnInit || animation.duration <= 0 || this._prefersReducedMotion()) {\n this._baseValue = this._targetValue;\n this._displayValue = this._targetValue;\n this._pointerValue = this._targetValue;\n this._updateDynamic(this._targetValue, true, this._targetValue);\n this._ensureLoop();\n return;\n }\n\n const start = this._resolveInitialValue(animation.startFrom);\n if (Object.is(start, this._targetValue)) {\n this._updateDynamic(this._targetValue, true);\n this._ensureLoop();\n return;\n }\n\n const target = this._targetValue;\n this._baseValue = start;\n this._displayValue = start;\n this._pointerValue = start;\n this._updateDynamic(start, true, start);\n this.setValue(target, { animate: true });\n }\n\n _resolveInitialValue(startFrom) {\n if (typeof startFrom === 'number') return this._normalizeIncomingValue(startFrom);\n if (startFrom === 'max') return this.options.max;\n if (startFrom === 'value') return this._targetValue;\n return this.options.min;\n }\n\n _normalizeIncomingValue(value) {\n const number = finiteNumber(value, this.options.min);\n if (this.options.overflow === 'allow') return number;\n if (this.options.overflow === 'expand') {\n let changed = false;\n if (number < this.options.min) {\n this.userOptions.min = number;\n changed = true;\n }\n if (number > this.options.max) {\n this.userOptions.max = number;\n changed = true;\n }\n if (changed) {\n this.options = resolveGaugeOptions(this.userOptions, this.registry);\n if (this.renderer) {\n this.renderer.options = this.options;\n if (this.renderer.svg) this.render();\n }\n }\n return number;\n }\n return clamp(number, this.options.min, this.options.max);\n }\n\n _ensureLoop() {\n if (this._destroyed || this._paused || this._frameHandle !== null) return;\n if (!this._shouldRun()) return;\n this._frameHandle = requestFrame((timestamp) => this._frame(timestamp));\n }\n\n _frame(timestamp) {\n this._frameHandle = null;\n if (this._destroyed || this._paused || !this._shouldRun()) return;\n\n const now = Number.isFinite(timestamp) ? timestamp : performanceNow();\n const delta = this._lastFrameAt > 0 ? Math.min(100, Math.max(0, now - this._lastFrameAt)) : 16.667;\n this._lastFrameAt = now;\n let animationCompleted = false;\n\n if (this._animation) {\n const elapsed = now - this._animation.startedAt;\n const progress = this._animation.duration <= 0 ? 1 : clamp(elapsed / this._animation.duration, 0, 1);\n const eased = this._animation.easing(progress);\n this._baseValue = this._animation.from + (this._animation.to - this._animation.from) * eased;\n if (progress >= 1) {\n const completed = this._animation;\n this._baseValue = completed.to;\n this._animation = null;\n animationCompleted = true;\n dispatchGaugeEvent(this.host, 'animationend', {\n gauge: this,\n value: completed.to\n });\n }\n }\n\n const jitter = this.options.effects.jitter;\n const jitterActive = jitter.enabled && (!jitter.whenIdleOnly || !this._animation);\n if (jitterActive) {\n const interval = 1000 / jitter.frequency;\n if (this._lastJitterTargetAt === 0 || now - this._lastJitterTargetAt >= interval) {\n this._jitterTarget = (Math.random() * 2 - 1) * this._jitterAmplitude();\n this._lastJitterTargetAt = now;\n }\n const smoothingFactor = 1 - Math.pow(jitter.smoothing, delta / 16.667);\n this._jitterOffset += (this._jitterTarget - this._jitterOffset) * smoothingFactor;\n } else {\n this._jitterTarget = 0;\n const smoothingFactor = 1 - Math.pow(jitter.smoothing, delta / 16.667);\n this._jitterOffset += (0 - this._jitterOffset) * smoothingFactor;\n if (Math.abs(this._jitterOffset) < 0.000001) this._jitterOffset = 0;\n }\n\n const nextDisplay = this._displayClamp(this._baseValue);\n const nextPointer = this._displayClamp(this._baseValue + this._jitterOffset);\n this._updateDynamic(nextDisplay, false, nextPointer);\n\n if (animationCompleted) this._emitSettled();\n if (this._needsAnotherFrame()) this._ensureLoop();\n }\n\n _needsAnotherFrame() {\n if (this._animation) return true;\n const jitter = this.options.effects.jitter;\n if (jitter.enabled) return true;\n return Math.abs(this._jitterOffset) > 0.000001;\n }\n\n _jitterAmplitude() {\n const jitter = this.options.effects.jitter;\n if (jitter.amplitudeUnit === 'percent') {\n return (this.options.max - this.options.min) * jitter.amplitude / 100;\n }\n return jitter.amplitude;\n }\n\n _displayClamp(value) {\n return this.options.overflow === 'allow' ? value : clamp(value, this.options.min, this.options.max);\n }\n\n _updateDynamic(value, force, pointerValue = value) {\n const rounded = roundValue(value, this.options.precision);\n const displayChanged = !Object.is(rounded, this._displayValue);\n const pointerChanged = !Object.is(pointerValue, this._pointerValue);\n if (!force && !displayChanged && !pointerChanged) return;\n this._displayValue = rounded;\n this._pointerValue = pointerValue;\n this.renderer.update(rounded, {\n gauge: this,\n targetValue: this._targetValue,\n baseValue: this._baseValue,\n pointerValue,\n animated: Boolean(this._animation),\n jitterOffset: this._jitterOffset\n });\n if (force || displayChanged) {\n this._updateAccessibility(rounded);\n dispatchGaugeEvent(this.host, 'displaychange', {\n gauge: this,\n value: this._targetValue,\n displayedValue: rounded\n });\n }\n }\n\n _updateAccessibility(value) {\n const root = this.renderer.root;\n if (!root) return;\n root.setAttribute('role', 'meter');\n root.setAttribute('aria-label', this.options.accessibility.label);\n root.setAttribute('aria-valuemin', String(this.options.min));\n root.setAttribute('aria-valuemax', String(this.options.max));\n root.setAttribute('aria-valuenow', String(value));\n\n const valueText = this.options.accessibility.valueText;\n if (typeof valueText === 'function') {\n root.setAttribute('aria-valuetext', String(valueText(value, this.options)));\n } else if (typeof valueText === 'string' && valueText) {\n root.setAttribute('aria-valuetext', valueText);\n } else {\n root.removeAttribute('aria-valuetext');\n }\n }\n\n _emitChange() {\n dispatchGaugeEvent(this.host, 'change', {\n gauge: this,\n value: this._targetValue,\n displayedValue: this._displayValue\n });\n }\n\n _emitSettled() {\n dispatchGaugeEvent(this.host, 'settled', {\n gauge: this,\n value: this._targetValue,\n displayedValue: this._displayValue\n });\n }\n\n _syncLifecycleObservers() {\n this._removeLifecycleObservers();\n this._onscreen = true;\n this._lifecycleSuspendedAt = 0;\n this._installLifecycleObservers();\n }\n\n _removeLifecycleObservers() {\n if (this._visibilityHandler && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', this._visibilityHandler);\n }\n this._visibilityHandler = null;\n if (this._intersectionObserver) this._intersectionObserver.disconnect();\n this._intersectionObserver = null;\n }\n\n _installLifecycleObservers() {\n if (typeof document !== 'undefined' && this.options.performance.pauseWhenHidden) {\n this._visibilityHandler = () => {\n if (document.hidden) {\n this._suspendForLifecycle();\n return;\n }\n this._resumeFromLifecycle();\n };\n document.addEventListener('visibilitychange', this._visibilityHandler, { passive: true });\n if (document.hidden) this._suspendForLifecycle();\n }\n\n if (typeof IntersectionObserver === 'function' && this.options.performance.pauseWhenOffscreen) {\n this._intersectionObserver = new IntersectionObserver((entries) => {\n const entry = entries[0];\n this._onscreen = Boolean(entry && entry.isIntersecting);\n if (!this._onscreen) {\n this._suspendForLifecycle();\n } else {\n this._resumeFromLifecycle();\n }\n }, { rootMargin: '100px' });\n this._intersectionObserver.observe(this.host);\n }\n }\n\n _shouldRun() {\n if (this._isLifecycleBlocked()) return false;\n return this._needsAnotherFrame();\n }\n\n _isLifecycleBlocked() {\n if (typeof document !== 'undefined' && this.options.performance.pauseWhenHidden && document.hidden) return true;\n return this.options.performance.pauseWhenOffscreen && !this._onscreen;\n }\n\n _suspendForLifecycle() {\n if (this._lifecycleSuspendedAt === 0) this._lifecycleSuspendedAt = performanceNow();\n cancelFrame(this._frameHandle);\n this._frameHandle = null;\n }\n\n _resumeFromLifecycle() {\n if (typeof document !== 'undefined' && this.options.performance.pauseWhenHidden && document.hidden) return;\n if (this.options.performance.pauseWhenOffscreen && !this._onscreen) return;\n if (this._paused) return;\n if (this._lifecycleSuspendedAt > 0 && this._animation) {\n this._animation.startedAt += Math.max(0, performanceNow() - this._lifecycleSuspendedAt);\n }\n this._lifecycleSuspendedAt = 0;\n this._lastFrameAt = 0;\n this._ensureLoop();\n }\n\n _prefersReducedMotion() {\n if (!this.options.animation.respectReducedMotion || typeof matchMedia !== 'function') return false;\n return matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n\n _assertAlive() {\n if (this._destroyed) throw new Error('This Gaugeit instance has been destroyed.');\n }\n}\n\nfunction performanceNow() {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') return performance.now();\n return Date.now();\n}\n\nfunction roundValue(value, precision) {\n const factor = Math.pow(10, precision);\n return Math.round(value * factor) / factor;\n}\n", "import { cloneValue, isPlainObject } from './utils.js';\n\n/** Registry for built-in and application-defined gauge types. */\nexport class GaugeTypeRegistry {\n constructor() {\n this._types = new Map();\n }\n\n /** Registers or replaces a gauge type. */\n register(name, definition) {\n const normalizedName = String(name || '').trim();\n if (!normalizedName) throw new TypeError('Gauge type name must be a non-empty string.');\n if (!isPlainObject(definition)) throw new TypeError(`Gauge type \"${normalizedName}\" must be an object.`);\n if (!Array.isArray(definition.layers) || definition.layers.length === 0) {\n throw new TypeError(`Gauge type \"${normalizedName}\" must define at least one layer.`);\n }\n\n const normalizedLayers = definition.layers.map((layer, index) => {\n if (!layer || typeof layer.render !== 'function') {\n throw new TypeError(`Layer ${index} in gauge type \"${normalizedName}\" must expose render(context).`);\n }\n return layer;\n });\n\n this._types.set(normalizedName, {\n name: normalizedName,\n defaults: cloneValue(definition.defaults || {}),\n layers: normalizedLayers,\n description: String(definition.description || ''),\n configure: typeof definition.configure === 'function' ? definition.configure : null\n });\n\n return this;\n }\n\n /** Returns a registered gauge type definition. */\n get(name) {\n const definition = this._types.get(String(name));\n if (!definition) throw new Error(`Unknown Gaugeit gauge type: ${name}`);\n return definition;\n }\n\n /** Returns whether a type exists. */\n has(name) {\n return this._types.has(String(name));\n }\n\n /** Returns registered type names. */\n names() {\n return [...this._types.keys()];\n }\n\n /** Returns a serializable description of the registry. */\n describe() {\n return [...this._types.values()].map((definition) => ({\n name: definition.name,\n description: definition.description\n }));\n }\n}\n\nexport const gaugeTypeRegistry = new GaugeTypeRegistry();\n", "import { svgElement } from '../renderer/svg.js';\nimport { resolveFaceBox } from '../geometry/bounds.js';\n\n/** Draws an optional classic instrument face, bezel, shadow, glass, and content clip. */\nexport const faceLayer = {\n id: 'face',\n render(context) {\n const { options, renderer } = context;\n const face = options.face;\n if (!face.visible) return null;\n\n const group = renderer.group('face', { 'aria-hidden': 'true' });\n const box = resolveFaceBox(options, renderer.getContentBounds());\n const shadowId = `${renderer.id}-face-shadow`;\n const glassId = `${renderer.id}-glass`;\n const clipId = `${renderer.id}-face-content-clip`;\n const inset = Math.max(3, face.strokeWidth + 2);\n const innerBox = insetFaceBox(box, inset);\n const defs = svgElement('defs');\n\n if (face.shadow) {\n const filter = svgElement('filter', {\n id: shadowId,\n x: '-20%',\n y: '-20%',\n width: '140%',\n height: '140%'\n });\n filter.append(svgElement('feDropShadow', {\n dx: 0,\n dy: 3,\n stdDeviation: 4,\n 'flood-color': '#000000',\n 'flood-opacity': 0.18\n }));\n defs.append(filter);\n }\n\n if (face.glass) {\n const gradient = svgElement('linearGradient', {\n id: glassId,\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%'\n });\n gradient.append(\n svgElement('stop', { offset: '0%', 'stop-color': '#ffffff', 'stop-opacity': 0.38 }),\n svgElement('stop', { offset: '48%', 'stop-color': '#ffffff', 'stop-opacity': 0.06 }),\n svgElement('stop', { offset: '100%', 'stop-color': '#ffffff', 'stop-opacity': 0 })\n );\n defs.append(gradient);\n }\n\n if (face.clipContent) {\n const clipPath = svgElement('clipPath', {\n id: clipId,\n clipPathUnits: 'userSpaceOnUse'\n });\n clipPath.append(createFaceShape(face, innerBox, {\n fill: '#ffffff',\n stroke: 'none'\n }, Math.max(0, face.cornerRadius - inset)));\n defs.append(clipPath);\n renderer.setContentClipPath(clipId);\n }\n\n if (defs.children.length > 0) group.append(defs);\n\n const base = createFaceShape(face, box, {\n fill: face.color,\n stroke: face.strokeColor,\n 'stroke-width': face.strokeWidth,\n filter: face.shadow ? `url(#${shadowId})` : undefined\n });\n base.classList.add('gaugeit__face');\n group.append(base);\n\n group.append(createFaceShape(face, innerBox, {\n class: 'gaugeit__face-inner',\n fill: 'none',\n stroke: face.innerStrokeColor,\n 'stroke-width': face.innerStrokeWidth\n }, Math.max(0, face.cornerRadius - inset)));\n\n if (face.glass) {\n if (face.shape === 'circle') {\n const radius = Math.min(box.width, box.height) / 2;\n group.append(svgElement('ellipse', {\n class: 'gaugeit__glass',\n cx: box.x + box.width / 2,\n cy: box.y + box.height / 2 - radius * 0.27,\n rx: radius * 0.68,\n ry: radius * 0.32,\n fill: `url(#${glassId})`,\n 'pointer-events': 'none'\n }));\n } else {\n group.append(svgElement('path', {\n class: 'gaugeit__glass',\n d: `M ${box.x + 14} ${box.y + 14} H ${box.x + box.width - 14} `\n + `V ${box.y + box.height * 0.52} Q ${box.x + box.width / 2} ${box.y + box.height * 0.38} `\n + `${box.x + 14} ${box.y + box.height * 0.52} Z`,\n fill: `url(#${glassId})`,\n 'pointer-events': 'none'\n }));\n }\n }\n\n return null;\n }\n};\n\nfunction insetFaceBox(box, inset) {\n return {\n x: box.x + inset,\n y: box.y + inset,\n width: Math.max(1, box.width - inset * 2),\n height: Math.max(1, box.height - inset * 2)\n };\n}\n\nfunction createFaceShape(face, box, attributes = {}, cornerRadius = face.cornerRadius) {\n if (face.shape === 'circle') {\n return svgElement('circle', {\n cx: box.x + box.width / 2,\n cy: box.y + box.height / 2,\n r: Math.max(1, Math.min(box.width, box.height) / 2),\n ...attributes\n });\n }\n\n const radius = Math.max(0, Math.min(cornerRadius, box.width / 2, box.height / 2));\n return svgElement('rect', {\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n rx: radius,\n ry: radius,\n ...attributes\n });\n}\n", "import {\n arcPath,\n polarPoint,\n resolveZoneSegments,\n taperedArcPath,\n valueToAngle\n} from '../geometry/scale.js';\nimport { finiteNumber, isTransparentColor } from '../core/utils.js';\nimport { svgElement } from '../renderer/svg.js';\n\n/** Draws the base arc and value zones. Transparent zones become real visual gaps. */\nexport const zonesLayer = {\n id: 'zones',\n render(context) {\n const { options, renderer } = context;\n const group = renderer.group('zones', { 'aria-hidden': 'true' });\n const segments = resolveZoneSegments(options.min, options.max, options.zones);\n\n if (options.track.showUnderZones && options.track.visible) {\n appendArc(group, options.min, options.max, options.track, 'gaugeit__track');\n }\n\n for (const segment of segments) {\n const style = segment.zone || options.track;\n const shouldDraw = segment.zone\n ? !isTransparentColor(segment.zone.color)\n : options.track.visible && !options.track.showUnderZones;\n\n if (!shouldDraw) continue;\n appendArc(\n group,\n segment.min,\n segment.max,\n style,\n segment.zone ? 'gaugeit__zone' : 'gaugeit__track'\n );\n }\n\n return null;\n\n function appendArc(parent, min, max, style, className) {\n const nodes = createArcNodes(min, max, style, className, options);\n for (const node of nodes) {\n if (style.className) node.classList.add(String(style.className));\n parent.append(node);\n }\n }\n }\n};\n\nfunction createArcNodes(min, max, style, className, options) {\n const geometry = options.geometry;\n const radius = style.radius ?? options.track.radius ?? geometry.radius;\n const fallbackWidth = style.width ?? options.track.width;\n const color = style.color ?? options.track.color;\n const opacity = style.opacity ?? 1;\n const lineCap = style.lineCap || options.track.lineCap || 'butt';\n const startAngle = valueToAngle(min, options);\n const endAngle = valueToAngle(max, options);\n\n if (!style.taper) {\n return [svgElement('path', {\n class: className,\n d: arcPath(geometry.centerX, geometry.centerY, radius, startAngle, endAngle),\n fill: 'none',\n stroke: color,\n 'stroke-width': fallbackWidth,\n 'stroke-linecap': lineCap,\n opacity\n })];\n }\n\n const startWidth = widthAtValue(style, min, fallbackWidth);\n const endWidth = widthAtValue(style, max, fallbackWidth);\n const nodes = [svgElement('path', {\n class: `${className} ${className}--tapered`,\n d: taperedArcPath(\n geometry.centerX,\n geometry.centerY,\n radius,\n startAngle,\n endAngle,\n startWidth,\n endWidth,\n style.taper.segments\n ),\n fill: color,\n stroke: 'none',\n opacity\n })];\n\n if (lineCap === 'round') {\n const start = polarPoint(geometry.centerX, geometry.centerY, radius, startAngle);\n const end = polarPoint(geometry.centerX, geometry.centerY, radius, endAngle);\n const atZoneStart = Math.abs(min - style.min) < 1e-9;\n const atZoneEnd = Math.abs(max - style.max) < 1e-9;\n if (atZoneStart && startWidth > 0) nodes.push(capNode(className, start, startWidth, color, opacity, 'start'));\n if (atZoneEnd && endWidth > 0) nodes.push(capNode(className, end, endWidth, color, opacity, 'end'));\n }\n\n return nodes;\n}\n\nfunction widthAtValue(zone, value, fallbackWidth) {\n const taper = zone.taper || {};\n const startWidth = Math.max(0, finiteNumber(taper.startWidth, fallbackWidth));\n const endWidth = Math.max(0, finiteNumber(taper.endWidth, fallbackWidth));\n const range = Math.max(1e-12, zone.max - zone.min);\n const ratio = Math.min(1, Math.max(0, (value - zone.min) / range));\n return startWidth + (endWidth - startWidth) * ratio;\n}\n\nfunction capNode(className, point, width, color, opacity, edge) {\n return svgElement('circle', {\n class: `${className} ${className}--taper-cap`,\n 'data-gaugeit-zone-cap': edge,\n cx: point.x,\n cy: point.y,\n r: width / 2,\n fill: color,\n opacity\n });\n}\n", "import { buildMinorValues, buildScaleValues, polarPoint, roundSvg, valueToAngle } from '../geometry/scale.js';\nimport { resolveScaleEndpointValues } from '../geometry/bounds.js';\nimport { resolveMajorInterval } from '../core/options.js';\nimport { svgElement } from '../renderer/svg.js';\n\n/** Draws major and minor ticks as two compact SVG paths. */\nexport const ticksLayer = {\n id: 'ticks',\n render(context) {\n const { options, renderer } = context;\n const scale = options.scale;\n if (!scale.major.visible && !scale.minor.visible) return null;\n\n const group = renderer.group('ticks', { 'aria-hidden': 'true' });\n const interval = resolveMajorInterval(options);\n const completeMajorValues = buildScaleValues(options.min, options.max, interval);\n const majorValues = resolveScaleEndpointValues(completeMajorValues, options);\n const minorValues = buildMinorValues(completeMajorValues, scale.minor.subdivisions);\n\n if (scale.minor.visible && scale.minor.length > 0 && scale.minor.width > 0 && minorValues.length) {\n group.append(svgElement('path', {\n class: 'gaugeit__ticks gaugeit__ticks--minor',\n d: tickPath(minorValues, scale.minor.length),\n fill: 'none',\n stroke: scale.minor.color,\n 'stroke-width': scale.minor.width,\n 'stroke-linecap': 'butt',\n opacity: scale.minor.opacity,\n }));\n }\n\n if (scale.major.visible && scale.major.length > 0 && scale.major.width > 0) {\n group.append(svgElement('path', {\n class: 'gaugeit__ticks gaugeit__ticks--major',\n d: tickPath(majorValues, scale.major.length),\n fill: 'none',\n stroke: scale.major.color,\n 'stroke-width': scale.major.width,\n 'stroke-linecap': 'butt',\n opacity: scale.major.opacity,\n }));\n }\n\n renderer.setReference('majorValues', majorValues);\n return null;\n\n function tickPath(values, length) {\n const commands = [];\n for (const value of values) {\n const angle = valueToAngle(value, options);\n const radii = tickRadii(scale.radius, length, scale.position);\n const start = polarPoint(options.geometry.centerX, options.geometry.centerY, radii.start, angle);\n const end = polarPoint(options.geometry.centerX, options.geometry.centerY, radii.end, angle);\n commands.push(`M ${roundSvg(start.x)} ${roundSvg(start.y)} L ${roundSvg(end.x)} ${roundSvg(end.y)}`);\n }\n return commands.join(' ');\n }\n }\n};\n\nfunction tickRadii(radius, length, position) {\n if (position === 'outside') return { start: radius, end: radius + length };\n if (position === 'cross') return { start: radius - length / 2, end: radius + length / 2 };\n return { start: radius, end: radius - length };\n}\n", "import { buildScaleValues, polarPoint, valueToAngle } from '../geometry/scale.js';\nimport { resolveMajorInterval } from '../core/options.js';\nimport { resolveScaleEndpointValues } from '../geometry/bounds.js';\nimport { svgElement } from '../renderer/svg.js';\n\n/** Draws static numeric labels around the scale. */\nexport const labelsLayer = {\n id: 'labels',\n render(context) {\n const { options, renderer } = context;\n const labels = options.labels;\n if (!labels.visible) return null;\n\n const group = renderer.group('labels', { 'aria-hidden': 'true' });\n const interval = Number(labels.interval) > 0 ? Number(labels.interval) : resolveMajorInterval(options);\n const values = resolveScaleEndpointValues(\n buildScaleValues(options.min, options.max, interval),\n options\n );\n\n for (const value of values) {\n const angle = valueToAngle(value, options);\n const point = polarPoint(options.geometry.centerX, options.geometry.centerY, labels.radius, angle);\n const text = svgElement('text', {\n class: 'gaugeit__label',\n x: point.x,\n y: point.y,\n fill: labels.color,\n 'font-family': labels.fontFamily,\n 'font-size': labels.fontSize,\n 'font-weight': labels.fontWeight,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n transform: labelTransform(labels.rotation, angle, point)\n }, formatLabel(value, labels, options));\n group.append(text);\n }\n\n return null;\n }\n};\n\nfunction labelTransform(rotation, angle, point) {\n if (rotation === 'radial') return `rotate(${angle} ${point.x} ${point.y})`;\n if (rotation === 'tangent') return `rotate(${angle + 90} ${point.x} ${point.y})`;\n return undefined;\n}\n\nfunction formatLabel(value, labels, options) {\n if (typeof labels.formatter === 'function') {\n return labels.formatter(value, { min: options.min, max: options.max, options });\n }\n return Number(value).toFixed(labels.fractionDigits);\n}\n", "import { findZoneForValue, valueToAngle } from '../geometry/scale.js';\nimport { isTransparentColor } from '../core/utils.js';\nimport { svgElement, setSvgAttributes } from '../renderer/svg.js';\n\n/** Draws and updates the analog pointer. */\nexport const pointerLayer = {\n id: 'pointer',\n render(context) {\n const { options, renderer } = context;\n const pointer = options.pointer;\n if (!pointer.visible) return null;\n\n const geometry = options.geometry;\n const group = renderer.group('pointer', { 'aria-hidden': 'true' });\n const rotating = svgElement('g', { class: 'gaugeit__pointer-rotating' });\n const shape = createPointerShape(pointer, geometry);\n rotating.append(shape);\n\n let cap = null;\n if (pointer.cap.visible) {\n cap = svgElement('circle', {\n class: 'gaugeit__pointer-cap',\n cx: geometry.centerX,\n cy: geometry.centerY,\n r: pointer.cap.radius,\n fill: pointer.cap.color,\n stroke: pointer.cap.strokeColor,\n 'stroke-width': pointer.cap.strokeWidth,\n });\n }\n appendVisualStack(group, rotating, cap, pointer.cap.stackOrder);\n\n return {\n update(value, state = {}) {\n const pointerValue = Number.isFinite(state.pointerValue) ? state.pointerValue : value;\n const angle = valueToAngle(pointerValue, options, options.overflow !== 'allow');\n rotating.setAttribute('transform', `rotate(${angle} ${geometry.centerX} ${geometry.centerY})`);\n\n if (pointer.colorByZone) {\n const zone = findZoneForValue(pointerValue, options.zones);\n const color = zone && !isTransparentColor(zone.color) ? zone.color : pointer.color;\n if (shape.tagName.toLowerCase() === 'line') shape.setAttribute('stroke', color);\n else shape.setAttribute('fill', color);\n }\n }\n };\n }\n};\n\nfunction appendVisualStack(group, pointer, cap, capStackOrder) {\n if (cap && capStackOrder === 'below') group.append(cap, pointer);\n else if (cap) group.append(pointer, cap);\n else group.append(pointer);\n}\n\nfunction createPointerShape(pointer, geometry) {\n const cx = geometry.centerX;\n const cy = geometry.centerY;\n const front = pointer.length;\n const tail = pointer.tailLength;\n const half = pointer.width / 2;\n const shaft = resolveShaftLength(pointer);\n let shape;\n\n if (pointer.type === 'line') {\n shape = svgElement('line', {\n class: 'gaugeit__pointer gaugeit__pointer--line',\n x1: cx - tail,\n y1: cy,\n x2: cx + front,\n y2: cy,\n stroke: pointer.color,\n 'stroke-width': pointer.width,\n 'stroke-linecap': 'round'\n });\n } else {\n let points;\n if (pointer.type === 'arrow') {\n points = [\n [cx - tail, cy - half * 0.55],\n [cx + shaft, cy - half * 0.55],\n [cx + shaft, cy - half * 1.5],\n [cx + front, cy],\n [cx + shaft, cy + half * 1.5],\n [cx + shaft, cy + half * 0.55],\n [cx - tail, cy + half * 0.55]\n ];\n } else if (pointer.type === 'spear') {\n const shoulder = shaft + (front - shaft) * 0.56;\n points = [\n [cx - tail, cy - half * 0.45],\n [cx + shaft, cy - half * 0.38],\n [cx + shoulder, cy - half * 0.85],\n [cx + front, cy],\n [cx + shoulder, cy + half * 0.85],\n [cx + shaft, cy + half * 0.38],\n [cx - tail, cy + half * 0.45]\n ];\n } else {\n points = [\n [cx - tail, cy - half * 0.65],\n [cx + shaft, cy - half * 0.22],\n [cx + front, cy],\n [cx + shaft, cy + half * 0.22],\n [cx - tail, cy + half * 0.65]\n ];\n }\n\n const path = points.map((point, index) => `${index === 0 ? 'M' : 'L'} ${point[0]} ${point[1]}`).join(' ');\n shape = svgElement('path', {\n class: `gaugeit__pointer gaugeit__pointer--${pointer.type}`,\n d: `${path} Z`,\n fill: pointer.color\n });\n }\n\n setSvgAttributes(shape, {\n opacity: pointer.opacity,\n stroke: pointer.type === 'line' ? pointer.color : pointer.strokeColor,\n 'stroke-width': pointer.type === 'line' ? pointer.width : pointer.strokeWidth,\n });\n return shape;\n}\nfunction resolveShaftLength(pointer) {\n if (Number.isFinite(pointer.shaftLength)) return Math.min(pointer.length, Math.max(0, pointer.shaftLength));\n if (pointer.type === 'arrow') return pointer.length * 0.70;\n if (pointer.type === 'spear') return pointer.length * 0.68;\n return pointer.length * 0.86;\n}\n", "import { svgElement } from '../renderer/svg.js';\nimport { resolveReadoutPosition } from '../geometry/bounds.js';\n\n/** Draws title, value, and unit text; only the value node changes during animation. */\nexport const readoutLayer = {\n id: 'readout',\n render(context) {\n const { options, renderer } = context;\n const readout = options.readout;\n if (!readout.visible) return null;\n\n const group = renderer.group('readout');\n if (readout.title.visible && readout.title.text) {\n group.append(textNode('title', readout.title, readout.title.text, options));\n }\n\n let valueNode = null;\n const valueFormatter = createValueFormatter(readout.value, options);\n if (readout.value.visible) {\n valueNode = textNode('value', readout.value, '', options);\n valueNode.setAttribute('aria-hidden', 'true');\n group.append(valueNode);\n }\n\n if (readout.unit.visible && readout.unit.text) {\n group.append(textNode('unit', readout.unit, readout.unit.text, options));\n }\n\n return {\n update(value) {\n if (valueNode) valueNode.textContent = valueFormatter(value);\n }\n };\n }\n};\n\nfunction textNode(kind, config, value, options) {\n const position = resolveReadoutPosition(config, options);\n return svgElement('text', {\n class: `gaugeit__readout gaugeit__readout--${kind}`,\n x: position.x,\n y: position.y,\n fill: config.color,\n 'font-family': config.fontFamily,\n 'font-size': config.fontSize,\n 'font-weight': config.fontWeight,\n 'letter-spacing': config.letterSpacing,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle'\n }, value);\n}\n\nfunction createValueFormatter(config, options) {\n if (typeof config.formatter === 'function') {\n return (value) => String(config.formatter(value, { min: options.min, max: options.max, options }));\n }\n\n const formatter = new Intl.NumberFormat(config.locale, {\n minimumFractionDigits: config.fractionDigits,\n maximumFractionDigits: config.fractionDigits\n });\n return (value) => `${config.prefix || ''}${formatter.format(value)}${config.suffix || ''}`;\n}\n", "import { lightIsActive, resolveLightPosition } from '../geometry/light.js';\nimport { svgElement } from '../renderer/svg.js';\n\nconst LIGHT_PALETTES = Object.freeze({\n red: { core: '#ef4444', highlight: '#fecaca', glow: '#f87171', rim: '#7f1d1d' },\n green: { core: '#22c55e', highlight: '#bbf7d0', glow: '#4ade80', rim: '#14532d' },\n blue: { core: '#3b82f6', highlight: '#bfdbfe', glow: '#60a5fa', rim: '#1e3a8a' },\n amber: { core: '#f59e0b', highlight: '#fde68a', glow: '#fb923c', rim: '#92400e' },\n yellow: { core: '#fde047', highlight: '#fef9c3', glow: '#facc15', rim: '#a16207' },\n orange: { core: '#f97316', highlight: '#fed7aa', glow: '#fb923c', rim: '#9a3412' },\n white: { core: '#f8fafc', highlight: '#ffffff', glow: '#e2e8f0', rim: '#64748b' },\n halogen: { core: '#fff2bf', highlight: '#fffdf0', glow: '#ffe79a', rim: '#9a7b24' },\n cyan: { core: '#22d3ee', highlight: '#cffafe', glow: '#67e8f9', rim: '#155e75' },\n brown: { core: '#a16207', highlight: '#f5d0a1', glow: '#d6a56b', rim: '#5b3b10' }\n});\n\n/** Draws an optional realistic SVG annunciator lamp. */\nexport const lightLayer = {\n id: 'light',\n render({ options, renderer }) {\n const light = options.light;\n if (!light?.visible) return null;\n\n const { x, y } = resolveLightPosition(light, options);\n const palette = resolvePalette(light);\n const colorName = Object.prototype.hasOwnProperty.call(LIGHT_PALETTES, light.color) ? light.color : 'amber';\n const glowFilterId = `${renderer.id}-light-glow`;\n const onGradientId = `${renderer.id}-light-on`;\n const offGradientId = `${renderer.id}-light-off`;\n const bezelGradientId = `${renderer.id}-light-bezel`;\n\n const defs = svgElement('defs');\n defs.append(\n createGlowFilter(glowFilterId, light.radius),\n createBulbGradient(onGradientId, {\n center: '#ffffff',\n highlight: palette.highlight,\n middle: palette.core,\n edge: palette.rim\n }),\n createBulbGradient(offGradientId, {\n center: '#fffdf7',\n highlight: light.offColor,\n middle: light.offColor,\n edge: light.offEdgeColor\n }),\n createBezelGradient(bezelGradientId, light)\n );\n\n const group = renderer.group('light', { 'aria-hidden': 'true' });\n group.append(defs);\n\n const lamp = svgElement('g', {\n class: `gaugeit__light gaugeit__light--${colorName}`,\n transform: `translate(${x} ${y})`,\n 'data-gaugeit-light-color': colorName,\n 'data-gaugeit-light-state': 'off'\n });\n lamp.style.setProperty('--gaugeit-light-blink-duration', `${light.blinkInterval}ms`);\n lamp.style.setProperty('--gaugeit-light-pulse-duration', `${light.pulseInterval}ms`);\n lamp.style.setProperty('--gaugeit-light-opacity', String(light.opacity));\n\n const bezel = svgElement('circle', {\n class: 'gaugeit__light-bezel',\n cx: 0,\n cy: 0,\n r: light.radius + Math.max(1.8, light.radius * 0.2),\n fill: `url(#${bezelGradientId})`\n });\n\n const bezelHighlight = svgElement('circle', {\n class: 'gaugeit__light-bezel-highlight',\n cx: 0,\n cy: 0,\n r: light.radius + Math.max(0.75, light.radius * 0.08),\n fill: 'none',\n stroke: light.bezelHighlightColor,\n 'stroke-width': Math.max(0.55, light.radius * 0.075),\n 'stroke-opacity': 0.65\n });\n\n // The off and on appearances are separate stacked SVG groups. During a blink,\n // CSS alternates between them instead of fading the whole lamp to transparency.\n const offVisual = createLampVisual({\n state: 'off',\n radius: light.radius,\n gradientId: offGradientId,\n edgeColor: light.offEdgeColor,\n glowColor: null,\n glowFilterId: null,\n sparkleOpacity: 0.58,\n shadeOpacity: 0.14\n });\n\n const onVisual = createLampVisual({\n state: 'on',\n radius: light.radius,\n gradientId: onGradientId,\n edgeColor: palette.rim,\n glowColor: palette.glow,\n glowFilterId,\n sparkleOpacity: 0.72,\n shadeOpacity: 0.1\n });\n\n lamp.append(bezel, bezelHighlight, offVisual, onVisual);\n group.append(lamp);\n\n return {\n update(value, state = {}) {\n const sample = resolveTriggerSample(light.trigger?.source, value, state);\n const active = lightIsActive(light, sample);\n const blinking = active && light.blink;\n const pulsing = active && light.pulse && !blinking;\n\n lamp.classList.toggle('is-on', active);\n lamp.classList.toggle('is-blinking', blinking);\n lamp.classList.toggle('is-pulsing', pulsing);\n lamp.classList.toggle('has-glow', light.glow);\n lamp.setAttribute('data-gaugeit-light-state', active ? 'on' : 'off');\n }\n };\n }\n};\n\nfunction createLampVisual({\n state,\n radius,\n gradientId,\n edgeColor,\n glowColor,\n glowFilterId,\n sparkleOpacity,\n shadeOpacity\n}) {\n const visual = svgElement('g', {\n class: `gaugeit__light-emission gaugeit__light-emission--${state}`,\n 'data-gaugeit-light-visual': state\n });\n\n if (glowColor && glowFilterId) {\n visual.append(svgElement('circle', {\n class: 'gaugeit__light-glow',\n cx: 0,\n cy: 0,\n r: radius * 1.82,\n fill: glowColor,\n filter: `url(#${glowFilterId})`\n }));\n }\n\n visual.append(\n svgElement('circle', {\n class: `gaugeit__light-bulb gaugeit__light-bulb--${state}`,\n cx: 0,\n cy: 0,\n r: radius,\n fill: `url(#${gradientId})`,\n stroke: edgeColor,\n 'stroke-width': Math.max(0.8, radius * 0.13)\n }),\n svgElement('path', {\n class: `gaugeit__light-lens-shade gaugeit__light-lens-shade--${state}`,\n d: lowerLensShadePath(radius),\n fill: edgeColor,\n opacity: shadeOpacity\n }),\n svgElement('ellipse', {\n class: `gaugeit__light-sparkle gaugeit__light-sparkle--${state}`,\n cx: -radius * 0.29,\n cy: -radius * 0.35,\n rx: Math.max(0.8, radius * 0.36),\n ry: Math.max(0.6, radius * 0.2),\n fill: '#ffffff',\n opacity: sparkleOpacity\n })\n );\n\n return visual;\n}\n\nfunction resolvePalette(light) {\n const named = LIGHT_PALETTES[light.color] || LIGHT_PALETTES.amber;\n const custom = String(light.customColor || '').trim();\n if (!custom) return named;\n return {\n core: custom,\n highlight: '#ffffff',\n glow: custom,\n rim: custom\n };\n}\n\nfunction createGlowFilter(id, radius) {\n const filter = svgElement('filter', {\n id,\n x: '-120%',\n y: '-120%',\n width: '340%',\n height: '340%'\n });\n filter.append(svgElement('feGaussianBlur', {\n stdDeviation: Math.max(1.4, radius * 0.38)\n }));\n return filter;\n}\n\nfunction createBulbGradient(id, colors) {\n const gradient = svgElement('radialGradient', {\n id,\n cx: '31%',\n cy: '27%',\n r: '74%'\n });\n gradient.append(\n svgElement('stop', { offset: '0%', 'stop-color': colors.center, 'stop-opacity': 0.98 }),\n svgElement('stop', { offset: '23%', 'stop-color': colors.highlight, 'stop-opacity': 0.96 }),\n svgElement('stop', { offset: '62%', 'stop-color': colors.middle, 'stop-opacity': 1 }),\n svgElement('stop', { offset: '100%', 'stop-color': colors.edge, 'stop-opacity': 1 })\n );\n return gradient;\n}\n\nfunction createBezelGradient(id, light) {\n const gradient = svgElement('linearGradient', {\n id,\n x1: '0%',\n y1: '0%',\n x2: '100%',\n y2: '100%'\n });\n gradient.append(\n svgElement('stop', { offset: '0%', 'stop-color': light.bezelHighlightColor, 'stop-opacity': 0.92 }),\n svgElement('stop', { offset: '34%', 'stop-color': light.bezelColor, 'stop-opacity': 0.9 }),\n svgElement('stop', { offset: '72%', 'stop-color': light.bezelColor, 'stop-opacity': 1 }),\n svgElement('stop', { offset: '100%', 'stop-color': '#1f2937', 'stop-opacity': 0.92 })\n );\n return gradient;\n}\n\nfunction lowerLensShadePath(radius) {\n const r = Math.max(1, radius);\n return [\n `M ${-r * 0.86} ${r * 0.42}`,\n `A ${r} ${r} 0 0 0 ${r * 0.86} ${r * 0.42}`,\n `A ${r} ${r} 0 0 1 ${-r * 0.86} ${r * 0.42}`,\n 'Z'\n ].join(' ');\n}\n\nfunction resolveTriggerSample(source, displayedValue, state) {\n if (source === 'pointer' && Number.isFinite(state.pointerValue)) return state.pointerValue;\n if (source === 'displayed') return displayedValue;\n if (Number.isFinite(state.targetValue)) return state.targetValue;\n return displayedValue;\n}\n", "import { faceLayer } from '../layers/face.js';\nimport { zonesLayer } from '../layers/zones.js';\nimport { ticksLayer } from '../layers/ticks.js';\nimport { labelsLayer } from '../layers/labels.js';\nimport { pointerLayer } from '../layers/pointer.js';\nimport { readoutLayer } from '../layers/readout.js';\nimport { lightLayer } from '../layers/light.js';\n\n/** Minimal semicircular arc gauge with configurable colored sectors. */\nexport const arcGaugeType = {\n description: 'A lightweight semicircular arc with zones, labels, and an animated pointer.',\n defaults: {\n geometry: {\n width: 320,\n height: 220,\n centerX: 160,\n centerY: 176,\n radius: 120,\n startAngle: 180,\n endAngle: 360\n },\n face: { visible: false },\n track: {\n visible: true,\n color: '#e5e7eb',\n width: 28,\n radius: 112,\n lineCap: 'butt'\n },\n scale: {\n radius: 112,\n position: 'inside',\n major: { visible: false },\n minor: { visible: false }\n },\n labels: {\n visible: true,\n radius: 82,\n fontSize: 11,\n fontWeight: 600\n },\n pointer: {\n type: 'needle',\n length: 91,\n tailLength: 12,\n width: 8,\n cap: { radius: 7, stackOrder: 'above' }\n },\n light: {\n visible: false,\n x: 160,\n y: 142,\n radius: 7,\n color: 'amber'\n },\n readout: {\n title: { visible: false, x: 'auto', y: 35 },\n value: { visible: false, x: 160, y: 130, fontSize: 30 },\n unit: { visible: false, x: 160, y: 150 }\n }\n },\n // SVG paint order: readout first, pointer above it, cap above the pointer.\n layers: [faceLayer, zonesLayer, ticksLayer, labelsLayer, lightLayer, readoutLayer, pointerLayer]\n};\n", "import { faceLayer } from '../layers/face.js';\nimport { zonesLayer } from '../layers/zones.js';\nimport { ticksLayer } from '../layers/ticks.js';\nimport { labelsLayer } from '../layers/labels.js';\nimport { pointerLayer } from '../layers/pointer.js';\nimport { readoutLayer } from '../layers/readout.js';\nimport { lightLayer } from '../layers/light.js';\n\n/** White, framed old-style instrument gauge with a traditional needle. */\nexport const classicGaugeType = {\n description: 'A framed white analog instrument inspired by vintage electrical and pressure meters.',\n defaults: {\n layout: {\n includeGeometry: false\n },\n geometry: {\n width: 320,\n height: 260,\n centerX: 160,\n centerY: 183,\n radius: 124,\n startAngle: 195,\n endAngle: 345\n },\n face: {\n visible: true,\n shape: 'panel',\n fit: 'content',\n clipContent: true,\n x: 7,\n y: 7,\n width: 306,\n height: 246,\n cornerRadius: 20,\n color: '#fffef8',\n strokeColor: '#4b5563',\n strokeWidth: 3,\n innerStrokeColor: '#d1d5db',\n innerStrokeWidth: 1.2,\n shadow: true,\n glass: true\n },\n track: {\n visible: false,\n width: 8,\n radius: 119\n },\n scale: {\n radius: 119,\n position: 'inside',\n major: {\n visible: true,\n divisions: 5,\n length: 17,\n width: 2.4,\n color: '#111827'\n },\n minor: {\n visible: true,\n subdivisions: 4,\n length: 9,\n width: 1,\n color: '#4b5563'\n }\n },\n labels: {\n visible: true,\n radius: 89,\n fontSize: 12,\n fontWeight: 650\n },\n pointer: {\n type: 'spear',\n length: 99,\n tailLength: 15,\n width: 9,\n color: '#111827',\n cap: {\n visible: true,\n stackOrder: 'above',\n radius: 10,\n color: '#20242a',\n strokeColor: '#d1d5db',\n strokeWidth: 2\n }\n },\n light: {\n visible: false,\n x: 112,\n y: 112,\n radius: 8,\n color: 'amber'\n },\n readout: {\n title: {\n visible: true,\n text: 'ANALOG',\n x: 'auto',\n y: 'auto',\n position: 'top',\n margin: 12,\n offsetY: 18,\n fontSize: 13,\n letterSpacing: 1.6\n },\n value: {\n visible: false,\n x: 160,\n y: 224,\n fontSize: 24,\n fontWeight: 750\n },\n unit: {\n visible: false,\n x: 160,\n y: 242,\n fontSize: 10\n }\n }\n },\n // SVG paint order: readout first, pointer above it, cap above the pointer.\n layers: [faceLayer, zonesLayer, ticksLayer, labelsLayer, lightLayer, readoutLayer, pointerLayer]\n};\n", "import { faceLayer } from '../layers/face.js';\nimport { zonesLayer } from '../layers/zones.js';\nimport { ticksLayer } from '../layers/ticks.js';\nimport { labelsLayer } from '../layers/labels.js';\nimport { pointerLayer } from '../layers/pointer.js';\nimport { readoutLayer } from '../layers/readout.js';\nimport { lightLayer } from '../layers/light.js';\n\n/** Tick-focused gauge for highly configurable major and minor line scales. */\nexport const lineScaleGaugeType = {\n description: 'A dense line-scale gauge with independently configurable major and minor ticks.',\n defaults: {\n geometry: {\n width: 320,\n height: 225,\n centerX: 160,\n centerY: 184,\n radius: 127,\n startAngle: 180,\n endAngle: 360\n },\n face: { visible: false },\n track: {\n visible: true,\n color: '#cbd5e1',\n width: 2,\n radius: 126,\n lineCap: 'round'\n },\n scale: {\n radius: 124,\n position: 'inside',\n major: {\n visible: true,\n divisions: 8,\n length: 23,\n width: 2.4,\n color: '#0f172a'\n },\n minor: {\n visible: true,\n subdivisions: 4,\n length: 11,\n width: 1,\n color: '#475569'\n }\n },\n labels: {\n visible: true,\n radius: 88,\n fontSize: 10,\n fontWeight: 650\n },\n pointer: {\n type: 'line',\n length: 101,\n tailLength: 10,\n width: 4,\n color: '#b91c1c',\n cap: {\n visible: true,\n stackOrder: 'above',\n radius: 7,\n color: '#b91c1c',\n strokeColor: '#ffffff',\n strokeWidth: 2\n }\n },\n light: {\n visible: false,\n x: 160,\n y: 151,\n radius: 7,\n color: 'amber'\n },\n readout: {\n title: { visible: false, x: 'auto', y: 140 },\n value: { visible: false, x: 160, y: 220, fontSize: 33 },\n unit: { visible: false, x: 160, y: 240 }\n }\n },\n // SVG paint order: readout first, pointer above it, cap above the pointer.\n layers: [faceLayer, zonesLayer, ticksLayer, labelsLayer, lightLayer, readoutLayer, pointerLayer]\n};\n", "import { faceLayer } from '../layers/face.js';\nimport { zonesLayer } from '../layers/zones.js';\nimport { ticksLayer } from '../layers/ticks.js';\nimport { labelsLayer } from '../layers/labels.js';\nimport { pointerLayer } from '../layers/pointer.js';\nimport { readoutLayer } from '../layers/readout.js';\nimport { lightLayer } from '../layers/light.js';\n\n/** Circular vintage instrument preset built from the same reusable classic layers. */\nexport const heritageRoundGaugeType = {\n description: 'A circular, glass-fronted vintage instrument with a 270-degree scale.',\n defaults: {\n geometry: {\n width: 320,\n height: 320,\n centerX: 160,\n centerY: 160,\n radius: 132,\n startAngle: 225,\n endAngle: 495\n },\n face: {\n visible: true,\n shape: 'circle',\n fit: 'geometry',\n clipContent: true,\n x: 8,\n y: 8,\n width: 304,\n height: 304,\n cornerRadius: 0,\n color: '#fffdf5',\n strokeColor: '#374151',\n strokeWidth: 4,\n innerStrokeColor: '#c7bfae',\n innerStrokeWidth: 1.4,\n shadow: true,\n glass: true\n },\n track: {\n visible: false,\n width: 7,\n radius: 124\n },\n scale: {\n endpointMode: 'auto',\n radius: 124,\n position: 'inside',\n major: {\n visible: true,\n divisions: 9,\n length: 18,\n width: 2.6,\n color: '#171717'\n },\n minor: {\n visible: true,\n subdivisions: 4,\n length: 9,\n width: 1,\n color: '#57534e'\n }\n },\n labels: {\n visible: true,\n radius: 92,\n fontSize: 11,\n fontWeight: 700\n },\n pointer: {\n type: 'spear',\n length: 104,\n tailLength: 18,\n width: 9,\n color: '#7f1d1d',\n cap: {\n visible: true,\n stackOrder: 'above',\n radius: 11,\n color: '#292524',\n strokeColor: '#d6d3d1',\n strokeWidth: 2\n }\n },\n light: {\n visible: false,\n x: 108,\n y: 110,\n radius: 10,\n color: 'amber',\n blink: false,\n blinkInterval: 1000,\n trigger: { mode: 'below', source: 'target', value: 15, min: 0, max: 15 }\n },\n readout: {\n title: {\n visible: true,\n text: 'HERITAGE',\n x: 'auto',\n y: 'auto',\n position: 'top',\n margin: 14,\n offsetY: 85,\n fontSize: 13,\n letterSpacing: 1.8\n },\n value: {\n visible: false,\n x: 'auto',\n y: 224,\n fontSize: 25,\n fontWeight: 750\n },\n unit: {\n visible: false,\n x: 'auto',\n y: 244,\n fontSize: 10\n }\n }\n },\n // SVG paint order: readout first, pointer above it, cap above the pointer.\n layers: [faceLayer, zonesLayer, ticksLayer, labelsLayer, lightLayer, readoutLayer, pointerLayer]\n};\n", "import { resolveZoneSegments } from '../geometry/scale.js';\nimport {\n linearAxis,\n linearNormalOffset,\n offsetLinearPoint,\n valueToLinearPoint\n} from '../geometry/linear.js';\nimport { isTransparentColor } from '../core/utils.js';\nimport { svgElement } from '../renderer/svg.js';\n\n/** Draws the track and value zones along a straight two-dimensional axis. */\nexport const linearZonesLayer = {\n id: 'linear-zones',\n render(context) {\n const { options, renderer } = context;\n const group = renderer.group('linear-zones', { 'aria-hidden': 'true' });\n const segments = resolveZoneSegments(options.min, options.max, options.zones);\n\n if (options.track.showUnderZones && options.track.visible) {\n group.append(createSegment(options.min, options.max, options.track, 'gaugeit__track'));\n }\n\n for (const segment of segments) {\n const style = segment.zone || options.track;\n const shouldDraw = segment.zone\n ? !isTransparentColor(segment.zone.color)\n : options.track.visible && !options.track.showUnderZones;\n\n if (!shouldDraw) continue;\n const className = segment.zone ? 'gaugeit__zone' : 'gaugeit__track';\n const line = createSegment(segment.min, segment.max, style, className);\n if (segment.zone && segment.zone.className) line.classList.add(String(segment.zone.className));\n group.append(line);\n }\n\n return null;\n\n function createSegment(min, max, style, className) {\n const axis = linearAxis(options);\n const offset = linearNormalOffset(style.offset ?? options.linear.zoneOffset);\n const start = offsetLinearPoint(valueToLinearPoint(min, options), axis, offset);\n const end = offsetLinearPoint(valueToLinearPoint(max, options), axis, offset);\n return svgElement('line', {\n class: className,\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n stroke: style.color ?? options.track.color,\n 'stroke-width': style.width ?? options.track.width,\n 'stroke-linecap': style.lineCap || options.track.lineCap || 'butt',\n opacity: style.opacity ?? 1\n });\n }\n }\n};\n", "import { buildMinorValues, buildScaleValues, roundSvg } from '../geometry/scale.js';\nimport { linearAxis, linearNormalSpan, offsetLinearPoint, valueToLinearPoint } from '../geometry/linear.js';\nimport { resolveMajorInterval } from '../core/options.js';\nimport { svgElement } from '../renderer/svg.js';\n\n/** Draws compact major and minor tick paths along a straight scale. */\nexport const linearTicksLayer = {\n id: 'linear-ticks',\n render(context) {\n const { options, renderer } = context;\n const scale = options.scale;\n if (!scale.major.visible && !scale.minor.visible) return null;\n\n const group = renderer.group('linear-ticks', { 'aria-hidden': 'true' });\n const interval = resolveMajorInterval(options);\n const majorValues = buildScaleValues(options.min, options.max, interval);\n const minorValues = buildMinorValues(majorValues, scale.minor.subdivisions);\n\n if (scale.minor.visible && scale.minor.length > 0 && scale.minor.width > 0 && minorValues.length) {\n group.append(svgElement('path', {\n class: 'gaugeit__ticks gaugeit__ticks--minor gaugeit__linear-ticks',\n d: tickPath(minorValues, scale.minor.length),\n fill: 'none',\n stroke: scale.minor.color,\n 'stroke-width': scale.minor.width,\n 'stroke-linecap': 'butt',\n opacity: scale.minor.opacity\n }));\n }\n\n if (scale.major.visible && scale.major.length > 0 && scale.major.width > 0) {\n group.append(svgElement('path', {\n class: 'gaugeit__ticks gaugeit__ticks--major gaugeit__linear-ticks',\n d: tickPath(majorValues, scale.major.length),\n fill: 'none',\n stroke: scale.major.color,\n 'stroke-width': scale.major.width,\n 'stroke-linecap': 'butt',\n opacity: scale.major.opacity\n }));\n }\n\n renderer.setReference('majorValues', majorValues);\n return null;\n\n function tickPath(values, length) {\n const axis = linearAxis(options);\n const span = linearNormalSpan(length, options.linear.tickSide);\n const commands = [];\n for (const value of values) {\n const point = valueToLinearPoint(value, options);\n const start = offsetLinearPoint(point, axis, span.start);\n const end = offsetLinearPoint(point, axis, span.end);\n commands.push(`M ${roundSvg(start.x)} ${roundSvg(start.y)} L ${roundSvg(end.x)} ${roundSvg(end.y)}`);\n }\n return commands.join(' ');\n }\n }\n};\n", "import { buildScaleValues } from '../geometry/scale.js';\nimport {\n linearAxis,\n linearNormalOffset,\n offsetLinearPoint,\n valueToLinearPoint\n} from '../geometry/linear.js';\nimport { resolveMajorInterval } from '../core/options.js';\nimport { svgElement } from '../renderer/svg.js';\n\n/** Draws numeric labels along a straight scale. */\nexport const linearLabelsLayer = {\n id: 'linear-labels',\n render(context) {\n const { options, renderer } = context;\n const labels = options.labels;\n if (!labels.visible) return null;\n\n const group = renderer.group('linear-labels', { 'aria-hidden': 'true' });\n const interval = Number(labels.interval) > 0 ? Number(labels.interval) : resolveMajorInterval(options);\n const values = buildScaleValues(options.min, options.max, interval);\n const axis = linearAxis(options);\n\n for (const value of values) {\n const point = offsetLinearPoint(\n valueToLinearPoint(value, options),\n axis,\n linearNormalOffset(options.linear.labelOffset)\n );\n const text = svgElement('text', {\n class: 'gaugeit__label gaugeit__linear-label',\n x: point.x,\n y: point.y,\n fill: labels.color,\n 'font-family': labels.fontFamily,\n 'font-size': labels.fontSize,\n 'font-weight': labels.fontWeight,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n transform: labelTransform(labels.rotation, axis.angle, point)\n }, formatLabel(value, labels, options));\n group.append(text);\n }\n\n return null;\n }\n};\n\nfunction labelTransform(rotation, axisAngle, point) {\n if (rotation === 'radial') return `rotate(${axisAngle + 90} ${point.x} ${point.y})`;\n if (rotation === 'tangent') return `rotate(${axisAngle} ${point.x} ${point.y})`;\n return undefined;\n}\n\nfunction formatLabel(value, labels, options) {\n if (typeof labels.formatter === 'function') {\n return labels.formatter(value, { min: options.min, max: options.max, options });\n }\n return Number(value).toFixed(labels.fractionDigits);\n}\n", "import { findZoneForValue } from '../geometry/scale.js';\nimport {\n linearAxis,\n linearIndicatorNormalOffset,\n linearNormalSpan,\n valueToLinearPoint\n} from '../geometry/linear.js';\nimport { isTransparentColor } from '../core/utils.js';\nimport { setSvgAttributes, svgElement } from '../renderer/svg.js';\n\n/** Draws and updates a straight hairline, marker, or carriage indicator. */\nexport const linearIndicatorLayer = {\n id: 'linear-indicator',\n render(context) {\n const { options, renderer } = context;\n const indicator = options.indicator;\n if (!indicator.visible) return null;\n\n const axis = linearAxis(options);\n const normalOffset = linearIndicatorNormalOffset(indicator);\n const group = renderer.group('linear-indicator', { 'aria-hidden': 'true' });\n const moving = svgElement('g', {\n class: 'gaugeit__linear-indicator-moving'\n });\n const shape = createIndicatorShape(indicator, normalOffset);\n moving.append(shape);\n\n let cap = null;\n if (indicator.cap.visible) {\n cap = svgElement('circle', {\n class: 'gaugeit__linear-indicator-cap',\n cx: 0,\n cy: normalOffset,\n r: indicator.cap.radius,\n fill: indicator.cap.color,\n stroke: indicator.cap.strokeColor,\n 'stroke-width': indicator.cap.strokeWidth\n });\n if (indicator.cap.stackOrder === 'below') moving.prepend(cap);\n else moving.append(cap);\n }\n\n group.append(moving);\n\n return {\n update(value, state = {}) {\n const visualValue = Number.isFinite(state.pointerValue) ? state.pointerValue : value;\n const point = valueToLinearPoint(visualValue, options, options.overflow !== 'allow');\n moving.setAttribute('transform', `translate(${point.x} ${point.y}) rotate(${axis.angle})`);\n\n if (indicator.colorByZone) {\n const zone = findZoneForValue(visualValue, options.zones);\n const color = zone && !isTransparentColor(zone.color) ? zone.color : indicator.color;\n setIndicatorColor(shape, indicator, color);\n }\n }\n };\n }\n};\n\nfunction createIndicatorShape(indicator, normalOffset) {\n const span = linearNormalSpan(indicator.length, indicator.position, normalOffset);\n let shape;\n\n if (indicator.type === 'marker') {\n const direction = markerDirection(indicator.position);\n if (direction === 0) {\n const size = indicator.markerSize;\n const centerY = normalOffset;\n shape = svgElement('path', {\n class: 'gaugeit__linear-indicator gaugeit__linear-indicator--marker',\n d: `M 0 ${centerY - size} L ${size * 0.72} ${centerY} L 0 ${centerY + size} L ${-size * 0.72} ${centerY} Z`,\n fill: indicator.color\n });\n } else {\n const tipY = normalOffset;\n const baseY = tipY + direction * indicator.markerSize;\n const halfWidth = indicator.markerSize * 0.72;\n shape = svgElement('path', {\n class: 'gaugeit__linear-indicator gaugeit__linear-indicator--marker',\n d: `M 0 ${tipY} L ${halfWidth} ${baseY} L ${-halfWidth} ${baseY} Z`,\n fill: indicator.color\n });\n }\n } else if (indicator.type === 'carriage') {\n const y = Math.min(span.start, span.end);\n shape = svgElement('rect', {\n class: 'gaugeit__linear-indicator gaugeit__linear-indicator--carriage',\n x: -indicator.carriageWidth / 2,\n y,\n width: indicator.carriageWidth,\n height: Math.max(1, Math.abs(span.end - span.start)),\n rx: indicator.carriageRadius,\n ry: indicator.carriageRadius,\n fill: indicator.color\n });\n } else {\n shape = svgElement('line', {\n class: 'gaugeit__linear-indicator gaugeit__linear-indicator--hairline',\n x1: 0,\n y1: span.start,\n x2: 0,\n y2: span.end,\n stroke: indicator.color,\n 'stroke-width': indicator.width,\n 'stroke-linecap': indicator.lineCap\n });\n }\n\n setSvgAttributes(shape, {\n opacity: indicator.opacity,\n stroke: indicator.type === 'hairline' ? indicator.color : indicator.strokeColor,\n 'stroke-width': indicator.type === 'hairline' ? indicator.width : indicator.strokeWidth\n });\n return shape;\n}\n\nfunction markerDirection(position) {\n if (position === 'negative') return -1;\n if (position === 'positive') return 1;\n return 0;\n}\n\nfunction setIndicatorColor(shape, indicator, color) {\n if (indicator.type === 'hairline') shape.setAttribute('stroke', color);\n else shape.setAttribute('fill', color);\n}\n", "import { finiteNumber, isPlainObject } from '../core/utils.js';\n\n/**\n * Resolves an optional intrinsic aspect ratio before a type-specific resize pass.\n * CSS controls the rendered host size; geometry width and height control the\n * instrument's internal design ratio.\n */\nexport function resolveIntrinsicGeometrySize(options, context) {\n const requestedGeometry = isPlainObject(context.requested?.geometry)\n ? context.requested.geometry\n : {};\n const typeGeometry = context.typeDefaults?.geometry || {};\n const widthExplicit = hasOwn(requestedGeometry, 'width');\n const heightExplicit = hasOwn(requestedGeometry, 'height');\n const ratioExplicit = hasOwn(requestedGeometry, 'aspectRatio');\n const ratio = finiteNumber(requestedGeometry.aspectRatio, 0);\n\n if (ratioExplicit && ratio > 0) {\n if (widthExplicit && !heightExplicit) options.geometry.height = options.geometry.width / ratio;\n else if (heightExplicit && !widthExplicit) options.geometry.width = options.geometry.height * ratio;\n else if (!widthExplicit && !heightExplicit) {\n const baseWidth = finiteNumber(typeGeometry.width, options.geometry.width);\n options.geometry.width = baseWidth;\n options.geometry.height = baseWidth / ratio;\n }\n }\n\n options.geometry.aspectRatio = ratioExplicit && ratio > 0 ? ratio : null;\n return {\n requestedGeometry,\n widthExplicit: widthExplicit || (ratioExplicit && ratio > 0 && !heightExplicit),\n heightExplicit: heightExplicit || (ratioExplicit && ratio > 0),\n baseWidth: Math.max(1, finiteNumber(typeGeometry.width, options.geometry.width)),\n baseHeight: Math.max(1, finiteNumber(typeGeometry.height, options.geometry.height))\n };\n}\n\n/** Resizes a classic linear preset while preserving explicitly supplied coordinates. */\nexport function configureClassicLinearSize(options, context) {\n const sizing = resolveIntrinsicGeometrySize(options, context);\n if (!sizing.widthExplicit && !sizing.heightExplicit) return options;\n\n const scaleX = options.geometry.width / sizing.baseWidth;\n const scaleY = options.geometry.height / sizing.baseHeight;\n const uniform = Math.min(scaleX, scaleY);\n\n scalePaths(options, context, scaleX, [\n 'geometry.centerX',\n 'face.x', 'face.width', 'face.minWidth',\n 'linear.startX', 'linear.endX',\n 'readout.title.x', 'readout.value.x', 'readout.unit.x'\n ]);\n scalePaths(options, context, scaleY, [\n 'geometry.centerY',\n 'face.y', 'face.height', 'face.minHeight',\n 'linear.originY', 'linear.startY', 'linear.endY',\n 'linear.labelOffset', 'linear.zoneOffset',\n 'scale.major.length', 'scale.minor.length',\n 'indicator.length', 'indicator.centerOffset', 'indicator.markerSize',\n 'indicator.carriageWidth', 'indicator.carriageRadius',\n 'indicator.cap.radius',\n 'centerZero.marker.length', 'centerZero.marker.centerOffset',\n 'readout.title.y', 'readout.value.y', 'readout.unit.y'\n ]);\n scalePaths(options, context, uniform, [\n 'face.contentPadding', 'face.cornerRadius'\n ]);\n return options;\n}\n\n/** Resizes a rolling tape preset without stretching text or stroke widths. */\nexport function configureRollingTapeSize(options, context) {\n const sizing = resolveIntrinsicGeometrySize(options, context);\n if (!sizing.widthExplicit && !sizing.heightExplicit) return options;\n\n const scaleX = options.geometry.width / sizing.baseWidth;\n const scaleY = options.geometry.height / sizing.baseHeight;\n const uniform = Math.min(scaleX, scaleY);\n const vertical = options.tape.orientation !== 'horizontal';\n\n scalePaths(options, context, scaleX, [\n 'geometry.centerX',\n 'face.x', 'face.width', 'face.minWidth',\n 'tape.x', 'tape.width',\n 'readout.title.x', 'readout.value.x', 'readout.unit.x'\n ]);\n scalePaths(options, context, scaleY, [\n 'geometry.centerY',\n 'face.y', 'face.height', 'face.minHeight',\n 'tape.y', 'tape.height',\n 'readout.title.y', 'readout.value.y', 'readout.unit.y'\n ]);\n scalePaths(options, context, vertical ? scaleX : scaleY, [\n 'tape.tickInset', 'tape.labelOffset',\n 'tape.majorTickLength', 'tape.minorTickLength'\n ]);\n scalePaths(options, context, vertical ? scaleY : scaleX, [\n 'tape.majorSpacing', 'tape.fadeSize'\n ]);\n scalePaths(options, context, uniform, [\n 'face.cornerRadius', 'tape.cornerRadius'\n ]);\n return options;\n}\n\nfunction scalePaths(options, context, factor, paths) {\n if (!Number.isFinite(factor) || factor <= 0 || Math.abs(factor - 1) < 1e-9) return;\n for (const path of paths) {\n if (hasPath(context.requested, path)) continue;\n const baseValue = getPath(context.typeDefaults, path);\n if (!Number.isFinite(baseValue)) continue;\n setPath(options, path, baseValue * factor);\n }\n}\n\nfunction hasOwn(value, key) {\n return isPlainObject(value) && Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction hasPath(value, path) {\n const keys = path.split('.');\n let cursor = value;\n for (const key of keys) {\n if (!isPlainObject(cursor) || !Object.prototype.hasOwnProperty.call(cursor, key)) return false;\n cursor = cursor[key];\n }\n return true;\n}\n\nfunction getPath(value, path) {\n let cursor = value;\n for (const key of path.split('.')) {\n if (cursor === null || cursor === undefined) return undefined;\n cursor = cursor[key];\n }\n return cursor;\n}\n\nfunction setPath(value, path, nextValue) {\n const keys = path.split('.');\n let cursor = value;\n for (let index = 0; index < keys.length - 1; index += 1) {\n const key = keys[index];\n if (!isPlainObject(cursor[key])) cursor[key] = {};\n cursor = cursor[key];\n }\n cursor[keys[keys.length - 1]] = nextValue;\n}\n", "import { faceLayer } from '../layers/face.js';\nimport { linearZonesLayer } from '../layers/linear-zones.js';\nimport { linearTicksLayer } from '../layers/linear-ticks.js';\nimport { linearLabelsLayer } from '../layers/linear-labels.js';\nimport { linearIndicatorLayer } from '../layers/linear-indicator.js';\nimport { readoutLayer } from '../layers/readout.js';\nimport { lightLayer } from '../layers/light.js';\nimport { configureClassicLinearSize } from './instrument-sizing.js';\n\n/** Shared classic-linear defaults used by compatible preset variants. */\nexport const classicLinearDefaults = {\n layout: {\n includeGeometry: false\n },\n geometry: {\n mode: 'linear',\n width: 320,\n height: 220,\n centerX: 160,\n centerY: 110\n },\n face: {\n visible: true,\n shape: 'panel',\n fit: 'content',\n contentPadding: 14,\n minWidth: 1,\n minHeight: 1,\n clipContent: true,\n x: 7,\n y: 7,\n width: 306,\n height: 206,\n cornerRadius: 20,\n color: '#fffef8',\n strokeColor: '#4b5563',\n strokeWidth: 3,\n innerStrokeColor: '#d1d5db',\n innerStrokeWidth: 1.2,\n shadow: true,\n glass: true\n },\n linear: {\n originY: 142,\n startX: 38,\n startY: 0,\n endX: 282,\n endY: 0,\n tickSide: 'negative',\n labelOffset: 38,\n zoneOffset: -16\n },\n track: {\n visible: true,\n color: '#a8a29e',\n width: 5,\n opacity: 0.85,\n lineCap: 'round',\n showUnderZones: false\n },\n scale: {\n major: {\n visible: true,\n divisions: 5,\n length: 20,\n width: 2.4,\n color: '#111827'\n },\n minor: {\n visible: true,\n subdivisions: 4,\n length: 10,\n width: 1,\n color: '#57534e'\n }\n },\n labels: {\n visible: true,\n fontSize: 11,\n fontWeight: 700,\n rotation: 'horizontal'\n },\n pointer: {\n visible: false\n },\n indicator: {\n visible: true,\n type: 'hairline',\n position: 'cross',\n length: 84,\n centerOffset: 0,\n width: 2.4,\n color: '#991b1b',\n strokeColor: '#fffef8',\n strokeWidth: 0.8,\n cap: {\n visible: false,\n stackOrder: 'above',\n radius: 4.5,\n color: '#991b1b',\n strokeColor: '#fffef8',\n strokeWidth: 1.2\n }\n },\n light: {\n visible: false,\n x: 72,\n y: 60,\n radius: 8,\n color: 'amber'\n },\n readout: {\n title: {\n visible: true,\n text: 'LINEAR',\n x: 'auto',\n y: 60,\n fontSize: 13,\n letterSpacing: 1.6\n },\n value: {\n visible: false,\n x: 'auto',\n y: -42,\n fontSize: 24,\n fontWeight: 750\n },\n unit: {\n visible: false,\n x: 'auto',\n y: -60,\n fontSize: 10\n }\n }\n};\n\n/** Shared layer sequence for framed travelling-indicator instruments. */\nexport const classicLinearLayers = [\n faceLayer,\n linearZonesLayer,\n linearTicksLayer,\n linearLabelsLayer,\n lightLayer,\n readoutLayer,\n linearIndicatorLayer\n];\n\n/** Cream-faced vintage instrument with a horizontally travelling indicator. */\nexport const classicLinearGaugeType = {\n description: 'A framed vintage linear instrument with zones, ticks, labels, and a moving hairline.',\n defaults: classicLinearDefaults,\n configure: configureClassicLinearSize,\n layers: classicLinearLayers\n};\n", "import { linearAxis, linearNormalOffset, linearNormalSpan, offsetLinearPoint, valueToLinearPoint } from '../geometry/linear.js';\nimport { polarPoint, valueToAngle } from '../geometry/scale.js';\nimport { svgElement } from '../renderer/svg.js';\n\n/** Draws an emphasized radial or linear reference line at the configured zero value. */\nexport const zeroMarkerLayer = {\n id: 'zero-marker',\n render(context) {\n const { options, renderer } = context;\n const marker = options.centerZero?.marker;\n if (!marker?.visible) return null;\n\n const group = renderer.group('zero-marker', { 'aria-hidden': 'true' });\n const line = options.geometry.mode === 'linear'\n ? linearZeroLine(options, marker)\n : radialZeroLine(options, marker);\n group.append(svgElement('line', {\n class: 'gaugeit__zero-marker',\n ...line,\n stroke: marker.color,\n 'stroke-width': marker.width,\n 'stroke-linecap': marker.lineCap,\n opacity: marker.opacity\n }));\n return null;\n }\n};\n\nfunction radialZeroLine(options, marker) {\n const angle = valueToAngle(options.centerZero.zeroValue, options);\n const radius = marker.radius ?? options.scale.radius;\n const start = polarPoint(\n options.geometry.centerX,\n options.geometry.centerY,\n Math.max(0, radius - marker.length),\n angle\n );\n const end = polarPoint(options.geometry.centerX, options.geometry.centerY, radius, angle);\n return { x1: start.x, y1: start.y, x2: end.x, y2: end.y };\n}\n\nfunction linearZeroLine(options, marker) {\n const axis = linearAxis(options);\n const point = valueToLinearPoint(options.centerZero.zeroValue, options);\n const span = linearNormalSpan(\n marker.length,\n marker.position,\n linearNormalOffset(marker.centerOffset)\n );\n const start = offsetLinearPoint(point, axis, span.start);\n const end = offsetLinearPoint(point, axis, span.end);\n return { x1: start.x, y1: start.y, x2: end.x, y2: end.y };\n}\n", "import { deepMerge } from '../core/utils.js';\nimport { zeroMarkerLayer } from '../layers/zero-marker.js';\nimport {\n classicLinearDefaults,\n classicLinearLayers\n} from './classic-linear.js';\nimport { configureClassicLinearSize } from './instrument-sizing.js';\n\nconst defaults = deepMerge(classicLinearDefaults, {\n min: -100,\n max: 100,\n value: 0,\n centerZero: {\n zeroValue: 0,\n symmetric: true,\n marker: {\n visible: true,\n position: 'cross',\n centerOffset: 0,\n length: 34,\n width: 3.2,\n color: '#111827',\n opacity: 1,\n lineCap: 'butt'\n }\n },\n zones: [\n { min: -100, max: -35, color: '#b91c1c', width: 7 },\n { min: -35, max: 35, color: 'transparent' },\n { min: 35, max: 100, color: '#15803d', width: 7 }\n ],\n readout: {\n title: {\n visible: true,\n text: 'DEVIATION'\n }\n }\n});\n\n/** Classic framed linear gauge with a fixed, reusable zero reference. */\nexport const classicLinearZeroGaugeType = {\n description: 'A classic linear instrument with a fixed center-zero reference and signed travel.',\n defaults,\n configure: configureClassicLinearSize,\n layers: [\n ...classicLinearLayers.slice(0, 3),\n zeroMarkerLayer,\n ...classicLinearLayers.slice(3)\n ]\n};\n", "import { faceLayer } from '../layers/face.js';\nimport { zonesLayer } from '../layers/zones.js';\nimport { ticksLayer } from '../layers/ticks.js';\nimport { labelsLayer } from '../layers/labels.js';\nimport { zeroMarkerLayer } from '../layers/zero-marker.js';\nimport { readoutLayer } from '../layers/readout.js';\nimport { lightLayer } from '../layers/light.js';\nimport { pointerLayer } from '../layers/pointer.js';\n\n/** Heritage bidirectional radial gauge with a resting zero at the top. */\nexport const centerZeroGaugeType = {\n description: 'A heritage-styled bidirectional center-zero dial for deviation, balance, and signed values.',\n defaults: {\n min: -100,\n max: 100,\n value: 0,\n geometry: {\n width: 320,\n height: 320,\n centerX: 160,\n centerY: 160,\n radius: 132,\n startAngle: 150,\n endAngle: 390\n },\n centerZero: {\n zeroValue: 0,\n symmetric: true,\n marker: {\n visible: true,\n radius: 124,\n length: 25,\n width: 3.2,\n color: '#292524',\n opacity: 1,\n lineCap: 'round'\n }\n },\n face: {\n visible: true,\n shape: 'circle',\n fit: 'geometry',\n clipContent: true,\n x: 8,\n y: 8,\n width: 304,\n height: 304,\n color: '#fffdf5',\n strokeColor: '#374151',\n strokeWidth: 4,\n innerStrokeColor: '#c7bfae',\n innerStrokeWidth: 1.4,\n shadow: true,\n glass: true\n },\n track: {\n visible: true,\n color: '#d6d0c2',\n width: 10,\n radius: 123,\n opacity: 1,\n lineCap: 'round',\n showUnderZones: true\n },\n zones: [\n { min: -100, max: -35, color: '#b91c1c', width: 8, radius: 123, opacity: 0.92, lineCap: 'round' },\n { min: -35, max: 35, color: 'transparent' },\n { min: 35, max: 100, color: '#b45309', width: 8, radius: 123, opacity: 0.92, lineCap: 'round' }\n ],\n scale: {\n radius: 119,\n position: 'inside',\n major: {\n visible: true,\n interval: 25,\n divisions: 8,\n length: 18,\n width: 2.4,\n color: '#292524'\n },\n minor: {\n visible: true,\n subdivisions: 4,\n length: 9,\n width: 1,\n color: '#78716c'\n }\n },\n labels: {\n visible: true,\n interval: 25,\n radius: 88,\n color: '#292524',\n fontSize: 11,\n fontWeight: 700\n },\n pointer: {\n type: 'spear',\n length: 101,\n shaftLength: 78,\n tailLength: 18,\n width: 8,\n color: '#7f1d1d',\n strokeColor: '#fffdf5',\n strokeWidth: 0.8,\n cap: {\n visible: true,\n stackOrder: 'above',\n radius: 10,\n color: '#292524',\n strokeColor: '#d6d3d1',\n strokeWidth: 2\n }\n },\n light: {\n visible: false,\n x: 112,\n y: 205,\n radius: 8,\n color: 'amber'\n },\n readout: {\n title: {\n visible: true,\n text: 'BALANCE',\n x: 'auto',\n y: 205,\n color: '#44403c',\n fontSize: 13,\n letterSpacing: 1.8\n },\n value: {\n visible: true,\n x: 'auto',\n y: 238,\n color: '#292524',\n fontSize: 28,\n fontWeight: 760,\n prefix: ''\n },\n unit: {\n visible: false,\n text: '',\n x: 'auto',\n y: 258,\n color: '#78716c',\n fontSize: 10\n }\n }\n },\n layers: [faceLayer, zonesLayer, ticksLayer, labelsLayer, zeroMarkerLayer, lightLayer, readoutLayer, pointerLayer]\n};\n", "import { findZoneForValue } from '../geometry/scale.js';\nimport {\n resolveTapeInterval,\n tapeMinorSpacing,\n tapeMinorStep,\n tapeValueOffset,\n tapeWindowBox\n} from '../geometry/tape.js';\nimport { isTransparentColor } from '../core/utils.js';\nimport { setSvgAttributes, svgElement } from '../renderer/svg.js';\n\n/** Draws a fixed-pointer moving numeric tape inspired by aircraft instruments. */\nexport const rollingTapeLayer = {\n id: 'rolling-tape',\n render(context) {\n const { options, renderer } = context;\n const tape = options.tape;\n const windowBox = tapeWindowBox(options);\n const vertical = tape.orientation !== 'horizontal';\n const group = renderer.group('rolling-tape', { 'aria-hidden': 'true' });\n const clipId = `${renderer.id}-rolling-tape-clip`;\n const fadeStartId = `${renderer.id}-rolling-tape-fade-start`;\n const fadeEndId = `${renderer.id}-rolling-tape-fade-end`;\n\n const defs = svgElement('defs');\n const clip = svgElement('clipPath', { id: clipId, clipPathUnits: 'userSpaceOnUse' });\n clip.append(svgElement('rect', {\n x: windowBox.x,\n y: windowBox.y,\n width: windowBox.width,\n height: windowBox.height,\n rx: tape.cornerRadius,\n ry: tape.cornerRadius\n }));\n defs.append(clip);\n defs.append(fadeGradient(fadeStartId, vertical, true, tape.fadeColor));\n defs.append(fadeGradient(fadeEndId, vertical, false, tape.fadeColor));\n group.append(defs);\n\n group.append(svgElement('rect', {\n class: 'gaugeit__tape-window-background',\n x: windowBox.x,\n y: windowBox.y,\n width: windowBox.width,\n height: windowBox.height,\n rx: tape.cornerRadius,\n ry: tape.cornerRadius,\n fill: tape.windowColor,\n stroke: 'none'\n }));\n\n const strip = svgElement('g', {\n class: 'gaugeit__tape-strip',\n 'clip-path': `url(#${clipId})`\n });\n strip.append(svgElement('rect', {\n x: windowBox.x,\n y: windowBox.y,\n width: windowBox.width,\n height: windowBox.height,\n fill: tape.stripColor\n }));\n group.append(strip);\n\n const minorStep = tapeMinorStep(options);\n const minorSpacing = tapeMinorSpacing(options);\n const majorEvery = Math.max(1, Math.floor(resolveTapeInterval(options) / minorStep + 0.5));\n const visibleLength = vertical ? windowBox.height : windowBox.width;\n const slotCount = Math.max(9, Math.ceil(visibleLength / minorSpacing) + 8);\n const halfSlots = Math.ceil(slotCount / 2);\n const slots = [];\n\n for (let index = 0; index < slotCount; index += 1) {\n const slot = createSlot(vertical, options);\n strip.append(slot.group);\n slots.push(slot);\n }\n\n drawFades(group, windowBox, tape, fadeStartId, fadeEndId, vertical);\n drawFixedIndicator(group, windowBox, tape, vertical);\n drawWindowBorder(group, windowBox, tape);\n\n return {\n update(value, state = {}) {\n const current = Number.isFinite(state.pointerValue) ? state.pointerValue : value;\n const centerIndex = Math.floor((current - options.min) / minorStep);\n for (let slotIndex = 0; slotIndex < slots.length; slotIndex += 1) {\n const tapeIndex = centerIndex + slotIndex - halfSlots;\n const slotValue = options.min + tapeIndex * minorStep;\n const slot = slots[slotIndex];\n if (slotValue < options.min - minorStep * 0.25 || slotValue > options.max + minorStep * 0.25) {\n slot.group.setAttribute('display', 'none');\n continue;\n }\n\n const offset = tapeValueOffset(slotValue, current, options);\n const coordinate = vertical\n ? { x: windowBox.x + windowBox.width / 2, y: windowBox.y + windowBox.height / 2 - offset }\n : { x: windowBox.x + windowBox.width / 2 + offset, y: windowBox.y + windowBox.height / 2 };\n slot.group.removeAttribute('display');\n slot.group.setAttribute('transform', `translate(${coordinate.x} ${coordinate.y})`);\n\n const isMajor = positiveModulo(tapeIndex, majorEvery) === 0;\n updateSlot(slot, slotValue, isMajor, options);\n }\n }\n };\n }\n};\n\nfunction createSlot(vertical, options) {\n const group = svgElement('g', { class: 'gaugeit__tape-slot' });\n const tick = svgElement('line', { class: 'gaugeit__tape-tick' });\n const text = svgElement('text', {\n class: 'gaugeit__label gaugeit__tape-label',\n fill: options.tape.textColor,\n 'font-family': options.labels.fontFamily,\n 'font-size': options.labels.fontSize,\n 'font-weight': options.labels.fontWeight,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle'\n });\n group.append(tick, text);\n group.dataset.vertical = vertical ? 'true' : 'false';\n return { group, tick, text, vertical };\n}\n\nfunction updateSlot(slot, value, major, options) {\n const tape = options.tape;\n const tickLength = major ? tape.majorTickLength : tape.minorTickLength;\n const zone = tape.colorByZone ? findZoneForValue(value, options.zones) : null;\n const zoneColor = zone && !isTransparentColor(zone.color) ? zone.color : null;\n const tickColor = zoneColor || (major ? tape.tickColor : tape.minorTickColor);\n const textColor = zoneColor || tape.textColor;\n const lineWidth = major ? tape.majorTickWidth : tape.minorTickWidth;\n\n if (slot.vertical) {\n setSvgAttributes(slot.tick, {\n x1: -tape.tickInset,\n y1: 0,\n x2: -tape.tickInset - tickLength,\n y2: 0\n });\n setSvgAttributes(slot.text, { x: tape.labelOffset, y: 0 });\n } else {\n setSvgAttributes(slot.tick, {\n x1: 0,\n y1: tape.tickInset,\n x2: 0,\n y2: tape.tickInset + tickLength\n });\n setSvgAttributes(slot.text, { x: 0, y: -tape.labelOffset });\n }\n\n setSvgAttributes(slot.tick, {\n stroke: tickColor,\n 'stroke-width': lineWidth,\n 'stroke-linecap': 'butt',\n opacity: major ? 1 : tape.minorTickOpacity\n });\n slot.text.setAttribute('fill', textColor);\n slot.text.style.display = major && options.labels.visible ? '' : 'none';\n slot.text.textContent = formatLabel(value, options);\n}\n\nfunction drawFixedIndicator(group, box, tape, vertical) {\n const centerX = box.x + box.width / 2;\n const centerY = box.y + box.height / 2;\n const edgeInset = Math.max(0, tape.windowStrokeWidth / 2);\n if (vertical) {\n group.append(svgElement('line', {\n class: 'gaugeit__tape-indicator',\n x1: box.x + edgeInset,\n y1: centerY,\n x2: box.x + box.width - edgeInset,\n y2: centerY,\n stroke: tape.indicatorColor,\n 'stroke-width': tape.indicatorWidth,\n 'stroke-linecap': 'butt'\n }));\n } else {\n group.append(svgElement('line', {\n class: 'gaugeit__tape-indicator',\n x1: centerX,\n y1: box.y + edgeInset,\n x2: centerX,\n y2: box.y + box.height - edgeInset,\n stroke: tape.indicatorColor,\n 'stroke-width': tape.indicatorWidth,\n 'stroke-linecap': 'butt'\n }));\n }\n}\n\nfunction drawWindowBorder(group, box, tape) {\n const outerRadius = Math.max(0, Math.min(tape.cornerRadius, box.width / 2, box.height / 2));\n const innerInset = Math.max(tape.windowStrokeWidth, tape.windowInnerStrokeWidth, 0);\n group.append(svgElement('rect', {\n class: 'gaugeit__tape-window',\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n rx: outerRadius,\n ry: outerRadius,\n fill: 'none',\n stroke: tape.windowStrokeColor,\n 'stroke-width': tape.windowStrokeWidth\n }));\n if (tape.windowInnerStrokeWidth > 0 && box.width > innerInset * 2 && box.height > innerInset * 2) {\n group.append(svgElement('rect', {\n class: 'gaugeit__tape-window-inner',\n x: box.x + innerInset,\n y: box.y + innerInset,\n width: box.width - innerInset * 2,\n height: box.height - innerInset * 2,\n rx: Math.max(0, outerRadius - innerInset),\n ry: Math.max(0, outerRadius - innerInset),\n fill: 'none',\n stroke: tape.windowInnerStrokeColor,\n 'stroke-width': tape.windowInnerStrokeWidth,\n 'pointer-events': 'none'\n }));\n }\n}\n\nfunction drawFades(group, box, tape, startId, endId, vertical) {\n if (tape.fadeSize <= 0) return;\n if (vertical) {\n group.append(\n svgElement('rect', { x: box.x, y: box.y, width: box.width, height: tape.fadeSize, fill: `url(#${startId})`, 'pointer-events': 'none' }),\n svgElement('rect', { x: box.x, y: box.y + box.height - tape.fadeSize, width: box.width, height: tape.fadeSize, fill: `url(#${endId})`, 'pointer-events': 'none' })\n );\n } else {\n group.append(\n svgElement('rect', { x: box.x, y: box.y, width: tape.fadeSize, height: box.height, fill: `url(#${startId})`, 'pointer-events': 'none' }),\n svgElement('rect', { x: box.x + box.width - tape.fadeSize, y: box.y, width: tape.fadeSize, height: box.height, fill: `url(#${endId})`, 'pointer-events': 'none' })\n );\n }\n}\n\nfunction fadeGradient(id, vertical, start, color) {\n const gradient = svgElement('linearGradient', {\n id,\n x1: '0%',\n y1: '0%',\n x2: vertical ? '0%' : '100%',\n y2: vertical ? '100%' : '0%'\n });\n const firstOpacity = start ? 0.96 : 0;\n const secondOpacity = start ? 0 : 0.96;\n gradient.append(\n svgElement('stop', { offset: '0%', 'stop-color': color, 'stop-opacity': firstOpacity }),\n svgElement('stop', { offset: '100%', 'stop-color': color, 'stop-opacity': secondOpacity })\n );\n return gradient;\n}\n\nfunction formatLabel(value, options) {\n if (typeof options.labels.formatter === 'function') {\n return String(options.labels.formatter(value, { min: options.min, max: options.max, options }));\n }\n return Number(value).toFixed(options.labels.fractionDigits);\n}\n\nfunction positiveModulo(value, divisor) {\n return ((value % divisor) + divisor) % divisor;\n}\n", "import { faceLayer } from '../layers/face.js';\nimport { rollingTapeLayer } from '../layers/rolling-tape.js';\nimport { readoutLayer } from '../layers/readout.js';\nimport { lightLayer } from '../layers/light.js';\nimport { configureRollingTapeSize } from './instrument-sizing.js';\n\n/** Heritage aircraft-style moving numerical tape with a fixed reference line. */\nexport const rollingTapeGaugeType = {\n description: 'A cream-faced rolling numeric tape with a fixed edge-to-edge aircraft reference line.',\n defaults: {\n geometry: {\n mode: 'tape',\n width: 320,\n height: 340,\n centerX: 160,\n centerY: 170\n },\n face: {\n visible: true,\n shape: 'panel',\n fit: 'geometry',\n clipContent: true,\n x: 8,\n y: 8,\n width: 304,\n height: 324,\n cornerRadius: 23,\n color: '#fffdf4',\n strokeColor: '#4b5563',\n strokeWidth: 4,\n innerStrokeColor: '#c8bfaa',\n innerStrokeWidth: 1.4,\n shadow: true,\n glass: true\n },\n pointer: { visible: false },\n indicator: { visible: false },\n track: { visible: false },\n tape: {\n orientation: 'vertical',\n x: 62,\n y: 69,\n width: 196,\n height: 212,\n cornerRadius: 12,\n windowColor: '#fff9ea',\n windowStrokeColor: '#544f45',\n windowStrokeWidth: 2,\n windowInnerStrokeColor: '#d8cfbd',\n windowInnerStrokeWidth: 1,\n stripColor: '#fff9ea',\n textColor: '#211f1a',\n tickColor: '#3f3a32',\n minorTickColor: '#817867',\n minorTickOpacity: 0.86,\n majorTickWidth: 2.2,\n minorTickWidth: 1,\n majorTickLength: 26,\n minorTickLength: 13,\n tickInset: 66,\n labelOffset: 10,\n interval: 20,\n minorSubdivisions: 4,\n majorSpacing: 54,\n indicatorColor: '#991b1b',\n indicatorWidth: 2.8,\n fadeSize: 38,\n fadeColor: '#fffdf4',\n colorByZone: true\n },\n scale: {\n major: { visible: true, interval: 20, divisions: 5 },\n minor: { visible: true, subdivisions: 4 }\n },\n labels: {\n visible: true,\n color: '#211f1a',\n fontSize: 15,\n fontWeight: 760,\n fractionDigits: 0\n },\n zones: [\n { min: 0, max: 20, color: '#b91c1c' },\n { min: 20, max: 80, color: 'transparent' },\n { min: 80, max: 100, color: '#15803d' }\n ],\n light: {\n visible: false,\n x: 72,\n y: 46,\n radius: 8,\n color: 'amber'\n },\n readout: {\n title: {\n visible: true,\n text: 'ALTITUDE',\n x: 'auto',\n y: 42,\n color: '#3f3a32',\n fontSize: 13,\n letterSpacing: 1.8\n },\n value: {\n visible: false,\n x: 'auto',\n y: 303,\n color: '#211f1a',\n fontSize: 24,\n fontWeight: 760\n },\n unit: {\n visible: true,\n text: 'FT',\n x: 'auto',\n y: 307,\n color: '#6b6253',\n fontSize: 10,\n letterSpacing: 1.2\n }\n }\n },\n configure: configureRollingTapeSize,\n layers: [faceLayer, rollingTapeLayer, lightLayer, readoutLayer]\n};\n", "import { arcGaugeType } from './arc.js';\nimport { classicGaugeType } from './classic.js';\nimport { lineScaleGaugeType } from './line-scale.js';\nimport { heritageRoundGaugeType } from './heritage-round.js';\nimport { classicLinearGaugeType } from './classic-linear.js';\nimport { classicLinearZeroGaugeType } from './classic-linear-zero.js';\nimport { centerZeroGaugeType } from './center-zero.js';\nimport { rollingTapeGaugeType } from './rolling-tape.js';\n\n/** Registers the built-in types on a supplied registry. */\nexport function registerBuiltInTypes(registry) {\n registry\n .register('arc', arcGaugeType)\n .register('classic', classicGaugeType)\n .register('classic-linear', classicLinearGaugeType)\n .register('classic-linear-zero', classicLinearZeroGaugeType)\n .register('center-zero', centerZeroGaugeType)\n .register('heritage-round', heritageRoundGaugeType)\n .register('rolling-tape', rollingTapeGaugeType)\n .register('line-scale', lineScaleGaugeType);\n return registry;\n}\n\nexport const builtInTypes = Object.freeze({\n arc: arcGaugeType,\n classic: classicGaugeType,\n 'classic-linear': classicLinearGaugeType,\n 'classic-linear-zero': classicLinearZeroGaugeType,\n 'center-zero': centerZeroGaugeType,\n 'heritage-round': heritageRoundGaugeType,\n 'rolling-tape': rollingTapeGaugeType,\n 'line-scale': lineScaleGaugeType\n});\n", "import { parseJsonObject } from './utils.js';\n\nconst mountedInstances = new WeakMap();\n\n/** Creates one gauge and remembers it for duplicate-safe auto mounting. */\nexport function createManagedGauge(target, options, GaugeClass, registry) {\n const existing = mountedInstances.get(target);\n if (existing) existing.destroy();\n const gauge = new GaugeClass(target, options, registry, managedLifecycle(target));\n mountedInstances.set(target, gauge);\n return gauge;\n}\n\n/** Initializes all matching data-gaugeit elements. */\nexport function autoMountElements(selector, GaugeClass, registry, root = document) {\n const elements = [...root.querySelectorAll(selector || '[data-gaugeit]')];\n return elements.map((element) => {\n const existing = mountedInstances.get(element);\n if (existing) return existing;\n const options = optionsFromDataset(element);\n const gauge = new GaugeClass(element, options, registry, managedLifecycle(element));\n mountedInstances.set(element, gauge);\n return gauge;\n });\n}\n\n/** Returns the managed instance mounted on an element, when present. */\nexport function getMountedGauge(element) {\n return mountedInstances.get(element) || null;\n}\n\n/** Destroys a managed instance and removes it from the mount registry. */\nexport function unmountGauge(element) {\n const gauge = mountedInstances.get(element);\n if (!gauge) return false;\n gauge.destroy();\n mountedInstances.delete(element);\n return true;\n}\n\nfunction optionsFromDataset(element) {\n const options = parseJsonObject(element.dataset.gaugeitOptions, {});\n if (element.dataset.gaugeitType) options.type = element.dataset.gaugeitType;\n if (element.dataset.gaugeitValue !== undefined) options.value = Number(element.dataset.gaugeitValue);\n if (element.dataset.gaugeitMin !== undefined) options.min = Number(element.dataset.gaugeitMin);\n if (element.dataset.gaugeitMax !== undefined) options.max = Number(element.dataset.gaugeitMax);\n return options;\n}\n\nfunction managedLifecycle(element) {\n return {\n onDestroy(gauge) {\n if (mountedInstances.get(element) === gauge) mountedInstances.delete(element);\n }\n };\n}\n", "import { parseJsonObject } from './core/utils.js';\n\n/** Defines an optional <gauge-it> custom element without requiring a framework. */\nexport function defineCustomElement(createGauge, tagName = 'gauge-it') {\n if (typeof customElements === 'undefined' || typeof HTMLElement === 'undefined') return null;\n if (customElements.get(tagName)) return customElements.get(tagName);\n\n class GaugeitElement extends HTMLElement {\n static get observedAttributes() {\n return ['value', 'min', 'max', 'type', 'options'];\n }\n\n constructor() {\n super();\n this._gauge = null;\n this._mount = document.createElement('div');\n this._mount.className = 'gaugeit-element__mount';\n }\n\n connectedCallback() {\n if (!this._mount.isConnected) this.append(this._mount);\n if (!this._gauge) this._gauge = createGauge(this._mount, this._readOptions());\n }\n\n disconnectedCallback() {\n if (this._gauge) {\n this._gauge.destroy();\n this._gauge = null;\n }\n }\n\n attributeChangedCallback() {\n if (this._gauge) this._gauge.replaceOptions(this._readOptions());\n }\n\n get value() {\n return this._gauge ? this._gauge.getValue() : Number(this.getAttribute('value') || 0);\n }\n\n set value(nextValue) {\n this.setAttribute('value', String(nextValue));\n }\n\n get gauge() {\n return this._gauge;\n }\n\n _readOptions() {\n const options = parseJsonObject(this.getAttribute('options'), {});\n if (this.hasAttribute('type')) options.type = this.getAttribute('type');\n if (this.hasAttribute('value')) options.value = Number(this.getAttribute('value'));\n if (this.hasAttribute('min')) options.min = Number(this.getAttribute('min'));\n if (this.hasAttribute('max')) options.max = Number(this.getAttribute('max'));\n return options;\n }\n }\n\n customElements.define(tagName, GaugeitElement);\n return GaugeitElement;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["zone", "geometry", "start", "end", "geometry", "geometry", "geometry", "geometry", "labelTransform", "formatLabel", "positiveModulo", "formatLabel", "createGauge"]
|
|
7
|
+
}
|