@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.96 → 2.0.0-next.97

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 (158) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +19 -9
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +314 -132
  4. package/dist/ar/poi/poi.d.ts +4 -2
  5. package/dist/ar/poi/poi.d.ts.map +1 -1
  6. package/dist/ar/poi/poi.js.map +1 -1
  7. package/dist/ar/poi-layer/poi-layer.d.ts +1 -0
  8. package/dist/ar/poi-layer/poi-layer.d.ts.map +1 -1
  9. package/dist/ar/poi-layer/poi-layer.js.map +1 -1
  10. package/dist/ar/poi-object/poi-object-aton.d.ts +1 -0
  11. package/dist/ar/poi-object/poi-object-aton.d.ts.map +1 -1
  12. package/dist/ar/poi-object/poi-object-aton.js.map +1 -1
  13. package/dist/automation/automation-badge/automation-badge.d.ts +2 -0
  14. package/dist/automation/automation-badge/automation-badge.d.ts.map +1 -1
  15. package/dist/automation/automation-badge/automation-badge.js.map +1 -1
  16. package/dist/automation/automation-button/automation-button.d.ts +9 -0
  17. package/dist/automation/automation-button/automation-button.d.ts.map +1 -1
  18. package/dist/automation/automation-button/automation-button.js.map +1 -1
  19. package/dist/automation/automation-input-modal/automation-input-modal.d.ts +4 -0
  20. package/dist/automation/automation-input-modal/automation-input-modal.d.ts.map +1 -1
  21. package/dist/automation/automation-input-modal/automation-input-modal.js.map +1 -1
  22. package/dist/building-blocks/alert-list/alert-list.d.ts +4 -0
  23. package/dist/building-blocks/alert-list/alert-list.d.ts.map +1 -1
  24. package/dist/building-blocks/alert-list/alert-list.js.map +1 -1
  25. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts +2 -0
  26. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts.map +1 -1
  27. package/dist/building-blocks/bar-horizontal/bar-horizontal.js.map +1 -1
  28. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts +2 -0
  29. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts.map +1 -1
  30. package/dist/building-blocks/bar-vertical/bar-vertical.js.map +1 -1
  31. package/dist/components/advice-floating-item/advice-floating-item.d.ts +2 -4
  32. package/dist/components/advice-floating-item/advice-floating-item.d.ts.map +1 -1
  33. package/dist/components/advice-floating-item/advice-floating-item.js.map +1 -1
  34. package/dist/components/advice-message-item/advice-message-item.d.ts +6 -19
  35. package/dist/components/advice-message-item/advice-message-item.d.ts.map +1 -1
  36. package/dist/components/advice-message-item/advice-message-item.js.map +1 -1
  37. package/dist/components/alert-floating-item/alert-floating-item.d.ts +12 -0
  38. package/dist/components/alert-floating-item/alert-floating-item.d.ts.map +1 -1
  39. package/dist/components/alert-floating-item/alert-floating-item.js.map +1 -1
  40. package/dist/components/alert-menu/alert-menu.d.ts +6 -20
  41. package/dist/components/alert-menu/alert-menu.d.ts.map +1 -1
  42. package/dist/components/alert-menu/alert-menu.js.map +1 -1
  43. package/dist/components/alert-menu-item/alert-menu-item.d.ts +4 -0
  44. package/dist/components/alert-menu-item/alert-menu-item.d.ts.map +1 -1
  45. package/dist/components/alert-menu-item/alert-menu-item.js.map +1 -1
  46. package/dist/components/chat-message/chat-message.d.ts +3 -0
  47. package/dist/components/chat-message/chat-message.d.ts.map +1 -1
  48. package/dist/components/chat-message/chat-message.js.map +1 -1
  49. package/dist/components/elevated-card-radio/elevated-card-radio.d.ts +2 -6
  50. package/dist/components/elevated-card-radio/elevated-card-radio.d.ts.map +1 -1
  51. package/dist/components/elevated-card-radio/elevated-card-radio.js.map +1 -1
  52. package/dist/components/keyboard-numeric/keyboard-numeric.d.ts +6 -0
  53. package/dist/components/keyboard-numeric/keyboard-numeric.d.ts.map +1 -1
  54. package/dist/components/keyboard-numeric/keyboard-numeric.js.map +1 -1
  55. package/dist/components/notification-floating-item/notification-floating-item.d.ts +2 -4
  56. package/dist/components/notification-floating-item/notification-floating-item.d.ts.map +1 -1
  57. package/dist/components/notification-floating-item/notification-floating-item.js.map +1 -1
  58. package/dist/components/sequence-card/sequence-card.d.ts +9 -0
  59. package/dist/components/sequence-card/sequence-card.d.ts.map +1 -1
  60. package/dist/components/sequence-card/sequence-card.js.map +1 -1
  61. package/dist/components/sequence-item/sequence-item.d.ts +5 -0
  62. package/dist/components/sequence-item/sequence-item.d.ts.map +1 -1
  63. package/dist/components/sequence-item/sequence-item.js.map +1 -1
  64. package/dist/components/sequence-modal/sequence-modal.d.ts +4 -0
  65. package/dist/components/sequence-modal/sequence-modal.d.ts.map +1 -1
  66. package/dist/components/sequence-modal/sequence-modal.js.map +1 -1
  67. package/dist/components/sequence-step/sequence-step.d.ts.map +1 -1
  68. package/dist/components/sequence-step/sequence-step.js.map +1 -1
  69. package/dist/components/slider-double/slider-double.d.ts +4 -8
  70. package/dist/components/slider-double/slider-double.d.ts.map +1 -1
  71. package/dist/components/slider-double/slider-double.js.map +1 -1
  72. package/dist/components/status-indicator/status-indicator.d.ts +1 -0
  73. package/dist/components/status-indicator/status-indicator.d.ts.map +1 -1
  74. package/dist/components/status-indicator/status-indicator.js.map +1 -1
  75. package/dist/components/system-menu/system-menu.d.ts +2 -0
  76. package/dist/components/system-menu/system-menu.d.ts.map +1 -1
  77. package/dist/components/system-menu/system-menu.js.map +1 -1
  78. package/dist/components/table-header-item/table-header-item.d.ts +2 -0
  79. package/dist/components/table-header-item/table-header-item.d.ts.map +1 -1
  80. package/dist/components/table-header-item/table-header-item.js.map +1 -1
  81. package/dist/components/tag/tag.d.ts +1 -0
  82. package/dist/components/tag/tag.d.ts.map +1 -1
  83. package/dist/components/tag/tag.js.map +1 -1
  84. package/dist/components/toggletip/toggletip.d.ts +4 -4
  85. package/dist/components/toggletip/toggletip.js.map +1 -1
  86. package/dist/components/user-menu/user-menu.d.ts +1 -0
  87. package/dist/components/user-menu/user-menu.d.ts.map +1 -1
  88. package/dist/components/user-menu/user-menu.js.map +1 -1
  89. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts +1 -0
  90. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts.map +1 -1
  91. package/dist/integration-systems/integration-app-bar/integration-app-bar.js.map +1 -1
  92. package/dist/integration-systems/integration-bar/integration-bar.d.ts +0 -1
  93. package/dist/integration-systems/integration-bar/integration-bar.d.ts.map +1 -1
  94. package/dist/integration-systems/integration-bar/integration-bar.js.map +1 -1
  95. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.d.ts +9 -9
  96. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.js.map +1 -1
  97. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.d.ts +1 -0
  98. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.d.ts.map +1 -1
  99. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.js.map +1 -1
  100. package/dist/integration-systems/integration-tabs/integration-tabs.d.ts +1 -0
  101. package/dist/integration-systems/integration-tabs/integration-tabs.d.ts.map +1 -1
  102. package/dist/integration-systems/integration-tabs/integration-tabs.js.map +1 -1
  103. package/dist/navigation-instruments/compass-sector/compass-sector.d.ts +0 -1
  104. package/dist/navigation-instruments/compass-sector/compass-sector.d.ts.map +1 -1
  105. package/dist/navigation-instruments/compass-sector/compass-sector.js.map +1 -1
  106. package/dist/navigation-instruments/watch/tickmark.d.ts.map +1 -1
  107. package/dist/navigation-instruments/watch/tickmark.js +17 -7
  108. package/dist/navigation-instruments/watch/tickmark.js.map +1 -1
  109. package/dist/navigation-instruments/watch/watch.d.ts.map +1 -1
  110. package/dist/navigation-instruments/watch/watch.js +2 -2
  111. package/dist/navigation-instruments/watch/watch.js.map +1 -1
  112. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts +0 -1
  113. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts.map +1 -1
  114. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.js.map +1 -1
  115. package/dist/pages/alert-detail-page/alert-detail-page.d.ts.map +1 -1
  116. package/dist/pages/alert-detail-page/alert-detail-page.js.map +1 -1
  117. package/package.json +3 -2
  118. package/script/check-slot-event-docs.ts +353 -0
  119. package/src/ar/poi/poi.ts +4 -2
  120. package/src/ar/poi-layer/poi-layer.ts +1 -0
  121. package/src/ar/poi-object/poi-object-aton.ts +1 -0
  122. package/src/automation/automation-badge/automation-badge.ts +2 -0
  123. package/src/automation/automation-button/automation-button.ts +9 -0
  124. package/src/automation/automation-input-modal/automation-input-modal.ts +4 -0
  125. package/src/building-blocks/alert-list/alert-list.ts +4 -0
  126. package/src/building-blocks/bar-horizontal/bar-horizontal.ts +2 -0
  127. package/src/building-blocks/bar-vertical/bar-vertical.ts +2 -0
  128. package/src/components/advice-floating-item/advice-floating-item.ts +2 -4
  129. package/src/components/advice-message-item/advice-message-item.ts +6 -19
  130. package/src/components/alert-floating-item/alert-floating-item.ts +12 -0
  131. package/src/components/alert-menu/alert-menu.ts +6 -20
  132. package/src/components/alert-menu-item/alert-menu-item.ts +4 -0
  133. package/src/components/chat-message/chat-message.ts +3 -0
  134. package/src/components/elevated-card-radio/elevated-card-radio.ts +2 -6
  135. package/src/components/keyboard-numeric/keyboard-numeric.ts +6 -0
  136. package/src/components/notification-floating-item/notification-floating-item.ts +2 -4
  137. package/src/components/sequence-card/sequence-card.ts +9 -0
  138. package/src/components/sequence-item/sequence-item.ts +5 -0
  139. package/src/components/sequence-modal/sequence-modal.ts +4 -0
  140. package/src/components/sequence-step/sequence-step.ts +3 -0
  141. package/src/components/slider-double/slider-double.ts +4 -8
  142. package/src/components/status-indicator/status-indicator.ts +1 -0
  143. package/src/components/system-menu/system-menu.ts +2 -0
  144. package/src/components/table-header-item/table-header-item.ts +2 -0
  145. package/src/components/tag/tag.ts +1 -0
  146. package/src/components/toggletip/toggletip.ts +4 -4
  147. package/src/components/user-menu/user-menu.ts +1 -0
  148. package/src/integration-systems/integration-app-bar/integration-app-bar.ts +1 -0
  149. package/src/integration-systems/integration-bar/integration-bar.ts +0 -1
  150. package/src/integration-systems/integration-bar-dropdown/integration-bar-dropdown.ts +9 -9
  151. package/src/integration-systems/integration-fleet-button/integration-fleet-button.ts +1 -0
  152. package/src/integration-systems/integration-tabs/integration-tabs.ts +1 -0
  153. package/src/navigation-instruments/compass-sector/compass-sector.ts +0 -1
  154. package/src/navigation-instruments/watch/tickmark.spec.ts +99 -0
  155. package/src/navigation-instruments/watch/tickmark.ts +21 -8
  156. package/src/navigation-instruments/watch/watch.ts +7 -2
  157. package/src/navigation-instruments/wind-propulsion/wind-propulsion.ts +0 -1
  158. package/src/pages/alert-detail-page/alert-detail-page.ts +7 -0
