@alquimia-ai/ui 1.9.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/components/atoms/index.d.mts +1 -1
  2. package/dist/components/atoms/index.d.ts +1 -1
  3. package/dist/components/atoms/index.js +1848 -1428
  4. package/dist/components/atoms/index.js.map +1 -1
  5. package/dist/components/atoms/index.mjs +1453 -1409
  6. package/dist/components/atoms/index.mjs.map +1 -1
  7. package/dist/components/hooks/index.d.mts +1 -0
  8. package/dist/components/hooks/index.d.ts +1 -0
  9. package/dist/components/hooks/index.js +572 -211
  10. package/dist/components/hooks/index.js.map +1 -1
  11. package/dist/components/hooks/index.mjs +505 -193
  12. package/dist/components/hooks/index.mjs.map +1 -1
  13. package/dist/components/molecules/documents/index.d.mts +1 -0
  14. package/dist/components/molecules/documents/index.d.ts +1 -0
  15. package/dist/components/molecules/documents/index.js +2366 -1884
  16. package/dist/components/molecules/documents/index.js.map +1 -1
  17. package/dist/components/molecules/documents/index.mjs +2207 -1764
  18. package/dist/components/molecules/documents/index.mjs.map +1 -1
  19. package/dist/components/molecules/index.js +2261 -2095
  20. package/dist/components/molecules/index.js.map +1 -1
  21. package/dist/components/molecules/index.mjs +2084 -2075
  22. package/dist/components/molecules/index.mjs.map +1 -1
  23. package/dist/components/molecules/viewers/index.js +1303 -1185
  24. package/dist/components/molecules/viewers/index.js.map +1 -1
  25. package/dist/components/molecules/viewers/index.mjs +1254 -1167
  26. package/dist/components/molecules/viewers/index.mjs.map +1 -1
  27. package/dist/components/organisms/index.d.mts +1 -0
  28. package/dist/components/organisms/index.d.ts +1 -0
  29. package/dist/components/organisms/index.js +3074 -2609
  30. package/dist/components/organisms/index.js.map +1 -1
  31. package/dist/components/organisms/index.mjs +2999 -2586
  32. package/dist/components/organisms/index.mjs.map +1 -1
  33. package/dist/components/templates/index.d.mts +25 -3
  34. package/dist/components/templates/index.d.ts +25 -3
  35. package/dist/components/templates/index.js +1490 -1300
  36. package/dist/components/templates/index.js.map +1 -1
  37. package/dist/components/templates/index.mjs +1413 -1281
  38. package/dist/components/templates/index.mjs.map +1 -1
  39. package/dist/index.d.mts +4 -3
  40. package/dist/index.d.ts +4 -3
  41. package/dist/index.js +3951 -2977
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +3368 -2950
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/lib/index.js +106 -54
  46. package/dist/lib/index.js.map +1 -1
  47. package/dist/lib/index.mjs +42 -43
  48. package/dist/lib/index.mjs.map +1 -1
  49. package/dist/providers/index.d.mts +17 -0
  50. package/dist/providers/index.d.ts +17 -0
  51. package/dist/providers/index.js +177 -0
  52. package/dist/providers/index.js.map +1 -0
  53. package/dist/providers/index.mjs +101 -0
  54. package/dist/providers/index.mjs.map +1 -0
  55. package/dist/styles.css +68 -0
  56. package/dist/styles.css.map +1 -0
  57. package/dist/styles.d.mts +2 -0
  58. package/dist/styles.d.ts +2 -0
  59. package/dist/tailwind.config.js +4 -10
  60. package/dist/types/index.d.mts +5 -5
  61. package/dist/types/index.d.ts +5 -5
  62. package/dist/types/index.js +52 -19
  63. package/dist/types/index.js.map +1 -1
  64. package/dist/types/index.mjs +6 -8
  65. package/dist/types/index.mjs.map +1 -1
  66. package/package.json +8 -7
  67. package/dist/components/index.d.mts +0 -23
  68. package/dist/components/index.d.ts +0 -23
  69. package/dist/components/index.js +0 -1734
  70. package/dist/components/index.js.map +0 -1
  71. package/dist/components/index.mjs +0 -1702
  72. package/dist/components/index.mjs.map +0 -1
  73. package/dist/components/templates/cards/index.d.mts +0 -26
  74. package/dist/components/templates/cards/index.d.ts +0 -26
  75. package/dist/components/templates/cards/index.js +0 -1536
  76. package/dist/components/templates/cards/index.js.map +0 -1
  77. package/dist/components/templates/cards/index.mjs +0 -1504
  78. package/dist/components/templates/cards/index.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/hooks/use-toast.ts","../../../src/components/hooks/use-document.tsx","../../../src/components/hooks/use-resize-observer.ts","../../../src/components/hooks/use-text-streaming.ts"],"sourcesContent":["\"use client\";\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type {\n ToastActionElement,\n ToastProps,\n} from \"../../components/atoms/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { ApiError, ActionResponse } from \"../../types/type\";\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 { useEffect, useRef } from 'react';\n\ntype ResizeObserverOptions = {\n box?: 'content-box' | 'border-box';\n};\n\ntype ResizeObserverCallback = (entries: ResizeObserverEntry[], observer: ResizeObserver) => void;\n\nexport default function useResizeObserver(\n element: Element | null,\n options: ResizeObserverOptions | undefined,\n observerCallback: ResizeObserverCallback\n): void {\n const observerRef = useRef<ResizeObserver | null>(null);\n\n useEffect(() => {\n if (!element) return;\n\n observerRef.current = new ResizeObserver(observerCallback);\n observerRef.current.observe(element, options);\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [element, options, observerCallback]);\n}\n","import { useState, useEffect, useRef, useCallback } from \"react\";\n\nconst CHAR_DELAY = 15;\nconst PUNCTUATION_DELAY = 300;\n\nexport function useTextStreaming(\n content: string,\n shouldStream: boolean,\n handleIsTextStreaming?: (isStreaming: boolean) => void\n) {\n const [displayedText, setDisplayedText] = useState(\"\");\n const contentRef = useRef(content);\n const indexRef = useRef(0);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n\n const hasStartedStreaming = useRef<boolean>(false);\n\n useEffect(() => {\n contentRef.current = content;\n if (hasStartedStreaming.current && !timerRef.current && indexRef.current < contentRef.current.length) {\n typeNext();\n }\n }, [content]);\n\n const typeNext = useCallback(() => {\n if (indexRef.current < contentRef.current.length) {\n const nextChar = contentRef.current.charAt(indexRef.current);\n setDisplayedText((prev) => prev + nextChar);\n indexRef.current++;\n\n const delay = /[.!?;:]/.test(nextChar) ? PUNCTUATION_DELAY : CHAR_DELAY;\n \n timerRef.current = setTimeout(() => {\n timerRef.current = null;\n typeNext();\n }, delay);\n } else {\n handleIsTextStreaming?.(false);\n }\n }, []);\n\n useEffect(() => {\n if (!shouldStream && !hasStartedStreaming.current) {\n setDisplayedText(contentRef.current);\n indexRef.current = contentRef.current.length;\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n handleIsTextStreaming?.(false);\n } else {\n if (indexRef.current < contentRef.current.length && !timerRef.current) {\n handleIsTextStreaming?.(true);\n hasStartedStreaming.current = true;\n typeNext();\n }\n }\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [shouldStream, typeNext]);\n\n return displayedText;\n}\n\n"],"mappings":"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","names":["toast","props","useState","error","useEffect","useState","useEffect","useRef"]}
