@sbb-esta/lyne-elements-dev 5.0.0-next.3-dev.1779813787 → 5.0.0-next.3-dev.1779891630

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 (105) hide show
  1. package/{block-link-common-C_rUmc2u.js → block-link-common-BZZ4NhPD.js} +1 -1
  2. package/core.js +24 -25
  3. package/custom-elements.json +1412 -281
  4. package/development/{block-link-common-C0XzZIvS.js → block-link-common-DCKM3jJQ.js} +2 -2
  5. package/development/core.d.ts +0 -1
  6. package/development/core.d.ts.map +1 -1
  7. package/development/core.js +1 -2
  8. package/development/icon/icon-base.js +1 -1
  9. package/development/icon/icon.component.js +1 -1
  10. package/development/icon-base-Cq6DxOUh.js +163 -0
  11. package/development/icon.js +1 -1
  12. package/development/icon.pure.js +1 -1
  13. package/development/link/common/block-link-common.js +1 -1
  14. package/development/link.js +1 -1
  15. package/development/link.pure.js +1 -1
  16. package/development/navigation/common/navigation-action-common.d.ts.map +1 -1
  17. package/development/navigation/navigation/navigation.component.d.ts +0 -1
  18. package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
  19. package/development/navigation/navigation/navigation.component.js +1 -1
  20. package/development/navigation/navigation-section/navigation-section.component.d.ts +0 -1
  21. package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
  22. package/development/navigation/navigation-section/navigation-section.component.js +1 -1
  23. package/development/navigation-action-common-BdJOaItd.js +1 -1
  24. package/development/{navigation-section.component-DhMQspKb.js → navigation-section.component-34GEIPaN.js} +2 -5
  25. package/development/{navigation.component-BOBqdfXo.js → navigation.component-CqQuaq7V.js} +2 -5
  26. package/development/navigation.js +2 -2
  27. package/development/navigation.pure.js +2 -2
  28. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  29. package/development/overlay/overlay-base-element.js +3 -3
  30. package/development/popover/popover/popover.component.d.ts +54 -0
  31. package/development/popover/popover/popover.component.d.ts.map +1 -0
  32. package/development/popover/popover/popover.component.js +2 -0
  33. package/development/popover/{popover.component.d.ts → popover-base/popover-base.d.ts} +2 -59
  34. package/development/popover/popover-base/popover-base.d.ts.map +1 -0
  35. package/development/popover/popover-base/popover-base.js +2 -0
  36. package/development/popover/popover-close-button/popover-close-button.component.d.ts +21 -0
  37. package/development/popover/popover-close-button/popover-close-button.component.d.ts.map +1 -0
  38. package/development/popover/popover-close-button/popover-close-button.component.js +30 -0
  39. package/development/popover-base-BcIAVXWF.js +288 -0
  40. package/development/popover.component-CMR0eV2t.js +233 -0
  41. package/development/popover.js +6 -3
  42. package/development/popover.pure.d.ts +3 -1
  43. package/development/popover.pure.d.ts.map +1 -1
  44. package/development/popover.pure.js +4 -2
  45. package/development/tag/tag/tag.component.d.ts +1 -0
  46. package/development/tag/tag/tag.component.d.ts.map +1 -1
  47. package/development/tag/tag/tag.component.js +1 -1
  48. package/development/tag/tag-group/tag-group.component.d.ts +6 -1
  49. package/development/tag/tag-group/tag-group.component.d.ts.map +1 -1
  50. package/development/tag/tag-group/tag-group.component.js +1 -1
  51. package/development/tag-group.component-DTff1eBB.js +225 -0
  52. package/development/{tag.component-D6YowucW.js → tag.component-CDDb2fnV.js} +28 -8
  53. package/development/tag.js +2 -2
  54. package/development/tag.pure.js +2 -2
  55. package/development/toast/toast.component.d.ts.map +1 -1
  56. package/development/toast/toast.component.js +1 -1
  57. package/development/{toast.component-DowxkGr4.js → toast.component-BgGWVr4o.js} +3 -4
  58. package/development/toast.js +1 -1
  59. package/development/toast.pure.js +1 -1
  60. package/icon/icon-base.js +1 -1
  61. package/icon/icon.component.js +1 -1
  62. package/{icon-base-CK1oqnO4.js → icon-base-TSCmR5QC.js} +1 -1
  63. package/icon.js +1 -1
  64. package/icon.pure.js +1 -1
  65. package/index.d.ts +2 -1
  66. package/index.js +2 -1
  67. package/link/common/block-link-common.js +1 -1
  68. package/link.js +1 -1
  69. package/link.pure.js +1 -1
  70. package/navigation/navigation/navigation.component.js +1 -1
  71. package/navigation/navigation-section/navigation-section.component.js +1 -1
  72. package/{navigation-section.component-c4XBLFsl.js → navigation-section.component-DPgBlCf8.js} +1 -4
  73. package/{navigation.component-pRBja4z3.js → navigation.component-CY_9Q6dT.js} +1 -4
  74. package/navigation.js +2 -2
  75. package/navigation.pure.js +2 -2
  76. package/overlay/overlay-base-element.js +2 -2
  77. package/package.json +2 -2
  78. package/popover/popover/popover.component.js +2 -0
  79. package/popover/popover-base/popover-base.js +2 -0
  80. package/popover/popover-close-button/popover-close-button.component.js +20 -0
  81. package/popover-base-DlSa-ajc.js +181 -0
  82. package/popover.component-BHg4Qtqd.js +158 -0
  83. package/popover.js +5 -4
  84. package/popover.pure.js +4 -2
  85. package/tag/tag/tag.component.js +1 -1
  86. package/tag/tag-group/tag-group.component.js +1 -1
  87. package/{tag-group.component-ByRxy8UG.js → tag-group.component-CJwbkP70.js} +38 -23
  88. package/{tag.component-BrKoQeIW.js → tag.component-r8diGGP-.js} +14 -5
  89. package/tag.js +2 -2
  90. package/tag.pure.js +2 -2
  91. package/toast/toast.component.js +1 -1
  92. package/{toast.component-Lbh5sa_U.js → toast.component-Dlr0Koxu.js} +22 -23
  93. package/toast.js +1 -1
  94. package/toast.pure.js +1 -1
  95. package/core/eventing/composed-path-has-attribute.js +0 -7
  96. package/development/core/eventing/composed-path-has-attribute.d.ts +0 -10
  97. package/development/core/eventing/composed-path-has-attribute.d.ts.map +0 -1
  98. package/development/core/eventing/composed-path-has-attribute.js +0 -19
  99. package/development/icon-base-Cz7F4MJ9.js +0 -163
  100. package/development/popover/popover.component.d.ts.map +0 -1
  101. package/development/popover/popover.component.js +0 -2
  102. package/development/popover.component-DtIhw37L.js +0 -578
  103. package/development/tag-group.component-jSgluqL-.js +0 -194
  104. package/popover/popover.component.js +0 -2
  105. package/popover.component-DrLx8J07.js +0 -385
