): import("react").JSX.Element;
//#endregion
//#region src/blocks/Code.d.ts
/**
* デフォルトの Code 描画。shadcn docs 風の枠(ヘッダー: ファイル名 + 言語ラベル +
* コピーボタン、本体: シンタックスハイライト)。
*
* - `__cachedHtml`(`@notion-headless-cms/cms` の `createShikiTransform` 等が同期時に
* 付与する事前ハイライト済み HTML)があればそれを最優先で描画する
* - 無ければクライアント水和後に `shiki` を動的 import してハイライトする
* (Worker の CPU 予算を消費しない既定経路。`shiki` が peer として無ければスキップ)
* - どちらも使えない場合は行番号付きの素の `` にフォールバックする
* - 行数が多いコードは折りたたむ
*
* mermaid を SVG として描画したい場合は `@notion-headless-cms/react-renderer/mermaid`
* の `MermaidCode` を `` で差し込む。
*/
declare function Code({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Column.d.ts
declare function Column({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/ColumnList.d.ts
declare function ColumnList({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Divider.d.ts
declare function Divider({
className
}?: Pick): import("react").JSX.Element;
//#endregion
//#region src/blocks/Embed.d.ts
declare function Embed({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Equation.d.ts
/**
* ブロック equation の既定描画。
* `notion-katex` enricher が付与した `__cachedHtml` があればそれを使い、無ければ
* クライアントで `katex` を動的 import して `displayMode: true` で組版する。
* peer に `katex` が無いか KaTeX が失敗したら原文を `` で出す。
*/
declare function Equation({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/File.d.ts
declare function File({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Heading.d.ts
type HeadingBlock = Heading1BlockObjectResponse | Heading2BlockObjectResponse | Heading3BlockObjectResponse | Heading4BlockObjectResponse;
declare function Heading({
block,
className: extra
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Image.d.ts
declare function Image({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/LinkPreview.d.ts
/**
* link_preview ブロックの既定描画。`block.ogp`(同期時付与)優先、無ければ `useOgp`
* がページアクセス時にクライアントから取得する。それも無ければリンクのみの
* HoverCard にフォールバックする。
*/
declare function LinkPreview({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/LinkToPage.d.ts
declare function LinkToPage({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/NumberedListItem.d.ts
declare function NumberedListItem({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Paragraph.d.ts
declare function Paragraph({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Pdf.d.ts
declare function Pdf({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Quote.d.ts
declare function Quote({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/SyncedBlock.d.ts
declare function SyncedBlock({
block
}: BlockComponentProps): import("react").JSX.Element | null;
//#endregion
//#region src/blocks/Table.d.ts
declare function Table({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/TableOfContents.d.ts
/**
* ページ内の heading_1..4 をリンクリストとして描画する。
* 見出しは NotionRenderer が抽出して Context に流すため、ここでは読み取るだけ。
*
* ScrollArea を使わずに `overflow-y-auto` 直書きにしているのは、Radix の
* 内部ラッパが `display:table` を被せるため `truncate` が機能しなくなり、
* 長い見出しテキストが横に溢れて視覚的に重なるのを避けるため。
*/
declare function TableOfContents({
className
}?: Pick): import("react").JSX.Element | null;
//#endregion
//#region src/blocks/ToDo.d.ts
declare function ToDo({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Toggle.d.ts
declare function Toggle({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Unsupported.d.ts
declare function Unsupported({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
//#endregion
//#region src/blocks/Video.d.ts
declare function Video({
block,
className
}: BlockComponentProps): import("react").JSX.Element;
declare namespace index_d_exports {
export { Audio, Bookmark, Breadcrumb, BulletedListItem, Callout$1 as Callout, ChildDatabase, ChildPage, Code, Column, ColumnList, Divider, Embed, Equation, File, Heading, Image, LinkPreview, LinkToPage, NumberedListItem, Paragraph, Pdf, Quote, SyncedBlock, Table, TableOfContents, ToDo, Toggle, Unsupported, Video };
}
//#endregion
//#region src/components/ui/alert.d.ts
declare const alertVariants: (props?: ({
variant?: "default" | "destructive" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
declare function Alert({
className,
variant,
...props
}: React$1.ComponentProps<"div"> & VariantProps): React$1.JSX.Element;
//#endregion
//#region src/components/callout.d.ts
/**
* shadcn 公式 docs の `callout` 相当。`Alert` を docs 風の surface トーンで包む
* プレゼンテーション専用コンポーネント。Notion の callout ブロックは
* `blocks/Callout.tsx` がこれをラップして描画する。
*/
declare function Callout({
title,
children,
icon,
className,
variant,
...props
}: Omit, "variant"> & {
icon?: React$1.ReactNode;
variant?: "default" | "info" | "warning";
}): React$1.JSX.Element;
//#endregion
//#region src/components/ui/collapsible.d.ts
declare function Collapsible$1({
...props
}: React.ComponentProps): import("react").JSX.Element;
//#endregion
//#region src/components/code-collapsible-wrapper.d.ts
/**
* shadcn 公式 docs の `code-collapsible-wrapper` 相当。長いコードブロックを
* 折りたたみ、グラデーション付きのトリガーで開閉する。
*/
declare function CodeCollapsibleWrapper({
className,
children,
...props
}: React$1.ComponentProps): React$1.JSX.Element;
//#endregion
//#region src/components/ui/button.d.ts
declare const buttonVariants: (props?: ({
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
declare function Button({
className,
variant,
size,
asChild,
...props
}: React$1.ComponentProps<"button"> & VariantProps & {
asChild?: boolean;
}): React$1.JSX.Element;
//#endregion
//#region src/components/copy-button.d.ts
/**
* クリップボードへコピーするボタン。コピー後 2 秒だけチェックアイコンに切り替わる。
* shadcn 公式 docs の `copy-button` 相当(アイコンは lucide-react)。
*
* @param value コピーする文字列
*/
declare function CopyButton({
value,
className,
variant,
...props
}: React$1.ComponentProps & {
value: string;
}): React$1.JSX.Element;
//#endregion
//#region src/lib/extract-headings.d.ts
interface ExtractedHeading {
id: string;
level: 1 | 2 | 3 | 4;
text: string;
}
//#endregion
//#region src/context.d.ts
/**
* レスポンシブ画像生成に使う幅 (px) のリスト。
* `Image` ブロックが proxy URL を受け取った場合、`?w={width}` を付けた `srcSet` を生成する。
*/
type ImageSizes = readonly number[];
/**
* `NotionRenderer` がツリー全体に提供する Context の値。
* カスタムブロックコンポーネントから `useNotionContext()` で参照する。
*
* @see {@link useNotionContext}
*/
interface NotionRendererContextValue {
components: ComponentOverrides;
classNames?: BlockClassNames;
resolveImageUrl?: ResolveImageUrlFn;
/** Notion 内部リンクの解決マップ(`buildPageLinkMap` の戻り値)。 */
pageLinks?: PageLinkMap;
resolvePageUrl?: ResolvePageUrlFn;
resolvePageTitle?: ResolvePageTitleFn;
Image?: ElementType>;
Link?: ElementType>;
/** ページ全体の見出し一覧(TOC 用、`NotionRenderer` が自動抽出)。 */
headings?: ExtractedHeading[];
/** numbered_list の入れ子深さ。`` の list-style ローテーションに使う。 */
listDepth?: number;
/**
* `srcSet` 生成に使う幅 (px) のリスト。指定すると `Image` ブロックは
* `?w={width}` クエリ付きの URL を `srcSet` として出力する。
*/
imageSizes?: ImageSizes;
/** `Image` ブロックに渡す `sizes` 属性 (`srcSet` と組合せて使う)。 */
imageSizesAttr?: string;
/** OGP カードのページアクセス時取得エンドポイント。`useOgp` が参照する。 */
ogpEndpoint?: string;
}
/**
* `NotionRenderer` の Context にアクセスする hook。
* カスタムブロックコンポーネントから `components` / `classNames` / `resolveImageUrl` などを取得する。
*
* @example
* ```tsx
* function MyCodeBlock({ block, className }: BlockComponentProps) {
* const { Link } = useNotionContext();
* return ...
;
* }
* ```
*
* @see {@link NotionRendererContextValue}
*/
declare const useNotionContext: () => NotionRendererContextValue;
//#endregion
//#region src/embeds/OgCard.d.ts
/**
* notion-orm が embed/bookmark ブロックに付与する `ogp` フィールドと同形状の型。
* react-renderer は notion-orm に直接依存しないため、構造的に互換な型を独自に持つ。
*/
interface OgCardData {
title?: string;
description?: string;
image?: string;
siteName?: string;
}
interface OgCardProps {
url: string;
ogp?: OgCardData;
}
/**
* Notion 本家のブックマークカード風レイアウト。
* 左側にタイトル/説明/サイト名+URL、右側に OG 画像。
* ogp 未指定または空でもホスト名 + URL のリンクカードとして崩れずに描画する。
*
* shadcn の CardHeader / CardTitle / CardDescription を挟まないのは、
* これらが grid layout を被せて画像コンテナの flex 伸縮が崩れ、サムネが
* 見切れる挙動になるため。Card 直下の生 div でレイアウトを完全に手で組む。
*/
declare function OgCard({
url,
ogp
}: OgCardProps): import("react").JSX.Element;
//#endregion
//#region src/embeds/useOgp.d.ts
/**
* ページアクセス時に `{ogpEndpoint}?url=...` から OGP メタデータを取得する。
* `ogpEndpoint` が Context に無い場合・`url` が falsy(`block.ogp` を既に持つ場合に
* 呼び出し側が渡す)な場合は何もしない。
*
* `@notion-headless-cms/cms` の `createOgpHandler()` が返す
* `{ ok: boolean, ogp?: OgCardData }` 形式のレスポンスを期待する。
*/
declare function useOgp(url: string | null | undefined): OgCardData | undefined;
declare namespace index_d_exports$1 {
export { OgCard, OgCardData, OgCardProps, useOgp };
}
//#endregion
//#region src/NotionBlocks.d.ts
/**
* ブロック配列を描画する。連続する `bulleted_list_item` / `numbered_list_item` は
* 1 つの `` / `` にまとめてから子要素を `BlockSwitch` で描画する。
* `` の list-style は `listDepth` でローテートさせ、ネスト時に
* `decimal → lower-alpha → lower-roman` を循環する(Notion 本家挙動)。
*
* `NotionRenderer` の内側、既に `NotionContext` が確立された状態で使う。
* トップレベルでは {@link NotionRenderer} を使う。
*
* @example
* ```tsx
* function Toggle({ children }: { children: NotionBlock[] }) {
* return ;
* }
* ```
*
* @see {@link NotionRenderer} Context を確立するトップレベルエントリ。
*/
declare function NotionBlocks({
blocks
}: {
blocks: NotionBlock[];
}): ReactNode;
//#endregion
//#region src/NotionRenderer.d.ts
/**
* Notion ブロック木 (`NotionBlockTreeNode[]`) を React で描画するエントリ。
* `components` / `classNames` を Context に注入して各ブロックコンポーネントへ伝搬する。
* TOC のために heading_1..4 を抽出して Context へ流す。
*
* @example
* ```tsx
* import { NotionRenderer } from "@notion-headless-cms/react-renderer";
*
* export function Article({ blocks }: { blocks: NotionBlock[] }) {
* return (
*
* );
* }
* ```
*
* @see {@link NotionThemeProvider} ダークモード切替を組み合わせる場合。
* @see {@link NotionBlocks} 既に Context が確立されている子ツリー描画用。
*/
declare function NotionRenderer({
blocks,
components,
extensions,
className,
classNames,
resolveImageUrl,
pageLinks,
resolvePageUrl,
resolvePageTitle,
Image: ImageSlot,
Link: LinkSlot,
imageSizes,
imageSizesAttr,
ogpEndpoint
}: NotionRendererProps): import("react").JSX.Element;
//#endregion
//#region src/NotionThemeProvider.d.ts
/**
* テーマ識別子。
* - `"light"` / `"dark"` は明示モード
* - `"system"` は `prefers-color-scheme: dark` に追従 (SSR 中は light)
*/
type NotionTheme = "light" | "dark" | "system";
interface NotionThemeProviderProps {
/** 既定 `"system"`。 */
theme?: NotionTheme;
/**
* `theme === "dark"` または `theme === "system"` でダークが選ばれているとき、
* ルート div に付与するクラス名。Tailwind v4 のデフォルトは `"dark"`。
*/
darkClassName?: string;
/**
* `light` テーマ時にルート div に付与するクラス名。指定しない場合はクラスを足さない。
* 例: `"light"` を指定すれば `[data-theme=light]` セレクタを使うサイトとも互換になる。
*/
lightClassName?: string;
/** 追加で付けたい className。 */
className?: string;
children?: ReactNode;
}
/**
* Notion ブロックを描画するルート要素に theme クラスを付与する Provider。
* `` をこの中に置くと、`prose dark:prose-invert` のような
* Tailwind v4 のダークモードクラスが効くようになる。
*
* SSR 中は `system` でも light として描画し、hydration 後に `prefers-color-scheme`
* を見て切り替える。チラつきを完全に避けたい場合は `next-themes` などのライブラリと
* 併用して、`theme` props で明示的に渡すこと。
*
* @example
*
*
*
*/
declare function NotionThemeProvider({
theme,
darkClassName,
lightClassName,
className,
children
}: NotionThemeProviderProps): import("react").JSX.Element;
//#endregion
//#region src/rich-text/Caption.d.ts
/** {@link Caption} の props。`variant` で figure / block 配下のスタイルを切り替える。 */
interface CaptionProps {
value: ReadonlyArray;
/** figure 配下なら "figure" (中央寄せ figcaption)、card 等の文字下なら "block"。 */
variant?: "figure" | "block";
}
/**
* caption 配列を一貫したスタイルで描画する。空配列なら何も出さない。
* Image / Video / Audio / File / Pdf / Bookmark / Embed の caption が共通で使う。
*
* @example
* ```tsx
*
*
*
*
* ```
*
* @see {@link RichText} caption 内の rich_text 配列を描画する下位コンポーネント。
*/
declare function Caption({
value,
variant
}: CaptionProps): import("react").JSX.Element | null;
//#endregion
//#region src/rich-text/RichText.d.ts
/** {@link RichText} の props。Notion `rich_text` 配列 (annotations 含む) を受け取る。 */
interface RichTextProps {
value: ReadonlyArray;
}
/**
* Notion `rich_text` 配列を React のインライン要素として描画する。
* bold / italic / strikethrough / underline / color / equation / mention を扱う。
* カスタムブロックコンポーネント内で段落以外の rich_text を描画する際に利用する。
*
* @example
* ```tsx
* function CustomCallout({ block }: BlockComponentProps) {
* return ;
* }
* ```
*/
declare function RichText({
value
}: RichTextProps): import("react").JSX.Element;
//#endregion
export { type BlockClassNames, type BlockComponentProps, BlockSwitch, type BlockSwitchProps, index_d_exports as Blocks, type CacheImageFn, Callout, Caption, CodeCollapsibleWrapper, type ComponentOverrides, CopyButton, index_d_exports$1 as Embeds, type HeadingBlockObjectResponse, type NotionBlock, NotionBlocks, NotionRenderer, type NotionRendererContextValue, type NotionRendererProps, type NotionTheme, NotionThemeProvider, type NotionThemeProviderProps, type PageLinkMap, type ResolvedPageLink, RichText, resolveBlockImageUrls, useNotionContext };
//# sourceMappingURL=index.d.mts.map