{"version":3,"sources":["jsdelivr-header.js","/npm/react-rainbow-ascii@1.0.3/src/index.tsx"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,kQCcM,MAAwB,SAAA,G,QAC5B,kBAAO,SAAA,E,IACP,sBAAU,E,IACV,kBAAO,Q,IACP,sBAAW,MAAA,EACX,O,EAE0B,eAAiB,GAApC,OAAO,O,EACY,eAAiB,GAApC,OAAO,O,EAC0B,eAAiB,IAAlD,OAAc,OACf,EAAU,aAAuB,MACjC,EAAY,aAAuB,MACnC,EAAQ,EAAM,MAAM,MAAM,QAAO,SAAC,GACtC,OAAO,EAAK,OAAO,OAAS,CAC7B,KAAK,CAAC,KACD,EAAgB,EAAU,QAAU,EAAU,QAAQ,YAAc,IAGpE,EACiB,GAHJ,EAAM,GAAK,EAAM,GAAG,OAAS,GACvB,IAEqB,EACxC,EAAW,EAAiB,EAAe,EAAiB,EAElE,uBAAgB,WAEd,OAAO,UAAU,QAAS,GAC1B,OAAO,KAAK,EAAM,CAAE,KAAM,UAAW,SAAC,EAAM,GAAP,OACnC,EAAS,EAD0B,IAGrC,IAAM,EAAiB,WACjB,EAAQ,UACV,EAAS,EAAQ,QAAQ,aACzB,EACE,WACE,OACG,iBAAiB,EAAQ,SACzB,iBAAiB,eAI3B,EAGD,OAFI,EAAQ,SAAS,IACrB,OAAO,iBAAiB,SAAU,GAC3B,kBAAM,OAAO,oBAAoB,SAAU,EAA3C,CACR,GAAE,CAAC,EAAQ,QAAS,IAErB,IAAM,EAAa,IAAU,EA2BvB,EAAoC,CACxC,SAAa,QACb,SAAU,WACV,WAAY,UAER,EAAW,oBAAsB,EAAE,IAAO,EAAO,IACvD,OACE,6BAAA,OAAK,IAAK,EAAS,UAAW,EAAa,MAAO,E,aAAkB,GACjE,EACC,6BAAC,eAAD,KACE,6BAAA,iBAAY,EAAZ,oBAA2C,EAA3C,2CAAiG,EAAjG,QACC,EAAU,8BArCC,WAClB,IAAM,EAAa,EAAM,KAAI,SAAC,EAAO,GACnC,OAAO,MAAM,KAAK,OAAO,KAAI,SAAC,EAAI,GAAL,OAI/B,SAAqB,EAAc,GACjC,OACE,KAAK,MACqD,IAAxD,KAAK,IAAK,KAAK,GAAK,EAAM,OAAU,EAAI,EAAO,IAC7C,GAEP,CATG,CAAY,EAAO,EAAO,KAAK,GAAK,EAAK,EADd,GAG9B,IAQD,OACE,6BAAC,eAAD,KACG,EAAM,KAAI,SAAC,EAAM,G,MACW,EAAW,GAA/B,OAAK,OAAM,OAClB,OACE,6BAAA,OAAK,IAAK,EAAG,MAAO,CAAE,MAAK,OAAS,EAAT,IAAgB,EAAhB,IAAyB,EAAzB,MACxB,EAGN,IAGN,GAYkB,MAAc,6BAAA,WAAM,IAGjC,oBAAc,EAAU,KAAM,CAAC,IAEjC,6BAAA,OAAK,IAAK,EAAW,MAAO,GAA5B,KAKL,E","file":"/npm/react-rainbow-ascii@1.0.3/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/react-rainbow-ascii@1.0.3/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import React, {\n  FC,\n  useState,\n  useLayoutEffect,\n  useRef,\n  createElement,\n  Fragment\n} from 'react'\nimport figlet from 'figlet'\n// @ts-ignore\nimport slant from 'figlet/importable-fonts/Slant.js'\n\ninterface ASCIIProps {\n  text?: string\n  rainbow?: boolean\n  fallback?: string\n  font?: figlet.Fonts\n  id?: string\n}\n\nconst ASCII: FC<ASCIIProps> = ({\n  text = 'Hello!',\n  rainbow = true,\n  font = slant,\n  fallback = 'pre',\n  id\n}) => {\n  const [ascii, setAscii] = useState<string>(text)\n  const [width, setWidth] = useState<number>(0)\n  const [baseFontSize, setBaseFontSize] = useState<number>(16)\n  const preWrap = useRef<HTMLDivElement>(null)\n  const widthTest = useRef<HTMLPreElement>(null)\n  const lines = ascii.split('\\n').filter((line) => {\n    return line.trim().length > 0\n  }) || [' ']\n  const measuredWidth = widthTest.current ? widthTest.current.offsetWidth : 100\n  const lineLength = lines[0] ? lines[0].length : 1\n  const measuredFontSize = 100\n  const targetFontSize =\n    (measuredFontSize * (width / lineLength)) / measuredWidth\n  const fontSize = targetFontSize < baseFontSize ? targetFontSize : baseFontSize\n\n  useLayoutEffect(() => {\n    // @ts-ignore\n    figlet.parseFont('Slant', font)\n    figlet.text(text, { font: 'Slant' }, (_err, data) =>\n      setAscii(data as string)\n    )\n    const getParentWidth = () => {\n      if (preWrap.current) {\n        setWidth(preWrap.current.offsetWidth)\n        setBaseFontSize(\n          parseFloat(\n            window\n              .getComputedStyle(preWrap.current)\n              .getPropertyValue('font-size')\n          )\n        )\n      }\n    }\n    if (preWrap.current) getParentWidth()\n    window.addEventListener('resize', getParentWidth)\n    return () => window.removeEventListener('resize', getParentWidth)\n  }, [preWrap.current, text])\n\n  const hasMounted = ascii !== text // If they're equal, figlet hasn't been applied\n  const Rainbow: FC = () => {\n    const lineColors = lines.map((_line, line) => {\n      return Array.from('rbg').map((_c, rbgi) =>\n        getPhaseRBG(line, (rbgi * Math.PI * 2) / 3)\n      )\n    })\n    function getPhaseRBG(rbgi: number, phase: number) {\n      return (\n        Math.floor(\n          Math.sin((Math.PI / lines.length) * 2 * rbgi + phase) * 127\n        ) + 128\n      )\n    }\n    return (\n      <Fragment>\n        {lines.map((line, i) => {\n          const [red, blue, green] = lineColors[i]\n          return (\n            <pre key={i} style={{ color: `rgb(${red},${green},${blue})` }}>\n              {line}\n            </pre>\n          )\n        })}\n      </Fragment>\n    )\n  }\n  const measureStyle: React.CSSProperties = {\n    fontSize: `${measuredFontSize}px`,\n    position: 'absolute',\n    visibility: 'hidden'\n  }\n  const uniqueClass = `responsive-ascii${id ? `-${id}` : ''}`\n  return (\n    <div ref={preWrap} className={uniqueClass} title={text} aria-label={text}>\n      {hasMounted ? (\n        <Fragment>\n          <style>{`.${uniqueClass} {width: 100%;} .${uniqueClass} pre {margin: 0; padding: 0; font-size: ${fontSize}px;}`}</style>\n          {rainbow ? <Rainbow /> : <pre>{ascii}</pre>}\n        </Fragment>\n      ) : (\n        createElement(fallback, null, [ascii])\n      )}\n      <pre ref={widthTest} style={measureStyle}>\n        &nbsp;\n      </pre>\n    </div>\n  )\n}\n\nexport default ASCII\n"]}