@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,180 @@
1
+ import type {Meta, StoryObj} from '@storybook/web-components-vite';
2
+ import {html} from 'lit';
3
+ import type {ObcIntegrationVesselMenu} from './integration-vessel-menu.js';
4
+ import './integration-vessel-menu.js';
5
+ import '../../icons/icon-placeholder.js';
6
+ import {ObcAlertMenuItemStatus} from '../../components/alert-menu-item/alert-menu-item.js';
7
+ import '../../components/alert-menu-item/alert-menu-item.js';
8
+ import '../../icons/icon-caution-color-iec.js';
9
+
10
+ const handleAck = (event: Event) => {
11
+ const alertItem = event.currentTarget as HTMLElement;
12
+ const alertParent = alertItem.parentElement;
13
+ if (alertParent) {
14
+ alertParent.removeChild(alertItem);
15
+ }
16
+ };
17
+
18
+ const renderAlarms = () => html`
19
+ <obc-alert-menu-item
20
+ slot="alarms"
21
+ .status=${ObcAlertMenuItemStatus.Unacknowledged}
22
+ title="CPA/TCPA Alert"
23
+ description="Risk of collision with vessel MV NORDIC at CPA 0.2nm"
24
+ time="09:12:34"
25
+ @ack-click=${handleAck}
26
+ data-testid="engine-temperature-high-1"
27
+ >
28
+ <obc-alert-icon slot="alert-icon" type="alarm" active></obc-alert-icon>
29
+ </obc-alert-menu-item>
30
+ <obc-alert-menu-item
31
+ slot="alarms"
32
+ .status=${ObcAlertMenuItemStatus.NoAckAlarm}
33
+ title="Off Track Deviation"
34
+ description="Vessel has deviated from planned route by 0.5nm"
35
+ time="09:13:22"
36
+ >
37
+ <obc-alert-icon slot="alert-icon" type="alarm" active></obc-alert-icon>
38
+ </obc-alert-menu-item>
39
+ <obc-alert-menu-item
40
+ slot="alarms"
41
+ .status=${ObcAlertMenuItemStatus.Unacknowledged}
42
+ title="Main Engine Overload"
43
+ description="Port main engine load exceeds 95% of MCR"
44
+ time="09:14:05"
45
+ data-testid="engine-temperature-high-2"
46
+ @ack-click=${handleAck}
47
+ >
48
+ <obc-alert-icon slot="alert-icon" type="alarm" active></obc-alert-icon>
49
+ </obc-alert-menu-item>
50
+
51
+ <obc-alert-menu-item
52
+ slot="alarms"
53
+ .status=${ObcAlertMenuItemStatus.NoAckWarning}
54
+ title="Depth Below Keel"
55
+ description="Under keel clearance below safety margin: 2.5m"
56
+ time="09:15:10"
57
+ >
58
+ <obc-alert-icon slot="alert-icon" type="warning" active></obc-alert-icon>
59
+ </obc-alert-menu-item>
60
+ <obc-alert-menu-item
61
+ slot="alarms"
62
+ .status=${ObcAlertMenuItemStatus.NoAckWarning}
63
+ title="Wind Speed High"
64
+ description="True wind speed 35kts exceeds operational limit"
65
+ time="09:16:00"
66
+ >
67
+ <obc-alert-icon slot="alert-icon" type="warning" active></obc-alert-icon>
68
+ </obc-alert-menu-item>
69
+ <obc-alert-menu-item
70
+ slot="alarms"
71
+ .status=${ObcAlertMenuItemStatus.NoAckWarning}
72
+ title="ECDIS Primary GPS Lost"
73
+ description="Position source switched to secondary GPS"
74
+ time="09:16:45"
75
+ >
76
+ <obc-alert-icon slot="alert-icon" type="warning" active></obc-alert-icon>
77
+ </obc-alert-menu-item>
78
+
79
+ <obc-alert-menu-item
80
+ slot="alarms"
81
+ .status=${ObcAlertMenuItemStatus.Caution}
82
+ title="Fuel Oil Temperature"
83
+ description="HFO temperature approaching lower limit: 115°C"
84
+ time="09:17:20"
85
+ >
86
+ <obi-caution-color-iec
87
+ useCssColor
88
+ slot="alert-icon"
89
+ ></obi-caution-color-iec>
90
+ </obc-alert-menu-item>
91
+ <obc-alert-menu-item
92
+ slot="alarms"
93
+ .status=${ObcAlertMenuItemStatus.Caution}
94
+ title="Ballast Tank Level"
95
+ description="No. 3 Port ballast tank level below recommended trim: 45%"
96
+ time="09:17:45"
97
+ >
98
+ <obi-caution-color-iec
99
+ useCssColor
100
+ slot="alert-icon"
101
+ ></obi-caution-color-iec>
102
+ </obc-alert-menu-item>
103
+ `;
104
+
105
+ const meta: Meta<ObcIntegrationVesselMenu> = {
106
+ title: 'Integration Systems/Integration Vessel Menu',
107
+ component: 'obc-integration-vessel-menu',
108
+ tags: ['alpha'],
109
+ args: {numberOfButtons: 3},
110
+ argTypes: {
111
+ numberOfButtons: {
112
+ control: 'number',
113
+ min: 0,
114
+ max: 3,
115
+ step: 1,
116
+ },
117
+ },
118
+ parameters: {
119
+ layout: 'centered',
120
+ },
121
+ decorators: [
122
+ (story) => html`
123
+ <div style="height: 400px; display: flex;">${story()}</div>
124
+ `,
125
+ ],
126
+ };
127
+
128
+ export default meta;
129
+ type Story = StoryObj<ObcIntegrationVesselMenu>;
130
+
131
+ interface IntegrationVesselMenuArgs {
132
+ numberOfButtons: number;
133
+ }
134
+
135
+ type IntegrationVesselMenuTemplate = (
136
+ args: IntegrationVesselMenuArgs
137
+ ) => ReturnType<typeof html>;
138
+
139
+ const template: IntegrationVesselMenuTemplate = (args) => html`
140
+ <obc-integration-vessel-menu
141
+ .numberOfButtons=${args.numberOfButtons}
142
+ @button-1-click=${() => console.log('Button 1 clicked')}
143
+ @button-2-click=${() => console.log('Button 2 clicked')}
144
+ @button-3-click=${() => console.log('Button 3 clicked')}
145
+ >
146
+ <div slot="content" style="padding: 24px;">
147
+ <div style="width: 496px; height: 256;">
148
+ <p>Content area</p>
149
+ </div>
150
+ </div>
151
+ <obi-placeholder slot="button-1-leading-icon"></obi-placeholder>
152
+ <div slot="button-1-label">Action 1</div>
153
+ <obi-placeholder slot="button-2-leading-icon"></obi-placeholder>
154
+ <div slot="button-2-label">Ac. 2</div>
155
+ <obi-placeholder slot="button-3-leading-icon"></obi-placeholder>
156
+ <div slot="button-3-label">Action number 3</div>
157
+ ${renderAlarms()}
158
+ </obc-integration-vessel-menu>
159
+ `;
160
+
161
+ const templateWithoutAlarms: IntegrationVesselMenuTemplate = (args) => html`
162
+ <obc-integration-vessel-menu
163
+ .numberOfButtons=${args.numberOfButtons}
164
+ @button-1-click=${() => console.log('Button 1 clicked')}
165
+ @button-2-click=${() => console.log('Button 2 clicked')}
166
+ @button-3-click=${() => console.log('Button 3 clicked')}
167
+ >
168
+ <div slot="content" style="padding: 24px;">
169
+ <p>Add content here</p>
170
+ </div>
171
+ </obc-integration-vessel-menu>
172
+ `;
173
+
174
+ export const Default: Story = {
175
+ render: template,
176
+ };
177
+
178
+ export const WithoutAlarms: Story = {
179
+ render: templateWithoutAlarms,
180
+ };
@@ -0,0 +1,83 @@
1
+ import {LitElement, html, unsafeCSS} from 'lit';
2
+ import {property} from 'lit/decorators.js';
3
+ import {classMap} from 'lit/directives/class-map.js';
4
+ import {customElement} from '../../decorator.js';
5
+ import componentStyle from './integration-vessel-menu.css?inline';
6
+
7
+ import '../../components/button/button.js';
8
+ import '../../components/icon-button/icon-button.js';
9
+ import '../../icons/icon-placeholder.js';
10
+ import '../../building-blocks/alert-list/alert-list.js';
11
+
12
+ /**
13
+ * `<obc-integration-vessel-menu>` – A menu to be shown when selecting a obc-integration-button from a obc-integration-bar.
14
+ *
15
+ * @slot leading-icon - Icon shown in the header.
16
+ * @slot title - Header title text.
17
+ * @slot button-1-leading-icon - Leading icon for the first button.
18
+ * @slot button-1-label - Label for the first button.
19
+ * @slot button-2-leading-icon - Leading icon for the second button.
20
+ * @slot button-2-label - Label for the second button.
21
+ * @slot button-3-leading-icon - Leading icon for the third button.
22
+ * @slot button-3-label - Label for the third button.
23
+ * @slot content - Main content shown in the content area.
24
+ * @slot alarms - Alarm items rendered inside the alert list.
25
+ *
26
+ * @property {number} numberOfButtons - Number of buttons to render (up to 3).
27
+ *
28
+ * @fires button1-click - Fired when the first button is clicked.
29
+ * @fires button2-click - Fired when the second button is clicked.
30
+ * @fires button3-click - Fired when the third button is clicked.
31
+ */
32
+
33
+ @customElement('obc-integration-vessel-menu')
34
+ export class ObcIntegrationVesselMenu extends LitElement {
35
+ @property({type: Number}) numberOfButtons = 3;
36
+
37
+ private renderButtons() {
38
+ return html`${Array.from({length: this.numberOfButtons}, (_, i) => {
39
+ const buttonNum = i + 1;
40
+ return html`<obc-button
41
+ @click=${() =>
42
+ this.dispatchEvent(new CustomEvent(`button${buttonNum}-click`))}
43
+ ?showLeadingIcon=${true}
44
+ ?fullWidth=${true}
45
+ class="button"
46
+ >
47
+ <slot
48
+ name="button-${buttonNum}-leading-icon"
49
+ slot="leading-icon"
50
+ ></slot>
51
+ <slot name="button-${buttonNum}-label"></slot>
52
+ </obc-button>`;
53
+ })}`;
54
+ }
55
+
56
+ protected override render() {
57
+ return html`
58
+ <div
59
+ class=${classMap({
60
+ wrapper: true,
61
+ })}
62
+ >
63
+ <div class="footer-container">${this.renderButtons()}</div>
64
+ <div class="content-area">
65
+ <slot name="content"></slot>
66
+ </div>
67
+ <div class="content-container">
68
+ <obc-alert-list class="alert-list"
69
+ ><slot name="alarms"> </slot>
70
+ </obc-alert-list>
71
+ </div>
72
+ </div>
73
+ `;
74
+ }
75
+
76
+ static override styles = unsafeCSS(componentStyle);
77
+ }
78
+
79
+ declare global {
80
+ interface HTMLElementTagNameMap {
81
+ 'obc-integration-vessel-menu': ObcIntegrationVesselMenu;
82
+ }
83
+ }
@@ -10,14 +10,26 @@
10
10
  background: var(--integration-container-global-color);