@@ -0,0 +1,181 @@
1
+ import { __esDecorate as e, __runInitializers as t } from "tslib";
2
+ import { html as n, isServer as r, unsafeCSS as i } from "lit";
3
+ import { property as a } from "lit/decorators.js";
4
+ import { IS_FOCUSABLE_QUERY as o, SbbEscapableOverlayController as s, SbbFocusTrapController as c, SbbOpenCloseBaseElement as l, getElementPosition as u, idReference as d, isEventOnElement as f, isZeroAnimationDuration as p, popoverResetStyles as m, removeAriaOverlayTriggerProperties as h, setAriaOverlayTriggerProperties as g } from "./core.js";
5
+ import { ResizeController as _ } from "@lit-labs/observers/resize-controller.js";
6
+ import { ref as v } from "lit/directives/ref.js";
7
+ //#region src/elements/popover/popover-base/popover-base.scss?inline
8
+ var y = ":host{--sbb-focus-outline-color: var(--sbb-focus-outline-color-default);--sbb-focus-outline-color: light-dark( var(--sbb-focus-outline-color-default), var(--sbb-focus-outline-color-dark) );--sbb-popover-animation-duration: var( --sbb-disable-animation-duration, var(--sbb-animation-duration-4x) );--_sbb-popover-inset: 0 auto auto 0;--_sbb-popover-translate: 0 var(--sbb-spacing-fixed-2x);--_sbb-popover-box-shadow: var(--sbb-box-shadow-level-9-hard);outline:none!important;display:none}:host(:is(:is(:state(state-opening),[state--state-opening]),:is(:state(state-opened),[state--state-opened]),:is(:state(state-closing),[state--state-closing]))){--_sbb-popover-inset: 0;display:block}:host(:is(:state(position-above),[state--position-above])){--_sbb-popover-translate: 0 calc(var(--sbb-spacing-fixed-2x) * -1)}.sbb-popover:after,.sbb-popover__content:before{content:\"\";position:absolute;display:block;width:var(--sbb-popover-arrow-size);height:var(--sbb-popover-arrow-size);left:var(--_sbb-popover-arrow-position-x, 0);bottom:calc(100% - var(--sbb-popover-arrow-size) / 2);background-color:var(--sbb-popover-background);border-radius:var(--sbb-border-radius-2x) 0;rotate:45deg}.sbb-popover__container{position:fixed;inset:var(--_sbb-popover-inset);pointer-events:none;z-index:var(--sbb-popover-z-index, var(--sbb-overlay-default-z-index))}.sbb-popover{display:none;position:var(--sbb-popover-position, absolute);top:var(--_sbb-popover-position-y, 0);bottom:unset;left:var(--_sbb-popover-position-x, 0);right:unset;background-color:var(--sbb-popover-background);max-width:var(--sbb-popover-max-width);width:max-content;padding:0;box-shadow:var(--_sbb-popover-box-shadow);border:none;border-radius:var(--sbb-popover-border-radius);outline:none;pointer-events:all}:host(:focus-visible) .sbb-popover{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width)}:host(:is(:is(:state(state-opening),[state--state-opening]),:is(:state(state-opened),[state--state-opened]),:is(:state(state-closing),[state--state-closing]))) .sbb-popover{display:block;animation-name:open;animation-duration:var(--sbb-popover-animation-duration);animation-timing-function:var(--sbb-popover-animation-easing)}:host(:is(:state(state-closing),[state--state-closing])) .sbb-popover{pointer-events:none;animation-name:close;animation-duration:var(--sbb-popover-animation-duration);animation-timing-function:var(--sbb-popover-animation-easing)}.sbb-popover:after{z-index:-1;box-shadow:var(--_sbb-popover-box-shadow)}@media(forced-colors:active){.sbb-popover:after{outline:var(--sbb-border-width-1x) solid CanvasText}}:host(:is(:state(position-above),[state--position-above])) .sbb-popover:after{top:calc(100% - var(--sbb-popover-arrow-size) / 2)}@media(forced-colors:active){.sbb-popover{outline:var(--sbb-border-width-1x) solid CanvasText}}.sbb-popover:before{content:\"\";display:block;position:absolute;inset:0;z-index:-1;background-color:transparent}:host(:is(:state(position-below),[state--position-below])) .sbb-popover:before{inset-block-start:calc(-1 * var(--sbb-spacing-fixed-6x))}:host(:is(:state(position-above),[state--position-above])) .sbb-popover:before{inset-block-end:calc(-1 * var(--sbb-spacing-fixed-6x))}.sbb-popover__content{border-radius:var(--sbb-popover-border-radius);padding:var(--sbb-popover-padding);outline:none;background-color:var(--sbb-popover-background)}.sbb-popover__content:before{clip-path:polygon(100% 0,0% 0%,0% 100%)}:host(:is(:state(position-above),[state--position-above])) .sbb-popover__content:before{top:calc(100% - var(--sbb-popover-arrow-size) / 2);clip-path:polygon(100% 0,100% 100%,0% 100%)}@keyframes open{0%{opacity:0;translate:var(--_sbb-popover-translate)}to{opacity:1;translate:0}}@keyframes close{0%{opacity:1;translate:0}to{opacity:0;translate:var(--_sbb-popover-translate)}}", b = 16, x = 32, S = /* @__PURE__ */ new Set(), C = class extends Event {
9
+ get closeTarget() {
10
+ return this._closeTarget;
11
+ }
12
+ constructor(e, { closeTarget: t, cancelable: n }) {
13
+ super(e, { cancelable: n }), this._closeTarget = t;
14
+ }
15
+ }, w = (() => {
16
+ let w = l, T, E = [], D = [];
17
+ return class extends w {
18
+ constructor() {
19
+ super(...arguments), this.#e = t(this, E, null), this._nextFocusedElement = t(this, D), this._skipCloseFocus = !1, this._resizeController = new _(this, {
20
+ target: null,
21
+ callback: () => this._setPopoverPosition()
22
+ }), this._escapableOverlayController = new s(this), this._focusTrapController = new c(this), this._blurTimeout = null, this._pointerDownListener = (e) => {
23
+ this._isPointerDownEventOnPopover = f(this.overlay, e);
24
+ }, this._closeOnBackdropClick = (e) => {
25
+ let t = e.composedPath();
26
+ !this._isPointerDownEventOnPopover && !f(this.overlay, e) && (!this.trigger || !t.includes(this.trigger)) && (this._nextFocusedElement = t.filter((e) => e instanceof window.HTMLElement).find((e) => e.matches(o)), clearTimeout(this.closeTimeout), this.close());
27
+ };
28
+ }
29
+ static {
30
+ let t = typeof Symbol == "function" && Symbol.metadata ? Object.create(w[Symbol.metadata] ?? null) : void 0;
31
+ T = [d(), a()], e(this, null, T, {
32
+ kind: "accessor",
33
+ name: "trigger",
34
+ static: !1,
35
+ private: !1,
36
+ access: {
37
+ has: (e) => "trigger" in e,
38
+ get: (e) => e.trigger,
39
+ set: (e, t) => {
40
+ e.trigger = t;
41
+ }
42
+ },
43
+ metadata: t
44
+ }, E, D), t && Object.defineProperty(this, Symbol.metadata, {
45
+ enumerable: !0,
46
+ configurable: !0,
47
+ writable: !0,
48
+ value: t
49
+ });
50
+ }
51
+ static {
52
+ this.styles = [m, i(y)];
53
+ }
54
+ #e;
55
+ get trigger() {
56
+ return this.#e;
57
+ }
58
+ set trigger(e) {
59
+ this.#e = e;
60
+ }
61
+ open() {
62
+ if (!(this.state !== "closed" && this.state !== "closing" || !this.overlay || !this.dispatchBeforeOpenEvent())) {
63
+ for (let e of S) (e.state === "opened" || e.state === "opening") && e.close();
64
+ this.showPopover?.(), this.state = "opening", this.inert = !0, this._setPopoverPosition(), this._attachWindowEvents(), this._escapableOverlayController.connect(), this._nextFocusedElement = void 0, this._skipCloseFocus = !1, this._triggerElement && (this._triggerElement.ariaExpanded = "true"), this._isZeroAnimationDuration() && this._handleOpening();
65
+ }
66
+ }
67
+ close(e) {
68
+ this.state !== "opened" && this.state !== "opening" || (this._popoverCloseElement = e, this.dispatchBeforeCloseEvent({ closeTarget: e ?? null }) && (this.state = "closing", this.inert = !0, this._triggerElement && (this._triggerElement.ariaExpanded = "false"), this._isZeroAnimationDuration() && this._handleClosing()));
69
+ }
70
+ _isZeroAnimationDuration() {
71
+ return p(this, "--sbb-popover-animation-duration");
72
+ }
73
+ _handleClosing() {
74
+ this.state = "closed", this.hidePopover?.(), this.overlay && (this._resizeController.unobserve(this.overlay), this.overlay.firstElementChild?.scrollTo(0, 0)), this.removeAttribute("tabindex"), this._skipCloseFocus || (this._nextFocusedElement || this._triggerElement)?.focus(), this._escapableOverlayController.disconnect(), this._openStateController?.abort(), this._focusTrapController.enabled = !1, this.dispatchCloseEvent({ closeTarget: this._popoverCloseElement ?? null });
75
+ }
76
+ _handleOpening() {
77
+ this.state = "opened", this.inert = !1, this._setPopoverFocus(), this._focusTrapController.enabled = !0, this.overlay && this._resizeController.observe(this.overlay), this.dispatchOpenEvent();
78
+ }
79
+ connectedCallback() {
80
+ this.popover = "manual", super.connectedCallback(), this.state = "closed", S.add(this), this.hasUpdated && this._configureTrigger();
81
+ }
82
+ requestUpdate(e, t, n) {
83
+ super.requestUpdate(e, t, n), !r && (!e || e === "trigger" || e === "hoverTrigger") && this.hasUpdated && this._configureTrigger();
84
+ }
85
+ firstUpdated(e) {
86
+ super.firstUpdated(e), this._configureTrigger();
87
+ }
88
+ disconnectedCallback() {
89
+ super.disconnectedCallback(), this._triggerElement = null, this._triggerAbortController?.abort(), this._openStateController?.abort(), S.delete(this), this._blurTimeout && clearTimeout(this._blurTimeout);
90
+ }
91
+ _configureTrigger() {
92
+ if (!r) {
93
+ if (this.hydrationRequired) {
94
+ this.hydrationComplete.then(() => this._configureTrigger());
95
+ return;
96
+ }
97
+ this.configureTrigger(this._triggerElement ?? null);
98
+ }
99
+ }
100
+ configureTrigger(e) {
101
+ this._triggerAbortController?.abort(), h(this._triggerElement), this._triggerElement = this.trigger, this._triggerElement && (g(this, this._triggerElement, "dialog", this.state), this._triggerAbortController = new AbortController(), this.registerTriggerListeners(this._triggerAbortController.signal));
102
+ }
103
+ registerTriggerListeners(e) {
104
+ this._triggerElement.addEventListener("click", () => this.open(), { signal: e });
105
+ }
106
+ _attachWindowEvents() {
107
+ this._openStateController = new AbortController(), document.addEventListener("scroll", () => this._setPopoverPosition(), {
108
+ passive: !0,
109
+ signal: this._openStateController.signal,
110
+ capture: !0
111
+ }), window.addEventListener("resize", () => this._setPopoverPosition(), {
112
+ passive: !0,
113
+ signal: this._openStateController.signal
114
+ }), window.addEventListener("pointerdown", this._pointerDownListener, { signal: this._openStateController.signal }), window.addEventListener("pointerup", this._closeOnBackdropClick, { signal: this._openStateController.signal });
115
+ }
116
+ _closeOnSbbPopoverCloseClick(e) {
117
+ let t = e.composedPath().find((e, t, n) => e instanceof HTMLElement && t < n.indexOf(this) && (e.hasAttribute("sbb-popover-close") || e.localName === "sbb-popover-close-button") && !e.hasAttribute("disabled"));
118
+ t && (clearTimeout(this.closeTimeout), this.close(t));
119
+ }
120
+ _onPopoverAnimationEnd(e) {
121
+ e.animationName === "open" && this.state === "opening" ? this._handleOpening() : e.animationName === "close" && this.state === "closing" && this._handleClosing();
122
+ }
123
+ _setPopoverFocus() {
124
+ !this._focusTrapController.focusInitialElement() && this._openStateController && (this.setAttribute("tabindex", "0"), this.focus(), this.addEventListener("blur", (e) => {
125
+ this._blurTimeout = setTimeout(() => {
126
+ if (document.visibilityState !== "hidden") {
127
+ if (this.removeAttribute("tabindex"), this.contains(e.relatedTarget) || e.relatedTarget === this.trigger) return;
128
+ (this.state === "opened" || this.state === "opening") && (this._skipCloseFocus = !0), this.close();
129
+ }
130
+ });
131
+ }, { signal: this._openStateController.signal }));
132
+ }
133
+ _setPopoverPosition() {
134
+ if (!this.overlay || !this._triggerElement) return;
135
+ let e = u(this.overlay, this._triggerElement, this.shadowRoot.querySelector(".sbb-popover__container"), {
136
+ verticalOffset: b,
137
+ horizontalOffset: x,
138
+ centered: !0,
139
+ responsiveHeight: !0
140
+ }), t = e.alignment.vertical;
141
+ for (let e of ["above", "below"]) this.toggleState(`position-${e}`, e === t);
142
+ let n = this._triggerElement.getBoundingClientRect().left - e.left + this._triggerElement.clientWidth / 2 - 8;
143
+ this.style.setProperty("--_sbb-popover-position-x", `${e.left}px`), this.style.setProperty("--_sbb-popover-position-y", `${e.top}px`), this.style.setProperty("--_sbb-popover-arrow-position-x", `${n}px`), this.style.setProperty("--_sbb-popover-max-height", e.maxHeight);
144
+ }
145
+ dispatchBeforeCloseEvent(e) {
146
+ let t = e?.closeTarget ?? null;
147
+ return this.dispatchEvent(new C("beforeclose", {
148
+ closeTarget: t,
149
+ cancelable: !0
150
+ }));
151
+ }
152
+ dispatchCloseEvent(e) {
153
+ let t = e?.closeTarget ?? null;
154
+ return this.dispatchEvent(new C("close", {
155
+ closeTarget: t,
156
+ cancelable: !1
157
+ }));
158
+ }
159
+ render() {
160
+ return n`
161
+ <div class="sbb-popover__container">
162
+ <div
163
+ @animationend=${this._onPopoverAnimationEnd}
164
+ class="sbb-popover"
165
+ role="tooltip"
166
+ ${v((e) => this.overlay = e)}
167
+ >
168
+ <div
169
+ @click=${(e) => this._closeOnSbbPopoverCloseClick(e)}
170
+ class="sbb-popover__content"
171
+ >
172
+ ${this.renderContent()}
173
+ </div>
174
+ </div>
175
+ </div>
176
+ `;
177
+ }
178
+ };
179
+ })();
180
+ //#endregion
181
+ export { C as n, w as t };
@@ -0,0 +1,158 @@
1
+ import { __esDecorate as e, __runInitializers as t } from "tslib";
2
+ import { html as n, isServer as r, unsafeCSS as i } from "lit";
3
+ import { property as a, state as o } from "lit/decorators.js";
4
+ import { SbbMediaQueryPointerCoarse as s, forceType as c, isFakeMousedownFromScreenReader as l, readConfig as u, sbbInputModalityDetector as d, scrollbarStyles as f, ɵstateController as p } from "./core.js";
5
+ import { SbbPopoverBaseElement as m } from "./popover/popover-base/popover-base.js";
6
+ //#region src/elements/popover/popover/popover.scss?inline
7
+ var h = ":host{--_sbb-popover-half-padding: calc(.5 * var(--sbb-popover-padding));position:relative}:host(:is(:state(has-close-button),[state--has-close-button])){--_sbb-popover-close-button-min-height: calc( var(--sbb-button-min-height-size-s) + 2 * var(--sbb-popover-padding) );--_sbb-popover-close-button-min-width: calc( var(--_sbb-popover-close-button-min-height) - var(--_sbb-popover-half-padding) )}.sbb-popover__content{padding-block:var(--_sbb-popover-half-padding);padding-inline:var(--_sbb-popover-half-padding) var(--_sbb-popover-close-button-min-width, var(--_sbb-popover-half-padding));min-height:var(--_sbb-popover-close-button-min-height)}.sbb-popover__scrollable-content{display:block;padding-inline:var(--_sbb-popover-half-padding);padding-block:var(--_sbb-popover-half-padding);max-height:calc(var(--_sbb-popover-max-height) - var(--sbb-spacing-fixed-1x));overflow:auto}::slotted(sbb-popover-close-button){position:absolute;inset:var(--sbb-popover-padding) var(--sbb-popover-padding) auto auto}", g = r ? !1 : matchMedia(s).matches, _ = (() => {
8
+ let r = m, s = [], _, v = [], y = [], b, x, S, C = [], w = [];
9
+ return class extends r {
10
+ constructor() {
11
+ super(...arguments), this.#e = (t(this, s), t(this, v, !1)), this._openDelay = t(this, y), this.#t = t(this, C, !1), this._openTimeout = t(this, w), this._overlayAbortController = null, this._onTriggerMouseEnter = () => {
12
+ this.state === "closed" || this.state === "closing" ? this._openTimeout = setTimeout(() => {
13
+ d.reset(), this.open();
14
+ }, this.openDelay) : clearTimeout(this.closeTimeout);
15
+ }, this._onTriggerMouseLeave = () => {
16
+ this.state === "opened" || this.state === "opening" ? this.closeTimeout = setTimeout(() => this.close(), this.closeDelay) : clearTimeout(this._openTimeout);
17
+ }, this._onOverlayMouseEnter = () => {
18
+ this.state !== "opening" && clearTimeout(this.closeTimeout);
19
+ }, this._onOverlayMouseLeave = () => {
20
+ this.state !== "opening" && (this.closeTimeout = setTimeout(() => this.close(), this.closeDelay));
21
+ };
22
+ }
23
+ static {
24
+ let t = typeof Symbol == "function" && Symbol.metadata ? Object.create(r[Symbol.metadata] ?? null) : void 0;
25
+ _ = [c(), a({
26
+ attribute: "hover-trigger",
27
+ type: Boolean
28
+ })], b = [a({
29
+ attribute: "open-delay",
30
+ type: Number
31
+ })], x = [a({
32
+ attribute: "close-delay",
33
+ type: Number
34
+ })], S = [o()], e(this, null, _, {
35
+ kind: "accessor",
36
+ name: "hoverTrigger",
37
+ static: !1,
38
+ private: !1,
39
+ access: {
40
+ has: (e) => "hoverTrigger" in e,
41
+ get: (e) => e.hoverTrigger,
42
+ set: (e, t) => {
43
+ e.hoverTrigger = t;
44
+ }
45
+ },
46
+ metadata: t
47
+ }, v, y), e(this, null, b, {
48
+ kind: "setter",
49
+ name: "openDelay",
50
+ static: !1,
51
+ private: !1,
52
+ access: {
53
+ has: (e) => "openDelay" in e,
54
+ set: (e, t) => {
55
+ e.openDelay = t;
56
+ }
57
+ },
58
+ metadata: t
59
+ }, null, s), e(this, null, x, {
60
+ kind: "setter",
61
+ name: "closeDelay",
62
+ static: !1,
63
+ private: !1,
64
+ access: {
65
+ has: (e) => "closeDelay" in e,
66
+ set: (e, t) => {
67
+ e.closeDelay = t;
68
+ }
69
+ },
70
+ metadata: t
71
+ }, null, s), e(this, null, S, {
72
+ kind: "accessor",
73
+ name: "_hoverTrigger",
74
+ static: !1,
75
+ private: !1,
76
+ access: {
77
+ has: (e) => "_hoverTrigger" in e,
78
+ get: (e) => e._hoverTrigger,
79
+ set: (e, t) => {
80
+ e._hoverTrigger = t;
81
+ }
82
+ },
83
+ metadata: t
84
+ }, C, w), t && Object.defineProperty(this, Symbol.metadata, {
85
+ enumerable: !0,
86
+ configurable: !0,
87
+ writable: !0,
88
+ value: t
89
+ });
90
+ }
91
+ static {
92
+ this.elementName = "sbb-popover";
93
+ }
94
+ static {
95
+ this.styles = [f, i(h)];
96
+ }
97
+ #e;
98
+ get hoverTrigger() {
99
+ return this.#e;
100
+ }
101
+ set hoverTrigger(e) {
102
+ this.#e = e;
103
+ }
104
+ set openDelay(e) {
105
+ this._openDelay = +e;
106
+ }
107
+ get openDelay() {
108
+ return this._openDelay ?? u().popover?.openDelay ?? 0;
109
+ }
110
+ set closeDelay(e) {
111
+ this._closeDelay = +e;
112
+ }
113
+ get closeDelay() {
114
+ return this._closeDelay ?? u().popover?.closeDelay ?? 0;
115
+ }
116
+ #t;
117
+ get _hoverTrigger() {
118
+ return this.#t;
119
+ }
120
+ set _hoverTrigger(e) {
121
+ this.#t = e;
122
+ }
123
+ configureTrigger(e) {
124
+ let t = this.hoverTrigger && !g;
125
+ this.trigger === e && t === this._hoverTrigger || (this._hoverTrigger !== t && (this._hoverTrigger = t, this.toggleState("hover-trigger", this._hoverTrigger), this._registerOverlayListeners()), super.configureTrigger(e));
126
+ }
127
+ _registerOverlayListeners() {
128
+ this._overlayAbortController?.abort(), this._hoverTrigger && (this._overlayAbortController = new AbortController(), this.overlay?.addEventListener("mouseenter", () => this._onOverlayMouseEnter(), { signal: this._overlayAbortController.signal }), this.overlay?.addEventListener("mouseleave", () => this._onOverlayMouseLeave(), { signal: this._overlayAbortController.signal }));
129
+ }
130
+ registerTriggerListeners(e) {
131
+ this._hoverTrigger && this.trigger ? (this.trigger.addEventListener("mouseenter", this._onTriggerMouseEnter, { signal: e }), this.trigger.addEventListener("mouseleave", this._onTriggerMouseLeave, { signal: e }), this.trigger.addEventListener("keydown", (e) => {
132
+ (e.code === "Space" || e.code === "Enter") && this.open();
133
+ }, { signal: e }), this.trigger.addEventListener("mousedown", (e) => {
134
+ l(e) && this.open();
135
+ }, { signal: e })) : super.registerTriggerListeners(e);
136
+ }
137
+ firstUpdated(e) {
138
+ super.firstUpdated(e), this._registerOverlayListeners();
139
+ }
140
+ open() {
141
+ super.open(), this.hoverTrigger && this.trigger && p(this.trigger).add("force-hover");
142
+ }
143
+ close() {
144
+ super.close(), p(this.trigger)?.delete("force-hover");
145
+ }
146
+ renderContent() {
147
+ return n`
148
+ <span class="sbb-popover__scrollable-content sbb-scrollbar">
149
+ <slot
150
+ @slotchange=${() => this.toggleState("has-close-button", !!this.querySelector("sbb-popover-close-button"))}
151
+ ></slot>
152
+ </span>
153
+ `;
154
+ }
155
+ };
156
+ })();
157
+ //#endregion
158
+ export { _ as t };
package/popover.js CHANGED
@@ -1,6 +1,7 @@
1
- import { n as e, r as t, t as n } from "./popover.component-DrLx8J07.js";
1
+ import { n as e, t } from "./popover-base-DlSa-ajc.js";
2
+ import { t as n } from "./popover.component-BHg4Qtqd.js";
3
+ import { SbbPopoverCloseButtonElement as r } from "./popover/popover-close-button/popover-close-button.component.js";
2
4
  import "./popover.pure.js";
