@sia-ui/registry 0.3.0 → 0.3.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 (3) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +434 -1
  3. package/package.json +4 -5
package/CHANGELOG.md CHANGED
@@ -10,6 +10,12 @@ vérifie, et la CI le lance. Sans quoi une entrée monterait de version sans
10
10
  que personne ne puisse savoir ce qui a changé dans le fichier qu'il a déjà
11
11
  chez lui.
12
12
 
13
+ ## 0.3.1
14
+
15
+ ### Patch Changes
16
+
17
+ - Expose public contribution flow on npm
18
+
13
19
  ## 0.3.0
14
20
 
15
21
  ### Minor Changes
package/README.md CHANGED
@@ -28,7 +28,440 @@ Ce paquet sert surtout à la [CLI](https://www.npmjs.com/package/@sia-ui/cli).
28
28
  ```
29
29
 
30
30
  Une chose s'écrit au niveau le plus bas où elle a du sens, et une seule fois.
31
- Voir [la documentation](https://github.com/BeatJo/sia-ui/tree/main/docs).
31
+ Voir [la documentation](https://beatjo.github.io/sia-ui-site).
32
+
33
+ ## Contribuer
34
+
35
+ Le code source principal de SIA UI est privé pour le moment. Les retours publics passent par le dépôt `BeatJo/sia-ui-site` : bugs, demandes de composants, corrections de documentation et questions d'usage.
36
+
37
+ - Signaler un bug : https://github.com/BeatJo/sia-ui-site/issues
38
+ - Lire la documentation : https://beatjo.github.io/sia-ui-site/
39
+ - Voir la démonstration : https://beatjo.github.io/sia-ui-site/preview/
40
+
41
+ Les contributions directes au code des packages se font sur invitation dans le dépôt source privé.
42
+ ## Journal des changements
43
+
44
+ Le contenu ci-dessous reprend intégralement `CHANGELOG.md` pour rester visible sur npm.
45
+
46
+ # Journal du registre
47
+
48
+ Les versions des **entrées**, pas celles des paquets. Un composant copié
49
+ cesse de suivre `@sia-ui/react-web` : il vit dans le dépôt de qui l'a
50
+ installé. C'est ce numéro-là, noté dans son `sia-ui.lock.json`, que
51
+ `sia-ui list --outdated` compare.
52
+
53
+ Chaque version d'une entrée doit apparaître ici — `pnpm check:changelog` le
54
+ vérifie, et la CI le lance. Sans quoi une entrée monterait de version sans
55
+ que personne ne puisse savoir ce qui a changé dans le fichier qu'il a déjà
56
+ chez lui.
57
+
58
+ ## 0.3.0
59
+
60
+ ### Minor Changes
61
+
62
+ - Une ressource se déclare une fois, cinq composants refondus, et une
63
+ documentation qui décrit le produit plutôt que son développement.
64
+
65
+ ## Déclarer une ressource
66
+
67
+ `defineResource` décrit un objet métier **une seule fois**. Les colonnes du
68
+ tableau, les champs du formulaire, les lignes de la vue de détail, la
69
+ validation, les clés de recherche et les quatre règles de droits en sont
70
+ dérivés — et chaque dérivation reste remplaçable par la prop correspondante.
71
+
72
+ ```tsx
73
+ <CrudPage resource={FACTURE} data={factures} can={can}
74
+ onSubmit={…} onDelete={…} />
75
+ ```
76
+
77
+ Le rendu se déduit du type : un `currency` s'affiche formaté et aligné à
78
+ droite, un `select` avec ses `tones` devient une pastille, une `date` passe
79
+ par le format local. `permissions: "auto"` applique la convention
80
+ `<nom>.<verbe>`.
81
+
82
+ ## Les quatre opérations ouvrent leurs propres boîtes
83
+
84
+ `CrudPage` n'appelle plus seulement un gestionnaire : déclarer `fields` et
85
+ `onSubmit` suffit à obtenir un formulaire vide en création, le même prérempli
86
+ en modification, et une vue de détail. `onCreate`, `onEdit` et `onView`
87
+ restent la porte de sortie vers une page dédiée — fournis, ils passent devant
88
+ la boîte.
89
+
90
+ Les boîtes n'inventent rien : `Modal` pour la boîte, `Form` pour la saisie,
91
+ `Descriptions` pour la lecture.
92
+
93
+ ## Cinq composants refondus
94
+ - **`Sidebar`** — le rail réduit n'enferme plus ses sous-menus : ils sortent
95
+ en volet. Profondeur illimitée, droits en cascade, trois variantes.
96
+ - **`AppShell`** — se branche sur n'importe quel routeur par une seule
97
+ chaîne, l'adresse courante. Trois états de barre, tiroir ou onglets bas sur
98
+ mobile, filtrage des droits fait une seule fois.
99
+ - **`Avatar`** — teinte dérivée du nom, repli peint sous l'image, quatre états
100
+ de présence, et des piles qui résument leur surplus.
101
+ - **`DataTable`** — actions de ligne avec droits et confirmation, sélection et
102
+ barre groupée, vue en cartes, trois densités, états de chargement, d'erreur
103
+ et de vide.
104
+ - **`CrudPage`** — réécrit : il tenait en neuf lignes et n'offrait aucune des
105
+ quatre opérations qui lui donnent son nom.
106
+
107
+ ## Ruptures
108
+ - `CrudPage` : `actions` portait des nœuds d'en-tête, ils vont dans
109
+ `headerActions`. `data` est requis, et `columns` l'est aussi à moins qu'une
110
+ `resource` ne les fournisse.
111
+ - `Sidebar` et `AppShell` : les props ont changé. Voir
112
+ [La navigation latérale](https://beatjo.github.io/sia-ui-site/guides/navigation)
113
+ et [La coquille d'application](https://beatjo.github.io/sia-ui-site/guides/coquille-application).
114
+
115
+ ## Documentation
116
+
117
+ Les cent trois composants ont désormais une page de référence — ce qu'ils
118
+ font, comment les installer, et **toutes** leurs props avec type et valeur par
119
+ défaut. Ces pages sont écrites par le code : les props viennent des types, les
120
+ descriptions de leurs commentaires, la commande d'installation du registre.
121
+
122
+ Le catalogue est passé de seize sections en deux langues à neuf, ordonnées du
123
+ plus général au plus assemblé. Les comptes rendus de développement ont été
124
+ retirés de la documentation : ils décrivaient un chemin parcouru, pas un
125
+ produit.
126
+
127
+ ## 0.2.0
128
+
129
+ ### Minor Changes
130
+
131
+ - e4e4a72: Annonces, session et droits, formulaires sans dépendance, et vingt entrées de
132
+ registre de plus.
133
+
134
+ ## Composants
135
+ - **Annonces** — `toast()` s'appelle hors de React, variante `loading`, boutons
136
+ d'action, six coins réglables par annonce, balayage pour écarter, suivi de
137
+ promesse.
138
+ - **Session et droits** — `createSessionStore` avec sa machine à quatre états,
139
+ `createAccessLayer` à évaluateur injecté, `RequireSession` sans routeur.
140
+ - **Formulaires** — le contrat `FormAdapter` et `useLocalForm`, sans
141
+ dépendance. `Form` est écrit sur le contrat : il n'importe ni
142
+ react-hook-form ni zod, et se câble à l'un ou l'autre par un adaptateur.
143
+ - **Vingt entrées de registre de plus** — `progress`, `dropdown-menu`,
144
+ `accordion`, `sidebar`, `breadcrumb`, `steps`, `toggle`, `scroll-area`,
145
+ `hover-card`, `aspect-ratio`, `input-number`, `password-input`,
146
+ `phone-input`, `chart`, `require-session`, `form`…
147
+ - **Thème** — mode `system`, persistance et script anti-clignotement dans
148
+ `SiaProvider`, en remplacement de `next-themes`.
149
+
150
+ ## `@sia-ui/api`
151
+
152
+ Le client HTTP typé est un paquet à part : ni React, ni DOM, ni tokens. Il
153
+ s'installe seul, et copier un `Badge` depuis le registre ne l'entraîne pas.
154
+
155
+ ## Utilitaires
156
+
157
+ `@sia-ui/utils` passe de six à quatorze modules : `query`, `async`,
158
+ `collection`, `object`, `validation`, `file`, `clipboard`, `locale`.
159
+
160
+ ## Archives
161
+ - Plus de sourcemaps : elles pesaient environ soixante pour cent de chaque
162
+ archive — `@sia-ui/react-web` passe de 2,1 Mo à 759 Ko.
163
+ - Chaque paquet porte enfin la licence MIT qu'il annonce.
164
+
165
+ ## Vitrine en ligne
166
+
167
+ Trois surfaces publiées sur GitHub Pages à chaque poussée sur `main` : la
168
+ documentation à la racine, le catalogue Storybook sous `/storybook/`, la
169
+ démonstration sous `/preview/`. Le site de documentation est construit depuis
170
+ les fichiers de `docs/` eux-mêmes, qui restent du Markdown ordinaire.
171
+
172
+ ## Le registre n'est plus une voie sans retour
173
+
174
+ Installer était jusqu'ici définitif : plus rien ne disait ce qu'on avait, ce
175
+ qu'on avait retouché, ni ce qui avait bougé en amont — donc rien ne permettait
176
+ de corriger ni de déprécier une entrée après coup.
177
+ - **`sia-ui.lock.json`**, écrit à chaque `add` : version, date et empreinte de
178
+ chaque fichier copié.
179
+ - **Quatre commandes** : `diff`, `remove`, `doctor`, `list --outdated`.
180
+ `remove` refuse de casser un voisin ou d'effacer un fichier retouché.
181
+ - **Cycle de vie des entrées** — `experimental`, `stable`, `deprecated`,
182
+ `removed` — avec `replacedBy`. `add` refuse ce qui est retiré, `doctor`
183
+ signale ce qui est déprécié chez qui l'a déjà installé.
184
+ - **Journal du registre**, entrée par entrée, dont `pnpm check:changelog`
185
+ refuse qu'il mente.
186
+ - **Registre servi en HTTP**, versionné par l'URL : `…/r/v1/`. Corriger une
187
+ entrée n'oblige plus à republier la CLI.
188
+
189
+ ## Corrections
190
+ - La case à cocher et le bouton radio masquaient leur contrôle natif en
191
+ `opacity:0`. Le navigateur le peignait encore sous le visuel personnalisé, et
192
+ ce dessin clignotait au clic. Les deux utilisent désormais la recette
193
+ partagée `.sia-visually-hidden`, qui le découpe hors du rendu sans le retirer
194
+ du clavier.
195
+ - Une case à cocher non contrôlée ne se peignait jamais cochée : l'`<input>`
196
+ basculait, mais la classe qui dessine la case ne suivait pas.
197
+ - Le curseur de survol des graphes était ovale, et le tracé de la courbe
198
+ haché : les marqueurs sont sortis du SVG, qui est étiré sans conserver ses
199
+ proportions.
200
+ - L'entrée `drawer` du registre était impossible à installer — elle importait
201
+ deux dossiers que la CLI ne copie pas.
202
+
203
+ ### Patch Changes
204
+
205
+ - Include component styles when installing registry components
206
+
207
+ ## 0.2.0
208
+
209
+ - `resource` — **nouvelle entrée**. Une page de liste décrivait le même objet
210
+ trois fois : en colonnes pour le tableau, en champs pour le formulaire, en
211
+ lignes pour le détail. Plus la validation, les clés de recherche et la règle
212
+ de droits par opération. Ces descriptions divergent, et toujours dans le
213
+ même sens — c'est le formulaire qui oublie le champ que le tableau affiche.
214
+
215
+ `defineResource` la décrit **une seule fois**. Colonnes, champs, détail,
216
+ validation, recherche, clé de ligne et droits en sont dérivés. Le rendu se
217
+ déduit du type : un `currency` s'affiche formaté et aligné à droite, un
218
+ `select` avec ses `tones` devient une pastille, une `date` passe par le
219
+ format local.
220
+
221
+ Trois surfaces, trois défauts : `inTable` écarte ce qui est trop long pour
222
+ une cellule, `inForm` écarte ce que `readOnly` marque, `inDetail` garde
223
+ tout. Le détail n'est donc pas le tableau — une note de trois phrases sort
224
+ des colonnes et reste dans la boîte de consultation.
225
+
226
+ `permissions: "auto"` applique la convention `<nom>.<verbe>`. Chaque
227
+ dérivation cède à la prop correspondante : passer `columns` ne coûte ni le
228
+ formulaire, ni les droits.
229
+
230
+ - `crud-page` — **réécrit**. Il tenait en neuf lignes : un titre, un
231
+ emplacement libre et une pagination. Les quatre opérations d'une page de
232
+ liste étaient à réécrire à chaque écran, ce qui produit quatre variantes
233
+ qui divergent — celle qui oublie la confirmation, celle qui ne vérifie
234
+ pas les droits, celle dont le bouton reste actif pendant l'appel.
235
+
236
+ Créer, consulter, modifier, supprimer **fonctionnent d'emblée** : fournir
237
+ le gestionnaire suffit, ne pas le fournir retire l'action. La suppression
238
+ est confirmée d'office — on peut lever la confirmation, encore faut-il
239
+ l'avoir écrit.
240
+
241
+ `operations` personnalise chaque action : libellé, icône, droits,
242
+ visibilité ligne par ligne, confirmation. `extraRowActions` en ajoute
243
+ d'autres, `onBulkDelete` active la sélection et sa barre.
244
+
245
+ Sans gestionnaire, les actions **ouvrent leurs propres boîtes** : déclarer
246
+ `fields` et `onSubmit` suffit à obtenir un formulaire vide en création, le
247
+ même prérempli en modification, et une vue de détail dérivée des colonnes.
248
+ `onCreate`, `onEdit` et `onView` restent la porte de sortie vers une page
249
+ dédiée : fournis, ils passent devant la boîte. `resource` va plus loin et
250
+ dérive tout d'une seule déclaration.
251
+
252
+ **Migration, rupture** : `actions` portait des nœuds d'en-tête; ils vont
253
+ dans `headerActions`. Le nom `actions` désignerait sinon deux choses
254
+ différentes selon la version, ce qui est le pire cas — le code compile et
255
+ se comporte autrement. `data` est désormais requis, et `columns` l'est
256
+ aussi à moins qu'une `resource` ne les fournisse; le tableau reste
257
+ remplaçable par `children`.
258
+
259
+ - `data-table` — refonte. Il affichait des colonnes et un tri délégué.
260
+ S'ajoutent les **actions de ligne** — avec droits, confirmation, et
261
+ passage en menu au-delà de la limite —, la **sélection** et sa barre
262
+ d'actions groupées, une **vue en cartes** qui bascule d'elle-même sous
263
+ 768 px, la recherche locale, trois densités, les états de chargement,
264
+ d'erreur et de vide.
265
+
266
+ Les actions de ligne s'estompent hors survol : une colonne pleine de
267
+ boutons attire l'œil plus que les données. Elles restent entières au
268
+ clavier et sur tactile, où il n'y a pas de survol.
269
+
270
+ **Migration, rupture** : `align` passe de `left`/`right` à `start`/`end`,
271
+ et `getRowKey` devient facultatif. `useDataTableQuery` et
272
+ `createUrlTableStorage` sont inchangés.
273
+
274
+ - `app-shell` — **réécrit**. Il tenait en six lignes : une grille à deux
275
+ colonnes, un bouton de repli écrit `☰`, et des emplacements libres. Il ne
276
+ réutilisait ni la navigation, ni le tiroir, ni rien.
277
+
278
+ Il assemble maintenant le `Sidebar` et le `Drawer`, filtre les droits **une
279
+ seule fois** pour la barre comme pour les onglets, et se branche sur
280
+ n'importe quel routeur par une seule chaîne :
281
+
282
+ ```tsx
283
+ <AppShell nav={NAV} currentPath={usePathname()} renderLink={…} />
284
+ ```
285
+
286
+ De là il déduit l'entrée courante par le préfixe le plus long — une page
287
+ `/factures/12/lignes` marque bien `Factures` — et referme le tiroir mobile
288
+ à chaque navigation, sans jamais importer de routeur.
289
+
290
+ S'ajoutent trois états de barre (`expanded`, `collapsed`, `hidden`), trois
291
+ stratégies mobiles (`drawer`, `tabs`, `both`), `contentWidth`, `side`, les
292
+ largeurs personnalisables, et `BottomTabs` — qui ne montre que des
293
+ feuilles, un onglet ouvrant un sous-menu étant un piège tactile.
294
+
295
+ **Migration, rupture** : `logo` devient `brand`, `navigation` devient
296
+ `nav` et prend des données plutôt que des nœuds. `header` est inchangé.
297
+ Le titre de page n'est pas une prop : le poser dans `page`, avec
298
+ `PageHeader` — une coquille qui rend le `<h1>` force chaque écran à passer
299
+ par ses props.
300
+
301
+ L'entrée annonçait deux fichiers et une dépendance; elle en annonce
302
+ maintenant trois et cinq. Copiée telle quelle, elle serait arrivée cassée.
303
+
304
+ - `avatar` — refonte. Il servait une image, trois tailles et des initiales.
305
+ S'ajoutent : une **teinte dérivée du nom**, stable d'un écran à l'autre,
306
+ pour distinguer deux personnes aux mêmes initiales; trois formes et trois
307
+ variantes (`soft`, `solid`, `outline`); cinq tailles; une pastille de
308
+ présence à quatre états; et `AvatarGroup`, qui empile et résume son
309
+ surplus.
310
+
311
+ Le repli est désormais peint **sous** l'image plutôt qu'à sa place : la
312
+ mise en page ne bouge plus entre l'attente, la réussite et l'échec.
313
+
314
+ Les initiales prennent la première et la dernière partie du nom, particules
315
+ écartées : « Jean-Baptiste Kouassi Mbella » donne « JM », « Marie de la
316
+ Tour » donne « MT ».
317
+
318
+ **Migration** : aucune prop retirée. `fallback` accepte maintenant un
319
+ nœud React et non plus seulement une chaîne.
320
+
321
+ - `sidebar` — refonte. Trois défauts corrigés :
322
+
323
+ **Réduite, la barre enfermait ses sous-entrées.** Une règle forçait le
324
+ panneau des enfants à une hauteur nulle quel que soit son état : une
325
+ rubrique à sous-menus devenait inatteignable dès qu'on repliait la barre.
326
+ Les sous-menus sortent maintenant en volet, au survol ou au clavier.
327
+
328
+ **L'arbre s'arrêtait à deux niveaux**, interdits par le type lui-même
329
+ (`items?: Array<Omit<SidebarItem, "items">>`). Il descend désormais aussi
330
+ profond que l'arborescence du produit.
331
+
332
+ **Aucun filtrage par droits.** `permission` sur une entrée, `can` sur le
333
+ composant, et une cascade : un parent dont toute la descendance est
334
+ filtrée disparaît avec elle, sauf `keepWhenEmpty`.
335
+
336
+ S'ajoutent `renderLink` pour brancher un routeur sans en dépendre,
337
+ `openKeys` pour piloter les branches ouvertes, `accordion`, `side`, et les
338
+ variantes `default` / `filled` / `floating` en trois tailles.
339
+
340
+ **Migration** : aucune prop retirée. `registryDependencies` gagne
341
+ `overlay` — `sia-ui add sidebar --overwrite` l'installe.
342
+
343
+ ## 0.1.1
344
+
345
+ - `button` — l'entrée n'annonçait que son `index.tsx`. Installé, le bouton
346
+ arrivait donc sans sa feuille de style. `components/Button/styles.css`
347
+ rejoint ses fichiers.
348
+
349
+ ## 0.1.0
350
+
351
+ Première version des 104 entrées du registre.
352
+
353
+ ### Primitives (19)
354
+
355
+ - `aspect-ratio` — Box locked to a width / height ratio.
356
+ - `avatar` — Image avatar with automatic initials fallback.
357
+ - `badge` — Compact semantic status label with side content and loading state.
358
+ - `button` — Accessible button with loading and icon states.
359
+ - `card` — Composable card with header, body and footer regions.
360
+ - `checkbox` — Checkbox and CheckboxGroup with indeterminate, button and tone variants.
361
+ - `container` — Responsive page container and stack primitives.
362
+ - `divider` — Horizontal or vertical semantic separator.
363
+ - `form-adapter-rhf` — react-hook-form adapter for the FormAdapter contract. Requires react-hook-form.
364
+ - `icon-button` — Accessible icon-only action with required label.
365
+ - `icons` — Jeu d'icônes SVG sans dépendance, servi par le package.
366
+ - `input` — Accessible text input with side content and loading state.
367
+ - `overlay` — Positioned portal foundation with viewport collision handling and dismissal.
368
+ - `radio-group` — Controlled radio group with standard and RadioButton controls.
369
+ - `skeleton` — Token-based loading placeholder for content layouts.
370
+ - `spinner` — Accessible loading indicator with sizes and screen-reader label.
371
+ - `switch` — Controlled or uncontrolled accessible boolean switch.
372
+ - `textarea` — Accessible multiline input with invalid and resize states.
373
+ - `typography` — Headings, body text and inline code with semantic sizing and tones.
374
+
375
+ ### Composants (65)
376
+
377
+ - `accordion` — Collapsible sections with animated height.
378
+ - `alert` — Semantic feedback alert with tones, action and dismissal.
379
+ - `amount-display` — Consistent semantic amount display for finance interfaces.
380
+ - `autocomplete` — Combobox with local filtering and optional custom values.
381
+ - `breadcrumb` — Navigation trail that folds middle levels into a menu.
382
+ - `calendar` — Localized month and year calendar with range selection and custom cells.
383
+ - `chart` — Dependency-free line, area and bar charts.
384
+ - `color-picker` — Native color selection with visible serialized value.
385
+ - `countdown` — Countdown specialization of Timer.
386
+ - `currency-input` — Locale-aware currency input exposing a numeric value.
387
+ - `data-table` — Generic typed table with loading and empty states.
388
+ - `date-picker` — Calendar-based date picker with overlay, tones, limits and custom cells.
389
+ - `date-range-picker` — Unified calendar range selection with serializable boundaries.
390
+ - `date-time-picker` — Composable date and time selection with serializable values.
391
+ - `descriptions` — Responsive labeled value grid for entity details.
392
+ - `drawer` — Accessible side panel with focus management and portal rendering.
393
+ - `dropdown-menu` — Dropdown and context menus with keyboard navigation.
394
+ - `duration-display` — Localized duration display in text or clock format.
395
+ - `event-calendar` — Calendar with per-day business events.
396
+ - `field` — Typed form field factory reusing the SIA UI control catalog.
397
+ - `file-upload` — Accessible file picker with drag and drop.
398
+ - `form-field` — Deprecated compatibility alias for Field.
399
+ - `hover-card` — Rich preview on hover, with open and close delays.
400
+ - `image-upload` — Image file upload with local preview and removal.
401
+ - `input-number` — Numeric input with stepper, bounds and decimal handling.
402
+ - `json-editor` — JSON textarea with validation and formatting.
403
+ - `label` — Libellé de champ, avec marque d'obligation.
404
+ - `markdown-editor` — Markdown writing and pluggable preview surface.
405
+ - `mini-calendar` — Compact calendar built on the shared calendar foundation.
406
+ - `modal` — Accessible modal dialog with portal, Escape and backdrop handling.
407
+ - `month-picker` — Native serializable month selection.
408
+ - `multi-select` — Searchable multiple selection with removable values.
409
+ - `otp-input` — Keyboard and paste friendly one-time code input.
410
+ - `pagination` — Accessible controlled pagination with compact page ranges.
411
+ - `password-input` — Password field with reveal toggle and strength meter.
412
+ - `phone-input` — International phone input with dial code and grouping.
413
+ - `popover` — Click or hover popover composed from the shared positioned Overlay.
414
+ - `progress` — Determinate and indeterminate progress, bar or circle.
415
+ - `qr-code` — Accessible QR code frame with pluggable encoder renderer.
416
+ - `rating` — Accessible controlled or uncontrolled rating control.
417
+ - `reference-select` — Entity reference selection built on Autocomplete.
418
+ - `relative-time` — Auto-refreshing semantic relative date display.
419
+ - `resizable-panel` — Keyboard and pointer resizable split panels.
420
+ - `rich-text-editor` — Lightweight rich text input with basic formatting commands.
421
+ - `scroll-area` — Scrollable region with thin scrollbars and edge fades.
422
+ - `search-input` — Controlled or uncontrolled search field with submit and clear actions.
423
+ - `select` — Accessible searchable select with positioned overlay and async option loading.
424
+ - `slider` — Accessible single or interval slider with formatted values.
425
+ - `statistic` — Locale-aware number, currency and percentage display with trend.
426
+ - `steps` — Step progression, horizontal or vertical, with status.
427
+ - `tabs` — Accessible controlled or uncontrolled tabs with keyboard navigation.
428
+ - `tags-input` — Create and remove string tags from a text input.
429
+ - `time-picker` — Timer-based time selection panel with steps, confirmation and tones.
430
+ - `time-range-picker` — Serializable start and end time selection.
431
+ - `timeline` — Chronological events with semantic tones.
432
+ - `timer` — Reliable count-up or count-down timer based on absolute time.
433
+ - `toast` — Toast queue with placement, pause on hover and promise tracking.
434
+ - `toggle` — Two-state button and toggle group.
435
+ - `tooltip` — Accessible contextual tooltip for hover and focus targets.
436
+ - `tour` — Guided multi-step product tour overlay.
437
+ - `transfer` — Move items between available and selected lists.
438
+ - `tree` — Accessible expandable hierarchical data view.
439
+ - `tree-select` — Hierarchical value selection built on Tree.
440
+ - `week-picker` — Native ISO week selection.
441
+ - `year-picker` — Bounded year selection.
442
+
443
+ ### Patterns applicatifs (20)
444
+
445
+ - `app-shell` — Responsive application shell with collapsible navigation.
446
+ - `async-state` — Loading, empty and error states for remotely loaded content.
447
+ - `audit-meta` — Chronological audit history for admin and finance entities.
448
+ - `auth-layout` — Reusable authentication page composition.
449
+ - `command-palette` — Keyboard command search and execution dialog.
450
+ - `confirm-dialog` — Confirmation dialog composed from Modal and Button.
451
+ - `crud-page` — CRUD page composition with header, async states and pagination.
452
+ - `date-range-filter` — Date range filter with reusable presets and clear action.
453
+ - `empty-state` — Reusable empty state with icon, description and action.
454
+ - `entity-meta` — Compact audit and entity metadata block for admin and finance screens.
455
+ - `error-state` — Reusable error state with message extraction and retry action.
456
+ - `filters-bar` — Composable search, filter, reset and action toolbar.
457
+ - `form` — Declarative form driven by a field list, wired to any FormAdapter.
458
+ - `kpi-grid` — Responsive grid for KPI and statistic cards.
459
+ - `page-header` — Consistent page title, description and action area.
460
+ - `permission-gate` — Render content according to application permissions.
461
+ - `require-session` — Route guard on a session store, with a permission rule and no router dependency.
462
+ - `sidebar` — Collapsible application navigation with groups and sub-items.
463
+ - `stat-card` — Business metric card composed from Card and Statistic.
464
+ - `unsaved-changes-guard` — Protect browser and in-app navigation with unsaved changes.
32
465
 
33
466
  ## Licence
34
467
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sia-ui/registry",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Installable component registry for SIA UI.",
5
5
  "keywords": [
6
6
  "sia-ui",
@@ -10,14 +10,13 @@
10
10
  ],
11
11
  "license": "MIT",
12
12
  "author": "Ivan Mbella",
13
- "homepage": "https://github.com/BeatJo/sia-ui#readme",
13
+ "homepage": "https://beatjo.github.io/sia-ui-site/",
14
14
  "bugs": {
15
- "url": "https://github.com/BeatJo/sia-ui/issues"
15
+ "url": "https://github.com/BeatJo/sia-ui-site/issues"
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",
19
- "url": "git+https://github.com/BeatJo/sia-ui.git",
20
- "directory": "packages/registry"
19
+ "url": "git+https://github.com/BeatJo/sia-ui-site.git"
21
20
  },
22
21
  "type": "module",
23
22
  "files": [