@houssemdi2000/design-system 1.0.0 → 1.1.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 (52) hide show
  1. package/dist/__tests__/Button.test.d.ts +1 -0
  2. package/dist/components/Bloc/Bloc.d.ts +10 -0
  3. package/dist/components/Bloc/Bloc.stories.d.ts +10 -0
  4. package/dist/components/Bloc/index.d.ts +1 -0
  5. package/dist/components/Button/Button.d.ts +6 -1
  6. package/dist/components/Button/Button.stories.d.ts +16 -0
  7. package/dist/components/Card/Card.d.ts +8 -2
  8. package/dist/components/Card/Card.stories.d.ts +11 -0
  9. package/dist/components/Center/Center.d.ts +7 -0
  10. package/dist/components/Center/Center.stories.d.ts +7 -0
  11. package/dist/components/Center/index.d.ts +1 -0
  12. package/dist/components/Checkbox/Checkbox.d.ts +15 -0
  13. package/dist/components/Checkbox/Checkbox.stories.d.ts +6 -0
  14. package/dist/components/Checkbox/index.d.ts +1 -0
  15. package/dist/components/Column/Column.d.ts +8 -0
  16. package/dist/components/Column/index.d.ts +1 -0
  17. package/dist/components/Container/Container.d.ts +9 -0
  18. package/dist/components/Container/Container.stories.d.ts +7 -0
  19. package/dist/components/Container/index.d.ts +1 -0
  20. package/dist/components/Divider/Divider.d.ts +8 -0
  21. package/dist/components/Divider/Divider.stories.d.ts +7 -0
  22. package/dist/components/Divider/index.d.ts +1 -0
  23. package/dist/components/Grid/Grid.d.ts +10 -0
  24. package/dist/components/Grid/Grid.stories.d.ts +6 -0
  25. package/dist/components/Grid/index.d.ts +1 -0
  26. package/dist/components/Radio/Radio.d.ts +18 -0
  27. package/dist/components/Radio/Radio.stories.d.ts +6 -0
  28. package/dist/components/Radio/index.d.ts +1 -0
  29. package/dist/components/Row/Row.d.ts +8 -0
  30. package/dist/components/Row/index.d.ts +1 -0
  31. package/dist/components/Select/Select.d.ts +22 -0
  32. package/dist/components/Select/Select.stories.d.ts +7 -0
  33. package/dist/components/Select/index.d.ts +1 -0
  34. package/dist/components/Spacer/Spacer.d.ts +6 -0
  35. package/dist/components/Spacer/Spacer.stories.d.ts +7 -0
  36. package/dist/components/Spacer/index.d.ts +1 -0
  37. package/dist/components/TextField/TextField.d.ts +14 -0
  38. package/dist/components/TextField/TextField.stories.d.ts +9 -0
  39. package/dist/components/TextField/index.d.ts +1 -0
  40. package/dist/components/Toast/ToastContext.d.ts +17 -0
  41. package/dist/components/index.d.ts +13 -0
  42. package/dist/index.esm.js +136 -6
  43. package/dist/index.esm.js.map +1 -1
  44. package/dist/index.js +147 -4
  45. package/dist/index.js.map +1 -1
  46. package/dist/stories/Button.d.ts +15 -0
  47. package/dist/stories/Button.stories.d.ts +8 -0
  48. package/dist/stories/Header.d.ts +12 -0
  49. package/dist/stories/Header.stories.d.ts +6 -0
  50. package/dist/stories/Page.d.ts +3 -0
  51. package/dist/stories/Page.stories.d.ts +6 -0
  52. package/package.json +21 -2
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import "./Bloc.css";
3
+ export type BlocLayout = "default" | "center" | "row" | "row-between" | "column" | "sidebar" | "navbar";
4
+ export interface BlocProps {
5
+ children?: React.ReactNode;
6
+ className?: string;
7
+ style?: React.CSSProperties;
8
+ layout?: BlocLayout;
9
+ }
10
+ export declare const Bloc: React.FC<BlocProps>;
@@ -0,0 +1,10 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Bloc").BlocProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const CustomColors: () => import("react/jsx-runtime").JSX.Element;
8
+ export declare const Navbar: () => import("react/jsx-runtime").JSX.Element;
9
+ export declare const Sidebar: () => import("react/jsx-runtime").JSX.Element;
10
+ export declare const Center: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './Bloc';
@@ -3,8 +3,13 @@ import React from "react";
3
3
  export interface ButtonProps {
4
4
  label: string;
5
5
  onClick?: () => void;
6
- variant?: "primary" | "secondary" | "danger";
6
+ variant?: "primary" | "secondary" | "danger" | "dark" | "light";
7
7
  size?: "small" | "medium" | "large";
8
8
  disabled?: boolean;
9
+ icon?: React.ReactNode;
10
+ iconPosition?: "left" | "right";
11
+ backgroundColor?: string;
12
+ color?: string;
13
+ isLoading?: boolean;
9
14
  }
10
15
  export declare const Button: React.FC<ButtonProps>;
@@ -0,0 +1,16 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Button").ButtonProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Primary: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const Secondary: () => import("react/jsx-runtime").JSX.Element;
8
+ export declare const Large: () => import("react/jsx-runtime").JSX.Element;
9
+ export declare const Disabled: () => import("react/jsx-runtime").JSX.Element;
10
+ export declare const Dark: () => import("react/jsx-runtime").JSX.Element;
11
+ export declare const Light: () => import("react/jsx-runtime").JSX.Element;
12
+ export declare const Click: () => import("react/jsx-runtime").JSX.Element;
13
+ export declare const WithIcon: () => import("react/jsx-runtime").JSX.Element;
14
+ export declare const WithIconRight: () => import("react/jsx-runtime").JSX.Element;
15
+ export declare const CustomColors: () => import("react/jsx-runtime").JSX.Element;
16
+ export declare const Loading: () => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,12 @@
1
1
  import React from "react";
2
+ import "./Card.css";
2
3
  export interface CardProps {
3
- title: string;
4
- content: string;
4
+ title?: string;
5
+ children: React.ReactNode;
6
+ backgroundColor?: string;
7
+ color?: string;
8
+ variant?: "elevated" | "outlined" | "flat";
9
+ padding?: "sm" | "md" | "lg";
10
+ footer?: React.ReactNode;
5
11
  }
6
12
  export declare const Card: React.FC<CardProps>;
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Card").CardProps>;
4
+ };
5
+ export default _default;
6
+ export declare const DefaultCard: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const CardWithTitle: () => import("react/jsx-runtime").JSX.Element;
8
+ export declare const GreenCard: () => import("react/jsx-runtime").JSX.Element;
9
+ export declare const WithCustomContent: () => import("react/jsx-runtime").JSX.Element;
10
+ export declare const LargePaddingCard: () => import("react/jsx-runtime").JSX.Element;
11
+ export declare const DarkCard: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import "./Center.css";
2
+ export interface CenterProps {
3
+ children: React.ReactNode;
4
+ backgroundColor?: string;
5
+ color?: string;
6
+ }
7
+ export declare const Center: React.FC<CenterProps>;
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Center").CenterProps>;
4
+ };
5
+ export default _default;
6
+ export declare const DefaultCenter: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const DarkCenter: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Center";
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import "./Checkbox.css";
3
+ export interface CheckboxProps {
4
+ label?: string;
5
+ checked: boolean;
6
+ onChange: (value: boolean) => void;
7
+ disabled?: boolean;
8
+ error?: boolean;
9
+ boxColor?: string;
10
+ checkColor?: string;
11
+ checkedBackground?: string;
12
+ focusShadow?: string;
13
+ style?: React.CSSProperties;
14
+ }
15
+ export declare const Checkbox: React.FC<CheckboxProps>;
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Checkbox").CheckboxProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Checkbox";
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import "./Column.css";
3
+ export interface ColumnProps {
4
+ children?: React.ReactNode;
5
+ className?: "small" | "medium" | "large";
6
+ style?: React.CSSProperties;
7
+ }
8
+ export declare const Column: React.FC<ColumnProps>;
@@ -0,0 +1 @@
1
+ export * from "./Column";
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import "./Container.css";
3
+ export interface ContainerProps {
4
+ children?: React.ReactNode;
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ fluid?: boolean;
8
+ }
9
+ export declare const Container: React.FC<ContainerProps>;
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Container").ContainerProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const Custom: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Container";
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export interface DividerProps {
3
+ color?: string;
4
+ thickness?: number;
5
+ orientation?: "horizontal" | "vertical";
6
+ margin?: number;
7
+ }
8
+ export declare const Divider: React.FC<DividerProps>;
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Divider").DividerProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Horizontal: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const Vertical: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Divider";
@@ -0,0 +1,10 @@
1
+ export interface GridColumn {
2
+ children?: React.ReactNode;
3
+ span?: number;
4
+ style?: React.CSSProperties;
5
+ className?: "small" | "medium" | "large";
6
+ }
7
+ export interface GridProps {
8
+ items: GridColumn[];
9
+ }
10
+ export declare const Grid: React.FC<GridProps>;
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Grid").GridProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Grid";
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import "./Radio.css";
3
+ export interface RadioProps {
4
+ label?: string;
5
+ name: string;
6
+ value: string;
7
+ selectedValue: string;
8
+ onChange: (value: string) => void;
9
+ disabled?: boolean;
10
+ error?: boolean;
11
+ borderColor?: string;
12
+ dotColor?: string;
13
+ checkedBorderColor?: string;
14
+ checkedBackground?: string;
15
+ focusShadow?: string;
16
+ style?: React.CSSProperties;
17
+ }
18
+ export declare const Radio: React.FC<RadioProps>;
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Radio").RadioProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Radio";
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import "./Row.css";
3
+ export interface RowProps {
4
+ children?: React.ReactNode;
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ }
8
+ export declare const Row: React.FC<RowProps>;
@@ -0,0 +1 @@
1
+ export * from "./Row";
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import "./Select.css";
3
+ export interface SelectOption {
4
+ value: string | number;
5
+ label: string;
6
+ bgColor?: string;
7
+ textColor?: string;
8
+ }
9
+ export interface SelectProps {
10
+ label?: string;
11
+ value: string | number;
12
+ onChange: (value: string | number) => void;
13
+ options: SelectOption[];
14
+ disabled?: boolean;
15
+ error?: boolean;
16
+ borderColor?: string;
17
+ focusBorder?: string;
18
+ focusShadow?: string;
19
+ errorColor?: string;
20
+ style?: React.CSSProperties;
21
+ }
22
+ export declare const Select: React.FC<SelectProps>;
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Select").SelectProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Custom: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Select";
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ export interface SpacerProps {
3
+ size?: number;
4
+ direction?: "vertical" | "horizontal";
5
+ }
6
+ export declare const Spacer: React.FC<SpacerProps>;
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./Spacer").SpacerProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Vertical: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const Horizontal: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Spacer";
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import "./TextField.css";
3
+ export interface TextFieldProps {
4
+ label?: string;
5
+ value?: string;
6
+ placeholder?: string;
7
+ onChange?: (value: string) => void;
8
+ error?: string;
9
+ disabled?: boolean;
10
+ type?: string;
11
+ fullWidth?: boolean;
12
+ icon?: React.ReactNode;
13
+ }
14
+ export declare const TextField: React.FC<TextFieldProps>;
@@ -0,0 +1,9 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("react").FC<import("./TextField").TextFieldProps>;
4
+ };
5
+ export default _default;
6
+ export declare const Default: () => import("react/jsx-runtime").JSX.Element;
7
+ export declare const WithError: () => import("react/jsx-runtime").JSX.Element;
8
+ export declare const Disabled: () => import("react/jsx-runtime").JSX.Element;
9
+ export declare const WithIcon: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./TextField";
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import "./Toast.css";
3
+ export type ToastVariant = "success" | "error" | "warning" | "info";
4
+ export interface Toast {
5
+ id: string;
6
+ message: string;
7
+ variant?: ToastVariant;
8
+ duration?: number;
9
+ }
10
+ interface ToastContextType {
11
+ addToast: (msg: string, variant?: ToastVariant, duration?: number) => void;
12
+ }
13
+ export declare const useToast: () => ToastContextType;
14
+ export declare const ToastProvider: React.FC<{
15
+ children: React.ReactNode;
16
+ }>;
17
+ export {};
@@ -1 +1,14 @@
1
1
  export * from './Button';