3
- //#region src/elements/popover.ts
4
- t.define();
5
+ n.define(), r.define();
5
6
  //#endregion
6
- export { n as SbbPopoverBaseElement, e as SbbPopoverCloseEvent, t as SbbPopoverElement };
7
+ export { t as SbbPopoverBaseElement, r as SbbPopoverCloseButtonElement, e as SbbPopoverCloseEvent, n as SbbPopoverElement };
package/popover.pure.js CHANGED
@@ -1,2 +1,4 @@
1
- import { n as e, r as t, t as n } from "./popover.component-DrLx8J07.js";
2
- export { n as SbbPopoverBaseElement, e as SbbPopoverCloseEvent, t as SbbPopoverElement };
1
+ import { n as e, t } from "./popover-base-DlSa-ajc.js";
2
+ import { t as n } from "./popover.component-BHg4Qtqd.js";
3
+ import { SbbPopoverCloseButtonElement as r } from "./popover/popover-close-button/popover-close-button.component.js";
4
+ export { t as SbbPopoverBaseElement, r as SbbPopoverCloseButtonElement, e as SbbPopoverCloseEvent, n as SbbPopoverElement };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../tag.component-BrKoQeIW.js";
1
+ import { t as e } from "../../tag.component-r8diGGP-.js";
2
2
  export { e as SbbTagElement };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../tag-group.component-ByRxy8UG.js";
