@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.49 → 2.0.0-next.52

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 (254) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +18716 -17343
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +877 -14
  4. package/dist/ar/building-blocks/poi-header/poi-header.css.js +8 -4
  5. package/dist/ar/building-blocks/poi-header/poi-header.css.js.map +1 -1
  6. package/dist/ar/chart-object-vessel-button/chart-object-vessel-button.css.js +7 -7
  7. package/dist/ar/poi-card-header/poi-card-header.css.js +12 -6
  8. package/dist/ar/poi-card-header/poi-card-header.css.js.map +1 -1
  9. package/dist/automation/automation-tank/automation-tank.css.js +166 -28
  10. package/dist/automation/automation-tank/automation-tank.css.js.map +1 -1
  11. package/dist/automation/automation-tank/automation-tank.d.ts +32 -0
  12. package/dist/automation/automation-tank/automation-tank.d.ts.map +1 -1
  13. package/dist/automation/automation-tank/automation-tank.js +28 -0
  14. package/dist/automation/automation-tank/automation-tank.js.map +1 -1
  15. package/dist/building-blocks/alert-list/alert-list.css.js +4 -2
  16. package/dist/building-blocks/alert-list/alert-list.css.js.map +1 -1
  17. package/dist/components/accordion-card/accordion-card.css.js +6 -3
  18. package/dist/components/accordion-card/accordion-card.css.js.map +1 -1
  19. package/dist/components/accordion-item/accordion-item.css.js +4 -2
  20. package/dist/components/accordion-item/accordion-item.css.js.map +1 -1
  21. package/dist/components/advice-button/advice-button.css.js +2 -1
  22. package/dist/components/advice-button/advice-button.css.js.map +1 -1
  23. package/dist/components/alert-button/alert-button.css.js +2 -1
  24. package/dist/components/alert-button/alert-button.css.js.map +1 -1
  25. package/dist/components/alert-frame/alert-frame.css.js +7 -3
  26. package/dist/components/alert-frame/alert-frame.css.js.map +1 -1
  27. package/dist/components/alert-list-details/alert-list-details.css.js +4 -2
  28. package/dist/components/alert-list-details/alert-list-details.css.js.map +1 -1
  29. package/dist/components/alert-menu/alert-menu.css.js +4 -2
  30. package/dist/components/alert-menu/alert-menu.css.js.map +1 -1
  31. package/dist/components/app-button/app-button.css.js +8 -4
  32. package/dist/components/app-button/app-button.css.js.map +1 -1
  33. package/dist/components/attachment-list-item/attachment-list-item.css.js +8 -4
  34. package/dist/components/attachment-list-item/attachment-list-item.css.js.map +1 -1
  35. package/dist/components/badge/badge.css.js +4 -2
  36. package/dist/components/badge/badge.css.js.map +1 -1
  37. package/dist/components/breadcrumb/breadcrumb.css.js +4 -2
  38. package/dist/components/breadcrumb/breadcrumb.css.js.map +1 -1
  39. package/dist/components/brilliance-menu/brilliance-menu.css.js +2 -1
  40. package/dist/components/brilliance-menu/brilliance-menu.css.js.map +1 -1
  41. package/dist/components/calendar/calendar.css.js +5 -3
  42. package/dist/components/calendar/calendar.css.js.map +1 -1
  43. package/dist/components/card/card.css.js +2 -1
  44. package/dist/components/card/card.css.js.map +1 -1
  45. package/dist/components/chat-message/chat-message.css.js +6 -3
  46. package/dist/components/chat-message/chat-message.css.js.map +1 -1
  47. package/dist/components/check-button/check-button.css.js +5 -3
  48. package/dist/components/check-button/check-button.css.js.map +1 -1
  49. package/dist/components/checkbox-item/checkbox-item.css.js +4 -2
  50. package/dist/components/checkbox-item/checkbox-item.css.js.map +1 -1
  51. package/dist/components/clock/clock.css.js +7 -3
  52. package/dist/components/clock/clock.css.js.map +1 -1
  53. package/dist/components/command-menu/command-menu.css.js +6 -3
  54. package/dist/components/command-menu/command-menu.css.js.map +1 -1
  55. package/dist/components/communication-table/communication-table.css.js +10 -5
  56. package/dist/components/communication-table/communication-table.css.js.map +1 -1
  57. package/dist/components/context-menu-input/context-menu-input.css.js +4 -2
  58. package/dist/components/context-menu-input/context-menu-input.css.js.map +1 -1
  59. package/dist/components/date-item/date-item.css.js +16 -8
  60. package/dist/components/date-item/date-item.css.js.map +1 -1
  61. package/dist/components/dropdown-button/dropdown-button.css.js +6 -3
  62. package/dist/components/dropdown-button/dropdown-button.css.js.map +1 -1
  63. package/dist/components/elevated-card/elevated-card.css.js +8 -4
  64. package/dist/components/elevated-card/elevated-card.css.js.map +1 -1
  65. package/dist/components/elevated-card-radio-group/elevated-card-radio-group.css.js +6 -3
  66. package/dist/components/elevated-card-radio-group/elevated-card-radio-group.css.js.map +1 -1
  67. package/dist/components/event-item/event-item.css.js +6 -3
  68. package/dist/components/event-item/event-item.css.js.map +1 -1
  69. package/dist/components/event-list/event-list.css.js +2 -1
  70. package/dist/components/event-list/event-list.css.js.map +1 -1
  71. package/dist/components/filter-chip/filter-chip.css.js +2 -1
  72. package/dist/components/filter-chip/filter-chip.css.js.map +1 -1
  73. package/dist/components/floating-item/floating-item.css.js +6 -3
  74. package/dist/components/floating-item/floating-item.css.js.map +1 -1
  75. package/dist/components/form-container/form-container.css.js +1 -1
  76. package/dist/components/form-group/form-group.css.js +4 -2
  77. package/dist/components/form-group/form-group.css.js.map +1 -1
  78. package/dist/components/form-item/form-item.css.js +4 -2
  79. package/dist/components/form-item/form-item.css.js.map +1 -1
  80. package/dist/components/icon-button/icon-button.css.js +20 -19
  81. package/dist/components/icon-button/icon-button.css.js.map +1 -1
  82. package/dist/components/icon-button/icon-button.d.ts +2 -0
  83. package/dist/components/icon-button/icon-button.d.ts.map +1 -1
  84. package/dist/components/icon-button/icon-button.js.map +1 -1
  85. package/dist/components/icon-check-button/icon-check-button.css.js +4 -2
  86. package/dist/components/icon-check-button/icon-check-button.css.js.map +1 -1
  87. package/dist/components/input-chip/input-chip.css.js +2 -1
  88. package/dist/components/input-chip/input-chip.css.js.map +1 -1
  89. package/dist/components/keyboard-full/keyboard-full.css.js +2 -1
  90. package/dist/components/keyboard-full/keyboard-full.css.js.map +1 -1
  91. package/dist/components/keyboard-numeric/keyboard-numeric.css.js +2 -1
  92. package/dist/components/keyboard-numeric/keyboard-numeric.css.js.map +1 -1
  93. package/dist/components/menu-button/menu-button.css.js +4 -2
  94. package/dist/components/menu-button/menu-button.css.js.map +1 -1
  95. package/dist/components/message-menu-item/message-menu-item.css.js +8 -13
  96. package/dist/components/message-menu-item/message-menu-item.css.js.map +1 -1
  97. package/dist/components/modal-window/modal-window.css.js +2 -1
  98. package/dist/components/modal-window/modal-window.css.js.map +1 -1
  99. package/dist/components/navigation-item/navigation-item.css.js +9 -4
  100. package/dist/components/navigation-item/navigation-item.css.js.map +1 -1
  101. package/dist/components/notification-badge-button/notification-badge-button.css.js +2 -1
  102. package/dist/components/notification-badge-button/notification-badge-button.css.js.map +1 -1
  103. package/dist/components/notification-button/notification-button.css.js +2 -1
  104. package/dist/components/notification-button/notification-button.css.js.map +1 -1
  105. package/dist/components/number-input-field/number-input-field.css.js +4 -2
  106. package/dist/components/number-input-field/number-input-field.css.js.map +1 -1
  107. package/dist/components/pivot-item/pivot-item.css.js +4 -2
  108. package/dist/components/pivot-item/pivot-item.css.js.map +1 -1
  109. package/dist/components/progress-bar/progress-bar.css.js +4 -2
  110. package/dist/components/progress-bar/progress-bar.css.js.map +1 -1
  111. package/dist/components/progress-button/progress-button.css.js +4 -2
  112. package/dist/components/progress-button/progress-button.css.js.map +1 -1
  113. package/dist/components/radio/radio.css.js +4 -2
  114. package/dist/components/radio/radio.css.js.map +1 -1
  115. package/dist/components/rich-button/rich-button.css.js +4 -2
  116. package/dist/components/rich-button/rich-button.css.js.map +1 -1
  117. package/dist/components/sequence-item/sequence-item.css.js +11 -6
  118. package/dist/components/sequence-item/sequence-item.css.js.map +1 -1
  119. package/dist/components/sequence-loading-spinner/sequence-loading-spinner.css.js +3 -3
  120. package/dist/components/sequence-step/sequence-step.css.js +2 -1
  121. package/dist/components/sequence-step/sequence-step.css.js.map +1 -1
  122. package/dist/components/slide-button/slide-button.css.js +2 -1
  123. package/dist/components/slide-button/slide-button.css.js.map +1 -1
  124. package/dist/components/slider-double/slider-double.css.js +2 -1
  125. package/dist/components/slider-double/slider-double.css.js.map +1 -1
  126. package/dist/components/start-stop-switch/start-stop-switch.css.js +16 -8
  127. package/dist/components/start-stop-switch/start-stop-switch.css.js.map +1 -1
  128. package/dist/components/status-indicator/status-indicator.css.js +4 -2
  129. package/dist/components/status-indicator/status-indicator.css.js.map +1 -1
  130. package/dist/components/stepper-box/stepper-box.css.js +2 -1
  131. package/dist/components/stepper-box/stepper-box.css.js.map +1 -1
  132. package/dist/components/system-menu/system-menu.css.js +26 -13
  133. package/dist/components/system-menu/system-menu.css.js.map +1 -1
  134. package/dist/components/tab-item/tab-item.css.js +8 -5
  135. package/dist/components/tab-item/tab-item.css.js.map +1 -1
  136. package/dist/components/tabbed-card/tabbed-card.css.js +4 -2
  137. package/dist/components/tabbed-card/tabbed-card.css.js.map +1 -1
  138. package/dist/components/table/table.css.js +8 -5
  139. package/dist/components/table/table.css.js.map +1 -1
  140. package/dist/components/table-header-item/table-header-item.css.js +2 -1
  141. package/dist/components/table-header-item/table-header-item.css.js.map +1 -1
  142. package/dist/components/tag/tag.css.js +4 -2
  143. package/dist/components/tag/tag.css.js.map +1 -1
  144. package/dist/components/text-input-field/text-input-field.css.js +6 -3
  145. package/dist/components/text-input-field/text-input-field.css.js.map +1 -1
  146. package/dist/components/textarea-field/textarea-field.css.js +6 -3
  147. package/dist/components/textarea-field/textarea-field.css.js.map +1 -1
  148. package/dist/components/title-container/title-container.css.js +3 -2
  149. package/dist/components/title-container/title-container.css.js.map +1 -1
  150. package/dist/components/toggle-button-option/toggle-button-option.css.js +19 -12
  151. package/dist/components/toggle-button-option/toggle-button-option.css.js.map +1 -1
  152. package/dist/components/toggle-button-vertical-option/toggle-button-vertical-option.css.js +4 -2
  153. package/dist/components/toggle-button-vertical-option/toggle-button-vertical-option.css.js.map +1 -1
  154. package/dist/components/toggle-switch/toggle-switch.css.js +6 -3
  155. package/dist/components/toggle-switch/toggle-switch.css.js.map +1 -1
  156. package/dist/components/toggletip/toggletip.css.js +4 -2
  157. package/dist/components/toggletip/toggletip.css.js.map +1 -1
  158. package/dist/components/tooltip/tooltip.css.js +2 -1
  159. package/dist/components/tooltip/tooltip.css.js.map +1 -1
  160. package/dist/components/top-bar/top-bar.css.js +4 -2
  161. package/dist/components/top-bar/top-bar.css.js.map +1 -1
  162. package/dist/components/topbar-message-item/topbar-message-item.css.js +10 -5
  163. package/dist/components/topbar-message-item/topbar-message-item.css.js.map +1 -1
  164. package/dist/components/user-button/user-button.css.js +12 -7
  165. package/dist/components/user-button/user-button.css.js.map +1 -1
  166. package/dist/components/user-menu/user-menu.css.js +4 -2
  167. package/dist/components/user-menu/user-menu.css.js.map +1 -1
  168. package/dist/integration-systems/integration-bar/integration-bar.css.js +97 -0
  169. package/dist/integration-systems/integration-bar/integration-bar.css.js.map +1 -0
  170. package/dist/integration-systems/integration-bar/integration-bar.d.ts +91 -0
  171. package/dist/integration-systems/integration-bar/integration-bar.d.ts.map +1 -0
  172. package/dist/integration-systems/integration-bar/integration-bar.js +279 -0
  173. package/dist/integration-systems/integration-bar/integration-bar.js.map +1 -0
  174. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.css.js +2 -1
  175. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.css.js.map +1 -1
  176. package/dist/integration-systems/integration-button/integration-button.css.js +472 -156
  177. package/dist/integration-systems/integration-button/integration-button.css.js.map +1 -1
  178. package/dist/integration-systems/integration-button/integration-button.d.ts +37 -1
  179. package/dist/integration-systems/integration-button/integration-button.d.ts.map +1 -1
  180. package/dist/integration-systems/integration-button/integration-button.js +202 -36
  181. package/dist/integration-systems/integration-button/integration-button.js.map +1 -1
  182. package/dist/integration-systems/integration-dropdown-button/integration-dropdown-button.css.js +17 -6
  183. package/dist/integration-systems/integration-dropdown-button/integration-dropdown-button.css.js.map +1 -1
  184. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.css.js +12 -6
  185. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.css.js.map +1 -1
  186. package/dist/integration-systems/integration-tabs/integration-tabs.css.js +3 -1
  187. package/dist/integration-systems/integration-tabs/integration-tabs.css.js.map +1 -1
  188. package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.css.js +75 -0
  189. package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.css.js.map +1 -0
  190. package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.d.ts +37 -0
  191. package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.d.ts.map +1 -0
  192. package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.js +72 -0
  193. package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.js.map +1 -0
  194. package/dist/integration-systems/integration-vessel-selector/integration-vessel-selector.css.js +21 -8
  195. package/dist/integration-systems/integration-vessel-selector/integration-vessel-selector.css.js.map +1 -1
  196. package/dist/integration-systems/integration-vessel-selector/integration-vessel-selector.d.ts +2 -0
  197. package/dist/integration-systems/integration-vessel-selector/integration-vessel-selector.d.ts.map +1 -1
  198. package/dist/integration-systems/integration-vessel-selector/integration-vessel-selector.js +5 -0
  199. package/dist/integration-systems/integration-vessel-selector/integration-vessel-selector.js.map +1 -1
  200. package/dist/navigation-instruments/azimuth-thruster-labeled/azimuth-thruster-labeled.css.js +3 -1
  201. package/dist/navigation-instruments/azimuth-thruster-labeled/azimuth-thruster-labeled.css.js.map +1 -1
  202. package/dist/navigation-instruments/instrument-field/instrument-field.css.js +4 -2
  203. package/dist/navigation-instruments/instrument-field/instrument-field.css.js.map +1 -1
  204. package/dist/navigation-instruments/readout/readout.css.js +4 -2
  205. package/dist/navigation-instruments/readout/readout.css.js.map +1 -1
  206. package/dist/navigation-instruments/watch/watch.css.js +3 -2
  207. package/dist/navigation-instruments/watch/watch.css.js.map +1 -1
  208. package/dist/navigation-instruments/watch-flat/watch-flat.css.js +3 -2
  209. package/dist/navigation-instruments/watch-flat/watch-flat.css.js.map +1 -1
  210. package/dist/openbridge.css +4 -2
  211. package/dist/pages/alert-detail-page/alert-detail-page.css.js +15 -8
  212. package/dist/pages/alert-detail-page/alert-detail-page.css.js.map +1 -1
  213. package/package.json +3 -3
  214. package/postcss.config.mjs +2 -1
  215. package/script/check-css-variables.ts +9 -30
  216. package/src/ar/chart-object-vessel-button/chart-object-vessel-button.css +7 -7
  217. package/src/ar/poi-layer/poi-layer.stories.ts +3 -0
  218. package/src/automation/automation-tank/automation-tank.css +119 -21
  219. package/src/automation/automation-tank/automation-tank.stories.ts +38 -0
  220. package/src/automation/automation-tank/automation-tank.ts +64 -0
  221. package/src/components/calendar/calendar.css +1 -1
  222. package/src/components/check-button/check-button.css +1 -1
  223. package/src/components/icon-button/icon-button.css +1 -1
  224. package/src/components/icon-button/icon-button.ts +2 -0
  225. package/src/components/message-menu-item/message-menu-item.css +2 -5
  226. package/src/components/sequence-item/sequence-item.css +5 -3
  227. package/src/components/sequence-loading-spinner/sequence-loading-spinner.css +3 -3
  228. package/src/components/tab-item/tab-item.css +2 -2
  229. package/src/components/table/table.css +2 -2
  230. package/src/components/toggle-button-option/toggle-button-option.css +1 -3
  231. package/src/integration-systems/integration-app-bar/integration-app-bar.stories.ts +1 -1
  232. package/src/integration-systems/integration-bar/integration-bar.css +86 -0
  233. package/src/integration-systems/integration-bar/integration-bar.stories.ts +479 -0
  234. package/src/integration-systems/integration-bar/integration-bar.ts +301 -0
  235. package/src/integration-systems/integration-bar-dropdown/integration-bar-dropdown.stories.ts +5 -3
  236. package/src/integration-systems/integration-button/integration-button.css +203 -64
  237. package/src/integration-systems/integration-button/integration-button.stories.ts +71 -5
  238. package/src/integration-systems/integration-button/integration-button.ts +242 -43
  239. package/src/integration-systems/integration-dropdown-button/integration-dropdown-button.css +7 -1
  240. package/src/integration-systems/integration-dropdown-button/integration-dropdown-button.stories.ts +1 -1
  241. package/src/integration-systems/integration-fleet-button/integration-fleet-button.stories.ts +1 -1
  242. package/src/integration-systems/integration-tabs/integration-tabs.stories.ts +1 -1
  243. package/src/integration-systems/integration-vessel-menu/integration-vessel-menu.css +59 -0
  244. package/src/integration-systems/integration-vessel-menu/integration-vessel-menu.stories.ts +180 -0
  245. package/src/integration-systems/integration-vessel-menu/integration-vessel-menu.ts +83 -0
  246. package/src/integration-systems/integration-vessel-selector/integration-vessel-selector.css +21 -9
  247. package/src/integration-systems/integration-vessel-selector/integration-vessel-selector.stories.ts +187 -3
  248. package/src/integration-systems/integration-vessel-selector/integration-vessel-selector.ts +5 -0
  249. package/src/mixins/alert.css +0 -29
  250. package/src/mixins/font-extras.css +103 -0
  251. package/src/mixins/fonts.css +26 -96
  252. package/src/navigation-instruments/watch/watch.css +1 -1
  253. package/src/navigation-instruments/watch-flat/watch-flat.css +1 -1
  254. package/src/pages/alert-detail-page/alert-detail-page.css +1 -1
