@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.136 → 2.0.0-next.138

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 (48) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +11640 -10983
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +921 -0
  4. package/dist/automation/hydraulic-check-valve/hydraulic-check-valve.css.js +12 -0
  5. package/dist/automation/hydraulic-check-valve/hydraulic-check-valve.css.js.map +1 -0
  6. package/dist/automation/hydraulic-check-valve/hydraulic-check-valve.d.ts +33 -0
  7. package/dist/automation/hydraulic-check-valve/hydraulic-check-valve.d.ts.map +1 -0
  8. package/dist/automation/hydraulic-check-valve/hydraulic-check-valve.js +58 -0
  9. package/dist/automation/hydraulic-check-valve/hydraulic-check-valve.js.map +1 -0
  10. package/dist/automation/hydraulic-valve-4-3/hydraulic-valve-4-3.d.ts +77 -0
  11. package/dist/automation/hydraulic-valve-4-3/hydraulic-valve-4-3.d.ts.map +1 -0
  12. package/dist/automation/hydraulic-valve-4-3/hydraulic-valve-4-3.js +74 -0
  13. package/dist/automation/hydraulic-valve-4-3/hydraulic-valve-4-3.js.map +1 -0
  14. package/dist/automation/hydraulic-valve-x-2/hydraulic-valve-x-2.d.ts +74 -0
  15. package/dist/automation/hydraulic-valve-x-2/hydraulic-valve-x-2.d.ts.map +1 -0
  16. package/dist/automation/hydraulic-valve-x-2/hydraulic-valve-x-2.js +60 -0
  17. package/dist/automation/hydraulic-valve-x-2/hydraulic-valve-x-2.js.map +1 -0
  18. package/dist/automation/shuffle-button/shuffle-button-base.d.ts +67 -0
  19. package/dist/automation/shuffle-button/shuffle-button-base.d.ts.map +1 -0
  20. package/dist/automation/shuffle-button/shuffle-button-base.js +126 -0
  21. package/dist/automation/shuffle-button/shuffle-button-base.js.map +1 -0
  22. package/dist/automation/shuffle-button/shuffle-button.css.js +219 -0
  23. package/dist/automation/shuffle-button/shuffle-button.css.js.map +1 -0
  24. package/dist/automation/shuffle-button/shuffle-layout.d.ts +9 -0
  25. package/dist/automation/shuffle-button/shuffle-layout.d.ts.map +1 -0
  26. package/dist/automation/shuffle-button/shuffle-layout.js +16 -0
  27. package/dist/automation/shuffle-button/shuffle-layout.js.map +1 -0
  28. package/dist/components/alert-subsystem-counter/alert-subsystem-counter.css.js +113 -0
  29. package/dist/components/alert-subsystem-counter/alert-subsystem-counter.css.js.map +1 -0
  30. package/dist/components/alert-subsystem-counter/alert-subsystem-counter.d.ts +104 -0
  31. package/dist/components/alert-subsystem-counter/alert-subsystem-counter.d.ts.map +1 -0
  32. package/dist/components/alert-subsystem-counter/alert-subsystem-counter.js +79 -0
  33. package/dist/components/alert-subsystem-counter/alert-subsystem-counter.js.map +1 -0
  34. package/package.json +1 -1
  35. package/src/automation/hydraulic-check-valve/hydraulic-check-valve.css +3 -0
  36. package/src/automation/hydraulic-check-valve/hydraulic-check-valve.stories.ts +18 -0
  37. package/src/automation/hydraulic-check-valve/hydraulic-check-valve.ts +60 -0
  38. package/src/automation/hydraulic-valve-4-3/hydraulic-valve-4-3.stories.ts +72 -0
  39. package/src/automation/hydraulic-valve-4-3/hydraulic-valve-4-3.ts +108 -0
  40. package/src/automation/hydraulic-valve-x-2/hydraulic-valve-x-2.stories.ts +60 -0
  41. package/src/automation/hydraulic-valve-x-2/hydraulic-valve-x-2.ts +101 -0
  42. package/src/automation/shuffle-button/shuffle-button-base.ts +170 -0
  43. package/src/automation/shuffle-button/shuffle-button.css +136 -0
  44. package/src/automation/shuffle-button/shuffle-layout.spec.ts +44 -0
  45. package/src/automation/shuffle-button/shuffle-layout.ts +21 -0
  46. package/src/components/alert-subsystem-counter/alert-subsystem-counter.css +82 -0
  47. package/src/components/alert-subsystem-counter/alert-subsystem-counter.stories.ts +308 -0
  48. package/src/components/alert-subsystem-counter/alert-subsystem-counter.ts +137 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuffle-button-base.js","sources":["../../../src/automation/shuffle-button/shuffle-button-base.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport type {PropertyValues, TemplateResult} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport componentStyle from './shuffle-button.css?inline';\nimport {\n clampPosition,\n shuffleSlotCount,\n shuffleWindowOffset,\n} from './shuffle-layout.js';\n\n/**\n * Detail payload for the `position-selected` event dispatched by\n * shuffle-button components. `position` is the zero-based position the user\n * requested.\n */\nexport interface PositionSelectedDetail {\n position: number;\n}\n\n/**\n * The `position-selected` event dispatched by shuffle-button components.\n */\nexport type PositionSelectedEvent = CustomEvent<PositionSelectedDetail>;\n\n/**\n * Base class for shuffle-button selectors: a control whose selected thumb\n * always occupies the fixed center slot of a (2·n−1)-slot row (or column when\n * `vertical`). Option thumbs keep their logical order and redistribute to\n * either side of the selected thumb; empty spacer slots absorb the remaining\n * length so the total size never changes.\n *\n * ## Controlled selection\n * Clicking an option or pressing an arrow key only fires `position-selected`.\n * The host application sets `selectedPosition` once the device confirms the\n * change, so the control never shows a position the device has not reached.\n *\n * ## Keyboard\n * Follows the WAI-ARIA radio group pattern\n * (https://www.w3.org/WAI/ARIA/apg/patterns/radio/): `role=\"radiogroup\"` with\n * one `role=\"radio\"` thumb per position, a single tab stop on the selected\n * thumb, and Left/Up and Right/Down moving to the previous/next position with\n * wrap-around. Departures: arrow keys request the position rather than moving\n * the checked state (controlled selection above), and focus follows the thumb\n * only once the host confirms it. Space/Enter on a focused thumb request it\n * through the native button click. Home/End are out of scope.\n *\n * Subclasses define `positionCount` and `renderPositionIcon()` and carry the\n * `@fires position-selected` tag: the manifest and the framework wrappers read\n * events from the registered element, not from this base.\n *\n * Not declared `abstract`: the wrapper generators wrap every `LitElement`\n * subclass and pass its constructor as a concrete `Constructor<T>`, so the\n * default implementations below stand in for abstract members (same as\n * `ObcAbstractAutomationButton`).\n *\n * @property selectedPosition - Zero-based index of the currently selected position. Out-of-range values are clamped.\n * @property vertical - Lays the control out vertically: positions stack top to bottom and the position symbols rotate 90° counter-clockwise to match a vertical flow path.\n * @property ariaLabel - Accessible name for the radio group (the control is icon-only). Concrete components override the default with a device-specific name.\n */\nexport class ObcShuffleButtonBase extends LitElement {\n @property({type: Number}) selectedPosition = 1;\n\n @property({type: Boolean}) vertical = false;\n\n @property({type: String}) override ariaLabel = 'Position selector';\n\n @state() private suppressHover = false;\n\n protected get positionCount(): number {\n return 1;\n }\n\n protected renderPositionIcon(_position: number): TemplateResult {\n return html``;\n }\n\n override render() {\n const count = this.positionCount;\n const selected = clampPosition(count, this.selectedPosition);\n return html`\n <div\n class=${classMap({shuffle: true, vertical: this.vertical})}\n role=\"radiogroup\"\n aria-label=${this.ariaLabel}\n aria-orientation=${this.vertical ? 'vertical' : 'horizontal'}\n style=\"--_shuffle-slot-count: ${shuffleSlotCount(\n count\n )}; --_shuffle-window-offset: ${shuffleWindowOffset(\n count,\n selected\n )};${this.suppressHover ? ' --obc-can-hover: 0;' : ''}\"\n @keydown=${this.handleKeydown}\n @pointermove=${this.restoreHover}\n >\n <div class=\"window\">\n <div class=\"track\"></div>\n ${Array.from({length: count}, (_, position) =>\n this.renderThumb(position, selected)\n )}\n </div>\n </div>\n `;\n }\n\n private renderThumb(position: number, selected: number) {\n const isSelected = position === selected;\n return html`\n <button\n class=${classMap({thumb: true, selected: isSelected})}\n type=\"button\"\n role=\"radio\"\n aria-checked=${isSelected}\n tabindex=${isSelected ? 0 : -1}\n @click=${() => this.requestPosition(position)}\n >\n <div class=\"visible-wrapper\">\n <div class=\"icon-container\">${this.renderPositionIcon(position)}</div>\n </div>\n </button>\n `;\n }\n\n private requestPosition(position: number) {\n if (position === clampPosition(this.positionCount, this.selectedPosition)) {\n return;\n }\n // Browsers keep :hover on the thumb that shuffles away from under a\n // stationary pointer; mute hover feedback until the pointer really moves.\n this.suppressHover = true;\n const event: PositionSelectedEvent = new CustomEvent('position-selected', {\n detail: {position},\n bubbles: true,\n composed: true,\n });\n this.dispatchEvent(event);\n }\n\n private restoreHover() {\n this.suppressHover = false;\n }\n\n private handleKeydown(event: KeyboardEvent) {\n let delta: number;\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n delta = 1;\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n delta = -1;\n } else {\n return;\n }\n event.preventDefault();\n const count = this.positionCount;\n const selected = clampPosition(count, this.selectedPosition);\n this.requestPosition((selected + delta + count) % count);\n }\n\n protected override updated(changed: PropertyValues) {\n if (\n changed.has('selectedPosition') &&\n this.shadowRoot?.activeElement instanceof HTMLElement\n ) {\n this.shadowRoot\n .querySelector<HTMLButtonElement>('button.thumb.selected')\n ?.focus();\n }\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,219 @@
1
+ import { css } from "lit";
2
+ const componentStyle = css`* {
3
+ -webkit-tap-highlight-color: transparent;
4
+ }
5
+
6
+ :host {
7
+ display: inline-block;
8
+ }
9
+
10
+ /* ---- Slot grid ----
11
+ * The box is (2n-1) touch-target slots; the selected thumb always sits in the
12
+ * center slot, so the box never changes size with the selection. */
13
+
14
+ .shuffle {
15
+ --shuffle-slot-size: var(--global-size-spacing-touch-target-min);
16
+ --_shuffle-slot-count: 1;
17
+ --_shuffle-window-offset: 0;
18
+ position: relative; /* containing block for the sliding .window */
19
+ width: calc(var(--_shuffle-slot-count) * var(--shuffle-slot-size));
20
+ height: var(--shuffle-slot-size);
21
+ }
22
+
23
+ .shuffle.vertical {
24
+ width: var(--shuffle-slot-size);
25
+ height: calc(var(--_shuffle-slot-count) * var(--shuffle-slot-size));
26
+ }
27
+
28
+ /* The window holds the n thumbs in logical order and slides by whole slots so
29
+ * the selected one lands in the center; the box above stays put. */
30
+
31
+ .window {
32
+ position: absolute; /* slides inside the fixed-size .shuffle box */
33
+ top: 0;
34
+ left: 0;
35
+ display: flex;
36
+ transform: translateX(
37
+ calc(var(--_shuffle-window-offset) * var(--shuffle-slot-size))
38
+ );
39
+ transition: transform 100ms ease-out; /* TODO(designer): Figma is WIP and specifies no motion */
40
+ }
41
+
42
+ .shuffle.vertical .window {
43
+ flex-direction: column;
44
+ transform: translateY(
45
+ calc(var(--_shuffle-window-offset) * var(--shuffle-slot-size))
46
+ );
47
+ }
48
+
49
+ @media (prefers-reduced-motion: reduce) {
50
+ .window {
51
+ transition: none;
52
+ }
53
+ }
54
+
55
+ /* The track is inset to the visual target height so it aligns with the thumbs'
56
+ * visible wrappers, not with the touch slots. */
57
+
58
+ .track {
59
+ border-color: var(--indent-enabled-border-color);
60
+ background-color: var(--indent-enabled-background-color);
61
+ border-width: 1px;
62
+ border-style: solid;
63
+ --base-border-color: var(--indent-enabled-border-color);
64
+ --base-background-color: var(--indent-enabled-background-color);
65
+ position: absolute;
66
+ inset: calc(
67
+ (
68
+ var(--shuffle-slot-size) -
69
+ var(--global-size-spacing-visual-target-min)
70
+ ) /
71
+ 2
72
+ )
73
+ 0;
74
+ border-radius: var(--global-border-radius-border-radius-base);
75
+ box-sizing: border-box; /* the mixin border must not grow the track past the slots */
76
+ }
77
+
78
+ .shuffle.vertical .track {
79
+ inset: 0
80
+ calc(
81
+ (
82
+ var(--shuffle-slot-size) -
83
+ var(--global-size-spacing-visual-target-min)
84
+ ) /
85
+ 2
86
+ );
87
+ }
88
+
89
+ /* ---- Thumbs ----
90
+ * Two-layer pattern: the button is the touch target and focus-ring layer, the
91
+ * .visible-wrapper is the visual target. */
92
+
93
+ .thumb {
94
+ position: relative;
95
+ width: var(--shuffle-slot-size);
96
+ height: var(--shuffle-slot-size);
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ flex-shrink: 0; /* a slot never shrinks below the touch target */
101
+ padding: 0;
102
+ margin: 0;
103
+ border: none;
104
+ background: none;
105
+ cursor: pointer;
106
+ }
107
+
108
+ button.thumb {
109
+ cursor: pointer;
110
+ }
111
+
112
+ button.thumb:focus {
113
+ outline: none;
114
+ }
115
+
116
+ button.thumb .visible-wrapper {
117
+ border-color: var(--flat-enabled-border-color);
118
+ background-color: var(--flat-enabled-background-color);
119
+ border-width: 1px;
120
+ border-style: solid;
121
+ cursor: pointer;
122
+ --base-border-color: var(--flat-enabled-border-color);
123
+ --base-background-color: var(--flat-enabled-background-color);
124
+ }
125
+
126
+ button.thumb.activated .visible-wrapper {
127
+ border-color: var(--flat-activated-border-color);
128
+ background-color: var(--flat-activated-background-color);
129
+ --base-border-color: var(--flat-activated-border-color);
130
+ --base-background-color: var(--flat-activated-background-color);
131
+ }
132
+
133
+ @media (hover:hover) {
134
+
135
+ button.thumb:hover .visible-wrapper {
136
+ border-color: color-mix(in srgb, var(--flat-hover-border-color) calc(var(--obc-can-hover) * 100%), var(--base-border-color));
137
+ background-color: color-mix(in srgb, var(--flat-hover-background-color) calc(var(--obc-can-hover) * 100%), var(--base-background-color));
138
+ }
139
+ }
140
+
141
+ button.thumb:active .visible-wrapper {
142
+ border-color: var(--flat-pressed-border-color);
143
+ background-color: var(--flat-pressed-background-color);
144
+ }
145
+
146
+ button.thumb:focus-visible .visible-wrapper {
147
+ outline-color: var(--border-focus-color);
148
+ outline-width: var(--global-size-spacing-border-weight-focusframe);
149
+ outline-style: solid;
150
+ border-color: var(--container-global-color);
151
+ z-index: 1;
152
+ }
153
+
154
+ button.thumb:disabled .visible-wrapper {
155
+ border-color: var(--flat-disabled-border-color);
156
+ background-color: var(--flat-disabled-background-color);
157
+ cursor: not-allowed;
158
+ color: var(--on-flat-disabled-color) !important;
159
+ }
160
+
161
+ button.thumb.disabled .visible-wrapper {
162
+ border-color: var(--flat-disabled-border-color);
163
+ background-color: var(--flat-disabled-background-color);
164
+ cursor: not-allowed;
165
+ color: var(--on-flat-disabled-color) !important;
166
+ }
167
+
168
+ button.thumb:disabled {
169
+ cursor: not-allowed;
170
+ }
171
+
172
+ button.thumb.disabled {
173
+ cursor: not-allowed;
174
+ }
175
+
176
+ .visible-wrapper {
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ width: 100%;
181
+ height: var(--global-size-spacing-visual-target-min);
182
+ box-sizing: border-box;
183
+ border-radius: var(--global-border-radius-border-radius-base);
184
+ color: var(--automation-device-secondary-color);
185
+ }
186
+
187
+ .thumb.selected {
188
+ cursor: default; /* clicking the selected position is a no-op */
189
+ }
190
+
191
+ .thumb.selected .visible-wrapper {
192
+ background-color: var(--automation-pipe-primary-color);
193
+ border: 1px solid var(--automation-pipe-tertiary-color);
194
+ color: var(--automation-device-tertiary-color);
195
+ }
196
+
197
+ .shuffle.vertical .visible-wrapper {
198
+ width: var(--global-size-spacing-visual-target-min);
199
+ height: 100%;
200
+ }
201
+
202
+ .icon-container {
203
+ width: var(--global-size-spacing-icon-icon-size-regular);
204
+ height: var(--global-size-spacing-icon-icon-size-regular);
205
+ }
206
+
207
+ .shuffle.vertical .icon-container {
208
+ transform: rotate(-90deg); /* symbols are drawn for horizontal flow */
209
+ }
210
+
211
+ .icon-container > * {
212
+ width: 100%;
213
+ height: 100%;
214
+ }
215
+ `;
216
+ export {
217
+ componentStyle as default
218
+ };
219
+ //# sourceMappingURL=shuffle-button.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuffle-button.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Pure layout math for the shuffle-button mechanism: a selector whose selected
3
+ * thumb always occupies the fixed center slot of a (2n-1)-slot row while the
4
+ * remaining option thumbs keep their logical order on either side.
5
+ */
6
+ export declare function clampPosition(positionCount: number, position: number): number;
7
+ export declare function shuffleSlotCount(positionCount: number): number;
8
+ export declare function shuffleWindowOffset(positionCount: number, selectedPosition: number): number;
9
+ //# sourceMappingURL=shuffle-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuffle-layout.d.ts","sourceRoot":"","sources":["../../../src/automation/shuffle-button/shuffle-layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAER"}
@@ -0,0 +1,16 @@
1
+ function clampPosition(positionCount, position) {
2
+ const rounded = Number.isNaN(position) ? 0 : Math.round(position);
3
+ return Math.min(Math.max(rounded, 0), positionCount - 1);
4
+ }
5
+ function shuffleSlotCount(positionCount) {
6
+ return 2 * positionCount - 1;
7
+ }
8
+ function shuffleWindowOffset(positionCount, selectedPosition) {
9
+ return positionCount - 1 - clampPosition(positionCount, selectedPosition);
10
+ }
11
+ export {
12
+ clampPosition,
13
+ shuffleSlotCount,
14
+ shuffleWindowOffset
15
+ };
16
+ //# sourceMappingURL=shuffle-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuffle-layout.js","sources":["../../../src/automation/shuffle-button/shuffle-layout.ts"],"sourcesContent":["/**\n * Pure layout math for the shuffle-button mechanism: a selector whose selected\n * thumb always occupies the fixed center slot of a (2n-1)-slot row while the\n * remaining option thumbs keep their logical order on either side.\n */\n\nexport function clampPosition(positionCount: number, position: number): number {\n const rounded = Number.isNaN(position) ? 0 : Math.round(position);\n return Math.min(Math.max(rounded, 0), positionCount - 1);\n}\n\nexport function shuffleSlotCount(positionCount: number): number {\n return 2 * positionCount - 1;\n}\n\nexport function shuffleWindowOffset(\n positionCount: number,\n selectedPosition: number\n): number {\n return positionCount - 1 - clampPosition(positionCount, selectedPosition);\n}\n"],"names":[],"mappings":"AAMO,SAAS,cAAc,eAAuB,UAA0B;AAC7E,QAAM,UAAU,OAAO,MAAM,QAAQ,IAAI,IAAI,KAAK,MAAM,QAAQ;AAChE,SAAO,KAAK,IAAI,KAAK,IAAI,SAAS,CAAC,GAAG,gBAAgB,CAAC;AACzD;AAEO,SAAS,iBAAiB,eAA+B;AAC9D,SAAO,IAAI,gBAAgB;AAC7B;AAEO,SAAS,oBACd,eACA,kBACQ;AACR,SAAO,gBAAgB,IAAI,cAAc,eAAe,gBAAgB;AAC1E;"}
@@ -0,0 +1,113 @@
1
+ import { css } from "lit";
2
+ const componentStyle = css`* {
3
+ -webkit-tap-highlight-color: transparent;
4
+ }
5
+
6
+ :host {
7
+ display: block;
8
+ }
9
+
10
+ .frame {
11
+ box-sizing: border-box; /* the host width is the frame width, border included */
12
+ display: flex;
13
+ align-items: center;
14
+ gap: 8px;
15
+ padding: 8px;
16
+ border-radius: 6px;
17
+ background: var(--container-section-color);
18
+ border: 1px solid var(--border-outline-color);
19
+ }
20
+
21
+ .frame.orientation-vertical {
22
+ flex-direction: column;
23
+ align-items: stretch;
24
+ }
25
+
26
+ .leading-container {
27
+ display: flex;
28
+ flex: 1 0 0; /* takes the width the badges leave over, so the label can truncate */
29
+ align-items: center;
30
+ gap: 4px;
31
+ min-width: 0; /* lets the label shrink below its text width */
32
+ }
33
+
34
+ .icon {
35
+ flex-shrink: 0;
36
+ width: var(--global-size-spacing-icon-icon-size-regular);
37
+ height: var(--global-size-spacing-icon-icon-size-regular);
38
+ color: var(--on-indent-neutral-color);
39
+ }
40
+
41
+ .icon.no-icon {
42
+ display: none; /* collapses the flex gap too, so an iconless counter has no leading hole */
43
+ }
44
+
45
+ .label {
46
+ font-family: var(--global-typography-font-family);
47
+ font-weight: var(--global-typography-ui-body-font-weight);
48
+ font-size: var(--global-typography-ui-body-font-size);
49
+ line-height: var(--global-typography-ui-body-line-height);
50
+ font-feature-settings:
51
+ "liga" off,
52
+ "clig" off,
53
+ "ss04" on;
54
+ flex: 1 0 0;
55
+ min-width: 0; /* required for text-overflow to kick in inside a flex item */
56
+ padding-left: 4px;
57
+ color: var(--element-inactive-color);
58
+ overflow: hidden;
59
+ white-space: nowrap;
60
+ text-overflow: ellipsis;
61
+ }
62
+
63
+ .frame.has-alert .label {
64
+ font-family: var(--global-typography-font-family);
65
+ font-weight: var(--global-typography-ui-body-active-font-weight);
66
+ font-size: var(--global-typography-ui-body-active-font-size);
67
+ line-height: var(--global-typography-ui-body-active-line-height);
68
+ font-feature-settings:
69
+ "liga" off,
70
+ "clig" off,
71
+ "ss04" on;
72
+ color: var(--on-indent-active-color);
73
+ }
74
+
75
+ .trailing-container {
76
+ display: flex;
77
+ flex-shrink: 0; /* badges keep their size; the label is what gives way */
78
+ align-items: center;
79
+ gap: 4px;
80
+ }
81
+
82
+ .frame.orientation-horizontal .trailing-container {
83
+ justify-content: flex-end;
84
+ }
85
+
86
+ .frame.orientation-vertical .trailing-container {
87
+ align-self: flex-start; /* hugs its content under the label instead of stretching across the frame */
88
+ }
89
+
90
+ .frame:not(.has-alert) .trailing-container {
91
+ justify-content: center;
92
+ /* same row height as the large badges it stands in for */
93
+ height: var(--ui-components-badge-min-size-large);
94
+ padding: 0 8px;
95
+ }
96
+
97
+ .empty {
98
+ font-family: var(--global-typography-font-family);
99
+ font-weight: var(--global-typography-ui-label-font-weight);
100
+ font-size: var(--global-typography-ui-label-font-size);
101
+ line-height: var(--global-typography-ui-label-line-height);
102
+ font-feature-settings:
103
+ "liga" off,
104
+ "clig" off,
105
+ "ss04" on;
106
+ color: var(--element-inactive-color);
107
+ white-space: nowrap;
108
+ }
109
+ `;
110
+ export {
111
+ componentStyle as default
112
+ };
113
+ //# sourceMappingURL=alert-subsystem-counter.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-subsystem-counter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,104 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * `ObcAlertSubsystemCounterOrientation` – Layout direction for the counter.
4
+ *
5
+ * - `horizontal`: Icon, label, and badges sit in a single row.
6
+ * - `vertical`: Badges (or empty text) sit on their own line below the label.
7
+ */
8
+ export declare enum ObcAlertSubsystemCounterOrientation {
9
+ Horizontal = "horizontal",
10
+ Vertical = "vertical"
11
+ }
12
+ /**
13
+ * `<obc-alert-subsystem-counter>` – A framed summary of a subsystem's alert
14
+ * counts: a leading icon, a label, and a trailing set of slotted count badges.
15
+ *
16
+ * When there are no active alerts it shows a muted label and an empty-state
17
+ * message instead of the badges. The count badges themselves are supplied by
18
+ * the consumer as slotted `obc-badge` elements; this component provides only
19
+ * the frame, layout, label, and empty state.
20
+ *
21
+ * ---
22
+ *
23
+ * ### Features
24
+ * - **Orientation:** `horizontal` (single row) or `vertical` (badges on a line
25
+ * below the label).
26
+ * - **Alert state:** `hasAlert` toggles between an active (bold label, badges)
27
+ * and an inactive (muted label, empty text) presentation.
28
+ * - **Freeform label:** Pass a full title or an abbreviation — the label is
29
+ * plain text decided by the caller and truncates with an ellipsis.
30
+ * - **Configurable empty text:** Customize the message shown when there are no
31
+ * alerts via `emptyText`.
32
+ * - **Optional leading icon:** Provide an icon through the `icon` slot; omit it
33
+ * and the leading box collapses with no empty gap.
34
+ *
35
+ * ---
36
+ *
37
+ * ### Usage Guidelines
38
+ * - Use this component to give an at-a-glance count of outstanding alerts for a
39
+ * single subsystem, grouped by severity.
40
+ * - Provide one slotted badge per severity in the `badges` slot, typically
41
+ * `<obc-badge size="large">` with a severity `type` and a `number`. The
42
+ * badge `type` values are the same severity vocabulary as `AlertType`
43
+ * (`alarm`, `warning`, `caution` and the `level-*` family); order them
44
+ * highest severity first, as `ALERT_SEVERITY_PRIORITY` does.
45
+ * - Set `hasAlert` to `false` to present the resolved/clear state; the badges
46
+ * are then not rendered and `emptyText` is shown. The component does not
47
+ * derive the state from the slotted badges — the consumer owns it.
48
+ * - Choose `vertical` orientation in narrow containers where the badges do not
49
+ * fit beside the label.
50
+ * - The counter is display-only: it renders no button and fires no events. For
51
+ * a clickable subsystem entry with badges, see `obc-tree-navigation-item`
52
+ * (`alertBadges`) or `obc-integration-fleet-button` (`alerts`).
53
+ *
54
+ * ---
55
+ *
56
+ * ### Slots
57
+ *
58
+ * | Slot Name | Renders When... | Purpose |
59
+ * |-----------|------------------------|----------------------------------------------------|
60
+ * | `icon` | The slot has content | Leading 24px icon (e.g. `<obi-placeholder>`). |
61
+ * | `badges` | `hasAlert` is true | Count badges, one per severity (`<obc-badge>`). |
62
+ *
63
+ * ---
64
+ *
65
+ * ### Example
66
+ *
67
+ * ```html
68
+ * <obc-alert-subsystem-counter label="Label" hasAlert>
69
+ * <obi-placeholder slot="icon"></obi-placeholder>
70
+ * <obc-badge slot="badges" size="large" type="alarm" .number=${9}></obc-badge>
71
+ * <obc-badge slot="badges" size="large" type="warning" .number=${4}></obc-badge>
72
+ * <obc-badge slot="badges" size="large" type="caution" .number=${2}></obc-badge>
73
+ * </obc-alert-subsystem-counter>
74
+ * ```
75
+ *
76
+ * @property label - The subsystem label. Pass a full title or an abbreviation as plain text.
77
+ * @property orientation - Layout direction: `horizontal` (default) keeps icon, label and badges in one row; `vertical` moves the badges (or empty text) to a line below the label.
78
+ * @property hasAlert - Whether the subsystem has active alerts. `true` shows the label bold and renders the `badges` slot; `false` mutes the label and shows `emptyText` instead of the badges.
79
+ * @property emptyText - Text shown in the trailing area when `hasAlert` is `false`.
80
+ * @availableWhen emptyText hasAlert==false
81
+ * @slot icon - Optional leading 24px icon.
82
+ * @slot badges - Count badges shown when `hasAlert` is true.
83
+ * @beta
84
+ */
85
+ export declare class ObcAlertSubsystemCounter extends LitElement {
86
+ /** The subsystem label. Pass a full title or an abbreviation as plain text. */
87
+ label: string;
88
+ /** Layout direction: `horizontal` (default) keeps icon, label and badges in one row; `vertical` moves the badges (or empty text) to a line below the label. */
89
+ orientation: ObcAlertSubsystemCounterOrientation;
90
+ /** Whether the subsystem has active alerts. `true` shows the label bold and renders the `badges` slot; `false` mutes the label and shows `emptyText` instead of the badges. */
91
+ hasAlert: boolean;
92
+ /** Text shown in the trailing area when `hasAlert` is `false`. */
93
+ emptyText: string;
94
+ private hasIcon;
95
+ private handleIconSlotChange;
96
+ render(): import('lit-html').TemplateResult<1>;
97
+ static styles: import('lit').CSSResult;
98
+ }
99
+ declare global {
100
+ interface HTMLElementTagNameMap {
101
+ 'obc-alert-subsystem-counter': ObcAlertSubsystemCounter;
102
+ }
103
+ }
104
+ //# sourceMappingURL=alert-subsystem-counter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-subsystem-counter.d.ts","sourceRoot":"","sources":["../../../src/components/alert-subsystem-counter/alert-subsystem-counter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAMhD;;;;;GAKG;AACH,oBAAY,mCAAmC;IAC7C,UAAU,eAAe;IACzB,QAAQ,aAAa;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,qBACa,wBAAyB,SAAQ,UAAU;IAC5B,KAAK,SAAM;IACX,WAAW,EAAE,mCAAmC,CACzB;IACtB,QAAQ,UAAS;IAClB,SAAS,SAAe;IAEzC,OAAO,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,oBAAoB;IAKnB,MAAM;IAwBf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,6BAA6B,EAAE,wBAAwB,CAAC;KACzD;CACF"}
@@ -0,0 +1,79 @@
1
+ import { unsafeCSS, LitElement, html } from "lit";
2
+ import { property, state } from "lit/decorators.js";
3
+ import { classMap } from "lit/directives/class-map.js";
4
+ import componentStyle from "./alert-subsystem-counter.css.js";
5
+ import { customElement } from "../../decorator.js";
6
+ var __defProp = Object.defineProperty;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __decorateClass = (decorators, target, key, kind) => {
9
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
10
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
11
+ if (decorator = decorators[i])
12
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
13
+ if (kind && result) __defProp(target, key, result);
14
+ return result;
15
+ };
16
+ var ObcAlertSubsystemCounterOrientation = /* @__PURE__ */ ((ObcAlertSubsystemCounterOrientation2) => {
17
+ ObcAlertSubsystemCounterOrientation2["Horizontal"] = "horizontal";
18
+ ObcAlertSubsystemCounterOrientation2["Vertical"] = "vertical";
19
+ return ObcAlertSubsystemCounterOrientation2;
20
+ })(ObcAlertSubsystemCounterOrientation || {});
21
+ let ObcAlertSubsystemCounter = class extends LitElement {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.label = "";
25
+ this.orientation = "horizontal";
26
+ this.hasAlert = false;
27
+ this.emptyText = "No alerts";
28
+ this.hasIcon = false;
29
+ }
30
+ handleIconSlotChange(e) {
31
+ const slot = e.target;
32
+ this.hasIcon = slot.assignedNodes({ flatten: true }).length > 0;
33
+ }
34
+ render() {
35
+ return html`
36
+ <div
37
+ class=${classMap({
38
+ frame: true,
39
+ ["orientation-" + this.orientation]: true,
40
+ "has-alert": this.hasAlert
41
+ })}
42
+ >
43
+ <div class="leading-container">
44
+ <div class=${classMap({ icon: true, "no-icon": !this.hasIcon })}>
45
+ <slot name="icon" @slotchange=${this.handleIconSlotChange}></slot>
46
+ </div>
47
+ <div class="label">${this.label}</div>
48
+ </div>
49
+ <div class="trailing-container">
50
+ ${this.hasAlert ? html`<slot name="badges" class="badges"></slot>` : html`<span class="empty">${this.emptyText}</span>`}
51
+ </div>
52
+ </div>
53
+ `;
54
+ }
55
+ };
56
+ ObcAlertSubsystemCounter.styles = unsafeCSS(componentStyle);
57
+ __decorateClass([
58
+ property({ type: String })
59
+ ], ObcAlertSubsystemCounter.prototype, "label", 2);
60
+ __decorateClass([
61
+ property({ type: String })
62
+ ], ObcAlertSubsystemCounter.prototype, "orientation", 2);
63
+ __decorateClass([
64
+ property({ type: Boolean })
65
+ ], ObcAlertSubsystemCounter.prototype, "hasAlert", 2);
66
+ __decorateClass([
67
+ property({ type: String })
68
+ ], ObcAlertSubsystemCounter.prototype, "emptyText", 2);
69
+ __decorateClass([
70
+ state()
71
+ ], ObcAlertSubsystemCounter.prototype, "hasIcon", 2);
72
+ ObcAlertSubsystemCounter = __decorateClass([
73
+ customElement("obc-alert-subsystem-counter")
74
+ ], ObcAlertSubsystemCounter);
75
+ export {
76
+ ObcAlertSubsystemCounter,
77
+ ObcAlertSubsystemCounterOrientation
78
+ };
79
+ //# sourceMappingURL=alert-subsystem-counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-subsystem-counter.js","sources":["../../../src/components/alert-subsystem-counter/alert-subsystem-counter.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport componentStyle from './alert-subsystem-counter.css?inline';\nimport {customElement} from '../../decorator.js';\n\n/**\n * `ObcAlertSubsystemCounterOrientation` – Layout direction for the counter.\n *\n * - `horizontal`: Icon, label, and badges sit in a single row.\n * - `vertical`: Badges (or empty text) sit on their own line below the label.\n */\nexport enum ObcAlertSubsystemCounterOrientation {\n Horizontal = 'horizontal',\n Vertical = 'vertical',\n}\n\n/**\n * `<obc-alert-subsystem-counter>` – A framed summary of a subsystem's alert\n * counts: a leading icon, a label, and a trailing set of slotted count badges.\n *\n * When there are no active alerts it shows a muted label and an empty-state\n * message instead of the badges. The count badges themselves are supplied by\n * the consumer as slotted `obc-badge` elements; this component provides only\n * the frame, layout, label, and empty state.\n *\n * ---\n *\n * ### Features\n * - **Orientation:** `horizontal` (single row) or `vertical` (badges on a line\n * below the label).\n * - **Alert state:** `hasAlert` toggles between an active (bold label, badges)\n * and an inactive (muted label, empty text) presentation.\n * - **Freeform label:** Pass a full title or an abbreviation — the label is\n * plain text decided by the caller and truncates with an ellipsis.\n * - **Configurable empty text:** Customize the message shown when there are no\n * alerts via `emptyText`.\n * - **Optional leading icon:** Provide an icon through the `icon` slot; omit it\n * and the leading box collapses with no empty gap.\n *\n * ---\n *\n * ### Usage Guidelines\n * - Use this component to give an at-a-glance count of outstanding alerts for a\n * single subsystem, grouped by severity.\n * - Provide one slotted badge per severity in the `badges` slot, typically\n * `<obc-badge size=\"large\">` with a severity `type` and a `number`. The\n * badge `type` values are the same severity vocabulary as `AlertType`\n * (`alarm`, `warning`, `caution` and the `level-*` family); order them\n * highest severity first, as `ALERT_SEVERITY_PRIORITY` does.\n * - Set `hasAlert` to `false` to present the resolved/clear state; the badges\n * are then not rendered and `emptyText` is shown. The component does not\n * derive the state from the slotted badges — the consumer owns it.\n * - Choose `vertical` orientation in narrow containers where the badges do not\n * fit beside the label.\n * - The counter is display-only: it renders no button and fires no events. For\n * a clickable subsystem entry with badges, see `obc-tree-navigation-item`\n * (`alertBadges`) or `obc-integration-fleet-button` (`alerts`).\n *\n * ---\n *\n * ### Slots\n *\n * | Slot Name | Renders When... | Purpose |\n * |-----------|------------------------|----------------------------------------------------|\n * | `icon` | The slot has content | Leading 24px icon (e.g. `<obi-placeholder>`). |\n * | `badges` | `hasAlert` is true | Count badges, one per severity (`<obc-badge>`). |\n *\n * ---\n *\n * ### Example\n *\n * ```html\n * <obc-alert-subsystem-counter label=\"Label\" hasAlert>\n * <obi-placeholder slot=\"icon\"></obi-placeholder>\n * <obc-badge slot=\"badges\" size=\"large\" type=\"alarm\" .number=${9}></obc-badge>\n * <obc-badge slot=\"badges\" size=\"large\" type=\"warning\" .number=${4}></obc-badge>\n * <obc-badge slot=\"badges\" size=\"large\" type=\"caution\" .number=${2}></obc-badge>\n * </obc-alert-subsystem-counter>\n * ```\n *\n * @property label - The subsystem label. Pass a full title or an abbreviation as plain text.\n * @property orientation - Layout direction: `horizontal` (default) keeps icon, label and badges in one row; `vertical` moves the badges (or empty text) to a line below the label.\n * @property hasAlert - Whether the subsystem has active alerts. `true` shows the label bold and renders the `badges` slot; `false` mutes the label and shows `emptyText` instead of the badges.\n * @property emptyText - Text shown in the trailing area when `hasAlert` is `false`.\n * @availableWhen emptyText hasAlert==false\n * @slot icon - Optional leading 24px icon.\n * @slot badges - Count badges shown when `hasAlert` is true.\n * @beta\n */\n@customElement('obc-alert-subsystem-counter')\nexport class ObcAlertSubsystemCounter extends LitElement {\n @property({type: String}) label = '';\n @property({type: String}) orientation: ObcAlertSubsystemCounterOrientation =\n ObcAlertSubsystemCounterOrientation.Horizontal;\n @property({type: Boolean}) hasAlert = false;\n @property({type: String}) emptyText = 'No alerts';\n\n @state() private hasIcon = false;\n\n private handleIconSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this.hasIcon = slot.assignedNodes({flatten: true}).length > 0;\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n frame: true,\n ['orientation-' + this.orientation]: true,\n 'has-alert': this.hasAlert,\n })}\n >\n <div class=\"leading-container\">\n <div class=${classMap({icon: true, 'no-icon': !this.hasIcon})}>\n <slot name=\"icon\" @slotchange=${this.handleIconSlotChange}></slot>\n </div>\n <div class=\"label\">${this.label}</div>\n </div>\n <div class=\"trailing-container\">\n ${this.hasAlert\n ? html`<slot name=\"badges\" class=\"badges\"></slot>`\n : html`<span class=\"empty\">${this.emptyText}</span>`}\n </div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-subsystem-counter': ObcAlertSubsystemCounter;\n }\n}\n"],"names":["ObcAlertSubsystemCounterOrientation"],"mappings":";;;;;;;;;;;;;;;AAYO,IAAK,wDAAAA,yCAAL;AACLA,uCAAA,YAAA,IAAa;AACbA,uCAAA,UAAA,IAAW;AAFD,SAAAA;AAAA,GAAA,uCAAA,CAAA,CAAA;AA+EL,IAAM,2BAAN,cAAuC,WAAW;AAAA,EAAlD,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,QAAQ;AACR,SAAA,cACxB;AACyB,SAAA,WAAW;AACZ,SAAA,YAAY;AAE7B,SAAQ,UAAU;AAAA,EAAA;AAAA,EAEnB,qBAAqB,GAAU;AACrC,UAAM,OAAO,EAAE;AACf,SAAK,UAAU,KAAK,cAAc,EAAC,SAAS,KAAA,CAAK,EAAE,SAAS;AAAA,EAC9D;AAAA,EAES,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,OAAO;AAAA,MACP,CAAC,iBAAiB,KAAK,WAAW,GAAG;AAAA,MACrC,aAAa,KAAK;AAAA,IAAA,CACnB,CAAC;AAAA;AAAA;AAAA,uBAGa,SAAS,EAAC,MAAM,MAAM,WAAW,CAAC,KAAK,QAAA,CAAQ,CAAC;AAAA,4CAC3B,KAAK,oBAAoB;AAAA;AAAA,+BAEtC,KAAK,KAAK;AAAA;AAAA;AAAA,YAG7B,KAAK,WACH,mDACA,2BAA2B,KAAK,SAAS,SAAS;AAAA;AAAA;AAAA;AAAA,EAI9D;AAGF;AAvCa,yBAsCK,SAAS,UAAU,cAAc;AArCvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,yBACe,WAAA,SAAA,CAAA;AACA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAFb,yBAEe,WAAA,eAAA,CAAA;AAEC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAJd,yBAIgB,WAAA,YAAA,CAAA;AACD,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GALb,yBAKe,WAAA,aAAA,CAAA;AAET,gBAAA;AAAA,EAAhB,MAAA;AAAM,GAPI,yBAOM,WAAA,WAAA,CAAA;AAPN,2BAAN,gBAAA;AAAA,EADN,cAAc,6BAA6B;AAAA,GAC/B,wBAAA;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oicl/openbridge-webcomponents-full-bundle",
3
- "version": "2.0.0-next.136",
3
+ "version": "2.0.0-next.138",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,3 @@
1
+ .thumb {
2
+ cursor: default; /* display-only symbol, nothing to select */
3
+ }
@@ -0,0 +1,18 @@
1
+ import type {Meta, StoryObj} from '@storybook/web-components-vite';
2
+ import {ObcHydraulicCheckValve} from './hydraulic-check-valve.js';
3
+ import './hydraulic-check-valve.js';
4
+
5
+ const meta: Meta<typeof ObcHydraulicCheckValve> = {
6
+ title: 'Automation/Hydraulic Valves/Check Valve',
7
+ tags: ['autodocs', '6.1', 'experimental'],
8
+ component: 'obc-hydraulic-check-valve',
9
+ } satisfies Meta<ObcHydraulicCheckValve>;
10
+
11
+ export default meta;
12
+ type Story = StoryObj<ObcHydraulicCheckValve>;
13
+
14
+ export const Default: Story = {};
15
+
16
+ export const Vertical: Story = {
17
+ args: {vertical: true},
18
+ };