@ktortu/aaa 0.9.9 → 0.10.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/README.md +40 -3
- package/dialog/dialog.css +85 -0
- package/fesm2022/ktortu-aaa-dialog.mjs +172 -13
- package/fesm2022/ktortu-aaa-dialog.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-i18n.mjs +7 -0
- package/fesm2022/ktortu-aaa-i18n.mjs.map +1 -1
- package/fesm2022/ktortu-aaa-icon.mjs +174 -0
- package/fesm2022/ktortu-aaa-icon.mjs.map +1 -0
- package/fesm2022/ktortu-aaa-layout.mjs +12 -2
- package/fesm2022/ktortu-aaa-layout.mjs.map +1 -1
- package/fesm2022/ktortu-aaa.mjs +1 -0
- package/fesm2022/ktortu-aaa.mjs.map +1 -1
- package/icon/icon.css +52 -0
- package/package.json +5 -1
- package/styles/icon.css +7 -0
- package/styles/styles.css +1 -0
- package/types/ktortu-aaa-dialog.d.ts +92 -7
- package/types/ktortu-aaa-i18n.d.ts +3 -0
- package/types/ktortu-aaa-icon.d.ts +158 -0
- package/types/ktortu-aaa-layout.d.ts +11 -1
- package/types/ktortu-aaa.d.ts +1 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Définition d'une police d'icônes **à ligatures** enregistrée dans le registre (cf.
|
|
6
|
+
* {@link KtIconConfig}). Le registre ne charge AUCUNE police : il se contente d'associer un alias
|
|
7
|
+
* court à la famille CSS réelle (à vous de charger le fichier de police, façon « apportez la vôtre »).
|
|
8
|
+
*/
|
|
9
|
+
interface KtIconFont {
|
|
10
|
+
/** Famille de police CSS réelle (ex. `'Material Symbols Rounded'`). Valeur `font-family` brute :
|
|
11
|
+
si elle commence par un chiffre ou contient des caractères spéciaux, la citer vous-même. */
|
|
12
|
+
family: string;
|
|
13
|
+
/** Graisse par défaut de cette police (ex. `300` ou `'normal'`). @default hérité de `--kt-icon-font-weight` */
|
|
14
|
+
weight?: string | number;
|
|
15
|
+
/** `font-variation-settings` par défaut (polices variables, ex. `"'FILL' 0, 'wght' 300"`). @default `normal` */
|
|
16
|
+
variationSettings?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Défauts applicables à toutes les icônes `[ktIcon]` (registre de polices + police par défaut),
|
|
20
|
+
* fournis via {@link provideKtIcon}. Fourni en `Partial` : on ne déclare que ce qu'on veut.
|
|
21
|
+
*/
|
|
22
|
+
interface KtIconConfig {
|
|
23
|
+
/** Registre `alias → police`. L'alias est ensuite choisi sur la primitive via `[font]`. */
|
|
24
|
+
fonts: Record<string, KtIconFont>;
|
|
25
|
+
/** Alias utilisé quand aucune police n'est précisée sur la primitive (`[font]` absent). */
|
|
26
|
+
defaultFont: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Interface d'**enregistrement des alias de POLICE** à augmenter côté application pour typer l'input
|
|
30
|
+
* `[font]` et obtenir son **autocomplétion** dans les templates. Vide par défaut : sans augmentation,
|
|
31
|
+
* `[font]` accepte n'importe quelle chaîne (dégradation gracieuse, zéro config).
|
|
32
|
+
*
|
|
33
|
+
* Nommée `KtIconFontRegistry` (et non `KtIconRegistry`) à dessein : le nom générique reste réservé à
|
|
34
|
+
* un futur registre de **noms d'icônes** (SVG), qui bénéficiera du même mécanisme.
|
|
35
|
+
*
|
|
36
|
+
* @example Recette à source unique (le même objet type ET fournit le registre) :
|
|
37
|
+
* ```ts
|
|
38
|
+
* // app-icons.ts
|
|
39
|
+
* export const APP_ICON_FONTS = {
|
|
40
|
+
* material: { family: 'Material Symbols Outlined' },
|
|
41
|
+
* rounded: { family: 'Material Symbols Rounded', variationSettings: "'FILL' 0, 'wght' 300" },
|
|
42
|
+
* } as const;
|
|
43
|
+
*
|
|
44
|
+
* declare module '@ktortu/aaa/icon' {
|
|
45
|
+
* // Injecte les clés de APP_ICON_FONTS comme alias connus → autocomplétion de [font].
|
|
46
|
+
* // eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
47
|
+
* interface KtIconFontRegistry extends Record<keyof typeof APP_ICON_FONTS, unknown> {}
|
|
48
|
+
* }
|
|
49
|
+
*
|
|
50
|
+
* // app.config.ts
|
|
51
|
+
* providers: [provideKtIcon({ fonts: APP_ICON_FONTS, defaultFont: 'material' })];
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
interface KtIconFontRegistry {
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Alias de police connus : l'union des clés de {@link KtIconFontRegistry} une fois augmentée, sinon
|
|
58
|
+
* `string` (registre vide → chaîne libre). Le tuple `[…] extends […]` évite la distribution du
|
|
59
|
+
* conditionnel sur l'union.
|
|
60
|
+
*/
|
|
61
|
+
type KtIconFontAlias = [keyof KtIconFontRegistry] extends [never] ? string : keyof KtIconFontRegistry;
|
|
62
|
+
declare const KT_ICON_CONFIG: InjectionToken<Partial<KtIconConfig>>;
|
|
63
|
+
/**
|
|
64
|
+
* Fournit un registre de polices d'icônes (alias → famille) et l'alias par défaut, pour un
|
|
65
|
+
* sous-arbre ou l'application entière. Combiné à l'augmentation de {@link KtIconFontRegistry}, il
|
|
66
|
+
* offre l'autocomplétion typée de l'input `[font]`.
|
|
67
|
+
*
|
|
68
|
+
* `defaultFont` est **contraint aux clés de `fonts`** passées dans le même appel : un typo devient
|
|
69
|
+
* une erreur de compilation (pas de repli silencieux de toutes les icônes sur la police globale).
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* providers: [
|
|
74
|
+
* provideKtIcon({
|
|
75
|
+
* fonts: {
|
|
76
|
+
* material: { family: 'Material Symbols Outlined' },
|
|
77
|
+
* rounded: { family: 'Material Symbols Rounded' },
|
|
78
|
+
* },
|
|
79
|
+
* defaultFont: 'material', // 'rouded' → erreur TS
|
|
80
|
+
* }),
|
|
81
|
+
* ];
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
declare function provideKtIcon<F extends Record<string, KtIconFont>>(config: {
|
|
85
|
+
fonts?: F;
|
|
86
|
+
defaultFont?: keyof F & string;
|
|
87
|
+
}): Provider;
|
|
88
|
+
/**
|
|
89
|
+
* Primitive d'icône **autonome** : pose une icône seule (en-tête, item de liste, badge d'état…),
|
|
90
|
+
* là où le bouton et les champs ne suffisent pas. Directive présentationnelle — **jamais focusable
|
|
91
|
+
* ni cliquable** (pour une icône cliquable, utilisez `ktButton iconOnly`).
|
|
92
|
+
*
|
|
93
|
+
* Sélecteur d'attribut `[ktIcon]` (camelCase) ; l'hôte reçoit la classe stable `.kt-icon` (cible du
|
|
94
|
+
* style et du harness). Ne pas confondre avec le slot de projection `[kt-icon]` (kebab) de
|
|
95
|
+
* `kt-nav-item`, qui est un autre mécanisme.
|
|
96
|
+
*
|
|
97
|
+
* Deux régimes, comme dans le reste de la lib :
|
|
98
|
+
* - **Ligature** (`[ktIcon]="nom"`) : le nom devient un glyphe via une police d'icônes à ligatures
|
|
99
|
+
* (défaut `--kt-icon-font` → Material Symbols Outlined). Choisissez une autre police enregistrée
|
|
100
|
+
* via `[font]`.
|
|
101
|
+
* - **Projection** (set à classes, ex. Font Awesome, ou SVG en ligne) : laissez `ktIcon` vide et
|
|
102
|
+
* projetez votre markup dans l'élément ; la primitive ne fait que l'habiller (taille, couleur
|
|
103
|
+
* héritée, alignement). Le contenu projeté **ne doit jamais être focusable** (l'hôte décoratif
|
|
104
|
+
* porte `aria-hidden` : un descendant focusable violerait WCAG 4.1.2).
|
|
105
|
+
*
|
|
106
|
+
* Accessibilité : **décorative par défaut** (`aria-hidden`). Fournissez `[ariaLabel]` (ou un
|
|
107
|
+
* `aria-label` natif) pour une icône **porteuse de sens** (bascule en `role="img"`).
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```html
|
|
111
|
+
* <!-- Ligature autonome, taille et couleur héritées du contexte ; `fill` = version remplie -->
|
|
112
|
+
* <span ktIcon="home"></span>
|
|
113
|
+
* <span ktIcon="favorite" fill size="2rem" style="color: var(--kt-primary)"></span>
|
|
114
|
+
*
|
|
115
|
+
* <!-- Set à classes (Font Awesome) : projection, ktIcon reste vide -->
|
|
116
|
+
* <span ktIcon><i class="fa-solid fa-user"></i></span>
|
|
117
|
+
*
|
|
118
|
+
* <!-- Icône porteuse de sens (nommée pour les lecteurs d'écran) -->
|
|
119
|
+
* <span ktIcon="error" ariaLabel="Erreur" style="color: var(--kt-danger)"></span>
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
declare class KtIcon {
|
|
123
|
+
private readonly config;
|
|
124
|
+
private readonly auditEnabled;
|
|
125
|
+
private readonly platformId;
|
|
126
|
+
private readonly host;
|
|
127
|
+
private readonly nativeAriaLabel;
|
|
128
|
+
/** Nom de l'icône (ligature). Laisser vide pour projeter un set à classes / un SVG. @default '' */
|
|
129
|
+
readonly ktIcon: _angular_core.InputSignal<string>;
|
|
130
|
+
/** Alias de police d'icônes du registre (cf. {@link provideKtIcon}). @default `KtIconConfig.defaultFont` */
|
|
131
|
+
readonly font: _angular_core.InputSignal<string | undefined>;
|
|
132
|
+
/** Nom accessible : le fournir rend l'icône **porteuse de sens** (`role="img"`). Aligné sur `ktButton`.
|
|
133
|
+
@default undefined (icône décorative ; un `aria-label` natif reste toutefois préservé) */
|
|
134
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
135
|
+
/** Taille de l'icône (longueur CSS, ex. `'24px'`, `'2rem'`, `'1.5em'`). @default `1.25em` (héritée du contexte) */
|
|
136
|
+
readonly size: _angular_core.InputSignal<string | undefined>;
|
|
137
|
+
/** Version **remplie** plutôt que contour, pour les polices variables à axe `FILL` (Material Symbols).
|
|
138
|
+
Force `FILL` à 1 en préservant les autres axes (graisse…) ; sans effet sur une police sans cet axe.
|
|
139
|
+
Nécessite une police chargée **avec l'axe FILL ajustable** (ex. Google Fonts :
|
|
140
|
+
`…Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200`).
|
|
141
|
+
@default false (contour) */
|
|
142
|
+
readonly fill: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
143
|
+
/** Nom rendu en ligature : coupé, `null` si vide (aucun `::before`, laisse place à la projection). */
|
|
144
|
+
protected readonly renderedName: _angular_core.Signal<string | null>;
|
|
145
|
+
/** Libellé accessible résolu : input prioritaire, sinon `aria-label` natif préservé, sinon `null` (décorative). */
|
|
146
|
+
protected readonly accessibleLabel: _angular_core.Signal<string | null>;
|
|
147
|
+
/** Police résolue depuis le registre : alias explicite, sinon police par défaut du provider. */
|
|
148
|
+
private readonly resolvedFont;
|
|
149
|
+
protected readonly resolvedFamily: _angular_core.Signal<string | null>;
|
|
150
|
+
protected readonly resolvedWeight: _angular_core.Signal<string | null>;
|
|
151
|
+
protected readonly resolvedVariation: _angular_core.Signal<string | null>;
|
|
152
|
+
constructor();
|
|
153
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtIcon, never>;
|
|
154
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KtIcon, "[ktIcon]", never, { "ktIcon": { "alias": "ktIcon"; "required": false; "isSignal": true; }; "font": { "alias": "font"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export { KT_ICON_CONFIG, KtIcon, provideKtIcon };
|
|
158
|
+
export type { KtIconConfig, KtIconFont, KtIconFontAlias, KtIconFontRegistry };
|
|
@@ -77,11 +77,21 @@ declare class KtToolbarComponent {
|
|
|
77
77
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtToolbarComponent, "kt-toolbar", never, {}, {}, never, ["*"], true, never>;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Item de navigation : projette une icône dans son slot dédié + un libellé.
|
|
82
|
+
*
|
|
83
|
+
* Le slot d'icône accepte :
|
|
84
|
+
* - la directive `[ktIcon]` (primitive d'icône `@ktortu/aaa/icon`), forme canonique.
|
|
85
|
+
* - l'attribut de projection `kt-icon` (historique/legacy).
|
|
86
|
+
*
|
|
87
|
+
* Note : la classe `.kt-icon` (posée à l'exécution par la directive) n'est PAS un critère de
|
|
88
|
+
* projection valable (ng-content matche la forme statique du template) — d'où le sélecteur d'attribut.
|
|
89
|
+
*/
|
|
80
90
|
declare class KtNavItemComponent {
|
|
81
91
|
label: _angular_core.InputSignal<string>;
|
|
82
92
|
protected readonly layout: KtLayoutService;
|
|
83
93
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KtNavItemComponent, never>;
|
|
84
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtNavItemComponent, "kt-nav-item", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; }, {}, never, ["[kt-icon]", "*"], true, never>;
|
|
94
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KtNavItemComponent, "kt-nav-item", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; }, {}, never, ["[ktIcon], [kt-icon]", "*"], true, never>;
|
|
85
95
|
}
|
|
86
96
|
|
|
87
97
|
/**
|
package/types/ktortu-aaa.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from '@ktortu/aaa/dialog';
|
|
|
5
5
|
export * from '@ktortu/aaa/disclosure';
|
|
6
6
|
export * from '@ktortu/aaa/forms';
|
|
7
7
|
export * from '@ktortu/aaa/i18n';
|
|
8
|
+
export * from '@ktortu/aaa/icon';
|
|
8
9
|
export * from '@ktortu/aaa/menu';
|
|
9
10
|
export * from '@ktortu/aaa/snackbar';
|
|
10
11
|
export * from '@ktortu/aaa/tabs';
|