2
+ export * from './Center';
3
+ export * from './Card';
4
+ export * from './Bloc';
5
+ export * from './Container';
6
+ export * from './Row';
7
+ export * from './Column';
8
+ export * from './Grid';
9
+ export * from './Spacer';
10
+ export * from './Divider';
11
+ export * from './Checkbox';
12
+ export * from './TextField';
13
+ export * from './Radio';
14
+ export * from './Select';
package/dist/index.esm.js CHANGED
@@ -1,10 +1,10 @@
1
- import { jsx, Fragment } from 'react/jsx-runtime';
1
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
2
 
3
3
  function styleInject(css, ref) {
4
4
  if ( ref === void 0 ) ref = {};
5
5
  var insertAt = ref.insertAt;
6
6
 
7
- if (typeof document === 'undefined') { return; }
7
+ if (!css || typeof document === 'undefined') { return; }
8
8
 
9
9
  var head = document.head || document.getElementsByTagName('head')[0];
10
10
  var style = document.createElement('style');
@@ -27,12 +27,142 @@ function styleInject(css, ref) {
27
27
  }
28
28
  }
29
29
 
30
- var css_248z = ".btn{border:none;border-radius:4px;cursor:pointer;font-size:16px;font-weight:500;padding:10px 20px;transition:all .3s ease}.btn-primary{background-color:#007bff;color:#fff}.btn-primary:hover{background-color:#0056b3}.btn-secondary{background-color:#6c757d;color:#fff}.btn-danger{background-color:#dc3545;color:#fff}.btn-small{font-size:14px;padding:5px 10px}.btn-medium{font-size:16px;padding:10px 20px}.btn-large{font-size:18px;padding:15px 30px}.btn:disabled{cursor:not-allowed;opacity:.5}";
30
+ var css_248z$a = ".btn{align-items:center;border:none;border-radius:4px;cursor:pointer;display:inline-flex;font-size:16px;font-weight:500;justify-content:center;padding:10px 20px;transition:all .3s ease}.btn-primary{background-color:#007bff;color:#fff}.btn-primary:hover{background-color:#0056b3}.btn-secondary{background-color:#6c757d;color:#fff}.btn-danger{background-color:#dc3545;color:#fff}.btn-dark{background-color:#141617;color:#fff}.btn-light{background-color:#f8f9fa;color:#000}.btn-small{font-size:14px;padding:5px 10px}.btn-medium{font-size:16px;padding:10px 20px}.btn-large{font-size:18px;padding:15px 30px}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-left-icon{margin-right:8px}.btn-left-icon,.btn-right-icon{align-items:center;display:inline-flex}.btn-right-icon{margin-left:8px}.btn-spinner{animation:spin .7s linear infinite;border:3px solid hsla(0,0%,100%,.4);border-radius:50%;border-top-color:#fff;display:inline-block;height:12px;margin-left:5px;width:12px}@keyframes spin{to{transform:rotate(1turn)}}.btn-loading{cursor:not-allowed;position:relative}.btn-loading span,.btn-loading svg{opacity:0}.btn-loading>:not(.btn-spinner){visibility:hidden}";
31
+ styleInject(css_248z$a);
32
+
33
+ const Button = ({ label, onClick, variant = "primary", size = "medium", disabled = false, icon, iconPosition = "left", backgroundColor, color, isLoading = false, }) => {
34
+ return (jsx(Fragment, { children: jsxs("button", { className: `btn btn-${variant} btn-${size}`, onClick: onClick, disabled: disabled || isLoading, style: { backgroundColor, color }, children: [icon && iconPosition === "left" && jsx("span", { className: "btn-left-icon", children: icon }), label, icon && iconPosition === "right" && jsx("span", { className: "btn-right-icon", children: icon }), isLoading && jsx("span", { className: "btn-spinner" })] }) }));
35
+ };
36
+
37
+ var css_248z$9 = ".center{align-items:center;display:flex;justify-content:center}";
38
+ styleInject(css_248z$9);
39
+
40
+ const Center = ({ children, backgroundColor = 'white', color = 'black' }) => {
41
+ return jsx("div", { className: "center", style: { backgroundColor, color }, children: children });
42
+ };
43
+
44
+ var css_248z$8 = ".card{background:#fff;border-radius:12px;display:flex;flex-direction:column;gap:12px;transition:box-shadow .2s ease,transform .2s ease}.card-elevated{box-shadow:0 2px 4px rgba(0,0,0,.08),0 8px 16px rgba(0,0,0,.06)}.card-elevated:hover{box-shadow:0 4px 8px rgba(0,0,0,.1),0 12px 24px rgba(0,0,0,.08);transform:translateY(-2px)}.card-outlined{border:1px solid #e5e7eb}.card-flat{background:transparent;border:none}.card-padding-sm{padding:8px}.card-padding-md{padding:16px}.card-padding-lg{padding:24px}.card-header{font-size:1.25rem;font-weight:600;margin-bottom:4px}.card-body{font-size:.95rem;line-height:1.5}.card-footer{border-top:1px solid #ececec;color:#555;font-size:.9rem;margin-top:8px;padding-top:8px}";
45
+ styleInject(css_248z$8);
46
+
47
+ const Card = ({ title, children, footer, backgroundColor, color, variant = "elevated", padding = "md", }) => {
48
+ return (jsxs("div", { className: `card card-${variant} card-padding-${padding}`, style: { backgroundColor, color }, children: [title && jsx("div", { className: "card-header", children: title }), jsx("div", { className: "card-body", children: children }), footer && jsx("div", { className: "card-footer", children: footer })] }));
49
+ };
50
+
51
+ var css_248z$7 = ".bloc{box-sizing:border-box;max-width:100%;padding:16px;width:100%}@media (max-width:600px){.bloc{border-radius:6px;padding:12px}}@media (max-width:900px){.bloc{padding:14px}}";
52
+ styleInject(css_248z$7);
53
+
54
+ const Bloc = ({ children, className = "", style = {}, layout = "default", }) => {
55
+ const layoutStyles = (() => {
56
+ switch (layout) {
57
+ case "center":
58
+ return { display: "flex", justifyContent: "center", alignItems: "center" };
59
+ case "row":
60
+ return { display: "flex", flexDirection: "row", alignItems: "center" };
61
+ case "row-between":
62
+ return { display: "flex", flexDirection: "row", justifyContent: "space-between", alignItems: "center" };
63
+ case "column":
64
+ return { display: "flex", flexDirection: "column", alignItems: "flex-start" };
65
+ case "sidebar":
66
+ return { display: "flex", flexDirection: "column", alignItems: "flex-start", gap: "12px" };
67
+ case "navbar":
68
+ return { display: "flex", flexDirection: "row", justifyContent: "space-between", alignItems: "center", padding: "12px 20px" };
69
+ default:
70
+ return {};
71
+ }
72
+ })();
73
+ return (jsx("div", { className: `bloc ${className}`, style: Object.assign(Object.assign({}, layoutStyles), style), children: children }));
74
+ };
75
+
76
+ var css_248z$6 = ".container{margin:0 auto;padding:0 16px;width:100%}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1200px}}.container-fluid{max-width:100%}";
77
+ styleInject(css_248z$6);
78
+
79
+ const Container = ({ children, className = "", style = {}, fluid = false }) => {
80
+ return (jsx("div", { className: `container ${fluid ? "container-fluid" : ""} ${className}`, style: style, children: children }));
81
+ };
82
+
83
+ var css_248z$5 = ".row{align-items:stretch;box-sizing:border-box;display:flex;flex-direction:row;gap:16px}@media (max-width:768px){.row{flex-direction:column}}";
84
+ styleInject(css_248z$5);
85
+
86
+ const Row = ({ children, className = "", style = {} }) => {
87
+ return jsx("div", { className: `row ${className}`, style: Object.assign({}, style), children: children });
88
+ };
89
+
90
+ var css_248z$4 = ".col,.column{box-sizing:border-box;flex:1 1 0;min-width:0;padding:8px}.col.small{max-width:20%}.col.medium{max-width:50%}.col.large{max-width:100%}.col>*,.column>*{box-sizing:border-box;max-width:100%;overflow-wrap:anywhere;word-break:break-word}.col img,.column img{display:block;height:auto;max-width:100%}@media (max-width:768px){.col,.col.large,.col.medium,.col.small,.column{flex:none;max-width:100%;width:100%}}";
91
+ styleInject(css_248z$4);
92
+
93
+ const Column = ({ children, className = "", style = {} }) => {
94
+ return (jsx("div", { className: `col ${className}`, style: Object.assign({}, style), children: children }));
95
+ };
96
+
97
+ const Grid = ({ items }) => {
98
+ return (jsx(Row, { children: items.map((item, index) => (jsx(Column, { className: item.className, style: Object.assign({}, item.style), children: item.children }, index))) }));
99
+ };
100
+
101
+ const Spacer = ({ size = 16, direction = "vertical" }) => {
102
+ const style = direction === "vertical"
103
+ ? { height: size }
104
+ : { width: size, display: "inline-block" };
105
+ return jsx("div", { style: style });
106
+ };
107
+
108
+ const Divider = ({ color = "#e0e0e0", thickness = 1, orientation = "horizontal", margin = 8, }) => {
109
+ const styles = orientation === "horizontal"
110
+ ? {
111
+ width: "100%",
112
+ height: thickness,
113
+ backgroundColor: color,
114
+ margin: `${margin}px 0`,
115
+ }
116
+ : {
117
+ width: thickness,
118
+ height: "100%",
119
+ backgroundColor: color,
120
+ margin: `0 ${margin}px`,
121
+ };
122
+ return jsx("div", { style: styles });
123
+ };
124
+
125
+ var css_248z$3 = ".checkbox-container{align-items:center;cursor:pointer;display:flex;font-family:sans-serif;gap:8px;user-select:none}.checkbox-container.disabled{cursor:not-allowed;opacity:.5}.checkbox-container input{appearance:none;-webkit-appearance:none;height:0;position:absolute;width:0}.checkbox-box{border:2px solid var(--cb-box-color,#777);border-radius:4px;display:inline-block;height:18px;position:relative;transition:.2s ease;width:18px}.checkbox-container input:checked+.checkbox-box{background-color:var(--cb-checked-bg,#007bff);border-color:var(--cb-checked-bg,#007bff)}.checkbox-container input:checked+.checkbox-box:after{border-width:medium;border-bottom:2px solid var(--cb-check-color,#fff);border-left:0 solid var(--cb-check-color,#fff);border-right:2px solid var(--cb-check-color,#fff);border-top:0 solid var(--cb-check-color,#fff);content:\"\";height:10px;left:5px;position:absolute;top:1px;transform:rotate(45deg);width:5px}.checkbox-container input:focus+.checkbox-box{box-shadow:0 0 4px var(--cb-focus-shadow,rgba(0,123,255,.4))}.checkbox-box.error{border-color:#d93025!important}.checkbox-label{font-size:14px}";
126
+ styleInject(css_248z$3);
127
+
128
+ const Checkbox = ({ label, checked, onChange, disabled = false, error = false, boxColor = "#777", checkColor = "#fff", checkedBackground = "#007bff", focusShadow = "rgba(0, 123, 255, 0.4)", style, }) => {
129
+ return (jsxs("label", { className: `checkbox-container ${disabled ? "disabled" : ""}`, style: {
130
+ ["--cb-box-color"]: boxColor,
131
+ ["--cb-check-color"]: checkColor,
132
+ ["--cb-checked-bg"]: checkedBackground,
133
+ ["--cb-focus-shadow"]: focusShadow,
134
+ }, children: [jsx("input", { type: "checkbox", checked: checked, disabled: disabled, onChange: (e) => onChange(e.target.checked) }), jsx("span", { className: `checkbox-box ${error ? "error" : ""}` }), label && jsx("span", { className: "checkbox-label", children: label })] }));
135
+ };
136
+
137
+ var css_248z$2 = ".textfield{display:flex;flex-direction:column;font-family:sans-serif;gap:6px}.fullWidth{width:100%}.textfield-label{color:#333;font-size:14px;font-weight:600}.textfield-input{border:1px solid #ccc;border-radius:6px;font-size:14px;padding:10px 12px;transition:.2s ease}.textfield-input:focus{border-color:#4c00ff;box-shadow:0 0 2px #007bff;outline:none}.textfield-input.error{background-color:#fff5f5;border-color:#d93025}.textfield-error{background-color:#f44343;color:#ece6e6;font-size:12px;padding:8px}.textfield-icon{position:absolute;right:45px;top:45px;width:2px}";
138
+ styleInject(css_248z$2);
139
+
140
+ const TextField = ({ label, value = "", placeholder, onChange, error, disabled = false, type = "text", fullWidth = true, icon, }) => {
141
+ return (jsxs("div", { className: `textfield ${fullWidth ? "fullWidth" : ""}`, children: [label && jsx("label", { className: "textfield-label", children: label }), jsx("input", { type: type, className: `textfield-input ${error ? "error" : ""}`, value: value, placeholder: placeholder, disabled: disabled, onChange: (e) => onChange && onChange(e.target.value) }), icon && jsx("div", { className: "textfield-icon", children: icon }), error && jsx("p", { className: "textfield-error", children: error })] }));
142
+ };
143
+
144
+ var css_248z$1 = ".radio-container{align-items:center;cursor:pointer;display:flex;font-family:sans-serif;gap:8px}.radio-container input{display:none}.radio-circle{align-items:center;border:2px solid var(--rd-border-color,#777);border-radius:50%;display:flex;height:18px;justify-content:center;position:relative;transition:.2s ease;width:18px}.radio-circle:after{background-color:var(--rd-dot-color,#fff);border-radius:50%;content:\"\";height:10px;opacity:0;transform:scale(.4);transition:.2s ease;width:10px}.radio-container input:checked+.radio-circle{background-color:var(--rd-checked-bg,#007bff);border-color:var(--rd-checked-border,#007bff)}.radio-container input:checked+.radio-circle:after{opacity:1;transform:scale(1)}.radio-circle.error{border-color:#d93025!important}.radio-label{font-size:14px}.disabled{cursor:not-allowed;opacity:.6}";
145
+ styleInject(css_248z$1);
146
+
147
+ const Radio = ({ label, name, value, selectedValue, onChange, disabled = false, error = false, borderColor = "#777", dotColor = "#fff", checkedBorderColor = "#007bff", checkedBackground = error ? "#d93025" : "#007bff", focusShadow = "rgba(0, 123, 255, 0.4)", style, }) => {
148
+ const checked = selectedValue === value;
149
+ return (jsxs("label", { className: `radio-container ${disabled ? "disabled" : ""}`, style: Object.assign(Object.assign({}, style), { ["--rd-border-color"]: borderColor, ["--rd-dot-color"]: dotColor, ["--rd-checked-border"]: checkedBorderColor, ["--rd-checked-bg"]: checkedBackground, ["--rd-focus-shadow"]: focusShadow }), children: [jsx("input", { type: "radio", name: name, value: value, disabled: disabled, checked: checked, onChange: () => onChange(value) }), jsx("span", { className: `radio-circle ${error ? "error" : ""}` }), label && jsx("span", { className: "radio-label", children: label })] }));
150
+ };
151
+
152
+ var css_248z = ".select-wrapper{display:flex;flex-direction:column;font-family:sans-serif;gap:4px}.select-label{font-size:14px;font-weight:500}.select-container{position:relative;width:100%}.select-container select{background:#fff;border:1px solid var(--sel-border,#ccc);border-radius:6px;cursor:pointer;font-size:15px;padding:10px 12px;transition:all .2s ease;width:100%}.select-container select:focus{border-color:var(--sel-focus-border,#007bff);box-shadow:0 0 0 2px var(--sel-focus-shadow,rgba(0,123,255,.4));outline:none}.select-container.disabled select{background:#f2f2f2;cursor:not-allowed;opacity:.6}.select-container.error select{border-color:var(--sel-error,red)}.select-container.error select:focus{border-color:var(--sel-error,red);box-shadow:0 0 0 2px rgba(230,57,70,.35)}";
31
153
  styleInject(css_248z);
