@starterlib/ui 0.10.14 → 0.11.1

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.
Files changed (57) hide show
  1. package/README.md +140 -33
  2. package/assets/icones/catalogue.json +199 -4
  3. package/assets/icones/sprite.svg +14 -0
  4. package/fesm2022/starterlib-ui-arbre.mjs +25 -25
  5. package/fesm2022/starterlib-ui-arbre.mjs.map +1 -1
  6. package/fesm2022/starterlib-ui-donnees.mjs +760 -274
  7. package/fesm2022/starterlib-ui-donnees.mjs.map +1 -1
  8. package/fesm2022/starterlib-ui-etats.mjs +82 -82
  9. package/fesm2022/starterlib-ui-etats.mjs.map +1 -1
  10. package/fesm2022/starterlib-ui-force.mjs +18 -0
  11. package/fesm2022/starterlib-ui-force.mjs.map +1 -0
  12. package/fesm2022/starterlib-ui-formulaires.mjs +218 -218
  13. package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
  14. package/fesm2022/starterlib-ui-graphiques.mjs +934 -0
  15. package/fesm2022/starterlib-ui-graphiques.mjs.map +1 -0
  16. package/fesm2022/starterlib-ui-indicateurs.mjs +59 -59
  17. package/fesm2022/starterlib-ui-indicateurs.mjs.map +1 -1
  18. package/fesm2022/starterlib-ui-libelles-en.mjs +12 -0
  19. package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -1
  20. package/fesm2022/starterlib-ui-listes.mjs +727 -315
  21. package/fesm2022/starterlib-ui-listes.mjs.map +1 -1
  22. package/fesm2022/starterlib-ui-messagerie.mjs +45 -45
  23. package/fesm2022/starterlib-ui-messagerie.mjs.map +1 -1
  24. package/fesm2022/starterlib-ui-mise-en-page.mjs +46 -46
  25. package/fesm2022/starterlib-ui-mise-en-page.mjs.map +1 -1
  26. package/fesm2022/starterlib-ui-navigation.mjs +201 -42
  27. package/fesm2022/starterlib-ui-navigation.mjs.map +1 -1
  28. package/fesm2022/starterlib-ui-onglets.mjs +20 -20
  29. package/fesm2022/starterlib-ui-onglets.mjs.map +1 -1
  30. package/fesm2022/starterlib-ui-parcours.mjs +632 -168
  31. package/fesm2022/starterlib-ui-parcours.mjs.map +1 -1
  32. package/fesm2022/starterlib-ui-qr.mjs +11 -11
  33. package/fesm2022/starterlib-ui-qr.mjs.map +1 -1
  34. package/fesm2022/starterlib-ui-saisie.mjs +693 -515
  35. package/fesm2022/starterlib-ui-saisie.mjs.map +1 -1
  36. package/fesm2022/starterlib-ui-selection.mjs +64 -64
  37. package/fesm2022/starterlib-ui-selection.mjs.map +1 -1
  38. package/fesm2022/starterlib-ui-sens.mjs +3 -3
  39. package/fesm2022/starterlib-ui-surfaces.mjs +246 -242
  40. package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
  41. package/fesm2022/starterlib-ui-virtuel.mjs +17 -17
  42. package/fesm2022/starterlib-ui-virtuel.mjs.map +1 -1
  43. package/fesm2022/starterlib-ui.mjs +1290 -938
  44. package/fesm2022/starterlib-ui.mjs.map +1 -1
  45. package/package.json +27 -3
  46. package/styles/amorce.css +304 -2
  47. package/types/starterlib-ui-donnees.d.ts +231 -5
  48. package/types/starterlib-ui-force.d.ts +19 -0
  49. package/types/starterlib-ui-graphiques.d.ts +421 -0
  50. package/types/starterlib-ui-indicateurs.d.ts +11 -4
  51. package/types/starterlib-ui-listes.d.ts +230 -13
  52. package/types/starterlib-ui-navigation.d.ts +82 -1
  53. package/types/starterlib-ui-parcours.d.ts +265 -5
  54. package/types/starterlib-ui-saisie.d.ts +142 -11
  55. package/types/starterlib-ui-selection.d.ts +1 -1
  56. package/types/starterlib-ui-surfaces.d.ts +10 -9
  57. package/types/starterlib-ui.d.ts +294 -32
