@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
@@ -42834,6 +42834,24 @@
42834
42834
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
42835
42835
  }
42836
42836
  },
42837
+ {
42838
+ "kind": "field",
42839
+ "name": "xAxis",
42840
+ "type": {
42841
+ "text": "ChartLineXAxisConfig | undefined"
42842
+ },
42843
+ "default": "undefined",
42844
+ "description": "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.\n\nAvailable when `xAxisType!=category`.",
42845
+ "availableWhen": "xAxisType!=category",
42846
+ "availableWhenIf": {
42847
+ "arg": "xAxisType",
42848
+ "neq": "category"
42849
+ },
42850
+ "inheritedFrom": {
42851
+ "name": "ObcChartLineBase",
42852
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
42853
+ }
42854
+ },
42837
42855
  {
42838
42856
  "kind": "field",
42839
42857
  "name": "showGrid",
@@ -42913,6 +42931,38 @@
42913
42931
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
42914
42932
  }
42915
42933
  },
42934
+ {
42935
+ "kind": "field",
42936
+ "name": "rangeLabels",
42937
+ "type": {
42938
+ "text": "RangeLabels"
42939
+ },
42940
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
42941
+ "attribute": "rangeLabels",
42942
+ "availableWhen": "hasLabelPadding==true",
42943
+ "availableWhenIf": {
42944
+ "arg": "hasLabelPadding",
42945
+ "truthy": true
42946
+ },
42947
+ "inheritedFrom": {
42948
+ "name": "ObcChartLineBase",
42949
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
42950
+ }
42951
+ },
42952
+ {
42953
+ "kind": "field",
42954
+ "name": "primaryYAxisId",
42955
+ "type": {
42956
+ "text": "string"
42957
+ },
42958
+ "privacy": "private",
42959
+ "description": "Id of the y scale a dataset lands on when it names none. Chart.js would\notherwise add a default `y` scale next to the configured ones and draw it.",
42960
+ "readonly": true,
42961
+ "inheritedFrom": {
42962
+ "name": "ObcChartLineBase",
42963
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
42964
+ }
42965
+ },
42916
42966
  {
42917
42967
  "kind": "field",
42918
42968
  "name": "DEFAULT_TENSION",
@@ -43192,6 +43242,237 @@
43192
43242
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
43193
43243
  }
43194
43244
  },
43245
+ {
43246
+ "kind": "field",
43247
+ "name": "savedMainTickmarkLabels",
43248
+ "privacy": "private",
43249
+ "default": "new WeakMap< ExternalScaleElement, boolean >()",
43250
+ "inheritedFrom": {
43251
+ "name": "ObcChartLineBase",
43252
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43253
+ }
43254
+ },
43255
+ {
43256
+ "kind": "field",
43257
+ "name": "wasBelowThreshold",
43258
+ "type": {
43259
+ "text": "boolean | undefined"
43260
+ },
43261
+ "privacy": "private",
43262
+ "description": "Last known threshold side, to notice a crossing in `updated()`.",
43263
+ "inheritedFrom": {
43264
+ "name": "ObcChartLineBase",
43265
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43266
+ }
43267
+ },
43268
+ {
43269
+ "kind": "method",
43270
+ "name": "compactLabelThickness",
43271
+ "privacy": "private",
43272
+ "return": {
43273
+ "type": {
43274
+ "text": "number | undefined"
43275
+ }
43276
+ },
43277
+ "parameters": [
43278
+ {
43279
+ "name": "axis",
43280
+ "type": {
43281
+ "text": "'x' | 'y'"
43282
+ }
43283
+ }
43284
+ ],
43285
+ "description": "Label band a slotted scale needs for its compact labels, in the scale's\nown viewBox units. The scale prints the raw values, so those are what is\nmeasured; the x band is one text line.",
43286
+ "inheritedFrom": {
43287
+ "name": "ObcChartLineBase",
43288
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43289
+ }
43290
+ },
43291
+ {
43292
+ "kind": "field",
43293
+ "name": "rangeLabelCache",
43294
+ "type": {
43295
+ "text": "{\n y: string[];\n x: string[];\n bounds?: {min: number; max: number};\n }"
43296
+ },
43297
+ "privacy": "private",
43298
+ "default": "{y: [], x: []}",
43299
+ "description": "Range labels for the current data and size, refreshed with every\n`getChartOptions()` so the plugin never rebuilds the datasets on a draw.",
43300
+ "inheritedFrom": {
43301
+ "name": "ObcChartLineBase",
43302
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43303
+ }
43304
+ },
43305
+ {
43306
+ "kind": "method",
43307
+ "name": "slotFor",
43308
+ "privacy": "private",
43309
+ "return": {
43310
+ "type": {
43311
+ "text": "HTMLSlotElement | undefined"
43312
+ }
43313
+ },
43314
+ "parameters": [
43315
+ {
43316
+ "name": "side",
43317
+ "type": {
43318
+ "text": "'left' | 'right' | 'top' | 'bottom'"
43319
+ }
43320
+ }
43321
+ ],
43322
+ "inheritedFrom": {
43323
+ "name": "ObcChartLineBase",
43324
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43325
+ }
43326
+ },
43327
+ {
43328
+ "kind": "method",
43329
+ "name": "hasSlottedScale",
43330
+ "privacy": "private",
43331
+ "return": {
43332
+ "type": {
43333
+ "text": "boolean"
43334
+ }
43335
+ },
43336
+ "parameters": [
43337
+ {
43338
+ "name": "side",
43339
+ "type": {
43340
+ "text": "'left' | 'right' | 'top' | 'bottom'"
43341
+ }
43342
+ }
43343
+ ],
43344
+ "inheritedFrom": {
43345
+ "name": "ObcChartLineBase",
43346
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43347
+ }
43348
+ },
43349
+ {
43350
+ "kind": "field",
43351
+ "name": "ySide",
43352
+ "type": {
43353
+ "text": "'left' | 'right'"
43354
+ },
43355
+ "privacy": "private",
43356
+ "readonly": true,
43357
+ "inheritedFrom": {
43358
+ "name": "ObcChartLineBase",
43359
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43360
+ }
43361
+ },
43362
+ {
43363
+ "kind": "method",
43364
+ "name": "rangeLabelFont",
43365
+ "privacy": "private",
43366
+ "return": {
43367
+ "type": {
43368
+ "text": "RangeLabelFont"
43369
+ }
43370
+ },
43371
+ "inheritedFrom": {
43372
+ "name": "ObcChartLineBase",
43373
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43374
+ }
43375
+ },
43376
+ {
43377
+ "kind": "method",
43378
+ "name": "dataExtents",
43379
+ "privacy": "private",
43380
+ "return": {
43381
+ "type": {
43382
+ "text": "{\n x?: {min: number; max: number};\n y: Map<string, {min: number; max: number}>;\n }"
43383
+ }
43384
+ },
43385
+ "parameters": [
43386
+ {
43387
+ "name": "prepared",
43388
+ "type": {
43389
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
43390
+ }
43391
+ }
43392
+ ],
43393
+ "description": "Extent of the prepared data: one for x, one per y scale id. Each y axis\nranges from its own datasets, so a merged extent would label one axis\nwith another's values.",
43394
+ "inheritedFrom": {
43395
+ "name": "ObcChartLineBase",
43396
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43397
+ }
43398
+ },
43399
+ {
43400
+ "kind": "method",
43401
+ "name": "yRangeBounds",
43402
+ "privacy": "private",
43403
+ "return": {
43404
+ "type": {
43405
+ "text": "{min: number; max: number} | undefined"
43406
+ }
43407
+ },
43408
+ "parameters": [
43409
+ {
43410
+ "name": "extents",
43411
+ "type": {
43412
+ "text": "Map<string, {min: number; max: number}>"
43413
+ }
43414
+ }
43415
+ ],
43416
+ "description": "Range the y labels describe. Below the threshold the axis runs on data\nbounds, so its datasets' extent is exact and needs no chart to read from.",
43417
+ "inheritedFrom": {
43418
+ "name": "ObcChartLineBase",
43419
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43420
+ }
43421
+ },
43422
+ {
43423
+ "kind": "method",
43424
+ "name": "xEdgeLabelTexts",
43425
+ "privacy": "private",
43426
+ "return": {
43427
+ "type": {
43428
+ "text": "string[]"
43429
+ }
43430
+ },
43431
+ "parameters": [
43432
+ {
43433
+ "name": "prepared",
43434
+ "type": {
43435
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
43436
+ }
43437
+ },
43438
+ {
43439
+ "name": "extent",
43440
+ "type": {
43441
+ "text": "{min: number; max: number} | undefined"
43442
+ }
43443
+ }
43444
+ ],
43445
+ "description": "First and last x label, or nothing when there is no span to label.",
43446
+ "inheritedFrom": {
43447
+ "name": "ObcChartLineBase",
43448
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43449
+ }
43450
+ },
43451
+ {
43452
+ "kind": "method",
43453
+ "name": "refreshRangeLabels",
43454
+ "privacy": "private",
43455
+ "return": {
43456
+ "type": {
43457
+ "text": "typeof this.rangeLabelCache"
43458
+ }
43459
+ },
43460
+ "description": "Recompute the range labels. A side with a slotted scale is labelled by\nthe scale, so it gets no text here; the y bounds are kept regardless,\nsince the scale's compact band is measured from them.",
43461
+ "inheritedFrom": {
43462
+ "name": "ObcChartLineBase",
43463
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43464
+ }
43465
+ },
43466
+ {
43467
+ "kind": "method",
43468
+ "name": "createRangeLabelsPlugin",
43469
+ "privacy": "private",
43470
+ "description": "Paints min / 0 / max and first / last once Chart.js has drawn, inside the\ngutters `getChartOptions()` reserved. The end labels sit flush with the\nplot edges so no vertical padding is needed for them.",
43471
+ "inheritedFrom": {
43472
+ "name": "ObcChartLineBase",
43473
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43474
+ }
43475
+ },
43195
43476
  {
43196
43477
  "kind": "method",
43197
43478
  "name": "hasVisibleScale",
@@ -43319,6 +43600,44 @@
43319
43600
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
43320
43601
  }
43321
43602
  },
43603
+ {
43604
+ "kind": "method",
43605
+ "name": "resolveAxisRange",
43606
+ "privacy": "private",
43607
+ "return": {
43608
+ "type": {
43609
+ "text": "{\n min: number;\n max: number;\n }"
43610
+ }
43611
+ },
43612
+ "parameters": [
43613
+ {
43614
+ "name": "side",
43615
+ "type": {
43616
+ "text": "'left' | 'right' | 'x'"
43617
+ }
43618
+ }
43619
+ ],
43620
+ "description": "Range a slotted scale on the given side has to cover.\n\nA range pinned in the axis configuration is used as is: it is the source\nof truth, and on the first sync there is no chart to read yet. Otherwise\nthe live Chart.js scale is read under the id `buildScalesConfig()` gives\nit. A side with no axis of its own follows the first configured one.",
43621
+ "inheritedFrom": {
43622
+ "name": "ObcChartLineBase",
43623
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43624
+ }
43625
+ },
43626
+ {
43627
+ "kind": "method",
43628
+ "name": "resolveSlottedXRange",
43629
+ "privacy": "private",
43630
+ "return": {
43631
+ "type": {
43632
+ "text": "{min: number; max: number} | undefined"
43633
+ }
43634
+ },
43635
+ "description": "Range pushed to the top and bottom scales, or `undefined` to leave them\nalone. A scale prints its values verbatim, and on a `time` axis the raw\nrange is epoch milliseconds. In `minutes` display the range is converted\nto the minutes the chart's own labels show; `date` display has no numeric\nequivalent, so the scale keeps its own range.",
43636
+ "inheritedFrom": {
43637
+ "name": "ObcChartLineBase",
43638
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43639
+ }
43640
+ },
43322
43641
  {
43323
43642
  "kind": "method",
43324
43643
  "name": "updateScaleProperties",
@@ -43337,6 +43656,39 @@
43337
43656
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
43338
43657
  }
43339
43658
  },
