{"version":3,"sources":["../src/factory.ts"],"sourcesContent":["import { DOMElements } from \"./system.utils\"\nimport { ChakraStyledOptions, HTMLChakraComponents, styled } from \"./system\"\nimport { As, ChakraComponent } from \"./system.types\"\n\ntype ChakraFactory = {\n  <T extends As, P extends object = {}>(\n    component: T,\n    options?: ChakraStyledOptions,\n  ): ChakraComponent<T, P>\n}\n\nfunction factory() {\n  const cache = new Map<DOMElements, ChakraComponent<DOMElements>>()\n\n  return new Proxy(styled, {\n    /**\n     * @example\n     * const Div = chakra(\"div\")\n     * const WithChakra = chakra(AnotherComponent)\n     */\n    apply(target, thisArg, argArray: [DOMElements, ChakraStyledOptions]) {\n      return styled(...argArray)\n    },\n    /**\n     * @example\n     * <chakra.div />\n     */\n    get(_, element: DOMElements) {\n      if (!cache.has(element)) {\n        cache.set(element, styled(element))\n      }\n      return cache.get(element)\n    },\n  }) as ChakraFactory & HTMLChakraComponents\n}\n/**\n * The Chakra factory serves as an object of chakra enabled JSX elements,\n * and also a function that can be used to enable custom component receive chakra's style props.\n *\n * @see Docs https://chakra-ui.com/docs/styled-system/chakra-factory\n */\nexport const chakra = factory()\n"],"mappings":";;;;;;AAWA,SAAS,UAAU;AACjB,QAAM,QAAQ,oBAAI,IAA+C;AAEjE,SAAO,IAAI,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMvB,MAAM,QAAQ,SAAS,UAA8C;AACnE,aAAO,OAAO,GAAG,QAAQ;AAAA,IAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,GAAG,SAAsB;AAC3B,UAAI,CAAC,MAAM,IAAI,OAAO,GAAG;AACvB,cAAM,IAAI,SAAS,OAAO,OAAO,CAAC;AAAA,MACpC;AACA,aAAO,MAAM,IAAI,OAAO;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;AAOO,IAAM,SAAS,QAAQ;","names":[]}