@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.143 → 2.0.0-next.145

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 (59) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +4865 -4498
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +259 -40
  4. package/dist/components/app-button/app-button.css.js +56 -0
  5. package/dist/components/app-button/app-button.css.js.map +1 -1
  6. package/dist/components/checkbox-item/checkbox-item.css.js +137 -12
  7. package/dist/components/checkbox-item/checkbox-item.css.js.map +1 -1
  8. package/dist/components/checkbox-item/checkbox-item.d.ts +68 -39
  9. package/dist/components/checkbox-item/checkbox-item.d.ts.map +1 -1
  10. package/dist/components/checkbox-item/checkbox-item.js +66 -25
  11. package/dist/components/checkbox-item/checkbox-item.js.map +1 -1
  12. package/dist/components/checkbox-list/checkbox-list-visibility.d.ts +16 -0
  13. package/dist/components/checkbox-list/checkbox-list-visibility.d.ts.map +1 -0
  14. package/dist/components/checkbox-list/checkbox-list-visibility.js +12 -0
  15. package/dist/components/checkbox-list/checkbox-list-visibility.js.map +1 -0
  16. package/dist/components/checkbox-list/checkbox-list.css.js +23 -0
  17. package/dist/components/checkbox-list/checkbox-list.css.js.map +1 -0
  18. package/dist/components/checkbox-list/checkbox-list.d.ts +66 -0
  19. package/dist/components/checkbox-list/checkbox-list.d.ts.map +1 -0
  20. package/dist/components/checkbox-list/checkbox-list.js +81 -0
  21. package/dist/components/checkbox-list/checkbox-list.js.map +1 -0
  22. package/dist/integration-systems/integration-app-bar/integration-app-bar.css.js +12 -1
  23. package/dist/integration-systems/integration-app-bar/integration-app-bar.css.js.map +1 -1
  24. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts +2 -2
  25. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts.map +1 -1
  26. package/dist/integration-systems/integration-app-bar/integration-app-bar.js +1 -21
  27. package/dist/integration-systems/integration-app-bar/integration-app-bar.js.map +1 -1
  28. package/dist/navigation-instruments/readout/readout.d.ts +11 -2
  29. package/dist/navigation-instruments/readout/readout.d.ts.map +1 -1
  30. package/dist/navigation-instruments/readout/readout.js +18 -0
  31. package/dist/navigation-instruments/readout/readout.js.map +1 -1
  32. package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js +25 -0
  33. package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js.map +1 -1
  34. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts +20 -4
  35. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts.map +1 -1
  36. package/dist/navigation-instruments/readout-list-item/readout-list-item.js +18 -6
  37. package/dist/navigation-instruments/readout-list-item/readout-list-item.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/components/app-button/app-button.css +2 -0
  40. package/src/components/app-button/app-button.stories.ts +26 -0
  41. package/src/components/checkbox-item/checkbox-item.css +63 -17
  42. package/src/components/checkbox-item/checkbox-item.spec.ts +115 -0
  43. package/src/components/checkbox-item/checkbox-item.stories.ts +82 -97
  44. package/src/components/checkbox-item/checkbox-item.ts +118 -64
  45. package/src/components/checkbox-list/checkbox-list-visibility.spec.ts +68 -0
  46. package/src/components/checkbox-list/checkbox-list-visibility.ts +23 -0
  47. package/src/components/checkbox-list/checkbox-list.css +13 -0
  48. package/src/components/checkbox-list/checkbox-list.spec.ts +93 -0
  49. package/src/components/checkbox-list/checkbox-list.stories.ts +161 -0
  50. package/src/components/checkbox-list/checkbox-list.ts +130 -0
  51. package/src/integration-systems/integration-app-bar/integration-app-bar-sizing.stories.ts +130 -0
  52. package/src/integration-systems/integration-app-bar/integration-app-bar.css +11 -1
  53. package/src/integration-systems/integration-app-bar/integration-app-bar.ts +3 -27
  54. package/src/navigation-instruments/readout/readout.stories.ts +57 -4
  55. package/src/navigation-instruments/readout/readout.ts +28 -1
  56. package/src/navigation-instruments/readout-list/readout-list.stories.ts +62 -2
  57. package/src/navigation-instruments/readout-list-item/readout-list-item.css +21 -0
  58. package/src/navigation-instruments/readout-list-item/readout-list-item.stories.ts +56 -3
  59. package/src/navigation-instruments/readout-list-item/readout-list-item.ts +37 -19
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-item.js","sources":["../../../src/components/checkbox-item/checkbox-item.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {customElement} from '../../decorator.js';\nimport componentStyle from './checkbox-item.css?inline';\nimport '../checkbox/checkbox.js';\nimport '../../icons/icon-chevron-right-google.js';\nimport {\n CheckboxState,\n CheckboxStatus,\n type ObcCheckboxChangeEvent,\n} from '../checkbox/checkbox.js';\n\nexport enum ObcCheckboxItemState {\n enabled = 'enabled',\n disabled = 'disabled',\n}\n\nexport enum ObcCheckboxItemHoverStyle {\n touchTarget = 'touch-target',\n visualTarget = 'visual-target',\n}\n\n/**\n * `<obc-checkbox-item>` – A list-item wrapper for `<obc-checkbox>` with label\n * and optional nested indentation affordances.\n *\n * ### Overview\n * Combines checkbox interaction with a row-like container used in menus and\n * hierarchical selection lists. The component proxies checkbox state changes,\n * supports touch-target or visual-target interaction behavior, and can render\n * nested structure indicators.\n *\n * ### Features\n * - Three checkbox statuses: `unchecked`, `checked`, `mixed`.\n * - Item state control: `enabled` or `disabled`.\n * - Two hover/focus interaction modes: `touch-target` and `visual-target`.\n * - Optional nested layout controls via `isNested`, `isLevel1`, `isLevel2`.\n * - Forwards `aria-describedby` to the inner checkbox for assistive context.\n *\n * ### Variants\n * - **Nested level 1:** Chevron icon is shown.\n * - **Nested level 2:** Chevron slot is reserved and nested spacer is shown.\n *\n * ### Usage Guidelines\n * - Use for checkbox rows that require text labels and optional hierarchy.\n * - Keep `status` as the source of truth for checked/mixed/unchecked value.\n * - Use `state=\"disabled\"` or `disabled` to lock interaction.\n * - Prefer `hoverStyle=\"touch-target\"` for standard list behavior.\n *\n * ### Slots / Content\n * - No named slots. Label content is provided through the `label` property.\n *\n * ### Events\n * - `change` – Fired when status changes (from row click or inner checkbox).\n * **detail:** `{ status, disabled }`\n *\n * ### Best Practices\n * - Provide non-empty `label` for accessible naming.\n * - Use `aria-describedby` when additional contextual text exists outside.\n * - For deep hierarchies, use `isNested` with `isLevel1` / `isLevel2`\n * consistently to preserve spacing and alignment.\n *\n * ### Example\n * ```html\n * <obc-checkbox-item\n * status=\"mixed\"\n * label=\"Include archived items\"\n * hoverStyle=\"touch-target\"\n * ></obc-checkbox-item>\n * ```\n *\n * @availableWhen isLevel1 isNested==true || hoverStyle==visual-target\n * @availableWhen isLevel2 isNested==true || hoverStyle==visual-target\n * @slot - No named slots.\n * @fires {ObcCheckboxChangeEvent} change - Emitted when status changes.\n * @stable\n */\n@customElement('obc-checkbox-item')\nexport class ObcCheckboxItem extends LitElement {\n @property({type: String}) status: CheckboxStatus = CheckboxStatus.unchecked;\n\n @property({type: String}) state: ObcCheckboxItemState =\n ObcCheckboxItemState.enabled;\n\n @property({type: Boolean}) disabled = false;\n\n @property({type: String}) label = '';\n\n @property({type: Boolean, reflect: true}) isNested = false;\n\n @property({type: Boolean, reflect: true}) isLevel1 = false;\n\n @property({type: Boolean, reflect: true}) isLevel2 = false;\n\n @property({type: String}) hoverStyle: ObcCheckboxItemHoverStyle =\n ObcCheckboxItemHoverStyle.touchTarget;\n\n @property({type: String, attribute: 'aria-describedby', reflect: true})\n ariaDescribedBy = '';\n\n @query('obc-checkbox') private checkboxElement?: HTMLElement;\n\n private toggleStatusFromItem() {\n const isDisabled =\n this.disabled || this.state === ObcCheckboxItemState.disabled;\n\n if (this.status === CheckboxStatus.checked) {\n this.status = CheckboxStatus.unchecked;\n } else {\n this.status = CheckboxStatus.checked;\n }\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: {\n status: this.status,\n disabled: isDisabled,\n },\n })\n );\n }\n\n private handleItemClick(event: MouseEvent) {\n if (this.disabled || this.state === ObcCheckboxItemState.disabled) return;\n\n const path = event.composedPath();\n const checkboxElement = this.checkboxElement;\n if (checkboxElement && path.includes(checkboxElement)) return;\n\n this.toggleStatusFromItem();\n }\n\n private handleCheckboxChange(event: Event) {\n const checkboxEvent = event as ObcCheckboxChangeEvent;\n this.status = checkboxEvent.detail.status;\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: checkboxEvent.detail,\n })\n );\n }\n\n public override focus(options?: FocusOptions): void {\n this.checkboxElement?.focus(options);\n }\n\n override render() {\n const isDisabled =\n this.disabled || this.state === ObcCheckboxItemState.disabled;\n const hasCheckboxHoverEffects = !(\n this.hoverStyle === ObcCheckboxItemHoverStyle.touchTarget && !isDisabled\n );\n const shouldRenderNestedSpacer = this.isNested && this.isLevel2;\n const shouldRenderChevronContainer = this.isNested;\n const shouldRenderChevronIcon = this.isNested && this.isLevel1;\n const checkboxAriaLabel =\n this.label.trim().length > 0 ? this.label : undefined;\n\n return html`\n <div\n class=${classMap({\n 'checkbox-item-container': true,\n [`status-${this.status}`]: true,\n [`hover-style-${this.hoverStyle}`]: true,\n 'is-nested': this.isNested,\n 'is-level-1': this.isLevel1,\n 'is-level-2': this.isLevel2,\n disabled: isDisabled,\n })}\n @click=${this.handleItemClick}\n >\n ${shouldRenderChevronContainer\n ? html`<div class=\"chevron-container\" aria-hidden=\"true\">\n ${shouldRenderChevronIcon\n ? html`<obi-chevron-right-google\n class=\"chevron-icon\"\n ></obi-chevron-right-google>`\n : nothing}\n </div>`\n : nothing}\n ${shouldRenderNestedSpacer\n ? html`<div class=\"nested-spacer\" aria-hidden=\"true\"></div>`\n : nothing}\n <div class=\"content-container\">\n <obc-checkbox\n .status=${this.status}\n .state=${CheckboxState.enabled}\n .disabled=${isDisabled}\n .hasHoverEffects=${hasCheckboxHoverEffects}\n aria-label=${ifDefined(checkboxAriaLabel)}\n aria-describedby=${ifDefined(this.ariaDescribedBy || undefined)}\n @change=${this.handleCheckboxChange}\n ></obc-checkbox>\n <div class=\"checkbox-label-container\">\n <span class=\"checkbox-label\">${this.label}</span>\n </div>\n </div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-checkbox-item': ObcCheckboxItem;\n }\n}\n"],"names":["ObcCheckboxItemState","ObcCheckboxItemHoverStyle"],"mappings":"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"}
1
+ {"version":3,"file":"checkbox-item.js","sources":["../../../src/components/checkbox-item/checkbox-item.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport {customElement} from '../../decorator.js';\nimport componentStyle from './checkbox-item.css?inline';\nimport '../checkbox/checkbox.js';\nimport '../../icons/icon-chevron-right-google.js';\nimport '../../icons/icon-chevron-down-google.js';\nimport {\n CheckboxState,\n CheckboxStatus,\n type ObcCheckboxChangeEvent,\n} from '../checkbox/checkbox.js';\n\nexport enum ObcCheckboxItemState {\n enabled = 'enabled',\n disabled = 'disabled',\n}\n\nexport enum ObcCheckboxItemHoverStyle {\n touchTarget = 'touch-target',\n visualTarget = 'visual-target',\n}\n\nexport type ObcCheckboxItemExpandToggleEvent = CustomEvent<boolean>;\n\n/**\n * `<obc-checkbox-item>` – A list row that pairs `<obc-checkbox>` with a label,\n * an optional description, and hierarchy affordances for nested lists.\n *\n * ### Overview\n * The row is the touch target: clicking anywhere on it toggles the checkbox,\n * except on the chevron button, which only asks to expand or collapse. Depth\n * is a number (`level`); the row indents itself so a flat sequence of rows\n * reads as a tree. `<obc-checkbox-list>` builds on this to hide the rows\n * under a collapsed parent.\n *\n * ### Features\n * - Three statuses: `unchecked`, `checked`, `mixed`.\n * - `touch-target` or `visual-target` hover treatment.\n * - `level` indentation: level 1 reserves the chevron slot, each further\n * level adds a spacer.\n * - `expandable` rows show a chevron button that fires `expand-toggle`; the\n * host owns `expanded`.\n * - Optional `description` line under the label.\n * - Forwards `aria-describedby` to the inner checkbox.\n *\n * ### Usage Guidelines\n * - Keep `status` as the source of truth; update it from the `change` event.\n * - Set `expanded` in response to `expand-toggle` — the row never flips it\n * itself, so a parent (or `<obc-checkbox-list>`) can veto or persist it.\n * - Use `level` 0 for a plain list; start at 1 when any row in the list is\n * expandable so chevrons and checkboxes line up.\n * - Prefer `hoverStyle=\"touch-target\"` for standard list behaviour.\n *\n * ### Accessibility\n * The checkbox and the chevron are separate controls in the natural tab\n * order. The chevron is a native button named by the row's label, with the\n * state in `aria-expanded`, following the WAI-ARIA checkbox and disclosure\n * button patterns.\n *\n * ### Example\n * ```html\n * <obc-checkbox-item\n * level=\"1\"\n * expandable\n * expanded\n * status=\"mixed\"\n * label=\"Reports\"\n * ></obc-checkbox-item>\n * <obc-checkbox-item\n * level=\"2\"\n * status=\"checked\"\n * label=\"Monthly\"\n * description=\"Sent on the 1st\"\n * ></obc-checkbox-item>\n * ```\n *\n * @property status - Checkbox status: `unchecked`, `checked` or `mixed`.\n * @property state - Item state: `enabled` or `disabled`.\n * @property disabled - Disables the row and the inner checkbox.\n * @property label - Text label; also the checkbox's accessible name.\n * @property description - Secondary line under the label; hidden when empty.\n * @property level - Depth in a nested list. 0 is a plain row; 1 reserves the chevron slot; each level above 1 adds a spacer.\n * @property expandable - Shows the chevron button that fires `expand-toggle`.\n * @property expanded - Whether the row's children are shown; drives the chevron direction and `aria-expanded`.\n * @availableWhen expanded expandable==true\n * @property hoverStyle - Which box shows hover and focus: the whole row (`touch-target`) or the checkbox (`visual-target`).\n * @property ariaDescribedBy - Forwarded to the inner checkbox as `aria-describedby`.\n * @fires {ObcCheckboxChangeEvent} change - Emitted when status changes.\n * @fires {ObcCheckboxItemExpandToggleEvent} expand-toggle - Emitted when the chevron is activated; detail is the next `expanded` value. Bubbles and is composed.\n * @stable\n */\n@customElement('obc-checkbox-item')\nexport class ObcCheckboxItem extends LitElement {\n @property({type: String}) status: CheckboxStatus = CheckboxStatus.unchecked;\n\n @property({type: String}) state: ObcCheckboxItemState =\n ObcCheckboxItemState.enabled;\n\n @property({type: Boolean}) disabled = false;\n\n @property({type: String}) label = '';\n\n @property({type: String}) description = '';\n\n @property({type: Number, reflect: true}) level = 0;\n\n @property({type: Boolean, reflect: true}) expandable = false;\n\n @property({type: Boolean, reflect: true}) expanded = false;\n\n @property({type: String}) hoverStyle: ObcCheckboxItemHoverStyle =\n ObcCheckboxItemHoverStyle.touchTarget;\n\n @property({type: String, attribute: 'aria-describedby', reflect: true})\n ariaDescribedBy = '';\n\n @query('obc-checkbox') private checkboxElement?: HTMLElement;\n\n @query('.chevron-button') private chevronButton?: HTMLElement;\n\n private get isDisabled(): boolean {\n return this.disabled || this.state === ObcCheckboxItemState.disabled;\n }\n\n private toggleStatusFromItem() {\n if (this.status === CheckboxStatus.checked) {\n this.status = CheckboxStatus.unchecked;\n } else {\n this.status = CheckboxStatus.checked;\n }\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: {\n status: this.status,\n disabled: this.isDisabled,\n },\n })\n );\n }\n\n private handleItemClick(event: MouseEvent) {\n if (this.isDisabled) return;\n\n const path = event.composedPath();\n if (this.checkboxElement && path.includes(this.checkboxElement)) return;\n if (this.chevronButton && path.includes(this.chevronButton)) return;\n\n this.toggleStatusFromItem();\n }\n\n private handleChevronClick(event: MouseEvent) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<boolean>('expand-toggle', {\n detail: !this.expanded,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private handleCheckboxChange(event: Event) {\n const checkboxEvent = event as ObcCheckboxChangeEvent;\n this.status = checkboxEvent.detail.status;\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: checkboxEvent.detail,\n })\n );\n }\n\n public override focus(options?: FocusOptions): void {\n this.checkboxElement?.focus(options);\n }\n\n private renderChevron() {\n if (!this.expandable) return nothing;\n return html`<button\n type=\"button\"\n class=\"chevron-button\"\n aria-expanded=${this.expanded ? 'true' : 'false'}\n aria-label=${ifDefined(this.label.trim() || undefined)}\n ?disabled=${this.isDisabled}\n @click=${this.handleChevronClick}\n >\n <span class=\"chevron-visible\">\n ${this.expanded\n ? html`<obi-chevron-down-google\n class=\"chevron-icon\"\n ></obi-chevron-down-google>`\n : html`<obi-chevron-right-google\n class=\"chevron-icon\"\n ></obi-chevron-right-google>`}\n </span>\n </button>`;\n }\n\n override render() {\n const isDisabled = this.isDisabled;\n const hasCheckboxHoverEffects = !(\n this.hoverStyle === ObcCheckboxItemHoverStyle.touchTarget && !isDisabled\n );\n const depth = Math.max(0, Math.floor(this.level) - 1);\n const hasChevronSlot = this.level >= 1 || this.expandable;\n const checkboxAriaLabel =\n this.label.trim().length > 0 ? this.label : undefined;\n\n return html`\n <div\n class=${classMap({\n 'checkbox-item-container': true,\n [`status-${this.status}`]: true,\n [`hover-style-${this.hoverStyle}`]: true,\n 'is-nested': hasChevronSlot,\n 'has-description': this.description !== '',\n disabled: isDisabled,\n })}\n @click=${this.handleItemClick}\n >\n ${depth > 0\n ? html`<div\n class=\"nested-spacer\"\n aria-hidden=\"true\"\n style=${styleMap({'--checkbox-item-depth': String(depth)})}\n ></div>`\n : nothing}\n ${hasChevronSlot\n ? html`<div class=\"chevron-container\">${this.renderChevron()}</div>`\n : nothing}\n <div class=\"content-container\">\n <obc-checkbox\n .status=${this.status}\n .state=${CheckboxState.enabled}\n .disabled=${isDisabled}\n .hasHoverEffects=${hasCheckboxHoverEffects}\n aria-label=${ifDefined(checkboxAriaLabel)}\n aria-describedby=${ifDefined(this.ariaDescribedBy || undefined)}\n @change=${this.handleCheckboxChange}\n ></obc-checkbox>\n <div class=\"checkbox-label-container\">\n <span class=\"checkbox-label\">${this.label}</span>\n ${this.description\n ? html`<span class=\"checkbox-description\"\n >${this.description}</span\n >`\n : nothing}\n </div>\n </div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-checkbox-item': ObcCheckboxItem;\n }\n}\n"],"names":["ObcCheckboxItemState","ObcCheckboxItemHoverStyle"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBO,IAAK,yCAAAA,0BAAL;AACLA,wBAAA,SAAA,IAAU;AACVA,wBAAA,UAAA,IAAW;AAFD,SAAAA;AAAA,GAAA,wBAAA,CAAA,CAAA;AAKL,IAAK,8CAAAC,+BAAL;AACLA,6BAAA,aAAA,IAAc;AACdA,6BAAA,cAAA,IAAe;AAFL,SAAAA;AAAA,GAAA,6BAAA,CAAA,CAAA;AA2EL,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,SAAyB,eAAe;AAExC,SAAA,QACxB;AAEyB,SAAA,WAAW;AAEZ,SAAA,QAAQ;AAER,SAAA,cAAc;AAEC,SAAA,QAAQ;AAEP,SAAA,aAAa;AAEb,SAAA,WAAW;AAE3B,SAAA,aACxB;AAGF,SAAA,kBAAkB;AAAA,EAAA;AAAA,EAMlB,IAAY,aAAsB;AAChC,WAAO,KAAK,YAAY,KAAK,UAAU;AAAA,EACzC;AAAA,EAEQ,uBAAuB;AAC7B,QAAI,KAAK,WAAW,eAAe,SAAS;AAC1C,WAAK,SAAS,eAAe;AAAA,IAC/B,OAAO;AACL,WAAK,SAAS,eAAe;AAAA,IAC/B;AAEA,SAAK;AAAA,MACH,IAAI,YAAY,UAAU;AAAA,QACxB,QAAQ;AAAA,UACN,QAAQ,KAAK;AAAA,UACb,UAAU,KAAK;AAAA,QAAA;AAAA,MACjB,CACD;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,gBAAgB,OAAmB;AACzC,QAAI,KAAK,WAAY;AAErB,UAAM,OAAO,MAAM,aAAA;AACnB,QAAI,KAAK,mBAAmB,KAAK,SAAS,KAAK,eAAe,EAAG;AACjE,QAAI,KAAK,iBAAiB,KAAK,SAAS,KAAK,aAAa,EAAG;AAE7D,SAAK,qBAAA;AAAA,EACP;AAAA,EAEQ,mBAAmB,OAAmB;AAC5C,UAAM,gBAAA;AACN,SAAK;AAAA,MACH,IAAI,YAAqB,iBAAiB;AAAA,QACxC,QAAQ,CAAC,KAAK;AAAA,QACd,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,qBAAqB,OAAc;AACzC,UAAM,gBAAgB;AACtB,SAAK,SAAS,cAAc,OAAO;AAEnC,SAAK;AAAA,MACH,IAAI,YAAY,UAAU;AAAA,QACxB,QAAQ,cAAc;AAAA,MAAA,CACvB;AAAA,IAAA;AAAA,EAEL;AAAA,EAEgB,MAAM,SAA8B;AAClD,SAAK,iBAAiB,MAAM,OAAO;AAAA,EACrC;AAAA,EAEQ,gBAAgB;AACtB,QAAI,CAAC,KAAK,WAAY,QAAO;AAC7B,WAAO;AAAA;AAAA;AAAA,sBAGW,KAAK,WAAW,SAAS,OAAO;AAAA,mBACnC,UAAU,KAAK,MAAM,KAAA,KAAU,MAAS,CAAC;AAAA,kBAC1C,KAAK,UAAU;AAAA,eAClB,KAAK,kBAAkB;AAAA;AAAA;AAAA,UAG5B,KAAK,WACH;AAAA;AAAA,2CAGA;AAAA;AAAA,yCAE6B;AAAA;AAAA;AAAA,EAGvC;AAAA,EAES,SAAS;AAChB,UAAM,aAAa,KAAK;AACxB,UAAM,0BAA0B,EAC9B,KAAK,eAAe,kBAAyC,CAAC;AAEhE,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,KAAK,IAAI,CAAC;AACpD,UAAM,iBAAiB,KAAK,SAAS,KAAK,KAAK;AAC/C,UAAM,oBACJ,KAAK,MAAM,KAAA,EAAO,SAAS,IAAI,KAAK,QAAQ;AAE9C,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,2BAA2B;AAAA,MAC3B,CAAC,UAAU,KAAK,MAAM,EAAE,GAAG;AAAA,MAC3B,CAAC,eAAe,KAAK,UAAU,EAAE,GAAG;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB,KAAK,gBAAgB;AAAA,MACxC,UAAU;AAAA,IAAA,CACX,CAAC;AAAA,iBACO,KAAK,eAAe;AAAA;AAAA,UAE3B,QAAQ,IACN;AAAA;AAAA;AAAA,sBAGU,SAAS,EAAC,yBAAyB,OAAO,KAAK,EAAA,CAAE,CAAC;AAAA,uBAE5D,OAAO;AAAA,UACT,iBACE,sCAAsC,KAAK,cAAA,CAAe,WAC1D,OAAO;AAAA;AAAA;AAAA,sBAGG,KAAK,MAAM;AAAA,qBACZ,cAAc,OAAO;AAAA,wBAClB,UAAU;AAAA,+BACH,uBAAuB;AAAA,yBAC7B,UAAU,iBAAiB,CAAC;AAAA,+BACtB,UAAU,KAAK,mBAAmB,MAAS,CAAC;AAAA,sBACrD,KAAK,oBAAoB;AAAA;AAAA;AAAA,2CAGJ,KAAK,KAAK;AAAA,cACvC,KAAK,cACH;AAAA,qBACK,KAAK,WAAW;AAAA,qBAErB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrB;AAGF;AAnKa,gBAkKK,SAAS,UAAU,cAAc;AAjKvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,gBACe,WAAA,UAAA,CAAA;AAEA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAHb,gBAGe,WAAA,SAAA,CAAA;AAGC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GANd,gBAMgB,WAAA,YAAA,CAAA;AAED,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GARb,gBAQe,WAAA,SAAA,CAAA;AAEA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAVb,gBAUe,WAAA,eAAA,CAAA;AAEe,gBAAA;AAAA,EAAxC,SAAS,EAAC,MAAM,QAAQ,SAAS,MAAK;AAAA,GAZ5B,gBAY8B,WAAA,SAAA,CAAA;AAEC,gBAAA;AAAA,EAAzC,SAAS,EAAC,MAAM,SAAS,SAAS,MAAK;AAAA,GAd7B,gBAc+B,WAAA,cAAA,CAAA;AAEA,gBAAA;AAAA,EAAzC,SAAS,EAAC,MAAM,SAAS,SAAS,MAAK;AAAA,GAhB7B,gBAgB+B,WAAA,YAAA,CAAA;AAEhB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAlBb,gBAkBe,WAAA,cAAA,CAAA;AAI1B,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,QAAQ,WAAW,oBAAoB,SAAS,MAAK;AAAA,GArB3D,gBAsBX,WAAA,mBAAA,CAAA;AAE+B,gBAAA;AAAA,EAA9B,MAAM,cAAc;AAAA,GAxBV,gBAwBoB,WAAA,mBAAA,CAAA;AAEG,gBAAA;AAAA,EAAjC,MAAM,iBAAiB;AAAA,GA1Bb,gBA0BuB,WAAA,iBAAA,CAAA;AA1BvB,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Visibility of a flat checkbox-item sequence
3
+ *
4
+ * `<obc-checkbox-list>` keeps its rows flat and infers the tree from each
5
+ * row's `level`. A row is hidden while a preceding, visible, collapsed
6
+ * expandable row of smaller level is still "open" — that is, until a row of
7
+ * equal or smaller level closes it. Kept free of DOM so it can be unit-tested.
8
+ * @module
9
+ */
10
+ export interface CheckboxListRow {
11
+ level: number;
12
+ expandable: boolean;
13
+ expanded: boolean;
14
+ }
15
+ export declare function computeHiddenRows(rows: readonly CheckboxListRow[]): boolean[];
16
+ //# sourceMappingURL=checkbox-list-visibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-list-visibility.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox-list/checkbox-list-visibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,EAAE,CAO7E"}
@@ -0,0 +1,12 @@
1
+ function computeHiddenRows(rows) {
2
+ let cutLevel = null;
3
+ return rows.map((row) => {
4
+ if (cutLevel !== null && row.level > cutLevel) return true;
5
+ cutLevel = row.expandable && !row.expanded ? row.level : null;
6
+ return false;
7
+ });
8
+ }
9
+ export {
10
+ computeHiddenRows
11
+ };
12
+ //# sourceMappingURL=checkbox-list-visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-list-visibility.js","sources":["../../../src/components/checkbox-list/checkbox-list-visibility.ts"],"sourcesContent":["/**\n * Visibility of a flat checkbox-item sequence\n *\n * `<obc-checkbox-list>` keeps its rows flat and infers the tree from each\n * row's `level`. A row is hidden while a preceding, visible, collapsed\n * expandable row of smaller level is still \"open\" — that is, until a row of\n * equal or smaller level closes it. Kept free of DOM so it can be unit-tested.\n * @module\n */\nexport interface CheckboxListRow {\n level: number;\n expandable: boolean;\n expanded: boolean;\n}\n\nexport function computeHiddenRows(rows: readonly CheckboxListRow[]): boolean[] {\n let cutLevel: number | null = null;\n return rows.map((row) => {\n if (cutLevel !== null && row.level > cutLevel) return true;\n cutLevel = row.expandable && !row.expanded ? row.level : null;\n return false;\n });\n}\n"],"names":[],"mappings":"AAeO,SAAS,kBAAkB,MAA6C;AAC7E,MAAI,WAA0B;AAC9B,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,QAAI,aAAa,QAAQ,IAAI,QAAQ,SAAU,QAAO;AACtD,eAAW,IAAI,cAAc,CAAC,IAAI,WAAW,IAAI,QAAQ;AACzD,WAAO;AAAA,EACT,CAAC;AACH;"}
@@ -0,0 +1,23 @@
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
+ .list {
11
+ display: flex;
12
+ flex-direction: column;
13
+ align-items: stretch;
14
+ }
15
+
16
+ ::slotted([hidden]) {
17
+ display: none; /* collapsed rows leave layout; :host is display:block so [hidden] alone would not win */
18
+ }
19
+ `;
20
+ export {
21
+ componentStyle as default
22
+ };
23
+ //# sourceMappingURL=checkbox-list.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-list.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,66 @@
1
+ import { LitElement, PropertyValues } from 'lit';
2
+ import { ObcCheckboxItemHoverStyle } from '../checkbox-item/checkbox-item.js';
3
+ /**
4
+ * `<obc-checkbox-list>` – A vertical list of `<obc-checkbox-item>` rows that
5
+ * collapses the rows under a closed parent.
6
+ *
7
+ * ### Overview
8
+ * Rows are slotted flat, in document order; the tree is read from each row's
9
+ * `level`. When an expandable row is collapsed, the list sets `hidden` on
10
+ * every following row with a greater level until a row of equal or smaller
11
+ * level. The list also applies its `hoverStyle` to every row so a list reads
12
+ * as one surface.
13
+ *
14
+ * ### Features
15
+ * - Flat markup, level-driven hierarchy — no nesting of elements required.
16
+ * - Handles `expand-toggle`: sets the row's `expanded` and recomputes.
17
+ * - Reacts to `expandable`, `expanded` and `level` changes made from outside.
18
+ * - `hoverStyle` forwarded to slotted rows, including rows added later.
19
+ *
20
+ * ### Usage Guidelines
21
+ * - Start levels at 1 when any row is expandable so chevrons and checkboxes
22
+ * align; use level 0 for a plain list.
23
+ * - The list owns the `hidden` attribute of its rows; do not bind it yourself.
24
+ * - Selection stays per row: listen to each row's `change`.
25
+ *
26
+ * ### Accessibility
27
+ * The host is the `role="group"`; rows are ordinary checkboxes and buttons in
28
+ * the natural tab order and hidden rows leave it. This is a group of
29
+ * checkboxes with disclosure buttons, not a tree widget, so there is no
30
+ * roving tabindex. Name the group with `aria-label` or `aria-labelledby` on
31
+ * the host.
32
+ *
33
+ * ### Example
34
+ * ```html
35
+ * <obc-checkbox-list aria-label="Report types">
36
+ * <obc-checkbox-item level="1" expandable expanded status="mixed" label="Reports"></obc-checkbox-item>
37
+ * <obc-checkbox-item level="2" status="checked" label="Monthly"></obc-checkbox-item>
38
+ * <obc-checkbox-item level="2" label="Quarterly"></obc-checkbox-item>
39
+ * <obc-checkbox-item level="1" expandable label="Archive"></obc-checkbox-item>
40
+ * </obc-checkbox-list>
41
+ * ```
42
+ *
43
+ * @property hoverStyle - Hover treatment applied to every slotted row: `touch-target` or `visual-target`.
44
+ * @slot - `obc-checkbox-item` rows in document order; hierarchy comes from each row's `level`.
45
+ * @beta
46
+ */
47
+ export declare class ObcCheckboxList extends LitElement {
48
+ /** Hover treatment applied to every slotted row: `touch-target` or `visual-target`. */
49
+ hoverStyle: ObcCheckboxItemHoverStyle;
50
+ private mutationObserver?;
51
+ connectedCallback(): void;
52
+ disconnectedCallback(): void;
53
+ firstUpdated(): void;
54
+ updated(changed: PropertyValues<this>): void;
55
+ private onExpandToggle;
56
+ private rows;
57
+ private sync;
58
+ render(): import('lit-html').TemplateResult<1>;
59
+ static styles: import('lit').CSSResult;
60
+ }
61
+ declare global {
62
+ interface HTMLElementTagNameMap {
63
+ 'obc-checkbox-list': ObcCheckboxList;
64
+ }
65
+ }
66
+ //# sourceMappingURL=checkbox-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-list.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox-list/checkbox-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAmB,KAAK,cAAc,EAAC,MAAM,KAAK,CAAC;AAIrE,OAAO,EAEL,yBAAyB,EAE1B,MAAM,mCAAmC,CAAC;AAG3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBACa,eAAgB,SAAQ,UAAU;IACnB,UAAU,EAAE,yBAAyB,CACvB;IAExC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAEnC,iBAAiB,IAAI,IAAI;IAiBzB,oBAAoB,IAAI,IAAI;IAO5B,YAAY,IAAI,IAAI;IAIpB,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAIrD,OAAO,CAAC,cAAc,CAKpB;IAEF,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,IAAI;IASH,MAAM;IAMf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
@@ -0,0 +1,81 @@
1
+ import { unsafeCSS, LitElement, html } from "lit";
2
+ import { property } from "lit/decorators.js";
3
+ import { customElement } from "../../decorator.js";
4
+ import componentStyle from "./checkbox-list.css.js";
5
+ import { ObcCheckboxItemHoverStyle, ObcCheckboxItem } from "../checkbox-item/checkbox-item.js";
6
+ import { computeHiddenRows } from "./checkbox-list-visibility.js";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __decorateClass = (decorators, target, key, kind) => {
10
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
11
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
12
+ if (decorator = decorators[i])
13
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
14
+ if (kind && result) __defProp(target, key, result);
15
+ return result;
16
+ };
17
+ let ObcCheckboxList = class extends LitElement {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.hoverStyle = ObcCheckboxItemHoverStyle.touchTarget;
21
+ this.onExpandToggle = (event) => {
22
+ const row = event.target;
23
+ if (!(row instanceof ObcCheckboxItem)) return;
24
+ row.expanded = event.detail;
25
+ this.sync();
26
+ };
27
+ }
28
+ connectedCallback() {
29
+ super.connectedCallback();
30
+ if (!this.hasAttribute("role")) this.setAttribute("role", "group");
31
+ this.mutationObserver = new MutationObserver(() => this.sync());
32
+ this.mutationObserver.observe(this, {
33
+ childList: true,
34
+ attributes: true,
35
+ attributeFilter: ["expandable", "expanded", "level"],
36
+ subtree: true
37
+ });
38
+ this.addEventListener("expand-toggle", this.onExpandToggle);
39
+ }
40
+ disconnectedCallback() {
41
+ super.disconnectedCallback();
42
+ this.mutationObserver?.disconnect();
43
+ this.mutationObserver = void 0;
44
+ this.removeEventListener("expand-toggle", this.onExpandToggle);
45
+ }
46
+ firstUpdated() {
47
+ this.sync();
48
+ }
49
+ updated(changed) {
50
+ if (changed.has("hoverStyle")) this.sync();
51
+ }
52
+ rows() {
53
+ return Array.from(this.children).filter(
54
+ (el) => el instanceof ObcCheckboxItem
55
+ );
56
+ }
57
+ sync() {
58
+ const rows = this.rows();
59
+ const hidden = computeHiddenRows(rows);
60
+ rows.forEach((row, i) => {
61
+ row.hoverStyle = this.hoverStyle;
62
+ row.hidden = hidden[i];
63
+ });
64
+ }
65
+ render() {
66
+ return html`<div class="list">
67
+ <slot @slotchange=${() => this.sync()}></slot>
68
+ </div>`;
69
+ }
70
+ };
71
+ ObcCheckboxList.styles = unsafeCSS(componentStyle);
72
+ __decorateClass([
73
+ property({ type: String })
74
+ ], ObcCheckboxList.prototype, "hoverStyle", 2);
75
+ ObcCheckboxList = __decorateClass([
76
+ customElement("obc-checkbox-list")
77
+ ], ObcCheckboxList);
78
+ export {
79
+ ObcCheckboxList
80
+ };
81
+ //# sourceMappingURL=checkbox-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-list.js","sources":["../../../src/components/checkbox-list/checkbox-list.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS, type PropertyValues} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport componentStyle from './checkbox-list.css?inline';\nimport {\n ObcCheckboxItem,\n ObcCheckboxItemHoverStyle,\n type ObcCheckboxItemExpandToggleEvent,\n} from '../checkbox-item/checkbox-item.js';\nimport {computeHiddenRows} from './checkbox-list-visibility.js';\n\n/**\n * `<obc-checkbox-list>` – A vertical list of `<obc-checkbox-item>` rows that\n * collapses the rows under a closed parent.\n *\n * ### Overview\n * Rows are slotted flat, in document order; the tree is read from each row's\n * `level`. When an expandable row is collapsed, the list sets `hidden` on\n * every following row with a greater level until a row of equal or smaller\n * level. The list also applies its `hoverStyle` to every row so a list reads\n * as one surface.\n *\n * ### Features\n * - Flat markup, level-driven hierarchy — no nesting of elements required.\n * - Handles `expand-toggle`: sets the row's `expanded` and recomputes.\n * - Reacts to `expandable`, `expanded` and `level` changes made from outside.\n * - `hoverStyle` forwarded to slotted rows, including rows added later.\n *\n * ### Usage Guidelines\n * - Start levels at 1 when any row is expandable so chevrons and checkboxes\n * align; use level 0 for a plain list.\n * - The list owns the `hidden` attribute of its rows; do not bind it yourself.\n * - Selection stays per row: listen to each row's `change`.\n *\n * ### Accessibility\n * The host is the `role=\"group\"`; rows are ordinary checkboxes and buttons in\n * the natural tab order and hidden rows leave it. This is a group of\n * checkboxes with disclosure buttons, not a tree widget, so there is no\n * roving tabindex. Name the group with `aria-label` or `aria-labelledby` on\n * the host.\n *\n * ### Example\n * ```html\n * <obc-checkbox-list aria-label=\"Report types\">\n * <obc-checkbox-item level=\"1\" expandable expanded status=\"mixed\" label=\"Reports\"></obc-checkbox-item>\n * <obc-checkbox-item level=\"2\" status=\"checked\" label=\"Monthly\"></obc-checkbox-item>\n * <obc-checkbox-item level=\"2\" label=\"Quarterly\"></obc-checkbox-item>\n * <obc-checkbox-item level=\"1\" expandable label=\"Archive\"></obc-checkbox-item>\n * </obc-checkbox-list>\n * ```\n *\n * @property hoverStyle - Hover treatment applied to every slotted row: `touch-target` or `visual-target`.\n * @slot - `obc-checkbox-item` rows in document order; hierarchy comes from each row's `level`.\n * @beta\n */\n@customElement('obc-checkbox-list')\nexport class ObcCheckboxList extends LitElement {\n @property({type: String}) hoverStyle: ObcCheckboxItemHoverStyle =\n ObcCheckboxItemHoverStyle.touchTarget;\n\n private mutationObserver?: MutationObserver;\n\n override connectedCallback(): void {\n super.connectedCallback();\n // The role sits on the host so a consumer's aria-label / aria-labelledby\n // names the group.\n if (!this.hasAttribute('role')) this.setAttribute('role', 'group');\n // Rows are light-DOM children owned by the consumer, so `expandable`,\n // `expanded` and `level` can change without any event reaching the list.\n this.mutationObserver = new MutationObserver(() => this.sync());\n this.mutationObserver.observe(this, {\n childList: true,\n attributes: true,\n attributeFilter: ['expandable', 'expanded', 'level'],\n subtree: true,\n });\n this.addEventListener('expand-toggle', this.onExpandToggle);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.mutationObserver?.disconnect();\n this.mutationObserver = undefined;\n this.removeEventListener('expand-toggle', this.onExpandToggle);\n }\n\n override firstUpdated(): void {\n this.sync();\n }\n\n override updated(changed: PropertyValues<this>): void {\n if (changed.has('hoverStyle')) this.sync();\n }\n\n private onExpandToggle = (event: Event): void => {\n const row = event.target;\n if (!(row instanceof ObcCheckboxItem)) return;\n row.expanded = (event as ObcCheckboxItemExpandToggleEvent).detail;\n this.sync();\n };\n\n private rows(): ObcCheckboxItem[] {\n return Array.from(this.children).filter(\n (el): el is ObcCheckboxItem => el instanceof ObcCheckboxItem\n );\n }\n\n private sync(): void {\n const rows = this.rows();\n const hidden = computeHiddenRows(rows);\n rows.forEach((row, i) => {\n row.hoverStyle = this.hoverStyle;\n row.hidden = hidden[i];\n });\n }\n\n override render() {\n return html`<div class=\"list\">\n <slot @slotchange=${() => this.sync()}></slot>\n </div>`;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-checkbox-list': ObcCheckboxList;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAwDO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,aACxB,0BAA0B;AAoC5B,SAAQ,iBAAiB,CAAC,UAAuB;AAC/C,YAAM,MAAM,MAAM;AAClB,UAAI,EAAE,eAAe,iBAAkB;AACvC,UAAI,WAAY,MAA2C;AAC3D,WAAK,KAAA;AAAA,IACP;AAAA,EAAA;AAAA,EArCS,oBAA0B;AACjC,UAAM,kBAAA;AAGN,QAAI,CAAC,KAAK,aAAa,MAAM,EAAG,MAAK,aAAa,QAAQ,OAAO;AAGjE,SAAK,mBAAmB,IAAI,iBAAiB,MAAM,KAAK,MAAM;AAC9D,SAAK,iBAAiB,QAAQ,MAAM;AAAA,MAClC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,iBAAiB,CAAC,cAAc,YAAY,OAAO;AAAA,MACnD,SAAS;AAAA,IAAA,CACV;AACD,SAAK,iBAAiB,iBAAiB,KAAK,cAAc;AAAA,EAC5D;AAAA,EAES,uBAA6B;AACpC,UAAM,qBAAA;AACN,SAAK,kBAAkB,WAAA;AACvB,SAAK,mBAAmB;AACxB,SAAK,oBAAoB,iBAAiB,KAAK,cAAc;AAAA,EAC/D;AAAA,EAES,eAAqB;AAC5B,SAAK,KAAA;AAAA,EACP;AAAA,EAES,QAAQ,SAAqC;AACpD,QAAI,QAAQ,IAAI,YAAY,QAAQ,KAAA;AAAA,EACtC;AAAA,EASQ,OAA0B;AAChC,WAAO,MAAM,KAAK,KAAK,QAAQ,EAAE;AAAA,MAC/B,CAAC,OAA8B,cAAc;AAAA,IAAA;AAAA,EAEjD;AAAA,EAEQ,OAAa;AACnB,UAAM,OAAO,KAAK,KAAA;AAClB,UAAM,SAAS,kBAAkB,IAAI;AACrC,SAAK,QAAQ,CAAC,KAAK,MAAM;AACvB,UAAI,aAAa,KAAK;AACtB,UAAI,SAAS,OAAO,CAAC;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAES,SAAS;AAChB,WAAO;AAAA,0BACe,MAAM,KAAK,MAAM;AAAA;AAAA,EAEzC;AAGF;AAnEa,gBAkEK,SAAS,UAAU,cAAc;AAjEvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,gBACe,WAAA,cAAA,CAAA;AADf,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
@@ -30,10 +30,21 @@ const compentStyle = css`* {
30
30
  }
31
31
 
32
32
  .wrapper .center {
33
- display: flex;
33
+ display: grid;
34
+ grid-auto-flow: column;
35
+ grid-auto-columns: minmax(
36
+ var(--obc-integration-app-bar-app-width, max-content),
37
+ 1fr
38
+ );
34
39
  gap: var(--app-components-app-menu-app-button-spacing);
35
40
  justify-content: center;
36
41
  }
42
+
43
+ /* Svelte wrappers add a slot container that must not become a grid item. */
44
+
45
+ slot[name="apps"]::slotted(:not(obc-app-button)) {
46
+ display: contents;
47
+ }
37
48
  `;
38
49
  export {
39
50
  compentStyle as default
@@ -1 +1 @@
1
- {"version":3,"file":"integration-app-bar.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"integration-app-bar.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,11 +1,11 @@
1
1
  import { LitElement } from 'lit';
2
2
  /**
3
- * @slot apps - Application buttons; slotted elements are normalized to a uniform width
3
+ * @slot apps - Application buttons; every button is laid out at the width of the widest one
4
+ * @cssprop [--obc-integration-app-bar-app-width=max-content] - Minimum width of each app-button grid track. Tracks may grow equally to fit wider content.
4
5
  * @experimental
5
6
  */
6
7
  export declare class ObcIntegrationAppBar extends LitElement {
7
8
  render(): import('lit-html').TemplateResult<1>;
8
- private handleAppsSlotChange;
9
9
  static styles: import('lit').CSSResult;
10
10
  }
11
11
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"integration-app-bar.d.ts","sourceRoot":"","sources":["../../../src/integration-systems/integration-app-bar/integration-app-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAIhD;;;GAGG;AACH,qBACa,oBAAqB,SAAQ,UAAU;IACzC,MAAM;IAYf,OAAO,CAAC,oBAAoB;IAyB5B,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,oBAAoB,CAAC;KACjD;CACF"}
1
+ {"version":3,"file":"integration-app-bar.d.ts","sourceRoot":"","sources":["../../../src/integration-systems/integration-app-bar/integration-app-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAIhD;;;;GAIG;AACH,qBACa,oBAAqB,SAAQ,UAAU;IACzC,MAAM;IAYf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,oBAAoB,CAAC;KACjD;CACF"}
@@ -15,32 +15,12 @@ let ObcIntegrationAppBar = class extends LitElement {
15
15
  <div class="wrapper">
16
16
  <div class="left-side"></div>
17
17
  <div class="center">
18
- <slot name="apps" @slotchange=${this.handleAppsSlotChange}></slot>
18
+ <slot name="apps"></slot>
19
19
  </div>
20
20
  <div class="right-side"></div>
21
21
  </div>
22
22
  `;
23
23
  }
24
- handleAppsSlotChange(event) {
25
- const slot = event.target;
26
- const buttons = slot.assignedElements();
27
- if (buttons.length === 0) {
28
- return;
29
- }
30
- for (const btn of buttons) {
31
- btn.style.width = "";
32
- }
33
- requestAnimationFrame(() => {
34
- const maxWidth = Math.max(
35
- ...buttons.map((btn) => btn.getBoundingClientRect().width)
36
- );
37
- if (maxWidth > 0) {
38
- for (const btn of buttons) {
39
- btn.style.width = `${maxWidth}px`;
40
- }
41
- }
42
- });
43
- }
44
24
  };
45
25
  ObcIntegrationAppBar.styles = unsafeCSS(compentStyle);
46
26
  ObcIntegrationAppBar = __decorateClass([
@@ -1 +1 @@
1
- {"version":3,"file":"integration-app-bar.js","sources":["../../../src/integration-systems/integration-app-bar/integration-app-bar.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './integration-app-bar.css?inline';\n\n/**\n * @slot apps - Application buttons; slotted elements are normalized to a uniform width\n * @experimental\n */\n@customElement('obc-integration-app-bar')\nexport class ObcIntegrationAppBar extends LitElement {\n override render() {\n return html`\n <div class=\"wrapper\">\n <div class=\"left-side\"></div>\n <div class=\"center\">\n <slot name=\"apps\" @slotchange=${this.handleAppsSlotChange}></slot>\n </div>\n <div class=\"right-side\"></div>\n </div>\n `;\n }\n\n private handleAppsSlotChange(event: Event) {\n const slot = event.target as HTMLSlotElement;\n const buttons = slot.assignedElements() as HTMLElement[];\n\n if (buttons.length === 0) {\n return;\n }\n\n for (const btn of buttons) {\n btn.style.width = '';\n }\n\n requestAnimationFrame(() => {\n const maxWidth = Math.max(\n ...buttons.map((btn) => btn.getBoundingClientRect().width)\n );\n\n if (maxWidth > 0) {\n for (const btn of buttons) {\n btn.style.width = `${maxWidth}px`;\n }\n }\n });\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-integration-app-bar': ObcIntegrationAppBar;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AASO,IAAM,uBAAN,cAAmC,WAAW;AAAA,EAC1C,SAAS;AAChB,WAAO;AAAA;AAAA;AAAA;AAAA,0CAI+B,KAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjE;AAAA,EAEQ,qBAAqB,OAAc;AACzC,UAAM,OAAO,MAAM;AACnB,UAAM,UAAU,KAAK,iBAAA;AAErB,QAAI,QAAQ,WAAW,GAAG;AACxB;AAAA,IACF;AAEA,eAAW,OAAO,SAAS;AACzB,UAAI,MAAM,QAAQ;AAAA,IACpB;AAEA,0BAAsB,MAAM;AAC1B,YAAM,WAAW,KAAK;AAAA,QACpB,GAAG,QAAQ,IAAI,CAAC,QAAQ,IAAI,sBAAA,EAAwB,KAAK;AAAA,MAAA;AAG3D,UAAI,WAAW,GAAG;AAChB,mBAAW,OAAO,SAAS;AACzB,cAAI,MAAM,QAAQ,GAAG,QAAQ;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAGF;AAvCa,qBAsCK,SAAS,UAAU,YAAY;AAtCpC,uBAAN,gBAAA;AAAA,EADN,cAAc,yBAAyB;AAAA,GAC3B,oBAAA;"}
1
+ {"version":3,"file":"integration-app-bar.js","sources":["../../../src/integration-systems/integration-app-bar/integration-app-bar.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './integration-app-bar.css?inline';\n\n/**\n * @slot apps - Application buttons; every button is laid out at the width of the widest one\n * @cssprop [--obc-integration-app-bar-app-width=max-content] - Minimum width of each app-button grid track. Tracks may grow equally to fit wider content.\n * @experimental\n */\n@customElement('obc-integration-app-bar')\nexport class ObcIntegrationAppBar extends LitElement {\n override render() {\n return html`\n <div class=\"wrapper\">\n <div class=\"left-side\"></div>\n <div class=\"center\">\n <slot name=\"apps\"></slot>\n </div>\n <div class=\"right-side\"></div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-integration-app-bar': ObcIntegrationAppBar;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAUO,IAAM,uBAAN,cAAmC,WAAW;AAAA,EAC1C,SAAS;AAChB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST;AAGF;AAda,qBAaK,SAAS,UAAU,YAAY;AAbpC,uBAAN,gBAAA;AAAA,EADN,cAAc,yBAAyB;AAAA,GAC3B,oBAAA;"}
@@ -171,7 +171,8 @@ export interface ReadoutSourceOptions extends ReadoutSrcOptions {
171
171
  * @property size - Density tier. Applies to the vertical direction only — the horizontal
172
172
  * arrangement exists in the large tier alone (Figma 6.1: it relies on the
173
173
  * label+unit stack aligning with the L-size value caps), so `size` is
174
- * ignored when `direction` is `horizontal`.
174
+ * ignored when `direction` is `horizontal`; a horizontal readout given any
175
+ * other `size` logs a console warning once per element.
175
176
  * @availableWhen size direction==vertical
176
177
  * @availableWhen stacking direction==vertical
177
178
  * @availableWhen alignment direction==vertical && stacking==stacked
@@ -250,7 +251,7 @@ export declare class ObcReadout extends LitElement {
250
251
  setpoint?: number;
251
252
  hasAdvice: boolean;
252
253
  advice?: number;
253
- /** Density tier. Applies to the vertical direction only — the horizontal arrangement exists in the large tier alone (Figma 6.1: it relies on the label+unit stack aligning with the L-size value caps), so `size` is ignored when `direction` is `horizontal`. */
254
+ /** Density tier. Applies to the vertical direction only — the horizontal arrangement exists in the large tier alone (Figma 6.1: it relies on the label+unit stack aligning with the L-size value caps), so `size` is ignored when `direction` is `horizontal`; a horizontal readout given any other `size` logs a console warning once per element. */
254
255
  size?: ReadoutSize;
255
256
  priority?: ReadoutPriority;
256
257
  direction?: ReadoutDirection;
@@ -279,6 +280,7 @@ export declare class ObcReadout extends LitElement {
279
280
  private deferredSetpointHidePhase;
280
281
  private deferredSetpointHideTimer?;
281
282
  private hasCompletedFirstUpdate;
283
+ private hasWarnedHorizontalSize;
282
284
  private sourcePickerContentVisible;
283
285
  private sourcePickerOptions;
284
286
  private sourcePickerSlot?;
@@ -461,6 +463,13 @@ export declare class ObcReadout extends LitElement {
461
463
  */
462
464
  private renderHorizontalLayout;
463
465
  protected willUpdate(changed: Map<string, unknown>): void;
466
+ /**
467
+ * A horizontal readout discards any `size` but `large` (see `resolvedSize`).
468
+ * A silent discard is indistinguishable from a bug to a consumer, so each
469
+ * offending element says so once and logs itself for locating (#1182).
470
+ * A removed `size` attribute arrives as `null` and counts as unset.
471
+ */
472
+ private warnHorizontalSizeIgnored;
464
473
  updated(changed: Map<string, unknown>): void;
465
474
  private clearDeferredSetpointHide;
466
475
  disconnectedCallback(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"readout.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/readout/readout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"readout.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/readout/readout.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,7 @@ let ObcReadout = class extends LitElement {
71
71
  this.showDebugOverlay = false;
72
72
  this.deferredSetpointHidePhase = ReadoutBlockHidePhase.none;
73
73
  this.hasCompletedFirstUpdate = false;
74
+ this.hasWarnedHorizontalSize = false;
74
75
  this.sourcePickerContentVisible = false;
75
76
  this.sourcePickerOptions = [];
76
77
  this.onWindowPointerDown = (event) => {
@@ -820,6 +821,23 @@ let ObcReadout = class extends LitElement {
820
821
  super.willUpdate(changed);
821
822
  assertReadoutValueType("obc-readout", this.value, this.valueType);
822
823
  assertReadoutFractionDigits("obc-readout", this.fractionDigits);
824
+ this.warnHorizontalSizeIgnored();
825
+ }
826
+ /**
827
+ * A horizontal readout discards any `size` but `large` (see `resolvedSize`).
828
+ * A silent discard is indistinguishable from a bug to a consumer, so each
829
+ * offending element says so once and logs itself for locating (#1182).
830
+ * A removed `size` attribute arrives as `null` and counts as unset.
831
+ */
832
+ warnHorizontalSizeIgnored() {
833
+ if (this.hasWarnedHorizontalSize || !this.isHorizontal || !this.size || this.size === ReadoutSize.large) {
834
+ return;
835
+ }
836
+ this.hasWarnedHorizontalSize = true;
837
+ console.warn(
838
+ `[obc-readout] size="${this.size}" is ignored when direction="horizontal": the horizontal arrangement exists in the large tier only. Remove the size, or use direction="vertical" for the small / medium tiers.`,
839
+ this
840
+ );
823
841
  }
824
842
  updated(changed) {
825
843
  super.updated(changed);