@nettyapps/ntyui 0.1.2 → 0.1.4

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.
@@ -34,14 +34,14 @@ import { HttpClient } from '@angular/common/http';
34
34
  import { EnvironmentProxy } from '@nettyapps/ntycontract';
35
35
 
36
36
  class Ntyui {
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: Ntyui, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: Ntyui, isStandalone: false, selector: "lib-ntyui", ngImport: i0, template: `
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: Ntyui, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.11", type: Ntyui, isStandalone: false, selector: "lib-ntyui", ngImport: i0, template: `
39
39
  <p>
40
40
  ntyui works!
41
41
  </p>
42
42
  `, isInline: true, styles: [""] });
43
43
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: Ntyui, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: Ntyui, decorators: [{
45
45
  type: Component,
46
46
  args: [{ selector: 'lib-ntyui', standalone: false, template: `
47
47
  <p>
@@ -51,11 +51,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
51
51
  }] });
52
52
 
53
53
  class NtyuiModule {
54
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NtyuiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
55
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.7", ngImport: i0, type: NtyuiModule, declarations: [Ntyui], exports: [Ntyui] });
56
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NtyuiModule });
54
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NtyuiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
55
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.11", ngImport: i0, type: NtyuiModule, declarations: [Ntyui], exports: [Ntyui] });
56
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NtyuiModule });
57
57
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NtyuiModule, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NtyuiModule, decorators: [{
59
59
  type: NgModule,
60
60
  args: [{
61
61
  declarations: [Ntyui],
@@ -126,9 +126,6 @@ class UiBase {
126
126
  if (this.required()) {
127
127
  validators.push(Validators.required);
128
128
  }
129
- if (this.required()) {
130
- validators.push(Validators.requiredTrue);
131
- }
132
129
  if (this.disabled()) {
133
130
  this.ngModel.control.disable({ emitEvent: false });
134
131
  }
@@ -158,17 +155,17 @@ class UiBase {
158
155
  this.ngModel?.control.setValue('');
159
156
  this.onTouched();
160
157
  }
161
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: UiBase, deps: [], target: i0.ɵɵFactoryTarget.Component });
162
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: UiBase, isStandalone: true, selector: "ntyui-ui-base", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, errorMessages: { classPropertyName: "errorMessages", publicName: "errorMessages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, viewQueries: [{ propertyName: "inputModel", first: true, predicate: ["inputModel"], descendants: true, isSignal: true }], ngImport: i0, template: "<p>ui-base works!</p>\n", styles: [""] });
158
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: UiBase, deps: [], target: i0.ɵɵFactoryTarget.Component });
159
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.11", type: UiBase, isStandalone: true, selector: "ntyui-ui-base", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, errorMessages: { classPropertyName: "errorMessages", publicName: "errorMessages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, viewQueries: [{ propertyName: "inputModel", first: true, predicate: ["inputModel"], descendants: true, isSignal: true }], ngImport: i0, template: "<p>ui-base works!</p>\n", styles: [""] });
163
160
  }
164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: UiBase, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: UiBase, decorators: [{
165
162
  type: Component,
166
163
  args: [{ selector: 'ntyui-ui-base', imports: [], template: "<p>ui-base works!</p>\n" }]
167
- }], ctorParameters: () => [] });
164
+ }], ctorParameters: () => [], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], errorMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessages", required: false }] }], inputModel: [{ type: i0.ViewChild, args: ['inputModel', { isSignal: true }] }] } });
168
165
 
169
166
  class NettyUITextInput extends UiBase {
170
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUITextInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
171
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: NettyUITextInput, isStandalone: true, selector: "ntyui-text-input", providers: [
167
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUITextInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
168
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.11", type: NettyUITextInput, isStandalone: true, selector: "ntyui-text-input", providers: [
172
169
  {
173
170
  provide: NG_VALUE_ACCESSOR,
174
171
  useExisting: forwardRef(() => NettyUITextInput),
@@ -176,7 +173,7 @@ class NettyUITextInput extends UiBase {
176
173
  },
177
174
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n type=\"text\"\n matInput\n [placeholder]=\"placeholder()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"value.set($event)\"\n (input)=\"onInputChange($event)\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"value() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
178
175
  }
179
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUITextInput, decorators: [{
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUITextInput, decorators: [{
180
177
  type: Component,
181
178
  args: [{ selector: 'ntyui-text-input', imports: [
182
179
  FormsModule,
@@ -216,8 +213,8 @@ class NettyUIEmailInput extends UiBase {
216
213
  }
217
214
  return undefined;
218
215
  }
219
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIEmailInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
220
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: NettyUIEmailInput, isStandalone: true, selector: "ntyui-email-input", providers: [
216
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIEmailInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
217
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.11", type: NettyUIEmailInput, isStandalone: true, selector: "ntyui-email-input", providers: [
221
218
  {
222
219
  provide: NG_VALUE_ACCESSOR,
223
220
  useExisting: forwardRef(() => NettyUIEmailInput),
@@ -225,7 +222,7 @@ class NettyUIEmailInput extends UiBase {
225
222
  },
226
223
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n type=\"email\"\n matInput\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"value\"\n (input)=\"onInputChange($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"value() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
227
224
  }
228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIEmailInput, decorators: [{
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIEmailInput, decorators: [{
229
226
  type: Component,
230
227
  args: [{ selector: 'ntyui-email-input', imports: [
231
228
  FormsModule,
@@ -341,10 +338,10 @@ class NettyUIDateTime extends UiBase {
341
338
  this.onChange(null);
342
339
  this.onTouched();
343
340
  }
344
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIDateTime, deps: [], target: i0.ɵɵFactoryTarget.Component });
345
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: NettyUIDateTime, isStandalone: true, selector: "ntyui-date-time", inputs: { dateTimeValue: { classPropertyName: "dateTimeValue", publicName: "dateTimeValue", isSignal: true, isRequired: false, transformFunction: null }, dateLabel: { classPropertyName: "dateLabel", publicName: "dateLabel", isSignal: true, isRequired: false, transformFunction: null }, timeLabel: { classPropertyName: "timeLabel", publicName: "timeLabel", isSignal: true, isRequired: false, transformFunction: null }, dateRestriction: { classPropertyName: "dateRestriction", publicName: "dateRestriction", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateTimeValue: "dateTimeValueChange" }, viewQueries: [{ propertyName: "dateModel", first: true, predicate: ["dateModel"], descendants: true, isSignal: true }, { propertyName: "timeModel", first: true, predicate: ["timeModel"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"datetime-container\">\n <!-- Datetime -->\n <mat-form-field\n [appearance]=\"appearance()\"\n class=\"datepicker\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && dateValue()\"\n >\n <mat-label *ngIf=\"dateLabel()\">{{ dateLabel() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matDatepicker]=\"picker\"\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"dateValue\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate() ?? undefined\"\n [max]=\"maxDate() ?? undefined\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"dateValue() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn date-clear\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n\n <!-- Timepicker -->\n <mat-form-field\n class=\"time-field\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && timeValue()\"\n >\n <mat-label *ngIf=\"timeLabel()\">{{ timeLabel() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"timeValue\"\n (ngModelChange)=\"onTimeChange($event)\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n />\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-timepicker #timepicker />\n <mat-timepicker-toggle [for]=\"timepicker\" matSuffix />\n </mat-form-field>\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.datetime-container{display:flex;align-items:flex-start}@media (max-width: 600px){.datetime-container{flex-wrap:nowrap;overflow-x:auto;align-items:flex-start}}.datetime-container mat-form-field{flex:0 0 auto;min-width:150px}.datepicker{flex:1}.time-field{flex:0 0 120px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTimepickerModule }, { kind: "component", type: i7.MatTimepicker, selector: "mat-timepicker", inputs: ["interval", "options", "disableRipple", "aria-label", "aria-labelledby"], outputs: ["selected", "opened", "closed"], exportAs: ["matTimepicker"] }, { kind: "directive", type: i7.MatTimepickerInput, selector: "input[matTimepicker]", inputs: ["value", "matTimepicker", "matTimepickerMin", "matTimepickerMax", "matTimepickerOpenOnClick", "disabled"], outputs: ["valueChange"], exportAs: ["matTimepickerInput"] }, { kind: "component", type: i7.MatTimepickerToggle, selector: "mat-timepicker-toggle", inputs: ["for", "aria-label", "aria-labelledby", "disabled", "tabIndex", "disableRipple"], exportAs: ["matTimepickerToggle"] }] });
341
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIDateTime, deps: [], target: i0.ɵɵFactoryTarget.Component });
342
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.11", type: NettyUIDateTime, isStandalone: true, selector: "ntyui-date-time", inputs: { dateTimeValue: { classPropertyName: "dateTimeValue", publicName: "dateTimeValue", isSignal: true, isRequired: false, transformFunction: null }, dateLabel: { classPropertyName: "dateLabel", publicName: "dateLabel", isSignal: true, isRequired: false, transformFunction: null }, timeLabel: { classPropertyName: "timeLabel", publicName: "timeLabel", isSignal: true, isRequired: false, transformFunction: null }, dateRestriction: { classPropertyName: "dateRestriction", publicName: "dateRestriction", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateTimeValue: "dateTimeValueChange" }, viewQueries: [{ propertyName: "dateModel", first: true, predicate: ["dateModel"], descendants: true, isSignal: true }, { propertyName: "timeModel", first: true, predicate: ["timeModel"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"datetime-container\">\n <!-- Datetime -->\n <mat-form-field\n [appearance]=\"appearance()\"\n class=\"datepicker\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && dateValue()\"\n >\n <mat-label *ngIf=\"dateLabel()\">{{ dateLabel() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matDatepicker]=\"picker\"\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"dateValue\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate() ?? undefined\"\n [max]=\"maxDate() ?? undefined\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"dateValue() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn date-clear\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n\n <!-- Timepicker -->\n <mat-form-field\n class=\"time-field\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && timeValue()\"\n >\n <mat-label *ngIf=\"timeLabel()\">{{ timeLabel() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"timeValue\"\n (ngModelChange)=\"onTimeChange($event)\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n />\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-timepicker #timepicker />\n <mat-timepicker-toggle [for]=\"timepicker\" matSuffix />\n </mat-form-field>\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.datetime-container{display:flex;align-items:flex-start}@media (max-width: 600px){.datetime-container{flex-wrap:nowrap;overflow-x:auto;align-items:flex-start}}.datetime-container mat-form-field{flex:0 0 auto;min-width:150px}.datepicker{flex:1}.time-field{flex:0 0 120px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTimepickerModule }, { kind: "component", type: i7.MatTimepicker, selector: "mat-timepicker", inputs: ["interval", "options", "disableRipple", "aria-label", "aria-labelledby"], outputs: ["selected", "opened", "closed"], exportAs: ["matTimepicker"] }, { kind: "directive", type: i7.MatTimepickerInput, selector: "input[matTimepicker]", inputs: ["value", "matTimepicker", "matTimepickerMin", "matTimepickerMax", "matTimepickerOpenOnClick", "disabled"], outputs: ["valueChange"], exportAs: ["matTimepickerInput"] }, { kind: "component", type: i7.MatTimepickerToggle, selector: "mat-timepicker-toggle", inputs: ["for", "aria-label", "aria-labelledby", "disabled", "tabIndex", "disableRipple"], exportAs: ["matTimepickerToggle"] }] });
346
343
  }
347
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIDateTime, decorators: [{
344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIDateTime, decorators: [{
348
345
  type: Component,
349
346
  args: [{ selector: 'ntyui-date-time', imports: [
350
347
  FormsModule,
@@ -357,7 +354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
357
354
  MatIconModule,
358
355
  MatTimepickerModule,
359
356
  ], template: "<div class=\"datetime-container\">\n <!-- Datetime -->\n <mat-form-field\n [appearance]=\"appearance()\"\n class=\"datepicker\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && dateValue()\"\n >\n <mat-label *ngIf=\"dateLabel()\">{{ dateLabel() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matDatepicker]=\"picker\"\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"dateValue\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate() ?? undefined\"\n [max]=\"maxDate() ?? undefined\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"dateValue() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn date-clear\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n\n <!-- Timepicker -->\n <mat-form-field\n class=\"time-field\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && timeValue()\"\n >\n <mat-label *ngIf=\"timeLabel()\">{{ timeLabel() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"timeValue\"\n (ngModelChange)=\"onTimeChange($event)\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n />\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-timepicker #timepicker />\n <mat-timepicker-toggle [for]=\"timepicker\" matSuffix />\n </mat-form-field>\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.datetime-container{display:flex;align-items:flex-start}@media (max-width: 600px){.datetime-container{flex-wrap:nowrap;overflow-x:auto;align-items:flex-start}}.datetime-container mat-form-field{flex:0 0 auto;min-width:150px}.datepicker{flex:1}.time-field{flex:0 0 120px}\n"] }]
360
- }], ctorParameters: () => [] });
357
+ }], ctorParameters: () => [], propDecorators: { dateTimeValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateTimeValue", required: false }] }, { type: i0.Output, args: ["dateTimeValueChange"] }], dateLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateLabel", required: false }] }], timeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeLabel", required: false }] }], dateRestriction: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateRestriction", required: false }] }], timeFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeFormat", required: false }] }], dateModel: [{ type: i0.ViewChild, args: ['dateModel', { isSignal: true }] }], timeModel: [{ type: i0.ViewChild, args: ['timeModel', { isSignal: true }] }] } });
361
358
 
362
359
  class NettyUIDatePicker extends UiBase {
363
360
  // Constants
@@ -448,8 +445,8 @@ class NettyUIDatePicker extends UiBase {
448
445
  this.onChange(this.required() ? null : this.NULL_DATE);
449
446
  this.onTouched();
450
447
  }
451
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIDatePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
452
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.7", type: NettyUIDatePicker, isStandalone: true, selector: "ntyui-date-picker", inputs: { dateRestriction: { classPropertyName: "dateRestriction", publicName: "dateRestriction", isSignal: true, isRequired: false, transformFunction: null }, dateValue: { classPropertyName: "dateValue", publicName: "dateValue", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateValue: "dateValueChange", selectedDate: "selectedDateChange" }, providers: [
448
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIDatePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
449
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.11", type: NettyUIDatePicker, isStandalone: true, selector: "ntyui-date-picker", inputs: { dateRestriction: { classPropertyName: "dateRestriction", publicName: "dateRestriction", isSignal: true, isRequired: false, transformFunction: null }, dateValue: { classPropertyName: "dateValue", publicName: "dateValue", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateValue: "dateValueChange", selectedDate: "selectedDateChange" }, providers: [
453
450
  {
454
451
  provide: NG_VALUE_ACCESSOR,
455
452
  useExisting: forwardRef(() => NettyUIDatePicker),
@@ -457,7 +454,7 @@ class NettyUIDatePicker extends UiBase {
457
454
  },
458
455
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n [appearance]=\"appearance()\"\n class=\"example-full-width\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && selectedDate()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matDatepicker]=\"picker\"\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"selectedDate\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate() ?? undefined\"\n [max]=\"maxDate() ?? undefined\"\n />\n\n <button\n mat-icon-button\n matSuffix\n [class.invisible]=\"!selectedDate() || disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn date-clear\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.mat-datepicker-toggle{margin-right:5px}.clear-btn{opacity:1;transition:opacity .2s}.clear-btn.invisible{opacity:0;pointer-events:none}.mat-form-field-suffix{display:flex;align-items:center;gap:4px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i5.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i5.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
459
456
  }
460
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIDatePicker, decorators: [{
457
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIDatePicker, decorators: [{
461
458
  type: Component,
462
459
  args: [{ selector: 'ntyui-date-picker', imports: [
463
460
  FormsModule,
@@ -475,7 +472,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
475
472
  multi: true,
476
473
  },
477
474
  ], template: "<mat-form-field\n [appearance]=\"appearance()\"\n class=\"example-full-width\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && selectedDate()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matDatepicker]=\"picker\"\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"selectedDate\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate() ?? undefined\"\n [max]=\"maxDate() ?? undefined\"\n />\n\n <button\n mat-icon-button\n matSuffix\n [class.invisible]=\"!selectedDate() || disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn date-clear\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.mat-datepicker-toggle{margin-right:5px}.clear-btn{opacity:1;transition:opacity .2s}.clear-btn.invisible{opacity:0;pointer-events:none}.mat-form-field-suffix{display:flex;align-items:center;gap:4px}\n"] }]
478
- }], ctorParameters: () => [] });
475
+ }], ctorParameters: () => [], propDecorators: { dateRestriction: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateRestriction", required: false }] }], dateValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateValue", required: false }] }, { type: i0.Output, args: ["dateValueChange"] }], selectedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedDate", required: false }] }, { type: i0.Output, args: ["selectedDateChange"] }] } });
479
476
 