32
154
 
33
- const Button = ({ label, onClick, variant = "primary", size = "medium", disabled = false, }) => {
34
- return (jsx(Fragment, { children: jsx("button", { className: `btn btn-${variant} btn-${size}`, onClick: onClick, disabled: disabled, children: label }) }));
155
+ const Select = ({ label, value, onChange, options, disabled = false, error = false, borderColor = "#ccc", focusBorder = "#007bff", focusShadow = "rgba(0, 123, 255, 0.4)", errorColor = "#e63946", style, }) => {
156
+ return (jsxs("div", { className: "select-wrapper", style: style, children: [label && jsx("label", { className: "select-label", children: label }), jsx("div", { className: `select-container ${disabled ? "disabled" : ""} ${error ? "error" : ""}`, children: jsx("select", { value: value, disabled: disabled, onChange: (e) => onChange(e.target.value), style: {
157
+ ["--sel-border"]: borderColor,
158
+ ["--sel-focus-border"]: focusBorder,
159
+ ["--sel-focus-shadow"]: focusShadow,
160
+ ["--sel-error"]: errorColor,
161
+ }, children: options.map((opt) => (jsx("option", { value: opt.value, style: {
162
+ backgroundColor: opt.bgColor,
163
+ color: opt.textColor,
164
+ }, children: opt.label }, opt.value))) }) })] }));
35
165
  };
36
166
 
37
- export { Button };
167
+ export { Bloc, Button, Card, Center, Checkbox, Column, Container, Divider, Grid, Radio, Row, Select, Spacer, TextField };
38
168
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/components/Button/Button.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import \"./Button.css\";\r\nimport React from \"react\";\r\n\r\n\r\nexport interface ButtonProps {\r\n label: string;\r\n onClick?: () => void;\r\n variant?: \"primary\" | \"secondary\" | \"danger\";\r\n size?: \"small\" | \"medium\" | \"large\";\r\n disabled?: boolean;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n label,\r\n onClick,\r\n variant = \"primary\",\r\n size = \"medium\",\r\n disabled = false,\r\n}) => {\r\n return (\r\n <>\r\n <button\r\n className={`btn btn-${variant} btn-${size}`}\r\n onClick={onClick}\r\n disabled={disabled}\r\n >\r\n {label}\r\n </button>\r\n </>\r\n );\r\n};\r\n"],"names":["_jsx"],"mappings":";;AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAY,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEzD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;;;;MCba,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,OAAO,EACP,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,QAAQ,EACf,QAAQ,GAAG,KAAK,GACjB,KAAI;IACH,QACEA,0BACEA,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,CAAA,QAAA,EAAW,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,EAC3C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,YAEjB,KAAK,EAAA,CACC,EAAA,CACR;AAEP;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.esm.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/components/Button/Button.tsx","../src/components/Center/Center.tsx","../src/components/Card/Card.tsx","../src/components/Bloc/Bloc.tsx","../src/components/Container/Container.tsx","../src/components/Row/Row.tsx","../src/components/Column/Column.tsx","../src/components/Grid/Grid.tsx","../src/components/Spacer/Spacer.tsx","../src/components/Divider/Divider.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/TextField/TextField.tsx","../src/components/Radio/Radio.tsx","../src/components/Select/Select.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import \"./Button.css\";\r\nimport React from \"react\";\r\n\r\n\r\nexport interface ButtonProps {\r\n label: string;\r\n onClick?: () => void;\r\n variant?: \"primary\" | \"secondary\" | \"danger\" | \"dark\" | \"light\";\r\n size?: \"small\" | \"medium\" | \"large\";\r\n disabled?: boolean;\r\n icon?: React.ReactNode;\r\n iconPosition?: \"left\" | \"right\";\r\n backgroundColor?: string;\r\n color?: string;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n label,\r\n onClick,\r\n variant = \"primary\",\r\n size = \"medium\",\r\n disabled = false,\r\n icon,\r\n iconPosition = \"left\",\r\n backgroundColor,\r\n color,\r\n isLoading = false,\r\n}) => {\r\n return (\r\n <>\r\n <button\r\n className={`btn btn-${variant} btn-${size}`}\r\n onClick={onClick}\r\n disabled={disabled || isLoading}\r\n style={{ backgroundColor, color }}\r\n >\r\n {icon && iconPosition === \"left\" && <span className=\"btn-left-icon\">{icon}</span>}\r\n {label}\r\n {icon && iconPosition === \"right\" && <span className=\"btn-right-icon\">{icon}</span>}\r\n {isLoading && <span className=\"btn-spinner\"></span>}\r\n </button>\r\n </>\r\n );\r\n};\r\n","import \"./Center.css\"\r\n\r\nexport interface CenterProps {\r\n children: React.ReactNode;\r\n backgroundColor?: string;\r\n color?: string;\r\n}\r\n\r\nexport const Center: React.FC<CenterProps> = ({ children, backgroundColor = 'white', color = 'black' }) => {\r\n return <div className=\"center\" style={{ backgroundColor, color}}>{children}</div>;\r\n};\r\n","import React from \"react\";\r\nimport \"./Card.css\";\r\n\r\nexport interface CardProps {\r\n title?: string;\r\n children: React.ReactNode;\r\n backgroundColor?: string;\r\n color?: string;\r\n variant?: \"elevated\" | \"outlined\" | \"flat\";\r\n padding?: \"sm\" | \"md\" | \"lg\";\r\n footer?: React.ReactNode;\r\n}\r\n\r\nexport const Card: React.FC<CardProps> = ({\r\n title,\r\n children,\r\n footer,\r\n backgroundColor,\r\n color,\r\n variant = \"elevated\",\r\n padding = \"md\",\r\n}) => {\r\n return (\r\n <div\r\n className={`card card-${variant} card-padding-${padding}`}\r\n style={{ backgroundColor, color }}\r\n >\r\n {title && <div className=\"card-header\">{title}</div>}\r\n <div className=\"card-body\">{children}</div>\r\n {footer && <div className=\"card-footer\">{footer}</div>}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Bloc.css\";\r\n\r\nexport type BlocLayout =\r\n | \"default\"\r\n | \"center\"\r\n | \"row\"\r\n | \"row-between\"\r\n | \"column\"\r\n | \"sidebar\"\r\n | \"navbar\";\r\n\r\nexport interface BlocProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n layout?: BlocLayout;\r\n}\r\n\r\nexport const Bloc: React.FC<BlocProps> = ({\r\n children,\r\n className = \"\",\r\n style = {},\r\n layout = \"default\",\r\n}) => {\r\n const layoutStyles: React.CSSProperties = (() => {\r\n switch (layout) {\r\n case \"center\":\r\n return { display: \"flex\", justifyContent: \"center\", alignItems: \"center\" };\r\n case \"row\":\r\n return { display: \"flex\", flexDirection: \"row\", alignItems: \"center\" };\r\n case \"row-between\":\r\n return { display: \"flex\", flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\" };\r\n case \"column\":\r\n return { display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\" };\r\n case \"sidebar\":\r\n return { display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", gap: \"12px\" };\r\n case \"navbar\":\r\n return { display: \"flex\", flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\", padding: \"12px 20px\" };\r\n default:\r\n return {};\r\n }\r\n })();\r\n\r\n return (\r\n <div className={`bloc ${className}`} style={{ ...layoutStyles, ...style }}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Container.css\";\r\n\r\nexport interface ContainerProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n fluid?: boolean;\r\n}\r\n\r\nexport const Container: React.FC<ContainerProps> = ({ children, className = \"\", style = {}, fluid = false }) => {\r\n return (\r\n <div className={`container ${fluid ? \"container-fluid\" : \"\"} ${className}`} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Row.css\";\r\n\r\nexport interface RowProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Row: React.FC<RowProps> = ({\r\n children,\r\n className = \"\",\r\n style = {}\r\n}) => {\r\n return <div className={`row ${className}`} style={{...style}}>{children}</div>;\r\n};\r\n","import React from \"react\";\r\nimport \"./Column.css\";\r\n\r\nexport interface ColumnProps {\r\n children?: React.ReactNode;\r\n className?: \"small\" | \"medium\" | \"large\";\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Column: React.FC<ColumnProps> = ({ children, className = \"\", style = {}}) => {\r\n return (\r\n <div className={`col ${className}`} style={{...style}}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import { Column } from \"../Column\";\r\nimport { Row } from \"../Row\";\r\n\r\nexport interface GridColumn {\r\n children?: React.ReactNode;\r\n span?: number;\r\n style?: React.CSSProperties;\r\n className?: \"small\" | \"medium\" | \"large\";\r\n}\r\n\r\nexport interface GridProps {\r\n items: GridColumn[];\r\n}\r\n\r\nexport const Grid: React.FC<GridProps> = ({ items }) => {\r\n\r\n return (\r\n <Row>\r\n {items.map((item: GridColumn, index: number) => (\r\n <Column\r\n key={index}\r\n className={item.className}\r\n style={{ ...item.style }}\r\n >\r\n {item.children}\r\n </Column>\r\n ))}\r\n </Row>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface SpacerProps {\r\n size?: number;\r\n direction?: \"vertical\" | \"horizontal\";\r\n}\r\n\r\nexport const Spacer: React.FC<SpacerProps> = ({\r\n size = 16,\r\n direction = \"vertical\"\r\n}) => {\r\n const style: React.CSSProperties =\r\n direction === \"vertical\"\r\n ? { height: size }\r\n : { width: size, display: \"inline-block\" };\r\n\r\n return <div style={style} />;\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface DividerProps {\r\n color?: string;\r\n thickness?: number;\r\n orientation?: \"horizontal\" | \"vertical\";\r\n margin?: number;\r\n}\r\n\r\nexport const Divider: React.FC<DividerProps> = ({\r\n color = \"#e0e0e0\",\r\n thickness = 1,\r\n orientation = \"horizontal\",\r\n margin = 8,\r\n}) => {\r\n const styles: React.CSSProperties =\r\n orientation === \"horizontal\"\r\n ? {\r\n width: \"100%\",\r\n height: thickness,\r\n backgroundColor: color,\r\n margin: `${margin}px 0`,\r\n }\r\n : {\r\n width: thickness,\r\n height: \"100%\",\r\n backgroundColor: color,\r\n margin: `0 ${margin}px`,\r\n };\r\n\r\n return <div style={styles} />;\r\n};\r\n","import React from \"react\";\r\nimport \"./Checkbox.css\";\r\n\r\nexport interface CheckboxProps {\r\n label?: string;\r\n checked: boolean;\r\n onChange: (value: boolean) => void;\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n // Custom colors\r\n boxColor?: string;\r\n checkColor?: string;\r\n checkedBackground?: string;\r\n focusShadow?: string;\r\n\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Checkbox: React.FC<CheckboxProps> = ({\r\n label,\r\n checked,\r\n onChange,\r\n disabled = false,\r\n error = false,\r\n\r\n boxColor = \"#777\",\r\n checkColor = \"#fff\",\r\n checkedBackground = \"#007bff\",\r\n focusShadow = \"rgba(0, 123, 255, 0.4)\",\r\n\r\n style,\r\n}) => {\r\n return (\r\n <label\r\n className={`checkbox-container ${disabled ? \"disabled\" : \"\"}`}\r\n style={{\r\n [\"--cb-box-color\" as any]: boxColor,\r\n [\"--cb-check-color\" as any]: checkColor,\r\n [\"--cb-checked-bg\" as any]: checkedBackground,\r\n [\"--cb-focus-shadow\" as any]: focusShadow,\r\n }}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n disabled={disabled}\r\n onChange={(e) => onChange(e.target.checked)}\r\n />\r\n\r\n <span className={`checkbox-box ${error ? \"error\" : \"\"}`} />\r\n\r\n {label && <span className=\"checkbox-label\">{label}</span>}\r\n </label>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./TextField.css\";\r\n\r\nexport interface TextFieldProps {\r\n label?: string;\r\n value?: string;\r\n placeholder?: string;\r\n onChange?: (value: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n type?: string;\r\n fullWidth?: boolean;\r\n icon?: React.ReactNode;\r\n}\r\n\r\nexport const TextField: React.FC<TextFieldProps> = ({\r\n label,\r\n value = \"\",\r\n placeholder,\r\n onChange,\r\n error,\r\n disabled = false,\r\n type = \"text\",\r\n fullWidth = true,\r\n icon,\r\n}) => {\r\n return (\r\n <div className={`textfield ${fullWidth ? \"fullWidth\" : \"\"}`}>\r\n {label && <label className=\"textfield-label\">{label}</label>}\r\n\r\n <input\r\n type={type}\r\n className={`textfield-input ${error ? \"error\" : \"\"}`}\r\n value={value}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n onChange={(e) => onChange && onChange(e.target.value)}\r\n />\r\n {icon && <div className=\"textfield-icon\">{icon}</div>}\r\n\r\n {error && <p className=\"textfield-error\">{error}</p>}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Radio.css\";\r\n\r\nexport interface RadioProps {\r\n label?: string;\r\n name: string; // obligatoire pour grouper les radios\r\n value: string;\r\n selectedValue: string;\r\n onChange: (value: string) => void;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n // Thème custom\r\n borderColor?: string;\r\n dotColor?: string;\r\n checkedBorderColor?: string;\r\n checkedBackground?: string;\r\n focusShadow?: string;\r\n\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Radio: React.FC<RadioProps> = ({\r\n label,\r\n name,\r\n value,\r\n selectedValue,\r\n onChange,\r\n disabled = false,\r\n error = false,\r\n\r\n borderColor = \"#777\",\r\n dotColor = \"#fff\",\r\n checkedBorderColor = \"#007bff\",\r\n checkedBackground = error ? \"#d93025\" : \"#007bff\",\r\n focusShadow = \"rgba(0, 123, 255, 0.4)\",\r\n\r\n style,\r\n}) => {\r\n const checked = selectedValue === value;\r\n\r\n return (\r\n <label\r\n className={`radio-container ${disabled ? \"disabled\" : \"\"}`}\r\n style={{\r\n ...style,\r\n [\"--rd-border-color\" as any]: borderColor,\r\n [\"--rd-dot-color\" as any]: dotColor,\r\n [\"--rd-checked-border\" as any]: checkedBorderColor,\r\n [\"--rd-checked-bg\" as any]: checkedBackground,\r\n [\"--rd-focus-shadow\" as any]: focusShadow,\r\n }}\r\n >\r\n <input\r\n type=\"radio\"\r\n name={name}\r\n value={value}\r\n disabled={disabled}\r\n checked={checked}\r\n onChange={() => onChange(value)}\r\n />\r\n\r\n <span className={`radio-circle ${error ? \"error\" : \"\"}`} />\r\n\r\n {label && <span className=\"radio-label\">{label}</span>}\r\n </label>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Select.css\";\r\n\r\nexport interface SelectOption {\r\n value: string | number;\r\n label: string;\r\n\r\n bgColor?: string;\r\n textColor?: string;\r\n}\r\n\r\nexport interface SelectProps {\r\n label?: string;\r\n value: string | number;\r\n onChange: (value: string | number) => void;\r\n options: SelectOption[];\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n // Custom colors\r\n borderColor?: string;\r\n focusBorder?: string;\r\n focusShadow?: string;\r\n errorColor?: string;\r\n\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Select: React.FC<SelectProps> = ({\r\n label,\r\n value,\r\n onChange,\r\n options,\r\n disabled = false,\r\n error = false,\r\n\r\n borderColor = \"#ccc\",\r\n focusBorder = \"#007bff\",\r\n focusShadow = \"rgba(0, 123, 255, 0.4)\",\r\n errorColor = \"#e63946\",\r\n\r\n style,\r\n}) => {\r\n return (\r\n <div className=\"select-wrapper\" style={style}>\r\n {label && <label className=\"select-label\">{label}</label>}\r\n\r\n <div\r\n className={`select-container ${disabled ? \"disabled\" : \"\"} ${\r\n error ? \"error\" : \"\"\r\n }`}\r\n >\r\n <select\r\n value={value}\r\n disabled={disabled}\r\n onChange={(e) => onChange(e.target.value)}\r\n style={{\r\n [\"--sel-border\" as any]: borderColor,\r\n [\"--sel-focus-border\" as any]: focusBorder,\r\n [\"--sel-focus-shadow\" as any]: focusShadow,\r\n [\"--sel-error\" as any]: errorColor,\r\n }}\r\n >\r\n {options.map((opt) => (\r\n <option\r\n key={opt.value}\r\n value={opt.value}\r\n style={{\r\n backgroundColor: opt.bgColor,\r\n color: opt.textColor,\r\n }}\r\n >\r\n {opt.label}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"names":["_jsx","_Fragment","_jsxs"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ function styleInject(css, ref) {
6
6
  if ( ref === void 0 ) ref = {};