43659
+ {
43660
+ "kind": "method",
43661
+ "name": "ownsSlottedScaleRange",
43662
+ "privacy": "protected",
43663
+ "return": {
43664
+ "type": {
43665
+ "text": "boolean"
43666
+ }
43667
+ },
43668
+ "parameters": [
43669
+ {
43670
+ "name": "_side",
43671
+ "type": {
43672
+ "text": "'left' | 'right' | 'top' | 'bottom'"
43673
+ }
43674
+ }
43675
+ ],
43676
+ "description": "Whether the chart's axis range is what a slotted scale on this side should\ndescribe. A subclass that slots a scale of its own and gives it a separate\nrange returns false for that side, otherwise the sync below overwrites it.",
43677
+ "inheritedFrom": {
43678
+ "name": "ObcChartLineBase",
43679
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43680
+ }
43681
+ },
43682
+ {
43683
+ "kind": "method",
43684
+ "name": "syncSlottedScaleRanges",
43685
+ "privacy": "private",
43686
+ "description": "Push the current axis ranges to the slotted scales. The full\n`updateScaleProperties()` cascade runs before the chart is (re)built and\nso reads the previous chart's ranges; this closes that gap once the new\nchart exists, and keeps auto-ranged scales in step with the data.",
43687
+ "inheritedFrom": {
43688
+ "name": "ObcChartLineBase",
43689
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43690
+ }
43691
+ },
43340
43692
  {
43341
43693
  "kind": "method",
43342
43694
  "name": "hasAnyChanged",
@@ -43547,6 +43899,21 @@
43547
43899
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
43548
43900
  }
43549
43901
  },
43902
+ {
43903
+ "kind": "method",
43904
+ "name": "computeChartPadding",
43905
+ "privacy": "private",
43906
+ "return": {
43907
+ "type": {
43908
+ "text": "{\n top: number;\n right: number;\n bottom: number;\n left: number;\n }"
43909
+ }
43910
+ },
43911
+ "description": "One padding source for the Chart.js layout and the slotted scales: two\nsources painted the canvas over a scale and inset a scale inside a chart.",
43912
+ "inheritedFrom": {
43913
+ "name": "ObcChartLineBase",
43914
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
43915
+ }
43916
+ },
43550
43917
  {
43551
43918
  "kind": "method",
43552
43919
  "name": "getChartOptions",
@@ -43571,7 +43938,7 @@
43571
43938
  "text": "number | undefined"
43572
43939
  }
43573
43940
  },
43574
- "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode.",
43941
+ "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode.\nA pinned x range supplies the reference instead, so the axis edge stays\nthe reference while the data has not reached it yet.",
43575
43942
  "inheritedFrom": {
43576
43943
  "name": "ObcChartLineBase",
43577
43944
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
@@ -43833,6 +44200,18 @@
43833
44200
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
43834
44201
  }
43835
44202
  },
44203
+ {
44204
+ "name": "rangeLabels",
44205
+ "type": {
44206
+ "text": "RangeLabels"
44207
+ },
44208
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
44209
+ "fieldName": "rangeLabels",
44210
+ "inheritedFrom": {
44211
+ "name": "ObcChartLineBase",
44212
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
44213
+ }
44214
+ },
43836
44215
  {
43837
44216
  "name": "showPoints",
43838
44217
  "type": {
@@ -44745,6 +45124,24 @@
44745
45124
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
44746
45125
  }
44747
45126
  },
45127
+ {
45128
+ "kind": "field",
45129
+ "name": "xAxis",
45130
+ "type": {
45131
+ "text": "ChartLineXAxisConfig | undefined"
45132
+ },
45133
+ "default": "undefined",
45134
+ "description": "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.\n\nAvailable when `xAxisType!=category`.",
45135
+ "availableWhen": "xAxisType!=category",
45136
+ "availableWhenIf": {
45137
+ "arg": "xAxisType",
45138
+ "neq": "category"
45139
+ },
45140
+ "inheritedFrom": {
45141
+ "name": "ObcChartLineBase",
45142
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45143
+ }
45144
+ },
44748
45145
  {
44749
45146
  "kind": "field",
44750
45147
  "name": "showGrid",
@@ -44824,6 +45221,38 @@
44824
45221
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
44825
45222
  }
44826
45223
  },
45224
+ {
45225
+ "kind": "field",
45226
+ "name": "rangeLabels",
45227
+ "type": {
45228
+ "text": "RangeLabels"
45229
+ },
45230
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
45231
+ "attribute": "rangeLabels",
45232
+ "availableWhen": "hasLabelPadding==true",
45233
+ "availableWhenIf": {
45234
+ "arg": "hasLabelPadding",
45235
+ "truthy": true
45236
+ },
45237
+ "inheritedFrom": {
45238
+ "name": "ObcChartLineBase",
45239
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45240
+ }
45241
+ },
45242
+ {
45243
+ "kind": "field",
45244
+ "name": "primaryYAxisId",
45245
+ "type": {
45246
+ "text": "string"
45247
+ },
45248
+ "privacy": "private",
45249
+ "description": "Id of the y scale a dataset lands on when it names none. Chart.js would\notherwise add a default `y` scale next to the configured ones and draw it.",
45250
+ "readonly": true,
45251
+ "inheritedFrom": {
45252
+ "name": "ObcChartLineBase",
45253
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45254
+ }
45255
+ },
44827
45256
  {
44828
45257
  "kind": "field",
44829
45258
  "name": "DEFAULT_TENSION",
@@ -45103,6 +45532,237 @@
45103
45532
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
45104
45533
  }
45105
45534
  },
45535
+ {
45536
+ "kind": "field",
45537
+ "name": "savedMainTickmarkLabels",
45538
+ "privacy": "private",
45539
+ "default": "new WeakMap< ExternalScaleElement, boolean >()",
45540
+ "inheritedFrom": {
45541
+ "name": "ObcChartLineBase",
45542
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45543
+ }
45544
+ },
45545
+ {
45546
+ "kind": "field",
45547
+ "name": "wasBelowThreshold",
45548
+ "type": {
45549
+ "text": "boolean | undefined"
45550
+ },
45551
+ "privacy": "private",
45552
+ "description": "Last known threshold side, to notice a crossing in `updated()`.",
45553
+ "inheritedFrom": {
45554
+ "name": "ObcChartLineBase",
45555
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45556
+ }
45557
+ },
45558
+ {
45559
+ "kind": "method",
45560
+ "name": "compactLabelThickness",
45561
+ "privacy": "private",
45562
+ "return": {
45563
+ "type": {
45564
+ "text": "number | undefined"
45565
+ }
45566
+ },
45567
+ "parameters": [
45568
+ {
45569
+ "name": "axis",
45570
+ "type": {
45571
+ "text": "'x' | 'y'"
45572
+ }
45573
+ }
45574
+ ],
45575
+ "description": "Label band a slotted scale needs for its compact labels, in the scale's\nown viewBox units. The scale prints the raw values, so those are what is\nmeasured; the x band is one text line.",
45576
+ "inheritedFrom": {
45577
+ "name": "ObcChartLineBase",
45578
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45579
+ }
45580
+ },
45581
+ {
45582
+ "kind": "field",
45583
+ "name": "rangeLabelCache",
45584
+ "type": {
45585
+ "text": "{\n y: string[];\n x: string[];\n bounds?: {min: number; max: number};\n }"
45586
+ },
45587
+ "privacy": "private",
45588
+ "default": "{y: [], x: []}",
45589
+ "description": "Range labels for the current data and size, refreshed with every\n`getChartOptions()` so the plugin never rebuilds the datasets on a draw.",
45590
+ "inheritedFrom": {
45591
+ "name": "ObcChartLineBase",
45592
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45593
+ }
45594
+ },
45595
+ {
45596
+ "kind": "method",
45597
+ "name": "slotFor",
45598
+ "privacy": "private",
45599
+ "return": {
45600
+ "type": {
45601
+ "text": "HTMLSlotElement | undefined"
45602
+ }
45603
+ },
45604
+ "parameters": [
45605
+ {
45606
+ "name": "side",
45607
+ "type": {
45608
+ "text": "'left' | 'right' | 'top' | 'bottom'"
45609
+ }
45610
+ }
45611
+ ],
45612
+ "inheritedFrom": {
45613
+ "name": "ObcChartLineBase",
45614
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45615
+ }
45616
+ },
45617
+ {
45618
+ "kind": "method",
45619
+ "name": "hasSlottedScale",
45620
+ "privacy": "private",
45621
+ "return": {
45622
+ "type": {
45623
+ "text": "boolean"
45624
+ }
45625
+ },
45626
+ "parameters": [
45627
+ {
45628
+ "name": "side",
45629
+ "type": {
45630
+ "text": "'left' | 'right' | 'top' | 'bottom'"
45631
+ }
45632
+ }
45633
+ ],
45634
+ "inheritedFrom": {
45635
+ "name": "ObcChartLineBase",
45636
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45637
+ }
45638
+ },
45639
+ {
45640
+ "kind": "field",
45641
+ "name": "ySide",
45642
+ "type": {
45643
+ "text": "'left' | 'right'"
45644
+ },
45645
+ "privacy": "private",
45646
+ "readonly": true,
45647
+ "inheritedFrom": {
45648
+ "name": "ObcChartLineBase",
45649
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45650
+ }
45651
+ },
45652
+ {
45653
+ "kind": "method",
45654
+ "name": "rangeLabelFont",
45655
+ "privacy": "private",
45656
+ "return": {
45657
+ "type": {
45658
+ "text": "RangeLabelFont"
45659
+ }
45660
+ },
45661
+ "inheritedFrom": {
45662
+ "name": "ObcChartLineBase",
45663
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45664
+ }
45665
+ },
45666
+ {
45667
+ "kind": "method",
45668
+ "name": "dataExtents",
45669
+ "privacy": "private",
45670
+ "return": {
45671
+ "type": {
45672
+ "text": "{\n x?: {min: number; max: number};\n y: Map<string, {min: number; max: number}>;\n }"
45673
+ }
45674
+ },
45675
+ "parameters": [
45676
+ {
45677
+ "name": "prepared",
45678
+ "type": {
45679
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
45680
+ }
45681
+ }
45682
+ ],
45683
+ "description": "Extent of the prepared data: one for x, one per y scale id. Each y axis\nranges from its own datasets, so a merged extent would label one axis\nwith another's values.",
45684
+ "inheritedFrom": {
45685
+ "name": "ObcChartLineBase",
45686
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45687
+ }
45688
+ },
45689
+ {
45690
+ "kind": "method",
45691
+ "name": "yRangeBounds",
45692
+ "privacy": "private",
45693
+ "return": {
45694
+ "type": {
45695
+ "text": "{min: number; max: number} | undefined"
45696
+ }
45697
+ },
45698
+ "parameters": [
45699
+ {
45700
+ "name": "extents",
45701
+ "type": {
45702
+ "text": "Map<string, {min: number; max: number}>"
45703
+ }
45704
+ }
45705
+ ],
45706
+ "description": "Range the y labels describe. Below the threshold the axis runs on data\nbounds, so its datasets' extent is exact and needs no chart to read from.",
45707
+ "inheritedFrom": {
45708
+ "name": "ObcChartLineBase",
45709
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45710
+ }
45711
+ },
45712
+ {
45713
+ "kind": "method",
45714
+ "name": "xEdgeLabelTexts",
45715
+ "privacy": "private",
45716
+ "return": {
45717
+ "type": {
45718
+ "text": "string[]"
45719
+ }
45720
+ },
45721
+ "parameters": [
45722
+ {
45723
+ "name": "prepared",
45724
+ "type": {
45725
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
45726
+ }
45727
+ },
45728
+ {
45729
+ "name": "extent",
45730
+ "type": {
45731
+ "text": "{min: number; max: number} | undefined"
45732
+ }
45733
+ }
45734
+ ],
45735
+ "description": "First and last x label, or nothing when there is no span to label.",
45736
+ "inheritedFrom": {
45737
+ "name": "ObcChartLineBase",
45738
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45739
+ }
45740
+ },
45741
+ {
45742
+ "kind": "method",
45743
+ "name": "refreshRangeLabels",
45744
+ "privacy": "private",
45745
+ "return": {
45746
+ "type": {
45747
+ "text": "typeof this.rangeLabelCache"
45748
+ }
45749
+ },
45750
+ "description": "Recompute the range labels. A side with a slotted scale is labelled by\nthe scale, so it gets no text here; the y bounds are kept regardless,\nsince the scale's compact band is measured from them.",
45751
+ "inheritedFrom": {
45752
+ "name": "ObcChartLineBase",
45753
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45754
+ }
45755
+ },
45756
+ {
45757
+ "kind": "method",
45758
+ "name": "createRangeLabelsPlugin",
45759
+ "privacy": "private",
45760
+ "description": "Paints min / 0 / max and first / last once Chart.js has drawn, inside the\ngutters `getChartOptions()` reserved. The end labels sit flush with the\nplot edges so no vertical padding is needed for them.",
45761
+ "inheritedFrom": {
45762
+ "name": "ObcChartLineBase",
45763
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45764
+ }
45765
+ },
45106
45766
  {
45107
45767
  "kind": "method",
45108
45768
  "name": "hasVisibleScale",
@@ -45230,6 +45890,44 @@
45230
45890
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
45231
45891
  }
