@cadriciel/ui 0.4.1 → 0.6.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 +1699 -12
- package/fesm2022/cadriciel-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/cadriciel-ui.d.ts +560 -3
package/types/cadriciel-ui.d.ts
CHANGED
|
@@ -2342,6 +2342,16 @@ interface CadNavDrawerItem {
|
|
|
2342
2342
|
disabled?: boolean;
|
|
2343
2343
|
/** Intertitre de regroupement : rendu comme un libellé, non cliquable. */
|
|
2344
2344
|
section?: boolean;
|
|
2345
|
+
/**
|
|
2346
|
+
* Intertitre REPLIABLE : il devient un bouton qui masque les entrées qui le suivent,
|
|
2347
|
+
* jusqu'au prochain intertitre. Sans effet hors `section: true`, et sans effet en `rail`
|
|
2348
|
+
* où un intertitre n'est déjà plus qu'un filet.
|
|
2349
|
+
*
|
|
2350
|
+
* DONNEZ-LUI UN `value`. C'est lui qui sert de clé dans `collapsed` ; à défaut on retombe
|
|
2351
|
+
* sur le libellé, et renommer le libellé perd alors l'état replié sans rien dire. Une clé
|
|
2352
|
+
* se choisit immuable, jamais renommable.
|
|
2353
|
+
*/
|
|
2354
|
+
collapsible?: boolean;
|
|
2345
2355
|
command?: (ev: {
|
|
2346
2356
|
item: CadNavDrawerItem;
|
|
2347
2357
|
originalEvent: Event;
|
|
@@ -2349,6 +2359,23 @@ interface CadNavDrawerItem {
|
|
|
2349
2359
|
ariaLabel?: string;
|
|
2350
2360
|
}
|
|
2351
2361
|
type CadNavDrawerMode = 'auto' | 'permanent' | 'temporary' | 'rail';
|
|
2362
|
+
/**
|
|
2363
|
+
* Une ligne prête à rendre : l'entrée d'origine plus ce que seul le composant peut savoir —
|
|
2364
|
+
* la clé de son intertitre, s'il est replié, et combien d'entrées il porte.
|
|
2365
|
+
*
|
|
2366
|
+
* Le calcul vit ici et pas dans l'hôte parce qu'il dépend du mode : en `rail` un intertitre
|
|
2367
|
+
* n'est plus qu'un filet, donc rien ne doit y être masqué — sinon des entrées disparaîtraient
|
|
2368
|
+
* sans qu'aucun bouton ne permette de les rouvrir.
|
|
2369
|
+
*/
|
|
2370
|
+
interface CadNavDrawerRow {
|
|
2371
|
+
item: CadNavDrawerItem;
|
|
2372
|
+
/** Intertitres uniquement : la clé utilisée dans `collapsed`. */
|
|
2373
|
+
key: string;
|
|
2374
|
+
collapsible: boolean;
|
|
2375
|
+
collapsed: boolean;
|
|
2376
|
+
/** Intertitres uniquement : nombre d'entrées portées, tous états confondus. */
|
|
2377
|
+
count: number;
|
|
2378
|
+
}
|
|
2352
2379
|
/**
|
|
2353
2380
|
* <cad-nav-drawer [items]="items" [(open)]="open" [(value)]="page" mode="auto" (itemClick)/>
|
|
2354
2381
|
*
|
|
@@ -2372,6 +2399,15 @@ declare class CadNavDrawerComponent {
|
|
|
2372
2399
|
readonly open: _angular_core.ModelSignal<boolean>;
|
|
2373
2400
|
/** Entrée courante, comparée à `item.value`. */
|
|
2374
2401
|
readonly value: _angular_core.ModelSignal<string | null>;
|
|
2402
|
+
/**
|
|
2403
|
+
* Clés des intertitres repliés (`item.value`, à défaut `item.label`).
|
|
2404
|
+
*
|
|
2405
|
+
* Un TABLEAU et non un `Set` : c'est ce qui se lie en deux sens, se compare, et surtout se
|
|
2406
|
+
* sérialise tel quel — l'hôte qui veut persister l'état le pose dans `localStorage` sans
|
|
2407
|
+
* conversion. Le composant ne persiste rien lui-même : il ne saurait pas sous quelle clé,
|
|
2408
|
+
* ni s'il a le droit.
|
|
2409
|
+
*/
|
|
2410
|
+
readonly collapsed: _angular_core.ModelSignal<string[]>;
|
|
2375
2411
|
readonly mode: _angular_core.InputSignal<CadNavDrawerMode>;
|
|
2376
2412
|
/** Seuil de bascule permanent → tiroir, en mode `auto`. */
|
|
2377
2413
|
readonly breakpoint: _angular_core.InputSignal<CadBreakpoint>;
|
|
@@ -2398,6 +2434,15 @@ declare class CadNavDrawerComponent {
|
|
|
2398
2434
|
readonly effective: _angular_core.Signal<"permanent" | "temporary" | "rail">;
|
|
2399
2435
|
readonly temporary: _angular_core.Signal<boolean>;
|
|
2400
2436
|
readonly rail: _angular_core.Signal<boolean>;
|
|
2437
|
+
/** Clé d'un intertitre. `value` d'abord : un libellé se renomme, une clé non. */
|
|
2438
|
+
private cle;
|
|
2439
|
+
/**
|
|
2440
|
+
* Les lignes à rendre : les intertitres toujours, les entrées seulement si leur intertitre
|
|
2441
|
+
* n'est pas replié. Une entrée qui précède tout intertitre n'appartient à aucun groupe et
|
|
2442
|
+
* ne se replie donc jamais — sans quoi elle serait masquée sans bouton pour la rouvrir.
|
|
2443
|
+
*/
|
|
2444
|
+
readonly rows: _angular_core.Signal<CadNavDrawerRow[]>;
|
|
2445
|
+
toggleSection(r: CadNavDrawerRow): void;
|
|
2401
2446
|
private readonly wasOpen;
|
|
2402
2447
|
constructor();
|
|
2403
2448
|
isActive(it: CadNavDrawerItem): boolean;
|
|
@@ -2408,7 +2453,7 @@ declare class CadNavDrawerComponent {
|
|
|
2408
2453
|
onEscape(): void;
|
|
2409
2454
|
pick(it: CadNavDrawerItem, ev: Event): void;
|
|
2410
2455
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadNavDrawerComponent, never>;
|
|
2411
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadNavDrawerComponent, "cad-nav-drawer", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "breakpoint": { "alias": "breakpoint"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "closeOnNavigate": { "alias": "closeOnNavigate"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "dismissableScrim": { "alias": "dismissableScrim"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "value": "valueChange"; "opened": "opened"; "closed": "closed"; "itemClick": "itemClick"; "changed": "changed"; }, ["headerSlot", "footerSlot"], ["[cadNavDrawerHeader]", "[cadNavDrawerFooter]"], true, never>;
|
|
2456
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadNavDrawerComponent, "cad-nav-drawer", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "breakpoint": { "alias": "breakpoint"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "closeOnNavigate": { "alias": "closeOnNavigate"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "dismissableScrim": { "alias": "dismissableScrim"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "value": "valueChange"; "collapsed": "collapsedChange"; "opened": "opened"; "closed": "closed"; "itemClick": "itemClick"; "changed": "changed"; }, ["headerSlot", "footerSlot"], ["[cadNavDrawerHeader]", "[cadNavDrawerFooter]"], true, never>;
|
|
2412
2457
|
}
|
|
2413
2458
|
|
|
2414
2459
|
type CadSelectionMode = 'single' | 'multiple' | null;
|
|
@@ -3730,6 +3775,7 @@ declare class CadDialogContainerComponent {
|
|
|
3730
3775
|
private static readonly DRAWER_SIZES;
|
|
3731
3776
|
protected readonly width: _angular_core.Signal<string>;
|
|
3732
3777
|
protected readonly height: _angular_core.Signal<string | null>;
|
|
3778
|
+
/** Le plafond à 92% laisse respirer un dialogue centré ; en plein écran mobile il n'a plus lieu d'être. */
|
|
3733
3779
|
protected readonly maxWidth: _angular_core.Signal<string>;
|
|
3734
3780
|
private readonly drag;
|
|
3735
3781
|
protected readonly dragTransform: _angular_core.Signal<string | null>;
|
|
@@ -4858,6 +4904,44 @@ declare const CAD_SHELL: InjectionToken<CadShellApi>;
|
|
|
4858
4904
|
* <cad-bottom-nav cadShellBottom [items]="dest" [(value)]="page"/>
|
|
4859
4905
|
* </cad-app-shell>
|
|
4860
4906
|
* ```
|
|
4907
|
+
*
|
|
4908
|
+
* ⚠️ N'ENVELOPPEZ JAMAIS UN EMPLACEMENT DANS UN `@if` (ni `@for`, ni `<ng-template>`).
|
|
4909
|
+
*
|
|
4910
|
+
* La projection de contenu est STATIQUE : Angular apparie les nœuds aux sélecteurs de
|
|
4911
|
+
* `ng-content` sur la structure déclarée. Un `<header cadShellBar>` placé dans un bloc de
|
|
4912
|
+
* flux de contrôle n'est jamais apparié — il tombe dans l'emplacement PAR DÉFAUT, donc dans
|
|
4913
|
+
* la zone de CONTENU. Rien ne le signale : ça compile, ça s'affiche, et la barre se met à
|
|
4914
|
+
* défiler avec le contenu — exactement le défaut que cette coquille existe pour empêcher.
|
|
4915
|
+
* Constaté au navigateur le 22/08/2026 sur le showcase (`.cad-shell__bar` mesurait 0×0).
|
|
4916
|
+
*
|
|
4917
|
+
* ```html
|
|
4918
|
+
* <!-- FAUX : la barre atterrit dans le contenu -->
|
|
4919
|
+
* @if (connecte()) { <header cadShellBar>…</header> }
|
|
4920
|
+
*
|
|
4921
|
+
* <!-- JUSTE : l'emplacement est toujours rendu, c'est son CONTENU qui varie -->
|
|
4922
|
+
* <header cadShellBar [class.est-masque]="!connecte()">…</header>
|
|
4923
|
+
* ```
|
|
4924
|
+
*
|
|
4925
|
+
* Une rangée ou une colonne `auto` dont l'unique enfant est en `display: none` se replie à
|
|
4926
|
+
* zéro : masquer ainsi ne laisse aucune trace dans la mise en page.
|
|
4927
|
+
*
|
|
4928
|
+
* ⚠️ ZONES SÛRES — DEUX CONDITIONS, ET LA PREMIÈRE EST DANS `index.html`.
|
|
4929
|
+
*
|
|
4930
|
+
* 1. **`<meta name="viewport" content="…, viewport-fit=cover">`**. Sans lui, iOS encadre la
|
|
4931
|
+
* page : elle ne s'étend jamais sous l'encoche, la bande du haut est peinte par le SYSTÈME,
|
|
4932
|
+
* et **tous les `env(safe-area-inset-*)` valent 0**. Toute la mécanique de zone sûre de la
|
|
4933
|
+
* bibliothèque — celle de `cad-bottom-nav`, celle du tiroir en mode temporaire — est alors
|
|
4934
|
+
* inerte sans que rien ne le signale.
|
|
4935
|
+
* 2. **La barre peint sa propre zone sûre haute** : `padding-top: env(safe-area-inset-top)`
|
|
4936
|
+
* sur l'élément projeté, PAS sur la coquille. Le rembourrage est intérieur au fond, donc la
|
|
4937
|
+
* couleur de la barre monte jusqu'au bord de l'écran. Le poser côté coquille laisserait la
|
|
4938
|
+
* bande sous l'encoche au fond de la COQUILLE : la cassure resterait, d'une autre couleur.
|
|
4939
|
+
* Avec `box-sizing: border-box`, penser au `min-height: calc(52px + env(safe-area-inset-top))`
|
|
4940
|
+
* — sinon l'encoche mange la hauteur du contenu.
|
|
4941
|
+
*
|
|
4942
|
+
* En application autonome (ajoutée à l'écran d'accueil), la page ne passe pas sous la bande
|
|
4943
|
+
* d'état : `viewport-fit=cover` n'y suffit pas et c'est `<meta name="theme-color">`, tenu à
|
|
4944
|
+
* jour avec le thème, qui donne la continuité.
|
|
4861
4945
|
*/
|
|
4862
4946
|
declare class CadAppShellComponent implements CadShellApi {
|
|
4863
4947
|
private readonly bp;
|
|
@@ -6667,6 +6751,17 @@ interface CadPlanTask {
|
|
|
6667
6751
|
duration?: string | null;
|
|
6668
6752
|
/** Jalon : instant sans durée. */
|
|
6669
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;
|
|
6670
6765
|
/** Colonne du taskboard. */
|
|
6671
6766
|
bucket?: string | null;
|
|
6672
6767
|
/** Rang FRACTIONNAIRE dans sa colonne / sa fratrie. Voir `cadRankBetween()`. */
|
|
@@ -6724,6 +6819,8 @@ interface CadPlannedTask {
|
|
|
6724
6819
|
start: Date | null;
|
|
6725
6820
|
end: Date | null;
|
|
6726
6821
|
milestone: boolean;
|
|
6822
|
+
/** Journée entière : rendu dans le bandeau, jamais dans la grille horaire. */
|
|
6823
|
+
allDay: boolean;
|
|
6727
6824
|
bucket: string | null;
|
|
6728
6825
|
rank: string;
|
|
6729
6826
|
assignments: Required<CadPlanAssignment>[];
|
|
@@ -7037,6 +7134,244 @@ declare function cadFindLinkCycle(links: readonly CadPlannedLink[]): string[];
|
|
|
7037
7134
|
/** Tâches qu'aucune vue temporelle ne sait placer — la zone « non planifié », jamais le silence. */
|
|
7038
7135
|
declare const cadUnscheduled: (plan: CadNormalizedPlan) => CadPlannedTask[];
|
|
7039
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
|
+
|
|
7040
7375
|
/** Contenu d'une carte : `<ng-template cadTaskCard let-task let-bucket="bucket">`. */
|
|
7041
7376
|
declare class CadTaskCardDirective {
|
|
7042
7377
|
readonly tpl: TemplateRef<any>;
|
|
@@ -7174,5 +7509,227 @@ declare class CadTaskboardComponent {
|
|
|
7174
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>;
|
|
7175
7510
|
}
|
|
7176
7511
|
|
|
7177
|
-
|
|
7178
|
-
|
|
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
|
+
export { 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, addDays, addMonths, addYears, 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, compareDay, daysInMonth, endOfMonth, ensureMaplibreCss, formatDate, isBetweenDay, isSameDay, isSameMonth, isValidDate, isoOf, isoWeek, loadChartJs, loadMaplibre, monthNames, pad2, parseIso, parseWithFormat, provideCadIcons, startOfDay, startOfMonth, toDate, weekdayNames };
|
|
7735
|
+
export type { 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, MLExpression, MaplibreModule };
|