@wertzui/ngx-restworld-client 16.4.0 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/fesm2022/wertzui-ngx-restworld-client.mjs +965 -562
  2. package/fesm2022/wertzui-ngx-restworld-client.mjs.map +1 -1
  3. package/index.d.ts +2258 -4
  4. package/index.d.ts.map +1 -0
  5. package/package.json +25 -23
  6. package/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.d.ts +0 -39
  7. package/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.d.ts.map +0 -1
  8. package/lib/components/restworld-avatar/restworld-avatar.component.d.ts +0 -27
  9. package/lib/components/restworld-avatar/restworld-avatar.component.d.ts.map +0 -1
  10. package/lib/components/restworld-displays/restworld-displays.d.ts +0 -247
  11. package/lib/components/restworld-displays/restworld-displays.d.ts.map +0 -1
  12. package/lib/components/restworld-file/restworld-file.component.d.ts +0 -40
  13. package/lib/components/restworld-file/restworld-file.component.d.ts.map +0 -1
  14. package/lib/components/restworld-form/restworld-form.component.d.ts +0 -126
  15. package/lib/components/restworld-form/restworld-form.component.d.ts.map +0 -1
  16. package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts +0 -33
  17. package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts.map +0 -1
  18. package/lib/components/restworld-image/restworld-image.component.d.ts +0 -64
  19. package/lib/components/restworld-image/restworld-image.component.d.ts.map +0 -1
  20. package/lib/components/restworld-inputs/restworld-inputs.d.ts +0 -235
  21. package/lib/components/restworld-inputs/restworld-inputs.d.ts.map +0 -1
  22. package/lib/components/restworld-label/restworld-label.component.d.ts +0 -20
  23. package/lib/components/restworld-label/restworld-label.component.d.ts.map +0 -1
  24. package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts +0 -21
  25. package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts.map +0 -1
  26. package/lib/components/restworld-table/restworld-table.component.d.ts +0 -231
  27. package/lib/components/restworld-table/restworld-table.component.d.ts.map +0 -1
  28. package/lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component.d.ts +0 -160
  29. package/lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component.d.ts.map +0 -1
  30. package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts +0 -31
  31. package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts.map +0 -1
  32. package/lib/constants/link-names.d.ts +0 -12
  33. package/lib/constants/link-names.d.ts.map +0 -1
  34. package/lib/directives/property.directives.d.ts +0 -117
  35. package/lib/directives/property.directives.d.ts.map +0 -1
  36. package/lib/models/api-url.d.ts +0 -18
  37. package/lib/models/api-url.d.ts.map +0 -1
  38. package/lib/models/client-settings.d.ts +0 -19
  39. package/lib/models/client-settings.d.ts.map +0 -1
  40. package/lib/models/events.d.ts +0 -40
  41. package/lib/models/events.d.ts.map +0 -1
  42. package/lib/models/o-data.d.ts +0 -23
  43. package/lib/models/o-data.d.ts.map +0 -1
  44. package/lib/models/restworld-image.d.ts +0 -28
  45. package/lib/models/restworld-image.d.ts.map +0 -1
  46. package/lib/models/restworld-options.d.ts +0 -6
  47. package/lib/models/restworld-options.d.ts.map +0 -1
  48. package/lib/models/special-properties.d.ts +0 -15
  49. package/lib/models/special-properties.d.ts.map +0 -1
  50. package/lib/models/templating.d.ts +0 -14
  51. package/lib/models/templating.d.ts.map +0 -1
  52. package/lib/pipes/as.pipe.d.ts +0 -21
  53. package/lib/pipes/as.pipe.d.ts.map +0 -1
  54. package/lib/pipes/clr-format.pipe.d.ts +0 -10
  55. package/lib/pipes/clr-format.pipe.d.ts.map +0 -1
  56. package/lib/pipes/property-type-format.pipe.d.ts +0 -15
  57. package/lib/pipes/property-type-format.pipe.d.ts.map +0 -1
  58. package/lib/pipes/safe-url.pipe.d.ts +0 -22
  59. package/lib/pipes/safe-url.pipe.d.ts.map +0 -1
  60. package/lib/provide-restworld.d.ts +0 -24
  61. package/lib/provide-restworld.d.ts.map +0 -1
  62. package/lib/services/avatar-generator.d.ts +0 -48
  63. package/lib/services/avatar-generator.d.ts.map +0 -1
  64. package/lib/services/odata-filter-parser.d.ts +0 -11
  65. package/lib/services/odata-filter-parser.d.ts.map +0 -1
  66. package/lib/services/odata-visitor.d.ts +0 -27
  67. package/lib/services/odata-visitor.d.ts.map +0 -1
  68. package/lib/services/odata.service.d.ts +0 -77
  69. package/lib/services/odata.service.d.ts.map +0 -1
  70. package/lib/services/opentelemetry.service.d.ts +0 -26
  71. package/lib/services/opentelemetry.service.d.ts.map +0 -1
  72. package/lib/services/options.service.d.ts +0 -77
  73. package/lib/services/options.service.d.ts.map +0 -1
  74. package/lib/services/problem.service.d.ts +0 -65
  75. package/lib/services/problem.service.d.ts.map +0 -1
  76. package/lib/services/restworld-client-collection.d.ts +0 -44
  77. package/lib/services/restworld-client-collection.d.ts.map +0 -1
  78. package/lib/services/restworld-client.d.ts +0 -231
  79. package/lib/services/restworld-client.d.ts.map +0 -1
  80. package/lib/services/settings.service.d.ts +0 -25
  81. package/lib/services/settings.service.d.ts.map +0 -1
  82. package/lib/util/debounce.d.ts +0 -9
  83. package/lib/util/debounce.d.ts.map +0 -1
  84. package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts +0 -58
  85. package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts.map +0 -1
  86. package/lib/views/restworld-list-view/restworld-list-view.component.d.ts +0 -89
  87. package/lib/views/restworld-list-view/restworld-list-view.component.d.ts.map +0 -1
  88. package/public-api.d.ts +0 -40
  89. package/public-api.d.ts.map +0 -1
  90. package/wertzui-ngx-restworld-client.d.ts.map +0 -1
@@ -15,10 +15,9 @@ import * as i2$1 from 'primeng/api';
15
15
  import { PrimeTemplate, SharedModule, FilterMatchMode, TranslationKeys } from 'primeng/api';
16
16
  import { BaseComponent } from 'primeng/basecomponent';
17
17
  import { CheckboxStyle } from 'primeng/checkbox';
18
- import { CheckIcon, MinusIcon } from 'primeng/icons';
19
- import { HttpHeaders } from '@angular/common/http';
18
+ import { HttpHeaders, HttpEventType, HTTP_INTERCEPTORS } from '@angular/common/http';
20
19
  import { NgHttpCachingHeaders, withNgHttpCachingLocalStorage, NgHttpCachingStrategy, provideNgHttpCaching } from 'ng-http-caching';
21
- import { lastValueFrom, merge, map, mergeMap } from 'rxjs';
20
+ import { lastValueFrom, merge, map, mergeMap, tap, finalize } from 'rxjs';
22
21
  import * as i1$3 from 'primeng/button';
23
22
  import { ButtonModule, ButtonDirective } from 'primeng/button';
24
23
  import * as i2$2 from 'primeng/fileupload';
@@ -44,12 +43,14 @@ import { Dialog, DialogModule } from 'primeng/dialog';
44
43
  import * as i4 from 'primeng/colorpicker';
45
44
  import { ColorPickerModule } from 'primeng/colorpicker';
46
45
  import { InputText } from 'primeng/inputtext';
46
+ import { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';
47
47
  import { toSignal, toObservable } from '@angular/core/rxjs-interop';
48
48
  import * as i6 from 'primeng/progressspinner';
49
49
  import { ProgressSpinnerModule } from 'primeng/progressspinner';
50
50
  import * as i8 from 'primeng/ripple';
51
51
  import { RippleModule } from 'primeng/ripple';
52
52
  import * as i3$4 from '@angular/router';
53
+ import { NavigationEnd } from '@angular/router';
53
54
  import * as i4$1 from 'primeng/splitbutton';
54
55
  import { SplitButtonModule } from 'primeng/splitbutton';
55
56
  import { createTraverser, TokenType, defaultParser } from '@odata/parser';
@@ -59,11 +60,13 @@ import { ContextMenuModule } from 'primeng/contextmenu';
59
60
  import * as i5 from 'primeng/table';
60
61
  import { TableModule } from 'primeng/table';
61
62
  import * as i4$2 from 'primeng/config';
62
- import { registerInstrumentations } from '@opentelemetry/instrumentation';
63
63
  import { WebTracerProvider, SimpleSpanProcessor, ConsoleSpanExporter, BatchSpanProcessor, AlwaysOnSampler, ParentBasedSampler, TraceIdRatioBasedSampler, AlwaysOffSampler } from '@opentelemetry/sdk-trace-web';
64
- import { ZoneContextManager } from '@opentelemetry/context-zone';
65
- import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
66
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
64
+ import { ZoneContextManager } from '@opentelemetry/context-zone-peer-dep';
65
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
66
+ import { resourceFromAttributes } from '@opentelemetry/resources';
67
+ import { trace, context, SpanKind, propagation, SpanStatusCode } from '@opentelemetry/api';
68
+ import { filter } from 'rxjs/operators';
69
+ import { ATTR_SERVICE_NAME, ATTR_HTTP_REQUEST_HEADER, ATTR_CLIENT_PORT, ATTR_CLIENT_ADDRESS, ATTR_URL_SCHEME, ATTR_URL_QUERY, ATTR_URL_PATH, ATTR_URL_FULL, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_HTTP_RESPONSE_HEADER } from '@opentelemetry/semantic-conventions';
67
70
  import * as i7$1 from 'primeng/confirmdialog';
68
71
  import { ConfirmDialogModule } from 'primeng/confirmdialog';
69
72
  import * as i5$1 from 'primeng/skeleton';
@@ -194,10 +197,10 @@ class AvatarGenerator {
194
197
  };
195
198
  return style;
196
199
  }
