@cadriciel/ui 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -694,21 +694,56 @@ declare class CadCheckboxComponent extends CadValueAccessor<boolean> {
694
694
  * <cad-radio value="session" label="Session" [disabled]="true" />
695
695
  * </cad-radio-group>
696
696
  * CVA<T> sur le GROUPE. Clavier : ←/→/↑/↓ déplacent la sélection (pattern WAI-ARIA radiogroup).
697
- * @atelier icone=circle-dot largeur=2
697
+ * @atelier icone=circle-dot largeur=2 conteneur=direct hauteur=4
698
698
  */
699
699
  declare class CadRadioGroupComponent<T = unknown> extends CadValueAccessor<T> {
700
700
  readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
701
701
  readonly ariaLabel: _angular_core.InputSignal<string>;
702
702
  readonly name: _angular_core.InputSignal<string>;
703
703
  readonly changed: _angular_core.OutputEmitterRef<T>;
704
- readonly radios: _angular_core.Signal<readonly any[]>;
704
+ private readonly radiosProjetes;
705
+ /** Radios POSÉS hors gabarit, annoncés par `enregistrerEnfants`. */
706
+ private readonly radiosPoses;
707
+ readonly radios: _angular_core.Signal<any[]>;
708
+ /** Reçoit la LISTE COMPLÈTE des radios posés, et se RATTACHE à chacun. */
709
+ enregistrerEnfants(instances: unknown[]): void;
705
710
  select(v: T): void;
706
711
  protected onKey(e: KeyboardEvent): void;
707
712
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadRadioGroupComponent<any>, never>;
708
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadRadioGroupComponent<any>, "cad-radio-group", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, ["radios"], ["*"], true, never>;
713
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadRadioGroupComponent<any>, "cad-radio-group", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, ["radiosProjetes"], ["*"], true, never>;
709
714
  }
715
+ /**
716
+ * Un choix du groupe : `<cad-radio [value]="'a'" label="Option A">`.
717
+ * @atelier icone=circle-dot conteneur=flux dans=cad-radio-group pose-label=Option
718
+ */
710
719
  declare class CadRadioComponent<T = unknown> {
711
- readonly group: CadRadioGroupComponent<T>;
720
+ /**
721
+ * Le groupe d'accueil — INJECTÉ dans un gabarit, POUSSÉ par l'hôte à la pose.
722
+ *
723
+ * ⚠️ OPTIONNEL depuis le 27/08, même correctif que `cad-accordion-panel` : l'injection
724
+ * obligatoire levait `NG0201` dès qu'on créait le bouton à la main, et `gen-catalog`
725
+ * classait `cad-radio` « contextuel » — il n'était pas posable. `cad-tab`, la pièce
726
+ * jumelle des onglets, n'injecte rien : elle est PASSIVE et son hôte la pilote. La
727
+ * divergence était d'écriture, pas de nature (SZU 27/08).
728
+ */
729
+ private readonly groupInjecte;
730
+ private readonly groupPose;
731
+ readonly group: _angular_core.Signal<CadRadioGroupComponent<T> | null>;
732
+ /** Le groupe s'annonce au bouton qu'il accueille. Cf. `atelier/atelier.pieces.ts`. */
733
+ rattacher(g: CadRadioGroupComponent<T>): void;
734
+ /** Sélectionne, si un groupe existe. Un radio solitaire ne prétend pas gérer un choix. */
735
+ protected choisir(): void;
736
+ /**
737
+ * La valeur que ce choix représente.
738
+ *
739
+ * DÉFAUT UNIQUE plutôt que `input.required` (27/08) — même précédent que
740
+ * `cad-accordion-panel`, qui se donne `cadId('cad-panel')`. Une entrée requise LÈVE
741
+ * dès qu'on instancie le composant sans la fournir : posé dans l'atelier, le radio
742
+ * mourait à la construction et le poseur l'écartait EN SILENCE (groupe vide, aucune
743
+ * erreur visible). Un défaut unique par instance rend un radio posé immédiatement
744
+ * cohérent — deux radios ne se retrouvent jamais cochés ensemble — et n'enlève rien à
745
+ * l'usage écrit, où l'on passe toujours une valeur.
746
+ */
712
747
  readonly value: _angular_core.InputSignal<T>;
713
748
  readonly label: _angular_core.InputSignal<string>;
714
749
  readonly hint: _angular_core.InputSignal<string>;
@@ -719,7 +754,7 @@ declare class CadRadioComponent<T = unknown> {
719
754
  protected readonly tabIndex: _angular_core.Signal<0 | -1>;
720
755
  focus(): void;
721
756
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadRadioComponent<any>, never>;
722
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadRadioComponent<any>, "cad-radio", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
757
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadRadioComponent<any>, "cad-radio", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
723
758
  }
724
759
 
725
760
  type CadSegmentOption = {
@@ -1866,6 +1901,7 @@ declare class CadTabContentDirective {
1866
1901
  * contenu (ou <ng-template cadTabContent> pour un rendu vraiment paresseux)
1867
1902
  * <ng-template cadTabLabel>label custom</ng-template>
1868
1903
  * </cad-tab>
1904
+ * @atelier icone=panel-top conteneur=flux dans=cad-tabs pose-label=Onglet
1869
1905
  */
1870
1906
  declare class CadTabComponent {
1871
1907
  readonly value: _angular_core.InputSignal<unknown>;
@@ -1887,7 +1923,7 @@ declare class CadTabComponent {
1887
1923
  /**
1888
1924
  * <cad-tabs [(value)]="tab" [(activeIndex)]="i" variant="line|pill|enclosed" size="sm|md" [stretch] [scrollable] [lazy]="true" [keepAlive]="true" (changed) (tabChange)>
1889
1925
  * `value` prime sur `activeIndex` (les deux sont two-way et synchronisés). Clavier ←/→/Home/End sur la liste.
1890
- * @atelier icone=folder
1926
+ * @atelier icone=folder conteneur=direct largeur=12 hauteur=6
1891
1927
  */
1892
1928
  declare class CadTabsComponent {
1893
1929
  readonly value: _angular_core.ModelSignal<unknown>;
@@ -1911,7 +1947,37 @@ declare class CadTabsComponent {
1911
1947
  value: unknown;
1912
1948
  tab: CadTabComponent;
1913
1949
  }>;
1914
- readonly tabs: _angular_core.Signal<readonly CadTabComponent[]>;
1950
+ /** Onglets déclarés dans un GABARIT — la voie normale, celle de tous les usages écrits. */
1951
+ private readonly tabsProjetes;
1952
+ /**
1953
+ * Onglets POSÉS : créés hors gabarit par `createComponent`, et annoncés par
1954
+ * `enregistrerEnfants` — le contrat d'accueil décrit dans `atelier/atelier.pieces.ts`.
1955
+ *
1956
+ * ⚠️ CE N'EST PAS UN DOUBLON DE LA REQUÊTE, C'EST LA SEULE VOIE POSSIBLE POUR EUX.
1957
+ * Mesuré le 27/08 : un `cad-tab` créé impérativement et passé en `projectableNodes`
1958
+ * arrive bien dans le DOM, mais `contentChildren` NE LE VOIT PAS — une requête de
1959
+ * contenu se résout sur la structure déclarée d'un gabarit, et un composant instancié
1960
+ * à la main vit dans une autre vue. Résultat avant correction : `onglets=0`, une barre
1961
+ * vide et aucun panneau, sans la moindre erreur. C'est ce qui rendait `cad-tabs`
1962
+ * inutilisable dans l'atelier et dans les pages visuelles de frontless.
1963
+ *
1964
+ * Même trappe que `cad-button-group`, qui la porte depuis le 24/08 pour la même
1965
+ * raison (il était SOURD aux clics de ses boutons posés) : les deux sources
1966
+ * FUSIONNENT, la projection reste prioritaire dans l'ordre, et rien ne change pour
1967
+ * qui écrit du gabarit.
1968
+ */
1969
+ private readonly tabsPoses;
1970
+ /** Tous les onglets : projetés d'abord, posés ensuite. L'ordre fait la barre. */
1971
+ readonly tabs: _angular_core.Signal<CadTabComponent[]>;
1972
+ /**
1973
+ * Reçoit les instances des onglets posés — la LISTE COMPLÈTE, pas un ajout.
1974
+ *
1975
+ * Le poseur reconstruit ses enfants d'un bloc à chaque changement de structure : lui
1976
+ * faire tenir un différentiel inviterait le fantôme (un onglet détruit qui reste dans
1977
+ * la barre). L'hôte filtre lui-même ce qui n'est pas un onglet, pour qu'un appelant
1978
+ * n'ait pas à connaître nos types.
1979
+ */
1980
+ enregistrerEnfants(instances: unknown[]): void;
1915
1981
  private readonly list;
1916
1982
  private readonly btns;
1917
1983
  protected readonly overflow: _angular_core.WritableSignal<boolean>;
@@ -1924,7 +1990,7 @@ declare class CadTabsComponent {
1924
1990
  protected scroll(dir: number): void;
1925
1991
  protected checkOverflow(): void;
1926
1992
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadTabsComponent, never>;
1927
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadTabsComponent, "cad-tabs", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "stretch": { "alias": "stretch"; "required": false; "isSignal": true; }; "scrollable": { "alias": "scrollable"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "keepAlive": { "alias": "keepAlive"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "activeIndex": "activeIndexChange"; "changed": "changed"; "tabChange": "tabChange"; }, ["tabs"], ["[cadTabsEnd]"], true, never>;
1993
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadTabsComponent, "cad-tabs", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "stretch": { "alias": "stretch"; "required": false; "isSignal": true; }; "scrollable": { "alias": "scrollable"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "keepAlive": { "alias": "keepAlive"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "activeIndex": "activeIndexChange"; "changed": "changed"; "tabChange": "tabChange"; }, ["tabsProjetes"], ["[cadTabsEnd]"], true, never>;
1928
1994
  }
1929
1995
 
1930
1996
  type CadStepState = 'done' | 'current' | 'error' | 'todo';
@@ -1998,9 +2064,29 @@ declare class CadPanelContentDirective {
1998
2064
  * </cad-accordion-panel>
1999
2065
  * </cad-accordion>
2000
2066
  * `value` = valeur ouverte (string) ou tableau si `multiple`. Clavier : Entrée/Espace, ↑/↓/Home/End entre en-têtes.
2067
+ * @atelier icone=panel-top conteneur=flux dans=cad-accordion pose-header=Section
2001
2068
  */
2002
2069
  declare class CadAccordionPanelComponent {
2003
- readonly acc: CadAccordionComponent;
2070
+ /**
2071
+ * L'accordéon d'accueil — INJECTÉ dans un gabarit, POUSSÉ par l'hôte quand la pièce
2072
+ * est posée hors gabarit.
2073
+ *
2074
+ * ⚠️ L'INJECTION EST OPTIONNELLE, ET C'EST LE CŒUR DU CORRECTIF (SZU 27/08 : « pourquoi
2075
+ * cad-accordion serait différent d'un cad-tabs ? »). Elle était obligatoire, donc :
2076
+ * `NG0201` dès qu'on créait le panneau à la main, et `gen-catalog` le classait
2077
+ * « contextuel » — il n'était même pas POSABLE. Or `cad-tab`, lui, n'injecte rien :
2078
+ * c'est une pièce PASSIVE que son hôte pilote. La différence n'était pas une contrainte
2079
+ * du composant, c'était une divergence d'écriture entre deux familles jumelles.
2080
+ *
2081
+ * Renversement : la pièce ne va plus CHERCHER son hôte, c'est l'hôte qui s'annonce en
2082
+ * l'accueillant (`rattacher`). Un panneau posé seul reste sensé — il gère alors son
2083
+ * propre `expanded` au lieu de lever.
2084
+ */
2085
+ private readonly accInjecte;
2086
+ private readonly accPose;
2087
+ readonly acc: _angular_core.Signal<CadAccordionComponent | null>;
2088
+ /** L'accordéon s'annonce à la pièce qu'il accueille. Cf. `atelier/atelier.pieces.ts`. */
2089
+ rattacher(acc: CadAccordionComponent): void;
2004
2090
  readonly value: _angular_core.InputSignal<string>;
2005
2091
  readonly header: _angular_core.InputSignal<string>;
2006
2092
  readonly icon: _angular_core.InputSignal<string>;
@@ -2013,6 +2099,7 @@ declare class CadAccordionPanelComponent {
2013
2099
  readonly contentTpl: _angular_core.Signal<CadPanelContentDirective | undefined>;
2014
2100
  readonly id: string;
2015
2101
  readonly rendered: _angular_core.WritableSignal<boolean>;
2102
+ /** Sans hôte, le panneau fait autorité sur lui-même : posé seul, il reste utilisable. */
2016
2103
  readonly isOpen: _angular_core.Signal<boolean>;
2017
2104
  constructor();
2018
2105
  toggle(): void;
@@ -2020,7 +2107,7 @@ declare class CadAccordionPanelComponent {
2020
2107
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadAccordionPanelComponent, never>;
2021
2108
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadAccordionPanelComponent, "cad-accordion-panel", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "opened": "opened"; "closed": "closed"; }, ["headerTpl", "contentTpl"], ["[cadPanelExtra]", "*"], true, never>;
2022
2109
  }
2023
- /** @atelier icone=chevron-down */
2110
+ /** @atelier icone=chevron-down conteneur=direct largeur=12 hauteur=8 */
2024
2111
  declare class CadAccordionComponent {
2025
2112
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
2026
2113
  /** Ouvert(s) : string (single) ou string[] (multiple). */
@@ -2029,13 +2116,21 @@ declare class CadAccordionComponent {
2029
2116
  /** Sans bordure extérieure. */
2030
2117
  readonly flush: _angular_core.InputSignalWithTransform<boolean, unknown>;
2031
2118
  readonly changed: _angular_core.OutputEmitterRef<string | string[] | null>;
2032
- readonly panels: _angular_core.Signal<readonly CadAccordionPanelComponent[]>;
2119
+ private readonly panelsProjetes;
2120
+ /** Panneaux POSÉS hors gabarit, annoncés par `enregistrerEnfants`. */
2121
+ private readonly panelsPoses;
2122
+ readonly panels: _angular_core.Signal<CadAccordionPanelComponent[]>;
2123
+ /**
2124
+ * Reçoit la LISTE COMPLÈTE des panneaux posés, et se RATTACHE à chacun : la pièce
2125
+ * n'ayant plus d'injection obligatoire, c'est ce geste qui rétablit le lien.
2126
+ */
2127
+ enregistrerEnfants(instances: unknown[]): void;
2033
2128
  private readonly openSet;
2034
2129
  isOpen(v: string): boolean;
2035
2130
  setOpen(v: string, open: boolean, panel?: CadAccordionPanelComponent): void;
2036
2131
  onKey(e: KeyboardEvent, from: CadAccordionPanelComponent): void;
2037
2132
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadAccordionComponent, never>;
2038
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadAccordionComponent, "cad-accordion", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "expandIcon": { "alias": "expandIcon"; "required": false; "isSignal": true; }; "flush": { "alias": "flush"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, ["panels"], ["*"], true, never>;
2133
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadAccordionComponent, "cad-accordion", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "expandIcon": { "alias": "expandIcon"; "required": false; "isSignal": true; }; "flush": { "alias": "flush"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, ["panelsProjetes"], ["*"], true, never>;
2039
2134
  }
2040
2135
 
2041
2136
  interface CadBreadcrumbItem {
@@ -4318,6 +4413,12 @@ declare class CadMessageComponent {
4318
4413
  * @atelier ajustement=naturel icone=user-round largeur=1 hauteur=1 pose-text=AB
4319
4414
  */
4320
4415
  declare class CadAvatarComponent {
4416
+ /**
4417
+ * Son élément, exposé comme `cad-button` le fait déjà : le groupe marque le
4418
+ * débordement (`.is-overflow`) sur les éléments, et une requête de contenu ne les
4419
+ * rapporte pas pour un avatar POSÉ hors gabarit.
4420
+ */
4421
+ readonly el: ElementRef<HTMLElement>;
4321
4422
  readonly src: _angular_core.InputSignal<string | null | undefined>;
4322
4423
  readonly text: _angular_core.InputSignal<string>;
4323
4424
  readonly icon: _angular_core.InputSignal<string>;
@@ -4563,19 +4664,30 @@ declare class CadPanelComponent {
4563
4664
  /**
4564
4665
  * <cad-avatar-group [max]="3" size="md"><cad-avatar text="SZ"/><cad-avatar text="PA"/>…</cad-avatar-group>
4565
4666
  * Avatars empilés (chevauchement, bordure surface) ; au-delà de `max` un avatar « +N » (title = noms masqués).
4566
- * @atelier ajustement=naturel icone=users largeur=2 hauteur=1
4667
+ * @atelier ajustement=naturel icone=users largeur=2 hauteur=1 conteneur=direct accepte=cad-avatar
4567
4668
  */
4568
4669
  declare class CadAvatarGroupComponent {
4569
4670
  readonly max: _angular_core.InputSignalWithTransform<number | null, unknown>;
4570
4671
  readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
4571
4672
  readonly moreColor: _angular_core.InputSignal<string | null>;
4673
+ private readonly avatarsProjetes;
4674
+ /**
4675
+ * Avatars POSÉS hors gabarit, annoncés par `enregistrerEnfants`
4676
+ * (cf. `atelier/atelier.pieces.ts`).
4677
+ *
4678
+ * Le groupe RENDAIT correctement sans eux — le chevauchement et les bordures sont du
4679
+ * CSS sur les enfants directs. Seul `max` était inerte : le « +N » ne comptait rien et
4680
+ * rien ne passait en débordement. Une panne discrète, donc pire qu'une panne franche.
4681
+ */
4682
+ private readonly avatarsPoses;
4572
4683
  private readonly avatars;
4573
- private readonly avatarEls;
4684
+ /** Reçoit la LISTE COMPLÈTE des avatars posés. Le groupe filtre ce qui n'en est pas un. */
4685
+ enregistrerEnfants(instances: unknown[]): void;
4574
4686
  readonly hidden: _angular_core.Signal<number>;
4575
4687
  readonly hiddenTitle: _angular_core.Signal<string>;
4576
4688
  constructor();
4577
4689
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadAvatarGroupComponent, never>;
4578
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadAvatarGroupComponent, "cad-avatar-group", never, { "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "moreColor": { "alias": "moreColor"; "required": false; "isSignal": true; }; }, {}, ["avatars", "avatarEls"], ["*"], true, never>;
4690
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadAvatarGroupComponent, "cad-avatar-group", never, { "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "moreColor": { "alias": "moreColor"; "required": false; "isSignal": true; }; }, {}, ["avatarsProjetes"], ["*"], true, never>;
4579
4691
  }
4580
4692
 
4581
4693
  interface CadMeterValue {
@@ -4867,7 +4979,15 @@ declare class CadClusterComponent {
4867
4979
  * Grille responsive : `<cad-grid cols="1 sm:2 lg:4" gap="md">` (breakpoints FENÊTRE, mobile-first)
4868
4980
  * ou `<cad-grid min="220px">` (auto-fit : autant de colonnes que le CONTENEUR en accepte — préférer pour les composants).
4869
4981
  * Enfant : `<div cadCol="2">` / `cadCol="1 md:2"` = span, `cadCol="full"` = toute la largeur.
4870
- * @atelier icone=grid
4982
+ *
4983
+ * CONTENEUR D'ATELIER en régime `direct`, et non `flux` (27/08) : en flux, l'atelier
4984
+ * envelopperait les enfants dans SA propre grille 12 colonnes, la grille posée n'aurait
4985
+ * plus qu'un seul enfant et son `cols` ne servirait plus à rien — un conteneur qui a
4986
+ * l'air de marcher et ne fait rien. En direct, les enfants sont projetés nus et c'est
4987
+ * bien `cols` / `min` qui les place, ce qu'on vient chercher en posant une grille.
4988
+ * Aucune trappe d'accueil n'est nécessaire ici : `cad-grid` ne fait ni requête de
4989
+ * contenu ni injection depuis ses enfants, il ne les REGARDE pas, il les dispose.
4990
+ * @atelier icone=grid conteneur=direct largeur=12 hauteur=4
4871
4991
  */
4872
4992
  declare class CadGridComponent {
4873
4993
  readonly cols: _angular_core.InputSignal<string | number>;
@@ -4958,7 +5078,12 @@ declare class CadContainerComponent {
4958
5078
  }
4959
5079
  /**
4960
5080
  * Espace flexible (pousse ce qui suit) ou fixe : `<cad-spacer/>` · `<cad-spacer size="lg"/>`
4961
- * @atelier icone=move-horizontal
5081
+ *
5082
+ * `surface=aucune` : il occupe sa place et ne dessine RIEN. Posé dans une maquette, il
5083
+ * fait donc exactement son travail en restant invisible — indistinguable d'un composant
5084
+ * qui n'aurait pas été posé (SZU 27/08). L'atelier s'en sert pour le MATÉRIALISER le
5085
+ * temps de la conception ; le rendu, lui, n'en sait rien.
5086
+ * @atelier icone=move-horizontal surface=aucune
4962
5087
  */
4963
5088
  declare class CadSpacerComponent {
4964
5089
  readonly size: _angular_core.InputSignal<"" | CadGap>;
@@ -4967,7 +5092,10 @@ declare class CadSpacerComponent {
4967
5092
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadSpacerComponent, "cad-spacer", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4968
5093
  }
4969
5094
 
4970
- /** Panneau d'un splitter : `<cad-splitter-panel [size]="30" [minSize]="10">…</cad-splitter-panel>` (size en %). */
5095
+ /**
5096
+ * Panneau d'un splitter : `<cad-splitter-panel [size]="30" [minSize]="10">…</cad-splitter-panel>` (size en %).
5097
+ * @atelier icone=square conteneur=flux dans=cad-splitter
5098
+ */
4971
5099
  declare class CadSplitterPanelComponent {
4972
5100
  readonly size: _angular_core.InputSignalWithTransform<number | null, unknown>;
4973
5101
  readonly minSize: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -4979,7 +5107,7 @@ declare class CadSplitterPanelComponent {
4979
5107
  * <cad-splitter-panel>…</cad-splitter-panel><cad-splitter-panel>…</cad-splitter-panel>
4980
5108
  * </cad-splitter>
4981
5109
  * Gouttière glissable (pointer), double-clic = tailles initiales, clavier ←→/↑↓ (±2 %), `role=separator`, persistance localStorage via `stateKey`, imbriquable.
4982
- * @atelier icone=columns
5110
+ * @atelier icone=columns conteneur=direct largeur=12 hauteur=8
4983
5111
  */
4984
5112
  declare class CadSplitterComponent {
4985
5113
  private readonly host;
@@ -4990,7 +5118,22 @@ declare class CadSplitterComponent {
4990
5118
  readonly stateKey: _angular_core.InputSignal<string>;
4991
5119
  readonly resizeStart: _angular_core.OutputEmitterRef<number[]>;
4992
5120
  readonly resizeEnd: _angular_core.OutputEmitterRef<number[]>;
4993
- readonly panels: _angular_core.Signal<readonly CadSplitterPanelComponent[]>;
5121
+ /** Panneaux déclarés dans un GABARIT — la voie normale. */
5122
+ private readonly panelsProjetes;
5123
+ /**
5124
+ * Panneaux POSÉS, créés hors gabarit et annoncés par `enregistrerEnfants`
5125
+ * (cf. `atelier/atelier.pieces.ts`).
5126
+ *
5127
+ * Sans eux, `panels()` reste vide pour un splitter posé : aucune gouttière, aucune
5128
+ * taille calculée, `grid-template-columns` vide — mesuré à `gouttieres=0` le 27/08.
5129
+ * Les panneaux s'affichaient quand même (ils sont projetés), ce qui donnait un
5130
+ * splitter d'apparence correcte mais sans mise en page ni poignée.
5131
+ */
5132
+ private readonly panelsPoses;
5133
+ /** Tous les panneaux : projetés d'abord, posés ensuite — l'ordre fait les colonnes. */
5134
+ readonly panels: _angular_core.Signal<CadSplitterPanelComponent[]>;
5135
+ /** Reçoit la LISTE COMPLÈTE des panneaux posés. L'hôte filtre ce qui n'en est pas un. */
5136
+ enregistrerEnfants(instances: unknown[]): void;
4994
5137
  readonly sizes: _angular_core.WritableSignal<number[]>;
4995
5138
  readonly gutters: _angular_core.Signal<number[]>;
4996
5139
  readonly mins: _angular_core.Signal<number[]>;
@@ -5007,7 +5150,7 @@ declare class CadSplitterComponent {
5007
5150
  protected onDown(e: PointerEvent, g: number): void;
5008
5151
  protected onKey(e: KeyboardEvent, g: number): void;
5009
5152
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CadSplitterComponent, never>;
5010
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadSplitterComponent, "cad-splitter", never, { "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "panelSizes": { "alias": "panelSizes"; "required": false; "isSignal": true; }; "minSizes": { "alias": "minSizes"; "required": false; "isSignal": true; }; "gutterSize": { "alias": "gutterSize"; "required": false; "isSignal": true; }; "stateKey": { "alias": "stateKey"; "required": false; "isSignal": true; }; }, { "resizeStart": "resizeStart"; "resizeEnd": "resizeEnd"; }, ["panels"], ["*"], true, never>;
5153
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CadSplitterComponent, "cad-splitter", never, { "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "panelSizes": { "alias": "panelSizes"; "required": false; "isSignal": true; }; "minSizes": { "alias": "minSizes"; "required": false; "isSignal": true; }; "gutterSize": { "alias": "gutterSize"; "required": false; "isSignal": true; }; "stateKey": { "alias": "stateKey"; "required": false; "isSignal": true; }; }, { "resizeStart": "resizeStart"; "resizeEnd": "resizeEnd"; }, ["panelsProjetes"], ["*"], true, never>;
5011
5154
  }
5012
5155
 
5013
5156
  /**
@@ -5431,6 +5574,20 @@ declare class CadMapComponent {
5431
5574
  readonly allChildren: _angular_core.Signal<readonly CadMapChild[]>;
5432
5575
  registerChild(k: CadMapChild): void;
5433
5576
  unregisterChild(k: CadMapChild): void;
5577
+ /**
5578
+ * Contrat d'accueil des pièces POSÉES (cf. `atelier/atelier.pieces.ts`).
5579
+ *
5580
+ * ⚠️ CORRIGE UN MENSONGE LIVRÉ LE 24/08. `cad-map` était annoté conteneur et ses onze
5581
+ * pièces déclaraient `dans=cad-map`, mais AUCUNE couche posée ne s'est jamais
5582
+ * enregistrée : la carte n'exposait que `registerChild`, que les poseurs n'appellent
5583
+ * pas, et `cad-map-layer` s'injecte la carte en `optional` — donc `null` sans chaîne
5584
+ * d'injecteurs, donc pas d'auto-enregistrement, et pas la moindre erreur pour le dire.
5585
+ * Deux vocabulaires pour un besoin : c'est la divergence qu'on paie ici.
5586
+ *
5587
+ * Liste COMPLÈTE à chaque appel : le poseur reconstruit ses enfants d'un bloc, et un
5588
+ * contrat incrémental laisserait des couches fantômes sur la carte.
5589
+ */
5590
+ enregistrerEnfants(instances: unknown[]): void;
5434
5591
  /** Événements du chrome intégré (dessin, import). */
5435
5592
  readonly drawChange: _angular_core.OutputEmitterRef<object>;
5436
5593
  readonly layerImport: _angular_core.OutputEmitterRef<{
@@ -8413,6 +8570,22 @@ declare const ATELIER_BORNES: {
8413
8570
  readonly propsMax: 30;
8414
8571
  /** Enfants directs d'un conteneur. Le plafond GLOBAL reste `itemsMax`, enfants compris. */
8415
8572
  readonly enfantsMax: 30;
8573
+ /**
8574
+ * Profondeur d'imbrication, en niveaux SOUS le plan.
8575
+ *
8576
+ * Un item du plan est à la profondeur 0, son enfant à 1, et ainsi de suite jusqu'à
8577
+ * `profondeurMax` INCLUS — soit cinq étages en tout. Ce n'est pas une préférence
8578
+ * d'ergonomie : `atelierNormaliser` et l'assainisseur backend descendent une
8579
+ * structure VENUE DE L'EXTÉRIEUR (lien partagé, fichier collé), et une récursion
8580
+ * non bornée sur du JSON hostile fait sauter la pile. Le plafond de COMPTE
8581
+ * (`itemsMax`) ne borne pas la profondeur : deux cents items peuvent former une
8582
+ * chaîne de deux cents étages.
8583
+ *
8584
+ * Cinq étages couvrent le besoin réel mesuré le 27/08 — le pire cas de la
8585
+ * bibliothèque est `cad-splitter > cad-splitter-panel > cad-tabs > cad-tab >
8586
+ * contenu`, soit une profondeur de 4 pour le contenu.
8587
+ */
8588
+ readonly profondeurMax: 4;
8416
8589
  };
8417
8590
  /** Un composant posé sur le plan. */
8418
8591
  interface AtelierItem {
@@ -8446,10 +8619,16 @@ interface AtelierItem {
8446
8619
  * conteneur) — quatre tags à `w=3` tiennent côte à côte. `x`, `y` et `h` restent
8447
8620
  * normalisés (0/0/1) : pas de placement absolu à l'intérieur, c'est ce qui évite le
8448
8621
  * glisser inter-grilles, là où les outils de maquette meurent.
8449
- * · UN SEUL niveau en v1 : un enfant n'a jamais d'enfants (l'assainisseur écarte le
8450
- * surplus, la pose le refuse). Élargir = décision, pas dérive.
8451
- * · ⚠️ Frontless ne REND pas encore ce champ (grid.ts à enseigner — noté au Task
8452
- * Board) : une maquette imbriquée exportée y montre le conteneur sans ses enfants.
8622
+ * · IMBRICATION LIBRE jusqu'à `profondeurMax` (27/08, arbitrage SZU) : un enfant est
8623
+ * un item comme un autre, donc un conteneur peut en contenir un. Le plafond d'un
8624
+ * SEUL niveau, tenu du 24/08 au 27/08, rendait indéfendables les familles à pièce
8625
+ * typée `cad-tabs > cad-tab > contenu` réclame deux niveaux, et un onglet qu'on
8626
+ * ne peut pas remplir est pire qu'un onglet absent. Au-delà du plafond, la pose
8627
+ * refuse VISIBLEMENT et l'assainisseur écarte le surplus : jamais de troncature
8628
+ * muette.
8629
+ * · Le régime (`flux` ou `direct`) est celui du PARENT DIRECT, lu de son annotation
8630
+ * `@atelier conteneur=` — pas celui de la racine. Un `cad-tab` en flux dans un
8631
+ * `cad-tabs` en direct est la forme normale, pas un cas limite.
8453
8632
  */
8454
8633
  children?: AtelierItem[];
8455
8634
  }
@@ -8460,10 +8639,81 @@ interface AtelierLayout {
8460
8639
  /** Un plan vide, jamais `null` : un canevas absent et un canevas vide se traitent pareil. */
8461
8640
  declare const atelierLayoutVide: () => AtelierLayout;
8462
8641
 
8642
+ /**
8643
+ * Le contrat d'accueil entre un HÔTE de la bibliothèque et les pièces qu'on lui POSE.
8644
+ *
8645
+ * ── POURQUOI CE FICHIER EXISTE ──────────────────────────────────────────────────
8646
+ *
8647
+ * L'atelier du studio et le rendu frontless du shell instancient les composants
8648
+ * IMPÉRATIVEMENT (`createComponent` + `projectableNodes`) : c'est ce qui permet de poser
8649
+ * le VRAI composant, vivant, plutôt qu'une image de lui. Mais deux mécanismes d'Angular
8650
+ * ne traversent PAS cette frontière, et c'est mesuré, pas supposé (27/08) :
8651
+ *
8652
+ * ① `contentChildren()` — une requête de contenu se résout sur la structure DÉCLARÉE
8653
+ * d'un gabarit. Un composant instancié à la main vit dans une autre vue : il arrive
8654
+ * bien dans le DOM, la requête ne le voit jamais. `cad-tabs` rendait `onglets=0`,
8655
+ * `cad-splitter` `gouttieres=0` — une barre vide, aucune erreur.
8656
+ * ② `inject(Hôte)` depuis la pièce — sans chaîne d'injecteurs de nœud, la recherche
8657
+ * remonte à l'injecteur d'environnement et échoue : `NG0201` pour
8658
+ * `cad-accordion-panel` et `cad-radio` (que `gen-catalog` classe d'ailleurs en
8659
+ * « contextuels », donc non posables), ou `null` silencieux quand l'injection est
8660
+ * `optional`.
8661
+ *
8662
+ * `<ng-content>` est donc NÉCESSAIRE mais PAS SUFFISANT pour qu'une famille soit un
8663
+ * conteneur d'atelier. Le raccourci « ça projette, donc ça marche » a coûté une matinée :
8664
+ * il faut aussi que l'hôte sache ACCUEILLIR une pièce qu'aucune requête ne lui rapportera.
8665
+ *
8666
+ * ── LE CONTRAT ──────────────────────────────────────────────────────────────────
8667
+ *
8668
+ * Il n'est pas neuf : `cad-button-group` le porte depuis le 24/08, posé le jour où l'on
8669
+ * a constaté qu'un groupe était SOURD aux clics de ses boutons posés. Ce fichier ne
8670
+ * l'invente pas, il l'ÉCRIT — jusqu'ici il vivait duck-typé dans le seul poseur du
8671
+ * studio, invisible depuis la bibliothèque, ce qui a permis à `cad-map` de partir avec
8672
+ * un nom à lui (`registerChild`) que personne n'appelle. Deux vocabulaires pour un
8673
+ * besoin, c'est une famille cassée en silence.
8674
+ */
8675
+ /**
8676
+ * Un hôte capable d'accueillir des pièces créées hors gabarit.
8677
+ *
8678
+ * Le passage est la LISTE COMPLÈTE, jamais un ajout : le poseur reconstruit ses enfants
8679
+ * d'un bloc à chaque changement de structure, et un contrat incrémental l'obligerait à
8680
+ * tenir un différentiel — c'est ainsi qu'on garde un fantôme après une suppression.
8681
+ */
8682
+ interface CadHoteAPieces {
8683
+ /** Reçoit toutes les instances posées. L'hôte filtre lui-même ce qui le concerne. */
8684
+ enregistrerEnfants(instances: unknown[]): void;
8685
+ }
8686
+ /**
8687
+ * L'hôte sait-il accueillir des pièces posées ?
8688
+ *
8689
+ * Reconnaissance par CAPACITÉ et non par liste de types : un poseur qui énumérerait les
8690
+ * familles concernées serait à mettre à jour à chaque nouvelle — et c'est toujours la
8691
+ * mise à jour qu'on oublie. Une famille qui gagne la trappe devient utilisable dans
8692
+ * l'atelier sans qu'aucun poseur ne bouge.
8693
+ */
8694
+ declare function estHoteAPieces(hote: unknown): hote is CadHoteAPieces;
8695
+
8463
8696
  /** Identifiant conforme à l'assainisseur backend : `/^[A-Za-z0-9_-]{1,24}$/`. */
8464
8697
  declare function atelierNouvelId(): string;
8465
8698
  /** Remet le compteur à zéro. Réservé aux tests, pour qu'ils ne dépendent pas de leur ordre. */
8466
8699
  declare function atelierReinitialiserIds(): void;
8700
+ /**
8701
+ * Empêche les prochains ids de VOLER l'identité d'items déjà présents.
8702
+ *
8703
+ * ⚠️ À APPELER À CHAQUE CHARGEMENT d'un plan venu d'ailleurs (base, fichier collé). Le
8704
+ * compteur est propre à la SESSION et repart de zéro : une maquette rechargée porte déjà
8705
+ * `i1`, `i2`… et la première pose redonnait `i1`. Deux items partagent alors une clé, et
8706
+ * tout ce qui vise par id se trompe de cible — `atelierTrouver` rend le premier homonyme,
8707
+ * `transformerArbre` édite les deux, et le `@for … track` d'Angular en FUSIONNE deux à
8708
+ * l'écran : un bloc disparaît du canevas sans qu'aucune erreur ne soit levée (NG0955 en
8709
+ * avertissement, c'est tout).
8710
+ *
8711
+ * C'EST LE MÊME DÉFAUT QUE `eb87d3f7` (26/08), qui l'avait corrigé dans le builder
8712
+ * frontless — « le compteur valait items.length et non le plus grand id existant ». Le
8713
+ * format a DEUX producteurs ; le correctif n'en avait couvert qu'un. Il vit désormais
8714
+ * dans la bibliothèque, là où les deux le partagent.
8715
+ */
8716
+ declare function atelierAdopterIds(layout: AtelierLayout): void;
8467
8717
  /**
8468
8718
  * La première position libre pour un bloc de `w × h`, en balayant de haut en bas puis de
8469
8719
  * gauche à droite.
@@ -8476,22 +8726,27 @@ declare function atelierPremierePlaceLibre(items: readonly AtelierItem[], w: num
8476
8726
  x: number;
8477
8727
  y: number;
8478
8728
  };
8479
- /** Nombre TOTAL de composants, enfants compris — c'est lui que borne `itemsMax`. */
8729
+ /** Nombre TOTAL de composants, à toutes les profondeurs — c'est lui que borne `itemsMax`. */
8480
8730
  declare function atelierCompter(layout: AtelierLayout): number;
8481
8731
  /**
8482
- * Retrouve un composant OÙ QU'IL VIVE au premier niveau ou dans un conteneur.
8483
- * `parentId` dit d'où il vient : c'est ce qui permet à l'inspecteur de remonter.
8732
+ * Retrouve un composant OÙ QU'IL VIVE, à n'importe quelle profondeur.
8733
+ *
8734
+ * `parentId` dit d'où il vient — c'est ce qui permet à l'inspecteur de remonter, d'un
8735
+ * cran à la fois. `profondeur` dit à quel étage il se trouve (0 = sur le plan) : la
8736
+ * pose s'en sert pour refuser AVANT d'agir, plutôt que de tronquer après.
8484
8737
  */
8485
8738
  declare function atelierTrouver(layout: AtelierLayout, id: string): {
8486
8739
  item: AtelierItem;
8487
8740
  parentId: string | null;
8741
+ profondeur: number;
8488
8742
  } | null;
8489
8743
  /**
8490
- * Pose un composant — sur le plan, ou DANS un conteneur (`dansId`).
8744
+ * Pose un composant — sur le plan, ou DANS un conteneur (`dansId`), à n'importe quelle
8745
+ * profondeur jusqu'à `profondeurMax`.
8491
8746
  *
8492
8747
  * Dans un conteneur, l'enfant vit en FLUX : ajouté en fin, x/y/w/h normalisés (0/0/12/1),
8493
- * l'ordre fait loi. Refus VISIBLE (id vide) si le conteneur n'existe pas, est lui-même un
8494
- * enfant (un seul niveau en v1), ou si un plafond est atteint — jamais de troncature
8748
+ * l'ordre fait loi. Refus VISIBLE (id vide) si le conteneur n'existe pas, s'il est déjà
8749
+ * au dernier étage autorisé, ou si un plafond est atteint — jamais de troncature
8495
8750
  * silencieuse, même doctrine que le plafond global.
8496
8751
  */
8497
8752
  declare function atelierAjouter(layout: AtelierLayout, type: string, gabarit?: {
@@ -8502,7 +8757,10 @@ declare function atelierAjouter(layout: AtelierLayout, type: string, gabarit?: {
8502
8757
  layout: AtelierLayout;
8503
8758
  id: string;
8504
8759
  };
8505
- /** Retire un composant, où qu'il vive. Retirer un conteneur emporte ses enfants. */
8760
+ /**
8761
+ * Retire un composant, où qu'il vive et à quelque profondeur que ce soit.
8762
+ * Retirer un conteneur emporte toute sa descendance — jamais d'orphelin invisible.
8763
+ */
8506
8764
  declare function atelierRetirer(layout: AtelierLayout, id: string): AtelierLayout;
8507
8765
  /** Change une propriété — où que vive le composant. `undefined` la supprime. */
8508
8766
  declare function atelierDefinirProp(layout: AtelierLayout, id: string, nom: string, valeur: string | number | boolean | string[] | undefined): AtelierLayout;
@@ -8608,6 +8866,20 @@ interface AtelierComposant {
8608
8866
  * métadonnée voyage avec lui, l'atelier n'a aucune liste.
8609
8867
  */
8610
8868
  ajustement: 'remplir' | 'naturel';
8869
+ /**
8870
+ * Ce composant DESSINE-T-IL quelque chose ? `aucune` = il occupe sa place sans rien
8871
+ * rendre (`cad-spacer`).
8872
+ *
8873
+ * Sert aux OUTILS DE CONCEPTION à le matérialiser : un composant qui n'affiche rien
8874
+ * est indistinguable d'un composant absent, on ne peut ni le voir ni le saisir. La
8875
+ * métadonnée voyage avec le composant — l'atelier n'a aucune liste à tenir à jour, et
8876
+ * c'est ce qui évite qu'un futur composant sans surface soit oublié.
8877
+ *
8878
+ * ⚠️ N'A AUCUN EFFET AU RENDU. Seule la feuille de style de l'ÉDITEUR agit dessus ;
8879
+ * le visualiseur et le shell frontless n'ont pas la règle, donc ils ne peuvent pas
8880
+ * l'afficher, même par erreur. La garantie est structurelle, pas conditionnelle.
8881
+ */
8882
+ surface: 'propre' | 'aucune';
8611
8883
  /**
8612
8884
  * Icône de palette (`@atelier icone=…`), VALIDÉE contre le jeu d'icônes réel : un nom
8613
8885
  * inconnu retombe sur `null` plutôt que d'afficher un carré cassé — mieux vaut vide
@@ -8638,6 +8910,16 @@ interface AtelierComposant {
8638
8910
  * apparaissent dans leur groupe quand on est « dans » le bon conteneur.
8639
8911
  */
8640
8912
  dans: string | null;
8913
+ /**
8914
+ * Les seules clés que cet hôte accueille (`@atelier accepte=cad-avatar`), ou `null`
8915
+ * si rien n'est déclaré. Plusieurs clés se séparent par `|`.
8916
+ *
8917
+ * COMPLÈTE `dans=` sans le doubler. `dans=` dit « cette pièce ne va QUE là », ce qui
8918
+ * rend son hôte strict par ricochet — c'est le cas de `cad-tabs` et de `cad-map`.
8919
+ * Mais un `cad-avatar` se pose aussi très bien seul sur une carte : il ne peut donc
8920
+ * pas porter `dans=`, et c'est alors à l'HÔTE de dire ce qu'il prend.
8921
+ */
8922
+ accepte: string[] | null;
8641
8923
  /**
8642
8924
  * Valeurs de départ des ENTRÉES à la pose (`@atelier pose-value=Étiquette`) — le
8643
8925
  * pendant de `contenu` pour les composants dont le visible passe par une entrée et
@@ -8699,18 +8981,111 @@ declare function atelierPalette(): readonly AtelierComposant[];
8699
8981
  /** Le composant derrière une clé de `layout.json`, ou `null` s'il n'existe plus. */
8700
8982
  declare function atelierComposant(cle: string): AtelierComposant | null;
8701
8983
  /**
8702
- * Recherche par nom, clé ou sélecteur. Sans terme, rend tout SAUF les composants
8703
- * `dans=`, réservés à leur hôte : ils n'apparaissent que quand `hote` est le leur
8704
- * (la cible de pose courante). `cad-map-panel` posé seul ne montre rien de sensé
8705
- * signalé par SZU le 24/08.
8984
+ * Cet hôte accepte-t-il ce composant ? `hote = null` désigne le PLAN.
8985
+ *
8986
+ * ⚠️ `dans=` SE LIT DANS LES DEUX SENS, et c'est toute la règle (arbitrage SZU 27/08) :
8987
+ *
8988
+ * · SENS DIRECT — une pièce ne se pose QUE chez son hôte. `cad-map-panel` posé seul
8989
+ * ne montre rien de sensé (signalé le 24/08), `cad-tab` hors d'un `cad-tabs` non plus.
8990
+ * · SENS INVERSE — un hôte QUI A des pièces n'accepte QUE ses pièces. `cad-tabs`
8991
+ * n'accueille que des `cad-tab`, `cad-map` que ses onze pièces de carte.
8992
+ *
8993
+ * La troisième règle en découle sans être écrite : un conteneur SANS pièce déclarée
8994
+ * (`cad-tab`, `cad-panel`, `cad-grid`…) accepte tout, sauf ce qui appartient à un autre
8995
+ * hôte. Rien à annoter : la relation existe déjà, on la lisait à moitié.
8996
+ */
8997
+ declare function atelierAccepte(hote: string | null, cle: string): boolean;
8998
+ /**
8999
+ * Les clés des pièces d'un hôte, dans l'ordre de la palette. Vide si l'hôte n'est pas
9000
+ * strict — c'est le test « ce conteneur a-t-il des pièces à lui ? ».
9001
+ */
9002
+ declare function atelierPiecesDe(hote: string | null): string[];
9003
+ /**
9004
+ * Recherche par nom, clé ou sélecteur. Rend TOUT ce qui correspond au terme.
9005
+ *
9006
+ * ⚠️ NE FILTRE PLUS SUR LA CIBLE, et c'est délibéré (SZU 27/08, règle déjà posée le
9007
+ * 26/08 pour le builder) : ce qu'un conteneur refuse doit apparaître VERROUILLÉ, pas
9008
+ * disparaître. Masquer fait deux dégâts — ça dérobe l'information (l'utilisateur ne sait
9009
+ * pas que le composant existe, ni pourquoi il n'est pas là) et ça fait SAUTER la palette
9010
+ * à chaque changement de sélection, si bien qu'on ne retrouve plus rien où on l'avait vu.
9011
+ *
9012
+ * L'appelant interroge `atelierAccepte` pour savoir quoi désactiver, et dit pourquoi.
9013
+ */
9014
+ declare function atelierChercher(terme: string): AtelierComposant[];
9015
+ /**
9016
+ * Les composants groupés, dans l'ordre d'affichage de la palette.
9017
+ *
9018
+ * Les groupes ne dépendent PAS de la cible : la palette garde la même forme quoi qu'on
9019
+ * sélectionne, ce qui est la moitié de l'intérêt du verrouillage-expliqué.
8706
9020
  */
8707
- declare function atelierChercher(terme: string, hote?: string | null): AtelierComposant[];
8708
- /** Les composants groupés, dans l'ordre d'affichage de la palette. */
8709
- declare function atelierGroupes(terme?: string, hote?: string | null): {
9021
+ declare function atelierGroupes(terme?: string): {
8710
9022
  groupe: string;
8711
9023
  composants: AtelierComposant[];
8712
9024
  }[];
8713
9025
 
9026
+ /**
9027
+ * OÙ un clic de palette pose réellement le composant.
9028
+ *
9029
+ * ── POURQUOI CE FICHIER EXISTE ──────────────────────────────────────────────────
9030
+ *
9031
+ * Depuis que les hôtes à pièces typées sont stricts, `cad-tabs` ne prend que des
9032
+ * `cad-tab`. Conséquence immédiate, signalée par SZU le 27/08 : « je fais comment pour
9033
+ * placer un composant sur cad-tab, puisque quand je sélectionne quelque chose c'est
9034
+ * cad-tabs qui est sélectionné ? » — le canevas ne sélectionne que les blocs du PLAN, et
9035
+ * la seule façon de viser un onglet était la liste de l'inspecteur. Ça marche, mais il
9036
+ * faut le savoir : une affordance qu'on doit enseigner n'en est pas une.
9037
+ *
9038
+ * La règle, telle qu'elle a été demandée dès le premier message (« cad-spacer devrait
9039
+ * aller dans cad-tab ») : quand l'hôte visé est STRICT et que le composant n'est pas une
9040
+ * de ses pièces, on DESCEND dans sa pièce courante. Poser un onglet ajoute un onglet ;
9041
+ * poser un bouton le met dans l'onglet affiché.
9042
+ *
9043
+ * Le routage ne s'applique QUE si l'hôte a exactement UN type de pièce et que cette
9044
+ * pièce est elle-même un conteneur. `cad-map` a onze pièces, dont aucune n'accueille
9045
+ * quoi que ce soit : il n'y a rien à router, et un `cad-button` y reste refusé — ce qui
9046
+ * est la vérité, pas une limite d'outil.
9047
+ *
9048
+ * Rien ici ne mute : on rend une DESTINATION, l'appelant décide.
9049
+ */
9050
+
9051
+ /** La destination d'un clic de palette, résolue et explicable. */
9052
+ interface AtelierCible {
9053
+ /** Le conteneur qui recevra le composant. `null` = le plan. */
9054
+ dansId: string | null;
9055
+ /**
9056
+ * Pièce d'hôte à créer AVANT de poser, parce que l'hôte est strict et n'en a aucune.
9057
+ * L'appelant pose d'abord celle-ci dans `dansId`, puis le composant dans la pièce
9058
+ * obtenue. Elle apparaît à l'écran : rien de caché.
9059
+ */
9060
+ pieceACreer: string | null;
9061
+ /**
9062
+ * Le chemin lisible de la destination — `['cad-tabs', 'Onglet']` — pour l'ANNONCER
9063
+ * avant le clic. Un routage qu'on ne voit pas est une surprise ; annoncé, c'est un
9064
+ * service.
9065
+ */
9066
+ chemin: string[];
9067
+ /** Faux si ce composant ne peut se poser nulle part dans cette cible. */
9068
+ possible: boolean;
9069
+ }
9070
+ /**
9071
+ * Résout la destination d'un clic de palette.
9072
+ *
9073
+ * `selectionId` est le composant actuellement sélectionné — un conteneur accueille, un
9074
+ * composant simple fait poser à côté de lui, chez son parent.
9075
+ */
9076
+ declare function atelierCibleDePose(layout: AtelierLayout, selectionId: string | null, cle: string): AtelierCible;
9077
+ /**
9078
+ * Les valeurs de DÉPART d'un composant qu'on pose : le texte projeté (`contenu=`) et
9079
+ * les entrées (`pose-*`) du catalogue.
9080
+ *
9081
+ * Extrait ici parce que DEUX poseurs doivent l'appliquer, et à DEUX endroits chacun :
9082
+ * au composant cliqué, et à la pièce d'hôte que le routage crée au passage. Cette
9083
+ * seconde application manquait — un onglet né du routage arrivait sans libellé, donc
9084
+ * invisible dans la barre (mesuré au clic dans le builder le 27/08). Un composant posé
9085
+ * sans ses valeurs de départ est une coquille, c'était déjà la leçon du 24/08.
9086
+ */
9087
+ declare function atelierProposDePose(cle: string): AtelierItem['props'];
9088
+
8714
9089
  /** `Relevé d'ouvrage` → `ReleveOuvrage`. */
8715
9090
  declare function atelierNomDeClasse(titre: string): string;
8716
9091
  /** `ReleveOuvrage` → `app-releve-ouvrage`. */
@@ -8763,10 +9138,10 @@ interface EntreeRegistre {
8763
9138
  /** La balise à créer pour l'héberger. */
8764
9139
  readonly hote: string;
8765
9140
  }
8766
- /** Symbole -> de quoi le construire. 104 composants posables. */
9141
+ /** Symbole -> de quoi le construire. 106 composants posables. */
8767
9142
  declare const REGISTRE: Readonly<Record<string, EntreeRegistre>>;
8768
9143
  /** La classe d'un symbole, ou `null` s'il n'est pas posable (directive, ou hôte indéterminable). */
8769
9144
  declare function classeDe(symbole: string): Type<unknown> | null;
8770
9145
 
8771
- export { ATELIER_BORNES, ATELIER_COLONNES, ATELIER_STYLES_PLAN, BanGeocoder, CAD_BREAKPOINTS, CAD_CHART_PALETTE, CAD_COLOR_PRESETS, CAD_DEFAULT_BASEMAPS, CAD_DEFAULT_PRIORITY_BREAKPOINTS, CAD_DIALOG_DATA, CAD_FILTER_OPERATORS, CAD_GEOCODER, CAD_ICONS, CAD_ICONS_CEREMA, CAD_ICONS_CORE, CAD_ICONS_DATA, CAD_ICONS_FILES, CAD_ICONS_GEO, CAD_ICONS_SUBSET, CAD_ICONS_TOKEN, CAD_ICONS_UI, CAD_ICON_ALIASES, CAD_ICON_CATEGORIES, CAD_MAPLIBRE_CSS_URL, CAD_MAP_CHILD, CAD_MAP_DEFAULTS, CAD_MAP_GLOBAL_STYLES, CAD_MAP_GLYPHS, CAD_MAP_PALETTE, CAD_MASK_PRESETS, CAD_MOBILE_BREAKPOINT, CAD_RECURRENCE_INTERNE, CAD_SELECT_POSITIONS, CAD_SELECT_TRIGGER_STYLES, CAD_SHEET_DATA, CAD_SHELL, CAD_TOUCH_DENSITY, CadAccordionComponent, CadAccordionPanelComponent, CadAppShellComponent, CadAvatarComponent, CadAvatarGroupComponent, CadBadgeComponent, CadBadgeDirective, CadBlockDirective, CadBlockOverlayComponent, CadBlockUiComponent, CadBottomNavComponent, CadBreadcrumbComponent, CadBreadcrumbItemDirective, CadBreakpointService, CadButtonComponent, CadButtonGroupComponent, CadCalendarComponent, CadCaptionDirective, CadCardComponent, CadCardDirective, CadCardHeaderDirective, CadCarouselComponent, CadCarouselItemDirective, CadCascadeSelectComponent, CadCellTemplateDirective, CadCenterComponent, CadChartComponent, CadCheckboxComponent, CadChipComponent, CadClusterComponent, CadColDirective, CadColorpickerComponent, CadColumnComponent, CadComboComponent, CadConfirmContentComponent, CadConfirmDialogComponent, CadConfirmService, CadContainerComponent, CadDataviewComponent, CadDataviewGridDirective, CadDataviewListDirective, CadDatepickerComponent, CadDialogComponent, CadDialogContainerComponent, CadDialogFooterDirective, CadDialogHeaderDirective, CadDialogRef, CadDialogService, CadDividerComponent, CadDrawerComponent, CadEditFocusDirective, CadEditorTemplateDirective, CadEmptyDirective, CadFieldComponent, CadFieldsetComponent, CadFieldsetLegendDirective, CadFilterChipComponent, CadFilterTemplateDirective, CadGanttComponent, 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, CadSchedulerComponent, CadScrollTopComponent, CadSegmentedComponent, CadSelectBase, CadSelectComponent, CadSelectEmptyDirective, CadSelectFooterDirective, CadSelectHeaderDirective, CadSelectItemDirective, CadSelectSelectedDirective, CadSheetContainerComponent, CadSheetRef, CadSheetService, CadSidebarComponent, CadSidebarPanelDirective, CadSkeletonComponent, CadSliderComponent, CadSpacerComponent, CadSpeedDialComponent, CadSpinnerComponent, CadSplitButtonComponent, CadSplitComponent, CadSplitterComponent, CadSplitterPanelComponent, CadStackComponent, CadStepComponent, CadStepperComponent, CadSwitchComponent, CadTabComponent, CadTabContentDirective, CadTabLabelDirective, CadTableBase, CadTableComponent, CadTableEdit, CadTableEditUi, CadTableFooterDirective, CadTablePanelComponent, CadTableResponsive, CadTableSelection, CadTableSticky, CadTableVirtual, CadTabsComponent, CadTagComponent, CadTaskCardDirective, CadTaskRowDirective, CadTaskboardComponent, CadTimeAxis, CadTimelineComponent, CadTimelineContentDirective, CadTimelineMarkerDirective, CadTimelineOppositeDirective, CadToastComponent, CadToastItemDirective, CadToastService, CadToggleButtonComponent, CadTooltipComponent, CadTooltipDirective, CadTreeAdapter, CadTreeComponent, CadTreeNodeDirective, CadTreeselectComponent, CadUploadComponent, CadUploadContentDirective, CadUploadEmptyDirective, CadUploadItemDirective, CadValueAccessor, CadWorkCalendar, MAPLIBRE_MIN_CSS, REGISTRE, addDays, addMonths, addYears, atelierAjouter, atelierBalise, atelierChercher, atelierCleDeSymbole, atelierCode, atelierComposant, atelierCompter, atelierControle, atelierDefinirProp, atelierDeplacer, atelierGabarit, atelierGroupes, atelierImports, atelierLayoutVide, atelierManques, atelierNomDeClasse, atelierNormaliser, atelierNouvelId, atelierPalette, atelierPoser, atelierPremierePlaceLibre, atelierRecompacter, atelierRedimensionner, atelierReinitialiserIds, atelierReordonnerEnfant, atelierRetirer, atelierSelecteurDeClasse, atelierTrouver, cadAggregate, cadApplyColumnOrder, cadApplyMask, cadArea, cadAutosizeWidth, cadBasemapThumbnail, cadBoundsOf, cadCategories, cadCentroid, cadClipFenetre, cadColorExpr, cadCompare, cadCompareRank, cadCurrentOperator, cadDebutSemaine, cadDefaultMatchMode, cadDistance, cadDownloadCsv, cadDurationToMinutes, cadEstBandeau, cadExpandOccurrences, cadFilterData, cadFilterKindOf, cadFilterOperators, cadFilterRows, cadFindLinkCycle, cadFmtArea, cadFmtLength, cadFormatCell, cadFormatColor, cadFormatDuration, cadFormatSize, cadFrenchHolidays, cadGanttRows, 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, cadPackLanes, cadPadBounds, cadParseColor, cadParseDuration, cadParseRRule, cadParseResponsive, cadPlanHeader, cadPlanTicks, cadPointeFleche, cadProjeterClavier, cadProjeterCreation, cadProjeterEdition, cadProjeterMois, cadPropsTable, cadRankBetween, cadRankFirst, cadRankLast, cadRankSequence, cadResolve, cadResolveResponsive, cadResponsive, cadRgbToHsl, cadRgbToHsv, cadRingArea, cadRouterLien, cadRowKey, cadRowPredicate, cadSameValue, cadScaleNext, cadScaleStart, cadSchedulerPartition, cadSortData, cadStartResize, cadStyleToExpressions, cadUnmask, cadUnscheduled, cadValidateGeoJSON, cadValueForOperator, cadWeekBands, cadWriteField, classeDe, compareDay, daysInMonth, endOfMonth, ensureMaplibreCss, formatDate, isBetweenDay, isSameDay, isSameMonth, isValidDate, isoOf, isoWeek, loadChartJs, loadMaplibre, monthNames, pad2, parseIso, parseWithFormat, provideCadIcons, startOfDay, startOfMonth, toDate, weekdayNames };
8772
- export type { AtelierComposant, AtelierItem, AtelierLayout, AtelierProp, CadAggregate, CadAggregateFn, CadAggregates, CadBadgeSeverity, CadBand, CadBandRow, CadBasemap, CadBasemapKind, CadBottomNavItem, CadBounds, CadBreadcrumbItem, CadBreakpoint, CadCalendarChangeEvent, CadCalendarCreateEvent, CadCalendarDateEvent, CadCalendarEventEvent, CadCalendarSource, CadCalendarView, CadCarouselResponsive, CadCellContext, CadCellEditState, CadChartClickEvent, CadChartType, CadColonneDef, 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, CadFenetreSpan, CadFilterChangeEvent, CadFilterKind, CadFilterMatchMode, CadFilterMeta, CadFilterOperator, CadFilters, CadGanttRow, CadGanttScale, CadGanttTaskEvent, CadGap, CadGeoJSON, CadGeocodeOptions, CadGeocodeResult, CadGeocoder, CadGeometryKind, CadGroupBy, CadGroupContext, CadGroupInfo, CadGroupItem, CadHeaderMenuHost, CadHsva, CadLaneSpan, CadLayerStyle, CadLazyLoadEvent, CadLegendItem, CadLienAncre, CadLienTrace, 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, CadSchedulerAssignEvent, CadSchedulerChangeEvent, CadSchedulerCreateEvent, CadSchedulerEventEvent, CadSchedulerMode, CadSchedulerScale, CadSchedulerScheduleEvent, CadSegmentOption, CadSelectItemContext, CadSelectionMode, CadSelectionPropagation, CadSeverity, CadSheetConfig, CadSheetHeight, CadShellApi, CadSize, CadSliderMark, CadSliderSeverity, CadSliderValue, CadSlot, CadSortEvent, CadSortMeta, CadSortOrder, CadStepState, CadTableEditContext, CadTableEditUiContext, CadTablePanelTab, CadTableResponsiveMode, CadTableSelectionContext, CadTagSeverity, CadTaskAssignEvent, CadTaskMoveEvent, CadTaskOpenEvent, CadTaskboardGroupBy, CadTaskboardMode, CadTimelineAlign, CadToastAction, CadToastMessage, CadToastPosition, CadToastSeverity, CadTreeAdapterOptions, CadTreeNode, CadTreeNodeEvent, CadUploadFile, CadUploadHandlerEvent, CadUploadStatus, CadVariant, CadVirtualRange, CadWipEvent, EntreeRegistre, MLExpression, MaplibreModule };
9146
+ export { ATELIER_BORNES, ATELIER_COLONNES, ATELIER_STYLES_PLAN, BanGeocoder, CAD_BREAKPOINTS, CAD_CHART_PALETTE, CAD_COLOR_PRESETS, CAD_DEFAULT_BASEMAPS, CAD_DEFAULT_PRIORITY_BREAKPOINTS, CAD_DIALOG_DATA, CAD_FILTER_OPERATORS, CAD_GEOCODER, CAD_ICONS, CAD_ICONS_CEREMA, CAD_ICONS_CORE, CAD_ICONS_DATA, CAD_ICONS_FILES, CAD_ICONS_GEO, CAD_ICONS_SUBSET, CAD_ICONS_TOKEN, CAD_ICONS_UI, CAD_ICON_ALIASES, CAD_ICON_CATEGORIES, CAD_MAPLIBRE_CSS_URL, CAD_MAP_CHILD, CAD_MAP_DEFAULTS, CAD_MAP_GLOBAL_STYLES, CAD_MAP_GLYPHS, CAD_MAP_PALETTE, CAD_MASK_PRESETS, CAD_MOBILE_BREAKPOINT, CAD_RECURRENCE_INTERNE, CAD_SELECT_POSITIONS, CAD_SELECT_TRIGGER_STYLES, CAD_SHEET_DATA, CAD_SHELL, CAD_TOUCH_DENSITY, CadAccordionComponent, CadAccordionPanelComponent, CadAppShellComponent, CadAvatarComponent, CadAvatarGroupComponent, CadBadgeComponent, CadBadgeDirective, CadBlockDirective, CadBlockOverlayComponent, CadBlockUiComponent, CadBottomNavComponent, CadBreadcrumbComponent, CadBreadcrumbItemDirective, CadBreakpointService, CadButtonComponent, CadButtonGroupComponent, CadCalendarComponent, CadCaptionDirective, CadCardComponent, CadCardDirective, CadCardHeaderDirective, CadCarouselComponent, CadCarouselItemDirective, CadCascadeSelectComponent, CadCellTemplateDirective, CadCenterComponent, CadChartComponent, CadCheckboxComponent, CadChipComponent, CadClusterComponent, CadColDirective, CadColorpickerComponent, CadColumnComponent, CadComboComponent, CadConfirmContentComponent, CadConfirmDialogComponent, CadConfirmService, CadContainerComponent, CadDataviewComponent, CadDataviewGridDirective, CadDataviewListDirective, CadDatepickerComponent, CadDialogComponent, CadDialogContainerComponent, CadDialogFooterDirective, CadDialogHeaderDirective, CadDialogRef, CadDialogService, CadDividerComponent, CadDrawerComponent, CadEditFocusDirective, CadEditorTemplateDirective, CadEmptyDirective, CadFieldComponent, CadFieldsetComponent, CadFieldsetLegendDirective, CadFilterChipComponent, CadFilterTemplateDirective, CadGanttComponent, 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, CadSchedulerComponent, CadScrollTopComponent, CadSegmentedComponent, CadSelectBase, CadSelectComponent, CadSelectEmptyDirective, CadSelectFooterDirective, CadSelectHeaderDirective, CadSelectItemDirective, CadSelectSelectedDirective, CadSheetContainerComponent, CadSheetRef, CadSheetService, CadSidebarComponent, CadSidebarPanelDirective, CadSkeletonComponent, CadSliderComponent, CadSpacerComponent, CadSpeedDialComponent, CadSpinnerComponent, CadSplitButtonComponent, CadSplitComponent, CadSplitterComponent, CadSplitterPanelComponent, CadStackComponent, CadStepComponent, CadStepperComponent, CadSwitchComponent, CadTabComponent, CadTabContentDirective, CadTabLabelDirective, CadTableBase, CadTableComponent, CadTableEdit, CadTableEditUi, CadTableFooterDirective, CadTablePanelComponent, CadTableResponsive, CadTableSelection, CadTableSticky, CadTableVirtual, CadTabsComponent, CadTagComponent, CadTaskCardDirective, CadTaskRowDirective, CadTaskboardComponent, CadTimeAxis, CadTimelineComponent, CadTimelineContentDirective, CadTimelineMarkerDirective, CadTimelineOppositeDirective, CadToastComponent, CadToastItemDirective, CadToastService, CadToggleButtonComponent, CadTooltipComponent, CadTooltipDirective, CadTreeAdapter, CadTreeComponent, CadTreeNodeDirective, CadTreeselectComponent, CadUploadComponent, CadUploadContentDirective, CadUploadEmptyDirective, CadUploadItemDirective, CadValueAccessor, CadWorkCalendar, MAPLIBRE_MIN_CSS, REGISTRE, addDays, addMonths, addYears, atelierAccepte, atelierAdopterIds, atelierAjouter, atelierBalise, atelierChercher, atelierCibleDePose, atelierCleDeSymbole, atelierCode, atelierComposant, atelierCompter, atelierControle, atelierDefinirProp, atelierDeplacer, atelierGabarit, atelierGroupes, atelierImports, atelierLayoutVide, atelierManques, atelierNomDeClasse, atelierNormaliser, atelierNouvelId, atelierPalette, atelierPiecesDe, atelierPoser, atelierPremierePlaceLibre, atelierProposDePose, atelierRecompacter, atelierRedimensionner, atelierReinitialiserIds, atelierReordonnerEnfant, atelierRetirer, atelierSelecteurDeClasse, atelierTrouver, cadAggregate, cadApplyColumnOrder, cadApplyMask, cadArea, cadAutosizeWidth, cadBasemapThumbnail, cadBoundsOf, cadCategories, cadCentroid, cadClipFenetre, cadColorExpr, cadCompare, cadCompareRank, cadCurrentOperator, cadDebutSemaine, cadDefaultMatchMode, cadDistance, cadDownloadCsv, cadDurationToMinutes, cadEstBandeau, cadExpandOccurrences, cadFilterData, cadFilterKindOf, cadFilterOperators, cadFilterRows, cadFindLinkCycle, cadFmtArea, cadFmtLength, cadFormatCell, cadFormatColor, cadFormatDuration, cadFormatSize, cadFrenchHolidays, cadGanttRows, 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, cadPackLanes, cadPadBounds, cadParseColor, cadParseDuration, cadParseRRule, cadParseResponsive, cadPlanHeader, cadPlanTicks, cadPointeFleche, cadProjeterClavier, cadProjeterCreation, cadProjeterEdition, cadProjeterMois, cadPropsTable, cadRankBetween, cadRankFirst, cadRankLast, cadRankSequence, cadResolve, cadResolveResponsive, cadResponsive, cadRgbToHsl, cadRgbToHsv, cadRingArea, cadRouterLien, cadRowKey, cadRowPredicate, cadSameValue, cadScaleNext, cadScaleStart, cadSchedulerPartition, cadSortData, cadStartResize, cadStyleToExpressions, cadUnmask, cadUnscheduled, cadValidateGeoJSON, cadValueForOperator, cadWeekBands, cadWriteField, classeDe, compareDay, daysInMonth, endOfMonth, ensureMaplibreCss, estHoteAPieces, formatDate, isBetweenDay, isSameDay, isSameMonth, isValidDate, isoOf, isoWeek, loadChartJs, loadMaplibre, monthNames, pad2, parseIso, parseWithFormat, provideCadIcons, startOfDay, startOfMonth, toDate, weekdayNames };
9147
+ export type { AtelierCible, AtelierComposant, AtelierItem, AtelierLayout, AtelierProp, CadAggregate, CadAggregateFn, CadAggregates, CadBadgeSeverity, CadBand, CadBandRow, CadBasemap, CadBasemapKind, CadBottomNavItem, CadBounds, CadBreadcrumbItem, CadBreakpoint, CadCalendarChangeEvent, CadCalendarCreateEvent, CadCalendarDateEvent, CadCalendarEventEvent, CadCalendarSource, CadCalendarView, CadCarouselResponsive, CadCellContext, CadCellEditState, CadChartClickEvent, CadChartType, CadColonneDef, 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, CadFenetreSpan, CadFilterChangeEvent, CadFilterKind, CadFilterMatchMode, CadFilterMeta, CadFilterOperator, CadFilters, CadGanttRow, CadGanttScale, CadGanttTaskEvent, CadGap, CadGeoJSON, CadGeocodeOptions, CadGeocodeResult, CadGeocoder, CadGeometryKind, CadGroupBy, CadGroupContext, CadGroupInfo, CadGroupItem, CadHeaderMenuHost, CadHoteAPieces, CadHsva, CadLaneSpan, CadLayerStyle, CadLazyLoadEvent, CadLegendItem, CadLienAncre, CadLienTrace, 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, CadSchedulerAssignEvent, CadSchedulerChangeEvent, CadSchedulerCreateEvent, CadSchedulerEventEvent, CadSchedulerMode, CadSchedulerScale, CadSchedulerScheduleEvent, CadSegmentOption, CadSelectItemContext, CadSelectionMode, CadSelectionPropagation, CadSeverity, CadSheetConfig, CadSheetHeight, CadShellApi, CadSize, CadSliderMark, CadSliderSeverity, CadSliderValue, CadSlot, CadSortEvent, CadSortMeta, CadSortOrder, CadStepState, CadTableEditContext, CadTableEditUiContext, CadTablePanelTab, CadTableResponsiveMode, CadTableSelectionContext, CadTagSeverity, CadTaskAssignEvent, CadTaskMoveEvent, CadTaskOpenEvent, CadTaskboardGroupBy, CadTaskboardMode, CadTimelineAlign, CadToastAction, CadToastMessage, CadToastPosition, CadToastSeverity, CadTreeAdapterOptions, CadTreeNode, CadTreeNodeEvent, CadUploadFile, CadUploadHandlerEvent, CadUploadStatus, CadVariant, CadVirtualRange, CadWipEvent, EntreeRegistre, MLExpression, MaplibreModule };