@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.121 → 2.0.0-next.123

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 (52) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +252 -53
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +66 -17
  4. package/dist/automation/automation-tank/automation-tank.css.js +94 -14
  5. package/dist/automation/automation-tank/automation-tank.css.js.map +1 -1
  6. package/dist/automation/automation-tank/automation-tank.d.ts +53 -5
  7. package/dist/automation/automation-tank/automation-tank.d.ts.map +1 -1
  8. package/dist/automation/automation-tank/automation-tank.js +39 -20
  9. package/dist/automation/automation-tank/automation-tank.js.map +1 -1
  10. package/dist/building-blocks/readout-block/readout-block.d.ts +27 -1
  11. package/dist/building-blocks/readout-block/readout-block.d.ts.map +1 -1
  12. package/dist/building-blocks/readout-block/readout-block.js +31 -10
  13. package/dist/building-blocks/readout-block/readout-block.js.map +1 -1
  14. package/dist/navigation-instruments/compass-sector/compass-sector.css.js +10 -0
  15. package/dist/navigation-instruments/compass-sector/compass-sector.css.js.map +1 -1
  16. package/dist/navigation-instruments/readout/readout-formatters.d.ts +61 -0
  17. package/dist/navigation-instruments/readout/readout-formatters.d.ts.map +1 -1
  18. package/dist/navigation-instruments/readout/readout-formatters.js +35 -2
  19. package/dist/navigation-instruments/readout/readout-formatters.js.map +1 -1
  20. package/dist/navigation-instruments/readout/readout.d.ts +19 -2
  21. package/dist/navigation-instruments/readout/readout.d.ts.map +1 -1
  22. package/dist/navigation-instruments/readout/readout.js +18 -4
  23. package/dist/navigation-instruments/readout/readout.js.map +1 -1
  24. package/dist/navigation-instruments/readout-list/readout-list.d.ts.map +1 -1
  25. package/dist/navigation-instruments/readout-list/readout-list.js +6 -3
  26. package/dist/navigation-instruments/readout-list/readout-list.js.map +1 -1
  27. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts +19 -2
  28. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts.map +1 -1
  29. package/dist/navigation-instruments/readout-list-item/readout-list-item.js +18 -4
  30. package/dist/navigation-instruments/readout-list-item/readout-list-item.js.map +1 -1
  31. package/dist/navigation-instruments/thruster/thruster.d.ts.map +1 -1
  32. package/dist/navigation-instruments/thruster/thruster.js +1 -0
  33. package/dist/navigation-instruments/thruster/thruster.js.map +1 -1
  34. package/dist/navigation-instruments/watch/watch.css.js +4 -0
  35. package/dist/navigation-instruments/watch/watch.css.js.map +1 -1
  36. package/dist/navigation-instruments/watch-flat/watch-flat.css.js +4 -0
  37. package/dist/navigation-instruments/watch-flat/watch-flat.css.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/automation/automation-tank/automation-tank.css +70 -3
  40. package/src/automation/automation-tank/automation-tank.stories.ts +140 -1
  41. package/src/automation/automation-tank/automation-tank.ts +106 -27
  42. package/src/building-blocks/readout-block/readout-block.stories.ts +20 -0
  43. package/src/building-blocks/readout-block/readout-block.ts +56 -10
  44. package/src/navigation-instruments/compass-sector/compass-sector.css +10 -0
  45. package/src/navigation-instruments/readout/readout-formatters.spec.ts +205 -0
  46. package/src/navigation-instruments/readout/readout-formatters.ts +128 -2
  47. package/src/navigation-instruments/readout/readout.ts +38 -5
  48. package/src/navigation-instruments/readout-list/readout-list.ts +10 -2
  49. package/src/navigation-instruments/readout-list-item/readout-list-item.ts +38 -5
  50. package/src/navigation-instruments/thruster/thruster.ts +1 -0
  51. package/src/navigation-instruments/watch/watch.css +4 -0
  52. package/src/navigation-instruments/watch-flat/watch-flat.css +4 -0
@@ -15669,7 +15669,7 @@
15669
15669
  "type": {
15670
15670
  "text": "TankPositioning"
15671
15671
  },
15672
- "description": "Host positioning model — see `TankPositioning` for details. Defaults to\n`button` (host fills parent container, 100% × 100%, no anchor offset).\nSet to `point` for the legacy P&ID canvas mode (fixed default dimensions\n+ top-center anchor offset).",
15672
+ "description": "Host positioning model — see `TankPositioning` for details. Defaults to\n`button` (host fills parent container, 100% × 100%, falling back to the\ndesign aspect ratio on any axis the parent leaves indefinite, no anchor\noffset). Set to `point` for the legacy P&ID canvas mode (fixed default\ndimensions + top-center anchor offset).",
15673
15673
  "attribute": "positioning",
