ngx-recipe-forms 0.1.2 → 0.1.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-recipe-forms",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Generic recipe-based form engine for Angular Signal Forms, styled with Tailwind",
6
6
  "keywords": [
@@ -868,6 +868,8 @@ export type RecipeUiTemplateType = RecipeTemplatedControlType | RecipeUiPartEnum
868
868
  export interface ResolveMessageInput {
869
869
  readonly errors: readonly RecipeValidationError[];
870
870
  readonly touched: boolean;
871
+ /** Valeur changée par la personne (`dirty()` de Signal Forms) ; `reset` la remet à faux. */
872
+ readonly dirty: boolean;
871
873
  readonly submitted: boolean;
872
874
  readonly fieldMessages?: Readonly<Partial<Record<string, string>>>;
873
875
  readonly recipeMessages?: Readonly<Partial<Record<string, string>>>;
@@ -1092,7 +1094,7 @@ export declare class RecipeLayout {
1092
1094
  }
1093
1095
  /**
1094
1096
  * Résolution des messages. Priorités : champ, puis recette, puis défaut, puis message brut, puis `unknown`.
1095
- * Un champ non touché n'affiche rien avant une tentative de soumission ; seule la première erreur est affichée.
1097
+ * Un champ ni modifié ni touché n'affiche rien avant une tentative de soumission ; seule la première erreur est affichée.
1096
1098
  * Erreur serveur : son `message`, que l'appelant a déjà traduit ; sans message, la clé `errors.<code>`.
1097
1099
  */
1098
1100
  export declare class RecipeMessages {
@@ -1172,7 +1174,7 @@ export declare class RecipeSections {
1172
1174
  /** Clés de chaque section (identifiant → clés), sous-sections comprises ; une section sans champ a une liste vide. */
1173
1175
  static index(nodes: readonly FormNode<AnyModel>[]): ReadonlyMap<string, readonly string[]>;
1174
1176
  /**
1175
- * Nombre de champs en erreur : champs touchés ou après une tentative de soumission, champs cachés ignorés,
1177
+ * Nombre de champs en erreur : champs modifiés ou touchés, ou après une tentative de soumission, champs cachés ignorés,
1176
1178
  * erreur d'un groupe lié comptée une fois, erreurs serveur comprises.
1177
1179
  */
1178
1180
  static errorCount(input: SectionErrorCountInput): number;
@@ -1409,7 +1411,10 @@ export declare class RecipeFormComponent<TModel extends object> {
1409
1411
  private readonly placedErrors;
1410
1412
  private readonly placedWarnings;
1411
1413
  constructor();
1412
- /** Après un `reset` du formulaire par l'appelant, les messages redeviennent conditionnés au `touched`. */
1414
+ /**
1415
+ * À appeler après un `reset` du formulaire par l'appelant : les messages restent alors cachés tant que le champ
1416
+ * n'est ni modifié (`dirty`), ni touché, ni soumis.
1417
+ */
1413
1418
  resetSubmitAttempt(): void;
1414
1419
  /** Pas de `submit()` de Signal Forms : il renvoie une Promise, que les règles du dépôt interdisent. */
1415
1420
  protected onSubmit(event: Event): void;
@@ -1514,8 +1519,8 @@ export declare class RecipeNodeComponent {
1514
1519
  /** Les champs d'un contrôle lié sont rendus comme des champs ordinaires, construits à partir du contrôle. */
1515
1520
  protected readonly linkedFieldNodes: Signal<readonly FieldNode<AnyModel, string, AnyModel>[]>;
1516
1521
  /**
1517
- * L'erreur posée sur `errorTarget` apparaît dès que ce champ est touché, comme la bordure rouge de son wrapper
1518
- * (`showInvalid` = invalide et touché) ; celle du groupe, quand tous les champs liés ont été touchés.
1522
+ * L'erreur posée sur `errorTarget` apparaît dès que ce champ est modifié ou touché, comme la bordure rouge de son
1523
+ * wrapper (invalide, et modifié ou touché) ; celle du groupe, quand chaque champ lié a été modifié ou touché.
1519
1524
  * Après une soumission, elle apparaît dans les deux cas.
1520
1525
  */
1521
1526
  protected readonly linkedMessage: Signal<FieldMessage | undefined>;
@@ -1918,6 +1923,7 @@ export declare class CheckboxComponent implements FormCheckboxControl {
1918
1923
  readonly readonly: import("@angular/core").InputSignal<boolean>;
1919
1924
  readonly invalid: import("@angular/core").InputSignal<boolean>;
1920
1925
  readonly touched: import("@angular/core").InputSignal<boolean>;
1926
+ readonly dirty: import("@angular/core").InputSignal<boolean>;
1921
1927
  readonly describedBy: import("@angular/core").InputSignal<string | undefined>;
1922
1928
  readonly touch: import("@angular/core").OutputEmitterRef<void>;
1923
1929
  private readonly control;
@@ -1963,6 +1969,11 @@ export declare class CheckboxComponent implements FormCheckboxControl {
1963
1969
  "required": false;
1964
1970
  "isSignal": true;
1965
1971
  };
1972
+ "dirty": {
1973
+ "alias": "dirty";
1974
+ "required": false;
1975
+ "isSignal": true;
1976
+ };
1966
1977
  "describedBy": {
1967
1978
  "alias": "describedBy";
1968
1979
  "required": false;
@@ -1990,6 +2001,7 @@ export declare class DatePickerMultipleComponent implements FormValueControl<rea
1990
2001
  readonly readonly: import("@angular/core").InputSignal<boolean>;
1991
2002
  readonly invalid: import("@angular/core").InputSignal<boolean>;
1992
2003
  readonly touched: import("@angular/core").InputSignal<boolean>;
2004
+ readonly dirty: import("@angular/core").InputSignal<boolean>;
1993
2005
  readonly required: import("@angular/core").InputSignal<boolean>;
1994
2006
  /** Nom du groupe que forme le contrôle (le libellé du champ), posé en `aria-label`. */
1995
2007
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
@@ -2053,6 +2065,11 @@ export declare class DatePickerMultipleComponent implements FormValueControl<rea
2053
2065
  "required": false;
2054
2066
  "isSignal": true;
2055
2067
  };
2068
+ "dirty": {
2069
+ "alias": "dirty";
2070
+ "required": false;
2071
+ "isSignal": true;
2072
+ };
2056
2073
  "required": {
2057
2074
  "alias": "required";
2058
2075
  "required": false;
@@ -2097,6 +2114,7 @@ export declare class DatePickerComponent implements FormValueControl<Date | null
2097
2114
  readonly readonly: import("@angular/core").InputSignal<boolean>;
2098
2115
  readonly invalid: import("@angular/core").InputSignal<boolean>;
2099
2116
  readonly touched: import("@angular/core").InputSignal<boolean>;
2117
+ readonly dirty: import("@angular/core").InputSignal<boolean>;
2100
2118
  readonly required: import("@angular/core").InputSignal<boolean>;
2101
2119
  readonly describedBy: import("@angular/core").InputSignal<string | undefined>;
2102
2120
  readonly touch: import("@angular/core").OutputEmitterRef<void>;
@@ -2143,6 +2161,11 @@ export declare class DatePickerComponent implements FormValueControl<Date | null
2143
2161
  "required": false;
2144
2162
  "isSignal": true;
2145
2163
  };
2164
+ "dirty": {
2165
+ "alias": "dirty";
2166
+ "required": false;
2167
+ "isSignal": true;
2168
+ };
2146
2169
  "required": {
2147
2170
  "alias": "required";
2148
2171
  "required": false;
@@ -2172,6 +2195,7 @@ export declare class InputNumberComponent implements FormValueControl<number | n
2172
2195
  readonly readonly: import("@angular/core").InputSignal<boolean>;
2173
2196
  readonly invalid: import("@angular/core").InputSignal<boolean>;
2174
2197
  readonly touched: import("@angular/core").InputSignal<boolean>;
2198
+ readonly dirty: import("@angular/core").InputSignal<boolean>;
2175
2199
  readonly required: import("@angular/core").InputSignal<boolean>;
2176
2200
  /** Pas des flèches du clavier ; 1 quand il n'est pas fourni. */
2177
2201
  readonly step: import("@angular/core").InputSignal<number | undefined>;
@@ -2231,6 +2255,11 @@ export declare class InputNumberComponent implements FormValueControl<number | n
2231
2255
  "required": false;
2232
2256
  "isSignal": true;
2233
2257
  };
2258
+ "dirty": {
2259
+ "alias": "dirty";
2260
+ "required": false;
2261
+ "isSignal": true;
2262
+ };
2234
2263
  "required": {
2235
2264
  "alias": "required";
2236
2265
  "required": false;
@@ -2264,7 +2293,7 @@ export declare class InputNumberComponent implements FormValueControl<number | n
2264
2293
  /**
2265
2294
  * Wrapper par défaut d'un champ texte, `FormValueControl<string>`.
2266
2295
  * L'application hôte peut le remplacer par celui de son design system, de même sélecteur et de même contrat
2267
- * (`value`, `disabled`, `invalid`, `touched`, `touch`).
2296
+ * (`value`, `disabled`, `invalid`, `touched`, `dirty`, `touch`).
2268
2297
  */
2269
2298
  export declare class InputTextComponent implements FormValueControl<string> {
2270
2299
  readonly value: import("@angular/core").ModelSignal<string>;
@@ -2274,6 +2303,7 @@ export declare class InputTextComponent implements FormValueControl<string> {
2274
2303
  readonly readonly: import("@angular/core").InputSignal<boolean>;
2275
2304
  readonly invalid: import("@angular/core").InputSignal<boolean>;
2276
2305
  readonly touched: import("@angular/core").InputSignal<boolean>;
2306
+ readonly dirty: import("@angular/core").InputSignal<boolean>;
2277
2307
  readonly required: import("@angular/core").InputSignal<boolean>;
2278
2308
  readonly placeholder: import("@angular/core").InputSignal<string>;
2279
2309
  /** Clavier proposé ; `text` quand il n'est pas fourni. */
@@ -2329,6 +2359,11 @@ export declare class InputTextComponent implements FormValueControl<string> {
2329
2359
  "required": false;
2330
2360
  "isSignal": true;
2331
2361
  };
2362
+ "dirty": {
2363
+ "alias": "dirty";
2364
+ "required": false;
2365
+ "isSignal": true;
2366
+ };
2332
2367
  "required": {
2333
2368
  "alias": "required";
2334
2369
  "required": false;
@@ -2478,6 +2513,7 @@ export declare class SelectComponent<T> implements FormValueControl<T | null> {
2478
2513
  readonly readonly: import("@angular/core").InputSignal<boolean>;
2479
2514
  readonly invalid: import("@angular/core").InputSignal<boolean>;
2480
2515
  readonly touched: import("@angular/core").InputSignal<boolean>;
2516
+ readonly dirty: import("@angular/core").InputSignal<boolean>;
2481
2517
  readonly required: import("@angular/core").InputSignal<boolean>;
2482
2518
  readonly showClear: import("@angular/core").InputSignal<boolean>;
2483
2519
  /**
@@ -2544,6 +2580,11 @@ export declare class SelectComponent<T> implements FormValueControl<T | null> {
2544
2580
  "required": false;
2545
2581
  "isSignal": true;
2546
2582
  };
2583
+ "dirty": {
2584
+ "alias": "dirty";
2585
+ "required": false;
2586
+ "isSignal": true;
2587
+ };
2547
2588
  "required": {
2548
2589
  "alias": "required";
2549
2590
  "required": false;