@sbb-esta/lyne-elements 0.52.1 → 0.52.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/accordion.js +54 -54
  2. package/action-group.js +3 -3
  3. package/alert/alert-group.js +22 -22
  4. package/alert/alert.js +22 -22
  5. package/autocomplete.js +126 -126
  6. package/breadcrumb/breadcrumb-group.js +60 -60
  7. package/breadcrumb/breadcrumb.js +17 -17
  8. package/calendar.js +423 -423
  9. package/card/card-badge.js +17 -17
  10. package/card/card.js +2 -2
  11. package/card/common.js +30 -30
  12. package/checkbox/checkbox-group.js +17 -17
  13. package/checkbox/checkbox.js +34 -34
  14. package/clock.js +83 -83
  15. package/container/sticky-bar.js +16 -16
  16. package/core/a11y.js +91 -91
  17. package/core/base-elements.js +86 -86
  18. package/core/controllers.js +40 -40
  19. package/core/datetime.js +32 -32
  20. package/core/dom.js +26 -26
  21. package/core/eventing.js +33 -33
  22. package/core/mixins.js +122 -122
  23. package/core/testing.js +29 -29
  24. package/datepicker/common.js +55 -55
  25. package/datepicker/datepicker-toggle.js +94 -94
  26. package/datepicker/datepicker.js +144 -144
  27. package/dialog/dialog-title.js +20 -20
  28. package/dialog/dialog.js +66 -66
  29. package/expansion-panel/expansion-panel-header.js +20 -20
  30. package/expansion-panel/expansion-panel.js +60 -60
  31. package/file-selector.js +91 -91
  32. package/form-field/form-field-clear.js +12 -12
  33. package/form-field/form-field.js +111 -111
  34. package/header/header.js +53 -53
  35. package/icon.js +107 -107
  36. package/image.js +87 -87
  37. package/journey-header.js +29 -29
  38. package/map-container.js +23 -23
  39. package/menu/menu.js +91 -91
  40. package/navigation/common.js +16 -16
  41. package/navigation/navigation-marker.js +34 -34
  42. package/navigation/navigation-section.js +83 -83
  43. package/navigation/navigation.js +87 -87
  44. package/notification.js +52 -52
  45. package/option/optgroup.js +45 -45
  46. package/option/option.js +108 -108
  47. package/overlay.js +5 -5
  48. package/package.json +1 -1
  49. package/popover/popover.js +110 -110
  50. package/radio-button/radio-button-group.js +93 -93
  51. package/radio-button/radio-button.js +84 -84
  52. package/select.js +178 -178
  53. package/selection-panel.js +44 -44
  54. package/slider.js +58 -58
  55. package/status.js +6 -6
  56. package/stepper/step-label.js +19 -19
  57. package/stepper/step.js +31 -31
  58. package/stepper/stepper.js +46 -46
  59. package/tabs/tab-group.js +67 -67
  60. package/tag/tag-group.js +8 -8
  61. package/tag/tag.js +27 -27
  62. package/teaser-paid.js +12 -12
  63. package/time-input.js +73 -73
  64. package/timetable-occupancy-icon.js +26 -26
  65. package/timetable-occupancy.js +9 -9
  66. package/toast.js +38 -38
  67. package/toggle/toggle-option.js +33 -33
  68. package/toggle/toggle.js +46 -46
  69. package/train/train-formation.js +36 -36
  70. package/train/train-wagon.js +30 -30
  71. package/train/train.js +13 -13
package/select.js CHANGED
@@ -1,35 +1,35 @@
1
- import { css as w, html as b, nothing as c } from "lit";
2
- import { property as h, state as g, customElement as m } from "lit/decorators.js";
1
+ import { css as _, html as b, nothing as c } from "lit";
2
+ import { property as d, state as g, customElement as m } from "lit/decorators.js";
3
3
  import { ref as v } from "lit/directives/ref.js";
