@stfrigerio/sito-template 0.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 (45) hide show
  1. package/dist/components/Button/Button.d.ts +14 -0
  2. package/dist/components/Button/Button.d.ts.map +1 -0
  3. package/dist/components/Button/index.d.ts +3 -0
  4. package/dist/components/Button/index.d.ts.map +1 -0
  5. package/dist/components/Card/Card.d.ts +18 -0
  6. package/dist/components/Card/Card.d.ts.map +1 -0
  7. package/dist/components/Card/index.d.ts +3 -0
  8. package/dist/components/Card/index.d.ts.map +1 -0
  9. package/dist/components/Input/Input.d.ts +16 -0
  10. package/dist/components/Input/Input.d.ts.map +1 -0
  11. package/dist/components/Input/index.d.ts +3 -0
  12. package/dist/components/Input/index.d.ts.map +1 -0
  13. package/dist/components/Modal/Modal.d.ts +18 -0
  14. package/dist/components/Modal/Modal.d.ts.map +1 -0
  15. package/dist/components/Modal/index.d.ts +3 -0
  16. package/dist/components/Modal/index.d.ts.map +1 -0
  17. package/dist/contexts/ThemeContext.d.ts +15 -0
  18. package/dist/contexts/ThemeContext.d.ts.map +1 -0
  19. package/dist/index.d.ts +10 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.esm.js +160 -0
  22. package/dist/index.esm.js.map +1 -0
  23. package/dist/index.js +167 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/stories/Button.d.ts +16 -0
  26. package/dist/stories/Button.d.ts.map +1 -0
  27. package/dist/stories/Button.stories.d.ts +24 -0
  28. package/dist/stories/Button.stories.d.ts.map +1 -0
  29. package/dist/stories/Card.stories.d.ts +38 -0
  30. package/dist/stories/Card.stories.d.ts.map +1 -0
  31. package/dist/stories/Header.d.ts +13 -0
  32. package/dist/stories/Header.d.ts.map +1 -0
  33. package/dist/stories/Header.stories.d.ts +19 -0
  34. package/dist/stories/Header.stories.d.ts.map +1 -0
  35. package/dist/stories/Input.stories.d.ts +51 -0
  36. package/dist/stories/Input.stories.d.ts.map +1 -0
  37. package/dist/stories/Modal.stories.d.ts +41 -0
  38. package/dist/stories/Modal.stories.d.ts.map +1 -0
  39. package/dist/stories/Page.d.ts +4 -0
  40. package/dist/stories/Page.d.ts.map +1 -0
  41. package/dist/stories/Page.stories.d.ts +13 -0
  42. package/dist/stories/Page.stories.d.ts.map +1 -0
  43. package/dist/stories/ThemeDemo.stories.d.ts +14 -0
  44. package/dist/stories/ThemeDemo.stories.d.ts.map +1 -0
  45. package/package.json +68 -0
