{"version":3,"file":"client.mjs","names":["#shadow","#render"],"sources":["../app/data.ts","../app/styles.ts","../app/footnote-skeleton.ts","../app/widget/harness.ts","../app/client.ts"],"sourcesContent":["export const FOOTNOTE_TEXT =\n  \"Die von uns verwendeten Formen beziehen sich zur besseren Lesbarkeit gleichermaßen auf alle Geschlechter.\";\n","/** @param hostSelector `:host` (shadow) or a light-DOM root class */\nexport function buildFootnoteStyles(hostSelector: string): string {\n  const h = hostSelector;\n  return `\n${h} {\n  display: block;\n  width: 100%;\n  box-sizing: border-box;\n  background: transparent;\n  min-height: 0;\n  text-align: left;\n}\n${h} *, ${h} *::before, ${h} *::after { box-sizing: border-box; }\n${h} .root {\n  margin: 0;\n  padding: 0;\n  font-size: 12px;\n  line-height: 18px;\n  color: #666666;\n  font-weight: normal;\n  max-width: 100%;\n  text-align: left;\n}\n`.trim();\n}\n","/**\n * SSR- und Harness-Skeleton: ein Markup/ein Style-String, damit Server-Export und\n * Client-Harness (`/client`, `/skeleton`) übereinstimmen.\n */\nimport { FOOTNOTE_TEXT } from \"./data\";\nimport { buildFootnoteStyles } from \"./styles\";\n\nexport const FOOTNOTE_SKEL_ROOT_CLASS = \"c24-lp-footnote-skel-mirror\";\n\nconst LINE = () =>\n  `<span class=\"c24-lp-fn-line\" aria-hidden=\"true\"><span class=\"c24-lp-fn-bar skeleton\"></span></span>`;\n\nconst repeatLines = (count: number) =>\n  Array.from({ length: count }, () => LINE()).join(\"\");\n\n/** Mess-Text bestimmt Breite/Umbruch und Blockhöhe; Zeilen-Stack wird vertikal beschnitten. */\nfunction buildSkeletonHtml(): string {\n  const root = FOOTNOTE_SKEL_ROOT_CLASS;\n  return `\n<div class=\"${root}\">\n  <p class=\"root c24-lp-fn-el\">\n    <span class=\"c24-lp-fn-measure\">${FOOTNOTE_TEXT}</span>\n    <span class=\"c24-lp-fn-lines\" aria-hidden=\"true\">${repeatLines(3)}</span>\n  </p>\n</div>`.trim();\n}\n\nconst SKELETON_SHIMMER_STYLE = `\n.${FOOTNOTE_SKEL_ROOT_CLASS} {\n  --skeleton-dark: rgb(235, 235, 235);\n  --skeleton-light: rgb(245, 246, 245);\n  --sk-slot: 18px;\n  --sk-gap: 4px;\n  --sk-bar: calc(var(--sk-slot) - var(--sk-gap));\n}\n.${FOOTNOTE_SKEL_ROOT_CLASS} .skeleton {\n  background: var(--skeleton-dark);\n  border-radius: 90px;\n  animation: c24-fn-skeleton-pulse 1100ms ease-in-out 100ms infinite;\n}\n@keyframes c24-fn-skeleton-pulse {\n  0%, 9%, 100% { background-color: var(--skeleton-dark); }\n  50%, 59% { background-color: var(--skeleton-light); }\n}\n.${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-el {\n  position: relative;\n}\n.${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-measure {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 1;\n  line-clamp: 1;\n  width: 100%;\n  overflow: hidden;\n  opacity: 0;\n  pointer-events: none;\n  user-select: none;\n}\n.${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-lines {\n  position: absolute;\n  inset: 0;\n  z-index: 1;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  max-height: var(--sk-slot);\n  pointer-events: none;\n}\n@media (max-width: 609px) {\n  .${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-measure {\n    -webkit-line-clamp: 2;\n    line-clamp: 2;\n  }\n  .${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-lines {\n    max-height: calc(2 * var(--sk-slot));\n  }\n}\n@media (max-width: 329px) {\n  .${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-measure {\n    -webkit-line-clamp: 3;\n    line-clamp: 3;\n  }\n  .${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-lines {\n    max-height: calc(3 * var(--sk-slot));\n  }\n}\n.${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-line {\n  display: flex;\n  align-items: center;\n  flex-shrink: 0;\n  min-height: var(--sk-slot);\n}\n.${FOOTNOTE_SKEL_ROOT_CLASS} .c24-lp-fn-bar {\n  width: 100%;\n  height: var(--sk-bar);\n  border-radius: 90px;\n}\n`.trim();\n\nexport const FOOTNOTE_SKELETON_HTML = buildSkeletonHtml();\n\nexport const FOOTNOTE_SKELETON_STYLE = `${buildFootnoteStyles(`.${FOOTNOTE_SKEL_ROOT_CLASS}`)}\\n${SKELETON_SHIMMER_STYLE}`;\n","/**\n * Lokal/Dev — gleiche Idee wie reviews/comparisons: nicht nur localhost,\n * damit Docker (host.docker.internal) und LAN-IPs den Harness (/client, /skeleton) erkennen.\n */\nfunction isHarnessHost(hostname: string): boolean {\n  if (\n    hostname === \"localhost\" ||\n    hostname === \"[::1]\" ||\n    hostname === \"::1\" ||\n    hostname === \"127.0.0.1\" ||\n    hostname.startsWith(\"127.\") ||\n    hostname === \"host.docker.internal\"\n  ) {\n    return true;\n  }\n  if (/^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/.test(hostname)) {\n    return true;\n  }\n  if (/^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(hostname)) {\n    return true;\n  }\n  return /^172\\.(1[6-9]|2\\d|3[01])\\.\\d{1,3}\\.\\d{1,3}$/.test(hostname);\n}\n\n/** Widget-Pipeline: `http://127.0.0.1:<port>/client` (auch `/pkg/client` im Multi-Dev-Hub). */\nexport function isLayoutCheckHarness(): boolean {\n  if (typeof window === \"undefined\") return false;\n  const { hostname, pathname } = window.location;\n  if (!isHarnessHost(hostname)) return false;\n  const p = pathname.endsWith(\"/\") && pathname.length > 1 ? pathname.slice(0, -1) : pathname;\n  return p === \"/client\" || p.endsWith(\"/client\");\n}\n\n/** Layout-Check `/skeleton`: gleiche Shell wie `/client` (CE + Shadow), damit Root-Maße übereinstimmen. */\nexport function isSkeletonHarnessRoute(): boolean {\n  if (typeof window === \"undefined\") return false;\n  const { hostname, pathname } = window.location;\n  if (!isHarnessHost(hostname)) return false;\n  const p = pathname.endsWith(\"/\") && pathname.length > 1 ? pathname.slice(0, -1) : pathname;\n  return p === \"/skeleton\" || p.endsWith(\"/skeleton\");\n}\n","import type { HomeClientComponentElement } from \"../.check24-home/types/client\";\nimport { FOOTNOTE_SKELETON_HTML, FOOTNOTE_SKELETON_STYLE } from \"./footnote-skeleton\";\nimport { FOOTNOTE_TEXT } from \"./data\";\nimport { buildFootnoteStyles } from \"./styles\";\nimport { isLayoutCheckHarness, isSkeletonHarnessRoute } from \"./widget/harness\";\n\nclass Check24LpFootnote extends HTMLElement implements HomeClientComponentElement {\n  #shadow: ShadowRoot;\n\n  constructor() {\n    super();\n    this.#shadow = this.attachShadow({ mode: \"closed\" });\n  }\n\n  connectedCallback(): void {\n    this.innerHTML = \"\";\n    if (isLayoutCheckHarness() || isSkeletonHarnessRoute()) {\n      this.setAttribute(\"data-lp-footnote-layout-check\", \"\");\n      this.#shadow.innerHTML = `<style>${FOOTNOTE_SKELETON_STYLE}</style>${FOOTNOTE_SKELETON_HTML}`;\n      return;\n    }\n    this.removeAttribute(\"data-lp-footnote-layout-check\");\n    this.#render();\n  }\n\n  #render(): void {\n    this.#shadow.innerHTML = `\n      <style>${buildFootnoteStyles(\":host\")}</style>\n      <p class=\"root\" lang=\"de\">${FOOTNOTE_TEXT}</p>\n    `;\n  }\n}\n\n// String-Literal im `define` — SlugTagMatchStep (Pipeline) parst `customElements.define('…', …)`.\nif (!customElements.get(\"check24-lp-footnote\")) {\n  customElements.define(\"check24-lp-footnote\", Check24LpFootnote);\n}\n"],"mappings":"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"}