@@ -212,14 +212,6 @@
212
212
  :host([static]) .halo > .tag {
213
213
  flex: 0 0 auto;
214
214
  }
215
- /* Override the global `min-height: 24px` on `.badges` so empty badge rows
216
- * don't reserve space in compact/static — the spec says "if there are no
217
- * badges it would grow upward". The slot-driven `?hidden` attribute on
218
- * empty cells makes them `display: none` (see below). */
219
- :host([compact]) .halo > .badges,
220
- :host([static]) .halo > .badges {
221
- min-height: 0;
222
- }
223
215
  /* `hidden` attribute support: needed because the cells set an explicit
224
216
  * display value (`flex` / `block`), which would otherwise override
225
217
  * `hidden`'s default `display: none`. Removing the cell from the flex
@@ -331,7 +323,7 @@
331
323
  grid-row: 1;
332
324
  grid-column: 2;
333
325
  justify-self: end;
334
- align-self: center;
326
+ align-self: start;
335
327
  }
336
328
  .tank-frame:not(.orientation-horizontal) .grid > .readout {
337
329
  grid-row: 2;
@@ -357,7 +349,7 @@
357
349
  grid-row: 1;
358
350
  grid-column: 2;
359
351
  justify-self: end;
360
- align-self: center;
352
+ align-self: start;
361
353
  }
362
354
  .tank-frame.orientation-horizontal .grid > .bar-container {
363
355
  grid-row: 2;
@@ -367,7 +359,6 @@
367
359
  grid-row: 2;
368
360
  grid-column: 2;
369
361
  align-self: stretch;
370
- padding-left: 8px;
371
362
  min-width: 96px;
372
363
  }
373
364
 
@@ -375,7 +366,7 @@
375
366
  .badges {
376
367
  display: flex;
377
368
  justify-content: end;
378
- min-height: 24px;
369
+ gap: 4px;
379
370
  pointer-events: auto;
380
371
  }
381
372
 
@@ -383,7 +374,7 @@
383
374
  display: block;
384
375
  pointer-events: auto;
385
376
  @mixin font-instrument-label;
386
- color: var(--instrument-regular-secondary-color);
377
+ color: var(--element-neutral-color);
387
378
  /* Tag text must never break across lines — it is a fixed identifier
388
379
  * (e.g. `FUEL`, `#0000`) that loses meaning if hyphenated or wrapped. */