197
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: AvatarGenerator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
198
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: AvatarGenerator, providedIn: 'root' });
200
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AvatarGenerator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
201
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AvatarGenerator, providedIn: 'root' });
199
202
  }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: AvatarGenerator, decorators: [{
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AvatarGenerator, decorators: [{
201
204
  type: Injectable,
202
205
  args: [{
203
206
  providedIn: 'root',
@@ -216,18 +219,18 @@ class RestWorldAvatarComponent {
216
219
  /**
217
220
  * The username of the user to display an avatar for.
218
221
  */
219
- user = input.required();
220
- image = computed(async () => await this._generator.getImageAsync(this.user()));
221
- label = computed(async () => await this._generator.getLabelAsync(this.user()));
222
- style = computed(async () => await this._generator.getStyleAsync(this.user()));
223
- tooltip = computed(() => this.user() ?? '');
222
+ user = input.required(...(ngDevMode ? [{ debugName: "user" }] : []));
223
+ image = computed(async () => await this._generator.getImageAsync(this.user()), ...(ngDevMode ? [{ debugName: "image" }] : []));
224
+ label = computed(async () => await this._generator.getLabelAsync(this.user()), ...(ngDevMode ? [{ debugName: "label" }] : []));
225
+ style = computed(async () => await this._generator.getStyleAsync(this.user()), ...(ngDevMode ? [{ debugName: "style" }] : []));
226
+ tooltip = computed(() => this.user() ?? '', ...(ngDevMode ? [{ debugName: "tooltip" }] : []));
224
227
  constructor(_generator) {
225
228
  this._generator = _generator;
226
229
  }
227
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldAvatarComponent, deps: [{ token: AvatarGenerator }], target: i0.ɵɵFactoryTarget.Component });
228
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.6", type: RestWorldAvatarComponent, isStandalone: true, selector: "rw-avatar", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<p-avatar \n [pTooltip]=\"tooltip()\" \n tooltipPosition=\"top\" \n [image]=\"$any(image() | async)\" \n [label]=\"$any(label() | async)\" \n [style]=\"style() | async\"\n shape=\"circle\">\n</p-avatar>", styles: [""], dependencies: [{ kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
230
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldAvatarComponent, deps: [{ token: AvatarGenerator }], target: i0.ɵɵFactoryTarget.Component });
231
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldAvatarComponent, isStandalone: true, selector: "rw-avatar", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<p-avatar \n [pTooltip]=\"tooltip()\" \n tooltipPosition=\"top\" \n [image]=\"$any(image() | async)\" \n [label]=\"$any(label() | async)\" \n [style]=\"style() | async\"\n shape=\"circle\">\n</p-avatar>", styles: [""], dependencies: [{ kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
229
232
  }
230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldAvatarComponent, decorators: [{
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldAvatarComponent, decorators: [{
231
234
  type: Component,
232
235
  args: [{ selector: 'rw-avatar', standalone: true, imports: [AvatarModule, TooltipModule, AsyncPipe], template: "<p-avatar \n [pTooltip]=\"tooltip()\" \n tooltipPosition=\"top\" \n [image]=\"$any(image() | async)\" \n [label]=\"$any(label() | async)\" \n [style]=\"style() | async\"\n shape=\"circle\">\n</p-avatar>" }]
233
236
  }], ctorParameters: () => [{ type: AvatarGenerator }] });
@@ -257,14 +260,14 @@ class RestWorldLabelComponent {
257
260
  * The property to be displayed.
258
261
  * @required
259
262
  **/
260
- property = input.required();
263
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
261
264
  get PropertyType() {
262
265
  return PropertyType;
263
266
  }
264
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
265
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldLabelComponent, isStandalone: true, selector: "rw-label", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n <label \r\n [attr.for]=\"property().name\"\r\n [class.p-disabled]=\"property().readOnly\">\r\n {{property().prompt ?? property().name}}\r\n </label>\r\n}", styles: [".label-hidden{visibility:hidden}.label-collapsed{display:none}\n"], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
267
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
268
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldLabelComponent, isStandalone: true, selector: "rw-label", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n <label \r\n [attr.for]=\"property().name\"\r\n [class.p-disabled]=\"property().readOnly\">\r\n {{property().prompt ?? property().name}}\r\n </label>\r\n}", styles: [".label-hidden{visibility:hidden}.label-collapsed{display:none}\n"], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
266
269
  }
267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldLabelComponent, decorators: [{
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldLabelComponent, decorators: [{
268
271
  type: Component,
269
272
  args: [{ selector: 'rw-label', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], template: "@if (property().type !== PropertyType.Hidden) {\r\n <label \r\n [attr.for]=\"property().name\"\r\n [class.p-disabled]=\"property().readOnly\">\r\n {{property().prompt ?? property().name}}\r\n </label>\r\n}", styles: [".label-hidden{visibility:hidden}.label-collapsed{display:none}\n"] }]
270
273
  }] });
@@ -286,10 +289,10 @@ class ClrFormatPipe {
286
289
  return value;
287
290
  return format.includes("{0") ? ClrFormatPipe.formatFunction(format, value) : ClrFormatPipe.formatFunction("{0:" + format + "}", value);
288
291
  }
289
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ClrFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
290
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.6", ngImport: i0, type: ClrFormatPipe, isStandalone: true, name: "clrFormat" });
292
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ClrFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
293
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: ClrFormatPipe, isStandalone: true, name: "clrFormat" });
291
294
  }
292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ClrFormatPipe, decorators: [{
295
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ClrFormatPipe, decorators: [{
293
296
  type: Pipe,
294
297
  args: [{
295
298
  name: 'clrFormat',
@@ -349,10 +352,10 @@ class PropertyTypeFormatPipe {
349
352
  const format = type === undefined ? "{0}" : (PropertyTypeFormatPipe._typeToFormatMap.get(type) ?? "{0}");
350
353
  return this._clrFormatPipe.transform(value, format);
351
354
  }
352
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyTypeFormatPipe, deps: [{ token: ClrFormatPipe }], target: i0.ɵɵFactoryTarget.Pipe });
353
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.6", ngImport: i0, type: PropertyTypeFormatPipe, isStandalone: true, name: "propertyTypeFormat" });
355
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyTypeFormatPipe, deps: [{ token: ClrFormatPipe }], target: i0.ɵɵFactoryTarget.Pipe });
356
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: PropertyTypeFormatPipe, isStandalone: true, name: "propertyTypeFormat" });
354
357
  }
355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyTypeFormatPipe, decorators: [{
358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyTypeFormatPipe, decorators: [{
356
359
  type: Pipe,
357
360
  args: [{
358
361
  name: 'propertyTypeFormat',
@@ -401,93 +404,93 @@ class TriStateCheckbox extends BaseComponent {
401
404
  * Value of the checkbox.
402
405
  * @group Props
403
406
  */
404
- value = input();
407
+ value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
405
408
  /**
406
409
  * Name of the checkbox group.
407
410
  * @group Props
408
411
  */
409
- name = input();
412
+ name = input(...(ngDevMode ? [undefined, { debugName: "name" }] : []));
410
413
  /**
411
414
  * When present, it specifies that the element should be disabled.
412
415
  * @group Props
413
416
  */
414
- disabled = model(undefined);
417
+ disabled = model(undefined, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
415
418
  /**
416
419
  * Establishes relationships between the component and label(s) where its value should be one or more element IDs.
417
420
  * @group Props
418
421
  */
419
- ariaLabelledBy = input();
422
+ ariaLabelledBy = input(...(ngDevMode ? [undefined, { debugName: "ariaLabelledBy" }] : []));
420
423
  /**
421
424
  * Used to define a string that labels the input element.
422
425
  * @group Props
423
426
  */
424
- ariaLabel = input();
427
+ ariaLabel = input(...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : []));
425
428
  /**
426
429
  * Index of the element in tabbing order.
427
430
  * @group Props
428
431
  */
429
- tabindex = input(undefined, { transform: numberAttribute });
432
+ tabindex = input(undefined, ...(ngDevMode ? [{ debugName: "tabindex", transform: numberAttribute }] : [{ transform: numberAttribute }]));
430
433
  /**
431
434
  * Identifier of the focus input to match a label defined for the component.
432
435
  * @group Props
433
436
  */
434
- inputId = input();
437
+ inputId = input(...(ngDevMode ? [undefined, { debugName: "inputId" }] : []));
435
438
  /**
436
439
  * Inline style of the component.
437
440
  * @group Props
438
441
  */
439
- style = input();
442
+ style = input(...(ngDevMode ? [undefined, { debugName: "style" }] : []));
440
443
  /**
441
444
  * Inline style of the input element.
442
445
  * @group Props
443
446
  */
444
- inputStyle = input();
447
+ inputStyle = input(...(ngDevMode ? [undefined, { debugName: "inputStyle" }] : []));
445
448
  /**
446
449
  * Style class of the component.
447
450
  * @group Props
448
451
  */
449
- styleClass = input("");
452
+ styleClass = input("", ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
450
453
  /**
451
454
  * Style class of the input element.
452
455
  * @group Props
453
456
  */
454
- inputClass = input("");
457
+ inputClass = input("", ...(ngDevMode ? [{ debugName: "inputClass" }] : []));
455
458
  /**
456
459
  * Defines the size of the component.
457
460
  * @group Props
458
461
  */
459
- size = input();
462
+ size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
460
463
  /**
461
464
  * Form control value.
462
465
  * @group Props
463
466
  */
464
- formControl = input();
467
+ formControl = input(...(ngDevMode ? [undefined, { debugName: "formControl" }] : []));
465
468
  /**
466
469
  * Icon class of the checkbox icon.
467
470
  * @group Props
468
471
  */
469
- checkboxIcon = input();
472
+ checkboxIcon = input(...(ngDevMode ? [undefined, { debugName: "checkboxIcon" }] : []));
470
473
  /**
471
474
  * When present, it specifies that the component cannot be edited.
472
475
  * @group Props
473
476
  */
474
- readonly = input(undefined, { transform: booleanAttribute });
477
+ readonly = input(undefined, ...(ngDevMode ? [{ debugName: "readonly", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
475
478
  /**
476
479
  * When present, it specifies that checkbox must be checked before submitting the form.
477
480
  * @group Props
478
481
  */
479
- required = input(undefined, { transform: booleanAttribute });
482
+ required = input(undefined, ...(ngDevMode ? [{ debugName: "required", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
480
483
  /**
481
484
  * When present, it specifies that the component should automatically get focus on load.
482
485
  * @group Props
483
486
  */
484
- autofocus = input(undefined, { transform: booleanAttribute });
485
- model = model(null);
487
+ autofocus = input(undefined, ...(ngDevMode ? [{ debugName: "autofocus", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
488
+ model = model(null, ...(ngDevMode ? [{ debugName: "model" }] : []));
486
489
  /**
487
490
  * Specifies the input variant of the component.
488
491
  * @group Props
489
492
  */
490
- variant = input('outlined');
493
+ variant = input('outlined', ...(ngDevMode ? [{ debugName: "variant" }] : []));
491
494
  /**
492
495
  * Callback to invoke on value change.
493
496
  * @param {CheckboxChangeEvent} event - Custom value change event.
@@ -516,13 +519,13 @@ class TriStateCheckbox extends BaseComponent {
516
519
  this.config.inputVariant() === 'filled',
517
520
  'p-checkbox-sm p-inputfield-sm': this.size() === 'small',
518
521
  'p-checkbox-lg p-inputfield-lg': this.size() === 'large',
519
- }));
522
+ }), ...(ngDevMode ? [{ debugName: "containerClass" }] : []));
520
523
  /**
521
524
  * The template of the checkbox icon.
522
525
  * @group Templates
523
526
  */
524
- checkboxIconTemplate = contentChild('checkboxicon', { descendants: false });
525
- templates = contentChildren(PrimeTemplate);
527
+ checkboxIconTemplate = contentChild('checkboxicon', ...(ngDevMode ? [{ debugName: "checkboxIconTemplate", descendants: false }] : [{ descendants: false }]));
528
+ templates = contentChildren(PrimeTemplate, ...(ngDevMode ? [{ debugName: "templates" }] : []));
526
529
  _checkboxIconTemplate;
527
530
  onModelChange = () => { };
528
531
  onModelTouched = () => { };
@@ -600,8 +603,8 @@ class TriStateCheckbox extends BaseComponent {
600
603
  this.cd.markForCheck();
601
604
  });
602
605
  }
603
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: TriStateCheckbox, deps: null, target: i0.ɵɵFactoryTarget.Component });
604
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: TriStateCheckbox, isStandalone: true, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "ariaLabelledBy", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null }, inputStyle: { classPropertyName: "inputStyle", publicName: "inputStyle", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: false, transformFunction: null }, checkboxIcon: { classPropertyName: "checkboxIcon", publicName: "checkboxIcon", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", model: "modelChange", onChange: "onChange", onFocus: "onFocus", onBlur: "onBlur" }, providers: [TRI_STATE_CHECKBOX_VALUE_ACCESSOR, CheckboxStyle], queries: [{ propertyName: "checkboxIconTemplate", first: true, predicate: ["checkboxicon"], isSignal: true }, { propertyName: "templates", predicate: PrimeTemplate, isSignal: true }], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["input"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
606
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: TriStateCheckbox, deps: null, target: i0.ɵɵFactoryTarget.Component });
607
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: TriStateCheckbox, isStandalone: true, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "ariaLabelledBy", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null }, inputStyle: { classPropertyName: "inputStyle", publicName: "inputStyle", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: false, transformFunction: null }, checkboxIcon: { classPropertyName: "checkboxIcon", publicName: "checkboxIcon", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", model: "modelChange", onChange: "onChange", onFocus: "onFocus", onBlur: "onBlur" }, providers: [TRI_STATE_CHECKBOX_VALUE_ACCESSOR, CheckboxStyle], queries: [{ propertyName: "checkboxIconTemplate", first: true, predicate: ["checkboxicon"], isSignal: true }, { propertyName: "templates", predicate: PrimeTemplate, isSignal: true }], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["input"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
605
608
  <div [style]="style()" [class]="styleClass()" [ngClass]="containerClass()" [attr.data-p-highlight]="model() === true" [attr.data-p-checked]="model() === true" [attr.data-p-disabled]="disabled()" [title]="model()">
606
609
  <input
607
610
  #input
@@ -630,24 +633,24 @@ class TriStateCheckbox extends BaseComponent {
630
633
  <span class="p-checkbox-icon" [ngClass]="checkboxIcon()" [attr.data-pc-section]="'icon'"></span>
631
634
  }
632
635
  @else {
633
- <CheckIcon [styleClass]="'p-checkbox-icon'" [attr.data-pc-section]="'icon'" />
636
+ <span class="p-checkbox-icon pi pi-check" [attr.data-pc-section]="'icon'"></span>
634
637
  }
635
638
  }
636
639
  @else if (model() === null) {
637
- <MinusIcon [styleClass]="'p-checkbox-icon'" [attr.data-pc-section]="'icon'" />
640
+ <span class="p-checkbox-icon pi pi-minus" [attr.data-pc-section]="'icon'"></span>
638
641
  }
639
642
  }
640
643
  <ng-template *ngTemplateOutlet="checkboxIconTemplate() ?? _checkboxIconTemplate ?? null; context: { model: model, class: 'p-checkbox-icon' }"></ng-template>
641
644
  </div>
642
645
  </div>
643
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CheckIcon, selector: "CheckIcon" }, { kind: "component", type: MinusIcon, selector: "MinusIcon" }, { kind: "ngmodule", type: SharedModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
646
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SharedModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
644
647
  }
645
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: TriStateCheckbox, decorators: [{
648
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: TriStateCheckbox, decorators: [{
646
649
  type: Component,
647
650
  args: [{
648
651
  selector: 'p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box',
649
652
  standalone: true,
650
- imports: [CommonModule, CheckIcon, MinusIcon, SharedModule],
653
+ imports: [CommonModule, SharedModule],
651
654
  template: `
652
655
  <div [style]="style()" [class]="styleClass()" [ngClass]="containerClass()" [attr.data-p-highlight]="model() === true" [attr.data-p-checked]="model() === true" [attr.data-p-disabled]="disabled()" [title]="model()">
653
656
  <input
@@ -677,11 +680,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
677
680
  <span class="p-checkbox-icon" [ngClass]="checkboxIcon()" [attr.data-pc-section]="'icon'"></span>
678
681
  }
679
682
  @else {
680
- <CheckIcon [styleClass]="'p-checkbox-icon'" [attr.data-pc-section]="'icon'" />
683
+ <span class="p-checkbox-icon pi pi-check" [attr.data-pc-section]="'icon'"></span>
681
684
  }
682
685
  }
683
686
  @else if (model() === null) {
684
- <MinusIcon [styleClass]="'p-checkbox-icon'" [attr.data-pc-section]="'icon'" />
687
+ <span class="p-checkbox-icon pi pi-minus" [attr.data-pc-section]="'icon'"></span>
685
688
  }
686
689
  }
687
690
  <ng-template *ngTemplateOutlet="checkboxIconTemplate() ?? _checkboxIconTemplate ?? null; context: { model: model, class: 'p-checkbox-icon' }"></ng-template>
@@ -710,6 +713,8 @@ class ProblemService {
710
713
  const enclosingElement = nativeElement ?? document;
711
714
  setTimeout(() => {
712
715
  const validationErrorElements = enclosingElement.querySelectorAll('rw-validation-errors>val-errors>div');
716
+ if (validationErrorElements.length === 0)
717
+ return;
713
718
  const firstError = validationErrorElements[0];
714
719
  firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
715
720
  }, 100);
@@ -726,6 +731,33 @@ class ProblemService {
726
731
  }
727
732
  return control;
728
733
  }
734
+ /**
735
+ * Adds errors to a control's existing errors.
736
+ * @param control The control to add errors to.
737
+ * @param newErrors The new errors to add.
738
+ */
739
+ addErrors(control, newErrors) {
740
+ if (!newErrors)
741
+ return;
742
+ // Get existing remote errors or initialize an empty array
743
+ const existingErrors = control.errors?.remote;
744
+ // Combine the errors
745
+ let combinedErrors;
746
+ if (!existingErrors) {
747
+ // No existing errors, just use the new ones
748
+ combinedErrors = [newErrors];
749
+ }
750
+ else if (Array.isArray(existingErrors)) {
751
+ // Existing errors are already an array, add to it
752
+ combinedErrors = [...existingErrors, newErrors];
753
+ }
754
+ else {
755
+ // Existing errors are not an array, combine with new errors
756
+ combinedErrors = [existingErrors, newErrors];
757
+ }
758
+ // Set the combined errors
759
+ control.setErrors({ ...control.errors, remote: combinedErrors });
760
+ }
729
761
  /**
730
762
  * Checks the response and displays errors if necessary.
731
763
  * @param response The response to check.
@@ -800,6 +832,8 @@ class ProblemService {
800
832
  displayValidationErrors(problemDetails, formGroup, nativeElement) {
801
833
  // display validation errors
802
834
  if (problemDetails["errors"]) {
835
+ // Add the problem detail to the form group errors
836
+ this.addErrors(formGroup, problemDetails.detail);
803
837
  for (const [key, errorsForKey] of Object.entries(problemDetails["errors"])) {
804
838
  const path = key.split(/\.|\[/).map(e => e.replace("]", ""));
805
839
  // The path might start with a $, indicating the root.
@@ -807,17 +841,21 @@ class ProblemService {
807
841
  path.shift();
808
842
  const formControl = path.reduce(ProblemService.getSubControl, formGroup);
809
843
  if (formControl) {
810
- formControl.setErrors({ ...formControl.errors, ...{ remote: errorsForKey } });
844
+ // Add the errors to the form control
845
+ this.addErrors(formControl, errorsForKey);
811
846
  formControl.markAsTouched();
812
847
  }
848
+ // Add the field-specific errors to the form group as well
849
+ this.addErrors(formGroup, errorsForKey);
813
850
  }
851
+ formGroup.markAsTouched();
814
852
  }
815
853
  ProblemService.scrollToFirstValidationError(nativeElement);
816
854
  }
817
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ProblemService, deps: [{ token: i2$1.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
818
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ProblemService, providedIn: "root" });
855
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ProblemService, deps: [{ token: i2$1.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
856
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ProblemService, providedIn: "root" });
819
857
  }
820
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ProblemService, decorators: [{
858
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ProblemService, decorators: [{
821
859
  type: Injectable,
822
860
  args: [{
823
861
  providedIn: "root"
@@ -849,7 +887,7 @@ class RestWorldClient {
849
887
  if (!originalHeaders)
850
888
  return headersToAdd;
851
889
  let combinedHeaders = originalHeaders;
852
- for (const key in headersToAdd.keys) {
890
+ for (const key of headersToAdd.keys()) {
853
891
  if (!combinedHeaders.has(key) || overwriteExisting) {
854
892
  const headerValuesToAdd = headersToAdd.getAll(key);
855
893
  if (headerValuesToAdd)
@@ -865,8 +903,8 @@ class RestWorldClient {
865
903
  'Content-Type': `${contentType ?? 'application/json'}; v=${version}`
866
904
  });
867
905
  return new HttpHeaders({
868
- 'Accept': `${accept ?? 'application/hal+json'};`,
869
- 'Content-Type': `${contentType ?? 'application/json'};`
906
+ 'Accept': `${accept ?? 'application/hal+json'}`,
907
+ 'Content-Type': `${contentType ?? 'application/json'}`
870
908
  });
871
909
  }
872
910
  static createHeadersWithoutBody(version, accept) {
@@ -876,7 +914,7 @@ class RestWorldClient {
876
914
  'Content-Type': `v=${version}`
877
915
  });
878
916
  return new HttpHeaders({
879
- 'Accept': `${accept ?? 'application/hal+json'};`,
917
+ 'Accept': `${accept ?? 'application/hal+json'}`,
880
918
  });
881
919
  }
882
920
  /**
@@ -888,12 +926,13 @@ class RestWorldClient {
888
926
  */
889
927
  async delete(resource) {
890
928
  const deleteLink = resource.findLink('delete');
891
- if (!deleteLink)
892
- throw new Error(`The resource ${resource} does not have a delete link.`);
893
- const uri = deleteLink.href;
894
- const header = RestWorldClient.createHeadersWithoutBody(this._options.Version, 'application/hal+json');
895
- const response = await this.halClient.delete(uri, header);
896
- return response;
929
+ if (!deleteLink) {
930
+ const selfLink = resource.findLink('self');
931
+ const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';
932
+ throw new Error(`The resource does not have a delete link. ${resourceInfo}`);
933
+ }
934
+ const url = deleteLink.href;
935
+ return this.deleteByUrl(url, resource.timestamp);
897
936
  }
898
937
  /**
899
938
  * Deletes a resource identified by the given template and timestamp supplied by the given form group.
@@ -914,13 +953,13 @@ class RestWorldClient {
914
953
  * Deletes a resource at the specified URL.
915
954
  *
916
955
  * @param url - The URL of the resource to delete.
917
- * @param timestamp - An optional ETag value to include in the request headers.
956
+ * @param timestamp - An optional If-Match value to include in the request headers.
918
957
  * @returns A promise that resolves to an HttpResponse containing either void or ProblemDetails.
919
958
  */
920
959
  async deleteByUrl(url, timestamp) {
921
960
  let header = RestWorldClient.createHeadersWithoutBody(this._options.Version);
922
961
  if (timestamp !== undefined)
923
- header = header.append("ETag", timestamp);
962
+ header = header.append("If-Match", timestamp);
924
963
  const response = await this.halClient.delete(url, header);
925
964
  return response;
926
965
  }
@@ -1027,20 +1066,57 @@ class RestWorldClient {
1027
1066
  * Retrieves all templates associated with a given resource.
1028
1067
  *
1029
1068
  * This method fetches all forms related to the provided {@link Resource} and extracts the templates from the responses.
1030
- * If any of the form responses indicate a failure, an error is thrown with details about the failed response.
1069
+ * If any of the form responses indicate a failure, it creates a combined ProblemDetails object with information from all failures.
1031
1070
  *
1032
1071
  * @param resource - The {@link Resource} for which to retrieve templates.
1033
- * @returns A promise that resolves to the {@link Templates} associated with the resource.
1034
- * @throws An error if any of the form responses fail.
1072
+ * @returns A promise that resolves to the {@link Templates} associated with the resource or ProblemDetails if there's an error.
1035
1073
  */
1036
1074
  async getAllTemplates(resource) {
1037
1075
  const formResponses = await this.getAllForms(resource);
1038
1076
  const failedResponses = formResponses.filter(response => !response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body);
1039
1077
  if (failedResponses.length !== 0) {
1040
- for (const response of failedResponses) {
1041
- throw new Error(`Error while loading the response from ${response.url}, Status ${response.status} - ${response.statusText}, Content: ${JSON.stringify(response.body)}`);
1078
+ // If we have multiple failed responses, create a combined problem details
1079
+ if (failedResponses.length > 1) {
1080
+ const failureDetails = failedResponses.map(response => {
1081
+ if (ProblemDetails.isProblemDetails(response.body)) {
1082
+ return response.body.detail || `Problem details from ${response.url}`;
1083
+ }
1084
+ return `Error ${response.status} (${response.statusText}) from ${response.url}`;
1085
+ }).join('; ');
1086
+ // Check if all failed responses have the same status code
1087
+ const allStatuses = failedResponses.map(response => {
1088
+ if (ProblemDetails.isProblemDetails(response.body)) {
1089
+ return response.body.status;
1090
+ }
1091
+ return response.status;
1092
+ });
1093
+ // Use the common status code if all are the same, otherwise use 500
1094
+ const uniqueStatuses = new Set(allStatuses);
1095
+ const status = uniqueStatuses.size === 1 ? allStatuses[0] : 500;
1096
+ const problemDetailsDto = {
1097
+ _links: { self: [{ href: resource.findLink('self')?.href || "" }] },
1098
+ detail: `Multiple errors occurred while loading form responses: ${failureDetails}`,
1099
+ status: status,
1100
+ title: "Multiple Form Loading Errors",
1101
+ type: "https://tools.ietf.org/html/rfc7231#section-6.5"
1102
+ };
1103
+ return new ProblemDetails(problemDetailsDto);
1104
+ }
1105
+ // Single failure case
1106
+ const firstFailedResponse = failedResponses[0];
1107
+ if (ProblemDetails.isProblemDetails(firstFailedResponse.body)) {
1108
+ return firstFailedResponse.body;
1042
1109
  }
1043
- return Promise.resolve({});
1110
+ // If we don't have a ProblemDetails object but the response failed,
1111
+ // create a new ProblemDetails object with the error information
1112
+ const problemDetailsDto = {
1113
+ _links: { self: [{ href: firstFailedResponse.url || "" }] },
1114
+ detail: `Error while loading the response from ${firstFailedResponse.url}`,
1115
+ status: firstFailedResponse.status,
1116
+ title: firstFailedResponse.statusText,
1117
+ type: "https://tools.ietf.org/html/rfc7231#section-6.5.1"
1118
+ };
1119
+ return new ProblemDetails(problemDetailsDto);
1044
1120
  }
1045
1121
  const formTemplates = Object.assign({}, ...formResponses.map(response => response.body._templates));
1046
1122
  return formTemplates;
@@ -1215,10 +1291,14 @@ class RestWorldClient {
1215
1291
  */
1216
1292
  async save(resource) {
1217
1293
  const saveLink = resource.findLink('save');
1218
- if (!saveLink)
1219
- throw new Error(`The resource ${resource} does not have a save link.`);
1220
- if (!saveLink.name)
1221
- throw new Error(`The save link ${saveLink} does not have a save name.`);
1294
+ if (!saveLink) {
1295
+ const selfLink = resource.findLink('self');
1296
+ const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';
1297
+ throw new Error(`The resource does not have a save link. ${resourceInfo}`);
1298
+ }
1299
+ if (!saveLink.name) {
1300
+ throw new Error(`The save link with href '${saveLink.href}' does not have a save name.`);
1301
+ }
1222
1302
  const uri = saveLink.href;
1223
1303
  const method = saveLink.name.toLowerCase();
1224
1304
  const header = RestWorldClient.createHeadersWithBody(this._options.Version);
@@ -1282,6 +1362,127 @@ class RestWorldClient {
1282
1362
  else
1283
1363
  this._defaultCurie = curies[0].name;
1284
1364
  }
1365
+ /**
1366
+ * Retrieves all forms associated with a resource fetched by its URI.
1367
+ *
1368
+ * This method first fetches the resource from the given URI and then retrieves all forms for that resource.
1369
+ * If the resource response contains a problem detail, it returns an array with a single HTTP response containing that problem detail.
1370
+ *
1371
+ * @param uri - The URI of the resource to fetch.
1372
+ * @param headers - Optional HTTP headers to include in the request.
1373
+ * @returns A promise that resolves to an array of HTTP responses, each containing either a `FormsResource` or `ProblemDetails`.
1374
+ */
1375
+ async getAllFormsByUri(uri, headers) {
1376
+ const resourceResponse = await this.getSingleByUri(uri, headers);
1377
+ if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {
1378
+ // Return the problem details as is, wrapped in an array
1379
+ if (ProblemDetails.isProblemDetails(resourceResponse.body)) {
1380
+ return [resourceResponse];
1381
+ }
1382
+ // If no body or problem details, create a proper ProblemDetails object
1383
+ const problemDetailsDto = {
1384
+ _links: { self: [{ href: uri }] },
1385
+ detail: `Error while loading the resource from ${uri}`,
1386
+ status: resourceResponse.status,
1387
+ title: resourceResponse.statusText,
1388
+ type: "https://tools.ietf.org/html/rfc7231#section-6.5"
1389
+ };
1390
+ const problemDetails = new ProblemDetails(problemDetailsDto);
1391
+ // Modify the response body to include our problem details
1392
+ const errorResponse = { ...resourceResponse, body: problemDetails };
1393
+ return [errorResponse];
1394
+ }
1395
+ if (!resourceResponse.body) {
1396
+ // Handle empty response with a proper ProblemDetails object
1397
+ const problemDetailsDto = {
1398
+ _links: { self: [{ href: uri }] },
1399
+ detail: `Resource from ${uri} was empty`,
1400
+ status: 404,
1401
+ title: "Resource Not Found",
1402
+ type: "https://tools.ietf.org/html/rfc7231#section-6.5.4"
1403
+ };
1404
+ const problemDetails = new ProblemDetails(problemDetailsDto);
1405
+ const errorResponse = { ...resourceResponse, body: problemDetails };
1406
+ return [errorResponse];
1407
+ }
1408
+ return this.getAllForms(resourceResponse.body);
1409
+ }
1410
+ /**
1411
+ * Retrieves all templates associated with a resource fetched by its URI.
1412
+ *
1413
+ * This method first fetches the resource from the given URI and then retrieves all templates for that resource.
1414
+ * It combines functionality from {@link getSingleByUri} and {@link getAllTemplates}.
1415
+ * If the resource response contains a problem detail or if any form responses fail,
1416
+ * the method returns the problem detail rather than throwing an error.
1417
+ *
1418
+ * @param uri - The URI of the resource to fetch.
1419
+ * @param headers - Optional HTTP headers to include in the request.
1420
+ * @returns A promise that resolves to the {@link Templates} associated with the resource or a ProblemDetails object if there was an error.
1421
+ */
1422
+ async getAllTemplatesByUri(uri, headers) {
1423
+ const resourceResponse = await this.getSingleByUri(uri, headers);
1424
+ if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {
1425
+ if (ProblemDetails.isProblemDetails(resourceResponse.body)) {
1426
+ return resourceResponse.body;
1427
+ }
1428
+ // If no problem details in body but response not OK, create a proper ProblemDetails object
1429
+ const problemDetailsDto = {
1430
+ _links: { self: [{ href: uri }] },
1431
+ detail: `Error while loading the resource from ${uri}`,
1432
+ status: resourceResponse.status,
1433
+ title: resourceResponse.statusText,
1434
+ type: "https://tools.ietf.org/html/rfc7231#section-6.5"
1435
+ };
1436
+ return new ProblemDetails(problemDetailsDto);
1437
+ }
1438
+ if (!resourceResponse.body) {
1439
+ // Handle empty response with a proper ProblemDetails object
1440
+ const problemDetailsDto = {
1441
+ _links: { self: [{ href: uri }] },
1442
+ detail: `Resource from ${uri} was empty`,
1443
+ status: 404,
1444
+ title: "Resource Not Found",
1445
+ type: "https://tools.ietf.org/html/rfc7231#section-6.5.4"
1446
+ };
1447
+ return new ProblemDetails(problemDetailsDto);
1448
+ }
1449
+ return this.getAllTemplates(resourceResponse.body);
1450
+ }
1451
+ /**
1452
+ * Retrieves a specific template by title from a resource fetched by its URI.
1453
+ *
1454
+ * This method first fetches all templates from the resource at the given URI and then
1455
+ * returns the template with the specified title. If the resource cannot be fetched,
1456
+ * if it contains a problem detail, or if any form responses fail, this method returns
1457
+ * the problem detail rather than throwing an error.
1458
+ *
1459
+ * @param uri - The URI of the resource to fetch.
1460
+ * @param templateTitle - The title of the template to retrieve.
1461
+ * @param headers - Optional HTTP headers to include in the request.
1462
+ * @returns A promise that resolves to the {@link Template} with the specified title or a ProblemDetails object if there was an error.
1463
+ */
1464
+ async getTemplateByUri(uri, templateTitle, headers) {
1465
+ const templatesOrProblemDetails = await this.getAllTemplatesByUri(uri, headers);
1466
+ // If we got ProblemDetails instead of Templates, return it
1467
+ if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {
1468
+ return templatesOrProblemDetails;
1469
+ }
1470
+ const templates = templatesOrProblemDetails;
1471
+ const template = templates[templateTitle];
1472
+ if (template === undefined) {
1473
+ const templateTitles = Object.keys(templates);
1474
+ // Instead of throwing an error, return a properly constructed ProblemDetails object
1475
+ const problemDetailsDto = {
1476
+ _links: { self: [{ href: uri }] },
1477
+ detail: `No template with title '${templateTitle}' found. Available templates are: ${templateTitles.join(', ')}`,
1478
+ status: 404,
1479
+ title: "Template Not Found",
1480
+ type: "https://tools.ietf.org/html/rfc7231#section-6.5.4"
1481
+ };
1482
+ return new ProblemDetails(problemDetailsDto);
1483
+ }
1484
+ return template;
1485
+ }
1285
1486
  }
1286
1487
 
1287
1488
  /**
@@ -1337,10 +1538,10 @@ class RestWorldClientCollection {
1337
1538
  get all() {
1338
1539
  return this._clients;
1339
1540
  }
1340
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldClientCollection, deps: [{ token: i1$1.HalClient }], target: i0.ɵɵFactoryTarget.Injectable });
1341
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldClientCollection, providedIn: 'root' });
1541
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldClientCollection, deps: [{ token: i1$1.HalClient }], target: i0.ɵɵFactoryTarget.Injectable });
1542
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldClientCollection, providedIn: 'root' });
1342
1543
  }
1343
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldClientCollection, decorators: [{
1544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldClientCollection, decorators: [{
1344
1545
  type: Injectable,
1345
1546
  args: [{
1346
1547
  providedIn: 'root'
@@ -1361,15 +1562,15 @@ class OptionsManager {
1361
1562
  selectedValues;
1362
1563
  _getLabel;
1363
1564
  _getTooltip;
1364
- getLabel = computed(() => this._getLabel() ?? ((itemOrValue) => this.getDefaultLabel(itemOrValue)));
1365
- getTooltip = computed(() => this._getTooltip() ?? ((itemOrValue) => this.getDefaultTooltip(itemOrValue)));
1565
+ getLabel = computed(() => this._getLabel() ?? ((itemOrValue) => this.getDefaultLabel(itemOrValue)), ...(ngDevMode ? [{ debugName: "getLabel" }] : []));
1566
+ getTooltip = computed(() => this._getTooltip() ?? ((itemOrValue) => this.getDefaultTooltip(itemOrValue)), ...(ngDevMode ? [{ debugName: "getTooltip" }] : []));
1366
1567
  items = linkedSignal(() => this.options()?.inline ?? []);
1367
- loading = signal(false);
1368
- options = computed(() => this.property().options);
1369
- promptField = computed(() => this.options()?.promptField ?? "prompt");
1370
- valueField = computed(() => this.options()?.valueField ?? "value");
1371
- _client = computed(() => this._clients.getClient(this.apiName()));
1372
- selectedItems = computed(() => this.selectedValues()?.map(value => this.getItemByValue(this.items(), value) ?? []));
1568
+ loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1569
+ options = computed(() => this.property().options, ...(ngDevMode ? [{ debugName: "options" }] : []));
1570
+ promptField = computed(() => this.options()?.promptField ?? "prompt", ...(ngDevMode ? [{ debugName: "promptField" }] : []));
1571
+ valueField = computed(() => this.options()?.valueField ?? "value", ...(ngDevMode ? [{ debugName: "valueField" }] : []));
1572
+ _client = computed(() => this._clients.getClient(this.apiName()), ...(ngDevMode ? [{ debugName: "_client" }] : []));
1573
+ selectedItems = computed(() => this.selectedValues()?.map(value => this.getItemByValue(this.items(), value) ?? []), ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
1373
1574
  constructor(_problemService, _clients, apiName, property, selectedValues, _getLabel, _getTooltip) {
1374
1575
  this._problemService = _problemService;
1375
1576
  this._clients = _clients;
@@ -1512,10 +1713,10 @@ class OptionsService {
1512
1713
  getManager(apiName, property, selectValues, getLabel, getTooltip) {
1513
1714
  return new OptionsManager(this._problemService, this._clients, apiName, property, selectValues, getLabel, getTooltip);
1514
1715
  }
1515
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: OptionsService, deps: [{ token: ProblemService }, { token: RestWorldClientCollection }], target: i0.ɵɵFactoryTarget.Injectable });
1516
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: OptionsService, providedIn: 'root' });
1716
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OptionsService, deps: [{ token: ProblemService }, { token: RestWorldClientCollection }], target: i0.ɵɵFactoryTarget.Injectable });
1717
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OptionsService, providedIn: 'root' });
1517
1718
  }
1518
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: OptionsService, decorators: [{
1719
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OptionsService, decorators: [{
1519
1720
  type: Injectable,
1520
1721
  args: [{
1521
1722
  providedIn: 'root'
@@ -1536,23 +1737,23 @@ class RestWorldDisplayCollectionComponent {
1536
1737
  * @required
1537
1738
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
1538
1739
  */
1539
- apiName = input.required();
1740
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
1540
1741
  /**
1541
1742
  * The property to display.
1542
1743
  * @required
1543
1744
  */
1544
- property = input.required();
1745
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
1545
1746
  templates = computed(() => {
1546
1747
  const values = this.values();
1547
1748
  const property = this.property();
1548
1749
  return values ?
1549
1750
  Array.from(RestWorldDisplayCollectionComponent.map(RestWorldDisplayCollectionComponent.toArray(values).entries(), (entry) => (new NumberTemplate({ ...property._templates.default, title: entry[0].toString() })))) :
1550
1751
  RestWorldDisplayCollectionComponent.getCollectionEntryTemplates(property);
1551
- });
1752
+ }, ...(ngDevMode ? [{ debugName: "templates" }] : []));
1552
1753
  /**
1553
1754
  * The value to display. If not set, the value of the property will be used.
1554
1755
  */
1555
- values = input();
1756
+ values = input(...(ngDevMode ? [undefined, { debugName: "values" }] : []));
1556
1757
  static getCollectionEntryTemplates(property) {
1557
1758
  if (!property)
1558
1759
  return [];
@@ -1572,10 +1773,10 @@ class RestWorldDisplayCollectionComponent {
1572
1773
  return arrayOrDictionary;
1573
1774
  return Object.entries(arrayOrDictionary).map(([key, value]) => ({ key, value: value }));
1574
1775
  }
1575
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayCollectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1576
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldDisplayCollectionComponent, isStandalone: true, selector: "rw-display-collection", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n @for (template of templates(); track template) {\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full flex justify-content-end\">\r\n <rw-display-template [template]=\"$any(template)\" [value]=\"values() ? $any(values())[template.title!] : undefined\" [apiName]=\"apiName()\" class=\"w-full\"></rw-display-template>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayTemplateComponent), selector: "rw-display-template", inputs: ["apiName", "template", "value"] }] });
1776
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayCollectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1777
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayCollectionComponent, isStandalone: true, selector: "rw-display-collection", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n @for (template of templates(); track template) {\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full flex justify-content-end\">\r\n <rw-display-template [template]=\"$any(template)\" [value]=\"values() ? $any(values())[template.title!] : undefined\" [apiName]=\"apiName()\" class=\"w-full\"></rw-display-template>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayTemplateComponent), selector: "rw-display-template", inputs: ["apiName", "template", "value"] }] });
1577
1778
  }
1578
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayCollectionComponent, decorators: [{
1779
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayCollectionComponent, decorators: [{
1579
1780
  type: Component,
1580
1781
  args: [{ selector: 'rw-display-collection', standalone: true, imports: [forwardRef(() => RestWorldDisplayTemplateComponent)], template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n @for (template of templates(); track template) {\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full flex justify-content-end\">\r\n <rw-display-template [template]=\"$any(template)\" [value]=\"values() ? $any(values())[template.title!] : undefined\" [apiName]=\"apiName()\" class=\"w-full\"></rw-display-template>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
1581
1782
  }] });
@@ -1594,30 +1795,30 @@ class RestWorldDisplayComponent {
1594
1795
  * @required
1595
1796
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
1596
1797
  */
1597
- apiName = input.required();
1798
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
1598
1799
  /**
1599
1800
  * Either the value or the property.value if the value is not set.
1600
1801
  */
1601
- computedValue = computed(() => this.value() ?? this.property().value);
1802
+ computedValue = computed(() => this.value() ?? this.property().value, ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
1602
1803
  /**
1603
1804
  * The property to display.
1604
1805
  * @required
1605
1806
  */
1606
- property = input.required();
1807
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
1607
1808
  /**
1608
1809
  * The value to display. If not set, the value of the property will be used.
1609
1810
  */
1610
- value = input();
1811
+ value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
1611
1812
  get PropertyType() {
1612
1813
  return PropertyType;
1613
1814
  }
1614
1815
  get PropertyWithOptions() {
1615
1816
  return PropertyWithOptions;
1616
1817
  }
1617
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1618
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldDisplayComponent, isStandalone: true, selector: "rw-display", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n @if (property().options) {\r\n <rw-display-dropdown [property]=\"$any(property())\" [selectedValues]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-display-object [property]=\"$any(property())\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-display-collection [property]=\"$any(property())\" [values]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-collection>\r\n }\r\n @default {\r\n <rw-display-simple [property]=\"property()\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-simple>\r\n }\r\n }\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayDropdownComponent), selector: "rw-display-dropdown", inputs: ["apiName", "getLabel", "getTooltip", "property", "selectedValues"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplayObjectComponent), selector: "rw-display-object", inputs: ["apiName", "property", "value"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplaySimpleComponent), selector: "rw-display-simple", inputs: ["apiName", "property", "value"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplayCollectionComponent), selector: "rw-display-collection", inputs: ["apiName", "property", "values"] }] });
1818
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1819
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayComponent, isStandalone: true, selector: "rw-display", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n @if (property().options) {\r\n <rw-display-dropdown [property]=\"$any(property())\" [selectedValues]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-display-object [property]=\"$any(property())\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-display-collection [property]=\"$any(property())\" [values]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-collection>\r\n }\r\n @default {\r\n <rw-display-simple [property]=\"property()\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-simple>\r\n }\r\n }\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayDropdownComponent), selector: "rw-display-dropdown", inputs: ["apiName", "getLabel", "getTooltip", "property", "selectedValues"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplayObjectComponent), selector: "rw-display-object", inputs: ["apiName", "property", "value"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplaySimpleComponent), selector: "rw-display-simple", inputs: ["apiName", "property", "value"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplayCollectionComponent), selector: "rw-display-collection", inputs: ["apiName", "property", "values"] }] });
1619
1820
  }
1620
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayComponent, decorators: [{
1821
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayComponent, decorators: [{
1621
1822
  type: Component,
1622
1823
  args: [{ selector: 'rw-display', standalone: true, imports: [forwardRef(() => RestWorldDisplayDropdownComponent), forwardRef(() => RestWorldDisplayObjectComponent), forwardRef(() => RestWorldDisplaySimpleComponent), RestWorldDisplayCollectionComponent], template: "@if (property().type !== PropertyType.Hidden) {\r\n @if (property().options) {\r\n <rw-display-dropdown [property]=\"$any(property())\" [selectedValues]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-display-object [property]=\"$any(property())\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-display-collection [property]=\"$any(property())\" [values]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-collection>\r\n }\r\n @default {\r\n <rw-display-simple [property]=\"property()\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-simple>\r\n }\r\n }\r\n }\r\n}\r\n" }]
1623
1824
  }] });
@@ -1635,7 +1836,7 @@ class RestWorldDisplayDropdownComponent {
1635
1836
  * @required
1636
1837
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
1637
1838
  */
1638
- apiName = input.required();
1839
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
1639
1840
  /**
1640
1841
  * A function that returns the label for the given item.
1641
1842
  * The default returns the prompt and optionally the value in brackets.
@@ -1643,7 +1844,7 @@ class RestWorldDisplayDropdownComponent {
1643
1844
  * Overwrite this function to change the label.
1644
1845
  * @param item The item to get the label for.
1645
1846
  */
1646
- getLabel = input();
1847
+ getLabel = input(...(ngDevMode ? [undefined, { debugName: "getLabel" }] : []));
1647
1848
  /**
1648
1849
  * A function that returns the tooltip for the given item.
1649
1850
  * The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.
@@ -1651,14 +1852,14 @@ class RestWorldDisplayDropdownComponent {
1651
1852
  * Overwrite this function to change the tooltip.
1652
1853
  * @param item The item to get the label for.
1653
1854
  */
1654
- getTooltip = input();
1655
- options = computed(() => this.property().options);
1855
+ getTooltip = input(...(ngDevMode ? [undefined, { debugName: "getTooltip" }] : []));
1856
+ options = computed(() => this.property().options, ...(ngDevMode ? [{ debugName: "options" }] : []));
1656
1857
  /**
1657
1858
  * The property to display.
1658
1859
  * @required
1659
1860
  */
1660
- property = input.required();
1661
- selectedValues = input([], { transform: (value) => (Array.isArray(value) ? value : [value]) });
1861
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
1862
+ selectedValues = input([], ...(ngDevMode ? [{ debugName: "selectedValues", transform: (value) => (Array.isArray(value) ? value : [value]) }] : [{ transform: (value) => (Array.isArray(value) ? value : [value]) }]));
1662
1863
  optionsManager;
1663
1864
  constructor(optionsService) {
1664
1865
  this.optionsManager = optionsService.getManager(this.apiName, this.property, this.selectedValues, this.getLabel, this.getTooltip);
@@ -1666,10 +1867,10 @@ class RestWorldDisplayDropdownComponent {
1666
1867
  async ngOnInit() {
1667
1868
  await this.optionsManager.initialize();
1668
1869
  }
1669
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayDropdownComponent, deps: [{ token: OptionsService }], target: i0.ɵɵFactoryTarget.Component });
1670
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldDisplayDropdownComponent, isStandalone: true, selector: "rw-display-dropdown", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, getTooltip: { classPropertyName: "getTooltip", publicName: "getTooltip", isSignal: true, isRequired: false, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (item of optionsManager.selectedItems(); track item; let last = $last) {\r\n <span [pTooltip]=\"optionsManager.getTooltip()($any(item))\">{{optionsManager.getLabel()($any(item))}}</span>{{last ? \"\" : \", \"}}\r\n}\r\n", styles: [""], dependencies: [{ kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] });
1870
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayDropdownComponent, deps: [{ token: OptionsService }], target: i0.ɵɵFactoryTarget.Component });
1871
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayDropdownComponent, isStandalone: true, selector: "rw-display-dropdown", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, getTooltip: { classPropertyName: "getTooltip", publicName: "getTooltip", isSignal: true, isRequired: false, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (item of optionsManager.selectedItems(); track item; let last = $last) {\r\n <span [pTooltip]=\"optionsManager.getTooltip()($any(item))\">{{optionsManager.getLabel()($any(item))}}</span>{{last ? \"\" : \", \"}}\r\n}\r\n", styles: [""], dependencies: [{ kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }] });
1671
1872
  }
1672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayDropdownComponent, decorators: [{
1873
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayDropdownComponent, decorators: [{
1673
1874
  type: Component,
1674
1875
  args: [{ selector: 'rw-display-dropdown', standalone: true, imports: [Tooltip], template: "@for (item of optionsManager.selectedItems(); track item; let last = $last) {\r\n <span [pTooltip]=\"optionsManager.getTooltip()($any(item))\">{{optionsManager.getLabel()($any(item))}}</span>{{last ? \"\" : \", \"}}\r\n}\r\n" }]
1675
1876
  }], ctorParameters: () => [{ type: OptionsService }] });
@@ -1686,27 +1887,27 @@ class RestWorldDisplayElementComponent {
1686
1887
  * @required
1687
1888
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
1688
1889
  */
1689
- apiName = input.required();
1890
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
1690
1891
  /**
1691
1892
  * Either the value or the property.value if the value is not set.
1692
1893
  */
1693
- computedValue = computed(() => this.value() ?? this.property().value);
1894
+ computedValue = computed(() => this.value() ?? this.property().value, ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
1694
1895
  /**
1695
1896
  * The property to display.
1696
1897
  * @required
1697
1898
  */
1698
- property = input.required();
1899
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
1699
1900
  /**
1700
1901
  * The value to display. If not set, the value of the property will be used.
1701
1902
  */
1702
- value = input();
1903
+ value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
1703
1904
  get PropertyType() {
1704
1905
  return PropertyType;
1705
1906
  }
1706
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayElementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1707
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldDisplayElementComponent, isStandalone: true, selector: "rw-display-element", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n <div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-display [property]=\"property()\" [value]=\"computedValue()\" [apiName]=\"apiName()\" class=\"col-12 md:col-10\"></rw-display>\r\n </div>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldLabelComponent, selector: "rw-label", inputs: ["property"] }, { kind: "component", type: RestWorldDisplayComponent, selector: "rw-display", inputs: ["apiName", "property", "value"] }] });
1907
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayElementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1908
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayElementComponent, isStandalone: true, selector: "rw-display-element", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n <div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-display [property]=\"property()\" [value]=\"computedValue()\" [apiName]=\"apiName()\" class=\"col-12 md:col-10\"></rw-display>\r\n </div>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldLabelComponent, selector: "rw-label", inputs: ["property"] }, { kind: "component", type: RestWorldDisplayComponent, selector: "rw-display", inputs: ["apiName", "property", "value"] }] });
1708
1909
  }
1709
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayElementComponent, decorators: [{
1910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayElementComponent, decorators: [{
1710
1911
  type: Component,
1711
1912
  args: [{ selector: 'rw-display-element', standalone: true, imports: [RestWorldLabelComponent, RestWorldDisplayComponent], template: "@if (property().type !== PropertyType.Hidden) {\r\n <div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-display [property]=\"property()\" [value]=\"computedValue()\" [apiName]=\"apiName()\" class=\"col-12 md:col-10\"></rw-display>\r\n </div>\r\n}\r\n" }]
1712
1913
  }] });
@@ -1724,20 +1925,20 @@ class RestWorldDisplayObjectComponent {
1724
1925
  * @required
1725
1926
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
1726
1927
  */
1727
- apiName = input.required();
1928
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
1728
1929
  /**
1729
1930
  * The property to display.
1730
1931
  * @required
1731
1932
  */
1732
- property = input.required();
1933
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
1733
1934
  /**
1734
1935
  * The value to display. If not set, the value of the template properties will be used.
1735
1936
  */
1736
- value = input();
1737
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayObjectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1738
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.6", type: RestWorldDisplayObjectComponent, isStandalone: true, selector: "rw-display-object", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-display-template [template]=\"property()._templates.default\" [value]=\"value\" [apiName]=\"apiName()\"></rw-display-template>\r\n </div>\r\n</div>", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayTemplateComponent), selector: "rw-display-template", inputs: ["apiName", "template", "value"] }] });
1937
+ value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
1938
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayObjectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1939
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldDisplayObjectComponent, isStandalone: true, selector: "rw-display-object", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-display-template [template]=\"property()._templates.default\" [value]=\"value\" [apiName]=\"apiName()\"></rw-display-template>\r\n </div>\r\n</div>", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayTemplateComponent), selector: "rw-display-template", inputs: ["apiName", "template", "value"] }] });
1739
1940
  }
1740
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayObjectComponent, decorators: [{
1941
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayObjectComponent, decorators: [{
1741
1942
  type: Component,
1742
1943
  args: [{ selector: 'rw-display-object', standalone: true, imports: [forwardRef(() => RestWorldDisplayTemplateComponent)], template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-display-template [template]=\"property()._templates.default\" [value]=\"value\" [apiName]=\"apiName()\"></rw-display-template>\r\n </div>\r\n</div>", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
1743
1944
  }] });
@@ -1765,20 +1966,20 @@ class RestWorldDisplaySimpleComponent {
1765
1966
  * @required
1766
1967
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
1767
1968
  */
1768
- apiName = input.required();
1969
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
1769
1970
  /**
1770
1971
  * Either the value or the property.value if the value is not set.
1771
1972
  */
1772
- computedValue = computed(() => this.value() ?? this.property().value ?? this._defaultValue());
1973
+ computedValue = computed(() => this.value() ?? this.property().value ?? this._defaultValue(), ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
1773
1974
  /**
1774
1975
  * The property to display.
1775
1976
  * @required
1776
1977
  */
1777
- property = input.required();
1978
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
1778
1979
  /**
1779
1980
  * The value to display. If not set, the value of the property will be used.
1780
1981
  */
1781
- value = input();
1982
+ value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
1782
1983
  _defaultValue = computed(() => {
1783
1984
  const property = this.property();
1784
1985
  if (!property.required || property.options?.minItems === 0)
@@ -1786,7 +1987,7 @@ class RestWorldDisplaySimpleComponent {
1786
1987
  if (property.type === PropertyType.Number)
1787
1988
  return 0;
1788
1989
  return undefined;
1789
- });
1990
+ }, ...(ngDevMode ? [{ debugName: "_defaultValue" }] : []));
1790
1991
  get PropertyType() {
1791
1992
  return PropertyType;
1792
1993
  }
@@ -1799,10 +2000,10 @@ class RestWorldDisplaySimpleComponent {
1799
2000
  get timeFormat() {
1800
2001
  return RestWorldDisplaySimpleComponent._timeFormat;
1801
2002
  }
1802
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplaySimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1803
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldDisplaySimpleComponent, isStandalone: true, selector: "rw-display-simple", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let prop = property();\r\n@let val = computedValue();\r\n@switch (prop.type) {\r\n\r\n @case (PropertyType.Text) {\r\n @if (prop.name === 'createdBy' || prop.name === 'lastChangedBy') {\r\n <rw-avatar [user]=\"$any(val)\"></rw-avatar>\r\n }\r\n @else {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n <rw-tri-state-checkbox [model]=\"$any(val)\" [readonly]=\"true\" [disabled]=\"true\"></rw-tri-state-checkbox>\r\n }\r\n @default {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "pipe", type: PropertyTypeFormatPipe, name: "propertyTypeFormat" }, { kind: "component", type: TriStateCheckbox, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: ["value", "name", "disabled", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "model", "variant"], outputs: ["disabledChange", "modelChange", "onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }] });
2003
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplaySimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2004
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplaySimpleComponent, isStandalone: true, selector: "rw-display-simple", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let prop = property();\r\n@let val = computedValue();\r\n@switch (prop.type) {\r\n\r\n @case (PropertyType.Text) {\r\n @if (prop.name === 'createdBy' || prop.name === 'lastChangedBy') {\r\n <rw-avatar [user]=\"$any(val)\"></rw-avatar>\r\n }\r\n @else {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n <rw-tri-state-checkbox [model]=\"$any(val)\" [readonly]=\"true\" [disabled]=\"true\"></rw-tri-state-checkbox>\r\n }\r\n @default {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "component", type: TriStateCheckbox, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: ["value", "name", "disabled", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "model", "variant"], outputs: ["disabledChange", "modelChange", "onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: PropertyTypeFormatPipe, name: "propertyTypeFormat" }] });
1804
2005
  }
1805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplaySimpleComponent, decorators: [{
2006
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplaySimpleComponent, decorators: [{
1806
2007
  type: Component,
1807
2008
  args: [{ selector: 'rw-display-simple', standalone: true, imports: [RestWorldAvatarComponent, PropertyTypeFormatPipe, TriStateCheckbox, FormsModule, TriStateCheckbox], template: "@let prop = property();\r\n@let val = computedValue();\r\n@switch (prop.type) {\r\n\r\n @case (PropertyType.Text) {\r\n @if (prop.name === 'createdBy' || prop.name === 'lastChangedBy') {\r\n <rw-avatar [user]=\"$any(val)\"></rw-avatar>\r\n }\r\n @else {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n <rw-tri-state-checkbox [model]=\"$any(val)\" [readonly]=\"true\" [disabled]=\"true\"></rw-tri-state-checkbox>\r\n }\r\n @default {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n}\r\n" }]
1808
2009
  }] });
@@ -1817,23 +2018,23 @@ class RestWorldDisplayTemplateComponent {
1817
2018
  * @required
1818
2019
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
1819
2020
  */
1820
- apiName = input.required();
2021
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
1821
2022
  /**
1822
2023
  * The template to display.
1823
2024
  * @required
1824
2025
  * @remarks This is the template that defines the properties to display.
1825
2026
  */
1826
- template = input.required();
2027
+ template = input.required(...(ngDevMode ? [{ debugName: "template" }] : []));
1827
2028
  /**
1828
2029
  * The value to display. If not set, the values of the template properties will be used.
1829
2030
  */
1830
- value = input();
1831
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1832
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldDisplayTemplateComponent, isStandalone: true, selector: "rw-display-template", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (property of template().properties; track property) {\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\n}", styles: [""], dependencies: [{ kind: "component", type: RestWorldDisplayElementComponent, selector: "rw-display-element", inputs: ["apiName", "property", "value"] }] });
2031
+ value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
2032
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2033
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayTemplateComponent, isStandalone: true, selector: "rw-display-template", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (property of template().properties; track property) {\r\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\r\n}", styles: [""], dependencies: [{ kind: "component", type: RestWorldDisplayElementComponent, selector: "rw-display-element", inputs: ["apiName", "property", "value"] }] });
1833
2034
  }
1834
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldDisplayTemplateComponent, decorators: [{
2035
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayTemplateComponent, decorators: [{
1835
2036
  type: Component,
1836
- args: [{ selector: 'rw-display-template', standalone: true, imports: [RestWorldDisplayElementComponent], template: "@for (property of template().properties; track property) {\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\n}" }]
2037
+ args: [{ selector: 'rw-display-template', standalone: true, imports: [RestWorldDisplayElementComponent], template: "@for (property of template().properties; track property) {\r\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\r\n}" }]
1837
2038
  }] });
1838
2039
 
1839
2040
  /**
@@ -1857,10 +2058,10 @@ class SafeUrlPipe {
1857
2058
  throw new Error(`The given url '${url}' is not a string.`);
1858
2059
  return this._domSanitizer.bypassSecurityTrustResourceUrl(url);
1859
2060
  }
1860
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
1861
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.6", ngImport: i0, type: SafeUrlPipe, isStandalone: true, name: "safeUrl" });
2061
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
2062
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: SafeUrlPipe, isStandalone: true, name: "safeUrl" });
1862
2063
  }
1863
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: SafeUrlPipe, decorators: [{
2064
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SafeUrlPipe, decorators: [{
1864
2065
  type: Pipe,
1865
2066
  args: [{
1866
2067
  name: 'safeUrl',
@@ -1884,16 +2085,16 @@ class RestWorldFileComponent {
1884
2085
  * This is a comma-separated list of MIME types or file extensions.
1885
2086
  * If not specified, all file types are accepted.
1886
2087
  */
1887
- accept = input("", { transform: (v) => v ?? "" });
2088
+ accept = input("", ...(ngDevMode ? [{ debugName: "accept", transform: (v) => v ?? "" }] : [{ transform: (v) => v ?? "" }]));
1888
2089
  /**
1889
2090
  * The name of the file to be uploaded.
1890
2091
  */
1891
- fileName = input("download", { transform: (v) => v ?? "download" });
1892
- disabled = signal(false);
2092
+ fileName = input("download", ...(ngDevMode ? [{ debugName: "fileName", transform: (v) => v ?? "download" }] : [{ transform: (v) => v ?? "download" }]));
2093
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
1893
2094
  /**
1894
2095
  * The URI of the file.
1895
2096
  */
1896
- uri = signal(undefined);
2097
+ uri = signal(undefined, ...(ngDevMode ? [{ debugName: "uri" }] : []));
1897
2098
  writeValue(obj) {
1898
2099
  this.uri.set(obj);
1899
2100
  }
@@ -1919,14 +2120,14 @@ class RestWorldFileComponent {
1919
2120
  this.uri.set(undefined);
1920
2121
  this.onChange?.(this.uri());
1921
2122
  }
1922
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1923
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldFileComponent, isStandalone: true, selector: "rw-file", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{
2123
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2124
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldFileComponent, isStandalone: true, selector: "rw-file", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{
1924
2125
  provide: NG_VALUE_ACCESSOR,
1925
2126
  useExisting: forwardRef(() => RestWorldFileComponent),
1926
2127
  multi: true
1927
- }], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"fileName()\" class=\"mr-1\" pButton\r\n pTooltip=\"Download file\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No file present\"></p-button>\r\n }\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" pTooltip=\"Upload new file\" mode=\"basic\" [auto]=\"true\"\r\n [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"fileChanged($event)\"></p-fileUpload>\r\n @if (uri()) {\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteFile()\"/>\r\n }\r\n</div>\r\n", styles: ["a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i2$2.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }] });
2128
+ }], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"fileName()\" class=\"mr-1\" pButton\r\n pTooltip=\"Download file\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No file present\"></p-button>\r\n }\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" pTooltip=\"Upload new file\" mode=\"basic\" [auto]=\"true\"\r\n [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"fileChanged($event)\"></p-fileUpload>\r\n @if (uri()) {\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteFile()\"/>\r\n }\r\n</div>\r\n", styles: ["a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i2$2.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }] });
1928
2129
  }
1929
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldFileComponent, decorators: [{
2130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFileComponent, decorators: [{
1930
2131
  type: Component,
1931
2132
  args: [{ selector: 'rw-file', standalone: true, providers: [{
1932
2133
  provide: NG_VALUE_ACCESSOR,
@@ -1948,21 +2149,21 @@ class RestWorldValidationErrorsComponent {
1948
2149
  * The form to display the validation errors for.
1949
2150
  * Either set this or the property input.
1950
2151
  */
1951
- form = input();
1952
- name = computed(() => this.property()?.name ?? null);
1953
- prompt = computed(() => this.property()?.prompt ?? this.name() ?? null);
2152
+ form = input(...(ngDevMode ? [undefined, { debugName: "form" }] : []));
2153
+ name = computed(() => this.property()?.name ?? null, ...(ngDevMode ? [{ debugName: "name" }] : []));
2154
+ prompt = computed(() => this.property()?.prompt ?? this.name() ?? null, ...(ngDevMode ? [{ debugName: "prompt" }] : []));
1954
2155
  /**
1955
2156
  * The property to display the validation errors for.
1956
2157
  * Either set this or the form input.
1957
2158
  */
1958
- property = input();
2159
+ property = input(...(ngDevMode ? [undefined, { debugName: "property" }] : []));
1959
2160
  get PropertyType() {
1960
2161
  return PropertyType;
1961
2162
  }
1962
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldValidationErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1963
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldValidationErrorsComponent, isStandalone: true, selector: "rw-validation-errors", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property() && property()?.type !== PropertyType.Hidden) {\n <val-errors [controlName]=\"name()\">\n <ng-template valError=\"required\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The field '{{prompt()}}' is required.</p-message></ng-template>\n <ng-template valError=\"email\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be a valid email address.</p-message></ng-template>\n <ng-template valError=\"min\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be equal or greater than or equal to {{ error.min }}.</p-message></ng-template>\n <ng-template valError=\"max\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be smaller than or equal to {{ error.max }}.</p-message></ng-template>\n <ng-template valError=\"minlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be equal or greater than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"maxlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be shorter than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"pattern\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The value for '{{prompt()}}' does not match the pattern {{ error }}.</p-message></ng-template>\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n@if (form()) {\n <val-errors [control]=\"form()!\">\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n", styles: [""], dependencies: [{ kind: "component", type: ValidationErrorsComponent, selector: "val-errors", inputs: ["control", "controlName", "label"] }, { kind: "directive", type: ValidationErrorDirective, selector: "ng-template[valError]", inputs: ["valError"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i1$4.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2163
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldValidationErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2164
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldValidationErrorsComponent, isStandalone: true, selector: "rw-validation-errors", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property() && property()?.type !== PropertyType.Hidden) {\n <val-errors [controlName]=\"name()\">\n <ng-template valError=\"required\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The field '{{prompt()}}' is required.</p-message></ng-template>\n <ng-template valError=\"email\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be a valid email address.</p-message></ng-template>\n <ng-template valError=\"min\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be equal or greater than or equal to {{ error.min }}.</p-message></ng-template>\n <ng-template valError=\"max\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be smaller than or equal to {{ error.max }}.</p-message></ng-template>\n <ng-template valError=\"minlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be equal or greater than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"maxlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be shorter than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"pattern\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The value for '{{prompt()}}' does not match the pattern {{ error }}.</p-message></ng-template>\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n@if (form()) {\n <val-errors [control]=\"form()!\">\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n", styles: [""], dependencies: [{ kind: "component", type: ValidationErrorsComponent, selector: "val-errors", inputs: ["control", "controlName", "label"] }, { kind: "directive", type: ValidationErrorDirective, selector: "ng-template[valError]", inputs: ["valError"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i1$4.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
1964
2165
  }
1965
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldValidationErrorsComponent, decorators: [{
2166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldValidationErrorsComponent, decorators: [{
1966
2167
  type: Component,
1967
2168
  args: [{ selector: 'rw-validation-errors', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [ValidationErrorsComponent, ValidationErrorDirective, MessageModule], template: "@if (property() && property()?.type !== PropertyType.Hidden) {\n <val-errors [controlName]=\"name()\">\n <ng-template valError=\"required\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The field '{{prompt()}}' is required.</p-message></ng-template>\n <ng-template valError=\"email\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be a valid email address.</p-message></ng-template>\n <ng-template valError=\"min\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be equal or greater than or equal to {{ error.min }}.</p-message></ng-template>\n <ng-template valError=\"max\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be smaller than or equal to {{ error.max }}.</p-message></ng-template>\n <ng-template valError=\"minlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be equal or greater than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"maxlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be shorter than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"pattern\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The value for '{{prompt()}}' does not match the pattern {{ error }}.</p-message></ng-template>\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n@if (form()) {\n <val-errors [control]=\"form()!\">\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n" }]
1968
2169
  }] });
@@ -1987,46 +2188,46 @@ const debounce = (fn, delayMilliseconds = 300) => {
1987
2188
  * Implements ControlValueAccessor to work with Angular forms.
1988
2189
  */
1989
2190
  class RestWorldImageComponent {
1990
- property = input.required();
2191
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
1991
2192
  accept = computed(() => {
1992
2193
  const property = this.property();
1993
- return (property.restWorldImage.accept ?? typeof property.placeholder === "string") ? property.placeholder : "image/*";
1994
- });
1995
- alignImage = computed(() => this.property().restWorldImage.alignImage ?? "center");
2194
+ return property.restWorldImage.accept ?? typeof property.placeholder === "string" ? property.placeholder : "image/*";
2195
+ }, ...(ngDevMode ? [{ debugName: "accept" }] : []));
2196
+ alignImage = computed(() => this.property().restWorldImage.alignImage ?? "center", ...(ngDevMode ? [{ debugName: "alignImage" }] : []));
1996
2197
  alt = computed(() => {
1997
2198
  const property = this.property();
1998
2199
  return property.prompt ?? property.name;
1999
- });
2000
- aspectRatio = computed(() => this.property().restWorldImage.aspectRatio ?? 1);
2200
+ }, ...(ngDevMode ? [{ debugName: "alt" }] : []));
2201
+ aspectRatio = computed(() => this.property().restWorldImage.aspectRatio ?? 1, ...(ngDevMode ? [{ debugName: "aspectRatio" }] : []));
2001
2202
  // If no background color is set, we set it to white.
2002
2203
  // Otherwise the color picker would show red, the input would be empty and the image cropper would show transparent.
2003
- backgroundColor = model("#ffffff");
2004
- canvasRotation = computed(() => this.property().restWorldImage.canvasRotation);
2005
- containWithinAspectRatio = computed(() => this.property().restWorldImage.containWithinAspectRatio);
2006
- cropper = computed(() => this.property().restWorldImage.cropper);
2007
- cropperMaxHeight = computed(() => this.property().restWorldImage.cropperMaxHeight);
2008
- cropperMaxWidth = computed(() => this.property().restWorldImage.cropperMaxWidth);
2009
- cropperMinHeight = computed(() => this.property().restWorldImage.cropperMinHeight);
2010
- cropperMinWidth = computed(() => this.property().restWorldImage.cropperMinWidth);
2011
- cropperStaticHeight = computed(() => this.property().restWorldImage.cropperStaticHeight);
2012
- cropperStaticWidth = computed(() => this.property().restWorldImage.cropperStaticWidth);
2013
- dialogs = viewChildren(Dialog);
2014
- disabled = signal(false);
2015
- fileUploads = viewChildren(FileUpload);
2016
- filename = computed(() => this.property().name + "." + (this.property().restWorldImage.format ?? ".png"));
2017
- format = computed(() => this.property().restWorldImage.format);
2018
- imageCroppers = viewChildren(ImageCropperComponent);
2019
- imageQuality = computed(() => this.property().restWorldImage.imageQuality);
2020
- initialStepSize = computed(() => this.property().restWorldImage.initialStepSize);
2021
- maintainAspectRatio = computed(() => this.property().restWorldImage.maintainAspectRatio);
2022
- onlyScaleDown = computed(() => this.property().restWorldImage.onlyScaleDown);
2023
- resizeToHeight = computed(() => this.property().restWorldImage.resizeToHeight);
2024
- resizeToWidth = computed(() => this.property().restWorldImage.resizeToWidth);
2025
- roundCropper = computed(() => this.property().restWorldImage.roundCropper);
2026
- displayCropDialog = model(false);
2204
+ backgroundColor = model("#ffffff", ...(ngDevMode ? [{ debugName: "backgroundColor" }] : []));
2205
+ canvasRotation = computed(() => this.property().restWorldImage.canvasRotation, ...(ngDevMode ? [{ debugName: "canvasRotation" }] : []));
2206
+ containWithinAspectRatio = computed(() => this.property().restWorldImage.containWithinAspectRatio, ...(ngDevMode ? [{ debugName: "containWithinAspectRatio" }] : []));
2207
+ cropper = computed(() => this.property().restWorldImage.cropper, ...(ngDevMode ? [{ debugName: "cropper" }] : []));
2208
+ cropperMaxHeight = computed(() => this.property().restWorldImage.cropperMaxHeight, ...(ngDevMode ? [{ debugName: "cropperMaxHeight" }] : []));
2209
+ cropperMaxWidth = computed(() => this.property().restWorldImage.cropperMaxWidth, ...(ngDevMode ? [{ debugName: "cropperMaxWidth" }] : []));
2210
+ cropperMinHeight = computed(() => this.property().restWorldImage.cropperMinHeight, ...(ngDevMode ? [{ debugName: "cropperMinHeight" }] : []));
2211
+ cropperMinWidth = computed(() => this.property().restWorldImage.cropperMinWidth, ...(ngDevMode ? [{ debugName: "cropperMinWidth" }] : []));
2212
+ cropperStaticHeight = computed(() => this.property().restWorldImage.cropperStaticHeight, ...(ngDevMode ? [{ debugName: "cropperStaticHeight" }] : []));
2213
+ cropperStaticWidth = computed(() => this.property().restWorldImage.cropperStaticWidth, ...(ngDevMode ? [{ debugName: "cropperStaticWidth" }] : []));
2214
+ dialogs = viewChildren(Dialog, ...(ngDevMode ? [{ debugName: "dialogs" }] : []));
2215
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
2216
+ fileUploads = viewChildren(FileUpload, ...(ngDevMode ? [{ debugName: "fileUploads" }] : []));
2217
+ filename = computed(() => this.property().name + "." + (this.property().restWorldImage.format ?? ".png"), ...(ngDevMode ? [{ debugName: "filename" }] : []));
2218
+ format = computed(() => this.property().restWorldImage.format, ...(ngDevMode ? [{ debugName: "format" }] : []));
2219
+ imageCroppers = viewChildren(ImageCropperComponent, ...(ngDevMode ? [{ debugName: "imageCroppers" }] : []));
2220
+ imageQuality = computed(() => this.property().restWorldImage.imageQuality, ...(ngDevMode ? [{ debugName: "imageQuality" }] : []));
2221
+ initialStepSize = computed(() => this.property().restWorldImage.initialStepSize, ...(ngDevMode ? [{ debugName: "initialStepSize" }] : []));
2222
+ maintainAspectRatio = computed(() => this.property().restWorldImage.maintainAspectRatio, ...(ngDevMode ? [{ debugName: "maintainAspectRatio" }] : []));
2223
+ onlyScaleDown = computed(() => this.property().restWorldImage.onlyScaleDown, ...(ngDevMode ? [{ debugName: "onlyScaleDown" }] : []));
2224
+ resizeToHeight = computed(() => this.property().restWorldImage.resizeToHeight, ...(ngDevMode ? [{ debugName: "resizeToHeight" }] : []));
2225
+ resizeToWidth = computed(() => this.property().restWorldImage.resizeToWidth, ...(ngDevMode ? [{ debugName: "resizeToWidth" }] : []));
2226
+ roundCropper = computed(() => this.property().restWorldImage.roundCropper, ...(ngDevMode ? [{ debugName: "roundCropper" }] : []));
2227
+ displayCropDialog = model(false, ...(ngDevMode ? [{ debugName: "displayCropDialog" }] : []));
2027
2228
  tempCroppedUri;
2028
- tempImageFile = signal(undefined);
2029
- uri = signal(undefined);
2229
+ tempImageFile = signal(undefined, ...(ngDevMode ? [{ debugName: "tempImageFile" }] : []));
2230
+ uri = signal(undefined, ...(ngDevMode ? [{ debugName: "uri" }] : []));
2030
2231
  onChange;
2031
2232
  constructor() {
2032
2233
  effect(() => this.property().restWorldImage.backgroundColor = this.backgroundColor());
@@ -2071,14 +2272,14 @@ class RestWorldImageComponent {
2071
2272
  writeValue(obj) {
2072
2273
  this.uri.set(obj);
2073
2274
  }
2074
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2075
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldImageComponent, isStandalone: true, selector: "rw-image", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, backgroundColor: { classPropertyName: "backgroundColor", publicName: "backgroundColor", isSignal: true, isRequired: false, transformFunction: null }, displayCropDialog: { classPropertyName: "displayCropDialog", publicName: "displayCropDialog", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backgroundColor: "backgroundColorChange", displayCropDialog: "displayCropDialogChange" }, providers: [{
2275
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2276
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldImageComponent, isStandalone: true, selector: "rw-image", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, backgroundColor: { classPropertyName: "backgroundColor", publicName: "backgroundColor", isSignal: true, isRequired: false, transformFunction: null }, displayCropDialog: { classPropertyName: "displayCropDialog", publicName: "displayCropDialog", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backgroundColor: "backgroundColorChange", displayCropDialog: "displayCropDialogChange" }, providers: [{
2076
2277
  provide: NG_VALUE_ACCESSOR,
2077
2278
  useExisting: forwardRef(() => RestWorldImageComponent),
2078
2279
  multi: true
2079
- }], viewQueries: [{ propertyName: "dialogs", predicate: Dialog, descendants: true, isSignal: true }, { propertyName: "fileUploads", predicate: FileUpload, descendants: true, isSignal: true }, { propertyName: "imageCroppers", predicate: ImageCropperComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color:&nbsp;</span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i2$2.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: ColorPickerModule }, { kind: "component", type: i4.ColorPicker, selector: "p-colorPicker, p-colorpicker, p-color-picker", inputs: ["style", "styleClass", "inline", "format", "appendTo", "disabled", "tabindex", "inputId", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "autofocus"], outputs: ["onChange", "onShow", "onHide"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
2280
+ }], viewQueries: [{ propertyName: "dialogs", predicate: Dialog, descendants: true, isSignal: true }, { propertyName: "fileUploads", predicate: FileUpload, descendants: true, isSignal: true }, { propertyName: "imageCroppers", predicate: ImageCropperComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color:&nbsp;</span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i2$2.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: ColorPickerModule }, { kind: "component", type: i4.ColorPicker, selector: "p-colorPicker, p-colorpicker, p-color-picker", inputs: ["styleClass", "inline", "format", "tabindex", "inputId", "autoZIndex", "showTransitionOptions", "hideTransitionOptions", "autofocus", "defaultColor", "appendTo"], outputs: ["onChange", "onShow", "onHide"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }] });
2080
2281
  }
2081
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldImageComponent, decorators: [{
2282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldImageComponent, decorators: [{
2082
2283
  type: Component,
2083
2284
  args: [{ selector: 'rw-image', standalone: true, providers: [{
2084
2285
  provide: NG_VALUE_ACCESSOR,
@@ -2087,14 +2288,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2087
2288
  }], imports: [SafeUrlPipe, ButtonModule, ImageCropperComponent, FileUploadModule, DialogModule, ColorPickerModule, FormsModule], template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color:&nbsp;</span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"] }]
2088
2289
  }], ctorParameters: () => [] });
2089
2290
 
2291
+ function setValueOfInputSignal(signal, value) {
2292
+ const node = signal[SIGNAL];
2293
+ signalSetFn(node, value);
2294
+ // There is node.applyValueToInputSignal(node, value); too but it does not accept InputSignalWithTransform<T, TransformT>
2295
+ }
2090
2296
  /**
2091
2297
  * This directive sets the attributes of a p-inputNumber element based on the property.
2092
2298
  * It sets the mode, minFractionDigits and maxFractionDigits attributes.
2093
2299
  * Thses are based on the properties step value.
2094
2300
  */
2095
2301
  class PropertyInputNumberAttributes {
2096
- formControlProperty = input();
2097
- propertyAttributes = input();
2302
+ formControlProperty = input(...(ngDevMode ? [undefined, { debugName: "formControlProperty" }] : []));
2303
+ propertyAttributes = input(...(ngDevMode ? [undefined, { debugName: "propertyAttributes" }] : []));
2098
2304
  constructor(inputNumber) {
2099
2305
  // We need to set it to the maximum value in the constructor, because for some reason lowering it in the effect works, but raising it does not.
2100
2306
  inputNumber.maxFractionDigits = 100;
@@ -2112,7 +2318,7 @@ class PropertyInputNumberAttributes {
2112
2318
  element.showButtons = !property.readOnly;
2113
2319
  element.minFractionDigits = 0;
2114
2320
  if (property.step)
2115
- element.step = property.step;
2321
+ setValueOfInputSignal(element.step, property.step);
2116
2322
  if (!property.step || property.step < 0) {
2117
2323
  element.mode = "decimal";
2118
2324
  }
@@ -2131,10 +2337,10 @@ class PropertyInputNumberAttributes {
2131
2337
  }
2132
2338
  return count;
2133
2339
  }
2134
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyInputNumberAttributes, deps: [{ token: i1$5.InputNumber, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2135
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.6", type: PropertyInputNumberAttributes, isStandalone: true, selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2340
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyInputNumberAttributes, deps: [{ token: i1$5.InputNumber, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2341
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: PropertyInputNumberAttributes, isStandalone: true, selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2136
2342
  }
2137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyInputNumberAttributes, decorators: [{
2343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyInputNumberAttributes, decorators: [{
2138
2344
  type: Directive,
2139
2345
  args: [{
2140
2346
  selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]",
@@ -2158,8 +2364,8 @@ class PropertySelectAttributes {
2158
2364
  /**
2159
2365
  * The property to display.
2160
2366
  */
2161
- formControlProperty = input();
2162
- propertyAttributes = input();
2367
+ formControlProperty = input(...(ngDevMode ? [undefined, { debugName: "formControlProperty" }] : []));
2368
+ propertyAttributes = input(...(ngDevMode ? [undefined, { debugName: "propertyAttributes" }] : []));
2163
2369
  constructor(select, multiSelect) {
2164
2370
  effect(() => {
2165
2371
  const property = this.formControlProperty() ?? this.propertyAttributes();
@@ -2185,9 +2391,11 @@ class PropertySelectAttributes {
2185
2391
  element.filterBy = promptField + "," + valueField;
2186
2392
  element.filter = true;
2187
2393
  element.showClear = !property.required || (options.minItems ?? 0) <= 0;
2188
- element.appendTo = "body";
2394
+ // element.appendTo = "body";
2395
+ setValueOfInputSignal(element.appendTo, "body");
2189
2396
  if (element instanceof Select) {
2190
- element.required = property.required || (options.minItems ?? 0) > 0;
2397
+ // element.required = property.required || (options.minItems ?? 0) > 0;
2398
+ setValueOfInputSignal(element.required, property.required || (options.minItems ?? 0) > 0);
2191
2399
  element.filterPlaceholder = options.link?.href ? "search for more results" : "";
2192
2400
  }
2193
2401
  else if (element instanceof MultiSelect) {
@@ -2199,10 +2407,10 @@ class PropertySelectAttributes {
2199
2407
  }
2200
2408
  });
2201
2409
  }
2202
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertySelectAttributes, deps: [{ token: i2$4.Select, optional: true, self: true }, { token: i3$2.MultiSelect, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2203
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.6", type: PropertySelectAttributes, isStandalone: true, selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2410
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertySelectAttributes, deps: [{ token: i2$4.Select, optional: true, self: true }, { token: i3$2.MultiSelect, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2411
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: PropertySelectAttributes, isStandalone: true, selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2204
2412
  }
2205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertySelectAttributes, decorators: [{
2413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertySelectAttributes, decorators: [{
2206
2414
  type: Directive,
2207
2415
  args: [{
2208
2416
  selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]",
@@ -2230,8 +2438,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2230
2438
  class PropertyAttributes {
2231
2439
  elementRef;
2232
2440
  renderer;
2233
- formControlProperty = input();
2234
- propertyAttributes = input();
2441
+ formControlProperty = input(...(ngDevMode ? [undefined, { debugName: "formControlProperty" }] : []));
2442
+ propertyAttributes = input(...(ngDevMode ? [undefined, { debugName: "propertyAttributes" }] : []));
2235
2443
  constructor(elementRef, renderer) {
2236
2444
  this.elementRef = elementRef;
2237
2445
  this.renderer = renderer;
@@ -2275,10 +2483,10 @@ class PropertyAttributes {
2275
2483
  this.renderer.setAttribute(nativeElement, "minlength", property.minLength.toString());
2276
2484
  });
2277
2485
  }
2278
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyAttributes, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
2279
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.6", type: PropertyAttributes, isStandalone: true, selector: "[formControlProperty],[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2486
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyAttributes, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
2487
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: PropertyAttributes, isStandalone: true, selector: "[formControlProperty],[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2280
2488
  }
2281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyAttributes, decorators: [{
2489
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyAttributes, decorators: [{
2282
2490
  type: Directive,
2283
2491
  args: [{
2284
2492
  selector: "[formControlProperty],[propertyAttributes]",
@@ -2291,7 +2499,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2291
2499
  * <input [formControlProperty]="property" />
2292
2500
  */
2293
2501
  class FormControlProperty extends FormControlName {
2294
- formControlProperty = input.required();
2502
+ formControlProperty = input.required(...(ngDevMode ? [{ debugName: "formControlProperty" }] : []));
2295
2503
  _propertyAdded = false;
2296
2504
  constructor(parent, validators, asyncValidators, valueAccessors) {
2297
2505
  super(parent, validators, asyncValidators, valueAccessors, null);
@@ -2312,15 +2520,15 @@ class FormControlProperty extends FormControlName {
2312
2520
  }
2313
2521
  super.ngOnChanges(changes);
2314
2522
  }
2315
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: FormControlProperty, deps: [{ token: i2$3.ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2316
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.6", type: FormControlProperty, isStandalone: true, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
2523
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FormControlProperty, deps: [{ token: i2$3.ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2524
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: FormControlProperty, isStandalone: true, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
2317
2525
  {
2318
2526
  provide: NgControl,
2319
2527
  useExisting: forwardRef(() => FormControlProperty),
2320
2528
  },
2321
2529
  ], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
2322
2530
  }
2323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: FormControlProperty, decorators: [{
2531
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FormControlProperty, decorators: [{
2324
2532
  type: Directive,
2325
2533
  args: [{
2326
2534
  selector: "[formControlProperty]:not([useTemplateDrivenForms=true])",
@@ -2360,8 +2568,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2360
2568
  args: [NG_VALUE_ACCESSOR]
2361
2569
  }] }] });
2362
2570
  class DefaultPropertyValueAccessor extends DefaultValueAccessor {
2363
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: DefaultPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2364
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.6", type: DefaultPropertyValueAccessor, isStandalone: true, selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]", providers: [
2571
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DefaultPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2572
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: DefaultPropertyValueAccessor, isStandalone: true, selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]", providers: [
2365
2573
  {
2366
2574
  provide: NG_VALUE_ACCESSOR,
2367
2575
  useExisting: forwardRef(() => DefaultPropertyValueAccessor),
@@ -2369,7 +2577,7 @@ class DefaultPropertyValueAccessor extends DefaultValueAccessor {
2369
2577
  },
2370
2578
  ], usesInheritance: true, ngImport: i0 });
2371
2579
  }
2372
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: DefaultPropertyValueAccessor, decorators: [{
2580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DefaultPropertyValueAccessor, decorators: [{
2373
2581
  type: Directive,
2374
2582
  args: [{
2375
2583
  selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]",
@@ -2383,8 +2591,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2383
2591
  }]
2384
2592
  }] });
2385
2593
  class CheckboxPropertyValueAccessor extends CheckboxControlValueAccessor {
2386
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: CheckboxPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2387
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.6", type: CheckboxPropertyValueAccessor, isStandalone: true, selector: "input[type=checkbox][formControlProperty]", providers: [
2594
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: CheckboxPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2595
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: CheckboxPropertyValueAccessor, isStandalone: true, selector: "input[type=checkbox][formControlProperty]", providers: [
2388
2596
  {
2389
2597
  provide: NG_VALUE_ACCESSOR,
2390
2598
  useExisting: forwardRef(() => CheckboxPropertyValueAccessor),
@@ -2392,7 +2600,7 @@ class CheckboxPropertyValueAccessor extends CheckboxControlValueAccessor {
2392
2600
  },
2393
2601
  ], usesInheritance: true, ngImport: i0 });
2394
2602
  }
2395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: CheckboxPropertyValueAccessor, decorators: [{
2603
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: CheckboxPropertyValueAccessor, decorators: [{
2396
2604
  type: Directive,
2397
2605
  args: [{
2398
2606
  selector: "input[type=checkbox][formControlProperty]",
@@ -2406,8 +2614,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2406
2614
  }]
2407
2615
  }] });
2408
2616
  class SelectPropertyValueAccessor extends SelectControlValueAccessor {
2409
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: SelectPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2410
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.6", type: SelectPropertyValueAccessor, isStandalone: true, selector: "select:not([multiple])[formControlProperty]", providers: [
2617
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SelectPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2618
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: SelectPropertyValueAccessor, isStandalone: true, selector: "select:not([multiple])[formControlProperty]", providers: [
2411
2619
  {
2412
2620
  provide: NG_VALUE_ACCESSOR,
2413
2621
  useExisting: forwardRef(() => SelectPropertyValueAccessor),
@@ -2415,7 +2623,7 @@ class SelectPropertyValueAccessor extends SelectControlValueAccessor {
2415
2623
  },
2416
2624
  ], usesInheritance: true, ngImport: i0 });
2417
2625
  }
2418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: SelectPropertyValueAccessor, decorators: [{
2626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SelectPropertyValueAccessor, decorators: [{
2419
2627
  type: Directive,
2420
2628
  args: [{
2421
2629
  selector: "select:not([multiple])[formControlProperty]",
@@ -2429,8 +2637,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2429
2637
  }]
2430
2638
  }] });
2431
2639
  class RangePropertyValueAccessor extends RangeValueAccessor {
2432
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RangePropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2433
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.6", type: RangePropertyValueAccessor, isStandalone: true, selector: "input[type=range][formControlProperty]", providers: [
2640
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RangePropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2641
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: RangePropertyValueAccessor, isStandalone: true, selector: "input[type=range][formControlProperty]", providers: [
2434
2642
  {
2435
2643
  provide: NG_VALUE_ACCESSOR,
2436
2644
  useExisting: forwardRef(() => RangePropertyValueAccessor),
@@ -2438,7 +2646,7 @@ class RangePropertyValueAccessor extends RangeValueAccessor {
2438
2646
  },
2439
2647
  ], usesInheritance: true, ngImport: i0 });
2440
2648
  }
2441
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RangePropertyValueAccessor, decorators: [{
2649
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RangePropertyValueAccessor, decorators: [{
2442
2650
  type: Directive,
2443
2651
  args: [{
2444
2652
  selector: "input[type=range][formControlProperty]",
@@ -2452,8 +2660,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2452
2660
  }]
2453
2661
  }] });
2454
2662
  class NumberPropertyValueAccessor extends NumberValueAccessor {
2455
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: NumberPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2456
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.6", type: NumberPropertyValueAccessor, isStandalone: true, selector: "input[type=number][formControlProperty]", providers: [
2663
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: NumberPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2664
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: NumberPropertyValueAccessor, isStandalone: true, selector: "input[type=number][formControlProperty]", providers: [
2457
2665
  {
2458
2666
  provide: NG_VALUE_ACCESSOR,
2459
2667
  useExisting: forwardRef(() => NumberPropertyValueAccessor),
@@ -2461,7 +2669,7 @@ class NumberPropertyValueAccessor extends NumberValueAccessor {
2461
2669
  },
2462
2670
  ], usesInheritance: true, ngImport: i0 });
2463
2671
  }
2464
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: NumberPropertyValueAccessor, decorators: [{
2672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: NumberPropertyValueAccessor, decorators: [{
2465
2673
  type: Directive,
2466
2674
  args: [{
2467
2675
  selector: "input[type=number][formControlProperty]",
@@ -2487,10 +2695,10 @@ class PropertyControlStatus extends NgControlStatus {
2487
2695
  constructor(cd) {
2488
2696
  super(cd);
2489
2697
  }
2490
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyControlStatus, deps: [{ token: i2$3.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2491
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.6", type: PropertyControlStatus, isStandalone: true, selector: "[formControlProperty]", host: { properties: { "class.ng-untouched": "isUntouched", "class.ng-touched": "isTouched", "class.ng-pristine": "isPristine", "class.ng-dirty": "isDirty", "class.ng-valid": "isValid", "class.ng-invalid": "isInvalid", "class.ng-pending": "isPending" } }, usesInheritance: true, ngImport: i0 });
2698
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyControlStatus, deps: [{ token: i2$3.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Directive });
2699
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: PropertyControlStatus, isStandalone: true, selector: "[formControlProperty]", host: { properties: { "class.ng-untouched": "isUntouched", "class.ng-touched": "isTouched", "class.ng-pristine": "isPristine", "class.ng-dirty": "isDirty", "class.ng-valid": "isValid", "class.ng-invalid": "isInvalid", "class.ng-pending": "isPending" } }, usesInheritance: true, ngImport: i0 });
2492
2700
  }
2493
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: PropertyControlStatus, decorators: [{
2701
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyControlStatus, decorators: [{
2494
2702
  type: Directive,
2495
2703
  args: [{
2496
2704
  selector: "[formControlProperty]",
@@ -2500,11 +2708,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2500
2708
  type: Self
2501
2709
  }] }] });
2502
2710
  class HalFormsModule {
2503
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: HalFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2504
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.6", ngImport: i0, type: HalFormsModule, imports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule], exports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule] });
2505
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: HalFormsModule, imports: [ReactiveFormsModule, ReactiveFormsModule] });
2711
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2712
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, imports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule], exports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule] });
2713
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, imports: [ReactiveFormsModule, ReactiveFormsModule] });
2506
2714
  }
2507
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: HalFormsModule, decorators: [{
2715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, decorators: [{
2508
2716
  type: NgModule,
2509
2717
  args: [{
2510
2718
  imports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule],
@@ -2520,16 +2728,16 @@ class RestWorldInputBaseComponent {
2520
2728
  * The property to display.
2521
2729
  * @required
2522
2730
  */
2523
- property = model.required();
2731
+ property = model.required(...(ngDevMode ? [{ debugName: "property" }] : []));
2524
2732
  /**
2525
2733
  * Set this to true if the input should use template driven forms instead of the default reactive forms.
2526
2734
  */
2527
- useTemplateDrivenForms = input(false);
2528
- model = model();
2529
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2530
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.6", type: RestWorldInputBaseComponent, isStandalone: true, inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, useTemplateDrivenForms: { classPropertyName: "useTemplateDrivenForms", publicName: "useTemplateDrivenForms", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { property: "propertyChange", model: "modelChange" }, ngImport: i0 });
2735
+ useTemplateDrivenForms = input(false, ...(ngDevMode ? [{ debugName: "useTemplateDrivenForms" }] : []));
2736
+ model = model(...(ngDevMode ? [undefined, { debugName: "model" }] : []));
2737
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2738
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldInputBaseComponent, isStandalone: true, inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, useTemplateDrivenForms: { classPropertyName: "useTemplateDrivenForms", publicName: "useTemplateDrivenForms", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { property: "propertyChange", model: "modelChange" }, ngImport: i0 });
2531
2739
  }
2532
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputBaseComponent, decorators: [{
2740
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputBaseComponent, decorators: [{
2533
2741
  type: Directive
2534
2742
  }] });
2535
2743
  /**
@@ -2541,11 +2749,11 @@ class RestWorldInputLazyLoadBaseComponent extends RestWorldInputBaseComponent {
2541
2749
  * @required
2542
2750
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
2543
2751
  */
2544
- apiName = input.required();
2545
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputLazyLoadBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2546
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.6", type: RestWorldInputLazyLoadBaseComponent, isStandalone: true, inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 });
2752
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
2753
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputLazyLoadBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2754
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldInputLazyLoadBaseComponent, isStandalone: true, inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 });
2547
2755
  }
2548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputLazyLoadBaseComponent, decorators: [{
2756
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputLazyLoadBaseComponent, decorators: [{
2549
2757
  type: Directive
2550
2758
  }] });
2551
2759
  /**
@@ -2556,10 +2764,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2556
2764
  * <rw-form-element [property]="property" [apiName]="apiName"></rw-form-element>
2557
2765
  */
2558
2766
  class RestWorldFormElementComponent extends RestWorldInputLazyLoadBaseComponent {
2559
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldFormElementComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2560
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.6", type: RestWorldFormElementComponent, isStandalone: true, selector: "rw-form-element", usesInheritance: true, ngImport: i0, template: "<div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-input [apiName]=\"apiName()\" [property]=\"property()\" class=\"col-12 md:col-10\"></rw-input>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputComponent), selector: "rw-input" }, { kind: "component", type: i0.forwardRef(() => RestWorldLabelComponent), selector: "rw-label", inputs: ["property"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2767
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormElementComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2768
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: RestWorldFormElementComponent, isStandalone: true, selector: "rw-form-element", usesInheritance: true, ngImport: i0, template: "<div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-input [apiName]=\"apiName()\" [property]=\"property()\" class=\"col-12 md:col-10\"></rw-input>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputComponent), selector: "rw-input" }, { kind: "component", type: i0.forwardRef(() => RestWorldLabelComponent), selector: "rw-label", inputs: ["property"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2561
2769
  }
2562
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldFormElementComponent, decorators: [{
2770
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormElementComponent, decorators: [{
2563
2771
  type: Component,
2564
2772
  args: [{ selector: 'rw-form-element', viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputComponent), RestWorldLabelComponent], template: "<div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-input [apiName]=\"apiName()\" [property]=\"property()\" class=\"col-12 md:col-10\"></rw-input>\r\n</div>\r\n" }]
2565
2773
  }] });
@@ -2574,9 +2782,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2574
2782
  class RestWorldInputCollectionComponent extends RestWorldInputLazyLoadBaseComponent {
2575
2783
  _formService;
2576
2784
  _controlContainer;
2577
- defaultTemplate = computed(() => this.property()._templates.default);
2578
- innerFormArray = computed(() => this._controlContainer.control?.controls[this.property().name]);
2579
- templates = computed(() => this.getCollectionEntryTemplates(this.property()));
2785
+ defaultTemplate = computed(() => this.property()._templates.default, ...(ngDevMode ? [{ debugName: "defaultTemplate" }] : []));
2786
+ innerFormArray = computed(() => this._controlContainer.control?.controls[this.property().name], ...(ngDevMode ? [{ debugName: "innerFormArray" }] : []));
2787
+ templates = computed(() => this.getCollectionEntryTemplates(this.property()), ...(ngDevMode ? [{ debugName: "templates" }] : []));
2580
2788
  inputCollectionRef;
2581
2789
  constructor(_formService, _controlContainer) {
2582
2790
  super();
@@ -2623,10 +2831,10 @@ class RestWorldInputCollectionComponent extends RestWorldInputLazyLoadBaseCompon
2623
2831
  this.property.update((property) => { delete property._templates[title]; return { ...property }; });
2624
2832
  this.innerFormArray().removeAt(title);
2625
2833
  }
2626
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputCollectionComponent, deps: [{ token: i1$1.FormService }, { token: i2$3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
2627
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldInputCollectionComponent, isStandalone: true, selector: "rw-input-collection", queries: [{ propertyName: "inputCollectionRef", first: true, predicate: ["inputCollection"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\" cdkDropList (cdkDropListDropped)=\"collectionItemDropped($event)\">\n @for (template of templates(); track template) {\n <div class=\"flex align-items-center\" cdkDrag>\n <i class=\"fas fa-grip-lines\" cdkDragHandle></i>\n <div class=\"brace\">\n </div>\n <div class=\"w-full flex justify-content-end\">\n <rw-input-template [formGroup]=\"innerFormArray().controls[template.title!]\" [template]=\"defaultTemplate()\" [apiName]=\"apiName()\" class=\"w-full\"></rw-input-template>\n <button pButton pRipple type=\"button\" icon=\"fas fa-trash\" class=\"p-button-outlined p-button-danger ml-2 mb-3\" (click)=\"deleteItemFromCollection(template)\"></button>\n </div>\n </div>\n }\n <div class=\"flex justify-content-end w-full\">\n <button pButton pRipple type=\"button\" icon=\"fas fa-plus\" class=\"p-button-outlined p-button-info\" (click)=\"addNewItemToCollection()\"></button>\n </div>\n </div>\n</div>", styles: [".cdk-drag-handle{cursor:move}.cdk-drag-preview{background-color:#ffffffd0;border:2px dashed rgb(206,212,218);cursor:move}.cdk-drag-placeholder{border:2px dashed rgb(206,212,218);margin:-2px}.brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputTemplateComponent), selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: i0.forwardRef(() => DragDropModule) }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDropList), selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDrag), selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDragHandle), selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i0.forwardRef(() => ButtonDirective), selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$3.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i2$3.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2834
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputCollectionComponent, deps: [{ token: i1$1.FormService }, { token: i2$3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
2835
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputCollectionComponent, isStandalone: true, selector: "rw-input-collection", queries: [{ propertyName: "inputCollectionRef", first: true, predicate: ["inputCollection"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\" cdkDropList (cdkDropListDropped)=\"collectionItemDropped($event)\">\n @for (template of templates(); track template) {\n <div class=\"flex align-items-center\" cdkDrag>\n <i class=\"fas fa-grip-lines\" cdkDragHandle></i>\n <div class=\"brace\">\n </div>\n <div class=\"w-full flex justify-content-end\">\n <rw-input-template [formGroup]=\"innerFormArray().controls[template.title!]\" [template]=\"defaultTemplate()\" [apiName]=\"apiName()\" class=\"w-full\"></rw-input-template>\n <button pButton pRipple type=\"button\" icon=\"fas fa-trash\" class=\"p-button-outlined p-button-danger ml-2 mb-3\" (click)=\"deleteItemFromCollection(template)\"></button>\n </div>\n </div>\n }\n <div class=\"flex justify-content-end w-full\">\n <button pButton pRipple type=\"button\" icon=\"fas fa-plus\" class=\"p-button-outlined p-button-info\" (click)=\"addNewItemToCollection()\"></button>\n </div>\n </div>\n</div>", styles: [".cdk-drag-handle{cursor:move}.cdk-drag-preview{background-color:#ffffffd0;border:2px dashed rgb(206,212,218);cursor:move}.cdk-drag-placeholder{border:2px dashed rgb(206,212,218);margin:-2px}.brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputTemplateComponent), selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: i0.forwardRef(() => DragDropModule) }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDropList), selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDrag), selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDragHandle), selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i0.forwardRef(() => ButtonDirective), selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$3.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i2$3.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2628
2836
  }
2629
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputCollectionComponent, decorators: [{
2837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputCollectionComponent, decorators: [{
2630
2838
  type: Component,
2631
2839
  args: [{ selector: 'rw-input-collection', viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputTemplateComponent), DragDropModule, ButtonDirective, ReactiveFormsModule], template: "<div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\" cdkDropList (cdkDropListDropped)=\"collectionItemDropped($event)\">\n @for (template of templates(); track template) {\n <div class=\"flex align-items-center\" cdkDrag>\n <i class=\"fas fa-grip-lines\" cdkDragHandle></i>\n <div class=\"brace\">\n </div>\n <div class=\"w-full flex justify-content-end\">\n <rw-input-template [formGroup]=\"innerFormArray().controls[template.title!]\" [template]=\"defaultTemplate()\" [apiName]=\"apiName()\" class=\"w-full\"></rw-input-template>\n <button pButton pRipple type=\"button\" icon=\"fas fa-trash\" class=\"p-button-outlined p-button-danger ml-2 mb-3\" (click)=\"deleteItemFromCollection(template)\"></button>\n </div>\n </div>\n }\n <div class=\"flex justify-content-end w-full\">\n <button pButton pRipple type=\"button\" icon=\"fas fa-plus\" class=\"p-button-outlined p-button-info\" (click)=\"addNewItemToCollection()\"></button>\n </div>\n </div>\n</div>", styles: [".cdk-drag-handle{cursor:move}.cdk-drag-preview{background-color:#ffffffd0;border:2px dashed rgb(206,212,218);cursor:move}.cdk-drag-placeholder{border:2px dashed rgb(206,212,218);margin:-2px}.brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
2632
2840
  }], ctorParameters: () => [{ type: i1$1.FormService }, { type: i2$3.ControlContainer }], propDecorators: { inputCollectionRef: [{
@@ -2649,10 +2857,10 @@ class RestWorldInputComponent extends RestWorldInputLazyLoadBaseComponent {
2649
2857
  get PropertyWithOptions() {
2650
2858
  return PropertyWithOptions;
2651
2859
  }
2652
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2653
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldInputComponent, isStandalone: true, selector: "rw-input", usesInheritance: true, ngImport: i0, template: "@if (property()) {\r\n @if (property().options) {\r\n <rw-input-dropdown [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-input-object [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-input-collection [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-collection>\r\n }\r\n @default {\r\n <rw-input-simple [property]=\"property()\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-simple>\r\n }\r\n }\r\n }\r\n\r\n <rw-validation-errors [property]=\"property()\"></rw-validation-errors>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputDropdownComponent), selector: "rw-input-dropdown", inputs: ["caseSensitive", "getLabel", "getTooltip"], outputs: ["onChange"] }, { kind: "component", type: i0.forwardRef(() => RestWorldInputObjectComponent), selector: "rw-input-object" }, { kind: "component", type: i0.forwardRef(() => RestWorldInputSimpleComponent), selector: "rw-input-simple" }, { kind: "component", type: i0.forwardRef(() => RestWorldInputCollectionComponent), selector: "rw-input-collection" }, { kind: "component", type: i0.forwardRef(() => RestWorldValidationErrorsComponent), selector: "rw-validation-errors", inputs: ["form", "property"] }, { kind: "ngmodule", type: i0.forwardRef(() => FormsModule) }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2860
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2861
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputComponent, isStandalone: true, selector: "rw-input", usesInheritance: true, ngImport: i0, template: "@if (property()) {\r\n @if (property().options) {\r\n <rw-input-dropdown [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-input-object [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-input-collection [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-collection>\r\n }\r\n @default {\r\n <rw-input-simple [property]=\"property()\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-simple>\r\n }\r\n }\r\n }\r\n\r\n <rw-validation-errors [property]=\"property()\"></rw-validation-errors>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputDropdownComponent), selector: "rw-input-dropdown", inputs: ["caseSensitive", "getLabel", "getTooltip"], outputs: ["onChange"] }, { kind: "component", type: i0.forwardRef(() => RestWorldInputObjectComponent), selector: "rw-input-object" }, { kind: "component", type: i0.forwardRef(() => RestWorldInputSimpleComponent), selector: "rw-input-simple" }, { kind: "component", type: i0.forwardRef(() => RestWorldInputCollectionComponent), selector: "rw-input-collection" }, { kind: "component", type: i0.forwardRef(() => RestWorldValidationErrorsComponent), selector: "rw-validation-errors", inputs: ["form", "property"] }, { kind: "ngmodule", type: i0.forwardRef(() => FormsModule) }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2654
2862
  }
2655
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputComponent, decorators: [{
2863
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputComponent, decorators: [{
2656
2864
  type: Component,
2657
2865
  args: [{ selector: 'rw-input', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputDropdownComponent), forwardRef(() => RestWorldInputObjectComponent), forwardRef(() => RestWorldInputSimpleComponent), RestWorldInputCollectionComponent, RestWorldValidationErrorsComponent, FormsModule], template: "@if (property()) {\r\n @if (property().options) {\r\n <rw-input-dropdown [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-input-object [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-input-collection [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-collection>\r\n }\r\n @default {\r\n <rw-input-simple [property]=\"property()\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-simple>\r\n }\r\n }\r\n }\r\n\r\n <rw-validation-errors [property]=\"property()\"></rw-validation-errors>\r\n}\r\n" }]
2658
2866
  }] });
@@ -2671,7 +2879,7 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
2671
2879
  * A flag that indicates if the search should be case sensitive.
2672
2880
  * The default is false.
2673
2881
  */
2674
- caseSensitive = input(false);
2882
+ caseSensitive = input(false, ...(ngDevMode ? [{ debugName: "caseSensitive" }] : []));
2675
2883
  /**
2676
2884
  * A function that returns the label for the given item.
2677
2885
  * The default returns the prompt and optionally the value in brackets.
@@ -2679,7 +2887,7 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
2679
2887
  * Overwrite this function to change the label.
2680
2888
  * @param item The item to get the label for.
2681
2889
  */
2682
- getLabel = input();
2890
+ getLabel = input(...(ngDevMode ? [undefined, { debugName: "getLabel" }] : []));
2683
2891
  /**
2684
2892
  * A function that returns the tooltip for the given item.
2685
2893
  * The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.
@@ -2687,10 +2895,10 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
2687
2895
  * Overwrite this function to change the tooltip.
2688
2896
  * @param item The item to get the label for.
2689
2897
  */
2690
- getTooltip = input();
2691
- inputOptionsMultipleRef = contentChild("inputOptionsMultiple");
2692
- inputOptionsSingleRef = contentChild("inputOptionsSingle");
2693
- multiSelect = viewChild(MultiSelect);
2898
+ getTooltip = input(...(ngDevMode ? [undefined, { debugName: "getTooltip" }] : []));
2899
+ inputOptionsMultipleRef = contentChild("inputOptionsMultiple", ...(ngDevMode ? [{ debugName: "inputOptionsMultipleRef" }] : []));
2900
+ inputOptionsSingleRef = contentChild("inputOptionsSingle", ...(ngDevMode ? [{ debugName: "inputOptionsSingleRef" }] : []));
2901
+ multiSelect = viewChild(MultiSelect, ...(ngDevMode ? [{ debugName: "multiSelect" }] : []));
2694
2902
  /**
2695
2903
  * An event that is emitted when the selected value changes.
2696
2904
  */
@@ -2700,7 +2908,7 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
2700
2908
  _formControl = computed(() => {
2701
2909
  const formGroup = this._controlContainer.control;
2702
2910
  return formGroup.controls[this.property().name];
2703
- });
2911
+ }, ...(ngDevMode ? [{ debugName: "_formControl" }] : []));
2704
2912
  _valueChangesSignal = toSignal(merge(
2705
2913
  // Get the initial value when 'control' changes
2706
2914
  toObservable(this._formControl).pipe(map((ctl) => ctl.value)),
@@ -2768,10 +2976,10 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
2768
2976
  return `toupper(${filter})`;
2769
2977
  return filter.toUpperCase();
2770
2978
  }
2771
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputDropdownComponent, deps: [{ token: i2$3.ControlContainer }, { token: OptionsService }], target: i0.ɵɵFactoryTarget.Component });
2772
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldInputDropdownComponent, isStandalone: true, selector: "rw-input-dropdown", inputs: { caseSensitive: { classPropertyName: "caseSensitive", publicName: "caseSensitive", isSignal: true, isRequired: false, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, getTooltip: { classPropertyName: "getTooltip", publicName: "getTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, queries: [{ propertyName: "inputOptionsMultipleRef", first: true, predicate: ["inputOptionsMultiple"], descendants: true, isSignal: true }, { propertyName: "inputOptionsSingleRef", first: true, predicate: ["inputOptionsSingle"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "multiSelect", first: true, predicate: MultiSelect, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-select\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n @else {\n <p-select\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n</ng-template>\n\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-multiSelect\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n @else {\n <p-multiSelect\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n</ng-template>\n\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n@else {\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n", styles: ["::ng-deep .p-multiselect-label{display:inline-flex!important}::ng-deep .p-multiselect-label-empty{height:36px}::ng-deep .p-chip{background-color:#eff6ff;color:#1d4ed8}::ng-deep .pi-chip-remove-icon:hover{filter:brightness(.6)}\n"], dependencies: [{ kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "style", "styleClass", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertySelectAttributes, selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2979
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputDropdownComponent, deps: [{ token: i2$3.ControlContainer }, { token: OptionsService }], target: i0.ɵɵFactoryTarget.Component });
2980
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputDropdownComponent, isStandalone: true, selector: "rw-input-dropdown", inputs: { caseSensitive: { classPropertyName: "caseSensitive", publicName: "caseSensitive", isSignal: true, isRequired: false, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, getTooltip: { classPropertyName: "getTooltip", publicName: "getTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, queries: [{ propertyName: "inputOptionsMultipleRef", first: true, predicate: ["inputOptionsMultiple"], descendants: true, isSignal: true }, { propertyName: "inputOptionsSingleRef", first: true, predicate: ["inputOptionsSingle"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "multiSelect", first: true, predicate: MultiSelect, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-select\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n @else {\n <p-select\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n</ng-template>\n\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-multiSelect\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n @else {\n <p-multiSelect\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n</ng-template>\n\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n@else {\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n", styles: ["::ng-deep .p-multiselect-label{display:inline-flex!important}::ng-deep .p-multiselect-label-empty{height:36px}::ng-deep .p-chip{background-color:#eff6ff;color:#1d4ed8}::ng-deep .pi-chip-remove-icon:hover{filter:brightness(.6)}\n"], dependencies: [{ kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "styleClass", "panelStyle", "panelStyleClass", "inputId", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "dataKey", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "placeholder", "options", "filterValue", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect", "size", "variant", "fluid", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertySelectAttributes, selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2773
2981
  }
2774
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputDropdownComponent, decorators: [{
2982
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputDropdownComponent, decorators: [{
2775
2983
  type: Component,
2776
2984
  args: [{ selector: 'rw-input-dropdown', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [Select, ReactiveFormsModule, MultiSelect, Tooltip, Chip, NgTemplateOutlet, HalFormsModule, FormsModule], template: "<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-select\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n @else {\n <p-select\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n</ng-template>\n\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-multiSelect\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n @else {\n <p-multiSelect\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n</ng-template>\n\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n@else {\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n", styles: ["::ng-deep .p-multiselect-label{display:inline-flex!important}::ng-deep .p-multiselect-label-empty{height:36px}::ng-deep .p-chip{background-color:#eff6ff;color:#1d4ed8}::ng-deep .pi-chip-remove-icon:hover{filter:brightness(.6)}\n"] }]
2777
2985
  }], ctorParameters: () => [{ type: i2$3.ControlContainer }, { type: OptionsService }] });
@@ -2785,7 +2993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
2785
2993
  */
2786
2994
  class RestWorldInputObjectComponent extends RestWorldInputLazyLoadBaseComponent {
2787
2995
  _controlContainer;
2788
- inputObjectRef = contentChild("inputObject");
2996
+ inputObjectRef = contentChild("inputObject", ...(ngDevMode ? [{ debugName: "inputObjectRef" }] : []));
2789
2997
  constructor(_controlContainer) {
2790
2998
  super();
2791
2999
  this._controlContainer = _controlContainer;
@@ -2793,11 +3001,11 @@ class RestWorldInputObjectComponent extends RestWorldInputLazyLoadBaseComponent
2793
3001
  innerFormGroup = computed(() => {
2794
3002
  const formGroup = this._controlContainer.control;
2795
3003
  return formGroup.controls[this.property().name];
2796
- });
2797
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputObjectComponent, deps: [{ token: i2$3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
2798
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.6", type: RestWorldInputObjectComponent, isStandalone: true, selector: "rw-input-object", queries: [{ propertyName: "inputObjectRef", first: true, predicate: ["inputObject"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultInputObject let-property=\"property\" let-innerFormGroup=\"innerFormGroup\", let-apiName=\"apiName\">\n <div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\">\n <rw-input-template [formGroup]=\"innerFormGroup()\" [template]=\"property()._templates.default\" [apiName]=\"apiName()\"></rw-input-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container>\n <ng-container *ngTemplateOutlet=\"inputObjectRef() || defaultInputObject; context: { property: property, innerFormGroup: innerFormGroup, apiName: apiName }\"></ng-container>\n</ng-container>\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputTemplateComponent), selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$3.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i2$3.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
3004
+ }, ...(ngDevMode ? [{ debugName: "innerFormGroup" }] : []));
3005
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputObjectComponent, deps: [{ token: i2$3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
3006
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.1", type: RestWorldInputObjectComponent, isStandalone: true, selector: "rw-input-object", queries: [{ propertyName: "inputObjectRef", first: true, predicate: ["inputObject"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultInputObject let-property=\"property\" let-innerFormGroup=\"innerFormGroup\", let-apiName=\"apiName\">\n <div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\">\n <rw-input-template [formGroup]=\"innerFormGroup()\" [template]=\"property()._templates.default\" [apiName]=\"apiName()\"></rw-input-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container>\n <ng-container *ngTemplateOutlet=\"inputObjectRef() || defaultInputObject; context: { property: property, innerFormGroup: innerFormGroup, apiName: apiName }\"></ng-container>\n</ng-container>\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputTemplateComponent), selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$3.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i2$3.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2799
3007
  }
2800
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputObjectComponent, decorators: [{
3008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputObjectComponent, decorators: [{
2801
3009
  type: Component,
2802
3010
  args: [{ selector: 'rw-input-object', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputTemplateComponent), ReactiveFormsModule, NgTemplateOutlet], template: "<ng-template #defaultInputObject let-property=\"property\" let-innerFormGroup=\"innerFormGroup\", let-apiName=\"apiName\">\n <div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\">\n <rw-input-template [formGroup]=\"innerFormGroup()\" [template]=\"property()._templates.default\" [apiName]=\"apiName()\"></rw-input-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container>\n <ng-container *ngTemplateOutlet=\"inputObjectRef() || defaultInputObject; context: { property: property, innerFormGroup: innerFormGroup, apiName: apiName }\"></ng-container>\n</ng-container>\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
2803
3011
  }], ctorParameters: () => [{ type: i2$3.ControlContainer }] });
@@ -2820,8 +3028,8 @@ class RestWorldInputSimpleComponent extends RestWorldInputBaseComponent {
2820
3028
  .replace("22", "hh")
2821
3029
  .replace("33", "mm")
2822
3030
  .replace("44", "ss");
2823
- _inputChild = viewChild("inputElement");
2824
- _controlChild = viewChild(NG_VALUE_ACCESSOR);
3031
+ _inputChild = viewChild("inputElement", ...(ngDevMode ? [{ debugName: "_inputChild" }] : []));
3032
+ _controlChild = viewChild(NG_VALUE_ACCESSOR, ...(ngDevMode ? [{ debugName: "_controlChild" }] : []));
2825
3033
  constructor() {
2826
3034
  super();
2827
3035
  }
@@ -2877,20 +3085,20 @@ class RestWorldInputSimpleComponent extends RestWorldInputBaseComponent {
2877
3085
  get timeFormat() {
2878
3086
  return RestWorldInputSimpleComponent._timeFormat;
2879
3087
  }
2880
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2881
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldInputSimpleComponent, isStandalone: true, selector: "rw-input-simple", providers: [{
3088
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3089
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputSimpleComponent, isStandalone: true, selector: "rw-input-simple", providers: [{
2882
3090
  provide: NG_VALUE_ACCESSOR,
2883
3091
  useExisting: forwardRef(() => RestWorldInputSimpleComponent),
2884
3092
  multi: true
2885
- }], viewQueries: [{ propertyName: "_inputChild", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }, { propertyName: "_controlChild", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@switch(property().type) {\n @case (PropertyType.Textarea) {\n @if (useTemplateDrivenForms()){\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n @else {\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n }\n @case (PropertyType.Date) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Month) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Time) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.DatetimeLocal) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Number) {\n @if (useTemplateDrivenForms()) {\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n @else {\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n }\n @case (PropertyType.Bool) {\n @if (useTemplateDrivenForms()) {\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\n }\n @else {\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\n }\n }\n @case (PropertyType.DatetimeOffset) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Duration) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Image) {\n @if (useTemplateDrivenForms()) {\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n @else {\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n }\n @case (PropertyType.File) {\n @if (useTemplateDrivenForms()) {\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n @else {\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n }\n @default {\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\n @if (useTemplateDrivenForms()) {\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\n }\n @else {\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\n }\n }\n}\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"], dependencies: [{ kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: TriStateCheckbox, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: ["value", "name", "disabled", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "model", "variant"], outputs: ["disabledChange", "modelChange", "onChange", "onFocus", "onBlur"] }, { kind: "component", type: RestWorldImageComponent, selector: "rw-image", inputs: ["property", "backgroundColor", "displayCropDialog"], outputs: ["backgroundColorChange", "displayCropDialogChange"] }, { kind: "component", type: RestWorldFileComponent, selector: "rw-file", inputs: ["accept", "fileName"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: DefaultPropertyValueAccessor, selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]" }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyInputNumberAttributes, selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
3093
+ }], viewQueries: [{ propertyName: "_inputChild", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }, { propertyName: "_controlChild", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@switch(property().type) {\r\n @case (PropertyType.Textarea) {\r\n @if (useTemplateDrivenForms()){\r\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n @else {\r\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n }\r\n @case (PropertyType.Date) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Month) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Time) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.DatetimeLocal) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Number) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n @else {\r\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\r\n }\r\n @else {\r\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\r\n }\r\n }\r\n @case (PropertyType.DatetimeOffset) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Duration) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Image) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n @else {\r\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n }\r\n @case (PropertyType.File) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n @else {\r\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n }\r\n @default {\r\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\r\n @if (useTemplateDrivenForms()) {\r\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\r\n }\r\n @else {\r\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\r\n }\r\n }\r\n}\r\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"], dependencies: [{ kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "styleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "readonlyInput", "shortYearCutoff", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "view", "defaultDate", "appendTo"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: TriStateCheckbox, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: ["value", "name", "disabled", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "model", "variant"], outputs: ["disabledChange", "modelChange", "onChange", "onFocus", "onBlur"] }, { kind: "component", type: RestWorldImageComponent, selector: "rw-image", inputs: ["property", "backgroundColor", "displayCropDialog"], outputs: ["backgroundColorChange", "displayCropDialogChange"] }, { kind: "component", type: RestWorldFileComponent, selector: "rw-file", inputs: ["accept", "fileName"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: DefaultPropertyValueAccessor, selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]" }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyInputNumberAttributes, selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: i2$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2886
3094
  }
2887
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputSimpleComponent, decorators: [{
3095
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputSimpleComponent, decorators: [{
2888
3096
  type: Component,
2889
3097
  args: [{ selector: 'rw-input-simple', standalone: true, providers: [{
2890
3098
  provide: NG_VALUE_ACCESSOR,
2891
3099
  useExisting: forwardRef(() => RestWorldInputSimpleComponent),
2892
3100
  multi: true
2893
- }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [DatePicker, InputNumber, TriStateCheckbox, RestWorldImageComponent, RestWorldFileComponent, InputText, HalFormsModule, FormsModule], template: "@switch(property().type) {\n @case (PropertyType.Textarea) {\n @if (useTemplateDrivenForms()){\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n @else {\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n }\n @case (PropertyType.Date) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Month) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Time) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.DatetimeLocal) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Number) {\n @if (useTemplateDrivenForms()) {\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n @else {\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n }\n @case (PropertyType.Bool) {\n @if (useTemplateDrivenForms()) {\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\n }\n @else {\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\n }\n }\n @case (PropertyType.DatetimeOffset) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Duration) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Image) {\n @if (useTemplateDrivenForms()) {\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n @else {\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n }\n @case (PropertyType.File) {\n @if (useTemplateDrivenForms()) {\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n @else {\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n }\n @default {\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\n @if (useTemplateDrivenForms()) {\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\n }\n @else {\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\n }\n }\n}\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"] }]
3101
+ }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [DatePicker, InputNumber, TriStateCheckbox, RestWorldImageComponent, RestWorldFileComponent, InputText, HalFormsModule, FormsModule], template: "@switch(property().type) {\r\n @case (PropertyType.Textarea) {\r\n @if (useTemplateDrivenForms()){\r\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n @else {\r\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n }\r\n @case (PropertyType.Date) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Month) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Time) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.DatetimeLocal) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Number) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n @else {\r\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\r\n }\r\n @else {\r\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\r\n }\r\n }\r\n @case (PropertyType.DatetimeOffset) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Duration) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Image) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n @else {\r\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n }\r\n @case (PropertyType.File) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n @else {\r\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n }\r\n @default {\r\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\r\n @if (useTemplateDrivenForms()) {\r\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\r\n }\r\n @else {\r\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\r\n }\r\n }\r\n}\r\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"] }]
2894
3102
  }], ctorParameters: () => [] });
2895
3103
  /**
2896
3104
  * A collection of `<rw-form>` elements automatically created from a template.
@@ -2905,19 +3113,19 @@ class RestWorldInputTemplateComponent {
2905
3113
  * @required
2906
3114
  * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
2907
3115
  */
2908
- apiName = input.required();
3116
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
2909
3117
  /**
2910
3118
  * The template to display.
2911
3119
  * @required
2912
3120
  * @remarks This is the template that defines the properties to display.
2913
3121
  */
2914
- template = input.required();
2915
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2916
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldInputTemplateComponent, isStandalone: true, selector: "rw-input-template", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (property of template().properties; track property) {\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\n}\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldFormElementComponent, selector: "rw-form-element" }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
3122
+ template = input.required(...(ngDevMode ? [{ debugName: "template" }] : []));
3123
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3124
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputTemplateComponent, isStandalone: true, selector: "rw-input-template", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (property of template().properties; track property) {\r\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldFormElementComponent, selector: "rw-form-element" }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
2917
3125
  }
2918
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldInputTemplateComponent, decorators: [{
3126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputTemplateComponent, decorators: [{
2919
3127
  type: Component,
2920
- args: [{ selector: 'rw-input-template', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [RestWorldFormElementComponent], template: "@for (property of template().properties; track property) {\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\n}\n" }]
3128
+ args: [{ selector: 'rw-input-template', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [RestWorldFormElementComponent], template: "@for (property of template().properties; track property) {\r\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\r\n}\r\n" }]
2921
3129
  }] });
2922
3130
 
2923
3131
  /**
@@ -2963,19 +3171,19 @@ class RestWorldFormComponent {
2963
3171
  /**
2964
3172
  * Determines whether to enable the delete button.
2965
3173
  */
2966
- allowDelete = input(true);
3174
+ allowDelete = input(true, ...(ngDevMode ? [{ debugName: "allowDelete" }] : []));
2967
3175
  /**
2968
3176
  * Determines whether to enable the reload button.
2969
3177
  */
2970
- allowReload = input(true);
3178
+ allowReload = input(true, ...(ngDevMode ? [{ debugName: "allowReload" }] : []));
2971
3179
  /**
2972
3180
  * Determines whether to enable the submit button.
2973
3181
  */
2974
- allowSubmit = input(true);
3182
+ allowSubmit = input(true, ...(ngDevMode ? [{ debugName: "allowSubmit" }] : []));
2975
3183
  /**
2976
3184
  * The name of the API to use.
2977
3185
  */
2978
- apiName = input.required();
3186
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
2979
3187
  /**
2980
3188
  * Determines whether the resource can be deleted.
2981
3189
  */
@@ -2986,7 +3194,7 @@ class RestWorldFormComponent {
2986
3194
  this.formGroup() !== undefined &&
2987
3195
  this.formGroup()?.value.id !== undefined &&
2988
3196
  this.formGroup()?.value.timestamp !== undefined &&
2989
- !this.isLoading());
3197
+ !this.isLoading(), ...(ngDevMode ? [{ debugName: "canDelete" }] : []));
2990
3198
  /**
2991
3199
  * Determines whether the form can be reloaded.
2992
3200
  */
@@ -2995,7 +3203,7 @@ class RestWorldFormComponent {
2995
3203
  this.template().target !== undefined &&
2996
3204
  this.template().title !== undefined &&
2997
3205
  this.template().properties.some(p => p.name === "id" && p.value !== undefined && p.value !== null && p.value !== 0) &&
2998
- !this.isLoading());
3206
+ !this.isLoading(), ...(ngDevMode ? [{ debugName: "canReload" }] : []));
2999
3207
  /**
3000
3208
  * Determines whether the form can be submitted.
3001
3209
  */
@@ -3003,33 +3211,32 @@ class RestWorldFormComponent {
3003
3211
  this.template() !== undefined &&
3004
3212
  this.template().target !== undefined &&
3005
3213
  !this.isLoading() &&
3006
- this.formGroup() !== undefined &&
3007
- this.formGroup()?.valid);
3214
+ this.formGroup() !== undefined, ...(ngDevMode ? [{ debugName: "canSubmit" }] : []));
3008
3215
  /**
3009
3216
  * The form group that represents the form.
3010
3217
  */
3011
- formGroup = computed(() => this._formService.createFormGroupFromTemplate(this.template()));
3012
- isLoading = signal(false);
3218
+ formGroup = computed(() => this._formService.createFormGroupFromTemplate(this.template()), ...(ngDevMode ? [{ debugName: "formGroup" }] : []));
3219
+ isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
3013
3220
  /**
3014
3221
  * The rel of the form.
3015
3222
  */
3016
- rel = input.required();
3223
+ rel = input.required(...(ngDevMode ? [{ debugName: "rel" }] : []));
3017
3224
  /**
3018
3225
  * Determines whether to show the delete button.
3019
3226
  */
3020
- showDelete = input(true);
3227
+ showDelete = input(true, ...(ngDevMode ? [{ debugName: "showDelete" }] : []));
3021
3228
  /**
3022
3229
  * Determines whether to show the reload button.
3023
3230
  */
3024
- showReload = input(true);
3231
+ showReload = input(true, ...(ngDevMode ? [{ debugName: "showReload" }] : []));
3025
3232
  /**
3026
3233
  * Determines whether to show the submit button.
3027
3234
  */
3028
- showSubmit = input(true);
3235
+ showSubmit = input(true, ...(ngDevMode ? [{ debugName: "showSubmit" }] : []));
3029
3236
  /**
3030
3237
  * The template used to render the form.
3031
3238
  */
3032
- template = model.required();
3239
+ template = model.required(...(ngDevMode ? [{ debugName: "template" }] : []));
3033
3240
  /**
3034
3241
  * Emitted when the form value changes.
3035
3242
  */
@@ -3037,12 +3244,12 @@ class RestWorldFormComponent {
3037
3244
  /**
3038
3245
  * A reference to a template that can be used to render custom buttons for the form.
3039
3246
  */
3040
- buttonsRef = contentChild('buttons');
3247
+ buttonsRef = contentChild('buttons', ...(ngDevMode ? [{ debugName: "buttonsRef" }] : []));
3041
3248
  /**
3042
3249
  * A reference to a template that can be used to render custom content inside the <form> element instead of the default form.
3043
3250
  */
3044
- contentRef = contentChild('content');
3045
- _client = computed(() => this._clients.getClient(this.apiName()));
3251
+ contentRef = contentChild('content', ...(ngDevMode ? [{ debugName: "contentRef" }] : []));
3252
+ _client = computed(() => this._clients.getClient(this.apiName()), ...(ngDevMode ? [{ debugName: "_client" }] : []));
3046
3253
  _formValueChangesSubscription;
3047
3254
  constructor(_clients, _confirmationService, _messageService, _formService, _elementRef, _problemService) {
3048
3255
  this._clients = _clients;
@@ -3104,7 +3311,6 @@ class RestWorldFormComponent {
3104
3311
  async submit() {
3105
3312
  const formGroup = this.formGroup();
3106
3313
  const template = this.template();
3107
- const canSubmit = this.canSubmit();
3108
3314
  if (formGroup !== undefined) {
3109
3315
  formGroup.markAllAsTouched();
3110
3316
  if (!formGroup.valid) {
@@ -3114,9 +3320,10 @@ class RestWorldFormComponent {
3114
3320
  detail: 'Please correct the errors before submitting.',
3115
3321
  });
3116
3322
  ProblemService.scrollToFirstValidationError(this._elementRef.nativeElement);
3323
+ return;
3117
3324
  }
3118
3325
  }
3119
- if (!canSubmit || formGroup === undefined || template === undefined)
3326
+ if (!this.canSubmit() || formGroup === undefined || template === undefined)
3120
3327
  return;
3121
3328
  this.isLoading.set(true);
3122
3329
  try {
@@ -3146,10 +3353,10 @@ class RestWorldFormComponent {
3146
3353
  }
3147
3354
  this.isLoading.set(false);
3148
3355
  }
3149
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldFormComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.ConfirmationService }, { token: i2$1.MessageService }, { token: i1$1.FormService }, { token: i0.ElementRef }, { token: ProblemService }], target: i0.ɵɵFactoryTarget.Component });
3150
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldFormComponent, isStandalone: true, selector: "rw-form", inputs: { allowDelete: { classPropertyName: "allowDelete", publicName: "allowDelete", isSignal: true, isRequired: false, transformFunction: null }, allowReload: { classPropertyName: "allowReload", publicName: "allowReload", isSignal: true, isRequired: false, transformFunction: null }, allowSubmit: { classPropertyName: "allowSubmit", publicName: "allowSubmit", isSignal: true, isRequired: false, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: true, isRequired: false, transformFunction: null }, showReload: { classPropertyName: "showReload", publicName: "showReload", isSignal: true, isRequired: false, transformFunction: null }, showSubmit: { classPropertyName: "showSubmit", publicName: "showSubmit", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { afterDelete: "afterDelete", afterSubmit: "afterSubmit", template: "templateChange", valueChanges: "valueChanges" }, queries: [{ propertyName: "buttonsRef", first: true, predicate: ["buttons"], descendants: true, isSignal: true }, { propertyName: "contentRef", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (formGroup() !== undefined && template() !== undefined) {\n <form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup()\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template()\" [apiName]=\"apiName()\"></rw-input-template>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"contentRef() ?? defaultContent; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n @if (isLoading()) {\n <div class=\"blockable-overlay\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n }\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit()\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload()\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\"\n class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\"\n [disabled]=\"!canDelete()\"></button>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"buttonsRef() ?? defaultButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n </div>\n </div>\n </form>\n}\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: RestWorldValidationErrorsComponent, selector: "rw-validation-errors", inputs: ["form", "property"] }, { kind: "component", type: RestWorldInputTemplateComponent, selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i6.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i8.Ripple, selector: "[pRipple]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
3356
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.ConfirmationService }, { token: i2$1.MessageService }, { token: i1$1.FormService }, { token: i0.ElementRef }, { token: ProblemService }], target: i0.ɵɵFactoryTarget.Component });
3357
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldFormComponent, isStandalone: true, selector: "rw-form", inputs: { allowDelete: { classPropertyName: "allowDelete", publicName: "allowDelete", isSignal: true, isRequired: false, transformFunction: null }, allowReload: { classPropertyName: "allowReload", publicName: "allowReload", isSignal: true, isRequired: false, transformFunction: null }, allowSubmit: { classPropertyName: "allowSubmit", publicName: "allowSubmit", isSignal: true, isRequired: false, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: true, isRequired: false, transformFunction: null }, showReload: { classPropertyName: "showReload", publicName: "showReload", isSignal: true, isRequired: false, transformFunction: null }, showSubmit: { classPropertyName: "showSubmit", publicName: "showSubmit", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { afterDelete: "afterDelete", afterSubmit: "afterSubmit", template: "templateChange", valueChanges: "valueChanges" }, queries: [{ propertyName: "buttonsRef", first: true, predicate: ["buttons"], descendants: true, isSignal: true }, { propertyName: "contentRef", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (formGroup() !== undefined && template() !== undefined) {\n <form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup()\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template()\" [apiName]=\"apiName()\"></rw-input-template>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"contentRef() ?? defaultContent; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n @if (isLoading()) {\n <div class=\"blockable-overlay\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n }\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit()\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload()\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\"\n class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\"\n [disabled]=\"!canDelete()\"></button>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"buttonsRef() ?? defaultButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n </div>\n </div>\n </form>\n}\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: RestWorldValidationErrorsComponent, selector: "rw-validation-errors", inputs: ["form", "property"] }, { kind: "component", type: RestWorldInputTemplateComponent, selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i6.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i8.Ripple, selector: "[pRipple]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
3151
3358
  }
3152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldFormComponent, decorators: [{
3359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormComponent, decorators: [{
3153
3360
  type: Component,
3154
3361
  args: [{ selector: 'rw-form', standalone: true, imports: [ReactiveFormsModule, RestWorldValidationErrorsComponent, RestWorldInputTemplateComponent, ProgressSpinnerModule, ButtonModule, RippleModule, NgTemplateOutlet], template: "@if (formGroup() !== undefined && template() !== undefined) {\n <form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup()\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template()\" [apiName]=\"apiName()\"></rw-input-template>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"contentRef() ?? defaultContent; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n @if (isLoading()) {\n <div class=\"blockable-overlay\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n }\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit()\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload()\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\"\n class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\"\n [disabled]=\"!canDelete()\"></button>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"buttonsRef() ?? defaultButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n </div>\n </div>\n </form>\n}\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"] }]
3155
3362
  }], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.ConfirmationService }, { type: i2$1.MessageService }, { type: i1$1.FormService }, { type: i0.ElementRef }, { type: ProblemService }] });
@@ -3165,17 +3372,17 @@ class RestWorldIdNavigationComponent {
3165
3372
  _messageService;
3166
3373
  _router;
3167
3374
  _route;
3168
- apiName = input.required();
3169
- rel = input.required();
3375
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
3376
+ rel = input.required(...(ngDevMode ? [{ debugName: "rel" }] : []));
3170
3377
  /**
3171
3378
  * A prefix to use for the URL that is returned from the backend.
3172
3379
  * If none is provided, a relative navigation will be performed which means that the last part of the current URL is replaced with the one from the backend.
3173
3380
  */
3174
- urlPrefix = input();
3381
+ urlPrefix = input(...(ngDevMode ? [undefined, { debugName: "urlPrefix" }] : []));
3175
3382
  idNavigationForm = new FormGroup({
3176
3383
  id: new FormControl(null, Validators.compose([Validators.min(1), Validators.max(Number.MAX_SAFE_INTEGER)]))
3177
3384
  });
3178
- _client = computed(() => this._clients.getClient(this.apiName()));
3385
+ _client = computed(() => this._clients.getClient(this.apiName()), ...(ngDevMode ? [{ debugName: "_client" }] : []));
3179
3386
  constructor(_clients, _messageService, _router, _route) {
3180
3387
  this._clients = _clients;
3181
3388
  this._messageService = _messageService;
@@ -3209,10 +3416,10 @@ class RestWorldIdNavigationComponent {
3209
3416
  await this._router.navigate(["..", resource._links.self[0].href], { relativeTo: this._route });
3210
3417
  this.idNavigationForm.reset();
3211
3418
  }
3212
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldIdNavigationComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.MessageService }, { token: i3$4.Router }, { token: i3$4.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
3213
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.6", type: RestWorldIdNavigationComponent, isStandalone: true, selector: "rw-id-navigation", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, urlPrefix: { classPropertyName: "urlPrefix", publicName: "urlPrefix", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<form [formGroup]=\"idNavigationForm\" (ngSubmit)=\"navigateById()\" class=\"mr-3\">\n <div class=\"p-inputgroup\">\n <p-inputNumber formControlName=\"id\" placeholder=\"Navigate by ID\"></p-inputNumber>\n <button type=\"submit\" pButton pRipple icon=\"fa-solid fa-arrow-right\"></button>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i1$5.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
3419
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldIdNavigationComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.MessageService }, { token: i3$4.Router }, { token: i3$4.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
3420
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldIdNavigationComponent, isStandalone: true, selector: "rw-id-navigation", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, urlPrefix: { classPropertyName: "urlPrefix", publicName: "urlPrefix", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<form [formGroup]=\"idNavigationForm\" (ngSubmit)=\"navigateById()\" class=\"mr-3\">\n <div class=\"p-inputgroup\">\n <p-inputNumber formControlName=\"id\" placeholder=\"Navigate by ID\"></p-inputNumber>\n <button type=\"submit\" pButton pRipple icon=\"fa-solid fa-arrow-right\"></button>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i1$5.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
3214
3421
  }
3215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldIdNavigationComponent, decorators: [{
3422
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldIdNavigationComponent, decorators: [{
3216
3423
  type: Component,
3217
3424
  args: [{ selector: 'rw-id-navigation', standalone: true, imports: [InputNumberModule, ButtonModule, ReactiveFormsModule], template: "<form [formGroup]=\"idNavigationForm\" (ngSubmit)=\"navigateById()\" class=\"mr-3\">\n <div class=\"p-inputgroup\">\n <p-inputNumber formControlName=\"id\" placeholder=\"Navigate by ID\"></p-inputNumber>\n <button type=\"submit\" pButton pRipple icon=\"fa-solid fa-arrow-right\"></button>\n </div>\n</form>\n" }]
3218
3425
  }], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.MessageService }, { type: i3$4.Router }, { type: i3$4.ActivatedRoute }] });
@@ -3228,7 +3435,7 @@ class RestWorldMenuButtonComponent {
3228
3435
  /**
3229
3436
  * An array of menu items to be displayed.
3230
3437
  */
3231
- items = input.required();
3438
+ items = input.required(...(ngDevMode ? [{ debugName: "items" }] : []));
3232
3439
  constructor(_router) {
3233
3440
  this._router = _router;
3234
3441
  }
@@ -3263,10 +3470,10 @@ class RestWorldMenuButtonComponent {
3263
3470
  item.command({ item: item });
3264
3471
  }
3265
3472
  }
3266
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldMenuButtonComponent, deps: [{ token: i3$4.Router }], target: i0.ɵɵFactoryTarget.Component });
3267
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldMenuButtonComponent, isStandalone: true, selector: "rw-menu-button", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (item of items(); track item; let i = $index) {\n @if (!item.items) {\n <p-button\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n } \n @else {\n <p-splitButton\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n }\n}\n", styles: [":host{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i4$1.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }] });
3473
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldMenuButtonComponent, deps: [{ token: i3$4.Router }], target: i0.ɵɵFactoryTarget.Component });
3474
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldMenuButtonComponent, isStandalone: true, selector: "rw-menu-button", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (item of items(); track item; let i = $index) {\n @if (!item.items) {\n <p-button\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n } \n @else {\n <p-splitButton\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n }\n}\n", styles: [":host{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i4$1.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }] });
3268
3475
  }
3269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldMenuButtonComponent, decorators: [{
3476
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldMenuButtonComponent, decorators: [{
3270
3477
  type: Component,
3271
3478
  args: [{ selector: 'rw-menu-button', standalone: true, imports: [ButtonModule, TooltipModule, SplitButtonModule], template: "@for (item of items(); track item; let i = $index) {\n @if (!item.items) {\n <p-button\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n } \n @else {\n <p-splitButton\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n }\n}\n", styles: [":host{display:flex;justify-content:flex-end}\n"] }]
3272
3479
  }], ctorParameters: () => [{ type: i3$4.Router }] });
@@ -3700,10 +3907,10 @@ class ODataService {
3700
3907
  }
3701
3908
  return property.type;
3702
3909
  }
3703
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ODataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3704
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ODataService, providedIn: 'root' });
3910
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ODataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3911
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ODataService, providedIn: 'root' });
3705
3912
  }
3706
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: ODataService, decorators: [{
3913
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ODataService, decorators: [{
3707
3914
  type: Injectable,
3708
3915
  args: [{
3709
3916
  providedIn: 'root',
@@ -3720,24 +3927,24 @@ class RestWorldTableColumnFilterElementComponent {
3720
3927
  * The filter constraint to update when the value changes.
3721
3928
  * This is coming from the $context of the #filter template
3722
3929
  */
3723
- filterConstraint = input.required();
3930
+ filterConstraint = input.required(...(ngDevMode ? [{ debugName: "filterConstraint" }] : []));
3724
3931
  /**
3725
3932
  * The HAL-Forms property to filter by.
3726
3933
  * This is normally the column.
3727
3934
  */
3728
- property = input.required();
3935
+ property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
3729
3936
  /**
3730
3937
  * The name of the API to use when generating dropdowns.
3731
3938
  */
3732
- apiName = input.required();
3939
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
3733
3940
  /**
3734
3941
  * The initial value of the filter.
3735
3942
  */
3736
- value = input.required();
3737
- form = computed(() => this._formService.createFormGroupFromTemplate(this.template()));
3943
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
3944
+ form = computed(() => this._formService.createFormGroupFromTemplate(this.template()), ...(ngDevMode ? [{ debugName: "form" }] : []));
3738
3945
  template = computed(() => new Template({
3739
3946
  properties: [this.property()],
3740
- }));
3947
+ }), ...(ngDevMode ? [{ debugName: "template" }] : []));
3741
3948
  _formValueChangesSubscription;
3742
3949
  constructor(_formService) {
3743
3950
  this._formService = _formService;
@@ -3757,12 +3964,12 @@ class RestWorldTableColumnFilterElementComponent {
3757
3964
  ngOnDestroy() {
3758
3965
  this._formValueChangesSubscription?.unsubscribe();
3759
3966
  }
3760
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldTableColumnFilterElementComponent, deps: [{ token: i1$1.FormService }], target: i0.ɵɵFactoryTarget.Component });
3761
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.6", type: RestWorldTableColumnFilterElementComponent, isStandalone: true, selector: "rw-table-column-filter-element", inputs: { filterConstraint: { classPropertyName: "filterConstraint", publicName: "filterConstraint", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<form [formGroup]=\"form()\">\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\n</form>\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldInputComponent, selector: "rw-input" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
3967
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableColumnFilterElementComponent, deps: [{ token: i1$1.FormService }], target: i0.ɵɵFactoryTarget.Component });
3968
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldTableColumnFilterElementComponent, isStandalone: true, selector: "rw-table-column-filter-element", inputs: { filterConstraint: { classPropertyName: "filterConstraint", publicName: "filterConstraint", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<form [formGroup]=\"form()\">\r\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldInputComponent, selector: "rw-input" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
3762
3969
  }
3763
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldTableColumnFilterElementComponent, decorators: [{
3970
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableColumnFilterElementComponent, decorators: [{
3764
3971
  type: Component,
3765
- args: [{ selector: 'rw-table-column-filter-element', imports: [RestWorldInputComponent, ReactiveFormsModule], template: "<form [formGroup]=\"form()\">\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\n</form>\n" }]
3972
+ args: [{ selector: 'rw-table-column-filter-element', imports: [RestWorldInputComponent, ReactiveFormsModule], template: "<form [formGroup]=\"form()\">\r\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\r\n</form>\r\n" }]
3766
3973
  }], ctorParameters: () => [{ type: i1$1.FormService }] });
3767
3974
 
3768
3975
  /**
@@ -3807,7 +4014,7 @@ class RestWorldTableComponent {
3807
4014
  * The name of the api.
3808
4015
  * For the editing capability, you must also set the editTemplate and the formArray.
3809
4016
  */
3810
- apiName = input.required();
4017
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
3811
4018
  /**
3812
4019
  * A function that returns the style class for a cell.
3813
4020
  * @param row The row for which to return the style class.
@@ -3816,50 +4023,50 @@ class RestWorldTableComponent {
3816
4023
  * @param columnIndex The index of the column.
3817
4024
  * @returns The style class for the cell.
3818
4025
  */
3819
- cellStyleClass = input(() => "");
3820
- cellStyleClasses = computed(() => this.rows().map((r, ri) => Object.fromEntries(this.columns().map((c, ci) => [c.name, this.cellStyleClass()(r, c, ri, ci)]))));
3821
- columns = computed(() => this.searchTemplate()?.properties.filter(p => p.type !== PropertyType.Hidden) ?? []);
3822
- contextMenu = viewChild("contextMenu");
3823
- contextMenuItems = signal([]);
4026
+ cellStyleClass = input(() => "", ...(ngDevMode ? [{ debugName: "cellStyleClass" }] : []));
4027
+ cellStyleClasses = computed(() => this.rows().map((r, ri) => Object.fromEntries(this.columns().map((c, ci) => [c.name, this.cellStyleClass()(r, c, ri, ci)]))), ...(ngDevMode ? [{ debugName: "cellStyleClasses" }] : []));
4028
+ columns = computed(() => this.searchTemplate()?.properties.filter(p => p.type !== PropertyType.Hidden) ?? [], ...(ngDevMode ? [{ debugName: "columns" }] : []));
4029
+ contextMenu = viewChild("contextMenu", ...(ngDevMode ? [{ debugName: "contextMenu" }] : []));
4030
+ contextMenuItems = signal([], ...(ngDevMode ? [{ debugName: "contextMenuItems" }] : []));
3824
4031
  dateFormat = new Date(3333, 10, 22) // months start at 0 in JS
3825
4032
  .toLocaleDateString()
3826
4033
  .replace("22", "dd")
3827
4034
  .replace("11", "MM")
3828
4035
  .replace("3333", "yy")
3829
4036
  .replace("33", "y");
3830
- editProperties = computed(() => this.editTemplate()?.propertiesRecord ?? {});
4037
+ editProperties = computed(() => this.editTemplate()?.propertiesRecord ?? {}, ...(ngDevMode ? [{ debugName: "editProperties" }] : []));
3831
4038
  /**
3832
4039
  * The template that is used to edit the items.
3833
4040
  * Bind this to the template that is used to edit the items.
3834
4041
  * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.
3835
4042
  * For the editing capability, you must also set the apiName and the formArray.
3836
4043
  */
3837
- editTemplate = input();
4044
+ editTemplate = input(...(ngDevMode ? [undefined, { debugName: "editTemplate" }] : []));
3838
4045
  filters = computed(() => {
3839
4046
  const filter = this.oDataParameters().$filter;
3840
4047
  const properties = this.searchTemplate()?.propertiesRecord;
3841
4048
  if (filter === null || filter === undefined || typeof filter !== "string" || properties === undefined)
3842
4049
  return {};
3843
4050
  return ODataService.createFilterMetadataFromODataFilter(filter, properties);
3844
- });
4051
+ }, ...(ngDevMode ? [{ debugName: "filters" }] : []));
3845
4052
  /**
3846
4053
  * The form array that contains the form groups for the items.
3847
4054
  * Bind this to the form array that contains the form groups for the items.
3848
4055
  * Each entry in the array represents one row in the currently displayed page of the table.
3849
4056
  * For the editing capability, you must also set the apiName and the editTemplate.
3850
4057
  */
3851
- formArray = computed(() => this._controlContainer?.control);
4058
+ formArray = computed(() => this._controlContainer?.control, ...(ngDevMode ? [{ debugName: "formArray" }] : []));
3852
4059
  /**
3853
4060
  * An optional menu that is displayed at the top right of the table.
3854
4061
  * @see RestWorldMenuButtonComponent
3855
4062
  */
3856
- headerMenu = input([]);
3857
- isEditable = computed(() => this.editTemplate() !== undefined && this.formArray() !== undefined && this.apiName() !== undefined);
4063
+ headerMenu = input([], ...(ngDevMode ? [{ debugName: "headerMenu" }] : []));
4064
+ isEditable = computed(() => this.editTemplate() !== undefined && this.formArray() !== undefined && this.apiName() !== undefined, ...(ngDevMode ? [{ debugName: "isEditable" }] : []));
3858
4065
  /**
3859
4066
  * Indicates whether the table is currently loading.
3860
4067
  * Set this to true while loading new items from the backend when reacting to the `onFilterOrSortChanged` event.
3861
4068
  */
3862
- isLoading = input(false);
4069
+ isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
3863
4070
  /**
3864
4071
  * Indicates whether the table is lazy loaded.
3865
4072
  * If set to true, sorting and filtering needs to be handled by the `load` event.
@@ -3867,7 +4074,7 @@ class RestWorldTableComponent {
3867
4074
  * The default is `true`.
3868
4075
  * @see load
3869
4076
  */
3870
- lazy = input(true);
4077
+ lazy = input(true, ...(ngDevMode ? [{ debugName: "lazy" }] : []));
3871
4078
  /**
3872
4079
  * Indicates whether the table has a paginator.
3873
4080
  * If set to true, the table will display a paginator at the bottom.
@@ -3876,7 +4083,7 @@ class RestWorldTableComponent {
3876
4083
  * In order to customize the number of rows per page, you can set the `rowsPerPageOptions` property.
3877
4084
  * @see rowsPerPageOptions
3878
4085
  */
3879
- paginator = input(true);
4086
+ paginator = input(true, ...(ngDevMode ? [{ debugName: "paginator" }] : []));
3880
4087
  multiSortMeta = computed(() => {
3881
4088
  const orderBy = this.oDataParameters().$orderby;
3882
4089
  if (orderBy === null || orderBy === undefined || typeof orderBy !== "string")
@@ -3890,13 +4097,13 @@ class RestWorldTableComponent {
3890
4097
  const orderAsNumber = order?.toLowerCase() === "desc" ? -1 : 1;
3891
4098
  return { field: field, order: orderAsNumber };
3892
4099
  });
3893
- });
3894
- oDataParameters = model({});
3895
- reflectParametersInUrl = input(true);
4100
+ }, ...(ngDevMode ? [{ debugName: "multiSortMeta" }] : []));
4101
+ oDataParameters = model({}, ...(ngDevMode ? [{ debugName: "oDataParameters" }] : []));
4102
+ reflectParametersInUrl = input(true, ...(ngDevMode ? [{ debugName: "reflectParametersInUrl" }] : []));
3896
4103
  /**
3897
4104
  * Indicates whether the table rows are highlighted when the mouse hovers over them.
3898
4105
  */
3899
- rowHover = input(false);
4106
+ rowHover = input(false, ...(ngDevMode ? [{ debugName: "rowHover" }] : []));
3900
4107
  /**
3901
4108
  * A function that returns the menu for a row.
3902
4109
  * Based on the openedByRightClick parameter, the function can return different menus.
@@ -3908,80 +4115,80 @@ class RestWorldTableComponent {
3908
4115
  * @see showRowMenuAsColumn
3909
4116
  * @see showRowMenuOnRightClick
3910
4117
  */
3911
- rowMenu = input(() => []);
4118
+ rowMenu = input(() => [], ...(ngDevMode ? [{ debugName: "rowMenu" }] : []));
3912
4119
  rowMenus = computed(() => {
3913
4120
  return this.showRowMenuAsColumn() ? this.rows().map(r => this.rowMenu()(r, false)) : [];
3914
- });
4121
+ }, ...(ngDevMode ? [{ debugName: "rowMenus" }] : []));
3915
4122
  /**
3916
4123
  * A function that returns the style class for a row.
3917
4124
  * @param row The row for which to return the style class.
3918
4125
  * @param rowIndex The index of the row on the currently displayed page.
3919
4126
  * @returns The style class for the row.
3920
4127
  */
3921
- rowStyleClass = input(() => "");
3922
- rowStyleClasses = computed(() => this.rows().map((r, i) => this.rowStyleClass()(r, i)));
4128
+ rowStyleClass = input(() => "", ...(ngDevMode ? [{ debugName: "rowStyleClass" }] : []));
4129
+ rowStyleClasses = computed(() => this.rows().map((r, i) => this.rowStyleClass()(r, i)), ...(ngDevMode ? [{ debugName: "rowStyleClasses" }] : []));
3923
4130
  /**
3924
4131
  * The items that are displayed as table rows.
3925
4132
  * Bind this to the items that are displayed as table rows.
3926
4133
  * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.
3927
4134
  */
3928
- rows = input.required();
3929
- rowsBeforeCurrentPage = computed(() => this.oDataParameters().$skip ?? 0);
4135
+ rows = input.required(...(ngDevMode ? [{ debugName: "rows" }] : []));
4136
+ rowsBeforeCurrentPage = computed(() => this.oDataParameters().$skip ?? 0, ...(ngDevMode ? [{ debugName: "rowsBeforeCurrentPage" }] : []));
3930
4137
  /**
3931
4138
  * The number of rows per page.
3932
4139
  * The default is the first element of rowsPerPageOptions.
3933
4140
  */
3934
- rowsPerPage = computed(() => this.oDataParameters().$top ?? this.rowsPerPageOptions()[0]);
4141
+ rowsPerPage = computed(() => this.oDataParameters().$top ?? this.rowsPerPageOptions()[0], ...(ngDevMode ? [{ debugName: "rowsPerPage" }] : []));
3935
4142
  /**
3936
4143
  * The possible values for the number of rows per page.
3937
4144
  * The default is [10, 25, 50].
3938
4145
  */
3939
- rowsPerPageOptions = input([10, 25, 50]);
4146
+ rowsPerPageOptions = input([10, 25, 50], ...(ngDevMode ? [{ debugName: "rowsPerPageOptions" }] : []));
3940
4147
  /**
3941
4148
  * The height of the scrollable table.
3942
4149
  * The default is "flex".
3943
4150
  */
3944
- scrollHeight = input("flex");
4151
+ scrollHeight = input("flex", ...(ngDevMode ? [{ debugName: "scrollHeight" }] : []));
3945
4152
  /**
3946
4153
  * Indicates whether the table is scrollable.
3947
4154
  * The default is `true`.
3948
4155
  */
3949
- scrollable = input(true);
4156
+ scrollable = input(true, ...(ngDevMode ? [{ debugName: "scrollable" }] : []));
3950
4157
  /**
3951
4158
  * The template that is used to display the table columns and to filter and sort the items.
3952
4159
  * Bind this to the template that is used to display the table columns and to filter and sort the items.
3953
4160
  * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.
3954
4161
  */
3955
- searchTemplate = input.required();
4162
+ searchTemplate = input.required(...(ngDevMode ? [{ debugName: "searchTemplate" }] : []));
3956
4163
  /**
3957
4164
  * The currently selected rows.
3958
4165
  */
3959
- selectedRows = model([]);
4166
+ selectedRows = model([], ...(ngDevMode ? [{ debugName: "selectedRows" }] : []));
3960
4167
  /**
3961
4168
  * The mode how rows can be selected.
3962
4169
  * The default is `null` which means rows cannot be selected.
3963
4170
  */
3964
- selectionMode = input(null);
3965
- showMenuColumn = computed(() => this.headerMenu().length > 0 || (this.showRowMenuAsColumn() && this.rowMenus().some(m => m.length > 0)));
4171
+ selectionMode = input(null, ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
4172
+ showMenuColumn = computed(() => this.headerMenu().length > 0 || (this.showRowMenuAsColumn() && this.rowMenus().some(m => m.length > 0)), ...(ngDevMode ? [{ debugName: "showMenuColumn" }] : []));
3966
4173
  /**
3967
4174
  * Indicates whether the row menu is displayed as a column to the right of the table.
3968
4175
  */
3969
- showRowMenuAsColumn = input(true);
4176
+ showRowMenuAsColumn = input(true, ...(ngDevMode ? [{ debugName: "showRowMenuAsColumn" }] : []));
3970
4177
  /**
3971
4178
  * Indicates whether the row menu is displayed as a context menu when the user right clicks on a row.
3972
4179
  */
3973
- showRowMenuOnRightClick = input(true);
4180
+ showRowMenuOnRightClick = input(true, ...(ngDevMode ? [{ debugName: "showRowMenuOnRightClick" }] : []));
3974
4181
  /**
3975
4182
  * The style class for the table.
3976
4183
  * The default is "".
3977
4184
  */
3978
- styleClass = input("");
4185
+ styleClass = input("", ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
3979
4186
  /**
3980
4187
  * The inline style for the table.
3981
4188
  */
3982
- tableStyle = input();
3983
- totalRecords = input(0);
3984
- urlParameterPrefix = input("");
4189
+ tableStyle = input(...(ngDevMode ? [undefined, { debugName: "tableStyle" }] : []));
4190
+ totalRecords = input(0, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
4191
+ urlParameterPrefix = input("", ...(ngDevMode ? [{ debugName: "urlParameterPrefix" }] : []));
3985
4192
  // private _formArray?: FormArray<FormGroup<{ [K in keyof TListItem]: AbstractControl<unknown> }>>;
3986
4193
  _filterMatchModeOptions;
3987
4194
  timeFormat = new Date(1, 1, 1, 22, 33, 44)
@@ -4134,20 +4341,20 @@ class RestWorldTableComponent {
4134
4341
  prefixObjectProperties(obj, prefix) {
4135
4342
  return Object.fromEntries(Object.entries(obj).map(([key, value]) => [`${prefix}${key}`, value]));
4136
4343
  }
4137
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldTableComponent, deps: [{ token: i2$3.ControlContainer }, { token: i1$1.FormService }, { token: i3$4.Router }, { token: i3$4.ActivatedRoute }, { token: i4$2.PrimeNG }], target: i0.ɵɵFactoryTarget.Component });
4138
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldTableComponent, isStandalone: true, selector: "rw-table", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, cellStyleClass: { classPropertyName: "cellStyleClass", publicName: "cellStyleClass", isSignal: true, isRequired: false, transformFunction: null }, editTemplate: { classPropertyName: "editTemplate", publicName: "editTemplate", isSignal: true, isRequired: false, transformFunction: null }, headerMenu: { classPropertyName: "headerMenu", publicName: "headerMenu", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, oDataParameters: { classPropertyName: "oDataParameters", publicName: "oDataParameters", isSignal: true, isRequired: false, transformFunction: null }, reflectParametersInUrl: { classPropertyName: "reflectParametersInUrl", publicName: "reflectParametersInUrl", isSignal: true, isRequired: false, transformFunction: null }, rowHover: { classPropertyName: "rowHover", publicName: "rowHover", isSignal: true, isRequired: false, transformFunction: null }, rowMenu: { classPropertyName: "rowMenu", publicName: "rowMenu", isSignal: true, isRequired: false, transformFunction: null }, rowStyleClass: { classPropertyName: "rowStyleClass", publicName: "rowStyleClass", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, searchTemplate: { classPropertyName: "searchTemplate", publicName: "searchTemplate", isSignal: true, isRequired: true, transformFunction: null }, selectedRows: { classPropertyName: "selectedRows", publicName: "selectedRows", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuAsColumn: { classPropertyName: "showRowMenuAsColumn", publicName: "showRowMenuAsColumn", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuOnRightClick: { classPropertyName: "showRowMenuOnRightClick", publicName: "showRowMenuOnRightClick", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, urlParameterPrefix: { classPropertyName: "urlParameterPrefix", publicName: "urlParameterPrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { oDataParameters: "oDataParametersChange", selectedRows: "selectedRowsChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-table\n #table\n [value]=\"rows()\"\n [columns]=\"columns()\"\n [lazy]=\"lazy()\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"paginator()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [rows]=\"rowsPerPage()\"\n [totalRecords]=\"totalRecords()\"\n [loading]=\"isLoading()\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta()\"\n [styleClass]=\"styleClass()\"\n [tableStyle]=\"tableStyle()\"\n [scrollable]=\"scrollable()\"\n [scrollHeight]=\"scrollHeight()\"\n [selectionMode]=\"selectionMode()\"\n [rowHover]=\"rowHover()\"\n [(selection)]=\"selectedRows\"\n [filters]=\"$any(filters())\"\n [first]=\"rowsBeforeCurrentPage()\"\n >\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track col) {\n <th [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\n {{col.prompt}}\n @if(!col.readOnly) {\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter #f\n [type]=\"toColumnFilterType(col.type)\"\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\n matchMode=\"noFilter\"\n [matchModeOptions]=\"toMatchModeOptions(col)\"\n [showMatchModes]=\"true\"\n [field]=\"col.name\"\n display=\"menu\"\n [maxConstraints]=\"100\"\n [class.has-filter]=\"f.hasFilter\">\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\n </ng-template>\n </p-columnFilter>\n }\n </div>\n </th>\n }\n @if (showMenuColumn()) {\n <th>\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\n @for (col of columns; track col) {\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\n @let fomrArray = formArray();\n @if (showInputField(col) && fomrArray) {\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\n </ng-container>\n }\n @else {\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\n }\n </td>\n }\n @if (showMenuColumn()) {\n <td>\n @if (showRowMenuAsColumn()) {\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n }\n </td>\n }\n </tr>\n </ng-template>\n</p-table>\n\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"], dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "component", type: RestWorldInputComponent, selector: "rw-input" }, { kind: "component", type: RestWorldDisplayComponent, selector: "rw-display", inputs: ["apiName", "property", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i7.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldTableColumnFilterElementComponent, selector: "rw-table-column-filter-element", inputs: ["filterConstraint", "property", "apiName", "value"] }], viewProviders: [{
4344
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableComponent, deps: [{ token: i2$3.ControlContainer }, { token: i1$1.FormService }, { token: i3$4.Router }, { token: i3$4.ActivatedRoute }, { token: i4$2.PrimeNG }], target: i0.ɵɵFactoryTarget.Component });
4345
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldTableComponent, isStandalone: true, selector: "rw-table", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, cellStyleClass: { classPropertyName: "cellStyleClass", publicName: "cellStyleClass", isSignal: true, isRequired: false, transformFunction: null }, editTemplate: { classPropertyName: "editTemplate", publicName: "editTemplate", isSignal: true, isRequired: false, transformFunction: null }, headerMenu: { classPropertyName: "headerMenu", publicName: "headerMenu", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, oDataParameters: { classPropertyName: "oDataParameters", publicName: "oDataParameters", isSignal: true, isRequired: false, transformFunction: null }, reflectParametersInUrl: { classPropertyName: "reflectParametersInUrl", publicName: "reflectParametersInUrl", isSignal: true, isRequired: false, transformFunction: null }, rowHover: { classPropertyName: "rowHover", publicName: "rowHover", isSignal: true, isRequired: false, transformFunction: null }, rowMenu: { classPropertyName: "rowMenu", publicName: "rowMenu", isSignal: true, isRequired: false, transformFunction: null }, rowStyleClass: { classPropertyName: "rowStyleClass", publicName: "rowStyleClass", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, searchTemplate: { classPropertyName: "searchTemplate", publicName: "searchTemplate", isSignal: true, isRequired: true, transformFunction: null }, selectedRows: { classPropertyName: "selectedRows", publicName: "selectedRows", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuAsColumn: { classPropertyName: "showRowMenuAsColumn", publicName: "showRowMenuAsColumn", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuOnRightClick: { classPropertyName: "showRowMenuOnRightClick", publicName: "showRowMenuOnRightClick", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, urlParameterPrefix: { classPropertyName: "urlParameterPrefix", publicName: "urlParameterPrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { oDataParameters: "oDataParametersChange", selectedRows: "selectedRowsChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-table\r\n #table\r\n [value]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [lazy]=\"lazy()\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"paginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [rows]=\"rowsPerPage()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"isLoading()\"\r\n sortMode=\"multiple\"\r\n [multiSortMeta]=\"multiSortMeta()\"\r\n [styleClass]=\"styleClass()\"\r\n [tableStyle]=\"tableStyle()\"\r\n [scrollable]=\"scrollable()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [rowHover]=\"rowHover()\"\r\n [(selection)]=\"selectedRows\"\r\n [filters]=\"$any(filters())\"\r\n [first]=\"rowsBeforeCurrentPage()\"\r\n >\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track col) {\r\n <th [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\r\n {{col.prompt}}\r\n @if(!col.readOnly) {\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n <p-columnFilter #f\r\n [type]=\"toColumnFilterType(col.type)\"\r\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\r\n matchMode=\"noFilter\"\r\n [matchModeOptions]=\"toMatchModeOptions(col)\"\r\n [showMatchModes]=\"true\"\r\n [field]=\"col.name\"\r\n display=\"menu\"\r\n [maxConstraints]=\"100\"\r\n [class.has-filter]=\"f.hasFilter\">\r\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\r\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (showMenuColumn()) {\r\n <th>\r\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\r\n @for (col of columns; track col) {\r\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\r\n @let fomrArray = formArray();\r\n @if (showInputField(col) && fomrArray) {\r\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\r\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\r\n </ng-container>\r\n }\r\n @else {\r\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\r\n }\r\n </td>\r\n }\r\n @if (showMenuColumn()) {\r\n <td>\r\n @if (showRowMenuAsColumn()) {\r\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"], dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.ColumnFilter, selector: "p-columnFilter, p-column-filter, p-columnfilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "filterOn", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "component", type: RestWorldInputComponent, selector: "rw-input" }, { kind: "component", type: RestWorldDisplayComponent, selector: "rw-display", inputs: ["apiName", "property", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i7.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldTableColumnFilterElementComponent, selector: "rw-table-column-filter-element", inputs: ["filterConstraint", "property", "apiName", "value"] }], viewProviders: [{
4139
4346
  provide: ControlContainer,
4140
4347
  deps: [[Optional, FormArrayName]],
4141
4348
  useFactory: (arrayName) => arrayName,
4142
4349
  }] });
4143
4350
  }
4144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RestWorldTableComponent, decorators: [{
4351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableComponent, decorators: [{
4145
4352
  type: Component,
4146
4353
  args: [{ selector: 'rw-table', standalone: true, viewProviders: [{
4147
4354
  provide: ControlContainer,
4148
4355
  deps: [[Optional, FormArrayName]],
4149
4356
  useFactory: (arrayName) => arrayName,
4150
- }], imports: [TableModule, RestWorldMenuButtonComponent, RestWorldInputComponent, RestWorldDisplayComponent, ReactiveFormsModule, ContextMenuModule, RestWorldTableColumnFilterElementComponent, RestWorldTableColumnFilterElementComponent], template: "<p-table\n #table\n [value]=\"rows()\"\n [columns]=\"columns()\"\n [lazy]=\"lazy()\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"paginator()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [rows]=\"rowsPerPage()\"\n [totalRecords]=\"totalRecords()\"\n [loading]=\"isLoading()\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta()\"\n [styleClass]=\"styleClass()\"\n [tableStyle]=\"tableStyle()\"\n [scrollable]=\"scrollable()\"\n [scrollHeight]=\"scrollHeight()\"\n [selectionMode]=\"selectionMode()\"\n [rowHover]=\"rowHover()\"\n [(selection)]=\"selectedRows\"\n [filters]=\"$any(filters())\"\n [first]=\"rowsBeforeCurrentPage()\"\n >\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track col) {\n <th [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\n {{col.prompt}}\n @if(!col.readOnly) {\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter #f\n [type]=\"toColumnFilterType(col.type)\"\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\n matchMode=\"noFilter\"\n [matchModeOptions]=\"toMatchModeOptions(col)\"\n [showMatchModes]=\"true\"\n [field]=\"col.name\"\n display=\"menu\"\n [maxConstraints]=\"100\"\n [class.has-filter]=\"f.hasFilter\">\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\n </ng-template>\n </p-columnFilter>\n }\n </div>\n </th>\n }\n @if (showMenuColumn()) {\n <th>\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\n @for (col of columns; track col) {\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\n @let fomrArray = formArray();\n @if (showInputField(col) && fomrArray) {\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\n </ng-container>\n }\n @else {\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\n }\n </td>\n }\n @if (showMenuColumn()) {\n <td>\n @if (showRowMenuAsColumn()) {\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n }\n </td>\n }\n </tr>\n </ng-template>\n</p-table>\n\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"] }]
4357
+ }], imports: [TableModule, RestWorldMenuButtonComponent, RestWorldInputComponent, RestWorldDisplayComponent, ReactiveFormsModule, ContextMenuModule, RestWorldTableColumnFilterElementComponent, RestWorldTableColumnFilterElementComponent], template: "<p-table\r\n #table\r\n [value]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [lazy]=\"lazy()\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"paginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [rows]=\"rowsPerPage()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"isLoading()\"\r\n sortMode=\"multiple\"\r\n [multiSortMeta]=\"multiSortMeta()\"\r\n [styleClass]=\"styleClass()\"\r\n [tableStyle]=\"tableStyle()\"\r\n [scrollable]=\"scrollable()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [rowHover]=\"rowHover()\"\r\n [(selection)]=\"selectedRows\"\r\n [filters]=\"$any(filters())\"\r\n [first]=\"rowsBeforeCurrentPage()\"\r\n >\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track col) {\r\n <th [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\r\n {{col.prompt}}\r\n @if(!col.readOnly) {\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n <p-columnFilter #f\r\n [type]=\"toColumnFilterType(col.type)\"\r\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\r\n matchMode=\"noFilter\"\r\n [matchModeOptions]=\"toMatchModeOptions(col)\"\r\n [showMatchModes]=\"true\"\r\n [field]=\"col.name\"\r\n display=\"menu\"\r\n [maxConstraints]=\"100\"\r\n [class.has-filter]=\"f.hasFilter\">\r\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\r\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (showMenuColumn()) {\r\n <th>\r\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\r\n @for (col of columns; track col) {\r\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\r\n @let fomrArray = formArray();\r\n @if (showInputField(col) && fomrArray) {\r\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\r\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\r\n </ng-container>\r\n }\r\n @else {\r\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\r\n }\r\n </td>\r\n }\r\n @if (showMenuColumn()) {\r\n <td>\r\n @if (showRowMenuAsColumn()) {\r\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"] }]
4151
4358
  }], ctorParameters: () => [{ type: i2$3.ControlContainer }, { type: i1$1.FormService }, { type: i3$4.Router }, { type: i3$4.ActivatedRoute }, { type: i4$2.PrimeNG }] });
4152
4359
  var ColumnFilterType;
4153
4360
  (function (ColumnFilterType) {
@@ -4186,10 +4393,10 @@ class AsPipe {
4186
4393
  transform(value, type) {
4187
4394
  return value;
4188
4395
  }
4189
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: AsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
4190
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.6", ngImport: i0, type: AsPipe, isStandalone: true, name: "as" });
4396
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
4397
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: AsPipe, isStandalone: true, name: "as" });
4191
4398
  }
4192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: AsPipe, decorators: [{
4399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AsPipe, decorators: [{
4193
4400
  type: Pipe,
4194
4401
  args: [{
4195
4402
  name: 'as',
@@ -4238,10 +4445,10 @@ class SettingsService {
4238
4445
  await Promise.all(this.settings.apiUrls
4239
4446
  .map(api => this._clients.addOrGetExistingClient(api.name, new RestWorldOptions(api.url, api.version))));
4240
4447
  }
4241
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: SettingsService, deps: [{ token: RestWorldClientCollection }], target: i0.ɵɵFactoryTarget.Injectable });
4242
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: SettingsService, providedIn: 'root' });
4448
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SettingsService, deps: [{ token: RestWorldClientCollection }], target: i0.ɵɵFactoryTarget.Injectable });
4449
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SettingsService, providedIn: 'root' });
4243
4450
  }
4244
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: SettingsService, decorators: [{
4451
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SettingsService, decorators: [{
4245
4452
  type: Injectable,
4246
4453
  args: [{
4247
4454
  providedIn: 'root'
@@ -4260,86 +4467,147 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
4260
4467
  */
4261
4468
  class OpenTelemetryService {
4262
4469
  _settingsService;
4263
- _defaultInputConfigs = {
4264
- "@opentelemetry/instrumentation-xml-http-request": {
4265
- propagateTraceHeaderCorsUrls: /.*/,
4266
- applyCustomAttributesOnSpan: (span, xhr) => {
4267
- span.setAttribute("client.address", window.location.href);
4268
- span.setAttribute("client.port", window.location.port);
4269
- span.setAttribute("browser.language", navigator.language);
4270
- if (URL.canParse(xhr.responseURL)) {
4271
- const url = new URL(xhr.responseURL);
4272
- span.setAttribute("url.domain", url.hostname);
4273
- span.setAttribute("url.full", url.href);
4274
- span.setAttribute("url.path", url.pathname);
4275
- span.setAttribute("url.port", url.port);
4276
- span.setAttribute("url.scheme", url.protocol.replace(":", ""));
4277
- if (url.search)
4278
- span.setAttribute("url.query", url.search.replace("?", ""));
4279
- if ("name" in span && typeof span.name === "string") {
4280
- span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
4281
- }
4282
- }
4283
- }
4284
- },
4285
- "@opentelemetry/instrumentation-fetch": {
4286
- propagateTraceHeaderCorsUrls: /.*/,
4287
- applyCustomAttributesOnSpan: (span, request) => {
4288
- span.setAttribute("client.address", window.location.href);
4289
- span.setAttribute("client.port", window.location.port);
4290
- span.setAttribute("browser.language", navigator.language);
4291
- if ("url" in request && typeof request.url === "string" && URL.canParse(request.url)) {
4292
- const url = new URL(request.url);
4293
- span.setAttribute("url.domain", url.hostname);
4294
- span.setAttribute("url.full", url.href);
4295
- span.setAttribute("url.path", url.pathname);
4296
- span.setAttribute("url.port", url.port);
4297
- span.setAttribute("url.scheme", url.protocol.replace(":", ""));
4298
- if (url.search)
4299
- span.setAttribute("url.query", url.search.replace("?", ""));
4300
- if ("name" in span && typeof span.name === "string") {
4301
- span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
4302
- }
4303
- }
4304
- }
4305
- },
4306
- "@opentelemetry/instrumentation-user-interaction": {
4307
- enabled: false,
4308
- shouldPreventSpanCreation: (eventType, element, span) => {
4309
- const shouldCreate = this._lastLocation !== window.location.href ||
4310
- Date.now() - this._lastTime > 1000 ||
4311
- this._lastElement !== element ||
4312
- //(eventType === "click" && (element.tagName === "A" || element.tagName === "Button")) ||
4313
- (eventType === "submit");
4314
- if (shouldCreate) {
4315
- this._lastLocation = window.location.href;
4316
- this._lastTime = Date.now();
4317
- this._lastElement = element;
4318
- }
4319
- return !shouldCreate;
4320
- }
4321
- }
4322
- };
4323
- _lastElement = null;
4324
- _lastTime = 0;
4325
- _lastLocation = null;
4326
- constructor(_settingsService) {
4470
+ _router;
4471
+ _tracer;
4472
+ _activeNavigationSpan = null;
4473
+ _lastNavigationPath = null;
4474
+ constructor(_settingsService, _router) {
4327
4475
  this._settingsService = _settingsService;
4476
+ this._router = _router;
4477
+ // Listen for navigation events to create parent spans
4478
+ this._router.events
4479
+ .pipe(filter(event => event instanceof NavigationEnd))
4480
+ .subscribe((event) => {
4481
+ this.createNavigationSpan(event.urlAfterRedirects);
4482
+ });
4483
+ // Listen for beforeunload event to end the span when user leaves the application
4484
+ window.addEventListener('beforeunload', () => {
4485
+ this.endCurrentNavigationSpan();
4486
+ });
4328
4487
  }
4329
- async initialize(configureOptions) {
4488
+ /**
4489
+ * Sets the current span as active in the global context
4490
+ * This ensures that new spans created after this will automatically
4491
+ * become child spans of this active span
4492
+ */
4493
+ activateNavigationContext() {
4494
+ if (this._activeNavigationSpan) {
4495
+ // Make this span the active span in the current context
4496
+ const activeContext = trace.setSpan(context.active(), this._activeNavigationSpan);
4497
+ // Use ZoneContextManager to persist this context across async operations
4498
+ // This is important for Angular applications that use zones
4499
+ context.with(activeContext, () => {
4500
+ // The context remains active for all operations within this callback
4501
+ // and for all asynchronous operations started within this zone
4502
+ // Set the context as a property in the window for access by other parts of the application
4503
+ // This helps ensure the context is available for all operations
4504
+ window.__navigationContext = activeContext;
4505
+ });
4506
+ }
4507
+ }
4508
+ /**
4509
+ * Creates a new span to track a navigation event.
4510
+ * This will be the parent span for any HTTP requests made during this navigation.
4511
+ * Only creates a new span if the path has changed from the last navigation.
4512
+ * @param url The URL being navigated to
4513
+ */
4514
+ createNavigationSpan(url) {
4515
+ // Parse the URL to extract route information
4516
+ let routePath = 'unknown';
4517
+ try {
4518
+ const urlObj = new URL(url, window.location.origin);
4519
+ routePath = urlObj.pathname;
4520
+ }
4521
+ catch (e) {
4522
+ routePath = url; // Use the raw URL if parsing fails
4523
+ }
4524
+ // If the path hasn't changed, don't create a new span
4525
+ if (this._lastNavigationPath === routePath) {
4526
+ return;
4527
+ }
4528
+ // Update the last navigation path
4529
+ this._lastNavigationPath = routePath;
4530
+ // End the previous span if it exists
4531
+ if (this._activeNavigationSpan) {
4532
+ this._activeNavigationSpan.end();
4533
+ this._activeNavigationSpan = null;
4534
+ }
4535
+ if (!this._tracer) {
4536
+ return; // Not initialized yet
4537
+ }
4538
+ // Create a new span for this navigation
4539
+ this._activeNavigationSpan = this._tracer.startSpan(`Navigation to ${routePath}`, {
4540
+ kind: SpanKind.INTERNAL,
4541
+ attributes: {
4542
+ 'component': 'router',
4543
+ 'route.path': routePath,
4544
+ 'client.address': window.location.href,
4545
+ 'client.port': window.location.port,
4546
+ 'browser.language': navigator.language
4547
+ }
4548
+ });
4549
+ // Activate this navigation span as the current context
4550
+ this.activateNavigationContext();
4551
+ }
4552
+ async initialize() {
4330
4553
  await this._settingsService.ensureInitialized();
4331
4554
  const clientSettings = this._settingsService.settings;
4332
4555
  if (!clientSettings)
4333
- throw new Error('Settings are not loaded yet.');
4334
- const exporterEndpoint = clientSettings.extensions["OTEL_EXPORTER_OTLP_ENDPOINT"];
4335
- const exporterHeaders = clientSettings.extensions["OTEL_EXPORTER_OTLP_HEADERS"];
4556
+ throw new Error('Client Settings are not loaded yet.');
4557
+ if (!clientSettings.extensions)
4558
+ throw new Error('Client Settings do not contain extensions.');
4559
+ const sampler = OpenTelemetryService.GetSampler(clientSettings);
4560
+ const spanProcessors = OpenTelemetryService.GetSpanProcessors(clientSettings);
4561
+ const resource = OpenTelemetryService.GetResource(clientSettings);
4562
+ const provider = new WebTracerProvider({
4563
+ sampler: sampler,
4564
+ spanProcessors: spanProcessors,
4565
+ resource: resource,
4566
+ });
4567
+ provider.register({
4568
+ // Changing default contextManager to use ZoneContextManager - supports asynchronous operations - optional
4569
+ contextManager: new ZoneContextManager(),
4570
+ });
4571
+ // Get a tracer from the provider
4572
+ this._tracer = provider.getTracer('angular-navigation-tracer');
4573
+ // Create the initial navigation span based on the current URL
4574
+ if (this._router && this._router.url) {
4575
+ this.createNavigationSpan(this._router.url);
4576
+ }
4577
+ }
4578
+ /**
4579
+ * Ends the current navigation span if one exists.
4580
+ * This can be called when the user is leaving the application or when
4581
+ * special navigation events happen that should terminate the current span.
4582
+ */
4583
+ endCurrentNavigationSpan() {
4584
+ if (this._activeNavigationSpan) {
4585
+ this._activeNavigationSpan.end();
4586
+ this._activeNavigationSpan = null;
4587
+ this._lastNavigationPath = null; // Reset the last navigation path when ending the span manually
4588
+ }
4589
+ }
4590
+ static GetResource(clientSettings) {
4336
4591
  const serviceName = clientSettings.extensions["OTEL_SERVICE_NAME"];
4337
4592
  const resourceAttributes = clientSettings.extensions["OTEL_RESOURCE_ATTRIBUTES"];
4338
- const tracesSampler = clientSettings.extensions["OTEL_TRACES_SAMPLER"];
4339
- const tracesSamplerArg = clientSettings.extensions["OTEL_TRACES_SAMPLER_ARG"];
4340
- const provider = new WebTracerProvider({ sampler: OpenTelemetryService.GetSampler(tracesSampler, tracesSamplerArg) });
4593
+ const resource = resourceFromAttributes({});
4594
+ if (resourceAttributes) {
4595
+ resourceAttributes
4596
+ .split(",")
4597
+ .map((attribute) => {
4598
+ const [key, value] = attribute.split("=");
4599
+ resource.attributes[key] = value;
4600
+ });
4601
+ }
4602
+ if (serviceName)
4603
+ resource.attributes[ATTR_SERVICE_NAME] = serviceName;
4604
+ return resource;
4605
+ }
4606
+ static GetSpanProcessors(clientSettings) {
4607
+ const exporterEndpoint = clientSettings.extensions["OTEL_EXPORTER_OTLP_ENDPOINT"];
4608
+ const exporterHeaders = clientSettings.extensions["OTEL_EXPORTER_OTLP_HEADERS"];
4341
4609
  if (!exporterEndpoint)
4342
- provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
4610
+ return [new SimpleSpanProcessor(new ConsoleSpanExporter())];
4343
4611
  else {
4344
4612
  let headersObj = {};
4345
4613
  if (exporterHeaders) {
@@ -4356,41 +4624,12 @@ class OpenTelemetryService {
4356
4624
  headers: headersObj,
4357
4625
  compression: "gzip",
4358
4626
  };
4359
- provider.addSpanProcessor(new BatchSpanProcessor(new OTLPTraceExporter(otlpExporterConfiguration)));
4360
- }
4361
- provider.register({
4362
- // Changing default contextManager to use ZoneContextManager - supports asynchronous operations - optional
4363
- contextManager: new ZoneContextManager(),
4364
- });
4365
- if (resourceAttributes) {
4366
- resourceAttributes
4367
- .split(",")
4368
- .map((attribute) => {
4369
- const [key, value] = attribute.split("=");
4370
- provider.resource.attributes[key] = value;
4371
- });
4372
- }
4373
- if (serviceName)
4374
- provider.resource.attributes['service.name'] = serviceName;
4375
- // apply given options
4376
- let config;
4377
- if (typeof configureOptions === 'function') {
4378
- config = configureOptions(this._defaultInputConfigs);
4379
- }
4380
- else if (typeof configureOptions === 'object') {
4381
- config = configureOptions;
4382
- }
4383
- else {
4384
- config = this._defaultInputConfigs;
4627
+ return [new BatchSpanProcessor(new OTLPTraceExporter(otlpExporterConfiguration))];
4385
4628
  }
4386
- // Registering instrumentations
4387
- registerInstrumentations({
4388
- instrumentations: [
4389
- getWebAutoInstrumentations(config),
4390
- ]
4391
- });
4392
4629
  }
4393
- static GetSampler(tracesSampler, tracesSamplerArg) {
4630
+ static GetSampler(clientSettings) {
4631
+ const tracesSampler = clientSettings.extensions["OTEL_TRACES_SAMPLER"];
4632
+ const tracesSamplerArg = clientSettings.extensions["OTEL_TRACES_SAMPLER_ARG"];
4394
4633
  switch (tracesSampler) {
4395
4634
  case "always_on":
4396
4635
  return new AlwaysOnSampler();
@@ -4410,15 +4649,35 @@ class OpenTelemetryService {
4410
4649
  return new AlwaysOnSampler();
4411
4650
  }
4412
4651
  }
4413
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: OpenTelemetryService, deps: [{ token: SettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
4414
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: OpenTelemetryService, providedIn: "root" });
4652
+ /**
4653
+ * Gets the active context that contains the current navigation span.
4654
+ * This is used by the HttpInterceptor to ensure HttpClient requests are
4655
+ * properly associated with the current navigation span.
4656
+ * @returns The active context, or null if no navigation span exists
4657
+ */
4658
+ getActiveContext() {
4659
+ if (this._activeNavigationSpan) {
4660
+ // Create a context with the active navigation span
4661
+ return trace.setSpan(context.active(), this._activeNavigationSpan);
4662
+ }
4663
+ return null;
4664
+ }
4665
+ /**
4666
+ * Gets the OpenTelemetry tracer instance for creating spans
4667
+ * @returns The tracer instance or undefined if not initialized
4668
+ */
4669
+ getTracer() {
4670
+ return this._tracer;
4671
+ }
4672
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryService, deps: [{ token: SettingsService }, { token: i3$4.Router }], target: i0.ɵɵFactoryTarget.Injectable });
4673
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryService, providedIn: "root" });
4415
4674
  }
4416
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: OpenTelemetryService, decorators: [{
4675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryService, decorators: [{
4417
4676
  type: Injectable,
4418
4677
  args: [{
4419
4678
  providedIn: "root"
4420
4679
  }]
4421
- }], ctorParameters: () => [{ type: SettingsService }] });
4680
+ }], ctorParameters: () => [{ type: SettingsService }, { type: i3$4.Router }] });
4422
4681
 
4423
4682
  /**
4424
4683
  * Component for editing a resource in the RESTworld application.
@@ -4457,20 +4716,20 @@ class RESTworldEditViewComponent {
4457
4716
  /**
4458
4717
  * The relation to load the resource from.
4459
4718
  */
4460
- rel = input.required();
4719
+ rel = input.required(...(ngDevMode ? [{ debugName: "rel" }] : []));
4461
4720
  /**
4462
4721
  * The URI of the resource to load.
4463
4722
  */
4464
- uri = input.required();
4723
+ uri = input.required(...(ngDevMode ? [{ debugName: "uri" }] : []));
4465
4724
  /**
4466
4725
  * The name of the API to load the resource from.
4467
4726
  */
4468
- apiName = input.required();
4727
+ apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
4469
4728
  templates = resource({
4470
- request: () => ({ apiName: this.apiName(), uri: this.uri() }),
4471
- loader: ({ request }) => this.loadInternal(request.apiName, request.uri)
4729
+ params: () => ({ apiName: this.apiName(), uri: this.uri() }),
4730
+ loader: ({ params }) => this.loadInternal(params.apiName, params.uri)
4472
4731
  });
4473
- displayTab = model("Loading");
4732
+ displayTab = model("Loading", ...(ngDevMode ? [{ debugName: "displayTab" }] : []));
4474
4733
  async afterSubmit($event) {
4475
4734
  if ($event.status == 201) {
4476
4735
  await this._router.navigate(["edit", this.apiName(), this.rel(), $event.location]);
@@ -4482,40 +4741,41 @@ class RESTworldEditViewComponent {
4482
4741
  async loadInternal(apiName, uri) {
4483
4742
  if (!apiName || !uri)
4484
4743
  return [];
4485
- const client = this._clients.getClient(apiName);
4486
- const response = await client.getSingleByUri(uri);
4487
- if (!response.ok || ProblemDetails.isProblemDetails(response.body) || response.body === null) {
4488
- if (ProblemDetails.isProblemDetails(response.body))
4489
- this._messageService.add({ severity: "error", summary: "Error", detail: response.body.detail, data: response, sticky: true });
4490
- else
4491
- this._messageService.add({ severity: "error", summary: "Error", detail: "Error while loading the resource from the API.", data: response, sticky: true });
4492
- }
4493
- else {
4494
- const templates = await this.getAllTemplates(response.body, apiName);
4744
+ try {
4745
+ const client = this._clients.getClient(apiName);
4746
+ const templatesOrProblemDetails = await client.getAllTemplatesByUri(uri);
4747
+ // Check if we got ProblemDetails instead of Templates
4748
+ if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {
4749
+ this._messageService.add({
4750
+ severity: "error",
4751
+ summary: "Error",
4752
+ detail: `Error from API: ${templatesOrProblemDetails.title} - ${templatesOrProblemDetails.detail}`,
4753
+ data: templatesOrProblemDetails,
4754
+ sticky: true
4755
+ });
4756
+ return [];
4757
+ }
4758
+ // Process the templates
4759
+ const templates = templatesOrProblemDetails;
4495
4760
  const templateArray = Object.values(templates).filter((t) => t !== undefined);
4496
4761
  if (templateArray.length > 0)
4497
4762
  this.displayTab.set(templateArray[0].title);
4498
4763
  return templateArray;
4499
4764
  }
4500
- return [];
4501
- }
4502
- async getAllTemplates(resource, apiName) {
4503
- try {
4504
- const client = this._clients.getClient(apiName);
4505
- const templates = await client.getAllTemplates(resource);
4506
- return templates;
4507
- }
4508
4765
  catch (e) {
4509
- this._messageService.add({ severity: "error", summary: "Error", detail: "Error while loading the templates from the API. " + e, data: e, sticky: true });
4510
- return {};
4766
+ if (e instanceof Error)
4767
+ this._messageService.add({ severity: "error", summary: "Error", detail: "Error while loading the templates from the API. " + e.message, data: e, sticky: true });
4768
+ else
4769
+ this._messageService.add({ severity: "error", summary: "Error", detail: "Error while loading the templates from the API. " + e, data: e, sticky: true });
4770
+ return [];
4511
4771
  }
4512
4772
  }
4513
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RESTworldEditViewComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.MessageService }, { token: i3$4.Router }, { token: i4$3.ValdemortConfig }], target: i0.ɵɵFactoryTarget.Component });
4514
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RESTworldEditViewComponent, isStandalone: true, selector: "rw-edit", inputs: { rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, uri: { classPropertyName: "uri", publicName: "uri", isSignal: true, isRequired: true, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, displayTab: { classPropertyName: "displayTab", publicName: "displayTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { displayTab: "displayTabChange" }, queries: [{ propertyName: "extraTabsRef", first: true, predicate: ["extraTabs"], descendants: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:fit-content!important}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"], dependencies: [{ kind: "component", type: RestWorldIdNavigationComponent, selector: "rw-id-navigation", inputs: ["apiName", "rel", "urlPrefix"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i5$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i6$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i6$1.TabPanel, selector: "p-tabpanel", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabList, selector: "p-tablist" }, { kind: "component", type: i6$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: RestWorldFormComponent, selector: "rw-form", inputs: ["allowDelete", "allowReload", "allowSubmit", "apiName", "rel", "showDelete", "showReload", "showSubmit", "template"], outputs: ["afterDelete", "afterSubmit", "templateChange", "valueChanges"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i7$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }] });
4773
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldEditViewComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.MessageService }, { token: i3$4.Router }, { token: i4$3.ValdemortConfig }], target: i0.ɵɵFactoryTarget.Component });
4774
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RESTworldEditViewComponent, isStandalone: true, selector: "rw-edit", inputs: { rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, uri: { classPropertyName: "uri", publicName: "uri", isSignal: true, isRequired: true, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, displayTab: { classPropertyName: "displayTab", publicName: "displayTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { displayTab: "displayTabChange" }, queries: [{ propertyName: "extraTabsRef", first: true, predicate: ["extraTabs"], descendants: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:fit-content!important}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"], dependencies: [{ kind: "component", type: RestWorldIdNavigationComponent, selector: "rw-id-navigation", inputs: ["apiName", "rel", "urlPrefix"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i5$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i6$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i6$1.TabPanel, selector: "p-tabpanel", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabList, selector: "p-tablist" }, { kind: "component", type: i6$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: RestWorldFormComponent, selector: "rw-form", inputs: ["allowDelete", "allowReload", "allowSubmit", "apiName", "rel", "showDelete", "showReload", "showSubmit", "template"], outputs: ["afterDelete", "afterSubmit", "templateChange", "valueChanges"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i7$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
4515
4775
  }
4516
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RESTworldEditViewComponent, decorators: [{
4776
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldEditViewComponent, decorators: [{
4517
4777
  type: Component,
4518
- args: [{ selector: "rw-edit", standalone: true, imports: [RestWorldIdNavigationComponent, SkeletonModule, TabsModule, RestWorldFormComponent, ConfirmDialogModule], template: "<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:fit-content!important}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"] }]
4778
+ args: [{ selector: "rw-edit", standalone: true, imports: [RestWorldIdNavigationComponent, SkeletonModule, TabsModule, RestWorldFormComponent, ConfirmDialogModule, NgTemplateOutlet], template: "<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:fit-content!important}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"] }]
4519
4779
  }], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.MessageService }, { type: i3$4.Router }, { type: i4$3.ValdemortConfig }], propDecorators: { extraTabsRef: [{
4520
4780
  type: ContentChild,
4521
4781
  args: ["extraTabs", { static: false }]
@@ -4556,12 +4816,12 @@ class RESTworldListViewComponent {
4556
4816
  * An array of menu items to be displayed in the create button dropdown menu.
4557
4817
  * That is the menu at the top right of the list.
4558
4818
  */
4559
- createButtonMenu = input();
4560
- isLoading = computed(() => this.listResource.isLoading() || this.searchTemplate.isLoading());
4561
- filter = model(undefined, { alias: "$filter" });
4562
- orderby = model(undefined, { alias: "$orderby" });
4563
- skip = model(undefined, { alias: "$skip" });
4564
- top = model(undefined, { alias: "$top" });
4819
+ createButtonMenu = input(...(ngDevMode ? [undefined, { debugName: "createButtonMenu" }] : []));
4820
+ isLoading = computed(() => this.listResource.isLoading() || this.searchTemplate.isLoading(), ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
4821
+ filter = model(undefined, ...(ngDevMode ? [{ debugName: "filter", alias: "$filter" }] : [{ alias: "$filter" }]));
4822
+ orderby = model(undefined, ...(ngDevMode ? [{ debugName: "orderby", alias: "$orderby" }] : [{ alias: "$orderby" }]));
4823
+ skip = model(undefined, ...(ngDevMode ? [{ debugName: "skip", alias: "$skip" }] : [{ alias: "$skip" }]));
4824
+ top = model(undefined, ...(ngDevMode ? [{ debugName: "top", alias: "$top" }] : [{ alias: "$top" }]));
4565
4825
  oDataParameters = linkedSignal(() => {
4566
4826
  const parameters = {
4567
4827
  $filter: this.filter(),
@@ -4576,7 +4836,7 @@ class RESTworldListViewComponent {
4576
4836
  * Use it if you want to use a custom edit view instead of the default `RESTworldEditViewComponent`.
4577
4837
  * @param value The new value for the edit link URL.
4578
4838
  */
4579
- editLink = input("/edit", { transform: (value) => value ?? "/edit" });
4839
+ editLink = input("/edit", ...(ngDevMode ? [{ debugName: "editLink", transform: (value) => value ?? "/edit" }] : [{ transform: (value) => value ?? "/edit" }]));
4580
4840
  headerMenu = computed(() => [
4581
4841
  {
4582
4842
  icon: "fas fa-plus",
@@ -4584,7 +4844,7 @@ class RESTworldListViewComponent {
4584
4844
  routerLink: [this.editLink(), this.apiName(), this.rel(), this.newHref()],
4585
4845
  items: this.createButtonMenu()
4586
4846
  }
4587
- ]);
4847
+ ], ...(ngDevMode ? [{ debugName: "headerMenu" }] : []));
4588
4848
  rowMenu = computed(() => (row, openedByRightClick) => {
4589
4849
  return [
4590
4850
  {
@@ -4602,7 +4862,7 @@ class RESTworldListViewComponent {
4602
4862
  command: () => this.showDeleteConfirmatioModal(row)
4603
4863
  }
4604
4864
  ];
4605
- });
4865
+ }, ...(ngDevMode ? [{ debugName: "rowMenu" }] : []));
4606
4866
  static _emptylistResource = new PagedListResource({ _embedded: { items: [] }, _links: { self: [] } });
4607
4867
  static _emptySearchTemplate = new Template({ properties: [] });
4608
4868
  constructor(_clients, _confirmationService, _messageService, avatarGenerator, _router, _problemService) {
@@ -4620,14 +4880,14 @@ class RESTworldListViewComponent {
4620
4880
  * Sets the name of the API to load and triggers a reload of the data.
4621
4881
  * @param value The name of the API to load.
4622
4882
  */
4623
- apiName = input();
4883
+ apiName = input(...(ngDevMode ? [undefined, { debugName: "apiName" }] : []));
4624
4884
  /**
4625
4885
  * Sets the rel value for the RESTWorld list view component.
4626
4886
  * @param value The new rel value to set.
4627
4887
  */
4628
- rel = input();
4629
- newHref = computed(() => this.listResource.value()?.findLink('new')?.href);
4630
- items = computed(() => this.listResource.value()?._embedded.items || []);
4888
+ rel = input(...(ngDevMode ? [undefined, { debugName: "rel" }] : []));
4889
+ newHref = computed(() => this.listResource.value()?.findLink('new')?.href, ...(ngDevMode ? [{ debugName: "newHref" }] : []));
4890
+ items = computed(() => this.listResource.value()?._embedded.items || [], ...(ngDevMode ? [{ debugName: "items" }] : []));
4631
4891
  createNew() {
4632
4892
  return this._router.navigate([this.editLink, this.apiName, this.rel, this.newHref]);
4633
4893
  }
@@ -4644,12 +4904,12 @@ class RESTworldListViewComponent {
4644
4904
  }
4645
4905
  }
4646
4906
  listResource = resource({
4647
- request: () => ({ oDataParameters: this.oDataParameters(), rel: this.rel() }),
4648
- loader: async ({ request }) => {
4907
+ params: () => ({ oDataParameters: this.oDataParameters(), rel: this.rel() }),
4908
+ loader: async ({ params }) => {
4649
4909
  const client = this._client();
4650
- if (request.rel === undefined || client === undefined)
4910
+ if (params.rel === undefined || client === undefined)
4651
4911
  return RESTworldListViewComponent._emptylistResource;
4652
- const response = await client.getList(request.rel, request.oDataParameters);
4912
+ const response = await client.getList(params.rel, params.oDataParameters);
4653
4913
  if (this._problemService.checkResponseAndDisplayErrors(response, undefined, "Error while loading the resources from the API.", "Error")) {
4654
4914
  return response.body;
4655
4915
  }
@@ -4663,22 +4923,29 @@ class RESTworldListViewComponent {
4663
4923
  const totalPages = listResource?.totalPages ?? 1;
4664
4924
  const totalRecords = totalPages * rowsPerPage;
4665
4925
  return totalRecords;
4666
- });
4926
+ }, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
4667
4927
  searchTemplate = resource({
4668
- request: () => ({ resource: this.listResource.value() }),
4669
- loader: async ({ request }) => {
4928
+ params: () => ({ resource: this.listResource.value() }),
4929
+ loader: async ({ params }) => {
4670
4930
  const client = this._client();
4671
- if (request.resource === undefined || client === undefined)
4931
+ if (params.resource === undefined || client === undefined)
4672
4932
  return RESTworldListViewComponent._emptySearchTemplate;
4673
4933
  // We only want to load the template once
4674
4934
  const currentSearchTemplate = this.searchTemplate.value();
4675
4935
  if (currentSearchTemplate !== undefined && currentSearchTemplate !== RESTworldListViewComponent._emptySearchTemplate)
4676
4936
  return currentSearchTemplate;
4937
+ // return RESTworldListViewComponent._emptySearchTemplate;
4677
4938
  try {
4678
- const templates = await client.getAllTemplates(request.resource);
4939
+ const templates = await client.getAllTemplates(params.resource);
4940
+ if (ProblemDetails.isProblemDetails(templates)) {
4941
+ this._messageService.add({ severity: 'error', summary: 'Error', detail: `No templates found in the API response.`, data: templates });
4942
+ return RESTworldListViewComponent._emptySearchTemplate;
4943
+ }
4679
4944
  const searchTemplate = templates["Search"];
4680
- if (searchTemplate === undefined)
4681
- throw new Error("No search template found in the API response.");
4945
+ if (searchTemplate === undefined) {
4946
+ this._messageService.add({ severity: 'error', summary: 'Error', detail: `No "Search" template found in the API response.`, data: templates });
4947
+ return RESTworldListViewComponent._emptySearchTemplate;
4948
+ }
4682
4949
  return searchTemplate;
4683
4950
  }
4684
4951
  catch (e) {
@@ -4700,15 +4967,147 @@ class RESTworldListViewComponent {
4700
4967
  if (apiName === undefined)
4701
4968
  return undefined;
4702
4969
  return this._clients.getClient(apiName);
4703
- });
4704
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.ConfirmationService }, { token: i2$1.MessageService }, { token: AvatarGenerator }, { token: i3$4.Router }, { token: ProblemService }], target: i0.ɵɵFactoryTarget.Component });
4705
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RESTworldListViewComponent, isStandalone: true, selector: "rw-list", inputs: { createButtonMenu: { classPropertyName: "createButtonMenu", publicName: "createButtonMenu", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "$filter", isSignal: true, isRequired: false, transformFunction: null }, orderby: { classPropertyName: "orderby", publicName: "$orderby", isSignal: true, isRequired: false, transformFunction: null }, skip: { classPropertyName: "skip", publicName: "$skip", isSignal: true, isRequired: false, transformFunction: null }, top: { classPropertyName: "top", publicName: "$top", isSignal: true, isRequired: false, transformFunction: null }, editLink: { classPropertyName: "editLink", publicName: "editLink", isSignal: true, isRequired: false, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: false, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "$filterChange", orderby: "$orderbyChange", skip: "$skipChange", top: "$topChange" }, ngImport: i0, template: "@let search = searchTemplate.value();\r\n@let api = apiName();\r\n@if (search && api) {\r\n <rw-table\r\n [apiName]=\"api\"\r\n [searchTemplate]=\"search\"\r\n [rows]=\"items()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [isLoading]=\"isLoading()\"\r\n >\r\n </rw-table>\r\n}\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "component", type: RestWorldTableComponent, selector: "rw-table", inputs: ["apiName", "cellStyleClass", "editTemplate", "headerMenu", "isLoading", "lazy", "paginator", "oDataParameters", "reflectParametersInUrl", "rowHover", "rowMenu", "rowStyleClass", "rows", "rowsPerPageOptions", "scrollHeight", "scrollable", "searchTemplate", "selectedRows", "selectionMode", "showRowMenuAsColumn", "showRowMenuOnRightClick", "styleClass", "tableStyle", "totalRecords", "urlParameterPrefix"], outputs: ["oDataParametersChange", "selectedRowsChange"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i7$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }] });
4970
+ }, ...(ngDevMode ? [{ debugName: "_client" }] : []));
4971
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.ConfirmationService }, { token: i2$1.MessageService }, { token: AvatarGenerator }, { token: i3$4.Router }, { token: ProblemService }], target: i0.ɵɵFactoryTarget.Component });
4972
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RESTworldListViewComponent, isStandalone: true, selector: "rw-list", inputs: { createButtonMenu: { classPropertyName: "createButtonMenu", publicName: "createButtonMenu", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "$filter", isSignal: true, isRequired: false, transformFunction: null }, orderby: { classPropertyName: "orderby", publicName: "$orderby", isSignal: true, isRequired: false, transformFunction: null }, skip: { classPropertyName: "skip", publicName: "$skip", isSignal: true, isRequired: false, transformFunction: null }, top: { classPropertyName: "top", publicName: "$top", isSignal: true, isRequired: false, transformFunction: null }, editLink: { classPropertyName: "editLink", publicName: "editLink", isSignal: true, isRequired: false, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: false, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "$filterChange", orderby: "$orderbyChange", skip: "$skipChange", top: "$topChange" }, ngImport: i0, template: "@let search = searchTemplate.value();\r\n@let api = apiName();\r\n@if (search && api) {\r\n <rw-table\r\n [apiName]=\"api\"\r\n [searchTemplate]=\"search\"\r\n [rows]=\"items()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [isLoading]=\"isLoading()\"\r\n >\r\n </rw-table>\r\n}\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "component", type: RestWorldTableComponent, selector: "rw-table", inputs: ["apiName", "cellStyleClass", "editTemplate", "headerMenu", "isLoading", "lazy", "paginator", "oDataParameters", "reflectParametersInUrl", "rowHover", "rowMenu", "rowStyleClass", "rows", "rowsPerPageOptions", "scrollHeight", "scrollable", "searchTemplate", "selectedRows", "selectionMode", "showRowMenuAsColumn", "showRowMenuOnRightClick", "styleClass", "tableStyle", "totalRecords", "urlParameterPrefix"], outputs: ["oDataParametersChange", "selectedRowsChange"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i7$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }] });
4706
4973
  }
4707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
4974
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
4708
4975
  type: Component,
4709
4976
  args: [{ selector: 'rw-list', standalone: true, imports: [RestWorldTableComponent, ConfirmDialogModule], template: "@let search = searchTemplate.value();\r\n@let api = apiName();\r\n@if (search && api) {\r\n <rw-table\r\n [apiName]=\"api\"\r\n [searchTemplate]=\"search\"\r\n [rows]=\"items()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [isLoading]=\"isLoading()\"\r\n >\r\n </rw-table>\r\n}\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
4710
4977
  }], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.ConfirmationService }, { type: i2$1.MessageService }, { type: AvatarGenerator }, { type: i3$4.Router }, { type: ProblemService }] });
4711
4978
 
4979
+ /**
4980
+ * This is an HttpInterceptor that ensures all HttpClient requests
4981
+ * are properly associated with the current navigation span.
4982
+ */
4983
+ class OpenTelemetryHttpInterceptor {
4984
+ _telemetryService;
4985
+ constructor(_telemetryService) {
4986
+ this._telemetryService = _telemetryService;
4987
+ }
4988
+ intercept(request, next) {
4989
+ // Get the active context from the OpenTelemetryService
4990
+ const activeContext = this._telemetryService.getActiveContext();
4991
+ // If we have an active navigation context, create a child span for this HTTP request
4992
+ if (activeContext && this._telemetryService.getTracer()) {
4993
+ // Execute within the active context to ensure proper parenting
4994
+ return context.with(activeContext, () => {
4995
+ // Extract span information from the request
4996
+ const url = new URL(request.url, window.location.origin);
4997
+ const method = request.method;
4998
+ const spanName = `${method} ${url.pathname}`;
4999
+ // Get tracer from the telemetry service to create a span
5000
+ const tracer = this._telemetryService.getTracer();
5001
+ // Create attributes for the span, handling null values from headers
5002
+ const contentLength = request.headers.get('Content-Length');
5003
+ const contentType = request.headers.get('Content-Type');
5004
+ const attributes = {
5005
+ [ATTR_HTTP_REQUEST_METHOD]: method,
5006
+ [ATTR_URL_FULL]: request.url,
5007
+ [ATTR_URL_PATH]: url.pathname,
5008
+ [ATTR_URL_QUERY]: url.search.replace('?', ''),
5009
+ [ATTR_URL_SCHEME]: url.protocol.replace(':', ''),
5010
+ "url.host": url.host,
5011
+ "http.user_agent": navigator.userAgent,
5012
+ [ATTR_CLIENT_ADDRESS]: window.location.href,
5013
+ [ATTR_CLIENT_PORT]: window.location.port,
5014
+ [ATTR_HTTP_REQUEST_HEADER("accept")]: request.headers.get('Accept') ?? undefined,
5015
+ [ATTR_HTTP_REQUEST_HEADER("accept-language")]: request.headers.get('Accept-Language') ?? undefined,
5016
+ "http.request.body.size": contentLength ?? undefined,
5017
+ [ATTR_HTTP_REQUEST_HEADER("content-type")]: contentType ?? undefined,
5018
+ [ATTR_SERVICE_NAME]: 'ngx-restworld-client'
5019
+ };
5020
+ // Start a new span for this HTTP request
5021
+ const span = tracer.startSpan(spanName, {
5022
+ kind: SpanKind.CLIENT,
5023
+ attributes
5024
+ });
5025
+ // Create a context with the current span
5026
+ const spanContext = trace.setSpan(context.active(), span);
5027
+ // Create a carrier object for W3C trace context headers
5028
+ const carrier = {};
5029
+ // Inject trace context headers into the carrier
5030
+ propagation.inject(spanContext, carrier);
5031
+ // Clone the request with the added W3C trace context headers
5032
+ let headers = request.headers;
5033
+ Object.entries(carrier).forEach(([key, value]) => {
5034
+ headers = headers.set(key, value);
5035
+ });
5036
+ // Create the traced request with the W3C headers
5037
+ const tracedRequest = request.clone({ headers });
5038
+ // Use with() to make this span active during request execution
5039
+ return context.with(spanContext, () => {
5040
+ // Handle the request and observe the response
5041
+ return next.handle(tracedRequest).pipe(
5042
+ // Use operators to capture response or error before completing the span
5043
+ tap({
5044
+ next: (event) => {
5045
+ if (event.type === HttpEventType.Response) {
5046
+ const response = event;
5047
+ const responseAttrs = {
5048
+ [ATTR_HTTP_RESPONSE_STATUS_CODE]: response.status
5049
+ };
5050
+ // Only add response header values if they exist
5051
+ const respContentLength = response.headers.get('Content-Length');
5052
+ const respContentType = response.headers.get('Content-Type');
5053
+ if (respContentLength)
5054
+ responseAttrs["http.response.body.size"] = respContentLength;
5055
+ if (respContentType)
5056
+ responseAttrs[ATTR_HTTP_RESPONSE_HEADER("content-type")] = respContentType;
5057
+ // Add response attributes to the span
5058
+ span.setAttributes(responseAttrs);
5059
+ span.setStatus({
5060
+ code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR
5061
+ });
5062
+ // End the span when we get the full response
5063
+ span.end();
5064
+ }
5065
+ },
5066
+ error: (error) => {
5067
+ // Record the error and end the span
5068
+ span.setStatus({
5069
+ code: SpanStatusCode.ERROR,
5070
+ message: error.message || 'Http request failed'
5071
+ });
5072
+ span.recordException(error);
5073
+ span.end();
5074
+ }
5075
+ }),
5076
+ // Make sure the span ends even if the observable completes without going through our tap handlers
5077
+ finalize(() => {
5078
+ if (span) {
5079
+ // Only end if not already ended in the tap handlers
5080
+ try {
5081
+ span.end();
5082
+ }
5083
+ catch (e) {
5084
+ // Ignore errors from ending an already-ended span
5085
+ }
5086
+ }
5087
+ }));
5088
+ });
5089
+ });
5090
+ }
5091
+ // No active context, just proceed with the request without tracing
5092
+ return next.handle(request);
5093
+ }
5094
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryHttpInterceptor, deps: [{ token: OpenTelemetryService }], target: i0.ɵɵFactoryTarget.Injectable });
5095
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryHttpInterceptor });
5096
+ }
5097
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryHttpInterceptor, decorators: [{
5098
+ type: Injectable
5099
+ }], ctorParameters: () => [{ type: OpenTelemetryService }] });
5100
+ /**
5101
+ * Provider for the OpenTelemetry HTTP interceptor.
5102
+ * This interceptor ensures that HttpClient requests are properly
5103
+ * associated with the current navigation span.
5104
+ */
5105
+ const OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER = {
5106
+ provide: HTTP_INTERCEPTORS,
5107
+ useClass: OpenTelemetryHttpInterceptor,
5108
+ multi: true
5109
+ };
5110
+
4712
5111
  /**
4713
5112
  * Povides the RESTworld functionality to the application.
4714
5113
  * This includes the RestWorldClientCollection, the SettingsService and the OpenTelemetryService.
@@ -4739,7 +5138,11 @@ function provideRestWorld(ngHttpCachingConfig) {
4739
5138
  await opentelemetryService.initialize();
4740
5139
  });
4741
5140
  const cachingProviders = provideNgHttpCaching(mergedCachingConfig);
4742
- const allProviders = [restWorldInitializer, ...cachingProviders];
5141
+ const allProviders = [
5142
+ restWorldInitializer,
5143
+ cachingProviders,
5144
+ OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER
5145
+ ];
4743
5146
  return allProviders;
4744
5147
  }
4745
5148
  /**