15674
15674
  "reflects": true
15675
15675
  },
@@ -15684,6 +15684,15 @@
15684
15684
  "attribute": "static",
15685
15685
  "reflects": true
15686
15686
  },
15687
+ {
15688
+ "kind": "field",
15689
+ "name": "clickable",
15690
+ "type": {
15691
+ "text": "boolean"
15692
+ },
15693
+ "default": "true",
15694
+ "description": "Whether the tank is interactive. `true` (default) renders the root as a\n`<button>` with the full flat-mixin interaction surface. `false` renders a\nnon-interactive `<div>` — the resting appearance is unchanged (same\nenabled-state colors and the same 1px border box, via the mixin's\n`noClick` variant), but the hover / pressed / focus-visible states are\ngone and the tank leaves the tab order.\n\nEverything else keeps rendering: the chart / bar, badges, readout, tag and\nthe `alert` frame all behave exactly as they do on a clickable tank. Use\nthis for a display-only tank that still shows live data — e.g. a row total\naggregating the tanks beside it. For \"device present, current state\nunknown\" use `static` instead, which also hides the chart and shrinks to\nthe compact footprint.\n\n`static` is already non-interactive, so this has no effect there.\n\nProperty-only (`attribute: false`, per the repo's positive-default-true\nboolean convention — a `true` default cannot round-trip through an HTML\nboolean attribute). Set it as a property: `el.clickable = false`,\n`.clickable=${false}` in a Lit template, or the equivalent binding in the\nReact / Vue / Angular / Svelte wrappers. A `clickable=\"false\"` attribute in\nplain HTML is **not** observed and leaves the tank interactive."
15695
+ },
15687
15696
  {
15688
15697
  "kind": "field",
15689
15698
  "name": "activated",
@@ -15691,7 +15700,7 @@
15691
15700
  "text": "boolean"
15692
15701
  },
15693
15702
  "default": "false",
15694
- "description": "Enables the activated background color, used to indicate that the tank is activated/selected.",
15703
+ "description": "Enables the activated background color, used to indicate that the tank is\nactivated/selected. Requires an interactive tank — the `noClick` mixin\nvariant used when `clickable` is `false` only paints the enabled state, so\na non-clickable tank ignores this (matching `obc-elevated-card`).",
15695
15704
  "attribute": "activated"
15696
15705
  },
15697
15706
  {
@@ -16301,7 +16310,7 @@
16301
16310
  ],
16302
16311
  "events": [
16303
16312
  {
16304
- "description": "Fired when the tank is clicked. In `static` mode the tank renders a `<div role=\"img\">` instead of a `<button>`, so it is not focusable or keyboard-activatable; pointer clicks still reach the host.",
16313
+ "description": "Fired when the tank is clicked. When `clickable` is `false` the tank renders a plain `<div>`, and in `static` mode a `<div role=\"img\">`, instead of a `<button>` in both cases it is not focusable or keyboard-activatable; pointer clicks still reach the host.",
16305
16314
  "name": "click"
16306
16315
  }
16307
16316
  ],
@@ -16363,7 +16372,7 @@
16363
16372
  "type": {
16364
16373
  "text": "TankPositioning"
16365
16374
  },
16366
- "description": "Host positioning model — see `TankPositioning` for details. Defaults to\n`button` (host fills parent container, 100% × 100%, no anchor offset).\nSet to `point` for the legacy P&ID canvas mode (fixed default dimensions\n+ top-center anchor offset).",
16375
+ "description": "Host positioning model — see `TankPositioning` for details. Defaults to\n`button` (host fills parent container, 100% × 100%, falling back to the\ndesign aspect ratio on any axis the parent leaves indefinite, no anchor\noffset). Set to `point` for the legacy P&ID canvas mode (fixed default\ndimensions + top-center anchor offset).",
16367
16376
  "fieldName": "positioning"
16368
16377
  },
16369
16378
  {
@@ -16381,7 +16390,7 @@
16381
16390
  "text": "boolean"
16382
16391
  },
16383
16392
  "default": "false",
16384
- "description": "Enables the activated background color, used to indicate that the tank is activated/selected.",
16393
+ "description": "Enables the activated background color, used to indicate that the tank is\nactivated/selected. Requires an interactive tank — the `noClick` mixin\nvariant used when `clickable` is `false` only paints the enabled state, so\na non-clickable tank ignores this (matching `obc-elevated-card`).",
16385
16394
  "fieldName": "activated"
16386
16395
  },
