@cadriciel/ui 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cadriciel-ui.mjs +11715 -1
- package/fesm2022/cadriciel-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/cadriciel-ui.d.ts +738 -3
package/types/cadriciel-ui.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { InjectionToken, Provider, ElementRef, TemplateRef, Signal, ViewContainerRef, Injector, ComponentRef, OnDestroy, AfterViewInit } from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider, ElementRef, TemplateRef, Signal, ViewContainerRef, Injector, ComponentRef, OnDestroy, AfterViewInit, Type } from '@angular/core';
|
|
3
3
|
import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
|
|
4
4
|
import * as _angular_platform_browser from '@angular/platform-browser';
|
|
5
5
|
import { SafeHtml } from '@angular/platform-browser';
|
|
@@ -6751,6 +6751,17 @@ interface CadPlanTask {
|
|
|
6751
6751
|
duration?: string | null;
|
|
6752
6752
|
/** Jalon : instant sans durée. */
|
|
6753
6753
|
milestone?: boolean;
|
|
6754
|
+
/**
|
|
6755
|
+
* Événement « journée entière » : il n'a ni heure de début ni heure de fin.
|
|
6756
|
+
*
|
|
6757
|
+
* Un calendrier ne peut pas le deviner — une réunion de 9 h à 18 h et un jour de congé ont
|
|
6758
|
+
* les mêmes bornes et se rendent pourtant à des endroits opposés : la première dans la
|
|
6759
|
+
* grille horaire, le second dans le bandeau au-dessus. Sans ce champ il faudrait inventer
|
|
6760
|
+
* une convention (« ça commence à minuit, donc c'est la journée »), et une réunion de nuit
|
|
6761
|
+
* la ferait mentir. Ajouté le 22/08/2026 pour `cad-calendar` ; inoffensif pour les autres
|
|
6762
|
+
* vues, où l'événement occupe simplement toute la journée.
|
|
6763
|
+
*/
|
|
6764
|
+
allDay?: boolean;
|
|
6754
6765
|
/** Colonne du taskboard. */
|
|
6755
6766
|
bucket?: string | null;
|
|
6756
6767
|
/** Rang FRACTIONNAIRE dans sa colonne / sa fratrie. Voir `cadRankBetween()`. */
|
|
@@ -6808,6 +6819,8 @@ interface CadPlannedTask {
|
|
|
6808
6819
|
start: Date | null;
|
|
6809
6820
|
end: Date | null;
|
|
6810
6821
|
milestone: boolean;
|
|
6822
|
+
/** Journée entière : rendu dans le bandeau, jamais dans la grille horaire. */
|
|
6823
|
+
allDay: boolean;
|
|
6811
6824
|
bucket: string | null;
|
|
6812
6825
|
rank: string;
|
|
6813
6826
|
assignments: Required<CadPlanAssignment>[];
|
|
@@ -7121,6 +7134,244 @@ declare function cadFindLinkCycle(links: readonly CadPlannedLink[]): string[];
|
|
|
7121
7134
|
/** Tâches qu'aucune vue temporelle ne sait placer — la zone « non planifié », jamais le silence. */
|
|
7122
7135
|
declare const cadUnscheduled: (plan: CadNormalizedPlan) => CadPlannedTask[];
|
|
7123
7136
|
|
|
7137
|
+
type CadRRuleFreq = 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY';
|
|
7138
|
+
interface CadRRule {
|
|
7139
|
+
freq: CadRRuleFreq;
|
|
7140
|
+
interval: number;
|
|
7141
|
+
/** Jours de la semaine visés (0 = dimanche). `null` = celui de la date de départ. */
|
|
7142
|
+
byday: number[] | null;
|
|
7143
|
+
/** Quantièmes visés en mensuel. `null` = celui de la date de départ. */
|
|
7144
|
+
bymonthday: number[] | null;
|
|
7145
|
+
count: number | null;
|
|
7146
|
+
until: Date | null;
|
|
7147
|
+
/** Parties reconnues mais NON appliquées : on les nomme au lieu de les taire. */
|
|
7148
|
+
ignore: string[];
|
|
7149
|
+
}
|
|
7150
|
+
/**
|
|
7151
|
+
* Analyse une chaîne `RRULE`. Rend `null` si elle est inexploitable — jamais une règle
|
|
7152
|
+
* approximative : mieux vaut un événement unique qu'une série fausse.
|
|
7153
|
+
*/
|
|
7154
|
+
declare function cadParseRRule(entree: string | null | undefined): CadRRule | null;
|
|
7155
|
+
/**
|
|
7156
|
+
* Une occurrence projetée.
|
|
7157
|
+
*
|
|
7158
|
+
* `id` est COMPOSITE (`t-101@2026-09-15T09:00`) et c'est structurant : sans lui, la sélection
|
|
7159
|
+
* et le glisser perdent la trace dès que la série bouge, parce que toutes les occurrences
|
|
7160
|
+
* partageraient l'identifiant de la tâche mère.
|
|
7161
|
+
*/
|
|
7162
|
+
interface CadOccurrence {
|
|
7163
|
+
id: string;
|
|
7164
|
+
taskId: string;
|
|
7165
|
+
start: Date;
|
|
7166
|
+
end: Date;
|
|
7167
|
+
allDay: boolean;
|
|
7168
|
+
/** Vrai si elle vient d'une règle, faux si c'est un événement simple ou une exception. */
|
|
7169
|
+
recurring: boolean;
|
|
7170
|
+
/** Vrai si une occurrence modifiée a REMPLACÉ celle qu'aurait produite la règle. */
|
|
7171
|
+
overridden: boolean;
|
|
7172
|
+
task: CadPlannedTask;
|
|
7173
|
+
}
|
|
7174
|
+
/** Anomalie rencontrée pendant le dépliage. Jamais tue : une vue peut la montrer. */
|
|
7175
|
+
interface CadRecurrenceIssue {
|
|
7176
|
+
taskId: string;
|
|
7177
|
+
code: 'rrule-illisible' | 'rrule-partielle' | 'sans-date' | 'plafond-atteint';
|
|
7178
|
+
detail?: string;
|
|
7179
|
+
}
|
|
7180
|
+
interface CadExpandResult {
|
|
7181
|
+
occurrences: CadOccurrence[];
|
|
7182
|
+
issues: CadRecurrenceIssue[];
|
|
7183
|
+
}
|
|
7184
|
+
declare function memeJour(a: Date, b: Date): boolean;
|
|
7185
|
+
/**
|
|
7186
|
+
* Déplie les tâches sur la fenêtre `[du, au]`.
|
|
7187
|
+
*
|
|
7188
|
+
* TROIS RÈGLES, dans cet ordre :
|
|
7189
|
+
* ① une tâche sans règle donne une occurrence unique, si elle croise la fenêtre ;
|
|
7190
|
+
* ② une tâche avec règle est projetée, `exdates` retirées ;
|
|
7191
|
+
* ③ une occurrence MODIFIÉE (`masterId` + `recurrenceId`) REMPLACE celle que la règle aurait
|
|
7192
|
+
* produite à cette date — convention iCalendar. Sans ce remplacement on afficherait les
|
|
7193
|
+
* deux, et l'utilisateur verrait sa modification en double au lieu de la voir appliquée.
|
|
7194
|
+
*/
|
|
7195
|
+
declare function cadExpandOccurrences(taches: readonly CadPlannedTask[], du: Date, au: Date): CadExpandResult;
|
|
7196
|
+
declare function joursDansMois(annee: number, mois: number): number;
|
|
7197
|
+
/** Lundi de la semaine de `d`. */
|
|
7198
|
+
declare function debutSemaine(d: Date): Date;
|
|
7199
|
+
declare const CAD_RECURRENCE_INTERNE: {
|
|
7200
|
+
debutSemaine: typeof debutSemaine;
|
|
7201
|
+
joursDansMois: typeof joursDansMois;
|
|
7202
|
+
memeJour: typeof memeJour;
|
|
7203
|
+
JOUR_MS: number;
|
|
7204
|
+
};
|
|
7205
|
+
|
|
7206
|
+
/**
|
|
7207
|
+
* Mise en page d'un calendrier — logique PURE, sans DOM, donc testable seule.
|
|
7208
|
+
*
|
|
7209
|
+
* Trois calculs, et ce sont les trois endroits où un calendrier se trompe :
|
|
7210
|
+
* ① la grille du mois (combien de rangées, quels jours débordent) ;
|
|
7211
|
+
* ② les BANDEAUX multi-jours, continus à travers une rangée de semaine ;
|
|
7212
|
+
* ③ le placement côte à côte des événements horodatés d'une journée.
|
|
7213
|
+
*
|
|
7214
|
+
* BORNE DE FIN : dans cette bibliothèque, `end` est INCLUSIVE pour un événement journée
|
|
7215
|
+
* entière — « congés du 21 au 25 » couvre le 25. La RFC 5545 la veut exclusive (DTEND au 26).
|
|
7216
|
+
* On diverge SCIEMMENT : c'est ce qu'un humain saisit, c'est ce que font déjà le gantt et le
|
|
7217
|
+
* scheduler pour une tâche qui « finit le 25 », et mélanger les deux conventions en silence
|
|
7218
|
+
* est la première cause d'erreur d'un jour dans un calendrier. Un import iCalendar devra donc
|
|
7219
|
+
* retrancher un jour à DTEND — c'est le travail de l'import, pas celui de la vue.
|
|
7220
|
+
*/
|
|
7221
|
+
/** Numéro de jour absolu, insensible au fuseau et à l'heure d'été. */
|
|
7222
|
+
declare function cadNumeroJour(d: Date): number;
|
|
7223
|
+
/** Minuit local du jour de `d`. */
|
|
7224
|
+
declare function cadMinuit(d: Date): Date;
|
|
7225
|
+
/** Début de la semaine contenant `d`. `premierJour` : 1 = lundi (défaut), 0 = dimanche. */
|
|
7226
|
+
declare function cadDebutSemaine(d: Date, premierJour?: number): Date;
|
|
7227
|
+
interface CadMonthGrid {
|
|
7228
|
+
/** Premier jour affiché — souvent dans le mois précédent. */
|
|
7229
|
+
debut: Date;
|
|
7230
|
+
/** Rangées de 7 jours. 5 ou 6 selon le mois : on ne force JAMAIS 6. */
|
|
7231
|
+
semaines: Date[][];
|
|
7232
|
+
/** Mois de référence (0-11), pour distinguer les jours qui débordent. */
|
|
7233
|
+
mois: number;
|
|
7234
|
+
annee: number;
|
|
7235
|
+
}
|
|
7236
|
+
/**
|
|
7237
|
+
* Grille du mois contenant `ancre`.
|
|
7238
|
+
*
|
|
7239
|
+
* On rend 5 OU 6 rangées, selon ce que le mois demande — jamais un nombre fixe. Forcer 6
|
|
7240
|
+
* rangées laisse une semaine entière vide neuf mois sur douze ; en forcer 5 tronque les mois
|
|
7241
|
+
* de 31 jours qui commencent un samedi. La hauteur de la vue s'adapte, pas la vérité.
|
|
7242
|
+
*/
|
|
7243
|
+
declare function cadMonthGrid(ancre: Date, premierJour?: number): CadMonthGrid;
|
|
7244
|
+
/**
|
|
7245
|
+
* Un bandeau : une occurrence multi-jours projetée sur UNE rangée de semaine.
|
|
7246
|
+
*
|
|
7247
|
+
* `continueAvant` / `continueApres` sont indispensables : sans eux, un congé de trois semaines
|
|
7248
|
+
* apparaîtrait comme trois congés d'une semaine. La vue doit pouvoir dire « ça déborde ».
|
|
7249
|
+
*/
|
|
7250
|
+
interface CadBand {
|
|
7251
|
+
occurrence: CadOccurrence;
|
|
7252
|
+
/** Colonnes INCLUSIVES dans la rangée, 0..6. */
|
|
7253
|
+
colDebut: number;
|
|
7254
|
+
colFin: number;
|
|
7255
|
+
/** Voie d'empilement, 0 en haut. */
|
|
7256
|
+
voie: number;
|
|
7257
|
+
continueAvant: boolean;
|
|
7258
|
+
continueApres: boolean;
|
|
7259
|
+
}
|
|
7260
|
+
interface CadBandRow {
|
|
7261
|
+
bandes: CadBand[];
|
|
7262
|
+
/** Nombre de voies occupées : la rangée doit réserver cette hauteur. */
|
|
7263
|
+
voies: number;
|
|
7264
|
+
}
|
|
7265
|
+
/** Une occurrence va au bandeau si elle est journée entière OU si elle franchit un minuit. */
|
|
7266
|
+
declare function cadEstBandeau(o: CadOccurrence): boolean;
|
|
7267
|
+
/**
|
|
7268
|
+
* Range les bandeaux d'une rangée de semaine en voies.
|
|
7269
|
+
*
|
|
7270
|
+
* Le tri place les plus LONGS en haut : sans lui, un événement d'un jour posé en voie 0 coupe
|
|
7271
|
+
* en deux la place d'un événement de cinq jours, qui doit alors descendre — et la rangée
|
|
7272
|
+
* devient un escalier illisible.
|
|
7273
|
+
*/
|
|
7274
|
+
declare function cadWeekBands(occurrences: readonly CadOccurrence[], jours: readonly Date[]): CadBandRow;
|
|
7275
|
+
/** Un événement horodaté placé dans la colonne d'une journée. */
|
|
7276
|
+
interface CadSlot {
|
|
7277
|
+
occurrence: CadOccurrence;
|
|
7278
|
+
/** Position verticale, en fraction de la plage affichée (0 = haut, 1 = bas). */
|
|
7279
|
+
haut: number;
|
|
7280
|
+
hauteur: number;
|
|
7281
|
+
/** Voie et nombre de voies du GROUPE de chevauchement, pas de la journée entière. */
|
|
7282
|
+
voie: number;
|
|
7283
|
+
voies: number;
|
|
7284
|
+
}
|
|
7285
|
+
/**
|
|
7286
|
+
* Place les événements horodatés d'une journée, côte à côte quand ils se chevauchent.
|
|
7287
|
+
*
|
|
7288
|
+
* Le nombre de voies est celui du GROUPE de chevauchement, pas de la journée : deux réunions
|
|
7289
|
+
* qui se chevauchent le matin ne doivent pas rétrécir de moitié une réunion isolée de
|
|
7290
|
+
* l'après-midi. C'est l'erreur la plus courante des calendriers faits à la main.
|
|
7291
|
+
*
|
|
7292
|
+
* `plageDebut` / `plageFin` en minutes depuis minuit. Un événement hors plage est CONSERVÉ et
|
|
7293
|
+
* ramené au bord : le faire disparaître serait le mensonge le plus grave qu'une vue puisse
|
|
7294
|
+
* commettre.
|
|
7295
|
+
*/
|
|
7296
|
+
declare function cadPackDay(occurrences: readonly CadOccurrence[], plageDebut?: number, plageFin?: number): CadSlot[];
|
|
7297
|
+
|
|
7298
|
+
/**
|
|
7299
|
+
* Projection d'un geste d'édition — logique PURE, sans DOM, donc testable seule.
|
|
7300
|
+
*
|
|
7301
|
+
* Un geste ne produit jamais une écriture : il produit une PROPOSITION de bornes, que le
|
|
7302
|
+
* composant émet en intention. C'est ce fichier qui répond à « l'utilisateur a bougé de 43
|
|
7303
|
+
* pixels vers le bas et de 1,2 colonne : qu'est-ce que ça veut dire en dates ? ».
|
|
7304
|
+
*
|
|
7305
|
+
* L'AIMANTAGE EST OBLIGATOIRE, pas cosmétique. Sans lui on crée des réunions de 9 h 07 à
|
|
7306
|
+
* 10 h 23 : personne n'a voulu ça, et la donnée devient impossible à relire.
|
|
7307
|
+
*/
|
|
7308
|
+
type CadEditKind = 'create' | 'move' | 'resize-start' | 'resize-end';
|
|
7309
|
+
interface CadEditGeometry {
|
|
7310
|
+
/** Hauteur d'une heure, en pixels. */
|
|
7311
|
+
hauteurHeure: number;
|
|
7312
|
+
/** Largeur d'une colonne de jour, en pixels. 0 = pas de déplacement horizontal possible. */
|
|
7313
|
+
largeurJour: number;
|
|
7314
|
+
/** Pas d'aimantage, en minutes. */
|
|
7315
|
+
pas: number;
|
|
7316
|
+
/** Plage horaire affichée, en minutes depuis minuit. */
|
|
7317
|
+
plageDebut: number;
|
|
7318
|
+
plageFin: number;
|
|
7319
|
+
}
|
|
7320
|
+
interface CadEditBase {
|
|
7321
|
+
start: Date;
|
|
7322
|
+
end: Date;
|
|
7323
|
+
allDay: boolean;
|
|
7324
|
+
}
|
|
7325
|
+
/**
|
|
7326
|
+
* Projette un geste en nouvelles bornes.
|
|
7327
|
+
*
|
|
7328
|
+
* `dx` / `dy` sont les déplacements du pointeur en pixels depuis le début du geste.
|
|
7329
|
+
*
|
|
7330
|
+
* TROIS INVARIANTS, et chacun corrige une bêtise classique :
|
|
7331
|
+
* ① un déplacement CONSERVE la durée — sinon déplacer une réunion la rallonge en douce ;
|
|
7332
|
+
* ② un redimensionnement ne franchit JAMAIS l'autre bord : il s'arrête à un pas ;
|
|
7333
|
+
* ③ un événement journée entière ne bouge qu'en JOURS — lui donner une heure en le glissant
|
|
7334
|
+
* le ferait sortir du bandeau, ce que personne n'a demandé.
|
|
7335
|
+
*/
|
|
7336
|
+
declare function cadProjeterEdition(kind: CadEditKind, base: CadEditBase, dx: number, dy: number, g: CadEditGeometry): {
|
|
7337
|
+
start: Date;
|
|
7338
|
+
end: Date;
|
|
7339
|
+
};
|
|
7340
|
+
/**
|
|
7341
|
+
* Bornes d'une création par glisser sur une plage vide.
|
|
7342
|
+
*
|
|
7343
|
+
* `y0` / `y1` sont les positions verticales dans la colonne, en pixels. On aimante les DEUX
|
|
7344
|
+
* bords, et on garantit au moins un pas : un clic sec ne doit pas produire un événement de
|
|
7345
|
+
* durée nulle, invisible et impossible à rattraper.
|
|
7346
|
+
*/
|
|
7347
|
+
declare function cadProjeterCreation(jour: Date, y0: number, y1: number, g: CadEditGeometry): {
|
|
7348
|
+
start: Date;
|
|
7349
|
+
end: Date;
|
|
7350
|
+
};
|
|
7351
|
+
/**
|
|
7352
|
+
* Projection d'un geste dans une GRILLE DE MOIS — et ce n'est pas la même que dans une grille
|
|
7353
|
+
* horaire, contrairement à ce que j'avais écrit.
|
|
7354
|
+
*
|
|
7355
|
+
* Dans un mois, l'axe vertical n'est PAS le temps de la journée : c'est la semaine. Descendre
|
|
7356
|
+
* d'une rangée avance de SEPT JOURS, et l'heure ne bouge pas. Utiliser la projection horaire
|
|
7357
|
+
* ici donnait « +3 h » au lieu de « +7 jours » (mesuré au navigateur le 22/08/2026 : glisser
|
|
7358
|
+
* d'une rangée déplaçait un rendez-vous de 10 h 30 à 13 h 30 sans changer de date).
|
|
7359
|
+
*
|
|
7360
|
+
* Une seule règle à retenir : dans le mois, un geste ne déplace que des JOURS.
|
|
7361
|
+
*/
|
|
7362
|
+
declare function cadProjeterMois(kind: CadEditKind, base: CadEditBase, dx: number, dy: number, g: {
|
|
7363
|
+
largeurJour: number;
|
|
7364
|
+
hauteurRangee: number;
|
|
7365
|
+
}): {
|
|
7366
|
+
start: Date;
|
|
7367
|
+
end: Date;
|
|
7368
|
+
};
|
|
7369
|
+
/** Déplacement au CLAVIER, exprimé dans la même unité qu'un geste : jours et pas. */
|
|
7370
|
+
declare function cadProjeterClavier(kind: CadEditKind, base: CadEditBase, jours: number, pas: number, g: CadEditGeometry): {
|
|
7371
|
+
start: Date;
|
|
7372
|
+
end: Date;
|
|
7373
|
+
};
|
|
7374
|
+
|
|
7124
7375
|
/** Contenu d'une carte : `<ng-template cadTaskCard let-task let-bucket="bucket">`. */
|
|
7125
7376
|
declare class CadTaskCardDirective {
|
|
7126
7377
|
readonly tpl: TemplateRef<any>;
|
|
@@ -7258,5 +7509,489 @@ declare class CadTaskboardComponent {
|
|
|
7258
7509
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadTaskboardComponent, "cad-taskboard", never, { "plan": { "alias": "plan"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "dragDisabled": { "alias": "dragDisabled"; "required": false; "isSignal": true; }; "collapsedKeys": { "alias": "collapsedKeys"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "today": { "alias": "today"; "required": false; "isSignal": true; }; }, { "collapsedKeys": "collapsedKeysChange"; "taskMove": "taskMove"; "taskAssign": "taskAssign"; "taskOpen": "taskOpen"; "wipExceeded": "wipExceeded"; }, ["cardTpl", "rowTpl"], never, true, never>;
|
|
7259
7510
|
}
|
|
7260
7511
|
|
|
7261
|
-
|
|
7262
|
-
|
|
7512
|
+
type CadCalendarView = 'month' | 'week' | 'day' | 'agenda' | 'year' | 'auto';
|
|
7513
|
+
/** Un agenda superposable. La couleur vient de la DONNÉE : le composant n'en connaît aucun. */
|
|
7514
|
+
interface CadCalendarSource {
|
|
7515
|
+
id: string;
|
|
7516
|
+
label: string;
|
|
7517
|
+
/** Couleur CSS. Sans elle, l'accent de la bibliothèque. */
|
|
7518
|
+
color?: string;
|
|
7519
|
+
}
|
|
7520
|
+
interface CadCalendarEventEvent {
|
|
7521
|
+
occurrence: CadOccurrence;
|
|
7522
|
+
originalEvent: Event;
|
|
7523
|
+
}
|
|
7524
|
+
/** Intention d'écriture. Le composant ne l'applique pas : il la propose. */
|
|
7525
|
+
interface CadCalendarChangeEvent {
|
|
7526
|
+
occurrence: CadOccurrence;
|
|
7527
|
+
start: Date;
|
|
7528
|
+
end: Date;
|
|
7529
|
+
}
|
|
7530
|
+
interface CadCalendarCreateEvent {
|
|
7531
|
+
start: Date;
|
|
7532
|
+
end: Date;
|
|
7533
|
+
allDay: boolean;
|
|
7534
|
+
}
|
|
7535
|
+
interface CadCalendarDateEvent {
|
|
7536
|
+
date: Date;
|
|
7537
|
+
originalEvent: Event;
|
|
7538
|
+
}
|
|
7539
|
+
/**
|
|
7540
|
+
* `<cad-calendar [plan]="plan" [sources]="agendas" view="auto"/>`
|
|
7541
|
+
*
|
|
7542
|
+
* LA GRILLE EST LE TEMPS — c'est ce qui le distingue de `cad-scheduler`, dont les lignes sont
|
|
7543
|
+
* des ressources. On répond ici à « qu'est-ce qui se passe le 17 ? », là-bas à « qui est libre
|
|
7544
|
+
* jeudi ? ». Deux questions, deux composants, un seul document JSON.
|
|
7545
|
+
*
|
|
7546
|
+
* L'AGENDA D'UNE TÂCHE EST SON `bucket`. Pas un champ de plus : le taskboard rend les buckets
|
|
7547
|
+
* en colonnes, le calendrier les rend en agendas superposés. C'est le pari « une donnée,
|
|
7548
|
+
* plusieurs vues » qui paie, et ça évite d'inventer un `calendarId` que les autres vues
|
|
7549
|
+
* ignoreraient.
|
|
7550
|
+
*
|
|
7551
|
+
* LA RÉCURRENCE EST EN LECTURE SEULE (voir `planning.recurrence.ts`). On déplie une règle pour
|
|
7552
|
+
* l'afficher ; on n'édite pas de série. Une récurrence à moitié faite perd des modifications
|
|
7553
|
+
* sans le dire — déplier n'écrit rien, donc ne peut rien perdre.
|
|
7554
|
+
*
|
|
7555
|
+
* LE COMPOSANT N'ÉCRIT JAMAIS : il émet `eventClick`, `dateClick`, `rangeChange`. Masquer un
|
|
7556
|
+
* agenda est en revanche un état de PRÉSENTATION, donc un `model()` qu'il porte lui-même.
|
|
7557
|
+
*/
|
|
7558
|
+
declare class CadCalendarComponent {
|
|
7559
|
+
protected readonly Math: Math;
|
|
7560
|
+
private readonly bp;
|
|
7561
|
+
private readonly hote;
|
|
7562
|
+
/**
|
|
7563
|
+
* Une colonne de jour, pour mesurer la largeur d'un pas horizontal.
|
|
7564
|
+
*
|
|
7565
|
+
* On MESURE au lieu de calculer : les colonnes sont en `minmax(0, 1fr)`, donc leur largeur
|
|
7566
|
+
* dépend du conteneur, de la barre de défilement et du zoom. Un calcul serait faux dès que
|
|
7567
|
+
* l'un des trois change, et le glisser dériverait d'un jour sans que rien ne le signale.
|
|
7568
|
+
*/
|
|
7569
|
+
protected largeurColonne(): HTMLElement | null;
|
|
7570
|
+
readonly plan: _angular_core.InputSignal<CadPlan | null>;
|
|
7571
|
+
/** Agendas superposables. Un `bucket` sans source déclarée prend l'accent et son propre nom. */
|
|
7572
|
+
readonly sources: _angular_core.InputSignal<readonly CadCalendarSource[]>;
|
|
7573
|
+
/** Agendas décochés. État de PRÉSENTATION, donc porté ici et lié en deux sens. */
|
|
7574
|
+
readonly hidden: _angular_core.ModelSignal<ReadonlySet<string>>;
|
|
7575
|
+
readonly view: _angular_core.ModelSignal<CadCalendarView>;
|
|
7576
|
+
/** Date d'ancrage : le mois, la semaine ou le jour affiché. */
|
|
7577
|
+
readonly date: _angular_core.ModelSignal<Date>;
|
|
7578
|
+
/** 1 = lundi (défaut), 0 = dimanche. Touche le mois, la semaine ET le mini-calendrier. */
|
|
7579
|
+
readonly firstDay: _angular_core.InputSignal<0 | 1>;
|
|
7580
|
+
/** Plage horaire affichée, en heures. Réglable : 7 → 20 par défaut. */
|
|
7581
|
+
readonly dayStart: _angular_core.InputSignal<number>;
|
|
7582
|
+
readonly dayEnd: _angular_core.InputSignal<number>;
|
|
7583
|
+
readonly hourHeight: _angular_core.InputSignal<number>;
|
|
7584
|
+
/** Événements montrés dans une case de mois avant le « +N ». */
|
|
7585
|
+
readonly maxPerDay: _angular_core.InputSignal<number>;
|
|
7586
|
+
readonly workCalendar: _angular_core.InputSignal<CadWorkCalendar | null>;
|
|
7587
|
+
readonly today: _angular_core.InputSignal<Date | null>;
|
|
7588
|
+
readonly locale: _angular_core.InputSignal<string>;
|
|
7589
|
+
readonly emptyText: _angular_core.InputSignal<string>;
|
|
7590
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
7591
|
+
readonly showNow: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
7592
|
+
readonly eventClick: _angular_core.OutputEmitterRef<CadCalendarEventEvent>;
|
|
7593
|
+
readonly dateClick: _angular_core.OutputEmitterRef<CadCalendarDateEvent>;
|
|
7594
|
+
/** La fenêtre affichée a changé : l'hôte peut aller chercher les données qui manquent. */
|
|
7595
|
+
readonly rangeChange: _angular_core.OutputEmitterRef<{
|
|
7596
|
+
start: Date;
|
|
7597
|
+
end: Date;
|
|
7598
|
+
}>;
|
|
7599
|
+
/** Gestes d'édition. `false` = vue en lecture, sans poignée ni curseur trompeur. */
|
|
7600
|
+
readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
7601
|
+
/** Aimantage, en minutes. Sans lui on crée des réunions de 9 h 07 que personne n'a voulues. */
|
|
7602
|
+
readonly snap: _angular_core.InputSignal<number>;
|
|
7603
|
+
readonly eventMove: _angular_core.OutputEmitterRef<CadCalendarChangeEvent>;
|
|
7604
|
+
readonly eventResize: _angular_core.OutputEmitterRef<CadCalendarChangeEvent>;
|
|
7605
|
+
readonly eventCreate: _angular_core.OutputEmitterRef<CadCalendarCreateEvent>;
|
|
7606
|
+
/** `auto` : agenda sous le seuil. Une grille de mois à 55 px par jour ne montre plus rien. */
|
|
7607
|
+
readonly vueEffective: _angular_core.Signal<"month" | "year" | "day" | "week" | "agenda">;
|
|
7608
|
+
private readonly normalise;
|
|
7609
|
+
private readonly ajd;
|
|
7610
|
+
protected readonly hauteurHeure: _angular_core.Signal<number>;
|
|
7611
|
+
protected readonly hauteurTotale: _angular_core.Signal<number>;
|
|
7612
|
+
protected readonly heuresAffichees: _angular_core.Signal<number[]>;
|
|
7613
|
+
/** Fenêtre couverte par la vue courante. Elle borne le dépliage : on ne projette pas l'infini. */
|
|
7614
|
+
private readonly fenetre;
|
|
7615
|
+
/**
|
|
7616
|
+
* CORRECTIF OPTIMISTE. Le composant n'écrit jamais dans le document — mais sans état local
|
|
7617
|
+
* le geste serait mort à l'écran : on relâche, et la barre revient à sa place en attendant
|
|
7618
|
+
* que l'hôte réponde. On garde donc les bornes proposées, ATTACHÉES au `plan` d'origine, et
|
|
7619
|
+
* on les abandonne dès qu'un nouveau `plan` arrive. Même patron que `cad-taskboard`.
|
|
7620
|
+
*/
|
|
7621
|
+
private readonly patch;
|
|
7622
|
+
private readonly occurrences;
|
|
7623
|
+
/** Fantôme du geste en cours : il montre où l'on va tomber, APRÈS aimantage. */
|
|
7624
|
+
protected readonly fantome: _angular_core.WritableSignal<{
|
|
7625
|
+
jour: number;
|
|
7626
|
+
haut: number;
|
|
7627
|
+
hauteur: number;
|
|
7628
|
+
texte: string;
|
|
7629
|
+
} | null>;
|
|
7630
|
+
/** Anomalies de dépliage — jamais tues : l'hôte peut les montrer. */
|
|
7631
|
+
readonly issues: _angular_core.Signal<_cadriciel_ui.CadRecurrenceIssue[]>;
|
|
7632
|
+
private readonly parJour;
|
|
7633
|
+
protected readonly nomsJours: _angular_core.Signal<string[]>;
|
|
7634
|
+
protected readonly semaines: _angular_core.Signal<{
|
|
7635
|
+
voies: number;
|
|
7636
|
+
bandes: CadBand[];
|
|
7637
|
+
jours: {
|
|
7638
|
+
date: Date;
|
|
7639
|
+
cle: number;
|
|
7640
|
+
n: number;
|
|
7641
|
+
hors: boolean;
|
|
7642
|
+
auj: boolean;
|
|
7643
|
+
ferme: boolean;
|
|
7644
|
+
puces: CadOccurrence[];
|
|
7645
|
+
reste: number;
|
|
7646
|
+
}[];
|
|
7647
|
+
}[]>;
|
|
7648
|
+
protected readonly joursGrille: _angular_core.Signal<{
|
|
7649
|
+
date: Date;
|
|
7650
|
+
cle: number;
|
|
7651
|
+
n: number;
|
|
7652
|
+
jsem: string;
|
|
7653
|
+
auj: boolean;
|
|
7654
|
+
ferme: boolean;
|
|
7655
|
+
slots: CadSlot[];
|
|
7656
|
+
}[]>;
|
|
7657
|
+
protected readonly bandeGrille: _angular_core.Signal<_cadriciel_ui.CadBandRow>;
|
|
7658
|
+
protected readonly colonnes: _angular_core.Signal<string>;
|
|
7659
|
+
protected readonly maintenant: _angular_core.Signal<number | null>;
|
|
7660
|
+
protected readonly groupes: _angular_core.Signal<{
|
|
7661
|
+
cle: number;
|
|
7662
|
+
n: number;
|
|
7663
|
+
auj: boolean;
|
|
7664
|
+
jsem: string;
|
|
7665
|
+
evts: CadOccurrence[];
|
|
7666
|
+
}[]>;
|
|
7667
|
+
protected readonly miniMois: _angular_core.Signal<{
|
|
7668
|
+
mois: number;
|
|
7669
|
+
titre: string;
|
|
7670
|
+
jours: {
|
|
7671
|
+
date: Date;
|
|
7672
|
+
cle: number;
|
|
7673
|
+
n: number;
|
|
7674
|
+
hors: boolean;
|
|
7675
|
+
auj: boolean;
|
|
7676
|
+
charge: number;
|
|
7677
|
+
}[];
|
|
7678
|
+
}[]>;
|
|
7679
|
+
protected couleur(o: CadOccurrence): string;
|
|
7680
|
+
protected nomSource(o: CadOccurrence): string;
|
|
7681
|
+
protected heure(d: Date): string;
|
|
7682
|
+
protected titre(o: CadOccurrence): string;
|
|
7683
|
+
/**
|
|
7684
|
+
* Une occurrence de SÉRIE n'est pas manipulable tant que l'édition de récurrence n'existe
|
|
7685
|
+
* pas. Bouger l'une d'elles sans savoir si l'on modifie l'occurrence, la suite ou toute la
|
|
7686
|
+
* série perdrait la modification EN SILENCE. On le montre (hachures, curseur interdit,
|
|
7687
|
+
* motif au survol) plutôt que de laisser essayer et rater.
|
|
7688
|
+
*/
|
|
7689
|
+
protected manipulable(o: CadOccurrence): boolean;
|
|
7690
|
+
protected motifVerrou(o: CadOccurrence): string;
|
|
7691
|
+
private geometrie;
|
|
7692
|
+
/**
|
|
7693
|
+
* Un glisser ne doit PAS produire aussi un clic.
|
|
7694
|
+
*
|
|
7695
|
+
* Le navigateur synthétise un `click` après tout `pointerup` sur un bouton : sans cette
|
|
7696
|
+
* garde, déplacer un événement émettait `eventMove` PUIS `eventClick`, et un hôte qui ouvre
|
|
7697
|
+
* une fiche au clic en ouvrirait une à chaque déplacement. Constaté au navigateur le
|
|
7698
|
+
* 22/08/2026 — un test unitaire ne l'aurait pas vu, le clic synthétique n'existe pas en jsdom.
|
|
7699
|
+
*/
|
|
7700
|
+
private finGeste;
|
|
7701
|
+
private poser;
|
|
7702
|
+
/**
|
|
7703
|
+
* Un geste au pointeur. Le patron vient de `cadStartResize` de `cad-table` : on écoute sur
|
|
7704
|
+
* le DOCUMENT, pas sur l'élément — sinon le geste s'interrompt dès que le pointeur sort de
|
|
7705
|
+
* la barre, ce qui arrive tout le temps quand on déplace vite.
|
|
7706
|
+
*/
|
|
7707
|
+
protected geste(kind: CadEditKind, o: CadOccurrence, ev: PointerEvent, colonne: HTMLElement | null): void;
|
|
7708
|
+
/**
|
|
7709
|
+
* Geste dans la GRILLE DE MOIS — projection différente, et c'est la correction du 22/08/2026.
|
|
7710
|
+
*
|
|
7711
|
+
* Ici l'axe vertical n'est pas l'heure : c'est la semaine. Une rangée vaut SEPT JOURS et
|
|
7712
|
+
* l'heure ne bouge pas. En passant par la projection horaire, glisser d'une rangée déplaçait
|
|
7713
|
+
* un rendez-vous de 10 h 30 à 13 h 30 sans changer de date — mesuré au navigateur, signalé
|
|
7714
|
+
* par SZU. On MESURE la rangée plutôt que de la calculer : sa hauteur dépend du nombre de
|
|
7715
|
+
* voies de bandeaux, donc elle change d'une semaine à l'autre.
|
|
7716
|
+
*/
|
|
7717
|
+
protected gesteMois(kind: CadEditKind, o: CadOccurrence, ev: PointerEvent): void;
|
|
7718
|
+
/** Création par glisser sur une plage libre. Un clic sec produit un pas, jamais rien. */
|
|
7719
|
+
protected creer(jour: Date, ev: PointerEvent, colonne: HTMLElement): void;
|
|
7720
|
+
/**
|
|
7721
|
+
* Le CLAVIER passe par la MÊME projection que le pointeur — une seule logique de placement
|
|
7722
|
+
* à éprouver, et l'accessibilité n'est pas une reprise ultérieure qui dérive.
|
|
7723
|
+
* Ctrl/Cmd + flèches déplacent, Maj + flèches verticales redimensionnent par le bas.
|
|
7724
|
+
*/
|
|
7725
|
+
protected clavier(o: CadOccurrence, e: KeyboardEvent): void;
|
|
7726
|
+
protected clicEvenement(occurrence: CadOccurrence, originalEvent: Event): void;
|
|
7727
|
+
/** Le « +N » et un jour de la vue année mènent au JOUR : c'est ce qu'on cherchait. */
|
|
7728
|
+
protected voirJour(date: Date, originalEvent: Event): void;
|
|
7729
|
+
constructor();
|
|
7730
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadCalendarComponent, never>;
|
|
7731
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadCalendarComponent, "cad-calendar", never, { "plan": { "alias": "plan"; "required": false; "isSignal": true; }; "sources": { "alias": "sources"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "firstDay": { "alias": "firstDay"; "required": false; "isSignal": true; }; "dayStart": { "alias": "dayStart"; "required": false; "isSignal": true; }; "dayEnd": { "alias": "dayEnd"; "required": false; "isSignal": true; }; "hourHeight": { "alias": "hourHeight"; "required": false; "isSignal": true; }; "maxPerDay": { "alias": "maxPerDay"; "required": false; "isSignal": true; }; "workCalendar": { "alias": "workCalendar"; "required": false; "isSignal": true; }; "today": { "alias": "today"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "showNow": { "alias": "showNow"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "snap": { "alias": "snap"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "view": "viewChange"; "date": "dateChange"; "eventClick": "eventClick"; "dateClick": "dateClick"; "rangeChange": "rangeChange"; "eventMove": "eventMove"; "eventResize": "eventResize"; "eventCreate": "eventCreate"; }, never, never, true, never>;
|
|
7732
|
+
}
|
|
7733
|
+
|
|
7734
|
+
/**
|
|
7735
|
+
* Le format d'une maquette de l'Atelier CadGrid.
|
|
7736
|
+
*
|
|
7737
|
+
* ⚠️ CE N'EST PAS UN FORMAT À NOUS. C'est celui des pages visuelles de frontless, et
|
|
7738
|
+
* c'est tout l'intérêt : « ouvrir cette maquette comme page dans mon projet » devient un
|
|
7739
|
+
* transfert de fichier, pas une fonctionnalité à écrire. Trois écrits l'imposent, et il
|
|
7740
|
+
* faut qu'ils restent d'accord :
|
|
7741
|
+
*
|
|
7742
|
+
* · le rendu de frontless — `serverless/shell/src/frontless/grid.ts` :
|
|
7743
|
+
* grid-template-columns: repeat(12, 1fr)
|
|
7744
|
+
* --gc = (x + 1) / span w --gr = (y + 1) / span h
|
|
7745
|
+
* · l'assainisseur du backend — `backend/utils/layout-sanitize.js`, qui borne et
|
|
7746
|
+
* nettoie tout ce qui entre en base ;
|
|
7747
|
+
* · ce fichier.
|
|
7748
|
+
*
|
|
7749
|
+
* Les bornes ci-dessous sont donc RECOPIÉES de l'assainisseur, pas inventées. Les élargir
|
|
7750
|
+
* ici ne servirait à rien : le backend rejetterait à l'écriture, ou pire, rognerait en
|
|
7751
|
+
* silence et l'utilisateur perdrait son travail sans message.
|
|
7752
|
+
*
|
|
7753
|
+
* ATTENTION AU HOMONYME : `@cadriciel/ui` a aussi un `cad-grid` avec `[cadCol]`, qui est
|
|
7754
|
+
* une grille de FLUX (on ne choisit qu'une largeur). Ce n'est pas celle-là. Ici le
|
|
7755
|
+
* placement est ABSOLU — x, y, w, h — parce que c'est ce que frontless sait relire.
|
|
7756
|
+
*/
|
|
7757
|
+
/** Nombre de colonnes, figé par le contrat de frontless. */
|
|
7758
|
+
declare const ATELIER_COLONNES = 12;
|
|
7759
|
+
/** Bornes recopiées de `backend/utils/layout-sanitize.js`. */
|
|
7760
|
+
declare const ATELIER_BORNES: {
|
|
7761
|
+
readonly yMax: 500;
|
|
7762
|
+
readonly hMin: 1;
|
|
7763
|
+
readonly hMax: 100;
|
|
7764
|
+
readonly itemsMax: 200;
|
|
7765
|
+
readonly propsMax: 30;
|
|
7766
|
+
};
|
|
7767
|
+
/** Un composant posé sur le plan. */
|
|
7768
|
+
interface AtelierItem {
|
|
7769
|
+
/** Stable, pour que la sélection et l'annulation survivent à un réarrangement. */
|
|
7770
|
+
id: string;
|
|
7771
|
+
/** Le SÉLECTEUR du composant (`cad-badge`), pas son symbole : c'est ce que lit frontless. */
|
|
7772
|
+
type: string;
|
|
7773
|
+
/** Colonne de départ, 0-indexée. */
|
|
7774
|
+
x: number;
|
|
7775
|
+
/** Ligne de départ, 0-indexée. */
|
|
7776
|
+
y: number;
|
|
7777
|
+
/** Largeur en colonnes. */
|
|
7778
|
+
w: number;
|
|
7779
|
+
/** Hauteur en lignes. */
|
|
7780
|
+
h: number;
|
|
7781
|
+
props?: Record<string, string | number | boolean | string[]>;
|
|
7782
|
+
/** événement → nom de méthode de l'hôte. */
|
|
7783
|
+
ev?: Record<string, string>;
|
|
7784
|
+
data?: {
|
|
7785
|
+
service?: string;
|
|
7786
|
+
field?: string;
|
|
7787
|
+
label?: string;
|
|
7788
|
+
};
|
|
7789
|
+
hideMobile?: boolean;
|
|
7790
|
+
}
|
|
7791
|
+
interface AtelierLayout {
|
|
7792
|
+
version: 1;
|
|
7793
|
+
items: AtelierItem[];
|
|
7794
|
+
}
|
|
7795
|
+
/** Un plan vide, jamais `null` : un canevas absent et un canevas vide se traitent pareil. */
|
|
7796
|
+
declare const atelierLayoutVide: () => AtelierLayout;
|
|
7797
|
+
|
|
7798
|
+
/** Identifiant conforme à l'assainisseur backend : `/^[A-Za-z0-9_-]{1,24}$/`. */
|
|
7799
|
+
declare function atelierNouvelId(): string;
|
|
7800
|
+
/** Remet le compteur à zéro. Réservé aux tests, pour qu'ils ne dépendent pas de leur ordre. */
|
|
7801
|
+
declare function atelierReinitialiserIds(): void;
|
|
7802
|
+
/**
|
|
7803
|
+
* La première position libre pour un bloc de `w × h`, en balayant de haut en bas puis de
|
|
7804
|
+
* gauche à droite.
|
|
7805
|
+
*
|
|
7806
|
+
* C'est ce qui rend le CLIC utilisable comme geste principal : on choisit dans la palette
|
|
7807
|
+
* et ça se pose à un endroit sensé, sans viser. Le glisser sert ensuite à réarranger,
|
|
7808
|
+
* là où il est réellement meilleur.
|
|
7809
|
+
*/
|
|
7810
|
+
declare function atelierPremierePlaceLibre(items: readonly AtelierItem[], w: number, h: number): {
|
|
7811
|
+
x: number;
|
|
7812
|
+
y: number;
|
|
7813
|
+
};
|
|
7814
|
+
/** Pose un composant, à la première place libre ou à l'endroit demandé. */
|
|
7815
|
+
declare function atelierAjouter(layout: AtelierLayout, type: string, gabarit?: {
|
|
7816
|
+
w?: number;
|
|
7817
|
+
h?: number;
|
|
7818
|
+
props?: AtelierItem['props'];
|
|
7819
|
+
}): {
|
|
7820
|
+
layout: AtelierLayout;
|
|
7821
|
+
id: string;
|
|
7822
|
+
};
|
|
7823
|
+
/** Retire un composant. Sans effet si l'identifiant est inconnu. */
|
|
7824
|
+
declare function atelierRetirer(layout: AtelierLayout, id: string): AtelierLayout;
|
|
7825
|
+
/** Change une propriété. `undefined` la supprime plutôt que d'écrire un vide. */
|
|
7826
|
+
declare function atelierDefinirProp(layout: AtelierLayout, id: string, nom: string, valeur: string | number | boolean | string[] | undefined): AtelierLayout;
|
|
7827
|
+
/**
|
|
7828
|
+
* Change la largeur, en gardant le bloc DANS la grille.
|
|
7829
|
+
*
|
|
7830
|
+
* On décale x quand la largeur déborde, plutôt que de rogner w : l'utilisateur a demandé
|
|
7831
|
+
* une largeur, pas une place. Rogner silencieusement donnerait un bloc plus étroit que
|
|
7832
|
+
* ce qu'il a réglé, sans rien dire.
|
|
7833
|
+
*/
|
|
7834
|
+
declare function atelierRedimensionner(layout: AtelierLayout, id: string, w: number): AtelierLayout;
|
|
7835
|
+
/**
|
|
7836
|
+
* Déplace un bloc d'un cran dans l'ordre de lecture (haut/bas), puis recompacte.
|
|
7837
|
+
*
|
|
7838
|
+
* C'est le CHEMIN CLAVIER, et il passe par les mêmes fonctions que le glisser — la règle
|
|
7839
|
+
* déjà tenue par `cad-taskboard` et `cad-calendar`. Deux chemins séparés divergent
|
|
7840
|
+
* toujours, et c'est celui du clavier qui pourrit, parce que personne ne le regarde.
|
|
7841
|
+
*/
|
|
7842
|
+
declare function atelierDeplacer(layout: AtelierLayout, id: string, sens: -1 | 1): AtelierLayout;
|
|
7843
|
+
/**
|
|
7844
|
+
* Repose tous les blocs dans l'ordre de lecture, en supprimant les trous verticaux.
|
|
7845
|
+
*
|
|
7846
|
+
* Le plan garde des positions ABSOLUES (c'est le contrat de frontless), mais une maquette
|
|
7847
|
+
* criblée de lignes vides est illisible. On recompacte donc à chaque réarrangement, en
|
|
7848
|
+
* respectant l'ordre voulu et les largeurs.
|
|
7849
|
+
*/
|
|
7850
|
+
declare function atelierRecompacter(layout: AtelierLayout): AtelierLayout;
|
|
7851
|
+
/**
|
|
7852
|
+
* Repose les blocs DANS L'ORDRE DU TABLEAU REÇU, sans le retrier.
|
|
7853
|
+
*
|
|
7854
|
+
* La distinction avec `atelierRecompacter` n'est pas cosmétique : après un déplacement au
|
|
7855
|
+
* clavier, l'ordre voulu est celui du tableau, et les `y` portent encore les anciennes
|
|
7856
|
+
* positions. Retrier à ce moment-là annule l'échange — le déplacement devenait
|
|
7857
|
+
* silencieusement inopérant, et c'est le test du clavier qui l'a montré.
|
|
7858
|
+
*/
|
|
7859
|
+
declare function atelierPoser(items: readonly AtelierItem[]): AtelierLayout;
|
|
7860
|
+
/**
|
|
7861
|
+
* Ramène un plan venu de l'extérieur dans les clous — un lien partagé, un fichier collé.
|
|
7862
|
+
*
|
|
7863
|
+
* Écarte ce qui est irrécupérable plutôt que de le réparer au jugé : un bloc dont on a
|
|
7864
|
+
* deviné le type serait pire qu'un bloc absent. Même doctrine que l'assainisseur backend,
|
|
7865
|
+
* dont ce n'est PAS un doublon : celui-ci protège l'affichage, celui-là protège la base.
|
|
7866
|
+
*/
|
|
7867
|
+
declare function atelierNormaliser(brut: unknown): AtelierLayout;
|
|
7868
|
+
|
|
7869
|
+
/** Une propriété telle que l'inspecteur doit la présenter. */
|
|
7870
|
+
interface AtelierProp {
|
|
7871
|
+
nom: string;
|
|
7872
|
+
type: string;
|
|
7873
|
+
requise: boolean;
|
|
7874
|
+
bidirectionnelle: boolean;
|
|
7875
|
+
defaut?: string | number | boolean;
|
|
7876
|
+
/** Le contrôle à afficher, DÉDUIT du type — c'est à ça que sert le lot 0. */
|
|
7877
|
+
controle: 'interrupteur' | 'liste' | 'nombre' | 'texte' | 'liaison';
|
|
7878
|
+
/** Valeurs proposées quand `controle === 'liste'`. */
|
|
7879
|
+
choix?: string[];
|
|
7880
|
+
}
|
|
7881
|
+
interface AtelierComposant {
|
|
7882
|
+
/**
|
|
7883
|
+
* La clé stockée dans `layout.json`.
|
|
7884
|
+
*
|
|
7885
|
+
* ⚠️ CE N'EST PAS LE SÉLECTEUR, et ce ne peut pas l'être : l'assainisseur n'accepte que
|
|
7886
|
+
* `/^(?:app:)?[a-z][a-z0-9-]{0,40}$/`, donc `button[cadButton]` — le sélecteur du
|
|
7887
|
+
* composant le PLUS utilisé de la bibliothèque — y est inexprimable. On dérive donc la
|
|
7888
|
+
* clé du SYMBOLE, qui est stable et unique. `CadBadgeComponent` → `cad-badge`.
|
|
7889
|
+
*/
|
|
7890
|
+
cle: string;
|
|
7891
|
+
symbole: string;
|
|
7892
|
+
selecteur: string;
|
|
7893
|
+
/** La balise à écrire ou à créer. Voir `hote` du registre : `<button cadButton>`. */
|
|
7894
|
+
balise: string;
|
|
7895
|
+
/** L'attribut à poser sur la balise, pour les composants à sélecteur d'attribut. */
|
|
7896
|
+
attribut?: string;
|
|
7897
|
+
groupe: string;
|
|
7898
|
+
role: string | null;
|
|
7899
|
+
props: AtelierProp[];
|
|
7900
|
+
sorties: {
|
|
7901
|
+
nom: string;
|
|
7902
|
+
type?: string;
|
|
7903
|
+
}[];
|
|
7904
|
+
/** Largeur de départ, en colonnes sur 12. */
|
|
7905
|
+
largeur: number;
|
|
7906
|
+
/** Hauteur de départ, en lignes de grille. */
|
|
7907
|
+
hauteur: number;
|
|
7908
|
+
}
|
|
7909
|
+
/** `CadBadgeComponent` → `cad-badge`. Dérivé, jamais saisi. */
|
|
7910
|
+
declare function atelierCleDeSymbole(symbole: string): string;
|
|
7911
|
+
/**
|
|
7912
|
+
* La balise et l'attribut d'un sélecteur.
|
|
7913
|
+
*
|
|
7914
|
+
* `cad-badge` → `<cad-badge>` · `button[cadButton], a[cadButton]` → `<button cadButton>`.
|
|
7915
|
+
* Écrire `<cad-button>` donnerait un élément inconnu, muet et sans style — sans erreur.
|
|
7916
|
+
*/
|
|
7917
|
+
declare function atelierBalise(selecteur: string): {
|
|
7918
|
+
balise: string;
|
|
7919
|
+
attribut?: string;
|
|
7920
|
+
};
|
|
7921
|
+
/**
|
|
7922
|
+
* Le contrôle qu'appelle un type.
|
|
7923
|
+
*
|
|
7924
|
+
* C'est ici que le travail du lot 0 se transforme en interface : sans le type, tout
|
|
7925
|
+
* retomberait sur un champ texte, y compris les 253 booléens de la bibliothèque.
|
|
7926
|
+
*/
|
|
7927
|
+
declare function atelierControle(type: string | undefined): Pick<AtelierProp, 'controle' | 'choix'>;
|
|
7928
|
+
/** Tous les composants posables, calculés une fois. */
|
|
7929
|
+
declare const ATELIER_PALETTE: readonly AtelierComposant[];
|
|
7930
|
+
/** Le composant derrière une clé de `layout.json`, ou `null` s'il n'existe plus. */
|
|
7931
|
+
declare function atelierComposant(cle: string): AtelierComposant | null;
|
|
7932
|
+
/** Recherche par nom, clé ou sélecteur. Sans terme, rend tout. */
|
|
7933
|
+
declare function atelierChercher(terme: string): AtelierComposant[];
|
|
7934
|
+
/** Les composants groupés, dans l'ordre d'affichage de la palette. */
|
|
7935
|
+
declare function atelierGroupes(terme?: string): {
|
|
7936
|
+
groupe: string;
|
|
7937
|
+
composants: AtelierComposant[];
|
|
7938
|
+
}[];
|
|
7939
|
+
|
|
7940
|
+
/** `Relevé d'ouvrage` → `ReleveOuvrage`. */
|
|
7941
|
+
declare function atelierNomDeClasse(titre: string): string;
|
|
7942
|
+
/** `ReleveOuvrage` → `app-releve-ouvrage`. */
|
|
7943
|
+
declare function atelierSelecteurDeClasse(nom: string): string;
|
|
7944
|
+
/** Les entrées requises qu'aucune valeur ne remplit — nommées, jamais inventées. */
|
|
7945
|
+
declare function atelierManques(layout: AtelierLayout): string[];
|
|
7946
|
+
/** Les symboles à importer : uniquement ceux que la maquette pose réellement. */
|
|
7947
|
+
declare function atelierImports(layout: AtelierLayout): string[];
|
|
7948
|
+
/**
|
|
7949
|
+
* Le gabarit seul.
|
|
7950
|
+
*
|
|
7951
|
+
* Les items sont écrits dans L'ORDRE DE LECTURE (y puis x), et ce n'est pas cosmétique :
|
|
7952
|
+
* en dessous de 700 px la grille retombe à une colonne et l'ordre affiché devient l'ordre
|
|
7953
|
+
* du DOM. Écrire dans l'ordre de création donnerait une page correcte sur bureau et
|
|
7954
|
+
* mélangée sur téléphone — un défaut qu'on ne voit qu'en rétrécissant la fenêtre.
|
|
7955
|
+
*/
|
|
7956
|
+
declare function atelierGabarit(layout: AtelierLayout): string;
|
|
7957
|
+
/**
|
|
7958
|
+
* Les styles du plan — RECOPIÉS du rendu de frontless (`serverless/shell/src/frontless/
|
|
7959
|
+
* grid.ts`), pas réinventés. Une maquette doit s'afficher chez qui la colle exactement
|
|
7960
|
+
* comme dans l'atelier, y compris son repli mobile à une colonne.
|
|
7961
|
+
*/
|
|
7962
|
+
declare const ATELIER_STYLES_PLAN = " .plan {\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n grid-auto-rows: 58px;\n gap: 10px;\n }\n .bloc { grid-column: var(--gc); grid-row: var(--gr); min-width: 0; overflow: hidden; }\n @media (max-width: 700px) {\n .plan { grid-template-columns: 1fr; grid-auto-rows: minmax(58px, auto); }\n .bloc { grid-column: auto; grid-row: auto; }\n .bloc.cache-mobile { display: none; }\n }";
|
|
7963
|
+
/** Le composant Angular complet, prêt à coller dans un projet. */
|
|
7964
|
+
declare function atelierCode(layout: AtelierLayout, titre?: string): string;
|
|
7965
|
+
|
|
7966
|
+
/**
|
|
7967
|
+
* Registre d'exécution de la bibliothèque — GÉNÉRÉ, ne pas modifier à la main.
|
|
7968
|
+
*
|
|
7969
|
+
* Source : tools/gen-catalog.mjs, même passe AST que catalog.json.
|
|
7970
|
+
* Régénérer : node tools/gen-catalog.mjs · Vérifier : node tools/gen-catalog.mjs --check
|
|
7971
|
+
*
|
|
7972
|
+
* `catalog.json` dit ce qui existe et comment le présenter ; ce fichier dit comment
|
|
7973
|
+
* l'INSTANCIER. Un JSON ne peut pas porter de référence de classe, d'où les deux.
|
|
7974
|
+
*
|
|
7975
|
+
* `hote` est la balise à créer : elle ne vaut pas toujours le sélecteur. `CadButtonComponent`
|
|
7976
|
+
* s'écrit `button[cadButton]` — il n'existe aucun élément `<cad-button>`, il faut fabriquer
|
|
7977
|
+
* un `<button>` et y attacher le composant.
|
|
7978
|
+
*
|
|
7979
|
+
* Les 61 directives de la bibliothèque n'y figurent pas : une directive ne s'instancie
|
|
7980
|
+
* pas seule, elle se pose sur un hôte existant. Elles restent visibles dans catalog.json.
|
|
7981
|
+
*/
|
|
7982
|
+
|
|
7983
|
+
interface EntreeRegistre {
|
|
7984
|
+
/** La classe du composant, prête pour `createComponent()`. */
|
|
7985
|
+
readonly classe: Type<unknown>;
|
|
7986
|
+
/** Le sélecteur tel qu'écrit dans le décorateur. */
|
|
7987
|
+
readonly selecteur: string;
|
|
7988
|
+
/** La balise à créer pour l'héberger. */
|
|
7989
|
+
readonly hote: string;
|
|
7990
|
+
}
|
|
7991
|
+
/** Symbole -> de quoi le construire. 102 composants posables. */
|
|
7992
|
+
declare const REGISTRE: Readonly<Record<string, EntreeRegistre>>;
|
|
7993
|
+
/** La classe d'un symbole, ou `null` s'il n'est pas posable (directive, ou hôte indéterminable). */
|
|
7994
|
+
declare function classeDe(symbole: string): Type<unknown> | null;
|
|
7995
|
+
|
|
7996
|
+
export { ATELIER_BORNES, ATELIER_COLONNES, ATELIER_PALETTE, ATELIER_STYLES_PLAN, BanGeocoder, CAD_BREAKPOINTS, CAD_CHART_PALETTE, CAD_COLOR_PRESETS, CAD_DEFAULT_BASEMAPS, CAD_DEFAULT_PRIORITY_BREAKPOINTS, CAD_DIALOG_DATA, CAD_FILTER_OPERATORS, CAD_GEOCODER, CAD_ICONS, CAD_ICONS_CEREMA, CAD_ICONS_CORE, CAD_ICONS_DATA, CAD_ICONS_FILES, CAD_ICONS_GEO, CAD_ICONS_SUBSET, CAD_ICONS_TOKEN, CAD_ICONS_UI, CAD_ICON_ALIASES, CAD_ICON_CATEGORIES, CAD_MAPLIBRE_CSS_URL, CAD_MAP_CHILD, CAD_MAP_DEFAULTS, CAD_MAP_GLOBAL_STYLES, CAD_MAP_GLYPHS, CAD_MAP_PALETTE, CAD_MASK_PRESETS, CAD_MOBILE_BREAKPOINT, CAD_RECURRENCE_INTERNE, CAD_SELECT_POSITIONS, CAD_SELECT_TRIGGER_STYLES, CAD_SHEET_DATA, CAD_SHELL, CAD_TOUCH_DENSITY, CadAccordionComponent, CadAccordionPanelComponent, CadAppShellComponent, CadAvatarComponent, CadAvatarGroupComponent, CadBadgeComponent, CadBadgeDirective, CadBlockDirective, CadBlockOverlayComponent, CadBlockUiComponent, CadBottomNavComponent, CadBreadcrumbComponent, CadBreadcrumbItemDirective, CadBreakpointService, CadButtonComponent, CadButtonGroupComponent, CadCalendarComponent, CadCaptionDirective, CadCardComponent, CadCardDirective, CadCardHeaderDirective, CadCarouselComponent, CadCarouselItemDirective, CadCascadeSelectComponent, CadCellTemplateDirective, CadCenterComponent, CadChartComponent, CadCheckboxComponent, CadChipComponent, CadClusterComponent, CadColDirective, CadColorpickerComponent, CadColumnComponent, CadComboComponent, CadConfirmContentComponent, CadConfirmDialogComponent, CadConfirmService, CadContainerComponent, CadDataviewComponent, CadDataviewGridDirective, CadDataviewListDirective, CadDatepickerComponent, CadDialogComponent, CadDialogContainerComponent, CadDialogFooterDirective, CadDialogHeaderDirective, CadDialogRef, CadDialogService, CadDividerComponent, CadDrawerComponent, CadEditFocusDirective, CadEditorTemplateDirective, CadEmptyDirective, CadFieldComponent, CadFieldsetComponent, CadFieldsetLegendDirective, CadFilterChipComponent, CadFilterTemplateDirective, CadGeocodingService, CadGridComponent, CadGroupFooterDirective, CadGroupHeaderDirective, CadHeaderTemplateDirective, CadIconComponent, CadIconRegistry, CadIfDirective, CadImageComponent, CadInplaceComponent, CadInplaceContentDirective, CadInplaceDisplayDirective, CadInputDirective, CadJsonEditorComponent, CadKeyFilterDirective, CadListEmptyDirective, CadListFooterDirective, CadListHeaderDirective, CadListItemDirective, CadListboxComponent, CadMapBasemapRegistry, CadMapBasemapsComponent, CadMapCardComponent, CadMapChromeComponent, CadMapComponent, CadMapDrawEngine, CadMapLayerComponent, CadMapLayerGroupComponent, CadMapLayerToggleComponent, CadMapLegendComponent, CadMapMenuComponent, CadMapPanelComponent, CadMapPanels, CadMapRailComponent, CadMapRailItemComponent, CadMapSearchComponent, CadMapSectionComponent, CadMaskDirective, CadMenuComponent, CadMenubarComponent, CadMessageComponent, CadMeterComponent, CadMeterLabelDirective, CadMultiselectComponent, CadNavDrawerComponent, CadNavDrawerFooterDirective, CadNavDrawerHeaderDirective, CadNumberComponent, CadOptionListComponent, CadOrderlistComponent, CadOrgNodeDirective, CadOrgchartComponent, CadOverlayBase, CadPaginatorComponent, CadPanelComponent, CadPanelContentDirective, CadPanelHeaderDirective, CadPanelHeadingDirective, CadPasswordComponent, CadPicklistComponent, CadPopoverComponent, CadProgressComponent, CadRadioComponent, CadRadioGroupComponent, CadRatingComponent, CadRowActionsDirective, CadRowCountDirective, CadRowExpansionDirective, CadScrollTopComponent, CadSegmentedComponent, CadSelectBase, CadSelectComponent, CadSelectEmptyDirective, CadSelectFooterDirective, CadSelectHeaderDirective, CadSelectItemDirective, CadSelectSelectedDirective, CadSheetContainerComponent, CadSheetRef, CadSheetService, CadSidebarComponent, CadSidebarPanelDirective, CadSkeletonComponent, CadSliderComponent, CadSpacerComponent, CadSpeedDialComponent, CadSpinnerComponent, CadSplitButtonComponent, CadSplitComponent, CadSplitterComponent, CadSplitterPanelComponent, CadStackComponent, CadStepComponent, CadStepperComponent, CadSwitchComponent, CadTabComponent, CadTabContentDirective, CadTabLabelDirective, CadTableBase, CadTableComponent, CadTableEdit, CadTableEditUi, CadTableFooterDirective, CadTablePanelComponent, CadTableResponsive, CadTableSelection, CadTableSticky, CadTableVirtual, CadTabsComponent, CadTagComponent, CadTaskCardDirective, CadTaskRowDirective, CadTaskboardComponent, CadTimeAxis, CadTimelineComponent, CadTimelineContentDirective, CadTimelineMarkerDirective, CadTimelineOppositeDirective, CadToastComponent, CadToastItemDirective, CadToastService, CadToggleButtonComponent, CadTooltipComponent, CadTooltipDirective, CadTreeAdapter, CadTreeComponent, CadTreeNodeDirective, CadTreeselectComponent, CadUploadComponent, CadUploadContentDirective, CadUploadEmptyDirective, CadUploadItemDirective, CadValueAccessor, CadWorkCalendar, MAPLIBRE_MIN_CSS, REGISTRE, addDays, addMonths, addYears, atelierAjouter, atelierBalise, atelierChercher, atelierCleDeSymbole, atelierCode, atelierComposant, atelierControle, atelierDefinirProp, atelierDeplacer, atelierGabarit, atelierGroupes, atelierImports, atelierLayoutVide, atelierManques, atelierNomDeClasse, atelierNormaliser, atelierNouvelId, atelierPoser, atelierPremierePlaceLibre, atelierRecompacter, atelierRedimensionner, atelierReinitialiserIds, atelierRetirer, atelierSelecteurDeClasse, cadAggregate, cadApplyColumnOrder, cadApplyMask, cadArea, cadAutosizeWidth, cadBasemapThumbnail, cadBoundsOf, cadCategories, cadCentroid, cadColorExpr, cadCompare, cadCompareRank, cadCurrentOperator, cadDebutSemaine, cadDefaultMatchMode, cadDistance, cadDownloadCsv, cadDurationToMinutes, cadEstBandeau, cadExpandOccurrences, cadFilterData, cadFilterKindOf, cadFilterOperators, cadFilterRows, cadFindLinkCycle, cadFmtArea, cadFmtLength, cadFormatCell, cadFormatColor, cadFormatDuration, cadFormatSize, cadFrenchHolidays, cadGap, cadGeoJSONStats, cadGeometryKinds, cadHeaderMenuItems, cadHighlightJson, cadHslToRgb, cadHsvToRgb, cadId, cadIsGroupKey, cadIsRank, cadJsonErrorPos, cadLegendFromStyle, cadLength, cadMapEstVivante, cadMapLayerOf, cadMapLayersOf, cadMatch, cadMinuit, cadMonthGrid, cadMoveColumn, cadMoveItems, cadNormalize, cadNormalizeOptions, cadNormalizePlan, cadNumberExpr, cadNumeroJour, cadPackDay, cadPadBounds, cadParseColor, cadParseDuration, cadParseRRule, cadParseResponsive, cadPlanHeader, cadPlanTicks, cadProjeterClavier, cadProjeterCreation, cadProjeterEdition, cadProjeterMois, cadPropsTable, cadRankBetween, cadRankFirst, cadRankLast, cadRankSequence, cadResolve, cadResolveResponsive, cadResponsive, cadRgbToHsl, cadRgbToHsv, cadRingArea, cadRowKey, cadRowPredicate, cadSameValue, cadScaleNext, cadScaleStart, cadSortData, cadStartResize, cadStyleToExpressions, cadUnmask, cadUnscheduled, cadValidateGeoJSON, cadValueForOperator, cadWeekBands, cadWriteField, classeDe, compareDay, daysInMonth, endOfMonth, ensureMaplibreCss, formatDate, isBetweenDay, isSameDay, isSameMonth, isValidDate, isoOf, isoWeek, loadChartJs, loadMaplibre, monthNames, pad2, parseIso, parseWithFormat, provideCadIcons, startOfDay, startOfMonth, toDate, weekdayNames };
|
|
7997
|
+
export type { AtelierComposant, AtelierItem, AtelierLayout, AtelierProp, CadAggregate, CadAggregateFn, CadAggregates, CadBadgeSeverity, CadBand, CadBandRow, CadBasemap, CadBasemapKind, CadBottomNavItem, CadBounds, CadBreadcrumbItem, CadBreakpoint, CadCalendarChangeEvent, CadCalendarCreateEvent, CadCalendarDateEvent, CadCalendarEventEvent, CadCalendarSource, CadCalendarView, CadCarouselResponsive, CadCellContext, CadCellEditState, CadChartClickEvent, CadChartType, CadColorFormat, CadColorSpec, CadColumnAlign, CadColumnDataType, CadColumnEditor, CadColumnFilterOption, CadColumnFilterType, CadColumnMenuActionEvent, CadColumnPinEvent, CadColumnReorderEvent, CadColumnResizeEvent, CadColumnToggleEvent, CadComboSource, CadConfirmOptions, CadDataviewLayout, CadDateMode, CadDateSelection, CadDateValue, CadDialogConfig, CadDialogPosition, CadDialogSize, CadDisplayRow, CadDrawMode, CadDrawOptions, CadDrawerPosition, CadDuration, CadDurationUnit, CadEditBase, CadEditCompleteEvent, CadEditEvent, CadEditGeometry, CadEditKind, CadEditMode, CadEditorContext, CadExpandResult, CadFeatureEvent, CadFilterChangeEvent, CadFilterKind, CadFilterMatchMode, CadFilterMeta, CadFilterOperator, CadFilters, CadGap, CadGeoJSON, CadGeocodeOptions, CadGeocodeResult, CadGeocoder, CadGeometryKind, CadGroupBy, CadGroupContext, CadGroupInfo, CadGroupItem, CadHeaderMenuHost, CadHsva, CadLayerStyle, CadLazyLoadEvent, CadLegendItem, CadListGroup, CadListItem, CadListNormalizeOpts, CadListOption, CadListRow, CadLngLat, CadMapChild, CadMapChrome, CadMapClick, CadMapControl, CadMapLayerType, CadMapMenuConfig, CadMapMenuItem, CadMapMenuPanel, CadMapMenuRailItem, CadMapMenuSection, CadMapPosition, CadMapSide, CadMapView, CadMeasure, CadMenuItem, CadMenubarItem, CadMeterValue, CadMonthGrid, CadNavDrawerItem, CadNavDrawerMode, CadNavDrawerRow, CadNodeEvent, CadNormalizePlanOptions, CadNormalizedPlan, CadNumberSpec, CadOccurrence, CadOptionItem, CadOrgNode, CadOverlayHandle, CadPageEvent, CadPaintSet, CadPinnedColumns, CadPlacement, CadPlan, CadPlanAssignment, CadPlanBucket, CadPlanCalendar, CadPlanCalendarException, CadPlanDateInput, CadPlanHeader, CadPlanHours, CadPlanIssue, CadPlanLink, CadPlanLinkType, CadPlanMarker, CadPlanResource, CadPlanScale, CadPlanTask, CadPlanTick, CadPlanTicksOptions, CadPlannedLink, CadPlannedTask, CadPriorityBreakpoints, CadProgressSeverity, CadRRule, CadRRuleFreq, CadRecurrenceIssue, CadRgba, CadRowEditEvent, CadRowEditState, CadRowEvent, CadRowReorderEvent, CadSegmentOption, CadSelectItemContext, CadSelectionMode, CadSelectionPropagation, CadSeverity, CadSheetConfig, CadSheetHeight, CadShellApi, CadSize, CadSliderMark, CadSliderSeverity, CadSliderValue, CadSlot, CadSortEvent, CadSortMeta, CadSortOrder, CadStepState, CadTableEditContext, CadTableEditUiContext, CadTablePanelTab, CadTableResponsiveMode, CadTableSelectionContext, CadTagSeverity, CadTaskAssignEvent, CadTaskMoveEvent, CadTaskOpenEvent, CadTaskboardGroupBy, CadTaskboardMode, CadTimelineAlign, CadToastAction, CadToastMessage, CadToastPosition, CadToastSeverity, CadTreeAdapterOptions, CadTreeNode, CadTreeNodeEvent, CadUploadFile, CadUploadHandlerEvent, CadUploadStatus, CadVariant, CadVirtualRange, CadWipEvent, EntreeRegistre, MLExpression, MaplibreModule };
|