@sbb-esta/lyne-elements-dev 5.13.1-dev.1794294068 → 5.13.1-dev.1794308738

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.
@@ -1,9 +1,9 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { ResizeController } from "@lit-labs/observers/resize-controller.js";
3
- import { html, isServer, nothing, unsafeCSS } from "lit";
3
+ import { html, isServer, unsafeCSS } from "lit";
4
4
  import { property } from "lit/decorators.js";
5
5
  import { ref } from "lit/directives/ref.js";
6
- import { SbbActionBaseElement, SbbDisabledMixin, SbbElement, SbbEscapableOverlayController, SbbNegativeMixin, SbbOpenCloseBaseElement, SbbPropertyWatcherController, forceType, getNextElementIndex, idReference, isAndroid, isEventOnElement, isSafari, isZeroAnimationDuration, popoverResetStyles, removeAriaComboBoxAttributes, scrollbarStyles, setAriaComboBoxAttributes, setOverlayPosition } from "./core.js";
6
+ import { SbbActionBaseElement, SbbDisabledMixin, SbbElement, SbbEscapableOverlayController, SbbLanguageController, SbbNegativeMixin, SbbOpenCloseBaseElement, SbbPropertyWatcherController, appendAriaElements, forceType, getNextElementIndex, i18nAutocompleteActionsHint, i18nButton, idReference, isAndroid, isEventOnElement, isIOS, isMacOS, isSafari, isZeroAnimationDuration, popoverResetStyles, removeAriaComboBoxAttributes, sbbLiveAnnouncer, scrollbarStyles, setOverlayPosition } from "./core.js";
7
7
  import { optionPanelStyles } from "./option.pure.js";
8
8
  import { miniButtonStyle } from "./button.pure.js";
9
9
  import { SbbIconNameMixin } from "./icon.pure.js";
@@ -12,11 +12,6 @@ import { SbbIconNameMixin } from "./icon.pure.js";
12
12
  var autocomplete_base_element_default = ":host {\n display: none;\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) {\n display: block;\n}\n";
13
13
 
14
14
  // src/elements/autocomplete/autocomplete/autocomplete-base-element.ts
