@sentropic/design-system-react 0.6.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.
Files changed (42) hide show
  1. package/dist/Avatar.d.ts +31 -0
  2. package/dist/Avatar.d.ts.map +1 -0
  3. package/dist/Avatar.js +11 -0
  4. package/dist/Avatar.js.map +1 -0
  5. package/dist/AvatarGroup.d.ts +21 -0
  6. package/dist/AvatarGroup.d.ts.map +1 -0
  7. package/dist/AvatarGroup.js +14 -0
  8. package/dist/AvatarGroup.js.map +1 -0
  9. package/dist/ButtonGroup.d.ts +28 -0
  10. package/dist/ButtonGroup.d.ts.map +1 -0
  11. package/dist/ButtonGroup.js +11 -0
  12. package/dist/ButtonGroup.js.map +1 -0
  13. package/dist/CheckboxGroup.d.ts +38 -0
  14. package/dist/CheckboxGroup.d.ts.map +1 -0
  15. package/dist/CheckboxGroup.js +14 -0
  16. package/dist/CheckboxGroup.js.map +1 -0
  17. package/dist/Collapsible.d.ts +18 -0
  18. package/dist/Collapsible.d.ts.map +1 -0
  19. package/dist/Collapsible.js +22 -0
  20. package/dist/Collapsible.js.map +1 -0
  21. package/dist/RadioGroup.d.ts +36 -0
  22. package/dist/RadioGroup.d.ts.map +1 -0
  23. package/dist/RadioGroup.js +15 -0
  24. package/dist/RadioGroup.js.map +1 -0
  25. package/dist/Stepper.d.ts +31 -0
  26. package/dist/Stepper.d.ts.map +1 -0
  27. package/dist/Stepper.js +28 -0
  28. package/dist/Stepper.js.map +1 -0
  29. package/dist/Typography.d.ts +21 -0
  30. package/dist/Typography.d.ts.map +1 -0
  31. package/dist/Typography.js +24 -0
  32. package/dist/Typography.js.map +1 -0
  33. package/dist/catalog.d.ts +13 -1
  34. package/dist/catalog.d.ts.map +1 -1
  35. package/dist/catalog.js +60 -12
  36. package/dist/catalog.js.map +1 -1
  37. package/dist/index.d.ts +16 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +8 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/styles.css +667 -0
  42. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ import React from "react";
