@mci-ui/mci-ui 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var ce=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var Be=Object.prototype.hasOwnProperty;var Fe=(t,r)=>{for(var a in r)ce(t,a,{get:r[a],enumerable:!0})},ze=(t,r,a,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Ae(r))!Be.call(t,n)&&n!==a&&ce(t,n,{get:()=>r[n],enumerable:!(e=Le(r,n))||e.enumerable});return t};var De=t=>ze(ce({},"__esModule",{value:!0}),t);var je={};Fe(je,{Breadcrumb:()=>q,Button:()=>J,Collapse:()=>Q,InputMain:()=>Z,MciTable:()=>ie,Modal:()=>ee,Pagination:()=>re,Skeleton:()=>O,TabPanel:()=>me,Tabs:()=>ae,Tag:()=>oe,Textarea:()=>se,ToastContainer:()=>fe,Tooltip:()=>ne});module.exports=De(je);var Ne=require("lucide-react");var ye=require("clsx"),xe=require("tailwind-merge");function o(...t){return(0,xe.twMerge)((0,ye.clsx)(t))}function he(t){return{handleEscape:a=>{a.key==="Escape"&&t()}}}function ve(t,r){return{handleClick:e=>{t.current&&!t.current.contains(e.target)&&r()}}}var _=require("react/jsx-runtime");function q({items:t,className:r,separatorIcon:a=(0,_.jsx)(Ne.ChevronRight,{className:"w-4 h-4 text-gray-400 dark:text-gray-500"})}){return(0,_.jsx)("nav",{className:o("flex items-center space-x-2 text-sm font-medium text-gray-600 dark:text-gray-300",r),"aria-label":"Breadcrumb",children:t.map((e,n)=>{let s=n===t.length-1;return(0,_.jsxs)("div",{className:"flex items-center",children:[e.href?(0,_.jsx)("a",{href:e.href,onClick:e.onClick,className:o("hover:text-primary-600 dark:hover:text-primary-400 transition-colors",s&&"text-primary-600 dark:text-primary-400"),children:e.label}):(0,_.jsx)("span",{className:o(s?"text-primary-600 dark:text-primary-400":"text-gray-500 dark:text-gray-400"),children:e.label}),!s&&(0,_.jsx)("span",{className:"mx-2 flex items-center",children:a})]},n)})})}var G=require("lucide-react");var S=require("react/jsx-runtime");function J({text:t,icon:r,iconPosition:a="left",size:e="md",variant:n="accent",loading:s=!1,disabled:c=!1,onClick:l,className:d}){let x={sm:"h-[38px] px-3 text-sm gap-2",md:"h-[48px] px-4 text-base gap-2.5",lg:"h-[56px] px-5 text-lg gap-3"};return(0,S.jsxs)("button",{onClick:l,disabled:c||s,className:o("inline-flex items-center justify-center rounded-[7px] font-medium","transition-all duration-300 ease-in-out","transform hover:-translate-y-0.5","disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:translate-y-0 disabled:hover:shadow-none","focus:outline-none focus:ring-2 focus:ring-offset-2",n==="primary"&&"focus:ring-secondary-500",n==="secondary"&&"focus:ring-secondary-400",n==="accent"&&"focus:ring-accent-500",{primary:`
1
+ "use strict";var Y=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var Ae=Object.prototype.hasOwnProperty;var Fe=(e,t)=>{for(var o in t)Y(e,o,{get:t[o],enumerable:!0})},Be=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Le(t))!Ae.call(e,n)&&n!==o&&Y(e,n,{get:()=>t[n],enumerable:!(r=_e(t,n))||r.enumerable});return e};var De=e=>Be(Y({},"__esModule",{value:!0}),e);var ze={};Fe(ze,{Breadcrumb:()=>Z,Button:()=>ee,Collapse:()=>te,InputMain:()=>re,MciTable:()=>oe,Modal:()=>se,Pagination:()=>ne,Skeleton:()=>$,TabPanel:()=>Ne,Tabs:()=>ie,Tag:()=>ce,Textarea:()=>de,ToastContainer:()=>Ce,Tooltip:()=>me});module.exports=De(ze);var xe=require("lucide-react");var pe=require("clsx"),be=require("tailwind-merge");function a(...e){return(0,be.twMerge)((0,pe.clsx)(e))}function ge(e){return{handleEscape:o=>{o.key==="Escape"&&e()}}}function ye(e,t){return{handleClick:r=>{e.current&&!e.current.contains(r.target)&&t()}}}var _=require("react/jsx-runtime");function Z({items:e,className:t,separatorIcon:o=(0,_.jsx)(xe.ChevronRight,{className:"w-4 h-4 text-gray-400 dark:text-gray-500"})}){return(0,_.jsx)("nav",{className:a("flex items-center space-x-2 text-sm font-medium text-gray-600 dark:text-gray-300",t),"aria-label":"Breadcrumb",children:e.map((r,n)=>{let s=n===e.length-1;return(0,_.jsxs)("div",{className:"flex items-center",children:[r.href?(0,_.jsx)("a",{href:r.href,onClick:r.onClick,className:a("hover:text-primary-600 dark:hover:text-primary-400 transition-colors",s&&"text-primary-600 dark:text-primary-400"),children:r.label}):(0,_.jsx)("span",{className:a(s?"text-primary-600 dark:text-primary-400":"text-gray-500 dark:text-gray-400"),children:r.label}),!s&&(0,_.jsx)("span",{className:"mx-2 flex items-center",children:o})]},n)})})}var q=require("lucide-react");var S=require("react/jsx-runtime");function ee({text:e,icon:t,iconPosition:o="left",size:r="md",variant:n="accent",loading:s=!1,disabled:c=!1,onClick:l,className:d}){let x={sm:"h-[38px] px-3 text-sm gap-2",md:"h-[48px] px-4 text-base gap-2.5",lg:"h-[56px] px-5 text-lg gap-3"};return(0,S.jsxs)("button",{onClick:l,disabled:c||s,className:a("inline-flex items-center justify-center rounded-[7px] font-medium","transition-all duration-300 ease-in-out","transform hover:-translate-y-0.5","disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:translate-y-0 disabled:hover:shadow-none","focus:outline-none focus:ring-2 focus:ring-offset-2",n==="primary"&&"focus:ring-secondary-500",n==="secondary"&&"focus:ring-secondary-400",n==="accent"&&"focus:ring-accent-500",{primary:`
2
2
  bg-secondary-500
3
3
  hover:bg-secondary-600
4
4
  active:bg-secondary-700
@@ -24,7 +24,7 @@
24
24
  hover:shadow-accent-500/30
25
25
  active:scale-[0.98]
26
26
  text-white
27
- `}[n],x[e],d),children:[r&&a==="left"&&(0,S.jsx)("span",{className:"flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110",children:s?(0,S.jsx)(G.Loader,{className:"animate-spin",size:20}):r}),t&&(0,S.jsx)("span",{className:"transition-all duration-300",children:t}),r&&a==="right"&&(0,S.jsx)("span",{className:"flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110",children:s?(0,S.jsx)(G.Loader,{className:"animate-spin",size:20}):r}),s&&(0,S.jsx)(G.Loader,{className:"animate-spin",size:20})]})}var we=require("lucide-react"),D=require("react");var E=require("react/jsx-runtime");function Q({title:t,children:r,defaultOpen:a=!1,icon:e,variant:n="primary",className:s,titleClassName:c,contentClassName:l}){let[d,x]=(0,D.useState)(a),[g,v]=(0,D.useState)(0),y=(0,D.useRef)(null);(0,D.useEffect)(()=>{y.current&&v(d?y.current.scrollHeight:0)},[d]);let i={primary:{title:"bg-secondary-50 hover:bg-secondary-100 border-secondary-200 text-secondary-800",content:"bg-secondary-25 border-secondary-100"},secondary:{title:"bg-accent-50 hover:bg-accent-100 border-accent-200 text-accent-800",content:"bg-accent-25 border-accent-100"},accent:{title:"bg-gray-50 hover:bg-gray-100 border-gray-200 text-gray-800",content:"bg-gray-25 border-gray-100"}}[n];return(0,E.jsxs)("div",{className:o("border rounded-lg overflow-hidden",s),children:[(0,E.jsxs)("button",{onClick:()=>x(!d),className:o("w-full flex items-center justify-between p-4 transition-all duration-300","focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-blue-500","border-b",i.title),children:[(0,E.jsxs)("div",{className:"flex items-center gap-3",children:[e&&(0,E.jsx)("span",{className:"flex-shrink-0",children:e}),(0,E.jsx)("span",{className:o("font-medium text-left",c),children:t})]}),(0,E.jsx)(we.ChevronDownIcon,{className:o("w-5 h-5 transition-transform duration-300 flex-shrink-0",d&&"rotate-180")})]}),(0,E.jsx)("div",{className:o("transition-all duration-300 ease-out overflow-hidden",i.content),style:{height:`${g}px`},children:(0,E.jsx)("div",{ref:y,className:o("p-4",l),children:r})})]})}var Y=require("lucide-react"),L=require("react");var w=require("react/jsx-runtime");function Z({label:t,placeholder:r,type:a="text",icon:e,iconPosition:n="left",size:s="md",error:c,success:l,disabled:d=!1,required:x=!1,value:g,onChange:v,onFocus:y,onBlur:u,className:i}){let[m,b]=(0,L.useState)(!1),[N,f]=(0,L.useState)(""),[k,M]=(0,L.useState)(!1),[F,j]=(0,L.useState)(!1),U=g??N,be=!!U||F,ge=a==="password",Pe=()=>{b(!0),y==null||y()},Me=()=>{b(!1),u==null||u()},Ee=z=>{g===void 0&&f(z.target.value),v==null||v(z)},Ie=()=>M(z=>!z),R=(0,L.useMemo)(()=>({sm:{input:"h-[38px] text-sm",padding:e?n==="left"?"pl-10 pr-3":"pl-3 pr-10":"px-3",icon:"w-4 h-4",iconWrapper:n==="left"?"left-3":"right-3",labelFont:"text-xs"},md:{input:"h-[48px] text-base",padding:e?n==="left"?"pl-12 pr-4":"pl-4 pr-12":"px-4",icon:"w-5 h-5",iconWrapper:n==="left"?"left-3.5":"right-3.5",labelFont:"text-sm"},lg:{input:"h-[56px] text-lg",padding:e?n==="left"?"pl-14 pr-5":"pl-5 pr-14":"px-5",icon:"w-6 h-6",iconWrapper:n==="left"?"left-4":"right-4",labelFont:"text-base"}}),[e,n]),Se=(0,L.useMemo)(()=>c?"border-error-500 focus:border-error-600 focus:ring-error-500/20":l?"border-success-500 focus:border-success-600 focus:ring-success-500/20":"border-gray-300 hover:border-gray-400 focus:border-accent-500 focus:ring-accent-500/20",[c,l]),_e=z=>{z.animationName==="onAutoFillStart"?j(!0):z.animationName==="onAutoFillCancel"&&j(!1)};return(0,w.jsxs)("div",{className:o("w-full",i),children:[(0,w.jsxs)("div",{className:"relative flex items-center",children:[(0,w.jsx)("input",{type:ge&&k?"text":a,value:U,onChange:Ee,onFocus:Pe,onBlur:Me,onAnimationStart:_e,disabled:d,placeholder:t?"":r,required:x,className:o("w-full rounded-[7px] border bg-white font-medium outline-none transition-all duration-300 ease-in-out","focus:ring-4 disabled:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-60 autofill:shadow-[inset_0_0_0px_1000px_white]",R[s].input,R[s].padding,Se),autoComplete:"on"}),t&&(0,w.jsxs)("label",{className:o("absolute pointer-events-none transition-all duration-300 ease-in-out font-medium",e&&n==="left"&&!be&&!m?R[s].padding:"left-4",m||be?o("top-0 -translate-y-1/2 bg-white px-2",R[s].labelFont,c?"text-error-600":l?"text-success-600":"text-accent-600"):o("top-1/2 -translate-y-1/2 text-gray-500",R[s].input.includes("38")&&"text-sm",R[s].input.includes("48")&&"text-base",R[s].input.includes("56")&&"text-lg")),children:[t,x&&(0,w.jsx)("span",{className:"text-error-500 ml-1",children:"*"})]}),e&&(0,w.jsx)("div",{className:o("absolute top-1/2 -translate-y-1/2 flex items-center transition-all duration-300",R[s].iconWrapper,c?"text-error-500":l?"text-success-500":m?"text-accent-500":"text-gray-400"),children:(0,w.jsx)("span",{className:o(R[s].icon,"mr-2"),children:e})}),ge&&(0,w.jsx)("button",{type:"button",onClick:Ie,className:o("absolute top-1/2 -translate-y-1/2 flex items-center justify-center text-gray-400 hover:text-gray-600 transition-all","right-3"),children:k?(0,w.jsx)(Y.EyeOff,{className:o(R[s].icon)}):(0,w.jsx)(Y.Eye,{className:o(R[s].icon)})})]}),c&&(0,w.jsx)("p",{className:"mt-1.5 text-sm text-error-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]",children:c}),l&&!c&&(0,w.jsx)("p",{className:"mt-1.5 text-sm text-success-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]",children:l}),(0,w.jsx)("style",{children:`
27
+ `}[n],x[r],d),children:[t&&o==="left"&&(0,S.jsx)("span",{className:"flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110",children:s?(0,S.jsx)(q.Loader,{className:"animate-spin",size:20}):t}),e&&(0,S.jsx)("span",{className:"transition-all duration-300",children:e}),t&&o==="right"&&(0,S.jsx)("span",{className:"flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110",children:s?(0,S.jsx)(q.Loader,{className:"animate-spin",size:20}):t}),s&&(0,S.jsx)(q.Loader,{className:"animate-spin",size:20})]})}var ve=require("lucide-react"),H=require("react");var E=require("react/jsx-runtime");function te({title:e,children:t,defaultOpen:o=!1,icon:r,variant:n="primary",className:s,titleClassName:c,contentClassName:l}){let[d,x]=(0,H.useState)(o),[g,h]=(0,H.useState)(0),y=(0,H.useRef)(null);(0,H.useEffect)(()=>{y.current&&h(d?y.current.scrollHeight:0)},[d]);let i={primary:{title:"bg-secondary-50 hover:bg-secondary-100 border-secondary-200 text-secondary-800",content:"bg-secondary-25 border-secondary-100"},secondary:{title:"bg-accent-50 hover:bg-accent-100 border-accent-200 text-accent-800",content:"bg-accent-25 border-accent-100"},accent:{title:"bg-gray-50 hover:bg-gray-100 border-gray-200 text-gray-800",content:"bg-gray-25 border-gray-100"}}[n];return(0,E.jsxs)("div",{className:a("border rounded-lg overflow-hidden",s),children:[(0,E.jsxs)("button",{onClick:()=>x(!d),className:a("w-full flex items-center justify-between p-4 transition-all duration-300","focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-blue-500","border-b",i.title),children:[(0,E.jsxs)("div",{className:"flex items-center gap-3",children:[r&&(0,E.jsx)("span",{className:"flex-shrink-0",children:r}),(0,E.jsx)("span",{className:a("font-medium text-left",c),children:e})]}),(0,E.jsx)(ve.ChevronDownIcon,{className:a("w-5 h-5 transition-transform duration-300 flex-shrink-0",d&&"rotate-180")})]}),(0,E.jsx)("div",{className:a("transition-all duration-300 ease-out overflow-hidden",i.content),style:{height:`${g}px`},children:(0,E.jsx)("div",{ref:y,className:a("p-4",l),children:t})})]})}var G=require("lucide-react"),L=require("react");var w=require("react/jsx-runtime");function re({label:e,placeholder:t,type:o="text",icon:r,iconPosition:n="left",size:s="md",error:c,success:l,disabled:d=!1,required:x=!1,value:g,onChange:h,onFocus:y,onBlur:u,className:i}){let[m,b]=(0,L.useState)(!1),[N,f]=(0,L.useState)(""),[k,M]=(0,L.useState)(!1),[B,O]=(0,L.useState)(!1),U=g??N,ue=!!U||B,fe=o==="password",Re=()=>{b(!0),y==null||y()},Pe=()=>{b(!1),u==null||u()},Me=D=>{g===void 0&&f(D.target.value),h==null||h(D)},Ee=()=>M(D=>!D),R=(0,L.useMemo)(()=>({sm:{input:"h-[38px] text-sm",padding:r?n==="left"?"pl-10 pr-3":"pl-3 pr-10":"px-3",icon:"w-4 h-4",iconWrapper:n==="left"?"left-3":"right-3",labelFont:"text-xs"},md:{input:"h-[48px] text-base",padding:r?n==="left"?"pl-12 pr-4":"pl-4 pr-12":"px-4",icon:"w-5 h-5",iconWrapper:n==="left"?"left-3.5":"right-3.5",labelFont:"text-sm"},lg:{input:"h-[56px] text-lg",padding:r?n==="left"?"pl-14 pr-5":"pl-5 pr-14":"px-5",icon:"w-6 h-6",iconWrapper:n==="left"?"left-4":"right-4",labelFont:"text-base"}}),[r,n]),Ie=(0,L.useMemo)(()=>c?"border-error-500 focus:border-error-600 focus:ring-error-500/20":l?"border-success-500 focus:border-success-600 focus:ring-success-500/20":"border-gray-300 hover:border-gray-400 focus:border-accent-500 focus:ring-accent-500/20",[c,l]),Se=D=>{D.animationName==="onAutoFillStart"?O(!0):D.animationName==="onAutoFillCancel"&&O(!1)};return(0,w.jsxs)("div",{className:a("w-full",i),children:[(0,w.jsxs)("div",{className:"relative flex items-center",children:[(0,w.jsx)("input",{type:fe&&k?"text":o,value:U,onChange:Me,onFocus:Re,onBlur:Pe,onAnimationStart:Se,disabled:d,placeholder:e?"":t,required:x,className:a("w-full rounded-[7px] border bg-white font-medium outline-none transition-all duration-300 ease-in-out","focus:ring-4 disabled:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-60 autofill:shadow-[inset_0_0_0px_1000px_white]",R[s].input,R[s].padding,Ie),autoComplete:"on"}),e&&(0,w.jsxs)("label",{className:a("absolute pointer-events-none transition-all duration-300 ease-in-out font-medium",r&&n==="left"&&!ue&&!m?R[s].padding:"left-4",m||ue?a("top-0 -translate-y-1/2 bg-white px-2",R[s].labelFont,c?"text-error-600":l?"text-success-600":"text-accent-600"):a("top-1/2 -translate-y-1/2 text-gray-500",R[s].input.includes("38")&&"text-sm",R[s].input.includes("48")&&"text-base",R[s].input.includes("56")&&"text-lg")),children:[e,x&&(0,w.jsx)("span",{className:"text-error-500 ml-1",children:"*"})]}),r&&(0,w.jsx)("div",{className:a("absolute top-1/2 -translate-y-1/2 flex items-center transition-all duration-300",R[s].iconWrapper,c?"text-error-500":l?"text-success-500":m?"text-accent-500":"text-gray-400"),children:(0,w.jsx)("span",{className:a(R[s].icon,"mr-2"),children:r})}),fe&&(0,w.jsx)("button",{type:"button",onClick:Ee,className:a("absolute top-1/2 -translate-y-1/2 flex items-center justify-center text-gray-400 hover:text-gray-600 transition-all","right-3"),children:k?(0,w.jsx)(G.EyeOff,{className:a(R[s].icon)}):(0,w.jsx)(G.Eye,{className:a(R[s].icon)})})]}),c&&(0,w.jsx)("p",{className:"mt-1.5 text-sm text-error-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]",children:c}),l&&!c&&(0,w.jsx)("p",{className:"mt-1.5 text-sm text-success-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]",children:l}),(0,w.jsx)("style",{children:`
28
28
  input {
29
29
  animation-name: onAutoFillCancel;
30
30
  }
@@ -33,12 +33,11 @@
33
33
  }
34
34
  @keyframes onAutoFillStart {}
35
35
  @keyframes onAutoFillCancel {}
36
- `})]})}var B=require("lucide-react"),le=require("react");var ke=require("lucide-react"),$=require("react");var I=require("react/jsx-runtime");function ee({show:t,setShow:r,title:a,Header:e,Body:n,footer:s}){let c=(0,$.useRef)(null),{handleEscape:l}=he(()=>r(!1));(0,$.useEffect)(()=>(t?(document.addEventListener("keydown",l),document.body.style.overflow="hidden"):document.body.style.overflow="unset",()=>document.removeEventListener("keydown",l)),[t,l]);let{handleClick:d}=ve(c,()=>r(!1));return(0,$.useEffect)(()=>(t&&document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)),[t,d]),(0,I.jsx)("div",{className:o("fixed inset-0 z-50 flex items-center justify-center p-4 bg-secondary-100/50 backdrop-blur-sm transition-all duration-500 ease-in-out",t?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),children:(0,I.jsxs)("div",{ref:c,className:o("relative w-full max-w-lg rounded-[7px] shadow-xl bg-secondary-50 text-gray-800","transform transition-all duration-500 ease-out",t?"opacity-100 scale-100":"opacity-0 scale-90"),children:[(e||a)&&(0,I.jsxs)("div",{className:"flex items-center justify-between px-6 py-4 border-b border-secondary-300",children:[e||(0,I.jsx)("h2",{className:"text-xl font-semibold text-gray-800",children:a}),(0,I.jsx)("button",{onClick:()=>r(!1),className:"text-gray-800 hover:text-secondary-300 active:animate-spin transition",children:(0,I.jsx)(ke.X,{className:"w-5 h-5"})})]}),n&&(0,I.jsx)("div",{className:"px-6 py-4 max-h-96 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300",children:n}),s&&(0,I.jsx)("div",{className:"flex items-center justify-end gap-3 px-6 py-4 border-t border-secondary-300",children:s})]})})}var te=require("lucide-react"),T=require("react/jsx-runtime");function re({totalItems:t,currentPage:r,perPage:a,onPageChange:e,onPerPageChange:n,siblingCount:s=1,perPageOptions:c=[10,20,30],showPerPage:l=!0}){let d=Math.ceil(t/a),g=(()=>{let u=s*2+5;if(d<=u)return Array.from({length:d},(k,M)=>M+1);let i=Math.max(r-s,2),m=Math.min(r+s,d-1),b=i>2,N=m<d-1,f=[1];b&&f.push("...");for(let k=i;k<=m;k++)f.push(k);return N&&f.push("..."),f.push(d),f})(),v=()=>{r>1&&e(r-1)},y=()=>{r<d&&e(r+1)};return(0,T.jsxs)("div",{className:"w-full flex flex-col md:flex-row md:justify-between md:items-center gap-4 py-4",children:[l&&n&&(0,T.jsx)("div",{className:"flex justify-center md:justify-start w-full md:w-auto",children:(0,T.jsx)("select",{value:a,onChange:u=>n(Number(u.target.value)),className:`border rounded-lg px-3 py-2 text-sm bg-white
36
+ `})]})}var A=require("lucide-react"),J=require("react");var ae=require("react/jsx-runtime");function $({className:e,variant:t="default",width:o="100%",height:r="1rem"}){return(0,ae.jsx)("div",{className:a("relative overflow-hidden bg-secondary-200 dark:bg-secondary-800","rounded-sm",t==="circle"&&"rounded-full",t==="rounded"&&"rounded-md",e),style:{width:typeof o=="number"?`${o}px`:o,height:typeof r=="number"?`${r}px`:r},children:(0,ae.jsx)("div",{className:"absolute inset-0 shimmer-mask"})})}var p=require("react/jsx-runtime");function oe({columns:e,data:t,loading:o=!1,variant:r="clean",skeletonRows:n=5,actions:s,noDataText:c}){let[l,d]=(0,J.useState)(null),x=(0,J.useMemo)(()=>!l||!l.direction?t:[...t].sort((i,m)=>{let b=i[l.key],N=m[l.key];return b<N?l.direction==="asc"?-1:1:b>N?l.direction==="asc"?1:-1:0}),[t,l]),g=i=>{i.sortable&&d(m=>!m||m.key!==i.key?{key:i.key,direction:"asc"}:m.direction==="asc"?{key:i.key,direction:"desc"}:m.direction==="desc"?{key:i.key,direction:null}:null)},h=i=>i.sortable?!l||l.key!==i.key||!l.direction?(0,p.jsx)(A.ArrowUpDown,{size:15,className:"opacity-40"}):l.direction==="asc"?(0,p.jsx)(A.ChevronUp,{size:15}):(0,p.jsx)(A.ChevronDown,{size:15}):null,y=a("w-full border-separate border-spacing-0 transition-all duration-300",r==="clean"&&"bg-white",r==="elevated"&&"bg-white shadow-lg",r==="bordered"&&"border border-secondary-200 rounded-lg"),u=i=>a("bg-secondary-50 text-secondary-800 text-sm font-semibold py-3 px-4 select-none","border-b border-secondary-200 transition-colors",i.align==="center"&&"text-center",i.align==="right"&&"text-right",i.sortable&&"cursor-pointer hover:bg-secondary-100/70");return(0,p.jsxs)("div",{className:"w-full space-y-3",children:[s&&(0,p.jsx)("div",{className:"flex justify-between items-center mb-2",children:s}),(0,p.jsx)("div",{className:"w-full overflow-x-auto rounded-lg",children:(0,p.jsxs)("table",{className:y,children:[(0,p.jsx)("thead",{children:(0,p.jsx)("tr",{children:e.map((i,m)=>(0,p.jsx)("th",{onClick:()=>g(i),className:a(u(i),m===0&&"rounded-tl-lg",m===e.length-1&&"rounded-tr-lg"),style:{width:i.width},children:(0,p.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,p.jsx)("span",{className:"truncate",children:i.title}),h(i)]})},String(i.key)))})}),(0,p.jsx)("tbody",{children:o?Array.from({length:n}).map((i,m)=>(0,p.jsx)("tr",{children:e.map((b,N)=>(0,p.jsx)("td",{className:"px-4 py-3",children:(0,p.jsx)($,{height:18,variant:"rounded"})},N))},m)):x.map((i,m)=>(0,p.jsx)("tr",{className:a("border-b border-secondary-100 transition-all duration-200"),children:e.map((b,N)=>(0,p.jsx)("td",{className:a("px-4 py-3 text-sm text-gray-800",b.align==="center"&&"text-center",b.align==="right"&&"text-right"),children:b.render?b.render(i[b.key],i):String(i[b.key])},N))},m))})]})}),!o&&x.length===0&&(0,p.jsxs)("div",{className:"flex flex-col items-center justify-center py-10 text-gray-500 dark:text-gray-400 animate-[fadeIn_0.4s_ease-in-out]",children:[(0,p.jsxs)("div",{className:"relative",children:[(0,p.jsx)(A.Box,{size:64,className:"mb-3 text-secondary-400 dark:text-secondary-500 opacity-80 animate-[float_2.5s_ease-in-out_infinite]"}),(0,p.jsx)("div",{className:"absolute inset-0 blur-2xl bg-secondary-200/20 dark:bg-secondary-700/20 rounded-full scale-75 animate-[pulse_3s_ease-in-out_infinite]"})]}),(0,p.jsx)("p",{className:"text-sm font-medium animate-[fadeUp_0.6s_ease-out]",children:c})]})]})}var he=require("lucide-react"),j=require("react");var I=require("react/jsx-runtime");function se({show:e,setShow:t,title:o,Header:r,Body:n,footer:s}){let c=(0,j.useRef)(null),{handleEscape:l}=ge(()=>t(!1));(0,j.useEffect)(()=>(e?(document.addEventListener("keydown",l),document.body.style.overflow="hidden"):document.body.style.overflow="unset",()=>document.removeEventListener("keydown",l)),[e,l]);let{handleClick:d}=ye(c,()=>t(!1));return(0,j.useEffect)(()=>(e&&document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)),[e,d]),(0,I.jsx)("div",{className:a("fixed inset-0 z-50 flex items-center justify-center p-4 bg-secondary-100/50 backdrop-blur-sm transition-all duration-500 ease-in-out",e?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),children:(0,I.jsxs)("div",{ref:c,className:a("relative w-full max-w-lg rounded-[7px] shadow-xl bg-secondary-50 text-gray-800","transform transition-all duration-500 ease-out",e?"opacity-100 scale-100":"opacity-0 scale-90"),children:[(r||o)&&(0,I.jsxs)("div",{className:"flex items-center justify-between px-6 py-4 border-b border-secondary-300",children:[r||(0,I.jsx)("h2",{className:"text-xl font-semibold text-gray-800",children:o}),(0,I.jsx)("button",{onClick:()=>t(!1),className:"text-gray-800 hover:text-secondary-300 active:animate-spin transition",children:(0,I.jsx)(he.X,{className:"w-5 h-5"})})]}),n&&(0,I.jsx)("div",{className:"px-6 py-4 max-h-96 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300",children:n}),s&&(0,I.jsx)("div",{className:"flex items-center justify-end gap-3 px-6 py-4 border-t border-secondary-300",children:s})]})})}var Q=require("lucide-react"),T=require("react/jsx-runtime");function ne({totalItems:e,currentPage:t,perPage:o,onPageChange:r,onPerPageChange:n,siblingCount:s=1,perPageOptions:c=[10,20,30],showPerPage:l=!0}){let d=Math.ceil(e/o),g=(()=>{let u=s*2+5;if(d<=u)return Array.from({length:d},(k,M)=>M+1);let i=Math.max(t-s,2),m=Math.min(t+s,d-1),b=i>2,N=m<d-1,f=[1];b&&f.push("...");for(let k=i;k<=m;k++)f.push(k);return N&&f.push("..."),f.push(d),f})(),h=()=>{t>1&&r(t-1)},y=()=>{t<d&&r(t+1)};return(0,T.jsxs)("div",{className:"w-full flex flex-col md:flex-row md:justify-between md:items-center gap-4 py-4",children:[l&&n&&(0,T.jsx)("div",{className:"flex justify-center md:justify-start w-full md:w-auto",children:(0,T.jsx)("select",{value:o,onChange:u=>n(Number(u.target.value)),className:`border rounded-lg px-3 py-2 text-sm bg-white
37
37
  hover:border-secondary-500
38
38
  focus:outline-none focus:ring-2 focus:ring-secondary-500
39
- transition-all duration-200`,children:c.map(u=>(0,T.jsxs)("option",{value:u,children:[u," / page"]},u))})}),(0,T.jsxs)("div",{className:"flex items-center justify-center md:justify-end w-full",children:[(0,T.jsx)("button",{onClick:v,disabled:r===1,className:`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200
40
- ${r===1?"opacity-40 cursor-not-allowed":"hover:bg-secondary-100 hover:text-secondary-700"}`,children:(0,T.jsx)(te.ChevronLeft,{size:18})}),(0,T.jsx)("div",{className:"flex items-center gap-1 mx-2",children:g.map((u,i)=>(0,T.jsx)("button",{onClick:()=>typeof u=="number"&&e(u),disabled:u==="...",className:`min-w-[40px] rounded-xl border px-3 py-2 text-sm font-medium transition-all duration-200
41
- ${u===r?"bg-secondary-500 text-white shadow-md":u==="..."?"cursor-default border-none text-gray-400":"bg-white text-secondary-700 hover:bg-secondary-100"}`,children:u},i))}),(0,T.jsx)("button",{onClick:y,disabled:r===d,className:`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200
42
- ${r===d?"opacity-40 cursor-not-allowed":"hover:bg-secondary-100 hover:text-secondary-700"}`,children:(0,T.jsx)(te.ChevronRight,{size:18})})]})]})}var de=require("react/jsx-runtime");function O({className:t,variant:r="default",width:a="100%",height:e="1rem"}){return(0,de.jsx)("div",{className:o("relative overflow-hidden bg-secondary-200 dark:bg-secondary-800","rounded-sm",r==="circle"&&"rounded-full",r==="rounded"&&"rounded-md",t),style:{width:typeof a=="number"?`${a}px`:a,height:typeof e=="number"?`${e}px`:e},children:(0,de.jsx)("div",{className:"absolute inset-0 shimmer-mask"})})}var H=require("react");var P=require("react/jsx-runtime");function ae({tabs:t,defaultTab:r,position:a="top",variant:e="primary",className:n,onChange:s}){var b,N;let[c,l]=(0,H.useState)(r||((b=t[0])==null?void 0:b.id)),[d,x]=(0,H.useState)({}),g=(0,H.useRef)([]);(0,H.useEffect)(()=>{let f=t.findIndex(M=>M.id===c),k=g.current[f];if(k){let{offsetLeft:M,offsetTop:F,offsetWidth:j,offsetHeight:U}=k;x({left:M,top:F,width:j,height:U,transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)"})}},[c,a,t]);let v={top:"flex-col",bottom:"flex-col-reverse",left:"flex-row",right:"flex-row-reverse"},y={top:"flex-row",bottom:"flex-row",left:"flex-col",right:"flex-col"},u={top:"mt-6",bottom:"mb-6",left:"ml-6",right:"mr-6"},i={primary:{active:"text-secondary-600",inactive:"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",disabled:"text-gray-300 dark:text-gray-600 cursor-not-allowed",bg:"bg-secondary-100 dark:bg-secondary-900"},secondary:{active:"text-accent-600",inactive:"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",disabled:"text-gray-300 dark:text-gray-600 cursor-not-allowed",bg:"bg-accent-100 dark:bg-accent-900"},accent:{active:"text-gray-800 dark:text-gray-200",inactive:"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",disabled:"text-gray-300 dark:text-gray-600 cursor-not-allowed",bg:"bg-gray-100 dark:bg-gray-800"}},m=a==="left"||a==="right";return(0,P.jsxs)("div",{className:o("flex w-full",v[a],n),children:[(0,P.jsxs)("div",{className:o("flex relative bg-gray-50 dark:bg-gray-900 rounded-lg p-1",y[a],m?"min-w-48":"w-full"),children:[(0,P.jsx)("div",{className:o("absolute rounded-md transition-all duration-300 ease-out",i[e].bg,m?"w-full":"h-full"),style:d}),t.map((f,k)=>{let M=c===f.id,F=i[e];return(0,P.jsxs)("button",{ref:j=>{g.current[k]=j},onClick:()=>{f.disabled||(l(f.id),s==null||s(f.id))},disabled:f.disabled,className:o("relative flex items-center justify-center gap-2 px-4 py-3 font-medium","text-sm whitespace-nowrap transition-all duration-200 z-10","focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500","rounded-md",M?[F.active,"font-semibold"]:[F.inactive,"hover:bg-white/50 dark:hover:bg-gray-800/50"],f.disabled&&F.disabled,m?"w-full justify-start":"flex-1"),children:[f.icon&&(0,P.jsx)("span",{className:o("flex-shrink-0 transition-transform duration-200",M&&"scale-110"),children:f.icon}),(0,P.jsx)("span",{className:"relative z-10",children:f.label})]},f.id)})]}),(0,P.jsx)("div",{className:o("flex-1 overflow-hidden",u[a]),children:(0,P.jsx)("div",{className:"animate-fade-in",children:(N=t.find(f=>f.id===c))==null?void 0:N.content},c)})]})}function me({children:t,className:r}){return(0,P.jsx)("div",{className:o("p-6 rounded-lg bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700",r),children:t})}var Te=require("lucide-react");var A=require("react/jsx-runtime"),He={sm:"text-xs px-2 py-0.5",md:"text-sm px-3 py-1",lg:"text-base px-4 py-1.5"},ue={sm:"w-3 h-3",md:"w-4 h-4",lg:"w-5 h-5"},Ve={default:"bg-gray-100 text-gray-800 border border-gray-200 dark:bg-gray-800 dark:text-gray-100 dark:border-gray-700",secondary:"bg-secondary-100 text-secondary-800 border border-secondary-200 dark:bg-secondary-800 dark:text-secondary-50 dark:border-secondary-700",success:"bg-success-100 text-success-800 border border-success-200 dark:bg-success-800 dark:text-success-50 dark:border-success-700",error:"bg-error-100 text-error-800 border border-error-200 dark:bg-error-800 dark:text-error-50 dark:border-error-700",info:"bg-info-100 text-info-800 border border-info-200 dark:bg-info-800 dark:text-info-50 dark:border-info-700",accent:"bg-accent-100 text-accent-800 border border-accent-200 dark:bg-accent-800 dark:text-accent-50 dark:border-accent-700"};function oe({children:t,variant:r="default",size:a="md",icon:e,iconPosition:n="left",closable:s=!1,onClose:c,className:l}){return(0,A.jsxs)("span",{className:o("inline-flex items-center font-medium animate-[fadeIn_0.3s_ease-out] rounded-[7px]",He[a],Ve[r],e&&"gap-1.5",l),children:[e&&n==="left"&&(0,A.jsx)("span",{className:`flex items-center ${o(ue[a])}`,children:e}),(0,A.jsx)("span",{children:t}),e&&n==="right"&&(0,A.jsx)("span",{className:`flex items-center ${o(ue[a])}`,children:e}),s&&(0,A.jsx)("button",{type:"button",onClick:c,className:"ml-1 rounded-full p-0.5 hover:bg-black/10 dark:hover:bg-white/10 transition-colors",children:(0,A.jsx)(Te.X,{className:o(ue[a])})})]})}var Ce=require("react");var V=require("react/jsx-runtime");function se({label:t,placeholder:r,value:a="",onChange:e,required:n=!1,disabled:s=!1,error:c,className:l,rows:d=4}){let[x,g]=(0,Ce.useState)(!1),v=x||a.length>0;return(0,V.jsxs)("div",{className:"relative w-full",children:[t&&(0,V.jsxs)("label",{className:o("absolute left-3 top-2 text-gray-500 dark:text-gray-400 transition-all duration-200 pointer-events-none",v?"text-xs -translate-y-3 bg-white dark:bg-gray-900 px-1":"text-sm translate-y-0"),children:[t,n&&(0,V.jsx)("span",{className:"text-error-500 ml-0.5",children:"*"})]}),(0,V.jsx)("textarea",{rows:d,placeholder:t?void 0:r,value:a,onChange:y=>e==null?void 0:e(y.target.value),onFocus:()=>g(!0),onBlur:()=>g(!1),disabled:s,className:o("w-full rounded-md border border-gray-300 dark:border-gray-700 bg-transparent text-gray-900 dark:text-gray-100 px-3 py-2 outline-none transition-all resize-none","focus:border-primary-500 focus:ring-1 focus:ring-primary-500",s&&"opacity-50 cursor-not-allowed",c&&"border-error-500 focus:ring-error-500 focus:border-error-500",t&&"pt-5",l)}),c&&(0,V.jsx)("p",{className:"mt-1 text-sm text-error-500",children:c})]})}var C=require("lucide-react"),W=require("react");var h=require("react/jsx-runtime");function Re({id:t=Math.random().toString(36),title:r,description:a,type:e="info",duration:n=5e3,position:s="top-right",onClose:c,action:l}){let[d,x]=(0,W.useState)(!1),[g,v]=(0,W.useState)(!1);(0,W.useEffect)(()=>{let f=setTimeout(()=>x(!0),100);if(n!==1/0){let k=setTimeout(()=>y(),n);return()=>{clearTimeout(f),clearTimeout(k)}}return()=>clearTimeout(f)},[n]);let y=()=>{v(!0),setTimeout(()=>{x(!1),c==null||c(t)},300)},u=()=>{l==null||l.onClick(),y()},i={success:(0,h.jsx)(C.CheckCircle2,{className:"w-5 h-5"}),error:(0,h.jsx)(C.XCircle,{className:"w-5 h-5"}),warning:(0,h.jsx)(C.AlertCircle,{className:"w-5 h-5"}),info:(0,h.jsx)(C.Info,{className:"w-5 h-5"}),loading:(0,h.jsx)(C.Loader2,{className:"w-5 h-5 animate-spin"})},m={success:"bg-success-50 border-success-200 text-success-800",error:"bg-error-50 border-error-200 text-error-800",warning:"bg-secondary-50 border-secondary-200 text-secondary-800",info:"bg-info-50 border-info-200 text-info-800",loading:"bg-gray-50 border-gray-200 text-gray-800"},b={success:"text-success-600",error:"text-error-600",warning:"text-secondary-600",info:"text-info-600",loading:"text-gray-600"},N={"top-right":"top-4 right-4","top-left":"top-4 left-4","bottom-right":"bottom-4 right-4","bottom-left":"bottom-4 left-4","top-center":"top-4 left-1/2 -translate-x-1/2","bottom-center":"bottom-4 left-1/2 -translate-x-1/2"};return d?(0,h.jsx)("div",{className:o("fixed z-50 transform transition-all duration-300",N[s],g?"opacity-0 scale-95":"opacity-100 scale-100",s.includes("top")&&!g&&"animate-slide-down",s.includes("bottom")&&!g&&"animate-slide-up"),children:(0,h.jsxs)("div",{className:o("flex items-start gap-3 p-4 rounded-lg border shadow-lg max-w-sm","backdrop-blur-sm bg-white/95",m[e]),children:[(0,h.jsx)("div",{className:o("flex-shrink-0 mt-0.5",b[e]),children:i[e]}),(0,h.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,h.jsx)("h4",{className:"font-semibold text-sm mb-1",children:r}),a&&(0,h.jsx)("p",{className:"text-sm opacity-90",children:a}),l&&(0,h.jsx)("button",{onClick:u,className:"mt-2 text-sm font-medium underline underline-offset-2 hover:no-underline",children:l.label})]}),(0,h.jsx)("button",{onClick:y,className:"flex-shrink-0 p-1 rounded-full hover:bg-black/5 transition-colors",children:(0,h.jsx)(C.X,{className:"w-4 h-4"})})]})}):null}var X=require("react/jsx-runtime");function fe({toasts:t,onRemove:r,position:a="top-right"}){return(0,X.jsx)(X.Fragment,{children:t.map(e=>(0,X.jsx)(Re,{...e,onClose:r,position:a},e.id))})}var K=require("react/jsx-runtime");function ne({content:t,children:r,position:a="top",delay:e=200,className:n}){let s={top:"bottom-full left-1/2 -translate-x-1/2 mb-2",bottom:"top-full left-1/2 -translate-x-1/2 mt-2",left:"right-full top-1/2 -translate-y-1/2 mr-2",right:"left-full top-1/2 -translate-y-1/2 ml-2"},c={top:"left-1/2 -translate-x-1/2 top-full",bottom:"left-1/2 -translate-x-1/2 bottom-full",left:"top-1/2 -translate-y-1/2 left-full",right:"top-1/2 -translate-y-1/2 right-full"};return(0,K.jsxs)("div",{className:"relative inline-block group",children:[r,(0,K.jsxs)("div",{className:o("absolute z-50 whitespace-nowrap rounded-md bg-gray-800 text-white text-xs px-2 py-1 shadow-md dark:bg-gray-900","transition-all opacity-0 scale-95 group-hover:opacity-100 group-hover:scale-100","group-hover:delay-200 duration-200 ease-out",s[a],n),style:{transitionDelay:`${e}ms`},children:[t,(0,K.jsx)("span",{className:o("absolute w-2 h-2 bg-gray-800 dark:bg-gray-900 rotate-45",c[a])})]})]})}var p=require("react/jsx-runtime");function ie({columns:t,data:r,loading:a=!1,variant:e="clean",skeletonRows:n=5,actions:s,noDataText:c}){let[l,d]=(0,le.useState)(null),x=(0,le.useMemo)(()=>!l||!l.direction?r:[...r].sort((i,m)=>{let b=i[l.key],N=m[l.key];return b<N?l.direction==="asc"?-1:1:b>N?l.direction==="asc"?1:-1:0}),[r,l]),g=i=>{i.sortable&&d(m=>!m||m.key!==i.key?{key:i.key,direction:"asc"}:m.direction==="asc"?{key:i.key,direction:"desc"}:m.direction==="desc"?{key:i.key,direction:null}:null)},v=i=>i.sortable?!l||l.key!==i.key||!l.direction?(0,p.jsx)(B.ArrowUpDown,{size:15,className:"opacity-40"}):l.direction==="asc"?(0,p.jsx)(B.ChevronUp,{size:15}):(0,p.jsx)(B.ChevronDown,{size:15}):null,y=o("w-full border-separate border-spacing-0 transition-all duration-300",e==="clean"&&"bg-white",e==="elevated"&&"bg-white shadow-lg",e==="bordered"&&"border border-secondary-200 rounded-lg"),u=i=>o("bg-secondary-50 text-secondary-800 text-sm font-semibold py-3 px-4 select-none","border-b border-secondary-200 transition-colors",i.align==="center"&&"text-center",i.align==="right"&&"text-right",i.sortable&&"cursor-pointer hover:bg-secondary-100/70");return(0,p.jsxs)("div",{className:"w-full space-y-3",children:[s&&(0,p.jsx)("div",{className:"flex justify-between items-center mb-2",children:s}),(0,p.jsx)("div",{className:"w-full overflow-x-auto rounded-lg",children:(0,p.jsxs)("table",{className:y,children:[(0,p.jsx)("thead",{children:(0,p.jsx)("tr",{children:t.map((i,m)=>(0,p.jsx)("th",{onClick:()=>g(i),className:o(u(i),m===0&&"rounded-tl-lg",m===t.length-1&&"rounded-tr-lg"),style:{width:i.width},children:(0,p.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,p.jsx)("span",{className:"truncate",children:i.title}),v(i)]})},String(i.key)))})}),(0,p.jsx)("tbody",{children:a?Array.from({length:n}).map((i,m)=>(0,p.jsx)("tr",{children:t.map((b,N)=>(0,p.jsx)("td",{className:"px-4 py-3",children:(0,p.jsx)(O,{height:18,variant:"rounded"})},N))},m)):x.map((i,m)=>(0,p.jsx)("tr",{className:o("border-b border-secondary-100 transition-all duration-200"),children:t.map((b,N)=>(0,p.jsx)("td",{className:o("px-4 py-3 text-sm text-gray-800",b.align==="center"&&"text-center",b.align==="right"&&"text-right"),children:b.render?b.render(i[b.key],i):String(i[b.key])},N))},m))})]})}),!a&&x.length===0&&(0,p.jsxs)("div",{className:"flex flex-col items-center justify-center py-10 text-gray-500 dark:text-gray-400 animate-[fadeIn_0.4s_ease-in-out]",children:[(0,p.jsxs)("div",{className:"relative",children:[(0,p.jsx)(B.Box,{size:64,className:"mb-3 text-secondary-400 dark:text-secondary-500 opacity-80 animate-[float_2.5s_ease-in-out_infinite]"}),(0,p.jsx)("div",{className:"absolute inset-0 blur-2xl bg-secondary-200/20 dark:bg-secondary-700/20 rounded-full scale-75 animate-[pulse_3s_ease-in-out_infinite]"})]}),(0,p.jsx)("p",{className:"text-sm font-medium animate-[fadeUp_0.6s_ease-out]",children:c})]})]})}function pe(t,{insertAt:r}={}){if(!t||typeof document>"u")return;let a=document.head||document.getElementsByTagName("head")[0],e=document.createElement("style");e.type="text/css",r==="top"&&a.firstChild?a.insertBefore(e,a.firstChild):a.appendChild(e),e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}pe(`@import"./tailwind-config.css";*{box-sizing:border-box}html,body{font-family:system-ui,Avenir,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}button{cursor:pointer}a{text-decoration:none;color:inherit}ul,ol{list-style:none;padding:0}input,textarea,button,select{font:inherit;outline:none}
43
- `);0&&(module.exports={Breadcrumb,Button,Collapse,InputMain,MciTable,Modal,Pagination,Skeleton,TabPanel,Tabs,Tag,Textarea,ToastContainer,Tooltip});
39
+ transition-all duration-200`,children:c.map(u=>(0,T.jsxs)("option",{value:u,children:[u," / page"]},u))})}),(0,T.jsxs)("div",{className:"flex items-center justify-center md:justify-end w-full",children:[(0,T.jsx)("button",{onClick:h,disabled:t===1,className:`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200
40
+ ${t===1?"opacity-40 cursor-not-allowed":"hover:bg-secondary-100 hover:text-secondary-700"}`,children:(0,T.jsx)(Q.ChevronLeft,{size:18})}),(0,T.jsx)("div",{className:"flex items-center gap-1 mx-2",children:g.map((u,i)=>(0,T.jsx)("button",{onClick:()=>typeof u=="number"&&r(u),disabled:u==="...",className:`min-w-[40px] rounded-xl border px-3 py-2 text-sm font-medium transition-all duration-200
41
+ ${u===t?"bg-secondary-500 text-white shadow-md":u==="..."?"cursor-default border-none text-gray-400":"bg-white text-secondary-700 hover:bg-secondary-100"}`,children:u},i))}),(0,T.jsx)("button",{onClick:y,disabled:t===d,className:`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200
42
+ ${t===d?"opacity-40 cursor-not-allowed":"hover:bg-secondary-100 hover:text-secondary-700"}`,children:(0,T.jsx)(Q.ChevronRight,{size:18})})]})]})}var V=require("react");var P=require("react/jsx-runtime");function ie({tabs:e,defaultTab:t,position:o="top",variant:r="primary",className:n,onChange:s}){var b,N;let[c,l]=(0,V.useState)(t||((b=e[0])==null?void 0:b.id)),[d,x]=(0,V.useState)({}),g=(0,V.useRef)([]);(0,V.useEffect)(()=>{let f=e.findIndex(M=>M.id===c),k=g.current[f];if(k){let{offsetLeft:M,offsetTop:B,offsetWidth:O,offsetHeight:U}=k;x({left:M,top:B,width:O,height:U,transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)"})}},[c,o,e]);let h={top:"flex-col",bottom:"flex-col-reverse",left:"flex-row",right:"flex-row-reverse"},y={top:"flex-row",bottom:"flex-row",left:"flex-col",right:"flex-col"},u={top:"mt-6",bottom:"mb-6",left:"ml-6",right:"mr-6"},i={primary:{active:"text-secondary-600",inactive:"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",disabled:"text-gray-300 dark:text-gray-600 cursor-not-allowed",bg:"bg-secondary-100 dark:bg-secondary-900"},secondary:{active:"text-accent-600",inactive:"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",disabled:"text-gray-300 dark:text-gray-600 cursor-not-allowed",bg:"bg-accent-100 dark:bg-accent-900"},accent:{active:"text-gray-800 dark:text-gray-200",inactive:"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",disabled:"text-gray-300 dark:text-gray-600 cursor-not-allowed",bg:"bg-gray-100 dark:bg-gray-800"}},m=o==="left"||o==="right";return(0,P.jsxs)("div",{className:a("flex w-full",h[o],n),children:[(0,P.jsxs)("div",{className:a("flex relative bg-gray-50 dark:bg-gray-900 rounded-lg p-1",y[o],m?"min-w-48":"w-full"),children:[(0,P.jsx)("div",{className:a("absolute rounded-md transition-all duration-300 ease-out",i[r].bg,m?"w-full":"h-full"),style:d}),e.map((f,k)=>{let M=c===f.id,B=i[r];return(0,P.jsxs)("button",{ref:O=>{g.current[k]=O},onClick:()=>{f.disabled||(l(f.id),s==null||s(f.id))},disabled:f.disabled,className:a("relative flex items-center justify-center gap-2 px-4 py-3 font-medium","text-sm whitespace-nowrap transition-all duration-200 z-10","focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500","rounded-md",M?[B.active,"font-semibold"]:[B.inactive,"hover:bg-white/50 dark:hover:bg-gray-800/50"],f.disabled&&B.disabled,m?"w-full justify-start":"flex-1"),children:[f.icon&&(0,P.jsx)("span",{className:a("flex-shrink-0 transition-transform duration-200",M&&"scale-110"),children:f.icon}),(0,P.jsx)("span",{className:"relative z-10",children:f.label})]},f.id)})]}),(0,P.jsx)("div",{className:a("flex-1 overflow-hidden",u[o]),children:(0,P.jsx)("div",{className:"animate-fade-in",children:(N=e.find(f=>f.id===c))==null?void 0:N.content},c)})]})}function Ne({children:e,className:t}){return(0,P.jsx)("div",{className:a("p-6 rounded-lg bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700",t),children:e})}var we=require("lucide-react");var F=require("react/jsx-runtime"),He={sm:"text-xs px-2 py-0.5",md:"text-sm px-3 py-1",lg:"text-base px-4 py-1.5"},le={sm:"w-3 h-3",md:"w-4 h-4",lg:"w-5 h-5"},Ve={default:"bg-gray-100 text-gray-800 border border-gray-200 dark:bg-gray-800 dark:text-gray-100 dark:border-gray-700",secondary:"bg-secondary-100 text-secondary-800 border border-secondary-200 dark:bg-secondary-800 dark:text-secondary-50 dark:border-secondary-700",success:"bg-success-100 text-success-800 border border-success-200 dark:bg-success-800 dark:text-success-50 dark:border-success-700",error:"bg-error-100 text-error-800 border border-error-200 dark:bg-error-800 dark:text-error-50 dark:border-error-700",info:"bg-info-100 text-info-800 border border-info-200 dark:bg-info-800 dark:text-info-50 dark:border-info-700",accent:"bg-accent-100 text-accent-800 border border-accent-200 dark:bg-accent-800 dark:text-accent-50 dark:border-accent-700"};function ce({children:e,variant:t="default",size:o="md",icon:r,iconPosition:n="left",closable:s=!1,onClose:c,className:l}){return(0,F.jsxs)("span",{className:a("inline-flex items-center font-medium animate-[fadeIn_0.3s_ease-out] rounded-[7px]",He[o],Ve[t],r&&"gap-1.5",l),children:[r&&n==="left"&&(0,F.jsx)("span",{className:`flex items-center ${a(le[o])}`,children:r}),(0,F.jsx)("span",{children:e}),r&&n==="right"&&(0,F.jsx)("span",{className:`flex items-center ${a(le[o])}`,children:r}),s&&(0,F.jsx)("button",{type:"button",onClick:c,className:"ml-1 rounded-full p-0.5 hover:bg-black/10 dark:hover:bg-white/10 transition-colors",children:(0,F.jsx)(we.X,{className:a(le[o])})})]})}var ke=require("react");var z=require("react/jsx-runtime");function de({label:e,placeholder:t,value:o="",onChange:r,required:n=!1,disabled:s=!1,error:c,className:l,rows:d=4}){let[x,g]=(0,ke.useState)(!1),h=x||o.length>0;return(0,z.jsxs)("div",{className:"relative w-full",children:[e&&(0,z.jsxs)("label",{className:a("absolute left-3 top-2 text-gray-500 dark:text-gray-400 transition-all duration-200 pointer-events-none",h?"text-xs -translate-y-3 bg-white dark:bg-gray-900 px-1":"text-sm translate-y-0"),children:[e,n&&(0,z.jsx)("span",{className:"text-error-500 ml-0.5",children:"*"})]}),(0,z.jsx)("textarea",{rows:d,placeholder:e?void 0:t,value:o,onChange:y=>r==null?void 0:r(y.target.value),onFocus:()=>g(!0),onBlur:()=>g(!1),disabled:s,className:a("w-full rounded-md border border-gray-300 dark:border-gray-700 bg-transparent text-gray-900 dark:text-gray-100 px-3 py-2 outline-none transition-all resize-none","focus:border-primary-500 focus:ring-1 focus:ring-primary-500",s&&"opacity-50 cursor-not-allowed",c&&"border-error-500 focus:ring-error-500 focus:border-error-500",e&&"pt-5",l)}),c&&(0,z.jsx)("p",{className:"mt-1 text-sm text-error-500",children:c})]})}var C=require("lucide-react"),W=require("react");var v=require("react/jsx-runtime");function Te({id:e=Math.random().toString(36),title:t,description:o,type:r="info",duration:n=5e3,position:s="top-right",onClose:c,action:l}){let[d,x]=(0,W.useState)(!1),[g,h]=(0,W.useState)(!1);(0,W.useEffect)(()=>{let f=setTimeout(()=>x(!0),100);if(n!==1/0){let k=setTimeout(()=>y(),n);return()=>{clearTimeout(f),clearTimeout(k)}}return()=>clearTimeout(f)},[n]);let y=()=>{h(!0),setTimeout(()=>{x(!1),c==null||c(e)},300)},u=()=>{l==null||l.onClick(),y()},i={success:(0,v.jsx)(C.CheckCircle2,{className:"w-5 h-5"}),error:(0,v.jsx)(C.XCircle,{className:"w-5 h-5"}),warning:(0,v.jsx)(C.AlertCircle,{className:"w-5 h-5"}),info:(0,v.jsx)(C.Info,{className:"w-5 h-5"}),loading:(0,v.jsx)(C.Loader2,{className:"w-5 h-5 animate-spin"})},m={success:"bg-success-50 border-success-200 text-success-800",error:"bg-error-50 border-error-200 text-error-800",warning:"bg-secondary-50 border-secondary-200 text-secondary-800",info:"bg-info-50 border-info-200 text-info-800",loading:"bg-gray-50 border-gray-200 text-gray-800"},b={success:"text-success-600",error:"text-error-600",warning:"text-secondary-600",info:"text-info-600",loading:"text-gray-600"},N={"top-right":"top-4 right-4","top-left":"top-4 left-4","bottom-right":"bottom-4 right-4","bottom-left":"bottom-4 left-4","top-center":"top-4 left-1/2 -translate-x-1/2","bottom-center":"bottom-4 left-1/2 -translate-x-1/2"};return d?(0,v.jsx)("div",{className:a("fixed z-50 transform transition-all duration-300",N[s],g?"opacity-0 scale-95":"opacity-100 scale-100",s.includes("top")&&!g&&"animate-slide-down",s.includes("bottom")&&!g&&"animate-slide-up"),children:(0,v.jsxs)("div",{className:a("flex items-start gap-3 p-4 rounded-lg border shadow-lg max-w-sm","backdrop-blur-sm bg-white/95",m[r]),children:[(0,v.jsx)("div",{className:a("flex-shrink-0 mt-0.5",b[r]),children:i[r]}),(0,v.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,v.jsx)("h4",{className:"font-semibold text-sm mb-1",children:t}),o&&(0,v.jsx)("p",{className:"text-sm opacity-90",children:o}),l&&(0,v.jsx)("button",{onClick:u,className:"mt-2 text-sm font-medium underline underline-offset-2 hover:no-underline",children:l.label})]}),(0,v.jsx)("button",{onClick:y,className:"flex-shrink-0 p-1 rounded-full hover:bg-black/5 transition-colors",children:(0,v.jsx)(C.X,{className:"w-4 h-4"})})]})}):null}var X=require("react/jsx-runtime");function Ce({toasts:e,onRemove:t,position:o="top-right"}){return(0,X.jsx)(X.Fragment,{children:e.map(r=>(0,X.jsx)(Te,{...r,onClose:t,position:o},r.id))})}var K=require("react/jsx-runtime");function me({content:e,children:t,position:o="top",delay:r=200,className:n}){let s={top:"bottom-full left-1/2 -translate-x-1/2 mb-2",bottom:"top-full left-1/2 -translate-x-1/2 mt-2",left:"right-full top-1/2 -translate-y-1/2 mr-2",right:"left-full top-1/2 -translate-y-1/2 ml-2"},c={top:"left-1/2 -translate-x-1/2 top-full",bottom:"left-1/2 -translate-x-1/2 bottom-full",left:"top-1/2 -translate-y-1/2 left-full",right:"top-1/2 -translate-y-1/2 right-full"};return(0,K.jsxs)("div",{className:"relative inline-block group",children:[t,(0,K.jsxs)("div",{className:a("absolute z-50 whitespace-nowrap rounded-md bg-gray-800 text-white text-xs px-2 py-1 shadow-md dark:bg-gray-900","transition-all opacity-0 scale-95 group-hover:opacity-100 group-hover:scale-100","group-hover:delay-200 duration-200 ease-out",s[o],n),style:{transitionDelay:`${r}ms`},children:[e,(0,K.jsx)("span",{className:a("absolute w-2 h-2 bg-gray-800 dark:bg-gray-900 rotate-45",c[o])})]})]})}0&&(module.exports={Breadcrumb,Button,Collapse,InputMain,MciTable,Modal,Pagination,Skeleton,TabPanel,Tabs,Tag,Textarea,ToastContainer,Tooltip});
44
43
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/shared/ui/breadcrumb/Breadcrumb.tsx","../src/shared/lib/utils.ts","../src/shared/ui/button/Button.tsx","../src/shared/ui/collapse/Collapse.tsx","../src/shared/ui/inputMain/InputMain.tsx","../src/shared/ui/mciTable/MciTable.tsx","../src/shared/ui/modal/Modal.tsx","../src/shared/ui/pagination/Pagination.tsx","../src/shared/ui/skeleton/Skeleton.tsx","../src/shared/ui/tabs/Tabs.tsx","../src/shared/ui/tag/Tag.tsx","../src/shared/ui/textarea/Textarea.tsx","../src/shared/ui/toast/Toast.tsx","../src/shared/ui/toast/ToastContainer.tsx","../src/shared/ui/tooltip/Tooltip.tsx","#style-inject:#style-inject","../src/styles/index.css"],"sourcesContent":["import Breadcrumb from './shared/ui/breadcrumb/Breadcrumb.tsx'\nimport Button from './shared/ui/button/Button.tsx'\nimport Collapse from './shared/ui/collapse/Collapse.tsx'\nimport InputMain from './shared/ui/inputMain/InputMain.tsx'\nimport MciTable from './shared/ui/mciTable/MciTable.tsx'\nimport Modal from './shared/ui/modal/Modal.tsx'\nimport Pagination from './shared/ui/pagination/Pagination.tsx'\nimport Skeleton from './shared/ui/skeleton/Skeleton.tsx'\nimport Tabs, {TabPanel} from './shared/ui/tabs/Tabs.tsx'\nimport Tag from './shared/ui/tag/Tag.tsx'\nimport Textarea from './shared/ui/textarea/Textarea.tsx'\nimport {ToastContainer} from './shared/ui/toast/ToastContainer.tsx'\nimport Tooltip from './shared/ui/tooltip/Tooltip.tsx'\nimport './styles/index.css'\n\nexport {\n Breadcrumb,\n Button,\n Collapse,\n InputMain,\n MciTable,\n Modal,\n Pagination,\n Skeleton,\n TabPanel,\n Tabs,\n Tag,\n Textarea,\n ToastContainer,\n Tooltip,\n}\n","import { ChevronRight } from 'lucide-react'\nimport React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype BreadcrumbItem = {\n\tlabel: string\n\thref?: string\n\tonClick?: () => void\n}\n\ntype BreadcrumbProps = {\n\titems: BreadcrumbItem[]\n\tclassName?: string\n\tseparatorIcon?: React.ReactNode\n}\n\nexport default function Breadcrumb({\n\titems,\n\tclassName,\n\tseparatorIcon = (\n\t\t<ChevronRight className='w-4 h-4 text-gray-400 dark:text-gray-500' />\n\t),\n}: BreadcrumbProps) {\n\treturn (\n\t\t<nav\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center space-x-2 text-sm font-medium text-gray-600 dark:text-gray-300',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label='Breadcrumb'\n\t\t>\n\t\t\t{items.map((item, index) => {\n\t\t\t\tconst isLast = index === items.length - 1\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={index} className='flex items-center'>\n\t\t\t\t\t\t{item.href ? (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\t\tonClick={item.onClick}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'hover:text-primary-600 dark:hover:text-primary-400 transition-colors',\n\t\t\t\t\t\t\t\t\tisLast && 'text-primary-600 dark:text-primary-400'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tisLast\n\t\t\t\t\t\t\t\t\t\t? 'text-primary-600 dark:text-primary-400'\n\t\t\t\t\t\t\t\t\t\t: 'text-gray-500 dark:text-gray-400'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t<span className='mx-2 flex items-center'>{separatorIcon}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)\n\t\t\t})}\n\t\t</nav>\n\t)\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport type { RefObject } from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Tailwind classlarni merge qilish uchun utility\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs))\n}\n\n/**\n * ESC tugmasini bosishni handle qilish\n */\nexport function useEscapeKey(callback: () => void) {\n\tconst handleEscape = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Escape') callback()\n\t}\n\n\treturn { handleEscape }\n}\n\n/**\n * Click outside handle qilish\n */\nexport function useClickOutside(\n\tref: RefObject<HTMLDivElement>,\n\tcallback: () => void\n) {\n\tconst handleClick = (e: MouseEvent) => {\n\t\tif (ref.current && !ref.current.contains(e.target as Node)) {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\treturn { handleClick }\n}\n","import { Loader } from 'lucide-react'\nimport React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype ButtonProps = {\n\ttext?: string\n\ticon?: React.ReactNode\n\ticonPosition?: 'left' | 'right'\n\tsize?: 'sm' | 'md' | 'lg'\n\tvariant?: 'primary' | 'secondary' | 'accent'\n\tloading?: boolean\n\tdisabled?: boolean\n\tonClick?: () => void\n\tclassName?: string\n}\n\nexport default function Button({\n\ttext,\n\ticon,\n\ticonPosition = 'left',\n\tsize = 'md',\n\tvariant = 'accent',\n\tloading = false,\n\tdisabled = false,\n\tonClick,\n\tclassName,\n}: ButtonProps) {\n\tconst sizes = {\n\t\tsm: 'h-[38px] px-3 text-sm gap-2',\n\t\tmd: 'h-[48px] px-4 text-base gap-2.5',\n\t\tlg: 'h-[56px] px-5 text-lg gap-3',\n\t}\n\n\tconst variants = {\n\t\tprimary: `\n\t\t\tbg-secondary-500\n\t\t\thover:bg-secondary-600\n\t\t\tactive:bg-secondary-700\n\t\t\thover:shadow-lg\n\t\t\thover:shadow-secondary-500/30\n\t\t\tactive:scale-[0.98]\n\t\t\ttext-white\n\t\t`,\n\t\tsecondary: `\n\t\t\tbg-secondary-50\n\t\t\thover:bg-secondary-100\n\t\t\tactive:bg-secondary-200\n\t\t\thover:shadow-md\n\t\t\thover:shadow-secondary-500/10\n\t\t\tactive:scale-[0.98]\n\t\t\ttext-secondary-700\n\t\t\tborder border-secondary-200\n\t\t\thover:border-secondary-300\n\t\t`,\n\t\taccent: `\n\t\t\tbg-accent-500\n\t\t\thover:bg-accent-600\n\t\t\tactive:bg-accent-700\n\t\t\thover:shadow-lg\n\t\t\thover:shadow-accent-500/30\n\t\t\tactive:scale-[0.98]\n\t\t\ttext-white\n\t\t`,\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tonClick={onClick}\n\t\t\tdisabled={disabled || loading}\n\t\t\tclassName={cn(\n\t\t\t\t'inline-flex items-center justify-center rounded-[7px] font-medium',\n\t\t\t\t'transition-all duration-300 ease-in-out',\n\t\t\t\t'transform hover:-translate-y-0.5',\n\t\t\t\t'disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:translate-y-0 disabled:hover:shadow-none',\n\t\t\t\t'focus:outline-none focus:ring-2 focus:ring-offset-2',\n\t\t\t\tvariant === 'primary' && 'focus:ring-secondary-500',\n\t\t\t\tvariant === 'secondary' && 'focus:ring-secondary-400',\n\t\t\t\tvariant === 'accent' && 'focus:ring-accent-500',\n\t\t\t\tvariants[variant],\n\t\t\t\tsizes[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{/* ICON LEFT */}\n\t\t\t{icon && iconPosition === 'left' && (\n\t\t\t\t<span className='flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110'>\n\t\t\t\t\t{loading ? <Loader className='animate-spin' size={20} /> : icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* TEXT */}\n\t\t\t{text && <span className='transition-all duration-300'>{text}</span>}\n\n\t\t\t{/* ICON RIGHT */}\n\t\t\t{icon && iconPosition === 'right' && (\n\t\t\t\t<span className='flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110'>\n\t\t\t\t\t{loading ? <Loader className='animate-spin' size={20} /> : icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* AGAR TEXT VA ICON YO'Q BO'LSA */}\n\t\t\t{loading && <Loader className='animate-spin' size={20} />}\n\t\t</button>\n\t)\n}\n","import { ChevronDownIcon } from 'lucide-react'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype CollapseProps = {\n\ttitle: string\n\tchildren: React.ReactNode\n\tdefaultOpen?: boolean\n\ticon?: React.ReactNode\n\tvariant?: 'primary' | 'secondary' | 'accent'\n\tclassName?: string\n\ttitleClassName?: string\n\tcontentClassName?: string\n}\n\nexport default function Collapse({\n\ttitle,\n\tchildren,\n\tdefaultOpen = false,\n\ticon,\n\tvariant = 'primary',\n\tclassName,\n\ttitleClassName,\n\tcontentClassName,\n}: CollapseProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen)\n\tconst [contentHeight, setContentHeight] = useState(0)\n\tconst contentRef = useRef<HTMLDivElement>(null)\n\n\tuseEffect(() => {\n\t\tif (contentRef.current) {\n\t\t\tsetContentHeight(isOpen ? contentRef.current.scrollHeight : 0)\n\t\t}\n\t}, [isOpen])\n\n\tconst variantClasses = {\n\t\tprimary: {\n\t\t\ttitle:\n\t\t\t\t'bg-secondary-50 hover:bg-secondary-100 border-secondary-200 text-secondary-800',\n\t\t\tcontent: 'bg-secondary-25 border-secondary-100',\n\t\t},\n\t\tsecondary: {\n\t\t\ttitle:\n\t\t\t\t'bg-accent-50 hover:bg-accent-100 border-accent-200 text-accent-800',\n\t\t\tcontent: 'bg-accent-25 border-accent-100',\n\t\t},\n\t\taccent: {\n\t\t\ttitle: 'bg-gray-50 hover:bg-gray-100 border-gray-200 text-gray-800',\n\t\t\tcontent: 'bg-gray-25 border-gray-100',\n\t\t},\n\t}\n\n\tconst variantConfig = variantClasses[variant]\n\n\treturn (\n\t\t<div className={cn('border rounded-lg overflow-hidden', className)}>\n\t\t\t{/* Header */}\n\t\t\t<button\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full flex items-center justify-between p-4 transition-all duration-300',\n\t\t\t\t\t'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-blue-500',\n\t\t\t\t\t'border-b',\n\t\t\t\t\tvariantConfig.title\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className='flex items-center gap-3'>\n\t\t\t\t\t{icon && <span className='flex-shrink-0'>{icon}</span>}\n\t\t\t\t\t<span className={cn('font-medium text-left', titleClassName)}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\n\t\t\t\t<ChevronDownIcon\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'w-5 h-5 transition-transform duration-300 flex-shrink-0',\n\t\t\t\t\t\tisOpen && 'rotate-180'\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</button>\n\n\t\t\t{/* Content */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'transition-all duration-300 ease-out overflow-hidden',\n\t\t\t\t\tvariantConfig.content\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\theight: `${contentHeight}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div ref={contentRef} className={cn('p-4', contentClassName)}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { Eye, EyeOff } from 'lucide-react'\nimport React, { useMemo, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype InputProps = {\n\tlabel?: string\n\tplaceholder?: string\n\ttype?: 'text' | 'email' | 'password' | 'number' | 'tel'\n\ticon?: React.ReactNode\n\ticonPosition?: 'left' | 'right'\n\tsize?: 'sm' | 'md' | 'lg'\n\terror?: string\n\tsuccess?: string\n\tdisabled?: boolean\n\trequired?: boolean\n\tvalue?: string\n\tonChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n\tonFocus?: () => void\n\tonBlur?: () => void\n\tclassName?: string\n}\n\nexport default function InputMain({\n\tlabel,\n\tplaceholder,\n\ttype = 'text',\n\ticon,\n\ticonPosition = 'left',\n\tsize = 'md',\n\terror,\n\tsuccess,\n\tdisabled = false,\n\trequired = false,\n\tvalue,\n\tonChange,\n\tonFocus,\n\tonBlur,\n\tclassName,\n}: InputProps) {\n\tconst [isFocused, setIsFocused] = useState(false)\n\tconst [internalValue, setInternalValue] = useState('')\n\tconst [showPassword, setShowPassword] = useState(false)\n\tconst [autoFilled, setAutoFilled] = useState(false)\n\n\tconst currentValue = value ?? internalValue\n\tconst hasValue = Boolean(currentValue) || autoFilled\n\tconst isPassword = type === 'password'\n\n\tconst handleFocus = () => {\n\t\tsetIsFocused(true)\n\t\tonFocus?.()\n\t}\n\n\tconst handleBlur = () => {\n\t\tsetIsFocused(false)\n\t\tonBlur?.()\n\t}\n\n\tconst handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (value === undefined) setInternalValue(e.target.value)\n\t\tonChange?.(e)\n\t}\n\n\tconst togglePassword = () => setShowPassword(p => !p)\n\n\tconst sizes = useMemo(\n\t\t() => ({\n\t\t\tsm: {\n\t\t\t\tinput: 'h-[38px] text-sm',\n\t\t\t\tpadding: icon\n\t\t\t\t\t? iconPosition === 'left'\n\t\t\t\t\t\t? 'pl-10 pr-3'\n\t\t\t\t\t\t: 'pl-3 pr-10'\n\t\t\t\t\t: 'px-3',\n\t\t\t\ticon: 'w-4 h-4',\n\t\t\t\ticonWrapper: iconPosition === 'left' ? 'left-3' : 'right-3',\n\t\t\t\tlabelFont: 'text-xs',\n\t\t\t},\n\t\t\tmd: {\n\t\t\t\tinput: 'h-[48px] text-base',\n\t\t\t\tpadding: icon\n\t\t\t\t\t? iconPosition === 'left'\n\t\t\t\t\t\t? 'pl-12 pr-4'\n\t\t\t\t\t\t: 'pl-4 pr-12'\n\t\t\t\t\t: 'px-4',\n\t\t\t\ticon: 'w-5 h-5',\n\t\t\t\ticonWrapper: iconPosition === 'left' ? 'left-3.5' : 'right-3.5',\n\t\t\t\tlabelFont: 'text-sm',\n\t\t\t},\n\t\t\tlg: {\n\t\t\t\tinput: 'h-[56px] text-lg',\n\t\t\t\tpadding: icon\n\t\t\t\t\t? iconPosition === 'left'\n\t\t\t\t\t\t? 'pl-14 pr-5'\n\t\t\t\t\t\t: 'pl-5 pr-14'\n\t\t\t\t\t: 'px-5',\n\t\t\t\ticon: 'w-6 h-6',\n\t\t\t\ticonWrapper: iconPosition === 'left' ? 'left-4' : 'right-4',\n\t\t\t\tlabelFont: 'text-base',\n\t\t\t},\n\t\t}),\n\t\t[icon, iconPosition]\n\t)\n\n\tconst stateStyles = useMemo(() => {\n\t\tif (error)\n\t\t\treturn 'border-error-500 focus:border-error-600 focus:ring-error-500/20'\n\t\tif (success)\n\t\t\treturn 'border-success-500 focus:border-success-600 focus:ring-success-500/20'\n\t\treturn 'border-gray-300 hover:border-gray-400 focus:border-accent-500 focus:ring-accent-500/20'\n\t}, [error, success])\n\n\t// Autofill holatini aniqlash\n\tconst handleAutoFill = (e: React.AnimationEvent<HTMLInputElement>) => {\n\t\tif (e.animationName === 'onAutoFillStart') {\n\t\t\tsetAutoFilled(true)\n\t\t} else if (e.animationName === 'onAutoFillCancel') {\n\t\t\tsetAutoFilled(false)\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className={cn('w-full', className)}>\n\t\t\t<div className='relative flex items-center'>\n\t\t\t\t<input\n\t\t\t\t\ttype={isPassword && showPassword ? 'text' : type}\n\t\t\t\t\tvalue={currentValue}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tonAnimationStart={handleAutoFill}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tplaceholder={label ? '' : placeholder}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'w-full rounded-[7px] border bg-white font-medium outline-none transition-all duration-300 ease-in-out',\n\t\t\t\t\t\t'focus:ring-4 disabled:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-60 autofill:shadow-[inset_0_0_0px_1000px_white]',\n\t\t\t\t\t\tsizes[size].input,\n\t\t\t\t\t\tsizes[size].padding,\n\t\t\t\t\t\tstateStyles\n\t\t\t\t\t)}\n\t\t\t\t\tautoComplete='on'\n\t\t\t\t/>\n\n\t\t\t\t{/* FLOATING LABEL */}\n\t\t\t\t{label && (\n\t\t\t\t\t<label\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'absolute pointer-events-none transition-all duration-300 ease-in-out font-medium',\n\t\t\t\t\t\t\ticon && iconPosition === 'left' && !hasValue && !isFocused\n\t\t\t\t\t\t\t\t? sizes[size].padding\n\t\t\t\t\t\t\t\t: 'left-4',\n\t\t\t\t\t\t\tisFocused || hasValue\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t'top-0 -translate-y-1/2 bg-white px-2',\n\t\t\t\t\t\t\t\t\t\tsizes[size].labelFont,\n\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t\t\t? 'text-error-600'\n\t\t\t\t\t\t\t\t\t\t\t: success\n\t\t\t\t\t\t\t\t\t\t\t? 'text-success-600'\n\t\t\t\t\t\t\t\t\t\t\t: 'text-accent-600'\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t'top-1/2 -translate-y-1/2 text-gray-500',\n\t\t\t\t\t\t\t\t\t\tsizes[size].input.includes('38') && 'text-sm',\n\t\t\t\t\t\t\t\t\t\tsizes[size].input.includes('48') && 'text-base',\n\t\t\t\t\t\t\t\t\t\tsizes[size].input.includes('56') && 'text-lg'\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t\t{required && <span className='text-error-500 ml-1'>*</span>}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t{/* ICON */}\n\t\t\t\t{icon && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'absolute top-1/2 -translate-y-1/2 flex items-center transition-all duration-300',\n\t\t\t\t\t\t\tsizes[size].iconWrapper,\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t? 'text-error-500'\n\t\t\t\t\t\t\t\t: success\n\t\t\t\t\t\t\t\t? 'text-success-500'\n\t\t\t\t\t\t\t\t: isFocused\n\t\t\t\t\t\t\t\t? 'text-accent-500'\n\t\t\t\t\t\t\t\t: 'text-gray-400'\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className={cn(sizes[size].icon, 'mr-2')}>{icon}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* PASSWORD TOGGLE */}\n\t\t\t\t{isPassword && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\tonClick={togglePassword}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'absolute top-1/2 -translate-y-1/2 flex items-center justify-center text-gray-400 hover:text-gray-600 transition-all',\n\t\t\t\t\t\t\t'right-3'\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? (\n\t\t\t\t\t\t\t<EyeOff className={cn(sizes[size].icon)} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Eye className={cn(sizes[size].icon)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* ERROR MESSAGE */}\n\t\t\t{error && (\n\t\t\t\t<p className='mt-1.5 text-sm text-error-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]'>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t{/* SUCCESS MESSAGE */}\n\t\t\t{success && !error && (\n\t\t\t\t<p className='mt-1.5 text-sm text-success-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]'>\n\t\t\t\t\t{success}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t{/* Autofill animatsiyasi */}\n\t\t\t<style>{`\n\t\t\t\tinput {\n\t\t\t\t\tanimation-name: onAutoFillCancel;\n\t\t\t\t}\n\t\t\t\tinput:-webkit-autofill {\n\t\t\t\t\tanimation-name: onAutoFillStart;\n\t\t\t\t}\n\t\t\t\t@keyframes onAutoFillStart {}\n\t\t\t\t@keyframes onAutoFillCancel {}\n\t\t\t`}</style>\n\t\t</div>\n\t)\n}\n","import { ArrowUpDown, Box, ChevronDown, ChevronUp } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport { cn } from '../../lib/utils'\nimport type { MciTableColumn } from '../../types/MciTableType'\nimport { Skeleton } from '../index'\n\ninterface MciTableProps<T extends Record<string, unknown>> {\n\tcolumns: MciTableColumn<T>[]\n\tdata: T[]\n\tloading?: boolean\n\tvariant?: 'clean' | 'elevated' | 'bordered'\n\tskeletonRows?: number\n\tactions?: React.ReactNode\n\tnoDataText?: string\n}\n\nexport default function MciTable<T extends Record<string, unknown>>({\n\tcolumns,\n\tdata,\n\tloading = false,\n\tvariant = 'clean',\n\tskeletonRows = 5,\n\tactions,\n\tnoDataText,\n}: MciTableProps<T>) {\n\tconst [sortConfig, setSortConfig] = useState<{\n\t\tkey: keyof T\n\t\tdirection: 'asc' | 'desc' | null\n\t} | null>(null)\n\n\tconst sortedData = useMemo(() => {\n\t\tif (!sortConfig || !sortConfig.direction) return data\n\t\treturn [...data].sort((a, b) => {\n\t\t\tconst aVal = a[sortConfig.key]\n\t\t\tconst bVal = b[sortConfig.key]\n\t\t\tif (aVal < bVal) return sortConfig.direction === 'asc' ? -1 : 1\n\t\t\tif (aVal > bVal) return sortConfig.direction === 'asc' ? 1 : -1\n\t\t\treturn 0\n\t\t})\n\t}, [data, sortConfig])\n\n\tconst handleSort = (col: MciTableColumn<T>) => {\n\t\tif (!col.sortable) return\n\t\tsetSortConfig(prev => {\n\t\t\tif (!prev || prev.key !== col.key) {\n\t\t\t\treturn { key: col.key, direction: 'asc' }\n\t\t\t}\n\t\t\tif (prev.direction === 'asc') return { key: col.key, direction: 'desc' }\n\t\t\tif (prev.direction === 'desc') return { key: col.key, direction: null }\n\t\t\treturn null\n\t\t})\n\t}\n\n\tconst getSortIcon = (col: MciTableColumn<T>) => {\n\t\tif (!col.sortable) return null\n\t\tif (!sortConfig || sortConfig.key !== col.key || !sortConfig.direction) {\n\t\t\treturn <ArrowUpDown size={15} className='opacity-40' />\n\t\t}\n\t\treturn sortConfig.direction === 'asc' ? (\n\t\t\t<ChevronUp size={15} />\n\t\t) : (\n\t\t\t<ChevronDown size={15} />\n\t\t)\n\t}\n\n\tconst variantStyle = cn(\n\t\t'w-full border-separate border-spacing-0 transition-all duration-300',\n\t\tvariant === 'clean' && 'bg-white',\n\t\tvariant === 'elevated' && 'bg-white shadow-lg',\n\t\tvariant === 'bordered' && 'border border-secondary-200 rounded-lg'\n\t)\n\n\tconst headerCell = (col: MciTableColumn<T>) =>\n\t\tcn(\n\t\t\t'bg-secondary-50 text-secondary-800 text-sm font-semibold py-3 px-4 select-none',\n\t\t\t'border-b border-secondary-200 transition-colors',\n\t\t\tcol.align === 'center' && 'text-center',\n\t\t\tcol.align === 'right' && 'text-right',\n\t\t\tcol.sortable && 'cursor-pointer hover:bg-secondary-100/70'\n\t\t)\n\n\treturn (\n\t\t<div className='w-full space-y-3'>\n\t\t\t{actions && (\n\t\t\t\t<div className='flex justify-between items-center mb-2'>{actions}</div>\n\t\t\t)}\n\n\t\t\t<div className='w-full overflow-x-auto rounded-lg'>\n\t\t\t\t<table className={variantStyle}>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t{columns.map((col, idx) => (\n\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\tkey={String(col.key)}\n\t\t\t\t\t\t\t\t\tonClick={() => handleSort(col)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\theaderCell(col),\n\t\t\t\t\t\t\t\t\t\tidx === 0 && 'rounded-tl-lg',\n\t\t\t\t\t\t\t\t\t\tidx === columns.length - 1 && 'rounded-tr-lg'\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ width: col.width }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className='flex items-center justify-between gap-2'>\n\t\t\t\t\t\t\t\t\t\t<span className='truncate'>{col.title}</span>\n\t\t\t\t\t\t\t\t\t\t{getSortIcon(col)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t{loading\n\t\t\t\t\t\t\t? Array.from({ length: skeletonRows }).map((_, idx) => (\n\t\t\t\t\t\t\t\t\t<tr key={idx}>\n\t\t\t\t\t\t\t\t\t\t{columns.map((_, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<td key={i} className='px-4 py-3'>\n\t\t\t\t\t\t\t\t\t\t\t\t<Skeleton height={18} variant='rounded' />\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t ))\n\t\t\t\t\t\t\t: sortedData.map((row, idx) => (\n\t\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'border-b border-secondary-100 transition-all duration-200'\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{columns.map((col, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'px-4 py-3 text-sm text-gray-800',\n\t\t\t\t\t\t\t\t\t\t\t\t\tcol.align === 'center' && 'text-center',\n\t\t\t\t\t\t\t\t\t\t\t\t\tcol.align === 'right' && 'text-right'\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{col.render\n\t\t\t\t\t\t\t\t\t\t\t\t\t? col.render(row[col.key], row)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: String(row[col.key])}\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t ))}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\n\t\t\t{!loading && sortedData.length === 0 && (\n\t\t\t\t<div className='flex flex-col items-center justify-center py-10 text-gray-500 dark:text-gray-400 animate-[fadeIn_0.4s_ease-in-out]'>\n\t\t\t\t\t<div className='relative'>\n\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\tsize={64}\n\t\t\t\t\t\t\tclassName='mb-3 text-secondary-400 dark:text-secondary-500 opacity-80 animate-[float_2.5s_ease-in-out_infinite]'\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div className='absolute inset-0 blur-2xl bg-secondary-200/20 dark:bg-secondary-700/20 rounded-full scale-75 animate-[pulse_3s_ease-in-out_infinite]' />\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className='text-sm font-medium animate-[fadeUp_0.6s_ease-out]'>\n\t\t\t\t\t\t{noDataText}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import { X } from 'lucide-react'\nimport React, { useEffect, useRef } from 'react'\nimport { cn, useClickOutside, useEscapeKey } from '../../lib/utils'\n\ninterface ModalProps {\n\tshow: boolean\n\tsetShow: (show: boolean) => void\n\ttitle?: string\n\tHeader?: React.ReactNode\n\tBody?: React.ReactNode\n\tfooter?: React.ReactNode\n}\n\nexport default function Modal({\n\tshow,\n\tsetShow,\n\ttitle,\n\tHeader,\n\tBody,\n\tfooter,\n}: ModalProps) {\n\tconst modalRef = useRef<HTMLDivElement>(null!)\n\n\t// ESC\n\tconst { handleEscape } = useEscapeKey(() => setShow(false))\n\tuseEffect(() => {\n\t\tif (show) {\n\t\t\tdocument.addEventListener('keydown', handleEscape)\n\t\t\tdocument.body.style.overflow = 'hidden'\n\t\t} else {\n\t\t\tdocument.body.style.overflow = 'unset'\n\t\t}\n\t\treturn () => document.removeEventListener('keydown', handleEscape)\n\t}, [show, handleEscape])\n\n\t// Click outside\n\tconst { handleClick } = useClickOutside(modalRef, () => setShow(false))\n\tuseEffect(() => {\n\t\tif (show) document.addEventListener('mousedown', handleClick)\n\t\treturn () => document.removeEventListener('mousedown', handleClick)\n\t}, [show, handleClick])\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'fixed inset-0 z-50 flex items-center justify-center p-4 bg-secondary-100/50 backdrop-blur-sm transition-all duration-500 ease-in-out',\n\t\t\t\tshow\n\t\t\t\t\t? 'opacity-100 pointer-events-auto'\n\t\t\t\t\t: 'opacity-0 pointer-events-none'\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={modalRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'relative w-full max-w-lg rounded-[7px] shadow-xl bg-secondary-50 text-gray-800',\n\t\t\t\t\t'transform transition-all duration-500 ease-out',\n\t\t\t\t\tshow ? 'opacity-100 scale-100' : 'opacity-0 scale-90'\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Header */}\n\t\t\t\t{(Header || title) && (\n\t\t\t\t\t<div className='flex items-center justify-between px-6 py-4 border-b border-secondary-300'>\n\t\t\t\t\t\t{Header || (\n\t\t\t\t\t\t\t<h2 className='text-xl font-semibold text-gray-800'>{title}</h2>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={() => setShow(false)}\n\t\t\t\t\t\t\tclassName='text-gray-800 hover:text-secondary-300 active:animate-spin transition'\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X className='w-5 h-5' />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Body */}\n\t\t\t\t{Body && (\n\t\t\t\t\t<div className='px-6 py-4 max-h-96 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300'>\n\t\t\t\t\t\t{Body}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Footer */}\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className='flex items-center justify-end gap-3 px-6 py-4 border-t border-secondary-300'>\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { ChevronLeft, ChevronRight } from 'lucide-react'\n\ninterface PaginationProps {\n\ttotalItems: number\n\tcurrentPage: number\n\tperPage: number\n\tonPageChange: (page: number) => void\n\tonPerPageChange?: (value: number) => void\n\tsiblingCount?: number\n\tperPageOptions?: number[]\n\tshowPerPage?: boolean\n}\n\nexport default function Pagination({\n\ttotalItems,\n\tcurrentPage,\n\tperPage,\n\tonPageChange,\n\tonPerPageChange,\n\tsiblingCount = 1,\n\tperPageOptions = [10, 20, 30],\n\tshowPerPage = true,\n}: PaginationProps) {\n\tconst totalPages = Math.ceil(totalItems / perPage)\n\n\tconst createPageRange = () => {\n\t\tconst totalPageNumbers = siblingCount * 2 + 5\n\t\tif (totalPages <= totalPageNumbers) {\n\t\t\treturn Array.from({ length: totalPages }, (_, i) => i + 1)\n\t\t}\n\n\t\tconst leftSiblingIndex = Math.max(currentPage - siblingCount, 2)\n\t\tconst rightSiblingIndex = Math.min(\n\t\t\tcurrentPage + siblingCount,\n\t\t\ttotalPages - 1\n\t\t)\n\n\t\tconst showLeftDots = leftSiblingIndex > 2\n\t\tconst showRightDots = rightSiblingIndex < totalPages - 1\n\n\t\tconst range: (number | string)[] = [1]\n\n\t\tif (showLeftDots) range.push('...')\n\n\t\tfor (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n\t\t\trange.push(i)\n\t\t}\n\n\t\tif (showRightDots) range.push('...')\n\n\t\trange.push(totalPages)\n\n\t\treturn range\n\t}\n\n\tconst pages = createPageRange()\n\n\tconst handlePrev = () => {\n\t\tif (currentPage > 1) onPageChange(currentPage - 1)\n\t}\n\n\tconst handleNext = () => {\n\t\tif (currentPage < totalPages) onPageChange(currentPage + 1)\n\t}\n\n\treturn (\n\t\t<div className='w-full flex flex-col md:flex-row md:justify-between md:items-center gap-4 py-4'>\n\t\t\t{/* Per Page Select */}\n\t\t\t{showPerPage && onPerPageChange && (\n\t\t\t\t<div className='flex justify-center md:justify-start w-full md:w-auto'>\n\t\t\t\t\t<select\n\t\t\t\t\t\tvalue={perPage}\n\t\t\t\t\t\tonChange={e => onPerPageChange(Number(e.target.value))}\n\t\t\t\t\t\tclassName='border rounded-lg px-3 py-2 text-sm bg-white\n hover:border-secondary-500 \n focus:outline-none focus:ring-2 focus:ring-secondary-500\n transition-all duration-200'\n\t\t\t\t\t>\n\t\t\t\t\t\t{perPageOptions.map(option => (\n\t\t\t\t\t\t\t<option key={option} value={option}>\n\t\t\t\t\t\t\t\t{option} / page\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Pagination */}\n\t\t\t<div className='flex items-center justify-center md:justify-end w-full'>\n\t\t\t\t{/* Prev */}\n\t\t\t\t<button\n\t\t\t\t\tonClick={handlePrev}\n\t\t\t\t\tdisabled={currentPage === 1}\n\t\t\t\t\tclassName={`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200\n ${\n\t\t\t\t\t\t\tcurrentPage === 1\n\t\t\t\t\t\t\t\t? 'opacity-40 cursor-not-allowed'\n\t\t\t\t\t\t\t\t: 'hover:bg-secondary-100 hover:text-secondary-700'\n\t\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t<ChevronLeft size={18} />\n\t\t\t\t</button>\n\n\t\t\t\t{/* Page numbers */}\n\t\t\t\t<div className='flex items-center gap-1 mx-2'>\n\t\t\t\t\t{pages.map((page, idx) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tonClick={() => typeof page === 'number' && onPageChange(page)}\n\t\t\t\t\t\t\tdisabled={page === '...'}\n\t\t\t\t\t\t\tclassName={`min-w-[40px] rounded-xl border px-3 py-2 text-sm font-medium transition-all duration-200\n ${\n\t\t\t\t\t\t\t\t\tpage === currentPage\n\t\t\t\t\t\t\t\t\t\t? 'bg-secondary-500 text-white shadow-md'\n\t\t\t\t\t\t\t\t\t\t: page === '...'\n\t\t\t\t\t\t\t\t\t\t? 'cursor-default border-none text-gray-400'\n\t\t\t\t\t\t\t\t\t\t: 'bg-white text-secondary-700 hover:bg-secondary-100'\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{page}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Next */}\n\t\t\t\t<button\n\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\tdisabled={currentPage === totalPages}\n\t\t\t\t\tclassName={`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200\n ${\n\t\t\t\t\t\t\tcurrentPage === totalPages\n\t\t\t\t\t\t\t\t? 'opacity-40 cursor-not-allowed'\n\t\t\t\t\t\t\t\t: 'hover:bg-secondary-100 hover:text-secondary-700'\n\t\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t<ChevronRight size={18} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import {cn} from '../../lib/utils.ts'\n\ntype SkeletonProps = {\n className?: string\n variant?: 'default' | 'rounded' | 'circle'\n width?: string | number\n height?: string | number\n}\n\nexport default function Skeleton({\n className,\n variant = 'default',\n width = '100%',\n height = '1rem',\n }: SkeletonProps) {\n return (\n <div\n className={cn(\n 'relative overflow-hidden bg-secondary-200 dark:bg-secondary-800',\n 'rounded-sm',\n variant === 'circle' && 'rounded-full',\n variant === 'rounded' && 'rounded-md',\n className\n )}\n style={{\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n }}\n >\n <div className='absolute inset-0 shimmer-mask'/>\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype Tab = {\n\tid: string\n\tlabel: string\n\ticon?: React.ReactNode\n\tcontent: React.ReactNode\n\tdisabled?: boolean\n}\n\ntype TabsProps = {\n\ttabs: Tab[]\n\tdefaultTab?: string\n\tposition?: 'top' | 'bottom' | 'left' | 'right'\n\tvariant?: 'primary' | 'secondary' | 'accent'\n\tclassName?: string\n\tonChange?: (tabId: string | number) => void\n}\n\nexport default function Tabs({\n\ttabs,\n\tdefaultTab,\n\tposition = 'top',\n\tvariant = 'primary',\n\tclassName,\n\tonChange,\n}: TabsProps) {\n\tconst [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id)\n\tconst [indicatorStyle, setIndicatorStyle] = useState({})\n\tconst tabsRef = useRef<(HTMLButtonElement | null)[]>([])\n\n\tuseEffect(() => {\n\t\tconst activeIndex = tabs.findIndex(tab => tab.id === activeTab)\n\t\tconst activeTabElement = tabsRef.current[activeIndex]\n\n\t\tif (activeTabElement) {\n\t\t\tconst { offsetLeft, offsetTop, offsetWidth, offsetHeight } =\n\t\t\t\tactiveTabElement\n\n\t\t\tsetIndicatorStyle({\n\t\t\t\tleft: offsetLeft,\n\t\t\t\ttop: offsetTop,\n\t\t\t\twidth: offsetWidth,\n\t\t\t\theight: offsetHeight,\n\t\t\t\ttransition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n\t\t\t})\n\t\t}\n\t}, [activeTab, position, tabs])\n\n\tconst containerClasses = {\n\t\ttop: 'flex-col',\n\t\tbottom: 'flex-col-reverse',\n\t\tleft: 'flex-row',\n\t\tright: 'flex-row-reverse',\n\t}\n\n\tconst tabsContainerClasses = {\n\t\ttop: 'flex-row',\n\t\tbottom: 'flex-row',\n\t\tleft: 'flex-col',\n\t\tright: 'flex-col',\n\t}\n\n\tconst contentClasses = {\n\t\ttop: 'mt-6',\n\t\tbottom: 'mb-6',\n\t\tleft: 'ml-6',\n\t\tright: 'mr-6',\n\t}\n\n\tconst variantClasses = {\n\t\tprimary: {\n\t\t\tactive: 'text-secondary-600',\n\t\t\tinactive:\n\t\t\t\t'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n\t\t\tdisabled: 'text-gray-300 dark:text-gray-600 cursor-not-allowed',\n\t\t\tbg: 'bg-secondary-100 dark:bg-secondary-900',\n\t\t},\n\t\tsecondary: {\n\t\t\tactive: 'text-accent-600',\n\t\t\tinactive:\n\t\t\t\t'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n\t\t\tdisabled: 'text-gray-300 dark:text-gray-600 cursor-not-allowed',\n\t\t\tbg: 'bg-accent-100 dark:bg-accent-900',\n\t\t},\n\t\taccent: {\n\t\t\tactive: 'text-gray-800 dark:text-gray-200',\n\t\t\tinactive:\n\t\t\t\t'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n\t\t\tdisabled: 'text-gray-300 dark:text-gray-600 cursor-not-allowed',\n\t\t\tbg: 'bg-gray-100 dark:bg-gray-800',\n\t\t},\n\t}\n\n\tconst isVertical = position === 'left' || position === 'right'\n\n\treturn (\n\t\t<div className={cn('flex w-full', containerClasses[position], className)}>\n\t\t\t{/* Tabs Container */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex relative bg-gray-50 dark:bg-gray-900 rounded-lg p-1',\n\t\t\t\t\ttabsContainerClasses[position],\n\t\t\t\t\tisVertical ? 'min-w-48' : 'w-full'\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Animated Background Indicator */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'absolute rounded-md transition-all duration-300 ease-out',\n\t\t\t\t\t\tvariantClasses[variant].bg,\n\t\t\t\t\t\tisVertical ? 'w-full' : 'h-full'\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={indicatorStyle}\n\t\t\t\t/>\n\n\t\t\t\t{tabs.map((tab, index) => {\n\t\t\t\t\tconst isActive = activeTab === tab.id\n\t\t\t\t\tconst variantConfig = variantClasses[variant]\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={tab.id}\n ref={(el) => {\n tabsRef.current[index] = el\n }}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (!tab.disabled) {\n\t\t\t\t\t\t\t\t\tsetActiveTab(tab.id)\n\t\t\t\t\t\t\t\t\tonChange?.(tab.id)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={tab.disabled}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'relative flex items-center justify-center gap-2 px-4 py-3 font-medium',\n\t\t\t\t\t\t\t\t'text-sm whitespace-nowrap transition-all duration-200 z-10',\n\t\t\t\t\t\t\t\t'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500',\n\t\t\t\t\t\t\t\t'rounded-md',\n\t\t\t\t\t\t\t\tisActive\n\t\t\t\t\t\t\t\t\t? [variantConfig.active, 'font-semibold']\n\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\tvariantConfig.inactive,\n\t\t\t\t\t\t\t\t\t\t\t'hover:bg-white/50 dark:hover:bg-gray-800/50',\n\t\t\t\t\t\t\t\t\t ],\n\t\t\t\t\t\t\t\ttab.disabled && variantConfig.disabled,\n\t\t\t\t\t\t\t\tisVertical ? 'w-full justify-start' : 'flex-1'\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{tab.icon && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-shrink-0 transition-transform duration-200',\n\t\t\t\t\t\t\t\t\t\tisActive && 'scale-110'\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{tab.icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className='relative z-10'>{tab.label}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* Tab Content with Smooth Transition */}\n\t\t\t<div className={cn('flex-1 overflow-hidden', contentClasses[position])}>\n\t\t\t\t<div key={activeTab} className='animate-fade-in'>\n\t\t\t\t\t{tabs.find(tab => tab.id === activeTab)?.content}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\ntype TabPanelProps = {\n\tchildren: React.ReactNode\n\tclassName?: string\n}\n\nexport function TabPanel({ children, className }: TabPanelProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'p-6 rounded-lg bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n","import { X } from 'lucide-react'\nimport React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype TagProps = {\n\tchildren: React.ReactNode\n\tvariant?: 'default' | 'secondary' | 'success' | 'error' | 'info' | 'accent'\n\tsize?: 'sm' | 'md' | 'lg'\n\ticon?: React.ReactNode\n\ticonPosition?: 'left' | 'right'\n\trounded?: boolean\n\tclosable?: boolean\n\tonClose?: () => void\n\tclassName?: string\n}\n\nconst sizes = {\n\tsm: 'text-xs px-2 py-0.5',\n\tmd: 'text-sm px-3 py-1',\n\tlg: 'text-base px-4 py-1.5',\n}\n\nconst iconSizes = {\n\tsm: 'w-3 h-3',\n\tmd: 'w-4 h-4',\n\tlg: 'w-5 h-5',\n}\n\nconst variants = {\n\tdefault:\n\t\t'bg-gray-100 text-gray-800 border border-gray-200 dark:bg-gray-800 dark:text-gray-100 dark:border-gray-700',\n\tsecondary:\n\t\t'bg-secondary-100 text-secondary-800 border border-secondary-200 dark:bg-secondary-800 dark:text-secondary-50 dark:border-secondary-700',\n\tsuccess:\n\t\t'bg-success-100 text-success-800 border border-success-200 dark:bg-success-800 dark:text-success-50 dark:border-success-700',\n\terror:\n\t\t'bg-error-100 text-error-800 border border-error-200 dark:bg-error-800 dark:text-error-50 dark:border-error-700',\n\tinfo: 'bg-info-100 text-info-800 border border-info-200 dark:bg-info-800 dark:text-info-50 dark:border-info-700',\n\taccent:\n\t\t'bg-accent-100 text-accent-800 border border-accent-200 dark:bg-accent-800 dark:text-accent-50 dark:border-accent-700',\n}\n\nexport default function Tag({\n\tchildren,\n\tvariant = 'default',\n\tsize = 'md',\n\ticon,\n\ticonPosition = 'left',\n\tclosable = false,\n\tonClose,\n\tclassName,\n}: TagProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t'inline-flex items-center font-medium animate-[fadeIn_0.3s_ease-out] rounded-[7px]',\n\t\t\t\tsizes[size],\n\t\t\t\tvariants[variant],\n\t\t\t\ticon && 'gap-1.5',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{/* ICON LEFT */}\n\t\t\t{icon && iconPosition === 'left' && (\n\t\t\t\t<span className={`flex items-center ${cn(iconSizes[size])}`}>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* TEXT */}\n\t\t\t<span>{children}</span>\n\n\t\t\t{/* ICON RIGHT */}\n\t\t\t{icon && iconPosition === 'right' && (\n\t\t\t\t<span className={`flex items-center ${cn(iconSizes[size])}`}>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* CLOSE BUTTON */}\n\t\t\t{closable && (\n\t\t\t\t<button\n\t\t\t\t\ttype='button'\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tclassName='ml-1 rounded-full p-0.5 hover:bg-black/10 dark:hover:bg-white/10 transition-colors'\n\t\t\t\t>\n\t\t\t\t\t<X className={cn(iconSizes[size])} />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</span>\n\t)\n}\n","import { useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype TextareaProps = {\n\tlabel?: string\n\tplaceholder?: string\n\tvalue?: string\n\tonChange?: (value: string) => void\n\trequired?: boolean\n\tdisabled?: boolean\n\terror?: string\n\tclassName?: string\n\trows?: number\n}\n\nexport default function Textarea({\n\tlabel,\n\tplaceholder,\n\tvalue = '',\n\tonChange,\n\trequired = false,\n\tdisabled = false,\n\terror,\n\tclassName,\n\trows = 4,\n}: TextareaProps) {\n\tconst [focused, setFocused] = useState(false)\n\n\tconst isFloating = focused || value.length > 0\n\n\treturn (\n\t\t<div className='relative w-full'>\n\t\t\t{/* Label */}\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'absolute left-3 top-2 text-gray-500 dark:text-gray-400 transition-all duration-200 pointer-events-none',\n\t\t\t\t\t\tisFloating\n\t\t\t\t\t\t\t? 'text-xs -translate-y-3 bg-white dark:bg-gray-900 px-1'\n\t\t\t\t\t\t\t: 'text-sm translate-y-0'\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t\t{required && <span className='text-error-500 ml-0.5'>*</span>}\n\t\t\t\t</label>\n\t\t\t)}\n\n\t\t\t{/* Textarea */}\n\t\t\t<textarea\n\t\t\t\trows={rows}\n\t\t\t\tplaceholder={label ? undefined : placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={e => onChange?.(e.target.value)}\n\t\t\t\tonFocus={() => setFocused(true)}\n\t\t\t\tonBlur={() => setFocused(false)}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full rounded-md border border-gray-300 dark:border-gray-700 bg-transparent text-gray-900 dark:text-gray-100 px-3 py-2 outline-none transition-all resize-none',\n\t\t\t\t\t'focus:border-primary-500 focus:ring-1 focus:ring-primary-500',\n\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed',\n\t\t\t\t\terror &&\n\t\t\t\t\t\t'border-error-500 focus:ring-error-500 focus:border-error-500',\n\t\t\t\t\tlabel && 'pt-5',\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t{/* Error message */}\n\t\t\t{error && <p className='mt-1 text-sm text-error-500'>{error}</p>}\n\t\t</div>\n\t)\n}\n","import {\n\tAlertCircle,\n\tCheckCircle2,\n\tInfo,\n\tLoader2,\n\tX,\n\tXCircle,\n} from 'lucide-react'\nimport { useEffect, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\n// --- TYPES ---\ntype ToastType = 'success' | 'error' | 'warning' | 'info' | 'loading'\n\nexport type ToastProps = {\n\tid?: string\n\ttitle: string\n\tdescription?: string\n\ttype?: ToastType\n\tduration?: number\n\tposition?:\n\t\t| 'top-right'\n\t\t| 'top-left'\n\t\t| 'bottom-right'\n\t\t| 'bottom-left'\n\t\t| 'top-center'\n\t\t| 'bottom-center'\n\tonClose?: (id: string) => void\n\taction?: {\n\t\tlabel: string\n\t\tonClick: () => void\n\t}\n}\n\n// --- MAIN TOAST COMPONENT ---\nexport function Toast({\n\tid = Math.random().toString(36),\n\ttitle,\n\tdescription,\n\ttype = 'info',\n\tduration = 5000,\n\tposition = 'top-right',\n\tonClose,\n\taction,\n}: ToastProps) {\n\tconst [isVisible, setIsVisible] = useState(false)\n\tconst [isLeaving, setIsLeaving] = useState(false)\n\n\tuseEffect(() => {\n\t\tconst showTimer = setTimeout(() => setIsVisible(true), 100)\n\t\tif (duration !== Infinity) {\n\t\t\tconst closeTimer = setTimeout(() => handleClose(), duration)\n\t\t\treturn () => {\n\t\t\t\tclearTimeout(showTimer)\n\t\t\t\tclearTimeout(closeTimer)\n\t\t\t}\n\t\t}\n\t\treturn () => clearTimeout(showTimer)\n\t}, [duration])\n\n\tconst handleClose = () => {\n\t\tsetIsLeaving(true)\n\t\tsetTimeout(() => {\n\t\t\tsetIsVisible(false)\n\t\t\tonClose?.(id)\n\t\t}, 300)\n\t}\n\n\tconst handleAction = () => {\n\t\taction?.onClick()\n\t\thandleClose()\n\t}\n\n\tconst icons = {\n\t\tsuccess: <CheckCircle2 className='w-5 h-5' />,\n\t\terror: <XCircle className='w-5 h-5' />,\n\t\twarning: <AlertCircle className='w-5 h-5' />,\n\t\tinfo: <Info className='w-5 h-5' />,\n\t\tloading: <Loader2 className='w-5 h-5 animate-spin' />,\n\t}\n\n\tconst variantClasses = {\n\t\tsuccess: 'bg-success-50 border-success-200 text-success-800',\n\t\terror: 'bg-error-50 border-error-200 text-error-800',\n\t\twarning: 'bg-secondary-50 border-secondary-200 text-secondary-800',\n\t\tinfo: 'bg-info-50 border-info-200 text-info-800',\n\t\tloading: 'bg-gray-50 border-gray-200 text-gray-800',\n\t}\n\n\tconst iconColors = {\n\t\tsuccess: 'text-success-600',\n\t\terror: 'text-error-600',\n\t\twarning: 'text-secondary-600',\n\t\tinfo: 'text-info-600',\n\t\tloading: 'text-gray-600',\n\t}\n\n\tconst positionClasses = {\n\t\t'top-right': 'top-4 right-4',\n\t\t'top-left': 'top-4 left-4',\n\t\t'bottom-right': 'bottom-4 right-4',\n\t\t'bottom-left': 'bottom-4 left-4',\n\t\t'top-center': 'top-4 left-1/2 -translate-x-1/2',\n\t\t'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n\t}\n\n\tif (!isVisible) return null\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'fixed z-50 transform transition-all duration-300',\n\t\t\t\tpositionClasses[position],\n\t\t\t\tisLeaving ? 'opacity-0 scale-95' : 'opacity-100 scale-100',\n\t\t\t\tposition.includes('top') && !isLeaving && 'animate-slide-down',\n\t\t\t\tposition.includes('bottom') && !isLeaving && 'animate-slide-up'\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex items-start gap-3 p-4 rounded-lg border shadow-lg max-w-sm',\n\t\t\t\t\t'backdrop-blur-sm bg-white/95',\n\t\t\t\t\tvariantClasses[type]\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className={cn('flex-shrink-0 mt-0.5', iconColors[type])}>\n\t\t\t\t\t{icons[type]}\n\t\t\t\t</div>\n\t\t\t\t<div className='flex-1 min-w-0'>\n\t\t\t\t\t<h4 className='font-semibold text-sm mb-1'>{title}</h4>\n\t\t\t\t\t{description && <p className='text-sm opacity-90'>{description}</p>}\n\t\t\t\t\t{action && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleAction}\n\t\t\t\t\t\t\tclassName='mt-2 text-sm font-medium underline underline-offset-2 hover:no-underline'\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={handleClose}\n\t\t\t\t\tclassName='flex-shrink-0 p-1 rounded-full hover:bg-black/5 transition-colors'\n\t\t\t\t>\n\t\t\t\t\t<X className='w-4 h-4' />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { Toast, type ToastProps } from './Toast.tsx'\n\nexport function ToastContainer({\n\ttoasts,\n\tonRemove,\n\tposition = 'top-right',\n}: {\n\ttoasts: ToastProps[]\n\tonRemove: (id: string) => void\n\tposition?: ToastProps['position']\n}) {\n\treturn (\n\t\t<>\n\t\t\t{toasts.map(t => (\n\t\t\t\t<Toast key={t.id} {...t} onClose={onRemove} position={position} />\n\t\t\t))}\n\t\t</>\n\t)\n}\n","import React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype TooltipProps = {\n\tcontent: React.ReactNode\n\tchildren: React.ReactNode\n\tposition?: 'top' | 'bottom' | 'left' | 'right'\n\tdelay?: number\n\tclassName?: string\n}\n\nexport default function Tooltip({\n\tcontent,\n\tchildren,\n\tposition = 'top',\n\tdelay = 200,\n\tclassName,\n}: TooltipProps) {\n\tconst positionClasses = {\n\t\ttop: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n\t\tbottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n\t\tleft: 'right-full top-1/2 -translate-y-1/2 mr-2',\n\t\tright: 'left-full top-1/2 -translate-y-1/2 ml-2',\n\t}\n\n\tconst arrowClasses = {\n\t\ttop: 'left-1/2 -translate-x-1/2 top-full',\n\t\tbottom: 'left-1/2 -translate-x-1/2 bottom-full',\n\t\tleft: 'top-1/2 -translate-y-1/2 left-full',\n\t\tright: 'top-1/2 -translate-y-1/2 right-full',\n\t}\n\n\treturn (\n\t\t<div className='relative inline-block group'>\n\t\t\t{children}\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute z-50 whitespace-nowrap rounded-md bg-gray-800 text-white text-xs px-2 py-1 shadow-md dark:bg-gray-900',\n\t\t\t\t\t'transition-all opacity-0 scale-95 group-hover:opacity-100 group-hover:scale-100',\n\t\t\t\t\t'group-hover:delay-200 duration-200 ease-out',\n\t\t\t\t\tpositionClasses[position],\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tstyle={{ transitionDelay: `${delay}ms` }}\n\t\t\t>\n\t\t\t\t{content}\n\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'absolute w-2 h-2 bg-gray-800 dark:bg-gray-900 rotate-45',\n\t\t\t\t\t\tarrowClasses[position]\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const 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 ","import styleInject from '#style-inject';styleInject(\"@import\\\"./tailwind-config.css\\\";*{box-sizing:border-box}html,body{font-family:system-ui,Avenir,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}button{cursor:pointer}a{text-decoration:none;color:inherit}ul,ol{list-style:none;padding:0}input,textarea,button,select{font:inherit;outline:none}\\n\")"],"mappings":"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","names":["index_exports","__export","Breadcrumb","Button","Collapse","InputMain","MciTable","Modal","Pagination","Skeleton","TabPanel","Tabs","Tag","Textarea","ToastContainer","Tooltip","__toCommonJS","import_lucide_react","import_clsx","import_tailwind_merge","cn","inputs","useEscapeKey","callback","e","useClickOutside","ref","import_jsx_runtime","Breadcrumb","items","className","separatorIcon","cn","item","index","isLast","import_lucide_react","import_jsx_runtime","Button","text","icon","iconPosition","size","variant","loading","disabled","onClick","className","sizes","cn","import_lucide_react","import_react","import_jsx_runtime","Collapse","title","children","defaultOpen","icon","variant","className","titleClassName","contentClassName","isOpen","setIsOpen","contentHeight","setContentHeight","contentRef","variantConfig","cn","import_lucide_react","import_react","import_jsx_runtime","InputMain","label","placeholder","type","icon","iconPosition","size","error","success","disabled","required","value","onChange","onFocus","onBlur","className","isFocused","setIsFocused","internalValue","setInternalValue","showPassword","setShowPassword","autoFilled","setAutoFilled","currentValue","hasValue","isPassword","handleFocus","handleBlur","handleChange","e","togglePassword","p","sizes","stateStyles","handleAutoFill","cn","import_lucide_react","import_react","import_lucide_react","import_react","import_jsx_runtime","Modal","show","setShow","title","Header","Body","footer","modalRef","handleEscape","useEscapeKey","handleClick","useClickOutside","cn","import_lucide_react","import_jsx_runtime","Pagination","totalItems","currentPage","perPage","onPageChange","onPerPageChange","siblingCount","perPageOptions","showPerPage","totalPages","pages","totalPageNumbers","_","i","leftSiblingIndex","rightSiblingIndex","showLeftDots","showRightDots","range","handlePrev","handleNext","e","option","page","idx","import_jsx_runtime","Skeleton","className","variant","width","height","cn","import_react","import_jsx_runtime","Tabs","tabs","defaultTab","position","variant","className","onChange","_a","_b","activeTab","setActiveTab","indicatorStyle","setIndicatorStyle","tabsRef","activeIndex","tab","activeTabElement","offsetLeft","offsetTop","offsetWidth","offsetHeight","containerClasses","tabsContainerClasses","contentClasses","variantClasses","isVertical","cn","index","isActive","variantConfig","el","TabPanel","children","import_lucide_react","import_jsx_runtime","sizes","iconSizes","variants","Tag","children","variant","size","icon","iconPosition","closable","onClose","className","cn","import_react","import_jsx_runtime","Textarea","label","placeholder","value","onChange","required","disabled","error","className","rows","focused","setFocused","isFloating","cn","e","import_lucide_react","import_react","import_jsx_runtime","Toast","id","title","description","type","duration","position","onClose","action","isVisible","setIsVisible","isLeaving","setIsLeaving","showTimer","closeTimer","handleClose","handleAction","icons","variantClasses","iconColors","positionClasses","cn","import_jsx_runtime","ToastContainer","toasts","onRemove","position","t","Toast","import_jsx_runtime","Tooltip","content","children","position","delay","className","positionClasses","arrowClasses","cn","import_jsx_runtime","MciTable","columns","data","loading","variant","skeletonRows","actions","noDataText","sortConfig","setSortConfig","sortedData","a","b","aVal","bVal","handleSort","col","prev","getSortIcon","variantStyle","cn","headerCell","idx","_","i","Skeleton","row","styleInject","css","insertAt","head","style","styleInject"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/shared/ui/breadcrumb/Breadcrumb.tsx","../src/shared/lib/utils.ts","../src/shared/ui/button/Button.tsx","../src/shared/ui/collapse/Collapse.tsx","../src/shared/ui/inputMain/InputMain.tsx","../src/shared/ui/mciTable/MciTable.tsx","../src/shared/ui/skeleton/Skeleton.tsx","../src/shared/ui/modal/Modal.tsx","../src/shared/ui/pagination/Pagination.tsx","../src/shared/ui/tabs/Tabs.tsx","../src/shared/ui/tag/Tag.tsx","../src/shared/ui/textarea/Textarea.tsx","../src/shared/ui/toast/Toast.tsx","../src/shared/ui/toast/ToastContainer.tsx","../src/shared/ui/tooltip/Tooltip.tsx"],"sourcesContent":["import Breadcrumb from './shared/ui/breadcrumb/Breadcrumb.tsx'\nimport Button from './shared/ui/button/Button.tsx'\nimport Collapse from './shared/ui/collapse/Collapse.tsx'\nimport InputMain from './shared/ui/inputMain/InputMain.tsx'\nimport MciTable from './shared/ui/mciTable/MciTable.tsx'\nimport Modal from './shared/ui/modal/Modal.tsx'\nimport Pagination from './shared/ui/pagination/Pagination.tsx'\nimport Skeleton from './shared/ui/skeleton/Skeleton.tsx'\nimport Tabs, {TabPanel} from './shared/ui/tabs/Tabs.tsx'\nimport Tag from './shared/ui/tag/Tag.tsx'\nimport Textarea from './shared/ui/textarea/Textarea.tsx'\nimport {ToastContainer} from './shared/ui/toast/ToastContainer.tsx'\nimport Tooltip from './shared/ui/tooltip/Tooltip.tsx'\n\nexport {\n Breadcrumb,\n Button,\n Collapse,\n InputMain,\n MciTable,\n Modal,\n Pagination,\n Skeleton,\n TabPanel,\n Tabs,\n Tag,\n Textarea,\n ToastContainer,\n Tooltip,\n}\n","import { ChevronRight } from 'lucide-react'\nimport React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype BreadcrumbItem = {\n\tlabel: string\n\thref?: string\n\tonClick?: () => void\n}\n\ntype BreadcrumbProps = {\n\titems: BreadcrumbItem[]\n\tclassName?: string\n\tseparatorIcon?: React.ReactNode\n}\n\nexport default function Breadcrumb({\n\titems,\n\tclassName,\n\tseparatorIcon = (\n\t\t<ChevronRight className='w-4 h-4 text-gray-400 dark:text-gray-500' />\n\t),\n}: BreadcrumbProps) {\n\treturn (\n\t\t<nav\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center space-x-2 text-sm font-medium text-gray-600 dark:text-gray-300',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label='Breadcrumb'\n\t\t>\n\t\t\t{items.map((item, index) => {\n\t\t\t\tconst isLast = index === items.length - 1\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={index} className='flex items-center'>\n\t\t\t\t\t\t{item.href ? (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\t\tonClick={item.onClick}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'hover:text-primary-600 dark:hover:text-primary-400 transition-colors',\n\t\t\t\t\t\t\t\t\tisLast && 'text-primary-600 dark:text-primary-400'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tisLast\n\t\t\t\t\t\t\t\t\t\t? 'text-primary-600 dark:text-primary-400'\n\t\t\t\t\t\t\t\t\t\t: 'text-gray-500 dark:text-gray-400'\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t<span className='mx-2 flex items-center'>{separatorIcon}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)\n\t\t\t})}\n\t\t</nav>\n\t)\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport type { RefObject } from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Tailwind classlarni merge qilish uchun utility\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs))\n}\n\n/**\n * ESC tugmasini bosishni handle qilish\n */\nexport function useEscapeKey(callback: () => void) {\n\tconst handleEscape = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Escape') callback()\n\t}\n\n\treturn { handleEscape }\n}\n\n/**\n * Click outside handle qilish\n */\nexport function useClickOutside(\n\tref: RefObject<HTMLDivElement>,\n\tcallback: () => void\n) {\n\tconst handleClick = (e: MouseEvent) => {\n\t\tif (ref.current && !ref.current.contains(e.target as Node)) {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\treturn { handleClick }\n}\n","import { Loader } from 'lucide-react'\nimport React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype ButtonProps = {\n\ttext?: string\n\ticon?: React.ReactNode\n\ticonPosition?: 'left' | 'right'\n\tsize?: 'sm' | 'md' | 'lg'\n\tvariant?: 'primary' | 'secondary' | 'accent'\n\tloading?: boolean\n\tdisabled?: boolean\n\tonClick?: () => void\n\tclassName?: string\n}\n\nexport default function Button({\n\ttext,\n\ticon,\n\ticonPosition = 'left',\n\tsize = 'md',\n\tvariant = 'accent',\n\tloading = false,\n\tdisabled = false,\n\tonClick,\n\tclassName,\n}: ButtonProps) {\n\tconst sizes = {\n\t\tsm: 'h-[38px] px-3 text-sm gap-2',\n\t\tmd: 'h-[48px] px-4 text-base gap-2.5',\n\t\tlg: 'h-[56px] px-5 text-lg gap-3',\n\t}\n\n\tconst variants = {\n\t\tprimary: `\n\t\t\tbg-secondary-500\n\t\t\thover:bg-secondary-600\n\t\t\tactive:bg-secondary-700\n\t\t\thover:shadow-lg\n\t\t\thover:shadow-secondary-500/30\n\t\t\tactive:scale-[0.98]\n\t\t\ttext-white\n\t\t`,\n\t\tsecondary: `\n\t\t\tbg-secondary-50\n\t\t\thover:bg-secondary-100\n\t\t\tactive:bg-secondary-200\n\t\t\thover:shadow-md\n\t\t\thover:shadow-secondary-500/10\n\t\t\tactive:scale-[0.98]\n\t\t\ttext-secondary-700\n\t\t\tborder border-secondary-200\n\t\t\thover:border-secondary-300\n\t\t`,\n\t\taccent: `\n\t\t\tbg-accent-500\n\t\t\thover:bg-accent-600\n\t\t\tactive:bg-accent-700\n\t\t\thover:shadow-lg\n\t\t\thover:shadow-accent-500/30\n\t\t\tactive:scale-[0.98]\n\t\t\ttext-white\n\t\t`,\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tonClick={onClick}\n\t\t\tdisabled={disabled || loading}\n\t\t\tclassName={cn(\n\t\t\t\t'inline-flex items-center justify-center rounded-[7px] font-medium',\n\t\t\t\t'transition-all duration-300 ease-in-out',\n\t\t\t\t'transform hover:-translate-y-0.5',\n\t\t\t\t'disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:translate-y-0 disabled:hover:shadow-none',\n\t\t\t\t'focus:outline-none focus:ring-2 focus:ring-offset-2',\n\t\t\t\tvariant === 'primary' && 'focus:ring-secondary-500',\n\t\t\t\tvariant === 'secondary' && 'focus:ring-secondary-400',\n\t\t\t\tvariant === 'accent' && 'focus:ring-accent-500',\n\t\t\t\tvariants[variant],\n\t\t\t\tsizes[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{/* ICON LEFT */}\n\t\t\t{icon && iconPosition === 'left' && (\n\t\t\t\t<span className='flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110'>\n\t\t\t\t\t{loading ? <Loader className='animate-spin' size={20} /> : icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* TEXT */}\n\t\t\t{text && <span className='transition-all duration-300'>{text}</span>}\n\n\t\t\t{/* ICON RIGHT */}\n\t\t\t{icon && iconPosition === 'right' && (\n\t\t\t\t<span className='flex items-center justify-center transition-transform duration-300 ease-in-out group-hover:scale-110'>\n\t\t\t\t\t{loading ? <Loader className='animate-spin' size={20} /> : icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* AGAR TEXT VA ICON YO'Q BO'LSA */}\n\t\t\t{loading && <Loader className='animate-spin' size={20} />}\n\t\t</button>\n\t)\n}\n","import { ChevronDownIcon } from 'lucide-react'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype CollapseProps = {\n\ttitle: string\n\tchildren: React.ReactNode\n\tdefaultOpen?: boolean\n\ticon?: React.ReactNode\n\tvariant?: 'primary' | 'secondary' | 'accent'\n\tclassName?: string\n\ttitleClassName?: string\n\tcontentClassName?: string\n}\n\nexport default function Collapse({\n\ttitle,\n\tchildren,\n\tdefaultOpen = false,\n\ticon,\n\tvariant = 'primary',\n\tclassName,\n\ttitleClassName,\n\tcontentClassName,\n}: CollapseProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen)\n\tconst [contentHeight, setContentHeight] = useState(0)\n\tconst contentRef = useRef<HTMLDivElement>(null)\n\n\tuseEffect(() => {\n\t\tif (contentRef.current) {\n\t\t\tsetContentHeight(isOpen ? contentRef.current.scrollHeight : 0)\n\t\t}\n\t}, [isOpen])\n\n\tconst variantClasses = {\n\t\tprimary: {\n\t\t\ttitle:\n\t\t\t\t'bg-secondary-50 hover:bg-secondary-100 border-secondary-200 text-secondary-800',\n\t\t\tcontent: 'bg-secondary-25 border-secondary-100',\n\t\t},\n\t\tsecondary: {\n\t\t\ttitle:\n\t\t\t\t'bg-accent-50 hover:bg-accent-100 border-accent-200 text-accent-800',\n\t\t\tcontent: 'bg-accent-25 border-accent-100',\n\t\t},\n\t\taccent: {\n\t\t\ttitle: 'bg-gray-50 hover:bg-gray-100 border-gray-200 text-gray-800',\n\t\t\tcontent: 'bg-gray-25 border-gray-100',\n\t\t},\n\t}\n\n\tconst variantConfig = variantClasses[variant]\n\n\treturn (\n\t\t<div className={cn('border rounded-lg overflow-hidden', className)}>\n\t\t\t{/* Header */}\n\t\t\t<button\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full flex items-center justify-between p-4 transition-all duration-300',\n\t\t\t\t\t'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-blue-500',\n\t\t\t\t\t'border-b',\n\t\t\t\t\tvariantConfig.title\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className='flex items-center gap-3'>\n\t\t\t\t\t{icon && <span className='flex-shrink-0'>{icon}</span>}\n\t\t\t\t\t<span className={cn('font-medium text-left', titleClassName)}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\n\t\t\t\t<ChevronDownIcon\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'w-5 h-5 transition-transform duration-300 flex-shrink-0',\n\t\t\t\t\t\tisOpen && 'rotate-180'\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</button>\n\n\t\t\t{/* Content */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'transition-all duration-300 ease-out overflow-hidden',\n\t\t\t\t\tvariantConfig.content\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\theight: `${contentHeight}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div ref={contentRef} className={cn('p-4', contentClassName)}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { Eye, EyeOff } from 'lucide-react'\nimport React, { useMemo, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype InputProps = {\n\tlabel?: string\n\tplaceholder?: string\n\ttype?: 'text' | 'email' | 'password' | 'number' | 'tel'\n\ticon?: React.ReactNode\n\ticonPosition?: 'left' | 'right'\n\tsize?: 'sm' | 'md' | 'lg'\n\terror?: string\n\tsuccess?: string\n\tdisabled?: boolean\n\trequired?: boolean\n\tvalue?: string\n\tonChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n\tonFocus?: () => void\n\tonBlur?: () => void\n\tclassName?: string\n}\n\nexport default function InputMain({\n\tlabel,\n\tplaceholder,\n\ttype = 'text',\n\ticon,\n\ticonPosition = 'left',\n\tsize = 'md',\n\terror,\n\tsuccess,\n\tdisabled = false,\n\trequired = false,\n\tvalue,\n\tonChange,\n\tonFocus,\n\tonBlur,\n\tclassName,\n}: InputProps) {\n\tconst [isFocused, setIsFocused] = useState(false)\n\tconst [internalValue, setInternalValue] = useState('')\n\tconst [showPassword, setShowPassword] = useState(false)\n\tconst [autoFilled, setAutoFilled] = useState(false)\n\n\tconst currentValue = value ?? internalValue\n\tconst hasValue = Boolean(currentValue) || autoFilled\n\tconst isPassword = type === 'password'\n\n\tconst handleFocus = () => {\n\t\tsetIsFocused(true)\n\t\tonFocus?.()\n\t}\n\n\tconst handleBlur = () => {\n\t\tsetIsFocused(false)\n\t\tonBlur?.()\n\t}\n\n\tconst handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (value === undefined) setInternalValue(e.target.value)\n\t\tonChange?.(e)\n\t}\n\n\tconst togglePassword = () => setShowPassword(p => !p)\n\n\tconst sizes = useMemo(\n\t\t() => ({\n\t\t\tsm: {\n\t\t\t\tinput: 'h-[38px] text-sm',\n\t\t\t\tpadding: icon\n\t\t\t\t\t? iconPosition === 'left'\n\t\t\t\t\t\t? 'pl-10 pr-3'\n\t\t\t\t\t\t: 'pl-3 pr-10'\n\t\t\t\t\t: 'px-3',\n\t\t\t\ticon: 'w-4 h-4',\n\t\t\t\ticonWrapper: iconPosition === 'left' ? 'left-3' : 'right-3',\n\t\t\t\tlabelFont: 'text-xs',\n\t\t\t},\n\t\t\tmd: {\n\t\t\t\tinput: 'h-[48px] text-base',\n\t\t\t\tpadding: icon\n\t\t\t\t\t? iconPosition === 'left'\n\t\t\t\t\t\t? 'pl-12 pr-4'\n\t\t\t\t\t\t: 'pl-4 pr-12'\n\t\t\t\t\t: 'px-4',\n\t\t\t\ticon: 'w-5 h-5',\n\t\t\t\ticonWrapper: iconPosition === 'left' ? 'left-3.5' : 'right-3.5',\n\t\t\t\tlabelFont: 'text-sm',\n\t\t\t},\n\t\t\tlg: {\n\t\t\t\tinput: 'h-[56px] text-lg',\n\t\t\t\tpadding: icon\n\t\t\t\t\t? iconPosition === 'left'\n\t\t\t\t\t\t? 'pl-14 pr-5'\n\t\t\t\t\t\t: 'pl-5 pr-14'\n\t\t\t\t\t: 'px-5',\n\t\t\t\ticon: 'w-6 h-6',\n\t\t\t\ticonWrapper: iconPosition === 'left' ? 'left-4' : 'right-4',\n\t\t\t\tlabelFont: 'text-base',\n\t\t\t},\n\t\t}),\n\t\t[icon, iconPosition]\n\t)\n\n\tconst stateStyles = useMemo(() => {\n\t\tif (error)\n\t\t\treturn 'border-error-500 focus:border-error-600 focus:ring-error-500/20'\n\t\tif (success)\n\t\t\treturn 'border-success-500 focus:border-success-600 focus:ring-success-500/20'\n\t\treturn 'border-gray-300 hover:border-gray-400 focus:border-accent-500 focus:ring-accent-500/20'\n\t}, [error, success])\n\n\t// Autofill holatini aniqlash\n\tconst handleAutoFill = (e: React.AnimationEvent<HTMLInputElement>) => {\n\t\tif (e.animationName === 'onAutoFillStart') {\n\t\t\tsetAutoFilled(true)\n\t\t} else if (e.animationName === 'onAutoFillCancel') {\n\t\t\tsetAutoFilled(false)\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className={cn('w-full', className)}>\n\t\t\t<div className='relative flex items-center'>\n\t\t\t\t<input\n\t\t\t\t\ttype={isPassword && showPassword ? 'text' : type}\n\t\t\t\t\tvalue={currentValue}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tonAnimationStart={handleAutoFill}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tplaceholder={label ? '' : placeholder}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'w-full rounded-[7px] border bg-white font-medium outline-none transition-all duration-300 ease-in-out',\n\t\t\t\t\t\t'focus:ring-4 disabled:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-60 autofill:shadow-[inset_0_0_0px_1000px_white]',\n\t\t\t\t\t\tsizes[size].input,\n\t\t\t\t\t\tsizes[size].padding,\n\t\t\t\t\t\tstateStyles\n\t\t\t\t\t)}\n\t\t\t\t\tautoComplete='on'\n\t\t\t\t/>\n\n\t\t\t\t{/* FLOATING LABEL */}\n\t\t\t\t{label && (\n\t\t\t\t\t<label\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'absolute pointer-events-none transition-all duration-300 ease-in-out font-medium',\n\t\t\t\t\t\t\ticon && iconPosition === 'left' && !hasValue && !isFocused\n\t\t\t\t\t\t\t\t? sizes[size].padding\n\t\t\t\t\t\t\t\t: 'left-4',\n\t\t\t\t\t\t\tisFocused || hasValue\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t'top-0 -translate-y-1/2 bg-white px-2',\n\t\t\t\t\t\t\t\t\t\tsizes[size].labelFont,\n\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t\t\t? 'text-error-600'\n\t\t\t\t\t\t\t\t\t\t\t: success\n\t\t\t\t\t\t\t\t\t\t\t? 'text-success-600'\n\t\t\t\t\t\t\t\t\t\t\t: 'text-accent-600'\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t'top-1/2 -translate-y-1/2 text-gray-500',\n\t\t\t\t\t\t\t\t\t\tsizes[size].input.includes('38') && 'text-sm',\n\t\t\t\t\t\t\t\t\t\tsizes[size].input.includes('48') && 'text-base',\n\t\t\t\t\t\t\t\t\t\tsizes[size].input.includes('56') && 'text-lg'\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t\t{required && <span className='text-error-500 ml-1'>*</span>}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\n\t\t\t\t{/* ICON */}\n\t\t\t\t{icon && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'absolute top-1/2 -translate-y-1/2 flex items-center transition-all duration-300',\n\t\t\t\t\t\t\tsizes[size].iconWrapper,\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t? 'text-error-500'\n\t\t\t\t\t\t\t\t: success\n\t\t\t\t\t\t\t\t? 'text-success-500'\n\t\t\t\t\t\t\t\t: isFocused\n\t\t\t\t\t\t\t\t? 'text-accent-500'\n\t\t\t\t\t\t\t\t: 'text-gray-400'\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className={cn(sizes[size].icon, 'mr-2')}>{icon}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* PASSWORD TOGGLE */}\n\t\t\t\t{isPassword && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\tonClick={togglePassword}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'absolute top-1/2 -translate-y-1/2 flex items-center justify-center text-gray-400 hover:text-gray-600 transition-all',\n\t\t\t\t\t\t\t'right-3'\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? (\n\t\t\t\t\t\t\t<EyeOff className={cn(sizes[size].icon)} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Eye className={cn(sizes[size].icon)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* ERROR MESSAGE */}\n\t\t\t{error && (\n\t\t\t\t<p className='mt-1.5 text-sm text-error-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]'>\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t{/* SUCCESS MESSAGE */}\n\t\t\t{success && !error && (\n\t\t\t\t<p className='mt-1.5 text-sm text-success-600 flex items-center gap-1 animate-[slideDown_0.3s_ease-out]'>\n\t\t\t\t\t{success}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t{/* Autofill animatsiyasi */}\n\t\t\t<style>{`\n\t\t\t\tinput {\n\t\t\t\t\tanimation-name: onAutoFillCancel;\n\t\t\t\t}\n\t\t\t\tinput:-webkit-autofill {\n\t\t\t\t\tanimation-name: onAutoFillStart;\n\t\t\t\t}\n\t\t\t\t@keyframes onAutoFillStart {}\n\t\t\t\t@keyframes onAutoFillCancel {}\n\t\t\t`}</style>\n\t\t</div>\n\t)\n}\n","import { ArrowUpDown, Box, ChevronDown, ChevronUp } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport { cn } from '../../lib/utils'\nimport type { MciTableColumn } from '../../types/MciTableType'\nimport Skeleton from \"../skeleton/Skeleton.tsx\";\n\ninterface MciTableProps<T extends Record<string, unknown>> {\n\tcolumns: MciTableColumn<T>[]\n\tdata: T[]\n\tloading?: boolean\n\tvariant?: 'clean' | 'elevated' | 'bordered'\n\tskeletonRows?: number\n\tactions?: React.ReactNode\n\tnoDataText?: string\n}\n\nexport default function MciTable<T extends Record<string, unknown>>({\n\tcolumns,\n\tdata,\n\tloading = false,\n\tvariant = 'clean',\n\tskeletonRows = 5,\n\tactions,\n\tnoDataText,\n}: MciTableProps<T>) {\n\tconst [sortConfig, setSortConfig] = useState<{\n\t\tkey: keyof T\n\t\tdirection: 'asc' | 'desc' | null\n\t} | null>(null)\n\n\tconst sortedData = useMemo(() => {\n\t\tif (!sortConfig || !sortConfig.direction) return data\n\t\treturn [...data].sort((a, b) => {\n\t\t\tconst aVal = a[sortConfig.key]\n\t\t\tconst bVal = b[sortConfig.key]\n\t\t\tif (aVal < bVal) return sortConfig.direction === 'asc' ? -1 : 1\n\t\t\tif (aVal > bVal) return sortConfig.direction === 'asc' ? 1 : -1\n\t\t\treturn 0\n\t\t})\n\t}, [data, sortConfig])\n\n\tconst handleSort = (col: MciTableColumn<T>) => {\n\t\tif (!col.sortable) return\n\t\tsetSortConfig(prev => {\n\t\t\tif (!prev || prev.key !== col.key) {\n\t\t\t\treturn { key: col.key, direction: 'asc' }\n\t\t\t}\n\t\t\tif (prev.direction === 'asc') return { key: col.key, direction: 'desc' }\n\t\t\tif (prev.direction === 'desc') return { key: col.key, direction: null }\n\t\t\treturn null\n\t\t})\n\t}\n\n\tconst getSortIcon = (col: MciTableColumn<T>) => {\n\t\tif (!col.sortable) return null\n\t\tif (!sortConfig || sortConfig.key !== col.key || !sortConfig.direction) {\n\t\t\treturn <ArrowUpDown size={15} className='opacity-40' />\n\t\t}\n\t\treturn sortConfig.direction === 'asc' ? (\n\t\t\t<ChevronUp size={15} />\n\t\t) : (\n\t\t\t<ChevronDown size={15} />\n\t\t)\n\t}\n\n\tconst variantStyle = cn(\n\t\t'w-full border-separate border-spacing-0 transition-all duration-300',\n\t\tvariant === 'clean' && 'bg-white',\n\t\tvariant === 'elevated' && 'bg-white shadow-lg',\n\t\tvariant === 'bordered' && 'border border-secondary-200 rounded-lg'\n\t)\n\n\tconst headerCell = (col: MciTableColumn<T>) =>\n\t\tcn(\n\t\t\t'bg-secondary-50 text-secondary-800 text-sm font-semibold py-3 px-4 select-none',\n\t\t\t'border-b border-secondary-200 transition-colors',\n\t\t\tcol.align === 'center' && 'text-center',\n\t\t\tcol.align === 'right' && 'text-right',\n\t\t\tcol.sortable && 'cursor-pointer hover:bg-secondary-100/70'\n\t\t)\n\n\treturn (\n\t\t<div className='w-full space-y-3'>\n\t\t\t{actions && (\n\t\t\t\t<div className='flex justify-between items-center mb-2'>{actions}</div>\n\t\t\t)}\n\n\t\t\t<div className='w-full overflow-x-auto rounded-lg'>\n\t\t\t\t<table className={variantStyle}>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t{columns.map((col, idx) => (\n\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\tkey={String(col.key)}\n\t\t\t\t\t\t\t\t\tonClick={() => handleSort(col)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\theaderCell(col),\n\t\t\t\t\t\t\t\t\t\tidx === 0 && 'rounded-tl-lg',\n\t\t\t\t\t\t\t\t\t\tidx === columns.length - 1 && 'rounded-tr-lg'\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ width: col.width }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className='flex items-center justify-between gap-2'>\n\t\t\t\t\t\t\t\t\t\t<span className='truncate'>{col.title}</span>\n\t\t\t\t\t\t\t\t\t\t{getSortIcon(col)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t{loading\n\t\t\t\t\t\t\t? Array.from({ length: skeletonRows }).map((_, idx) => (\n\t\t\t\t\t\t\t\t\t<tr key={idx}>\n\t\t\t\t\t\t\t\t\t\t{columns.map((_, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<td key={i} className='px-4 py-3'>\n\t\t\t\t\t\t\t\t\t\t\t\t<Skeleton height={18} variant='rounded' />\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t ))\n\t\t\t\t\t\t\t: sortedData.map((row, idx) => (\n\t\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'border-b border-secondary-100 transition-all duration-200'\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{columns.map((col, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'px-4 py-3 text-sm text-gray-800',\n\t\t\t\t\t\t\t\t\t\t\t\t\tcol.align === 'center' && 'text-center',\n\t\t\t\t\t\t\t\t\t\t\t\t\tcol.align === 'right' && 'text-right'\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{col.render\n\t\t\t\t\t\t\t\t\t\t\t\t\t? col.render(row[col.key], row)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: String(row[col.key])}\n\t\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t ))}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\n\t\t\t{!loading && sortedData.length === 0 && (\n\t\t\t\t<div className='flex flex-col items-center justify-center py-10 text-gray-500 dark:text-gray-400 animate-[fadeIn_0.4s_ease-in-out]'>\n\t\t\t\t\t<div className='relative'>\n\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\tsize={64}\n\t\t\t\t\t\t\tclassName='mb-3 text-secondary-400 dark:text-secondary-500 opacity-80 animate-[float_2.5s_ease-in-out_infinite]'\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div className='absolute inset-0 blur-2xl bg-secondary-200/20 dark:bg-secondary-700/20 rounded-full scale-75 animate-[pulse_3s_ease-in-out_infinite]' />\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className='text-sm font-medium animate-[fadeUp_0.6s_ease-out]'>\n\t\t\t\t\t\t{noDataText}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import { cn } from '../../lib/utils.ts'\n\ntype SkeletonProps = {\n\tclassName?: string\n\tvariant?: 'default' | 'rounded' | 'circle'\n\twidth?: string | number\n\theight?: string | number\n}\n\nexport default function Skeleton({\n\tclassName,\n\tvariant = 'default',\n\twidth = '100%',\n\theight = '1rem',\n}: SkeletonProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'relative overflow-hidden bg-secondary-200 dark:bg-secondary-800',\n\t\t\t\t'rounded-sm',\n\t\t\t\tvariant === 'circle' && 'rounded-full',\n\t\t\t\tvariant === 'rounded' && 'rounded-md',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\twidth: typeof width === 'number' ? `${width}px` : width,\n\t\t\t\theight: typeof height === 'number' ? `${height}px` : height,\n\t\t\t}}\n\t\t>\n\t\t\t<div className='absolute inset-0 shimmer-mask' />\n\t\t</div>\n\t)\n}\n","import { X } from 'lucide-react'\nimport React, { useEffect, useRef } from 'react'\nimport { cn, useClickOutside, useEscapeKey } from '../../lib/utils'\n\ninterface ModalProps {\n\tshow: boolean\n\tsetShow: (show: boolean) => void\n\ttitle?: string\n\tHeader?: React.ReactNode\n\tBody?: React.ReactNode\n\tfooter?: React.ReactNode\n}\n\nexport default function Modal({\n\tshow,\n\tsetShow,\n\ttitle,\n\tHeader,\n\tBody,\n\tfooter,\n}: ModalProps) {\n\tconst modalRef = useRef<HTMLDivElement>(null!)\n\n\t// ESC\n\tconst { handleEscape } = useEscapeKey(() => setShow(false))\n\tuseEffect(() => {\n\t\tif (show) {\n\t\t\tdocument.addEventListener('keydown', handleEscape)\n\t\t\tdocument.body.style.overflow = 'hidden'\n\t\t} else {\n\t\t\tdocument.body.style.overflow = 'unset'\n\t\t}\n\t\treturn () => document.removeEventListener('keydown', handleEscape)\n\t}, [show, handleEscape])\n\n\t// Click outside\n\tconst { handleClick } = useClickOutside(modalRef, () => setShow(false))\n\tuseEffect(() => {\n\t\tif (show) document.addEventListener('mousedown', handleClick)\n\t\treturn () => document.removeEventListener('mousedown', handleClick)\n\t}, [show, handleClick])\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'fixed inset-0 z-50 flex items-center justify-center p-4 bg-secondary-100/50 backdrop-blur-sm transition-all duration-500 ease-in-out',\n\t\t\t\tshow\n\t\t\t\t\t? 'opacity-100 pointer-events-auto'\n\t\t\t\t\t: 'opacity-0 pointer-events-none'\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={modalRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'relative w-full max-w-lg rounded-[7px] shadow-xl bg-secondary-50 text-gray-800',\n\t\t\t\t\t'transform transition-all duration-500 ease-out',\n\t\t\t\t\tshow ? 'opacity-100 scale-100' : 'opacity-0 scale-90'\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Header */}\n\t\t\t\t{(Header || title) && (\n\t\t\t\t\t<div className='flex items-center justify-between px-6 py-4 border-b border-secondary-300'>\n\t\t\t\t\t\t{Header || (\n\t\t\t\t\t\t\t<h2 className='text-xl font-semibold text-gray-800'>{title}</h2>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={() => setShow(false)}\n\t\t\t\t\t\t\tclassName='text-gray-800 hover:text-secondary-300 active:animate-spin transition'\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X className='w-5 h-5' />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Body */}\n\t\t\t\t{Body && (\n\t\t\t\t\t<div className='px-6 py-4 max-h-96 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300'>\n\t\t\t\t\t\t{Body}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Footer */}\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className='flex items-center justify-end gap-3 px-6 py-4 border-t border-secondary-300'>\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { ChevronLeft, ChevronRight } from 'lucide-react'\n\ninterface PaginationProps {\n\ttotalItems: number\n\tcurrentPage: number\n\tperPage: number\n\tonPageChange: (page: number) => void\n\tonPerPageChange?: (value: number) => void\n\tsiblingCount?: number\n\tperPageOptions?: number[]\n\tshowPerPage?: boolean\n}\n\nexport default function Pagination({\n\ttotalItems,\n\tcurrentPage,\n\tperPage,\n\tonPageChange,\n\tonPerPageChange,\n\tsiblingCount = 1,\n\tperPageOptions = [10, 20, 30],\n\tshowPerPage = true,\n}: PaginationProps) {\n\tconst totalPages = Math.ceil(totalItems / perPage)\n\n\tconst createPageRange = () => {\n\t\tconst totalPageNumbers = siblingCount * 2 + 5\n\t\tif (totalPages <= totalPageNumbers) {\n\t\t\treturn Array.from({ length: totalPages }, (_, i) => i + 1)\n\t\t}\n\n\t\tconst leftSiblingIndex = Math.max(currentPage - siblingCount, 2)\n\t\tconst rightSiblingIndex = Math.min(\n\t\t\tcurrentPage + siblingCount,\n\t\t\ttotalPages - 1\n\t\t)\n\n\t\tconst showLeftDots = leftSiblingIndex > 2\n\t\tconst showRightDots = rightSiblingIndex < totalPages - 1\n\n\t\tconst range: (number | string)[] = [1]\n\n\t\tif (showLeftDots) range.push('...')\n\n\t\tfor (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n\t\t\trange.push(i)\n\t\t}\n\n\t\tif (showRightDots) range.push('...')\n\n\t\trange.push(totalPages)\n\n\t\treturn range\n\t}\n\n\tconst pages = createPageRange()\n\n\tconst handlePrev = () => {\n\t\tif (currentPage > 1) onPageChange(currentPage - 1)\n\t}\n\n\tconst handleNext = () => {\n\t\tif (currentPage < totalPages) onPageChange(currentPage + 1)\n\t}\n\n\treturn (\n\t\t<div className='w-full flex flex-col md:flex-row md:justify-between md:items-center gap-4 py-4'>\n\t\t\t{/* Per Page Select */}\n\t\t\t{showPerPage && onPerPageChange && (\n\t\t\t\t<div className='flex justify-center md:justify-start w-full md:w-auto'>\n\t\t\t\t\t<select\n\t\t\t\t\t\tvalue={perPage}\n\t\t\t\t\t\tonChange={e => onPerPageChange(Number(e.target.value))}\n\t\t\t\t\t\tclassName='border rounded-lg px-3 py-2 text-sm bg-white\n hover:border-secondary-500 \n focus:outline-none focus:ring-2 focus:ring-secondary-500\n transition-all duration-200'\n\t\t\t\t\t>\n\t\t\t\t\t\t{perPageOptions.map(option => (\n\t\t\t\t\t\t\t<option key={option} value={option}>\n\t\t\t\t\t\t\t\t{option} / page\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Pagination */}\n\t\t\t<div className='flex items-center justify-center md:justify-end w-full'>\n\t\t\t\t{/* Prev */}\n\t\t\t\t<button\n\t\t\t\t\tonClick={handlePrev}\n\t\t\t\t\tdisabled={currentPage === 1}\n\t\t\t\t\tclassName={`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200\n ${\n\t\t\t\t\t\t\tcurrentPage === 1\n\t\t\t\t\t\t\t\t? 'opacity-40 cursor-not-allowed'\n\t\t\t\t\t\t\t\t: 'hover:bg-secondary-100 hover:text-secondary-700'\n\t\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t<ChevronLeft size={18} />\n\t\t\t\t</button>\n\n\t\t\t\t{/* Page numbers */}\n\t\t\t\t<div className='flex items-center gap-1 mx-2'>\n\t\t\t\t\t{pages.map((page, idx) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tonClick={() => typeof page === 'number' && onPageChange(page)}\n\t\t\t\t\t\t\tdisabled={page === '...'}\n\t\t\t\t\t\t\tclassName={`min-w-[40px] rounded-xl border px-3 py-2 text-sm font-medium transition-all duration-200\n ${\n\t\t\t\t\t\t\t\t\tpage === currentPage\n\t\t\t\t\t\t\t\t\t\t? 'bg-secondary-500 text-white shadow-md'\n\t\t\t\t\t\t\t\t\t\t: page === '...'\n\t\t\t\t\t\t\t\t\t\t? 'cursor-default border-none text-gray-400'\n\t\t\t\t\t\t\t\t\t\t: 'bg-white text-secondary-700 hover:bg-secondary-100'\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{page}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Next */}\n\t\t\t\t<button\n\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\tdisabled={currentPage === totalPages}\n\t\t\t\t\tclassName={`flex items-center justify-center rounded-xl border px-3 py-2 transition-all duration-200\n ${\n\t\t\t\t\t\t\tcurrentPage === totalPages\n\t\t\t\t\t\t\t\t? 'opacity-40 cursor-not-allowed'\n\t\t\t\t\t\t\t\t: 'hover:bg-secondary-100 hover:text-secondary-700'\n\t\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t<ChevronRight size={18} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype Tab = {\n\tid: string\n\tlabel: string\n\ticon?: React.ReactNode\n\tcontent: React.ReactNode\n\tdisabled?: boolean\n}\n\ntype TabsProps = {\n\ttabs: Tab[]\n\tdefaultTab?: string\n\tposition?: 'top' | 'bottom' | 'left' | 'right'\n\tvariant?: 'primary' | 'secondary' | 'accent'\n\tclassName?: string\n\tonChange?: (tabId: string | number) => void\n}\n\nexport default function Tabs({\n\ttabs,\n\tdefaultTab,\n\tposition = 'top',\n\tvariant = 'primary',\n\tclassName,\n\tonChange,\n}: TabsProps) {\n\tconst [activeTab, setActiveTab] = useState(defaultTab || tabs[0]?.id)\n\tconst [indicatorStyle, setIndicatorStyle] = useState({})\n\tconst tabsRef = useRef<(HTMLButtonElement | null)[]>([])\n\n\tuseEffect(() => {\n\t\tconst activeIndex = tabs.findIndex(tab => tab.id === activeTab)\n\t\tconst activeTabElement = tabsRef.current[activeIndex]\n\n\t\tif (activeTabElement) {\n\t\t\tconst { offsetLeft, offsetTop, offsetWidth, offsetHeight } =\n\t\t\t\tactiveTabElement\n\n\t\t\tsetIndicatorStyle({\n\t\t\t\tleft: offsetLeft,\n\t\t\t\ttop: offsetTop,\n\t\t\t\twidth: offsetWidth,\n\t\t\t\theight: offsetHeight,\n\t\t\t\ttransition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n\t\t\t})\n\t\t}\n\t}, [activeTab, position, tabs])\n\n\tconst containerClasses = {\n\t\ttop: 'flex-col',\n\t\tbottom: 'flex-col-reverse',\n\t\tleft: 'flex-row',\n\t\tright: 'flex-row-reverse',\n\t}\n\n\tconst tabsContainerClasses = {\n\t\ttop: 'flex-row',\n\t\tbottom: 'flex-row',\n\t\tleft: 'flex-col',\n\t\tright: 'flex-col',\n\t}\n\n\tconst contentClasses = {\n\t\ttop: 'mt-6',\n\t\tbottom: 'mb-6',\n\t\tleft: 'ml-6',\n\t\tright: 'mr-6',\n\t}\n\n\tconst variantClasses = {\n\t\tprimary: {\n\t\t\tactive: 'text-secondary-600',\n\t\t\tinactive:\n\t\t\t\t'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n\t\t\tdisabled: 'text-gray-300 dark:text-gray-600 cursor-not-allowed',\n\t\t\tbg: 'bg-secondary-100 dark:bg-secondary-900',\n\t\t},\n\t\tsecondary: {\n\t\t\tactive: 'text-accent-600',\n\t\t\tinactive:\n\t\t\t\t'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n\t\t\tdisabled: 'text-gray-300 dark:text-gray-600 cursor-not-allowed',\n\t\t\tbg: 'bg-accent-100 dark:bg-accent-900',\n\t\t},\n\t\taccent: {\n\t\t\tactive: 'text-gray-800 dark:text-gray-200',\n\t\t\tinactive:\n\t\t\t\t'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n\t\t\tdisabled: 'text-gray-300 dark:text-gray-600 cursor-not-allowed',\n\t\t\tbg: 'bg-gray-100 dark:bg-gray-800',\n\t\t},\n\t}\n\n\tconst isVertical = position === 'left' || position === 'right'\n\n\treturn (\n\t\t<div className={cn('flex w-full', containerClasses[position], className)}>\n\t\t\t{/* Tabs Container */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex relative bg-gray-50 dark:bg-gray-900 rounded-lg p-1',\n\t\t\t\t\ttabsContainerClasses[position],\n\t\t\t\t\tisVertical ? 'min-w-48' : 'w-full'\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Animated Background Indicator */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'absolute rounded-md transition-all duration-300 ease-out',\n\t\t\t\t\t\tvariantClasses[variant].bg,\n\t\t\t\t\t\tisVertical ? 'w-full' : 'h-full'\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={indicatorStyle}\n\t\t\t\t/>\n\n\t\t\t\t{tabs.map((tab, index) => {\n\t\t\t\t\tconst isActive = activeTab === tab.id\n\t\t\t\t\tconst variantConfig = variantClasses[variant]\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={tab.id}\n ref={(el) => {\n tabsRef.current[index] = el\n }}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (!tab.disabled) {\n\t\t\t\t\t\t\t\t\tsetActiveTab(tab.id)\n\t\t\t\t\t\t\t\t\tonChange?.(tab.id)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={tab.disabled}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'relative flex items-center justify-center gap-2 px-4 py-3 font-medium',\n\t\t\t\t\t\t\t\t'text-sm whitespace-nowrap transition-all duration-200 z-10',\n\t\t\t\t\t\t\t\t'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500',\n\t\t\t\t\t\t\t\t'rounded-md',\n\t\t\t\t\t\t\t\tisActive\n\t\t\t\t\t\t\t\t\t? [variantConfig.active, 'font-semibold']\n\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\tvariantConfig.inactive,\n\t\t\t\t\t\t\t\t\t\t\t'hover:bg-white/50 dark:hover:bg-gray-800/50',\n\t\t\t\t\t\t\t\t\t ],\n\t\t\t\t\t\t\t\ttab.disabled && variantConfig.disabled,\n\t\t\t\t\t\t\t\tisVertical ? 'w-full justify-start' : 'flex-1'\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{tab.icon && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-shrink-0 transition-transform duration-200',\n\t\t\t\t\t\t\t\t\t\tisActive && 'scale-110'\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{tab.icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className='relative z-10'>{tab.label}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* Tab Content with Smooth Transition */}\n\t\t\t<div className={cn('flex-1 overflow-hidden', contentClasses[position])}>\n\t\t\t\t<div key={activeTab} className='animate-fade-in'>\n\t\t\t\t\t{tabs.find(tab => tab.id === activeTab)?.content}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\ntype TabPanelProps = {\n\tchildren: React.ReactNode\n\tclassName?: string\n}\n\nexport function TabPanel({ children, className }: TabPanelProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'p-6 rounded-lg bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n","import { X } from 'lucide-react'\nimport React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype TagProps = {\n\tchildren: React.ReactNode\n\tvariant?: 'default' | 'secondary' | 'success' | 'error' | 'info' | 'accent'\n\tsize?: 'sm' | 'md' | 'lg'\n\ticon?: React.ReactNode\n\ticonPosition?: 'left' | 'right'\n\trounded?: boolean\n\tclosable?: boolean\n\tonClose?: () => void\n\tclassName?: string\n}\n\nconst sizes = {\n\tsm: 'text-xs px-2 py-0.5',\n\tmd: 'text-sm px-3 py-1',\n\tlg: 'text-base px-4 py-1.5',\n}\n\nconst iconSizes = {\n\tsm: 'w-3 h-3',\n\tmd: 'w-4 h-4',\n\tlg: 'w-5 h-5',\n}\n\nconst variants = {\n\tdefault:\n\t\t'bg-gray-100 text-gray-800 border border-gray-200 dark:bg-gray-800 dark:text-gray-100 dark:border-gray-700',\n\tsecondary:\n\t\t'bg-secondary-100 text-secondary-800 border border-secondary-200 dark:bg-secondary-800 dark:text-secondary-50 dark:border-secondary-700',\n\tsuccess:\n\t\t'bg-success-100 text-success-800 border border-success-200 dark:bg-success-800 dark:text-success-50 dark:border-success-700',\n\terror:\n\t\t'bg-error-100 text-error-800 border border-error-200 dark:bg-error-800 dark:text-error-50 dark:border-error-700',\n\tinfo: 'bg-info-100 text-info-800 border border-info-200 dark:bg-info-800 dark:text-info-50 dark:border-info-700',\n\taccent:\n\t\t'bg-accent-100 text-accent-800 border border-accent-200 dark:bg-accent-800 dark:text-accent-50 dark:border-accent-700',\n}\n\nexport default function Tag({\n\tchildren,\n\tvariant = 'default',\n\tsize = 'md',\n\ticon,\n\ticonPosition = 'left',\n\tclosable = false,\n\tonClose,\n\tclassName,\n}: TagProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t'inline-flex items-center font-medium animate-[fadeIn_0.3s_ease-out] rounded-[7px]',\n\t\t\t\tsizes[size],\n\t\t\t\tvariants[variant],\n\t\t\t\ticon && 'gap-1.5',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{/* ICON LEFT */}\n\t\t\t{icon && iconPosition === 'left' && (\n\t\t\t\t<span className={`flex items-center ${cn(iconSizes[size])}`}>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* TEXT */}\n\t\t\t<span>{children}</span>\n\n\t\t\t{/* ICON RIGHT */}\n\t\t\t{icon && iconPosition === 'right' && (\n\t\t\t\t<span className={`flex items-center ${cn(iconSizes[size])}`}>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{/* CLOSE BUTTON */}\n\t\t\t{closable && (\n\t\t\t\t<button\n\t\t\t\t\ttype='button'\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\tclassName='ml-1 rounded-full p-0.5 hover:bg-black/10 dark:hover:bg-white/10 transition-colors'\n\t\t\t\t>\n\t\t\t\t\t<X className={cn(iconSizes[size])} />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</span>\n\t)\n}\n","import { useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype TextareaProps = {\n\tlabel?: string\n\tplaceholder?: string\n\tvalue?: string\n\tonChange?: (value: string) => void\n\trequired?: boolean\n\tdisabled?: boolean\n\terror?: string\n\tclassName?: string\n\trows?: number\n}\n\nexport default function Textarea({\n\tlabel,\n\tplaceholder,\n\tvalue = '',\n\tonChange,\n\trequired = false,\n\tdisabled = false,\n\terror,\n\tclassName,\n\trows = 4,\n}: TextareaProps) {\n\tconst [focused, setFocused] = useState(false)\n\n\tconst isFloating = focused || value.length > 0\n\n\treturn (\n\t\t<div className='relative w-full'>\n\t\t\t{/* Label */}\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'absolute left-3 top-2 text-gray-500 dark:text-gray-400 transition-all duration-200 pointer-events-none',\n\t\t\t\t\t\tisFloating\n\t\t\t\t\t\t\t? 'text-xs -translate-y-3 bg-white dark:bg-gray-900 px-1'\n\t\t\t\t\t\t\t: 'text-sm translate-y-0'\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t\t{required && <span className='text-error-500 ml-0.5'>*</span>}\n\t\t\t\t</label>\n\t\t\t)}\n\n\t\t\t{/* Textarea */}\n\t\t\t<textarea\n\t\t\t\trows={rows}\n\t\t\t\tplaceholder={label ? undefined : placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={e => onChange?.(e.target.value)}\n\t\t\t\tonFocus={() => setFocused(true)}\n\t\t\t\tonBlur={() => setFocused(false)}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full rounded-md border border-gray-300 dark:border-gray-700 bg-transparent text-gray-900 dark:text-gray-100 px-3 py-2 outline-none transition-all resize-none',\n\t\t\t\t\t'focus:border-primary-500 focus:ring-1 focus:ring-primary-500',\n\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed',\n\t\t\t\t\terror &&\n\t\t\t\t\t\t'border-error-500 focus:ring-error-500 focus:border-error-500',\n\t\t\t\t\tlabel && 'pt-5',\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t{/* Error message */}\n\t\t\t{error && <p className='mt-1 text-sm text-error-500'>{error}</p>}\n\t\t</div>\n\t)\n}\n","import {\n\tAlertCircle,\n\tCheckCircle2,\n\tInfo,\n\tLoader2,\n\tX,\n\tXCircle,\n} from 'lucide-react'\nimport { useEffect, useState } from 'react'\nimport { cn } from '../../lib/utils.ts'\n\n// --- TYPES ---\ntype ToastType = 'success' | 'error' | 'warning' | 'info' | 'loading'\n\nexport type ToastProps = {\n\tid?: string\n\ttitle: string\n\tdescription?: string\n\ttype?: ToastType\n\tduration?: number\n\tposition?:\n\t\t| 'top-right'\n\t\t| 'top-left'\n\t\t| 'bottom-right'\n\t\t| 'bottom-left'\n\t\t| 'top-center'\n\t\t| 'bottom-center'\n\tonClose?: (id: string) => void\n\taction?: {\n\t\tlabel: string\n\t\tonClick: () => void\n\t}\n}\n\n// --- MAIN TOAST COMPONENT ---\nexport function Toast({\n\tid = Math.random().toString(36),\n\ttitle,\n\tdescription,\n\ttype = 'info',\n\tduration = 5000,\n\tposition = 'top-right',\n\tonClose,\n\taction,\n}: ToastProps) {\n\tconst [isVisible, setIsVisible] = useState(false)\n\tconst [isLeaving, setIsLeaving] = useState(false)\n\n\tuseEffect(() => {\n\t\tconst showTimer = setTimeout(() => setIsVisible(true), 100)\n\t\tif (duration !== Infinity) {\n\t\t\tconst closeTimer = setTimeout(() => handleClose(), duration)\n\t\t\treturn () => {\n\t\t\t\tclearTimeout(showTimer)\n\t\t\t\tclearTimeout(closeTimer)\n\t\t\t}\n\t\t}\n\t\treturn () => clearTimeout(showTimer)\n\t}, [duration])\n\n\tconst handleClose = () => {\n\t\tsetIsLeaving(true)\n\t\tsetTimeout(() => {\n\t\t\tsetIsVisible(false)\n\t\t\tonClose?.(id)\n\t\t}, 300)\n\t}\n\n\tconst handleAction = () => {\n\t\taction?.onClick()\n\t\thandleClose()\n\t}\n\n\tconst icons = {\n\t\tsuccess: <CheckCircle2 className='w-5 h-5' />,\n\t\terror: <XCircle className='w-5 h-5' />,\n\t\twarning: <AlertCircle className='w-5 h-5' />,\n\t\tinfo: <Info className='w-5 h-5' />,\n\t\tloading: <Loader2 className='w-5 h-5 animate-spin' />,\n\t}\n\n\tconst variantClasses = {\n\t\tsuccess: 'bg-success-50 border-success-200 text-success-800',\n\t\terror: 'bg-error-50 border-error-200 text-error-800',\n\t\twarning: 'bg-secondary-50 border-secondary-200 text-secondary-800',\n\t\tinfo: 'bg-info-50 border-info-200 text-info-800',\n\t\tloading: 'bg-gray-50 border-gray-200 text-gray-800',\n\t}\n\n\tconst iconColors = {\n\t\tsuccess: 'text-success-600',\n\t\terror: 'text-error-600',\n\t\twarning: 'text-secondary-600',\n\t\tinfo: 'text-info-600',\n\t\tloading: 'text-gray-600',\n\t}\n\n\tconst positionClasses = {\n\t\t'top-right': 'top-4 right-4',\n\t\t'top-left': 'top-4 left-4',\n\t\t'bottom-right': 'bottom-4 right-4',\n\t\t'bottom-left': 'bottom-4 left-4',\n\t\t'top-center': 'top-4 left-1/2 -translate-x-1/2',\n\t\t'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n\t}\n\n\tif (!isVisible) return null\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'fixed z-50 transform transition-all duration-300',\n\t\t\t\tpositionClasses[position],\n\t\t\t\tisLeaving ? 'opacity-0 scale-95' : 'opacity-100 scale-100',\n\t\t\t\tposition.includes('top') && !isLeaving && 'animate-slide-down',\n\t\t\t\tposition.includes('bottom') && !isLeaving && 'animate-slide-up'\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex items-start gap-3 p-4 rounded-lg border shadow-lg max-w-sm',\n\t\t\t\t\t'backdrop-blur-sm bg-white/95',\n\t\t\t\t\tvariantClasses[type]\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className={cn('flex-shrink-0 mt-0.5', iconColors[type])}>\n\t\t\t\t\t{icons[type]}\n\t\t\t\t</div>\n\t\t\t\t<div className='flex-1 min-w-0'>\n\t\t\t\t\t<h4 className='font-semibold text-sm mb-1'>{title}</h4>\n\t\t\t\t\t{description && <p className='text-sm opacity-90'>{description}</p>}\n\t\t\t\t\t{action && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={handleAction}\n\t\t\t\t\t\t\tclassName='mt-2 text-sm font-medium underline underline-offset-2 hover:no-underline'\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\tonClick={handleClose}\n\t\t\t\t\tclassName='flex-shrink-0 p-1 rounded-full hover:bg-black/5 transition-colors'\n\t\t\t\t>\n\t\t\t\t\t<X className='w-4 h-4' />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { Toast, type ToastProps } from './Toast.tsx'\n\nexport function ToastContainer({\n\ttoasts,\n\tonRemove,\n\tposition = 'top-right',\n}: {\n\ttoasts: ToastProps[]\n\tonRemove: (id: string) => void\n\tposition?: ToastProps['position']\n}) {\n\treturn (\n\t\t<>\n\t\t\t{toasts.map(t => (\n\t\t\t\t<Toast key={t.id} {...t} onClose={onRemove} position={position} />\n\t\t\t))}\n\t\t</>\n\t)\n}\n","import React from 'react'\nimport { cn } from '../../lib/utils.ts'\n\ntype TooltipProps = {\n\tcontent: React.ReactNode\n\tchildren: React.ReactNode\n\tposition?: 'top' | 'bottom' | 'left' | 'right'\n\tdelay?: number\n\tclassName?: string\n}\n\nexport default function Tooltip({\n\tcontent,\n\tchildren,\n\tposition = 'top',\n\tdelay = 200,\n\tclassName,\n}: TooltipProps) {\n\tconst positionClasses = {\n\t\ttop: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n\t\tbottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n\t\tleft: 'right-full top-1/2 -translate-y-1/2 mr-2',\n\t\tright: 'left-full top-1/2 -translate-y-1/2 ml-2',\n\t}\n\n\tconst arrowClasses = {\n\t\ttop: 'left-1/2 -translate-x-1/2 top-full',\n\t\tbottom: 'left-1/2 -translate-x-1/2 bottom-full',\n\t\tleft: 'top-1/2 -translate-y-1/2 left-full',\n\t\tright: 'top-1/2 -translate-y-1/2 right-full',\n\t}\n\n\treturn (\n\t\t<div className='relative inline-block group'>\n\t\t\t{children}\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute z-50 whitespace-nowrap rounded-md bg-gray-800 text-white text-xs px-2 py-1 shadow-md dark:bg-gray-900',\n\t\t\t\t\t'transition-all opacity-0 scale-95 group-hover:opacity-100 group-hover:scale-100',\n\t\t\t\t\t'group-hover:delay-200 duration-200 ease-out',\n\t\t\t\t\tpositionClasses[position],\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tstyle={{ transitionDelay: `${delay}ms` }}\n\t\t\t>\n\t\t\t\t{content}\n\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'absolute w-2 h-2 bg-gray-800 dark:bg-gray-900 rotate-45',\n\t\t\t\t\t\tarrowClasses[position]\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"mappings":"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","names":["index_exports","__export","Breadcrumb","Button","Collapse","InputMain","MciTable","Modal","Pagination","Skeleton","TabPanel","Tabs","Tag","Textarea","ToastContainer","Tooltip","__toCommonJS","import_lucide_react","import_clsx","import_tailwind_merge","cn","inputs","useEscapeKey","callback","e","useClickOutside","ref","import_jsx_runtime","Breadcrumb","items","className","separatorIcon","cn","item","index","isLast","import_lucide_react","import_jsx_runtime","Button","text","icon","iconPosition","size","variant","loading","disabled","onClick","className","sizes","cn","import_lucide_react","import_react","import_jsx_runtime","Collapse","title","children","defaultOpen","icon","variant","className","titleClassName","contentClassName","isOpen","setIsOpen","contentHeight","setContentHeight","contentRef","variantConfig","cn","import_lucide_react","import_react","import_jsx_runtime","InputMain","label","placeholder","type","icon","iconPosition","size","error","success","disabled","required","value","onChange","onFocus","onBlur","className","isFocused","setIsFocused","internalValue","setInternalValue","showPassword","setShowPassword","autoFilled","setAutoFilled","currentValue","hasValue","isPassword","handleFocus","handleBlur","handleChange","e","togglePassword","p","sizes","stateStyles","handleAutoFill","cn","import_lucide_react","import_react","import_jsx_runtime","Skeleton","className","variant","width","height","cn","import_jsx_runtime","MciTable","columns","data","loading","variant","skeletonRows","actions","noDataText","sortConfig","setSortConfig","sortedData","a","b","aVal","bVal","handleSort","col","prev","getSortIcon","variantStyle","cn","headerCell","idx","_","i","Skeleton","row","import_lucide_react","import_react","import_jsx_runtime","Modal","show","setShow","title","Header","Body","footer","modalRef","handleEscape","useEscapeKey","handleClick","useClickOutside","cn","import_lucide_react","import_jsx_runtime","Pagination","totalItems","currentPage","perPage","onPageChange","onPerPageChange","siblingCount","perPageOptions","showPerPage","totalPages","pages","totalPageNumbers","_","i","leftSiblingIndex","rightSiblingIndex","showLeftDots","showRightDots","range","handlePrev","handleNext","e","option","page","idx","import_react","import_jsx_runtime","Tabs","tabs","defaultTab","position","variant","className","onChange","_a","_b","activeTab","setActiveTab","indicatorStyle","setIndicatorStyle","tabsRef","activeIndex","tab","activeTabElement","offsetLeft","offsetTop","offsetWidth","offsetHeight","containerClasses","tabsContainerClasses","contentClasses","variantClasses","isVertical","cn","index","isActive","variantConfig","el","TabPanel","children","import_lucide_react","import_jsx_runtime","sizes","iconSizes","variants","Tag","children","variant","size","icon","iconPosition","closable","onClose","className","cn","import_react","import_jsx_runtime","Textarea","label","placeholder","value","onChange","required","disabled","error","className","rows","focused","setFocused","isFloating","cn","e","import_lucide_react","import_react","import_jsx_runtime","Toast","id","title","description","type","duration","position","onClose","action","isVisible","setIsVisible","isLeaving","setIsLeaving","showTimer","closeTimer","handleClose","handleAction","icons","variantClasses","iconColors","positionClasses","cn","import_jsx_runtime","ToastContainer","toasts","onRemove","position","t","Toast","import_jsx_runtime","Tooltip","content","children","position","delay","className","positionClasses","arrowClasses","cn"]}