1
+ import { t as e } from "../../tag-group.component-CJwbkP70.js";
2
2
  export { e as SbbTagGroupElement };
@@ -1,30 +1,27 @@
1
1
  import { __esDecorate as e, __runInitializers as t } from "tslib";
2
2
  import { html as n, isServer as r, unsafeCSS as i } from "lit";
3
3
  import { property as a } from "lit/decorators.js";
4
- import { SbbDisabledMixin as o, SbbElement as s, SbbNamedSlotListMixin as c, forceType as l } from "./core.js";
4
+ import { SbbDisabledMixin as o, SbbElement as s, SbbNamedSlotListMixin as c, forceType as l, getNextElementIndex as u, isArrowKeyPressed as d } from "./core.js";
5
5
  //#region src/elements/tag/tag-group/tag-group.scss?inline
6
- var u = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;gap:var(--sbb-spacing-fixed-3x)}.sbb-tag-group__list>:is(li,span){display:flex;max-width:100%}", d = (() => {
7
- let d = o(c(s)), f = [], p, m = [], h = [], g, _ = [], v = [], y, b = [], x = [], S;
8
- return class extends d {
9
- constructor() {
10
- super(...arguments), this.listChildLocalNames = (t(this, f), ["sbb-tag", "div"]), this.#e = t(this, m, ""), this.#t = (t(this, h), t(this, _, !1)), this.#n = (t(this, v), t(this, b, null)), this._value = (t(this, x), null);
11
- }
6
+ var f = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;gap:var(--sbb-spacing-fixed-3x)}.sbb-tag-group__list>:is(li,span){display:flex;max-width:100%}", p = (() => {
7
+ let p = o(c(s)), m = [], h, g = [], _ = [], v, y = [], b = [], x, S = [], C = [], w;
8
+ return class extends p {
12
9
  static {
13
- let t = typeof Symbol == "function" && Symbol.metadata ? Object.create(d[Symbol.metadata] ?? null) : void 0;
14
- p = [l(), a({ attribute: "list-accessibility-label" })], g = [l(), a({ type: Boolean })], y = [a({ reflect: !0 })], S = [a()], e(this, null, p, {
10
+ let t = typeof Symbol == "function" && Symbol.metadata ? Object.create(p[Symbol.metadata] ?? null) : void 0;
11
+ h = [l(), a({ attribute: "accessibility-label" })], v = [l(), a({ type: Boolean })], x = [a({ reflect: !0 })], w = [a()], e(this, null, h, {
15
12
  kind: "accessor",
16
- name: "listAccessibilityLabel",
13
+ name: "accessibilityLabel",
17
14
  static: !1,
18
15
  private: !1,
19
16
  access: {
20
- has: (e) => "listAccessibilityLabel" in e,
21
- get: (e) => e.listAccessibilityLabel,
17
+ has: (e) => "accessibilityLabel" in e,
18
+ get: (e) => e.accessibilityLabel,
22
19
  set: (e, t) => {
23
- e.listAccessibilityLabel = t;
20
+ e.accessibilityLabel = t;
24
21
  }
25
22
  },
26
23
  metadata: t
27
- }, m, h), e(this, null, g, {
24
+ }, g, _), e(this, null, v, {
28
25
  kind: "accessor",
29
26
  name: "multiple",
30
27
  static: !1,
@@ -37,7 +34,7 @@ var u = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;ga
37
34
  }
38
35
  },
39
36
  metadata: t
40
- }, _, v), e(this, null, y, {
37
+ }, y, b), e(this, null, x, {
41
38
  kind: "accessor",
42
39
  name: "size",
43
40
  static: !1,
@@ -50,7 +47,7 @@ var u = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;ga
50
47
  }
51
48
  },
52
49
  metadata: t
53
- }, b, x), e(this, null, S, {
50
+ }, S, C), e(this, null, w, {
54
51
  kind: "setter",
55
52
  name: "value",
56
53
  static: !1,
@@ -62,7 +59,7 @@ var u = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;ga
62
59
  }
63
60
  },
