@oicl/openbridge-webcomponents 2.0.0-next.151 → 2.0.0-next.152

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.
Files changed (89) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +989 -319
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +1643 -51
  4. package/dist/alert-severity.d.ts +12 -9
  5. package/dist/alert-severity.d.ts.map +1 -1
  6. package/dist/alert-severity.js +30 -38
  7. package/dist/alert-severity.js.map +1 -1
  8. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts +10 -0
  9. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts.map +1 -1
  10. package/dist/building-blocks/bar-horizontal/bar-horizontal.js +6 -1
  11. package/dist/building-blocks/bar-horizontal/bar-horizontal.js.map +1 -1
  12. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts +10 -0
  13. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts.map +1 -1
  14. package/dist/building-blocks/bar-vertical/bar-vertical.js +6 -1
  15. package/dist/building-blocks/bar-vertical/bar-vertical.js.map +1 -1
  16. package/dist/building-blocks/chart-line/chart-line-base.d.ts +137 -0
  17. package/dist/building-blocks/chart-line/chart-line-base.d.ts.map +1 -1
  18. package/dist/building-blocks/chart-line/chart-line-base.js +464 -79
  19. package/dist/building-blocks/chart-line/chart-line-base.js.map +1 -1
  20. package/dist/building-blocks/external-scale/external-scale.d.ts +11 -0
  21. package/dist/building-blocks/external-scale/external-scale.d.ts.map +1 -1
  22. package/dist/building-blocks/external-scale/external-scale.js +45 -12
  23. package/dist/building-blocks/external-scale/external-scale.js.map +1 -1
  24. package/dist/charthelpers/index.d.ts +1 -0
  25. package/dist/charthelpers/index.d.ts.map +1 -1
  26. package/dist/charthelpers/index.js +7 -1
  27. package/dist/charthelpers/index.js.map +1 -1
  28. package/dist/charthelpers/range-labels.d.ts +55 -0
  29. package/dist/charthelpers/range-labels.d.ts.map +1 -0
  30. package/dist/charthelpers/range-labels.js +36 -0
  31. package/dist/charthelpers/range-labels.js.map +1 -0
  32. package/dist/components/alert-button/alert-button.css.js +13 -21
  33. package/dist/components/alert-button/alert-button.css.js.map +1 -1
  34. package/dist/components/alert-button/alert-button.d.ts +9 -4
  35. package/dist/components/alert-button/alert-button.d.ts.map +1 -1
  36. package/dist/components/alert-button/alert-button.js +24 -15
  37. package/dist/components/alert-button/alert-button.js.map +1 -1
  38. package/dist/components/alert-frame/alert-frame.css.js +109 -33
  39. package/dist/components/alert-frame/alert-frame.css.js.map +1 -1
  40. package/dist/components/alert-frame/alert-frame.d.ts +34 -7
  41. package/dist/components/alert-frame/alert-frame.d.ts.map +1 -1
  42. package/dist/components/alert-frame/alert-frame.js +134 -30
  43. package/dist/components/alert-frame/alert-frame.js.map +1 -1
  44. package/dist/components/alert-icon/alert-icon.d.ts +10 -7
  45. package/dist/components/alert-icon/alert-icon.d.ts.map +1 -1
  46. package/dist/components/alert-icon/alert-icon.js +37 -60
  47. package/dist/components/alert-icon/alert-icon.js.map +1 -1
  48. package/dist/components/alert-menu-item/alert-menu-item.css.js +1 -4
  49. package/dist/components/alert-menu-item/alert-menu-item.css.js.map +1 -1
  50. package/dist/components/date-item/date-item.css.js +3 -3
  51. package/dist/components/keyboard-full/keyboard-full.css.js +4 -4
  52. package/dist/components/message-menu-item/message-menu-item.css.js +2 -6
  53. package/dist/components/message-menu-item/message-menu-item.css.js.map +1 -1
  54. package/dist/components/sequence-toolbar/sequence-toolbar.css.js +1 -2
  55. package/dist/components/sequence-toolbar/sequence-toolbar.css.js.map +1 -1
  56. package/dist/index.js +2 -1
  57. package/dist/navigation-instruments/gauge-trend/gauge-trend.d.ts +6 -0
  58. package/dist/navigation-instruments/gauge-trend/gauge-trend.d.ts.map +1 -1
  59. package/dist/navigation-instruments/gauge-trend/gauge-trend.js +8 -0
  60. package/dist/navigation-instruments/gauge-trend/gauge-trend.js.map +1 -1
  61. package/dist/navigation-instruments/instrument-field/instrument-field.css.js +2 -2
  62. package/dist/navigation-instruments/readout/readout.d.ts.map +1 -1
  63. package/dist/navigation-instruments/readout/readout.js +2 -1
  64. package/dist/navigation-instruments/readout/readout.js.map +1 -1
  65. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts.map +1 -1
  66. package/dist/navigation-instruments/readout-list-item/readout-list-item.js +2 -1
  67. package/dist/navigation-instruments/readout-list-item/readout-list-item.js.map +1 -1
  68. package/dist/openbridge.css +19 -4
  69. package/dist/palettes/blinking.d.ts +14 -4
  70. package/dist/palettes/blinking.d.ts.map +1 -1
  71. package/dist/palettes/blinking.js +41 -35
  72. package/dist/palettes/blinking.js.map +1 -1
  73. package/dist/palettes/flashing-controller.d.ts +21 -0
  74. package/dist/palettes/flashing-controller.d.ts.map +1 -0
  75. package/dist/palettes/flashing-controller.js +45 -0
  76. package/dist/palettes/flashing-controller.js.map +1 -0
  77. package/dist/svghelpers/index.d.ts +1 -0
  78. package/dist/svghelpers/index.d.ts.map +1 -1
  79. package/dist/svghelpers/index.js +2 -0
  80. package/dist/svghelpers/index.js.map +1 -1
  81. package/dist/svghelpers/rounded-rect.d.ts +15 -0
  82. package/dist/svghelpers/rounded-rect.d.ts.map +1 -0
  83. package/dist/svghelpers/rounded-rect.js +29 -0
  84. package/dist/svghelpers/rounded-rect.js.map +1 -0
  85. package/dist/types.d.ts +14 -0
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/types.js +9 -0
  88. package/dist/types.js.map +1 -1
  89. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bar-vertical.js","sources":["../../../src/building-blocks/bar-vertical/bar-vertical.ts"],"sourcesContent":["import {LitElement, html} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport type {PropertyValues} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport {ResizeController} from '@lit-labs/observers/resize-controller.js';\nimport {CHART_DIMENSIONS} from '../../charthelpers/constants.js';\nimport {\n InstrumentState,\n FrameStyle,\n BorderRadiusPosition,\n Priority,\n} from '../../navigation-instruments/types.js';\nimport type {LinearAdvice} from '../instrument-linear/advice.js';\nimport type {\n ExternalScaleAdvice,\n ExternalScaleConfig,\n} from '../external-scale/external-scale.js';\nimport {\n computeExternalScaleViewBox,\n computeFixedAspectRatioScale,\n computeExternalScaleLayout,\n renderExternalScale,\n toExternalScaleLayoutConfig,\n computeScaleDimensionsForReport,\n computeExternalScaleEffectiveBarThickness,\n readExternalScaleBorderRadiusPx,\n startExternalScaleBorderRadiusObserver,\n ScaleType,\n FillMode,\n AdvicePosition,\n BarContainerStyle,\n ExternalScaleOrientation,\n ExternalScaleSide,\n} from '../external-scale/external-scale.js';\nimport {SetpointMixin} from '../../svghelpers/setpoint-mixin.js';\n\n// Re-export shared enums for convenience\nexport {\n ScaleType,\n FillMode,\n AdvicePosition,\n FrameStyle,\n BorderRadiusPosition,\n InstrumentState,\n Priority,\n BarContainerStyle,\n ExternalScaleSide,\n};\n\n/**\n * Vertical SVG bar + external scale.\n *\n * This is a thin web-component wrapper around the pure SVG building-block renderer in `external-scale.ts`.\n *\n * It sets up the outer `<svg>`/`viewBox` for a vertical scale and delegates rendering/layout to:\n * - `computeExternalScaleLayout(...)`\n * - `renderExternalScale(config)`\n *\n * For renderer documentation see: **Building Blocks/External Scale**.\n *\n * Set `priority` to `Priority.enhanced` to use the blue/enhanced color palette\n * for bar fill and setpoint instead of the default gray/regular palette\n * (default: `Priority.regular`).\n *\n * @property minValue - Minimum scale value (manual mode)\n * @property maxValue - Maximum scale value (manual mode)\n * @property height - Total height in pixels (including padding bands)\n * @property paddingTop - Padding above the drawing area\n * @property paddingBottom - Padding below the drawing area\n * @property side - Which side this scale lives on\n * @property fixedAspectRatio - When true, freezes all internal calculations and scales the entire component\n * proportionally (like CSS transform:scale), except label font-size remains constant.\n * When false (default), dimensions react to component properties.\n * @property scaleReferenceSize - Reference size for proportional scaling when fixedAspectRatio is true.\n * At this height, the scale renders at native 1:1 (matches Figma design).\n * Above this height, the scale grows proportionally; below, it shrinks.\n * @availableWhen scaleReferenceSize fixedAspectRatio==true\n * @property hasScale - Show scale tickmarks\n * @property hasBar - Show bar\n * @property scaleBackground - Show background behind the scale tickmarks.\n * @property barContainerStyle - Bar container background style.\n * When undefined, defaults based on scaleBackground.\n * Set explicitly to override: 'primary' (lighter) or 'secondary' (gray).\n * @availableWhen barContainerStyle hasBar==true\n * @property barThickness - Bar/fill thickness in pixels\n * @property tickThickness - Tickmark band thickness in pixels.\n * @property labelThickness - Label band thickness in pixels.\n * @property mainTickmarks - Array of values for main tickmarks. When undefined, no main tickmarks shown.\n * When empty array [], defaults to [minValue, 0, maxValue].\n * @property primaryTickmarkInterval - Interval for primary (longest) tickmarks with labels (minimum 1).\n * When undefined, no primary tickmarks are shown.\n * @property secondaryTickmarkInterval - Interval for secondary (medium) tickmarks (minimum 1).\n * When undefined, no secondary tickmarks are shown.\n * @property tertiaryTickmarkInterval - Interval for tertiary (shortest) tickmarks (minimum 1).\n * When undefined, no tertiary tickmarks are shown.\n * @property scaleType - Scale display mode: regular or condensed (shorter ticks)\n * @property frameStyle - Frame style: regular (4px gap for all), flat (main tickmarks touch edge), framed, or instrument\n * @property borderRadiusPosition - Border radius position based on component layout\n * @availableWhen borderRadiusPosition hasBar==true\n * @property instrumentMode - When true, the component is used inside an instrument (e.g., gauge-trend).\n * In this mode, only label font size responds to .obc-component-size-* CSS classes.\n * Border radius and bar thickness use explicit values or defaults, not CSS variables.\n * @property borderRadius - Explicit border radius value in pixels.\n * When instrumentMode=true, this value is used directly (defaults to 8px for regular, 4px for condensed).\n * When instrumentMode=false, this is ignored and border radius is read from CSS variable.\n * @availableWhen borderRadius instrumentMode==true\n * @property priority - Color priority: enhanced uses blue instrument colors for bar fill and setpoint\n * @property fillMode - Fill visualization mode: fill or tint\n * @availableWhen fillMode hasBar==true && value!=undefined\n * @property fillMin - Minimum fill value for tint mode (defaults to 0)\n * @availableWhen fillMin hasBar==true && value!=undefined\n * @property fillMax - Maximum fill value for tint mode (defaults to value)\n * @availableWhen fillMax hasBar==true && value!=undefined\n * @property value - Current value (bar fill level)\n * @property state - Instrument state (affects colors and some marker behavior)\n * @property advicePosition - Advice overlay positioning: center (in bar), inner (covers minor ticks), outer (no overlap)\n * @availableWhen advicePosition hasBar==true\n * @property advices - Advice/alert overlays with state and positioning.\n * When undefined or empty, no advice shown.\n * @property highlightCurrentValue - When true, displays a dot indicator at the current value position.\n * The dot is rendered in the scale band, touching its inner edge (towards the chart).\n * This provides an alternative to bar fill for highlighting the current value.\n * @fires {CustomEvent} scale-dimensions-changed - Fired when the scale's computed layout thickness changes; a parent chart listens for this to reserve space for the scale. Bubbles and is composed.\n * @beta\n */\n@customElement('obc-bar-vertical')\nexport class ObcBarVertical extends SetpointMixin(LitElement, {\n defaultDeadband: 1,\n}) {\n @property({type: Number}) minValue = 0;\n @property({type: Number}) maxValue = 100;\n\n @property({type: Number}) height = 320;\n\n @property({type: Number}) paddingTop: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: Number}) paddingBottom: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: String}) side: ExternalScaleSide = ExternalScaleSide.right;\n\n @property({type: Boolean})\n fixedAspectRatio = false;\n\n @property({type: Number})\n scaleReferenceSize = 384;\n\n @state()\n private _scale = 1;\n\n // ResizeController automatically subscribes/unsubscribes based on component lifecycle\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _resizeController = new ResizeController(this, {\n callback: (entries) => {\n if (!this.fixedAspectRatio) return;\n\n const entry = entries[0];\n if (!entry) return;\n\n // Use the centralized function that computes scale based on reference size\n // For vertical scales, compare container height to reference size\n const containerMainAxisSize = entry.contentRect.height;\n\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.vertical,\n containerMainAxisSize,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n\n // Report scaled dimensions to parent chart\n this.reportDimensions();\n },\n });\n\n // Bands (thickness)\n @property({type: Boolean, attribute: false}) hasScale = true;\n @property({type: Boolean, attribute: false}) showLabels = true;\n @property({type: Boolean}) hasBar = false;\n @property({type: Boolean})\n scaleBackground = false;\n @property({type: String})\n barContainerStyle?: BarContainerStyle = undefined;\n @property({type: Number}) barThickness = 24;\n @property({type: Number}) tickThickness = 24;\n @property({type: Number}) labelThickness = 60;\n\n // Tick configuration\n @property({type: Array, attribute: false}) mainTickmarks?: number[] = [];\n @property({type: Number}) primaryTickmarkInterval?: number = undefined;\n @property({type: Number}) secondaryTickmarkInterval?: number = undefined;\n @property({type: Number}) tertiaryTickmarkInterval?: number = undefined;\n @property({type: String}) scaleType: ScaleType = ScaleType.regular;\n @property({type: String}) frameStyle: FrameStyle = FrameStyle.regular;\n @property({type: String})\n borderRadiusPosition?: BorderRadiusPosition = undefined;\n\n @property({type: Boolean})\n instrumentMode = false;\n\n @property({type: Number})\n borderRadius?: number = undefined;\n\n @state()\n private _computedBorderRadius?: number;\n\n private _borderRadiusObserver?: MutationObserver;\n\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _borderRadiusResizeController = new ResizeController(this, {\n callback: () => {\n // Skip CSS variable reading in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n }\n },\n });\n\n // Values\n @property({type: String}) priority: Priority = Priority.regular;\n @property({type: String}) fillMode: FillMode = FillMode.fill;\n @property({type: Number}) fillMin?: number = undefined;\n @property({type: Number}) fillMax?: number = undefined;\n @property({type: Number}) value?: number = undefined;\n\n @property({type: String}) state: InstrumentState = InstrumentState.active;\n\n // Advice\n @property({type: String}) advicePosition: AdvicePosition =\n AdvicePosition.inner;\n @property({type: Array, attribute: false}) advices?: LinearAdvice[] = [];\n\n @property({type: Boolean}) highlightCurrentValue = false;\n\n override render() {\n // When fixedAspectRatio is true, use scaleReferenceSize for the viewBox length.\n // This makes the SVG render at the \"design reference size\" and then scale\n // proportionally to fit the actual container via preserveAspectRatio=\"xMidYMid meet\".\n // The _scale CSS variable counter-scales text labels to maintain constant visual size.\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.height;\n\n // The parent chart component (chart-line-base) calculates and passes the correct\n // viewBox padding values when fixedAspectRatioScaling is enabled. The padding is\n // pre-scaled to: basePadding * scaleReferenceSize / referenceHeight\n // This ensures the visual padding matches the chart's Canvas padding at any aspect ratio.\n\n const config: ExternalScaleConfig = {\n orientation: ExternalScaleOrientation.vertical,\n side: this.side,\n length: effectiveLength,\n paddingStart: this.paddingTop,\n paddingEnd: this.paddingBottom,\n minValue: this.minValue,\n maxValue: this.maxValue,\n hasScale: this.hasScale,\n labels: this.showLabels,\n hasBar: this.hasBar,\n scaleBackground: this.scaleBackground,\n barContainerStyle: this.barContainerStyle,\n barThickness: this.barThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n mainTickmarks: this.mainTickmarks,\n primaryTickmarkInterval: this.primaryTickmarkInterval,\n secondaryTickmarkInterval: this.secondaryTickmarkInterval,\n tertiaryTickmarkInterval: this.tertiaryTickmarkInterval,\n scaleType: this.scaleType,\n frameStyle: this.frameStyle,\n borderRadiusPosition: this.borderRadiusPosition,\n priority: this.priority,\n setpointOverride: this.setpointOverride,\n fillMode: this.fillMode,\n fillMin: this.fillMin,\n fillMax: this.fillMax,\n value: this.value,\n setpoint: this.setpoint,\n newSetpoint: this.newSetpoint,\n atSetpoint: this.atSetpoint,\n autoAtSetpoint: this.autoAtSetpoint,\n autoAtSetpointDeadband: this.autoAtSetpointDeadband,\n setpointAtZeroDeadband: this.setpointAtZeroDeadband,\n animateSetpoint: this.animateSetpoint,\n departingNewSetpoint: this.departingNewSetpoint,\n state: this.state,\n touching: this.touching,\n advicePosition: this.advicePosition,\n advices: this.advices as ExternalScaleAdvice[],\n fixedAspectRatio: this.fixedAspectRatio,\n instrumentMode: this.instrumentMode,\n highlightCurrentValue: this.highlightCurrentValue,\n };\n\n const layout = computeExternalScaleLayout(\n toExternalScaleLayoutConfig(config)\n );\n\n const parts = renderExternalScale(config);\n\n const viewBox = computeExternalScaleViewBox(\n {orientation: config.orientation, length: effectiveLength},\n layout\n );\n const preserveAspectRatio = this.fixedAspectRatio\n ? 'xMidYMid meet'\n : 'none';\n\n return html`\n <svg\n width=${this.fixedAspectRatio ? '100%' : `${viewBox.width}px`}\n height=${this.fixedAspectRatio ? '100%' : `${this.height}px`}\n viewBox=\"${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}\"\n preserveAspectRatio=\"${preserveAspectRatio}\"\n style=\"--scale: ${this.fixedAspectRatio ? this._scale : 1};\"\n part=\"svg\"\n >\n ${parts.barContainer} ${parts.barFill} ${parts.scaleBackground}\n ${parts.tickmarks} ${parts.labels} ${parts.adviceOverlays}\n ${parts.currentValueDot} ${parts.setpoint}\n </svg>\n `;\n }\n\n override updated(changed: PropertyValues) {\n super.updated(changed);\n\n if (changed.has('scaleType')) {\n this._refreshBorderRadiusFromCssVar();\n }\n\n // Update host styles when fixedAspectRatio changes\n if (changed.has('fixedAspectRatio')) {\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n // Force initial scale calculation based on current size\n this._updateScaleFromCurrentSize();\n } else {\n this._removeFixedAspectRatioStyles();\n this._scale = 1;\n }\n }\n\n // Also recalculate scale when scaleReferenceSize changes\n if (changed.has('scaleReferenceSize') && this.fixedAspectRatio) {\n this._updateScaleFromCurrentSize();\n }\n\n // Report dimensions to parent chart when layout-affecting properties change.\n // In fixedAspectRatio mode, resize events also trigger reportDimensions() via ResizeController.\n // In regular mode, we report on every update to keep parent chart in sync.\n // Layout-affecting properties change the computed thickness and must notify the parent\n // even in fixedAspectRatio mode to keep chart padding accurate.\n const layoutChanged =\n changed.has('side') ||\n changed.has('showLabels') ||\n changed.has('hasScale') ||\n changed.has('hasBar') ||\n changed.has('barThickness') ||\n changed.has('tickThickness') ||\n changed.has('labelThickness') ||\n changed.has('scaleType') ||\n changed.has('borderRadiusPosition') ||\n changed.has('borderRadius') ||\n changed.has('advices') ||\n changed.has('advicePosition') ||\n this.setpointPresenceChanged(changed);\n\n if (!this.fixedAspectRatio || layoutChanged) {\n this.reportDimensions();\n }\n }\n\n /**\n * Report scale dimensions to parent chart component.\n * When fixedAspectRatio=true, reports the actual visual (scaled) thickness\n * so the chart can correctly reserve space for the scale.\n * When fixedAspectRatio=false, reports the base/unscaled thickness.\n */\n private reportDimensions() {\n const effectiveBarThickness = computeExternalScaleEffectiveBarThickness({\n hasBar: this.hasBar,\n barThickness: this.barThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n scaleType: this.scaleType,\n });\n\n // Use scaleReferenceSize for layout calculation when in fixedAspectRatio mode\n // This ensures consistent layout dimensions based on the design reference size\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.height;\n\n const baseDimensions = computeScaleDimensionsForReport({\n orientation: ExternalScaleOrientation.vertical,\n side: this.side,\n hasBar: this.hasBar,\n hasScale: this.hasScale,\n labels: this.showLabels,\n barThickness: effectiveBarThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n length: effectiveLength,\n scaleType: this.scaleType,\n advicePosition: this.advicePosition,\n hasAdvice: !!this.advices && this.advices.length > 0,\n hasSetpoint:\n this.setpoint !== undefined ||\n this.newSetpoint !== undefined ||\n this.departingNewSetpoint !== undefined,\n });\n\n // When fixedAspectRatio=true, the SVG scales proportionally via preserveAspectRatio=\"meet\".\n // The visual thickness = baseThickness × scale, where scale = containerSize / scaleReferenceSize.\n // Report the actual visual thickness so the chart can reserve the correct space.\n const dimensions = this.fixedAspectRatio\n ? {\n ...baseDimensions,\n thickness: Math.round(baseDimensions.thickness * this._scale),\n }\n : baseDimensions;\n\n this.dispatchEvent(\n new CustomEvent('scale-dimensions-changed', {\n detail: dimensions,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected override createRenderRoot() {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Only read from CSS variable and observe changes when not in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n this._startBorderRadiusObserver();\n }\n\n // Ensure the element fills its container when in fixedAspectRatio mode\n // Custom elements are display:inline by default, which doesn't work for percentage-based sizing\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n }\n }\n\n override disconnectedCallback(): void {\n this._borderRadiusObserver?.disconnect();\n this._borderRadiusObserver = undefined;\n super.disconnectedCallback();\n }\n\n private _startBorderRadiusObserver(): void {\n this._borderRadiusObserver?.disconnect();\n\n this._borderRadiusObserver = startExternalScaleBorderRadiusObserver(\n this,\n () => this._refreshBorderRadiusFromCssVar()\n );\n }\n\n /**\n * Apply CSS styles needed for fixedAspectRatio mode.\n * Custom elements are display:inline by default, which doesn't work with percentage-based sizing.\n * We need display:block and height:100% to fill the slot container.\n */\n private _applyFixedAspectRatioStyles(): void {\n this.style.display = 'block';\n this.style.height = '100%';\n this.style.width = 'auto';\n }\n\n /**\n * Remove fixed aspect ratio styles when switching back to pixel mode.\n */\n private _removeFixedAspectRatioStyles(): void {\n this.style.display = '';\n this.style.height = '';\n this.style.width = '';\n }\n\n /**\n * Calculate scale based on current element size.\n * Called when fixedAspectRatio is enabled or scaleReferenceSize changes.\n */\n private _updateScaleFromCurrentSize(): void {\n // Use requestAnimationFrame to ensure layout is complete\n requestAnimationFrame(() => {\n const containerHeight = this.clientHeight;\n if (containerHeight > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.vertical,\n containerMainAxisSize: containerHeight,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n this.requestUpdate();\n // Report updated dimensions to parent (matches pattern in ResizeController and _refreshBorderRadiusFromCssVar)\n this.reportDimensions();\n }\n });\n }\n\n private _refreshBorderRadiusFromCssVar(): void {\n // Skip CSS variable reading in instrument mode\n if (this.instrumentMode) return;\n\n const next = readExternalScaleBorderRadiusPx(this, this.scaleType);\n\n if (this._computedBorderRadius !== next) {\n this._computedBorderRadius = next;\n }\n\n // In fixed-aspect-ratio mode, recompute scale when border radius changes\n // (border radius affects effective bar thickness and therefore viewBox)\n if (this.fixedAspectRatio) {\n const rect = this.getBoundingClientRect();\n if (rect.height > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.vertical,\n containerMainAxisSize: rect.height,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n // Report updated dimensions\n this.reportDimensions();\n }\n }\n }\n\n /**\n * Get the effective border radius to use.\n * In instrument mode: use explicit borderRadius prop or default based on scaleType.\n * In normal mode: use CSS variable computed value.\n */\n private _getEffectiveBorderRadius(): number {\n if (this.instrumentMode) {\n // In instrument mode, use explicit value or default\n if (this.borderRadius !== undefined) {\n return this.borderRadius;\n }\n // Default: 8px for regular, 4px for condensed\n return this.scaleType === ScaleType.condensed ? 4 : 8;\n }\n // Normal mode: use CSS variable computed value\n return (\n this._computedBorderRadius ??\n (this.scaleType === ScaleType.condensed ? 4 : 8)\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-bar-vertical': ObcBarVertical;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bar-vertical.js","sources":["../../../src/building-blocks/bar-vertical/bar-vertical.ts"],"sourcesContent":["import {LitElement, html} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport type {PropertyValues} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport {ResizeController} from '@lit-labs/observers/resize-controller.js';\nimport {CHART_DIMENSIONS} from '../../charthelpers/constants.js';\nimport {\n InstrumentState,\n FrameStyle,\n BorderRadiusPosition,\n Priority,\n} from '../../navigation-instruments/types.js';\nimport type {LinearAdvice} from '../instrument-linear/advice.js';\nimport type {\n ExternalScaleAdvice,\n ExternalScaleConfig,\n} from '../external-scale/external-scale.js';\nimport {\n computeExternalScaleViewBox,\n computeFixedAspectRatioScale,\n computeExternalScaleLayout,\n renderExternalScale,\n toExternalScaleLayoutConfig,\n computeScaleDimensionsForReport,\n computeExternalScaleEffectiveBarThickness,\n readExternalScaleBorderRadiusPx,\n startExternalScaleBorderRadiusObserver,\n ScaleType,\n FillMode,\n AdvicePosition,\n BarContainerStyle,\n ExternalScaleOrientation,\n ExternalScaleSide,\n} from '../external-scale/external-scale.js';\nimport {SetpointMixin} from '../../svghelpers/setpoint-mixin.js';\n\n// Re-export shared enums for convenience\nexport {\n ScaleType,\n FillMode,\n AdvicePosition,\n FrameStyle,\n BorderRadiusPosition,\n InstrumentState,\n Priority,\n BarContainerStyle,\n ExternalScaleSide,\n};\n\n/**\n * Vertical SVG bar + external scale.\n *\n * This is a thin web-component wrapper around the pure SVG building-block renderer in `external-scale.ts`.\n *\n * It sets up the outer `<svg>`/`viewBox` for a vertical scale and delegates rendering/layout to:\n * - `computeExternalScaleLayout(...)`\n * - `renderExternalScale(config)`\n *\n * For renderer documentation see: **Building Blocks/External Scale**.\n *\n * Set `priority` to `Priority.enhanced` to use the blue/enhanced color palette\n * for bar fill and setpoint instead of the default gray/regular palette\n * (default: `Priority.regular`).\n *\n * @property minValue - Minimum scale value (manual mode)\n * @property maxValue - Maximum scale value (manual mode)\n * @property height - Total height in pixels (including padding bands)\n * @property paddingTop - Padding above the drawing area\n * @property paddingBottom - Padding below the drawing area\n * @property side - Which side this scale lives on\n * @property fixedAspectRatio - When true, freezes all internal calculations and scales the entire component\n * proportionally (like CSS transform:scale), except label font-size remains constant.\n * When false (default), dimensions react to component properties.\n * @property scaleReferenceSize - Reference size for proportional scaling when fixedAspectRatio is true.\n * At this height, the scale renders at native 1:1 (matches Figma design).\n * Above this height, the scale grows proportionally; below, it shrinks.\n * @availableWhen scaleReferenceSize fixedAspectRatio==true\n * @property hasScale - Show scale tickmarks\n * @property showMainTickmarkLabels - Label the main tickmarks (min / 0 / max) instead of the\n * primary interval ladder, for a scale too short for a ladder. A chart sets it on its\n * slotted scales below its label threshold.\n * @availableWhen showMainTickmarkLabels showLabels==true\n * @property hasBar - Show bar\n * @property scaleBackground - Show background behind the scale tickmarks.\n * @property barContainerStyle - Bar container background style.\n * When undefined, defaults based on scaleBackground.\n * Set explicitly to override: 'primary' (lighter) or 'secondary' (gray).\n * @availableWhen barContainerStyle hasBar==true\n * @property barThickness - Bar/fill thickness in pixels\n * @property tickThickness - Tickmark band thickness in pixels.\n * @property labelThickness - Label band thickness in pixels.\n * @property mainTickmarks - Array of values for main tickmarks. When undefined, no main tickmarks shown.\n * When empty array [], defaults to [minValue, 0, maxValue].\n * @property primaryTickmarkInterval - Interval for primary (longest) tickmarks with labels (minimum 1).\n * When undefined, no primary tickmarks are shown.\n * @property secondaryTickmarkInterval - Interval for secondary (medium) tickmarks (minimum 1).\n * When undefined, no secondary tickmarks are shown.\n * @property tertiaryTickmarkInterval - Interval for tertiary (shortest) tickmarks (minimum 1).\n * When undefined, no tertiary tickmarks are shown.\n * @property scaleType - Scale display mode: regular or condensed (shorter ticks)\n * @property frameStyle - Frame style: regular (4px gap for all), flat (main tickmarks touch edge), framed, or instrument\n * @property borderRadiusPosition - Border radius position based on component layout\n * @availableWhen borderRadiusPosition hasBar==true\n * @property instrumentMode - When true, the component is used inside an instrument (e.g., gauge-trend).\n * In this mode, only label font size responds to .obc-component-size-* CSS classes.\n * Border radius and bar thickness use explicit values or defaults, not CSS variables.\n * @property borderRadius - Explicit border radius value in pixels.\n * When instrumentMode=true, this value is used directly (defaults to 8px for regular, 4px for condensed).\n * When instrumentMode=false, this is ignored and border radius is read from CSS variable.\n * @availableWhen borderRadius instrumentMode==true\n * @property priority - Color priority: enhanced uses blue instrument colors for bar fill and setpoint\n * @property fillMode - Fill visualization mode: fill or tint\n * @availableWhen fillMode hasBar==true && value!=undefined\n * @property fillMin - Minimum fill value for tint mode (defaults to 0)\n * @availableWhen fillMin hasBar==true && value!=undefined\n * @property fillMax - Maximum fill value for tint mode (defaults to value)\n * @availableWhen fillMax hasBar==true && value!=undefined\n * @property value - Current value (bar fill level)\n * @property state - Instrument state (affects colors and some marker behavior)\n * @property advicePosition - Advice overlay positioning: center (in bar), inner (covers minor ticks), outer (no overlap)\n * @availableWhen advicePosition hasBar==true\n * @property advices - Advice/alert overlays with state and positioning.\n * When undefined or empty, no advice shown.\n * @property highlightCurrentValue - When true, displays a dot indicator at the current value position.\n * The dot is rendered in the scale band, touching its inner edge (towards the chart).\n * This provides an alternative to bar fill for highlighting the current value.\n * @fires {CustomEvent} scale-dimensions-changed - Fired when the scale's computed layout thickness changes; a parent chart listens for this to reserve space for the scale. Bubbles and is composed.\n * @beta\n */\n@customElement('obc-bar-vertical')\nexport class ObcBarVertical extends SetpointMixin(LitElement, {\n defaultDeadband: 1,\n}) {\n @property({type: Number}) minValue = 0;\n @property({type: Number}) maxValue = 100;\n\n @property({type: Number}) height = 320;\n\n @property({type: Number}) paddingTop: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: Number}) paddingBottom: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: String}) side: ExternalScaleSide = ExternalScaleSide.right;\n\n @property({type: Boolean})\n fixedAspectRatio = false;\n\n @property({type: Number})\n scaleReferenceSize = 384;\n\n @state()\n private _scale = 1;\n\n // ResizeController automatically subscribes/unsubscribes based on component lifecycle\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _resizeController = new ResizeController(this, {\n callback: (entries) => {\n if (!this.fixedAspectRatio) return;\n\n const entry = entries[0];\n if (!entry) return;\n\n // Use the centralized function that computes scale based on reference size\n // For vertical scales, compare container height to reference size\n const containerMainAxisSize = entry.contentRect.height;\n\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.vertical,\n containerMainAxisSize,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n\n // Report scaled dimensions to parent chart\n this.reportDimensions();\n },\n });\n\n // Bands (thickness)\n @property({type: Boolean, attribute: false}) hasScale = true;\n @property({type: Boolean, attribute: false}) showLabels = true;\n @property({type: Boolean}) showMainTickmarkLabels = false;\n @property({type: Boolean}) hasBar = false;\n @property({type: Boolean})\n scaleBackground = false;\n @property({type: String})\n barContainerStyle?: BarContainerStyle = undefined;\n @property({type: Number}) barThickness = 24;\n @property({type: Number}) tickThickness = 24;\n @property({type: Number}) labelThickness = 60;\n\n // Tick configuration\n @property({type: Array, attribute: false}) mainTickmarks?: number[] = [];\n @property({type: Number}) primaryTickmarkInterval?: number = undefined;\n @property({type: Number}) secondaryTickmarkInterval?: number = undefined;\n @property({type: Number}) tertiaryTickmarkInterval?: number = undefined;\n @property({type: String}) scaleType: ScaleType = ScaleType.regular;\n @property({type: String}) frameStyle: FrameStyle = FrameStyle.regular;\n @property({type: String})\n borderRadiusPosition?: BorderRadiusPosition = undefined;\n\n @property({type: Boolean})\n instrumentMode = false;\n\n @property({type: Number})\n borderRadius?: number = undefined;\n\n @state()\n private _computedBorderRadius?: number;\n\n private _borderRadiusObserver?: MutationObserver;\n\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _borderRadiusResizeController = new ResizeController(this, {\n callback: () => {\n // Skip CSS variable reading in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n }\n },\n });\n\n // Values\n @property({type: String}) priority: Priority = Priority.regular;\n @property({type: String}) fillMode: FillMode = FillMode.fill;\n @property({type: Number}) fillMin?: number = undefined;\n @property({type: Number}) fillMax?: number = undefined;\n @property({type: Number}) value?: number = undefined;\n\n @property({type: String}) state: InstrumentState = InstrumentState.active;\n\n // Advice\n @property({type: String}) advicePosition: AdvicePosition =\n AdvicePosition.inner;\n @property({type: Array, attribute: false}) advices?: LinearAdvice[] = [];\n\n @property({type: Boolean}) highlightCurrentValue = false;\n\n override render() {\n // When fixedAspectRatio is true, use scaleReferenceSize for the viewBox length.\n // This makes the SVG render at the \"design reference size\" and then scale\n // proportionally to fit the actual container via preserveAspectRatio=\"xMidYMid meet\".\n // The _scale CSS variable counter-scales text labels to maintain constant visual size.\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.height;\n\n // The parent chart component (chart-line-base) calculates and passes the correct\n // viewBox padding values when fixedAspectRatioScaling is enabled. The padding is\n // pre-scaled to: basePadding * scaleReferenceSize / referenceHeight\n // This ensures the visual padding matches the chart's Canvas padding at any aspect ratio.\n\n const config: ExternalScaleConfig = {\n orientation: ExternalScaleOrientation.vertical,\n side: this.side,\n length: effectiveLength,\n paddingStart: this.paddingTop,\n paddingEnd: this.paddingBottom,\n minValue: this.minValue,\n maxValue: this.maxValue,\n hasScale: this.hasScale,\n labels: this.showLabels,\n mainTickmarkLabels: this.showMainTickmarkLabels,\n hasBar: this.hasBar,\n scaleBackground: this.scaleBackground,\n barContainerStyle: this.barContainerStyle,\n barThickness: this.barThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n mainTickmarks: this.mainTickmarks,\n primaryTickmarkInterval: this.primaryTickmarkInterval,\n secondaryTickmarkInterval: this.secondaryTickmarkInterval,\n tertiaryTickmarkInterval: this.tertiaryTickmarkInterval,\n scaleType: this.scaleType,\n frameStyle: this.frameStyle,\n borderRadiusPosition: this.borderRadiusPosition,\n priority: this.priority,\n setpointOverride: this.setpointOverride,\n fillMode: this.fillMode,\n fillMin: this.fillMin,\n fillMax: this.fillMax,\n value: this.value,\n setpoint: this.setpoint,\n newSetpoint: this.newSetpoint,\n atSetpoint: this.atSetpoint,\n autoAtSetpoint: this.autoAtSetpoint,\n autoAtSetpointDeadband: this.autoAtSetpointDeadband,\n setpointAtZeroDeadband: this.setpointAtZeroDeadband,\n animateSetpoint: this.animateSetpoint,\n departingNewSetpoint: this.departingNewSetpoint,\n state: this.state,\n touching: this.touching,\n advicePosition: this.advicePosition,\n advices: this.advices as ExternalScaleAdvice[],\n fixedAspectRatio: this.fixedAspectRatio,\n instrumentMode: this.instrumentMode,\n highlightCurrentValue: this.highlightCurrentValue,\n };\n\n const layout = computeExternalScaleLayout(\n toExternalScaleLayoutConfig(config)\n );\n\n const parts = renderExternalScale(config);\n\n const viewBox = computeExternalScaleViewBox(\n {orientation: config.orientation, length: effectiveLength},\n layout\n );\n const preserveAspectRatio = this.fixedAspectRatio\n ? 'xMidYMid meet'\n : 'none';\n\n return html`\n <svg\n width=${this.fixedAspectRatio ? '100%' : `${viewBox.width}px`}\n height=${this.fixedAspectRatio ? '100%' : `${this.height}px`}\n viewBox=\"${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}\"\n preserveAspectRatio=\"${preserveAspectRatio}\"\n style=\"--scale: ${this.fixedAspectRatio ? this._scale : 1};\"\n part=\"svg\"\n >\n ${parts.barContainer} ${parts.barFill} ${parts.scaleBackground}\n ${parts.tickmarks} ${parts.labels} ${parts.adviceOverlays}\n ${parts.currentValueDot} ${parts.setpoint}\n </svg>\n `;\n }\n\n override updated(changed: PropertyValues) {\n super.updated(changed);\n\n if (changed.has('scaleType')) {\n this._refreshBorderRadiusFromCssVar();\n }\n\n // Update host styles when fixedAspectRatio changes\n if (changed.has('fixedAspectRatio')) {\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n // Force initial scale calculation based on current size\n this._updateScaleFromCurrentSize();\n } else {\n this._removeFixedAspectRatioStyles();\n this._scale = 1;\n }\n }\n\n // Also recalculate scale when scaleReferenceSize changes\n if (changed.has('scaleReferenceSize') && this.fixedAspectRatio) {\n this._updateScaleFromCurrentSize();\n }\n\n // Report dimensions to parent chart when layout-affecting properties change.\n // In fixedAspectRatio mode, resize events also trigger reportDimensions() via ResizeController.\n // In regular mode, we report on every update to keep parent chart in sync.\n // Layout-affecting properties change the computed thickness and must notify the parent\n // even in fixedAspectRatio mode to keep chart padding accurate.\n const layoutChanged =\n changed.has('side') ||\n changed.has('showLabels') ||\n changed.has('showMainTickmarkLabels') ||\n changed.has('hasScale') ||\n changed.has('hasBar') ||\n changed.has('barThickness') ||\n changed.has('tickThickness') ||\n changed.has('labelThickness') ||\n changed.has('scaleType') ||\n changed.has('borderRadiusPosition') ||\n changed.has('borderRadius') ||\n changed.has('advices') ||\n changed.has('advicePosition') ||\n this.setpointPresenceChanged(changed);\n\n if (!this.fixedAspectRatio || layoutChanged) {\n this.reportDimensions();\n }\n }\n\n /**\n * Report scale dimensions to parent chart component.\n * When fixedAspectRatio=true, reports the actual visual (scaled) thickness\n * so the chart can correctly reserve space for the scale.\n * When fixedAspectRatio=false, reports the base/unscaled thickness.\n */\n private reportDimensions() {\n const effectiveBarThickness = computeExternalScaleEffectiveBarThickness({\n hasBar: this.hasBar,\n barThickness: this.barThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n scaleType: this.scaleType,\n });\n\n // Use scaleReferenceSize for layout calculation when in fixedAspectRatio mode\n // This ensures consistent layout dimensions based on the design reference size\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.height;\n\n const baseDimensions = computeScaleDimensionsForReport({\n orientation: ExternalScaleOrientation.vertical,\n side: this.side,\n hasBar: this.hasBar,\n hasScale: this.hasScale,\n labels: this.showLabels,\n barThickness: effectiveBarThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n length: effectiveLength,\n scaleType: this.scaleType,\n advicePosition: this.advicePosition,\n hasAdvice: !!this.advices && this.advices.length > 0,\n hasSetpoint:\n this.setpoint !== undefined ||\n this.newSetpoint !== undefined ||\n this.departingNewSetpoint !== undefined,\n });\n\n // When fixedAspectRatio=true, the SVG scales proportionally via preserveAspectRatio=\"meet\".\n // The visual thickness = baseThickness × scale, where scale = containerSize / scaleReferenceSize.\n // Report the actual visual thickness so the chart can reserve the correct space.\n const dimensions = this.fixedAspectRatio\n ? {\n ...baseDimensions,\n thickness: Math.round(baseDimensions.thickness * this._scale),\n }\n : baseDimensions;\n\n this.dispatchEvent(\n new CustomEvent('scale-dimensions-changed', {\n detail: dimensions,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected override createRenderRoot() {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Only read from CSS variable and observe changes when not in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n this._startBorderRadiusObserver();\n }\n\n // Ensure the element fills its container when in fixedAspectRatio mode\n // Custom elements are display:inline by default, which doesn't work for percentage-based sizing\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n }\n }\n\n override disconnectedCallback(): void {\n this._borderRadiusObserver?.disconnect();\n this._borderRadiusObserver = undefined;\n super.disconnectedCallback();\n }\n\n private _startBorderRadiusObserver(): void {\n this._borderRadiusObserver?.disconnect();\n\n this._borderRadiusObserver = startExternalScaleBorderRadiusObserver(\n this,\n () => this._refreshBorderRadiusFromCssVar()\n );\n }\n\n /**\n * Apply CSS styles needed for fixedAspectRatio mode.\n * Custom elements are display:inline by default, which doesn't work with percentage-based sizing.\n * We need display:block and height:100% to fill the slot container.\n */\n private _applyFixedAspectRatioStyles(): void {\n this.style.display = 'block';\n this.style.height = '100%';\n this.style.width = 'auto';\n }\n\n /**\n * Remove fixed aspect ratio styles when switching back to pixel mode.\n */\n private _removeFixedAspectRatioStyles(): void {\n this.style.display = '';\n this.style.height = '';\n this.style.width = '';\n }\n\n /**\n * Calculate scale based on current element size.\n * Called when fixedAspectRatio is enabled or scaleReferenceSize changes.\n */\n private _updateScaleFromCurrentSize(): void {\n // Use requestAnimationFrame to ensure layout is complete\n requestAnimationFrame(() => {\n const containerHeight = this.clientHeight;\n if (containerHeight > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.vertical,\n containerMainAxisSize: containerHeight,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n this.requestUpdate();\n // Report updated dimensions to parent (matches pattern in ResizeController and _refreshBorderRadiusFromCssVar)\n this.reportDimensions();\n }\n });\n }\n\n private _refreshBorderRadiusFromCssVar(): void {\n // Skip CSS variable reading in instrument mode\n if (this.instrumentMode) return;\n\n const next = readExternalScaleBorderRadiusPx(this, this.scaleType);\n\n if (this._computedBorderRadius !== next) {\n this._computedBorderRadius = next;\n }\n\n // In fixed-aspect-ratio mode, recompute scale when border radius changes\n // (border radius affects effective bar thickness and therefore viewBox)\n if (this.fixedAspectRatio) {\n const rect = this.getBoundingClientRect();\n if (rect.height > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.vertical,\n containerMainAxisSize: rect.height,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n // Report updated dimensions\n this.reportDimensions();\n }\n }\n }\n\n /**\n * Get the effective border radius to use.\n * In instrument mode: use explicit borderRadius prop or default based on scaleType.\n * In normal mode: use CSS variable computed value.\n */\n private _getEffectiveBorderRadius(): number {\n if (this.instrumentMode) {\n // In instrument mode, use explicit value or default\n if (this.borderRadius !== undefined) {\n return this.borderRadius;\n }\n // Default: 8px for regular, 4px for condensed\n return this.scaleType === ScaleType.condensed ? 4 : 8;\n }\n // Normal mode: use CSS variable computed value\n return (\n this._computedBorderRadius ??\n (this.scaleType === ScaleType.condensed ? 4 : 8)\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-bar-vertical': ObcBarVertical;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -32,6 +32,13 @@ export declare enum TimeDisplay {