16387
16396
  {
@@ -40231,7 +40240,7 @@
40231
40240
  "text": "number"
40232
40241
  },
40233
40242
  "default": "0",
40234
- "description": "Number of fraction digits.",
40243
+ "description": "Number of fraction digits. Must be between 0 and 100 — the range\n`Number.prototype.toFixed` accepts; outside it throws a `RangeError`.\nA fractional count truncates (`2.7` → `2`). A count that never arrived\n(`NaN`, `null` or unset) renders the reading as the unavailable dash —\nformatting with a precision the author never chose would let a critical\n`0.4` pass for a healthy `0`.",
40235
40244
  "attribute": "fractionDigits"
40236
40245
  },
40237
40246
  {
@@ -40241,7 +40250,7 @@
40241
40250
  "text": "number"
40242
40251
  },
40243
40252
  "default": "0",
40244
- "description": "Integer digits to reserve / hint (independent of `fractionDigits`).",
40253
+ "description": "Integer digits to reserve / hint (independent of `fractionDigits`).\nBounded before use: a fractional count\ntruncates (`2.7` → `2`), anything above 100 — including `Infinity` —\ncaps at 100, and a negative count reserves nothing. A count that never\narrived (`NaN`, `null` or unset) renders the reading as the unavailable\ndash, consistent with `fractionDigits`.",
40245
40254
  "attribute": "maxDigits"
40246
40255
  },
40247
40256
  {
@@ -40348,6 +40357,26 @@
40348
40357
  "privacy": "private",
40349
40358
  "readonly": true
40350
40359
  },
40360
+ {
40361
+ "kind": "field",
40362
+ "name": "resolvedMaxDigits",
40363
+ "type": {
40364
+ "text": "number"
40365
+ },
40366
+ "privacy": "private",
40367
+ "description": "`maxDigits` bounded to a usable count. Every width calculation below goes\nthrough this rather than the raw property, so an `Infinity` (or absurdly\nlarge) value cannot reach `String.prototype.repeat`.",
40368
+ "readonly": true
40369
+ },
40370
+ {
40371
+ "kind": "field",
40372
+ "name": "digitCountsMissing",
40373
+ "type": {
40374
+ "text": "boolean"
40375
+ },
40376
+ "privacy": "private",
40377
+ "description": "Whether a digit knob failed to arrive (`NaN` / `null` / `undefined`).\nThe reading then renders as the unavailable dash rather than silently\nformatting with a default the author never chose — a critical `0.4`\nformatted with a failed `fractionDigits` would otherwise print as a\nplausible-looking `0`. A missing `maxDigits` dashes too, for consistency:\neither knob arriving broken means the row's configuration cannot be\ntrusted.",
40378
+ "readonly": true
40379
+ },
40351
40380
  {
40352
40381
  "kind": "field",
40353
40382
  "name": "numericFormatOptions",
@@ -40520,7 +40549,7 @@
40520
40549
  "text": "number"
40521
40550
  },
40522
40551
  "default": "0",
40523
- "description": "Number of fraction digits.",
40552
+ "description": "Number of fraction digits. Must be between 0 and 100 — the range\n`Number.prototype.toFixed` accepts; outside it throws a `RangeError`.\nA fractional count truncates (`2.7` → `2`). A count that never arrived\n(`NaN`, `null` or unset) renders the reading as the unavailable dash —\nformatting with a precision the author never chose would let a critical\n`0.4` pass for a healthy `0`.",
40524
40553
  "fieldName": "fractionDigits"
40525
40554
  },
40526
40555
  {
@@ -40529,7 +40558,7 @@
40529
40558
  "text": "number"
40530
40559
  },
40531
40560
  "default": "0",
40532
- "description": "Integer digits to reserve / hint (independent of `fractionDigits`).",
40561
+ "description": "Integer digits to reserve / hint (independent of `fractionDigits`).\nBounded before use: a fractional count\ntruncates (`2.7` → `2`), anything above 100 — including `Infinity` —\ncaps at 100, and a negative count reserves nothing. A count that never\narrived (`NaN`, `null` or unset) renders the reading as the unavailable\ndash, consistent with `fractionDigits`.",
40533
40562
  "fieldName": "maxDigits"
40534
40563
  },
40535
40564
  {
@@ -91673,7 +91702,7 @@
91673
91702
  "text": "number"
91674
91703
  },
91675
91704
  "default": "0",
91676
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
91705
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Must be between 0 and 100 — the range\n`Number.prototype.toFixed` accepts; outside it throws a `RangeError`.\nA fractional count truncates (`2.7` → `2`). A count that never arrived\n(`NaN`, `null` or unset) renders the reading as the unavailable dash —\nformatting with a precision the author never chose would let a critical\n`0.4` pass for a healthy `0`.",
91677
91706
  "attribute": "fractionDigits"