64
61
  metadata: t
65
- }, null, f), t && Object.defineProperty(this, Symbol.metadata, {
62
+ }, null, m), t && Object.defineProperty(this, Symbol.metadata, {
66
63
  enumerable: !0,
67
64
  configurable: !0,
68
65
  writable: !0,
@@ -73,13 +70,13 @@ var u = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;ga
73
70
  this.elementName = "sbb-tag-group";
74
71
  }
75
72
  static {
76
- this.styles = [i(u)];
73
+ this.styles = [i(f)];
77
74
  }
78
75
  #e;
79
- get listAccessibilityLabel() {
76
+ get accessibilityLabel() {
80
77
  return this.#e;
81
78
  }
82
- set listAccessibilityLabel(e) {
79
+ set accessibilityLabel(e) {
83
80
  this.#e = e;
84
81
  }
85
82
  #t;
@@ -109,8 +106,26 @@ var u = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;ga
109
106
  get tags() {
110
107
  return Array.from(this.querySelectorAll?.("sbb-tag") ?? []);
111
108
  }
109
+ constructor() {
110
+ super(), this.listChildLocalNames = (t(this, m), ["sbb-tag", "div"]), this.#e = t(this, g, ""), this.#t = (t(this, _), t(this, y, !1)), this.#n = (t(this, b), t(this, S, null)), this._value = (t(this, C), null), this.addEventListener?.("keydown", (e) => this._handleArrowKeyDown(e));
111
+ }
112
112
  willUpdate(e) {
113
- super.willUpdate(e), e.has("value") && !this.hasUpdated && this._value && this._applyValueToTags(this.value), e.has("disabled") && this.tags.forEach((e) => e.requestUpdate?.("disabled")), (e.has("listChildren") || e.has("multiple")) && !this.multiple && this.tags.filter((e) => e.checked).slice(1).forEach((e) => e.checked = !1), e.has("listAccessibilityLabel") && (this.internals.role = this.listAccessibilityLabel ? null : "group");
113
+ super.willUpdate(e), e.has("value") && !this.hasUpdated && this._value && this._applyValueToTags(this.value), e.has("disabled") && this.tags.forEach((e) => e.requestUpdate?.("disabled")), (e.has("listChildren") || e.has("multiple")) && (this.multiple ? e.has("multiple") && this._enabledTags().forEach((e) => e.tabIndex = 0) : (this.tags.filter((e) => e.checked).slice(1).forEach((e) => e.checked = !1), this.updateExclusiveTabIndex())), (e.has("accessibilityLabel") || e.has("multiple")) && (this.multiple ? (this.internals.role = this.accessibilityLabel ? null : "group", this.internals.ariaLabel = null) : (this.internals.role = "radiogroup", this.internals.ariaLabel = this.accessibilityLabel));
114
+ }
115
+ _enabledTags() {
116
+ return this.tags.filter((e) => !e.disabled);
117
+ }
118
+ updateExclusiveTabIndex() {
119
+ let e = this._enabledTags(), t = e.find((e) => e.checked) ?? e[0];
120
+ e.forEach((e) => e.tabIndex = e === t ? 0 : -1);
121
+ }
122
+ _handleArrowKeyDown(e) {
123
+ if (this.multiple || !d(e)) return;
124
+ e.preventDefault();
125
+ let t = this._enabledTags(), n = t.indexOf(e.target);
126
+ if (n === -1) return;
127
+ let r = t[u(e, n, t.length)];
128
+ t.forEach((e) => e.tabIndex = e === r ? 0 : -1), r.focus();
114
129
  }
115
130
  _applyValueToTags(e) {
116
131
  let t = this.tags;
@@ -127,11 +142,11 @@ var u = ":host{display:block}.sbb-tag-group__list{display:flex;flex-wrap:wrap;ga
127
142
  return n`
128
143
  ${this.renderList({
129
144
  class: "sbb-tag-group__list",
130
- ariaLabel: this.listAccessibilityLabel
145
+ ariaLabel: this.multiple ? this.accessibilityLabel : void 0
131
146
  })}
132
147
  `;
133
148
  }
134
149
  };
135
150
  })();
