@sia-ui/react 0.7.0 → 0.8.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 +52 -0
- package/README.md +55 -1
- package/dist/index.cjs +65 -2
- package/dist/index.d.cts +24 -6
- package/dist/index.d.ts +24 -6
- package/dist/index.js +67 -4
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# @sia-ui/react
|
|
2
2
|
|
|
3
|
+
## 0.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Français et anglais livrés, temps réel, calendrier réécrit, suivi d'opérations.
|
|
8
|
+
- **Deux langues** — `FRENCH` et `ENGLISH` (`@sia-ui/headless`), au format
|
|
9
|
+
`SiaLocale` : la langue de formatage (`language`), le vocabulaire commun et
|
|
10
|
+
un groupe typé par composant. Plus aucun texte en dur dans les composants,
|
|
11
|
+
`aria-label` compris ; dates, nombres et pluriels suivent `language`. Une
|
|
12
|
+
application qui a sa propre i18n remplit le même format. `formatMessage` et
|
|
13
|
+
`plural` (`{count}`, clés `_one` / `_other`). `ENGLISH_STATUS_MESSAGES`
|
|
14
|
+
(`@sia-ui/api`) à côté de `FRENCH_STATUS_MESSAGES`.
|
|
15
|
+
Seul changement de forme : `EventCalendarLabels.more`, qui était une
|
|
16
|
+
fonction, devient `more_one` / `more_other` avec `{count}`.
|
|
17
|
+
- **`SiaProvider` seul fournisseur** — il prend `locale` et `defaults`, et
|
|
18
|
+
s'imbrique pour une section. `SiaConfigProvider` est obsolète.
|
|
19
|
+
- **Temps réel** — `createRealtimeBinding`, `socketIoSource`,
|
|
20
|
+
`eventSourceSource` (`@sia-ui/api`), `useRealtimeStatus`, `LiveIndicator`.
|
|
21
|
+
- **`EventCalendar` réécrit** — vues mois, semaine, jour, agenda ; variantes ;
|
|
22
|
+
mode étroit. **`EventManager`** : créer, consulter, modifier, supprimer.
|
|
23
|
+
- **Nouveaux composants** — `AccountMenu`, `ColorModeToggle`, `LogStream`,
|
|
24
|
+
`JsonView`, `JobProgress`, `BrandIcon` ; `SunIcon`, `MoonIcon`.
|
|
25
|
+
- **Formulaires** — `validateAsync` par champ, `submitProps.disabled`
|
|
26
|
+
respecté ; `controlProps` sur une propriété de ressource.
|
|
27
|
+
- **Tons lisibles en mode sombre** — `--sia-<ton>-foreground`, calculés pour
|
|
28
|
+
le contraste ; noms de variables CSS en kebab-case.
|
|
29
|
+
- **Couches en portail** — menus, calendriers, boîtes et toasts, rendus hors
|
|
30
|
+
de `[data-sia-root]`, reprennent la police et la couleur de texte du
|
|
31
|
+
système au lieu de celles du navigateur.
|
|
32
|
+
- **`Drawer` et `Modal`** — la fermeture est signalée tout de suite ; un
|
|
33
|
+
double clic à l'ouverture ne referme plus.
|
|
34
|
+
- **Documentation** — la présentation décrit chaque brique métier (session,
|
|
35
|
+
greffons d'API, ressources, formulaires, temps réel, langues, utilitaires)
|
|
36
|
+
avec son scénario et un exemple.
|
|
37
|
+
- **Props des sous-composants** — chaque composant composé expose celles de
|
|
38
|
+
ce qu'il utilise (`…Props`) ; `pnpm check:slot-props` le vérifie.
|
|
39
|
+
|
|
40
|
+
### Patch Changes
|
|
41
|
+
|
|
42
|
+
- Updated dependencies
|
|
43
|
+
- @sia-ui/headless@0.8.0
|
|
44
|
+
- @sia-ui/tokens@0.8.0
|
|
45
|
+
|
|
46
|
+
## 0.7.1
|
|
47
|
+
|
|
48
|
+
### Patch Changes
|
|
49
|
+
|
|
50
|
+
- Aligne les packages publics de SIA UI sur la version 0.7.1 afin que les huit packages restent sur une version commune.
|
|
51
|
+
- Updated dependencies
|
|
52
|
+
- @sia-ui/tokens@0.7.1
|
|
53
|
+
- @sia-ui/utils@0.7.1
|
|
54
|
+
|
|
3
55
|
## 0.7.0
|
|
4
56
|
|
|
5
57
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -12,7 +12,9 @@ pnpm add @sia-ui/react
|
|
|
12
12
|
import { SiaProvider, Portal, usePortal, useOutsideClick } from "@sia-ui/react";
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
- `SiaProvider` — thème clair/sombre, variables CSS
|
|
15
|
+
- `SiaProvider` — le seul fournisseur : thème clair/sombre, variables CSS,
|
|
16
|
+
langue (`locale={ENGLISH}`) et valeurs par défaut des composants. Il
|
|
17
|
+
s'imbrique pour une section, et ne remplace que ce qu'on lui passe;
|
|
16
18
|
- `Portal` et `usePortal` — rendre hors du flux, sans casser le rendu serveur;
|
|
17
19
|
- `useOutsideClick` — écoute `pointerdown`, pas `click` : une sélection de
|
|
18
20
|
texte qui déborde ne ferme pas l'overlay;
|
|
@@ -51,6 +53,58 @@ Le contenu ci-dessous reprend intégralement `CHANGELOG.md` pour rester visible
|
|
|
51
53
|
<!-- sia:changelog:start -->
|
|
52
54
|
# @sia-ui/react
|
|
53
55
|
|
|
56
|
+
## 0.8.0
|
|
57
|
+
|
|
58
|
+
### Minor Changes
|
|
59
|
+
|
|
60
|
+
- Français et anglais livrés, temps réel, calendrier réécrit, suivi d'opérations.
|
|
61
|
+
- **Deux langues** — `FRENCH` et `ENGLISH` (`@sia-ui/headless`), au format
|
|
62
|
+
`SiaLocale` : la langue de formatage (`language`), le vocabulaire commun et
|
|
63
|
+
un groupe typé par composant. Plus aucun texte en dur dans les composants,
|
|
64
|
+
`aria-label` compris ; dates, nombres et pluriels suivent `language`. Une
|
|
65
|
+
application qui a sa propre i18n remplit le même format. `formatMessage` et
|
|
66
|
+
`plural` (`{count}`, clés `_one` / `_other`). `ENGLISH_STATUS_MESSAGES`
|
|
67
|
+
(`@sia-ui/api`) à côté de `FRENCH_STATUS_MESSAGES`.
|
|
68
|
+
Seul changement de forme : `EventCalendarLabels.more`, qui était une
|
|
69
|
+
fonction, devient `more_one` / `more_other` avec `{count}`.
|
|
70
|
+
- **`SiaProvider` seul fournisseur** — il prend `locale` et `defaults`, et
|
|
71
|
+
s'imbrique pour une section. `SiaConfigProvider` est obsolète.
|
|
72
|
+
- **Temps réel** — `createRealtimeBinding`, `socketIoSource`,
|
|
73
|
+
`eventSourceSource` (`@sia-ui/api`), `useRealtimeStatus`, `LiveIndicator`.
|
|
74
|
+
- **`EventCalendar` réécrit** — vues mois, semaine, jour, agenda ; variantes ;
|
|
75
|
+
mode étroit. **`EventManager`** : créer, consulter, modifier, supprimer.
|
|
76
|
+
- **Nouveaux composants** — `AccountMenu`, `ColorModeToggle`, `LogStream`,
|
|
77
|
+
`JsonView`, `JobProgress`, `BrandIcon` ; `SunIcon`, `MoonIcon`.
|
|
78
|
+
- **Formulaires** — `validateAsync` par champ, `submitProps.disabled`
|
|
79
|
+
respecté ; `controlProps` sur une propriété de ressource.
|
|
80
|
+
- **Tons lisibles en mode sombre** — `--sia-<ton>-foreground`, calculés pour
|
|
81
|
+
le contraste ; noms de variables CSS en kebab-case.
|
|
82
|
+
- **Couches en portail** — menus, calendriers, boîtes et toasts, rendus hors
|
|
83
|
+
de `[data-sia-root]`, reprennent la police et la couleur de texte du
|
|
84
|
+
système au lieu de celles du navigateur.
|
|
85
|
+
- **`Drawer` et `Modal`** — la fermeture est signalée tout de suite ; un
|
|
86
|
+
double clic à l'ouverture ne referme plus.
|
|
87
|
+
- **Documentation** — la présentation décrit chaque brique métier (session,
|
|
88
|
+
greffons d'API, ressources, formulaires, temps réel, langues, utilitaires)
|
|
89
|
+
avec son scénario et un exemple.
|
|
90
|
+
- **Props des sous-composants** — chaque composant composé expose celles de
|
|
91
|
+
ce qu'il utilise (`…Props`) ; `pnpm check:slot-props` le vérifie.
|
|
92
|
+
|
|
93
|
+
### Patch Changes
|
|
94
|
+
|
|
95
|
+
- Updated dependencies
|
|
96
|
+
- @sia-ui/headless@0.8.0
|
|
97
|
+
- @sia-ui/tokens@0.8.0
|
|
98
|
+
|
|
99
|
+
## 0.7.1
|
|
100
|
+
|
|
101
|
+
### Patch Changes
|
|
102
|
+
|
|
103
|
+
- Aligne les packages publics de SIA UI sur la version 0.7.1 afin que les huit packages restent sur une version commune.
|
|
104
|
+
- Updated dependencies
|
|
105
|
+
- @sia-ui/tokens@0.7.1
|
|
106
|
+
- @sia-ui/utils@0.7.1
|
|
107
|
+
|
|
54
108
|
## 0.7.0
|
|
55
109
|
|
|
56
110
|
### Minor Changes
|
package/dist/index.cjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var react = require('react');
|
|
4
4
|
var tokens = require('@sia-ui/tokens');
|
|
5
|
+
var headless = require('@sia-ui/headless');
|
|
5
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
7
|
var reactDom = require('react-dom');
|
|
7
8
|
var clipboard = require('@sia-ui/utils/clipboard');
|
|
@@ -119,13 +120,74 @@ var ThemeContext = react.createContext({
|
|
|
119
120
|
toggleColorMode: () => {
|
|
120
121
|
}
|
|
121
122
|
});
|
|
122
|
-
|
|
123
|
+
var DejaFourni = react.createContext(false);
|
|
124
|
+
function SiaProvider(props) {
|
|
125
|
+
const imbrique = react.useContext(DejaFourni);
|
|
126
|
+
if (imbrique) return /* @__PURE__ */ jsxRuntime.jsx(SectionSia, { ...props });
|
|
127
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DejaFourni.Provider, { value: true, children: /* @__PURE__ */ jsxRuntime.jsx(RacineSia, { ...props }) });
|
|
128
|
+
}
|
|
129
|
+
function Reglages({
|
|
130
|
+
locale,
|
|
131
|
+
defaults,
|
|
132
|
+
children
|
|
133
|
+
}) {
|
|
134
|
+
if (!locale && !defaults) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
|
|
135
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
136
|
+
headless.SiaConfigProvider,
|
|
137
|
+
{
|
|
138
|
+
...locale ? { locale } : {},
|
|
139
|
+
...defaults ? { defaults } : {},
|
|
140
|
+
children
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
function SectionSia({
|
|
145
|
+
children,
|
|
146
|
+
colorMode,
|
|
147
|
+
theme,
|
|
148
|
+
locale,
|
|
149
|
+
defaults,
|
|
150
|
+
className
|
|
151
|
+
}) {
|
|
152
|
+
const parent = react.useContext(ThemeContext);
|
|
153
|
+
const force = colorMode === "light" || colorMode === "dark" ? colorMode : void 0;
|
|
154
|
+
const resolved = force ?? parent.resolvedColorMode;
|
|
155
|
+
const habille = force !== void 0 || theme !== void 0 || className !== void 0;
|
|
156
|
+
const variables = react.useMemo(() => {
|
|
157
|
+
if (!habille) return void 0;
|
|
158
|
+
return {
|
|
159
|
+
// Le mode seul ne change que le sémantique ; les primitives sont déjà
|
|
160
|
+
// posées par la racine.
|
|
161
|
+
...force ? tokens.toCssVariables(force === "dark" ? tokens.darkTheme : tokens.lightTheme) : {},
|
|
162
|
+
...tokens.toCssVariables(theme ?? {})
|
|
163
|
+
};
|
|
164
|
+
}, [habille, force, theme]);
|
|
165
|
+
const valeur = react.useMemo(
|
|
166
|
+
() => force ? { ...parent, resolvedColorMode: force } : parent,
|
|
167
|
+
[force, parent]
|
|
168
|
+
);
|
|
169
|
+
const contenu = /* @__PURE__ */ jsxRuntime.jsx(Reglages, { locale, defaults, children });
|
|
170
|
+
if (!habille) return contenu;
|
|
171
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ThemeContext.Provider, { value: valeur, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
172
|
+
"div",
|
|
173
|
+
{
|
|
174
|
+
className,
|
|
175
|
+
"data-sia-color-mode": resolved,
|
|
176
|
+
style: { ...variables, colorScheme: resolved },
|
|
177
|
+
...locale?.language ? { lang: locale.language } : {},
|
|
178
|
+
children: contenu
|
|
179
|
+
}
|
|
180
|
+
) });
|
|
181
|
+
}
|
|
182
|
+
function RacineSia({
|
|
123
183
|
children,
|
|
124
184
|
colorMode: controlled,
|
|
125
185
|
defaultColorMode = "system",
|
|
126
186
|
onColorModeChange,
|
|
127
187
|
storageKey = COLOR_MODE_KEY,
|
|
128
188
|
theme,
|
|
189
|
+
locale,
|
|
190
|
+
defaults,
|
|
129
191
|
className
|
|
130
192
|
}) {
|
|
131
193
|
const [stored, setStored] = useLocalStorage(
|
|
@@ -174,7 +236,8 @@ function SiaProvider({
|
|
|
174
236
|
"data-sia-root": "",
|
|
175
237
|
"data-sia-color-mode": resolved,
|
|
176
238
|
style: variables,
|
|
177
|
-
|
|
239
|
+
...locale?.language ? { lang: locale.language } : {},
|
|
240
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Reglages, { locale, defaults, children })
|
|
178
241
|
}
|
|
179
242
|
) });
|
|
180
243
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -2,6 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import * as react from 'react';
|
|
3
3
|
import { PropsWithChildren, Ref, RefCallback, RefObject } from 'react';
|
|
4
4
|
import { SiaTheme } from '@sia-ui/tokens';
|
|
5
|
+
import { SiaLocaleInput, SiaComponentDefaults } from '@sia-ui/headless';
|
|
5
6
|
|
|
6
7
|
/** Ce que l'application demande. */
|
|
7
8
|
type ColorMode = "light" | "dark" | "system";
|
|
@@ -17,6 +18,14 @@ interface SiaProviderProps extends PropsWithChildren {
|
|
|
17
18
|
/** Clé de persistance, ou `false` pour ne rien enregistrer. */
|
|
18
19
|
storageKey?: string | false;
|
|
19
20
|
theme?: SiaTheme;
|
|
21
|
+
/**
|
|
22
|
+
* Les textes des composants et la langue des dates et nombres : `FRENCH`
|
|
23
|
+
* (par défaut), `ENGLISH`, ou une locale remplie par l'application —
|
|
24
|
+
* depuis i18next ou ailleurs. Voir `SiaLocale`.
|
|
25
|
+
*/
|
|
26
|
+
locale?: SiaLocaleInput;
|
|
27
|
+
/** Les props par défaut, par composant. Voir `SiaConfigProvider`. */
|
|
28
|
+
defaults?: SiaComponentDefaults;
|
|
20
29
|
className?: string;
|
|
21
30
|
}
|
|
22
31
|
interface ThemeValue {
|
|
@@ -29,14 +38,23 @@ interface ThemeValue {
|
|
|
29
38
|
toggleColorMode: () => void;
|
|
30
39
|
}
|
|
31
40
|
/**
|
|
32
|
-
* Le
|
|
41
|
+
* Le fournisseur de SIA UI : thème, mode clair / sombre, textes des
|
|
42
|
+
* composants et réglages par défaut. Le seul à poser.
|
|
43
|
+
*
|
|
44
|
+
* À la racine, il applique le thème et gère le mode. Imbriqué, il ne
|
|
45
|
+
* remplace que ce qu'on lui passe, pour la section qu'il entoure : une autre
|
|
46
|
+
* locale, un autre réglage par défaut, un thème ou un mode forcé.
|
|
33
47
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <SiaProvider locale={ENGLISH}>
|
|
50
|
+
* <App />
|
|
51
|
+
* <SiaProvider defaults={{ button: { size: "sm" } }}>
|
|
52
|
+
* <Barre />
|
|
53
|
+
* </SiaProvider>
|
|
54
|
+
* </SiaProvider>
|
|
55
|
+
* ```
|
|
38
56
|
*/
|
|
39
|
-
declare function SiaProvider(
|
|
57
|
+
declare function SiaProvider(props: SiaProviderProps): react_jsx_runtime.JSX.Element;
|
|
40
58
|
/** Le thème en vigueur, et de quoi en changer. */
|
|
41
59
|
declare function useSiaTheme(): ThemeValue;
|
|
42
60
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import * as react from 'react';
|
|
3
3
|
import { PropsWithChildren, Ref, RefCallback, RefObject } from 'react';
|
|
4
4
|
import { SiaTheme } from '@sia-ui/tokens';
|
|
5
|
+
import { SiaLocaleInput, SiaComponentDefaults } from '@sia-ui/headless';
|
|
5
6
|
|
|
6
7
|
/** Ce que l'application demande. */
|
|
7
8
|
type ColorMode = "light" | "dark" | "system";
|
|
@@ -17,6 +18,14 @@ interface SiaProviderProps extends PropsWithChildren {
|
|
|
17
18
|
/** Clé de persistance, ou `false` pour ne rien enregistrer. */
|
|
18
19
|
storageKey?: string | false;
|
|
19
20
|
theme?: SiaTheme;
|
|
21
|
+
/**
|
|
22
|
+
* Les textes des composants et la langue des dates et nombres : `FRENCH`
|
|
23
|
+
* (par défaut), `ENGLISH`, ou une locale remplie par l'application —
|
|
24
|
+
* depuis i18next ou ailleurs. Voir `SiaLocale`.
|
|
25
|
+
*/
|
|
26
|
+
locale?: SiaLocaleInput;
|
|
27
|
+
/** Les props par défaut, par composant. Voir `SiaConfigProvider`. */
|
|
28
|
+
defaults?: SiaComponentDefaults;
|
|
20
29
|
className?: string;
|
|
21
30
|
}
|
|
22
31
|
interface ThemeValue {
|
|
@@ -29,14 +38,23 @@ interface ThemeValue {
|
|
|
29
38
|
toggleColorMode: () => void;
|
|
30
39
|
}
|
|
31
40
|
/**
|
|
32
|
-
* Le
|
|
41
|
+
* Le fournisseur de SIA UI : thème, mode clair / sombre, textes des
|
|
42
|
+
* composants et réglages par défaut. Le seul à poser.
|
|
43
|
+
*
|
|
44
|
+
* À la racine, il applique le thème et gère le mode. Imbriqué, il ne
|
|
45
|
+
* remplace que ce qu'on lui passe, pour la section qu'il entoure : une autre
|
|
46
|
+
* locale, un autre réglage par défaut, un thème ou un mode forcé.
|
|
33
47
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <SiaProvider locale={ENGLISH}>
|
|
50
|
+
* <App />
|
|
51
|
+
* <SiaProvider defaults={{ button: { size: "sm" } }}>
|
|
52
|
+
* <Barre />
|
|
53
|
+
* </SiaProvider>
|
|
54
|
+
* </SiaProvider>
|
|
55
|
+
* ```
|
|
38
56
|
*/
|
|
39
|
-
declare function SiaProvider(
|
|
57
|
+
declare function SiaProvider(props: SiaProviderProps): react_jsx_runtime.JSX.Element;
|
|
40
58
|
/** Le thème en vigueur, et de quoi en changer. */
|
|
41
59
|
declare function useSiaTheme(): ThemeValue;
|
|
42
60
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createContext, useState, useRef, useEffect, useCallback, useSyncExternalStore,
|
|
1
|
+
import { createContext, useState, useRef, useEffect, useCallback, useSyncExternalStore, useContext, useMemo } from 'react';
|
|
2
2
|
import { toCssVariables, darkTheme, lightTheme, primitives } from '@sia-ui/tokens';
|
|
3
|
-
import {
|
|
3
|
+
import { SiaConfigProvider } from '@sia-ui/headless';
|
|
4
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
4
5
|
import { createPortal } from 'react-dom';
|
|
5
6
|
import { copyText } from '@sia-ui/utils/clipboard';
|
|
6
7
|
|
|
@@ -117,13 +118,74 @@ var ThemeContext = createContext({
|
|
|
117
118
|
toggleColorMode: () => {
|
|
118
119
|
}
|
|
119
120
|
});
|
|
120
|
-
|
|
121
|
+
var DejaFourni = createContext(false);
|
|
122
|
+
function SiaProvider(props) {
|
|
123
|
+
const imbrique = useContext(DejaFourni);
|
|
124
|
+
if (imbrique) return /* @__PURE__ */ jsx(SectionSia, { ...props });
|
|
125
|
+
return /* @__PURE__ */ jsx(DejaFourni.Provider, { value: true, children: /* @__PURE__ */ jsx(RacineSia, { ...props }) });
|
|
126
|
+
}
|
|
127
|
+
function Reglages({
|
|
128
|
+
locale,
|
|
129
|
+
defaults,
|
|
130
|
+
children
|
|
131
|
+
}) {
|
|
132
|
+
if (!locale && !defaults) return /* @__PURE__ */ jsx(Fragment, { children });
|
|
133
|
+
return /* @__PURE__ */ jsx(
|
|
134
|
+
SiaConfigProvider,
|
|
135
|
+
{
|
|
136
|
+
...locale ? { locale } : {},
|
|
137
|
+
...defaults ? { defaults } : {},
|
|
138
|
+
children
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
function SectionSia({
|
|
143
|
+
children,
|
|
144
|
+
colorMode,
|
|
145
|
+
theme,
|
|
146
|
+
locale,
|
|
147
|
+
defaults,
|
|
148
|
+
className
|
|
149
|
+
}) {
|
|
150
|
+
const parent = useContext(ThemeContext);
|
|
151
|
+
const force = colorMode === "light" || colorMode === "dark" ? colorMode : void 0;
|
|
152
|
+
const resolved = force ?? parent.resolvedColorMode;
|
|
153
|
+
const habille = force !== void 0 || theme !== void 0 || className !== void 0;
|
|
154
|
+
const variables = useMemo(() => {
|
|
155
|
+
if (!habille) return void 0;
|
|
156
|
+
return {
|
|
157
|
+
// Le mode seul ne change que le sémantique ; les primitives sont déjà
|
|
158
|
+
// posées par la racine.
|
|
159
|
+
...force ? toCssVariables(force === "dark" ? darkTheme : lightTheme) : {},
|
|
160
|
+
...toCssVariables(theme ?? {})
|
|
161
|
+
};
|
|
162
|
+
}, [habille, force, theme]);
|
|
163
|
+
const valeur = useMemo(
|
|
164
|
+
() => force ? { ...parent, resolvedColorMode: force } : parent,
|
|
165
|
+
[force, parent]
|
|
166
|
+
);
|
|
167
|
+
const contenu = /* @__PURE__ */ jsx(Reglages, { locale, defaults, children });
|
|
168
|
+
if (!habille) return contenu;
|
|
169
|
+
return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: valeur, children: /* @__PURE__ */ jsx(
|
|
170
|
+
"div",
|
|
171
|
+
{
|
|
172
|
+
className,
|
|
173
|
+
"data-sia-color-mode": resolved,
|
|
174
|
+
style: { ...variables, colorScheme: resolved },
|
|
175
|
+
...locale?.language ? { lang: locale.language } : {},
|
|
176
|
+
children: contenu
|
|
177
|
+
}
|
|
178
|
+
) });
|
|
179
|
+
}
|
|
180
|
+
function RacineSia({
|
|
121
181
|
children,
|
|
122
182
|
colorMode: controlled,
|
|
123
183
|
defaultColorMode = "system",
|
|
124
184
|
onColorModeChange,
|
|
125
185
|
storageKey = COLOR_MODE_KEY,
|
|
126
186
|
theme,
|
|
187
|
+
locale,
|
|
188
|
+
defaults,
|
|
127
189
|
className
|
|
128
190
|
}) {
|
|
129
191
|
const [stored, setStored] = useLocalStorage(
|
|
@@ -172,7 +234,8 @@ function SiaProvider({
|
|
|
172
234
|
"data-sia-root": "",
|
|
173
235
|
"data-sia-color-mode": resolved,
|
|
174
236
|
style: variables,
|
|
175
|
-
|
|
237
|
+
...locale?.language ? { lang: locale.language } : {},
|
|
238
|
+
children: /* @__PURE__ */ jsx(Reglages, { locale, defaults, children })
|
|
176
239
|
}
|
|
177
240
|
) });
|
|
178
241
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sia-ui/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "React runtime foundations for SIA UI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sia-ui",
|
|
@@ -44,8 +44,9 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@sia-ui/
|
|
48
|
-
"@sia-ui/
|
|
47
|
+
"@sia-ui/headless": "0.8.0",
|
|
48
|
+
"@sia-ui/tokens": "0.8.0",
|
|
49
|
+
"@sia-ui/utils": "0.8.0"
|
|
49
50
|
},
|
|
50
51
|
"peerDependencies": {
|
|
51
52
|
"react": ">=18.2.0",
|