15
- /**
16
- * On Safari, the aria role 'listbox' must be on the host element, or else VoiceOver won't work at all.
17
- * On the other hand, JAWS and NVDA need the role to be "closer" to the options, or else optgroups won't work.
18
- */
19
- const ariaRoleOnHost$1 = isSafari;
20
15
  var SbbInputAutocompleteEvent = class extends Event {
21
16
  get option() {
22
17
  return this._option;
@@ -34,6 +29,7 @@ var SbbInputAutocompleteEvent = class extends Event {
34
29
  *
35
30
  * @event {Event} change - The change event is fired on the autocomplete's trigger when the user modifies the element's value. Unlike the input event, the change event is not necessarily fired for each alteration to an element's value.
36
31
  * @event {InputEvent} input - The input event fires on the autocomplete's trigger when the value has been changed as a direct result of a user action.
32
+ * @deprecated Will be inlined into autocompelte with next major release.
37
33
  */
38
34
  let SbbAutocompleteBaseElement = (() => {
39
35
  let _classSuper = SbbNegativeMixin(SbbOpenCloseBaseElement);
@@ -366,8 +362,9 @@ let SbbAutocompleteBaseElement = (() => {
366
362
  get triggerElement() {
367
363
  return this._triggerElement ?? null;
368
364
  }
365
+ /** @deprecated **/
369
366
  get overlayId() {
370
- return `${this.id}-overlay`;
367
+ return this.id;
371
368
  }
372
369
  constructor() {
373
370
  super();
@@ -382,6 +379,8 @@ let SbbAutocompleteBaseElement = (() => {
382
379
  this.#requireSelection_accessor_storage = (__runInitializers(this, _autoSelectActiveOptionOnBlur_extraInitializers), __runInitializers(this, _requireSelection_initializers, false));
383
380
  this.#position_accessor_storage = (__runInitializers(this, _requireSelection_extraInitializers), __runInitializers(this, _position_initializers, "auto"));
384
381
  this._triggerElement = __runInitializers(this, _position_extraInitializers);
382
+ /** @deprecated **/
383
+ this.generatedId = "";
385
384
  this.activeOption = null;
386
385
  this.pendingAutoSelectedOption = null;
387
386
  this._resizeObserver = new ResizeController(this, {
@@ -458,7 +457,7 @@ let SbbAutocompleteBaseElement = (() => {
458
457
  connectedCallback() {
459
458
  this.popover = "manual";
460
459
  super.connectedCallback();
461
- this.id ||= this.generatedId;
460
+ this.tabIndex = -1;
462
461
  if (this.hasUpdated) this._componentSetup();
463
462
  this.syncNegative();
464
463
  }
@@ -536,7 +535,9 @@ let SbbAutocompleteBaseElement = (() => {
536
535
  if (this._optionsCount > 0 && this.options.length === 0) this.close();
537
536
  } else if (document?.activeElement === this.triggerElement && this._optionsCount === 0 && this.options.length > 0) this.open();
538
537
  this._optionsCount = this.options.length;
538
+ this.handleOptionChange();
539
539
  }
540
+ handleOptionChange() {}
540
541
  _setNextActiveOptionIfAutoActiveFirstOption() {
541
542
  if (this.autoActiveFirstOption) {
542
543
  this.resetActiveElement();
@@ -680,9 +681,6 @@ let SbbAutocompleteBaseElement = (() => {
680
681
  <div class="sbb-option-panel__overlay-container">
681
682
  <div
682
683
  class="sbb-option-panel__overlay ${this.negative ? "sbb-scrollbar-negative" : "sbb-scrollbar"}"
683
- role=${!ariaRoleOnHost$1 ? this.panelRole : nothing}
684
- id=${!ariaRoleOnHost$1 ? this.overlayId : nothing}
685
- tabindex="-1"
686
684
  @animationend=${this._onAnimationEnd}
687
685
  ${ref((overlayRef) => this._overlay = overlayRef)}
688
686
  >
@@ -705,7 +703,7 @@ var SbbAutocompleteButtonElement = class extends SbbDisabledMixin(SbbNegativeMix
705
703
  this.elementName = "sbb-autocomplete-button";
706
704
  }
707
705
  static {
708
- this.role = "button";
706
+ this.role = isSafari ? "button" : "option";
709
707
  }
710
708
  static {
711
709
  this.styles = [miniButtonStyle];
@@ -720,7 +718,14 @@ var SbbAutocompleteButtonElement = class extends SbbDisabledMixin(SbbNegativeMix
720
718
  }
721
719
  constructor() {
722
720
  super();
721
+ this._languageController = new SbbLanguageController(this);
723
722
  this.internals.states.add("button");
723
+ if (!isSafari) {
724
+ this.internals.ariaRoleDescription = "";
725
+ const updateDescription = () => this.internals.ariaDescription = i18nButton[this._languageController.current];
726
+ updateDescription();
727
+ this._languageController.withHandler(updateDescription);
728
+ }
724
729
  if (!isServer) {
725
730
  this.setupBaseEventHandlers();
726
731
  this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-optgroup"), { disabled: () => this._updateInternals() }));
@@ -733,6 +738,18 @@ var SbbAutocompleteButtonElement = class extends SbbDisabledMixin(SbbNegativeMix
733
738
  */
734
739
  setActive(value) {
735
740
  this.toggleState("focus-visible", value);
741
+ if (value && isSafari && isMacOS) {
742
+ const output = [];
743
+ if (this.ariaLabel) output.push(this.ariaLabel);
744
+ else if (this.ariaLabelledByElements?.length) output.push(this._textContent(this.ariaLabelledByElements));
745
+ if (this.ariaDescription) output.push(this.ariaDescription);
746
+ else if (this.ariaDescribedByElements?.length) output.push(this._textContent(this.ariaDescribedByElements));
747
+ output.push(i18nButton[this._languageController.current]);
748
+ sbbLiveAnnouncer.announce(output.join(", "), "assertive");
749
+ }
750
+ }
751
+ _textContent(elements) {
752
+ return elements?.map((el) => el.textContent.trim().replace(/\.$/, "")).join(". ") ?? "";
736
753
  }
737
754
  willUpdate(changedProperties) {
738
755
  super.willUpdate(changedProperties);
@@ -772,26 +789,42 @@ var SbbAutocompleteRowElement = class extends SbbElement {
772
789
  static {
773
790
  this.elementName = "sbb-autocomplete-row";
774
791
  }
792
+ static {
793
+ this.role = "group";
794
+ }
775
795
  static {
776
796
  this.styles = [unsafeCSS(autocomplete_row_default)];
777
797
  }
778
798
  constructor() {
779
799
  super();
800
+ this._languageController = new SbbLanguageController(this).withHandler(() => this._updateAriaDescription());
780
801
  this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-autocomplete"), { negative: (e) => this.toggleState("negative", e.negative) }));
781
802
  this.addController(new SbbPropertyWatcherController(this, () => this.querySelector("sbb-option"), { disabled: (e) => this.toggleState("disabled", e.disabled) }));
782
803
  }
804
+ _updateAriaDescription() {
805
+ if (isIOS || isAndroid) return;
806
+ const hasButton = !!this.querySelector("sbb-autocomplete-button");
807
+ const option = this.querySelector("sbb-option");
808
+ if (!option) return;
809
+ if (!option["internals"]) customElements.upgrade(option);
810
+ if (hasButton) option["internals"].ariaDescription = i18nAutocompleteActionsHint[this._languageController.current];
811
+ else if (!hasButton && option["internals"].ariaDescription) option["internals"].ariaDescription = null;
812
+ if (isSafari) {
813
+ if (hasButton && (!option.ariaDescription || this._assignedDescription && option.ariaDescription === this._assignedDescription && option.ariaDescription !== i18nAutocompleteActionsHint[this._languageController.current])) {
814
+ option.ariaDescription = i18nAutocompleteActionsHint[this._languageController.current];
815
+ this._assignedDescription = option.ariaDescription;
816
+ } else if (!hasButton && this._assignedDescription && option.ariaDescription === this._assignedDescription) {
817
+ option.ariaDescription = null;
818
+ this._assignedDescription = void 0;
819
+ }
820
+ }
821
+ }
783
822
  render() {
784
- return html`<slot></slot>`;
823
+ return html`<slot @slotchange=${this._updateAriaDescription}></slot>`;
785
824
  }
786
825
  };
787
826
 
788
827
  // src/elements/autocomplete/autocomplete/autocomplete.component.ts
789
- let nextId = 0;
790
- /**
791
- * On Safari, the aria role 'listbox' must be on the host element, or else VoiceOver won't work at all.
792
- * On the other hand, JAWS and NVDA need the role to be "closer" to the options, or else optgroups won't work.
793
- */
794
- const ariaRoleOnHost = isSafari;
795
828
  /**
796
829
  * Combined with a native input, it displays a panel with a list of available options.
797
830
  *
@@ -806,8 +839,6 @@ const ariaRoleOnHost = isSafari;
806
839
  var SbbAutocompleteElement = class extends SbbAutocompleteBaseElement {
807
840
  constructor() {
808
841
  super(...arguments);
809
- this.generatedId = `sbb-autocomplete-${++nextId}`;
810
- this.panelRole = "listbox";
811
842
  /** Index of the active element within the active option's row (0 = option, >0 = a button). */
812
843
  this._activeColumnIndex = 0;
813
844
  }
@@ -815,7 +846,7 @@ var SbbAutocompleteElement = class extends SbbAutocompleteBaseElement {
815
846
  this.elementName = "sbb-autocomplete";
816
847
  }
817
848
  static {
818
- this.role = ariaRoleOnHost ? "listbox" : null;
849
+ this.role = "listbox";
819
850
  }
820
851
  get options() {
821
852
  return Array.from(this.querySelectorAll?.("sbb-option") ?? []);
@@ -866,6 +897,19 @@ var SbbAutocompleteElement = class extends SbbAutocompleteBaseElement {
866
897
  if (event) event.preventDefault();
867
898
  if (this.autoSelectActiveOption && event) this.setPendingSelection(this.activeOption);
868
899
  }
900
+ handleOptionChange() {
901
+ const options = this.options;
902
+ const optionsCount = `${options.length}`;
903
+ let position = 1;
904
+ for (const option of options) {
905
+ const buttons = Array.from(option.closest("sbb-autocomplete-row")?.querySelectorAll("sbb-autocomplete-button") ?? []);
906
+ for (const element of [option, ...buttons]) {
907
+ element["internals"].ariaSetSize = optionsCount;
908
+ element["internals"].ariaPosInSet = `${position}`;
909
+ }
910
+ position++;
911
+ }
912
+ }
869
913
  /**
870
914
  * Moves the active element horizontally within the active option's `sbb-autocomplete-row`,
871
915
  * between the option itself and its `sbb-autocomplete-button`s.
@@ -900,7 +944,13 @@ var SbbAutocompleteElement = class extends SbbAutocompleteBaseElement {
900
944
  if (this.triggerElement) this.triggerElement.ariaActiveDescendantElement = null;
901
945
  }
902
946
  setTriggerAttributes(element) {
903
- setAriaComboBoxAttributes(element, ariaRoleOnHost ? this.id : this.overlayId, false);
947
+ if (!element) return;
948
+ element.autocomplete = "off";
949
+ element.role = "combobox";
950
+ element.ariaAutoComplete = "list";
951
+ element.ariaHasPopup = "listbox";
952
+ element.ariaControlsElements = appendAriaElements(element.ariaControlsElements, this);
953
+ element.ariaExpanded = "false";
904
954
  }
905
955
  };
906
956
 
@@ -9,7 +9,7 @@ import { SbbIconNameMixin } from "./icon.pure.js";
9
9
  var accent_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-background-color-1-inverted);\n --sbb-button-color-active-border: var(--sbb-border-color-1);\n --sbb-button-color-active-text: var(--sbb-color-cloud);\n --sbb-button-color-active-text: light-dark(var(--sbb-color-cloud), var(--sbb-color-anthracite));\n --sbb-button-color-default-background: var(--sbb-background-color-3-inverted);\n --sbb-button-color-default-border: var(--sbb-border-color-3);\n --sbb-button-color-default-text: var(--sbb-color-1-inverted);\n --sbb-button-color-hover-background: var(--sbb-background-color-3-inverted);\n --sbb-button-color-hover-border: var(--sbb-border-color-3);\n --sbb-button-color-hover-text: var(--sbb-color-3-inverted);\n --sbb-button-color-loading-border: var(--sbb-color-iron);\n --sbb-button-color-loading-border: light-dark(var(--sbb-color-iron), var(--sbb-color-silver));\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-cement) 20%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-cement) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-background-color-1-negative-inverted);\n --sbb-button-color-active-border: var(--sbb-border-color-1-negative);\n --sbb-button-color-active-text: var(--sbb-color-anthracite);\n --sbb-button-color-default-background: var(--sbb-background-color-3-negative-inverted);\n --sbb-button-color-default-border: var(--sbb-border-color-3-negative);\n --sbb-button-color-default-text: var(--sbb-color-1-negative-inverted);\n --sbb-button-color-hover-background: var(--sbb-background-color-3-negative-inverted);\n --sbb-button-color-hover-border: var(--sbb-border-color-3-negative);\n --sbb-button-color-hover-text: var(--sbb-color-4-negative-inverted);\n --sbb-button-color-loading-border: var(--sbb-color-silver);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading])) {\n --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);\n}\n";
10
10
 
11
11
  // src/elements/button/common/button-common.scss?inline
12
- var button_common_default = ":host {\n display: inline-block;\n outline: none !important;\n --sbb-button-transition-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-2x)\n );\n --sbb-button-box-shadow-definition:\n var(--sbb-shadow-elevation-level-3-shadow-2-offset-x) var(--sbb-button-shadow-2-offset-y)\n var(--sbb-button-shadow-2-blur) var(--sbb-shadow-elevation-level-3-shadow-2-spread)\n var(--sbb-button-shadow-2-color),\n var(--sbb-shadow-elevation-level-3-shadow-1-offset-x) var(--sbb-button-shadow-1-offset-y)\n var(--sbb-button-shadow-1-blur) var(--sbb-shadow-elevation-level-3-shadow-1-spread)\n var(--sbb-button-shadow-1-color);\n --_width: unset;\n --_border-color: var(--sbb-button-color-default-border);\n --_background-color: var(--sbb-button-color-default-background);\n --_background: var(--_background-color);\n --_color: var(--sbb-button-color-default-text);\n --_button-inset: 0;\n --_hover-offset: 0.0625rem;\n --_padding-block: var(--sbb-button-padding-block-min);\n --_padding-inline: var(--sbb-button-padding-inline);\n --_border: calc(var(--sbb-button-border-width) + var(--sbb-button-border-overlap-fix, 1px)) solid\n var(--_border-color);\n --_animation-loading-delay: var(\n --sbb-disable-animation-duration,\n var(--sbb-button-loading-delay)\n );\n --_animation-loading-duration: var(--sbb-disable-animation-duration, 3s);\n --_animation-loading-rotate-function: linear(0, 0.25 12.5% 37.5%, 0.75 62.5% 87.5%, 1);\n --_animation-loading-rotate: sbb-button-rotate var(--_animation-loading-duration)\n var(--_animation-loading-delay) infinite var(--_animation-loading-rotate-function);\n --_animation-loading-move: sbb-button-move calc(var(--_animation-loading-duration) / 2)\n var(--_animation-loading-delay) alternate infinite linear;\n}\n@media (forced-colors: active) {\n :host {\n --sbb-button-color-default-border: CanvasText !important;\n --sbb-button-color-active-border: Highlight !important;\n --sbb-button-color-default-background: Canvas !important;\n --sbb-button-color-hover-background: Canvas !important;\n --sbb-button-color-active-background: Canvas !important;\n --sbb-button-color-disabled-background: Canvas !important;\n --sbb-button-color-disabled-text: GrayText !important;\n --sbb-button-color-loading-border: CanvasText !important;\n --sbb-button-color-loading-snake-color: Canvas;\n --sbb-button-color-default-text: CanvasText !important;\n --sbb-button-color-hover-text: CanvasText !important;\n --sbb-button-color-active-text: CanvasText !important;\n --sbb-button-border-overlap-fix: 0rem;\n }\n}\n\n@media (forced-colors: active) {\n :host(:is(:state(button),[state--button])) {\n --sbb-button-color-default-text: ButtonText !important;\n --sbb-button-color-hover-text: ButtonText !important;\n --sbb-button-color-active-text: ButtonText !important;\n }\n}\n\n@media (forced-colors: active) {\n :host(:is(:state(link),[state--link])) {\n --sbb-button-color-default-text: LinkText !important;\n --sbb-button-color-hover-text: LinkText !important;\n --sbb-button-color-active-text: LinkText !important;\n }\n}\n\n:host([negative]) {\n --sbb-button-color-disabled-background: var(--sbb-background-color-3-negative);\n --sbb-button-color-disabled-text: var(--sbb-color-aluminium);\n}\n\n:host([size=l]) {\n --sbb-button-min-height: var(--sbb-button-min-height-size-l);\n --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-l);\n}\n\n:host([size=m]) {\n --sbb-button-min-height: var(--sbb-button-min-height-size-m);\n --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-m);\n}\n\n:host([size=s]) {\n --sbb-button-min-height: var(--sbb-button-min-height-size-s);\n --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-s);\n --sbb-button-gap: var(--sbb-spacing-fixed-1x);\n}\n\n:host(:where(:is(:state(slotted-icon),[state--slotted-icon]), :is(:state(has-icon-name),[state--has-icon-name])):not(:is(:state(slotted),[state--slotted]))) {\n --sbb-button-padding-inline: 0;\n --_width: var(--sbb-button-min-height);\n --_animation-loading-rotate-function: linear;\n}\n\n@media (any-hover: hover) {\n :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {\n --sbb-button-translate-y-content-hover: -0.0625rem;\n --sbb-button-shadow-1-offset-y: calc(\n 0.5 * var(--sbb-shadow-elevation-level-3-shadow-1-offset-y)\n );\n --sbb-button-shadow-1-blur: calc(0.5 * var(--sbb-shadow-elevation-level-3-shadow-1-blur));\n --sbb-button-shadow-2-blur: calc(0.5 * var(--sbb-shadow-elevation-level-3-shadow-2-blur));\n --sbb-button-cursor: var(--sbb-cursor-pointer);\n --_border-color: var(--sbb-button-color-hover-border);\n --_color: var(--sbb-button-color-hover-text);\n --_background-color: var(--sbb-button-color-hover-background);\n --_button-inset: calc(var(--sbb-button-border-width) * -1);\n }\n}\n@media (forced-colors: active) {\n :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {\n --sbb-button-color-hover-border: Highlight !important;\n }\n}\n\n:host(:is([disabled], :disabled, [disabled-interactive])) {\n --sbb-button-cursor: var(--sbb-cursor-default);\n --_color: var(--sbb-button-color-disabled-text);\n --_background-color: var(--sbb-button-color-disabled-background);\n --_border-color: var(--sbb-button-color-disabled-border);\n --_border: var(--sbb-button-border-disabled-width) var(--sbb-button-border-disabled-style)\n var(--_border-color);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive]):is(:active, :is(:state(active),[state--active]), [loading])) {\n --_color: var(--sbb-button-color-active-text);\n --_background-color: var(--sbb-button-color-active-background);\n --_border-color: var(--sbb-button-color-active-border);\n}\n\n:host([loading]:not([disabled], :disabled, [disabled-interactive])) {\n --_loading-outline-offset: calc(\n var(--sbb-focus-outline-offset) + var(--sbb-button-loading-border-width)\n );\n --_border: none;\n --_border-action: var(--sbb-button-loading-border-width) dotted transparent;\n --_padding-block: calc(\n var(--sbb-button-padding-block-min) - var(--sbb-button-loading-border-width)\n );\n --_padding-inline: calc(\n var(--sbb-button-padding-inline) - var(--sbb-button-loading-border-width)\n );\n --_animation: var(--_animation-loading-rotate), var(--_animation-loading-move);\n --_forced-colors-adjust: none;\n}\n\n.sbb-action-base {\n display: flex;\n gap: var(--sbb-button-gap);\n align-items: center;\n justify-content: center;\n font-size: var(--sbb-text-font-size-xs);\n font-weight: bold;\n letter-spacing: var(--sbb-letter-spacing-text);\n line-height: var(--sbb-typo-line-height-text);\n text-align: left;\n white-space: nowrap;\n text-decoration: none;\n min-height: var(--sbb-button-min-height);\n outline: none;\n width: var(--_width);\n border-radius: var(--sbb-button-border-radius);\n color: var(--_color);\n cursor: var(--sbb-button-cursor);\n user-select: none;\n background: var(--_background);\n border: var(--_border-action);\n transition-duration: var(--sbb-button-transition-duration);\n transition-timing-function: var(--sbb-button-transition-easing-function);\n forced-color-adjust: var(--_forced-colors-adjust, auto);\n transition-property: color, background-color, padding-top, padding-bottom;\n animation: var(--_animation);\n padding-block: var(--_padding-block);\n padding-inline: var(--_padding-inline);\n position: relative;\n}\n.sbb-action-base::before {\n content: \"\";\n position: absolute;\n inset: var(--_button-inset);\n border: var(--_border);\n border-radius: var(--sbb-button-border-radius);\n pointer-events: none;\n box-shadow: var(--sbb-button-box-shadow);\n transition-duration: var(--sbb-button-transition-duration);\n transition-timing-function: var(--sbb-button-transition-easing-function);\n transition-property: inset, border, box-shadow;\n}\n:host(:is(:state(focus-visible),[state--focus-visible])) .sbb-action-base::before, :host(:focus-visible) .sbb-action-base::before, .sbb-action-base:focus-visible::before {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n outline-offset: var(--_loading-outline-offset, var(--sbb-focus-outline-offset));\n}\n:host([loading]:not([disabled], :disabled, [disabled-interactive])) .sbb-action-base {\n --_background:\n border-box padding-box linear-gradient(var(--_background-color)),\n border-box\n conic-gradient(\n from var(--sbb-button-loading-angle) at\n clamp(\n calc(var(--sbb-button-min-height) / 2),\n var(--sbb-button-loading-offset),\n calc(100% - var(--sbb-button-min-height) / 2)\n )\n 50%,\n var(--sbb-button-color-loading-border) 0deg,\n var(--sbb-button-color-loading-border) 300deg,\n var(--sbb-button-color-loading-snake-color, var(--sbb-button-color-active-text)) 360deg\n ),\n var(--_background-color);\n}\n\n.sbb-button__label {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n:host(:where(:is(:state(slotted-icon),[state--slotted-icon]), :is(:state(has-icon-name),[state--has-icon-name])):not(:is(:state(slotted),[state--slotted]))) .sbb-button__label {\n display: none;\n}\n\n.sbb-button__label,\n::slotted([slot=icon]),\nsbb-icon {\n transition: translate var(--sbb-button-transition-duration) var(--sbb-button-transition-easing-function);\n translate: 0 var(--sbb-button-translate-y-content-hover, 0);\n}\n\n@keyframes sbb-button-rotate {\n from {\n --sbb-button-loading-angle: -90deg;\n }\n to {\n --sbb-button-loading-angle: 270deg;\n }\n}\n@keyframes sbb-button-move {\n from {\n --sbb-button-loading-offset: 0%;\n }\n to {\n --sbb-button-loading-offset: 100%;\n }\n}\n";
12
+ var button_common_default = ":host {\n display: inline-block;\n outline: none !important;\n --sbb-button-transition-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-2x)\n );\n --sbb-button-box-shadow-definition:\n var(--sbb-shadow-elevation-level-3-shadow-2-offset-x) var(--sbb-button-shadow-2-offset-y)\n var(--sbb-button-shadow-2-blur) var(--sbb-shadow-elevation-level-3-shadow-2-spread)\n var(--sbb-button-shadow-2-color),\n var(--sbb-shadow-elevation-level-3-shadow-1-offset-x) var(--sbb-button-shadow-1-offset-y)\n var(--sbb-button-shadow-1-blur) var(--sbb-shadow-elevation-level-3-shadow-1-spread)\n var(--sbb-button-shadow-1-color);\n --_width: unset;\n --_border-color: var(--sbb-button-color-default-border);\n --_background-color: var(--sbb-button-color-default-background);\n --_background: var(--_background-color);\n --_color: var(--sbb-button-color-default-text);\n --_button-inset: 0;\n --_hover-offset: 0.0625rem;\n --_padding-block: var(--sbb-button-padding-block-min);\n --_padding-inline: var(--sbb-button-padding-inline);\n --_border: var(\n --sbb-button-border-override,\n calc(var(--sbb-button-border-width) + var(--sbb-button-border-overlap-fix, 1px)) solid\n var(--_border-color)\n );\n --_animation-loading-delay: var(\n --sbb-disable-animation-duration,\n var(--sbb-button-loading-delay)\n );\n --_animation-loading-duration: var(--sbb-disable-animation-duration, 3s);\n --_animation-loading-rotate-function: linear(0, 0.25 12.5% 37.5%, 0.75 62.5% 87.5%, 1);\n --_animation-loading-rotate: sbb-button-rotate var(--_animation-loading-duration)\n var(--_animation-loading-delay) infinite var(--_animation-loading-rotate-function);\n --_animation-loading-move: sbb-button-move calc(var(--_animation-loading-duration) / 2)\n var(--_animation-loading-delay) alternate infinite linear;\n --_animation-loading-fade: sbb-button-loading-fade\n var(--sbb-disable-animation-duration, var(--sbb-button-loading-delay)) ease-in forwards;\n}\n@media (forced-colors: active) {\n :host {\n --sbb-button-color-default-border: CanvasText !important;\n --sbb-button-color-active-border: Highlight !important;\n --sbb-button-color-default-background: Canvas !important;\n --sbb-button-color-hover-background: Canvas !important;\n --sbb-button-color-active-background: Canvas !important;\n --sbb-button-color-disabled-background: Canvas !important;\n --sbb-button-color-disabled-text: GrayText !important;\n --sbb-button-color-loading-border: CanvasText !important;\n --sbb-button-color-loading-snake-color: Canvas;\n --sbb-button-color-default-text: CanvasText !important;\n --sbb-button-color-hover-text: CanvasText !important;\n --sbb-button-color-active-text: CanvasText !important;\n --sbb-button-border-overlap-fix: 0rem;\n }\n}\n\n@media (forced-colors: active) {\n :host(:is(:state(button),[state--button])) {\n --sbb-button-color-default-text: ButtonText !important;\n --sbb-button-color-hover-text: ButtonText !important;\n --sbb-button-color-active-text: ButtonText !important;\n }\n}\n\n@media (forced-colors: active) {\n :host(:is(:state(link),[state--link])) {\n --sbb-button-color-default-text: LinkText !important;\n --sbb-button-color-hover-text: LinkText !important;\n --sbb-button-color-active-text: LinkText !important;\n }\n}\n\n:host([negative]) {\n --sbb-button-color-disabled-background: var(--sbb-background-color-3-negative);\n --sbb-button-color-disabled-text: var(--sbb-color-aluminium);\n}\n\n:host([size=l]) {\n --sbb-button-min-height: var(--sbb-button-min-height-size-l);\n --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-l);\n}\n\n:host([size=m]) {\n --sbb-button-min-height: var(--sbb-button-min-height-size-m);\n --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-m);\n}\n\n:host([size=s]) {\n --sbb-button-min-height: var(--sbb-button-min-height-size-s);\n --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-s);\n --sbb-button-gap: var(--sbb-spacing-fixed-1x);\n}\n\n:host(:where(:is(:state(slotted-icon),[state--slotted-icon]), :is(:state(has-icon-name),[state--has-icon-name])):not(:is(:state(slotted),[state--slotted]))) {\n --sbb-button-padding-inline: 0;\n --_width: var(--sbb-button-min-height);\n --_animation-loading-rotate-function: linear;\n}\n\n@media (any-hover: hover) {\n :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {\n --sbb-button-translate-y-content-hover: -0.0625rem;\n --sbb-button-shadow-1-offset-y: calc(\n 0.5 * var(--sbb-shadow-elevation-level-3-shadow-1-offset-y)\n );\n --sbb-button-shadow-1-blur: calc(0.5 * var(--sbb-shadow-elevation-level-3-shadow-1-blur));\n --sbb-button-shadow-2-blur: calc(0.5 * var(--sbb-shadow-elevation-level-3-shadow-2-blur));\n --sbb-button-cursor: var(--sbb-cursor-pointer);\n --_border-color: var(--sbb-button-color-hover-border);\n --_color: var(--sbb-button-color-hover-text);\n --_background-color: var(--sbb-button-color-hover-background);\n --_button-inset: calc(var(--sbb-button-border-width) * -1);\n }\n}\n@media (forced-colors: active) {\n :host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading]):is(:hover, :is(:state(force-hover),[state--force-hover]))) {\n --sbb-button-color-hover-border: Highlight !important;\n }\n}\n\n:host(:is([disabled], :disabled, [disabled-interactive])) {\n --sbb-button-cursor: var(--sbb-cursor-default);\n --_color: var(--sbb-button-color-disabled-text);\n --_background-color: var(--sbb-button-color-disabled-background);\n --_border-color: var(--sbb-button-color-disabled-border);\n --_border: var(--sbb-button-border-disabled-width) var(--sbb-button-border-disabled-style)\n var(--_border-color);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive]):is(:active, :is(:state(active),[state--active]), [loading])) {\n --_color: var(--sbb-button-color-active-text);\n --_background-color: var(--sbb-button-color-active-background);\n --_border-color: var(--sbb-button-color-active-border);\n}\n\n:host([loading]:not([disabled], :disabled, [disabled-interactive])) {\n --_loading-outline-offset: calc(\n var(--sbb-focus-outline-offset) + var(--sbb-button-loading-border-width)\n );\n --_border-action: var(--sbb-button-loading-border-width) dotted transparent;\n --_padding-block: calc(\n var(--sbb-button-padding-block-min) - var(--sbb-button-loading-border-width)\n );\n --_padding-inline: calc(\n var(--sbb-button-padding-inline) - var(--sbb-button-loading-border-width)\n );\n --_animation:\n var(--_animation-loading-fade), var(--_animation-loading-rotate), var(--_animation-loading-move);\n --_forced-colors-adjust: none;\n}\n@media (forced-colors: active) {\n :host([loading]:not([disabled], :disabled, [disabled-interactive])) {\n --sbb-button-border-override: none;\n }\n}\n\n.sbb-action-base {\n display: flex;\n gap: var(--sbb-button-gap);\n align-items: center;\n justify-content: center;\n font-size: var(--sbb-text-font-size-xs);\n font-weight: bold;\n letter-spacing: var(--sbb-letter-spacing-text);\n line-height: var(--sbb-typo-line-height-text);\n text-align: left;\n white-space: nowrap;\n text-decoration: none;\n min-height: var(--sbb-button-min-height);\n outline: none;\n width: var(--_width);\n border-radius: var(--sbb-button-border-radius);\n color: var(--_color);\n cursor: var(--sbb-button-cursor);\n user-select: none;\n background: var(--_background);\n border: var(--_border-action);\n transition-duration: var(--sbb-button-transition-duration);\n transition-timing-function: var(--sbb-button-transition-easing-function);\n forced-color-adjust: var(--_forced-colors-adjust, auto);\n transition-property: color, background-color, padding-top, padding-bottom;\n animation: var(--_animation);\n padding-block: var(--_padding-block);\n padding-inline: var(--_padding-inline);\n position: relative;\n}\n.sbb-action-base::before {\n content: \"\";\n position: absolute;\n inset: var(--_button-inset);\n border: var(--_border);\n border-radius: var(--sbb-button-border-radius);\n pointer-events: none;\n box-shadow: var(--sbb-button-box-shadow);\n transition-duration: var(--sbb-button-transition-duration);\n transition-timing-function: var(--sbb-button-transition-easing-function);\n transition-property: inset, border, box-shadow;\n}\n:host(:is(:state(focus-visible),[state--focus-visible])) .sbb-action-base::before, :host(:focus-visible) .sbb-action-base::before, .sbb-action-base:focus-visible::before {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n outline-offset: var(--_loading-outline-offset, var(--sbb-focus-outline-offset));\n}\n:host([loading]:not([disabled], :disabled, [disabled-interactive])) .sbb-action-base {\n --_background:\n border-box padding-box linear-gradient(var(--_background-color)),\n border-box\n conic-gradient(\n from var(--sbb-button-loading-angle) at\n clamp(\n calc(var(--sbb-button-min-height) / 2),\n var(--sbb-button-loading-offset),\n calc(100% - var(--sbb-button-min-height) / 2)\n )\n 50%,\n color-mix(\n in srgb,\n var(--sbb-button-color-loading-border) calc(var(--sbb-button-loading-opacity) * 100%),\n transparent\n )\n 0deg,\n color-mix(\n in srgb,\n var(--sbb-button-color-loading-border) calc(var(--sbb-button-loading-opacity) * 100%),\n transparent\n )\n 300deg,\n color-mix(\n in srgb,\n var(--sbb-button-color-loading-snake-color, var(--sbb-button-color-active-text))\n calc(var(--sbb-button-loading-opacity) * 100%),\n transparent\n )\n 360deg\n ),\n var(--_background-color);\n}\n\n.sbb-button__label {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n:host(:where(:is(:state(slotted-icon),[state--slotted-icon]), :is(:state(has-icon-name),[state--has-icon-name])):not(:is(:state(slotted),[state--slotted]))) .sbb-button__label {\n display: none;\n}\n\n.sbb-button__label,\n::slotted([slot=icon]),\nsbb-icon {\n transition: translate var(--sbb-button-transition-duration) var(--sbb-button-transition-easing-function);\n translate: 0 var(--sbb-button-translate-y-content-hover, 0);\n}\n\n@keyframes sbb-button-loading-fade {\n from {\n --sbb-button-loading-opacity: 0;\n }\n to {\n --sbb-button-loading-opacity: 1;\n }\n}\n@keyframes sbb-button-rotate {\n from {\n --sbb-button-loading-angle: -90deg;\n }\n to {\n --sbb-button-loading-angle: 270deg;\n }\n}\n@keyframes sbb-button-move {\n from {\n --sbb-button-loading-offset: 0%;\n }\n to {\n --sbb-button-loading-offset: 100%;\n }\n}\n";
13
13
 
14
14
  // src/elements/button/common/mini-button-common.scss?inline
15
15
  var mini_button_common_default = ":host {\n display: inline-block;\n -webkit-tap-highlight-color: transparent;\n height: fit-content;\n outline: none !important;\n --sbb-mini-button-transition-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-2x)\n );\n --sbb-mini-button-color-background: var(--sbb-mini-button-color-default-background);\n --sbb-mini-button-color: var(--sbb-mini-button-color-text);\n}\n@media (forced-colors: active) {\n :host {\n --sbb-mini-button-color-text: ButtonText !important;\n --sbb-mini-button-color-hover-background: Highlight !important;\n --sbb-mini-button-color-active-background: Highlight !important;\n --sbb-mini-button-color-disabled-background: Canvas !important;\n --sbb-mini-button-color-disabled-border: GrayText !important;\n --sbb-mini-button-color-disabled-text: GrayText !important;\n }\n}\n\n:host([negative]) {\n --sbb-mini-button-color-text: var(--sbb-color-3-negative);\n --sbb-mini-button-color-default-background: transparent;\n --sbb-mini-button-color-hover-background: var(--sbb-background-color-3-negative);\n --sbb-mini-button-color-active-background: var(--sbb-background-color-4-negative);\n --sbb-mini-button-color-disabled-background: var(--sbb-background-color-3-negative);\n --sbb-mini-button-color-disabled-border: var(--sbb-border-color-5);\n --sbb-mini-button-color-disabled-text: var(--sbb-color-5);\n}\n\n@media (any-hover: hover) {\n :host(:is(:hover, :is(:state(force-hover),[state--force-hover])):not([disabled], :disabled, [disabled-interactive], :is(:state(disabled),[state--disabled]), :active, :is(:state(active),[state--active]))) {\n --sbb-mini-button-translate-y-content-hover: -0.0625rem;\n --sbb-mini-button-color-background: var(--sbb-mini-button-color-hover-background);\n }\n}\n\n:host(:is(:active, :is(:state(active),[state--active])):not([disabled], :disabled, [disabled-interactive], :is(:state(disabled),[state--disabled]))) {\n --sbb-mini-button-color-background: var(--sbb-mini-button-color-active-background);\n}\n\n:host(:is([disabled], :disabled, [disabled-interactive], :is(:state(disabled),[state--disabled]))) {\n --sbb-mini-button-color-background: var(--sbb-mini-button-color-disabled-background);\n --sbb-mini-button-border: var(--sbb-border-width-1x) dashed\n var(--sbb-mini-button-color-disabled-border);\n --sbb-mini-button-color: var(--sbb-mini-button-color-disabled-text);\n --sbb-mini-button-pointer-events: none;\n --sbb-mini-button-cursor: var(--sbb-cursor-default);\n}\n\n:host(:is(:state(focus-visible),[state--focus-visible])) {\n --sbb-focus-outline-style: initial;\n}\n\n.sbb-action-base {\n display: flex;\n position: relative;\n color: var(--sbb-mini-button-color);\n border-radius: var(--sbb-mini-button-border-radius);\n user-select: none;\n pointer-events: var(--sbb-mini-button-pointer-events, auto);\n cursor: var(--sbb-mini-button-cursor, var(--sbb-cursor-pointer));\n transition: color var(--sbb-mini-button-transition-duration) var(--sbb-mini-button-transition-easing-function);\n text-decoration: none;\n outline: none;\n}\n.sbb-action-base::before {\n position: absolute;\n content: \"\";\n inset: 0;\n border-radius: var(--sbb-mini-button-border-radius);\n background-color: var(--sbb-mini-button-color-background);\n transition-duration: var(--sbb-mini-button-transition-duration);\n transition-timing-function: var(--sbb-mini-button-transition-easing-function);\n transition-property: inset, background-color;\n border: var(--sbb-mini-button-border);\n}\n.sbb-action-base:focus-visible::before, :host(:is(:is(:state(focus-visible),[state--focus-visible]), :focus-visible)) .sbb-action-base::before {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n}\n\n::slotted(sbb-icon),\nsbb-icon {\n display: flex;\n transition: translate var(--sbb-mini-button-transition-duration) var(--sbb-mini-button-transition-easing-function);\n translate: 0 var(--sbb-mini-button-translate-y-content-hover, 0);\n min-width: var(--_sbb-mini-button-image-size, var(--sbb-size-icon-ui-small));\n min-height: var(--_sbb-mini-button-image-size, var(--sbb-size-icon-ui-small));\n align-items: center;\n justify-content: center;\n}\n";
@@ -21,7 +21,7 @@ var mini_button_label_common_default = ":host {\n --sbb-mini-button-gap: 0.125r
21
21
  var primary_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-color-primary150);\n --sbb-button-color-active-border: var(--sbb-color-primary150);\n --sbb-button-color-active-text: var(--sbb-color-4-negative);\n --sbb-button-color-default-background: var(--sbb-color-primary);\n --sbb-button-color-default-border: var(--sbb-color-primary);\n --sbb-button-color-default-text: var(--sbb-color-1-negative);\n --sbb-button-color-hover-background: var(--sbb-color-primary125);\n --sbb-button-color-hover-border: var(--sbb-color-primary125);\n --sbb-button-color-hover-text: var(--sbb-color-3-negative);\n --sbb-button-color-loading-border: color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 50%,\n var(--sbb-button-color-default-text)\n );\n --sbb-button-color-loading-border: light-dark(\n color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 50%,\n var(--sbb-button-color-default-text)\n ),\n color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 70%,\n var(--sbb-button-color-default-text)\n )\n );\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-primary) 20%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-primary) 40%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-primary125) 20%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary125) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-primary125) 40%, transparent)\n );\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-color-primary150);\n --sbb-button-color-active-border: var(--sbb-color-primary150);\n --sbb-button-color-active-text: var(--sbb-color-4-negative);\n --sbb-button-color-default-background: var(--sbb-color-primary);\n --sbb-button-color-default-border: var(--sbb-color-primary);\n --sbb-button-color-default-text: var(--sbb-color-1-negative);\n --sbb-button-color-hover-background: var(--sbb-color-primary125);\n --sbb-button-color-hover-border: var(--sbb-color-primary125);\n --sbb-button-color-hover-text: var(--sbb-color-3-negative);\n --sbb-button-color-loading-border: color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 70%,\n var(--sbb-button-color-default-text)\n );\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-primary) 60%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-primary) 40%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-primary125) 60%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary125) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-primary125) 40%, transparent)\n );\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading])) {\n --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);\n}\n";
22
22
 
23
23
  // src/elements/button/common/secondary-button.scss?inline
24
- var secondary_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-background-color-3);\n --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-active-text: var(--sbb-color-anthracite);\n --sbb-button-color-active-text: light-dark(\n var(--sbb-color-anthracite),\n var(--sbb-color-graphite)\n );\n --sbb-button-color-default-background: var(--sbb-background-color-1);\n --sbb-button-color-default-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3);\n --sbb-button-color-hover-background: var(--sbb-background-color-1);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-cement) 20%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-cement) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-border-overlap-fix: 0rem;\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-background-color-2-negative);\n --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-active-text: var(--sbb-color-graphite);\n --sbb-button-color-default-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-default-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3-negative);\n --sbb-button-color-hover-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4-negative);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]))) {\n --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);\n}\n";
24
+ var secondary_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-background-color-3);\n --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-active-text: var(--sbb-color-anthracite);\n --sbb-button-color-active-text: light-dark(\n var(--sbb-color-anthracite),\n var(--sbb-color-graphite)\n );\n --sbb-button-color-default-background: var(--sbb-background-color-1);\n --sbb-button-color-default-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3);\n --sbb-button-color-hover-background: var(--sbb-background-color-1);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-cement) 20%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-cement) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-border-overlap-fix: 0rem;\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-background-color-2-negative);\n --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-active-text: var(--sbb-color-graphite);\n --sbb-button-color-default-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-default-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3-negative);\n --sbb-button-color-hover-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4-negative);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]))) {\n --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive])[loading]) {\n --sbb-button-border-override: none transparent;\n}\n";
25
25
 
26
26
  // src/elements/button/common/transparent-button.scss?inline
27
27
  var transparent_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-background-color-4);\n --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-active-text: var(--sbb-color-1);\n --sbb-button-color-default-background: transparent;\n --sbb-button-color-default-border: transparent;\n --sbb-button-color-default-text: var(--sbb-color-1);\n --sbb-button-color-hover-background: var(--sbb-background-color-3);\n --sbb-button-color-hover-border: var(--sbb-border-color-3-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-1);\n --sbb-button-color-loading-border: var(--sbb-color-silver);\n --sbb-button-color-loading-border: light-dark(var(--sbb-color-silver), var(--sbb-color-granite));\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-background-color-4-negative);\n --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-active-text: var(--sbb-color-1-negative);\n --sbb-button-color-default-background: transparent;\n --sbb-button-color-default-border: transparent;\n --sbb-button-color-default-text: var(--sbb-color-1-negative);\n --sbb-button-color-hover-background: var(--sbb-background-color-3-negative);\n --sbb-button-color-hover-border: var(--sbb-border-color-3-negative-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-1-negative);\n --sbb-button-color-loading-border: var(--sbb-color-granite);\n}\n";
@@ -23,7 +23,10 @@ export declare class SbbLanguageController implements ReactiveController {
23
23
  private _previousLanguage?;
24
24
  private _handlers;
25
25
  constructor(_host: ReactiveControllerHost);
26
- /** Add a language change handler. */
26
+ /**
27
+ * Add a language change handler.
28
+ * TODO: Refactor to EventTarget.
29
+ */
27
30
  withHandler(handler: () => void): this;
28
31
  hostConnected(): void;
29
32
  hostDisconnected(): void;
@@ -106,3 +106,5 @@ export declare const i18nSlide: Record<string, string>;
106
106
  export declare const i18nRemainingCharacters: Record<string, string>;
107
107
  export declare const i18nLogo125Anniversary: Record<string, string>;
108
108
  export declare const i18nLogo125AnniversaryYears: Record<string, string>;
109
+ export declare const i18nButton: Record<string, string>;
110
+ export declare const i18nAutocompleteActionsHint: Record<string, string>;
@@ -9,9 +9,11 @@ export declare function setAriaOverlayTriggerProperties(overlay: HTMLElement, tr
9
9
  export declare function removeAriaOverlayTriggerProperties(trigger: HTMLElement | null | undefined): void;
10
10
  /**
11
11
  * Add meaningful aria attributes to trigger element of role='combobox'
12
+ * @deprecated
12
13
  */
13
14
  export declare function setAriaComboBoxAttributes(trigger: HTMLElement, overlayId: string, expanded: boolean, hasPopup?: 'listbox' | 'grid'): void;
14
15
  /**
15
16
  * Remove aria attributes from trigger elements.
17
+ * @deprecated
16
18
  */
17
19
  export declare function removeAriaComboBoxAttributes(trigger?: HTMLElement | null): void;
@@ -1629,7 +1629,10 @@ var SbbLanguageController = class SbbLanguageController {
1629
1629
  this._handlers = [];
1630
1630
  this._host.addController(this);
1631
1631
  }
1632
- /** Add a language change handler. */
1632
+ /**
1633
+ * Add a language change handler.
1634
+ * TODO: Refactor to EventTarget.
1635
+ */
1633
1636
  withHandler(handler) {
1634
1637
  this._handlers.unshift(handler);
1635
1638
  return this;
@@ -2473,6 +2476,18 @@ const i18nLogo125AnniversaryYears = {
2473
2476
  fr: "ans",
2474
2477
  it: "anni"
2475
2478
  };
2479
+ const i18nButton = {
2480
+ de: "Schaltfläche",
2481
+ en: "Button",
2482
+ fr: "Bouton",
2483
+ it: "Pulsante"
2484
+ };
2485
+ const i18nAutocompleteActionsHint = {
2486
+ de: "Drücken Sie Pfeil links oder rechts für verfügbare Aktionen",
2487
+ en: "Press arrow left or right for available actions",
2488
+ fr: "Appuyez sur les flèches gauche ou droite pour les actions disponibles",
2489
+ it: "Usare i tasti freccia destra o sinistra per le azioni disponibili"
2490
+ };
2476
2491
 
2477
2492
  // src/elements/core/base-elements/link-base-element.ts
2478
2493
  /** Link base class. */
@@ -6286,7 +6301,7 @@ const sbbOverlayOutsidePointerEventListener = new SbbOverlayOutsidePointerEventL
6286
6301
  function setAriaOverlayTriggerProperties(overlay, trigger, popupType, state) {
6287
6302
  if (!trigger) return;
6288
6303
  trigger.ariaHasPopup = popupType;
6289
- trigger.ariaControlsElements = [overlay];
6304
+ trigger.ariaControlsElements = appendAriaElements(trigger.ariaControlsElements, overlay);
6290
6305
  trigger.ariaExpanded = `${state === "opening" || state === "opened"}`;
6291
6306
  }
6292
6307
  /**
@@ -6300,6 +6315,7 @@ function removeAriaOverlayTriggerProperties(trigger) {
6300
6315
  }
6301
6316
  /**
6302
6317
  * Add meaningful aria attributes to trigger element of role='combobox'
6318
+ * @deprecated
6303
6319
  */
6304
6320
  function setAriaComboBoxAttributes(trigger, overlayId, expanded, hasPopup = "listbox") {
6305
6321
  if (!trigger) return;
@@ -6308,11 +6324,11 @@ function setAriaComboBoxAttributes(trigger, overlayId, expanded, hasPopup = "lis
6308
6324
  trigger.setAttribute("aria-autocomplete", "list");
6309
6325
  trigger.setAttribute("aria-haspopup", hasPopup);
6310
6326
  trigger.setAttribute("aria-controls", overlayId);
6311
- trigger.setAttribute("aria-owns", overlayId);
6312
6327
  trigger.setAttribute("aria-expanded", `${expanded}`);
6313
6328
  }
6314
6329
  /**
6315
6330
  * Remove aria attributes from trigger elements.
6331
+ * @deprecated
6316
6332
  */
6317
6333
  function removeAriaComboBoxAttributes(trigger) {
6318
6334
  if (!trigger) return;
@@ -6321,8 +6337,7 @@ function removeAriaComboBoxAttributes(trigger) {
6321
6337
  trigger.removeAttribute("aria-autocomplete");
6322
6338
  trigger.removeAttribute("aria-haspopup");
6323
6339
  trigger.removeAttribute("aria-controls");
6324
- trigger.removeAttribute("aria-owns");
6325
6340
  trigger.removeAttribute("aria-expanded");
6326
6341
  }
6327
6342
 
6328
- export { DateAdapter, FORMAT_DATE, FRIDAY, ISO8601_FORMAT_DATE, IS_FOCUSABLE_QUERY, InteractivityChecker, IsFocusableConfig, MONDAY, NativeDateAdapter, SATURDAY, SEPARATORLESS_FORMAT_DATE, SUNDAY, SbbActionBaseElement, SbbAnimationCompleteMixin, SbbButtonBaseElement, SbbButtonLikeBaseElement, SbbDarkModeController, SbbDisabledInteractiveMixin, SbbDisabledMixin, SbbDisabledTabIndexActionMixin, SbbElement, SbbEscapableOverlayController, SbbFocusTrapController, SbbFocusVisibleWithinController, SbbFormAssociatedCheckboxMixin, SbbFormAssociatedInputMixin, SbbFormAssociatedMixin, SbbFormAssociatedRadioButtonMixin, SbbIdReferenceController, SbbInertController, SbbLanguageController, SbbLinkBaseElement, SbbLiveAnnouncer, SbbMediaMatcherController, SbbMediaQueryBreakpointLargeAndAbove, SbbMediaQueryBreakpointLargeAndBelow, SbbMediaQueryBreakpointSmallAndAbove, SbbMediaQueryBreakpointSmallAndBelow, SbbMediaQueryBreakpointUltraAndAbove, SbbMediaQueryBreakpointZeroAndAbove, SbbMediaQueryDarkMode, SbbMediaQueryForcedColors, SbbMediaQueryHover, SbbMediaQueryPointerCoarse, SbbNamedSlotListMixin, SbbNegativeMixin, SbbOpenCloseBaseElement, SbbOverlayOutsidePointerEventListener, SbbOverlayPositionController, SbbPanelMixin, SbbPropertyWatcherController, SbbReadonlyMixin, SbbRequiredMixin, SbbScrollController, SbbScrollHandler, SbbSelectionGroupBaseElement, SbbSelectionPanelMixin, SbbSlottedChangeEvent, SbbUpdateSchedulerMixin, THURSDAY, TUESDAY, TemporalDateAdapter, WEDNESDAY, appendAriaElements, buttonResetStyles, containsPierceShadowDom, defaultDateAdapter, forceType, forwardEvent, getElementPosition, getElementPositionHorizontal, getElementRectangle, getEventTarget, getNextElementIndex, getOverride, handleDistinctChange, hostScrollbarStyles, i18nAdditionalWagonInformationHeading, i18nAnd, i18nArrival, i18nBlockedPassage, i18nBreadcrumbEllipsisButtonLabel, i18nCalendarDateSelection, i18nCalendarWeekNumber, i18nCarouselArrowsNavigationHint, i18nCarouselItemAriaLabel, i18nCheckboxRequired, i18nChipDelete, i18nChipGroupInputDescription, i18nClass, i18nClearInput, i18nCloseAlert, i18nCloseDialog, i18nCloseNavigation, i18nCloseNotification, i18nClosePopover, i18nCloseSidebar, i18nClosedCompartmentLabel, i18nCollapsed, i18nConnectionFrom, i18nConnectionRoundtrip, i18nConnectionTo, i18nCouchetteWagonLabel, i18nDateChangedTo, i18nDateInvalid, i18nDateMax, i18nDateMin, i18nDatePickerPlaceholder, i18nDeparture, i18nDialog, i18nDirection, i18nDownload, i18nDurationDay, i18nDurationHour, i18nDurationMinute, i18nExpanded, i18nFileSelectorButtonLabel, i18nFileSelectorButtonLabelMultiple, i18nFileSelectorCurrentlySelected, i18nFileSelectorDeleteFile, i18nFileSelectorSubtitleLabel, i18nFileSelectorSubtitleLabelMultiple, i18nFlipCard, i18nFromPlatform, i18nGoBack, i18nInputRequired, i18nItemsPerPage, i18nLocomotiveLabel, i18nLogo125Anniversary, i18nLogo125AnniversaryYears, i18nMapContainerButtonLabel, i18nMeansOfTransport, i18nMultipleSelectionPossible, i18nNew, i18nNextDay, i18nNextMonth, i18nNextPage, i18nNextSlide, i18nNextYear, i18nNextYearRange, i18nNonAccessible, i18nOccupancy, i18nPage, i18nPaginatorOf, i18nPaginatorSelected, i18nPreviousDay, i18nPreviousMonth, i18nPreviousPage, i18nPreviousSlide, i18nPreviousYear, i18nPreviousYearRange, i18nRealTimeInfo, i18nRemainingCharacters, i18nRestaurantWagonLabel, i18nReverseCard, i18nSector, i18nSectorShort, i18nSelectNextDay, i18nSelectPreviousDay, i18nSelectionRequired, i18nShowCalendar, i18nSleepingWagonLabel, i18nSlide, i18nSupersaver, i18nTargetOpensInNewWindow, i18nTimeInputChange, i18nTimeInvalid, i18nTimeMax, i18nTimeMaxLength, i18nTimetableFormSwapButtonLabel, i18nToday, i18nTrain, i18nTrains, i18nTransferProcedure, i18nTransferProcedures, i18nTravelhints, i18nTripDuration, i18nTripQuayChange, i18nWagonLabel, i18nWagonLabelNumber, i18nWagonsLabel, i18nWalkingDistanceArrival, i18nWalkingDistanceDeparture, i18nYearMonthSelection, idReference, interactivityChecker, isAndroid, isArrowKeyOrPageKeysPressed, isArrowKeyPressed, isBlink, isChromium, isEdge, isEventOnElement, isEventPrevented, isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader, isFirefox, isIOS, isMacOS, isNextArrowKeyPressed, isNextjs, isPreviousArrowKeyPressed, isSafari, isTrident, isWebkit, isZeroAnimationDuration, listResetStyles, mergeConfig, omitEmptyConverter, pageScrollDisabled, plainDate, plainDateConverter, popoverResetStyles, preventScrollOnSpacebarPress, queueDomContentLoaded, radioButtonRegistry, readConfig, removeAriaComboBoxAttributes, removeAriaElements, removeAriaOverlayTriggerProperties, sbbInputModalityDetector, sbbLiveAnnouncer, sbbOverlayOutsidePointerEventListener, screenReaderOnlyStyles, scrollbarStyles, setAriaComboBoxAttributes, setAriaOverlayTriggerProperties, setOrRemoveAttribute, setOverlayPosition, ɵstateController };
6343
+ export { DateAdapter, FORMAT_DATE, FRIDAY, ISO8601_FORMAT_DATE, IS_FOCUSABLE_QUERY, InteractivityChecker, IsFocusableConfig, MONDAY, NativeDateAdapter, SATURDAY, SEPARATORLESS_FORMAT_DATE, SUNDAY, SbbActionBaseElement, SbbAnimationCompleteMixin, SbbButtonBaseElement, SbbButtonLikeBaseElement, SbbDarkModeController, SbbDisabledInteractiveMixin, SbbDisabledMixin, SbbDisabledTabIndexActionMixin, SbbElement, SbbEscapableOverlayController, SbbFocusTrapController, SbbFocusVisibleWithinController, SbbFormAssociatedCheckboxMixin, SbbFormAssociatedInputMixin, SbbFormAssociatedMixin, SbbFormAssociatedRadioButtonMixin, SbbIdReferenceController, SbbInertController, SbbLanguageController, SbbLinkBaseElement, SbbLiveAnnouncer, SbbMediaMatcherController, SbbMediaQueryBreakpointLargeAndAbove, SbbMediaQueryBreakpointLargeAndBelow, SbbMediaQueryBreakpointSmallAndAbove, SbbMediaQueryBreakpointSmallAndBelow, SbbMediaQueryBreakpointUltraAndAbove, SbbMediaQueryBreakpointZeroAndAbove, SbbMediaQueryDarkMode, SbbMediaQueryForcedColors, SbbMediaQueryHover, SbbMediaQueryPointerCoarse, SbbNamedSlotListMixin, SbbNegativeMixin, SbbOpenCloseBaseElement, SbbOverlayOutsidePointerEventListener, SbbOverlayPositionController, SbbPanelMixin, SbbPropertyWatcherController, SbbReadonlyMixin, SbbRequiredMixin, SbbScrollController, SbbScrollHandler, SbbSelectionGroupBaseElement, SbbSelectionPanelMixin, SbbSlottedChangeEvent, SbbUpdateSchedulerMixin, THURSDAY, TUESDAY, TemporalDateAdapter, WEDNESDAY, appendAriaElements, buttonResetStyles, containsPierceShadowDom, defaultDateAdapter, forceType, forwardEvent, getElementPosition, getElementPositionHorizontal, getElementRectangle, getEventTarget, getNextElementIndex, getOverride, handleDistinctChange, hostScrollbarStyles, i18nAdditionalWagonInformationHeading, i18nAnd, i18nArrival, i18nAutocompleteActionsHint, i18nBlockedPassage, i18nBreadcrumbEllipsisButtonLabel, i18nButton, i18nCalendarDateSelection, i18nCalendarWeekNumber, i18nCarouselArrowsNavigationHint, i18nCarouselItemAriaLabel, i18nCheckboxRequired, i18nChipDelete, i18nChipGroupInputDescription, i18nClass, i18nClearInput, i18nCloseAlert, i18nCloseDialog, i18nCloseNavigation, i18nCloseNotification, i18nClosePopover, i18nCloseSidebar, i18nClosedCompartmentLabel, i18nCollapsed, i18nConnectionFrom, i18nConnectionRoundtrip, i18nConnectionTo, i18nCouchetteWagonLabel, i18nDateChangedTo, i18nDateInvalid, i18nDateMax, i18nDateMin, i18nDatePickerPlaceholder, i18nDeparture, i18nDialog, i18nDirection, i18nDownload, i18nDurationDay, i18nDurationHour, i18nDurationMinute, i18nExpanded, i18nFileSelectorButtonLabel, i18nFileSelectorButtonLabelMultiple, i18nFileSelectorCurrentlySelected, i18nFileSelectorDeleteFile, i18nFileSelectorSubtitleLabel, i18nFileSelectorSubtitleLabelMultiple, i18nFlipCard, i18nFromPlatform, i18nGoBack, i18nInputRequired, i18nItemsPerPage, i18nLocomotiveLabel, i18nLogo125Anniversary, i18nLogo125AnniversaryYears, i18nMapContainerButtonLabel, i18nMeansOfTransport, i18nMultipleSelectionPossible, i18nNew, i18nNextDay, i18nNextMonth, i18nNextPage, i18nNextSlide, i18nNextYear, i18nNextYearRange, i18nNonAccessible, i18nOccupancy, i18nPage, i18nPaginatorOf, i18nPaginatorSelected, i18nPreviousDay, i18nPreviousMonth, i18nPreviousPage, i18nPreviousSlide, i18nPreviousYear, i18nPreviousYearRange, i18nRealTimeInfo, i18nRemainingCharacters, i18nRestaurantWagonLabel, i18nReverseCard, i18nSector, i18nSectorShort, i18nSelectNextDay, i18nSelectPreviousDay, i18nSelectionRequired, i18nShowCalendar, i18nSleepingWagonLabel, i18nSlide, i18nSupersaver, i18nTargetOpensInNewWindow, i18nTimeInputChange, i18nTimeInvalid, i18nTimeMax, i18nTimeMaxLength, i18nTimetableFormSwapButtonLabel, i18nToday, i18nTrain, i18nTrains, i18nTransferProcedure, i18nTransferProcedures, i18nTravelhints, i18nTripDuration, i18nTripQuayChange, i18nWagonLabel, i18nWagonLabelNumber, i18nWagonsLabel, i18nWalkingDistanceArrival, i18nWalkingDistanceDeparture, i18nYearMonthSelection, idReference, interactivityChecker, isAndroid, isArrowKeyOrPageKeysPressed, isArrowKeyPressed, isBlink, isChromium, isEdge, isEventOnElement, isEventPrevented, isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader, isFirefox, isIOS, isMacOS, isNextArrowKeyPressed, isNextjs, isPreviousArrowKeyPressed, isSafari, isTrident, isWebkit, isZeroAnimationDuration, listResetStyles, mergeConfig, omitEmptyConverter, pageScrollDisabled, plainDate, plainDateConverter, popoverResetStyles, preventScrollOnSpacebarPress, queueDomContentLoaded, radioButtonRegistry, readConfig, removeAriaComboBoxAttributes, removeAriaElements, removeAriaOverlayTriggerProperties, sbbInputModalityDetector, sbbLiveAnnouncer, sbbOverlayOutsidePointerEventListener, screenReaderOnlyStyles, scrollbarStyles, setAriaComboBoxAttributes, setAriaOverlayTriggerProperties, setOrRemoveAttribute, setOverlayPosition, ɵstateController };
@@ -21,7 +21,7 @@ var mini_button_label_common_default = ":host {\n --sbb-mini-button-gap: 0.125r
21
21
  var primary_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-color-primary150);\n --sbb-button-color-active-border: var(--sbb-color-primary150);\n --sbb-button-color-active-text: var(--sbb-color-4-negative);\n --sbb-button-color-default-background: var(--sbb-color-primary);\n --sbb-button-color-default-border: var(--sbb-color-primary);\n --sbb-button-color-default-text: var(--sbb-color-1-negative);\n --sbb-button-color-hover-background: var(--sbb-color-primary125);\n --sbb-button-color-hover-border: var(--sbb-color-primary125);\n --sbb-button-color-hover-text: var(--sbb-color-3-negative);\n --sbb-button-color-loading-border: color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 50%,\n var(--sbb-button-color-default-text)\n );\n --sbb-button-color-loading-border: light-dark(\n color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 50%,\n var(--sbb-button-color-default-text)\n ),\n color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 70%,\n var(--sbb-button-color-default-text)\n )\n );\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-primary) 20%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-primary) 40%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-primary125) 20%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary125) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-primary125) 40%, transparent)\n );\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-color-primary150);\n --sbb-button-color-active-border: var(--sbb-color-primary150);\n --sbb-button-color-active-text: var(--sbb-color-4-negative);\n --sbb-button-color-default-background: var(--sbb-color-primary);\n --sbb-button-color-default-border: var(--sbb-color-primary);\n --sbb-button-color-default-text: var(--sbb-color-1-negative);\n --sbb-button-color-hover-background: var(--sbb-color-primary125);\n --sbb-button-color-hover-border: var(--sbb-color-primary125);\n --sbb-button-color-hover-text: var(--sbb-color-3-negative);\n --sbb-button-color-loading-border: color-mix(\n in srgb,\n var(--sbb-button-color-active-background) 70%,\n var(--sbb-button-color-default-text)\n );\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-primary) 60%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-primary) 40%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-primary125) 60%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-primary125) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-primary125) 40%, transparent)\n );\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]), [loading])) {\n --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);\n}\n";
22
22
 
23
23
  // src/elements/button/common/secondary-button.scss?inline
24
- var secondary_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-background-color-3);\n --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-active-text: var(--sbb-color-anthracite);\n --sbb-button-color-active-text: light-dark(\n var(--sbb-color-anthracite),\n var(--sbb-color-graphite)\n );\n --sbb-button-color-default-background: var(--sbb-background-color-1);\n --sbb-button-color-default-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3);\n --sbb-button-color-hover-background: var(--sbb-background-color-1);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-cement) 20%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-cement) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-border-overlap-fix: 0rem;\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-background-color-2-negative);\n --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-active-text: var(--sbb-color-graphite);\n --sbb-button-color-default-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-default-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3-negative);\n --sbb-button-color-hover-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4-negative);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]))) {\n --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);\n}\n";
24
+ var secondary_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-background-color-3);\n --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-active-text: var(--sbb-color-anthracite);\n --sbb-button-color-active-text: light-dark(\n var(--sbb-color-anthracite),\n var(--sbb-color-graphite)\n );\n --sbb-button-color-default-background: var(--sbb-background-color-1);\n --sbb-button-color-default-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3);\n --sbb-button-color-hover-background: var(--sbb-background-color-1);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent);\n --sbb-button-shadow-1-color: light-dark(\n color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-cement) 20%, transparent);\n --sbb-button-shadow-2-color: light-dark(\n color-mix(in srgb, var(--sbb-color-cement) 20%, transparent),\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent)\n );\n --sbb-button-border-overlap-fix: 0rem;\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-background-color-2-negative);\n --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-active-text: var(--sbb-color-graphite);\n --sbb-button-color-default-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-default-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-default-text: var(--sbb-color-3-negative);\n --sbb-button-color-hover-background: var(--sbb-background-color-1-negative);\n --sbb-button-color-hover-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-4-negative);\n --sbb-button-color-loading-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive], :active, :is(:state(active),[state--active]))) {\n --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);\n}\n\n:host(:not([disabled], :disabled, [disabled-interactive])[loading]) {\n --sbb-button-border-override: none transparent;\n}\n";
25
25
 
