@golemui/gui-lit 1.0.3 → 1.1.1-rc.0

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 (83) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/{button.element-3a7rRHbA.js → button.element-CJay43iR.js} +16 -13
  3. package/calendar-D31xNsxx.js +267 -0
  4. package/{range-calendar.element-_1bHW_c1.js → calendar.element-BhFrCsns.js} +16 -16
  5. package/{checkbox.element-CVskoXEc.js → checkbox.element-DAAVB651.js} +49 -49
  6. package/{currency.element-5GSakkxF.js → currency.element-D8A2ObpM.js} +15 -11
  7. package/{date-CDUlLuYy.js → date-DBuYpvcO.js} +88 -29
  8. package/date-input-DLiMreSS.js +204 -0
  9. package/date-picker.element-DeUQtbLg.js +357 -0
  10. package/date-time-calendar-DzU-FtVl.js +374 -0
  11. package/date-time-calendar.element-BLBcVsFu.js +95 -0
  12. package/date-time-input-DZaz2heD.js +246 -0
  13. package/date-time-picker.element-BUbLdV6i.js +440 -0
  14. package/date-time.element-B5onfSBG.js +93 -0
  15. package/{date.element-BZO0UQez.js → date.element-BsKhLrEc.js} +27 -19
  16. package/day-status-CsWStVQV.js +554 -0
  17. package/{dropdown.element-CyJbVAA5.js → dropdown.element-CXpMwJsU.js} +53 -37
  18. package/{errors-QjKhr6mA.js → errors-Byb2dIhK.js} +3 -2
  19. package/focus-leave.controller-2gV0pQd5.js +73 -0
  20. package/index.js +1635 -948
  21. package/index.umd.cjs +2046 -601
  22. package/lib/components/date-picker.element.d.ts +0 -11
  23. package/lib/components/date-time-calendar.element.d.ts +18 -0
  24. package/lib/components/date-time-picker.element.d.ts +18 -0
  25. package/lib/components/date-time.element.d.ts +18 -0
  26. package/lib/components/dropdown.element.d.ts +2 -0
  27. package/lib/components/range-calendar.element.d.ts +2 -1
  28. package/lib/components/range-date-picker.element.d.ts +0 -15
  29. package/lib/components/range-date-time-calendar.element.d.ts +18 -0
  30. package/lib/components/range-date-time-input.element.d.ts +18 -0
  31. package/lib/components/range-date-time-picker.element.d.ts +18 -0
  32. package/lib/components/range-time-input.element.d.ts +18 -0
  33. package/lib/components/range-time-picker.element.d.ts +18 -0
  34. package/lib/components/time-picker.element.d.ts +18 -0
  35. package/lib/components/time.element.d.ts +18 -0
  36. package/list-D730tmGN.js +297 -0
  37. package/{list.element-Co3V3Cn5.js → list.element-eo3DIOrp.js} +23 -23
  38. package/{markdown.element-p-kC47D7.js → markdown.element-FbtwdnAv.js} +310 -218
  39. package/{number.element-CBr47IiY.js → number.element-BEpOCzXy.js} +76 -61
  40. package/package.json +6 -6
  41. package/part-templates-VORbpgs2.js +691 -0
  42. package/{password.element-n-R9RbkB.js → password.element-CBaB8h5b.js} +19 -17
  43. package/pill-ranges-DpvWwP-3.js +48 -0
  44. package/{pills-B66qz_KX.js → pills-BDMO2NiR.js} +84 -59
  45. package/popup.controller-B33OvX_y.js +86 -0
  46. package/{radiogroup.element-CeQn623u.js → radiogroup.element-KWzBx8mx.js} +55 -51
  47. package/range-calendar-DO_woqcF.js +466 -0
  48. package/{calendar.element-DcnTyvfg.js → range-calendar.element-DHLZhpnj.js} +37 -29
  49. package/range-commit-8-MmYUyo.js +14 -0
  50. package/range-date-input-Br7XqQPK.js +311 -0
  51. package/{range-date-input.element-BqzAF0O3.js → range-date-input.element-BdD4SlB4.js} +12 -8
  52. package/range-date-picker.element-DWRHiAoC.js +434 -0
  53. package/range-date-time-calendar-B3EMgN1E.js +734 -0
  54. package/range-date-time-calendar.element-Coea6RF4.js +97 -0
  55. package/range-date-time-input-Cu-T_nuC.js +353 -0
  56. package/range-date-time-input.element-Cti44iuW.js +87 -0
  57. package/range-date-time-picker.element-CDN2RL1y.js +472 -0
  58. package/range-selection-CU3hxLJE.js +25 -0
  59. package/range-time-input-BP9ZL9O8.js +348 -0
  60. package/range-time-input.element-B7wtHJoQ.js +84 -0
  61. package/range-time-picker.element-CPIAiQPC.js +470 -0
  62. package/{repeater.element-CtNgB4F5.js → repeater.element-BM1Keckd.js} +1 -1
  63. package/{select.element-jcDF1h-g.js → select.element-eepcXTpL.js} +117 -107
  64. package/{tabs.element-BvAyI71N.js → tabs.element-CvcIA8P3.js} +1 -0
  65. package/{tags.element-CX3vQL8L.js → tags.element-CPHgotb0.js} +21 -14
  66. package/templates-Dmr34nwp.js +88 -0
  67. package/{textarea.element-HThYqdR_.js → textarea.element-CiNEy9uq.js} +8 -7
  68. package/{textinput.element-CkXNzMUg.js → textinput.element-AL2Nr768.js} +10 -9
  69. package/time-input-5dkSm8UW.js +201 -0
  70. package/time-list-DLcq8BAp.js +217 -0
  71. package/time-picker-g337F8d0.js +299 -0
  72. package/time-picker.element-DLihegjg.js +89 -0
  73. package/time.element-BneqgMlQ.js +85 -0
  74. package/{toggle.element-C1kCw5H8.js → toggle.element-Cz91CRdp.js} +44 -43
  75. package/abstract-calendar-D0-077XJ.js +0 -545
  76. package/calendar-BclCC9VJ.js +0 -96
  77. package/date-input-DCdGWRio.js +0 -268
  78. package/date-picker.element-k7AJFQ5W.js +0 -168
  79. package/list-D1oKnH89.js +0 -283
  80. package/range-calendar-CBINu84w.js +0 -255
  81. package/range-date-input-BYXzqnr1.js +0 -395
  82. package/range-date-picker.element-BCBefgvY.js +0 -182
  83. package/templates-Dk1jxLwS.js +0 -75
