{
  "version": 3,
  "sources": ["../src/html.ts"],
  "sourcesContent": ["import { CopyButton } from '@substrate-system/copy-button/html'\nimport { toAttributes } from '@substrate-system/web-component/attributes'\n\nexport interface CodeBlockOptions {\n    code?:string\n    copyHint?:string|boolean\n    copyButtonLabel?:string\n    classes?:string[]\n    languageClass?:string\n}\n\ntype AttrValue = string|number|boolean|string[]|null|undefined\ntype CodeBlockRenderer = ((options?:CodeBlockOptions) => string) & {\n    outerHTML:(options?:CodeBlockOptions, attrs?:Record<string, AttrValue>) => string\n}\n\nfunction escapeHtml (str:string) {\n    return str\n        .replaceAll('&', '&amp;')\n        .replaceAll('<', '&lt;')\n        .replaceAll('>', '&gt;')\n        .replaceAll('\"', '&quot;')\n        .replaceAll(\"'\", '&#39;')\n}\n\nfunction getLanguageClassFromList (classNames:string[]) {\n    return classNames.find(name => name.startsWith('language-')) ?? ''\n}\n\nfunction getLanguageClassFromAttrs (attrs:Record<string, AttrValue>) {\n    const classValue = attrs.class\n    if (typeof classValue === 'string') {\n        return getLanguageClassFromList(classValue.split(/\\s+/).filter(Boolean))\n    }\n    if (Array.isArray(classValue)) {\n        return getLanguageClassFromList(classValue)\n    }\n    return ''\n}\n\nfunction toCopyButtonMarkup (code:string, hint:string|boolean) {\n    const attrs = toAttributes({\n        'data-code-block-copy': true,\n        payload: escapeHtml(code),\n        hint: hint !== false\n    })\n\n    return `<copy-button ${attrs}>${CopyButton({\n        classes: ['code-block-copy-icon'],\n        hint\n    })}</copy-button>`\n}\n\nexport const CodeBlock:CodeBlockRenderer = (options:CodeBlockOptions = {}) => {\n    const code = options.code ?? ''\n    const hint = options.copyHint ?? true\n    const wrapperClasses = ['code-block-inner']\n        .concat(options.classes ?? [])\n        .filter(Boolean)\n        .join(' ')\n    const languageClass = (\n        options.languageClass ??\n        (options.classes ?? []).find(name => name.startsWith('language-')) ??\n        ''\n    ).trim()\n    const preClasses = ['code-block-pre', languageClass].filter(Boolean).join(' ')\n    const codeClasses = [languageClass].filter(Boolean).join(' ')\n    const label = options.copyButtonLabel ?? 'Copy to clipboard'\n    const safeCode = escapeHtml(code)\n    const codeClassAttr = codeClasses ? ` class=\"${escapeHtml(codeClasses)}\"` : ''\n\n    return `<div class=\"${wrapperClasses}\" data-code-block-root>\n        <pre class=\"${escapeHtml(preClasses)}\"><code data-code-block-code${codeClassAttr}>${safeCode}</code></pre>\n        <div class=\"code-block-controls\">\n            ${toCopyButtonMarkup(code, hint)}\n        </div>\n        <span class=\"visually-hidden\" data-code-block-live aria-live=\"polite\">\n            ${escapeHtml(label)}\n        </span>\n    </div>`\n}\n\nCodeBlock.outerHTML = (\n    options:CodeBlockOptions = {},\n    attrs:Record<string, AttrValue> = {}\n) => {\n    const hostAttributes = toAttributes(attrs)\n    const rendered = CodeBlock({\n        ...options,\n        languageClass: options.languageClass ?? getLanguageClassFromAttrs(attrs)\n    })\n\n    return `<code-block${hostAttributes.length ? ` ${hostAttributes}` : ''}>\n        ${rendered}\n    </code-block>`\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA2B;AAC3B,wBAA6B;AAe7B,SAAS,WAAY,KAAY;AAC7B,SAAO,IACF,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,OAAO;AAChC;AAPS;AAST,SAAS,yBAA0B,YAAqB;AACpD,SAAO,WAAW,KAAK,UAAQ,KAAK,WAAW,WAAW,CAAC,KAAK;AACpE;AAFS;AAIT,SAAS,0BAA2B,OAAiC;AACjE,QAAM,aAAa,MAAM;AACzB,MAAI,OAAO,eAAe,UAAU;AAChC,WAAO,yBAAyB,WAAW,MAAM,KAAK,EAAE,OAAO,OAAO,CAAC;AAAA,EAC3E;AACA,MAAI,MAAM,QAAQ,UAAU,GAAG;AAC3B,WAAO,yBAAyB,UAAU;AAAA,EAC9C;AACA,SAAO;AACX;AATS;AAWT,SAAS,mBAAoB,MAAa,MAAqB;AAC3D,QAAM,YAAQ,gCAAa;AAAA,IACvB,wBAAwB;AAAA,IACxB,SAAS,WAAW,IAAI;AAAA,IACxB,MAAM,SAAS;AAAA,EACnB,CAAC;AAED,SAAO,gBAAgB,KAAK,QAAI,wBAAW;AAAA,IACvC,SAAS,CAAC,sBAAsB;AAAA,IAChC;AAAA,EACJ,CAAC,CAAC;AACN;AAXS;AAaF,MAAM,YAA8B,wBAAC,UAA2B,CAAC,MAAM;AAC1E,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,OAAO,QAAQ,YAAY;AACjC,QAAM,iBAAiB,CAAC,kBAAkB,EACrC,OAAO,QAAQ,WAAW,CAAC,CAAC,EAC5B,OAAO,OAAO,EACd,KAAK,GAAG;AACb,QAAM,iBACF,QAAQ,kBACP,QAAQ,WAAW,CAAC,GAAG,KAAK,UAAQ,KAAK,WAAW,WAAW,CAAC,KACjE,IACF,KAAK;AACP,QAAM,aAAa,CAAC,kBAAkB,aAAa,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC7E,QAAM,cAAc,CAAC,aAAa,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC5D,QAAM,QAAQ,QAAQ,mBAAmB;AACzC,QAAM,WAAW,WAAW,IAAI;AAChC,QAAM,gBAAgB,cAAc,WAAW,WAAW,WAAW,CAAC,MAAM;AAE5E,SAAO,eAAe,cAAc;AAAA,sBAClB,WAAW,UAAU,CAAC,+BAA+B,aAAa,IAAI,QAAQ;AAAA;AAAA,cAEtF,mBAAmB,MAAM,IAAI,CAAC;AAAA;AAAA;AAAA,cAG9B,WAAW,KAAK,CAAC;AAAA;AAAA;AAG/B,GA3B2C;AA6B3C,UAAU,YAAY,CAClB,UAA2B,CAAC,GAC5B,QAAkC,CAAC,MAClC;AACD,QAAM,qBAAiB,gCAAa,KAAK;AACzC,QAAM,WAAW,UAAU;AAAA,IACvB,GAAG;AAAA,IACH,eAAe,QAAQ,iBAAiB,0BAA0B,KAAK;AAAA,EAC3E,CAAC;AAED,SAAO,cAAc,eAAe,SAAS,IAAI,cAAc,KAAK,EAAE;AAAA,UAChE,QAAQ;AAAA;AAElB;",
  "names": []
}