480
477
  class NettyUIMaskedInput extends UiBase {
481
478
  // Input properties
@@ -593,8 +590,8 @@ class NettyUIMaskedInput extends UiBase {
593
590
  }
594
591
  return undefined;
595
592
  }
596
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIMaskedInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
597
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.7", type: NettyUIMaskedInput, isStandalone: true, selector: "ntyui-masked-input", inputs: { mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
593
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIMaskedInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
594
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.11", type: NettyUIMaskedInput, isStandalone: true, selector: "ntyui-masked-input", inputs: { mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
598
595
  {
599
596
  provide: NG_VALUE_ACCESSOR,
600
597
  useExisting: forwardRef(() => NettyUIMaskedInput),
@@ -602,7 +599,7 @@ class NettyUIMaskedInput extends UiBase {
602
599
  },
603
600
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"value\"\n (input)=\"onInputChange($event)\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"value() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
604
601
  }
605
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIMaskedInput, decorators: [{
602
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIMaskedInput, decorators: [{
606
603
  type: Component,
607
604
  args: [{ selector: 'ntyui-masked-input', imports: [
608
605
  FormsModule,
@@ -618,7 +615,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
618
615
  multi: true,
619
616
  },
620
617
  ], template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"value\"\n (input)=\"onInputChange($event)\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"value() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel.invalid && (inputModel.dirty || inputModel.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"] }]
621
- }] });
618
+ }], propDecorators: { mask: [{ type: i0.Input, args: [{ isSignal: true, alias: "mask", required: false }] }] } });
622
619
 