136
151
  //#endregion
137
- export { d as t };
152
+ export { p as t };
@@ -116,13 +116,20 @@ var d = ":host{--sbb-tag-animation-duration: var( --sbb-disable-animation-durati
116
116
  this.#r = e;
117
117
  }
118
118
  constructor() {
119
- super(), t(this, w), this.addEventListener?.("click", () => this._handleClick()), this.addController(new s(this, () => this._tagGroup(), { size: (e) => {
120
- this.size = e.size;
121
- } }));
119
+ super(), t(this, w), this.addEventListener?.("click", () => this._handleClick()), this.addController(new s(this, () => this._tagGroup(), {
120
+ multiple: () => this._updateAriaRole(),
121
+ size: (e) => {
122
+ this.size = e.size;
123
+ }
124
+ }));
122
125
  }
123
126
  _tagGroup() {
124
127
  return this.closest?.("sbb-tag-group") ?? null;
125
128
  }
129
+ _updateAriaRole() {
130
+ let e = this._tagGroup();
131
+ e && !e.multiple ? (this.internals.role = "radio", this.internals.ariaChecked = `${this.checked}`, this.internals.ariaPressed = null) : (this.internals.role = "button", this.internals.ariaChecked = null, this.internals.ariaPressed = `${this.checked}`);
132
+ }
126
133
  isDisabledExternally() {
127
134
  return this._tagGroup()?.disabled ?? !1;
128
135
  }
