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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/.storybook/vitest.setup.ts +12 -1
  2. package/bundle/openbridge-webcomponents.bundle.js +989 -319
  3. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  4. package/custom-elements.json +1514 -77
  5. package/dist/alert-severity.d.ts +12 -9
  6. package/dist/alert-severity.d.ts.map +1 -1
  7. package/dist/alert-severity.js +30 -38
  8. package/dist/alert-severity.js.map +1 -1
  9. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts +6 -0
  10. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts.map +1 -1
  11. package/dist/building-blocks/bar-horizontal/bar-horizontal.js +6 -1
  12. package/dist/building-blocks/bar-horizontal/bar-horizontal.js.map +1 -1
  13. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts +6 -0
  14. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts.map +1 -1
  15. package/dist/building-blocks/bar-vertical/bar-vertical.js +6 -1
  16. package/dist/building-blocks/bar-vertical/bar-vertical.js.map +1 -1
  17. package/dist/building-blocks/chart-line/chart-line-base.d.ts +129 -0
  18. package/dist/building-blocks/chart-line/chart-line-base.d.ts.map +1 -1
  19. package/dist/building-blocks/chart-line/chart-line-base.js +464 -79
  20. package/dist/building-blocks/chart-line/chart-line-base.js.map +1 -1
  21. package/dist/building-blocks/external-scale/external-scale.d.ts +11 -0
  22. package/dist/building-blocks/external-scale/external-scale.d.ts.map +1 -1
  23. package/dist/building-blocks/external-scale/external-scale.js +45 -12
  24. package/dist/building-blocks/external-scale/external-scale.js.map +1 -1
  25. package/dist/charthelpers/index.d.ts +1 -0
  26. package/dist/charthelpers/index.d.ts.map +1 -1
  27. package/dist/charthelpers/index.js +7 -1
  28. package/dist/charthelpers/index.js.map +1 -1
  29. package/dist/charthelpers/range-labels.d.ts +55 -0
  30. package/dist/charthelpers/range-labels.d.ts.map +1 -0
  31. package/dist/charthelpers/range-labels.js +36 -0
  32. package/dist/charthelpers/range-labels.js.map +1 -0
  33. package/dist/components/alert-button/alert-button.css.js +13 -21
  34. package/dist/components/alert-button/alert-button.css.js.map +1 -1
  35. package/dist/components/alert-button/alert-button.d.ts +9 -4
  36. package/dist/components/alert-button/alert-button.d.ts.map +1 -1
  37. package/dist/components/alert-button/alert-button.js +24 -15
  38. package/dist/components/alert-button/alert-button.js.map +1 -1
  39. package/dist/components/alert-frame/alert-frame.css.js +109 -33
  40. package/dist/components/alert-frame/alert-frame.css.js.map +1 -1
  41. package/dist/components/alert-frame/alert-frame.d.ts +34 -7
  42. package/dist/components/alert-frame/alert-frame.d.ts.map +1 -1
  43. package/dist/components/alert-frame/alert-frame.js +134 -30
  44. package/dist/components/alert-frame/alert-frame.js.map +1 -1
  45. package/dist/components/alert-icon/alert-icon.d.ts +10 -7
  46. package/dist/components/alert-icon/alert-icon.d.ts.map +1 -1
  47. package/dist/components/alert-icon/alert-icon.js +37 -60
  48. package/dist/components/alert-icon/alert-icon.js.map +1 -1
  49. package/dist/components/alert-menu-item/alert-menu-item.css.js +1 -4
  50. package/dist/components/alert-menu-item/alert-menu-item.css.js.map +1 -1
  51. package/dist/components/date-item/date-item.css.js +3 -3
  52. package/dist/components/keyboard-full/keyboard-full.css.js +4 -4
  53. package/dist/components/message-menu-item/message-menu-item.css.js +2 -6
  54. package/dist/components/message-menu-item/message-menu-item.css.js.map +1 -1
  55. package/dist/components/sequence-toolbar/sequence-toolbar.css.js +1 -2
  56. package/dist/components/sequence-toolbar/sequence-toolbar.css.js.map +1 -1
  57. package/dist/index.js +2 -1
  58. package/dist/navigation-instruments/gauge-trend/gauge-trend.d.ts +6 -0
  59. package/dist/navigation-instruments/gauge-trend/gauge-trend.d.ts.map +1 -1
  60. package/dist/navigation-instruments/gauge-trend/gauge-trend.js +8 -0
  61. package/dist/navigation-instruments/gauge-trend/gauge-trend.js.map +1 -1
  62. package/dist/navigation-instruments/instrument-field/instrument-field.css.js +2 -2
  63. package/dist/navigation-instruments/readout/readout.d.ts.map +1 -1
  64. package/dist/navigation-instruments/readout/readout.js +2 -1
  65. package/dist/navigation-instruments/readout/readout.js.map +1 -1
  66. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts.map +1 -1
  67. package/dist/navigation-instruments/readout-list-item/readout-list-item.js +2 -1
  68. package/dist/navigation-instruments/readout-list-item/readout-list-item.js.map +1 -1
  69. package/dist/openbridge.css +19 -4
  70. package/dist/palettes/blinking.d.ts +14 -4
  71. package/dist/palettes/blinking.d.ts.map +1 -1
  72. package/dist/palettes/blinking.js +41 -35
  73. package/dist/palettes/blinking.js.map +1 -1
  74. package/dist/palettes/flashing-controller.d.ts +21 -0
  75. package/dist/palettes/flashing-controller.d.ts.map +1 -0
  76. package/dist/palettes/flashing-controller.js +45 -0
  77. package/dist/palettes/flashing-controller.js.map +1 -0
  78. package/dist/svghelpers/index.d.ts +1 -0
  79. package/dist/svghelpers/index.d.ts.map +1 -1
  80. package/dist/svghelpers/index.js +2 -0
  81. package/dist/svghelpers/index.js.map +1 -1
  82. package/dist/svghelpers/rounded-rect.d.ts +15 -0
  83. package/dist/svghelpers/rounded-rect.d.ts.map +1 -0
  84. package/dist/svghelpers/rounded-rect.js +29 -0
  85. package/dist/svghelpers/rounded-rect.js.map +1 -0
  86. package/dist/types.d.ts +14 -0
  87. package/dist/types.d.ts.map +1 -1
  88. package/dist/types.js +9 -0
  89. package/dist/types.js.map +1 -1
  90. package/package.json +1 -1
  91. package/script/check-css-variables.ts +2 -15
  92. package/src/alert-severity.spec.ts +56 -0
  93. package/src/alert-severity.ts +45 -43
  94. package/src/bars-graphs/area-graph/area-graph.stories.ts +235 -1
  95. package/src/bars-graphs/line-graph/line-graph.stories.ts +24 -0
  96. package/src/building-blocks/bar-horizontal/bar-horizontal.ts +7 -0
  97. package/src/building-blocks/bar-vertical/bar-vertical.ts +7 -0
  98. package/src/building-blocks/chart-line/chart-line-base.spec.ts +767 -0
  99. package/src/building-blocks/chart-line/chart-line-base.stories.ts +124 -0
  100. package/src/building-blocks/chart-line/chart-line-base.ts +671 -97
  101. package/src/building-blocks/chart-line/chart-sizing-battleground.stories.ts +17 -0
  102. package/src/building-blocks/external-scale/external-scale.spec.ts +154 -0
  103. package/src/building-blocks/external-scale/external-scale.ts +78 -20
  104. package/src/charthelpers/index.ts +1 -0
  105. package/src/charthelpers/range-labels.spec.ts +46 -0
  106. package/src/charthelpers/range-labels.ts +93 -0
  107. package/src/components/alert-button/alert-button.css +10 -23
  108. package/src/components/alert-button/alert-button.spec.ts +56 -15
  109. package/src/components/alert-button/alert-button.stories.ts +5 -1
  110. package/src/components/alert-button/alert-button.ts +33 -24
  111. package/src/components/alert-frame/alert-flash-scenario.stories.ts +669 -0
  112. package/src/components/alert-frame/alert-frame.css +106 -33
  113. package/src/components/alert-frame/alert-frame.spec.ts +176 -17
  114. package/src/components/alert-frame/alert-frame.stories.ts +61 -0
  115. package/src/components/alert-frame/alert-frame.ts +179 -41
  116. package/src/components/alert-icon/alert-icon.spec.ts +82 -27
  117. package/src/components/alert-icon/alert-icon.stories.ts +7 -1
  118. package/src/components/alert-icon/alert-icon.ts +48 -74
  119. package/src/components/alert-menu-item/alert-menu-item.css +1 -4
  120. package/src/components/date-item/date-item.css +3 -3
  121. package/src/components/keyboard-full/keyboard-full.css +4 -4
  122. package/src/components/message-menu-item/message-menu-item.css +2 -6
  123. package/src/components/sequence-toolbar/sequence-toolbar.css +1 -2
  124. package/src/navigation-instruments/gauge-trend/gauge-trend.stories.ts +29 -0
  125. package/src/navigation-instruments/gauge-trend/gauge-trend.ts +11 -0
  126. package/src/navigation-instruments/instrument-field/instrument-field.css +2 -2
  127. package/src/navigation-instruments/readout/readout.ts +2 -1
  128. package/src/navigation-instruments/readout-list-item/readout-list-item.ts +2 -1
  129. package/src/palettes/blinking.spec.ts +83 -0
  130. package/src/palettes/blinking.ts +47 -35
  131. package/src/palettes/flashing-controller.ts +62 -0
  132. package/src/palettes/manual.css +18 -4
  133. package/src/svghelpers/index.ts +1 -0
  134. package/src/svghelpers/rounded-rect.spec.ts +47 -0
  135. package/src/svghelpers/rounded-rect.ts +42 -0
  136. package/src/types.ts +20 -0
@@ -1,4 +1,4 @@
1
- import { AlertType, ALERT_SEVERITY_PRIORITY } from './types.js';
1
+ import { AlertType, ALERT_SEVERITY_PRIORITY, FlashingSpeed, ResolvedFlashingSpeed } from './types.js';
2
2
  export { ALERT_SEVERITY_PRIORITY };
3
3
  export declare enum AlertBadgeComponent {
4
4
  Alarm = "obi-alarm-badge",
@@ -13,7 +13,17 @@ export type AlertColorTokens = {
13
13
  onActive: string;
14
14
  };
15
15
  export declare function requiresAcknowledgement(type: AlertType): boolean;
16
- export declare function supportsBlinking(type: AlertType, acknowledged: boolean): boolean;
16
+ export declare enum AlertFlashPhase {
17
+ Active = "active",
18
+ Rectified = "rectified"
19
+ }
20
+ /**
21
+ * Resolves the `default` flashing speed from the design tempo table (#1224):
22
+ * active critical/alarm/high flash fast, warning/medium slow, low very slow;
23
+ * every rectified alert flashes very slow; caution and diagnostic never
24
+ * flash. Callers map acknowledged alerts to `fixed` before asking.
25
+ */
26
+ export declare function resolveFlashingSpeed(speed: FlashingSpeed, type: AlertType, phase?: AlertFlashPhase): ResolvedFlashingSpeed;
17
27
  export declare function getAlertSeverityCssClass(type: AlertType): string;
18
28
  export declare function getAlertColorTokens(type: AlertType): AlertColorTokens;
19
29
  export declare function getAlertBadgeComponent(type: AlertType): AlertBadgeComponent;
@@ -25,13 +35,6 @@ export declare enum AlertTwotoneComponent {
25
35
  Diagnostic = "obi-alerts-diagnostic-twotone"
26
36
  }
27
37
  export declare function getAlertTwotoneComponent(type: AlertType): AlertTwotoneComponent;
28
- export declare enum AlertBlinkMode {
29
- Critical = "critical",
30
- Alarm = "alarm",
31
- Warning = "warning",
32
- Low = "low"
33
- }
34
- export declare function getAlertBlinkMode(type: AlertType): AlertBlinkMode;
35
38
  export declare function getBamAlertTypeForBlinking(type: AlertType): AlertType;
36
39
  export declare function excludedFromUnackedFilter(type: AlertType): boolean;
37
40
  export declare function usesAlarmNoAckIcon(type: AlertType): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"alert-severity.d.ts","sourceRoot":"","sources":["../src/alert-severity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EAAC,SAAS,EAAE,uBAAuB,EAAC,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAC,uBAAuB,EAAC,CAAC;AAEjC,oBAAY,mBAAmB;IAC7B,KAAK,oBAAoB;IACzB,OAAO,sBAAsB;IAC7B,OAAO,sBAAsB;IAC7B,QAAQ,uBAAuB;IAC/B,UAAU,yBAAyB;CACpC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAShE;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,OAAO,GACpB,OAAO,CAaT;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEhE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAqCrE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,CAiB3E;AAED,oBAAY,qBAAqB;IAC/B,KAAK,6BAA6B;IAClC,OAAO,+BAA+B;IACtC,OAAO,+BAA+B;IACtC,QAAQ,gCAAgC;IACxC,UAAU,kCAAkC;CAC7C;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,GACd,qBAAqB,CAiBvB;AAED,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,CAejE;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAYrE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAElE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAM3D"}
1
+ {"version":3,"file":"alert-severity.d.ts","sourceRoot":"","sources":["../src/alert-severity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,OAAO,EACL,SAAS,EACT,uBAAuB,EACvB,aAAa,EACb,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAC,uBAAuB,EAAC,CAAC;AAEjC,oBAAY,mBAAmB;IAC7B,KAAK,oBAAoB;IACzB,OAAO,sBAAsB;IAC7B,OAAO,sBAAsB;IAC7B,QAAQ,uBAAuB;IAC/B,UAAU,yBAAyB;CACpC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAShE;AAED,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,SAAS,EACf,KAAK,GAAE,eAAwC,GAC9C,qBAAqB,CAuBvB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEhE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAqCrE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,CAiB3E;AAED,oBAAY,qBAAqB;IAC/B,KAAK,6BAA6B;IAClC,OAAO,+BAA+B;IACtC,OAAO,+BAA+B;IACtC,QAAQ,gCAAgC;IACxC,UAAU,kCAAkC;CAC7C;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,GACd,qBAAqB,CAiBvB;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAYrE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAElE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAM3D"}
@@ -1,4 +1,4 @@
1
- import { AlertType } from "./types.js";
1
+ import { FlashingSpeed, AlertType } from "./types.js";
2
2
  import { ALERT_SEVERITY_PRIORITY } from "./types.js";
3
3
  var AlertBadgeComponent = /* @__PURE__ */ ((AlertBadgeComponent2) => {
4
4
  AlertBadgeComponent2["Alarm"] = "obi-alarm-badge";
@@ -18,18 +18,34 @@ function requiresAcknowledgement(type) {
18
18
  AlertType.LevelLow
19
19
  ].includes(type);
20
20
  }
21
- function supportsBlinking(type, acknowledged) {
22
- if (acknowledged) {
23
- return false;
21
+ var AlertFlashPhase = /* @__PURE__ */ ((AlertFlashPhase2) => {
22
+ AlertFlashPhase2["Active"] = "active";
23
+ AlertFlashPhase2["Rectified"] = "rectified";
24
+ return AlertFlashPhase2;
25
+ })(AlertFlashPhase || {});
26
+ function resolveFlashingSpeed(speed, type, phase = "active") {
27
+ if (speed !== FlashingSpeed.Default) {
28
+ return speed;
29
+ }
30
+ if (type === AlertType.Caution || type === AlertType.LevelDiagnostic) {
31
+ return FlashingSpeed.Fixed;
32
+ }
33
+ if (phase === "rectified") {
34
+ return FlashingSpeed.VerySlow;
35
+ }
36
+ switch (type) {
37
+ case AlertType.LevelCritical:
38
+ case AlertType.Alarm:
39
+ case AlertType.LevelHigh:
40
+ return FlashingSpeed.Fast;
41
+ case AlertType.Warning:
42
+ case AlertType.LevelMedium:
43
+ return FlashingSpeed.Slow;
44
+ case AlertType.LevelLow:
45
+ return FlashingSpeed.VerySlow;
46
+ default:
47
+ return FlashingSpeed.Fixed;
24
48
  }
25
- return [
26
- AlertType.Alarm,
27
- AlertType.Warning,
28
- AlertType.LevelCritical,
29
- AlertType.LevelHigh,
30
- AlertType.LevelMedium,
31
- AlertType.LevelLow
32
- ].includes(type);
33
49
  }
34
50
  function getAlertSeverityCssClass(type) {
35
51
  return type;
@@ -116,29 +132,6 @@ function getAlertTwotoneComponent(type) {
116
132
  return "obi-alerts-alarm-twotone";
117
133
  }
118
134
  }
119
- var AlertBlinkMode = /* @__PURE__ */ ((AlertBlinkMode2) => {
120
- AlertBlinkMode2["Critical"] = "critical";
121
- AlertBlinkMode2["Alarm"] = "alarm";
122
- AlertBlinkMode2["Warning"] = "warning";
123
- AlertBlinkMode2["Low"] = "low";
124
- return AlertBlinkMode2;
125
- })(AlertBlinkMode || {});
126
- function getAlertBlinkMode(type) {
127
- switch (type) {
128
- case AlertType.LevelCritical:
129
- return "critical";
130
- case AlertType.Warning:
131
- case AlertType.LevelMedium:
132
- return "warning";
133
- case AlertType.Caution:
134
- case AlertType.LevelLow:
135
- return "low";
136
- case AlertType.Alarm:
137
- case AlertType.LevelHigh:
138
- default:
139
- return "alarm";
140
- }
141
- }
142
135
  function getBamAlertTypeForBlinking(type) {
143
136
  switch (type) {
144
137
  case AlertType.LevelCritical:
@@ -165,17 +158,16 @@ function usesAlarmNoAckIcon(type) {
165
158
  export {
166
159
  ALERT_SEVERITY_PRIORITY,
167
160
  AlertBadgeComponent,
168
- AlertBlinkMode,
161
+ AlertFlashPhase,
169
162
  AlertTwotoneComponent,
170
163
  excludedFromUnackedFilter,
171
164
  getAlertBadgeComponent,
172
- getAlertBlinkMode,
173
165
  getAlertColorTokens,
174
166
  getAlertSeverityCssClass,
175
167
  getAlertTwotoneComponent,
176
168
  getBamAlertTypeForBlinking,
177
169
  requiresAcknowledgement,
178
- supportsBlinking,
170
+ resolveFlashingSpeed,
179
171
  usesAlarmNoAckIcon
180
172
  };
181
173
  //# sourceMappingURL=alert-severity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert-severity.js","sources":["../src/alert-severity.ts"],"sourcesContent":["/**\n * `alert-severity` – Pure helper module mapping alert severities to their\n * visual, behavioral, and acknowledgement semantics.\n *\n * Centralizes the per-`AlertType` decisions shared across alert-rendering\n * components (badges, twotone icons, frames, lists) so that severity behavior\n * stays consistent everywhere. Supports both the legacy severities\n * (`alarm`, `warning`, `caution`) and the level severities\n * (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`),\n * collapsing the level set onto the legacy visual/blink treatments where they\n * share styling.\n *\n * Features:\n * - Color tokens: `getAlertColorTokens` returns background/border/on-active\n * CSS custom properties per severity.\n * - Component selectors: `getAlertBadgeComponent` and\n * `getAlertTwotoneComponent` resolve the badge/icon element tag for a\n * severity.\n * - Blinking: `supportsBlinking` reports whether a severity blinks,\n * `getAlertBlinkMode` resolves its blink mode, and\n * `getBamAlertTypeForBlinking` maps level severities onto the legacy type used\n * by the bridge alert management (BAM) blink machinery.\n * - Acknowledgement & filtering: `requiresAcknowledgement` reports whether a\n * severity needs an ACK action, `excludedFromUnackedFilter` reports whether\n * it is hidden from the \"unacked\" view, and `usesAlarmNoAckIcon` selects the\n * alarm-style no-ack icon.\n * - Priority: re-exports `ALERT_SEVERITY_PRIORITY`, the ordered severity list\n * (most → least severe) used to sort alerts.\n *\n * Usage:\n * ```ts\n * import {\n * getAlertColorTokens,\n * requiresAcknowledgement,\n * ALERT_SEVERITY_PRIORITY,\n * } from './alert-severity.js';\n * import {AlertType} from './types.js';\n *\n * const tokens = getAlertColorTokens(AlertType.LevelHigh);\n * const needsAck = requiresAcknowledgement(AlertType.LevelLow); // true\n * alerts.sort(\n * (a, b) =>\n * ALERT_SEVERITY_PRIORITY.indexOf(a.type) -\n * ALERT_SEVERITY_PRIORITY.indexOf(b.type)\n * );\n * ```\n */\nimport {AlertType, ALERT_SEVERITY_PRIORITY} from './types.js';\n\nexport {ALERT_SEVERITY_PRIORITY};\n\nexport enum AlertBadgeComponent {\n Alarm = 'obi-alarm-badge',\n Warning = 'obi-warning-badge',\n Caution = 'obi-caution-badge',\n Critical = 'obi-critical-badge',\n Diagnostic = 'obi-diagnostic-badge',\n}\n\nexport type AlertColorTokens = {\n bg: string;\n border: string;\n onActive: string;\n};\n\nexport function requiresAcknowledgement(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.Warning,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n AlertType.LevelMedium,\n AlertType.LevelLow,\n ].includes(type);\n}\n\nexport function supportsBlinking(\n type: AlertType,\n acknowledged: boolean\n): boolean {\n if (acknowledged) {\n return false;\n }\n\n return [\n AlertType.Alarm,\n AlertType.Warning,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n AlertType.LevelMedium,\n AlertType.LevelLow,\n ].includes(type);\n}\n\nexport function getAlertSeverityCssClass(type: AlertType): string {\n return type;\n}\n\nexport function getAlertColorTokens(type: AlertType): AlertColorTokens {\n switch (type) {\n case AlertType.LevelCritical:\n return {\n bg: 'var(--critical-enabled-background-color)',\n border: 'var(--critical-enabled-border-color)',\n onActive: 'var(--on-critical-active-color)',\n };\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return {\n bg: 'var(--alert-warning-color)',\n border: 'var(--alert-warning-outline-color)',\n onActive: 'var(--on-warning-active-color)',\n };\n case AlertType.Caution:\n case AlertType.LevelLow:\n return {\n bg: 'var(--alert-caution-color)',\n border: 'var(--alert-caution-outline-color)',\n onActive: 'var(--on-caution-active-color)',\n };\n case AlertType.LevelDiagnostic:\n return {\n bg: 'var(--notification-enabled-background-color)',\n border: 'var(--notification-enabled-border-color)',\n onActive: 'var(--on-notification-active-color)',\n };\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return {\n bg: 'var(--alert-alarm-color)',\n border: 'var(--alert-alarm-outline-color)',\n onActive: 'var(--on-alarm-active-color)',\n };\n }\n}\n\nexport function getAlertBadgeComponent(type: AlertType): AlertBadgeComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertBadgeComponent.Critical;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertBadgeComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertBadgeComponent.Caution;\n case AlertType.LevelDiagnostic:\n return AlertBadgeComponent.Diagnostic;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertBadgeComponent.Alarm;\n }\n}\n\nexport enum AlertTwotoneComponent {\n Alarm = 'obi-alerts-alarm-twotone',\n Warning = 'obi-alerts-warning-twotone',\n Caution = 'obi-alerts-caution-twotone',\n Critical = 'obi-alerts-critical-twotone',\n Diagnostic = 'obi-alerts-diagnostic-twotone',\n}\n\nexport function getAlertTwotoneComponent(\n type: AlertType\n): AlertTwotoneComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertTwotoneComponent.Critical;\n case AlertType.LevelDiagnostic:\n return AlertTwotoneComponent.Diagnostic;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertTwotoneComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertTwotoneComponent.Caution;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertTwotoneComponent.Alarm;\n }\n}\n\nexport enum AlertBlinkMode {\n Critical = 'critical',\n Alarm = 'alarm',\n Warning = 'warning',\n Low = 'low',\n}\n\nexport function getAlertBlinkMode(type: AlertType): AlertBlinkMode {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertBlinkMode.Critical;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertBlinkMode.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertBlinkMode.Low;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertBlinkMode.Alarm;\n }\n}\n\nexport function getBamAlertTypeForBlinking(type: AlertType): AlertType {\n switch (type) {\n case AlertType.LevelCritical:\n case AlertType.LevelHigh:\n return AlertType.Alarm;\n case AlertType.LevelMedium:\n return AlertType.Warning;\n case AlertType.LevelLow:\n return AlertType.Caution;\n default:\n return type;\n }\n}\n\nexport function excludedFromUnackedFilter(type: AlertType): boolean {\n return [AlertType.Caution, AlertType.LevelDiagnostic].includes(type);\n}\n\nexport function usesAlarmNoAckIcon(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n ].includes(type);\n}\n"],"names":["AlertBadgeComponent","AlertTwotoneComponent","AlertBlinkMode"],"mappings":"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"}
1
+ {"version":3,"file":"alert-severity.js","sources":["../src/alert-severity.ts"],"sourcesContent":["/**\n * `alert-severity` – Pure helper module mapping alert severities to their\n * visual, behavioral, and acknowledgement semantics.\n *\n * Centralizes the per-`AlertType` decisions shared across alert-rendering\n * components (badges, twotone icons, frames, lists) so that severity behavior\n * stays consistent everywhere. Supports both the legacy severities\n * (`alarm`, `warning`, `caution`) and the level severities\n * (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`),\n * collapsing the level set onto the legacy visual/blink treatments where they\n * share styling.\n *\n * Features:\n * - Color tokens: `getAlertColorTokens` returns background/border/on-active\n * CSS custom properties per severity.\n * - Component selectors: `getAlertBadgeComponent` and\n * `getAlertTwotoneComponent` resolve the badge/icon element tag for a\n * severity.\n * - Flashing: `resolveFlashingSpeed` maps a severity and phase onto the\n * design tempo table, and `getBamAlertTypeForBlinking` maps level\n * severities onto the legacy type that selects the icon glyphs.\n * - Acknowledgement & filtering: `requiresAcknowledgement` reports whether a\n * severity needs an ACK action, `excludedFromUnackedFilter` reports whether\n * it is hidden from the \"unacked\" view, and `usesAlarmNoAckIcon` selects the\n * alarm-style no-ack icon.\n * - Priority: re-exports `ALERT_SEVERITY_PRIORITY`, the ordered severity list\n * (most → least severe) used to sort alerts.\n *\n * Usage:\n * ```ts\n * import {\n * getAlertColorTokens,\n * requiresAcknowledgement,\n * ALERT_SEVERITY_PRIORITY,\n * } from './alert-severity.js';\n * import {AlertType} from './types.js';\n *\n * const tokens = getAlertColorTokens(AlertType.LevelHigh);\n * const needsAck = requiresAcknowledgement(AlertType.LevelLow); // true\n * alerts.sort(\n * (a, b) =>\n * ALERT_SEVERITY_PRIORITY.indexOf(a.type) -\n * ALERT_SEVERITY_PRIORITY.indexOf(b.type)\n * );\n * ```\n */\nimport {\n AlertType,\n ALERT_SEVERITY_PRIORITY,\n FlashingSpeed,\n type ResolvedFlashingSpeed,\n} from './types.js';\n\nexport {ALERT_SEVERITY_PRIORITY};\n\nexport enum AlertBadgeComponent {\n Alarm = 'obi-alarm-badge',\n Warning = 'obi-warning-badge',\n Caution = 'obi-caution-badge',\n Critical = 'obi-critical-badge',\n Diagnostic = 'obi-diagnostic-badge',\n}\n\nexport type AlertColorTokens = {\n bg: string;\n border: string;\n onActive: string;\n};\n\nexport function requiresAcknowledgement(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.Warning,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n AlertType.LevelMedium,\n AlertType.LevelLow,\n ].includes(type);\n}\n\nexport enum AlertFlashPhase {\n Active = 'active',\n Rectified = 'rectified',\n}\n\n/**\n * Resolves the `default` flashing speed from the design tempo table (#1224):\n * active critical/alarm/high flash fast, warning/medium slow, low very slow;\n * every rectified alert flashes very slow; caution and diagnostic never\n * flash. Callers map acknowledged alerts to `fixed` before asking.\n */\nexport function resolveFlashingSpeed(\n speed: FlashingSpeed,\n type: AlertType,\n phase: AlertFlashPhase = AlertFlashPhase.Active\n): ResolvedFlashingSpeed {\n if (speed !== FlashingSpeed.Default) {\n return speed;\n }\n if (type === AlertType.Caution || type === AlertType.LevelDiagnostic) {\n return FlashingSpeed.Fixed;\n }\n if (phase === AlertFlashPhase.Rectified) {\n return FlashingSpeed.VerySlow;\n }\n switch (type) {\n case AlertType.LevelCritical:\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n return FlashingSpeed.Fast;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return FlashingSpeed.Slow;\n case AlertType.LevelLow:\n return FlashingSpeed.VerySlow;\n default:\n return FlashingSpeed.Fixed;\n }\n}\n\nexport function getAlertSeverityCssClass(type: AlertType): string {\n return type;\n}\n\nexport function getAlertColorTokens(type: AlertType): AlertColorTokens {\n switch (type) {\n case AlertType.LevelCritical:\n return {\n bg: 'var(--critical-enabled-background-color)',\n border: 'var(--critical-enabled-border-color)',\n onActive: 'var(--on-critical-active-color)',\n };\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return {\n bg: 'var(--alert-warning-color)',\n border: 'var(--alert-warning-outline-color)',\n onActive: 'var(--on-warning-active-color)',\n };\n case AlertType.Caution:\n case AlertType.LevelLow:\n return {\n bg: 'var(--alert-caution-color)',\n border: 'var(--alert-caution-outline-color)',\n onActive: 'var(--on-caution-active-color)',\n };\n case AlertType.LevelDiagnostic:\n return {\n bg: 'var(--notification-enabled-background-color)',\n border: 'var(--notification-enabled-border-color)',\n onActive: 'var(--on-notification-active-color)',\n };\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return {\n bg: 'var(--alert-alarm-color)',\n border: 'var(--alert-alarm-outline-color)',\n onActive: 'var(--on-alarm-active-color)',\n };\n }\n}\n\nexport function getAlertBadgeComponent(type: AlertType): AlertBadgeComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertBadgeComponent.Critical;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertBadgeComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertBadgeComponent.Caution;\n case AlertType.LevelDiagnostic:\n return AlertBadgeComponent.Diagnostic;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertBadgeComponent.Alarm;\n }\n}\n\nexport enum AlertTwotoneComponent {\n Alarm = 'obi-alerts-alarm-twotone',\n Warning = 'obi-alerts-warning-twotone',\n Caution = 'obi-alerts-caution-twotone',\n Critical = 'obi-alerts-critical-twotone',\n Diagnostic = 'obi-alerts-diagnostic-twotone',\n}\n\nexport function getAlertTwotoneComponent(\n type: AlertType\n): AlertTwotoneComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertTwotoneComponent.Critical;\n case AlertType.LevelDiagnostic:\n return AlertTwotoneComponent.Diagnostic;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertTwotoneComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertTwotoneComponent.Caution;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertTwotoneComponent.Alarm;\n }\n}\n\nexport function getBamAlertTypeForBlinking(type: AlertType): AlertType {\n switch (type) {\n case AlertType.LevelCritical:\n case AlertType.LevelHigh:\n return AlertType.Alarm;\n case AlertType.LevelMedium:\n return AlertType.Warning;\n case AlertType.LevelLow:\n return AlertType.Caution;\n default:\n return type;\n }\n}\n\nexport function excludedFromUnackedFilter(type: AlertType): boolean {\n return [AlertType.Caution, AlertType.LevelDiagnostic].includes(type);\n}\n\nexport function usesAlarmNoAckIcon(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n ].includes(type);\n}\n"],"names":["AlertBadgeComponent","AlertFlashPhase","AlertTwotoneComponent"],"mappings":"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"}
@@ -36,6 +36,10 @@ declare const ObcBarHorizontal_base: (new (...args: any[]) => import('../../svgh
36
36
  * Above this width, the scale grows proportionally; below, it shrinks.
37
37
  * @availableWhen scaleReferenceSize fixedAspectRatio==true
38
38
  * @property hasScale - Show scale tickmarks
39
+ * @property showMainTickmarkLabels - Label the main tickmarks (min / 0 / max) instead of the
40
+ * primary interval ladder, for a scale too short for a ladder. A chart sets it on its
41
+ * slotted scales below its label threshold.
42
+ * @availableWhen showMainTickmarkLabels showLabels==true
39
43
  * @property hasBar - Show bar
40
44
  * @property scaleBackground - Show background behind the scale tickmarks.
41
45
  * @property barContainerStyle - Bar container background style.
@@ -113,6 +117,8 @@ export declare class ObcBarHorizontal extends ObcBarHorizontal_base {
113
117
  /** Show scale tickmarks */
114
118
  hasScale: boolean;
115
119
  showLabels: boolean;
120
+ /** Label the main tickmarks (min / 0 / max) instead of the primary interval ladder, for a scale too short for a ladder. A chart sets it on its slotted scales below its label threshold. */
121
+ showMainTickmarkLabels: boolean;
116
122
  /** Show bar */
117
123
  hasBar: boolean;
118
124
  /** Show background behind the scale tickmarks. */
@@ -1 +1 @@
1
- {"version":3,"file":"bar-horizontal.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/bar-horizontal/bar-horizontal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAO,MAAM,KAAK,CAAC;AAErC,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,KAAK,CAAC;AAIxC,OAAO,EACL,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,QAAQ,EACT,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAKjE,OAAO,EAUL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EAEjB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAClB,CAAC;;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AACH,qBACa,gBAAiB,SAAQ,qBAEpC;IAC0B,QAAQ,SAAK;IACb,QAAQ,SAAO;IAEf,KAAK,SAAO;IAEZ,WAAW,EAAE,MAAM,CACX;IAER,YAAY,EAAE,MAAM,CACZ;IAER,IAAI,EAAE,iBAAiB,CAA4B;IAG7E,gBAAgB,UAAS;IAGzB,kBAAkB,SAAO;IAGzB,OAAO,CAAC,MAAM,CAAK;IAInB,OAAO,CAAC,iBAAiB,CAoBtB;IAG0C,QAAQ,UAAQ;IAChB,UAAU,UAAQ;IACpC,MAAM,UAAS;IAE1C,eAAe,UAAS;IAExB,iBAAiB,CAAC,EAAE,iBAAiB,CAAa;IACxB,YAAY,SAAM;IAClB,aAAa,SAAM;IACnB,cAAc,SAAM;IAGH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAM;IAC/C,uBAAuB,CAAC,EAAE,MAAM,CAAa;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAa;IAC/C,wBAAwB,CAAC,EAAE,MAAM,CAAa;IAC9C,SAAS,EAAE,SAAS,CAAqB;IACzC,UAAU,EAAE,UAAU,CAAsB;IAEtE,oBAAoB,CAAC,EAAE,oBAAoB,CAAa;IAGxD,cAAc,UAAS;IAGvB,YAAY,CAAC,EAAE,MAAM,CAAa;IAGlC,OAAO,CAAC,qBAAqB,CAAC,CAAS;IAEvC,OAAO,CAAC,qBAAqB,CAAC,CAAmB;IAGjD,OAAO,CAAC,6BAA6B,CAOlC;IAGuB,QAAQ,EAAE,QAAQ,CAAoB;IACtC,QAAQ,EAAE,QAAQ,CAAiB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAa;IAE3B,KAAK,EAAE,eAAe,CAA0B;IAGhD,cAAc,EAAE,cAAc,CACjC;IACoB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAM;IAE9C,qBAAqB,UAAS;IAEhD,MAAM;IA2FN,OAAO,CAAC,OAAO,EAAE,cAAc;IAiDxC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;cAoDL,gBAAgB;IAI1B,iBAAiB,IAAI,IAAI;IAezB,oBAAoB,IAAI,IAAI;IAMrC,OAAO,CAAC,0BAA0B;IASlC;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAMpC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAMrC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,8BAA8B;IA0BtC;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;CAelC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
1
+ {"version":3,"file":"bar-horizontal.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/bar-horizontal/bar-horizontal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAO,MAAM,KAAK,CAAC;AAErC,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,KAAK,CAAC;AAIxC,OAAO,EACL,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,QAAQ,EACT,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAKjE,OAAO,EAUL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EAEjB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAClB,CAAC;;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,qBACa,gBAAiB,SAAQ,qBAEpC;IAC0B,QAAQ,SAAK;IACb,QAAQ,SAAO;IAEf,KAAK,SAAO;IAEZ,WAAW,EAAE,MAAM,CACX;IAER,YAAY,EAAE,MAAM,CACZ;IAER,IAAI,EAAE,iBAAiB,CAA4B;IAG7E,gBAAgB,UAAS;IAGzB,kBAAkB,SAAO;IAGzB,OAAO,CAAC,MAAM,CAAK;IAInB,OAAO,CAAC,iBAAiB,CAoBtB;IAG0C,QAAQ,UAAQ;IAChB,UAAU,UAAQ;IACpC,sBAAsB,UAAS;IAC/B,MAAM,UAAS;IAE1C,eAAe,UAAS;IAExB,iBAAiB,CAAC,EAAE,iBAAiB,CAAa;IACxB,YAAY,SAAM;IAClB,aAAa,SAAM;IACnB,cAAc,SAAM;IAGH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAM;IAC/C,uBAAuB,CAAC,EAAE,MAAM,CAAa;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAa;IAC/C,wBAAwB,CAAC,EAAE,MAAM,CAAa;IAC9C,SAAS,EAAE,SAAS,CAAqB;IACzC,UAAU,EAAE,UAAU,CAAsB;IAEtE,oBAAoB,CAAC,EAAE,oBAAoB,CAAa;IAGxD,cAAc,UAAS;IAGvB,YAAY,CAAC,EAAE,MAAM,CAAa;IAGlC,OAAO,CAAC,qBAAqB,CAAC,CAAS;IAEvC,OAAO,CAAC,qBAAqB,CAAC,CAAmB;IAGjD,OAAO,CAAC,6BAA6B,CAOlC;IAGuB,QAAQ,EAAE,QAAQ,CAAoB;IACtC,QAAQ,EAAE,QAAQ,CAAiB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAa;IAE3B,KAAK,EAAE,eAAe,CAA0B;IAGhD,cAAc,EAAE,cAAc,CACjC;IACoB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAM;IAE9C,qBAAqB,UAAS;IAEhD,MAAM;IA4FN,OAAO,CAAC,OAAO,EAAE,cAAc;IAkDxC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;cAoDL,gBAAgB;IAI1B,iBAAiB,IAAI,IAAI;IAezB,oBAAoB,IAAI,IAAI;IAMrC,OAAO,CAAC,0BAA0B;IASlC;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAMpC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAMrC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,8BAA8B;IA0BtC;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;CAelC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
@@ -48,6 +48,7 @@ let ObcBarHorizontal = class extends SetpointMixin(LitElement, {
48
48
  });
49
49
  this.hasScale = true;
50
50
  this.showLabels = true;
51
+ this.showMainTickmarkLabels = false;
51
52
  this.hasBar = false;
52
53
  this.scaleBackground = false;
53
54
  this.barContainerStyle = void 0;
@@ -92,6 +93,7 @@ let ObcBarHorizontal = class extends SetpointMixin(LitElement, {
92
93
  maxValue: this.maxValue,
93
94
  hasScale: this.hasScale,
94
95
  labels: this.showLabels,
96
+ mainTickmarkLabels: this.showMainTickmarkLabels,
95
97
  hasBar: this.hasBar,
96
98
  scaleBackground: this.scaleBackground,
97
99
  barContainerStyle: this.barContainerStyle,
@@ -169,7 +171,7 @@ let ObcBarHorizontal = class extends SetpointMixin(LitElement, {
169
171
  if (changed.has("scaleReferenceSize") && this.fixedAspectRatio) {
170
172
  this._updateScaleFromCurrentSize();
171
173
  }
172
- const layoutChanged = changed.has("side") || changed.has("showLabels") || changed.has("hasScale") || changed.has("hasBar") || changed.has("barThickness") || changed.has("tickThickness") || changed.has("labelThickness") || changed.has("scaleType") || changed.has("borderRadiusPosition") || changed.has("borderRadius") || changed.has("advices") || changed.has("advicePosition") || this.setpointPresenceChanged(changed);
174
+ const layoutChanged = changed.has("side") || changed.has("showLabels") || changed.has("showMainTickmarkLabels") || changed.has("hasScale") || changed.has("hasBar") || changed.has("barThickness") || changed.has("tickThickness") || changed.has("labelThickness") || changed.has("scaleType") || changed.has("borderRadiusPosition") || changed.has("borderRadius") || changed.has("advices") || changed.has("advicePosition") || this.setpointPresenceChanged(changed);
173
175
  if (!this.fixedAspectRatio || layoutChanged) {
174
176
  this.reportDimensions();
175
177
  }
@@ -342,6 +344,9 @@ __decorateClass([
342
344
  __decorateClass([
343
345
  property({ type: Boolean, attribute: false })
344
346
  ], ObcBarHorizontal.prototype, "showLabels", 2);
347
+ __decorateClass([
348
+ property({ type: Boolean })
349
+ ], ObcBarHorizontal.prototype, "showMainTickmarkLabels", 2);
345
350
  __decorateClass([
346
351
  property({ type: Boolean })
347
352
  ], ObcBarHorizontal.prototype, "hasBar", 2);
@@ -1 +1 @@
1
- {"version":3,"file":"bar-horizontal.js","sources":["../../../src/building-blocks/bar-horizontal/bar-horizontal.ts"],"sourcesContent":["import {LitElement, html} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport type {PropertyValues} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport {ResizeController} from '@lit-labs/observers/resize-controller.js';\nimport {CHART_DIMENSIONS} from '../../charthelpers/constants.js';\nimport {\n InstrumentState,\n FrameStyle,\n BorderRadiusPosition,\n Priority,\n} from '../../navigation-instruments/types.js';\nimport type {LinearAdvice} from '../instrument-linear/advice.js';\nimport type {\n ExternalScaleAdvice,\n ExternalScaleConfig,\n} from '../external-scale/external-scale.js';\nimport {\n computeExternalScaleViewBox,\n computeFixedAspectRatioScale,\n computeExternalScaleLayout,\n renderExternalScale,\n toExternalScaleLayoutConfig,\n computeScaleDimensionsForReport,\n computeExternalScaleEffectiveBarThickness,\n readExternalScaleBorderRadiusPx,\n startExternalScaleBorderRadiusObserver,\n ScaleType,\n FillMode,\n AdvicePosition,\n BarContainerStyle,\n ExternalScaleOrientation,\n ExternalScaleSide,\n} from '../external-scale/external-scale.js';\nimport {SetpointMixin} from '../../svghelpers/setpoint-mixin.js';\n\n// Re-export shared enums for convenience\nexport {\n ScaleType,\n FillMode,\n AdvicePosition,\n FrameStyle,\n BorderRadiusPosition,\n InstrumentState,\n Priority,\n BarContainerStyle,\n ExternalScaleSide,\n};\n\n/**\n * Horizontal SVG bar + external scale.\n *\n * This is a thin web-component wrapper around the pure SVG building-block renderer in `external-scale.ts`.\n *\n * It sets up the outer `<svg>`/`viewBox` for a horizontal scale and delegates rendering/layout to:\n * - `computeExternalScaleLayout(...)`\n * - `renderExternalScale(config)`\n *\n * For renderer documentation see: **Building Blocks/External Scale**.\n *\n * For more test cases (Auto at-setpoint detection, Manual at-setpoint control, Deadband tuning and Zero snap behavior) see: **Bars and Graphs/Bar Vertical**.\n *\n * Set `priority` to `Priority.enhanced` to use the blue/enhanced color palette\n * for bar fill and setpoint instead of the default gray/regular palette\n * (default: `Priority.regular`).\n *\n * @property minValue - Minimum scale value (manual mode)\n * @property maxValue - Maximum scale value (manual mode)\n * @property width - Total width in pixels (including padding bands)\n * @availableWhen width fixedAspectRatio==false\n * @property paddingLeft - Padding left of the drawing area\n * @property paddingRight - Padding right of the drawing area\n * @property side - Which side this scale lives on\n * @property fixedAspectRatio - When true, freezes all internal calculations and scales the entire component\n * proportionally (like CSS transform:scale), except label font-size remains constant.\n * When false (default), dimensions react to component properties.\n * @property scaleReferenceSize - Reference size for proportional scaling when fixedAspectRatio is true.\n * At this width, the scale renders at native 1:1 (matches Figma design).\n * Above this width, the scale grows proportionally; below, it shrinks.\n * @availableWhen scaleReferenceSize fixedAspectRatio==true\n * @property hasScale - Show scale tickmarks\n * @property hasBar - Show bar\n * @property scaleBackground - Show background behind the scale tickmarks.\n * @property barContainerStyle - Bar container background style.\n * When undefined, defaults based on scaleBackground.\n * Set explicitly to override: 'primary' (lighter) or 'secondary' (gray).\n * @availableWhen barContainerStyle hasBar==true\n * @property barThickness - Bar/fill thickness in pixels\n * @availableWhen barThickness hasBar==true\n * @property tickThickness - Tickmark band thickness in pixels.\n * @availableWhen tickThickness hasScale==true\n * @property labelThickness - Label band thickness in pixels.\n * @availableWhen labelThickness showLabels==true\n * @property mainTickmarks - Array of values for main tickmarks. When undefined, no main tickmarks shown.\n * When empty array [], defaults to [minValue, 0, maxValue].\n * @availableWhen mainTickmarks hasScale==true\n * @property primaryTickmarkInterval - Interval for primary (longest) tickmarks with labels (minimum 1).\n * When undefined, no primary tickmarks are shown.\n * @availableWhen primaryTickmarkInterval hasScale==true || showLabels==true\n * @property secondaryTickmarkInterval - Interval for secondary (medium) tickmarks (minimum 1).\n * When undefined, no secondary tickmarks are shown.\n * @availableWhen secondaryTickmarkInterval hasScale==true\n * @property tertiaryTickmarkInterval - Interval for tertiary (shortest) tickmarks (minimum 1).\n * When undefined, no tertiary tickmarks are shown.\n * @availableWhen tertiaryTickmarkInterval hasScale==true\n * @property scaleType - Scale display mode: regular or condensed (shorter ticks)\n * @property frameStyle - Frame style: regular (4px gap for all), flat (main tickmarks touch edge), framed, or instrument\n * @availableWhen frameStyle hasScale==true && mainTickmarks!=undefined\n * @property borderRadiusPosition - Border radius position based on component layout\n * @availableWhen borderRadiusPosition hasBar==true\n * @property instrumentMode - When true, the component is used inside an instrument (e.g., gauge-trend).\n * In this mode, only label font size responds to .obc-component-size-* CSS classes.\n * Border radius and bar thickness use explicit values or defaults, not CSS variables.\n * @property borderRadius - Explicit border radius value in pixels.\n * When instrumentMode=true, this value is used directly (defaults to 8px for regular, 4px for condensed).\n * When instrumentMode=false, this is ignored and border radius is read from CSS variable.\n * @availableWhen borderRadius instrumentMode==true\n * @property priority - Color priority: enhanced uses blue instrument colors for bar fill and setpoint\n * @property fillMode - Fill visualization mode: fill or tint\n * @availableWhen fillMode hasBar==true && value!=undefined\n * @property fillMin - Minimum fill value for tint mode (defaults to 0)\n * @availableWhen fillMin hasBar==true && value!=undefined\n * @property fillMax - Maximum fill value for tint mode (defaults to value)\n * @availableWhen fillMax hasBar==true && value!=undefined\n * @property value - Current value (bar fill level)\n * @property state - Instrument state (affects colors and some marker behavior)\n * @property advicePosition - Advice overlay positioning: center (in bar), inner (covers minor ticks), outer (no overlap)\n * @availableWhen advicePosition hasBar==true && advices!=undefined\n * @property advices - Advice/alert overlays with state and positioning.\n * When undefined or empty, no advice shown.\n * @property highlightCurrentValue - When true, displays a dot indicator at the current value position.\n * The dot is rendered in the scale band, touching its inner edge (towards the chart).\n * This provides an alternative to bar fill for highlighting the current value.\n * @fires {CustomEvent} scale-dimensions-changed - Fired when the scale's computed layout thickness changes; a parent chart listens for this to reserve space for the scale. Bubbles and is composed.\n * @beta\n */\n@customElement('obc-bar-horizontal')\nexport class ObcBarHorizontal extends SetpointMixin(LitElement, {\n defaultDeadband: 1,\n}) {\n @property({type: Number}) minValue = 0;\n @property({type: Number}) maxValue = 100;\n\n @property({type: Number}) width = 320;\n\n @property({type: Number}) paddingLeft: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: Number}) paddingRight: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: String}) side: ExternalScaleSide = ExternalScaleSide.bottom;\n\n @property({type: Boolean})\n fixedAspectRatio = false;\n\n @property({type: Number})\n scaleReferenceSize = 384;\n\n @state()\n private _scale = 1;\n\n // ResizeController automatically subscribes/unsubscribes based on component lifecycle\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _resizeController = new ResizeController(this, {\n callback: (entries) => {\n if (!this.fixedAspectRatio) return;\n\n const entry = entries[0];\n if (!entry) return;\n\n // Use the centralized function that computes scale based on reference size\n // For horizontal scales, compare container width to reference size\n const containerMainAxisSize = entry.contentRect.width;\n\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.horizontal,\n containerMainAxisSize,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n\n // Report scaled dimensions to parent chart\n this.reportDimensions();\n },\n });\n\n // Bands (thickness)\n @property({type: Boolean, attribute: false}) hasScale = true;\n @property({type: Boolean, attribute: false}) showLabels = true;\n @property({type: Boolean}) hasBar = false;\n @property({type: Boolean})\n scaleBackground = false;\n @property({type: String})\n barContainerStyle?: BarContainerStyle = undefined;\n @property({type: Number}) barThickness = 24;\n @property({type: Number}) tickThickness = 24;\n @property({type: Number}) labelThickness = 60;\n\n // Tick configuration\n @property({type: Array, attribute: false}) mainTickmarks?: number[] = [];\n @property({type: Number}) primaryTickmarkInterval?: number = undefined;\n @property({type: Number}) secondaryTickmarkInterval?: number = undefined;\n @property({type: Number}) tertiaryTickmarkInterval?: number = undefined;\n @property({type: String}) scaleType: ScaleType = ScaleType.regular;\n @property({type: String}) frameStyle: FrameStyle = FrameStyle.regular;\n @property({type: String})\n borderRadiusPosition?: BorderRadiusPosition = undefined;\n\n @property({type: Boolean})\n instrumentMode = false;\n\n @property({type: Number})\n borderRadius?: number = undefined;\n\n @state()\n private _computedBorderRadius?: number;\n\n private _borderRadiusObserver?: MutationObserver;\n\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _borderRadiusResizeController = new ResizeController(this, {\n callback: () => {\n // Skip CSS variable reading in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n }\n },\n });\n\n // Values\n @property({type: String}) priority: Priority = Priority.regular;\n @property({type: String}) fillMode: FillMode = FillMode.fill;\n @property({type: Number}) fillMin?: number = undefined;\n @property({type: Number}) fillMax?: number = undefined;\n @property({type: Number}) value?: number = undefined;\n\n @property({type: String}) state: InstrumentState = InstrumentState.active;\n\n // Advice\n @property({type: String}) advicePosition: AdvicePosition =\n AdvicePosition.inner;\n @property({type: Array, attribute: false}) advices?: LinearAdvice[] = [];\n\n @property({type: Boolean}) highlightCurrentValue = false;\n\n override render() {\n // When fixedAspectRatio is true, use scaleReferenceSize for the viewBox length.\n // This makes the SVG render at the \"design reference size\" and then scale\n // proportionally to fit the actual container via preserveAspectRatio=\"xMidYMid meet\".\n // The _scale CSS variable counter-scales text labels to maintain constant visual size.\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.width;\n\n // The parent chart component (chart-line-base) calculates and passes the correct\n // viewBox padding values when fixedAspectRatioScaling is enabled. The padding is\n // pre-scaled to: basePadding * scaleReferenceSize / referenceWidth\n // This ensures the visual padding matches the chart's Canvas padding at any aspect ratio.\n\n const config: ExternalScaleConfig = {\n orientation: ExternalScaleOrientation.horizontal,\n side: this.side,\n length: effectiveLength,\n paddingStart: this.paddingLeft,\n paddingEnd: this.paddingRight,\n minValue: this.minValue,\n maxValue: this.maxValue,\n hasScale: this.hasScale,\n labels: this.showLabels,\n hasBar: this.hasBar,\n scaleBackground: this.scaleBackground,\n barContainerStyle: this.barContainerStyle,\n barThickness: this.barThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n mainTickmarks: this.mainTickmarks,\n primaryTickmarkInterval: this.primaryTickmarkInterval,\n secondaryTickmarkInterval: this.secondaryTickmarkInterval,\n tertiaryTickmarkInterval: this.tertiaryTickmarkInterval,\n scaleType: this.scaleType,\n frameStyle: this.frameStyle,\n borderRadiusPosition: this.borderRadiusPosition,\n priority: this.priority,\n setpointOverride: this.setpointOverride,\n fillMode: this.fillMode,\n fillMin: this.fillMin,\n fillMax: this.fillMax,\n value: this.value,\n setpoint: this.setpoint,\n newSetpoint: this.newSetpoint,\n atSetpoint: this.atSetpoint,\n autoAtSetpoint: this.autoAtSetpoint,\n autoAtSetpointDeadband: this.autoAtSetpointDeadband,\n setpointAtZeroDeadband: this.setpointAtZeroDeadband,\n animateSetpoint: this.animateSetpoint,\n departingNewSetpoint: this.departingNewSetpoint,\n state: this.state,\n touching: this.touching,\n advicePosition: this.advicePosition,\n advices: this.advices as ExternalScaleAdvice[],\n fixedAspectRatio: this.fixedAspectRatio,\n instrumentMode: this.instrumentMode,\n highlightCurrentValue: this.highlightCurrentValue,\n };\n\n const layout = computeExternalScaleLayout(\n toExternalScaleLayoutConfig(config)\n );\n\n const parts = renderExternalScale(config);\n\n const viewBox = computeExternalScaleViewBox(\n {orientation: config.orientation, length: effectiveLength},\n layout\n );\n const preserveAspectRatio = this.fixedAspectRatio\n ? 'xMidYMid meet'\n : 'none';\n\n return html`\n <svg\n width=${this.fixedAspectRatio ? '100%' : `${this.width}px`}\n height=${this.fixedAspectRatio ? '100%' : `${viewBox.height}px`}\n viewBox=\"${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}\"\n preserveAspectRatio=\"${preserveAspectRatio}\"\n style=\"--scale: ${this.fixedAspectRatio ? this._scale : 1};\"\n part=\"svg\"\n >\n ${parts.barContainer} ${parts.barFill} ${parts.scaleBackground}\n ${parts.tickmarks} ${parts.labels} ${parts.adviceOverlays}\n ${parts.currentValueDot} ${parts.setpoint}\n </svg>\n `;\n }\n\n override updated(changed: PropertyValues) {\n super.updated(changed);\n\n if (changed.has('scaleType')) {\n this._refreshBorderRadiusFromCssVar();\n }\n\n // Update host styles when fixedAspectRatio changes\n if (changed.has('fixedAspectRatio')) {\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n // Force initial scale calculation based on current size\n this._updateScaleFromCurrentSize();\n } else {\n this._removeFixedAspectRatioStyles();\n this._scale = 1;\n }\n }\n\n // Also recalculate scale when scaleReferenceSize changes\n if (changed.has('scaleReferenceSize') && this.fixedAspectRatio) {\n this._updateScaleFromCurrentSize();\n }\n\n // Report dimensions to parent chart when layout-affecting properties change.\n // In fixedAspectRatio mode, resize events also trigger reportDimensions() via ResizeController.\n // In regular mode, we report on every update to keep parent chart in sync.\n // Layout-affecting properties change the computed thickness and must notify the parent\n // even in fixedAspectRatio mode to keep chart padding accurate.\n const layoutChanged =\n changed.has('side') ||\n changed.has('showLabels') ||\n changed.has('hasScale') ||\n changed.has('hasBar') ||\n changed.has('barThickness') ||\n changed.has('tickThickness') ||\n changed.has('labelThickness') ||\n changed.has('scaleType') ||\n changed.has('borderRadiusPosition') ||\n changed.has('borderRadius') ||\n changed.has('advices') ||\n changed.has('advicePosition') ||\n this.setpointPresenceChanged(changed);\n\n if (!this.fixedAspectRatio || layoutChanged) {\n this.reportDimensions();\n }\n }\n\n /**\n * Report scale dimensions to parent chart component.\n * When fixedAspectRatio=true, reports the actual visual (scaled) thickness\n * so the chart can correctly reserve space for the scale.\n * When fixedAspectRatio=false, reports the base/unscaled thickness.\n */\n private reportDimensions() {\n const effectiveBarThickness = computeExternalScaleEffectiveBarThickness({\n hasBar: this.hasBar,\n barThickness: this.barThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n scaleType: this.scaleType,\n });\n\n // Use scaleReferenceSize for layout calculation when in fixedAspectRatio mode\n // This ensures consistent layout dimensions based on the design reference size\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.width;\n\n const baseDimensions = computeScaleDimensionsForReport({\n orientation: ExternalScaleOrientation.horizontal,\n side: this.side,\n hasBar: this.hasBar,\n hasScale: this.hasScale,\n labels: this.showLabels,\n barThickness: effectiveBarThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n length: effectiveLength,\n scaleType: this.scaleType,\n advicePosition: this.advicePosition,\n hasAdvice: !!this.advices && this.advices.length > 0,\n hasSetpoint:\n this.setpoint !== undefined ||\n this.newSetpoint !== undefined ||\n this.departingNewSetpoint !== undefined,\n });\n\n // When fixedAspectRatio=true, the SVG scales proportionally via preserveAspectRatio=\"meet\".\n // The visual thickness = baseThickness × scale, where scale = containerSize / scaleReferenceSize.\n // Report the actual visual thickness so the chart can reserve the correct space.\n const dimensions = this.fixedAspectRatio\n ? {\n ...baseDimensions,\n thickness: Math.round(baseDimensions.thickness * this._scale),\n }\n : baseDimensions;\n\n this.dispatchEvent(\n new CustomEvent('scale-dimensions-changed', {\n detail: dimensions,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected override createRenderRoot() {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Only read from CSS variable and observe changes when not in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n this._startBorderRadiusObserver();\n }\n\n // Ensure the element fills its container when in fixedAspectRatio mode\n // Custom elements are display:inline by default, which doesn't work for percentage-based sizing\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n }\n }\n\n override disconnectedCallback(): void {\n this._borderRadiusObserver?.disconnect();\n this._borderRadiusObserver = undefined;\n super.disconnectedCallback();\n }\n\n private _startBorderRadiusObserver(): void {\n this._borderRadiusObserver?.disconnect();\n\n this._borderRadiusObserver = startExternalScaleBorderRadiusObserver(\n this,\n () => this._refreshBorderRadiusFromCssVar()\n );\n }\n\n /**\n * Apply CSS styles needed for fixedAspectRatio mode.\n * Custom elements are display:inline by default, which doesn't work with percentage-based sizing.\n * We need display:block and width:100% to fill the slot container.\n */\n private _applyFixedAspectRatioStyles(): void {\n this.style.display = 'block';\n this.style.width = '100%';\n this.style.height = 'auto';\n }\n\n /**\n * Remove fixed aspect ratio styles when switching back to pixel mode.\n */\n private _removeFixedAspectRatioStyles(): void {\n this.style.display = '';\n this.style.width = '';\n this.style.height = '';\n }\n\n /**\n * Calculate scale based on current element size.\n * Called when fixedAspectRatio is enabled or scaleReferenceSize changes.\n */\n private _updateScaleFromCurrentSize(): void {\n // Use requestAnimationFrame to ensure layout is complete\n requestAnimationFrame(() => {\n const containerWidth = this.clientWidth;\n if (containerWidth > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.horizontal,\n containerMainAxisSize: containerWidth,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n this.requestUpdate();\n // Report updated dimensions to parent (matches pattern in ResizeController and _refreshBorderRadiusFromCssVar)\n this.reportDimensions();\n }\n });\n }\n\n private _refreshBorderRadiusFromCssVar(): void {\n // Skip CSS variable reading in instrument mode\n if (this.instrumentMode) return;\n\n const next = readExternalScaleBorderRadiusPx(this, this.scaleType);\n\n if (this._computedBorderRadius !== next) {\n this._computedBorderRadius = next;\n }\n\n // In fixed-aspect-ratio mode, recompute scale when border radius changes\n // (border radius affects effective bar thickness and therefore viewBox)\n if (this.fixedAspectRatio) {\n const rect = this.getBoundingClientRect();\n if (rect.width > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.horizontal,\n containerMainAxisSize: rect.width,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n // Report updated dimensions\n this.reportDimensions();\n }\n }\n }\n\n /**\n * Get the effective border radius to use.\n * In instrument mode: use explicit borderRadius prop or default based on scaleType.\n * In normal mode: use CSS variable computed value.\n */\n private _getEffectiveBorderRadius(): number {\n if (this.instrumentMode) {\n // In instrument mode, use explicit value or default\n if (this.borderRadius !== undefined) {\n return this.borderRadius;\n }\n // Default: 8px for regular, 4px for condensed\n return this.scaleType === ScaleType.condensed ? 4 : 8;\n }\n // Normal mode: use CSS variable computed value\n return (\n this._computedBorderRadius ??\n (this.scaleType === ScaleType.condensed ? 4 : 8)\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-bar-horizontal': ObcBarHorizontal;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bar-horizontal.js","sources":["../../../src/building-blocks/bar-horizontal/bar-horizontal.ts"],"sourcesContent":["import {LitElement, html} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport type {PropertyValues} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport {ResizeController} from '@lit-labs/observers/resize-controller.js';\nimport {CHART_DIMENSIONS} from '../../charthelpers/constants.js';\nimport {\n InstrumentState,\n FrameStyle,\n BorderRadiusPosition,\n Priority,\n} from '../../navigation-instruments/types.js';\nimport type {LinearAdvice} from '../instrument-linear/advice.js';\nimport type {\n ExternalScaleAdvice,\n ExternalScaleConfig,\n} from '../external-scale/external-scale.js';\nimport {\n computeExternalScaleViewBox,\n computeFixedAspectRatioScale,\n computeExternalScaleLayout,\n renderExternalScale,\n toExternalScaleLayoutConfig,\n computeScaleDimensionsForReport,\n computeExternalScaleEffectiveBarThickness,\n readExternalScaleBorderRadiusPx,\n startExternalScaleBorderRadiusObserver,\n ScaleType,\n FillMode,\n AdvicePosition,\n BarContainerStyle,\n ExternalScaleOrientation,\n ExternalScaleSide,\n} from '../external-scale/external-scale.js';\nimport {SetpointMixin} from '../../svghelpers/setpoint-mixin.js';\n\n// Re-export shared enums for convenience\nexport {\n ScaleType,\n FillMode,\n AdvicePosition,\n FrameStyle,\n BorderRadiusPosition,\n InstrumentState,\n Priority,\n BarContainerStyle,\n ExternalScaleSide,\n};\n\n/**\n * Horizontal SVG bar + external scale.\n *\n * This is a thin web-component wrapper around the pure SVG building-block renderer in `external-scale.ts`.\n *\n * It sets up the outer `<svg>`/`viewBox` for a horizontal scale and delegates rendering/layout to:\n * - `computeExternalScaleLayout(...)`\n * - `renderExternalScale(config)`\n *\n * For renderer documentation see: **Building Blocks/External Scale**.\n *\n * For more test cases (Auto at-setpoint detection, Manual at-setpoint control, Deadband tuning and Zero snap behavior) see: **Bars and Graphs/Bar Vertical**.\n *\n * Set `priority` to `Priority.enhanced` to use the blue/enhanced color palette\n * for bar fill and setpoint instead of the default gray/regular palette\n * (default: `Priority.regular`).\n *\n * @property minValue - Minimum scale value (manual mode)\n * @property maxValue - Maximum scale value (manual mode)\n * @property width - Total width in pixels (including padding bands)\n * @availableWhen width fixedAspectRatio==false\n * @property paddingLeft - Padding left of the drawing area\n * @property paddingRight - Padding right of the drawing area\n * @property side - Which side this scale lives on\n * @property fixedAspectRatio - When true, freezes all internal calculations and scales the entire component\n * proportionally (like CSS transform:scale), except label font-size remains constant.\n * When false (default), dimensions react to component properties.\n * @property scaleReferenceSize - Reference size for proportional scaling when fixedAspectRatio is true.\n * At this width, the scale renders at native 1:1 (matches Figma design).\n * Above this width, the scale grows proportionally; below, it shrinks.\n * @availableWhen scaleReferenceSize fixedAspectRatio==true\n * @property hasScale - Show scale tickmarks\n * @property showMainTickmarkLabels - Label the main tickmarks (min / 0 / max) instead of the\n * primary interval ladder, for a scale too short for a ladder. A chart sets it on its\n * slotted scales below its label threshold.\n * @availableWhen showMainTickmarkLabels showLabels==true\n * @property hasBar - Show bar\n * @property scaleBackground - Show background behind the scale tickmarks.\n * @property barContainerStyle - Bar container background style.\n * When undefined, defaults based on scaleBackground.\n * Set explicitly to override: 'primary' (lighter) or 'secondary' (gray).\n * @availableWhen barContainerStyle hasBar==true\n * @property barThickness - Bar/fill thickness in pixels\n * @availableWhen barThickness hasBar==true\n * @property tickThickness - Tickmark band thickness in pixels.\n * @availableWhen tickThickness hasScale==true\n * @property labelThickness - Label band thickness in pixels.\n * @availableWhen labelThickness showLabels==true\n * @property mainTickmarks - Array of values for main tickmarks. When undefined, no main tickmarks shown.\n * When empty array [], defaults to [minValue, 0, maxValue].\n * @availableWhen mainTickmarks hasScale==true\n * @property primaryTickmarkInterval - Interval for primary (longest) tickmarks with labels (minimum 1).\n * When undefined, no primary tickmarks are shown.\n * @availableWhen primaryTickmarkInterval hasScale==true || showLabels==true\n * @property secondaryTickmarkInterval - Interval for secondary (medium) tickmarks (minimum 1).\n * When undefined, no secondary tickmarks are shown.\n * @availableWhen secondaryTickmarkInterval hasScale==true\n * @property tertiaryTickmarkInterval - Interval for tertiary (shortest) tickmarks (minimum 1).\n * When undefined, no tertiary tickmarks are shown.\n * @availableWhen tertiaryTickmarkInterval hasScale==true\n * @property scaleType - Scale display mode: regular or condensed (shorter ticks)\n * @property frameStyle - Frame style: regular (4px gap for all), flat (main tickmarks touch edge), framed, or instrument\n * @availableWhen frameStyle hasScale==true && mainTickmarks!=undefined\n * @property borderRadiusPosition - Border radius position based on component layout\n * @availableWhen borderRadiusPosition hasBar==true\n * @property instrumentMode - When true, the component is used inside an instrument (e.g., gauge-trend).\n * In this mode, only label font size responds to .obc-component-size-* CSS classes.\n * Border radius and bar thickness use explicit values or defaults, not CSS variables.\n * @property borderRadius - Explicit border radius value in pixels.\n * When instrumentMode=true, this value is used directly (defaults to 8px for regular, 4px for condensed).\n * When instrumentMode=false, this is ignored and border radius is read from CSS variable.\n * @availableWhen borderRadius instrumentMode==true\n * @property priority - Color priority: enhanced uses blue instrument colors for bar fill and setpoint\n * @property fillMode - Fill visualization mode: fill or tint\n * @availableWhen fillMode hasBar==true && value!=undefined\n * @property fillMin - Minimum fill value for tint mode (defaults to 0)\n * @availableWhen fillMin hasBar==true && value!=undefined\n * @property fillMax - Maximum fill value for tint mode (defaults to value)\n * @availableWhen fillMax hasBar==true && value!=undefined\n * @property value - Current value (bar fill level)\n * @property state - Instrument state (affects colors and some marker behavior)\n * @property advicePosition - Advice overlay positioning: center (in bar), inner (covers minor ticks), outer (no overlap)\n * @availableWhen advicePosition hasBar==true && advices!=undefined\n * @property advices - Advice/alert overlays with state and positioning.\n * When undefined or empty, no advice shown.\n * @property highlightCurrentValue - When true, displays a dot indicator at the current value position.\n * The dot is rendered in the scale band, touching its inner edge (towards the chart).\n * This provides an alternative to bar fill for highlighting the current value.\n * @fires {CustomEvent} scale-dimensions-changed - Fired when the scale's computed layout thickness changes; a parent chart listens for this to reserve space for the scale. Bubbles and is composed.\n * @beta\n */\n@customElement('obc-bar-horizontal')\nexport class ObcBarHorizontal extends SetpointMixin(LitElement, {\n defaultDeadband: 1,\n}) {\n @property({type: Number}) minValue = 0;\n @property({type: Number}) maxValue = 100;\n\n @property({type: Number}) width = 320;\n\n @property({type: Number}) paddingLeft: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: Number}) paddingRight: number =\n CHART_DIMENSIONS.CANVAS_PADDING;\n\n @property({type: String}) side: ExternalScaleSide = ExternalScaleSide.bottom;\n\n @property({type: Boolean})\n fixedAspectRatio = false;\n\n @property({type: Number})\n scaleReferenceSize = 384;\n\n @state()\n private _scale = 1;\n\n // ResizeController automatically subscribes/unsubscribes based on component lifecycle\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _resizeController = new ResizeController(this, {\n callback: (entries) => {\n if (!this.fixedAspectRatio) return;\n\n const entry = entries[0];\n if (!entry) return;\n\n // Use the centralized function that computes scale based on reference size\n // For horizontal scales, compare container width to reference size\n const containerMainAxisSize = entry.contentRect.width;\n\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.horizontal,\n containerMainAxisSize,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n\n // Report scaled dimensions to parent chart\n this.reportDimensions();\n },\n });\n\n // Bands (thickness)\n @property({type: Boolean, attribute: false}) hasScale = true;\n @property({type: Boolean, attribute: false}) showLabels = true;\n @property({type: Boolean}) showMainTickmarkLabels = false;\n @property({type: Boolean}) hasBar = false;\n @property({type: Boolean})\n scaleBackground = false;\n @property({type: String})\n barContainerStyle?: BarContainerStyle = undefined;\n @property({type: Number}) barThickness = 24;\n @property({type: Number}) tickThickness = 24;\n @property({type: Number}) labelThickness = 60;\n\n // Tick configuration\n @property({type: Array, attribute: false}) mainTickmarks?: number[] = [];\n @property({type: Number}) primaryTickmarkInterval?: number = undefined;\n @property({type: Number}) secondaryTickmarkInterval?: number = undefined;\n @property({type: Number}) tertiaryTickmarkInterval?: number = undefined;\n @property({type: String}) scaleType: ScaleType = ScaleType.regular;\n @property({type: String}) frameStyle: FrameStyle = FrameStyle.regular;\n @property({type: String})\n borderRadiusPosition?: BorderRadiusPosition = undefined;\n\n @property({type: Boolean})\n instrumentMode = false;\n\n @property({type: Number})\n borderRadius?: number = undefined;\n\n @state()\n private _computedBorderRadius?: number;\n\n private _borderRadiusObserver?: MutationObserver;\n\n // @ts-expect-error - Controller is used for side effects, not accessed directly\n private _borderRadiusResizeController = new ResizeController(this, {\n callback: () => {\n // Skip CSS variable reading in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n }\n },\n });\n\n // Values\n @property({type: String}) priority: Priority = Priority.regular;\n @property({type: String}) fillMode: FillMode = FillMode.fill;\n @property({type: Number}) fillMin?: number = undefined;\n @property({type: Number}) fillMax?: number = undefined;\n @property({type: Number}) value?: number = undefined;\n\n @property({type: String}) state: InstrumentState = InstrumentState.active;\n\n // Advice\n @property({type: String}) advicePosition: AdvicePosition =\n AdvicePosition.inner;\n @property({type: Array, attribute: false}) advices?: LinearAdvice[] = [];\n\n @property({type: Boolean}) highlightCurrentValue = false;\n\n override render() {\n // When fixedAspectRatio is true, use scaleReferenceSize for the viewBox length.\n // This makes the SVG render at the \"design reference size\" and then scale\n // proportionally to fit the actual container via preserveAspectRatio=\"xMidYMid meet\".\n // The _scale CSS variable counter-scales text labels to maintain constant visual size.\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.width;\n\n // The parent chart component (chart-line-base) calculates and passes the correct\n // viewBox padding values when fixedAspectRatioScaling is enabled. The padding is\n // pre-scaled to: basePadding * scaleReferenceSize / referenceWidth\n // This ensures the visual padding matches the chart's Canvas padding at any aspect ratio.\n\n const config: ExternalScaleConfig = {\n orientation: ExternalScaleOrientation.horizontal,\n side: this.side,\n length: effectiveLength,\n paddingStart: this.paddingLeft,\n paddingEnd: this.paddingRight,\n minValue: this.minValue,\n maxValue: this.maxValue,\n hasScale: this.hasScale,\n labels: this.showLabels,\n mainTickmarkLabels: this.showMainTickmarkLabels,\n hasBar: this.hasBar,\n scaleBackground: this.scaleBackground,\n barContainerStyle: this.barContainerStyle,\n barThickness: this.barThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n mainTickmarks: this.mainTickmarks,\n primaryTickmarkInterval: this.primaryTickmarkInterval,\n secondaryTickmarkInterval: this.secondaryTickmarkInterval,\n tertiaryTickmarkInterval: this.tertiaryTickmarkInterval,\n scaleType: this.scaleType,\n frameStyle: this.frameStyle,\n borderRadiusPosition: this.borderRadiusPosition,\n priority: this.priority,\n setpointOverride: this.setpointOverride,\n fillMode: this.fillMode,\n fillMin: this.fillMin,\n fillMax: this.fillMax,\n value: this.value,\n setpoint: this.setpoint,\n newSetpoint: this.newSetpoint,\n atSetpoint: this.atSetpoint,\n autoAtSetpoint: this.autoAtSetpoint,\n autoAtSetpointDeadband: this.autoAtSetpointDeadband,\n setpointAtZeroDeadband: this.setpointAtZeroDeadband,\n animateSetpoint: this.animateSetpoint,\n departingNewSetpoint: this.departingNewSetpoint,\n state: this.state,\n touching: this.touching,\n advicePosition: this.advicePosition,\n advices: this.advices as ExternalScaleAdvice[],\n fixedAspectRatio: this.fixedAspectRatio,\n instrumentMode: this.instrumentMode,\n highlightCurrentValue: this.highlightCurrentValue,\n };\n\n const layout = computeExternalScaleLayout(\n toExternalScaleLayoutConfig(config)\n );\n\n const parts = renderExternalScale(config);\n\n const viewBox = computeExternalScaleViewBox(\n {orientation: config.orientation, length: effectiveLength},\n layout\n );\n const preserveAspectRatio = this.fixedAspectRatio\n ? 'xMidYMid meet'\n : 'none';\n\n return html`\n <svg\n width=${this.fixedAspectRatio ? '100%' : `${this.width}px`}\n height=${this.fixedAspectRatio ? '100%' : `${viewBox.height}px`}\n viewBox=\"${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}\"\n preserveAspectRatio=\"${preserveAspectRatio}\"\n style=\"--scale: ${this.fixedAspectRatio ? this._scale : 1};\"\n part=\"svg\"\n >\n ${parts.barContainer} ${parts.barFill} ${parts.scaleBackground}\n ${parts.tickmarks} ${parts.labels} ${parts.adviceOverlays}\n ${parts.currentValueDot} ${parts.setpoint}\n </svg>\n `;\n }\n\n override updated(changed: PropertyValues) {\n super.updated(changed);\n\n if (changed.has('scaleType')) {\n this._refreshBorderRadiusFromCssVar();\n }\n\n // Update host styles when fixedAspectRatio changes\n if (changed.has('fixedAspectRatio')) {\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n // Force initial scale calculation based on current size\n this._updateScaleFromCurrentSize();\n } else {\n this._removeFixedAspectRatioStyles();\n this._scale = 1;\n }\n }\n\n // Also recalculate scale when scaleReferenceSize changes\n if (changed.has('scaleReferenceSize') && this.fixedAspectRatio) {\n this._updateScaleFromCurrentSize();\n }\n\n // Report dimensions to parent chart when layout-affecting properties change.\n // In fixedAspectRatio mode, resize events also trigger reportDimensions() via ResizeController.\n // In regular mode, we report on every update to keep parent chart in sync.\n // Layout-affecting properties change the computed thickness and must notify the parent\n // even in fixedAspectRatio mode to keep chart padding accurate.\n const layoutChanged =\n changed.has('side') ||\n changed.has('showLabels') ||\n changed.has('showMainTickmarkLabels') ||\n changed.has('hasScale') ||\n changed.has('hasBar') ||\n changed.has('barThickness') ||\n changed.has('tickThickness') ||\n changed.has('labelThickness') ||\n changed.has('scaleType') ||\n changed.has('borderRadiusPosition') ||\n changed.has('borderRadius') ||\n changed.has('advices') ||\n changed.has('advicePosition') ||\n this.setpointPresenceChanged(changed);\n\n if (!this.fixedAspectRatio || layoutChanged) {\n this.reportDimensions();\n }\n }\n\n /**\n * Report scale dimensions to parent chart component.\n * When fixedAspectRatio=true, reports the actual visual (scaled) thickness\n * so the chart can correctly reserve space for the scale.\n * When fixedAspectRatio=false, reports the base/unscaled thickness.\n */\n private reportDimensions() {\n const effectiveBarThickness = computeExternalScaleEffectiveBarThickness({\n hasBar: this.hasBar,\n barThickness: this.barThickness,\n borderRadius: this._getEffectiveBorderRadius(),\n scaleType: this.scaleType,\n });\n\n // Use scaleReferenceSize for layout calculation when in fixedAspectRatio mode\n // This ensures consistent layout dimensions based on the design reference size\n const effectiveLength = this.fixedAspectRatio\n ? this.scaleReferenceSize\n : this.width;\n\n const baseDimensions = computeScaleDimensionsForReport({\n orientation: ExternalScaleOrientation.horizontal,\n side: this.side,\n hasBar: this.hasBar,\n hasScale: this.hasScale,\n labels: this.showLabels,\n barThickness: effectiveBarThickness,\n tickThickness: this.tickThickness,\n labelThickness: this.labelThickness,\n length: effectiveLength,\n scaleType: this.scaleType,\n advicePosition: this.advicePosition,\n hasAdvice: !!this.advices && this.advices.length > 0,\n hasSetpoint:\n this.setpoint !== undefined ||\n this.newSetpoint !== undefined ||\n this.departingNewSetpoint !== undefined,\n });\n\n // When fixedAspectRatio=true, the SVG scales proportionally via preserveAspectRatio=\"meet\".\n // The visual thickness = baseThickness × scale, where scale = containerSize / scaleReferenceSize.\n // Report the actual visual thickness so the chart can reserve the correct space.\n const dimensions = this.fixedAspectRatio\n ? {\n ...baseDimensions,\n thickness: Math.round(baseDimensions.thickness * this._scale),\n }\n : baseDimensions;\n\n this.dispatchEvent(\n new CustomEvent('scale-dimensions-changed', {\n detail: dimensions,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n protected override createRenderRoot() {\n return this;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Only read from CSS variable and observe changes when not in instrument mode\n if (!this.instrumentMode) {\n this._refreshBorderRadiusFromCssVar();\n this._startBorderRadiusObserver();\n }\n\n // Ensure the element fills its container when in fixedAspectRatio mode\n // Custom elements are display:inline by default, which doesn't work for percentage-based sizing\n if (this.fixedAspectRatio) {\n this._applyFixedAspectRatioStyles();\n }\n }\n\n override disconnectedCallback(): void {\n this._borderRadiusObserver?.disconnect();\n this._borderRadiusObserver = undefined;\n super.disconnectedCallback();\n }\n\n private _startBorderRadiusObserver(): void {\n this._borderRadiusObserver?.disconnect();\n\n this._borderRadiusObserver = startExternalScaleBorderRadiusObserver(\n this,\n () => this._refreshBorderRadiusFromCssVar()\n );\n }\n\n /**\n * Apply CSS styles needed for fixedAspectRatio mode.\n * Custom elements are display:inline by default, which doesn't work with percentage-based sizing.\n * We need display:block and width:100% to fill the slot container.\n */\n private _applyFixedAspectRatioStyles(): void {\n this.style.display = 'block';\n this.style.width = '100%';\n this.style.height = 'auto';\n }\n\n /**\n * Remove fixed aspect ratio styles when switching back to pixel mode.\n */\n private _removeFixedAspectRatioStyles(): void {\n this.style.display = '';\n this.style.width = '';\n this.style.height = '';\n }\n\n /**\n * Calculate scale based on current element size.\n * Called when fixedAspectRatio is enabled or scaleReferenceSize changes.\n */\n private _updateScaleFromCurrentSize(): void {\n // Use requestAnimationFrame to ensure layout is complete\n requestAnimationFrame(() => {\n const containerWidth = this.clientWidth;\n if (containerWidth > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.horizontal,\n containerMainAxisSize: containerWidth,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n this.requestUpdate();\n // Report updated dimensions to parent (matches pattern in ResizeController and _refreshBorderRadiusFromCssVar)\n this.reportDimensions();\n }\n });\n }\n\n private _refreshBorderRadiusFromCssVar(): void {\n // Skip CSS variable reading in instrument mode\n if (this.instrumentMode) return;\n\n const next = readExternalScaleBorderRadiusPx(this, this.scaleType);\n\n if (this._computedBorderRadius !== next) {\n this._computedBorderRadius = next;\n }\n\n // In fixed-aspect-ratio mode, recompute scale when border radius changes\n // (border radius affects effective bar thickness and therefore viewBox)\n if (this.fixedAspectRatio) {\n const rect = this.getBoundingClientRect();\n if (rect.width > 0) {\n this._scale = computeFixedAspectRatioScale({\n orientation: ExternalScaleOrientation.horizontal,\n containerMainAxisSize: rect.width,\n scaleReferenceSize: this.scaleReferenceSize,\n });\n // Report updated dimensions\n this.reportDimensions();\n }\n }\n }\n\n /**\n * Get the effective border radius to use.\n * In instrument mode: use explicit borderRadius prop or default based on scaleType.\n * In normal mode: use CSS variable computed value.\n */\n private _getEffectiveBorderRadius(): number {\n if (this.instrumentMode) {\n // In instrument mode, use explicit value or default\n if (this.borderRadius !== undefined) {\n return this.borderRadius;\n }\n // Default: 8px for regular, 4px for condensed\n return this.scaleType === ScaleType.condensed ? 4 : 8;\n }\n // Normal mode: use CSS variable computed value\n return (\n this._computedBorderRadius ??\n (this.scaleType === ScaleType.condensed ? 4 : 8)\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-bar-horizontal': ObcBarHorizontal;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -33,6 +33,10 @@ declare const ObcBarVertical_base: (new (...args: any[]) => import('../../svghel
33
33
  * Above this height, the scale grows proportionally; below, it shrinks.
34
34
  * @availableWhen scaleReferenceSize fixedAspectRatio==true
35
35
  * @property hasScale - Show scale tickmarks
36
+ * @property showMainTickmarkLabels - Label the main tickmarks (min / 0 / max) instead of the
37
+ * primary interval ladder, for a scale too short for a ladder. A chart sets it on its
38
+ * slotted scales below its label threshold.
39
+ * @availableWhen showMainTickmarkLabels showLabels==true
36
40
  * @property hasBar - Show bar
37
41
  * @property scaleBackground - Show background behind the scale tickmarks.
38
42
  * @property barContainerStyle - Bar container background style.
@@ -102,6 +106,8 @@ export declare class ObcBarVertical extends ObcBarVertical_base {
102
106
  /** Show scale tickmarks */
103
107
  hasScale: boolean;
104
108
  showLabels: boolean;
109
+ /** Label the main tickmarks (min / 0 / max) instead of the primary interval ladder, for a scale too short for a ladder. A chart sets it on its slotted scales below its label threshold. */
110
+ showMainTickmarkLabels: boolean;
105
111
  /** Show bar */
106
112
  hasBar: boolean;
107
113
  /** Show background behind the scale tickmarks. */
@@ -1 +1 @@
1
- {"version":3,"file":"bar-vertical.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/bar-vertical/bar-vertical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAO,MAAM,KAAK,CAAC;AAErC,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,KAAK,CAAC;AAIxC,OAAO,EACL,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,QAAQ,EACT,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAKjE,OAAO,EAUL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EAEjB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAClB,CAAC;;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AACH,qBACa,cAAe,SAAQ,mBAElC;IAC0B,QAAQ,SAAK;IACb,QAAQ,SAAO;IAEf,MAAM,SAAO;IAEb,UAAU,EAAE,MAAM,CACV;IAER,aAAa,EAAE,MAAM,CACb;IAER,IAAI,EAAE,iBAAiB,CAA2B;IAG5E,gBAAgB,UAAS;IAGzB,kBAAkB,SAAO;IAGzB,OAAO,CAAC,MAAM,CAAK;IAInB,OAAO,CAAC,iBAAiB,CAoBtB;IAG0C,QAAQ,UAAQ;IAChB,UAAU,UAAQ;IACpC,MAAM,UAAS;IAE1C,eAAe,UAAS;IAExB,iBAAiB,CAAC,EAAE,iBAAiB,CAAa;IACxB,YAAY,SAAM;IAClB,aAAa,SAAM;IACnB,cAAc,SAAM;IAGH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAM;IAC/C,uBAAuB,CAAC,EAAE,MAAM,CAAa;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAa;IAC/C,wBAAwB,CAAC,EAAE,MAAM,CAAa;IAC9C,SAAS,EAAE,SAAS,CAAqB;IACzC,UAAU,EAAE,UAAU,CAAsB;IAEtE,oBAAoB,CAAC,EAAE,oBAAoB,CAAa;IAGxD,cAAc,UAAS;IAGvB,YAAY,CAAC,EAAE,MAAM,CAAa;IAGlC,OAAO,CAAC,qBAAqB,CAAC,CAAS;IAEvC,OAAO,CAAC,qBAAqB,CAAC,CAAmB;IAGjD,OAAO,CAAC,6BAA6B,CAOlC;IAGuB,QAAQ,EAAE,QAAQ,CAAoB;IACtC,QAAQ,EAAE,QAAQ,CAAiB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAa;IAE3B,KAAK,EAAE,eAAe,CAA0B;IAGhD,cAAc,EAAE,cAAc,CACjC;IACoB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAM;IAE9C,qBAAqB,UAAS;IAEhD,MAAM;IA2FN,OAAO,CAAC,OAAO,EAAE,cAAc;IAiDxC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;cAoDL,gBAAgB;IAI1B,iBAAiB,IAAI,IAAI;IAezB,oBAAoB,IAAI,IAAI;IAMrC,OAAO,CAAC,0BAA0B;IASlC;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAMpC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAMrC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,8BAA8B;IA0BtC;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;CAelC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
1
+ {"version":3,"file":"bar-vertical.d.ts","sourceRoot":"","sources":["../../../src/building-blocks/bar-vertical/bar-vertical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAO,MAAM,KAAK,CAAC;AAErC,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,KAAK,CAAC;AAIxC,OAAO,EACL,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,QAAQ,EACT,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAKjE,OAAO,EAUL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EAEjB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAClB,CAAC;;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,qBACa,cAAe,SAAQ,mBAElC;IAC0B,QAAQ,SAAK;IACb,QAAQ,SAAO;IAEf,MAAM,SAAO;IAEb,UAAU,EAAE,MAAM,CACV;IAER,aAAa,EAAE,MAAM,CACb;IAER,IAAI,EAAE,iBAAiB,CAA2B;IAG5E,gBAAgB,UAAS;IAGzB,kBAAkB,SAAO;IAGzB,OAAO,CAAC,MAAM,CAAK;IAInB,OAAO,CAAC,iBAAiB,CAoBtB;IAG0C,QAAQ,UAAQ;IAChB,UAAU,UAAQ;IACpC,sBAAsB,UAAS;IAC/B,MAAM,UAAS;IAE1C,eAAe,UAAS;IAExB,iBAAiB,CAAC,EAAE,iBAAiB,CAAa;IACxB,YAAY,SAAM;IAClB,aAAa,SAAM;IACnB,cAAc,SAAM;IAGH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAM;IAC/C,uBAAuB,CAAC,EAAE,MAAM,CAAa;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAa;IAC/C,wBAAwB,CAAC,EAAE,MAAM,CAAa;IAC9C,SAAS,EAAE,SAAS,CAAqB;IACzC,UAAU,EAAE,UAAU,CAAsB;IAEtE,oBAAoB,CAAC,EAAE,oBAAoB,CAAa;IAGxD,cAAc,UAAS;IAGvB,YAAY,CAAC,EAAE,MAAM,CAAa;IAGlC,OAAO,CAAC,qBAAqB,CAAC,CAAS;IAEvC,OAAO,CAAC,qBAAqB,CAAC,CAAmB;IAGjD,OAAO,CAAC,6BAA6B,CAOlC;IAGuB,QAAQ,EAAE,QAAQ,CAAoB;IACtC,QAAQ,EAAE,QAAQ,CAAiB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAa;IAE3B,KAAK,EAAE,eAAe,CAA0B;IAGhD,cAAc,EAAE,cAAc,CACjC;IACoB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAM;IAE9C,qBAAqB,UAAS;IAEhD,MAAM;IA4FN,OAAO,CAAC,OAAO,EAAE,cAAc;IAkDxC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;cAoDL,gBAAgB;IAI1B,iBAAiB,IAAI,IAAI;IAezB,oBAAoB,IAAI,IAAI;IAMrC,OAAO,CAAC,0BAA0B;IASlC;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAMpC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAMrC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,8BAA8B;IA0BtC;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;CAelC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
@@ -48,6 +48,7 @@ let ObcBarVertical = class extends SetpointMixin(LitElement, {
48
48
  });
49
49
  this.hasScale = true;
50
50
  this.showLabels = true;
51
+ this.showMainTickmarkLabels = false;
51
52
  this.hasBar = false;
52
53
  this.scaleBackground = false;
53
54
  this.barContainerStyle = void 0;
@@ -92,6 +93,7 @@ let ObcBarVertical = class extends SetpointMixin(LitElement, {
92
93
  maxValue: this.maxValue,
93
94
  hasScale: this.hasScale,
94
95
  labels: this.showLabels,
96
+ mainTickmarkLabels: this.showMainTickmarkLabels,
95
97
  hasBar: this.hasBar,
96
98
  scaleBackground: this.scaleBackground,
97
99
  barContainerStyle: this.barContainerStyle,
@@ -169,7 +171,7 @@ let ObcBarVertical = class extends SetpointMixin(LitElement, {
169
171
  if (changed.has("scaleReferenceSize") && this.fixedAspectRatio) {
170
172
  this._updateScaleFromCurrentSize();
171
173
  }
172
- const layoutChanged = changed.has("side") || changed.has("showLabels") || changed.has("hasScale") || changed.has("hasBar") || changed.has("barThickness") || changed.has("tickThickness") || changed.has("labelThickness") || changed.has("scaleType") || changed.has("borderRadiusPosition") || changed.has("borderRadius") || changed.has("advices") || changed.has("advicePosition") || this.setpointPresenceChanged(changed);
174
+ const layoutChanged = changed.has("side") || changed.has("showLabels") || changed.has("showMainTickmarkLabels") || changed.has("hasScale") || changed.has("hasBar") || changed.has("barThickness") || changed.has("tickThickness") || changed.has("labelThickness") || changed.has("scaleType") || changed.has("borderRadiusPosition") || changed.has("borderRadius") || changed.has("advices") || changed.has("advicePosition") || this.setpointPresenceChanged(changed);
173
175
  if (!this.fixedAspectRatio || layoutChanged) {
174
176
  this.reportDimensions();
175
177
  }
@@ -342,6 +344,9 @@ __decorateClass([
342
344
  __decorateClass([
343
345
  property({ type: Boolean, attribute: false })
344
346
  ], ObcBarVertical.prototype, "showLabels", 2);
347
+ __decorateClass([
348
+ property({ type: Boolean })
349
+ ], ObcBarVertical.prototype, "showMainTickmarkLabels", 2);
345
350
  __decorateClass([
346
351
  property({ type: Boolean })
347
352
  ], ObcBarVertical.prototype, "hasBar", 2);