389
380
  white-space: nowrap;
@@ -403,11 +394,31 @@
403
394
  /* Keep `90%` together — the parent flex prevents flex-item wrapping but
404
395
  * not text wrapping inside `.percent` (number + `<span>%</span>`). */
405
396
  white-space: nowrap;
406
- @mixin font-instrument-label;
407
- color: var(--instrument-regular-secondary-color);
397
+ color: var(--element-neutral-color);
398
+
399
+ .percent {
400
+ @mixin font-instrument-value-regular-neutral;
401
+ }
402
+
403
+ .percent-symbol {
404
+ @mixin font-instrument-unit;
405
+ margin-left: 1px;
406
+ }
408
407
  }
409
- .readout-compact .percent-symbol {
410
- margin-left: 1px;
408
+
409
+ /* Static readout: max-value + unit (no percent, no trend icon). Tighter
410
+ * 2px gap and small-neutral value sizing per design spec. Color is
411
+ * inherited from `.readout-compact`. */
412
+ .readout-static {
413
+ gap: 2px;
414
+
415
+ slot[name="max-value"] {
416
+ @mixin font-instrument-value-small-neutral;
417
+ }
418
+
419
+ slot[name="unit"] {
420
+ @mixin font-instrument-unit;
421
+ }
411
422
  }
412
423
 
413
424
  .header {
@@ -415,18 +426,23 @@
415
426
  align-items: center;
416
427
  justify-content: flex-end;
417
428
  gap: 4px;
418
- /* TODO: we will need such divider in the future for the 'rich' option */
419
- /* border-bottom: 1px solid var(--border-outline-color); */
420
- padding-bottom: 2px;
421
429
 
422
430
  .percent {
423
431
  @mixin font-instrument-value-enhanced-neutral;
432
+ color: var(--element-neutral-color);
433
+ padding-bottom: var(
434
+ --global-typography-instrument-value-large-padding-bottom
435
+ );
424
436
  /* Keep the number and the trailing `%` symbol on one line. */
425
437
  white-space: nowrap;
426
438
  }
427
439
 
428
440
  .percent-symbol {
429
- @mixin font-body;
441
+ @mixin font-instrument-unit;
442
+ /* `inline-block` so `padding-bottom` actually applies (ignored on
443
+ * plain inline text). */
444
+ display: inline-block;
445
+ padding-bottom: var(--global-typography-instrument-unit-padding-bottom);
430
446
  }
431
447
  }
432
448
 
@@ -444,18 +460,100 @@
444
460
 
445
461
  .current-value {
446
462
  @mixin font-instrument-value-regular-active;
463
+ padding-bottom: var(
464
+ --global-typography-instrument-value-regular-padding-bottom
465
+ );
447
466
  }
448
467
 
449
468
  .divider {
450
469
  padding-left: 4px;
451
470
  padding-right: 4px;
471
+ padding-bottom: var(--global-typography-instrument-unit-padding-bottom);
452
472
  }
453
473
 
454
474
  .max-value {
455
475
  @mixin font-instrument-value-regular-neutral;
476
+ padding-bottom: var(
477
+ --global-typography-instrument-value-regular-padding-bottom
478
+ );
479
+ }
480
+
481
+ .unit {
482
+ padding-bottom: var(--global-typography-instrument-unit-padding-bottom);
456
483
  }
457
484
  }