45232
45892
  },
45893
+ {
45894
+ "kind": "method",
45895
+ "name": "resolveAxisRange",
45896
+ "privacy": "private",
45897
+ "return": {
45898
+ "type": {
45899
+ "text": "{\n min: number;\n max: number;\n }"
45900
+ }
45901
+ },
45902
+ "parameters": [
45903
+ {
45904
+ "name": "side",
45905
+ "type": {
45906
+ "text": "'left' | 'right' | 'x'"
45907
+ }
45908
+ }
45909
+ ],
45910
+ "description": "Range a slotted scale on the given side has to cover.\n\nA range pinned in the axis configuration is used as is: it is the source\nof truth, and on the first sync there is no chart to read yet. Otherwise\nthe live Chart.js scale is read under the id `buildScalesConfig()` gives\nit. A side with no axis of its own follows the first configured one.",
45911
+ "inheritedFrom": {
45912
+ "name": "ObcChartLineBase",
45913
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45914
+ }
45915
+ },
45916
+ {
45917
+ "kind": "method",
45918
+ "name": "resolveSlottedXRange",
45919
+ "privacy": "private",
45920
+ "return": {
45921
+ "type": {
45922
+ "text": "{min: number; max: number} | undefined"
45923
+ }
45924
+ },
45925
+ "description": "Range pushed to the top and bottom scales, or `undefined` to leave them\nalone. A scale prints its values verbatim, and on a `time` axis the raw\nrange is epoch milliseconds. In `minutes` display the range is converted\nto the minutes the chart's own labels show; `date` display has no numeric\nequivalent, so the scale keeps its own range.",
45926
+ "inheritedFrom": {
45927
+ "name": "ObcChartLineBase",
45928
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45929
+ }
45930
+ },
45233
45931
  {
45234
45932
  "kind": "method",
45235
45933
  "name": "updateScaleProperties",
@@ -45248,6 +45946,39 @@
45248
45946
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
45249
45947
  }
45250
45948
  },
45949
+ {
45950
+ "kind": "method",
45951
+ "name": "ownsSlottedScaleRange",
45952
+ "privacy": "protected",
45953
+ "return": {
45954
+ "type": {
45955
+ "text": "boolean"
45956
+ }
45957
+ },
45958
+ "parameters": [
45959
+ {
45960
+ "name": "_side",
45961
+ "type": {
45962
+ "text": "'left' | 'right' | 'top' | 'bottom'"
45963
+ }
45964
+ }
45965
+ ],
45966
+ "description": "Whether the chart's axis range is what a slotted scale on this side should\ndescribe. A subclass that slots a scale of its own and gives it a separate\nrange returns false for that side, otherwise the sync below overwrites it.",
45967
+ "inheritedFrom": {
45968
+ "name": "ObcChartLineBase",
45969
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45970
+ }
45971
+ },
45972
+ {
45973
+ "kind": "method",
45974
+ "name": "syncSlottedScaleRanges",
45975
+ "privacy": "private",
45976
+ "description": "Push the current axis ranges to the slotted scales. The full\n`updateScaleProperties()` cascade runs before the chart is (re)built and\nso reads the previous chart's ranges; this closes that gap once the new\nchart exists, and keeps auto-ranged scales in step with the data.",
45977
+ "inheritedFrom": {
45978
+ "name": "ObcChartLineBase",
45979
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
45980
+ }
45981
+ },
45251
45982
  {
45252
45983
  "kind": "method",
45253
45984
  "name": "hasAnyChanged",
@@ -45458,6 +46189,21 @@
45458
46189
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
45459
46190
  }
45460
46191
  },
46192
+ {
46193
+ "kind": "method",
46194
+ "name": "computeChartPadding",
46195
+ "privacy": "private",
46196
+ "return": {
46197
+ "type": {
46198
+ "text": "{\n top: number;\n right: number;\n bottom: number;\n left: number;\n }"
46199
+ }
46200
+ },
46201
+ "description": "One padding source for the Chart.js layout and the slotted scales: two\nsources painted the canvas over a scale and inset a scale inside a chart.",
46202
+ "inheritedFrom": {
46203
+ "name": "ObcChartLineBase",
46204
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
46205
+ }
46206
+ },
45461
46207
  {
45462
46208
  "kind": "method",
45463
46209
  "name": "getChartOptions",
@@ -45482,7 +46228,7 @@
45482
46228
  "text": "number | undefined"
45483
46229
  }
45484
46230
  },
45485
- "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode.",
46231
+ "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode.\nA pinned x range supplies the reference instead, so the axis edge stays\nthe reference while the data has not reached it yet.",
45486
46232
  "inheritedFrom": {
45487
46233
  "name": "ObcChartLineBase",
45488
46234
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
@@ -45733,6 +46479,18 @@
45733
46479
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
45734
46480
  }
45735
46481
  },
46482
+ {
46483
+ "name": "rangeLabels",
46484
+ "type": {
46485
+ "text": "RangeLabels"
46486
+ },
46487
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
46488
+ "fieldName": "rangeLabels",
46489
+ "inheritedFrom": {
46490
+ "name": "ObcChartLineBase",
46491
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
46492
+ }
46493
+ },
45736
46494
  {
45737
46495
  "name": "showPoints",
45738
46496
  "type": {
@@ -47257,6 +48015,21 @@
47257
48015
  },
47258
48016
  "default": "true"
47259
48017
  },
48018
+ {
48019
+ "kind": "field",
48020
+ "name": "showMainTickmarkLabels",
48021
+ "type": {
48022
+ "text": "boolean"
48023
+ },
48024
+ "default": "false",
48025
+ "description": "Label the main tickmarks (min / 0 / max) instead of the primary interval ladder, for a scale too short for a ladder. A chart sets it on its slotted scales below its label threshold.\n\nAvailable when `showLabels==true`.",
48026
+ "attribute": "showMainTickmarkLabels",
48027
+ "availableWhen": "showLabels==true",
48028
+ "availableWhenIf": {
48029
+ "arg": "showLabels",
48030
+ "truthy": true
48031
+ }
48032
+ },
47260
48033
  {
47261
48034
  "kind": "field",
47262
48035
  "name": "hasBar",
@@ -47949,6 +48722,15 @@
47949
48722
  "description": "Reference size for proportional scaling when fixedAspectRatio is true. At this width, the scale renders at native 1:1 (matches Figma design). Above this width, the scale grows proportionally; below, it shrinks.\n\nAvailable when `fixedAspectRatio==true`.",
47950
48723
  "fieldName": "scaleReferenceSize"
47951
48724
  },
48725
+ {
48726
+ "name": "showMainTickmarkLabels",
48727
+ "type": {
48728
+ "text": "boolean"
48729
+ },
48730
+ "default": "false",
48731
+ "description": "Label the main tickmarks (min / 0 / max) instead of the primary interval ladder, for a scale too short for a ladder. A chart sets it on its slotted scales below its label threshold.\n\nAvailable when `showLabels==true`.",
48732
+ "fieldName": "showMainTickmarkLabels"
48733
+ },
47952
48734
  {
47953
48735
  "name": "hasBar",
47954
48736
  "type": {
@@ -48459,6 +49241,21 @@
48459
49241
  },
48460
49242
  "default": "true"
48461
49243
  },
49244
+ {
49245
+ "kind": "field",
49246
+ "name": "showMainTickmarkLabels",
49247
+ "type": {
49248
+ "text": "boolean"
49249
+ },
49250
+ "default": "false",
49251
+ "description": "Label the main tickmarks (min / 0 / max) instead of the primary interval ladder, for a scale too short for a ladder. A chart sets it on its slotted scales below its label threshold.\n\nAvailable when `showLabels==true`.",
49252
+ "attribute": "showMainTickmarkLabels",
49253
+ "availableWhen": "showLabels==true",
49254
+ "availableWhenIf": {
49255
+ "arg": "showLabels",
49256
+ "truthy": true
49257
+ }
49258
+ },
48462
49259
  {
48463
49260
  "kind": "field",
48464
49261
  "name": "hasBar",
@@ -49123,6 +49920,15 @@
49123
49920
  "description": "Reference size for proportional scaling when fixedAspectRatio is true. At this height, the scale renders at native 1:1 (matches Figma design). Above this height, the scale grows proportionally; below, it shrinks.\n\nAvailable when `fixedAspectRatio==true`.",
49124
49921
  "fieldName": "scaleReferenceSize"
49125
49922
  },
49923
+ {
49924
+ "name": "showMainTickmarkLabels",
49925
+ "type": {
49926
+ "text": "boolean"
49927
+ },
49928
+ "default": "false",
49929
+ "description": "Label the main tickmarks (min / 0 / max) instead of the primary interval ladder, for a scale too short for a ladder. A chart sets it on its slotted scales below its label threshold.\n\nAvailable when `showLabels==true`.",
49930
+ "fieldName": "showMainTickmarkLabels"
49931
+ },
49126
49932
  {
49127
49933
  "name": "hasBar",
49128
49934
  "type": {
@@ -49647,6 +50453,20 @@
49647
50453
  "default": "undefined",
49648
50454
  "description": "Multiple y-axis definitions for complex multi-axis charts."
49649
50455
  },
50456
+ {
50457
+ "kind": "field",
50458
+ "name": "xAxis",
50459
+ "type": {
50460
+ "text": "ChartLineXAxisConfig | undefined"
50461
+ },
50462
+ "default": "undefined",
50463
+ "description": "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.\n\nAvailable when `xAxisType!=category`.",
50464
+ "availableWhen": "xAxisType!=category",
50465
+ "availableWhenIf": {
50466
+ "arg": "xAxisType",
50467
+ "neq": "category"
50468
+ }
50469
+ },
49650
50470
  {
49651
50471
  "kind": "field",
49652
50472
  "name": "showGrid",
@@ -49706,6 +50526,30 @@
49706
50526
  "default": "true",
49707
50527
  "description": "Reserve canvas padding for axis tick labels on sides without an external scale.\n\nWhen `true` (default), the chart leaves room for tick labels and renders them\n(subject to `showTickMarks` and the 192px auto-compact threshold).\n\nWhen `false`, the chart renders edge-to-edge on sides without a slotted external\nscale AND axis tick labels are force-hidden so they cannot be clipped. This also\nsuppresses the automatic edge-to-edge switch that normally happens below the\n192px threshold, eliminating the visible padding \"jump\" when crossing it.\n\nUseful when embedding the chart inside another component that owns framing\nand never wants to show axis labels (e.g. `obc-automation-tank`).\n\nDefaults to `true` to preserve existing behavior. Declared with `attribute: false`\nbecause a `true`-default boolean cannot work as an HTML boolean attribute."
49708
50528
  },
50529
+ {
50530
+ "kind": "field",
50531
+ "name": "rangeLabels",
50532
+ "type": {
50533
+ "text": "RangeLabels"
50534
+ },
50535
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
50536
+ "attribute": "rangeLabels",
50537
+ "availableWhen": "hasLabelPadding==true",
50538
+ "availableWhenIf": {
50539
+ "arg": "hasLabelPadding",
50540
+ "truthy": true
50541
+ }
50542
+ },
50543
+ {
50544
+ "kind": "field",
50545
+ "name": "primaryYAxisId",
50546
+ "type": {
50547
+ "text": "string"
50548
+ },
50549
+ "privacy": "private",
50550
+ "description": "Id of the y scale a dataset lands on when it names none. Chart.js would\notherwise add a default `y` scale next to the configured ones and draw it.",
50551
+ "readonly": true
50552
+ },
49709
50553
  {
49710
50554
  "kind": "field",
49711
50555
  "name": "DEFAULT_TENSION",
@@ -49938,6 +50782,185 @@
49938
50782
  },
49939
50783
  "description": "Should multi-series datasets be stacked?\nLine graph returns false, area graph returns stacked property value.\nMust be implemented in subclass."
49940
50784
  },