2
+ export type AvatarSize = "sm" | "md" | "lg" | "xl";
3
+ export type AvatarShape = "circle" | "square";
4
+ export type AvatarTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8";
5
+ export type AvatarProps = Omit<React.HTMLAttributes<HTMLSpanElement>, "className"> & {
6
+ /** Nom complet, utilisé pour dériver les initiales et l'étiquette a11y. */
7
+ name: string;
8
+ /** URL de la photo. Si absente, on rend un cercle d'initiales. */
9
+ src?: string;
10
+ /** Texte alternatif de l'image. Par défaut = `name`. */
11
+ alt?: string;
12
+ size?: AvatarSize;
13
+ shape?: AvatarShape;
14
+ /** Catégorie de couleur pour le fond des initiales. */
15
+ tone?: AvatarTone;
16
+ className?: string;
17
+ };
18
+ export declare const Avatar: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLSpanElement>, "className"> & {
19
+ /** Nom complet, utilisé pour dériver les initiales et l'étiquette a11y. */
20
+ name: string;
21
+ /** URL de la photo. Si absente, on rend un cercle d'initiales. */
22
+ src?: string;
23
+ /** Texte alternatif de l'image. Par défaut = `name`. */
24
+ alt?: string;
25
+ size?: AvatarSize;
26
+ shape?: AvatarShape;
27
+ /** Catégorie de couleur pour le fond des initiales. */
28
+ tone?: AvatarTone;
29
+ className?: string;
30
+ } & React.RefAttributes<HTMLSpanElement>>;
31
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../src/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACnD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9C,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,GAAG;IACnF,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,uDAAuD;IACvD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,MAAM;IAbjB,2EAA2E;UACrE,MAAM;IACZ,kEAAkE;UAC5D,MAAM;IACZ,wDAAwD;UAClD,MAAM;WACL,UAAU;YACT,WAAW;IACnB,uDAAuD;WAChD,UAAU;gBACL,MAAM;yCAyBnB,CAAC"}
package/dist/Avatar.js ADDED
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ import { deriveInitials } from "./catalog.js";
5
+ export const Avatar = React.forwardRef(({ name, src, alt, size = "md", shape = "circle", tone = "category1", className, ...rest }, ref) => {
6
+ const initials = deriveInitials(name);
7
+ const classes = classNames("st-avatar", `st-avatar--${size}`, `st-avatar--${shape}`, src ? "st-avatar--image" : `st-avatar--${tone}`, className);
8
+ return (_jsx("span", { ...rest, ref: ref, className: classes, role: "img", "aria-label": alt ?? name, children: src ? (_jsx("img", { className: "st-avatar__image", src: src, alt: alt ?? name })) : (_jsx("span", { className: "st-avatar__initials", "aria-hidden": "true", children: initials })) }));
9
+ });
10
+ Avatar.displayName = "Avatar";
11
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../src/Avatar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA4B9C,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CACpC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,QAAQ,EAAE,IAAI,GAAG,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACjG,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,UAAU,CACxB,WAAW,EACX,cAAc,IAAI,EAAE,EACpB,cAAc,KAAK,EAAE,EACrB,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,EAC/C,SAAS,CACV,CAAC;IACF,OAAO,CACL,kBAAU,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,KAAK,gBAAa,GAAG,IAAI,IAAI,YAC7E,GAAG,CAAC,CAAC,CAAC,CACL,cAAK,SAAS,EAAC,kBAAkB,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,GAAI,CACjE,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,qBAAqB,iBAAa,MAAM,YACrD,QAAQ,GACJ,CACR,GACI,CACR,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import type { AvatarSize } from "./Avatar.js";
3
+ export type AvatarGroupProps = Omit<React.HTMLAttributes<HTMLDivElement>, "className"> & {
4
+ /** Nombre maximum d'avatars visibles. Au-delà, un jeton « +N » est affiché. */
5
+ max?: number;
6
+ /** Taille appliquée au jeton de débordement (doit refléter les Avatar). */
7
+ size?: AvatarSize;
8
+ /** Nombre total réel d'éléments (sert à calculer le « +N » si > max). */
9
+ total?: number;
10
+ className?: string;
11
+ };
12
+ export declare const AvatarGroup: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "className"> & {
13
+ /** Nombre maximum d'avatars visibles. Au-delà, un jeton « +N » est affiché. */
14
+ max?: number;
15
+ /** Taille appliquée au jeton de débordement (doit refléter les Avatar). */
16
+ size?: AvatarSize;
17
+ /** Nombre total réel d'éléments (sert à calculer le « +N » si > max). */
18
+ total?: number;
19
+ className?: string;
20
+ } & React.RefAttributes<HTMLDivElement>>;
21
+ //# sourceMappingURL=AvatarGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../src/AvatarGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,GAAG;IACvF,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,WAAW;IATtB,+EAA+E;UACzE,MAAM;IACZ,2EAA2E;WACpE,UAAU;IACjB,yEAAyE;YACjE,MAAM;gBACF,MAAM;wCAsBnB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ export const AvatarGroup = React.forwardRef(({ max, size = "md", total, className, style, children, ...rest }, ref) => {
5
+ const overflow = max != null && total != null && total > max ? total - max : 0;
6
+ const classes = classNames("st-avatarGroup", `st-avatarGroup--${size}`, className);
7
+ const mergedStyle = {
8
+ ...style,
9
+ ...{ "--st-avatar-group-max": max ?? "" },
10
+ };
11
+ return (_jsxs("div", { ...rest, ref: ref, className: classes, style: mergedStyle, children: [children, overflow > 0 ? (_jsxs("span", { className: "st-avatarGroup__overflow", "aria-label": `+${overflow}`, children: ["+", overflow] })) : null] }));
12
+ });
13
+ AvatarGroup.displayName = "AvatarGroup";
14
+ //# sourceMappingURL=AvatarGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarGroup.js","sourceRoot":"","sources":["../src/AvatarGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAa7C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CACzC,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxE,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,EAAE,mBAAmB,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG;QAClB,GAAG,KAAK;QACR,GAAI,EAAE,uBAAuB,EAAE,GAAG,IAAI,EAAE,EAA0B;KACnE,CAAC;IACF,OAAO,CACL,kBAAS,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,aAC5D,QAAQ,EACR,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CACd,gBAAM,SAAS,EAAC,0BAA0B,gBAAa,IAAI,QAAQ,EAAE,kBACjE,QAAQ,IACL,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC"}
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ export type ButtonGroupOrientation = "horizontal" | "vertical";
3
+ export type ButtonGroupSize = "sm" | "md" | "lg";
4
+ export type ButtonGroupProps = Omit<React.HTMLAttributes<HTMLDivElement>, "className"> & {
5
+ orientation?: ButtonGroupOrientation;
6
+ /** Look segmenté joint (boutons collés, coins arrondis seulement aux extrémités). */
7
+ attached?: boolean;
8
+ /** Espacement entre boutons (échelle spacing), ignoré quand `attached`. */
9
+ gap?: number;
10
+ /** Taille indicative (transmise via data-attr pour styliser les enfants si besoin). */
11
+ size?: ButtonGroupSize;
12
+ /** Étiquette a11y du groupe. */
13
+ label?: string;
14
+ className?: string;
15
+ };
16
+ export declare const ButtonGroup: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "className"> & {
17
+ orientation?: ButtonGroupOrientation;
18
+ /** Look segmenté joint (boutons collés, coins arrondis seulement aux extrémités). */
19
+ attached?: boolean;
20
+ /** Espacement entre boutons (échelle spacing), ignoré quand `attached`. */
21
+ gap?: number;
22
+ /** Taille indicative (transmise via data-attr pour styliser les enfants si besoin). */
23
+ size?: ButtonGroupSize;
24
+ /** Étiquette a11y du groupe. */
25
+ label?: string;
26
+ className?: string;
27
+ } & React.RefAttributes<HTMLDivElement>>;
28
+ //# sourceMappingURL=ButtonGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonGroup.d.ts","sourceRoot":"","sources":["../src/ButtonGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,UAAU,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,GAAG;IACvF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,WAAW;kBAZR,sBAAsB;IACpC,qFAAqF;eAC1E,OAAO;IAClB,2EAA2E;UACrE,MAAM;IACZ,uFAAuF;WAChF,eAAe;IACtB,gCAAgC;YACxB,MAAM;gBACF,MAAM;wCA8BnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ export const ButtonGroup = React.forwardRef(({ orientation = "horizontal", attached = false, gap, size = "md", label, className, style, children, ...rest }, ref) => {
5
+ const classes = classNames("st-buttonGroup", `st-buttonGroup--${orientation}`, attached && "st-buttonGroup--attached", className);
6
+ const gapValue = attached || gap == null ? undefined : `var(--st-spacing-${gap}, ${gap * 0.25}rem)`;
7
+ const mergedStyle = gapValue != null ? { ...style, gap: gapValue } : style;
8
+ return (_jsx("div", { ...rest, ref: ref, className: classes, role: "group", "aria-label": label, "data-size": size, style: mergedStyle, children: children }));
9
+ });
10
+ ButtonGroup.displayName = "ButtonGroup";
11
+ //# sourceMappingURL=ButtonGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonGroup.js","sourceRoot":"","sources":["../src/ButtonGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CACzC,CACE,EAAE,WAAW,GAAG,YAAY,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAC9G,GAAG,EACH,EAAE;IACF,MAAM,OAAO,GAAG,UAAU,CACxB,gBAAgB,EAChB,mBAAmB,WAAW,EAAE,EAChC,QAAQ,IAAI,0BAA0B,EACtC,SAAS,CACV,CAAC;IACF,MAAM,QAAQ,GAAG,QAAQ,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,GAAG,KAAK,GAAG,GAAG,IAAI,MAAM,CAAC;IACpG,MAAM,WAAW,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3E,OAAO,CACL,iBACM,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,EAClB,IAAI,EAAC,OAAO,gBACA,KAAK,eACN,IAAI,EACf,KAAK,EAAE,WAAW,YAEjB,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC"}
@@ -0,0 +1,38 @@
1
+ import React from "react";
2
+ export interface CheckboxGroupOption {
3
+ label: string;
4
+ value: string;
5
+ disabled?: boolean;
6
+ helperText?: string;
7
+ }
8
+ export type CheckboxGroupProps = Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "onChange"> & {
9
+ legend: string;
10
+ /** Valeurs cochées (liste contrôlée). */
11
+ value?: string[];
12
+ onChange?: (value: string[]) => void;
13
+ orientation?: "vertical" | "horizontal";
14
+ /** Nom partagé par les cases (utile pour la soumission de formulaire). */
15
+ name?: string;
16
+ options?: CheckboxGroupOption[];
17
+ /** Description optionnelle affichée sous la légende. */
18
+ helperText?: string;
19
+ /** Désactive le groupe entier. */
20
+ disabled?: boolean;
21
+ className?: string;
22
+ };
23
+ export declare const CheckboxGroup: React.ForwardRefExoticComponent<Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "onChange"> & {
24
+ legend: string;
25
+ /** Valeurs cochées (liste contrôlée). */
26
+ value?: string[];
27
+ onChange?: (value: string[]) => void;
28
+ orientation?: "vertical" | "horizontal";
29
+ /** Nom partagé par les cases (utile pour la soumission de formulaire). */
30
+ name?: string;
31
+ options?: CheckboxGroupOption[];
32
+ /** Description optionnelle affichée sous la légende. */
33
+ helperText?: string;
34
+ /** Désactive le groupe entier. */
35
+ disabled?: boolean;
36
+ className?: string;
37
+ } & React.RefAttributes<HTMLFieldSetElement>>;
38
+ //# sourceMappingURL=CheckboxGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.d.ts","sourceRoot":"","sources":["../src/CheckboxGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EACjD,WAAW,GAAG,UAAU,CACzB,GAAG;IACF,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,aAAa;YAfhB,MAAM;IACd,yCAAyC;YACjC,MAAM,EAAE;eACL,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI;kBACtB,UAAU,GAAG,YAAY;IACvC,0EAA0E;WACnE,MAAM;cACH,mBAAmB,EAAE;IAC/B,wDAAwD;iBAC3C,MAAM;IACnB,kCAAkC;eACvB,OAAO;gBACN,MAAM;6CAiDnB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ import { Checkbox } from "./Checkbox.js";
5
+ export const CheckboxGroup = React.forwardRef(({ legend, value = [], onChange, orientation = "vertical", name, options = [], helperText, disabled = false, className, children, ...rest }, ref) => {
6
+ const classes = classNames("st-checkboxGroup", `st-checkboxGroup--${orientation}`, className);
7
+ function toggle(optionValue, checked) {
8
+ const next = checked ? [...value, optionValue] : value.filter((v) => v !== optionValue);
9
+ onChange?.(next);
10
+ }
11
+ return (_jsxs("fieldset", { ...rest, ref: ref, className: classes, disabled: disabled, children: [_jsx("legend", { className: "st-checkboxGroup__legend", children: legend }), helperText ? _jsx("p", { className: "st-checkboxGroup__help", children: helperText }) : null, _jsxs("div", { className: "st-checkboxGroup__options", children: [options.map((option) => (_jsx(Checkbox, { label: option.label, helperText: option.helperText, name: name, value: option.value, checked: value.includes(option.value), disabled: option.disabled, onChange: (event) => toggle(option.value, event.currentTarget.checked) }, option.value))), children] })] }));
12
+ });
13
+ CheckboxGroup.displayName = "CheckboxGroup";
14
+ //# sourceMappingURL=CheckboxGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.js","sourceRoot":"","sources":["../src/CheckboxGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA4BzC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAC3C,CACE,EACE,MAAM,EACN,KAAK,GAAG,EAAE,EACV,QAAQ,EACR,WAAW,GAAG,UAAU,EACxB,IAAI,EACJ,OAAO,GAAG,EAAE,EACZ,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,EAAE,qBAAqB,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;IAE9F,SAAS,MAAM,CAAC,WAAmB,EAAE,OAAgB;QACnD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;QACxF,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,CACL,uBAAc,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,aAClE,iBAAQ,SAAS,EAAC,0BAA0B,YAAE,MAAM,GAAU,EAC7D,UAAU,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,wBAAwB,YAAE,UAAU,GAAK,CAAC,CAAC,CAAC,IAAI,EAC3E,eAAK,SAAS,EAAC,2BAA2B,aACvC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,QAAQ,IAEP,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,UAAU,EAAE,MAAM,CAAC,UAAU,EAC7B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,IAPjE,MAAM,CAAC,KAAK,CAQjB,CACH,CAAC,EACD,QAAQ,IACL,IACG,CACZ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ export type CollapsibleProps = Omit<React.HTMLAttributes<HTMLDivElement>, "className" | "title"> & {
3
+ /** État ouvert (contrôlable). */
4
+ open?: boolean;
5
+ title: string;
6
+ disabled?: boolean;
7
+ onToggle?: (open: boolean) => void;
8
+ className?: string;
9
+ };
10
+ export declare const Collapsible: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "className" | "title"> & {
11
+ /** État ouvert (contrôlable). */
12
+ open?: boolean;
13
+ title: string;
14
+ disabled?: boolean;
15
+ onToggle?: (open: boolean) => void;
16
+ className?: string;
17
+ } & React.RefAttributes<HTMLDivElement>>;
18
+ //# sourceMappingURL=Collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../src/Collapsible.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG;IACjG,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,WAAW;IARtB,iCAAiC;WAC1B,OAAO;WACP,MAAM;eACF,OAAO;eACP,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;gBACtB,MAAM;wCA8DnB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ export const Collapsible = React.forwardRef(({ open: openProp, title, disabled = false, onToggle, className, children, ...rest }, ref) => {
5
+ const reactId = React.useId();
6
+ const uid = `st-collapsible-${reactId}`;
7
+ const isControlled = openProp !== undefined;
8
+ const [internalOpen, setInternalOpen] = React.useState(openProp ?? false);
9
+ const open = isControlled ? openProp : internalOpen;
10
+ const classes = classNames("st-collapsible", open && "st-collapsible--open", className);
11
+ function toggle() {
12
+ if (disabled)
13
+ return;
14
+ const next = !open;
15
+ if (!isControlled)
16
+ setInternalOpen(next);
17
+ onToggle?.(next);
18
+ }
19
+ return (_jsxs("div", { ...rest, ref: ref, className: classes, children: [_jsxs("button", { type: "button", className: "st-collapsible__trigger", "aria-expanded": open ? "true" : "false", "aria-controls": `${uid}-region`, id: `${uid}-trigger`, disabled: disabled, onClick: toggle, children: [_jsx("span", { className: "st-collapsible__title", children: title }), _jsx("span", { className: "st-collapsible__icon", "aria-hidden": "true", children: _jsx("svg", { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.25, strokeLinecap: "round", strokeLinejoin: "round", focusable: "false", "aria-hidden": "true", children: _jsx("path", { d: "m6 9 6 6 6-6" }) }) })] }), open ? (_jsx("div", { className: "st-collapsible__region", role: "region", id: `${uid}-region`, "aria-labelledby": `${uid}-trigger`, children: children })) : null] }));
20
+ });
21
+ Collapsible.displayName = "Collapsible";
22
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sourceRoot":"","sources":["../src/Collapsible.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAW7C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CACzC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,kBAAkB,OAAO,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,CAAC;IAC5C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;IAEpD,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,EAAE,IAAI,IAAI,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAExF,SAAS,MAAM;QACb,IAAI,QAAQ;YAAE,OAAO;QACrB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,YAAY;YAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,CACL,kBAAS,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,aACzC,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yBAAyB,mBACpB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBACvB,GAAG,GAAG,SAAS,EAC9B,EAAE,EAAE,GAAG,GAAG,UAAU,EACpB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,aAEf,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAQ,EACtD,eAAM,SAAS,EAAC,sBAAsB,iBAAa,MAAM,YACvD,cACE,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,IAAI,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAC,OAAO,iBACL,MAAM,YAElB,eAAM,CAAC,EAAC,cAAc,GAAG,GACrB,GACD,IACA,EACR,IAAI,CAAC,CAAC,CAAC,CACN,cACE,SAAS,EAAC,wBAAwB,EAClC,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,GAAG,GAAG,SAAS,qBACF,GAAG,GAAG,UAAU,YAEhC,QAAQ,GACL,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC"}
@@ -0,0 +1,36 @@
1
+ import React from "react";
2
+ export interface RadioGroupOption {
3
+ label: string;
4
+ value: string;
5
+ disabled?: boolean;
6
+ helperText?: string;
7
+ }
8
+ export type RadioGroupProps = Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "onChange"> & {
9
+ legend: string;
10
+ /** Valeur sélectionnée (contrôlée). */
11
+ value?: string;
12
+ onChange?: (value: string) => void;
13
+ orientation?: "vertical" | "horizontal";
14
+ /** Nom partagé garantissant l'exclusivité radio. Requis. */
15
+ name: string;
16
+ options?: RadioGroupOption[];
17
+ helperText?: string;
18
+ /** Désactive le groupe entier. */
19
+ disabled?: boolean;
20
+ className?: string;
21
+ };
22
+ export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, "className" | "onChange"> & {
23
+ legend: string;
24
+ /** Valeur sélectionnée (contrôlée). */
25
+ value?: string;
26
+ onChange?: (value: string) => void;
27
+ orientation?: "vertical" | "horizontal";
28
+ /** Nom partagé garantissant l'exclusivité radio. Requis. */
29
+ name: string;
30
+ options?: RadioGroupOption[];
31
+ helperText?: string;
32
+ /** Désactive le groupe entier. */
33
+ disabled?: boolean;
34
+ className?: string;
35
+ } & React.RefAttributes<HTMLFieldSetElement>>;
36
+ //# sourceMappingURL=RadioGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../src/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EACjD,WAAW,GAAG,UAAU,CACzB,GAAG;IACF,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,UAAU;YAdb,MAAM;IACd,uCAAuC;YAC/B,MAAM;eACH,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;kBACpB,UAAU,GAAG,YAAY;IACvC,4DAA4D;UACtD,MAAM;cACF,gBAAgB,EAAE;iBACf,MAAM;IACnB,kCAAkC;eACvB,OAAO;gBACN,MAAM;6CAiDnB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ import { Radio } from "./Radio.js";
5
+ export const RadioGroup = React.forwardRef(({ legend, value, onChange, orientation = "vertical", name, options = [], helperText, disabled = false, className, children, ...rest }, ref) => {
6
+ const classes = classNames("st-radioGroup", `st-radioGroup--${orientation}`, className);
7
+ function select(optionValue) {
8
+ if (optionValue === value)
9
+ return;
10
+ onChange?.(optionValue);
11
+ }
12
+ return (_jsxs("fieldset", { ...rest, ref: ref, className: classes, disabled: disabled, children: [_jsx("legend", { className: "st-radioGroup__legend", children: legend }), helperText ? _jsx("p", { className: "st-radioGroup__help", children: helperText }) : null, _jsxs("div", { className: "st-radioGroup__options", children: [options.map((option) => (_jsx(Radio, { label: option.label, helperText: option.helperText, name: name, value: option.value, checked: value === option.value, disabled: option.disabled, onChange: () => select(option.value) }, option.value))), children] })] }));
13
+ });
14
+ RadioGroup.displayName = "RadioGroup";
15
+ //# sourceMappingURL=RadioGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../src/RadioGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA2BnC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CACxC,CACE,EACE,MAAM,EACN,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,UAAU,EACxB,IAAI,EACJ,OAAO,GAAG,EAAE,EACZ,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,kBAAkB,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;IAExF,SAAS,MAAM,CAAC,WAAmB;QACjC,IAAI,WAAW,KAAK,KAAK;YAAE,OAAO;QAClC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CACL,uBAAc,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,aAClE,iBAAQ,SAAS,EAAC,uBAAuB,YAAE,MAAM,GAAU,EAC1D,UAAU,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,qBAAqB,YAAE,UAAU,GAAK,CAAC,CAAC,CAAC,IAAI,EACxE,eAAK,SAAS,EAAC,wBAAwB,aACpC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,KAAK,IAEJ,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,UAAU,EAAE,MAAM,CAAC,UAAU,EAC7B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,OAAO,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAP/B,MAAM,CAAC,KAAK,CAQjB,CACH,CAAC,EACD,QAAQ,IACL,IACG,CACZ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC"}
@@ -0,0 +1,31 @@
1
+ import React from "react";
2
+ export interface StepperStep {
3
+ label: string;
4
+ description?: string;
5
+ }
6
+ export type StepperOrientation = "horizontal" | "vertical";
7
+ export type StepperProps = Omit<React.HTMLAttributes<HTMLOListElement>, "className"> & {
8
+ steps: StepperStep[];
9
+ /** Index de l'étape courante (0-based). */
10
+ current?: number;
11
+ orientation?: StepperOrientation;
12
+ /** Autorise la navigation au clic sur les étapes. */
13
+ clickable?: boolean;
14
+ onStepClick?: (index: number) => void;
15
+ /** Étiquette a11y de la liste d'étapes. */
16
+ label?: string;
17
+ className?: string;
18
+ };
19
+ export declare const Stepper: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLOListElement>, "className"> & {
20
+ steps: StepperStep[];
21
+ /** Index de l'étape courante (0-based). */
22
+ current?: number;
23
+ orientation?: StepperOrientation;
24
+ /** Autorise la navigation au clic sur les étapes. */
25
+ clickable?: boolean;
26
+ onStepClick?: (index: number) => void;
27
+ /** Étiquette a11y de la liste d'étapes. */
28
+ label?: string;
29
+ className?: string;
30
+ } & React.RefAttributes<HTMLOListElement>>;
31
+ //# sourceMappingURL=Stepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.d.ts","sourceRoot":"","sources":["../src/Stepper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,GAAG;IACrF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAqBF,eAAO,MAAM,OAAO;WA/BX,WAAW,EAAE;IACpB,2CAA2C;cACjC,MAAM;kBACF,kBAAkB;IAChC,qDAAqD;gBACzC,OAAO;kBACL,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IACrC,2CAA2C;YACnC,MAAM;gBACF,MAAM;0CA8EnB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ function CheckIcon() {
5
+ return (_jsx("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", focusable: "false", "aria-hidden": "true", children: _jsx("path", { d: "M20 6 9 17l-5-5" }) }));
6
+ }
7
+ export const Stepper = React.forwardRef(({ steps, current = 0, orientation = "horizontal", clickable = false, onStepClick, label = "Progression", className, ...rest }, ref) => {
8
+ const classes = classNames("st-stepper", `st-stepper--${orientation}`, className);
9
+ function stateOf(index) {
10
+ if (index < current)
11
+ return "complete";
12
+ if (index === current)
13
+ return "current";
14
+ return "upcoming";
15
+ }
16
+ function handleClick(index) {
17
+ if (!clickable)
18
+ return;
19
+ onStepClick?.(index);
20
+ }
21
+ return (_jsx("ol", { ...rest, ref: ref, className: classes, "aria-label": label, children: steps.map((step, index) => {
22
+ const state = stateOf(index);
23
+ const isLast = index === steps.length - 1;
24
+ return (_jsxs("li", { className: classNames("st-stepper__step", `st-stepper__step--${state}`), "aria-current": state === "current" ? "step" : undefined, children: [_jsxs("span", { className: "st-stepper__indicator", children: [clickable ? (_jsx("button", { type: "button", className: "st-stepper__circle st-stepper__circle--button", onClick: () => handleClick(index), "aria-label": step.label, children: state === "complete" ? _jsx(CheckIcon, {}) : _jsx("span", { className: "st-stepper__index", children: index + 1 }) })) : (_jsx("span", { className: "st-stepper__circle", children: state === "complete" ? _jsx(CheckIcon, {}) : _jsx("span", { className: "st-stepper__index", children: index + 1 }) })), !isLast ? _jsx("span", { className: "st-stepper__connector" }) : null] }), _jsxs("span", { className: "st-stepper__text", children: [_jsx("span", { className: "st-stepper__label", children: step.label }), step.description ? _jsx("span", { className: "st-stepper__description", children: step.description }) : null] })] }, index));
25
+ }) }));
26
+ });
27
+ Stepper.displayName = "Stepper";
28
+ //# sourceMappingURL=Stepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.js","sourceRoot":"","sources":["../src/Stepper.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ export type TypographyVariant = "display" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "body" | "body-sm" | "caption" | "overline";
3
+ export type TypographyWeight = "regular" | "medium" | "semibold" | "bold";
4
+ export type TypographyTone = "primary" | "secondary" | "muted" | "inverse" | "link";
5
+ export type TypographyAlign = "start" | "center" | "end" | "justify";
6
+ export type TypographyProps = Omit<React.HTMLAttributes<HTMLElement>, "className"> & {
7
+ variant?: TypographyVariant;
8
+ /** Surcharge la balise déduite de la variante. */
9
+ as?: React.ElementType;
10
+ weight?: TypographyWeight;
11
+ tone?: TypographyTone;
12
+ align?: TypographyAlign;
13
+ /** Tronque sur une ligne avec ellipsis. */
14
+ truncate?: boolean;
15
+ className?: string;
16
+ };
17
+ export declare function Typography({ variant, as, weight, tone, align, truncate, className, children, ...rest }: TypographyProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare namespace Typography {
19
+ var displayName: string;
20
+ }
21
+ //# sourceMappingURL=Typography.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Typography.d.ts","sourceRoot":"","sources":["../src/Typography.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,MAAM,GACN,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AACpF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAiBrE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,GAAG;IACnF,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,kDAAkD;IAClD,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,OAAgB,EAChB,EAAE,EACF,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,eAAe,2CAgBjB;yBA1Be,UAAU"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { classNames } from "./classNames.js";
4
+ /** Balise HTML par défaut pour chaque variante. */
5
+ const VARIANT_TAG = {
6
+ display: "h1",
7
+ h1: "h1",
8
+ h2: "h2",
9
+ h3: "h3",
10
+ h4: "h4",
11
+ h5: "h5",
12
+ h6: "h6",
13
+ body: "p",
14
+ "body-sm": "p",
15
+ caption: "span",
16
+ overline: "span",
17
+ };
18
+ export function Typography({ variant = "body", as, weight, tone, align, truncate = false, className, children, ...rest }) {
19
+ const Tag = (as ?? VARIANT_TAG[variant]);
20
+ const classes = classNames("st-typography", `st-typography--${variant}`, weight && `st-typography--weight-${weight}`, tone && `st-typography--tone-${tone}`, align && `st-typography--align-${align}`, truncate && "st-typography--truncate", className);
21
+ return (_jsx(Tag, { ...rest, className: classes, children: children }));
22
+ }
23
+ Typography.displayName = "Typography";
24
+ //# sourceMappingURL=Typography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Typography.js","sourceRoot":"","sources":["../src/Typography.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAmB7C,mDAAmD;AACnD,MAAM,WAAW,GAAsC;IACrD,OAAO,EAAE,IAAI;IACb,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;CACjB,CAAC;AAcF,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,GAAG,MAAM,EAChB,EAAE,EACF,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACS;IAChB,MAAM,GAAG,GAAG,CAAC,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,CAAsB,CAAC;IAC9D,MAAM,OAAO,GAAG,UAAU,CACxB,eAAe,EACf,kBAAkB,OAAO,EAAE,EAC3B,MAAM,IAAI,yBAAyB,MAAM,EAAE,EAC3C,IAAI,IAAI,uBAAuB,IAAI,EAAE,EACrC,KAAK,IAAI,wBAAwB,KAAK,EAAE,EACxC,QAAQ,IAAI,yBAAyB,EACrC,SAAS,CACV,CAAC;IACF,OAAO,CACL,KAAC,GAAG,OAAK,IAAI,EAAE,SAAS,EAAE,OAAO,YAC9B,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAED,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC"}
package/dist/catalog.d.ts CHANGED
@@ -341,8 +341,20 @@ export type ForceGraphProps = React.HTMLAttributes<HTMLElement> & {
341
341
  * by `edgeCurve * dist * factor`. Defaults to a light 0.15.
342
342
  */
343
343
  edgeCurve?: number;
344
+ /**
345
+ * Repulsion multiplier controlling how spread out the layout is.
346
+ * >1 = graphe plus aéré, <1 = plus compact ; multiplie la force de
347
+ * répulsion sans toucher au fit-to-content. Defaults to 1. Clamped to
348
+ * [0.1, 10] internally to avoid layout explosions/collapses.
349
+ */
350
+ repulsion?: number;
351
+ /**
352
+ * Called when the user hovers (or keyboard-focuses) a node, and again with
353
+ * null when the hover/focus ends. Intended for syncing an external panel.
354
+ */
355
+ onNodeHover?: (node: ForceGraphNode | null) => void;
344
356
  };
345
- export declare function ForceGraph({ nodes, edges, label, width, height, nodeRadius, showLabels, iterations, selectedIds, focusId, onSelect, onOpenEntity, onEdgeHover, legend, edgeCurve, className, ...rest }: ForceGraphProps): import("react/jsx-runtime").JSX.Element;
357
+ export declare function ForceGraph({ nodes, edges, label, width, height, nodeRadius, showLabels, iterations, selectedIds, focusId, onSelect, onOpenEntity, onEdgeHover, legend, edgeCurve, repulsion, onNodeHover, className, ...rest }: ForceGraphProps): import("react/jsx-runtime").JSX.Element;
346
358
  export type GraphLegendProps = React.HTMLAttributes<HTMLDivElement> & {
347
359
  entries: ForceGraphLegendEntry[];
348
360
  /** Optional heading shown above entries. */