@@ -135,9 +142,11 @@ var d = ":host{--sbb-tag-animation-duration: var( --sbb-disable-animation-durati
135
142
  })), this.dispatchEvent(new Event("change", { bubbles: !0 })), this.dispatchEvent(new Event("didChange", { bubbles: !0 })));
136
143
  }
137
144
  willUpdate(e) {
138
- super.willUpdate(e), e.has("checked") && (this.internals.ariaPressed = `${this.checked}`, this.toggleState("checked", this.checked), this.updateFormValue());
145
+ super.willUpdate(e);
139
146
  let t = this._tagGroup();
140
- t && !t.multiple && e.has("checked") && this.checked && t?.tags.filter((e) => e !== this).forEach((e) => e.checked = !1);
147
+ e.has("checked") && (this._updateAriaRole(), this.toggleState("checked", this.checked), this.updateFormValue()), t && !t.multiple && e.has("checked") && (this.checked ? t.tags.forEach((e) => {
148
+ e.tabIndex = e === this ? 0 : -1, e.checked = e === this;
149
+ }) : t.tags.some((e) => e.checked) || t.updateExclusiveTabIndex());
141
150
  }
142
151
  formResetCallback() {
143
152
  this.checked = this.hasAttribute("checked");
package/tag.js CHANGED
@@ -1,5 +1,5 @@
1
- import { t as e } from "./tag-group.component-ByRxy8UG.js";
2
- import { t } from "./tag.component-BrKoQeIW.js";
1
+ import { t as e } from "./tag-group.component-CJwbkP70.js";
2
+ import { t } from "./tag.component-r8diGGP-.js";
3
3
  import "./tag.pure.js";
4
4
  t.define(), e.define();
5
5
  //#endregion
package/tag.pure.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as e } from "./tag-group.component-ByRxy8UG.js";
2
- import { t } from "./tag.component-BrKoQeIW.js";
1
+ import { t as e } from "./tag-group.component-CJwbkP70.js";
2
+ import { t } from "./tag.component-r8diGGP-.js";
3
3
  export { t as SbbTagElement, e as SbbTagGroupElement };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../toast.component-Lbh5sa_U.js";
1
+ import { t as e } from "../toast.component-Dlr0Koxu.js";
2
2
  export { e as SbbToastElement };