@libs-ui/components-datetime-dropdown 0.1.1-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.
Files changed (31) hide show
  1. package/README.md +3 -0
  2. package/defines/date-dropdown.define.d.ts +40 -0
  3. package/directive/date-dropdown.directive.d.ts +11 -0
  4. package/dropdown.component.d.ts +89 -0
  5. package/esm2022/defines/date-dropdown.define.mjs +246 -0
  6. package/esm2022/directive/date-dropdown.directive.mjs +33 -0
  7. package/esm2022/dropdown.component.mjs +280 -0
  8. package/esm2022/index.mjs +3 -0
  9. package/esm2022/interfaces/date-dropdown.interface.mjs +3 -0
  10. package/esm2022/interfaces/emit-dropdown.interface.mjs +2 -0
  11. package/esm2022/interfaces/functions-control-event.interface.mjs +2 -0
  12. package/esm2022/interfaces/index.mjs +5 -0
  13. package/esm2022/interfaces/valid.interface.mjs +2 -0
  14. package/esm2022/item/child/child.component.mjs +124 -0
  15. package/esm2022/item/item.component.mjs +216 -0
  16. package/esm2022/libs-ui-components-datetime-dropdown.mjs +5 -0
  17. package/esm2022/pipes/build-list-by-date-type-.pipe.mjs +19 -0
  18. package/esm2022/pipes/build-width.pipe.mjs +23 -0
  19. package/fesm2022/libs-ui-components-datetime-dropdown.mjs +928 -0
  20. package/fesm2022/libs-ui-components-datetime-dropdown.mjs.map +1 -0
  21. package/index.d.ts +2 -0
  22. package/interfaces/date-dropdown.interface.d.ts +43 -0
  23. package/interfaces/emit-dropdown.interface.d.ts +11 -0
  24. package/interfaces/functions-control-event.interface.d.ts +11 -0
  25. package/interfaces/index.d.ts +4 -0
  26. package/interfaces/valid.interface.d.ts +10 -0
  27. package/item/child/child.component.d.ts +51 -0
  28. package/item/item.component.d.ts +60 -0
  29. package/package.json +33 -0
  30. package/pipes/build-list-by-date-type-.pipe.d.ts +15 -0
  31. package/pipes/build-width.pipe.d.ts +7 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # datetime-dropdown
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,40 @@
1
+ import { TranslateService } from '@ngx-translate/core';
2
+ import { TYPE_DATE_FORMAT, TYPE_DROPDOWN_MONTH_ID } from '../interfaces/date-dropdown.interface';
3
+ import { IHttpRequestConfig } from '@libs-ui/services-http-request';
4
+ export declare const convertGetValue: (type: TYPE_DATE_FORMAT, item: {
5
+ label: string;
6
+ }, translate: TranslateService) => any;
7
+ export declare const convertItemSelectedDefine: (type: TYPE_DATE_FORMAT, item: {
8
+ id: number;
9
+ label: string;
10
+ labelDisplay: string;
11
+ }, translate: TranslateService, getItemYearDisplay?: (label: string) => void, ignoreConvertYearSelected?: boolean) => any;
12
+ export declare const LIST_MONTHS_DEFAULT: () => Array<{
13
+ id: number;
14
+ label: string;
15
+ }>;
16
+ export declare const CompareDate: (dateCompare: Array<{
17
+ from: number | undefined;
18
+ to: number | undefined;
19
+ }>, ignoreAllowTimeSame: boolean) => boolean;
20
+ export declare const getConfigHttpRequestDetailDate: (data: Array<{
21
+ id: number;
22
+ label: string;
23
+ }>) => IHttpRequestConfig;
24
+ export declare const getConfigHttpRequestListDate: (data: Array<{
25
+ id: number;
26
+ label: string;
27
+ }>) => IHttpRequestConfig;
28
+ export declare const buildListDataByTypeDate: (type: TYPE_DATE_FORMAT, dataYear: {
29
+ minYear?: number;
30
+ maxYear?: number;
31
+ reverseYear?: boolean;
32
+ }, keyMonth: any) => Array<{
33
+ id: number;
34
+ label: string;
35
+ }>;
36
+ export declare const defaultMonths: () => Array<{
37
+ id: TYPE_DROPDOWN_MONTH_ID;
38
+ label: string;
39
+ maxDays: number;
40
+ }>;
@@ -0,0 +1,11 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class LibsUiComponentsDatetimeDropdownDirective implements OnInit, OnDestroy {
4
+ private resizeObserver;
5
+ private elementRef;
6
+ readonly outChangeWidth: import("@angular/core").OutputEmitterRef<number>;
7
+ ngOnInit(): void;
8
+ ngOnDestroy(): void;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsDatetimeDropdownDirective, never>;
10
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LibsUiComponentsDatetimeDropdownDirective, "[LibsUiComponentsDatetimeDropdownDirective]", never, {}, { "outChangeWidth": "outChangeWidth"; }, never, never, true, never>;
11
+ }
@@ -0,0 +1,89 @@
1
+ import { AfterViewInit, OnInit } from '@angular/core';
2
+ import { ILabel } from '@libs-ui/components-label';
3
+ import { IFlagMouse } from '@libs-ui/components-popover';
4
+ import { IDateDropdownDisableKeys, IFromAndToDateLabel, IHiddenDate, TYPE_DATE_FORMAT } from './interfaces/date-dropdown.interface';
5
+ import { IEmitMultiDateDropdown, IEmitSingleDateDropdown } from './interfaces/emit-dropdown.interface';
6
+ import { IDateDropdownFunctionControlEvent, IDateDropdownItemFunctionControlEvent } from './interfaces/functions-control-event.interface';
7
+ import { IValidDateDropdown } from './interfaces/valid.interface';
8
+ import * as i0 from "@angular/core";
9
+ export declare class LibsUiComponentsDatetimeDropdownComponent implements OnInit, AfterViewInit {
10
+ protected width: import("@angular/core").WritableSignal<number>;
11
+ protected widthElement: import("@angular/core").WritableSignal<number | undefined>;
12
+ protected widthLabel: import("@angular/core").WritableSignal<number | undefined>;
13
+ protected widthLabelFrom: import("@angular/core").WritableSignal<number>;
14
+ protected widthLabelTo: import("@angular/core").WritableSignal<number>;
15
+ protected isErrorCompareDate: import("@angular/core").WritableSignal<boolean | undefined>;
16
+ protected chooseDate: import("@angular/core").WritableSignal<IEmitMultiDateDropdown | undefined>;
17
+ protected isResponsive: import("@angular/core").WritableSignal<boolean | undefined>;
18
+ protected arrayFormat: import("@angular/core").Signal<TYPE_DATE_FORMAT[]>;
19
+ protected changeType: import("@angular/core").WritableSignal<boolean | undefined>;
20
+ private cacheWidthLabel;
21
+ private timeOut;
22
+ private onDestroy;
23
+ private functionsControl;
24
+ readonly labelConfig: import("@angular/core").InputSignal<ILabel | undefined>;
25
+ readonly widthDropdown: import("@angular/core").InputSignalWithTransform<number, number>;
26
+ readonly zIndex: import("@angular/core").InputSignalWithTransform<number, number>;
27
+ readonly maxYear: import("@angular/core").InputSignal<number>;
28
+ readonly minYear: import("@angular/core").InputSignal<number>;
29
+ readonly minWidth: import("@angular/core").InputSignal<number | undefined>;
30
+ readonly disable: import("@angular/core").InputSignal<boolean>;
31
+ readonly readonly: import("@angular/core").InputSignal<boolean>;
32
+ readonly isMultiple: import("@angular/core").InputSignal<boolean>;
33
+ readonly reverseYear: import("@angular/core").InputSignal<boolean | undefined>;
34
+ readonly isBorderError: import("@angular/core").InputSignal<boolean>;
35
+ readonly ignoreWidth100: import("@angular/core").InputSignal<boolean>;
36
+ readonly widthByElement: import("@angular/core").InputSignal<boolean>;
37
+ readonly disableSecond: import("@angular/core").InputSignal<boolean>;
38
+ readonly typeFormat: import("@angular/core").InputSignalWithTransform<string, string>;
39
+ readonly fromAndToDateLabel: import("@angular/core").InputSignal<IFromAndToDateLabel>;
40
+ readonly listHasButtonUnSelectOption: import("@angular/core").InputSignal<boolean>;
41
+ readonly selectedDateTime: import("@angular/core").InputSignal<IEmitMultiDateDropdown | undefined>;
42
+ readonly isEmitAfterChanged: import("@angular/core").InputSignal<boolean>;
43
+ readonly getItemYearDisplay: import("@angular/core").InputSignal<((year: string) => string) | undefined>;
44
+ readonly ignoreFromAndToDateLabel: import("@angular/core").InputSignal<boolean>;
45
+ readonly classIncludeTextDisplayWhenNoSelect: import("@angular/core").InputSignal<string | undefined>;
46
+ readonly hiddenDate: import("@angular/core").InputSignal<IHiddenDate | undefined>;
47
+ readonly listMaxItemShow: import("@angular/core").InputSignal<{
48
+ year?: number;
49
+ month?: number;
50
+ quarter?: number;
51
+ day?: number;
52
+ } | undefined>;
53
+ readonly ignoreConvertYearSelected: import("@angular/core").InputSignal<boolean>;
54
+ readonly listKeysDisable: import("@angular/core").InputSignal<IDateDropdownDisableKeys | undefined>;
55
+ readonly ignoreAllowTimeEqual: import("@angular/core").InputSignalWithTransform<boolean, boolean>;
56
+ readonly ignoreValidTimeCompare: import("@angular/core").InputSignalWithTransform<boolean, boolean>;
57
+ readonly isCheckErrorWhenSelectItem: import("@angular/core").InputSignalWithTransform<boolean, boolean>;
58
+ readonly ignoreRequiredValueSecondWhenNotValidRequired: import("@angular/core").InputSignal<boolean>;
59
+ readonly validRequired: import("@angular/core").InputSignal<IValidDateDropdown | undefined>;
60
+ readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IDateDropdownFunctionControlEvent>;
61
+ readonly outSelectedDropdown: import("@angular/core").OutputEmitterRef<IEmitMultiDateDropdown | IEmitSingleDateDropdown>;
62
+ readonly outChooseMultiDate: import("@angular/core").OutputEmitterRef<IEmitMultiDateDropdown>;
63
+ readonly outChooseSingleDate: import("@angular/core").OutputEmitterRef<IEmitSingleDateDropdown>;
64
+ readonly outChangStageFlagMouse: import("@angular/core").OutputEmitterRef<IFlagMouse>;
65
+ private containerRef;
66
+ private labelFromRef;
67
+ private labelToRef;
68
+ private translate;
69
+ constructor();
70
+ ngOnInit(): void;
71
+ ngAfterViewInit(): void;
72
+ get FunctionsControl(): IDateDropdownFunctionControlEvent;
73
+ protected checkResponsive(): void;
74
+ protected handlerChangeSelectedKey(event: IEmitSingleDateDropdown, type: 'from' | 'to'): void;
75
+ private resetDropdown;
76
+ private resetError;
77
+ private setWidthDate;
78
+ protected handlerFunctionControl(event: IDateDropdownItemFunctionControlEvent, type: 'from' | 'to'): void;
79
+ protected checkValid(): Promise<boolean>;
80
+ private setError;
81
+ private compareDate;
82
+ private validate;
83
+ private checkCondition;
84
+ protected applyDate(): void;
85
+ protected handlerChangeWidthLabel(width: number): void;
86
+ protected handlerChangStageFlagMouse(flagMouse: IFlagMouse): void;
87
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsDatetimeDropdownComponent, never>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsDatetimeDropdownComponent, "libs_ui-components-datetime-dropdown", never, { "labelConfig": { "alias": "labelConfig"; "required": false; "isSignal": true; }; "widthDropdown": { "alias": "widthDropdown"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "maxYear": { "alias": "maxYear"; "required": false; "isSignal": true; }; "minYear": { "alias": "minYear"; "required": false; "isSignal": true; }; "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "isMultiple": { "alias": "isMultiple"; "required": false; "isSignal": true; }; "reverseYear": { "alias": "reverseYear"; "required": false; "isSignal": true; }; "isBorderError": { "alias": "isBorderError"; "required": false; "isSignal": true; }; "ignoreWidth100": { "alias": "ignoreWidth100"; "required": false; "isSignal": true; }; "widthByElement": { "alias": "widthByElement"; "required": false; "isSignal": true; }; "disableSecond": { "alias": "disableSecond"; "required": false; "isSignal": true; }; "typeFormat": { "alias": "typeFormat"; "required": false; "isSignal": true; }; "fromAndToDateLabel": { "alias": "fromAndToDateLabel"; "required": false; "isSignal": true; }; "listHasButtonUnSelectOption": { "alias": "listHasButtonUnSelectOption"; "required": false; "isSignal": true; }; "selectedDateTime": { "alias": "selectedDateTime"; "required": false; "isSignal": true; }; "isEmitAfterChanged": { "alias": "isEmitAfterChanged"; "required": false; "isSignal": true; }; "getItemYearDisplay": { "alias": "getItemYearDisplay"; "required": false; "isSignal": true; }; "ignoreFromAndToDateLabel": { "alias": "ignoreFromAndToDateLabel"; "required": false; "isSignal": true; }; "classIncludeTextDisplayWhenNoSelect": { "alias": "classIncludeTextDisplayWhenNoSelect"; "required": false; "isSignal": true; }; "hiddenDate": { "alias": "hiddenDate"; "required": false; "isSignal": true; }; "listMaxItemShow": { "alias": "listMaxItemShow"; "required": false; "isSignal": true; }; "ignoreConvertYearSelected": { "alias": "ignoreConvertYearSelected"; "required": false; "isSignal": true; }; "listKeysDisable": { "alias": "listKeysDisable"; "required": false; "isSignal": true; }; "ignoreAllowTimeEqual": { "alias": "ignoreAllowTimeEqual"; "required": false; "isSignal": true; }; "ignoreValidTimeCompare": { "alias": "ignoreValidTimeCompare"; "required": false; "isSignal": true; }; "isCheckErrorWhenSelectItem": { "alias": "isCheckErrorWhenSelectItem"; "required": false; "isSignal": true; }; "ignoreRequiredValueSecondWhenNotValidRequired": { "alias": "ignoreRequiredValueSecondWhenNotValidRequired"; "required": false; "isSignal": true; }; "validRequired": { "alias": "validRequired"; "required": false; "isSignal": true; }; }, { "outFunctionsControl": "outFunctionsControl"; "outSelectedDropdown": "outSelectedDropdown"; "outChooseMultiDate": "outChooseMultiDate"; "outChooseSingleDate": "outChooseSingleDate"; "outChangStageFlagMouse": "outChangStageFlagMouse"; }, never, never, true, never>;
89
+ }
@@ -0,0 +1,246 @@
1
+ import { returnDetailObject, returnListObject } from '@libs-ui/services-http-request';
2
+ import { UtilsHttpParamsRequest } from '@libs-ui/utils';
3
+ import { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR } from '@libs-ui/components-datetime-picker';
4
+ export const convertGetValue = (type, item, translate) => {
5
+ switch (type) {
6
+ case 'day':
7
+ return translate.instant('i18n_day_param', { day: item.label });
8
+ case 'month':
9
+ return translate.instant(item.label || ' ', { year: '' });
10
+ case 'year':
11
+ return translate.instant('i18n_year_param', { year: item.label });
12
+ case 'quarter':
13
+ return translate.instant('i18n_quarter', { quarter: item.label });
14
+ }
15
+ };
16
+ export const convertItemSelectedDefine = (type, item, translate, getItemYearDisplay, ignoreConvertYearSelected) => {
17
+ switch (type) {
18
+ case 'day':
19
+ return translate.instant('i18n_day_param', { day: item.label });
20
+ case 'month':
21
+ return translate.instant(item.label || ' ', { year: '' });
22
+ case 'year': {
23
+ let labelDisplay = ignoreConvertYearSelected ? item.label : translate.instant('i18n_year_param', { year: item.label });
24
+ if (getItemYearDisplay) {
25
+ labelDisplay = getItemYearDisplay(item.label);
26
+ }
27
+ return labelDisplay;
28
+ }
29
+ case 'quarter':
30
+ return translate.instant('i18n_quarter', { quarter: item.label });
31
+ }
32
+ };
33
+ export const LIST_MONTHS_DEFAULT = () => {
34
+ return [
35
+ {
36
+ id: 1,
37
+ label: 'i18n_january',
38
+ },
39
+ {
40
+ id: 2,
41
+ label: 'i18n_february',
42
+ },
43
+ {
44
+ id: 3,
45
+ label: 'i18n_march',
46
+ },
47
+ {
48
+ id: 4,
49
+ label: 'i18n_april',
50
+ },
51
+ {
52
+ id: 5,
53
+ label: 'i18n_may',
54
+ },
55
+ {
56
+ id: 6,
57
+ label: 'i18n_june',
58
+ },
59
+ {
60
+ id: 7,
61
+ label: 'i18n_july',
62
+ },
63
+ {
64
+ id: 8,
65
+ label: 'i18n_august',
66
+ },
67
+ {
68
+ id: 9,
69
+ label: 'i18n_september',
70
+ },
71
+ {
72
+ id: 10,
73
+ label: 'i18n_october',
74
+ },
75
+ {
76
+ id: 11,
77
+ label: 'i18n_november',
78
+ },
79
+ {
80
+ id: 12,
81
+ label: 'i18n_december',
82
+ },
83
+ ];
84
+ };
85
+ export const CompareDate = (dateCompare, ignoreAllowTimeSame) => {
86
+ const dateNumberOne = dateCompare[0];
87
+ if (dateCompare.length === 2) {
88
+ const dateNumberTow = dateCompare[1];
89
+ if (!dateNumberOne.from || !dateNumberOne.to || !dateNumberTow.from || !dateNumberTow.to) {
90
+ return false;
91
+ }
92
+ if (ignoreAllowTimeSame ? dateNumberOne.from > dateNumberOne.to : dateNumberOne.from >= dateNumberOne.to) {
93
+ return true;
94
+ }
95
+ if (dateNumberOne.from === dateNumberOne.to && (ignoreAllowTimeSame ? dateNumberTow.from > dateNumberTow.to : dateNumberTow.from >= dateNumberTow.to)) {
96
+ return true;
97
+ }
98
+ return false;
99
+ }
100
+ if (!dateNumberOne.from || !dateNumberOne.to) {
101
+ return false;
102
+ }
103
+ if (ignoreAllowTimeSame ? dateNumberOne.from > dateNumberOne.to : dateNumberOne.from >= dateNumberOne.to) {
104
+ return true;
105
+ }
106
+ return false;
107
+ };
108
+ export const getConfigHttpRequestDetailDate = (data) => {
109
+ return {
110
+ objectInstance: returnDetailObject(new UtilsHttpParamsRequest({ fromObject: { fieldKey: 'id' } }), data),
111
+ functionName: 'detailByData',
112
+ argumentsValue: [],
113
+ guideAutoUpdateArgumentsValue: {
114
+ paging: {},
115
+ detailById: {
116
+ subFieldUpdate: 'id',
117
+ fieldUpdate: '[0]',
118
+ fieldGetValue: '',
119
+ },
120
+ },
121
+ };
122
+ };
123
+ export const getConfigHttpRequestListDate = (data) => {
124
+ return {
125
+ objectInstance: returnListObject(data),
126
+ functionName: 'list',
127
+ argumentsValue: [],
128
+ };
129
+ };
130
+ export const buildListDataByTypeDate = (type, dataYear, keyMonth) => {
131
+ switch (type) {
132
+ case 'day':
133
+ return convertDay(keyMonth);
134
+ case 'month':
135
+ return LIST_MONTHS_DEFAULT();
136
+ case 'year':
137
+ return convertYear(dataYear.minYear, dataYear.maxYear, dataYear.reverseYear);
138
+ case 'quarter': {
139
+ const listQuarter = [];
140
+ for (let i = 1; i <= 4; i++) {
141
+ listQuarter.push({
142
+ id: i,
143
+ label: `${i}`,
144
+ });
145
+ }
146
+ return listQuarter;
147
+ }
148
+ }
149
+ };
150
+ export const defaultMonths = () => {
151
+ return [
152
+ {
153
+ id: 1,
154
+ label: 'i18n_january',
155
+ maxDays: 31,
156
+ },
157
+ {
158
+ id: 2,
159
+ label: 'i18n_february',
160
+ maxDays: 29,
161
+ },
162
+ {
163
+ id: 3,
164
+ label: 'i18n_march',
165
+ maxDays: 31,
166
+ },
167
+ {
168
+ id: 4,
169
+ label: 'i18n_april',
170
+ maxDays: 30,
171
+ },
172
+ {
173
+ id: 5,
174
+ label: 'i18n_may',
175
+ maxDays: 31,
176
+ },
177
+ {
178
+ id: 6,
179
+ label: 'i18n_june',
180
+ maxDays: 30,
181
+ },
182
+ {
183
+ id: 7,
184
+ label: 'i18n_july',
185
+ maxDays: 31,
186
+ },
187
+ {
188
+ id: 8,
189
+ label: 'i18n_august',
190
+ maxDays: 31,
191
+ },
192
+ {
193
+ id: 9,
194
+ label: 'i18n_september',
195
+ maxDays: 30,
196
+ },
197
+ {
198
+ id: 10,
199
+ label: 'i18n_october',
200
+ maxDays: 31,
201
+ },
202
+ {
203
+ id: 11,
204
+ label: 'i18n_november',
205
+ maxDays: 30,
206
+ },
207
+ {
208
+ id: 12,
209
+ label: 'i18n_december',
210
+ maxDays: 31,
211
+ },
212
+ ];
213
+ };
214
+ const convertYear = (minYear, maxYear, reverseYear) => {
215
+ const listYear = [];
216
+ const minYears = minYear ? minYear : DEFAULT_MIN_YEAR;
217
+ const maxYears = maxYear ? maxYear : DEFAULT_MAX_YEAR;
218
+ for (let i = minYears; i <= maxYears; i++) {
219
+ listYear.push({
220
+ id: i,
221
+ label: `${i}`,
222
+ });
223
+ }
224
+ if (reverseYear) {
225
+ listYear.reverse();
226
+ }
227
+ return listYear;
228
+ };
229
+ const convertDay = (key) => {
230
+ if (!key || isNaN(Number(key))) {
231
+ return [];
232
+ }
233
+ const dayDefault = defaultMonths().find((item) => Number(item.id) === Number(key));
234
+ if (!dayDefault) {
235
+ return [];
236
+ }
237
+ const listDay = [];
238
+ for (let i = 1; i <= dayDefault.maxDays; i++) {
239
+ listDay.push({
240
+ id: i,
241
+ label: `${i}`,
242
+ });
243
+ }
244
+ return listDay;
245
+ };
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1kcm9wZG93bi5kZWZpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2RlZmluZXMvZGF0ZS1kcm9wZG93bi5kZWZpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFzQixrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQXNCLEVBQUUsSUFBdUIsRUFBRSxTQUEyQixFQUFFLEVBQUU7SUFDOUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssS0FBSztZQUNSLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVsRSxLQUFLLE9BQU87WUFDVixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU1RCxLQUFLLE1BQU07WUFDVCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFcEUsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYs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QUM7SUFDWixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLEVBQUUsRUFBRSxDQUFDO1lBQ0wsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRZUEVfREFURV9GT1JNQVQsIFRZUEVfRFJPUERPV05fTU9OVEhfSUQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGUtZHJvcGRvd24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElIdHRwUmVxdWVzdENvbmZpZywgcmV0dXJuRGV0YWlsT2JqZWN0LCByZXR1cm5MaXN0T2JqZWN0IH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0JztcbmltcG9ydCB7IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3QgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBERUZBVUxUX01BWF9ZRUFSLCBERUZBVUxUX01JTl9ZRUFSIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kYXRldGltZS1waWNrZXInO1xuXG5leHBvcnQgY29uc3QgY29udmVydEdldFZhbHVlID0gKHR5cGU6IFRZUEVfREFURV9GT1JNQVQsIGl0ZW06IHsgbGFiZWw6IHN0cmluZyB9LCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnZGF5JzpcbiAgICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudCgnaTE4bl9kYXlfcGFyYW0nLCB7IGRheTogaXRlbS5sYWJlbCB9KTtcblxuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudChpdGVtLmxhYmVsIHx8ICcgJywgeyB5ZWFyOiAnJyB9KTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX3llYXJfcGFyYW0nLCB7IHllYXI6IGl0ZW0ubGFiZWwgfSk7XG5cbiAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudCgnaTE4bl9xdWFydGVyJywgeyBxdWFydGVyOiBpdGVtLmxhYmVsIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydEl0ZW1TZWxlY3RlZERlZmluZSA9ICh0eXBlOiBUWVBFX0RBVEVfRk9STUFULCBpdGVtOiB7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmc7IGxhYmVsRGlzcGxheTogc3RyaW5nIH0sIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgZ2V0SXRlbVllYXJEaXNwbGF5PzogKGxhYmVsOiBzdHJpbmcpID0+IHZvaWQsIGlnbm9yZUNvbnZlcnRZZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgICByZXR1cm4gdHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fZGF5X3BhcmFtJywgeyBkYXk6IGl0ZW0ubGFiZWwgfSk7XG5cbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gdHJhbnNsYXRlLmluc3RhbnQoaXRlbS5sYWJlbCB8fCAnICcsIHsgeWVhcjogJycgfSk7XG5cbiAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgbGV0IGxhYmVsRGlzcGxheSA9IGlnbm9yZUNvbnZlcnRZZWFyU2VsZWN0ZWQgPyBpdGVtLmxhYmVsIDogdHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5feWVhcl9wYXJhbScsIHsgeWVhcjogaXRlbS5sYWJlbCB9KTtcblxuICAgICAgaWYgKGdldEl0ZW1ZZWFyRGlzcGxheSkge1xuICAgICAgICBsYWJlbERpc3BsYXkgPSBnZXRJdGVtWWVhckRpc3BsYXkoaXRlbS5sYWJlbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYWJlbERpc3BsYXk7XG4gICAgfVxuXG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gdHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fcXVhcnRlcicsIHsgcXVhcnRlcjogaXRlbS5sYWJlbCB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExJU1RfTU9OVEhTX0RFRkFVTFQgPSAoKTogQXJyYXk8eyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0+ID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIGxhYmVsOiAnaTE4bl9qYW51YXJ5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAyLFxuICAgICAgbGFiZWw6ICdpMThuX2ZlYnJ1YXJ5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgbGFiZWw6ICdpMThuX21hcmNoJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA0LFxuICAgICAgbGFiZWw6ICdpMThuX2FwcmlsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA1LFxuICAgICAgbGFiZWw6ICdpMThuX21heScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNixcbiAgICAgIGxhYmVsOiAnaTE4bl9qdW5lJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA3LFxuICAgICAgbGFiZWw6ICdpMThuX2p1bHknLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDgsXG4gICAgICBsYWJlbDogJ2kxOG5fYXVndXN0JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA5LFxuICAgICAgbGFiZWw6ICdpMThuX3NlcHRlbWJlcicsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMTAsXG4gICAgICBsYWJlbDogJ2kxOG5fb2N0b2JlcicsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMTEsXG4gICAgICBsYWJlbDogJ2kxOG5fbm92ZW1iZXInLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDEyLFxuICAgICAgbGFiZWw6ICdpMThuX2RlY2VtYmVyJyxcbiAgICB9LFxuICBdO1xufTtcblxuZXhwb3J0IGNvbnN0IENvbXBhcmVEYXRlID0gKGRhdGVDb21wYXJlOiBBcnJheTx7IGZyb206IG51bWJlciB8IHVuZGVmaW5lZDsgdG86IG51bWJlciB8IHVuZGVmaW5lZCB9PiwgaWdub3JlQWxsb3dUaW1lU2FtZTogYm9vbGVhbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBkYXRlTnVtYmVyT25lID0gZGF0ZUNvbXBhcmVbMF07XG5cbiAgaWYgKGRhdGVDb21wYXJlLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IGRhdGVOdW1iZXJUb3cgPSBkYXRlQ29tcGFyZVsxXTtcblxuICAgIGlmICghZGF0ZU51bWJlck9uZS5mcm9tIHx8ICFkYXRlTnVtYmVyT25lLnRvIHx8ICFkYXRlTnVtYmVyVG93LmZyb20gfHwgIWRhdGVOdW1iZXJUb3cudG8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlnbm9yZUFsbG93VGltZVNhbWUgPyBkYXRlTnVtYmVyT25lLmZyb20gPiBkYXRlTnVtYmVyT25lLnRvIDogZGF0ZU51bWJlck9uZS5mcm9tID49IGRhdGVOdW1iZXJPbmUudG8pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZGF0ZU51bWJlck9uZS5mcm9tID09PSBkYXRlTnVtYmVyT25lLnRvICYmIChpZ25vcmVBbGxvd1RpbWVTYW1lID8gZGF0ZU51bWJlclRvdy5mcm9tID4gZGF0ZU51bWJlclRvdy50byA6IGRhdGVOdW1iZXJUb3cuZnJvbSA+PSBkYXRlTnVtYmVyVG93LnRvKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFkYXRlTnVtYmVyT25lLmZyb20gfHwgIWRhdGVOdW1iZXJPbmUudG8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGlnbm9yZUFsbG93VGltZVNhbWUgPyBkYXRlTnVtYmVyT25lLmZyb20gPiBkYXRlTnVtYmVyT25lLnRvIDogZGF0ZU51bWJlck9uZS5mcm9tID49IGRhdGVOdW1iZXJPbmUudG8pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25maWdIdHRwUmVxdWVzdERldGFpbERhdGUgPSAoZGF0YTogQXJyYXk8eyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0+KTogSUh0dHBSZXF1ZXN0Q29uZmlnID0+IHtcbiAgcmV0dXJuIHtcbiAgICBvYmplY3RJbnN0YW5jZTogcmV0dXJuRGV0YWlsT2JqZWN0KG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHsgZnJvbU9iamVjdDogeyBmaWVsZEtleTogJ2lkJyB9IH0pLCBkYXRhKSxcbiAgICBmdW5jdGlvbk5hbWU6ICdkZXRhaWxCeURhdGEnLFxuICAgIGFyZ3VtZW50c1ZhbHVlOiBbXSxcbiAgICBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZToge1xuICAgICAgcGFnaW5nOiB7fSxcbiAgICAgIGRldGFpbEJ5SWQ6IHtcbiAgICAgICAgc3ViRmllbGRVcGRhdGU6ICdpZCcsXG4gICAgICAgIGZpZWxkVXBkYXRlOiAnWzBdJyxcbiAgICAgICAgZmllbGRHZXRWYWx1ZTogJycsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnSHR0cFJlcXVlc3RMaXN0RGF0ZSA9IChkYXRhOiBBcnJheTx7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfT4pOiBJSHR0cFJlcXVlc3RDb25maWcgPT4ge1xuICByZXR1cm4ge1xuICAgIG9iamVjdEluc3RhbmNlOiByZXR1cm5MaXN0T2JqZWN0KGRhdGEpLFxuICAgIGZ1bmN0aW9uTmFtZTogJ2xpc3QnLFxuICAgIGFyZ3VtZW50c1ZhbHVlOiBbXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZExpc3REYXRhQnlUeXBlRGF0ZSA9ICh0eXBlOiBUWVBFX0RBVEVfRk9STUFULCBkYXRhWWVhcjogeyBtaW5ZZWFyPzogbnVtYmVyOyBtYXhZZWFyPzogbnVtYmVyOyByZXZlcnNlWWVhcj86IGJvb2xlYW4gfSwga2V5TW9udGg6IGFueSk6IEFycmF5PHsgaWQ6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9PiA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgICByZXR1cm4gY29udmVydERheShrZXlNb250aCk7XG5cbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gTElTVF9NT05USFNfREVGQVVMVCgpO1xuXG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gY29udmVydFllYXIoZGF0YVllYXIubWluWWVhciwgZGF0YVllYXIubWF4WWVhciwgZGF0YVllYXIucmV2ZXJzZVllYXIpO1xuXG4gICAgY2FzZSAncXVhcnRlcic6IHtcbiAgICAgIGNvbnN0IGxpc3RRdWFydGVyID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDQ7IGkrKykge1xuICAgICAgICBsaXN0UXVhcnRlci5wdXNoKHtcbiAgICAgICAgICBpZDogaSxcbiAgICAgICAgICBsYWJlbDogYCR7aX1gLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3RRdWFydGVyO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRNb250aHMgPSAoKTogQXJyYXk8eyBpZDogVFlQRV9EUk9QRE9XTl9NT05USF9JRDsgbGFiZWw6IHN0cmluZzsgbWF4RGF5czogbnVtYmVyIH0+ID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIGxhYmVsOiAnaTE4bl9qYW51YXJ5JyxcbiAgICAgIG1heERheXM6IDMxLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBsYWJlbDogJ2kxOG5fZmVicnVhcnknLFxuICAgICAgbWF4RGF5czogMjksXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIGxhYmVsOiAnaTE4bl9tYXJjaCcsXG4gICAgICBtYXhEYXlzOiAzMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA0LFxuICAgICAgbGFiZWw6ICdpMThuX2FwcmlsJyxcbiAgICAgIG1heERheXM6IDMwLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDUsXG4gICAgICBsYWJlbDogJ2kxOG5fbWF5JyxcbiAgICAgIG1heERheXM6IDMxLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDYsXG4gICAgICBsYWJlbDogJ2kxOG5fanVuZScsXG4gICAgICBtYXhEYXlzOiAzMCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA3LFxuICAgICAgbGFiZWw6ICdpMThuX2p1bHknLFxuICAgICAgbWF4RGF5czogMzEsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogOCxcbiAgICAgIGxhYmVsOiAnaTE4bl9hdWd1c3QnLFxuICAgICAgbWF4RGF5czogMzEsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogOSxcbiAgICAgIGxhYmVsOiAnaTE4bl9zZXB0ZW1iZXInLFxuICAgICAgbWF4RGF5czogMzAsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMTAsXG4gICAgICBsYWJlbDogJ2kxOG5fb2N0b2JlcicsXG4gICAgICBtYXhEYXlzOiAzMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAxMSxcbiAgICAgIGxhYmVsOiAnaTE4bl9ub3ZlbWJlcicsXG4gICAgICBtYXhEYXlzOiAzMCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAxMixcbiAgICAgIGxhYmVsOiAnaTE4bl9kZWNlbWJlcicsXG4gICAgICBtYXhEYXlzOiAzMSxcbiAgICB9LFxuICBdO1xufTtcblxuY29uc3QgY29udmVydFllYXIgPSAobWluWWVhcj86IG51bWJlciwgbWF4WWVhcj86IG51bWJlciwgcmV2ZXJzZVllYXI/OiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IGxpc3RZZWFyID0gW107XG4gIGNvbnN0IG1pblllYXJzID0gbWluWWVhciA/IG1pblllYXIgOiBERUZBVUxUX01JTl9ZRUFSO1xuICBjb25zdCBtYXhZZWFycyA9IG1heFllYXIgPyBtYXhZZWFyIDogREVGQVVMVF9NQVhfWUVBUjtcblxuICBmb3IgKGxldCBpID0gbWluWWVhcnM7IGkgPD0gbWF4WWVhcnM7IGkrKykge1xuICAgIGxpc3RZZWFyLnB1c2goe1xuICAgICAgaWQ6IGksXG4gICAgICBsYWJlbDogYCR7aX1gLFxuICAgIH0pO1xuICB9XG4gIGlmIChyZXZlcnNlWWVhcikge1xuICAgIGxpc3RZZWFyLnJldmVyc2UoKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0WWVhcjtcbn07XG5cbmNvbnN0IGNvbnZlcnREYXkgPSAoa2V5OiBhbnkpID0+IHtcbiAgaWYgKCFrZXkgfHwgaXNOYU4oTnVtYmVyKGtleSkpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGRheURlZmF1bHQgPSBkZWZhdWx0TW9udGhzKCkuZmluZCgoaXRlbSkgPT4gTnVtYmVyKGl0ZW0uaWQpID09PSBOdW1iZXIoa2V5KSk7XG5cbiAgaWYgKCFkYXlEZWZhdWx0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGxpc3REYXkgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBkYXlEZWZhdWx0Lm1heERheXM7IGkrKykge1xuICAgIGxpc3REYXkucHVzaCh7XG4gICAgICBpZDogaSxcbiAgICAgIGxhYmVsOiBgJHtpfWAsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdERheTtcbn07XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { Directive, ElementRef, inject, output, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LibsUiComponentsDatetimeDropdownDirective {
4
+ resizeObserver = signal(undefined);
5
+ elementRef = inject(ElementRef);
6
+ outChangeWidth = output();
7
+ ngOnInit() {
8
+ this.resizeObserver.set(new ResizeObserver((entries) => {
9
+ for (const entry of entries) {
10
+ if (entry.target === this.elementRef.nativeElement) {
11
+ this.outChangeWidth.emit(entry.contentRect.width);
12
+ }
13
+ }
14
+ }));
15
+ this.resizeObserver()?.observe(this.elementRef.nativeElement);
16
+ }
17
+ ngOnDestroy() {
18
+ if (this.resizeObserver()) {
19
+ this.resizeObserver()?.disconnect();
20
+ }
21
+ }
22
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
23
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: LibsUiComponentsDatetimeDropdownDirective, isStandalone: true, selector: "[LibsUiComponentsDatetimeDropdownDirective]", outputs: { outChangeWidth: "outChangeWidth" }, ngImport: i0 });
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownDirective, decorators: [{
26
+ type: Directive,
27
+ args: [{
28
+ // eslint-disable-next-line @angular-eslint/directive-selector
29
+ selector: '[LibsUiComponentsDatetimeDropdownDirective]',
30
+ standalone: true,
31
+ }]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1kcm9wZG93bi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvZHJvcGRvd24vc3JjL2RpcmVjdGl2ZS9kYXRlLWRyb3Bkb3duLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0vRyxNQUFNLE9BQU8seUNBQXlDO0lBQzVDLGNBQWMsR0FBRyxNQUFNLENBQTZCLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFL0IsY0FBYyxHQUFHLE1BQU0sRUFBVSxDQUFDO0lBRTNDLFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsSUFBSSxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7d0dBdkJVLHlDQUF5Qzs0RkFBekMseUNBQXlDOzs0RkFBekMseUNBQXlDO2tCQUxyRCxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDZDQUE2QztvQkFDdkQsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25EaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lRHJvcGRvd25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXIgPSBzaWduYWw8UmVzaXplT2JzZXJ2ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICByZWFkb25seSBvdXRDaGFuZ2VXaWR0aCA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5zZXQoXG4gICAgICBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgaWYgKGVudHJ5LnRhcmdldCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMub3V0Q2hhbmdlV2lkdGguZW1pdChlbnRyeS5jb250ZW50UmVjdC53aWR0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcigpPy5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKCkpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIoKT8uZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuIl19