@dflat-core/web 1.7.2066 → 1.7.2067
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/fesm2022/dflat-core-web-system-model.mjs +17 -1
- package/fesm2022/dflat-core-web-system-model.mjs.map +1 -1
- package/fesm2022/dflat-core-web-system-ux.mjs +490 -14
- package/fesm2022/dflat-core-web-system-ux.mjs.map +1 -1
- package/package.json +1 -1
- package/types/dflat-core-web-system-model.d.ts +43 -0
- package/types/dflat-core-web-system-ux.d.ts +42 -4
|
@@ -8,9 +8,9 @@ import * as i0 from "@angular/core";
|
|
|
8
8
|
import { ChangeDetectionStrategy, Component, Directive, EventEmitter, Inject, Injectable, InjectionToken, Input, LOCALE_ID, NgModule, Optional, Output, ViewChild, ViewEncapsulation, effect, inject, runInInjectionContext, viewChild } from "@angular/core";
|
|
9
9
|
import { Observable, Subject, combineLatest, forkJoin, map, of, takeUntil } from "rxjs";
|
|
10
10
|
import { catchError, filter, map as map$1, switchMap, take, takeUntil as takeUntil$1 } from "rxjs/operators";
|
|
11
|
-
import { ActivationResults, CustomFieldGroupTypes, FieldColumnSpans, FieldConditionalResults, FieldFilterTypes, FileTypes, ImageUploadEventType, MetaEntityTypes, PresentationProfilePurposes, PresentationProfileScopes, SystemModelModule } from "@dflat-core/web/system-model";
|
|
11
|
+
import { ActivationResults, ColumnDisplayTypes, CustomFieldGroupTypes, FieldColumnSpans, FieldConditionalResults, FieldFilterTypes, FileTypes, ImageUploadEventType, MetaEntityTypes, PresentationProfilePurposes, PresentationProfileScopes, SystemModelModule } from "@dflat-core/web/system-model";
|
|
12
12
|
import * as i2$2 from "@angular/common";
|
|
13
|
-
import { CommonModule, DatePipe, registerLocaleData } from "@angular/common";
|
|
13
|
+
import { CommonModule, DatePipe, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, registerLocaleData } from "@angular/common";
|
|
14
14
|
import * as i2$3 from "@angular/forms";
|
|
15
15
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from "@angular/forms";
|
|
16
16
|
import * as i3$1 from "@angular/cdk/drag-drop";
|
|
@@ -88,10 +88,7 @@ var PresentationProfileTransformer = class PresentationProfileTransformer {
|
|
|
88
88
|
...template,
|
|
89
89
|
Name: isImage ? "" : displayLabel,
|
|
90
90
|
FieldName: displayLabel,
|
|
91
|
-
Display:
|
|
92
|
-
...template.Display ?? {},
|
|
93
|
-
type: "text"
|
|
94
|
-
}
|
|
91
|
+
Display: template.Display ?? { type: "text" }
|
|
95
92
|
};
|
|
96
93
|
}
|
|
97
94
|
return {
|
|
@@ -132,9 +129,27 @@ var PresentationProfileTransformer = class PresentationProfileTransformer {
|
|
|
132
129
|
IsLocked: item.IsLocked ?? false,
|
|
133
130
|
IsAllowed: item.IsAllowed ?? null,
|
|
134
131
|
ColumnSourceType: item.ColumnSourceType ?? 1,
|
|
135
|
-
CustomFieldId: item.CustomFieldId ?? null
|
|
132
|
+
CustomFieldId: item.CustomFieldId ?? null,
|
|
133
|
+
...PresentationProfileTransformer.displayOf(item)
|
|
136
134
|
}));
|
|
137
135
|
}
|
|
136
|
+
static displayOf(item) {
|
|
137
|
+
return {
|
|
138
|
+
ColumnDisplayType: item.ColumnDisplayType ?? null,
|
|
139
|
+
Currency: item.Currency ?? null,
|
|
140
|
+
CurrencyPropertyName: item.CurrencyPropertyName ?? null,
|
|
141
|
+
Multiplier: item.Multiplier ?? null,
|
|
142
|
+
MinIntegerDigits: item.MinIntegerDigits ?? null,
|
|
143
|
+
MinFractionDigits: item.MinFractionDigits ?? null,
|
|
144
|
+
MaxFractionDigits: item.MaxFractionDigits ?? null,
|
|
145
|
+
DisplayFormat: item.DisplayFormat ?? null,
|
|
146
|
+
NullCaseText: item.NullCaseText ?? null,
|
|
147
|
+
HandleError: item.HandleError ?? null,
|
|
148
|
+
DisplayWidth: item.DisplayWidth ?? null,
|
|
149
|
+
BaseUrl: item.BaseUrl ?? null,
|
|
150
|
+
CompletingCharacter: item.CompletingCharacter ?? null
|
|
151
|
+
};
|
|
152
|
+
}
|
|
138
153
|
static splitForExport(items) {
|
|
139
154
|
const cols = [];
|
|
140
155
|
const ids = [];
|
|
@@ -20239,6 +20254,426 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
20239
20254
|
],
|
|
20240
20255
|
propDecorators: { newCompanySelected: [{ type: Output }] }
|
|
20241
20256
|
});
|
|
20257
|
+
const COMMON = ["nullCaseText", "handleError"];
|
|
20258
|
+
const COLUMN_DISPLAY_TYPES = [
|
|
20259
|
+
{
|
|
20260
|
+
type: ColumnDisplayTypes.Text,
|
|
20261
|
+
label: "Texte",
|
|
20262
|
+
short: "Texte",
|
|
20263
|
+
icon: "font",
|
|
20264
|
+
options: ["nullCaseText"]
|
|
20265
|
+
},
|
|
20266
|
+
{
|
|
20267
|
+
type: ColumnDisplayTypes.Number,
|
|
20268
|
+
label: "Nombre",
|
|
20269
|
+
short: "Nombre",
|
|
20270
|
+
icon: "hashtag",
|
|
20271
|
+
options: [
|
|
20272
|
+
"digits",
|
|
20273
|
+
"multiplier",
|
|
20274
|
+
...COMMON
|
|
20275
|
+
]
|
|
20276
|
+
},
|
|
20277
|
+
{
|
|
20278
|
+
type: ColumnDisplayTypes.Money,
|
|
20279
|
+
label: "Montant",
|
|
20280
|
+
short: "Montant",
|
|
20281
|
+
icon: "eur",
|
|
20282
|
+
options: ["currency", ...COMMON]
|
|
20283
|
+
},
|
|
20284
|
+
{
|
|
20285
|
+
type: ColumnDisplayTypes.Percent,
|
|
20286
|
+
label: "Pourcentage",
|
|
20287
|
+
short: "%",
|
|
20288
|
+
icon: "percent",
|
|
20289
|
+
options: [
|
|
20290
|
+
"digits",
|
|
20291
|
+
"multiplier",
|
|
20292
|
+
...COMMON
|
|
20293
|
+
]
|
|
20294
|
+
},
|
|
20295
|
+
{
|
|
20296
|
+
type: ColumnDisplayTypes.Date,
|
|
20297
|
+
label: "Date",
|
|
20298
|
+
short: "Date",
|
|
20299
|
+
icon: "calendar",
|
|
20300
|
+
options: ["format", "nullCaseText"]
|
|
20301
|
+
},
|
|
20302
|
+
{
|
|
20303
|
+
type: ColumnDisplayTypes.DateTime,
|
|
20304
|
+
label: "Date et heure",
|
|
20305
|
+
short: "Date/h",
|
|
20306
|
+
icon: "clock-o",
|
|
20307
|
+
options: ["format", "nullCaseText"]
|
|
20308
|
+
},
|
|
20309
|
+
{
|
|
20310
|
+
type: ColumnDisplayTypes.Boolean,
|
|
20311
|
+
label: "Oui / Non",
|
|
20312
|
+
short: "Oui/Non",
|
|
20313
|
+
icon: "check-square-o",
|
|
20314
|
+
options: ["nullCaseText"]
|
|
20315
|
+
},
|
|
20316
|
+
{
|
|
20317
|
+
type: ColumnDisplayTypes.EnumImage,
|
|
20318
|
+
label: "Icône du type énuméré",
|
|
20319
|
+
short: "Icône",
|
|
20320
|
+
icon: "picture-o",
|
|
20321
|
+
options: [
|
|
20322
|
+
"enum",
|
|
20323
|
+
"width",
|
|
20324
|
+
"nullCaseText"
|
|
20325
|
+
]
|
|
20326
|
+
},
|
|
20327
|
+
{
|
|
20328
|
+
type: ColumnDisplayTypes.WideEnumImage,
|
|
20329
|
+
label: "Grande icône du type énuméré",
|
|
20330
|
+
short: "Icône L",
|
|
20331
|
+
icon: "picture-o",
|
|
20332
|
+
options: [
|
|
20333
|
+
"enum",
|
|
20334
|
+
"width",
|
|
20335
|
+
"nullCaseText"
|
|
20336
|
+
]
|
|
20337
|
+
},
|
|
20338
|
+
{
|
|
20339
|
+
type: ColumnDisplayTypes.ImageFile,
|
|
20340
|
+
label: "Image (fichier)",
|
|
20341
|
+
short: "Image",
|
|
20342
|
+
icon: "file-image-o",
|
|
20343
|
+
options: ["nullCaseText"]
|
|
20344
|
+
},
|
|
20345
|
+
{
|
|
20346
|
+
type: ColumnDisplayTypes.Base64Image,
|
|
20347
|
+
label: "Image (base64)",
|
|
20348
|
+
short: "Image",
|
|
20349
|
+
icon: "file-image-o",
|
|
20350
|
+
options: ["nullCaseText"]
|
|
20351
|
+
},
|
|
20352
|
+
{
|
|
20353
|
+
type: ColumnDisplayTypes.Url,
|
|
20354
|
+
label: "Lien",
|
|
20355
|
+
short: "Lien",
|
|
20356
|
+
icon: "link",
|
|
20357
|
+
options: ["baseUrl", "nullCaseText"]
|
|
20358
|
+
},
|
|
20359
|
+
{
|
|
20360
|
+
type: ColumnDisplayTypes.FixedSizeInteger,
|
|
20361
|
+
label: "Entier de taille fixe",
|
|
20362
|
+
short: "0042",
|
|
20363
|
+
icon: "sort-numeric-asc",
|
|
20364
|
+
options: ["fixedSize", "nullCaseText"]
|
|
20365
|
+
}
|
|
20366
|
+
];
|
|
20367
|
+
function getColumnDisplayType(type) {
|
|
20368
|
+
return type === null || type === void 0 ? void 0 : COLUMN_DISPLAY_TYPES.find((t) => t.type === type);
|
|
20369
|
+
}
|
|
20370
|
+
const COLUMN_DISPLAY_FIELDS = [
|
|
20371
|
+
"ColumnDisplayType",
|
|
20372
|
+
"Currency",
|
|
20373
|
+
"CurrencyPropertyName",
|
|
20374
|
+
"Multiplier",
|
|
20375
|
+
"MinIntegerDigits",
|
|
20376
|
+
"MinFractionDigits",
|
|
20377
|
+
"MaxFractionDigits",
|
|
20378
|
+
"DisplayFormat",
|
|
20379
|
+
"NullCaseText",
|
|
20380
|
+
"HandleError",
|
|
20381
|
+
"DisplayWidth",
|
|
20382
|
+
"BaseUrl",
|
|
20383
|
+
"CompletingCharacter"
|
|
20384
|
+
];
|
|
20385
|
+
function describeColumnDisplay(item) {
|
|
20386
|
+
const info = getColumnDisplayType(item.ColumnDisplayType);
|
|
20387
|
+
if (!info) return "Affichage par défaut (selon le type de la colonne)";
|
|
20388
|
+
const parts = [info.label];
|
|
20389
|
+
if (info.options.includes("digits") && (item.MinFractionDigits != null || item.MaxFractionDigits != null)) parts.push(`${item.MinFractionDigits ?? 0} à ${item.MaxFractionDigits ?? item.MinFractionDigits ?? 3} décimales`);
|
|
20390
|
+
if (info.options.includes("multiplier") && item.Multiplier != null && item.Multiplier !== 1) parts.push(`× ${item.Multiplier}`);
|
|
20391
|
+
if (info.options.includes("currency")) parts.push(item.Currency ? `devise ${item.Currency}` : item.CurrencyPropertyName ? `devise de ${item.CurrencyPropertyName}` : "devise EUR");
|
|
20392
|
+
if (info.options.includes("format") && item.DisplayFormat) parts.push(item.DisplayFormat);
|
|
20393
|
+
if (item.NullCaseText) parts.push(`vide : « ${item.NullCaseText} »`);
|
|
20394
|
+
if (item.HandleError) parts.push("vide en évidence");
|
|
20395
|
+
return parts.join(" — ");
|
|
20396
|
+
}
|
|
20397
|
+
var ColumnDisplayDialogComponent = class ColumnDisplayDialogComponent {
|
|
20398
|
+
constructor(locale) {
|
|
20399
|
+
this.locale = locale;
|
|
20400
|
+
this.naturalLabel = "";
|
|
20401
|
+
this.defaultDisplayType = null;
|
|
20402
|
+
this.enumEntityName = null;
|
|
20403
|
+
this.columns = [];
|
|
20404
|
+
this.isPerimeter = false;
|
|
20405
|
+
this.readonly = false;
|
|
20406
|
+
this.confirmed = new EventEmitter();
|
|
20407
|
+
this.cancelled = new EventEmitter();
|
|
20408
|
+
this.types = COLUMN_DISPLAY_TYPES;
|
|
20409
|
+
this.currencyMode = "fixed";
|
|
20410
|
+
this.model = {};
|
|
20411
|
+
this.dateFormats = [
|
|
20412
|
+
"dd/MM/yyyy",
|
|
20413
|
+
"dd/MM/yy",
|
|
20414
|
+
"EEEE d MMMM yyyy",
|
|
20415
|
+
"MMMM yyyy"
|
|
20416
|
+
];
|
|
20417
|
+
this.dateTimeFormats = [
|
|
20418
|
+
"dd/MM/yyyy HH:mm:ss",
|
|
20419
|
+
"dd/MM/yyyy HH:mm",
|
|
20420
|
+
"HH:mm"
|
|
20421
|
+
];
|
|
20422
|
+
}
|
|
20423
|
+
ngOnInit() {
|
|
20424
|
+
this.model = { ...this.item };
|
|
20425
|
+
if (this.model.ColumnDisplayType === null || this.model.ColumnDisplayType === void 0) this.model.ColumnDisplayType = this.defaultDisplayType ?? ColumnDisplayTypes.Text;
|
|
20426
|
+
this.currencyMode = this.model.CurrencyPropertyName && !this.model.Currency ? "column" : "fixed";
|
|
20427
|
+
}
|
|
20428
|
+
get selectedType() {
|
|
20429
|
+
return getColumnDisplayType(this.model.ColumnDisplayType);
|
|
20430
|
+
}
|
|
20431
|
+
has(option) {
|
|
20432
|
+
return !!this.selectedType?.options.includes(option);
|
|
20433
|
+
}
|
|
20434
|
+
isDefault(type) {
|
|
20435
|
+
return type.type === this.defaultDisplayType;
|
|
20436
|
+
}
|
|
20437
|
+
selectType(type) {
|
|
20438
|
+
if (this.readonly) return;
|
|
20439
|
+
this.model.ColumnDisplayType = type.type;
|
|
20440
|
+
}
|
|
20441
|
+
get isPercent() {
|
|
20442
|
+
return this.model.ColumnDisplayType === ColumnDisplayTypes.Percent;
|
|
20443
|
+
}
|
|
20444
|
+
get isDateTime() {
|
|
20445
|
+
return this.model.ColumnDisplayType === ColumnDisplayTypes.DateTime;
|
|
20446
|
+
}
|
|
20447
|
+
get defaultDateFormat() {
|
|
20448
|
+
return this.isDateTime ? "dd/MM/yyyy HH:mm:ss" : "dd/MM/yyyy";
|
|
20449
|
+
}
|
|
20450
|
+
get preview() {
|
|
20451
|
+
try {
|
|
20452
|
+
const m = this.model;
|
|
20453
|
+
const multiplier = m.Multiplier ?? 1;
|
|
20454
|
+
const digits = this.digitsFormat;
|
|
20455
|
+
switch (m.ColumnDisplayType) {
|
|
20456
|
+
case ColumnDisplayTypes.Number: return formatNumber(1234.5678 * multiplier, this.locale, digits ?? "1.0-3");
|
|
20457
|
+
case ColumnDisplayTypes.Percent: return formatPercent((multiplier !== 1 ? 12.345 : .12345) * multiplier, this.locale, digits ?? "1.0-3");
|
|
20458
|
+
case ColumnDisplayTypes.Money: {
|
|
20459
|
+
const code = this.currencyMode === "fixed" ? m.Currency || "EUR" : "EUR";
|
|
20460
|
+
return formatCurrency(1234.5, this.locale, getCurrencySymbol(code, "wide", this.locale), code) + (this.currencyMode === "column" && m.CurrencyPropertyName ? ` (devise de ${m.CurrencyPropertyName})` : "");
|
|
20461
|
+
}
|
|
20462
|
+
case ColumnDisplayTypes.Date:
|
|
20463
|
+
case ColumnDisplayTypes.DateTime: return formatDate(/* @__PURE__ */ new Date(), m.DisplayFormat || this.defaultDateFormat, this.locale);
|
|
20464
|
+
case ColumnDisplayTypes.Boolean: return "OUI / NON";
|
|
20465
|
+
case ColumnDisplayTypes.FixedSizeInteger: return "42".padStart(Math.max(m.DisplayWidth ?? 0, 2), m.CompletingCharacter || "0");
|
|
20466
|
+
case ColumnDisplayTypes.Url: return `${m.BaseUrl || "/"}/42`.replace("//", "/");
|
|
20467
|
+
case ColumnDisplayTypes.EnumImage:
|
|
20468
|
+
case ColumnDisplayTypes.WideEnumImage: return this.enumEntityName ? `Icône de la valeur (${this.enumEntityName})` : "Icône de la valeur";
|
|
20469
|
+
case ColumnDisplayTypes.ImageFile:
|
|
20470
|
+
case ColumnDisplayTypes.Base64Image: return "Image";
|
|
20471
|
+
default: return "Texte de la colonne";
|
|
20472
|
+
}
|
|
20473
|
+
} catch {
|
|
20474
|
+
return "Format invalide";
|
|
20475
|
+
}
|
|
20476
|
+
}
|
|
20477
|
+
get digitsFormat() {
|
|
20478
|
+
const m = this.model;
|
|
20479
|
+
if (m.MinIntegerDigits == null && m.MinFractionDigits == null && m.MaxFractionDigits == null) return null;
|
|
20480
|
+
const min = m.MinFractionDigits ?? 0;
|
|
20481
|
+
const max = Math.max(min, m.MaxFractionDigits ?? Math.max(min, 3));
|
|
20482
|
+
return `${m.MinIntegerDigits ?? 1}.${min}-${max}`;
|
|
20483
|
+
}
|
|
20484
|
+
apply() {
|
|
20485
|
+
if (this.readonly) {
|
|
20486
|
+
this.cancel();
|
|
20487
|
+
return;
|
|
20488
|
+
}
|
|
20489
|
+
const result = {
|
|
20490
|
+
...this.item,
|
|
20491
|
+
Label: this.model.Label || null,
|
|
20492
|
+
IsLocked: this.model.IsLocked,
|
|
20493
|
+
IsAllowed: this.model.IsAllowed
|
|
20494
|
+
};
|
|
20495
|
+
COLUMN_DISPLAY_FIELDS.forEach((field) => result[field] = null);
|
|
20496
|
+
result.ColumnDisplayType = this.model.ColumnDisplayType;
|
|
20497
|
+
const keep = (field) => result[field] = this.emptyToNull(this.model[field]);
|
|
20498
|
+
if (this.has("digits")) {
|
|
20499
|
+
keep("MinIntegerDigits");
|
|
20500
|
+
keep("MinFractionDigits");
|
|
20501
|
+
keep("MaxFractionDigits");
|
|
20502
|
+
}
|
|
20503
|
+
if (this.has("multiplier")) keep("Multiplier");
|
|
20504
|
+
if (this.has("currency")) {
|
|
20505
|
+
if (this.currencyMode === "fixed") result.Currency = this.emptyToNull(this.model.Currency?.trim().toUpperCase());
|
|
20506
|
+
else keep("CurrencyPropertyName");
|
|
20507
|
+
}
|
|
20508
|
+
if (this.has("format")) keep("DisplayFormat");
|
|
20509
|
+
if (this.has("nullCaseText")) keep("NullCaseText");
|
|
20510
|
+
if (this.has("handleError")) result.HandleError = this.model.HandleError ? true : null;
|
|
20511
|
+
if (this.has("width") || this.has("fixedSize")) keep("DisplayWidth");
|
|
20512
|
+
if (this.has("fixedSize")) keep("CompletingCharacter");
|
|
20513
|
+
if (this.has("baseUrl")) keep("BaseUrl");
|
|
20514
|
+
this.confirmed.emit(result);
|
|
20515
|
+
}
|
|
20516
|
+
cancel() {
|
|
20517
|
+
this.cancelled.emit();
|
|
20518
|
+
}
|
|
20519
|
+
emptyToNull(value) {
|
|
20520
|
+
return value === void 0 || value === null || value === "" ? null : value;
|
|
20521
|
+
}
|
|
20522
|
+
static {
|
|
20523
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
20524
|
+
minVersion: "12.0.0",
|
|
20525
|
+
version: "22.2.1",
|
|
20526
|
+
ngImport: i0,
|
|
20527
|
+
type: ColumnDisplayDialogComponent,
|
|
20528
|
+
deps: [{ token: LOCALE_ID }],
|
|
20529
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
20530
|
+
});
|
|
20531
|
+
}
|
|
20532
|
+
static {
|
|
20533
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
20534
|
+
minVersion: "17.0.0",
|
|
20535
|
+
version: "22.2.1",
|
|
20536
|
+
type: ColumnDisplayDialogComponent,
|
|
20537
|
+
isStandalone: true,
|
|
20538
|
+
selector: "alg-column-display-dialog",
|
|
20539
|
+
inputs: {
|
|
20540
|
+
item: "item",
|
|
20541
|
+
naturalLabel: "naturalLabel",
|
|
20542
|
+
defaultDisplayType: "defaultDisplayType",
|
|
20543
|
+
enumEntityName: "enumEntityName",
|
|
20544
|
+
columns: "columns",
|
|
20545
|
+
isPerimeter: "isPerimeter",
|
|
20546
|
+
readonly: "readonly"
|
|
20547
|
+
},
|
|
20548
|
+
outputs: {
|
|
20549
|
+
confirmed: "confirmed",
|
|
20550
|
+
cancelled: "cancelled"
|
|
20551
|
+
},
|
|
20552
|
+
ngImport: i0,
|
|
20553
|
+
template: "<div class=\"cdd-header\">\r\n <h4 class=\"cdd-title\">\r\n Colonne <span class=\"cdd-title__key\">{{ item.ColumnKey }}</span>\r\n </h4>\r\n <button class=\"cdd-icon-btn\" type=\"button\" (click)=\"cancel()\" aria-label=\"Fermer\">✕</button>\r\n</div>\r\n\r\n<div class=\"cdd-body\">\r\n <!-- Libellé -->\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-label\">Libellé</label>\r\n <input id=\"cdd-label\" class=\"cdd-input\" type=\"text\" [(ngModel)]=\"model.Label\" [placeholder]=\"naturalLabel || item.ColumnKey\" [disabled]=\"readonly\">\r\n <span class=\"cdd-hint\">Vide : libellé de la colonne ({{ naturalLabel || item.ColumnKey }}).</span>\r\n </div>\r\n\r\n <!-- Type d'affichage -->\r\n <div class=\"cdd-field\">\r\n <span class=\"cdd-label\">Affichage</span>\r\n <div class=\"cdd-types\" role=\"radiogroup\" aria-label=\"Type d'affichage\">\r\n @for (type of types; track type.type) {\r\n <button type=\"button\" class=\"cdd-type\" role=\"radio\"\r\n [class.cdd-type--active]=\"model.ColumnDisplayType === type.type\"\r\n [attr.aria-checked]=\"model.ColumnDisplayType === type.type\"\r\n [disabled]=\"readonly\"\r\n (click)=\"selectType(type)\">\r\n <i class=\"fa fa-{{ type.icon }}\"></i>\r\n <span class=\"cdd-type__label\">{{ type.label }}</span>\r\n @if (isDefault(type)) {\r\n <span class=\"cdd-type__default\" title=\"Affichage par défaut selon le type de la colonne\">défaut</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Options du type -->\r\n <div class=\"cdd-options\">\r\n @if (has('digits')) {\r\n <div class=\"cdd-row\">\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-minint\">Chiffres entiers min.</label>\r\n <input id=\"cdd-minint\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.MinIntegerDigits\" placeholder=\"1\" [disabled]=\"readonly\">\r\n </div>\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-minfrac\">Décimales min.</label>\r\n <input id=\"cdd-minfrac\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.MinFractionDigits\" placeholder=\"0\" [disabled]=\"readonly\">\r\n </div>\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-maxfrac\">Décimales max.</label>\r\n <input id=\"cdd-maxfrac\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.MaxFractionDigits\" placeholder=\"3\" [disabled]=\"readonly\">\r\n </div>\r\n @if (has('multiplier')) {\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-mult\">Multiplicateur</label>\r\n <input id=\"cdd-mult\" class=\"cdd-input\" type=\"number\" step=\"any\" [(ngModel)]=\"model.Multiplier\" placeholder=\"1\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n </div>\r\n @if (isPercent) {\r\n <span class=\"cdd-hint\">Valeur enregistrée en pourcentage (12,5 pour 12,5 %) : multiplicateur 0,01.</span>\r\n }\r\n }\r\n\r\n @if (has('currency')) {\r\n <div class=\"cdd-field\">\r\n <span class=\"cdd-label\">Devise</span>\r\n <div class=\"cdd-choice\">\r\n <label><input type=\"radio\" name=\"cdd-currency\" value=\"fixed\" [(ngModel)]=\"currencyMode\" [disabled]=\"readonly\"> Devise fixe</label>\r\n <input class=\"cdd-input cdd-input--currency\" type=\"text\" maxlength=\"3\" [(ngModel)]=\"model.Currency\" placeholder=\"EUR\"\r\n [disabled]=\"readonly || currencyMode !== 'fixed'\" aria-label=\"Code de la devise\">\r\n </div>\r\n <div class=\"cdd-choice\">\r\n <label><input type=\"radio\" name=\"cdd-currency\" value=\"column\" [(ngModel)]=\"currencyMode\" [disabled]=\"readonly\"> Devise de la ligne, colonne</label>\r\n <select class=\"cdd-input\" [(ngModel)]=\"model.CurrencyPropertyName\" [disabled]=\"readonly || currencyMode !== 'column'\" aria-label=\"Colonne de la devise\">\r\n <option [ngValue]=\"null\">—</option>\r\n @for (column of columns; track column.key) {\r\n <option [ngValue]=\"column.key\">{{ column.label }} ({{ column.key }})</option>\r\n }\r\n </select>\r\n </div>\r\n <span class=\"cdd-hint\">Sans devise : EUR.</span>\r\n </div>\r\n }\r\n\r\n @if (has('format')) {\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-format\">Format</label>\r\n <input id=\"cdd-format\" class=\"cdd-input\" type=\"text\" [(ngModel)]=\"model.DisplayFormat\" [placeholder]=\"defaultDateFormat\" [disabled]=\"readonly\">\r\n <div class=\"cdd-chips\">\r\n @for (format of (isDateTime ? dateTimeFormats : dateFormats); track format) {\r\n <button type=\"button\" class=\"cdd-chip\" [disabled]=\"readonly\" (click)=\"model.DisplayFormat = format\">{{ format }}</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (has('enum')) {\r\n <div class=\"cdd-field\">\r\n <span class=\"cdd-label\">Type énuméré</span>\r\n @if (enumEntityName) {\r\n <span class=\"cdd-value\">{{ enumEntityName }}</span>\r\n <span class=\"cdd-hint\">Icônes simg/<Module>/<Type>/<Valeur>.svg ; infobulle : libellé de la valeur.</span>\r\n } @else {\r\n <span class=\"cdd-hint cdd-hint--warn\">Pas de clé étrangère vers une table Enum… : le type vient de l'attribut Enum de la propriété ; sans lui, la colonne s'affiche en texte.</span>\r\n }\r\n </div>\r\n }\r\n\r\n @if (has('width')) {\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-width\">Largeur (px)</label>\r\n <input id=\"cdd-width\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.DisplayWidth\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n\r\n @if (has('fixedSize')) {\r\n <div class=\"cdd-row\">\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-size\">Taille</label>\r\n <input id=\"cdd-size\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.DisplayWidth\" placeholder=\"10\" [disabled]=\"readonly\">\r\n </div>\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-char\">Caractère de complément</label>\r\n <input id=\"cdd-char\" class=\"cdd-input\" type=\"text\" maxlength=\"1\" [(ngModel)]=\"model.CompletingCharacter\" placeholder=\"0\" [disabled]=\"readonly\">\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (has('baseUrl')) {\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-url\">Adresse de base</label>\r\n <input id=\"cdd-url\" class=\"cdd-input\" type=\"text\" [(ngModel)]=\"model.BaseUrl\" placeholder=\"/\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n\r\n @if (has('nullCaseText') || has('handleError')) {\r\n <div class=\"cdd-row\">\r\n @if (has('nullCaseText')) {\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-null\">Texte si vide</label>\r\n <input id=\"cdd-null\" class=\"cdd-input\" type=\"text\" maxlength=\"100\" [(ngModel)]=\"model.NullCaseText\" placeholder=\"(rien)\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n @if (has('handleError')) {\r\n <label class=\"cdd-check\">\r\n <input type=\"checkbox\" [(ngModel)]=\"model.HandleError\" [disabled]=\"readonly\"> Valeur vide en évidence (rouge)\r\n </label>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Aperçu -->\r\n <div class=\"cdd-preview\">\r\n <span class=\"cdd-label\">Aperçu</span>\r\n <span class=\"cdd-preview__value\">{{ preview }}</span>\r\n </div>\r\n\r\n <!-- Drapeaux -->\r\n <div class=\"cdd-row cdd-flags\">\r\n <label class=\"cdd-check\"><input type=\"checkbox\" [(ngModel)]=\"model.IsLocked\" [disabled]=\"readonly\"> Verrouillée (ne peut pas être retirée)</label>\r\n @if (isPerimeter) {\r\n <label class=\"cdd-check\"><input type=\"checkbox\" [(ngModel)]=\"model.IsAllowed\" [disabled]=\"readonly\"> Autorisée</label>\r\n }\r\n </div>\r\n</div>\r\n\r\n<div class=\"cdd-footer\">\r\n <button class=\"cdd-btn cdd-btn--secondary\" type=\"button\" (click)=\"cancel()\">Annuler</button>\r\n @if (!readonly) {\r\n <button class=\"cdd-btn cdd-btn--primary\" type=\"button\" (click)=\"apply()\">Appliquer</button>\r\n }\r\n</div>\r\n",
|
|
20554
|
+
styles: [".home-page{font-family:Open sans,sans-serif;background:#fff;-webkit-font-smoothing:antialiased;height:100%;width:100%;padding:16px}.main-container{margin:0 50px}.main-container-modal{width:calc(100% - 50px);margin:10px 25px 0}.moyen-titre{font-weight:700;font-size:24px;color:#4d5a81;margin:8px 0;border-bottom:solid 1px #DBE4FF}.grand-titre{font-weight:700;font-size:28px;color:#4d5a81;margin:0 0 8px}.petit-titre{font-weight:700;font-size:16px;color:#4d5a81;margin:0 0 8px}.petit-titre.underlined{border-bottom:solid 1px #4D5A81}.paragraph{padding:0 15px}.paragraph-highlight{padding:5px 15px 0 12px;border-left:5px solid #8EA7F8;border-bottom:1px solid #DBE4FF;border-top:1px solid #DBE4FF;border-right:1px solid #DBE4FF;background-color:#f7faff}.highlight{background-color:#f7faff;border:1px solid #DBE4FF;border-radius:5px;padding:15px;color:#3c5dc4;margin:0 0 16px}.highlight p{margin-bottom:0}.highlight:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"53.294\" height=\"50.629\" viewBox=\"0 0 53.294 50.629\">%0D%0A <path id=\"allerg\\e8ne\" d=\"M830.494,25.793l-5.814,6.783.727,8.963-8.721,1.938-4.6,7.752L803.847,47.6l-8.236,3.634-4.6-7.51-8.721-1.938.727-8.963L777.2,26.035l5.814-6.783-.727-8.963,8.721-1.938L795.61.6l8.236,3.634L812.083.6l4.6,7.752,8.721,1.938-.727,8.963Zm-24.467,2.422V13.681h-4.845V28.216Zm0,9.69V33.06h-4.845v4.845Z\" transform=\"translate(-777.2 -0.6)\"/>%0D%0A</svg>%0D%0A');background-repeat:no-repeat;margin:0 8px 24px 0;filter:invert(31%) sepia(51%) saturate(1323%) hue-rotate(199deg) brightness(99%) contrast(94%)}.notification{background-color:#dbe4ff;border:1px solid #C4D0F9;border-radius:5px;color:#4d5a81;margin:16px;padding:5px 15px;text-align:justify}.notification:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"></path></svg>');background-repeat:no-repeat;margin:0 8px 0 0;filter:invert(31%) sepia(8%) saturate(2329%) hue-rotate(188deg) brightness(103%) contrast(85%)}.notification-text{padding:0 15px 0 30px;font-size:16px}:host{display:flex;flex-direction:column;max-height:85vh}.cdd-header{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;background:#5272d3;border-bottom:1px solid #3C5DC4}.cdd-title{margin:0;font-size:16px;font-weight:600;color:#fff}.cdd-title__key{font-family:monospace;font-weight:500}.cdd-icon-btn{width:28px;height:28px;border:none;border-radius:50%;background:transparent;color:#fffc;cursor:pointer}.cdd-icon-btn:hover{background:#ffffff26;color:#fff}.cdd-body{overflow:auto;padding:16px 20px}.cdd-field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px;flex:1 1 200px;min-width:0}.cdd-field--small{flex:0 1 140px}.cdd-label{font-size:12px;font-weight:600;color:#535353}.cdd-input{padding:4px 8px;border:1px solid #ced4da;border-radius:3px;font-size:13px}.cdd-input--currency{width:70px;text-transform:uppercase}.cdd-hint{font-size:11px;color:#888}.cdd-hint--warn{color:#b26a00}.cdd-value{font-family:monospace;font-size:13px}.cdd-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px}.cdd-types{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}.cdd-type{position:relative;display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid #C4D0F9;border-radius:6px;background:#fff;font-size:12px;text-align:left;cursor:pointer}.cdd-type .fa{width:16px;text-align:center;color:#4465c9}.cdd-type:hover:not(:disabled){background:#f7faff}.cdd-type--active{border-color:#4465c9;background:#ebf0ff;font-weight:600}.cdd-type__label{flex:1}.cdd-type__default{font-size:10px;font-weight:400;color:#888}.cdd-options{padding-top:4px;border-top:1px solid #e9ecef;margin-top:4px}.cdd-choice{display:flex;align-items:center;gap:8px;margin-bottom:4px}.cdd-choice label{margin:0;font-weight:400;white-space:nowrap}.cdd-choice select{flex:1;min-width:0}.cdd-chips{display:flex;flex-wrap:wrap;gap:4px}.cdd-chip{padding:1px 8px;border:1px solid #C4D0F9;border-radius:10px;background:#fff;font-family:monospace;font-size:11px;cursor:pointer}.cdd-chip:hover:not(:disabled){background:#f7faff}.cdd-check{display:flex;align-items:center;gap:6px;margin:0 0 12px;font-weight:400;font-size:13px}.cdd-preview{display:flex;align-items:baseline;gap:12px;padding:8px 12px;margin-bottom:12px;border-radius:6px;background:#f5f5f5}.cdd-preview__value{font-size:14px;font-variant-numeric:tabular-nums}.cdd-flags{border-top:1px solid #e9ecef;padding-top:10px}.cdd-footer{display:flex;justify-content:flex-end;gap:8px;padding:10px 20px;border-top:1px solid #e9ecef}.cdd-btn{padding:5px 16px;border-radius:4px;font-size:13px;cursor:pointer}.cdd-btn--secondary{border:1px solid #ced4da;background:#fff}.cdd-btn--primary{border:1px solid #4465C9;background:#4465c9;color:#fff}\n"],
|
|
20555
|
+
dependencies: [
|
|
20556
|
+
{
|
|
20557
|
+
kind: "ngmodule",
|
|
20558
|
+
type: CommonModule
|
|
20559
|
+
},
|
|
20560
|
+
{
|
|
20561
|
+
kind: "ngmodule",
|
|
20562
|
+
type: FormsModule
|
|
20563
|
+
},
|
|
20564
|
+
{
|
|
20565
|
+
kind: "directive",
|
|
20566
|
+
type: i2$3.NgSelectOption,
|
|
20567
|
+
selector: "option",
|
|
20568
|
+
inputs: ["ngValue", "value"]
|
|
20569
|
+
},
|
|
20570
|
+
{
|
|
20571
|
+
kind: "directive",
|
|
20572
|
+
type: i2$3.ɵNgSelectMultipleOption,
|
|
20573
|
+
selector: "option",
|
|
20574
|
+
inputs: ["ngValue", "value"]
|
|
20575
|
+
},
|
|
20576
|
+
{
|
|
20577
|
+
kind: "directive",
|
|
20578
|
+
type: i2$3.DefaultValueAccessor,
|
|
20579
|
+
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]"
|
|
20580
|
+
},
|
|
20581
|
+
{
|
|
20582
|
+
kind: "directive",
|
|
20583
|
+
type: i2$3.NumberValueAccessor,
|
|
20584
|
+
selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]"
|
|
20585
|
+
},
|
|
20586
|
+
{
|
|
20587
|
+
kind: "directive",
|
|
20588
|
+
type: i2$3.CheckboxControlValueAccessor,
|
|
20589
|
+
selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]"
|
|
20590
|
+
},
|
|
20591
|
+
{
|
|
20592
|
+
kind: "directive",
|
|
20593
|
+
type: i2$3.SelectControlValueAccessor,
|
|
20594
|
+
selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]",
|
|
20595
|
+
inputs: ["compareWith"]
|
|
20596
|
+
},
|
|
20597
|
+
{
|
|
20598
|
+
kind: "directive",
|
|
20599
|
+
type: i2$3.RadioControlValueAccessor,
|
|
20600
|
+
selector: "input[type=radio]:not([ngNoCva])[formControlName],input[type=radio]:not([ngNoCva])[formControl],input[type=radio]:not([ngNoCva])[ngModel]",
|
|
20601
|
+
inputs: [
|
|
20602
|
+
"name",
|
|
20603
|
+
"formControlName",
|
|
20604
|
+
"value"
|
|
20605
|
+
]
|
|
20606
|
+
},
|
|
20607
|
+
{
|
|
20608
|
+
kind: "directive",
|
|
20609
|
+
type: i2$3.NgControlStatus,
|
|
20610
|
+
selector: "[formControlName],[ngModel],[formControl]"
|
|
20611
|
+
},
|
|
20612
|
+
{
|
|
20613
|
+
kind: "directive",
|
|
20614
|
+
type: i2$3.MaxLengthValidator,
|
|
20615
|
+
selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",
|
|
20616
|
+
inputs: ["maxlength"]
|
|
20617
|
+
},
|
|
20618
|
+
{
|
|
20619
|
+
kind: "directive",
|
|
20620
|
+
type: i2$3.MinValidator,
|
|
20621
|
+
selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",
|
|
20622
|
+
inputs: ["min"]
|
|
20623
|
+
},
|
|
20624
|
+
{
|
|
20625
|
+
kind: "directive",
|
|
20626
|
+
type: i2$3.NgModel,
|
|
20627
|
+
selector: "[ngModel]:not([formControlName]):not([formControl])",
|
|
20628
|
+
inputs: [
|
|
20629
|
+
"name",
|
|
20630
|
+
"disabled",
|
|
20631
|
+
"ngModel",
|
|
20632
|
+
"ngModelOptions"
|
|
20633
|
+
],
|
|
20634
|
+
outputs: ["ngModelChange"],
|
|
20635
|
+
exportAs: ["ngModel"]
|
|
20636
|
+
}
|
|
20637
|
+
],
|
|
20638
|
+
changeDetection: i0.ChangeDetectionStrategy.Eager
|
|
20639
|
+
});
|
|
20640
|
+
}
|
|
20641
|
+
};
|
|
20642
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
20643
|
+
minVersion: "12.0.0",
|
|
20644
|
+
version: "22.2.1",
|
|
20645
|
+
ngImport: i0,
|
|
20646
|
+
type: ColumnDisplayDialogComponent,
|
|
20647
|
+
decorators: [{
|
|
20648
|
+
type: Component,
|
|
20649
|
+
args: [{
|
|
20650
|
+
selector: "alg-column-display-dialog",
|
|
20651
|
+
standalone: true,
|
|
20652
|
+
imports: [CommonModule, FormsModule],
|
|
20653
|
+
changeDetection: ChangeDetectionStrategy.Eager,
|
|
20654
|
+
template: "<div class=\"cdd-header\">\r\n <h4 class=\"cdd-title\">\r\n Colonne <span class=\"cdd-title__key\">{{ item.ColumnKey }}</span>\r\n </h4>\r\n <button class=\"cdd-icon-btn\" type=\"button\" (click)=\"cancel()\" aria-label=\"Fermer\">✕</button>\r\n</div>\r\n\r\n<div class=\"cdd-body\">\r\n <!-- Libellé -->\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-label\">Libellé</label>\r\n <input id=\"cdd-label\" class=\"cdd-input\" type=\"text\" [(ngModel)]=\"model.Label\" [placeholder]=\"naturalLabel || item.ColumnKey\" [disabled]=\"readonly\">\r\n <span class=\"cdd-hint\">Vide : libellé de la colonne ({{ naturalLabel || item.ColumnKey }}).</span>\r\n </div>\r\n\r\n <!-- Type d'affichage -->\r\n <div class=\"cdd-field\">\r\n <span class=\"cdd-label\">Affichage</span>\r\n <div class=\"cdd-types\" role=\"radiogroup\" aria-label=\"Type d'affichage\">\r\n @for (type of types; track type.type) {\r\n <button type=\"button\" class=\"cdd-type\" role=\"radio\"\r\n [class.cdd-type--active]=\"model.ColumnDisplayType === type.type\"\r\n [attr.aria-checked]=\"model.ColumnDisplayType === type.type\"\r\n [disabled]=\"readonly\"\r\n (click)=\"selectType(type)\">\r\n <i class=\"fa fa-{{ type.icon }}\"></i>\r\n <span class=\"cdd-type__label\">{{ type.label }}</span>\r\n @if (isDefault(type)) {\r\n <span class=\"cdd-type__default\" title=\"Affichage par défaut selon le type de la colonne\">défaut</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Options du type -->\r\n <div class=\"cdd-options\">\r\n @if (has('digits')) {\r\n <div class=\"cdd-row\">\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-minint\">Chiffres entiers min.</label>\r\n <input id=\"cdd-minint\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.MinIntegerDigits\" placeholder=\"1\" [disabled]=\"readonly\">\r\n </div>\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-minfrac\">Décimales min.</label>\r\n <input id=\"cdd-minfrac\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.MinFractionDigits\" placeholder=\"0\" [disabled]=\"readonly\">\r\n </div>\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-maxfrac\">Décimales max.</label>\r\n <input id=\"cdd-maxfrac\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.MaxFractionDigits\" placeholder=\"3\" [disabled]=\"readonly\">\r\n </div>\r\n @if (has('multiplier')) {\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-mult\">Multiplicateur</label>\r\n <input id=\"cdd-mult\" class=\"cdd-input\" type=\"number\" step=\"any\" [(ngModel)]=\"model.Multiplier\" placeholder=\"1\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n </div>\r\n @if (isPercent) {\r\n <span class=\"cdd-hint\">Valeur enregistrée en pourcentage (12,5 pour 12,5 %) : multiplicateur 0,01.</span>\r\n }\r\n }\r\n\r\n @if (has('currency')) {\r\n <div class=\"cdd-field\">\r\n <span class=\"cdd-label\">Devise</span>\r\n <div class=\"cdd-choice\">\r\n <label><input type=\"radio\" name=\"cdd-currency\" value=\"fixed\" [(ngModel)]=\"currencyMode\" [disabled]=\"readonly\"> Devise fixe</label>\r\n <input class=\"cdd-input cdd-input--currency\" type=\"text\" maxlength=\"3\" [(ngModel)]=\"model.Currency\" placeholder=\"EUR\"\r\n [disabled]=\"readonly || currencyMode !== 'fixed'\" aria-label=\"Code de la devise\">\r\n </div>\r\n <div class=\"cdd-choice\">\r\n <label><input type=\"radio\" name=\"cdd-currency\" value=\"column\" [(ngModel)]=\"currencyMode\" [disabled]=\"readonly\"> Devise de la ligne, colonne</label>\r\n <select class=\"cdd-input\" [(ngModel)]=\"model.CurrencyPropertyName\" [disabled]=\"readonly || currencyMode !== 'column'\" aria-label=\"Colonne de la devise\">\r\n <option [ngValue]=\"null\">—</option>\r\n @for (column of columns; track column.key) {\r\n <option [ngValue]=\"column.key\">{{ column.label }} ({{ column.key }})</option>\r\n }\r\n </select>\r\n </div>\r\n <span class=\"cdd-hint\">Sans devise : EUR.</span>\r\n </div>\r\n }\r\n\r\n @if (has('format')) {\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-format\">Format</label>\r\n <input id=\"cdd-format\" class=\"cdd-input\" type=\"text\" [(ngModel)]=\"model.DisplayFormat\" [placeholder]=\"defaultDateFormat\" [disabled]=\"readonly\">\r\n <div class=\"cdd-chips\">\r\n @for (format of (isDateTime ? dateTimeFormats : dateFormats); track format) {\r\n <button type=\"button\" class=\"cdd-chip\" [disabled]=\"readonly\" (click)=\"model.DisplayFormat = format\">{{ format }}</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (has('enum')) {\r\n <div class=\"cdd-field\">\r\n <span class=\"cdd-label\">Type énuméré</span>\r\n @if (enumEntityName) {\r\n <span class=\"cdd-value\">{{ enumEntityName }}</span>\r\n <span class=\"cdd-hint\">Icônes simg/<Module>/<Type>/<Valeur>.svg ; infobulle : libellé de la valeur.</span>\r\n } @else {\r\n <span class=\"cdd-hint cdd-hint--warn\">Pas de clé étrangère vers une table Enum… : le type vient de l'attribut Enum de la propriété ; sans lui, la colonne s'affiche en texte.</span>\r\n }\r\n </div>\r\n }\r\n\r\n @if (has('width')) {\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-width\">Largeur (px)</label>\r\n <input id=\"cdd-width\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.DisplayWidth\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n\r\n @if (has('fixedSize')) {\r\n <div class=\"cdd-row\">\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-size\">Taille</label>\r\n <input id=\"cdd-size\" class=\"cdd-input\" type=\"number\" min=\"0\" [(ngModel)]=\"model.DisplayWidth\" placeholder=\"10\" [disabled]=\"readonly\">\r\n </div>\r\n <div class=\"cdd-field cdd-field--small\">\r\n <label class=\"cdd-label\" for=\"cdd-char\">Caractère de complément</label>\r\n <input id=\"cdd-char\" class=\"cdd-input\" type=\"text\" maxlength=\"1\" [(ngModel)]=\"model.CompletingCharacter\" placeholder=\"0\" [disabled]=\"readonly\">\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (has('baseUrl')) {\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-url\">Adresse de base</label>\r\n <input id=\"cdd-url\" class=\"cdd-input\" type=\"text\" [(ngModel)]=\"model.BaseUrl\" placeholder=\"/\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n\r\n @if (has('nullCaseText') || has('handleError')) {\r\n <div class=\"cdd-row\">\r\n @if (has('nullCaseText')) {\r\n <div class=\"cdd-field\">\r\n <label class=\"cdd-label\" for=\"cdd-null\">Texte si vide</label>\r\n <input id=\"cdd-null\" class=\"cdd-input\" type=\"text\" maxlength=\"100\" [(ngModel)]=\"model.NullCaseText\" placeholder=\"(rien)\" [disabled]=\"readonly\">\r\n </div>\r\n }\r\n @if (has('handleError')) {\r\n <label class=\"cdd-check\">\r\n <input type=\"checkbox\" [(ngModel)]=\"model.HandleError\" [disabled]=\"readonly\"> Valeur vide en évidence (rouge)\r\n </label>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Aperçu -->\r\n <div class=\"cdd-preview\">\r\n <span class=\"cdd-label\">Aperçu</span>\r\n <span class=\"cdd-preview__value\">{{ preview }}</span>\r\n </div>\r\n\r\n <!-- Drapeaux -->\r\n <div class=\"cdd-row cdd-flags\">\r\n <label class=\"cdd-check\"><input type=\"checkbox\" [(ngModel)]=\"model.IsLocked\" [disabled]=\"readonly\"> Verrouillée (ne peut pas être retirée)</label>\r\n @if (isPerimeter) {\r\n <label class=\"cdd-check\"><input type=\"checkbox\" [(ngModel)]=\"model.IsAllowed\" [disabled]=\"readonly\"> Autorisée</label>\r\n }\r\n </div>\r\n</div>\r\n\r\n<div class=\"cdd-footer\">\r\n <button class=\"cdd-btn cdd-btn--secondary\" type=\"button\" (click)=\"cancel()\">Annuler</button>\r\n @if (!readonly) {\r\n <button class=\"cdd-btn cdd-btn--primary\" type=\"button\" (click)=\"apply()\">Appliquer</button>\r\n }\r\n</div>\r\n",
|
|
20655
|
+
styles: [".home-page{font-family:Open sans,sans-serif;background:#fff;-webkit-font-smoothing:antialiased;height:100%;width:100%;padding:16px}.main-container{margin:0 50px}.main-container-modal{width:calc(100% - 50px);margin:10px 25px 0}.moyen-titre{font-weight:700;font-size:24px;color:#4d5a81;margin:8px 0;border-bottom:solid 1px #DBE4FF}.grand-titre{font-weight:700;font-size:28px;color:#4d5a81;margin:0 0 8px}.petit-titre{font-weight:700;font-size:16px;color:#4d5a81;margin:0 0 8px}.petit-titre.underlined{border-bottom:solid 1px #4D5A81}.paragraph{padding:0 15px}.paragraph-highlight{padding:5px 15px 0 12px;border-left:5px solid #8EA7F8;border-bottom:1px solid #DBE4FF;border-top:1px solid #DBE4FF;border-right:1px solid #DBE4FF;background-color:#f7faff}.highlight{background-color:#f7faff;border:1px solid #DBE4FF;border-radius:5px;padding:15px;color:#3c5dc4;margin:0 0 16px}.highlight p{margin-bottom:0}.highlight:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"53.294\" height=\"50.629\" viewBox=\"0 0 53.294 50.629\">%0D%0A <path id=\"allerg\\e8ne\" d=\"M830.494,25.793l-5.814,6.783.727,8.963-8.721,1.938-4.6,7.752L803.847,47.6l-8.236,3.634-4.6-7.51-8.721-1.938.727-8.963L777.2,26.035l5.814-6.783-.727-8.963,8.721-1.938L795.61.6l8.236,3.634L812.083.6l4.6,7.752,8.721,1.938-.727,8.963Zm-24.467,2.422V13.681h-4.845V28.216Zm0,9.69V33.06h-4.845v4.845Z\" transform=\"translate(-777.2 -0.6)\"/>%0D%0A</svg>%0D%0A');background-repeat:no-repeat;margin:0 8px 24px 0;filter:invert(31%) sepia(51%) saturate(1323%) hue-rotate(199deg) brightness(99%) contrast(94%)}.notification{background-color:#dbe4ff;border:1px solid #C4D0F9;border-radius:5px;color:#4d5a81;margin:16px;padding:5px 15px;text-align:justify}.notification:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"></path></svg>');background-repeat:no-repeat;margin:0 8px 0 0;filter:invert(31%) sepia(8%) saturate(2329%) hue-rotate(188deg) brightness(103%) contrast(85%)}.notification-text{padding:0 15px 0 30px;font-size:16px}:host{display:flex;flex-direction:column;max-height:85vh}.cdd-header{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;background:#5272d3;border-bottom:1px solid #3C5DC4}.cdd-title{margin:0;font-size:16px;font-weight:600;color:#fff}.cdd-title__key{font-family:monospace;font-weight:500}.cdd-icon-btn{width:28px;height:28px;border:none;border-radius:50%;background:transparent;color:#fffc;cursor:pointer}.cdd-icon-btn:hover{background:#ffffff26;color:#fff}.cdd-body{overflow:auto;padding:16px 20px}.cdd-field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px;flex:1 1 200px;min-width:0}.cdd-field--small{flex:0 1 140px}.cdd-label{font-size:12px;font-weight:600;color:#535353}.cdd-input{padding:4px 8px;border:1px solid #ced4da;border-radius:3px;font-size:13px}.cdd-input--currency{width:70px;text-transform:uppercase}.cdd-hint{font-size:11px;color:#888}.cdd-hint--warn{color:#b26a00}.cdd-value{font-family:monospace;font-size:13px}.cdd-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px}.cdd-types{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}.cdd-type{position:relative;display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid #C4D0F9;border-radius:6px;background:#fff;font-size:12px;text-align:left;cursor:pointer}.cdd-type .fa{width:16px;text-align:center;color:#4465c9}.cdd-type:hover:not(:disabled){background:#f7faff}.cdd-type--active{border-color:#4465c9;background:#ebf0ff;font-weight:600}.cdd-type__label{flex:1}.cdd-type__default{font-size:10px;font-weight:400;color:#888}.cdd-options{padding-top:4px;border-top:1px solid #e9ecef;margin-top:4px}.cdd-choice{display:flex;align-items:center;gap:8px;margin-bottom:4px}.cdd-choice label{margin:0;font-weight:400;white-space:nowrap}.cdd-choice select{flex:1;min-width:0}.cdd-chips{display:flex;flex-wrap:wrap;gap:4px}.cdd-chip{padding:1px 8px;border:1px solid #C4D0F9;border-radius:10px;background:#fff;font-family:monospace;font-size:11px;cursor:pointer}.cdd-chip:hover:not(:disabled){background:#f7faff}.cdd-check{display:flex;align-items:center;gap:6px;margin:0 0 12px;font-weight:400;font-size:13px}.cdd-preview{display:flex;align-items:baseline;gap:12px;padding:8px 12px;margin-bottom:12px;border-radius:6px;background:#f5f5f5}.cdd-preview__value{font-size:14px;font-variant-numeric:tabular-nums}.cdd-flags{border-top:1px solid #e9ecef;padding-top:10px}.cdd-footer{display:flex;justify-content:flex-end;gap:8px;padding:10px 20px;border-top:1px solid #e9ecef}.cdd-btn{padding:5px 16px;border-radius:4px;font-size:13px;cursor:pointer}.cdd-btn--secondary{border:1px solid #ced4da;background:#fff}.cdd-btn--primary{border:1px solid #4465C9;background:#4465c9;color:#fff}\n"]
|
|
20656
|
+
}]
|
|
20657
|
+
}],
|
|
20658
|
+
ctorParameters: () => [{
|
|
20659
|
+
type: void 0,
|
|
20660
|
+
decorators: [{
|
|
20661
|
+
type: Inject,
|
|
20662
|
+
args: [LOCALE_ID]
|
|
20663
|
+
}]
|
|
20664
|
+
}],
|
|
20665
|
+
propDecorators: {
|
|
20666
|
+
item: [{ type: Input }],
|
|
20667
|
+
naturalLabel: [{ type: Input }],
|
|
20668
|
+
defaultDisplayType: [{ type: Input }],
|
|
20669
|
+
enumEntityName: [{ type: Input }],
|
|
20670
|
+
columns: [{ type: Input }],
|
|
20671
|
+
isPerimeter: [{ type: Input }],
|
|
20672
|
+
readonly: [{ type: Input }],
|
|
20673
|
+
confirmed: [{ type: Output }],
|
|
20674
|
+
cancelled: [{ type: Output }]
|
|
20675
|
+
}
|
|
20676
|
+
});
|
|
20242
20677
|
var PresentationProfileEditorComponent = class PresentationProfileEditorComponent extends BaseEntityEditor {
|
|
20243
20678
|
static {
|
|
20244
20679
|
this.frozenFields = [
|
|
@@ -20269,9 +20704,10 @@ var PresentationProfileEditorComponent = class PresentationProfileEditorComponen
|
|
|
20269
20704
|
if (!this.entity) return void 0;
|
|
20270
20705
|
return this.facade?.change.getModified(this.entity.Id) ?? this.entity;
|
|
20271
20706
|
}
|
|
20272
|
-
constructor(app, validationService, itemData) {
|
|
20707
|
+
constructor(app, validationService, itemData, modalService) {
|
|
20273
20708
|
super(app, validationService);
|
|
20274
20709
|
this.itemData = itemData;
|
|
20710
|
+
this.modalService = modalService;
|
|
20275
20711
|
this.activeTab = 0;
|
|
20276
20712
|
this.loadedEntity = void 0;
|
|
20277
20713
|
this.isLoading = false;
|
|
@@ -20281,6 +20717,7 @@ var PresentationProfileEditorComponent = class PresentationProfileEditorComponen
|
|
|
20281
20717
|
this.selectedIds = /* @__PURE__ */ new Set();
|
|
20282
20718
|
this.searchText = "";
|
|
20283
20719
|
this.naturalLabelByKey = /* @__PURE__ */ new Map();
|
|
20720
|
+
this.catalogByKey = /* @__PURE__ */ new Map();
|
|
20284
20721
|
this.load$ = new Subject();
|
|
20285
20722
|
}
|
|
20286
20723
|
ngOnInit() {
|
|
@@ -20360,6 +20797,7 @@ var PresentationProfileEditorComponent = class PresentationProfileEditorComponen
|
|
|
20360
20797
|
};
|
|
20361
20798
|
});
|
|
20362
20799
|
const catalogByKey = new Map(known.map((i) => [i.ColumnKey, i]));
|
|
20800
|
+
this.catalogByKey = catalogByKey;
|
|
20363
20801
|
this.orderedSelection = rawItems.filter((i) => !!i.ColumnKey).sort((a, b) => (a.DisplayOrder ?? 0) - (b.DisplayOrder ?? 0)).map((i) => ({
|
|
20364
20802
|
...catalogByKey.get(i.ColumnKey) ?? {},
|
|
20365
20803
|
...i
|
|
@@ -20374,6 +20812,7 @@ var PresentationProfileEditorComponent = class PresentationProfileEditorComponen
|
|
|
20374
20812
|
this.selectedIds = /* @__PURE__ */ new Set();
|
|
20375
20813
|
this.searchText = "";
|
|
20376
20814
|
this.naturalLabelByKey = /* @__PURE__ */ new Map();
|
|
20815
|
+
this.catalogByKey = /* @__PURE__ */ new Map();
|
|
20377
20816
|
}
|
|
20378
20817
|
onColumnsChanged() {
|
|
20379
20818
|
const profile = this.current;
|
|
@@ -20383,6 +20822,41 @@ var PresentationProfileEditorComponent = class PresentationProfileEditorComponen
|
|
|
20383
20822
|
getCatalogLabel(item) {
|
|
20384
20823
|
return this.naturalLabelByKey.get(item.ColumnKey ?? "") ?? item.ColumnKey ?? "";
|
|
20385
20824
|
}
|
|
20825
|
+
getDisplayType(item) {
|
|
20826
|
+
return getColumnDisplayType(item.ColumnDisplayType);
|
|
20827
|
+
}
|
|
20828
|
+
describeDisplay(item) {
|
|
20829
|
+
return describeColumnDisplay(item);
|
|
20830
|
+
}
|
|
20831
|
+
openColumn(item) {
|
|
20832
|
+
const catalog = this.catalogByKey.get(item.ColumnKey ?? "");
|
|
20833
|
+
const ref = this.modalService.show(ColumnDisplayDialogComponent, {
|
|
20834
|
+
class: "modal-lg",
|
|
20835
|
+
keyboard: true,
|
|
20836
|
+
initialState: {
|
|
20837
|
+
item: { ...item },
|
|
20838
|
+
naturalLabel: this.getCatalogLabel(item),
|
|
20839
|
+
defaultDisplayType: item.ColumnSourceType === 2 ? null : catalog?.ColumnDisplayType ?? null,
|
|
20840
|
+
enumEntityName: catalog?.EnumEntityName ?? null,
|
|
20841
|
+
columns: this.allItems.filter((i) => i.ColumnSourceType !== 2 && !!i.ColumnKey).map((i) => ({
|
|
20842
|
+
key: i.ColumnKey,
|
|
20843
|
+
label: i.Label ?? i.ColumnKey
|
|
20844
|
+
})),
|
|
20845
|
+
isPerimeter: this.isPerimeter,
|
|
20846
|
+
readonly: this.readonly
|
|
20847
|
+
}
|
|
20848
|
+
});
|
|
20849
|
+
if (!ref.content) return;
|
|
20850
|
+
ref.content.confirmed.pipe(take(1)).subscribe((result) => {
|
|
20851
|
+
this.orderedSelection = this.orderedSelection.map((i) => i.ColumnKey === item.ColumnKey ? {
|
|
20852
|
+
...i,
|
|
20853
|
+
...result
|
|
20854
|
+
} : i);
|
|
20855
|
+
this.onColumnsChanged();
|
|
20856
|
+
ref.hide();
|
|
20857
|
+
});
|
|
20858
|
+
ref.content.cancelled.pipe(take(1)).subscribe(() => ref.hide());
|
|
20859
|
+
}
|
|
20386
20860
|
onSearch() {
|
|
20387
20861
|
this.applyFilter();
|
|
20388
20862
|
}
|
|
@@ -20436,7 +20910,8 @@ var PresentationProfileEditorComponent = class PresentationProfileEditorComponen
|
|
|
20436
20910
|
deps: [
|
|
20437
20911
|
{ token: i4$2.ApplicationService },
|
|
20438
20912
|
{ token: i4$2.ValidationService },
|
|
20439
|
-
{ token: i1$3.PresentationProfileItemDataService }
|
|
20913
|
+
{ token: i1$3.PresentationProfileItemDataService },
|
|
20914
|
+
{ token: i1$2.BsModalService }
|
|
20440
20915
|
],
|
|
20441
20916
|
target: i0.ɵɵFactoryTarget.Component
|
|
20442
20917
|
});
|
|
@@ -20450,8 +20925,8 @@ var PresentationProfileEditorComponent = class PresentationProfileEditorComponen
|
|
|
20450
20925
|
selector: "alg-presentation-profile-editor",
|
|
20451
20926
|
usesInheritance: true,
|
|
20452
20927
|
ngImport: i0,
|
|
20453
|
-
template: "<div class=\"pp-editor\">\r\n @if (entity) {\r\n <alg-tabset [showNavs]=\"true\" [pills]=\"false\" (onSelect)=\"activeTab = $event\">\r\n\r\n <!--Propriétés : table, libellé, finalité et portée du profil, avec les composants des formulaires-->\r\n <alg-tab title=\"Propriétés\" [active]=\"activeTab === 0\" [class.pp-editor-tab]=\"activeTab === 0\">\r\n <div class=\"property-container pp-editor-properties\">\r\n @for (section of sections; track section.Name) {\r\n <div class=\"property-section-container\">\r\n <div class=\"property-section-title\">{{ section.Name }}</div>\r\n <div class=\"property-section-content\">\r\n @for (field of section.FieldViewModels; track field.PropertyName) {\r\n <div class=\"property-row\" [hidden]=\"isFieldHidden(field)\">\r\n <alg-field [field]=\"field\" [form]=\"form\" [readonly]=\"isFieldReadonly(field)\"\r\n (propertyChanged)=\"onPropertyChanged($event)\">\r\n </alg-field>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </alg-tab>\r\n\r\n <!--Colonnes : colonnes affichées par la grille, leur ordre et leurs libellés-->\r\n <alg-tab title=\"Colonnes\" [active]=\"activeTab === 1\" [class.pp-editor-tab]=\"activeTab === 1\">\r\n <div class=\"gcc pp-editor-columns\">\r\n <div *ngIf=\"isLoading\" class=\"gcc__loading\">\r\n <span class=\"gcc__spinner-icon fa fa-circle-o-notch fa-spin\"></span>\r\n Chargement des colonnes…\r\n </div>\r\n <div *ngIf=\"!isLoading && allItems.length === 0 && orderedSelection.length === 0\" class=\"gcc__hint\">\r\n Choisissez la table du profil dans l'onglet « Propriétés ».\r\n </div>\r\n <ng-container *ngIf=\"!isLoading && (allItems.length > 0 || orderedSelection.length > 0)\">\r\n <div class=\"gcc__panels\">\r\n\r\n <!-- ── Colonnes disponibles : celles de la table qui ne sont pas affichées ── -->\r\n <div class=\"gcc__browse\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes disponibles</span>\r\n <span class=\"gcc__badge\">{{ filteredItems.length }}</span>\r\n <input class=\"gcc__search\" type=\"text\" placeholder=\"Rechercher…\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"onSearch()\">\r\n <button *ngIf=\"!readonly\" class=\"pp-editor-add-all\" type=\"button\" [disabled]=\"filteredItems.length === 0\"\r\n (click)=\"addAll()\" title=\"Afficher toutes les colonnes listées\">Tout ajouter</button>\r\n </div>\r\n\r\n <div class=\"gcc__table-wrap\">\r\n <table class=\"gcc__browse-table\">\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredItems\"\r\n class=\"gcc__browse-row\"\r\n [class.gcc__browse-row--custom]=\"item.ColumnSourceType === 2\"\r\n title=\"Afficher cette colonne\"\r\n (click)=\"addItem(item)\">\r\n <td class=\"gcc__col-name\">\r\n <div class=\"gcc__col-key\">{{ item.ColumnKey }}</div>\r\n <div *ngIf=\"item.Label && item.Label !== item.ColumnKey\" class=\"gcc__sub\">{{ item.Label }}</div>\r\n </td>\r\n <td class=\"pp-editor-add\"><i *ngIf=\"!readonly\" class=\"fa fa-plus\"></i></td>\r\n </tr>\r\n <tr *ngIf=\"filteredItems.length === 0\">\r\n <td colspan=\"2\" class=\"gcc__browse-empty\">\r\n {{ searchText ? 'Aucune colonne trouvée' : 'Toutes les colonnes sont affichées' }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n <!-- ── Panel 4: Ordered selection with admin flags ────────────── -->\r\n <div class=\"gcc__selection\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes affichées</span>\r\n <span *ngIf=\"selectedCount > 0\" class=\"gcc__badge gcc__badge--primary\">{{ selectedCount }}</span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\" class=\"gcc__sel-legend\">\r\n <span class=\"gcc__sel-legend__drag\"></span>\r\n <span class=\"gcc__sel-legend__pos\">#</span>\r\n <span class=\"gcc__sel-legend__code\">Colonne</span>\r\n <span class=\"gcc__sel-legend__label\">Étiquette</span>\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <span class=\"gcc__sel-legend__flag\">Aut.</span>\r\n </ng-container>\r\n <span class=\"gcc__sel-legend__flag\">Ver.</span>\r\n <span class=\"gcc__sel-legend__remove\"></span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length === 0\" class=\"gcc__sel-empty\">\r\n <span class=\"fa fa-columns gcc__sel-empty__icon\"></span>\r\n <p>Choisissez des colonnes parmi les colonnes disponibles</p>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\"\r\n class=\"gcc__sel-list\"\r\n cdkDropList\r\n [cdkDropListData]=\"orderedSelection\"\r\n (cdkDropListDropped)=\"onDrop($event)\">\r\n\r\n <div *ngFor=\"let item of orderedSelection; let i = index\"\r\n class=\"gcc__sel-item\"\r\n cdkDrag [cdkDragDisabled]=\"readonly\"\r\n [cdkDragData]=\"item\">\r\n\r\n <div class=\"gcc__sel-item__placeholder\" *cdkDragPlaceholder></div>\r\n\r\n <span class=\"gcc__sel-item__drag\" cdkDragHandle>\r\n <i class=\"fa fa-bars\"></i>\r\n </span>\r\n\r\n <span class=\"gcc__sel-item__pos\">{{ i + 1 }}</span>\r\n\r\n <span class=\"gcc__sel-item__code\"\r\n [class.gcc__sel-item__code--cf]=\"item.ColumnSourceType === 2\"\r\n [title]=\"item.ColumnKey\">\r\n <span class=\"gcc__sel-item__name\">{{ item.ColumnKey }}</span>\r\n <span *ngIf=\"getCatalogLabel(item) !== item.ColumnKey\" class=\"gcc__sub\">{{ getCatalogLabel(item) }}</span>\r\n </span>\r\n\r\n <input class=\"gcc__sel-item__label\" type=\"text\"\r\n [placeholder]=\"getCatalogLabel(item)\"\r\n [(ngModel)]=\"item.Label\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\"\r\n (click)=\"$event.stopPropagation()\"\r\n title=\"Étiquette personnalisée\">\r\n\r\n <!-- Perimeter scope: allowed flag -->\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsAllowed\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Autorisé\">\r\n </label>\r\n </ng-container>\r\n\r\n <!-- Always: locked flag -->\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsLocked\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Verrouillé\">\r\n </label>\r\n\r\n <button class=\"gcc__sel-item__remove\" type=\"button\"\r\n (click)=\"removeFromSelection(item); $event.stopPropagation()\"\r\n title=\"Retirer\">✕</button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Pied de la sélection -->\r\n <div class=\"gcc__sel-footer\">\r\n <span class=\"gcc__sel-footer__info\">\r\n <ng-container *ngIf=\"selectedCount > 0\">\r\n {{ selectedCount }} colonne(s) — glissez pour réordonner\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div><!-- /.gcc__panels -->\r\n </ng-container>\r\n </div>\r\n </alg-tab>\r\n </alg-tabset>\r\n }\r\n</div>\r\n",
|
|
20454
|
-
styles: ["alg-pp-column{display:block;height:100%}.gcc{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:10px;box-sizing:border-box}.gcc__form{flex:1;min-height:0;display:flex;flex-direction:column;background:#fff}.gcc__tabs{display:block;flex:none}.gcc__tabs .tabset-content{display:none}.gcc__tabs .nav-tabs-custom{margin-bottom:0;box-shadow:none}.gcc__content{flex:1;min-height:0;display:flex;flex-direction:column;gap:.75rem;padding:15px;overflow:hidden}.gcc__buttons{flex:none;margin-right:0;padding-bottom:0}.gcc__buttons .btn{margin-left:8px}.gcc__toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem;flex-shrink:0}.gcc__field{display:flex;flex-direction:column;gap:.25rem}.gcc__field label{font-size:.75rem;font-weight:600;color:#6c757d}.gcc__field input,.gcc__field select{min-width:9rem;padding:.35rem .5rem;border:1px solid #ced4da;border-radius:.25rem;font-size:.85rem}.gcc__message{padding:.5rem .75rem;background:#eef3f8;border-left:3px solid #4465C9;border-radius:.25rem;font-size:.85rem;flex-shrink:0}.gcc__body{flex:1;display:flex;gap:0;overflow:hidden;min-height:0;border:1px solid #e9ecef;border-radius:.25rem;background:#fff}.gcc__panel-hd{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__panel-title{font-size:.8rem;font-weight:600;display:flex;align-items:center;gap:6px}.gcc__panel-label{font-size:.75rem;font-weight:600;color:#495057}.gcc__count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:16px;padding:0 5px;background:#4465c91f;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:16px;padding:0 5px;background:#4465c91a;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge--primary{background:#4465c9;color:#fff}.gcc__muted{color:#6c757d;font-size:.8rem}.gcc__fw-normal{font-weight:400}.gcc__configs{display:flex;flex-direction:column;flex:0 0 220px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__list-scroll{flex:1;overflow:auto}.gcc__table{width:100%;border-collapse:collapse}.gcc__table th,.gcc__table td{padding:.35rem .6rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__config-row{cursor:pointer;transition:background .1s}.gcc__config-row:hover{background:#4465c90a}.gcc__config-row--selected{background:#4465c914;border-left:3px solid #4465C9}.gcc__config-row--selected td:first-child{padding-left:calc(.6rem - 3px)}.gcc__key{font-family:monospace;font-weight:600;color:#4465c9;font-size:.78rem}.gcc__sub{font-size:.7rem;font-weight:400;color:#6c757d;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__scope-badge{display:inline-block;padding:1px 5px;border-radius:20px;background:#4465c91a;color:#4465c9;font-size:9px;font-weight:700;text-transform:uppercase}.gcc__actions-cell{text-align:right;width:28px}.gcc__del-btn{background:none;border:none;color:#adb5bd;cursor:pointer;padding:2px 4px;border-radius:3px;font-size:.72rem;transition:color .1s}.gcc__del-btn:hover{color:#dc3545}.gcc__spinner{display:flex;align-items:center;gap:8px;padding:1rem .75rem;color:#6c757d;font-size:.8rem}.gcc__empty{padding:1.25rem .75rem;color:#6c757d;font-style:italic;font-size:.8rem}.gcc__editor{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.gcc__editor-hd{display:flex;align-items:center;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__loading{display:flex;align-items:center;gap:8px;padding:1.5rem 1rem;color:#6c757d;font-size:.85rem;flex-shrink:0}.gcc__spinner-icon{font-size:1rem}.gcc__panels{flex:1;display:flex;overflow:hidden;min-height:0}.gcc__groups{display:flex;flex-direction:column;flex:0 0 160px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__group-list{list-style:none;margin:0;padding:0;flex:1;overflow-y:auto}.gcc__group-item{display:flex;align-items:center;justify-content:space-between;padding:.4rem .6rem;cursor:pointer;font-size:.78rem;border-bottom:1px solid #e9ecef;transition:background .1s}.gcc__group-item:hover{background:#4465c90a}.gcc__group-item--active{background:#4465c914;font-weight:600;color:#4465c9}.gcc__group-item--standard .gcc__group-item__name{color:#4465c9}.gcc__group-item--custom .gcc__group-item__name{color:#6b7fd4}.gcc__group-item__name{flex:1}.gcc__group-meta{display:flex;align-items:center;gap:3px}.gcc__browse{display:flex;flex-direction:column;flex:1;border-right:1px solid #e9ecef;overflow:hidden;min-width:0}.gcc__search{height:26px;padding:0 .5rem;border:1px solid #ced4da;border-radius:.2rem;font-size:.78rem;width:140px}.gcc__table-wrap{flex:1;overflow:auto}.gcc__table-wrap::-webkit-scrollbar{width:5px}.gcc__table-wrap::-webkit-scrollbar-track{background:transparent}.gcc__table-wrap::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__browse-table{width:100%;border-collapse:collapse}.gcc__browse-table th,.gcc__browse-table td{padding:.3rem .5rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__browse-table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__browse-row{cursor:pointer;transition:background .1s}.gcc__browse-row:hover{background:#4465c90a}.gcc__browse-row--selected{background:#4465c914}.gcc__browse-row--custom .gcc__col-key{color:#6b7fd4}.gcc__col-check{width:28px;text-align:center}.gcc__col-key{font-family:monospace;font-size:11px;font-weight:600;color:#4465c9}.gcc__browse-empty{padding:1rem .75rem;color:#6c757d;font-style:italic;font-size:.78rem}.gcc__selection{display:flex;flex-direction:column;flex:0 0 380px;overflow:hidden}.gcc__sel-legend{display:flex;align-items:center;padding:3px .5rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#6c757d;flex-shrink:0;gap:0}.gcc__sel-legend__drag{width:20px;flex-shrink:0}.gcc__sel-legend__pos{width:22px;flex-shrink:0;text-align:center}.gcc__sel-legend__code{width:150px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__label{flex:1;min-width:0}.gcc__sel-legend__flag{width:36px;text-align:center;flex-shrink:0}.gcc__sel-legend__width{width:50px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__remove{width:22px;flex-shrink:0}.gcc__sel-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;color:#6c757d;gap:.5rem;font-size:.8rem}.gcc__sel-empty__icon{font-size:2rem;opacity:.3}.gcc__sel-empty p{margin:0}.gcc__sel-list{flex:1;overflow-y:auto}.gcc__sel-list::-webkit-scrollbar{width:4px}.gcc__sel-list::-webkit-scrollbar-track{background:transparent}.gcc__sel-list::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__sel-item{display:flex;align-items:center;padding:4px .5rem;border-bottom:1px solid #e9ecef;background:#fff;-webkit-user-select:none;user-select:none;gap:0;transition:background .1s}.gcc__sel-item:hover{background:#4465c908}.gcc__sel-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__sel-item__placeholder{height:32px;background:#4465c90f;border:1px dashed #4465C9;border-radius:2px;flex:1}.gcc__sel-item__drag{width:20px;flex-shrink:0;color:#ced4da;cursor:grab;font-size:11px;display:flex;align-items:center;justify-content:center}.gcc__sel-item__drag:hover{color:#4465c9}.gcc__sel-item__drag:active{cursor:grabbing}.gcc__sel-item__pos{width:22px;flex-shrink:0;font-size:9px;color:#6c757d;text-align:center}.gcc__sel-item__code{width:150px;flex-shrink:0;display:flex;flex-direction:column;overflow:hidden;padding-left:2px}.gcc__sel-item__code--cf .gcc__sel-item__name{color:#6b7fd4}.gcc__sel-item__name{font-family:monospace;font-size:10px;font-weight:600;color:#4465c9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__sel-item__label{flex:1;min-width:0;height:22px;padding:0 4px;border:1px solid transparent;border-radius:3px;font-size:11px;color:#343a40;background:transparent;outline:none;transition:border-color .1s,background .1s}.gcc__sel-item__label::placeholder{color:#6c757d;font-style:italic}.gcc__sel-item__label:hover{border-color:#d1d8de;background:#f8f9fa}.gcc__sel-item__label:focus{border-color:#4465c9;background:#fff}.gcc__sel-item__remove{width:22px;flex-shrink:0;background:none;border:none;color:#adb5bd;cursor:pointer;font-size:11px;padding:0;text-align:center;transition:color .1s}.gcc__sel-item__remove:hover{color:#dc3545}.gcc__sel-list.cdk-drop-list-dragging .gcc__sel-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__flag{width:36px;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;margin:0}.gcc__flag input[type=checkbox]{cursor:pointer}.gcc__item-width{width:46px;flex-shrink:0;padding:1px 3px;border:1px solid #ced4da;border-radius:3px;font-size:10px;text-align:right}.gcc__sel-footer{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-top:1px solid #e9ecef;flex-shrink:0}.gcc__sel-footer__info{font-size:.75rem;color:#6c757d;font-style:italic}.gcc__hint{display:flex;align-items:center;justify-content:center;flex:1;color:#6c757d;font-style:italic;font-size:.85rem}\n", ".home-page{font-family:Open sans,sans-serif;background:#fff;-webkit-font-smoothing:antialiased;height:100%;width:100%;padding:16px}.main-container{margin:0 50px}.main-container-modal{width:calc(100% - 50px);margin:10px 25px 0}.moyen-titre{font-weight:700;font-size:24px;color:#4d5a81;margin:8px 0;border-bottom:solid 1px #DBE4FF}.grand-titre{font-weight:700;font-size:28px;color:#4d5a81;margin:0 0 8px}.petit-titre{font-weight:700;font-size:16px;color:#4d5a81;margin:0 0 8px}.petit-titre.underlined{border-bottom:solid 1px #4D5A81}.paragraph{padding:0 15px}.paragraph-highlight{padding:5px 15px 0 12px;border-left:5px solid #8EA7F8;border-bottom:1px solid #DBE4FF;border-top:1px solid #DBE4FF;border-right:1px solid #DBE4FF;background-color:#f7faff}.highlight{background-color:#f7faff;border:1px solid #DBE4FF;border-radius:5px;padding:15px;color:#3c5dc4;margin:0 0 16px}.highlight p{margin-bottom:0}.highlight:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"53.294\" height=\"50.629\" viewBox=\"0 0 53.294 50.629\">%0D%0A <path id=\"allerg\\e8ne\" d=\"M830.494,25.793l-5.814,6.783.727,8.963-8.721,1.938-4.6,7.752L803.847,47.6l-8.236,3.634-4.6-7.51-8.721-1.938.727-8.963L777.2,26.035l5.814-6.783-.727-8.963,8.721-1.938L795.61.6l8.236,3.634L812.083.6l4.6,7.752,8.721,1.938-.727,8.963Zm-24.467,2.422V13.681h-4.845V28.216Zm0,9.69V33.06h-4.845v4.845Z\" transform=\"translate(-777.2 -0.6)\"/>%0D%0A</svg>%0D%0A');background-repeat:no-repeat;margin:0 8px 24px 0;filter:invert(31%) sepia(51%) saturate(1323%) hue-rotate(199deg) brightness(99%) contrast(94%)}.notification{background-color:#dbe4ff;border:1px solid #C4D0F9;border-radius:5px;color:#4d5a81;margin:16px;padding:5px 15px;text-align:justify}.notification:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"></path></svg>');background-repeat:no-repeat;margin:0 8px 0 0;filter:invert(31%) sepia(8%) saturate(2329%) hue-rotate(188deg) brightness(103%) contrast(85%)}.notification-text{padding:0 15px 0 30px;font-size:16px}.propertyGridform{height:100%;width:100%}.property-grid-tabset{height:100%}.property-grid-tab{height:100%;width:100%;padding:5px}.property-row-center{padding-top:21px}.property-section-content{display:grid;grid-template-columns:repeat(auto-fit,minmax(225px,1fr));align-items:flex-start;align-content:flex-start;gap:10px;margin:0 10px}.property-section-container{display:flex;flex-direction:column;background:#f7faff;border-radius:5px;border:1px solid #C1D0FD;padding-bottom:10px}.property-section-title{display:block;font-size:14px;background:#f7faff;border-bottom:none;padding:2px 0;margin:10px;line-height:24px;font-weight:700;border-bottom:solid 1px #C1D0FD;color:#4d5a81}.property-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:10px;padding:5px;height:100%;overflow:auto}.property-row{display:flex;flex-wrap:wrap;align-items:center;flex:25%;gap:10px}.property-label{color:#4465c9}.property-label span{padding-top:5px;display:inline-block;margin-right:5px}.property-label.invalid{color:red}.property-input{flex:2;min-width:200px}.checkbox-container{display:flex;align-items:center;gap:5px}.validation-error{color:red;font-size:.9rem}alg-presentation-profile-editor{display:block;height:100%}.pp-editor{height:100%}.pp-editor alg-tabset{display:block;height:100%}.pp-editor-tab{display:block;height:100%}.pp-editor-properties{height:100%;overflow:auto}.pp-editor-columns.gcc{padding:10px}.pp-editor-columns.gcc .gcc__panels{flex:1;min-height:0;border:1px solid #e9ecef}.pp-editor-columns.gcc{container-type:inline-size}.pp-editor-columns.gcc .gcc__browse,.pp-editor-columns.gcc .gcc__selection{flex:1 1 0;min-width:0;min-height:0}.pp-editor-columns.gcc .gcc__browse-row{cursor:pointer}@container (max-width: 700px){.pp-editor-columns .gcc__panels{flex-direction:column}.pp-editor-columns .gcc__browse{border-right:none;border-bottom:1px solid #e9ecef}}.pp-editor-add{width:28px;text-align:center;color:#999}.pp-editor-add-all{flex:none;margin-left:8px;padding:2px 8px;border:1px solid #ced4da;border-radius:3px;background:#fff;font-size:11px;cursor:pointer}.pp-editor-add-all:disabled{opacity:.5;cursor:default}\n"],
|
|
20928
|
+
template: "<div class=\"pp-editor\">\r\n @if (entity) {\r\n <alg-tabset [showNavs]=\"true\" [pills]=\"false\" (onSelect)=\"activeTab = $event\">\r\n\r\n <!--Propriétés : table, libellé, finalité et portée du profil, avec les composants des formulaires-->\r\n <alg-tab title=\"Propriétés\" [active]=\"activeTab === 0\" [class.pp-editor-tab]=\"activeTab === 0\">\r\n <div class=\"property-container pp-editor-properties\">\r\n @for (section of sections; track section.Name) {\r\n <div class=\"property-section-container\">\r\n <div class=\"property-section-title\">{{ section.Name }}</div>\r\n <div class=\"property-section-content\">\r\n @for (field of section.FieldViewModels; track field.PropertyName) {\r\n <div class=\"property-row\" [hidden]=\"isFieldHidden(field)\">\r\n <alg-field [field]=\"field\" [form]=\"form\" [readonly]=\"isFieldReadonly(field)\"\r\n (propertyChanged)=\"onPropertyChanged($event)\">\r\n </alg-field>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </alg-tab>\r\n\r\n <!--Colonnes : colonnes affichées par la grille, leur ordre et leurs libellés-->\r\n <alg-tab title=\"Colonnes\" [active]=\"activeTab === 1\" [class.pp-editor-tab]=\"activeTab === 1\">\r\n <div class=\"gcc pp-editor-columns\">\r\n <div *ngIf=\"isLoading\" class=\"gcc__loading\">\r\n <span class=\"gcc__spinner-icon fa fa-circle-o-notch fa-spin\"></span>\r\n Chargement des colonnes…\r\n </div>\r\n <div *ngIf=\"!isLoading && allItems.length === 0 && orderedSelection.length === 0\" class=\"gcc__hint\">\r\n Choisissez la table du profil dans l'onglet « Propriétés ».\r\n </div>\r\n <ng-container *ngIf=\"!isLoading && (allItems.length > 0 || orderedSelection.length > 0)\">\r\n <div class=\"gcc__panels\">\r\n\r\n <!-- ── Colonnes disponibles : celles de la table qui ne sont pas affichées ── -->\r\n <div class=\"gcc__browse\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes disponibles</span>\r\n <span class=\"gcc__badge\">{{ filteredItems.length }}</span>\r\n <input class=\"gcc__search\" type=\"text\" placeholder=\"Rechercher…\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"onSearch()\">\r\n <button *ngIf=\"!readonly\" class=\"pp-editor-add-all\" type=\"button\" [disabled]=\"filteredItems.length === 0\"\r\n (click)=\"addAll()\" title=\"Afficher toutes les colonnes listées\">Tout ajouter</button>\r\n </div>\r\n\r\n <div class=\"gcc__table-wrap\">\r\n <table class=\"gcc__browse-table\">\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredItems\"\r\n class=\"gcc__browse-row\"\r\n [class.gcc__browse-row--custom]=\"item.ColumnSourceType === 2\"\r\n title=\"Afficher cette colonne\"\r\n (click)=\"addItem(item)\">\r\n <td class=\"gcc__col-name\">\r\n <div class=\"gcc__col-key\">{{ item.ColumnKey }}</div>\r\n <div *ngIf=\"item.Label && item.Label !== item.ColumnKey\" class=\"gcc__sub\">{{ item.Label }}</div>\r\n </td>\r\n <td class=\"pp-editor-add\"><i *ngIf=\"!readonly\" class=\"fa fa-plus\"></i></td>\r\n </tr>\r\n <tr *ngIf=\"filteredItems.length === 0\">\r\n <td colspan=\"2\" class=\"gcc__browse-empty\">\r\n {{ searchText ? 'Aucune colonne trouvée' : 'Toutes les colonnes sont affichées' }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n <!-- ── Panel 4: Ordered selection with admin flags ────────────── -->\r\n <div class=\"gcc__selection\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes affichées</span>\r\n <span *ngIf=\"selectedCount > 0\" class=\"gcc__badge gcc__badge--primary\">{{ selectedCount }}</span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\" class=\"gcc__sel-legend\">\r\n <span class=\"gcc__sel-legend__drag\"></span>\r\n <span class=\"gcc__sel-legend__pos\">#</span>\r\n <span class=\"gcc__sel-legend__code\">Colonne</span>\r\n <span class=\"gcc__sel-legend__label\">Étiquette</span>\r\n <span class=\"gcc__sel-legend__display\">Affichage</span>\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <span class=\"gcc__sel-legend__flag\">Aut.</span>\r\n </ng-container>\r\n <span class=\"gcc__sel-legend__flag\">Ver.</span>\r\n <span class=\"gcc__sel-legend__remove\"></span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length === 0\" class=\"gcc__sel-empty\">\r\n <span class=\"fa fa-columns gcc__sel-empty__icon\"></span>\r\n <p>Choisissez des colonnes parmi les colonnes disponibles</p>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\"\r\n class=\"gcc__sel-list\"\r\n cdkDropList\r\n [cdkDropListData]=\"orderedSelection\"\r\n (cdkDropListDropped)=\"onDrop($event)\">\r\n\r\n <div *ngFor=\"let item of orderedSelection; let i = index\"\r\n class=\"gcc__sel-item\"\r\n cdkDrag [cdkDragDisabled]=\"readonly\"\r\n [cdkDragData]=\"item\">\r\n\r\n <div class=\"gcc__sel-item__placeholder\" *cdkDragPlaceholder></div>\r\n\r\n <span class=\"gcc__sel-item__drag\" cdkDragHandle>\r\n <i class=\"fa fa-bars\"></i>\r\n </span>\r\n\r\n <span class=\"gcc__sel-item__pos\">{{ i + 1 }}</span>\r\n\r\n <span class=\"gcc__sel-item__code\"\r\n [class.gcc__sel-item__code--cf]=\"item.ColumnSourceType === 2\"\r\n [title]=\"item.ColumnKey\">\r\n <span class=\"gcc__sel-item__name\">{{ item.ColumnKey }}</span>\r\n <span *ngIf=\"getCatalogLabel(item) !== item.ColumnKey\" class=\"gcc__sub\">{{ getCatalogLabel(item) }}</span>\r\n </span>\r\n\r\n <input class=\"gcc__sel-item__label\" type=\"text\"\r\n [placeholder]=\"getCatalogLabel(item)\"\r\n [(ngModel)]=\"item.Label\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\"\r\n (click)=\"$event.stopPropagation()\"\r\n title=\"Étiquette personnalisée\">\r\n\r\n <!-- Affichage : indicateur du type, ouvre la fenêtre d'édition de la colonne -->\r\n <span class=\"pp-display\" (click)=\"$event.stopPropagation()\">\r\n <button type=\"button\" class=\"pp-display__badge\"\r\n [class.pp-display__badge--default]=\"!getDisplayType(item)\"\r\n [title]=\"describeDisplay(item)\"\r\n (click)=\"openColumn(item)\">\r\n <i class=\"fa fa-{{ getDisplayType(item)?.icon ?? 'magic' }}\"></i>\r\n <span class=\"pp-display__text\">{{ getDisplayType(item)?.short ?? 'Auto' }}</span>\r\n </button>\r\n <button type=\"button\" class=\"pp-display__edit\" title=\"Modifier la colonne (libellé, affichage...)\" (click)=\"openColumn(item)\">\r\n <i class=\"fa fa-sliders\"></i>\r\n </button>\r\n </span>\r\n\r\n <!-- Perimeter scope: allowed flag -->\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsAllowed\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Autorisé\">\r\n </label>\r\n </ng-container>\r\n\r\n <!-- Always: locked flag -->\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsLocked\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Verrouillé\">\r\n </label>\r\n\r\n <button class=\"gcc__sel-item__remove\" type=\"button\"\r\n (click)=\"removeFromSelection(item); $event.stopPropagation()\"\r\n title=\"Retirer\">✕</button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Pied de la sélection -->\r\n <div class=\"gcc__sel-footer\">\r\n <span class=\"gcc__sel-footer__info\">\r\n <ng-container *ngIf=\"selectedCount > 0\">\r\n {{ selectedCount }} colonne(s) — glissez pour réordonner\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div><!-- /.gcc__panels -->\r\n </ng-container>\r\n </div>\r\n </alg-tab>\r\n </alg-tabset>\r\n }\r\n</div>\r\n",
|
|
20929
|
+
styles: ["alg-pp-column{display:block;height:100%}.gcc{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:10px;box-sizing:border-box}.gcc__form{flex:1;min-height:0;display:flex;flex-direction:column;background:#fff}.gcc__tabs{display:block;flex:none}.gcc__tabs .tabset-content{display:none}.gcc__tabs .nav-tabs-custom{margin-bottom:0;box-shadow:none}.gcc__content{flex:1;min-height:0;display:flex;flex-direction:column;gap:.75rem;padding:15px;overflow:hidden}.gcc__buttons{flex:none;margin-right:0;padding-bottom:0}.gcc__buttons .btn{margin-left:8px}.gcc__toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem;flex-shrink:0}.gcc__field{display:flex;flex-direction:column;gap:.25rem}.gcc__field label{font-size:.75rem;font-weight:600;color:#6c757d}.gcc__field input,.gcc__field select{min-width:9rem;padding:.35rem .5rem;border:1px solid #ced4da;border-radius:.25rem;font-size:.85rem}.gcc__message{padding:.5rem .75rem;background:#eef3f8;border-left:3px solid #4465C9;border-radius:.25rem;font-size:.85rem;flex-shrink:0}.gcc__body{flex:1;display:flex;gap:0;overflow:hidden;min-height:0;border:1px solid #e9ecef;border-radius:.25rem;background:#fff}.gcc__panel-hd{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__panel-title{font-size:.8rem;font-weight:600;display:flex;align-items:center;gap:6px}.gcc__panel-label{font-size:.75rem;font-weight:600;color:#495057}.gcc__count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:16px;padding:0 5px;background:#4465c91f;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:16px;padding:0 5px;background:#4465c91a;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge--primary{background:#4465c9;color:#fff}.gcc__muted{color:#6c757d;font-size:.8rem}.gcc__fw-normal{font-weight:400}.gcc__configs{display:flex;flex-direction:column;flex:0 0 220px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__list-scroll{flex:1;overflow:auto}.gcc__table{width:100%;border-collapse:collapse}.gcc__table th,.gcc__table td{padding:.35rem .6rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__config-row{cursor:pointer;transition:background .1s}.gcc__config-row:hover{background:#4465c90a}.gcc__config-row--selected{background:#4465c914;border-left:3px solid #4465C9}.gcc__config-row--selected td:first-child{padding-left:calc(.6rem - 3px)}.gcc__key{font-family:monospace;font-weight:600;color:#4465c9;font-size:.78rem}.gcc__sub{font-size:.7rem;font-weight:400;color:#6c757d;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__scope-badge{display:inline-block;padding:1px 5px;border-radius:20px;background:#4465c91a;color:#4465c9;font-size:9px;font-weight:700;text-transform:uppercase}.gcc__actions-cell{text-align:right;width:28px}.gcc__del-btn{background:none;border:none;color:#adb5bd;cursor:pointer;padding:2px 4px;border-radius:3px;font-size:.72rem;transition:color .1s}.gcc__del-btn:hover{color:#dc3545}.gcc__spinner{display:flex;align-items:center;gap:8px;padding:1rem .75rem;color:#6c757d;font-size:.8rem}.gcc__empty{padding:1.25rem .75rem;color:#6c757d;font-style:italic;font-size:.8rem}.gcc__editor{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.gcc__editor-hd{display:flex;align-items:center;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__loading{display:flex;align-items:center;gap:8px;padding:1.5rem 1rem;color:#6c757d;font-size:.85rem;flex-shrink:0}.gcc__spinner-icon{font-size:1rem}.gcc__panels{flex:1;display:flex;overflow:hidden;min-height:0}.gcc__groups{display:flex;flex-direction:column;flex:0 0 160px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__group-list{list-style:none;margin:0;padding:0;flex:1;overflow-y:auto}.gcc__group-item{display:flex;align-items:center;justify-content:space-between;padding:.4rem .6rem;cursor:pointer;font-size:.78rem;border-bottom:1px solid #e9ecef;transition:background .1s}.gcc__group-item:hover{background:#4465c90a}.gcc__group-item--active{background:#4465c914;font-weight:600;color:#4465c9}.gcc__group-item--standard .gcc__group-item__name{color:#4465c9}.gcc__group-item--custom .gcc__group-item__name{color:#6b7fd4}.gcc__group-item__name{flex:1}.gcc__group-meta{display:flex;align-items:center;gap:3px}.gcc__browse{display:flex;flex-direction:column;flex:1;border-right:1px solid #e9ecef;overflow:hidden;min-width:0}.gcc__search{height:26px;padding:0 .5rem;border:1px solid #ced4da;border-radius:.2rem;font-size:.78rem;width:140px}.gcc__table-wrap{flex:1;overflow:auto}.gcc__table-wrap::-webkit-scrollbar{width:5px}.gcc__table-wrap::-webkit-scrollbar-track{background:transparent}.gcc__table-wrap::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__browse-table{width:100%;border-collapse:collapse}.gcc__browse-table th,.gcc__browse-table td{padding:.3rem .5rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__browse-table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__browse-row{cursor:pointer;transition:background .1s}.gcc__browse-row:hover{background:#4465c90a}.gcc__browse-row--selected{background:#4465c914}.gcc__browse-row--custom .gcc__col-key{color:#6b7fd4}.gcc__col-check{width:28px;text-align:center}.gcc__col-key{font-family:monospace;font-size:11px;font-weight:600;color:#4465c9}.gcc__browse-empty{padding:1rem .75rem;color:#6c757d;font-style:italic;font-size:.78rem}.gcc__selection{display:flex;flex-direction:column;flex:0 0 380px;overflow:hidden}.gcc__sel-legend{display:flex;align-items:center;padding:3px .5rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#6c757d;flex-shrink:0;gap:0}.gcc__sel-legend__drag{width:20px;flex-shrink:0}.gcc__sel-legend__pos{width:22px;flex-shrink:0;text-align:center}.gcc__sel-legend__code{width:150px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__label{flex:1;min-width:0}.gcc__sel-legend__flag{width:36px;text-align:center;flex-shrink:0}.gcc__sel-legend__width{width:50px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__remove{width:22px;flex-shrink:0}.gcc__sel-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;color:#6c757d;gap:.5rem;font-size:.8rem}.gcc__sel-empty__icon{font-size:2rem;opacity:.3}.gcc__sel-empty p{margin:0}.gcc__sel-list{flex:1;overflow-y:auto}.gcc__sel-list::-webkit-scrollbar{width:4px}.gcc__sel-list::-webkit-scrollbar-track{background:transparent}.gcc__sel-list::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__sel-item{display:flex;align-items:center;padding:4px .5rem;border-bottom:1px solid #e9ecef;background:#fff;-webkit-user-select:none;user-select:none;gap:0;transition:background .1s}.gcc__sel-item:hover{background:#4465c908}.gcc__sel-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__sel-item__placeholder{height:32px;background:#4465c90f;border:1px dashed #4465C9;border-radius:2px;flex:1}.gcc__sel-item__drag{width:20px;flex-shrink:0;color:#ced4da;cursor:grab;font-size:11px;display:flex;align-items:center;justify-content:center}.gcc__sel-item__drag:hover{color:#4465c9}.gcc__sel-item__drag:active{cursor:grabbing}.gcc__sel-item__pos{width:22px;flex-shrink:0;font-size:9px;color:#6c757d;text-align:center}.gcc__sel-item__code{width:150px;flex-shrink:0;display:flex;flex-direction:column;overflow:hidden;padding-left:2px}.gcc__sel-item__code--cf .gcc__sel-item__name{color:#6b7fd4}.gcc__sel-item__name{font-family:monospace;font-size:10px;font-weight:600;color:#4465c9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__sel-item__label{flex:1;min-width:0;height:22px;padding:0 4px;border:1px solid transparent;border-radius:3px;font-size:11px;color:#343a40;background:transparent;outline:none;transition:border-color .1s,background .1s}.gcc__sel-item__label::placeholder{color:#6c757d;font-style:italic}.gcc__sel-item__label:hover{border-color:#d1d8de;background:#f8f9fa}.gcc__sel-item__label:focus{border-color:#4465c9;background:#fff}.gcc__sel-item__remove{width:22px;flex-shrink:0;background:none;border:none;color:#adb5bd;cursor:pointer;font-size:11px;padding:0;text-align:center;transition:color .1s}.gcc__sel-item__remove:hover{color:#dc3545}.gcc__sel-list.cdk-drop-list-dragging .gcc__sel-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__flag{width:36px;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;margin:0}.gcc__flag input[type=checkbox]{cursor:pointer}.gcc__item-width{width:46px;flex-shrink:0;padding:1px 3px;border:1px solid #ced4da;border-radius:3px;font-size:10px;text-align:right}.gcc__sel-footer{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-top:1px solid #e9ecef;flex-shrink:0}.gcc__sel-footer__info{font-size:.75rem;color:#6c757d;font-style:italic}.gcc__hint{display:flex;align-items:center;justify-content:center;flex:1;color:#6c757d;font-style:italic;font-size:.85rem}\n", ".home-page{font-family:Open sans,sans-serif;background:#fff;-webkit-font-smoothing:antialiased;height:100%;width:100%;padding:16px}.main-container{margin:0 50px}.main-container-modal{width:calc(100% - 50px);margin:10px 25px 0}.moyen-titre{font-weight:700;font-size:24px;color:#4d5a81;margin:8px 0;border-bottom:solid 1px #DBE4FF}.grand-titre{font-weight:700;font-size:28px;color:#4d5a81;margin:0 0 8px}.petit-titre{font-weight:700;font-size:16px;color:#4d5a81;margin:0 0 8px}.petit-titre.underlined{border-bottom:solid 1px #4D5A81}.paragraph{padding:0 15px}.paragraph-highlight{padding:5px 15px 0 12px;border-left:5px solid #8EA7F8;border-bottom:1px solid #DBE4FF;border-top:1px solid #DBE4FF;border-right:1px solid #DBE4FF;background-color:#f7faff}.highlight{background-color:#f7faff;border:1px solid #DBE4FF;border-radius:5px;padding:15px;color:#3c5dc4;margin:0 0 16px}.highlight p{margin-bottom:0}.highlight:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"53.294\" height=\"50.629\" viewBox=\"0 0 53.294 50.629\">%0D%0A <path id=\"allerg\\e8ne\" d=\"M830.494,25.793l-5.814,6.783.727,8.963-8.721,1.938-4.6,7.752L803.847,47.6l-8.236,3.634-4.6-7.51-8.721-1.938.727-8.963L777.2,26.035l5.814-6.783-.727-8.963,8.721-1.938L795.61.6l8.236,3.634L812.083.6l4.6,7.752,8.721,1.938-.727,8.963Zm-24.467,2.422V13.681h-4.845V28.216Zm0,9.69V33.06h-4.845v4.845Z\" transform=\"translate(-777.2 -0.6)\"/>%0D%0A</svg>%0D%0A');background-repeat:no-repeat;margin:0 8px 24px 0;filter:invert(31%) sepia(51%) saturate(1323%) hue-rotate(199deg) brightness(99%) contrast(94%)}.notification{background-color:#dbe4ff;border:1px solid #C4D0F9;border-radius:5px;color:#4d5a81;margin:16px;padding:5px 15px;text-align:justify}.notification:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"></path></svg>');background-repeat:no-repeat;margin:0 8px 0 0;filter:invert(31%) sepia(8%) saturate(2329%) hue-rotate(188deg) brightness(103%) contrast(85%)}.notification-text{padding:0 15px 0 30px;font-size:16px}.propertyGridform{height:100%;width:100%}.property-grid-tabset{height:100%}.property-grid-tab{height:100%;width:100%;padding:5px}.property-row-center{padding-top:21px}.property-section-content{display:grid;grid-template-columns:repeat(auto-fit,minmax(225px,1fr));align-items:flex-start;align-content:flex-start;gap:10px;margin:0 10px}.property-section-container{display:flex;flex-direction:column;background:#f7faff;border-radius:5px;border:1px solid #C1D0FD;padding-bottom:10px}.property-section-title{display:block;font-size:14px;background:#f7faff;border-bottom:none;padding:2px 0;margin:10px;line-height:24px;font-weight:700;border-bottom:solid 1px #C1D0FD;color:#4d5a81}.property-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:10px;padding:5px;height:100%;overflow:auto}.property-row{display:flex;flex-wrap:wrap;align-items:center;flex:25%;gap:10px}.property-label{color:#4465c9}.property-label span{padding-top:5px;display:inline-block;margin-right:5px}.property-label.invalid{color:red}.property-input{flex:2;min-width:200px}.checkbox-container{display:flex;align-items:center;gap:5px}.validation-error{color:red;font-size:.9rem}alg-presentation-profile-editor{display:block;height:100%}.pp-editor{height:100%}.pp-editor alg-tabset{display:block;height:100%}.pp-editor-tab{display:block;height:100%}.pp-editor-properties{height:100%;overflow:auto}.pp-editor-columns.gcc{padding:10px}.pp-editor-columns.gcc .gcc__panels{flex:1;min-height:0;border:1px solid #e9ecef}.pp-editor-columns.gcc{container-type:inline-size}.pp-editor-columns.gcc .gcc__browse,.pp-editor-columns.gcc .gcc__selection{flex:1 1 0;min-width:0;min-height:0}.pp-editor-columns.gcc .gcc__browse-row{cursor:pointer}@container (max-width: 700px){.pp-editor-columns .gcc__panels{flex-direction:column}.pp-editor-columns .gcc__browse{border-right:none;border-bottom:1px solid #e9ecef}}.pp-editor-add{width:28px;text-align:center;color:#999}.pp-editor-add-all{flex:none;margin-left:8px;padding:2px 8px;border:1px solid #ced4da;border-radius:3px;background:#fff;font-size:11px;cursor:pointer}.pp-editor-add-all:disabled{opacity:.5;cursor:default}.gcc__sel-legend__display{flex:none;width:112px;margin:0 4px;text-align:center}.pp-display{flex:none;display:inline-flex;align-items:center;gap:2px;width:112px;margin:0 4px}.pp-display__badge{flex:1;min-width:0;display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid #c5d3f0;border-radius:10px;background:#eef3fc;color:#35a;font-size:11px;white-space:nowrap;cursor:pointer}.pp-display__badge .fa{width:12px;text-align:center}.pp-display__badge--default{border-style:dashed;background:transparent;color:#999}.pp-display__text{overflow:hidden;text-overflow:ellipsis}.pp-display__edit{flex:none;width:22px;height:22px;padding:0;border:none;border-radius:3px;background:transparent;color:#777;cursor:pointer}.pp-display__edit:hover{background:#e9ecef;color:#333}\n"],
|
|
20455
20930
|
dependencies: [
|
|
20456
20931
|
{
|
|
20457
20932
|
kind: "directive",
|
|
@@ -20623,14 +21098,15 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
20623
21098
|
encapsulation: ViewEncapsulation.None,
|
|
20624
21099
|
changeDetection: ChangeDetectionStrategy.Eager,
|
|
20625
21100
|
standalone: false,
|
|
20626
|
-
template: "<div class=\"pp-editor\">\r\n @if (entity) {\r\n <alg-tabset [showNavs]=\"true\" [pills]=\"false\" (onSelect)=\"activeTab = $event\">\r\n\r\n <!--Propriétés : table, libellé, finalité et portée du profil, avec les composants des formulaires-->\r\n <alg-tab title=\"Propriétés\" [active]=\"activeTab === 0\" [class.pp-editor-tab]=\"activeTab === 0\">\r\n <div class=\"property-container pp-editor-properties\">\r\n @for (section of sections; track section.Name) {\r\n <div class=\"property-section-container\">\r\n <div class=\"property-section-title\">{{ section.Name }}</div>\r\n <div class=\"property-section-content\">\r\n @for (field of section.FieldViewModels; track field.PropertyName) {\r\n <div class=\"property-row\" [hidden]=\"isFieldHidden(field)\">\r\n <alg-field [field]=\"field\" [form]=\"form\" [readonly]=\"isFieldReadonly(field)\"\r\n (propertyChanged)=\"onPropertyChanged($event)\">\r\n </alg-field>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </alg-tab>\r\n\r\n <!--Colonnes : colonnes affichées par la grille, leur ordre et leurs libellés-->\r\n <alg-tab title=\"Colonnes\" [active]=\"activeTab === 1\" [class.pp-editor-tab]=\"activeTab === 1\">\r\n <div class=\"gcc pp-editor-columns\">\r\n <div *ngIf=\"isLoading\" class=\"gcc__loading\">\r\n <span class=\"gcc__spinner-icon fa fa-circle-o-notch fa-spin\"></span>\r\n Chargement des colonnes…\r\n </div>\r\n <div *ngIf=\"!isLoading && allItems.length === 0 && orderedSelection.length === 0\" class=\"gcc__hint\">\r\n Choisissez la table du profil dans l'onglet « Propriétés ».\r\n </div>\r\n <ng-container *ngIf=\"!isLoading && (allItems.length > 0 || orderedSelection.length > 0)\">\r\n <div class=\"gcc__panels\">\r\n\r\n <!-- ── Colonnes disponibles : celles de la table qui ne sont pas affichées ── -->\r\n <div class=\"gcc__browse\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes disponibles</span>\r\n <span class=\"gcc__badge\">{{ filteredItems.length }}</span>\r\n <input class=\"gcc__search\" type=\"text\" placeholder=\"Rechercher…\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"onSearch()\">\r\n <button *ngIf=\"!readonly\" class=\"pp-editor-add-all\" type=\"button\" [disabled]=\"filteredItems.length === 0\"\r\n (click)=\"addAll()\" title=\"Afficher toutes les colonnes listées\">Tout ajouter</button>\r\n </div>\r\n\r\n <div class=\"gcc__table-wrap\">\r\n <table class=\"gcc__browse-table\">\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredItems\"\r\n class=\"gcc__browse-row\"\r\n [class.gcc__browse-row--custom]=\"item.ColumnSourceType === 2\"\r\n title=\"Afficher cette colonne\"\r\n (click)=\"addItem(item)\">\r\n <td class=\"gcc__col-name\">\r\n <div class=\"gcc__col-key\">{{ item.ColumnKey }}</div>\r\n <div *ngIf=\"item.Label && item.Label !== item.ColumnKey\" class=\"gcc__sub\">{{ item.Label }}</div>\r\n </td>\r\n <td class=\"pp-editor-add\"><i *ngIf=\"!readonly\" class=\"fa fa-plus\"></i></td>\r\n </tr>\r\n <tr *ngIf=\"filteredItems.length === 0\">\r\n <td colspan=\"2\" class=\"gcc__browse-empty\">\r\n {{ searchText ? 'Aucune colonne trouvée' : 'Toutes les colonnes sont affichées' }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n <!-- ── Panel 4: Ordered selection with admin flags ────────────── -->\r\n <div class=\"gcc__selection\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes affichées</span>\r\n <span *ngIf=\"selectedCount > 0\" class=\"gcc__badge gcc__badge--primary\">{{ selectedCount }}</span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\" class=\"gcc__sel-legend\">\r\n <span class=\"gcc__sel-legend__drag\"></span>\r\n <span class=\"gcc__sel-legend__pos\">#</span>\r\n <span class=\"gcc__sel-legend__code\">Colonne</span>\r\n <span class=\"gcc__sel-legend__label\">Étiquette</span>\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <span class=\"gcc__sel-legend__flag\">Aut.</span>\r\n </ng-container>\r\n <span class=\"gcc__sel-legend__flag\">Ver.</span>\r\n <span class=\"gcc__sel-legend__remove\"></span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length === 0\" class=\"gcc__sel-empty\">\r\n <span class=\"fa fa-columns gcc__sel-empty__icon\"></span>\r\n <p>Choisissez des colonnes parmi les colonnes disponibles</p>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\"\r\n class=\"gcc__sel-list\"\r\n cdkDropList\r\n [cdkDropListData]=\"orderedSelection\"\r\n (cdkDropListDropped)=\"onDrop($event)\">\r\n\r\n <div *ngFor=\"let item of orderedSelection; let i = index\"\r\n class=\"gcc__sel-item\"\r\n cdkDrag [cdkDragDisabled]=\"readonly\"\r\n [cdkDragData]=\"item\">\r\n\r\n <div class=\"gcc__sel-item__placeholder\" *cdkDragPlaceholder></div>\r\n\r\n <span class=\"gcc__sel-item__drag\" cdkDragHandle>\r\n <i class=\"fa fa-bars\"></i>\r\n </span>\r\n\r\n <span class=\"gcc__sel-item__pos\">{{ i + 1 }}</span>\r\n\r\n <span class=\"gcc__sel-item__code\"\r\n [class.gcc__sel-item__code--cf]=\"item.ColumnSourceType === 2\"\r\n [title]=\"item.ColumnKey\">\r\n <span class=\"gcc__sel-item__name\">{{ item.ColumnKey }}</span>\r\n <span *ngIf=\"getCatalogLabel(item) !== item.ColumnKey\" class=\"gcc__sub\">{{ getCatalogLabel(item) }}</span>\r\n </span>\r\n\r\n <input class=\"gcc__sel-item__label\" type=\"text\"\r\n [placeholder]=\"getCatalogLabel(item)\"\r\n [(ngModel)]=\"item.Label\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\"\r\n (click)=\"$event.stopPropagation()\"\r\n title=\"Étiquette personnalisée\">\r\n\r\n <!-- Perimeter scope: allowed flag -->\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsAllowed\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Autorisé\">\r\n </label>\r\n </ng-container>\r\n\r\n <!-- Always: locked flag -->\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsLocked\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Verrouillé\">\r\n </label>\r\n\r\n <button class=\"gcc__sel-item__remove\" type=\"button\"\r\n (click)=\"removeFromSelection(item); $event.stopPropagation()\"\r\n title=\"Retirer\">✕</button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Pied de la sélection -->\r\n <div class=\"gcc__sel-footer\">\r\n <span class=\"gcc__sel-footer__info\">\r\n <ng-container *ngIf=\"selectedCount > 0\">\r\n {{ selectedCount }} colonne(s) — glissez pour réordonner\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div><!-- /.gcc__panels -->\r\n </ng-container>\r\n </div>\r\n </alg-tab>\r\n </alg-tabset>\r\n }\r\n</div>\r\n",
|
|
20627
|
-
styles: ["alg-pp-column{display:block;height:100%}.gcc{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:10px;box-sizing:border-box}.gcc__form{flex:1;min-height:0;display:flex;flex-direction:column;background:#fff}.gcc__tabs{display:block;flex:none}.gcc__tabs .tabset-content{display:none}.gcc__tabs .nav-tabs-custom{margin-bottom:0;box-shadow:none}.gcc__content{flex:1;min-height:0;display:flex;flex-direction:column;gap:.75rem;padding:15px;overflow:hidden}.gcc__buttons{flex:none;margin-right:0;padding-bottom:0}.gcc__buttons .btn{margin-left:8px}.gcc__toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem;flex-shrink:0}.gcc__field{display:flex;flex-direction:column;gap:.25rem}.gcc__field label{font-size:.75rem;font-weight:600;color:#6c757d}.gcc__field input,.gcc__field select{min-width:9rem;padding:.35rem .5rem;border:1px solid #ced4da;border-radius:.25rem;font-size:.85rem}.gcc__message{padding:.5rem .75rem;background:#eef3f8;border-left:3px solid #4465C9;border-radius:.25rem;font-size:.85rem;flex-shrink:0}.gcc__body{flex:1;display:flex;gap:0;overflow:hidden;min-height:0;border:1px solid #e9ecef;border-radius:.25rem;background:#fff}.gcc__panel-hd{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__panel-title{font-size:.8rem;font-weight:600;display:flex;align-items:center;gap:6px}.gcc__panel-label{font-size:.75rem;font-weight:600;color:#495057}.gcc__count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:16px;padding:0 5px;background:#4465c91f;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:16px;padding:0 5px;background:#4465c91a;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge--primary{background:#4465c9;color:#fff}.gcc__muted{color:#6c757d;font-size:.8rem}.gcc__fw-normal{font-weight:400}.gcc__configs{display:flex;flex-direction:column;flex:0 0 220px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__list-scroll{flex:1;overflow:auto}.gcc__table{width:100%;border-collapse:collapse}.gcc__table th,.gcc__table td{padding:.35rem .6rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__config-row{cursor:pointer;transition:background .1s}.gcc__config-row:hover{background:#4465c90a}.gcc__config-row--selected{background:#4465c914;border-left:3px solid #4465C9}.gcc__config-row--selected td:first-child{padding-left:calc(.6rem - 3px)}.gcc__key{font-family:monospace;font-weight:600;color:#4465c9;font-size:.78rem}.gcc__sub{font-size:.7rem;font-weight:400;color:#6c757d;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__scope-badge{display:inline-block;padding:1px 5px;border-radius:20px;background:#4465c91a;color:#4465c9;font-size:9px;font-weight:700;text-transform:uppercase}.gcc__actions-cell{text-align:right;width:28px}.gcc__del-btn{background:none;border:none;color:#adb5bd;cursor:pointer;padding:2px 4px;border-radius:3px;font-size:.72rem;transition:color .1s}.gcc__del-btn:hover{color:#dc3545}.gcc__spinner{display:flex;align-items:center;gap:8px;padding:1rem .75rem;color:#6c757d;font-size:.8rem}.gcc__empty{padding:1.25rem .75rem;color:#6c757d;font-style:italic;font-size:.8rem}.gcc__editor{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.gcc__editor-hd{display:flex;align-items:center;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__loading{display:flex;align-items:center;gap:8px;padding:1.5rem 1rem;color:#6c757d;font-size:.85rem;flex-shrink:0}.gcc__spinner-icon{font-size:1rem}.gcc__panels{flex:1;display:flex;overflow:hidden;min-height:0}.gcc__groups{display:flex;flex-direction:column;flex:0 0 160px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__group-list{list-style:none;margin:0;padding:0;flex:1;overflow-y:auto}.gcc__group-item{display:flex;align-items:center;justify-content:space-between;padding:.4rem .6rem;cursor:pointer;font-size:.78rem;border-bottom:1px solid #e9ecef;transition:background .1s}.gcc__group-item:hover{background:#4465c90a}.gcc__group-item--active{background:#4465c914;font-weight:600;color:#4465c9}.gcc__group-item--standard .gcc__group-item__name{color:#4465c9}.gcc__group-item--custom .gcc__group-item__name{color:#6b7fd4}.gcc__group-item__name{flex:1}.gcc__group-meta{display:flex;align-items:center;gap:3px}.gcc__browse{display:flex;flex-direction:column;flex:1;border-right:1px solid #e9ecef;overflow:hidden;min-width:0}.gcc__search{height:26px;padding:0 .5rem;border:1px solid #ced4da;border-radius:.2rem;font-size:.78rem;width:140px}.gcc__table-wrap{flex:1;overflow:auto}.gcc__table-wrap::-webkit-scrollbar{width:5px}.gcc__table-wrap::-webkit-scrollbar-track{background:transparent}.gcc__table-wrap::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__browse-table{width:100%;border-collapse:collapse}.gcc__browse-table th,.gcc__browse-table td{padding:.3rem .5rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__browse-table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__browse-row{cursor:pointer;transition:background .1s}.gcc__browse-row:hover{background:#4465c90a}.gcc__browse-row--selected{background:#4465c914}.gcc__browse-row--custom .gcc__col-key{color:#6b7fd4}.gcc__col-check{width:28px;text-align:center}.gcc__col-key{font-family:monospace;font-size:11px;font-weight:600;color:#4465c9}.gcc__browse-empty{padding:1rem .75rem;color:#6c757d;font-style:italic;font-size:.78rem}.gcc__selection{display:flex;flex-direction:column;flex:0 0 380px;overflow:hidden}.gcc__sel-legend{display:flex;align-items:center;padding:3px .5rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#6c757d;flex-shrink:0;gap:0}.gcc__sel-legend__drag{width:20px;flex-shrink:0}.gcc__sel-legend__pos{width:22px;flex-shrink:0;text-align:center}.gcc__sel-legend__code{width:150px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__label{flex:1;min-width:0}.gcc__sel-legend__flag{width:36px;text-align:center;flex-shrink:0}.gcc__sel-legend__width{width:50px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__remove{width:22px;flex-shrink:0}.gcc__sel-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;color:#6c757d;gap:.5rem;font-size:.8rem}.gcc__sel-empty__icon{font-size:2rem;opacity:.3}.gcc__sel-empty p{margin:0}.gcc__sel-list{flex:1;overflow-y:auto}.gcc__sel-list::-webkit-scrollbar{width:4px}.gcc__sel-list::-webkit-scrollbar-track{background:transparent}.gcc__sel-list::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__sel-item{display:flex;align-items:center;padding:4px .5rem;border-bottom:1px solid #e9ecef;background:#fff;-webkit-user-select:none;user-select:none;gap:0;transition:background .1s}.gcc__sel-item:hover{background:#4465c908}.gcc__sel-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__sel-item__placeholder{height:32px;background:#4465c90f;border:1px dashed #4465C9;border-radius:2px;flex:1}.gcc__sel-item__drag{width:20px;flex-shrink:0;color:#ced4da;cursor:grab;font-size:11px;display:flex;align-items:center;justify-content:center}.gcc__sel-item__drag:hover{color:#4465c9}.gcc__sel-item__drag:active{cursor:grabbing}.gcc__sel-item__pos{width:22px;flex-shrink:0;font-size:9px;color:#6c757d;text-align:center}.gcc__sel-item__code{width:150px;flex-shrink:0;display:flex;flex-direction:column;overflow:hidden;padding-left:2px}.gcc__sel-item__code--cf .gcc__sel-item__name{color:#6b7fd4}.gcc__sel-item__name{font-family:monospace;font-size:10px;font-weight:600;color:#4465c9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__sel-item__label{flex:1;min-width:0;height:22px;padding:0 4px;border:1px solid transparent;border-radius:3px;font-size:11px;color:#343a40;background:transparent;outline:none;transition:border-color .1s,background .1s}.gcc__sel-item__label::placeholder{color:#6c757d;font-style:italic}.gcc__sel-item__label:hover{border-color:#d1d8de;background:#f8f9fa}.gcc__sel-item__label:focus{border-color:#4465c9;background:#fff}.gcc__sel-item__remove{width:22px;flex-shrink:0;background:none;border:none;color:#adb5bd;cursor:pointer;font-size:11px;padding:0;text-align:center;transition:color .1s}.gcc__sel-item__remove:hover{color:#dc3545}.gcc__sel-list.cdk-drop-list-dragging .gcc__sel-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__flag{width:36px;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;margin:0}.gcc__flag input[type=checkbox]{cursor:pointer}.gcc__item-width{width:46px;flex-shrink:0;padding:1px 3px;border:1px solid #ced4da;border-radius:3px;font-size:10px;text-align:right}.gcc__sel-footer{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-top:1px solid #e9ecef;flex-shrink:0}.gcc__sel-footer__info{font-size:.75rem;color:#6c757d;font-style:italic}.gcc__hint{display:flex;align-items:center;justify-content:center;flex:1;color:#6c757d;font-style:italic;font-size:.85rem}\n", ".home-page{font-family:Open sans,sans-serif;background:#fff;-webkit-font-smoothing:antialiased;height:100%;width:100%;padding:16px}.main-container{margin:0 50px}.main-container-modal{width:calc(100% - 50px);margin:10px 25px 0}.moyen-titre{font-weight:700;font-size:24px;color:#4d5a81;margin:8px 0;border-bottom:solid 1px #DBE4FF}.grand-titre{font-weight:700;font-size:28px;color:#4d5a81;margin:0 0 8px}.petit-titre{font-weight:700;font-size:16px;color:#4d5a81;margin:0 0 8px}.petit-titre.underlined{border-bottom:solid 1px #4D5A81}.paragraph{padding:0 15px}.paragraph-highlight{padding:5px 15px 0 12px;border-left:5px solid #8EA7F8;border-bottom:1px solid #DBE4FF;border-top:1px solid #DBE4FF;border-right:1px solid #DBE4FF;background-color:#f7faff}.highlight{background-color:#f7faff;border:1px solid #DBE4FF;border-radius:5px;padding:15px;color:#3c5dc4;margin:0 0 16px}.highlight p{margin-bottom:0}.highlight:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"53.294\" height=\"50.629\" viewBox=\"0 0 53.294 50.629\">%0D%0A <path id=\"allerg\\e8ne\" d=\"M830.494,25.793l-5.814,6.783.727,8.963-8.721,1.938-4.6,7.752L803.847,47.6l-8.236,3.634-4.6-7.51-8.721-1.938.727-8.963L777.2,26.035l5.814-6.783-.727-8.963,8.721-1.938L795.61.6l8.236,3.634L812.083.6l4.6,7.752,8.721,1.938-.727,8.963Zm-24.467,2.422V13.681h-4.845V28.216Zm0,9.69V33.06h-4.845v4.845Z\" transform=\"translate(-777.2 -0.6)\"/>%0D%0A</svg>%0D%0A');background-repeat:no-repeat;margin:0 8px 24px 0;filter:invert(31%) sepia(51%) saturate(1323%) hue-rotate(199deg) brightness(99%) contrast(94%)}.notification{background-color:#dbe4ff;border:1px solid #C4D0F9;border-radius:5px;color:#4d5a81;margin:16px;padding:5px 15px;text-align:justify}.notification:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"></path></svg>');background-repeat:no-repeat;margin:0 8px 0 0;filter:invert(31%) sepia(8%) saturate(2329%) hue-rotate(188deg) brightness(103%) contrast(85%)}.notification-text{padding:0 15px 0 30px;font-size:16px}.propertyGridform{height:100%;width:100%}.property-grid-tabset{height:100%}.property-grid-tab{height:100%;width:100%;padding:5px}.property-row-center{padding-top:21px}.property-section-content{display:grid;grid-template-columns:repeat(auto-fit,minmax(225px,1fr));align-items:flex-start;align-content:flex-start;gap:10px;margin:0 10px}.property-section-container{display:flex;flex-direction:column;background:#f7faff;border-radius:5px;border:1px solid #C1D0FD;padding-bottom:10px}.property-section-title{display:block;font-size:14px;background:#f7faff;border-bottom:none;padding:2px 0;margin:10px;line-height:24px;font-weight:700;border-bottom:solid 1px #C1D0FD;color:#4d5a81}.property-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:10px;padding:5px;height:100%;overflow:auto}.property-row{display:flex;flex-wrap:wrap;align-items:center;flex:25%;gap:10px}.property-label{color:#4465c9}.property-label span{padding-top:5px;display:inline-block;margin-right:5px}.property-label.invalid{color:red}.property-input{flex:2;min-width:200px}.checkbox-container{display:flex;align-items:center;gap:5px}.validation-error{color:red;font-size:.9rem}alg-presentation-profile-editor{display:block;height:100%}.pp-editor{height:100%}.pp-editor alg-tabset{display:block;height:100%}.pp-editor-tab{display:block;height:100%}.pp-editor-properties{height:100%;overflow:auto}.pp-editor-columns.gcc{padding:10px}.pp-editor-columns.gcc .gcc__panels{flex:1;min-height:0;border:1px solid #e9ecef}.pp-editor-columns.gcc{container-type:inline-size}.pp-editor-columns.gcc .gcc__browse,.pp-editor-columns.gcc .gcc__selection{flex:1 1 0;min-width:0;min-height:0}.pp-editor-columns.gcc .gcc__browse-row{cursor:pointer}@container (max-width: 700px){.pp-editor-columns .gcc__panels{flex-direction:column}.pp-editor-columns .gcc__browse{border-right:none;border-bottom:1px solid #e9ecef}}.pp-editor-add{width:28px;text-align:center;color:#999}.pp-editor-add-all{flex:none;margin-left:8px;padding:2px 8px;border:1px solid #ced4da;border-radius:3px;background:#fff;font-size:11px;cursor:pointer}.pp-editor-add-all:disabled{opacity:.5;cursor:default}\n"]
|
|
21101
|
+
template: "<div class=\"pp-editor\">\r\n @if (entity) {\r\n <alg-tabset [showNavs]=\"true\" [pills]=\"false\" (onSelect)=\"activeTab = $event\">\r\n\r\n <!--Propriétés : table, libellé, finalité et portée du profil, avec les composants des formulaires-->\r\n <alg-tab title=\"Propriétés\" [active]=\"activeTab === 0\" [class.pp-editor-tab]=\"activeTab === 0\">\r\n <div class=\"property-container pp-editor-properties\">\r\n @for (section of sections; track section.Name) {\r\n <div class=\"property-section-container\">\r\n <div class=\"property-section-title\">{{ section.Name }}</div>\r\n <div class=\"property-section-content\">\r\n @for (field of section.FieldViewModels; track field.PropertyName) {\r\n <div class=\"property-row\" [hidden]=\"isFieldHidden(field)\">\r\n <alg-field [field]=\"field\" [form]=\"form\" [readonly]=\"isFieldReadonly(field)\"\r\n (propertyChanged)=\"onPropertyChanged($event)\">\r\n </alg-field>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </alg-tab>\r\n\r\n <!--Colonnes : colonnes affichées par la grille, leur ordre et leurs libellés-->\r\n <alg-tab title=\"Colonnes\" [active]=\"activeTab === 1\" [class.pp-editor-tab]=\"activeTab === 1\">\r\n <div class=\"gcc pp-editor-columns\">\r\n <div *ngIf=\"isLoading\" class=\"gcc__loading\">\r\n <span class=\"gcc__spinner-icon fa fa-circle-o-notch fa-spin\"></span>\r\n Chargement des colonnes…\r\n </div>\r\n <div *ngIf=\"!isLoading && allItems.length === 0 && orderedSelection.length === 0\" class=\"gcc__hint\">\r\n Choisissez la table du profil dans l'onglet « Propriétés ».\r\n </div>\r\n <ng-container *ngIf=\"!isLoading && (allItems.length > 0 || orderedSelection.length > 0)\">\r\n <div class=\"gcc__panels\">\r\n\r\n <!-- ── Colonnes disponibles : celles de la table qui ne sont pas affichées ── -->\r\n <div class=\"gcc__browse\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes disponibles</span>\r\n <span class=\"gcc__badge\">{{ filteredItems.length }}</span>\r\n <input class=\"gcc__search\" type=\"text\" placeholder=\"Rechercher…\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"onSearch()\">\r\n <button *ngIf=\"!readonly\" class=\"pp-editor-add-all\" type=\"button\" [disabled]=\"filteredItems.length === 0\"\r\n (click)=\"addAll()\" title=\"Afficher toutes les colonnes listées\">Tout ajouter</button>\r\n </div>\r\n\r\n <div class=\"gcc__table-wrap\">\r\n <table class=\"gcc__browse-table\">\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredItems\"\r\n class=\"gcc__browse-row\"\r\n [class.gcc__browse-row--custom]=\"item.ColumnSourceType === 2\"\r\n title=\"Afficher cette colonne\"\r\n (click)=\"addItem(item)\">\r\n <td class=\"gcc__col-name\">\r\n <div class=\"gcc__col-key\">{{ item.ColumnKey }}</div>\r\n <div *ngIf=\"item.Label && item.Label !== item.ColumnKey\" class=\"gcc__sub\">{{ item.Label }}</div>\r\n </td>\r\n <td class=\"pp-editor-add\"><i *ngIf=\"!readonly\" class=\"fa fa-plus\"></i></td>\r\n </tr>\r\n <tr *ngIf=\"filteredItems.length === 0\">\r\n <td colspan=\"2\" class=\"gcc__browse-empty\">\r\n {{ searchText ? 'Aucune colonne trouvée' : 'Toutes les colonnes sont affichées' }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n <!-- ── Panel 4: Ordered selection with admin flags ────────────── -->\r\n <div class=\"gcc__selection\">\r\n <div class=\"gcc__panel-hd\">\r\n <span class=\"gcc__panel-label\">Colonnes affichées</span>\r\n <span *ngIf=\"selectedCount > 0\" class=\"gcc__badge gcc__badge--primary\">{{ selectedCount }}</span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\" class=\"gcc__sel-legend\">\r\n <span class=\"gcc__sel-legend__drag\"></span>\r\n <span class=\"gcc__sel-legend__pos\">#</span>\r\n <span class=\"gcc__sel-legend__code\">Colonne</span>\r\n <span class=\"gcc__sel-legend__label\">Étiquette</span>\r\n <span class=\"gcc__sel-legend__display\">Affichage</span>\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <span class=\"gcc__sel-legend__flag\">Aut.</span>\r\n </ng-container>\r\n <span class=\"gcc__sel-legend__flag\">Ver.</span>\r\n <span class=\"gcc__sel-legend__remove\"></span>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length === 0\" class=\"gcc__sel-empty\">\r\n <span class=\"fa fa-columns gcc__sel-empty__icon\"></span>\r\n <p>Choisissez des colonnes parmi les colonnes disponibles</p>\r\n </div>\r\n\r\n <div *ngIf=\"orderedSelection.length > 0\"\r\n class=\"gcc__sel-list\"\r\n cdkDropList\r\n [cdkDropListData]=\"orderedSelection\"\r\n (cdkDropListDropped)=\"onDrop($event)\">\r\n\r\n <div *ngFor=\"let item of orderedSelection; let i = index\"\r\n class=\"gcc__sel-item\"\r\n cdkDrag [cdkDragDisabled]=\"readonly\"\r\n [cdkDragData]=\"item\">\r\n\r\n <div class=\"gcc__sel-item__placeholder\" *cdkDragPlaceholder></div>\r\n\r\n <span class=\"gcc__sel-item__drag\" cdkDragHandle>\r\n <i class=\"fa fa-bars\"></i>\r\n </span>\r\n\r\n <span class=\"gcc__sel-item__pos\">{{ i + 1 }}</span>\r\n\r\n <span class=\"gcc__sel-item__code\"\r\n [class.gcc__sel-item__code--cf]=\"item.ColumnSourceType === 2\"\r\n [title]=\"item.ColumnKey\">\r\n <span class=\"gcc__sel-item__name\">{{ item.ColumnKey }}</span>\r\n <span *ngIf=\"getCatalogLabel(item) !== item.ColumnKey\" class=\"gcc__sub\">{{ getCatalogLabel(item) }}</span>\r\n </span>\r\n\r\n <input class=\"gcc__sel-item__label\" type=\"text\"\r\n [placeholder]=\"getCatalogLabel(item)\"\r\n [(ngModel)]=\"item.Label\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\"\r\n (click)=\"$event.stopPropagation()\"\r\n title=\"Étiquette personnalisée\">\r\n\r\n <!-- Affichage : indicateur du type, ouvre la fenêtre d'édition de la colonne -->\r\n <span class=\"pp-display\" (click)=\"$event.stopPropagation()\">\r\n <button type=\"button\" class=\"pp-display__badge\"\r\n [class.pp-display__badge--default]=\"!getDisplayType(item)\"\r\n [title]=\"describeDisplay(item)\"\r\n (click)=\"openColumn(item)\">\r\n <i class=\"fa fa-{{ getDisplayType(item)?.icon ?? 'magic' }}\"></i>\r\n <span class=\"pp-display__text\">{{ getDisplayType(item)?.short ?? 'Auto' }}</span>\r\n </button>\r\n <button type=\"button\" class=\"pp-display__edit\" title=\"Modifier la colonne (libellé, affichage...)\" (click)=\"openColumn(item)\">\r\n <i class=\"fa fa-sliders\"></i>\r\n </button>\r\n </span>\r\n\r\n <!-- Perimeter scope: allowed flag -->\r\n <ng-container *ngIf=\"isPerimeter\">\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsAllowed\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Autorisé\">\r\n </label>\r\n </ng-container>\r\n\r\n <!-- Always: locked flag -->\r\n <label class=\"gcc__flag\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.IsLocked\" (ngModelChange)=\"onColumnsChanged()\" [disabled]=\"readonly\" title=\"Verrouillé\">\r\n </label>\r\n\r\n <button class=\"gcc__sel-item__remove\" type=\"button\"\r\n (click)=\"removeFromSelection(item); $event.stopPropagation()\"\r\n title=\"Retirer\">✕</button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Pied de la sélection -->\r\n <div class=\"gcc__sel-footer\">\r\n <span class=\"gcc__sel-footer__info\">\r\n <ng-container *ngIf=\"selectedCount > 0\">\r\n {{ selectedCount }} colonne(s) — glissez pour réordonner\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div><!-- /.gcc__panels -->\r\n </ng-container>\r\n </div>\r\n </alg-tab>\r\n </alg-tabset>\r\n }\r\n</div>\r\n",
|
|
21102
|
+
styles: ["alg-pp-column{display:block;height:100%}.gcc{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:10px;box-sizing:border-box}.gcc__form{flex:1;min-height:0;display:flex;flex-direction:column;background:#fff}.gcc__tabs{display:block;flex:none}.gcc__tabs .tabset-content{display:none}.gcc__tabs .nav-tabs-custom{margin-bottom:0;box-shadow:none}.gcc__content{flex:1;min-height:0;display:flex;flex-direction:column;gap:.75rem;padding:15px;overflow:hidden}.gcc__buttons{flex:none;margin-right:0;padding-bottom:0}.gcc__buttons .btn{margin-left:8px}.gcc__toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem;flex-shrink:0}.gcc__field{display:flex;flex-direction:column;gap:.25rem}.gcc__field label{font-size:.75rem;font-weight:600;color:#6c757d}.gcc__field input,.gcc__field select{min-width:9rem;padding:.35rem .5rem;border:1px solid #ced4da;border-radius:.25rem;font-size:.85rem}.gcc__message{padding:.5rem .75rem;background:#eef3f8;border-left:3px solid #4465C9;border-radius:.25rem;font-size:.85rem;flex-shrink:0}.gcc__body{flex:1;display:flex;gap:0;overflow:hidden;min-height:0;border:1px solid #e9ecef;border-radius:.25rem;background:#fff}.gcc__panel-hd{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__panel-title{font-size:.8rem;font-weight:600;display:flex;align-items:center;gap:6px}.gcc__panel-label{font-size:.75rem;font-weight:600;color:#495057}.gcc__count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:16px;padding:0 5px;background:#4465c91f;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:16px;padding:0 5px;background:#4465c91a;color:#4465c9;border-radius:20px;font-size:10px;font-weight:700}.gcc__badge--primary{background:#4465c9;color:#fff}.gcc__muted{color:#6c757d;font-size:.8rem}.gcc__fw-normal{font-weight:400}.gcc__configs{display:flex;flex-direction:column;flex:0 0 220px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__list-scroll{flex:1;overflow:auto}.gcc__table{width:100%;border-collapse:collapse}.gcc__table th,.gcc__table td{padding:.35rem .6rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__config-row{cursor:pointer;transition:background .1s}.gcc__config-row:hover{background:#4465c90a}.gcc__config-row--selected{background:#4465c914;border-left:3px solid #4465C9}.gcc__config-row--selected td:first-child{padding-left:calc(.6rem - 3px)}.gcc__key{font-family:monospace;font-weight:600;color:#4465c9;font-size:.78rem}.gcc__sub{font-size:.7rem;font-weight:400;color:#6c757d;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__scope-badge{display:inline-block;padding:1px 5px;border-radius:20px;background:#4465c91a;color:#4465c9;font-size:9px;font-weight:700;text-transform:uppercase}.gcc__actions-cell{text-align:right;width:28px}.gcc__del-btn{background:none;border:none;color:#adb5bd;cursor:pointer;padding:2px 4px;border-radius:3px;font-size:.72rem;transition:color .1s}.gcc__del-btn:hover{color:#dc3545}.gcc__spinner{display:flex;align-items:center;gap:8px;padding:1rem .75rem;color:#6c757d;font-size:.8rem}.gcc__empty{padding:1.25rem .75rem;color:#6c757d;font-style:italic;font-size:.8rem}.gcc__editor{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.gcc__editor-hd{display:flex;align-items:center;padding:.4rem .75rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;flex-shrink:0}.gcc__loading{display:flex;align-items:center;gap:8px;padding:1.5rem 1rem;color:#6c757d;font-size:.85rem;flex-shrink:0}.gcc__spinner-icon{font-size:1rem}.gcc__panels{flex:1;display:flex;overflow:hidden;min-height:0}.gcc__groups{display:flex;flex-direction:column;flex:0 0 160px;border-right:1px solid #e9ecef;overflow:hidden}.gcc__group-list{list-style:none;margin:0;padding:0;flex:1;overflow-y:auto}.gcc__group-item{display:flex;align-items:center;justify-content:space-between;padding:.4rem .6rem;cursor:pointer;font-size:.78rem;border-bottom:1px solid #e9ecef;transition:background .1s}.gcc__group-item:hover{background:#4465c90a}.gcc__group-item--active{background:#4465c914;font-weight:600;color:#4465c9}.gcc__group-item--standard .gcc__group-item__name{color:#4465c9}.gcc__group-item--custom .gcc__group-item__name{color:#6b7fd4}.gcc__group-item__name{flex:1}.gcc__group-meta{display:flex;align-items:center;gap:3px}.gcc__browse{display:flex;flex-direction:column;flex:1;border-right:1px solid #e9ecef;overflow:hidden;min-width:0}.gcc__search{height:26px;padding:0 .5rem;border:1px solid #ced4da;border-radius:.2rem;font-size:.78rem;width:140px}.gcc__table-wrap{flex:1;overflow:auto}.gcc__table-wrap::-webkit-scrollbar{width:5px}.gcc__table-wrap::-webkit-scrollbar-track{background:transparent}.gcc__table-wrap::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__browse-table{width:100%;border-collapse:collapse}.gcc__browse-table th,.gcc__browse-table td{padding:.3rem .5rem;border-bottom:1px solid #e9ecef;text-align:left;font-size:.78rem}.gcc__browse-table th{font-weight:600;color:#495057;background:#f8f9fa;position:sticky;top:0;z-index:1}.gcc__browse-row{cursor:pointer;transition:background .1s}.gcc__browse-row:hover{background:#4465c90a}.gcc__browse-row--selected{background:#4465c914}.gcc__browse-row--custom .gcc__col-key{color:#6b7fd4}.gcc__col-check{width:28px;text-align:center}.gcc__col-key{font-family:monospace;font-size:11px;font-weight:600;color:#4465c9}.gcc__browse-empty{padding:1rem .75rem;color:#6c757d;font-style:italic;font-size:.78rem}.gcc__selection{display:flex;flex-direction:column;flex:0 0 380px;overflow:hidden}.gcc__sel-legend{display:flex;align-items:center;padding:3px .5rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#6c757d;flex-shrink:0;gap:0}.gcc__sel-legend__drag{width:20px;flex-shrink:0}.gcc__sel-legend__pos{width:22px;flex-shrink:0;text-align:center}.gcc__sel-legend__code{width:150px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__label{flex:1;min-width:0}.gcc__sel-legend__flag{width:36px;text-align:center;flex-shrink:0}.gcc__sel-legend__width{width:50px;flex-shrink:0;padding-left:2px}.gcc__sel-legend__remove{width:22px;flex-shrink:0}.gcc__sel-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;color:#6c757d;gap:.5rem;font-size:.8rem}.gcc__sel-empty__icon{font-size:2rem;opacity:.3}.gcc__sel-empty p{margin:0}.gcc__sel-list{flex:1;overflow-y:auto}.gcc__sel-list::-webkit-scrollbar{width:4px}.gcc__sel-list::-webkit-scrollbar-track{background:transparent}.gcc__sel-list::-webkit-scrollbar-thumb{background:#e9ecef;border-radius:3px}.gcc__sel-item{display:flex;align-items:center;padding:4px .5rem;border-bottom:1px solid #e9ecef;background:#fff;-webkit-user-select:none;user-select:none;gap:0;transition:background .1s}.gcc__sel-item:hover{background:#4465c908}.gcc__sel-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__sel-item__placeholder{height:32px;background:#4465c90f;border:1px dashed #4465C9;border-radius:2px;flex:1}.gcc__sel-item__drag{width:20px;flex-shrink:0;color:#ced4da;cursor:grab;font-size:11px;display:flex;align-items:center;justify-content:center}.gcc__sel-item__drag:hover{color:#4465c9}.gcc__sel-item__drag:active{cursor:grabbing}.gcc__sel-item__pos{width:22px;flex-shrink:0;font-size:9px;color:#6c757d;text-align:center}.gcc__sel-item__code{width:150px;flex-shrink:0;display:flex;flex-direction:column;overflow:hidden;padding-left:2px}.gcc__sel-item__code--cf .gcc__sel-item__name{color:#6b7fd4}.gcc__sel-item__name{font-family:monospace;font-size:10px;font-weight:600;color:#4465c9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcc__sel-item__label{flex:1;min-width:0;height:22px;padding:0 4px;border:1px solid transparent;border-radius:3px;font-size:11px;color:#343a40;background:transparent;outline:none;transition:border-color .1s,background .1s}.gcc__sel-item__label::placeholder{color:#6c757d;font-style:italic}.gcc__sel-item__label:hover{border-color:#d1d8de;background:#f8f9fa}.gcc__sel-item__label:focus{border-color:#4465c9;background:#fff}.gcc__sel-item__remove{width:22px;flex-shrink:0;background:none;border:none;color:#adb5bd;cursor:pointer;font-size:11px;padding:0;text-align:center;transition:color .1s}.gcc__sel-item__remove:hover{color:#dc3545}.gcc__sel-list.cdk-drop-list-dragging .gcc__sel-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.gcc__flag{width:36px;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;margin:0}.gcc__flag input[type=checkbox]{cursor:pointer}.gcc__item-width{width:46px;flex-shrink:0;padding:1px 3px;border:1px solid #ced4da;border-radius:3px;font-size:10px;text-align:right}.gcc__sel-footer{display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:#f8f9fa;border-top:1px solid #e9ecef;flex-shrink:0}.gcc__sel-footer__info{font-size:.75rem;color:#6c757d;font-style:italic}.gcc__hint{display:flex;align-items:center;justify-content:center;flex:1;color:#6c757d;font-style:italic;font-size:.85rem}\n", ".home-page{font-family:Open sans,sans-serif;background:#fff;-webkit-font-smoothing:antialiased;height:100%;width:100%;padding:16px}.main-container{margin:0 50px}.main-container-modal{width:calc(100% - 50px);margin:10px 25px 0}.moyen-titre{font-weight:700;font-size:24px;color:#4d5a81;margin:8px 0;border-bottom:solid 1px #DBE4FF}.grand-titre{font-weight:700;font-size:28px;color:#4d5a81;margin:0 0 8px}.petit-titre{font-weight:700;font-size:16px;color:#4d5a81;margin:0 0 8px}.petit-titre.underlined{border-bottom:solid 1px #4D5A81}.paragraph{padding:0 15px}.paragraph-highlight{padding:5px 15px 0 12px;border-left:5px solid #8EA7F8;border-bottom:1px solid #DBE4FF;border-top:1px solid #DBE4FF;border-right:1px solid #DBE4FF;background-color:#f7faff}.highlight{background-color:#f7faff;border:1px solid #DBE4FF;border-radius:5px;padding:15px;color:#3c5dc4;margin:0 0 16px}.highlight p{margin-bottom:0}.highlight:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"53.294\" height=\"50.629\" viewBox=\"0 0 53.294 50.629\">%0D%0A <path id=\"allerg\\e8ne\" d=\"M830.494,25.793l-5.814,6.783.727,8.963-8.721,1.938-4.6,7.752L803.847,47.6l-8.236,3.634-4.6-7.51-8.721-1.938.727-8.963L777.2,26.035l5.814-6.783-.727-8.963,8.721-1.938L795.61.6l8.236,3.634L812.083.6l4.6,7.752,8.721,1.938-.727,8.963Zm-24.467,2.422V13.681h-4.845V28.216Zm0,9.69V33.06h-4.845v4.845Z\" transform=\"translate(-777.2 -0.6)\"/>%0D%0A</svg>%0D%0A');background-repeat:no-repeat;margin:0 8px 24px 0;filter:invert(31%) sepia(51%) saturate(1323%) hue-rotate(199deg) brightness(99%) contrast(94%)}.notification{background-color:#dbe4ff;border:1px solid #C4D0F9;border-radius:5px;color:#4d5a81;margin:16px;padding:5px 15px;text-align:justify}.notification:before{position:relative;display:block;float:left;width:24px;height:24px;content:\" \";background-size:24px 24px;-webkit-background-size:24px 24px;background-image:url('data:image/svg+xml,<svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"></path></svg>');background-repeat:no-repeat;margin:0 8px 0 0;filter:invert(31%) sepia(8%) saturate(2329%) hue-rotate(188deg) brightness(103%) contrast(85%)}.notification-text{padding:0 15px 0 30px;font-size:16px}.propertyGridform{height:100%;width:100%}.property-grid-tabset{height:100%}.property-grid-tab{height:100%;width:100%;padding:5px}.property-row-center{padding-top:21px}.property-section-content{display:grid;grid-template-columns:repeat(auto-fit,minmax(225px,1fr));align-items:flex-start;align-content:flex-start;gap:10px;margin:0 10px}.property-section-container{display:flex;flex-direction:column;background:#f7faff;border-radius:5px;border:1px solid #C1D0FD;padding-bottom:10px}.property-section-title{display:block;font-size:14px;background:#f7faff;border-bottom:none;padding:2px 0;margin:10px;line-height:24px;font-weight:700;border-bottom:solid 1px #C1D0FD;color:#4d5a81}.property-container{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:10px;padding:5px;height:100%;overflow:auto}.property-row{display:flex;flex-wrap:wrap;align-items:center;flex:25%;gap:10px}.property-label{color:#4465c9}.property-label span{padding-top:5px;display:inline-block;margin-right:5px}.property-label.invalid{color:red}.property-input{flex:2;min-width:200px}.checkbox-container{display:flex;align-items:center;gap:5px}.validation-error{color:red;font-size:.9rem}alg-presentation-profile-editor{display:block;height:100%}.pp-editor{height:100%}.pp-editor alg-tabset{display:block;height:100%}.pp-editor-tab{display:block;height:100%}.pp-editor-properties{height:100%;overflow:auto}.pp-editor-columns.gcc{padding:10px}.pp-editor-columns.gcc .gcc__panels{flex:1;min-height:0;border:1px solid #e9ecef}.pp-editor-columns.gcc{container-type:inline-size}.pp-editor-columns.gcc .gcc__browse,.pp-editor-columns.gcc .gcc__selection{flex:1 1 0;min-width:0;min-height:0}.pp-editor-columns.gcc .gcc__browse-row{cursor:pointer}@container (max-width: 700px){.pp-editor-columns .gcc__panels{flex-direction:column}.pp-editor-columns .gcc__browse{border-right:none;border-bottom:1px solid #e9ecef}}.pp-editor-add{width:28px;text-align:center;color:#999}.pp-editor-add-all{flex:none;margin-left:8px;padding:2px 8px;border:1px solid #ced4da;border-radius:3px;background:#fff;font-size:11px;cursor:pointer}.pp-editor-add-all:disabled{opacity:.5;cursor:default}.gcc__sel-legend__display{flex:none;width:112px;margin:0 4px;text-align:center}.pp-display{flex:none;display:inline-flex;align-items:center;gap:2px;width:112px;margin:0 4px}.pp-display__badge{flex:1;min-width:0;display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid #c5d3f0;border-radius:10px;background:#eef3fc;color:#35a;font-size:11px;white-space:nowrap;cursor:pointer}.pp-display__badge .fa{width:12px;text-align:center}.pp-display__badge--default{border-style:dashed;background:transparent;color:#999}.pp-display__text{overflow:hidden;text-overflow:ellipsis}.pp-display__edit{flex:none;width:22px;height:22px;padding:0;border:none;border-radius:3px;background:transparent;color:#777;cursor:pointer}.pp-display__edit:hover{background:#e9ecef;color:#333}\n"]
|
|
20628
21103
|
}]
|
|
20629
21104
|
}],
|
|
20630
21105
|
ctorParameters: () => [
|
|
20631
21106
|
{ type: i4$2.ApplicationService },
|
|
20632
21107
|
{ type: i4$2.ValidationService },
|
|
20633
|
-
{ type: i1$3.PresentationProfileItemDataService }
|
|
21108
|
+
{ type: i1$3.PresentationProfileItemDataService },
|
|
21109
|
+
{ type: i1$2.BsModalService }
|
|
20634
21110
|
]
|
|
20635
21111
|
});
|
|
20636
21112
|
var BasePresentationProfileComponent = class BasePresentationProfileComponent extends BaseComponent {
|