11
11
  height: 100%;
12
12
  width: 100%;
13
+ }
14
+
15
+ .wrapper .fleet-wrapper,
16
+ .wrapper .vessel-wrapper {
17
+ width: 100%;
18
+ display: flex;
19
+ flex-direction: column;
20
+ align-items: stretch;
21
+ justify-content: stretch;
22
+ }
13
23
 
14
- .fleet-wrapper,
15
- .vessel-wrapper {
16
- width: 100%;
17
- display: flex;
18
- flex-direction: column;
19
- align-items: flex-start;
20
- justify-content: stretch;
21
- padding: 4px;
22
- }
24
+ .wrapper .fleet-wrapper {
25
+ padding: 4px 0;
26
+ }
27
+
28
+ .wrapper .vessel-wrapper {
29
+ padding: 0px 4px;
30
+ }
31
+
32
+ .wrapper .topbar-wrapper {
33
+ display: flex;
34
+ width: 100%;
23
35
  }
@@ -1,13 +1,18 @@
1
1
  import type {Meta, StoryObj} from '@storybook/web-components-vite';
2
2
  import {ObcIntegrationVesselSelector} from './integration-vessel-selector.js';
3
3
  import './integration-vessel-selector.js';
4
+ import '../integration-bar/integration-bar.js';
4
5
  import '../integration-button/integration-button.js';
