{"version":3,"file":"code-window.cjs","names":[],"sources":["../src/content/code-window/code-window.ts"],"sourcesContent":["import { define, html, prop, when } from '@vielzeug/ore';\nimport { computed } from '@vielzeug/ripple';\n\nimport componentStyles from './code-window.css?inline';\n\n/** `ore-code-window` variant */\nexport type CodeWindowVariant = 'code' | 'chat';\n\n/** `ore-code-window` component properties */\nexport type OreCodeWindowProps = {\n  /** Filename label shown after the language badge (`variant=\"code\"` only) */\n  filename?: string;\n  /** Language badge text, e.g. `\"ts\"`, `\"sh\"` (`variant=\"code\"` only) */\n  lang?: string;\n  /** Title string shown beside the traffic-light dots (`variant=\"chat\"` only) */\n  title?: string;\n  /**\n   * `\"code\"` (default) — header shows a language badge + filename.\n   * `\"chat\"` — header shows traffic-light dots + a title.\n   */\n  variant?: CodeWindowVariant;\n};\n\n/**\n * A styled window chrome for code blocks and AI/MCP conversation flows.\n *\n * Two variants:\n * - `variant=\"code\"` (default) — language badge + optional filename header.\n * - `variant=\"chat\"` — traffic-light dots + title header.\n *\n * @element ore-code-window\n *\n * @attr {'code'|'chat'} variant - Window style variant\n * @attr {string} lang - Language badge label (variant=\"code\" only)\n * @attr {string} filename - Filename shown next to the badge (variant=\"code\" only)\n * @attr {string} title - Label beside the dots (variant=\"chat\" only)\n *\n * @slot - Main body content (code, conversation turns, or any markup)\n * @slot header-end - Optional content appended to the trailing edge of the header\n *\n * @cssprop --code-window-bg - Window background color\n * @cssprop --code-window-header-bg - Header background color\n * @cssprop --code-window-border-color - Border color\n * @cssprop --code-window-radius - Border radius\n * @cssprop --code-window-shadow - Box shadow\n * @cssprop --code-window-body-padding - Body slot padding\n *\n * @part window - The root window element\n * @part header - The header bar\n * @part lang - The language badge (`variant=\"code\"`)\n * @part filename - The filename label (`variant=\"code\"`)\n * @part dots - The traffic-light dot container (`variant=\"chat\"`)\n * @part title - The title label (`variant=\"chat\"`)\n * @part body - The body container wrapping the default slot\n *\n * @example\n * ```html\n * <ore-code-window lang=\"ts\" filename=\"app.ts\">\n *   <pre>const x = 1;</pre>\n * </ore-code-window>\n *\n * <ore-code-window variant=\"chat\" title=\"MCP tool call\">\n *   <!-- conversation turns go here -->\n * </ore-code-window>\n * ```\n */\nexport const CODE_WINDOW_TAG = 'ore-code-window' as const;\ndefine<OreCodeWindowProps>(CODE_WINDOW_TAG, {\n  props: {\n    filename: prop.string(),\n    lang: prop.string('ts'),\n    title: prop.string('MCP tool call'),\n    variant: prop.oneOf(['code', 'chat'] as const, 'code'),\n  },\n  setup(props) {\n    const isCode = computed(() => props.variant.value === 'code');\n    const hasFilename = computed(() => Boolean(props.filename.value));\n\n    return html`\n      <div class=\"window\" part=\"window\">\n        <div class=\"header\" part=\"header\">\n          ${when(\n            isCode,\n            () => html`\n              <span class=\"lang\" part=\"lang\">${props.lang}</span>\n              ${when(\n                hasFilename,\n                () => html`\n                  <span class=\"filename\" part=\"filename\">${props.filename}</span>\n                `,\n              )}\n            `,\n            () => html`\n              <div class=\"dots\" part=\"dots\" aria-hidden=\"true\">\n                <span></span>\n                <span></span>\n                <span></span>\n              </div>\n              <span class=\"title\" part=\"title\">${props.title}</span>\n            `,\n          )}\n          <div class=\"header-spacer\"></div>\n          <slot name=\"header-end\"></slot>\n        </div>\n        <div class=\"body\" part=\"body\">\n          <slot></slot>\n        </div>\n      </div>\n    `;\n  },\n  styles: [componentStyles],\n});\n"],"mappings":"6LAkEA,IAAa,EAAkB,mBAC/B,EAAA,EAAA,OAAA,CAA2B,EAAiB,CAC1C,MAAO,CACL,SAAU,EAAA,KAAK,OAAO,EACtB,KAAM,EAAA,KAAK,OAAO,IAAI,EACtB,MAAO,EAAA,KAAK,OAAO,eAAe,EAClC,QAAS,EAAA,KAAK,MAAM,CAAC,OAAQ,MAAM,EAAY,MAAM,CACvD,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAS,EAAA,SAAA,KAAe,EAAM,QAAQ,QAAU,MAAM,EACtD,GAAA,EAAc,EAAA,SAAA,KAAe,EAAQ,EAAM,SAAS,KAAM,EAEhE,MAAO,GAAA,IAAI;;;aAGH,EAAA,EAAA,KAAA,CACA,MACM,EAAA,IAAI;+CACyB,EAAM,KAAK;iBAC1C,EAAA,EAAA,KAAA,CACA,MACM,EAAA,IAAI;2DACiC,EAAM,SAAS;iBAE5D,EAAE;kBAEE,EAAA,IAAI;;;;;;iDAM2B,EAAM,MAAM;aAEnD,EAAE;;;;;;;;KASV,EACA,OAAQ,CAAC,EAAA,OAAe,CAC1B,CAAC"}