458
485
 
486
+ .rich-divider {
487
+ border-top: 1px solid var(--border-divider-color);
488
+ margin-top: 8px;
489
+ }
490
+
491
+ .rich {
492
+ display: grid;
493
+ /* label takes remaining space; value (right-aligned) and suffix
494
+ * (left-aligned) form fixed content columns so digit right edges and
495
+ * suffix left edges align vertically across all rows. */
496
+ grid-template-columns: 1fr auto auto;
497
+ align-items: baseline;
498
+ row-gap: 4px;
499
+ padding-top: 8px;
500
+ white-space: nowrap;
501
+ @mixin font-instrument-unit;
502
+ }
503
+
504
+ .rich-row {
505
+ display: grid;
506
+ grid-template-columns: subgrid;
507
+ grid-column: 1 / -1;
508
+ align-items: baseline;
509
+ padding-left: var(
510
+ --instrument-components-readout-new-list-item-regular-container-padding-horizontal
511
+ );
512
+ padding-right: var(
513
+ --instrument-components-readout-new-list-item-regular-container-padding-horizontal
514
+ );
515
+ }
516
+
517
+ .rich-label {
518
+ @mixin font-instrument-label;
519
+ color: var(--element-inactive-color);
520
+ padding-right: 8px;
521
+ text-align: left;
522
+ }
523
+
524
+ .rich-value {
525
+ @mixin font-instrument-value-regular-neutral;
526
+ color: var(--element-neutral-color);
527
+ font-variant-numeric: tabular-nums;
528
+ text-align: right;
529
+ }
530
+
531
+ .rich-suffix {
532
+ display: inline-flex;
533
+ align-items: baseline;
534
+ /* Default 2px gap between value and unit when there is no degree/percent
535
+ * glyph. When a glyph is present it sits flush against the value and the
536
+ * unit follows flush after the glyph (see `.rich-glyph + .rich-unit`). */
537
+ padding-left: 2px;
538
+ }
539
+
540
+ .rich-suffix:has(.rich-glyph) {
541
+ padding-left: 0;
542
+ }
543
+
544
+ .rich-glyph {
545
+ @mixin font-instrument-value-regular-neutral;
546
+ color: var(--element-neutral-color);
547
+ }
548
+
549
+ .rich-unit {
550
+ color: var(--element-inactive-color);
551
+ }
552
+
553
+ .rich-glyph + .rich-unit {
554
+ padding-left: 0;
555
+ }
556
+
459
557
  /* The chart cell is a plain sizing/clipping box. Both child renderers —
460
558
  * `obc-gauge-trend` (graph / graph-and-bar modes) and `obc-bar-vertical`
461
559
  * (bar mode) — paint their own background, border and border-radius. */
