@abp/ng.components 10.5.0 → 10.6.0-rc.2

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, input, viewChild, Optional, SkipSelf, ChangeDetectionStrategy, Component, InjectionToken, Injectable, forwardRef, Injector, effect, isSignal, TemplateRef, ViewContainerRef, Directive, viewChildren, signal, contentChild, LOCALE_ID, PLATFORM_ID, output, computed, Pipe, NgModule } from '@angular/core';
2
+ import { inject, ChangeDetectorRef, input, viewChild, Optional, SkipSelf, ChangeDetectionStrategy, Component, InjectionToken, Injectable, forwardRef, Injector, signal, computed, effect, isSignal, TemplateRef, ViewContainerRef, Directive, viewChildren, contentChild, LOCALE_ID, PLATFORM_ID, output, Pipe, NgModule } from '@angular/core';
3
3
  import * as i2 from '@angular/forms';
4
4
  import { ControlContainer, ReactiveFormsModule, Validators, NG_VALUE_ACCESSOR, FormGroupDirective, FormsModule, UntypedFormGroup, UntypedFormControl } from '@angular/forms';
5
5
  import * as i1 from '@ng-bootstrap/ng-bootstrap';
@@ -22,11 +22,16 @@ function selfFactory(dependency) {
22
22
  class ExtensibleDateTimePickerComponent {
23
23
  constructor() {
24
24
  this.cdRef = inject(ChangeDetectorRef);
25
- this.prop = input(...(ngDevMode ? [undefined, { debugName: "prop" }] : /* istanbul ignore next */ []));
26
- this.meridian = input(false, ...(ngDevMode ? [{ debugName: "meridian" }] : /* istanbul ignore next */ []));
27
- this.placement = input('bottom-left', ...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
28
- this.date = viewChild.required(NgbInputDatepicker);
29
- this.time = viewChild.required(NgbTimepicker);
25
+ this.prop = input(/* @ts-ignore */
26
+ ...(ngDevMode ? [undefined, { debugName: "prop" }] : /* istanbul ignore next */ []));
27
+ this.meridian = input(false, /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "meridian" }] : /* istanbul ignore next */ []));
29
+ this.placement = input('bottom-left', /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
31
+ this.date = viewChild.required(NgbInputDatepicker, /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "date" }] : /* istanbul ignore next */ []));
33
+ this.time = viewChild.required(NgbTimepicker, /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "time" }] : /* istanbul ignore next */ []));
30
35
  }