26
26
  // src/elements/button/common/transparent-button.scss?inline
27
27
  var transparent_button_default = ":host {\n --sbb-button-color-active-background: var(--sbb-background-color-4);\n --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);\n --sbb-button-color-active-text: var(--sbb-color-1);\n --sbb-button-color-default-background: transparent;\n --sbb-button-color-default-border: transparent;\n --sbb-button-color-default-text: var(--sbb-color-1);\n --sbb-button-color-hover-background: var(--sbb-background-color-3);\n --sbb-button-color-hover-border: var(--sbb-border-color-3-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-1);\n --sbb-button-color-loading-border: var(--sbb-color-silver);\n --sbb-button-color-loading-border: light-dark(var(--sbb-color-silver), var(--sbb-color-granite));\n}\n\n:host([negative]) {\n --sbb-button-color-active-background: var(--sbb-background-color-4-negative);\n --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);\n --sbb-button-color-active-text: var(--sbb-color-1-negative);\n --sbb-button-color-default-background: transparent;\n --sbb-button-color-default-border: transparent;\n --sbb-button-color-default-text: var(--sbb-color-1-negative);\n --sbb-button-color-hover-background: var(--sbb-background-color-3-negative);\n --sbb-button-color-hover-border: var(--sbb-border-color-3-negative-inverted);\n --sbb-button-color-hover-text: var(--sbb-color-1-negative);\n --sbb-button-color-loading-border: var(--sbb-color-granite);\n}\n";