50785
+ {
50786
+ "kind": "field",
50787
+ "name": "savedMainTickmarkLabels",
50788
+ "privacy": "private",
50789
+ "default": "new WeakMap< ExternalScaleElement, boolean >()"
50790
+ },
50791
+ {
50792
+ "kind": "field",
50793
+ "name": "wasBelowThreshold",
50794
+ "type": {
50795
+ "text": "boolean | undefined"
50796
+ },
50797
+ "privacy": "private",
50798
+ "description": "Last known threshold side, to notice a crossing in `updated()`."
50799
+ },
50800
+ {
50801
+ "kind": "method",
50802
+ "name": "compactLabelThickness",
50803
+ "privacy": "private",
50804
+ "return": {
50805
+ "type": {
50806
+ "text": "number | undefined"
50807
+ }
50808
+ },
50809
+ "parameters": [
50810
+ {
50811
+ "name": "axis",
50812
+ "type": {
50813
+ "text": "'x' | 'y'"
50814
+ }
50815
+ }
50816
+ ],
50817
+ "description": "Label band a slotted scale needs for its compact labels, in the scale's\nown viewBox units. The scale prints the raw values, so those are what is\nmeasured; the x band is one text line."
50818
+ },
50819
+ {
50820
+ "kind": "field",
50821
+ "name": "rangeLabelCache",
50822
+ "type": {
50823
+ "text": "{\n y: string[];\n x: string[];\n bounds?: {min: number; max: number};\n }"
50824
+ },
50825
+ "privacy": "private",
50826
+ "default": "{y: [], x: []}",
50827
+ "description": "Range labels for the current data and size, refreshed with every\n`getChartOptions()` so the plugin never rebuilds the datasets on a draw."
50828
+ },
50829
+ {
50830
+ "kind": "method",
50831
+ "name": "slotFor",
50832
+ "privacy": "private",
50833
+ "return": {
50834
+ "type": {
50835
+ "text": "HTMLSlotElement | undefined"
50836
+ }
50837
+ },
50838
+ "parameters": [
50839
+ {
50840
+ "name": "side",
50841
+ "type": {
50842
+ "text": "'left' | 'right' | 'top' | 'bottom'"
50843
+ }
50844
+ }
50845
+ ]
50846
+ },
50847
+ {
50848
+ "kind": "method",
50849
+ "name": "hasSlottedScale",
50850
+ "privacy": "private",
50851
+ "return": {
50852
+ "type": {
50853
+ "text": "boolean"
50854
+ }
50855
+ },
50856
+ "parameters": [
50857
+ {
50858
+ "name": "side",
50859
+ "type": {
50860
+ "text": "'left' | 'right' | 'top' | 'bottom'"
50861
+ }
50862
+ }
50863
+ ]
50864
+ },
50865
+ {
50866
+ "kind": "field",
50867
+ "name": "ySide",
50868
+ "type": {
50869
+ "text": "'left' | 'right'"
50870
+ },
50871
+ "privacy": "private",
50872
+ "readonly": true
50873
+ },
50874
+ {
50875
+ "kind": "method",
50876
+ "name": "rangeLabelFont",
50877
+ "privacy": "private",
50878
+ "return": {
50879
+ "type": {
50880
+ "text": "RangeLabelFont"
50881
+ }
50882
+ }
50883
+ },
50884
+ {
50885
+ "kind": "method",
50886
+ "name": "dataExtents",
50887
+ "privacy": "private",
50888
+ "return": {
50889
+ "type": {
50890
+ "text": "{\n x?: {min: number; max: number};\n y: Map<string, {min: number; max: number}>;\n }"
50891
+ }
50892
+ },
50893
+ "parameters": [
50894
+ {
50895
+ "name": "prepared",
50896
+ "type": {
50897
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
50898
+ }
50899
+ }
50900
+ ],
50901
+ "description": "Extent of the prepared data: one for x, one per y scale id. Each y axis\nranges from its own datasets, so a merged extent would label one axis\nwith another's values."
50902
+ },
50903
+ {
50904
+ "kind": "method",
50905
+ "name": "yRangeBounds",
50906
+ "privacy": "private",
50907
+ "return": {
50908
+ "type": {
50909
+ "text": "{min: number; max: number} | undefined"
50910
+ }
50911
+ },
50912
+ "parameters": [
50913
+ {
50914
+ "name": "extents",
50915
+ "type": {
50916
+ "text": "Map<string, {min: number; max: number}>"
50917
+ }
50918
+ }
50919
+ ],
50920
+ "description": "Range the y labels describe. Below the threshold the axis runs on data\nbounds, so its datasets' extent is exact and needs no chart to read from."
50921
+ },
50922
+ {
50923
+ "kind": "method",
50924
+ "name": "xEdgeLabelTexts",
50925
+ "privacy": "private",
50926
+ "return": {
50927
+ "type": {
50928
+ "text": "string[]"
50929
+ }
50930
+ },
50931
+ "parameters": [
50932
+ {
50933
+ "name": "prepared",
50934
+ "type": {
50935
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
50936
+ }
50937
+ },
50938
+ {
50939
+ "name": "extent",
50940
+ "type": {
50941
+ "text": "{min: number; max: number} | undefined"
50942
+ }
50943
+ }
50944
+ ],
50945
+ "description": "First and last x label, or nothing when there is no span to label."
50946
+ },
50947
+ {
50948
+ "kind": "method",
50949
+ "name": "refreshRangeLabels",
50950
+ "privacy": "private",
50951
+ "return": {
50952
+ "type": {
50953
+ "text": "typeof this.rangeLabelCache"
50954
+ }
50955
+ },
50956
+ "description": "Recompute the range labels. A side with a slotted scale is labelled by\nthe scale, so it gets no text here; the y bounds are kept regardless,\nsince the scale's compact band is measured from them."
50957
+ },
50958
+ {
50959
+ "kind": "method",
50960
+ "name": "createRangeLabelsPlugin",
50961
+ "privacy": "private",
50962
+ "description": "Paints min / 0 / max and first / last once Chart.js has drawn, inside the\ngutters `getChartOptions()` reserved. The end labels sit flush with the\nplot edges so no vertical padding is needed for them."
50963
+ },
49941
50964
  {
49942
50965
  "kind": "method",
49943
50966
  "name": "hasVisibleScale",
@@ -50025,6 +51048,36 @@
50025
51048
  "privacy": "private",
50026
51049
  "description": "Calculate chart padding from external scale dimensions.\n\nFor sides without an external scale, falls back to `CHART_DIMENSIONS.CANVAS_PADDING`\n(the chart's own padding to reserve room for axis tick labels). When\n`hasLabelPadding=false` that fallback is 0 so the chart renders edge-to-edge,\nand this same value is cascaded to slotted scales via `updateScaleProperties()`\n— so the bar's main-axis padding (`paddingTop`/`paddingBottom` for vertical bars)\ncollapses with the chart's perpendicular padding and they stay visually aligned."
50027
51050
  },
51051
+ {
51052
+ "kind": "method",
51053
+ "name": "resolveAxisRange",
51054
+ "privacy": "private",
51055
+ "return": {
51056
+ "type": {
51057
+ "text": "{\n min: number;\n max: number;\n }"
51058
+ }
51059
+ },
51060
+ "parameters": [
51061
+ {
51062
+ "name": "side",
51063
+ "type": {
51064
+ "text": "'left' | 'right' | 'x'"
51065
+ }
51066
+ }
51067
+ ],
51068
+ "description": "Range a slotted scale on the given side has to cover.\n\nA range pinned in the axis configuration is used as is: it is the source\nof truth, and on the first sync there is no chart to read yet. Otherwise\nthe live Chart.js scale is read under the id `buildScalesConfig()` gives\nit. A side with no axis of its own follows the first configured one."
51069
+ },
51070
+ {
51071
+ "kind": "method",
51072
+ "name": "resolveSlottedXRange",
51073
+ "privacy": "private",
51074
+ "return": {
51075
+ "type": {
51076
+ "text": "{min: number; max: number} | undefined"
51077
+ }
51078
+ },
51079
+ "description": "Range pushed to the top and bottom scales, or `undefined` to leave them\nalone. A scale prints its values verbatim, and on a `time` axis the raw\nrange is epoch milliseconds. In `minutes` display the range is converted\nto the minutes the chart's own labels show; `date` display has no numeric\nequivalent, so the scale keeps its own range."
51080
+ },
50028
51081
  {
50029
51082
  "kind": "method",
50030
51083
  "name": "updateScaleProperties",
@@ -50039,6 +51092,31 @@
50039
51092
  ],
50040
51093
  "description": "Update properties on slotted scale elements"
50041
51094
  },
51095
+ {
51096
+ "kind": "method",
51097
+ "name": "ownsSlottedScaleRange",
51098
+ "privacy": "protected",
51099
+ "return": {
51100
+ "type": {
51101
+ "text": "boolean"
51102
+ }
51103
+ },
51104
+ "parameters": [
51105
+ {
51106
+ "name": "_side",
51107
+ "type": {
51108
+ "text": "'left' | 'right' | 'top' | 'bottom'"
51109
+ }
51110
+ }
51111
+ ],
51112
+ "description": "Whether the chart's axis range is what a slotted scale on this side should\ndescribe. A subclass that slots a scale of its own and gives it a separate\nrange returns false for that side, otherwise the sync below overwrites it."
51113
+ },
51114
+ {
51115
+ "kind": "method",
51116
+ "name": "syncSlottedScaleRanges",
51117
+ "privacy": "private",
51118
+ "description": "Push the current axis ranges to the slotted scales. The full\n`updateScaleProperties()` cascade runs before the chart is (re)built and\nso reads the previous chart's ranges; this closes that gap once the new\nchart exists, and keeps auto-ranged scales in step with the data."
51119
+ },
50042
51120
  {
50043
51121
  "kind": "method",
50044
51122
  "name": "hasAnyChanged",
@@ -50201,6 +51279,17 @@
50201
51279
  "privacy": "protected",
50202
51280
  "description": "Prepare datasets for single-series charts.\nCategory mode: labels + numeric values (unchanged legacy path).\nTime/number mode: normalized {x, y} points on a linear scale.\nHandles both regular and threshold fill modes."
50203
51281
  },
51282
+ {
51283
+ "kind": "method",
51284
+ "name": "computeChartPadding",
51285
+ "privacy": "private",
51286
+ "return": {
51287
+ "type": {
51288
+ "text": "{\n top: number;\n right: number;\n bottom: number;\n left: number;\n }"
51289
+ }
51290
+ },
51291
+ "description": "One padding source for the Chart.js layout and the slotted scales: two\nsources painted the canvas over a scale and inset a scale inside a chart."
51292
+ },
50204
51293
  {
50205
51294
  "kind": "method",
50206
51295
  "name": "getChartOptions",
@@ -50221,7 +51310,7 @@
50221
51310
  "text": "number | undefined"
50222
51311
  }
50223
51312
  },
50224
- "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode."
51313
+ "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode.\nA pinned x range supplies the reference instead, so the axis edge stays\nthe reference while the data has not reached it yet."
50225
51314
  },
50226
51315
  {
50227
51316
  "kind": "method",
@@ -50390,6 +51479,14 @@
50390
51479
  "description": "Show axis tick marks and labels.",
50391
51480
  "fieldName": "showTickMarks"
50392
51481
  },