623
620
  class NettyUICarousel {
624
621
  slides = input([
@@ -663,13 +660,13 @@ class NettyUICarousel {
663
660
  this.selectedIndex.update((currentIndex) => currentIndex < this.slides().length - 1 ? currentIndex + 1 : 0);
664
661
  }, 3000);
665
662
  }
666
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUICarousel, deps: [], target: i0.ɵɵFactoryTarget.Component });
667
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.7", type: NettyUICarousel, isStandalone: true, selector: "ntyui-carousel", inputs: { slides: { classPropertyName: "slides", publicName: "slides", isSignal: true, isRequired: false, transformFunction: null }, indicators: { classPropertyName: "indicators", publicName: "indicators", isSignal: true, isRequired: false, transformFunction: null }, showText: { classPropertyName: "showText", publicName: "showText", isSignal: true, isRequired: false, transformFunction: null }, textPosition: { classPropertyName: "textPosition", publicName: "textPosition", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div *ngIf=\"slides() && slides().length > 0\" class=\"carousel-container\">\n <ng-container *ngFor=\"let slide of slides(); let i = index\">\n <div class=\"slide-container\" [class.active]=\"selectedIndex() === i\">\n <div class=\"image-container\">\n <img\n [src]=\"slide.imageSrc\"\n [alt]=\"slide.imageAlt\"\n [ngClass]=\"{ 'image-active': selectedIndex() === i }\"\n />\n </div>\n\n <div\n *ngIf=\"showText()\"\n class=\"text-container\"\n [class]=\"'text-' + textPosition()\"\n >\n <h2 *ngIf=\"slide.title\" class=\"slide-title\">{{ slide.title }}</h2>\n <p *ngIf=\"slide.description\" class=\"slide-description\">\n {{ slide.description }}\n </p>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"indicators()\" class=\"carousel-dot-container\">\n <span\n *ngFor=\"let dot of slides(); let i = index\"\n class=\"dot\"\n [ngClass]=\"{ active: selectedIndex() === i }\"\n (click)=\"selectImage(i)\"\n ></span>\n </div>\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.carousel-container{position:relative;margin:auto;text-align:center;width:100%;height:100%;border-radius:15px;display:flex;flex-direction:column;justify-content:center;overflow:hidden}.carousel-container .slide-container{position:relative;width:100%;height:100%;display:none}.carousel-container .slide-container.active{display:block}.carousel-container img{display:none;border-radius:15px;width:100%;height:100%;object-fit:cover}.carousel-container img.image-active{display:block}.carousel-container .text-container{position:absolute;color:#fff;background:#00000080;padding:1rem;border-radius:8px;max-width:80%;transition:all .3s ease;margin-bottom:20px}.carousel-container .text-container.text-bottom{bottom:20px;left:50%;transform:translate(-50%);text-align:center}.carousel-container .text-container.text-top{top:20px;left:50%;transform:translate(-50%);text-align:center}.carousel-container .text-container.text-left{left:20px;top:50%;transform:translateY(-50%);text-align:left}.carousel-container .text-container.text-right{right:20px;top:50%;transform:translateY(-50%);text-align:right}.carousel-container .text-container .slide-title{margin:0 0 .5rem;font-size:1.5rem;font-weight:700;text-shadow:1px 1px 3px rgba(0,0,0,.8)}.carousel-container .text-container .slide-description{margin:0;font-size:1rem;text-shadow:1px 1px 2px rgba(0,0,0,.8)}.carousel-container .carousel-dot-container{position:absolute;right:0;left:0;bottom:0;display:flex;justify-content:center;padding:0;margin-bottom:1rem;z-index:2}.carousel-container .dot{cursor:pointer;height:13px;width:13px;margin:0 5px;background-color:#fff;border-radius:50%;display:inline-block;transition:opacity .6s ease;opacity:.5}.carousel-container .dot.active,.carousel-container .dot:hover{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }] });
663
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUICarousel, deps: [], target: i0.ɵɵFactoryTarget.Component });
664
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.11", type: NettyUICarousel, isStandalone: true, selector: "ntyui-carousel", inputs: { slides: { classPropertyName: "slides", publicName: "slides", isSignal: true, isRequired: false, transformFunction: null }, indicators: { classPropertyName: "indicators", publicName: "indicators", isSignal: true, isRequired: false, transformFunction: null }, showText: { classPropertyName: "showText", publicName: "showText", isSignal: true, isRequired: false, transformFunction: null }, textPosition: { classPropertyName: "textPosition", publicName: "textPosition", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div *ngIf=\"slides() && slides().length > 0\" class=\"carousel-container\">\n <ng-container *ngFor=\"let slide of slides(); let i = index\">\n <div class=\"slide-container\" [class.active]=\"selectedIndex() === i\">\n <div class=\"image-container\">\n <img\n [src]=\"slide.imageSrc\"\n [alt]=\"slide.imageAlt\"\n [ngClass]=\"{ 'image-active': selectedIndex() === i }\"\n />\n </div>\n\n <div\n *ngIf=\"showText()\"\n class=\"text-container\"\n [class]=\"'text-' + textPosition()\"\n >\n <h2 *ngIf=\"slide.title\" class=\"slide-title\">{{ slide.title }}</h2>\n <p *ngIf=\"slide.description\" class=\"slide-description\">\n {{ slide.description }}\n </p>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"indicators()\" class=\"carousel-dot-container\">\n <span\n *ngFor=\"let dot of slides(); let i = index\"\n class=\"dot\"\n [ngClass]=\"{ active: selectedIndex() === i }\"\n (click)=\"selectImage(i)\"\n ></span>\n </div>\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.carousel-container{position:relative;margin:auto;text-align:center;width:100%;height:100%;border-radius:15px;display:flex;flex-direction:column;justify-content:center;overflow:hidden}.carousel-container .slide-container{position:relative;width:100%;height:100%;display:none}.carousel-container .slide-container.active{display:block}.carousel-container img{display:none;border-radius:15px;width:100%;height:100%;object-fit:cover}.carousel-container img.image-active{display:block}.carousel-container .text-container{position:absolute;color:#fff;background:#00000080;padding:1rem;border-radius:8px;max-width:80%;transition:all .3s ease;margin-bottom:20px}.carousel-container .text-container.text-bottom{bottom:20px;left:50%;transform:translate(-50%);text-align:center}.carousel-container .text-container.text-top{top:20px;left:50%;transform:translate(-50%);text-align:center}.carousel-container .text-container.text-left{left:20px;top:50%;transform:translateY(-50%);text-align:left}.carousel-container .text-container.text-right{right:20px;top:50%;transform:translateY(-50%);text-align:right}.carousel-container .text-container .slide-title{margin:0 0 .5rem;font-size:1.5rem;font-weight:700;text-shadow:1px 1px 3px rgba(0,0,0,.8)}.carousel-container .text-container .slide-description{margin:0;font-size:1rem;text-shadow:1px 1px 2px rgba(0,0,0,.8)}.carousel-container .carousel-dot-container{position:absolute;right:0;left:0;bottom:0;display:flex;justify-content:center;padding:0;margin-bottom:1rem;z-index:2}.carousel-container .dot{cursor:pointer;height:13px;width:13px;margin:0 5px;background-color:#fff;border-radius:50%;display:inline-block;transition:opacity .6s ease;opacity:.5}.carousel-container .dot.active,.carousel-container .dot:hover{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }] });
668
665
  }
669
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUICarousel, decorators: [{
666
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUICarousel, decorators: [{
670
667
  type: Component,
671
668
  args: [{ selector: 'ntyui-carousel', imports: [CommonModule, FormsModule], template: "<div *ngIf=\"slides() && slides().length > 0\" class=\"carousel-container\">\n <ng-container *ngFor=\"let slide of slides(); let i = index\">\n <div class=\"slide-container\" [class.active]=\"selectedIndex() === i\">\n <div class=\"image-container\">\n <img\n [src]=\"slide.imageSrc\"\n [alt]=\"slide.imageAlt\"\n [ngClass]=\"{ 'image-active': selectedIndex() === i }\"\n />\n </div>\n\n <div\n *ngIf=\"showText()\"\n class=\"text-container\"\n [class]=\"'text-' + textPosition()\"\n >\n <h2 *ngIf=\"slide.title\" class=\"slide-title\">{{ slide.title }}</h2>\n <p *ngIf=\"slide.description\" class=\"slide-description\">\n {{ slide.description }}\n </p>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"indicators()\" class=\"carousel-dot-container\">\n <span\n *ngFor=\"let dot of slides(); let i = index\"\n class=\"dot\"\n [ngClass]=\"{ active: selectedIndex() === i }\"\n (click)=\"selectImage(i)\"\n ></span>\n </div>\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.carousel-container{position:relative;margin:auto;text-align:center;width:100%;height:100%;border-radius:15px;display:flex;flex-direction:column;justify-content:center;overflow:hidden}.carousel-container .slide-container{position:relative;width:100%;height:100%;display:none}.carousel-container .slide-container.active{display:block}.carousel-container img{display:none;border-radius:15px;width:100%;height:100%;object-fit:cover}.carousel-container img.image-active{display:block}.carousel-container .text-container{position:absolute;color:#fff;background:#00000080;padding:1rem;border-radius:8px;max-width:80%;transition:all .3s ease;margin-bottom:20px}.carousel-container .text-container.text-bottom{bottom:20px;left:50%;transform:translate(-50%);text-align:center}.carousel-container .text-container.text-top{top:20px;left:50%;transform:translate(-50%);text-align:center}.carousel-container .text-container.text-left{left:20px;top:50%;transform:translateY(-50%);text-align:left}.carousel-container .text-container.text-right{right:20px;top:50%;transform:translateY(-50%);text-align:right}.carousel-container .text-container .slide-title{margin:0 0 .5rem;font-size:1.5rem;font-weight:700;text-shadow:1px 1px 3px rgba(0,0,0,.8)}.carousel-container .text-container .slide-description{margin:0;font-size:1rem;text-shadow:1px 1px 2px rgba(0,0,0,.8)}.carousel-container .carousel-dot-container{position:absolute;right:0;left:0;bottom:0;display:flex;justify-content:center;padding:0;margin-bottom:1rem;z-index:2}.carousel-container .dot{cursor:pointer;height:13px;width:13px;margin:0 5px;background-color:#fff;border-radius:50%;display:inline-block;transition:opacity .6s ease;opacity:.5}.carousel-container .dot.active,.carousel-container .dot:hover{opacity:1}\n"] }]
672
- }], ctorParameters: () => [] });
669
+ }], ctorParameters: () => [], propDecorators: { slides: [{ type: i0.Input, args: [{ isSignal: true, alias: "slides", required: false }] }], indicators: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicators", required: false }] }], showText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showText", required: false }] }], textPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "textPosition", required: false }] }] } });
673
670
 
674
671
  class NettyUICheckboxToggle extends UiBase {
675
672
  // Checkbox and toggle properties
@@ -697,8 +694,24 @@ class NettyUICheckboxToggle extends UiBase {
697
694
  writeValue(value) {
698
695
  this.checked.set(value);
699
696
  }
700
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUICheckboxToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
701
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NettyUICheckboxToggle, isStandalone: true, selector: "ntyui-checkbox-toggle", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, providers: [
697
+ updateValidators() {
698
+ if (!this.inputModel()?.control)
699
+ return;
700
+ const validators = [];
701
+ if (this.required()) {
702
+ validators.push(Validators.requiredTrue);
703
+ }
704
+ if (this.disabled()) {
705
+ this.inputModel()?.control.disable({ emitEvent: false });
706
+ }
707
+ else {
708
+ this.inputModel()?.control.enable({ emitEvent: false });
709
+ }
710
+ this.inputModel()?.control.setValidators(validators);
711
+ this.inputModel()?.control.updateValueAndValidity();
712
+ }
713
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUICheckboxToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
714
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: NettyUICheckboxToggle, isStandalone: true, selector: "ntyui-checkbox-toggle", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, providers: [
702
715
  {
703
716
  provide: NG_VALUE_ACCESSOR,
704
717
  useExisting: forwardRef(() => NettyUICheckboxToggle),
@@ -706,7 +719,7 @@ class NettyUICheckboxToggle extends UiBase {
706
719
  },
707
720
  ], usesInheritance: true, ngImport: i0, template: "@if (type() === 'checkbox') {\n<mat-checkbox\n #inputModel=\"ngModel\"\n [ngModel]=\"checked()\"\n (ngModelChange)=\"onValueChange($event)\"\n [disabled]=\"disabled()\"\n [labelPosition]=\"labelPosition()\"\n [class.circle]=\"shape() === 'circle'\"\n [class.rectangle]=\"shape() === 'rectangle'\"\n>\n {{ label() }}\n</mat-checkbox>\n} @else {\n<mat-slide-toggle\n #inputModel=\"ngModel\"\n [ngModel]=\"checked()\"\n (ngModelChange)=\"onValueChange($event)\"\n [disabled]=\"disabled()\"\n class=\"slide-toggle\"\n>\n {{ label() }}\n</mat-slide-toggle>\n}\n\n<!-- Error message display using UiBase's getErrorMessage() -->\n@if (ngModel?.invalid && (ngModel?.dirty || ngModel?.touched)) {\n<div class=\"error-message\">{{ getErrorMessage() }}</div>\n}\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i2$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }] });
708
721
  }
709
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUICheckboxToggle, decorators: [{
722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUICheckboxToggle, decorators: [{
710
723
  type: Component,
711
724
  args: [{ selector: 'ntyui-checkbox-toggle', imports: [MatCheckboxModule, MatSlideToggleModule, FormsModule, CommonModule], providers: [
712
725
  {
@@ -715,7 +728,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
715
728
  multi: true,
716
729
  },
717
730
  ], template: "@if (type() === 'checkbox') {\n<mat-checkbox\n #inputModel=\"ngModel\"\n [ngModel]=\"checked()\"\n (ngModelChange)=\"onValueChange($event)\"\n [disabled]=\"disabled()\"\n [labelPosition]=\"labelPosition()\"\n [class.circle]=\"shape() === 'circle'\"\n [class.rectangle]=\"shape() === 'rectangle'\"\n>\n {{ label() }}\n</mat-checkbox>\n} @else {\n<mat-slide-toggle\n #inputModel=\"ngModel\"\n [ngModel]=\"checked()\"\n (ngModelChange)=\"onValueChange($event)\"\n [disabled]=\"disabled()\"\n class=\"slide-toggle\"\n>\n {{ label() }}\n</mat-slide-toggle>\n}\n\n<!-- Error message display using UiBase's getErrorMessage() -->\n@if (ngModel?.invalid && (ngModel?.dirty || ngModel?.touched)) {\n<div class=\"error-message\">{{ getErrorMessage() }}</div>\n}\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"] }]
718
- }], ctorParameters: () => [] });
731
+ }], ctorParameters: () => [], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], labelPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelPosition", required: false }] }] } });
719
732
 
