@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.
@@ -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
- 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_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, 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, cadDefaultMatchMode, cadDistance, cadDownloadCsv, cadDurationToMinutes, 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, cadMoveColumn, cadMoveItems, cadNormalize, cadNormalizeOptions, cadNormalizePlan, cadNumberExpr, cadPadBounds, cadParseColor, cadParseDuration, cadParseResponsive, cadPlanHeader, cadPlanTicks, cadPropsTable, cadRankBetween, cadRankFirst, cadRankLast, cadRankSequence, cadResolve, cadResolveResponsive, cadResponsive, cadRgbToHsl, cadRgbToHsv, cadRingArea, cadRowKey, cadRowPredicate, cadSameValue, cadScaleNext, cadScaleStart, cadSortData, cadStartResize, cadStyleToExpressions, cadUnmask, cadUnscheduled, cadValidateGeoJSON, cadValueForOperator, cadWriteField, compareDay, daysInMonth, endOfMonth, ensureMaplibreCss, formatDate, isBetweenDay, isSameDay, isSameMonth, isValidDate, isoOf, isoWeek, loadChartJs, loadMaplibre, monthNames, pad2, parseIso, parseWithFormat, provideCadIcons, startOfDay, startOfMonth, toDate, weekdayNames };
7178
- export type { CadAggregate, CadAggregateFn, CadAggregates, CadBadgeSeverity, CadBasemap, CadBasemapKind, CadBottomNavItem, CadBounds, CadBreadcrumbItem, CadBreakpoint, 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, CadEditCompleteEvent, CadEditEvent, CadEditMode, CadEditorContext, 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, CadNavDrawerItem, CadNavDrawerMode, CadNodeEvent, CadNormalizePlanOptions, CadNormalizedPlan, CadNumberSpec, 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, CadRgba, CadRowEditEvent, CadRowEditState, CadRowEvent, CadRowReorderEvent, CadSegmentOption, CadSelectItemContext, CadSelectionMode, CadSelectionPropagation, CadSeverity, CadSheetConfig, CadSheetHeight, CadShellApi, CadSize, CadSliderMark, CadSliderSeverity, CadSliderValue, 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 };
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 };