{"version":3,"sources":["../../src/utils/createActionButton.tsx"],"sourcesContent":["import {\n  ComponentRef,\n  forwardRef,\n  ComponentPropsWithoutRef,\n  MouseEventHandler,\n} from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\ntype ActionButtonCallback<TProps> = (\n  props: TProps,\n) => MouseEventHandler<HTMLButtonElement> | null;\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 = ComponentRef<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) ?? undefined;\n    return (\n      <Primitive.button\n        type=\"button\"\n        {...primitiveProps}\n        ref={forwardedRef}\n        disabled={primitiveProps.disabled || !callback}\n        onClick={composeEventHandlers(primitiveProps.onClick, callback)}\n      />\n    );\n  });\n\n  ActionButton.displayName = displayName;\n\n  return ActionButton;\n};\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,OAGK;AACP,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AAmC/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,KAAK;AAC9D,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,QAAQ;AAAA;AAAA,IAChE;AAAA,EAEJ,CAAC;AAED,eAAa,cAAc;AAE3B,SAAO;AACT;","names":[]}