51482
+ {
51483
+ "name": "rangeLabels",
51484
+ "type": {
51485
+ "text": "RangeLabels"
51486
+ },
51487
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
51488
+ "fieldName": "rangeLabels"
51489
+ },
50393
51490
  {
50394
51491
  "name": "showPoints",
50395
51492
  "type": {
@@ -51171,6 +52268,14 @@
51171
52268
  "module": "src/building-blocks/external-scale/external-scale.ts"
51172
52269
  }
51173
52270
  },
52271
+ {
52272
+ "kind": "js",
52273
+ "name": "EXTERNAL_SCALE_MAX_TICKS",
52274
+ "declaration": {
52275
+ "name": "EXTERNAL_SCALE_MAX_TICKS",
52276
+ "module": "src/building-blocks/external-scale/external-scale.ts"
52277
+ }
52278
+ },
51174
52279
  {
51175
52280
  "kind": "js",
51176
52281
  "name": "deriveSetpointVisualState",
@@ -54295,7 +55400,7 @@
54295
55400
  "declarations": [
54296
55401
  {
54297
55402
  "kind": "class",
54298
- "description": "`<obc-alert-button>` – A compact, icon-based button for displaying alert or notification status and count.\n\nThis component provides a visual indicator for active alerts or notifications, supporting different alert types (such as alarm, warning, or caution) and an optional counter badge. It can also include a secondary \"silence\" action button for muting alerts, adapting its layout responsively for different screen widths.\n\nAppears in toolbars or notification areas to give users a quick overview of alert status and provide direct access to alert-related actions.\n\n## Features\n\n- **Variants:**\n - **Flat:** Minimal, icon-only button for space-constrained layouts.\n - **Normal:** Standard button with icon and optional alert counter.\n - **Enhanced:** Visually prominent button for high-priority alerts, with accent styling.\n- **Alert Types:** Supports `alarm`, `warning`, `caution`, or no alert (idle). Icon and color adapt to the alert type.\n- **Alert Counter:** Optional badge displays the number of active alerts (except in flat mode).\n- **Silence Button:** Optional secondary button to mute or silence alerts, shown when enabled and at sufficient width.\n- **Blinking Animation:** Can animate (blink) to draw attention to active alerts (except for caution type).\n- **Responsive Layout:** Automatically switches to flat mode below a configurable width, and hides the silence button below another configurable width.\n- **Large Size Option:** Increases button height and padding for touch-friendly or prominent use.\n\n## Usage Guidelines\n\nUse `<obc-alert-button>` to provide a persistent, easily accessible indicator of alert or notification status. Ideal for toolbars, headers, or notification panels where users need to be aware of active alerts and may need to silence them quickly.\n\n- Use the counter to show the number of active alerts when relevant.\n- Use the silence button to provide a quick mute action, but only when space allows.\n- Choose the variant (`flat`, `normal`, `enhanced`) based on available space and the importance of the alert.\n- The blinking feature should be reserved for urgent or high-priority alerts to avoid unnecessary distraction.\n\n**TODO(designer):** Confirm if there are recommended default behaviors for auto-blinking, and if there are any design constraints for when to use each variant.\n\n## Properties\n\n- `nAlerts` (number): Number of active alerts to display in the counter badge.\n- `alertType` (`AlertType`): Type of alert (`alarm`, `warning`, `caution`, or undefined for idle).\n- `type` (`ObcAlertButtonType`): Visual variant of the button (`flat`, `normal`, `enhanced`). Default is `normal`.\n- `counter` (boolean): Whether to show the alert counter badge (not available in flat mode).\n- `showSilenceButton` (boolean): Whether to display the silence button (hidden in flat mode or below min breakpoint).\n- `silenceButtonDisabled` (boolean): Disables the silence button when true.\n- `flatMaxBreakpointPx` (number): Maximum width (in px) for normal/enhanced mode; below this, switches to flat mode.\n- `silenceButtonMinBreakpointPx` (number): Minimum width (in px) to show the silence button; below this, it is hidden.\n- `blinking` (boolean): Enables blinking animation for active alerts (not for caution type).\n- `large` (boolean): Increases button size for prominent or touch-friendly use.\n\n## Events\n\n- `click-alert` – Fired when the main alert button is clicked.\n- `click-silence` – Fired when the silence button is clicked.\n\n## Best Practices & Constraints\n\n- Only show the counter when there are active alerts and the button is not in flat mode.\n- The silence button is only visible if enabled, the width is above the minimum breakpoint, and the button is not flat.\n- Blinking should be used sparingly to avoid overwhelming the user.\n- Use the large variant for touch interfaces or when the button needs to stand out.\n\n## Example\n\n```html\n<obc-alert-button\n nAlerts=\"3\"\n alertType=\"alarm\"\n type=\"enhanced\"\n counter\n showSilenceButton\n blinking\n large\n flatMaxBreakpointPx=\"600\"\n silenceButtonMinBreakpointPx=\"600\"\n></obc-alert-button>\n```\n\nIn this example, the button shows an alarm icon, a counter badge with \"3\", is styled as enhanced, blinks to indicate urgency, and includes a silence button if the width allows.",
55403
+ "description": "`<obc-alert-button>` – A compact, icon-based button for displaying alert or notification status and count.\n\nThis component provides a visual indicator for active alerts or notifications, supporting different alert types (such as alarm, warning, or caution) and an optional counter badge. It can also include a secondary \"silence\" action button for muting alerts, adapting its layout responsively for different screen widths.\n\nAppears in toolbars or notification areas to give users a quick overview of alert status and provide direct access to alert-related actions.\n\n## Features\n\n- **Variants:**\n - **Flat:** Minimal, icon-only button for space-constrained layouts.\n - **Normal:** Standard button with icon and optional alert counter.\n - **Enhanced:** Visually prominent button for high-priority alerts, with accent styling.\n- **Alert Types:** Supports `alarm`, `warning`, `caution`, or no alert (idle). Icon and color adapt to the alert type.\n- **Alert Counter:** Optional badge displays the number of active alerts (except in flat mode).\n- **Silence Button:** Optional secondary button to mute or silence alerts, shown when enabled and at sufficient width.\n- **Blinking Animation:** Can animate (blink) to draw attention to active alerts (except for caution type).\n- **Responsive Layout:** Automatically switches to flat mode below a configurable width, and hides the silence button below another configurable width.\n- **Large Size Option:** Increases button height and padding for touch-friendly or prominent use.\n\n## Usage Guidelines\n\nUse `<obc-alert-button>` to provide a persistent, easily accessible indicator of alert or notification status. Ideal for toolbars, headers, or notification panels where users need to be aware of active alerts and may need to silence them quickly.\n\n- Use the counter to show the number of active alerts when relevant.\n- Use the silence button to provide a quick mute action, but only when space allows.\n- Choose the variant (`flat`, `normal`, `enhanced`) based on available space and the importance of the alert.\n- The blinking feature should be reserved for urgent or high-priority alerts to avoid unnecessary distraction.\n\n**TODO(designer):** Confirm if there are recommended default behaviors for auto-blinking, and if there are any design constraints for when to use each variant.\n\n## Properties\n\n- `nAlerts` (number): Number of active alerts to display in the counter badge.\n- `alertType` (`AlertType`): Type of alert (`alarm`, `warning`, `caution`, or undefined for idle).\n- `type` (`ObcAlertButtonType`): Visual variant of the button (`flat`, `normal`, `enhanced`). Default is `normal`.\n- `counter` (boolean): Whether to show the alert counter badge (not available in flat mode).\n- `showSilenceButton` (boolean): Whether to display the silence button (hidden in flat mode or below min breakpoint).\n- `silenceButtonDisabled` (boolean): Disables the silence button when true.\n- `flatMaxBreakpointPx` (number): Maximum width (in px) for normal/enhanced mode; below this, switches to flat mode.\n- `silenceButtonMinBreakpointPx` (number): Minimum width (in px) to show the silence button; below this, it is hidden.\n- `blinking` (boolean): Enables blinking animation for active alerts (not for caution type).\n- `flashingSpeed`: tempo of the blink (`default` follows the alert type: critical/alarm/high fast, warning/medium slow, low very slow; `fixed` never flashes).\n- `large` (boolean): Increases button size for prominent or touch-friendly use.\n\n## Events\n\n- `click-alert` – Fired when the main alert button is clicked.\n- `click-silence` – Fired when the silence button is clicked.\n\n## Best Practices & Constraints\n\n- Only show the counter when there are active alerts and the button is not in flat mode.\n- The silence button is only visible if enabled, the width is above the minimum breakpoint, and the button is not flat.\n- Blinking should be used sparingly to avoid overwhelming the user.\n- Use the large variant for touch interfaces or when the button needs to stand out.\n\n## Example\n\n```html\n<obc-alert-button\n nAlerts=\"3\"\n alertType=\"alarm\"\n type=\"enhanced\"\n counter\n showSilenceButton\n blinking\n large\n flatMaxBreakpointPx=\"600\"\n silenceButtonMinBreakpointPx=\"600\"\n></obc-alert-button>\n```\n\nIn this example, the button shows an alarm icon, a counter badge with \"3\", is styled as enhanced, blinks to indicate urgency, and includes a silence button if the width allows.",
54299
55404
  "name": "ObcAlertButton",
54300
55405
  "slots": [
54301
55406
  {
@@ -54384,6 +55489,30 @@
54384
55489
  "description": "Enables blinking animation for active alerts.\n\nBlinking is only shown for alarm and warning types, not for caution.",
54385
55490
  "attribute": "blinking"
54386
55491
  },
55492
+ {
55493
+ "kind": "field",
55494
+ "name": "flashingSpeed",
55495
+ "type": {
55496
+ "text": "FlashingSpeed"
55497
+ },
55498
+ "description": "Flash tempo while `blinking` is on: `default` resolves from `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.",
55499
+ "attribute": "flashingSpeed"
55500
+ },
55501
+ {
55502
+ "kind": "field",
55503
+ "name": "flashing",
55504
+ "privacy": "protected",
55505
+ "readonly": true,
55506
+ "default": "new FlashingController( this, () => this.resolvedFlashingSpeed )"
55507
+ },
55508
+ {
55509
+ "kind": "field",
55510
+ "name": "resolvedFlashingSpeed",
55511
+ "type": {
55512
+ "text": "ResolvedFlashingSpeed"
55513
+ },
55514
+ "readonly": true
55515
+ },
54387
55516
  {
54388
55517
  "kind": "field",
54389
55518
  "name": "flatMaxBreakpointPx",
@@ -54456,19 +55585,6 @@
54456
55585
  },
54457
55586
  "privacy": "private",
54458
55587
  "readonly": true
54459
- },
54460
- {
54461
- "kind": "field",
54462
- "name": "_blinkAnimationCancel",
54463
- "type": {
54464
- "text": "() => void | undefined"
54465
- },
54466
- "privacy": "private"
54467
- },
54468
- {
54469
- "kind": "method",
54470
- "name": "installBlinking",
54471
- "privacy": "private"
54472
55588
  }
54473
55589
  ],
54474
55590
  "events": [
@@ -54555,6 +55671,14 @@
54555
55671
  "description": "Enables blinking animation for active alerts.\n\nBlinking is only shown for alarm and warning types, not for caution.",
54556
55672
  "fieldName": "blinking"
54557
55673
  },
55674
+ {
55675
+ "name": "flashingSpeed",
55676
+ "type": {
55677
+ "text": "FlashingSpeed"
55678
+ },
55679
+ "description": "Flash tempo while `blinking` is on: `default` resolves from `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.",
55680
+ "fieldName": "flashingSpeed"
55681
+ },
54558
55682
  {
54559
55683
  "name": "flatMaxBreakpointPx",
54560
55684
  "type": {
@@ -54794,7 +55918,7 @@
54794
55918
  "declarations": [
54795
55919
  {
54796
55920
  "kind": "class",
54797
- "description": "`<obc-alert-frame>` – A bordered frame component for visually emphasizing alert or status messages.\n\nThe alert frame provides a prominent outline and optional \"flap\" with status icon to draw attention to critical information or UI regions. It supports multiple visual variants and thicknesses, and can be configured to indicate different alert statuses (alarm, warning, caution). The component is designed to wrap content and visually distinguish it from the surrounding UI.\n\n### Features\n- **Variants (type):**\n - `regular`: Standard outlined frame with no flap or icon.\n - `small-side-flip`: Adds a small side flap with a status icon at the top right.\n - `large-side-flip`: Adds a larger, vertical side flap with a status icon and optional custom icon.\n - `bottom-flip`: Adds a bottom flap with a status icon, label, and timer slots.\n- **Thickness options:** Choose between `small` (thin border) and `large` (thick border) for visual emphasis.\n- **Status indication:** Displays different color schemes and icons for the legacy statuses (`alarm`, `warning`, `caution`) and the level statuses (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`).\n- **Acknowledgement mode:** The `mode` property reflects the alert lifecycle state — `acked-active` (default), `unacked-active`, and `unacked-rectified` driving the blinking/animation treatment of the frame.\n- **Content wrapping:** When `wrapContent` is true, the frame wraps and sizes itself to its slotted content rather than overlaying a fixed region.\n- **Customizable corners:** Each corner can be set to a sharp (non-rounded) edge for integration with other UI elements.\n- **Slot-based content:** Supports custom icons, labels, and timers in flap variants via named slots.\n\n### Usage Guidelines\nUse `obc-alert-frame` to highlight important content, such as alerts, warnings, or status panels. The flap variants are ideal for drawing extra attention to urgent or time-sensitive information, while the regular type provides a subtle but clear border. Choose the status to match the severity of the message (alarm, warning, caution). Adjust thickness for visual hierarchy—use large for high-priority alerts and small for less critical notices.\n\n**TODO(designer):** Provide guidance on when to use each flap type (small-side-flip, large-side-flip, bottom-flip) and recommended scenarios for sharp edge usage.\n\n### Features/Variants\n- **Type (Visual Variant):**\n - `regular`: Simple outlined frame, no flap or icon.\n - `small-side-flip`: Small right-side flap with status icon.\n - `large-side-flip`: Large vertical right-side flap with status icon and optional custom icon.\n - `bottom-flip`: Bottom flap with status icon, label, and timer.\n- **Thickness:** `small` (default) or `large` for border width.\n- **Status:** `alarm`, `warning`, `caution`, or the level severities (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`)—affects color and icon.\n- **Mode:** `acked-active` (default), `unacked-active`, or `unacked-rectified`—affects blinking/animation.\n- **Corner Customization:** Each corner can be made sharp (not rounded) via boolean properties.\n\n### Slots and Content Structure\n\n| Slot Name | Renders When... | Purpose |\n|-----------|-----------------|---------|\n| (default) | Always | Main content inside the alert frame. |\n| icon | `large-side-flip` or `bottom-flip` | Custom icon displayed in the flap (in addition to status icon). |\n| label | `bottom-flip` only | Label text shown in the bottom flap. |\n| timer | `bottom-flip` only | Timer or time label in the bottom flap. |\n\n### Properties and Attributes\n- `type`: Selects the visual variant/flap style. Default is `small-side-flip`.\n- `thickness`: Controls border thickness (`small` or `large`). Default is `small`.\n- `status`: Sets the alert status and color/icon (`alarm`, `warning`, `caution`, or the `level-*` severities). Default is `alarm`.\n- `mode`: Acknowledgement lifecycle state (`acked-active`, `unacked-active`, `unacked-rectified`) controlling blinking/animation. Default is `acked-active`.\n- `wrapContent`: When true, the frame wraps and sizes to its slotted content instead of overlaying a fixed region. Default is `false`.\n- `sharpEdgeTopLeft`, `sharpEdgeTopRight`, `sharpEdgeBottomLeft`, `sharpEdgeBottomRight`: Boolean flags to make each corner sharp instead of rounded.\n\n### Best Practices and Constraints\n- Use the status property to match the severity of the alert.\n- Only use the bottom-flip variant when both label and timer are relevant.\n- For visual consistency, align sharp edge settings with adjacent UI elements.\n- The default slot is for the main content; use named slots for icons, labels, and timers as needed.\n\n### Example:\n```\n<obc-alert-frame\n type=\"bottom-flip\"\n thickness=\"large\"\n status=\"warning\"\n sharpEdgeTopLeft\n>\n <obi-placeholder slot=\"icon\"></obi-placeholder>\n <div slot=\"label\">Low Battery</div>\n <div slot=\"timer\">00:15</div>\n <div>Critical system message goes here.</div>\n</obc-alert-frame>\n```",
55921
+ "description": "`<obc-alert-frame>` – A bordered frame component for visually emphasizing alert or status messages.\n\nThe alert frame provides a prominent outline and optional \"flap\" with status icon to draw attention to critical information or UI regions. It supports multiple visual variants and thicknesses, and can be configured to indicate different alert statuses (alarm, warning, caution). The component is designed to wrap content and visually distinguish it from the surrounding UI.\n\n### Features\n- **Variants (type):**\n - `regular`: Standard outlined frame with no flap or icon.\n - `small-side-flip`: Adds a small side flap with a status icon at the top right.\n - `large-side-flip`: Adds a larger, vertical side flap with a status icon and optional custom icon.\n - `bottom-flip`: Adds a bottom flap with a status icon, label, and timer slots.\n- **Thickness options:** Choose between `small` (thin border) and `large` (thick border) for visual emphasis.\n- **Status indication:** Displays different color schemes and icons for the legacy statuses (`alarm`, `warning`, `caution`) and the level statuses (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`).\n- **Acknowledgement mode:** The `mode` property reflects the alert lifecycle state — `acked-active` (default, steady), `unacked-active` (flashes) and `unacked-rectified` (dashed, flashes) and `flashingSpeed` picks the tempo.\n- **Content wrapping:** When `wrapContent` is true, the frame wraps and sizes itself to its slotted content rather than overlaying a fixed region.\n- **Customizable corners:** Each corner can be set to a sharp (non-rounded) edge for integration with other UI elements.\n- **Slot-based content:** Supports custom icons, labels, and timers in flap variants via named slots.\n\n### Usage Guidelines\nUse `obc-alert-frame` to highlight important content, such as alerts, warnings, or status panels. The flap variants are ideal for drawing extra attention to urgent or time-sensitive information, while the regular type provides a subtle but clear border. Choose the status to match the severity of the message (alarm, warning, caution). Adjust thickness for visual hierarchy—use large for high-priority alerts and small for less critical notices.\n\n**TODO(designer):** Provide guidance on when to use each flap type (small-side-flip, large-side-flip, bottom-flip) and recommended scenarios for sharp edge usage.\n\n### Features/Variants\n- **Type (Visual Variant):**\n - `regular`: Simple outlined frame, no flap or icon.\n - `small-side-flip`: Small right-side flap with status icon.\n - `large-side-flip`: Large vertical right-side flap with status icon and optional custom icon.\n - `bottom-flip`: Bottom flap with status icon, label, and timer.\n- **Thickness:** `small` (default) or `large` for border width.\n- **Status:** `alarm`, `warning`, `caution`, or the level severities (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`)—affects color and icon.\n- **Mode:** `acked-active` (default), `unacked-active`, or `unacked-rectified`—affects blinking/animation.\n- **Corner Customization:** Each corner can be made sharp (not rounded) via boolean properties.\n\n### Slots and Content Structure\n\n| Slot Name | Renders When... | Purpose |\n|-----------|-----------------|---------|\n| (default) | Always | Main content inside the alert frame. |\n| icon | `large-side-flip` or `bottom-flip` | Custom icon displayed in the flap (in addition to status icon). |\n| label | `bottom-flip` only | Label text shown in the bottom flap. |\n| timer | `bottom-flip` only | Timer or time label in the bottom flap. |\n\n### Properties and Attributes\n- `type`: Selects the visual variant/flap style. Default is `small-side-flip`.\n- `thickness`: Controls border thickness (`small` or `large`). Default is `small`.\n- `status`: Sets the alert status and color/icon (`alarm`, `warning`, `caution`, or the `level-*` severities). Default is `alarm`.\n- `mode`: Acknowledgement lifecycle state (`acked-active`, `unacked-active`, `unacked-rectified`) controlling blinking/animation. Default is `acked-active`.\n- `wrapContent`: When true, the frame wraps and sizes to its slotted content instead of overlaying a fixed region. Default is `false`.\n- `sharpEdgeTopLeft`, `sharpEdgeTopRight`, `sharpEdgeBottomLeft`, `sharpEdgeBottomRight`: Boolean flags to make each corner sharp instead of rounded.\n\n### Best Practices and Constraints\n- Use the status property to match the severity of the alert.\n- Only use the bottom-flip variant when both label and timer are relevant.\n- For visual consistency, align sharp edge settings with adjacent UI elements.\n- The default slot is for the main content; use named slots for icons, labels, and timers as needed.\n\n### Example:\n```\n<obc-alert-frame\n type=\"bottom-flip\"\n thickness=\"large\"\n status=\"warning\"\n sharpEdgeTopLeft\n>\n <obi-placeholder slot=\"icon\"></obi-placeholder>\n <div slot=\"label\">Low Battery</div>\n <div slot=\"timer\">00:15</div>\n <div>Critical system message goes here.</div>\n</obc-alert-frame>\n```",
54798
55922
  "name": "ObcAlertFrame",
54799
55923
  "slots": [
54800
55924
  {
@@ -54851,6 +55975,78 @@
54851
55975
  "description": "Acknowledgement lifecycle state, controlling the frame's blinking/animation.\n- `acked-active`: Active and acknowledged (default); no blinking.\n- `unacked-active`: Active and not yet acknowledged; blinks.\n- `unacked-rectified`: Condition cleared but not yet acknowledged.",
54852
55976
  "attribute": "mode"
54853
55977
  },
55978
+ {
55979
+ "kind": "field",
55980
+ "name": "flashingSpeed",
55981
+ "type": {
55982
+ "text": "FlashingSpeed"
55983
+ },
55984
+ "description": "Flash tempo: `default` resolves from the alert type and mode (critical/alarm/high fast, warning/medium slow, low very slow, every rectified alert very slow, caution and diagnostic fixed), `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes. Acknowledged frames are always steady.",
55985
+ "attribute": "flashingSpeed"
55986
+ },
55987
+ {
55988
+ "kind": "field",
55989
+ "name": "flashEffect",
55990
+ "type": {
55991
+ "text": "ObcAlertFrameFlashEffect"
55992
+ },
55993
+ "description": "`outline` (default) grows the outline by 2 px while on in one step; `outline-eased` grows it over a 50 ms transition, a design-evaluation option.",
55994
+ "attribute": "flashEffect"
55995
+ },
55996
+ {
55997
+ "kind": "field",
55998
+ "name": "flashing",
55999
+ "privacy": "protected",
56000
+ "readonly": true,
56001
+ "default": "new FlashingController( this, () => this.resolvedFlashingSpeed )"
56002
+ },
56003
+ {
56004
+ "kind": "field",
56005
+ "name": "dashBox",
56006
+ "type": {
56007
+ "text": "DashBox | undefined"
56008
+ },
56009
+ "privacy": "private"
56010
+ },
56011
+ {
56012
+ "kind": "field",
56013
+ "name": "wrapper",
56014
+ "type": {
56015
+ "text": "HTMLElement | undefined"
56016
+ },
56017
+ "privacy": "private"
56018
+ },
56019
+ {
56020
+ "kind": "field",
56021
+ "name": "dashObserver",
56022
+ "type": {
56023
+ "text": "ResizeObserver | undefined"
56024
+ },
56025
+ "privacy": "private"
56026
+ },
56027
+ {
56028
+ "kind": "field",
56029
+ "name": "measureDash",
56030
+ "privacy": "private"
56031
+ },
56032
+ {
56033
+ "kind": "method",
56034
+ "name": "renderDash",
56035
+ "privacy": "private",
56036
+ "return": {
56037
+ "type": {
56038
+ "text": "TemplateResult | typeof nothing"
56039
+ }
56040
+ }
56041
+ },
56042
+ {
56043
+ "kind": "field",
56044
+ "name": "resolvedFlashingSpeed",
56045
+ "type": {
56046
+ "text": "ResolvedFlashingSpeed"
56047
+ },
56048
+ "readonly": true
56049
+ },
54854
56050
  {
54855
56051
  "kind": "field",
54856
56052
  "name": "wrapContent",
@@ -54938,19 +56134,6 @@
54938
56134
  },
54939
56135
  "default": "true"
54940
56136
  },
54941
- {
54942
- "kind": "field",
54943
- "name": "_blinkAnimationCancel",
54944
- "type": {
54945
- "text": "() => void | undefined"
54946
- },
54947
- "privacy": "private"
54948
- },
54949
- {
54950
- "kind": "method",
54951
- "name": "syncBlinking",
54952
- "privacy": "private"
54953
- },
54954
56137
  {
54955
56138
  "kind": "method",
54956
56139
  "name": "flap",
@@ -55000,6 +56183,22 @@
55000
56183
  "description": "Acknowledgement lifecycle state, controlling the frame's blinking/animation.\n- `acked-active`: Active and acknowledged (default); no blinking.\n- `unacked-active`: Active and not yet acknowledged; blinks.\n- `unacked-rectified`: Condition cleared but not yet acknowledged.",
55001
56184
  "fieldName": "mode"
55002
56185
  },
56186
+ {
56187
+ "name": "flashingSpeed",
56188
+ "type": {
56189
+ "text": "FlashingSpeed"
56190
+ },
56191
+ "description": "Flash tempo: `default` resolves from the alert type and mode (critical/alarm/high fast, warning/medium slow, low very slow, every rectified alert very slow, caution and diagnostic fixed), `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes. Acknowledged frames are always steady.",
56192
+ "fieldName": "flashingSpeed"
56193
+ },
56194
+ {
56195
+ "name": "flashEffect",
56196
+ "type": {
56197
+ "text": "ObcAlertFrameFlashEffect"
56198
+ },
56199
+ "description": "`outline` (default) grows the outline by 2 px while on in one step; `outline-eased` grows it over a 50 ms transition, a design-evaluation option.",
56200
+ "fieldName": "flashEffect"
56201
+ },
55003
56202
  {
55004
56203
  "name": "wrapContent",
55005
56204
  "type": {
@@ -55119,7 +56318,7 @@
55119
56318
  "declarations": [
55120
56319
  {
55121
56320
  "kind": "class",
55122
- "description": "`obc-alert-icon` – Animated alert icon for signaling alarm and warning states.\n\nDisplays a specialized icon with a blinking effect to visually indicate alert or warning conditions. The icon type is determined by the `name` property, supporting both alarm and warning variants in different states (such as silenced, unacknowledged, or rectified).\n\nAppears in notification areas, alert banners, or status panels to draw attention to active or historical alert conditions. The blinking animation helps highlight urgency or status changes without requiring user interaction.\n\n## Features\n- **Multiple Icon Types:** Supports all alarm and warning types.\n- **Blinking Animation:** Uses two SVG layers with alternating opacity to create a blinking effect, visually emphasizing the alert or warning state.\n- **Adaptive Styling:** Applies different CSS variables for alarm and warning types to allow for distinct visual cues (e.g., color, blink timing).\n- **Scalable:** Designed to fit any container size; scales with its parent element.\n\n## Usage Guidelines\nUse `obc-alert-icon` to visually represent the status of alarms or warnings in notification panels, alert lists, or system status areas. The blinking effect is intended to draw user attention to active or recent alert conditions. Select the appropriate `name` value to match the alert state you wish to indicate.\n\n**TODO(designer):** Provide guidance on when to use each icon variant (e.g., when to use \"rectified\" vs. \"silenced\"), and any best practices for icon placement or blink timing.\n\n## Properties\n- `type` (AlertType): The type of alarm to display.\n- `status` (AlarmStatus): The status of the alarm to display.\n\n## Best Practices\n- Only use the blinking alert icon for states that require immediate or prominent user attention.\n- Ensure the icon is sized appropriately for its context (e.g., 32x32px or 64x64px for status panels).\n- Avoid using multiple blinking icons in close proximity to prevent visual overload.\n\n## Example\n```html\n<obc-alert-icon .alarmType=${alarm.type} .alarmStatus=${alarm.status}></obc-alert-icon>\n```",
56321
+ "description": "`obc-alert-icon` – Animated alert icon for signaling alarm and warning states.\n\nDisplays a specialized icon with a blinking effect to visually indicate alert or warning conditions. The icon type is determined by the `name` property, supporting both alarm and warning variants in different states (such as silenced, unacknowledged, or rectified).\n\nAppears in notification areas, alert banners, or status panels to draw attention to active or historical alert conditions. The blinking animation helps highlight urgency or status changes without requiring user interaction.\n\n## Features\n- **Multiple Icon Types:** Supports all alarm and warning types.\n- **Flashing:** Two SVG layers alternate at the design tempo (fast for critical/alarm/high, slow for warning/medium, very slow for low and for every rectified alert); acknowledged icons are steady.\n- **Adaptive Styling:** Applies different CSS variables for alarm and warning types to allow for distinct visual cues (e.g., color, blink timing).\n- **Scalable:** Designed to fit any container size; scales with its parent element.\n\n## Usage Guidelines\nUse `obc-alert-icon` to visually represent the status of alarms or warnings in notification panels, alert lists, or system status areas. The blinking effect is intended to draw user attention to active or recent alert conditions. Select the appropriate `name` value to match the alert state you wish to indicate.\n\n**TODO(designer):** Provide guidance on when to use each icon variant (e.g., when to use \"rectified\" vs. \"silenced\"), and any best practices for icon placement or blink timing.\n\n## Properties\n- `type` (AlertType): The type of alarm to display.\n- `status` (AlarmStatus): The status of the alarm to display.\n\n## Best Practices\n- Only use the blinking alert icon for states that require immediate or prominent user attention.\n- Ensure the icon is sized appropriately for its context (e.g., 32x32px or 64x64px for status panels).\n- Avoid using multiple blinking icons in close proximity to prevent visual overload.\n\n## Example\n```html\n<obc-alert-icon .alarmType=${alarm.type} .alarmStatus=${alarm.status}></obc-alert-icon>\n```",
55123
56322
  "name": "ObcAlertIcon",
55124
56323
  "members": [
55125
56324
  {
@@ -55166,6 +56365,30 @@
55166
56365
  },
55167
56366
  "attribute": "silenced"
55168
56367
  },
56368
+ {
56369
+ "kind": "field",
56370
+ "name": "flashingSpeed",
56371
+ "type": {
56372
+ "text": "FlashingSpeed"
56373
+ },
56374
+ "description": "Flash tempo: `default` resolves from the alert type and state, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes. Acknowledged icons are always steady.",
56375
+ "attribute": "flashingSpeed"
56376
+ },
56377
+ {
56378
+ "kind": "field",
56379
+ "name": "flashing",
56380
+ "privacy": "protected",
56381
+ "readonly": true,
56382
+ "default": "new FlashingController( this, () => this.resolvedFlashingSpeed )"
56383
+ },
56384
+ {
56385
+ "kind": "field",
56386
+ "name": "resolvedFlashingSpeed",
56387
+ "type": {
56388
+ "text": "ResolvedFlashingSpeed"
56389
+ },
56390
+ "readonly": true
56391
+ },
55169
56392
  {
55170
56393
  "kind": "field",
55171
56394
  "name": "_effectiveType",
@@ -55207,24 +56430,6 @@
55207
56430
  "text": "TemplateResult | typeof nothing"
55208
56431
  }
55209
56432
  }
55210
- },
55211
- {
55212
- "kind": "field",
55213
- "name": "_blinkAnimationCancel",
55214
- "type": {
55215
- "text": "() => void | undefined"
55216
- },
55217
- "privacy": "private"
55218
- },
55219
- {
55220
- "kind": "method",
55221
- "name": "syncBlinking",
55222
- "privacy": "private",
55223
- "return": {
55224
- "type": {
55225
- "text": "void"
55226
- }
55227
- }
55228
56433
  }
55229
56434
  ],
55230
56435
  "attributes": [
@@ -55264,6 +56469,14 @@
55264
56469
  "text": "boolean | undefined"
55265
56470
  },
55266
56471
  "fieldName": "silenced"
56472
+ },
56473
+ {
56474
+ "name": "flashingSpeed",
56475
+ "type": {
56476
+ "text": "FlashingSpeed"
56477
+ },
56478
+ "description": "Flash tempo: `default` resolves from the alert type and state, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes. Acknowledged icons are always steady.",
56479
+ "fieldName": "flashingSpeed"
55267
56480
  }
55268
56481
  ],
55269
56482
  "superclass": {
@@ -97234,6 +98447,29 @@
97234
98447
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
97235
98448
  }
97236
98449
  },
98450
+ {
98451
+ "kind": "method",
98452
+ "name": "ownsSlottedScaleRange",
98453
+ "privacy": "protected",
98454
+ "return": {
98455
+ "type": {
98456
+ "text": "boolean"
98457
+ }
98458
+ },
98459
+ "parameters": [
98460
+ {
98461
+ "name": "side",
98462
+ "type": {
98463
+ "text": "'left' | 'right' | 'top' | 'bottom'"
98464
+ }
98465
+ }
98466
+ ],
98467
+ "description": "The right scale is this component's own bar, ranged by `minValue` /\n`maxValue`. `chartMinValue` / `chartMaxValue` exist so the plotted range\ncan differ from it, so the chart's axis range must not overwrite it.",
98468
+ "inheritedFrom": {
98469
+ "name": "ObcChartLineBase",
98470
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
98471
+ }
98472
+ },
97237
98473
  {
97238
98474
  "kind": "field",
97239
98475
  "name": "legend",
@@ -97799,6 +99035,24 @@
97799
99035
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
97800
99036
  }
97801
99037
  },
99038
+ {
99039
+ "kind": "field",
99040
+ "name": "xAxis",
99041
+ "type": {
99042
+ "text": "ChartLineXAxisConfig | undefined"
99043
+ },
99044
+ "default": "undefined",
99045
+ "description": "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.\n\nAvailable when `xAxisType!=category`.",
99046
+ "availableWhen": "xAxisType!=category",
99047
+ "availableWhenIf": {
99048
+ "arg": "xAxisType",
99049
+ "neq": "category"
99050
+ },
99051
+ "inheritedFrom": {
99052
+ "name": "ObcChartLineBase",
99053
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99054
+ }
99055
+ },
97802
99056
  {
97803
99057
  "kind": "field",
97804
99058
  "name": "showGridX",
@@ -97850,6 +99104,38 @@
97850
99104
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
97851
99105
  }
97852
99106
  },
99107
+ {
99108
+ "kind": "field",
99109
+ "name": "rangeLabels",
99110
+ "type": {
99111
+ "text": "RangeLabels"
99112
+ },
99113
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
99114
+ "attribute": "rangeLabels",
99115
+ "availableWhen": "hasLabelPadding==true",
99116
+ "availableWhenIf": {
99117
+ "arg": "hasLabelPadding",
99118
+ "truthy": true
99119
+ },
99120
+ "inheritedFrom": {
99121
+ "name": "ObcChartLineBase",
99122
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99123
+ }
99124
+ },
99125
+ {
99126
+ "kind": "field",
99127
+ "name": "primaryYAxisId",
99128
+ "type": {
99129
+ "text": "string"
99130
+ },
99131
+ "privacy": "private",
99132
+ "description": "Id of the y scale a dataset lands on when it names none. Chart.js would\notherwise add a default `y` scale next to the configured ones and draw it.",
99133
+ "readonly": true,
99134
+ "inheritedFrom": {
99135
+ "name": "ObcChartLineBase",
99136
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99137
+ }
99138
+ },
97853
99139
  {
97854
99140
  "kind": "field",
97855
99141
  "name": "DEFAULT_TENSION",
@@ -98009,6 +99295,237 @@
98009
99295
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
98010
99296
  }
98011
99297
  },
99298
+ {
99299
+ "kind": "field",
99300
+ "name": "savedMainTickmarkLabels",
99301
+ "privacy": "private",
99302
+ "default": "new WeakMap< ExternalScaleElement, boolean >()",
99303
+ "inheritedFrom": {
99304
+ "name": "ObcChartLineBase",
99305
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99306
+ }
99307
+ },
99308
+ {
99309
+ "kind": "field",
99310
+ "name": "wasBelowThreshold",
99311
+ "type": {
99312
+ "text": "boolean | undefined"
99313
+ },
99314
+ "privacy": "private",
99315
+ "description": "Last known threshold side, to notice a crossing in `updated()`.",
99316
+ "inheritedFrom": {
99317
+ "name": "ObcChartLineBase",
99318
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99319
+ }
99320
+ },
99321
+ {
99322
+ "kind": "method",
99323
+ "name": "compactLabelThickness",
99324
+ "privacy": "private",
99325
+ "return": {
99326
+ "type": {
99327
+ "text": "number | undefined"
99328
+ }
99329
+ },
99330
+ "parameters": [
99331
+ {
99332
+ "name": "axis",
99333
+ "type": {
99334
+ "text": "'x' | 'y'"
99335
+ }
99336
+ }
99337
+ ],
99338
+ "description": "Label band a slotted scale needs for its compact labels, in the scale's\nown viewBox units. The scale prints the raw values, so those are what is\nmeasured; the x band is one text line.",
99339
+ "inheritedFrom": {
99340
+ "name": "ObcChartLineBase",
99341
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99342
+ }
99343
+ },
99344
+ {
99345
+ "kind": "field",
99346
+ "name": "rangeLabelCache",
99347
+ "type": {
99348
+ "text": "{\n y: string[];\n x: string[];\n bounds?: {min: number; max: number};\n }"
99349
+ },
99350
+ "privacy": "private",
99351
+ "default": "{y: [], x: []}",
99352
+ "description": "Range labels for the current data and size, refreshed with every\n`getChartOptions()` so the plugin never rebuilds the datasets on a draw.",
99353
+ "inheritedFrom": {
99354
+ "name": "ObcChartLineBase",
99355
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99356
+ }
99357
+ },
99358
+ {
99359
+ "kind": "method",
99360
+ "name": "slotFor",
99361
+ "privacy": "private",
99362
+ "return": {
99363
+ "type": {
99364
+ "text": "HTMLSlotElement | undefined"
99365
+ }
99366
+ },
99367
+ "parameters": [
99368
+ {
99369
+ "name": "side",
99370
+ "type": {
99371
+ "text": "'left' | 'right' | 'top' | 'bottom'"
99372
+ }
99373
+ }
99374
+ ],
99375
+ "inheritedFrom": {
99376
+ "name": "ObcChartLineBase",
99377
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99378
+ }
99379
+ },
99380
+ {
99381
+ "kind": "method",
99382
+ "name": "hasSlottedScale",
99383
+ "privacy": "private",
99384
+ "return": {
99385
+ "type": {
99386
+ "text": "boolean"
99387
+ }
99388
+ },
99389
+ "parameters": [
99390
+ {
99391
+ "name": "side",
99392
+ "type": {
99393
+ "text": "'left' | 'right' | 'top' | 'bottom'"
99394
+ }
99395
+ }
99396
+ ],
99397
+ "inheritedFrom": {
99398
+ "name": "ObcChartLineBase",
99399
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99400
+ }
99401
+ },
99402
+ {
99403
+ "kind": "field",
99404
+ "name": "ySide",
99405
+ "type": {
99406
+ "text": "'left' | 'right'"
99407
+ },
99408
+ "privacy": "private",
99409
+ "readonly": true,
99410
+ "inheritedFrom": {
99411
+ "name": "ObcChartLineBase",
99412
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99413
+ }
99414
+ },
99415
+ {
99416
+ "kind": "method",
99417
+ "name": "rangeLabelFont",
99418
+ "privacy": "private",
99419
+ "return": {
99420
+ "type": {
99421
+ "text": "RangeLabelFont"
99422
+ }
99423
+ },
99424
+ "inheritedFrom": {
99425
+ "name": "ObcChartLineBase",
99426
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99427
+ }
99428
+ },
99429
+ {
99430
+ "kind": "method",
99431
+ "name": "dataExtents",
99432
+ "privacy": "private",
99433
+ "return": {
99434
+ "type": {
99435
+ "text": "{\n x?: {min: number; max: number};\n y: Map<string, {min: number; max: number}>;\n }"
99436
+ }
99437
+ },
99438
+ "parameters": [
99439
+ {
99440
+ "name": "prepared",
99441
+ "type": {
99442
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
99443
+ }
99444
+ }
99445
+ ],
99446
+ "description": "Extent of the prepared data: one for x, one per y scale id. Each y axis\nranges from its own datasets, so a merged extent would label one axis\nwith another's values.",
99447
+ "inheritedFrom": {
99448
+ "name": "ObcChartLineBase",
99449
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99450
+ }
99451
+ },
99452
+ {
99453
+ "kind": "method",
99454
+ "name": "yRangeBounds",
99455
+ "privacy": "private",
99456
+ "return": {
99457
+ "type": {
99458
+ "text": "{min: number; max: number} | undefined"
99459
+ }
99460
+ },
99461
+ "parameters": [
99462
+ {
99463
+ "name": "extents",
99464
+ "type": {
99465
+ "text": "Map<string, {min: number; max: number}>"
99466
+ }
99467
+ }
99468
+ ],
99469
+ "description": "Range the y labels describe. Below the threshold the axis runs on data\nbounds, so its datasets' extent is exact and needs no chart to read from.",
99470
+ "inheritedFrom": {
99471
+ "name": "ObcChartLineBase",
99472
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99473
+ }
99474
+ },
99475
+ {
99476
+ "kind": "method",
99477
+ "name": "xEdgeLabelTexts",
99478
+ "privacy": "private",
99479
+ "return": {
99480
+ "type": {
99481
+ "text": "string[]"
99482
+ }
99483
+ },
99484
+ "parameters": [
99485
+ {
99486
+ "name": "prepared",
99487
+ "type": {
99488
+ "text": "ReturnType<ObcChartLineBase['prepareChartDataAndLabels']>"
99489
+ }
99490
+ },
99491
+ {
99492
+ "name": "extent",
99493
+ "type": {
99494
+ "text": "{min: number; max: number} | undefined"
99495
+ }
99496
+ }
99497
+ ],
99498
+ "description": "First and last x label, or nothing when there is no span to label.",
99499
+ "inheritedFrom": {
99500
+ "name": "ObcChartLineBase",
99501
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99502
+ }
99503
+ },
99504
+ {
99505
+ "kind": "method",
99506
+ "name": "refreshRangeLabels",
99507
+ "privacy": "private",
99508
+ "return": {
99509
+ "type": {
99510
+ "text": "typeof this.rangeLabelCache"
99511
+ }
99512
+ },
99513
+ "description": "Recompute the range labels. A side with a slotted scale is labelled by\nthe scale, so it gets no text here; the y bounds are kept regardless,\nsince the scale's compact band is measured from them.",
99514
+ "inheritedFrom": {
99515
+ "name": "ObcChartLineBase",
99516
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99517
+ }
99518
+ },
99519
+ {
99520
+ "kind": "method",
99521
+ "name": "createRangeLabelsPlugin",
99522
+ "privacy": "private",
99523
+ "description": "Paints min / 0 / max and first / last once Chart.js has drawn, inside the\ngutters `getChartOptions()` reserved. The end labels sit flush with the\nplot edges so no vertical padding is needed for them.",
99524
+ "inheritedFrom": {
99525
+ "name": "ObcChartLineBase",
99526
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99527
+ }
99528
+ },
98012
99529
  {
98013
99530
  "kind": "method",
98014
99531
  "name": "hasVisibleScale",
@@ -98136,6 +99653,44 @@
98136
99653
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
98137
99654
  }
98138
99655
  },