7
7
  var insertAt = ref.insertAt;
8
8
 
9
- if (typeof document === 'undefined') { return; }
9
+ if (!css || typeof document === 'undefined') { return; }
10
10
 
11
11
  var head = document.head || document.getElementsByTagName('head')[0];
12
12
  var style = document.createElement('style');
@@ -29,12 +29,155 @@ function styleInject(css, ref) {
29
29
  }
30
30
  }
31
31
 
32
- var css_248z = ".btn{border:none;border-radius:4px;cursor:pointer;font-size:16px;font-weight:500;padding:10px 20px;transition:all .3s ease}.btn-primary{background-color:#007bff;color:#fff}.btn-primary:hover{background-color:#0056b3}.btn-secondary{background-color:#6c757d;color:#fff}.btn-danger{background-color:#dc3545;color:#fff}.btn-small{font-size:14px;padding:5px 10px}.btn-medium{font-size:16px;padding:10px 20px}.btn-large{font-size:18px;padding:15px 30px}.btn:disabled{cursor:not-allowed;opacity:.5}";
32
+ var css_248z$a = ".btn{align-items:center;border:none;border-radius:4px;cursor:pointer;display:inline-flex;font-size:16px;font-weight:500;justify-content:center;padding:10px 20px;transition:all .3s ease}.btn-primary{background-color:#007bff;color:#fff}.btn-primary:hover{background-color:#0056b3}.btn-secondary{background-color:#6c757d;color:#fff}.btn-danger{background-color:#dc3545;color:#fff}.btn-dark{background-color:#141617;color:#fff}.btn-light{background-color:#f8f9fa;color:#000}.btn-small{font-size:14px;padding:5px 10px}.btn-medium{font-size:16px;padding:10px 20px}.btn-large{font-size:18px;padding:15px 30px}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-left-icon{margin-right:8px}.btn-left-icon,.btn-right-icon{align-items:center;display:inline-flex}.btn-right-icon{margin-left:8px}.btn-spinner{animation:spin .7s linear infinite;border:3px solid hsla(0,0%,100%,.4);border-radius:50%;border-top-color:#fff;display:inline-block;height:12px;margin-left:5px;width:12px}@keyframes spin{to{transform:rotate(1turn)}}.btn-loading{cursor:not-allowed;position:relative}.btn-loading span,.btn-loading svg{opacity:0}.btn-loading>:not(.btn-spinner){visibility:hidden}";
33
+ styleInject(css_248z$a);
34
+
35
+ const Button = ({ label, onClick, variant = "primary", size = "medium", disabled = false, icon, iconPosition = "left", backgroundColor, color, isLoading = false, }) => {
36
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("button", { className: `btn btn-${variant} btn-${size}`, onClick: onClick, disabled: disabled || isLoading, style: { backgroundColor, color }, children: [icon && iconPosition === "left" && jsxRuntime.jsx("span", { className: "btn-left-icon", children: icon }), label, icon && iconPosition === "right" && jsxRuntime.jsx("span", { className: "btn-right-icon", children: icon }), isLoading && jsxRuntime.jsx("span", { className: "btn-spinner" })] }) }));
37
+ };
38
+
39
+ var css_248z$9 = ".center{align-items:center;display:flex;justify-content:center}";
40
+ styleInject(css_248z$9);
41
+
42
+ const Center = ({ children, backgroundColor = 'white', color = 'black' }) => {
43
+ return jsxRuntime.jsx("div", { className: "center", style: { backgroundColor, color }, children: children });
44
+ };
45
+
46
+ var css_248z$8 = ".card{background:#fff;border-radius:12px;display:flex;flex-direction:column;gap:12px;transition:box-shadow .2s ease,transform .2s ease}.card-elevated{box-shadow:0 2px 4px rgba(0,0,0,.08),0 8px 16px rgba(0,0,0,.06)}.card-elevated:hover{box-shadow:0 4px 8px rgba(0,0,0,.1),0 12px 24px rgba(0,0,0,.08);transform:translateY(-2px)}.card-outlined{border:1px solid #e5e7eb}.card-flat{background:transparent;border:none}.card-padding-sm{padding:8px}.card-padding-md{padding:16px}.card-padding-lg{padding:24px}.card-header{font-size:1.25rem;font-weight:600;margin-bottom:4px}.card-body{font-size:.95rem;line-height:1.5}.card-footer{border-top:1px solid #ececec;color:#555;font-size:.9rem;margin-top:8px;padding-top:8px}";
47
+ styleInject(css_248z$8);
48
+
49
+ const Card = ({ title, children, footer, backgroundColor, color, variant = "elevated", padding = "md", }) => {
50
+ return (jsxRuntime.jsxs("div", { className: `card card-${variant} card-padding-${padding}`, style: { backgroundColor, color }, children: [title && jsxRuntime.jsx("div", { className: "card-header", children: title }), jsxRuntime.jsx("div", { className: "card-body", children: children }), footer && jsxRuntime.jsx("div", { className: "card-footer", children: footer })] }));
51
+ };
52
+
53
+ var css_248z$7 = ".bloc{box-sizing:border-box;max-width:100%;padding:16px;width:100%}@media (max-width:600px){.bloc{border-radius:6px;padding:12px}}@media (max-width:900px){.bloc{padding:14px}}";
54
+ styleInject(css_248z$7);
55
+
56
+ const Bloc = ({ children, className = "", style = {}, layout = "default", }) => {
57
+ const layoutStyles = (() => {
58
+ switch (layout) {
59
+ case "center":
60
+ return { display: "flex", justifyContent: "center", alignItems: "center" };
61
+ case "row":
62
+ return { display: "flex", flexDirection: "row", alignItems: "center" };
63
+ case "row-between":
64
+ return { display: "flex", flexDirection: "row", justifyContent: "space-between", alignItems: "center" };
65
+ case "column":
66
+ return { display: "flex", flexDirection: "column", alignItems: "flex-start" };
67
+ case "sidebar":
68
+ return { display: "flex", flexDirection: "column", alignItems: "flex-start", gap: "12px" };
69
+ case "navbar":
70
+ return { display: "flex", flexDirection: "row", justifyContent: "space-between", alignItems: "center", padding: "12px 20px" };
71
+ default:
72
+ return {};
73
+ }
74
+ })();
75
+ return (jsxRuntime.jsx("div", { className: `bloc ${className}`, style: Object.assign(Object.assign({}, layoutStyles), style), children: children }));
76
+ };
77
+
78
+ var css_248z$6 = ".container{margin:0 auto;padding:0 16px;width:100%}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1200px}}.container-fluid{max-width:100%}";
79
+ styleInject(css_248z$6);
80
+
81
+ const Container = ({ children, className = "", style = {}, fluid = false }) => {
82
+ return (jsxRuntime.jsx("div", { className: `container ${fluid ? "container-fluid" : ""} ${className}`, style: style, children: children }));
83
+ };
84
+
85
+ var css_248z$5 = ".row{align-items:stretch;box-sizing:border-box;display:flex;flex-direction:row;gap:16px}@media (max-width:768px){.row{flex-direction:column}}";
86
+ styleInject(css_248z$5);
87
+
88
+ const Row = ({ children, className = "", style = {} }) => {
89
+ return jsxRuntime.jsx("div", { className: `row ${className}`, style: Object.assign({}, style), children: children });
90
+ };
91
+
92
+ var css_248z$4 = ".col,.column{box-sizing:border-box;flex:1 1 0;min-width:0;padding:8px}.col.small{max-width:20%}.col.medium{max-width:50%}.col.large{max-width:100%}.col>*,.column>*{box-sizing:border-box;max-width:100%;overflow-wrap:anywhere;word-break:break-word}.col img,.column img{display:block;height:auto;max-width:100%}@media (max-width:768px){.col,.col.large,.col.medium,.col.small,.column{flex:none;max-width:100%;width:100%}}";
93
+ styleInject(css_248z$4);
94
+
95
+ const Column = ({ children, className = "", style = {} }) => {
96
+ return (jsxRuntime.jsx("div", { className: `col ${className}`, style: Object.assign({}, style), children: children }));
97
+ };
98
+
99
+ const Grid = ({ items }) => {
100
+ return (jsxRuntime.jsx(Row, { children: items.map((item, index) => (jsxRuntime.jsx(Column, { className: item.className, style: Object.assign({}, item.style), children: item.children }, index))) }));
101
+ };
102
+
103
+ const Spacer = ({ size = 16, direction = "vertical" }) => {
104
+ const style = direction === "vertical"
105
+ ? { height: size }
106
+ : { width: size, display: "inline-block" };
107
+ return jsxRuntime.jsx("div", { style: style });
108
+ };
109
+
110
+ const Divider = ({ color = "#e0e0e0", thickness = 1, orientation = "horizontal", margin = 8, }) => {
111
+ const styles = orientation === "horizontal"
112
+ ? {
113
+ width: "100%",
114
+ height: thickness,
115
+ backgroundColor: color,
116
+ margin: `${margin}px 0`,
117
+ }
118
+ : {
119
+ width: thickness,
120
+ height: "100%",
121
+ backgroundColor: color,
122
+ margin: `0 ${margin}px`,
123
+ };
124
+ return jsxRuntime.jsx("div", { style: styles });
125
+ };
126
+
127
+ var css_248z$3 = ".checkbox-container{align-items:center;cursor:pointer;display:flex;font-family:sans-serif;gap:8px;user-select:none}.checkbox-container.disabled{cursor:not-allowed;opacity:.5}.checkbox-container input{appearance:none;-webkit-appearance:none;height:0;position:absolute;width:0}.checkbox-box{border:2px solid var(--cb-box-color,#777);border-radius:4px;display:inline-block;height:18px;position:relative;transition:.2s ease;width:18px}.checkbox-container input:checked+.checkbox-box{background-color:var(--cb-checked-bg,#007bff);border-color:var(--cb-checked-bg,#007bff)}.checkbox-container input:checked+.checkbox-box:after{border-width:medium;border-bottom:2px solid var(--cb-check-color,#fff);border-left:0 solid var(--cb-check-color,#fff);border-right:2px solid var(--cb-check-color,#fff);border-top:0 solid var(--cb-check-color,#fff);content:\"\";height:10px;left:5px;position:absolute;top:1px;transform:rotate(45deg);width:5px}.checkbox-container input:focus+.checkbox-box{box-shadow:0 0 4px var(--cb-focus-shadow,rgba(0,123,255,.4))}.checkbox-box.error{border-color:#d93025!important}.checkbox-label{font-size:14px}";
128
+ styleInject(css_248z$3);
129
+
130
+ const Checkbox = ({ label, checked, onChange, disabled = false, error = false, boxColor = "#777", checkColor = "#fff", checkedBackground = "#007bff", focusShadow = "rgba(0, 123, 255, 0.4)", style, }) => {
131
+ return (jsxRuntime.jsxs("label", { className: `checkbox-container ${disabled ? "disabled" : ""}`, style: {
132
+ ["--cb-box-color"]: boxColor,
133
+ ["--cb-check-color"]: checkColor,
134
+ ["--cb-checked-bg"]: checkedBackground,
135
+ ["--cb-focus-shadow"]: focusShadow,
136
+ }, children: [jsxRuntime.jsx("input", { type: "checkbox", checked: checked, disabled: disabled, onChange: (e) => onChange(e.target.checked) }), jsxRuntime.jsx("span", { className: `checkbox-box ${error ? "error" : ""}` }), label && jsxRuntime.jsx("span", { className: "checkbox-label", children: label })] }));
137
+ };
138
+
139
+ var css_248z$2 = ".textfield{display:flex;flex-direction:column;font-family:sans-serif;gap:6px}.fullWidth{width:100%}.textfield-label{color:#333;font-size:14px;font-weight:600}.textfield-input{border:1px solid #ccc;border-radius:6px;font-size:14px;padding:10px 12px;transition:.2s ease}.textfield-input:focus{border-color:#4c00ff;box-shadow:0 0 2px #007bff;outline:none}.textfield-input.error{background-color:#fff5f5;border-color:#d93025}.textfield-error{background-color:#f44343;color:#ece6e6;font-size:12px;padding:8px}.textfield-icon{position:absolute;right:45px;top:45px;width:2px}";
140
+ styleInject(css_248z$2);
141
+
142
+ const TextField = ({ label, value = "", placeholder, onChange, error, disabled = false, type = "text", fullWidth = true, icon, }) => {
143
+ return (jsxRuntime.jsxs("div", { className: `textfield ${fullWidth ? "fullWidth" : ""}`, children: [label && jsxRuntime.jsx("label", { className: "textfield-label", children: label }), jsxRuntime.jsx("input", { type: type, className: `textfield-input ${error ? "error" : ""}`, value: value, placeholder: placeholder, disabled: disabled, onChange: (e) => onChange && onChange(e.target.value) }), icon && jsxRuntime.jsx("div", { className: "textfield-icon", children: icon }), error && jsxRuntime.jsx("p", { className: "textfield-error", children: error })] }));
144
+ };
145
+
146
+ var css_248z$1 = ".radio-container{align-items:center;cursor:pointer;display:flex;font-family:sans-serif;gap:8px}.radio-container input{display:none}.radio-circle{align-items:center;border:2px solid var(--rd-border-color,#777);border-radius:50%;display:flex;height:18px;justify-content:center;position:relative;transition:.2s ease;width:18px}.radio-circle:after{background-color:var(--rd-dot-color,#fff);border-radius:50%;content:\"\";height:10px;opacity:0;transform:scale(.4);transition:.2s ease;width:10px}.radio-container input:checked+.radio-circle{background-color:var(--rd-checked-bg,#007bff);border-color:var(--rd-checked-border,#007bff)}.radio-container input:checked+.radio-circle:after{opacity:1;transform:scale(1)}.radio-circle.error{border-color:#d93025!important}.radio-label{font-size:14px}.disabled{cursor:not-allowed;opacity:.6}";
147
+ styleInject(css_248z$1);
148
+
149
+ const Radio = ({ label, name, value, selectedValue, onChange, disabled = false, error = false, borderColor = "#777", dotColor = "#fff", checkedBorderColor = "#007bff", checkedBackground = error ? "#d93025" : "#007bff", focusShadow = "rgba(0, 123, 255, 0.4)", style, }) => {
150
+ const checked = selectedValue === value;
151
+ return (jsxRuntime.jsxs("label", { className: `radio-container ${disabled ? "disabled" : ""}`, style: Object.assign(Object.assign({}, style), { ["--rd-border-color"]: borderColor, ["--rd-dot-color"]: dotColor, ["--rd-checked-border"]: checkedBorderColor, ["--rd-checked-bg"]: checkedBackground, ["--rd-focus-shadow"]: focusShadow }), children: [jsxRuntime.jsx("input", { type: "radio", name: name, value: value, disabled: disabled, checked: checked, onChange: () => onChange(value) }), jsxRuntime.jsx("span", { className: `radio-circle ${error ? "error" : ""}` }), label && jsxRuntime.jsx("span", { className: "radio-label", children: label })] }));
152
+ };
153
+
154
+ var css_248z = ".select-wrapper{display:flex;flex-direction:column;font-family:sans-serif;gap:4px}.select-label{font-size:14px;font-weight:500}.select-container{position:relative;width:100%}.select-container select{background:#fff;border:1px solid var(--sel-border,#ccc);border-radius:6px;cursor:pointer;font-size:15px;padding:10px 12px;transition:all .2s ease;width:100%}.select-container select:focus{border-color:var(--sel-focus-border,#007bff);box-shadow:0 0 0 2px var(--sel-focus-shadow,rgba(0,123,255,.4));outline:none}.select-container.disabled select{background:#f2f2f2;cursor:not-allowed;opacity:.6}.select-container.error select{border-color:var(--sel-error,red)}.select-container.error select:focus{border-color:var(--sel-error,red);box-shadow:0 0 0 2px rgba(230,57,70,.35)}";
33
155
  styleInject(css_248z);
