{
  "version": 3,
  "sources": ["../src/html.ts", "../node_modules/@substrate-system/copy-button/dist/html.js", "../src/constants.ts"],
  "sourcesContent": ["import { CopyButton } from '@substrate-system/copy-button/html'\nimport { DEFAULT_COPY_BUTTON_LABEL } from './constants.js'\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: (\n        options?:CodeBlockOptions,\n        attrs?:Record<string, AttrValue>\n    ) => 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 toSafeAttributes (attrs:Record<string, AttrValue>) {\n    return Object.keys(attrs).reduce((result, key) => {\n        const value = attrs[key]\n        if (!value) return result\n        if (typeof value === 'boolean') {\n            return value ? `${result} ${key}`.trim() : result\n        }\n        const text = Array.isArray(value) ? value.join(' ') : String(value)\n        return `${result} ${key}=\"${escapeHtml(text)}\"`.trim()\n    }, '')\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(\n            classValue.split(/\\s+/).filter(Boolean)\n        )\n    }\n    if (Array.isArray(classValue)) {\n        return getLanguageClassFromList(classValue)\n    }\n    return ''\n}\n\nfunction toCopyButtonMarkup (\n    code:string,\n    hint:string|boolean,\n    label:string\n) {\n    const attrs = toSafeAttributes({\n        'data-code-block-copy': true,\n        payload: code,\n        hint: hint !== false\n    })\n\n    const button = CopyButton({\n        classes: ['code-block-copy-icon'],\n        hint: typeof hint === 'string' ? escapeHtml(hint) : hint\n    }).replace(\n        'aria-label=\"Copy\"',\n        `aria-label=\"${escapeHtml(label)}\"`\n    )\n\n    return `<copy-button ${attrs}>${button}</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 = [\n        'code-block-pre',\n        languageClass\n    ].filter(Boolean).join(' ')\n    const codeClasses = [languageClass].filter(Boolean).join(' ')\n    const label = options.copyButtonLabel?.trim() ||\n        DEFAULT_COPY_BUTTON_LABEL\n    const safeCode = escapeHtml(code)\n    const codeClassAttr = codeClasses\n        ? ` class=\"${escapeHtml(codeClasses)}\"`\n        : ''\n    const preMarkup = (\n        `<pre class=\"${escapeHtml(preClasses)}\" tabindex=\"0\">` +\n        `<code data-code-block-code${codeClassAttr}>${safeCode}</code></pre>`\n    )\n\n    return `<div class=\"${escapeHtml(wrapperClasses)}\" data-code-block-root>\n        ${preMarkup}\n        <div class=\"code-block-controls\">\n            ${toCopyButtonMarkup(code, hint, label)}\n        </div>\n        <span class=\"visually-hidden\" data-code-block-live ` +\n        `aria-live=\"polite\"></span>\n    </div>`\n}\n\nCodeBlock.outerHTML = (\n    options:CodeBlockOptions = {},\n    attrs:Record<string, AttrValue> = {}\n) => {\n    const hostAttributes = toSafeAttributes(attrs)\n    const rendered = CodeBlock({\n        ...options,\n        languageClass: options.languageClass ??\n            getLanguageClassFromAttrs(attrs)\n    })\n\n    return `<code-block${hostAttributes.length ? ` ${hostAttributes}` : ''}>\n        ${rendered}\n    </code-block>`\n}\n", "var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// node_modules/@substrate-system/web-component/dist/attributes.js\nvar __defProp2 = Object.defineProperty;\nvar __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, \"name\", { value, configurable: true }), \"__name\");\nfunction toAttributes(attrs) {\n  return Object.keys(attrs).reduce((acc, k) => {\n    const value = attrs[k];\n    if (!value) return acc;\n    if (typeof value === \"boolean\") {\n      if (value) return (acc + ` ${k}`).trim();\n      return acc;\n    }\n    if (Array.isArray(value)) {\n      return acc + ` ${k}=\"${value.join(\" \")}\"`;\n    }\n    return (acc + ` ${k}=\"${value}\"`).trim();\n  }, \"\");\n}\n__name(toAttributes, \"toAttributes\");\n__name2(toAttributes, \"toAttributes\");\n\n// src/html.ts\nfunction CopyButton(options) {\n  let classes;\n  let hint;\n  if (Array.isArray(options)) {\n    classes = options;\n  } else if (options) {\n    classes = options.classes;\n    hint = options.hint;\n  }\n  const classString = (classes || []).concat([\"copy-button\"]).filter(Boolean).join(\" \");\n  let hintHtml = \"\";\n  if (hint !== void 0 && hint !== false) {\n    const hintText = hint === true || hint === \"\" ? \"Copied\" : hint;\n    hintHtml = `<span popover=\"manual\" class=\"copy-hint\" role=\"status\" aria-live=\"polite\">${hintText}</span>`;\n  }\n  return `<button aria-label=\"Copy\" ${classString ? `class=\"${classString}\"` : \"\"}>\n        ${CopySvg()}\n        <span class=\"visually-hidden\">Copy</span>\n    </button>${hintHtml}`;\n}\n__name(CopyButton, \"CopyButton\");\nCopyButton.outerHTML = (options, attrs = {}) => {\n  const attributes = toAttributes(attrs);\n  return `<copy-button${attributes.length ? ` ${attributes}` : \"\"}>\n        ${CopyButton(options)}\n    </copy-button>`;\n};\nfunction CopySvg() {\n  return `<span class=\"copy-wrapper\">\n        <svg\n            aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\"\n            focusable=\"false\"\n            width=\"16\" class=\"copy-svg\"\n        >\n            <path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path>\n        </svg>\n    </span>`;\n}\n__name(CopySvg, \"CopySvg\");\nfunction SuccessSvg() {\n  return `<span class=\"success-wrapper\">\n        <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\"\n            width=\"16\"\n            class=\"success-svg\"\n            focusable=\"false\"\n        >\n            <path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path>\n        </svg>\n    </span>`;\n}\n__name(SuccessSvg, \"SuccessSvg\");\nexport {\n  CopyButton,\n  CopySvg,\n  SuccessSvg\n};\n", "export const DEFAULT_COPY_BUTTON_LABEL = 'Copy code to clipboard'\n"],
  "mappings": "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",
  "names": ["html_exports", "__export", "CodeBlock", "__toCommonJS", "__defProp", "__name", "target", "value", "__defProp2", "__name2", "toAttributes", "attrs", "acc", "k", "CopyButton", "options", "classes", "hint", "classString", "hintHtml", "CopySvg", "attributes", "SuccessSvg", "DEFAULT_COPY_BUTTON_LABEL", "escapeHtml", "str", "__name", "toSafeAttributes", "attrs", "result", "key", "value", "text", "getLanguageClassFromList", "classNames", "name", "getLanguageClassFromAttrs", "classValue", "toCopyButtonMarkup", "code", "hint", "label", "button", "CopyButton", "CodeBlock", "options", "wrapperClasses", "languageClass", "preClasses", "codeClasses", "DEFAULT_COPY_BUTTON_LABEL", "safeCode", "codeClassAttr", "preMarkup", "hostAttributes", "rendered"]
}