4
- import { getNextElementIndex as y } from "./core/a11y.js";
5
- import { SbbOpenCloseBaseElement as x } from "./core/base-elements.js";
6
- import { SbbConnectedAbortController as _ } from "./core/controllers.js";
7
- import { hostAttributes as k } from "./core/decorators.js";
8
- import { isNextjs as f, getDocumentWritingMode as C, isSafari as E } from "./core/dom.js";
9
- import { EventEmitter as d } from "./core/eventing.js";
10
- import { SbbUpdateSchedulerMixin as $, SbbDisabledMixin as A, SbbNegativeMixin as S } from "./core/mixins.js";
11
- import { isEventOnElement as u, setOverlayPosition as O, overlayGapFixCorners as D } from "./core/overlay.js";
12
- const U = w`*,:before,:after{box-sizing:border-box}.sbb-gap-fix-wrapper{position:relative;overflow:hidden;width:var(--sbb-options-panel-border-radius);height:var(--sbb-options-panel-border-radius);background-color:transparent}.sbb-gap-fix-corner{position:absolute;border-radius:50%;border:calc(var(--sbb-options-panel-border-radius) / 2) solid var(--sbb-options-panel-background-color);width:calc(var(--sbb-options-panel-border-radius) * 3);height:calc(var(--sbb-options-panel-border-radius) * 3);bottom:calc(var(--sbb-options-panel-border-radius) / 2 * -1)}.sbb-gap-fix-corner#left{left:calc(var(--sbb-options-panel-border-radius) / 2 * -1)}:host([dir=rtl]) .sbb-gap-fix-corner#left{right:calc(var(--sbb-options-panel-border-radius) / 2 * -1);left:unset}.sbb-gap-fix-corner#right{right:calc(var(--sbb-options-panel-border-radius) / 2 * -1)}:host([dir=rtl]) .sbb-gap-fix-corner#right{left:calc(var(--sbb-options-panel-border-radius) / 2 * -1);right:unset}:host{--sbb-scrollbar-thumb-width: .125rem;--sbb-scrollbar-thumb-width-hover: .25rem;--sbb-scrollbar-width-firefox: thin;--sbb-scrollbar-color: var(--sbb-color-black-alpha-30);--sbb-scrollbar-color-hover: var(--sbb-color-black-alpha-60);--sbb-scrollbar-track-color: transparent;--sbb-options-panel-position-x: 0;--sbb-options-panel-position-y: 0;--sbb-options-panel-active-option-y: 0;--sbb-options-panel-max-height: calc(85vh - var(--sbb-spacing-fixed-8x));--sbb-options-panel-min-height: var(--sbb-options-panel-origin-height);--sbb-options-panel-visibility: visible;--sbb-options-panel-width: fit-content;--sbb-options-panel-border-radius: var(--sbb-border-radius-4x);--sbb-options-panel-options-border-radius: 0 0 var(--sbb-options-panel-border-radius) var(--sbb-options-panel-border-radius);--sbb-options-panel-animation-duration: var( --sbb-disable-animation-time, var(--sbb-animation-duration-4x) );--sbb-options-panel-animation-timing-function: ease;--sbb-options-panel-gap-fix-opacity: 0;--sbb-options-panel-gap-fix-transform: none;--sbb-options-panel-gap-fix-top: calc( var(--sbb-options-panel-position-y) - var(--sbb-options-panel-border-radius) );--sbb-options-panel-background-color: var(--sbb-color-white);--sbb-focus-outline-color: var(--sbb-focus-outline-color-default);--sbb-options-panel-internal-z-index: var( --sbb-select-z-index, var(--sbb-overlay-default-z-index) );display:block}:host([negative]){--sbb-scrollbar-color: var(--sbb-color-white-alpha-30);--sbb-scrollbar-color-hover: var(--sbb-color-white-alpha-60);--sbb-options-panel-background-color: var(--sbb-color-midnight);--sbb-focus-outline-color: var(--sbb-focus-outline-color-dark)}:host(:not([data-state])),:host([data-state=closed]){--sbb-options-panel-visibility: hidden}:host([data-state=opening]){--sbb-options-panel-animation-name: open}:host([data-state=closing]){--sbb-options-panel-animation-name: close}:host([data-state=opened]),:host([data-state=opening]){--sbb-options-panel-gap-fix-opacity: 1}:host([data-options-panel-position=below]){--sbb-options-panel-animation-transform: translateY( calc((var(--sbb-options-panel-origin-height) / 2) * -1) )}:host([data-options-panel-position=above]){--sbb-options-panel-options-border-radius: var(--sbb-options-panel-border-radius) var(--sbb-options-panel-border-radius) 0 0;--sbb-options-panel-gap-fix-top: var(--sbb-options-panel-max-height);--sbb-options-panel-gap-fix-transform: rotate(180deg);--sbb-options-panel-animation-transform: translateY( calc(var(--sbb-options-panel-origin-height) / 2) )}::slotted(sbb-divider){margin-block:var(--sbb-spacing-fixed-3x)}:host([preserve-icon-space]){--sbb-option-icon-container-display: block}.sbb-select__trigger{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:calc(1em * var(--sbb-typo-line-height-body-text))}.sbb-select__trigger--placeholder{color:var(--sbb-select-placeholder-color, var(--sbb-color-metal));-webkit-text-fill-color:var(--sbb-select-placeholder-color, var(--sbb-color-metal))}.sbb-select__container{position:fixed;pointer-events:none;top:0;right:0;bottom:0;left:0;z-index:var(--sbb-options-panel-internal-z-index)}.sbb-select__gap-fix{display:flex;justify-content:space-between;position:fixed;visibility:var(--sbb-options-panel-visibility);opacity:var(--sbb-options-panel-gap-fix-opacity);background-color:transparent;width:var(--sbb-options-panel-width);height:var(--sbb-options-panel-border-radius);top:var(--sbb-options-panel-gap-fix-top);left:var(--sbb-options-panel-position-x);transform:var(--sbb-options-panel-gap-fix-transform);transition:opacity var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function)}.sbb-select__panel{display:block;position:absolute;visibility:var(--sbb-options-panel-visibility);overflow:hidden;background-color:transparent;border:none;border-radius:var(--sbb-options-panel-border-radius);top:var(--sbb-options-panel-position-y);left:var(--sbb-options-panel-position-x);width:var(--sbb-options-panel-width);transition:box-shadow var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function)}.sbb-select__panel:before,.sbb-select__panel:after{content:"";display:none;position:relative;width:100%;height:var(--sbb-options-panel-origin-height);background-color:transparent;border-radius:var(--sbb-options-panel-border-radius);pointer-events:none;transition:box-shadow var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function);z-index:1}:host([data-options-panel-position=below]) .sbb-select__panel{inset-block-start:calc(var(--sbb-options-panel-position-y) - var(--sbb-options-panel-origin-height))}:host(:is([data-state=opened],[data-state=opening])) .sbb-select__panel{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-1-color)}:host(:is([data-state=opened],[data-state=opening])[negative]) .sbb-select__panel{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-negative-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-negative-1-color)}:host([data-options-panel-position=below]) .sbb-select__panel:before{display:block}:host([data-options-panel-position=above]) .sbb-select__panel:after{display:block}:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless]) .sbb-select__panel:before,:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless]) .sbb-select__panel:after{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-1-color)}:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless][negative]) .sbb-select__panel:before,:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless][negative]) .sbb-select__panel:after{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-negative-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-negative-1-color)}.sbb-select__wrapper{overflow:hidden}.sbb-select__options{--sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);background-color:var(--sbb-options-panel-background-color);padding-block:var(--sbb-spacing-fixed-3x);padding-inline:0;border-radius:var(--sbb-options-panel-options-border-radius);max-height:var(--sbb-options-panel-max-height);min-height:var(--sbb-options-panel-min-height);pointer-events:all;overflow-y:auto;animation-name:var(--sbb-options-panel-animation-name);animation-duration:var(--sbb-options-panel-animation-duration);animation-timing-function:var(--sbb-options-panel-animation-timing-function);padding-block:var(--sbb-spacing-fixed-2x)}.sbb-select__options::-webkit-scrollbar{width:var(--sbb-scrollbar-width);height:var(--sbb-scrollbar-width);background-color:var(--sbb-scrollbar-track-color, transparent)}.sbb-select__options::-webkit-scrollbar-corner{background-color:var(--sbb-scrollbar-track-color, transparent)}.sbb-select__options::-webkit-scrollbar-thumb{background-color:var(--sbb-scrollbar-color, currentcolor);border:calc(.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;border-radius:var(--sbb-border-radius-4x);background-clip:padding-box}.sbb-select__options::-webkit-scrollbar-thumb:hover{background-color:var(--sbb-scrollbar-color-hover, currentcolor);border-width:calc(.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)))}.sbb-select__options::-webkit-scrollbar-button,.sbb-select__options::-webkit-scrollbar-corner{display:none}@supports not selector(::-webkit-scrollbar){.sbb-select__options{scrollbar-width:var(--sbb-scrollbar-width-firefox);scrollbar-color:var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent)}}@media (forced-colors: active){.sbb-select__options{border:var(--sbb-border-width-1x) solid CanvasText;border-block-start:none}}@keyframes open{0%{transform:var(--sbb-options-panel-animation-transform);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes close{0%{transform:translateY(0);opacity:1}to{transform:var(--sbb-options-panel-animation-transform);opacity:0}}`;
13
- var L = Object.defineProperty, q = Object.getOwnPropertyDescriptor, l = (e, t, a, s) => {
14
- for (var i = s > 1 ? void 0 : s ? q(t, a) : t, r = e.length - 1, n; r >= 0; r--)
15
- (n = e[r]) && (i = (s ? n(t, a, i) : n(i)) || i);
16
- return s && i && L(t, a, i), i;
4
+ import { getNextElementIndex as w } from "./core/a11y.js";
5
+ import { SbbOpenCloseBaseElement as y } from "./core/base-elements.js";
6
+ import { SbbConnectedAbortController as x } from "./core/controllers.js";
7
+ import { hostAttributes as E } from "./core/decorators.js";
8
+ import { isNextjs as u, getDocumentWritingMode as O, isSafari as k } from "./core/dom.js";
9
+ import { EventEmitter as p } from "./core/eventing.js";
10
+ import { SbbUpdateSchedulerMixin as C, SbbDisabledMixin as A, SbbNegativeMixin as S } from "./core/mixins.js";
11
+ import { isEventOnElement as f, setOverlayPosition as I, overlayGapFixCorners as P } from "./core/overlay.js";
12
+ const $ = _`*,:before,:after{box-sizing:border-box}.sbb-gap-fix-wrapper{position:relative;overflow:hidden;width:var(--sbb-options-panel-border-radius);height:var(--sbb-options-panel-border-radius);background-color:transparent}.sbb-gap-fix-corner{position:absolute;border-radius:50%;border:calc(var(--sbb-options-panel-border-radius) / 2) solid var(--sbb-options-panel-background-color);width:calc(var(--sbb-options-panel-border-radius) * 3);height:calc(var(--sbb-options-panel-border-radius) * 3);bottom:calc(var(--sbb-options-panel-border-radius) / 2 * -1)}.sbb-gap-fix-corner#left{left:calc(var(--sbb-options-panel-border-radius) / 2 * -1)}:host([dir=rtl]) .sbb-gap-fix-corner#left{right:calc(var(--sbb-options-panel-border-radius) / 2 * -1);left:unset}.sbb-gap-fix-corner#right{right:calc(var(--sbb-options-panel-border-radius) / 2 * -1)}:host([dir=rtl]) .sbb-gap-fix-corner#right{left:calc(var(--sbb-options-panel-border-radius) / 2 * -1);right:unset}:host{--sbb-scrollbar-thumb-width: .125rem;--sbb-scrollbar-thumb-width-hover: .25rem;--sbb-scrollbar-width-firefox: thin;--sbb-scrollbar-color: var(--sbb-color-black-alpha-30);--sbb-scrollbar-color-hover: var(--sbb-color-black-alpha-60);--sbb-scrollbar-track-color: transparent;--sbb-options-panel-position-x: 0;--sbb-options-panel-position-y: 0;--sbb-options-panel-active-option-y: 0;--sbb-options-panel-max-height: calc(85vh - var(--sbb-spacing-fixed-8x));--sbb-options-panel-min-height: var(--sbb-options-panel-origin-height);--sbb-options-panel-visibility: visible;--sbb-options-panel-width: fit-content;--sbb-options-panel-border-radius: var(--sbb-border-radius-4x);--sbb-options-panel-options-border-radius: 0 0 var(--sbb-options-panel-border-radius) var(--sbb-options-panel-border-radius);--sbb-options-panel-animation-duration: var( --sbb-disable-animation-time, var(--sbb-animation-duration-4x) );--sbb-options-panel-animation-timing-function: ease;--sbb-options-panel-gap-fix-opacity: 0;--sbb-options-panel-gap-fix-transform: none;--sbb-options-panel-gap-fix-top: calc( var(--sbb-options-panel-position-y) - var(--sbb-options-panel-border-radius) );--sbb-options-panel-background-color: var(--sbb-color-white);--sbb-focus-outline-color: var(--sbb-focus-outline-color-default);--sbb-options-panel-internal-z-index: var( --sbb-select-z-index, var(--sbb-overlay-default-z-index) );display:block}:host([negative]){--sbb-scrollbar-color: var(--sbb-color-white-alpha-30);--sbb-scrollbar-color-hover: var(--sbb-color-white-alpha-60);--sbb-options-panel-background-color: var(--sbb-color-midnight);--sbb-focus-outline-color: var(--sbb-focus-outline-color-dark)}:host(:not([data-state])),:host([data-state=closed]){--sbb-options-panel-visibility: hidden}:host([data-state=opening]){--sbb-options-panel-animation-name: open}:host([data-state=closing]){--sbb-options-panel-animation-name: close}:host([data-state=opened]),:host([data-state=opening]){--sbb-options-panel-gap-fix-opacity: 1}:host([data-options-panel-position=below]){--sbb-options-panel-animation-transform: translateY( calc((var(--sbb-options-panel-origin-height) / 2) * -1) )}:host([data-options-panel-position=above]){--sbb-options-panel-options-border-radius: var(--sbb-options-panel-border-radius) var(--sbb-options-panel-border-radius) 0 0;--sbb-options-panel-gap-fix-top: var(--sbb-options-panel-max-height);--sbb-options-panel-gap-fix-transform: rotate(180deg);--sbb-options-panel-animation-transform: translateY( calc(var(--sbb-options-panel-origin-height) / 2) )}::slotted(sbb-divider){margin-block:var(--sbb-spacing-fixed-3x)}:host([preserve-icon-space]){--sbb-option-icon-container-display: block}.sbb-select__trigger{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:calc(1em * var(--sbb-typo-line-height-body-text))}.sbb-select__trigger--placeholder{color:var(--sbb-select-placeholder-color, var(--sbb-color-metal));-webkit-text-fill-color:var(--sbb-select-placeholder-color, var(--sbb-color-metal))}.sbb-select__container{position:fixed;pointer-events:none;top:0;right:0;bottom:0;left:0;z-index:var(--sbb-options-panel-internal-z-index)}.sbb-select__gap-fix{display:flex;justify-content:space-between;position:fixed;visibility:var(--sbb-options-panel-visibility);opacity:var(--sbb-options-panel-gap-fix-opacity);background-color:transparent;width:var(--sbb-options-panel-width);height:var(--sbb-options-panel-border-radius);top:var(--sbb-options-panel-gap-fix-top);left:var(--sbb-options-panel-position-x);transform:var(--sbb-options-panel-gap-fix-transform);transition:opacity var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function)}.sbb-select__panel{display:block;position:absolute;visibility:var(--sbb-options-panel-visibility);overflow:hidden;background-color:transparent;border:none;border-radius:var(--sbb-options-panel-border-radius);top:var(--sbb-options-panel-position-y);left:var(--sbb-options-panel-position-x);width:var(--sbb-options-panel-width);transition:box-shadow var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function)}.sbb-select__panel:before,.sbb-select__panel:after{content:"";display:none;position:relative;width:100%;height:var(--sbb-options-panel-origin-height);background-color:transparent;border-radius:var(--sbb-options-panel-border-radius);pointer-events:none;transition:box-shadow var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function);z-index:1}:host([data-options-panel-position=below]) .sbb-select__panel{inset-block-start:calc(var(--sbb-options-panel-position-y) - var(--sbb-options-panel-origin-height))}:host(:is([data-state=opened],[data-state=opening])) .sbb-select__panel{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-1-color)}:host(:is([data-state=opened],[data-state=opening])[negative]) .sbb-select__panel{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-negative-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-negative-1-color)}:host([data-options-panel-position=below]) .sbb-select__panel:before{display:block}:host([data-options-panel-position=above]) .sbb-select__panel:after{display:block}:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless]) .sbb-select__panel:before,:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless]) .sbb-select__panel:after{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-1-color)}:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless][negative]) .sbb-select__panel:before,:host(:is([data-state=opened],[data-state=opening])[data-option-panel-origin-borderless][negative]) .sbb-select__panel:after{box-shadow:var(--sbb-shadow-elevation-level-5-shadow-2-offset-x) var(--sbb-shadow-elevation-level-5-shadow-2-offset-y) var(--sbb-shadow-elevation-level-5-shadow-2-blur) var(--sbb-shadow-elevation-level-5-shadow-2-spread) var(--sbb-shadow-elevation-level-5-hard-negative-2-color),var(--sbb-shadow-elevation-level-5-shadow-1-offset-x) var(--sbb-shadow-elevation-level-5-shadow-1-offset-y) var(--sbb-shadow-elevation-level-5-shadow-1-blur) var(--sbb-shadow-elevation-level-5-shadow-1-spread) var(--sbb-shadow-elevation-level-5-hard-negative-1-color)}.sbb-select__wrapper{overflow:hidden}.sbb-select__options{--sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);background-color:var(--sbb-options-panel-background-color);padding-block:var(--sbb-spacing-fixed-3x);padding-inline:0;border-radius:var(--sbb-options-panel-options-border-radius);max-height:var(--sbb-options-panel-max-height);min-height:var(--sbb-options-panel-min-height);pointer-events:all;overflow-y:auto;animation-name:var(--sbb-options-panel-animation-name);animation-duration:var(--sbb-options-panel-animation-duration);animation-timing-function:var(--sbb-options-panel-animation-timing-function);padding-block:var(--sbb-spacing-fixed-2x)}.sbb-select__options::-webkit-scrollbar{width:var(--sbb-scrollbar-width);height:var(--sbb-scrollbar-width);background-color:var(--sbb-scrollbar-track-color, transparent)}.sbb-select__options::-webkit-scrollbar-corner{background-color:var(--sbb-scrollbar-track-color, transparent)}.sbb-select__options::-webkit-scrollbar-thumb{background-color:var(--sbb-scrollbar-color, currentcolor);border:calc(.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;border-radius:var(--sbb-border-radius-4x);background-clip:padding-box}.sbb-select__options::-webkit-scrollbar-thumb:hover{background-color:var(--sbb-scrollbar-color-hover, currentcolor);border-width:calc(.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)))}.sbb-select__options::-webkit-scrollbar-button,.sbb-select__options::-webkit-scrollbar-corner{display:none}@supports not selector(::-webkit-scrollbar){.sbb-select__options{scrollbar-width:var(--sbb-scrollbar-width-firefox);scrollbar-color:var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent)}}@media (forced-colors: active){.sbb-select__options{border:var(--sbb-border-width-1x) solid CanvasText;border-block-start:none}}@keyframes open{0%{transform:var(--sbb-options-panel-animation-transform);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes close{0%{transform:translateY(0);opacity:1}to{transform:var(--sbb-options-panel-animation-transform);opacity:0}}`;
13
+ var D = Object.defineProperty, L = Object.getOwnPropertyDescriptor, r = (e, t, i, s) => {
14
+ for (var o = s > 1 ? void 0 : s ? L(t, i) : t, n = e.length - 1, l; n >= 0; n--)
15
+ (l = e[n]) && (o = (s ? l(t, i, o) : l(o)) || o);
16
+ return s && o && D(t, i, o), o;
17
17
  };
18
- const p = E;
19
- let z = 0, o = class extends $(
20
- A(S(x))
18
+ const h = k;
19
+ let T = 0, a = class extends C(
20
+ A(S(y))
21
21
  ) {
22
22
  constructor() {
23
- super(...arguments), this.multiple = !1, this.required = !1, this.readonly = !1, this.c = null, this.o = new d(this, o.events.didChange), this.p = new d(this, o.events.change), this.q = new d(this, o.events.input), this.B = new d(
23
+ super(...arguments), this.multiple = !1, this.required = !1, this.readonly = !1, this._displayValue = null, this._didChange = new p(this, a.events.didChange), this._change = new p(this, a.events.change), this._input = new p(this, a.events.input), this._stateChange = new p(
24
24
  this,
25
- o.events.stateChange,
25
+ a.events.stateChange,
26
26
  {
27
27
  composed: !1
28
28
  }
29
- ), this.i = `sbb-select-${++z}`, this.d = -1, this.e = "", this.m = !1, this.r = !1, this.C = new _(this), this.M = (e) => {
30
- this.r = u(this.g, e);
31
- }, this.N = async (e) => {
32
- !this.r && !u(this.g, e) && await this.close();
29
+ ), this._overlayId = `sbb-select-${++T}`, this._activeItemIndex = -1, this._searchString = "", this._didLoad = !1, this._isPointerDownEventOnMenu = !1, this._abort = new x(this), this._pointerDownListener = (e) => {
30
+ this._isPointerDownEventOnMenu = f(this._overlay, e);
31
+ }, this._closeOnBackdropClick = async (e) => {
32
+ !this._isPointerDownEventOnMenu && !f(this._overlay, e) && await this.close();
33
33
  };
34
34
  }
35
35
  /**
@@ -37,56 +37,56 @@ let z = 0, o = class extends $(
37
37
  * @internal
38
38
  */
39
39
  get inputElement() {
40
- return this.b;
40
+ return this._triggerElement;
41
41
  }
42
42
  /** Gets all the SbbOptionElement projected in the select. */
43
- get s() {
43
+ get _options() {
44
44
  var e;
45
45
  return Array.from(((e = this.querySelectorAll) == null ? void 0 : e.call(this, "sbb-option")) ?? []);
46
46
  }
47
- get a() {
48
- return this.s.filter(
47
+ get _filteredOptions() {
48
+ return this._options.filter(
49
49
  (e) => !e.disabled && !e.hasAttribute("data-group-disabled")
50
50
  );
51
51
  }
52
52
  /** Opens the selection panel. */
53
53
  open() {
54
- this.state !== "closed" || !this.g || this.s.length === 0 || this.willOpen.emit() && (this.state = "opening", this.n());
54
+ this.state !== "closed" || !this._overlay || this._options.length === 0 || this.willOpen.emit() && (this.state = "opening", this._setOverlayPosition());
55
55
  }
56
56
  /** Closes the selection panel. */
57
57
  close() {
58
- this.state === "opened" && this.willClose.emit() && (this.state = "closing", this.f.abort());
58
+ this.state === "opened" && this.willClose.emit() && (this.state = "closing", this._openPanelEventsController.abort());
59
59
  }
60
60
  /** Gets the current displayed value. */
61
61
  getDisplayValue() {
62
- return this.c ? this.c : "";
62
+ return this._displayValue ? this._displayValue : "";
63
63
  }
64
64
  /** Listens to option changes. */
65
- D(e) {
65
+ _onOptionChanged(e) {
66
66
  const t = e.target;
67
- t.selected ? this.E(t) : this.F(t);
67
+ t.selected ? this._onOptionSelected(t) : this._onOptionDeselected(t);
68
68
  }
69
- G(e) {
69
+ _onOptionClick(e) {
70
70
  const t = e.target;
71
71
  t.localName !== "sbb-option" || t.disabled || this.multiple || this.close();
72
72
  }
73
73
  /** Sets the _displayValue by checking the internal sbb-options and setting the correct `selected` value on them. */
74
- t(e) {
75
- const t = this.a;
74
+ _onValueChanged(e) {
75
+ const t = this._filteredOptions;
76
76
  if (Array.isArray(e)) {
77
77
  t.filter((s) => !e.includes(s.value ?? s.getAttribute("value"))).forEach((s) => s.selected = !1);
78
- const a = t.filter(
78
+ const i = t.filter(
79
79
  (s) => e.includes(s.value ?? s.getAttribute("value"))
80
80
  );
81
- a.forEach((s) => s.selected = !0), this.c = a.map((s) => s.textContent).join(", ") || null;
81
+ i.forEach((s) => s.selected = !0), this._displayValue = i.map((s) => s.textContent).join(", ") || null;
82
82
  } else {
83
- const a = t.find((s) => (s.value ?? s.getAttribute("value")) === e);
84
- a && (a.selected = !0), t.filter((s) => (s.value ?? s.getAttribute("value")) !== e).forEach((s) => s.selected = !1), this.c = (a == null ? void 0 : a.textContent) || null;
83
+ const i = t.find((s) => (s.value ?? s.getAttribute("value")) === e);
84
+ i && (i.selected = !0), t.filter((s) => (s.value ?? s.getAttribute("value")) !== e).forEach((s) => s.selected = !1), this._displayValue = (i == null ? void 0 : i.textContent) || null;
85
85
  }
86
- this.B.emit({ type: "value", value: e });
86
+ this._stateChange.emit({ type: "value", value: e });
87
87
  }
88
88
  firstUpdated(e) {
89
- super.firstUpdated(e), this.focus = () => this.b.focus(), this.blur = () => this.b.blur(), f() || (this.startUpdate(), this.u());
89
+ super.firstUpdated(e), this.focus = () => this._triggerElement.focus(), this.blur = () => this._triggerElement.blur(), u() || (this.startUpdate(), this._setupSelect());
90
90
  }
91
91
  /**
92
92
  * Removes element's first attribute whose qualified name is qualifiedName.
@@ -95,111 +95,111 @@ let z = 0, o = class extends $(
95
95
  * @internal We need to override this due to a hydration issue with Next.js.
96
96
  */
97
97
  removeAttribute(e) {
98
- f() && e === "defer-hydration" && !this.m && this.updateComplete.then(() => this.u()), super.removeAttribute(e);
98
+ u() && e === "defer-hydration" && !this._didLoad && this.updateComplete.then(() => this._setupSelect()), super.removeAttribute(e);
99
99
  }
100
100
  connectedCallback() {
101
- var a, s;
102
- super.connectedCallback(), p && (this.id || (this.id = this.i));
103
- const e = this.C.signal, t = ((a = this.closest) == null ? void 0 : a.call(this, "sbb-form-field")) ?? ((s = this.closest) == null ? void 0 : s.call(this, "[data-form-field]"));
104
- t && (this.negative = t.hasAttribute("negative")), this.v(), this.m && (this.w(), this.x()), this.value && this.t(this.value), this.addEventListener(
101
+ var i, s;
102
+ super.connectedCallback(), h && (this.id || (this.id = this._overlayId));
103
+ const e = this._abort.signal, t = ((i = this.closest) == null ? void 0 : i.call(this, "sbb-form-field")) ?? ((s = this.closest) == null ? void 0 : s.call(this, "[data-form-field]"));
104
+ t && (this.negative = t.hasAttribute("negative")), this._syncProperties(), this._didLoad && (this._setupOrigin(), this._setupTrigger()), this.value && this._onValueChanged(this.value), this.addEventListener(
105
105
  "optionSelectionChange",
106
- (i) => this.D(i),
106
+ (o) => this._onOptionChanged(o),
107
107
  { signal: e }
108
108
  ), this.addEventListener(
109
109
  "click",
110
- (i) => {
111
- this.G(i), this.y();
110
+ (o) => {
111
+ this._onOptionClick(o), this._toggleOpening();
112
112
  },
113
113
  { signal: e }
114
114
  );
115
115
  }
116
116
  willUpdate(e) {
117
- super.willUpdate(e), e.has("value") && this.t(this.value), (e.has("negative") || e.has("multiple")) && this.v();
117
+ super.willUpdate(e), e.has("value") && this._onValueChanged(this.value), (e.has("negative") || e.has("multiple")) && this._syncProperties();
118
118
  }
119
119
  disconnectedCallback() {
120
120
  var e;
121
- super.disconnectedCallback(), this.prepend(this.b), (e = this.f) == null || e.abort();
121
+ super.disconnectedCallback(), this.prepend(this._triggerElement), (e = this._openPanelEventsController) == null || e.abort();
122
122
  }
123
- v() {
123
+ _syncProperties() {
124
124
  var e, t;
125
- (e = this.querySelectorAll) == null || e.call(this, "sbb-divider").forEach((a) => a.negative = this.negative), (t = this.querySelectorAll) == null || t.call(
125
+ (e = this.querySelectorAll) == null || e.call(this, "sbb-divider").forEach((i) => i.negative = this.negative), (t = this.querySelectorAll) == null || t.call(
126
126
  this,
127
127
  "sbb-option, sbb-optgroup"
128
- ).forEach((a) => {
129
- a.toggleAttribute("data-negative", this.negative), a.toggleAttribute("data-multiple", this.multiple);
128
+ ).forEach((i) => {
129
+ i.toggleAttribute("data-negative", this.negative), i.toggleAttribute("data-multiple", this.multiple);
130
130
  });
131
131
  }
132
- u() {
133
- this.w(), this.x(), this.m = !0, this.completeUpdate();
132
+ _setupSelect() {
133
+ this._setupOrigin(), this._setupTrigger(), this._didLoad = !0, this.completeUpdate();
134
134
  }
135
135
  /** Sets the originElement; if the component is used in a sbb-form-field uses it, otherwise uses the parentElement. */
136
- w() {
137
- var t, a, s, i;
136
+ _setupOrigin() {
137
+ var t, i, s, o;
138
138
  const e = (t = this.closest) == null ? void 0 : t.call(this, "sbb-form-field");
139
- this.l = ((s = (a = e == null ? void 0 : e.shadowRoot) == null ? void 0 : a.querySelector) == null ? void 0 : s.call(a, "#overlay-anchor")) ?? this.parentElement, this.l && this.toggleAttribute(
139
+ this._originElement = ((s = (i = e == null ? void 0 : e.shadowRoot) == null ? void 0 : i.querySelector) == null ? void 0 : s.call(i, "#overlay-anchor")) ?? this.parentElement, this._originElement && this.toggleAttribute(
140
140
  "data-option-panel-origin-borderless",
141
- !!((i = e == null ? void 0 : e.hasAttribute) != null && i.call(e, "borderless"))
141
+ !!((o = e == null ? void 0 : e.hasAttribute) != null && o.call(e, "borderless"))
142
142
  );
143
143
  }
144
144
  /**
145
145
  * To assess screen-readers problems caused by the interaction between aria patterns and shadow DOM,
146
146
  * we are forced to move the 'combobox' trigger element to the light DOM
147
147
  */
148
- x() {
149
- var t, a, s;
150
- (a = (t = this.parentElement).insertBefore) == null || a.call(t, this.b, this);
148
+ _setupTrigger() {
149
+ var t, i, s;
150
+ (i = (t = this.parentElement).insertBefore) == null || i.call(t, this._triggerElement, this);
151
151
  const e = ((s = this.closest) == null ? void 0 : s.call(this, "sbb-form-field")) ?? this;
152
- this.b.style.top = "0px", this.b.style.height = `${e.offsetHeight}px`, this.b.style.width = `${e.offsetWidth}px`;
152
+ this._triggerElement.style.top = "0px", this._triggerElement.style.height = `${e.offsetHeight}px`, this._triggerElement.style.width = `${e.offsetWidth}px`;
153
153
  }
154
- n() {
155
- O(
156
- this.g,
157
- this.l,
158
- this.k,
154
+ _setOverlayPosition() {
155
+ I(
156
+ this._overlay,
157
+ this._originElement,
158
+ this._optionContainer,
159
159
  this.shadowRoot.querySelector(".sbb-select__container"),
160
160
  this
161
161
  );
162
162
  }
163
163
  // In rare cases it can be that the animationEnd event is triggered twice.
164
164
  // To avoid entering a corrupt state, exit when state is not expected.
165
- H(e) {
166
- e.animationName === "open" && this.state === "opening" ? this.I() : e.animationName === "close" && this.state === "closing" && this.J();
165
+ _onAnimationEnd(e) {
166
+ e.animationName === "open" && this.state === "opening" ? this._onOpenAnimationEnd() : e.animationName === "close" && this.state === "closing" && this._onCloseAnimationEnd();
167
167
  }
168
- I() {
169
- this.state = "opened", this.K(), this.b.setAttribute("aria-expanded", "true"), this.didOpen.emit();
168
+ _onOpenAnimationEnd() {
169
+ this.state = "opened", this._attachOpenPanelEvents(), this._triggerElement.setAttribute("aria-expanded", "true"), this.didOpen.emit();
170
170
  }
171
- J() {
172
- this.state = "closed", this.b.setAttribute("aria-expanded", "false"), this.L(), this.k.scrollTop = 0, this.didClose.emit();
171
+ _onCloseAnimationEnd() {
172
+ this.state = "closed", this._triggerElement.setAttribute("aria-expanded", "false"), this._resetActiveElement(), this._optionContainer.scrollTop = 0, this.didClose.emit();
173
173
  }
174
174
  /** When an option is selected, updates the displayValue; it also closes the select if not `multiple`. */
175
- E(e) {
176
- this.multiple ? this.value ? this.value.includes(e.value) || (this.value = [...this.value, e.value]) : this.value = [e.value] : (this.a.filter((t) => t.id !== e.id).forEach((t) => t.selected = !1), this.value = e.value), this.q.emit(), this.p.emit(), this.o.emit();
175
+ _onOptionSelected(e) {
176
+ this.multiple ? this.value ? this.value.includes(e.value) || (this.value = [...this.value, e.value]) : this.value = [e.value] : (this._filteredOptions.filter((t) => t.id !== e.id).forEach((t) => t.selected = !1), this.value = e.value), this._input.emit(), this._change.emit(), this._didChange.emit();
177
177
  }
178
178
  /** When an option is unselected in `multiple`, removes it from value and updates displayValue. */
179
- F(e) {
179
+ _onOptionDeselected(e) {
180
180
  this.multiple && (this.value = this.value.filter(
181
181
  (t) => t !== e.value
182
- ), this.q.emit(), this.p.emit(), this.o.emit());
182
+ ), this._input.emit(), this._change.emit(), this._didChange.emit());
183
183
  }
184
- K() {
185
- this.f = new AbortController(), document.addEventListener("scroll", () => this.n(), {
184
+ _attachOpenPanelEvents() {
185
+ this._openPanelEventsController = new AbortController(), document.addEventListener("scroll", () => this._setOverlayPosition(), {
186
186
  passive: !0,
187
- signal: this.f.signal
188
- }), window.addEventListener("resize", () => this.n(), {
187
+ signal: this._openPanelEventsController.signal
188
+ }), window.addEventListener("resize", () => this._setOverlayPosition(), {
189
189
  passive: !0,
190
- signal: this.f.signal
191
- }), window.addEventListener("pointerdown", (e) => this.M(e), {
192
- signal: this.f.signal
193
- }), window.addEventListener("pointerup", (e) => this.N(e), {
194
- signal: this.f.signal
190
+ signal: this._openPanelEventsController.signal
191
+ }), window.addEventListener("pointerdown", (e) => this._pointerDownListener(e), {
192
+ signal: this._openPanelEventsController.signal
193
+ }), window.addEventListener("pointerup", (e) => this._closeOnBackdropClick(e), {
194
+ signal: this._openPanelEventsController.signal
195
195
  });
196
196
  }
197
- async O(e) {
198
- this.disabled || this.readonly || (this.state === "opened" && await this.P(e), this.state === "closed" && await this.Q(e));
197
+ async _onKeyDown(e) {
198
+ this.disabled || this.readonly || (this.state === "opened" && await this._openedPanelKeyboardInteraction(e), this.state === "closed" && await this._closedPanelKeyboardInteraction(e));
199
199
  }
200
- async Q(e) {
201
- if (this.z(e))
202
- return this.A(e);
200
+ async _closedPanelKeyboardInteraction(e) {
201
+ if (this._checkForLetterSelection(e))
202
+ return this._setNextActiveOptionByText(e);
203
203
  switch (e.key) {
204
204
  case "Enter":
205
205
  case " ":
@@ -209,10 +209,10 @@ let z = 0, o = class extends $(
209
209
  break;
210
210
  }
211
211
  }
212
- async P(e) {
212
+ async _openedPanelKeyboardInteraction(e) {
213
213
  if (!(this.disabled || this.readonly || this.state !== "opened")) {
214
- if (this.z(e))
215
- return this.A(e);
214
+ if (this._checkForLetterSelection(e))
215
+ return this._setNextActiveOptionByText(e);
216
216
  switch (e.key) {
217
217
  case "Escape":
218
218
  case "Tab":
@@ -220,88 +220,88 @@ let z = 0, o = class extends $(
220
220
  break;
221
221
  case "Enter":
222
222
  case " ":
223
- e.preventDefault(), await this.R();
223
+ e.preventDefault(), await this._selectByKeyboard();
224
224
  break;
225
225
  case "ArrowDown":
226
226
  case "ArrowUp":
227
- e.preventDefault(), await this.h(e);
227
+ e.preventDefault(), await this._setNextActiveOption(e);
228
228
  break;
229
229
  case "Home":
230
230
  case "PageUp":
231
- e.preventDefault(), await this.h(e, 0);
231
+ e.preventDefault(), await this._setNextActiveOption(e, 0);
232
232
  break;
233
233
  case "End":
234
234
  case "PageDown":
235
- e.preventDefault(), await this.h(e, this.a.length - 1);
235
+ e.preventDefault(), await this._setNextActiveOption(e, this._filteredOptions.length - 1);
236
236
  break;
237
237
  }
238
238
  }
239
239
  }
240
- z(e) {
240
+ _checkForLetterSelection(e) {
241
241
  return e.key === "Backspace" || e.key === "Clear" || e.key.length === 1 && e.key !== " " && !e.altKey && !e.ctrlKey && !e.metaKey;
242
242
  }
243
- async A(e) {
244
- typeof this.j == typeof setTimeout && clearTimeout(this.j), this.j = setTimeout(() => this.e = "", 1e3), this.e += e.key;
245
- const t = this.d + 1, a = [
246
- ...this.a.slice(t),
247
- ...this.a.slice(0, t)
248
- ], s = a.find(
249
- (i) => {
250
- var r;
251
- return ((r = i.textContent) == null ? void 0 : r.toLowerCase().indexOf(this.e.toLowerCase())) === 0;
243
+ async _setNextActiveOptionByText(e) {
244
+ typeof this._searchTimeout == typeof setTimeout && clearTimeout(this._searchTimeout), this._searchTimeout = setTimeout(() => this._searchString = "", 1e3), this._searchString += e.key;
245
+ const t = this._activeItemIndex + 1, i = [
246
+ ...this._filteredOptions.slice(t),
247
+ ...this._filteredOptions.slice(0, t)
248
+ ], s = i.find(
249
+ (o) => {
250
+ var n;
251
+ return ((n = o.textContent) == null ? void 0 : n.toLowerCase().indexOf(this._searchString.toLowerCase())) === 0;
252
252
  }
253
253
  );
254
254
  if (s)
255
- await this.h(e, this.a.indexOf(s));
256
- else if (this.e.length > 1 && new RegExp(`^${this.e.charAt(0)}*$`).test(this.e)) {
257
- const i = a.find(
258
- (r) => {
259
- var n;
260
- return ((n = r.textContent) == null ? void 0 : n.toLowerCase().indexOf(this.e[0].toLowerCase())) === 0;
255
+ await this._setNextActiveOption(e, this._filteredOptions.indexOf(s));
256
+ else if (this._searchString.length > 1 && new RegExp(`^${this._searchString.charAt(0)}*$`).test(this._searchString)) {
257
+ const o = i.find(
258
+ (n) => {
259
+ var l;
260
+ return ((l = n.textContent) == null ? void 0 : l.toLowerCase().indexOf(this._searchString[0].toLowerCase())) === 0;
261
261
  }
262
262
  );
263
- i && await this.h(e, this.a.indexOf(i));
263
+ o && await this._setNextActiveOption(e, this._filteredOptions.indexOf(o));
264
264
  } else
265
- clearTimeout(this.j), this.e = "";
265
+ clearTimeout(this._searchTimeout), this._searchString = "";
266
266
  }
267
- async R() {
268
- const e = this.a[this.d];
267
+ async _selectByKeyboard() {
268
+ const e = this._filteredOptions[this._activeItemIndex];
269
269
  this.multiple ? await e.setSelectedViaUserInteraction(!e.selected) : await this.close();
270
270
  }
271
- async h(e, t) {
272
- const a = t ?? y(e, this.d, this.a.length), s = this.a[a], i = this.a[this.d];
273
- this.S(s, i), this.multiple ? e != null && e.shiftKey && await s.setSelectedViaUserInteraction(!s.selected) : await this.T(s, i), this.d = a;
271
+ async _setNextActiveOption(e, t) {
272
+ const i = t ?? w(e, this._activeItemIndex, this._filteredOptions.length), s = this._filteredOptions[i], o = this._filteredOptions[this._activeItemIndex];
273
+ this._setActiveElement(s, o), this.multiple ? e != null && e.shiftKey && await s.setSelectedViaUserInteraction(!s.selected) : await this._setSelectedElement(s, o), this._activeItemIndex = i;
274
274
  }
275
- S(e, t = null, a = !0) {
276
- e.active = !0, e.scrollIntoView({ block: "nearest" }), a && this.b.setAttribute("aria-activedescendant", e.id), t && t !== e && (t.active = !1);
275
+ _setActiveElement(e, t = null, i = !0) {
276
+ e.active = !0, e.scrollIntoView({ block: "nearest" }), i && this._triggerElement.setAttribute("aria-activedescendant", e.id), t && t !== e && (t.active = !1);
277
277
  }
278
- async T(e, t) {
278
+ async _setSelectedElement(e, t) {
279
279
  await e.setSelectedViaUserInteraction(!0), t && t !== e && await t.setSelectedViaUserInteraction(!1);
280
280
  }
281
- L() {
282
- const e = this.a[this.d];
283
- e && (e.active = !1), this.d = -1, this.b.removeAttribute("aria-activedescendant");
281
+ _resetActiveElement() {
282
+ const e = this._filteredOptions[this._activeItemIndex];
283
+ e && (e.active = !1), this._activeItemIndex = -1, this._triggerElement.removeAttribute("aria-activedescendant");
284
284
  }
285
- U() {
285
+ _setValueFromSelectedOption() {
286
286
  if (this.multiple) {
287
- const e = this.a.filter((t) => t.selected);
287
+ const e = this._filteredOptions.filter((t) => t.selected);
288
288
  if (e && e.length > 0) {
289
289
  const t = [];
290
- for (const a of e)
291
- t.push(a.value);
290
+ for (const i of e)
291
+ t.push(i.value);
292
292
  this.value = t;
293
293
  }
294
294
  } else {
295
- const e = this.a.find((t) => t.selected);
296
- e && (this.d = this.a.findIndex(
295
+ const e = this._filteredOptions.find((t) => t.selected);
296
+ e && (this._activeItemIndex = this._filteredOptions.findIndex(
297
297
  (t) => t === e
298
298
  ), this.value = e.value);
299
299
  }
300
300
  }
301
- y() {
301
+ _toggleOpening() {
302
302
  var e;
303
303
  if (!(this.disabled || this.readonly))
304
- switch ((e = this.b) == null || e.focus(), this.state) {
304
+ switch ((e = this._triggerElement) == null || e.focus(), this.state) {
305
305
  case "opened": {
306
306
  this.close();
307
307
  break;
@@ -323,37 +323,37 @@ let z = 0, o = class extends $(
323
323
  aria-haspopup="listbox"
324
324
  aria-expanded="false"
325
325
  aria-required=${this.required.toString()}
326
- aria-controls=${this.i}
327
- aria-owns=${this.i}
328
- @keydown=${this.O}
329
- @click=${this.y}
330
- ${v((e) => this.b = e)}
326
+ aria-controls=${this._overlayId}
327
+ aria-owns=${this._overlayId}
328
+ @keydown=${this._onKeyDown}
329
+ @click=${this._toggleOpening}
330
+ ${v((e) => this._triggerElement = e)}
331
331
  >
332
- ${this.c ? b`${this.c}` : b`<span>${this.placeholder}</span>`}
332
+ ${this._displayValue ? b`${this._displayValue}` : b`<span>${this.placeholder}</span>`}
333
333
  </div>
334
334
 
335
335
  <!-- Visually display the value -->
336
336
  <div class="sbb-select__trigger" aria-hidden="true">
337
- ${this.c ? b`${this.c}` : b`<span class="sbb-select__trigger--placeholder">${this.placeholder}</span>`}
337
+ ${this._displayValue ? b`${this._displayValue}` : b`<span class="sbb-select__trigger--placeholder">${this.placeholder}</span>`}
338
338
  </div>
339
339
 
340
340
  <div class="sbb-select__gap-fix"></div>
341
341
  <div class="sbb-select__container">
342
- <div class="sbb-select__gap-fix">${D()}</div>
342
+ <div class="sbb-select__gap-fix">${P()}</div>
343
343
  <div
344
- @animationend=${this.H}
344
+ @animationend=${this._onAnimationEnd}
345
345
  class="sbb-select__panel"
346
- ${v((e) => this.g = e)}
346
+ ${v((e) => this._overlay = e)}
347
347
  >
348
348
  <div class="sbb-select__wrapper">
349
349
  <div
350
- id=${p ? c : this.i}
350
+ id=${h ? c : this._overlayId}
351
351
  class="sbb-select__options"
352
- role=${p ? c : "listbox"}
352
+ role=${h ? c : "listbox"}
353
353
  ?aria-multiselectable=${this.multiple}
354
- ${v((e) => this.k = e)}
354
+ ${v((e) => this._optionContainer = e)}
355
355
  >
356
- <slot @slotchange=${this.U}></slot>
356
+ <slot @slotchange=${this._setValueFromSelectedOption}></slot>
357
357
  </div>
358
358
  </div>
359
359
  </div>
@@ -361,8 +361,8 @@ let z = 0, o = class extends $(
361
361
  `;
362
362
  }
363
363
  };
364
- o.styles = U;
365
- o.events = {
364
+ a.styles = $;
365
+ a.events = {
366
366
  didChange: "didChange",
367
367
  change: "change",
368
368
  input: "input",
@@ -372,31 +372,31 @@ o.events = {
372
372
  willClose: "willClose",
373
373
  didClose: "didClose"
374
374
  };
375
- l([
376
- h()
377
- ], o.prototype, "value", 2);
378
- l([
379
- h()
380
- ], o.prototype, "placeholder", 2);
381
- l([
382
- h({ type: Boolean, reflect: !0 })
383
- ], o.prototype, "multiple", 2);
384
- l([
385
- h({ reflect: !0, type: Boolean })
386
- ], o.prototype, "required", 2);
387
- l([
388
- h({ type: Boolean })
389
- ], o.prototype, "readonly", 2);
390
- l([
375
+ r([
376
+ d()
377
+ ], a.prototype, "value", 2);
378
+ r([
379
+ d()
380
+ ], a.prototype, "placeholder", 2);
381
+ r([
382
+ d({ type: Boolean, reflect: !0 })
383
+ ], a.prototype, "multiple", 2);
384
+ r([
385
+ d({ reflect: !0, type: Boolean })
386
+ ], a.prototype, "required", 2);
387
+ r([
388
+ d({ type: Boolean })
389
+ ], a.prototype, "readonly", 2);
390
+ r([
391
391
  g()
392
- ], o.prototype, "c", 2);
393
- o = l([
392
+ ], a.prototype, "_displayValue", 2);
393
+ a = r([
394
394
  m("sbb-select"),
395
- k({
396
- dir: C(),
397
- role: p ? "listbox" : null
395
+ E({
396
+ dir: O(),
397
+ role: h ? "listbox" : null
398
398
  })
399
- ], o);
399
+ ], a);
400
400
  export {
401
- o as SbbSelectElement
401
+ a as SbbSelectElement
402
402
  };