@alquimia-ai/ui 1.2.0 → 1.2.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/dist/components/hooks/index.js +1 -1
- package/dist/components/hooks/index.js.map +1 -1
- package/dist/components/hooks/index.mjs +1 -1
- package/dist/components/hooks/index.mjs.map +1 -1
- package/dist/components/molecules/index.d.mts +15 -2
- package/dist/components/molecules/index.d.ts +15 -2
- package/dist/components/molecules/index.js +837 -725
- package/dist/components/molecules/index.js.map +1 -1
- package/dist/components/molecules/index.mjs +819 -707
- package/dist/components/molecules/index.mjs.map +1 -1
- package/dist/components/organisms/index.js +260 -149
- package/dist/components/organisms/index.js.map +1 -1
- package/dist/components/organisms/index.mjs +258 -147
- package/dist/components/organisms/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +265 -153
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +263 -151
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -205,7 +205,7 @@ function useTextStreaming(content, shouldStream, handleIsTextStreaming) {
|
|
|
205
205
|
const hasStartedStreaming = (0, import_react3.useRef)(false);
|
|
206
206
|
const getDelayForChar = (text, position) => {
|
|
207
207
|
if (position === 0) return CHAR_DELAY;
|
|
208
|
-
const previousChar = text[position - 1];
|
|
208
|
+
const previousChar = text[position - 1] || "";
|
|
209
209
|
const isEllipsis = text.slice(position - 1, position + 2) === "...";
|
|
210
210
|
if (isEllipsis) {
|
|
211
211
|
return CHAR_DELAY;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/hooks/index.ts","../../../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":["export * from \"./use-toast\";\nexport * from \"./use-document\";\nexport * from \"./use-resize-observer\";\nexport * from \"./use-text-streaming\";\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 { useEffect, useRef, useState } from \"react\";\nconst CHAR_DELAY = 25;\nconst PUNCTUATION_DELAY = 200;\nconst PUNCTUATION_MARKS = [\".\", \"!\", \"?\", \";\", \":\"];\n\nfunction useTextStreaming(\n content: string,\n shouldStream: boolean,\n handleIsTextStreaming?: (isStreaming: boolean) => void\n) {\n const [displayedContent, setDisplayedContent] = useState<string>(\"\");\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n const hasStartedStreaming = useRef<boolean>(false);\n\n const getDelayForChar = (text: string, position: number): number => {\n if (position === 0) return CHAR_DELAY;\n\n const previousChar = text[position - 1];\n const isEllipsis = text.slice(position - 1, position + 2) === \"...\";\n\n if (isEllipsis) {\n return CHAR_DELAY;\n }\n\n return PUNCTUATION_MARKS.includes(previousChar)\n ? PUNCTUATION_DELAY\n : CHAR_DELAY;\n };\n\n useEffect(() => {\n if (!shouldStream && !hasStartedStreaming.current) {\n setDisplayedContent(content);\n handleIsTextStreaming?.(false);\n return;\n }\n\n handleIsTextStreaming?.(true);\n hasStartedStreaming.current = true;\n\n if (displayedContent.length < content.length) {\n const delay = getDelayForChar(content, displayedContent.length);\n timeoutId.current = setTimeout(() => {\n setDisplayedContent((prev) => prev + content[prev.length]);\n }, delay);\n } else {\n handleIsTextStreaming?.(false);\n }\n\n return () => {\n if (timeoutId.current) clearTimeout(timeoutId.current);\n };\n }, [\n content,\n displayedContent,\n shouldStream,\n getDelayForChar,\n handleIsTextStreaming,\n ]);\n\n return displayedContent;\n}\n\nexport { useTextStreaming };\n"],"mappings":"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","names":["toast","props","error","import_react","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/hooks/index.ts","../../../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":["export * from \"./use-toast\";\nexport * from \"./use-document\";\nexport * from \"./use-resize-observer\";\nexport * from \"./use-text-streaming\";\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 { useEffect, useRef, useState } from \"react\";\nconst CHAR_DELAY = 25;\nconst PUNCTUATION_DELAY = 200;\nconst PUNCTUATION_MARKS = [\".\", \"!\", \"?\", \";\", \":\"];\n\nfunction useTextStreaming(\n content: string,\n shouldStream: boolean,\n handleIsTextStreaming?: (isStreaming: boolean) => void\n) {\n const [displayedContent, setDisplayedContent] = useState<string>(\"\");\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n const hasStartedStreaming = useRef<boolean>(false);\n\n const getDelayForChar = (text: string, position: number): number => {\n if (position === 0) return CHAR_DELAY;\n\n const previousChar = text[position - 1] || '';\n const isEllipsis = text.slice(position - 1, position + 2) === \"...\";\n\n if (isEllipsis) {\n return CHAR_DELAY;\n }\n\n return PUNCTUATION_MARKS.includes(previousChar)\n ? PUNCTUATION_DELAY\n : CHAR_DELAY;\n };\n\n useEffect(() => {\n if (!shouldStream && !hasStartedStreaming.current) {\n setDisplayedContent(content);\n handleIsTextStreaming?.(false);\n return;\n }\n\n handleIsTextStreaming?.(true);\n hasStartedStreaming.current = true;\n\n if (displayedContent.length < content.length) {\n const delay = getDelayForChar(content, displayedContent.length);\n timeoutId.current = setTimeout(() => {\n setDisplayedContent((prev) => prev + content[prev.length]);\n }, delay);\n } else {\n handleIsTextStreaming?.(false);\n }\n\n return () => {\n if (timeoutId.current) clearTimeout(timeoutId.current);\n };\n }, [\n content,\n displayedContent,\n shouldStream,\n getDelayForChar,\n handleIsTextStreaming,\n ]);\n\n return displayedContent;\n}\n\nexport { useTextStreaming };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGA,YAAuB;AAOvB,IAAM,cAAc;AACpB,IAAM,qBAAqB;AAgB3B,IAAI,QAAQ;AAEZ,SAAS,QAAQ;AACf,WAAS,QAAQ,KAAK,OAAO;AAC7B,SAAO,MAAM,SAAS;AACxB;AA0BA,IAAM,gBAAgB,oBAAI,IAA2C;AAErE,IAAM,mBAAmB,CAAC,YAAoB;AAC5C,MAAI,cAAc,IAAI,OAAO,GAAG;AAC9B;AAAA,EACF;AAEA,QAAM,UAAU,WAAW,MAAM;AAC/B,kBAAc,OAAO,OAAO;AAC5B,aAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH,GAAG,kBAAkB;AAErB,gBAAc,IAAI,SAAS,OAAO;AACpC;AAEO,IAAM,UAAU,CAAC,OAAc,WAA0B;AAC9D,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,CAAC,OAAO,OAAO,GAAG,MAAM,MAAM,EAAE,MAAM,GAAG,WAAW;AAAA,MAC9D;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,MAAM,OAAO;AAAA,UAAI,CAAC,MACxB,EAAE,OAAO,OAAO,MAAM,KAAK,EAAE,GAAG,GAAG,GAAG,OAAO,MAAM,IAAI;AAAA,QACzD;AAAA,MACF;AAAA,IAEF,KAAK,iBAAiB;AACpB,YAAM,EAAE,QAAQ,IAAI;AAIpB,UAAI,SAAS;AACX,yBAAiB,OAAO;AAAA,MAC1B,OAAO;AACL,cAAM,OAAO,QAAQ,CAACA,WAAU;AAC9B,2BAAiBA,OAAM,EAAE;AAAA,QAC3B,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,MAAM,OAAO;AAAA,UAAI,CAAC,MACxB,EAAE,OAAO,WAAW,YAAY,SAC5B;AAAA,YACE,GAAG;AAAA,YACH,MAAM;AAAA,UACR,IACA;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK;AACH,UAAI,OAAO,YAAY,QAAW;AAChC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,MAAM,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,OAAO;AAAA,MAC5D;AAAA,EACJ;AACF;AAEA,IAAM,YAA2C,CAAC;AAElD,IAAI,cAAqB,EAAE,QAAQ,CAAC,EAAE;AAEtC,SAAS,SAAS,QAAgB;AAChC,gBAAc,QAAQ,aAAa,MAAM;AACzC,YAAU,QAAQ,CAAC,aAAa;AAC9B,aAAS,WAAW;AAAA,EACtB,CAAC;AACH;AAIA,SAAS,MAAM,EAAE,GAAG,MAAM,GAAU;AAClC,QAAM,KAAK,MAAM;AAEjB,QAAM,SAAS,CAACC,WACd,SAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO,EAAE,GAAGA,QAAO,GAAG;AAAA,EACxB,CAAC;AACH,QAAM,UAAU,MAAM,SAAS,EAAE,MAAM,iBAAiB,SAAS,GAAG,CAAC;AAErE,WAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,MAAM;AAAA,MACN,cAAc,CAAC,SAAS;AACtB,YAAI,CAAC,KAAM,SAAQ;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,WAAW;AAClB,QAAM,CAAC,OAAO,QAAQ,IAAU,eAAgB,WAAW;AAE3D,EAAM,gBAAU,MAAM;AACpB,cAAU,KAAK,QAAQ;AACvB,WAAO,MAAM;AACX,YAAM,QAAQ,UAAU,QAAQ,QAAQ;AACxC,UAAI,QAAQ,IAAI;AACd,kBAAU,OAAO,OAAO,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,SAAS,CAAC,YAAqB,SAAS,EAAE,MAAM,iBAAiB,QAAQ,CAAC;AAAA,EAC5E;AACF;;;AC7LA,mBAAyB;AAGlB,IAAM,oBAAoB,CAC/B,KACA,gBACG;AACH,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAkB,IAAI;AACpD,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAwB,IAAI;AACtD,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAsB,IAAI;AAE1D,QAAM,sBAAsB,CAACC,WAAoB;AAC/C,UAAM,eAAe;AACrB,aAAS,YAAY;AACrB,UAAM,IAAI,MAAMA,QAAO,WAAW,eAAe;AAAA,EACnD;AAEA,QAAM,gBAAgB,MAAM;AAC1B,gBAAY,IAAI;AAAA,EAClB;AAEA,QAAM,gBAAgB,YAAY;AAChC,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,MAAM,MAAM,YAAY,GAAG;AACjC,UAAI,CAAC,IAAI,SAAS;AAChB,4BAAoB,IAAI,SAAqB,IAAI,MAAM,eAAe,CAAC;AACvE,mBAAW,KAAK;AAChB;AAAA,MACF;AACA,UAAI,QAAQ,YAAY,IAAI,IAAI;AAAA,IAClC,SAASA,QAAO;AACd,0BAAoBA,MAAiB;AAAA,IACvC,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,SAAS,eAAe,eAAe,MAAM;AAClE;;;AC3CA,IAAAC,gBAAkC;;;ACAlC,IAAAC,gBAA4C;AAC5C,IAAM,aAAa;AACnB,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAElD,SAAS,iBACP,SACA,cACA,uBACA;AACA,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAiB,EAAE;AACnE,QAAM,gBAAY,sBAA8B,IAAI;AACpD,QAAM,0BAAsB,sBAAgB,KAAK;AAEjD,QAAM,kBAAkB,CAAC,MAAc,aAA6B;AAClE,QAAI,aAAa,EAAG,QAAO;AAE3B,UAAM,eAAe,KAAK,WAAW,CAAC,KAAK;AAC3C,UAAM,aAAa,KAAK,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM;AAE9D,QAAI,YAAY;AACd,aAAO;AAAA,IACT;AAEA,WAAO,kBAAkB,SAAS,YAAY,IAC1C,oBACA;AAAA,EACN;AAEA,+BAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,oBAAoB,SAAS;AACjD,0BAAoB,OAAO;AAC3B,8BAAwB,KAAK;AAC7B;AAAA,IACF;AAEA,4BAAwB,IAAI;AAC5B,wBAAoB,UAAU;AAE9B,QAAI,iBAAiB,SAAS,QAAQ,QAAQ;AAC5C,YAAM,QAAQ,gBAAgB,SAAS,iBAAiB,MAAM;AAC9D,gBAAU,UAAU,WAAW,MAAM;AACnC,4BAAoB,CAAC,SAAS,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,MAC3D,GAAG,KAAK;AAAA,IACV,OAAO;AACL,8BAAwB,KAAK;AAAA,IAC/B;AAEA,WAAO,MAAM;AACX,UAAI,UAAU,QAAS,cAAa,UAAU,OAAO;AAAA,IACvD;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AACT;","names":["toast","props","error","import_react","import_react"]}
|
|
@@ -166,7 +166,7 @@ function useTextStreaming(content, shouldStream, handleIsTextStreaming) {
|
|
|
166
166
|
const hasStartedStreaming = useRef2(false);
|
|
167
167
|
const getDelayForChar = (text, position) => {
|
|
168
168
|
if (position === 0) return CHAR_DELAY;
|
|
169
|
-
const previousChar = text[position - 1];
|
|
169
|
+
const previousChar = text[position - 1] || "";
|
|
170
170
|
const isEllipsis = text.slice(position - 1, position + 2) === "...";
|
|
171
171
|
if (isEllipsis) {
|
|
172
172
|
return CHAR_DELAY;
|
|
@@ -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 { useEffect, useRef, useState } from \"react\";\nconst CHAR_DELAY = 25;\nconst PUNCTUATION_DELAY = 200;\nconst PUNCTUATION_MARKS = [\".\", \"!\", \"?\", \";\", \":\"];\n\nfunction useTextStreaming(\n content: string,\n shouldStream: boolean,\n handleIsTextStreaming?: (isStreaming: boolean) => void\n) {\n const [displayedContent, setDisplayedContent] = useState<string>(\"\");\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n const hasStartedStreaming = useRef<boolean>(false);\n\n const getDelayForChar = (text: string, position: number): number => {\n if (position === 0) return CHAR_DELAY;\n\n const previousChar = text[position - 1];\n const isEllipsis = text.slice(position - 1, position + 2) === \"...\";\n\n if (isEllipsis) {\n return CHAR_DELAY;\n }\n\n return PUNCTUATION_MARKS.includes(previousChar)\n ? PUNCTUATION_DELAY\n : CHAR_DELAY;\n };\n\n useEffect(() => {\n if (!shouldStream && !hasStartedStreaming.current) {\n setDisplayedContent(content);\n handleIsTextStreaming?.(false);\n return;\n }\n\n handleIsTextStreaming?.(true);\n hasStartedStreaming.current = true;\n\n if (displayedContent.length < content.length) {\n const delay = getDelayForChar(content, displayedContent.length);\n timeoutId.current = setTimeout(() => {\n setDisplayedContent((prev) => prev + content[prev.length]);\n }, delay);\n } else {\n handleIsTextStreaming?.(false);\n }\n\n return () => {\n if (timeoutId.current) clearTimeout(timeoutId.current);\n };\n }, [\n content,\n displayedContent,\n shouldStream,\n getDelayForChar,\n handleIsTextStreaming,\n ]);\n\n return displayedContent;\n}\n\nexport { useTextStreaming };\n"],"mappings":"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","names":["toast","props","useState","error","useEffect","useEffect","useRef","useState"]}
|
|
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 { useEffect, useRef, useState } from \"react\";\nconst CHAR_DELAY = 25;\nconst PUNCTUATION_DELAY = 200;\nconst PUNCTUATION_MARKS = [\".\", \"!\", \"?\", \";\", \":\"];\n\nfunction useTextStreaming(\n content: string,\n shouldStream: boolean,\n handleIsTextStreaming?: (isStreaming: boolean) => void\n) {\n const [displayedContent, setDisplayedContent] = useState<string>(\"\");\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n const hasStartedStreaming = useRef<boolean>(false);\n\n const getDelayForChar = (text: string, position: number): number => {\n if (position === 0) return CHAR_DELAY;\n\n const previousChar = text[position - 1] || '';\n const isEllipsis = text.slice(position - 1, position + 2) === \"...\";\n\n if (isEllipsis) {\n return CHAR_DELAY;\n }\n\n return PUNCTUATION_MARKS.includes(previousChar)\n ? PUNCTUATION_DELAY\n : CHAR_DELAY;\n };\n\n useEffect(() => {\n if (!shouldStream && !hasStartedStreaming.current) {\n setDisplayedContent(content);\n handleIsTextStreaming?.(false);\n return;\n }\n\n handleIsTextStreaming?.(true);\n hasStartedStreaming.current = true;\n\n if (displayedContent.length < content.length) {\n const delay = getDelayForChar(content, displayedContent.length);\n timeoutId.current = setTimeout(() => {\n setDisplayedContent((prev) => prev + content[prev.length]);\n }, delay);\n } else {\n handleIsTextStreaming?.(false);\n }\n\n return () => {\n if (timeoutId.current) clearTimeout(timeoutId.current);\n };\n }, [\n content,\n displayedContent,\n shouldStream,\n getDelayForChar,\n handleIsTextStreaming,\n ]);\n\n return displayedContent;\n}\n\nexport { useTextStreaming };\n"],"mappings":"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","names":["toast","props","useState","error","useEffect","useEffect","useRef","useState"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
import { a as ButtonProps } from '../../alert-dialog-CP71C4vl.mjs';
|
|
3
3
|
export { A as AlertDialog, k as AlertDialogAction, l as AlertDialogCancel, f as AlertDialogContent, j as AlertDialogDescription, h as AlertDialogFooter, g as AlertDialogHeader, d as AlertDialogOverlay, c as AlertDialogPortal, i as AlertDialogTitle, e as AlertDialogTrigger } from '../../alert-dialog-CP71C4vl.mjs';
|
|
4
|
+
import { LucideIcon } from 'lucide-react';
|
|
4
5
|
import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
|
|
5
6
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
6
7
|
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
7
|
-
import { LucideIcon } from 'lucide-react';
|
|
8
8
|
import { VariantProps } from 'class-variance-authority';
|
|
9
9
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
10
10
|
import { Toaster as Toaster$1 } from 'sonner';
|
|
@@ -16,6 +16,19 @@ interface PageContainerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
16
16
|
}
|
|
17
17
|
declare const PageContainer: React$1.ForwardRefExoticComponent<PageContainerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
18
18
|
|
|
19
|
+
interface Suggestion {
|
|
20
|
+
label: string;
|
|
21
|
+
icon: LucideIcon;
|
|
22
|
+
action: () => void;
|
|
23
|
+
}
|
|
24
|
+
interface AssistantButtonProps {
|
|
25
|
+
icon: LucideIcon;
|
|
26
|
+
clickAction: () => void;
|
|
27
|
+
className?: string;
|
|
28
|
+
suggestions?: Suggestion[];
|
|
29
|
+
}
|
|
30
|
+
declare const AssistantButton: React$1.ForwardRefExoticComponent<AssistantButtonProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
31
|
+
|
|
19
32
|
type CarouselApi = UseEmblaCarouselType[1];
|
|
20
33
|
type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
|
|
21
34
|
type CarouselOptions = UseCarouselParameters[0];
|
|
@@ -126,4 +139,4 @@ declare const CallOutResponse: React$1.ForwardRefExoticComponent<React$1.HTMLAtt
|
|
|
126
139
|
handleIsTextStreaming?: (isStreaming: boolean) => void;
|
|
127
140
|
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
128
141
|
|
|
129
|
-
export { CallOut, CallOutActions, CallOutDate, type CallOutMessage, type CallOutProps, CallOutResponse, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageContainer, RatingComment, RatingStars, RatingThumbs, Sidebar, SidebarFooter, type SidebarItem, type SidebarProps, Toaster as SonnerToaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, navigationMenuTriggerStyle };
|
|
142
|
+
export { AssistantButton, CallOut, CallOutActions, CallOutDate, type CallOutMessage, type CallOutProps, CallOutResponse, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageContainer, RatingComment, RatingStars, RatingThumbs, Sidebar, SidebarFooter, type SidebarItem, type SidebarProps, Toaster as SonnerToaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, navigationMenuTriggerStyle };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
import { a as ButtonProps } from '../../alert-dialog-CP71C4vl.js';
|
|
3
3
|
export { A as AlertDialog, k as AlertDialogAction, l as AlertDialogCancel, f as AlertDialogContent, j as AlertDialogDescription, h as AlertDialogFooter, g as AlertDialogHeader, d as AlertDialogOverlay, c as AlertDialogPortal, i as AlertDialogTitle, e as AlertDialogTrigger } from '../../alert-dialog-CP71C4vl.js';
|
|
4
|
+
import { LucideIcon } from 'lucide-react';
|
|
4
5
|
import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
|
|
5
6
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
6
7
|
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
7
|
-
import { LucideIcon } from 'lucide-react';
|
|
8
8
|
import { VariantProps } from 'class-variance-authority';
|
|
9
9
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
10
10
|
import { Toaster as Toaster$1 } from 'sonner';
|
|
@@ -16,6 +16,19 @@ interface PageContainerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
16
16
|
}
|
|
17
17
|
declare const PageContainer: React$1.ForwardRefExoticComponent<PageContainerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
18
18
|
|
|
19
|
+
interface Suggestion {
|
|
20
|
+
label: string;
|
|
21
|
+
icon: LucideIcon;
|
|
22
|
+
action: () => void;
|
|
23
|
+
}
|
|
24
|
+
interface AssistantButtonProps {
|
|
25
|
+
icon: LucideIcon;
|
|
26
|
+
clickAction: () => void;
|
|
27
|
+
className?: string;
|
|
28
|
+
suggestions?: Suggestion[];
|
|
29
|
+
}
|
|
30
|
+
declare const AssistantButton: React$1.ForwardRefExoticComponent<AssistantButtonProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
31
|
+
|
|
19
32
|
type CarouselApi = UseEmblaCarouselType[1];
|
|
20
33
|
type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
|
|
21
34
|
type CarouselOptions = UseCarouselParameters[0];
|
|
@@ -126,4 +139,4 @@ declare const CallOutResponse: React$1.ForwardRefExoticComponent<React$1.HTMLAtt
|
|
|
126
139
|
handleIsTextStreaming?: (isStreaming: boolean) => void;
|
|
127
140
|
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
128
141
|
|
|
129
|
-
export { CallOut, CallOutActions, CallOutDate, type CallOutMessage, type CallOutProps, CallOutResponse, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageContainer, RatingComment, RatingStars, RatingThumbs, Sidebar, SidebarFooter, type SidebarItem, type SidebarProps, Toaster as SonnerToaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, navigationMenuTriggerStyle };
|
|
142
|
+
export { AssistantButton, CallOut, CallOutActions, CallOutDate, type CallOutMessage, type CallOutProps, CallOutResponse, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageContainer, RatingComment, RatingStars, RatingThumbs, Sidebar, SidebarFooter, type SidebarItem, type SidebarProps, Toaster as SonnerToaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, navigationMenuTriggerStyle };
|