@@ -84,6 +84,12 @@ const ALLOWED_CHARS_PATTERN = `^[${ALLOWED_CHARS.map((c) =>
84
84
  ).join('')}]*$`;
85
85
 
86
86
  /**
87
+ * `<obc-keyboard-numeric>` – An on-screen numeric keyboard with optional calculation and symbol modes.
88
+ *
89
+ * @slot leading-icon - Custom leading icon shown inside the input field (rendered when `hasLeadingIcon` is true).
90
+ * @fires close-click {CustomEvent} Fired when the close button (or Escape) dismisses the keyboard.
91
+ * @fires value-change {CustomEvent<{value: string}>} Fired whenever the current value changes.
92
+ * @fires done-click {CustomEvent<{value: string}>} Fired when the DONE button (or Enter) is pressed.
87
93
  * @beta
88
94
  */
89
95
  @customElement('obc-keyboard-numeric')
@@ -53,8 +53,7 @@ import {
53
53
  *
54
54
  * | Slot Name | Renders When... | Purpose |
55
55
  * |-----------------|------------------------------|--------------------------------------------------------------|
56
- * | primary-icon | Always (all types) | Main icon representing the notification category. |
57
- * | secondary-icon | type="application" only | Additional icon for application-type notifications. |
56
+ * | primary-icon | type="application" only | Custom main icon (the built-in notification icon is used otherwise). |
58
57
  * | title | Always | Title or heading of the notification. |
59
58
  * | description | Always | Detailed message text. |
60
59
  * | time | hasTimestamp is true | Timestamp label (e.g., "09:12:46"). |
@@ -83,8 +82,7 @@ import {
83
82
  * </obc-notification-floating-item>
84
83
  * ```
85
84
  *
86
- * @slot primary-icon - Main icon representing the notification category.
87
- * @slot secondary-icon - Additional icon for application-type notifications.
85
+ * @slot primary-icon - Custom main icon, projected into the child only when `type="application"` (the built-in notification icon is used otherwise).
88
86
  * @slot title - Title or heading of the notification.
89
87
  * @slot description - Detailed message text.
90
88
  * @slot time - Timestamp label (e.g., "09:12:46").
@@ -97,6 +97,15 @@ export enum ObcSequenceCardState {
97
97
  * ```
98
98
  *
99
99
  * Keywords: timeline, step, progress, sequence, card, event, status.
100
+ *
101
+ * @slot leading-icon - Icon before the title (shown when `hasLeadingIcon` is true).
102
+ * @slot title - Title text (falls back to `cardTitle`).
103
+ * @slot subtitle - Subtitle/description (falls back to `subtitle`).
104
+ * @slot time-stamp - Header timestamp (falls back to `timeLabel` + `time`).
105
+ * @slot header-actions - Optional header actions (e.g., close button).
106
+ * @slot left-time-stamp - Left rail timestamp (falls back to `leftTime`).
107
+ * @slot actions - Actions row content (shown when `hasActions` is true).
108
+ * @slot - Main content area (shown when `hasContent` is true).
100
109
  * @experimental
101
110
  */
102
111
  @customElement('obc-sequence-card')
@@ -32,6 +32,11 @@ export enum SequenceItemState {
32
32
  * composing `<obc-sequence-step>` for the visual indicator. Consumers can either
33
33
  * configure the built-in step via `step*` props or supply a custom step through
34
34
  * the `step` slot.
35
+ *
36
+ * @slot title - Title/subtitle block (falls back to the built-in `title`/`subtitle`/inline description).
37
+ * @slot description - Description text (rendered when `hasDescription` is true and not inlined).
38
+ * @slot meta - Meta row with timestamp/distance stamps (rendered when `hasMeta` is true — i.e. `hasStamp` with a timestamp or distance stamp enabled).
39
+ * @slot step - Custom step indicator (falls back to the built-in `<obc-sequence-step>`).
35
40
  * @beta
36
41
  */
37
42
  @customElement('obc-sequence-item')
@@ -59,6 +59,10 @@ export enum ObcSequenceModalType {
59
59
  * ```
60
60
  *
61
61
  * Keywords: modal, sequence, step, dialog, progress, actions.
62
+ *
63
+ * @slot actions - Actions row content (shown when `hasActions` is true).
64
+ * @slot - Main content area.
65
+ * @fires close-click - Fired when the close icon is clicked.
62
66
  * @experimental
63
67
  */
64
68
  @customElement('obc-sequence-modal')
@@ -55,6 +55,9 @@ export enum SequenceVariant {
55
55
  * `<obc-sequence-step>` renders the visual node of a sequence diagram.
56
56
  * Supports three sizes, multiple styles (regular/point/connector), and can show
57
57
  * leading/trailing connectors as well as state-specific icons.
58
+ *
59
+ * @slot leading-icon - Custom leading state icon (shown for medium/large regular steps with `hasIcon`, when the value has no built-in icon).
60
+ * @slot - Step label content (shown for non-small steps).
58
61
  */
59
62
  export class ObcSequenceStep extends LitElement {
60
63
  @property({type: String}) orientation: SequenceOrientation =
@@ -43,7 +43,7 @@ export type ObcSliderDoubleChangeEvent = CustomEvent<{
43
43
  *
44
44
  * This component allows users to select a minimum and maximum value by dragging two thumbs along a horizontal track. It is commonly used for filtering or specifying ranges (such as price, speed, or time intervals) in forms and dashboards. The slider supports both interactive and read-only display modes, as well as visual variants for different UI needs.
45
45
  *
46
- * Appears with two draggable handles (thumbs) and labels showing the current low and high values. Optionally, icons can be placed at each end of the slider via slots.
46
+ * Appears with two draggable handles (thumbs) and labels showing the current low and high values. The low and high readout labels can be customized via slots.
47
47
  *
48
48
  * ## Features
49
49
  * - **Dual-thumb range selection:** Users can adjust both the lower and upper bounds of a numeric interval.
@@ -56,7 +56,7 @@ export type ObcSliderDoubleChangeEvent = CustomEvent<{
56
56
  * - **Seeking mode:** Enable `allowSeeking` to let users jump to a value by clicking on the track, with smooth animated transitions controlled by `seekingSpeed`.
57
57
  * - **Custom labels:** Display formatted value labels with unit (`labelUnit`), decimal precision (`labelDecimals`), and adjustable label width (`labelWidth`).
58
58
  * - **Hug container option:** Remove spacing between slider and container edges with the `hugcontainer` attribute for seamless layout integration.
59
- * - **Icon slots:** Add icons to the left and right ends of the slider using `icon-left` and `icon-right` slots.
59
+ * - **Custom readouts:** Replace the low/high value labels with custom content using the `left-readout` and `right-readout` slots.
60
60
  *
61
61
  * ## Usage Guidelines
62
62
  * Use `obc-slider-double` when you need users to specify a numeric range, such as filtering results by minimum and maximum values. Ideal for scenarios like:
@@ -72,8 +72,6 @@ export type ObcSliderDoubleChangeEvent = CustomEvent<{
72
72
  *
73
73
  * | Slot Name | Renders When... | Purpose |
74
74
  * |---------------|-------------------------------|------------------------------------------------------------------------------------------------------------------|
75
- * | icon-left | Always | Icon or content at the left end of the slider. Example: `<obi-placeholder slot="icon-left"></obi-placeholder>` |
76
- * | icon-right | Always | Icon or content at the right end of the slider. Example: `<obi-placeholder slot="icon-right"></obi-placeholder>` |
77
75
  * | left-readout | `showLeftReadout` is true | Custom content for the left (low) readout label. Falls back to the formatted `low` value. |
78
76
  * | right-readout | `showRightReadout` is true | Custom content for the right (high) readout label. Falls back to the formatted `high` value. |
79
77
  *
@@ -119,15 +117,13 @@ export type ObcSliderDoubleChangeEvent = CustomEvent<{
119
117
  * variant="enhanced"
120
118
  * allowSeeking
121
119
  * >
122
- * <obi-placeholder slot="icon-left"></obi-placeholder>
123
- * <obi-placeholder slot="icon-right"></obi-placeholder>
120
+ * <span slot="left-readout">Min</span>
121
+ * <span slot="right-readout">Max</span>
124
122
  * </obc-slider-double>
125
123
  * ```
126
124
  *
127
125
  * In this example, the slider allows selection of a percentage range from 0 to 100, with 5% increments, enhanced styling, and seeking enabled.
128
126
  *
129
- * @slot icon-left - Slot for the left icon
130
- * @slot icon-right - Slot for the right icon
131
127
  * @slot left-readout - Custom content for the left (low) readout label (rendered when `showLeftReadout` is true)
132
128
  * @slot right-readout - Custom content for the right (high) readout label (rendered when `showRightReadout` is true)
133
129
  * @fires value {ObcSliderDoubleValueEvent} - Fires when the value is changed
@@ -14,6 +14,7 @@ export enum StatusIndicatorStatus {
14
14
  }
15
15
 
16
16
  /**
17
+ * @slot - Label content shown next to the status indicator.
17
18
  * @beta
18
19
  */
19
20
  @customElement('obc-status-indicator')
@@ -97,6 +97,7 @@ export type VolumeChangeEvent = CustomEvent<number>;
97
97
  * @fires audio-click - When the Audio button is clicked
98
98
  * @fires audio-volume-change - {VolumeChangeEvent} - When the Audio volume is changed
99
99
  * @fires microphone-click - When the Microphone button is clicked
100
+ * @fires push-to-talk-change - When the push-to-talk toggle is changed
100
101
  * @fires battery-usage-click - When the Battery usage button is clicked
101
102
  * @fires battery-saving-mode-change - When the Battery saving mode is changed
102
103
  * @fires battery-mode-change - When the Battery mode is changed
@@ -107,6 +108,7 @@ export type VolumeChangeEvent = CustomEvent<number>;
107
108
  * @fires to-sub-menu-click - When the sub menu is clicked
108
109
  * @fires wifi-options-click - When the Wi-Fi options are clicked
109
110
  * @fires wifi-disconnect-click - When the Wi-Fi disconnect is clicked
111
+ * @slot battery-status - Custom battery status text (falls back to the built-in charging/battery label).
110
112
  * @stable
111
113
  */
112
114
  @customElement('obc-system-menu')
@@ -20,6 +20,8 @@ export enum ObcTableHeaderItemSortDirection {
20
20
  }
21
21
 
22
22
  /**
23
+ * @slot leading-icon - Leading icon (shown when `hasLeadingIcon` is true).
24
+ * @slot - Header label content (hidden when `type` is `IconOnly`).
23
25
  * @beta
24
26
  */
25
27
  @customElement('obc-table-header-item')
@@ -23,6 +23,7 @@ export enum TagSize {
23
23
  }
24
24
 
25
25
  /**
26
+ * @slot - Leading icon content (shown when `hasIcon` is true).
26
27
  * @stable
27
28
  */
28
29
  @customElement('obc-tag')
@@ -84,10 +84,10 @@ export enum ToggletipVariant {
84
84
  * ## Properties and Configuration
85
85
  *
86
86
  * - `variant`: Controls the visual style and semantic meaning (see Features above for all options).
87
- * - `title`: Sets the header text (shown if `hasTitleContainer` is true).
88
- * - `description`: Sets the main message text (shown if `hasDescription` is true).
89
- * - `hasTitleContainer`, `hasDescription`, `hasContent`, `hasActions`: Toggle visibility of each section.
90
- * - `hasLeadingIcon`, `hasTrailingIcon`: Toggle visibility of icon slots.
87
+ * - `title`: Sets the header text. The header is shown only when `title` is a non-empty string.
88
+ * - `description`: Sets the main message text. Shown whenever `description` is defined.
89
+ * - `hasContent`, `hasActions`: Toggle visibility of the custom content area and the action buttons.
90
+ * - `hasLeadingIcon`, `hasTrailingIcon`: Toggle visibility of icon slots (only effective when a `title` is set).
91
91
  * - `primaryButtonLabel`, `secondaryButtonLabel`: Set labels for action buttons (shown if `hasActions` is true).
92
92
  * - `customWidth`: Sets a custom width for the toggletip (in pixels).
93
93
  *
@@ -104,6 +104,7 @@ export type ObcUserMenuSignedInAction = {
104
104
  * ></obc-user-menu>
105
105
  * ```
106
106
  *
107
+ * @slot signed-in-action-icon-<id> - Optional icon for a signed-in action, one per action; `<id>` is the normalized action id (shown in the `signed-in` type).
107
108
  * @fires sign-in-click {CustomEvent<{username: string, password: string}>}
108
109
  * @fires sign-out-click
109
110
  * @fires signed-in-action-click {CustomEvent<{id: string, label: string}>}
@@ -3,6 +3,7 @@ import {customElement} from '../../decorator.js';
3
3
  import compentStyle from './integration-app-bar.css?inline';
4
4
 
5
5
  /**
6
+ * @slot apps - Application buttons; slotted elements are normalized to a uniform width
6
7
  * @experimental
7
8
  */
8
9
  @customElement('obc-integration-app-bar')
@@ -30,7 +30,6 @@ import {classMap} from 'lit/directives/class-map.js';
30
30
  * @slot clock - Custom clock content, rendered when `showClock` is true
31
31
  * @slot integration-buttons - Regular vessel integration buttons
32
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
33
  * @property {IntegrationBarType} type - Integration bar mode for fleet/vessel presentation
35
34
  * @property {boolean} hideHomeButton - Hides the home button when true
36
35
  * @property {boolean} showClock - Toggles rendering of the clock slot
@@ -16,18 +16,18 @@ import {property} from 'lit/decorators.js';
16
16
  *
17
17
  * @fires home-button-clicked - Fired when the home button is clicked
18
18
  * @fires dimming-button-clicked - Fired when the dimming button is clicked
19
- * @fires notification-button-clicked - Firaed when the notification button is clicked
19
+ * @fires notification-button-clicked - Fired when the notification button is clicked
20
20
  * @fires user-button-clicked - Fired when the user button is clicked
21
21
  * @fires system-button-clicked - Fired when the system button is clicked
22
22
  *
23
- * @slot vessel-selector
24
- * @slot status-label-1
25
- * @slot status-icon-1
26
- * @slot status-label-2
27
- * @slot status-icon-2
28
- * @slot status-label-3
29
- * @slot status-icon-3
30
- * @slot clock
23
+ * @slot vessel-selector - Vessel selector content
24
+ * @slot status-label-1 - Label for the first status field
25
+ * @slot status-icon-1 - Icon for the first status field
26
+ * @slot status-label-2 - Label for the second status field
27
+ * @slot status-icon-2 - Icon for the second status field
28
+ * @slot status-label-3 - Label for the third status field
29
+ * @slot status-icon-3 - Icon for the third status field
30
+ * @slot clock - Custom clock content, rendered when `showClock` is true
31
31
  * @experimental
32
32
  */
33
33
  @customElement('obc-integration-bar-dropdown')
@@ -13,6 +13,7 @@ export interface IntegrationFleetButtonReadout {
13
13
  }
14
14
 
15
15
  /**
16
+ * @slot alert-topic-icon - Icon shown alongside the alert topic
16
17
  * @experimental
17
18
  */
18
19
  @customElement('obc-integration-fleet-button')
@@ -4,6 +4,7 @@ import compentStyle from './integration-tabs.css?inline';
4
4
  import {property} from 'lit/decorators.js';
5
5
 
6
6
  /**
7
+ * @slot - Tab label content
7
8
  * @experimental
8
9
  */
9
10
  @customElement('obc-integration-tabs')
@@ -96,7 +96,6 @@ function normalizeAngle(a: number): number {
96
96
  * - Enable `zoomToFitArc` to enlarge the arc to fill the viewport.
97
97
  * - For a full‑circle compass, use `<obc-compass>` instead.
98
98
  *
99
- * @fires None
100
99
  * @stable
101
100
  */
102
101
  @customElement('obc-compass-sector')
@@ -0,0 +1,99 @@
1
+ import {describe, it, expect} from 'vitest';
2
+ import type {SVGTemplateResult} from 'lit';
3
+ import {tickmark, TickmarkType, TickmarkStyle} from './tickmark.js';
4
+
5
+ /**
6
+ * Collect every numeric interpolated value from a `tickmark()` result without
7
+ * rendering it. `tickmark()` returns Lit `SVGTemplateResult`s (or an array of
8
+ * them); the interpolated `x`/`y`/coordinate values live on `.values`. This
9
+ * lets us assert the geometry is finite in a plain Node environment — no DOM.
10
+ */
11
+ function numericValues(
12
+ result: SVGTemplateResult | SVGTemplateResult[]
13
+ ): number[] {
14
+ const templates = Array.isArray(result) ? result : [result];
15
+ const numbers: number[] = [];
16
+ for (const template of templates) {
17
+ for (const value of template.values) {
18
+ if (typeof value === 'number') {
19
+ numbers.push(value);
20
+ }
21
+ }
22
+ }
23
+ return numbers;
24
+ }
25
+
26
+ describe('tickmark label positioning', () => {
27
+ // On first paint the element is not laid out yet, so obc-watch computes a
28
+ // scale of 0. A `textOnly` tick still renders a <text>, and dividing by a
29
+ // zero scale used to yield x/y of ±Infinity — which the browser rejects with
30
+ // `<text> attribute x: Expected length, "-Infinity"` (issue #1032).
31
+ it('keeps the zero-value textOnly label finite when the scale is 0', () => {
32
+ const result = tickmark(-90, {
33
+ size: TickmarkType.textOnly,
34
+ style: TickmarkStyle.regular,
35
+ scale: 0,
36
+ text: '0',
37
+ inside: false,
38
+ textRadius: 184,
39
+ maxDigits: 1,
40
+ });
41
+
42
+ for (const value of numericValues(result)) {
43
+ expect(Number.isFinite(value)).toBe(true);
44
+ }
45
+ });
46
+
47
+ it('keeps labelled ticks finite for a zero scale (inside and outside)', () => {
48
+ for (const inside of [false, true]) {
49
+ const result = tickmark(45, {
50
+ size: TickmarkType.primary,
51
+ style: TickmarkStyle.regular,
52
+ scale: 0,
53
+ text: '50',
54
+ inside,
55
+ textRadius: 184,
56
+ maxDigits: 2,
57
+ });
58
+
59
+ for (const value of numericValues(result)) {
60
+ expect(Number.isFinite(value)).toBe(true);
61
+ }
62
+ }
63
+ });
64
+
65
+ it('keeps rotated labels finite for a zero scale', () => {
66
+ const result = tickmark(120, {
67
+ size: TickmarkType.primary,
68
+ style: TickmarkStyle.regular,
69
+ scale: 0,
70
+ text: '12',
71
+ inside: false,
72
+ textRadius: 184,
73
+ rotation: 120,
74
+ maxDigits: 2,
75
+ });
76
+
77
+ for (const value of numericValues(result)) {
78
+ expect(Number.isFinite(value)).toBe(true);
79
+ }
80
+ });
81
+
82
+ it('does not distort geometry for a valid scale', () => {
83
+ // A settled scale must be untouched: the outside zero tick at -90° sits on
84
+ // the negative-x axis, so its x is finite and negative and y is ~0.
85
+ const result = tickmark(-90, {
86
+ size: TickmarkType.textOnly,
87
+ style: TickmarkStyle.regular,
88
+ scale: 1,
89
+ text: '0',
90
+ inside: false,
91
+ textRadius: 184,
92
+ maxDigits: 1,
93
+ });
94
+
95
+ const numbers = numericValues(result);
96
+ expect(numbers.every(Number.isFinite)).toBe(true);
97
+ expect(numbers.some((n) => n < -100)).toBe(true);
98
+ });
99
+ });
@@ -64,14 +64,15 @@ export function tickmark(
64
64
  endLabelsMaxMin?: boolean;
65
65
  }
66
66
  ): SVGTemplateResult | SVGTemplateResult[] {
67
- // check if scale is not infinite
68
- if (scale === Infinity || scale < 0) {
69
- throw new Error('Tick scale is not valid');
70
- }
67
+ // Before layout settles the caller can pass a scale of 0 (or a non-finite
68
+ // value). Label offsets are computed as `px / scale`, so a 0 scale would emit
69
+ // ±Infinity coordinates that the browser rejects. Fall back to a 1:1 scale
70
+ // until a real one is available (issue #1032).
71
+ const safeScale = Number.isFinite(scale) && scale > 0 ? scale : 1;
71
72
  const rOff = radiusOffset;
72
73
  let innerRadius: number;
73
74
  let outerRadius: number;
74
- textRadius = textRadius + (3 / scale + 3) * (inside ? -1 : 1);
75
+ textRadius = textRadius + (3 / safeScale + 3) * (inside ? -1 : 1);
75
76
  const rad = (angle * Math.PI) / 180;
76
77
  if (size === TickmarkType.primary) {
77
78
  innerRadius = 328 / 2 + rOff;
@@ -90,7 +91,13 @@ export function tickmark(
90
91
  outerRadius = 336 / 2 + rOff;
91
92
  } else {
92
93
  return [
93
- textSvg(text ?? '', {angle, inside, scale, textRadius, endLabelsMaxMin}),
94
+ textSvg(text ?? '', {
95
+ angle,
96
+ inside,
97
+ scale: safeScale,
98
+ textRadius,
99
+ endLabelsMaxMin,
100
+ }),
94
101
  ];
95
102
  }
96
103
 
@@ -121,11 +128,17 @@ export function tickmark(
121
128
  if (rotation === undefined) {
122
129
  return [
123
130
  tick,
124
- textSvg(text, {angle, inside, scale, textRadius, endLabelsMaxMin}),
131
+ textSvg(text, {
132
+ angle,
133
+ inside,
134
+ scale: safeScale,
135
+ textRadius,
136
+ endLabelsMaxMin,
137
+ }),
125
138
  ];
126
139
  } else {
127
140
  const newRadius =
128
- textRadius + ((4 / scale + 5) * (inside ? -1 : 1) * maxDigits) / 2;
141
+ textRadius + ((4 / safeScale + 5) * (inside ? -1 : 1) * maxDigits) / 2;
129
142
  const textX = Math.sin(rad) * newRadius;
130
143
  const textY = -Math.cos(rad) * newRadius;
131
144
  return [
@@ -690,8 +690,13 @@ export class ObcWatch extends LitElement {
690
690
  }
691
691
  }
692
692
  const scale = Math.min(clientWidth / width, clientHeight / height);
693
- if (scale === Infinity || scale < 0) {
694
- throw new Error('Watch scale is not valid');
693
+ // On first paint the element and its parent can both still be zero-sized, so
694
+ // the scale is 0 (or non-finite). That value flows into `px / scale` label
695
+ // math and yields ±Infinity coordinates the browser rejects. Fall back to a
696
+ // 1:1 scale until a real size is available; the ResizeController re-renders
697
+ // with the true scale once the element is laid out (issue #1032).
698
+ if (!Number.isFinite(scale) || scale <= 0) {
699
+ return 1;
695
700
  }
696
701
  return scale;
697
702
  }
@@ -58,7 +58,6 @@ export enum WindPropulsionPriorityElement {
58
58
  * proportionally (default 100).
59
59
  * - For a full-circle compass, use `<obc-compass>` instead.
60
60
  *
61
- * @fires None
62
61
  * @beta
63
62
  */
64
63
  @customElement('obc-wind-propulsion')
@@ -30,6 +30,13 @@ export enum AlertDetailPageType {
30
30
 
31
31
  @localized()
32
32
  /**
33
+ * @slot note-label - Label for the note section, rendered when `hasNote` is true
34
+ * @slot note - Note content, rendered when `hasNote` is true
35
+ * @slot readout-graph-title - Title for the readout graph, rendered when `hasReadoutGraph` is true
36
+ * @slot readout-graph - Readout graph content, rendered when `hasReadoutGraph` is true
37
+ * @slot action - Action controls, rendered when `hasActions` is true
38
+ * @slot <detail>-label - Overrides the label of the `<detail>` field (e.g. `tagId-label`, `category-label`, `time-label`)
39
+ * @slot <detail>-value - Overrides the value of the `<detail>` field (e.g. `tagId-value`, `category-value`, `time-value`)
33
40
  * @beta
34
41
  */
35
42
  @customElement('obc-alert-detail-page')