@alquimia-ai/ui 1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/sdk-frontend/sdk-frontend/packages/ui/dist/index.mjs","../src/components/templates/messages-window.tsx","../src/components/templates/query-box.tsx","../src/components/templates/hero/index.tsx","../src/components/templates/cards/with-image-heading-description.tsx","../src/components/templates/cards/with-image-heading-description-avatar.tsx","../src/components/organisms/whisper.tsx","../src/components/organisms/speechToText.tsx","../src/components/organisms/assistant.tsx","../src/components/molecules/page-container.tsx","../src/components/molecules/carousel.tsx","../src/components/molecules/navigation-menu.tsx","../src/components/molecules/sidebar.tsx","../src/components/molecules/sonner.tsx","../src/components/molecules/rating-stars.tsx","../src/components/molecules/rating-thumbs.tsx","../src/components/molecules/rating-comment.tsx","../src/components/molecules/documents/document-selector.tsx","../src/components/molecules/documents/document-viewer.tsx","../src/components/hooks/use-document.tsx","../src/components/molecules/call-out.tsx","../src/components/organisms/rating-dialog.tsx","../src/types/type.ts"],"names":["Alert","AlertDescription","AlertDialog","AlertDialogAction","AlertDialogCancel","AlertDialogContent","AlertDialogDescription","AlertDialogFooter","AlertDialogHeader","AlertDialogOverlay","AlertDialogPortal","AlertDialogTitle","AlertDialogTrigger","AlertTitle","AspectRatio","Avatar","AvatarFallback","AvatarImage","Badge","Breadcrumb","BreadcrumbEllipsis","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Button","Card","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Checkbox","Command","CommandDialog","CommandEmpty","CommandGroup","CommandInput","CommandItem","CommandList","CommandSeparator","CommandShortcut","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogOverlay","DialogPortal","DialogTitle","DialogTrigger","Drawer","DrawerClose","DrawerContent","DrawerDescription","DrawerFooter","DrawerHeader","DrawerOverlay","DrawerPortal","DrawerTitle","DrawerTrigger","Input","Label","Loader","Popover","PopoverContent","PopoverTrigger","RichText","ScrollArea","ScrollBar","Select","SelectContent","SelectGroup","SelectItem","SelectLabel","SelectScrollDownButton","SelectScrollUpButton","SelectSeparator","SelectTrigger","SelectValue","Skeleton","Slider","Switch","Table","TableBody","TableCaption","TableCell","TableFooter","TableHead","TableHeader","TableRow","Tabs","TabsContent","TabsList","TabsTrigger","Textarea","Toast","ToastAction","ToastClose","ToastDescription","ToastProvider","ToastTitle","ToastViewport","Toaster","Toggle","Typography","badgeVariants","blobToBase64","buttonVariants","cn","getCookies","parseTextToSpeech","reducer","toast","toggleVariants","truncateString","useToast","forwardRef","MessagesWindow","ref","className","props","React","createElement","displayName","QueryBox","Hero","children","HeroContent","CardWithImageHeadingDescriptionVertical","showBorder","image","heading","description","typeStyle","CardImageWithHeadingAndDescriptionHorizontal","AvatarInfo","userName","email","avatarImage","src","CardWithImageHeadingDescriptionAvatarVertical","CardImageWithHeadingAndDescriptionAvatarHorizontal","useState","useEffect","AudioLinesIcon","PlayCircleIcon","LoaderPinwheelIcon","Whisper","message","isMessageStreaming","textToSpeech","audioUrl","setAudioUrl","isPlaying","setIsPlaying","isLoading","setIsLoading","content","handlePlaying","handlePause","handleEnded","addEventListener","removeEventListener","resetAudio","currentTime","pause","handleAudioPlay","play","handleTextToSpeech","filteredContent","audioFile","url","audio","URL","createObjectURL","Audio","onClick","size","disabled","SpeechToText","speechToText","RecordAudioIcon","IdleAudioIcon","handleReplaceInput","setIsAudioRecording","isRecording","setIsRecording","mediaRecorder","setMediaRecorder","audioBlob","setAudioBlob","startRecording","stream","recorder","navigator","mediaDevices","getUserMedia","MediaRecorder","ondataavailable","event","data","start","stopRecording","stop","getTracks","forEach","track","handleSpeechToText","audioBase64","transcription","error","console","handleRecordButtonClick","recordIcons","type","PageContainer","useEmblaCarousel","ArrowLeft","ArrowRight","CarouselContext","React2","createContext","useCarousel","context","useContext","Error","Carousel","orientation","opts","setApi","plugins","axis","carouselRef","api","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","onSelect","useCallback","scrollPrev","scrollNext","handleKeyDown","key","preventDefault","on","off","Provider","value","onKeyDownCapture","role","CarouselContent","CarouselItem","CarouselPrevious","variant","CarouselNext","NavigationMenuPrimitive","cva","ChevronDown","NavigationMenu","React3","Root","NavigationMenuViewport","NavigationMenuList","List","NavigationMenuItem","Item","navigationMenuTriggerStyle","NavigationMenuTrigger","Trigger","NavigationMenuContent","Content","NavigationMenuLink","Link","Viewport","NavigationMenuIndicator","Indicator","sidebarVariants","variants","sm","default","lg","defaultVariants","SidebarFooter","React4","Sidebar","items","selectedSection","footerContent","selectedVariant","defaultVariant","buttonClassName","map","item","name","icon","useTheme","Sonner","theme","React5","toastOptions","classNames","actionButton","cancelButton","TooltipPrimitive","Star","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","React6","sideOffset","StarRating","rating","onRate","star","RatingStars","currentRating","open","setOpen","animate","setAnimate","handleRate","timer","setTimeout","clearTimeout","hasRated","onOpenChange","asChild","side","align","ThumbsUp","ThumbsDown","RatingThumbs","React7","direction","Book","RatingComment","React8","comment","setComment","rows","onChange","e","target","ExternalLink","useDocumentReader","getDocument","loading","setLoading","setError","document","setDocument","handleDocumentError","errorMessage","resetDocument","fetchDocument","res","success","dynamic","PdfViewer","ssr","PlainTextViewer","DocumentViewer","docId","doc","isOpen","onClose","id","documentRender","DocumentFactory","colorVariant","DocumentSelector","documents","logInfoMessage","selectedDocName","setSelectedDocName","selectedDoc","setSelectedDoc","isModalOpen","setIsModalOpen","handleDocumentClick","stopPropagation","documentId","documentName","handleDrawerClose","onValueChange","placeholder","docName","CallOut","React11","CallOutDate","CallOutActions","actions","isClicked","setIsClicked","action","label","title","then","CallOutResponse","additionalInfo","Send","Assistant","React12","sdk","AssistantHeader","AssistantTitle","AssistantDescription","as","AssistantMessageArea","messages","messagesEndRef","streamingMessageId","current","scrollIntoView","behavior","created_at","Date","Number","toLocaleString","day","month","year","hour","minute","second","hour12","error_code","AssistantInput","sendMessageFunc","isButtonDisabled","input","handleInputChange","onSubmit","useRatings","RatingDialog","sendRating","topicId","assistantId","setHasRatedTopic","ratingStars","ratingThumbs","ratingComment","onHandleRateSuccess","err","altText","handleCancelRate","newRating","EditingStatus","Toaster2","SonnerToaster"],"mappings":"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","sourcesContent":["import \"./chunk-HGMICDIH.mjs\";\nimport {\n Alert,\n AlertDescription,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n AlertTitle,\n AspectRatio,\n Avatar,\n AvatarFallback,\n AvatarImage,\n Badge,\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n Checkbox,\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerOverlay,\n DrawerPortal,\n DrawerTitle,\n DrawerTrigger,\n Input,\n Label,\n Loader,\n Popover,\n PopoverContent,\n PopoverTrigger,\n RichText,\n ScrollArea,\n ScrollBar,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n Skeleton,\n Slider,\n Switch,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Textarea,\n Toast,\n ToastAction,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n Toaster,\n Toggle,\n Typography,\n badgeVariants,\n blobToBase64,\n buttonVariants,\n cn,\n getCookies,\n parseTextToSpeech,\n reducer,\n toast,\n toggleVariants,\n truncateString,\n useToast\n} from \"./chunk-6EP6KTGV.mjs\";\n\n// src/components/templates/messages-window.tsx\nimport { forwardRef } from \"react\";\nvar MessagesWindow = forwardRef(\n ({ className, ...props }, ref) => {\n return /* @__PURE__ */ React.createElement(\"div\", { className: cn(className, \"alq--messages--window\"), ...props });\n }\n);\nMessagesWindow.displayName = \"MessagesWindow\";\n\n// src/components/templates/query-box.tsx\nimport { forwardRef as forwardRef2 } from \"react\";\nvar QueryBox = forwardRef2(\n ({ className, ...props }, ref) => {\n return /* @__PURE__ */ React.createElement(\"div\", { className: cn(className, \"alq--querybox\"), ...props });\n }\n);\nQueryBox.displayName = \"QueryBox\";\n\n// src/components/templates/hero/index.tsx\nimport { forwardRef as forwardRef3 } from \"react\";\nvar Hero = forwardRef3(\n ({ className, children, ...props }, ref) => {\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n ref,\n className: cn(\"alq--hero-container\", \"grid\", className),\n ...props\n },\n children\n );\n }\n);\nvar HeroContent = forwardRef3(\n ({ className, children, ...props }, ref) => {\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n ref,\n className: cn(\"alq--hero-container\", className),\n ...props\n },\n children\n );\n }\n);\nHero.displayName = \"Hero\";\nHeroContent.displayName = \"HeroContent\";\n\n// src/components/templates/cards/with-image-heading-description.tsx\nvar CardWithImageHeadingDescriptionVertical = (props) => {\n const { showBorder, image, heading, description } = props;\n return /* @__PURE__ */ React.createElement(Card, { className: cn(\"w-[360px]\", !showBorder && \"border-none shadow-none\") }, image, /* @__PURE__ */ React.createElement(CardHeader, null, /* @__PURE__ */ React.createElement(CardTitle, null, heading), /* @__PURE__ */ React.createElement(Typography, { typeStyle: \"small\", className: \"text-font-weak-color\" }, description)), /* @__PURE__ */ React.createElement(CardContent, null));\n};\nvar CardImageWithHeadingAndDescriptionHorizontal = (props) => {\n const { showBorder, image, heading, description } = props;\n return /* @__PURE__ */ React.createElement(\n Card,\n {\n className: cn(\n \"lg:w-[600px] w-[360px] lg:flex lg:h-[150px]\",\n !showBorder && \"border-none shadow-none \"\n )\n },\n image,\n /* @__PURE__ */ React.createElement(CardHeader, null, /* @__PURE__ */ React.createElement(CardTitle, null, heading), /* @__PURE__ */ React.createElement(Typography, { typeStyle: \"small\", className: \"text-font-weak-color\" }, description)),\n /* @__PURE__ */ React.createElement(CardContent, null)\n );\n};\n\n// src/components/templates/cards/with-image-heading-description-avatar.tsx\nvar AvatarInfo = (props) => {\n const { userName, email, avatarImage } = props;\n return /* @__PURE__ */ React.createElement(\"div\", { className: \"flex space-x-2 items-center\" }, /* @__PURE__ */ React.createElement(Avatar, { className: \"w-16 h-16\" }, /* @__PURE__ */ React.createElement(AvatarImage, { src: avatarImage })), /* @__PURE__ */ React.createElement(\"div\", null, /* @__PURE__ */ React.createElement(Typography, { typeStyle: \"small\", className: \"font-semibold\" }, userName), /* @__PURE__ */ React.createElement(Typography, { typeStyle: \"tiny\", className: \"text-font-weak-color\" }, email)));\n};\nvar CardWithImageHeadingDescriptionAvatarVertical = (props) => {\n const { showBorder, image, heading, description } = props;\n return /* @__PURE__ */ React.createElement(Card, { className: cn(\"w-[360px]\", !showBorder && \"border-none shadow-none\") }, image, /* @__PURE__ */ React.createElement(CardHeader, null, /* @__PURE__ */ React.createElement(CardTitle, null, heading), /* @__PURE__ */ React.createElement(Typography, { typeStyle: \"small\", className: \"text-font-weak-color\" }, description)), /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(AvatarInfo, { ...props })));\n};\nvar CardImageWithHeadingAndDescriptionAvatarHorizontal = (props) => {\n const { showBorder, image, heading, description } = props;\n return /* @__PURE__ */ React.createElement(\n Card,\n {\n className: cn(\n \"lg:w-[600px] w-[360px] lg:flex lg:h-[246px]\",\n !showBorder && \"border-none shadow-none \"\n )\n },\n image,\n /* @__PURE__ */ React.createElement(\"div\", null, /* @__PURE__ */ React.createElement(CardHeader, null, /* @__PURE__ */ React.createElement(CardTitle, null, heading), /* @__PURE__ */ React.createElement(Typography, { typeStyle: \"small\", className: \"text-font-weak-color\" }, description)), /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(AvatarInfo, { ...props })))\n );\n};\n\n// src/components/organisms/whisper.tsx\nimport { useState, useEffect } from \"react\";\nimport {\n AudioLinesIcon,\n PlayCircleIcon,\n LoaderPinwheelIcon\n} from \"lucide-react\";\nfunction Whisper({\n className,\n message,\n isMessageStreaming,\n textToSpeech\n}) {\n const [audioUrl, setAudioUrl] = useState(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const content = message.content;\n useEffect(() => {\n if (audioUrl) {\n const handlePlaying = () => setIsPlaying(true);\n const handlePause = () => setIsPlaying(false);\n const handleEnded = () => setIsPlaying(false);\n audioUrl.addEventListener(\"playing\", handlePlaying);\n audioUrl.addEventListener(\"pause\", handlePause);\n audioUrl.addEventListener(\"ended\", handleEnded);\n return () => {\n audioUrl.removeEventListener(\"playing\", handlePlaying);\n audioUrl.removeEventListener(\"pause\", handlePause);\n audioUrl.removeEventListener(\"ended\", handleEnded);\n };\n }\n }, [audioUrl]);\n const resetAudio = () => {\n audioUrl && (audioUrl.currentTime = 0);\n audioUrl?.pause();\n };\n const handleAudioPlay = () => isPlaying ? resetAudio() : audioUrl?.play();\n const handleTextToSpeech = async (content2) => {\n if (!audioUrl) {\n setIsLoading(true);\n const filteredContent = parseTextToSpeech(content2);\n const audioFile = await textToSpeech(filteredContent);\n if (audioFile) {\n const url = URL.createObjectURL(audioFile);\n const audio = new Audio(url);\n setIsLoading(false);\n audio.play();\n setAudioUrl(audio);\n }\n } else {\n setIsLoading(false);\n handleAudioPlay();\n }\n };\n return /* @__PURE__ */ React.createElement(\"div\", { className: cn(className) }, isMessageStreaming && /* @__PURE__ */ React.createElement(\"div\", { className: \"p-2 w-[24px] h-[24px]\" }), !isMessageStreaming && /* @__PURE__ */ React.createElement(\"div\", { onClick: () => handleTextToSpeech(content) }, isPlaying && /* @__PURE__ */ React.createElement(\"button\", { className: \"p-2 items-center justify-center\" }, /* @__PURE__ */ React.createElement(AudioLinesIcon, { size: 20 })), isLoading && /* @__PURE__ */ React.createElement(\"button\", { className: \"p-2 items-center justify-center\" }, \" \", /* @__PURE__ */ React.createElement(LoaderPinwheelIcon, { size: 20, className: \"circular-animation\" })), !isLoading && !isPlaying && /* @__PURE__ */ React.createElement(\n \"button\",\n {\n disabled: isLoading,\n className: \"p-2 items-center justify-center\"\n },\n /* @__PURE__ */ React.createElement(PlayCircleIcon, { size: 20 })\n )));\n}\n\n// src/components/organisms/speechToText.tsx\nimport { useState as useState2, useEffect as useEffect2 } from \"react\";\nfunction SpeechToText({\n className,\n speechToText,\n RecordAudioIcon,\n IdleAudioIcon,\n handleReplaceInput,\n setIsAudioRecording,\n ...props\n}) {\n const [isRecording, setIsRecording] = useState2(false);\n const [isLoading, setIsLoading] = useState2(false);\n const [mediaRecorder, setMediaRecorder] = useState2(null);\n const [audioBlob, setAudioBlob] = useState2(null);\n const startRecording = async () => {\n setIsRecording(true);\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const recorder = new MediaRecorder(stream);\n setMediaRecorder(recorder);\n recorder.ondataavailable = (event) => {\n setAudioBlob(event.data);\n };\n recorder.start();\n };\n const stopRecording = () => {\n setIsRecording(false);\n mediaRecorder?.stop();\n mediaRecorder?.stream.getTracks().forEach((track) => track.stop());\n };\n const handleSpeechToText = async () => {\n if (!audioBlob) return;\n const audioBase64 = await blobToBase64(audioBlob);\n try {\n setIsLoading(true);\n const transcription = await speechToText(audioBase64);\n if (transcription) {\n handleReplaceInput(transcription);\n setIsLoading(false);\n }\n } catch (error) {\n console.error(\"Error transcribing audio:\", error);\n setIsLoading(false);\n } finally {\n setAudioBlob(null);\n }\n };\n useEffect2(() => {\n if (!isRecording && audioBlob) {\n handleSpeechToText();\n }\n }, [isRecording, audioBlob]);\n useEffect2(() => {\n isLoading || isRecording ? setIsAudioRecording(true) : setIsAudioRecording(false);\n }, [isRecording, isLoading]);\n const handleRecordButtonClick = () => {\n if (isRecording) {\n stopRecording();\n } else {\n startRecording();\n }\n };\n const recordIcons = isRecording ? RecordAudioIcon : IdleAudioIcon;\n return /* @__PURE__ */ React.createElement(\"div\", { className: cn(className), ...props }, /* @__PURE__ */ React.createElement(\"button\", { disabled: isLoading, type: \"button\", onClick: handleRecordButtonClick }, recordIcons));\n}\n\n// src/components/organisms/assistant.tsx\nimport * as React12 from \"react\";\nimport { useEffect as useEffect8 } from \"react\";\n\n// src/components/molecules/page-container.tsx\nimport { forwardRef as forwardRef4 } from \"react\";\nvar PageContainer = forwardRef4(\n ({ className, ...props }, ref) => {\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n ref,\n className: cn(className, \"alq--page-container\"),\n ...props\n }\n );\n }\n);\nPageContainer.displayName = \"PageContainer\";\n\n// src/components/molecules/carousel.tsx\nimport * as React2 from \"react\";\nimport useEmblaCarousel from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nvar CarouselContext = React2.createContext(null);\nfunction useCarousel() {\n const context = React2.useContext(CarouselContext);\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n return context;\n}\nvar Carousel = React2.forwardRef(\n ({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n }, ref) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\"\n },\n plugins\n );\n const [canScrollPrev, setCanScrollPrev] = React2.useState(false);\n const [canScrollNext, setCanScrollNext] = React2.useState(false);\n const onSelect = React2.useCallback((api2) => {\n if (!api2) {\n return;\n }\n setCanScrollPrev(api2.canScrollPrev());\n setCanScrollNext(api2.canScrollNext());\n }, []);\n const scrollPrev = React2.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n const scrollNext = React2.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n const handleKeyDown = React2.useCallback(\n (event) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n React2.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n setApi(api);\n }, [api, setApi]);\n React2.useEffect(() => {\n if (!api) {\n return;\n }\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n return /* @__PURE__ */ React2.createElement(\n CarouselContext.Provider,\n {\n value: {\n carouselRef,\n api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext\n }\n },\n /* @__PURE__ */ React2.createElement(\n \"div\",\n {\n ref,\n onKeyDownCapture: handleKeyDown,\n className: cn(\"relative\", className),\n role: \"region\",\n \"aria-roledescription\": \"carousel\",\n ...props\n },\n children\n )\n );\n }\n);\nCarousel.displayName = \"Carousel\";\nvar CarouselContent = React2.forwardRef(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n return /* @__PURE__ */ React2.createElement(\"div\", { ref: carouselRef, className: \"overflow-hidden\" }, /* @__PURE__ */ React2.createElement(\n \"div\",\n {\n ref,\n className: cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n ),\n ...props\n }\n ));\n});\nCarouselContent.displayName = \"CarouselContent\";\nvar CarouselItem = React2.forwardRef(({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n return /* @__PURE__ */ React2.createElement(\n \"div\",\n {\n ref,\n role: \"group\",\n \"aria-roledescription\": \"slide\",\n className: cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n ),\n ...props\n }\n );\n});\nCarouselItem.displayName = \"CarouselItem\";\nvar CarouselPrevious = React2.forwardRef(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n return /* @__PURE__ */ React2.createElement(\n Button,\n {\n ref,\n variant,\n size,\n className: cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\" ? \"-left-12 top-1/2 -translate-y-1/2\" : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n ),\n disabled: !canScrollPrev,\n onClick: scrollPrev,\n ...props\n },\n /* @__PURE__ */ React2.createElement(ArrowLeft, { className: \"h-4 w-4\" }),\n /* @__PURE__ */ React2.createElement(\"span\", { className: \"sr-only\" }, \"Previous slide\")\n );\n});\nCarouselPrevious.displayName = \"CarouselPrevious\";\nvar CarouselNext = React2.forwardRef(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n return /* @__PURE__ */ React2.createElement(\n Button,\n {\n ref,\n variant,\n size,\n className: cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\" ? \"-right-12 top-1/2 -translate-y-1/2\" : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n ),\n disabled: !canScrollNext,\n onClick: scrollNext,\n ...props\n },\n /* @__PURE__ */ React2.createElement(ArrowRight, { className: \"h-4 w-4\" }),\n /* @__PURE__ */ React2.createElement(\"span\", { className: \"sr-only\" }, \"Next slide\")\n );\n});\nCarouselNext.displayName = \"CarouselNext\";\n\n// src/components/molecules/navigation-menu.tsx\nimport * as React3 from \"react\";\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\";\nimport { cva } from \"class-variance-authority\";\nimport { ChevronDown } from \"lucide-react\";\nvar NavigationMenu = React3.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React3.createElement(\n NavigationMenuPrimitive.Root,\n {\n ref,\n className: cn(\n \"relative z-10 flex max-w-max flex-1 items-center justify-center\",\n className\n ),\n ...props\n },\n children,\n /* @__PURE__ */ React3.createElement(NavigationMenuViewport, null)\n));\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;\nvar NavigationMenuList = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3.createElement(\n NavigationMenuPrimitive.List,\n {\n ref,\n className: cn(\n \"group flex flex-1 list-none items-center justify-center space-x-1\",\n className\n ),\n ...props\n }\n));\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;\nvar NavigationMenuItem = NavigationMenuPrimitive.Item;\nvar navigationMenuTriggerStyle = cva(\n \"group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50\"\n);\nvar NavigationMenuTrigger = React3.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React3.createElement(\n NavigationMenuPrimitive.Trigger,\n {\n ref,\n className: cn(navigationMenuTriggerStyle(), \"group\", className),\n ...props\n },\n children,\n \" \",\n /* @__PURE__ */ React3.createElement(\n ChevronDown,\n {\n className: \"relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180\",\n \"aria-hidden\": \"true\"\n }\n )\n));\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;\nvar NavigationMenuContent = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3.createElement(\n NavigationMenuPrimitive.Content,\n {\n ref,\n className: cn(\n \"left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto \",\n className\n ),\n ...props\n }\n));\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;\nvar NavigationMenuLink = NavigationMenuPrimitive.Link;\nvar NavigationMenuViewport = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3.createElement(\"div\", { className: cn(\"absolute left-0 top-full flex justify-center\") }, /* @__PURE__ */ React3.createElement(\n NavigationMenuPrimitive.Viewport,\n {\n className: cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n ),\n ref,\n ...props\n }\n)));\nNavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;\nvar NavigationMenuIndicator = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3.createElement(\n NavigationMenuPrimitive.Indicator,\n {\n ref,\n className: cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className\n ),\n ...props\n },\n /* @__PURE__ */ React3.createElement(\"div\", { className: \"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" })\n));\nNavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;\n\n// src/components/molecules/sidebar.tsx\nimport * as React4 from \"react\";\nimport { cva as cva2 } from \"class-variance-authority\";\nvar sidebarVariants = cva2(\n \"flex flex-col border-r\",\n {\n variants: {\n size: {\n sm: \"w-48\",\n default: \"w-64\",\n lg: \"w-72\"\n }\n },\n defaultVariants: {\n size: \"default\"\n }\n }\n);\nvar SidebarFooter = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React4.createElement(\n \"div\",\n {\n ref,\n className: cn(\"p-4\", className),\n ...props\n },\n children\n));\nSidebarFooter.displayName = \"SidebarFooter\";\nvar Sidebar = React4.forwardRef(\n ({\n className,\n items,\n selectedSection,\n onSelect,\n footerContent,\n size = \"default\",\n selectedVariant = \"secondary\",\n defaultVariant = \"ghost\",\n buttonClassName,\n ...props\n }, ref) => {\n return /* @__PURE__ */ React4.createElement(\"div\", { className: cn(className, \"alq--navigation-sidebar h-full\"), ref, ...props }, /* @__PURE__ */ React4.createElement(\"aside\", { className: cn(sidebarVariants({ size }), \"h-full\") }, /* @__PURE__ */ React4.createElement(ScrollArea, { className: \"flex-grow justify-between\" }, /* @__PURE__ */ React4.createElement(\"div\", { className: \"flex flex-col gap-2 p-4\" }, items.map((item) => /* @__PURE__ */ React4.createElement(\n Button,\n {\n key: item.name,\n variant: selectedSection?.name === item.name ? selectedVariant : defaultVariant,\n className: cn(\"justify-start\", buttonClassName),\n disabled: item.disabled,\n onClick: () => {\n if (onSelect) {\n onSelect(item);\n }\n }\n },\n item.icon && /* @__PURE__ */ React4.createElement(item.icon, { className: \"mr-2 h-4 w-4\" }),\n item.name\n )))), footerContent && /* @__PURE__ */ React4.createElement(SidebarFooter, null, footerContent)));\n }\n);\n\n// src/components/molecules/sonner.tsx\nimport * as React5 from \"react\";\nimport { useTheme } from \"next-themes\";\nimport { Toaster as Sonner } from \"sonner\";\nvar Toaster2 = ({ ...props }) => {\n const { theme = \"system\" } = useTheme();\n return /* @__PURE__ */ React5.createElement(\n Sonner,\n {\n theme,\n className: \"toaster group\",\n toastOptions: {\n classNames: {\n toast: \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton: \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton: \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\"\n }\n },\n ...props\n }\n );\n};\n\n// src/components/molecules/rating-stars.tsx\nimport * as React6 from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { Star } from \"lucide-react\";\nvar TooltipProvider = TooltipPrimitive.Provider;\nvar Tooltip = TooltipPrimitive.Root;\nvar TooltipTrigger = TooltipPrimitive.Trigger;\nvar TooltipContent = React6.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React6.createElement(\n TooltipPrimitive.Content,\n {\n ref,\n sideOffset,\n className: cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground shadow-lg 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\",\n className\n ),\n ...props\n }\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\nvar StarRating = React6.forwardRef(({ rating, onRate }, ref) => /* @__PURE__ */ React6.createElement(\"div\", { ref, className: \"flex\" }, [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ React6.createElement(\n Button,\n {\n key: star,\n onClick: () => onRate(star),\n variant: \"link\",\n className: \"p-1 transition-colors [&_svg]:size-5 h-5\",\n \"aria-label\": `Rate ${star} star${star !== 1 ? \"s\" : \"\"}`\n },\n /* @__PURE__ */ React6.createElement(\n Star,\n {\n className: cn(\n \"w-5 h-5\",\n star <= rating ? \"alq-rating-star-active fill-current stroke-current\" : \"alq-rating-star-inactive\"\n )\n }\n )\n))));\nStarRating.displayName = \"StarRating\";\nvar RatingStars = React6.forwardRef(({\n currentRating = 0,\n onRate,\n className,\n isLoading\n}, ref) => {\n const [open, setOpen] = React6.useState(false);\n const [animate, setAnimate] = React6.useState(false);\n const handleRate = (rating) => {\n onRate(rating);\n setOpen(false);\n };\n React6.useEffect(() => {\n if (currentRating > 0) {\n setAnimate(true);\n const timer = setTimeout(() => setAnimate(false), 150);\n return () => clearTimeout(timer);\n }\n }, [currentRating]);\n const hasRated = currentRating > 0;\n return /* @__PURE__ */ React6.createElement(TooltipProvider, null, /* @__PURE__ */ React6.createElement(Tooltip, { open, onOpenChange: setOpen }, /* @__PURE__ */ React6.createElement(TooltipTrigger, { asChild: true }, /* @__PURE__ */ React6.createElement(\n Button,\n {\n ref,\n variant: \"link\",\n className: cn(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium [&_svg]:size-5 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n className\n ),\n disabled: isLoading,\n onClick: () => setOpen(!open)\n },\n /* @__PURE__ */ React6.createElement(\n Star,\n {\n className: cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && \"animate-ping\",\n isLoading && \"animate-pulse\",\n hasRated ? \"alq-rating-star-active fill-current stroke-current\" : \"alq-rating-star-inactive\"\n )\n }\n )\n )), /* @__PURE__ */ React6.createElement(TooltipContent, { side: \"top\", align: \"center\", className: \"p-0\" }, /* @__PURE__ */ React6.createElement(\"div\", { className: \"p-2 bg-background\" }, /* @__PURE__ */ React6.createElement(\n StarRating,\n {\n rating: currentRating,\n onRate: handleRate\n }\n )))));\n});\nRatingStars.displayName = \"RatingStars\";\n\n// src/components/molecules/rating-thumbs.tsx\nimport * as React7 from \"react\";\nimport { ThumbsUp, ThumbsDown } from \"lucide-react\";\nvar RatingThumbs = React7.forwardRef(\n ({\n currentRating,\n onRate,\n direction = \"row\",\n className,\n isLoading\n }, ref) => {\n const [animate, setAnimate] = React7.useState(false);\n React7.useEffect(() => {\n if (currentRating) {\n setAnimate(true);\n const timer = setTimeout(() => setAnimate(false), 150);\n return () => clearTimeout(timer);\n }\n }, [currentRating]);\n return /* @__PURE__ */ React7.createElement(\n \"div\",\n {\n ref,\n className: cn(\n \"inline-flex\",\n direction === \"column\" ? \"flex-col\" : \"flex-row\",\n \"space-x-1 gap-4\",\n className\n )\n },\n /* @__PURE__ */ React7.createElement(\n Button,\n {\n variant: \"link\",\n onClick: () => onRate(currentRating === \"thumbsUp\" ? \"\" : \"thumbsUp\"),\n className: cn(\n \"p-1 transition-colors disabled:opacity-50 [&_svg]:size-5\",\n `hover:alq-rating-thumbsup/10`\n ),\n \"aria-label\": \"Thumbs up\",\n disabled: isLoading\n },\n /* @__PURE__ */ React7.createElement(\n ThumbsUp,\n {\n className: cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && currentRating === \"thumbsUp\" && \"animate-ping\",\n isLoading && \"animate-pulse\",\n currentRating === \"thumbsUp\" ? \"alq-rating-thumbsup fill-current stroke-current\" : \"alq-rating-thumbs-inactive fill-transparent\"\n )\n }\n )\n ),\n /* @__PURE__ */ React7.createElement(\n Button,\n {\n variant: \"link\",\n onClick: () => onRate(currentRating === \"thumbsDown\" ? \"\" : \"thumbsDown\"),\n className: cn(\n \"p-1 transition-colors disabled:opacity-50 mt-0.5 [&_svg]:size-5\",\n `hover:bg-alq-rating-thumbsdown/10`\n ),\n \"aria-label\": \"Thumbs down\",\n disabled: isLoading\n },\n /* @__PURE__ */ React7.createElement(\n ThumbsDown,\n {\n className: cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && currentRating === \"thumbsDown\" && \"animate-ping\",\n isLoading && \"animate-pulse\",\n currentRating === \"thumbsDown\" ? \"alq-rating-thumbsdown fill-current stroke-current\" : \"alq-rating-thumbs-inactive fill-transparent\"\n )\n }\n )\n )\n );\n }\n);\nRatingThumbs.displayName = \"RatingThumbs\";\n\n// src/components/molecules/rating-comment.tsx\nimport * as React8 from \"react\";\nimport { Book } from \"lucide-react\";\nvar RatingComment = React8.forwardRef(\n ({ currentRating, onRate, className, isLoading }, ref) => {\n const [open, setOpen] = React8.useState(false);\n const [comment, setComment] = React8.useState(\"\");\n const [animate, setAnimate] = React8.useState(false);\n const handleRate = () => {\n onRate(comment);\n setOpen(false);\n };\n React8.useEffect(() => {\n if (currentRating) {\n setAnimate(true);\n const timer = setTimeout(() => setAnimate(false), 150);\n return () => clearTimeout(timer);\n }\n }, [currentRating]);\n React8.useEffect(() => {\n setComment(\"\");\n }, [open]);\n return /* @__PURE__ */ React8.createElement(Dialog, { open, onOpenChange: setOpen }, /* @__PURE__ */ React8.createElement(DialogTrigger, { asChild: true }, /* @__PURE__ */ React8.createElement(\n Button,\n {\n ref,\n variant: \"link\",\n size: \"lg\",\n className: cn(\n \"inline-flex p-2 items-center justify-center rounded-md text-sm font-medium transition-colors [&_svg]:size-5 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring bg-transparent hover:none disabled:pointer-events-none disabled:opacity-50\",\n className\n ),\n disabled: isLoading\n },\n /* @__PURE__ */ React8.createElement(\n Book,\n {\n className: cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && \"animate-ping\",\n isLoading && \"animate-pulse\",\n `${comment ? \"alq-rating-comment\" : \"stroke-gray-400\"}`\n )\n }\n )\n )), /* @__PURE__ */ React8.createElement(DialogOverlay, { className: \"fixed inset-0 bg-black bg-opacity-50\" }), /* @__PURE__ */ React8.createElement(DialogContent, { \"aria-describedby\": void 0 }, /* @__PURE__ */ React8.createElement(DialogTitle, { className: \"text-lg font-medium\" }, \"Deja un comentario\"), /* @__PURE__ */ React8.createElement(\n \"textarea\",\n {\n className: \"mt-4 w-full p-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-primary\",\n rows: 4,\n value: comment,\n onChange: (e) => setComment(e.target.value)\n }\n ), /* @__PURE__ */ React8.createElement(\"div\", { className: \"mt-4 flex justify-end\" }, /* @__PURE__ */ React8.createElement(\n Button,\n {\n onClick: handleRate,\n disabled: !comment\n },\n \"Enviar\"\n ))));\n }\n);\nRatingComment.displayName = \"RatingComment\";\n\n// src/components/molecules/documents/document-selector.tsx\nimport React10, { useState as useState8 } from \"react\";\nimport { ExternalLink } from \"lucide-react\";\n\n// src/components/molecules/documents/document-viewer.tsx\nimport React9, { useEffect as useEffect7 } from \"react\";\n\n// src/components/hooks/use-document.tsx\nimport { useState as useState7 } from \"react\";\nvar useDocumentReader = (url, getDocument) => {\n const [loading, setLoading] = useState7(true);\n const [error, setError] = useState7(null);\n const [document, setDocument] = useState7(null);\n const handleDocumentError = (error2) => {\n const errorMessage = \"Hubo un error al obtener el documento. Por favor ponganse en contacto con el administrador.\";\n setError(errorMessage);\n throw new Error(error2?.message || \"Unknown error\");\n };\n const resetDocument = () => {\n setDocument(null);\n };\n const fetchDocument = async () => {\n setLoading(true);\n setError(null);\n try {\n const res = await getDocument(url);\n if (!res.success) {\n handleDocumentError(res.error || new Error(\"Unknown error\"));\n setLoading(false);\n return;\n }\n res.data && setDocument(res.data);\n } catch (error2) {\n handleDocumentError(error2);\n } finally {\n setLoading(false);\n }\n };\n return { document, loading, fetchDocument, resetDocument, error };\n};\n\n// src/components/molecules/documents/document-viewer.tsx\nimport dynamic from \"next/dynamic\";\nvar PdfViewer = dynamic(() => import(\"./pdf-viewer-J3ENKRHZ.mjs\"), { ssr: false });\nvar PlainTextViewer = dynamic(() => import(\"./plain-text-viewer-Q3O4LAOE.mjs\"), { ssr: false });\nvar DocumentViewer = ({\n docId,\n doc,\n isOpen,\n onClose,\n getDocument\n}) => {\n const { document, loading, fetchDocument, resetDocument, error } = useDocumentReader(doc.id, getDocument);\n useEffect7(() => {\n resetDocument();\n if (isOpen) {\n fetchDocument();\n }\n }, [isOpen]);\n const documentRender = document && !error ? /* @__PURE__ */ React9.createElement(DocumentFactory, { document, docId: doc.id }) : /* @__PURE__ */ React9.createElement(\"div\", { className: \"flex flex-col items-center justify-center h-full w-full text-center p-4\" }, /* @__PURE__ */ React9.createElement(\"div\", { className: \"text-primary font-medium\" }, error));\n return /* @__PURE__ */ React9.createElement(Dialog, { open: isOpen, onOpenChange: onClose }, /* @__PURE__ */ React9.createElement(\n DialogContent,\n {\n \"aria-describedby\": document ? \"document-description\" : void 0,\n className: \"h-[90%] max-w-[90%] gap-0 flex flex-col focus:outline-none\"\n },\n /* @__PURE__ */ React9.createElement(DialogHeader, { className: \"border-b border-border pb-2\" }, /* @__PURE__ */ React9.createElement(DialogTitle, null, doc.name)),\n !document && loading ? /* @__PURE__ */ React9.createElement(Loader, { size: \"xl\", colorVariant: \"destructive\" }) : documentRender\n ));\n};\nvar DocumentFactory = ({ document, docId }) => {\n switch (document && document.type) {\n case \"application/pdf\":\n return /* @__PURE__ */ React9.createElement(PdfViewer, { doc: document, docId });\n case \"text/plain\":\n return /* @__PURE__ */ React9.createElement(PlainTextViewer, { doc: document, docId });\n default:\n return /* @__PURE__ */ React9.createElement(\"div\", null, \"Unsupported file type\");\n }\n};\n\n// src/components/molecules/documents/document-selector.tsx\nvar DocumentSelector = ({ documents, getDocument, logInfoMessage }) => {\n const [selectedDocName, setSelectedDocName] = useState8(void 0);\n const [selectedDoc, setSelectedDoc] = useState8(null);\n const [isModalOpen, setIsModalOpen] = useState8(false);\n const handleDocumentClick = (doc, event) => {\n event.stopPropagation();\n setSelectedDoc(doc);\n logInfoMessage(\"Selected document\", {\n documentId: doc.id,\n documentName: doc.name\n });\n setIsModalOpen(true);\n };\n const handleDrawerClose = () => {\n setIsModalOpen(false);\n };\n return /* @__PURE__ */ React10.createElement(\"div\", { className: \"w-full md:w-4/6 alq--document-selector\" }, /* @__PURE__ */ React10.createElement(Select, { value: selectedDocName, onValueChange: setSelectedDocName }, /* @__PURE__ */ React10.createElement(SelectTrigger, { \"aria-label\": \"Documentos\" }, /* @__PURE__ */ React10.createElement(SelectValue, { placeholder: \"Documentos\" })), /* @__PURE__ */ React10.createElement(SelectContent, null, /* @__PURE__ */ React10.createElement(SelectGroup, null, /* @__PURE__ */ React10.createElement(SelectLabel, null, \"Documents\"), documents.map((doc) => /* @__PURE__ */ React10.createElement(\"div\", { key: doc.id, className: \"w-full flex relative\" }, /* @__PURE__ */ React10.createElement(SelectItem, { className: \"w-full\", key: doc.id, value: doc.id }, /* @__PURE__ */ React10.createElement(\"div\", { className: \"flex justify-between w-full\" }, /* @__PURE__ */ React10.createElement(\"p\", { className: \"h-4 truncate mr-5\" }, doc.name))), /* @__PURE__ */ React10.createElement(\n \"div\",\n {\n onClick: (event) => handleDocumentClick(doc, event),\n className: \"bflex items-center text-gray-400 hover:text-gray-500 absolute right-0 mt-2\",\n \"aria-label\": `Open ${doc.name}`\n },\n /* @__PURE__ */ React10.createElement(ExternalLink, { className: \"h-4 w-4 mx-2\" })\n )))))), selectedDoc && /* @__PURE__ */ React10.createElement(\n DocumentViewer,\n {\n doc: selectedDoc,\n docName: selectedDocName || \"\",\n isOpen: isModalOpen,\n onClose: handleDrawerClose,\n getDocument\n }\n ));\n};\n\n// src/components/molecules/call-out.tsx\nimport * as React11 from \"react\";\nvar CallOut = React11.forwardRef(({ className, children, role, ...props }, ref) => {\n return /* @__PURE__ */ React11.createElement(\n \"div\",\n {\n ref,\n className: cn(\"alq--callout-box\", className),\n \"data-role\": role,\n ...props\n },\n children\n );\n});\nvar CallOutDate = React11.forwardRef(({ className, children, ...props }, ref) => {\n return /* @__PURE__ */ React11.createElement(\"div\", { ref, className: cn(\"alq--callout-date\", className), ...props }, children);\n});\nvar CallOutActions = React11.forwardRef(({ className, actions, role, message, ...props }, ref) => {\n const [isLoading, setIsLoading] = React11.useState(false);\n const [isClicked, setIsClicked] = React11.useState(false);\n if (role === \"user\") {\n return null;\n }\n return /* @__PURE__ */ React11.createElement(\"div\", { ref, className: cn(\"alq--callout-actions\", className), ...props }, actions.map((action) => /* @__PURE__ */ React11.createElement(\n \"button\",\n {\n key: action.label,\n className: cn(\n \"alq--callout-action\",\n {\n \"alq--callout-animate-action\": isLoading\n },\n {\n \"alq--callout-clicked-action\": isClicked\n }\n ),\n type: \"button\",\n title: action.label,\n onClick: () => {\n setIsLoading(true);\n action.onClick(message).then(() => {\n setIsLoading(false);\n setIsClicked(true);\n });\n }\n },\n /* @__PURE__ */ React11.createElement(\n \"span\",\n {\n className: cn(\"alq-action-icon-wrapper\", {\n \"alq--callout-animate-action\": isLoading\n })\n },\n action.icon\n ),\n /* @__PURE__ */ React11.createElement(\"label\", null, action.label)\n )));\n});\nvar CallOutResponse = React11.forwardRef(({ className, children, role, additionalInfo, ...props }, ref) => {\n return /* @__PURE__ */ React11.createElement(\n \"div\",\n {\n ref,\n \"data-role\": role,\n className: cn(\"alq--callout-response\", className),\n ...props\n },\n /* @__PURE__ */ React11.createElement(RichText, { content: children }),\n additionalInfo && /* @__PURE__ */ React11.createElement(\"div\", { className: \"alq--callout-response-additional-info\" }, additionalInfo)\n );\n});\nCallOut.displayName = \"CallOut\";\nCallOutDate.displayName = \"CallOutDate\";\nCallOutActions.displayName = \"CallOutActions\";\nCallOutResponse.displayName = \"CallOutResponse\";\n\n// src/components/organisms/assistant.tsx\nimport { Send } from \"lucide-react\";\nvar Assistant = React12.forwardRef(\n ({ className, sdk, title, description, children, ...props }, ref) => {\n return /* @__PURE__ */ React12.createElement(\n \"div\",\n {\n ref,\n className: cn(\"flex flex-col h-full\", className),\n ...props\n },\n (title || description) && /* @__PURE__ */ React12.createElement(AssistantHeader, null, title && /* @__PURE__ */ React12.createElement(AssistantTitle, { title }), description && /* @__PURE__ */ React12.createElement(AssistantDescription, { description })),\n children\n );\n }\n);\nAssistant.displayName = \"Assistant\";\nvar AssistantTitle = React12.forwardRef(({ className, title, ...props }, ref) => /* @__PURE__ */ React12.createElement(\"div\", { ref, className, ...props }, /* @__PURE__ */ React12.createElement(Typography, { typeStyle: \"heading1\", as: \"h1\" }, title)));\nAssistantTitle.displayName = \"AssistantTitle\";\nvar AssistantDescription = React12.forwardRef(({ className, description, ...props }, ref) => /* @__PURE__ */ React12.createElement(\"div\", { ref, className, ...props }, /* @__PURE__ */ React12.createElement(Typography, { typeStyle: \"display\", as: \"p\" }, description)));\nAssistantDescription.displayName = \"AssistantDescription\";\nvar AssistantHeader = React12.forwardRef(\n ({ className, children, ...props }, ref) => /* @__PURE__ */ React12.createElement(\"div\", { ref, className, ...props }, children)\n);\nAssistantHeader.displayName = \"AssistantHeader\";\nvar AssistantMessageArea = React12.forwardRef(\n ({\n className,\n messages,\n messagesEndRef,\n actions,\n streamingMessageId,\n ...props\n }, ref) => {\n useEffect8(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"instant\" });\n }, []);\n return /* @__PURE__ */ React12.createElement(\n \"div\",\n {\n ref,\n className: cn(\"p-6 overflow-y-auto flex-grow\", className),\n ...props\n },\n messages.map((message) => /* @__PURE__ */ React12.createElement(\"div\", { key: message.id }, /* @__PURE__ */ React12.createElement(\n CallOut,\n {\n key: message.id,\n role: message.role,\n message\n },\n message.created_at && /* @__PURE__ */ React12.createElement(\"div\", { className: \"text-xs text-muted-foreground/80 pb-1\" }, new Date(Number(message.created_at)).toLocaleString(\"es-ES\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false\n })),\n message.error_code && /* @__PURE__ */ React12.createElement(\n CallOutResponse,\n {\n role: \"assistant\",\n \"data-error-code\": message.error_code\n },\n \"We have an internal error, please try again later.\"\n ),\n message.content && /* @__PURE__ */ React12.createElement(CallOutResponse, { role: message.role, additionalInfo: streamingMessageId !== message.id ? message?.additionalInfo : void 0 }, message.content),\n actions && streamingMessageId !== message.id && /* @__PURE__ */ React12.createElement(\n CallOutActions,\n {\n key: message.id,\n actions,\n message,\n role: message.role\n }\n )\n ))),\n /* @__PURE__ */ React12.createElement(\"div\", { ref: messagesEndRef })\n );\n }\n);\nAssistantMessageArea.displayName = \"AssistantMessageArea\";\nvar AssistantInput = React12.forwardRef(\n ({\n className,\n sendMessageFunc,\n isButtonDisabled,\n input,\n handleInputChange,\n isMessageStreaming,\n ...props\n }, ref) => {\n return /* @__PURE__ */ React12.createElement(\n \"form\",\n {\n onSubmit: sendMessageFunc,\n className: `flex items-center space-x-4 ${className}`,\n ref,\n ...props\n },\n /* @__PURE__ */ React12.createElement(\n \"input\",\n {\n type: \"text\",\n disabled: isButtonDisabled,\n value: input,\n onChange: handleInputChange,\n placeholder: isMessageStreaming ? \"Procesando...\" : \"Escribe tu mensaje aqu\\xED...\",\n className: \"flex-1 text-sm p-3 rounded-lg focus:outline-none w-full border\"\n }\n ),\n /* @__PURE__ */ React12.createElement(\n \"button\",\n {\n type: \"submit\",\n disabled: isButtonDisabled,\n className: `w-10 h-10 ${isButtonDisabled ? \"bg-gray-500\" : \"bg-black\"} rounded-full flex items-center justify-center alq--assistant-button-send`\n },\n /* @__PURE__ */ React12.createElement(Send, { className: \"text-white w-5 h-5\" })\n )\n );\n }\n);\nAssistantInput.displayName = \"AssistantInput\";\n\n// src/components/organisms/rating-dialog.tsx\nimport { useRatings } from \"@alquimia-ai/tools/hooks\";\nfunction RatingDialog({\n sendRating,\n topicId,\n assistantId,\n isOpen,\n onOpenChange,\n setHasRatedTopic\n}) {\n const { toast: toast2 } = useToast();\n const { handleRate, ratingStars, ratingThumbs, ratingComment, isLoading } = useRatings({ assistantId, sendRating, topicId });\n const onHandleRateSuccess = (success, err) => {\n setTimeout(() => onOpenChange(false), 1e3);\n success ? setHasRatedTopic(true) : toast2({\n title: \"Error\",\n description: `Hubo un error al enviar la calificaci\\xF3n`,\n action: /* @__PURE__ */ React.createElement(ToastAction, { altText: \"Goto schedule to undo\" }, \"Cerrar\")\n });\n };\n const handleCancelRate = () => {\n setHasRatedTopic(true);\n onOpenChange(false);\n };\n return /* @__PURE__ */ React.createElement(Dialog, { open: isOpen, onOpenChange }, /* @__PURE__ */ React.createElement(DialogContent, { className: \"sm:max-w-md\" }, /* @__PURE__ */ React.createElement(DialogHeader, null, /* @__PURE__ */ React.createElement(DialogTitle, null, \"Calific\\xE1 esta conversaci\\xF3n\"), /* @__PURE__ */ React.createElement(DialogDescription, null, \"Por favor, compart\\xED tu opini\\xF3n sobre el asistente.\")), /* @__PURE__ */ React.createElement(\"div\", { className: \"flex flex-row justify-center gap-4 py-4\" }, /* @__PURE__ */ React.createElement(\n RatingStars,\n {\n currentRating: ratingStars,\n onRate: (newRating) => handleRate(\"score\", newRating, onHandleRateSuccess),\n isLoading,\n className: \"p-2 rounded\"\n }\n ), /* @__PURE__ */ React.createElement(\n RatingThumbs,\n {\n currentRating: ratingComment,\n onRate: (newRating) => handleRate(\"description\", newRating, onHandleRateSuccess),\n direction: \"row\",\n isLoading\n }\n ), /* @__PURE__ */ React.createElement(\n RatingComment,\n {\n currentRating: ratingComment,\n onRate: (newRating) => handleRate(\"description\", newRating, onHandleRateSuccess),\n isLoading\n }\n )), /* @__PURE__ */ React.createElement(\"div\", { className: \"flex flex-row justify-center gap-4\" }, /* @__PURE__ */ React.createElement(Button, { onClick: handleCancelRate, variant: \"secondary\" }, /* @__PURE__ */ React.createElement(Typography, { as: \"p\", typeStyle: \"tiny\" }, \"No, gracias.\")))));\n}\n\n// src/types/type.ts\nvar EditingStatus = /* @__PURE__ */ ((EditingStatus2) => {\n EditingStatus2[\"EDITING\"] = \"EDITING\";\n EditingStatus2[\"FINISHED\"] = \"FINISHED\";\n return EditingStatus2;\n})(EditingStatus || {});\nexport {\n Alert,\n AlertDescription,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n AlertTitle,\n AspectRatio,\n Assistant,\n AssistantInput,\n AssistantMessageArea,\n Avatar,\n AvatarFallback,\n AvatarImage,\n Badge,\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n Button,\n CallOut,\n CallOutActions,\n CallOutDate,\n CallOutResponse,\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardImageWithHeadingAndDescriptionAvatarHorizontal,\n CardImageWithHeadingAndDescriptionHorizontal,\n CardTitle,\n CardWithImageHeadingDescriptionAvatarVertical,\n CardWithImageHeadingDescriptionVertical,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n Checkbox,\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n DocumentSelector,\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerOverlay,\n DrawerPortal,\n DrawerTitle,\n DrawerTrigger,\n EditingStatus,\n Hero,\n HeroContent,\n Input,\n Label,\n Loader,\n MessagesWindow,\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n NavigationMenuViewport,\n PageContainer,\n Popover,\n PopoverContent,\n PopoverTrigger,\n QueryBox,\n RatingComment,\n RatingDialog,\n RatingStars,\n RatingThumbs,\n RichText,\n ScrollArea,\n ScrollBar,\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n Sidebar,\n SidebarFooter,\n Skeleton,\n Slider,\n Toaster2 as SonnerToaster,\n SpeechToText,\n Switch,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Textarea,\n Toast,\n ToastAction,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n Toaster,\n Toggle,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n Typography,\n Whisper,\n badgeVariants,\n blobToBase64,\n buttonVariants,\n cn,\n getCookies,\n navigationMenuTriggerStyle,\n parseTextToSpeech,\n reducer,\n toast,\n toggleVariants,\n truncateString,\n useDocumentReader,\n useToast\n};\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface MessagesWindowProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst MessagesWindow = forwardRef<HTMLDivElement, MessagesWindowProps>(\n ({ className, ...props }, ref) => {\n return (\n <div className={cn(className, \"alq--messages--window\")} {...props}></div>\n );\n }\n);\n\nMessagesWindow.displayName = \"MessagesWindow\";\nexport { MessagesWindow };\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface QueryBoxProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst QueryBox = forwardRef<HTMLDivElement, QueryBoxProps>(\n ({ className, ...props }, ref) => {\n return <div className={cn(className, \"alq--querybox\")} {...props}></div>;\n }\n);\n\nQueryBox.displayName = \"QueryBox\";\nexport { QueryBox };\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\nexport interface HeroProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst Hero = forwardRef<HTMLDivElement, HeroProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"alq--hero-container\", \"grid\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nexport interface HeroContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\nconst HeroContent = forwardRef<HTMLDivElement, HeroContentProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"alq--hero-container\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nHero.displayName = \"Hero\";\nHeroContent.displayName = \"HeroContent\";\n\nexport { Hero, HeroContent };\n","import { cn } from \"../../../lib/utils\";\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Typography,\n} from \"../../atoms\";\n\ninterface CardWithImageHeadingDescriptionProps {\n orientation: \"vertical\" | \"horizontal\";\n showBorder?: boolean;\n image: React.ReactNode;\n heading: React.ReactNode;\n description: React.ReactNode;\n}\n\nconst CardWithImageHeadingDescriptionVertical = (\n props: CardWithImageHeadingDescriptionProps\n) => {\n const { showBorder, image, heading, description } = props;\n return (\n <Card className={cn(\"w-[360px]\", !showBorder && \"border-none shadow-none\")}>\n {image}\n <CardHeader>\n <CardTitle>{heading}</CardTitle>\n <Typography typeStyle=\"small\" className=\"text-font-weak-color\">\n {description}\n </Typography>\n </CardHeader>\n <CardContent></CardContent>\n </Card>\n );\n};\n\nconst CardImageWithHeadingAndDescriptionHorizontal = (\n props: CardWithImageHeadingDescriptionProps\n) => {\n const { showBorder, image, heading, description } = props;\n return (\n <Card\n className={cn(\n \"lg:w-[600px] w-[360px] lg:flex lg:h-[150px]\",\n !showBorder && \"border-none shadow-none \"\n )}\n >\n {image}\n <CardHeader>\n <CardTitle>{heading}</CardTitle>\n <Typography typeStyle=\"small\" className=\"text-font-weak-color\">\n {description}\n </Typography>\n </CardHeader>\n <CardContent></CardContent>\n </Card>\n );\n};\n\nexport {\n CardWithImageHeadingDescriptionVertical,\n CardImageWithHeadingAndDescriptionHorizontal,\n type CardWithImageHeadingDescriptionProps,\n};\n","import { cn } from \"../../../lib/utils\";\nimport {\n Avatar,\n AvatarImage,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Typography,\n} from \"../../atoms\";\n\ninterface CardWithImageHeadingDescriptionAvatarProps {\n orientation: \"vertical\" | \"horizontal\";\n showBorder?: boolean;\n image: React.ReactNode;\n heading: React.ReactNode;\n description: React.ReactNode;\n avatarImage: string;\n userName: string;\n email: string;\n}\n\nconst AvatarInfo = (props: CardWithImageHeadingDescriptionAvatarProps) => {\n const { userName, email, avatarImage } = props;\n return (\n <div className=\"flex space-x-2 items-center\">\n <Avatar className=\"w-16 h-16\">\n <AvatarImage src={avatarImage} />\n </Avatar>\n <div>\n <Typography typeStyle=\"small\" className=\"font-semibold\">\n {userName}\n </Typography>\n <Typography typeStyle=\"tiny\" className=\"text-font-weak-color\">\n {email}\n </Typography>\n </div>\n </div>\n );\n};\n\nconst CardWithImageHeadingDescriptionAvatarVertical = (\n props: CardWithImageHeadingDescriptionAvatarProps\n) => {\n const { showBorder, image, heading, description } = props;\n\n return (\n <Card className={cn(\"w-[360px]\", !showBorder && \"border-none shadow-none\")}>\n {image}\n <CardHeader>\n <CardTitle>{heading}</CardTitle>\n <Typography typeStyle=\"small\" className=\"text-font-weak-color\">\n {description}\n </Typography>\n </CardHeader>\n <CardContent>\n <AvatarInfo {...props} />\n </CardContent>\n </Card>\n );\n};\n\nconst CardImageWithHeadingAndDescriptionAvatarHorizontal = (\n props: CardWithImageHeadingDescriptionAvatarProps\n) => {\n const { showBorder, image, heading, description } = props;\n return (\n <Card\n className={cn(\n \"lg:w-[600px] w-[360px] lg:flex lg:h-[246px]\",\n !showBorder && \"border-none shadow-none \"\n )}\n >\n {image}\n <div>\n <CardHeader>\n <CardTitle>{heading}</CardTitle>\n <Typography typeStyle=\"small\" className=\"text-font-weak-color\">\n {description}\n </Typography>\n </CardHeader>\n <CardContent>\n <AvatarInfo {...props} />\n </CardContent>\n </div>\n </Card>\n );\n};\n\nexport {\n CardWithImageHeadingDescriptionAvatarVertical,\n CardImageWithHeadingAndDescriptionAvatarHorizontal,\n type CardWithImageHeadingDescriptionAvatarProps,\n};\n","import { useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n AudioLinesIcon,\n PlayCircleIcon,\n LoaderPinwheelIcon,\n} from \"lucide-react\";\nimport { Message } from \"ai\";\nimport { parseTextToSpeech } from \"../../lib/utils\";\n\ninterface WhisperProps extends React.HTMLAttributes<HTMLDivElement> {\n message: Message;\n isMessageStreaming: boolean;\n textToSpeech: (content: string) => Promise<Blob>;\n}\n\nfunction Whisper({\n className,\n message,\n isMessageStreaming,\n textToSpeech,\n}: WhisperProps) {\n const [audioUrl, setAudioUrl] = useState<HTMLAudioElement | null>(null);\n const [isPlaying, setIsPlaying] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const content = message.content;\n\n useEffect(() => {\n if (audioUrl) {\n const handlePlaying = () => setIsPlaying(true);\n const handlePause = () => setIsPlaying(false);\n const handleEnded = () => setIsPlaying(false);\n\n audioUrl.addEventListener(\"playing\", handlePlaying);\n audioUrl.addEventListener(\"pause\", handlePause);\n audioUrl.addEventListener(\"ended\", handleEnded);\n\n return () => {\n audioUrl.removeEventListener(\"playing\", handlePlaying);\n audioUrl.removeEventListener(\"pause\", handlePause);\n audioUrl.removeEventListener(\"ended\", handleEnded);\n };\n }\n }, [audioUrl]);\n\n const resetAudio = () => {\n audioUrl && (audioUrl.currentTime = 0);\n audioUrl?.pause();\n };\n\n const handleAudioPlay = () => (isPlaying ? resetAudio() : audioUrl?.play());\n\n const handleTextToSpeech = async (content: string) => {\n if (!audioUrl) {\n setIsLoading(true);\n const filteredContent = parseTextToSpeech(content);\n const audioFile = await textToSpeech(filteredContent);\n\n if (audioFile) {\n const url = URL.createObjectURL(audioFile);\n const audio = new Audio(url);\n\n setIsLoading(false);\n audio.play();\n setAudioUrl(audio);\n }\n } else {\n setIsLoading(false);\n handleAudioPlay();\n }\n };\n\n return (\n <div className={cn(className)}>\n {isMessageStreaming && <div className=\"p-2 w-[24px] h-[24px]\"></div>}\n {!isMessageStreaming && (\n <div onClick={() => handleTextToSpeech(content)}>\n {isPlaying && (\n <button className=\"p-2 items-center justify-center\">\n <AudioLinesIcon size={20} />\n </button>\n )}\n\n {isLoading && (\n <button className=\"p-2 items-center justify-center\">\n {\" \"}\n <LoaderPinwheelIcon size={20} className=\"circular-animation\" />\n </button>\n )}\n\n {!isLoading && !isPlaying && (\n <button\n disabled={isLoading}\n className=\"p-2 items-center justify-center\"\n >\n <PlayCircleIcon size={20} />\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { Whisper };\n","import { useState, useEffect } from \"react\";\nimport { cn, blobToBase64 } from \"../../lib/utils\";\ninterface SpeechToTextProps extends React.HTMLAttributes<HTMLDivElement> {\n RecordAudioIcon: React.ReactElement;\n IdleAudioIcon: React.ReactElement;\n speechToText: (audio: string) => Promise<string>;\n handleReplaceInput: (text: string) => void;\n setIsAudioRecording: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nfunction SpeechToText({\n className,\n speechToText,\n RecordAudioIcon,\n IdleAudioIcon,\n handleReplaceInput,\n setIsAudioRecording,\n ...props\n}: SpeechToTextProps) {\n const [isRecording, setIsRecording] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [mediaRecorder, setMediaRecorder] = useState<MediaRecorder | null>(null);\n const [audioBlob, setAudioBlob] = useState<Blob | null>(null);\n\n const startRecording = async () => {\n setIsRecording(true);\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const recorder = new MediaRecorder(stream);\n setMediaRecorder(recorder);\n\n recorder.ondataavailable = (event) => {\n setAudioBlob(event.data);\n };\n\n recorder.start();\n };\n\n const stopRecording = () => {\n setIsRecording(false);\n mediaRecorder?.stop();\n mediaRecorder?.stream.getTracks().forEach(track => track.stop());\n };\n\n const handleSpeechToText = async () => {\n if (!audioBlob) return;\n\n const audioBase64 = await blobToBase64(audioBlob);\n try {\n setIsLoading(true)\n const transcription = await speechToText(audioBase64);\n if (transcription) {\n handleReplaceInput(transcription)\n setIsLoading(false)\n }\n } catch (error) {\n console.error('Error transcribing audio:', error);\n setIsLoading(false)\n } finally {\n setAudioBlob(null);\n }\n };\n\n useEffect(() => {\n if (!isRecording && audioBlob) {\n handleSpeechToText();\n }\n }, [isRecording, audioBlob]);\n\n useEffect(() => {\n isLoading || isRecording ? setIsAudioRecording(true) : setIsAudioRecording(false);\n }, [isRecording, isLoading]);\n\n const handleRecordButtonClick = () => {\n if (isRecording) {\n stopRecording();\n } else {\n startRecording();\n }\n };\n\n const recordIcons = isRecording ? RecordAudioIcon : IdleAudioIcon\n\n return (\n <div className={cn(className)} {...props}>\n <button disabled={isLoading} type=\"button\" onClick={handleRecordButtonClick}>\n {recordIcons}\n </button>\n </div>\n );\n}\n\nexport { SpeechToText };","\"use client\";\n\nimport * as React from \"react\";\nimport { useEffect } from \"react\";\nimport { AlquimiaSDK } from \"@alquimia-ai/tools/sdk\";\nimport { Typography } from \"../atoms\";\nimport { CallOut, CallOutResponse, CallOutActions } from \"../molecules\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Message } from \"ai\";\nimport { Send } from \"lucide-react\";\n\ninterface AssistantProps extends React.HTMLAttributes<HTMLDivElement> {\n sdk: AlquimiaSDK;\n title?: string;\n description?: string;\n}\n\nconst Assistant = React.forwardRef<HTMLDivElement, AssistantProps>(\n ({ className, sdk, title, description, children, ...props }, ref) => {\n // this components need to be refactored into a fully functional assistant\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col h-full\", className)}\n {...props}\n >\n {(title || description) && (\n <AssistantHeader>\n {title && <AssistantTitle title={title} />}\n {description && <AssistantDescription description={description} />}\n </AssistantHeader>\n )}\n {children}\n </div>\n );\n }\n);\nAssistant.displayName = \"Assistant\";\n\ninterface AssistantTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n title: string;\n}\n\nconst AssistantTitle = React.forwardRef<\n HTMLHeadingElement,\n AssistantTitleProps\n>(({ className, title, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <Typography typeStyle=\"heading1\" as=\"h1\">\n {title}\n </Typography>\n </div>\n));\nAssistantTitle.displayName = \"AssistantTitle\";\n\ninterface AssistantDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement> {\n description: string;\n}\n\nconst AssistantDescription = React.forwardRef<\n HTMLParagraphElement,\n AssistantDescriptionProps\n>(({ className, description, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n <Typography typeStyle=\"display\" as=\"p\">\n {description}\n </Typography>\n </div>\n));\nAssistantDescription.displayName = \"AssistantDescription\";\n\ninterface AssistantHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst AssistantHeader = React.forwardRef<HTMLDivElement, AssistantHeaderProps>(\n ({ className, children, ...props }, ref) => (\n <div ref={ref} className={className} {...props}>\n {children}\n </div>\n )\n);\nAssistantHeader.displayName = \"AssistantHeader\";\n\ninterface MessageAction {\n label: string;\n icon: React.ReactNode;\n onClick: (message?: Message) => Promise<void>;\n}\n\ninterface AssistantMessageAreaProps\n extends React.HTMLAttributes<HTMLDivElement> {\n messages: (Message & {\n error_code?: string;\n created_at?: string;\n error_detail?: string;\n additionalInfo?: string;\n })[];\n actions?: MessageAction[];\n messagesEndRef: any;\n isMessageStreaming?: boolean;\n streamingMessageId: string | null;\n}\n\nconst AssistantMessageArea = React.forwardRef<\n HTMLDivElement,\n AssistantMessageAreaProps\n>(\n (\n {\n className,\n messages,\n messagesEndRef,\n actions,\n streamingMessageId,\n ...props\n },\n ref\n ) => {\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"instant\" });\n }, []);\n\n return(\n <div\n ref={ref}\n className={cn(\"p-6 overflow-y-auto flex-grow\", className)}\n {...props}\n >\n {messages.map((message) => (\n <div key={message.id}>\n <CallOut\n key={message.id}\n role={message.role as \"user\" | \"assistant\"}\n message={message}\n >\n {message.created_at && (\n <div className=\"text-xs text-muted-foreground/80 pb-1\">\n {new Date(Number(message.created_at)).toLocaleString(\"es-ES\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n })}\n </div>\n )}\n {message.error_code && (\n <CallOutResponse\n role=\"assistant\"\n data-error-code={message.error_code}\n >\n We have an internal error, please try again later.\n </CallOutResponse>\n )}\n {message.content && (\n <CallOutResponse role={message.role} additionalInfo={streamingMessageId !== message.id ? message?.additionalInfo : undefined}>\n {message.content}\n </CallOutResponse>\n )}\n {actions && streamingMessageId !== message.id &&\n <CallOutActions\n key={message.id}\n actions={actions}\n message={message}\n role={message.role as \"user\" | \"assistant\"}\n />\n }\n </CallOut>\n </div>\n ))}\n <div ref={messagesEndRef} />\n </div>\n );\n }\n);\nAssistantMessageArea.displayName = \"AssistantMessageArea\";\n\ninterface AssistantInputProps\n extends React.FormHTMLAttributes<HTMLFormElement> {\n sendMessageFunc: (event: React.FormEvent<HTMLFormElement>) => Promise<void>;\n isButtonDisabled: boolean;\n input: string;\n handleInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n isMessageStreaming: boolean;\n}\n\nconst AssistantInput = React.forwardRef<HTMLFormElement, AssistantInputProps>(\n (\n {\n className,\n sendMessageFunc,\n isButtonDisabled,\n input,\n handleInputChange,\n isMessageStreaming,\n ...props\n },\n ref\n ) => {\n return (\n <form\n onSubmit={sendMessageFunc}\n className={`flex items-center space-x-4 ${className}`}\n ref={ref}\n {...props}\n >\n <input\n type=\"text\"\n disabled={isButtonDisabled}\n value={input}\n onChange={handleInputChange}\n placeholder={\n isMessageStreaming ? \"Procesando...\" : \"Escribe tu mensaje aquí...\"\n }\n className=\"flex-1 text-sm p-3 rounded-lg focus:outline-none w-full border\"\n />\n <button\n type=\"submit\"\n disabled={isButtonDisabled}\n className={`w-10 h-10 ${isButtonDisabled ? \"bg-gray-500\" : \"bg-black\"} rounded-full flex items-center justify-center alq--assistant-button-send`}\n >\n <Send className=\"text-white w-5 h-5\" />\n </button>\n </form>\n );\n }\n);\nAssistantInput.displayName = \"AssistantInput\";\n\nexport {\n Assistant,\n AssistantTitle,\n AssistantDescription,\n AssistantHeader,\n AssistantMessageArea,\n AssistantInput,\n};\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface PageContainerProps extends React.HTMLAttributes<HTMLDivElement> {}\nconst PageContainer = forwardRef<HTMLDivElement, PageContainerProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(className, \"alq--page-container\")}\n {...props}\n />\n );\n }\n);\nPageContainer.displayName = \"PageContainer\";\nexport { PageContainer };\n","\"use client\";\n\nimport * as React from \"react\";\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/atoms/ui/button\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nconst Carousel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselProps\n>(\n (\n {\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n }\n);\nCarousel.displayName = \"Carousel\";\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n );\n});\nCarouselContent.displayName = \"CarouselContent\";\n\nconst CarouselItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n );\n});\nCarouselItem.displayName = \"CarouselItem\";\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button>\n>(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-left-12 top-1/2 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n});\nCarouselPrevious.displayName = \"CarouselPrevious\";\n\nconst CarouselNext = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button>\n>(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-right-12 top-1/2 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n});\nCarouselNext.displayName = \"CarouselNext\";\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n","import * as React from \"react\";\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\";\nimport { cva } from \"class-variance-authority\";\nimport { ChevronDown } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst NavigationMenu = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Root\n ref={ref}\n className={cn(\n \"relative z-10 flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n <NavigationMenuViewport />\n </NavigationMenuPrimitive.Root>\n));\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;\n\nconst NavigationMenuList = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.List\n ref={ref}\n className={cn(\n \"group flex flex-1 list-none items-center justify-center space-x-1\",\n className\n )}\n {...props}\n />\n));\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;\n\nconst NavigationMenuItem = NavigationMenuPrimitive.Item;\n\nconst navigationMenuTriggerStyle = cva(\n \"group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50\"\n);\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDown\n className=\"relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n));\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;\n\nconst NavigationMenuContent = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto \",\n className\n )}\n {...props}\n />\n));\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;\n\nconst NavigationMenuLink = NavigationMenuPrimitive.Link;\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <div className={cn(\"absolute left-0 top-full flex justify-center\")}>\n <NavigationMenuPrimitive.Viewport\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n));\nNavigationMenuViewport.displayName =\n NavigationMenuPrimitive.Viewport.displayName;\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Indicator\n ref={ref}\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n));\nNavigationMenuIndicator.displayName =\n NavigationMenuPrimitive.Indicator.displayName;\n\nexport {\n navigationMenuTriggerStyle,\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n};\n","import * as React from \"react\";\nimport { LucideIcon } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\nimport { ScrollArea, Button } from \"../atoms\";\n\nconst sidebarVariants = cva(\n \"flex flex-col border-r\",\n {\n variants: {\n size: {\n sm: \"w-48\",\n default: \"w-64\",\n lg: \"w-72\"\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\nexport interface SidebarItem {\n name: string;\n icon?: LucideIcon;\n disabled?: boolean;\n isLink?: boolean;\n link?: string;\n}\n\ntype SidebarBaseProps = {\n items: SidebarItem[];\n selectedSection?: SidebarItem;\n onSelect?: (item: SidebarItem) => void;\n footerContent?: React.ReactNode;\n selectedVariant?: \"default\" | \"secondary\" | \"ghost\" | \"link\";\n defaultVariant?: \"default\" | \"secondary\" | \"ghost\" | \"link\";\n buttonClassName?: string;\n}\n\nexport interface SidebarProps \n extends SidebarBaseProps,\n Omit<React.HTMLAttributes<HTMLDivElement>, keyof SidebarBaseProps>,\n VariantProps<typeof sidebarVariants> {}\n\nexport const SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"p-4\", className)}\n {...props}\n >\n {children}\n </div>\n));\nSidebarFooter.displayName = \"SidebarFooter\";\n\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(\n ({ \n className, \n items, \n selectedSection, \n onSelect, \n footerContent,\n size = \"default\",\n selectedVariant = \"secondary\",\n defaultVariant = \"ghost\",\n buttonClassName,\n ...props \n }, ref) => {\n return (\n <div className={cn(className, \"alq--navigation-sidebar h-full\")} ref={ref} {...props}>\n <aside className={cn(sidebarVariants({ size }), \"h-full\")}>\n <ScrollArea className=\"flex-grow justify-between\">\n <div className=\"flex flex-col gap-2 p-4\">\n {items.map((item) => (\n <Button\n key={item.name}\n variant={selectedSection?.name === item.name ? selectedVariant : defaultVariant}\n className={cn(\"justify-start\", buttonClassName)}\n disabled={item.disabled}\n onClick={() => {\n if (onSelect) {\n onSelect(item);\n }\n }}\n >\n {item.icon && <item.icon className=\"mr-2 h-4 w-4\" />}\n {item.name}\n </Button>\n ))}\n </div>\n </ScrollArea>\n {footerContent && (\n <SidebarFooter>\n {footerContent}\n </SidebarFooter>\n )}\n </aside>\n </div>\n );\n }\n);","\"use client\";\nimport * as React from \"react\";\nimport { useTheme } from \"next-themes\";\nimport { Toaster as Sonner } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\nexport { Toaster as SonnerToaster };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\nimport { Star } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../atoms\";\n\nconst TooltipProvider = TooltipPrimitive.Provider\nconst Tooltip = TooltipPrimitive.Root\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground shadow-lg 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\",\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\ninterface StarColors {\n fill: string\n stroke: string\n}\n\ninterface RatingStarsProps {\n currentRating: number\n isLoading: boolean\n onRate: (rating: number) => void\n className?: string\n}\n\nconst StarRating = React.forwardRef<\n HTMLDivElement,\n { rating: number; onRate: (r: number) => void }\n>(({ rating, onRate }, ref) => (\n <div ref={ref} className=\"flex\">\n {[1, 2, 3, 4, 5].map((star) => (\n <Button\n key={star}\n onClick={() => onRate(star)}\n variant=\"link\"\n className=\"p-1 transition-colors [&_svg]:size-5 h-5\"\n aria-label={`Rate ${star} star${star !== 1 ? \"s\" : \"\"}`}\n >\n <Star\n className={cn(\n \"w-5 h-5\",\n star <= rating ? \"alq-rating-star-active fill-current stroke-current\" : \"alq-rating-star-inactive\",\n )}\n />\n </Button>\n ))}\n </div>\n));\nStarRating.displayName = \"StarRating\"\n\nexport const RatingStars = React.forwardRef<\n HTMLButtonElement,\n RatingStarsProps\n>(({\n currentRating = 0,\n onRate,\n className,\n isLoading\n}, ref) => {\n const [open, setOpen] = React.useState(false)\n const [animate, setAnimate] = React.useState(false)\n\n const handleRate = (rating: number) => {\n onRate(rating)\n setOpen(false)\n }\n\n React.useEffect(() => {\n if (currentRating > 0) {\n setAnimate(true)\n const timer = setTimeout(() => setAnimate(false), 150)\n return () => clearTimeout(timer)\n }\n }, [currentRating])\n\n const hasRated = currentRating > 0\n\n return (\n <TooltipProvider>\n <Tooltip open={open} onOpenChange={setOpen}>\n <TooltipTrigger asChild>\n <Button\n ref={ref}\n variant=\"link\"\n className={cn(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium [&_svg]:size-5 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n disabled={isLoading}\n onClick={() => setOpen(!open)}\n >\n <Star \n className={cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && \"animate-ping\",\n isLoading && \"animate-pulse\",\n hasRated ? \"alq-rating-star-active fill-current stroke-current\" : \"alq-rating-star-inactive\",\n )}\n />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\" align=\"center\" className=\"p-0\">\n <div className=\"p-2 bg-background\">\n <StarRating \n rating={currentRating} \n onRate={handleRate}\n />\n </div>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n})\nRatingStars.displayName = \"RatingStars\"\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport { ThumbsUp, ThumbsDown } from \"lucide-react\"\nimport { Button } from \"../atoms\";\nimport { cn } from \"../../lib/utils\";\n\ninterface RatingThumbsProps {\n currentRating: string\n isLoading: boolean\n onRate: (rating: \"thumbsUp\" | \"thumbsDown\" | \"\") => void\n direction?: \"row\" | \"column\"\n className?: string\n}\n\nexport const RatingThumbs = React.forwardRef<HTMLDivElement, RatingThumbsProps>(\n (\n {\n currentRating,\n onRate,\n direction = \"row\",\n className,\n isLoading\n },\n ref\n ) => {\n const [animate, setAnimate] = React.useState(false);\n\n React.useEffect(() => {\n if (currentRating) {\n setAnimate(true);\n const timer = setTimeout(() => setAnimate(false), 150);\n return () => clearTimeout(timer);\n }\n }, [currentRating]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"inline-flex\",\n direction === \"column\" ? \"flex-col\" : \"flex-row\",\n \"space-x-1 gap-4\",\n className\n )}\n >\n <Button\n variant=\"link\"\n onClick={() => onRate(currentRating === \"thumbsUp\" ? \"\" : \"thumbsUp\")}\n className={cn(\n \"p-1 transition-colors disabled:opacity-50 [&_svg]:size-5\",\n `hover:alq-rating-thumbsup/10`\n )}\n aria-label=\"Thumbs up\"\n disabled={isLoading}\n >\n <ThumbsUp\n className={cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && currentRating === \"thumbsUp\" && \"animate-ping\",\n isLoading && \"animate-pulse\",\n currentRating === \"thumbsUp\" ? \"alq-rating-thumbsup fill-current stroke-current\" : \"alq-rating-thumbs-inactive fill-transparent\"\n )}\n />\n </Button>\n <Button\n variant=\"link\"\n onClick={() => onRate(currentRating === \"thumbsDown\" ? \"\" : \"thumbsDown\")}\n className={cn(\n \"p-1 transition-colors disabled:opacity-50 mt-0.5 [&_svg]:size-5\",\n `hover:bg-alq-rating-thumbsdown/10`\n )}\n aria-label=\"Thumbs down\"\n disabled={isLoading}\n >\n <ThumbsDown\n className={cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && currentRating === \"thumbsDown\" && \"animate-ping\",\n isLoading && \"animate-pulse\",\n currentRating === \"thumbsDown\" ? \"alq-rating-thumbsdown fill-current stroke-current\" : \"alq-rating-thumbs-inactive fill-transparent\"\n )}\n />\n </Button>\n </div>\n );\n }\n);\n\nRatingThumbs.displayName = \"RatingThumbs\"","\"use client\"\n\nimport * as React from \"react\"\nimport { Book } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../atoms\"\nimport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogOverlay,\n DialogTitle,\n} from \"../atoms/ui/dialog\";\n\ninterface RatingCommentProps {\n currentRating: string\n onRate: (comment: string) => void\n className?: string\n isLoading?: boolean\n}\n\nexport const RatingComment = React.forwardRef<HTMLButtonElement, RatingCommentProps>(\n ({ currentRating, onRate, className, isLoading }, ref) => {\n const [open, setOpen] = React.useState(false)\n const [comment, setComment] = React.useState(\"\")\n const [animate, setAnimate] = React.useState(false);\n\n const handleRate = () => {\n onRate(comment)\n setOpen(false)\n }\n\n React.useEffect(() => {\n if (currentRating) {\n setAnimate(true);\n const timer = setTimeout(() => setAnimate(false), 150);\n return () => clearTimeout(timer);\n }\n }, [currentRating]);\n\n React.useEffect(() => {\n setComment(\"\")\n }, [open])\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>\n <Button\n ref={ref}\n variant=\"link\"\n size={\"lg\"}\n className={cn(\n \"inline-flex p-2 items-center justify-center rounded-md text-sm font-medium transition-colors [&_svg]:size-5 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring bg-transparent hover:none disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n disabled={isLoading}\n >\n <Book\n className={cn(\n \"w-5 h-5 transition-all duration-500\",\n animate && \"animate-ping\",\n isLoading && \"animate-pulse\",\n `${comment ? \"alq-rating-comment\" : \"stroke-gray-400\"}`\n )}\n />\n </Button>\n </DialogTrigger>\n <DialogOverlay className=\"fixed inset-0 bg-black bg-opacity-50\" />\n <DialogContent aria-describedby={undefined}>\n <DialogTitle className=\"text-lg font-medium\">\n Deja un comentario\n </DialogTitle>\n <textarea\n className=\"mt-4 w-full p-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-primary\"\n rows={4}\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n />\n <div className=\"mt-4 flex justify-end\">\n <Button\n onClick={handleRate}\n disabled={!comment}\n >\n Enviar\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n }\n)\n\nRatingComment.displayName = \"RatingComment\"\n","import React, { useState } from 'react';\nimport {\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectLabel,\n SelectGroup,\n SelectValue,\n} from \"../../atoms\";\nimport { AlquimiaDocument } from '../../../types/type';\nimport { ExternalLink } from \"lucide-react\";\nimport { DocumentViewer } from './document-viewer';\nimport { ActionResponse } from '@alquimia-ai/tools/types';\n\ntype DocumentSelectorProps = {\n documents: AlquimiaDocument[];\n getDocument: (id: string) => Promise<ActionResponse<Blob>>\n logInfoMessage: (info: string, data: any) => void\n}\nexport const DocumentSelector = ({ documents, getDocument, logInfoMessage }: DocumentSelectorProps) =>{\n const [selectedDocName, setSelectedDocName] = useState<string | undefined>(undefined);\n const [selectedDoc, setSelectedDoc] = useState<string | null>(null);\n const [isModalOpen, setIsModalOpen] = useState<boolean>(false);\n\n\n const handleDocumentClick = (doc: any, event: React.MouseEvent) => {\n event.stopPropagation();\n setSelectedDoc(doc);\n logInfoMessage(\"Selected document\", {\n documentId: doc.id,\n documentName: doc.name,\n });\n setIsModalOpen(true);\n };\n\n const handleDrawerClose = () => {\n setIsModalOpen(false)\n }\n\n return (\n <div className=\"w-full md:w-4/6 alq--document-selector\">\n <Select value={selectedDocName} onValueChange={setSelectedDocName}>\n <SelectTrigger aria-label=\"Documentos\">\n <SelectValue placeholder=\"Documentos\" />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n <SelectLabel>Documents</SelectLabel>\n {documents.map((doc) => (\n <div key={doc.id} className=\"w-full flex relative\">\n <SelectItem className=\"w-full\" key={doc.id} value={doc.id}>\n <div className=\"flex justify-between w-full\">\n <p className=\"h-4 truncate mr-5\">{doc.name}</p>\n </div>\n </SelectItem>\n <div\n onClick={(event) => handleDocumentClick(doc, event)}\n className=\"bflex items-center text-gray-400 hover:text-gray-500 absolute right-0 mt-2\"\n aria-label={`Open ${doc.name}`}\n >\n <ExternalLink className=\"h-4 w-4 mx-2\" />\n </div>\n </div>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n {selectedDoc && (\n <DocumentViewer\n doc={selectedDoc}\n docName={selectedDocName || ''}\n isOpen={isModalOpen}\n onClose={handleDrawerClose}\n getDocument={getDocument}\n />\n )}\n </div>\n );\n}\n","'use client'\n\nimport React, { useEffect } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n Loader\n} from \"../../atoms\";\nimport { useDocumentReader } from '../../hooks/use-document';\nimport dynamic from 'next/dynamic';\nimport { ActionResponse } from '@alquimia-ai/tools/types';\nconst PdfViewer = dynamic(() => import(\"../viewers/pdf-viewer\"), { ssr: false });\nconst PlainTextViewer = dynamic(() => import(\"../viewers/plain-text-viewer\"), { ssr: false });\n\ntype DocumentViewerProps = {\n docId?: string;\n doc: any;\n docName: string;\n isOpen: boolean;\n onClose: () => void;\n getDocument: (id: string) => Promise<ActionResponse<Blob>>;\n};\n\nexport const DocumentViewer = ({\n docId,\n doc,\n isOpen,\n onClose,\n getDocument,\n}: DocumentViewerProps) => {\n const { document, loading, fetchDocument, resetDocument, error } =\n useDocumentReader(doc.id, getDocument);\n\n useEffect(() => {\n resetDocument();\n\n if (isOpen) {\n fetchDocument();\n }\n }, [isOpen]);\n\n const documentRender = document && !error ? (\n <DocumentFactory document={document} docId={doc.id} />\n ) : (\n <div className=\"flex flex-col items-center justify-center h-full w-full text-center p-4\">\n <div className=\"text-primary font-medium\">{error}</div>\n </div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent\n aria-describedby={document ? \"document-description\" : undefined}\n className=\"h-[90%] max-w-[90%] gap-0 flex flex-col focus:outline-none\"\n >\n <DialogHeader className=\"border-b border-border pb-2\">\n <DialogTitle>{doc.name}</DialogTitle>\n </DialogHeader>\n {!document && loading ? (\n <Loader size=\"xl\" colorVariant=\"destructive\" />\n ) : (\n documentRender\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\ntype DocViewerFactoryProps = {\n document: Blob | null;\n docId: string;\n};\n\nconst DocumentFactory: React.FC<DocViewerFactoryProps> = ({ document, docId }) => {\n switch (document && document.type) {\n case 'application/pdf':\n return <PdfViewer doc={document} docId={docId} />;\n case 'text/plain':\n return <PlainTextViewer doc={document} docId={docId} />;\n default:\n return <div>Unsupported file type</div>;\n }\n};\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { ApiError } from \"../../types/type\";\nimport { ActionResponse } from \"@alquimia-ai/tools/types\";\n\nexport const useDocumentReader = (\n url: string,\n getDocument: (id: string) => Promise<ActionResponse<Blob>>,\n) => {\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n const [document, setDocument] = useState<Blob | null>(null);\n\n const handleDocumentError = (error: ApiError) => {\n const errorMessage = \"Hubo un error al obtener el documento. Por favor ponganse en contacto con el administrador.\";\n setError(errorMessage);\n throw new Error(error?.message || 'Unknown error');\n };\n\n const resetDocument = () => {\n setDocument(null);\n };\n\n const fetchDocument = async () => {\n setLoading(true);\n setError(null);\n \n try {\n const res = await getDocument(url);\n if (!res.success) {\n handleDocumentError(res.error as ApiError || new Error('Unknown error'));\n setLoading(false);\n return;\n }\n res.data && setDocument(res.data);\n } catch (error) {\n handleDocumentError(error as ApiError);\n } finally {\n setLoading(false);\n }\n };\n\n return { document, loading, fetchDocument, resetDocument, error };\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { RichText } from \"../atoms\";\nimport { Message } from \"ai\";\n\nexport interface CallOutMessage {\n id: string;\n role: \"user\" | \"assistant\";\n content: string;\n timestamp: Date;\n}\n\ninterface CallOutActionProps {\n label: string;\n icon: React.ReactNode;\n onClick: (message?: Message) => Promise<void>;\n}\n\nexport interface CallOutProps extends React.HTMLAttributes<HTMLDivElement> {\n message?: Message;\n}\n\nconst CallOut = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CallOutProps\n>(({ className, children, role, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"alq--callout-box\", className)}\n data-role={role}\n {...props}\n >\n {children}\n </div>\n );\n});\n\nconst CallOutDate = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"alq--callout-date\", className)} {...props}>\n {children}\n </div>\n );\n});\n\nconst CallOutActions = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n actions: CallOutActionProps[];\n role: \"user\" | \"assistant\";\n message?: Message;\n }\n>(({ className, actions, role, message, ...props }, ref) => {\n const [isLoading, setIsLoading] = React.useState(false);\n const [isClicked, setIsClicked] = React.useState(false);\n\n if (role === \"user\") {\n return null;\n }\n\n return (\n <div ref={ref} className={cn(\"alq--callout-actions\", className)} {...props}>\n {actions.map((action) => (\n <button\n key={action.label}\n className={cn(\n \"alq--callout-action\",\n {\n \"alq--callout-animate-action\": isLoading,\n },\n {\n \"alq--callout-clicked-action\": isClicked,\n }\n )}\n type=\"button\"\n title={action.label}\n onClick={() => {\n setIsLoading(true);\n action.onClick(message).then(() => {\n setIsLoading(false);\n setIsClicked(true);\n });\n }}\n >\n <span\n className={cn(\"alq-action-icon-wrapper\", {\n \"alq--callout-animate-action\": isLoading,\n })}\n >\n {action.icon}\n </span>\n <label>{action.label}</label>\n </button>\n ))}\n </div>\n );\n});\n\nconst CallOutResponse = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { role: Message[\"role\"], additionalInfo?: string }\n>(({ className, children, role, additionalInfo, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-role={role}\n className={cn(\"alq--callout-response\", className)}\n {...props}\n >\n <RichText content={children as string} />\n {additionalInfo && (\n <div className=\"alq--callout-response-additional-info\">\n {additionalInfo}\n </div>\n )}\n </div>\n );\n});\n\nCallOut.displayName = \"CallOut\";\nCallOutDate.displayName = \"CallOutDate\";\nCallOutActions.displayName = \"CallOutActions\";\nCallOutResponse.displayName = \"CallOutResponse\";\nexport { CallOut, CallOutDate, CallOutResponse, CallOutActions };\n","\"use client\";\n\nimport { Message } from \"ai\";\n\nimport { RatingData } from \"@alquimia-ai/tools/types\";\nimport { useRatings } from \"@alquimia-ai/tools/hooks\";\nimport { useToast } from \"../hooks\";\nimport { RatingThumbs, RatingStars, RatingComment } from \"../molecules\";\nimport {\n Dialog,\n DialogDescription,\n DialogTitle,\n DialogContent,\n DialogHeader,\n Typography,\n Button,\n ToastAction,\n} from \"../atoms\";\n\ninterface RatingDialogProps {\n topicId: string;\n assistantId: string;\n sendRating: (ratingData: RatingData) => Promise<any>;\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n setHasRatedTopic: (hasRated: boolean) => void;\n onError?: (componentName: string, error: Error) => void;\n}\n\nexport function RatingDialog({\n sendRating,\n topicId,\n assistantId,\n isOpen,\n onOpenChange,\n setHasRatedTopic,\n}: RatingDialogProps) {\n const { toast } = useToast();\n const { handleRate, ratingStars, ratingThumbs, ratingComment, isLoading } =\n useRatings({ assistantId, sendRating, topicId });\n\n const onHandleRateSuccess = (success: boolean, err?: string) => {\n setTimeout(() => onOpenChange(false), 1000);\n success\n ? setHasRatedTopic(true)\n : toast({\n title: \"Error\",\n description: `Hubo un error al enviar la calificación`,\n action: (\n <ToastAction altText=\"Goto schedule to undo\">Cerrar</ToastAction>\n ),\n });\n };\n\n const handleCancelRate = () => {\n setHasRatedTopic(true);\n onOpenChange(false);\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Calificá esta conversación</DialogTitle>\n <DialogDescription>\n Por favor, compartí tu opinión sobre el asistente.\n </DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-row justify-center gap-4 py-4\">\n <RatingStars\n currentRating={ratingStars}\n onRate={(newRating) =>\n handleRate(\"score\", newRating, onHandleRateSuccess)\n }\n isLoading={isLoading}\n className=\"p-2 rounded\"\n />\n <RatingThumbs\n currentRating={ratingComment}\n onRate={(newRating) =>\n handleRate(\"description\", newRating, onHandleRateSuccess)\n }\n direction=\"row\"\n isLoading={isLoading}\n />\n <RatingComment\n currentRating={ratingComment}\n onRate={(newRating) =>\n handleRate(\"description\", newRating, onHandleRateSuccess)\n }\n isLoading={isLoading}\n />\n </div>\n <div className=\"flex flex-row justify-center gap-4\">\n <Button onClick={handleCancelRate} variant=\"secondary\">\n <Typography as=\"p\" typeStyle=\"tiny\">\n No, gracias.\n </Typography>\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","export type AlquimiaDocument = {\n id: string;\n name: string;\n description?: string;\n isActive: boolean;\n contentType: string;\n url: string;\n updatedAt?: string;\n};\n\nexport type AlquimiaTopic = {\n id: string;\n externalCollectionId: string;\n isActive: boolean;\n name: string;\n description: string;\n createdAt?: string;\n updatedAt?: string;\n files: AlquimiaDocument[];\n ratings?: TopicRating[];\n};\n\nexport type TopicRating = {\n id: number;\n sessionId: string;\n}\n\nexport type AlquimiaFile = {\n id: string;\n file: Blob;\n}\n\nexport enum EditingStatus {\n EDITING = 'EDITING',\n FINISHED = 'FINISHED',\n}\n\nexport interface RatingData {\n assistantId: string;\n sessionId: string;\n topicId: number;\n score?: number;\n emoji?: string;\n description?: string;\n};\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n error?: ActionError;\n}\n\nexport type ActionError = {\n message: string;\n code?: string;\n details?: ErrorDetails;\n}\n\nexport type ErrorDetails = {\n status: string;\n statusText?: string;\n}\n\nexport type ApiError = Error & {\n message: string;\n name: string;\n cause: string;\n code?: string | number;\n status?: string | number;\n}\n\nexport interface TWYDServerActions {\n getDocument?: (id: string) => Promise<ActionResponse<Blob>>;\n sendRating?: (ratingData: RatingData) => Promise<any>;\n logError?: (message: string, error: Error, data?: Record<string, any>) => Promise<any>;\n}"]}
@@ -0,0 +1,177 @@
1
+ "use client";
2
+ function _array_like_to_array(arr, len) {
3
+ if (len == null || len > arr.length) len = arr.length;
4
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5
+ return arr2;
6
+ }
7
+ function _array_with_holes(arr) {
8
+ if (Array.isArray(arr)) return arr;
9
+ }
10
+ function _iterable_to_array_limit(arr, i) {
11
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
12
+ if (_i == null) return;
13
+ var _arr = [];
14
+ var _n = true;
15
+ var _d = false;
16
+ var _s, _e;
17
+ try {
18
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
19
+ _arr.push(_s.value);
20
+ if (i && _arr.length === i) break;
21
+ }
22
+ } catch (err) {
23
+ _d = true;
24
+ _e = err;
25
+ } finally{
26
+ try {
27
+ if (!_n && _i["return"] != null) _i["return"]();
28
+ } finally{
29
+ if (_d) throw _e;
30
+ }
31
+ }
32
+ return _arr;
33
+ }
34
+ function _non_iterable_rest() {
35
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
36
+ }
37
+ function _sliced_to_array(arr, i) {
38
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
39
+ }
40
+ function _unsupported_iterable_to_array(o, minLen) {
41
+ if (!o) return;
42
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
43
+ var n = Object.prototype.toString.call(o).slice(8, -1);
44
+ if (n === "Object" && o.constructor) n = o.constructor.name;
45
+ if (n === "Map" || n === "Set") return Array.from(n);
46
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
47
+ }
48
+ import { useResizeObserver } from "./chunk-HGMICDIH.mjs";
49
+ import { Button, Loader } from "./chunk-6EP6KTGV.mjs";
50
+ // src/components/molecules/viewers/pdf-viewer.tsx
51
+ import React, { useState, useCallback, useEffect } from "react";
52
+ import { ChevronLeft, ChevronRight, ZoomIn, ZoomOut } from "lucide-react";
53
+ import { pdfjs, Document, Page } from "react-pdf";
54
+ import "react-pdf/dist/esm/Page/AnnotationLayer.css";
55
+ import "react-pdf/dist/esm/Page/TextLayer.css";
56
+ pdfjs.GlobalWorkerOptions.workerSrc = "//unpkg.com/pdfjs-dist@".concat(pdfjs.version, "/build/pdf.worker.min.mjs");
57
+ var options = {
58
+ cMapUrl: "/cmaps/",
59
+ standardFontDataUrl: "/standard_fonts/",
60
+ cMapPacked: true
61
+ };
62
+ var resizeObserverOptions = {};
63
+ function PdfViewer(param) {
64
+ var doc = param.doc, docId = param.docId;
65
+ var _useState = _sliced_to_array(useState(0), 2), numPages = _useState[0], setNumPages = _useState[1];
66
+ var _useState1 = _sliced_to_array(useState(1), 2), pageNumber = _useState1[0], setPageNumber = _useState1[1];
67
+ var _useState2 = _sliced_to_array(useState(1), 2), scale = _useState2[0], setScale = _useState2[1];
68
+ var _useState3 = _sliced_to_array(useState(null), 2), containerRef = _useState3[0], setContainerRef = _useState3[1];
69
+ var _useState4 = _sliced_to_array(useState(), 2), containerWidth = _useState4[0], setContainerWidth = _useState4[1];
70
+ var onResize = useCallback(function(entries) {
71
+ var _entries = _sliced_to_array(entries, 1), entry = _entries[0];
72
+ if (entry) {
73
+ setContainerWidth(entry.contentRect.width);
74
+ }
75
+ }, []);
76
+ useResizeObserver(containerRef, resizeObserverOptions, onResize);
77
+ function onDocumentLoadSuccess(param) {
78
+ var nextNumPages = param.numPages;
79
+ setNumPages(nextNumPages);
80
+ }
81
+ var resetDocument = function() {
82
+ setPageNumber(1);
83
+ setScale(1);
84
+ };
85
+ useEffect(function() {
86
+ resetDocument();
87
+ }, []);
88
+ var handlePrevPage = function() {
89
+ return setPageNumber(function(prev) {
90
+ return Math.max(prev - 1, 1);
91
+ });
92
+ };
93
+ var handleNextPage = function() {
94
+ return setPageNumber(function(prev) {
95
+ return Math.min(prev + 1, numPages);
96
+ });
97
+ };
98
+ var handleZoomIn = function() {
99
+ return setScale(function(prev) {
100
+ return Math.min(prev + 0.1, 2);
101
+ });
102
+ };
103
+ var handleZoomOut = function() {
104
+ return setScale(function(prev) {
105
+ return Math.max(prev - 0.1, 0.5);
106
+ });
107
+ };
108
+ var handleKeyDown = useCallback(function(e) {
109
+ if (e.key === "ArrowLeft") {
110
+ handlePrevPage();
111
+ } else if (e.key === "ArrowRight") {
112
+ handleNextPage();
113
+ }
114
+ }, [
115
+ handlePrevPage,
116
+ handleNextPage
117
+ ]);
118
+ useEffect(function() {
119
+ window.addEventListener("keydown", handleKeyDown);
120
+ return function() {
121
+ return window.removeEventListener("keydown", handleKeyDown);
122
+ };
123
+ }, [
124
+ handleKeyDown
125
+ ]);
126
+ var handleDownloadFile = function() {
127
+ var docUrl = doc && URL.createObjectURL(doc);
128
+ var a = document.createElement("a");
129
+ a.href = docUrl || "";
130
+ a.download = docId;
131
+ a.click();
132
+ URL.revokeObjectURL(docUrl || "");
133
+ };
134
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", {
135
+ className: "flex justify-between items-center p-4 border-b border-border"
136
+ }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Button, {
137
+ onClick: handlePrevPage,
138
+ disabled: pageNumber <= 1
139
+ }, /* @__PURE__ */ React.createElement(ChevronLeft, {
140
+ className: "h-4 w-4"
141
+ })), /* @__PURE__ */ React.createElement("span", {
142
+ className: "mx-2"
143
+ }, "Page ", pageNumber, " of ", numPages), /* @__PURE__ */ React.createElement(Button, {
144
+ onClick: handleNextPage,
145
+ disabled: pageNumber >= numPages
146
+ }, /* @__PURE__ */ React.createElement(ChevronRight, {
147
+ className: "h-4 w-4"
148
+ }))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Button, {
149
+ onClick: handleZoomOut
150
+ }, /* @__PURE__ */ React.createElement(ZoomOut, {
151
+ className: "h-4 w-4"
152
+ })), /* @__PURE__ */ React.createElement("span", {
153
+ className: "mx-2"
154
+ }, (scale * 100).toFixed(0), "%"), /* @__PURE__ */ React.createElement(Button, {
155
+ onClick: handleZoomIn
156
+ }, /* @__PURE__ */ React.createElement(ZoomIn, {
157
+ className: "h-4 w-4"
158
+ })))), /* @__PURE__ */ React.createElement("div", {
159
+ ref: setContainerRef,
160
+ className: "overflow-auto"
161
+ }, /* @__PURE__ */ React.createElement(Document, {
162
+ file: doc,
163
+ onLoadSuccess: onDocumentLoadSuccess,
164
+ options: options,
165
+ loading: /* @__PURE__ */ React.createElement(Loader, {
166
+ size: "xl",
167
+ colorVariant: "destructive"
168
+ })
169
+ }, /* @__PURE__ */ React.createElement(Page, {
170
+ pageNumber: pageNumber,
171
+ scale: scale,
172
+ width: containerWidth,
173
+ className: "w-full"
174
+ }))));
175
+ }
176
+ export { PdfViewer as default };
177
+ //# sourceMappingURL=pdf-viewer-J3ENKRHZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/sdk-frontend/sdk-frontend/packages/ui/dist/pdf-viewer-J3ENKRHZ.mjs","../src/components/molecules/viewers/pdf-viewer.tsx"],"names":["useResizeObserver","Button","Loader","React","useState","useCallback","useEffect","ChevronLeft","ChevronRight","ZoomIn","ZoomOut","pdfjs","Document","Page","GlobalWorkerOptions","workerSrc","version","options","cMapUrl","standardFontDataUrl","cMapPacked","resizeObserverOptions","PdfViewer","doc","docId","numPages","setNumPages","pageNumber","setPageNumber","scale","setScale","containerRef","setContainerRef","containerWidth","setContainerWidth","onResize","entries","entry","contentRect","width","onDocumentLoadSuccess","nextNumPages","resetDocument","handlePrevPage","prev","Math","max","handleNextPage","min","handleZoomIn","handleZoomOut","handleKeyDown","e","key","window","addEventListener","removeEventListener","handleDownloadFile","docUrl","URL","createObjectURL","a","document","createElement","href","download","click","revokeObjectURL","Fragment","className","onClick","disabled","toFixed","ref","file","onLoadSuccess","loading","size","colorVariant","default"],"mappings":"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","sourcesContent":["\"use client\";\nimport {\n useResizeObserver\n} from \"./chunk-HGMICDIH.mjs\";\nimport {\n Button,\n Loader\n} from \"./chunk-6EP6KTGV.mjs\";\n\n// src/components/molecules/viewers/pdf-viewer.tsx\nimport React, { useState, useCallback, useEffect } from \"react\";\nimport { ChevronLeft, ChevronRight, ZoomIn, ZoomOut } from \"lucide-react\";\nimport { pdfjs, Document, Page } from \"react-pdf\";\nimport \"react-pdf/dist/esm/Page/AnnotationLayer.css\";\nimport \"react-pdf/dist/esm/Page/TextLayer.css\";\npdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\nvar options = {\n cMapUrl: \"/cmaps/\",\n standardFontDataUrl: \"/standard_fonts/\",\n cMapPacked: true\n};\nvar resizeObserverOptions = {};\nfunction PdfViewer({ doc, docId }) {\n const [numPages, setNumPages] = useState(0);\n const [pageNumber, setPageNumber] = useState(1);\n const [scale, setScale] = useState(1);\n const [containerRef, setContainerRef] = useState(null);\n const [containerWidth, setContainerWidth] = useState();\n const onResize = useCallback((entries) => {\n const [entry] = entries;\n if (entry) {\n setContainerWidth(entry.contentRect.width);\n }\n }, []);\n useResizeObserver(containerRef, resizeObserverOptions, onResize);\n function onDocumentLoadSuccess({ numPages: nextNumPages }) {\n setNumPages(nextNumPages);\n }\n const resetDocument = () => {\n setPageNumber(1);\n setScale(1);\n };\n useEffect(() => {\n resetDocument();\n }, []);\n const handlePrevPage = () => setPageNumber((prev) => Math.max(prev - 1, 1));\n const handleNextPage = () => setPageNumber((prev) => Math.min(prev + 1, numPages));\n const handleZoomIn = () => setScale((prev) => Math.min(prev + 0.1, 2));\n const handleZoomOut = () => setScale((prev) => Math.max(prev - 0.1, 0.5));\n const handleKeyDown = useCallback((e) => {\n if (e.key === \"ArrowLeft\") {\n handlePrevPage();\n } else if (e.key === \"ArrowRight\") {\n handleNextPage();\n }\n }, [handlePrevPage, handleNextPage]);\n useEffect(() => {\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [handleKeyDown]);\n const handleDownloadFile = () => {\n const docUrl = doc && URL.createObjectURL(doc);\n const a = document.createElement(\"a\");\n a.href = docUrl || \"\";\n a.download = docId;\n a.click();\n URL.revokeObjectURL(docUrl || \"\");\n };\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"div\", { className: \"flex justify-between items-center p-4 border-b border-border\" }, /* @__PURE__ */ React.createElement(\"div\", null, /* @__PURE__ */ React.createElement(\n Button,\n {\n onClick: handlePrevPage,\n disabled: pageNumber <= 1\n },\n /* @__PURE__ */ React.createElement(ChevronLeft, { className: \"h-4 w-4\" })\n ), /* @__PURE__ */ React.createElement(\"span\", { className: \"mx-2\" }, \"Page \", pageNumber, \" of \", numPages), /* @__PURE__ */ React.createElement(\n Button,\n {\n onClick: handleNextPage,\n disabled: pageNumber >= numPages\n },\n /* @__PURE__ */ React.createElement(ChevronRight, { className: \"h-4 w-4\" })\n )), /* @__PURE__ */ React.createElement(\"div\", null, /* @__PURE__ */ React.createElement(Button, { onClick: handleZoomOut }, /* @__PURE__ */ React.createElement(ZoomOut, { className: \"h-4 w-4\" })), /* @__PURE__ */ React.createElement(\"span\", { className: \"mx-2\" }, (scale * 100).toFixed(0), \"%\"), /* @__PURE__ */ React.createElement(Button, { onClick: handleZoomIn }, /* @__PURE__ */ React.createElement(ZoomIn, { className: \"h-4 w-4\" })))), /* @__PURE__ */ React.createElement(\"div\", { ref: setContainerRef, className: \"overflow-auto\" }, /* @__PURE__ */ React.createElement(\n Document,\n {\n file: doc,\n onLoadSuccess: onDocumentLoadSuccess,\n options,\n loading: /* @__PURE__ */ React.createElement(Loader, { size: \"xl\", colorVariant: \"destructive\" })\n },\n /* @__PURE__ */ React.createElement(\n Page,\n {\n pageNumber,\n scale,\n width: containerWidth,\n className: \"w-full\"\n }\n )\n )));\n}\nexport {\n PdfViewer as default\n};\n","'use client'\n\nimport React, { useState, useCallback, useEffect } from 'react'\nimport { Button, Loader } from '../../atoms';\nimport { ChevronLeft, ChevronRight, ZoomIn, ZoomOut, Download } from 'lucide-react'\nimport useResizeObserver from '../../hooks/use-resize-observer';\nimport { pdfjs, Document, Page } from 'react-pdf';\nimport 'react-pdf/dist/esm/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/esm/Page/TextLayer.css';\n\npdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n\nconst options = {\n cMapUrl: '/cmaps/',\n standardFontDataUrl: '/standard_fonts/',\n cMapPacked: true,\n};\n\nconst resizeObserverOptions = {};\n\ntype PdfViewerProps = {\n doc: Blob | null;\n loading?: boolean;\n docId: string;\n}\n\nexport default function PdfViewer({ doc, docId }: PdfViewerProps) {\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState<number>(1);\n const [scale, setScale] = useState<number>(1);\n const [containerRef, setContainerRef] = useState<HTMLElement | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>();\n\n const onResize = useCallback<ResizeObserverCallback>((entries) => {\n const [entry] = entries;\n if (entry) {\n setContainerWidth(entry.contentRect.width);\n }\n }, []);\n\n useResizeObserver(containerRef, resizeObserverOptions, onResize);\n\n function onDocumentLoadSuccess({ numPages: nextNumPages }: pdfjs.PDFDocumentProxy): void {\n setNumPages(nextNumPages);\n }\n\n const resetDocument = () => {\n setPageNumber(1);\n setScale(1);\n }\n\n useEffect(() => {\n resetDocument()\n }, []);\n\n\n const handlePrevPage = () => setPageNumber((prev) => Math.max(prev - 1, 1));\n const handleNextPage = () => setPageNumber((prev) => Math.min(prev + 1, numPages));\n const handleZoomIn = () => setScale((prev) => Math.min(prev + 0.1, 2));\n const handleZoomOut = () => setScale((prev) => Math.max(prev - 0.1, 0.5));\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'ArrowLeft') {\n handlePrevPage();\n } else if (e.key === 'ArrowRight') {\n handleNextPage();\n }\n }, [handlePrevPage, handleNextPage]);\n\n useEffect(() => {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown]);\n\n\n const handleDownloadFile = () => {\n const docUrl = doc && URL.createObjectURL(doc);\n const a = document.createElement('a');\n a.href = docUrl || '';\n a.download = docId;\n a.click();\n URL.revokeObjectURL(docUrl || '');\n };\n\n return (\n <>\n <div className=\"flex justify-between items-center p-4 border-b border-border\">\n <div>\n <Button \n onClick={handlePrevPage} \n disabled={pageNumber <= 1}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <span className=\"mx-2\">\n Page {pageNumber} of {numPages}\n </span>\n <Button \n onClick={handleNextPage} \n disabled={pageNumber >= numPages}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n {/* <div>\n <Button onClick={handleDownloadFile}>\n <Download className=\"h-4 w-4\" />\n </Button>\n </div> */}\n <div>\n <Button onClick={handleZoomOut}>\n <ZoomOut className=\"h-4 w-4\" />\n </Button>\n <span className=\"mx-2\">{(scale * 100).toFixed(0)}%</span>\n <Button onClick={handleZoomIn}>\n <ZoomIn className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n <div ref={setContainerRef} className=\"overflow-auto\">\n <Document\n file={doc}\n // file={`/docs/${docId}`}\n onLoadSuccess={onDocumentLoadSuccess}\n options={options}\n loading={<Loader size=\"xl\" colorVariant=\"destructive\" />}\n >\n <Page\n pageNumber={pageNumber}\n scale={scale}\n width={containerWidth}\n className=\"w-full\"\n />\n </Document>\n </div>\n </>\n );\n}\n"]}