@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.111 → 2.0.0-next.113

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 (85) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +185 -29
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +180 -21
  4. package/dist/building-blocks/readout-block/readout-block.d.ts +29 -5
  5. package/dist/building-blocks/readout-block/readout-block.d.ts.map +1 -1
  6. package/dist/building-blocks/readout-block/readout-block.js +21 -7
  7. package/dist/building-blocks/readout-block/readout-block.js.map +1 -1
  8. package/dist/navigation-instruments/compass/compass.d.ts +1 -1
  9. package/dist/navigation-instruments/compass/compass.d.ts.map +1 -1
  10. package/dist/navigation-instruments/compass/compass.js +1 -1
  11. package/dist/navigation-instruments/compass/compass.js.map +1 -1
  12. package/dist/navigation-instruments/current/current.d.ts +25 -0
  13. package/dist/navigation-instruments/current/current.d.ts.map +1 -1
  14. package/dist/navigation-instruments/current/current.js +25 -4
  15. package/dist/navigation-instruments/current/current.js.map +1 -1
  16. package/dist/navigation-instruments/heading/heading.js +1 -1
  17. package/dist/navigation-instruments/heading/heading.js.map +1 -1
  18. package/dist/navigation-instruments/pitch-roll-heave/pitch-roll-heave.d.ts +6 -0
  19. package/dist/navigation-instruments/pitch-roll-heave/pitch-roll-heave.d.ts.map +1 -1
  20. package/dist/navigation-instruments/pitch-roll-heave/pitch-roll-heave.js +8 -1
  21. package/dist/navigation-instruments/pitch-roll-heave/pitch-roll-heave.js.map +1 -1
  22. package/dist/navigation-instruments/rate-of-turn/rate-of-turn.d.ts +5 -2
  23. package/dist/navigation-instruments/rate-of-turn/rate-of-turn.d.ts.map +1 -1
  24. package/dist/navigation-instruments/rate-of-turn/rate-of-turn.js.map +1 -1
  25. package/dist/navigation-instruments/readout/readout-formatters.d.ts +31 -0
  26. package/dist/navigation-instruments/readout/readout-formatters.d.ts.map +1 -1
  27. package/dist/navigation-instruments/readout/readout-formatters.js +55 -1
  28. package/dist/navigation-instruments/readout/readout-formatters.js.map +1 -1
  29. package/dist/navigation-instruments/readout/readout.d.ts +26 -1
  30. package/dist/navigation-instruments/readout/readout.d.ts.map +1 -1
  31. package/dist/navigation-instruments/readout/readout.js +16 -3
  32. package/dist/navigation-instruments/readout/readout.js.map +1 -1
  33. package/dist/navigation-instruments/readout-list/readout-list.d.ts +6 -1
  34. package/dist/navigation-instruments/readout-list/readout-list.d.ts.map +1 -1
  35. package/dist/navigation-instruments/readout-list/readout-list.js +21 -4
  36. package/dist/navigation-instruments/readout-list/readout-list.js.map +1 -1
  37. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts +26 -1
  38. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts.map +1 -1
  39. package/dist/navigation-instruments/readout-list-item/readout-list-item.js +15 -3
  40. package/dist/navigation-instruments/readout-list-item/readout-list-item.js.map +1 -1
  41. package/dist/navigation-instruments/top-view-propulsion/top-view-propulsion.d.ts +6 -0
  42. package/dist/navigation-instruments/top-view-propulsion/top-view-propulsion.d.ts.map +1 -1
  43. package/dist/navigation-instruments/top-view-propulsion/top-view-propulsion.js +19 -4
  44. package/dist/navigation-instruments/top-view-propulsion/top-view-propulsion.js.map +1 -1
  45. package/dist/navigation-instruments/watch/environment.d.ts +8 -0
  46. package/dist/navigation-instruments/watch/environment.d.ts.map +1 -1
  47. package/dist/navigation-instruments/watch/environment.js +3 -0
  48. package/dist/navigation-instruments/watch/environment.js.map +1 -1
  49. package/dist/navigation-instruments/watch/force-pattern.d.ts +20 -2
  50. package/dist/navigation-instruments/watch/force-pattern.d.ts.map +1 -1
  51. package/dist/navigation-instruments/watch/force-pattern.js +12 -5
  52. package/dist/navigation-instruments/watch/force-pattern.js.map +1 -1
  53. package/dist/navigation-instruments/watch/watch.d.ts.map +1 -1
  54. package/dist/navigation-instruments/watch/watch.js +6 -4
  55. package/dist/navigation-instruments/watch/watch.js.map +1 -1
  56. package/dist/navigation-instruments/wind/wind.d.ts +5 -2
  57. package/dist/navigation-instruments/wind/wind.d.ts.map +1 -1
  58. package/dist/navigation-instruments/wind/wind.js +5 -1
  59. package/dist/navigation-instruments/wind/wind.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/building-blocks/readout-block/readout-block.stories.ts +112 -3
  62. package/src/building-blocks/readout-block/readout-block.ts +64 -10
  63. package/src/navigation-instruments/compass/compass.ts +2 -2
  64. package/src/navigation-instruments/current/current.stories.ts +33 -0
  65. package/src/navigation-instruments/current/current.ts +37 -3
  66. package/src/navigation-instruments/heading/heading.stories.ts +6 -4
  67. package/src/navigation-instruments/heading/heading.ts +1 -1
  68. package/src/navigation-instruments/pitch-roll-heave/pitch-roll-heave.ts +8 -1
  69. package/src/navigation-instruments/rate-of-turn/rate-of-turn.stories.ts +3 -3
  70. package/src/navigation-instruments/rate-of-turn/rate-of-turn.ts +5 -2
  71. package/src/navigation-instruments/readout/readout-formatters.spec.ts +229 -0
  72. package/src/navigation-instruments/readout/readout-formatters.ts +105 -0
  73. package/src/navigation-instruments/readout/readout.stories.ts +167 -3
  74. package/src/navigation-instruments/readout/readout.ts +52 -4
  75. package/src/navigation-instruments/readout-list/readout-list.stories.ts +122 -1
  76. package/src/navigation-instruments/readout-list/readout-list.ts +54 -5
  77. package/src/navigation-instruments/readout-list-item/readout-list-item.stories.ts +124 -4
  78. package/src/navigation-instruments/readout-list-item/readout-list-item.ts +53 -4
  79. package/src/navigation-instruments/top-view-propulsion/top-view-propulsion.ts +20 -2
  80. package/src/navigation-instruments/watch/environment.ts +10 -0
  81. package/src/navigation-instruments/watch/force-pattern.spec.ts +42 -0
  82. package/src/navigation-instruments/watch/force-pattern.ts +44 -7
  83. package/src/navigation-instruments/watch/watch.ts +20 -5
  84. package/src/navigation-instruments/wind/wind.spec.ts +3 -1
  85. package/src/navigation-instruments/wind/wind.ts +12 -3
