@goat-bravos/intern-hub-layout 4.0.2 → 4.0.3
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.
|
@@ -1298,6 +1298,10 @@ class DatePickerComponent {
|
|
|
1298
1298
|
dropdownPosition = 'bottomLeft';
|
|
1299
1299
|
/** Disable specific dates */
|
|
1300
1300
|
disabledDate = () => false;
|
|
1301
|
+
/** Width of the picker */
|
|
1302
|
+
width = '100%';
|
|
1303
|
+
/** Height of the picker */
|
|
1304
|
+
height = '36px';
|
|
1301
1305
|
// ============ Output Events ============
|
|
1302
1306
|
/** Emits when date changes */
|
|
1303
1307
|
dateChange = new EventEmitter();
|
|
@@ -1420,13 +1424,13 @@ class DatePickerComponent {
|
|
|
1420
1424
|
}
|
|
1421
1425
|
}
|
|
1422
1426
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1423
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: DatePickerComponent, isStandalone: true, selector: "app-date-picker", inputs: { mode: "mode", showTime: "showTime", isRange: "isRange", rangeMode: "rangeMode", placeholder: "placeholder", rangePlaceholder: "rangePlaceholder", format: "format", disabled: "disabled", allowClear: "allowClear", size: "size", bordered: "bordered", inline: "inline", popupClassName: "popupClassName", dropdownPosition: "dropdownPosition", disabledDate: "disabledDate" }, outputs: { dateChange: "dateChange", rangeChange: "rangeChange", openChange: "openChange", ok: "ok", panelChange: "panelChange" }, providers: [
|
|
1427
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: DatePickerComponent, isStandalone: true, selector: "app-date-picker", inputs: { mode: "mode", showTime: "showTime", isRange: "isRange", rangeMode: "rangeMode", placeholder: "placeholder", rangePlaceholder: "rangePlaceholder", format: "format", disabled: "disabled", allowClear: "allowClear", size: "size", bordered: "bordered", inline: "inline", popupClassName: "popupClassName", dropdownPosition: "dropdownPosition", disabledDate: "disabledDate", width: "width", height: "height" }, outputs: { dateChange: "dateChange", rangeChange: "rangeChange", openChange: "openChange", ok: "ok", panelChange: "panelChange" }, providers: [
|
|
1424
1428
|
{
|
|
1425
1429
|
provide: NG_VALUE_ACCESSOR,
|
|
1426
1430
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
1427
1431
|
multi: true,
|
|
1428
1432
|
},
|
|
1429
|
-
], ngImport: i0, template: "<!-- Single Date Picker -->\r\n@if (!isRange && !inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"placeholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n inputWidth=\"40px\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Inline Single Date Picker -->\r\n@if (!isRange && inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--inline\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Range Date Picker -->\r\n@if (isRange && !inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"rangePlaceholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range\"\r\n ></nz-range-picker>\r\n}\r\n\r\n<!-- Inline Range Date Picker -->\r\n@if (isRange && inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range date-picker--inline\"\r\n ></nz-range-picker>\r\n}\r\n", styles: [":host{display:block;--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-200);--date-picker-today-color: var(--brand-500)}:host .ant-picker{border:1px solid var(--neutral-color-200)!important;border-radius:8px;cursor:pointer}:host .ant-picker:hover,:host .ant-picker-focused{border:1px solid var(--date-picker-primary-color)!important;cursor:pointer}.date-picker{width:100%}.date-picker ::ng-deep .ant-picker{width:100%;background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker:hover{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker:focus,.date-picker ::ng-deep .ant-picker.ant-picker-focused{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker input{color:var(--date-picker-text-color)}.date-picker ::ng-deep .ant-picker input::placeholder{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker .ant-picker-suffix{color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear{background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear:hover{color:var(--date-picker-primary-hover)}.date-picker ::ng-deep .ant-picker-large{border-radius:calc(var(--date-picker-border-radius) + 2px)}.date-picker ::ng-deep .ant-picker-large input{font-size:16px}.date-picker ::ng-deep .ant-picker-small{border-radius:calc(var(--date-picker-border-radius) - 2px)}.date-picker ::ng-deep .ant-picker-small input{font-size:12px}.date-picker ::ng-deep .ant-picker-disabled{background-color:var(--date-picker-hover-bg);cursor:not-allowed}.date-picker ::ng-deep .ant-picker-disabled input{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker-borderless{border:none;box-shadow:none}.date-picker ::ng-deep .ant-picker-borderless:focus,.date-picker ::ng-deep .ant-picker-borderless.ant-picker-focused{box-shadow:none}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-separator{color:var(--date-picker-primary-color)}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-active-bar{background-color:var(--date-picker-primary-color)}.date-picker--inline ::ng-deep .ant-picker{border:1px solid var(--date-picker-border-color);border-radius:var(--date-picker-border-radius);padding:16px}.date-picker--inline ::ng-deep .ant-picker-panel-container{box-shadow:none}::ng-deep .ant-picker-dropdown{--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-400);--date-picker-today-color: var(--brand-500)}::ng-deep .ant-picker-dropdown .ant-picker-panel-container{border-radius:12px}::ng-deep .ant-picker-dropdown .ant-picker-header-super-prev-btn,::ng-deep .ant-picker-dropdown .ant-picker-header-super-next-btn{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-header button{color:var(--neutral-color-600)}::ng-deep .ant-picker-dropdown .ant-picker-header button:hover{color:var(--date-picker-primary-color)}::ng-deep .ant-picker-dropdown .ant-picker-cell:before,::ng-deep .ant-picker-dropdown .ant-picker-cell-inner:before{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-today):not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{background-color:var(--neutral-color-200)!important;color:var(--neutral-color-50)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today:not(.ant-picker-cell-selected):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:transparent!important;border:transparent!important;color:var(--theme-blue-600)!important;font-weight:600}::ng-deep .ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today.ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start:not(.ant-picker-cell-range-end):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-end:not(.ant-picker-cell-range-start):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start.ant-picker-cell-range-end:not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:first-child .ant-picker-cell-inner{border-radius:8px 0 0 8px!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:last-child .ant-picker-cell-inner{border-radius:0 8px 8px 0!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:hover .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range.ant-picker-cell-week .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-start:not(.ant-picker-cell-range-hover-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-end:not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-inner,::ng-deep .ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px;min-width:60px;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:var(--neutral-color-400);color:var(--neutral-color-10);font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "component", type: i2.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-quarter-picker,nz-year-picker,nz-range-picker", inputs: ["nzInline", "nzAllowClear", "nzAutoFocus", "nzDisabled", "nzInputReadOnly", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzVariant", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowWeekNumber", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { kind: "directive", type: i2.NzRangePickerComponent, selector: "nz-range-picker", exportAs: ["nzRangePicker"] }, { kind: "ngmodule", type: NzTimePickerModule }] });
|
|
1433
|
+
], ngImport: i0, template: "<!-- Single Date Picker -->\r\n@if (!isRange && !inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"placeholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n inputWidth=\"40px\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Inline Single Date Picker -->\r\n@if (!isRange && inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--inline\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Range Date Picker -->\r\n@if (isRange && !inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"rangePlaceholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range\"\r\n ></nz-range-picker>\r\n}\r\n\r\n<!-- Inline Range Date Picker -->\r\n@if (isRange && inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range date-picker--inline\"\r\n ></nz-range-picker>\r\n}\r\n", styles: [":host{display:block;--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-200);--date-picker-today-color: var(--brand-500)}:host .ant-picker{border:1px solid var(--neutral-color-200)!important;border-radius:8px;cursor:pointer}:host .ant-picker:hover,:host .ant-picker-focused{border:1px solid var(--date-picker-primary-color)!important;cursor:pointer}.date-picker{width:100%}.date-picker ::ng-deep .ant-picker{width:100%;height:100%;padding:8px 12px;box-sizing:border-box;background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker:hover{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker:focus,.date-picker ::ng-deep .ant-picker.ant-picker-focused{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker input{color:var(--date-picker-text-color)}.date-picker ::ng-deep .ant-picker input::placeholder{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker .ant-picker-suffix{color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear{background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear:hover{color:var(--date-picker-primary-hover)}.date-picker ::ng-deep .ant-picker-large{border-radius:calc(var(--date-picker-border-radius) + 2px)}.date-picker ::ng-deep .ant-picker-large input{font-size:16px}.date-picker ::ng-deep .ant-picker-small{border-radius:calc(var(--date-picker-border-radius) - 2px)}.date-picker ::ng-deep .ant-picker-small input{font-size:12px}.date-picker ::ng-deep .ant-picker-disabled{background-color:var(--date-picker-hover-bg);cursor:not-allowed}.date-picker ::ng-deep .ant-picker-disabled input{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker-borderless{border:none;box-shadow:none}.date-picker ::ng-deep .ant-picker-borderless:focus,.date-picker ::ng-deep .ant-picker-borderless.ant-picker-focused{box-shadow:none}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-separator{color:var(--date-picker-primary-color)}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-active-bar{background-color:var(--date-picker-primary-color)}.date-picker--inline ::ng-deep .ant-picker{border:1px solid var(--date-picker-border-color);border-radius:var(--date-picker-border-radius);padding:16px}.date-picker--inline ::ng-deep .ant-picker-panel-container{box-shadow:none}::ng-deep .ant-picker-dropdown{--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-400);--date-picker-today-color: var(--brand-500)}::ng-deep .ant-picker-dropdown .ant-picker-panel-container{border-radius:12px}::ng-deep .ant-picker-dropdown .ant-picker-header-super-prev-btn,::ng-deep .ant-picker-dropdown .ant-picker-header-super-next-btn{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-header button{color:var(--neutral-color-600)}::ng-deep .ant-picker-dropdown .ant-picker-header button:hover{color:var(--date-picker-primary-color)}::ng-deep .ant-picker-dropdown .ant-picker-cell:before,::ng-deep .ant-picker-dropdown .ant-picker-cell-inner:before{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-today):not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{background-color:var(--neutral-color-200)!important;color:var(--neutral-color-50)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today:not(.ant-picker-cell-selected):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:transparent!important;border:transparent!important;color:var(--theme-blue-600)!important;font-weight:600}::ng-deep .ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today.ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start:not(.ant-picker-cell-range-end):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-end:not(.ant-picker-cell-range-start):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start.ant-picker-cell-range-end:not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:first-child .ant-picker-cell-inner{border-radius:8px 0 0 8px!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:last-child .ant-picker-cell-inner{border-radius:0 8px 8px 0!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:hover .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range.ant-picker-cell-week .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-start:not(.ant-picker-cell-range-hover-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-end:not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-inner,::ng-deep .ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px;min-width:60px;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:var(--neutral-color-400);color:var(--neutral-color-10);font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "component", type: i2.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-quarter-picker,nz-year-picker,nz-range-picker", inputs: ["nzInline", "nzAllowClear", "nzAutoFocus", "nzDisabled", "nzInputReadOnly", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzVariant", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowWeekNumber", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { kind: "directive", type: i2.NzRangePickerComponent, selector: "nz-range-picker", exportAs: ["nzRangePicker"] }, { kind: "ngmodule", type: NzTimePickerModule }] });
|
|
1430
1434
|
}
|
|
1431
1435
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
1432
1436
|
type: Component,
|
|
@@ -1436,7 +1440,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
|
|
|
1436
1440
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
1437
1441
|
multi: true,
|
|
1438
1442
|
},
|
|
1439
|
-
], template: "<!-- Single Date Picker -->\r\n@if (!isRange && !inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"placeholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n inputWidth=\"40px\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Inline Single Date Picker -->\r\n@if (!isRange && inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--inline\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Range Date Picker -->\r\n@if (isRange && !inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"rangePlaceholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range\"\r\n ></nz-range-picker>\r\n}\r\n\r\n<!-- Inline Range Date Picker -->\r\n@if (isRange && inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range date-picker--inline\"\r\n ></nz-range-picker>\r\n}\r\n", styles: [":host{display:block;--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-200);--date-picker-today-color: var(--brand-500)}:host .ant-picker{border:1px solid var(--neutral-color-200)!important;border-radius:8px;cursor:pointer}:host .ant-picker:hover,:host .ant-picker-focused{border:1px solid var(--date-picker-primary-color)!important;cursor:pointer}.date-picker{width:100%}.date-picker ::ng-deep .ant-picker{width:100%;background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker:hover{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker:focus,.date-picker ::ng-deep .ant-picker.ant-picker-focused{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker input{color:var(--date-picker-text-color)}.date-picker ::ng-deep .ant-picker input::placeholder{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker .ant-picker-suffix{color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear{background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear:hover{color:var(--date-picker-primary-hover)}.date-picker ::ng-deep .ant-picker-large{border-radius:calc(var(--date-picker-border-radius) + 2px)}.date-picker ::ng-deep .ant-picker-large input{font-size:16px}.date-picker ::ng-deep .ant-picker-small{border-radius:calc(var(--date-picker-border-radius) - 2px)}.date-picker ::ng-deep .ant-picker-small input{font-size:12px}.date-picker ::ng-deep .ant-picker-disabled{background-color:var(--date-picker-hover-bg);cursor:not-allowed}.date-picker ::ng-deep .ant-picker-disabled input{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker-borderless{border:none;box-shadow:none}.date-picker ::ng-deep .ant-picker-borderless:focus,.date-picker ::ng-deep .ant-picker-borderless.ant-picker-focused{box-shadow:none}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-separator{color:var(--date-picker-primary-color)}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-active-bar{background-color:var(--date-picker-primary-color)}.date-picker--inline ::ng-deep .ant-picker{border:1px solid var(--date-picker-border-color);border-radius:var(--date-picker-border-radius);padding:16px}.date-picker--inline ::ng-deep .ant-picker-panel-container{box-shadow:none}::ng-deep .ant-picker-dropdown{--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-400);--date-picker-today-color: var(--brand-500)}::ng-deep .ant-picker-dropdown .ant-picker-panel-container{border-radius:12px}::ng-deep .ant-picker-dropdown .ant-picker-header-super-prev-btn,::ng-deep .ant-picker-dropdown .ant-picker-header-super-next-btn{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-header button{color:var(--neutral-color-600)}::ng-deep .ant-picker-dropdown .ant-picker-header button:hover{color:var(--date-picker-primary-color)}::ng-deep .ant-picker-dropdown .ant-picker-cell:before,::ng-deep .ant-picker-dropdown .ant-picker-cell-inner:before{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-today):not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{background-color:var(--neutral-color-200)!important;color:var(--neutral-color-50)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today:not(.ant-picker-cell-selected):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:transparent!important;border:transparent!important;color:var(--theme-blue-600)!important;font-weight:600}::ng-deep .ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today.ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start:not(.ant-picker-cell-range-end):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-end:not(.ant-picker-cell-range-start):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start.ant-picker-cell-range-end:not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:first-child .ant-picker-cell-inner{border-radius:8px 0 0 8px!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:last-child .ant-picker-cell-inner{border-radius:0 8px 8px 0!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:hover .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range.ant-picker-cell-week .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-start:not(.ant-picker-cell-range-hover-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-end:not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-inner,::ng-deep .ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px;min-width:60px;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:var(--neutral-color-400);color:var(--neutral-color-10);font-weight:600}\n"] }]
|
|
1443
|
+
], template: "<!-- Single Date Picker -->\r\n@if (!isRange && !inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"placeholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n inputWidth=\"40px\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Inline Single Date Picker -->\r\n@if (!isRange && inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--inline\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Range Date Picker -->\r\n@if (isRange && !inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"rangePlaceholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range\"\r\n ></nz-range-picker>\r\n}\r\n\r\n<!-- Inline Range Date Picker -->\r\n@if (isRange && inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range date-picker--inline\"\r\n ></nz-range-picker>\r\n}\r\n", styles: [":host{display:block;--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-200);--date-picker-today-color: var(--brand-500)}:host .ant-picker{border:1px solid var(--neutral-color-200)!important;border-radius:8px;cursor:pointer}:host .ant-picker:hover,:host .ant-picker-focused{border:1px solid var(--date-picker-primary-color)!important;cursor:pointer}.date-picker{width:100%}.date-picker ::ng-deep .ant-picker{width:100%;height:100%;padding:8px 12px;box-sizing:border-box;background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker:hover{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker:focus,.date-picker ::ng-deep .ant-picker.ant-picker-focused{border-color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker input{color:var(--date-picker-text-color)}.date-picker ::ng-deep .ant-picker input::placeholder{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker .ant-picker-suffix{color:var(--date-picker-primary-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear{background-color:var(--date-picker-bg-color)}.date-picker ::ng-deep .ant-picker .ant-picker-clear:hover{color:var(--date-picker-primary-hover)}.date-picker ::ng-deep .ant-picker-large{border-radius:calc(var(--date-picker-border-radius) + 2px)}.date-picker ::ng-deep .ant-picker-large input{font-size:16px}.date-picker ::ng-deep .ant-picker-small{border-radius:calc(var(--date-picker-border-radius) - 2px)}.date-picker ::ng-deep .ant-picker-small input{font-size:12px}.date-picker ::ng-deep .ant-picker-disabled{background-color:var(--date-picker-hover-bg);cursor:not-allowed}.date-picker ::ng-deep .ant-picker-disabled input{color:var(--date-picker-disabled-color)}.date-picker ::ng-deep .ant-picker-borderless{border:none;box-shadow:none}.date-picker ::ng-deep .ant-picker-borderless:focus,.date-picker ::ng-deep .ant-picker-borderless.ant-picker-focused{box-shadow:none}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-separator{color:var(--date-picker-primary-color)}.date-picker--range ::ng-deep .ant-picker-range .ant-picker-active-bar{background-color:var(--date-picker-primary-color)}.date-picker--inline ::ng-deep .ant-picker{border:1px solid var(--date-picker-border-color);border-radius:var(--date-picker-border-radius);padding:16px}.date-picker--inline ::ng-deep .ant-picker-panel-container{box-shadow:none}::ng-deep .ant-picker-dropdown{--date-picker-primary-color: var(--brand-500);--date-picker-primary-hover: var(--brand-600);--date-picker-border-color: var(--neutral-color-200);--date-picker-border-radius: 8px;--date-picker-text-color: var(--neutral-color-800);--date-picker-bg-color: var(--neutral-color-50);--date-picker-disabled-color: var(--neutral-color-400);--date-picker-hover-bg: var(--neutral-color-400);--date-picker-today-color: var(--brand-500)}::ng-deep .ant-picker-dropdown .ant-picker-panel-container{border-radius:12px}::ng-deep .ant-picker-dropdown .ant-picker-header-super-prev-btn,::ng-deep .ant-picker-dropdown .ant-picker-header-super-next-btn{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-header button{color:var(--neutral-color-600)}::ng-deep .ant-picker-dropdown .ant-picker-header button:hover{color:var(--date-picker-primary-color)}::ng-deep .ant-picker-dropdown .ant-picker-cell:before,::ng-deep .ant-picker-dropdown .ant-picker-cell-inner:before{display:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-today):not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{background-color:var(--neutral-color-200)!important;color:var(--neutral-color-50)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today:not(.ant-picker-cell-selected):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:transparent!important;border:transparent!important;color:var(--theme-blue-600)!important;font-weight:600}::ng-deep .ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-today.ant-picker-cell-selected .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-50)!important;border:none!important;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start:not(.ant-picker-cell-range-end):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-end:not(.ant-picker-cell-range-start):not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-start.ant-picker-cell-range-end:not(.ant-picker-week-panel-row-selected) .ant-picker-cell-inner{border-radius:8px!important;background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border:none!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:first-child .ant-picker-cell-inner{border-radius:8px 0 0 8px!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:last-child .ant-picker-cell-inner{border-radius:0 8px 8px 0!important}::ng-deep .ant-picker-dropdown .ant-picker-week-panel-row-selected .ant-picker-cell:hover .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-in-range.ant-picker-cell-week .ant-picker-cell-inner{background-color:var(--date-picker-primary-color)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover:not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important;border-radius:0!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-start:not(.ant-picker-cell-range-hover-end):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:8px 0 0 8px!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-cell-range-hover-end:not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-in-range) .ant-picker-cell-inner{border-radius:0 8px 8px 0!important;background-color:var(--neutral-color-400)!important;color:var(--neutral-color-10)!important}::ng-deep .ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-inner,::ng-deep .ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px;min-width:60px;border-radius:8px!important}::ng-deep .ant-picker-dropdown .ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:var(--neutral-color-400);color:var(--neutral-color-10);font-weight:600}\n"] }]
|
|
1440
1444
|
}], propDecorators: { mode: [{
|
|
1441
1445
|
type: Input
|
|
1442
1446
|
}], showTime: [{
|
|
@@ -1467,6 +1471,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
|
|
|
1467
1471
|
type: Input
|
|
1468
1472
|
}], disabledDate: [{
|
|
1469
1473
|
type: Input
|
|
1474
|
+
}], width: [{
|
|
1475
|
+
type: Input
|
|
1476
|
+
}], height: [{
|
|
1477
|
+
type: Input
|
|
1470
1478
|
}], dateChange: [{
|
|
1471
1479
|
type: Output
|
|
1472
1480
|
}], rangeChange: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goat-bravos-intern-hub-layout.mjs","sources":["../../../src/libs/shared/components/icon/icon.component.ts","../../../src/libs/shared/components/icon/icon.component.html","../../../src/libs/layouts/header/header.component.ts","../../../src/libs/layouts/header/header.component.html","../../../src/libs/shared/components/functional-label/functional-label.component.ts","../../../src/libs/shared/components/functional-label/functional-label.component.html","../../../src/libs/shared/components/button/button-container/button-container.model.ts","../../../src/libs/shared/components/button/button-container/button-container.component.ts","../../../src/libs/shared/components/button/button-container/button-container.component.html","../../../src/libs/layouts/sidebar/sidebar.component.ts","../../../src/libs/layouts/sidebar/sidebar.component.html","../../../src/libs/shared/components/button/label-button/label-button.component.ts","../../../src/libs/shared/components/button/label-button/label-button.component.html","../../../src/libs/shared/components/input/input-text/input-text.component.ts","../../../src/libs/shared/components/input/input-text/input-text.component.html","../../../src/libs/shared/components/input/input-stepper/input-stepper.component.ts","../../../src/libs/shared/components/input/input-stepper/input-stepper.component.html","../../../src/libs/shared/components/input/input-calendar/input-calendar.component.ts","../../../src/libs/shared/components/input/input-calendar/input-calendar.component.html","../../../src/libs/shared/components/table/table-header/table-header.component.ts","../../../src/libs/shared/components/table/table-header/table-header.component.html","../../../src/libs/shared/components/table/table-body/table-body.component.ts","../../../src/libs/shared/components/table/table-body/table-body.component.html","../../../src/libs/shared/components/approval/approval-list-item/approval-list-item.component.ts","../../../src/libs/shared/components/approval/approval-list-item/approval-list-item.component.html","../../../src/libs/shared/components/approval/approval-list/approval-list.component.ts","../../../src/libs/shared/components/approval/approval-list/approval-list.component.html","../../../src/libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component.ts","../../../src/libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component.html","../../../src/libs/shared/components/modal/modal.component.ts","../../../src/libs/shared/components/modal/modal.component.html","../../../src/libs/shared/components/avatar-upload-button/avatar-upload-button.component.ts","../../../src/libs/shared/components/avatar-upload-button/avatar-upload-button.component.html","../../../src/libs/shared/components/file-upload-dropzone/file-upload-dropzone.component.ts","../../../src/libs/shared/components/file-upload-dropzone/file-upload-dropzone.component.html","../../../src/libs/shared/components/date-picker/date-picker.component.ts","../../../src/libs/shared/components/date-picker/date-picker.component.html","../../../src/public-api.ts","../../../src/goat-bravos-intern-hub-layout.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nexport interface IconData {\r\n icon: string;\r\n colorIcon?: string;\r\n backgroundColorHover?: string;\r\n routerLink?: string;\r\n width?: string;\r\n height?: string;\r\n backgroundColor?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-icon',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss'],\r\n})\r\nexport class IconComponent {\r\n @Input() iconData?: IconData;\r\n @Input() icon?: string;\r\n @Input() colorIcon?: string;\r\n @Input() routerLink?: string;\r\n @Input() width?: string = '20px';\r\n @Input() height?: string = '20px';\r\n @Input() colorIconHover?: string;\r\n @Input() backgroundColorHover?: string;\r\n\r\n @Output() clicked = new EventEmitter<Event>();\r\n\r\n get iconClass(): string {\r\n const iconName = this.iconData?.icon || this.icon || '';\r\n return iconName.includes('dsi') ? iconName : `dsi ${iconName}`;\r\n }\r\n\r\n get iconColor(): string | undefined {\r\n return this.iconData?.colorIcon || this.colorIcon;\r\n }\r\n\r\n get iconWidth(): string {\r\n return this.iconData?.width || this.width || '20px';\r\n }\r\n\r\n get iconHeight(): string {\r\n return this.iconData?.height || this.height || '20px';\r\n }\r\n\r\n get iconRouterLink(): string | undefined {\r\n return this.iconData?.routerLink || this.routerLink;\r\n }\r\n\r\n get backgroundColor(): string | undefined {\r\n return this.iconData?.backgroundColor;\r\n }\r\n\r\n handleClick(event: Event): void {\r\n if (!this.iconRouterLink) {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n}\r\n","<i\r\n class=\"icon\"\r\n [ngClass]=\"iconClass\"\r\n [style.color]=\"iconColor\"\r\n [style.width]=\"iconWidth\"\r\n [style.height]=\"iconHeight\"\r\n [style.backgroundColor]=\"backgroundColor\"\r\n [routerLink]=\"iconRouterLink\"\r\n [attr.tabindex]=\"iconRouterLink ? null : 0\"\r\n [attr.role]=\"iconRouterLink ? null : 'button'\"\r\n (click)=\"handleClick($event)\"\r\n (keydown.enter)=\"handleClick($event)\"\r\n (keydown.space)=\"handleClick($event)\"\r\n></i>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n IconComponent,\r\n IconData,\r\n} from '../../shared/components/icon/icon.component';\r\n\r\nexport interface HeaderAction {\r\n icon: IconData | string;\r\n content: string;\r\n method?: () => void;\r\n badge?: string;\r\n colorIcon?: string;\r\n width?: string;\r\n height?: string;\r\n}\r\n\r\nexport interface HeaderData {\r\n headerItems: HeaderAction[];\r\n userName: string;\r\n userIcon?: IconData | string;\r\n userIconColor?: string;\r\n dropdownIcon?: IconData | string;\r\n dropdownIconColor?: string;\r\n logo?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-header-component',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent],\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n})\r\nexport class HeaderComponent {\r\n @Input() data: HeaderData = {\r\n headerItems: [],\r\n userName: 'Guest',\r\n userIcon: 'dsi-user-01-line',\r\n dropdownIcon: 'dsi-arrow-down-solid',\r\n logo: 'assets/FPT-IS-Logo.png',\r\n };\r\n\r\n @Input() paddingHeader: string = '12px 20px 12px 16px';\r\n\r\n handleActionClick(item: HeaderAction, event: Event): void {\r\n if (item.method) {\r\n event.preventDefault();\r\n item.method();\r\n }\r\n }\r\n\r\n getIconData(\r\n icon: IconData | string | undefined,\r\n colorIcon?: string,\r\n width?: string,\r\n height?: string,\r\n ): IconData | undefined {\r\n if (!icon) return undefined;\r\n\r\n if (typeof icon === 'string') {\r\n return {\r\n icon,\r\n colorIcon,\r\n width,\r\n height,\r\n };\r\n }\r\n\r\n return icon;\r\n }\r\n}\r\n","<header class=\"app-header\" [style.padding]=\"paddingHeader\">\r\n <div class=\"header-left\">\r\n <img\r\n class=\"logo\"\r\n [src]=\"data.logo || 'assets/FPT-IS-Logo.png'\"\r\n alt=\"Logo\"\r\n />\r\n </div>\r\n\r\n <div class=\"header-right\">\r\n @for (item of data.headerItems; track $index) {\r\n <button\r\n class=\"header-btn\"\r\n [attr.aria-label]=\"item.content\"\r\n (click)=\"handleActionClick(item, $event)\"\r\n >\r\n <app-icon\r\n [iconData]=\"\r\n getIconData(\r\n item.icon,\r\n item.colorIcon,\r\n item.width || '16px',\r\n item.height || '16px'\r\n )\r\n \"\r\n ></app-icon>\r\n @if (item.badge) {\r\n <span class=\"badge\">{{ item.badge }}</span>\r\n }\r\n </button>\r\n }\r\n\r\n <div class=\"header-user\">\r\n <button class=\"user-btn\">\r\n @if (data.userIcon) {\r\n <app-icon\r\n [iconData]=\"\r\n getIconData(data.userIcon, data.userIconColor, '16px', '16px')\r\n \"\r\n ></app-icon>\r\n }\r\n <span class=\"user-name\">{{ data.userName }}</span>\r\n @if (data.dropdownIcon) {\r\n <app-icon\r\n [iconData]=\"\r\n getIconData(\r\n data.dropdownIcon,\r\n data.dropdownIconColor,\r\n '16px',\r\n '16px'\r\n )\r\n \"\r\n ></app-icon>\r\n }\r\n </button>\r\n </div>\r\n </div>\r\n</header>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { IconComponent, IconData } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'app-functional-label',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, IconComponent],\r\n templateUrl: './functional-label.component.html',\r\n styleUrls: ['./functional-label.component.scss'],\r\n})\r\nexport class FunctionalLabelComponent {\r\n @Input() iconLeft?: IconData | string;\r\n @Input() iconRight?: IconData | string;\r\n @Input() rightIconTitle?: string = 'Action';\r\n\r\n @Input() colorIconLeft?: string;\r\n @Input() colorIconRight?: string;\r\n @Input() widthIconLeft?: string = '20px';\r\n @Input() heightIconLeft?: string = '20px';\r\n @Input() widthIconRight?: string = '20px';\r\n @Input() heightIconRight?: string = '20px';\r\n\r\n @Input() colorIconLeftHover?: string;\r\n @Input() colorIconRightHover?: string;\r\n @Input() colorContentHover?: string;\r\n @Input() backgroundColorHover?: string;\r\n @Input() borderRadiusHover?: string;\r\n\r\n @Input() isActive: boolean = false;\r\n @Input() activeBackgroundColor?: string;\r\n @Input() activeColorContent?: string;\r\n @Input() activeColorIconLeft?: string;\r\n @Input() activeColorIconRight?: string;\r\n @Input() expandedHoverBackgroundColor?: string;\r\n\r\n @Input() content?: string;\r\n @Input() fontSizeContent?: string = '14px';\r\n @Input() colorContent?: string;\r\n @Input() widthContent?: string = '100%';\r\n @Input() heightContent?: string = '100%';\r\n\r\n @Input() backgroundColor?: string;\r\n @Input() borderRadius?: string;\r\n @Input() width?: string;\r\n @Input() height?: string;\r\n\r\n @Input() disabled: boolean = false;\r\n @Input() disabledColorIconLeft?: string;\r\n @Input() disabledColorContent?: string;\r\n @Input() disabledBackgroundColor?: string;\r\n\r\n @Input() routerLink?: string;\r\n @Input() isSidebarExpanded: boolean = false;\r\n @Output() clicked = new EventEmitter<Event>();\r\n @Output() rightIconClicked = new EventEmitter<Event>();\r\n\r\n get currentBackgroundColor(): string | undefined {\r\n if (this.disabled) {\r\n return this.disabledBackgroundColor || 'transparent';\r\n }\r\n if (this.isActive && this.isSidebarExpanded) {\r\n return this.activeBackgroundColor || 'var(--brand-300)';\r\n }\r\n return this.backgroundColor;\r\n }\r\n\r\n get currentBorderRadius(): string | undefined {\r\n return this.borderRadius;\r\n }\r\n\r\n get currentColorContent(): string {\r\n if (this.disabled) {\r\n return this.disabledColorContent || 'var(--neutral-color-300)';\r\n }\r\n if (this.isActive && this.isSidebarExpanded) {\r\n return this.activeColorContent || 'var(--brand-500)';\r\n }\r\n if (this.colorContent) return this.colorContent;\r\n return this.isSidebarExpanded ? 'var(--neutral-color-500)' : '#ffffff';\r\n }\r\n\r\n get hasIconLeft(): boolean {\r\n return !!this.iconLeft;\r\n }\r\n\r\n get hasIconRight(): boolean {\r\n return !!this.iconRight;\r\n }\r\n\r\n get iconLeftData(): IconData | undefined {\r\n if (!this.iconLeft) return undefined;\r\n\r\n let color = this.colorIconLeft;\r\n if (this.disabled) {\r\n color = this.disabledColorIconLeft || 'var(--neutral-color-300)';\r\n } else {\r\n if (!color) {\r\n color = this.isSidebarExpanded ? 'var(--brand-600)' : '#ffffff';\r\n }\r\n\r\n if (this.isActive && this.isSidebarExpanded) {\r\n color = this.activeColorIconLeft || 'var(--brand-500)';\r\n } else if (this.isSidebarExpanded && this.colorIconLeftHover) {\r\n // NOTE: hover is handled mostly by css but we have this fallback maybe\r\n color = this.colorIconLeftHover;\r\n }\r\n }\r\n\r\n if (typeof this.iconLeft === 'string') {\r\n return {\r\n icon: this.iconLeft,\r\n colorIcon: color,\r\n width: this.widthIconLeft,\r\n height: this.heightIconLeft,\r\n };\r\n }\r\n return {\r\n ...this.iconLeft,\r\n colorIcon: color || this.iconLeft.colorIcon,\r\n };\r\n }\r\n\r\n get iconRightData(): IconData | undefined {\r\n if (!this.iconRight) return undefined;\r\n\r\n let color = this.colorIconRight;\r\n if (!color) {\r\n color = this.isSidebarExpanded ? 'var(--neutral-color-500)' : '#ffffff';\r\n }\r\n\r\n if (this.isActive && this.isSidebarExpanded) {\r\n color = this.activeColorIconRight || 'var(--brand-500)';\r\n } else if (this.isSidebarExpanded && this.colorIconRightHover) {\r\n color = this.colorIconRightHover;\r\n }\r\n\r\n if (typeof this.iconRight === 'string') {\r\n return {\r\n icon: this.iconRight,\r\n colorIcon: color,\r\n width: this.widthIconRight,\r\n height: this.heightIconRight,\r\n };\r\n }\r\n return {\r\n ...this.iconRight,\r\n colorIcon: color || this.iconRight.colorIcon,\r\n };\r\n }\r\n\r\n handleClick(event: Event): void {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n if (!this.routerLink) {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n handleRightIconClick(event: Event): void {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n event.stopPropagation();\r\n this.rightIconClicked.emit(event);\r\n }\r\n}\r\n","<div\r\n class=\"functional-label\"\r\n [class.is-expanded]=\"isSidebarExpanded\"\r\n [class.disabled]=\"disabled\"\r\n (click)=\"handleClick($event)\"\r\n (keydown.enter)=\"handleClick($event)\"\r\n (keydown.space)=\"handleClick($event)\"\r\n [attr.tabindex]=\"disabled ? null : (routerLink ? null : 0)\"\r\n [attr.role]=\"routerLink ? null : 'button'\"\r\n [style.--bg-color]=\"currentBackgroundColor\"\r\n [style.--bg-hover-color]=\"backgroundColorHover || backgroundColor\"\r\n [style.border-radius]=\"currentBorderRadius\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.--content-hover-color]=\"colorContentHover\"\r\n>\r\n @if (hasIconLeft && iconLeftData) {\r\n <app-icon\r\n [iconData]=\"iconLeftData\"\r\n [width]=\"widthIconLeft\"\r\n [height]=\"heightIconLeft\"\r\n ></app-icon>\r\n }\r\n\r\n <a\r\n [routerLink]=\"disabled ? null : routerLink\"\r\n [style.width]=\"widthContent\"\r\n [style.height]=\"heightContent\"\r\n [style.font-size]=\"fontSizeContent\"\r\n [style.--content-color]=\"currentColorContent\"\r\n >\r\n {{ content }}\r\n </a>\r\n\r\n @if (hasIconRight && iconRightData) {\r\n <app-icon\r\n [iconData]=\"iconRightData\"\r\n [width]=\"widthIconRight\"\r\n [height]=\"heightIconRight\"\r\n (click)=\"handleRightIconClick($event)\"\r\n (keydown.enter)=\"handleRightIconClick($event)\"\r\n (keydown.space)=\"handleRightIconClick($event)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [title]=\"rightIconTitle\"\r\n [attr.aria-label]=\"rightIconTitle\"\r\n ></app-icon>\r\n }\r\n</div>\r\n","export interface ButtonContainerInterface {\r\n size: ButtonSize;\r\n leftIcon?: string;\r\n rightIcon?: string;\r\n content: string;\r\n event?: string;\r\n fontSize?: string;\r\n color?: string;\r\n backgroundColor?: string;\r\n borderColor?: string;\r\n}\r\n\r\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\r\n\r\nexport interface ButtonSizeConfig {\r\n minWidth: string;\r\n minHeight: string;\r\n fontSize: string;\r\n iconSize: string;\r\n contentWidth: string;\r\n contentHeight: string;\r\n}\r\n\r\nexport const BUTTON_SIZE_MAP: Record<ButtonSize, ButtonSizeConfig> = {\r\n xs: {\r\n minWidth: '47px',\r\n minHeight: '24px',\r\n fontSize: 'var(--font-xs)',\r\n iconSize: '14px',\r\n contentWidth: '32px',\r\n contentHeight: '16px',\r\n },\r\n sm: {\r\n minWidth: '96px',\r\n minHeight: '28px',\r\n fontSize: 'var(--font-sm)',\r\n iconSize: '16px',\r\n contentWidth: '44px',\r\n contentHeight: '20px',\r\n },\r\n md: {\r\n minWidth: '116px',\r\n minHeight: '36px',\r\n fontSize: 'var(--font-sm)',\r\n iconSize: '20px',\r\n contentWidth: '52px',\r\n contentHeight: '20px',\r\n },\r\n lg: {\r\n minWidth: '120px',\r\n minHeight: '44px',\r\n fontSize: 'var(--font-sm)',\r\n iconSize: '20px',\r\n contentWidth: '52px',\r\n contentHeight: '20px',\r\n },\r\n};\r\n\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonSize, BUTTON_SIZE_MAP } from './button-container.model';\r\nimport { IconComponent, IconData } from '../../icon/icon.component';\r\n\r\nexport interface ButtonContainerData {\r\n size?: ButtonSize | '';\r\n content?: string;\r\n fontSize?: string;\r\n leftIcon?: string;\r\n leftIconData?: IconData[];\r\n rightIcon?: string;\r\n rightIconData?: IconData[];\r\n color?: string;\r\n backgroundColor?: string;\r\n border?: string;\r\n borderRadius: '8px';\r\n width?: string;\r\n height: '36px';\r\n padding?: string;\r\n marginLeft?: string;\r\n marginRight?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-button-container',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent],\r\n templateUrl: './button-container.component.html',\r\n styleUrls: ['./button-container.component.scss'],\r\n})\r\nexport class ButtonContainerComponent {\r\n @Input() buttonData?: ButtonContainerData;\r\n\r\n @Input() size: ButtonSize | '' = 'md';\r\n @Input() content?: string;\r\n\r\n @Input() fontSize?: string;\r\n\r\n @Input() leftIcon?: string;\r\n @Input() leftIconData?: IconData[];\r\n\r\n @Input() rightIcon?: string;\r\n @Input() rightIconData?: IconData[];\r\n\r\n @Input() color?: string;\r\n @Input() backgroundColor?: string;\r\n @Input() border?: string;\r\n @Input() borderRadius = '8px';\r\n @Input() width?: string;\r\n @Input() height = '36px';\r\n @Input() padding?: string;\r\n @Input() marginLeft?: string;\r\n @Input() marginRight?: string;\r\n @Input() borderColor?: string;\r\n\r\n @Output() buttonClick = new EventEmitter<any>();\r\n\r\n get sizeStyle() {\r\n return this.size\r\n ? BUTTON_SIZE_MAP[this.size as ButtonSize]\r\n : {\r\n minWidth: 'auto',\r\n minHeight: 'auto',\r\n fontSize: 'inherit',\r\n iconSize: '20px',\r\n contentWidth: 'auto',\r\n contentHeight: 'auto',\r\n };\r\n }\r\n\r\n handleClick(): any {\r\n this.buttonClick.emit();\r\n }\r\n}\r\n","<button\r\n class=\"button-container\"\r\n [style.minWidth]=\"sizeStyle.minWidth\"\r\n [style.minHeight]=\"sizeStyle.minHeight\"\r\n [style.color]=\"color\"\r\n [style.backgroundColor]=\"backgroundColor\"\r\n [style.border]=\"border\"\r\n [style.borderRadius]=\"borderRadius\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.padding]=\"padding\"\r\n [style.marginLeft]=\"marginLeft\"\r\n [style.marginRight]=\"marginRight\"\r\n [style.borderColor]=\"borderColor\"\r\n (click)=\"handleClick()\"\r\n>\r\n @if (leftIcon || (leftIconData && leftIconData.length > 0)) {\r\n @for (iconData of leftIconData; track iconData) {\r\n <app-icon [iconData]=\"iconData\"></app-icon>\r\n }\r\n @if (leftIcon && (!leftIconData || leftIconData.length === 0)) {\r\n <app-icon [icon]=\"leftIcon\"></app-icon>\r\n }\r\n }\r\n\r\n @if (content) {\r\n <span\r\n class=\"button-content\"\r\n [style.minWidth]=\"sizeStyle.contentWidth\"\r\n [style.minHeight]=\"sizeStyle.contentHeight\"\r\n [style.fontSize]=\"fontSize || sizeStyle.fontSize\"\r\n [style.color]=\"color\"\r\n >\r\n {{ content }}\r\n </span>\r\n }\r\n\r\n @if (rightIcon || (rightIconData && rightIconData.length > 0)) {\r\n @for (iconData of rightIconData; track iconData) {\r\n <app-icon [iconData]=\"iconData\"></app-icon>\r\n }\r\n @if (rightIcon && (!rightIconData || rightIconData.length === 0)) {\r\n <app-icon [icon]=\"rightIcon\"></app-icon>\r\n }\r\n }\r\n</button>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FunctionalLabelComponent } from '../../shared/components/functional-label/functional-label.component';\r\nimport { ButtonContainerComponent } from '../../shared/components/button/button-container/button-container.component';\r\nimport { IconData } from '../../shared/components/icon/icon.component';\r\n\r\nexport interface SidebarItem {\r\n iconLeft?: IconData | string;\r\n iconRight?: IconData | string;\r\n content: string;\r\n url?: string;\r\n colorIconLeft?: string;\r\n colorIconLeftExpanded?: string;\r\n colorIconLeftHover?: string;\r\n colorIconRight?: string;\r\n colorIconRightExpanded?: string;\r\n colorIconRightHover?: string;\r\n colorContent?: string;\r\n colorContentExpanded?: string;\r\n colorContentHover?: string;\r\n backgroundColor?: string;\r\n backgroundColorExpanded?: string;\r\n backgroundColorHover?: string;\r\n backgroundColorHoverExpanded?: string;\r\n borderRadius?: string;\r\n borderRadiusHover?: string;\r\n width?: string;\r\n height?: string;\r\n children?: SidebarItem[];\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface SidebarData {\r\n menuItems: SidebarItem[];\r\n backgroundColor?: string;\r\n collapseIcon?: string;\r\n expandIcon?: string;\r\n toggleButtonBackgroundColor?: string;\r\n closeButtonBackgroundColor?: string;\r\n toggleButtonIconColor?: string;\r\n toggleButtonSize?: string;\r\n toggleButtonBorderRadius?: string;\r\n toggleButtonPadding?: string;\r\n toggleButtonWidth?: string;\r\n toggleButtonHeight?: string;\r\n closeButtonMarginRight?: string;\r\n closeButtonMarginLeft?: string;\r\n\r\n // New properties from demo\r\n defaultWidth?: string;\r\n defaultHeight?: string;\r\n defaultBorderRadius?: string;\r\n defaultColorIconLeft?: string;\r\n defaultColorContent?: string;\r\n defaultBackgroundColor?: string;\r\n defaultColorIconLeftHover?: string;\r\n defaultColorContentHover?: string;\r\n defaultBackgroundColorHover?: string;\r\n activeColorIconLeft?: string;\r\n activeColorContent?: string;\r\n activeBackgroundColor?: string;\r\n disabledColorIconLeft?: string;\r\n disabledColorContent?: string;\r\n disabledBackgroundColor?: string;\r\n defaultColorIconLeftExpanded?: string;\r\n defaultColorIconRightExpanded?: string;\r\n defaultColorContentExpanded?: string;\r\n defaultBackgroundColorExpanded?: string;\r\n defaultBackgroundColorHoverExpanded?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, FunctionalLabelComponent, ButtonContainerComponent],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.scss'],\r\n})\r\nexport class SidebarComponent {\r\n @Input() data: SidebarData = { menuItems: [] };\r\n @Input() sidebarWidthCollapse: string = '59px';\r\n @Input() sidebarWidthExpand: string = '227px';\r\n @Input() isSidebarExpanded = false;\r\n\r\n @Input() leftIcon?: string;\r\n @Input() rightIcon?: string;\r\n\r\n @Output() sidebarToggled = new EventEmitter<boolean>();\r\n\r\n @Input() toggleButtonIconData?: IconData[];\r\n\r\n @Input() closeButtonIconData?: IconData[];\r\n\r\n expandedItems: Set<SidebarItem> = new Set();\r\n activeItem: SidebarItem | null = null;\r\n\r\n toggleSidebar(): void {\r\n this.isSidebarExpanded = !this.isSidebarExpanded;\r\n this.sidebarToggled.emit(this.isSidebarExpanded);\r\n if (!this.isSidebarExpanded) {\r\n this.expandedItems.clear(); // Clear expanded menus when collapsing sidebar\r\n }\r\n }\r\n\r\n toggleSubMenu(item: SidebarItem, event: Event): void {\r\n event.stopPropagation();\r\n const wasExpanded = this.expandedItems.has(item);\r\n this.expandedItems.clear();\r\n if (!wasExpanded) {\r\n this.expandedItems.add(item);\r\n }\r\n }\r\n\r\n isItemExpanded(item: SidebarItem): boolean {\r\n return this.expandedItems.has(item);\r\n }\r\n\r\n getRightIcon(item: SidebarItem): string | IconData | undefined {\r\n if (!item.iconRight) return undefined;\r\n\r\n const isExpanded = this.isItemExpanded(item);\r\n\r\n // If it's a string identifier\r\n if (typeof item.iconRight === 'string') {\r\n return isExpanded \r\n ? item.iconRight.replace('down', 'up') \r\n : item.iconRight.replace('up', 'down');\r\n }\r\n\r\n // If it's an IconData object\r\n if (typeof item.iconRight === 'object' && 'icon' in item.iconRight) {\r\n const iconName = item.iconRight.icon;\r\n if (!iconName) return item.iconRight;\r\n return {\r\n ...item.iconRight,\r\n icon: isExpanded ? iconName.replace('down', 'up') : iconName.replace('up', 'down')\r\n };\r\n }\r\n\r\n return item.iconRight;\r\n }\r\n\r\n onMenuItemClick(item: SidebarItem, event: Event): void {\r\n this.activeItem = item;\r\n console.log('Menu item clicked:', item, event);\r\n }\r\n}\r\n","<div class=\"sidebar-wrapper\" [class.expanded]=\"isSidebarExpanded\"\r\n [style.--expanded-hover-bg]=\"data.defaultBackgroundColorHoverExpanded || 'var(--neutral-400)'\">\r\n <div [style.background-color]=\"isSidebarExpanded ? (data.backgroundColor || 'var(--neutral-color-50)') : 'var(--brand-500)'\">\r\n <aside class=\"sidebar\">\r\n @for (item of data.menuItems; track $index) {\r\n <div class=\"sidebar-item-container\">\r\n <app-functional-label\r\n class=\"sidebar-item\"\r\n [class.active]=\"activeItem === item || rla.isActive\"\r\n routerLinkActive=\"active\"\r\n #rla=\"routerLinkActive\"\r\n [isActive]=\"activeItem === item || rla.isActive\"\r\n [isSidebarExpanded]=\"isSidebarExpanded\"\r\n [iconLeft]=\"item.iconLeft\"\r\n [iconRight]=\"isSidebarExpanded ? getRightIcon(item) : undefined\"\r\n [content]=\"item.content\"\r\n [routerLink]=\"item.url\"\r\n [colorIconLeft]=\"isSidebarExpanded ? (item.colorIconLeftExpanded || data.defaultColorIconLeftExpanded || item.colorIconLeft || data.defaultColorIconLeft) : (item.colorIconLeft || data.defaultColorIconLeft)\"\r\n [colorIconRight]=\"isSidebarExpanded ? (item.colorIconRightExpanded || data.defaultColorIconRightExpanded || item.colorIconRight) : item.colorIconRight\"\r\n [colorContent]=\"isSidebarExpanded ? (item.colorContentExpanded || data.defaultColorContentExpanded || item.colorContent || data.defaultColorContent) : (item.colorContent || data.defaultColorContent)\"\r\n [colorContentHover]=\"item.colorContentHover || data.defaultColorContentHover\"\r\n [backgroundColor]=\"isSidebarExpanded ? (item.backgroundColorExpanded || data.defaultBackgroundColorExpanded || item.backgroundColor || data.defaultBackgroundColor) : (item.backgroundColor || data.defaultBackgroundColor)\"\r\n [borderRadius]=\"item.borderRadius || data.defaultBorderRadius\"\r\n (clicked)=\"onMenuItemClick(item, $event)\"\r\n (rightIconClicked)=\"toggleSubMenu(item, $event)\"\r\n [colorIconLeftHover]=\"item.colorIconLeftHover || data.defaultColorIconLeftHover\"\r\n [colorIconRightHover]=\"item.colorIconRightHover\"\r\n [disabled]=\"!!item.disabled\"\r\n [disabledColorIconLeft]=\"data.disabledColorIconLeft\"\r\n [disabledColorContent]=\"data.disabledColorContent\"\r\n [disabledBackgroundColor]=\"data.disabledBackgroundColor\"\r\n [activeBackgroundColor]=\"data.activeBackgroundColor || 'var(--brand-300)'\"\r\n [activeColorContent]=\"data.activeColorContent || 'var(--brand-500)'\"\r\n [activeColorIconLeft]=\"data.activeColorIconLeft || 'var(--brand-500)'\"\r\n [backgroundColorHover]=\"item.backgroundColorHover || data.defaultBackgroundColorHover\"\r\n [width]=\"item.width || data.defaultWidth\"\r\n [height]=\"item.height || data.defaultHeight\"\r\n ></app-functional-label>\r\n\r\n <!-- ✅ Sub Menu -->\r\n @if (isItemExpanded(item) && item.children && isSidebarExpanded) {\r\n <div class=\"sub-menu\">\r\n @for (child of item.children; track child.content) {\r\n <app-functional-label\r\n class=\"sidebar-item sub-item\"\r\n routerLinkActive=\"active\"\r\n #subRla=\"routerLinkActive\"\r\n [isActive]=\"activeItem === child || subRla.isActive\"\r\n [isSidebarExpanded]=\"isSidebarExpanded\"\r\n [iconLeft]=\"child.iconLeft\"\r\n [content]=\"child.content\"\r\n [routerLink]=\"child.url\"\r\n [colorIconLeft]=\"isSidebarExpanded ? (child.colorIconLeftExpanded || data.defaultColorIconLeftExpanded || child.colorIconLeft || data.defaultColorIconLeft) : (child.colorIconLeft || data.defaultColorIconLeft)\"\r\n [colorIconRight]=\"isSidebarExpanded ? (child.colorIconRightExpanded || data.defaultColorIconRightExpanded || child.colorIconRight) : child.colorIconRight\"\r\n [colorContent]=\"isSidebarExpanded ? (child.colorContentExpanded || data.defaultColorContentExpanded || child.colorContent || data.defaultColorContent) : (child.colorContent || data.defaultColorContent)\"\r\n [colorContentHover]=\"child.colorContentHover || data.defaultColorContentHover\"\r\n [backgroundColor]=\"isSidebarExpanded ? (child.backgroundColorExpanded || data.defaultBackgroundColorExpanded || child.backgroundColor || data.defaultBackgroundColor) : (child.backgroundColor || data.defaultBackgroundColor)\"\r\n [borderRadius]=\"child.borderRadius || data.defaultBorderRadius\"\r\n [colorIconLeftHover]=\"child.colorIconLeftHover || data.defaultColorIconLeftHover\"\r\n [disabled]=\"!!child.disabled\"\r\n [disabledColorIconLeft]=\"data.disabledColorIconLeft\"\r\n [disabledColorContent]=\"data.disabledColorContent\"\r\n [disabledBackgroundColor]=\"data.disabledBackgroundColor\"\r\n [activeBackgroundColor]=\"data.activeBackgroundColor\"\r\n [activeColorContent]=\"data.activeColorContent\"\r\n [activeColorIconLeft]=\"data.activeColorIconLeft\"\r\n [backgroundColorHover]=\"child.backgroundColorHover || data.defaultBackgroundColorHover\"\r\n (clicked)=\"onMenuItemClick(child, $event)\"\r\n [width]=\"child.width || data.defaultWidth\"\r\n [height]=\"child.height || data.defaultHeight\"\r\n ></app-functional-label>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </aside>\r\n\r\n <!--Toggle button - chỉ hiện khi KHÔNG expanded -->\r\n @if (!isSidebarExpanded) {\r\n <app-button-container\r\n class=\"sidebar-toggle-button\"\r\n [leftIconData]=\"toggleButtonIconData\"\r\n [backgroundColor]=\"data.toggleButtonBackgroundColor || 'transparent'\"\r\n [borderRadius]=\"'8px'\"\r\n [size]=\"'sm'\"\r\n [width]=\"'36px'\"\r\n [height]=\"'36px'\"\r\n (buttonClick)=\"toggleSidebar()\"\r\n ></app-button-container>\r\n }\r\n\r\n <!--Close button - chỉ hiện khi expanded -->\r\n @if (isSidebarExpanded) {\r\n <app-button-container\r\n class=\"sidebar-close-button\"\r\n [leftIconData]=\"closeButtonIconData\"\r\n [backgroundColor]=\"\r\n data.closeButtonBackgroundColor || 'var(--brand-400)'\r\n \"\r\n [color]=\"data.toggleButtonIconColor || 'var(--neutral-500)'\"\r\n [borderRadius]=\"'8px'\"\r\n [size]=\"'sm'\"\r\n (buttonClick)=\"toggleSidebar()\"\r\n [width]=\"'36px'\"\r\n [height]=\"'36px'\"\r\n [marginRight]=\"data.closeButtonMarginRight || '24px'\"\r\n [marginLeft]=\"data.closeButtonMarginLeft || 'auto'\"\r\n ></app-button-container>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-label-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './label-button.component.html',\n styleUrls: ['./label-button.component.scss'],\n})\nexport class LabelButtonComponent {\n @Input() label: string = '';\n @Input() bgColor: string = '';\n @Input() borderColor: string = '';\n @Input() width: string = '100%';\n @Input() height: string = '28px';\n @Input() textColor: string = 'var(--neutral-100)';\n}\n","<button\n [style.background-color]=\"bgColor\"\n [style.border-color]=\"borderColor\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n class=\"label-button\"\n type=\"button\"\n>\n {{ label }}\n</button>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-input-text',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input-text.component.html',\r\n styleUrls: ['./input-text.component.scss'],\r\n})\r\nexport class InputTextComponent {\r\n @Input() headerInput: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() width: string = '100%';\r\n @Input() maxLength: number = 0; // 0 = no limit\r\n @Input() showLimit: boolean = false;\r\n @Input() icon: string = '';\r\n @Input() widthIcon: string = '16px';\r\n @Input() heightIcon: string = '16px';\r\n @Input() typeInput: string = 'text';\r\n @Input() showLabel: boolean = true;\r\n\r\n // Customization\r\n @Input() placeholderColor: string = '';\r\n @Input() border: string = '';\r\n @Input() borderRadius = '8px';\r\n @Input() padding = '8px 12px';\r\n @Input() height = '36px';\r\n @Input() fontSizeContent: string = '14px';\r\n @Input() fontWeightContent: string = '500';\r\n @Input() colorContent: string = 'var(--neutral-color-875)';\r\n\r\n @Input() fontSizeLabel: string = '14px';\r\n @Input() fontWeightLabel: string = '500';\r\n @Input() colorLabel: string = 'var(--neutral-color-875)';\r\n\r\n @Input() backgroundColor: string = 'var(--neutral-color-10)';\r\n @Input() borderColor?: string;\r\n @Input() borderColorHover?: string;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() iconClick = new EventEmitter<void>();\r\n\r\n private _value: string = '';\r\n\r\n onIconClick(): void {\r\n this.iconClick.emit();\r\n }\r\n\r\n @Input()\r\n set value(val: string) {\r\n this._value = val || '';\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n\r\n get currentLength(): number {\r\n return this._value?.length || 0;\r\n }\r\n\r\n get limit(): string {\r\n if (!this.showLimit || this.maxLength <= 0) return '';\r\n return `${this.currentLength}/${this.maxLength}`;\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let newValue = input.value;\r\n\r\n // Enforce maxLength if set\r\n if (this.maxLength > 0 && newValue.length > this.maxLength) {\r\n newValue = newValue.substring(0, this.maxLength);\r\n input.value = newValue;\r\n }\r\n\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n}\r\n","<div class=\"input-form\">\r\n <div class=\"input-form-content\">\r\n <label class=\"input-form-label\">\r\n @if (showLabel) {\r\n <span\r\n class=\"label-text\"\r\n [class.hidden]=\"!headerInput\"\r\n [style.font-size]=\"fontSizeLabel || null\"\r\n [style.font-weight]=\"fontWeightLabel || null\"\r\n [style.color]=\"colorLabel || null\"\r\n >\r\n {{ headerInput }}\r\n @if (required) {\r\n <span class=\"required-mark\">*</span>\r\n }\r\n </span>\r\n }\r\n <div class=\"input-field-wrapper\">\r\n <input\r\n [type]=\"typeInput\"\r\n class=\"input-form-field\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [required]=\"required\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.padding]=\"padding\"\r\n [style.border]=\"border || null\"\r\n [style.border-radius]=\"borderRadius\"\r\n [style.background-color]=\"backgroundColor\"\r\n [style.--placeholder-color]=\"placeholderColor || null\"\r\n [style.font-size]=\"fontSizeContent || null\"\r\n [style.font-weight]=\"fontWeightContent || null\"\r\n [style.color]=\"colorContent || null\"\r\n [style.--border-color]=\"borderColor || null\"\r\n [style.--border-color-hover]=\"borderColorHover || null\"\r\n [value]=\"value\"\r\n (input)=\"onInput($event)\"\r\n [attr.maxlength]=\"maxLength > 0 ? maxLength : null\"\r\n />\r\n @if (icon) {\r\n <button\r\n type=\"button\"\r\n class=\"input-icon-button\"\r\n [class.clickable]=\"iconClick.observed\"\r\n (click)=\"onIconClick()\"\r\n [attr.aria-label]=\"icon\"\r\n [disabled]=\"!iconClick.observed\"\r\n >\r\n <i\r\n [class]=\"icon\"\r\n [style.width]=\"widthIcon\"\r\n [style.height]=\"heightIcon\"\r\n class=\"input-icon\"\r\n ></i>\r\n </button>\r\n }\r\n </div>\r\n </label>\r\n </div>\r\n <div class=\"limit\" [class.hidden]=\"!(maxLength > 0 && showLimit)\">\r\n <span>{{ limit }}</span>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\n@Component({\r\n selector: 'app-input-stepper',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input-stepper.component.html',\r\n styleUrls: ['./input-stepper.component.scss'],\r\n})\r\nexport class InputStepperComponent {\r\n protected readonly componentId = `input-stepper-${Math.random().toString(36).substring(2, 9)}`;\r\n @Input() headerInput: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n @Input() width: string = '100%';\r\n @Input() min: number = 0;\r\n @Input() max: number = 100;\r\n @Input() error: string = '';\r\n @Input() helperText: string = '';\r\n @Input() step: number = 1;\r\n @Input() state: 'default' | 'negative' | 'positive' = 'default';\r\n\r\n @Output() valueChange = new EventEmitter<number>();\r\n\r\n private _value: number = 0;\r\n\r\n @Input()\r\n set value(val: number) {\r\n this._value = val || 0;\r\n }\r\n\r\n get value(): number {\r\n return this._value;\r\n }\r\n\r\n increment(): void {\r\n if (this.readonly || this.disabled) return;\r\n const newValue = this._value + this.step;\r\n if (newValue <= this.max) {\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n\r\n decrement(): void {\r\n if (this.readonly || this.disabled) return;\r\n const newValue = this._value - this.step;\r\n if (newValue >= this.min) {\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let newValue = Number.parseInt(input.value, 10);\r\n\r\n if (Number.isNaN(newValue)) {\r\n newValue = this.min;\r\n }\r\n\r\n if (newValue < this.min) newValue = this.min;\r\n if (newValue > this.max) newValue = this.max;\r\n\r\n input.value = newValue.toString();\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n}","<div\r\n class=\"input-form\"\r\n [style.width]=\"width\"\r\n [class.disabled]=\"disabled\"\r\n [class.state-negative]=\"state === 'negative'\"\r\n [class.state-positive]=\"state === 'positive'\"\r\n>\r\n <div class=\"input-form-content\">\r\n <label class=\"input-form-label\" [for]=\"componentId\">\r\n <span class=\"label-text\">\r\n {{ headerInput }}\r\n @if (required) {\r\n <span class=\"required-mark\">*</span>\r\n }\r\n </span>\r\n </label>\r\n </div>\r\n\r\n <div class=\"input-stepper-content\">\r\n <button\r\n type=\"button\"\r\n class=\"input-stepper-button\"\r\n (click)=\"decrement()\"\r\n [disabled]=\"disabled\"\r\n aria-label=\"Giảm giá trị\"\r\n >\r\n <span class=\"stepper-icon\">−</span>\r\n </button>\r\n <input\r\n [id]=\"componentId\"\r\n type=\"text\"\r\n class=\"input-stepper-input\"\r\n placeholder=\"0\"\r\n [placeholder]=\"placeholder || '0'\"\r\n title=\"Giá trị\"\r\n [title]=\"headerInput || 'Giá trị'\"\r\n [readonly]=\"readonly\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [value]=\"value\"\r\n (input)=\"onInput($event)\"\r\n [attr.aria-label]=\"headerInput || 'Giá trị'\"\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"input-stepper-button\"\r\n (click)=\"increment()\"\r\n [disabled]=\"disabled\"\r\n aria-label=\"Tăng giá trị\"\r\n >\r\n <span class=\"stepper-icon\">+</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"input-stepper-footer\">\r\n @if (error) {\r\n <span class=\"input-stepper-error\">{{ error }}</span>\r\n } @else if (helperText) {\r\n <span class=\"input-stepper-helper\">{{ helperText }}</span>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, ElementRef, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-input-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input-calendar.component.html',\r\n styleUrls: ['./input-calendar.component.scss'],\r\n})\r\nexport class InputCalendarComponent {\r\n @Input() headerInput: string = '';\r\n @Input() placeholder: string = 'dd/mm/yyyy';\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() width: string = '100%';\r\n \r\n @Output() valueChange = new EventEmitter<string>();\r\n \r\n @ViewChild('hiddenDateInput') hiddenDateInput!: ElementRef<HTMLInputElement>;\r\n \r\n displayValue: string = '';\r\n private _value: string = '';\r\n \r\n @Input()\r\n set value(val: string) {\r\n this._value = val;\r\n this.displayValue = this.formatToDisplay(val);\r\n }\r\n \r\n get value(): string {\r\n return this._value;\r\n }\r\n \r\n // Convert ISO format (yyyy-mm-dd) to display format (dd/mm/yyyy)\r\n formatToDisplay(isoDate: string): string {\r\n if (!isoDate) return '';\r\n const parts = isoDate.split('-');\r\n if (parts.length === 3) {\r\n return `${parts[2]}/${parts[1]}/${parts[0]}`;\r\n }\r\n return isoDate;\r\n }\r\n \r\n // Validate if a date string (dd/mm/yyyy) represents a valid date\r\n isValidDate(displayDate: string): boolean {\r\n if (!displayDate || displayDate.length !== 10) return false;\r\n \r\n const parts = displayDate.split('/');\r\n if (parts.length !== 3) return false;\r\n \r\n const day = Number.parseInt(parts[0], 10);\r\n const month = Number.parseInt(parts[1], 10);\r\n const year = Number.parseInt(parts[2], 10);\r\n \r\n // Basic range validation\r\n if (Number.isNaN(day) || Number.isNaN(month) || Number.isNaN(year)) return false;\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n if (year < 1900 || year > 2100) return false;\r\n \r\n // Create date and verify it matches input (handles invalid dates like 31/02)\r\n const date = new Date(year, month - 1, day);\r\n return date.getFullYear() === year && \r\n date.getMonth() === month - 1 && \r\n date.getDate() === day;\r\n }\r\n\r\n // Convert display format (dd/mm/yyyy) to ISO format (yyyy-mm-dd)\r\n formatToISO(displayDate: string): string {\r\n if (!displayDate) return '';\r\n const parts = displayDate.split('/');\r\n if (parts.length === 3) {\r\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\r\n }\r\n return displayDate;\r\n }\r\n \r\n // Handle text input with auto-formatting\r\n onDisplayInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value.replaceAll(/[^\\d/]/g, '');\r\n \r\n // Auto-insert slashes at positions 2 and 5\r\n const parts = value.split('/');\r\n if (parts[0] && parts[0].length >= 2 && parts.length === 1) {\r\n value = parts[0].substring(0, 2) + '/' + parts[0].substring(2);\r\n }\r\n if (value.length >= 5 && value.split('/').length === 2 && !value.endsWith('/')) {\r\n const newParts = value.split('/');\r\n if (newParts[1] && newParts[1].length >= 2) {\r\n value = newParts[0] + '/' + newParts[1].substring(0, 2) + '/' + newParts[1].substring(2);\r\n }\r\n }\r\n \r\n // Limit to dd/mm/yyyy format\r\n if (value.length > 10) {\r\n value = value.substring(0, 10);\r\n }\r\n \r\n this.displayValue = value;\r\n \r\n // Only emit if complete and valid date\r\n if (value.length === 10 && this.isValidDate(value)) {\r\n const isoValue = this.formatToISO(value);\r\n this._value = isoValue;\r\n this.valueChange.emit(isoValue);\r\n }\r\n }\r\n \r\n // Open native date picker\r\n openDatePicker(): void {\r\n if (!this.readonly && this.hiddenDateInput) {\r\n this.hiddenDateInput.nativeElement.showPicker();\r\n }\r\n }\r\n \r\n // Handle date picker selection\r\n onDatePickerChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this._value = input.value;\r\n this.displayValue = this.formatToDisplay(input.value);\r\n this.valueChange.emit(this._value);\r\n }\r\n}","<div class=\"input-form\" [style.width]=\"width\">\r\n <label class=\"input-form-label\">\r\n <div class=\"input-form-label-header\">\r\n <span>{{ headerInput }}</span>\r\n @if (required) {\r\n <span class=\"required-mark\">*</span>\r\n }\r\n </div>\r\n <div class=\"calendar-input-wrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"input-form-field\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [required]=\"required\"\r\n [value]=\"displayValue\"\r\n (input)=\"onDisplayInput($event)\"\r\n maxlength=\"10\"\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"calendar-icon-btn\"\r\n (click)=\"openDatePicker()\"\r\n [disabled]=\"readonly\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\r\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n </svg>\r\n </button>\r\n <input\r\n #hiddenDateInput\r\n type=\"date\"\r\n class=\"hidden-date-input\"\r\n [value]=\"value\"\r\n (change)=\"onDatePickerChange($event)\"\r\n />\r\n </div>\r\n </label>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface ColumnConfig {\r\n header: string;\r\n key: string;\r\n width: string;\r\n}\r\n\r\n@Component({\r\n selector: 'tr[app-table-header]',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-header.component.html',\r\n styleUrl: './table-header.component.scss',\r\n})\r\nexport class TableHeaderComponent {\r\n @Input() columns: ColumnConfig[] = [];\r\n @Input() backgroundColor?: string;\r\n @Input({ transform: (value: string | undefined) => value || '#ffffff' })\r\n textColor: string = '#ffffff';\r\n @Input() headerIconLeft?: string;\r\n @Input() headerIconRight?: string;\r\n @Input() fontSize: string = 'var(--font-xs)';\r\n}\r\n","@for (col of columns; track col.key) {\r\n <th\r\n scope=\"col\"\r\n [style.width]=\"col.width\"\r\n [style.backgroundColor]=\"backgroundColor\"\r\n [style.color]=\"textColor\"\r\n >\r\n <div class=\"header-container\">\r\n <div class=\"header-content\">\r\n @if (headerIconLeft) {\r\n <div class=\"icon-left\">\r\n <i [class]=\"headerIconLeft\"></i>\r\n </div>\r\n }\r\n <div class=\"header-text\" [style.font-size]=\"fontSize\">\r\n {{ col.header }}\r\n </div>\r\n @if (headerIconRight) {\r\n <div class=\"icon-right\">\r\n <i [class]=\"headerIconRight\"></i>\r\n </div>\r\n }\r\n </div>\r\n <p class=\"divider\">|</p>\r\n </div>\r\n </th>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, TemplateRef } from '@angular/core';\r\nimport { ColumnConfig } from '../table-header/table-header.component';\r\n\r\n@Component({\r\n selector: '[app-table-body]', // ✅ Attribute selector\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-body.component.html',\r\n styleUrl: './table-body.component.scss',\r\n})\r\nexport class TableBodyComponent {\r\n @Input() rows: any[] = [];\r\n @Input() columns: ColumnConfig[] = [];\r\n @Input() columnTemplates: { [key: string]: TemplateRef<any> } = {};\r\n @Input() fontSize: string = 'var(--font-sm)';\r\n}\r\n","@for (row of rows; track $index) {\r\n <tr>\r\n @for (col of columns; track col.key) {\r\n <td [style.width]=\"col.width\" [style.font-size]=\"fontSize\">\r\n @if (columnTemplates[col.key]) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n columnTemplates[col.key];\r\n context: { $implicit: row[col.key], row: row }\r\n \"\r\n ></ng-container>\r\n } @else {\r\n {{ row[col.key] }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, TemplateRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-approval-list-item',\r\n templateUrl: './approval-list-item.component.html',\r\n styleUrls: ['./approval-list-item.component.scss'],\r\n imports: [CommonModule],\r\n standalone: true\r\n})\r\nexport class ApprovalListItemComponent {\r\n @Input() name!: string;\r\n @Input() date!: Date;\r\n @Input() rightTemplate?: TemplateRef<any>;\r\n @Input() rightContext: any = {};\r\n\r\n get parsedDate(): Date {\r\n return new Date(this.date);\r\n }\r\n}\r\n","<div class=\"approval-item\">\r\n <!-- LEFT -->\r\n <div class=\"approval-item-left\">\r\n <span class=\"approval-item-left-name\">{{ name }}</span>\r\n <span class=\"approval-item-left-date\">\r\n <span class=\"approval-item-left-date-title\">Ngày tạo đơn:</span>\r\n {{ date | date: 'dd/MM/yyyy' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"approval-item-right\">\r\n <ng-container *ngIf=\"rightTemplate; else defaultRight\">\r\n <ng-container *ngTemplateOutlet=\"rightTemplate; context: rightContext\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #defaultRight>\r\n <span class=\"text-gray-400\">—</span>\r\n </ng-template>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ApprovalListItemInterface } from '../approval-list-item/approval-list-item.model';\r\nimport { ApprovalListItemComponent } from '../approval-list-item/approval-list-item.component';\r\n\r\n@Component({\r\n selector: 'app-approval-list',\r\n standalone: true,\r\n imports: [CommonModule, ApprovalListItemComponent],\r\n templateUrl: './approval-list.component.html',\r\n styleUrls: ['./approval-list.component.scss'],\r\n})\r\nexport class ApprovalListComponent {\r\n @Input() rows: ApprovalListItemInterface[] = [];\r\n\r\n @Input() headerContentRight!: string;\r\n @Input() headerContentLeft!: string;\r\n @Input() width!: string;\r\n}\r\n","<div class=\"approval-list\" [style.width]=\"width\">\r\n <div class=\"approval-list-header\">\r\n <span class=\"approval-list-header-left\">{{ headerContentLeft }}</span>\r\n <div>\r\n <p>{{ headerContentRight }}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"approval-list-content\" [style.width]=\"width\">\r\n <app-approval-list-item\r\n *ngFor=\"let row of rows\"\r\n [name]=\"row.name\"\r\n [date]=\"row.date\"\r\n [rightTemplate]=\"row.rightTemplate\"\r\n [rightContext]=\"row.rightContext\"\r\n >\r\n </app-approval-list-item>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ButtonContainerComponent } from \"../../button/button-container/button-container.component\";\r\n\r\n@Component({\r\n selector: 'app-pop-up-confirm',\r\n standalone: true,\r\n imports: [CommonModule, ButtonContainerComponent],\r\n templateUrl: './pop-up-confirm.component.html',\r\n styleUrls: ['./pop-up-confirm.component.scss'],\r\n})\r\nexport class PopUpConfirmComponent {\r\n\r\n @Input() imgUrl: string = '';\r\n @Input() title: string = '';\r\n @Input() content: string = '';\r\n @Input() colorButton: string = 'var(--brand-600)';\r\n\r\n @Output() confirmClick = new EventEmitter<void>();\r\n @Output() cancelClick = new EventEmitter<void>();\r\n\r\n onConfirm(): void {\r\n this.confirmClick.emit();\r\n }\r\n\r\n onCancel(): void {\r\n this.cancelClick.emit();\r\n }\r\n}","<div class=\"pop-up-confirm-overlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"popup-title\">\r\n <div class=\"pop-up-confirm\">\r\n <div class=\"pop-up-confirm-content\">\r\n <img *ngIf=\"imgUrl\" [src]=\"imgUrl\" alt=\"\">\r\n <div class=\"pop-up-confirm-text\">\r\n <p class=\"pop-up-title\" id=\"popup-title\">{{title}}</p>\r\n <p class=\"pop-up-content\">{{content}}</p>\r\n </div>\r\n </div>\r\n <div class=\"pop-up-confirm-actions\">\r\n <app-button-container size=\"md\" content=\"Quay Lại\" backgroundColor=\"var(--neutral-100)\" color=\"var(--neutral-800)\" (buttonClick)=\"onCancel()\"></app-button-container>\r\n <app-button-container size=\"md\" content=\"Đồng Ý\" [backgroundColor]=\"colorButton\" color=\"#fff\" (buttonClick)=\"onConfirm()\"></app-button-container>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-modal',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './modal.component.html',\n styleUrl: './modal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent {\n @Input() title: string = '';\n @Input() width: string = '800px';\n @Input() minHeight: string = '300px';\n @Input() isOpen: boolean = false;\n @Input() theme: 'default' | 'white' = 'default';\n\n @Output() close = new EventEmitter<void>();\n\n onOverlayClick(event: Event) {\n if (event.target === event.currentTarget) {\n this.close.emit();\n }\n }\n\n onCloseClick() {\n this.close.emit();\n }\n}\n","<div class=\"modal-overlay\" *ngIf=\"isOpen\" (click)=\"onOverlayClick($event)\">\n <div\n class=\"modal-container\"\n [class.theme-white]=\"theme === 'white'\"\n [style.width]=\"width\"\n [style.min-height]=\"minHeight\"\n >\n <div class=\"modal-header\">\n <span class=\"modal-title\">{{ title }}</span>\n <button class=\"modal-close-btn\" (click)=\"onCloseClick()\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n <div class=\"modal-body\">\n <ng-content select=\"[modal-body]\"></ng-content>\n </div>\n <div class=\"modal-footer\">\n <ng-content select=\"[modal-footer]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ViewChild,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface AvatarUploadedFile {\n id: string;\n file: File;\n fileName: string;\n previewUrl: string | null;\n}\n\n@Component({\n selector: 'app-avatar-upload-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar-upload-button.component.html',\n styleUrl: './avatar-upload-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AvatarUploadButtonComponent {\n @Input() label: string = '';\n @Input() required: boolean = false;\n @Input() showTooltip: boolean = false;\n @Input() tooltipText: string = '';\n @Input() buttonText: string = 'Tải file lên';\n @Input() acceptFormats: string = '.png,.jpeg,.jpg';\n @Input() helperText: string = 'Định dạng .png, .jpeg, .jpg';\n\n @Output() fileChange = new EventEmitter<AvatarUploadedFile | null>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n uploadedFile: AvatarUploadedFile | null = null;\n\n onButtonClick() {\n this.fileInput.nativeElement.click();\n }\n\n onFileChange(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const file = input.files[0];\n this.uploadedFile = this.createAvatarUploadedFile(file);\n this.fileChange.emit(this.uploadedFile);\n }\n input.value = '';\n }\n\n onRemove() {\n if (this.uploadedFile?.previewUrl) {\n URL.revokeObjectURL(this.uploadedFile.previewUrl);\n }\n this.uploadedFile = null;\n this.fileChange.emit(null);\n }\n\n private createAvatarUploadedFile(file: File): AvatarUploadedFile {\n const isImage = file.type.startsWith('image/');\n return {\n id: this.generateId(),\n file: file,\n fileName: file.name,\n previewUrl: isImage ? URL.createObjectURL(file) : null,\n };\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2, 9);\n }\n}\n","<div class=\"avatar-upload-wrapper\">\n <div class=\"label-row\" *ngIf=\"label\">\n <span class=\"label-text\">{{ label }}</span>\n <span class=\"required-mark\" *ngIf=\"required\">*</span>\n <button type=\"button\" class=\"tooltip-icon\" *ngIf=\"showTooltip\" [title]=\"tooltipText\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M8 7V11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n <circle cx=\"8\" cy=\"5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n </button>\n </div>\n\n <button type=\"button\" class=\"upload-button\" (click)=\"onButtonClick()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10 4V13M10 4L6 8M10 4L14 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M3 13V15C3 15.5523 3.44772 16 4 16H16C16.5523 16 17 15.5523 17 15V13\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span>{{ buttonText }}</span>\n </button>\n\n <input\n #fileInput\n type=\"file\"\n class=\"file-input\"\n [accept]=\"acceptFormats\"\n (change)=\"onFileChange($event)\"\n />\n\n <span class=\"helper-text\" *ngIf=\"helperText && !uploadedFile\">{{ helperText }}</span>\n\n <!-- Uploaded File Preview -->\n <div class=\"file-preview\" *ngIf=\"uploadedFile\">\n <img\n *ngIf=\"uploadedFile.previewUrl\"\n [src]=\"uploadedFile.previewUrl\"\n [alt]=\"uploadedFile.fileName\"\n class=\"preview-image\"\n />\n <span class=\"file-name\">{{ uploadedFile.fileName }}</span>\n <button type=\"button\" class=\"remove-btn\" (click)=\"onRemove()\" title=\"Xóa\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 4L12 12M12 4L4 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ViewChild,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface UploadedFile {\n id: string;\n file: File;\n fileName: string;\n fileSize: string;\n dateTime: string;\n fileType: string;\n}\n\n@Component({\n selector: 'app-file-upload-dropzone',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './file-upload-dropzone.component.html',\n styleUrl: './file-upload-dropzone.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploadDropzoneComponent {\n @Input() label: string = 'Thêm file bài học';\n @Input() buttonText: string = 'Tải lên';\n @Input() maxSize: string = '10MB';\n @Input() acceptFormats: string = '.docx,.xlsx,.png,.jpg,.jpeg,.pdf';\n @Input() helperText: string = '';\n\n @Output() filesChange = new EventEmitter<UploadedFile[]>();\n @Output() fileDownload = new EventEmitter<UploadedFile>();\n @Output() fileDelete = new EventEmitter<UploadedFile>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n uploadedFiles: UploadedFile[] = [];\n isDragging = false;\n\n get displayHelperText(): string {\n if (this.helperText) return this.helperText;\n return `Dung lượng tối đa ${this.maxSize}(${this.acceptFormats.replace(/\\./g, '').split(',').join(', ')}...)`;\n }\n\n onButtonClick() {\n this.fileInput.nativeElement.click();\n }\n\n onFileChange(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.addFiles(Array.from(input.files));\n }\n input.value = '';\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = true;\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.addFiles(Array.from(files));\n }\n }\n\n onDownload(file: UploadedFile) {\n this.fileDownload.emit(file);\n }\n\n onDelete(file: UploadedFile) {\n this.uploadedFiles = this.uploadedFiles.filter((f) => f.id !== file.id);\n this.fileDelete.emit(file);\n this.filesChange.emit(this.uploadedFiles);\n }\n\n getIconType(file: UploadedFile): string {\n const ext = file.fileName.split('.').pop()?.toLowerCase() || '';\n if (ext === 'pdf') return 'pdf';\n if (['doc', 'docx'].includes(ext)) return 'doc';\n if (['xls', 'xlsx'].includes(ext)) return 'xls';\n if (['png', 'jpg', 'jpeg', 'gif', 'webp'].includes(ext)) return 'image';\n return 'file';\n }\n\n private addFiles(files: File[]) {\n const newFiles = files.map((file) => this.createUploadedFile(file));\n this.uploadedFiles = [...this.uploadedFiles, ...newFiles];\n this.filesChange.emit(this.uploadedFiles);\n }\n\n private createUploadedFile(file: File): UploadedFile {\n return {\n id: this.generateId(),\n file: file,\n fileName: file.name,\n fileSize: this.formatFileSize(file.size),\n dateTime: this.formatDateTime(new Date()),\n fileType: file.name.split('.').pop()?.toLowerCase() || '',\n };\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2, 9);\n }\n\n private formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + sizes[i];\n }\n\n private formatDateTime(date: Date): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n const hours = date.getHours().toString().padStart(2, '0');\n const minutes = date.getMinutes().toString().padStart(2, '0');\n return `${day}/${month}/${year} ${hours}:${minutes}`;\n }\n}\n","<div class=\"file-upload-dropzone\">\n <label class=\"dropzone-label\">{{ label }}</label>\n\n <div\n class=\"dropzone-area\"\n [class.dragging]=\"isDragging\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"onButtonClick()\"\n >\n <div class=\"dropzone-content\">\n <svg\n class=\"upload-icon\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 16V8M12 8L9 11M12 8L15 11\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M9 22H15C18.866 22 22 18.866 22 15C22 12.0667 20.2333 9.56667 17.6667 8.46667C17.8778 7.98889 18 7.46667 18 6.93333C18 4.41111 15.5778 2.44444 12.8333 3.04444C11.0111 1.15556 8.11111 0.911111 6 2.48889C3.51111 4.35556 3.22222 8.02222 5.11111 10.2444C3.24444 11.2222 2 13.1778 2 15.4444C2 18.9778 5.02222 22 9 22Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n\n <button type=\"button\" class=\"upload-btn\" (click)=\"$event.stopPropagation(); onButtonClick()\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 16V8M12 8L9 11M12 8L15 11\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n {{ buttonText }}\n </button>\n\n <span class=\"helper-text\">{{ displayHelperText }}</span>\n </div>\n </div>\n\n <input\n #fileInput\n type=\"file\"\n [accept]=\"acceptFormats\"\n (change)=\"onFileChange($event)\"\n multiple\n hidden\n />\n\n <!-- Attachment List -->\n <div class=\"attachment-list\" *ngIf=\"uploadedFiles.length > 0\">\n <div class=\"attachment-item\" *ngFor=\"let file of uploadedFiles\">\n <div class=\"file-icon\" [ngClass]=\"getIconType(file)\">\n <ng-container [ngSwitch]=\"getIconType(file)\">\n <svg\n *ngSwitchCase=\"'pdf'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#FEE2E2\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#EF4444\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#EF4444\" font-size=\"6\" font-weight=\"600\">\n PDF\n </text>\n </svg>\n <svg\n *ngSwitchCase=\"'doc'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#DBEAFE\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#3B82F6\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#3B82F6\" font-size=\"6\" font-weight=\"600\">\n DOC\n </text>\n </svg>\n <svg\n *ngSwitchCase=\"'xls'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#D1FAE5\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#10B981\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#10B981\" font-size=\"6\" font-weight=\"600\">\n XLS\n </text>\n </svg>\n <svg\n *ngSwitchCase=\"'image'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#FEF3C7\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#F59E0B\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#F59E0B\" font-size=\"6\" font-weight=\"600\">\n IMG\n </text>\n </svg>\n <svg\n *ngSwitchDefault\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#F3F4F6\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#9CA3AF\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#9CA3AF\" font-size=\"6\" font-weight=\"600\">\n FILE\n </text>\n </svg>\n </ng-container>\n </div>\n\n <div class=\"file-info\">\n <span class=\"file-name\">{{ file.fileName }}</span>\n <div class=\"file-meta\">\n <span class=\"file-size\">{{ file.fileSize }}</span>\n <span class=\"separator\">•</span>\n <span class=\"file-date\">{{ file.dateTime }}</span>\n </div>\n </div>\n\n <div class=\"file-actions\">\n <button class=\"action-btn download-btn\" (click)=\"onDownload(file)\" title=\"Tải xuống\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 3V13M10 13L6 9M10 13L14 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M3 15V16C3 16.5523 3.44772 17 4 17H16C16.5523 17 17 16.5523 17 16V15\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <button class=\"action-btn delete-btn\" (click)=\"onDelete(file)\" title=\"Xóa\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 5H16M7 5V4C7 3.44772 7.44772 3 8 3H12C12.5523 3 13 3.44772 13 4V5M8 9V14M12 9V14M5 5L6 16C6 16.5523 6.44772 17 7 17H13C13.5523 17 14 16.5523 14 16L15 5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\r\nimport { NzTimePickerModule } from 'ng-zorro-antd/time-picker';\r\n\r\nexport type DatePickerMode = 'date' | 'week' | 'month' | 'quarter' | 'year';\r\nexport type RangePickerMode = 'date' | 'week' | 'month' | 'year';\r\nexport type DatePickerValue = Date | [Date, Date] | null;\r\n\r\n@Component({\r\n selector: 'app-date-picker',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, NzDatePickerModule, NzTimePickerModule],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DatePickerComponent implements OnInit, ControlValueAccessor {\r\n // ============ Input Properties ============\r\n\r\n /** Picker mode: date, week, month, quarter, year */\r\n @Input() mode: DatePickerMode = 'date';\r\n\r\n /** Enable time selection */\r\n @Input() showTime = false;\r\n\r\n /** Enable range picker mode */\r\n @Input() isRange = false;\r\n\r\n /** Range picker mode (only used when isRange = true) */\r\n @Input() rangeMode: RangePickerMode = 'date';\r\n\r\n /** Placeholder text */\r\n @Input() placeholder = 'Chọn ngày';\r\n\r\n /** Range placeholder texts */\r\n @Input() rangePlaceholder: [string, string] = [\r\n 'Ngày bắt đầu',\r\n 'Ngày kết thúc',\r\n ];\r\n\r\n /** Date format string */\r\n @Input() format = 'dd/MM/yyyy';\r\n\r\n /** Disable the picker */\r\n @Input() disabled = false;\r\n\r\n /** Allow clearing selection */\r\n @Input() allowClear = true;\r\n\r\n /** Size of the picker: 'large' | 'default' | 'small' */\r\n @Input() size: 'large' | 'default' | 'small' = 'default';\r\n\r\n /** Show border */\r\n @Input() bordered = true;\r\n\r\n /** Inline mode (no popup) */\r\n @Input() inline = false;\r\n\r\n /** Custom CSS class for popup */\r\n @Input() popupClassName = '';\r\n\r\n /** Dropdown position */\r\n @Input() dropdownPosition:\r\n | 'bottomLeft'\r\n | 'bottomRight'\r\n | 'topLeft'\r\n | 'topRight' = 'bottomLeft';\r\n\r\n /** Disable specific dates */\r\n @Input() disabledDate: (current: Date) => boolean = () => false;\r\n\r\n // ============ Output Events ============\r\n\r\n /** Emits when date changes */\r\n @Output() dateChange = new EventEmitter<Date | null>();\r\n\r\n /** Emits when date range changes */\r\n @Output() rangeChange = new EventEmitter<[Date, Date] | null>();\r\n\r\n /** Emits when picker opens/closes */\r\n @Output() openChange = new EventEmitter<boolean>();\r\n\r\n /** Emits when OK button clicked (for showTime mode) */\r\n @Output() ok = new EventEmitter<DatePickerValue>();\r\n\r\n /** Emits when calendar mode changes */\r\n @Output() panelChange = new EventEmitter<any>();\r\n\r\n // ============ Internal Properties ============\r\n\r\n /** Single date value */\r\n selectedDate: Date | null = null;\r\n\r\n /** Range date value */\r\n selectedRange: [Date, Date] | null = null;\r\n\r\n /** Time format when showTime is enabled */\r\n get timeFormat(): string {\r\n return this.showTime ? 'HH:mm:ss' : '';\r\n }\r\n\r\n /** Full format including time */\r\n get fullFormat(): string {\r\n return this.showTime ? `${this.format} HH:mm:ss` : this.format;\r\n }\r\n\r\n // ============ ControlValueAccessor Implementation ============\r\n\r\n private onChange: (value: DatePickerValue) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n writeValue(value: DatePickerValue): void {\r\n if (this.isRange) {\r\n this.selectedRange = value as [Date, Date] | null;\r\n } else {\r\n this.selectedDate = value as Date | null;\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: DatePickerValue) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // ============ Lifecycle Hooks ============\r\n\r\n ngOnInit(): void {\r\n this.initializeFormat();\r\n }\r\n\r\n // ============ Methods ============\r\n\r\n private initializeFormat(): void {\r\n // Set default format based on mode if not explicitly set\r\n if (this.format === 'dd/MM/yyyy') {\r\n switch (this.mode) {\r\n case 'week':\r\n this.format = 'yyyy-ww';\r\n break;\r\n case 'month':\r\n this.format = 'MM/yyyy';\r\n break;\r\n case 'quarter':\r\n this.format = 'yyyy-[Q]Q';\r\n break;\r\n case 'year':\r\n this.format = 'yyyy';\r\n break;\r\n default:\r\n this.format = 'dd/MM/yyyy';\r\n }\r\n }\r\n }\r\n\r\n onDateChange(date: Date | null): void {\r\n this.selectedDate = date;\r\n this.dateChange.emit(date);\r\n this.onChange(date);\r\n this.onTouched();\r\n }\r\n\r\n onRangeChange(range: [Date, Date] | null): void {\r\n this.selectedRange = range;\r\n this.rangeChange.emit(range);\r\n this.onChange(range);\r\n this.onTouched();\r\n }\r\n\r\n onOpenChange(open: boolean): void {\r\n this.openChange.emit(open);\r\n if (!open) {\r\n this.onTouched();\r\n }\r\n }\r\n\r\n onOk(result: Date | Date[] | null): void {\r\n this.ok.emit(result as Date | [Date, Date] | null);\r\n }\r\n\r\n onPanelChange(event: any): void {\r\n this.panelChange.emit(event);\r\n }\r\n\r\n /** Clear the selected value */\r\n clear(): void {\r\n if (this.isRange) {\r\n this.selectedRange = null;\r\n this.rangeChange.emit(null);\r\n this.onChange(null);\r\n } else {\r\n this.selectedDate = null;\r\n this.dateChange.emit(null);\r\n this.onChange(null);\r\n }\r\n }\r\n\r\n /** Set today as selected date */\r\n setToday(): void {\r\n const today = new Date();\r\n if (this.isRange) {\r\n this.selectedRange = [today, today];\r\n this.rangeChange.emit(this.selectedRange);\r\n this.onChange(this.selectedRange);\r\n } else {\r\n this.selectedDate = today;\r\n this.dateChange.emit(today);\r\n this.onChange(today);\r\n }\r\n }\r\n}\r\n","<!-- Single Date Picker -->\r\n@if (!isRange && !inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"placeholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n inputWidth=\"40px\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Inline Single Date Picker -->\r\n@if (!isRange && inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--inline\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Range Date Picker -->\r\n@if (isRange && !inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"rangePlaceholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range\"\r\n ></nz-range-picker>\r\n}\r\n\r\n<!-- Inline Range Date Picker -->\r\n@if (isRange && inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range date-picker--inline\"\r\n ></nz-range-picker>\r\n}\r\n","/*\r\n * Public API Surface of intern-hub-layout\r\n */\r\n\r\n// Layout components\r\nexport * from './libs/layouts/header/header.component';\r\nexport * from './libs/layouts/sidebar/sidebar.component';\r\n\r\n// Shared components - Icons\r\nexport * from './libs/shared/components/icon/icon.component';\r\nexport * from './libs/shared/components/functional-label/functional-label.component';\r\n\r\n// Shared components - Buttons\r\nexport * from './libs/shared/components/button/button-container/button-container.component';\r\nexport * from './libs/shared/components/button/button-container/button-container.model';\r\nexport * from './libs/shared/components/button/label-button/label-button.component';\r\n\r\n// Shared components - Inputs\r\nexport * from './libs/shared/components/input/input-text/input-text.component';\r\nexport * from './libs/shared/components/input/input-stepper/input-stepper.component';\r\nexport * from './libs/shared/components/input/input-calendar/input-calendar.component';\r\n\r\n// Shared components - Table\r\nexport * from './libs/shared/components/table/table-header/table-header.component';\r\nexport * from './libs/shared/components/table/table-body/table-body.component';\r\n\r\n// Shared components - Approval\r\nexport * from './libs/shared/components/approval/approval-list/approval-list.component';\r\nexport * from './libs/shared/components/approval/approval-list-item/approval-list-item.component';\r\nexport * from './libs/shared/components/approval/approval-list-item/approval-list-item.model';\r\n\r\n// Shared components - Pop-ups\r\nexport * from './libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component';\r\n\r\n// Shared components - Modal\r\nexport * from './libs/shared/components/modal/modal.component';\r\n\r\n// Shared components - Upload Button\r\nexport * from './libs/shared/components/avatar-upload-button/avatar-upload-button.component';\r\n\r\n// Shared components - File Upload Dropzone\r\nexport * from './libs/shared/components/file-upload-dropzone/file-upload-dropzone.component';\r\n\r\n// Shared components - Date Picker\r\nexport * from './libs/shared/components/date-picker/date-picker.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"goat-bravos-intern-hub-layout.mjs","sources":["../../../src/libs/shared/components/icon/icon.component.ts","../../../src/libs/shared/components/icon/icon.component.html","../../../src/libs/layouts/header/header.component.ts","../../../src/libs/layouts/header/header.component.html","../../../src/libs/shared/components/functional-label/functional-label.component.ts","../../../src/libs/shared/components/functional-label/functional-label.component.html","../../../src/libs/shared/components/button/button-container/button-container.model.ts","../../../src/libs/shared/components/button/button-container/button-container.component.ts","../../../src/libs/shared/components/button/button-container/button-container.component.html","../../../src/libs/layouts/sidebar/sidebar.component.ts","../../../src/libs/layouts/sidebar/sidebar.component.html","../../../src/libs/shared/components/button/label-button/label-button.component.ts","../../../src/libs/shared/components/button/label-button/label-button.component.html","../../../src/libs/shared/components/input/input-text/input-text.component.ts","../../../src/libs/shared/components/input/input-text/input-text.component.html","../../../src/libs/shared/components/input/input-stepper/input-stepper.component.ts","../../../src/libs/shared/components/input/input-stepper/input-stepper.component.html","../../../src/libs/shared/components/input/input-calendar/input-calendar.component.ts","../../../src/libs/shared/components/input/input-calendar/input-calendar.component.html","../../../src/libs/shared/components/table/table-header/table-header.component.ts","../../../src/libs/shared/components/table/table-header/table-header.component.html","../../../src/libs/shared/components/table/table-body/table-body.component.ts","../../../src/libs/shared/components/table/table-body/table-body.component.html","../../../src/libs/shared/components/approval/approval-list-item/approval-list-item.component.ts","../../../src/libs/shared/components/approval/approval-list-item/approval-list-item.component.html","../../../src/libs/shared/components/approval/approval-list/approval-list.component.ts","../../../src/libs/shared/components/approval/approval-list/approval-list.component.html","../../../src/libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component.ts","../../../src/libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component.html","../../../src/libs/shared/components/modal/modal.component.ts","../../../src/libs/shared/components/modal/modal.component.html","../../../src/libs/shared/components/avatar-upload-button/avatar-upload-button.component.ts","../../../src/libs/shared/components/avatar-upload-button/avatar-upload-button.component.html","../../../src/libs/shared/components/file-upload-dropzone/file-upload-dropzone.component.ts","../../../src/libs/shared/components/file-upload-dropzone/file-upload-dropzone.component.html","../../../src/libs/shared/components/date-picker/date-picker.component.ts","../../../src/libs/shared/components/date-picker/date-picker.component.html","../../../src/public-api.ts","../../../src/goat-bravos-intern-hub-layout.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nexport interface IconData {\r\n icon: string;\r\n colorIcon?: string;\r\n backgroundColorHover?: string;\r\n routerLink?: string;\r\n width?: string;\r\n height?: string;\r\n backgroundColor?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-icon',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss'],\r\n})\r\nexport class IconComponent {\r\n @Input() iconData?: IconData;\r\n @Input() icon?: string;\r\n @Input() colorIcon?: string;\r\n @Input() routerLink?: string;\r\n @Input() width?: string = '20px';\r\n @Input() height?: string = '20px';\r\n @Input() colorIconHover?: string;\r\n @Input() backgroundColorHover?: string;\r\n\r\n @Output() clicked = new EventEmitter<Event>();\r\n\r\n get iconClass(): string {\r\n const iconName = this.iconData?.icon || this.icon || '';\r\n return iconName.includes('dsi') ? iconName : `dsi ${iconName}`;\r\n }\r\n\r\n get iconColor(): string | undefined {\r\n return this.iconData?.colorIcon || this.colorIcon;\r\n }\r\n\r\n get iconWidth(): string {\r\n return this.iconData?.width || this.width || '20px';\r\n }\r\n\r\n get iconHeight(): string {\r\n return this.iconData?.height || this.height || '20px';\r\n }\r\n\r\n get iconRouterLink(): string | undefined {\r\n return this.iconData?.routerLink || this.routerLink;\r\n }\r\n\r\n get backgroundColor(): string | undefined {\r\n return this.iconData?.backgroundColor;\r\n }\r\n\r\n handleClick(event: Event): void {\r\n if (!this.iconRouterLink) {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n}\r\n","<i\r\n class=\"icon\"\r\n [ngClass]=\"iconClass\"\r\n [style.color]=\"iconColor\"\r\n [style.width]=\"iconWidth\"\r\n [style.height]=\"iconHeight\"\r\n [style.backgroundColor]=\"backgroundColor\"\r\n [routerLink]=\"iconRouterLink\"\r\n [attr.tabindex]=\"iconRouterLink ? null : 0\"\r\n [attr.role]=\"iconRouterLink ? null : 'button'\"\r\n (click)=\"handleClick($event)\"\r\n (keydown.enter)=\"handleClick($event)\"\r\n (keydown.space)=\"handleClick($event)\"\r\n></i>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n IconComponent,\r\n IconData,\r\n} from '../../shared/components/icon/icon.component';\r\n\r\nexport interface HeaderAction {\r\n icon: IconData | string;\r\n content: string;\r\n method?: () => void;\r\n badge?: string;\r\n colorIcon?: string;\r\n width?: string;\r\n height?: string;\r\n}\r\n\r\nexport interface HeaderData {\r\n headerItems: HeaderAction[];\r\n userName: string;\r\n userIcon?: IconData | string;\r\n userIconColor?: string;\r\n dropdownIcon?: IconData | string;\r\n dropdownIconColor?: string;\r\n logo?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-header-component',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent],\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n})\r\nexport class HeaderComponent {\r\n @Input() data: HeaderData = {\r\n headerItems: [],\r\n userName: 'Guest',\r\n userIcon: 'dsi-user-01-line',\r\n dropdownIcon: 'dsi-arrow-down-solid',\r\n logo: 'assets/FPT-IS-Logo.png',\r\n };\r\n\r\n @Input() paddingHeader: string = '12px 20px 12px 16px';\r\n\r\n handleActionClick(item: HeaderAction, event: Event): void {\r\n if (item.method) {\r\n event.preventDefault();\r\n item.method();\r\n }\r\n }\r\n\r\n getIconData(\r\n icon: IconData | string | undefined,\r\n colorIcon?: string,\r\n width?: string,\r\n height?: string,\r\n ): IconData | undefined {\r\n if (!icon) return undefined;\r\n\r\n if (typeof icon === 'string') {\r\n return {\r\n icon,\r\n colorIcon,\r\n width,\r\n height,\r\n };\r\n }\r\n\r\n return icon;\r\n }\r\n}\r\n","<header class=\"app-header\" [style.padding]=\"paddingHeader\">\r\n <div class=\"header-left\">\r\n <img\r\n class=\"logo\"\r\n [src]=\"data.logo || 'assets/FPT-IS-Logo.png'\"\r\n alt=\"Logo\"\r\n />\r\n </div>\r\n\r\n <div class=\"header-right\">\r\n @for (item of data.headerItems; track $index) {\r\n <button\r\n class=\"header-btn\"\r\n [attr.aria-label]=\"item.content\"\r\n (click)=\"handleActionClick(item, $event)\"\r\n >\r\n <app-icon\r\n [iconData]=\"\r\n getIconData(\r\n item.icon,\r\n item.colorIcon,\r\n item.width || '16px',\r\n item.height || '16px'\r\n )\r\n \"\r\n ></app-icon>\r\n @if (item.badge) {\r\n <span class=\"badge\">{{ item.badge }}</span>\r\n }\r\n </button>\r\n }\r\n\r\n <div class=\"header-user\">\r\n <button class=\"user-btn\">\r\n @if (data.userIcon) {\r\n <app-icon\r\n [iconData]=\"\r\n getIconData(data.userIcon, data.userIconColor, '16px', '16px')\r\n \"\r\n ></app-icon>\r\n }\r\n <span class=\"user-name\">{{ data.userName }}</span>\r\n @if (data.dropdownIcon) {\r\n <app-icon\r\n [iconData]=\"\r\n getIconData(\r\n data.dropdownIcon,\r\n data.dropdownIconColor,\r\n '16px',\r\n '16px'\r\n )\r\n \"\r\n ></app-icon>\r\n }\r\n </button>\r\n </div>\r\n </div>\r\n</header>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { IconComponent, IconData } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'app-functional-label',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, IconComponent],\r\n templateUrl: './functional-label.component.html',\r\n styleUrls: ['./functional-label.component.scss'],\r\n})\r\nexport class FunctionalLabelComponent {\r\n @Input() iconLeft?: IconData | string;\r\n @Input() iconRight?: IconData | string;\r\n @Input() rightIconTitle?: string = 'Action';\r\n\r\n @Input() colorIconLeft?: string;\r\n @Input() colorIconRight?: string;\r\n @Input() widthIconLeft?: string = '20px';\r\n @Input() heightIconLeft?: string = '20px';\r\n @Input() widthIconRight?: string = '20px';\r\n @Input() heightIconRight?: string = '20px';\r\n\r\n @Input() colorIconLeftHover?: string;\r\n @Input() colorIconRightHover?: string;\r\n @Input() colorContentHover?: string;\r\n @Input() backgroundColorHover?: string;\r\n @Input() borderRadiusHover?: string;\r\n\r\n @Input() isActive: boolean = false;\r\n @Input() activeBackgroundColor?: string;\r\n @Input() activeColorContent?: string;\r\n @Input() activeColorIconLeft?: string;\r\n @Input() activeColorIconRight?: string;\r\n @Input() expandedHoverBackgroundColor?: string;\r\n\r\n @Input() content?: string;\r\n @Input() fontSizeContent?: string = '14px';\r\n @Input() colorContent?: string;\r\n @Input() widthContent?: string = '100%';\r\n @Input() heightContent?: string = '100%';\r\n\r\n @Input() backgroundColor?: string;\r\n @Input() borderRadius?: string;\r\n @Input() width?: string;\r\n @Input() height?: string;\r\n\r\n @Input() disabled: boolean = false;\r\n @Input() disabledColorIconLeft?: string;\r\n @Input() disabledColorContent?: string;\r\n @Input() disabledBackgroundColor?: string;\r\n\r\n @Input() routerLink?: string;\r\n @Input() isSidebarExpanded: boolean = false;\r\n @Output() clicked = new EventEmitter<Event>();\r\n @Output() rightIconClicked = new EventEmitter<Event>();\r\n\r\n get currentBackgroundColor(): string | undefined {\r\n if (this.disabled) {\r\n return this.disabledBackgroundColor || 'transparent';\r\n }\r\n if (this.isActive && this.isSidebarExpanded) {\r\n return this.activeBackgroundColor || 'var(--brand-300)';\r\n }\r\n return this.backgroundColor;\r\n }\r\n\r\n get currentBorderRadius(): string | undefined {\r\n return this.borderRadius;\r\n }\r\n\r\n get currentColorContent(): string {\r\n if (this.disabled) {\r\n return this.disabledColorContent || 'var(--neutral-color-300)';\r\n }\r\n if (this.isActive && this.isSidebarExpanded) {\r\n return this.activeColorContent || 'var(--brand-500)';\r\n }\r\n if (this.colorContent) return this.colorContent;\r\n return this.isSidebarExpanded ? 'var(--neutral-color-500)' : '#ffffff';\r\n }\r\n\r\n get hasIconLeft(): boolean {\r\n return !!this.iconLeft;\r\n }\r\n\r\n get hasIconRight(): boolean {\r\n return !!this.iconRight;\r\n }\r\n\r\n get iconLeftData(): IconData | undefined {\r\n if (!this.iconLeft) return undefined;\r\n\r\n let color = this.colorIconLeft;\r\n if (this.disabled) {\r\n color = this.disabledColorIconLeft || 'var(--neutral-color-300)';\r\n } else {\r\n if (!color) {\r\n color = this.isSidebarExpanded ? 'var(--brand-600)' : '#ffffff';\r\n }\r\n\r\n if (this.isActive && this.isSidebarExpanded) {\r\n color = this.activeColorIconLeft || 'var(--brand-500)';\r\n } else if (this.isSidebarExpanded && this.colorIconLeftHover) {\r\n // NOTE: hover is handled mostly by css but we have this fallback maybe\r\n color = this.colorIconLeftHover;\r\n }\r\n }\r\n\r\n if (typeof this.iconLeft === 'string') {\r\n return {\r\n icon: this.iconLeft,\r\n colorIcon: color,\r\n width: this.widthIconLeft,\r\n height: this.heightIconLeft,\r\n };\r\n }\r\n return {\r\n ...this.iconLeft,\r\n colorIcon: color || this.iconLeft.colorIcon,\r\n };\r\n }\r\n\r\n get iconRightData(): IconData | undefined {\r\n if (!this.iconRight) return undefined;\r\n\r\n let color = this.colorIconRight;\r\n if (!color) {\r\n color = this.isSidebarExpanded ? 'var(--neutral-color-500)' : '#ffffff';\r\n }\r\n\r\n if (this.isActive && this.isSidebarExpanded) {\r\n color = this.activeColorIconRight || 'var(--brand-500)';\r\n } else if (this.isSidebarExpanded && this.colorIconRightHover) {\r\n color = this.colorIconRightHover;\r\n }\r\n\r\n if (typeof this.iconRight === 'string') {\r\n return {\r\n icon: this.iconRight,\r\n colorIcon: color,\r\n width: this.widthIconRight,\r\n height: this.heightIconRight,\r\n };\r\n }\r\n return {\r\n ...this.iconRight,\r\n colorIcon: color || this.iconRight.colorIcon,\r\n };\r\n }\r\n\r\n handleClick(event: Event): void {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n if (!this.routerLink) {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n handleRightIconClick(event: Event): void {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n event.stopPropagation();\r\n this.rightIconClicked.emit(event);\r\n }\r\n}\r\n","<div\r\n class=\"functional-label\"\r\n [class.is-expanded]=\"isSidebarExpanded\"\r\n [class.disabled]=\"disabled\"\r\n (click)=\"handleClick($event)\"\r\n (keydown.enter)=\"handleClick($event)\"\r\n (keydown.space)=\"handleClick($event)\"\r\n [attr.tabindex]=\"disabled ? null : (routerLink ? null : 0)\"\r\n [attr.role]=\"routerLink ? null : 'button'\"\r\n [style.--bg-color]=\"currentBackgroundColor\"\r\n [style.--bg-hover-color]=\"backgroundColorHover || backgroundColor\"\r\n [style.border-radius]=\"currentBorderRadius\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.--content-hover-color]=\"colorContentHover\"\r\n>\r\n @if (hasIconLeft && iconLeftData) {\r\n <app-icon\r\n [iconData]=\"iconLeftData\"\r\n [width]=\"widthIconLeft\"\r\n [height]=\"heightIconLeft\"\r\n ></app-icon>\r\n }\r\n\r\n <a\r\n [routerLink]=\"disabled ? null : routerLink\"\r\n [style.width]=\"widthContent\"\r\n [style.height]=\"heightContent\"\r\n [style.font-size]=\"fontSizeContent\"\r\n [style.--content-color]=\"currentColorContent\"\r\n >\r\n {{ content }}\r\n </a>\r\n\r\n @if (hasIconRight && iconRightData) {\r\n <app-icon\r\n [iconData]=\"iconRightData\"\r\n [width]=\"widthIconRight\"\r\n [height]=\"heightIconRight\"\r\n (click)=\"handleRightIconClick($event)\"\r\n (keydown.enter)=\"handleRightIconClick($event)\"\r\n (keydown.space)=\"handleRightIconClick($event)\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [title]=\"rightIconTitle\"\r\n [attr.aria-label]=\"rightIconTitle\"\r\n ></app-icon>\r\n }\r\n</div>\r\n","export interface ButtonContainerInterface {\r\n size: ButtonSize;\r\n leftIcon?: string;\r\n rightIcon?: string;\r\n content: string;\r\n event?: string;\r\n fontSize?: string;\r\n color?: string;\r\n backgroundColor?: string;\r\n borderColor?: string;\r\n}\r\n\r\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\r\n\r\nexport interface ButtonSizeConfig {\r\n minWidth: string;\r\n minHeight: string;\r\n fontSize: string;\r\n iconSize: string;\r\n contentWidth: string;\r\n contentHeight: string;\r\n}\r\n\r\nexport const BUTTON_SIZE_MAP: Record<ButtonSize, ButtonSizeConfig> = {\r\n xs: {\r\n minWidth: '47px',\r\n minHeight: '24px',\r\n fontSize: 'var(--font-xs)',\r\n iconSize: '14px',\r\n contentWidth: '32px',\r\n contentHeight: '16px',\r\n },\r\n sm: {\r\n minWidth: '96px',\r\n minHeight: '28px',\r\n fontSize: 'var(--font-sm)',\r\n iconSize: '16px',\r\n contentWidth: '44px',\r\n contentHeight: '20px',\r\n },\r\n md: {\r\n minWidth: '116px',\r\n minHeight: '36px',\r\n fontSize: 'var(--font-sm)',\r\n iconSize: '20px',\r\n contentWidth: '52px',\r\n contentHeight: '20px',\r\n },\r\n lg: {\r\n minWidth: '120px',\r\n minHeight: '44px',\r\n fontSize: 'var(--font-sm)',\r\n iconSize: '20px',\r\n contentWidth: '52px',\r\n contentHeight: '20px',\r\n },\r\n};\r\n\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonSize, BUTTON_SIZE_MAP } from './button-container.model';\r\nimport { IconComponent, IconData } from '../../icon/icon.component';\r\n\r\nexport interface ButtonContainerData {\r\n size?: ButtonSize | '';\r\n content?: string;\r\n fontSize?: string;\r\n leftIcon?: string;\r\n leftIconData?: IconData[];\r\n rightIcon?: string;\r\n rightIconData?: IconData[];\r\n color?: string;\r\n backgroundColor?: string;\r\n border?: string;\r\n borderRadius: '8px';\r\n width?: string;\r\n height: '36px';\r\n padding?: string;\r\n marginLeft?: string;\r\n marginRight?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-button-container',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent],\r\n templateUrl: './button-container.component.html',\r\n styleUrls: ['./button-container.component.scss'],\r\n})\r\nexport class ButtonContainerComponent {\r\n @Input() buttonData?: ButtonContainerData;\r\n\r\n @Input() size: ButtonSize | '' = 'md';\r\n @Input() content?: string;\r\n\r\n @Input() fontSize?: string;\r\n\r\n @Input() leftIcon?: string;\r\n @Input() leftIconData?: IconData[];\r\n\r\n @Input() rightIcon?: string;\r\n @Input() rightIconData?: IconData[];\r\n\r\n @Input() color?: string;\r\n @Input() backgroundColor?: string;\r\n @Input() border?: string;\r\n @Input() borderRadius = '8px';\r\n @Input() width?: string;\r\n @Input() height = '36px';\r\n @Input() padding?: string;\r\n @Input() marginLeft?: string;\r\n @Input() marginRight?: string;\r\n @Input() borderColor?: string;\r\n\r\n @Output() buttonClick = new EventEmitter<any>();\r\n\r\n get sizeStyle() {\r\n return this.size\r\n ? BUTTON_SIZE_MAP[this.size as ButtonSize]\r\n : {\r\n minWidth: 'auto',\r\n minHeight: 'auto',\r\n fontSize: 'inherit',\r\n iconSize: '20px',\r\n contentWidth: 'auto',\r\n contentHeight: 'auto',\r\n };\r\n }\r\n\r\n handleClick(): any {\r\n this.buttonClick.emit();\r\n }\r\n}\r\n","<button\r\n class=\"button-container\"\r\n [style.minWidth]=\"sizeStyle.minWidth\"\r\n [style.minHeight]=\"sizeStyle.minHeight\"\r\n [style.color]=\"color\"\r\n [style.backgroundColor]=\"backgroundColor\"\r\n [style.border]=\"border\"\r\n [style.borderRadius]=\"borderRadius\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.padding]=\"padding\"\r\n [style.marginLeft]=\"marginLeft\"\r\n [style.marginRight]=\"marginRight\"\r\n [style.borderColor]=\"borderColor\"\r\n (click)=\"handleClick()\"\r\n>\r\n @if (leftIcon || (leftIconData && leftIconData.length > 0)) {\r\n @for (iconData of leftIconData; track iconData) {\r\n <app-icon [iconData]=\"iconData\"></app-icon>\r\n }\r\n @if (leftIcon && (!leftIconData || leftIconData.length === 0)) {\r\n <app-icon [icon]=\"leftIcon\"></app-icon>\r\n }\r\n }\r\n\r\n @if (content) {\r\n <span\r\n class=\"button-content\"\r\n [style.minWidth]=\"sizeStyle.contentWidth\"\r\n [style.minHeight]=\"sizeStyle.contentHeight\"\r\n [style.fontSize]=\"fontSize || sizeStyle.fontSize\"\r\n [style.color]=\"color\"\r\n >\r\n {{ content }}\r\n </span>\r\n }\r\n\r\n @if (rightIcon || (rightIconData && rightIconData.length > 0)) {\r\n @for (iconData of rightIconData; track iconData) {\r\n <app-icon [iconData]=\"iconData\"></app-icon>\r\n }\r\n @if (rightIcon && (!rightIconData || rightIconData.length === 0)) {\r\n <app-icon [icon]=\"rightIcon\"></app-icon>\r\n }\r\n }\r\n</button>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FunctionalLabelComponent } from '../../shared/components/functional-label/functional-label.component';\r\nimport { ButtonContainerComponent } from '../../shared/components/button/button-container/button-container.component';\r\nimport { IconData } from '../../shared/components/icon/icon.component';\r\n\r\nexport interface SidebarItem {\r\n iconLeft?: IconData | string;\r\n iconRight?: IconData | string;\r\n content: string;\r\n url?: string;\r\n colorIconLeft?: string;\r\n colorIconLeftExpanded?: string;\r\n colorIconLeftHover?: string;\r\n colorIconRight?: string;\r\n colorIconRightExpanded?: string;\r\n colorIconRightHover?: string;\r\n colorContent?: string;\r\n colorContentExpanded?: string;\r\n colorContentHover?: string;\r\n backgroundColor?: string;\r\n backgroundColorExpanded?: string;\r\n backgroundColorHover?: string;\r\n backgroundColorHoverExpanded?: string;\r\n borderRadius?: string;\r\n borderRadiusHover?: string;\r\n width?: string;\r\n height?: string;\r\n children?: SidebarItem[];\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface SidebarData {\r\n menuItems: SidebarItem[];\r\n backgroundColor?: string;\r\n collapseIcon?: string;\r\n expandIcon?: string;\r\n toggleButtonBackgroundColor?: string;\r\n closeButtonBackgroundColor?: string;\r\n toggleButtonIconColor?: string;\r\n toggleButtonSize?: string;\r\n toggleButtonBorderRadius?: string;\r\n toggleButtonPadding?: string;\r\n toggleButtonWidth?: string;\r\n toggleButtonHeight?: string;\r\n closeButtonMarginRight?: string;\r\n closeButtonMarginLeft?: string;\r\n\r\n // New properties from demo\r\n defaultWidth?: string;\r\n defaultHeight?: string;\r\n defaultBorderRadius?: string;\r\n defaultColorIconLeft?: string;\r\n defaultColorContent?: string;\r\n defaultBackgroundColor?: string;\r\n defaultColorIconLeftHover?: string;\r\n defaultColorContentHover?: string;\r\n defaultBackgroundColorHover?: string;\r\n activeColorIconLeft?: string;\r\n activeColorContent?: string;\r\n activeBackgroundColor?: string;\r\n disabledColorIconLeft?: string;\r\n disabledColorContent?: string;\r\n disabledBackgroundColor?: string;\r\n defaultColorIconLeftExpanded?: string;\r\n defaultColorIconRightExpanded?: string;\r\n defaultColorContentExpanded?: string;\r\n defaultBackgroundColorExpanded?: string;\r\n defaultBackgroundColorHoverExpanded?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, FunctionalLabelComponent, ButtonContainerComponent],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.scss'],\r\n})\r\nexport class SidebarComponent {\r\n @Input() data: SidebarData = { menuItems: [] };\r\n @Input() sidebarWidthCollapse: string = '59px';\r\n @Input() sidebarWidthExpand: string = '227px';\r\n @Input() isSidebarExpanded = false;\r\n\r\n @Input() leftIcon?: string;\r\n @Input() rightIcon?: string;\r\n\r\n @Output() sidebarToggled = new EventEmitter<boolean>();\r\n\r\n @Input() toggleButtonIconData?: IconData[];\r\n\r\n @Input() closeButtonIconData?: IconData[];\r\n\r\n expandedItems: Set<SidebarItem> = new Set();\r\n activeItem: SidebarItem | null = null;\r\n\r\n toggleSidebar(): void {\r\n this.isSidebarExpanded = !this.isSidebarExpanded;\r\n this.sidebarToggled.emit(this.isSidebarExpanded);\r\n if (!this.isSidebarExpanded) {\r\n this.expandedItems.clear(); // Clear expanded menus when collapsing sidebar\r\n }\r\n }\r\n\r\n toggleSubMenu(item: SidebarItem, event: Event): void {\r\n event.stopPropagation();\r\n const wasExpanded = this.expandedItems.has(item);\r\n this.expandedItems.clear();\r\n if (!wasExpanded) {\r\n this.expandedItems.add(item);\r\n }\r\n }\r\n\r\n isItemExpanded(item: SidebarItem): boolean {\r\n return this.expandedItems.has(item);\r\n }\r\n\r\n getRightIcon(item: SidebarItem): string | IconData | undefined {\r\n if (!item.iconRight) return undefined;\r\n\r\n const isExpanded = this.isItemExpanded(item);\r\n\r\n // If it's a string identifier\r\n if (typeof item.iconRight === 'string') {\r\n return isExpanded \r\n ? item.iconRight.replace('down', 'up') \r\n : item.iconRight.replace('up', 'down');\r\n }\r\n\r\n // If it's an IconData object\r\n if (typeof item.iconRight === 'object' && 'icon' in item.iconRight) {\r\n const iconName = item.iconRight.icon;\r\n if (!iconName) return item.iconRight;\r\n return {\r\n ...item.iconRight,\r\n icon: isExpanded ? iconName.replace('down', 'up') : iconName.replace('up', 'down')\r\n };\r\n }\r\n\r\n return item.iconRight;\r\n }\r\n\r\n onMenuItemClick(item: SidebarItem, event: Event): void {\r\n this.activeItem = item;\r\n console.log('Menu item clicked:', item, event);\r\n }\r\n}\r\n","<div class=\"sidebar-wrapper\" [class.expanded]=\"isSidebarExpanded\"\r\n [style.--expanded-hover-bg]=\"data.defaultBackgroundColorHoverExpanded || 'var(--neutral-400)'\">\r\n <div [style.background-color]=\"isSidebarExpanded ? (data.backgroundColor || 'var(--neutral-color-50)') : 'var(--brand-500)'\">\r\n <aside class=\"sidebar\">\r\n @for (item of data.menuItems; track $index) {\r\n <div class=\"sidebar-item-container\">\r\n <app-functional-label\r\n class=\"sidebar-item\"\r\n [class.active]=\"activeItem === item || rla.isActive\"\r\n routerLinkActive=\"active\"\r\n #rla=\"routerLinkActive\"\r\n [isActive]=\"activeItem === item || rla.isActive\"\r\n [isSidebarExpanded]=\"isSidebarExpanded\"\r\n [iconLeft]=\"item.iconLeft\"\r\n [iconRight]=\"isSidebarExpanded ? getRightIcon(item) : undefined\"\r\n [content]=\"item.content\"\r\n [routerLink]=\"item.url\"\r\n [colorIconLeft]=\"isSidebarExpanded ? (item.colorIconLeftExpanded || data.defaultColorIconLeftExpanded || item.colorIconLeft || data.defaultColorIconLeft) : (item.colorIconLeft || data.defaultColorIconLeft)\"\r\n [colorIconRight]=\"isSidebarExpanded ? (item.colorIconRightExpanded || data.defaultColorIconRightExpanded || item.colorIconRight) : item.colorIconRight\"\r\n [colorContent]=\"isSidebarExpanded ? (item.colorContentExpanded || data.defaultColorContentExpanded || item.colorContent || data.defaultColorContent) : (item.colorContent || data.defaultColorContent)\"\r\n [colorContentHover]=\"item.colorContentHover || data.defaultColorContentHover\"\r\n [backgroundColor]=\"isSidebarExpanded ? (item.backgroundColorExpanded || data.defaultBackgroundColorExpanded || item.backgroundColor || data.defaultBackgroundColor) : (item.backgroundColor || data.defaultBackgroundColor)\"\r\n [borderRadius]=\"item.borderRadius || data.defaultBorderRadius\"\r\n (clicked)=\"onMenuItemClick(item, $event)\"\r\n (rightIconClicked)=\"toggleSubMenu(item, $event)\"\r\n [colorIconLeftHover]=\"item.colorIconLeftHover || data.defaultColorIconLeftHover\"\r\n [colorIconRightHover]=\"item.colorIconRightHover\"\r\n [disabled]=\"!!item.disabled\"\r\n [disabledColorIconLeft]=\"data.disabledColorIconLeft\"\r\n [disabledColorContent]=\"data.disabledColorContent\"\r\n [disabledBackgroundColor]=\"data.disabledBackgroundColor\"\r\n [activeBackgroundColor]=\"data.activeBackgroundColor || 'var(--brand-300)'\"\r\n [activeColorContent]=\"data.activeColorContent || 'var(--brand-500)'\"\r\n [activeColorIconLeft]=\"data.activeColorIconLeft || 'var(--brand-500)'\"\r\n [backgroundColorHover]=\"item.backgroundColorHover || data.defaultBackgroundColorHover\"\r\n [width]=\"item.width || data.defaultWidth\"\r\n [height]=\"item.height || data.defaultHeight\"\r\n ></app-functional-label>\r\n\r\n <!-- ✅ Sub Menu -->\r\n @if (isItemExpanded(item) && item.children && isSidebarExpanded) {\r\n <div class=\"sub-menu\">\r\n @for (child of item.children; track child.content) {\r\n <app-functional-label\r\n class=\"sidebar-item sub-item\"\r\n routerLinkActive=\"active\"\r\n #subRla=\"routerLinkActive\"\r\n [isActive]=\"activeItem === child || subRla.isActive\"\r\n [isSidebarExpanded]=\"isSidebarExpanded\"\r\n [iconLeft]=\"child.iconLeft\"\r\n [content]=\"child.content\"\r\n [routerLink]=\"child.url\"\r\n [colorIconLeft]=\"isSidebarExpanded ? (child.colorIconLeftExpanded || data.defaultColorIconLeftExpanded || child.colorIconLeft || data.defaultColorIconLeft) : (child.colorIconLeft || data.defaultColorIconLeft)\"\r\n [colorIconRight]=\"isSidebarExpanded ? (child.colorIconRightExpanded || data.defaultColorIconRightExpanded || child.colorIconRight) : child.colorIconRight\"\r\n [colorContent]=\"isSidebarExpanded ? (child.colorContentExpanded || data.defaultColorContentExpanded || child.colorContent || data.defaultColorContent) : (child.colorContent || data.defaultColorContent)\"\r\n [colorContentHover]=\"child.colorContentHover || data.defaultColorContentHover\"\r\n [backgroundColor]=\"isSidebarExpanded ? (child.backgroundColorExpanded || data.defaultBackgroundColorExpanded || child.backgroundColor || data.defaultBackgroundColor) : (child.backgroundColor || data.defaultBackgroundColor)\"\r\n [borderRadius]=\"child.borderRadius || data.defaultBorderRadius\"\r\n [colorIconLeftHover]=\"child.colorIconLeftHover || data.defaultColorIconLeftHover\"\r\n [disabled]=\"!!child.disabled\"\r\n [disabledColorIconLeft]=\"data.disabledColorIconLeft\"\r\n [disabledColorContent]=\"data.disabledColorContent\"\r\n [disabledBackgroundColor]=\"data.disabledBackgroundColor\"\r\n [activeBackgroundColor]=\"data.activeBackgroundColor\"\r\n [activeColorContent]=\"data.activeColorContent\"\r\n [activeColorIconLeft]=\"data.activeColorIconLeft\"\r\n [backgroundColorHover]=\"child.backgroundColorHover || data.defaultBackgroundColorHover\"\r\n (clicked)=\"onMenuItemClick(child, $event)\"\r\n [width]=\"child.width || data.defaultWidth\"\r\n [height]=\"child.height || data.defaultHeight\"\r\n ></app-functional-label>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </aside>\r\n\r\n <!--Toggle button - chỉ hiện khi KHÔNG expanded -->\r\n @if (!isSidebarExpanded) {\r\n <app-button-container\r\n class=\"sidebar-toggle-button\"\r\n [leftIconData]=\"toggleButtonIconData\"\r\n [backgroundColor]=\"data.toggleButtonBackgroundColor || 'transparent'\"\r\n [borderRadius]=\"'8px'\"\r\n [size]=\"'sm'\"\r\n [width]=\"'36px'\"\r\n [height]=\"'36px'\"\r\n (buttonClick)=\"toggleSidebar()\"\r\n ></app-button-container>\r\n }\r\n\r\n <!--Close button - chỉ hiện khi expanded -->\r\n @if (isSidebarExpanded) {\r\n <app-button-container\r\n class=\"sidebar-close-button\"\r\n [leftIconData]=\"closeButtonIconData\"\r\n [backgroundColor]=\"\r\n data.closeButtonBackgroundColor || 'var(--brand-400)'\r\n \"\r\n [color]=\"data.toggleButtonIconColor || 'var(--neutral-500)'\"\r\n [borderRadius]=\"'8px'\"\r\n [size]=\"'sm'\"\r\n (buttonClick)=\"toggleSidebar()\"\r\n [width]=\"'36px'\"\r\n [height]=\"'36px'\"\r\n [marginRight]=\"data.closeButtonMarginRight || '24px'\"\r\n [marginLeft]=\"data.closeButtonMarginLeft || 'auto'\"\r\n ></app-button-container>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-label-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './label-button.component.html',\n styleUrls: ['./label-button.component.scss'],\n})\nexport class LabelButtonComponent {\n @Input() label: string = '';\n @Input() bgColor: string = '';\n @Input() borderColor: string = '';\n @Input() width: string = '100%';\n @Input() height: string = '28px';\n @Input() textColor: string = 'var(--neutral-100)';\n}\n","<button\n [style.background-color]=\"bgColor\"\n [style.border-color]=\"borderColor\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n class=\"label-button\"\n type=\"button\"\n>\n {{ label }}\n</button>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-input-text',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input-text.component.html',\r\n styleUrls: ['./input-text.component.scss'],\r\n})\r\nexport class InputTextComponent {\r\n @Input() headerInput: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() width: string = '100%';\r\n @Input() maxLength: number = 0; // 0 = no limit\r\n @Input() showLimit: boolean = false;\r\n @Input() icon: string = '';\r\n @Input() widthIcon: string = '16px';\r\n @Input() heightIcon: string = '16px';\r\n @Input() typeInput: string = 'text';\r\n @Input() showLabel: boolean = true;\r\n\r\n // Customization\r\n @Input() placeholderColor: string = '';\r\n @Input() border: string = '';\r\n @Input() borderRadius = '8px';\r\n @Input() padding = '8px 12px';\r\n @Input() height = '36px';\r\n @Input() fontSizeContent: string = '14px';\r\n @Input() fontWeightContent: string = '500';\r\n @Input() colorContent: string = 'var(--neutral-color-875)';\r\n\r\n @Input() fontSizeLabel: string = '14px';\r\n @Input() fontWeightLabel: string = '500';\r\n @Input() colorLabel: string = 'var(--neutral-color-875)';\r\n\r\n @Input() backgroundColor: string = 'var(--neutral-color-10)';\r\n @Input() borderColor?: string;\r\n @Input() borderColorHover?: string;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() iconClick = new EventEmitter<void>();\r\n\r\n private _value: string = '';\r\n\r\n onIconClick(): void {\r\n this.iconClick.emit();\r\n }\r\n\r\n @Input()\r\n set value(val: string) {\r\n this._value = val || '';\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n\r\n get currentLength(): number {\r\n return this._value?.length || 0;\r\n }\r\n\r\n get limit(): string {\r\n if (!this.showLimit || this.maxLength <= 0) return '';\r\n return `${this.currentLength}/${this.maxLength}`;\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let newValue = input.value;\r\n\r\n // Enforce maxLength if set\r\n if (this.maxLength > 0 && newValue.length > this.maxLength) {\r\n newValue = newValue.substring(0, this.maxLength);\r\n input.value = newValue;\r\n }\r\n\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n}\r\n","<div class=\"input-form\">\r\n <div class=\"input-form-content\">\r\n <label class=\"input-form-label\">\r\n @if (showLabel) {\r\n <span\r\n class=\"label-text\"\r\n [class.hidden]=\"!headerInput\"\r\n [style.font-size]=\"fontSizeLabel || null\"\r\n [style.font-weight]=\"fontWeightLabel || null\"\r\n [style.color]=\"colorLabel || null\"\r\n >\r\n {{ headerInput }}\r\n @if (required) {\r\n <span class=\"required-mark\">*</span>\r\n }\r\n </span>\r\n }\r\n <div class=\"input-field-wrapper\">\r\n <input\r\n [type]=\"typeInput\"\r\n class=\"input-form-field\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [required]=\"required\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.padding]=\"padding\"\r\n [style.border]=\"border || null\"\r\n [style.border-radius]=\"borderRadius\"\r\n [style.background-color]=\"backgroundColor\"\r\n [style.--placeholder-color]=\"placeholderColor || null\"\r\n [style.font-size]=\"fontSizeContent || null\"\r\n [style.font-weight]=\"fontWeightContent || null\"\r\n [style.color]=\"colorContent || null\"\r\n [style.--border-color]=\"borderColor || null\"\r\n [style.--border-color-hover]=\"borderColorHover || null\"\r\n [value]=\"value\"\r\n (input)=\"onInput($event)\"\r\n [attr.maxlength]=\"maxLength > 0 ? maxLength : null\"\r\n />\r\n @if (icon) {\r\n <button\r\n type=\"button\"\r\n class=\"input-icon-button\"\r\n [class.clickable]=\"iconClick.observed\"\r\n (click)=\"onIconClick()\"\r\n [attr.aria-label]=\"icon\"\r\n [disabled]=\"!iconClick.observed\"\r\n >\r\n <i\r\n [class]=\"icon\"\r\n [style.width]=\"widthIcon\"\r\n [style.height]=\"heightIcon\"\r\n class=\"input-icon\"\r\n ></i>\r\n </button>\r\n }\r\n </div>\r\n </label>\r\n </div>\r\n <div class=\"limit\" [class.hidden]=\"!(maxLength > 0 && showLimit)\">\r\n <span>{{ limit }}</span>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\n@Component({\r\n selector: 'app-input-stepper',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input-stepper.component.html',\r\n styleUrls: ['./input-stepper.component.scss'],\r\n})\r\nexport class InputStepperComponent {\r\n protected readonly componentId = `input-stepper-${Math.random().toString(36).substring(2, 9)}`;\r\n @Input() headerInput: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n @Input() width: string = '100%';\r\n @Input() min: number = 0;\r\n @Input() max: number = 100;\r\n @Input() error: string = '';\r\n @Input() helperText: string = '';\r\n @Input() step: number = 1;\r\n @Input() state: 'default' | 'negative' | 'positive' = 'default';\r\n\r\n @Output() valueChange = new EventEmitter<number>();\r\n\r\n private _value: number = 0;\r\n\r\n @Input()\r\n set value(val: number) {\r\n this._value = val || 0;\r\n }\r\n\r\n get value(): number {\r\n return this._value;\r\n }\r\n\r\n increment(): void {\r\n if (this.readonly || this.disabled) return;\r\n const newValue = this._value + this.step;\r\n if (newValue <= this.max) {\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n\r\n decrement(): void {\r\n if (this.readonly || this.disabled) return;\r\n const newValue = this._value - this.step;\r\n if (newValue >= this.min) {\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n\r\n onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let newValue = Number.parseInt(input.value, 10);\r\n\r\n if (Number.isNaN(newValue)) {\r\n newValue = this.min;\r\n }\r\n\r\n if (newValue < this.min) newValue = this.min;\r\n if (newValue > this.max) newValue = this.max;\r\n\r\n input.value = newValue.toString();\r\n this._value = newValue;\r\n this.valueChange.emit(this._value);\r\n }\r\n}","<div\r\n class=\"input-form\"\r\n [style.width]=\"width\"\r\n [class.disabled]=\"disabled\"\r\n [class.state-negative]=\"state === 'negative'\"\r\n [class.state-positive]=\"state === 'positive'\"\r\n>\r\n <div class=\"input-form-content\">\r\n <label class=\"input-form-label\" [for]=\"componentId\">\r\n <span class=\"label-text\">\r\n {{ headerInput }}\r\n @if (required) {\r\n <span class=\"required-mark\">*</span>\r\n }\r\n </span>\r\n </label>\r\n </div>\r\n\r\n <div class=\"input-stepper-content\">\r\n <button\r\n type=\"button\"\r\n class=\"input-stepper-button\"\r\n (click)=\"decrement()\"\r\n [disabled]=\"disabled\"\r\n aria-label=\"Giảm giá trị\"\r\n >\r\n <span class=\"stepper-icon\">−</span>\r\n </button>\r\n <input\r\n [id]=\"componentId\"\r\n type=\"text\"\r\n class=\"input-stepper-input\"\r\n placeholder=\"0\"\r\n [placeholder]=\"placeholder || '0'\"\r\n title=\"Giá trị\"\r\n [title]=\"headerInput || 'Giá trị'\"\r\n [readonly]=\"readonly\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [value]=\"value\"\r\n (input)=\"onInput($event)\"\r\n [attr.aria-label]=\"headerInput || 'Giá trị'\"\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"input-stepper-button\"\r\n (click)=\"increment()\"\r\n [disabled]=\"disabled\"\r\n aria-label=\"Tăng giá trị\"\r\n >\r\n <span class=\"stepper-icon\">+</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"input-stepper-footer\">\r\n @if (error) {\r\n <span class=\"input-stepper-error\">{{ error }}</span>\r\n } @else if (helperText) {\r\n <span class=\"input-stepper-helper\">{{ helperText }}</span>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, ElementRef, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-input-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input-calendar.component.html',\r\n styleUrls: ['./input-calendar.component.scss'],\r\n})\r\nexport class InputCalendarComponent {\r\n @Input() headerInput: string = '';\r\n @Input() placeholder: string = 'dd/mm/yyyy';\r\n @Input() readonly: boolean = false;\r\n @Input() required: boolean = false;\r\n @Input() width: string = '100%';\r\n \r\n @Output() valueChange = new EventEmitter<string>();\r\n \r\n @ViewChild('hiddenDateInput') hiddenDateInput!: ElementRef<HTMLInputElement>;\r\n \r\n displayValue: string = '';\r\n private _value: string = '';\r\n \r\n @Input()\r\n set value(val: string) {\r\n this._value = val;\r\n this.displayValue = this.formatToDisplay(val);\r\n }\r\n \r\n get value(): string {\r\n return this._value;\r\n }\r\n \r\n // Convert ISO format (yyyy-mm-dd) to display format (dd/mm/yyyy)\r\n formatToDisplay(isoDate: string): string {\r\n if (!isoDate) return '';\r\n const parts = isoDate.split('-');\r\n if (parts.length === 3) {\r\n return `${parts[2]}/${parts[1]}/${parts[0]}`;\r\n }\r\n return isoDate;\r\n }\r\n \r\n // Validate if a date string (dd/mm/yyyy) represents a valid date\r\n isValidDate(displayDate: string): boolean {\r\n if (!displayDate || displayDate.length !== 10) return false;\r\n \r\n const parts = displayDate.split('/');\r\n if (parts.length !== 3) return false;\r\n \r\n const day = Number.parseInt(parts[0], 10);\r\n const month = Number.parseInt(parts[1], 10);\r\n const year = Number.parseInt(parts[2], 10);\r\n \r\n // Basic range validation\r\n if (Number.isNaN(day) || Number.isNaN(month) || Number.isNaN(year)) return false;\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n if (year < 1900 || year > 2100) return false;\r\n \r\n // Create date and verify it matches input (handles invalid dates like 31/02)\r\n const date = new Date(year, month - 1, day);\r\n return date.getFullYear() === year && \r\n date.getMonth() === month - 1 && \r\n date.getDate() === day;\r\n }\r\n\r\n // Convert display format (dd/mm/yyyy) to ISO format (yyyy-mm-dd)\r\n formatToISO(displayDate: string): string {\r\n if (!displayDate) return '';\r\n const parts = displayDate.split('/');\r\n if (parts.length === 3) {\r\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\r\n }\r\n return displayDate;\r\n }\r\n \r\n // Handle text input with auto-formatting\r\n onDisplayInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value.replaceAll(/[^\\d/]/g, '');\r\n \r\n // Auto-insert slashes at positions 2 and 5\r\n const parts = value.split('/');\r\n if (parts[0] && parts[0].length >= 2 && parts.length === 1) {\r\n value = parts[0].substring(0, 2) + '/' + parts[0].substring(2);\r\n }\r\n if (value.length >= 5 && value.split('/').length === 2 && !value.endsWith('/')) {\r\n const newParts = value.split('/');\r\n if (newParts[1] && newParts[1].length >= 2) {\r\n value = newParts[0] + '/' + newParts[1].substring(0, 2) + '/' + newParts[1].substring(2);\r\n }\r\n }\r\n \r\n // Limit to dd/mm/yyyy format\r\n if (value.length > 10) {\r\n value = value.substring(0, 10);\r\n }\r\n \r\n this.displayValue = value;\r\n \r\n // Only emit if complete and valid date\r\n if (value.length === 10 && this.isValidDate(value)) {\r\n const isoValue = this.formatToISO(value);\r\n this._value = isoValue;\r\n this.valueChange.emit(isoValue);\r\n }\r\n }\r\n \r\n // Open native date picker\r\n openDatePicker(): void {\r\n if (!this.readonly && this.hiddenDateInput) {\r\n this.hiddenDateInput.nativeElement.showPicker();\r\n }\r\n }\r\n \r\n // Handle date picker selection\r\n onDatePickerChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this._value = input.value;\r\n this.displayValue = this.formatToDisplay(input.value);\r\n this.valueChange.emit(this._value);\r\n }\r\n}","<div class=\"input-form\" [style.width]=\"width\">\r\n <label class=\"input-form-label\">\r\n <div class=\"input-form-label-header\">\r\n <span>{{ headerInput }}</span>\r\n @if (required) {\r\n <span class=\"required-mark\">*</span>\r\n }\r\n </div>\r\n <div class=\"calendar-input-wrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"input-form-field\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [required]=\"required\"\r\n [value]=\"displayValue\"\r\n (input)=\"onDisplayInput($event)\"\r\n maxlength=\"10\"\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"calendar-icon-btn\"\r\n (click)=\"openDatePicker()\"\r\n [disabled]=\"readonly\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\r\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n </svg>\r\n </button>\r\n <input\r\n #hiddenDateInput\r\n type=\"date\"\r\n class=\"hidden-date-input\"\r\n [value]=\"value\"\r\n (change)=\"onDatePickerChange($event)\"\r\n />\r\n </div>\r\n </label>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface ColumnConfig {\r\n header: string;\r\n key: string;\r\n width: string;\r\n}\r\n\r\n@Component({\r\n selector: 'tr[app-table-header]',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-header.component.html',\r\n styleUrl: './table-header.component.scss',\r\n})\r\nexport class TableHeaderComponent {\r\n @Input() columns: ColumnConfig[] = [];\r\n @Input() backgroundColor?: string;\r\n @Input({ transform: (value: string | undefined) => value || '#ffffff' })\r\n textColor: string = '#ffffff';\r\n @Input() headerIconLeft?: string;\r\n @Input() headerIconRight?: string;\r\n @Input() fontSize: string = 'var(--font-xs)';\r\n}\r\n","@for (col of columns; track col.key) {\r\n <th\r\n scope=\"col\"\r\n [style.width]=\"col.width\"\r\n [style.backgroundColor]=\"backgroundColor\"\r\n [style.color]=\"textColor\"\r\n >\r\n <div class=\"header-container\">\r\n <div class=\"header-content\">\r\n @if (headerIconLeft) {\r\n <div class=\"icon-left\">\r\n <i [class]=\"headerIconLeft\"></i>\r\n </div>\r\n }\r\n <div class=\"header-text\" [style.font-size]=\"fontSize\">\r\n {{ col.header }}\r\n </div>\r\n @if (headerIconRight) {\r\n <div class=\"icon-right\">\r\n <i [class]=\"headerIconRight\"></i>\r\n </div>\r\n }\r\n </div>\r\n <p class=\"divider\">|</p>\r\n </div>\r\n </th>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, TemplateRef } from '@angular/core';\r\nimport { ColumnConfig } from '../table-header/table-header.component';\r\n\r\n@Component({\r\n selector: '[app-table-body]', // ✅ Attribute selector\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './table-body.component.html',\r\n styleUrl: './table-body.component.scss',\r\n})\r\nexport class TableBodyComponent {\r\n @Input() rows: any[] = [];\r\n @Input() columns: ColumnConfig[] = [];\r\n @Input() columnTemplates: { [key: string]: TemplateRef<any> } = {};\r\n @Input() fontSize: string = 'var(--font-sm)';\r\n}\r\n","@for (row of rows; track $index) {\r\n <tr>\r\n @for (col of columns; track col.key) {\r\n <td [style.width]=\"col.width\" [style.font-size]=\"fontSize\">\r\n @if (columnTemplates[col.key]) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n columnTemplates[col.key];\r\n context: { $implicit: row[col.key], row: row }\r\n \"\r\n ></ng-container>\r\n } @else {\r\n {{ row[col.key] }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, TemplateRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-approval-list-item',\r\n templateUrl: './approval-list-item.component.html',\r\n styleUrls: ['./approval-list-item.component.scss'],\r\n imports: [CommonModule],\r\n standalone: true\r\n})\r\nexport class ApprovalListItemComponent {\r\n @Input() name!: string;\r\n @Input() date!: Date;\r\n @Input() rightTemplate?: TemplateRef<any>;\r\n @Input() rightContext: any = {};\r\n\r\n get parsedDate(): Date {\r\n return new Date(this.date);\r\n }\r\n}\r\n","<div class=\"approval-item\">\r\n <!-- LEFT -->\r\n <div class=\"approval-item-left\">\r\n <span class=\"approval-item-left-name\">{{ name }}</span>\r\n <span class=\"approval-item-left-date\">\r\n <span class=\"approval-item-left-date-title\">Ngày tạo đơn:</span>\r\n {{ date | date: 'dd/MM/yyyy' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"approval-item-right\">\r\n <ng-container *ngIf=\"rightTemplate; else defaultRight\">\r\n <ng-container *ngTemplateOutlet=\"rightTemplate; context: rightContext\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #defaultRight>\r\n <span class=\"text-gray-400\">—</span>\r\n </ng-template>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ApprovalListItemInterface } from '../approval-list-item/approval-list-item.model';\r\nimport { ApprovalListItemComponent } from '../approval-list-item/approval-list-item.component';\r\n\r\n@Component({\r\n selector: 'app-approval-list',\r\n standalone: true,\r\n imports: [CommonModule, ApprovalListItemComponent],\r\n templateUrl: './approval-list.component.html',\r\n styleUrls: ['./approval-list.component.scss'],\r\n})\r\nexport class ApprovalListComponent {\r\n @Input() rows: ApprovalListItemInterface[] = [];\r\n\r\n @Input() headerContentRight!: string;\r\n @Input() headerContentLeft!: string;\r\n @Input() width!: string;\r\n}\r\n","<div class=\"approval-list\" [style.width]=\"width\">\r\n <div class=\"approval-list-header\">\r\n <span class=\"approval-list-header-left\">{{ headerContentLeft }}</span>\r\n <div>\r\n <p>{{ headerContentRight }}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"approval-list-content\" [style.width]=\"width\">\r\n <app-approval-list-item\r\n *ngFor=\"let row of rows\"\r\n [name]=\"row.name\"\r\n [date]=\"row.date\"\r\n [rightTemplate]=\"row.rightTemplate\"\r\n [rightContext]=\"row.rightContext\"\r\n >\r\n </app-approval-list-item>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ButtonContainerComponent } from \"../../button/button-container/button-container.component\";\r\n\r\n@Component({\r\n selector: 'app-pop-up-confirm',\r\n standalone: true,\r\n imports: [CommonModule, ButtonContainerComponent],\r\n templateUrl: './pop-up-confirm.component.html',\r\n styleUrls: ['./pop-up-confirm.component.scss'],\r\n})\r\nexport class PopUpConfirmComponent {\r\n\r\n @Input() imgUrl: string = '';\r\n @Input() title: string = '';\r\n @Input() content: string = '';\r\n @Input() colorButton: string = 'var(--brand-600)';\r\n\r\n @Output() confirmClick = new EventEmitter<void>();\r\n @Output() cancelClick = new EventEmitter<void>();\r\n\r\n onConfirm(): void {\r\n this.confirmClick.emit();\r\n }\r\n\r\n onCancel(): void {\r\n this.cancelClick.emit();\r\n }\r\n}","<div class=\"pop-up-confirm-overlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"popup-title\">\r\n <div class=\"pop-up-confirm\">\r\n <div class=\"pop-up-confirm-content\">\r\n <img *ngIf=\"imgUrl\" [src]=\"imgUrl\" alt=\"\">\r\n <div class=\"pop-up-confirm-text\">\r\n <p class=\"pop-up-title\" id=\"popup-title\">{{title}}</p>\r\n <p class=\"pop-up-content\">{{content}}</p>\r\n </div>\r\n </div>\r\n <div class=\"pop-up-confirm-actions\">\r\n <app-button-container size=\"md\" content=\"Quay Lại\" backgroundColor=\"var(--neutral-100)\" color=\"var(--neutral-800)\" (buttonClick)=\"onCancel()\"></app-button-container>\r\n <app-button-container size=\"md\" content=\"Đồng Ý\" [backgroundColor]=\"colorButton\" color=\"#fff\" (buttonClick)=\"onConfirm()\"></app-button-container>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-modal',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './modal.component.html',\n styleUrl: './modal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent {\n @Input() title: string = '';\n @Input() width: string = '800px';\n @Input() minHeight: string = '300px';\n @Input() isOpen: boolean = false;\n @Input() theme: 'default' | 'white' = 'default';\n\n @Output() close = new EventEmitter<void>();\n\n onOverlayClick(event: Event) {\n if (event.target === event.currentTarget) {\n this.close.emit();\n }\n }\n\n onCloseClick() {\n this.close.emit();\n }\n}\n","<div class=\"modal-overlay\" *ngIf=\"isOpen\" (click)=\"onOverlayClick($event)\">\n <div\n class=\"modal-container\"\n [class.theme-white]=\"theme === 'white'\"\n [style.width]=\"width\"\n [style.min-height]=\"minHeight\"\n >\n <div class=\"modal-header\">\n <span class=\"modal-title\">{{ title }}</span>\n <button class=\"modal-close-btn\" (click)=\"onCloseClick()\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n <div class=\"modal-body\">\n <ng-content select=\"[modal-body]\"></ng-content>\n </div>\n <div class=\"modal-footer\">\n <ng-content select=\"[modal-footer]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ViewChild,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface AvatarUploadedFile {\n id: string;\n file: File;\n fileName: string;\n previewUrl: string | null;\n}\n\n@Component({\n selector: 'app-avatar-upload-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar-upload-button.component.html',\n styleUrl: './avatar-upload-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AvatarUploadButtonComponent {\n @Input() label: string = '';\n @Input() required: boolean = false;\n @Input() showTooltip: boolean = false;\n @Input() tooltipText: string = '';\n @Input() buttonText: string = 'Tải file lên';\n @Input() acceptFormats: string = '.png,.jpeg,.jpg';\n @Input() helperText: string = 'Định dạng .png, .jpeg, .jpg';\n\n @Output() fileChange = new EventEmitter<AvatarUploadedFile | null>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n uploadedFile: AvatarUploadedFile | null = null;\n\n onButtonClick() {\n this.fileInput.nativeElement.click();\n }\n\n onFileChange(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const file = input.files[0];\n this.uploadedFile = this.createAvatarUploadedFile(file);\n this.fileChange.emit(this.uploadedFile);\n }\n input.value = '';\n }\n\n onRemove() {\n if (this.uploadedFile?.previewUrl) {\n URL.revokeObjectURL(this.uploadedFile.previewUrl);\n }\n this.uploadedFile = null;\n this.fileChange.emit(null);\n }\n\n private createAvatarUploadedFile(file: File): AvatarUploadedFile {\n const isImage = file.type.startsWith('image/');\n return {\n id: this.generateId(),\n file: file,\n fileName: file.name,\n previewUrl: isImage ? URL.createObjectURL(file) : null,\n };\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2, 9);\n }\n}\n","<div class=\"avatar-upload-wrapper\">\n <div class=\"label-row\" *ngIf=\"label\">\n <span class=\"label-text\">{{ label }}</span>\n <span class=\"required-mark\" *ngIf=\"required\">*</span>\n <button type=\"button\" class=\"tooltip-icon\" *ngIf=\"showTooltip\" [title]=\"tooltipText\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M8 7V11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n <circle cx=\"8\" cy=\"5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n </button>\n </div>\n\n <button type=\"button\" class=\"upload-button\" (click)=\"onButtonClick()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10 4V13M10 4L6 8M10 4L14 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M3 13V15C3 15.5523 3.44772 16 4 16H16C16.5523 16 17 15.5523 17 15V13\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span>{{ buttonText }}</span>\n </button>\n\n <input\n #fileInput\n type=\"file\"\n class=\"file-input\"\n [accept]=\"acceptFormats\"\n (change)=\"onFileChange($event)\"\n />\n\n <span class=\"helper-text\" *ngIf=\"helperText && !uploadedFile\">{{ helperText }}</span>\n\n <!-- Uploaded File Preview -->\n <div class=\"file-preview\" *ngIf=\"uploadedFile\">\n <img\n *ngIf=\"uploadedFile.previewUrl\"\n [src]=\"uploadedFile.previewUrl\"\n [alt]=\"uploadedFile.fileName\"\n class=\"preview-image\"\n />\n <span class=\"file-name\">{{ uploadedFile.fileName }}</span>\n <button type=\"button\" class=\"remove-btn\" (click)=\"onRemove()\" title=\"Xóa\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 4L12 12M12 4L4 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ViewChild,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface UploadedFile {\n id: string;\n file: File;\n fileName: string;\n fileSize: string;\n dateTime: string;\n fileType: string;\n}\n\n@Component({\n selector: 'app-file-upload-dropzone',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './file-upload-dropzone.component.html',\n styleUrl: './file-upload-dropzone.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploadDropzoneComponent {\n @Input() label: string = 'Thêm file bài học';\n @Input() buttonText: string = 'Tải lên';\n @Input() maxSize: string = '10MB';\n @Input() acceptFormats: string = '.docx,.xlsx,.png,.jpg,.jpeg,.pdf';\n @Input() helperText: string = '';\n\n @Output() filesChange = new EventEmitter<UploadedFile[]>();\n @Output() fileDownload = new EventEmitter<UploadedFile>();\n @Output() fileDelete = new EventEmitter<UploadedFile>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n uploadedFiles: UploadedFile[] = [];\n isDragging = false;\n\n get displayHelperText(): string {\n if (this.helperText) return this.helperText;\n return `Dung lượng tối đa ${this.maxSize}(${this.acceptFormats.replace(/\\./g, '').split(',').join(', ')}...)`;\n }\n\n onButtonClick() {\n this.fileInput.nativeElement.click();\n }\n\n onFileChange(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.addFiles(Array.from(input.files));\n }\n input.value = '';\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = true;\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging = false;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.addFiles(Array.from(files));\n }\n }\n\n onDownload(file: UploadedFile) {\n this.fileDownload.emit(file);\n }\n\n onDelete(file: UploadedFile) {\n this.uploadedFiles = this.uploadedFiles.filter((f) => f.id !== file.id);\n this.fileDelete.emit(file);\n this.filesChange.emit(this.uploadedFiles);\n }\n\n getIconType(file: UploadedFile): string {\n const ext = file.fileName.split('.').pop()?.toLowerCase() || '';\n if (ext === 'pdf') return 'pdf';\n if (['doc', 'docx'].includes(ext)) return 'doc';\n if (['xls', 'xlsx'].includes(ext)) return 'xls';\n if (['png', 'jpg', 'jpeg', 'gif', 'webp'].includes(ext)) return 'image';\n return 'file';\n }\n\n private addFiles(files: File[]) {\n const newFiles = files.map((file) => this.createUploadedFile(file));\n this.uploadedFiles = [...this.uploadedFiles, ...newFiles];\n this.filesChange.emit(this.uploadedFiles);\n }\n\n private createUploadedFile(file: File): UploadedFile {\n return {\n id: this.generateId(),\n file: file,\n fileName: file.name,\n fileSize: this.formatFileSize(file.size),\n dateTime: this.formatDateTime(new Date()),\n fileType: file.name.split('.').pop()?.toLowerCase() || '',\n };\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2, 9);\n }\n\n private formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + sizes[i];\n }\n\n private formatDateTime(date: Date): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n const hours = date.getHours().toString().padStart(2, '0');\n const minutes = date.getMinutes().toString().padStart(2, '0');\n return `${day}/${month}/${year} ${hours}:${minutes}`;\n }\n}\n","<div class=\"file-upload-dropzone\">\n <label class=\"dropzone-label\">{{ label }}</label>\n\n <div\n class=\"dropzone-area\"\n [class.dragging]=\"isDragging\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"onButtonClick()\"\n >\n <div class=\"dropzone-content\">\n <svg\n class=\"upload-icon\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 16V8M12 8L9 11M12 8L15 11\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M9 22H15C18.866 22 22 18.866 22 15C22 12.0667 20.2333 9.56667 17.6667 8.46667C17.8778 7.98889 18 7.46667 18 6.93333C18 4.41111 15.5778 2.44444 12.8333 3.04444C11.0111 1.15556 8.11111 0.911111 6 2.48889C3.51111 4.35556 3.22222 8.02222 5.11111 10.2444C3.24444 11.2222 2 13.1778 2 15.4444C2 18.9778 5.02222 22 9 22Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n\n <button type=\"button\" class=\"upload-btn\" (click)=\"$event.stopPropagation(); onButtonClick()\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 16V8M12 8L9 11M12 8L15 11\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n {{ buttonText }}\n </button>\n\n <span class=\"helper-text\">{{ displayHelperText }}</span>\n </div>\n </div>\n\n <input\n #fileInput\n type=\"file\"\n [accept]=\"acceptFormats\"\n (change)=\"onFileChange($event)\"\n multiple\n hidden\n />\n\n <!-- Attachment List -->\n <div class=\"attachment-list\" *ngIf=\"uploadedFiles.length > 0\">\n <div class=\"attachment-item\" *ngFor=\"let file of uploadedFiles\">\n <div class=\"file-icon\" [ngClass]=\"getIconType(file)\">\n <ng-container [ngSwitch]=\"getIconType(file)\">\n <svg\n *ngSwitchCase=\"'pdf'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#FEE2E2\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#EF4444\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#EF4444\" font-size=\"6\" font-weight=\"600\">\n PDF\n </text>\n </svg>\n <svg\n *ngSwitchCase=\"'doc'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#DBEAFE\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#3B82F6\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#3B82F6\" font-size=\"6\" font-weight=\"600\">\n DOC\n </text>\n </svg>\n <svg\n *ngSwitchCase=\"'xls'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#D1FAE5\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#10B981\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#10B981\" font-size=\"6\" font-weight=\"600\">\n XLS\n </text>\n </svg>\n <svg\n *ngSwitchCase=\"'image'\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#FEF3C7\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#F59E0B\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#F59E0B\" font-size=\"6\" font-weight=\"600\">\n IMG\n </text>\n </svg>\n <svg\n *ngSwitchDefault\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" fill=\"#F3F4F6\" />\n <rect x=\"3\" y=\"2\" width=\"18\" height=\"20\" rx=\"2\" stroke=\"#9CA3AF\" stroke-width=\"1\" />\n <text x=\"12\" y=\"14\" text-anchor=\"middle\" fill=\"#9CA3AF\" font-size=\"6\" font-weight=\"600\">\n FILE\n </text>\n </svg>\n </ng-container>\n </div>\n\n <div class=\"file-info\">\n <span class=\"file-name\">{{ file.fileName }}</span>\n <div class=\"file-meta\">\n <span class=\"file-size\">{{ file.fileSize }}</span>\n <span class=\"separator\">•</span>\n <span class=\"file-date\">{{ file.dateTime }}</span>\n </div>\n </div>\n\n <div class=\"file-actions\">\n <button class=\"action-btn download-btn\" (click)=\"onDownload(file)\" title=\"Tải xuống\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 3V13M10 13L6 9M10 13L14 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M3 15V16C3 16.5523 3.44772 17 4 17H16C16.5523 17 17 16.5523 17 16V15\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <button class=\"action-btn delete-btn\" (click)=\"onDelete(file)\" title=\"Xóa\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 5H16M7 5V4C7 3.44772 7.44772 3 8 3H12C12.5523 3 13 3.44772 13 4V5M8 9V14M12 9V14M5 5L6 16C6 16.5523 6.44772 17 7 17H13C13.5523 17 14 16.5523 14 16L15 5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\r\nimport { NzTimePickerModule } from 'ng-zorro-antd/time-picker';\r\n\r\nexport type DatePickerMode = 'date' | 'week' | 'month' | 'quarter' | 'year';\r\nexport type RangePickerMode = 'date' | 'week' | 'month' | 'year';\r\nexport type DatePickerValue = Date | [Date, Date] | null;\r\n\r\n@Component({\r\n selector: 'app-date-picker',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, NzDatePickerModule, NzTimePickerModule],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DatePickerComponent implements OnInit, ControlValueAccessor {\r\n // ============ Input Properties ============\r\n\r\n /** Picker mode: date, week, month, quarter, year */\r\n @Input() mode: DatePickerMode = 'date';\r\n\r\n /** Enable time selection */\r\n @Input() showTime = false;\r\n\r\n /** Enable range picker mode */\r\n @Input() isRange = false;\r\n\r\n /** Range picker mode (only used when isRange = true) */\r\n @Input() rangeMode: RangePickerMode = 'date';\r\n\r\n /** Placeholder text */\r\n @Input() placeholder = 'Chọn ngày';\r\n\r\n /** Range placeholder texts */\r\n @Input() rangePlaceholder: [string, string] = [\r\n 'Ngày bắt đầu',\r\n 'Ngày kết thúc',\r\n ];\r\n\r\n /** Date format string */\r\n @Input() format = 'dd/MM/yyyy';\r\n\r\n /** Disable the picker */\r\n @Input() disabled = false;\r\n\r\n /** Allow clearing selection */\r\n @Input() allowClear = true;\r\n\r\n /** Size of the picker: 'large' | 'default' | 'small' */\r\n @Input() size: 'large' | 'default' | 'small' = 'default';\r\n\r\n /** Show border */\r\n @Input() bordered = true;\r\n\r\n /** Inline mode (no popup) */\r\n @Input() inline = false;\r\n\r\n /** Custom CSS class for popup */\r\n @Input() popupClassName = '';\r\n\r\n /** Dropdown position */\r\n @Input() dropdownPosition:\r\n | 'bottomLeft'\r\n | 'bottomRight'\r\n | 'topLeft'\r\n | 'topRight' = 'bottomLeft';\r\n\r\n /** Disable specific dates */\r\n @Input() disabledDate: (current: Date) => boolean = () => false;\r\n\r\n /** Width of the picker */\r\n @Input() width: string = '100%';\r\n\r\n /** Height of the picker */\r\n @Input() height: string = '36px';\r\n\r\n // ============ Output Events ============\r\n\r\n /** Emits when date changes */\r\n @Output() dateChange = new EventEmitter<Date | null>();\r\n\r\n /** Emits when date range changes */\r\n @Output() rangeChange = new EventEmitter<[Date, Date] | null>();\r\n\r\n /** Emits when picker opens/closes */\r\n @Output() openChange = new EventEmitter<boolean>();\r\n\r\n /** Emits when OK button clicked (for showTime mode) */\r\n @Output() ok = new EventEmitter<DatePickerValue>();\r\n\r\n /** Emits when calendar mode changes */\r\n @Output() panelChange = new EventEmitter<any>();\r\n\r\n // ============ Internal Properties ============\r\n\r\n /** Single date value */\r\n selectedDate: Date | null = null;\r\n\r\n /** Range date value */\r\n selectedRange: [Date, Date] | null = null;\r\n\r\n /** Time format when showTime is enabled */\r\n get timeFormat(): string {\r\n return this.showTime ? 'HH:mm:ss' : '';\r\n }\r\n\r\n /** Full format including time */\r\n get fullFormat(): string {\r\n return this.showTime ? `${this.format} HH:mm:ss` : this.format;\r\n }\r\n\r\n // ============ ControlValueAccessor Implementation ============\r\n\r\n private onChange: (value: DatePickerValue) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n writeValue(value: DatePickerValue): void {\r\n if (this.isRange) {\r\n this.selectedRange = value as [Date, Date] | null;\r\n } else {\r\n this.selectedDate = value as Date | null;\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: DatePickerValue) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // ============ Lifecycle Hooks ============\r\n\r\n ngOnInit(): void {\r\n this.initializeFormat();\r\n }\r\n\r\n // ============ Methods ============\r\n\r\n private initializeFormat(): void {\r\n // Set default format based on mode if not explicitly set\r\n if (this.format === 'dd/MM/yyyy') {\r\n switch (this.mode) {\r\n case 'week':\r\n this.format = 'yyyy-ww';\r\n break;\r\n case 'month':\r\n this.format = 'MM/yyyy';\r\n break;\r\n case 'quarter':\r\n this.format = 'yyyy-[Q]Q';\r\n break;\r\n case 'year':\r\n this.format = 'yyyy';\r\n break;\r\n default:\r\n this.format = 'dd/MM/yyyy';\r\n }\r\n }\r\n }\r\n\r\n onDateChange(date: Date | null): void {\r\n this.selectedDate = date;\r\n this.dateChange.emit(date);\r\n this.onChange(date);\r\n this.onTouched();\r\n }\r\n\r\n onRangeChange(range: [Date, Date] | null): void {\r\n this.selectedRange = range;\r\n this.rangeChange.emit(range);\r\n this.onChange(range);\r\n this.onTouched();\r\n }\r\n\r\n onOpenChange(open: boolean): void {\r\n this.openChange.emit(open);\r\n if (!open) {\r\n this.onTouched();\r\n }\r\n }\r\n\r\n onOk(result: Date | Date[] | null): void {\r\n this.ok.emit(result as Date | [Date, Date] | null);\r\n }\r\n\r\n onPanelChange(event: any): void {\r\n this.panelChange.emit(event);\r\n }\r\n\r\n /** Clear the selected value */\r\n clear(): void {\r\n if (this.isRange) {\r\n this.selectedRange = null;\r\n this.rangeChange.emit(null);\r\n this.onChange(null);\r\n } else {\r\n this.selectedDate = null;\r\n this.dateChange.emit(null);\r\n this.onChange(null);\r\n }\r\n }\r\n\r\n /** Set today as selected date */\r\n setToday(): void {\r\n const today = new Date();\r\n if (this.isRange) {\r\n this.selectedRange = [today, today];\r\n this.rangeChange.emit(this.selectedRange);\r\n this.onChange(this.selectedRange);\r\n } else {\r\n this.selectedDate = today;\r\n this.dateChange.emit(today);\r\n this.onChange(today);\r\n }\r\n }\r\n}\r\n","<!-- Single Date Picker -->\r\n@if (!isRange && !inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"placeholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n inputWidth=\"40px\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Inline Single Date Picker -->\r\n@if (!isRange && inline) {\r\n <nz-date-picker\r\n [nzMode]=\"mode\"\r\n [(ngModel)]=\"selectedDate\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--inline\"\r\n ></nz-date-picker>\r\n}\r\n\r\n<!-- Range Date Picker -->\r\n@if (isRange && !inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzPlaceHolder]=\"rangePlaceholder\"\r\n [nzDisabled]=\"disabled\"\r\n [nzAllowClear]=\"allowClear\"\r\n [nzSize]=\"size\"\r\n [nzVariant]=\"bordered ? 'outlined' : 'borderless'\"\r\n [nzDropdownClassName]=\"popupClassName\"\r\n [nzPlacement]=\"dropdownPosition\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOpenChange)=\"onOpenChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range\"\r\n ></nz-range-picker>\r\n}\r\n\r\n<!-- Inline Range Date Picker -->\r\n@if (isRange && inline) {\r\n <nz-range-picker\r\n [nzMode]=\"rangeMode\"\r\n [(ngModel)]=\"selectedRange\"\r\n [nzFormat]=\"fullFormat\"\r\n [nzShowTime]=\"showTime\"\r\n [nzDisabled]=\"disabled\"\r\n [nzDisabledDate]=\"disabledDate\"\r\n [nzInline]=\"true\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (ngModelChange)=\"onRangeChange($event)\"\r\n (nzOnOk)=\"onOk($event)\"\r\n (nzOnPanelChange)=\"onPanelChange($event)\"\r\n class=\"date-picker date-picker--range date-picker--inline\"\r\n ></nz-range-picker>\r\n}\r\n","/*\r\n * Public API Surface of intern-hub-layout\r\n */\r\n\r\n// Layout components\r\nexport * from './libs/layouts/header/header.component';\r\nexport * from './libs/layouts/sidebar/sidebar.component';\r\n\r\n// Shared components - Icons\r\nexport * from './libs/shared/components/icon/icon.component';\r\nexport * from './libs/shared/components/functional-label/functional-label.component';\r\n\r\n// Shared components - Buttons\r\nexport * from './libs/shared/components/button/button-container/button-container.component';\r\nexport * from './libs/shared/components/button/button-container/button-container.model';\r\nexport * from './libs/shared/components/button/label-button/label-button.component';\r\n\r\n// Shared components - Inputs\r\nexport * from './libs/shared/components/input/input-text/input-text.component';\r\nexport * from './libs/shared/components/input/input-stepper/input-stepper.component';\r\nexport * from './libs/shared/components/input/input-calendar/input-calendar.component';\r\n\r\n// Shared components - Table\r\nexport * from './libs/shared/components/table/table-header/table-header.component';\r\nexport * from './libs/shared/components/table/table-body/table-body.component';\r\n\r\n// Shared components - Approval\r\nexport * from './libs/shared/components/approval/approval-list/approval-list.component';\r\nexport * from './libs/shared/components/approval/approval-list-item/approval-list-item.component';\r\nexport * from './libs/shared/components/approval/approval-list-item/approval-list-item.model';\r\n\r\n// Shared components - Pop-ups\r\nexport * from './libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component';\r\n\r\n// Shared components - Modal\r\nexport * from './libs/shared/components/modal/modal.component';\r\n\r\n// Shared components - Upload Button\r\nexport * from './libs/shared/components/avatar-upload-button/avatar-upload-button.component';\r\n\r\n// Shared components - File Upload Dropzone\r\nexport * from './libs/shared/components/file-upload-dropzone/file-upload-dropzone.component';\r\n\r\n// Shared components - Date Picker\r\nexport * from './libs/shared/components/date-picker/date-picker.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -535,6 +535,10 @@ declare class DatePickerComponent implements OnInit, ControlValueAccessor {
|
|
|
535
535
|
dropdownPosition: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight';
|
|
536
536
|
/** Disable specific dates */
|
|
537
537
|
disabledDate: (current: Date) => boolean;
|
|
538
|
+
/** Width of the picker */
|
|
539
|
+
width: string;
|
|
540
|
+
/** Height of the picker */
|
|
541
|
+
height: string;
|
|
538
542
|
/** Emits when date changes */
|
|
539
543
|
dateChange: EventEmitter<Date | null>;
|
|
540
544
|
/** Emits when date range changes */
|
|
@@ -571,7 +575,7 @@ declare class DatePickerComponent implements OnInit, ControlValueAccessor {
|
|
|
571
575
|
/** Set today as selected date */
|
|
572
576
|
setToday(): void;
|
|
573
577
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent, never>;
|
|
574
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent, "app-date-picker", never, { "mode": { "alias": "mode"; "required": false; }; "showTime": { "alias": "showTime"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "rangeMode": { "alias": "rangeMode"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "rangePlaceholder": { "alias": "rangePlaceholder"; "required": false; }; "format": { "alias": "format"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "size": { "alias": "size"; "required": false; }; "bordered": { "alias": "bordered"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "popupClassName": { "alias": "popupClassName"; "required": false; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; }, { "dateChange": "dateChange"; "rangeChange": "rangeChange"; "openChange": "openChange"; "ok": "ok"; "panelChange": "panelChange"; }, never, never, true, never>;
|
|
578
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent, "app-date-picker", never, { "mode": { "alias": "mode"; "required": false; }; "showTime": { "alias": "showTime"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "rangeMode": { "alias": "rangeMode"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "rangePlaceholder": { "alias": "rangePlaceholder"; "required": false; }; "format": { "alias": "format"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "size": { "alias": "size"; "required": false; }; "bordered": { "alias": "bordered"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "popupClassName": { "alias": "popupClassName"; "required": false; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; }; "disabledDate": { "alias": "disabledDate"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; }, { "dateChange": "dateChange"; "rangeChange": "rangeChange"; "openChange": "openChange"; "ok": "ok"; "panelChange": "panelChange"; }, never, never, true, never>;
|
|
575
579
|
}
|
|
576
580
|
|
|
577
581
|
export { ApprovalListComponent, ApprovalListItemComponent, AvatarUploadButtonComponent, BUTTON_SIZE_MAP, ButtonContainerComponent, DatePickerComponent, FileUploadDropzoneComponent, FunctionalLabelComponent, HeaderComponent, IconComponent, InputCalendarComponent, InputStepperComponent, InputTextComponent, LabelButtonComponent, ModalComponent, PopUpConfirmComponent, SidebarComponent, TableBodyComponent, TableHeaderComponent };
|