720
733
  class NettyUIButton extends UiBase {
721
734
  // Input signals
@@ -760,13 +773,13 @@ class NettyUIButton extends UiBase {
760
773
  ngOnDestroy() {
761
774
  this.timerSub?.unsubscribe();
762
775
  }
763
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIButton, deps: null, target: i0.ɵɵFactoryTarget.Component });
764
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NettyUIButton, isStandalone: true, selector: "ntyui-button", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, isFilled: { classPropertyName: "isFilled", publicName: "isFilled", isSignal: true, isRequired: false, transformFunction: null }, menuReference: { classPropertyName: "menuReference", publicName: "menuReference", isSignal: true, isRequired: false, transformFunction: null }, disableOnClick: { classPropertyName: "disableOnClick", publicName: "disableOnClick", isSignal: true, isRequired: false, transformFunction: null }, disableDuration: { classPropertyName: "disableDuration", publicName: "disableDuration", isSignal: true, isRequired: false, transformFunction: null }, waitingText: { classPropertyName: "waitingText", publicName: "waitingText", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, usesInheritance: true, ngImport: i0, template: "@if (type() === 'menu') {\n <button\n type=\"button\"\n mat-button\n class=\"ui-menu-button\"\n [disabled]=\"isDisabled()\"\n (click)=\"onClicked()\"\n [matMenuTriggerFor]=\"menuReference()\">\n @if (icon() && countdown() === 0) {\n <mat-icon>{{ icon() }}</mat-icon>\n }\n <span>{{ getDisplayText() }}</span>\n @if (menuReference() && !(countdown() > 0)){\n <mat-icon class=\"menu-icon\" >arrow_drop_down</mat-icon>\n }\n </button>\n} @else {\n @if(isFilled()){\n <button mat-raised-button color=\"primary\" [disabled]=\"isDisabled()\" (click)=\"onClicked()\" \n class=\"regular-button\" matButton=\"filled\">\n @if(icon()){\n <mat-icon >{{ icon() }}</mat-icon>\n }\n {{ getDisplayText() }}\n </button>\n } @else {\n <button mat-stroked-button color=\"primary\" [disabled]=\"isDisabled()\" (click)=\"onClicked()\" \n class=\"regular-button\">\n @if(icon()){\n <mat-icon >{{ icon() }}</mat-icon>\n }\n {{ getDisplayText() }}\n </button>\n } \n}", styles: ["@charset \"UTF-8\";.example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.flex-container{display:flex;justify-content:center;align-items:center}.ui-menu-button{flex-direction:row-reverse}.ui-menu-button mat-icon{font-size:20px;width:24px;height:24px;margin:15px}.ui-menu-button .menu-icon{margin-left:10px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: CommonModule }] });
776
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIButton, deps: null, target: i0.ɵɵFactoryTarget.Component });
777
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: NettyUIButton, isStandalone: true, selector: "ntyui-button", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, isFilled: { classPropertyName: "isFilled", publicName: "isFilled", isSignal: true, isRequired: false, transformFunction: null }, menuReference: { classPropertyName: "menuReference", publicName: "menuReference", isSignal: true, isRequired: false, transformFunction: null }, disableOnClick: { classPropertyName: "disableOnClick", publicName: "disableOnClick", isSignal: true, isRequired: false, transformFunction: null }, disableDuration: { classPropertyName: "disableDuration", publicName: "disableDuration", isSignal: true, isRequired: false, transformFunction: null }, waitingText: { classPropertyName: "waitingText", publicName: "waitingText", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, usesInheritance: true, ngImport: i0, template: "@if (type() === 'menu') {\n <button\n type=\"button\"\n mat-button\n class=\"ui-menu-button\"\n [disabled]=\"isDisabled()\"\n (click)=\"onClicked()\"\n [matMenuTriggerFor]=\"menuReference()\">\n @if (icon() && countdown() === 0) {\n <mat-icon>{{ icon() }}</mat-icon>\n }\n <span>{{ getDisplayText() }}</span>\n @if (menuReference() && !(countdown() > 0)){\n <mat-icon class=\"menu-icon\" >arrow_drop_down</mat-icon>\n }\n </button>\n} @else {\n @if(isFilled()){\n <button mat-raised-button color=\"primary\" [disabled]=\"isDisabled()\" (click)=\"onClicked()\" \n class=\"regular-button\" matButton=\"filled\">\n @if(icon()){\n <mat-icon >{{ icon() }}</mat-icon>\n }\n {{ getDisplayText() }}\n </button>\n } @else {\n <button mat-stroked-button color=\"primary\" [disabled]=\"isDisabled()\" (click)=\"onClicked()\" \n class=\"regular-button\">\n @if(icon()){\n <mat-icon >{{ icon() }}</mat-icon>\n }\n {{ getDisplayText() }}\n </button>\n } \n}", styles: ["@charset \"UTF-8\";.example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.flex-container{display:flex;justify-content:center;align-items:center}.ui-menu-button{flex-direction:row-reverse}.ui-menu-button mat-icon{font-size:20px;width:24px;height:24px;margin:15px}.ui-menu-button .menu-icon{margin-left:10px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: CommonModule }] });
765
778
  }
766
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIButton, decorators: [{
779
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIButton, decorators: [{
767
780
  type: Component,
768
781
  args: [{ selector: 'ntyui-button', imports: [MatButtonModule, MatIconModule, MatMenuModule, CommonModule], template: "@if (type() === 'menu') {\n <button\n type=\"button\"\n mat-button\n class=\"ui-menu-button\"\n [disabled]=\"isDisabled()\"\n (click)=\"onClicked()\"\n [matMenuTriggerFor]=\"menuReference()\">\n @if (icon() && countdown() === 0) {\n <mat-icon>{{ icon() }}</mat-icon>\n }\n <span>{{ getDisplayText() }}</span>\n @if (menuReference() && !(countdown() > 0)){\n <mat-icon class=\"menu-icon\" >arrow_drop_down</mat-icon>\n }\n </button>\n} @else {\n @if(isFilled()){\n <button mat-raised-button color=\"primary\" [disabled]=\"isDisabled()\" (click)=\"onClicked()\" \n class=\"regular-button\" matButton=\"filled\">\n @if(icon()){\n <mat-icon >{{ icon() }}</mat-icon>\n }\n {{ getDisplayText() }}\n </button>\n } @else {\n <button mat-stroked-button color=\"primary\" [disabled]=\"isDisabled()\" (click)=\"onClicked()\" \n class=\"regular-button\">\n @if(icon()){\n <mat-icon >{{ icon() }}</mat-icon>\n }\n {{ getDisplayText() }}\n </button>\n } \n}", styles: ["@charset \"UTF-8\";.example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.flex-container{display:flex;justify-content:center;align-items:center}.ui-menu-button{flex-direction:row-reverse}.ui-menu-button mat-icon{font-size:20px;width:24px;height:24px;margin:15px}.ui-menu-button .menu-icon{margin-left:10px}\n"] }]
769
- }] });
782
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], isFilled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFilled", required: false }] }], menuReference: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuReference", required: false }] }], disableOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableOnClick", required: false }] }], disableDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableDuration", required: false }] }], waitingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "waitingText", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
770
783
 
771
784
  class NettyUIFilterButton extends UiBase {
772
785
  elementRef;
@@ -870,13 +883,13 @@ class NettyUIFilterButton extends UiBase {
870
883
  ngOnDestroy() {
871
884
  clearTimeout(this.debounceTimer);
872
885
  }
873
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIFilterButton, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
874
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NettyUIFilterButton, isStandalone: true, selector: "ntyui-filter-button", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disableOnClick: { classPropertyName: "disableOnClick", publicName: "disableOnClick", isSignal: true, isRequired: false, transformFunction: null }, disableDuration: { classPropertyName: "disableDuration", publicName: "disableDuration", isSignal: true, isRequired: false, transformFunction: null }, waitingText: { classPropertyName: "waitingText", publicName: "waitingText", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked", onSearch: "onSearch" }, host: { listeners: { "document:click": "handleDocumentClick($event)" } }, viewQueries: [{ propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (type() === 'filter') {\n<button\n mat-button\n [disabled]=\"isDisabled()\"\n (click)=\"onClicked()\"\n class=\"filter-button\"\n>\n <mat-icon *ngIf=\"icon()\" [style.color]=\"iconColor()\">{{ icon() }}</mat-icon>\n</button>\n\n@if (showFilterInput()) {\n<input\n #filterInput\n type=\"text\"\n class=\"filter-input\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"_searchValue()\"\n (ngModelChange)=\"onSearchInputChange($event)\"\n (click)=\"onFilterInputClick($event)\"\n/>\n} }\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.filter-input{position:absolute;z-index:10;width:300px;height:30px;border-radius:5px}.filter-button mat-icon{font-size:24px;width:24px;height:24px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
886
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIFilterButton, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
887
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: NettyUIFilterButton, isStandalone: true, selector: "ntyui-filter-button", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disableOnClick: { classPropertyName: "disableOnClick", publicName: "disableOnClick", isSignal: true, isRequired: false, transformFunction: null }, disableDuration: { classPropertyName: "disableDuration", publicName: "disableDuration", isSignal: true, isRequired: false, transformFunction: null }, waitingText: { classPropertyName: "waitingText", publicName: "waitingText", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked", onSearch: "onSearch" }, host: { listeners: { "document:click": "handleDocumentClick($event)" } }, viewQueries: [{ propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (type() === 'filter') {\n<button\n mat-button\n [disabled]=\"isDisabled()\"\n (click)=\"onClicked()\"\n class=\"filter-button\"\n>\n <mat-icon *ngIf=\"icon()\" [style.color]=\"iconColor()\">{{ icon() }}</mat-icon>\n</button>\n\n@if (showFilterInput()) {\n<input\n #filterInput\n type=\"text\"\n class=\"filter-input\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"_searchValue()\"\n (ngModelChange)=\"onSearchInputChange($event)\"\n (click)=\"onFilterInputClick($event)\"\n/>\n} }\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.filter-input{position:absolute;z-index:10;width:300px;height:30px;border-radius:5px}.filter-button mat-icon{font-size:24px;width:24px;height:24px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
875
888
  }
876
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIFilterButton, decorators: [{
889
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIFilterButton, decorators: [{
877
890
  type: Component,
878
891
  args: [{ selector: 'ntyui-filter-button', imports: [MatButtonModule, MatIconModule, CommonModule, FormsModule], template: "@if (type() === 'filter') {\n<button\n mat-button\n [disabled]=\"isDisabled()\"\n (click)=\"onClicked()\"\n class=\"filter-button\"\n>\n <mat-icon *ngIf=\"icon()\" [style.color]=\"iconColor()\">{{ icon() }}</mat-icon>\n</button>\n\n@if (showFilterInput()) {\n<input\n #filterInput\n type=\"text\"\n class=\"filter-input\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"_searchValue()\"\n (ngModelChange)=\"onSearchInputChange($event)\"\n (click)=\"onFilterInputClick($event)\"\n/>\n} }\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.filter-input{position:absolute;z-index:10;width:300px;height:30px;border-radius:5px}.filter-button mat-icon{font-size:24px;width:24px;height:24px}\n"] }]
879
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { handleDocumentClick: [{
892
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disableOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableOnClick", required: false }] }], disableDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableDuration", required: false }] }], waitingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "waitingText", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], searchValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchValue", required: false }] }], filterInput: [{ type: i0.ViewChild, args: ['filterInput', { isSignal: true }] }], clicked: [{ type: i0.Output, args: ["clicked"] }], onSearch: [{ type: i0.Output, args: ["onSearch"] }], handleDocumentClick: [{
880
893
  type: HostListener,
881
894
  args: ['document:click', ['$event']]
882
895
  }] } });
