@sia-ui/registry 0.1.0 → 0.3.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/CHANGELOG.md CHANGED
@@ -10,6 +10,297 @@ 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.0
14
+
15
+ ### Minor Changes
16
+
17
+ - Une ressource se déclare une fois, cinq composants refondus, et une
18
+ documentation qui décrit le produit plutôt que son développement.
19
+
20
+ ## Déclarer une ressource
21
+
22
+ `defineResource` décrit un objet métier **une seule fois**. Les colonnes du
23
+ tableau, les champs du formulaire, les lignes de la vue de détail, la
24
+ validation, les clés de recherche et les quatre règles de droits en sont
25
+ dérivés — et chaque dérivation reste remplaçable par la prop correspondante.
26
+
27
+ ```tsx
28
+ <CrudPage resource={FACTURE} data={factures} can={can}
29
+ onSubmit={…} onDelete={…} />
30
+ ```
31
+
32
+ Le rendu se déduit du type : un `currency` s'affiche formaté et aligné à
33
+ droite, un `select` avec ses `tones` devient une pastille, une `date` passe
34
+ par le format local. `permissions: "auto"` applique la convention
35
+ `<nom>.<verbe>`.
36
+
37
+ ## Les quatre opérations ouvrent leurs propres boîtes
38
+
39
+ `CrudPage` n'appelle plus seulement un gestionnaire : déclarer `fields` et
40
+ `onSubmit` suffit à obtenir un formulaire vide en création, le même prérempli
41
+ en modification, et une vue de détail. `onCreate`, `onEdit` et `onView`
42
+ restent la porte de sortie vers une page dédiée — fournis, ils passent devant
43
+ la boîte.
44
+
45
+ Les boîtes n'inventent rien : `Modal` pour la boîte, `Form` pour la saisie,
46
+ `Descriptions` pour la lecture.
47
+
48
+ ## Cinq composants refondus
49
+ - **`Sidebar`** — le rail réduit n'enferme plus ses sous-menus : ils sortent
50
+ en volet. Profondeur illimitée, droits en cascade, trois variantes.
51
+ - **`AppShell`** — se branche sur n'importe quel routeur par une seule
52
+ chaîne, l'adresse courante. Trois états de barre, tiroir ou onglets bas sur
53
+ mobile, filtrage des droits fait une seule fois.
54
+ - **`Avatar`** — teinte dérivée du nom, repli peint sous l'image, quatre états
55
+ de présence, et des piles qui résument leur surplus.
56
+ - **`DataTable`** — actions de ligne avec droits et confirmation, sélection et
57
+ barre groupée, vue en cartes, trois densités, états de chargement, d'erreur
58
+ et de vide.
59
+ - **`CrudPage`** — réécrit : il tenait en neuf lignes et n'offrait aucune des
60
+ quatre opérations qui lui donnent son nom.
61
+
62
+ ## Ruptures
63
+ - `CrudPage` : `actions` portait des nœuds d'en-tête, ils vont dans
64
+ `headerActions`. `data` est requis, et `columns` l'est aussi à moins qu'une
65
+ `resource` ne les fournisse.
66
+ - `Sidebar` et `AppShell` : les props ont changé. Voir
67
+ [La navigation latérale](https://beatjo.github.io/sia-ui-site/guides/navigation)
68
+ et [La coquille d'application](https://beatjo.github.io/sia-ui-site/guides/coquille-application).
69
+
70
+ ## Documentation
71
+
72
+ Les cent trois composants ont désormais une page de référence — ce qu'ils
73
+ font, comment les installer, et **toutes** leurs props avec type et valeur par
74
+ défaut. Ces pages sont écrites par le code : les props viennent des types, les
75
+ descriptions de leurs commentaires, la commande d'installation du registre.
76
+
77
+ Le catalogue est passé de seize sections en deux langues à neuf, ordonnées du
78
+ plus général au plus assemblé. Les comptes rendus de développement ont été
79
+ retirés de la documentation : ils décrivaient un chemin parcouru, pas un
80
+ produit.
81
+
82
+ ## 0.2.0
83
+
84
+ ### Minor Changes
85
+
86
+ - e4e4a72: Annonces, session et droits, formulaires sans dépendance, et vingt entrées de
87
+ registre de plus.
88
+
89
+ ## Composants
90
+ - **Annonces** — `toast()` s'appelle hors de React, variante `loading`, boutons
91
+ d'action, six coins réglables par annonce, balayage pour écarter, suivi de
92
+ promesse.
93
+ - **Session et droits** — `createSessionStore` avec sa machine à quatre états,
94
+ `createAccessLayer` à évaluateur injecté, `RequireSession` sans routeur.
95
+ - **Formulaires** — le contrat `FormAdapter` et `useLocalForm`, sans
96
+ dépendance. `Form` est écrit sur le contrat : il n'importe ni
97
+ react-hook-form ni zod, et se câble à l'un ou l'autre par un adaptateur.
98
+ - **Vingt entrées de registre de plus** — `progress`, `dropdown-menu`,
99
+ `accordion`, `sidebar`, `breadcrumb`, `steps`, `toggle`, `scroll-area`,
100
+ `hover-card`, `aspect-ratio`, `input-number`, `password-input`,
101
+ `phone-input`, `chart`, `require-session`, `form`…
102
+ - **Thème** — mode `system`, persistance et script anti-clignotement dans
103
+ `SiaProvider`, en remplacement de `next-themes`.
104
+
105
+ ## `@sia-ui/api`
106
+
107
+ Le client HTTP typé est un paquet à part : ni React, ni DOM, ni tokens. Il
108
+ s'installe seul, et copier un `Badge` depuis le registre ne l'entraîne pas.
109
+
110
+ ## Utilitaires
111
+
112
+ `@sia-ui/utils` passe de six à quatorze modules : `query`, `async`,
113
+ `collection`, `object`, `validation`, `file`, `clipboard`, `locale`.
114
+
115
+ ## Archives
116
+ - Plus de sourcemaps : elles pesaient environ soixante pour cent de chaque
117
+ archive — `@sia-ui/react-web` passe de 2,1 Mo à 759 Ko.
118
+ - Chaque paquet porte enfin la licence MIT qu'il annonce.
119
+
120
+ ## Vitrine en ligne
121
+
122
+ Trois surfaces publiées sur GitHub Pages à chaque poussée sur `main` : la
123
+ documentation à la racine, le catalogue Storybook sous `/storybook/`, la
124
+ démonstration sous `/preview/`. Le site de documentation est construit depuis
125
+ les fichiers de `docs/` eux-mêmes, qui restent du Markdown ordinaire.
126
+
127
+ ## Le registre n'est plus une voie sans retour
128
+
129
+ Installer était jusqu'ici définitif : plus rien ne disait ce qu'on avait, ce
130
+ qu'on avait retouché, ni ce qui avait bougé en amont — donc rien ne permettait
131
+ de corriger ni de déprécier une entrée après coup.
132
+ - **`sia-ui.lock.json`**, écrit à chaque `add` : version, date et empreinte de
133
+ chaque fichier copié.
134
+ - **Quatre commandes** : `diff`, `remove`, `doctor`, `list --outdated`.
135
+ `remove` refuse de casser un voisin ou d'effacer un fichier retouché.
136
+ - **Cycle de vie des entrées** — `experimental`, `stable`, `deprecated`,
137
+ `removed` — avec `replacedBy`. `add` refuse ce qui est retiré, `doctor`
138
+ signale ce qui est déprécié chez qui l'a déjà installé.
139
+ - **Journal du registre**, entrée par entrée, dont `pnpm check:changelog`
140
+ refuse qu'il mente.
141
+ - **Registre servi en HTTP**, versionné par l'URL : `…/r/v1/`. Corriger une
142
+ entrée n'oblige plus à republier la CLI.
143
+
144
+ ## Corrections
145
+ - La case à cocher et le bouton radio masquaient leur contrôle natif en
146
+ `opacity:0`. Le navigateur le peignait encore sous le visuel personnalisé, et
147
+ ce dessin clignotait au clic. Les deux utilisent désormais la recette
148
+ partagée `.sia-visually-hidden`, qui le découpe hors du rendu sans le retirer
149
+ du clavier.
150
+ - Une case à cocher non contrôlée ne se peignait jamais cochée : l'`<input>`
151
+ basculait, mais la classe qui dessine la case ne suivait pas.
152
+ - Le curseur de survol des graphes était ovale, et le tracé de la courbe
153
+ haché : les marqueurs sont sortis du SVG, qui est étiré sans conserver ses
154
+ proportions.
155
+ - L'entrée `drawer` du registre était impossible à installer — elle importait
156
+ deux dossiers que la CLI ne copie pas.
157
+
158
+ ### Patch Changes
159
+
160
+ - Include component styles when installing registry components
161
+
162
+ ## 0.2.0
163
+
164
+ - `resource` — **nouvelle entrée**. Une page de liste décrivait le même objet
165
+ trois fois : en colonnes pour le tableau, en champs pour le formulaire, en
166
+ lignes pour le détail. Plus la validation, les clés de recherche et la règle
167
+ de droits par opération. Ces descriptions divergent, et toujours dans le
168
+ même sens — c'est le formulaire qui oublie le champ que le tableau affiche.
169
+
170
+ `defineResource` la décrit **une seule fois**. Colonnes, champs, détail,
171
+ validation, recherche, clé de ligne et droits en sont dérivés. Le rendu se
172
+ déduit du type : un `currency` s'affiche formaté et aligné à droite, un
173
+ `select` avec ses `tones` devient une pastille, une `date` passe par le
174
+ format local.
175
+
176
+ Trois surfaces, trois défauts : `inTable` écarte ce qui est trop long pour
177
+ une cellule, `inForm` écarte ce que `readOnly` marque, `inDetail` garde
178
+ tout. Le détail n'est donc pas le tableau — une note de trois phrases sort
179
+ des colonnes et reste dans la boîte de consultation.
180
+
181
+ `permissions: "auto"` applique la convention `<nom>.<verbe>`. Chaque
182
+ dérivation cède à la prop correspondante : passer `columns` ne coûte ni le
183
+ formulaire, ni les droits.
184
+
185
+ - `crud-page` — **réécrit**. Il tenait en neuf lignes : un titre, un
186
+ emplacement libre et une pagination. Les quatre opérations d'une page de
187
+ liste étaient à réécrire à chaque écran, ce qui produit quatre variantes
188
+ qui divergent — celle qui oublie la confirmation, celle qui ne vérifie
189
+ pas les droits, celle dont le bouton reste actif pendant l'appel.
190
+
191
+ Créer, consulter, modifier, supprimer **fonctionnent d'emblée** : fournir
192
+ le gestionnaire suffit, ne pas le fournir retire l'action. La suppression
193
+ est confirmée d'office — on peut lever la confirmation, encore faut-il
194
+ l'avoir écrit.
195
+
196
+ `operations` personnalise chaque action : libellé, icône, droits,
197
+ visibilité ligne par ligne, confirmation. `extraRowActions` en ajoute
198
+ d'autres, `onBulkDelete` active la sélection et sa barre.
199
+
200
+ Sans gestionnaire, les actions **ouvrent leurs propres boîtes** : déclarer
201
+ `fields` et `onSubmit` suffit à obtenir un formulaire vide en création, le
202
+ même prérempli en modification, et une vue de détail dérivée des colonnes.
203
+ `onCreate`, `onEdit` et `onView` restent la porte de sortie vers une page
204
+ dédiée : fournis, ils passent devant la boîte. `resource` va plus loin et
205
+ dérive tout d'une seule déclaration.
206
+
207
+ **Migration, rupture** : `actions` portait des nœuds d'en-tête; ils vont
208
+ dans `headerActions`. Le nom `actions` désignerait sinon deux choses
209
+ différentes selon la version, ce qui est le pire cas — le code compile et
210
+ se comporte autrement. `data` est désormais requis, et `columns` l'est
211
+ aussi à moins qu'une `resource` ne les fournisse; le tableau reste
212
+ remplaçable par `children`.
213
+
214
+ - `data-table` — refonte. Il affichait des colonnes et un tri délégué.
215
+ S'ajoutent les **actions de ligne** — avec droits, confirmation, et
216
+ passage en menu au-delà de la limite —, la **sélection** et sa barre
217
+ d'actions groupées, une **vue en cartes** qui bascule d'elle-même sous
218
+ 768 px, la recherche locale, trois densités, les états de chargement,
219
+ d'erreur et de vide.
220
+
221
+ Les actions de ligne s'estompent hors survol : une colonne pleine de
222
+ boutons attire l'œil plus que les données. Elles restent entières au
223
+ clavier et sur tactile, où il n'y a pas de survol.
224
+
225
+ **Migration, rupture** : `align` passe de `left`/`right` à `start`/`end`,
226
+ et `getRowKey` devient facultatif. `useDataTableQuery` et
227
+ `createUrlTableStorage` sont inchangés.
228
+
229
+ - `app-shell` — **réécrit**. Il tenait en six lignes : une grille à deux
230
+ colonnes, un bouton de repli écrit `☰`, et des emplacements libres. Il ne
231
+ réutilisait ni la navigation, ni le tiroir, ni rien.
232
+
233
+ Il assemble maintenant le `Sidebar` et le `Drawer`, filtre les droits **une
234
+ seule fois** pour la barre comme pour les onglets, et se branche sur
235
+ n'importe quel routeur par une seule chaîne :
236
+
237
+ ```tsx
238
+ <AppShell nav={NAV} currentPath={usePathname()} renderLink={…} />
239
+ ```
240
+
241
+ De là il déduit l'entrée courante par le préfixe le plus long — une page
242
+ `/factures/12/lignes` marque bien `Factures` — et referme le tiroir mobile
243
+ à chaque navigation, sans jamais importer de routeur.
244
+
245
+ S'ajoutent trois états de barre (`expanded`, `collapsed`, `hidden`), trois
246
+ stratégies mobiles (`drawer`, `tabs`, `both`), `contentWidth`, `side`, les
247
+ largeurs personnalisables, et `BottomTabs` — qui ne montre que des
248
+ feuilles, un onglet ouvrant un sous-menu étant un piège tactile.
249
+
250
+ **Migration, rupture** : `logo` devient `brand`, `navigation` devient
251
+ `nav` et prend des données plutôt que des nœuds. `header` est inchangé.
252
+ Le titre de page n'est pas une prop : le poser dans `page`, avec
253
+ `PageHeader` — une coquille qui rend le `<h1>` force chaque écran à passer
254
+ par ses props.
255
+
256
+ L'entrée annonçait deux fichiers et une dépendance; elle en annonce
257
+ maintenant trois et cinq. Copiée telle quelle, elle serait arrivée cassée.
258
+
259
+ - `avatar` — refonte. Il servait une image, trois tailles et des initiales.
260
+ S'ajoutent : une **teinte dérivée du nom**, stable d'un écran à l'autre,
261
+ pour distinguer deux personnes aux mêmes initiales; trois formes et trois
262
+ variantes (`soft`, `solid`, `outline`); cinq tailles; une pastille de
263
+ présence à quatre états; et `AvatarGroup`, qui empile et résume son
264
+ surplus.
265
+
266
+ Le repli est désormais peint **sous** l'image plutôt qu'à sa place : la
267
+ mise en page ne bouge plus entre l'attente, la réussite et l'échec.
268
+
269
+ Les initiales prennent la première et la dernière partie du nom, particules
270
+ écartées : « Jean-Baptiste Kouassi Mbella » donne « JM », « Marie de la
271
+ Tour » donne « MT ».
272
+
273
+ **Migration** : aucune prop retirée. `fallback` accepte maintenant un
274
+ nœud React et non plus seulement une chaîne.
275
+
276
+ - `sidebar` — refonte. Trois défauts corrigés :
277
+
278
+ **Réduite, la barre enfermait ses sous-entrées.** Une règle forçait le
279
+ panneau des enfants à une hauteur nulle quel que soit son état : une
280
+ rubrique à sous-menus devenait inatteignable dès qu'on repliait la barre.
281
+ Les sous-menus sortent maintenant en volet, au survol ou au clavier.
282
+
283
+ **L'arbre s'arrêtait à deux niveaux**, interdits par le type lui-même
284
+ (`items?: Array<Omit<SidebarItem, "items">>`). Il descend désormais aussi
285
+ profond que l'arborescence du produit.
286
+
287
+ **Aucun filtrage par droits.** `permission` sur une entrée, `can` sur le
288
+ composant, et une cascade : un parent dont toute la descendance est
289
+ filtrée disparaît avec elle, sauf `keepWhenEmpty`.
290
+
291
+ S'ajoutent `renderLink` pour brancher un routeur sans en dépendre,
292
+ `openKeys` pour piloter les branches ouvertes, `accordion`, `side`, et les
293
+ variantes `default` / `filled` / `floating` en trois tailles.
294
+
295
+ **Migration** : aucune prop retirée. `registryDependencies` gagne
296
+ `overlay` — `sia-ui add sidebar --overwrite` l'installe.
297
+
298
+ ## 0.1.1
299
+
300
+ - `button` — l'entrée n'annonçait que son `index.tsx`. Installé, le bouton
301
+ arrivait donc sans sa feuille de style. `components/Button/styles.css`
302
+ rejoint ses fichiers.
303
+
13
304
  ## 0.1.0
14
305
 
15
306
  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,35 @@
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://github.com/BeatJo/sia-ui/tree/main/docs).
32
-
33
- ## Licence
34
-
35
- MIT
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://github.com/BeatJo/sia-ui/tree/main/docs).
32
+
33
+ ## Licence
34
+
35
+ 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.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Installable component registry for SIA UI.",
5
5
  "keywords": [
6
6
  "sia-ui",
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": [
@@ -212,11 +219,12 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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
  {