@agorapulse/ui-components 22.1.8 → 22.2.1
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.
- package/agorapulse-ui-components-22.2.1.tgz +0 -0
- package/fesm2022/agorapulse-ui-components-action-dropdown.mjs +2 -2
- package/fesm2022/agorapulse-ui-components-action-dropdown.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-autocomplete.mjs +1 -1
- package/fesm2022/agorapulse-ui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-datepicker.mjs +655 -219
- package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-directives.mjs +169 -2
- package/fesm2022/agorapulse-ui-components-directives.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-dropdown-panel.mjs +3 -1
- package/fesm2022/agorapulse-ui-components-dropdown-panel.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs +15 -8
- package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-input-group.mjs +6 -4
- package/fesm2022/agorapulse-ui-components-input-group.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-input-search.mjs +1 -1
- package/fesm2022/agorapulse-ui-components-input-search.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-labels-selector.mjs +1 -1
- package/fesm2022/agorapulse-ui-components-labels-selector.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-neo-datepicker.mjs +2 -2
- package/fesm2022/agorapulse-ui-components-neo-datepicker.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-phone-number-input.mjs +1 -1
- package/fesm2022/agorapulse-ui-components-phone-number-input.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-popover.mjs +7 -0
- package/fesm2022/agorapulse-ui-components-popover.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-select.mjs +8 -39
- package/fesm2022/agorapulse-ui-components-select.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components.mjs +1 -3
- package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
- package/package.json +2 -6
- package/types/agorapulse-ui-components-datepicker.d.ts +313 -88
- package/types/agorapulse-ui-components-directives.d.ts +73 -1
- package/types/agorapulse-ui-components-dropdown-panel.d.ts +3 -1
- package/types/agorapulse-ui-components-input-group.d.ts +3 -1
- package/types/agorapulse-ui-components-neo-datepicker.d.ts +2 -2
- package/types/agorapulse-ui-components-popover.d.ts +7 -0
- package/types/agorapulse-ui-components-select.d.ts +3 -4
- package/types/agorapulse-ui-components.d.ts +1 -4
- package/agorapulse-ui-components-22.1.8.tgz +0 -0
- package/fesm2022/agorapulse-ui-components-date-range-picker.mjs +0 -163
- package/fesm2022/agorapulse-ui-components-date-range-picker.mjs.map +0 -1
- package/types/agorapulse-ui-components-date-range-picker.d.ts +0 -75
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agorapulse/ui-components",
|
|
3
3
|
"description": "Agorapulse UI Components Library",
|
|
4
|
-
"version": "22.1
|
|
4
|
+
"version": "22.2.1",
|
|
5
5
|
"author": "Benoit Hediard",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@floating-ui/dom": "^1.8.0",
|
|
24
24
|
"@ng-select/ng-select": "^23.0.0",
|
|
25
25
|
"@agorapulse/ngx-daterangepicker-material": "^6.0.5",
|
|
26
|
-
"dayjs": "^1.11.
|
|
26
|
+
"dayjs": "^1.11.8",
|
|
27
27
|
"es-toolkit": "1.39.8",
|
|
28
28
|
"ngxtension": "7.2.0"
|
|
29
29
|
},
|
|
@@ -81,10 +81,6 @@
|
|
|
81
81
|
"types": "./types/agorapulse-ui-components-counter.d.ts",
|
|
82
82
|
"default": "./fesm2022/agorapulse-ui-components-counter.mjs"
|
|
83
83
|
},
|
|
84
|
-
"./date-range-picker": {
|
|
85
|
-
"types": "./types/agorapulse-ui-components-date-range-picker.d.ts",
|
|
86
|
-
"default": "./fesm2022/agorapulse-ui-components-date-range-picker.mjs"
|
|
87
|
-
},
|
|
88
84
|
"./datepicker": {
|
|
89
85
|
"types": "./types/agorapulse-ui-components-datepicker.d.ts",
|
|
90
86
|
"default": "./fesm2022/agorapulse-ui-components-datepicker.mjs"
|
|
@@ -3,9 +3,107 @@ import * as _angular_core from '@angular/core';
|
|
|
3
3
|
import { OnInit, OnChanges, AfterViewInit, ChangeDetectorRef, EventEmitter, SimpleChanges, TemplateRef } from '@angular/core';
|
|
4
4
|
import { DropdownOverlay } from '@agorapulse/ui-components/dropdown-base';
|
|
5
5
|
import dayjs from 'dayjs';
|
|
6
|
+
import { ButtonConfig } from '@agorapulse/ui-components/button';
|
|
6
7
|
import { SymbolRegistry } from '@agorapulse/ui-symbol';
|
|
7
8
|
import { DaterangepickerComponent } from '@agorapulse/ngx-daterangepicker-material';
|
|
8
|
-
import {
|
|
9
|
+
import { FormValueControl } from '@angular/forms/signals';
|
|
10
|
+
|
|
11
|
+
/** The month a calendar should move to. */
|
|
12
|
+
interface DatepickerMonth {
|
|
13
|
+
/** Zero-based, as dayjs and the vendor both count months. */
|
|
14
|
+
month: number;
|
|
15
|
+
year: number;
|
|
16
|
+
}
|
|
17
|
+
/** A cell of the grid, carrying the states the template would otherwise recompute on every render. */
|
|
18
|
+
interface MonthOption {
|
|
19
|
+
month: number;
|
|
20
|
+
label: string;
|
|
21
|
+
ariaLabel: string;
|
|
22
|
+
disabled: boolean;
|
|
23
|
+
config: ButtonConfig;
|
|
24
|
+
}
|
|
25
|
+
/** A cell of the year grid the panel shows once the year is clicked. */
|
|
26
|
+
interface YearOption {
|
|
27
|
+
year: number;
|
|
28
|
+
disabled: boolean;
|
|
29
|
+
config: ButtonConfig;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A year of months in a dropdown, so a calendar can be moved somewhere far without paging through
|
|
33
|
+
* the months in between. Driven by `apDropdownTrigger` on whatever the caller wants as a trigger.
|
|
34
|
+
*
|
|
35
|
+
* The year is browsable inside the panel; only clicking a month commits.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```html
|
|
39
|
+
* <ap-button [apDropdownTrigger]="picker">{{ label }}</ap-button>
|
|
40
|
+
* <ap-datepicker-month-picker
|
|
41
|
+
* #picker
|
|
42
|
+
* [month]="month"
|
|
43
|
+
* [year]="year"
|
|
44
|
+
* (monthSelected)="goTo($event)" />
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare class DatepickerMonthPickerComponent implements DropdownOverlay {
|
|
48
|
+
/** The month the calendar is showing, zero-based. Highlighted in the grid. */
|
|
49
|
+
readonly month: _angular_core.InputSignal<number>;
|
|
50
|
+
/** The year the calendar is showing. The panel opens on it, and returns to it when it moves. */
|
|
51
|
+
readonly year: _angular_core.InputSignal<number>;
|
|
52
|
+
readonly locale: _angular_core.InputSignal<string>;
|
|
53
|
+
readonly minDate: _angular_core.InputSignal<dayjs.Dayjs | undefined>;
|
|
54
|
+
readonly maxDate: _angular_core.InputSignal<dayjs.Dayjs | undefined>;
|
|
55
|
+
readonly monthSelected: _angular_core.OutputEmitterRef<DatepickerMonth>;
|
|
56
|
+
/**
|
|
57
|
+
* Months until the year is clicked, years until one is picked. Reaching a distant year through
|
|
58
|
+
* the arrows alone costs one click per year; through the grid it costs one per page.
|
|
59
|
+
*/
|
|
60
|
+
readonly showingYears: _angular_core.WritableSignal<boolean>;
|
|
61
|
+
private readonly panelTemplate;
|
|
62
|
+
private readonly overlay;
|
|
63
|
+
readonly isOpen: _angular_core.Signal<boolean>;
|
|
64
|
+
/** Browsable on its own, and re-anchored on the calendar's year whenever that moves. */
|
|
65
|
+
readonly displayedYear: _angular_core.WritableSignal<number>;
|
|
66
|
+
/**
|
|
67
|
+
* First year of the visible page. Pages are fixed blocks rather than a window around the
|
|
68
|
+
* displayed year, so the same year always sits in the same page and browsing back and forth
|
|
69
|
+
* lands on the same grid.
|
|
70
|
+
*/
|
|
71
|
+
private readonly yearPageStart;
|
|
72
|
+
/** The page the years grid spans, for the header that replaces the year while it shows. */
|
|
73
|
+
readonly displayedYearRange: _angular_core.Signal<string>;
|
|
74
|
+
readonly canGoPrevious: _angular_core.Signal<boolean>;
|
|
75
|
+
readonly canGoNext: _angular_core.Signal<boolean>;
|
|
76
|
+
readonly months: _angular_core.Signal<MonthOption[]>;
|
|
77
|
+
readonly years: _angular_core.Signal<YearOption[]>;
|
|
78
|
+
open(triggerElement?: HTMLElement): void;
|
|
79
|
+
close(): void;
|
|
80
|
+
toggle(triggerElement?: HTMLElement): void;
|
|
81
|
+
onPrevious(): void;
|
|
82
|
+
onNext(): void;
|
|
83
|
+
/** Toggles the grid between the months of a year and the years of a page. */
|
|
84
|
+
onToggleYears(): void;
|
|
85
|
+
onSelectYear(year: number): void;
|
|
86
|
+
onSelectMonth(month: number): void;
|
|
87
|
+
/** One year at a time through the months, a whole page at a time through the years. */
|
|
88
|
+
private step;
|
|
89
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerMonthPickerComponent, never>;
|
|
90
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerMonthPickerComponent, "ap-datepicker-month-picker", never, { "month": { "alias": "month"; "required": true; "isSignal": true; }; "year": { "alias": "year"; "required": true; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "monthSelected": "monthSelected"; }, never, never, true, never>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** One shortcut in the column beside the calendars. */
|
|
94
|
+
interface DatepickerPreset {
|
|
95
|
+
/** Stable id, independent of the displayed label. */
|
|
96
|
+
key: string;
|
|
97
|
+
/** Text shown to the user. Already translated. */
|
|
98
|
+
label: string;
|
|
99
|
+
range: [dayjs.Dayjs, dayjs.Dayjs];
|
|
100
|
+
}
|
|
101
|
+
type DefaultPresetKey = 'yesterday' | 'lastWeek' | 'last30Days' | 'lastMonth' | 'thisMonth';
|
|
102
|
+
/**
|
|
103
|
+
* The five shortcuts a picker offers by default. A function and not a constant, so the ranges are
|
|
104
|
+
* computed when shown: a session left open across midnight would otherwise offer yesterday's.
|
|
105
|
+
*/
|
|
106
|
+
declare function defaultDatepickerPresets(labels?: Partial<Record<DefaultPresetKey, string>>, today?: dayjs.Dayjs): DatepickerPreset[];
|
|
9
107
|
|
|
10
108
|
declare enum DatepickerMode {
|
|
11
109
|
Single = "Single",
|
|
@@ -16,44 +114,26 @@ interface Period {
|
|
|
16
114
|
startDate?: dayjs.Dayjs;
|
|
17
115
|
endDate?: dayjs.Dayjs;
|
|
18
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* A range just picked, and the preset it came from when there is one. A widened `Period` rather
|
|
119
|
+
* than a type of its own, so callers typing `periodSelected` as a `Period` keep compiling.
|
|
120
|
+
*/
|
|
121
|
+
interface SelectedPeriod extends Period {
|
|
122
|
+
preset?: DatepickerPreset;
|
|
123
|
+
}
|
|
19
124
|
interface StartDate {
|
|
20
125
|
startDate: dayjs.Dayjs;
|
|
21
126
|
}
|
|
22
|
-
interface I18nDatePicker {
|
|
23
|
-
ranges: {
|
|
24
|
-
yesterday: string;
|
|
25
|
-
lastWeek: string;
|
|
26
|
-
last30Days: string;
|
|
27
|
-
lastMonth: string;
|
|
28
|
-
thisMonth: string;
|
|
29
|
-
[other: string]: string;
|
|
30
|
-
};
|
|
31
|
-
/** Label of the "Custom" range entry shown when `showCustomRangeLabel` is enabled. Defaults to 'Custom'. */
|
|
32
|
-
customRangeLabel?: string;
|
|
33
|
-
}
|
|
34
127
|
type FirstDayOfWeek = 'sunday' | 'monday';
|
|
35
128
|
type Locale = 'en' | 'fr' | 'es' | 'de';
|
|
36
129
|
type RangesConfigPresetType = {
|
|
37
130
|
[periodText: string]: [dayjs.Dayjs, dayjs.Dayjs];
|
|
38
131
|
};
|
|
39
|
-
declare const RangesConfigPreset: {
|
|
40
|
-
yesterday: [dayjs.Dayjs, dayjs.Dayjs];
|
|
41
|
-
lastWeek: [dayjs.Dayjs, dayjs.Dayjs];
|
|
42
|
-
last30Days: [dayjs.Dayjs, dayjs.Dayjs];
|
|
43
|
-
lastMonth: [dayjs.Dayjs, dayjs.Dayjs];
|
|
44
|
-
thisMonth: [dayjs.Dayjs, dayjs.Dayjs];
|
|
45
|
-
lastWeekFromToday: [dayjs.Dayjs, dayjs.Dayjs];
|
|
46
|
-
lastMonthFromToday: [dayjs.Dayjs, dayjs.Dayjs];
|
|
47
|
-
last3MonthsFromToday: [dayjs.Dayjs, dayjs.Dayjs];
|
|
48
|
-
last6MonthsFromToday: [dayjs.Dayjs, dayjs.Dayjs];
|
|
49
|
-
lastYearFromToday: [dayjs.Dayjs, dayjs.Dayjs];
|
|
50
|
-
};
|
|
51
132
|
declare class DatepickerComponent implements OnInit, OnChanges, AfterViewInit {
|
|
52
133
|
changeDetectorRef: ChangeDetectorRef;
|
|
53
134
|
symbolRegistry: SymbolRegistry;
|
|
54
135
|
datepickerRef: DaterangepickerComponent;
|
|
55
136
|
firstDayOfWeek: string;
|
|
56
|
-
i18n: I18nDatePicker;
|
|
57
137
|
locale: string;
|
|
58
138
|
set maxDate(maxDate: dayjs.Dayjs | undefined);
|
|
59
139
|
set minDate(minDate: dayjs.Dayjs | undefined);
|
|
@@ -63,45 +143,66 @@ declare class DatepickerComponent implements OnInit, OnChanges, AfterViewInit {
|
|
|
63
143
|
selectedPeriod: Period;
|
|
64
144
|
/** Maximum number of days between the start and the end date in Range mode. Undefined means no limit. */
|
|
65
145
|
dateLimit: _angular_core.InputSignal<number | undefined>;
|
|
66
|
-
|
|
67
|
-
|
|
146
|
+
/** Shortcuts listed beside the calendars. Empty by default, and ignored outside Range mode. */
|
|
147
|
+
presets: _angular_core.InputSignal<DatepickerPreset[]>;
|
|
68
148
|
dateSelected: EventEmitter<any>;
|
|
69
|
-
periodSelected: EventEmitter<
|
|
149
|
+
periodSelected: EventEmitter<SelectedPeriod>;
|
|
70
150
|
DatepickerMode: typeof DatepickerMode;
|
|
71
|
-
doubleCalendarWidth: number;
|
|
72
151
|
localeConfig: {
|
|
73
152
|
customRangeLabel: string;
|
|
74
153
|
daysOfWeek: string[];
|
|
75
154
|
monthNames: string[];
|
|
76
155
|
firstDay: number;
|
|
77
156
|
};
|
|
78
|
-
rangesConfig: _angular_core.InputSignal<RangesConfigPresetType | null>;
|
|
79
|
-
ranges: RangesConfigPresetType;
|
|
80
|
-
rangePickerWidth: number;
|
|
81
|
-
width: number;
|
|
82
157
|
pageSet: boolean;
|
|
83
158
|
maxDateStr: string;
|
|
84
159
|
minDateStr: string;
|
|
160
|
+
/** The same bounds as `minDateStr`/`maxDateStr`, kept as dayjs for the month pickers. */
|
|
161
|
+
maxDateValue: dayjs.Dayjs | undefined;
|
|
162
|
+
minDateValue: dayjs.Dayjs | undefined;
|
|
163
|
+
/** A field and not an inline literal: the template would rebuild the object on every pass. */
|
|
164
|
+
readonly monthTriggerConfig: ButtonConfig;
|
|
165
|
+
/** A getter and not a `computed`: `mode` is a plain `@Input`, which a computed would not track. */
|
|
166
|
+
get hasPresets(): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* Memoised, and a shared constant when empty, so the reference only changes when `presets` does.
|
|
169
|
+
* A fresh `ranges` object reaches the vendor's setter, which resets the calendars and drops the
|
|
170
|
+
* start anchor and the in-range preview of a selection still in progress.
|
|
171
|
+
*/
|
|
172
|
+
private readonly presetRanges;
|
|
173
|
+
get vendorRanges(): RangesConfigPresetType;
|
|
85
174
|
constructor(changeDetectorRef: ChangeDetectorRef, symbolRegistry: SymbolRegistry);
|
|
86
175
|
ngOnInit(): void;
|
|
87
176
|
ngOnChanges(changes: SimpleChanges): void;
|
|
88
177
|
ngAfterViewInit(): void;
|
|
89
178
|
initDatePickerLocale(): void;
|
|
90
|
-
private initRanges;
|
|
91
179
|
isCustomDate: (date: any) => string[];
|
|
92
180
|
private isSelected;
|
|
93
181
|
onStartDateChanged(event: StartDate): void;
|
|
94
182
|
onDatesUpdated(event: Period): void;
|
|
183
|
+
/**
|
|
184
|
+
* The preset the current range came from. The vendor keeps `chosenRange` up to date both ways —
|
|
185
|
+
* `clickRange` writes the clicked label, `clickDate` resets it to `customRangeLabel` — and those
|
|
186
|
+
* labels are the keys of its `ranges` table, so they are unique. Matching on the label rather
|
|
187
|
+
* than on a position survives a translated or reordered shortcut.
|
|
188
|
+
*/
|
|
189
|
+
private chosenPreset;
|
|
95
190
|
onNextMonth(): void;
|
|
191
|
+
onLeftMonthPicked(picked: DatepickerMonth): void;
|
|
192
|
+
onRightMonthPicked(picked: DatepickerMonth): void;
|
|
193
|
+
/**
|
|
194
|
+
* The vendor moves the view only — never the selection — and clamps to its own min/max on the
|
|
195
|
+
* way, so the picker's disabled months are a second line of defence rather than the only one.
|
|
196
|
+
*/
|
|
197
|
+
private moveCalendarTo;
|
|
96
198
|
onPreviousMonth(): void;
|
|
97
199
|
/**
|
|
98
200
|
* Ugly hack used here to open the calendar on the right day if they are selected dates
|
|
99
201
|
* * https://github.com/fetrarij/ngx-daterangepicker-material/issues/139
|
|
100
202
|
*/
|
|
101
203
|
setCalendarCurrentPage(): void;
|
|
102
|
-
setWidth(): void;
|
|
103
204
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerComponent, never>;
|
|
104
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerComponent, "ap-datepicker", never, { "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; }; "
|
|
205
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerComponent, "ap-datepicker", never, { "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "mode": { "alias": "mode"; "required": true; }; "selectedDate": { "alias": "selectedDate"; "required": false; }; "selectedDates": { "alias": "selectedDates"; "required": false; }; "selectedPeriod": { "alias": "selectedPeriod"; "required": false; }; "dateLimit": { "alias": "dateLimit"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; }, { "dateSelected": "dateSelected"; "periodSelected": "periodSelected"; }, never, never, true, never>;
|
|
105
206
|
}
|
|
106
207
|
|
|
107
208
|
/**
|
|
@@ -109,7 +210,14 @@ declare class DatepickerComponent implements OnInit, OnChanges, AfterViewInit {
|
|
|
109
210
|
* in an overlay. Exposes open/close/toggle so it can be driven by apDropdownTrigger.
|
|
110
211
|
*/
|
|
111
212
|
declare class DatepickerDropdownComponent implements DropdownOverlay {
|
|
112
|
-
|
|
213
|
+
/**
|
|
214
|
+
* Stable id for the panel (`role="dialog"`), so a trigger can bind `aria-controls` to it.
|
|
215
|
+
* Combines the app id — several federated Angular apps can share one page — with a per-instance
|
|
216
|
+
* random suffix computed once at construction. No shared mutable counter, and no reliance on
|
|
217
|
+
* `crypto.randomUUID()`, which browsers refuse outside a secure (HTTPS/localhost) context.
|
|
218
|
+
*/
|
|
219
|
+
readonly panelId: string;
|
|
220
|
+
private readonly panel;
|
|
113
221
|
mode: _angular_core.InputSignal<DatepickerMode>;
|
|
114
222
|
selectedDate: _angular_core.InputSignal<dayjs.Dayjs | undefined>;
|
|
115
223
|
selectedDates: _angular_core.InputSignal<dayjs.Dayjs[]>;
|
|
@@ -120,15 +228,20 @@ declare class DatepickerDropdownComponent implements DropdownOverlay {
|
|
|
120
228
|
dateLimit: _angular_core.InputSignal<number | undefined>;
|
|
121
229
|
/** Caption shown at the bottom of the panel, e.g. to explain a selection constraint. */
|
|
122
230
|
hint: _angular_core.InputSignal<string | undefined>;
|
|
231
|
+
/**
|
|
232
|
+
* Rendered under `hint`, for what a caption cannot carry — a banner with its own button. A
|
|
233
|
+
* `TemplateRef` and not an `ng-content`: the footer shows inside the overlay's embedded view.
|
|
234
|
+
*/
|
|
235
|
+
panelFooter: _angular_core.InputSignal<TemplateRef<unknown> | undefined>;
|
|
123
236
|
firstDayOfWeek: _angular_core.InputSignal<"sunday" | "monday">;
|
|
124
237
|
locale: _angular_core.InputSignal<string>;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
showRanges: _angular_core.InputSignal<boolean>;
|
|
128
|
-
showCustomRangeLabel: _angular_core.InputSignal<boolean>;
|
|
129
|
-
rangesConfig: _angular_core.InputSignal<RangesConfigPresetType | null>;
|
|
238
|
+
/** Shortcuts listed beside the calendars. Empty: no column at all. */
|
|
239
|
+
presets: _angular_core.InputSignal<DatepickerPreset[]>;
|
|
130
240
|
showBackdrop: _angular_core.InputSignal<boolean>;
|
|
131
|
-
/**
|
|
241
|
+
/**
|
|
242
|
+
* Close the overlay once the selection is complete. When false it stays open until backdrop
|
|
243
|
+
* click or Escape — which lets the host vet a selection before anything closes.
|
|
244
|
+
*/
|
|
132
245
|
closeOnSelect: _angular_core.InputSignal<boolean>;
|
|
133
246
|
disabled: _angular_core.InputSignal<boolean>;
|
|
134
247
|
/** Panel placement. Unset means derived from the anchor mode, i.e. `bottom-start`. */
|
|
@@ -136,59 +249,171 @@ declare class DatepickerDropdownComponent implements DropdownOverlay {
|
|
|
136
249
|
opened: _angular_core.OutputEmitterRef<void>;
|
|
137
250
|
closed: _angular_core.OutputEmitterRef<void>;
|
|
138
251
|
dateSelected: _angular_core.OutputEmitterRef<dayjs.Dayjs>;
|
|
139
|
-
periodSelected: _angular_core.OutputEmitterRef<
|
|
140
|
-
private readonly overlay;
|
|
252
|
+
periodSelected: _angular_core.OutputEmitterRef<SelectedPeriod>;
|
|
141
253
|
readonly isOpen: _angular_core.Signal<boolean>;
|
|
142
254
|
open(triggerElement?: HTMLElement): void;
|
|
255
|
+
/** `closed` is relayed from the panel, which fires it for a gesture as well as for this call. */
|
|
143
256
|
close(): void;
|
|
144
257
|
toggle(triggerElement?: HTMLElement): void;
|
|
145
258
|
onDateSelected(date: dayjs.Dayjs): void;
|
|
146
|
-
onPeriodSelected(period:
|
|
259
|
+
onPeriodSelected(period: SelectedPeriod): void;
|
|
147
260
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerDropdownComponent, never>;
|
|
148
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerDropdownComponent, "ap-datepicker-dropdown", never, { "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "selectedDate": { "alias": "selectedDate"; "required": false; "isSignal": true; }; "selectedDates": { "alias": "selectedDates"; "required": false; "isSignal": true; }; "selectedPeriod": { "alias": "selectedPeriod"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateLimit": { "alias": "dateLimit"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "
|
|
261
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerDropdownComponent, "ap-datepicker-dropdown", never, { "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "selectedDate": { "alias": "selectedDate"; "required": false; "isSignal": true; }; "selectedDates": { "alias": "selectedDates"; "required": false; "isSignal": true; }; "selectedPeriod": { "alias": "selectedPeriod"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateLimit": { "alias": "dateLimit"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "panelFooter": { "alias": "panelFooter"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "showBackdrop": { "alias": "showBackdrop"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; "dateSelected": "dateSelected"; "periodSelected": "periodSelected"; }, never, never, true, never>;
|
|
149
262
|
}
|
|
150
263
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
264
|
+
/**
|
|
265
|
+
* An `ap-datepicker-select` value. Its shape depends on the mode: a date in Single, a Period in
|
|
266
|
+
* Range, an array of dates in Multiple. TypeScript cannot tie the two together — `mode` is a
|
|
267
|
+
* runtime value — hence the guard below.
|
|
268
|
+
*/
|
|
269
|
+
type DatepickerValue = dayjs.Dayjs | Period | dayjs.Dayjs[];
|
|
270
|
+
/** Tells a `Period` from the two other shapes, without an `as`. */
|
|
271
|
+
declare function isPeriod(value: unknown): value is Period;
|
|
272
|
+
/**
|
|
273
|
+
* Throws when the value does not match the mode. An empty value (`undefined`, `null`) is accepted
|
|
274
|
+
* everywhere: it means nothing is selected.
|
|
275
|
+
*/
|
|
276
|
+
declare function assertValueMatchesMode(mode: DatepickerMode, value: unknown): void;
|
|
277
|
+
|
|
278
|
+
/** A selected date, as the field shows it in Multiple mode. */
|
|
279
|
+
interface DateChip {
|
|
280
|
+
label: string;
|
|
281
|
+
date: dayjs.Dayjs;
|
|
282
|
+
}
|
|
283
|
+
/** What the field just committed, and the preset it came from. */
|
|
284
|
+
interface DatepickerSelection {
|
|
285
|
+
/** The committed value, in the shape the mode requires. */
|
|
286
|
+
value: DatepickerValue | undefined;
|
|
287
|
+
/** The preset clicked, when the value came from one. Absent from a calendar pick. */
|
|
288
|
+
preset?: DatepickerPreset;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* The design system's date field: it shows the value, opens the shared panel and binds to a form.
|
|
292
|
+
* It carries no label of its own — wrap it in an `ap-form-field`, as `ap-select` is.
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* ```html
|
|
296
|
+
* <ap-form-field>
|
|
297
|
+
* <label for="period">Reporting period</label>
|
|
298
|
+
* <ap-datepicker-select [mode]="DatepickerMode.Range" [(value)]="period" [presets]="presets" />
|
|
299
|
+
* </ap-form-field>
|
|
300
|
+
* ```
|
|
301
|
+
*/
|
|
302
|
+
declare class DatepickerSelectComponent implements FormValueControl<DatepickerValue | undefined | null> {
|
|
303
|
+
readonly mode: _angular_core.InputSignal<DatepickerMode>;
|
|
304
|
+
/**
|
|
305
|
+
* The selection. Its shape follows the mode: a date in Single, a `Period` in Range, an array in
|
|
306
|
+
* Multiple. A shape that does not match the mode throws on the first render.
|
|
307
|
+
*
|
|
308
|
+
* Empty is `undefined`, and `null` is accepted for it: a form holding a nullable date has no
|
|
309
|
+
* other empty to offer, and this is the type a binding is checked against.
|
|
310
|
+
*/
|
|
311
|
+
readonly value: _angular_core.ModelSignal<DatepickerValue | null | undefined>;
|
|
312
|
+
/** Disables the field. A form writes here too, rather than to a second flag of its own. */
|
|
313
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
314
|
+
readonly minDate: _angular_core.InputSignal<dayjs.Dayjs | undefined>;
|
|
315
|
+
readonly maxDate: _angular_core.InputSignal<dayjs.Dayjs | undefined>;
|
|
316
|
+
/**
|
|
317
|
+
* Maximum number of days between the start and the end, in Range mode. It bars the days beyond
|
|
318
|
+
* the limit without saying so: pair it with a `panelHint` when the constraint deserves a word.
|
|
319
|
+
*/
|
|
320
|
+
readonly maxRangeDays: _angular_core.InputSignal<number | undefined>;
|
|
321
|
+
/** Caption shown at the bottom of the panel, to explain a constraint for instance. */
|
|
322
|
+
readonly panelHint: _angular_core.InputSignal<string | undefined>;
|
|
323
|
+
/** Rendered under `panelHint`, for what a sentence cannot carry — a banner with its own button. */
|
|
324
|
+
readonly panelFooter: _angular_core.InputSignal<TemplateRef<unknown> | undefined>;
|
|
325
|
+
/**
|
|
326
|
+
* Consulted before a selection is committed. Returning `false` keeps the current value, keeps the
|
|
327
|
+
* panel open and emits `selectionRejected`.
|
|
328
|
+
*
|
|
329
|
+
* A constraint the panel can apply itself (`minDate`, `maxDate`, `maxRangeDays`) belongs there
|
|
330
|
+
* instead: it bars the days rather than letting them be clicked and then refused.
|
|
331
|
+
*/
|
|
332
|
+
readonly canSelect: _angular_core.InputSignal<((value: DatepickerValue) => boolean) | undefined>;
|
|
333
|
+
/** Shortcuts listed beside the calendars. Empty: no column at all. */
|
|
334
|
+
readonly presets: _angular_core.InputSignal<DatepickerPreset[]>;
|
|
335
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
336
|
+
/**
|
|
337
|
+
* Accessible name of the field, since `role="combobox"` is not a name-from-content role and the
|
|
338
|
+
* component carries no internal `<label>` — surround it with an `ap-form-field` for the visible
|
|
339
|
+
* label, and mirror its text here.
|
|
340
|
+
*/
|
|
341
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
342
|
+
/**
|
|
343
|
+
* dayjs format of the displayed text. Defaults to `'MM/DD/YYYY'`, which needs no plugin: the
|
|
344
|
+
* localized tokens (`ll`, `LL`) assume the host application loaded `dayjs/plugin/localizedFormat`.
|
|
345
|
+
*/
|
|
346
|
+
readonly dateFormat: _angular_core.InputSignal<string>;
|
|
347
|
+
readonly locale: _angular_core.InputSignal<Locale>;
|
|
348
|
+
readonly firstDayOfWeek: _angular_core.InputSignal<FirstDayOfWeek>;
|
|
170
349
|
/** Panel placement. Unset means derived from the anchor mode, i.e. `bottom-start`. */
|
|
171
350
|
readonly placement: _angular_core.InputSignal<_floating_ui_utils.Placement | undefined>;
|
|
172
|
-
/**
|
|
173
|
-
clearable: _angular_core.InputSignal<boolean>;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
351
|
+
/** Shows a clear cross in the field as soon as something is selected. */
|
|
352
|
+
readonly clearable: _angular_core.InputSignal<boolean>;
|
|
353
|
+
/** IANA time zone name. When set, a chip shows its abbreviation beside the field. */
|
|
354
|
+
readonly timeZone: _angular_core.InputSignal<string | undefined>;
|
|
355
|
+
/** Tooltip carried by the info icon next to the chip. */
|
|
356
|
+
readonly timeZoneTooltip: _angular_core.InputSignal<string | undefined>;
|
|
357
|
+
/** Blur of the combobox. A form reads it to mark the field touched. */
|
|
358
|
+
readonly touch: _angular_core.OutputEmitterRef<void>;
|
|
359
|
+
/** The committed value with the preset that produced it, beside `valueChange` — one event, not two halves to correlate. */
|
|
360
|
+
readonly selectionChange: _angular_core.OutputEmitterRef<DatepickerSelection>;
|
|
361
|
+
/** The selection `canSelect` just refused. The field's value has not moved. */
|
|
362
|
+
readonly selectionRejected: _angular_core.OutputEmitterRef<DatepickerValue>;
|
|
363
|
+
/** The panel just opened, just closed, so that what a host shows beside it can start over. */
|
|
364
|
+
readonly opened: _angular_core.OutputEmitterRef<void>;
|
|
365
|
+
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
366
|
+
protected readonly DatepickerMode: typeof DatepickerMode;
|
|
367
|
+
/**
|
|
368
|
+
* The panel only closes itself without a refusal predicate: it emits the selection then closes,
|
|
369
|
+
* so a veto would land too late. With one, the field closes what it accepted.
|
|
370
|
+
*/
|
|
371
|
+
protected readonly closesOnSelect: _angular_core.Signal<boolean>;
|
|
372
|
+
/** Fed by the dropdown's `opened`/`closed` rather than read back from it: a host class can only bind to our own members. */
|
|
373
|
+
protected readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
374
|
+
/** The dropdown driving the panel — held only to close it when the field becomes disabled. */
|
|
375
|
+
private readonly dropdown;
|
|
376
|
+
/**
|
|
377
|
+
* Closes an already-open panel the moment the field becomes disabled. The dropdown only guards
|
|
378
|
+
* *new* opens, and its panel is a CDK overlay detached from this component's DOM.
|
|
379
|
+
*/
|
|
380
|
+
private readonly closeOnDisable;
|
|
381
|
+
/** Checks the value once, and sorts it into the three shapes the panel expects. */
|
|
382
|
+
private readonly shaped;
|
|
383
|
+
protected readonly selectedDate: _angular_core.Signal<dayjs.Dayjs | undefined>;
|
|
384
|
+
protected readonly selectedDates: _angular_core.Signal<dayjs.Dayjs[] | never[]>;
|
|
385
|
+
/**
|
|
386
|
+
* Bumped to re-impose the value a refusal kept. The panel only reacts to `selectedPeriod`
|
|
387
|
+
* changing identity, so putting it back takes a fresh object.
|
|
388
|
+
*/
|
|
389
|
+
private readonly restoreNonce;
|
|
390
|
+
protected readonly selectedPeriod: _angular_core.Signal<{
|
|
391
|
+
startDate?: dayjs.Dayjs;
|
|
392
|
+
endDate?: dayjs.Dayjs;
|
|
393
|
+
}>;
|
|
394
|
+
protected readonly hasValue: _angular_core.Signal<boolean>;
|
|
395
|
+
/** The field's text. Empty in Multiple, where the field shows chips instead. */
|
|
396
|
+
readonly displayed: _angular_core.Signal<string>;
|
|
397
|
+
/** The chips shown in Multiple mode, one per selected date. */
|
|
398
|
+
readonly chips: _angular_core.Signal<DateChip[]>;
|
|
399
|
+
/** The zone abbreviation ("EST", "CEST"…), computed without touching dayjs globally. */
|
|
400
|
+
readonly timeZoneOffset: _angular_core.Signal<string>;
|
|
401
|
+
onDateSelected(date: dayjs.Dayjs): void;
|
|
402
|
+
/** Drops a date from the selection, from the chip the user closed. */
|
|
403
|
+
removeDate(chip: DateChip): void;
|
|
404
|
+
protected onPanelOpened(): void;
|
|
405
|
+
protected onPanelClosed(): void;
|
|
406
|
+
/** The preset is stripped from the value: it says where the value came from, it is not part of it. */
|
|
407
|
+
onPeriodSelected({ preset, ...period }: SelectedPeriod): void;
|
|
408
|
+
/** Clears the selection. Stops propagation so the panel does not reopen. */
|
|
409
|
+
clear(event: Event): void;
|
|
410
|
+
/** The single write point: the signal and the form get the same value, and a disabled field none. */
|
|
411
|
+
private commit;
|
|
412
|
+
/** True when nothing is left to pick — the panel's own closing criterion. */
|
|
413
|
+
private isComplete;
|
|
414
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerSelectComponent, never>;
|
|
415
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerSelectComponent, "ap-datepicker-select", never, { "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "maxRangeDays": { "alias": "maxRangeDays"; "required": false; "isSignal": true; }; "panelHint": { "alias": "panelHint"; "required": false; "isSignal": true; }; "panelFooter": { "alias": "panelFooter"; "required": false; "isSignal": true; }; "canSelect": { "alias": "canSelect"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "timeZone": { "alias": "timeZone"; "required": false; "isSignal": true; }; "timeZoneTooltip": { "alias": "timeZoneTooltip"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; "selectionChange": "selectionChange"; "selectionRejected": "selectionRejected"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
|
|
191
416
|
}
|
|
192
417
|
|
|
193
|
-
export { DatepickerComponent, DatepickerDropdownComponent, DatepickerMode,
|
|
194
|
-
export type {
|
|
418
|
+
export { DatepickerComponent, DatepickerDropdownComponent, DatepickerMode, DatepickerMonthPickerComponent, DatepickerSelectComponent, assertValueMatchesMode, defaultDatepickerPresets, isPeriod };
|
|
419
|
+
export type { DateChip, DatepickerMonth, DatepickerPreset, DatepickerSelection, DatepickerValue, DefaultPresetKey, FirstDayOfWeek, Locale, Period, SelectedPeriod, StartDate };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { AfterContentChecked, ElementRef, AfterViewInit, OnInit, OnDestroy, EventEmitter, OnChanges, InjectionToken, Renderer2 } from '@angular/core';
|
|
3
3
|
import { Validator, AbstractControl } from '@angular/forms';
|
|
4
|
+
import * as i1 from 'ngxtension/resize';
|
|
4
5
|
|
|
5
6
|
declare class AutosizeTextareaDirective implements AfterContentChecked {
|
|
6
7
|
element: ElementRef;
|
|
@@ -200,6 +201,77 @@ declare class MultiStyleTextDirective {
|
|
|
200
201
|
static ɵdir: i0.ɵɵDirectiveDeclaration<MultiStyleTextDirective, "[multiStyleText]", never, { "multiStyleText": { "alias": "multiStyleText"; "required": false; }; }, { "partEvent": "partEvent"; }, never, never, true, never>;
|
|
201
202
|
}
|
|
202
203
|
|
|
204
|
+
/** Marks an element as one of the items the row may collapse. */
|
|
205
|
+
declare class OverflowItemDirective {
|
|
206
|
+
readonly elementRef: ElementRef<HTMLElement>;
|
|
207
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OverflowItemDirective, never>;
|
|
208
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<OverflowItemDirective, "[apOverflowItem]", never, {}, {}, never, never, true, never>;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Marks the "+N" badge so its width can be reserved. Optional, and the first pass never has it:
|
|
212
|
+
* the badge only enters the DOM once `hiddenCount()` is above zero, so `counterFallbackWidth` stands in.
|
|
213
|
+
*/
|
|
214
|
+
declare class OverflowCounterDirective {
|
|
215
|
+
readonly elementRef: ElementRef<HTMLElement>;
|
|
216
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OverflowCounterDirective, never>;
|
|
217
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<OverflowCounterDirective, "[apOverflowCounter]", never, {}, {}, never, never, true, never>;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Lays a row of items out on a single line and collapses whatever overflows into a "+N" badge.
|
|
221
|
+
*
|
|
222
|
+
* Put it on the container, mark the items with `apOverflowItem` and the badge with
|
|
223
|
+
* `apOverflowCounter`; read `hiddenCount()` to render the badge and to derive the hidden data.
|
|
224
|
+
* The container is measured, so it must be the box that actually bounds the row — give it
|
|
225
|
+
* `overflow: hidden` and keep the items from shrinking.
|
|
226
|
+
*
|
|
227
|
+
* Specs that mock a consumer's dependencies have to keep this directive — ng-mocks stubs inputs
|
|
228
|
+
* and outputs, not plain signal members, so a mocked `hiddenCount` is not callable:
|
|
229
|
+
* `MockBuilder(MyComponent).keep(OverflowCountDirective)`.
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```html
|
|
233
|
+
* <div class="chips" apOverflowCount #overflow="apOverflowCount">
|
|
234
|
+
* @for (chip of chips(); track chip.id) {
|
|
235
|
+
* <ap-tag apOverflowItem>{{ chip.label }}</ap-tag>
|
|
236
|
+
* }
|
|
237
|
+
* @if (overflow.hiddenCount() > 0) {
|
|
238
|
+
* <ap-tag apOverflowCounter>+{{ overflow.hiddenCount() }}</ap-tag>
|
|
239
|
+
* }
|
|
240
|
+
* </div>
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
declare class OverflowCountDirective {
|
|
244
|
+
private readonly elementRef;
|
|
245
|
+
private readonly ngxResize;
|
|
246
|
+
/**
|
|
247
|
+
* Space between two items, in pixels. Read from the container's computed `column-gap` when left
|
|
248
|
+
* undefined, which is what a flex or grid row already declares — pass it only when the gap comes
|
|
249
|
+
* from somewhere the container doesn't express, such as item margins.
|
|
250
|
+
*/
|
|
251
|
+
readonly gap: i0.InputSignalWithTransform<number | undefined, number | undefined>;
|
|
252
|
+
/** Width to reserve for the "+N" badge while it is not in the DOM to be measured. */
|
|
253
|
+
readonly counterFallbackWidth: i0.InputSignalWithTransform<number, unknown>;
|
|
254
|
+
/** Items kept visible whatever the width. A lone "+N" reads as an empty row, hence the default. */
|
|
255
|
+
readonly minVisible: i0.InputSignalWithTransform<number, unknown>;
|
|
256
|
+
private readonly items;
|
|
257
|
+
private readonly counter;
|
|
258
|
+
private readonly visible;
|
|
259
|
+
private readonly hidden;
|
|
260
|
+
/** How many items are currently laid out. */
|
|
261
|
+
readonly visibleCount: i0.Signal<number>;
|
|
262
|
+
/** How many items are collapsed — the number the "+N" badge shows. */
|
|
263
|
+
readonly hiddenCount: i0.Signal<number>;
|
|
264
|
+
constructor();
|
|
265
|
+
/** Measures the row and collapses its overflow. Public so a consumer resizing the container itself can force a pass. */
|
|
266
|
+
recompute(): void;
|
|
267
|
+
/** Guarded: these signals are written from a render effect, so an unchanged pass must be inert. */
|
|
268
|
+
private setCounts;
|
|
269
|
+
private resolvedGap;
|
|
270
|
+
private counterWidth;
|
|
271
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OverflowCountDirective, never>;
|
|
272
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<OverflowCountDirective, "[apOverflowCount]", ["apOverflowCount"], { "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "counterFallbackWidth": { "alias": "counterFallbackWidth"; "required": false; "isSignal": true; }; "minVisible": { "alias": "minVisible"; "required": false; "isSignal": true; }; }, {}, ["items", "counter"], never, true, [{ directive: typeof i1.NgxResize; inputs: {}; outputs: {}; }]>;
|
|
273
|
+
}
|
|
274
|
+
|
|
203
275
|
/**
|
|
204
276
|
* Stops a click from reaching the ancestors, without altering the host semantics.
|
|
205
277
|
*
|
|
@@ -244,5 +316,5 @@ declare class TableColumnDragDirective implements OnInit, OnDestroy {
|
|
|
244
316
|
static ɵdir: i0.ɵɵDirectiveDeclaration<TableColumnDragDirective, "table[apTableColumnDrag]", never, {}, {}, never, never, true, never>;
|
|
245
317
|
}
|
|
246
318
|
|
|
247
|
-
export { AP_INTERACTIVE_ELEMENT, AutosizeTextareaDirective, BaseButtonDirective, CheckboxDirective, ClickDirective, DefaultImageDirective, EllipsisDirective, EqualValidatorDirective, FrozenGifDirective, GifService, MultiStyleTextDirective, StopPropagationDirective, TableColumnDragDirective };
|
|
319
|
+
export { AP_INTERACTIVE_ELEMENT, AutosizeTextareaDirective, BaseButtonDirective, CheckboxDirective, ClickDirective, DefaultImageDirective, EllipsisDirective, EqualValidatorDirective, FrozenGifDirective, GifService, MultiStyleTextDirective, OverflowCountDirective, OverflowCounterDirective, OverflowItemDirective, StopPropagationDirective, TableColumnDragDirective };
|
|
248
320
|
export type { ApInteractiveElement };
|