1
+ {"version":3,"sources":["/home/runner/work/sdk-frontend/sdk-frontend/packages/ui/dist/components/hooks/index.mjs","../../../src/components/hooks/use-toast.ts","../../../src/components/hooks/use-document.tsx","../../../src/components/hooks/use-resize-observer.ts","../../../src/components/hooks/use-text-streaming.ts"],"names":["React","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","Number","MAX_SAFE_INTEGER","toString","toastTimeouts","Map","addToRemoveQueue","toastId","has","timeout","setTimeout","delete","dispatch","type","set","reducer","state","action","toasts","toast","slice","map","t","id","forEach","open","filter","listeners","memoryState","listener","props","update","dismiss","onOpenChange","useToast","useState","setState","useEffect","push","index","indexOf","splice","useDocumentReader","url","getDocument","loading","setLoading","error","setError","document","setDocument","handleDocumentError","errorMessage","Error","message","resetDocument","fetchDocument","res","success","data","useRef","useCallback","CHAR_DELAY","PUNCTUATION_DELAY","useTextStreaming","content","shouldStream","handleIsTextStreaming","displayedText","setDisplayedText","contentRef","indexRef","timerRef","hasStartedStreaming","current","length","typeNext","nextChar","charAt","prev","delay","test","clearTimeout"],"mappings":"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","sourcesContent":["// src/components/hooks/use-toast.ts\nimport * as React from \"react\";\nvar TOAST_LIMIT = 1;\nvar TOAST_REMOVE_DELAY = 1e6;\nvar count = 0;\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\nvar toastTimeouts = /* @__PURE__ */ new Map();\nvar addToRemoveQueue = (toastId) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId\n });\n }, TOAST_REMOVE_DELAY);\n toastTimeouts.set(toastId, timeout);\n};\nvar reducer = (state, action) => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT)\n };\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map(\n (t) => t.id === action.toast.id ? { ...t, ...action.toast } : t\n )\n };\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast2) => {\n addToRemoveQueue(toast2.id);\n });\n }\n return {\n ...state,\n toasts: state.toasts.map(\n (t) => t.id === toastId || toastId === void 0 ? {\n ...t,\n open: false\n } : t\n )\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === void 0) {\n return {\n ...state,\n toasts: []\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId)\n };\n }\n};\nvar listeners = [];\nvar memoryState = { toasts: [] };\nfunction dispatch(action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\nfunction toast({ ...props }) {\n const id = genId();\n const update = (props2) => dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props2, id }\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n }\n }\n });\n return {\n id,\n dismiss,\n update\n };\n}\nfunction useToast() {\n const [state, setState] = React.useState(memoryState);\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n return {\n ...state,\n toast,\n dismiss: (toastId) => dispatch({ type: \"DISMISS_TOAST\", toastId })\n };\n}\n\n// src/components/hooks/use-document.tsx\nimport { useState as useState2 } from \"react\";\nvar useDocumentReader = (url, getDocument) => {\n const [loading, setLoading] = useState2(true);\n const [error, setError] = useState2(null);\n const [document, setDocument] = useState2(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/hooks/use-resize-observer.ts\nimport { useEffect as useEffect2, useRef } from \"react\";\n\n// src/components/hooks/use-text-streaming.ts\nimport { useState as useState3, useEffect as useEffect3, useRef as useRef2, useCallback } from \"react\";\nvar CHAR_DELAY = 15;\nvar PUNCTUATION_DELAY = 300;\nfunction useTextStreaming(content, shouldStream, handleIsTextStreaming) {\n const [displayedText, setDisplayedText] = useState3(\"\");\n const contentRef = useRef2(content);\n const indexRef = useRef2(0);\n const timerRef = useRef2(null);\n const hasStartedStreaming = useRef2(false);\n useEffect3(() => {\n contentRef.current = content;\n if (hasStartedStreaming.current && !timerRef.current && indexRef.current < contentRef.current.length) {\n typeNext();\n }\n }, [content]);\n const typeNext = useCallback(() => {\n if (indexRef.current < contentRef.current.length) {\n const nextChar = contentRef.current.charAt(indexRef.current);\n setDisplayedText((prev) => prev + nextChar);\n indexRef.current++;\n const delay = /[.!?;:]/.test(nextChar) ? PUNCTUATION_DELAY : CHAR_DELAY;\n timerRef.current = setTimeout(() => {\n timerRef.current = null;\n typeNext();\n }, delay);\n } else {\n handleIsTextStreaming?.(false);\n }\n }, []);\n useEffect3(() => {\n if (!shouldStream && !hasStartedStreaming.current) {\n setDisplayedText(contentRef.current);\n indexRef.current = contentRef.current.length;\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n handleIsTextStreaming?.(false);\n } else {\n if (indexRef.current < contentRef.current.length && !timerRef.current) {\n handleIsTextStreaming?.(true);\n hasStartedStreaming.current = true;\n typeNext();\n }\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [shouldStream, typeNext]);\n return displayedText;\n}\nexport {\n reducer,\n toast,\n useDocumentReader,\n useTextStreaming,\n useToast\n};\n","\"use client\";\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type {\n ToastActionElement,\n ToastProps,\n} from \"../../components/atoms/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { ApiError, ActionResponse } from \"../../types/type\";\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 { useEffect, useRef } from 'react';\n\ntype ResizeObserverOptions = {\n box?: 'content-box' | 'border-box';\n};\n\ntype ResizeObserverCallback = (entries: ResizeObserverEntry[], observer: ResizeObserver) => void;\n\nexport default function useResizeObserver(\n element: Element | null,\n options: ResizeObserverOptions | undefined,\n observerCallback: ResizeObserverCallback\n): void {\n const observerRef = useRef<ResizeObserver | null>(null);\n\n useEffect(() => {\n if (!element) return;\n\n observerRef.current = new ResizeObserver(observerCallback);\n observerRef.current.observe(element, options);\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [element, options, observerCallback]);\n}\n","import { useState, useEffect, useRef, useCallback } from \"react\";\n\nconst CHAR_DELAY = 15;\nconst PUNCTUATION_DELAY = 300;\n\nexport function useTextStreaming(\n content: string,\n shouldStream: boolean,\n handleIsTextStreaming?: (isStreaming: boolean) => void\n) {\n const [displayedText, setDisplayedText] = useState(\"\");\n const contentRef = useRef(content);\n const indexRef = useRef(0);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n\n const hasStartedStreaming = useRef<boolean>(false);\n\n useEffect(() => {\n contentRef.current = content;\n if (hasStartedStreaming.current && !timerRef.current && indexRef.current < contentRef.current.length) {\n typeNext();\n }\n }, [content]);\n\n const typeNext = useCallback(() => {\n if (indexRef.current < contentRef.current.length) {\n const nextChar = contentRef.current.charAt(indexRef.current);\n setDisplayedText((prev) => prev + nextChar);\n indexRef.current++;\n\n const delay = /[.!?;:]/.test(nextChar) ? PUNCTUATION_DELAY : CHAR_DELAY;\n \n timerRef.current = setTimeout(() => {\n timerRef.current = null;\n typeNext();\n }, delay);\n } else {\n handleIsTextStreaming?.(false);\n }\n }, []);\n\n useEffect(() => {\n if (!shouldStream && !hasStartedStreaming.current) {\n setDisplayedText(contentRef.current);\n indexRef.current = contentRef.current.length;\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n handleIsTextStreaming?.(false);\n } else {\n if (indexRef.current < contentRef.current.length && !timerRef.current) {\n handleIsTextStreaming?.(true);\n hasStartedStreaming.current = true;\n typeNext();\n }\n }\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [shouldStream, typeNext]);\n\n return displayedText;\n}\n\n"]}
@@ -1,5 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { AlquimiaDocument, ActionResponse } from '../../../types/index.mjs';
3
+ import '@alquimia-ai/tools/types';
3
4
 
4
5
  type DocumentSelectorProps = {
5
6
  documents: AlquimiaDocument[];
@@ -1,5 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { AlquimiaDocument, ActionResponse } from '../../../types/index.js';
3
+ import '@alquimia-ai/tools/types';
3
4
 
4
5
  type DocumentSelectorProps = {
5
6
  documents: AlquimiaDocument[];