thailife-react 0.0.38 → 0.0.40

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 (29) hide show
  1. package/dist/cjs/index.js +293 -16
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/esm/components/Accordion/Accordion.d.ts +14 -0
  4. package/dist/esm/components/Accordion/Accordion.d.ts.map +1 -0
  5. package/dist/esm/components/Accordion/index.d.ts +2 -0
  6. package/dist/esm/components/Accordion/index.d.ts.map +1 -0
  7. package/dist/esm/components/Carousel/Carousel.d.ts +11 -0
  8. package/dist/esm/components/Carousel/Carousel.d.ts.map +1 -0
  9. package/dist/esm/components/Carousel/index.d.ts +2 -0
  10. package/dist/esm/components/Carousel/index.d.ts.map +1 -0
  11. package/dist/esm/components/DataTable/DataTable.d.ts +16 -0
  12. package/dist/esm/components/DataTable/DataTable.d.ts.map +1 -0
  13. package/dist/esm/components/DataTable/index.d.ts +2 -0
  14. package/dist/esm/components/DataTable/index.d.ts.map +1 -0
  15. package/dist/esm/components/Modal/Modal.d.ts +4 -0
  16. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  17. package/dist/esm/components/Tabs/Tabs.d.ts +21 -0
  18. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -0
  19. package/dist/esm/components/Tabs/index.d.ts +2 -0
  20. package/dist/esm/components/Tabs/index.d.ts.map +1 -0
  21. package/dist/esm/components/Textarea/Textarea.d.ts +24 -0
  22. package/dist/esm/components/Textarea/Textarea.d.ts.map +1 -0
  23. package/dist/esm/components/Textarea/index.d.ts +2 -0
  24. package/dist/esm/components/Textarea/index.d.ts.map +1 -0
  25. package/dist/esm/components/index.d.ts +5 -0
  26. package/dist/esm/components/index.d.ts.map +1 -1
  27. package/dist/esm/index.js +288 -17
  28. package/dist/esm/index.js.map +1 -1
  29. package/package.json +2 -2
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export interface AccordionItem {
3
+ title: React.ReactNode;
4
+ content: React.ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface AccordionProps {
8
+ items: AccordionItem[];
9
+ allowMultiple?: boolean;
10
+ defaultOpen?: number[];
11
+ className?: string;
12
+ }
13
+ export declare const Accordion: React.FC<AccordionProps>;
14
+ //# sourceMappingURL=Accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../../src/components/Accordion/Accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAqDD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAgC9C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Accordion';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Accordion/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface CarouselProps {
3
+ items: React.ReactNode[];
4
+ autoPlay?: boolean;
5
+ interval?: number;
6
+ showArrows?: boolean;
7
+ showIndicators?: boolean;
8
+ className?: string;
9
+ }
10
+ export declare const Carousel: React.FC<CarouselProps>;
11
+ //# sourceMappingURL=Carousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../../src/components/Carousel/Carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAkH5C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Carousel';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Carousel/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ export interface Column<T> {
3
+ header: string;
4
+ accessorKey?: keyof T;
5
+ cell?: (row: T) => React.ReactNode;
6
+ width?: string;
7
+ }
8
+ export interface DataTableProps<T> {
9
+ data: T[];
10
+ columns: Column<T>[];
11
+ pageSize?: number;
12
+ className?: string;
13
+ searchPlaceholder?: string;
14
+ }
15
+ export declare const DataTable: <T extends object>({ data, columns, pageSize, className, searchPlaceholder, }: DataTableProps<T>) => React.JSX.Element;
16
+ //# sourceMappingURL=DataTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/DataTable/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IACtB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,MAAM,EAAE,4DAMzC,cAAc,CAAC,CAAC,CAAC,sBAiKnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './DataTable';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/DataTable/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -3,6 +3,10 @@ export interface ModalProps {
3
3
  isOpen: boolean;
4
4
  onClose: () => void;
5
5
  children: React.ReactNode;
6
+ footer?: React.ReactNode;
7
+ size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
8
+ closeOnOverlayClick?: boolean;
9
+ showCloseButton?: boolean;
6
10
  className?: string;
7
11
  }
8
12
  export declare const Modal: React.FC<ModalProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA6CtC,CAAC"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC1C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAiHtC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ export interface TabProps {
