UNPKG

@assistant-ui/react

Version:

Typescript/React library for AI Chat

1 lines 3.71 kB
{"version":3,"sources":["../../../src/primitives/actionBar/ActionBarCopy.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { ActionButtonProps } from \"../../utils/createActionButton\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useMessageUtils } from \"../../context\";\nimport { useCallback } from \"react\";\nimport {\n useMessage,\n useMessageRuntime,\n} from \"../../context/react/MessageContext\";\nimport { useComposerRuntime } from \"../../context\";\n\nconst useActionBarPrimitiveCopy = ({\n copiedDuration = 3000,\n}: { copiedDuration?: number | undefined } = {}) => {\n const messageRuntime = useMessageRuntime();\n const composerRuntime = useComposerRuntime();\n const setIsCopied = useMessageUtils((s) => s.setIsCopied);\n const hasCopyableContent = useMessage((message) => {\n return (\n (message.role !== \"assistant\" || message.status.type !== \"running\") &&\n message.content.some((c) => c.type === \"text\" && c.text.length > 0)\n );\n });\n\n const callback = useCallback(() => {\n const { isEditing, text: composerValue } = composerRuntime.getState();\n\n const valueToCopy = isEditing\n ? composerValue\n : messageRuntime.unstable_getCopyText();\n\n navigator.clipboard.writeText(valueToCopy).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n }, [messageRuntime, setIsCopied, composerRuntime, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n\nexport namespace ActionBarPrimitiveCopy {\n export type Element = HTMLButtonElement;\n export type Props = ActionButtonProps<typeof useActionBarPrimitiveCopy>;\n}\n\nexport const ActionBarPrimitiveCopy = forwardRef<\n ActionBarPrimitiveCopy.Element,\n ActionBarPrimitiveCopy.Props\n>(({ copiedDuration, onClick, disabled, ...props }, forwardedRef) => {\n const isCopied = useMessageUtils((u) => u.isCopied);\n const callback = useActionBarPrimitiveCopy({ copiedDuration });\n return (\n <Primitive.button\n type=\"button\"\n {...(isCopied ? { \"data-copied\": \"true\" } : {})}\n {...props}\n ref={forwardedRef}\n disabled={disabled || !callback}\n onClick={composeEventHandlers(onClick, () => {\n callback?.();\n })}\n />\n );\n});\n\nActionBarPrimitiveCopy.displayName = \"ActionBarPrimitive.Copy\";\n"],"mappings":";;;AAEA,SAAS,kBAAkB;AAE3B,SAAS,4BAA4B;AACrC,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,0BAA0B;AA4C/B;AA1CJ,IAAM,4BAA4B,CAAC;AAAA,EACjC,iBAAiB;AACnB,IAA6C,CAAC,MAAM;AAClD,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,kBAAkB,mBAAmB;AAC3C,QAAM,cAAc,gBAAgB,CAAC,MAAM,EAAE,WAAW;AACxD,QAAM,qBAAqB,WAAW,CAAC,YAAY;AACjD,YACG,QAAQ,SAAS,eAAe,QAAQ,OAAO,SAAS,cACzD,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,KAAK,SAAS,CAAC;AAAA,EAEtE,CAAC;AAED,QAAM,WAAW,YAAY,MAAM;AACjC,UAAM,EAAE,WAAW,MAAM,cAAc,IAAI,gBAAgB,SAAS;AAEpE,UAAM,cAAc,YAChB,gBACA,eAAe,qBAAqB;AAExC,cAAU,UAAU,UAAU,WAAW,EAAE,KAAK,MAAM;AACpD,kBAAY,IAAI;AAChB,iBAAW,MAAM,YAAY,KAAK,GAAG,cAAc;AAAA,IACrD,CAAC;AAAA,EACH,GAAG,CAAC,gBAAgB,aAAa,iBAAiB,cAAc,CAAC;AAEjE,MAAI,CAAC,mBAAoB,QAAO;AAChC,SAAO;AACT;AAOO,IAAM,yBAAyB,WAGpC,CAAC,EAAE,gBAAgB,SAAS,UAAU,GAAG,MAAM,GAAG,iBAAiB;AACnE,QAAM,WAAW,gBAAgB,CAAC,MAAM,EAAE,QAAQ;AAClD,QAAM,WAAW,0BAA0B,EAAE,eAAe,CAAC;AAC7D,SACE;AAAA,IAAC,UAAU;AAAA,IAAV;AAAA,MACC,MAAK;AAAA,MACJ,GAAI,WAAW,EAAE,eAAe,OAAO,IAAI,CAAC;AAAA,MAC5C,GAAG;AAAA,MACJ,KAAK;AAAA,MACL,UAAU,YAAY,CAAC;AAAA,MACvB,SAAS,qBAAqB,SAAS,MAAM;AAC3C,mBAAW;AAAA,MACb,CAAC;AAAA;AAAA,EACH;AAEJ,CAAC;AAED,uBAAuB,cAAc;","names":[]}