@@ -1,8 +1,9 @@
1
1
  import { ApiError, EtatDeCeremonie, LectureDeCeremonie, MoyenDeCeremonie, TonSemantique } from "@starterlib/util";
2
2
  import * as i0 from "@angular/core";
3
- import { InjectionToken, Signal } from "@angular/core";
4
- import { AnnonceLocale, Icone, NiveauDeTitre } from "@starterlib/ui";
3
+ import { InjectionToken, Provider, Signal } from "@angular/core";
4
+ import { AnnonceLocale, CatalogueDuPointDEntree, Icone, NiveauDeTitre, NomDIcone } from "@starterlib/ui";
5
5
  import { DispositionDActions, ErreurAffichable } from "@starterlib/ui/saisie";
6
+ import { TonDeStatut } from "@starterlib/ui/indicateurs";
6
7
  /**
7
8
  * Un refus du serveur, en banniere, au-dessus de ce qu'il refuse (lot 261) : un virement (plafond,
8
9
  * solde), une demande KYC, une connexion. Le patron que chaque formulaire recopiait (`id-refus`).
@@ -64,7 +65,7 @@ export declare class StRefusal {
64
65
  private readonly decompte;
65
66
  protected readonly variante: import("@angular/core").Signal<import("@starterlib/util").VarianteDErreur>;
66
67
  private readonly rejouableSelonLaTable;
67
- protected readonly ton: import("@angular/core").Signal<"avertissement" | "danger">;
68
+ protected readonly ton: import("@angular/core").Signal<"avertissement" | "erreur">;
68
69
  protected readonly titreLu: import("@angular/core").Signal<string | null>;
69
70
  /** Les secondes d'un 429, quand le serveur les donne. */
70
71
  protected readonly attente: import("@angular/core").Signal<number | null>;
