@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.
- package/README.md +42 -0
- package/dist/chunk-6EP6KTGV.mjs +1529 -0
- package/dist/chunk-6EP6KTGV.mjs.map +1 -0
- package/dist/chunk-HGMICDIH.mjs +21 -0
- package/dist/chunk-HGMICDIH.mjs.map +1 -0
- package/dist/index.d.mts +653 -0
- package/dist/index.d.ts +653 -0
- package/dist/index.js +4344 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1663 -0
- package/dist/index.mjs.map +1 -0
- package/dist/pdf-viewer-J3ENKRHZ.mjs +177 -0
- package/dist/pdf-viewer-J3ENKRHZ.mjs.map +1 -0
- package/dist/plain-text-viewer-Q3O4LAOE.mjs +244 -0
- package/dist/plain-text-viewer-Q3O4LAOE.mjs.map +1 -0
- package/package.json +93 -0
|
@@ -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"]}
|