5
6
  import '../../icons/icon-placeholder.js';
6
7
  import {html} from 'lit';
8
+ import {
9
+ IntegrationButtonType,
10
+ IntegrationButtonVariant,
11
+ } from '../integration-button/integration-button.js';
7
12
 
8
13
  const meta: Meta<typeof ObcIntegrationVesselSelector> = {
9
14
  title: 'Integration Systems/Integration Vessel Selector',
10
- tags: ['6.0'],
15
+ tags: ['alpha'],
11
16
  component: 'obc-integration-vessel-selector',
12
17
  args: {},
13
18
  parameters: {
@@ -22,14 +27,49 @@ export const Primary: Story = {
22
27
  render: () => html`
23
28
  <obc-integration-vessel-selector
24
29
  style="width: 320px; display: block; height: 100vh;"
30
+ hasFleet
25
31
  >
26
32
  <obc-integration-button
33
+ slot="fleet"
27
34
  hasLeadingIcon
28
35
  hasTrailingIcon
29
36
  .readouts=${[
30
37
  {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
31
38
  {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
32
39
  ]}
40
+ type=${IntegrationButtonType.rich}
41
+ >
42
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
43
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
44
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
45
+ <div slot="label">Fleet</div>
46
+ <div slot="status">Status</div>
47
+ <div slot="info-label">Info Label</div>
48
+ <div slot="info-status">Info Status</div>
49
+ </obc-integration-button>
50
+ <obc-integration-button
51
+ hasLeadingIcon
52
+ .readouts=${[
53
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
54
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
55
+ ]}
56
+ variant=${IntegrationButtonVariant.flat}
57
+ >
58
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
59
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
60
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
61
+ <div slot="label">Label</div>
62
+ <div slot="status">Status</div>
63
+ <div slot="info-label">Info Label</div>
64
+ <div slot="info-status">Info Status</div>
65
+ </obc-integration-button>
66
+ <obc-integration-button
67
+ hasLeadingIcon
68
+ .readouts=${[
69
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
70
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
71
+ ]}
72
+ variant=${IntegrationButtonVariant.flat}
33
73
  >
34
74
  <obi-placeholder slot="leading-icon"></obi-placeholder>
35
75
  <obi-placeholder slot="trailing-icon"></obi-placeholder>
@@ -41,12 +81,11 @@ export const Primary: Story = {
41
81
  </obc-integration-button>
42
82
  <obc-integration-button
43
83
  hasLeadingIcon
44
- hasTrailingIcon
45
84
  .readouts=${[
46
85
  {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
47
86
  {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
48
87
  ]}
49
- selected
88
+ variant=${IntegrationButtonVariant.flat}
50
89
  >
51
90
  <obi-placeholder slot="leading-icon"></obi-placeholder>
52
91
  <obi-placeholder slot="trailing-icon"></obi-placeholder>
@@ -56,14 +95,78 @@ export const Primary: Story = {
56
95
  <div slot="info-label">Info Label</div>
57
96
  <div slot="info-status">Info Status</div>
58
97
  </obc-integration-button>
98
+ </obc-integration-vessel-selector>
99
+ `,
100
+ };
101
+
102
+ export const Rich: Story = {
103
+ render: () => html`
104
+ <obc-integration-vessel-selector
105
+ style="width: 320px; display: block; height: 100vh;"
106
+ hasFleet
107
+ >
59
108
  <obc-integration-button
109
+ slot="fleet"
60
110
  hasLeadingIcon
61
111
  hasTrailingIcon
112
+ .readouts=${[
113
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
114
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
115
+ ]}
116
+ type=${IntegrationButtonType.rich}
117
+ >
118
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
119
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
120
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
121
+ <div slot="label">Fleet</div>
122
+ <div slot="status">Status</div>
123
+ <div slot="info-label">Info Label</div>
124
+ <div slot="info-status">Info Status</div>
125
+ </obc-integration-button>
126
+ <obc-integration-button
127
+ hasLeadingIcon
128
+ .readouts=${[
129
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
130
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
131
+ ]}
132
+ variant=${IntegrationButtonVariant.flat}
133
+ type=${IntegrationButtonType.rich}
134
+ dividerBottom
135
+ >
136
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
137
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
138
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
139
+ <div slot="label">Label</div>
140
+ <div slot="status">Status</div>
141
+ <div slot="info-label">Info Label</div>
142
+ <div slot="info-status">Info Status</div>
143
+ </obc-integration-button>
144
+ <obc-integration-button
145
+ hasLeadingIcon
146
+ .readouts=${[
147
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
148
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
149
+ ]}
150
+ variant=${IntegrationButtonVariant.flat}
151
+ type=${IntegrationButtonType.rich}
62
152
  dividerBottom
153
+ >
154
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
155
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
156
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
157
+ <div slot="label">Label</div>
158
+ <div slot="status">Status</div>
159
+ <div slot="info-label">Info Label</div>
160
+ <div slot="info-status">Info Status</div>
161
+ </obc-integration-button>
162
+ <obc-integration-button
163
+ hasLeadingIcon
63
164
  .readouts=${[
64
165
  {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
65
166
  {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
66
167
  ]}
168
+ variant=${IntegrationButtonVariant.flat}
169
+ type=${IntegrationButtonType.rich}
67
170
  >
68
171
  <obi-placeholder slot="leading-icon"></obi-placeholder>
69
172
  <obi-placeholder slot="trailing-icon"></obi-placeholder>
@@ -73,13 +176,94 @@ export const Primary: Story = {
73
176
  <div slot="info-label">Info Label</div>
74
177
  <div slot="info-status">Info Status</div>
75
178
  </obc-integration-button>
179
+ </obc-integration-vessel-selector>
180
+ `,
181
+ };
182
+
183
+ export const WithTopbar: Story = {
184
+ render: () => html`
185
+ <obc-integration-vessel-selector
186
+ style="width: 320px; display: block; height: 100vh;"
187
+ hasFleet
188
+ hasTopbar=${true}
189
+ >
190
+ <obc-integration-bar
191
+ slot="topbar"
192
+ .showClock=${true}
193
+ .showUserButton=${true}
194
+ .showDimmingButton=${true}
195
+ .showSystemButton=${false}
196
+ .showAlertButton=${true}
197
+ .showScreenButton=${false}
198
+ .showNotificationButton=${false}
199
+ >
200
+ <obc-clock
201
+ integrationBarMode
202
+ .date=${'2021-01-01T11:11:11.111Z'}
203
+ .showDate=${false}
204
+ slot="clock"
205
+ .showTimezone=${false}
206
+ .timeZoneOffsetHours=${1}
207
+ .blinkOnlyBreakpointPx=${600}
208
+ ></obc-clock>
209
+ </obc-integration-bar>
76
210
  <obc-integration-button
211
+ slot="fleet"
77
212
  hasLeadingIcon
78
213
  hasTrailingIcon
79
214
  .readouts=${[
80
215
  {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
81
216
  {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
82
217
  ]}
218
+ type=${IntegrationButtonType.rich}
219
+ >
220
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
221
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
222
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
223
+ <div slot="label">Fleet</div>
224
+ <div slot="status">Status</div>
225
+ <div slot="info-label">Info Label</div>
226
+ <div slot="info-status">Info Status</div>
227
+ </obc-integration-button>
228
+ <obc-integration-button
229
+ hasLeadingIcon
230
+ .readouts=${[
231
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
232
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
233
+ ]}
234
+ variant=${IntegrationButtonVariant.flat}
235
+ >
236
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
237
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
238
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
239
+ <div slot="label">Label</div>
240
+ <div slot="status">Status</div>
241
+ <div slot="info-label">Info Label</div>
242
+ <div slot="info-status">Info Status</div>
243
+ </obc-integration-button>
244
+ <obc-integration-button
245
+ hasLeadingIcon
246
+ .readouts=${[
247
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
248
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
249
+ ]}
250
+ variant=${IntegrationButtonVariant.flat}
251
+ >
252
+ <obi-placeholder slot="leading-icon"></obi-placeholder>
253
+ <obi-placeholder slot="trailing-icon"></obi-placeholder>
254
+ <obi-placeholder slot="trailing-icon2"></obi-placeholder>
255
+ <div slot="label">Label</div>
256
+ <div slot="status">Status</div>
257
+ <div slot="info-label">Info Label</div>
258
+ <div slot="info-status">Info Status</div>
259
+ </obc-integration-button>
260
+ <obc-integration-button
261
+ hasLeadingIcon
262
+ .readouts=${[
263
+ {label: 'Readout 1', value: 'Value 1', unit: 'Unit 1'},
264
+ {label: 'Readout 2', value: 'Value 2', unit: 'Unit 2'},
265
+ ]}
266
+ variant=${IntegrationButtonVariant.flat}
83
267
  >
84
268
  <obi-placeholder slot="leading-icon"></obi-placeholder>
85
269
  <obi-placeholder slot="trailing-icon"></obi-placeholder>
@@ -8,14 +8,19 @@ import {property} from 'lit/decorators.js';
8
8
  *
9
9
  * @slot - The vessel to select.
10
10
  * @slot fleet - The fleet of vessels.
11
+ * @slot topbar - The top bar, displayed when `hasTopbar` is true.
11
12
  */
12
13
  @customElement('obc-integration-vessel-selector')
13
14
  export class ObcIntegrationVesselSelector extends LitElement {
15
+ @property({type: Boolean}) hasTopbar = false;
14
16
  @property({type: Boolean}) hasFleet = false;
15
17
 
16
18
  override render() {
17
19
  return html`
18
20
  <div class="wrapper">
21
+ ${this.hasTopbar
22
+ ? html`<div class="topbar-wrapper"><slot name="topbar"></slot></div>`
23
+ : nothing}
19
24
  ${this.hasFleet
20
25
  ? html`<div class="fleet-wrapper">
21
26
  <slot name="fleet"></slot>
@@ -27,35 +27,6 @@
27
27
  }
28
28
  }
29
29
 
30
- @define-mixin alert-critical $wrapperClass {
31
- &:focus {
32
- outline: none;
33
- }
34
-
35
- & $(wrapperClass) {
36
- border: 1px solid var(--critical-enabled-border-color);
37
- background: var(--critical-enabled-background-color);
38
- }
39
-
40
- &:hover $(wrapperClass) {
41
- border-color: var(--critical-hover-border-color);
42
- background-color: var(--critical-hover-background-color);
43
- }
44
-
45
- &:active $(wrapperClass) {
46
- border-color: var(--critical-pressed-border-color);
47
- background-color: var(--critical-pressed-background-color);
48
- }
49
-
50
- &:focus-visible $(wrapperClass) {
51
- background-color: var(--critical-focused-background-color);
52
- border-color: var(--critical-focused-border-color);
53
- outline-color: var(--border-outline-color);
54
- outline-width: 4px;
55
- outline-style: solid;
56
- }
57
- }
58
-
59
30
  @define-mixin alert-caution $wrapperClass {
60
31
  &:focus {
61
32
  outline: none;