@@ -164,7 +165,7 @@ export declare class StOutcome {
164
165
  readonly niveauDuTitre: import("@angular/core").InputSignal<NiveauDeTitre>;
165
166
  readonly disposition: import("@angular/core").InputSignal<DispositionDIssue>;
166
167
  protected readonly ton: import("@angular/core").Signal<TonSemantique>;
167
- protected readonly icone: import("@angular/core").Signal<"horloge" | "badge-coche" | "bouclier-coche" | "cercle-alerte" | "cercle-coche" | "cercle-croix" | "cercle-info" | "cercle-question" | "cloche" | "epingle" | "etoile" | "grille" | "marque-page" | "octogone-alerte" | "triangle-alerte">;
168
+ protected readonly icone: import("@angular/core").Signal<"essai" | "horloge" | "badge-coche" | "bouclier-coche" | "cercle-alerte" | "cercle-coche" | "cercle-croix" | "cercle-info" | "cercle-question" | "cloche" | "epingle" | "etoile" | "grille" | "marque-page" | "octogone-alerte" | "triangle-alerte">;
168
169
  /** Le mot de l'issue, lu avant le titre. */
169
170
  protected readonly mot: import("@angular/core").Signal<string>;
170
171
  protected readonly etiquetteDeReferenceLue: import("@angular/core").Signal<string>;
@@ -967,7 +968,7 @@ export declare class StRecoveryCodes {
967
968
  protected readonly tousLesCodes: import("@angular/core").Signal<string>;
968
969
  protected readonly raisonDeLAttente: import("@angular/core").Signal<string>;
969
970
  /** Le compteur alerte quand il ne reste presque plus de codes. */
970
- protected readonly tonDuCompteur: import("@angular/core").Signal<"avertissement" | "danger" | "neutre">;
971
+ protected readonly tonDuCompteur: import("@angular/core").Signal<"avertissement" | "neutre" | "danger">;
971
972
  constructor();
972
973
  protected copier(): void;
973
974
  /** Garde du double clic : `chargement` avale deja les clics du bouton, la methode aussi. */
@@ -1032,5 +1033,264 @@ export declare class StRecoveryCodes {
1032
1033
  "regeneration": "regeneration";
1033
1034
  }, never, never, true, never>;
1034
1035
  }
1036
+ /**
1037
+ * La demande de modification d'une valeur gouvernee (P08-13) : ce que le modele d'un formulaire
1038
+ * Signal Forms porte, la valeur proposee et son motif.
1039
+ *
1040
+ * ```ts
1041
+ * readonly demande = form(signal<DemandeDeModification<bigint | null>>({ valeur: null, motif: '' }),
1042
+ * (chemin) => {
1043
+ * required(chemin.valeur);
1044
+ * validate(chemin.valeur, ({ value }) => erreurHorsPlage(value(), { min: 10_000n, max: 500_000n }));
1045
+ * required(chemin.motif);
1046
+ * validate(chemin.motif, ({ value }) => erreurDeMotif(value(), 20));
1047
+ * });
1048
+ * ```
1049
+ */
1050
+ export interface DemandeDeModification<TValeur> {
1051
+ readonly valeur: TValeur;
1052
+ readonly motif: string;
1053
+ }
1054
+ /**
1055
+ * Le cycle de vie d'une demande, calcule par le SERVEUR, jamais par le composant : `brouillon`
1056
+ * (saisie), `previsualise` (l'effet calcule est montre), `attente-seconde-validation`,
1057
+ * `seconde-validation-suspendue` (la regle a deux personnes ne s'applique pas, l'effectif le dit),
1058
+ * `programme` (effet differe, a sa date), `publie`, `refuse`.
1059
+ */
1060
+ export type EtatDeDemande = 'brouillon' | 'previsualise' | 'attente-seconde-validation' | 'seconde-validation-suspendue' | 'programme' | 'publie' | 'refuse';
1061
+ /** Le sens de l'effet, fourni par le serveur : un assouplissement attend, un resserrement non. */
1062
+ export type SensDeDemande = 'assouplissement' | 'resserrement';
1063
+ /** L'effet d'une demande, fourni : immediat, ou differe a sa date (ISO 8601, avec son decalage). */
1064
+ export type EffetDeDemande = {
1065
+ readonly nature: 'immediat';
1066
+ readonly sens: SensDeDemande;
1067
+ } | {
1068
+ readonly nature: 'differe';
1069
+ readonly sens: SensDeDemande;
1070
+ readonly date: string;
1071
+ };
1072
+ /** La plage de surete, telle que l'application l'ecrit (« 100,00 € », « 5 000,00 € »). */
1073
+ export interface PlageDeDemande {
1074
+ readonly min: string;
1075
+ readonly max: string;
1076
+ }
1077
+ /** Un refus du serveur : l'erreur telle que le noyau la rend, et le message que l'application en tire. */
1078
+ export interface RefusDeDemande {
1079
+ readonly erreur: ApiError;
1080
+ readonly message: string;
1081
+ /** Un code que l'application ne connait pas : la trace se montre (`st-refusal`). */
1082
+ readonly codeInconnu?: boolean;
1083
+ }
1084
+ /** Une valeur hors de sa plage : la borne franchie, que le message cite. */
1085
+ export type ErreurDePlage<TValeur extends number | bigint> = {
1086
+ readonly kind: 'min';
1087
+ readonly min: TValeur;
1088
+ } | {
1089
+ readonly kind: 'max';
1090
+ readonly max: TValeur;
1091
+ };
1092
+ /** Les bornes d'une valeur gouvernee, livrees par le serveur ; l'une ou l'autre peut manquer. */
1093
+ export interface BornesDeValeur<TValeur extends number | bigint> {
1094
+ readonly min?: TValeur;
1095
+ readonly max?: TValeur;
1096
+ }
1097
+ /**
1098
+ * La borne qu'une valeur franchit, ou `null` : pour un nombre comme pour un montant en unites
1099
+ * mineures (`bigint`), dont `st-amount-field` dit la borne en devise (« au plus 5 000,00 € »).
1100
+ * Une valeur absente n'en franchit aucune : `required()` la refuse.
1101
+ *
1102
+ * ```ts
1103
+ * validate(chemin.valeur, ({ value }) => erreurHorsPlage(value(), { min: 10_000n, max: 500_000n }));
1104
+ * ```
1105
+ *
1106
+ * Pour un nombre saisi par `st-number-field`, `min()` et `max()` de Signal Forms font de meme ET
1107
+ * posent les bornes du champ, ou ses pas s'arretent.
1108
+ */
1109
+ export declare function erreurHorsPlage<TValeur extends number | bigint>(valeur: TValeur | null, bornes: BornesDeValeur<TValeur>): ErreurDePlage<TValeur> | null;
1110
+ /** La longueur minimale d'un motif quand l'application n'en donne pas : de quoi dire pourquoi. */
1111
+ export declare const MOTIF_MINIMUM = 10;
1112
+ /**
1113
+ * L'erreur du motif d'une demande, ou `null` : obligatoire, et `minimum` caracteres au moins SANS
1114
+ * les blancs de bord (dix espaces ne disent rien). Les genres sont ceux du socle (`required`,
1115
+ * `minLength`) : le message est celui de tous les champs.
1116
+ *
1117
+ * ```ts
1118
+ * required(chemin.motif);
1119
+ * validate(chemin.motif, ({ value }) => erreurDeMotif(value(), 20));
1120
+ * ```
1121
+ */
1122
+ export declare function erreurDeMotif(valeur: string, minimum?: number): {
1123
+ readonly kind: 'required';
1124
+ } | {
1125
+ readonly kind: 'minLength';
1126
+ readonly minLength: number;
1127
+ } | null;
1128
+ /**
1129
+ * Les libelles de `@starterlib/ui/parcours` (P08-13) : le catalogue par point d'entree (AD-10,
1130
+ * D154), comme ceux des donnees et des graphiques. La langue suit celle du dictionnaire du tronc ;
1131
+ * les patrons plus anciens du point d'entree lisent encore le dictionnaire du tronc.
1132
+ */
1133
+ export interface LibellesParcours {
1134
+ /** Le mot de chaque etat d'une demande (`st-change-request`), sur sa pastille. */
1135
+ readonly etatsDeDemande: Readonly<Record<EtatDeDemande, string>>;
1136
+ /** Le mot de chaque sens d'effet. */
1137
+ readonly sensDeDemande: Readonly<Record<SensDeDemande, string>>;
1138
+ readonly valeurActuelle: string;
1139
+ readonly plageAutorisee: string;
1140
+ /** La plage de surete, ses bornes deja ecrites par l'application (« de 100,00 € a 5 000,00 € »). */
1141
+ readonly plage: (min: string, max: string) => string;
1142
+ readonly effet: string;
1143
+ readonly effetImmediat: string;
1144
+ readonly effetDiffere: string;
1145
+ readonly priseDEffet: string;
1146
+ /** La legende du groupe de la valeur proposee et du motif. */
1147
+ readonly proposition: string;
1148
+ /** Le titre de l'emplacement ou l'application montre l'effet calcule par le serveur. */
1149
+ readonly previsualisation: string;
1150
+ /** Pourquoi la saisie est figee apres une previsualisation ou un refus. */
1151
+ readonly rouvrirPourModifier: string;
1152
+ /** Pourquoi la saisie est figee une fois la demande envoyee. */
1153
+ readonly demandeEnvoyee: string;
1154
+ readonly attenteDeSecondeValidation: string;
1155
+ readonly secondeValidationSuspendue: string;
1156
+ readonly previsualiser: string;
1157
+ readonly soumettre: string;
1158
+ readonly modifier: string;
1159
+ readonly annuler: string;
1160
+ /** L'annonce d'un changement d'etat (« Demande : programmee »). */
1161
+ readonly etatDeLaDemande: (etat: string) => string;
1162
+ }
1163
+ export declare const LIBELLES_PARCOURS_FR: LibellesParcours;
1164
+ export declare const LIBELLES_PARCOURS_EN: LibellesParcours;
1165
+ /**
1166
+ * Les catalogues du parcours par langue (sous-etiquette primaire : `fr`, `en`). Une application qui
1167
+ * ajoute une langue au dictionnaire du tronc ajoute la sienne ici, par
1168
+ * `fournirLibellesParcours({ de: ... })`.
1169
+ */
1170
+ export declare const ST_LIBELLES_PARCOURS: InjectionToken<Readonly<Record<string, LibellesParcours>>>;
1171
+ /** Ajoute (ou remplace) des catalogues du parcours, par langue. */
1172
+ export declare function fournirLibellesParcours(catalogues: Readonly<Record<string, LibellesParcours>>): Provider;
1173
+ /**
1174
+ * Le catalogue de la langue du dictionnaire du tronc ; le francais quand la langue n'en a pas, un
1175
+ * repli signale en developpement (D-29). A appeler dans un contexte d'injection.
1176
+ */
1177
+ export declare function libellesDuParcours(): Signal<LibellesParcours>;
1178
+ /**
1179
+ * Le catalogue du parcours ET la langue de son repli (`catalogueDuPointDEntree`) : `lang` de ce qu'il
1180
+ * ecrit seul (D-29). A appeler dans un contexte d'injection.
1181
+ */
1182
+ export declare function catalogueDuParcours(): Signal<CatalogueDuPointDEntree<LibellesParcours>>;
1183
+ /**
1184
+ * Demander la modification d'une valeur GOUVERNEE (P08-13) : un plafond, un seuil, une duree. Un
1185
+ * seul patron, au lieu d'ecrans qui reinventeraient la plage de surete, le delai, le motif et la
1186
+ * previsualisation.
1187
+ *
1188
+ * ```html
1189
+ * <form [stForm]="demande" [envoyerAvec]="envoyer">
1190
+ * <st-change-request titre="Plafond de retrait quotidien" [etat]="etat()" [effet]="effet()"
1191
+ * [plage]="{ min: '100,00 €', max: '5 000,00 €' }" [refus]="refus()"
1192
+ * (modification)="etat.set('brouillon')" (annulation)="annuler()">
1193
+ * <st-money actuelle [valeur]="plafond()" />
1194
+ * <st-amount-field champ libelle="Nouveau plafond" devise="EUR" [formField]="demande.valeur" />
1195
+ * <st-textarea motif libelle="Motif" [formField]="demande.motif" />
1196
+ * <div previsualisation>...</div>
1197
+ * </st-change-request>
1198
+ * </form>
1199
+ * ```
1200
+ *
1201
+ * - **Le serveur juge seul** : il livre les bornes, le sens et la date de l'effet, et l'etat (sept,
1202
+ * chacun en mot et en forme) ; le composant ne calcule RIEN de metier. La regle a deux personnes
1203
+ * peut etre suspendue : le composant le montre, il ne le decide pas.
1204
+ * - **Un formulaire Signal Forms** de l'application (`form[stForm]`), ou les champs sont PROJETES :
1205
+ * la valeur proposee (`[champ]`) et le motif (`[motif]`), lies par `[formField]`. Les regles du
1206
+ * schema rendent la plage infranchissable (`min()` et `max()`, ou `erreurHorsPlage` pour un
1207
+ * montant ; le message cite la borne) et le motif obligatoire (`erreurDeMotif`). Le recapitulatif
1208
+ * d'erreurs est le sien ; un envoi invalide ne part pas.
1209
+ * - **Une action principale** qui ENVOIE le formulaire : « Previsualiser » au brouillon,
1210
+ * « Soumettre la demande » une fois l'effet montre ; `envoyerAvec` fait l'appel selon l'etat. Le
1211
+ * double clic est avale (`chargement`), la cle d'idempotence posee par l'intercepteur du socle.
1212
+ * - Apres la previsualisation, la saisie se fige (« Modifier la demande » la rouvre : `modification`)
1213
+ * ; envoyee, elle ne change plus, et « Annuler la demande » reste (`annulation`).
1214
+ * - Un changement d'etat s'annonce ; un refus prend le focus (`st-refusal`).
1215
+ */
1216
+ export declare class StChangeRequest {
1217
+ protected readonly catalogue: import("@angular/core").Signal<import("@starterlib/ui").CatalogueDuPointDEntree<import("@starterlib/ui/parcours").LibellesParcours>>;
1218
+ protected readonly annonce: AnnonceLocale;
1219
+ /** L'envoi du formulaire qui l'entoure (`form[stForm]`) : son recapitulatif et son chargement. */
1220
+ protected readonly envoi: import("@starterlib/ui/saisie").EtatDEnvoi | null;
1221
+ /** Ce qui se modifie (« Plafond de retrait quotidien »), deja traduit. */
1222
+ readonly titre: import("@angular/core").InputSignal<string>;
1223
+ /** 2 en tete de page, 3 ou 4 dans une section. */
1224
+ readonly niveauDuTitre: import("@angular/core").InputSignal<2 | 3 | 4>;
1225
+ /** L'etat calcule par le serveur. */
1226
+ readonly etat: import("@angular/core").InputSignal<EtatDeDemande>;
1227
+ /** Le sens et la nature de l'effet, fournis par le serveur. */
1228
+ readonly effet: import("@angular/core").InputSignal<EffetDeDemande | null>;
1229
+ /** La plage de surete, ses bornes ecrites par l'application. */
1230
+ readonly plage: import("@angular/core").InputSignal<PlageDeDemande | null>;
1231
+ /** Le refus du serveur, montre a l'etat `refuse`. */
1232
+ readonly refus: import("@angular/core").InputSignal<RefusDeDemande | null>;
1233
+ /** « Modifier la demande » : apres une previsualisation ou un refus, la saisie se rouvre. */
1234
+ readonly modification: import("@angular/core").OutputEmitterRef<void>;
1235
+ /** « Annuler la demande » : une demande envoyee, encore en attente ou programmee. */
1236
+ readonly annulation: import("@angular/core").OutputEmitterRef<void>;
1237
+ protected readonly identifiants: {
1238
+ readonly titre: `${string}-titre`;
1239
+ readonly gel: `${string}-gel`;
1240
+ readonly previsualisation: `${string}-previsualisation`;
1241
+ };
1242
+ protected readonly pastille: import("@angular/core").Signal<{
1243
+ readonly ton: TonDeStatut;
1244
+ readonly icone: NomDIcone;
1245
+ }>;
1246
+ protected readonly libelleDEtat: import("@angular/core").Signal<string>;
1247
+ /** La saisie se fige des que l'effet est montre : une valeur changee ne serait plus celle montree. */
1248
+ protected readonly fige: import("@angular/core").Signal<boolean>;
1249
+ protected readonly envoyee: import("@angular/core").Signal<boolean>;
1250
+ protected readonly rouvrable: import("@angular/core").Signal<boolean>;
1251
+ /** Pourquoi la saisie est figee : dite en aide du groupe, jamais tue. */
1252
+ protected readonly raisonDuGel: import("@angular/core").Signal<string | null>;
1253
+ protected readonly explication: import("@angular/core").Signal<string | null>;
1254
+ protected readonly enCours: import("@angular/core").Signal<boolean>;
1255
+ /** Le recapitulatif sous le titre : un niveau de plus, 4 au plus. */
1256
+ protected readonly niveauDuRecapitulatif: import("@angular/core").Signal<3 | 4>;
1257
+ constructor();
1258
+ static ɵfac: i0.ɵɵFactoryDeclaration<StChangeRequest, never>;
1259
+ static ɵcmp: i0.ɵɵComponentDeclaration<StChangeRequest, "st-change-request", never, {
1260
+ "titre": {
1261
+ "alias": "titre";
1262
+ "required": true;
1263
+ "isSignal": true;
1264
+ };
1265
+ "niveauDuTitre": {
1266
+ "alias": "niveauDuTitre";
1267
+ "required": false;
1268
+ "isSignal": true;
1269
+ };
1270
+ "etat": {
1271
+ "alias": "etat";
1272
+ "required": true;
1273
+ "isSignal": true;
1274
+ };
1275
+ "effet": {
1276
+ "alias": "effet";
1277
+ "required": false;
1278
+ "isSignal": true;
1279
+ };
1280
+ "plage": {
1281
+ "alias": "plage";
1282
+ "required": false;
1283
+ "isSignal": true;
1284
+ };
1285
+ "refus": {
1286
+ "alias": "refus";
1287
+ "required": false;
1288
+ "isSignal": true;
1289
+ };
1290
+ }, {
1291
+ "modification": "modification";
1292
+ "annulation": "annulation";
1293
+ }, never, ["[actuelle]", "[champ]", "[motif]", "[previsualisation]"], true, never>;
1294
+ }
1035
1295
 
1036
1296
  export {};