32
32
  minutes = "minutes",
33
33
  date = "date"
34
34
  }
35
+ /** Which axes keep min / max labels below the label threshold. */
36
+ export declare enum RangeLabels {
37
+ none = "none",
38
+ y = "y",
39
+ x = "x",
40
+ xy = "xy"
41
+ }
35
42
  export type ChartLinePoint = number | {
36
43
  x: ChartXValue;
37
44
  y: number;
@@ -54,6 +61,10 @@ export type ChartLineYAxisConfig = {
54
61
  max?: number;
55
62
  grid?: boolean;
56
63
  };
64
+ export type ChartLineXAxisConfig = {
65
+ min?: number;
66
+ max?: number;
67
+ };
57
68
  /**
58
69
  * Abstract base class for line and area chart components built on Chart.js.
59
70
  *
@@ -209,12 +220,21 @@ export type ChartLineYAxisConfig = {
209
220
  * numeric x-values.
210
221
  * @property yAxisPosition - Single y-axis position ('left' or 'right'). For multiple y-axes, use yAxes instead.
211
222
  * @property yAxes - Multiple y-axis definitions for complex multi-axis charts.
223
+ * @property xAxis - Pinned x range (`min`/`max`) for time and number axes. Without it the
224
+ * axis spans exactly the data, so a window that is still filling stretches across the
225
+ * full width. In `minutes` display `max` is the `0min` reference.
226
+ * @availableWhen xAxis xAxisType!=category
212
227
  * @property showGrid - Show grid lines.
213
228
  * @property showGridX - Show vertical grid lines (x-axis). Default: false.
214
229
  * @availableWhen showGridX showGrid==true
215
230
  * @property showGridY - Show horizontal grid lines (y-axis). Default: false.
216
231
  * @availableWhen showGridY showGrid==true
217
232
  * @property showTickMarks - Show axis tick marks and labels.
233
+ * @property rangeLabels - Labels kept below the 192px threshold, where the axis labels are
234
+ * otherwise hidden: 'y' draws min, max and (inside the range) 0 in a gutter on the
235
+ * y-axis side; 'x' draws the first and last x value in a bottom gutter; 'xy' both.
236
+ * Ignored when `hasLabelPadding` is false.
237
+ * @availableWhen rangeLabels hasLabelPadding==true
218
238
  * @property showPoints - Show point markers on data points. Default: false.
219
239
  * @property lineMode - Line drawing style: 'smooth' (curved), 'straight', or 'stepped'.
220
240
  * @property unit - Unit label displayed in tooltips (e.g., 'kW', 'kg', '%').
@@ -266,6 +286,12 @@ export declare class ObcChartLineBase extends LitElement {
266
286
  yAxisPosition: YAxisPosition;
267
287
  /** Multiple y-axis definitions for complex multi-axis charts. */
268
288
  yAxes?: ChartLineYAxisConfig[];
289
+ /**
290
+ * Pinned x range (`min`/`max`) for time and number axes. Without it the axis spans exactly the data, so a window that is still filling stretches across the full width. In `minutes` display `max` is the `0min` reference.
291
+ *
292
+ * Available when `xAxisType!=category`.
293
+ */
294
+ xAxis?: ChartLineXAxisConfig;
269
295
  /** Show grid lines. */
270
296
  showGrid: boolean;
271
297
  /**
@@ -300,12 +326,29 @@ export declare class ObcChartLineBase extends LitElement {
300
326
  * because a `true`-default boolean cannot work as an HTML boolean attribute.
301
327
  */
302
328
  hasLabelPadding: boolean;
329
+ /**
330
+ * Labels kept below the 192px threshold, where the axis labels are otherwise hidden: 'y' draws min, max and (inside the range) 0 in a gutter on the y-axis side; 'x' draws the first and last x value in a bottom gutter; 'xy' both. Ignored when `hasLabelPadding` is false.
331
+ *
332
+ * Available when `hasLabelPadding==true`.
333
+ */
334
+ rangeLabels: RangeLabels;
335
+ /** @internal - The y side wants range labels; an edge-to-edge chart never does. */
336
+ protected get rangeLabelsY(): boolean;
337
+ /** @internal - The x side wants range labels; an edge-to-edge chart never does. */
338
+ protected get rangeLabelsX(): boolean;
303
339
  /** @internal - True when the x-axis positions points by numeric value. */
304
340
  protected get isNumericXAxis(): boolean;
341
+ /**
342
+ * Id of the y scale a dataset lands on when it names none. Chart.js would
343
+ * otherwise add a default `y` scale next to the configured ones and draw it.
344
+ */
345
+ private get primaryYAxisId();
305
346
  /** @internal - Normalization mode for the current x-axis type. */
306
347
  protected get xValueMode(): XValueMode;
307
348
  /** @internal - Last data/datasets reference already warned about. */
308
349
  private lastWarnedXSource?;
350
+ /** @internal - Whether the `date`-display scale warning has been issued. */
351
+ private warnedDateDisplayScale;
309
352
  /** @internal - Warn once per data assignment about unparseable x-values. */
310
353
  private warnOnInvalidX;
311
354
  private readonly DEFAULT_TENSION;
@@ -417,6 +460,63 @@ export declare class ObcChartLineBase extends LitElement {
417
460
  * - When external scale is on BOTTOM, chart is on TOP (opposite)
418
461
  * - middleChild → no rounding
419
462
  */
463
+ /**
464
+ * @internal - Label band each slotted scale had before the chart narrowed
465
+ * it for compact labels, so it can be given back on the way out.
466
+ */
467
+ private savedLabelThickness;
468
+ private savedMainTickmarkLabels;
469
+ /** Last known threshold side, to notice a crossing in `updated()`. */
470
+ private wasBelowThreshold?;
471
+ /**
472
+ * Label band a slotted scale needs for its compact labels, in the scale's
473
+ * own viewBox units. The scale prints the raw values, so those are what is
474
+ * measured; the x band is one text line.
475
+ */
476
+ private compactLabelThickness;
477
+ /** @internal - Labels the range-labels plugin drew last, for tests. */
478
+ lastRangeLabels: {
479
+ axis: 'x' | 'y';
480
+ text: string;
481
+ x: number;
482
+ y: number;
483
+ }[];
484
+ /**
485
+ * Range labels for the current data and size, refreshed with every
486
+ * `getChartOptions()` so the plugin never rebuilds the datasets on a draw.
487
+ */
488
+ private rangeLabelCache;
489
+ private slotFor;
490
+ private hasSlottedScale;
491
+ /** @internal - Below the label threshold on either dimension. */
492
+ private isBelowThreshold;
493
+ private get ySide();
494
+ private rangeLabelFont;
495
+ /**
496
+ * Extent of the prepared data: one for x, one per y scale id. Each y axis
497
+ * ranges from its own datasets, so a merged extent would label one axis
498
+ * with another's values.
499
+ */
500
+ private dataExtents;
501
+ /**
502
+ * Range the y labels describe. Below the threshold the axis runs on data
503
+ * bounds, so its datasets' extent is exact and needs no chart to read from.
504
+ */
505
+ private yRangeBounds;
506
+ /** First and last x label, or nothing when there is no span to label. */
507
+ private xEdgeLabelTexts;
508
+ /**
509
+ * Recompute the range labels. A side with a slotted scale is labelled by
510
+ * the scale, so it gets no text here; the y bounds are kept regardless,
511
+ * since the scale's compact band is measured from them.
512
+ */
513
+ private refreshRangeLabels;
514
+ /**
515
+ * Paints min / 0 / max and first / last once Chart.js has drawn, inside the
516
+ * gutters `getChartOptions()` reserved. The end labels sit flush with the
517
+ * plot edges so no vertical padding is needed for them.
518
+ */
519
+ private createRangeLabelsPlugin;
420
520
  /**
421
521
  * Check if a slotted scale element is actually visible (renders content).
422
522
  * For bar-vertical/bar-horizontal elements, checks hasBar and hasScale properties.
@@ -466,10 +566,40 @@ export declare class ObcChartLineBase extends LitElement {
466
566
  * collapses with the chart's perpendicular padding and they stay visually aligned.
467
567
  */
468
568
  private calculatePaddingFromScales;
569
+ /**
570
+ * Range a slotted scale on the given side has to cover.
571
+ *
572
+ * A range pinned in the axis configuration is used as is: it is the source
573
+ * of truth, and on the first sync there is no chart to read yet. Otherwise
574
+ * the live Chart.js scale is read under the id `buildScalesConfig()` gives
575
+ * it. A side with no axis of its own follows the first configured one.
576
+ */
577
+ private resolveAxisRange;
578
+ /**
579
+ * Range pushed to the top and bottom scales, or `undefined` to leave them
580
+ * alone. A scale prints its values verbatim, and on a `time` axis the raw
581
+ * range is epoch milliseconds. In `minutes` display the range is converted
582
+ * to the minutes the chart's own labels show; `date` display has no numeric
583
+ * equivalent, so the scale keeps its own range.
584
+ */
585
+ private resolveSlottedXRange;
469
586
  /**
470
587
  * Update properties on slotted scale elements
471
588
  */
472
589
  private updateScaleProperties;
590
+ /**
591
+ * Whether the chart's axis range is what a slotted scale on this side should
592
+ * describe. A subclass that slots a scale of its own and gives it a separate
593
+ * range returns false for that side, otherwise the sync below overwrites it.
594
+ */
595
+ protected ownsSlottedScaleRange(_side: 'left' | 'right' | 'top' | 'bottom'): boolean;
596
+ /**
597
+ * Push the current axis ranges to the slotted scales. The full
598
+ * `updateScaleProperties()` cascade runs before the chart is (re)built and
599
+ * so reads the previous chart's ranges; this closes that gap once the new
600
+ * chart exists, and keeps auto-ranged scales in step with the data.
601
+ */
602
+ private syncSlottedScaleRanges;
473
603
  private hasAnyChanged;
474
604
  /**
475
605
  * Apply fillMode rules to datasets. Must be called after the chart is created
@@ -563,6 +693,11 @@ export declare class ObcChartLineBase extends LitElement {
563
693
  datasets: ChartDataset<"line", ChartLinePoint[]>[];
564
694
  labels: (string | number)[];
565
695
  };
696
+ /**
697
+ * One padding source for the Chart.js layout and the slotted scales: two
698
+ * sources painted the canvas over a scale and inset a scale inside a chart.
699
+ */
700
+ private computeChartPadding;
566
701
  /**
567
702
  * Get Chart.js options with dynamic sizing and padding
568
703
  */
@@ -570,6 +705,8 @@ export declare class ObcChartLineBase extends LitElement {
570
705
  /**
571
706
  * Compute reference timestamp for time axis formatting.
572
707
  * Returns earliest timestamp for 'date' mode, latest for 'minutes' mode.
708
+ * A pinned x range supplies the reference instead, so the axis edge stays
709
+ * the reference while the data has not reached it yet.
573
710
  */
574
711
  private computeTimeReference;
575
712
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chart-line-base.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/chart-line/chart-line-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chart-line-base.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/chart-line/chart-line-base.ts"],"names":[],"mappings":"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"}