{"version":3,"file":"theme-D-jzYh6f.mjs","names":[],"sources":["../theme/components/InstallSnippet.tsx"],"sourcesContent":["/**\n * InstallSnippet — legacy JSX wrapper that renders an install command using\n * the same DOM contract as the Pagesmith markdown code renderer's frame chrome.\n *\n * The default `DocHome` layout no longer uses this component — it now\n * pre-renders the home `install` block through `processMarkdown` (see\n * `@pagesmith/docs/src/install.ts`) so the home snippet shares Shiki\n * highlighting, multi-line line numbers, frame chrome, and copy behavior with\n * `\\`\\`\\`<lang>` blocks elsewhere on the site.\n *\n * This component is retained for downstream consumers that import it directly\n * and was extended to accept multi-line scripts and a configurable frame so\n * its visual contract can match the new pipeline output.\n */\n\nimport { h } from \"@pagesmith/docs/jsx-runtime\";\n\ntype Props = {\n  command: string;\n  title?: string;\n  /** Defaults to `bash` so the legacy single-line install case stays a shell command. */\n  lang?: string;\n  /** Defaults to `terminal` to preserve the legacy chrome — switch to `code` for non-shell snippets. */\n  frame?: \"terminal\" | \"code\" | \"plain\";\n  /** Defaults to `true` for multi-line scripts and `false` for single-line input. */\n  showLineNumbers?: boolean;\n};\n\nconst TERMINAL_ICON = (\n  <svg\n    class=\"ps-code-language-icon ps-code-language-icon--terminal\"\n    viewBox=\"0 0 20 20\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    stroke-width=\"1.5\"\n    stroke-linecap=\"round\"\n    stroke-linejoin=\"round\"\n    aria-hidden=\"true\"\n  >\n    <rect x=\"3\" y=\"4\" width=\"14\" height=\"12\" rx=\"2\" />\n    <path d=\"M6.5 8.5 8.75 10.5 6.5 12.5\" />\n    <path d=\"M10.5 12.5h3\" />\n  </svg>\n);\n\nconst COPY_ICON = (\n  <svg\n    class=\"ps-code-copy-icon\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    stroke-width=\"1.5\"\n    stroke-linecap=\"round\"\n    stroke-linejoin=\"round\"\n    aria-hidden=\"true\"\n  >\n    <rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8\" rx=\"1.5\" />\n    <path d=\"M10.5 5.5V4a1.5 1.5 0 0 0-1.5-1.5H4A1.5 1.5 0 0 0 2.5 4v5A1.5 1.5 0 0 0 4 10.5h1.5\" />\n  </svg>\n);\n\nconst COPIED_ICON = (\n  <svg\n    class=\"ps-code-copy-icon ps-code-copy-icon--copied\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    stroke-width=\"1.5\"\n    stroke-linecap=\"round\"\n    stroke-linejoin=\"round\"\n    aria-hidden=\"true\"\n  >\n    <path d=\"M3.5 9 6.5 12 12.5 4.5\" />\n  </svg>\n);\n\nfunction splitLines(command: string): string[] {\n  const normalized = command.replace(/\\r\\n/g, \"\\n\").replace(/\\s+$/, \"\");\n  return normalized.length > 0 ? normalized.split(\"\\n\") : [\"\"];\n}\n\nexport function InstallSnippet({\n  command,\n  title = \"Terminal\",\n  lang = \"bash\",\n  frame = \"terminal\",\n  showLineNumbers,\n}: Props) {\n  const lines = splitLines(command);\n  const includeLineNumbers = showLineNumbers ?? lines.length > 1;\n  const isTerminal = frame === \"terminal\";\n\n  return (\n    <figure\n      class=\"ps-code-block\"\n      data-ps-code-lang={lang}\n      data-ps-code-wrap=\"false\"\n      data-ps-code-line-numbers={includeLineNumbers ? \"true\" : \"false\"}\n      data-ps-code-renderer=\"pagesmith\"\n      data-ps-code-title={title}\n      data-ps-code-frame={frame}\n      style=\"--ps-code-light-bg:#fff;--ps-code-dark-bg:#24292e;--ps-code-light-fg:#24292e;--ps-code-dark-fg:#e1e4e8\"\n    >\n      <div class={`ps-code-toolbar ps-code-toolbar--${frame}`}>\n        <div\n          class={`ps-code-toolbar-main ps-code-toolbar-main--${isTerminal ? \"terminal\" : \"code\"}`}\n        >\n          {isTerminal ? (\n            <span class=\"ps-code-traffic-lights\" aria-hidden=\"true\">\n              <span class=\"ps-code-traffic-light\" />\n              <span class=\"ps-code-traffic-light\" />\n              <span class=\"ps-code-traffic-light\" />\n            </span>\n          ) : null}\n          <span class=\"ps-code-toolbar-chip\">\n            {isTerminal ? (\n              <span\n                class=\"ps-code-language-badge ps-code-language-badge--icon\"\n                data-ps-code-language={lang}\n                style=\"--ps-code-language-badge-bg:#111827;--ps-code-language-badge-fg:#86efac\"\n                aria-hidden=\"true\"\n                title=\"Shell\"\n              >\n                {TERMINAL_ICON}\n              </span>\n            ) : null}\n            <span class=\"ps-code-toolbar-label\">{title}</span>\n          </span>\n        </div>\n        <button\n          class=\"ps-code-copy\"\n          type=\"button\"\n          data-ps-code-copy=\"true\"\n          data-copy-label=\"Copy\"\n          data-copied-label=\"Copied\"\n          data-error-label=\"Retry\"\n          aria-label=\"Copy code block\"\n          title=\"Copy\"\n        >\n          {COPY_ICON}\n          {COPIED_ICON}\n        </button>\n      </div>\n      <div class=\"ps-code-body\">\n        <pre\n          class=\"ps-code-pre shiki shiki-themes\"\n          tabindex=\"0\"\n          role=\"region\"\n          aria-label={title}\n          style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\"\n        >\n          <code class={`ps-code-code language-${lang}`}>\n            {lines.map((line, index) => (\n              <span class=\"ps-code-line\" data-ps-code-line={String(index + 1)}>\n                {includeLineNumbers ? (\n                  <span class=\"ps-code-line-number\" aria-hidden=\"true\">\n                    {String(index + 1)}\n                  </span>\n                ) : null}\n                <span class=\"ps-code-line-content\">{line}</span>\n              </span>\n            ))}\n          </code>\n        </pre>\n      </div>\n    </figure>\n  );\n}\n"],"mappings":"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"}