{"version":3,"file":"elementFactory.mjs","names":[],"sources":["../../../src/lib/elementFactory.ts"],"sourcesContent":["import { mapAttributeToReactProperty } from \"@/lib/mapAttributeToReactProperty\";\nimport clsx from \"clsx\";\nimport { createElement } from \"react\";\nimport { mapKeys } from \"remeda\";\n\ntype ElementTagNameMap = HTMLElementTagNameMap &\n  Pick<\n    SVGElementTagNameMap,\n    Exclude<keyof SVGElementTagNameMap, keyof HTMLElementTagNameMap>\n  >;\n\ninterface Options {\n  isVoidElement?: boolean;\n}\n\nexport const elementFactory =\n  <E extends keyof ElementTagNameMap>(element: E, options: Options = {}) =>\n  (props: Record<string, unknown>) => {\n    const result = { ...props };\n    const { isVoidElement = false } = options;\n\n    if (isVoidElement) {\n      delete result[\"children\"];\n    }\n\n    // merge className and class\n    result[\"className\"] = clsx(\n      \"className\" in result && String(result[\"className\"]),\n      \"class\" in result && String(result[\"class\"]),\n    );\n\n    delete result[\"class\"];\n\n    return createElement(element, mapKeys(result, mapAttributeToReactProperty));\n  };\n"],"mappings":";;;;;;;AAeA,IAAa,kBACyB,SAAY,UAAmB,CAAC,OACnE,UAAmC;CAClC,MAAM,SAAS,EAAE,GAAG,MAAM;CAC1B,MAAM,EAAE,gBAAgB,UAAU;CAElC,IAAI,eACF,OAAO,OAAO;CAIhB,OAAO,eAAe,KACpB,eAAe,UAAU,OAAO,OAAO,YAAY,GACnD,WAAW,UAAU,OAAO,OAAO,QAAQ,CAC7C;CAEA,OAAO,OAAO;CAEd,OAAO,cAAc,SAAS,QAAQ,QAAQ,2BAA2B,CAAC;AAC5E"}