@episensor/app-framework
Version:
Opinionated TypeScript framework for structured vibecoding - building internal web and desktop apps with batteries included
6 lines • 157 kB
JavaScript
'use strict';var nt=require('react'),classVarianceAuthority=require('class-variance-authority'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),reactSlot=require('@radix-ui/react-slot'),At=require('@radix-ui/react-checkbox'),lucideReact=require('lucide-react'),ue=require('@radix-ui/react-dialog'),B=require('@radix-ui/react-dropdown-menu'),Tr=require('@radix-ui/react-label'),it=require('@radix-ui/react-popover'),Bt=require('@radix-ui/react-progress'),je=require('@radix-ui/react-scroll-area'),z=require('@radix-ui/react-select'),Dr=require('@radix-ui/react-separator'),lt=require('@radix-ui/react-slider'),zt=require('@radix-ui/react-switch'),Ze=require('@radix-ui/react-tabs'),mt=require('@radix-ui/react-tooltip'),reactRouterDom=require('react-router-dom'),dateFns=require('date-fns'),socket_ioClient=require('socket.io-client'),sonner=require('sonner'),gi=require('react-markdown'),vi=require('remark-gfm'),reactSyntaxHighlighter=require('react-syntax-highlighter'),prism=require('react-syntax-highlighter/dist/esm/styles/prism');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var nt__namespace=/*#__PURE__*/_interopNamespace(nt);var At__namespace=/*#__PURE__*/_interopNamespace(At);var ue__namespace=/*#__PURE__*/_interopNamespace(ue);var B__namespace=/*#__PURE__*/_interopNamespace(B);var Tr__namespace=/*#__PURE__*/_interopNamespace(Tr);var it__namespace=/*#__PURE__*/_interopNamespace(it);var Bt__namespace=/*#__PURE__*/_interopNamespace(Bt);var je__namespace=/*#__PURE__*/_interopNamespace(je);var z__namespace=/*#__PURE__*/_interopNamespace(z);var Dr__namespace=/*#__PURE__*/_interopNamespace(Dr);var lt__namespace=/*#__PURE__*/_interopNamespace(lt);var zt__namespace=/*#__PURE__*/_interopNamespace(zt);var Ze__namespace=/*#__PURE__*/_interopNamespace(Ze);var mt__namespace=/*#__PURE__*/_interopNamespace(mt);var gi__default=/*#__PURE__*/_interopDefault(gi);var vi__default=/*#__PURE__*/_interopDefault(vi);function l(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var Wo=classVarianceAuthority.cva("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),Se=nt__namespace.forwardRef(({className:e,variant:t,...r},a)=>jsxRuntime.jsx("div",{ref:a,role:"alert",className:l(Wo({variant:t}),e),...r}));Se.displayName="Alert";var jo=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("h5",{ref:r,className:l("mb-1 font-medium leading-none tracking-tight",e),...t}));jo.displayName="AlertTitle";var ke=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("div",{ref:r,className:l("text-sm [&_p]:leading-relaxed",e),...t}));ke.displayName="AlertDescription";var _o=classVarianceAuthority.cva("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground hover:bg-accent hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function ce({className:e,variant:t,...r}){return jsxRuntime.jsx("div",{className:l(_o({variant:t}),e),...r})}var Xo=classVarianceAuthority.cva("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),N=nt__namespace.forwardRef(({className:e,variant:t,size:r,asChild:a=false,...o},n)=>jsxRuntime.jsx(a?reactSlot.Slot:"button",{className:l(Xo({variant:t,size:r,className:e})),ref:n,...o}));N.displayName="Button";function J({children:e,className:t,...r}){return jsxRuntime.jsx("div",{className:l("bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",t),...r,children:e})}function oc({children:e,className:t,...r}){return jsxRuntime.jsx("div",{className:l("px-6 py-4 border-b border-gray-200 dark:border-gray-700",t),...r,children:e})}function sc({children:e,className:t,...r}){return jsxRuntime.jsx("div",{className:l("px-6 py-4",t),...r,children:e})}function nc({children:e,className:t,...r}){return jsxRuntime.jsx("h3",{className:l("text-lg font-semibold",t),...r,children:e})}var Yo=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(At__namespace.Root,{ref:r,className:l("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",e),...t,children:jsxRuntime.jsx(At__namespace.Indicator,{className:l("flex items-center justify-center text-current"),children:jsxRuntime.jsx(lucideReact.Check,{className:"h-4 w-4"})})}));Yo.displayName=At__namespace.Root.displayName;var da=ue__namespace.Root,gc=ue__namespace.Trigger,ts=ue__namespace.Portal,vc=ue__namespace.Close,ma=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(ue__namespace.Overlay,{ref:r,className:l("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));ma.displayName=ue__namespace.Overlay.displayName;var wr=nt__namespace.forwardRef(({className:e,children:t,...r},a)=>jsxRuntime.jsxs(ts,{children:[jsxRuntime.jsx(ma,{}),jsxRuntime.jsxs(ue__namespace.Content,{ref:a,className:l("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...r,children:[t,jsxRuntime.jsxs(ue__namespace.Close,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[jsxRuntime.jsx(lucideReact.X,{className:"h-4 w-4"}),jsxRuntime.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));wr.displayName=ue__namespace.Content.displayName;var Nr=({className:e,...t})=>jsxRuntime.jsx("div",{className:l("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});Nr.displayName="DialogHeader";var Sr=({className:e,...t})=>jsxRuntime.jsx("div",{className:l("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});Sr.displayName="DialogFooter";var kr=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(ue__namespace.Title,{ref:r,className:l("text-lg font-semibold leading-none tracking-tight",e),...t}));kr.displayName=ue__namespace.Title.displayName;var Rr=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(ue__namespace.Description,{ref:r,className:l("text-sm text-muted-foreground",e),...t}));Rr.displayName=ue__namespace.Description.displayName;var wc=B__namespace.Root,Nc=B__namespace.Trigger,Sc=B__namespace.Group,kc=B__namespace.Portal,Rc=B__namespace.Sub,Cc=B__namespace.RadioGroup,ss=nt__namespace.forwardRef(({className:e,inset:t,children:r,...a},o)=>jsxRuntime.jsxs(B__namespace.SubTrigger,{ref:o,className:l("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",t&&"pl-8",e),...a,children:[r,jsxRuntime.jsx(lucideReact.ChevronRight,{className:"ml-auto h-4 w-4"})]}));ss.displayName=B__namespace.SubTrigger.displayName;var ns=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(B__namespace.SubContent,{ref:r,className:l("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...t}));ns.displayName=B__namespace.SubContent.displayName;var is=nt__namespace.forwardRef(({className:e,sideOffset:t=4,...r},a)=>jsxRuntime.jsx(B__namespace.Portal,{children:jsxRuntime.jsx(B__namespace.Content,{ref:a,sideOffset:t,className:l("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...r})}));is.displayName=B__namespace.Content.displayName;var ls=nt__namespace.forwardRef(({className:e,inset:t,...r},a)=>jsxRuntime.jsx(B__namespace.Item,{ref:a,className:l("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t&&"pl-8",e),...r}));ls.displayName=B__namespace.Item.displayName;var cs=nt__namespace.forwardRef(({className:e,children:t,checked:r,...a},o)=>jsxRuntime.jsxs(B__namespace.CheckboxItem,{ref:o,className:l("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),checked:r,...a,children:[jsxRuntime.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:jsxRuntime.jsx(B__namespace.ItemIndicator,{children:jsxRuntime.jsx(lucideReact.Check,{className:"h-4 w-4"})})}),t]}));cs.displayName=B__namespace.CheckboxItem.displayName;var ds=nt__namespace.forwardRef(({className:e,children:t,...r},a)=>jsxRuntime.jsxs(B__namespace.RadioItem,{ref:a,className:l("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...r,children:[jsxRuntime.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:jsxRuntime.jsx(B__namespace.ItemIndicator,{children:jsxRuntime.jsx(lucideReact.Circle,{className:"h-2 w-2 fill-current"})})}),t]}));ds.displayName=B__namespace.RadioItem.displayName;var ms=nt__namespace.forwardRef(({className:e,inset:t,...r},a)=>jsxRuntime.jsx(B__namespace.Label,{ref:a,className:l("px-2 py-1.5 text-sm font-semibold",t&&"pl-8",e),...r}));ms.displayName=B__namespace.Label.displayName;var ps=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(B__namespace.Separator,{ref:r,className:l("-mx-1 my-1 h-px bg-muted",e),...t}));ps.displayName=B__namespace.Separator.displayName;var us=({className:e,...t})=>jsxRuntime.jsx("span",{className:l("ml-auto text-xs tracking-widest opacity-60",e),...t});us.displayName="DropdownMenuShortcut";var Fe=nt__namespace.forwardRef(({className:e,type:t,...r},a)=>jsxRuntime.jsx("input",{type:t,className:l("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:a,...r}));Fe.displayName="Input";var vs=classVarianceAuthority.cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Xe=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(Tr__namespace.Root,{ref:r,className:l(vs(),e),...t}));Xe.displayName=Tr__namespace.Root.displayName;var Xt=it__namespace.Root,Zt=it__namespace.Trigger,Mt=nt__namespace.forwardRef(({className:e,align:t="center",sideOffset:r=4,...a},o)=>jsxRuntime.jsx(it__namespace.Portal,{children:jsxRuntime.jsx(it__namespace.Content,{ref:o,align:t,sideOffset:r,className:l("z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...a})}));Mt.displayName=it__namespace.Content.displayName;var bs=nt__namespace.forwardRef(({className:e,value:t,...r},a)=>jsxRuntime.jsx(Bt__namespace.Root,{ref:a,className:l("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...r,children:jsxRuntime.jsx(Bt__namespace.Indicator,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})}));bs.displayName=Bt__namespace.Root.displayName;var $t=nt__namespace.forwardRef(({className:e,children:t,...r},a)=>jsxRuntime.jsxs(je__namespace.Root,{ref:a,className:l("relative overflow-hidden",e),...r,children:[jsxRuntime.jsx(je__namespace.Viewport,{className:"h-full w-full rounded-[inherit]",children:t}),jsxRuntime.jsx(ba,{}),jsxRuntime.jsx(je__namespace.Corner,{})]}));$t.displayName=je__namespace.Root.displayName;var ba=nt__namespace.forwardRef(({className:e,orientation:t="vertical",...r},a)=>jsxRuntime.jsx(je__namespace.ScrollAreaScrollbar,{ref:a,orientation:t,className:l("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...r,children:jsxRuntime.jsx(je__namespace.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})}));ba.displayName=je__namespace.ScrollAreaScrollbar.displayName;var Ee=z__namespace.Root,Gc=z__namespace.Group,Ae=z__namespace.Value,Re=nt__namespace.forwardRef(({className:e,children:t,...r},a)=>jsxRuntime.jsxs(z__namespace.Trigger,{ref:a,className:l("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...r,children:[t,jsxRuntime.jsx(z__namespace.Icon,{asChild:true,children:jsxRuntime.jsx(lucideReact.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));Re.displayName=z__namespace.Trigger.displayName;var xa=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(z__namespace.ScrollUpButton,{ref:r,className:l("flex cursor-default items-center justify-center py-1",e),...t,children:jsxRuntime.jsx(lucideReact.ChevronUp,{className:"h-4 w-4"})}));xa.displayName=z__namespace.ScrollUpButton.displayName;var wa=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(z__namespace.ScrollDownButton,{ref:r,className:l("flex cursor-default items-center justify-center py-1",e),...t,children:jsxRuntime.jsx(lucideReact.ChevronDown,{className:"h-4 w-4"})}));wa.displayName=z__namespace.ScrollDownButton.displayName;var Ce=nt__namespace.forwardRef(({className:e,children:t,position:r="popper",...a},o)=>jsxRuntime.jsx(z__namespace.Portal,{children:jsxRuntime.jsxs(z__namespace.Content,{ref:o,className:l("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,...a,children:[jsxRuntime.jsx(xa,{}),jsxRuntime.jsx(z__namespace.Viewport,{className:l("p-1",r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),jsxRuntime.jsx(wa,{})]})}));Ce.displayName=z__namespace.Content.displayName;var Ns=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(z__namespace.Label,{ref:r,className:l("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));Ns.displayName=z__namespace.Label.displayName;var Q=nt__namespace.forwardRef(({className:e,children:t,...r},a)=>jsxRuntime.jsxs(z__namespace.Item,{ref:a,className:l("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...r,children:[jsxRuntime.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:jsxRuntime.jsx(z__namespace.ItemIndicator,{children:jsxRuntime.jsx(lucideReact.Check,{className:"h-4 w-4"})})}),jsxRuntime.jsx(z__namespace.ItemText,{children:t})]}));Q.displayName=z__namespace.Item.displayName;var Ss=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(z__namespace.Separator,{ref:r,className:l("-mx-1 my-1 h-px bg-muted",e),...t}));Ss.displayName=z__namespace.Separator.displayName;var Ot=nt__namespace.forwardRef(({className:e,orientation:t="horizontal",decorative:r=true,...a},o)=>jsxRuntime.jsx(Dr__namespace.Root,{ref:o,decorative:r,orientation:t,className:l("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",e),...a}));Ot.displayName=Dr__namespace.Root.displayName;var Rs=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsxs(lt__namespace.Root,{ref:r,className:l("relative flex w-full touch-none select-none items-center",e),...t,children:[jsxRuntime.jsx(lt__namespace.Track,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary",children:jsxRuntime.jsx(lt__namespace.Range,{className:"absolute h-full bg-primary"})}),jsxRuntime.jsx(lt__namespace.Thumb,{className:"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"})]}));Rs.displayName=lt__namespace.Root.displayName;var ht=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(zt__namespace.Root,{className:l("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:r,children:jsxRuntime.jsx(zt__namespace.Thumb,{className:l("pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));ht.displayName=zt__namespace.Root.displayName;var Ar=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("div",{className:"relative w-full overflow-auto",children:jsxRuntime.jsx("table",{ref:r,className:l("w-full caption-bottom text-sm",e),...t})}));Ar.displayName="Table";var Ir=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("thead",{ref:r,className:l("[&_tr]:border-b",e),...t}));Ir.displayName="TableHeader";var Mr=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("tbody",{ref:r,className:l("[&_tr:last-child]:border-0",e),...t}));Mr.displayName="TableBody";var Ts=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("tfoot",{ref:r,className:l("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));Ts.displayName="TableFooter";var Ht=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("tr",{ref:r,className:l("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));Ht.displayName="TableRow";var Br=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("th",{ref:r,className:l("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",e),...t}));Br.displayName="TableHead";var Qt=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("td",{ref:r,className:l("p-4 align-middle [&:has([role=checkbox])]:pr-0",e),...t}));Qt.displayName="TableCell";var Ps=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("caption",{ref:r,className:l("mt-4 text-sm text-muted-foreground",e),...t}));Ps.displayName="TableCaption";var cd=Ze__namespace.Root,Ls=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(Ze__namespace.List,{ref:r,className:l("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));Ls.displayName=Ze__namespace.List.displayName;var Ds=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(Ze__namespace.Trigger,{ref:r,className:l("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));Ds.displayName=Ze__namespace.Trigger.displayName;var Es=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx(Ze__namespace.Content,{ref:r,className:l("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Es.displayName=Ze__namespace.Content.displayName;var As=nt__namespace.forwardRef(({className:e,...t},r)=>jsxRuntime.jsx("textarea",{className:l("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...t}));As.displayName="Textarea";var Pa=mt__namespace.Provider,La=mt__namespace.Root,Da=mt__namespace.Trigger,$r=nt__namespace.forwardRef(({className:e,sideOffset:t=4,...r},a)=>jsxRuntime.jsx(mt__namespace.Content,{ref:a,sideOffset:t,className:l("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...r}));$r.displayName=mt__namespace.Content.displayName;function Or({src:e,fallbackSrc:t,hideOnError:r=false,onError:a,...o}){return jsxRuntime.jsx("img",{src:e,onError:i=>{let s=i.target;r?s.style.display="none":t&&s.src!==t&&(s.src=t),a&&a(i);},...o})}function Os({apiEndpoint:e="/api/login",logoSrc:t="/assets/logo.png",fallbackLogoSrc:r="/assets/logo-fallback.svg",appTitle:a="Application",subtitle:o="Sign in to continue",showLanguageSelector:n=false,showPoweredBy:i=false,poweredByLogo:s="/assets/powered-by-logo.svg",poweredByText:y="Powered by",onLoginSuccess:v,onLoginError:w,customStyles:f={},navigate:p}){let[d,x]=nt.useState(""),[b,C]=nt.useState(""),[V,K]=nt.useState(false),[A,D]=nt.useState(""),W=async ie=>{if(ie.preventDefault(),D(""),!d||!b){D("Please enter both username and password");return}K(true);try{let xe=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({username:d,password:b})}),ae=await xe.json();if(xe.ok&&ae.success)localStorage.setItem("authenticated","true"),v&&v(),p("/");else {let g=ae.error||"Invalid credentials";D(g),w&&w(g);}}catch{let ae="Login failed. Please try again.";D(ae),w&&w(ae);}finally{K(false);}};return jsxRuntime.jsx("div",{className:f.container||"min-h-screen flex items-center justify-center bg-gray-50",children:jsxRuntime.jsxs("div",{className:f.card||"max-w-md w-full space-y-8 p-8 bg-white rounded-xl shadow-sm border border-gray-200",children:[jsxRuntime.jsxs("div",{className:"flex flex-col items-center",children:[jsxRuntime.jsx(Or,{src:t,fallbackSrc:r,alt:"Logo",className:f.logo||"h-12 mb-6"}),jsxRuntime.jsx("h1",{className:f.title||"text-2xl font-semibold text-gray-900",children:a}),jsxRuntime.jsx("p",{className:f.subtitle||"text-sm text-gray-500 mt-2",children:o})]}),jsxRuntime.jsxs("form",{className:"space-y-6",onSubmit:W,children:[A&&jsxRuntime.jsxs("div",{className:f.errorMessage||"flex items-center gap-2 p-3 bg-red-50 border border-red-200 rounded-lg text-red-700 text-sm",children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"h-4 w-4 flex-shrink-0"}),jsxRuntime.jsx("span",{children:A})]}),jsxRuntime.jsxs("div",{className:"space-y-4",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"username",className:"block text-sm font-medium text-gray-700 mb-1",children:"Username"}),jsxRuntime.jsx(Fe,{id:"username",name:"username",type:"text",value:d,onChange:ie=>x(ie.target.value),placeholder:"Enter username",className:f.input||"w-full",disabled:V,autoFocus:true})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"password",className:"block text-sm font-medium text-gray-700 mb-1",children:"Password"}),jsxRuntime.jsx(Fe,{id:"password",name:"password",type:"password",value:b,onChange:ie=>C(ie.target.value),placeholder:"Enter password",className:f.input||"w-full",disabled:V})]}),n&&jsxRuntime.jsx("div",{className:"flex items-center justify-end",children:jsxRuntime.jsxs("button",{type:"button",className:"flex items-center gap-2 text-sm text-gray-600 hover:text-gray-900",onClick:()=>{},children:[jsxRuntime.jsx(lucideReact.Globe,{className:"h-4 w-4"}),jsxRuntime.jsx("span",{children:"English"})]})})]}),jsxRuntime.jsx(N,{type:"submit",className:f.button||"w-full",disabled:V,children:V?"Signing in...":"Sign In"})]}),i&&jsxRuntime.jsx("div",{className:"flex items-center justify-center pt-6 border-t border-gray-200",children:jsxRuntime.jsxs("div",{className:"flex items-center gap-2 text-sm text-gray-500",children:[jsxRuntime.jsx("span",{children:y}),jsxRuntime.jsx(Or,{src:s,alt:"Powered by",className:"h-5",hideOnError:true})]})})]})})}async function Ea(e="/api/auth/check"){try{let t=await fetch(e,{credentials:"include",headers:{Accept:"application/json"}});if(t.ok){let r=await t.json();return {authenticated:r.authenticated,username:r.username}}else return t.status===401?{authenticated:!1}:{authenticated:!1,error:`Server returned ${t.status}`}}catch(t){return {authenticated:false,error:t.message||"Failed to check authentication"}}}function zr(e,t){e?(localStorage.setItem("authenticated","true"),t&&localStorage.setItem("username",t)):(localStorage.removeItem("authenticated"),localStorage.removeItem("username"));}function Vs({children:e,loginPath:t="/login",authEndpoint:r="/api/auth/check",loadingComponent:a}){let[o,n]=nt.useState(null),[i,s]=nt.useState(false);return nt.useEffect(()=>{(async()=>{try{let v=await Ea(r);n(v.authenticated),zr(v.authenticated,v.username);}catch(v){console.error("Auth check failed:",v),n(false),zr(false);}finally{s(true);}})();},[r]),i?o?jsxRuntime.jsx(jsxRuntime.Fragment,{children:e}):jsxRuntime.jsx(reactRouterDom.Navigate,{to:t,replace:true}):a||jsxRuntime.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50",children:jsxRuntime.jsxs("div",{className:"text-center",children:[jsxRuntime.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto"}),jsxRuntime.jsx("p",{className:"mt-4 text-sm text-gray-600",children:"Checking authentication..."})]})})}var Vr=class{constructor(){this.sockets=new Map;}getSocket(t,r={}){let a=t||"/";if(!this.sockets.has(a)){let o=socket_ioClient.io(t,{autoConnect:false,...r});this.sockets.set(a,o);}return this.sockets.get(a)}removeSocket(t){let r=t||"/",a=this.sockets.get(r);a&&(a.disconnect(),this.sockets.delete(r));}},tr=new Vr;function wt(e={}){let{url:t=typeof window<"u"?window.location.origin:"http://localhost:3001",autoConnect:r=true,reconnection:a=true,reconnectionAttempts:o=1/0,reconnectionDelay:n=1e3,reconnectionDelayMax:i=5e3,timeout:s=2e4,transports:y=["websocket","polling"],auth:v,query:w,...f}=e,p=nt.useRef(null),d=nt.useRef(new Map),x=nt.useRef(0),[b,C]=nt.useState({connected:false,connecting:false,error:null,retryCount:0,transport:null});nt.useEffect(()=>{let g=tr.getSocket(t,{reconnection:a,reconnectionAttempts:o,reconnectionDelay:n,reconnectionDelayMax:i,timeout:s,transports:y,auth:v,query:w,...f});return p.current=g,g.on("connect",()=>{let P=g.io?.engine?.transport?.name||null,O=P==="websocket"||P==="polling"?P:null;C({connected:true,connecting:false,error:null,retryCount:x.current,transport:O}),x.current=0;}),g.on("disconnect",P=>{C(O=>({...O,connected:false,connecting:false,transport:null}));}),g.on("connect_error",P=>{C(O=>({...O,error:P,connecting:false}));}),g.io.on("reconnect_attempt",P=>{x.current=P,C(O=>({...O,connecting:true,retryCount:P}));}),g.io.on("reconnect",P=>{let O=g.io?.engine?.transport?.name||null,m=O==="websocket"||O==="polling"?O:null;C(j=>({...j,connected:true,connecting:false,retryCount:0,transport:m}));}),g.io.on("reconnect_failed",()=>{C(P=>({...P,error:new Error("Reconnection failed"),connecting:false}));}),r&&!g.connected&&g.connect(),()=>{d.current.forEach((P,O)=>{P.forEach(m=>{g.off(O,m);});}),d.current.clear();}},[t]);let V=nt.useCallback((g,P)=>{p.current?p.current.emit(g,P):console.warn("Socket is not initialized");},[]),K=nt.useCallback((g,P)=>{p.current&&(p.current.on(g,P),d.current.has(g)||d.current.set(g,new Set),d.current.get(g).add(P));},[]),A=nt.useCallback((g,P)=>{p.current&&(p.current.off(g,P),d.current.get(g)?.delete(P));},[]),D=nt.useCallback((g,P)=>{p.current&&p.current.once(g,P);},[]),W=nt.useCallback(()=>{p.current&&!p.current.connected&&(C(g=>({...g,connecting:true})),p.current.connect());},[]),ie=nt.useCallback(()=>{p.current&&p.current.connected&&p.current.disconnect();},[]),xe=nt.useCallback(()=>{p.current&&(x.current=0,p.current.disconnect(),p.current.connect());},[]),ae={socket:p.current,emit:V,on:K,off:A,once:D,connect:W,disconnect:ie,reconnect:xe};return [b,ae]}var Nt=class extends Error{constructor(t,r,a){super(t),this.name="ApiError",this.status=r,this.details=a;}};function Gs(){return window.__TAURI__?"http://localhost:3000":undefined?.VITE_API_URL?undefined.VITE_API_URL:""}async function ut(e,t={}){let{timeout:r=3e4,retries:a=0,retryDelay:o=1e3,...n}=t,s=`${Gs()}${e}`,y=new Headers(n.headers);!y.has("Content-Type")&&n.body&&typeof n.body=="string"&&y.set("Content-Type","application/json");let v=new AbortController,w=setTimeout(()=>v.abort(),r),f=null;for(let p=0;p<=a;p++)try{let d=await fetch(s,{...n,headers:y,signal:v.signal});clearTimeout(w);let x=d.headers.get("content-type"),b;if(x?.includes("application/json")?b=await d.json():b=await d.text(),typeof b=="object"&&"success"in b){let C=b;if(!C.success)throw new Nt(C.error||C.message||"Request failed",d.status,C.details);return C.data}if(!d.ok)throw new Nt(b.message||b.error||`HTTP ${d.status}`,d.status);return b}catch(d){if(f=d,d instanceof Nt&&d.status<500)throw d;if(d instanceof Error&&d.name==="AbortError")throw new Nt("Request timeout",408);p<a&&await new Promise(x=>setTimeout(x,o*(p+1)));}throw clearTimeout(w),f||new Nt("Request failed",500)}var Ys=[{id:"current",label:"Current Log",icon:lucideReact.Terminal,description:"View live system logs"},{id:"archives",label:"Archives",icon:lucideReact.Archive,description:"Download archived log files"}],Oa={error:"bg-red-500 text-white",warn:"bg-amber-500 text-white",info:"bg-blue-500 text-white",debug:"bg-gray-500 text-white",verbose:"bg-gray-400 text-white"};function en({apiUrl:e="/api/logs",title:t="Logs",description:r="View system logs and diagnostic information"}){let[a,o]=nt.useState([]),[n,i]=nt.useState([]),[s,y]=nt.useState([]),[v,w]=nt.useState(true),[f,p]=nt.useState("current"),[d,x]=nt.useState(""),[b,C]=nt.useState("all"),[V,K]=nt.useState("all"),[A,D]=nt.useState([]),[W,ie]=nt.useState(true),[xe,ae]=nt.useState("info"),g=nt.useRef(null),[{connected:P},{on:O,off:m}]=wt(),j=({level:u})=>{let I={error:"bg-red-600 text-white",warn:"bg-amber-500 text-white",info:"bg-blue-600 text-white",debug:"bg-gray-600 text-white",verbose:"bg-gray-500 text-white"};return jsxRuntime.jsx("span",{className:`inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-semibold ${I[u]||I.info}`,children:u.toUpperCase()})};nt.useEffect(()=>{f==="current"?me():f==="archives"&&oe();},[f]),nt.useEffect(()=>{let u=[...a];b!=="all"&&(u=u.filter(M=>M.level===b)),V!=="all"&&(u=u.filter(M=>(M.category||M.source||"").toLowerCase().includes(V.toLowerCase()))),d&&(u=u.filter(M=>M.message?.toLowerCase().includes(d.toLowerCase())||M.category?.toLowerCase().includes(d.toLowerCase())||JSON.stringify(M.metadata)?.toLowerCase().includes(d.toLowerCase())));let I=[];for(let M of u)/^\s*at\s/.test(M.message)||I.push(M);let U=I.map((M,he)=>({...M,id:M.id||`${M.timestamp}-${he}-${Math.random().toString(36).slice(2)}`}));i(U);},[a,b,V,d]),nt.useEffect(()=>{if(!P||!W)return;let u=U=>{let{timestamp:M,level:he,message:pe,category:Ue,source:te,metadata:c}=U,k=pe.match(/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\s+(\w+)\s+\[([^\]]+)\]\s+(.*)$/);return k&&(M=k[1]||M,he=(k[2]||"info").toLowerCase(),te=k[3]||te,Ue=te,pe=k[4]||pe),(/^\s*Error[:\s]/i.test(pe)||/uncaught exception/i.test(pe))&&(he="error"),{...U,timestamp:M,level:he,message:pe,category:Ue||te,source:te,metadata:c}},I=U=>{let M=u(U);o(he=>{if(/^\s*at\s/.test(M.message)&&he.length>0){let c=[...he],k={...c[0]},T=k.metadata?.stack?`${k.metadata.stack}
${M.message}`:M.message;return k.metadata={...k.metadata||{},stack:T},c[0]=k,c}let Ue=[{...M,id:`${Date.now()}-${Math.random()}`},...he],te=Array.from(new Set(Ue.map(c=>c.category||c.source||"").filter(Boolean))).sort();return D(te),Ue});};return O("log",I),()=>{m("log",I);}},[P,W,O,m]),nt.useEffect(()=>{E();},[]);let E=async()=>{try{let u=await ut("/api/settings");ae(u["logging.level"]||"info");}catch(u){console.error("Failed to fetch log level:",u);}},me=async()=>{w(true);try{let u=await ut(`${e}/entries`),I=te=>{let{timestamp:c,level:k,message:T,category:le,source:h,metadata:L}=te,_=T.match(/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\s+(\w+)\s+\[([^\]]+)\]\s+(.*)$/);return _&&(c=_[1]||c,k=(_[2]||"info").toLowerCase(),h=_[3]||h,le=h,T=_[4]||T),(/^\s*Error[:\s]/i.test(T)||/uncaught exception/i.test(T))&&(k="error"),{...te,timestamp:c,level:k,message:T,category:le||h,source:h,metadata:L}},U=te=>{let c=[];for(let k of te)if(/^\s*at\s/.test(k.message)&&c.length>0){let T=c[c.length-1];if(T){let le=T.metadata?.stack?`${T.metadata.stack}
${k.message}`:k.message;T.metadata={...T.metadata||{},stack:le};}}else c.push(k);return c},M=(u.logs||[]).map(I),pe=U(M).sort((te,c)=>new Date(c.timestamp).getTime()-new Date(te.timestamp).getTime());o(pe);let Ue=Array.from(new Set(pe.map(te=>te.category||te.source||"").filter(Boolean))).sort();D(Ue);}catch(u){console.error("Failed to fetch logs:",u),u instanceof Error&&!u.message.includes("404")&&sonner.toast.error("Failed to load logs");}finally{w(false);}},oe=async()=>{try{let u=await ut(`${e}/archives`),I=(u.archives||[]).map(U=>({filename:U.filename||U.name,name:U.name,size:U.size,modified:U.modified}));I.length||(u=await ut(`${e}/all-files`),I=(u.archives||[]).map(U=>({filename:U.filename||U.name,name:U.name,size:U.size,modified:U.modified}))),y(I);}catch(u){console.error("Failed to fetch archives:",u);}},Ve=async()=>{if(confirm("Clear all logs? This action cannot be undone."))try{await ut(`${e}/clear`,{method:"POST"}),o([]),sonner.toast.success("Logs cleared");}catch{sonner.toast.error("Failed to clear logs");}},Oe=async()=>{try{let u=await ut(`${e}/export?level=all`),I=new Blob([u],{type:"text/plain"}),U=URL.createObjectURL(I),M=document.createElement("a");M.href=U,M.download=`logs-${new Date().toISOString()}.txt`,M.click(),URL.revokeObjectURL(U),sonner.toast.success("Logs exported");}catch{sonner.toast.error("Failed to export logs");}},rt=u=>{window.open(`${e}/download-any/${u}`,"_blank");},X=async u=>{if(confirm(`Delete archive ${u}?`))try{await ut(`${e}/archive/${u}`,{method:"DELETE"}),await oe(),sonner.toast.success("Archive deleted");}catch{sonner.toast.error("Failed to delete archive");}},Je=u=>{let I=new Date(u);return dateFns.format(I,"yyyy-MM-dd HH:mm:ss.SSS")},Ke=u=>u<1024?`${u} B`:u<1024*1024?`${(u/1024).toFixed(1)} KB`:`${(u/(1024*1024)).toFixed(1)} MB`,Ct=u=>jsxRuntime.jsxs("div",{className:"px-3 py-2 font-mono text-xs border-b border-gray-100 dark:border-gray-800 text-gray-800 dark:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-900 group",children:[jsxRuntime.jsxs("div",{className:"flex items-start gap-2",children:[jsxRuntime.jsx("span",{className:"text-gray-500 dark:text-gray-400 whitespace-nowrap",children:Je(u.timestamp)}),jsxRuntime.jsx("span",{className:"flex-shrink-0",children:jsxRuntime.jsx(j,{level:u.level})}),(u.category||u.source)&&jsxRuntime.jsxs("span",{className:"text-gray-600 dark:text-gray-400 whitespace-nowrap",children:["[",u.category||u.source,"]"]}),jsxRuntime.jsx("span",{className:"whitespace-pre-wrap break-all flex-1",children:u.message}),jsxRuntime.jsx("button",{onClick:()=>{let I=Je(u.timestamp),U=u.category||u.source?` [${u.category||u.source}]`:"",M=`${I} ${u.level.toUpperCase()}${U} ${u.message}`,he=u.metadata?.stack?`${M}
${u.metadata.stack}`:M;navigator.clipboard.writeText(he).then(()=>sonner.toast.success("Copied to clipboard")).catch(()=>sonner.toast.error("Copy failed"));},className:"opacity-0 group-hover:opacity-100 transition-opacity ml-2 p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded",title:"Copy log entry",children:jsxRuntime.jsx(lucideReact.Copy,{className:"h-3 w-3"})})]}),u.metadata?.stack&&jsxRuntime.jsx("pre",{className:"ml-[180px] whitespace-pre overflow-x-auto text-[10px] leading-snug mt-1 text-gray-500 dark:text-gray-400",children:u.metadata.stack}),u.metadata&&!u.metadata.stack&&Object.keys(u.metadata).length>0&&jsxRuntime.jsx("div",{className:"ml-[180px] mt-1 text-gray-500 dark:text-gray-400",children:Object.entries(u.metadata).map(([I,U])=>jsxRuntime.jsxs("span",{className:"mr-4",children:[jsxRuntime.jsxs("span",{className:"font-medium",children:[I,":"]})," ",typeof U=="object"?JSON.stringify(U):String(U)]},I))})]},u.id),st=u=>jsxRuntime.jsxs("div",{className:"flex items-center justify-between p-3 border rounded-lg hover:bg-gray-50 dark:hover:bg-gray-900",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-3",children:[jsxRuntime.jsx(lucideReact.Archive,{className:"h-4 w-4 text-gray-400"}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{className:"font-medium text-sm",children:u.filename}),jsxRuntime.jsxs("div",{className:"text-xs text-gray-500",children:[Ke(u.size)," \u2022 ",new Date(u.modified).toLocaleDateString()]})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(N,{size:"sm",variant:"ghost",onClick:()=>rt(u.filename),children:jsxRuntime.jsx(lucideReact.Download,{className:"h-4 w-4"})}),jsxRuntime.jsx(N,{size:"sm",variant:"ghost",onClick:()=>X(u.filename),children:jsxRuntime.jsx(lucideReact.Trash2,{className:"h-4 w-4"})})]})]},u.filename);return jsxRuntime.jsxs("div",{className:"space-y-6",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h1",{className:"text-3xl font-bold",children:t}),jsxRuntime.jsxs("div",{className:"text-muted-foreground flex items-center",children:[r," \u2022 Current level: ",jsxRuntime.jsx(ce,{className:l("ml-1 text-xs px-2 py-0",Oa[xe]||Oa.info),children:xe.toUpperCase()})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[f==="current"&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs(N,{variant:"outline",size:"sm",onClick:()=>{let u=n.map(I=>{let U=Je(I.timestamp),M=I.category||I.source?` [${I.category||I.source}]`:"",he=`${U} ${I.level.toUpperCase()}${M} ${I.message}`,pe=I.metadata?.stack?`
${I.metadata.stack}`:"";return he+pe}).join(`
`);navigator.clipboard.writeText(u).then(()=>sonner.toast.success("Copied logs to clipboard")).catch(()=>sonner.toast.error("Copy failed"));},children:[jsxRuntime.jsx(lucideReact.Copy,{className:"h-4 w-4 mr-2"}),"Copy"]}),jsxRuntime.jsxs(N,{variant:"outline",size:"sm",onClick:Oe,children:[jsxRuntime.jsx(lucideReact.Download,{className:"h-4 w-4 mr-2"}),"Export"]}),jsxRuntime.jsxs(N,{variant:"outline",size:"sm",onClick:Ve,children:[jsxRuntime.jsx(lucideReact.Trash2,{className:"h-4 w-4 mr-2"}),"Clear"]})]}),f==="archives"&&jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsxs(N,{variant:"outline",size:"sm",onClick:async()=>{confirm("Purge all archived logs? This action cannot be undone.")&&(await ut(`${e}/purge-all`,{method:"POST"}),sonner.toast.success("All logs purged"),await oe());},children:[jsxRuntime.jsx(lucideReact.Eraser,{className:"h-4 w-4 mr-2"}),"Purge All"]})})]})]}),jsxRuntime.jsxs("div",{className:"flex gap-6",children:[jsxRuntime.jsx(J,{className:"w-64 h-fit",children:jsxRuntime.jsxs("div",{className:"p-4",children:[jsxRuntime.jsx("h3",{className:"font-semibold mb-4",children:"Categories"}),jsxRuntime.jsx("div",{className:"space-y-1",children:Ys.map(u=>{let I=u.icon;return jsxRuntime.jsxs("button",{onClick:()=>p(u.id),className:l("w-full flex items-center gap-3 px-3 py-2 rounded-md text-sm transition-colors",f===u.id?"bg-primary text-primary-foreground":"hover:bg-muted"),children:[jsxRuntime.jsx(I,{className:"h-4 w-4"}),jsxRuntime.jsx("span",{className:"text-left",children:u.label})]},u.id)})})]})}),jsxRuntime.jsx("div",{className:"flex-1",children:f==="archives"?jsxRuntime.jsxs(J,{className:"p-6",children:[jsxRuntime.jsxs("div",{className:"mb-4",children:[jsxRuntime.jsx("h2",{className:"text-xl font-semibold",children:"Log Archives"}),jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Download or manage archived log files"})]}),jsxRuntime.jsx("div",{className:"space-y-2",children:s.length===0?jsxRuntime.jsxs(Se,{children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"h-4 w-4"}),jsxRuntime.jsx(ke,{children:"No archived log files available"})]}):s.map(st)})]}):jsxRuntime.jsxs(J,{className:"p-0 overflow-hidden",children:[jsxRuntime.jsxs("div",{className:"px-4 py-3 border-b bg-gray-50 dark:bg-gray-900 flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-3",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx("span",{className:"text-sm text-gray-600",children:"Filter:"}),jsxRuntime.jsxs(Ee,{value:b,onValueChange:C,children:[jsxRuntime.jsx(Re,{className:"w-32 h-8",children:jsxRuntime.jsx(Ae,{})}),jsxRuntime.jsxs(Ce,{children:[jsxRuntime.jsx(Q,{value:"all",children:"All Levels"}),jsxRuntime.jsx(Q,{value:"error",children:"Error"}),jsxRuntime.jsx(Q,{value:"warn",children:"Warning"}),jsxRuntime.jsx(Q,{value:"info",children:"Info"}),jsxRuntime.jsx(Q,{value:"debug",children:"Debug"}),jsxRuntime.jsx(Q,{value:"verbose",children:"Verbose"})]})]})]}),jsxRuntime.jsxs(Ee,{value:V,onValueChange:K,children:[jsxRuntime.jsx(Re,{className:"w-44 h-8",children:jsxRuntime.jsx(Ae,{})}),jsxRuntime.jsxs(Ce,{children:[jsxRuntime.jsx(Q,{value:"all",children:"All Categories"}),A.map(u=>jsxRuntime.jsx(Q,{value:u,children:u},u))]})]}),jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx(lucideReact.Search,{className:"absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400"}),jsxRuntime.jsx(Fe,{type:"text",placeholder:"Search logs...",value:d,onChange:u=>x(u.target.value),className:"pl-8 pr-3 h-8 text-sm w-64"})]})]}),jsxRuntime.jsxs(N,{size:"sm",variant:"ghost",onClick:()=>{ie(!W),W||me();},children:[W?jsxRuntime.jsx(lucideReact.RefreshCw,{className:"h-4 w-4 animate-spin"}):jsxRuntime.jsx(lucideReact.RefreshCw,{className:"h-4 w-4"}),W?"Streaming":"Paused"]})]}),jsxRuntime.jsx("div",{className:"h-[calc(100vh-320px)] overflow-y-auto overflow-x-auto bg-white dark:bg-gray-900",ref:g,children:v?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full",children:jsxRuntime.jsx("div",{className:"h-8 w-8 rounded-full border-2 border-gray-300 border-t-transparent animate-spin"})}):n.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-full text-gray-400",children:jsxRuntime.jsxs("div",{className:"text-center",children:[jsxRuntime.jsx(lucideReact.Terminal,{className:"h-12 w-12 mx-auto mb-2 opacity-50"}),jsxRuntime.jsx("p",{children:"No logs to display"}),jsxRuntime.jsx("p",{className:"text-xs mt-1",children:"Logs will appear here as they are generated"})]})}):jsxRuntime.jsx("div",{children:n.map(Ct)})}),jsxRuntime.jsxs("div",{className:"border-t bg-muted/50 px-4 py-2 flex justify-between items-center",children:[jsxRuntime.jsxs("div",{className:"text-sm text-muted-foreground",children:[n.length," ",n.length===1?"line":"lines"]}),P&&W&&jsxRuntime.jsxs("div",{className:"text-sm text-muted-foreground flex items-center gap-2",children:[jsxRuntime.jsx("div",{className:"h-2 w-2 bg-green-500 rounded-full animate-pulse"}),"Live streaming active"]})]})]})})]})]})}function H(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function Ur({show:e,onRestart:t,onDismiss:r,className:a}){let[o,n]=nt.useState(e),[i,s]=nt.useState(false);return nt.useEffect(()=>{e?(n(true),setTimeout(()=>s(true),10)):(s(false),setTimeout(()=>n(false),300));},[e]),o?jsxRuntime.jsx("div",{className:H("fixed top-0 left-0 right-0 z-50 transition-all duration-300 ease-in-out",i?"translate-y-0 opacity-100":"-translate-y-full opacity-0",a),children:jsxRuntime.jsxs(Se,{className:"rounded-none border-x-0 border-t-0 bg-amber-50 dark:bg-amber-950/50",children:[jsxRuntime.jsx(lucideReact.AlertCircle,{className:"h-4 w-4 text-amber-600 dark:text-amber-400"}),jsxRuntime.jsxs(ke,{className:"flex items-center justify-between",children:[jsxRuntime.jsx("span",{className:"text-amber-800 dark:text-amber-200",children:"Configuration changes require a restart to take effect"}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[t&&jsxRuntime.jsxs(N,{size:"sm",variant:"default",onClick:t,className:"bg-amber-600 hover:bg-amber-700 text-white",children:[jsxRuntime.jsx(lucideReact.RefreshCw,{className:"h-3 w-3 mr-1"}),"Restart Now"]}),r&&jsxRuntime.jsx(N,{size:"sm",variant:"ghost",onClick:r,className:"text-amber-700 hover:text-amber-800 dark:text-amber-300 dark:hover:text-amber-200",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3 w-3"})})]})]})]})}):null}function un({categories:e,values:t,loading:r=false,saving:a=false,onSave:o,onReset:n,onRestart:i,showRestartBanner:s=false,className:y,title:v="Settings"}){let[w,f]=nt.useState(t),[p,d]=nt.useState({}),[x,b]=nt.useState(e[0]?.id||""),[C,V]=nt.useState({}),[K,A]=nt.useState(false),D=(g,P)=>{f(m=>({...m,[g]:P})),A(true);let O=e.flatMap(m=>m.settings).find(m=>m.key===g);if(O?.validation){let m=O.validation(P);d(j=>({...j,[g]:m||""}));}},W=async()=>{let g={},P=false;if(e.forEach(O=>{O.settings.forEach(m=>{if(m.validation){let j=m.validation(w[m.key]);j&&(g[m.key]=j,P=true);}});}),P){d(g);return}await o(w),A(false);},ie=()=>{f(t),d({}),A(false),n&&n();},xe=e.find(g=>g.id===x)?.settings||[],ae=g=>{let P=w[g.key]??g.defaultValue,O=p[g.key];switch(g.type){case "text":return jsxRuntime.jsx(Fe,{value:P||"",onChange:m=>D(g.key,m.target.value),placeholder:g.placeholder,className:O?"border-red-500":""});case "password":return jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx(Fe,{type:C[g.key]?"text":"password",value:P||"",onChange:m=>D(g.key,m.target