@@ -6,6 +6,7 @@ import {
6
6
  TankPositioning,
7
7
  TankTrend,
8
8
  TankType,
9
+ type TankReadoutItem,
9
10
  } from './automation-tank.js';
10
11
  import './automation-tank.js';
11
12
  import {html} from 'lit';
@@ -56,6 +57,12 @@ const SAMPLE_ADVICE: LinearAdvice[] = [
56
57
  {min: 7500, max: 9000, type: AdviceType.advice, hinted: false},
57
58
  ];
58
59
 
60
+ const SAMPLE_READOUT: TankReadoutItem[] = [
61
+ {label: 'Temperature', value: 45, hasDegree: true, unit: 'C'},
62
+ {label: 'Pressure', value: 45, unit: 'Pa'},
63
+ {label: 'Flow speed', value: 45, unit: 'm/s'},
64
+ ];
65
+
59
66
  const renderTank = (args: StoryArgs) => html`
60
67
  <obc-automation-tank
61
68
  .value=${args.value}
@@ -74,6 +81,7 @@ const renderTank = (args: StoryArgs) => html`
74
81
  .hasGraphIcon=${args.hasGraphIcon}
75
82
  .showTrendSymbol=${args.showTrendSymbol}
76
83
  .percentFractionDigits=${args.percentFractionDigits}
