@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/tag/tag-group.js CHANGED
@@ -1,23 +1,23 @@
1
- import { css as h, LitElement as f, isServer as b, html as u } from "lit";
1
+ import { css as h, LitElement as u, isServer as b, html as f } from "lit";
2
2
  import { property as o, customElement as n } from "lit/decorators.js";
3
3
  import { setOrRemoveAttribute as m } from "../core/dom.js";
4
4
  import { SbbNamedSlotListMixin as y } from "../core/mixins.js";
5
5
  const g = h`*,:before,:after{box-sizing:border-box}:host{display:block}.sbb-tag-group__list{list-style:none;margin:0;padding:0;font-size:inherit;display:flex;flex-wrap:wrap;gap:var(--sbb-spacing-fixed-3x)}.sbb-tag-group__list>:is(li,span){display:flex;max-width:100%}`;
6
- var d = Object.defineProperty, A = Object.getOwnPropertyDescriptor, a = (e, t, s, i) => {
7
- for (var l = i > 1 ? void 0 : i ? A(t, s) : t, c = e.length - 1, p; c >= 0; c--)
6
+ var d = Object.defineProperty, v = Object.getOwnPropertyDescriptor, a = (e, t, s, i) => {
7
+ for (var l = i > 1 ? void 0 : i ? v(t, s) : t, c = e.length - 1, p; c >= 0; c--)
8
8
  (p = e[c]) && (l = (i ? p(t, s, l) : p(l)) || l);
9
9
  return i && l && d(t, s, l), l;
10
10
  };
11
11
  let r = class extends y(
12
- f
12
+ u
13
13
  ) {
14
14
  constructor() {
15
- super(...arguments), this.listChildLocalNames = ["sbb-tag", "div"], this.multiple = !1, this.size = "m", this.a = null;
15
+ super(...arguments), this.listChildLocalNames = ["sbb-tag", "div"], this.multiple = !1, this.size = "m", this._value = null;
16
16
  }
17
17
  set value(e) {
18
18
  const t = this.tags;
19
19
  if (b)
20
- this.a = e;
20
+ this._value = e;
21
21
  else if (e === null)
22
22
  t.forEach((s) => s.checked = !1);
23
23
  else if (this.multiple) {
@@ -33,7 +33,7 @@ let r = class extends y(
33
33
  }
34
34
  get value() {
35
35
  var e;
36
- return b ? this.a : this.multiple ? this.tags.filter((t) => t.checked).map((t) => t.value) : ((e = this.tags.find((t) => t.checked)) == null ? void 0 : e.value) ?? null;
36
+ return b ? this._value : this.multiple ? this.tags.filter((t) => t.checked).map((t) => t.value) : ((e = this.tags.find((t) => t.checked)) == null ? void 0 : e.value) ?? null;
37
37
  }
38
38
  /** The child instances of sbb-tag as an array. */
39
39
  get tags() {
@@ -51,7 +51,7 @@ let r = class extends y(
51
51
  );
52
52
  }
53
53
  render() {
54
- return u`
54
+ return f`
55
55
  <div class="sbb-tag-group">
56
56
  ${this.renderList({
57
57
  class: "sbb-tag-group__list",
package/tag/tag.js CHANGED
@@ -3,49 +3,49 @@ import { property as c, customElement as h } from "lit/decorators.js";
3
3
  import { SbbButtonBaseElement as v } from "../core/base-elements.js";
4
4
  import { SbbConnectedAbortController as u, SbbSlotStateController as m } from "../core/controllers.js";
5
5
  import { EventEmitter as l } from "../core/eventing.js";
6
- import { SbbDisabledTabIndexActionMixin as f } from "../core/mixins.js";
7
- import { SbbIconNameMixin as p } from "../icon.js";
6
+ import { SbbDisabledTabIndexActionMixin as p } from "../core/mixins.js";
7
+ import { SbbIconNameMixin as f } from "../icon.js";
8
8
  const x = d`*,:before,:after{box-sizing:border-box}:host{--sbb-tag-border-radius: var(--sbb-border-radius-infinity);--sbb-tag-background-color: var(--sbb-color-white);--sbb-tag-border-color: var(--sbb-color-cloud);--sbb-tag-border-style: solid;--sbb-tag-border-width: var(--sbb-border-width-1x);--sbb-tag-text-color: var(--sbb-color-charcoal);--sbb-tag-amount-color: var(--sbb-color-metal);--sbb-tag-height: var(--sbb-size-element-xs);--sbb-tag-inset: 0;--sbb-tag-content-shift: translateY(0);--sbb-tag-animation-duration: var( --sbb-disable-animation-zero-time, var(--sbb-animation-duration-2x) );--sbb-tag-animation-easing: var(--sbb-animation-easing);--sbb-tag-padding-inline: var(--sbb-spacing-fixed-5x);--sbb-tag-gap: var(--sbb-spacing-fixed-2x);display:inline-block;outline:none!important;max-width:100%}@media (forced-colors: active){:host{--sbb-tag-background-color: Canvas !important;--sbb-tag-text-color: ButtonText;--sbb-tag-amount-color: ButtonText;--sbb-tag-border-color: CanvasText;--sbb-tag-border-width: var(--sbb-border-width-2x)}}:host([checked]){--sbb-tag-border-color: var(--sbb-color-charcoal);--sbb-tag-border-width: var(--sbb-border-width-2x)}@media (forced-colors: active){:host([checked]){--sbb-tag-border-color: Highlight !important}}:host([disabled]){--sbb-tag-text-color: var(--sbb-color-granite);--sbb-tag-amount-color: var(--sbb-tag-text-color);--sbb-tag-background-color: var(--sbb-color-milk);--sbb-tag-border-color: var(--sbb-color-cement);--sbb-tag-border-style: dashed}@media (forced-colors: active){:host([disabled]){--sbb-tag-text-color: GrayText;--sbb-tag-amount-color: GrayText;--sbb-tag-border-color: GrayText}}:host([checked][disabled]){--sbb-tag-border-color: var(--sbb-color-metal)}@media (any-hover: hover){:host(:hover:not([disabled],:active,[data-active])){--sbb-tag-background-color: var(--sbb-color-milk);--sbb-tag-inset: calc(var(--sbb-border-width-2x) * -1);--sbb-tag-content-shift: translateY(calc(var(--sbb-border-width-1x) * -1))}}@media (any-hover: hover) and (forced-colors: active){:host(:hover:not([disabled],:active,[data-active])){--sbb-tag-border-color: Highlight}}:host(:is(:active,[data-active]):not([disabled])){--sbb-tag-background-color: var(--sbb-color-milk);--sbb-tag-border-color: var(--sbb-color-iron);--sbb-tag-border-width: var(--sbb-border-width-2x);--sbb-tag-text-color: var(--sbb-color-iron)}@media (forced-colors: active){:host(:is(:active,[data-active]):not([disabled])){--sbb-tag-border-color: Highlight;--sbb-tag-text-color: ButtonText}}:host([size=s]){--sbb-tag-height: var(--sbb-size-element-xxxs);--sbb-tag-padding-inline: var(--sbb-spacing-fixed-3x)}.sbb-tag{--sbb-text-font-size: var(--sbb-font-size-text-xs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-body-text);letter-spacing:var(--sbb-typo-letter-spacing-body-text);font-size:var(--sbb-text-font-size);font-weight:700;position:relative;display:flex;align-items:center;height:var(--sbb-tag-height);max-width:100%;gap:var(--sbb-tag-gap);padding-inline:var(--sbb-tag-padding-inline);cursor:pointer;border-radius:var(--sbb-tag-border-radius);color:var(--sbb-tag-text-color);transition:color var(--sbb-tag-animation-duration) var(--sbb-tag-animation-easing);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}.sbb-tag:before{content:"";position:absolute;inset:var(--sbb-tag-inset);background-color:var(--sbb-tag-background-color);border:var(--sbb-tag-border-width) var(--sbb-tag-border-style) var(--sbb-tag-border-color);border-radius:var(--sbb-tag-border-radius);transition-duration:var(--sbb-tag-animation-duration);transition-timing-function:var(--sbb-tag-animation-easing);transition-property:inset,background-color,border-color,box-shadow}:host(:focus-visible:not([data-focus-origin=mouse],[data-focus-origin=touch])) .sbb-tag:before{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width)}:host([disabled]) .sbb-tag{cursor:unset;pointer-events:none}.sbb-tag__icon{display:flex;align-items:center;height:calc(var(--sbb-typo-line-height-body-text) * 1em);flex-shrink:0}:host(:not([data-slot-names~=icon],[icon-name])) .sbb-tag__icon{display:none}.sbb-tag__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.sbb-tag__amount{--sbb-text-font-size: var(--sbb-font-size-text-xs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-body-text);letter-spacing:var(--sbb-typo-letter-spacing-body-text);font-size:var(--sbb-text-font-size);color:var(--sbb-tag-amount-color)}:host(:not([data-slot-names~=amount],[amount])) .sbb-tag__amount{display:none}.sbb-tag--shift{transition:transform var(--sbb-tag-animation-duration) var(--sbb-tag-animation-easing);transform:var(--sbb-tag-content-shift);will-change:transform}`;
9
- var y = Object.defineProperty, w = Object.getOwnPropertyDescriptor, r = (t, o, b, a) => {
10
- for (var s = a > 1 ? void 0 : a ? w(o, b) : o, i = t.length - 1, n; i >= 0; i--)
11
- (n = t[i]) && (s = (a ? n(o, b, s) : n(s)) || s);
12
- return a && s && y(o, b, s), s;
9
+ var y = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, r = (t, e, b, a) => {
10
+ for (var s = a > 1 ? void 0 : a ? _(e, b) : e, i = t.length - 1, n; i >= 0; i--)
11
+ (n = t[i]) && (s = (a ? n(e, b, s) : n(s)) || s);
12
+ return a && s && y(e, b, s), s;
13
13
  };
14
- let e = class extends p(
15
- f(v)
14
+ let o = class extends f(
15
+ p(v)
16
16
  ) {
17
17
  constructor() {
18
- super(), this.checked = !1, this.a = "m", this.b = null, this.c = new l(this, e.events.input, {
18
+ super(), this.checked = !1, this._size = "m", this._group = null, this._input = new l(this, o.events.input, {
19
19
  bubbles: !0,
20
20
  composed: !0
21
- }), this.d = new l(this, e.events.didChange, {
21
+ }), this._didChange = new l(this, o.events.didChange, {
22
22
  bubbles: !0
23
- }), this.e = new l(this, e.events.change, {
23
+ }), this._change = new l(this, o.events.change, {
24
24
  bubbles: !0
25
- }), this.f = new u(this), new m(this);
25
+ }), this._abort = new u(this), new m(this);
26
26
  }
27
27
  set size(t) {
28
- this.a = t;
28
+ this._size = t;
29
29
  }
30
30
  get size() {
31
31
  var t;
32
- return ((t = this.b) == null ? void 0 : t.size) ?? this.a;
32
+ return ((t = this._group) == null ? void 0 : t.size) ?? this._size;
33
33
  }
34
34
  connectedCallback() {
35
- super.connectedCallback(), this.b = this.closest("sbb-tag-group"), this.addEventListener("click", () => this.g(), { signal: this.f.signal });
35
+ super.connectedCallback(), this._group = this.closest("sbb-tag-group"), this.addEventListener("click", () => this._handleClick(), { signal: this._abort.signal });
36
36
  }
37
37
  /** Method triggered on button click. Inverts the checked value and emits events. */
38
- g() {
38
+ _handleClick() {
39
39
  if (this.disabled)
40
40
  return;
41
41
  const t = this.closest("sbb-tag-group");
42
- t && !t.multiple && this.checked || (this.checked = !this.checked, this.c.emit(), this.e.emit(), this.d.emit());
42
+ t && !t.multiple && this.checked || (this.checked = !this.checked, this._input.emit(), this._change.emit(), this._didChange.emit());
43
43
  }
44
44
  willUpdate(t) {
45
45
  var b;
46
46
  super.willUpdate(t), t.has("checked") && this.setAttribute("aria-pressed", `${this.checked}`);
47
- const o = (b = this.closest) == null ? void 0 : b.call(this, "sbb-tag-group");
48
- o && !o.multiple && t.has("checked") && this.checked && (o == null || o.tags.filter((a) => a !== this).forEach((a) => a.checked = !1));
47
+ const e = (b = this.closest) == null ? void 0 : b.call(this, "sbb-tag-group");
48
+ e && !e.multiple && t.has("checked") && this.checked && (e == null || e.tags.filter((a) => a !== this).forEach((a) => a.checked = !1));
49
49
  }
50
50
  renderTemplate() {
51
51
  return g`
@@ -59,24 +59,24 @@ let e = class extends p(
59
59
  `;
60
60
  }
61
61
  };
62
- e.styles = x;
63
- e.events = {
62
+ o.styles = x;
63
+ o.events = {
64
64
  input: "input",
65
65
  didChange: "didChange",
66
66
  change: "change"
67
67
  };
68
68
  r([
69
69
  c({ reflect: !0 })
70
- ], e.prototype, "amount", 2);
70
+ ], o.prototype, "amount", 2);
71
71
  r([
72
72
  c({ reflect: !0, type: Boolean })
73
- ], e.prototype, "checked", 2);
73
+ ], o.prototype, "checked", 2);
74
74
  r([
75
75
  c({ reflect: !0 })
76
- ], e.prototype, "size", 1);
77
- e = r([
76
+ ], o.prototype, "size", 1);
77
+ o = r([
78
78
  h("sbb-tag")
79
- ], e);
79
+ ], o);
80
80
  export {
81
- e as SbbTagElement
81
+ o as SbbTagElement
82
82
  };
package/teaser-paid.js CHANGED
@@ -1,28 +1,28 @@
1
- import { css as n, html as l } from "lit";
1
+ import { css as b, html as l } from "lit";
2
2
  import { customElement as p } from "lit/decorators.js";
3
3
  import { SbbLinkBaseElement as c } from "./core/base-elements.js";
4
- const d = n`*,:before,:after{box-sizing:border-box}:host{display:block;outline:none!important;--sbb-teaser-paid-chip-inset: var(--sbb-spacing-responsive-xxxs) auto auto var(--sbb-spacing-responsive-xxxs);--sbb-teaser-paid-brightness-hover: 1.075;--sbb-teaser-paid-animation-duration: var( --sbb-disable-animation-zero-time, var(--sbb-animation-duration-4x) );--sbb-teaser-paid-animation-easing: var(--sbb-animation-easing)}@media (any-hover: hover){:host(:hover){--sbb-teaser-paid-brightness: var(--sbb-teaser-paid-brightness-hover)}}.sbb-teaser-paid{position:relative;display:block}:host(:not([data-focus-origin=mouse],[data-focus-origin=touch])) .sbb-teaser-paid:focus-visible{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width)}::slotted([slot=chip]){position:absolute;inset:var(--sbb-teaser-paid-chip-inset);z-index:1}::slotted([slot=image]){will-change:filter;filter:brightness(var(--sbb-teaser-paid-brightness, 1));transition:filter var(--sbb-teaser-paid-animation-duration) var(--sbb-teaser-paid-animation-easing)}`;
5
- var v = Object.defineProperty, h = Object.getOwnPropertyDescriptor, m = (s, t, a, i) => {
6
- for (var e = i > 1 ? void 0 : i ? h(t, a) : t, o = s.length - 1, r; o >= 0; o--)
4
+ const d = b`*,:before,:after{box-sizing:border-box}:host{display:block;outline:none!important;--sbb-teaser-paid-chip-inset: var(--sbb-spacing-responsive-xxxs) auto auto var(--sbb-spacing-responsive-xxxs);--sbb-teaser-paid-brightness-hover: 1.075;--sbb-teaser-paid-animation-duration: var( --sbb-disable-animation-zero-time, var(--sbb-animation-duration-4x) );--sbb-teaser-paid-animation-easing: var(--sbb-animation-easing)}@media (any-hover: hover){:host(:hover){--sbb-teaser-paid-brightness: var(--sbb-teaser-paid-brightness-hover)}}.sbb-teaser-paid{position:relative;display:block}:host(:not([data-focus-origin=mouse],[data-focus-origin=touch])) .sbb-teaser-paid:focus-visible{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width)}::slotted([slot=chip]){position:absolute;inset:var(--sbb-teaser-paid-chip-inset);z-index:1}::slotted([slot=image]){will-change:filter;filter:brightness(var(--sbb-teaser-paid-brightness, 1));transition:filter var(--sbb-teaser-paid-animation-duration) var(--sbb-teaser-paid-animation-easing)}`;
5
+ var h = Object.defineProperty, v = Object.getOwnPropertyDescriptor, m = (s, t, a, i) => {
6
+ for (var e = i > 1 ? void 0 : i ? v(t, a) : t, o = s.length - 1, r; o >= 0; o--)
7
7
  (r = s[o]) && (e = (i ? r(t, a, e) : r(e)) || e);
8
- return i && e && v(t, a, e), e;
8
+ return i && e && h(t, a, e), e;
9
9
  };
10
- let b = class extends c {
11
- a() {
10
+ let n = class extends c {
11
+ _chipSlotChanged() {
12
12
  var s;
13
13
  (s = this.querySelector("sbb-chip")) == null || s.setAttribute("color", "charcoal");
14
14
  }
15
15
  renderTemplate() {
16
16
  return l`
17
- <slot name="chip" @slotchange=${() => this.a()}></slot>
17
+ <slot name="chip" @slotchange=${() => this._chipSlotChanged()}></slot>
18
18
  <slot name="image"></slot>
19
19
  `;
20
20
  }
21
21
  };
22
- b.styles = d;
23
- b = m([
22
+ n.styles = d;
23
+ n = m([
24
24
  p("sbb-teaser-paid")
25
- ], b);
25
+ ], n);
26
26
  export {
27
- b as SbbTeaserPaidElement
27
+ n as SbbTeaserPaidElement
28
28
  };
package/time-input.js CHANGED
@@ -1,131 +1,131 @@
1
- import { css as c, LitElement as p, html as d } from "lit";
2
- import { property as m, state as b, customElement as f } from "lit/decorators.js";
1
+ import { css as p, LitElement as m, html as _ } from "lit";
2
+ import { property as d, state as c, customElement as E } from "lit/decorators.js";
3
3
  import { ref as g } from "lit/directives/ref.js";
4
- import { SbbLanguageController as w } from "./core/controllers.js";
5
- import { findInput as E } from "./core/dom.js";
6
- import { EventEmitter as l, forwardEventToHost as u } from "./core/eventing.js";
7
- import { i18nTimeInputChange as v } from "./core/i18n.js";
8
- const C = c`:host{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;display:block}`;
9
- var A = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, o = (t, e, s, i) => {
10
- for (var n = i > 1 ? void 0 : i ? _(e, s) : e, a = t.length - 1, h; a >= 0; a--)
11
- (h = t[a]) && (n = (i ? h(e, s, n) : h(n)) || n);
12
- return i && n && A(e, s, n), n;
4
+ import { SbbLanguageController as b } from "./core/controllers.js";
5
+ import { findInput as f } from "./core/dom.js";
6
+ import { EventEmitter as o, forwardEventToHost as h } from "./core/eventing.js";
7
+ import { i18nTimeInputChange as C } from "./core/i18n.js";
8
+ const w = p`:host{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;display:block}`;
9
+ var v = Object.defineProperty, A = Object.getOwnPropertyDescriptor, u = (t, e, i, n) => {
10
+ for (var s = n > 1 ? void 0 : n ? A(e, i) : e, a = t.length - 1, l; a >= 0; a--)
11
+ (l = t[a]) && (s = (n ? l(e, i, s) : l(s)) || s);
12
+ return n && s && v(e, i, s), s;
13
13
  };
14
- const y = /[0-9.:,\-;_hH]/, O = /^([0-9]{1,2})([0-9]{2})$/, D = /^([0-9]{1,2})?[.:,\-;_hH]?([0-9]{1,2})?$/;
15
- let r = class extends p {
14
+ const V = /[0-9.:,\-;_hH]/, y = /^([0-9]{1,2})([0-9]{2})$/, I = /^([0-9]{1,2})?[.:,\-;_hH]?([0-9]{1,2})?$/;
15
+ let r = class extends m {
16
16
  constructor() {
17
- super(...arguments), this.d = null, this.a = null, this.j = new l(this, r.events.didChange, {
17
+ super(...arguments), this._input = null, this._inputElement = null, this._didChange = new o(this, r.events.didChange, {
18
18
  bubbles: !0,
19
19
  cancelable: !0
20
- }), this.k = new l(
20
+ }), this._validationChange = new o(
21
21
  this,
22
22
  r.events.validationChange,
23
23
  {
24
24
  bubbles: !0,
25
25
  composed: !1
26
26
  }
27
- ), this.b = new AbortController(), this.l = new w(this);
27
+ ), this._abortController = new AbortController(), this._language = new b(this);
28
28
  }
29
29
  set input(t) {
30
- this.d = t, this.e();
30
+ this._input = t, this._findInputElement();
31
31
  }
32
32
  get input() {
33
- return this.d;
33
+ return this._input;
34
34
  }
35
35
  connectedCallback() {
36
- super.connectedCallback(), this.e(), this.a && this.f(this.a.value);
36
+ super.connectedCallback(), this._findInputElement(), this._inputElement && this._updateValue(this._inputElement.value);
37
37
  }
38
38
  disconnectedCallback() {
39
39
  var t;
40
- super.disconnectedCallback(), (t = this.b) == null || t.abort();
40
+ super.disconnectedCallback(), (t = this._abortController) == null || t.abort();
41
41
  }
42
42
  /** Gets the input value with the correct date format. */
43
43
  // TODO: refactor this to be a get/set
44
44
  getValueAsDate() {
45
45
  var t;
46
- return this.m(this.g((t = this.a) == null ? void 0 : t.value));
46
+ return this._formatValueAsDate(this._parseInput((t = this._inputElement) == null ? void 0 : t.value));
47
47
  }
48
48
  /** Set the input value to the correctly formatted value. */
49
49
  setValueAsDate(t) {
50
- if (!t || !this.a)
50
+ if (!t || !this._inputElement)
51
51
  return;
52
52
  const e = t instanceof Date ? t : new Date(t);
53
- this.a.value = this.h({
53
+ this._inputElement.value = this._formatValue({
54
54
  hours: e.getHours(),
55
55
  minutes: e.getMinutes()
56
- }), this.a.dispatchEvent(new FocusEvent("blur", { composed: !0 }));
56
+ }), this._inputElement.dispatchEvent(new FocusEvent("blur", { composed: !0 }));
57
57
  }
58
- e() {
59
- const t = this.a;
60
- this.a = E(this, this.input), t !== this.a && this.n();
58
+ _findInputElement() {
59
+ const t = this._inputElement;
60
+ this._inputElement = f(this, this.input), t !== this._inputElement && this._registerInputElement();
61
61
  }
62
- n() {
62
+ _registerInputElement() {
63
63
  var t;
64
- (t = this.b) == null || t.abort(), this.a && (this.b = new AbortController(), this.a.toggleAttribute("data-sbb-time-input", !0), this.a.type = "text", this.a.inputMode = "numeric", this.a.maxLength = 5, this.a.placeholder || (this.a.placeholder = "HH:MM"), this.a.addEventListener(
64
+ (t = this._abortController) == null || t.abort(), this._inputElement && (this._abortController = new AbortController(), this._inputElement.toggleAttribute("data-sbb-time-input", !0), this._inputElement.type = "text", this._inputElement.inputMode = "numeric", this._inputElement.maxLength = 5, this._inputElement.placeholder || (this._inputElement.placeholder = "HH:MM"), this._inputElement.addEventListener(
65
65
  "input",
66
- (e) => u(e, this),
67
- { signal: this.b.signal }
68
- ), this.a.addEventListener(
66
+ (e) => h(e, this),
67
+ { signal: this._abortController.signal }
68
+ ), this._inputElement.addEventListener(
69
69
  "keydown",
70
- (e) => this.o(e),
71
- { signal: this.b.signal }
72
- ), this.a.addEventListener(
70
+ (e) => this._preventCharInsert(e),
71
+ { signal: this._abortController.signal }
72
+ ), this._inputElement.addEventListener(
73
73
  "change",
74
- (e) => this.p(e),
74
+ (e) => this._updateValueAndEmitChange(e),
75
75
  {
76
- signal: this.b.signal
76
+ signal: this._abortController.signal
77
77
  }
78
78
  ));
79
79
  }
80
80
  /** Applies the correct format to values and triggers event dispatch. */
81
- p(t) {
82
- this.f(t.target.value), this.q(t), this.r();
81
+ _updateValueAndEmitChange(t) {
82
+ this._updateValue(t.target.value), this._emitChange(t), this._updateAccessibilityMessage();
83
83
  }
84
84
  /**
85
85
  * Updates `value` and `valueAsDate`. The direct update on the `_inputElement` is required
86
86
  * to force the input change when the typed value is the same of the current one.
87
87
  */
88
- f(t) {
89
- if (this.c && (this.c.innerText = ""), !this.a)
88
+ _updateValue(t) {
89
+ if (this._statusContainer && (this._statusContainer.innerText = ""), !this._inputElement)
90
90
  return;
91
- const e = this.g(t), s = !!e && this.i(e), i = !t || t.trim() === "" || s;
92
- i && e && (this.a.value = this.h(e));
93
- const n = !this.a.hasAttribute("data-sbb-invalid");
94
- this.a.toggleAttribute("data-sbb-invalid", !i), n !== i && this.k.emit({ valid: i });
91
+ const e = this._parseInput(t), i = !!e && this._isTimeValid(e), n = !t || t.trim() === "" || i;
92
+ n && e && (this._inputElement.value = this._formatValue(e));
93
+ const s = !this._inputElement.hasAttribute("data-sbb-invalid");
94
+ this._inputElement.toggleAttribute("data-sbb-invalid", !n), s !== n && this._validationChange.emit({ valid: n });
95
95
  }
96
96
  /** Emits the change event. */
97
- q(t) {
98
- u(t, this), this.j.emit();
97
+ _emitChange(t) {
98
+ h(t, this), this._didChange.emit();
99
99
  }
100
100
  /** Returns the right format for the `value` property. */
101
- h(t) {
102
- const e = String(t.hours).padStart(2, "0"), s = String(t.minutes).padStart(2, "0");
103
- return `${e}:${s}`;
101
+ _formatValue(t) {
102
+ const e = String(t.hours).padStart(2, "0"), i = String(t.minutes).padStart(2, "0");
103
+ return `${e}:${i}`;
104
104
  }
105
105
  /**
106
106
  * Returns the right format for the `valueAsDate` property:
107
107
  * sets the start date at 01.01.1970, then adds the typed hours/minutes.
108
108
  */
109
- m(t) {
110
- return !t || !this.i(t) ? null : new Date((/* @__PURE__ */ new Date(0)).setHours(t.hours, t.minutes, 0, 0));
109
+ _formatValueAsDate(t) {
110
+ return !t || !this._isTimeValid(t) ? null : new Date((/* @__PURE__ */ new Date(0)).setHours(t.hours, t.minutes, 0, 0));
111
111
  }
112
112
  /** Checks if values of hours and minutes are possible, to avoid non-existent times. */
113
- i(t) {
113
+ _isTimeValid(t) {
114
114
  return t.hours < 24 && t.minutes < 60;
115
115
  }
116
116
  /** Validate input against the defined RegExps. */
117
- g(t) {
117
+ _parseInput(t) {
118
118
  const e = t == null ? void 0 : t.trim();
119
119
  if (!e)
120
120
  return null;
121
- const s = e.match(O);
122
- if (s)
123
- return { hours: +s[1] || 0, minutes: +s[2] || 0 };
124
- const i = e.match(D);
125
- return i ? { hours: +i[1] || 0, minutes: +i[2] || 0 } : null;
121
+ const i = e.match(y);
122
+ if (i)
123
+ return { hours: +i[1] || 0, minutes: +i[2] || 0 };
124
+ const n = e.match(I);
125
+ return n ? { hours: +n[1] || 0, minutes: +n[2] || 0 } : null;
126
126
  }
127
127
  /** Only allow typing numbers and separator keys. */
128
- o(t) {
128
+ _preventCharInsert(t) {
129
129
  const e = [
130
130
  "Backspace",
131
131
  "Tab",
@@ -140,36 +140,36 @@ let r = class extends p {
140
140
  "PageDown",
141
141
  "Delete"
142
142
  ];
143
- !t.ctrlKey && !t.altKey && !t.metaKey && !e.includes(t.key) && !y.test(t.key) && t.preventDefault();
143
+ !t.ctrlKey && !t.altKey && !t.metaKey && !e.includes(t.key) && !V.test(t.key) && t.preventDefault();
144
144
  }
145
145
  // We use a programmatic approach to avoid initial setting the message
146
146
  // and to not immediately change output if language should change (no reason to read out message).
147
- r() {
147
+ _updateAccessibilityMessage() {
148
148
  var e;
149
- this.a.hasAttribute("data-sbb-invalid") || (this.c.innerText = `${v[this.l.current]} ${(e = this.a) == null ? void 0 : e.value}.`);
149
+ this._inputElement.hasAttribute("data-sbb-invalid") || (this._statusContainer.innerText = `${C[this._language.current]} ${(e = this._inputElement) == null ? void 0 : e.value}.`);
150
150
  }
151
151
  render() {
152
- return d`
152
+ return _`
153
153
  <p
154
154
  role="status"
155
- ${g((t) => this.c = t)}
155
+ ${g((t) => this._statusContainer = t)}
156
156
  ></p>
157
157
  `;
158
158
  }
159
159
  };
160
- r.styles = C;
160
+ r.styles = w;
161
161
  r.events = {
162
162
  didChange: "didChange",
163
163
  validationChange: "validationChange"
164
164
  };
165
- o([
166
- m()
165
+ u([
166
+ d()
167
167
  ], r.prototype, "input", 1);
168
- o([
169
- b()
170
- ], r.prototype, "a", 2);
171
- r = o([
172
- f("sbb-time-input")
168
+ u([
169
+ c()
170
+ ], r.prototype, "_inputElement", 2);
171
+ r = u([
172
+ E("sbb-time-input")
173
173
  ], r);
174
174
  export {
175
175
  r as SbbTimeInputElement
@@ -1,21 +1,21 @@
1
- import { property as h, customElement as p } from "lit/decorators.js";
2
- import { SbbConnectedAbortController as m, SbbLanguageController as b } from "./core/controllers.js";
1
+ import { property as h, customElement as m } from "lit/decorators.js";
2
+ import { SbbConnectedAbortController as b, SbbLanguageController as p } from "./core/controllers.js";
3
3
  import { setOrRemoveAttribute as d } from "./core/dom.js";
4
4
  import { i18nOccupancy as f } from "./core/i18n.js";
5
5
  import { SbbNegativeMixin as u } from "./core/mixins.js";
6
6
  import { SbbIconBase as n } from "./icon.js";
7
- import { css as v } from "lit";
8
- const g = v`@media (forced-colors: active) and (prefers-color-scheme: light){:host svg{filter:invert(1)}}`;
9
- var w = Object.defineProperty, y = Object.getOwnPropertyDescriptor, l = (e, t, i, a) => {
10
- for (var c = a > 1 ? void 0 : a ? y(t, i) : t, s = e.length - 1, r; s >= 0; s--)
11
- (r = e[s]) && (c = (a ? r(t, i, c) : r(c)) || c);
12
- return a && c && w(t, i, c), c;
7
+ import { css as g } from "lit";
8
+ const v = g`@media (forced-colors: active) and (prefers-color-scheme: light){:host svg{filter:invert(1)}}`;
9
+ var _ = Object.defineProperty, w = Object.getOwnPropertyDescriptor, l = (e, t, i, r) => {
10
+ for (var a = r > 1 ? void 0 : r ? w(t, i) : t, c = e.length - 1, o; c >= 0; c--)
11
+ (o = e[c]) && (a = (r ? o(t, i, a) : o(a)) || a);
12
+ return r && a && _(t, i, a), a;
13
13
  };
14
- let o = class extends u(n) {
14
+ let s = class extends u(n) {
15
15
  constructor() {
16
- super(...arguments), this.b = new m(this), this.d = new b(this).withHandler(() => this.c());
16
+ super(...arguments), this._abort = new b(this), this._language = new p(this).withHandler(() => this._setAriaLabel());
17
17
  }
18
- async a() {
18
+ async _setNameAndAriaLabel() {
19
19
  var t, i;
20
20
  if (!this.occupancy)
21
21
  return;
@@ -23,31 +23,31 @@ let o = class extends u(n) {
23
23
  (t = globalThis.window) != null && t.matchMedia("(forced-colors: active)").matches ? e += "-high-contrast" : (this.negative || (i = globalThis.window) != null && i.matchMedia("(prefer-color-scheme: dark)").matches) && (e += "-negative"), await this.loadSvgIcon(e);
24
24
  }
25
25
  async fetchSvgIcon(e, t) {
26
- return this.c(), super.fetchSvgIcon(e, t);
26
+ return this._setAriaLabel(), super.fetchSvgIcon(e, t);
27
27
  }
28
- c() {
28
+ _setAriaLabel() {
29
29
  var t;
30
- const e = (t = f[this.occupancy]) == null ? void 0 : t[this.d.current];
30
+ const e = (t = f[this.occupancy]) == null ? void 0 : t[this._language.current];
31
31
  d(this, "aria-label", e);
32
32
  }
33
33
  connectedCallback() {
34
- super.connectedCallback(), window.matchMedia("(forced-colors: active)").addEventListener("change", () => this.a(), {
35
- signal: this.b.signal
36
- }), window.matchMedia("(prefer-color-scheme: dark)").addEventListener("change", () => this.a(), {
37
- signal: this.b.signal
38
- }), this.a();
34
+ super.connectedCallback(), window.matchMedia("(forced-colors: active)").addEventListener("change", () => this._setNameAndAriaLabel(), {
35
+ signal: this._abort.signal
36
+ }), window.matchMedia("(prefer-color-scheme: dark)").addEventListener("change", () => this._setNameAndAriaLabel(), {
37
+ signal: this._abort.signal
38
+ }), this._setNameAndAriaLabel();
39
39
  }
40
40
  willUpdate(e) {
41
- super.willUpdate(e), (e.has("occupancy") || e.has("negative")) && this.a();
41
+ super.willUpdate(e), (e.has("occupancy") || e.has("negative")) && this._setNameAndAriaLabel();
42
42
  }
43
43
  };
44
- o.styles = [n.styles, g];
44
+ s.styles = [n.styles, v];
45
45
  l([
46
46
  h()
47
- ], o.prototype, "occupancy", 2);
48
- o = l([
49
- p("sbb-timetable-occupancy-icon")
50
- ], o);
47
+ ], s.prototype, "occupancy", 2);
48
+ s = l([
49
+ m("sbb-timetable-occupancy-icon")
50
+ ], s);
51
51
  export {
52
- o as SbbTimetableOccupancyIconElement
52
+ s as SbbTimetableOccupancyIconElement
53
53
  };
@@ -1,19 +1,19 @@
1
1
  import { css as p, LitElement as m, html as r, nothing as y } from "lit";
2
- import { property as l, customElement as u } from "lit/decorators.js";
2
+ import { property as b, customElement as u } from "lit/decorators.js";
3
3
  import { SbbLanguageController as f } from "./core/controllers.js";
4
4
  import { i18nClass as h } from "./core/i18n.js";
5
5
  import { SbbNegativeMixin as g } from "./core/mixins.js";
6
6
  import "./screen-reader-only.js";
7
7
  import "./timetable-occupancy-icon.js";
8
8
  const v = p`*,:before,:after{box-sizing:border-box}:host{--sbb-timetable-occupancy-color: var(--sbb-color-charcoal);--sbb-icon-svg-width: .890625rem;--sbb-icon-svg-height: v0.75rem;display:inline-block}@media (min-width: 52.5rem){:host{--sbb-icon-svg-width: 1.1875rem;--sbb-icon-svg-height: v1rem}}:host([negative]){--sbb-timetable-occupancy-color: var(--sbb-color-white)}.sbb-timetable-occupancy__list{list-style:none;margin:0;padding:0;font-size:inherit;display:flex;align-items:center;flex-wrap:nowrap;gap:var(--sbb-spacing-fixed-2x)}.sbb-timetable-occupancy__list-item{display:flex;align-items:center;flex-wrap:nowrap;gap:var(--sbb-spacing-fixed-1x)}.sbb-timetable-occupancy__list-item-class{--sbb-text-font-size: var(--sbb-font-size-text-s);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-body-text);letter-spacing:var(--sbb-typo-letter-spacing-body-text);font-size:var(--sbb-text-font-size);line-height:1;color:var(--sbb-timetable-occupancy-color)}.sbb-timetable-occupancy__list-item-icon{display:flex}`;
9
- var d = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, b = (e, t, a, i) => {
9
+ var d = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, l = (e, t, a, i) => {
10
10
  for (var s = i > 1 ? void 0 : i ? _(t, a) : t, n = e.length - 1, o; n >= 0; n--)
11
11
  (o = e[n]) && (s = (i ? o(t, a, s) : o(s)) || s);
12
12
  return i && s && d(t, a, s), s;
13
13
  };
14
14
  let c = class extends g(m) {
15
15
  constructor() {
16
- super(...arguments), this.a = new f(this);
16
+ super(...arguments), this._language = new f(this);
17
17
  }
18
18
  render() {
19
19
  return r` ${(this.firstClassOccupancy || this.secondClassOccupancy) && r`
@@ -28,7 +28,7 @@ let c = class extends g(m) {
28
28
  ${this.firstClassOccupancy && t === 0 ? "1" : "2"}.
29
29
  </span>
30
30
  <sbb-screen-reader-only>
31
- ${`${h[this.firstClassOccupancy && t === 0 ? "first" : "second"][this.a.current]}.`}
31
+ ${`${h[this.firstClassOccupancy && t === 0 ? "first" : "second"][this._language.current]}.`}
32
32
  </sbb-screen-reader-only>
33
33
  <sbb-timetable-occupancy-icon
34
34
  class="sbb-timetable-occupancy__list-item-icon"
@@ -44,13 +44,13 @@ let c = class extends g(m) {
44
44
  }
45
45
  };
46
46
  c.styles = v;
47
- b([
48
- l({ attribute: "first-class-occupancy" })
47
+ l([
48
+ b({ attribute: "first-class-occupancy" })
49
49
  ], c.prototype, "firstClassOccupancy", 2);
50
- b([
51
- l({ attribute: "second-class-occupancy" })
50
+ l([
51
+ b({ attribute: "second-class-occupancy" })
52
52
  ], c.prototype, "secondClassOccupancy", 2);
53
- c = b([
53
+ c = l([
54
54
  u("sbb-timetable-occupancy")
55
55
  ], c);
56
56
  export {