34
156
 
35
- const Button = ({ label, onClick, variant = "primary", size = "medium", disabled = false, }) => {
36
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("button", { className: `btn btn-${variant} btn-${size}`, onClick: onClick, disabled: disabled, children: label }) }));
157
+ const Select = ({ label, value, onChange, options, disabled = false, error = false, borderColor = "#ccc", focusBorder = "#007bff", focusShadow = "rgba(0, 123, 255, 0.4)", errorColor = "#e63946", style, }) => {
158
+ return (jsxRuntime.jsxs("div", { className: "select-wrapper", style: style, children: [label && jsxRuntime.jsx("label", { className: "select-label", children: label }), jsxRuntime.jsx("div", { className: `select-container ${disabled ? "disabled" : ""} ${error ? "error" : ""}`, children: jsxRuntime.jsx("select", { value: value, disabled: disabled, onChange: (e) => onChange(e.target.value), style: {
159
+ ["--sel-border"]: borderColor,
160
+ ["--sel-focus-border"]: focusBorder,
161
+ ["--sel-focus-shadow"]: focusShadow,
162
+ ["--sel-error"]: errorColor,
163
+ }, children: options.map((opt) => (jsxRuntime.jsx("option", { value: opt.value, style: {
164
+ backgroundColor: opt.bgColor,
165
+ color: opt.textColor,
166
+ }, children: opt.label }, opt.value))) }) })] }));
37
167
  };
