@sia-ui/registry 0.2.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.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,81 @@ 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
+
19
+ ## 0.3.0
20
+
21
+ ### Minor Changes
22
+
23
+ - Une ressource se déclare une fois, cinq composants refondus, et une
24
+ documentation qui décrit le produit plutôt que son développement.
25
+
26
+ ## Déclarer une ressource
27
+
28
+ `defineResource` décrit un objet métier **une seule fois**. Les colonnes du
29
+ tableau, les champs du formulaire, les lignes de la vue de détail, la
30
+ validation, les clés de recherche et les quatre règles de droits en sont
31
+ dérivés — et chaque dérivation reste remplaçable par la prop correspondante.
32
+
33
+ ```tsx
34
+ <CrudPage resource={FACTURE} data={factures} can={can}
35
+ onSubmit={…} onDelete={…} />
36
+ ```
37
+
38
+ Le rendu se déduit du type : un `currency` s'affiche formaté et aligné à
39
+ droite, un `select` avec ses `tones` devient une pastille, une `date` passe
40
+ par le format local. `permissions: "auto"` applique la convention
41
+ `<nom>.<verbe>`.
42
+
43
+ ## Les quatre opérations ouvrent leurs propres boîtes
44
+
45
+ `CrudPage` n'appelle plus seulement un gestionnaire : déclarer `fields` et
46
+ `onSubmit` suffit à obtenir un formulaire vide en création, le même prérempli
47
+ en modification, et une vue de détail. `onCreate`, `onEdit` et `onView`
48
+ restent la porte de sortie vers une page dédiée — fournis, ils passent devant
49
+ la boîte.
50
+
51
+ Les boîtes n'inventent rien : `Modal` pour la boîte, `Form` pour la saisie,
52
+ `Descriptions` pour la lecture.
53
+
54
+ ## Cinq composants refondus
55
+ - **`Sidebar`** — le rail réduit n'enferme plus ses sous-menus : ils sortent
56
+ en volet. Profondeur illimitée, droits en cascade, trois variantes.
57
+ - **`AppShell`** — se branche sur n'importe quel routeur par une seule
58
+ chaîne, l'adresse courante. Trois états de barre, tiroir ou onglets bas sur
59
+ mobile, filtrage des droits fait une seule fois.
60
+ - **`Avatar`** — teinte dérivée du nom, repli peint sous l'image, quatre états
61
+ de présence, et des piles qui résument leur surplus.
62
+ - **`DataTable`** — actions de ligne avec droits et confirmation, sélection et
63
+ barre groupée, vue en cartes, trois densités, états de chargement, d'erreur
64
+ et de vide.
65
+ - **`CrudPage`** — réécrit : il tenait en neuf lignes et n'offrait aucune des
66
+ quatre opérations qui lui donnent son nom.
67
+
68
+ ## Ruptures
69
+ - `CrudPage` : `actions` portait des nœuds d'en-tête, ils vont dans
70
+ `headerActions`. `data` est requis, et `columns` l'est aussi à moins qu'une
71
+ `resource` ne les fournisse.
72
+ - `Sidebar` et `AppShell` : les props ont changé. Voir
73
+ [La navigation latérale](https://beatjo.github.io/sia-ui-site/guides/navigation)
74
+ et [La coquille d'application](https://beatjo.github.io/sia-ui-site/guides/coquille-application).
75
+
76
+ ## Documentation
77
+
78
+ Les cent trois composants ont désormais une page de référence — ce qu'ils
79
+ font, comment les installer, et **toutes** leurs props avec type et valeur par
80
+ défaut. Ces pages sont écrites par le code : les props viennent des types, les
81
+ descriptions de leurs commentaires, la commande d'installation du registre.
82
+
83
+ Le catalogue est passé de seize sections en deux langues à neuf, ordonnées du
84
+ plus général au plus assemblé. Les comptes rendus de développement ont été
85
+ retirés de la documentation : ils décrivaient un chemin parcouru, pas un
86
+ produit.
87
+
13
88
  ## 0.2.0
14
89
 
15
90
  ### Minor Changes
@@ -90,6 +165,148 @@ chez lui.
90
165
 
91
166
  - Include component styles when installing registry components
92
167
 
168
+ ## 0.2.0
169
+
170
+ - `resource` — **nouvelle entrée**. Une page de liste décrivait le même objet
171
+ trois fois : en colonnes pour le tableau, en champs pour le formulaire, en
172
+ lignes pour le détail. Plus la validation, les clés de recherche et la règle
173
+ de droits par opération. Ces descriptions divergent, et toujours dans le
174
+ même sens — c'est le formulaire qui oublie le champ que le tableau affiche.
175
+
176
+ `defineResource` la décrit **une seule fois**. Colonnes, champs, détail,
177
+ validation, recherche, clé de ligne et droits en sont dérivés. Le rendu se
178
+ déduit du type : un `currency` s'affiche formaté et aligné à droite, un
179
+ `select` avec ses `tones` devient une pastille, une `date` passe par le
180
+ format local.
181
+
182
+ Trois surfaces, trois défauts : `inTable` écarte ce qui est trop long pour
183
+ une cellule, `inForm` écarte ce que `readOnly` marque, `inDetail` garde
184
+ tout. Le détail n'est donc pas le tableau — une note de trois phrases sort
185
+ des colonnes et reste dans la boîte de consultation.
186
+
187
+ `permissions: "auto"` applique la convention `<nom>.<verbe>`. Chaque
188
+ dérivation cède à la prop correspondante : passer `columns` ne coûte ni le
189
+ formulaire, ni les droits.
190
+
191
+ - `crud-page` — **réécrit**. Il tenait en neuf lignes : un titre, un
192
+ emplacement libre et une pagination. Les quatre opérations d'une page de
193
+ liste étaient à réécrire à chaque écran, ce qui produit quatre variantes
194
+ qui divergent — celle qui oublie la confirmation, celle qui ne vérifie
195
+ pas les droits, celle dont le bouton reste actif pendant l'appel.
196
+
197
+ Créer, consulter, modifier, supprimer **fonctionnent d'emblée** : fournir
198
+ le gestionnaire suffit, ne pas le fournir retire l'action. La suppression
199
+ est confirmée d'office — on peut lever la confirmation, encore faut-il
200
+ l'avoir écrit.
201
+
202
+ `operations` personnalise chaque action : libellé, icône, droits,
203
+ visibilité ligne par ligne, confirmation. `extraRowActions` en ajoute
204
+ d'autres, `onBulkDelete` active la sélection et sa barre.
205
+
206
+ Sans gestionnaire, les actions **ouvrent leurs propres boîtes** : déclarer
207
+ `fields` et `onSubmit` suffit à obtenir un formulaire vide en création, le
208
+ même prérempli en modification, et une vue de détail dérivée des colonnes.
209
+ `onCreate`, `onEdit` et `onView` restent la porte de sortie vers une page
210
+ dédiée : fournis, ils passent devant la boîte. `resource` va plus loin et
211
+ dérive tout d'une seule déclaration.
212
+
213
+ **Migration, rupture** : `actions` portait des nœuds d'en-tête; ils vont
214
+ dans `headerActions`. Le nom `actions` désignerait sinon deux choses
215
+ différentes selon la version, ce qui est le pire cas — le code compile et
216
+ se comporte autrement. `data` est désormais requis, et `columns` l'est
217
+ aussi à moins qu'une `resource` ne les fournisse; le tableau reste
218
+ remplaçable par `children`.
219
+
220
+ - `data-table` — refonte. Il affichait des colonnes et un tri délégué.
221
+ S'ajoutent les **actions de ligne** — avec droits, confirmation, et
222
+ passage en menu au-delà de la limite —, la **sélection** et sa barre
223
+ d'actions groupées, une **vue en cartes** qui bascule d'elle-même sous
224
+ 768 px, la recherche locale, trois densités, les états de chargement,
225
+ d'erreur et de vide.
226
+
227
+ Les actions de ligne s'estompent hors survol : une colonne pleine de
228
+ boutons attire l'œil plus que les données. Elles restent entières au
229
+ clavier et sur tactile, où il n'y a pas de survol.
230
+
231
+ **Migration, rupture** : `align` passe de `left`/`right` à `start`/`end`,
232
+ et `getRowKey` devient facultatif. `useDataTableQuery` et
233
+ `createUrlTableStorage` sont inchangés.
234
+
235
+ - `app-shell` — **réécrit**. Il tenait en six lignes : une grille à deux
236
+ colonnes, un bouton de repli écrit `☰`, et des emplacements libres. Il ne
237
+ réutilisait ni la navigation, ni le tiroir, ni rien.
238
+
239
+ Il assemble maintenant le `Sidebar` et le `Drawer`, filtre les droits **une
240
+ seule fois** pour la barre comme pour les onglets, et se branche sur
241
+ n'importe quel routeur par une seule chaîne :
242
+
243
+ ```tsx
244
+ <AppShell nav={NAV} currentPath={usePathname()} renderLink={…} />
245
+ ```
246
+
247
+ De là il déduit l'entrée courante par le préfixe le plus long — une page
248
+ `/factures/12/lignes` marque bien `Factures` — et referme le tiroir mobile
249
+ à chaque navigation, sans jamais importer de routeur.
250
+
251
+ S'ajoutent trois états de barre (`expanded`, `collapsed`, `hidden`), trois
252
+ stratégies mobiles (`drawer`, `tabs`, `both`), `contentWidth`, `side`, les
253
+ largeurs personnalisables, et `BottomTabs` — qui ne montre que des
254
+ feuilles, un onglet ouvrant un sous-menu étant un piège tactile.
255
+
256
+ **Migration, rupture** : `logo` devient `brand`, `navigation` devient
257
+ `nav` et prend des données plutôt que des nœuds. `header` est inchangé.
258
+ Le titre de page n'est pas une prop : le poser dans `page`, avec
259
+ `PageHeader` — une coquille qui rend le `<h1>` force chaque écran à passer
260
+ par ses props.
261
+
262
+ L'entrée annonçait deux fichiers et une dépendance; elle en annonce
263
+ maintenant trois et cinq. Copiée telle quelle, elle serait arrivée cassée.
264
+
265
+ - `avatar` — refonte. Il servait une image, trois tailles et des initiales.
266
+ S'ajoutent : une **teinte dérivée du nom**, stable d'un écran à l'autre,
267
+ pour distinguer deux personnes aux mêmes initiales; trois formes et trois
268
+ variantes (`soft`, `solid`, `outline`); cinq tailles; une pastille de
269
+ présence à quatre états; et `AvatarGroup`, qui empile et résume son
270
+ surplus.
271
+
272
+ Le repli est désormais peint **sous** l'image plutôt qu'à sa place : la
273
+ mise en page ne bouge plus entre l'attente, la réussite et l'échec.
274
+
275
+ Les initiales prennent la première et la dernière partie du nom, particules
276
+ écartées : « Jean-Baptiste Kouassi Mbella » donne « JM », « Marie de la
277
+ Tour » donne « MT ».
278
+
279
+ **Migration** : aucune prop retirée. `fallback` accepte maintenant un
280
+ nœud React et non plus seulement une chaîne.
281
+
282
+ - `sidebar` — refonte. Trois défauts corrigés :
283
+
284
+ **Réduite, la barre enfermait ses sous-entrées.** Une règle forçait le
285
+ panneau des enfants à une hauteur nulle quel que soit son état : une
286
+ rubrique à sous-menus devenait inatteignable dès qu'on repliait la barre.
287
+ Les sous-menus sortent maintenant en volet, au survol ou au clavier.
288
+
289
+ **L'arbre s'arrêtait à deux niveaux**, interdits par le type lui-même
290
+ (`items?: Array<Omit<SidebarItem, "items">>`). Il descend désormais aussi
291
+ profond que l'arborescence du produit.
292
+
293
+ **Aucun filtrage par droits.** `permission` sur une entrée, `can` sur le
294
+ composant, et une cascade : un parent dont toute la descendance est
295
+ filtrée disparaît avec elle, sauf `keepWhenEmpty`.
296
+
297
+ S'ajoutent `renderLink` pour brancher un routeur sans en dépendre,
298
+ `openKeys` pour piloter les branches ouvertes, `accordion`, `side`, et les
299
+ variantes `default` / `filled` / `floating` en trois tailles.
300
+
301
+ **Migration** : aucune prop retirée. `registryDependencies` gagne
302
+ `overlay` — `sia-ui add sidebar --overwrite` l'installe.
303
+
304
+ ## 0.1.1
305
+
306
+ - `button` — l'entrée n'annonçait que son `index.tsx`. Installé, le bouton
307
+ arrivait donc sans sa feuille de style. `components/Button/styles.css`
308
+ rejoint ses fichiers.
309
+
93
310
  ## 0.1.0
94
311
 
95
312
  Première version des 104 entrées du registre.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Ivan Mbella
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ivan Mbella
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,35 +1,468 @@
1
- # @sia-ui/registry
1
+ # @sia-ui/registry
2
+
3
+ Le catalogue des composants installables par la CLI.
4
+
5
+ ```ts
6
+ import { registry, getRegistryItem } from "@sia-ui/registry";
7
+ ```
8
+
9
+ Chaque entrée porte son `nom`, sa `version`, son `status`
10
+ (`experimental`, `stable`, `deprecated`, `removed`), ses fichiers, ses
11
+ dépendances npm et ses dépendances de registre.
12
+
13
+ Les fichiers viennent de `@sia-ui/react-web` et sont copiés **sans
14
+ transformation** : il n'y a qu'une implémentation.
15
+
16
+ Ce paquet sert surtout à la [CLI](https://www.npmjs.com/package/@sia-ui/cli).
17
+
18
+ ## Place dans SIA UI
19
+
20
+ ```
21
+ @sia-ui/tokens valeurs : couleurs, espacements, mouvement, vocabulaire
22
+ @sia-ui/utils fonctions sans dépendance
23
+ @sia-ui/api client HTTP — indépendant de l'interface
24
+ @sia-ui/headless comportement, avec React, sans plateforme
25
+ @sia-ui/react primitives de runtime DOM
26
+ @sia-ui/react-web composants DOM
27
+ @sia-ui/react-native composants natifs, à venir
28
+ ```
29
+
30
+ Une chose s'écrit au niveau le plus bas où elle a du sens, et une seule fois.
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
2
47
 
3
- Le catalogue des composants installables par la CLI.
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.
4
52
 
5
- ```ts
6
- import { registry, getRegistryItem } from "@sia-ui/registry";
7
- ```
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.
8
57
 
9
- Chaque entrée porte son `nom`, sa `version`, son `status`
10
- (`experimental`, `stable`, `deprecated`, `removed`), ses fichiers, ses
11
- dépendances npm et ses dépendances de registre.
58
+ ## 0.3.0
12
59
 
13
- Les fichiers viennent de `@sia-ui/react-web` et sont copiés **sans
14
- transformation** : il n'y a qu'une implémentation.
60
+ ### Minor Changes
15
61
 
16
- Ce paquet sert surtout à la [CLI](https://www.npmjs.com/package/@sia-ui/cli).
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.
17
64
 
18
- ## Place dans SIA UI
65
+ ## Déclarer une ressource
19
66
 
20
- ```
21
- @sia-ui/tokens valeurs : couleurs, espacements, mouvement, vocabulaire
22
- @sia-ui/utils fonctions sans dépendance
23
- @sia-ui/api client HTTP — indépendant de l'interface
24
- @sia-ui/headless comportement, avec React, sans plateforme
25
- @sia-ui/react primitives de runtime DOM
26
- @sia-ui/react-web composants DOM
27
- @sia-ui/react-native composants natifs, à venir
28
- ```
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.
29
71
 
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).
72
+ ```tsx
73
+ <CrudPage resource={FACTURE} data={factures} can={can}
74
+ onSubmit={…} onDelete={…} />
75
+ ```
32
76
 
33
- ## Licence
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>`.
34
81
 
35
- MIT
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.
465
+
466
+ ## Licence
467
+
468
+ MIT
package/dist/index.cjs CHANGED
@@ -60,17 +60,24 @@ var registry_default = {
60
60
  },
61
61
  {
62
62
  name: "app-shell",
63
- description: "Responsive application shell with collapsible navigation.",
63
+ description: "Application shell: three sidebar states, permission filtering, router-agnostic active route, and mobile drawer or bottom tabs.",
64
64
  type: "pattern",
65
- version: "0.1.0",
65
+ version: "0.2.0",
66
66
  status: "stable",
67
67
  source: "package",
68
68
  files: [
69
69
  "components/AppShell/index.tsx",
70
+ "components/AppShell/tab-bar.tsx",
70
71
  "components/AppShell/styles.css"
71
72
  ],
72
73
  dependencies: [
74
+ "@sia-ui/headless",
75
+ "@sia-ui/react",
73
76
  "@sia-ui/utils"
77
+ ],
78
+ registryDependencies: [
79
+ "drawer",
80
+ "sidebar"
74
81
  ]
75
82
  },
76
83
  {
@@ -155,9 +162,9 @@ var registry_default = {
155
162
  },
156
163
  {
157
164
  name: "avatar",
158
- description: "Image avatar with automatic initials fallback.",
165
+ description: "Avatar and stacked group: name-derived tint, initials, presence, three shapes and variants.",
159
166
  type: "primitive",
160
- version: "0.1.0",
167
+ version: "0.2.0",
161
168
  status: "stable",
162
169
  source: "package",
163
170
  files: [
@@ -212,11 +219,12 @@ var registry_default = {
212
219
  name: "button",
213
220
  description: "Accessible button with loading and icon states.",
214
221
  type: "primitive",
215
- version: "0.1.0",
222
+ version: "0.1.1",
216
223
  status: "stable",
217
224
  source: "package",
218
225
  files: [
219
- "components/Button/index.tsx"
226
+ "components/Button/index.tsx",
227
+ "components/Button/styles.css"
220
228
  ],
221
229
  dependencies: [
222
230
  "@sia-ui/headless",
@@ -373,22 +381,30 @@ var registry_default = {
373
381
  },
374
382
  {
375
383
  name: "crud-page",
376
- description: "CRUD page composition with header, async states and pagination.",
384
+ description: "List page for a declared resource: create, view, edit and delete open their own dialogs, each removable and permission-aware.",
377
385
  type: "pattern",
378
- version: "0.1.0",
386
+ version: "0.2.0",
379
387
  status: "stable",
380
388
  source: "package",
381
389
  files: [
382
390
  "components/CrudPage/index.tsx",
391
+ "components/CrudPage/dialogs.tsx",
383
392
  "components/CrudPage/styles.css"
384
393
  ],
385
394
  dependencies: [
395
+ "@sia-ui/headless",
386
396
  "@sia-ui/utils"
387
397
  ],
388
398
  registryDependencies: [
389
- "async-state",
399
+ "button",
400
+ "data-table",
401
+ "descriptions",
402
+ "form",
403
+ "icons",
404
+ "modal",
390
405
  "page-header",
391
- "pagination"
406
+ "pagination",
407
+ "resource"
392
408
  ]
393
409
  },
394
410
  {
@@ -408,21 +424,35 @@ var registry_default = {
408
424
  },
409
425
  {
410
426
  name: "data-table",
411
- description: "Generic typed table with loading and empty states.",
427
+ description: "Data table: row actions with permissions and confirmation, selection, card view, density and sorting.",
412
428
  type: "component",
413
- version: "0.1.0",
429
+ version: "0.2.0",
414
430
  status: "stable",
415
431
  source: "package",
416
432
  files: [
417
433
  "components/DataTable/index.tsx",
434
+ "components/DataTable/types.ts",
435
+ "components/DataTable/values.ts",
436
+ "components/DataTable/row-actions.tsx",
437
+ "components/DataTable/query.ts",
418
438
  "components/DataTable/styles.css"
419
439
  ],
420
440
  dependencies: [
421
441
  "@sia-ui/headless",
442
+ "@sia-ui/react",
422
443
  "@sia-ui/utils"
423
444
  ],
424
445
  registryDependencies: [
425
- "icons"
446
+ "button",
447
+ "checkbox",
448
+ "confirm-dialog",
449
+ "dropdown-menu",
450
+ "empty-state",
451
+ "error-state",
452
+ "icon-button",
453
+ "icons",
454
+ "search-input",
455
+ "skeleton"
426
456
  ]
427
457
  },
428
458
  {
@@ -1275,6 +1305,30 @@ var registry_default = {
1275
1305
  "@sia-ui/utils"
1276
1306
  ]
1277
1307
  },
1308
+ {
1309
+ name: "resource",
1310
+ description: "Declare a resource once: table columns, form fields, detail view, validation, search keys and permissions are all derived from it.",
1311
+ type: "pattern",
1312
+ version: "0.2.0",
1313
+ status: "stable",
1314
+ source: "package",
1315
+ files: [
1316
+ "components/Resource/index.tsx"
1317
+ ],
1318
+ dependencies: [
1319
+ "@sia-ui/headless",
1320
+ "@sia-ui/tokens",
1321
+ "@sia-ui/utils"
1322
+ ],
1323
+ registryDependencies: [
1324
+ "amount-display",
1325
+ "badge",
1326
+ "data-table",
1327
+ "field",
1328
+ "form",
1329
+ "select"
1330
+ ]
1331
+ },
1278
1332
  {
1279
1333
  name: "rich-text-editor",
1280
1334
  description: "Lightweight rich text input with basic formatting commands.",
@@ -1346,9 +1400,9 @@ var registry_default = {
1346
1400
  },
1347
1401
  {
1348
1402
  name: "sidebar",
1349
- description: "Collapsible application navigation with groups and sub-items.",
1403
+ description: "Application navigation: unlimited depth, permission filtering, and a rail whose sub-menus open in a flyout.",
1350
1404
  type: "pattern",
1351
- version: "0.1.0",
1405
+ version: "0.2.0",
1352
1406
  status: "stable",
1353
1407
  source: "package",
1354
1408
  files: [
@@ -1357,10 +1411,12 @@ var registry_default = {
1357
1411
  ],
1358
1412
  dependencies: [
1359
1413
  "@sia-ui/headless",
1414
+ "@sia-ui/tokens",
1360
1415
  "@sia-ui/utils"
1361
1416
  ],
1362
1417
  registryDependencies: [
1363
- "icons"
1418
+ "icons",
1419
+ "overlay"
1364
1420
  ]
1365
1421
  },
1366
1422
  {
package/dist/index.js CHANGED
@@ -58,17 +58,24 @@ var registry_default = {
58
58
  },
59
59
  {
60
60
  name: "app-shell",
61
- description: "Responsive application shell with collapsible navigation.",
61
+ description: "Application shell: three sidebar states, permission filtering, router-agnostic active route, and mobile drawer or bottom tabs.",
62
62
  type: "pattern",
63
- version: "0.1.0",
63
+ version: "0.2.0",
64
64
  status: "stable",
65
65
  source: "package",
66
66
  files: [
67
67
  "components/AppShell/index.tsx",
68
+ "components/AppShell/tab-bar.tsx",
68
69
  "components/AppShell/styles.css"
69
70
  ],
70
71
  dependencies: [
72
+ "@sia-ui/headless",
73
+ "@sia-ui/react",
71
74
  "@sia-ui/utils"
75
+ ],
76
+ registryDependencies: [
77
+ "drawer",
78
+ "sidebar"
72
79
  ]
73
80
  },
74
81
  {
@@ -153,9 +160,9 @@ var registry_default = {
153
160
  },
154
161
  {
155
162
  name: "avatar",
156
- description: "Image avatar with automatic initials fallback.",
163
+ description: "Avatar and stacked group: name-derived tint, initials, presence, three shapes and variants.",
157
164
  type: "primitive",
158
- version: "0.1.0",
165
+ version: "0.2.0",
159
166
  status: "stable",
160
167
  source: "package",
161
168
  files: [
@@ -210,11 +217,12 @@ var registry_default = {
210
217
  name: "button",
211
218
  description: "Accessible button with loading and icon states.",
212
219
  type: "primitive",
213
- version: "0.1.0",
220
+ version: "0.1.1",
214
221
  status: "stable",
215
222
  source: "package",
216
223
  files: [
217
- "components/Button/index.tsx"
224
+ "components/Button/index.tsx",
225
+ "components/Button/styles.css"
218
226
  ],
219
227
  dependencies: [
220
228
  "@sia-ui/headless",
@@ -371,22 +379,30 @@ var registry_default = {
371
379
  },
372
380
  {
373
381
  name: "crud-page",
374
- description: "CRUD page composition with header, async states and pagination.",
382
+ description: "List page for a declared resource: create, view, edit and delete open their own dialogs, each removable and permission-aware.",
375
383
  type: "pattern",
376
- version: "0.1.0",
384
+ version: "0.2.0",
377
385
  status: "stable",
378
386
  source: "package",
379
387
  files: [
380
388
  "components/CrudPage/index.tsx",
389
+ "components/CrudPage/dialogs.tsx",
381
390
  "components/CrudPage/styles.css"
382
391
  ],
383
392
  dependencies: [
393
+ "@sia-ui/headless",
384
394
  "@sia-ui/utils"
385
395
  ],
386
396
  registryDependencies: [
387
- "async-state",
397
+ "button",
398
+ "data-table",
399
+ "descriptions",
400
+ "form",
401
+ "icons",
402
+ "modal",
388
403
  "page-header",
389
- "pagination"
404
+ "pagination",
405
+ "resource"
390
406
  ]
391
407
  },
392
408
  {
@@ -406,21 +422,35 @@ var registry_default = {
406
422
  },
407
423
  {
408
424
  name: "data-table",
409
- description: "Generic typed table with loading and empty states.",
425
+ description: "Data table: row actions with permissions and confirmation, selection, card view, density and sorting.",
410
426
  type: "component",
411
- version: "0.1.0",
427
+ version: "0.2.0",
412
428
  status: "stable",
413
429
  source: "package",
414
430
  files: [
415
431
  "components/DataTable/index.tsx",
432
+ "components/DataTable/types.ts",
433
+ "components/DataTable/values.ts",
434
+ "components/DataTable/row-actions.tsx",
435
+ "components/DataTable/query.ts",
416
436
  "components/DataTable/styles.css"
417
437
  ],
418
438
  dependencies: [
419
439
  "@sia-ui/headless",
440
+ "@sia-ui/react",
420
441
  "@sia-ui/utils"
421
442
  ],
422
443
  registryDependencies: [
423
- "icons"
444
+ "button",
445
+ "checkbox",
446
+ "confirm-dialog",
447
+ "dropdown-menu",
448
+ "empty-state",
449
+ "error-state",
450
+ "icon-button",
451
+ "icons",
452
+ "search-input",
453
+ "skeleton"
424
454
  ]
425
455
  },
426
456
  {
@@ -1273,6 +1303,30 @@ var registry_default = {
1273
1303
  "@sia-ui/utils"
1274
1304
  ]
1275
1305
  },
1306
+ {
1307
+ name: "resource",
1308
+ description: "Declare a resource once: table columns, form fields, detail view, validation, search keys and permissions are all derived from it.",
1309
+ type: "pattern",
1310
+ version: "0.2.0",
1311
+ status: "stable",
1312
+ source: "package",
1313
+ files: [
1314
+ "components/Resource/index.tsx"
1315
+ ],
1316
+ dependencies: [
1317
+ "@sia-ui/headless",
1318
+ "@sia-ui/tokens",
1319
+ "@sia-ui/utils"
1320
+ ],
1321
+ registryDependencies: [
1322
+ "amount-display",
1323
+ "badge",
1324
+ "data-table",
1325
+ "field",
1326
+ "form",
1327
+ "select"
1328
+ ]
1329
+ },
1276
1330
  {
1277
1331
  name: "rich-text-editor",
1278
1332
  description: "Lightweight rich text input with basic formatting commands.",
@@ -1344,9 +1398,9 @@ var registry_default = {
1344
1398
  },
1345
1399
  {
1346
1400
  name: "sidebar",
1347
- description: "Collapsible application navigation with groups and sub-items.",
1401
+ description: "Application navigation: unlimited depth, permission filtering, and a rail whose sub-menus open in a flyout.",
1348
1402
  type: "pattern",
1349
- version: "0.1.0",
1403
+ version: "0.2.0",
1350
1404
  status: "stable",
1351
1405
  source: "package",
1352
1406
  files: [
@@ -1355,10 +1409,12 @@ var registry_default = {
1355
1409
  ],
1356
1410
  dependencies: [
1357
1411
  "@sia-ui/headless",
1412
+ "@sia-ui/tokens",
1358
1413
  "@sia-ui/utils"
1359
1414
  ],
1360
1415
  registryDependencies: [
1361
- "icons"
1416
+ "icons",
1417
+ "overlay"
1362
1418
  ]
1363
1419
  },
1364
1420
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sia-ui/registry",
3
- "version": "0.2.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": [
package/registry.json CHANGED
@@ -60,17 +60,24 @@
60
60
  },
61
61
  {
62
62
  "name": "app-shell",
63
- "description": "Responsive application shell with collapsible navigation.",
63
+ "description": "Application shell: three sidebar states, permission filtering, router-agnostic active route, and mobile drawer or bottom tabs.",
64
64
  "type": "pattern",
65
- "version": "0.1.0",
65
+ "version": "0.2.0",
66
66
  "status": "stable",
67
67
  "source": "package",
68
68
  "files": [
69
69
  "components/AppShell/index.tsx",
70
+ "components/AppShell/tab-bar.tsx",
70
71
  "components/AppShell/styles.css"
71
72
  ],
72
73
  "dependencies": [
74
+ "@sia-ui/headless",
75
+ "@sia-ui/react",
73
76
  "@sia-ui/utils"
77
+ ],
78
+ "registryDependencies": [
79
+ "drawer",
80
+ "sidebar"
74
81
  ]
75
82
  },
76
83
  {
@@ -155,9 +162,9 @@
155
162
  },
156
163
  {
157
164
  "name": "avatar",
158
- "description": "Image avatar with automatic initials fallback.",
165
+ "description": "Avatar and stacked group: name-derived tint, initials, presence, three shapes and variants.",
159
166
  "type": "primitive",
160
- "version": "0.1.0",
167
+ "version": "0.2.0",
161
168
  "status": "stable",
162
169
  "source": "package",
163
170
  "files": [
@@ -374,22 +381,30 @@
374
381
  },
375
382
  {
376
383
  "name": "crud-page",
377
- "description": "CRUD page composition with header, async states and pagination.",
384
+ "description": "List page for a declared resource: create, view, edit and delete open their own dialogs, each removable and permission-aware.",
378
385
  "type": "pattern",
379
- "version": "0.1.0",
386
+ "version": "0.2.0",
380
387
  "status": "stable",
381
388
  "source": "package",
382
389
  "files": [
383
390
  "components/CrudPage/index.tsx",
391
+ "components/CrudPage/dialogs.tsx",
384
392
  "components/CrudPage/styles.css"
385
393
  ],
386
394
  "dependencies": [
395
+ "@sia-ui/headless",
387
396
  "@sia-ui/utils"
388
397
  ],
389
398
  "registryDependencies": [
390
- "async-state",
399
+ "button",
400
+ "data-table",
401
+ "descriptions",
402
+ "form",
403
+ "icons",
404
+ "modal",
391
405
  "page-header",
392
- "pagination"
406
+ "pagination",
407
+ "resource"
393
408
  ]
394
409
  },
395
410
  {
@@ -409,21 +424,35 @@
409
424
  },
410
425
  {
411
426
  "name": "data-table",
412
- "description": "Generic typed table with loading and empty states.",
427
+ "description": "Data table: row actions with permissions and confirmation, selection, card view, density and sorting.",
413
428
  "type": "component",
414
- "version": "0.1.0",
429
+ "version": "0.2.0",
415
430
  "status": "stable",
416
431
  "source": "package",
417
432
  "files": [
418
433
  "components/DataTable/index.tsx",
434
+ "components/DataTable/types.ts",
435
+ "components/DataTable/values.ts",
436
+ "components/DataTable/row-actions.tsx",
437
+ "components/DataTable/query.ts",
419
438
  "components/DataTable/styles.css"
420
439
  ],
421
440
  "dependencies": [
422
441
  "@sia-ui/headless",
442
+ "@sia-ui/react",
423
443
  "@sia-ui/utils"
424
444
  ],
425
445
  "registryDependencies": [
426
- "icons"
446
+ "button",
447
+ "checkbox",
448
+ "confirm-dialog",
449
+ "dropdown-menu",
450
+ "empty-state",
451
+ "error-state",
452
+ "icon-button",
453
+ "icons",
454
+ "search-input",
455
+ "skeleton"
427
456
  ]
428
457
  },
429
458
  {
@@ -1276,6 +1305,30 @@
1276
1305
  "@sia-ui/utils"
1277
1306
  ]
1278
1307
  },
1308
+ {
1309
+ "name": "resource",
1310
+ "description": "Declare a resource once: table columns, form fields, detail view, validation, search keys and permissions are all derived from it.",
1311
+ "type": "pattern",
1312
+ "version": "0.2.0",
1313
+ "status": "stable",
1314
+ "source": "package",
1315
+ "files": [
1316
+ "components/Resource/index.tsx"
1317
+ ],
1318
+ "dependencies": [
1319
+ "@sia-ui/headless",
1320
+ "@sia-ui/tokens",
1321
+ "@sia-ui/utils"
1322
+ ],
1323
+ "registryDependencies": [
1324
+ "amount-display",
1325
+ "badge",
1326
+ "data-table",
1327
+ "field",
1328
+ "form",
1329
+ "select"
1330
+ ]
1331
+ },
1279
1332
  {
1280
1333
  "name": "rich-text-editor",
1281
1334
  "description": "Lightweight rich text input with basic formatting commands.",
@@ -1347,9 +1400,9 @@
1347
1400
  },
1348
1401
  {
1349
1402
  "name": "sidebar",
1350
- "description": "Collapsible application navigation with groups and sub-items.",
1403
+ "description": "Application navigation: unlimited depth, permission filtering, and a rail whose sub-menus open in a flyout.",
1351
1404
  "type": "pattern",
1352
- "version": "0.1.0",
1405
+ "version": "0.2.0",
1353
1406
  "status": "stable",
1354
1407
  "source": "package",
1355
1408
  "files": [
@@ -1358,10 +1411,12 @@
1358
1411
  ],
1359
1412
  "dependencies": [
1360
1413
  "@sia-ui/headless",
1414
+ "@sia-ui/tokens",
1361
1415
  "@sia-ui/utils"
1362
1416
  ],
1363
1417
  "registryDependencies": [
1364
- "icons"
1418
+ "icons",
1419
+ "overlay"
1365
1420
  ]
1366
1421
  },
1367
1422
  {