@libs-ui/components-datetime-dropdown 0.2.77 → 0.2.79

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