@sia-ui/utils 0.3.0 → 0.3.2

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