@@ -903,8 +916,8 @@ class NettyUINumberInput extends UiBase {
903
916
  }, 2000);
904
917
  }
905
918
  }
906
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUINumberInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
907
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: NettyUINumberInput, isStandalone: true, selector: "ntyui-number-input", providers: [
919
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUINumberInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
920
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.11", type: NettyUINumberInput, isStandalone: true, selector: "ntyui-number-input", providers: [
908
921
  {
909
922
  provide: NG_VALUE_ACCESSOR,
910
923
  useExisting: forwardRef(() => NettyUINumberInput),
@@ -912,7 +925,7 @@ class NettyUINumberInput extends UiBase {
912
925
  },
913
926
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n name=\"calculation\"\n #calcInput\n class=\"calculation-input\"\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"value\"\n (input)=\"onInputChange($event)\"\n (keydown.enter)=\"calculateExpression($event)\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"value() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.calculation-input{text-align:right;padding-left:-24px}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
914
927
  }
915
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUINumberInput, decorators: [{
928
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUINumberInput, decorators: [{
916
929
  type: Component,
917
930
  args: [{ selector: 'ntyui-number-input', imports: [
918
931
  MatInputModule,
@@ -936,8 +949,8 @@ class NettyUISearchInput extends UiBase {
936
949
  emitSearch() {
937
950
  this.search.emit(this.value());
938
951
  }
939
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUISearchInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
940
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: NettyUISearchInput, isStandalone: true, selector: "ntyui-search-input", outputs: { search: "search" }, providers: [
952
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUISearchInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
953
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.11", type: NettyUISearchInput, isStandalone: true, selector: "ntyui-search-input", outputs: { search: "search" }, providers: [
941
954
  {
942
955
  provide: NG_VALUE_ACCESSOR,
943
956
  useExisting: forwardRef(() => NettyUISearchInput),
@@ -945,7 +958,7 @@ class NettyUISearchInput extends UiBase {
945
958
  },
946
959
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n\n <input\n #inputModel=\"ngModel\"\n type=\"text\"\n matInput\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"value\"\n (input)=\"onInputChange($event)\"\n (keyup.enter)=\"emitSearch()\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"value() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <button\n class=\"search-icon\"\n mat-icon-button\n matSuffix\n (click)=\"emitSearch()\"\n aria-label=\"Search\"\n >\n <mat-icon matSuffix>search</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
947
960
  }
948
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUISearchInput, decorators: [{
961
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUISearchInput, decorators: [{
949
962
  type: Component,
950
963
  args: [{ selector: 'ntyui-search-input', imports: [
951
964
  FormsModule,
@@ -961,7 +974,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
961
974
  multi: true,
962
975
  },
963
976
  ], template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n\n <input\n #inputModel=\"ngModel\"\n type=\"text\"\n matInput\n [placeholder]=\"placeholder()\"\n [(ngModel)]=\"value\"\n (input)=\"onInputChange($event)\"\n (keyup.enter)=\"emitSearch()\"\n />\n\n <button\n mat-icon-button\n matSuffix\n *ngIf=\"value() && !disabled()\"\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n\n <button\n class=\"search-icon\"\n mat-icon-button\n matSuffix\n (click)=\"emitSearch()\"\n aria-label=\"Search\"\n >\n <mat-icon matSuffix>search</mat-icon>\n </button>\n\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}\n"] }]
964
- }] });
977
+ }], propDecorators: { search: [{ type: i0.Output, args: ["search"] }] } });
965
978
 
966
979
  class NettyUISelect extends UiBase {
967
980
  // Input properties
@@ -1015,8 +1028,8 @@ class NettyUISelect extends UiBase {
1015
1028
  this.selectedValue.set(value);
1016
1029
  }
1017
1030
  }
1018
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUISelect, deps: [], target: i0.ɵɵFactoryTarget.Component });
1019
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NettyUISelect, isStandalone: true, selector: "ntyui-select", inputs: { showNoneOption: { classPropertyName: "showNoneOption", publicName: "showNoneOption", isSignal: true, isRequired: false, transformFunction: null }, nullAllowed: { classPropertyName: "nullAllowed", publicName: "nullAllowed", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showCustomTrigger: { classPropertyName: "showCustomTrigger", publicName: "showCustomTrigger", isSignal: true, isRequired: false, transformFunction: null }, enumList: { classPropertyName: "enumList", publicName: "enumList", isSignal: true, isRequired: false, transformFunction: null }, selectedValue: { classPropertyName: "selectedValue", publicName: "selectedValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { enumList: "enumListChange", selectedValue: "selectedValueChange" }, providers: [
1031
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUISelect, deps: [], target: i0.ɵɵFactoryTarget.Component });
1032
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: NettyUISelect, isStandalone: true, selector: "ntyui-select", inputs: { showNoneOption: { classPropertyName: "showNoneOption", publicName: "showNoneOption", isSignal: true, isRequired: false, transformFunction: null }, nullAllowed: { classPropertyName: "nullAllowed", publicName: "nullAllowed", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showCustomTrigger: { classPropertyName: "showCustomTrigger", publicName: "showCustomTrigger", isSignal: true, isRequired: false, transformFunction: null }, enumList: { classPropertyName: "enumList", publicName: "enumList", isSignal: true, isRequired: false, transformFunction: null }, selectedValue: { classPropertyName: "selectedValue", publicName: "selectedValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { enumList: "enumListChange", selectedValue: "selectedValueChange" }, providers: [
1020
1033
  {
1021
1034
  provide: NG_VALUE_ACCESSOR,
1022
1035
  useExisting: forwardRef(() => NettyUISelect),
@@ -1024,7 +1037,7 @@ class NettyUISelect extends UiBase {
1024
1037
  },
1025
1038
  ], viewQueries: [{ propertyName: "selectModel", first: true, predicate: ["selectModel"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <mat-select\n #inputModel=\"ngModel\"\n [(ngModel)]=\"selectedValue\"\n [placeholder]=\"placeholder()\"\n [required]=\"required() && !nullAllowed()\"\n [multiple]=\"multiple()\"\n >\n <!-- Custom trigger -->\n @if (showCustomTrigger()) {\n <mat-select-trigger>\n @if (multiple()) { {{ getSelectedText(selectedValue()?.[0]) || '' }} @if\n ((selectedValue()?.length || 0) > 1) {\n <span class=\"additional-selection\">\n (+{{ getSelectedCount() - 1 }} {{ getSelectedCount() === 2 ? 'other' :\n 'others' }})\n </span>\n } } @else { {{ getSelectedText(selectedValue()) || '' }} }\n </mat-select-trigger>\n }\n <!-- None option -->\n <mat-option *ngIf=\"hasNoneOption()\" [value]=\"null\">\n {{ placeholder() || 'Hepsi' }}\n </mat-option>\n <!-- Dynamic options -->\n <mat-option *ngFor=\"let option of enumList()\" [value]=\"option.value \">\n {{ option.text }}\n </mat-option>\n </mat-select>\n\n @if (inputModel?.hasError('required')) {\n <mat-error>{{ getErrorMessage() }}</mat-error>\n }\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.example-full-width{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i2$2.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i2$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }] });
1026
1039
  }
1027
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUISelect, decorators: [{
1040
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUISelect, decorators: [{
1028
1041
  type: Component,
1029
1042
  args: [{ selector: 'ntyui-select', imports: [
1030
1043
  MatFormFieldModule,
@@ -1039,7 +1052,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
1039
1052
  multi: true,
1040
1053
  },
1041
1054
  ], template: "<mat-form-field\n class=\"example-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <mat-select\n #inputModel=\"ngModel\"\n [(ngModel)]=\"selectedValue\"\n [placeholder]=\"placeholder()\"\n [required]=\"required() && !nullAllowed()\"\n [multiple]=\"multiple()\"\n >\n <!-- Custom trigger -->\n @if (showCustomTrigger()) {\n <mat-select-trigger>\n @if (multiple()) { {{ getSelectedText(selectedValue()?.[0]) || '' }} @if\n ((selectedValue()?.length || 0) > 1) {\n <span class=\"additional-selection\">\n (+{{ getSelectedCount() - 1 }} {{ getSelectedCount() === 2 ? 'other' :\n 'others' }})\n </span>\n } } @else { {{ getSelectedText(selectedValue()) || '' }} }\n </mat-select-trigger>\n }\n <!-- None option -->\n <mat-option *ngIf=\"hasNoneOption()\" [value]=\"null\">\n {{ placeholder() || 'Hepsi' }}\n </mat-option>\n <!-- Dynamic options -->\n <mat-option *ngFor=\"let option of enumList()\" [value]=\"option.value \">\n {{ option.text }}\n </mat-option>\n </mat-select>\n\n @if (inputModel?.hasError('required')) {\n <mat-error>{{ getErrorMessage() }}</mat-error>\n }\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.example-full-width{width:100%}\n"] }]
1042
- }], ctorParameters: () => [] });
1055
+ }], ctorParameters: () => [], propDecorators: { showNoneOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNoneOption", required: false }] }], nullAllowed: [{ type: i0.Input, args: [{ isSignal: true, alias: "nullAllowed", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], showCustomTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCustomTrigger", required: false }] }], enumList: [{ type: i0.Input, args: [{ isSignal: true, alias: "enumList", required: false }] }, { type: i0.Output, args: ["enumListChange"] }], selectedValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValue", required: false }] }, { type: i0.Output, args: ["selectedValueChange"] }], selectModel: [{ type: i0.ViewChild, args: ['selectModel', { isSignal: true }] }] } });
1043
1056
 
1044
1057
  class NettyUITimePicker extends UiBase {
1045
1058
  timeValue = model(new Date('1900-01-01T00:00:00.000Z'), ...(ngDevMode ? [{ debugName: "timeValue" }] : []));
@@ -1068,10 +1081,10 @@ class NettyUITimePicker extends UiBase {
1068
1081
  fixedDate.setMinutes(newTime.getMinutes());
1069
1082
  this.timeValue.set(fixedDate);
1070
1083
  }
1071
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUITimePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
1072
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.1.7", type: NettyUITimePicker, isStandalone: true, selector: "ntyui-time-picker", inputs: { timeValue: { classPropertyName: "timeValue", publicName: "timeValue", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { timeValue: "timeValueChange" }, providers: [provideNativeDateAdapter()], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && timeValue()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matTimepicker]=\"picker\"\n [(ngModel)]=\"timeValue\"\n (ngModelChange)=\"onTimeChange($event)\"\n [placeholder]=\"placeholder()\"\n />\n\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-timepicker #picker />\n <mat-timepicker-toggle [for]=\"picker\" matSuffix />\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}mat-form-field{margin-right:16px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTimepickerModule }, { kind: "component", type: i7.MatTimepicker, selector: "mat-timepicker", inputs: ["interval", "options", "disableRipple", "aria-label", "aria-labelledby"], outputs: ["selected", "opened", "closed"], exportAs: ["matTimepicker"] }, { kind: "directive", type: i7.MatTimepickerInput, selector: "input[matTimepicker]", inputs: ["value", "matTimepicker", "matTimepickerMin", "matTimepickerMax", "matTimepickerOpenOnClick", "disabled"], outputs: ["valueChange"], exportAs: ["matTimepickerInput"] }, { kind: "component", type: i7.MatTimepickerToggle, selector: "mat-timepicker-toggle", inputs: ["for", "aria-label", "aria-labelledby", "disabled", "tabIndex", "disableRipple"], exportAs: ["matTimepickerToggle"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1084
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUITimePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
1085
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.11", type: NettyUITimePicker, isStandalone: true, selector: "ntyui-time-picker", inputs: { timeValue: { classPropertyName: "timeValue", publicName: "timeValue", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { timeValue: "timeValueChange" }, providers: [provideNativeDateAdapter()], usesInheritance: true, ngImport: i0, template: "<mat-form-field\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && timeValue()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matTimepicker]=\"picker\"\n [(ngModel)]=\"timeValue\"\n (ngModelChange)=\"onTimeChange($event)\"\n [placeholder]=\"placeholder()\"\n />\n\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-timepicker #picker />\n <mat-timepicker-toggle [for]=\"picker\" matSuffix />\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}mat-form-field{margin-right:16px}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTimepickerModule }, { kind: "component", type: i7.MatTimepicker, selector: "mat-timepicker", inputs: ["interval", "options", "disableRipple", "aria-label", "aria-labelledby"], outputs: ["selected", "opened", "closed"], exportAs: ["matTimepicker"] }, { kind: "directive", type: i7.MatTimepickerInput, selector: "input[matTimepicker]", inputs: ["value", "matTimepicker", "matTimepickerMin", "matTimepickerMax", "matTimepickerOpenOnClick", "disabled"], outputs: ["valueChange"], exportAs: ["matTimepickerInput"] }, { kind: "component", type: i7.MatTimepickerToggle, selector: "mat-timepicker-toggle", inputs: ["for", "aria-label", "aria-labelledby", "disabled", "tabIndex", "disableRipple"], exportAs: ["matTimepickerToggle"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1073
1086
  }
1074
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUITimePicker, decorators: [{
1087
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUITimePicker, decorators: [{
1075
1088
  type: Component,
1076
1089
  args: [{ selector: 'ntyui-time-picker', imports: [
1077
1090
  MatFormFieldModule,
@@ -1082,7 +1095,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
1082
1095
  CommonModule,
1083
1096
  ReactiveFormsModule,
1084
1097
  ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideNativeDateAdapter()], template: "<mat-form-field\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && timeValue()\"\n>\n <mat-label *ngIf=\"label()\">{{ label() }}</mat-label>\n <input\n #inputModel=\"ngModel\"\n matInput\n [matTimepicker]=\"picker\"\n [(ngModel)]=\"timeValue\"\n (ngModelChange)=\"onTimeChange($event)\"\n [placeholder]=\"placeholder()\"\n />\n\n <mat-error\n *ngIf=\"inputModel?.invalid && (inputModel?.dirty || inputModel?.touched)\"\n >\n {{ getErrorMessage() }}\n </mat-error>\n\n <mat-timepicker #picker />\n <mat-timepicker-toggle [for]=\"picker\" matSuffix />\n</mat-form-field>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}mat-form-field{margin-right:16px}\n"] }]
1085
- }], ctorParameters: () => [] });
1098
+ }], ctorParameters: () => [], propDecorators: { timeValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeValue", required: false }] }, { type: i0.Output, args: ["timeValueChange"] }], timeFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeFormat", required: false }] }] } });
1086
1099
 