@@ -40052,7 +40052,7 @@
40052
40052
  "declarations": [
40053
40053
  {
40054
40054
  "kind": "class",
40055
- "description": "`<obc-readout-block>` – the most atomic readout primitive: a single\ncap-height-aligned, width-reservable numeric segment (value / setpoint /\nadvice).\n\nIt renders one `obc-textbox` number with optional hinted leading zeros, a\nreservable width, an optional leading marker icon (via the `icon` slot or the\nrole default), an optional trailing degree glyph, an `off`/unavailable text\nstate, per-block data-quality and an optional per-block alert frame.\n\nThis is a building block used inside `obc-readout-list-item` (and, in a future\nrefactor, inside `obc-readout`); it is not normally used on its own. Colour is\ninherited from the host context (the parent sets the role colour), so the\nblock stays neutral until placed.",
40055
+ "description": "`<obc-readout-block>` – the most atomic readout primitive: a single\ncap-height-aligned, width-reservable numeric segment (value / setpoint /\nadvice).\n\nIt renders one `obc-textbox` number with optional hinted leading zeros, a\nreservable width, an optional leading marker icon (via the `icon` slot or the\nrole default), an optional trailing degree glyph, an `off`/unavailable text\nstate, per-block data-quality and an optional per-block alert frame.\n\nSetting `valueType` to `text` renders `value` verbatim (e.g.\n`\"Auto\"`) instead of a formatted number.\n\nThis is a building block used inside `obc-readout-list-item` (and, in a future\nrefactor, inside `obc-readout`); it is not normally used on its own. Colour is\ninherited from the host context (the parent sets the role colour), so the\nblock stays neutral until placed.",
40056
40056
  "name": "ObcReadoutBlock",
40057
40057
  "cssParts": [
40058
40058
  {
@@ -40096,12 +40096,21 @@
40096
40096
  "kind": "field",
40097
40097
  "name": "value",
40098
40098
  "type": {
40099
- "text": "number | null"
40099
+ "text": "number | string | null"
40100
40100
  },
40101
40101
  "default": "null",
40102
- "description": "The numeric value; `null`/`undefined` renders a dash.",
40102
+ "description": "The value; `null`/`undefined` renders a dash. A number by default, or text\nwhen valueType is `text`.",
40103
40103
  "attribute": "value"
40104
40104
  },
40105
+ {
40106
+ "kind": "field",
40107
+ "name": "valueType",
40108
+ "type": {
40109
+ "text": "ReadoutValueType"
40110
+ },
40111
+ "description": "How value is interpreted. `number` (default) formats it via\n`fractionDigits`; `text` renders it verbatim and ignores the numeric\nformat options. Passing text while this is `number` throws.",
40112
+ "attribute": "valueType"
40113
+ },
40105
40114
  {
40106
40115
  "kind": "field",
40107
40116
  "name": "size",
@@ -40384,12 +40393,20 @@
40384
40393
  {
40385
40394
  "name": "value",
40386
40395
  "type": {
40387
- "text": "number | null"
40396
+ "text": "number | string | null"
40388
40397
  },
40389
40398
  "default": "null",
40390
- "description": "The numeric value; `null`/`undefined` renders a dash.",
40399
+ "description": "The value; `null`/`undefined` renders a dash. A number by default, or text\nwhen valueType is `text`.",
40391
40400
  "fieldName": "value"
40392
40401
  },
40402
+ {
40403
+ "name": "valueType",
40404
+ "type": {
40405
+ "text": "ReadoutValueType"
40406
+ },
40407
+ "description": "How value is interpreted. `number` (default) formats it via\n`fractionDigits`; `text` renders it verbatim and ignores the numeric\nformat options. Passing text while this is `number` throws.",
40408
+ "fieldName": "valueType"
40409
+ },
40393
40410
  {
40394
40411
  "name": "size",
40395
40412
  "type": {
@@ -40570,6 +40587,14 @@
40570
40587
  "module": "../../components/textbox/textbox.js"
40571
40588
  }
40572
40589
  },
40590
+ {
40591
+ "kind": "js",
40592
+ "name": "ReadoutValueType",
40593
+ "declaration": {
40594
+ "name": "ReadoutValueType",
40595
+ "module": "../../navigation-instruments/readout/readout-formatters.js"
40596
+ }
40597
+ },
40573
40598
  {
40574
40599
  "kind": "js",
40575
40600
  "name": "ObcReadoutBlock",
@@ -77021,7 +77046,7 @@
77021
77046
  "text": "boolean"
77022
77047
  },
77023
77048
  "default": "false",
77024
- "description": "Show compass NSEW labels and north arrow.",
77049
+ "description": "Show compass NSEW labels. The north arrow is always shown, independent of this flag.",
77025
77050
  "attribute": "showLabels"
77026
77051
  },
77027
77052
  {
@@ -77427,7 +77452,7 @@
77427
77452
  "text": "boolean"
77428
77453
  },
77429
77454
  "default": "false",
77430
- "description": "Show compass NSEW labels and north arrow.",
77455
+ "description": "Show compass NSEW labels. The north arrow is always shown, independent of this flag.",
77431
77456
  "fieldName": "showLabels"
77432
77457
  },
77433
77458
  {
@@ -77521,7 +77546,7 @@
77521
77546
  "declarations": [
77522
77547
  {
77523
77548
  "kind": "class",
77524
- "description": "`<obc-current>` – Water-current instrument with direction chevrons and a\nforce-graphics band pattern.\n\nRenders the current's from-direction and strength on a circular watch\nface. Two layouts are available via `type`: `vessel` (default) shows a\nvessel silhouette on a double-ring track face with a chevron icon at the\nperiphery pointing with the flow; `direction` shows a single-ring face\nwith a large centered chevron icon. In both, a soft band pattern fills the\nface, rotated perpendicular to the flow.\n\n## Features\n\n- **Types**: `vessel` (track face + vessel + peripheral icon) or\n `direction` (single ring + large centered icon) via `type`.\n- **Strength buckets**: `currentSpeed` selects the chevron icon\n (`0`–`4` = number of chevrons); values are rounded and clamped.\n- **Color priority**: `priority=enhanced` switches the pattern and icon to\n the enhanced (blue) palette.\n- **Vessel image**: configurable silhouette rotating with\n `vesselHeadingDeg` (vessel type).\n\n## Usage Guidelines\n\nSet `currentSpeed` and `currentFromDirection` to the sensor values. Use\n`obc-wind` for the analogous wind instrument; use `obc-compass` when the\ncurrent indicator should overlay a full compass.\n\n## Example\n\n```html\n<obc-current\n currentSpeed=\"3\"\n currentFromDirection=\"330\"\n vesselHeadingDeg=\"15\"\n></obc-current>\n```",
77549
+ "description": "`<obc-current>` – Water-current instrument with direction chevrons and a\nforce-graphics band pattern.\n\nRenders the current's from-direction and strength on a circular watch\nface. Two layouts are available via `type`: `vessel` (default) shows a\nvessel silhouette on a double-ring track face with a chevron icon at the\nperiphery pointing with the flow; `direction` shows a single-ring face\nwith a large centered chevron icon. In both, a soft band pattern fills the\nface, rotated perpendicular to the flow.\n\n## Features\n\n- **Types**: `vessel` (track face + vessel + peripheral icon) or\n `direction` (single ring + large centered icon) via `type`.\n- **Strength buckets**: `currentSpeed` selects the chevron icon\n (`0`–`4` = number of chevrons); values are rounded and clamped.\n- **Color priority**: `priority=enhanced` switches the pattern and icon to\n the enhanced (blue) palette.\n- **Vessel image**: configurable silhouette rotating with\n `vesselHeadingDeg` (vessel type).\n- **Pattern toggle & wave tuning**: `hasPattern` switches the band pattern\n off; `waveLength`, `waveHeight` and `waveSpeed` tune the band spacing,\n intensity and drift motion.\n\n## Usage Guidelines\n\nSet `currentSpeed` and `currentFromDirection` to the sensor values. Use\n`obc-wind` for the analogous wind instrument; use `obc-compass` when the\ncurrent indicator should overlay a full compass.\n\n## Example\n\n```html\n<obc-current\n currentSpeed=\"3\"\n currentFromDirection=\"330\"\n vesselHeadingDeg=\"15\"\n></obc-current>\n```",
77525
77550
  "name": "ObcCurrent",
77526
77551
  "members": [
77527
77552
  {
@@ -77562,6 +77587,45 @@
77562
77587
  "description": "Color priority: `Priority.enhanced` uses the blue/enhanced palette (default: `Priority.regular`).",
77563
77588
  "attribute": "priority"
77564
77589
  },
77590
+ {
77591
+ "kind": "field",
77592
+ "name": "hasPattern",
77593
+ "type": {
77594
+ "text": "boolean"
77595
+ },
77596
+ "default": "true",
77597
+ "description": "Show the force-graphics band pattern behind the watch face."
77598
+ },
77599
+ {
77600
+ "kind": "field",
77601
+ "name": "waveLength",
77602
+ "type": {
77603
+ "text": "number"
77604
+ },
77605
+ "default": "1",
77606
+ "description": "Wavelength of the pattern bands as a multiplier on the design spacing\n(1 = design, 0.5 = twice as dense).",
77607
+ "attribute": "waveLength"
77608
+ },
77609
+ {
77610
+ "kind": "field",
77611
+ "name": "waveHeight",
77612
+ "type": {
77613
+ "text": "number"
77614
+ },
77615
+ "default": "1",
77616
+ "description": "Wave intensity: the peak opacity the pattern bands fade up to (0–1).",
77617
+ "attribute": "waveHeight"
77618
+ },
77619
+ {
77620
+ "kind": "field",
77621
+ "name": "waveSpeed",
77622
+ "type": {
77623
+ "text": "number"
77624
+ },
77625
+ "default": "0",
77626
+ "description": "Drift speed of the pattern in wavelengths per second, moving with the\nflow (negative drifts against it); 0 keeps the pattern static.",
77627
+ "attribute": "waveSpeed"
77628
+ },
77565
77629
  {
77566
77630
  "kind": "field",
77567
77631
  "name": "vesselImage",
@@ -77648,6 +77712,33 @@
77648
77712
  "description": "Color priority: `Priority.enhanced` uses the blue/enhanced palette (default: `Priority.regular`).",
77649
77713
  "fieldName": "priority"
77650
77714
  },
77715
+ {
77716
+ "name": "waveLength",
77717
+ "type": {
77718
+ "text": "number"
77719
+ },
77720
+ "default": "1",
77721
+ "description": "Wavelength of the pattern bands as a multiplier on the design spacing\n(1 = design, 0.5 = twice as dense).",
77722
+ "fieldName": "waveLength"
77723
+ },
77724
+ {
77725
+ "name": "waveHeight",
77726
+ "type": {
77727
+ "text": "number"
77728
+ },
77729
+ "default": "1",
77730
+ "description": "Wave intensity: the peak opacity the pattern bands fade up to (0–1).",
77731
+ "fieldName": "waveHeight"
77732
+ },
77733
+ {
77734
+ "name": "waveSpeed",
77735
+ "type": {
77736
+ "text": "number"
77737
+ },
77738
+ "default": "0",
77739
+ "description": "Drift speed of the pattern in wavelengths per second, moving with the\nflow (negative drifts against it); 0 keeps the pattern static.",
77740
+ "fieldName": "waveSpeed"
77741
+ },
77651
77742
  {
77652
77743
  "name": "vesselImage",
77653
77744
  "type": {
@@ -87967,7 +88058,7 @@
87967
88058
  "text": "SVGTemplateResult"
87968
88059
  }
87969
88060
  },
87970
- "description": "Crosshair drawn on the overlay rather than through `obc-watch`'s own\n`crosshairEnabled`: the design has the arc bands covering the arms, but\n`obc-watch` renders its crosshair after the bands, i.e. on top of them.\nDrawing it here puts it under the watch layer, so the bands and the heave\ncolumn mask it naturally."
88061
+ "description": "Crosshair drawn on the overlay rather than through `obc-watch`'s own\n`crosshairEnabled`: the design has the arc bands covering the arms, but\n`obc-watch` renders its crosshair after the bands, i.e. on top of them.\nDrawing it here puts it under the watch layer, so the bands and the heave\ncolumn mask it naturally.\n\nIn `single-scale` nothing frames the segment above the vessel (the other\nthree arms end under the pitch band, roll band and heave column), so the\nvertical arm stops at the centre instead of continuing upward. In\n`dual-scale` the top roll band gives it a natural endpoint, so the full\narm is kept."
87971
88062
  },
87972
88063
  {
87973
88064
  "kind": "method",
@@ -90661,7 +90752,7 @@
90661
90752
  "declarations": [
90662
90753
  {
90663
90754
  "kind": "class",
90664
- "description": "`<obc-rate-of-turn>` — Standalone rate-of-turn indicator rendered on a circular watch face.\n\nWraps `<obc-watch>` to display a spinning-dot or arc-bar ROT visualization\nwithout any additional instrument overlays. Useful for isolating the ROT\nindicator in layouts where heading/compass elements are handled separately.\n\n## Features\n\n- **Dot mode** (`rotType=\"dots\"`): Five evenly-spaced dots spin at the\n resolved rotations-per-minute (derived from\n `rateOfTurnDegreesPerMinute × rotDotAnimationFactor / 360`).\n- **Bar mode** (`rotType=\"bar\"`): A banana-shaped arc from `barStartAngle`\n to `barEndAngle` with clipped spinning dots inside.\n- **Track position**: Place the indicator on the outer scale ring\n (`rotPosition=\"scale\"`) or the inner circle\n (`rotPosition=\"innerCircle\"`).\n- **Track bar** (`hasTrackBar`): A bar in the ring band growing from the\n twelve o'clock position to the measured rate of turn, with a needle\n marker at its end and sector tickmarks (pairs with\n `watchCircleType=\"double\"` for the banded face).\n- **Center readout** (`hasReadout`): A centered readout showing the\n measured rate of turn (label `ROT`, unit `DEG/min` by default).\n- **Color priority**: Uses `priority` to select regular or enhanced color\n palette; `rotPortStarboard` colors the track bar and needle by turn\n direction.\n\n## Usage Guidelines\n\n- Set `rateOfTurnDegreesPerMinute` to the current sensor value in degrees\n per minute (the maritime/AIS convention). Sign controls direction\n (positive = starboard / clockwise).\n- Tune `rotDotAnimationFactor` to amplify the dot animation independently\n of the physical value (default `18` ≈ 1 rpm at 20°/min).\n- In bar mode, `barStartAngle` and `barEndAngle` define the static arc\n span (0° = 12 o'clock, clockwise).\n- Change `watchCircleType` to match the surrounding instrument ring style\n (e.g. `triple` for compass contexts).",
90755
+ "description": "`<obc-rate-of-turn>` — Standalone rate-of-turn indicator rendered on a circular watch face.\n\nWraps `<obc-watch>` to display a spinning-dot or arc-bar ROT visualization\nwithout any additional instrument overlays. Useful for isolating the ROT\nindicator in layouts where heading/compass elements are handled separately.\n\n## Features\n\n- **Dot mode** (`rotType=\"dots\"`): Five evenly-spaced dots spin at the\n resolved rotations-per-minute (derived from\n `rateOfTurnDegreesPerMinute × rotDotAnimationFactor / 360`).\n- **Bar mode** (`rotType=\"bar\"`): A banana-shaped arc from `barStartAngle`\n to `barEndAngle` with clipped spinning dots inside.\n- **Track position**: Place the indicator on the outer scale ring\n (`rotPosition=\"scale\"`) or the inner circle\n (`rotPosition=\"innerCircle\"`).\n- **Track bar** (`hasTrackBar`): A bar in the ring band growing from the\n twelve o'clock position to the measured rate of turn, with a needle\n marker at its end and sector tickmarks (pairs with\n `watchCircleType=\"double\"` for the banded face, or `\"triple\"` when the\n ROT dots sit on the inner circle).\n- **Center readout** (`hasReadout`): A centered readout showing the\n measured rate of turn (label `ROT`, unit `DEG/min` by default).\n- **Color priority**: Uses `priority` to select regular or enhanced color\n palette; `rotPortStarboard` colors the track bar and needle by turn\n direction.\n\n## Usage Guidelines\n\n- Set `rateOfTurnDegreesPerMinute` to the current sensor value in degrees\n per minute (the maritime/AIS convention). Sign controls direction\n (positive = starboard / clockwise).\n- Tune `rotDotAnimationFactor` to amplify the dot animation independently\n of the physical value (default `18` ≈ 1 rpm at 20°/min).\n- In bar mode, `barStartAngle` and `barEndAngle` define the static arc\n span (0° = 12 o'clock, clockwise).\n- Change `watchCircleType` to match the surrounding instrument ring style\n (e.g. `triple` for compass contexts).",
90665
90756
  "name": "ObcRateOfTurn",
90666
90757
  "members": [
90667
90758
  {
@@ -90768,7 +90859,7 @@
90768
90859
  "text": "boolean"
90769
90860
  },
90770
90861
  "default": "false",
90771
- "description": "When `true`, shows a bar in the ring band from the twelve o'clock\nposition to the measured rate of turn, with a needle marker at its end\nand sector tickmarks. Pairs with `watchCircleType=\"double\"` for the\nbanded face. Driven by `rateOfTurnDegreesPerMinute` only.",
90862
+ "description": "When `true`, shows a bar in the ring band from the twelve o'clock\nposition to the measured rate of turn, with a needle marker at its end\nand sector tickmarks. Pairs with `watchCircleType=\"double\"` for the\nbanded face — or `\"triple\"` when `rotPosition` is `innerCircle`, so the\ndots get their inner track too. Driven by `rateOfTurnDegreesPerMinute`\nonly.",
90772
90863
  "attribute": "hasTrackBar"
90773
90864
  },
90774
90865
  {
@@ -90961,7 +91052,7 @@
90961
91052
  "text": "boolean"
90962
91053
  },
90963
91054
  "default": "false",
90964
- "description": "When `true`, shows a bar in the ring band from the twelve o'clock\nposition to the measured rate of turn, with a needle marker at its end\nand sector tickmarks. Pairs with `watchCircleType=\"double\"` for the\nbanded face. Driven by `rateOfTurnDegreesPerMinute` only.",
91055
+ "description": "When `true`, shows a bar in the ring band from the twelve o'clock\nposition to the measured rate of turn, with a needle marker at its end\nand sector tickmarks. Pairs with `watchCircleType=\"double\"` for the\nbanded face — or `\"triple\"` when `rotPosition` is `innerCircle`, so the\ndots get their inner track too. Driven by `rateOfTurnDegreesPerMinute`\nonly.",
90965
91056
  "fieldName": "hasTrackBar"
90966
91057
  },
90967
91058
  {
@@ -91068,7 +91159,7 @@
91068
91159
  "declarations": [
91069
91160
  {
91070
91161
  "kind": "class",
91071
- "description": "`<obc-readout-list-item>` – A compact, dense readout row for lists and tables.\n\nRenders a label, an optional source, an optional unit, and up to three\ncap-height \"readout building blocks\" – advice, setpoint, and value – each a\nfixed-width-reservable numeric segment. Dynamic data is passed as top-level\nprimitives (`value`, `setpoint`, `advice`, `label`, `unit`, `src`). Global\nlayout/format is configured via top-level props (`size`, `priority`,\n`stacking`, `hasDegree`, `dataQuality`, `alert`, …) and per-block tweaks via one\nobject per block (`valueOptions`, `setpointOptions`, `adviceOptions`,\n`unitOptions`, `srcOptions`).\n\n### Features\n- **Building blocks:** value, optional setpoint, and optional advice segments,\n each cap-height-aligned and able to reserve a stable width.\n- **Sizes:** `small`, `medium`, `large` density scales.\n- **Stacking:** `trailing-unit`, `leading-unit`, `leading-src` placement.\n- **Priority:** `regular`/`enhanced` colour emphasis; per-value `weight`\n (`regular`/`semibold`/`bold`) is independent of colour.\n- **Setpoint flip-flop:** swaps emphasis between value and setpoint as the\n value reaches the setpoint.\n- **Data quality:** `low-integrity`/`invalid` styling, combinable with `alert`.\n- **Alert frame:** optional `alert` wrapper (caution/warning/alarm/level).\n- **Clickable:** optionally rendered as a focusable button with `squared`,\n `round-corners`, or `round` corners.\n- **Formatting:** shared `fractionDigits`, width reservation via `maxDigits`\n and per-segment `hintedZeros`; a `null` value renders a dash (`-`).\n\n### Usage Guidelines\nUse for dense readout rows in lists/tables. Prefer `<obc-readout>` for rich\nmulti-segment instrument layouts, source pickers, or flyout behaviour.",
91162
+ "description": "`<obc-readout-list-item>` – A compact, dense readout row for lists and tables.\n\nRenders a label, an optional source, an optional unit, and up to three\ncap-height \"readout building blocks\" – advice, setpoint, and value – each a\nfixed-width-reservable numeric segment. Dynamic data is passed as top-level\nprimitives (`value`, `setpoint`, `advice`, `label`, `unit`, `src`). Global\nlayout/format is configured via top-level props (`size`, `priority`,\n`stacking`, `hasDegree`, `dataQuality`, `alert`, …) and per-block tweaks via one\nobject per block (`valueOptions`, `setpointOptions`, `adviceOptions`,\n`unitOptions`, `srcOptions`).\n\n### Features\n- **Building blocks:** value, optional setpoint, and optional advice segments,\n each cap-height-aligned and able to reserve a stable width.\n- **Sizes:** `small`, `medium`, `large` density scales.\n- **Stacking:** `trailing-unit`, `leading-unit`, `leading-src` placement.\n- **Priority:** `regular`/`enhanced` colour emphasis; per-value `weight`\n (`regular`/`semibold`/`bold`) is independent of colour.\n- **Setpoint flip-flop:** swaps emphasis between value and setpoint as the\n value reaches the setpoint.\n- **Data quality:** `low-integrity`/`invalid` styling, combinable with `alert`.\n- **Alert frame:** optional `alert` wrapper (caution/warning/alarm/level).\n- **Clickable:** optionally rendered as a focusable button with `squared`,\n `round-corners`, or `round` corners.\n- **Formatting:** shared `fractionDigits`, width reservation via `maxDigits`\n and per-segment `hintedZeros`; a `null` value renders a dash (`-`).\n- **Text values:** `valueType=\"text\"` renders `value` verbatim (e.g.\n `\"Thermo On\"`) instead of formatting it as a number.\n\n### Usage Guidelines\nUse for dense readout rows in lists/tables. Prefer `<obc-readout>` for rich\nmulti-segment instrument layouts, source pickers, or flyout behaviour.",
91072
91163
  "name": "ObcReadoutListItem",
91073
91164
  "slots": [
91074
91165
  {
@@ -91126,11 +91217,21 @@
91126
91217
  "kind": "field",
91127
91218
  "name": "value",
91128
91219
  "type": {
91129
- "text": "number | null"
91220
+ "text": "number | string | null"
91130
91221
  },
91131
91222
  "default": "null",
91223
+ "description": "The value; `null` renders a dash. A number by default, or text when\nvalueType is `text`.",
91132
91224
  "attribute": "value"
91133
91225
  },
91226
+ {
91227
+ "kind": "field",
91228
+ "name": "valueType",
91229
+ "type": {
91230
+ "text": "ReadoutValueType"
91231
+ },
91232
+ "description": "How value is interpreted. `number` (default) formats it via\n`fractionDigits`; `text` renders it verbatim and ignores the numeric\nformat options. Passing text while this is `number` throws.",
91233
+ "attribute": "valueType"
91234
+ },
91134
91235
  {
91135
91236
  "kind": "field",
91136
91237
  "name": "off",
@@ -91252,6 +91353,7 @@
91252
91353
  "text": "number"
91253
91354
  },
91254
91355
  "default": "0",
91356
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
91255
91357
  "attribute": "fractionDigits"
91256
91358
  },
91257
91359
  {
@@ -91261,6 +91363,7 @@
91261
91363
  "text": "number"
91262
91364
  },
91263
91365
  "default": "0",
91366
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
91264
91367
  "attribute": "maxDigits"
91265
91368
  },
91266
91369
  {
@@ -91603,7 +91706,7 @@
91603
91706
  {
91604
91707
  "name": "config",
91605
91708
  "type": {
91606
- "text": "{\n variant: ReadoutBlockVariant;\n value: number | null | undefined;\n valueSize: ObcTextboxSize;\n enhanced: boolean;\n weight: ObcTextboxFontWeight;\n hintedZeros: boolean;\n spaceReserver?: string;\n off?: boolean;\n hasDegree?: boolean;\n hasIcon?: boolean;\n touching?: boolean;\n hidePhase?: ReadoutBlockHidePhase;\n dataQuality?: ReadoutBlockDataQuality;\n alert?: false | AlertFrameConfig;\n }"
91709
+ "text": "{\n variant: ReadoutBlockVariant;\n value: number | string | null | undefined;\n /** Only the value block is ever text; setpoint / advice stay numeric. */\n valueType?: ReadoutValueType;\n valueSize: ObcTextboxSize;\n enhanced: boolean;\n weight: ObcTextboxFontWeight;\n hintedZeros: boolean;\n spaceReserver?: string;\n off?: boolean;\n hasDegree?: boolean;\n hasIcon?: boolean;\n touching?: boolean;\n hidePhase?: ReadoutBlockHidePhase;\n dataQuality?: ReadoutBlockDataQuality;\n alert?: false | AlertFrameConfig;\n }"
91607
91710
  }
91608
91711
  }
91609
91712
  ]
@@ -91802,11 +91905,20 @@
91802
91905
  {
91803
91906
  "name": "value",
91804
91907
  "type": {
91805
- "text": "number | null"
91908
+ "text": "number | string | null"
91806
91909
  },
91807
91910
  "default": "null",
91911
+ "description": "The value; `null` renders a dash. A number by default, or text when\nvalueType is `text`.",
91808
91912
  "fieldName": "value"
91809
91913
  },
91914
+ {
91915
+ "name": "valueType",
91916
+ "type": {
91917
+ "text": "ReadoutValueType"
91918
+ },
91919
+ "description": "How value is interpreted. `number` (default) formats it via\n`fractionDigits`; `text` renders it verbatim and ignores the numeric\nformat options. Passing text while this is `number` throws.",
91920
+ "fieldName": "valueType"
91921
+ },
91810
91922
  {
91811
91923
  "name": "off",
91812
91924
  "type": {
@@ -91914,6 +92026,7 @@
91914
92026
  "text": "number"
91915
92027
  },
91916
92028
  "default": "0",
92029
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
91917
92030
  "fieldName": "fractionDigits"
91918
92031
  },
91919
92032
  {
@@ -91922,6 +92035,7 @@
91922
92035
  "text": "number"
91923
92036
  },
91924
92037
  "default": "0",
92038
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
91925
92039
  "fieldName": "maxDigits"
91926
92040
  },
91927
92041
  {
@@ -92001,6 +92115,14 @@
92001
92115
  "module": "../../components/textbox/textbox.js"
92002
92116
  }
92003
92117
  },
92118
+ {
92119
+ "kind": "js",
92120
+ "name": "ReadoutValueType",
92121
+ "declaration": {
92122
+ "name": "ReadoutValueType",
92123
+ "module": "../readout/readout-formatters.js"
92124
+ }
92125
+ },
92004
92126
  {
92005
92127
  "kind": "js",
92006
92128
  "name": "ReadoutListItemSize",
@@ -92041,7 +92163,7 @@
92041
92163
  "declarations": [
92042
92164
  {
92043
92165
  "kind": "class",
92044
- "description": "`<obc-readout-list>` – A container that groups `<obc-readout-list-item>` rows\nand **auto-aligns their columns**.\n\nBecause each row is its own custom element, cross-row column alignment is not\nautomatic. This container inspects its rows and pushes shared width reservers\ndown so the unit column, the value / setpoint / advice columns and the source\ncolumn all line up — the same effect the `Readout List Item → ColumnAlignment`\nstory achieves by hand, done for you. Alignment is always on.\n\nWhat it equalizes — derived from each row's data and broadcast to every row, so\nthe widest value / unit / source is never clipped:\n- **Unit:** the longest `unit` becomes every row's unit space-reserver.\n- **Value / setpoint / advice:** the widest numeric width (max integer digits +\n max fraction digits across rows, derived from each row's `maxDigits` /\n `fractionDigits` / current values) is reserved on every row's numeric blocks.\n Reserving off digit counts keeps it stable as live values update.\n- **Source:** the longest `src` becomes every row's source space-reserver.\n- **Degree:** if any row has a degree, non-degree rows reserve the degree column\n (`hasDegreeSpacer`) so their digits line up with the degree rows; the spacer is\n cleared once no degree rows remain.\n\nThe list **owns** these reservers: it recomputes them from the rows' data on\nevery pass (and clears stale reservers / spacers when rows change), so a\n`spaceReserver` set directly on a row inside the list is overwritten. Drive the\ndata (`maxDigits` / `fractionDigits` / `unit` / `src`) rather than setting a\nmanual reserver when a row lives in a list.\n\nAlignment runs on `slotchange` and on child mutations (added/removed rows and\nHTML-attribute changes). When rows are updated via JS **properties** only (no\nattribute/DOM mutation), call align to recompute.",
92166
+ "description": "`<obc-readout-list>` – A container that groups `<obc-readout-list-item>` rows\nand **auto-aligns their columns**.\n\nBecause each row is its own custom element, cross-row column alignment is not\nautomatic. This container inspects its rows and pushes shared width reservers\ndown so the unit column, the value / setpoint / advice columns and the source\ncolumn all line up — the same effect the `Readout List Item → ColumnAlignment`\nstory achieves by hand, done for you. Alignment is always on.\n\nWhat it equalizes — derived from each row's data and broadcast to every row, so\nthe widest value / unit / source is never clipped:\n- **Unit:** the longest `unit` becomes every row's unit space-reserver.\n- **Value / setpoint / advice:** the widest numeric width (max integer digits +\n max fraction digits across rows, derived from each row's `maxDigits` /\n `fractionDigits` / current values) is reserved on every row's numeric blocks.\n Reserving off digit counts keeps it stable as live values update. A row with\n `valueType=\"text\"` is excluded in both directions — it neither contributes\n to the reserve (so a long text value cannot inflate the numeric column) nor\n receives it (so short text is not padded to a digit width); its value block\n sizes to its own content. Its setpoint / advice blocks stay numeric and are\n reserved normally.\n- **Source:** the longest `src` becomes every row's source space-reserver.\n- **Degree:** if any row has a degree, non-degree rows reserve the degree column\n (`hasDegreeSpacer`) so their digits line up with the degree rows; the spacer is\n cleared once no degree rows remain.\n\nThe list **owns** these reservers: it recomputes them from the rows' data on\nevery pass (and clears stale reservers / spacers when rows change), so a\n`spaceReserver` set directly on a row inside the list is overwritten. Drive the\ndata (`maxDigits` / `fractionDigits` / `unit` / `src`) rather than setting a\nmanual reserver when a row lives in a list.\n\nAlignment runs on `slotchange` and on child mutations (added/removed rows and\nHTML-attribute changes). When rows are updated via JS **properties** only (no\nattribute/DOM mutation), call align to recompute.",
92045
92167
  "name": "ObcReadoutList",
92046
92168
  "cssParts": [
92047
92169
  {
@@ -92155,7 +92277,7 @@
92155
92277
  "declarations": [
92156
92278
  {
92157
92279
  "kind": "class",
92158
- "description": "`<obc-readout>` – An instrument readout: a value with optional setpoint,\nadvice, label, unit, and source, arranged vertically or horizontally.\n\nA layout sibling of `<obc-readout-list-item>` built from the same\ncap-height \"readout building blocks\" (`obc-readout-block`): dynamic data is\npassed as top-level primitives (`value`, `setpoint`, `advice`, `label`,\n`unit`, `src`), global layout/format via top-level props (`size`,\n`priority`, `direction`, `stacking`, `alignment`, `hasDegree`,\n`dataQuality`, `alert`, …) and per-block tweaks via one object per block\n(`valueOptions`, `setpointOptions`, `adviceOptions`, `unitOptions`,\n`srcOptions`).\n\n### Features\n- **Building blocks:** value, optional setpoint, and optional advice\n segments, each cap-height-aligned and able to reserve a stable width.\n- **Sizes:** `small`, `medium`, `large` density scales.\n- **Direction:** `vertical` (blocks above a label+unit meta zone and source\n row) or `horizontal` (all segments on one row).\n- **Stacking & alignment:** vertical readouts arrange label/unit `inline`\n or `stacked`; stacked readouts align `vertical` (right), `left`, or\n `center`.\n- **Priority:** `regular`/`enhanced` colour emphasis; per-value `weight`\n is independent of colour.\n- **Setpoint interactions:** `always-visible`, `flip-flop` (emphasis swap),\n and `pop-up` (fade-out at setpoint), plus the `touching` focus state.\n- **Data quality:** `low-integrity`/`invalid` styling, per block or for the\n whole readout, combinable with `alert`.\n- **Alert frame:** optional `alert` wrapper (caution/warning/alarm/level).\n- **Source:** plain text by default; opt-in `picker` (context menu) or\n `flyout` interactivity via `srcOptions.interaction`.\n- **Formatting:** shared `fractionDigits`, width reservation via\n `maxDigits` and per-segment `hintedZeros`; a `null` value renders a dash.\n\n### Usage Guidelines\nUse for stand-alone instrument readouts and readouts embedded in\ninstruments. Prefer `<obc-readout-list-item>` for dense rows in\nlists/tables (label left, value right) and `<obc-readout-list>` for\nauto-aligned groups of rows.",
92280
+ "description": "`<obc-readout>` – An instrument readout: a value with optional setpoint,\nadvice, label, unit, and source, arranged vertically or horizontally.\n\nA layout sibling of `<obc-readout-list-item>` built from the same\ncap-height \"readout building blocks\" (`obc-readout-block`): dynamic data is\npassed as top-level primitives (`value`, `setpoint`, `advice`, `label`,\n`unit`, `src`), global layout/format via top-level props (`size`,\n`priority`, `direction`, `stacking`, `alignment`, `hasDegree`,\n`dataQuality`, `alert`, …) and per-block tweaks via one object per block\n(`valueOptions`, `setpointOptions`, `adviceOptions`, `unitOptions`,\n`srcOptions`).\n\n### Features\n- **Building blocks:** value, optional setpoint, and optional advice\n segments, each cap-height-aligned and able to reserve a stable width.\n- **Sizes:** `small`, `medium`, `large` density scales.\n- **Direction:** `vertical` (blocks above a label+unit meta zone and source\n row) or `horizontal` (all segments on one row).\n- **Stacking & alignment:** vertical readouts arrange label/unit `inline`\n or `stacked`; stacked readouts align `vertical` (right), `left`, or\n `center`.\n- **Priority:** `regular`/`enhanced` colour emphasis; per-value `weight`\n is independent of colour.\n- **Setpoint interactions:** `always-visible`, `flip-flop` (emphasis swap),\n and `pop-up` (fade-out at setpoint), plus the `touching` focus state.\n- **Data quality:** `low-integrity`/`invalid` styling, per block or for the\n whole readout, combinable with `alert`.\n- **Alert frame:** optional `alert` wrapper (caution/warning/alarm/level).\n- **Source:** plain text by default; opt-in `picker` (context menu) or\n `flyout` interactivity via `srcOptions.interaction`.\n- **Formatting:** shared `fractionDigits`, width reservation via\n `maxDigits` and per-segment `hintedZeros`; a `null` value renders a dash.\n- **Text values:** `valueType=\"text\"` renders `value` verbatim (e.g.\n `\"Auto\"`) instead of formatting it as a number.\n\n### Usage Guidelines\nUse for stand-alone instrument readouts and readouts embedded in\ninstruments. Prefer `<obc-readout-list-item>` for dense rows in\nlists/tables (label left, value right) and `<obc-readout-list>` for\nauto-aligned groups of rows.",
92159
92281
  "name": "ObcReadout",
92160
92282
  "slots": [
92161
92283
  {
@@ -92213,11 +92335,21 @@
92213
92335
  "kind": "field",
92214
92336
  "name": "value",
92215
92337
  "type": {
92216
- "text": "number | null"
92338
+ "text": "number | string | null"
92217
92339
  },
92218
92340
  "default": "null",
92341
+ "description": "The value; `null` renders a dash. A number by default, or text when\nvalueType is `text`.",
92219
92342
  "attribute": "value"
92220
92343
  },
92344
+ {
92345
+ "kind": "field",
92346
+ "name": "valueType",
92347
+ "type": {
92348
+ "text": "ReadoutValueType"
92349
+ },
92350
+ "description": "How value is interpreted. `number` (default) formats it via\n`fractionDigits`; `text` renders it verbatim and ignores the numeric\nformat options. Passing text while this is `number` throws.",
92351
+ "attribute": "valueType"
92352
+ },
92221
92353
  {
92222
92354
  "kind": "field",
92223
92355
  "name": "off",
@@ -92337,6 +92469,7 @@
92337
92469
  "text": "number"
92338
92470
  },
92339
92471
  "default": "0",
92472
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
92340
92473
  "attribute": "fractionDigits"
92341
92474
  },
92342
92475
  {
@@ -92346,6 +92479,7 @@
92346
92479
  "text": "number"
92347
92480
  },
92348
92481
  "default": "0",
92482
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
92349
92483
  "attribute": "maxDigits"
92350
92484
  },
92351
92485
  {
@@ -92766,7 +92900,7 @@
92766
92900
  {
92767
92901
  "name": "config",
92768
92902
  "type": {
92769
- "text": "{\n variant: ReadoutBlockVariant;\n value: number | null | undefined;\n valueSize: ObcTextboxSize;\n enhanced: boolean;\n weight: ObcTextboxFontWeight;\n hintedZeros: boolean;\n spaceReserver?: string;\n off?: boolean;\n hasDegree?: boolean;\n hasIcon?: boolean;\n touching?: boolean;\n hidePhase?: ReadoutBlockHidePhase;\n dataQuality?: ReadoutBlockDataQuality;\n alert?: false | AlertFrameConfig;\n /**\n * Invisible width-reserving duplicate (see\n * {@link renderSetpointWidthReserve}): skips the forwarded icon slot so\n * the visible block keeps the slotted content — the block's default\n * marker has the same fixed tier width.\n */\n ghost?: boolean;\n }"
92903
+ "text": "{\n variant: ReadoutBlockVariant;\n value: number | string | null | undefined;\n /** Only the value block is ever text; setpoint / advice stay numeric. */\n valueType?: ReadoutValueType;\n valueSize: ObcTextboxSize;\n enhanced: boolean;\n weight: ObcTextboxFontWeight;\n hintedZeros: boolean;\n spaceReserver?: string;\n off?: boolean;\n hasDegree?: boolean;\n hasIcon?: boolean;\n touching?: boolean;\n hidePhase?: ReadoutBlockHidePhase;\n dataQuality?: ReadoutBlockDataQuality;\n alert?: false | AlertFrameConfig;\n /**\n * Invisible width-reserving duplicate (see\n * {@link renderSetpointWidthReserve}): skips the forwarded icon slot so\n * the visible block keeps the slotted content — the block's default\n * marker has the same fixed tier width.\n */\n ghost?: boolean;\n }"
92770
92904
  }
92771
92905
  }
92772
92906
  ]
@@ -93127,11 +93261,20 @@
93127
93261
  {
93128
93262
  "name": "value",
93129
93263
  "type": {
93130
- "text": "number | null"
93264
+ "text": "number | string | null"
93131
93265
  },
93132
93266
  "default": "null",
93267
+ "description": "The value; `null` renders a dash. A number by default, or text when\nvalueType is `text`.",
93133
93268
  "fieldName": "value"
93134
93269
  },
93270
+ {
93271
+ "name": "valueType",
93272
+ "type": {
93273
+ "text": "ReadoutValueType"
93274
+ },
93275
+ "description": "How value is interpreted. `number` (default) formats it via\n`fractionDigits`; `text` renders it verbatim and ignores the numeric\nformat options. Passing text while this is `number` throws.",
93276
+ "fieldName": "valueType"
93277
+ },
93135
93278
  {
93136
93279
  "name": "off",
93137
93280
  "type": {
@@ -93237,6 +93380,7 @@
93237
93380
  "text": "number"
93238
93381
  },
93239
93382
  "default": "0",
93383
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
93240
93384
  "fieldName": "fractionDigits"
93241
93385
  },
93242
93386
  {
@@ -93245,6 +93389,7 @@
93245
93389
  "text": "number"
93246
93390
  },
93247
93391
  "default": "0",
93392
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
93248
93393
  "fieldName": "maxDigits"
93249
93394
  },
93250
93395
  {
@@ -93324,6 +93469,14 @@
93324
93469
  "module": "../../components/textbox/textbox.js"
93325
93470
  }
93326
93471
  },
93472
+ {
93473
+ "kind": "js",
93474
+ "name": "ReadoutValueType",
93475
+ "declaration": {
93476
+ "name": "ReadoutValueType",
93477
+ "module": "./readout-formatters.js"
93478
+ }
93479
+ },
93327
93480
  {
93328
93481
  "kind": "js",
93329
93482
  "name": "ReadoutBlockState",
@@ -98661,6 +98814,12 @@
98661
98814
  "name": "renderLoadingArc",
98662
98815
  "privacy": "private"
98663
98816
  },
98817
+ {
98818
+ "kind": "method",
98819
+ "name": "renderInnerRingLine",
98820
+ "privacy": "private",
98821
+ "description": "Thin outline on the track band's inner edge, always shown per the\ndesign's track face. Drawn on the overlay because the watch paints its\nband bars over the ring circles, which would swallow a watch-side line."
98822
+ },
98664
98823
  {
98665
98824
  "kind": "method",
98666
98825
  "name": "renderPropeller",
@@ -1,10 +1,12 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { ObcTextboxSize, ObcTextboxFontWeight, ObcTextboxAlignment } from '../../components/textbox/textbox.js';
3
+ import { ReadoutValueType } from '../../navigation-instruments/readout/readout-formatters.js';
3
4
  import { AlertFrameConfig } from '../../components/alert-frame/alert-frame.js';
4
5
  import '../../components/textbox/textbox.js';
5
6
  import '../../icons/icon-input-right.js';
6
7
  import '../../icons/icon-notification-advice.js';
7
8
  export { ObcTextboxSize, ObcTextboxFontWeight, ObcTextboxAlignment, } from '../../components/textbox/textbox.js';
9
+ export { ReadoutValueType } from '../../navigation-instruments/readout/readout-formatters.js';
8
10
  /**
9
11
  * Semantic variant of the block. Drives the default marker icon and the
10
12
  * colour token; the layout is identical across variants.
@@ -56,6 +58,9 @@ export declare enum ReadoutBlockHidePhase {
56
58
  * role default), an optional trailing degree glyph, an `off`/unavailable text
57
59
  * state, per-block data-quality and an optional per-block alert frame.
58
60
  *
61
+ * Setting `valueType` to `text` renders `value` verbatim (e.g.
62
+ * `"Auto"`) instead of a formatted number.
63
+ *
59
64
  * This is a building block used inside `obc-readout-list-item` (and, in a future
60
65
  * refactor, inside `obc-readout`); it is not normally used on its own. Colour is
61
66
  * inherited from the host context (the parent sets the role colour), so the
@@ -75,8 +80,17 @@ export declare enum ReadoutBlockHidePhase {
75
80
  export declare class ObcReadoutBlock extends LitElement {
76
81
  /** Semantic variant (value / setpoint / advice). */
77
82
  variant: ReadoutBlockVariant;
78
- /** The numeric value; `null`/`undefined` renders a dash. */
79
- value: number | null;
83
+ /**
84
+ * The value; `null`/`undefined` renders a dash. A number by default, or text
85
+ * when {@link valueType} is `text`.
86
+ */
87
+ value: number | string | null;
88
+ /**
89
+ * How {@link value} is interpreted. `number` (default) formats it via
90
+ * `fractionDigits`; `text` renders it verbatim and ignores the numeric
91
+ * format options. Passing text while this is `number` throws.
92
+ */
93
+ valueType: ReadoutValueType;
80
94
  /** Density tier — icon size, gap, degree tier. */
81
95
  size: ReadoutBlockSize;
82
96
  /**
@@ -93,11 +107,20 @@ export declare class ObcReadoutBlock extends LitElement {
93
107
  hasDegree: boolean;
94
108
  /** Show the leading marker-icon container (always on for setpoint/advice). */
95
109
  hasIcon: boolean;
96
- /** Number of fraction digits. */
110
+ /**
111
+ * Number of fraction digits.
112
+ * @availableWhen valueType==number
113
+ */
97
114
  fractionDigits: number;
98
- /** Integer digits to reserve / hint (independent of `fractionDigits`). */
115
+ /**
116
+ * Integer digits to reserve / hint (independent of `fractionDigits`).
117
+ * @availableWhen valueType==number
118
+ */
99
119
  maxDigits: number;
100
- /** Render muted leading zeros filling the integer part to `maxDigits`. */
120
+ /**
121
+ * Render muted leading zeros filling the integer part to `maxDigits`.
122
+ * @availableWhen valueType==number
123
+ */
101
124
  hintedZeros: boolean;
102
125
  /** Explicit longest string to reserve width for (e.g. `"0000.0"`). */
103
126
  spaceReserver?: string;
@@ -135,6 +158,7 @@ export declare class ObcReadoutBlock extends LitElement {
135
158
  * block's colour.
136
159
  */
137
160
  private renderDegreeGlyph;
161
+ protected willUpdate(changed: Map<string, unknown>): void;
138
162
  render(): import('lit-html').HTMLTemplateResult;
139
163
  static styles: import('lit').CSSResult;
140
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"readout-block.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/readout-block/readout-block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAgD,MAAM,KAAK,CAAC;AAK9E,OAAO,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,iCAAiC,CAAC;AACzC,OAAO,yCAAyC,CAAC;AAMjD,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAE7C;;;;;;GAMG;AACH,oBAAY,mBAAmB;IAC7B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED;;;;;GAKG;AACH,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED;;;;GAIG;AACH,oBAAY,uBAAuB;IACjC,YAAY,kBAAkB;IAC9B,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,oBAAY,qBAAqB;IAC/B,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,oDAAoD;IAC1B,OAAO,EAAE,mBAAmB,CAC1B;IAE5B,4DAA4D;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtD,kDAAkD;IACxB,IAAI,EAAE,gBAAgB,CAA0B;IAE1E;;;;OAIG;IACuB,SAAS,CAAC,EAAE,cAAc,CAAC;IAErD,uCAAuC;IACZ,QAAQ,UAAS;IAE5C,6EAA6E;IACnD,MAAM,EAAE,oBAAoB,CACvB;IAE/B,yDAAyD;IAC9B,SAAS,UAAS;IAE7C,8EAA8E;IACnD,OAAO,UAAS;IAE3C,iCAAiC;IACP,cAAc,SAAK;IAE7C,0EAA0E;IAChD,SAAS,SAAK;IAExC,0EAA0E;IAC/C,WAAW,UAAS;IAE/C,sEAAsE;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEjD,0EAA0E;IAC/C,GAAG,UAAS;IAEvC,qCAAqC;IACX,OAAO,SAAS;IAE1C,8DAA8D;IACpC,SAAS,EAAE,mBAAmB,CAC5B;IAE5B,oDAAoD;IAC1B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAKhE,kEAAkE;IACxC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAS;IAEpE,4EAA4E;IACjD,QAAQ,UAAS;IAE5C,0EAA0E;IAChD,SAAS,EAAE,qBAAqB,CAC7B;IAEpB,OAAO,CAAC,eAAe,CAAS;IAEzC,OAAO,KAAK,iBAAiB,GAY5B;IAED,OAAO,KAAK,oBAAoB,GAM/B;IAED,2EAA2E;IAC3E,OAAO,KAAK,YAAY,GASvB;IAED;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB,CAMtB;IAEF,OAAO,CAAC,UAAU;IAsBlB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAiBhB,MAAM;IAiEf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
1
+ {"version":3,"file":"readout-block.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/readout-block/readout-block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAgD,MAAM,KAAK,CAAC;AAK9E,OAAO,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,iCAAiC,CAAC;AACzC,OAAO,yCAAyC,CAAC;AACjD,OAAO,EAML,gBAAgB,EAEjB,MAAM,4DAA4D,CAAC;AACpE,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,4DAA4D,CAAC;AAE5F;;;;;;GAMG;AACH,oBAAY,mBAAmB;IAC7B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED;;;;;GAKG;AACH,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED;;;;GAIG;AACH,oBAAY,uBAAuB;IACjC,YAAY,kBAAkB;IAC9B,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,oBAAY,qBAAqB;IAC/B,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,oDAAoD;IAC1B,OAAO,EAAE,mBAAmB,CAC1B;IAE5B;;;OAGG;IACuB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;IAE/D;;;;OAIG;IACuB,SAAS,EAAE,gBAAgB,CAC3B;IAE1B,kDAAkD;IACxB,IAAI,EAAE,gBAAgB,CAA0B;IAE1E;;;;OAIG;IACuB,SAAS,CAAC,EAAE,cAAc,CAAC;IAErD,uCAAuC;IACZ,QAAQ,UAAS;IAE5C,6EAA6E;IACnD,MAAM,EAAE,oBAAoB,CACvB;IAE/B,yDAAyD;IAC9B,SAAS,UAAS;IAE7C,8EAA8E;IACnD,OAAO,UAAS;IAE3C;;;OAGG;IACuB,cAAc,SAAK;IAE7C;;;OAGG;IACuB,SAAS,SAAK;IAExC;;;OAGG;IACwB,WAAW,UAAS;IAE/C,sEAAsE;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEjD,0EAA0E;IAC/C,GAAG,UAAS;IAEvC,qCAAqC;IACX,OAAO,SAAS;IAE1C,8DAA8D;IACpC,SAAS,EAAE,mBAAmB,CAC5B;IAE5B,oDAAoD;IAC1B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAKhE,kEAAkE;IACxC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAS;IAEpE,4EAA4E;IACjD,QAAQ,UAAS;IAE5C,0EAA0E;IAChD,SAAS,EAAE,qBAAqB,CAC7B;IAEpB,OAAO,CAAC,eAAe,CAAS;IAEzC,OAAO,KAAK,iBAAiB,GAY5B;IAED,OAAO,KAAK,oBAAoB,GAM/B;IAED,2EAA2E;IAC3E,OAAO,KAAK,YAAY,GASvB;IAED;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB,CAMtB;IAEF,OAAO,CAAC,UAAU;IAsBlB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;cAiBN,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYzD,MAAM;IA+Ef,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
@@ -6,7 +6,7 @@ import { customElement } from "../../decorator.js";
6
6
  import { ObcTextboxFontWeight, ObcTextboxAlignment, ObcTextboxSize } from "../../components/textbox/textbox.js";
7
7
  import "../../icons/icon-input-right.js";
8
8
  import "../../icons/icon-notification-advice.js";
9
- import { formatNumericValue, readoutFormattedInteger } from "../../navigation-instruments/readout/readout-formatters.js";
9
+ import { ReadoutValueType, assertReadoutValueType, resolveReadoutNumericValue, resolveReadoutTextValue, formatNumericValue, readoutFormattedInteger } from "../../navigation-instruments/readout/readout-formatters.js";
10
10
  import { wrapWithAlertFrame } from "../../components/alert-frame/alert-frame.js";
11
11
  var __defProp = Object.defineProperty;
12
12
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -46,6 +46,7 @@ let ObcReadoutBlock = class extends LitElement {
46
46
  super(...arguments);
47
47
  this.variant = "value";
48
48
  this.value = null;
49
+ this.valueType = ReadoutValueType.number;
49
50
  this.size = "small";
50
51
  this.enhanced = false;
51
52
  this.weight = ObcTextboxFontWeight.regular;
@@ -152,14 +153,23 @@ let ObcReadoutBlock = class extends LitElement {
152
153
  </span>
153
154
  `;
154
155
  }
156
+ willUpdate(changed) {
157
+ super.willUpdate(changed);
158
+ assertReadoutValueType("obc-readout-block", this.value, this.valueType);
159
+ }
155
160
  render() {
156
161
  const valueSize = this.resolvedValueSize;
157
162
  const formatOptions = this.numericFormatOptions;
158
- const valueForFormat = this.value ?? void 0;
159
- const text = this.off ? this.offText : formatNumericValue(valueForFormat, formatOptions);
160
- const hintCount = this.off || !this.hintedZeros || valueForFormat === void 0 || valueForFormat < 0 ? 0 : Math.max(this.maxDigits - readoutFormattedInteger(text), 0);
163
+ const isTextMode = this.valueType === ReadoutValueType.text;
164
+ const valueForFormat = resolveReadoutNumericValue(
165
+ this.value,
166
+ this.valueType
167
+ );
168
+ const textValue = resolveReadoutTextValue(this.value, this.valueType);
169
+ const text = this.off ? this.offText : isTextMode ? textValue ?? "-" : formatNumericValue(valueForFormat, formatOptions);
170
+ const hintCount = this.off || isTextMode || !this.hintedZeros || valueForFormat === void 0 || valueForFormat < 0 ? 0 : Math.max(this.maxDigits - readoutFormattedInteger(text), 0);
161
171
  const hinted = hintCount > 0 ? "0".repeat(hintCount) : "";
162
- const reserver = this.hintedZeros ? this.reserverText : this.widerReserver(this.spaceReserver, this.reserverText);
172
+ const reserver = isTextMode ? this.spaceReserver ?? "" : this.hintedZeros ? this.reserverText : this.widerReserver(this.spaceReserver, this.reserverText);
163
173
  const block = html`
164
174
  <div
165
175
  class=${classMap({
@@ -201,8 +211,11 @@ __decorateClass([
201
211
  property({ type: String })
202
212
  ], ObcReadoutBlock.prototype, "variant", 2);
203
213
  __decorateClass([
204
- property({ type: Number })
214
+ property({ type: String })
205
215
  ], ObcReadoutBlock.prototype, "value", 2);
216
+ __decorateClass([
217
+ property({ type: String })
218
+ ], ObcReadoutBlock.prototype, "valueType", 2);
206
219
  __decorateClass([
207
220
  property({ type: String })
208
221
  ], ObcReadoutBlock.prototype, "size", 2);
@@ -268,6 +281,7 @@ export {
268
281
  ReadoutBlockDataQuality,
269
282
  ReadoutBlockHidePhase,
270
283
  ReadoutBlockSize,
271
- ReadoutBlockVariant
284
+ ReadoutBlockVariant,
285
+ ReadoutValueType
272
286
  };
273
287
  //# sourceMappingURL=readout-block.js.map