@sia-ui/utils 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/README.md +163 -3
  3. package/package.json +5 -5
package/CHANGELOG.md ADDED
@@ -0,0 +1,152 @@
1
+ # @sia-ui/utils
2
+
3
+ ## 0.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Expose public contribution flow on npm
8
+
9
+ ## 0.3.0
10
+
11
+ ### Minor Changes
12
+
13
+ - Une ressource se déclare une fois, cinq composants refondus, et une
14
+ documentation qui décrit le produit plutôt que son développement.
15
+
16
+ ## Déclarer une ressource
17
+
18
+ `defineResource` décrit un objet métier **une seule fois**. Les colonnes du
19
+ tableau, les champs du formulaire, les lignes de la vue de détail, la
20
+ validation, les clés de recherche et les quatre règles de droits en sont
21
+ dérivés — et chaque dérivation reste remplaçable par la prop correspondante.
22
+
23
+ ```tsx
24
+ <CrudPage resource={FACTURE} data={factures} can={can}
25
+ onSubmit={…} onDelete={…} />
26
+ ```
27
+
28
+ Le rendu se déduit du type : un `currency` s'affiche formaté et aligné à
29
+ droite, un `select` avec ses `tones` devient une pastille, une `date` passe
30
+ par le format local. `permissions: "auto"` applique la convention
31
+ `<nom>.<verbe>`.
32
+
33
+ ## Les quatre opérations ouvrent leurs propres boîtes
34
+
35
+ `CrudPage` n'appelle plus seulement un gestionnaire : déclarer `fields` et
36
+ `onSubmit` suffit à obtenir un formulaire vide en création, le même prérempli
37
+ en modification, et une vue de détail. `onCreate`, `onEdit` et `onView`
38
+ restent la porte de sortie vers une page dédiée — fournis, ils passent devant
39
+ la boîte.
40
+
41
+ Les boîtes n'inventent rien : `Modal` pour la boîte, `Form` pour la saisie,
42
+ `Descriptions` pour la lecture.
43
+
44
+ ## Cinq composants refondus
45
+ - **`Sidebar`** — le rail réduit n'enferme plus ses sous-menus : ils sortent
46
+ en volet. Profondeur illimitée, droits en cascade, trois variantes.
47
+ - **`AppShell`** — se branche sur n'importe quel routeur par une seule
48
+ chaîne, l'adresse courante. Trois états de barre, tiroir ou onglets bas sur
49
+ mobile, filtrage des droits fait une seule fois.
50
+ - **`Avatar`** — teinte dérivée du nom, repli peint sous l'image, quatre états
51
+ de présence, et des piles qui résument leur surplus.
52
+ - **`DataTable`** — actions de ligne avec droits et confirmation, sélection et
53
+ barre groupée, vue en cartes, trois densités, états de chargement, d'erreur
54
+ et de vide.
55
+ - **`CrudPage`** — réécrit : il tenait en neuf lignes et n'offrait aucune des
56
+ quatre opérations qui lui donnent son nom.
57
+
58
+ ## Ruptures
59
+ - `CrudPage` : `actions` portait des nœuds d'en-tête, ils vont dans
60
+ `headerActions`. `data` est requis, et `columns` l'est aussi à moins qu'une
61
+ `resource` ne les fournisse.
62
+ - `Sidebar` et `AppShell` : les props ont changé. Voir
63
+ [La navigation latérale](https://beatjo.github.io/sia-ui-site/guides/navigation)
64
+ et [La coquille d'application](https://beatjo.github.io/sia-ui-site/guides/coquille-application).
65
+
66
+ ## Documentation
67
+
68
+ Les cent trois composants ont désormais une page de référence — ce qu'ils
69
+ font, comment les installer, et **toutes** leurs props avec type et valeur par
70
+ défaut. Ces pages sont écrites par le code : les props viennent des types, les
71
+ descriptions de leurs commentaires, la commande d'installation du registre.
72
+
73
+ Le catalogue est passé de seize sections en deux langues à neuf, ordonnées du
74
+ plus général au plus assemblé. Les comptes rendus de développement ont été
75
+ retirés de la documentation : ils décrivaient un chemin parcouru, pas un
76
+ produit.
77
+
78
+ ## 0.2.0
79
+
80
+ ### Minor Changes
81
+
82
+ - e4e4a72: Annonces, session et droits, formulaires sans dépendance, et vingt entrées de
83
+ registre de plus.
84
+
85
+ ## Composants
86
+ - **Annonces** — `toast()` s'appelle hors de React, variante `loading`, boutons
87
+ d'action, six coins réglables par annonce, balayage pour écarter, suivi de
88
+ promesse.
89
+ - **Session et droits** — `createSessionStore` avec sa machine à quatre états,
90
+ `createAccessLayer` à évaluateur injecté, `RequireSession` sans routeur.
91
+ - **Formulaires** — le contrat `FormAdapter` et `useLocalForm`, sans
92
+ dépendance. `Form` est écrit sur le contrat : il n'importe ni
93
+ react-hook-form ni zod, et se câble à l'un ou l'autre par un adaptateur.
94
+ - **Vingt entrées de registre de plus** — `progress`, `dropdown-menu`,
95
+ `accordion`, `sidebar`, `breadcrumb`, `steps`, `toggle`, `scroll-area`,
96
+ `hover-card`, `aspect-ratio`, `input-number`, `password-input`,
97
+ `phone-input`, `chart`, `require-session`, `form`…
98
+ - **Thème** — mode `system`, persistance et script anti-clignotement dans
99
+ `SiaProvider`, en remplacement de `next-themes`.
100
+
101
+ ## `@sia-ui/api`
102
+
103
+ Le client HTTP typé est un paquet à part : ni React, ni DOM, ni tokens. Il
104
+ s'installe seul, et copier un `Badge` depuis le registre ne l'entraîne pas.
105
+
106
+ ## Utilitaires
107
+
108
+ `@sia-ui/utils` passe de six à quatorze modules : `query`, `async`,
109
+ `collection`, `object`, `validation`, `file`, `clipboard`, `locale`.
110
+
111
+ ## Archives
112
+ - Plus de sourcemaps : elles pesaient environ soixante pour cent de chaque
113
+ archive — `@sia-ui/react-web` passe de 2,1 Mo à 759 Ko.
114
+ - Chaque paquet porte enfin la licence MIT qu'il annonce.
115
+
116
+ ## Vitrine en ligne
117
+
118
+ Trois surfaces publiées sur GitHub Pages à chaque poussée sur `main` : la
119
+ documentation à la racine, le catalogue Storybook sous `/storybook/`, la
120
+ démonstration sous `/preview/`. Le site de documentation est construit depuis
121
+ les fichiers de `docs/` eux-mêmes, qui restent du Markdown ordinaire.
122
+
123
+ ## Le registre n'est plus une voie sans retour
124
+
125
+ Installer était jusqu'ici définitif : plus rien ne disait ce qu'on avait, ce
126
+ qu'on avait retouché, ni ce qui avait bougé en amont — donc rien ne permettait
127
+ de corriger ni de déprécier une entrée après coup.
128
+ - **`sia-ui.lock.json`**, écrit à chaque `add` : version, date et empreinte de
129
+ chaque fichier copié.
130
+ - **Quatre commandes** : `diff`, `remove`, `doctor`, `list --outdated`.
131
+ `remove` refuse de casser un voisin ou d'effacer un fichier retouché.
132
+ - **Cycle de vie des entrées** — `experimental`, `stable`, `deprecated`,
133
+ `removed` — avec `replacedBy`. `add` refuse ce qui est retiré, `doctor`
134
+ signale ce qui est déprécié chez qui l'a déjà installé.
135
+ - **Journal du registre**, entrée par entrée, dont `pnpm check:changelog`
136
+ refuse qu'il mente.
137
+ - **Registre servi en HTTP**, versionné par l'URL : `…/r/v1/`. Corriger une
138
+ entrée n'oblige plus à republier la CLI.
139
+
140
+ ## Corrections
141
+ - La case à cocher et le bouton radio masquaient leur contrôle natif en
142
+ `opacity:0`. Le navigateur le peignait encore sous le visuel personnalisé, et
143
+ ce dessin clignotait au clic. Les deux utilisent désormais la recette
144
+ partagée `.sia-visually-hidden`, qui le découpe hors du rendu sans le retirer
145
+ du clavier.
146
+ - Une case à cocher non contrôlée ne se peignait jamais cochée : l'`<input>`
147
+ basculait, mais la classe qui dessine la case ne suivait pas.
148
+ - Le curseur de survol des graphes était ovale, et le tracé de la courbe
149
+ haché : les marqueurs sont sortis du SVG, qui est étiré sans conserver ses
150
+ proportions.
151
+ - L'entrée `drawer` du registre était impossible à installer — elle importait
152
+ deux dossiers que la CLI ne copie pas.
package/README.md CHANGED
@@ -11,8 +11,8 @@ import { formatCurrency } from "@sia-ui/utils/currency";
11
11
  import { formatTimeAgo } from "@sia-ui/utils/date";
12
12
  import { cn } from "@sia-ui/utils/classname";
13
13
 
14
- formatCurrency(1500000, { currency: "XAF" }); // "1 500 000 FCFA"
15
- formatTimeAgo(commande.createdAt); // "il y a 10 minutes"
14
+ formatCurrency(1500000, { currency: "XAF" }); // "1 500 000 FCFA"
15
+ formatTimeAgo(commande.createdAt); // "il y a 10 minutes"
16
16
  ```
17
17
 
18
18
  Cinq modules — `classname`, `currency`, `date`, `events`, `number`, `string` —
@@ -32,7 +32,167 @@ embarquer : `XOF` et `XAF` sont formatés correctement.
32
32
  ```
33
33
 
34
34
  Une chose s'écrit au niveau le plus bas où elle a du sens, et une seule fois.
35
- Voir [la documentation](https://github.com/BeatJo/sia-ui/tree/main/docs).
35
+ Voir [la documentation](https://beatjo.github.io/sia-ui-site).
36
+
37
+ ## Contribuer
38
+
39
+ 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.
40
+
41
+ - Signaler un bug : https://github.com/BeatJo/sia-ui-site/issues
42
+ - Lire la documentation : https://beatjo.github.io/sia-ui-site/
43
+ - Voir la démonstration : https://beatjo.github.io/sia-ui-site/preview/
44
+
45
+ Les contributions directes au code des packages se font sur invitation dans le dépôt source privé.
46
+ ## Journal des changements
47
+
48
+ Le contenu ci-dessous reprend intégralement `CHANGELOG.md` pour rester visible sur npm.
49
+
50
+ # @sia-ui/utils
51
+
52
+ ## 0.3.0
53
+
54
+ ### Minor Changes
55
+
56
+ - Une ressource se déclare une fois, cinq composants refondus, et une
57
+ documentation qui décrit le produit plutôt que son développement.
58
+
59
+ ## Déclarer une ressource
60
+
61
+ `defineResource` décrit un objet métier **une seule fois**. Les colonnes du
62
+ tableau, les champs du formulaire, les lignes de la vue de détail, la
63
+ validation, les clés de recherche et les quatre règles de droits en sont
64
+ dérivés — et chaque dérivation reste remplaçable par la prop correspondante.
65
+
66
+ ```tsx
67
+ <CrudPage resource={FACTURE} data={factures} can={can}
68
+ onSubmit={…} onDelete={…} />
69
+ ```
70
+
71
+ Le rendu se déduit du type : un `currency` s'affiche formaté et aligné à
72
+ droite, un `select` avec ses `tones` devient une pastille, une `date` passe
73
+ par le format local. `permissions: "auto"` applique la convention
74
+ `<nom>.<verbe>`.
75
+
76
+ ## Les quatre opérations ouvrent leurs propres boîtes
77
+
78
+ `CrudPage` n'appelle plus seulement un gestionnaire : déclarer `fields` et
79
+ `onSubmit` suffit à obtenir un formulaire vide en création, le même prérempli
80
+ en modification, et une vue de détail. `onCreate`, `onEdit` et `onView`
81
+ restent la porte de sortie vers une page dédiée — fournis, ils passent devant
82
+ la boîte.
83
+
84
+ Les boîtes n'inventent rien : `Modal` pour la boîte, `Form` pour la saisie,
85
+ `Descriptions` pour la lecture.
86
+
87
+ ## Cinq composants refondus
88
+ - **`Sidebar`** — le rail réduit n'enferme plus ses sous-menus : ils sortent
89
+ en volet. Profondeur illimitée, droits en cascade, trois variantes.
90
+ - **`AppShell`** — se branche sur n'importe quel routeur par une seule
91
+ chaîne, l'adresse courante. Trois états de barre, tiroir ou onglets bas sur
92
+ mobile, filtrage des droits fait une seule fois.
93
+ - **`Avatar`** — teinte dérivée du nom, repli peint sous l'image, quatre états
94
+ de présence, et des piles qui résument leur surplus.
95
+ - **`DataTable`** — actions de ligne avec droits et confirmation, sélection et
96
+ barre groupée, vue en cartes, trois densités, états de chargement, d'erreur
97
+ et de vide.
98
+ - **`CrudPage`** — réécrit : il tenait en neuf lignes et n'offrait aucune des
99
+ quatre opérations qui lui donnent son nom.
100
+
101
+ ## Ruptures
102
+ - `CrudPage` : `actions` portait des nœuds d'en-tête, ils vont dans
103
+ `headerActions`. `data` est requis, et `columns` l'est aussi à moins qu'une
104
+ `resource` ne les fournisse.
105
+ - `Sidebar` et `AppShell` : les props ont changé. Voir
106
+ [La navigation latérale](https://beatjo.github.io/sia-ui-site/guides/navigation)
107
+ et [La coquille d'application](https://beatjo.github.io/sia-ui-site/guides/coquille-application).
108
+
109
+ ## Documentation
110
+
111
+ Les cent trois composants ont désormais une page de référence — ce qu'ils
112
+ font, comment les installer, et **toutes** leurs props avec type et valeur par
113
+ défaut. Ces pages sont écrites par le code : les props viennent des types, les
114
+ descriptions de leurs commentaires, la commande d'installation du registre.
115
+
116
+ Le catalogue est passé de seize sections en deux langues à neuf, ordonnées du
117
+ plus général au plus assemblé. Les comptes rendus de développement ont été
118
+ retirés de la documentation : ils décrivaient un chemin parcouru, pas un
119
+ produit.
120
+
121
+ ## 0.2.0
122
+
123
+ ### Minor Changes
124
+
125
+ - e4e4a72: Annonces, session et droits, formulaires sans dépendance, et vingt entrées de
126
+ registre de plus.
127
+
128
+ ## Composants
129
+ - **Annonces** — `toast()` s'appelle hors de React, variante `loading`, boutons
130
+ d'action, six coins réglables par annonce, balayage pour écarter, suivi de
131
+ promesse.
132
+ - **Session et droits** — `createSessionStore` avec sa machine à quatre états,
133
+ `createAccessLayer` à évaluateur injecté, `RequireSession` sans routeur.
134
+ - **Formulaires** — le contrat `FormAdapter` et `useLocalForm`, sans
135
+ dépendance. `Form` est écrit sur le contrat : il n'importe ni
136
+ react-hook-form ni zod, et se câble à l'un ou l'autre par un adaptateur.
137
+ - **Vingt entrées de registre de plus** — `progress`, `dropdown-menu`,
138
+ `accordion`, `sidebar`, `breadcrumb`, `steps`, `toggle`, `scroll-area`,
139
+ `hover-card`, `aspect-ratio`, `input-number`, `password-input`,
140
+ `phone-input`, `chart`, `require-session`, `form`…
141
+ - **Thème** — mode `system`, persistance et script anti-clignotement dans
142
+ `SiaProvider`, en remplacement de `next-themes`.
143
+
144
+ ## `@sia-ui/api`
145
+
146
+ Le client HTTP typé est un paquet à part : ni React, ni DOM, ni tokens. Il
147
+ s'installe seul, et copier un `Badge` depuis le registre ne l'entraîne pas.
148
+
149
+ ## Utilitaires
150
+
151
+ `@sia-ui/utils` passe de six à quatorze modules : `query`, `async`,
152
+ `collection`, `object`, `validation`, `file`, `clipboard`, `locale`.
153
+
154
+ ## Archives
155
+ - Plus de sourcemaps : elles pesaient environ soixante pour cent de chaque
156
+ archive — `@sia-ui/react-web` passe de 2,1 Mo à 759 Ko.
157
+ - Chaque paquet porte enfin la licence MIT qu'il annonce.
158
+
159
+ ## Vitrine en ligne
160
+
161
+ Trois surfaces publiées sur GitHub Pages à chaque poussée sur `main` : la
162
+ documentation à la racine, le catalogue Storybook sous `/storybook/`, la
163
+ démonstration sous `/preview/`. Le site de documentation est construit depuis
164
+ les fichiers de `docs/` eux-mêmes, qui restent du Markdown ordinaire.
165
+
166
+ ## Le registre n'est plus une voie sans retour
167
+
168
+ Installer était jusqu'ici définitif : plus rien ne disait ce qu'on avait, ce
169
+ qu'on avait retouché, ni ce qui avait bougé en amont — donc rien ne permettait
170
+ de corriger ni de déprécier une entrée après coup.
171
+ - **`sia-ui.lock.json`**, écrit à chaque `add` : version, date et empreinte de
172
+ chaque fichier copié.
173
+ - **Quatre commandes** : `diff`, `remove`, `doctor`, `list --outdated`.
174
+ `remove` refuse de casser un voisin ou d'effacer un fichier retouché.
175
+ - **Cycle de vie des entrées** — `experimental`, `stable`, `deprecated`,
176
+ `removed` — avec `replacedBy`. `add` refuse ce qui est retiré, `doctor`
177
+ signale ce qui est déprécié chez qui l'a déjà installé.
178
+ - **Journal du registre**, entrée par entrée, dont `pnpm check:changelog`
179
+ refuse qu'il mente.
180
+ - **Registre servi en HTTP**, versionné par l'URL : `…/r/v1/`. Corriger une
181
+ entrée n'oblige plus à republier la CLI.
182
+
183
+ ## Corrections
184
+ - La case à cocher et le bouton radio masquaient leur contrôle natif en
185
+ `opacity:0`. Le navigateur le peignait encore sous le visuel personnalisé, et
186
+ ce dessin clignotait au clic. Les deux utilisent désormais la recette
187
+ partagée `.sia-visually-hidden`, qui le découpe hors du rendu sans le retirer
188
+ du clavier.
189
+ - Une case à cocher non contrôlée ne se peignait jamais cochée : l'`<input>`
190
+ basculait, mais la classe qui dessine la case ne suivait pas.
191
+ - Le curseur de survol des graphes était ovale, et le tracé de la courbe
192
+ haché : les marqueurs sont sortis du SVG, qui est étiré sans conserver ses
193
+ proportions.
194
+ - L'entrée `drawer` du registre était impossible à installer — elle importait
195
+ deux dossiers que la CLI ne copie pas.
36
196
 
37
197
  ## Licence
38
198
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sia-ui/utils",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Shared utility modules for SIA UI applications.",
5
5
  "keywords": [
6
6
  "sia-ui",
@@ -13,20 +13,20 @@
13
13
  ],
14
14
  "license": "MIT",
15
15
  "author": "Ivan Mbella",
16
- "homepage": "https://github.com/BeatJo/sia-ui#readme",
16
+ "homepage": "https://beatjo.github.io/sia-ui-site/",
17
17
  "bugs": {
18
- "url": "https://github.com/BeatJo/sia-ui/issues"
18
+ "url": "https://github.com/BeatJo/sia-ui-site/issues"
19
19
  },
20
20
  "repository": {
21
21
  "type": "git",
22
- "url": "git+https://github.com/BeatJo/sia-ui.git",
23
- "directory": "packages/utils"
22
+ "url": "git+https://github.com/BeatJo/sia-ui-site.git"
24
23
  },
25
24
  "type": "module",
26
25
  "sideEffects": false,
27
26
  "files": [
28
27
  "dist",
29
28
  "README.md",
29
+ "CHANGELOG.md",
30
30
  "LICENSE"
31
31
  ],
32
32
  "main": "./dist/index.cjs",