@solidev/data 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +21 -2
- package/fesm2022/solidev-data-mdedit.mjs +27 -112
- package/fesm2022/solidev-data-mdedit.mjs.map +1 -1
- package/fesm2022/solidev-data-richedit.mjs +31 -139
- package/fesm2022/solidev-data-richedit.mjs.map +1 -1
- package/fesm2022/solidev-data.mjs +288 -11
- package/fesm2022/solidev-data.mjs.map +1 -1
- package/package.json +1 -1
- package/types/solidev-data-mdedit.d.ts +13 -64
- package/types/solidev-data-richedit.d.ts +8 -65
- package/types/solidev-data.d.ts +180 -8
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, TransferState, PLATFORM_ID, makeStateKey, Injectable, input, ViewChild, Component, signal, model, DestroyRef, Pipe, LOCALE_ID, DEFAULT_CURRENCY_CODE, output, NgZone, effect, untracked, EventEmitter, ElementRef, Directive, NgModule, ApplicationRef } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, TransferState, PLATFORM_ID, makeStateKey, Injectable, input, ViewChild, Component, signal, model, DestroyRef, Pipe, LOCALE_ID, DEFAULT_CURRENCY_CODE, output, NgZone, effect, untracked, EventEmitter, ElementRef, Directive, NgModule, computed, ApplicationRef } from '@angular/core';
|
|
3
3
|
import { __decorate } from 'tslib';
|
|
4
4
|
import * as i1$2 from '@angular/forms';
|
|
5
5
|
import { FormControl, Validators, FormGroup, ReactiveFormsModule, UntypedFormControl, NG_VALUE_ACCESSOR, UntypedFormGroup } from '@angular/forms';
|
|
@@ -13,6 +13,7 @@ import { DragDropModule, CDK_DRAG_CONFIG } from '@angular/cdk/drag-drop';
|
|
|
13
13
|
import * as i1$1 from '@ng-bootstrap/ng-bootstrap';
|
|
14
14
|
import { NgbOffcanvas, NgbOffcanvasModule, NgbDropdownModule, NgbTypeaheadModule, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';
|
|
15
15
|
import { CdkScrollableModule } from '@angular/cdk/scrolling';
|
|
16
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
16
17
|
import { jwtDecode } from 'jwt-decode';
|
|
17
18
|
import * as i1$3 from '@angular/router';
|
|
18
19
|
import { Router, ActivatedRoute, NavigationEnd, RouterModule } from '@angular/router';
|
|
@@ -79,7 +80,6 @@ const BootstrapDataDisplayConfig = {
|
|
|
79
80
|
'input.checkbox': 'form-control',
|
|
80
81
|
'input.password': 'form-control',
|
|
81
82
|
textarea: 'form-control',
|
|
82
|
-
quill: '',
|
|
83
83
|
fkselect: 'form-control',
|
|
84
84
|
select: 'form-select',
|
|
85
85
|
},
|
|
@@ -6342,6 +6342,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImpor
|
|
|
6342
6342
|
}]
|
|
6343
6343
|
}], ctorParameters: () => [] });
|
|
6344
6344
|
|
|
6345
|
+
/**
|
|
6346
|
+
* Marks HTML as trusted, so `[innerHTML]` renders it as-is.
|
|
6347
|
+
*
|
|
6348
|
+
* Meant for the rendered half of a rich text field — the `<field>_html` column
|
|
6349
|
+
* the server produces from the markdown or HTML source. Angular's sanitizer
|
|
6350
|
+
* builds its allow-list from `URI_ATTRS + HTML_ATTRS + ARIA_ATTRS`, and `style`
|
|
6351
|
+
* is in none of them, so a plain `[innerHTML]` silently drops every
|
|
6352
|
+
* `text-align` and every colour `<data-richedit>` writes: read-only mode ends
|
|
6353
|
+
* up looking nothing like the editor.
|
|
6354
|
+
*
|
|
6355
|
+
* **Only use it on HTML the server produced.** The value is inserted without
|
|
6356
|
+
* any filtering, and trusted HTML executes scripts — pointing this at a string
|
|
6357
|
+
* a user of another system can influence is an XSS vector.
|
|
6358
|
+
*
|
|
6359
|
+
* @example
|
|
6360
|
+
* ```html
|
|
6361
|
+
* <div [innerHTML]="product.description_html | safeHtml"></div>
|
|
6362
|
+
* ```
|
|
6363
|
+
*/
|
|
6364
|
+
class SafeHtmlPipe {
|
|
6365
|
+
_sanitizer = inject(DomSanitizer);
|
|
6366
|
+
/**
|
|
6367
|
+
* @param value HTML to trust; null for a nullish or empty input, which
|
|
6368
|
+
* `[innerHTML]` renders as nothing.
|
|
6369
|
+
*/
|
|
6370
|
+
transform(value) {
|
|
6371
|
+
if (!value) {
|
|
6372
|
+
return null;
|
|
6373
|
+
}
|
|
6374
|
+
return this._sanitizer.bypassSecurityTrustHtml(value);
|
|
6375
|
+
}
|
|
6376
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SafeHtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
6377
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.3", ngImport: i0, type: SafeHtmlPipe, isStandalone: true, name: "safeHtml" });
|
|
6378
|
+
}
|
|
6379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: SafeHtmlPipe, decorators: [{
|
|
6380
|
+
type: Pipe,
|
|
6381
|
+
args: [{
|
|
6382
|
+
name: 'safeHtml',
|
|
6383
|
+
}]
|
|
6384
|
+
}] });
|
|
6385
|
+
|
|
6345
6386
|
/**
|
|
6346
6387
|
* Typeahead for picking several related instances (a many-to-many target).
|
|
6347
6388
|
*
|
|
@@ -6842,8 +6883,8 @@ class DispeditComponent {
|
|
|
6842
6883
|
/**
|
|
6843
6884
|
* Forces a display renderer, bypassing the field manager's `displayType`.
|
|
6844
6885
|
*
|
|
6845
|
-
* Writable
|
|
6846
|
-
*
|
|
6886
|
+
* Writable so that cross-input consistency rules can settle on a renderer;
|
|
6887
|
+
* see {@link _checks}.
|
|
6847
6888
|
*/
|
|
6848
6889
|
viewer = model(/* @ts-ignore */
|
|
6849
6890
|
...(ngDevMode ? [undefined, { debugName: "viewer" }] : /* istanbul ignore next */ []));
|
|
@@ -7150,11 +7191,15 @@ class DispeditComponent {
|
|
|
7150
7191
|
onM2MValuesChanges(v) {
|
|
7151
7192
|
this.m2mValues = v;
|
|
7152
7193
|
}
|
|
7153
|
-
/**
|
|
7194
|
+
/**
|
|
7195
|
+
* Apply cross-input consistency rules.
|
|
7196
|
+
*
|
|
7197
|
+
* Nothing to reconcile at the moment: the one rule that lived here paired the
|
|
7198
|
+
* `quill` editor with the `quill` viewer, and neither exists any more. Kept
|
|
7199
|
+
* as the place such rules belong, since `_init` already calls it.
|
|
7200
|
+
*/
|
|
7154
7201
|
_checks() {
|
|
7155
|
-
|
|
7156
|
-
this.viewer.set('quill');
|
|
7157
|
-
}
|
|
7202
|
+
// No rules currently.
|
|
7158
7203
|
}
|
|
7159
7204
|
/**
|
|
7160
7205
|
* Save value to database, only if model have an id.
|
|
@@ -7364,11 +7409,11 @@ class DispeditComponent {
|
|
|
7364
7409
|
// Reserved: display classes are currently applied in the template.
|
|
7365
7410
|
}
|
|
7366
7411
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: DispeditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7367
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: DispeditComponent, isStandalone: true, selector: "data-dispedit", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, edit: { classPropertyName: "edit", publicName: "edit", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, choices: { classPropertyName: "choices", publicName: "choices", isSignal: true, isRequired: false, transformFunction: null }, inputClasses: { classPropertyName: "inputClasses", publicName: "inputClasses", isSignal: true, isRequired: false, transformFunction: null }, editor: { classPropertyName: "editor", publicName: "editor", isSignal: true, isRequired: false, transformFunction: null }, viewer: { classPropertyName: "viewer", publicName: "viewer", isSignal: true, isRequired: false, transformFunction: null }, default: { classPropertyName: "default", publicName: "default", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, help: { classPropertyName: "help", publicName: "help", isSignal: true, isRequired: false, transformFunction: null }, hideLabel: { classPropertyName: "hideLabel", publicName: "hideLabel", isSignal: true, isRequired: false, transformFunction: null }, queryset: { classPropertyName: "queryset", publicName: "queryset", isSignal: true, isRequired: false, transformFunction: null }, collection: { classPropertyName: "collection", publicName: "collection", isSignal: true, isRequired: false, transformFunction: null }, display: { classPropertyName: "display", publicName: "display", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { edit: "editChange", inputClasses: "inputClassesChange", viewer: "viewerChange", changed: "changed" }, ngImport: i0, template: "<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n\n<!-- TEMPLATE affichage -->\n<ng-template #dispTpl>\n @switch (realDisplay()) {\n @case (\"text\") {\n <span\n class=\"editable disp-text\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"choice\") {\n <span\n class=\"editable disp-choice\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"decimal\") {\n <span\n class=\"editable disp-decimal\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"boolean\") {\n <span\n class=\"editable disp-boolean\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"fkdetails\") {\n <span\n class=\"editable disp-fkdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n <div class=\"fkitem\">{{ txtValue() }}</div>\n </span>\n }\n @case (\"m2mdetails\") {\n <span\n class=\"editable disp-m2mdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @for (v of txtValues(); track v) {\n <div class=\"m2mitem\">{{ v }}</div>\n }\n </span>\n }\n @case (\"datetime\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"short\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n @case (\"date\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"shortDate\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n }\n</ng-template>\n\n<!-- TEMPLATE \u00E9dition -->\n<ng-template #editTpl let-form=\"form\">\n @switch (realEditor()) {\n @case (\"input.text\") {\n <input\n [attr.id]=\"inputId\"\n type=\"text\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.email\") {\n <input\n [attr.id]=\"inputId\"\n type=\"email\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['email']\"\n >\n Format d'email invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.password\") {\n <input\n [attr.id]=\"inputId\"\n type=\"password\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.datetime\") {\n <input\n [attr.id]=\"inputId\"\n type=\"datetime-local\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.date\") {\n <input\n [attr.id]=\"inputId\"\n type=\"date\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.number\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.decimal\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.checkbox\") {\n @let v = $any(this.model())[this.field()];\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <button\n type=\"button\"\n [class]=\"v === true ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(true); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Oui\n </button>\n <button\n type=\"button\"\n [class]=\"v === false ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(false); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Non\n </button>\n </div>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n @case (\"textarea\") {\n <textarea\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n [class]=\"inputClasses()\"\n (keyup.control.enter)=\"update()\"\n [placeholder]=\"realPlaceholder()\"\n ></textarea>\n @if (mode() === \"dd\") {\n <button class=\"btn btn-sm btn-link w-100 dispedit-text-update-button\" (click)=\"update()\">\n <i class=\"bi bi-save\"></i>\n </button>\n }\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"fkselect\") {\n <data-fkselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n [display]=\"display()\"\n (selected)=\"selectedRefItem($event)\"\n [placeholder]=\"placeholder()\"\n (cancelled)=\"unsetEdit()\"\n (cleared)=\"selectedRefItem(null)\"\n ></data-fkselect>\n }\n @case (\"m2mselect\") {\n <data-m2mselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n (changed)=\"update()\"\n [formControl]=\"form.get(field())\"\n (detailsChanged)=\"onM2MValuesChanges($event)\"\n [model]=\"model()\"\n [field]=\"field()\"\n [placeholder]=\"placeholder()\"\n ></data-m2mselect>\n }\n @case (\"select\") {\n <select\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n (change)=\"update()\"\n [class]=\"inputClasses()\"\n >\n @for (c of realChoices(); track c) {\n <option [ngValue]=\"c.value !== undefined ? c.value : c\">\n {{ c.desc ? c.desc : c }}\n </option>\n }\n </select>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n }\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (fg(); as fg) {\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: fg }\"></ng-container>\n </form>\n }\n }\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (form()) {\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: form() }\"></ng-container>\n }\n }\n</ng-template>\n<!-- Dd display-->\n@if (mode() === \"dd\") {\n @if (!hideLabel()) {\n <dt [class.required]=\"required()\">\n <span\n class=\"editable\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleEdit()\"\n (keydown.enter)=\"toggleEdit()\"\n (keydown.space)=\"$event.preventDefault(); toggleEdit()\"\n >\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </span>\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n </dt>\n }\n <dd [class.mb-0]=\"hideLabel()\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n}\n<!-- Inline display-->\n@if (mode() === \"inline\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n}\n<!-- Form display-->\n@if (mode() === \"form\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n}\n", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FkselectComponent, selector: "data-fkselect", inputs: ["model", "field", "edit", "value", "queryset", "collection", "update", "filter", "mode", "display", "search", "label", "inputId", "placeholder", "inputClasses"], outputs: ["querysetChange", "collectionChange", "selected", "cancelled", "cleared"] }, { kind: "component", type: M2mselectComponent, selector: "data-m2mselect", inputs: ["model", "field", "edit", "values", "queryset", "collection", "filter", "mode", "display", "search", "label", "inputId", "placeholder", "emptyLabel", "inputClasses"], outputs: ["valuesChange", "querysetChange", "collectionChange", "added", "removed", "cancelled", "cleared", "detailsChanged", "changed"] }, { kind: "pipe", type: DatePipe, name: "date" }] });
|
|
7412
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: DispeditComponent, isStandalone: true, selector: "data-dispedit", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, edit: { classPropertyName: "edit", publicName: "edit", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, choices: { classPropertyName: "choices", publicName: "choices", isSignal: true, isRequired: false, transformFunction: null }, inputClasses: { classPropertyName: "inputClasses", publicName: "inputClasses", isSignal: true, isRequired: false, transformFunction: null }, editor: { classPropertyName: "editor", publicName: "editor", isSignal: true, isRequired: false, transformFunction: null }, viewer: { classPropertyName: "viewer", publicName: "viewer", isSignal: true, isRequired: false, transformFunction: null }, default: { classPropertyName: "default", publicName: "default", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, help: { classPropertyName: "help", publicName: "help", isSignal: true, isRequired: false, transformFunction: null }, hideLabel: { classPropertyName: "hideLabel", publicName: "hideLabel", isSignal: true, isRequired: false, transformFunction: null }, queryset: { classPropertyName: "queryset", publicName: "queryset", isSignal: true, isRequired: false, transformFunction: null }, collection: { classPropertyName: "collection", publicName: "collection", isSignal: true, isRequired: false, transformFunction: null }, display: { classPropertyName: "display", publicName: "display", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { edit: "editChange", inputClasses: "inputClassesChange", viewer: "viewerChange", changed: "changed" }, ngImport: i0, template: "<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n\n<!-- TEMPLATE affichage -->\n<ng-template #dispTpl>\n @switch (realDisplay()) {\n @case (\"text\") {\n <span\n class=\"editable disp-text\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"html\") {\n <!--\n Trusted, not sanitized: Angular's sanitizer strips the inline styles\n richedit writes. See SafeHtmlPipe.\n -->\n <div\n class=\"editable disp-html\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n [innerHTML]=\"txtValue() | safeHtml\"\n ></div>\n }\n @case (\"choice\") {\n <span\n class=\"editable disp-choice\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"decimal\") {\n <span\n class=\"editable disp-decimal\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"boolean\") {\n <span\n class=\"editable disp-boolean\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"fkdetails\") {\n <span\n class=\"editable disp-fkdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n <div class=\"fkitem\">{{ txtValue() }}</div>\n </span>\n }\n @case (\"m2mdetails\") {\n <span\n class=\"editable disp-m2mdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @for (v of txtValues(); track v) {\n <div class=\"m2mitem\">{{ v }}</div>\n }\n </span>\n }\n @case (\"datetime\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"short\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n @case (\"date\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"shortDate\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n }\n</ng-template>\n\n<!-- TEMPLATE \u00E9dition -->\n<ng-template #editTpl let-form=\"form\">\n @switch (realEditor()) {\n @case (\"input.text\") {\n <input\n [attr.id]=\"inputId\"\n type=\"text\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.email\") {\n <input\n [attr.id]=\"inputId\"\n type=\"email\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['email']\"\n >\n Format d'email invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.password\") {\n <input\n [attr.id]=\"inputId\"\n type=\"password\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.datetime\") {\n <input\n [attr.id]=\"inputId\"\n type=\"datetime-local\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.date\") {\n <input\n [attr.id]=\"inputId\"\n type=\"date\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.number\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.decimal\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.checkbox\") {\n @let v = $any(this.model())[this.field()];\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <button\n type=\"button\"\n [class]=\"v === true ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(true); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Oui\n </button>\n <button\n type=\"button\"\n [class]=\"v === false ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(false); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Non\n </button>\n </div>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n @case (\"textarea\") {\n <textarea\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n [class]=\"inputClasses()\"\n (keyup.control.enter)=\"update()\"\n [placeholder]=\"realPlaceholder()\"\n ></textarea>\n @if (mode() === \"dd\") {\n <button class=\"btn btn-sm btn-link w-100 dispedit-text-update-button\" (click)=\"update()\">\n <i class=\"bi bi-save\"></i>\n </button>\n }\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"fkselect\") {\n <data-fkselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n [display]=\"display()\"\n (selected)=\"selectedRefItem($event)\"\n [placeholder]=\"placeholder()\"\n (cancelled)=\"unsetEdit()\"\n (cleared)=\"selectedRefItem(null)\"\n ></data-fkselect>\n }\n @case (\"m2mselect\") {\n <data-m2mselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n (changed)=\"update()\"\n [formControl]=\"form.get(field())\"\n (detailsChanged)=\"onM2MValuesChanges($event)\"\n [model]=\"model()\"\n [field]=\"field()\"\n [placeholder]=\"placeholder()\"\n ></data-m2mselect>\n }\n @case (\"select\") {\n <select\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n (change)=\"update()\"\n [class]=\"inputClasses()\"\n >\n @for (c of realChoices(); track c) {\n <option [ngValue]=\"c.value !== undefined ? c.value : c\">\n {{ c.desc ? c.desc : c }}\n </option>\n }\n </select>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n }\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (fg(); as fg) {\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: fg }\"></ng-container>\n </form>\n }\n }\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (form()) {\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: form() }\"></ng-container>\n }\n }\n</ng-template>\n<!-- Dd display-->\n@if (mode() === \"dd\") {\n @if (!hideLabel()) {\n <dt [class.required]=\"required()\">\n <span\n class=\"editable\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleEdit()\"\n (keydown.enter)=\"toggleEdit()\"\n (keydown.space)=\"$event.preventDefault(); toggleEdit()\"\n >\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </span>\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n </dt>\n }\n <dd [class.mb-0]=\"hideLabel()\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n}\n<!-- Inline display-->\n@if (mode() === \"inline\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n}\n<!-- Form display-->\n@if (mode() === \"form\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n}\n", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1$2.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FkselectComponent, selector: "data-fkselect", inputs: ["model", "field", "edit", "value", "queryset", "collection", "update", "filter", "mode", "display", "search", "label", "inputId", "placeholder", "inputClasses"], outputs: ["querysetChange", "collectionChange", "selected", "cancelled", "cleared"] }, { kind: "component", type: M2mselectComponent, selector: "data-m2mselect", inputs: ["model", "field", "edit", "values", "queryset", "collection", "filter", "mode", "display", "search", "label", "inputId", "placeholder", "emptyLabel", "inputClasses"], outputs: ["valuesChange", "querysetChange", "collectionChange", "added", "removed", "cancelled", "cleared", "detailsChanged", "changed"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] });
|
|
7368
7413
|
}
|
|
7369
7414
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: DispeditComponent, decorators: [{
|
|
7370
7415
|
type: Component,
|
|
7371
|
-
args: [{ selector: 'data-dispedit', imports: [DatePipe, NgTemplateOutlet, ReactiveFormsModule, FkselectComponent, M2mselectComponent], template: "<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n\n<!-- TEMPLATE affichage -->\n<ng-template #dispTpl>\n @switch (realDisplay()) {\n @case (\"text\") {\n <span\n class=\"editable disp-text\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"choice\") {\n <span\n class=\"editable disp-choice\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"decimal\") {\n <span\n class=\"editable disp-decimal\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"boolean\") {\n <span\n class=\"editable disp-boolean\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"fkdetails\") {\n <span\n class=\"editable disp-fkdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n <div class=\"fkitem\">{{ txtValue() }}</div>\n </span>\n }\n @case (\"m2mdetails\") {\n <span\n class=\"editable disp-m2mdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @for (v of txtValues(); track v) {\n <div class=\"m2mitem\">{{ v }}</div>\n }\n </span>\n }\n @case (\"datetime\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"short\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n @case (\"date\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"shortDate\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n }\n</ng-template>\n\n<!-- TEMPLATE \u00E9dition -->\n<ng-template #editTpl let-form=\"form\">\n @switch (realEditor()) {\n @case (\"input.text\") {\n <input\n [attr.id]=\"inputId\"\n type=\"text\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.email\") {\n <input\n [attr.id]=\"inputId\"\n type=\"email\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['email']\"\n >\n Format d'email invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.password\") {\n <input\n [attr.id]=\"inputId\"\n type=\"password\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.datetime\") {\n <input\n [attr.id]=\"inputId\"\n type=\"datetime-local\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.date\") {\n <input\n [attr.id]=\"inputId\"\n type=\"date\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.number\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.decimal\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.checkbox\") {\n @let v = $any(this.model())[this.field()];\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <button\n type=\"button\"\n [class]=\"v === true ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(true); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Oui\n </button>\n <button\n type=\"button\"\n [class]=\"v === false ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(false); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Non\n </button>\n </div>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n @case (\"textarea\") {\n <textarea\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n [class]=\"inputClasses()\"\n (keyup.control.enter)=\"update()\"\n [placeholder]=\"realPlaceholder()\"\n ></textarea>\n @if (mode() === \"dd\") {\n <button class=\"btn btn-sm btn-link w-100 dispedit-text-update-button\" (click)=\"update()\">\n <i class=\"bi bi-save\"></i>\n </button>\n }\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"fkselect\") {\n <data-fkselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n [display]=\"display()\"\n (selected)=\"selectedRefItem($event)\"\n [placeholder]=\"placeholder()\"\n (cancelled)=\"unsetEdit()\"\n (cleared)=\"selectedRefItem(null)\"\n ></data-fkselect>\n }\n @case (\"m2mselect\") {\n <data-m2mselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n (changed)=\"update()\"\n [formControl]=\"form.get(field())\"\n (detailsChanged)=\"onM2MValuesChanges($event)\"\n [model]=\"model()\"\n [field]=\"field()\"\n [placeholder]=\"placeholder()\"\n ></data-m2mselect>\n }\n @case (\"select\") {\n <select\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n (change)=\"update()\"\n [class]=\"inputClasses()\"\n >\n @for (c of realChoices(); track c) {\n <option [ngValue]=\"c.value !== undefined ? c.value : c\">\n {{ c.desc ? c.desc : c }}\n </option>\n }\n </select>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n }\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (fg(); as fg) {\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: fg }\"></ng-container>\n </form>\n }\n }\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (form()) {\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: form() }\"></ng-container>\n }\n }\n</ng-template>\n<!-- Dd display-->\n@if (mode() === \"dd\") {\n @if (!hideLabel()) {\n <dt [class.required]=\"required()\">\n <span\n class=\"editable\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleEdit()\"\n (keydown.enter)=\"toggleEdit()\"\n (keydown.space)=\"$event.preventDefault(); toggleEdit()\"\n >\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </span>\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n </dt>\n }\n <dd [class.mb-0]=\"hideLabel()\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n}\n<!-- Inline display-->\n@if (mode() === \"inline\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n}\n<!-- Form display-->\n@if (mode() === \"form\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n}\n", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"] }]
|
|
7416
|
+
args: [{ selector: 'data-dispedit', imports: [DatePipe, NgTemplateOutlet, ReactiveFormsModule, FkselectComponent, M2mselectComponent, SafeHtmlPipe], template: "<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n\n<!-- TEMPLATE affichage -->\n<ng-template #dispTpl>\n @switch (realDisplay()) {\n @case (\"text\") {\n <span\n class=\"editable disp-text\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"html\") {\n <!--\n Trusted, not sanitized: Angular's sanitizer strips the inline styles\n richedit writes. See SafeHtmlPipe.\n -->\n <div\n class=\"editable disp-html\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n [innerHTML]=\"txtValue() | safeHtml\"\n ></div>\n }\n @case (\"choice\") {\n <span\n class=\"editable disp-choice\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"decimal\") {\n <span\n class=\"editable disp-decimal\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"boolean\") {\n <span\n class=\"editable disp-boolean\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n {{ txtValue() }}\n </span>\n }\n @case (\"fkdetails\") {\n <span\n class=\"editable disp-fkdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n <div class=\"fkitem\">{{ txtValue() }}</div>\n </span>\n }\n @case (\"m2mdetails\") {\n <span\n class=\"editable disp-m2mdetails\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @for (v of txtValues(); track v) {\n <div class=\"m2mitem\">{{ v }}</div>\n }\n </span>\n }\n @case (\"datetime\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"short\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n @case (\"date\") {\n <span\n class=\"editable disp-datetime\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"enableEditMode()\"\n (keydown.enter)=\"enableEditMode()\"\n (keydown.space)=\"$event.preventDefault(); enableEditMode()\"\n >\n @if (dispValue()) {\n {{ txtValue() | date: \"shortDate\" }}\n }\n @if (!dispValue()) {\n {{ txtValue() }}\n }\n </span>\n }\n }\n</ng-template>\n\n<!-- TEMPLATE \u00E9dition -->\n<ng-template #editTpl let-form=\"form\">\n @switch (realEditor()) {\n @case (\"input.text\") {\n <input\n [attr.id]=\"inputId\"\n type=\"text\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.email\") {\n <input\n [attr.id]=\"inputId\"\n type=\"email\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['email']\"\n >\n Format d'email invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.password\") {\n <input\n [attr.id]=\"inputId\"\n type=\"password\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.datetime\") {\n <input\n [attr.id]=\"inputId\"\n type=\"datetime-local\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.date\") {\n <input\n [attr.id]=\"inputId\"\n type=\"date\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n (keyup.enter)=\"update()\"\n />\n <div class=\"form-text\">{{ realHelp() }}</div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minDate']\"\n >\n Doit \u00EAtre post\u00E9rieur \u00E0 {{ $any(manager()).min | date: \"short\" }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxDate']\"\n >\n Doit \u00EAtre ant\u00E9rieur \u00E0 {{ $any(manager()).max | date: \"short\" }}...\n </div>\n }\n @case (\"input.number\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.decimal\") {\n <input\n [attr.id]=\"inputId\"\n type=\"number\"\n [formControl]=\"form.get(field())\"\n [class]=\"inputClasses()\"\n (keyup.escape)=\"unsetEdit()\"\n [placeholder]=\"realPlaceholder()\"\n />\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['min']\"\n >\n Trop petit : minimum {{ $any(manager()).min }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['max']\"\n >\n Trop grand : maximum {{ $any(manager()).max }}...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"input.checkbox\") {\n @let v = $any(this.model())[this.field()];\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <button\n type=\"button\"\n [class]=\"v === true ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(true); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Oui\n </button>\n <button\n type=\"button\"\n [class]=\"v === false ? 'btn btn-primary' : 'btn btn-outline-primary'\"\n (click)=\"form.get(field())?.setValue(false); update()\"\n (keyup.escape)=\"unsetEdit()\"\n >\n Non\n </button>\n </div>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n @case (\"textarea\") {\n <textarea\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n [class]=\"inputClasses()\"\n (keyup.control.enter)=\"update()\"\n [placeholder]=\"realPlaceholder()\"\n ></textarea>\n @if (mode() === \"dd\") {\n <button class=\"btn btn-sm btn-link w-100 dispedit-text-update-button\" (click)=\"update()\">\n <i class=\"bi bi-save\"></i>\n </button>\n }\n @if (realHelp()) {\n <div class=\"form-text\">\n {{ realHelp() }}\n @if (required()) {\n <span class=\"ms-1\">(requis)</span>\n }\n </div>\n }\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['minlength']\"\n >\n Trop court : {{ $any(manager()).minLength }} caract\u00E8res minimum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['maxlength']\"\n >\n Trop long : {{ $any(manager()).maxLength }} caract\u00E8res maximum...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['pattern']\"\n >\n Format invalide...\n </div>\n <div\n class=\"invalid-feedback mt-0\"\n [class.d-block]=\"form && !form.controls[field()].pristine && form.controls[field()].errors?.['required']\"\n >\n Ce champ est requis...\n </div>\n }\n @case (\"fkselect\") {\n <data-fkselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n [display]=\"display()\"\n (selected)=\"selectedRefItem($event)\"\n [placeholder]=\"placeholder()\"\n (cancelled)=\"unsetEdit()\"\n (cleared)=\"selectedRefItem(null)\"\n ></data-fkselect>\n }\n @case (\"m2mselect\") {\n <data-m2mselect\n [inputId]=\"inputId\"\n [collection]=\"collection()\"\n [filter]=\"filter()\"\n (changed)=\"update()\"\n [formControl]=\"form.get(field())\"\n (detailsChanged)=\"onM2MValuesChanges($event)\"\n [model]=\"model()\"\n [field]=\"field()\"\n [placeholder]=\"placeholder()\"\n ></data-m2mselect>\n }\n @case (\"select\") {\n <select\n [attr.id]=\"inputId\"\n [formControl]=\"form.get(field())\"\n (keyup.escape)=\"unsetEdit()\"\n (change)=\"update()\"\n [class]=\"inputClasses()\"\n >\n @for (c of realChoices(); track c) {\n <option [ngValue]=\"c.value !== undefined ? c.value : c\">\n {{ c.desc ? c.desc : c }}\n </option>\n }\n </select>\n <div class=\"form-text\">{{ realHelp() }}</div>\n }\n }\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (fg(); as fg) {\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: fg }\"></ng-container>\n </form>\n }\n }\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n @if (!edit()) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit()) {\n @if (form()) {\n <ng-container *ngTemplateOutlet=\"editTpl; context: { form: form() }\"></ng-container>\n }\n }\n</ng-template>\n<!-- Dd display-->\n@if (mode() === \"dd\") {\n @if (!hideLabel()) {\n <dt [class.required]=\"required()\">\n <span\n class=\"editable\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleEdit()\"\n (keydown.enter)=\"toggleEdit()\"\n (keydown.space)=\"$event.preventDefault(); toggleEdit()\"\n >\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </span>\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n </dt>\n }\n <dd [class.mb-0]=\"hideLabel()\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n}\n<!-- Inline display-->\n@if (mode() === \"inline\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n}\n<!-- Form display-->\n@if (mode() === \"form\") {\n @if (!hideLabel()) {\n @if (realDefault() !== undefined && edit()) {\n <span\n class=\"pointer float-end\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"R\u00E9tablir la valeur par d\u00E9faut\"\n (click)=\"setDefault()\"\n (keydown.enter)=\"setDefault()\"\n (keydown.space)=\"$event.preventDefault(); setDefault()\"\n >\n <i class=\"bi bi-trash ms-2\"></i>\n </span>\n }\n <label [class.required]=\"required()\" [attr.for]=\"inputId\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n}\n", styles: [".editable{cursor:pointer}form.inline{display:inline-block}.required{font-weight:700}.required:after{content:\" (*)\"}\n"] }]
|
|
7372
7417
|
}], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], edit: [{ type: i0.Input, args: [{ isSignal: true, alias: "edit", required: false }] }, { type: i0.Output, args: ["editChange"] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], choices: [{ type: i0.Input, args: [{ isSignal: true, alias: "choices", required: false }] }], inputClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputClasses", required: false }] }, { type: i0.Output, args: ["inputClassesChange"] }], editor: [{ type: i0.Input, args: [{ isSignal: true, alias: "editor", required: false }] }], viewer: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewer", required: false }] }, { type: i0.Output, args: ["viewerChange"] }], default: [{ type: i0.Input, args: [{ isSignal: true, alias: "default", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], help: [{ type: i0.Input, args: [{ isSignal: true, alias: "help", required: false }] }], hideLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideLabel", required: false }] }], queryset: [{ type: i0.Input, args: [{ isSignal: true, alias: "queryset", required: false }] }], collection: [{ type: i0.Input, args: [{ isSignal: true, alias: "collection", required: false }] }], display: [{ type: i0.Input, args: [{ isSignal: true, alias: "display", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }] } });
|
|
7373
7418
|
|
|
7374
7419
|
/**
|
|
@@ -10308,6 +10353,238 @@ function installEditorDomShims() {
|
|
|
10308
10353
|
}
|
|
10309
10354
|
}
|
|
10310
10355
|
|
|
10356
|
+
/**
|
|
10357
|
+
* The behaviour `<data-richedit>` and `<data-mdedit>` share with
|
|
10358
|
+
* `<data-dispedit>`: show the value, click to edit, save explicitly.
|
|
10359
|
+
*
|
|
10360
|
+
* It lives in the primary entry point so both editors can extend it — they
|
|
10361
|
+
* import `@solidev/data`, and the reverse would be a circular dependency
|
|
10362
|
+
* between entry points. Everything here is engine-agnostic: resolving which
|
|
10363
|
+
* field to read, which control to bind, when to show the editor, and how to
|
|
10364
|
+
* persist. The subclass owns its template and its editor widget.
|
|
10365
|
+
*
|
|
10366
|
+
* ## The source / rendered pair
|
|
10367
|
+
*
|
|
10368
|
+
* Long text is rarely one column. A markdown field is stored as its source
|
|
10369
|
+
* plus the HTML the server rendered from it, and this base follows that shape
|
|
10370
|
+
* by convention: given `field="description"` it edits `description_src` and
|
|
10371
|
+
* displays `description_html` **when the model declares them**, and falls back
|
|
10372
|
+
* to `description` for both when it does not. `[htmlField]` overrides the
|
|
10373
|
+
* display half outright. A `field` that already ends in `_src` is understood,
|
|
10374
|
+
* so `field="description_src"` resolves the same pair.
|
|
10375
|
+
*/
|
|
10376
|
+
class FieldEditorBase {
|
|
10377
|
+
/** Id tying the label to the editor. */
|
|
10378
|
+
inputId = uniqueId('data-editor');
|
|
10379
|
+
/** Id of the label element, wired to the editor through `aria-labelledby`. */
|
|
10380
|
+
labelId = `${this.inputId}-label`;
|
|
10381
|
+
/** Model instance holding the field. */
|
|
10382
|
+
model = input(/* @ts-ignore */
|
|
10383
|
+
...(ngDevMode ? [undefined, { debugName: "model" }] : /* istanbul ignore next */ []));
|
|
10384
|
+
/**
|
|
10385
|
+
* Field to edit, or the base name of a source / rendered pair.
|
|
10386
|
+
*
|
|
10387
|
+
* See the class description for how `<field>_src` and `<field>_html` are
|
|
10388
|
+
* resolved.
|
|
10389
|
+
*/
|
|
10390
|
+
field = input(/* @ts-ignore */
|
|
10391
|
+
...(ngDevMode ? [undefined, { debugName: "field" }] : /* istanbul ignore next */ []));
|
|
10392
|
+
/** Overrides the field read for the read-only display. */
|
|
10393
|
+
htmlField = input(/* @ts-ignore */
|
|
10394
|
+
...(ngDevMode ? [undefined, { debugName: "htmlField" }] : /* istanbul ignore next */ []));
|
|
10395
|
+
/** Whether {@link toggleEdit} is allowed to reveal the editor. */
|
|
10396
|
+
editable = input(true, /* @ts-ignore */
|
|
10397
|
+
...(ngDevMode ? [{ debugName: "editable" }] : /* istanbul ignore next */ []));
|
|
10398
|
+
/**
|
|
10399
|
+
* Whether the editor is showing, in `dd` mode.
|
|
10400
|
+
*
|
|
10401
|
+
* Defaults to false: the value renders and a click reveals the editor, the
|
|
10402
|
+
* way `<data-dispedit>` behaves. `inline` and `form` modes ignore this and
|
|
10403
|
+
* follow {@link showEditor}.
|
|
10404
|
+
*/
|
|
10405
|
+
edit = model(false, /* @ts-ignore */
|
|
10406
|
+
...(ngDevMode ? [{ debugName: "edit" }] : /* istanbul ignore next */ []));
|
|
10407
|
+
/**
|
|
10408
|
+
* Layout, and whether {@link save} persists.
|
|
10409
|
+
*
|
|
10410
|
+
* `dd` renders a `<dt>`/`<dd>` block and is the only mode that saves to the
|
|
10411
|
+
* API; `inline` and `form` render a label plus the editor and leave saving to
|
|
10412
|
+
* the caller.
|
|
10413
|
+
*/
|
|
10414
|
+
mode = input('dd', /* @ts-ignore */
|
|
10415
|
+
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
10416
|
+
/** Hide label (for inline forms). */
|
|
10417
|
+
hideLabel = input(false, /* @ts-ignore */
|
|
10418
|
+
...(ngDevMode ? [{ debugName: "hideLabel" }] : /* istanbul ignore next */ []));
|
|
10419
|
+
/**
|
|
10420
|
+
* Hide the built-in save button, for callers driving persistence themselves
|
|
10421
|
+
* from the {@link changed} output.
|
|
10422
|
+
*/
|
|
10423
|
+
hideButton = input(false, /* @ts-ignore */
|
|
10424
|
+
...(ngDevMode ? [{ debugName: "hideButton" }] : /* istanbul ignore next */ []));
|
|
10425
|
+
/**
|
|
10426
|
+
* Form control backing the editor.
|
|
10427
|
+
*
|
|
10428
|
+
* When supplied, the component uses it as-is and skips its own setup — no
|
|
10429
|
+
* field manager lookup, no seeding from the model, and no {@link changed}
|
|
10430
|
+
* emissions. Takes precedence over `[form]`.
|
|
10431
|
+
*/
|
|
10432
|
+
fc = input(/* @ts-ignore */
|
|
10433
|
+
...(ngDevMode ? [undefined, { debugName: "fc" }] : /* istanbul ignore next */ []));
|
|
10434
|
+
/**
|
|
10435
|
+
* External form group to register into, the way `<data-dispedit>` does.
|
|
10436
|
+
*
|
|
10437
|
+
* A control named after the resolved source field is added to it, seeded
|
|
10438
|
+
* from the model. Ignored when `[fc]` is supplied.
|
|
10439
|
+
*/
|
|
10440
|
+
form = input(/* @ts-ignore */
|
|
10441
|
+
...(ngDevMode ? [undefined, { debugName: "form" }] : /* istanbul ignore next */ []));
|
|
10442
|
+
/** Emits the value on every change. Not wired for a caller-supplied `[fc]`. */
|
|
10443
|
+
changed = output();
|
|
10444
|
+
/** Field manager for the source field; only resolved when `fc` is created here. */
|
|
10445
|
+
manager;
|
|
10446
|
+
/** Whether the manager declares the field required. */
|
|
10447
|
+
required = signal(false, /* @ts-ignore */
|
|
10448
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
10449
|
+
/** The control actually in use. */
|
|
10450
|
+
control;
|
|
10451
|
+
/** The base name of the pair, with any trailing `_src` removed. */
|
|
10452
|
+
baseField = computed(() => (this.field() ?? '').replace(/_src$/, ''), /* @ts-ignore */
|
|
10453
|
+
...(ngDevMode ? [{ debugName: "baseField" }] : /* istanbul ignore next */ []));
|
|
10454
|
+
/** The field actually edited. */
|
|
10455
|
+
sourceField = computed(() => {
|
|
10456
|
+
const base = this.baseField();
|
|
10457
|
+
return this.modelHas(`${base}_src`) ? `${base}_src` : (this.field() ?? '');
|
|
10458
|
+
}, /* @ts-ignore */
|
|
10459
|
+
...(ngDevMode ? [{ debugName: "sourceField" }] : /* istanbul ignore next */ []));
|
|
10460
|
+
/** The field actually displayed in read-only mode. */
|
|
10461
|
+
displayField = computed(() => {
|
|
10462
|
+
const override = this.htmlField();
|
|
10463
|
+
if (override)
|
|
10464
|
+
return override;
|
|
10465
|
+
const base = this.baseField();
|
|
10466
|
+
return this.modelHas(`${base}_html`) ? `${base}_html` : (this.field() ?? '');
|
|
10467
|
+
}, /* @ts-ignore */
|
|
10468
|
+
...(ngDevMode ? [{ debugName: "displayField" }] : /* istanbul ignore next */ []));
|
|
10469
|
+
/**
|
|
10470
|
+
* Whether the editor is showing rather than the rendered value.
|
|
10471
|
+
*
|
|
10472
|
+
* The rule is `<data-dispedit>`'s: `dd` follows `[edit]`, `inline` shows the
|
|
10473
|
+
* editor unless the field is not editable, and `form` always shows it — a
|
|
10474
|
+
* form control that renders as static text would be a surprise.
|
|
10475
|
+
*/
|
|
10476
|
+
showEditor = computed(() => {
|
|
10477
|
+
switch (this.mode()) {
|
|
10478
|
+
case 'dd':
|
|
10479
|
+
return this.edit();
|
|
10480
|
+
case 'inline':
|
|
10481
|
+
return this.editable();
|
|
10482
|
+
default:
|
|
10483
|
+
return true;
|
|
10484
|
+
}
|
|
10485
|
+
}, /* @ts-ignore */
|
|
10486
|
+
...(ngDevMode ? [{ debugName: "showEditor" }] : /* istanbul ignore next */ []));
|
|
10487
|
+
/**
|
|
10488
|
+
* Resolve the control: the supplied `[fc]`, one registered into `[form]`, or
|
|
10489
|
+
* one of our own seeded from the model.
|
|
10490
|
+
*/
|
|
10491
|
+
ngOnInit() {
|
|
10492
|
+
const supplied = this.fc();
|
|
10493
|
+
if (supplied) {
|
|
10494
|
+
this.control = supplied;
|
|
10495
|
+
return;
|
|
10496
|
+
}
|
|
10497
|
+
this.control = new FormControl('');
|
|
10498
|
+
const model = this.model();
|
|
10499
|
+
const field = this.sourceField();
|
|
10500
|
+
if (model && field) {
|
|
10501
|
+
this.manager = model.FM(field);
|
|
10502
|
+
this.required.set(this.manager?.required ?? false);
|
|
10503
|
+
this.control.setValue(asText(fieldValues(model)[field]), { emitEvent: false });
|
|
10504
|
+
}
|
|
10505
|
+
const form = this.form();
|
|
10506
|
+
if (form && field) {
|
|
10507
|
+
form.setControl(field, this.control, { emitEvent: false });
|
|
10508
|
+
}
|
|
10509
|
+
if (this.showEditor()) {
|
|
10510
|
+
this.control.enable();
|
|
10511
|
+
}
|
|
10512
|
+
else {
|
|
10513
|
+
this.control.disable();
|
|
10514
|
+
}
|
|
10515
|
+
}
|
|
10516
|
+
/**
|
|
10517
|
+
* Switch between the rendered value and the editor.
|
|
10518
|
+
* Does nothing when `[editable]` is false.
|
|
10519
|
+
*/
|
|
10520
|
+
toggleEdit() {
|
|
10521
|
+
if (!this.editable()) {
|
|
10522
|
+
this.edit.set(false);
|
|
10523
|
+
this.control.disable();
|
|
10524
|
+
return;
|
|
10525
|
+
}
|
|
10526
|
+
const next = !this.edit();
|
|
10527
|
+
this.edit.set(next);
|
|
10528
|
+
if (next) {
|
|
10529
|
+
this.control.enable();
|
|
10530
|
+
}
|
|
10531
|
+
else {
|
|
10532
|
+
this.control.disable();
|
|
10533
|
+
}
|
|
10534
|
+
}
|
|
10535
|
+
/**
|
|
10536
|
+
* The rendered value, as stored on the display field.
|
|
10537
|
+
*
|
|
10538
|
+
* Templates pass it through {@link SafeHtmlPipe} to inject it — **trusted,
|
|
10539
|
+
* not sanitized**, because Angular's sanitizer allow-list has no `style` and
|
|
10540
|
+
* would drop the alignment and colours the rich text editor writes. Point
|
|
10541
|
+
* these components at fields your own editor produced and your own API
|
|
10542
|
+
* stored.
|
|
10543
|
+
*/
|
|
10544
|
+
displayValue() {
|
|
10545
|
+
const model = this.model();
|
|
10546
|
+
const field = this.displayField();
|
|
10547
|
+
if (!model || !field)
|
|
10548
|
+
return '';
|
|
10549
|
+
return asText(fieldValues(model)[field]);
|
|
10550
|
+
}
|
|
10551
|
+
/**
|
|
10552
|
+
* Write the editor content back to the model's source field, and persist it
|
|
10553
|
+
* in `dd` mode only.
|
|
10554
|
+
*
|
|
10555
|
+
* In `inline` / `form` modes the model is updated in memory but no request is
|
|
10556
|
+
* sent, leaving the save to the surrounding form. Does nothing without both a
|
|
10557
|
+
* `[model]` and a `[field]`.
|
|
10558
|
+
*/
|
|
10559
|
+
async save() {
|
|
10560
|
+
const model = this.model();
|
|
10561
|
+
const field = this.sourceField();
|
|
10562
|
+
if (!model || !field)
|
|
10563
|
+
return;
|
|
10564
|
+
model.setFV(field, this.control.value);
|
|
10565
|
+
if (this.mode() === 'dd') {
|
|
10566
|
+
await firstValueFrom(model.update([field], { updateModel: true }));
|
|
10567
|
+
// The API re-renders the HTML twin from the source it was just sent, and
|
|
10568
|
+
// `updateModel` writes the response back onto the model -- so the view
|
|
10569
|
+
// this component flips to shows the new rendering, not the old one.
|
|
10570
|
+
this.edit.set(false);
|
|
10571
|
+
this.control.disable();
|
|
10572
|
+
}
|
|
10573
|
+
}
|
|
10574
|
+
/** Whether the model declares a property under that name. */
|
|
10575
|
+
modelHas(name) {
|
|
10576
|
+
const model = this.model();
|
|
10577
|
+
if (!model || !name)
|
|
10578
|
+
return false;
|
|
10579
|
+
return name in fieldValues(model) || !!model.F.get(name);
|
|
10580
|
+
}
|
|
10581
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: FieldEditorBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
10582
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.3", type: FieldEditorBase, isStandalone: true, inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, htmlField: { classPropertyName: "htmlField", publicName: "htmlField", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, edit: { classPropertyName: "edit", publicName: "edit", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, hideLabel: { classPropertyName: "hideLabel", publicName: "hideLabel", isSignal: true, isRequired: false, transformFunction: null }, hideButton: { classPropertyName: "hideButton", publicName: "hideButton", isSignal: true, isRequired: false, transformFunction: null }, fc: { classPropertyName: "fc", publicName: "fc", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { edit: "editChange", changed: "changed" }, ngImport: i0 });
|
|
10583
|
+
}
|
|
10584
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: FieldEditorBase, decorators: [{
|
|
10585
|
+
type: Directive
|
|
10586
|
+
}], propDecorators: { model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: false }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }], htmlField: [{ type: i0.Input, args: [{ isSignal: true, alias: "htmlField", required: false }] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], edit: [{ type: i0.Input, args: [{ isSignal: true, alias: "edit", required: false }] }, { type: i0.Output, args: ["editChange"] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], hideLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideLabel", required: false }] }], hideButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideButton", required: false }] }], fc: [{ type: i0.Input, args: [{ isSignal: true, alias: "fc", required: false }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }] } });
|
|
10587
|
+
|
|
10311
10588
|
// By default, Underscore uses ERB-style template delimiters, change the
|
|
10312
10589
|
// following template settings to use alternative delimiters.
|
|
10313
10590
|
const settings = {
|
|
@@ -10490,5 +10767,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImpor
|
|
|
10490
10767
|
* Generated bundle index. Do not edit.
|
|
10491
10768
|
*/
|
|
10492
10769
|
|
|
10493
|
-
export { AuthInterceptor, AuthServiceBase, BanAdapter, BaseFieldManager, BootstrapDataDisplayConfig, BreadcrumbComponent, ChoicePipe, Collection, CollectionMock, DATA_API_URL, DATA_AUTH_PARAMS, DATA_AUTH_SERVICE, DATA_AUTH_URLS, DATA_AUTH_USER_SERVICE, DATA_DISPLAY_CONFIG, DATA_MAX_TRANSFERSTATE_TIME, DATA_MESSAGE_SOUNDS, DEFAULT_TIMEOUTS, DataBackend, DataMessageService, DataModel, DataUploaderService, DispeditComponent, FactorPipe, FactorcPipe, FkselectComponent, FlagsComponent, Jwt, Link, M2mselectComponent, Message, MessageZoneComponent, ModelList, ModelListAutocompleteFilter, ModelListAutocompleteMultiFilter, ModelListDateFilter, ModelListDatetimeFilter, ModelListDatetimerangeFilter, ModelListFieldHeaderComponent, ModelListFieldsSelectorComponent, ModelListFilter, ModelListFilterGroup, ModelListFilters, ModelListFiltersComponent, ModelListFiltersSelectComponent, ModelListFlagsFilter, ModelListGeodistanceFilter, ModelListNumberFilter, ModelListNumberOperations, ModelListPaginatorComponent, ModelListSelectFilter, ModelListSelectMultiFilter, ModelListService, ModelListSorterComponent, ModelListTextFilter, ModelListTreeFilter, NavDriver, NgFileDropDirective, NgFileSelectDirective, NgxUploaderModule, PChoicePipe, PFactorPipe, PFactorcPipe, Queryset, RData, STATUS, SafeDeleteComponent, TabMemoryService, UpdateComponent, UpdateService, UploadStatus, asText, booleanField, charField, computedField, dateField, datetimeField, decimalField, detailsField, emailField, fieldValues, floatField, foreignKeyField, humanizeBytes, installEditorDomShims, integerField, isValue, manyToManyField, passwordField, primaryField, reverseForeignKeyField, slugify, strToNumber, textField, tmpl, uniqueId };
|
|
10770
|
+
export { AuthInterceptor, AuthServiceBase, BanAdapter, BaseFieldManager, BootstrapDataDisplayConfig, BreadcrumbComponent, ChoicePipe, Collection, CollectionMock, DATA_API_URL, DATA_AUTH_PARAMS, DATA_AUTH_SERVICE, DATA_AUTH_URLS, DATA_AUTH_USER_SERVICE, DATA_DISPLAY_CONFIG, DATA_MAX_TRANSFERSTATE_TIME, DATA_MESSAGE_SOUNDS, DEFAULT_TIMEOUTS, DataBackend, DataMessageService, DataModel, DataUploaderService, DispeditComponent, FactorPipe, FactorcPipe, FieldEditorBase, FkselectComponent, FlagsComponent, Jwt, Link, M2mselectComponent, Message, MessageZoneComponent, ModelList, ModelListAutocompleteFilter, ModelListAutocompleteMultiFilter, ModelListDateFilter, ModelListDatetimeFilter, ModelListDatetimerangeFilter, ModelListFieldHeaderComponent, ModelListFieldsSelectorComponent, ModelListFilter, ModelListFilterGroup, ModelListFilters, ModelListFiltersComponent, ModelListFiltersSelectComponent, ModelListFlagsFilter, ModelListGeodistanceFilter, ModelListNumberFilter, ModelListNumberOperations, ModelListPaginatorComponent, ModelListSelectFilter, ModelListSelectMultiFilter, ModelListService, ModelListSorterComponent, ModelListTextFilter, ModelListTreeFilter, NavDriver, NgFileDropDirective, NgFileSelectDirective, NgxUploaderModule, PChoicePipe, PFactorPipe, PFactorcPipe, Queryset, RData, STATUS, SafeDeleteComponent, SafeHtmlPipe, TabMemoryService, UpdateComponent, UpdateService, UploadStatus, asText, booleanField, charField, computedField, dateField, datetimeField, decimalField, detailsField, emailField, fieldValues, floatField, foreignKeyField, humanizeBytes, installEditorDomShims, integerField, isValue, manyToManyField, passwordField, primaryField, reverseForeignKeyField, slugify, strToNumber, textField, tmpl, uniqueId };
|
|
10494
10771
|
//# sourceMappingURL=solidev-data.mjs.map
|