@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
@@ -0,0 +1,928 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, inject, ElementRef, output, Directive, Pipe, computed, input, effect, untracked, Component, viewChild, ChangeDetectionStrategy } from '@angular/core';
3
+ import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
4
+ import * as i1 from '@ngx-translate/core';
5
+ import { TranslateService, TranslateModule } from '@ngx-translate/core';
6
+ import { Subject, timer, fromEvent, takeUntil } from 'rxjs';
7
+ import { returnDetailObject, returnListObject } from '@libs-ui/services-http-request';
8
+ import { UtilsHttpParamsRequest } from '@libs-ui/utils';
9
+ import { DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR } from '@libs-ui/components-datetime-picker';
10
+ import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
11
+
12
+ const convertGetValue = (type, item, translate) => {
13
+ switch (type) {
14
+ case 'day':
15
+ return translate.instant('i18n_day_param', { day: item.label });
16
+ case 'month':
17
+ return translate.instant(item.label || ' ', { year: '' });
18
+ case 'year':
19
+ return translate.instant('i18n_year_param', { year: item.label });
20
+ case 'quarter':
21
+ return translate.instant('i18n_quarter', { quarter: item.label });
22
+ }
23
+ };
24
+ const convertItemSelectedDefine = (type, item, translate, getItemYearDisplay, ignoreConvertYearSelected) => {
25
+ switch (type) {
26
+ case 'day':
27
+ return translate.instant('i18n_day_param', { day: item.label });
28
+ case 'month':
29
+ return translate.instant(item.label || ' ', { year: '' });
30
+ case 'year': {
31
+ let labelDisplay = ignoreConvertYearSelected ? item.label : translate.instant('i18n_year_param', { year: item.label });
32
+ if (getItemYearDisplay) {
33
+ labelDisplay = getItemYearDisplay(item.label);
34
+ }
35
+ return labelDisplay;
36
+ }
37
+ case 'quarter':
38
+ return translate.instant('i18n_quarter', { quarter: item.label });
39
+ }
40
+ };
41
+ const LIST_MONTHS_DEFAULT = () => {
42
+ return [
43
+ {
44
+ id: 1,
45
+ label: 'i18n_january',
46
+ },
47
+ {
48
+ id: 2,
49
+ label: 'i18n_february',
50
+ },
51
+ {
52
+ id: 3,
53
+ label: 'i18n_march',
54
+ },
55
+ {
56
+ id: 4,
57
+ label: 'i18n_april',
58
+ },
59
+ {
60
+ id: 5,
61
+ label: 'i18n_may',
62
+ },
63
+ {
64
+ id: 6,
65
+ label: 'i18n_june',
66
+ },
67
+ {
68
+ id: 7,
69
+ label: 'i18n_july',
70
+ },
71
+ {
72
+ id: 8,
73
+ label: 'i18n_august',
74
+ },
75
+ {
76
+ id: 9,
77
+ label: 'i18n_september',
78
+ },
79
+ {
80
+ id: 10,
81
+ label: 'i18n_october',
82
+ },
83
+ {
84
+ id: 11,
85
+ label: 'i18n_november',
86
+ },
87
+ {
88
+ id: 12,
89
+ label: 'i18n_december',
90
+ },
91
+ ];
92
+ };
93
+ const CompareDate = (dateCompare, ignoreAllowTimeSame) => {
94
+ const dateNumberOne = dateCompare[0];
95
+ if (dateCompare.length === 2) {
96
+ const dateNumberTow = dateCompare[1];
97
+ if (!dateNumberOne.from || !dateNumberOne.to || !dateNumberTow.from || !dateNumberTow.to) {
98
+ return false;
99
+ }
100
+ if (ignoreAllowTimeSame ? dateNumberOne.from > dateNumberOne.to : dateNumberOne.from >= dateNumberOne.to) {
101
+ return true;
102
+ }
103
+ if (dateNumberOne.from === dateNumberOne.to && (ignoreAllowTimeSame ? dateNumberTow.from > dateNumberTow.to : dateNumberTow.from >= dateNumberTow.to)) {
104
+ return true;
105
+ }
106
+ return false;
107
+ }
108
+ if (!dateNumberOne.from || !dateNumberOne.to) {
109
+ return false;
110
+ }
111
+ if (ignoreAllowTimeSame ? dateNumberOne.from > dateNumberOne.to : dateNumberOne.from >= dateNumberOne.to) {
112
+ return true;
113
+ }
114
+ return false;
115
+ };
116
+ const getConfigHttpRequestDetailDate = (data) => {
117
+ return {
118
+ objectInstance: returnDetailObject(new UtilsHttpParamsRequest({ fromObject: { fieldKey: 'id' } }), data),
119
+ functionName: 'detailByData',
120
+ argumentsValue: [],
121
+ guideAutoUpdateArgumentsValue: {
122
+ paging: {},
123
+ detailById: {
124
+ subFieldUpdate: 'id',
125
+ fieldUpdate: '[0]',
126
+ fieldGetValue: '',
127
+ },
128
+ },
129
+ };
130
+ };
131
+ const getConfigHttpRequestListDate = (data) => {
132
+ return {
133
+ objectInstance: returnListObject(data),
134
+ functionName: 'list',
135
+ argumentsValue: [],
136
+ };
137
+ };
138
+ const buildListDataByTypeDate = (type, dataYear, keyMonth) => {
139
+ switch (type) {
140
+ case 'day':
141
+ return convertDay(keyMonth);
142
+ case 'month':
143
+ return LIST_MONTHS_DEFAULT();
144
+ case 'year':
145
+ return convertYear(dataYear.minYear, dataYear.maxYear, dataYear.reverseYear);
146
+ case 'quarter': {
147
+ const listQuarter = [];
148
+ for (let i = 1; i <= 4; i++) {
149
+ listQuarter.push({
150
+ id: i,
151
+ label: `${i}`,
152
+ });
153
+ }
154
+ return listQuarter;
155
+ }
156
+ }
157
+ };
158
+ const defaultMonths = () => {
159
+ return [
160
+ {
161
+ id: 1,
162
+ label: 'i18n_january',
163
+ maxDays: 31,
164
+ },
165
+ {
166
+ id: 2,
167
+ label: 'i18n_february',
168
+ maxDays: 29,
169
+ },
170
+ {
171
+ id: 3,
172
+ label: 'i18n_march',
173
+ maxDays: 31,
174
+ },
175
+ {
176
+ id: 4,
177
+ label: 'i18n_april',
178
+ maxDays: 30,
179
+ },
180
+ {
181
+ id: 5,
182
+ label: 'i18n_may',
183
+ maxDays: 31,
184
+ },
185
+ {
186
+ id: 6,
187
+ label: 'i18n_june',
188
+ maxDays: 30,
189
+ },
190
+ {
191
+ id: 7,
192
+ label: 'i18n_july',
193
+ maxDays: 31,
194
+ },
195
+ {
196
+ id: 8,
197
+ label: 'i18n_august',
198
+ maxDays: 31,
199
+ },
200
+ {
201
+ id: 9,
202
+ label: 'i18n_september',
203
+ maxDays: 30,
204
+ },
205
+ {
206
+ id: 10,
207
+ label: 'i18n_october',
208
+ maxDays: 31,
209
+ },
210
+ {
211
+ id: 11,
212
+ label: 'i18n_november',
213
+ maxDays: 30,
214
+ },
215
+ {
216
+ id: 12,
217
+ label: 'i18n_december',
218
+ maxDays: 31,
219
+ },
220
+ ];
221
+ };
222
+ const convertYear = (minYear, maxYear, reverseYear) => {
223
+ const listYear = [];
224
+ const minYears = minYear ? minYear : DEFAULT_MIN_YEAR;
225
+ const maxYears = maxYear ? maxYear : DEFAULT_MAX_YEAR;
226
+ for (let i = minYears; i <= maxYears; i++) {
227
+ listYear.push({
228
+ id: i,
229
+ label: `${i}`,
230
+ });
231
+ }
232
+ if (reverseYear) {
233
+ listYear.reverse();
234
+ }
235
+ return listYear;
236
+ };
237
+ const convertDay = (key) => {
238
+ if (!key || isNaN(Number(key))) {
239
+ return [];
240
+ }
241
+ const dayDefault = defaultMonths().find((item) => Number(item.id) === Number(key));
242
+ if (!dayDefault) {
243
+ return [];
244
+ }
245
+ const listDay = [];
246
+ for (let i = 1; i <= dayDefault.maxDays; i++) {
247
+ listDay.push({
248
+ id: i,
249
+ label: `${i}`,
250
+ });
251
+ }
252
+ return listDay;
253
+ };
254
+
255
+ class LibsUiComponentsDatetimeDropdownDirective {
256
+ resizeObserver = signal(undefined);
257
+ elementRef = inject(ElementRef);
258
+ outChangeWidth = output();
259
+ ngOnInit() {
260
+ this.resizeObserver.set(new ResizeObserver((entries) => {
261
+ for (const entry of entries) {
262
+ if (entry.target === this.elementRef.nativeElement) {
263
+ this.outChangeWidth.emit(entry.contentRect.width);
264
+ }
265
+ }
266
+ }));
267
+ this.resizeObserver()?.observe(this.elementRef.nativeElement);
268
+ }
269
+ ngOnDestroy() {
270
+ if (this.resizeObserver()) {
271
+ this.resizeObserver()?.disconnect();
272
+ }
273
+ }
274
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
275
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: LibsUiComponentsDatetimeDropdownDirective, isStandalone: true, selector: "[LibsUiComponentsDatetimeDropdownDirective]", outputs: { outChangeWidth: "outChangeWidth" }, ngImport: i0 });
276
+ }
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownDirective, decorators: [{
278
+ type: Directive,
279
+ args: [{
280
+ // eslint-disable-next-line @angular-eslint/directive-selector
281
+ selector: '[LibsUiComponentsDatetimeDropdownDirective]',
282
+ standalone: true,
283
+ }]
284
+ }] });
285
+
286
+ /* eslint-disable @typescript-eslint/no-explicit-any */
287
+ class LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe {
288
+ transform(type, dataYear, keyMonth) {
289
+ return buildListDataByTypeDate(type, dataYear, keyMonth);
290
+ }
291
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
292
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe, isStandalone: true, name: "LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe" });
293
+ }
294
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe, decorators: [{
295
+ type: Pipe,
296
+ args: [{
297
+ name: 'LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe',
298
+ standalone: true,
299
+ }]
300
+ }] });
301
+
302
+ class LibsUiComponentsDatetimeDropdownBuildWidthPipe {
303
+ transform(widthByElement, widthDropdown, first, multiDate) {
304
+ if (widthByElement) {
305
+ return first ? `${widthDropdown}px` : '100%';
306
+ }
307
+ if (multiDate) {
308
+ return first ? `${widthDropdown}px` : '100%';
309
+ }
310
+ return `${widthDropdown}px`;
311
+ }
312
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownBuildWidthPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
313
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownBuildWidthPipe, isStandalone: true, name: "LibsUiComponentsDatetimeDropdownBuildWidthPipe" });
314
+ }
315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownBuildWidthPipe, decorators: [{
316
+ type: Pipe,
317
+ args: [{
318
+ name: 'LibsUiComponentsDatetimeDropdownBuildWidthPipe',
319
+ standalone: true,
320
+ }]
321
+ }] });
322
+
323
+ /* eslint-disable @typescript-eslint/no-explicit-any */
324
+ class LibsUiComponentsDatetimeDropdownItemChildComponent {
325
+ // #region PROPERTY
326
+ httpRequestDetailItemById = signal(undefined);
327
+ listConfig = signal({
328
+ type: 'text',
329
+ configTemplateText: signal({
330
+ fieldKey: 'id',
331
+ autoScrollToItemSelected: true,
332
+ }),
333
+ });
334
+ textNoSelectDisplay = computed(this.computedTextNoSelectDisplay.bind(this));
335
+ usingWidth = computed(this.computedWidth.bind(this));
336
+ // #region INPUT
337
+ typeDate = input(undefined);
338
+ getItemYearDisplay = input();
339
+ listHasButtonUnSelectOption = input();
340
+ readonly = input(false, { transform: (value) => value ?? false });
341
+ disable = input(false, { transform: (value) => value ?? false });
342
+ listData = input([]);
343
+ showBorderError = input(undefined);
344
+ listMaxItemShow = input(6, { transform: (value) => value ?? 6 });
345
+ zIndex = input(1000, { transform: (value) => value ?? 1000 });
346
+ classIncludeTextDisplayWhenNoSelect = input('');
347
+ listKeySelected = input();
348
+ widthDropdown = input(136);
349
+ first = input(undefined);
350
+ isError = input();
351
+ widthByElement = input();
352
+ ignoreConvertYearSelected = input();
353
+ listKeysDisable = input(undefined);
354
+ validRequired = input();
355
+ // #region OUTPUT
356
+ outSelectedKey = output();
357
+ outFunctionControl = output();
358
+ outChangStageFlagMouse = output();
359
+ // #region INJECT
360
+ translate = inject(TranslateService);
361
+ constructor() {
362
+ effect(() => {
363
+ const listData = this.listData();
364
+ untracked(() => {
365
+ this.httpRequestDetailItemById.set(getConfigHttpRequestDetailDate(listData));
366
+ this.listConfig.update((current) => {
367
+ if (!current.httpRequestData) {
368
+ current.httpRequestData = signal(getConfigHttpRequestListDate(listData));
369
+ }
370
+ current.httpRequestData.set(getConfigHttpRequestListDate(listData));
371
+ if (!current.configTemplateText) {
372
+ current.configTemplateText = signal({
373
+ fieldKey: 'id',
374
+ autoScrollToItemSelected: true,
375
+ });
376
+ }
377
+ current.configTemplateText.set({
378
+ fieldKey: 'id',
379
+ autoScrollToItemSelected: true,
380
+ getValue: (item) => {
381
+ return convertGetValue(this.typeDate() || 'month', item, this.translate);
382
+ },
383
+ });
384
+ return current;
385
+ });
386
+ });
387
+ });
388
+ }
389
+ /* FUNCTIONS */
390
+ handlerChangeSelectedItem(event) {
391
+ if (this.listKeySelected() === event?.key) {
392
+ return;
393
+ }
394
+ if (!event || !event.key) {
395
+ this.outSelectedKey.emit(undefined);
396
+ return;
397
+ }
398
+ this.outSelectedKey.emit(event.key);
399
+ }
400
+ handlerFunctionControl(event) {
401
+ this.outFunctionControl.emit(event);
402
+ }
403
+ handlerChangFlagMouse(flagMouse) {
404
+ this.outChangStageFlagMouse.emit(flagMouse);
405
+ }
406
+ convertItemSelected = (item) => {
407
+ if (!item || !this.typeDate()) {
408
+ return;
409
+ }
410
+ item.labelDisplay = convertItemSelectedDefine(this.typeDate() ?? 'month', item, this.translate, this.getItemYearDisplay(), this.ignoreConvertYearSelected());
411
+ return item;
412
+ };
413
+ computedTextNoSelectDisplay() {
414
+ switch (this.typeDate()) {
415
+ case 'day':
416
+ return 'i18n_select_day';
417
+ case 'month':
418
+ return 'i18n_select_month';
419
+ case 'year':
420
+ return 'i18n_select_year';
421
+ case 'quarter':
422
+ return 'i18n_select_quarter';
423
+ default:
424
+ return 'month';
425
+ }
426
+ }
427
+ computedWidth() {
428
+ if (this.widthByElement()) {
429
+ return this.first() ? `${this.widthDropdown()}px` : '100%';
430
+ }
431
+ return `${this.widthDropdown()}px`;
432
+ }
433
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemChildComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
434
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsDatetimeDropdownItemChildComponent, isStandalone: true, selector: "libs_ui-components-datetime-dropdown-item-child", inputs: { typeDate: { classPropertyName: "typeDate", publicName: "typeDate", isSignal: true, isRequired: false, transformFunction: null }, getItemYearDisplay: { classPropertyName: "getItemYearDisplay", publicName: "getItemYearDisplay", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, listData: { classPropertyName: "listData", publicName: "listData", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, widthDropdown: { classPropertyName: "widthDropdown", publicName: "widthDropdown", isSignal: true, isRequired: false, transformFunction: null }, first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, isError: { classPropertyName: "isError", publicName: "isError", isSignal: true, isRequired: false, transformFunction: null }, widthByElement: { classPropertyName: "widthByElement", publicName: "widthByElement", isSignal: true, isRequired: false, transformFunction: null }, ignoreConvertYearSelected: { classPropertyName: "ignoreConvertYearSelected", publicName: "ignoreConvertYearSelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outSelectedKey: "outSelectedKey", outFunctionControl: "outFunctionControl", outChangStageFlagMouse: "outChangStageFlagMouse" }, ngImport: i0, template: "@if (typeDate() && httpRequestDetailItemById()) {\n <div [style.width]=\"usingWidth()\">\n <libs_ui-components-dropdown\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [readonly]=\"readonly()\"\n [textDisplayWhenNoSelect]=\"textNoSelectDisplay()\"\n [disable]=\"disable()\"\n [showBorderError]=\"showBorderError()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listClickExactly]=\"false\"\n [zIndex]=\"zIndex()\"\n [labelPopoverConfig]=\"{ zIndex: zIndex() + 1 }\"\n [listConfig]=\"listConfig()\"\n [listKeysDisable]=\"listKeysDisable()\"\n [convertItemSelected]=\"convertItemSelected\"\n [onlyEmitDataWhenReset]=\"true\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect()\"\n [httpRequestDetailItemById]=\"httpRequestDetailItemById()\"\n [listKeySelected]=\"listKeySelected()\"\n (outSelectKey)=\"handlerChangeSelectedItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n}\n@if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n @let constHtmlMessage = validRequired()?.message || 'i18n_valid_empty_message';\n <span\n class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"constHtmlMessage | translate: validRequired()?.interpolateParams\"></span>\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }] });
435
+ }
436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemChildComponent, decorators: [{
437
+ type: Component,
438
+ args: [{ selector: 'libs_ui-components-datetime-dropdown-item-child', standalone: true, imports: [TranslateModule, LibsUiComponentsDropdownComponent], template: "@if (typeDate() && httpRequestDetailItemById()) {\n <div [style.width]=\"usingWidth()\">\n <libs_ui-components-dropdown\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [readonly]=\"readonly()\"\n [textDisplayWhenNoSelect]=\"textNoSelectDisplay()\"\n [disable]=\"disable()\"\n [showBorderError]=\"showBorderError()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listClickExactly]=\"false\"\n [zIndex]=\"zIndex()\"\n [labelPopoverConfig]=\"{ zIndex: zIndex() + 1 }\"\n [listConfig]=\"listConfig()\"\n [listKeysDisable]=\"listKeysDisable()\"\n [convertItemSelected]=\"convertItemSelected\"\n [onlyEmitDataWhenReset]=\"true\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect()\"\n [httpRequestDetailItemById]=\"httpRequestDetailItemById()\"\n [listKeySelected]=\"listKeySelected()\"\n (outSelectKey)=\"handlerChangeSelectedItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n}\n@if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n @let constHtmlMessage = validRequired()?.message || 'i18n_valid_empty_message';\n <span\n class=\"libs-ui-text-error libs-ui-font-h7r\"\n [innerHtml]=\"constHtmlMessage | translate: validRequired()?.interpolateParams\"></span>\n </div>\n}\n" }]
439
+ }], ctorParameters: () => [] });
440
+
441
+ /* eslint-disable @typescript-eslint/no-explicit-any */
442
+ class LibsUiComponentsDatetimeDropdownItemComponent {
443
+ // #region PROPERTY
444
+ typeListDate = signal([]);
445
+ keyMonthResetDay = signal(undefined);
446
+ selectedSingle = signal({});
447
+ isError = signal(undefined);
448
+ // #region INPUT
449
+ typeDate = input(undefined);
450
+ disableSecond = input(undefined);
451
+ selectedDate = input(undefined);
452
+ widthDropdown = input(136, { transform: (value) => value ?? 136 });
453
+ widthByElement = input(undefined);
454
+ getItemYearDisplay = input(undefined);
455
+ listHasButtonUnSelectOption = input(undefined);
456
+ readonly = input(false);
457
+ disable = input(false);
458
+ zIndex = input(1200, { transform: (value) => value ?? 1200 });
459
+ isMultiple = input(undefined);
460
+ classIncludeTextDisplayWhenNoSelect = input(undefined);
461
+ isCheckErrorWhenSelectItem = input(undefined);
462
+ maxYear = input(undefined);
463
+ minYear = input(undefined);
464
+ reverseYear = input(true, { transform: (value) => value ?? true });
465
+ listKeysDisable = input(undefined);
466
+ ignoreConvertYearSelected = input(undefined);
467
+ validRequired = input(undefined);
468
+ isEmitSelectedDropDown = input(undefined);
469
+ listMaxItemShow = input(undefined);
470
+ // #region OUTPUT
471
+ outSelectedData = output();
472
+ outFunctionControl = output();
473
+ outChangStageFlagMouse = output();
474
+ constructor() {
475
+ effect(() => {
476
+ const typeDate = this.typeDate();
477
+ if (!typeDate) {
478
+ return;
479
+ }
480
+ untracked(() => {
481
+ const data = typeDate.split('-');
482
+ const results = data.map((item) => {
483
+ return signal({ id: (item || 'month'), keySelected: undefined });
484
+ }) || [];
485
+ this.typeListDate.set(results);
486
+ });
487
+ });
488
+ effect(() => {
489
+ const selectedDate = this.selectedDate();
490
+ if (!selectedDate) {
491
+ return;
492
+ }
493
+ untracked(() => {
494
+ this.selectedSingle.set(selectedDate);
495
+ if (!this.typeListDate().length) {
496
+ return;
497
+ }
498
+ if (this.typeDate() === 'month-day' && selectedDate.month) {
499
+ this.keyMonthResetDay.set(selectedDate.month);
500
+ }
501
+ this.typeListDate().forEach((item, index) => {
502
+ item.update((current) => {
503
+ current.keySelected = selectedDate[current.id] ?? undefined;
504
+ if ((this.disableSecond() && index !== 0 && !current.keySelected) || (!selectedDate['month'] && this.typeDate() === 'month-day' && item().id === 'day')) {
505
+ current.disable = true;
506
+ }
507
+ return current;
508
+ });
509
+ });
510
+ });
511
+ });
512
+ }
513
+ ngOnInit() {
514
+ this.outFunctionControl.emit(this.FunctionsControl);
515
+ }
516
+ /* FUNCTIONS */
517
+ get FunctionsControl() {
518
+ return {
519
+ checkIsValid: this.validate.bind(this),
520
+ resetDropdown: this.resetDropdown.bind(this),
521
+ resetError: this.resetError.bind(this),
522
+ setError: this.setError.bind(this),
523
+ };
524
+ }
525
+ handlerSelectedKey(event, typeDate, i) {
526
+ if (this.selectedSingle()[typeDate().id] === event && this.isEmitSelectedDropDown()) {
527
+ this.outSelectedData.emit(this.selectedSingle());
528
+ return;
529
+ }
530
+ typeDate.update((current) => {
531
+ current.keySelected = event;
532
+ return current;
533
+ });
534
+ if (this.selectedSingle()) {
535
+ this.selectedSingle.update((current) => {
536
+ current[typeDate().id] = event ? Number(event) : undefined;
537
+ return current;
538
+ });
539
+ }
540
+ if (this.disableSecond() || (this.typeDate() === 'month-day' && typeDate().id === 'month')) {
541
+ this.keyMonthResetDay.set(event);
542
+ this.typeListDate().forEach((item) => {
543
+ item.update((current) => {
544
+ current.disable = false;
545
+ return current;
546
+ });
547
+ });
548
+ }
549
+ this.typeListDate().forEach((item, index) => {
550
+ if (index === 1 && item().functionControl && i === 0) {
551
+ item().functionControl?.reset();
552
+ }
553
+ });
554
+ if (typeDate().keySelected && !this.isCheckErrorWhenSelectItem()) {
555
+ typeDate.update((current) => {
556
+ current.showBorderError = false;
557
+ current.isError = false;
558
+ return current;
559
+ });
560
+ this.checkError();
561
+ }
562
+ this.outSelectedData.emit(this.selectedSingle());
563
+ }
564
+ checkError() {
565
+ if (!this.isError) {
566
+ return;
567
+ }
568
+ let isError = false;
569
+ this.typeListDate().forEach((item) => {
570
+ if (item().showBorderError) {
571
+ isError = true;
572
+ }
573
+ });
574
+ if (!isError) {
575
+ this.isError.set(false);
576
+ }
577
+ }
578
+ handlerFunctionControl(event, item) {
579
+ item.update((current) => {
580
+ current.functionControl = event;
581
+ return current;
582
+ });
583
+ }
584
+ async resetDropdown() {
585
+ this.typeListDate().forEach((item) => {
586
+ this.selectedSingle.update((current) => {
587
+ current[item().id] = undefined;
588
+ return current;
589
+ });
590
+ item.update((current) => {
591
+ current.keySelected = undefined;
592
+ current.functionControl?.reset();
593
+ return current;
594
+ });
595
+ });
596
+ this.resetError();
597
+ this.outSelectedData.emit(this.selectedSingle());
598
+ }
599
+ async resetError() {
600
+ this.isError.set(false);
601
+ this.typeListDate().forEach((item) => {
602
+ item.update((current) => {
603
+ current.isError = false;
604
+ current.showBorderError = false;
605
+ return current;
606
+ });
607
+ });
608
+ }
609
+ async setError(error) {
610
+ this.typeListDate().forEach((item) => {
611
+ item.update((current) => {
612
+ current.showBorderError = error;
613
+ return current;
614
+ });
615
+ });
616
+ }
617
+ async validate() {
618
+ let valid = true;
619
+ this.isError.set(false);
620
+ this.typeListDate().forEach((item, index) => {
621
+ item.update((current) => {
622
+ current.showBorderError = false;
623
+ current.isError = false;
624
+ if (this.selectedSingle() && !this.selectedSingle()[current.id] && !current.disable) {
625
+ valid = false;
626
+ current.showBorderError = true;
627
+ if (index === 0 && this.typeListDate().length === 2) {
628
+ this.isError.set(true);
629
+ }
630
+ if (index === 1 && this.typeListDate().length === 2 && !this.isError()) {
631
+ current.isError = true;
632
+ }
633
+ }
634
+ return current;
635
+ });
636
+ });
637
+ return valid;
638
+ }
639
+ handlerChangFlagMouse(flagMouse) {
640
+ this.outChangStageFlagMouse.emit(flagMouse);
641
+ }
642
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
643
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsDatetimeDropdownItemComponent, isStandalone: true, selector: "libs_ui-components-datetime-dropdown-item", inputs: { typeDate: { classPropertyName: "typeDate", publicName: "typeDate", isSignal: true, isRequired: false, transformFunction: null }, disableSecond: { classPropertyName: "disableSecond", publicName: "disableSecond", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: false, transformFunction: null }, widthDropdown: { classPropertyName: "widthDropdown", publicName: "widthDropdown", isSignal: true, isRequired: false, transformFunction: null }, widthByElement: { classPropertyName: "widthByElement", publicName: "widthByElement", isSignal: true, isRequired: false, transformFunction: null }, getItemYearDisplay: { classPropertyName: "getItemYearDisplay", publicName: "getItemYearDisplay", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, isMultiple: { classPropertyName: "isMultiple", publicName: "isMultiple", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, isCheckErrorWhenSelectItem: { classPropertyName: "isCheckErrorWhenSelectItem", publicName: "isCheckErrorWhenSelectItem", isSignal: true, isRequired: false, transformFunction: null }, maxYear: { classPropertyName: "maxYear", publicName: "maxYear", isSignal: true, isRequired: false, transformFunction: null }, minYear: { classPropertyName: "minYear", publicName: "minYear", isSignal: true, isRequired: false, transformFunction: null }, reverseYear: { classPropertyName: "reverseYear", publicName: "reverseYear", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, ignoreConvertYearSelected: { classPropertyName: "ignoreConvertYearSelected", publicName: "ignoreConvertYearSelected", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, isEmitSelectedDropDown: { classPropertyName: "isEmitSelectedDropDown", publicName: "isEmitSelectedDropDown", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outSelectedData: "outSelectedData", outFunctionControl: "outFunctionControl", outChangStageFlagMouse: "outChangStageFlagMouse" }, ngImport: i0, template: "<div class=\"\">\n <div class=\"flex items-start\">\n @if (typeListDate(); as typeListDate) {\n @for (item of typeListDate; track item().id; let last = $last; let i = $index; let first = $first) {\n <div\n [style.width]=\"widthByElement() | LibsUiComponentsDatetimeDropdownBuildWidthPipe: widthDropdown() : first : isMultiple()\"\n [class.mr-[8px]]=\"!last && typeListDate.length === 2\"\n [style.minWidth.px]=\"widthDropdown()\">\n <libs_ui-components-datetime-dropdown-item-child\n [readonly]=\"readonly()\"\n [typeDate]=\"item().id\"\n [disable]=\"item().disable ?? disable()\"\n [listKeySelected]=\"item().keySelected\"\n [widthByElement]=\"widthByElement()\"\n [first]=\"first\"\n [widthDropdown]=\"widthDropdown()\"\n [listKeysDisable]=\"listKeysDisable()?.[item().id]?.()\"\n [listMaxItemShow]=\"listMaxItemShow()?.[item().id] ?? 6\"\n [isError]=\"item().isError\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [zIndex]=\"zIndex()\"\n [showBorderError]=\"item().showBorderError && !item().disable && !disable()\"\n [listData]=\"item().id | LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe: { minYear: minYear(), maxYear: maxYear(), reverseYear: reverseYear() } : keyMonthResetDay()\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect() ?? ''\"\n (outSelectedKey)=\"handlerSelectedKey($event, item, i)\"\n (outFunctionControl)=\"handlerFunctionControl($event, item)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n }\n }\n </div>\n\n @if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n @let constHtmlMessage = validRequired()?.message || 'i18n_valid_empty_message';\n <span\n class=\"libs-ui-font-h7r libs-ui-text-error\"\n [innerHtml]=\"constHtmlMessage | translate: validRequired()?.interpolateParams\"></span>\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDatetimeDropdownItemChildComponent, selector: "libs_ui-components-datetime-dropdown-item-child", inputs: ["typeDate", "getItemYearDisplay", "listHasButtonUnSelectOption", "readonly", "disable", "listData", "showBorderError", "listMaxItemShow", "zIndex", "classIncludeTextDisplayWhenNoSelect", "listKeySelected", "widthDropdown", "first", "isError", "widthByElement", "ignoreConvertYearSelected", "listKeysDisable", "validRequired"], outputs: ["outSelectedKey", "outFunctionControl", "outChangStageFlagMouse"] }, { kind: "pipe", type: LibsUiComponentsDatetimeDropdownBuildWidthPipe, name: "LibsUiComponentsDatetimeDropdownBuildWidthPipe" }, { kind: "pipe", type: LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe, name: "LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe" }] });
644
+ }
645
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownItemComponent, decorators: [{
646
+ type: Component,
647
+ args: [{ selector: 'libs_ui-components-datetime-dropdown-item', standalone: true, imports: [TranslateModule, LibsUiComponentsDatetimeDropdownItemChildComponent, LibsUiComponentsDatetimeDropdownBuildWidthPipe, LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe], template: "<div class=\"\">\n <div class=\"flex items-start\">\n @if (typeListDate(); as typeListDate) {\n @for (item of typeListDate; track item().id; let last = $last; let i = $index; let first = $first) {\n <div\n [style.width]=\"widthByElement() | LibsUiComponentsDatetimeDropdownBuildWidthPipe: widthDropdown() : first : isMultiple()\"\n [class.mr-[8px]]=\"!last && typeListDate.length === 2\"\n [style.minWidth.px]=\"widthDropdown()\">\n <libs_ui-components-datetime-dropdown-item-child\n [readonly]=\"readonly()\"\n [typeDate]=\"item().id\"\n [disable]=\"item().disable ?? disable()\"\n [listKeySelected]=\"item().keySelected\"\n [widthByElement]=\"widthByElement()\"\n [first]=\"first\"\n [widthDropdown]=\"widthDropdown()\"\n [listKeysDisable]=\"listKeysDisable()?.[item().id]?.()\"\n [listMaxItemShow]=\"listMaxItemShow()?.[item().id] ?? 6\"\n [isError]=\"item().isError\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [zIndex]=\"zIndex()\"\n [showBorderError]=\"item().showBorderError && !item().disable && !disable()\"\n [listData]=\"item().id | LibsUiComponentsDatetimeDropdownBuildListByDateTypePipe: { minYear: minYear(), maxYear: maxYear(), reverseYear: reverseYear() } : keyMonthResetDay()\"\n [classIncludeTextDisplayWhenNoSelect]=\"classIncludeTextDisplayWhenNoSelect() ?? ''\"\n (outSelectedKey)=\"handlerSelectedKey($event, item, i)\"\n (outFunctionControl)=\"handlerFunctionControl($event, item)\"\n (outChangStageFlagMouse)=\"handlerChangFlagMouse($event)\" />\n </div>\n }\n }\n </div>\n\n @if (isError()) {\n <div class=\"flex items-center mt-[4px]\">\n @let constHtmlMessage = validRequired()?.message || 'i18n_valid_empty_message';\n <span\n class=\"libs-ui-font-h7r libs-ui-text-error\"\n [innerHtml]=\"constHtmlMessage | translate: validRequired()?.interpolateParams\"></span>\n </div>\n }\n</div>\n" }]
648
+ }], ctorParameters: () => [] });
649
+
650
+ class LibsUiComponentsDatetimeDropdownComponent {
651
+ // #region PROPERTY
652
+ width = signal(0);
653
+ widthElement = signal(undefined);
654
+ widthLabel = signal(undefined);
655
+ widthLabelFrom = signal(0);
656
+ widthLabelTo = signal(0);
657
+ isErrorCompareDate = signal(undefined);
658
+ chooseDate = signal({ from: signal({}), to: signal({}) });
659
+ isResponsive = signal(undefined);
660
+ arrayFormat = computed(() => {
661
+ return this.typeFormat().split('-');
662
+ });
663
+ changeType = signal(undefined);
664
+ cacheWidthLabel = signal(undefined);
665
+ timeOut = signal(undefined);
666
+ onDestroy = new Subject();
667
+ functionsControl = new Map();
668
+ // #region INPUT
669
+ labelConfig = input(undefined);
670
+ widthDropdown = input(136, { transform: (value) => value ?? 136 });
671
+ zIndex = input(1200, { transform: (value) => value ?? 1200 });
672
+ maxYear = input(0);
673
+ minYear = input(0);
674
+ minWidth = input(undefined);
675
+ disable = input(false);
676
+ readonly = input(false);
677
+ isMultiple = input(false);
678
+ reverseYear = input(undefined);
679
+ isBorderError = input(false);
680
+ ignoreWidth100 = input(false);
681
+ widthByElement = input(false);
682
+ disableSecond = input(false);
683
+ typeFormat = input('month-day', { transform: (value) => value ?? 'month-day' });
684
+ fromAndToDateLabel = input({ from: 'i18n_label_from', to: 'i18n_to' });
685
+ listHasButtonUnSelectOption = input(false);
686
+ selectedDateTime = input(undefined);
687
+ isEmitAfterChanged = input(false); // dùng để emit mỗi lần chọn giá trị và lần đầu init
688
+ getItemYearDisplay = input();
689
+ ignoreFromAndToDateLabel = input(false);
690
+ classIncludeTextDisplayWhenNoSelect = input(undefined);
691
+ hiddenDate = input();
692
+ listMaxItemShow = input(undefined);
693
+ ignoreConvertYearSelected = input(false);
694
+ listKeysDisable = input(undefined);
695
+ ignoreAllowTimeEqual = input(true, { transform: (value) => value ?? true });
696
+ ignoreValidTimeCompare = input(false, { transform: (value) => value ?? false });
697
+ isCheckErrorWhenSelectItem = input(true, { transform: (value) => value ?? true });
698
+ ignoreRequiredValueSecondWhenNotValidRequired = input(false); // có validate giá trị thứ 2 khi validRequired không?
699
+ validRequired = input();
700
+ // #region OUTPUT
701
+ outFunctionsControl = output();
702
+ outSelectedDropdown = output(); // dùng cho trường hợp emit mỗi một lần chọn giá trị nên khi sử dụng phải check kĩ undefined
703
+ outChooseMultiDate = output();
704
+ outChooseSingleDate = output();
705
+ outChangStageFlagMouse = output();
706
+ /* VIEW CHILD */
707
+ containerRef = viewChild('parent');
708
+ labelFromRef = viewChild('labelFrom');
709
+ labelToRef = viewChild('labelTo');
710
+ // #region INJECT
711
+ translate = inject(TranslateService);
712
+ constructor() {
713
+ effect(() => {
714
+ const isMultiple = this.isMultiple();
715
+ if (!isMultiple) {
716
+ return;
717
+ }
718
+ untracked(() => {
719
+ this.changeType.set(true);
720
+ this.functionsControl.clear();
721
+ timer(0)
722
+ .pipe()
723
+ .subscribe(() => {
724
+ this.checkResponsive();
725
+ this.changeType.set(false);
726
+ });
727
+ });
728
+ });
729
+ }
730
+ ngOnInit() {
731
+ this.outFunctionsControl.emit(this.FunctionsControl);
732
+ if (this.selectedDateTime()) {
733
+ this.chooseDate.set(this.selectedDateTime());
734
+ }
735
+ }
736
+ ngAfterViewInit() {
737
+ fromEvent(window, 'resize').pipe(takeUntil(this.onDestroy)).subscribe(this.setWidthDate.bind(this));
738
+ this.widthLabel.set(undefined);
739
+ timer(0)
740
+ .pipe()
741
+ .subscribe(() => {
742
+ this.checkResponsive();
743
+ });
744
+ }
745
+ get FunctionsControl() {
746
+ return {
747
+ checkIsValid: this.validate.bind(this),
748
+ resetError: this.resetError.bind(this),
749
+ resetTime: this.resetDropdown.bind(this),
750
+ };
751
+ }
752
+ checkResponsive() {
753
+ this.isResponsive.set(false);
754
+ const widthElementParent = this.containerRef()?.nativeElement?.getBoundingClientRect().width || 0;
755
+ this.widthLabelFrom.set(this.labelFromRef()?.nativeElement?.getBoundingClientRect().width || 0);
756
+ this.widthLabelTo.set(this.labelToRef()?.nativeElement?.getBoundingClientRect().width || 0);
757
+ const spaceBetweenDate = this.arrayFormat().length * 2 + (this.fromAndToDateLabel().from ? 1 : 0);
758
+ const width = this.widthDropdown() * 4 + 8 * spaceBetweenDate + this.widthLabelFrom() + this.widthLabelTo();
759
+ if (widthElementParent < width) {
760
+ this.isResponsive.set(true);
761
+ }
762
+ }
763
+ handlerChangeSelectedKey(event, type) {
764
+ this.chooseDate.update((current) => {
765
+ if (current) {
766
+ current[type].set(event);
767
+ }
768
+ return current;
769
+ });
770
+ if (this.isEmitAfterChanged()) {
771
+ const dataEmit = this.isMultiple() ? this.chooseDate() : this.chooseDate()?.from();
772
+ if (dataEmit) {
773
+ this.outSelectedDropdown.emit(dataEmit);
774
+ }
775
+ }
776
+ this.applyDate();
777
+ }
778
+ async resetDropdown() {
779
+ this.functionsControl.forEach((control) => control.resetDropdown());
780
+ }
781
+ async resetError() {
782
+ this.functionsControl.forEach((control) => control.resetError());
783
+ }
784
+ setWidthDate() {
785
+ if (!this.containerRef() || !this.containerRef()?.nativeElement) {
786
+ return;
787
+ }
788
+ timer(0)
789
+ .pipe()
790
+ .subscribe(() => {
791
+ this.checkResponsive();
792
+ });
793
+ }
794
+ handlerFunctionControl(event, type) {
795
+ this.functionsControl.set(type, event);
796
+ }
797
+ async checkValid() {
798
+ let valid = true;
799
+ for (const control of this.functionsControl.values()) {
800
+ if (!(await control.checkIsValid())) {
801
+ valid = false;
802
+ }
803
+ }
804
+ if (this.compareDate()) {
805
+ valid = false;
806
+ }
807
+ return valid;
808
+ }
809
+ setError(error) {
810
+ this.functionsControl.forEach((control) => control.setError(error));
811
+ }
812
+ compareDate() {
813
+ const type = this.typeFormat().split('-');
814
+ const dateCompare = [];
815
+ type.forEach((item) => {
816
+ const from = this.chooseDate()?.from()[item];
817
+ const to = this.chooseDate()?.to()[item];
818
+ dateCompare.push({ from: from, to: to });
819
+ });
820
+ if (this.ignoreValidTimeCompare() || !this.checkCondition(true)) {
821
+ this.isErrorCompareDate.set(false);
822
+ return false;
823
+ }
824
+ if (CompareDate(dateCompare, this.ignoreAllowTimeEqual())) {
825
+ this.setError(true);
826
+ this.isErrorCompareDate.set(true);
827
+ return true;
828
+ }
829
+ this.isErrorCompareDate.set(false);
830
+ return false;
831
+ }
832
+ async validate() {
833
+ let valid = true;
834
+ if (!this.validRequired()) {
835
+ if (!this.checkCondition(false) && !this.ignoreRequiredValueSecondWhenNotValidRequired()) {
836
+ valid = await this.checkValid();
837
+ }
838
+ return valid;
839
+ }
840
+ return await this.checkValid();
841
+ }
842
+ checkCondition(hasValue) {
843
+ let checkValue = true;
844
+ const type = this.typeFormat().split('-');
845
+ type.forEach((item) => {
846
+ if (hasValue && (!this.chooseDate()?.from()[item] || !this.chooseDate()?.to()[item])) {
847
+ checkValue = false;
848
+ }
849
+ if (!hasValue && (this.chooseDate()?.from()[item] || this.chooseDate()?.to()[item])) {
850
+ checkValue = false;
851
+ }
852
+ });
853
+ return checkValue;
854
+ }
855
+ applyDate() {
856
+ this.setError(false);
857
+ this.isErrorCompareDate.set(false);
858
+ if (this.isCheckErrorWhenSelectItem() && !this.validate()) {
859
+ return;
860
+ }
861
+ const from = this.chooseDate()?.from;
862
+ const to = this.chooseDate()?.to;
863
+ if (this.isMultiple()) {
864
+ if (this.compareDate()) {
865
+ return;
866
+ }
867
+ let dataSelected = { from: signal({}), to: signal({}) };
868
+ this.arrayFormat().forEach((key) => {
869
+ if (!from?.()?.[key] || !to?.()?.[key]) {
870
+ dataSelected = undefined;
871
+ }
872
+ if (dataSelected) {
873
+ dataSelected.from.update((current) => {
874
+ current[key] = Number(from?.()[key]);
875
+ return current;
876
+ });
877
+ dataSelected.to.update((current) => {
878
+ current[key] = Number(to?.()[key]);
879
+ return current;
880
+ });
881
+ }
882
+ });
883
+ if (dataSelected) {
884
+ this.outChooseMultiDate.emit(dataSelected);
885
+ }
886
+ return;
887
+ }
888
+ let dataSelected = {};
889
+ this.arrayFormat().forEach((key) => {
890
+ if (!from?.()?.[key]) {
891
+ dataSelected = undefined;
892
+ }
893
+ if (dataSelected) {
894
+ dataSelected[key] = Number(from?.()?.[key]);
895
+ }
896
+ });
897
+ if (dataSelected) {
898
+ this.outChooseSingleDate.emit(dataSelected);
899
+ }
900
+ }
901
+ handlerChangeWidthLabel(width) {
902
+ this.cacheWidthLabel.set(width < (this.cacheWidthLabel() || 0) ? this.cacheWidthLabel() : Math.ceil(width));
903
+ if (this.timeOut()) {
904
+ clearTimeout(this.timeOut());
905
+ }
906
+ this.timeOut.set(setTimeout(() => {
907
+ this.widthLabel.set(this.cacheWidthLabel());
908
+ }, 100));
909
+ }
910
+ handlerChangStageFlagMouse(flagMouse) {
911
+ this.outChangStageFlagMouse.emit(flagMouse);
912
+ }
913
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
914
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsDatetimeDropdownComponent, isStandalone: true, selector: "libs_ui-components-datetime-dropdown", inputs: { labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, widthDropdown: { classPropertyName: "widthDropdown", publicName: "widthDropdown", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, maxYear: { classPropertyName: "maxYear", publicName: "maxYear", isSignal: true, isRequired: false, transformFunction: null }, minYear: { classPropertyName: "minYear", publicName: "minYear", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, isMultiple: { classPropertyName: "isMultiple", publicName: "isMultiple", isSignal: true, isRequired: false, transformFunction: null }, reverseYear: { classPropertyName: "reverseYear", publicName: "reverseYear", isSignal: true, isRequired: false, transformFunction: null }, isBorderError: { classPropertyName: "isBorderError", publicName: "isBorderError", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidth100: { classPropertyName: "ignoreWidth100", publicName: "ignoreWidth100", isSignal: true, isRequired: false, transformFunction: null }, widthByElement: { classPropertyName: "widthByElement", publicName: "widthByElement", isSignal: true, isRequired: false, transformFunction: null }, disableSecond: { classPropertyName: "disableSecond", publicName: "disableSecond", isSignal: true, isRequired: false, transformFunction: null }, typeFormat: { classPropertyName: "typeFormat", publicName: "typeFormat", isSignal: true, isRequired: false, transformFunction: null }, fromAndToDateLabel: { classPropertyName: "fromAndToDateLabel", publicName: "fromAndToDateLabel", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, selectedDateTime: { classPropertyName: "selectedDateTime", publicName: "selectedDateTime", isSignal: true, isRequired: false, transformFunction: null }, isEmitAfterChanged: { classPropertyName: "isEmitAfterChanged", publicName: "isEmitAfterChanged", isSignal: true, isRequired: false, transformFunction: null }, getItemYearDisplay: { classPropertyName: "getItemYearDisplay", publicName: "getItemYearDisplay", isSignal: true, isRequired: false, transformFunction: null }, ignoreFromAndToDateLabel: { classPropertyName: "ignoreFromAndToDateLabel", publicName: "ignoreFromAndToDateLabel", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, hiddenDate: { classPropertyName: "hiddenDate", publicName: "hiddenDate", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, ignoreConvertYearSelected: { classPropertyName: "ignoreConvertYearSelected", publicName: "ignoreConvertYearSelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, ignoreAllowTimeEqual: { classPropertyName: "ignoreAllowTimeEqual", publicName: "ignoreAllowTimeEqual", isSignal: true, isRequired: false, transformFunction: null }, ignoreValidTimeCompare: { classPropertyName: "ignoreValidTimeCompare", publicName: "ignoreValidTimeCompare", isSignal: true, isRequired: false, transformFunction: null }, isCheckErrorWhenSelectItem: { classPropertyName: "isCheckErrorWhenSelectItem", publicName: "isCheckErrorWhenSelectItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreRequiredValueSecondWhenNotValidRequired: { classPropertyName: "ignoreRequiredValueSecondWhenNotValidRequired", publicName: "ignoreRequiredValueSecondWhenNotValidRequired", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outFunctionsControl: "outFunctionsControl", outSelectedDropdown: "outSelectedDropdown", outChooseMultiDate: "outChooseMultiDate", outChooseSingleDate: "outChooseSingleDate", outChangStageFlagMouse: "outChangStageFlagMouse" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["parent"], descendants: true, isSignal: true }, { propertyName: "labelFromRef", first: true, predicate: ["labelFrom"], descendants: true, isSignal: true }, { propertyName: "labelToRef", first: true, predicate: ["labelTo"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [limitLength]=\"labelConfig.limitLength\"\n [count]=\"labelConfig.count\" />\n}\n<div\n #parent\n class=\"flex items-start\"\n [class.!w-full]=\"widthByElement()\"\n [class.!column]=\"isResponsive() && isMultiple()\">\n <div\n #childFrom\n class=\"flex items-start\"\n [class.w-[50%]]=\"widthByElement() && !isResponsive()\"\n [class.!mb-[8px]]=\"isResponsive() && isMultiple()\"\n [class.!mr-[8px]]=\"!isResponsive() && isMultiple()\"\n [class.w-full]=\"(!isMultiple() && !widthByElement()) || isResponsive()\"\n [style.width.px]=\"!widthByElement() && isMultiple() && !isResponsive() ? widthDropdown() * arrayFormat().length + 8 * arrayFormat().length + widthLabelFrom() : undefined\">\n @if (isMultiple() && !ignoreFromAndToDateLabel() && fromAndToDateLabel().from) {\n <div\n class=\"mr-[8px] flex-shrink-0 h-[32px] flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() || undefined : undefined\">\n <span\n #labelFrom\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelFrom || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n @let constHtmlFrom = fromAndToDateLabel().from || ' ';\n {{ constHtmlFrom | translate }}\n </span>\n </div>\n }\n <div\n class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item\n [class.!w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple() ? (isResponsive() ? true : false) : true\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.from() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.from()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'from')\"\n (outFunctionControl)=\"handlerFunctionControl($event, 'from')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n @if (isMultiple()) {\n <div\n #childTo\n [class.!w-[50%]]=\"widthByElement()\"\n [class.!w-full]=\"!widthByElement() || isResponsive()\"\n class=\"flex items-start\">\n <div\n class=\"mr-[8px] h-[32px] flex-shrink-0 flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() : undefined\">\n @if (!ignoreFromAndToDateLabel()) {\n <span\n #labelTo\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelTo || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n @let constHtmlTo = fromAndToDateLabel().to || ' ';\n {{ constHtmlTo | translate }}\n </span>\n }\n @if (ignoreFromAndToDateLabel()) {\n <span\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r\">\n -\n </span>\n }\n </div>\n <div\n class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item\n [class.w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple()\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.to() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.to()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'to')\"\n (outFunctionControl)=\"handlerFunctionControl($event, 'to')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n }\n</div>\n\n@if (isErrorCompareDate()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\">\n @let constHtmlMessage = validRequired()?.messageValidCompareTime || 'i18n_invalid_end_date_selected';\n {{ constHtmlMessage | translate: validRequired()?.interpolateParamsCompareTime }}\n </span>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "directive", type: LibsUiComponentsDatetimeDropdownDirective, selector: "[LibsUiComponentsDatetimeDropdownDirective]", outputs: ["outChangeWidth"] }, { kind: "component", type: LibsUiComponentsDatetimeDropdownItemComponent, selector: "libs_ui-components-datetime-dropdown-item", inputs: ["typeDate", "disableSecond", "selectedDate", "widthDropdown", "widthByElement", "getItemYearDisplay", "listHasButtonUnSelectOption", "readonly", "disable", "zIndex", "isMultiple", "classIncludeTextDisplayWhenNoSelect", "isCheckErrorWhenSelectItem", "maxYear", "minYear", "reverseYear", "listKeysDisable", "ignoreConvertYearSelected", "validRequired", "isEmitSelectedDropDown", "listMaxItemShow"], outputs: ["outSelectedData", "outFunctionControl", "outChangStageFlagMouse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
915
+ }
916
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimeDropdownComponent, decorators: [{
917
+ type: Component,
918
+ args: [{ selector: 'libs_ui-components-datetime-dropdown', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsLabelComponent, LibsUiComponentsDatetimeDropdownDirective, LibsUiComponentsDatetimeDropdownItemComponent], template: "@if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [limitLength]=\"labelConfig.limitLength\"\n [count]=\"labelConfig.count\" />\n}\n<div\n #parent\n class=\"flex items-start\"\n [class.!w-full]=\"widthByElement()\"\n [class.!column]=\"isResponsive() && isMultiple()\">\n <div\n #childFrom\n class=\"flex items-start\"\n [class.w-[50%]]=\"widthByElement() && !isResponsive()\"\n [class.!mb-[8px]]=\"isResponsive() && isMultiple()\"\n [class.!mr-[8px]]=\"!isResponsive() && isMultiple()\"\n [class.w-full]=\"(!isMultiple() && !widthByElement()) || isResponsive()\"\n [style.width.px]=\"!widthByElement() && isMultiple() && !isResponsive() ? widthDropdown() * arrayFormat().length + 8 * arrayFormat().length + widthLabelFrom() : undefined\">\n @if (isMultiple() && !ignoreFromAndToDateLabel() && fromAndToDateLabel().from) {\n <div\n class=\"mr-[8px] flex-shrink-0 h-[32px] flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() || undefined : undefined\">\n <span\n #labelFrom\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelFrom || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n @let constHtmlFrom = fromAndToDateLabel().from || ' ';\n {{ constHtmlFrom | translate }}\n </span>\n </div>\n }\n <div\n class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item\n [class.!w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple() ? (isResponsive() ? true : false) : true\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.from() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.from()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'from')\"\n (outFunctionControl)=\"handlerFunctionControl($event, 'from')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n @if (isMultiple()) {\n <div\n #childTo\n [class.!w-[50%]]=\"widthByElement()\"\n [class.!w-full]=\"!widthByElement() || isResponsive()\"\n class=\"flex items-start\">\n <div\n class=\"mr-[8px] h-[32px] flex-shrink-0 flex items-center\"\n [style.width.px]=\"isResponsive() ? widthLabel() : undefined\">\n @if (!ignoreFromAndToDateLabel()) {\n <span\n #labelTo\n LibsUiComponentsDatetimeDropdownDirective\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r text-nowrap {{ fromAndToDateLabel().classLabelTo || '' }}\"\n (outChangeWidth)=\"handlerChangeWidthLabel($event)\">\n @let constHtmlTo = fromAndToDateLabel().to || ' ';\n {{ constHtmlTo | translate }}\n </span>\n }\n @if (ignoreFromAndToDateLabel()) {\n <span\n [class.!opacity-[0.5]]=\"disable()\"\n class=\"libs-ui-font-h5r\">\n -\n </span>\n }\n </div>\n <div\n class=\"flex\"\n [class.!w-full]=\"widthByElement()\">\n @if (!changeType()) {\n <libs_ui-components-datetime-dropdown-item\n [class.w-full]=\"widthByElement()\"\n [disableSecond]=\"disableSecond()\"\n [typeDate]=\"typeFormat()\"\n [zIndex]=\"zIndex()\"\n [maxYear]=\"maxYear()\"\n [disable]=\"disable()\"\n [minYear]=\"minYear()\"\n [readonly]=\"readonly()\"\n [isMultiple]=\"isMultiple()\"\n [reverseYear]=\"reverseYear()\"\n [selectedDate]=\"selectedDateTime()?.to() || {}\"\n [widthDropdown]=\"widthDropdown()\"\n [widthByElement]=\"widthByElement()\"\n [getItemYearDisplay]=\"getItemYearDisplay()\"\n [listMaxItemShow]=\"listMaxItemShow()\"\n [listKeysDisable]=\"listKeysDisable()?.to()\"\n [listHasButtonUnSelectOption]=\"listHasButtonUnSelectOption()\"\n [classIncludeTextDisplayWhenNoSelect]=\"'libs-ui-font-h5r ' + classIncludeTextDisplayWhenNoSelect\"\n [isEmitSelectedDropDown]=\"isEmitAfterChanged()\"\n (outSelectedData)=\"handlerChangeSelectedKey($event, 'to')\"\n (outFunctionControl)=\"handlerFunctionControl($event, 'to')\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n }\n </div>\n </div>\n }\n</div>\n\n@if (isErrorCompareDate()) {\n <div class=\"flex items-center mt-[4px]\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\">\n @let constHtmlMessage = validRequired()?.messageValidCompareTime || 'i18n_invalid_end_date_selected';\n {{ constHtmlMessage | translate: validRequired()?.interpolateParamsCompareTime }}\n </span>\n </div>\n}\n" }]
919
+ }], ctorParameters: () => [] });
920
+
921
+ /* eslint-disable @typescript-eslint/no-explicit-any */
922
+
923
+ /**
924
+ * Generated bundle index. Do not edit.
925
+ */
926
+
927
+ export { LibsUiComponentsDatetimeDropdownComponent };
928
+ //# sourceMappingURL=libs-ui-components-datetime-dropdown.mjs.map