84
+ .readout=${args.readout}
77
85
  ?alert=${args.alert}
78
86
  .alertFrameType=${args.alertFrameType}
79
87
  .alertFrameThickness=${args.alertFrameThickness}
@@ -110,6 +118,7 @@ const meta: Meta<StoryArgs> = {
110
118
  hasGraphIcon: false,
111
119
  showTrendSymbol: true,
112
120
  percentFractionDigits: 0,
121
+ readout: [],
113
122
  alert: false,
114
123
  alertFrameType: ObcAlertFrameType.SmallSideFlip,
115
124
  alertFrameThickness: ObcAlertFrameThickness.Small,
@@ -177,6 +186,11 @@ const meta: Meta<StoryArgs> = {
177
186
  description:
178
187
  'Advice overlay bands. `min`/`max` are in the same units as `max`. Toggle visibility with `hasAdvice`. Works in all three `chartMode` variants — `bar` overlays advice pills on the static bar, `graph` and `graph-and-bar` forward them to the embedded `obc-gauge-trend`.',
179
188
  },
189
+ readout: {
190
+ control: {type: 'object'},
191
+ description:
192
+ 'Rich detail rows shown below the main percent/value block in the regular (non-compact, non-static) layout, separated by a divider. Each row: `{label, value, hasDegree?, hasPercentage?, unit}`. Empty array — nothing is rendered. Values use `percentFractionDigits` for formatting. Override the whole block via `slot="rich"`.',
193
+ },
180
194
  badgeControl: {
181
195
  options: Object.values(AutomationButtonBadgeControl),
182
196
  control: {type: 'select'},
@@ -355,6 +369,23 @@ export const BatteryWithGraphIcon: Story = {
355
369
  },
356
370
  };
357
371
 
372
+ export const Rich: Story = {
373
+ args: {
374
+ type: TankType.atmospheric,
375
+ chartMode: TankChartMode.graphAndBar,
376
+ readout: SAMPLE_READOUT,
377
+ },
378
+ };
379
+
380
+ export const HorizontalRich: Story = {
381
+ args: {
382
+ type: TankType.atmospheric,
383
+ orientation: TankOrientation.horizontal,
384
+ chartMode: TankChartMode.graphAndBar,
385
+ readout: SAMPLE_READOUT,
386
+ },
387
+ };
388
+
358
389
  /**
359
390
  * Demonstrates fractional precision in the non-compact readout. The percent
360
391
  * readout is controlled by the `percentFractionDigits` property (here `1`,
@@ -367,6 +398,10 @@ export const BatteryWithGraphIcon: Story = {
367
398
  * The compact / static layouts only show the percent (no absolute value)
368
399
  * and always render it as an integer to keep their fixed-width footprint
369
400
  * stable, so fraction-digit control only applies to the non-compact layout.
401
+ *
402
+ * `percentFractionDigits` is also applied uniformly to every row of the
403
+ * `readout` rich list (see the `Rich` story) — all rows share one digit
404
+ * count so the right-aligned numeric column stays visually consistent.
370
405
  */
371
406
  export const WithFractionDigits: Story = {
372
407
  args: {
@@ -396,6 +431,7 @@ export const WithFractionDigits: Story = {
396
431
  .showTrendSymbol=${args.showTrendSymbol}
397
432
  .priority=${args.priority}
398
433
  .percentFractionDigits=${args.percentFractionDigits}
434
+ .readout=${args.readout}
399
435
  >
400
436
  <span slot="current-value">${args.value.toFixed(2)}</span>
401
437
  <span slot="max-value">${args.max.toFixed(2)}</span>
@@ -434,6 +470,7 @@ export const WithAlertAlarm: Story = {
434
470
  .hasGraphIcon=${args.hasGraphIcon}
435
471
  .showTrendSymbol=${args.showTrendSymbol}
436
472
  .percentFractionDigits=${args.percentFractionDigits}
473
+ .readout=${args.readout}
437
474
  ?alert=${args.alert}
438
475
  .alertFrameType=${args.alertFrameType}
439
476
  .alertFrameThickness=${args.alertFrameThickness}
@@ -534,6 +571,7 @@ export const Responsive: Story = {
534
571
  .hasGraphIcon=${args.hasGraphIcon}
535
572
  .showTrendSymbol=${args.showTrendSymbol}
536
573
  .percentFractionDigits=${args.percentFractionDigits}
574
+ .readout=${args.readout}
537
575
  ?alert=${args.alert}
538
576
  .alertFrameType=${args.alertFrameType}
539
577
  .alertFrameThickness=${args.alertFrameThickness}
@@ -94,6 +94,25 @@ export enum TankChartMode {
94
94
  graphAndBar = 'graph-and-bar',
95
95
  }
96
96
 
97
+ /**
98
+ * A single detail row rendered in the tank's `readout` rich list (below the
99
+ * main percent / value block, separated by a divider). Each row is rendered
100
+ * as `<label>` on the left and `<value><degree?><percent?><unit>` on the
101
+ * right, all on a single line.
102
+ */
103
+ export interface TankReadoutItem {
104
+ /** Left-aligned label text (e.g. `Temperature`). */
105
+ label: string;
106
+ /** Numeric value, formatted with the tank's `percentFractionDigits`. */
107
+ value: number;
108
+ /** Append a `°` glyph directly after the value with no gap. */
109
+ hasDegree?: boolean;
110
+ /** Append a `%` glyph directly after the value with no gap. */
111
+ hasPercentage?: boolean;
112
+ /** Unit text (e.g. `C`, `Pa`, `m/s`). Rendered after the value/glyph. */
113
+ unit: string;
114
+ }
115
+
97
116
  /**
98
117
  *
99
118
  *
@@ -221,6 +240,21 @@ export class ObcAutomationTank extends LitElement {
221
240
  */
222
241
  @property({type: Number}) percentFractionDigits: number = 0;
223
242
 
243
+ /**
244
+ * Rich detail rows shown below the main percent/value block in the regular
245
+ * (non-compact, non-static) layout, separated by a divider. When empty (the
246
+ * default), nothing is rendered — neither the divider nor the list. In
247
+ * vertical orientation the chart cell shrinks to make room; in horizontal
248
+ * orientation the readout column already has reserved whitespace so the
249
+ * chart is unaffected.
250
+ *
251
+ * Values are formatted using `percentFractionDigits`. Consumers that need
252
+ * full control over the markup can replace the entire fallback by slotting
253
+ * arbitrary content into `slot="rich"` (note: this is a different name from
254
+ * the existing `slot="readout"` which replaces the whole readout block).
255
+ */
256
+ @property({type: Array, attribute: false}) readout: TankReadoutItem[] = [];
257
+
224
258
  /**
225
259
  * Enum-driven badges rendered inside the `badges` cell. Mirrors the API
226
260
  * introduced for `ObcAbstractAutomationButton` in PR #839 (#829). When set
@@ -703,6 +737,36 @@ export class ObcAutomationTank extends LitElement {
703
737
  <slot class="unit" name="unit">m<sup>3</sup></slot>
704
738
  </div>
705
739
  </div>
740
+ <slot name="rich">
741
+ ${this.readout.length > 0
742
+ ? html`
743
+ <div class="rich-divider"></div>
744
+ <div class="rich">
745
+ ${this.readout.map(
746
+ (row) => html`
747
+ <div class="rich-row">
748
+ <span class="rich-label">${row.label}</span>
749
+ <span class="rich-value"
750
+ >${row.value.toFixed(
751
+ this.percentFractionDigits
752
+ )}</span
753
+ >
754
+ <span class="rich-suffix"
755
+ >${row.hasDegree
756
+ ? html`<span class="rich-glyph">°</span>`
757
+ : nothing}${row.hasPercentage
758
+ ? html`<span class="rich-glyph">%</span>`
759
+ : nothing}<span class="rich-unit"
760
+ >${row.unit}</span
761
+ ></span
762
+ >
763
+ </div>
764
+ `
765
+ )}
766
+ </div>
767
+ `
768
+ : nothing}
769
+ </slot>
706
770
  </slot>
707
771
  </div>
708
772
  `;
@@ -45,7 +45,7 @@
45
45
  flex: 1 1 0;
46
46
  min-width: 0;
47
47
  @mixin font-body;
48
- color: var(--on-container-active-color);
48
+ color: var(--on-flat-active-color);
49
49
  }
50
50
 
51
51
  .month-label {
@@ -30,7 +30,7 @@
30
30
  width: 100%;
31
31
 
32
32
  &.has-custom-width {
33
- width: var(--custom-width);
33
+ width: var(--custom-width, auto);
34
34
  }
35
35
  }
36
36
 
@@ -133,7 +133,7 @@
133
133
  }
134
134
 
135
135
  &.variant-integration {
136
- @mixin style style=integration-normal visibleWrapperClass=.visible-wrapper;
136
+ @mixin style style=integration-flat visibleWrapperClass=.visible-wrapper;
137
137
  color: var(--integration-on-normal-neutral-color);
138
138
 
139
139
  .visible-wrapper {
@@ -9,6 +9,7 @@ import {customElement} from '../../decorator.js';
9
9
  * - `normal`: Standard appearance for most use cases.
10
10
  * - `raised`: Adds elevation/shadow for prominence.
11
11
  * - `flat`: Minimal, backgroundless style for subtle actions.
12
+ * - `integration`: For use in Integration Bar components
12
13
  */
13
14
  export enum IconButtonVariant {
14
15
  normal = 'normal',
@@ -29,6 +30,7 @@ export enum IconButtonVariant {
29
30
  * - `normal` (default): Standard appearance for most use cases.
30
31
  * - `raised`: Adds elevation/shadow for prominence.
31
32
  * - `flat`: Minimal, backgroundless style for subtle actions.
33
+ * - `integration`: For use in Integration Bar components
32
34
  * - **Progress Indicator:**
33
35
  * - Shows a circular progress spinner overlay when the `progress` property is set (0–100). Useful for indicating loading or ongoing actions.
34
36
  * - **Label Support:**
@@ -88,11 +88,8 @@
88
88
  gap: var(--app-components-message-menu-item-label-spacing);
89
89
 
90
90
  color: var(--element-neutral-color);
91
-
92
- .day,
93
- .time {
94
- @mixin font-label;
95
- }
91
+ white-space: nowrap;
92
+ text-wrap: nowrap;
96
93
  }
97
94
 
98
95
  .chevron {
@@ -57,7 +57,7 @@
57
57
  .title-row,
58
58
  .meta-row {
59
59
  padding: var(
60
- --global-size-spacing-list-item-menu-padding-horizonal-list-item
60
+ --global-size-spacing-nav-item-and-menus-padding-horizonal-list-item
61
61
  )
62
62
  0;
63
63
  }
@@ -137,7 +137,9 @@
137
137
 
138
138
  .title-row {
139
139
  display: flex;
140
- gap: var(--global-size-spacing-list-item-menu-padding-horizonal-list-item);
140
+ gap: var(
141
+ --global-size-spacing-nav-item-and-menus-padding-horizonal-list-item
142
+ );
141
143
  justify-content: space-between;
142
144
  align-items: flex-start;
143
145
  }
@@ -186,7 +188,7 @@
186
188
  @mixin font-instrument-value-small-neutral;
187
189
  display: flex;
188
190
  flex-direction: column;
189
- gap: var(--alert-components-badge-label-spacing);
191
+ gap: var(--ui-components-badge-label-spacing);
190
192
  }
191
193
 
192
194
  /* === Label Variants === */
@@ -103,8 +103,8 @@
103
103
  background: conic-gradient(
104
104
  from 0deg,
105
105
  var(--element-neutral-enhanced-color) 0deg,
106
- var(--element-neutral-enhanced-color) var(--spinner-progress-deg),
107
- transparent var(--spinner-progress-deg),
106
+ var(--element-neutral-enhanced-color) var(--spinner-progress-deg, 0deg),
107
+ transparent var(--spinner-progress-deg, 0deg),
108
108
  transparent 360deg
109
109
  );
110
110
  }
@@ -120,7 +120,7 @@
120
120
  }
121
121
 
122
122
  .cap-end {
123
- transform: translate(-50%, -50%) rotate(var(--spinner-progress-deg))
123
+ transform: translate(-50%, -50%) rotate(var(--spinner-progress-deg, 0deg))
124
124
  translateY(calc(-1 * var(--spinner-radius)));
125
125
  }
126
126
  }
@@ -111,7 +111,7 @@
111
111
 
112
112
  .divider {
113
113
  width: 1px;
114
- height: var(--menu-navigation-components-tab-item-divider-height);
114
+ height: var(--menu-navigation-components-tab-action-button-divider-height);
115
115
  flex-shrink: 0;
116
116
  color: var(--border-divider-color);
117
117
  fill: var(--border-divider-color);
@@ -124,7 +124,7 @@
124
124
  position: absolute;
125
125
  left: 0;
126
126
  width: 1px;
127
- height: var(--menu-navigation-components-tab-item-divider-height);
127
+ height: var(--menu-navigation-components-tab-action-button-divider-height);
128
128
  background: var(--border-divider-color);
129
129
  }
130
130
 
@@ -10,7 +10,7 @@
10
10
  .grid-container {
11
11
  display: grid;
12
12
  height: 100%;
13
- grid-template-columns: repeat(var(--grid-columns), auto);
13
+ grid-template-columns: repeat(var(--grid-columns, 1), auto);
14
14
  align-content: start;
15
15
  grid-template-rows: min-content min-content 1fr;
16
16
 
@@ -20,7 +20,7 @@
20
20
  --selection-column-width,
21
21
  var(--menu-navigation-components-table-item-touch-target-size)
22
22
  )
23
- repeat(var(--grid-columns-rest), minmax(0, 1fr));
23
+ repeat(var(--grid-columns-rest, 1), minmax(0, 1fr));
24
24
  }
25
25
 
26
26
  .grid-header {
@@ -5,9 +5,7 @@
5
5
  .wrapper {
6
6
  height: var(--ui-components-button-touch-target-size);
7
7
  width: 100%;
8
- min-width: var(
9
- --ui-components-icon-toggle-button-horizontal-item-touch-target-size
10
- );
8
+ min-width: var(--ui-components-toggle-button-touch-target-size);
11
9
  min-height: var(
12
10
  --ui-components-toggle-button-toggle-button-item-touch-target-size
13
11
  );
@@ -7,7 +7,7 @@ import {html} from 'lit';
7
7
 
8
8
  const meta: Meta<typeof ObcIntegrationAppBar> = {
9
9
  title: 'Integration Systems/App Bar',
10
- tags: ['6.0'],
10
+ tags: ['alpha'],
11
11
  component: 'obc-integration-app-bar',
12
12
  args: {},
13
13
  render: () => html`
@@ -0,0 +1,86 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ :host {
6
+ display: block;
7
+ width: 100%;
8
+ }
9
+
10
+ .wrapper {
11
+ display: flex;
12
+ padding: 0 var(--app-components-integration-system-topbar-margin-global);
13
+ justify-content: space-between;
14
+ align-items: center;
15
+ background: var(--integration-container-global-color);
16
+ box-shadow: var(--shadow-flat-x) var(--shadow-flat-y) var(--shadow-flat-blur)
17
+ var(--shadow-flat-spread) var(--shadow-flat-color);
18
+ }
19
+
20
+ .content-container {
21
+ display: flex;
22
+ flex: 1;
23
+ }
24
+
25
+ .fleet-vessel-container {
26
+ display: flex;
27
+ align-items: flex-start;
28
+ flex: 1 1 auto;
29
+ }
30
+
31
+ .fleet-button {
32
+ flex: initial;
33
+ }
34
+
35
+ .vessel-container {
36
+ display: flex;
37
+ flex: 1 1 auto;
38
+ }
39
+
40
+ .integration-buttons-slot::slotted(obc-integration-button) {
41
+ flex: 1;
42
+ }
43
+
44
+ .hug-buttons-slot::slotted(obc-integration-button) {
45
+ flex: 0 1 auto;
46
+ }
47
+
48
+ .home-button,
49
+ .link-button {
50
+ width: var(--app-components-integration-system-icon-button-touch-target);
51
+ height: var(--app-components-integration-system-icon-button-touch-target);
52
+ justify-content: center;
53
+ align-items: center;
54
+ gap: 14px;
55
+ flex: initial;
56
+ }
57
+
58
+ .right-content-container {
59
+ display: flex;
60
+ align-self: stretch;
61
+ align-items: center;
62
+ flex: initial;
63
+ }
64
+
65
+ .right-content-container.buttons-on-bar {
66
+ border-left: var(
67
+ --app-components-integration-system-navigation-item-horizontal-stroke-weight-right,
68
+ 1px
69
+ )
70
+ solid
71
+ var(
72
+ --integration-beta-flat-enabled-border-color,
73
+ var(--integration-border-outline)
74
+ );
75
+ }
76
+
77
+ .right-side-system-menu-container {
78
+ position: absolute;
79
+ position-anchor: --settings-menu-anchor;
80
+ top: anchor(bottom);
81
+ justify-self: anchor-center;
82
+ }
83
+
84
+ .vessel-button-placeholder {
85
+ flex: 1 1 auto;
86
+ }