31
36
  setDate(dateStr) {
32
37
  this.date().writeValue(dateStr);
@@ -34,8 +39,8 @@ class ExtensibleDateTimePickerComponent {
34
39
  setTime(dateStr) {
35
40
  this.time().writeValue(dateStr);
36
41
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleDateTimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: ExtensibleDateTimePickerComponent, isStandalone: true, selector: "abp-extensible-date-time-picker", inputs: { prop: { classPropertyName: "prop", publicName: "prop", isSignal: true, isRequired: false, transformFunction: null }, meridian: { classPropertyName: "meridian", publicName: "meridian", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "date", first: true, predicate: NgbInputDatepicker, descendants: true, isSignal: true }, { propertyName: "time", first: true, predicate: NgbTimepicker, descendants: true, isSignal: true }], exportAs: ["abpExtensibleDateTimePicker"], ngImport: i0, template: `
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleDateTimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: ExtensibleDateTimePickerComponent, isStandalone: true, selector: "abp-extensible-date-time-picker", inputs: { prop: { classPropertyName: "prop", publicName: "prop", isSignal: true, isRequired: false, transformFunction: null }, meridian: { classPropertyName: "meridian", publicName: "meridian", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "date", first: true, predicate: NgbInputDatepicker, descendants: true, isSignal: true }, { propertyName: "time", first: true, predicate: NgbTimepicker, descendants: true, isSignal: true }], exportAs: ["abpExtensibleDateTimePicker"], ngImport: i0, template: `
39
44
  <input
40
45
  [id]="prop().id"
41
46
  [formControlName]="prop().name"
@@ -54,7 +59,7 @@ class ExtensibleDateTimePickerComponent {
54
59
  (ngModelChange)="setDate($event)"
55
60
  [meridian]="meridian()"
56
61
  />
57
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: NgbTimepickerModule }, { kind: "component", type: i1.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"], exportAs: ["ngbTimepicker"] }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }], viewProviders: [
62
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: NgbTimepickerModule }, { kind: "component", type: i1.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"], exportAs: ["ngbTimepicker"] }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }], viewProviders: [
58
63
  {
59
64
  provide: ControlContainer,
60
65
  useFactory: selfFactory,
@@ -70,7 +75,7 @@ class ExtensibleDateTimePickerComponent {
70
75
  },
71
76
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
72
77
  }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleDateTimePickerComponent, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleDateTimePickerComponent, decorators: [{
74
79
  type: Component,
75
80
  args: [{
76
81
  exportAs: 'abpExtensibleDateTimePicker',
@@ -249,10 +254,10 @@ class ExtensibleFormPropService {
249
254
  const required = validators.find(v => this.isRequired(v));
250
255
  return required ? '*' : '';
251
256
  }
252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormPropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
253
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormPropService }); }
257
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormPropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
258
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormPropService }); }
254
259
  }
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormPropService, decorators: [{
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormPropService, decorators: [{
256
261
  type: Injectable
257
262
  }] });
258
263
 
@@ -263,8 +268,10 @@ const EXTENSIBLE_FORM_MULTI_SELECT_CONTROL_VALUE_ACCESSOR = {
263
268
  };
264
269
  class ExtensibleFormMultiselectComponent {
265
270
  constructor() {
266
- this.prop = input.required(...(ngDevMode ? [{ debugName: "prop" }] : /* istanbul ignore next */ []));
267
- this.options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
271
+ this.prop = input.required(/* @ts-ignore */
272
+ ...(ngDevMode ? [{ debugName: "prop" }] : /* istanbul ignore next */ []));
273
+ this.options = input.required(/* @ts-ignore */
274
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
268
275
  this.selectedValues = [];
269
276
  this.disabled = false;
270
277
  this.onChange = () => { };
@@ -292,8 +299,8 @@ class ExtensibleFormMultiselectComponent {
292
299
  registerOnTouched(fn) {
293
300
  this.onTouched = fn;
294
301
  }
295
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormMultiselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
296
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ExtensibleFormMultiselectComponent, isStandalone: true, selector: "abp-extensible-form-multi-select", inputs: { prop: { classPropertyName: "prop", publicName: "prop", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [EXTENSIBLE_FORM_MULTI_SELECT_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: `
302
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormMultiselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
303
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: ExtensibleFormMultiselectComponent, isStandalone: true, selector: "abp-extensible-form-multi-select", inputs: { prop: { classPropertyName: "prop", publicName: "prop", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [EXTENSIBLE_FORM_MULTI_SELECT_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: `
297
304
  <div [id]="prop().id">
298
305
  @for (option of options(); track option.value) {
299
306
  <div class="form-check" validationTarget>
@@ -317,7 +324,7 @@ class ExtensibleFormMultiselectComponent {
317
324
  </div>
318
325
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i3.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
319
326
  }
320
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormMultiselectComponent, decorators: [{
327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormMultiselectComponent, decorators: [{
321
328
  type: Component,
322
329
  args: [{
323
330
  selector: 'abp-extensible-form-multi-select',
@@ -352,37 +359,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
352
359
 
353
360
  class ExtensibleFormPropComponent {
354
361
  #groupDirective;
355
- get disabled() {
356
- const data = this.data();
357
- if (!data)
358
- return false;
359
- return this.disabledFn(data);
360
- }
361
362
  constructor() {
362
363
  this.service = inject(ExtensibleFormPropService);
363
- this.cdRef = inject(ChangeDetectorRef);
364
364
  this.track = inject(TrackByService);
365
365
  this.#groupDirective = inject(FormGroupDirective);
366
366
  this.injector = inject(Injector);
367
367
  this.form = this.#groupDirective.form;
368
- this.data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
369
- this.prop = input.required(...(ngDevMode ? [{ debugName: "prop" }] : /* istanbul ignore next */ []));
370
- this.first = input(undefined, ...(ngDevMode ? [{ debugName: "first" }] : /* istanbul ignore next */ []));
371
- this.isFirstGroup = input(undefined, ...(ngDevMode ? [{ debugName: "isFirstGroup" }] : /* istanbul ignore next */ []));
372
- this.fieldRef = viewChild.required('field');
373
- this.asterisk = '';
374
- this.containerClassName = 'mb-2';
375
- this.showPassword = false;
376
- this.options$ = of([]);
377
- this.validators = [];
368
+ this.data = input.required(/* @ts-ignore */
369
+ ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
370
+ this.prop = input.required(/* @ts-ignore */
371
+ ...(ngDevMode ? [{ debugName: "prop" }] : /* istanbul ignore next */ []));
372
+ this.first = input(undefined, /* @ts-ignore */
373
+ ...(ngDevMode ? [{ debugName: "first" }] : /* istanbul ignore next */ []));
374
+ this.isFirstGroup = input(undefined, /* @ts-ignore */
375
+ ...(ngDevMode ? [{ debugName: "isFirstGroup" }] : /* istanbul ignore next */ []));
376
+ this.fieldRef = viewChild.required('field', /* @ts-ignore */
377
+ ...(ngDevMode ? [{ debugName: "fieldRef" }] : /* istanbul ignore next */ []));
378
+ this.injectorForCustomComponent = signal(undefined, /* @ts-ignore */
379
+ ...(ngDevMode ? [{ debugName: "injectorForCustomComponent" }] : /* istanbul ignore next */ []));
380
+ this.asterisk = signal('', /* @ts-ignore */
381
+ ...(ngDevMode ? [{ debugName: "asterisk" }] : /* istanbul ignore next */ []));
382
+ this.containerClassName = signal('mb-2', /* @ts-ignore */
383
+ ...(ngDevMode ? [{ debugName: "containerClassName" }] : /* istanbul ignore next */ []));
384
+ this.showPassword = signal(false, /* @ts-ignore */
385
+ ...(ngDevMode ? [{ debugName: "showPassword" }] : /* istanbul ignore next */ []));
386
+ this.options$ = signal(of([]), /* @ts-ignore */
387
+ ...(ngDevMode ? [{ debugName: "options$" }] : /* istanbul ignore next */ []));
388
+ this.validators = signal([], /* @ts-ignore */
389
+ ...(ngDevMode ? [{ debugName: "validators" }] : /* istanbul ignore next */ []));
390
+ this.isReadonly = signal(false, /* @ts-ignore */
391
+ ...(ngDevMode ? [{ debugName: "isReadonly" }] : /* istanbul ignore next */ []));
392
+ this.typeaheadModel = signal(undefined, /* @ts-ignore */
393
+ ...(ngDevMode ? [{ debugName: "typeaheadModel" }] : /* istanbul ignore next */ []));
378
394
  this.passwordKey = "ThemeShared.Extensions.PasswordComponent" /* eExtensibleComponents.PasswordComponent */;
379
- this.disabledFn = (data) => false;
395
+ this.disabledFn = signal(() => false, /* @ts-ignore */
396
+ ...(ngDevMode ? [{ debugName: "disabledFn" }] : /* istanbul ignore next */ []));
397
+ this.disabled = computed(() => {
398
+ const data = this.data();
399
+ if (!data)
400
+ return false;
401
+ return this.disabledFn()(data);
402
+ }, /* @ts-ignore */
403
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
380
404
  this.search = (text$) => text$
381
405
  ? text$.pipe(debounceTime(300), distinctUntilChanged(), switchMap(text => this.prop()?.options?.(this.data(), text) || of([])))
382
406
  : of([]);
383
407
  this.typeaheadFormatter = (option) => option.key;
384
408
  this.meridian$ = this.service.meridian$;
385
- // Watch prop changes and update state
386
409
  effect(() => {
387
410
  const currentProp = this.prop();
388
411
  const data = this.data();
@@ -390,7 +413,7 @@ class ExtensibleFormPropComponent {
390
413
  return;
391
414
  const { options, readonly, disabled, validators, className, template } = currentProp;
392
415
  if (template) {
393
- this.injectorForCustomComponent = Injector.create({
416
+ this.injectorForCustomComponent.set(Injector.create({
394
417
  providers: [
395
418
  {
396
419
  provide: EXTENSIONS_FORM_PROP,
@@ -403,31 +426,45 @@ class ExtensibleFormPropComponent {
403
426
  { provide: ControlContainer, useExisting: FormGroupDirective },
404
427
  ],
405
428
  parent: this.injector,
406
- });
429
+ }));
430
+ }
431
+ else {
432
+ this.injectorForCustomComponent.set(undefined);
407
433
  }
408
434
  if (options)
409
- this.options$ = options(data);
435
+ this.options$.set(options(data));
410
436
  if (readonly)
411
- this.readonly = readonly(data);
437
+ this.isReadonly.set(readonly(data));
412
438
  if (disabled) {
413
- this.disabledFn = disabled;
439
+ this.disabledFn.set(disabled);
440
+ }
441
+ else {
442
+ this.disabledFn.set(() => false);
414
443
  }
415
444
  if (validators) {
416
- this.validators = validators(data);
417
- this.setAsterisk();
445
+ this.validators.set(validators(data));
446
+ this.asterisk.set(this.service.calcAsterisks(validators(data)));
447
+ }
448
+ else {
449
+ this.validators.set([]);
450
+ this.asterisk.set('');
418
451
  }
419
452
  if (className !== undefined) {
420
- this.containerClassName = className;
453
+ this.containerClassName.set(className);
454
+ }
455
+ else {
456
+ this.containerClassName.set('mb-2');
421
457
  }
422
458
  const [keyControl, valueControl] = this.getTypeaheadControls();
423
- if (keyControl && valueControl)
424
- this.typeaheadModel = { key: keyControl.value, value: valueControl.value };
425
- this.cdRef.markForCheck();
459
+ if (keyControl && valueControl) {
460
+ this.typeaheadModel.set({ key: keyControl.value, value: valueControl.value });
461
+ }
426
462
  });
427
463
  }
428
464
  setTypeaheadValue(selectedOption) {
429
- this.typeaheadModel = selectedOption || { key: null, value: null };
430
- const { key, value } = this.typeaheadModel;
465
+ const model = selectedOption || { key: null, value: null };
466
+ this.typeaheadModel.set(model);
467
+ const { key, value } = model;
431
468
  const [keyControl, valueControl] = this.getTypeaheadControls();
432
469
  if (valueControl?.value && !value)
433
470
  valueControl.markAsDirty();
@@ -446,9 +483,6 @@ class ExtensibleFormPropComponent {
446
483
  const valueControl = this.form.get(extraPropName) || this.form.get(name);
447
484
  return [keyControl, valueControl];
448
485
  }
449
- setAsterisk() {
450
- this.asterisk = this.service.calcAsterisks(this.validators);
451
- }
452
486
  ngAfterViewInit() {
453
487
  if (this.isFirstGroup() && this.first() && this.fieldRef()) {
454
488
  requestAnimationFrame(() => {
@@ -462,8 +496,8 @@ class ExtensibleFormPropComponent {
462
496
  getType(prop) {
463
497
  return this.service.getType(prop);
464
498
  }
465
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormPropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
466
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ExtensibleFormPropComponent, isStandalone: true, selector: "abp-extensible-form-prop", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, prop: { classPropertyName: "prop", publicName: "prop", isSignal: true, isRequired: true, transformFunction: null }, first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, isFirstGroup: { classPropertyName: "isFirstGroup", publicName: "isFirstGroup", isSignal: true, isRequired: false, transformFunction: null } }, providers: [ExtensibleFormPropService], viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container *abpPermission=\"prop().permission; runChangeDetection: false\">\r\n @switch (getComponent(prop())) {\r\n @case ('template') {\r\n <ng-container *ngComponentOutlet=\"prop().template; injector: injectorForCustomComponent\" />\r\n }\r\n }\r\n\r\n <div [class]=\"containerClassName\" class=\"mb-2\">\r\n @switch (getComponent(prop())) {\r\n @case ('input') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [type]=\"getType(prop())\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('hidden') {\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n }\r\n @case ('checkbox') {\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n />\r\n </div>\r\n }\r\n @case ('select') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <select\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n @for (option of options$ | async; track option.value) {\r\n <option [ngValue]=\"option.value\">\r\n @if (prop().isExtra) {\r\n {{ '::' + option.key | abpLocalization }}\r\n } @else {\r\n {{ option.key }}\r\n }\r\n </option>\r\n }\r\n </select>\r\n }\r\n @case ('multiselect') {\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-extensible-form-multi-select\r\n [prop]=\"prop()\"\r\n [options]=\"options$ | async\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n />\r\n }\r\n @case ('typeahead') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n </div>\r\n }\r\n @case ('date') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('time') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <ngb-timepicker [formControlName]=\"prop().name\" />\r\n }\r\n @case ('dateTime') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <abp-extensible-date-time-picker [prop]=\"prop()\" [meridian]=\"meridian$ | async\" />\r\n }\r\n @case ('textarea') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <textarea\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n }\r\n @case ('passwordinputgroup') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div class=\"input-group form-group\" validationTarget>\r\n <input\r\n class=\"form-control\"\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpShowPassword]=\"showPassword\"\r\n />\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"showPassword = !showPassword\">\r\n <i\r\n class=\"fa\"\r\n aria-hidden=\"true\"\r\n [class]=\"{\r\n 'fa-eye-slash': !showPassword,\r\n 'fa-eye': showPassword,\r\n }\"\r\n ></i>\r\n </button>\r\n </div>\r\n }\r\n }\r\n\r\n @if (prop().formText) {\r\n <small class=\"text-muted d-block\">{{ prop().formText | abpLocalization }}</small>\r\n }\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop().id\" [class]=\"classes || 'form-label d-inline-block'\">\r\n <span class=\"d-inline-flex align-items-center gap-1 text-nowrap\">\r\n @if (prop().displayTextResolver) {\r\n {{ prop().displayTextResolver(data()) | abpLocalization }}\r\n } @else {\r\n @if (prop().isExtra) {\r\n {{ '::' + prop().displayName | abpLocalization }}\r\n } @else {\r\n {{ prop().displayName | abpLocalization }}\r\n }\r\n }\r\n {{ asterisk }}\r\n @if (prop().tooltip) {\r\n <i\r\n [ngbTooltip]=\"prop().tooltip.text | abpLocalization\"\r\n [placement]=\"prop().tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n class=\"bi bi-info-circle\"\r\n ></i>\r\n }\r\n </span>\r\n </label>\r\n</ng-template>\r\n", dependencies: [{ kind: "component", type: ExtensibleDateTimePickerComponent, selector: "abp-extensible-date-time-picker", inputs: ["prop", "meridian", "placement"], exportAs: ["abpExtensibleDateTimePicker"] }, { kind: "component", type: ExtensibleFormMultiselectComponent, selector: "abp-extensible-form-multi-select", inputs: ["prop", "options"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: NgbTimepickerModule }, { kind: "component", type: i1.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"], exportAs: ["ngbTimepicker"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: DisabledDirective, selector: "[abpDisabled]", inputs: ["abpDisabled"] }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i3.ValidationStyleDirective, selector: "[validationStyle]", exportAs: ["validationStyle"] }, { kind: "directive", type: i3.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "selectOnExact", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "directive", type: ShowPasswordDirective, selector: "[abpShowPassword]", inputs: ["abpShowPassword"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: AsyncPipe, name: "async" }], viewProviders: [
499
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormPropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
500
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: ExtensibleFormPropComponent, isStandalone: true, selector: "abp-extensible-form-prop", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, prop: { classPropertyName: "prop", publicName: "prop", isSignal: true, isRequired: true, transformFunction: null }, first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, isFirstGroup: { classPropertyName: "isFirstGroup", publicName: "isFirstGroup", isSignal: true, isRequired: false, transformFunction: null } }, providers: [ExtensibleFormPropService], viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container *abpPermission=\"prop().permission; runChangeDetection: false\">\r\n @switch (getComponent(prop())) {\r\n @case ('template') {\r\n <ng-container *ngComponentOutlet=\"prop().template; injector: injectorForCustomComponent()\" />\r\n }\r\n }\r\n\r\n <div [class]=\"containerClassName()\" class=\"mb-2\">\r\n @switch (getComponent(prop())) {\r\n @case ('input') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [type]=\"getType(prop())\"\r\n [abpDisabled]=\"disabled()\"\r\n [readonly]=\"isReadonly()\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('hidden') {\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n }\r\n @case ('checkbox') {\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n />\r\n </div>\r\n }\r\n @case ('select') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <select\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n class=\"form-select form-control\"\r\n >\r\n @for (option of options$() | async; track option.value) {\r\n <option [ngValue]=\"option.value\">\r\n @if (prop().isExtra) {\r\n {{ '::' + option.key | abpLocalization }}\r\n } @else {\r\n {{ option.key }}\r\n }\r\n </option>\r\n }\r\n </select>\r\n }\r\n @case ('multiselect') {\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-extensible-form-multi-select\r\n [prop]=\"prop()\"\r\n [options]=\"options$() | async\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n />\r\n }\r\n @case ('typeahead') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [abpDisabled]=\"disabled()\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [ngModel]=\"typeaheadModel()\"\r\n (ngModelChange)=\"typeaheadModel.set($event)\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel())\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n </div>\r\n }\r\n @case ('date') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('time') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <ngb-timepicker [formControlName]=\"prop().name\" />\r\n }\r\n @case ('dateTime') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <abp-extensible-date-time-picker [prop]=\"prop()\" [meridian]=\"meridian$ | async\" />\r\n }\r\n @case ('textarea') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <textarea\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n [readonly]=\"isReadonly()\"\r\n class=\"form-control\"\r\n ></textarea>\r\n }\r\n @case ('passwordinputgroup') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div class=\"input-group form-group\" validationTarget>\r\n <input\r\n class=\"form-control\"\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpShowPassword]=\"showPassword()\"\r\n />\r\n <button\r\n class=\"btn btn-secondary\"\r\n type=\"button\"\r\n (click)=\"showPassword.update(value => !value)\"\r\n >\r\n <i\r\n class=\"fa\"\r\n aria-hidden=\"true\"\r\n [class]=\"{\r\n 'fa-eye-slash': !showPassword(),\r\n 'fa-eye': showPassword(),\r\n }\"\r\n ></i>\r\n </button>\r\n </div>\r\n }\r\n }\r\n\r\n @if (prop().formText) {\r\n <small class=\"text-muted d-block\">{{ prop().formText | abpLocalization }}</small>\r\n }\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop().id\" [class]=\"classes || 'form-label d-inline-block'\">\r\n <span class=\"d-inline-flex align-items-center gap-1 text-nowrap\">\r\n @if (prop().displayTextResolver) {\r\n {{ prop().displayTextResolver(data()) | abpLocalization }}\r\n } @else {\r\n @if (prop().isExtra) {\r\n {{ '::' + prop().displayName | abpLocalization }}\r\n } @else {\r\n {{ prop().displayName | abpLocalization }}\r\n }\r\n }\r\n {{ asterisk() }}\r\n @if (prop().tooltip) {\r\n <i\r\n [ngbTooltip]=\"prop().tooltip.text | abpLocalization\"\r\n [placement]=\"prop().tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n class=\"bi bi-info-circle\"\r\n ></i>\r\n }\r\n </span>\r\n </label>\r\n</ng-template>\r\n", dependencies: [{ kind: "component", type: ExtensibleDateTimePickerComponent, selector: "abp-extensible-date-time-picker", inputs: ["prop", "meridian", "placement"], exportAs: ["abpExtensibleDateTimePicker"] }, { kind: "component", type: ExtensibleFormMultiselectComponent, selector: "abp-extensible-form-multi-select", inputs: ["prop", "options"] }, { kind: "ngmodule", type: NgbDatepickerModule }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "ngmodule", type: NgbTimepickerModule }, { kind: "component", type: i1.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"], exportAs: ["ngbTimepicker"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: DisabledDirective, selector: "[abpDisabled]", inputs: ["abpDisabled"] }, { kind: "ngmodule", type: NgxValidateCoreModule }, { kind: "directive", type: i3.ValidationStyleDirective, selector: "[validationStyle]", exportAs: ["validationStyle"] }, { kind: "directive", type: i3.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i1.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "selectOnExact", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { kind: "directive", type: ShowPasswordDirective, selector: "[abpShowPassword]", inputs: ["abpShowPassword"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: AsyncPipe, name: "async" }], viewProviders: [
467
501
  {
468
502
  provide: ControlContainer,
469
503
  useFactory: selfFactory,
@@ -473,7 +507,7 @@ class ExtensibleFormPropComponent {
473
507
  { provide: NgbTimeAdapter, useClass: TimeAdapter },
474
508
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
475
509
  }
476
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormPropComponent, decorators: [{
510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormPropComponent, decorators: [{
477
511
  type: Component,
478
512
  args: [{ selector: 'abp-extensible-form-prop', imports: [
479
513
  ExtensibleDateTimePickerComponent,
@@ -500,7 +534,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
500
534
  },
501
535
  { provide: NgbDateAdapter, useClass: DateAdapter },
502
536
  { provide: NgbTimeAdapter, useClass: TimeAdapter },
503
- ], template: "<ng-container *abpPermission=\"prop().permission; runChangeDetection: false\">\r\n @switch (getComponent(prop())) {\r\n @case ('template') {\r\n <ng-container *ngComponentOutlet=\"prop().template; injector: injectorForCustomComponent\" />\r\n }\r\n }\r\n\r\n <div [class]=\"containerClassName\" class=\"mb-2\">\r\n @switch (getComponent(prop())) {\r\n @case ('input') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [type]=\"getType(prop())\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('hidden') {\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n }\r\n @case ('checkbox') {\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n />\r\n </div>\r\n }\r\n @case ('select') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <select\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n @for (option of options$ | async; track option.value) {\r\n <option [ngValue]=\"option.value\">\r\n @if (prop().isExtra) {\r\n {{ '::' + option.key | abpLocalization }}\r\n } @else {\r\n {{ option.key }}\r\n }\r\n </option>\r\n }\r\n </select>\r\n }\r\n @case ('multiselect') {\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-extensible-form-multi-select\r\n [prop]=\"prop()\"\r\n [options]=\"options$ | async\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n />\r\n }\r\n @case ('typeahead') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n </div>\r\n }\r\n @case ('date') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('time') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <ngb-timepicker [formControlName]=\"prop().name\" />\r\n }\r\n @case ('dateTime') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <abp-extensible-date-time-picker [prop]=\"prop()\" [meridian]=\"meridian$ | async\" />\r\n }\r\n @case ('textarea') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <textarea\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n }\r\n @case ('passwordinputgroup') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div class=\"input-group form-group\" validationTarget>\r\n <input\r\n class=\"form-control\"\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpShowPassword]=\"showPassword\"\r\n />\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"showPassword = !showPassword\">\r\n <i\r\n class=\"fa\"\r\n aria-hidden=\"true\"\r\n [class]=\"{\r\n 'fa-eye-slash': !showPassword,\r\n 'fa-eye': showPassword,\r\n }\"\r\n ></i>\r\n </button>\r\n </div>\r\n }\r\n }\r\n\r\n @if (prop().formText) {\r\n <small class=\"text-muted d-block\">{{ prop().formText | abpLocalization }}</small>\r\n }\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop().id\" [class]=\"classes || 'form-label d-inline-block'\">\r\n <span class=\"d-inline-flex align-items-center gap-1 text-nowrap\">\r\n @if (prop().displayTextResolver) {\r\n {{ prop().displayTextResolver(data()) | abpLocalization }}\r\n } @else {\r\n @if (prop().isExtra) {\r\n {{ '::' + prop().displayName | abpLocalization }}\r\n } @else {\r\n {{ prop().displayName | abpLocalization }}\r\n }\r\n }\r\n {{ asterisk }}\r\n @if (prop().tooltip) {\r\n <i\r\n [ngbTooltip]=\"prop().tooltip.text | abpLocalization\"\r\n [placement]=\"prop().tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n class=\"bi bi-info-circle\"\r\n ></i>\r\n }\r\n </span>\r\n </label>\r\n</ng-template>\r\n" }]
537
+ ], template: "<ng-container *abpPermission=\"prop().permission; runChangeDetection: false\">\r\n @switch (getComponent(prop())) {\r\n @case ('template') {\r\n <ng-container *ngComponentOutlet=\"prop().template; injector: injectorForCustomComponent()\" />\r\n }\r\n }\r\n\r\n <div [class]=\"containerClassName()\" class=\"mb-2\">\r\n @switch (getComponent(prop())) {\r\n @case ('input') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [type]=\"getType(prop())\"\r\n [abpDisabled]=\"disabled()\"\r\n [readonly]=\"isReadonly()\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('hidden') {\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n }\r\n @case ('checkbox') {\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n />\r\n </div>\r\n }\r\n @case ('select') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <select\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n class=\"form-select form-control\"\r\n >\r\n @for (option of options$() | async; track option.value) {\r\n <option [ngValue]=\"option.value\">\r\n @if (prop().isExtra) {\r\n {{ '::' + option.key | abpLocalization }}\r\n } @else {\r\n {{ option.key }}\r\n }\r\n </option>\r\n }\r\n </select>\r\n }\r\n @case ('multiselect') {\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-extensible-form-multi-select\r\n [prop]=\"prop()\"\r\n [options]=\"options$() | async\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n />\r\n }\r\n @case ('typeahead') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop().id\"\r\n [autocomplete]=\"prop().autocomplete\"\r\n [abpDisabled]=\"disabled()\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [ngModel]=\"typeaheadModel()\"\r\n (ngModelChange)=\"typeaheadModel.set($event)\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel())\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop().name\" type=\"hidden\" />\r\n </div>\r\n }\r\n @case ('date') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <input\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n }\r\n @case ('time') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <ngb-timepicker [formControlName]=\"prop().name\" />\r\n }\r\n @case ('dateTime') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <abp-extensible-date-time-picker [prop]=\"prop()\" [meridian]=\"meridian$ | async\" />\r\n }\r\n @case ('textarea') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <textarea\r\n #field\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpDisabled]=\"disabled()\"\r\n [readonly]=\"isReadonly()\"\r\n class=\"form-control\"\r\n ></textarea>\r\n }\r\n @case ('passwordinputgroup') {\r\n <ng-template [ngTemplateOutlet]=\"label\" />\r\n <div class=\"input-group form-group\" validationTarget>\r\n <input\r\n class=\"form-control\"\r\n [id]=\"prop().id\"\r\n [formControlName]=\"prop().name\"\r\n [abpShowPassword]=\"showPassword()\"\r\n />\r\n <button\r\n class=\"btn btn-secondary\"\r\n type=\"button\"\r\n (click)=\"showPassword.update(value => !value)\"\r\n >\r\n <i\r\n class=\"fa\"\r\n aria-hidden=\"true\"\r\n [class]=\"{\r\n 'fa-eye-slash': !showPassword(),\r\n 'fa-eye': showPassword(),\r\n }\"\r\n ></i>\r\n </button>\r\n </div>\r\n }\r\n }\r\n\r\n @if (prop().formText) {\r\n <small class=\"text-muted d-block\">{{ prop().formText | abpLocalization }}</small>\r\n }\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop().id\" [class]=\"classes || 'form-label d-inline-block'\">\r\n <span class=\"d-inline-flex align-items-center gap-1 text-nowrap\">\r\n @if (prop().displayTextResolver) {\r\n {{ prop().displayTextResolver(data()) | abpLocalization }}\r\n } @else {\r\n @if (prop().isExtra) {\r\n {{ '::' + prop().displayName | abpLocalization }}\r\n } @else {\r\n {{ prop().displayName | abpLocalization }}\r\n }\r\n }\r\n {{ asterisk() }}\r\n @if (prop().tooltip) {\r\n <i\r\n [ngbTooltip]=\"prop().tooltip.text | abpLocalization\"\r\n [placement]=\"prop().tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n class=\"bi bi-info-circle\"\r\n ></i>\r\n }\r\n </span>\r\n </label>\r\n</ng-template>\r\n" }]
504
538
  }], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], prop: [{ type: i0.Input, args: [{ isSignal: true, alias: "prop", required: true }] }], first: [{ type: i0.Input, args: [{ isSignal: true, alias: "first", required: false }] }], isFirstGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFirstGroup", required: false }] }], fieldRef: [{ type: i0.ViewChild, args: ['field', { isSignal: true }] }] } });
505
539
 
506
540
  class PropList extends LinkedList {
@@ -808,10 +842,10 @@ class ExtensionsService {
808
842
  this.createFormProps = new CreateFormPropsFactory();
809
843
  this.editFormProps = new EditFormPropsFactory();
810
844
  }
811
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
812
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensionsService, providedIn: 'root' }); }
845
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
846
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensionsService, providedIn: 'root' }); }
813
847
  }
814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensionsService, decorators: [{
848
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensionsService, decorators: [{
815
849
  type: Injectable,
816
850
  args: [{
817
851
  providedIn: 'root',
@@ -845,10 +879,10 @@ class PropDataDirective extends PropData {
845
879
  ngOnDestroy() {
846
880
  this.vcRef.clear();
847
881
  }
848
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: PropDataDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
849
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.17", type: PropDataDirective, isStandalone: true, selector: "[abpPropData]", inputs: { propList: { classPropertyName: "propList", publicName: "abpPropDataFromList", isSignal: true, isRequired: false, transformFunction: null }, record: { classPropertyName: "record", publicName: "abpPropDataWithRecord", isSignal: true, isRequired: true, transformFunction: null }, index: { classPropertyName: "index", publicName: "abpPropDataAtIndex", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["abpPropData"], usesInheritance: true, ngImport: i0 }); }
882
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PropDataDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
883
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: PropDataDirective, isStandalone: true, selector: "[abpPropData]", inputs: { propList: { classPropertyName: "propList", publicName: "abpPropDataFromList", isSignal: true, isRequired: false, transformFunction: null }, record: { classPropertyName: "record", publicName: "abpPropDataWithRecord", isSignal: true, isRequired: true, transformFunction: null }, index: { classPropertyName: "index", publicName: "abpPropDataAtIndex", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["abpPropData"], usesInheritance: true, ngImport: i0 }); }
850
884
  }
851
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: PropDataDirective, decorators: [{
885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PropDataDirective, decorators: [{
852
886
  type: Directive,
853
887
  args: [{
854
888
  exportAs: 'abpPropData',
@@ -858,16 +892,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
858
892
 
859
893
  class ExtensibleFormComponent {
860
894
  constructor() {
861
- this.cdRef = inject(ChangeDetectorRef);
862
895
  this.track = inject(TrackByService);
863
896
  this.container = inject(ControlContainer);
864
897
  this.extensions = inject(ExtensionsService);
865
898
  this.identifier = inject(EXTENSIONS_IDENTIFIER);
866
- this.formProps = viewChildren(ExtensibleFormPropComponent, ...(ngDevMode ? [{ debugName: "formProps" }] : /* istanbul ignore next */ []));
867
- this.selectedRecord = input(undefined, ...(ngDevMode ? [{ debugName: "selectedRecord" }] : /* istanbul ignore next */ []));
899
+ this.formProps = viewChildren(ExtensibleFormPropComponent, /* @ts-ignore */
900
+ ...(ngDevMode ? [{ debugName: "formProps" }] : /* istanbul ignore next */ []));
901
+ this.selectedRecord = input(undefined, /* @ts-ignore */
902
+ ...(ngDevMode ? [{ debugName: "selectedRecord" }] : /* istanbul ignore next */ []));
868
903
  this.extraPropertiesKey = EXTRA_PROPERTIES_KEY;
869
- this.groupedPropList = signal(undefined, ...(ngDevMode ? [{ debugName: "groupedPropList" }] : /* istanbul ignore next */ []));
870
- this.record = signal(undefined, ...(ngDevMode ? [{ debugName: "record" }] : /* istanbul ignore next */ []));
904
+ this.groupedPropList = signal(undefined, /* @ts-ignore */
905
+ ...(ngDevMode ? [{ debugName: "groupedPropList" }] : /* istanbul ignore next */ []));
906
+ this.record = signal(undefined, /* @ts-ignore */
907
+ ...(ngDevMode ? [{ debugName: "record" }] : /* istanbul ignore next */ []));
871
908
  effect(() => {
872
909
  const recordValue = this.selectedRecord();
873
910
  const type = !recordValue || JSON.stringify(recordValue) === '{}' ? 'create' : 'edit';
@@ -898,8 +935,8 @@ class ExtensibleFormComponent {
898
935
  const formPropList = items[index].formPropList.toArray();
899
936
  return formPropList.some(prop => prop.visible(data));
900
937
  }
901
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
902
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ExtensibleFormComponent, isStandalone: true, selector: "abp-extensible-form", inputs: { selectedRecord: { classPropertyName: "selectedRecord", publicName: "selectedRecord", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true, isSignal: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "@if (form) {\r\n@for (groupedProp of groupedPropList()?.items; track i; let i = $index; let first = $first) {\r\n<ng-container *abpPropData=\"let data; fromList: groupedProp.formPropList; withRecord: record()\">\r\n @if (isAnyGroupMemberVisible(i, data) && groupedProp.group?.className) {\r\n <div [class]=\"groupedProp.group?.className\"\r\n [attr.data-name]=\"groupedProp.group?.name || groupedProp.group?.className\">\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\"\r\n [ngTemplateOutletContext]=\"{ groupedProp: groupedProp, data: data, isFirstGroup: first}\">\r\n </ng-container>\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\"\r\n [ngTemplateOutletContext]=\"{ groupedProp: groupedProp, data: data, isFirstGroup: first }\">\r\n </ng-container>\r\n }\r\n</ng-container>\r\n}\r\n}\r\n\r\n<ng-template let-groupedProp=\"groupedProp\" let-data=\"data\" let-isFirstGroup=\"isFirstGroup\" #propListTemplate>\r\n @for (prop of groupedProp.formPropList; let index = $index; let first = $first; track prop.name) {\r\n @if (prop.visible(data)) {\r\n @if (extraProperties.controls[prop.name]) {\r\n <ng-container [formGroupName]=\"extraPropertiesKey\">\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\" [class]=\"prop.className\" />\r\n </ng-container>\r\n } @else {\r\n @if (form.get(prop.name)) {\r\n <abp-extensible-form-prop [class]=\"prop.className\" [prop]=\"prop\" [data]=\"data\" [first]=\"first\"\r\n [isFirstGroup]=\"isFirstGroup\" />\r\n }\r\n }\r\n }\r\n }\r\n</ng-template>", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first", "isFirstGroup"] }], viewProviders: [
938
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
939
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: ExtensibleFormComponent, isStandalone: true, selector: "abp-extensible-form", inputs: { selectedRecord: { classPropertyName: "selectedRecord", publicName: "selectedRecord", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true, isSignal: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "@if (form) {\r\n@for (groupedProp of groupedPropList()?.items; track i; let i = $index; let first = $first) {\r\n<ng-container *abpPropData=\"let data; fromList: groupedProp.formPropList; withRecord: record()\">\r\n @if (isAnyGroupMemberVisible(i, data) && groupedProp.group?.className) {\r\n <div [class]=\"groupedProp.group?.className\"\r\n [attr.data-name]=\"groupedProp.group?.name || groupedProp.group?.className\">\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\"\r\n [ngTemplateOutletContext]=\"{ groupedProp: groupedProp, data: data, isFirstGroup: first}\">\r\n </ng-container>\r\n </div>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"propListTemplate\"\r\n [ngTemplateOutletContext]=\"{ groupedProp: groupedProp, data: data, isFirstGroup: first }\">\r\n </ng-container>\r\n }\r\n</ng-container>\r\n}\r\n}\r\n\r\n<ng-template let-groupedProp=\"groupedProp\" let-data=\"data\" let-isFirstGroup=\"isFirstGroup\" #propListTemplate>\r\n @for (prop of groupedProp.formPropList; let index = $index; let first = $first; track prop.name) {\r\n @if (prop.visible(data)) {\r\n @if (extraProperties.controls[prop.name]) {\r\n <ng-container [formGroupName]=\"extraPropertiesKey\">\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\" [class]=\"prop.className\" />\r\n </ng-container>\r\n } @else {\r\n @if (form.get(prop.name)) {\r\n <abp-extensible-form-prop [class]=\"prop.className\" [prop]=\"prop\" [data]=\"data\" [first]=\"first\"\r\n [isFirstGroup]=\"isFirstGroup\" />\r\n }\r\n }\r\n }\r\n }\r\n</ng-template>", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first", "isFirstGroup"] }], viewProviders: [
903
940
  {
904
941
  provide: ControlContainer,
905
942
  useFactory: selfFactory,
@@ -907,7 +944,7 @@ class ExtensibleFormComponent {
907
944
  },
908
945
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
909
946
  }
910
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleFormComponent, decorators: [{
947
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleFormComponent, decorators: [{
911
948
  type: Component,
912
949
  args: [{ exportAs: 'abpExtensibleForm', selector: 'abp-extensible-form', imports: [NgTemplateOutlet, PropDataDirective, ReactiveFormsModule, ExtensibleFormPropComponent], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
913
950
  {
@@ -924,37 +961,41 @@ class AbstractActionsComponent extends ActionData {
924
961
  constructor() {
925
962
  const injector = inject(Injector);
926
963
  super();
927
- this.record = input.required(...(ngDevMode ? [{ debugName: "record" }] : /* istanbul ignore next */ []));
964
+ this.record = input.required(/* @ts-ignore */
965
+ ...(ngDevMode ? [{ debugName: "record" }] : /* istanbul ignore next */ []));
928
966
  this.getInjected = injector.get.bind(injector);
929
967
  const extensions = injector.get(ExtensionsService);
930
968
  const name = injector.get(EXTENSIONS_IDENTIFIER);
931
969
  const type = injector.get(EXTENSIONS_ACTION_TYPE);
932
970
  this.actionList = extensions[type].get(name).actions;
933
971
  }
934
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: AbstractActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
935
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.17", type: AbstractActionsComponent, isStandalone: true, inputs: { record: { classPropertyName: "record", publicName: "record", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
972
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AbstractActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
973
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: AbstractActionsComponent, isStandalone: true, inputs: { record: { classPropertyName: "record", publicName: "record", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
936
974
  }
937
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: AbstractActionsComponent, decorators: [{
975
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AbstractActionsComponent, decorators: [{
938
976
  type: Directive
939
977
  }], ctorParameters: () => [], propDecorators: { record: [{ type: i0.Input, args: [{ isSignal: true, alias: "record", required: true }] }] } });
940
978
 
941
979
  class GridActionsComponent extends AbstractActionsComponent {
942
980
  constructor() {
943
981
  super();
944
- this.icon = input('fa fa-cog', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
945
- this.index = input(undefined, ...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
946
- this.text = input('', ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
982
+ this.icon = input('fa fa-cog', /* @ts-ignore */
983
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
984
+ this.index = input(undefined, /* @ts-ignore */
985
+ ...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
986
+ this.text = input('', /* @ts-ignore */
987
+ ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
947
988
  this.trackByFn = (_, item) => item.text;
948
989
  }
949
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: GridActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
950
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: GridActionsComponent, isStandalone: true, selector: "abp-grid-actions", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
990
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: GridActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
991
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: GridActionsComponent, isStandalone: true, selector: "abp-grid-actions", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
951
992
  {
952
993
  provide: EXTENSIONS_ACTION_TYPE,
953
994
  useValue: 'entityActions',
954
995
  },
955
- ], exportAs: ["abpGridActions"], usesInheritance: true, ngImport: i0, template: "@if (actionList.length > 1) {\r\n<div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" ngbDropdownToggle>\r\n <i [class]=\"icon()\" [class.me-1]=\"icon()\"></i>{{ text() | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n @for (action of actionList; track action.text) {\r\n <ng-container [ngTemplateOutlet]=\"dropDownBtnItemTmp\" [ngTemplateOutletContext]=\"{ $implicit: action }\">\r\n </ng-container>\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n@if (actionList.length === 1) {\r\n<ng-container [ngTemplateOutlet]=\"btnTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: actionList.get(0).value }\"></ng-container>\r\n}\r\n\r\n<ng-template #dropDownBtnItemTmp let-action>\r\n @if (action.visible(data)) {\r\n <button ngbDropdownItem *abpPermission=\"action.permission; runChangeDetection: false\" (click)=\"action.action(data)\"\r\n type=\"button\">\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"></ng-container>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonContentTmp let-action>\r\n <i [class]=\"action.icon\" [class.me-1]=\"action.icon && !action.showOnlyIcon\"></i>\r\n @if (!action.showOnlyIcon) {\r\n @if (action.icon) {\r\n <span>{{ action.text | abpLocalization }}</span>\r\n } @else {\r\n <div abpEllipsis>{{ action.text | abpLocalization }}</div>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #btnTmp let-action>\r\n @if (action.visible(data)) {\r\n @if (action.tooltip) {\r\n <button *abpPermission=\"action.permission; runChangeDetection: false\" (click)=\"action.action(data)\" type=\"button\"\r\n [class]=\"action.btnClass\" [style]=\"action.btnStyle\" [ngbTooltip]=\"action.tooltip.text | abpLocalization\"\r\n [placement]=\"action.tooltip.placement || 'auto'\" triggers=\"hover\" container=\"body\">\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"></ng-container>\r\n </button>\r\n } @else {\r\n <button *abpPermission=\"action.permission; runChangeDetection: false\" (click)=\"action.action(data)\" type=\"button\"\r\n [class]=\"action.btnClass\" [style]=\"action.btnStyle\">\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"></ng-container>\r\n </button>\r\n }\r\n }\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i1.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i1.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: EllipsisDirective, selector: "[abpEllipsis]", inputs: ["abpEllipsis", "title", "abpEllipsisEnabled"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
996
+ ], exportAs: ["abpGridActions"], usesInheritance: true, ngImport: i0, template: "@if (actionList.length > 1) {\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button\r\n class=\"btn btn-primary btn-sm dropdown-toggle\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n ngbDropdownToggle\r\n >\r\n <i [class]=\"icon()\" [class.me-1]=\"icon()\"></i>{{ text() | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n @for (action of actionList; track $index) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dropDownBtnItemTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: action }\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (actionList.length === 1) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"btnTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: actionList.get(0).value }\"\r\n />\r\n}\r\n\r\n<ng-template #dropDownBtnItemTmp let-action>\r\n @if (action.visible(data)) {\r\n <button\r\n ngbDropdownItem\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\" />\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonContentTmp let-action>\r\n <i [class]=\"action.icon\" [class.me-1]=\"action.icon && !action.showOnlyIcon\"></i>\r\n @if (!action.showOnlyIcon) {\r\n @if (action.icon) {\r\n <span>{{ action.text | abpLocalization }}</span>\r\n } @else {\r\n <div abpEllipsis>{{ action.text | abpLocalization }}</div>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #btnTmp let-action>\r\n @if (action.visible(data)) {\r\n @if (action.tooltip) {\r\n <button\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n [class]=\"action.btnClass\"\r\n [style]=\"action.btnStyle\"\r\n [ngbTooltip]=\"action.tooltip.text | abpLocalization\"\r\n [placement]=\"action.tooltip.placement || 'auto'\"\r\n triggers=\"hover\"\r\n container=\"body\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\" />\r\n </button>\r\n } @else {\r\n <button\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n [class]=\"action.btnClass\"\r\n [style]=\"action.btnStyle\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\" />\r\n </button>\r\n }\r\n }\r\n</ng-template>\r\n", dependencies: [{ kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i1.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i1.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: EllipsisDirective, selector: "[abpEllipsis]", inputs: ["abpEllipsis", "title", "abpEllipsisEnabled"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
956
997
  }
957
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: GridActionsComponent, decorators: [{
998
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: GridActionsComponent, decorators: [{
958
999
  type: Component,
959
1000
  args: [{ exportAs: 'abpGridActions', imports: [
960
1001
  NgbDropdownModule,
@@ -968,20 +1009,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
968
1009
  provide: EXTENSIONS_ACTION_TYPE,
969
1010
  useValue: 'entityActions',
970
1011
  },
971
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (actionList.length > 1) {\r\n<div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" ngbDropdownToggle>\r\n <i [class]=\"icon()\" [class.me-1]=\"icon()\"></i>{{ text() | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n @for (action of actionList; track action.text) {\r\n <ng-container [ngTemplateOutlet]=\"dropDownBtnItemTmp\" [ngTemplateOutletContext]=\"{ $implicit: action }\">\r\n </ng-container>\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n@if (actionList.length === 1) {\r\n<ng-container [ngTemplateOutlet]=\"btnTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: actionList.get(0).value }\"></ng-container>\r\n}\r\n\r\n<ng-template #dropDownBtnItemTmp let-action>\r\n @if (action.visible(data)) {\r\n <button ngbDropdownItem *abpPermission=\"action.permission; runChangeDetection: false\" (click)=\"action.action(data)\"\r\n type=\"button\">\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"></ng-container>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonContentTmp let-action>\r\n <i [class]=\"action.icon\" [class.me-1]=\"action.icon && !action.showOnlyIcon\"></i>\r\n @if (!action.showOnlyIcon) {\r\n @if (action.icon) {\r\n <span>{{ action.text | abpLocalization }}</span>\r\n } @else {\r\n <div abpEllipsis>{{ action.text | abpLocalization }}</div>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #btnTmp let-action>\r\n @if (action.visible(data)) {\r\n @if (action.tooltip) {\r\n <button *abpPermission=\"action.permission; runChangeDetection: false\" (click)=\"action.action(data)\" type=\"button\"\r\n [class]=\"action.btnClass\" [style]=\"action.btnStyle\" [ngbTooltip]=\"action.tooltip.text | abpLocalization\"\r\n [placement]=\"action.tooltip.placement || 'auto'\" triggers=\"hover\" container=\"body\">\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"></ng-container>\r\n </button>\r\n } @else {\r\n <button *abpPermission=\"action.permission; runChangeDetection: false\" (click)=\"action.action(data)\" type=\"button\"\r\n [class]=\"action.btnClass\" [style]=\"action.btnStyle\">\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\"></ng-container>\r\n </button>\r\n }\r\n }\r\n</ng-template>" }]
1012
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (actionList.length > 1) {\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button\r\n class=\"btn btn-primary btn-sm dropdown-toggle\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n ngbDropdownToggle\r\n >\r\n <i [class]=\"icon()\" [class.me-1]=\"icon()\"></i>{{ text() | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n @for (action of actionList; track $index) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"dropDownBtnItemTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: action }\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (actionList.length === 1) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"btnTmp\"\r\n [ngTemplateOutletContext]=\"{ $implicit: actionList.get(0).value }\"\r\n />\r\n}\r\n\r\n<ng-template #dropDownBtnItemTmp let-action>\r\n @if (action.visible(data)) {\r\n <button\r\n ngbDropdownItem\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\" />\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonContentTmp let-action>\r\n <i [class]=\"action.icon\" [class.me-1]=\"action.icon && !action.showOnlyIcon\"></i>\r\n @if (!action.showOnlyIcon) {\r\n @if (action.icon) {\r\n <span>{{ action.text | abpLocalization }}</span>\r\n } @else {\r\n <div abpEllipsis>{{ action.text | abpLocalization }}</div>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #btnTmp let-action>\r\n @if (action.visible(data)) {\r\n @if (action.tooltip) {\r\n <button\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n [class]=\"action.btnClass\"\r\n [style]=\"action.btnStyle\"\r\n [ngbTooltip]=\"action.tooltip.text | abpLocalization\"\r\n [placement]=\"action.tooltip.placement || 'auto'\"\r\n triggers=\"hover\"\r\n container=\"body\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\" />\r\n </button>\r\n } @else {\r\n <button\r\n *abpPermission=\"action.permission; runChangeDetection: false\"\r\n (click)=\"action.action(data)\"\r\n type=\"button\"\r\n [class]=\"action.btnClass\"\r\n [style]=\"action.btnStyle\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"buttonContentTmp; context: { $implicit: action }\" />\r\n </button>\r\n }\r\n }\r\n</ng-template>\r\n" }]
972
1013
  }], ctorParameters: () => [], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: false }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }] } });
973
1014
 
974
1015
  class ExtensibleTableRowDetailComponent {
975
1016
  constructor() {
976
- this.rowHeight = input('100%', ...(ngDevMode ? [{ debugName: "rowHeight" }] : /* istanbul ignore next */ []));
977
- this.template = contentChild((TemplateRef), ...(ngDevMode ? [{ debugName: "template" }] : /* istanbul ignore next */ []));
1017
+ this.rowHeight = input('100%', /* @ts-ignore */
1018
+ ...(ngDevMode ? [{ debugName: "rowHeight" }] : /* istanbul ignore next */ []));
1019
+ this.template = contentChild((TemplateRef), /* @ts-ignore */
1020
+ ...(ngDevMode ? [{ debugName: "template" }] : /* istanbul ignore next */ []));
978
1021
  }
979
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleTableRowDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
980
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: ExtensibleTableRowDetailComponent, isStandalone: true, selector: "abp-extensible-table-row-detail", inputs: { rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "template", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true }); }
1022
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleTableRowDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1023
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: ExtensibleTableRowDetailComponent, isStandalone: true, selector: "abp-extensible-table-row-detail", inputs: { rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "template", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
981
1024
  }
982
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleTableRowDetailComponent, decorators: [{
1025
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleTableRowDetailComponent, decorators: [{
983
1026
  type: Component,
984
1027
  args: [{
1028
+ changeDetection: ChangeDetectionStrategy.OnPush,
985
1029
  selector: 'abp-extensible-table-row-detail',
986
1030
  template: '',
987
1031
  }]
@@ -1005,7 +1049,6 @@ class ExtensibleTableComponent {
1005
1049
  constructor() {
1006
1050
  this.#injector = inject(Injector);
1007
1051
  this.getInjected = this.#injector.get.bind(this.#injector);
1008
- this.cdr = inject(ChangeDetectorRef);
1009
1052
  this.locale = inject(LOCALE_ID);
1010
1053
  this.config = inject(ConfigStateService);
1011
1054
  this.timeZoneService = inject(TimezoneService);
@@ -1016,37 +1059,69 @@ class ExtensibleTableComponent {
1016
1059
  // Input signals
1017
1060
  this.actionsTextInput = input(undefined, { ...(ngDevMode ? { debugName: "actionsTextInput" } : /* istanbul ignore next */ {}), alias: 'actionsText' });
1018
1061
  this.dataInput = input([], { ...(ngDevMode ? { debugName: "dataInput" } : /* istanbul ignore next */ {}), alias: 'data' });
1019
- this.list = input.required(...(ngDevMode ? [{ debugName: "list" }] : /* istanbul ignore next */ []));
1020
- this.recordsTotal = input.required(...(ngDevMode ? [{ debugName: "recordsTotal" }] : /* istanbul ignore next */ []));
1062
+ this.list = input.required(/* @ts-ignore */
1063
+ ...(ngDevMode ? [{ debugName: "list" }] : /* istanbul ignore next */ []));
1064
+ this.recordsTotal = input.required(/* @ts-ignore */
1065
+ ...(ngDevMode ? [{ debugName: "recordsTotal" }] : /* istanbul ignore next */ []));
1021
1066
  this.actionsColumnWidthInput = input(undefined, { ...(ngDevMode ? { debugName: "actionsColumnWidthInput" } : /* istanbul ignore next */ {}), alias: 'actionsColumnWidth' });
1022
- this.actionsTemplate = input(undefined, ...(ngDevMode ? [{ debugName: "actionsTemplate" }] : /* istanbul ignore next */ []));
1023
- this.selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
1067
+ this.actionsTemplate = input(undefined, /* @ts-ignore */
1068
+ ...(ngDevMode ? [{ debugName: "actionsTemplate" }] : /* istanbul ignore next */ []));
1069
+ this.selectable = input(false, /* @ts-ignore */
1070
+ ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
1024
1071
  this.selectionTypeInput = input(SelectionType.multiClick, { ...(ngDevMode ? { debugName: "selectionTypeInput" } : /* istanbul ignore next */ {}), alias: 'selectionType' });
1025
- this.selected = input([], ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
1026
- this.infiniteScroll = input(false, ...(ngDevMode ? [{ debugName: "infiniteScroll" }] : /* istanbul ignore next */ []));
1027
- this.isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
1028
- this.scrollThreshold = input(10, ...(ngDevMode ? [{ debugName: "scrollThreshold" }] : /* istanbul ignore next */ []));
1029
- this.tableHeight = input(undefined, ...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
1030
- this.rowDetailTemplate = input(undefined, ...(ngDevMode ? [{ debugName: "rowDetailTemplate" }] : /* istanbul ignore next */ []));
1031
- this.rowDetailHeight = input('100%', ...(ngDevMode ? [{ debugName: "rowDetailHeight" }] : /* istanbul ignore next */ []));
1072
+ this.selected = input([], /* @ts-ignore */
1073
+ ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
1074
+ this.infiniteScroll = input(false, /* @ts-ignore */
1075
+ ...(ngDevMode ? [{ debugName: "infiniteScroll" }] : /* istanbul ignore next */ []));
1076
+ this.isLoading = input(false, /* @ts-ignore */
1077
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
1078
+ this.scrollThreshold = input(10, /* @ts-ignore */
1079
+ ...(ngDevMode ? [{ debugName: "scrollThreshold" }] : /* istanbul ignore next */ []));
1080
+ this.tableHeight = input(undefined, /* @ts-ignore */
1081
+ ...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
1082
+ this.rowDetailTemplate = input(undefined, /* @ts-ignore */
1083
+ ...(ngDevMode ? [{ debugName: "rowDetailTemplate" }] : /* istanbul ignore next */ []));
1084
+ this.rowDetailHeight = input('100%', /* @ts-ignore */
1085
+ ...(ngDevMode ? [{ debugName: "rowDetailHeight" }] : /* istanbul ignore next */ []));
1032
1086
  // Output signals
1033
1087
  this.tableActivate = output();
1034
1088
  this.selectionChange = output();
1035
1089
  this.loadMore = output();
1036
1090
  this.rowDetailToggle = output();
1037
1091
  // Internal signals
1038
- this._data = signal([], ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
1039
- this._actionsColumnWidth = signal(DEFAULT_ACTIONS_COLUMN_WIDTH, ...(ngDevMode ? [{ debugName: "_actionsColumnWidth" }] : /* istanbul ignore next */ []));
1040
- this.rowDetailComponent = contentChild(ExtensibleTableRowDetailComponent, ...(ngDevMode ? [{ debugName: "rowDetailComponent" }] : /* istanbul ignore next */ []));
1041
- this.table = viewChild.required('table');
1092
+ this._data = signal([], /* @ts-ignore */
1093
+ ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
1094
+ this._actionsColumnWidth = signal(DEFAULT_ACTIONS_COLUMN_WIDTH, /* @ts-ignore */
1095
+ ...(ngDevMode ? [{ debugName: "_actionsColumnWidth" }] : /* istanbul ignore next */ []));
1096
+ this.rowDetailComponent = contentChild(ExtensibleTableRowDetailComponent, /* @ts-ignore */
1097
+ ...(ngDevMode ? [{ debugName: "rowDetailComponent" }] : /* istanbul ignore next */ []));
1098
+ this.table = viewChild.required('table', /* @ts-ignore */
1099
+ ...(ngDevMode ? [{ debugName: "table" }] : /* istanbul ignore next */ []));
1042
1100
  // Computed values
1043
1101
  this.actionsText = computed(() => {
1044
1102
  return this.actionsTextInput() ?? (this.actionList.length >= 1 ? 'AbpUi::Actions' : '');
1045
- }, ...(ngDevMode ? [{ debugName: "actionsText" }] : /* istanbul ignore next */ []));
1103
+ }, /* @ts-ignore */
1104
+ ...(ngDevMode ? [{ debugName: "actionsText" }] : /* istanbul ignore next */ []));
1046
1105
  this.selectionType = computed(() => {
1047
1106
  const value = this.selectionTypeInput();
1048
1107
  return typeof value === 'string' ? SelectionType[value] : value;
1049
- }, ...(ngDevMode ? [{ debugName: "selectionType" }] : /* istanbul ignore next */ []));
1108
+ }, /* @ts-ignore */
1109
+ ...(ngDevMode ? [{ debugName: "selectionType" }] : /* istanbul ignore next */ []));
1110
+ this.effectiveRowDetailRowHeight = computed(() => {
1111
+ const height = this.effectiveRowDetailHeight;
1112
+ if (typeof height === 'number') {
1113
+ return height;
1114
+ }
1115
+ if (typeof height === 'function') {
1116
+ return height;
1117
+ }
1118
+ if (typeof height === 'string' && !height.endsWith('%')) {
1119
+ const parsed = Number.parseInt(height, 10);
1120
+ return Number.isNaN(parsed) ? undefined : parsed;
1121
+ }
1122
+ return undefined;
1123
+ }, /* @ts-ignore */
1124
+ ...(ngDevMode ? [{ debugName: "effectiveRowDetailRowHeight" }] : /* istanbul ignore next */ []));
1050
1125
  this.trackByFn = (_, item) => item.name;
1051
1126
  // Infinite scroll: debounced load more subject
1052
1127
  this.loadMoreSubject = new Subject();
@@ -1055,7 +1130,8 @@ class ExtensibleTableComponent {
1055
1130
  .subscribe(() => this.triggerLoadMore());
1056
1131
  this.columnWidths = computed(() => {
1057
1132
  return this.propList.toArray().map(prop => prop.columnWidth);
1058
- }, ...(ngDevMode ? [{ debugName: "columnWidths" }] : /* istanbul ignore next */ []));
1133
+ }, /* @ts-ignore */
1134
+ ...(ngDevMode ? [{ debugName: "columnWidths" }] : /* istanbul ignore next */ []));
1059
1135
  const extensions = this.#injector.get(ExtensionsService);
1060
1136
  const name = this.#injector.get(EXTENSIONS_IDENTIFIER);
1061
1137
  this.propList = extensions.entityProps.get(name).props;
@@ -1157,21 +1233,16 @@ class ExtensibleTableComponent {
1157
1233
  if (!this.shouldHandleScroll()) {
1158
1234
  return;
1159
1235
  }
1160
- const target = scrollEvent.target;
1161
- if (!target) {
1162
- return;
1163
- }
1164
- if (this.isNearScrollBottom(target)) {
1236
+ const table = this.table();
1237
+ const viewportHeight = table.bodyHeight;
1238
+ const scrollHeight = table.bodyComponent.scrollHeight();
1239
+ if (scrollEvent.offsetY + viewportHeight >= scrollHeight - this.scrollThreshold()) {
1165
1240
  this.loadMoreSubject.next();
1166
1241
  }
1167
1242
  }
1168
1243
  shouldHandleScroll() {
1169
1244
  return this.infiniteScroll() && !this.isLoading();
1170
1245
  }
1171
- isNearScrollBottom(element) {
1172
- const { offsetHeight, scrollTop, scrollHeight } = element;
1173
- return offsetHeight + scrollTop >= scrollHeight - this.scrollThreshold();
1174
- }
1175
1246
  triggerLoadMore() {
1176
1247
  this.loadMore.emit();
1177
1248
  }
@@ -1194,17 +1265,16 @@ class ExtensibleTableComponent {
1194
1265
  ?.requestStatus$?.pipe(filter(status => status === 'loading'))
1195
1266
  .subscribe(() => {
1196
1267
  this._data.set([]);
1197
- this.cdr.markForCheck();
1198
1268
  });
1199
1269
  }
1200
1270
  }
1201
1271
  ngOnDestroy() {
1202
1272
  this.loadMoreSubscription.unsubscribe();
1203
1273
  }
1204
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ExtensibleTableComponent, isStandalone: true, selector: "abp-extensible-table", inputs: { actionsTextInput: { classPropertyName: "actionsTextInput", publicName: "actionsText", isSignal: true, isRequired: false, transformFunction: null }, dataInput: { classPropertyName: "dataInput", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, list: { classPropertyName: "list", publicName: "list", isSignal: true, isRequired: true, transformFunction: null }, recordsTotal: { classPropertyName: "recordsTotal", publicName: "recordsTotal", isSignal: true, isRequired: true, transformFunction: null }, actionsColumnWidthInput: { classPropertyName: "actionsColumnWidthInput", publicName: "actionsColumnWidth", isSignal: true, isRequired: false, transformFunction: null }, actionsTemplate: { classPropertyName: "actionsTemplate", publicName: "actionsTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, selectionTypeInput: { classPropertyName: "selectionTypeInput", publicName: "selectionType", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, infiniteScroll: { classPropertyName: "infiniteScroll", publicName: "infiniteScroll", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, scrollThreshold: { classPropertyName: "scrollThreshold", publicName: "scrollThreshold", isSignal: true, isRequired: false, transformFunction: null }, tableHeight: { classPropertyName: "tableHeight", publicName: "tableHeight", isSignal: true, isRequired: false, transformFunction: null }, rowDetailTemplate: { classPropertyName: "rowDetailTemplate", publicName: "rowDetailTemplate", isSignal: true, isRequired: false, transformFunction: null }, rowDetailHeight: { classPropertyName: "rowDetailHeight", publicName: "rowDetailHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tableActivate: "tableActivate", selectionChange: "selectionChange", loadMore: "loadMore", rowDetailToggle: "rowDetailToggle" }, queries: [{ propertyName: "rowDetailComponent", first: true, predicate: ExtensibleTableRowDetailComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, isSignal: true }], exportAs: ["abpExtensibleTable"], ngImport: i0, template: "@if (isBrowser) {\r\n <ngx-datatable\r\n #table\r\n default\r\n [rows]=\"data\"\r\n [count]=\"recordsTotal()\"\r\n [list]=\"list()\"\r\n [selectionType]=\"selectable() ? selectionType() : undefined\"\r\n (activate)=\"tableActivate.emit($event)\"\r\n (select)=\"onSelect($event)\"\r\n [selected]=\"selected()\"\r\n (scroll)=\"onScroll($event)\"\r\n [scrollbarV]=\"infiniteScroll()\"\r\n [style.height]=\"getTableHeight()\"\r\n [loadingIndicator]=\"infiniteScroll() && isLoading()\"\r\n [footerHeight]=\"infiniteScroll() ? false : 50\"\r\n >\r\n @if (effectiveRowDetailTemplate) {\r\n <ngx-datatable-row-detail [rowHeight]=\"effectiveRowDetailHeight\">\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-row-detail-template>\r\n <ng-container\r\n [ngTemplateOutlet]=\"effectiveRowDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{ row: row, expanded: expanded }\"\r\n ></ng-container>\r\n </ng-template>\r\n </ngx-datatable-row-detail>\r\n\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [resizeable]=\"false\"\r\n [sortable]=\"false\"\r\n [draggable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-cell-template>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link text-decoration-none text-muted p-0\"\r\n [attr.aria-label]=\"expanded ? 'Collapse' : 'Expand'\"\r\n (click)=\"toggleExpandRow(row)\"\r\n >\r\n <i class=\"fa\" [class.fa-chevron-down]=\"!expanded\" [class.fa-chevron-up]=\"expanded\"></i>\r\n </button>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (selectable()) {\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [sortable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n [draggable]=\"false\"\r\n [resizeable]=\"false\"\r\n >\r\n <ng-template\r\n ngx-datatable-header-template\r\n let-value=\"value\"\r\n let-allRowsSelected=\"allRowsSelected\"\r\n let-selectFn=\"selectFn\"\r\n >\r\n @if (selectionType() !== 'single') {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input table-check\"\r\n type=\"checkbox\"\r\n [checked]=\"allRowsSelected\"\r\n (change)=\"selectFn(!allRowsSelected)\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n ngx-datatable-cell-template\r\n let-value=\"value\"\r\n let-row=\"row\"\r\n let-isSelected=\"isSelected\"\r\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\r\n >\r\n @if (selectionType() === 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n @if (selectionType() !== 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (actionsTemplate() || (actionList.length && hasAtLeastOnePermittedAction)) {\r\n <ngx-datatable-column\r\n [name]=\"actionsText() | abpLocalization\"\r\n [maxWidth]=\"_actionsColumnWidth() ?? undefined\"\r\n [width]=\"_actionsColumnWidth() ?? 200\"\r\n [canAutoResize]=\"!_actionsColumnWidth()\"\r\n [sortable]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n @if (actionsTemplate(); as template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"\r\n ></ng-container>\r\n } @else if (isVisibleActions(row)) {\r\n <abp-grid-actions [index]=\"i\" [record]=\"row\" text=\"AbpUi::Actions\"></abp-grid-actions>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @for (prop of propList; track prop.name; let i = $index) {\r\n <ngx-datatable-column\r\n *abpVisible=\"prop.columnVisible(getInjected)\"\r\n [width]=\"columnWidths()[i] ?? 200\"\r\n [canAutoResize]=\"!columnWidths()[i]\"\r\n [name]=\"(prop.isExtra ? '::' + prop.displayName : prop.displayName) | abpLocalization\"\r\n [prop]=\"prop.name\"\r\n [sortable]=\"prop.sortable\"\r\n >\r\n <ng-template ngx-datatable-header-template let-column=\"column\" let-sortFn=\"sortFn\">\r\n @if (prop.tooltip) {\r\n <span\r\n [ngbTooltip]=\"prop.tooltip.text | abpLocalization\"\r\n [placement]=\"prop.tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n [class.pointer]=\"prop.sortable\"\r\n (click)=\"prop.sortable && sortFn(column)\"\r\n >\r\n {{ column.name }} <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\r\n </span>\r\n } @else {\r\n <span [class.pointer]=\"prop.sortable\" (click)=\"prop.sortable && sortFn(column)\">\r\n {{ column.name }}\r\n </span>\r\n }\r\n </ng-template>\r\n <ng-template let-row=\"row\" let-i=\"index\" ngx-datatable-cell-template>\r\n <ng-container *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n <ng-container *abpVisible=\"row['_' + prop.name]?.visible\">\r\n @if (!row['_' + prop.name].component) {\r\n @if (prop.type === 'datetime' || prop.type === 'date' || prop.type === 'time') {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n : ('::' + (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n } @else {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async)\r\n : ('::' + (row['_' + prop.name]?.value | async) | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n }\r\n } @else {\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n row['_' + prop.name].component;\r\n injector: row['_' + prop.name].injector\r\n \"\r\n ></ng-container>\r\n }\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n </ngx-datatable>\r\n}\r\n", styles: [":host ::ng-deep .ngx-datatable.material .datatable-body .datatable-row-detail{background:none;padding:0}\n"], dependencies: [{ kind: "directive", type: AbpVisibleDirective, selector: "[abpVisible]", inputs: ["abpVisible"] }, { kind: "ngmodule", type: NgxDatatableModule }, { kind: "component", type: i1$1.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarVDynamic", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "ghostLoadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "disableRowCheck", "rowDraggable", "enableClearingSortState", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction", "rowDragEvents"] }, { kind: "directive", type: i1$1.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i1$1.DatatableRowDetailTemplateDirective, selector: "[ngx-datatable-row-detail-template]" }, { kind: "directive", type: i1$1.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "bindAsUnsafeHtml", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate", "ghostCellTemplate"] }, { kind: "directive", type: i1$1.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i1$1.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "component", type: GridActionsComponent, selector: "abp-grid-actions", inputs: ["icon", "index", "text"], exportAs: ["abpGridActions"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: NgxDatatableDefaultDirective, selector: "ngx-datatable[default]", inputs: ["class"], exportAs: ["ngxDatatableDefault"] }, { kind: "directive", type: NgxDatatableListDirective, selector: "ngx-datatable[list]", inputs: ["list"], exportAs: ["ngxDatatableList"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: UtcToLocalPipe, name: "abpUtcToLocal" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1275
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: ExtensibleTableComponent, isStandalone: true, selector: "abp-extensible-table", inputs: { actionsTextInput: { classPropertyName: "actionsTextInput", publicName: "actionsText", isSignal: true, isRequired: false, transformFunction: null }, dataInput: { classPropertyName: "dataInput", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, list: { classPropertyName: "list", publicName: "list", isSignal: true, isRequired: true, transformFunction: null }, recordsTotal: { classPropertyName: "recordsTotal", publicName: "recordsTotal", isSignal: true, isRequired: true, transformFunction: null }, actionsColumnWidthInput: { classPropertyName: "actionsColumnWidthInput", publicName: "actionsColumnWidth", isSignal: true, isRequired: false, transformFunction: null }, actionsTemplate: { classPropertyName: "actionsTemplate", publicName: "actionsTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, selectionTypeInput: { classPropertyName: "selectionTypeInput", publicName: "selectionType", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, infiniteScroll: { classPropertyName: "infiniteScroll", publicName: "infiniteScroll", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, scrollThreshold: { classPropertyName: "scrollThreshold", publicName: "scrollThreshold", isSignal: true, isRequired: false, transformFunction: null }, tableHeight: { classPropertyName: "tableHeight", publicName: "tableHeight", isSignal: true, isRequired: false, transformFunction: null }, rowDetailTemplate: { classPropertyName: "rowDetailTemplate", publicName: "rowDetailTemplate", isSignal: true, isRequired: false, transformFunction: null }, rowDetailHeight: { classPropertyName: "rowDetailHeight", publicName: "rowDetailHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tableActivate: "tableActivate", selectionChange: "selectionChange", loadMore: "loadMore", rowDetailToggle: "rowDetailToggle" }, queries: [{ propertyName: "rowDetailComponent", first: true, predicate: ExtensibleTableRowDetailComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, isSignal: true }], exportAs: ["abpExtensibleTable"], ngImport: i0, template: "@if (isBrowser) {\r\n <ngx-datatable\r\n #table\r\n default\r\n [rows]=\"data\"\r\n [count]=\"recordsTotal()\"\r\n [list]=\"list()\"\r\n [selectionType]=\"selectable() ? selectionType() : undefined\"\r\n (activate)=\"tableActivate.emit($event)\"\r\n (select)=\"onSelect($event)\"\r\n [selected]=\"selected()\"\r\n (scroll)=\"onScroll($event)\"\r\n [scrollbarV]=\"infiniteScroll()\"\r\n [style.height]=\"getTableHeight()\"\r\n [loadingIndicator]=\"infiniteScroll() && isLoading()\"\r\n [footerHeight]=\"infiniteScroll() ? false : 50\"\r\n >\r\n @if (effectiveRowDetailTemplate) {\r\n @let detailRowHeight = effectiveRowDetailRowHeight();\r\n @if (detailRowHeight !== undefined) {\r\n <ngx-datatable-row-detail [rowHeight]=\"detailRowHeight\">\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-row-detail-template>\r\n <ng-container\r\n [ngTemplateOutlet]=\"effectiveRowDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{ row: row, expanded: expanded }\"\r\n />\r\n </ng-template>\r\n </ngx-datatable-row-detail>\r\n } @else {\r\n <ngx-datatable-row-detail>\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-row-detail-template>\r\n <ng-container\r\n [ngTemplateOutlet]=\"effectiveRowDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{ row: row, expanded: expanded }\"\r\n />\r\n </ng-template>\r\n </ngx-datatable-row-detail>\r\n }\r\n\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [resizeable]=\"false\"\r\n [sortable]=\"false\"\r\n [draggable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-cell-template>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link text-decoration-none text-muted p-0\"\r\n [attr.aria-label]=\"expanded ? 'Collapse' : 'Expand'\"\r\n (click)=\"toggleExpandRow(row)\"\r\n >\r\n <i class=\"fa\" [class.fa-chevron-down]=\"!expanded\" [class.fa-chevron-up]=\"expanded\"></i>\r\n </button>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (selectable()) {\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [sortable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n [draggable]=\"false\"\r\n [resizeable]=\"false\"\r\n >\r\n <ng-template\r\n ngx-datatable-header-template\r\n let-allRowsSelected=\"allRowsSelected\"\r\n let-selectFn=\"selectFn\"\r\n >\r\n @if (selectionType() !== 'single') {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input table-check\"\r\n type=\"checkbox\"\r\n [checked]=\"allRowsSelected\"\r\n (change)=\"selectFn()\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n ngx-datatable-cell-template\r\n let-value=\"value\"\r\n let-row=\"row\"\r\n let-isSelected=\"isSelected\"\r\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\r\n >\r\n @if (selectionType() === 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n @if (selectionType() !== 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (actionsTemplate() || (actionList.length && hasAtLeastOnePermittedAction)) {\r\n <ngx-datatable-column\r\n [name]=\"actionsText() | abpLocalization\"\r\n [maxWidth]=\"_actionsColumnWidth()\"\r\n [width]=\"_actionsColumnWidth() || 200\"\r\n [canAutoResize]=\"!_actionsColumnWidth()\"\r\n [sortable]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n @if (actionsTemplate(); as template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"\r\n ></ng-container>\r\n } @else if (isVisibleActions(row)) {\r\n <abp-grid-actions [index]=\"i\" [record]=\"row\" text=\"AbpUi::Actions\"></abp-grid-actions>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @for (prop of propList; track prop.name; let i = $index) {\r\n <ngx-datatable-column\r\n *abpVisible=\"prop.columnVisible(getInjected)\"\r\n [width]=\"columnWidths()[i] || 200\"\r\n [canAutoResize]=\"!columnWidths()[i]\"\r\n [name]=\"(prop.isExtra ? '::' + prop.displayName : prop.displayName) | abpLocalization\"\r\n [prop]=\"prop.name\"\r\n [sortable]=\"prop.sortable\"\r\n >\r\n <ng-template ngx-datatable-header-template let-column=\"column\" let-sortFn=\"sortFn\">\r\n @if (prop.tooltip) {\r\n <span\r\n [ngbTooltip]=\"prop.tooltip.text | abpLocalization\"\r\n [placement]=\"prop.tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n [class.pointer]=\"prop.sortable\"\r\n (click)=\"prop.sortable && sortFn()\"\r\n >\r\n {{ column.name }} <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\r\n </span>\r\n } @else {\r\n <span [class.pointer]=\"prop.sortable\" (click)=\"prop.sortable && sortFn()\">\r\n {{ column.name }}\r\n </span>\r\n }\r\n </ng-template>\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n <ng-container *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n <ng-container *abpVisible=\"row['_' + prop.name]?.visible\">\r\n @if (!row['_' + prop.name].component) {\r\n @if (prop.type === 'datetime' || prop.type === 'date' || prop.type === 'time') {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n : ('::' + (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n } @else {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async)\r\n : ('::' + (row['_' + prop.name]?.value | async) | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n }\r\n } @else {\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n row['_' + prop.name].component;\r\n injector: row['_' + prop.name].injector\r\n \"\r\n />\r\n }\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n </ngx-datatable>\r\n}\r\n", styles: [":host ::ng-deep .ngx-datatable.material .datatable-body .datatable-row-detail{background:none;padding:0}\n"], dependencies: [{ kind: "directive", type: AbpVisibleDirective, selector: "[abpVisible]", inputs: ["abpVisible"] }, { kind: "ngmodule", type: NgxDatatableModule }, { kind: "component", type: i1$1.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarVDynamic", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "ghostLoadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "disableRowCheck", "rowDraggable", "enableClearingSortState", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction", "rowDragEvents"] }, { kind: "directive", type: i1$1.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i1$1.DatatableRowDetailTemplateDirective, selector: "[ngx-datatable-row-detail-template]" }, { kind: "directive", type: i1$1.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "bindAsUnsafeHtml", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate", "ghostCellTemplate"] }, { kind: "directive", type: i1$1.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i1$1.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "component", type: GridActionsComponent, selector: "abp-grid-actions", inputs: ["icon", "index", "text"], exportAs: ["abpGridActions"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: NgxDatatableDefaultDirective, selector: "ngx-datatable[default]", inputs: ["class"], exportAs: ["ngxDatatableDefault"] }, { kind: "directive", type: NgxDatatableListDirective, selector: "ngx-datatable[list]", inputs: ["list"], exportAs: ["ngxDatatableList"] }, { kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "pipe", type: UtcToLocalPipe, name: "abpUtcToLocal" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1206
1276
  }
1207
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleTableComponent, decorators: [{
1277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleTableComponent, decorators: [{
1208
1278
  type: Component,
1209
1279
  args: [{ exportAs: 'abpExtensibleTable', selector: 'abp-extensible-table', imports: [
1210
1280
  AbpVisibleDirective,
@@ -1219,7 +1289,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
1219
1289
  AsyncPipe,
1220
1290
  NgTemplateOutlet,
1221
1291
  NgComponentOutlet,
1222
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isBrowser) {\r\n <ngx-datatable\r\n #table\r\n default\r\n [rows]=\"data\"\r\n [count]=\"recordsTotal()\"\r\n [list]=\"list()\"\r\n [selectionType]=\"selectable() ? selectionType() : undefined\"\r\n (activate)=\"tableActivate.emit($event)\"\r\n (select)=\"onSelect($event)\"\r\n [selected]=\"selected()\"\r\n (scroll)=\"onScroll($event)\"\r\n [scrollbarV]=\"infiniteScroll()\"\r\n [style.height]=\"getTableHeight()\"\r\n [loadingIndicator]=\"infiniteScroll() && isLoading()\"\r\n [footerHeight]=\"infiniteScroll() ? false : 50\"\r\n >\r\n @if (effectiveRowDetailTemplate) {\r\n <ngx-datatable-row-detail [rowHeight]=\"effectiveRowDetailHeight\">\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-row-detail-template>\r\n <ng-container\r\n [ngTemplateOutlet]=\"effectiveRowDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{ row: row, expanded: expanded }\"\r\n ></ng-container>\r\n </ng-template>\r\n </ngx-datatable-row-detail>\r\n\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [resizeable]=\"false\"\r\n [sortable]=\"false\"\r\n [draggable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-cell-template>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link text-decoration-none text-muted p-0\"\r\n [attr.aria-label]=\"expanded ? 'Collapse' : 'Expand'\"\r\n (click)=\"toggleExpandRow(row)\"\r\n >\r\n <i class=\"fa\" [class.fa-chevron-down]=\"!expanded\" [class.fa-chevron-up]=\"expanded\"></i>\r\n </button>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (selectable()) {\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [sortable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n [draggable]=\"false\"\r\n [resizeable]=\"false\"\r\n >\r\n <ng-template\r\n ngx-datatable-header-template\r\n let-value=\"value\"\r\n let-allRowsSelected=\"allRowsSelected\"\r\n let-selectFn=\"selectFn\"\r\n >\r\n @if (selectionType() !== 'single') {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input table-check\"\r\n type=\"checkbox\"\r\n [checked]=\"allRowsSelected\"\r\n (change)=\"selectFn(!allRowsSelected)\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n ngx-datatable-cell-template\r\n let-value=\"value\"\r\n let-row=\"row\"\r\n let-isSelected=\"isSelected\"\r\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\r\n >\r\n @if (selectionType() === 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n @if (selectionType() !== 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (actionsTemplate() || (actionList.length && hasAtLeastOnePermittedAction)) {\r\n <ngx-datatable-column\r\n [name]=\"actionsText() | abpLocalization\"\r\n [maxWidth]=\"_actionsColumnWidth() ?? undefined\"\r\n [width]=\"_actionsColumnWidth() ?? 200\"\r\n [canAutoResize]=\"!_actionsColumnWidth()\"\r\n [sortable]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n @if (actionsTemplate(); as template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"\r\n ></ng-container>\r\n } @else if (isVisibleActions(row)) {\r\n <abp-grid-actions [index]=\"i\" [record]=\"row\" text=\"AbpUi::Actions\"></abp-grid-actions>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @for (prop of propList; track prop.name; let i = $index) {\r\n <ngx-datatable-column\r\n *abpVisible=\"prop.columnVisible(getInjected)\"\r\n [width]=\"columnWidths()[i] ?? 200\"\r\n [canAutoResize]=\"!columnWidths()[i]\"\r\n [name]=\"(prop.isExtra ? '::' + prop.displayName : prop.displayName) | abpLocalization\"\r\n [prop]=\"prop.name\"\r\n [sortable]=\"prop.sortable\"\r\n >\r\n <ng-template ngx-datatable-header-template let-column=\"column\" let-sortFn=\"sortFn\">\r\n @if (prop.tooltip) {\r\n <span\r\n [ngbTooltip]=\"prop.tooltip.text | abpLocalization\"\r\n [placement]=\"prop.tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n [class.pointer]=\"prop.sortable\"\r\n (click)=\"prop.sortable && sortFn(column)\"\r\n >\r\n {{ column.name }} <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\r\n </span>\r\n } @else {\r\n <span [class.pointer]=\"prop.sortable\" (click)=\"prop.sortable && sortFn(column)\">\r\n {{ column.name }}\r\n </span>\r\n }\r\n </ng-template>\r\n <ng-template let-row=\"row\" let-i=\"index\" ngx-datatable-cell-template>\r\n <ng-container *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n <ng-container *abpVisible=\"row['_' + prop.name]?.visible\">\r\n @if (!row['_' + prop.name].component) {\r\n @if (prop.type === 'datetime' || prop.type === 'date' || prop.type === 'time') {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n : ('::' + (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n } @else {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async)\r\n : ('::' + (row['_' + prop.name]?.value | async) | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n }\r\n } @else {\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n row['_' + prop.name].component;\r\n injector: row['_' + prop.name].injector\r\n \"\r\n ></ng-container>\r\n }\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n </ngx-datatable>\r\n}\r\n", styles: [":host ::ng-deep .ngx-datatable.material .datatable-body .datatable-row-detail{background:none;padding:0}\n"] }]
1292
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isBrowser) {\r\n <ngx-datatable\r\n #table\r\n default\r\n [rows]=\"data\"\r\n [count]=\"recordsTotal()\"\r\n [list]=\"list()\"\r\n [selectionType]=\"selectable() ? selectionType() : undefined\"\r\n (activate)=\"tableActivate.emit($event)\"\r\n (select)=\"onSelect($event)\"\r\n [selected]=\"selected()\"\r\n (scroll)=\"onScroll($event)\"\r\n [scrollbarV]=\"infiniteScroll()\"\r\n [style.height]=\"getTableHeight()\"\r\n [loadingIndicator]=\"infiniteScroll() && isLoading()\"\r\n [footerHeight]=\"infiniteScroll() ? false : 50\"\r\n >\r\n @if (effectiveRowDetailTemplate) {\r\n @let detailRowHeight = effectiveRowDetailRowHeight();\r\n @if (detailRowHeight !== undefined) {\r\n <ngx-datatable-row-detail [rowHeight]=\"detailRowHeight\">\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-row-detail-template>\r\n <ng-container\r\n [ngTemplateOutlet]=\"effectiveRowDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{ row: row, expanded: expanded }\"\r\n />\r\n </ng-template>\r\n </ngx-datatable-row-detail>\r\n } @else {\r\n <ngx-datatable-row-detail>\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-row-detail-template>\r\n <ng-container\r\n [ngTemplateOutlet]=\"effectiveRowDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{ row: row, expanded: expanded }\"\r\n />\r\n </ng-template>\r\n </ngx-datatable-row-detail>\r\n }\r\n\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [resizeable]=\"false\"\r\n [sortable]=\"false\"\r\n [draggable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-expanded=\"expanded\" ngx-datatable-cell-template>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link text-decoration-none text-muted p-0\"\r\n [attr.aria-label]=\"expanded ? 'Collapse' : 'Expand'\"\r\n (click)=\"toggleExpandRow(row)\"\r\n >\r\n <i class=\"fa\" [class.fa-chevron-down]=\"!expanded\" [class.fa-chevron-up]=\"expanded\"></i>\r\n </button>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (selectable()) {\r\n <ngx-datatable-column\r\n [width]=\"50\"\r\n [sortable]=\"false\"\r\n [canAutoResize]=\"false\"\r\n [draggable]=\"false\"\r\n [resizeable]=\"false\"\r\n >\r\n <ng-template\r\n ngx-datatable-header-template\r\n let-allRowsSelected=\"allRowsSelected\"\r\n let-selectFn=\"selectFn\"\r\n >\r\n @if (selectionType() !== 'single') {\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input table-check\"\r\n type=\"checkbox\"\r\n [checked]=\"allRowsSelected\"\r\n (change)=\"selectFn()\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n ngx-datatable-cell-template\r\n let-value=\"value\"\r\n let-row=\"row\"\r\n let-isSelected=\"isSelected\"\r\n let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\r\n >\r\n @if (selectionType() === 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n @if (selectionType() !== 'single') {\r\n <div class=\"h-100 form-check form-check-sm form-check-custom form-check-solid\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [checked]=\"isSelected\"\r\n (change)=\"onCheckboxChangeFn($event)\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @if (actionsTemplate() || (actionList.length && hasAtLeastOnePermittedAction)) {\r\n <ngx-datatable-column\r\n [name]=\"actionsText() | abpLocalization\"\r\n [maxWidth]=\"_actionsColumnWidth()\"\r\n [width]=\"_actionsColumnWidth() || 200\"\r\n [canAutoResize]=\"!_actionsColumnWidth()\"\r\n [sortable]=\"false\"\r\n >\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n @if (actionsTemplate(); as template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"\r\n ></ng-container>\r\n } @else if (isVisibleActions(row)) {\r\n <abp-grid-actions [index]=\"i\" [record]=\"row\" text=\"AbpUi::Actions\"></abp-grid-actions>\r\n }\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n @for (prop of propList; track prop.name; let i = $index) {\r\n <ngx-datatable-column\r\n *abpVisible=\"prop.columnVisible(getInjected)\"\r\n [width]=\"columnWidths()[i] || 200\"\r\n [canAutoResize]=\"!columnWidths()[i]\"\r\n [name]=\"(prop.isExtra ? '::' + prop.displayName : prop.displayName) | abpLocalization\"\r\n [prop]=\"prop.name\"\r\n [sortable]=\"prop.sortable\"\r\n >\r\n <ng-template ngx-datatable-header-template let-column=\"column\" let-sortFn=\"sortFn\">\r\n @if (prop.tooltip) {\r\n <span\r\n [ngbTooltip]=\"prop.tooltip.text | abpLocalization\"\r\n [placement]=\"prop.tooltip.placement || 'auto'\"\r\n container=\"body\"\r\n [class.pointer]=\"prop.sortable\"\r\n (click)=\"prop.sortable && sortFn()\"\r\n >\r\n {{ column.name }} <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\r\n </span>\r\n } @else {\r\n <span [class.pointer]=\"prop.sortable\" (click)=\"prop.sortable && sortFn()\">\r\n {{ column.name }}\r\n </span>\r\n }\r\n </ng-template>\r\n <ng-template let-row=\"row\" let-i=\"rowIndex\" ngx-datatable-cell-template>\r\n <ng-container *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n <ng-container *abpVisible=\"row['_' + prop.name]?.visible\">\r\n @if (!row['_' + prop.name].component) {\r\n @if (prop.type === 'datetime' || prop.type === 'date' || prop.type === 'time') {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n : ('::' + (row['_' + prop.name]?.value | async | abpUtcToLocal: prop.type)\r\n | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n } @else {\r\n <div\r\n [innerHTML]=\"\r\n !prop.isExtra\r\n ? (row['_' + prop.name]?.value | async)\r\n : ('::' + (row['_' + prop.name]?.value | async) | abpLocalization)\r\n \"\r\n (click)=\"\r\n prop.action &&\r\n prop.action({ getInjected: getInjected, record: row, index: i })\r\n \"\r\n [class]=\"entityPropTypeClasses[prop.type]\"\r\n [class.pointer]=\"prop.action\"\r\n ></div>\r\n }\r\n } @else {\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n row['_' + prop.name].component;\r\n injector: row['_' + prop.name].injector\r\n \"\r\n />\r\n }\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </ngx-datatable-column>\r\n }\r\n </ngx-datatable>\r\n}\r\n", styles: [":host ::ng-deep .ngx-datatable.material .datatable-body .datatable-row-detail{background:none;padding:0}\n"] }]
1223
1293
  }], ctorParameters: () => [], propDecorators: { actionsTextInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionsText", required: false }] }], dataInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], list: [{ type: i0.Input, args: [{ isSignal: true, alias: "list", required: true }] }], recordsTotal: [{ type: i0.Input, args: [{ isSignal: true, alias: "recordsTotal", required: true }] }], actionsColumnWidthInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionsColumnWidth", required: false }] }], actionsTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionsTemplate", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], selectionTypeInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionType", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], infiniteScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "infiniteScroll", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], scrollThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollThreshold", required: false }] }], tableHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableHeight", required: false }] }], rowDetailTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowDetailTemplate", required: false }] }], rowDetailHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowDetailHeight", required: false }] }], tableActivate: [{ type: i0.Output, args: ["tableActivate"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], loadMore: [{ type: i0.Output, args: ["loadMore"] }], rowDetailToggle: [{ type: i0.Output, args: ["rowDetailToggle"] }], rowDetailComponent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ExtensibleTableRowDetailComponent), { isSignal: true }] }], table: [{ type: i0.ViewChild, args: ['table', { isSignal: true }] }] } });
1224
1294
 
1225
1295
  class CreateInjectorPipe {
@@ -1245,10 +1315,10 @@ class CreateInjectorPipe {
1245
1315
  };
1246
1316
  return { get };
1247
1317
  }
1248
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: CreateInjectorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1249
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.17", ngImport: i0, type: CreateInjectorPipe, isStandalone: true, name: "createInjector" }); }
1318
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CreateInjectorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1319
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: CreateInjectorPipe, isStandalone: true, name: "createInjector" }); }
1250
1320
  }
1251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: CreateInjectorPipe, decorators: [{
1321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CreateInjectorPipe, decorators: [{
1252
1322
  type: Pipe,
1253
1323
  args: [{
1254
1324
  name: 'createInjector',
@@ -1269,15 +1339,15 @@ class PageToolbarComponent extends AbstractActionsComponent {
1269
1339
  value: value,
1270
1340
  };
1271
1341
  }
1272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: PageToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1273
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: PageToolbarComponent, isStandalone: true, selector: "abp-page-toolbar", providers: [
1342
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PageToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1343
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: PageToolbarComponent, isStandalone: true, selector: "abp-page-toolbar", providers: [
1274
1344
  {
1275
1345
  provide: EXTENSIONS_ACTION_TYPE,
1276
1346
  useValue: 'toolbarActions',
1277
1347
  },
1278
1348
  ], exportAs: ["abpPageToolbar"], usesInheritance: true, ngImport: i0, template: "<div class=\"row justify-content-end mx-0 gap-2\" id=\"AbpContentToolbar\">\r\n @for (action of actionList; track action.component || action.action; let last = $last) {\r\n <div class=\"col-auto px-0 pt-0\" [class.pe-0]=\"last\">\r\n @if (action.visible(data)) {\r\n <ng-container *abpPermission=\"action.permission; runChangeDetection: false\">\r\n @if (action.component; as component) {\r\n <ng-container *ngComponentOutlet=\"component; injector: record | createInjector: action:this\"></ng-container>\r\n\r\n }@else {\r\n @if (asToolbarAction(action).value; as toolbarAction ) {\r\n <button (click)=\"action.action(data)\" type=\"button\"\r\n [class]=\"toolbarAction?.btnClass ? toolbarAction?.btnClass : defaultBtnClass\"\r\n class=\"d-inline-flex align-items-center gap-1\">\r\n <i [class]=\"toolbarAction?.icon\" [class.me-1]=\"toolbarAction?.icon\"></i>\r\n {{ toolbarAction?.text | abpLocalization }}\r\n </button>\r\n }\r\n }\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n</div>", dependencies: [{ kind: "directive", type: PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: CreateInjectorPipe, name: "createInjector" }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1279
1349
  }
1280
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: PageToolbarComponent, decorators: [{
1350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PageToolbarComponent, decorators: [{
1281
1351
  type: Component,
1282
1352
  args: [{ exportAs: 'abpPageToolbar', selector: 'abp-page-toolbar', imports: [
1283
1353
  CreateInjectorPipe,
@@ -1602,8 +1672,8 @@ const importWithExport = [
1602
1672
  ExtensibleFormMultiselectComponent,
1603
1673
  ];
1604
1674
  class ExtensibleModule {
1605
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1606
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleModule, imports: [CoreModule,
1675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1676
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleModule, imports: [CoreModule,
1607
1677
  ThemeSharedModule,
1608
1678
  NgxValidateCoreModule,
1609
1679
  NgbDatepickerModule,
@@ -1631,7 +1701,7 @@ class ExtensibleModule {
1631
1701
  ExtensibleTableComponent,
1632
1702
  ExtensibleTableRowDetailComponent,
1633
1703
  ExtensibleFormMultiselectComponent] }); }
1634
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleModule, imports: [CoreModule,
1704
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleModule, imports: [CoreModule,
1635
1705
  ThemeSharedModule,
1636
1706
  NgxValidateCoreModule,
1637
1707
  NgbDatepickerModule,
@@ -1645,7 +1715,7 @@ class ExtensibleModule {
1645
1715
  ExtensibleTableComponent,
1646
1716
  ExtensibleFormMultiselectComponent] }); }
1647
1717
  }
1648
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExtensibleModule, decorators: [{
1718
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ExtensibleModule, decorators: [{
1649
1719
  type: NgModule,
1650
1720
  args: [{
1651
1721
  declarations: [],