@assistant-ui/react
Version:
React components for AI chat.
1 lines • 2.49 kB
Source Map (JSON)
{"version":3,"sources":["../../src/utils/createActionButton.tsx"],"sourcesContent":["\"use client\";\n\nimport { ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\nexport type ActionButtonProps<THook> = PrimitiveButtonProps &\n (THook extends (props: infer TProps) => unknown ? TProps : never);\n\nexport type ActionButtonElement = ElementRef<typeof Primitive.button>;\n\nexport const createActionButton = <TProps,>(\n displayName: string,\n useActionButton: ActionButtonCallback<TProps>,\n forwardProps: (keyof NonNullable<TProps>)[] = [],\n) => {\n const ActionButton = forwardRef<\n ActionButtonElement,\n PrimitiveButtonProps & TProps\n >((props, forwardedRef) => {\n const forwardedProps = {} as TProps;\n const primitiveProps = {} as PrimitiveButtonProps;\n\n (Object.keys(props) as Array<keyof typeof props>).forEach((key) => {\n if (forwardProps.includes(key as keyof TProps)) {\n (forwardedProps as any)[key] = props[key];\n } else {\n (primitiveProps as any)[key] = props[key];\n }\n });\n\n const callback = useActionButton(forwardedProps as TProps);\n return (\n <Primitive.button\n type=\"button\"\n {...primitiveProps}\n ref={forwardedRef}\n disabled={primitiveProps.disabled || !callback}\n onClick={composeEventHandlers(primitiveProps.onClick, () => {\n callback?.();\n })}\n />\n );\n });\n\n ActionButton.displayName = displayName;\n\n return ActionButton;\n};\n"],"mappings":";;;AAEA,SAAqB,kBAA4C;AACjE,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AAiC/B;AAtBC,IAAM,qBAAqB,CAChC,aACA,iBACA,eAA8C,CAAC,MAC5C;AACH,QAAM,eAAe,WAGnB,CAAC,OAAO,iBAAiB;AACzB,UAAM,iBAAiB,CAAC;AACxB,UAAM,iBAAiB,CAAC;AAExB,IAAC,OAAO,KAAK,KAAK,EAAgC,QAAQ,CAAC,QAAQ;AACjE,UAAI,aAAa,SAAS,GAAmB,GAAG;AAC9C,QAAC,eAAuB,GAAG,IAAI,MAAM,GAAG;AAAA,MAC1C,OAAO;AACL,QAAC,eAAuB,GAAG,IAAI,MAAM,GAAG;AAAA,MAC1C;AAAA,IACF,CAAC;AAED,UAAM,WAAW,gBAAgB,cAAwB;AACzD,WACE;AAAA,MAAC,UAAU;AAAA,MAAV;AAAA,QACC,MAAK;AAAA,QACJ,GAAG;AAAA,QACJ,KAAK;AAAA,QACL,UAAU,eAAe,YAAY,CAAC;AAAA,QACtC,SAAS,qBAAqB,eAAe,SAAS,MAAM;AAC1D,qBAAW;AAAA,QACb,CAAC;AAAA;AAAA,IACH;AAAA,EAEJ,CAAC;AAED,eAAa,cAAc;AAE3B,SAAO;AACT;","names":[]}