@llmnative/react 1.9.0 → 1.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.
@@ -26,6 +26,14 @@ interface FormContextProps {
26
26
  inputType?: InputType;
27
27
  defaultValue?: FieldValue;
28
28
  inheritWrapperClassName?: boolean;
29
+ /** Opt-in esplicito per i pochi consumer che leggono ALTRI campi del form (cross-field), non
30
+ * solo il proprio `name` — es. interpolazione `{{variabile}}` da qualunque campo (Prompt.tsx).
31
+ * Default `false`: il consumer si ri-renderizza solo quando cambia il proprio `name`, non ad
32
+ * ogni cambiamento nel form. Un consumer che sottoscrive un path "genitore" (non-leaf, es. un
33
+ * blocco di campi annidati) NON ha bisogno di questo flag: reagisce già a qualunque discendente
34
+ * cambi, perché applyChangeToRecord clona ogni container lungo il percorso dalla radice alla
35
+ * chiave finale, quindi il valore al path genitore cambia riferimento comunque. */
36
+ subscribeToFullRecord?: boolean;
29
37
  }
30
38
  interface FormContextResult {
31
39
  value: FieldValue;
@@ -66,7 +74,7 @@ export declare const FormValidationContext: React.Context<FormValidationContextV
66
74
  * their error message. Call it in every field that supports `required`.
67
75
  */
68
76
  export declare const useFieldValidation: (name: string, constraints: FieldValidationConstraints) => string | undefined;
69
- export declare const useFormContext: ({ name, onChange, wrapperClassName, inputType, defaultValue, inheritWrapperClassName }: FormContextProps) => FormContextResult;
77
+ export declare const useFormContext: ({ name, onChange, wrapperClassName, inputType, defaultValue, inheritWrapperClassName, subscribeToFullRecord }: FormContextProps) => FormContextResult;
70
78
  type UseHandleDropProps = {
71
79
  name: string;
72
80
  value: FieldValue;
@@ -53,4 +53,12 @@ export declare const base64ToBlob: (base64: string, type: string) => Blob | unde
53
53
  export declare const base64ToUrl: (base64: string, type: string) => string | undefined;
54
54
  export declare const getRecordValue: (record?: RecordProps, name?: string) => unknown;
55
55
  export declare const cleanRecord: (record: RecordProps | undefined) => RecordProps;
56
+ /** Confronto di uguaglianza con la STESSA semantica di normalizzazione di `cleanRecord` (chiave
57
+ * con valore `undefined` = assente, `File` confrontato per `name/type/size/lastModified`, array
58
+ * mappati e filtrati ricorsivamente, oggetti ricorsivi) ma SENZA cloni/allocazioni intermedie:
59
+ * ritorna `false` non appena trova la prima differenza. Usata da `Form.tsx` per `isDirty` — a
60
+ * differenza di `createRecordSnapshot`/`cleanRecord` (clone ricorsivo completo + JSON.stringify
61
+ * dell'INTERO record, anche quando è cambiato un solo campo), qui il costo è proporzionale a
62
+ * quanto viaggia prima di trovare la prima differenza, tipicamente il campo appena editato. */
63
+ export declare function recordsEqual(a: unknown, b: unknown): boolean;
56
64
  export declare const smartTypeCast: (value: unknown) => string | number | boolean | null | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmnative/react",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "LLM-native React framework for deterministic UI generation. Data-driven by default, schema-driven optional. Ultra-low token consumption — built for AI agents, not just humans.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",