99656
+ {
99657
+ "kind": "method",
99658
+ "name": "resolveAxisRange",
99659
+ "privacy": "private",
99660
+ "return": {
99661
+ "type": {
99662
+ "text": "{\n min: number;\n max: number;\n }"
99663
+ }
99664
+ },
99665
+ "parameters": [
99666
+ {
99667
+ "name": "side",
99668
+ "type": {
99669
+ "text": "'left' | 'right' | 'x'"
99670
+ }
99671
+ }
99672
+ ],
99673
+ "description": "Range a slotted scale on the given side has to cover.\n\nA range pinned in the axis configuration is used as is: it is the source\nof truth, and on the first sync there is no chart to read yet. Otherwise\nthe live Chart.js scale is read under the id `buildScalesConfig()` gives\nit. A side with no axis of its own follows the first configured one.",
99674
+ "inheritedFrom": {
99675
+ "name": "ObcChartLineBase",
99676
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99677
+ }
99678
+ },
99679
+ {
99680
+ "kind": "method",
99681
+ "name": "resolveSlottedXRange",
99682
+ "privacy": "private",
99683
+ "return": {
99684
+ "type": {
99685
+ "text": "{min: number; max: number} | undefined"
99686
+ }
99687
+ },
99688
+ "description": "Range pushed to the top and bottom scales, or `undefined` to leave them\nalone. A scale prints its values verbatim, and on a `time` axis the raw\nrange is epoch milliseconds. In `minutes` display the range is converted\nto the minutes the chart's own labels show; `date` display has no numeric\nequivalent, so the scale keeps its own range.",
99689
+ "inheritedFrom": {
99690
+ "name": "ObcChartLineBase",
99691
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99692
+ }
99693
+ },
98139
99694
  {
98140
99695
  "kind": "method",
98141
99696
  "name": "updateScaleProperties",
@@ -98154,6 +99709,16 @@
98154
99709
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
98155
99710
  }