38
168
 
169
+ exports.Bloc = Bloc;
39
170
  exports.Button = Button;
171
+ exports.Card = Card;
172
+ exports.Center = Center;
173
+ exports.Checkbox = Checkbox;
174
+ exports.Column = Column;
175
+ exports.Container = Container;
176
+ exports.Divider = Divider;
177
+ exports.Grid = Grid;
178
+ exports.Radio = Radio;
179
+ exports.Row = Row;
180
+ exports.Select = Select;
181
+ exports.Spacer = Spacer;
182
+ exports.TextField = TextField;
40
183
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/components/Button/Button.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import \"./Button.css\";\r\nimport React from \"react\";\r\n\r\n\r\nexport interface ButtonProps {\r\n label: string;\r\n onClick?: () => void;\r\n variant?: \"primary\" | \"secondary\" | \"danger\";\r\n size?: \"small\" | \"medium\" | \"large\";\r\n disabled?: boolean;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n label,\r\n onClick,\r\n variant = \"primary\",\r\n size = \"medium\",\r\n disabled = false,\r\n}) => {\r\n return (\r\n <>\r\n <button\r\n className={`btn btn-${variant} btn-${size}`}\r\n onClick={onClick}\r\n disabled={disabled}\r\n >\r\n {label}\r\n </button>\r\n </>\r\n );\r\n};\r\n"],"names":["_jsx"],"mappings":";;;;AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAY,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEzD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;;;;MCba,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,OAAO,EACP,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,QAAQ,EACf,QAAQ,GAAG,KAAK,GACjB,KAAI;IACH,QACEA,gDACEA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,CAAA,QAAA,EAAW,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,EAC3C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,YAEjB,KAAK,EAAA,CACC,EAAA,CACR;AAEP;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/components/Button/Button.tsx","../src/components/Center/Center.tsx","../src/components/Card/Card.tsx","../src/components/Bloc/Bloc.tsx","../src/components/Container/Container.tsx","../src/components/Row/Row.tsx","../src/components/Column/Column.tsx","../src/components/Grid/Grid.tsx","../src/components/Spacer/Spacer.tsx","../src/components/Divider/Divider.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/TextField/TextField.tsx","../src/components/Radio/Radio.tsx","../src/components/Select/Select.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import \"./Button.css\";\r\nimport React from \"react\";\r\n\r\n\r\nexport interface ButtonProps {\r\n label: string;\r\n onClick?: () => void;\r\n variant?: \"primary\" | \"secondary\" | \"danger\" | \"dark\" | \"light\";\r\n size?: \"small\" | \"medium\" | \"large\";\r\n disabled?: boolean;\r\n icon?: React.ReactNode;\r\n iconPosition?: \"left\" | \"right\";\r\n backgroundColor?: string;\r\n color?: string;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n label,\r\n onClick,\r\n variant = \"primary\",\r\n size = \"medium\",\r\n disabled = false,\r\n icon,\r\n iconPosition = \"left\",\r\n backgroundColor,\r\n color,\r\n isLoading = false,\r\n}) => {\r\n return (\r\n <>\r\n <button\r\n className={`btn btn-${variant} btn-${size}`}\r\n onClick={onClick}\r\n disabled={disabled || isLoading}\r\n style={{ backgroundColor, color }}\r\n >\r\n {icon && iconPosition === \"left\" && <span className=\"btn-left-icon\">{icon}</span>}\r\n {label}\r\n {icon && iconPosition === \"right\" && <span className=\"btn-right-icon\">{icon}</span>}\r\n {isLoading && <span className=\"btn-spinner\"></span>}\r\n </button>\r\n </>\r\n );\r\n};\r\n","import \"./Center.css\"\r\n\r\nexport interface CenterProps {\r\n children: React.ReactNode;\r\n backgroundColor?: string;\r\n color?: string;\r\n}\r\n\r\nexport const Center: React.FC<CenterProps> = ({ children, backgroundColor = 'white', color = 'black' }) => {\r\n return <div className=\"center\" style={{ backgroundColor, color}}>{children}</div>;\r\n};\r\n","import React from \"react\";\r\nimport \"./Card.css\";\r\n\r\nexport interface CardProps {\r\n title?: string;\r\n children: React.ReactNode;\r\n backgroundColor?: string;\r\n color?: string;\r\n variant?: \"elevated\" | \"outlined\" | \"flat\";\r\n padding?: \"sm\" | \"md\" | \"lg\";\r\n footer?: React.ReactNode;\r\n}\r\n\r\nexport const Card: React.FC<CardProps> = ({\r\n title,\r\n children,\r\n footer,\r\n backgroundColor,\r\n color,\r\n variant = \"elevated\",\r\n padding = \"md\",\r\n}) => {\r\n return (\r\n <div\r\n className={`card card-${variant} card-padding-${padding}`}\r\n style={{ backgroundColor, color }}\r\n >\r\n {title && <div className=\"card-header\">{title}</div>}\r\n <div className=\"card-body\">{children}</div>\r\n {footer && <div className=\"card-footer\">{footer}</div>}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Bloc.css\";\r\n\r\nexport type BlocLayout =\r\n | \"default\"\r\n | \"center\"\r\n | \"row\"\r\n | \"row-between\"\r\n | \"column\"\r\n | \"sidebar\"\r\n | \"navbar\";\r\n\r\nexport interface BlocProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n layout?: BlocLayout;\r\n}\r\n\r\nexport const Bloc: React.FC<BlocProps> = ({\r\n children,\r\n className = \"\",\r\n style = {},\r\n layout = \"default\",\r\n}) => {\r\n const layoutStyles: React.CSSProperties = (() => {\r\n switch (layout) {\r\n case \"center\":\r\n return { display: \"flex\", justifyContent: \"center\", alignItems: \"center\" };\r\n case \"row\":\r\n return { display: \"flex\", flexDirection: \"row\", alignItems: \"center\" };\r\n case \"row-between\":\r\n return { display: \"flex\", flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\" };\r\n case \"column\":\r\n return { display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\" };\r\n case \"sidebar\":\r\n return { display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", gap: \"12px\" };\r\n case \"navbar\":\r\n return { display: \"flex\", flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\", padding: \"12px 20px\" };\r\n default:\r\n return {};\r\n }\r\n })();\r\n\r\n return (\r\n <div className={`bloc ${className}`} style={{ ...layoutStyles, ...style }}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Container.css\";\r\n\r\nexport interface ContainerProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n fluid?: boolean;\r\n}\r\n\r\nexport const Container: React.FC<ContainerProps> = ({ children, className = \"\", style = {}, fluid = false }) => {\r\n return (\r\n <div className={`container ${fluid ? \"container-fluid\" : \"\"} ${className}`} style={style}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Row.css\";\r\n\r\nexport interface RowProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Row: React.FC<RowProps> = ({\r\n children,\r\n className = \"\",\r\n style = {}\r\n}) => {\r\n return <div className={`row ${className}`} style={{...style}}>{children}</div>;\r\n};\r\n","import React from \"react\";\r\nimport \"./Column.css\";\r\n\r\nexport interface ColumnProps {\r\n children?: React.ReactNode;\r\n className?: \"small\" | \"medium\" | \"large\";\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Column: React.FC<ColumnProps> = ({ children, className = \"\", style = {}}) => {\r\n return (\r\n <div className={`col ${className}`} style={{...style}}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import { Column } from \"../Column\";\r\nimport { Row } from \"../Row\";\r\n\r\nexport interface GridColumn {\r\n children?: React.ReactNode;\r\n span?: number;\r\n style?: React.CSSProperties;\r\n className?: \"small\" | \"medium\" | \"large\";\r\n}\r\n\r\nexport interface GridProps {\r\n items: GridColumn[];\r\n}\r\n\r\nexport const Grid: React.FC<GridProps> = ({ items }) => {\r\n\r\n return (\r\n <Row>\r\n {items.map((item: GridColumn, index: number) => (\r\n <Column\r\n key={index}\r\n className={item.className}\r\n style={{ ...item.style }}\r\n >\r\n {item.children}\r\n </Column>\r\n ))}\r\n </Row>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface SpacerProps {\r\n size?: number;\r\n direction?: \"vertical\" | \"horizontal\";\r\n}\r\n\r\nexport const Spacer: React.FC<SpacerProps> = ({\r\n size = 16,\r\n direction = \"vertical\"\r\n}) => {\r\n const style: React.CSSProperties =\r\n direction === \"vertical\"\r\n ? { height: size }\r\n : { width: size, display: \"inline-block\" };\r\n\r\n return <div style={style} />;\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface DividerProps {\r\n color?: string;\r\n thickness?: number;\r\n orientation?: \"horizontal\" | \"vertical\";\r\n margin?: number;\r\n}\r\n\r\nexport const Divider: React.FC<DividerProps> = ({\r\n color = \"#e0e0e0\",\r\n thickness = 1,\r\n orientation = \"horizontal\",\r\n margin = 8,\r\n}) => {\r\n const styles: React.CSSProperties =\r\n orientation === \"horizontal\"\r\n ? {\r\n width: \"100%\",\r\n height: thickness,\r\n backgroundColor: color,\r\n margin: `${margin}px 0`,\r\n }\r\n : {\r\n width: thickness,\r\n height: \"100%\",\r\n backgroundColor: color,\r\n margin: `0 ${margin}px`,\r\n };\r\n\r\n return <div style={styles} />;\r\n};\r\n","import React from \"react\";\r\nimport \"./Checkbox.css\";\r\n\r\nexport interface CheckboxProps {\r\n label?: string;\r\n checked: boolean;\r\n onChange: (value: boolean) => void;\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n // Custom colors\r\n boxColor?: string;\r\n checkColor?: string;\r\n checkedBackground?: string;\r\n focusShadow?: string;\r\n\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Checkbox: React.FC<CheckboxProps> = ({\r\n label,\r\n checked,\r\n onChange,\r\n disabled = false,\r\n error = false,\r\n\r\n boxColor = \"#777\",\r\n checkColor = \"#fff\",\r\n checkedBackground = \"#007bff\",\r\n focusShadow = \"rgba(0, 123, 255, 0.4)\",\r\n\r\n style,\r\n}) => {\r\n return (\r\n <label\r\n className={`checkbox-container ${disabled ? \"disabled\" : \"\"}`}\r\n style={{\r\n [\"--cb-box-color\" as any]: boxColor,\r\n [\"--cb-check-color\" as any]: checkColor,\r\n [\"--cb-checked-bg\" as any]: checkedBackground,\r\n [\"--cb-focus-shadow\" as any]: focusShadow,\r\n }}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n disabled={disabled}\r\n onChange={(e) => onChange(e.target.checked)}\r\n />\r\n\r\n <span className={`checkbox-box ${error ? \"error\" : \"\"}`} />\r\n\r\n {label && <span className=\"checkbox-label\">{label}</span>}\r\n </label>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./TextField.css\";\r\n\r\nexport interface TextFieldProps {\r\n label?: string;\r\n value?: string;\r\n placeholder?: string;\r\n onChange?: (value: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n type?: string;\r\n fullWidth?: boolean;\r\n icon?: React.ReactNode;\r\n}\r\n\r\nexport const TextField: React.FC<TextFieldProps> = ({\r\n label,\r\n value = \"\",\r\n placeholder,\r\n onChange,\r\n error,\r\n disabled = false,\r\n type = \"text\",\r\n fullWidth = true,\r\n icon,\r\n}) => {\r\n return (\r\n <div className={`textfield ${fullWidth ? \"fullWidth\" : \"\"}`}>\r\n {label && <label className=\"textfield-label\">{label}</label>}\r\n\r\n <input\r\n type={type}\r\n className={`textfield-input ${error ? \"error\" : \"\"}`}\r\n value={value}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n onChange={(e) => onChange && onChange(e.target.value)}\r\n />\r\n {icon && <div className=\"textfield-icon\">{icon}</div>}\r\n\r\n {error && <p className=\"textfield-error\">{error}</p>}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Radio.css\";\r\n\r\nexport interface RadioProps {\r\n label?: string;\r\n name: string; // obligatoire pour grouper les radios\r\n value: string;\r\n selectedValue: string;\r\n onChange: (value: string) => void;\r\n\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n // Thème custom\r\n borderColor?: string;\r\n dotColor?: string;\r\n checkedBorderColor?: string;\r\n checkedBackground?: string;\r\n focusShadow?: string;\r\n\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Radio: React.FC<RadioProps> = ({\r\n label,\r\n name,\r\n value,\r\n selectedValue,\r\n onChange,\r\n disabled = false,\r\n error = false,\r\n\r\n borderColor = \"#777\",\r\n dotColor = \"#fff\",\r\n checkedBorderColor = \"#007bff\",\r\n checkedBackground = error ? \"#d93025\" : \"#007bff\",\r\n focusShadow = \"rgba(0, 123, 255, 0.4)\",\r\n\r\n style,\r\n}) => {\r\n const checked = selectedValue === value;\r\n\r\n return (\r\n <label\r\n className={`radio-container ${disabled ? \"disabled\" : \"\"}`}\r\n style={{\r\n ...style,\r\n [\"--rd-border-color\" as any]: borderColor,\r\n [\"--rd-dot-color\" as any]: dotColor,\r\n [\"--rd-checked-border\" as any]: checkedBorderColor,\r\n [\"--rd-checked-bg\" as any]: checkedBackground,\r\n [\"--rd-focus-shadow\" as any]: focusShadow,\r\n }}\r\n >\r\n <input\r\n type=\"radio\"\r\n name={name}\r\n value={value}\r\n disabled={disabled}\r\n checked={checked}\r\n onChange={() => onChange(value)}\r\n />\r\n\r\n <span className={`radio-circle ${error ? \"error\" : \"\"}`} />\r\n\r\n {label && <span className=\"radio-label\">{label}</span>}\r\n </label>\r\n );\r\n};\r\n","import React from \"react\";\r\nimport \"./Select.css\";\r\n\r\nexport interface SelectOption {\r\n value: string | number;\r\n label: string;\r\n\r\n bgColor?: string;\r\n textColor?: string;\r\n}\r\n\r\nexport interface SelectProps {\r\n label?: string;\r\n value: string | number;\r\n onChange: (value: string | number) => void;\r\n options: SelectOption[];\r\n disabled?: boolean;\r\n error?: boolean;\r\n\r\n // Custom colors\r\n borderColor?: string;\r\n focusBorder?: string;\r\n focusShadow?: string;\r\n errorColor?: string;\r\n\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport const Select: React.FC<SelectProps> = ({\r\n label,\r\n value,\r\n onChange,\r\n options,\r\n disabled = false,\r\n error = false,\r\n\r\n borderColor = \"#ccc\",\r\n focusBorder = \"#007bff\",\r\n focusShadow = \"rgba(0, 123, 255, 0.4)\",\r\n errorColor = \"#e63946\",\r\n\r\n style,\r\n}) => {\r\n return (\r\n <div className=\"select-wrapper\" style={style}>\r\n {label && <label className=\"select-label\">{label}</label>}\r\n\r\n <div\r\n className={`select-container ${disabled ? \"disabled\" : \"\"} ${\r\n error ? \"error\" : \"\"\r\n }`}\r\n >\r\n <select\r\n value={value}\r\n disabled={disabled}\r\n onChange={(e) => onChange(e.target.value)}\r\n style={{\r\n [\"--sel-border\" as any]: borderColor,\r\n [\"--sel-focus-border\" as any]: focusBorder,\r\n [\"--sel-focus-shadow\" as any]: focusShadow,\r\n [\"--sel-error\" as any]: errorColor,\r\n }}\r\n >\r\n {options.map((opt) => (\r\n <option\r\n key={opt.value}\r\n value={opt.value}\r\n style={{\r\n backgroundColor: opt.bgColor,\r\n color: opt.textColor,\r\n }}\r\n >\r\n {opt.label}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"names":["_jsx","_Fragment","_jsxs"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,15 @@
1
+ import './button.css';
2
+ export interface ButtonProps {
3
+ /** Is this the principal call to action on the page? */
4
+ primary?: boolean;
5
+ /** What background color to use */
6
+ backgroundColor?: string;
7
+ /** How large should the button be? */
8
+ size?: 'small' | 'medium' | 'large';
9
+ /** Button contents */
10
+ label: string;
11
+ /** Optional click handler */
12
+ onClick?: () => void;
13
+ }
14
+ /** Primary UI component for user interaction */
15
+ export declare const Button: ({ primary, size, backgroundColor, label, ...props }: ButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import type { StoryObj } from '@storybook/react-webpack5';
2
+ declare const meta: Meta<({ primary, size, backgroundColor, label, ...props }: import("./Button").ButtonProps) => import("react/jsx-runtime").JSX.Element>;
3
+ export default meta;
4
+ type Story = StoryObj<typeof meta>;
5
+ export declare const Primary: Story;
6
+ export declare const Secondary: Story;
7
+ export declare const Large: Story;
8
+ export declare const Small: Story;
@@ -0,0 +1,12 @@
1
+ import './header.css';
2
+ type User = {
3
+ name: string;
4
+ };
5
+ export interface HeaderProps {
6
+ user?: User;
7
+ onLogin?: () => void;
8
+ onLogout?: () => void;
9
+ onCreateAccount?: () => void;
10
+ }
11
+ export declare const Header: ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,6 @@
1
+ import type { StoryObj } from '@storybook/react-webpack5';
2
+ declare const meta: Meta<({ user, onLogin, onLogout, onCreateAccount }: import("./Header").HeaderProps) => import("react/jsx-runtime").JSX.Element>;
3
+ export default meta;
4
+ type Story = StoryObj<typeof meta>;
5
+ export declare const LoggedIn: Story;
6
+ export declare const LoggedOut: Story;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import './page.css';
3
+ export declare const Page: React.FC;
@@ -0,0 +1,6 @@
1
+ import type { StoryObj } from '@storybook/react-webpack5';
2
+ declare const meta: Meta<import("react").FC<{}>>;
3
+ export default meta;
4
+ type Story = StoryObj<typeof meta>;
5
+ export declare const LoggedOut: Story;
6
+ export declare const LoggedIn: Story;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@houssemdi2000/design-system",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Mon système de design React",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -10,7 +10,11 @@
10
10
  ],
