@alquimia-ai/ui 1.9.3 → 2.2.1

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 (90) hide show
  1. package/dist/{alert-dialog-CP71C4vl.d.mts → alert-dialog-HrXEPlTh.d.mts} +1 -1
  2. package/dist/{alert-dialog-CP71C4vl.d.ts → alert-dialog-HrXEPlTh.d.ts} +1 -1
  3. package/dist/components/atoms/index.d.mts +48 -3
  4. package/dist/components/atoms/index.d.ts +48 -3
  5. package/dist/components/atoms/index.js +2086 -1427
  6. package/dist/components/atoms/index.js.map +1 -1
  7. package/dist/components/atoms/index.mjs +1658 -1408
  8. package/dist/components/atoms/index.mjs.map +1 -1
  9. package/dist/components/genui/index.d.mts +79 -0
  10. package/dist/components/genui/index.d.ts +79 -0
  11. package/dist/components/genui/index.js +4693 -0
  12. package/dist/components/genui/index.js.map +1 -0
  13. package/dist/components/genui/index.mjs +4622 -0
  14. package/dist/components/genui/index.mjs.map +1 -0
  15. package/dist/components/hooks/index.d.mts +2 -1
  16. package/dist/components/hooks/index.d.ts +2 -1
  17. package/dist/components/hooks/index.js +572 -211
  18. package/dist/components/hooks/index.js.map +1 -1
  19. package/dist/components/hooks/index.mjs +505 -193
  20. package/dist/components/hooks/index.mjs.map +1 -1
  21. package/dist/components/molecules/documents/index.d.mts +1 -0
  22. package/dist/components/molecules/documents/index.d.ts +1 -0
  23. package/dist/components/molecules/documents/index.js +2596 -1889
  24. package/dist/components/molecules/documents/index.js.map +1 -1
  25. package/dist/components/molecules/documents/index.mjs +2435 -1769
  26. package/dist/components/molecules/documents/index.mjs.map +1 -1
  27. package/dist/components/molecules/index.d.mts +2 -2
  28. package/dist/components/molecules/index.d.ts +2 -2
  29. package/dist/components/molecules/index.js +2464 -2119
  30. package/dist/components/molecules/index.js.map +1 -1
  31. package/dist/components/molecules/index.mjs +2283 -2095
  32. package/dist/components/molecules/index.mjs.map +1 -1
  33. package/dist/components/molecules/viewers/index.js +1485 -1188
  34. package/dist/components/molecules/viewers/index.js.map +1 -1
  35. package/dist/components/molecules/viewers/index.mjs +1436 -1170
  36. package/dist/components/molecules/viewers/index.mjs.map +1 -1
  37. package/dist/components/organisms/index.d.mts +16 -2
  38. package/dist/components/organisms/index.d.ts +16 -2
  39. package/dist/components/organisms/index.js +3289 -2637
  40. package/dist/components/organisms/index.js.map +1 -1
  41. package/dist/components/organisms/index.mjs +3210 -2610
  42. package/dist/components/organisms/index.mjs.map +1 -1
  43. package/dist/components/templates/index.d.mts +25 -3
  44. package/dist/components/templates/index.d.ts +25 -3
  45. package/dist/components/templates/index.js +1671 -1302
  46. package/dist/components/templates/index.js.map +1 -1
  47. package/dist/components/templates/index.mjs +1594 -1283
  48. package/dist/components/templates/index.mjs.map +1 -1
  49. package/dist/index.d.mts +11 -6
  50. package/dist/index.d.ts +11 -6
  51. package/dist/index.js +4233 -3012
  52. package/dist/index.js.map +1 -1
  53. package/dist/index.mjs +3619 -2987
  54. package/dist/index.mjs.map +1 -1
  55. package/dist/lib/index.js +106 -54
  56. package/dist/lib/index.js.map +1 -1
  57. package/dist/lib/index.mjs +42 -43
  58. package/dist/lib/index.mjs.map +1 -1
  59. package/dist/providers/index.d.mts +17 -0
  60. package/dist/providers/index.d.ts +17 -0
  61. package/dist/providers/index.js +177 -0
  62. package/dist/providers/index.js.map +1 -0
  63. package/dist/providers/index.mjs +101 -0
  64. package/dist/providers/index.mjs.map +1 -0
  65. package/dist/styles.css +68 -0
  66. package/dist/styles.css.map +1 -0
  67. package/dist/styles.d.mts +2 -0
  68. package/dist/styles.d.ts +2 -0
  69. package/dist/tailwind.config.js +4 -10
  70. package/dist/{toast-2xT7L1tJ.d.mts → toast-DEc6eGUE.d.mts} +1 -1
  71. package/dist/{toast-2xT7L1tJ.d.ts → toast-DEc6eGUE.d.ts} +1 -1
  72. package/dist/types/index.d.mts +5 -5
  73. package/dist/types/index.d.ts +5 -5
  74. package/dist/types/index.js +52 -19
  75. package/dist/types/index.js.map +1 -1
  76. package/dist/types/index.mjs +6 -8
  77. package/dist/types/index.mjs.map +1 -1
  78. package/package.json +29 -9
  79. package/dist/components/index.d.mts +0 -23
  80. package/dist/components/index.d.ts +0 -23
  81. package/dist/components/index.js +0 -1734
  82. package/dist/components/index.js.map +0 -1
  83. package/dist/components/index.mjs +0 -1702
  84. package/dist/components/index.mjs.map +0 -1
  85. package/dist/components/templates/cards/index.d.mts +0 -26
  86. package/dist/components/templates/cards/index.d.ts +0 -26
  87. package/dist/components/templates/cards/index.js +0 -1536
  88. package/dist/components/templates/cards/index.js.map +0 -1
  89. package/dist/components/templates/cards/index.mjs +0 -1504
  90. 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[];