98156
99711
  },
99712
+ {
99713
+ "kind": "method",
99714
+ "name": "syncSlottedScaleRanges",
99715
+ "privacy": "private",
99716
+ "description": "Push the current axis ranges to the slotted scales. The full\n`updateScaleProperties()` cascade runs before the chart is (re)built and\nso reads the previous chart's ranges; this closes that gap once the new\nchart exists, and keeps auto-ranged scales in step with the data.",
99717
+ "inheritedFrom": {
99718
+ "name": "ObcChartLineBase",
99719
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99720
+ }
99721
+ },
98157
99722
  {
98158
99723
  "kind": "method",
98159
99724
  "name": "hasAnyChanged",
@@ -98364,6 +99929,21 @@
98364
99929
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
98365
99930
  }
98366
99931
  },
99932
+ {
99933
+ "kind": "method",
99934
+ "name": "computeChartPadding",
99935
+ "privacy": "private",
99936
+ "return": {
99937
+ "type": {
99938
+ "text": "{\n top: number;\n right: number;\n bottom: number;\n left: number;\n }"
99939
+ }
99940
+ },
99941
+ "description": "One padding source for the Chart.js layout and the slotted scales: two\nsources painted the canvas over a scale and inset a scale inside a chart.",
99942
+ "inheritedFrom": {
99943
+ "name": "ObcChartLineBase",
99944
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
99945
+ }
99946
+ },
98367
99947
  {
98368
99948
  "kind": "method",
98369
99949
  "name": "getChartOptions",
@@ -98388,7 +99968,7 @@
98388
99968
  "text": "number | undefined"
98389
99969
  }
98390
99970
  },
98391
- "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode.",
99971
+ "description": "Compute reference timestamp for time axis formatting.\nReturns earliest timestamp for 'date' mode, latest for 'minutes' mode.\nA pinned x range supplies the reference instead, so the axis edge stays\nthe reference while the data has not reached it yet.",
98392
99972
  "inheritedFrom": {
98393
99973
  "name": "ObcChartLineBase",
98394
99974
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
@@ -98864,6 +100444,18 @@
98864
100444
  "module": "src/building-blocks/chart-line/chart-line-base.ts"
98865
100445
  }
98866
100446
  },
100447
+ {
100448
+ "name": "rangeLabels",
100449
+ "type": {
100450
+ "text": "RangeLabels"
100451
+ },
100452
+ "description": "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.\n\nAvailable when `hasLabelPadding==true`.",
100453
+ "fieldName": "rangeLabels",
100454
+ "inheritedFrom": {
100455
+ "name": "ObcChartLineBase",
100456
+ "module": "src/building-blocks/chart-line/chart-line-base.ts"
100457
+ }
100458
+ },
98867
100459
  {
98868
100460
  "name": "showPoints",
98869
100461
  "type": {