@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
@@ -0,0 +1,301 @@
1
+ import {LitElement, html, unsafeCSS, nothing} from 'lit';
2
+ import {customElement} from '../../decorator.js';
3
+ import compentStyle from './integration-bar.css?inline';
4
+ import '../integration-tabs/integration-tabs.js';
5
+ import '../integration-button/integration-button.js';
6
+ import {
7
+ IntegrationButtonType,
8
+ IntegrationButtonVariant,
9
+ } from '../integration-button/integration-button.js';
10
+ import '../../components/clock/clock.js';
11
+ import '../../components/icon-button/icon-button.js';
12
+ import '../../icons/icon-palette-day-night-iec.js';
13
+ import '../../icons/icon-user.js';
14
+ import '../../icons/icon-configure.js';
15
+ import '../../icons/icon-notification.js';
16
+ import '../../icons/icon-home.js';
17
+ import '../../icons/icon-ship.js';
18
+ import '../../icons/icon-screen-desk.js';
19
+ import '../../icons/icon-alerts.js';
20
+ import '../../icons/icon-link.js';
21
+ import {property, state} from 'lit/decorators.js';
22
+ import {classMap} from 'lit/directives/class-map.js';
23
+
24
+ /**
25
+ * `<obc-integration-bar>` – A compact top-level integration header for vessel and system navigation controls.
26
+ *
27
+ * Provides a configurable integration bar with home/navigation controls, optional fleet and vessel selection,
28
+ * and optional utility actions such as alerts, notifications, screen, system, dimming, user, and clock.
29
+ *
30
+ * @slot clock - Custom clock content, rendered when `showClock` is true
31
+ * @slot integration-buttons - Regular vessel integration buttons
32
+ * @slot hug-buttons - Compact vessel integration buttons; slotted integration buttons are forced to hug type
33
+ * @slot vessel-integration-menu - Modal that will appear achored below the fleet/vessel button. Typically an obc-integration-vessel-menu
34
+ * @property {IntegrationBarType} type - Integration bar mode for fleet/vessel presentation
35
+ * @property {boolean} hideHomeButton - Hides the home button when true
36
+ * @property {boolean} showClock - Toggles rendering of the clock slot
37
+ * @property {boolean} showLinkButton - Toggles visibility of link button
38
+ * @property {boolean} linkButtonActivated - Activated state of link button
39
+ * @property {boolean} showUserButton - Toggles visibility of user button
40
+ * @property {boolean} userButtonActivated - Activated state of user button
41
+ * @property {boolean} showDimmingButton - Toggles visibility of dimming button
42
+ * @property {boolean} dimmingButtonActivated - Activated state of dimming button
43
+ * @property {boolean} showSystemButton - Toggles visibility of system button
44
+ * @property {boolean} systemButtonActivated - Activated state of system button
45
+ * @property {boolean} showScreenButton - Toggles visibility of screen button
46
+ * @property {boolean} screenButtonActivated - Activated state of screen button
47
+ * @property {boolean} showNotificationButton - Toggles visibility of notification button
48
+ * @property {boolean} notificationButtonActivated - Activated state of notification button
49
+ * @property {boolean} showAlertButton - Toggles visibility of alert button
50
+ * @property {boolean} alertButtonActivated - Activated state of alert button
51
+ * @property {boolean} showFleetButton - Toggles visibility of fleet button
52
+ * @property {boolean} fleetButtonSelected - Selected state of fleet button
53
+ * @property {boolean} fleetButtonActivated - Active state of fleet button while selection is pending
54
+ * @property {string} fleetButtonLabel - Label for the fleet button
55
+ * @property {string} selectedVesselValue - Selected vessel value
56
+ * @property {string} activeVesselValue - Active vessel value while selection is pending
57
+ * @property {{value: string; label: string}[]} vesselSelectorOptions - Available vessel options
58
+ * @fires fleet-button-click - Fired when the fleet button is clicked
59
+ * @fires link-button-clicked - Fired when the link button is clicked
60
+ * @fires alert-button-clicked - Fired when the alert button is clicked
61
+ * @fires notification-button-clicked - Fired when the notification button is clicked
62
+ * @fires screen-button-clicked - Fired when the screen button is clicked
63
+ * @fires system-button-clicked - Fired when the system button is clicked
64
+ * @fires dimming-button-clicked - Fired when the dimming button is clicked
65
+ * @fires user-button-clicked - Fired when the user button is clicked
66
+ */
67
+ @customElement('obc-integration-bar')
68
+ export class ObcIntegrationBar extends LitElement {
69
+ @property({type: Boolean}) hideHomeButton = false;
70
+ @property({type: Boolean}) showClock = false;
71
+ @property({type: Boolean}) showLinkButton = false;
72
+ @property({type: Boolean}) linkButtonActivated = false;
73
+ @property({type: Boolean}) showUserButton = false;
74
+ @property({type: Boolean}) userButtonActivated = false;
75
+ @property({type: Boolean}) showDimmingButton = false;
76
+ @property({type: Boolean}) dimmingButtonActivated = false;
77
+ @property({type: Boolean}) showSystemButton = false;
78
+ @property({type: Boolean}) systemButtonActivated = false;
79
+ @property({type: Boolean}) showScreenButton = false;
80
+ @property({type: Boolean}) screenButtonActivated = false;
81
+ @property({type: Boolean}) showNotificationButton = false;
82
+ @property({type: Boolean}) notificationButtonActivated = false;
83
+ @property({type: Boolean}) showAlertButton = false;
84
+ @property({type: Boolean}) alertButtonActivated = false;
85
+ @property({type: Boolean}) showFleetButton = false;
86
+ @property({type: Boolean}) fleetButtonSelected = false;
87
+ @property({type: Boolean}) fleetButtonActivated = false;
88
+ @property({type: String}) fleetButtonLabel = 'Fleet';
89
+
90
+ @state() private buttonsOnBar = false;
91
+
92
+ private onFleetButtonClick() {
93
+ this.dispatchEvent(new CustomEvent('fleet-button-click'));
94
+ }
95
+
96
+ private onHugButtonsSlotChange(event: Event) {
97
+ const slot = event.currentTarget as HTMLSlotElement;
98
+ const assignedElements = slot.assignedElements({flatten: true});
99
+
100
+ assignedElements.forEach((element) => {
101
+ if (element.tagName === 'OBC-INTEGRATION-BUTTON') {
102
+ const integrationButton = element as unknown as HTMLElement & {
103
+ type: IntegrationButtonType;
104
+ };
105
+ integrationButton.type = IntegrationButtonType.hug;
106
+ }
107
+ });
108
+ this.buttonsOnBar = true;
109
+ }
110
+
111
+ private onButtonsSlotChange() {
112
+ this.buttonsOnBar = true;
113
+ }
114
+
115
+ override render() {
116
+ const isFleetButtonAnchored = this.fleetButtonActivated;
117
+ return html`
118
+ <nav class="wrapper">
119
+ <div class="content-container">
120
+ ${!this.hideHomeButton
121
+ ? html`<obc-icon-button class="home-button" variant="integration">
122
+ <obi-home></obi-home>
123
+ </obc-icon-button>`
124
+ : null}
125
+ ${this.showLinkButton
126
+ ? html`<obc-icon-button
127
+ class=${classMap({
128
+ 'link-button': true,
129
+ activated: this.linkButtonActivated,
130
+ })}
131
+ part="link-button"
132
+ variant="integration"
133
+ @click=${() =>
134
+ this.dispatchEvent(new CustomEvent('link-button-clicked'))}
135
+ ?activated=${this.linkButtonActivated}
136
+ >
137
+ <obi-link></obi-link>
138
+ </obc-icon-button>`
139
+ : null}
140
+ <div class=${classMap({'fleet-vessel-container': true})}>
141
+ ${this.showFleetButton
142
+ ? html`<obc-integration-button
143
+ class="fleet-button"
144
+ .variant=${IntegrationButtonVariant.normal}
145
+ ?selected=${this.fleetButtonSelected}
146
+ ?activated=${this.fleetButtonActivated}
147
+ style=${isFleetButtonAnchored
148
+ ? 'anchor-name: --integration-menu-anchor;'
149
+ : ''}
150
+ @click=${() => this.onFleetButtonClick()}
151
+ >
152
+ <span slot="label">${this.fleetButtonLabel}</span>
153
+ </obc-integration-button>`
154
+ : nothing}
155
+ <div class="vessel-container">
156
+ ${this.buttonsOnBar
157
+ ? nothing
158
+ : html`<div class="vessel-button-placeholder"></div>`}
159
+ <slot
160
+ class="hug-buttons-slot"
161
+ name="hug-buttons"
162
+ @slotchange=${this.onHugButtonsSlotChange}
163
+ ></slot>
164
+ <slot
165
+ class="integration-buttons-slot"
166
+ name="integration-buttons"
167
+ @slotchange=${this.onButtonsSlotChange}
168
+ ></slot>
169
+ </div>
170
+ </div>
171
+ </div>
172
+ <div
173
+ class=${classMap({
174
+ 'buttons-on-bar': this.buttonsOnBar,
175
+ 'right-content-container': true,
176
+ })}
177
+ >
178
+ ${this.showAlertButton
179
+ ? html`<obc-icon-button
180
+ class=${classMap({
181
+ 'alert-button': true,
182
+ activated: this.alertButtonActivated,
183
+ })}
184
+ part="alert-button"
185
+ variant="integration"
186
+ style=${this.alertButtonActivated
187
+ ? 'anchor-name: --settings-menu-anchor;'
188
+ : ''}
189
+ @click=${() =>
190
+ this.dispatchEvent(new CustomEvent('alert-button-clicked'))}
191
+ ?activated=${this.alertButtonActivated}
192
+ >
193
+ <obi-alerts></obi-alerts>
194
+ </obc-icon-button>`
195
+ : null}
196
+ ${this.showNotificationButton
197
+ ? html`<obc-icon-button
198
+ class=${classMap({
199
+ 'notification-button': true,
200
+ activated: this.notificationButtonActivated,
201
+ })}
202
+ part="notification-button"
203
+ variant="integration"
204
+ style=${this.notificationButtonActivated
205
+ ? 'anchor-name: --settings-menu-anchor;'
206
+ : ''}
207
+ @click=${() =>
208
+ this.dispatchEvent(
209
+ new CustomEvent('notification-button-clicked')
210
+ )}
211
+ ?activated=${this.notificationButtonActivated}
212
+ >
213
+ <obi-notification></obi-notification>
214
+ </obc-icon-button>`
215
+ : null}
216
+ ${this.showScreenButton
217
+ ? html`<obc-icon-button
218
+ class=${classMap({
219
+ 'screen-button': true,
220
+ activated: this.screenButtonActivated,
221
+ })}
222
+ part="screen-button"
223
+ variant="integration"
224
+ style=${this.screenButtonActivated
225
+ ? 'anchor-name: --settings-menu-anchor;'
226
+ : ''}
227
+ @click=${() =>
228
+ this.dispatchEvent(new CustomEvent('screen-button-clicked'))}
229
+ ?activated=${this.screenButtonActivated}
230
+ >
231
+ <obi-screen-desk></obi-screen-desk>
232
+ </obc-icon-button>`
233
+ : null}
234
+ ${this.showSystemButton
235
+ ? html`<obc-icon-button
236
+ class=${classMap({
237
+ 'system-button': true,
238
+ activated: this.systemButtonActivated,
239
+ })}
240
+ part="system-button"
241
+ variant="integration"
242
+ style=${this.systemButtonActivated
243
+ ? 'anchor-name: --settings-menu-anchor;'
244
+ : ''}
245
+ @click=${() =>
246
+ this.dispatchEvent(new CustomEvent('system-button-clicked'))}
247
+ ?activated=${this.systemButtonActivated}
248
+ >
249
+ <obi-configure></obi-configure>
250
+ </obc-icon-button>`
251
+ : null}
252
+ ${this.showDimmingButton
253
+ ? html`<obc-icon-button
254
+ class=${classMap({
255
+ 'dimming-button': true,
256
+ activated: this.dimmingButtonActivated,
257
+ })}
258
+ part="dimming-button"
259
+ variant="integration"
260
+ style=${this.dimmingButtonActivated
261
+ ? 'anchor-name: --settings-menu-anchor;'
262
+ : ''}
263
+ @click=${() =>
264
+ this.dispatchEvent(new CustomEvent('dimming-button-clicked'))}
265
+ ?activated=${this.dimmingButtonActivated}
266
+ >
267
+ <obi-palette-day-night-iec></obi-palette-day-night-iec>
268
+ </obc-icon-button>`
269
+ : null}
270
+ ${this.showUserButton
271
+ ? html`<obc-icon-button
272
+ class=${classMap({
273
+ 'user-button': true,
274
+ activated: this.userButtonActivated,
275
+ })}
276
+ part="user-button"
277
+ variant="integration"
278
+ style=${this.userButtonActivated
279
+ ? 'anchor-name: --settings-menu-anchor;'
280
+ : ''}
281
+ @click=${() =>
282
+ this.dispatchEvent(new CustomEvent('user-button-clicked'))}
283
+ ?activated=${this.userButtonActivated}
284
+ >
285
+ <obi-user></obi-user>
286
+ </obc-icon-button>`
287
+ : null}
288
+ ${this.showClock ? html`<slot name="clock"></slot>` : null}
289
+ </div>
290
+ </nav>
291
+ `;
292
+ }
293
+
294
+ static override styles = unsafeCSS(compentStyle);
295
+ }
296
+
297
+ declare global {
298
+ interface HTMLElementTagNameMap {
299
+ 'obc-integration-bar': ObcIntegrationBar;
300
+ }
301
+ }
@@ -5,11 +5,12 @@ import {html} from 'lit';
5
5
  import '../integration-dropdown-button/integration-dropdown-button.js';
