UNPKG

@assistant-ui/react

Version:

React components for AI chat.

1 lines 3.27 kB
{"version":3,"sources":["../../../src/context/providers/TextContentPartProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport {\n ContentPartContext,\n ContentPartContextValue,\n} from \"../react/ContentPartContext\";\nimport { ContentPartStatus, TextContentPart } from \"../../types/AssistantTypes\";\nimport { writableStore } from \"../ReadonlyStore\";\nimport {\n ContentPartRuntimeImpl,\n ContentPartState,\n} from \"../../api/ContentPartRuntime\";\n\nexport namespace TextContentPartProvider {\n export type Props = PropsWithChildren<{\n text: string;\n isRunning?: boolean | undefined;\n }>;\n}\n\nconst COMPLETE_STATUS: ContentPartStatus = {\n type: \"complete\",\n};\n\nconst RUNNING_STATUS: ContentPartStatus = {\n type: \"running\",\n};\n\nexport const TextContentPartProvider: FC<TextContentPartProvider.Props> = ({\n children,\n text,\n isRunning,\n}) => {\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPartRuntime = create(\n // TODO\n () => new ContentPartRuntimeImpl(null as any, null as any, null as any),\n );\n const useContentPart = create<ContentPartState>(() => ({\n status: isRunning ? RUNNING_STATUS : COMPLETE_STATUS,\n part: { type: \"text\", text },\n type: \"text\",\n text,\n }));\n\n return { useContentPartRuntime, useContentPart };\n });\n\n useEffect(() => {\n const state = context.useContentPart.getState() as ContentPartState & {\n type: \"text\";\n };\n\n const textUpdated = (state as TextContentPart).text !== text;\n const targetStatus = isRunning ? RUNNING_STATUS : COMPLETE_STATUS;\n const statusUpdated = state.status !== targetStatus;\n\n if (!textUpdated && !statusUpdated) return;\n\n writableStore(context.useContentPart).setState(\n {\n type: \"text\",\n text,\n part: { type: \"text\", text },\n status: targetStatus,\n } satisfies ContentPartState,\n true,\n );\n }, [context, isRunning, text]);\n\n return (\n <ContentPartContext.Provider value={context}>\n {children}\n </ContentPartContext.Provider>\n );\n};\n"],"mappings":";;;AAGA,SAAS,WAAW,gBAAgB;AACpC,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,OAEK;AAEP,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,OAEK;AA4DH;AAnDJ,IAAM,kBAAqC;AAAA,EACzC,MAAM;AACR;AAEA,IAAM,iBAAoC;AAAA,EACxC,MAAM;AACR;AAEO,IAAM,0BAA6D,CAAC;AAAA,EACzE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,OAAO,IAAI,SAAkC,MAAM;AACxD,UAAM,wBAAwB;AAAA;AAAA,MAE5B,MAAM,IAAI,uBAAuB,MAAa,MAAa,IAAW;AAAA,IACxE;AACA,UAAM,iBAAiB,OAAyB,OAAO;AAAA,MACrD,QAAQ,YAAY,iBAAiB;AAAA,MACrC,MAAM,EAAE,MAAM,QAAQ,KAAK;AAAA,MAC3B,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAEF,WAAO,EAAE,uBAAuB,eAAe;AAAA,EACjD,CAAC;AAED,YAAU,MAAM;AACd,UAAM,QAAQ,QAAQ,eAAe,SAAS;AAI9C,UAAM,cAAe,MAA0B,SAAS;AACxD,UAAM,eAAe,YAAY,iBAAiB;AAClD,UAAM,gBAAgB,MAAM,WAAW;AAEvC,QAAI,CAAC,eAAe,CAAC,cAAe;AAEpC,kBAAc,QAAQ,cAAc,EAAE;AAAA,MACpC;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,MAAM,EAAE,MAAM,QAAQ,KAAK;AAAA,QAC3B,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,WAAW,IAAI,CAAC;AAE7B,SACE,oBAAC,mBAAmB,UAAnB,EAA4B,OAAO,SACjC,UACH;AAEJ;","names":[]}