3
+ eventKey: string;
4
+ title: React.ReactNode;
5
+ disabled?: boolean;
6
+ children?: React.ReactNode;
7
+ className?: string;
8
+ }
9
+ export declare const Tab: React.FC<TabProps>;
10
+ export interface TabsProps {
11
+ defaultActiveKey?: string;
12
+ activeKey?: string;
13
+ onSelect?: (k: string) => void;
14
+ id?: string;
15
+ variant?: 'underline' | 'pills' | 'enclosed';
16
+ fullWidth?: boolean;
17
+ className?: string;
18
+ children: React.ReactNode;
19
+ }
20
+ export declare const Tabs: React.FC<TabsProps>;
21
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAElC,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAuJpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Tabs';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { UseFormRegisterReturn } from 'react-hook-form';
3
+ export interface TextareaProps {
4
+ label?: string;
5
+ error?: string;
6
+ helperText?: string;
7
+ rows?: number;
8
+ fullWidth?: boolean;
9
+ disabled?: boolean;
10
+ className?: string;
11
+ placeholder?: string;
12
+ value?: string;
13
+ defaultValue?: string;
14
+ onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
15
+ onBlur?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
16
+ onFocus?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
17
+ name?: string;
18
+ id?: string;
19
+ required?: boolean;
20
+ readOnly?: boolean;
21
+ register?: UseFormRegisterReturn;
22
+ }
23
+ export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
24
+ //# sourceMappingURL=Textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IACnE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAChE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED,eAAO,MAAM,QAAQ,2FAmEpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Textarea';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Textarea/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -7,4 +7,9 @@ export * from "./Radio";
7
7
  export * from "./Select";
8
8
  export * from "./Autocomplete";
9
9
  export * from "./Breadcrumb";
10
+ export * from "./DataTable";
11
+ export * from "./Accordion";
12
+ export * from "./Carousel";
13
+ export * from "./Tabs";
14
+ export * from "./Textarea";
10
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import React, { forwardRef, useState, useEffect, useMemo, useRef, useCallback } from 'react';
2
+ import { createPortal } from 'react-dom';
2
3
 
3
4
  function styleInject(css, ref) {
4
5
  if ( ref === void 0 ) ref = {};
@@ -27,7 +28,7 @@ function styleInject(css, ref) {
27
28
  }
28
29
  }
29
30
 
