@odx/foundation 1.0.0-beta.135 → 1.0.0-beta.136

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.
@@ -12,12 +12,11 @@ export declare const AccordionIndicatorPosition: {
12
12
  readonly END: "end";
13
13
  };
14
14
  export declare class OdxAccordion extends CustomElement {
15
- /** @internal */
16
- items: OdxAccordionItem[];
17
15
  indicatorPosition: AccordionIndicatorPosition;
18
16
  multiple: boolean;
19
17
  size?: AccordionItemSize;
20
18
  constructor();
19
+ getItems(): OdxAccordionItem[];
21
20
  protected updated(props: PropertyValues<this>): void;
22
21
  toggleAll(state?: boolean, emitEvent?: boolean): void;
23
22
  }
@@ -1,5 +1,6 @@
1
1
  import { CustomElement } from '../../lib/main.js';
2
2
  import { PropertyValues, TemplateResult } from 'lit';
3
+ import { OdxNavigationItem } from '../navigation-item/navigation-item.js';
3
4
  declare global {
4
5
  interface HTMLElementTagNameMap {
5
6
  'odx-anchor-navigation': OdxAnchorNavigation;
@@ -8,10 +9,10 @@ declare global {
8
9
  declare const OdxAnchorNavigation_base: typeof CustomElement;
9
10
  export declare class OdxAnchorNavigation extends OdxAnchorNavigation_base {
10
11
  #private;
11
- private navigationItems;
12
12
  container?: string;
13
13
  vertical: boolean;
14
14
  constructor();
15
+ getItems(): OdxNavigationItem[];
15
16
  connectedCallback(): void;
16
17
  disconnectedCallback(): void;
17
18
  protected render(): TemplateResult;
@@ -11,7 +11,6 @@ declare global {
11
11
  }
12
12
  export declare class OdxBreadcrumbs extends CustomElement {
13
13
  #private;
14
- private itemElements;
15
14
  max: number;
16
15
  items?: BreadcrumbsItem[];
17
16
  protected firstUpdated(props: PropertyValues<this>): void;
@@ -1,14 +1,11 @@
1
1
  import { CustomElement } from '../../lib/main.js';
2
2
  import { PropertyValues, TemplateResult } from 'lit';
3
- import { OdxLink } from '../link/link.js';
4
3
  declare global {
5
4
  interface HTMLElementTagNameMap {
6
5
  'odx-breadcrumbs-item': OdxBreadcrumbsItem;
7
6
  }
8
7
  }
9
8
  export declare class OdxBreadcrumbsItem extends CustomElement {
10
- private linkElements;
11
- protected get interactiveElement(): OdxLink | null;
12
9
  protected render(): TemplateResult;
13
10
  protected updated(props: PropertyValues<this>): void;
14
11
  }
@@ -8,8 +8,6 @@ declare global {
8
8
  }
9
9
  declare const OdxButtonGroup_base: import('../../lib/main.js').Constructor<CanBeDisabled> & typeof CustomElement;
10
10
  export declare class OdxButtonGroup extends OdxButtonGroup_base {
11
- #private;
12
- private buttons;
13
11
  size: ButtonSize;
14
12
  variant: ButtonVariant;
15
13
  block: boolean;
@@ -12,7 +12,7 @@ export declare class OdxAutocomplete extends FormControl {
12
12
  /** @internal */
13
13
  static shadowRootOptions: ShadowRootInit;
14
14
  protected readonly activeDescendants: ActiveDescendantsController<OptionControl>;
15
- protected options: OptionControl[];
15
+ protected get options(): OptionControl[];
16
16
  protected readonly highlight: OdxHighlight;
17
17
  protected readonly dropdown: OdxDropdown;
18
18
  minQueryLength: number;
@@ -15,7 +15,7 @@ export declare class OdxDropdown extends PopoverHost {
15
15
  #private;
16
16
  matchReferenceWidth: boolean;
17
17
  placement: DropdownPlacement;
18
- get options(): PopoverPlacementOptions;
18
+ get popoverPlacementOptions(): PopoverPlacementOptions;
19
19
  connectedCallback(): void;
20
20
  mountPopover(referenceElement: HTMLElement | null): void;
21
21
  unmountPopover(referenceElement: HTMLElement): void;
@@ -8,8 +8,7 @@ declare global {
8
8
  export declare class OdxFormField extends CustomElement {
9
9
  #private;
10
10
  touched: boolean;
11
- private controls;
12
- get control(): FormControl | null;
11
+ getControl(): FormControl | null;
13
12
  connectedCallback(): void;
14
13
  protected render(): TemplateResult;
15
14
  protected renderErrorMessage(): TemplateResult;
@@ -7,7 +7,6 @@ declare global {
7
7
  }
8
8
  export declare class OdxHeader extends CustomElement {
9
9
  #private;
10
- private titleElements;
11
10
  connectedCallback(): void;
12
11
  protected render(): TemplateResult;
13
12
  }
@@ -6,9 +6,9 @@ declare global {
6
6
  }
7
7
  }
8
8
  export declare class OdxList extends CustomElement {
9
- items: OdxListItem[];
10
9
  multiple: boolean;
11
10
  constructor();
11
+ getItems(): OdxListItem[];
12
12
  connectedCallback(): void;
13
13
  toggleAll(state?: boolean, emitEvent?: boolean): void;
14
14
  }
@@ -8,7 +8,6 @@ declare global {
8
8
  declare const OdxListItem_base: import('../../lib/main.js').Constructor<CanBeExpanded> & typeof InteractiveElement;
9
9
  export declare class OdxListItem extends OdxListItem_base {
10
10
  #private;
11
- private expandableItems;
12
11
  region?: HTMLElementTagNameMap['odx-toggle-content'];
13
12
  compact: boolean;
14
13
  interactive: boolean;
@@ -7,8 +7,6 @@ declare global {
7
7
  }
8
8
  export declare class OdxMainMenu extends CustomElement {
9
9
  #private;
10
- private links;
11
- private items;
12
10
  open: boolean;
13
11
  constructor();
14
12
  connectedCallback(): void;
@@ -8,7 +8,6 @@ declare global {
8
8
  }
9
9
  declare const OdxNavigationItemGroup_base: import('../../lib/main.js').Constructor<CanBeExpanded> & import('../../lib/main.js').Constructor<CanBeDisabled> & typeof CustomElement;
10
10
  export declare class OdxNavigationItemGroup extends OdxNavigationItemGroup_base {
11
- private items;
12
11
  label: string;
13
12
  loading: boolean;
14
13
  selected: boolean;
@@ -11,7 +11,7 @@ export declare class PopoverHost extends PopoverHost_base {
11
11
  get referenceElement(): HTMLElement | null;
12
12
  placement: Placement;
13
13
  fpsLimit: number;
14
- get options(): PopoverPlacementOptions;
14
+ get popoverPlacementOptions(): PopoverPlacementOptions;
15
15
  constructor();
16
16
  connectedCallback(): void;
17
17
  disconnectedCallback(): void;
@@ -6,7 +6,6 @@ declare global {
6
6
  }
7
7
  }
8
8
  export declare class OdxProgressBar extends BaseProgress {
9
- readonly content: HTMLElement[];
10
9
  condensed: boolean;
11
10
  protected render(): TemplateResult;
12
11
  }
@@ -23,7 +23,6 @@ export declare const ProgressRingSize: Pick<{
23
23
  * @csspart indicator - The indicator circle element
24
24
  */
25
25
  export declare class OdxProgressRing extends BaseProgress {
26
- private readonly content;
27
26
  size: ProgressRingSize;
28
27
  stroke: number;
29
28
  firstUpdated(changes: PropertyValues<this>): void;
@@ -2,7 +2,6 @@ import { CustomElement } from '../../lib/main.js';
2
2
  import { IsLocalized } from '../../i18n/main.js';
3
3
  import { PropertyValues, TemplateResult } from 'lit';
4
4
  import { NavigationItemSize, OdxNavigationItem } from '../navigation-item/navigation-item.js';
5
- import { OdxNavigationItemGroup } from '../navigation-item-group/navigation-item-group.js';
6
5
  declare global {
7
6
  interface HTMLElementTagNameMap {
8
7
  'odx-rail-navigation': OdxRailNavigation;
@@ -11,7 +10,6 @@ declare global {
11
10
  declare const OdxRailNavigation_base: import('../../lib/main.js').Constructor<IsLocalized> & typeof CustomElement;
12
11
  export declare class OdxRailNavigation extends OdxRailNavigation_base {
13
12
  #private;
14
- protected navigationItems: Array<OdxNavigationItem | OdxNavigationItemGroup>;
15
13
  collapsed: boolean;
16
14
  size: NavigationItemSize;
17
15
  protected render(): TemplateResult;
@@ -1,7 +1,6 @@
1
1
  import { ListboxFormControl, OptionControl } from '../../lib/main.js';
2
2
  import { PropertyValues, TemplateResult } from 'lit';
3
3
  import { OdxDropdown } from '../dropdown/dropdown.js';
4
- import { OdxOption } from '../option/option.js';
5
4
  declare global {
6
5
  interface HTMLElementTagNameMap {
7
6
  'odx-select': OdxSelect;
@@ -11,7 +10,6 @@ export declare class OdxSelect extends ListboxFormControl<OptionControl> {
11
10
  #private;
12
11
  /** @internal */
13
12
  static shadowRootOptions: ShadowRootInit;
14
- protected options: OdxOption[];
15
13
  protected readonly dropdown: OdxDropdown;
16
14
  maxVisibleSelectedOptions: number;
17
15
  constructor();
@@ -7,7 +7,7 @@ declare global {
7
7
  }
8
8
  export declare class OdxSpinbox extends FormControl<string> {
9
9
  #private;
10
- private options;
10
+ private get options();
11
11
  interactive: boolean;
12
12
  selectedIndex: number;
13
13
  value: string;
@@ -8,7 +8,7 @@ declare global {
8
8
  declare const OdxTableRow_base: import('../../lib/main.js').Constructor<CanBeDisabled> & typeof CustomElement;
9
9
  export declare class OdxTableRow extends OdxTableRow_base {
10
10
  #private;
11
- private checkboxCells;
11
+ private get checkboxCells();
12
12
  selected: boolean;
13
13
  selectable: boolean;
14
14
  value: string;
@@ -1,4 +1,5 @@
1
1
  import { CheckboxFormControl, ValuesOf } from '../../lib/main.js';
2
+ import { OdxIconName } from '@odx/icons';
2
3
  import { PropertyValues, TemplateResult } from 'lit';
3
4
  import { TooltipPlacement } from '../tooltip/tooltip.js';
4
5
  declare global {
@@ -29,11 +30,13 @@ export declare const ToggleButtonVariant: Pick<{
29
30
  readonly DANGER_SUBTLE: "danger-subtle";
30
31
  readonly DANGER_GHOST: "danger-ghost";
31
32
  readonly GHOST: "ghost";
32
- }, "NEUTRAL" | "GHOST">;
33
+ }, "NEUTRAL" | "PRIMARY" | "GHOST">;
33
34
  export declare class OdxToggleButton extends CheckboxFormControl {
34
- #private;
35
35
  label?: string;
36
+ labelChecked?: string;
36
37
  labelPlacement?: TooltipPlacement;
38
+ icon?: OdxIconName;
39
+ iconChecked?: OdxIconName;
37
40
  size: ToggleButtonSize;
38
41
  variant: ToggleButtonVariant;
39
42
  connectedCallback(): void;
@@ -16,7 +16,6 @@ export declare const ToolbarSize: Pick<{
16
16
  }, "SM" | "MD">;
17
17
  export declare class OdxToolbar extends CustomElement {
18
18
  #private;
19
- private slottedElements;
20
19
  float: boolean;
21
20
  size: ToolbarSize;
22
21
  protected render(): TemplateResult;
@@ -1,6 +1,6 @@
1
1
  import { _ as __decorateClass } from './_virtual_class-decorator-runtime.js';
2
- import { CustomElement, ExpandableItemManager, customElement, CanBeExpanded, InteractiveElement, getUniqueId, toAriaBooleanAttribute, Size, Variant, optionalAttr, getIdFromHref, getElementFromEvent, InteractiveLink, Shape, CanBeDisabled, optionalSlot, CheckboxFormControl, CheckboxGroupFormControl, findClosestDocument, Placement, waitForAnimations, PopoverPlacementOptions, computePopoverPlacement, getKeyInfo, FormControl, ActiveDescendantsController, getAssignedElement, parseDate, toPx, forwardEvent, OptionControl, SharedResizeObserver, ProgressVariant, RadioGroupFormControl, ListboxFormControl, IsDraggable, NumberFormControl, IS_DRAG_ACTIVE_ATTRIBUTE, DragController, clickedOutside, supportsHover } from '@odx/foundation';
3
- import { queryAssignedElements, property, query, state } from 'lit/decorators.js';
2
+ import { CustomElement, ExpandableItemManager, customElement, getAssignedElements, CanBeExpanded, InteractiveElement, getUniqueId, toAriaBooleanAttribute, Size, Variant, optionalAttr, getIdFromHref, getElementFromEvent, InteractiveLink, Shape, getAssignedElement, CanBeDisabled, optionalSlot, CheckboxFormControl, CheckboxGroupFormControl, findClosestDocument, Placement, waitForAnimations, PopoverPlacementOptions, computePopoverPlacement, getKeyInfo, FormControl, ActiveDescendantsController, parseDate, toPx, forwardEvent, OptionControl, SharedResizeObserver, ProgressVariant, RadioGroupFormControl, ListboxFormControl, IsDraggable, NumberFormControl, IS_DRAG_ACTIVE_ATTRIBUTE, DragController, clickedOutside, supportsHover } from '@odx/foundation';
3
+ import { property, query, state } from 'lit/decorators.js';
4
4
  import { html, isServer, unsafeCSS, css, nothing } from 'lit';
5
5
  import { p as pick, e, d as autoUpdate, t as throttle, R as RovingTabindexController, r as round, g as debounce, n, i as c, j as e$1 } from './vendor.js';
6
6
  import { when } from 'lit/directives/when.js';
@@ -16,28 +16,28 @@ const _OdxAccordion = class _OdxAccordion extends CustomElement {
16
16
  super();
17
17
  this.indicatorPosition = AccordionIndicatorPosition.END;
18
18
  this.multiple = false;
19
- new ExpandableItemManager(this, { getItems: () => this.items });
19
+ new ExpandableItemManager(this, { getItems: () => this.getItems() });
20
20
  }
21
21
  static {
22
22
  customElement("odx-accordion", styles$1h)(_OdxAccordion);
23
23
  }
24
+ getItems() {
25
+ return getAssignedElements(this.renderRoot, { selector: "odx-accordion-item", flatten: true });
26
+ }
24
27
  updated(props) {
25
28
  super.updated(props);
26
29
  if (props.has("size") && this.size != null) {
27
- for (const item of this.items) {
30
+ for (const item of this.getItems()) {
28
31
  item.size = this.size;
29
32
  }
30
33
  }
31
34
  }
32
35
  toggleAll(state, emitEvent = false) {
33
- for (const item of this.items) {
36
+ for (const item of this.getItems()) {
34
37
  item.toggle(state, emitEvent);
35
38
  }
36
39
  }
37
40
  };
38
- __decorateClass([
39
- queryAssignedElements({ selector: "odx-accordion-item", flatten: true })
40
- ], _OdxAccordion.prototype, "items", 2);
41
41
  __decorateClass([
42
42
  property({ reflect: true, useDefault: true, attribute: "indicator-position" })
43
43
  ], _OdxAccordion.prototype, "indicatorPosition", 2);
@@ -363,7 +363,7 @@ const _OdxAnchorNavigation = class _OdxAnchorNavigation extends e(CustomElement)
363
363
  root.querySelector(target.href)?.scrollIntoView();
364
364
  };
365
365
  this.#handleSlotChange = () => {
366
- this.#anchorObserver?.updateAnchors(this.navigationItems);
366
+ this.#anchorObserver?.updateAnchors(this.getItems());
367
367
  };
368
368
  this.addEventListener("click", this.#handleClick);
369
369
  }
@@ -371,6 +371,9 @@ const _OdxAnchorNavigation = class _OdxAnchorNavigation extends e(CustomElement)
371
371
  customElement("odx-anchor-navigation", styles$1b)(_OdxAnchorNavigation);
372
372
  }
373
373
  #anchorObserver;
374
+ getItems() {
375
+ return getAssignedElements(this.renderRoot, { selector: OdxNavigationItem.tagName, flatten: true });
376
+ }
374
377
  connectedCallback() {
375
378
  super.connectedCallback();
376
379
  this.#handleContainerChange();
@@ -386,7 +389,7 @@ const _OdxAnchorNavigation = class _OdxAnchorNavigation extends e(CustomElement)
386
389
  if (props.has("container")) {
387
390
  this.#handleContainerChange();
388
391
  }
389
- for (const item of this.navigationItems) {
392
+ for (const item of this.getItems()) {
390
393
  item.selected = item.href === this.#anchorObserver?.activeAnchors.value?.[0]?.href;
391
394
  item.lineClamp = this.vertical ? 2 : 1;
392
395
  }
@@ -396,14 +399,11 @@ const _OdxAnchorNavigation = class _OdxAnchorNavigation extends e(CustomElement)
396
399
  if (root === this.#anchorObserver?.root) return;
397
400
  this.#anchorObserver?.disconnect();
398
401
  this.#anchorObserver = new AnchorObserver(root);
399
- this.#anchorObserver?.updateAnchors(this.navigationItems);
402
+ this.#anchorObserver?.updateAnchors(this.getItems());
400
403
  }
401
404
  #handleClick;
402
405
  #handleSlotChange;
403
406
  };
404
- __decorateClass([
405
- queryAssignedElements({ selector: OdxNavigationItem.tagName, flatten: true })
406
- ], _OdxAnchorNavigation.prototype, "navigationItems", 2);
407
407
  __decorateClass([
408
408
  property()
409
409
  ], _OdxAnchorNavigation.prototype, "container", 2);
@@ -540,32 +540,25 @@ let OdxLink = _OdxLink;
540
540
 
541
541
  const styles$15 = ":host{display:contents}.separator{--size: var(--odx-size-75);margin:var(--odx-size-37);color:var(--odx-color-foreground-rest-subtle)}:host([hidden]){display:none}:host([aria-current=\"page\"]) ::slotted(odx-link){color:var(--odx-color-foreground-rest-subtle)!important}::slotted(*){margin:0}";
542
542
 
543
- const _OdxBreadcrumbsItem = class _OdxBreadcrumbsItem extends CustomElement {
543
+ class OdxBreadcrumbsItem extends CustomElement {
544
544
  static {
545
- customElement("odx-breadcrumbs-item", styles$15)(_OdxBreadcrumbsItem);
546
- }
547
- get interactiveElement() {
548
- return this.linkElements[0] ?? null;
545
+ customElement("odx-breadcrumbs-item", styles$15)(OdxBreadcrumbsItem);
549
546
  }
550
547
  render() {
551
548
  return html`
552
- <slot></slot>
549
+ <slot @slotchange=${() => this.requestUpdate()}></slot>
553
550
  ${when(this.nextElementSibling, () => html`<odx-icon class="separator" name="chevron-right"></odx-icon>`)}
554
551
  `;
555
552
  }
556
553
  updated(props) {
557
554
  super.updated(props);
558
- if (this.interactiveElement) {
559
- this.interactiveElement.subtle = true;
560
- this.interactiveElement.strong = !this.nextElementSibling;
561
- this.interactiveElement.ariaCurrent = this.nextElementSibling ? null : "page";
562
- }
555
+ const linkElement = getAssignedElement(this.renderRoot, { selector: OdxLink.tagName, flatten: true }) || null;
556
+ if (!linkElement) return;
557
+ linkElement.subtle = true;
558
+ linkElement.strong = !this.nextElementSibling;
559
+ linkElement.ariaCurrent = this.nextElementSibling ? null : "page";
563
560
  }
564
- };
565
- __decorateClass([
566
- queryAssignedElements({ selector: OdxLink.tagName, flatten: true })
567
- ], _OdxBreadcrumbsItem.prototype, "linkElements", 2);
568
- let OdxBreadcrumbsItem = _OdxBreadcrumbsItem;
561
+ }
569
562
 
570
563
  const styles$14 = ":host{--_gap: var(--odx-size-37);display:flex;flex-wrap:wrap;column-gap:var(--_gap);place-items:center;cursor:default;padding-block:var(--odx-size-37);padding-inline:var(--odx-size-75);min-block-size:var(--odx-size-225)}odx-breadcrumb-item,::slotted(odx-breadcrumb-item){gap:var(--_gap)}";
571
564
 
@@ -599,8 +592,9 @@ const _OdxBreadcrumbs = class _OdxBreadcrumbs extends CustomElement {
599
592
  return index === 0 || index > items.length - this.max;
600
593
  }
601
594
  #updateContext() {
602
- for (const [index, item] of this.itemElements.entries()) {
603
- item.hidden = !this.#isItemVisible(item, index, this.itemElements);
595
+ const itemElements = getAssignedElements(this.renderRoot, { selector: OdxBreadcrumbsItem.tagName, flatten: true });
596
+ for (const [index, item] of itemElements.entries()) {
597
+ item.hidden = !this.#isItemVisible(item, index, itemElements);
604
598
  }
605
599
  const renderedItemElements = this.renderRoot.querySelectorAll(OdxBreadcrumbsItem.tagName) ?? [];
606
600
  if (renderedItemElements.length === 0) return;
@@ -609,9 +603,6 @@ const _OdxBreadcrumbs = class _OdxBreadcrumbs extends CustomElement {
609
603
  }
610
604
  }
611
605
  };
612
- __decorateClass([
613
- queryAssignedElements({ selector: OdxBreadcrumbsItem.tagName, flatten: true })
614
- ], _OdxBreadcrumbs.prototype, "itemElements", 2);
615
606
  __decorateClass([
616
607
  property({ type: Number })
617
608
  ], _OdxBreadcrumbs.prototype, "max", 2);
@@ -634,24 +625,17 @@ const _OdxButtonGroup = class _OdxButtonGroup extends CanBeDisabled(CustomElemen
634
625
  customElement("odx-button-group", styles$13)(_OdxButtonGroup);
635
626
  }
636
627
  render() {
637
- return html`
638
- <slot @slotchange=${() => this.requestUpdate()}></slot>
639
- `;
628
+ return html`<slot @slotchange=${() => this.requestUpdate()}></slot>`;
640
629
  }
641
630
  updated(props) {
642
631
  super.updated(props);
643
- this.#updateButtons();
644
- }
645
- #updateButtons() {
646
- for (const button of this.buttons) {
632
+ for (const button of getAssignedElements(this.renderRoot, { selector: "[odx-button]" })) {
633
+ if (!(button instanceof OdxButton)) continue;
647
634
  button.size = this.size;
648
635
  button.variant = this.variant;
649
636
  }
650
637
  }
651
638
  };
652
- __decorateClass([
653
- queryAssignedElements({ selector: "button, odx-button", flatten: true })
654
- ], _OdxButtonGroup.prototype, "buttons", 2);
655
639
  __decorateClass([
656
640
  property({ reflect: true, useDefault: true })
657
641
  ], _OdxButtonGroup.prototype, "size", 2);
@@ -935,7 +919,7 @@ class PopoverHost extends CanBeDisabled(CustomElement) {
935
919
  get referenceElement() {
936
920
  return this.#currentReferenceElement;
937
921
  }
938
- get options() {
922
+ get popoverPlacementOptions() {
939
923
  return PopoverPlacementOptions({ arrowElement: this.popoverElement.arrowElement, placement: this.placement });
940
924
  }
941
925
  connectedCallback() {
@@ -971,7 +955,7 @@ class PopoverHost extends CanBeDisabled(CustomElement) {
971
955
  this.#positionUpdater = autoUpdate(
972
956
  this.referenceElement,
973
957
  this,
974
- throttle(() => this.referenceElement && computePopoverPlacement(this.referenceElement, this, this.options), 1e3 / this.fpsLimit)
958
+ throttle(() => this.referenceElement && computePopoverPlacement(this.referenceElement, this, this.popoverPlacementOptions), 1e3 / this.fpsLimit)
975
959
  );
976
960
  }
977
961
  hidePopover() {
@@ -1057,9 +1041,9 @@ const _OdxDropdown = class _OdxDropdown extends PopoverHost {
1057
1041
  static {
1058
1042
  customElement("odx-dropdown", styles$Z)(_OdxDropdown);
1059
1043
  }
1060
- get options() {
1044
+ get popoverPlacementOptions() {
1061
1045
  return PopoverPlacementOptions({
1062
- ...super.options,
1046
+ ...super.popoverPlacementOptions,
1063
1047
  matchReferenceWidth: this.matchReferenceWidth
1064
1048
  });
1065
1049
  }
@@ -1266,6 +1250,9 @@ const _OdxAutocomplete = class _OdxAutocomplete extends FormControl {
1266
1250
  delegatesFocus: true
1267
1251
  };
1268
1252
  }
1253
+ get options() {
1254
+ return getAssignedElements(this.renderRoot, { selector: '[role="option"]', flatten: true });
1255
+ }
1269
1256
  get control() {
1270
1257
  return getAssignedElement(this.renderRoot, { slot: "control" });
1271
1258
  }
@@ -1333,9 +1320,6 @@ const _OdxAutocomplete = class _OdxAutocomplete extends FormControl {
1333
1320
  #handleControlInput;
1334
1321
  #handleControlKeyboardEvent;
1335
1322
  };
1336
- __decorateClass([
1337
- queryAssignedElements({ selector: '[role="option"]', flatten: true })
1338
- ], _OdxAutocomplete.prototype, "options", 2);
1339
1323
  __decorateClass([
1340
1324
  query(OdxHighlight.tagName, true)
1341
1325
  ], _OdxAutocomplete.prototype, "highlight", 2);
@@ -1406,7 +1390,7 @@ const _OdxFormField = class _OdxFormField extends CustomElement {
1406
1390
  super(...arguments);
1407
1391
  this.touched = false;
1408
1392
  this.#handleSlotChange = () => {
1409
- this.control?.addEventListener("change", () => {
1393
+ this.getControl()?.addEventListener("change", () => {
1410
1394
  this.touched = true;
1411
1395
  this.requestUpdate();
1412
1396
  });
@@ -1415,14 +1399,14 @@ const _OdxFormField = class _OdxFormField extends CustomElement {
1415
1399
  static {
1416
1400
  customElement("odx-form-field", styles$U)(_OdxFormField);
1417
1401
  }
1418
- get control() {
1419
- return this.controls[0] || null;
1402
+ getControl() {
1403
+ return getAssignedElement(this.renderRoot, { slot: "control", flatten: true }) || null;
1420
1404
  }
1421
1405
  connectedCallback() {
1422
1406
  super.connectedCallback();
1423
1407
  }
1424
1408
  render() {
1425
- const isValid = this.control?.checkValidity();
1409
+ const isValid = this.getControl()?.checkValidity();
1426
1410
  return html`
1427
1411
  <label class="base">
1428
1412
  <slot @slotchange=${this.#handleSlotChange}></slot>
@@ -1434,7 +1418,7 @@ const _OdxFormField = class _OdxFormField extends CustomElement {
1434
1418
  renderErrorMessage() {
1435
1419
  return html`
1436
1420
  <odx-inline-message variant="danger">
1437
- ${this.control?.validationMessage}
1421
+ ${this.getControl()?.validationMessage}
1438
1422
  </odx-inline-message>
1439
1423
  `;
1440
1424
  }
@@ -1443,9 +1427,6 @@ const _OdxFormField = class _OdxFormField extends CustomElement {
1443
1427
  __decorateClass([
1444
1428
  state()
1445
1429
  ], _OdxFormField.prototype, "touched", 2);
1446
- __decorateClass([
1447
- queryAssignedElements({ slot: "control", flatten: true })
1448
- ], _OdxFormField.prototype, "controls", 2);
1449
1430
  let OdxFormField = _OdxFormField;
1450
1431
 
1451
1432
  class BaseFormat extends IsLocalized(CustomElement) {
@@ -1683,9 +1664,9 @@ let OdxTitle = _OdxTitle;
1683
1664
 
1684
1665
  const styles$R = ":host{display:block;position:relative}.base{display:flex;position:relative;gap:var(--odx-size-75);place-items:center;z-index:1;background-color:var(--odx-color-background-level-1);padding-inline:var(--odx-size-150);block-size:var(--odx-size-300)}.background{position:absolute;inset:0;z-index:0;box-shadow:0 0 0 100vmax var(--odx-color-background-level-1);background-color:var(--odx-color-background-level-1);clip-path:inset(0 -100vmax)}odx-logo{flex:0 0 auto}::slotted(odx-title){margin-right:auto}::slotted(odx-separator){--min-size: var(--odx-size-150);--margin-inline: 0}::slotted(odx-search-bar){flex:1 1 auto}@media screen and (width <= 600px){odx-logo{display:none}}";
1685
1666
 
1686
- const _OdxHeader = class _OdxHeader extends CustomElement {
1667
+ class OdxHeader extends CustomElement {
1687
1668
  static {
1688
- customElement("odx-header", styles$R)(_OdxHeader);
1669
+ customElement("odx-header", styles$R)(OdxHeader);
1689
1670
  }
1690
1671
  connectedCallback() {
1691
1672
  super.connectedCallback();
@@ -1703,18 +1684,14 @@ const _OdxHeader = class _OdxHeader extends CustomElement {
1703
1684
  `;
1704
1685
  }
1705
1686
  #handleSlotChange = () => {
1706
- const [titleElement] = this.titleElements;
1687
+ const titleElement = getAssignedElement(this.renderRoot, { selector: OdxTitle.tagName, flatten: true });
1707
1688
  if (!titleElement) return;
1708
1689
  titleElement.ariaLevel = "1";
1709
1690
  titleElement.role = "heading";
1710
1691
  titleElement.size = TitleSize.XS;
1711
1692
  titleElement.classList.add("odx-no-overflow");
1712
1693
  };
1713
- };
1714
- __decorateClass([
1715
- queryAssignedElements({ selector: OdxTitle.tagName, flatten: true })
1716
- ], _OdxHeader.prototype, "titleElements", 2);
1717
- let OdxHeader = _OdxHeader;
1694
+ }
1718
1695
 
1719
1696
  const styles$Q = ":host{display:flex;gap:var(--odx-size-75);align-items:center;block-size:100%}::slotted(odx-separator){--min-size: var(--odx-size-150);--margin-inline: 0}";
1720
1697
 
@@ -2185,36 +2162,7 @@ __decorateClass([
2185
2162
  ], _OdxLineClamp.prototype, "max", 2);
2186
2163
  let OdxLineClamp = _OdxLineClamp;
2187
2164
 
2188
- const styles$I = ":host{--item-indent-level: 0;display:block}::slotted([role=\"listitem\"]){--indent-level: var(--item-indent-level)}";
2189
-
2190
- const _OdxList = class _OdxList extends CustomElement {
2191
- constructor() {
2192
- super();
2193
- this.multiple = false;
2194
- new ExpandableItemManager(this, { getItems: () => this.items });
2195
- }
2196
- static {
2197
- customElement("odx-list", styles$I)(_OdxList);
2198
- }
2199
- connectedCallback() {
2200
- super.connectedCallback();
2201
- this.role = "list";
2202
- }
2203
- toggleAll(state, emitEvent = false) {
2204
- for (const item of this.items) {
2205
- item.toggle(state, emitEvent);
2206
- }
2207
- }
2208
- };
2209
- __decorateClass([
2210
- queryAssignedElements({ selector: '[role="listitem"]', flatten: true })
2211
- ], _OdxList.prototype, "items", 2);
2212
- __decorateClass([
2213
- property({ type: Boolean, reflect: true, useDefault: true })
2214
- ], _OdxList.prototype, "multiple", 2);
2215
- let OdxList = _OdxList;
2216
-
2217
- const styles$H = "@layer base{:host{--indent-level: 0;--_block-size: var(--odx-size-300);--_padding-block: var(--odx-size-75);display:flex;flex-direction:column;place-items:initial;block-size:auto;max-inline-size:100%}[part~=base]{place-content:flex-start;z-index:1;outline-offset:calc(-1 * var(--odx-focus-ring-offset));padding-inline-start:calc(var(--odx-size-50) + var(--indent-level) * var(--odx-size-200));max-block-size:var(--_block-size);text-align:start;>*{--odx-focus-ring-offset: 0}}[part~=separator]{--margin-block: 0;--margin-inline: var(--odx-size-50)}[part~=expand-control]{margin-block:var(--_icon-margin)}[part~=expand-control]::part(icon){transition:var(--odx-transition-reduced)}::slotted(odx-list){--item-indent-level: calc(var(--indent-level) + 1)}:host(:last-of-type) [part~=separator]{opacity:0}}@layer variant{[part~=base]:has([part~=expand-control]:active){--_color-background-pressed: var(--_color-background-hover)}:host(:not([compact])){::slotted(odx-icon){margin-inline:var(--odx-size-37)}}:host([compact]){--_block-size: var(--odx-size-225);[part~=expand-control]{--_icon-size: var(--odx-size-150)}[part~=base]{max-block-size:var(--_block-size)}}}@layer state{:host(:not([interactive]):hover):after{opacity:0}:host([interactive]:not([disabled])){--_color-background-hover: var(--_color-background);--_color-background-pressed: var(--_color-background);cursor:default}:host([selected]){--_color-background: var(--odx-color-background-transparent-selected-hover);--_color-background-hover: var(--odx-color-background-transparent-selected-hover)}:host([selected][disabled]){--_color-background: var(--odx-color-background-disabled-selected);--_color-background-hover: var(--_color-background);--_color-background-pressed: var(--_color-background);--_color-foreground: var(--odx-color-foreground-disabled-selected);cursor:not-allowed}:host([expanded]){[part~=separator]{opacity:1}[part~=expand-control]{--icon-rotation: 180deg}}}";
2165
+ const styles$I = "@layer base{:host{--indent-level: 0;--_block-size: var(--odx-size-300);--_padding-block: var(--odx-size-75);display:flex;flex-direction:column;place-items:initial;block-size:auto;max-inline-size:100%}[part~=base]{place-content:flex-start;z-index:1;outline-offset:calc(-1 * var(--odx-focus-ring-offset));padding-inline-start:calc(var(--odx-size-50) + var(--indent-level) * var(--odx-size-200));max-block-size:var(--_block-size);text-align:start;>*{--odx-focus-ring-offset: 0}}[part~=separator]{--margin-block: 0;--margin-inline: var(--odx-size-50)}[part~=expand-control]{margin-block:var(--_icon-margin)}[part~=expand-control]::part(icon){transition:var(--odx-transition-reduced)}::slotted(odx-list){--item-indent-level: calc(var(--indent-level) + 1)}:host(:last-of-type) [part~=separator]{opacity:0}}@layer variant{[part~=base]:has([part~=expand-control]:active){--_color-background-pressed: var(--_color-background-hover)}:host(:not([compact])){::slotted(odx-icon){margin-inline:var(--odx-size-37)}}:host([compact]){--_block-size: var(--odx-size-225);[part~=expand-control]{--_icon-size: var(--odx-size-150)}[part~=base]{max-block-size:var(--_block-size)}}}@layer state{:host(:not([interactive]):hover):after{opacity:0}:host([interactive]:not([disabled])){--_color-background-hover: var(--_color-background);--_color-background-pressed: var(--_color-background);cursor:default}:host([selected]){--_color-background: var(--odx-color-background-transparent-selected-hover);--_color-background-hover: var(--odx-color-background-transparent-selected-hover)}:host([selected][disabled]){--_color-background: var(--odx-color-background-disabled-selected);--_color-background-hover: var(--_color-background);--_color-background-pressed: var(--_color-background);--_color-foreground: var(--odx-color-foreground-disabled-selected);cursor:not-allowed}:host([expanded]){[part~=separator]{opacity:1}[part~=expand-control]{--icon-rotation: 180deg}}}";
2218
2166
 
2219
2167
  const _OdxListItem = class _OdxListItem extends CanBeExpanded(InteractiveElement) {
2220
2168
  constructor() {
@@ -2226,10 +2174,10 @@ const _OdxListItem = class _OdxListItem extends CanBeExpanded(InteractiveElement
2226
2174
  this.withExpandIndicator = false;
2227
2175
  }
2228
2176
  static {
2229
- customElement("odx-list-item", styles$H)(_OdxListItem);
2177
+ customElement("odx-list-item", styles$I)(_OdxListItem);
2230
2178
  }
2231
2179
  isExpandable() {
2232
- return !(this.disabled || this.loading) && this.expandableItems.length > 0;
2180
+ return !(this.disabled || this.loading) && !!getAssignedElement(this.renderRoot, { slot: "expand" });
2233
2181
  }
2234
2182
  getExpandControl() {
2235
2183
  if (!this.isExpandable()) return null;
@@ -2298,9 +2246,6 @@ const _OdxListItem = class _OdxListItem extends CanBeExpanded(InteractiveElement
2298
2246
  this.querySelector("odx-list")?.toggleAll(false);
2299
2247
  }
2300
2248
  };
2301
- __decorateClass([
2302
- queryAssignedElements({ slot: "expand" })
2303
- ], _OdxListItem.prototype, "expandableItems", 2);
2304
2249
  __decorateClass([
2305
2250
  query("#list-item-content")
2306
2251
  ], _OdxListItem.prototype, "region", 2);
@@ -2321,6 +2266,35 @@ __decorateClass([
2321
2266
  ], _OdxListItem.prototype, "withExpandIndicator", 2);
2322
2267
  let OdxListItem = _OdxListItem;
2323
2268
 
2269
+ const styles$H = ":host{--item-indent-level: 0;display:block}::slotted(odx-list-item){--indent-level: var(--item-indent-level)}";
2270
+
2271
+ const _OdxList = class _OdxList extends CustomElement {
2272
+ constructor() {
2273
+ super();
2274
+ this.multiple = false;
2275
+ new ExpandableItemManager(this, { getItems: () => this.getItems() });
2276
+ }
2277
+ static {
2278
+ customElement("odx-list", styles$H)(_OdxList);
2279
+ }
2280
+ getItems() {
2281
+ return getAssignedElements(this.renderRoot, { selector: OdxListItem.tagName, flatten: true });
2282
+ }
2283
+ connectedCallback() {
2284
+ super.connectedCallback();
2285
+ this.role = "list";
2286
+ }
2287
+ toggleAll(state, emitEvent = false) {
2288
+ for (const item of this.getItems()) {
2289
+ item.toggle?.(state, emitEvent);
2290
+ }
2291
+ }
2292
+ };
2293
+ __decorateClass([
2294
+ property({ type: Boolean, reflect: true, useDefault: true })
2295
+ ], _OdxList.prototype, "multiple", 2);
2296
+ let OdxList = _OdxList;
2297
+
2324
2298
  const styles$G = ":host{--_overlay-fill-color: var(--odx-color-backdrop, rgb(255 255 255 / 25%));display:contents;border-radius:inherit;overflow:hidden}[part~=overlay]{display:flex;position:absolute;inset:0;flex-direction:column;place-content:center;place-items:center;transition:var(--odx-transition-reduced) allow-discrete;visibility:hidden;opacity:0;border-radius:inherit;overflow:hidden;pointer-events:none}[part~=content]{min-inline-size:var(--odx-size-225);text-align:center}:host([loading]) [part~=overlay]{visibility:visible;opacity:1;z-index:9999;background-color:var(--_overlay-fill-color);pointer-events:all;backdrop-filter:blur(var(--odx-size-12))}";
2325
2299
 
2326
2300
  const LOADING_OVERLAY_HOST_DIRECTIVE = "odx-loading-overlay-host";
@@ -2442,11 +2416,11 @@ const _OdxMainMenu = class _OdxMainMenu extends CustomElement {
2442
2416
  super();
2443
2417
  this.open = false;
2444
2418
  this.#handleSlotChange = () => {
2445
- for (const link of this.links) {
2419
+ for (const link of getAssignedElements(this.renderRoot, { selector: OdxLink.tagName, flatten: true })) {
2446
2420
  link.slot ||= "link-navigation";
2447
2421
  link.subtle = true;
2448
2422
  }
2449
- for (const item of this.items) {
2423
+ for (const item of getAssignedElements(this.renderRoot, { selector: OdxNavigationItem.tagName, flatten: true })) {
2450
2424
  item.size = NavigationItemSize.LG;
2451
2425
  }
2452
2426
  };
@@ -2496,12 +2470,6 @@ const _OdxMainMenu = class _OdxMainMenu extends CustomElement {
2496
2470
  #handleSlotChange;
2497
2471
  #handleToggle;
2498
2472
  };
2499
- __decorateClass([
2500
- queryAssignedElements({ selector: "odx-link", flatten: true })
2501
- ], _OdxMainMenu.prototype, "links", 2);
2502
- __decorateClass([
2503
- queryAssignedElements({ selector: "odx-navigation-item", flatten: true })
2504
- ], _OdxMainMenu.prototype, "items", 2);
2505
2473
  __decorateClass([
2506
2474
  property({ type: Boolean, reflect: true, useDefault: true })
2507
2475
  ], _OdxMainMenu.prototype, "open", 2);
@@ -2810,7 +2778,7 @@ const _OdxNavigationItemGroup = class _OdxNavigationItemGroup extends CanBeExpan
2810
2778
  customElement("odx-navigation-item-group", styles$A)(_OdxNavigationItemGroup);
2811
2779
  }
2812
2780
  getItems() {
2813
- return this.items;
2781
+ return getAssignedElements(this.renderRoot, { selector: OdxNavigationItem.tagName, flatten: true });
2814
2782
  }
2815
2783
  render() {
2816
2784
  const contentHidden = this.disabled || !this.expanded;
@@ -2823,23 +2791,18 @@ const _OdxNavigationItemGroup = class _OdxNavigationItemGroup extends CanBeExpan
2823
2791
  </odx-navigation-item>
2824
2792
  <odx-toggle-content ?hidden=${contentHidden} tabindex=${optionalAttr(contentHidden ? -1 : null)}>
2825
2793
  <div class="content odx-stack">
2826
- <slot></slot>
2794
+ <slot @slotChange=${() => this.requestUpdate()}></slot>
2827
2795
  </div>
2828
2796
  </odx-toggle-content>
2829
2797
  `;
2830
2798
  }
2831
2799
  updated(props) {
2832
2800
  super.updated(props);
2833
- if (props.has("size") && this.size != null) {
2834
- for (const item of this.items) {
2835
- item.size = this.size;
2836
- }
2801
+ for (const item of this.getItems()) {
2802
+ item.size = this.size;
2837
2803
  }
2838
2804
  }
2839
2805
  };
2840
- __decorateClass([
2841
- queryAssignedElements({ selector: "odx-navigation-item" })
2842
- ], _OdxNavigationItemGroup.prototype, "items", 2);
2843
2806
  __decorateClass([
2844
2807
  property()
2845
2808
  ], _OdxNavigationItemGroup.prototype, "label", 2);
@@ -3131,9 +3094,6 @@ const _OdxProgressBar = class _OdxProgressBar extends BaseProgress {
3131
3094
  `;
3132
3095
  }
3133
3096
  };
3134
- __decorateClass([
3135
- queryAssignedElements()
3136
- ], _OdxProgressBar.prototype, "content", 2);
3137
3097
  __decorateClass([
3138
3098
  property({ type: Boolean, reflect: true, useDefault: true })
3139
3099
  ], _OdxProgressBar.prototype, "condensed", 2);
@@ -3195,7 +3155,7 @@ const _OdxProgressRing = class _OdxProgressRing extends BaseProgress {
3195
3155
  </svg>
3196
3156
  <slot></slot>
3197
3157
  ${when(
3198
- this.content.length === 0 && !this.valueHidden,
3158
+ getAssignedElement(this.renderRoot) && !this.valueHidden,
3199
3159
  () => html`
3200
3160
  <odx-text part="value" aria-hidden="true" size=${this.size}>
3201
3161
  ${valueText}
@@ -3217,9 +3177,6 @@ const _OdxProgressRing = class _OdxProgressRing extends BaseProgress {
3217
3177
  return normalizedStroke;
3218
3178
  }
3219
3179
  };
3220
- __decorateClass([
3221
- queryAssignedElements({ flatten: true })
3222
- ], _OdxProgressRing.prototype, "content", 2);
3223
3180
  __decorateClass([
3224
3181
  property({ reflect: true, useDefault: true })
3225
3182
  ], _OdxProgressRing.prototype, "size", 2);
@@ -3296,7 +3253,7 @@ const _OdxRailNavigation = class _OdxRailNavigation extends IsLocalized(CustomEl
3296
3253
  }
3297
3254
  render() {
3298
3255
  return html`
3299
- <slot></slot>
3256
+ <slot @slotchange=${() => this.requestUpdate()}></slot>
3300
3257
  <odx-navigation-item class="toggle-control" size=${this.size} @click=${this.#handleControlClick}>
3301
3258
  <odx-icon class="toggle-indicator" name="core::chevron-left" slot="prefix"></odx-icon>
3302
3259
  <odx-visually-hidden>
@@ -3306,7 +3263,10 @@ const _OdxRailNavigation = class _OdxRailNavigation extends IsLocalized(CustomEl
3306
3263
  `;
3307
3264
  }
3308
3265
  getItems() {
3309
- return this.navigationItems.flatMap((item) => {
3266
+ return getAssignedElements(this.renderRoot, {
3267
+ selector: `:is(${OdxNavigationItemGroup.tagName}, ${OdxNavigationItem.tagName})`,
3268
+ flatten: true
3269
+ }).flatMap((item) => {
3310
3270
  if (item instanceof OdxNavigationItemGroup) {
3311
3271
  return item.getItems();
3312
3272
  }
@@ -3315,15 +3275,12 @@ const _OdxRailNavigation = class _OdxRailNavigation extends IsLocalized(CustomEl
3315
3275
  }
3316
3276
  updated(props) {
3317
3277
  super.updated(props);
3318
- for (const item of this.navigationItems) {
3278
+ for (const item of this.getItems()) {
3319
3279
  item.size = this.size;
3320
3280
  }
3321
3281
  }
3322
3282
  #handleControlClick;
3323
3283
  };
3324
- __decorateClass([
3325
- queryAssignedElements({ selector: `:is(${OdxNavigationItemGroup.tagName}, ${OdxNavigationItem.tagName})`, flatten: true })
3326
- ], _OdxRailNavigation.prototype, "navigationItems", 2);
3327
3284
  __decorateClass([
3328
3285
  property({ type: Boolean, reflect: true, useDefault: true })
3329
3286
  ], _OdxRailNavigation.prototype, "collapsed", 2);
@@ -3547,9 +3504,6 @@ const _OdxSelect = class _OdxSelect extends ListboxFormControl {
3547
3504
  #handleKeyDown;
3548
3505
  #handleSelect;
3549
3506
  };
3550
- __decorateClass([
3551
- queryAssignedElements({ selector: '[role="option"]', flatten: true })
3552
- ], _OdxSelect.prototype, "options", 2);
3553
3507
  __decorateClass([
3554
3508
  query(OdxDropdown.tagName, true)
3555
3509
  ], _OdxSelect.prototype, "dropdown", 2);
@@ -3978,6 +3932,9 @@ const _OdxSpinbox = class _OdxSpinbox extends FormControl {
3978
3932
  static {
3979
3933
  customElement("odx-spinbox", styles$h)(_OdxSpinbox);
3980
3934
  }
3935
+ get options() {
3936
+ return getAssignedElements(this.renderRoot, { selector: '[role="option"]', flatten: true });
3937
+ }
3981
3938
  clear() {
3982
3939
  this.value = "";
3983
3940
  }
@@ -4027,9 +3984,6 @@ const _OdxSpinbox = class _OdxSpinbox extends FormControl {
4027
3984
  #handleClick;
4028
3985
  #handleKeyDown;
4029
3986
  };
4030
- __decorateClass([
4031
- queryAssignedElements({ selector: '[role="option"]', flatten: true })
4032
- ], _OdxSpinbox.prototype, "options", 2);
4033
3987
  __decorateClass([
4034
3988
  property({ type: Boolean, reflect: true, useDefault: true })
4035
3989
  ], _OdxSpinbox.prototype, "interactive", 2);
@@ -4198,6 +4152,9 @@ const _OdxTableRow = class _OdxTableRow extends CanBeDisabled(CustomElement) {
4198
4152
  static {
4199
4153
  customElement("odx-table-row", styles$b)(_OdxTableRow);
4200
4154
  }
4155
+ get checkboxCells() {
4156
+ return getAssignedElements(this.renderRoot, { selector: OdxTableCheckboxCell.tagName, flatten: true });
4157
+ }
4201
4158
  connectedCallback() {
4202
4159
  super.connectedCallback();
4203
4160
  this.role = "row";
@@ -4238,9 +4195,6 @@ const _OdxTableRow = class _OdxTableRow extends CanBeDisabled(CustomElement) {
4238
4195
  #handleChange;
4239
4196
  #handleSlotchange;
4240
4197
  };
4241
- __decorateClass([
4242
- queryAssignedElements({ selector: OdxTableCheckboxCell.tagName, flatten: true })
4243
- ], _OdxTableRow.prototype, "checkboxCells", 2);
4244
4198
  __decorateClass([
4245
4199
  property({ type: Boolean, reflect: true, useDefault: true })
4246
4200
  ], _OdxTableRow.prototype, "selected", 2);
@@ -4434,10 +4388,10 @@ __decorateClass([
4434
4388
  ], _OdxToast.prototype, "variant", 2);
4435
4389
  let OdxToast = _OdxToast;
4436
4390
 
4437
- const styles$5 = "@layer base{:host{--_border-radius: var(--odx-border-radius-sm);--_color-background: var(--odx-color-background-control-rest);--_color-background-hover: var(--odx-color-background-control-hover);--_color-foreground: var(--odx-color-foreground-rest);--_color-stroke: var(--odx-color-stroke-control-subtle);--_color-stroke-hover: var(--odx-color-stroke-control-hover);--_size: var(--odx-size-225);--_icon-size: var(--odx-size-150);--_padding-inline: var(--odx-size-75);display:inline-flex;position:relative;gap:var(--_padding-inline);align-items:center;justify-content:center;transition:var(--odx-transition-default) allow-discrete;transition-property:color,background-color,border-color,outline-color,z-index;outline:var(--odx-focus-ring-outline);outline-offset:var(--odx-focus-ring-offset);border:var(--odx-border-width-thin) solid var(--_color-stroke);border-radius:var(--odx-border-radius-controls);background-color:var(--_color-background);cursor:pointer;padding-inline:var(--_padding-inline);block-size:var(--_size);overflow:hidden;white-space:nowrap;color:var(--_color-foreground);font-weight:var(--odx-typography-font-weight-medium);user-select:none}::slotted(odx-icon){margin-inline:calc(-1 * var(--odx-size-37) - var(--odx-border-width-thin));font-size:var(--_icon-size)}[part~=label]{display:inline-block}}@layer state{:host(:focus-visible){outline-color:var(--odx-color-stroke-focus-outer)}:host([disabled]:not([readonly])){--_color-background: var(--odx-color-background-disabled-rest);--_color-foreground: var(--odx-color-foreground-disabled-rest);--_color-stroke: var(--odx-color-stroke-disabled-rest);cursor:not-allowed}:host([readonly]){--_color-background: var(--odx-color-background-control-readonly);--_color-stroke: var(--odx-color-stroke-control-subtle);--_color-foreground: var(--odx-color-foreground-rest-subtle);cursor:default}:host([readonly][variant=\"ghost\"]){--_color-stroke: transparent}:host([checked][disabled]:not([readonly])){--_color-background: var(--odx-color-background-disabled-selected);--_color-foreground: var(--odx-color-foreground-disabled-selected)}:host([checked]),:host([checked][readonly]){--_color-background: var(--odx-color-background-control-selected);--_color-background-hover: var(--odx-color-background-control-selected);--_color-foreground: var(--odx-color-foreground-inverse);--_color-stroke: var(--odx-color-stroke-control-selected);--_color-stroke-hover: var(--odx-color-stroke-control-selected)}:host([checked][variant=\"ghost\"]){--_color-background: var(--odx-color-background-transparent-selected);--_color-background-hover: var(--odx-color-background-transparent-selected-hover);--_color-foreground: var(--odx-color-foreground-rest);--_color-stroke: transparent}:host(:hover:not(:is([readonly],[disabled]))){--_color-background: var(--_color-background-hover);--_color-stroke: var(--_color-stroke-hover)}}@layer variant{:host([variant=\"ghost\"]){--_color-background: transparent;--_color-stroke: transparent;--_color-stroke-hover: transparent;outline-offset:0}:host([size=\"sm\"]){--_size: var(--odx-size-200);--_icon-size: var(--odx-size-125)}}";
4391
+ const styles$5 = "@layer base{:host{--_border-radius: var(--odx-border-radius-sm);--_color-background: var(--odx-color-background-transparent-rest);--_color-background-hover: var(--odx-color-background-transparent-hover);--_color-foreground: var(--odx-color-foreground-rest);--_color-stroke: var(--odx-color-stroke-neutral-subtle);--_color-stroke-hover: var(--odx-color-stroke-neutral-subtle);--_size: var(--odx-size-225);--_icon-size: var(--odx-size-150);--_padding-inline: var(--odx-size-75);display:inline-flex;position:relative;gap:var(--_padding-inline);align-items:center;justify-content:center;transition:var(--odx-transition-default) allow-discrete;transition-property:color,background-color,border-color,outline-color,z-index;outline:var(--odx-focus-ring-outline);border:var(--odx-border-width-thin) solid var(--_color-stroke);border-radius:var(--odx-border-radius-controls);background-color:var(--_color-background);cursor:pointer;padding-inline:var(--_padding-inline);block-size:var(--_size);min-inline-size:var(--_size);overflow:hidden;white-space:nowrap;color:var(--_color-foreground);font-weight:var(--odx-typography-font-weight-medium);user-select:none}odx-icon,::slotted(odx-icon){margin-inline:calc(-1 * var(--odx-size-37) - var(--odx-border-width-thin));font-size:var(--_icon-size)}[part~=label]{display:inline-block}}@layer state{:host(:focus-visible){outline-color:var(--odx-color-stroke-focus-outer)}:host([disabled]:not([readonly])){--_color-background: var(--odx-color-background-disabled-rest);--_color-foreground: var(--odx-color-foreground-disabled-rest);--_color-stroke: var(--odx-color-stroke-disabled-rest);cursor:not-allowed}:host([readonly]){--_color-background: var(--odx-color-background-control-readonly);--_color-stroke: var(--odx-color-stroke-control-subtle);--_color-foreground: var(--odx-color-foreground-rest-subtle);cursor:default}:host([checked][variant=\"ghost\"]),:host([readonly][variant=\"ghost\"]){--_color-stroke: transparent}:host([checked][disabled]:not([readonly])){--_color-background: var(--odx-color-background-disabled-selected);--_color-foreground: var(--odx-color-foreground-disabled-selected)}:host([checked]),:host([checked][readonly]){--_color-background: var(--odx-color-background-transparent-selected);--_color-background-hover: var(--odx-color-background-transparent-selected-hover);--_color-foreground: var(--odx-color-foreground-rest)}:host([checked][required]){cursor:default}:host([checked][variant=\"primary\"]){--_color-background: var(--odx-color-background-control-selected);--_color-background-hover: var(--odx-color-background-control-selected-hover);--_color-foreground: var(--odx-color-foreground-inverse);--_color-stroke: var(--odx-color-stroke-control-selected);--_color-stroke-hover: var(--odx-color-stroke-control-selected)}:host(:hover:not(:is([readonly],[disabled]))){--_color-background: var(--_color-background-hover);--_color-stroke: var(--_color-stroke-hover)}}@layer variant{:host([variant=\"ghost\"]){--_color-background: transparent;--_color-stroke: transparent;--_color-stroke-hover: transparent}:host([variant=\"primary\"]){--_color-background: var(--odx-color-background-control-rest);--_color-background-hover: var(--odx-color-background-control-hover);--_color-foreground: var(--odx-color-foreground-rest);--_color-stroke: var(--odx-color-stroke-control-subtle);--_color-stroke-hover: var(--odx-color-stroke-control-hover);outline-offset:var(--odx-focus-ring-offset)}:host([size=\"sm\"]){--_size: var(--odx-size-200);--_icon-size: var(--odx-size-125)}}";
4438
4392
 
4439
4393
  const ToggleButtonSize = pick(Size, ["SM", "MD"]);
4440
- const ToggleButtonVariant = pick(Variant, ["NEUTRAL", "GHOST"]);
4394
+ const ToggleButtonVariant = pick(Variant, ["NEUTRAL", "PRIMARY", "GHOST"]);
4441
4395
  const _OdxToggleButton = class _OdxToggleButton extends CheckboxFormControl {
4442
4396
  constructor() {
4443
4397
  super(...arguments);
@@ -4452,9 +4406,19 @@ const _OdxToggleButton = class _OdxToggleButton extends CheckboxFormControl {
4452
4406
  this.role = "button";
4453
4407
  }
4454
4408
  render() {
4409
+ const currentIcon = this.checked ? this.iconChecked || this.icon : this.icon;
4410
+ const currentLabel = this.checked ? this.labelChecked || this.label : this.label;
4455
4411
  return html`
4412
+ ${when(currentIcon, (icon) => html`<odx-icon name=${icon}></odx-icon>`)}
4456
4413
  ${super.render()}
4457
- ${when(this.label, (label) => this.renderLabel(label))}
4414
+ ${when(
4415
+ currentLabel,
4416
+ (label) => html`
4417
+ <odx-tooltip class="tooltip" placement=${optionalAttr(this.labelPlacement)} size="sm">
4418
+ <odx-text size="sm">${label}</odx-text>
4419
+ </odx-tooltip>
4420
+ `
4421
+ )}
4458
4422
  `;
4459
4423
  }
4460
4424
  willUpdate(props) {
@@ -4466,8 +4430,10 @@ const _OdxToggleButton = class _OdxToggleButton extends CheckboxFormControl {
4466
4430
  }
4467
4431
  updated(props) {
4468
4432
  super.updated(props);
4469
- if (props.has("label")) {
4470
- this.#handleLabelChange();
4433
+ if (props.has("label") || props.has("labelChecked")) {
4434
+ this.ariaLabel = this.label || null;
4435
+ const tooltip = this.renderRoot.querySelector("odx-tooltip");
4436
+ tooltip?.mountPopover(this);
4471
4437
  }
4472
4438
  }
4473
4439
  renderLabel(label) {
@@ -4477,18 +4443,22 @@ const _OdxToggleButton = class _OdxToggleButton extends CheckboxFormControl {
4477
4443
  </odx-tooltip>
4478
4444
  `;
4479
4445
  }
4480
- #handleLabelChange() {
4481
- this.ariaLabel = this.label || null;
4482
- const tooltip = this.renderRoot.querySelector("odx-tooltip");
4483
- tooltip?.mountPopover(this);
4484
- }
4485
4446
  };
4486
4447
  __decorateClass([
4487
4448
  property()
4488
4449
  ], _OdxToggleButton.prototype, "label", 2);
4450
+ __decorateClass([
4451
+ property({ attribute: "label-checked" })
4452
+ ], _OdxToggleButton.prototype, "labelChecked", 2);
4489
4453
  __decorateClass([
4490
4454
  property({ attribute: "label-placement" })
4491
4455
  ], _OdxToggleButton.prototype, "labelPlacement", 2);
4456
+ __decorateClass([
4457
+ property()
4458
+ ], _OdxToggleButton.prototype, "icon", 2);
4459
+ __decorateClass([
4460
+ property({ attribute: "icon-checked" })
4461
+ ], _OdxToggleButton.prototype, "iconChecked", 2);
4492
4462
  __decorateClass([
4493
4463
  property({ reflect: true, useDefault: true })
4494
4464
  ], _OdxToggleButton.prototype, "size", 2);
@@ -4582,28 +4552,17 @@ const _OdxToolbar = class _OdxToolbar extends CustomElement {
4582
4552
  return html`<slot @slotchange=${() => this.requestUpdate()}></slot>`;
4583
4553
  }
4584
4554
  updated(_changedProperties) {
4585
- for (const element of this.slottedElements) {
4586
- if (element instanceof OdxButton || element instanceof OdxButtonGroup) {
4587
- this.#updateButton(element);
4588
- }
4589
- if (element instanceof OdxToggleButton || element instanceof OdxToggleButtonGroup) {
4590
- this.#updateToggleButton(element);
4591
- }
4555
+ for (const element of getAssignedElements(this.renderRoot)) {
4556
+ if (!this.#isButtonElement(element)) continue;
4557
+ element.size = this.size;
4558
+ if (ALLOWED_BUTTON_VARIANTS.includes(element.variant)) continue;
4559
+ element.variant = ButtonVariant.GHOST;
4592
4560
  }
4593
4561
  }
4594
- #updateButton(element) {
4595
- element.size = this.size;
4596
- if (element.variant && ALLOWED_BUTTON_VARIANTS.includes(element.variant)) return;
4597
- element.variant = ButtonVariant.GHOST;
4598
- }
4599
- #updateToggleButton(element) {
4600
- element.size = this.size;
4601
- element.variant = ButtonVariant.GHOST;
4562
+ #isButtonElement(element) {
4563
+ return element instanceof OdxButton || element instanceof OdxButtonGroup || element instanceof OdxToggleButton || element instanceof OdxToggleButtonGroup;
4602
4564
  }
4603
4565
  };
4604
- __decorateClass([
4605
- queryAssignedElements({ flatten: true })
4606
- ], _OdxToolbar.prototype, "slottedElements", 2);
4607
4566
  __decorateClass([
4608
4567
  property({ type: Boolean, reflect: true, useDefault: true })
4609
4568
  ], _OdxToolbar.prototype, "float", 2);
@@ -5,7 +5,7 @@ import { OptionControl } from './option-control.js';
5
5
  export declare class ListboxFormControl<Option extends OptionControl> extends FormControl<string | string[]> {
6
6
  #private;
7
7
  protected readonly activeDescendants: ActiveDescendantsController<Option>;
8
- protected options: Option[];
8
+ protected get options(): Option[];
9
9
  autoSelect: boolean;
10
10
  multiple: boolean;
11
11
  placeholder: string;
@@ -13,6 +13,7 @@ export interface GetAssignedElementOptions {
13
13
  selector?: string;
14
14
  flatten?: boolean;
15
15
  }
16
+ export declare function getAssignedElements<T = HTMLElement>(root: DocumentFragment | HTMLElement | null, options?: GetAssignedElementOptions): T[];
16
17
  export declare function getAssignedElement<T = HTMLElement>(root: DocumentFragment | HTMLElement | null, options?: GetAssignedElementOptions): T | undefined;
17
18
  export declare function getKeyInfo(event: KeyboardEvent): {
18
19
  up: boolean;
package/dist/main.js CHANGED
@@ -5,7 +5,7 @@ import { r as round, u as uniqBy, R as RovingTabindexController, m as minBy, p a
5
5
 
6
6
  const name = "@odx/foundation";
7
7
  const displayName = "ODX Design System Foundation";
8
- const version = "1.0.0-beta.135";
8
+ const version = "1.0.0-beta.136";
9
9
  const pkg = {
10
10
  name,
11
11
  displayName,
@@ -65,15 +65,18 @@ function toPx(value) {
65
65
  if (value == null || Number.isNaN(value)) return null;
66
66
  return `${round(value, 2)}px`;
67
67
  }
68
- function getAssignedElement(root, options) {
68
+ function getAssignedElements(root, options) {
69
69
  const { slot, selector } = options ?? {};
70
70
  const slotSelector = `slot${slot ? `[name=${slot}]` : ":not([name])"}`;
71
71
  const slotEl = root?.querySelector(slotSelector);
72
- const elements = slotEl?.assignedElements(options) ?? [];
72
+ const elements = slotEl?.assignedElements({ flatten: true, ...options }) ?? [];
73
73
  if (selector == null) {
74
- return elements[0];
74
+ return elements;
75
75
  }
76
- return elements.find((node) => node.matches(selector));
76
+ return elements.filter((node) => node.matches(selector));
77
+ }
78
+ function getAssignedElement(root, options) {
79
+ return getAssignedElements(root, options)[0];
77
80
  }
78
81
  function getKeyInfo(event) {
79
82
  const { code, shiftKey } = event;
@@ -590,6 +593,9 @@ class ListboxFormControl extends FormControl {
590
593
  this.addEventListener("keydown", this.#handleKeydown);
591
594
  }
592
595
  }
596
+ get options() {
597
+ return getAssignedElements(this.renderRoot, { selector: '[role="option"]', flatten: true });
598
+ }
593
599
  get selectedOptions() {
594
600
  return this.options.filter((option) => option.selected);
595
601
  }
@@ -1266,4 +1272,4 @@ const main = {
1266
1272
  version: pkg.version
1267
1273
  };
1268
1274
 
1269
- export { ActiveDescendantsController, ActiveDescendantsControllerOptions, Align, BadgeAlign, CanBeDisabled, CanBeExpanded, CheckboxFormControl, CheckboxGroupFormControl, CustomElement, DragController, DragControllerOptions, ExpandableItemManager, ExpandableItemManagerOptions, FormControl, Gap, IS_DRAG_ACTIVE_ATTRIBUTE, InteractiveElement, InteractiveLink, IsDraggable, Justify, ListboxFormControl, NumberFormControl, OptionControl, Placement, PopoverPlacementOptions, ProgressVariant, RadioGroupFormControl, Shape, SharedResizeObserver, Size, Variant, clickedOutside, computePopoverPlacement, customElement, main as default, findClosestDocument, forwardEvent, getAssignedElement, getElementFromEvent, getIdFromHref, getKeyInfo, getUniqueId, optionalAttr, optionalSlot, parseDate, supportsHover, toAriaBooleanAttribute, toPx, waitForAnimations };
1275
+ export { ActiveDescendantsController, ActiveDescendantsControllerOptions, Align, BadgeAlign, CanBeDisabled, CanBeExpanded, CheckboxFormControl, CheckboxGroupFormControl, CustomElement, DragController, DragControllerOptions, ExpandableItemManager, ExpandableItemManagerOptions, FormControl, Gap, IS_DRAG_ACTIVE_ATTRIBUTE, InteractiveElement, InteractiveLink, IsDraggable, Justify, ListboxFormControl, NumberFormControl, OptionControl, Placement, PopoverPlacementOptions, ProgressVariant, RadioGroupFormControl, Shape, SharedResizeObserver, Size, Variant, clickedOutside, computePopoverPlacement, customElement, main as default, findClosestDocument, forwardEvent, getAssignedElement, getAssignedElements, getElementFromEvent, getIdFromHref, getKeyInfo, getUniqueId, optionalAttr, optionalSlot, parseDate, supportsHover, toAriaBooleanAttribute, toPx, waitForAnimations };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@odx/foundation",
3
3
  "displayName": "ODX Design System Foundation",
4
4
  "description": "A library of Web Component building blocks for ODX",
5
- "version": "1.0.0-beta.135",
5
+ "version": "1.0.0-beta.136",
6
6
  "author": "Drägerwerk AG & Co.KGaA",
7
7
  "license": "SEE LICENSE IN LICENSE",
8
8
  "homepage": "https://odx.draeger.com",
@@ -30,7 +30,7 @@
30
30
  "@lit-labs/preact-signals": "1.0.3",
31
31
  "@lit/context": "1.1.5",
32
32
  "@odx/icons": "4.0.0-rc.37",
33
- "@spectrum-web-components/reactive-controllers": "1.6.0",
33
+ "@spectrum-web-components/reactive-controllers": "1.7.0",
34
34
  "@wc-toolkit/cem-inheritance": "1.1.0",
35
35
  "@wc-toolkit/cem-validator": "1.0.3",
36
36
  "@wc-toolkit/module-path-resolver": "1.0.0",