1087
1100
  class NettyUITree {
1088
1101
  // Input signals
@@ -1324,10 +1337,10 @@ class NettyUITree {
1324
1337
  }
1325
1338
  return node.children.every((child) => child.disabled || this.allChildrenDisabled(child));
1326
1339
  }
1327
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUITree, deps: [], target: i0.ɵɵFactoryTarget.Component });
1328
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NettyUITree, isStandalone: true, selector: "ntyui-tree", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, selectedIds: { classPropertyName: "selectedIds", publicName: "selectedIds", isSignal: true, isRequired: false, transformFunction: null }, selectBranch: { classPropertyName: "selectBranch", publicName: "selectBranch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "dataChange", selectionMode: "selectionModeChange", selectedIds: "selectedIdsChange" }, ngImport: i0, template: "<div class=\"tree-container\">\n @for (node of treeData(); track node.id) {\n <div class=\"tree-node\" [style.margin-left.px]=\"getNodeLevel(node) * 24\">\n <!-- Expand/Collapse button -->\n @if (node.children && node.children.length > 0) {\n <button\n mat-icon-button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node);\"\n [attr.aria-label]=\"node.expanded ? 'Collapse' : 'Expand'\"\n >\n <mat-icon>{{ node.expanded ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n } @else {\n <!-- Empty space for leaf nodes -->\n <div class=\"expand-spacer\"></div>\n }\n\n <!-- Checkbox for multiple selection -->\n @if (selectionMode() === 'multiple') {\n <mat-checkbox\n class=\"node-checkbox\"\n [checked]=\"node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (change)=\"onCheckboxChange(node, $event)\"\n [id]=\"'checkbox-' + node.id\"\n [disabled]=\"node.disabled || allChildrenDisabled(node)\"\n >\n {{ node.text }}\n </mat-checkbox>\n }\n\n <!-- Radio button for single selection -->\n @if (selectionMode() === 'single') {\n <mat-radio-button\n class=\"node-radio\"\n [checked]=\"node.selected || false\"\n (change)=\"onRadioChange(node)\"\n [name]=\"'tree-radio-' + componentId\"\n [id]=\"'radio-' + node.id\"\n [value]=\"node.id\"\n [disabled]=\"node.disabled || allChildrenDisabled(node)\"\n >\n {{ node.text }}\n </mat-radio-button>\n }\n </div>\n }\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.tree-container{font-family:Roboto,sans-serif;-webkit-user-select:none;user-select:none;padding:8px 0}.tree-node{display:flex;align-items:center;padding:4px 0;min-height:40px}.expand-btn{width:32px;height:32px;margin-right:8px;flex-shrink:0}.expand-btn mat-icon{font-size:18px;width:18px;height:18px}.expand-spacer{width:40px;display:inline-block;flex-shrink:0}.node-checkbox,.node-radio{flex-grow:1}.node-checkbox ::ng-deep .mat-mdc-checkbox-label,.node-radio ::ng-deep .mat-mdc-radio-label{width:100%}.tree-node:hover{background-color:#0000000a;border-radius:4px}.node-checkbox.mat-mdc-checkbox-checked,.node-radio.mat-mdc-radio-checked{background-color:#3f51b514;border-radius:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "component", type: i2$3.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1340
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUITree, deps: [], target: i0.ɵɵFactoryTarget.Component });
1341
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: NettyUITree, isStandalone: true, selector: "ntyui-tree", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, selectedIds: { classPropertyName: "selectedIds", publicName: "selectedIds", isSignal: true, isRequired: false, transformFunction: null }, selectBranch: { classPropertyName: "selectBranch", publicName: "selectBranch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "dataChange", selectionMode: "selectionModeChange", selectedIds: "selectedIdsChange" }, ngImport: i0, template: "<div class=\"tree-container\">\n @for (node of treeData(); track node.id) {\n <div class=\"tree-node\" [style.margin-left.px]=\"getNodeLevel(node) * 24\">\n <!-- Expand/Collapse button -->\n @if (node.children && node.children.length > 0) {\n <button\n mat-icon-button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node);\"\n [attr.aria-label]=\"node.expanded ? 'Collapse' : 'Expand'\"\n >\n <mat-icon>{{ node.expanded ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n } @else {\n <!-- Empty space for leaf nodes -->\n <div class=\"expand-spacer\"></div>\n }\n\n <!-- Checkbox for multiple selection -->\n @if (selectionMode() === 'multiple') {\n <mat-checkbox\n class=\"node-checkbox\"\n [checked]=\"node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (change)=\"onCheckboxChange(node, $event)\"\n [id]=\"'checkbox-' + node.id\"\n [disabled]=\"node.disabled || allChildrenDisabled(node)\"\n >\n {{ node.text }}\n </mat-checkbox>\n }\n\n <!-- Radio button for single selection -->\n @if (selectionMode() === 'single') {\n <mat-radio-button\n class=\"node-radio\"\n [checked]=\"node.selected || false\"\n (change)=\"onRadioChange(node)\"\n [name]=\"'tree-radio-' + componentId\"\n [id]=\"'radio-' + node.id\"\n [value]=\"node.id\"\n [disabled]=\"node.disabled || allChildrenDisabled(node)\"\n >\n {{ node.text }}\n </mat-radio-button>\n }\n </div>\n }\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.tree-container{font-family:Roboto,sans-serif;-webkit-user-select:none;user-select:none;padding:8px 0}.tree-node{display:flex;align-items:center;padding:4px 0;min-height:40px}.expand-btn{width:32px;height:32px;margin-right:8px;flex-shrink:0}.expand-btn mat-icon{font-size:18px;width:18px;height:18px}.expand-spacer{width:40px;display:inline-block;flex-shrink:0}.node-checkbox,.node-radio{flex-grow:1}.node-checkbox ::ng-deep .mat-mdc-checkbox-label,.node-radio ::ng-deep .mat-mdc-radio-label{width:100%}.tree-node:hover{background-color:#0000000a;border-radius:4px}.node-checkbox.mat-mdc-checkbox-checked,.node-radio.mat-mdc-radio-checked{background-color:#3f51b514;border-radius:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "component", type: i2$3.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1329
1342
  }