11
11
  "scripts": {
12
12
  "build": "rollup -c",
13
- "prepublishOnly": "npm run build"
13
+ "test": "jest",
14
+ "test:watch": "jest --watch",
15
+ "prepublishOnly": "npm run build",
16
+ "storybook": "storybook dev -p 6006",
17
+ "build-storybook": "storybook build"
14
18
  },
15
19
  "peerDependencies": {
16
20
  "react": "^18.0.0",
@@ -28,11 +32,26 @@
28
32
  "@rollup/plugin-commonjs": "^29.0.0",
29
33
  "@rollup/plugin-node-resolve": "^16.0.3",
30
34
  "@rollup/plugin-typescript": "^12.3.0",
35
+ "@storybook/addon-a11y": "^10.1.4",
36
+ "@storybook/addon-docs": "^10.1.4",
37
+ "@storybook/addon-webpack5-compiler-swc": "^4.0.2",
38
+ "@storybook/react-webpack5": "^10.1.4",
39
+ "@testing-library/jest-dom": "^6.9.1",
40
+ "@testing-library/react": "^16.3.0",
41
+ "@testing-library/user-event": "^14.6.1",
42
+ "@types/jest": "^30.0.0",
31
43
  "@types/react": "^19.2.7",
32
44
  "@types/react-dom": "^19.2.3",
45
+ "@vitest/mocker": "^4.0.15",
46
+ "identity-obj-proxy": "^3.0.0",
47
+ "jest": "^30.2.0",
48
+ "jest-environment-jsdom": "^30.2.0",
49
+ "jsdom": "^27.0.1",
33
50
  "rollup": "^4.53.3",
34
51
  "rollup-plugin-peer-deps-external": "^2.2.4",
35
52
  "rollup-plugin-postcss": "^4.0.2",
53
+ "storybook": "^10.1.4",
54
+ "ts-jest": "^29.4.6",
36
55
  "tslib": "^2.8.1",
37
56
  "typescript": "^5.9.3"
38
57
  }