@sentropic/design-system-angular 0.36.58 → 0.36.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;;AA0B5D,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAU,eAAe,GAAG,UAAU,CAAC;IACpC,aAAa,GAAG,UAAU,CAAC;IACzB,OAAO,GAAoB,WAAW,CAAC;IACvC,MAAM,GAAG,MAAM,CAAC;IAChB,eAAe,GAAG,sBAAsB,CAAC;IACzC,YAAY,GAAG,eAAe,CAAC;IAC/B,YAAY,GAAG,eAAe,CAAC;IAC/B,WAAW,GAAwB,SAAS,CAAC;IAC7C,WAAW,GAAwB,OAAO,CAAC;IACpC,UAAU,CAAU;IAEtC,IAAI,SAAS;QACX,OAAO,CAAC,aAAa,EAAE,gBAAgB,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpG,CAAC;wGAdU,QAAQ;4FAAR,QAAQ,uTANT;;;;GAIT;;4FAEU,QAAQ;kBATpB,SAAS;mBAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE;;;;GAIT;iBACF;;sBAIE,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;uBAAC,OAAO"}
1
+ {"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,86 @@
1
+ import { ElementRef, EventEmitter } from "@angular/core";
2
+ import type { AfterViewInit, OnChanges, OnDestroy, SimpleChanges } from "@angular/core";
1
3
  import type { MenuItem } from "./Menu.js";
2
4
  import * as i0 from "@angular/core";
3
5
  export type MenuPopoverPlacement = "top-start" | "top-end" | "bottom-start" | "bottom-end";
6
+ export type MenuPopoverAlign = "start" | "end" | "center";
7
+ export type MenuPopoverRect = {
8
+ top: number;
9
+ bottom: number;
10
+ left: number;
11
+ right: number;
12
+ width: number;
13
+ };
14
+ export type MenuPopoverViewport = {
15
+ height: number;
16
+ scrollX: number;
17
+ scrollY: number;
18
+ };
19
+ export type MenuPopoverPosition = {
20
+ top: number;
21
+ left: number;
22
+ maxHeight: number;
23
+ alignEnd: boolean;
24
+ alignCenter: boolean;
25
+ };
26
+ /**
27
+ * Pure position solver — mirrors Svelte's `computePosition()` / React's
28
+ * `computePosition` callback so it can be unit-tested without a real
29
+ * `window`/DOM (this package's tests run in a Node environment, no jsdom).
30
+ */
31
+ export declare function computeMenuPopoverPosition(rect: MenuPopoverRect, placement: MenuPopoverPlacement, align: MenuPopoverAlign | undefined, viewport: MenuPopoverViewport): MenuPopoverPosition;
32
+ export declare function menuPopoverIsWithin(event: {
33
+ composedPath?: () => EventTarget[];
34
+ target: EventTarget | null;
35
+ }, node: Element | null | undefined): boolean;
4
36
  export type MenuPopoverProps = {
5
37
  items?: MenuItem[];
6
38
  open?: boolean;
39
+ trigger?: HTMLElement | null;
7
40
  placement?: MenuPopoverPlacement;
41
+ align?: MenuPopoverAlign;
42
+ label?: string;
8
43
  class?: string;
44
+ closeOnOutside?: boolean;
45
+ closeOnEscape?: boolean;
9
46
  };
10
- export declare class MenuPopover {
47
+ export declare class MenuPopover implements AfterViewInit, OnChanges, OnDestroy {
11
48
  static readonly stComponentName = "MenuPopover";
12
49
  readonly componentName = "MenuPopover";
50
+ /** Convenience (not in the Svelte contract): renders a <st-menu> from `items` instead of projected content. */
13
51
  items?: MenuItem[];
14
- open?: boolean;
15
- placement?: MenuPopoverPlacement;
52
+ open: boolean;
53
+ /** Anchor element used for position computation and outside-click exclusion (Svelte-canonical). */
54
+ trigger: HTMLElement | null;
55
+ placement: MenuPopoverPlacement;
56
+ align?: MenuPopoverAlign;
57
+ /** Accessible name for the panel (Svelte-canonical: applied as aria-label on role="dialog"). */
58
+ label: string;
16
59
  classInput?: string;
60
+ closeOnOutside: boolean;
61
+ closeOnEscape: boolean;
62
+ readonly openChange: EventEmitter<boolean>;
63
+ panel?: ElementRef<HTMLDivElement>;
64
+ top: number;
65
+ left: number;
66
+ maxHeight: number;
67
+ alignEnd: boolean;
68
+ alignCenter: boolean;
69
+ private listenersActive;
70
+ private readonly onScroll;
71
+ private readonly onResize;
72
+ private readonly onPointerDown;
73
+ private readonly onKeyDown;
17
74
  get hostClass(): string;
75
+ get panelStyle(): string;
76
+ ngAfterViewInit(): void;
77
+ ngOnChanges(changes: SimpleChanges): void;
78
+ ngOnDestroy(): void;
79
+ computePosition(): void;
80
+ close(): void;
81
+ private registerWindowListeners;
82
+ private unregisterWindowListeners;
18
83
  static ɵfac: i0.ɵɵFactoryDeclaration<MenuPopover, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<MenuPopover, "st-menu-popover", never, { "items": { "alias": "items"; "required": false; }; "open": { "alias": "open"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<MenuPopover, "st-menu-popover", never, { "items": { "alias": "items"; "required": false; }; "open": { "alias": "open"; "required": false; }; "trigger": { "alias": "trigger"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "align": { "alias": "align"; "required": false; }; "label": { "alias": "label"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; "closeOnOutside": { "alias": "closeOnOutside"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; }, { "openChange": "openChange"; }, never, ["*"], true, never>;
20
85
  }
21
86
  //# sourceMappingURL=MenuPopover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;;AAE1C,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,SAAS,GAAG,cAAc,GAAG,YAAY,CAAC;AAE3F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAUa,WAAW;IACtB,MAAM,CAAC,QAAQ,CAAC,eAAe,iBAAiB;IAChD,QAAQ,CAAC,aAAa,iBAAiB;IAC5B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,oBAAoB,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEtC,IAAI,SAAS,IAAI,MAAM,CAEtB;yCAVU,WAAW;2CAAX,WAAW;CAWvB"}
1
+ {"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"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"}
@@ -1,39 +1,233 @@
1
- import { Component, Input as NgInput } from "@angular/core";
1
+ import { Component, ElementRef, EventEmitter, Input as NgInput, Output, ViewChild, } from "@angular/core";
2
2
  import { classNames } from "./classNames.js";
3
3
  import { Menu } from "./Menu.js";
4
4
  import * as i0 from "@angular/core";
5
+ // Anchor spacing between panel and trigger.
6
+ const GAP = 4;
7
+ // Anti-overflow margin between the panel and the viewport edge.
8
+ const VIEWPORT_MARGIN = 8;
9
+ // Height floor: below this threshold we keep a usable scrollable window rather
10
+ // than a crushed menu (rare case of a trigger glued to the edge).
11
+ const MIN_HEIGHT = 160;
12
+ /**
13
+ * Pure position solver — mirrors Svelte's `computePosition()` / React's
14
+ * `computePosition` callback so it can be unit-tested without a real
15
+ * `window`/DOM (this package's tests run in a Node environment, no jsdom).
16
+ */
17
+ export function computeMenuPopoverPosition(rect, placement, align, viewport) {
18
+ const verticalUp = placement === "top-start" || placement === "top-end";
19
+ const horizontalEnd = placement === "bottom-end" || placement === "top-end";
20
+ const resolvedAlign = align ?? (horizontalEnd ? "end" : "start");
21
+ const alignEnd = resolvedAlign === "end";
22
+ const alignCenter = resolvedAlign === "center";
23
+ let top;
24
+ let maxHeight;
25
+ if (verticalUp) {
26
+ // Panel bottom edge sits above the trigger (transform handles the flip);
27
+ // available space is what's ABOVE the trigger.
28
+ top = rect.top + viewport.scrollY - GAP;
29
+ maxHeight = Math.max(rect.top - GAP - VIEWPORT_MARGIN, MIN_HEIGHT);
30
+ }
31
+ else {
32
+ top = rect.bottom + viewport.scrollY + GAP;
33
+ // Space actually available BELOW the trigger — `max-height: 100vh` alone
34
+ // ignores the panel's offset and overflows past the bottom edge.
35
+ maxHeight = Math.max(viewport.height - rect.bottom - GAP - VIEWPORT_MARGIN, MIN_HEIGHT);
36
+ }
37
+ let left;
38
+ if (resolvedAlign === "end") {
39
+ left = rect.right + viewport.scrollX;
40
+ }
41
+ else if (resolvedAlign === "center") {
42
+ left = rect.left + viewport.scrollX + rect.width / 2;
43
+ }
44
+ else {
45
+ left = rect.left + viewport.scrollX;
46
+ }
47
+ return { top, left, maxHeight, alignEnd, alignCenter };
48
+ }
49
+ export function menuPopoverIsWithin(event, node) {
50
+ if (!node)
51
+ return false;
52
+ const path = typeof event.composedPath === "function" ? event.composedPath() : [];
53
+ if (path.includes(node))
54
+ return true;
55
+ const target = event.target;
56
+ return Boolean(target && node.contains(target));
57
+ }
5
58
  export class MenuPopover {
6
59
  static stComponentName = "MenuPopover";
7
60
  componentName = "MenuPopover";
61
+ /** Convenience (not in the Svelte contract): renders a <st-menu> from `items` instead of projected content. */
8
62
  items;
9
- open;
10
- placement;
63
+ open = false;
64
+ /** Anchor element used for position computation and outside-click exclusion (Svelte-canonical). */
65
+ trigger = null;
66
+ placement = "bottom-start";
67
+ align;
68
+ /** Accessible name for the panel (Svelte-canonical: applied as aria-label on role="dialog"). */
69
+ label;
11
70
  classInput;
71
+ closeOnOutside = true;
72
+ closeOnEscape = true;
73
+ openChange = new EventEmitter();
74
+ panel;
75
+ top = 0;
76
+ left = 0;
77
+ maxHeight = 0;
78
+ alignEnd = false;
79
+ alignCenter = false;
80
+ listenersActive = false;
81
+ onScroll = () => this.computePosition();
82
+ onResize = () => this.computePosition();
83
+ onPointerDown = (event) => {
84
+ if (!this.open || !this.closeOnOutside)
85
+ return;
86
+ if (menuPopoverIsWithin(event, this.panel?.nativeElement))
87
+ return;
88
+ if (menuPopoverIsWithin(event, this.trigger))
89
+ return;
90
+ this.close();
91
+ };
92
+ onKeyDown = (event) => {
93
+ if (!this.open || !this.closeOnEscape)
94
+ return;
95
+ if (event.key === "Escape") {
96
+ event.preventDefault();
97
+ this.close();
98
+ }
99
+ };
12
100
  get hostClass() {
13
- return ["st-menuPopover", this.classInput].filter(Boolean).join(" ");
101
+ return classNames("st-menuPopover", `st-menuPopover--${this.placement}`, this.alignEnd ? "st-menuPopover--alignEnd" : null, this.alignCenter ? "st-menuPopover--alignCenter" : null, this.classInput);
102
+ }
103
+ get panelStyle() {
104
+ return `top: ${this.top}px; left: ${this.left}px;${this.maxHeight ? ` max-height: ${this.maxHeight}px;` : ""}`;
105
+ }
106
+ ngAfterViewInit() {
107
+ this.registerWindowListeners();
108
+ if (this.open)
109
+ this.computePosition();
110
+ }
111
+ ngOnChanges(changes) {
112
+ if (typeof window === "undefined")
113
+ return;
114
+ if (!this.open)
115
+ return;
116
+ if (changes["open"] || changes["trigger"] || changes["placement"] || changes["align"]) {
117
+ // Recompute after Angular renders the panel for the new state.
118
+ queueMicrotask(() => {
119
+ if (this.open)
120
+ this.computePosition();
121
+ });
122
+ }
123
+ }
124
+ ngOnDestroy() {
125
+ this.unregisterWindowListeners();
126
+ }
127
+ computePosition() {
128
+ if (!this.trigger)
129
+ return;
130
+ if (typeof window === "undefined")
131
+ return;
132
+ const rect = this.trigger.getBoundingClientRect();
133
+ const pos = computeMenuPopoverPosition({ top: rect.top, bottom: rect.bottom, left: rect.left, right: rect.right, width: rect.width }, this.placement, this.align, { height: window.innerHeight, scrollX: window.scrollX, scrollY: window.scrollY });
134
+ this.top = pos.top;
135
+ this.left = pos.left;
136
+ this.maxHeight = pos.maxHeight;
137
+ this.alignEnd = pos.alignEnd;
138
+ this.alignCenter = pos.alignCenter;
139
+ }
140
+ close() {
141
+ if (!this.open)
142
+ return;
143
+ this.open = false;
144
+ this.openChange.emit(false);
145
+ }
146
+ registerWindowListeners() {
147
+ if (this.listenersActive)
148
+ return;
149
+ if (typeof window === "undefined")
150
+ return;
151
+ this.listenersActive = true;
152
+ window.addEventListener("scroll", this.onScroll, true);
153
+ window.addEventListener("resize", this.onResize);
154
+ window.addEventListener("pointerdown", this.onPointerDown);
155
+ window.addEventListener("keydown", this.onKeyDown);
156
+ }
157
+ unregisterWindowListeners() {
158
+ if (!this.listenersActive)
159
+ return;
160
+ this.listenersActive = false;
161
+ if (typeof window === "undefined")
162
+ return;
163
+ window.removeEventListener("scroll", this.onScroll, true);
164
+ window.removeEventListener("resize", this.onResize);
165
+ window.removeEventListener("pointerdown", this.onPointerDown);
166
+ window.removeEventListener("keydown", this.onKeyDown);
14
167
  }
15
168
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: MenuPopover, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.17", type: MenuPopover, isStandalone: true, selector: "st-menu-popover", inputs: { items: "items", open: "open", placement: "placement", classInput: ["class", "classInput"] }, ngImport: i0, template: `
17
- <div [attr.data-st-component]="componentName" [class]="hostClass">
18
- <ng-content></ng-content>
19
- </div>
20
- `, isInline: true, styles: [":host { display: contents; }"] });
169
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: MenuPopover, isStandalone: true, selector: "st-menu-popover", inputs: { items: "items", open: "open", trigger: "trigger", placement: "placement", align: "align", label: "label", classInput: ["class", "classInput"], closeOnOutside: "closeOnOutside", closeOnEscape: "closeOnEscape" }, outputs: { openChange: "openChange" }, viewQueries: [{ propertyName: "panel", first: true, predicate: ["panel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
170
+ @if (open) {
171
+ <div
172
+ #panel
173
+ [attr.data-st-component]="componentName"
174
+ [class]="hostClass"
175
+ role="dialog"
176
+ [attr.aria-label]="label"
177
+ [style]="panelStyle"
178
+ >
179
+ @if (items && items.length) {
180
+ <st-menu [items]="items" role="presentation"></st-menu>
181
+ } @else {
182
+ <ng-content></ng-content>
183
+ }
184
+ </div>
185
+ }
186
+ `, isInline: true, styles: [":host { display: contents; }"], dependencies: [{ kind: "component", type: Menu, selector: "st-menu", inputs: ["items", "dense", "role", "class"], outputs: ["select"] }] });
21
187
  }
22
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: MenuPopover, decorators: [{
23
189
  type: Component,
24
- args: [{ selector: "st-menu-popover", standalone: true, template: `
25
- <div [attr.data-st-component]="componentName" [class]="hostClass">
26
- <ng-content></ng-content>
27
- </div>
190
+ args: [{ selector: "st-menu-popover", standalone: true, imports: [Menu], template: `
191
+ @if (open) {
192
+ <div
193
+ #panel
194
+ [attr.data-st-component]="componentName"
195
+ [class]="hostClass"
196
+ role="dialog"
197
+ [attr.aria-label]="label"
198
+ [style]="panelStyle"
199
+ >
200
+ @if (items && items.length) {
201
+ <st-menu [items]="items" role="presentation"></st-menu>
202
+ } @else {
203
+ <ng-content></ng-content>
204
+ }
205
+ </div>
206
+ }
28
207
  `, styles: [":host { display: contents; }"] }]
29
208
  }], propDecorators: { items: [{
30
209
  type: NgInput
31
210
  }], open: [{
32
211
  type: NgInput
212
+ }], trigger: [{
213
+ type: NgInput
33
214
  }], placement: [{
34
215
  type: NgInput
216
+ }], align: [{
217
+ type: NgInput
218
+ }], label: [{
219
+ type: NgInput
35
220
  }], classInput: [{
36
221
  type: NgInput,
37
222
  args: ["class"]
223
+ }], closeOnOutside: [{
224
+ type: NgInput
225
+ }], closeOnEscape: [{
226
+ type: NgInput
227
+ }], openChange: [{
228
+ type: Output
229
+ }], panel: [{
230
+ type: ViewChild,
231
+ args: ["panel"]
38
232
  }] } });
39
233
  //# sourceMappingURL=MenuPopover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;;AAuBjC,MAAM,OAAO,WAAW;IACtB,MAAM,CAAU,eAAe,GAAG,aAAa,CAAC;IACvC,aAAa,GAAG,aAAa,CAAC;IAC5B,KAAK,CAAc;IACnB,IAAI,CAAW;IACf,SAAS,CAAwB;IAC1B,UAAU,CAAU;IAEtC,IAAI,SAAS;QACX,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;wGAVU,WAAW;4FAAX,WAAW,kLANZ;;;;GAIT;;4FAEU,WAAW;kBAVvB,SAAS;+BACE,iBAAiB,cACf,IAAI,YAEN;;;;GAIT;;sBAKA,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;uBAAC,OAAO"}
1
+ {"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { EventEmitter } from "@angular/core";
2
+ import { type AbsoluteDraft, type TimeRange, type TimeRangeMode, type TimeRangePreset } from "./timeRange.js";
3
+ import * as i0 from "@angular/core";
4
+ export type TimeRangePickerSize = "sm" | "md" | "lg";
5
+ export type TimeRangePickerPlacement = "bottom-start" | "bottom-end" | "top-start" | "top-end";
6
+ export type TimeRangePickerAlign = "start" | "end" | "center";
7
+ export type TimeRangePickerProps = {
8
+ value?: TimeRange;
9
+ defaultValue?: TimeRange;
10
+ presets?: TimeRangePreset[];
11
+ min?: number;
12
+ max?: number;
13
+ locale?: string;
14
+ timeFormat?: "24" | "12";
15
+ timeStep?: number;
16
+ calendarMonths?: 1 | 2;
17
+ disabled?: boolean;
18
+ label?: string;
19
+ placement?: TimeRangePickerPlacement;
20
+ align?: TimeRangePickerAlign;
21
+ size?: TimeRangePickerSize;
22
+ class?: string;
23
+ };
24
+ type ResolvedPreset = {
25
+ token: string;
26
+ label: string;
27
+ disabled: boolean;
28
+ };
29
+ export declare class TimeRangePicker {
30
+ static readonly stComponentName = "TimeRangePicker";
31
+ readonly componentName = "TimeRangePicker";
32
+ value?: TimeRange;
33
+ defaultValue?: TimeRange;
34
+ presets?: TimeRangePreset[];
35
+ min?: number;
36
+ max?: number;
37
+ locale?: string;
38
+ timeFormat?: "24" | "12";
39
+ timeStep?: number;
40
+ calendarMonths?: 1 | 2;
41
+ disabled?: boolean;
42
+ label?: string;
43
+ placement?: TimeRangePickerPlacement;
44
+ align?: TimeRangePickerAlign;
45
+ size?: TimeRangePickerSize;
46
+ classInput?: string;
47
+ formatRange?: (value: TimeRange, locale: string) => string;
48
+ formatPresetLabel?: (token: string, locale: string) => string;
49
+ valueChange: EventEmitter<TimeRange>;
50
+ change: EventEmitter<TimeRange>;
51
+ open: boolean;
52
+ activeTab: TimeRangeMode;
53
+ draft: AbsoluteDraft;
54
+ /** Uncontrolled fallback, seeded on first read from `defaultValue`. */
55
+ private internalValue?;
56
+ private get resolvedLocale();
57
+ private get isFr();
58
+ /** The committed range: controlled `value` wins, else internal/uncontrolled. */
59
+ get currentValue(): TimeRange;
60
+ get hostClass(): string;
61
+ get popoverClass(): string;
62
+ get triggerLabel(): string;
63
+ get tabItems(): Array<{
64
+ value: string;
65
+ label: string;
66
+ }>;
67
+ get fromLabel(): string;
68
+ get toLabel(): string;
69
+ get applyLabel(): string;
70
+ get cancelLabel(): string;
71
+ get selectedRelativeToken(): string | null;
72
+ /** Presets resolved to labels + a disabled flag when they'd fall below `min`. */
73
+ get resolvedPresets(): ResolvedPreset[];
74
+ /** `AbsoluteDraft` times are optional; the TimePicker input requires a string. */
75
+ get fromTimeValue(): string;
76
+ get toTimeValue(): string;
77
+ get calendarValue(): [string | null, string | null];
78
+ get minDay(): string | null;
79
+ get maxDay(): string | null;
80
+ /** Null when the draft is valid; otherwise the user-facing reason. */
81
+ get errorText(): string | null;
82
+ get canApply(): boolean;
83
+ toggle(): void;
84
+ openPanel(): void;
85
+ close(): void;
86
+ /** Cancel discards the draft and emits nothing. */
87
+ cancel(): void;
88
+ onTabChange: (tab: string) => void;
89
+ onFromTimeChange: (time: string) => void;
90
+ onToTimeChange: (time: string) => void;
91
+ onCalendarChange: (next: unknown) => void;
92
+ makePresetSelect(preset: ResolvedPreset): () => void;
93
+ /** Relative presets resolve, emit and close immediately. */
94
+ selectPreset(token: string): void;
95
+ /** Absolute mode is staged: nothing emits until Apply. */
96
+ apply(): void;
97
+ private resolveToken;
98
+ private commit;
99
+ static ɵfac: i0.ɵɵFactoryDeclaration<TimeRangePicker, never>;
100
+ static ɵcmp: i0.ɵɵComponentDeclaration<TimeRangePicker, "st-time-range-picker", never, { "value": { "alias": "value"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "presets": { "alias": "presets"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "timeFormat": { "alias": "timeFormat"; "required": false; }; "timeStep": { "alias": "timeStep"; "required": false; }; "calendarMonths": { "alias": "calendarMonths"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "align": { "alias": "align"; "required": false; }; "size": { "alias": "size"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; "formatRange": { "alias": "formatRange"; "required": false; }; "formatPresetLabel": { "alias": "formatPresetLabel"; "required": false; }; }, { "valueChange": "valueChange"; "change": "change"; }, never, never, true, never>;
101
+ }
102
+ export {};
103
+ //# sourceMappingURL=TimeRangePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeRangePicker.d.ts","sourceRoot":"","sources":["../src/TimeRangePicker.ts"],"names":[],"mappings":"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"}