1330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUITree, decorators: [{
1343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUITree, decorators: [{
1331
1344
  type: Component,
1332
1345
  args: [{ selector: 'ntyui-tree', imports: [
1333
1346
  CommonModule,
@@ -1336,7 +1349,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
1336
1349
  MatButtonModule,
1337
1350
  MatIconModule,
1338
1351
  ], template: "<div class=\"tree-container\">\n @for (node of treeData(); track node.id) {\n <div class=\"tree-node\" [style.margin-left.px]=\"getNodeLevel(node) * 24\">\n <!-- Expand/Collapse button -->\n @if (node.children && node.children.length > 0) {\n <button\n mat-icon-button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node);\"\n [attr.aria-label]=\"node.expanded ? 'Collapse' : 'Expand'\"\n >\n <mat-icon>{{ node.expanded ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n } @else {\n <!-- Empty space for leaf nodes -->\n <div class=\"expand-spacer\"></div>\n }\n\n <!-- Checkbox for multiple selection -->\n @if (selectionMode() === 'multiple') {\n <mat-checkbox\n class=\"node-checkbox\"\n [checked]=\"node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (change)=\"onCheckboxChange(node, $event)\"\n [id]=\"'checkbox-' + node.id\"\n [disabled]=\"node.disabled || allChildrenDisabled(node)\"\n >\n {{ node.text }}\n </mat-checkbox>\n }\n\n <!-- Radio button for single selection -->\n @if (selectionMode() === 'single') {\n <mat-radio-button\n class=\"node-radio\"\n [checked]=\"node.selected || false\"\n (change)=\"onRadioChange(node)\"\n [name]=\"'tree-radio-' + componentId\"\n [id]=\"'radio-' + node.id\"\n [value]=\"node.id\"\n [disabled]=\"node.disabled || allChildrenDisabled(node)\"\n >\n {{ node.text }}\n </mat-radio-button>\n }\n </div>\n }\n</div>\n", styles: [".example-full-width{width:100%;max-width:500px}.mat-mdc-form-field-subscript-wrapper{width:auto;height:0}.clear-btn{background:none;border:none;box-shadow:none;cursor:pointer}.search-icon{background:none;border:none;box-shadow:none;opacity:1;cursor:pointer}.search-icon:hover,.clear-btn:hover{color:var(--mat-sys-primary)}.required-field{background-color:var(--mat-sys-required)}.required-with-value{background-color:transparent!important}::ng-deep .circle .mdc-checkbox__background{border-radius:50%!important}::ng-deep .circle .mdc-checkbox__background:before{border-radius:50%!important}.tree-container{font-family:Roboto,sans-serif;-webkit-user-select:none;user-select:none;padding:8px 0}.tree-node{display:flex;align-items:center;padding:4px 0;min-height:40px}.expand-btn{width:32px;height:32px;margin-right:8px;flex-shrink:0}.expand-btn mat-icon{font-size:18px;width:18px;height:18px}.expand-spacer{width:40px;display:inline-block;flex-shrink:0}.node-checkbox,.node-radio{flex-grow:1}.node-checkbox ::ng-deep .mat-mdc-checkbox-label,.node-radio ::ng-deep .mat-mdc-radio-label{width:100%}.tree-node:hover{background-color:#0000000a;border-radius:4px}.node-checkbox.mat-mdc-checkbox-checked,.node-radio.mat-mdc-radio-checked{background-color:#3f51b514;border-radius:4px}\n"] }]
1339
- }], ctorParameters: () => [] });
1352
+ }], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }, { type: i0.Output, args: ["dataChange"] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }, { type: i0.Output, args: ["selectionModeChange"] }], selectedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIds", required: false }] }, { type: i0.Output, args: ["selectedIdsChange"] }], selectBranch: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectBranch", required: false }] }] } });
1340
1353
 
