@nomosui/react 0.7.0 → 0.8.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/SKILL.md CHANGED
@@ -117,7 +117,9 @@ pour expliquer une brique, elle appartient à l'app, pas au cœur.
117
117
  - **Un emplacement de champ** (libellé, contrôle, aide ou erreur) → `Field` ; **nommer un
118
118
  contrôle seul** → `Label` (`htmlFor`) ; **regrouper des champs apparentés** →
119
119
  `Fieldset` (`legend` fourni par l'app). Le message d'erreur est injecté, jamais calculé
120
- par le cœur.
120
+ par le cœur. Le `Field` associe lui-même le contrôle à son message (`aria-invalid`,
121
+ `aria-describedby`) pour les contrôles du cœur : `Input`, `Textarea`, `NumberField`,
122
+ `SearchField` et le déclencheur de `Select`.
121
123
 
122
124
  ### Tables
123
125
 
@@ -130,6 +132,23 @@ pour expliquer une brique, elle appartient à l'app, pas au cœur.
130
132
  feature `FacetedDataTable` : elle possède le comportement et le **placement** du détail
131
133
  (surcouche `overlay` ou dépli `inline`), l'app fournit le contenu et les `labels`.
132
134
 
135
+ ### Conversation
136
+
137
+ - **Brancher une conversation** → la feature `useChatThread({ transport, initialMessages })` :
138
+ elle possède la **machine à états** — ajout optimiste du tour, assemblage des deltas,
139
+ `send`, `stop`, `retry`/`regenerate`, `replace`, erreur — et **rien du transport**
140
+ (ADR 0032). L'app injecte un `ChatTransport` (une fonction `send`) : le cœur n'appelle
141
+ aucun modèle, ne connaît aucun endpoint, n'affiche aucune erreur réseau (ADR 0018). Un
142
+ message porte un rôle et des **parts** (`text`, `reasoning`, `tool`, `data`) : un signal
143
+ structuré est une part de premier ordre, jamais un sentinelle pêché dans la prose.
144
+ - **La fenêtre du fil** → `Conversation` : une région `log` vivante ancrée en bas, le
145
+ défilement tenu par le cœur, la hauteur par l'app. **Un message** → `Message` : le
146
+ placement et le ton du rôle, le contenu en `parts`, et `renderPart` pour que l'app
147
+ garde markdown, coloration et artefact métier. **La saisie** → `Composer` : contrôlé par
148
+ props (`value` + `onChange`), `Entrée` envoie, `Maj+Entrée` coupe la ligne, garde IME ;
149
+ `busy` + `onStop` pour interrompre. **Attendre la réponse** → `TypingIndicator` (libellé
150
+ injecté, région `status`).
151
+
133
152
  ### Tons et tokens
134
153
 
135
154
  - **Un ton de statut** → `toneClasses` (`neutral`, `info`, `progress`, `attention`,
@@ -159,6 +178,8 @@ chip
159
178
  code
160
179
  code-block
161
180
  collapsible
181
+ composer
182
+ conversation
162
183
  copy-button
163
184
  counter
164
185
  data-table-pagination
@@ -178,6 +199,7 @@ kicker
178
199
  label
179
200
  link
180
201
  meter
202
+ message
181
203
  navbar
182
204
  number-field
183
205
  popover
@@ -201,6 +223,7 @@ toggle
201
223
  toggle-group
202
224
  tooltip
203
225
  tree
226
+ typing-indicator
204
227
  <!-- inventaire : fin -->
205
228
 
206
229
  ## Interroger le catalogue