@ktortu/aaa 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +151 -0
- package/button/button-tokens.css +152 -0
- package/button/button.css +319 -0
- package/card/card-tokens.css +49 -0
- package/card/card.css +200 -0
- package/cdk/styles/foundation.css +83 -0
- package/cdk/styles/tabs.css +276 -0
- package/dialog/dialog.css +350 -0
- package/fesm2022/ktortu-aaa-button.mjs +128 -0
- package/fesm2022/ktortu-aaa-button.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-card.mjs +209 -0
- package/fesm2022/ktortu-aaa-card.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-cdk.mjs +183 -0
- package/fesm2022/ktortu-aaa-cdk.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-dialog.mjs +512 -0
- package/fesm2022/ktortu-aaa-dialog.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-forms.mjs +3215 -0
- package/fesm2022/ktortu-aaa-forms.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-menu.mjs +315 -0
- package/fesm2022/ktortu-aaa-menu.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-tabs.mjs +79 -0
- package/fesm2022/ktortu-aaa-tabs.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-tooltip.mjs +356 -0
- package/fesm2022/ktortu-aaa-tooltip.mjs.map +1 -0
- package/fesm2022/ktortu-aaa.mjs +17 -0
- package/fesm2022/ktortu-aaa.mjs.map +1 -0
- package/forms/checkbox/checkbox-group.css +55 -0
- package/forms/checkbox/checkbox.css +216 -0
- package/forms/chips/chip-list.css +70 -0
- package/forms/chips/chip.css +92 -0
- package/forms/chips/tokens.css +102 -0
- package/forms/field/field.css +87 -0
- package/forms/multi-select/multi-select.css +136 -0
- package/forms/radio/radio-group.css +55 -0
- package/forms/radio/radio.css +165 -0
- package/forms/styles/field-box.css +171 -0
- package/forms/styles/select-panel.css +464 -0
- package/forms/styles/tokens.css +67 -0
- package/forms/switch/switch.css +188 -0
- package/menu/menu-tokens.css +58 -0
- package/menu/menu.css +224 -0
- package/package.json +96 -0
- package/styles/button.css +6 -0
- package/styles/card.css +6 -0
- package/styles/dialog.css +6 -0
- package/styles/forms.css +13 -0
- package/styles/foundation.css +7 -0
- package/styles/menu.css +6 -0
- package/styles/styles.css +24 -0
- package/styles/tabs.css +5 -0
- package/styles/tooltip.css +5 -0
- package/themes/theme-ant.css +44 -0
- package/themes/theme-architecte.css +83 -0
- package/themes/theme-aurora.css +97 -0
- package/themes/theme-bootstrap.css +46 -0
- package/themes/theme-carbon.css +49 -0
- package/themes/theme-catppuccin.css +66 -0
- package/themes/theme-cyberpunk.css +211 -0
- package/themes/theme-fluent.css +45 -0
- package/themes/theme-material-you.css +74 -0
- package/themes/theme-material.css +48 -0
- package/themes/theme-primer.css +46 -0
- package/themes/theme-vegetal.css +78 -0
- package/tooltip/tooltip.css +129 -0
- package/types/ktortu-aaa-button.d.ts +70 -0
- package/types/ktortu-aaa-card.d.ts +143 -0
- package/types/ktortu-aaa-cdk.d.ts +110 -0
- package/types/ktortu-aaa-dialog.d.ts +286 -0
- package/types/ktortu-aaa-forms.d.ts +1574 -0
- package/types/ktortu-aaa-menu.d.ts +171 -0
- package/types/ktortu-aaa-tabs.d.ts +27 -0
- package/types/ktortu-aaa-tooltip.d.ts +90 -0
- package/types/ktortu-aaa.d.ts +8 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider, Signal } from '@angular/core';
|
|
3
|
+
import * as _ktortu_aaa_cdk from '@ktortu/aaa/cdk';
|
|
4
|
+
|
|
5
|
+
/** Contrôleur de drag-to-dismiss d'une bottom-sheet. À câbler sur le `pointerdown` de la poignée. */
|
|
6
|
+
interface KtSheetDrag {
|
|
7
|
+
start(event: PointerEvent): void;
|
|
8
|
+
destroy(): void;
|
|
9
|
+
}
|
|
10
|
+
interface KtSheetDragOptions {
|
|
11
|
+
/** Élément translaté pendant le glissement (la feuille elle-même). Lu à chaque `start`. */
|
|
12
|
+
pane: () => HTMLElement | null;
|
|
13
|
+
/** Fermeture déclenchée quand le seuil est franchi (ex. `expanded.set(false)` / `dialogRef.close()`). */
|
|
14
|
+
onDismiss: () => void;
|
|
15
|
+
/** Classe togglée sur le pane pendant le drag (coupe la transition CSS du glissement). */
|
|
16
|
+
draggingClass: string;
|
|
17
|
+
/** Fraction de la hauteur de la feuille au-delà de laquelle on ferme (défaut 0.25). */
|
|
18
|
+
threshold?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Drag-to-dismiss vertical (vers le BAS uniquement) d'une bottom-sheet, factorisé entre le Select
|
|
22
|
+
* (popup Popover) et le Dialog (pane CDK). Chaque appelant ne fournit que SON élément à translater
|
|
23
|
+
* et SON callback de fermeture.
|
|
24
|
+
*
|
|
25
|
+
* Geste DOUBLÉ côté appelant par Échap + bouton Fermer + tap-extérieur (WCAG 2.5.1) : ce module ne
|
|
26
|
+
* gère que le glissement. Le gating « écran compact uniquement » reste à l'appelant (signal `isCompact`
|
|
27
|
+
* de `KtViewport`) — la primitive est volontairement agnostique.
|
|
28
|
+
*/
|
|
29
|
+
declare function createKtSheetDrag(opts: KtSheetDragOptions): KtSheetDrag;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Valeur d'un palier de breakpoint, CONFIGURABLE PAR APPLICATION :
|
|
33
|
+
* - un **nombre** = largeur (px) à partir de laquelle le palier commence ; la lib en dérive une
|
|
34
|
+
* media query LARGEUR SEULE (bornes calculées par rapport au palier suivant) ;
|
|
35
|
+
* - une **chaîne** = media query complète du palier, utilisée VERBATIM (échappatoire pour un critère
|
|
36
|
+
* non-largeur : `orientation`, `pointer`, ratio…).
|
|
37
|
+
*/
|
|
38
|
+
type KtBreakpointValue = number | string;
|
|
39
|
+
/**
|
|
40
|
+
* Seuils responsive de la lib, surchargeables par appli via `provideKtBreakpoints`. Sémantique
|
|
41
|
+
* « plancher de palier » : chaque valeur indique où le palier COMMENCE → 3 bandes mutuellement
|
|
42
|
+
* exclusives (`mobile` < `tablet` < `desktop`).
|
|
43
|
+
*/
|
|
44
|
+
interface KtBreakpoints {
|
|
45
|
+
/** Plancher du mobile (typiquement 0). */
|
|
46
|
+
mobile: KtBreakpointValue;
|
|
47
|
+
/** Largeur où commence la tablette (= plafond mobile). */
|
|
48
|
+
tablet: KtBreakpointValue;
|
|
49
|
+
/** Largeur où commence le desktop (= plafond tablette). */
|
|
50
|
+
desktop: KtBreakpointValue;
|
|
51
|
+
}
|
|
52
|
+
/** Défauts : bascule bottom-sheet sous 600px (aligné sur l'ancien `MOBILE_QUERY`). */
|
|
53
|
+
declare const KT_DEFAULT_BREAKPOINTS: KtBreakpoints;
|
|
54
|
+
/** Token des seuils responsive. Défaut = `KT_DEFAULT_BREAKPOINTS` ; surchargé par `provideKtBreakpoints`. */
|
|
55
|
+
declare const KT_BREAKPOINTS: InjectionToken<KtBreakpoints>;
|
|
56
|
+
/**
|
|
57
|
+
* À ajouter aux `providers` de `app.config.ts`. Fusionne avec les défauts → surcharge partielle OK.
|
|
58
|
+
* @example provideKtBreakpoints({ tablet: 768, desktop: 1200 })
|
|
59
|
+
* @example provideKtBreakpoints({ tablet: '(min-width: 768px) and (orientation: landscape)' })
|
|
60
|
+
*/
|
|
61
|
+
declare function provideKtBreakpoints(overrides: Partial<KtBreakpoints>): Provider;
|
|
62
|
+
/** Trois chaînes de media queries résolues, prêtes pour `matchMedia` / `BreakpointObserver`. */
|
|
63
|
+
interface KtBreakpointMedia {
|
|
64
|
+
mobile: string;
|
|
65
|
+
tablet: string;
|
|
66
|
+
desktop: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convertit les seuils (nombres et/ou chaînes) en 3 media queries. Un palier-chaîne est repris
|
|
70
|
+
* verbatim ; un palier-nombre devient la bande `[plancher courant .. plancher suivant[`. Si le
|
|
71
|
+
* plancher suivant est une chaîne (pas de borne numérique), la bande reste ouverte de ce côté.
|
|
72
|
+
*/
|
|
73
|
+
declare function resolveKtBreakpointMedia(bp: KtBreakpoints): KtBreakpointMedia;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Expose l'état responsive courant en SIGNALS, dérivé des seuils configurés par l'appli
|
|
77
|
+
* (`KT_BREAKPOINTS` / `provideKtBreakpoints`). Fondé sur `BreakpointObserver` (`@angular/cdk/layout`,
|
|
78
|
+
* déjà dépendance) : SSR-safe (`matches: false` côté serveur → desktop par défaut) et nettoyage des
|
|
79
|
+
* listeners géré par le CDK.
|
|
80
|
+
*
|
|
81
|
+
* À injecter aussi bien dans les composants de la lib (bascule bottom-sheet) que dans le code des
|
|
82
|
+
* applis consommatrices pour leur propre layout responsive.
|
|
83
|
+
*/
|
|
84
|
+
declare class KtViewport {
|
|
85
|
+
private readonly observer;
|
|
86
|
+
/** Media queries résolues (largeur dérivée ou verbatim selon le token) — utile pour miroir CSS. */
|
|
87
|
+
readonly media: _ktortu_aaa_cdk.KtBreakpointMedia;
|
|
88
|
+
/** Le viewport est dans la bande mobile. */
|
|
89
|
+
readonly isMobile: Signal<boolean>;
|
|
90
|
+
/** Le viewport est dans la bande tablette. */
|
|
91
|
+
readonly isTablet: Signal<boolean>;
|
|
92
|
+
/** Le viewport est dans la bande desktop. */
|
|
93
|
+
readonly isDesktop: Signal<boolean>;
|
|
94
|
+
/** Alias de `isMobile` : palier où les composants de la lib basculent en bottom-sheet. */
|
|
95
|
+
readonly isCompact: Signal<boolean>;
|
|
96
|
+
private matches;
|
|
97
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtViewport, never>;
|
|
98
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<KtViewport>;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
declare class KtIdGenerator {
|
|
102
|
+
private readonly counters;
|
|
103
|
+
private nextGlobalId;
|
|
104
|
+
generateId(prefix?: string): number;
|
|
105
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtIdGenerator, never>;
|
|
106
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<KtIdGenerator>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { KT_BREAKPOINTS, KT_DEFAULT_BREAKPOINTS, KtIdGenerator, KtViewport, createKtSheetDrag, provideKtBreakpoints, resolveKtBreakpointMedia };
|
|
110
|
+
export type { KtBreakpointMedia, KtBreakpointValue, KtBreakpoints, KtSheetDrag, KtSheetDragOptions };
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { OnInit, OnDestroy, Provider } from '@angular/core';
|
|
3
|
+
import { DialogConfig, DialogRef, CdkDialogContainer } from '@angular/cdk/dialog';
|
|
4
|
+
import { ComponentType } from '@angular/cdk/portal';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* À poser sur le titre VISIBLE (idéalement un `<h2>`) du contenu d'un CDK Dialog.
|
|
8
|
+
* Câble `aria-labelledby` du conteneur de dialogue.
|
|
9
|
+
*
|
|
10
|
+
* Pourquoi écrire l'attribut directement (Renderer2) plutôt que seulement `_addAriaLabelledBy` :
|
|
11
|
+
* sous change detection ZONELESS (cas par défaut moderne), le `markForCheck()` interne du
|
|
12
|
+
* conteneur ne rafraîchit pas ses host bindings à l'ouverture, donc l'attribut n'apparaîtrait
|
|
13
|
+
* jamais. On écrit donc l'attribut nous-mêmes (fiable, indépendant de la CD) ET on alimente la
|
|
14
|
+
* file CDK pour rester cohérent si un cycle de CD survient ensuite.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```html
|
|
18
|
+
* <h2 ktDialogTitle>Renommer le fichier</h2>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare class KtDialogTitle {
|
|
22
|
+
private readonly dialogRef;
|
|
23
|
+
private readonly host;
|
|
24
|
+
private readonly renderer;
|
|
25
|
+
private readonly idGen;
|
|
26
|
+
/** Id de l'hôte câblé en `aria-labelledby` : préserve un id fourni par le consommateur, sinon en génère un. */
|
|
27
|
+
readonly id: string;
|
|
28
|
+
constructor();
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogTitle, never>;
|
|
30
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogTitle, "[ktDialogTitle]", never, {}, {}, never, never, true, never>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* À poser sur le paragraphe descriptif COURT du dialog : câble `aria-describedby` du conteneur
|
|
35
|
+
* (texte lu par le lecteur d'écran juste après le titre, à l'ouverture).
|
|
36
|
+
*
|
|
37
|
+
* ⚠️ Ne JAMAIS appliquer sur un formulaire ou un long contenu : `aria-describedby` concatène
|
|
38
|
+
* tout le texte du nœud et serait lu d'un bloc à l'ouverture. Réserver à une phrase de contexte.
|
|
39
|
+
*
|
|
40
|
+
* Écriture directe de l'attribut (Renderer2) pour la même raison que `ktDialogTitle` :
|
|
41
|
+
* fiabilité sous change detection zoneless. La config est tenue à jour pour cohérence CDK.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```html
|
|
45
|
+
* <p ktDialogDescription>Cette action est définitive.</p>
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
declare class KtDialogDescription implements OnInit, OnDestroy {
|
|
49
|
+
private readonly dialogRef;
|
|
50
|
+
private readonly host;
|
|
51
|
+
private readonly renderer;
|
|
52
|
+
private readonly idGen;
|
|
53
|
+
/** Id de l'hôte câblé en `aria-describedby` : préserve un id fourni par le consommateur, sinon en génère un. */
|
|
54
|
+
readonly id: string;
|
|
55
|
+
constructor();
|
|
56
|
+
ngOnInit(): void;
|
|
57
|
+
ngOnDestroy(): void;
|
|
58
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogDescription, never>;
|
|
59
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogDescription, "[ktDialogDescription]", never, {}, {}, never, never, true, never>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Ferme le CDK Dialog au clic, avec un résultat optionnel renvoyé à l'ouvreur via
|
|
64
|
+
* `DialogRef.close(result)`. Se compose avec `[ktButton]` sur le même `<button>`.
|
|
65
|
+
*
|
|
66
|
+
* Réservé au DISMISS simple (Annuler / Fermer). Pour valider un formulaire, injectez
|
|
67
|
+
* `DialogRef` dans votre composant et appelez `close(valeur)` après validation.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```html
|
|
71
|
+
* <button ktButton ktDialogClose>Annuler</button>
|
|
72
|
+
* <button ktButton [ktDialogClose]="'confirm'">Confirmer</button>
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
declare class KtDialogClose {
|
|
76
|
+
private readonly dialogRef;
|
|
77
|
+
private readonly host;
|
|
78
|
+
/**
|
|
79
|
+
* Valeur renvoyée à l'ouvreur via `DialogRef.close(result)`. Liée par l'alias `ktDialogClose`
|
|
80
|
+
* (= nom du sélecteur), d'où l'usage `[ktDialogClose]="'confirm'"`. @default undefined
|
|
81
|
+
*/
|
|
82
|
+
readonly dialogResult: i0.InputSignal<unknown>;
|
|
83
|
+
protected readonly buttonType: string | null;
|
|
84
|
+
constructor();
|
|
85
|
+
protected close(): void;
|
|
86
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogClose, never>;
|
|
87
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogClose, "[ktDialogClose]", never, { "dialogResult": { "alias": "ktDialogClose"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* En-tête RICHE et OPTIONNEL du dialog : rangée flex pour composer une icône, le titre et/ou un
|
|
92
|
+
* bouton de fermeture. Marqueur structurel sans logique — la mise en forme (flex, padding de
|
|
93
|
+
* région, reset du padding du [ktDialogTitle] qu'il enveloppe) vit dans `dialog.css`.
|
|
94
|
+
*
|
|
95
|
+
* Sépare le LAYOUT (cette région) de l'ÉTIQUETTE ACCESSIBLE ([ktDialogTitle], qui garde
|
|
96
|
+
* aria-labelledby). En usage simple — titre nu sans header — [ktDialogTitle] conserve son propre
|
|
97
|
+
* padding : ce header n'est à utiliser que pour les en-têtes composés (icône, close top-right…).
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```html
|
|
101
|
+
* <header ktDialogHeader>
|
|
102
|
+
* <h2 ktDialogTitle>Titre</h2>
|
|
103
|
+
* <button ktButton ktDialogClose aria-label="Fermer">✕</button>
|
|
104
|
+
* </header>
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
declare class KtDialogHeader {
|
|
108
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogHeader, never>;
|
|
109
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogHeader, "[ktDialogHeader]", never, {}, {}, never, never, true, never>;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Zone de contenu du dialog. Marqueur structurel sans logique : la mise en forme
|
|
113
|
+
* (rythme vertical) vit dans `dialog.css` via le sélecteur `[ktDialogContent]`.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```html
|
|
117
|
+
* <div ktDialogContent>…</div>
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
declare class KtDialogContent {
|
|
121
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogContent, never>;
|
|
122
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogContent, "[ktDialogContent]", never, {}, {}, never, never, true, never>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Barre d'actions du dialog (rangée de boutons). Marqueur structurel sans logique :
|
|
126
|
+
* la mise en forme (flex, gap, sticky bas pour le Reflow AAA) vit dans `dialog.css`
|
|
127
|
+
* via le sélecteur `[ktDialogActions]`.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```html
|
|
131
|
+
* <footer ktDialogActions>
|
|
132
|
+
* <button ktButton ktDialogClose>Annuler</button>
|
|
133
|
+
* <button ktButton [ktDialogClose]="'ok'">Valider</button>
|
|
134
|
+
* </footer>
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
declare class KtDialogActions {
|
|
138
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogActions, never>;
|
|
139
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogActions, "[ktDialogActions]", never, {}, {}, never, never, true, never>;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Marque l'élément à focaliser à l'ouverture. À coupler avec la config CDK
|
|
143
|
+
* `autoFocus: '[ktDialogFocusInitial]'` (incluse dans `provideKtDialogDefaults`).
|
|
144
|
+
* Permet d'éviter que le focus initial tombe sur une action destructrice.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```html
|
|
148
|
+
* <input ktDialogFocusInitial type="text" />
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
declare class KtDialogFocusInitial {
|
|
152
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogFocusInitial, never>;
|
|
153
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogFocusInitial, "[ktDialogFocusInitial]", never, {}, {}, never, never, true, never>;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Poignée de préhension d'un dialog en mode `sheet` (bottom-sheet) : drag-to-dismiss vers le bas,
|
|
157
|
+
* FACTORISÉ avec le Select via `createKtSheetDrag` (@ktortu/aaa). Geste DOUBLÉ par Échap + bouton
|
|
158
|
+
* Fermer + clic sur le scrim (WCAG 2.5.1) — décoratif (`aria-hidden`).
|
|
159
|
+
*
|
|
160
|
+
* À poser sur la barre de préhension, premier enfant du contenu d'un dialog ouvert avec une
|
|
161
|
+
* présentation `sheet` / `centered-sheet`. Le drag n'est actif que si le dialog est EFFECTIVEMENT
|
|
162
|
+
* en mode sheet (la pane porte `kt-dialog--sheet`) — pas de dépendance au viewport : un `sheet`
|
|
163
|
+
* toujours-bottom-sheet se drague aussi à la souris.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```html
|
|
167
|
+
* <div ktDialogContent>
|
|
168
|
+
* <div ktDialogSheetHandle></div>
|
|
169
|
+
* …
|
|
170
|
+
* </div>
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
declare class KtDialogSheetHandle {
|
|
174
|
+
private readonly dialogRef;
|
|
175
|
+
private readonly host;
|
|
176
|
+
private readonly destroyRef;
|
|
177
|
+
private readonly drag;
|
|
178
|
+
constructor();
|
|
179
|
+
protected onStart(event: PointerEvent): void;
|
|
180
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogSheetHandle, never>;
|
|
181
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KtDialogSheetHandle, "[ktDialogSheetHandle]", never, {}, {}, never, never, true, never>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Valeurs par défaut orientées AAA pour `@angular/cdk/dialog`.
|
|
186
|
+
* - `ariaModal: true` : explicite (le CDK le laisse OFF par défaut).
|
|
187
|
+
* - `restoreFocus: true` : rend le focus au déclencheur à la fermeture.
|
|
188
|
+
* - `panelClass` / `backdropClass` : crochets de style consommés par `dialog.css`.
|
|
189
|
+
*
|
|
190
|
+
* Pour focaliser un élément précis à l'ouverture (ex. éviter un bouton destructeur),
|
|
191
|
+
* passez `autoFocus: '[ktDialogFocusInitial]'` dans la config d'ouverture et posez la
|
|
192
|
+
* directive `ktDialogFocusInitial` sur la cible.
|
|
193
|
+
*/
|
|
194
|
+
declare const KT_DIALOG_AAA_DEFAULTS: DialogConfig;
|
|
195
|
+
/**
|
|
196
|
+
* Enregistre les valeurs par défaut AAA du dialog au niveau application.
|
|
197
|
+
* À ajouter aux `providers` de `app.config.ts`. `overrides` permet d'ajuster sans
|
|
198
|
+
* tout réécrire (ex. `provideKtDialogDefaults({ maxWidth: '40rem' })`).
|
|
199
|
+
*/
|
|
200
|
+
declare function provideKtDialogDefaults(overrides?: Partial<DialogConfig>): Provider;
|
|
201
|
+
/**
|
|
202
|
+
* Présentation du dialog, CHOISIE EXPLICITEMENT PAR LE DÉVELOPPEUR à l'ouverture (option
|
|
203
|
+
* `presentation` de `injectKtDialogOpener`). Aucune bascule CSS automatique : le dev décide.
|
|
204
|
+
* - `centered` : toujours centré (ex. confirmation) — DÉFAUT ;
|
|
205
|
+
* - `fullscreen` : toujours plein écran (desktop compris) ;
|
|
206
|
+
* - `sheet` : toujours bottom-sheet (desktop compris) ;
|
|
207
|
+
* - `centered-fullscreen` : centré sur desktop, plein écran sur téléphone compact ;
|
|
208
|
+
* - `centered-sheet` : centré sur desktop, bottom-sheet sur téléphone compact.
|
|
209
|
+
* Les variantes `centered-*` sont résolues EN JS à l'ouverture (signal `KtViewport.isCompact()`), pas par le CSS —
|
|
210
|
+
* la classe CSS finale est donc toujours une présentation CONCRÈTE (centered/fullscreen/sheet).
|
|
211
|
+
*/
|
|
212
|
+
type KtDialogPresentation = 'centered' | 'fullscreen' | 'sheet' | 'centered-fullscreen' | 'centered-sheet';
|
|
213
|
+
/**
|
|
214
|
+
* Résout une `KtDialogPresentation` (responsive comprise) en panelClass concret. Pour les variantes
|
|
215
|
+
* `centered-*`, l'appelant fournit `compact` (= `KtViewport.isCompact()`, largeur seule) — centré
|
|
216
|
+
* sur desktop, plein écran / sheet sur écran compact. Fonction pure (testable sans DOM).
|
|
217
|
+
* Appelée par `injectKtDialogOpener` à chaque ouverture ; exportée pour un usage direct éventuel.
|
|
218
|
+
*/
|
|
219
|
+
declare function resolveKtDialogPanelClass(presentation?: KtDialogPresentation, compact?: boolean): string[];
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Sucre typé pour récupérer les données injectées dans un composant de dialogue (`DIALOG_DATA`).
|
|
223
|
+
* À appeler en contexte d'injection (ex. initialiseur de champ).
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```ts
|
|
227
|
+
* interface RenameData { currentName: string; }
|
|
228
|
+
*
|
|
229
|
+
* @Component({ … })
|
|
230
|
+
* export class RenameDialog {
|
|
231
|
+
* protected readonly data = injectKtDialogData<RenameData>();
|
|
232
|
+
* // this.data.currentName → string
|
|
233
|
+
* }
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
declare function injectKtDialogData<T>(): T;
|
|
237
|
+
/** Config d'ouverture sans le champ `data` (fourni séparément, typé), enrichie de `presentation`. */
|
|
238
|
+
type OpenerConfig<D, R, C> = Omit<DialogConfig<D, DialogRef<R, C>>, 'data'> & {
|
|
239
|
+
/** Présentation du dialog (cf. `KtDialogPresentation`) — choisie par le dev. Résolue à CHAQUE
|
|
240
|
+
ouverture : les variantes responsive lisent le signal d'écran compact. Défaut : `'centered'`.
|
|
241
|
+
Combinée à un éventuel `panelClass` additionnel. */
|
|
242
|
+
presentation?: KtDialogPresentation;
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Crée un ouvreur de dialog **typé et centralisé**, en contexte d'injection.
|
|
246
|
+
* Le contrat (composant + type de `data` + type de résultat + config par défaut) est défini
|
|
247
|
+
* UNE fois ; l'ouvreur renvoyé est une closure appelable ensuite n'importe où dans la classe
|
|
248
|
+
* (handlers compris), 100 % typée, sans nouvel `inject`.
|
|
249
|
+
*
|
|
250
|
+
* Conserve le `ViewContainerRef` du contexte appelant (le dialog hérite donc de l'arbre logique
|
|
251
|
+
* d'injection), reste testable (TestBed fournit `Dialog`) et sans état global (SSR-safe).
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* // co-localisé avec le composant
|
|
255
|
+
* export const injectRenameDialog = () =>
|
|
256
|
+
* injectKtDialogOpener<RenameDialog, RenameData, string>(RenameDialog, { autoFocus: '[ktDialogFocusInitial]' });
|
|
257
|
+
*
|
|
258
|
+
* // dans un composant/service consommateur
|
|
259
|
+
* private readonly openRename = injectRenameDialog();
|
|
260
|
+
* rename() { this.openRename({ currentName: 'X' }).closed.subscribe(n => { n: string | undefined }); }
|
|
261
|
+
*/
|
|
262
|
+
declare function injectKtDialogOpener<C, R = unknown>(component: ComponentType<C>, baseConfig?: OpenerConfig<void, R, C>): () => DialogRef<R, C>;
|
|
263
|
+
declare function injectKtDialogOpener<C, D, R = unknown>(component: ComponentType<C>, baseConfig?: OpenerConfig<D, R, C>): (data: D, config?: OpenerConfig<D, R, C>) => DialogRef<R, C>;
|
|
264
|
+
|
|
265
|
+
declare class KtDialogContainer extends CdkDialogContainer implements OnInit {
|
|
266
|
+
private readonly dialogRef;
|
|
267
|
+
private readonly elementRef;
|
|
268
|
+
private readonly host;
|
|
269
|
+
private readonly platformId;
|
|
270
|
+
protected readonly isClosing: i0.WritableSignal<boolean>;
|
|
271
|
+
constructor();
|
|
272
|
+
ngOnInit(): void;
|
|
273
|
+
protected isSheet(): boolean;
|
|
274
|
+
private animateAndClose;
|
|
275
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<KtDialogContainer, never>;
|
|
276
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<KtDialogContainer, "kt-dialog-container", never, {}, {}, never, never, true, never>;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Import ergonomique de toute la famille dialog en une fois :
|
|
281
|
+
* `imports: [KT_DIALOG]` au lieu d'énumérer chaque directive structurelle.
|
|
282
|
+
*/
|
|
283
|
+
declare const KT_DIALOG: readonly [typeof KtDialogHeader, typeof KtDialogTitle, typeof KtDialogDescription, typeof KtDialogContent, typeof KtDialogActions, typeof KtDialogClose, typeof KtDialogFocusInitial, typeof KtDialogSheetHandle];
|
|
284
|
+
|
|
285
|
+
export { KT_DIALOG, KT_DIALOG_AAA_DEFAULTS, KtDialogActions, KtDialogClose, KtDialogContainer, KtDialogContent, KtDialogDescription, KtDialogFocusInitial, KtDialogHeader, KtDialogSheetHandle, KtDialogTitle, injectKtDialogData, injectKtDialogOpener, provideKtDialogDefaults, resolveKtDialogPanelClass };
|
|
286
|
+
export type { KtDialogPresentation };
|