91678
91707
  },
91679
91708
  {
@@ -91683,7 +91712,7 @@
91683
91712
  "text": "number"
91684
91713
  },
91685
91714
  "default": "0",
91686
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
91715
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Bounded before use: a fractional count\ntruncates (`2.7` → `2`), anything above 100 — including `Infinity` —\ncaps at 100, and a negative count reserves nothing. A count that never\narrived (`NaN`, `null` or unset) renders the reading as the unavailable\ndash, consistent with `fractionDigits`.",
91687
91716
  "attribute": "maxDigits"
91688
91717
  },
91689
91718
  {
@@ -91825,6 +91854,16 @@
91825
91854
  "privacy": "private",
91826
91855
  "readonly": true
91827
91856
  },
91857
+ {
91858
+ "kind": "field",
91859
+ "name": "digitCountsMissing",
91860
+ "type": {
91861
+ "text": "boolean"
91862
+ },
91863
+ "privacy": "private",
91864
+ "description": "Whether a digit knob failed to arrive (`NaN` / `null` / `undefined`).\nThe raw knobs are forwarded to the blocks, which render the reading as\nthe unavailable dash (see `obc-readout-block.digitCountsMissing`); this\ngetter only keeps the setpoint comparison in agreement with what is\ndisplayed.",
91865
+ "readonly": true
91866
+ },
91828
91867
  {
91829
91868
  "kind": "field",
91830
91869
  "name": "resolvedClickable",
@@ -92352,7 +92391,7 @@
92352
92391
  "text": "number"
92353
92392
  },
92354
92393
  "default": "0",
92355
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
92394
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Must be between 0 and 100 — the range\n`Number.prototype.toFixed` accepts; outside it throws a `RangeError`.\nA fractional count truncates (`2.7` → `2`). A count that never arrived\n(`NaN`, `null` or unset) renders the reading as the unavailable dash —\nformatting with a precision the author never chose would let a critical\n`0.4` pass for a healthy `0`.",
92356
92395
  "fieldName": "fractionDigits"
92357
92396
  },
92358
92397
  {
@@ -92361,7 +92400,7 @@
92361
92400
  "text": "number"
92362
92401
  },
92363
92402
  "default": "0",
92364
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
92403
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Bounded before use: a fractional count\ntruncates (`2.7` → `2`), anything above 100 — including `Infinity` —\ncaps at 100, and a negative count reserves nothing. A count that never\narrived (`NaN`, `null` or unset) renders the reading as the unavailable\ndash, consistent with `fractionDigits`.",
92365
92404
  "fieldName": "maxDigits"
92366
92405
  },
92367
92406
  {
@@ -92795,7 +92834,7 @@
92795
92834
  "text": "number"
92796
92835
  },
92797
92836
  "default": "0",
92798
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
92837
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Must be between 0 and 100 — the range\n`Number.prototype.toFixed` accepts; outside it throws a `RangeError`.\nA fractional count truncates (`2.7` → `2`). A count that never arrived\n(`NaN`, `null` or unset) renders the reading as the unavailable dash —\nformatting with a precision the author never chose would let a critical\n`0.4` pass for a healthy `0`.",
92799
92838
  "attribute": "fractionDigits"
92800
92839
  },
92801
92840
  {
@@ -92805,7 +92844,7 @@
92805
92844
  "text": "number"
92806
92845
  },
92807
92846
  "default": "0",
92808
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
92847
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Bounded before use: a fractional count\ntruncates (`2.7` → `2`), anything above 100 — including `Infinity` —\ncaps at 100, and a negative count reserves nothing. A count that never\narrived (`NaN`, `null` or unset) renders the reading as the unavailable\ndash, consistent with `fractionDigits`.",
92809
92848
  "attribute": "maxDigits"
92810
92849
  },
92811
92850
  {
@@ -93006,6 +93045,16 @@
93006
93045
  "privacy": "private",
93007
93046
  "readonly": true
93008
93047
  },
93048
+ {
93049
+ "kind": "field",
93050
+ "name": "digitCountsMissing",
93051
+ "type": {
93052
+ "text": "boolean"
93053
+ },
93054
+ "privacy": "private",
93055
+ "description": "Whether a digit knob failed to arrive (`NaN` / `null` / `undefined`).\nThe raw knobs are forwarded to the blocks, which render the reading as\nthe unavailable dash (see `obc-readout-block.digitCountsMissing`); this\ngetter only keeps the setpoint comparison in agreement with what is\ndisplayed.",
93056
+ "readonly": true
93057
+ },
93009
93058
  {
93010
93059
  "kind": "field",
93011
93060
  "name": "hasSrc",
@@ -93706,7 +93755,7 @@
93706
93755
  "text": "number"
93707
93756
  },