30
- var css_248z = "/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:\"\"}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-0{left:0}.left-3{left:.75rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-8{right:2rem}.top-1\\/2{top:50%}.top-3{top:.75rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-50{z-index:50}.mx-4{margin-left:1rem;margin-right:1rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-3{height:.75rem}.h-3\\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-\\[14px\\]{height:14px}.h-\\[34px\\]{height:34px}.h-\\[40px\\]{height:40px}.h-\\[44px\\]{height:44px}.h-\\[56px\\]{height:56px}.max-h-60{max-height:15rem}.min-h-\\[44px\\]{min-height:44px}.w-3{width:.75rem}.w-3\\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-80{width:20rem}.w-\\[14px\\]{width:14px}.w-\\[34px\\]{width:34px}.w-full{width:100%}.max-w-md{max-width:28rem}.-translate-y-1\\/2{--tw-translate-y:-50%}.-rotate-180,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\\.5{gap:.625rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[9999px\\],.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-none{border-style:none}.border-\\[\\#CBD4D9\\]{--tw-border-opacity:1;border-color:rgb(203 212 217/var(--tw-border-opacity))}.border-danger{--tw-border-opacity:1;border-color:rgb(255 17 0/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.bg-\\[\\#CBD4D9\\]{--tw-bg-opacity:1;background-color:rgb(203 212 217/var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-danger{--tw-bg-opacity:1;background-color:rgb(255 17 0/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(0 122 194/var(--tw-bg-opacity))}.bg-primary\\/10{background-color:rgba(0,122,194,.1)}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-opacity-50{--tw-bg-opacity:0.5}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.pl-10{padding-left:2.5rem}.pl-12{padding-left:3rem}.pl-14{padding-left:3.5rem}.pl-\\[1px\\]{padding-left:1px}.pr-10{padding-right:2.5rem}.pr-12{padding-right:3rem}.pr-14{padding-right:3.5rem}.pr-3{padding-right:.75rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\\[18px\\]{font-size:18px}.text-\\[22px\\]{font-size:22px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.text-\\[\\#393C3E\\]{--tw-text-opacity:1;color:rgb(57 60 62/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-danger{--tw-text-opacity:1;color:rgb(255 17 0/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-primary{--tw-text-opacity:1;color:rgb(0 122 194/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}@font-face{font-display:swap;font-family:DB_OZONE_X;font-style:normal;font-weight:400;src:url(../fonts/db_ozone_x/DB_Ozone_X.woff) format(\"woff\"),url(../fonts/db_ozone_x/DB_Ozone_X.ttf) format(\"truetype\")}@font-face{font-display:swap;font-family:DB_OZONE_X;font-style:normal;font-weight:500;src:url(../fonts/db_ozone_x/DB_Ozone_X_Med.woff) format(\"woff\"),url(../fonts/db_ozone_x/DB_Ozone_X_Med.ttf) format(\"truetype\")}@font-face{font-display:swap;font-family:DB_OZONE_X;font-style:normal;font-weight:700;src:url(../fonts/db_ozone_x/DB_Ozone_X_Bd.woff) format(\"woff\"),url(../fonts/db_ozone_x/DB_Ozone_X_Bd.ttf) format(\"truetype\")}body{color:#393c3e;font-family:DB_OZONE_X,sans-serif!important;font-size:22px;font-weight:400;@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.animate-fadeIn{animation:fadeIn .3s ease-out}.animate-scaleIn{animation:scaleIn .3s ease-out}}.focus-within\\:border-2:focus-within{border-width:2px}.focus-within\\:border-primary:focus-within{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.hover\\:border-primary:hover{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.hover\\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.hover\\:bg-danger:hover{--tw-bg-opacity:1;background-color:rgb(255 17 0/var(--tw-bg-opacity))}.hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.hover\\:bg-primary:hover{--tw-bg-opacity:1;background-color:rgb(0 122 194/var(--tw-bg-opacity))}.hover\\:bg-primary\\/10:hover{background-color:rgba(0,122,194,.1)}.hover\\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.hover\\:text-primary:hover{--tw-text-opacity:1;color:rgb(0 122 194/var(--tw-text-opacity))}.hover\\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.focus\\:border-2:focus{border-width:2px}.focus\\:border-danger:focus{--tw-border-opacity:1;border-color:rgb(255 17 0/var(--tw-border-opacity))}.focus\\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.focus\\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.active\\:bg-danger:active{--tw-bg-opacity:1;background-color:rgb(255 17 0/var(--tw-bg-opacity))}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-\\[\\#F2F4F5\\]:disabled{--tw-bg-opacity:1;background-color:rgb(242 244 245/var(--tw-bg-opacity))}.disabled\\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\\:border-primary{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.peer:focus-visible~.peer-focus-visible\\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.peer:focus-visible~.peer-focus-visible\\:ring-primary\\/60{--tw-ring-color:rgba(0,122,194,.6)}.peer:focus-visible~.peer-focus-visible\\:ring-offset-2{--tw-ring-offset-width:2px}";
31
+ var css_248z = "/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:\"\"}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-1\\/2{left:50%}.left-3{left:.75rem}.left-4{left:1rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-8{right:2rem}.top-1{top:.25rem}.top-1\\/2{top:50%}.top-3{top:.75rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-50{z-index:50}.m-4{margin:1rem}.mx-auto{margin-left:auto;margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0}.h-0\\.5{height:.125rem}.h-12{height:3rem}.h-2{height:.5rem}.h-2\\.5{height:.625rem}.h-3{height:.75rem}.h-3\\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-\\[14px\\]{height:14px}.h-\\[34px\\]{height:34px}.h-\\[400px\\]{height:400px}.h-\\[40px\\]{height:40px}.h-\\[44px\\]{height:44px}.h-\\[56px\\]{height:56px}.h-\\[calc\\(100\\%-8px\\)\\]{height:calc(100% - 8px)}.h-full{height:100%}.max-h-60{max-height:15rem}.max-h-\\[calc\\(100vh-200px\\)\\]{max-height:calc(100vh - 200px)}.min-h-\\[44px\\]{min-height:44px}.w-12{width:3rem}.w-2{width:.5rem}.w-2\\.5{width:.625rem}.w-3{width:.75rem}.w-3\\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-96{width:24rem}.w-\\[14px\\]{width:14px}.w-\\[34px\\]{width:34px}.w-\\[600px\\]{width:600px}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\\/2{--tw-translate-y:-50%}.translate-y-0{--tw-translate-y:0px}.translate-y-0,.translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y:1rem}.-rotate-180{--tw-rotate:-180deg}.-rotate-180,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\\.5{gap:.625rem}.gap-3{gap:.75rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-\\[9999px\\],.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0}.border-none{border-style:none}.border-\\[\\#CBD4D9\\]{--tw-border-opacity:1;border-color:rgb(203 212 217/var(--tw-border-opacity))}.border-danger{--tw-border-opacity:1;border-color:rgb(255 17 0/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.bg-\\[\\#CBD4D9\\]{--tw-bg-opacity:1;background-color:rgb(203 212 217/var(--tw-bg-opacity))}.bg-black\\/50{background-color:rgba(0,0,0,.5)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-danger{--tw-bg-opacity:1;background-color:rgb(255 17 0/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(0 122 194/var(--tw-bg-opacity))}.bg-primary\\/10{background-color:rgba(0,122,194,.1)}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\\/30{background-color:hsla(0,0%,100%,.3)}.bg-white\\/50{background-color:hsla(0,0%,100%,.5)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-12{padding-left:3rem}.pl-14{padding-left:3.5rem}.pl-\\[1px\\]{padding-left:1px}.pr-10{padding-right:2.5rem}.pr-12{padding-right:3rem}.pr-14{padding-right:3.5rem}.pr-3{padding-right:.75rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\\[18px\\]{font-size:18px}.text-\\[22px\\]{font-size:22px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-6{line-height:1.5rem}.text-\\[\\#393C3E\\]{--tw-text-opacity:1;color:rgb(57 60 62/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-danger{--tw-text-opacity:1;color:rgb(255 17 0/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-primary{--tw-text-opacity:1;color:rgb(0 122 194/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@font-face{font-display:swap;font-family:DB_OZONE_X;font-style:normal;font-weight:400;src:url(../fonts/db_ozone_x/DB_Ozone_X.woff) format(\"woff\"),url(../fonts/db_ozone_x/DB_Ozone_X.ttf) format(\"truetype\")}@font-face{font-display:swap;font-family:DB_OZONE_X;font-style:normal;font-weight:500;src:url(../fonts/db_ozone_x/DB_Ozone_X_Med.woff) format(\"woff\"),url(../fonts/db_ozone_x/DB_Ozone_X_Med.ttf) format(\"truetype\")}@font-face{font-display:swap;font-family:DB_OZONE_X;font-style:normal;font-weight:700;src:url(../fonts/db_ozone_x/DB_Ozone_X_Bd.woff) format(\"woff\"),url(../fonts/db_ozone_x/DB_Ozone_X_Bd.ttf) format(\"truetype\")}body{color:#393c3e;font-family:DB_OZONE_X,sans-serif!important;font-size:22px;font-weight:400;@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.animate-fadeIn{animation:fadeIn .3s ease-out}.animate-scaleIn{animation:scaleIn .3s ease-out}}.last\\:border-b-0:last-child{border-bottom-width:0}.focus-within\\:border-2:focus-within{border-width:2px}.focus-within\\:border-primary:focus-within{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.hover\\:border-primary:hover{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.hover\\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.hover\\:bg-danger:hover{--tw-bg-opacity:1;background-color:rgb(255 17 0/var(--tw-bg-opacity))}.hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\\:bg-gray-400:hover{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\\:bg-primary:hover{--tw-bg-opacity:1;background-color:rgb(0 122 194/var(--tw-bg-opacity))}.hover\\:bg-primary\\/10:hover{background-color:rgba(0,122,194,.1)}.hover\\:bg-white\\/50:hover{background-color:hsla(0,0%,100%,.5)}.hover\\:bg-white\\/80:hover{background-color:hsla(0,0%,100%,.8)}.hover\\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.hover\\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\\:text-primary:hover{--tw-text-opacity:1;color:rgb(0 122 194/var(--tw-text-opacity))}.hover\\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.focus\\:border-2:focus{border-width:2px}.focus\\:border-danger:focus{--tw-border-opacity:1;border-color:rgb(255 17 0/var(--tw-border-opacity))}.focus\\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.focus\\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.active\\:bg-danger:active{--tw-bg-opacity:1;background-color:rgb(255 17 0/var(--tw-bg-opacity))}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-\\[\\#F2F4F5\\]:disabled{--tw-bg-opacity:1;background-color:rgb(242 244 245/var(--tw-bg-opacity))}.disabled\\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\\:border-primary{--tw-border-opacity:1;border-color:rgb(0 122 194/var(--tw-border-opacity))}.group:hover .group-hover\\:opacity-100{opacity:1}.peer:focus-visible~.peer-focus-visible\\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.peer:focus-visible~.peer-focus-visible\\:ring-primary\\/60{--tw-ring-color:rgba(0,122,194,.6)}.peer:focus-visible~.peer-focus-visible\\:ring-offset-2{--tw-ring-offset-width:2px}@media (min-width:768px){.md\\:w-1\\/3{width:33.333333%}}";
31
32
  styleInject(css_248z);