@@ -7,23 +7,12 @@ export declare class DatePickerElement extends LitElement implements WithWidget
7
7
  widget: InputWidget<string>;
8
8
  formContext: LitFormContext<any>;
9
9
  adapter: InputWidgetAdapter<string, DatePickerProps>;
10
- dateInput?: HTMLElement;
11
- calendarInput?: HTMLElement;
12
- isCalendarOpen: boolean;
13
10
  subscriptions: Subscription[];
14
- onFocusOut: (event: FocusEvent) => void;
15
- onDocumentClick: (event: MouseEvent) => void;
16
11
  createRenderRoot(): this;
17
12
  updated(changedProperties: any): void;
18
13
  connectedCallback(): void;
19
14
  render(): import('lit-html').TemplateResult<1>;
20
15
  valueChanged(event: CustomEvent): void;
21
- onCalendarChange(event: CustomEvent): void;
22
- onBlurCalendar(): void;
23
16
  onInputError(event: CustomEvent): void;
24
- onKeyUp(event: Event): void;
25
- toggleCalendar(event: Event): void;
26
- openCalendar(): void;
27
- closeCalendar(): void;
28
17
  disconnectedCallback(): void;
29
18
  }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { DateTimeCalendarProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class DateTimeCalendarElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<string>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<string, DateTimeCalendarProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { DateTimePickerProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class DateTimePickerElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<string>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<string, DateTimePickerProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { DateTimeInputProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class DateTimeElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<string>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<string, DateTimeInputProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -18,6 +18,7 @@ export declare class DropdownElement extends LitElement implements WithWidget {
18
18
  private _selectedItem;
19
19
  private _inputRef;
20
20
  private _listRef;
21
+ private _ignoreNextFocus;
21
22
  onDocumentClick: (event: MouseEvent) => void;
22
23
  createRenderRoot(): this;
23
24
  updated(changedProperties: any): void;
@@ -31,6 +32,7 @@ export declare class DropdownElement extends LitElement implements WithWidget {
31
32
  private _onKeyDown;
32
33
  private _onInput;
33
34
  private _filterItems;
35
+ private _onWidgetKeyDown;
34
36
  private _onFocus;
35
37
  private _onFocusOutInput;
36
38
  private _onBlur;
@@ -12,6 +12,7 @@ export declare class RangeCalendarElement extends LitElement implements WithWidg
12
12
  updated(changedProperties: any): void;
13
13
  connectedCallback(): void;
14
14
  render(): import('lit-html').TemplateResult<1>;
15
- valueChanged(event: InputEvent): void;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
16
17
  disconnectedCallback(): void;
17
18
  }
@@ -7,27 +7,12 @@ export declare class RangeDatePickerElement extends LitElement implements WithWi
7
7
  widget: InputWidget<DateRange[]>;
8
8
  formContext: LitFormContext<any>;
9
9
  adapter: InputWidgetAdapter<DateRange[], RangeDatePickerProps>;
10
- dateInput?: HTMLElement;
11
- calendarInput?: HTMLElement;
12
- isCalendarOpen: boolean;
13
- focusDate: string | undefined;
14
10
  subscriptions: Subscription[];
15
- private _ignoreNextFocusOut;
16
- onFocusOut: (event: FocusEvent) => void;
17
- onDocumentClick: (event: MouseEvent) => void;
18
- onDropdownToggle: (event: Event) => void;
19
11
  createRenderRoot(): this;
20
12
  updated(changedProperties: any): void;
21
13
  connectedCallback(): void;
22
14
  render(): import('lit-html').TemplateResult<1>;
23
15
  valueChanged(event: CustomEvent): void;
24
- onBlurCalendar(): void;
25
16
  onInputError(event: CustomEvent): void;
26
- onPillClick(event: CustomEvent): void;
27
- onKeyUp(event: Event): void;
28
- toggleCalendar(event: Event): void;
29
- openCalendar(): void;
30
- closeCalendar(): void;
31
- private closePillsDropdown;
32
17
  disconnectedCallback(): void;
33
18
  }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { DateTimeRange, RangeDateTimeCalendarProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class RangeDateTimeCalendarElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<DateTimeRange[]>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<DateTimeRange[], RangeDateTimeCalendarProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { DateTimeRange, RangeDateTimeInputProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class RangeDateTimeInputElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<DateTimeRange[]>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<DateTimeRange[], RangeDateTimeInputProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { DateTimeRange, RangeDateTimePickerProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class RangeDateTimePickerElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<DateTimeRange[]>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<DateTimeRange[], RangeDateTimePickerProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { TimeRange, RangeTimeInputProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class RangeTimeInputElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<TimeRange[]>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<TimeRange[], RangeTimeInputProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { TimeRange, RangeTimePickerProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class RangeTimePickerElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<TimeRange[]>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<TimeRange[], RangeTimePickerProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { TimePickerProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class TimePickerElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<string>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<string, TimePickerProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { InputWidget, WithWidget } from '@golemui/core';
2
+ import { InputWidgetAdapter, LitFormContext } from '@golemui/lit';
3
+ import { TimeInputProps } from '@golemui/gui-shared/internals';
4
+ import { LitElement } from 'lit';
5
+ import { Subscription } from 'rxjs';
6
+ export declare class TimeElement extends LitElement implements WithWidget {
7
+ widget: InputWidget<string>;
8
+ formContext: LitFormContext<any>;
9
+ adapter: InputWidgetAdapter<string, TimeInputProps>;
10
+ subscriptions: Subscription[];
11
+ createRenderRoot(): this;
12
+ updated(changedProperties: any): void;
13
+ connectedCallback(): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ valueChanged(event: CustomEvent): void;
16
+ onInputError(event: CustomEvent): void;
17
+ disconnectedCallback(): void;
18
+ }
@@ -0,0 +1,297 @@
1
+ import { html as u, LitElement as c } from "lit";
2
+ import { classMap as p } from "lit/directives/class-map.js";
3
+ import "@golemui/core";
4
+ import { property as a, state as h, query as m, customElement as f } from "lit/decorators.js";
5
+ const F = (e) => {
6
+ const t = {
7
+ "gui-list__item": !0,
8
+ "gui-list__item-selected": !!e.selected,
9
+ "gui-list__item-focused": !!e.focused,
10
+ "gui-list__item-disabled": !!e.disabled
11
+ };
12
+ return u`
13
+ <div
14
+ role="option"
15
+ class=${p(t)}
16
+ aria-selected=${e.selected ? "true" : "false"}
17
+ aria-disabled=${e.disabled ? "true" : "false"}
18
+ >
19
+ ${e.template}
20
+ </div>
21
+ `;
22
+ }, b = (e) => e !== null && typeof e == "object" && Object.prototype.hasOwnProperty.call(e, "template") && Object.prototype.hasOwnProperty.call(e, "value");
23
+ function v(e) {
24
+ const t = typeof e;
25
+ return t === "string" || t === "number";
26
+ }
27
+ const g = (e, { valueField: t }) => {
28
+ if (e === null || typeof e != "object")
29
+ return !1;
30
+ const s = e, o = t ?? "value";
31
+ return !!Object.prototype.hasOwnProperty.call(s, o);
32
+ };
33
+ function y(e, { valueField: t }) {
34
+ if (e === null || typeof e != "object")
35
+ throw new Error("Provided value is not an object");
36
+ const s = e, o = t ?? "value", i = Object.prototype.hasOwnProperty.call(s, o) ? o : void 0;
37
+ if (!i)
38
+ throw new Error("No valueField exists on the object");
39
+ return (r) => {
40
+ if (r === null || typeof r != "object")
41
+ throw new Error("Item is not an object");
42
+ const d = r;
43
+ return {
44
+ template: r,
45
+ value: i ? d[i] : "",
46
+ ...typeof d.disabled == "boolean" ? { disabled: d.disabled } : {}
47
+ };
48
+ };
49
+ }
50
+ const I = (e, t) => {
51
+ if (Array.isArray(e) && e.length > 0 && !b(e[0])) {
52
+ if (v(e[0]))
53
+ return e.map((s) => ({
54
+ template: s,
55
+ value: s
56
+ }));
57
+ if (g(e[0], t)) {
58
+ const s = y(e[0], t);
59
+ return e.map(s);
60
+ } else
61
+ throw new Error("Invalid list item shape");
62
+ }
63
+ return e;
64
+ };
65
+ var w = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, l = (e, t, s, o) => {
66
+ for (var i = o > 1 ? void 0 : o ? _(t, s) : t, r = e.length - 1, d; r >= 0; r--)
67
+ (d = e[r]) && (i = (o ? d(t, s, i) : d(i)) || i);
68
+ return o && i && w(t, s, i), i;
69
+ };
70
+ let n = class extends c {
71
+ constructor() {
72
+ super(...arguments), this.uid = void 0, this.touched = !1, this.required = !1, this.disabled = !1, this.readOnly = !1, this.value = void 0, this.valueField = void 0, this.label = void 0, this.hint = void 0, this.items = [], this.itemHeight = void 0, this.height = void 0, this._items = [], this._scrollTop = 0, this._viewportHeight = 0, this._focusedIndex = -1, this.buffer = 5, this.onKeyDown = (e) => {
73
+ if (this.disabled || this.readOnly) return;
74
+ const t = this.itemHeight ?? 40, s = Math.ceil(this._viewportHeight / t), o = this.items.length - 1;
75
+ let i = !1;
76
+ switch (e.key) {
77
+ case "ArrowDown":
78
+ this.setFocusedIndex(this.findEnabledIndex(Math.min(this._focusedIndex + 1, o), 1)), i = !0;
79
+ break;
80
+ case "ArrowUp":
81
+ this.setFocusedIndex(this.findEnabledIndex(Math.max(this._focusedIndex - 1, 0), -1)), i = !0;
82
+ break;
83
+ case "PageDown":
84
+ this.setFocusedIndex(
85
+ this.findEnabledIndex(Math.min(this._focusedIndex + s, o), 1)
86
+ ), i = !0;
87
+ break;
88
+ case "PageUp":
89
+ this.setFocusedIndex(
90
+ this.findEnabledIndex(Math.max(this._focusedIndex - s, 0), -1)
91
+ ), i = !0;
92
+ break;
93
+ case "Home":
94
+ this.setFocusedIndex(this.findEnabledIndex(0, 1)), i = !0;
95
+ break;
96
+ case "End":
97
+ this.setFocusedIndex(this.findEnabledIndex(o, -1)), i = !0;
98
+ break;
99
+ case "Enter":
100
+ case " ": {
101
+ const r = this._items[this._focusedIndex];
102
+ this._focusedIndex >= 0 && r != null && !r.disabled && this.selectItem(r), i = !0;
103
+ break;
104
+ }
105
+ }
106
+ i && e.preventDefault();
107
+ }, this.onFocus = () => {
108
+ if (!this.value || !this.items.length) return;
109
+ const e = this._items.findIndex((t) => t.value === this.value);
110
+ this._focusedIndex = e, this.scrollToIndex(e), this.dispatchEvent(
111
+ new CustomEvent("gui-focus-change", {
112
+ detail: { index: e },
113
+ bubbles: !0,
114
+ composed: !0
115
+ })
116
+ );
117
+ }, this.onFocusOut = (e) => {
118
+ e.relatedTarget && this.contains(e.relatedTarget) || (this._focusedIndex = -1, this.dispatchEvent(
119
+ new CustomEvent("gui-focus-change", {
120
+ detail: { index: -1 },
121
+ bubbles: !0,
122
+ composed: !0
123
+ })
124
+ ), this.dispatchEvent(new CustomEvent("blur", { bubbles: !0, composed: !0 })));
125
+ };
126
+ }
127
+ willUpdate(e) {
128
+ super.willUpdate(e), e.has("items") && this.updateItems(), (e.has("items") || e.has("_scrollTop") || e.has("height")) && this.emitRangeChange(), this.syncHostAria();
129
+ }
130
+ syncHostAria() {
131
+ this.setAttribute("role", "listbox"), this.tabIndex = this.disabled ? -1 : 0;
132
+ const e = (t, s) => {
133
+ s === null ? this.removeAttribute(t) : this.setAttribute(t, s);
134
+ };
135
+ e("aria-required", this.required ? "true" : null), e("aria-disabled", this.disabled || this.readOnly ? "true" : null), e(
136
+ "aria-activedescendant",
137
+ this._focusedIndex >= 0 ? `${this.uid}-item-${this._focusedIndex}` : null
138
+ ), e("aria-label", this.label ?? null), e("aria-description", this.hint ?? null);
139
+ }
140
+ connectedCallback() {
141
+ super.connectedCallback(), this.addEventListener("keydown", this.onKeyDown), this.addEventListener("focus", this.onFocus), this.addEventListener("focusout", this.onFocusOut);
142
+ }
143
+ firstUpdated() {
144
+ this.measureViewport(), new ResizeObserver(() => this.measureViewport()).observe(this.viewportElement);
145
+ }
146
+ render() {
147
+ const e = this.height ?? 300, t = this.itemHeight ?? 40, s = (this.items?.length ?? 0) * t, { offsetY: o } = this.calculateRange();
148
+ return u`
149
+ <div
150
+ class="gui-list__scroll-viewport"
151
+ style="max-height: ${e}px; min-height: 40px; overflow-y: auto; position: relative; display: block;"
152
+ @scroll="${this.onScroll}"
153
+ >
154
+ <div
155
+ class="gui-list__spacer"
156
+ style="height: ${s}px; width: 1px; opacity: 0; pointer-events: none;"
157
+ ></div>
158
+
159
+ <div
160
+ class="gui-list__content"
161
+ style="transform: translateY(${o}px); position: absolute; top: 0; left: 0; width: 100%;"
162
+ >
163
+ <slot></slot>
164
+ </div>
165
+ </div>
166
+ `;
167
+ }
168
+ focusItemAtIndex(e) {
169
+ this._focusedIndex = e;
170
+ }
171
+ scrollToSelectedIndex() {
172
+ const e = this._items.findIndex((t) => t.value === this.value);
173
+ this.scrollToIndex(e);
174
+ }
175
+ scrollToIndex(e) {
176
+ const t = this.itemHeight ?? 40, s = this.height ?? 300, o = e * t, i = o + t, r = this.viewportElement.scrollTop, d = r + s;
177
+ o < r ? this.viewportElement.scrollTop = o : i > d && (this.viewportElement.scrollTop = i - s);
178
+ }
179
+ selectItem(e) {
180
+ this.dispatchEvent(
181
+ new CustomEvent("change", {
182
+ detail: { value: e.value },
183
+ bubbles: !0,
184
+ composed: !0
185
+ })
186
+ );
187
+ }
188
+ /**
189
+ * First enabled item index walking from `from` in `direction`, or -1 when
190
+ * every item that way is disabled — keyboard navigation skips disabled rows.
191
+ */
192
+ findEnabledIndex(e, t) {
193
+ for (let s = e; s >= 0 && s < this._items.length; s += t)
194
+ if (!this._items[s]?.disabled) return s;
195
+ return -1;
196
+ }
197
+ setFocusedIndex(e) {
198
+ e < 0 || e >= this.items.length || (this._focusedIndex = e, this.scrollToIndex(e), this.dispatchEvent(
199
+ new CustomEvent("gui-focus-change", {
200
+ detail: { index: e },
201
+ bubbles: !0,
202
+ composed: !0
203
+ })
204
+ ));
205
+ }
206
+ updateItems() {
207
+ this._items = I(this.items, { valueField: this.valueField }), this.dispatchEvent(
208
+ new CustomEvent("gui-update-items", {
209
+ detail: this._items,
210
+ bubbles: !0,
211
+ composed: !0
212
+ })
213
+ );
214
+ }
215
+ emitRangeChange() {
216
+ const { startIndex: e, endIndex: t } = this.calculateRange();
217
+ this.dispatchEvent(
218
+ new CustomEvent("gui-range-change", {
219
+ detail: { startIndex: e, endIndex: t },
220
+ bubbles: !0,
221
+ composed: !0
222
+ })
223
+ );
224
+ }
225
+ measureViewport() {
226
+ this.viewportElement && (this._viewportHeight = this.viewportElement.offsetHeight, this.emitRangeChange());
227
+ }
228
+ onScroll(e) {
229
+ const t = e.target;
230
+ this._scrollTop = t.scrollTop;
231
+ }
232
+ calculateRange() {
233
+ const e = this.itemHeight ?? 40, t = this.items?.length ?? 0, s = Math.ceil(this._viewportHeight / e), o = Math.floor(this._scrollTop / e), i = Math.max(0, o - this.buffer), r = Math.min(t, o + s + this.buffer), d = i * e;
234
+ return { startIndex: i, endIndex: r, offsetY: d };
235
+ }
236
+ disconnectedCallback() {
237
+ super.disconnectedCallback(), this.removeEventListener("keydown", this.onKeyDown), this.removeEventListener("focus", this.onFocus), this.removeEventListener("focusout", this.onFocusOut);
238
+ }
239
+ };
240
+ l([
241
+ a({ type: String })
242
+ ], n.prototype, "uid", 2);
243
+ l([
244
+ a({ type: Boolean })
245
+ ], n.prototype, "touched", 2);
246
+ l([
247
+ a({ type: Boolean })
248
+ ], n.prototype, "required", 2);
249
+ l([
250
+ a({ type: Boolean })
251
+ ], n.prototype, "disabled", 2);
252
+ l([
253
+ a({ type: Boolean, attribute: "readonly" })
254
+ ], n.prototype, "readOnly", 2);
255
+ l([
256
+ a({ type: String })
257
+ ], n.prototype, "value", 2);
258
+ l([
259
+ a({ type: String })
260
+ ], n.prototype, "valueField", 2);
261
+ l([
262
+ a({ type: String })
263
+ ], n.prototype, "label", 2);
264
+ l([
265
+ a({ type: String })
266
+ ], n.prototype, "hint", 2);
267
+ l([
268
+ a({ type: Array })
269
+ ], n.prototype, "items", 2);
270
+ l([
271
+ a({ type: Number })
272
+ ], n.prototype, "itemHeight", 2);
273
+ l([
274
+ a({ type: Number })
275
+ ], n.prototype, "height", 2);
276
+ l([
277
+ h()
278
+ ], n.prototype, "_items", 2);
279
+ l([
280
+ h()
281
+ ], n.prototype, "_scrollTop", 2);
282
+ l([
283
+ h()
284
+ ], n.prototype, "_viewportHeight", 2);
285
+ l([
286
+ h()
287
+ ], n.prototype, "_focusedIndex", 2);
288
+ l([
289
+ m(".gui-list__scroll-viewport")
290
+ ], n.prototype, "viewportElement", 2);
291
+ n = l([
292
+ f("gui-list")
293
+ ], n);
294
+ typeof customElements < "u" && !customElements.get("gui-list") && customElements.define("gui-list", n);
295
+ export {
296
+ F as d
297
+ };