93708
93757
  "default": "0",
93709
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
93758
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Must be between 0 and 100 — the range\n`Number.prototype.toFixed` accepts; outside it throws a `RangeError`.\nA fractional count truncates (`2.7` → `2`). A count that never arrived\n(`NaN`, `null` or unset) renders the reading as the unavailable dash —\nformatting with a precision the author never chose would let a critical\n`0.4` pass for a healthy `0`.",
93710
93759
  "fieldName": "fractionDigits"
93711
93760
  },
93712
93761
  {
@@ -93715,7 +93764,7 @@
93715
93764
  "text": "number"
93716
93765
  },
93717
93766
  "default": "0",
93718
- "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text.",
93767
+ "description": "Also formats the numeric setpoint / advice blocks, which stay numeric\neven when the value is text. Bounded before use: a fractional count\ntruncates (`2.7` → `2`), anything above 100 — including `Infinity` —\ncaps at 100, and a negative count reserves nothing. A count that never\narrived (`NaN`, `null` or unset) renders the reading as the unavailable\ndash, consistent with `fractionDigits`.",
93719
93768
  "fieldName": "maxDigits"
93720
93769
  },
93721
93770
  {
@@ -90,6 +90,42 @@ const compentStyle = css`* {
90
90
  min-height: 0;
91
91
  }
92
92
 
93
+ /* Indefinite-axis fallback.
94
+ *
95
+ * \`width\`/\`height: 100%\` only resolve when the parent's corresponding axis is
96
+ * definite. In a flex/grid dashboard slot one axis is very often left to
97
+ * content — \`align-self: center\` makes the cross axis shrink-to-fit, and a
98
+ * parent sized with \`min-height\`/\`max-height\` (rather than \`height\`) leaves the
99
+ * block axis indefinite. In those cases the percentage computes to \`auto\` and
100
+ * the tank would size to its own content, which includes the chart cell — and
101
+ * the chart sizes itself from the cell it was measured in. That is a circular
102
+ * constraint, and it resolves as a collapsed cell, unbounded growth or
103
+ * pixel-level ringing depending on the loop gain (issue #1121).
104
+ *
105
+ * \`aspect-ratio\` supplies the missing axis from the design footprint the
106
+ * \`point\` variant uses above, so an indefinite axis lands on a definite value
107
+ * that no longer depends on the tank's own content. It is inert when the parent
108
+ * makes both axes definite, so the normal "fill my slot" behavior is unchanged.
109
+ */
110
+
111
+ :host([positioning="button"]) {
112
+ aspect-ratio: 256 / 376;
113
+ }
114
+
115
+ :host([positioning="button"][orientation="horizontal"]) {
116
+ aspect-ratio: 420 / 256;
117
+ }
118
+
119
+ :host([positioning="button"][compact]),
120
+ :host([positioning="button"][static]) {
121
+ aspect-ratio: 170 / 282;
122
+ }
123
+
124
+ :host([positioning="button"][orientation="horizontal"][compact]),
125
+ :host([positioning="button"][orientation="horizontal"][static]) {
126
+ aspect-ratio: 244 / 208;
127
+ }
128
+
93
129
  :host([positioning="button"]) .root {
94
130
  position: static;
95
131
  top: auto;
@@ -150,19 +186,26 @@ const compentStyle = css`* {
150
186
  display: flex;
151
187
  flex-direction: column;
152
188
  gap: 4px;
189
+ }
190
+
191
+ /* Interactive (\`clickable\`, the default): the full six-state flat mixin —
192
+ * enabled, activated, hover, pressed, focus-visible, disabled — painted on
193
+ * \`.halo\`. */
194
+
195
+ .root.clickable {
153
196
  cursor: pointer;
154
197
  /* prettier-ignore */
155
198
  }
156
199
 
157
- .root {
200
+ .root.clickable {
158
201
  cursor: pointer;
159
202
  }
160
203
 
161
- .root:focus {
204
+ .root.clickable:focus {
162
205
  outline: none;
163
206
  }
164
207
 
165
- .root .halo {
208
+ .root.clickable .halo {
166
209
  border-color: var(--flat-enabled-border-color);
167
210
  background-color: var(--flat-enabled-background-color);
168
211
  border-width: 1px;
@@ -172,7 +215,7 @@ const compentStyle = css`* {
172
215
  --base-background-color: var(--flat-enabled-background-color);
173
216
  }
174
217
 
175
- .root.activated .halo {
218
+ .root.clickable.activated .halo {
176
219
  border-color: var(--flat-activated-border-color);
177
220
  background-color: var(--flat-activated-background-color);
178
221
  --base-border-color: var(--flat-activated-border-color);
@@ -181,18 +224,18 @@ const compentStyle = css`* {
181
224
 
182
225
  @media (hover:hover) {
183
226
 
184
- .root:hover .halo {
227
+ .root.clickable:hover .halo {
185
228
  border-color: color-mix(in srgb, var(--flat-hover-border-color) calc(var(--obc-can-hover) * 100%), var(--base-border-color));
186
229
  background-color: color-mix(in srgb, var(--flat-hover-background-color) calc(var(--obc-can-hover) * 100%), var(--base-background-color));
187
230
  }
188
231
  }
189
232
 
190
- .root:active .halo {
233
+ .root.clickable:active .halo {
191
234
  border-color: var(--flat-pressed-border-color);
192
235
  background-color: var(--flat-pressed-background-color);
193
236
  }
194
237
 
195
- .root:focus-visible .halo {
238
+ .root.clickable:focus-visible .halo {
196
239
  outline-color: var(--border-focus-color);
197
240
  outline-width: var(--global-size-spacing-border-weight-focusframe);
198
241
  outline-style: solid;
@@ -200,28 +243,50 @@ const compentStyle = css`* {
200
243
  z-index: 1;
201
244
  }
202
245
 
203
- .root:disabled .halo {
246
+ .root.clickable:disabled .halo {
204
247
  border-color: var(--flat-disabled-border-color);
205
248
  background-color: var(--flat-disabled-background-color);
206
249
  cursor: not-allowed;
207
250
  color: var(--on-flat-disabled-color) !important;
208
251
  }
209
252
 
210
- .root.disabled .halo {
253
+ .root.clickable.disabled .halo {
211
254
  border-color: var(--flat-disabled-border-color);
212
255
  background-color: var(--flat-disabled-background-color);
213
256
  cursor: not-allowed;
214
257
  color: var(--on-flat-disabled-color) !important;
215
258
  }
216
259
 
217
- .root:disabled {
260
+ .root.clickable:disabled {
218
261
  cursor: not-allowed;
219
262
  }
220
263
 
221
- .root.disabled {
264
+ .root.clickable.disabled {
222
265
  cursor: not-allowed;
223
266
  }
224
267
 
268
+ /* Non-interactive (\`clickable\` is \`false\`, and \`static\`, which is display-only
269
+ * by definition): the mixin's \`noClick\` variant emits the enabled state ONLY, so
270
+ * the halo keeps exactly the same resting colors and the same 1px border box
271
+ * — no layout shift, nothing else in the tank changes — while hover, pressed
272
+ * and focus-visible disappear. The root is a \`<div>\` in this case, so there is
273
+ * no focus ring or tab stop to suppress either. Same split as
274
+ * \`obc-elevated-card\`'s \`.not-clickable\` / \`:not(.not-clickable)\` pair. */
275
+
276
+ .root:not(.clickable) {
277
+ cursor: default;
278
+ /* prettier-ignore */
279
+ }
280
+
281
+ .root:not(.clickable) .halo {
282
+ border-color: var(--flat-enabled-border-color);
283
+ background-color: var(--flat-enabled-background-color);
284
+ border-width: 1px;
285
+ border-style: solid;
286
+ --base-border-color: var(--flat-enabled-border-color);
287
+ --base-background-color: var(--flat-enabled-background-color);
288
+ }
289
+
225
290
  .root:focus {
226
291
  outline: none;
227
292
  }
@@ -241,11 +306,13 @@ const compentStyle = css`* {
241
306
  top: auto;
242
307
  }
243
308
 
244
- /* Static is display-only: not focusable (rendered as <div>) and not
245
- * interactive disable :hover/:active visuals from the flat-mixin rules. */
309
+ /* Static is display-only, so it never gets the \`.clickable\` class and the
310
+ * hover/pressed visuals are already gone via the \`noClick\` rule above. Static
311
+ * additionally refuses pointer events outright — unlike a non-clickable tank,
312
+ * which still lets clicks reach the host so a consumer can opt into handling
313
+ * them. */
246
314
 
247
315
  :host([static]) .root {
248
- cursor: default;
249
316
  pointer-events: none;
250
317
  }
251
318
 
@@ -693,9 +760,22 @@ const compentStyle = css`* {
693
760
  overflow: hidden;
694
761
  }
695
762
 
763
+ /* The renderers are taken out of flow so the cell sizes them, never the other
764
+ * way round. Both of them derive a pixel size from the box they are measured
765
+ * in — \`obc-gauge-trend\` publishes an inline \`--chart-height\` computed from its
766
+ * own measured width, and \`obc-bar-vertical\` writes \`height: 100%; width: auto\`
767
+ * onto its own host — so while they are in flow the cell's content height is a
768
+ * function of the cell's own height. Absolute positioning severs that return
769
+ * path: \`.bar-container\` is \`position: relative\`, so \`inset: 0\` pins the
770
+ * renderer to the cell the tank's grid/flex layout already decided on, and a
771
+ * rounding difference between the two can no longer relayout the tank
772
+ * (issue #1121). */
773
+
696
774
  .bar-container > obc-gauge-trend,
697
775
  .bar-container > obc-bar-vertical {
698
776
  display: block;
777
+ position: absolute;
778
+ inset: 0;
699
779
  width: 100%;
700
780
  height: 100%;
701
781
  }
@@ -1 +1 @@
1
- {"version":3,"file":"automation-tank.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"automation-tank.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -50,6 +50,22 @@ export declare enum TankOrientation {
50
50
  * slot — the parent controls the footprint and the tank renders
51
51
  * responsively inside it, just like a regular button. Compact / static
52
52
  * inner layout still applies; only the host box is changed.
53
+ *
54
+ * If the parent leaves *one* axis indefinite — a flex/grid slot sized with
55
+ * `min-height`/`max-height` rather than `height`, or a cross axis freed by
56
+ * `align-self: center` — the corresponding `100%` computes to `auto` and the
57
+ * tank derives that axis from the other one through the design aspect ratio
58
+ * of the matching `point` footprint (256×376 vertical, 420×256 horizontal,
59
+ * 170×282 compact/static, 244×208 horizontal compact/static). The size then
60
+ * does not depend on the chart cell, which takes its own size from the cell
61
+ * it was measured in and would otherwise make the constraint circular
62
+ * (issue #1121).
63
+ *
64
+ * If *both* axes are indefinite (a shrink-to-fit parent, e.g. an unsized
65
+ * `inline-block`) there is no axis left to derive from, so the host falls
66
+ * back to its text content. That is stable and non-circular, but much
67
+ * smaller than the design footprint — give the parent a definite size on at
68
+ * least one axis, and on both whenever the exact footprint matters.
53
69
  */
54
70
  export declare enum TankPositioning {
55
71
  point = "point",
@@ -89,7 +105,7 @@ declare const ObcAutomationTank_base: (new (...args: any[]) => import('../../svg
89
105
  * @slot alert-icon - Custom icon for the alert frame.
90
106
  * @slot alert-label - Label for the alert frame.
91
107
  * @slot alert-timer - Timer for the alert frame.
92
- * @fires click - Fired when the tank is clicked. In `static` mode the tank renders a `<div role="img">` instead of a `<button>`, so it is not focusable or keyboard-activatable; pointer clicks still reach the host.
108
+ * @fires click - Fired when the tank is clicked. When `clickable` is `false` the tank renders a plain `<div>`, and in `static` mode a `<div role="img">`, instead of a `<button>` in both cases it is not focusable or keyboard-activatable; pointer clicks still reach the host.
93
109
  * @beta
94
110
  */
95
111
  export declare class ObcAutomationTank extends ObcAutomationTank_base {
@@ -102,9 +118,10 @@ export declare class ObcAutomationTank extends ObcAutomationTank_base {
102
118
  compact: boolean;
103
119
  /**
104
120
  * Host positioning model — see `TankPositioning` for details. Defaults to
105
- * `button` (host fills parent container, 100% × 100%, no anchor offset).
106
- * Set to `point` for the legacy P&ID canvas mode (fixed default dimensions
107
- * + top-center anchor offset).
121
+ * `button` (host fills parent container, 100% × 100%, falling back to the
122
+ * design aspect ratio on any axis the parent leaves indefinite, no anchor
123
+ * offset). Set to `point` for the legacy P&ID canvas mode (fixed default
124
+ * dimensions + top-center anchor offset).
108
125
  */
109
126
  positioning: TankPositioning;
110
127
  /**
@@ -120,7 +137,38 @@ export declare class ObcAutomationTank extends ObcAutomationTank_base {
120
137
  * activatable controls.
121
138
  */
122
139
  static: boolean;
123
- /** Enables the activated background color, used to indicate that the tank is activated/selected. */
140
+ /**
141
+ * Whether the tank is interactive. `true` (default) renders the root as a
142
+ * `<button>` with the full flat-mixin interaction surface. `false` renders a
143
+ * non-interactive `<div>` — the resting appearance is unchanged (same
144
+ * enabled-state colors and the same 1px border box, via the mixin's
145
+ * `noClick` variant), but the hover / pressed / focus-visible states are
146
+ * gone and the tank leaves the tab order.
147
+ *
148
+ * Everything else keeps rendering: the chart / bar, badges, readout, tag and
149
+ * the `alert` frame all behave exactly as they do on a clickable tank. Use
150
+ * this for a display-only tank that still shows live data — e.g. a row total
151
+ * aggregating the tanks beside it. For "device present, current state
152
+ * unknown" use `static` instead, which also hides the chart and shrinks to
153
+ * the compact footprint.
154
+ *
155
+ * `static` is already non-interactive, so this has no effect there.
156
+ *
157
+ * Property-only (`attribute: false`, per the repo's positive-default-true
158
+ * boolean convention — a `true` default cannot round-trip through an HTML
159
+ * boolean attribute). Set it as a property: `el.clickable = false`,
160
+ * `.clickable=${false}` in a Lit template, or the equivalent binding in the
161
+ * React / Vue / Angular / Svelte wrappers. A `clickable="false"` attribute in
162
+ * plain HTML is **not** observed and leaves the tank interactive.
163
+ */
164
+ clickable: boolean;
165
+ /**
166
+ * Enables the activated background color, used to indicate that the tank is
167
+ * activated/selected. Requires an interactive tank — the `noClick` mixin
168
+ * variant used when `clickable` is `false` only paints the enabled state, so
169
+ * a non-clickable tank ignores this (matching `obc-elevated-card`).
170
+ * @availableWhen clickable==true
171
+ */
124
172
  activated: boolean;
125
173
  tag: string;
126
174
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"automation-tank.d.ts","sourceRoot":"","sources":["../../../src/automation/automation-tank/automation-tank.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automation-tank.d.ts","sourceRoot":"","sources":["../../../src/automation/automation-tank/automation-tank.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,7 @@ let ObcAutomationTank = class extends SetpointMixin(LitElement) {
75
75
  this.compact = false;
76
76
  this.positioning = "button";
77
77
  this.static = false;
78
+ this.clickable = true;
78
79
  this.activated = false;
79
80
  this.tag = "";
80
81
  this.chartMode = "bar";
@@ -610,26 +611,41 @@ let ObcAutomationTank = class extends SetpointMixin(LitElement) {
610
611
  const halo = html`
611
612
  <div class="halo">${haloContents}${alertFrameOverlay}</div>
612
613
  `;
613
- const rootClasses = classMap({ root: true, activated: this.activated });
614
- return html`
615
- ${this.static ? html`<div
616
- class=${rootClasses}
617
- role="img"
618
- aria-label=${this.tag || "Tank"}
619
- aria-live="polite"
620
- aria-atomic="true"
621
- >
622
- ${halo}
623
- </div>` : html`<button
624
- class=${rootClasses}
625
- type="button"
626
- aria-label=${this.tag || "Tank"}
627
- aria-live="polite"
628
- aria-atomic="true"
629
- >
630
- ${halo}
631
- </button>`}
632
- `;
614
+ const isClickable = this.clickable && !this.static;
615
+ const rootClasses = classMap({
616
+ root: true,
617
+ activated: this.activated,
618
+ clickable: isClickable
619
+ });
620
+ if (this.static) {
621
+ return html`<div
622
+ class=${rootClasses}
623
+ role="img"
624
+ aria-label=${this.tag || "Tank"}
625
+ aria-live="polite"
626
+ aria-atomic="true"
627
+ >
628
+ ${halo}
629
+ </div>`;
630
+ }
631
+ if (!isClickable) {
632
+ return html`<div
633
+ class=${rootClasses}
634
+ aria-live="polite"
635
+ aria-atomic="true"
636
+ >
637
+ ${halo}
638
+ </div>`;
639
+ }
640
+ return html`<button
641
+ class=${rootClasses}
642
+ type="button"
643
+ aria-label=${this.tag || "Tank"}
644
+ aria-live="polite"
645
+ aria-atomic="true"
646
+ >
647
+ ${halo}
648
+ </button>`;
633
649
  }
634
650
  };
635
651
  ObcAutomationTank.styles = unsafeCSS(compentStyle);
@@ -660,6 +676,9 @@ __decorateClass([
660
676
  __decorateClass([
661
677
  property({ type: Boolean, reflect: true })
662
678
  ], ObcAutomationTank.prototype, "static", 2);
679
+ __decorateClass([
680
+ property({ type: Boolean, attribute: false })
681
+ ], ObcAutomationTank.prototype, "clickable", 2);
663
682
  __decorateClass([
664
683
  property({ type: Boolean })
665
684
  ], ObcAutomationTank.prototype, "activated", 2);