6
6
  import '../../components/clock/clock.js';
7
7
  import '../../icons/icon-placeholder.js';
8
+ import {IntegrationButtonType} from '../integration-button/integration-button.js';
8
9
 
9
10
  const meta: Meta<typeof ObcIntegrationBarDropdown> = {
10
- title: 'Integration Systems/Integration Bar',
11
- tags: ['6.0', 'WIP'],
12
- component: 'obc-integration-bar',
11
+ title: 'Integration Systems/Integration Bar Dropdown',
12
+ tags: ['alpha'],
13
+ component: 'obc-integration-bar-dropdown',
13
14
  args: {
14
15
  showClock: true,
15
16
  date: '2021-01-01T11:11:11.111Z',
@@ -63,6 +64,7 @@ const meta: Meta<typeof ObcIntegrationBarDropdown> = {
63
64
  <obc-integration-button
64
65
  slot="fleet"
65
66
  .readouts=${[{label: 'Label', value: 'Value', unit: 'Unit'}]}
67
+ type=${IntegrationButtonType.rich}
66
68
  >
67
69
  <div slot="label">Fleet name</div>
68
70
  <div slot="info-label">Label</div>
@@ -3,18 +3,47 @@
3
3
  }
4
4
 
5
5
  :host {
6
- width: 100%;
7
- display: block;
6
+ display: flex;
7
+ flex: 1;
8
8
  }
9
9
 
10
- .wrapper {
10
+ .button-horizontal-divider-container {
11
11
  display: flex;
12
12
  flex-direction: column;
13
- padding: 0;
14
- margin: 0;
13
+ align-items: stretch;
14
+ flex: 1;
15
+ }
16
+
17
+ .button-vertical-divider-container {
18
+ display: flex;
19
+ align-items: center;
20
+ flex: 1;
21
+ }
22
+
23
+ .button-vertical-divider-container:has(.touch-target.type-hug) {
24
+ flex: 0 1 0;
25
+ }
26
+
27
+ .touch-target {
28
+ @mixin style style=integration-normal visibleWrapperClass=.content-container;
29
+ @mixin font-body;
30
+ anchor-name: --touch-target;
31
+ display: flex;
32
+ align-items: center;
33
+ gap: 4px;
34
+ flex: 1;
35
+ min-height: var(
36
+ --app-components-integration-system-navigation-item-horizontal-touch-target
37
+ );
38
+
39
+ padding: 4px
40
+ var(
41
+ --app-components-integration-system-navigation-item-horizontal-margin-horizontal
42
+ );
15
43
  border: none;
16
- background: none;
44
+ background: transparent;
17
45
  appearance: none;
46
+ color: var(--integration-on-normal-active-color);
18
47
  width: 100%;
19
48
  border-radius: var(
20
49
  --app-components-integration-system-navigation-item-horizontal-border-radius-top-left
@@ -29,61 +58,83 @@
29
58
  --app-components-integration-system-navigation-item-horizontal-border-radius-bottom-left
30
59
  );
31
60
 
32
- @mixin style style=integration-normal;
33
-
34
- &.selected {
35
- margin-bottom: 2px;
36
- margin-top: 2px;
37
- @mixin style style=integration-selected;
38
-
39
- .icon {
40
- color: var(--integration-on-selected-active-color);
41
- }
42
-
43
- .label {
44
- color: var(--integration-on-selected-active-color) !important;
45
- }
46
-
47
- .status {
48
- color: var(--integration-on-selected-neutral-color) !important;
49
- }
50
-
51
- .info-item {
52
- .info-label {
53
- color: var(--integration-on-selected-neutral-color) !important;
54
- }
55
-
56
- .info-status {
57
- color: var(--integration-on-selected-active-color) !important;
58
- }
59
- }
61
+ .content-container {
62
+ display: flex;
63
+ flex: 1 0 0;
64
+ align-items: center;
65
+ min-width: 0;
66
+ min-height: var(
67
+ --app-components-integration-system-navigation-item-horizontal-visual-target
68
+ );
69
+ padding: 4px
70
+ var(
71
+ --app-components-integration-system-navigation-item-horizontal-padding-horizontal
72
+ );
73
+ gap: var(
74
+ --app-components-integration-system-navigation-item-horizontal-label-spacing
75
+ );
60
76
 
61
- .info-readout-item {
62
- .info-item-label {
63
- color: var(--integration-on-selected-neutral-color);
64
- }
77
+ border-radius: var(
78
+ --app-components-integration-system-navigation-item-horizontal-border-radius-top-left
79
+ )
80
+ var(
81
+ --app-components-integration-system-navigation-item-horizontal-border-radius-top-right
82
+ )
83
+ var(
84
+ --app-components-integration-system-navigation-item-horizontal-border-radius-bottom-right
85
+ )
86
+ var(
87
+ --app-components-integration-system-navigation-item-horizontal-border-radius-bottom-left
88
+ );
89
+ border-top: var(
90
+ --app-components-integration-system-navigation-item-horizontal-stroke-weight-top
91
+ )
92
+ solid var(--integration-normal-enabled-border-color);
93
+ border-right: var(
94
+ --app-components-integration-system-navigation-item-horizontal-stroke-weight-right
95
+ )
96
+ solid var(--integration-normal-enabled-border-color);
97
+ border-bottom: var(
98
+ --app-components-integration-system-navigation-item-horizontal-stroke-weight-bottom
99
+ )
100
+ solid var(--integration-normal-enabled-border-color);
101
+ border-left: var(
102
+ --app-components-integration-system-navigation-item-horizontal-stroke-weight-left
103
+ )
104
+ solid var(--integration-normal-enabled-border-color);
105
+ background: var(--integration-normal-enabled-background-color);
106
+ }
65
107
 
66
- .info-item-value {
67
- color: var(--integration-on-selected-active-color);
68
- }
108
+ &.type-hug .content-container {
109
+ flex: 0 1 auto;
110
+ }
69
111
 
70
- .info-item-unit {
71
- color: var(--integration-on-selected-neutral-color);
72
- }
73
- }
112
+ &.type-rich .content-container {
113
+ flex-direction: column;
114
+ align-items: flex-start;
115
+ align-self: stretch;
116
+ padding: 0;
74
117
  }
75
118
 
76
119
  .main-container {
77
120
  display: flex;
78
- flex-direction: row;
79
- align-items: center;
80
- width: 100%;
81
121
  padding: var(
82
122
  --app-components-integration-system-navigation-item-horizontal-padding-vertical
83
123
  )
84
124
  var(
85
125
  --app-components-integration-system-navigation-item-horizontal-padding-horizontal
126
+ )
127
+ var(
128
+ --app-components-integration-system-navigation-item-horizontal-padding-vertical
129
+ )
130
+ var(
131
+ --app-components-integration-system-navigation-item-horizontal-padding-horizontal-large
86
132
  );
133
+ align-items: center;
134
+ gap: var(
135
+ --app-components-integration-system-navigation-item-horizontal-label-spacing
136
+ );
137
+ align-self: stretch;
87
138
  }
88
139
 
89
140
  .icon-container {
@@ -105,16 +156,12 @@
105
156
 
106
157
  .label {
107
158
  @mixin font-button;
108
- color: var(--integration-on-normal-active-color);
159
+ white-space: nowrap;
160
+ height: 24px;
109
161
  }
110
162
 
111
163
  .status {
112
164
  @mixin font-label;
113
- color: var(--integration-on-normal-neutral-color);
114
- }
115
-
116
- &:first-child {
117
- padding-left: 0;
118
165
  }
119
166
  }
120
167
 
@@ -124,11 +171,18 @@
124
171
 
125
172
  .icon.leading {
126
173
  width: var(
127
- --app-components-integration-system-navigation-item-horizontal-icon-size-large
174
+ --app-components-integration-system-navigation-item-horizontal-icon-size
128
175
  );
129
176
  height: var(
130
- --app-components-integration-system-navigation-item-horizontal-icon-size-large
177
+ --app-components-integration-system-navigation-item-horizontal-icon-size
178
+ );
179
+ min-width: var(
180
+ --app-components-integration-system-navigation-item-horizontal-icon-size
131
181
  );
182
+ flex: 0 0
183
+ var(
184
+ --app-components-integration-system-navigation-item-horizontal-icon-size
185
+ );
132
186
  }
133
187
 
134
188
  .icon.trailing {
@@ -140,20 +194,20 @@
140
194
  display: flex;
141
195
  padding: 0
142
196
  var(
143
- --app-components-integration-system-navigation-item-horizontal-padding-horizontal
197
+ --app-components-integration-system-navigation-item-horizontal-padding-horizontal-large
144
198
  )
145
199
  var(
146
200
  --app-components-integration-system-navigation-item-horizontal-padding-vertical
147
201
  )
148
202
  var(
149
- --app-components-integration-system-navigation-item-horizontal-padding-horizontal
203
+ --app-components-integration-system-navigation-item-horizontal-padding-horizontal-large
150
204
  );
151
205
  align-items: center;
152
- justify-content: flex-start;
153
206
  gap: var(
154
207
  --app-components-integration-system-navigation-item-horizontal-label-spacing
155
208
  );
156
209
  align-self: stretch;
210
+ font-weight: var(--font-weight-regular);
157
211
 
158
212
  .info-item {
159
213
  display: flex;
@@ -164,12 +218,11 @@
164
218
 
165
219
  .info-label {
166
220
  @mixin font-label;
167
- color: var(--integration-on-normal-neutral-color);
168
221
  }
169
222
 
170
223
  .info-status {
171
224
  @mixin font-label-active;
172
- color: var(--integration-on-normal-active-color);
225
+ font-weight: var(--global-typography-ui-label-active-font-weight);
173
226
  }
174
227
  }
175
228
  }
@@ -188,21 +241,63 @@
188
241
  justify-self: flex-start;
189
242
  grid-area: label;
190
243
  @mixin font-label;
191
- color: var(--integration-on-normal-neutral-color);
192
244
  }
193
245
 
194
246
  .info-item-value {
195
247
  grid-area: value;
196
248
  @mixin font-label-active;
197
- color: var(--integration-on-normal-active-color);
249
+ font-weight: var(--global-typography-ui-label-active-font-weight);
198
250
  }
199
251
 
200
252
  .info-item-unit {
201
253
  grid-area: unit;
202
254
  @mixin font-label;
203
- color: var(--integration-on-normal-neutral-color);
204
255
  }
205
256
  }
257
+
258
+ &.variant-normal {
259
+ @mixin style style=integration-normal visibleWrapperClass=.content-container;
260
+
261
+ &:disabled {
262
+ color: var(--integration-on-normal-disabled-color);
263
+ }
264
+
265
+ &:disabled .icon {
266
+ color: var(--integration-on-normal-disabled-color);
267
+ }
268
+ }
269
+
270
+ &.variant-flat {
271
+ @mixin style style=integration-flat visibleWrapperClass=.content-container;
272
+
273
+ &:disabled {
274
+ color: var(--integration-on-flat-disabled-color);
275
+ }
276
+
277
+ &:disabled .icon {
278
+ color: var(--integration-on-flat-disabled-color);
279
+ }
280
+ }
281
+
282
+ &.selected {
283
+ @mixin style style=integration-selected
284
+ visibleWrapperClass=.content-container;
285
+ color: var(--integration-on-selected-active-color);
286
+ .icon {
287
+ color: var(--integration-on-selected-neutral-color);
288
+ }
289
+ }
290
+ }
291
+ .type-hug.touch-target {
292
+ flex: 0 0 auto;
293
+ }
294
+
295
+ .type-rich.touch-target {
296
+ align-items: flex-start;
297
+ padding: 0
298
+ var(
299
+ --app-components-integration-system-navigation-item-horizontal-margin-horizontal
300
+ );
206
301
  }
207
302
 
208
303
  .divider-bottom {
@@ -215,3 +310,47 @@
215
310
  height: 1px;
216
311
  background: var(--integration-border-outline);
217
312
  }
313
+
314
+ .divider-right {
315
+ width: 1px;
316
+ height: calc(100% - 16px);
317
+ background-color: var(--integration-border-divider);
318
+ }
319
+
320
+ .integration-vessel-menu-container {
321
+ visibility: hidden;
322
+ position: absolute;
323
+ position-anchor: --touch-target;
324
+ top: anchor(bottom);
325
+ }
326
+
327
+ .integration-vessel-menu-container.show {
328
+ visibility: visible;
329
+ }
330
+
331
+ .touch-target:not(.selected):not(.disabled) {
332
+ & .info-item-label {
333
+ color: var(--integration-on-flat-neutral-color);
334
+ }
335
+ & .info-item-value {
336
+ color: var(--integration-on-flat-active-color);
337
+ }
338
+ & .info-item-unit {
339
+ color: var(--integration-on-flat-neutral-color);
340
+ }
341
+ & .info-status {
342
+ color: var(--integration-on-flat-active-color);
343
+ }
344
+ & .info-label {
345
+ color: var(--integration-on-flat-neutral-color);
346
+ }
347
+ & .label {
348
+ color: var(--integration-on-normal-active-color);
349
+ }
350
+ & .icon {
351
+ color: var(--integration-on-normal-neutral-color);
352
+ }
353
+ & .status {
354
+ color: var(--integration-on-flat-neutral-color);
355
+ }
356
+ }