@@ -0,0 +1,14 @@
1
+ import React, { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ import { HTMLMotionProps } from 'framer-motion';
3
+ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {
4
+ variant?: 'primary' | 'secondary' | 'outline' | 'ghost';
5
+ size?: 'small' | 'medium' | 'large';
6
+ fullWidth?: boolean;
7
+ loading?: boolean;
8
+ iconLeft?: ReactNode;
9
+ iconRight?: ReactNode;
10
+ children?: ReactNode;
11
+ motionProps?: HTMLMotionProps<"button">;
12
+ }
13
+ export declare const Button: React.FC<ButtonProps>;
14
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAU,eAAe,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,kBAAkB,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC7I,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAsCxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Button } from './Button';
2
+ export type { ButtonProps } from './Button';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React, { HTMLAttributes, ReactNode } from 'react';
2
+ import { HTMLMotionProps } from 'framer-motion';
3
+ export interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {
4
+ variant?: 'elevated' | 'outlined' | 'flat';
5
+ hoverable?: boolean;
6
+ clickable?: boolean;
7
+ padding?: boolean;
8
+ image?: string;
9
+ imageAlt?: string;
10
+ title?: string;
11
+ subtitle?: string;
12
+ header?: ReactNode;
13
+ footer?: ReactNode;
14
+ children?: ReactNode;
15
+ motionProps?: HTMLMotionProps<"div">;
16
+ }
17
+ export declare const Card: React.FC<CardProps>;
18
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/components/Card/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAU,eAAe,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,kBAAkB,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAClI,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA6DpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Card } from './Card';
2
+ export type { CardProps } from './Card';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Card/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import React, { InputHTMLAttributes, TextareaHTMLAttributes, ReactNode } from 'react';
2
+ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement> & TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
3
+ label?: string;
4
+ error?: string;
5
+ helperText?: string;
6
+ required?: boolean;
7
+ fullWidth?: boolean;
8
+ size?: 'small' | 'medium' | 'large';
9
+ variant?: 'default' | 'error' | 'success';
10
+ iconLeft?: ReactNode;
11
+ iconRight?: ReactNode;
12
+ multiline?: boolean;
13
+ rows?: number;
14
+ }
15
+ export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement | HTMLTextAreaElement>>;
16
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,SAAS,EAAc,MAAM,OAAO,CAAC;AAIlG,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACnI,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,KAAK,2GA2FhB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Input } from './Input';
2
+ export type { InputProps } from './Input';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Input/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React, { ReactNode } from 'react';
2
+ export interface ModalProps {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ title?: string;
6
+ size?: 'small' | 'medium' | 'large' | 'fullscreen';
7
+ centered?: boolean;
8
+ closeOnOverlay?: boolean;
9
+ closeOnEsc?: boolean;
10
+ showCloseButton?: boolean;
11
+ header?: ReactNode;
12
+ footer?: ReactNode;
13
+ children?: ReactNode;
14
+ className?: string;
15
+ overlayClassName?: string;
16
+ }
17
+ export declare const Modal: React.FC<ModalProps>;
18
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAKpD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAiGtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Modal } from './Modal';
2
+ export type { ModalProps } from './Modal';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React, { ReactNode } from 'react';
2
+ type Theme = 'light' | 'dark';
3
+ interface ThemeContextType {
4
+ theme: Theme;
5
+ toggleTheme: () => void;
6
+ setTheme: (theme: Theme) => void;
7
+ }
8
+ export declare const useTheme: () => ThemeContextType;
9
+ interface ThemeProviderProps {
10
+ children: ReactNode;
11
+ defaultTheme?: Theme;
12
+ }
13
+ export declare const ThemeProvider: React.FC<ThemeProviderProps>;
14
+ export {};
15
+ //# sourceMappingURL=ThemeContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/contexts/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9B,UAAU,gBAAgB;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,QAAQ,wBAMpB,CAAC;AAEF,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA2BtD,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { ThemeProvider, useTheme } from './contexts/ThemeContext';
2
+ export { Button } from './components/Button';
3
+ export type { ButtonProps } from './components/Button';
4
+ export { Card } from './components/Card';
5
+ export type { CardProps } from './components/Card';
6
+ export { Modal } from './components/Modal';
7
+ export type { ModalProps } from './components/Modal';
8
+ export { Input } from './components/Input';
9
+ export type { InputProps } from './components/Input';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGlE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,160 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { createContext, useContext, useState, useEffect, forwardRef } from 'react';
3
+ import { motion, AnimatePresence } from 'framer-motion';
4
+ import { createPortal } from 'react-dom';
5
+
6
+ const ThemeContext = createContext(undefined);
7
+ const useTheme = () => {
8
+ const context = useContext(ThemeContext);
9
+ if (!context) {
10
+ throw new Error('useTheme must be used within a ThemeProvider');
11
+ }
12
+ return context;
13
+ };
14
+ const ThemeProvider = ({ children, defaultTheme = 'light' }) => {
15
+ const [theme, setTheme] = useState(defaultTheme);
16
+ useEffect(() => {
17
+ const savedTheme = localStorage.getItem('theme');
18
+ if (savedTheme) {
19
+ setTheme(savedTheme);
20
+ }
21
+ }, []);
22
+ useEffect(() => {
23
+ document.documentElement.setAttribute('data-theme', theme);
24
+ localStorage.setItem('theme', theme);
25
+ }, [theme]);
26
+ const toggleTheme = () => {
27
+ setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');
28
+ };
29
+ return (jsx(ThemeContext.Provider, { value: { theme, toggleTheme, setTheme }, children: children }));
30
+ };
31
+
32
+ function styleInject(css, ref) {
33
+ if ( ref === void 0 ) ref = {};
34
+ var insertAt = ref.insertAt;
35
+
36
+ if (!css || typeof document === 'undefined') { return; }
37
+
38
+ var head = document.head || document.getElementsByTagName('head')[0];
39
+ var style = document.createElement('style');
40
+ style.type = 'text/css';
41
+
42
+ if (insertAt === 'top') {
43
+ if (head.firstChild) {
44
+ head.insertBefore(style, head.firstChild);
45
+ } else {
46
+ head.appendChild(style);
47
+ }
48
+ } else {
49
+ head.appendChild(style);
50
+ }
51
+
52
+ if (style.styleSheet) {
53
+ style.styleSheet.cssText = css;
54
+ } else {
55
+ style.appendChild(document.createTextNode(css));
56
+ }
57
+ }
58
+
59
+ var css_248z$3 = ".Button-module_button__2ZuB7{align-items:center;border:var(--border-width) solid transparent;border-radius:var(--border-radius-md);cursor:pointer;display:inline-flex;font-family:var(--font-family-base);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:var(--spacing-sm) var(--spacing-lg);position:relative;transition:all var(--transition-fast);user-select:none}.Button-module_button__2ZuB7:focus-visible{box-shadow:0 0 0 3px rgba(var(--color-primary-rgb,0,123,255),.25)}.Button-module_button__2ZuB7:disabled{cursor:not-allowed;opacity:.5}.Button-module_primary__s1sM6{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.Button-module_primary__s1sM6:hover:not(:disabled){filter:brightness(1.1)}.Button-module_secondary__R0waJ{background-color:var(--color-secondary);border-color:var(--color-secondary);color:#fff}.Button-module_secondary__R0waJ:hover:not(:disabled){filter:brightness(1.1)}.Button-module_outline__F5jq-{background-color:transparent;border-color:var(--color-primary);color:var(--color-primary)}.Button-module_outline__F5jq-:hover:not(:disabled){background-color:var(--color-primary);color:#fff}.Button-module_ghost__1KINV{background-color:transparent;border-color:transparent;color:var(--color-text)}.Button-module_ghost__1KINV:hover:not(:disabled){background-color:var(--color-surface)}.Button-module_small__l39oh{font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-md)}.Button-module_medium__KTxdk{font-size:var(--font-size-base);padding:var(--spacing-sm) var(--spacing-lg)}.Button-module_large__6bsb7{font-size:var(--font-size-lg);padding:var(--spacing-md) var(--spacing-xl)}.Button-module_fullWidth__36oJT{width:100%}.Button-module_loading__EQAt2{color:transparent}.Button-module_spinner__ZExvW{animation:Button-module_spin__JvkZu .6s linear infinite;border:2px solid;border-radius:50%;border-right:2px solid transparent;height:1em;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:1em}@keyframes Button-module_spin__JvkZu{to{transform:translate(-50%,-50%) rotate(1turn)}}.Button-module_iconLeft__YwUkN{margin-right:var(--spacing-sm)}.Button-module_iconRight__J7Lff{margin-left:var(--spacing-sm)}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1dHRvbi5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUdFLGtCQUFtQixDQU9uQiw0Q0FBNkMsQ0FDN0MscUNBQXNDLENBQ3RDLGNBQWUsQ0FWZixtQkFBb0IsQ0FJcEIsbUNBQW9DLENBQ3BDLCtCQUFnQyxDQUNoQyxxQ0FBc0MsQ0FKdEMsc0JBQXVCLENBS3ZCLGVBQWdCLENBS2hCLFlBQWEsQ0FDYixlQUFnQixDQVZoQiwyQ0FBNEMsQ0FKNUMsaUJBQWtCLENBWWxCLHFDQUFzQyxDQUd0QyxnQkFDRixDQUVBLDJDQUNFLGlFQUNGLENBRUEsc0NBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FHQSw4QkFDRSxxQ0FBc0MsQ0FFdEMsaUNBQWtDLENBRGxDLFVBRUYsQ0FFQSxtREFDRSxzQkFDRixDQUVBLGdDQUNFLHVDQUF3QyxDQUV4QyxtQ0FBb0MsQ0FEcEMsVUFFRixDQUVBLHFEQUNFLHNCQUNGLENBRUEsOEJBQ0UsNEJBQTZCLENBRTdCLGlDQUFrQyxDQURsQywwQkFFRixDQUVBLG1EQUNFLHFDQUFzQyxDQUN0QyxVQUNGLENBRUEsNEJBQ0UsNEJBQTZCLENBRTdCLHdCQUF5QixDQUR6Qix1QkFFRixDQUVBLGlEQUNFLHFDQUNGLENBR0EsNEJBRUUsNkJBQThCLENBRDlCLDJDQUVGLENBRUEsNkJBRUUsK0JBQWdDLENBRGhDLDJDQUVGLENBRUEsNEJBRUUsNkJBQThCLENBRDlCLDJDQUVGLENBR0EsZ0NBQ0UsVUFDRixDQUdBLDhCQUNFLGlCQUNGLENBRUEsOEJBVUUsdURBQW9DLENBRnBDLGdCQUErQixDQUMvQixpQkFBa0IsQ0FEbEIsa0NBQStCLENBRi9CLFVBQVcsQ0FIWCxRQUFTLENBRlQsaUJBQWtCLENBQ2xCLE9BQVEsQ0FFUiw4QkFBZ0MsQ0FDaEMsU0FNRixDQUVBLHFDQUNFLEdBQ0UsNENBQ0YsQ0FDRixDQUdBLCtCQUNFLDhCQUNGLENBRUEsZ0NBQ0UsNkJBQ0YiLCJmaWxlIjoiQnV0dG9uLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbGcpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktYmFzZSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJhc2UpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLW1kKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbiAgb3V0bGluZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5idXR0b246Zm9jdXMtdmlzaWJsZSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiLCAwLCAxMjMsIDI1NSksIDAuMjUpO1xufVxuXG4uYnV0dG9uOmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4vKiBWYXJpYW50cyAqL1xuLnByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4ucHJpbWFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGZpbHRlcjogYnJpZ2h0bmVzcygxLjEpO1xufVxuXG4uc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG59XG5cbi5zZWNvbmRhcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4xKTtcbn1cblxuLm91dGxpbmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4ub3V0bGluZTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi5naG9zdCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xufVxuXG4vKiBTaXplcyAqL1xuLnNtYWxsIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14cykgdmFyKC0tc3BhY2luZy1tZCk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbn1cblxuLm1lZGl1bSB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbGcpO1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbn1cblxuLmxhcmdlIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZCkgdmFyKC0tc3BhY2luZy14bCk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbn1cblxuLyogRnVsbCB3aWR0aCAqL1xuLmZ1bGxXaWR0aCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vKiBMb2FkaW5nIHN0YXRlICovXG4ubG9hZGluZyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnNwaW5uZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgYm9yZGVyOiAycHggc29saWQgY3VycmVudENvbG9yO1xuICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogc3BpbiAwLjZzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBzcGluIHtcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi8qIEljb24gc3BhY2luZyAqL1xuLmljb25MZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLmljb25SaWdodCB7XG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtKTtcbn0iXX0= */";
60
+ var styles$3 = {"button":"Button-module_button__2ZuB7","primary":"Button-module_primary__s1sM6","secondary":"Button-module_secondary__R0waJ","outline":"Button-module_outline__F5jq-","ghost":"Button-module_ghost__1KINV","small":"Button-module_small__l39oh","medium":"Button-module_medium__KTxdk","large":"Button-module_large__6bsb7","fullWidth":"Button-module_fullWidth__36oJT","loading":"Button-module_loading__EQAt2","spinner":"Button-module_spinner__ZExvW","spin":"Button-module_spin__JvkZu","iconLeft":"Button-module_iconLeft__YwUkN","iconRight":"Button-module_iconRight__J7Lff"};
61
+ styleInject(css_248z$3);
62
+
63
+ const Button = ({ variant = 'primary', size = 'medium', fullWidth = false, loading = false, iconLeft, iconRight, children, className = '', disabled, motionProps, ...rest }) => {
64
+ const buttonClasses = [
65
+ styles$3.button,
66
+ styles$3[variant],
67
+ styles$3[size],
68
+ fullWidth && styles$3.fullWidth,
69
+ loading && styles$3.loading,
70
+ className
71
+ ].filter(Boolean).join(' ');
72
+ return (jsxs(motion.button, { className: buttonClasses, disabled: disabled || loading, whileHover: { scale: disabled || loading ? 1 : 1.02 }, whileTap: { scale: disabled || loading ? 1 : 0.98 }, transition: { type: "spring", stiffness: 400, damping: 17 }, ...motionProps, ...rest, children: [loading && jsx("span", { className: styles$3.spinner }), iconLeft && jsx("span", { className: styles$3.iconLeft, children: iconLeft }), children, iconRight && jsx("span", { className: styles$3.iconRight, children: iconRight })] }));
73
+ };
74
+
75
+ var css_248z$2 = ".Card-module_card__Cb1o4{background-color:var(--color-background);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius-lg);overflow:hidden;transition:all var(--transition-base)}.Card-module_card__Cb1o4:hover.Card-module_hoverable__aGYcW{box-shadow:var(--shadow-lg);transform:translateY(-2px)}.Card-module_elevated__5VEDw{box-shadow:var(--shadow-md)}.Card-module_elevated__5VEDw:hover.Card-module_hoverable__aGYcW{box-shadow:var(--shadow-xl)}.Card-module_outlined__Tkn0-{border-color:var(--border-color);box-shadow:none}.Card-module_flat__LRpce{background-color:var(--color-surface);border:none;box-shadow:none}.Card-module_image__bEGMz{display:block;height:auto;width:100%}.Card-module_imageContainer__aBzxr{overflow:hidden;position:relative}.Card-module_header__PTXf2{border-bottom:var(--border-width) solid var(--border-color);padding:var(--spacing-lg)}.Card-module_body__W441Z{padding:var(--spacing-lg)}.Card-module_footer__Mu-JC{align-items:center;border-top:var(--border-width) solid var(--border-color);display:flex;gap:var(--spacing-sm);justify-content:flex-end;padding:var(--spacing-lg)}.Card-module_title__mSgoo{color:var(--color-text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.Card-module_subtitle__dBqgy{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin:var(--spacing-xs) 0 0}.Card-module_clickable__qbwhm{cursor:pointer}.Card-module_padding__o07TN{padding:var(--spacing-lg)}.Card-module_noPadding__jt3Vd{padding:0}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhcmQubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5QkFDRSx3Q0FBeUMsQ0FDekMsb0RBQXFELENBQ3JELHFDQUFzQyxDQUN0QyxlQUFnQixDQUNoQixxQ0FDRixDQUVBLDREQUVFLDJCQUE0QixDQUQ1QiwwQkFFRixDQUVBLDZCQUNFLDJCQUNGLENBRUEsZ0VBQ0UsMkJBQ0YsQ0FFQSw2QkFDRSxnQ0FBaUMsQ0FDakMsZUFDRixDQUVBLHlCQUdFLHFDQUFzQyxDQUZ0QyxXQUFZLENBQ1osZUFFRixDQUVBLDBCQUdFLGFBQWMsQ0FEZCxXQUFZLENBRFosVUFHRixDQUVBLG1DQUVFLGVBQWdCLENBRGhCLGlCQUVGLENBRUEsMkJBRUUsMkRBQTRELENBRDVELHlCQUVGLENBRUEseUJBQ0UseUJBQ0YsQ0FFQSwyQkFJRSxrQkFBbUIsQ0FGbkIsd0RBQXlELENBQ3pELFlBQWEsQ0FHYixxQkFBc0IsQ0FEdEIsd0JBQXlCLENBSnpCLHlCQU1GLENBRUEsMEJBSUUsdUJBQXdCLENBRnhCLDZCQUE4QixDQUM5Qix1Q0FBd0MsQ0FGeEMsUUFJRixDQUVBLDZCQUdFLGlDQUFrQyxDQURsQyw2QkFBOEIsQ0FEOUIsNEJBR0YsQ0FFQSw4QkFDRSxjQUNGLENBRUEsNEJBQ0UseUJBQ0YsQ0FFQSw4QkFDRSxTQUNGIiwiZmlsZSI6IkNhcmQubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jYXJkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi5jYXJkOmhvdmVyLmhvdmVyYWJsZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbn1cblxuLmVsZXZhdGVkIHtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcbn1cblxuLmVsZXZhdGVkOmhvdmVyLmhvdmVyYWJsZSB7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy14bCk7XG59XG5cbi5vdXRsaW5lZCB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLmZsYXQge1xuICBib3JkZXI6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xufVxuXG4uaW1hZ2Uge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmltYWdlQ29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uaGVhZGVyIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcbn1cblxuLmJvZHkge1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLWxnKTtcbn1cblxuLmZvb3RlciB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpO1xuICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG59XG5cbi50aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG59XG5cbi5zdWJ0aXRsZSB7XG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy14cykgMCAwO1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi5jbGlja2FibGUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wYWRkaW5nIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG59XG5cbi5ub1BhZGRpbmcge1xuICBwYWRkaW5nOiAwO1xufSJdfQ== */";
76
+ var styles$2 = {"card":"Card-module_card__Cb1o4","hoverable":"Card-module_hoverable__aGYcW","elevated":"Card-module_elevated__5VEDw","outlined":"Card-module_outlined__Tkn0-","flat":"Card-module_flat__LRpce","image":"Card-module_image__bEGMz","imageContainer":"Card-module_imageContainer__aBzxr","header":"Card-module_header__PTXf2","body":"Card-module_body__W441Z","footer":"Card-module_footer__Mu-JC","title":"Card-module_title__mSgoo","subtitle":"Card-module_subtitle__dBqgy","clickable":"Card-module_clickable__qbwhm","padding":"Card-module_padding__o07TN","noPadding":"Card-module_noPadding__jt3Vd"};
77
+ styleInject(css_248z$2);
78
+
79
+ const Card = ({ variant = 'elevated', hoverable = false, clickable = false, padding = true, image, imageAlt = '', title, subtitle, header, footer, children, className = '', onClick, motionProps, ...rest }) => {
80
+ const cardClasses = [
81
+ styles$2.card,
82
+ styles$2[variant],
83
+ hoverable && styles$2.hoverable,
84
+ clickable && styles$2.clickable,
85
+ !padding && styles$2.noPadding,
86
+ className
87
+ ].filter(Boolean).join(' ');
88
+ const cardContent = (jsxs(Fragment, { children: [image && (jsx("div", { className: styles$2.imageContainer, children: jsx("img", { src: image, alt: imageAlt, className: styles$2.image }) })), header && jsx("div", { className: styles$2.header, children: header }), (title || subtitle) && !header && (jsxs("div", { className: styles$2.header, children: [title && jsx("h3", { className: styles$2.title, children: title }), subtitle && jsx("p", { className: styles$2.subtitle, children: subtitle })] })), children && (jsx("div", { className: padding ? styles$2.body : undefined, children: children })), footer && jsx("div", { className: styles$2.footer, children: footer })] }));
89
+ return (jsx(motion.div, { className: cardClasses, onClick: clickable ? onClick : undefined, whileHover: hoverable ? { y: -4 } : undefined, transition: { type: "spring", stiffness: 400, damping: 17 }, ...motionProps, ...rest, children: cardContent }));
90
+ };
91
+
92
+ var css_248z$1 = ".Modal-module_overlay__dd9h1{align-items:center;background-color:rgba(0,0,0,.5);bottom:0;display:flex;justify-content:center;left:0;padding:var(--spacing-lg);position:fixed;right:0;top:0;z-index:var(--z-index-modal-backdrop)}.Modal-module_modal__aD7aP{background-color:var(--color-background);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;max-height:90vh;max-width:90vw;overflow:auto;position:relative;z-index:var(--z-index-modal)}.Modal-module_small__Xlbt5{width:400px}.Modal-module_medium__OnN1W{width:600px}.Modal-module_large__p-8Oq{width:800px}.Modal-module_fullscreen__o84Xi{border-radius:0;height:100vh;max-height:100vh;max-width:100vw;width:100vw}.Modal-module_header__ILG9i{align-items:center;border-bottom:var(--border-width) solid var(--border-color);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--spacing-lg)}.Modal-module_title__A5OeE{color:var(--color-text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.Modal-module_closeButton__3LpSf{align-items:center;background:none;border:none;border-radius:var(--border-radius-md);color:var(--color-text-secondary);cursor:pointer;display:flex;font-size:var(--font-size-xl);justify-content:center;padding:var(--spacing-xs);transition:all var(--transition-fast)}.Modal-module_closeButton__3LpSf:hover{background-color:var(--color-surface);color:var(--color-text)}.Modal-module_body__lVhql{flex:1;overflow-y:auto;padding:var(--spacing-lg)}.Modal-module_footer__rro2w{align-items:center;border-top:var(--border-width) solid var(--border-color);display:flex;flex-shrink:0;gap:var(--spacing-sm);justify-content:flex-end;padding:var(--spacing-lg)}.Modal-module_centered__UfBxf{text-align:center}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1vZGFsLm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBUUUsa0JBQW1CLENBRm5CLCtCQUFvQyxDQURwQyxRQUFTLENBRVQsWUFBYSxDQUViLHNCQUF1QixDQU52QixNQUFPLENBUVAseUJBQTBCLENBVjFCLGNBQWUsQ0FHZixPQUFRLENBRlIsS0FBTSxDQVFOLHFDQUVGLENBRUEsMkJBQ0Usd0NBQXlDLENBQ3pDLHFDQUFzQyxDQUN0QywyQkFBNEIsQ0FNNUIsWUFBYSxDQUNiLHFCQUFzQixDQUx0QixlQUFnQixDQURoQixjQUFlLENBRWYsYUFBYyxDQUNkLGlCQUFrQixDQUNsQiw0QkFHRixDQUVBLDJCQUNFLFdBQ0YsQ0FFQSw0QkFDRSxXQUNGLENBRUEsMkJBQ0UsV0FDRixDQUVBLGdDQUtFLGVBQWdCLENBSGhCLFlBQWEsQ0FFYixnQkFBaUIsQ0FEakIsZUFBZ0IsQ0FGaEIsV0FLRixDQUVBLDRCQUlFLGtCQUFtQixDQUZuQiwyREFBNEQsQ0FDNUQsWUFBYSxDQUdiLGFBQWMsQ0FEZCw2QkFBOEIsQ0FKOUIseUJBTUYsQ0FFQSwyQkFJRSx1QkFBd0IsQ0FGeEIsNkJBQThCLENBQzlCLHVDQUF3QyxDQUZ4QyxRQUlGLENBRUEsaUNBUUUsa0JBQW1CLENBUG5CLGVBQWdCLENBQ2hCLFdBQVksQ0FRWixxQ0FBc0MsQ0FMdEMsaUNBQWtDLENBRGxDLGNBQWUsQ0FHZixZQUFhLENBSmIsNkJBQThCLENBTTlCLHNCQUF1QixDQUh2Qix5QkFBMEIsQ0FLMUIscUNBQ0YsQ0FFQSx1Q0FDRSxxQ0FBc0MsQ0FDdEMsdUJBQ0YsQ0FFQSwwQkFFRSxNQUFPLENBQ1AsZUFBZ0IsQ0FGaEIseUJBR0YsQ0FFQSw0QkFJRSxrQkFBbUIsQ0FGbkIsd0RBQXlELENBQ3pELFlBQWEsQ0FJYixhQUFjLENBRGQscUJBQXNCLENBRHRCLHdCQUF5QixDQUp6Qix5QkFPRixDQUVBLDhCQUNFLGlCQUNGIiwiZmlsZSI6Ik1vZGFsLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB6LWluZGV4OiB2YXIoLS16LWluZGV4LW1vZGFsLWJhY2tkcm9wKTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG59XG5cbi5tb2RhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXhsKTtcbiAgbWF4LXdpZHRoOiA5MHZ3O1xuICBtYXgtaGVpZ2h0OiA5MHZoO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiB2YXIoLS16LWluZGV4LW1vZGFsKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLnNtYWxsIHtcbiAgd2lkdGg6IDQwMHB4O1xufVxuXG4ubWVkaXVtIHtcbiAgd2lkdGg6IDYwMHB4O1xufVxuXG4ubGFyZ2Uge1xuICB3aWR0aDogODAwcHg7XG59XG5cbi5mdWxsc2NyZWVuIHtcbiAgd2lkdGg6IDEwMHZ3O1xuICBoZWlnaHQ6IDEwMHZoO1xuICBtYXgtd2lkdGg6IDEwMHZ3O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmhlYWRlciB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpO1xuICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi50aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG59XG5cbi5jbG9zZUJ1dHRvbiB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHMpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1tZCk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWZhc3QpO1xufVxuXG4uY2xvc2VCdXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xufVxuXG4uYm9keSB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpO1xuICBmbGV4OiAxO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uZm9vdGVyIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGJvcmRlci10b3A6IHZhcigtLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5jZW50ZXJlZCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn0iXX0= */";
93
+ var styles$1 = {"overlay":"Modal-module_overlay__dd9h1","modal":"Modal-module_modal__aD7aP","small":"Modal-module_small__Xlbt5","medium":"Modal-module_medium__OnN1W","large":"Modal-module_large__p-8Oq","fullscreen":"Modal-module_fullscreen__o84Xi","header":"Modal-module_header__ILG9i","title":"Modal-module_title__A5OeE","closeButton":"Modal-module_closeButton__3LpSf","body":"Modal-module_body__lVhql","footer":"Modal-module_footer__rro2w","centered":"Modal-module_centered__UfBxf"};
94
+ styleInject(css_248z$1);
95
+
96
+ const Modal = ({ isOpen, onClose, title, size = 'medium', centered = false, closeOnOverlay = true, closeOnEsc = true, showCloseButton = true, header, footer, children, className = '', overlayClassName = '', }) => {
97
+ useEffect(() => {
98
+ const handleEsc = (event) => {
99
+ if (closeOnEsc && event.key === 'Escape') {
100
+ onClose();
101
+ }
102
+ };
103
+ if (isOpen) {
104
+ document.addEventListener('keydown', handleEsc);
105
+ document.body.style.overflow = 'hidden';
106
+ }
107
+ return () => {
108
+ document.removeEventListener('keydown', handleEsc);
109
+ document.body.style.overflow = '';
110
+ };
111
+ }, [isOpen, onClose, closeOnEsc]);
112
+ const handleOverlayClick = (e) => {
113
+ if (closeOnOverlay && e.target === e.currentTarget) {
114
+ onClose();
115
+ }
116
+ };
117
+ const modalClasses = [
118
+ styles$1.modal,
119
+ styles$1[size],
120
+ centered && styles$1.centered,
121
+ className
122
+ ].filter(Boolean).join(' ');
123
+ const overlayClasses = [
124
+ styles$1.overlay,
125
+ overlayClassName
126
+ ].filter(Boolean).join(' ');
127
+ const modalContent = (jsx(AnimatePresence, { children: isOpen && (jsx(motion.div, { className: overlayClasses, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2 }, onClick: handleOverlayClick, children: jsxs(motion.div, { className: modalClasses, initial: { scale: 0.9, opacity: 0 }, animate: { scale: 1, opacity: 1 }, exit: { scale: 0.9, opacity: 0 }, transition: { type: "spring", damping: 25, stiffness: 300 }, onClick: (e) => e.stopPropagation(), children: [(header || title || showCloseButton) && (jsxs("div", { className: styles$1.header, children: [header || (title && jsx("h2", { className: styles$1.title, children: title })), showCloseButton && (jsx("button", { className: styles$1.closeButton, onClick: onClose, "aria-label": "Close modal", children: "\u2715" }))] })), children && jsx("div", { className: styles$1.body, children: children }), footer && jsx("div", { className: styles$1.footer, children: footer })] }) })) }));
128
+ if (typeof document !== 'undefined') {
129
+ return createPortal(modalContent, document.body);
130
+ }
131
+ return null;
132
+ };
133
+
134
+ var css_248z = ".Input-module_container__zLqel{display:flex;flex-direction:column;gap:var(--spacing-xs)}.Input-module_label__-OEBL{color:var(--color-text);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.Input-module_required__CTss-{color:var(--color-danger);margin-left:var(--spacing-xs)}.Input-module_inputWrapper__FIVsA{align-items:center;display:flex;position:relative}.Input-module_input__WjT81{background-color:var(--color-background);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius-md);color:var(--color-text);font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:1.5;outline:none;padding:var(--spacing-sm) var(--spacing-md);transition:all var(--transition-fast);width:100%}.Input-module_input__WjT81:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb,0,123,255),.1)}.Input-module_input__WjT81:disabled{background-color:var(--color-surface);cursor:not-allowed;opacity:.6}.Input-module_input__WjT81::placeholder{color:var(--color-text-secondary)}.Input-module_textarea__Wv63H{min-height:100px;resize:vertical}.Input-module_small__64a4F{font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-sm)}.Input-module_large__g7SQh{font-size:var(--font-size-lg);padding:var(--spacing-md) var(--spacing-lg)}.Input-module_error__VLISa{border-color:var(--color-danger)}.Input-module_error__VLISa:focus{box-shadow:0 0 0 3px rgba(220,53,69,.1)}.Input-module_success__EzYG6{border-color:var(--color-success)}.Input-module_success__EzYG6:focus{box-shadow:0 0 0 3px rgba(40,167,69,.1)}.Input-module_errorMessage__rP4NL{color:var(--color-danger);font-size:var(--font-size-sm);margin-top:var(--spacing-xs)}.Input-module_helperText__9eFmv{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin-top:var(--spacing-xs)}.Input-module_icon__IeMcF{align-items:center;color:var(--color-text-secondary);display:flex;justify-content:center;position:absolute}.Input-module_iconLeft__KrUhI{left:var(--spacing-md)}.Input-module_iconRight__Ssr47{right:var(--spacing-md)}.Input-module_withIconLeft__WfJgY{padding-left:calc(var(--spacing-xl) + var(--spacing-sm))}.Input-module_withIconRight__N8jm1{padding-right:calc(var(--spacing-xl) + var(--spacing-sm))}.Input-module_fullWidth__kWTRr{width:100%}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklucHV0Lm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQ0UsWUFBYSxDQUNiLHFCQUFzQixDQUN0QixxQkFDRixDQUVBLDJCQUdFLHVCQUF3QixDQUZ4Qiw2QkFBOEIsQ0FDOUIscUNBRUYsQ0FFQSw4QkFDRSx5QkFBMEIsQ0FDMUIsNkJBQ0YsQ0FFQSxrQ0FHRSxrQkFBbUIsQ0FEbkIsWUFBYSxDQURiLGlCQUdGLENBRUEsMkJBT0Usd0NBQXlDLENBQ3pDLG9EQUFxRCxDQUNyRCxxQ0FBc0MsQ0FIdEMsdUJBQXdCLENBSHhCLG1DQUFvQyxDQUNwQywrQkFBZ0MsQ0FDaEMsZUFBZ0IsQ0FLaEIsWUFBYSxDQVJiLDJDQUE0QyxDQVM1QyxxQ0FBc0MsQ0FWdEMsVUFXRixDQUVBLGlDQUNFLGlDQUFrQyxDQUNsQyxnRUFDRixDQUVBLG9DQUNFLHFDQUFzQyxDQUN0QyxrQkFBbUIsQ0FDbkIsVUFDRixDQUVBLHdDQUNFLGlDQUNGLENBRUEsOEJBQ0UsZ0JBQWlCLENBQ2pCLGVBQ0YsQ0FFQSwyQkFFRSw2QkFBOEIsQ0FEOUIsMkNBRUYsQ0FFQSwyQkFFRSw2QkFBOEIsQ0FEOUIsMkNBRUYsQ0FFQSwyQkFDRSxnQ0FDRixDQUVBLGlDQUNFLHVDQUNGLENBRUEsNkJBQ0UsaUNBQ0YsQ0FFQSxtQ0FDRSx1Q0FDRixDQUVBLGtDQUVFLHlCQUEwQixDQUQxQiw2QkFBOEIsQ0FFOUIsNEJBQ0YsQ0FFQSxnQ0FFRSxpQ0FBa0MsQ0FEbEMsNkJBQThCLENBRTlCLDRCQUNGLENBRUEsMEJBR0Usa0JBQW1CLENBRW5CLGlDQUFrQyxDQUhsQyxZQUFhLENBRWIsc0JBQXVCLENBSHZCLGlCQUtGLENBRUEsOEJBQ0Usc0JBQ0YsQ0FFQSwrQkFDRSx1QkFDRixDQUVBLGtDQUNFLHdEQUNGLENBRUEsbUNBQ0UseURBQ0YsQ0FFQSwrQkFDRSxVQUNGIiwiZmlsZSI6IklucHV0Lm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXhzKTtcbn1cblxuLmxhYmVsIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xufVxuXG4ucmVxdWlyZWQge1xuICBjb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmcteHMpO1xufVxuXG4uaW5wdXRXcmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uaW5wdXQge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy1tZCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1iYXNlKTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYmFzZSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLW1kKTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5pbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiLCAwLCAxMjMsIDI1NSksIDAuMSk7XG59XG5cbi5pbnB1dDpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBvcGFjaXR5OiAwLjY7XG59XG5cbi5pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4udGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbn1cblxuLnNtYWxsIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14cykgdmFyKC0tc3BhY2luZy1zbSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbn1cblxuLmxhcmdlIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZCkgdmFyKC0tc3BhY2luZy1sZyk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbn1cblxuLmVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1kYW5nZXIpO1xufVxuXG4uZXJyb3I6Zm9jdXMge1xuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMjAsIDUzLCA2OSwgMC4xKTtcbn1cblxuLnN1Y2Nlc3Mge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXN1Y2Nlc3MpO1xufVxuXG4uc3VjY2Vzczpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDQwLCAxNjcsIDY5LCAwLjEpO1xufVxuXG4uZXJyb3JNZXNzYWdlIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBjb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy14cyk7XG59XG5cbi5oZWxwZXJUZXh0IHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXhzKTtcbn1cblxuLmljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4uaWNvbkxlZnQge1xuICBsZWZ0OiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLmljb25SaWdodCB7XG4gIHJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLndpdGhJY29uTGVmdCB7XG4gIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1zcGFjaW5nLXhsKSArIHZhcigtLXNwYWNpbmctc20pKTtcbn1cblxuLndpdGhJY29uUmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKHZhcigtLXNwYWNpbmcteGwpICsgdmFyKC0tc3BhY2luZy1zbSkpO1xufVxuXG4uZnVsbFdpZHRoIHtcbiAgd2lkdGg6IDEwMCU7XG59Il19 */";
135
+ var styles = {"container":"Input-module_container__zLqel","label":"Input-module_label__-OEBL","required":"Input-module_required__CTss-","inputWrapper":"Input-module_inputWrapper__FIVsA","input":"Input-module_input__WjT81","textarea":"Input-module_textarea__Wv63H","small":"Input-module_small__64a4F","large":"Input-module_large__g7SQh","error":"Input-module_error__VLISa","success":"Input-module_success__EzYG6","errorMessage":"Input-module_errorMessage__rP4NL","helperText":"Input-module_helperText__9eFmv","icon":"Input-module_icon__IeMcF","iconLeft":"Input-module_iconLeft__KrUhI","iconRight":"Input-module_iconRight__Ssr47","withIconLeft":"Input-module_withIconLeft__WfJgY","withIconRight":"Input-module_withIconRight__N8jm1","fullWidth":"Input-module_fullWidth__kWTRr"};
136
+ styleInject(css_248z);
137
+
138
+ const Input = forwardRef(({ label, error, helperText, required = false, fullWidth = false, size = 'medium', variant = 'default', iconLeft, iconRight, multiline = false, rows = 3, className = '', id, ...rest }, ref) => {
139
+ const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;
140
+ const inputClasses = [
141
+ styles.input,
142
+ size !== 'medium' && styles[size],
143
+ error && styles.error,
144
+ variant === 'error' && styles.error,
145
+ variant === 'success' && styles.success,
146
+ multiline && styles.textarea,
147
+ iconLeft && styles.withIconLeft,
148
+ iconRight && styles.withIconRight,
149
+ className
150
+ ].filter(Boolean).join(' ');
151
+ const containerClasses = [
152
+ styles.container,
153
+ fullWidth && styles.fullWidth
154
+ ].filter(Boolean).join(' ');
155
+ const inputElement = multiline ? (jsx("textarea", { ref: ref, id: inputId, className: inputClasses, rows: rows, "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined, ...rest })) : (jsx("input", { ref: ref, id: inputId, className: inputClasses, "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined, ...rest }));
156
+ return (jsxs("div", { className: containerClasses, children: [label && (jsxs("label", { htmlFor: inputId, className: styles.label, children: [label, required && jsx("span", { className: styles.required, children: "*" })] })), jsxs(motion.div, { className: styles.inputWrapper, whileFocus: { scale: 1.01 }, transition: { type: "spring", stiffness: 400, damping: 17 }, children: [iconLeft && jsx("span", { className: `${styles.icon} ${styles.iconLeft}`, children: iconLeft }), inputElement, iconRight && jsx("span", { className: `${styles.icon} ${styles.iconRight}`, children: iconRight })] }), error && (jsx(motion.span, { id: `${inputId}-error`, className: styles.errorMessage, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.2 }, children: error })), helperText && !error && (jsx("span", { id: `${inputId}-helper`, className: styles.helperText, children: helperText }))] }));
157
+ });
158
+
159
+ export { Button, Card, Input, Modal, ThemeProvider, useTheme };
160
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/contexts/ThemeContext.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Modal/Modal.tsx","../src/components/Input/Input.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';\n\ntype Theme = 'light' | 'dark';\n\ninterface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ \n children, \n defaultTheme = 'light' \n}) => {\n const [theme, setTheme] = useState<Theme>(defaultTheme);\n\n useEffect(() => {\n const savedTheme = localStorage.getItem('theme') as Theme | null;\n if (savedTheme) {\n setTheme(savedTheme);\n }\n }, []);\n\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', theme);\n localStorage.setItem('theme', theme);\n }, [theme]);\n\n const toggleTheme = () => {\n setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');\n };\n\n return (\n <ThemeContext.Provider value={{ theme, toggleTheme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};","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 React, { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './Button.module.css';\n\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost';\n size?: 'small' | 'medium' | 'large';\n fullWidth?: boolean;\n loading?: boolean;\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n children?: ReactNode;\n motionProps?: HTMLMotionProps<\"button\">;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'medium',\n fullWidth = false,\n loading = false,\n iconLeft,\n iconRight,\n children,\n className = '',\n disabled,\n motionProps,\n ...rest\n}) => {\n const buttonClasses = [\n styles.button,\n styles[variant],\n styles[size],\n fullWidth && styles.fullWidth,\n loading && styles.loading,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <motion.button\n className={buttonClasses}\n disabled={disabled || loading}\n whileHover={{ scale: disabled || loading ? 1 : 1.02 }}\n whileTap={{ scale: disabled || loading ? 1 : 0.98 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n {...motionProps}\n {...rest}\n >\n {loading && <span className={styles.spinner} />}\n {iconLeft && <span className={styles.iconLeft}>{iconLeft}</span>}\n {children}\n {iconRight && <span className={styles.iconRight}>{iconRight}</span>}\n </motion.button>\n );\n};","import React, { HTMLAttributes, ReactNode } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './Card.module.css';\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n variant?: 'elevated' | 'outlined' | 'flat';\n hoverable?: boolean;\n clickable?: boolean;\n padding?: boolean;\n image?: string;\n imageAlt?: string;\n title?: string;\n subtitle?: string;\n header?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n motionProps?: HTMLMotionProps<\"div\">;\n}\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'elevated',\n hoverable = false,\n clickable = false,\n padding = true,\n image,\n imageAlt = '',\n title,\n subtitle,\n header,\n footer,\n children,\n className = '',\n onClick,\n motionProps,\n ...rest\n}) => {\n const cardClasses = [\n styles.card,\n styles[variant],\n hoverable && styles.hoverable,\n clickable && styles.clickable,\n !padding && styles.noPadding,\n className\n ].filter(Boolean).join(' ');\n\n const cardContent = (\n <>\n {image && (\n <div className={styles.imageContainer}>\n <img src={image} alt={imageAlt} className={styles.image} />\n </div>\n )}\n {header && <div className={styles.header}>{header}</div>}\n {(title || subtitle) && !header && (\n <div className={styles.header}>\n {title && <h3 className={styles.title}>{title}</h3>}\n {subtitle && <p className={styles.subtitle}>{subtitle}</p>}\n </div>\n )}\n {children && (\n <div className={padding ? styles.body : undefined}>\n {children}\n </div>\n )}\n {footer && <div className={styles.footer}>{footer}</div>}\n </>\n );\n\n return (\n <motion.div\n className={cardClasses}\n onClick={clickable ? onClick : undefined}\n whileHover={hoverable ? { y: -4 } : undefined}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n {...motionProps}\n {...rest}\n >\n {cardContent}\n </motion.div>\n );\n};","import React, { ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport styles from './Modal.module.css';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n size?: 'small' | 'medium' | 'large' | 'fullscreen';\n centered?: boolean;\n closeOnOverlay?: boolean;\n closeOnEsc?: boolean;\n showCloseButton?: boolean;\n header?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n className?: string;\n overlayClassName?: string;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n size = 'medium',\n centered = false,\n closeOnOverlay = true,\n closeOnEsc = true,\n showCloseButton = true,\n header,\n footer,\n children,\n className = '',\n overlayClassName = '',\n}) => {\n useEffect(() => {\n const handleEsc = (event: KeyboardEvent) => {\n if (closeOnEsc && event.key === 'Escape') {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEsc);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEsc);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose, closeOnEsc]);\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlay && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n const modalClasses = [\n styles.modal,\n styles[size],\n centered && styles.centered,\n className\n ].filter(Boolean).join(' ');\n\n const overlayClasses = [\n styles.overlay,\n overlayClassName\n ].filter(Boolean).join(' ');\n\n const modalContent = (\n <AnimatePresence>\n {isOpen && (\n <motion.div\n className={overlayClasses}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={handleOverlayClick}\n >\n <motion.div\n className={modalClasses}\n initial={{ scale: 0.9, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.9, opacity: 0 }}\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\n onClick={(e) => e.stopPropagation()}\n >\n {(header || title || showCloseButton) && (\n <div className={styles.header}>\n {header || (title && <h2 className={styles.title}>{title}</h2>)}\n {showCloseButton && (\n <button\n className={styles.closeButton}\n onClick={onClose}\n aria-label=\"Close modal\"\n >\n ✕\n </button>\n )}\n </div>\n )}\n {children && <div className={styles.body}>{children}</div>}\n {footer && <div className={styles.footer}>{footer}</div>}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n\n if (typeof document !== 'undefined') {\n return createPortal(modalContent, document.body);\n }\n\n return null;\n};","import React, { InputHTMLAttributes, TextareaHTMLAttributes, ReactNode, forwardRef } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Input.module.css';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement> & TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n label?: string;\n error?: string;\n helperText?: string;\n required?: boolean;\n fullWidth?: boolean;\n size?: 'small' | 'medium' | 'large';\n variant?: 'default' | 'error' | 'success';\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n multiline?: boolean;\n rows?: number;\n}\n\nexport const Input = forwardRef<HTMLInputElement | HTMLTextAreaElement, InputProps>(({\n label,\n error,\n helperText,\n required = false,\n fullWidth = false,\n size = 'medium',\n variant = 'default',\n iconLeft,\n iconRight,\n multiline = false,\n rows = 3,\n className = '',\n id,\n ...rest\n}, ref) => {\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\n \n const inputClasses = [\n styles.input,\n size !== 'medium' && styles[size],\n error && styles.error,\n variant === 'error' && styles.error,\n variant === 'success' && styles.success,\n multiline && styles.textarea,\n iconLeft && styles.withIconLeft,\n iconRight && styles.withIconRight,\n className\n ].filter(Boolean).join(' ');\n\n const containerClasses = [\n styles.container,\n fullWidth && styles.fullWidth\n ].filter(Boolean).join(' ');\n\n const inputElement = multiline ? (\n <textarea\n ref={ref as React.Ref<HTMLTextAreaElement>}\n id={inputId}\n className={inputClasses}\n rows={rows}\n aria-invalid={!!error}\n aria-describedby={error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined}\n {...(rest as TextareaHTMLAttributes<HTMLTextAreaElement>)}\n />\n ) : (\n <input\n ref={ref as React.Ref<HTMLInputElement>}\n id={inputId}\n className={inputClasses}\n aria-invalid={!!error}\n aria-describedby={error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined}\n {...(rest as InputHTMLAttributes<HTMLInputElement>)}\n />\n );\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <motion.div \n className={styles.inputWrapper}\n whileFocus={{ scale: 1.01 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n >\n {iconLeft && <span className={`${styles.icon} ${styles.iconLeft}`}>{iconLeft}</span>}\n {inputElement}\n {iconRight && <span className={`${styles.icon} ${styles.iconRight}`}>{iconRight}</span>}\n </motion.div>\n {error && (\n <motion.span\n id={`${inputId}-error`}\n className={styles.errorMessage}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n >\n {error}\n </motion.span>\n )}\n {helperText && !error && (\n <span id={`${inputId}-helper`} className={styles.helperText}>\n {helperText}\n </span>\n )}\n </div>\n );\n});"],"names":["_jsx","styles","_jsxs","_Fragment"],"mappings":"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","x_google_ignoreList":[1]}
package/dist/index.js ADDED
@@ -0,0 +1,167 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var framerMotion = require('framer-motion');
6
+ var reactDom = require('react-dom');
7
+
8
+ const ThemeContext = react.createContext(undefined);
9
+ const useTheme = () => {
10
+ const context = react.useContext(ThemeContext);
11
+ if (!context) {
12
+ throw new Error('useTheme must be used within a ThemeProvider');
13
+ }
14
+ return context;
15
+ };
16
+ const ThemeProvider = ({ children, defaultTheme = 'light' }) => {
17
+ const [theme, setTheme] = react.useState(defaultTheme);
18
+ react.useEffect(() => {
19
+ const savedTheme = localStorage.getItem('theme');
20
+ if (savedTheme) {
21
+ setTheme(savedTheme);
22
+ }
23
+ }, []);
24
+ react.useEffect(() => {
25
+ document.documentElement.setAttribute('data-theme', theme);
26
+ localStorage.setItem('theme', theme);
27
+ }, [theme]);
28
+ const toggleTheme = () => {
29
+ setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');
30
+ };
31
+ return (jsxRuntime.jsx(ThemeContext.Provider, { value: { theme, toggleTheme, setTheme }, children: children }));
32
+ };
33
+
34
+ function styleInject(css, ref) {
35
+ if ( ref === void 0 ) ref = {};
36
+ var insertAt = ref.insertAt;
37
+
38
+ if (!css || typeof document === 'undefined') { return; }
39
+
40
+ var head = document.head || document.getElementsByTagName('head')[0];
41
+ var style = document.createElement('style');
42
+ style.type = 'text/css';
43
+
44
+ if (insertAt === 'top') {
45
+ if (head.firstChild) {
46
+ head.insertBefore(style, head.firstChild);
47
+ } else {
48
+ head.appendChild(style);
49
+ }
50
+ } else {
51
+ head.appendChild(style);
52
+ }
53
+
54
+ if (style.styleSheet) {
55
+ style.styleSheet.cssText = css;
56
+ } else {
57
+ style.appendChild(document.createTextNode(css));
58
+ }
59
+ }
60
+
61
+ var css_248z$3 = ".Button-module_button__2ZuB7{align-items:center;border:var(--border-width) solid transparent;border-radius:var(--border-radius-md);cursor:pointer;display:inline-flex;font-family:var(--font-family-base);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:var(--spacing-sm) var(--spacing-lg);position:relative;transition:all var(--transition-fast);user-select:none}.Button-module_button__2ZuB7:focus-visible{box-shadow:0 0 0 3px rgba(var(--color-primary-rgb,0,123,255),.25)}.Button-module_button__2ZuB7:disabled{cursor:not-allowed;opacity:.5}.Button-module_primary__s1sM6{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.Button-module_primary__s1sM6:hover:not(:disabled){filter:brightness(1.1)}.Button-module_secondary__R0waJ{background-color:var(--color-secondary);border-color:var(--color-secondary);color:#fff}.Button-module_secondary__R0waJ:hover:not(:disabled){filter:brightness(1.1)}.Button-module_outline__F5jq-{background-color:transparent;border-color:var(--color-primary);color:var(--color-primary)}.Button-module_outline__F5jq-:hover:not(:disabled){background-color:var(--color-primary);color:#fff}.Button-module_ghost__1KINV{background-color:transparent;border-color:transparent;color:var(--color-text)}.Button-module_ghost__1KINV:hover:not(:disabled){background-color:var(--color-surface)}.Button-module_small__l39oh{font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-md)}.Button-module_medium__KTxdk{font-size:var(--font-size-base);padding:var(--spacing-sm) var(--spacing-lg)}.Button-module_large__6bsb7{font-size:var(--font-size-lg);padding:var(--spacing-md) var(--spacing-xl)}.Button-module_fullWidth__36oJT{width:100%}.Button-module_loading__EQAt2{color:transparent}.Button-module_spinner__ZExvW{animation:Button-module_spin__JvkZu .6s linear infinite;border:2px solid;border-radius:50%;border-right:2px solid transparent;height:1em;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:1em}@keyframes Button-module_spin__JvkZu{to{transform:translate(-50%,-50%) rotate(1turn)}}.Button-module_iconLeft__YwUkN{margin-right:var(--spacing-sm)}.Button-module_iconRight__J7Lff{margin-left:var(--spacing-sm)}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1dHRvbi5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUdFLGtCQUFtQixDQU9uQiw0Q0FBNkMsQ0FDN0MscUNBQXNDLENBQ3RDLGNBQWUsQ0FWZixtQkFBb0IsQ0FJcEIsbUNBQW9DLENBQ3BDLCtCQUFnQyxDQUNoQyxxQ0FBc0MsQ0FKdEMsc0JBQXVCLENBS3ZCLGVBQWdCLENBS2hCLFlBQWEsQ0FDYixlQUFnQixDQVZoQiwyQ0FBNEMsQ0FKNUMsaUJBQWtCLENBWWxCLHFDQUFzQyxDQUd0QyxnQkFDRixDQUVBLDJDQUNFLGlFQUNGLENBRUEsc0NBRUUsa0JBQW1CLENBRG5CLFVBRUYsQ0FHQSw4QkFDRSxxQ0FBc0MsQ0FFdEMsaUNBQWtDLENBRGxDLFVBRUYsQ0FFQSxtREFDRSxzQkFDRixDQUVBLGdDQUNFLHVDQUF3QyxDQUV4QyxtQ0FBb0MsQ0FEcEMsVUFFRixDQUVBLHFEQUNFLHNCQUNGLENBRUEsOEJBQ0UsNEJBQTZCLENBRTdCLGlDQUFrQyxDQURsQywwQkFFRixDQUVBLG1EQUNFLHFDQUFzQyxDQUN0QyxVQUNGLENBRUEsNEJBQ0UsNEJBQTZCLENBRTdCLHdCQUF5QixDQUR6Qix1QkFFRixDQUVBLGlEQUNFLHFDQUNGLENBR0EsNEJBRUUsNkJBQThCLENBRDlCLDJDQUVGLENBRUEsNkJBRUUsK0JBQWdDLENBRGhDLDJDQUVGLENBRUEsNEJBRUUsNkJBQThCLENBRDlCLDJDQUVGLENBR0EsZ0NBQ0UsVUFDRixDQUdBLDhCQUNFLGlCQUNGLENBRUEsOEJBVUUsdURBQW9DLENBRnBDLGdCQUErQixDQUMvQixpQkFBa0IsQ0FEbEIsa0NBQStCLENBRi9CLFVBQVcsQ0FIWCxRQUFTLENBRlQsaUJBQWtCLENBQ2xCLE9BQVEsQ0FFUiw4QkFBZ0MsQ0FDaEMsU0FNRixDQUVBLHFDQUNFLEdBQ0UsNENBQ0YsQ0FDRixDQUdBLCtCQUNFLDhCQUNGLENBRUEsZ0NBQ0UsNkJBQ0YiLCJmaWxlIjoiQnV0dG9uLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbGcpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktYmFzZSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJhc2UpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyOiB2YXIoLS1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLW1kKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1mYXN0KTtcbiAgb3V0bGluZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5idXR0b246Zm9jdXMtdmlzaWJsZSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiLCAwLCAxMjMsIDI1NSksIDAuMjUpO1xufVxuXG4uYnV0dG9uOmRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4vKiBWYXJpYW50cyAqL1xuLnByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4ucHJpbWFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGZpbHRlcjogYnJpZ2h0bmVzcygxLjEpO1xufVxuXG4uc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG59XG5cbi5zZWNvbmRhcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4xKTtcbn1cblxuLm91dGxpbmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xufVxuXG4ub3V0bGluZTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi5naG9zdCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xufVxuXG4vKiBTaXplcyAqL1xuLnNtYWxsIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14cykgdmFyKC0tc3BhY2luZy1tZCk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbn1cblxuLm1lZGl1bSB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc20pIHZhcigtLXNwYWNpbmctbGcpO1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbn1cblxuLmxhcmdlIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZCkgdmFyKC0tc3BhY2luZy14bCk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbn1cblxuLyogRnVsbCB3aWR0aCAqL1xuLmZ1bGxXaWR0aCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vKiBMb2FkaW5nIHN0YXRlICovXG4ubG9hZGluZyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnNwaW5uZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgYm9yZGVyOiAycHggc29saWQgY3VycmVudENvbG9yO1xuICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogc3BpbiAwLjZzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBzcGluIHtcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi8qIEljb24gc3BhY2luZyAqL1xuLmljb25MZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcGFjaW5nLXNtKTtcbn1cblxuLmljb25SaWdodCB7XG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zcGFjaW5nLXNtKTtcbn0iXX0= */";
62
+ var styles$3 = {"button":"Button-module_button__2ZuB7","primary":"Button-module_primary__s1sM6","secondary":"Button-module_secondary__R0waJ","outline":"Button-module_outline__F5jq-","ghost":"Button-module_ghost__1KINV","small":"Button-module_small__l39oh","medium":"Button-module_medium__KTxdk","large":"Button-module_large__6bsb7","fullWidth":"Button-module_fullWidth__36oJT","loading":"Button-module_loading__EQAt2","spinner":"Button-module_spinner__ZExvW","spin":"Button-module_spin__JvkZu","iconLeft":"Button-module_iconLeft__YwUkN","iconRight":"Button-module_iconRight__J7Lff"};
63
+ styleInject(css_248z$3);
64
+
65
+ const Button = ({ variant = 'primary', size = 'medium', fullWidth = false, loading = false, iconLeft, iconRight, children, className = '', disabled, motionProps, ...rest }) => {
66
+ const buttonClasses = [
67
+ styles$3.button,
68
+ styles$3[variant],
69
+ styles$3[size],
70
+ fullWidth && styles$3.fullWidth,
71
+ loading && styles$3.loading,
72
+ className
73
+ ].filter(Boolean).join(' ');
74
+ return (jsxRuntime.jsxs(framerMotion.motion.button, { className: buttonClasses, disabled: disabled || loading, whileHover: { scale: disabled || loading ? 1 : 1.02 }, whileTap: { scale: disabled || loading ? 1 : 0.98 }, transition: { type: "spring", stiffness: 400, damping: 17 }, ...motionProps, ...rest, children: [loading && jsxRuntime.jsx("span", { className: styles$3.spinner }), iconLeft && jsxRuntime.jsx("span", { className: styles$3.iconLeft, children: iconLeft }), children, iconRight && jsxRuntime.jsx("span", { className: styles$3.iconRight, children: iconRight })] }));
75
+ };
76
+
77
+ var css_248z$2 = ".Card-module_card__Cb1o4{background-color:var(--color-background);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius-lg);overflow:hidden;transition:all var(--transition-base)}.Card-module_card__Cb1o4:hover.Card-module_hoverable__aGYcW{box-shadow:var(--shadow-lg);transform:translateY(-2px)}.Card-module_elevated__5VEDw{box-shadow:var(--shadow-md)}.Card-module_elevated__5VEDw:hover.Card-module_hoverable__aGYcW{box-shadow:var(--shadow-xl)}.Card-module_outlined__Tkn0-{border-color:var(--border-color);box-shadow:none}.Card-module_flat__LRpce{background-color:var(--color-surface);border:none;box-shadow:none}.Card-module_image__bEGMz{display:block;height:auto;width:100%}.Card-module_imageContainer__aBzxr{overflow:hidden;position:relative}.Card-module_header__PTXf2{border-bottom:var(--border-width) solid var(--border-color);padding:var(--spacing-lg)}.Card-module_body__W441Z{padding:var(--spacing-lg)}.Card-module_footer__Mu-JC{align-items:center;border-top:var(--border-width) solid var(--border-color);display:flex;gap:var(--spacing-sm);justify-content:flex-end;padding:var(--spacing-lg)}.Card-module_title__mSgoo{color:var(--color-text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.Card-module_subtitle__dBqgy{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin:var(--spacing-xs) 0 0}.Card-module_clickable__qbwhm{cursor:pointer}.Card-module_padding__o07TN{padding:var(--spacing-lg)}.Card-module_noPadding__jt3Vd{padding:0}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhcmQubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5QkFDRSx3Q0FBeUMsQ0FDekMsb0RBQXFELENBQ3JELHFDQUFzQyxDQUN0QyxlQUFnQixDQUNoQixxQ0FDRixDQUVBLDREQUVFLDJCQUE0QixDQUQ1QiwwQkFFRixDQUVBLDZCQUNFLDJCQUNGLENBRUEsZ0VBQ0UsMkJBQ0YsQ0FFQSw2QkFDRSxnQ0FBaUMsQ0FDakMsZUFDRixDQUVBLHlCQUdFLHFDQUFzQyxDQUZ0QyxXQUFZLENBQ1osZUFFRixDQUVBLDBCQUdFLGFBQWMsQ0FEZCxXQUFZLENBRFosVUFHRixDQUVBLG1DQUVFLGVBQWdCLENBRGhCLGlCQUVGLENBRUEsMkJBRUUsMkRBQTRELENBRDVELHlCQUVGLENBRUEseUJBQ0UseUJBQ0YsQ0FFQSwyQkFJRSxrQkFBbUIsQ0FGbkIsd0RBQXlELENBQ3pELFlBQWEsQ0FHYixxQkFBc0IsQ0FEdEIsd0JBQXlCLENBSnpCLHlCQU1GLENBRUEsMEJBSUUsdUJBQXdCLENBRnhCLDZCQUE4QixDQUM5Qix1Q0FBd0MsQ0FGeEMsUUFJRixDQUVBLDZCQUdFLGlDQUFrQyxDQURsQyw2QkFBOEIsQ0FEOUIsNEJBR0YsQ0FFQSw4QkFDRSxjQUNGLENBRUEsNEJBQ0UseUJBQ0YsQ0FFQSw4QkFDRSxTQUNGIiwiZmlsZSI6IkNhcmQubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jYXJkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tYmFzZSk7XG59XG5cbi5jYXJkOmhvdmVyLmhvdmVyYWJsZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcbn1cblxuLmVsZXZhdGVkIHtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1kKTtcbn1cblxuLmVsZXZhdGVkOmhvdmVyLmhvdmVyYWJsZSB7XG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy14bCk7XG59XG5cbi5vdXRsaW5lZCB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLmZsYXQge1xuICBib3JkZXI6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xufVxuXG4uaW1hZ2Uge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmltYWdlQ29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uaGVhZGVyIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcbn1cblxuLmJvZHkge1xuICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLWxnKTtcbn1cblxuLmZvb3RlciB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpO1xuICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIGdhcDogdmFyKC0tc3BhY2luZy1zbSk7XG59XG5cbi50aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG59XG5cbi5zdWJ0aXRsZSB7XG4gIG1hcmdpbjogdmFyKC0tc3BhY2luZy14cykgMCAwO1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG59XG5cbi5jbGlja2FibGUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wYWRkaW5nIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG59XG5cbi5ub1BhZGRpbmcge1xuICBwYWRkaW5nOiAwO1xufSJdfQ== */";
78
+ var styles$2 = {"card":"Card-module_card__Cb1o4","hoverable":"Card-module_hoverable__aGYcW","elevated":"Card-module_elevated__5VEDw","outlined":"Card-module_outlined__Tkn0-","flat":"Card-module_flat__LRpce","image":"Card-module_image__bEGMz","imageContainer":"Card-module_imageContainer__aBzxr","header":"Card-module_header__PTXf2","body":"Card-module_body__W441Z","footer":"Card-module_footer__Mu-JC","title":"Card-module_title__mSgoo","subtitle":"Card-module_subtitle__dBqgy","clickable":"Card-module_clickable__qbwhm","padding":"Card-module_padding__o07TN","noPadding":"Card-module_noPadding__jt3Vd"};
79
+ styleInject(css_248z$2);
80
+
81
+ const Card = ({ variant = 'elevated', hoverable = false, clickable = false, padding = true, image, imageAlt = '', title, subtitle, header, footer, children, className = '', onClick, motionProps, ...rest }) => {
82
+ const cardClasses = [
83
+ styles$2.card,
84
+ styles$2[variant],
85
+ hoverable && styles$2.hoverable,
86
+ clickable && styles$2.clickable,
87
+ !padding && styles$2.noPadding,
88
+ className
89
+ ].filter(Boolean).join(' ');
90
+ const cardContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [image && (jsxRuntime.jsx("div", { className: styles$2.imageContainer, children: jsxRuntime.jsx("img", { src: image, alt: imageAlt, className: styles$2.image }) })), header && jsxRuntime.jsx("div", { className: styles$2.header, children: header }), (title || subtitle) && !header && (jsxRuntime.jsxs("div", { className: styles$2.header, children: [title && jsxRuntime.jsx("h3", { className: styles$2.title, children: title }), subtitle && jsxRuntime.jsx("p", { className: styles$2.subtitle, children: subtitle })] })), children && (jsxRuntime.jsx("div", { className: padding ? styles$2.body : undefined, children: children })), footer && jsxRuntime.jsx("div", { className: styles$2.footer, children: footer })] }));
91
+ return (jsxRuntime.jsx(framerMotion.motion.div, { className: cardClasses, onClick: clickable ? onClick : undefined, whileHover: hoverable ? { y: -4 } : undefined, transition: { type: "spring", stiffness: 400, damping: 17 }, ...motionProps, ...rest, children: cardContent }));
92
+ };
93
+
94
+ var css_248z$1 = ".Modal-module_overlay__dd9h1{align-items:center;background-color:rgba(0,0,0,.5);bottom:0;display:flex;justify-content:center;left:0;padding:var(--spacing-lg);position:fixed;right:0;top:0;z-index:var(--z-index-modal-backdrop)}.Modal-module_modal__aD7aP{background-color:var(--color-background);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;max-height:90vh;max-width:90vw;overflow:auto;position:relative;z-index:var(--z-index-modal)}.Modal-module_small__Xlbt5{width:400px}.Modal-module_medium__OnN1W{width:600px}.Modal-module_large__p-8Oq{width:800px}.Modal-module_fullscreen__o84Xi{border-radius:0;height:100vh;max-height:100vh;max-width:100vw;width:100vw}.Modal-module_header__ILG9i{align-items:center;border-bottom:var(--border-width) solid var(--border-color);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--spacing-lg)}.Modal-module_title__A5OeE{color:var(--color-text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.Modal-module_closeButton__3LpSf{align-items:center;background:none;border:none;border-radius:var(--border-radius-md);color:var(--color-text-secondary);cursor:pointer;display:flex;font-size:var(--font-size-xl);justify-content:center;padding:var(--spacing-xs);transition:all var(--transition-fast)}.Modal-module_closeButton__3LpSf:hover{background-color:var(--color-surface);color:var(--color-text)}.Modal-module_body__lVhql{flex:1;overflow-y:auto;padding:var(--spacing-lg)}.Modal-module_footer__rro2w{align-items:center;border-top:var(--border-width) solid var(--border-color);display:flex;flex-shrink:0;gap:var(--spacing-sm);justify-content:flex-end;padding:var(--spacing-lg)}.Modal-module_centered__UfBxf{text-align:center}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1vZGFsLm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBUUUsa0JBQW1CLENBRm5CLCtCQUFvQyxDQURwQyxRQUFTLENBRVQsWUFBYSxDQUViLHNCQUF1QixDQU52QixNQUFPLENBUVAseUJBQTBCLENBVjFCLGNBQWUsQ0FHZixPQUFRLENBRlIsS0FBTSxDQVFOLHFDQUVGLENBRUEsMkJBQ0Usd0NBQXlDLENBQ3pDLHFDQUFzQyxDQUN0QywyQkFBNEIsQ0FNNUIsWUFBYSxDQUNiLHFCQUFzQixDQUx0QixlQUFnQixDQURoQixjQUFlLENBRWYsYUFBYyxDQUNkLGlCQUFrQixDQUNsQiw0QkFHRixDQUVBLDJCQUNFLFdBQ0YsQ0FFQSw0QkFDRSxXQUNGLENBRUEsMkJBQ0UsV0FDRixDQUVBLGdDQUtFLGVBQWdCLENBSGhCLFlBQWEsQ0FFYixnQkFBaUIsQ0FEakIsZUFBZ0IsQ0FGaEIsV0FLRixDQUVBLDRCQUlFLGtCQUFtQixDQUZuQiwyREFBNEQsQ0FDNUQsWUFBYSxDQUdiLGFBQWMsQ0FEZCw2QkFBOEIsQ0FKOUIseUJBTUYsQ0FFQSwyQkFJRSx1QkFBd0IsQ0FGeEIsNkJBQThCLENBQzlCLHVDQUF3QyxDQUZ4QyxRQUlGLENBRUEsaUNBUUUsa0JBQW1CLENBUG5CLGVBQWdCLENBQ2hCLFdBQVksQ0FRWixxQ0FBc0MsQ0FMdEMsaUNBQWtDLENBRGxDLGNBQWUsQ0FHZixZQUFhLENBSmIsNkJBQThCLENBTTlCLHNCQUF1QixDQUh2Qix5QkFBMEIsQ0FLMUIscUNBQ0YsQ0FFQSx1Q0FDRSxxQ0FBc0MsQ0FDdEMsdUJBQ0YsQ0FFQSwwQkFFRSxNQUFPLENBQ1AsZUFBZ0IsQ0FGaEIseUJBR0YsQ0FFQSw0QkFJRSxrQkFBbUIsQ0FGbkIsd0RBQXlELENBQ3pELFlBQWEsQ0FJYixhQUFjLENBRGQscUJBQXNCLENBRHRCLHdCQUF5QixDQUp6Qix5QkFPRixDQUVBLDhCQUNFLGlCQUNGIiwiZmlsZSI6Ik1vZGFsLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB6LWluZGV4OiB2YXIoLS16LWluZGV4LW1vZGFsLWJhY2tkcm9wKTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG59XG5cbi5tb2RhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXhsKTtcbiAgbWF4LXdpZHRoOiA5MHZ3O1xuICBtYXgtaGVpZ2h0OiA5MHZoO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiB2YXIoLS16LWluZGV4LW1vZGFsKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLnNtYWxsIHtcbiAgd2lkdGg6IDQwMHB4O1xufVxuXG4ubWVkaXVtIHtcbiAgd2lkdGg6IDYwMHB4O1xufVxuXG4ubGFyZ2Uge1xuICB3aWR0aDogODAwcHg7XG59XG5cbi5mdWxsc2NyZWVuIHtcbiAgd2lkdGg6IDEwMHZ3O1xuICBoZWlnaHQ6IDEwMHZoO1xuICBtYXgtd2lkdGg6IDEwMHZ3O1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmhlYWRlciB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpO1xuICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi50aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG59XG5cbi5jbG9zZUJ1dHRvbiB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHMpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1tZCk7XG4gIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWZhc3QpO1xufVxuXG4uY2xvc2VCdXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xufVxuXG4uYm9keSB7XG4gIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbGcpO1xuICBmbGV4OiAxO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uZm9vdGVyIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1sZyk7XG4gIGJvcmRlci10b3A6IHZhcigtLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXNtKTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5jZW50ZXJlZCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn0iXX0= */";
95
+ var styles$1 = {"overlay":"Modal-module_overlay__dd9h1","modal":"Modal-module_modal__aD7aP","small":"Modal-module_small__Xlbt5","medium":"Modal-module_medium__OnN1W","large":"Modal-module_large__p-8Oq","fullscreen":"Modal-module_fullscreen__o84Xi","header":"Modal-module_header__ILG9i","title":"Modal-module_title__A5OeE","closeButton":"Modal-module_closeButton__3LpSf","body":"Modal-module_body__lVhql","footer":"Modal-module_footer__rro2w","centered":"Modal-module_centered__UfBxf"};
96
+ styleInject(css_248z$1);
97
+
98
+ const Modal = ({ isOpen, onClose, title, size = 'medium', centered = false, closeOnOverlay = true, closeOnEsc = true, showCloseButton = true, header, footer, children, className = '', overlayClassName = '', }) => {
99
+ react.useEffect(() => {
100
+ const handleEsc = (event) => {
101
+ if (closeOnEsc && event.key === 'Escape') {
102
+ onClose();
103
+ }
104
+ };
105
+ if (isOpen) {
106
+ document.addEventListener('keydown', handleEsc);
107
+ document.body.style.overflow = 'hidden';
108
+ }
109
+ return () => {
110
+ document.removeEventListener('keydown', handleEsc);
111
+ document.body.style.overflow = '';
112
+ };
113
+ }, [isOpen, onClose, closeOnEsc]);
114
+ const handleOverlayClick = (e) => {
115
+ if (closeOnOverlay && e.target === e.currentTarget) {
116
+ onClose();
117
+ }
118
+ };
119
+ const modalClasses = [
120
+ styles$1.modal,
121
+ styles$1[size],
122
+ centered && styles$1.centered,
123
+ className
124
+ ].filter(Boolean).join(' ');
125
+ const overlayClasses = [
126
+ styles$1.overlay,
127
+ overlayClassName
128
+ ].filter(Boolean).join(' ');
129
+ const modalContent = (jsxRuntime.jsx(framerMotion.AnimatePresence, { children: isOpen && (jsxRuntime.jsx(framerMotion.motion.div, { className: overlayClasses, initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2 }, onClick: handleOverlayClick, children: jsxRuntime.jsxs(framerMotion.motion.div, { className: modalClasses, initial: { scale: 0.9, opacity: 0 }, animate: { scale: 1, opacity: 1 }, exit: { scale: 0.9, opacity: 0 }, transition: { type: "spring", damping: 25, stiffness: 300 }, onClick: (e) => e.stopPropagation(), children: [(header || title || showCloseButton) && (jsxRuntime.jsxs("div", { className: styles$1.header, children: [header || (title && jsxRuntime.jsx("h2", { className: styles$1.title, children: title })), showCloseButton && (jsxRuntime.jsx("button", { className: styles$1.closeButton, onClick: onClose, "aria-label": "Close modal", children: "\u2715" }))] })), children && jsxRuntime.jsx("div", { className: styles$1.body, children: children }), footer && jsxRuntime.jsx("div", { className: styles$1.footer, children: footer })] }) })) }));
130
+ if (typeof document !== 'undefined') {
131
+ return reactDom.createPortal(modalContent, document.body);
132
+ }
133
+ return null;
134
+ };
135
+
136
+ var css_248z = ".Input-module_container__zLqel{display:flex;flex-direction:column;gap:var(--spacing-xs)}.Input-module_label__-OEBL{color:var(--color-text);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.Input-module_required__CTss-{color:var(--color-danger);margin-left:var(--spacing-xs)}.Input-module_inputWrapper__FIVsA{align-items:center;display:flex;position:relative}.Input-module_input__WjT81{background-color:var(--color-background);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius-md);color:var(--color-text);font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:1.5;outline:none;padding:var(--spacing-sm) var(--spacing-md);transition:all var(--transition-fast);width:100%}.Input-module_input__WjT81:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb,0,123,255),.1)}.Input-module_input__WjT81:disabled{background-color:var(--color-surface);cursor:not-allowed;opacity:.6}.Input-module_input__WjT81::placeholder{color:var(--color-text-secondary)}.Input-module_textarea__Wv63H{min-height:100px;resize:vertical}.Input-module_small__64a4F{font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-sm)}.Input-module_large__g7SQh{font-size:var(--font-size-lg);padding:var(--spacing-md) var(--spacing-lg)}.Input-module_error__VLISa{border-color:var(--color-danger)}.Input-module_error__VLISa:focus{box-shadow:0 0 0 3px rgba(220,53,69,.1)}.Input-module_success__EzYG6{border-color:var(--color-success)}.Input-module_success__EzYG6:focus{box-shadow:0 0 0 3px rgba(40,167,69,.1)}.Input-module_errorMessage__rP4NL{color:var(--color-danger);font-size:var(--font-size-sm);margin-top:var(--spacing-xs)}.Input-module_helperText__9eFmv{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin-top:var(--spacing-xs)}.Input-module_icon__IeMcF{align-items:center;color:var(--color-text-secondary);display:flex;justify-content:center;position:absolute}.Input-module_iconLeft__KrUhI{left:var(--spacing-md)}.Input-module_iconRight__Ssr47{right:var(--spacing-md)}.Input-module_withIconLeft__WfJgY{padding-left:calc(var(--spacing-xl) + var(--spacing-sm))}.Input-module_withIconRight__N8jm1{padding-right:calc(var(--spacing-xl) + var(--spacing-sm))}.Input-module_fullWidth__kWTRr{width:100%}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklucHV0Lm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQ0UsWUFBYSxDQUNiLHFCQUFzQixDQUN0QixxQkFDRixDQUVBLDJCQUdFLHVCQUF3QixDQUZ4Qiw2QkFBOEIsQ0FDOUIscUNBRUYsQ0FFQSw4QkFDRSx5QkFBMEIsQ0FDMUIsNkJBQ0YsQ0FFQSxrQ0FHRSxrQkFBbUIsQ0FEbkIsWUFBYSxDQURiLGlCQUdGLENBRUEsMkJBT0Usd0NBQXlDLENBQ3pDLG9EQUFxRCxDQUNyRCxxQ0FBc0MsQ0FIdEMsdUJBQXdCLENBSHhCLG1DQUFvQyxDQUNwQywrQkFBZ0MsQ0FDaEMsZUFBZ0IsQ0FLaEIsWUFBYSxDQVJiLDJDQUE0QyxDQVM1QyxxQ0FBc0MsQ0FWdEMsVUFXRixDQUVBLGlDQUNFLGlDQUFrQyxDQUNsQyxnRUFDRixDQUVBLG9DQUNFLHFDQUFzQyxDQUN0QyxrQkFBbUIsQ0FDbkIsVUFDRixDQUVBLHdDQUNFLGlDQUNGLENBRUEsOEJBQ0UsZ0JBQWlCLENBQ2pCLGVBQ0YsQ0FFQSwyQkFFRSw2QkFBOEIsQ0FEOUIsMkNBRUYsQ0FFQSwyQkFFRSw2QkFBOEIsQ0FEOUIsMkNBRUYsQ0FFQSwyQkFDRSxnQ0FDRixDQUVBLGlDQUNFLHVDQUNGLENBRUEsNkJBQ0UsaUNBQ0YsQ0FFQSxtQ0FDRSx1Q0FDRixDQUVBLGtDQUVFLHlCQUEwQixDQUQxQiw2QkFBOEIsQ0FFOUIsNEJBQ0YsQ0FFQSxnQ0FFRSxpQ0FBa0MsQ0FEbEMsNkJBQThCLENBRTlCLDRCQUNGLENBRUEsMEJBR0Usa0JBQW1CLENBRW5CLGlDQUFrQyxDQUhsQyxZQUFhLENBRWIsc0JBQXVCLENBSHZCLGlCQUtGLENBRUEsOEJBQ0Usc0JBQ0YsQ0FFQSwrQkFDRSx1QkFDRixDQUVBLGtDQUNFLHdEQUNGLENBRUEsbUNBQ0UseURBQ0YsQ0FFQSwrQkFDRSxVQUNGIiwiZmlsZSI6IklucHV0Lm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zcGFjaW5nLXhzKTtcbn1cblxuLmxhYmVsIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xufVxuXG4ucmVxdWlyZWQge1xuICBjb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNwYWNpbmcteHMpO1xufVxuXG4uaW5wdXRXcmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uaW5wdXQge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zbSkgdmFyKC0tc3BhY2luZy1tZCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1iYXNlKTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYmFzZSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gIGJvcmRlcjogdmFyKC0tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLW1kKTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXRyYW5zaXRpb24tZmFzdCk7XG59XG5cbi5pbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLWNvbG9yLXByaW1hcnktcmdiLCAwLCAxMjMsIDI1NSksIDAuMSk7XG59XG5cbi5pbnB1dDpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBvcGFjaXR5OiAwLjY7XG59XG5cbi5pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4udGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbn1cblxuLnNtYWxsIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy14cykgdmFyKC0tc3BhY2luZy1zbSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbn1cblxuLmxhcmdlIHtcbiAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1tZCkgdmFyKC0tc3BhY2luZy1sZyk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbn1cblxuLmVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1kYW5nZXIpO1xufVxuXG4uZXJyb3I6Zm9jdXMge1xuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMjAsIDUzLCA2OSwgMC4xKTtcbn1cblxuLnN1Y2Nlc3Mge1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXN1Y2Nlc3MpO1xufVxuXG4uc3VjY2Vzczpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDQwLCAxNjcsIDY5LCAwLjEpO1xufVxuXG4uZXJyb3JNZXNzYWdlIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBjb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2luZy14cyk7XG59XG5cbi5oZWxwZXJUZXh0IHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xuICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjaW5nLXhzKTtcbn1cblxuLmljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4uaWNvbkxlZnQge1xuICBsZWZ0OiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLmljb25SaWdodCB7XG4gIHJpZ2h0OiB2YXIoLS1zcGFjaW5nLW1kKTtcbn1cblxuLndpdGhJY29uTGVmdCB7XG4gIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1zcGFjaW5nLXhsKSArIHZhcigtLXNwYWNpbmctc20pKTtcbn1cblxuLndpdGhJY29uUmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKHZhcigtLXNwYWNpbmcteGwpICsgdmFyKC0tc3BhY2luZy1zbSkpO1xufVxuXG4uZnVsbFdpZHRoIHtcbiAgd2lkdGg6IDEwMCU7XG59Il19 */";
137
+ var styles = {"container":"Input-module_container__zLqel","label":"Input-module_label__-OEBL","required":"Input-module_required__CTss-","inputWrapper":"Input-module_inputWrapper__FIVsA","input":"Input-module_input__WjT81","textarea":"Input-module_textarea__Wv63H","small":"Input-module_small__64a4F","large":"Input-module_large__g7SQh","error":"Input-module_error__VLISa","success":"Input-module_success__EzYG6","errorMessage":"Input-module_errorMessage__rP4NL","helperText":"Input-module_helperText__9eFmv","icon":"Input-module_icon__IeMcF","iconLeft":"Input-module_iconLeft__KrUhI","iconRight":"Input-module_iconRight__Ssr47","withIconLeft":"Input-module_withIconLeft__WfJgY","withIconRight":"Input-module_withIconRight__N8jm1","fullWidth":"Input-module_fullWidth__kWTRr"};
138
+ styleInject(css_248z);
139
+
140
+ const Input = react.forwardRef(({ label, error, helperText, required = false, fullWidth = false, size = 'medium', variant = 'default', iconLeft, iconRight, multiline = false, rows = 3, className = '', id, ...rest }, ref) => {
141
+ const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;
142
+ const inputClasses = [
143
+ styles.input,
144
+ size !== 'medium' && styles[size],
145
+ error && styles.error,
146
+ variant === 'error' && styles.error,
147
+ variant === 'success' && styles.success,
148
+ multiline && styles.textarea,
149
+ iconLeft && styles.withIconLeft,
150
+ iconRight && styles.withIconRight,
151
+ className
152
+ ].filter(Boolean).join(' ');
153
+ const containerClasses = [
154
+ styles.container,
155
+ fullWidth && styles.fullWidth
156
+ ].filter(Boolean).join(' ');
157
+ const inputElement = multiline ? (jsxRuntime.jsx("textarea", { ref: ref, id: inputId, className: inputClasses, rows: rows, "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined, ...rest })) : (jsxRuntime.jsx("input", { ref: ref, id: inputId, className: inputClasses, "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined, ...rest }));
158
+ return (jsxRuntime.jsxs("div", { className: containerClasses, children: [label && (jsxRuntime.jsxs("label", { htmlFor: inputId, className: styles.label, children: [label, required && jsxRuntime.jsx("span", { className: styles.required, children: "*" })] })), jsxRuntime.jsxs(framerMotion.motion.div, { className: styles.inputWrapper, whileFocus: { scale: 1.01 }, transition: { type: "spring", stiffness: 400, damping: 17 }, children: [iconLeft && jsxRuntime.jsx("span", { className: `${styles.icon} ${styles.iconLeft}`, children: iconLeft }), inputElement, iconRight && jsxRuntime.jsx("span", { className: `${styles.icon} ${styles.iconRight}`, children: iconRight })] }), error && (jsxRuntime.jsx(framerMotion.motion.span, { id: `${inputId}-error`, className: styles.errorMessage, initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.2 }, children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: `${inputId}-helper`, className: styles.helperText, children: helperText }))] }));
159
+ });
160
+
161
+ exports.Button = Button;
162
+ exports.Card = Card;
163
+ exports.Input = Input;
164
+ exports.Modal = Modal;
165
+ exports.ThemeProvider = ThemeProvider;
166
+ exports.useTheme = useTheme;
167
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/contexts/ThemeContext.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Modal/Modal.tsx","../src/components/Input/Input.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';\n\ntype Theme = 'light' | 'dark';\n\ninterface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ \n children, \n defaultTheme = 'light' \n}) => {\n const [theme, setTheme] = useState<Theme>(defaultTheme);\n\n useEffect(() => {\n const savedTheme = localStorage.getItem('theme') as Theme | null;\n if (savedTheme) {\n setTheme(savedTheme);\n }\n }, []);\n\n useEffect(() => {\n document.documentElement.setAttribute('data-theme', theme);\n localStorage.setItem('theme', theme);\n }, [theme]);\n\n const toggleTheme = () => {\n setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');\n };\n\n return (\n <ThemeContext.Provider value={{ theme, toggleTheme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n};","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 React, { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './Button.module.css';\n\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost';\n size?: 'small' | 'medium' | 'large';\n fullWidth?: boolean;\n loading?: boolean;\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n children?: ReactNode;\n motionProps?: HTMLMotionProps<\"button\">;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'medium',\n fullWidth = false,\n loading = false,\n iconLeft,\n iconRight,\n children,\n className = '',\n disabled,\n motionProps,\n ...rest\n}) => {\n const buttonClasses = [\n styles.button,\n styles[variant],\n styles[size],\n fullWidth && styles.fullWidth,\n loading && styles.loading,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <motion.button\n className={buttonClasses}\n disabled={disabled || loading}\n whileHover={{ scale: disabled || loading ? 1 : 1.02 }}\n whileTap={{ scale: disabled || loading ? 1 : 0.98 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n {...motionProps}\n {...rest}\n >\n {loading && <span className={styles.spinner} />}\n {iconLeft && <span className={styles.iconLeft}>{iconLeft}</span>}\n {children}\n {iconRight && <span className={styles.iconRight}>{iconRight}</span>}\n </motion.button>\n );\n};","import React, { HTMLAttributes, ReactNode } from 'react';\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport styles from './Card.module.css';\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onAnimationStart' | 'onDragStart' | 'onDragEnd' | 'onDrag'> {\n variant?: 'elevated' | 'outlined' | 'flat';\n hoverable?: boolean;\n clickable?: boolean;\n padding?: boolean;\n image?: string;\n imageAlt?: string;\n title?: string;\n subtitle?: string;\n header?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n motionProps?: HTMLMotionProps<\"div\">;\n}\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'elevated',\n hoverable = false,\n clickable = false,\n padding = true,\n image,\n imageAlt = '',\n title,\n subtitle,\n header,\n footer,\n children,\n className = '',\n onClick,\n motionProps,\n ...rest\n}) => {\n const cardClasses = [\n styles.card,\n styles[variant],\n hoverable && styles.hoverable,\n clickable && styles.clickable,\n !padding && styles.noPadding,\n className\n ].filter(Boolean).join(' ');\n\n const cardContent = (\n <>\n {image && (\n <div className={styles.imageContainer}>\n <img src={image} alt={imageAlt} className={styles.image} />\n </div>\n )}\n {header && <div className={styles.header}>{header}</div>}\n {(title || subtitle) && !header && (\n <div className={styles.header}>\n {title && <h3 className={styles.title}>{title}</h3>}\n {subtitle && <p className={styles.subtitle}>{subtitle}</p>}\n </div>\n )}\n {children && (\n <div className={padding ? styles.body : undefined}>\n {children}\n </div>\n )}\n {footer && <div className={styles.footer}>{footer}</div>}\n </>\n );\n\n return (\n <motion.div\n className={cardClasses}\n onClick={clickable ? onClick : undefined}\n whileHover={hoverable ? { y: -4 } : undefined}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n {...motionProps}\n {...rest}\n >\n {cardContent}\n </motion.div>\n );\n};","import React, { ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport styles from './Modal.module.css';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n size?: 'small' | 'medium' | 'large' | 'fullscreen';\n centered?: boolean;\n closeOnOverlay?: boolean;\n closeOnEsc?: boolean;\n showCloseButton?: boolean;\n header?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n className?: string;\n overlayClassName?: string;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n size = 'medium',\n centered = false,\n closeOnOverlay = true,\n closeOnEsc = true,\n showCloseButton = true,\n header,\n footer,\n children,\n className = '',\n overlayClassName = '',\n}) => {\n useEffect(() => {\n const handleEsc = (event: KeyboardEvent) => {\n if (closeOnEsc && event.key === 'Escape') {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEsc);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEsc);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose, closeOnEsc]);\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlay && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n const modalClasses = [\n styles.modal,\n styles[size],\n centered && styles.centered,\n className\n ].filter(Boolean).join(' ');\n\n const overlayClasses = [\n styles.overlay,\n overlayClassName\n ].filter(Boolean).join(' ');\n\n const modalContent = (\n <AnimatePresence>\n {isOpen && (\n <motion.div\n className={overlayClasses}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={handleOverlayClick}\n >\n <motion.div\n className={modalClasses}\n initial={{ scale: 0.9, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.9, opacity: 0 }}\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\n onClick={(e) => e.stopPropagation()}\n >\n {(header || title || showCloseButton) && (\n <div className={styles.header}>\n {header || (title && <h2 className={styles.title}>{title}</h2>)}\n {showCloseButton && (\n <button\n className={styles.closeButton}\n onClick={onClose}\n aria-label=\"Close modal\"\n >\n ✕\n </button>\n )}\n </div>\n )}\n {children && <div className={styles.body}>{children}</div>}\n {footer && <div className={styles.footer}>{footer}</div>}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n\n if (typeof document !== 'undefined') {\n return createPortal(modalContent, document.body);\n }\n\n return null;\n};","import React, { InputHTMLAttributes, TextareaHTMLAttributes, ReactNode, forwardRef } from 'react';\nimport { motion } from 'framer-motion';\nimport styles from './Input.module.css';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement> & TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n label?: string;\n error?: string;\n helperText?: string;\n required?: boolean;\n fullWidth?: boolean;\n size?: 'small' | 'medium' | 'large';\n variant?: 'default' | 'error' | 'success';\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n multiline?: boolean;\n rows?: number;\n}\n\nexport const Input = forwardRef<HTMLInputElement | HTMLTextAreaElement, InputProps>(({\n label,\n error,\n helperText,\n required = false,\n fullWidth = false,\n size = 'medium',\n variant = 'default',\n iconLeft,\n iconRight,\n multiline = false,\n rows = 3,\n className = '',\n id,\n ...rest\n}, ref) => {\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\n \n const inputClasses = [\n styles.input,\n size !== 'medium' && styles[size],\n error && styles.error,\n variant === 'error' && styles.error,\n variant === 'success' && styles.success,\n multiline && styles.textarea,\n iconLeft && styles.withIconLeft,\n iconRight && styles.withIconRight,\n className\n ].filter(Boolean).join(' ');\n\n const containerClasses = [\n styles.container,\n fullWidth && styles.fullWidth\n ].filter(Boolean).join(' ');\n\n const inputElement = multiline ? (\n <textarea\n ref={ref as React.Ref<HTMLTextAreaElement>}\n id={inputId}\n className={inputClasses}\n rows={rows}\n aria-invalid={!!error}\n aria-describedby={error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined}\n {...(rest as TextareaHTMLAttributes<HTMLTextAreaElement>)}\n />\n ) : (\n <input\n ref={ref as React.Ref<HTMLInputElement>}\n id={inputId}\n className={inputClasses}\n aria-invalid={!!error}\n aria-describedby={error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined}\n {...(rest as InputHTMLAttributes<HTMLInputElement>)}\n />\n );\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <motion.div \n className={styles.inputWrapper}\n whileFocus={{ scale: 1.01 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n >\n {iconLeft && <span className={`${styles.icon} ${styles.iconLeft}`}>{iconLeft}</span>}\n {inputElement}\n {iconRight && <span className={`${styles.icon} ${styles.iconRight}`}>{iconRight}</span>}\n </motion.div>\n {error && (\n <motion.span\n id={`${inputId}-error`}\n className={styles.errorMessage}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n >\n {error}\n </motion.span>\n )}\n {helperText && !error && (\n <span id={`${inputId}-helper`} className={styles.helperText}>\n {helperText}\n </span>\n )}\n </div>\n );\n});"],"names":["createContext","useContext","useState","useEffect","_jsx","styles","_jsxs","motion","_Fragment","AnimatePresence","createPortal","forwardRef"],"mappings":"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","x_google_ignoreList":[1]}
@@ -0,0 +1,16 @@
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;
16
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/stories/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,gDAAgD;AAChD,eAAO,MAAM,MAAM,GAAI,qDAMpB,WAAW,4CAYb,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { StoryObj } from '@storybook/react-vite';
2
+ declare const meta: {
3
+ title: string;
4
+ component: ({ primary, size, backgroundColor, label, ...props }: import("./Button").ButtonProps) => import("react/jsx-runtime").JSX.Element;
5
+ parameters: {
6
+ layout: string;
7
+ };
8
+ tags: string[];
9
+ argTypes: {
10
+ backgroundColor: {
11
+ control: "color";
12
+ };
13
+ };
14
+ args: {
15
+ onClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
16
+ };
17
+ };
18
+ export default meta;
19
+ type Story = StoryObj<typeof meta>;
20
+ export declare const Primary: Story;
21
+ export declare const Secondary: Story;
22
+ export declare const Large: Story;
23
+ export declare const Small: Story;
24
+ //# sourceMappingURL=Button.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Button.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAO5D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;CAeqB,CAAC;AAEhC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAGnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ import '../styles/Token.css';
3
+ declare const meta: {
4
+ title: string;
5
+ component: import("react").FC<import("../components/Card").CardProps>;
6
+ parameters: {
7
+ layout: string;
8
+ };
9
+ tags: string[];
10
+ argTypes: {
11
+ variant: {
12
+ control: "select";
13
+ options: string[];
14
+ };
15
+ hoverable: {
16
+ control: "boolean";
17
+ };
18
+ clickable: {
19
+ control: "boolean";
20
+ };
21
+ padding: {
22
+ control: "boolean";
23
+ };
24
+ };
25
+ };
26
+ export default meta;
27
+ type Story = StoryObj<typeof meta>;
28
+ export declare const Default: Story;
29
+ export declare const Elevated: Story;
30
+ export declare const Outlined: Story;
31
+ export declare const Flat: Story;
32
+ export declare const WithImage: Story;
33
+ export declare const Hoverable: Story;
34
+ export declare const Clickable: Story;
35
+ export declare const WithFooter: Story;
36
+ export declare const CustomHeader: Story;
37
+ export declare const NoPadding: Story;
38
+ //# sourceMappingURL=Card.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,qBAAqB,CAAC;AAE7B,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;CAsBmB,CAAC;AAE9B,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAU1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KASvB,CAAC"}
@@ -0,0 +1,13 @@
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 {};
13
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/stories/Header.tsx"],"names":[],"mappings":"AAGA,OAAO,cAAc,CAAC;AAEtB,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,MAAM,GAAI,8CAA8C,WAAW,4CAuC/E,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { StoryObj } from '@storybook/react-vite';
2
+ declare const meta: {
3
+ title: string;
4
+ component: ({ user, onLogin, onLogout, onCreateAccount }: import("./Header").HeaderProps) => import("react/jsx-runtime").JSX.Element;
5
+ tags: string[];
6
+ parameters: {
7
+ layout: string;
8
+ };
9
+ args: {
10
+ onLogin: import("@vitest/spy").Mock<(...args: any[]) => any>;
11
+ onLogout: import("@vitest/spy").Mock<(...args: any[]) => any>;
12
+ onCreateAccount: import("@vitest/spy").Mock<(...args: any[]) => any>;
13
+ };
14
+ };
15
+ export default meta;
16
+ type Story = StoryObj<typeof meta>;
17
+ export declare const LoggedIn: Story;
18
+ export declare const LoggedOut: Story;
19
+ //# sourceMappingURL=Header.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Header.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;;;;;;;CAcqB,CAAC;AAEhC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAU,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ import '../styles/Token.css';
3
+ declare const meta: {
4
+ title: string;
5
+ component: import("react").ForwardRefExoticComponent<import("../components/Input").InputProps & import("react").RefAttributes<HTMLInputElement | HTMLTextAreaElement>>;
6
+ parameters: {
7
+ layout: string;
8
+ };
9
+ tags: string[];
10
+ argTypes: {
11
+ size: {
12
+ control: "select";
13
+ options: string[];
14
+ };
15
+ variant: {
16
+ control: "select";
17
+ options: string[];
18
+ };
19
+ fullWidth: {
20
+ control: "boolean";
21
+ };
22
+ required: {
23
+ control: "boolean";
24
+ };
25
+ disabled: {
26
+ control: "boolean";
27
+ };
28
+ multiline: {
29
+ control: "boolean";
30
+ };
31
+ };
32
+ };
33
+ export default meta;
34
+ type Story = StoryObj<typeof meta>;
35
+ export declare const Default: Story;
36
+ export declare const Required: Story;
37
+ export declare const WithHelperText: Story;
38
+ export declare const WithError: Story;
39
+ export declare const Success: Story;
40
+ export declare const Disabled: Story;
41
+ export declare const Small: Story;
42
+ export declare const Large: Story;
43
+ export declare const WithLeftIcon: Story;
44
+ export declare const WithRightIcon: Story;
45
+ export declare const WithBothIcons: Story;
46
+ export declare const Textarea: Story;
47
+ export declare const TextareaWithError: Story;
48
+ export declare const FullWidth: Story;
49
+ export declare const NoLabel: Story;
50
+ export declare const AllInputTypes: Story;
51
+ //# sourceMappingURL=Input.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Input.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,qBAAqB,CAAC;AAE7B,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BoB,CAAC;AAE/B,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAM3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAQ/B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAa3B,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ import '../styles/Token.css';
3
+ declare const meta: {
4
+ title: string;
5
+ component: import("react").FC<import("../components/Modal").ModalProps>;
6
+ parameters: {
7
+ layout: string;
8
+ };
9
+ tags: string[];
10
+ argTypes: {
11
+ size: {
12
+ control: "select";
13
+ options: string[];
14
+ };
15
+ centered: {
16
+ control: "boolean";
17
+ };
18
+ closeOnOverlay: {
19
+ control: "boolean";
20
+ };
21
+ closeOnEsc: {
22
+ control: "boolean";
23
+ };
24
+ showCloseButton: {
25
+ control: "boolean";
26
+ };
27
+ };
28
+ };
29
+ export default meta;
30
+ type Story = StoryObj<typeof meta>;
31
+ export declare const Default: Story;
32
+ export declare const Small: Story;
33
+ export declare const Large: Story;
34
+ export declare const Fullscreen: Story;
35
+ export declare const WithFooter: Story;
36
+ export declare const CustomHeader: Story;
37
+ export declare const NoCloseButton: Story;
38
+ export declare const NoOverlayClose: Story;
39
+ export declare const Centered: Story;
40
+ export declare const LongContent: Story;
41
+ //# sourceMappingURL=Modal.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Modal.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,qBAAqB,CAAC;AAE7B,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;CAyBoB,CAAC;AAE/B,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAanC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAOnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAOnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAYxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAW1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAqBzB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import './page.css';
3
+ export declare const Page: React.FC;
4
+ //# sourceMappingURL=Page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../src/stories/Page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,YAAY,CAAC;AAMpB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EA+DxB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { StoryObj } from '@storybook/react-vite';
2
+ declare const meta: {
3
+ title: string;
4
+ component: import("react").FC<{}>;
5
+ parameters: {
6
+ layout: string;
7
+ };
8
+ };
9
+ export default meta;
10
+ type Story = StoryObj<typeof meta>;
11
+ export declare const LoggedOut: Story;
12
+ export declare const LoggedIn: Story;
13
+ //# sourceMappingURL=Page.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Page.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Page.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;CAOmB,CAAC;AAE9B,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KAAU,CAAC;AAGnC,eAAO,MAAM,QAAQ,EAAE,KAWtB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ import '../styles/Token.css';
3
+ declare const meta: {
4
+ title: string;
5
+ component: () => import("react/jsx-runtime").JSX.Element;
6
+ decorators: ((Story: import("storybook/internal/csf").PartialStoryFn<import("@storybook/react").ReactRenderer, {}>) => import("react/jsx-runtime").JSX.Element)[];
7
+ parameters: {
8
+ layout: string;
9
+ };
10
+ };
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+ export declare const Default: Story;
14
+ //# sourceMappingURL=ThemeDemo.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeDemo.stories.d.ts","sourceRoot":"","sources":["../../src/stories/ThemeDemo.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,qBAAqB,CAAC;AAiD7B,QAAA,MAAM,IAAI;;;;;;;CAa0B,CAAC;AAErC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@stfrigerio/sito-template",
3
+ "version": "0.1.0",
4
+ "description": "A library of React components with animations for quick website development",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "build": "rollup -c",
13
+ "dev": "rollup -c -w",
14
+ "test": "jest",
15
+ "lint": "eslint . --ext .ts,.tsx",
16
+ "typecheck": "tsc --noEmit",
17
+ "prepublishOnly": "npm run build",
18
+ "storybook": "storybook dev -p 6006",
19
+ "build-storybook": "storybook build"
20
+ },
21
+ "peerDependencies": {
22
+ "react": "^18.0.0",
23
+ "react-dom": "^18.0.0"
24
+ },
25
+ "dependencies": {
26
+ "framer-motion": "^11.0.0",
27
+ "gsap": "^3.12.0"
28
+ },
29
+ "devDependencies": {
30
+ "@rollup/plugin-commonjs": "^25.0.0",
31
+ "@rollup/plugin-node-resolve": "^15.0.0",
32
+ "@rollup/plugin-typescript": "^11.0.0",
33
+ "@types/react": "^18.0.0",
34
+ "@types/react-dom": "^18.0.0",
35
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
36
+ "@typescript-eslint/parser": "^6.0.0",
37
+ "eslint": "^8.0.0",
38
+ "eslint-plugin-react": "^7.0.0",
39
+ "eslint-plugin-react-hooks": "^4.0.0",
40
+ "jest": "^29.0.0",
41
+ "react": "^18.0.0",
42
+ "react-dom": "^18.0.0",
43
+ "rollup": "^4.0.0",
44
+ "rollup-plugin-css-modules": "^0.1.1",
45
+ "rollup-plugin-postcss": "^4.0.0",
46
+ "tslib": "^2.0.0",
47
+ "typescript": "^5.0.0",
48
+ "storybook": "^9.1.2",
49
+ "@storybook/react-vite": "^9.1.2",
50
+ "@storybook/addon-docs": "^9.1.2",
51
+ "@storybook/addon-onboarding": "^9.1.2",
52
+ "eslint-plugin-storybook": "^9.1.2"
53
+ },
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "git+https://github.com/stfrigerio/sito-template.git"
57
+ },
58
+ "keywords": [
59
+ "react",
60
+ "components",
61
+ "library",
62
+ "framer-motion",
63
+ "gsap",
64
+ "typescript"
65
+ ],
66
+ "author": "Stefano",
67
+ "license": "MIT"
68
+ }