{"version":3,"file":"Code-B0uZfnIK.mjs","names":["Collapsible","CollapsiblePrimitive","Separator","SeparatorPrimitive","Collapsible","Separator"],"sources":["../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/separator.tsx","../src/components/code-collapsible-wrapper.tsx","../src/components/copy-button.tsx","../src/components/ui/badge.tsx","../src/blocks/Code.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n  return twMerge(clsx(inputs));\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"src/lib/utils\"\n\nconst buttonVariants = cva(\n  \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n        outline:\n          \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        ghost:\n          \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n        xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n        sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n        lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n        icon: \"size-9\",\n        \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n        \"icon-sm\": \"size-8\",\n        \"icon-lg\": \"size-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Button({\n  className,\n  variant = \"default\",\n  size = \"default\",\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean\n  }) {\n  const Comp = asChild ? Slot.Root : \"button\"\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      data-variant={variant}\n      data-size={size}\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Button, buttonVariants }\n","import { Collapsible as CollapsiblePrimitive } from \"radix-ui\"\n\nfunction Collapsible({\n  ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n  return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n  ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n  return (\n    <CollapsiblePrimitive.CollapsibleTrigger\n      data-slot=\"collapsible-trigger\"\n      {...props}\n    />\n  )\n}\n\nfunction CollapsibleContent({\n  ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n  return (\n    <CollapsiblePrimitive.CollapsibleContent\n      data-slot=\"collapsible-content\"\n      {...props}\n    />\n  )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","import * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"src/lib/utils\"\n\nfunction Separator({\n  className,\n  orientation = \"horizontal\",\n  decorative = true,\n  ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n  return (\n    <SeparatorPrimitive.Root\n      data-slot=\"separator\"\n      decorative={decorative}\n      orientation={orientation}\n      className={cn(\n        \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Separator }\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils.js\";\nimport { Button } from \"./ui/button.js\";\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from \"./ui/collapsible.js\";\nimport { Separator } from \"./ui/separator.js\";\n\n/**\n * shadcn 公式 docs の `code-collapsible-wrapper` 相当。長いコードブロックを\n * 折りたたみ、グラデーション付きのトリガーで開閉する。\n */\nexport function CodeCollapsibleWrapper({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof Collapsible>) {\n  const [isOpened, setIsOpened] = React.useState(false);\n\n  return (\n    <Collapsible\n      open={isOpened}\n      onOpenChange={setIsOpened}\n      className={cn(\"group/collapsible relative md:-mx-1\", className)}\n      {...props}\n    >\n      <CollapsibleTrigger asChild>\n        <div className=\"absolute top-1.5 right-9 z-10 flex items-center\">\n          <Button\n            variant=\"ghost\"\n            size=\"sm\"\n            className=\"h-7 rounded-md px-2 text-muted-foreground\"\n          >\n            {isOpened ? \"Collapse\" : \"Expand\"}\n          </Button>\n          <Separator orientation=\"vertical\" className=\"mx-1.5 h-4!\" />\n        </div>\n      </CollapsibleTrigger>\n      <CollapsibleContent\n        forceMount\n        className=\"relative mt-6 overflow-hidden data-[state=closed]:max-h-64 data-[state=closed]:[content-visibility:auto] [&>figure]:mt-0 [&>figure]:md:mx-0!\"\n      >\n        {children}\n      </CollapsibleContent>\n      <CollapsibleTrigger className=\"absolute inset-x-0 -bottom-2 flex h-20 items-center justify-center rounded-b-xl bg-gradient-to-b from-code/70 to-code text-sm text-muted-foreground group-data-[state=open]/collapsible:hidden\">\n        {isOpened ? \"Collapse\" : \"Expand\"}\n      </CollapsibleTrigger>\n    </Collapsible>\n  );\n}\n","\"use client\";\n\nimport { Check, Copy } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils.js\";\nimport { Button } from \"./ui/button.js\";\n\n/**\n * クリップボードへコピーするボタン。コピー後 2 秒だけチェックアイコンに切り替わる。\n * shadcn 公式 docs の `copy-button` 相当（アイコンは lucide-react）。\n *\n * @param value コピーする文字列\n */\nexport function CopyButton({\n  value,\n  className,\n  variant = \"ghost\",\n  ...props\n}: React.ComponentProps<typeof Button> & { value: string }) {\n  const [hasCopied, setHasCopied] = React.useState(false);\n\n  React.useEffect(() => {\n    if (!hasCopied) return;\n    const timer = setTimeout(() => setHasCopied(false), 2000);\n    return () => clearTimeout(timer);\n  }, [hasCopied]);\n\n  return (\n    <Button\n      data-slot=\"copy-button\"\n      size=\"icon\"\n      variant={variant}\n      className={cn(\"size-7 text-muted-foreground\", className)}\n      onClick={() => {\n        if (typeof navigator === \"undefined\" || !navigator.clipboard) return;\n        void navigator.clipboard.writeText(value);\n        setHasCopied(true);\n      }}\n      {...props}\n    >\n      <span className=\"sr-only\">{hasCopied ? \"Copied\" : \"Copy\"}</span>\n      {hasCopied ? <Check /> : <Copy />}\n    </Button>\n  );\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"src/lib/utils\"\n\nconst badgeVariants = cva(\n  \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n        secondary:\n          \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n        destructive:\n          \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n        outline:\n          \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n        ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n        link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nfunction Badge({\n  className,\n  variant = \"default\",\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"span\"> &\n  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot.Root : \"span\"\n\n  return (\n    <Comp\n      data-slot=\"badge\"\n      data-variant={variant}\n      className={cn(badgeVariants({ variant }), className)}\n      {...props}\n    />\n  )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\";\n\nimport type { CodeBlockObjectResponse } from \"@notionhq/client/build/src/api-endpoints\";\nimport { useEffect, useState } from \"react\";\nimport { CodeCollapsibleWrapper } from \"../components/code-collapsible-wrapper.js\";\nimport { CopyButton } from \"../components/copy-button.js\";\nimport { Badge } from \"../components/ui/badge.js\";\nimport { cn } from \"../lib/utils.js\";\nimport type { BlockComponentProps } from \"../types.js\";\n\n/** これを超える行数のコードは折りたたみ表示にする。 */\nconst COLLAPSE_LINE_THRESHOLD = 20;\n\n// DO/Worker 側のシンタックスハイライトはページアクセス時ではなく同期時に CPU を\n// 消費するため、既定はここでのクライアント遅延ハイライトにする。ハイライタは\n// モジュールスコープで再利用し、複数コードブロックがあっても 1 度だけロードする。\nlet highlighterPromise: Promise<{\n  codeToHtml(code: string, options: Record<string, unknown>): string;\n  loadLanguage(lang: string): Promise<void>;\n  getLoadedLanguages(): string[];\n} | null> | null = null;\n\nasync function loadHighlighter() {\n  try {\n    const shiki = await import(\"shiki\");\n    const { createJavaScriptRegexEngine } = await import(\n      \"shiki/engine/javascript\"\n    );\n    return (await shiki.createHighlighter({\n      themes: [\"github-light\", \"github-dark\"],\n      langs: [],\n      engine: createJavaScriptRegexEngine({ forgiving: true }),\n    })) as unknown as {\n      codeToHtml(code: string, options: Record<string, unknown>): string;\n      loadLanguage(lang: string): Promise<void>;\n      getLoadedLanguages(): string[];\n    };\n  } catch {\n    // shiki 未インストール時は素の <pre> フォールバックのまま。\n    return null;\n  }\n}\n\nasync function highlightClientSide(\n  source: string,\n  language: string,\n): Promise<string | null> {\n  highlighterPromise ??= loadHighlighter();\n  const highlighter = await highlighterPromise;\n  if (!highlighter) return null;\n  let lang = language;\n  if (!highlighter.getLoadedLanguages().includes(lang)) {\n    try {\n      await highlighter.loadLanguage(lang);\n    } catch {\n      lang = \"text\";\n    }\n  }\n  try {\n    return highlighter.codeToHtml(source, {\n      lang,\n      themes: { light: \"github-light\", dark: \"github-dark\" },\n      defaultColor: false,\n      transformers: [\n        {\n          pre(node: { properties: Record<string, unknown> }) {\n            node.properties.style = undefined;\n          },\n          code(node: { properties: Record<string, unknown> }) {\n            node.properties[\"data-line-numbers\"] = \"\";\n          },\n          line(node: { properties: Record<string, unknown> }) {\n            node.properties[\"data-line\"] = \"\";\n          },\n        },\n      ],\n    });\n  } catch {\n    return null;\n  }\n}\n\nfunction plainText(\n  richText: CodeBlockObjectResponse[\"code\"][\"rich_text\"],\n): string {\n  return richText.map((rt) => rt.plain_text).join(\"\");\n}\n\nfunction normalizeLanguage(lang: string): string {\n  const l = lang.trim().toLowerCase();\n  if (l === \"\" || l === \"plain text\" || l === \"plain_text\") return \"text\";\n  return lang;\n}\n\n/**\n * デフォルトの Code 描画。shadcn docs 風の枠（ヘッダー: ファイル名 + 言語ラベル +\n * コピーボタン、本体: シンタックスハイライト）。\n *\n * - `__cachedHtml`（`@notion-headless-cms/cms` の `createShikiTransform` 等が同期時に\n *   付与する事前ハイライト済み HTML）があればそれを最優先で描画する\n * - 無ければクライアント水和後に `shiki` を動的 import してハイライトする\n *   （Worker の CPU 予算を消費しない既定経路。`shiki` が peer として無ければスキップ）\n * - どちらも使えない場合は行番号付きの素の `<pre>` にフォールバックする\n * - 行数が多いコードは折りたたむ\n *\n * mermaid を SVG として描画したい場合は `@notion-headless-cms/react-renderer/mermaid`\n * の `MermaidCode` を `<NotionRenderer components={{ Code: MermaidCode }} />` で差し込む。\n */\nexport function Code({\n  block,\n  className,\n}: BlockComponentProps<CodeBlockObjectResponse>) {\n  const cachedHtml = (\n    block.code as CodeBlockObjectResponse[\"code\"] & { __cachedHtml?: string }\n  ).__cachedHtml;\n  const language = normalizeLanguage(block.code.language);\n  const source = plainText(block.code.rich_text);\n  const fileName = plainText(block.code.caption);\n  const lines = source.split(\"\\n\");\n  const [clientHtml, setClientHtml] = useState<string | null>(null);\n\n  useEffect(() => {\n    // import.meta.env.SSR は Vite が静的に置換する定数のため、この early return により\n    // 後続の highlightClientSide()（shiki の動的 import を含む）が SSR/Worker バンドルの\n    // 到達可能グラフから外れ、tree-shaking で除外される。\n    if (import.meta.env.SSR || cachedHtml) return;\n    let cancelled = false;\n    highlightClientSide(source, language).then((html) => {\n      if (!cancelled && html) setClientHtml(html);\n    });\n    return () => {\n      cancelled = true;\n    };\n  }, [cachedHtml, source, language]);\n\n  const html = cachedHtml ?? clientHtml;\n\n  const figure = (\n    <div\n      className={cn(\n        \"nhc-code group/code my-4 overflow-hidden rounded-xl border bg-card text-sm\",\n        className,\n      )}\n    >\n      <div className=\"flex items-center justify-between gap-2 border-b px-4 py-1.5\">\n        <div className=\"flex min-w-0 items-center gap-2\">\n          {fileName ? (\n            <span className=\"truncate font-mono text-xs text-muted-foreground\">\n              {fileName}\n            </span>\n          ) : null}\n          <Badge variant=\"secondary\" className=\"font-mono text-xs\">\n            {language}\n          </Badge>\n        </div>\n        <CopyButton value={source} className=\"-mr-2 shrink-0\" />\n      </div>\n      {html ? (\n        <div\n          className=\"nhc-code__content\"\n          // biome-ignore lint/security/noDangerouslySetInnerHtml: shiki の整形済み HTML\n          dangerouslySetInnerHTML={{ __html: html }}\n        />\n      ) : (\n        <pre data-language={language}>\n          <code data-line-numbers=\"\">\n            {lines.map((line, i) => (\n              // biome-ignore lint/suspicious/noArrayIndexKey: コード行は静的で並び替えされない\n              <span key={`${block.id}:${i}`} data-line=\"\">\n                {line === \"\" ? \"​\" : line}\n              </span>\n            ))}\n          </code>\n        </pre>\n      )}\n    </div>\n  );\n\n  if (lines.length > COLLAPSE_LINE_THRESHOLD) {\n    return <CodeCollapsibleWrapper>{figure}</CodeCollapsibleWrapper>;\n  }\n  return figure;\n}\n"],"mappings":"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"}