@alquimia-ai/ui 1.2.3 → 1.3.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.
- package/dist/components/atoms/index.d.mts +4 -1
- package/dist/components/atoms/index.d.ts +4 -1
- package/dist/components/atoms/index.js +39 -17
- package/dist/components/atoms/index.js.map +1 -1
- package/dist/components/atoms/index.mjs +35 -13
- package/dist/components/atoms/index.mjs.map +1 -1
- package/dist/components/hooks/index.js +41 -32
- package/dist/components/hooks/index.js.map +1 -1
- package/dist/components/hooks/index.mjs +42 -33
- package/dist/components/hooks/index.mjs.map +1 -1
- package/dist/components/index.d.mts +2 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +39 -17
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +35 -13
- package/dist/components/index.mjs.map +1 -1
- package/dist/components/molecules/documents/index.js +82 -52
- package/dist/components/molecules/documents/index.js.map +1 -1
- package/dist/components/molecules/documents/index.mjs +67 -37
- package/dist/components/molecules/documents/index.mjs.map +1 -1
- package/dist/components/molecules/index.js +186 -156
- package/dist/components/molecules/index.js.map +1 -1
- package/dist/components/molecules/index.mjs +179 -149
- package/dist/components/molecules/index.mjs.map +1 -1
- package/dist/components/molecules/viewers/index.js +31 -10
- package/dist/components/molecules/viewers/index.js.map +1 -1
- package/dist/components/molecules/viewers/index.mjs +30 -9
- package/dist/components/molecules/viewers/index.mjs.map +1 -1
- package/dist/components/organisms/index.d.mts +3 -1
- package/dist/components/organisms/index.d.ts +3 -1
- package/dist/components/organisms/index.js +228 -196
- package/dist/components/organisms/index.js.map +1 -1
- package/dist/components/organisms/index.mjs +217 -185
- package/dist/components/organisms/index.mjs.map +1 -1
- package/dist/components/templates/cards/index.js +57 -36
- package/dist/components/templates/cards/index.js.map +1 -1
- package/dist/components/templates/cards/index.mjs +45 -24
- package/dist/components/templates/cards/index.mjs.map +1 -1
- package/dist/components/templates/index.js +57 -36
- package/dist/components/templates/index.js.map +1 -1
- package/dist/components/templates/index.mjs +45 -24
- package/dist/components/templates/index.mjs.map +1 -1
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +283 -250
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +262 -229
- package/dist/index.mjs.map +1 -1
- package/dist/package.json +137 -0
- package/dist/types/index.d.mts +12 -1
- package/dist/types/index.d.ts +12 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs.map +1 -1
- package/package.json +21 -3
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"]}
|
|
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 { useState, useEffect, useRef, useCallback } from \"react\";\n\nconst CHAR_DELAY = 25;\nconst PUNCTUATION_DELAY = 400;\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,gBAAyD;AAEzD,IAAM,aAAa;AACnB,IAAM,oBAAoB;AAEnB,SAAS,iBACd,SACA,cACA,uBACA;AACA,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,EAAE;AACrD,QAAM,iBAAa,sBAAO,OAAO;AACjC,QAAM,eAAW,sBAAO,CAAC;AACzB,QAAM,eAAW,sBAA8B,IAAI;AAEnD,QAAM,0BAAsB,sBAAgB,KAAK;AAEjD,+BAAU,MAAM;AACd,eAAW,UAAU;AACrB,QAAI,oBAAoB,WAAW,CAAC,SAAS,WAAW,SAAS,UAAU,WAAW,QAAQ,QAAQ;AACpG,eAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,eAAW,2BAAY,MAAM;AACjC,QAAI,SAAS,UAAU,WAAW,QAAQ,QAAQ;AAChD,YAAM,WAAW,WAAW,QAAQ,OAAO,SAAS,OAAO;AAC3D,uBAAiB,CAAC,SAAS,OAAO,QAAQ;AAC1C,eAAS;AAET,YAAM,QAAQ,UAAU,KAAK,QAAQ,IAAI,oBAAoB;AAE7D,eAAS,UAAU,WAAW,MAAM;AAClC,iBAAS,UAAU;AACnB,iBAAS;AAAA,MACX,GAAG,KAAK;AAAA,IACV,OAAO;AACL,8BAAwB,KAAK;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,+BAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,oBAAoB,SAAS;AACjD,uBAAiB,WAAW,OAAO;AACnC,eAAS,UAAU,WAAW,QAAQ;AACtC,UAAI,SAAS,SAAS;AACpB,qBAAa,SAAS,OAAO;AAC7B,iBAAS,UAAU;AAAA,MACrB;AACA,8BAAwB,KAAK;AAAA,IAC/B,OAAO;AACL,UAAI,SAAS,UAAU,WAAW,QAAQ,UAAU,CAAC,SAAS,SAAS;AACrE,gCAAwB,IAAI;AAC5B,4BAAoB,UAAU;AAC9B,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,WAAO,MAAM;AACX,UAAI,SAAS,SAAS;AACpB,qBAAa,SAAS,OAAO;AAC7B,iBAAS,UAAU;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,QAAQ,CAAC;AAE3B,SAAO;AACT;","names":["toast","props","error","import_react","import_react"]}
|
|
@@ -156,50 +156,59 @@ var useDocumentReader = (url, getDocument) => {
|
|
|
156
156
|
import { useEffect as useEffect2, useRef } from "react";
|
|
157
157
|
|
|
158
158
|
// src/components/hooks/use-text-streaming.ts
|
|
159
|
-
import { useEffect as useEffect3, useRef as useRef2,
|
|
159
|
+
import { useState as useState3, useEffect as useEffect3, useRef as useRef2, useCallback } from "react";
|
|
160
160
|
var CHAR_DELAY = 25;
|
|
161
|
-
var PUNCTUATION_DELAY =
|
|
162
|
-
var PUNCTUATION_MARKS = [".", "!", "?", ";", ":"];
|
|
161
|
+
var PUNCTUATION_DELAY = 400;
|
|
163
162
|
function useTextStreaming(content, shouldStream, handleIsTextStreaming) {
|
|
164
|
-
const [
|
|
165
|
-
const
|
|
163
|
+
const [displayedText, setDisplayedText] = useState3("");
|
|
164
|
+
const contentRef = useRef2(content);
|
|
165
|
+
const indexRef = useRef2(0);
|
|
166
|
+
const timerRef = useRef2(null);
|
|
166
167
|
const hasStartedStreaming = useRef2(false);
|
|
167
|
-
const getDelayForChar = (text, position) => {
|
|
168
|
-
if (position === 0) return CHAR_DELAY;
|
|
169
|
-
const previousChar = text[position - 1] || "";
|
|
170
|
-
const isEllipsis = text.slice(position - 1, position + 2) === "...";
|
|
171
|
-
if (isEllipsis) {
|
|
172
|
-
return CHAR_DELAY;
|
|
173
|
-
}
|
|
174
|
-
return PUNCTUATION_MARKS.includes(previousChar) ? PUNCTUATION_DELAY : CHAR_DELAY;
|
|
175
|
-
};
|
|
176
168
|
useEffect3(() => {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return;
|
|
169
|
+
contentRef.current = content;
|
|
170
|
+
if (hasStartedStreaming.current && !timerRef.current && indexRef.current < contentRef.current.length) {
|
|
171
|
+
typeNext();
|
|
181
172
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
if (
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
173
|
+
}, [content]);
|
|
174
|
+
const typeNext = useCallback(() => {
|
|
175
|
+
if (indexRef.current < contentRef.current.length) {
|
|
176
|
+
const nextChar = contentRef.current.charAt(indexRef.current);
|
|
177
|
+
setDisplayedText((prev) => prev + nextChar);
|
|
178
|
+
indexRef.current++;
|
|
179
|
+
const delay = /[.!?;:]/.test(nextChar) ? PUNCTUATION_DELAY : CHAR_DELAY;
|
|
180
|
+
timerRef.current = setTimeout(() => {
|
|
181
|
+
timerRef.current = null;
|
|
182
|
+
typeNext();
|
|
188
183
|
}, delay);
|
|
189
184
|
} else {
|
|
190
185
|
handleIsTextStreaming?.(false);
|
|
191
186
|
}
|
|
187
|
+
}, []);
|
|
188
|
+
useEffect3(() => {
|
|
189
|
+
if (!shouldStream && !hasStartedStreaming.current) {
|
|
190
|
+
setDisplayedText(contentRef.current);
|
|
191
|
+
indexRef.current = contentRef.current.length;
|
|
192
|
+
if (timerRef.current) {
|
|
193
|
+
clearTimeout(timerRef.current);
|
|
194
|
+
timerRef.current = null;
|
|
195
|
+
}
|
|
196
|
+
handleIsTextStreaming?.(false);
|
|
197
|
+
} else {
|
|
198
|
+
if (indexRef.current < contentRef.current.length && !timerRef.current) {
|
|
199
|
+
handleIsTextStreaming?.(true);
|
|
200
|
+
hasStartedStreaming.current = true;
|
|
201
|
+
typeNext();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
192
204
|
return () => {
|
|
193
|
-
if (
|
|
205
|
+
if (timerRef.current) {
|
|
206
|
+
clearTimeout(timerRef.current);
|
|
207
|
+
timerRef.current = null;
|
|
208
|
+
}
|
|
194
209
|
};
|
|
195
|
-
}, [
|
|
196
|
-
|
|
197
|
-
displayedContent,
|
|
198
|
-
shouldStream,
|
|
199
|
-
getDelayForChar,
|
|
200
|
-
handleIsTextStreaming
|
|
201
|
-
]);
|
|
202
|
-
return displayedContent;
|
|
210
|
+
}, [shouldStream, typeNext]);
|
|
211
|
+
return displayedText;
|
|
203
212
|
}
|
|
204
213
|
export {
|
|
205
214
|
reducer,
|
|
@@ -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 { useState, useEffect, useRef, useCallback } from \"react\";\n\nconst CHAR_DELAY = 25;\nconst PUNCTUATION_DELAY = 400;\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":";AAGA,YAAY,WAAW;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,SAAS,YAAAC,iBAAgB;AAGlB,IAAM,oBAAoB,CAC/B,KACA,gBACG;AACH,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAkB,IAAI;AACpD,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAsB,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,SAAS,aAAAC,YAAW,cAAc;;;ACAlC,SAAS,YAAAC,WAAU,aAAAC,YAAW,UAAAC,SAAQ,mBAAmB;AAEzD,IAAM,aAAa;AACnB,IAAM,oBAAoB;AAEnB,SAAS,iBACd,SACA,cACA,uBACA;AACA,QAAM,CAAC,eAAe,gBAAgB,IAAIF,UAAS,EAAE;AACrD,QAAM,aAAaE,QAAO,OAAO;AACjC,QAAM,WAAWA,QAAO,CAAC;AACzB,QAAM,WAAWA,QAA8B,IAAI;AAEnD,QAAM,sBAAsBA,QAAgB,KAAK;AAEjD,EAAAD,WAAU,MAAM;AACd,eAAW,UAAU;AACrB,QAAI,oBAAoB,WAAW,CAAC,SAAS,WAAW,SAAS,UAAU,WAAW,QAAQ,QAAQ;AACpG,eAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,WAAW,YAAY,MAAM;AACjC,QAAI,SAAS,UAAU,WAAW,QAAQ,QAAQ;AAChD,YAAM,WAAW,WAAW,QAAQ,OAAO,SAAS,OAAO;AAC3D,uBAAiB,CAAC,SAAS,OAAO,QAAQ;AAC1C,eAAS;AAET,YAAM,QAAQ,UAAU,KAAK,QAAQ,IAAI,oBAAoB;AAE7D,eAAS,UAAU,WAAW,MAAM;AAClC,iBAAS,UAAU;AACnB,iBAAS;AAAA,MACX,GAAG,KAAK;AAAA,IACV,OAAO;AACL,8BAAwB,KAAK;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,oBAAoB,SAAS;AACjD,uBAAiB,WAAW,OAAO;AACnC,eAAS,UAAU,WAAW,QAAQ;AACtC,UAAI,SAAS,SAAS;AACpB,qBAAa,SAAS,OAAO;AAC7B,iBAAS,UAAU;AAAA,MACrB;AACA,8BAAwB,KAAK;AAAA,IAC/B,OAAO;AACL,UAAI,SAAS,UAAU,WAAW,QAAQ,UAAU,CAAC,SAAS,SAAS;AACrE,gCAAwB,IAAI;AAC5B,4BAAoB,UAAU;AAC9B,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,WAAO,MAAM;AACX,UAAI,SAAS,SAAS;AACpB,qBAAa,SAAS,OAAO;AAC7B,iBAAS,UAAU;AAAA,MACrB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,QAAQ,CAAC;AAE3B,SAAO;AACT;","names":["toast","props","useState","error","useEffect","useState","useEffect","useRef"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
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, B as Button, a as ButtonProps, b as buttonVariants } from '../alert-dialog-CP71C4vl.mjs';
|
|
2
|
-
export { Alert, AlertDescription, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Input, InputProps, Label, Loader, Popover, PopoverContent, PopoverTrigger, RichText, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Skeleton, Slider, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TextareaProps, ThinkIndicator, ThinkIndicatorProps, Toaster, Toggle, Typography, TypographyProps, badgeVariants, thinkIndicatorVariants, toggleVariants } from './atoms/index.mjs';
|
|
2
|
+
export { Alert, AlertDescription, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Input, InputProps, Label, Loader, Popover, PopoverContent, PopoverTrigger, RichText, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Skeleton, Slider, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TextareaProps, ThinkIndicator, ThinkIndicatorProps, Toaster, Toggle, Typography, TypographyProps, badgeVariants, thinkIndicatorVariants, toggleVariants } from './atoms/index.mjs';
|
|
3
3
|
export { d as Toast, h as ToastAction, a as ToastActionElement, g as ToastClose, f as ToastDescription, T as ToastProps, b as ToastProvider, e as ToastTitle, c as ToastViewport } from '../toast-2xT7L1tJ.mjs';
|
|
4
4
|
import 'class-variance-authority/types';
|
|
5
5
|
import 'react';
|
|
@@ -19,4 +19,5 @@ import '@radix-ui/react-switch';
|
|
|
19
19
|
import '@radix-ui/react-tabs';
|
|
20
20
|
import '@radix-ui/react-aspect-ratio';
|
|
21
21
|
import '@radix-ui/react-popover';
|
|
22
|
+
import '@radix-ui/react-separator';
|
|
22
23
|
import '@radix-ui/react-toast';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
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, B as Button, a as ButtonProps, b as buttonVariants } from '../alert-dialog-CP71C4vl.js';
|
|
2
|
-
export { Alert, AlertDescription, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Input, InputProps, Label, Loader, Popover, PopoverContent, PopoverTrigger, RichText, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Skeleton, Slider, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TextareaProps, ThinkIndicator, ThinkIndicatorProps, Toaster, Toggle, Typography, TypographyProps, badgeVariants, thinkIndicatorVariants, toggleVariants } from './atoms/index.js';
|
|
2
|
+
export { Alert, AlertDescription, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Input, InputProps, Label, Loader, Popover, PopoverContent, PopoverTrigger, RichText, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Skeleton, Slider, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TextareaProps, ThinkIndicator, ThinkIndicatorProps, Toaster, Toggle, Typography, TypographyProps, badgeVariants, thinkIndicatorVariants, toggleVariants } from './atoms/index.js';
|
|
3
3
|
export { d as Toast, h as ToastAction, a as ToastActionElement, g as ToastClose, f as ToastDescription, T as ToastProps, b as ToastProvider, e as ToastTitle, c as ToastViewport } from '../toast-2xT7L1tJ.js';
|
|
4
4
|
import 'class-variance-authority/types';
|
|
5
5
|
import 'react';
|
|
@@ -19,4 +19,5 @@ import '@radix-ui/react-switch';
|
|
|
19
19
|
import '@radix-ui/react-tabs';
|
|
20
20
|
import '@radix-ui/react-aspect-ratio';
|
|
21
21
|
import '@radix-ui/react-popover';
|
|
22
|
+
import '@radix-ui/react-separator';
|
|
22
23
|
import '@radix-ui/react-toast';
|
package/dist/components/index.js
CHANGED
|
@@ -112,6 +112,7 @@ __export(components_exports, {
|
|
|
112
112
|
SelectSeparator: () => SelectSeparator,
|
|
113
113
|
SelectTrigger: () => SelectTrigger,
|
|
114
114
|
SelectValue: () => SelectValue,
|
|
115
|
+
Separator: () => Separator2,
|
|
115
116
|
Skeleton: () => Skeleton,
|
|
116
117
|
Slider: () => Slider,
|
|
117
118
|
Switch: () => Switch,
|
|
@@ -1482,8 +1483,29 @@ var Loader = React22.forwardRef(
|
|
|
1482
1483
|
);
|
|
1483
1484
|
Loader.displayName = "Loader";
|
|
1484
1485
|
|
|
1485
|
-
// src/components/
|
|
1486
|
+
// src/components/atoms/ui/separator.tsx
|
|
1486
1487
|
var React23 = __toESM(require("react"));
|
|
1488
|
+
var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"));
|
|
1489
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1490
|
+
var Separator2 = React23.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1491
|
+
SeparatorPrimitive.Root,
|
|
1492
|
+
{
|
|
1493
|
+
ref,
|
|
1494
|
+
decorative,
|
|
1495
|
+
orientation,
|
|
1496
|
+
className: cn(
|
|
1497
|
+
"shrink-0 bg-border",
|
|
1498
|
+
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
|
|
1499
|
+
className,
|
|
1500
|
+
"alq--separator"
|
|
1501
|
+
),
|
|
1502
|
+
...props
|
|
1503
|
+
}
|
|
1504
|
+
));
|
|
1505
|
+
Separator2.displayName = SeparatorPrimitive.Root.displayName;
|
|
1506
|
+
|
|
1507
|
+
// src/components/hooks/use-toast.ts
|
|
1508
|
+
var React24 = __toESM(require("react"));
|
|
1487
1509
|
var TOAST_LIMIT = 1;
|
|
1488
1510
|
var TOAST_REMOVE_DELAY = 1e6;
|
|
1489
1511
|
var count = 0;
|
|
@@ -1584,8 +1606,8 @@ function toast({ ...props }) {
|
|
|
1584
1606
|
};
|
|
1585
1607
|
}
|
|
1586
1608
|
function useToast() {
|
|
1587
|
-
const [state, setState] =
|
|
1588
|
-
|
|
1609
|
+
const [state, setState] = React24.useState(memoryState);
|
|
1610
|
+
React24.useEffect(() => {
|
|
1589
1611
|
listeners.push(setState);
|
|
1590
1612
|
return () => {
|
|
1591
1613
|
const index = listeners.indexOf(setState);
|
|
@@ -1602,29 +1624,29 @@ function useToast() {
|
|
|
1602
1624
|
}
|
|
1603
1625
|
|
|
1604
1626
|
// src/components/atoms/ui/toaster.tsx
|
|
1605
|
-
var
|
|
1627
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1606
1628
|
function Toaster() {
|
|
1607
1629
|
const { toasts } = useToast();
|
|
1608
|
-
return /* @__PURE__ */ (0,
|
|
1630
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(ToastProvider, { children: [
|
|
1609
1631
|
toasts.map(function({ id, title, description, action, ...props }) {
|
|
1610
|
-
return /* @__PURE__ */ (0,
|
|
1611
|
-
/* @__PURE__ */ (0,
|
|
1612
|
-
title && /* @__PURE__ */ (0,
|
|
1613
|
-
description && /* @__PURE__ */ (0,
|
|
1632
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Toast, { ...props, children: [
|
|
1633
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "grid gap-1", children: [
|
|
1634
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ToastTitle, { children: title }),
|
|
1635
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ToastDescription, { children: description })
|
|
1614
1636
|
] }),
|
|
1615
1637
|
action,
|
|
1616
|
-
/* @__PURE__ */ (0,
|
|
1638
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ToastClose, {})
|
|
1617
1639
|
] }, id);
|
|
1618
1640
|
}),
|
|
1619
|
-
/* @__PURE__ */ (0,
|
|
1641
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ToastViewport, {})
|
|
1620
1642
|
] });
|
|
1621
1643
|
}
|
|
1622
1644
|
|
|
1623
1645
|
// src/components/atoms/ui/think-indicator.tsx
|
|
1624
|
-
var
|
|
1646
|
+
var React25 = __toESM(require("react"));
|
|
1625
1647
|
var import_react3 = require("react");
|
|
1626
1648
|
var import_class_variance_authority8 = require("class-variance-authority");
|
|
1627
|
-
var
|
|
1649
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1628
1650
|
var thinkIndicatorVariants = (0, import_class_variance_authority8.cva)(
|
|
1629
1651
|
"flex items-center gap-3",
|
|
1630
1652
|
{
|
|
@@ -1646,7 +1668,7 @@ var thinkIndicatorVariants = (0, import_class_variance_authority8.cva)(
|
|
|
1646
1668
|
}
|
|
1647
1669
|
}
|
|
1648
1670
|
);
|
|
1649
|
-
var ThinkIndicator =
|
|
1671
|
+
var ThinkIndicator = React25.forwardRef(
|
|
1650
1672
|
({
|
|
1651
1673
|
className,
|
|
1652
1674
|
variant,
|
|
@@ -1677,14 +1699,14 @@ var ThinkIndicator = React24.forwardRef(
|
|
|
1677
1699
|
}
|
|
1678
1700
|
return () => clearInterval(timer);
|
|
1679
1701
|
}, [thoughts, interval, currentThoughtIndex]);
|
|
1680
|
-
return /* @__PURE__ */ (0,
|
|
1702
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
1681
1703
|
"div",
|
|
1682
1704
|
{
|
|
1683
1705
|
ref,
|
|
1684
1706
|
className: cn(thinkIndicatorVariants({ variant, size }), className, "alq--think-indicator"),
|
|
1685
1707
|
...props,
|
|
1686
1708
|
children: [
|
|
1687
|
-
loader || /* @__PURE__ */ (0,
|
|
1709
|
+
loader || /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1688
1710
|
Loader,
|
|
1689
1711
|
{
|
|
1690
1712
|
className: cn(
|
|
@@ -1692,7 +1714,7 @@ var ThinkIndicator = React24.forwardRef(
|
|
|
1692
1714
|
)
|
|
1693
1715
|
}
|
|
1694
1716
|
),
|
|
1695
|
-
/* @__PURE__ */ (0,
|
|
1717
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1696
1718
|
"div",
|
|
1697
1719
|
{
|
|
1698
1720
|
className: cn(
|