32
33
 
33
34
  const Button = React.forwardRef(({ variant = 'primary', size = 'md', fullWidth = false, loading = false, disabled, className = '', children, type = 'button', onClick, }, ref) => {
@@ -341,35 +342,58 @@ const Input = React.forwardRef(({ label, error, helperText, size = 'md', fullWid
341
342
  });
342
343
  Input.displayName = 'Input';
343
344
 
344
- const Modal = ({ isOpen, onClose, children, className = '' }) => {
345
+ const Modal = ({ isOpen, onClose, children, footer, size = 'md', closeOnOverlayClick = true, showCloseButton = true, className = '', }) => {
346
+ const [isVisible, setIsVisible] = useState(false);
347
+ const [isAnimating, setIsAnimating] = useState(false);
345
348
  const modalRef = useRef(null);
346
349
  useEffect(() => {
347
- const handleEscape = (event) => {
348
- if (event.key === 'Escape') {
349
- onClose();
350
- }
351
- };
352
350
  if (isOpen) {
353
- document.addEventListener('keydown', handleEscape);
351
+ setIsVisible(true);
352
+ // Small delay to allow render before animation starts
353
+ requestAnimationFrame(() => setIsAnimating(true));
354
354
  document.body.style.overflow = 'hidden';
355
355
  }
356
356
  else {
357
- document.body.style.overflow = 'unset';
357
+ setIsAnimating(false);
358
+ const timer = setTimeout(() => {
359
+ setIsVisible(false);
360
+ document.body.style.overflow = 'unset';
361
+ }, 300); // Match transition duration
362
+ return () => clearTimeout(timer);
358
363
  }
359
- return () => {
360
- document.removeEventListener('keydown', handleEscape);
361
- document.body.style.overflow = 'unset';
364
+ }, [isOpen]);
365
+ useEffect(() => {
366
+ const handleEscape = (event) => {
367
+ if (event.key === 'Escape' && isOpen) {
368
+ onClose();
369
+ }
362
370
  };
371
+ document.addEventListener('keydown', handleEscape);
372
+ return () => document.removeEventListener('keydown', handleEscape);
363
373
  }, [isOpen, onClose]);
364
374
  const handleBackdropClick = (event) => {
365
- if (event.target === event.currentTarget) {
375
+ if (event.target === event.currentTarget && closeOnOverlayClick) {
366
376
  onClose();
367
377
  }
368
378
  };
369
- if (!isOpen)
379
+ if (!isVisible)
370
380
  return null;
371
- return (React.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 animate-fadeIn", onClick: handleBackdropClick },
372
- React.createElement("div", { ref: modalRef, className: `bg-white rounded-lg shadow-lg max-w-md w-full mx-4 animate-scaleIn text-center ${className}`, onClick: (e) => e.stopPropagation() }, children)));
381
+ const sizes = {
382
+ sm: 'max-w-sm',
383
+ md: 'max-w-md',
384
+ lg: 'max-w-lg',
385
+ xl: 'max-w-xl',
386
+ full: 'max-w-full m-4',
387
+ };
388
+ const modalContent = (React.createElement("div", { className: `fixed inset-0 z-50 flex items-center justify-center p-4 transition-opacity duration-300 ${isAnimating ? 'opacity-100' : 'opacity-0'}` },
389
+ React.createElement("div", { className: "absolute inset-0 bg-black/50 backdrop-blur-sm transition-opacity", onClick: handleBackdropClick }),
390
+ React.createElement("div", { ref: modalRef, className: `relative bg-white rounded-xl shadow-2xl w-full transform transition-all duration-300 ease-out ${sizes[size]} ${isAnimating ? 'scale-100 translate-y-0 opacity-100' : 'scale-95 translate-y-4 opacity-0'} ${className}`, role: "dialog", "aria-modal": "true" },
391
+ showCloseButton && (React.createElement("button", { onClick: onClose, className: "absolute top-4 right-4 z-10 text-primary hover:text-gray-500 transition-colors focus:outline-none p-1 rounded-full hover:bg-gray-100" },
392
+ React.createElement("svg", { className: "w-6 h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" },
393
+ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" })))),
394
+ React.createElement("div", { className: "p-10 max-h-[calc(100vh-200px)] overflow-y-auto" }, children),
395
+ footer && (React.createElement("div", { className: "px-6 py-4 bg-gray-50 rounded-b-xl border-t border-gray-100 flex justify-end gap-3" }, footer)))));
396
+ return createPortal(modalContent, document.body);
373
397
  };
374
398
 
375
399
  const Radio = forwardRef(function RadioItem(_a, ref) {
@@ -583,5 +607,252 @@ const Breadcrumb = ({ items, textColor = '#6B7280', activeColor = '#3B82F6', sep
583
607
  };
584
608
  Breadcrumb.displayName = 'Breadcrumb';
585
609
 
586
- export { Autocomplete, Breadcrumb, Button, Checkbox, DatePicker, Input, Modal, Radio, Select };
610
+ const DataTable = ({ data, columns, pageSize = 10, className = '', searchPlaceholder = 'Search...', }) => {
611
+ const [currentPage, setCurrentPage] = useState(1);
612
+ const [searchTerm, setSearchTerm] = useState('');
613
+ // Search Logic
614
+ const filteredData = useMemo(() => {
615
+ if (!searchTerm)
616
+ return data;
617
+ const lowerTerm = searchTerm.toLowerCase();
618
+ return data.filter((row) => Object.keys(row).some((key) => String(row[key]).toLowerCase().includes(lowerTerm)));
619
+ }, [data, searchTerm]);
620
+ // Pagination Logic
621
+ const totalPages = Math.ceil(filteredData.length / pageSize);
622
+ const paginatedData = useMemo(() => {
623
+ const start = (currentPage - 1) * pageSize;
624
+ return filteredData.slice(start, start + pageSize);
625
+ }, [filteredData, currentPage, pageSize]);
626
+ const handleSearch = (e) => {
627
+ setSearchTerm(e.target.value);
628
+ setCurrentPage(1); // Reset to first page on search
629
+ };
630
+ const handlePageChange = (page) => {
631
+ if (page >= 1 && page <= totalPages) {
632
+ setCurrentPage(page);
633
+ }
634
+ };
635
+ return (React.createElement("div", { className: `w-full space-y-4 ${className}` },
636
+ React.createElement("div", { className: "flex justify-between items-center" },
637
+ React.createElement("div", { className: "w-full md:w-1/3" },
638
+ React.createElement(Input, { placeholder: searchPlaceholder, value: searchTerm, onChange: handleSearch, leftIcon: React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" },
639
+ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" })) })),
640
+ React.createElement("div", { className: "text-gray-500 text-sm" },
641
+ "Total ",
642
+ filteredData.length,
643
+ " items")),
644
+ React.createElement("div", { className: "overflow-x-auto rounded-lg border border-gray-200 shadow-sm" },
645
+ React.createElement("table", { className: "w-full text-left text-sm text-gray-600" },
646
+ React.createElement("thead", { className: "bg-gray-50 text-xs uppercase text-gray-700" },
647
+ React.createElement("tr", null, columns.map((col, index) => (React.createElement("th", { key: index, className: "px-6 py-3 font-medium", style: { width: col.width } }, col.header))))),
648
+ React.createElement("tbody", { className: "divide-y divide-gray-200 bg-white" }, paginatedData.length > 0 ? (paginatedData.map((row, rowIndex) => (React.createElement("tr", { key: rowIndex, className: "hover:bg-gray-50" }, columns.map((col, colIndex) => (React.createElement("td", { key: colIndex, className: "px-6 py-4 whitespace-nowrap" }, col.cell
649
+ ? col.cell(row)
650
+ : col.accessorKey
651
+ ? row[col.accessorKey]
652
+ : null))))))) : (React.createElement("tr", null,
653
+ React.createElement("td", { colSpan: columns.length, className: "px-6 py-8 text-center text-gray-500" }, "No results found.")))))),
654
+ totalPages > 1 && (React.createElement("div", { className: "flex justify-between items-center pt-2" },
655
+ React.createElement("div", { className: "text-sm text-gray-500" },
656
+ "Showing ",
657
+ (currentPage - 1) * pageSize + 1,
658
+ " to",
659
+ ' ',
660
+ Math.min(currentPage * pageSize, filteredData.length),
661
+ " of",
662
+ ' ',
663
+ filteredData.length,
664
+ " entries"),
665
+ React.createElement("div", { className: "flex space-x-2" },
666
+ React.createElement(Button, { variant: "outline", size: "sm", onClick: () => handlePageChange(currentPage - 1), disabled: currentPage === 1 }, "Previous"),
667
+ Array.from({ length: totalPages }, (_, i) => i + 1)
668
+ .filter((page) => page === 1 ||
669
+ page === totalPages ||
670
+ (page >= currentPage - 1 && page <= currentPage + 1))
671
+ .map((page, index, array) => (React.createElement(React.Fragment, { key: page },
672
+ index > 0 && array[index - 1] !== page - 1 && (React.createElement("span", { className: "px-2 py-1 text-gray-400" }, "...")),
673
+ React.createElement(Button, { variant: currentPage === page ? 'primary' : 'outline', size: "sm", onClick: () => handlePageChange(page) }, page)))),
674
+ React.createElement(Button, { variant: "outline", size: "sm", onClick: () => handlePageChange(currentPage + 1), disabled: currentPage === totalPages }, "Next"))))));
675
+ };
676
+
677
+ const AccordionItemComponent = ({ item, isOpen, onClick, }) => {
678
+ const contentRef = useRef(null);
679
+ const [height, setHeight] = useState(isOpen ? undefined : 0);
680
+ useEffect(() => {
681
+ var _a;
682
+ if (isOpen) {
683
+ const scrollHeight = (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.scrollHeight;
684
+ setHeight(scrollHeight);
685
+ }
686
+ else {
687
+ setHeight(0);
688
+ }
689
+ }, [isOpen]);
690
+ return (React.createElement("div", { className: `border-b border-gray-200 last:border-b-0 ${item.disabled ? 'opacity-50 pointer-events-none' : ''}` },
691
+ React.createElement("button", { className: "w-full flex justify-between items-center px-6 py-4 text-left bg-white hover:bg-gray-50 transition-colors duration-200 focus:outline-none", onClick: onClick, "aria-expanded": isOpen },
692
+ React.createElement("span", { className: "text-lg font-medium text-gray-900" }, item.title),
693
+ React.createElement("svg", { className: `w-5 h-5 text-gray-500 transform transition-transform duration-300 ${isOpen ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" },
694
+ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))),
695
+ React.createElement("div", { className: "overflow-hidden transition-all duration-300 ease-in-out", style: { height: isOpen ? height : 0 } },
696
+ React.createElement("div", { ref: contentRef, className: "px-6 pb-4 pt-2 text-gray-600 bg-white" }, item.content))));
697
+ };
698
+ const Accordion = ({ items, allowMultiple = false, defaultOpen = [], className = '', }) => {
699
+ const [openIndexes, setOpenIndexes] = useState(defaultOpen);
700
+ const handleItemClick = (index) => {
701
+ if (allowMultiple) {
702
+ setOpenIndexes((prev) => prev.includes(index)
703
+ ? prev.filter((i) => i !== index)
704
+ : [...prev, index]);
705
+ }
706
+ else {
707
+ setOpenIndexes((prev) => (prev.includes(index) ? [] : [index]));
708
+ }
709
+ };
710
+ return (React.createElement("div", { className: `w-full bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden ${className}` }, items.map((item, index) => (React.createElement(AccordionItemComponent, { key: index, item: item, isOpen: openIndexes.includes(index), onClick: () => handleItemClick(index) })))));
711
+ };
712
+
713
+ const Carousel = ({ items, autoPlay = false, interval = 3000, showArrows = true, showIndicators = true, className = '', }) => {
714
+ const [currentIndex, setCurrentIndex] = useState(0);
715
+ const [isPaused, setIsPaused] = useState(false);
716
+ const nextSlide = useCallback(() => {
717
+ setCurrentIndex((prevIndex) => (prevIndex === items.length - 1 ? 0 : prevIndex + 1));
718
+ }, [items.length]);
719
+ const prevSlide = () => {
720
+ setCurrentIndex((prevIndex) => (prevIndex === 0 ? items.length - 1 : prevIndex - 1));
721
+ };
722
+ const goToSlide = (index) => {
723
+ setCurrentIndex(index);
724
+ };
725
+ useEffect(() => {
726
+ if (autoPlay && !isPaused) {
727
+ const slideInterval = setInterval(nextSlide, interval);
728
+ return () => clearInterval(slideInterval);
729
+ }
730
+ }, [autoPlay, interval, isPaused, nextSlide]);
731
+ if (!items.length)
732
+ return null;
733
+ return (React.createElement("div", { className: `relative w-full overflow-hidden group ${className}`, onMouseEnter: () => setIsPaused(true), onMouseLeave: () => setIsPaused(false) },
734
+ React.createElement("div", { className: "flex transition-transform duration-500 ease-out h-full", style: { transform: `translateX(-${currentIndex * 100}%)` } }, items.map((item, index) => (React.createElement("div", { key: index, className: "w-full flex-shrink-0 h-full" }, item)))),
735
+ showArrows && (React.createElement(React.Fragment, null,
736
+ React.createElement("button", { className: "absolute top-1/2 left-4 -translate-y-1/2 p-2 rounded-full bg-white/30 hover:bg-white/50 text-white backdrop-blur-sm transition-all opacity-0 group-hover:opacity-100 focus:outline-none", onClick: prevSlide, "aria-label": "Previous slide" },
737
+ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" },
738
+ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }))),
739
+ React.createElement("button", { className: "absolute top-1/2 right-4 -translate-y-1/2 p-2 rounded-full bg-white/30 hover:bg-white/50 text-white backdrop-blur-sm transition-all opacity-0 group-hover:opacity-100 focus:outline-none", onClick: nextSlide, "aria-label": "Next slide" },
740
+ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" },
741
+ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }))))),
742
+ showIndicators && (React.createElement("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 flex space-x-2" }, items.map((_, index) => (React.createElement("button", { key: index, className: `w-2.5 h-2.5 rounded-full transition-all duration-300 focus:outline-none ${currentIndex === index
743
+ ? 'bg-white w-6'
744
+ : 'bg-white/50 hover:bg-white/80'}`, onClick: () => goToSlide(index), "aria-label": `Go to slide ${index + 1}` })))))));
745
+ };
746
+
747
+ const Tab = ({ children, className = '' }) => {
748
+ return React.createElement("div", { className: className }, children);
749
+ };
750
+ const Tabs = ({ defaultActiveKey, activeKey: controlledActiveKey, onSelect, id, variant = 'underline', fullWidth = false, className = '', children, }) => {
751
+ const [uncontrolledActiveKey, setUncontrolledActiveKey] = useState(defaultActiveKey);
752
+ const activeKey = controlledActiveKey !== undefined ? controlledActiveKey : uncontrolledActiveKey;
753
+ const [indicatorStyle, setIndicatorStyle] = useState({});
754
+ const tabsRef = useRef({});
755
+ // Filter valid Tab children
756
+ const tabs = React.Children.toArray(children).filter((child) => React.isValidElement(child) && child.type === Tab);
757
+ // Ensure we have an active key if not provided
758
+ useEffect(() => {
759
+ if (!activeKey && tabs.length > 0) {
760
+ const firstKey = tabs[0].props.eventKey;
761
+ setUncontrolledActiveKey(firstKey);
762
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(firstKey);
763
+ }
764
+ }, [activeKey, tabs, onSelect]);
765
+ useEffect(() => {
766
+ if ((variant === 'underline' || variant === 'pills') && activeKey) {
767
+ const activeTab = tabsRef.current[activeKey];
768
+ if (activeTab) {
769
+ setIndicatorStyle({
770
+ left: activeTab.offsetLeft,
771
+ width: activeTab.offsetWidth,
772
+ });
773
+ }
774
+ }
775
+ }, [activeKey, variant, tabs.length]);
776
+ const handleTabClick = (key, disabled) => {
777
+ if (disabled)
778
+ return;
779
+ if (controlledActiveKey === undefined) {
780
+ setUncontrolledActiveKey(key);
781
+ }
782
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(key);
783
+ };
784
+ const getTabClasses = (key, disabled) => {
785
+ const isActive = key === activeKey;
786
+ const baseClasses = `
787
+ relative px-4 py-3 text-sm font-medium transition-all duration-300 focus:outline-none whitespace-nowrap
788
+ ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}
789
+ ${fullWidth ? 'flex-1 text-center' : ''}
790
+ `;
791
+ if (variant === 'underline') {
792
+ return `
793
+ ${baseClasses}
794
+ ${isActive ? 'text-primary' : 'text-gray-500 hover:text-gray-700'}
795
+ `;
796
+ }
797
+ if (variant === 'pills') {
798
+ return `
799
+ ${baseClasses}
800
+ z-10 rounded-lg
801
+ ${isActive ? 'text-white' : 'text-gray-500 hover:text-gray-700'}
802
+ `;
803
+ }
804
+ if (variant === 'enclosed') {
805
+ return `
806
+ ${baseClasses}
807
+ border-t border-l border-r rounded-t-lg -mb-px
808
+ ${isActive
809
+ ? 'bg-white border-gray-200 text-primary'
810
+ : 'bg-gray-50 border-transparent text-gray-500 hover:text-gray-700'}
811
+ `;
812
+ }
813
+ return baseClasses;
814
+ };
815
+ return (React.createElement("div", { className: `w-full ${className}`, id: id },
816
+ React.createElement("div", { className: `
817
+ relative flex items-center
818
+ ${variant === 'underline' ? 'border-b border-gray-200' : ''}
819
+ ${variant === 'pills' ? 'bg-gray-100 p-1 rounded-xl' : ''}
820
+ ${variant === 'enclosed' ? 'border-b border-gray-200' : ''}
821
+ `, role: "tablist" },
822
+ (variant === 'underline' || variant === 'pills') && (React.createElement("div", { className: `absolute transition-all duration-300 ease-out
823
+ ${variant === 'underline'
824
+ ? 'bottom-0 h-0.5 bg-primary'
825
+ : 'h-[calc(100%-8px)] top-1 bottom-1 bg-primary rounded-lg shadow-sm'}
826
+ `, style: indicatorStyle })),
827
+ tabs.map((tab) => {
828
+ const { eventKey, title, disabled } = tab.props;
829
+ return (React.createElement("button", { key: eventKey, ref: (el) => {
830
+ tabsRef.current[eventKey] = el;
831
+ }, role: "tab", "aria-selected": eventKey === activeKey, "aria-disabled": disabled, className: getTabClasses(eventKey, disabled), onClick: () => handleTabClick(eventKey, disabled) }, title));
832
+ })),
833
+ React.createElement("div", { className: "mt-4" }, tabs.map((tab) => {
834
+ const { eventKey, children, className: tabClassName } = tab.props;
835
+ if (eventKey !== activeKey)
836
+ return null;
837
+ return (React.createElement("div", { key: eventKey, role: "tabpanel", className: `animate-fadeIn ${tabClassName || ''}` }, children));
838
+ }))));
839
+ };
840
+
841
+ const Textarea = React.forwardRef(({ label, error, helperText, rows = 3, fullWidth = false, disabled, className = '', placeholder, value, defaultValue, onChange, onBlur, onFocus, name, id, required, readOnly, register, }, ref) => {
842
+ const baseStyles = 'border text-[22px] rounded-lg p-2 focus:border-2 focus:outline-none disabled:bg-[#F2F4F5] disabled:opacity-50 disabled:cursor-not-allowed resize-none';
843
+ const stateStyles = error
844
+ ? 'border-danger focus:border-danger'
845
+ : 'border-[#CBD4D9] focus:border-primary hover:border-primary';
846
+ const widthClass = fullWidth ? 'w-full' : '';
847
+ return (React.createElement("div", { className: fullWidth ? 'w-full' : '' },
848
+ label && (React.createElement("label", { htmlFor: id, className: "block text-2xl font-base text-[#393C3E] mb-2" },
849
+ label,
850
+ required && React.createElement("span", { className: "text-danger ml-1" }, "*"))),
851
+ React.createElement("div", { className: "relative" },
852
+ React.createElement("textarea", Object.assign({ ref: ref, id: id, name: name, rows: rows, disabled: disabled, readOnly: readOnly, required: required, placeholder: placeholder, value: value, defaultValue: defaultValue, onChange: onChange, onBlur: onBlur, onFocus: onFocus }, register, { className: `${className} ${baseStyles} ${stateStyles} ${widthClass}` }))),
853
+ (error || helperText) && (React.createElement("p", { className: `mt-1 text-sm ${error ? 'text-danger' : 'text-gray-500'}` }, error || helperText))));
854
+ });
855
+ Textarea.displayName = 'Textarea';
856
+
857
+ export { Accordion, Autocomplete, Breadcrumb, Button, Carousel, Checkbox, DataTable, DatePicker, Input, Modal, Radio, Select, Tab, Tabs, Textarea };
587
858
  //# sourceMappingURL=index.js.map