@@ -2577,8 +2577,11 @@ sbb-breadcrumb-group:not(:defined) {
2577
2577
  --_hover-offset: 0.0625rem;
2578
2578
  --_padding-block: var(--sbb-button-padding-block-min);
2579
2579
  --_padding-inline: var(--sbb-button-padding-inline);
2580
- --_border: calc(var(--sbb-button-border-width) + var(--sbb-button-border-overlap-fix, 1px)) solid
2581
- var(--_border-color);
2580
+ --_border: var(
2581
+ --sbb-button-border-override,
2582
+ calc(var(--sbb-button-border-width) + var(--sbb-button-border-overlap-fix, 1px)) solid
2583
+ var(--_border-color)
2584
+ );
2582
2585
  --_animation-loading-delay: var(
2583
2586
  --sbb-disable-animation-duration,
2584
2587
  var(--sbb-button-loading-delay)
@@ -2589,6 +2592,8 @@ sbb-breadcrumb-group:not(:defined) {
2589
2592
  var(--_animation-loading-delay) infinite var(--_animation-loading-rotate-function);
2590
2593
  --_animation-loading-move: sbb-button-move calc(var(--_animation-loading-duration) / 2)
2591
2594
  var(--_animation-loading-delay) alternate infinite linear;
2595
+ --_animation-loading-fade: sbb-button-loading-fade
2596
+ var(--sbb-disable-animation-duration, var(--sbb-button-loading-delay)) ease-in forwards;
2592
2597
  }
2593
2598
  @media (forced-colors: active) {
2594
2599
  :is(.sbb-button,
@@ -2900,15 +2905,30 @@ sbb-breadcrumb-group:not(:defined) {
2900
2905
  calc(100% - var(--sbb-button-min-height) / 2)
2901
2906
  )
2902
2907
  50%,
2903
- var(--sbb-button-color-loading-border) 0deg,
2904
- var(--sbb-button-color-loading-border) 300deg,
2905
- var(--sbb-button-color-loading-snake-color, var(--sbb-button-color-active-text)) 360deg
2908
+ color-mix(
2909
+ in srgb,
2910
+ var(--sbb-button-color-loading-border) calc(var(--sbb-button-loading-opacity) * 100%),
2911
+ transparent
2912
+ )
2913
+ 0deg,
2914
+ color-mix(
2915
+ in srgb,
2916
+ var(--sbb-button-color-loading-border) calc(var(--sbb-button-loading-opacity) * 100%),
2917
+ transparent
2918
+ )
2919
+ 300deg,
2920
+ color-mix(
2921
+ in srgb,
2922
+ var(--sbb-button-color-loading-snake-color, var(--sbb-button-color-active-text))
2923
+ calc(var(--sbb-button-loading-opacity) * 100%),
2924
+ transparent
2925
+ )
2926
+ 360deg
2906
2927
  ),
2907
2928
  var(--_background-color);
2908
2929
  --_loading-outline-offset: calc(
2909
2930
  var(--sbb-focus-outline-offset) + var(--sbb-button-loading-border-width)
2910
2931
  );
2911
- --_border: none;
2912
2932
  --_border-action: var(--sbb-button-loading-border-width) dotted transparent;
2913
2933
  --_padding-block: calc(
2914
2934
  var(--sbb-button-padding-block-min) - var(--sbb-button-loading-border-width)
@@ -2916,9 +2936,30 @@ sbb-breadcrumb-group:not(:defined) {
2916
2936
  --_padding-inline: calc(
2917
2937
  var(--sbb-button-padding-inline) - var(--sbb-button-loading-border-width)
2918
2938
  );
2919
- --_animation: var(--_animation-loading-rotate), var(--_animation-loading-move);
2939
+ --_animation:
2940
+ var(--_animation-loading-fade), var(--_animation-loading-rotate), var(--_animation-loading-move);
2920
2941
  --_forced-colors-adjust: none;
2921
2942
  }
2943
+ @media (forced-colors: active) {
2944
+ :is(.sbb-button,
2945
+ .sbb-button-s,
2946
+ .sbb-button-m,
2947
+ .sbb-button-l,
2948
+ .sbb-secondary-button,
2949
+ .sbb-secondary-button-s,
2950
+ .sbb-secondary-button-m,
2951
+ .sbb-secondary-button-l,
2952
+ .sbb-accent-button,
2953
+ .sbb-accent-button-s,
2954
+ .sbb-accent-button-m,
2955
+ .sbb-accent-button-l,
2956
+ .sbb-transparent-button,
2957
+ .sbb-transparent-button-s,
2958
+ .sbb-transparent-button-m,
2959
+ .sbb-transparent-button-l):not([disabled], :disabled, [disabled-interactive], .sbb-disabled-interactive):is([loading], .sbb-loading) {
2960
+ --sbb-button-border-override: none;
2961
+ }
2962
+ }
2922
2963
  :is(.sbb-button,
2923
2964
  .sbb-button-s,
2924
2965
  .sbb-button-m,
@@ -3097,6 +3138,12 @@ sbb-breadcrumb-group:not(:defined) {
3097
3138
  .sbb-secondary-button-l):not([disabled], :disabled, [disabled-interactive], .sbb-disabled-interactive, :active, :is(:state(active),[state--active]), [loading], .sbb-loading) {
3098
3139
  --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);
3099
3140
  }
3141
+ :is(.sbb-secondary-button,
3142
+ .sbb-secondary-button-s,
3143
+ .sbb-secondary-button-m,
3144
+ .sbb-secondary-button-l):not([disabled], :disabled, [disabled-interactive], .sbb-disabled-interactive):is([loading], .sbb-loading) {
3145
+ --sbb-button-border-override: none transparent;
3146
+ }
3100
3147
 
3101
3148
  :is(.sbb-accent-button, .sbb-accent-button-s, .sbb-accent-button-m, .sbb-accent-button-l) {
3102
3149
  --sbb-button-color-active-background: var(--sbb-background-color-1-inverted);
@@ -3172,6 +3219,14 @@ sbb-breadcrumb-group:not(:defined) {
3172
3219
  --sbb-button-color-loading-border: var(--sbb-color-granite);
3173
3220
  }
3174
3221
 
3222
+ @keyframes sbb-button-loading-fade {
3223
+ from {
3224
+ --sbb-button-loading-opacity: 0;
3225
+ }
3226
+ to {
3227
+ --sbb-button-loading-opacity: 1;
3228
+ }
3229
+ }
3175
3230
  @keyframes sbb-button-rotate {
3176
3231
  from {
3177
3232
  --sbb-button-loading-angle: -90deg;
@@ -3190,7 +3245,12 @@ sbb-breadcrumb-group:not(:defined) {
3190
3245
  }
3191
3246
  @property --sbb-button-loading-angle {
3192
3247
  syntax: "<angle>";
3193
- initial-value: 0deg;
3248
+ initial-value: -90deg;
3249
+ inherits: false;
3250
+ }
3251
+ @property --sbb-button-loading-opacity {
3252
+ syntax: "<number>";
3253
+ initial-value: 1;
3194
3254
  inherits: false;
3195
3255
  }
3196
3256
  @property --sbb-button-loading-offset {