1341
1354
  class NettyUIColorPicker {
1342
1355
  // Two-way binding for the selected color (#RRGGBB format)
@@ -1433,10 +1446,10 @@ class NettyUIColorPicker {
1433
1446
  this.colorChange.emit(color);
1434
1447
  this.closePicker();
1435
1448
  }
1436
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIColorPicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
1437
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: NettyUIColorPicker, isStandalone: true, selector: "ntyui-color-picker", inputs: { selectedColor: { classPropertyName: "selectedColor", publicName: "selectedColor", isSignal: true, isRequired: false, transformFunction: null }, customColorPresets: { classPropertyName: "customColorPresets", publicName: "customColorPresets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedColor: "selectedColorChange", colorChange: "colorChange" }, viewQueries: [{ propertyName: "colorInput", first: true, predicate: ["colorInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<mat-form-field appearance=\"outline\" class=\"color-picker-input-container\">\n <span\n matPrefix\n class=\"color-preview\"\n [style.background-color]=\"selectedColor()\"\n (click)=\"togglePicker()\"\n ></span>\n\n <input\n matInput\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"onInputChange($event)\"\n placeholder=\"Renk Kodu (\u00F6rn: #FFFFFF)\"\n />\n\n <mat-icon matSuffix (click)=\"togglePicker()\">search</mat-icon>\n</mat-form-field>\n\n<input\n type=\"color\"\n class=\"hidden-color-input\"\n #colorInput\n [value]=\"selectedColor()\"\n (change)=\"onColorPickerChange($event)\"\n/>\n\n<!-- Custom color picker pop-up -->\n@if (isPickerVisible()) {\n<div class=\"custom-color-picker-overlay\" (click)=\"closePicker()\">\n <div class=\"custom-color-picker\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div class=\"picker-header\">\n <h3>{{'@Choose_Color' | translate}}</h3>\n <button class=\"close-btn\" (click)=\"closePicker()\" type=\"button\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"picker-content\">\n <!-- Custom color picker -->\n <div class=\"color-input-section\">\n <label class=\"section-label\"\n >{{'@Choose_Custom_Color' | translate}}</label\n >\n <input\n type=\"color\"\n [value]=\"selectedColor()\"\n (change)=\"onCustomColorChange($event)\"\n class=\"native-color-input\"\n />\n <span class=\"current-color\"\n >{{'@Available' | translate}}: {{ selectedColor() }}</span\n >\n </div>\n\n <!-- Custom colors (if there is) -->\n @if (hasCustomColors()) {\n <div class=\"color-presets-section\">\n <label class=\"section-label\">{{'@Defined_Colors' | translate}}</label>\n <div class=\"color-presets-grid\">\n @for (color of customColorPresets(); track color) {\n <div\n class=\"color-preset\"\n [style.background-color]=\"color\"\n (click)=\"selectColor(color)\"\n [class.selected]=\"color === selectedColor()\"\n [title]=\"color\"\n >\n @if (color === selectedColor()) {\n <mat-icon class=\"check-icon\">check</mat-icon>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Standard colors -->\n <div class=\"color-presets-section\">\n <label class=\"section-label\">\n {{ hasCustomColors() ? ('@Standard_Colors' | translate) :\n ('@Color_Palette' | translate) }}\n </label>\n <div class=\"color-presets-grid\">\n @for (color of defaultColorPresets(); track color) {\n <div\n class=\"color-preset\"\n [style.background-color]=\"color\"\n (click)=\"selectColor(color)\"\n [class.selected]=\"color === selectedColor()\"\n [title]=\"color\"\n >\n @if (color === selectedColor()) {\n <mat-icon class=\"check-icon\">check</mat-icon>\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n}\n", styles: [".color-picker-input-container{width:100%;max-width:280px}.color-preview{display:inline-block;width:20px;height:20px;margin-left:16px;border-radius:50%;border:2px solid #e0e0e0;cursor:pointer;margin-right:8px;transition:all .2s ease}.color-preview:hover{border-color:#999;transform:scale(1.1)}.hidden-color-input{display:none}.custom-color-picker-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000;animation:fadeIn .2s ease}.custom-color-picker{background:#fff;border-radius:12px;box-shadow:0 8px 32px #0003;width:min(90vw,340px);max-height:min(80vh,600px);overflow:hidden;animation:slideUp .2s ease}.picker-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e0e0e0;background:#fff}.picker-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.picker-header .close-btn{background:none;border:none;cursor:pointer;color:#666;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%}.picker-header .close-btn:hover{background-color:#f5f5f5;color:#333}.picker-header .close-btn mat-icon{font-size:20px;width:20px;height:20px}.picker-content{padding:20px;display:flex;flex-direction:column;gap:24px}.color-input-section{display:flex;flex-direction:column;gap:12px}.color-input-section .section-label{font-weight:600;color:#333;font-size:14px}.color-input-section .native-color-input{width:100%;height:48px;cursor:pointer;border:2px solid #e0e0e0;border-radius:8px}.color-input-section .native-color-input:hover{border-color:#ccc}.color-input-section .current-color{font-size:12px;color:#666;text-align:center}.color-presets-section .section-label{display:block;font-weight:600;color:#333;font-size:14px;margin-bottom:12px}.color-presets-section .color-presets-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.color-presets-section .color-presets-grid .color-preset{position:relative;width:100%;aspect-ratio:1;border-radius:8px;cursor:pointer;border:2px solid #e0e0e0;transition:all .2s ease}.color-presets-section .color-presets-grid .color-preset:hover{transform:scale(1.1);border-color:#999;box-shadow:0 4px 12px #00000026}.color-presets-section .color-presets-grid .color-preset.selected{border-color:#333;transform:scale(1.05)}.color-presets-section .color-presets-grid .color-preset .check-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;font-size:16px;width:16px;height:16px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.5))}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5$1.TranslatePipe, name: "translate" }] });
1449
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIColorPicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
1450
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: NettyUIColorPicker, isStandalone: true, selector: "ntyui-color-picker", inputs: { selectedColor: { classPropertyName: "selectedColor", publicName: "selectedColor", isSignal: true, isRequired: false, transformFunction: null }, customColorPresets: { classPropertyName: "customColorPresets", publicName: "customColorPresets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedColor: "selectedColorChange", colorChange: "colorChange" }, viewQueries: [{ propertyName: "colorInput", first: true, predicate: ["colorInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<mat-form-field appearance=\"outline\" class=\"color-picker-input-container\">\n <span\n matPrefix\n class=\"color-preview\"\n [style.background-color]=\"selectedColor()\"\n (click)=\"togglePicker()\"\n ></span>\n\n <input\n matInput\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"onInputChange($event)\"\n placeholder=\"Renk Kodu (\u00F6rn: #FFFFFF)\"\n />\n\n <mat-icon matSuffix (click)=\"togglePicker()\">search</mat-icon>\n</mat-form-field>\n\n<input\n type=\"color\"\n class=\"hidden-color-input\"\n #colorInput\n [value]=\"selectedColor()\"\n (change)=\"onColorPickerChange($event)\"\n/>\n\n<!-- Custom color picker pop-up -->\n@if (isPickerVisible()) {\n<div class=\"custom-color-picker-overlay\" (click)=\"closePicker()\">\n <div class=\"custom-color-picker\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div class=\"picker-header\">\n <h3>{{'@Choose_Color' | translate}}</h3>\n <button class=\"close-btn\" (click)=\"closePicker()\" type=\"button\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"picker-content\">\n <!-- Custom color picker -->\n <div class=\"color-input-section\">\n <label class=\"section-label\"\n >{{'@Choose_Custom_Color' | translate}}</label\n >\n <input\n type=\"color\"\n [value]=\"selectedColor()\"\n (change)=\"onCustomColorChange($event)\"\n class=\"native-color-input\"\n />\n <span class=\"current-color\"\n >{{'@Available' | translate}}: {{ selectedColor() }}</span\n >\n </div>\n\n <!-- Custom colors (if there is) -->\n @if (hasCustomColors()) {\n <div class=\"color-presets-section\">\n <label class=\"section-label\">{{'@Defined_Colors' | translate}}</label>\n <div class=\"color-presets-grid\">\n @for (color of customColorPresets(); track color) {\n <div\n class=\"color-preset\"\n [style.background-color]=\"color\"\n (click)=\"selectColor(color)\"\n [class.selected]=\"color === selectedColor()\"\n [title]=\"color\"\n >\n @if (color === selectedColor()) {\n <mat-icon class=\"check-icon\">check</mat-icon>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Standard colors -->\n <div class=\"color-presets-section\">\n <label class=\"section-label\">\n {{ hasCustomColors() ? ('@Standard_Colors' | translate) :\n ('@Color_Palette' | translate) }}\n </label>\n <div class=\"color-presets-grid\">\n @for (color of defaultColorPresets(); track color) {\n <div\n class=\"color-preset\"\n [style.background-color]=\"color\"\n (click)=\"selectColor(color)\"\n [class.selected]=\"color === selectedColor()\"\n [title]=\"color\"\n >\n @if (color === selectedColor()) {\n <mat-icon class=\"check-icon\">check</mat-icon>\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n}\n", styles: [".color-picker-input-container{width:100%;max-width:280px}.color-preview{display:inline-block;width:20px;height:20px;margin-left:16px;border-radius:50%;border:2px solid #e0e0e0;cursor:pointer;margin-right:8px;transition:all .2s ease}.color-preview:hover{border-color:#999;transform:scale(1.1)}.hidden-color-input{display:none}.custom-color-picker-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000;animation:fadeIn .2s ease}.custom-color-picker{background:#fff;border-radius:12px;box-shadow:0 8px 32px #0003;width:min(90vw,340px);max-height:min(80vh,600px);overflow:hidden;animation:slideUp .2s ease}.picker-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e0e0e0;background:#fff}.picker-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.picker-header .close-btn{background:none;border:none;cursor:pointer;color:#666;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%}.picker-header .close-btn:hover{background-color:#f5f5f5;color:#333}.picker-header .close-btn mat-icon{font-size:20px;width:20px;height:20px}.picker-content{padding:20px;display:flex;flex-direction:column;gap:24px}.color-input-section{display:flex;flex-direction:column;gap:12px}.color-input-section .section-label{font-weight:600;color:#333;font-size:14px}.color-input-section .native-color-input{width:100%;height:48px;cursor:pointer;border:2px solid #e0e0e0;border-radius:8px}.color-input-section .native-color-input:hover{border-color:#ccc}.color-input-section .current-color{font-size:12px;color:#666;text-align:center}.color-presets-section .section-label{display:block;font-weight:600;color:#333;font-size:14px;margin-bottom:12px}.color-presets-section .color-presets-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.color-presets-section .color-presets-grid .color-preset{position:relative;width:100%;aspect-ratio:1;border-radius:8px;cursor:pointer;border:2px solid #e0e0e0;transition:all .2s ease}.color-presets-section .color-presets-grid .color-preset:hover{transform:scale(1.1);border-color:#999;box-shadow:0 4px 12px #00000026}.color-presets-section .color-presets-grid .color-preset.selected{border-color:#333;transform:scale(1.05)}.color-presets-section .color-presets-grid .color-preset .check-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;font-size:16px;width:16px;height:16px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.5))}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5$1.TranslatePipe, name: "translate" }] });
1438
1451
  }
1439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyUIColorPicker, decorators: [{
1452
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyUIColorPicker, decorators: [{
1440
1453
  type: Component,
1441
1454
  args: [{ selector: 'ntyui-color-picker', imports: [
1442
1455
  FormsModule,
@@ -1445,7 +1458,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
1445
1458
  MatInputModule,
1446
1459
  TranslateModule,
1447
1460
  ], template: "<mat-form-field appearance=\"outline\" class=\"color-picker-input-container\">\n <span\n matPrefix\n class=\"color-preview\"\n [style.background-color]=\"selectedColor()\"\n (click)=\"togglePicker()\"\n ></span>\n\n <input\n matInput\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"onInputChange($event)\"\n placeholder=\"Renk Kodu (\u00F6rn: #FFFFFF)\"\n />\n\n <mat-icon matSuffix (click)=\"togglePicker()\">search</mat-icon>\n</mat-form-field>\n\n<input\n type=\"color\"\n class=\"hidden-color-input\"\n #colorInput\n [value]=\"selectedColor()\"\n (change)=\"onColorPickerChange($event)\"\n/>\n\n<!-- Custom color picker pop-up -->\n@if (isPickerVisible()) {\n<div class=\"custom-color-picker-overlay\" (click)=\"closePicker()\">\n <div class=\"custom-color-picker\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div class=\"picker-header\">\n <h3>{{'@Choose_Color' | translate}}</h3>\n <button class=\"close-btn\" (click)=\"closePicker()\" type=\"button\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"picker-content\">\n <!-- Custom color picker -->\n <div class=\"color-input-section\">\n <label class=\"section-label\"\n >{{'@Choose_Custom_Color' | translate}}</label\n >\n <input\n type=\"color\"\n [value]=\"selectedColor()\"\n (change)=\"onCustomColorChange($event)\"\n class=\"native-color-input\"\n />\n <span class=\"current-color\"\n >{{'@Available' | translate}}: {{ selectedColor() }}</span\n >\n </div>\n\n <!-- Custom colors (if there is) -->\n @if (hasCustomColors()) {\n <div class=\"color-presets-section\">\n <label class=\"section-label\">{{'@Defined_Colors' | translate}}</label>\n <div class=\"color-presets-grid\">\n @for (color of customColorPresets(); track color) {\n <div\n class=\"color-preset\"\n [style.background-color]=\"color\"\n (click)=\"selectColor(color)\"\n [class.selected]=\"color === selectedColor()\"\n [title]=\"color\"\n >\n @if (color === selectedColor()) {\n <mat-icon class=\"check-icon\">check</mat-icon>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Standard colors -->\n <div class=\"color-presets-section\">\n <label class=\"section-label\">\n {{ hasCustomColors() ? ('@Standard_Colors' | translate) :\n ('@Color_Palette' | translate) }}\n </label>\n <div class=\"color-presets-grid\">\n @for (color of defaultColorPresets(); track color) {\n <div\n class=\"color-preset\"\n [style.background-color]=\"color\"\n (click)=\"selectColor(color)\"\n [class.selected]=\"color === selectedColor()\"\n [title]=\"color\"\n >\n @if (color === selectedColor()) {\n <mat-icon class=\"check-icon\">check</mat-icon>\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n}\n", styles: [".color-picker-input-container{width:100%;max-width:280px}.color-preview{display:inline-block;width:20px;height:20px;margin-left:16px;border-radius:50%;border:2px solid #e0e0e0;cursor:pointer;margin-right:8px;transition:all .2s ease}.color-preview:hover{border-color:#999;transform:scale(1.1)}.hidden-color-input{display:none}.custom-color-picker-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000;animation:fadeIn .2s ease}.custom-color-picker{background:#fff;border-radius:12px;box-shadow:0 8px 32px #0003;width:min(90vw,340px);max-height:min(80vh,600px);overflow:hidden;animation:slideUp .2s ease}.picker-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e0e0e0;background:#fff}.picker-header h3{margin:0;font-size:16px;font-weight:600;color:#333}.picker-header .close-btn{background:none;border:none;cursor:pointer;color:#666;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%}.picker-header .close-btn:hover{background-color:#f5f5f5;color:#333}.picker-header .close-btn mat-icon{font-size:20px;width:20px;height:20px}.picker-content{padding:20px;display:flex;flex-direction:column;gap:24px}.color-input-section{display:flex;flex-direction:column;gap:12px}.color-input-section .section-label{font-weight:600;color:#333;font-size:14px}.color-input-section .native-color-input{width:100%;height:48px;cursor:pointer;border:2px solid #e0e0e0;border-radius:8px}.color-input-section .native-color-input:hover{border-color:#ccc}.color-input-section .current-color{font-size:12px;color:#666;text-align:center}.color-presets-section .section-label{display:block;font-weight:600;color:#333;font-size:14px;margin-bottom:12px}.color-presets-section .color-presets-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.color-presets-section .color-presets-grid .color-preset{position:relative;width:100%;aspect-ratio:1;border-radius:8px;cursor:pointer;border:2px solid #e0e0e0;transition:all .2s ease}.color-presets-section .color-presets-grid .color-preset:hover{transform:scale(1.1);border-color:#999;box-shadow:0 4px 12px #00000026}.color-presets-section .color-presets-grid .color-preset.selected{border-color:#333;transform:scale(1.05)}.color-presets-section .color-presets-grid .color-preset .check-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;font-size:16px;width:16px;height:16px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.5))}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}\n"] }]
1448
- }] });
1461
+ }], propDecorators: { selectedColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedColor", required: false }] }, { type: i0.Output, args: ["selectedColorChange"] }], customColorPresets: [{ type: i0.Input, args: [{ isSignal: true, alias: "customColorPresets", required: false }] }], colorChange: [{ type: i0.Output, args: ["colorChange"] }], colorInput: [{ type: i0.ViewChild, args: ['colorInput', { isSignal: true }] }] } });
1449
1462
 
1450
1463
  class NettyEnumValues {
1451
1464
  languageCode = '';
@@ -1479,10 +1492,10 @@ class NettyEnumStorageProxy {
1479
1492
  return [];
1480
1493
  return JSON.parse(data);
1481
1494
  }
1482
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyEnumStorageProxy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1483
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyEnumStorageProxy, providedIn: 'root' });
1495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyEnumStorageProxy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1496
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyEnumStorageProxy, providedIn: 'root' });
1484
1497
  }
1485
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NettyEnumStorageProxy, decorators: [{
1498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: NettyEnumStorageProxy, decorators: [{
1486
1499
  type: Injectable,
1487
1500
  args: [{
1488
1501
  providedIn: 'root',