import { AnchorHTMLAttributes, ComponentType, ElementType, ImgHTMLAttributes } from "react";
import { AudioBlockObjectResponse, BlockObjectResponse as BlockObjectResponse$1, BookmarkBlockObjectResponse, BreadcrumbBlockObjectResponse, BulletedListItemBlockObjectResponse, CalloutBlockObjectResponse, ChildDatabaseBlockObjectResponse, ChildPageBlockObjectResponse, CodeBlockObjectResponse, ColumnBlockObjectResponse, ColumnListBlockObjectResponse, DividerBlockObjectResponse, EmbedBlockObjectResponse, EquationBlockObjectResponse, FileBlockObjectResponse, Heading1BlockObjectResponse, Heading2BlockObjectResponse, Heading3BlockObjectResponse, Heading4BlockObjectResponse, ImageBlockObjectResponse, LinkPreviewBlockObjectResponse, LinkToPageBlockObjectResponse, MeetingNotesBlockObjectResponse, NumberedListItemBlockObjectResponse, ParagraphBlockObjectResponse, PdfBlockObjectResponse, QuoteBlockObjectResponse, SyncedBlockBlockObjectResponse, TabBlockObjectResponse, TableBlockObjectResponse, TableOfContentsBlockObjectResponse, TableRowBlockObjectResponse, TemplateBlockObjectResponse, ToDoBlockObjectResponse, ToggleBlockObjectResponse, VideoBlockObjectResponse } from "@notionhq/client/build/src/api-endpoints.js";
//#region src/types.d.ts
/** children を再帰解決済みのブロック木。`fetchBlockTree` が返す形式と一致。 */
type NotionBlock = BlockObjectResponse$1 & {
children?: NotionBlock[];
};
/** Image/Video/Audio/File/PDF の file URL を変換する関数。CDN プロキシや永続 URL への書き換えに使う。 */
type ResolveImageUrlFn = (url: string, block: NotionBlock) => string;
/**
* Notion 内部ページ ID をサイト内 URL に変換する関数。slug ベースルーティングなどに使う。
* 解決できないページ ID では `undefined` を返してよく、その場合は各ブロックが従来の
* フォールバック(`link_to_page` は `#id`、page mention は素の表示)に委ねる。
*/
type ResolvePageUrlFn = (pageId: string) => string | undefined;
/** Notion 内部ページ ID をタイトルに変換する関数。link_to_page の表示テキストに使う。 */
type ResolvePageTitleFn = (pageId: string) => string | undefined;
/** 解決済みの内部リンク(`href` と表示用 `title`)。 */
interface ResolvedPageLink {
href: string;
title?: string | null;
}
/**
* 正規化済み pageId → 解決済みリンクのプレーンマップ。
* `@notion-headless-cms/core` の `buildPageLinkMap(cms)` で生成し、`NotionRenderer` の
* `pageLinks` プロップに渡す。関数ではなくプレーンオブジェクトなので、loader / RSC の
* シリアライズ境界を越えて渡せる(`resolvePageUrl` 関数プロップは越えられない)。
*/
type PageLinkMap = Record;
/**
* 各 block コンポーネントの共通プロップ。
* 子ブロードの描画は Context 経由の `` が担うため、
* renderChildren は不要になった(Context 化 #217 で廃止)。
*/
interface BlockComponentProps {
block: T & {
children?: NotionBlock[];
};
className?: string;
}
/** `NotionRenderer.classNames` のマップ。block.type ごとにルート要素の追加クラスを差し込める。 */
type BlockClassNames = Partial>;
/** heading_1 / heading_2 / heading_3 / heading_4 を共通で受け持つ型。 */
type HeadingBlockObjectResponse = Heading1BlockObjectResponse | Heading2BlockObjectResponse | Heading3BlockObjectResponse | Heading4BlockObjectResponse;
/**
* NotionRenderer の `components` プロップ。
* 任意のブロックコンポーネントを差し替えられる。
* 各スロットは block 固有の型を受けるため、as キャスト不要で差し込める。
*
* Heading は heading_1 / heading_2 / heading_3 / heading_4 を共通で受け持つ。
* TableRow / Tab / Template / MeetingNotes はデフォルト実装が
* 用意されておらず Unsupported にフォールバックされるが、
* BlockObjectResponse union と網羅性を一致させるため override スロットは提供する。
*/
interface ComponentOverrides {
Paragraph?: ComponentType>;
Heading?: ComponentType>;
BulletedListItem?: ComponentType>;
NumberedListItem?: ComponentType>;
ToDo?: ComponentType>;
Toggle?: ComponentType>;
Callout?: ComponentType>;
Quote?: ComponentType>;
Code?: ComponentType>;
Equation?: ComponentType>;
Divider?: ComponentType>;
Image?: ComponentType>;
Video?: ComponentType>;
Audio?: ComponentType>;
File?: ComponentType>;
Pdf?: ComponentType>;
Bookmark?: ComponentType>;
LinkPreview?: ComponentType>;
LinkToPage?: ComponentType>;
ChildPage?: ComponentType>;
ChildDatabase?: ComponentType>;
Embed?: ComponentType>;
Table?: ComponentType>;
TableRow?: ComponentType>;
ColumnList?: ComponentType>;
Column?: ComponentType>;
SyncedBlock?: ComponentType>;
Breadcrumb?: ComponentType>;
TableOfContents?: ComponentType>;
Tab?: ComponentType>;
Template?: ComponentType>;
MeetingNotes?: ComponentType>;
Unsupported?: ComponentType;
/**
* rich_text 内のインライン equation (`$...$`) を描画する slot。既定は lazy KaTeX。
* `cachedHtml` は同期時に事前組版された HTML(あれば優先描画する)。
*/
InlineEquation?: ComponentType<{
expression: string;
cachedHtml?: string;
}>;
}
/**
* blocks 戦略向けレンダリング拡張インターフェース。
* notion-orm への依存を react-renderer に持ち込まないためローカル定義。
* `ContentExtension` と構造互換。
*/
interface BlockExtension {
getBlockComponents?(): Record;
}
interface NotionRendererProps {
blocks: NotionBlock[];
components?: ComponentOverrides;
/** `getBlockComponents()` でコンポーネントを提供する拡張のリスト。直接指定の `components` が優先される。 */
extensions?: BlockExtension[];
className?: string;
/** block.type ごとにルート要素へ追加クラスを差し込む(tailwind-merge で衝突解決)。 */
classNames?: BlockClassNames;
/** file URL を変換する関数。Notion 署名済み URL をプロキシ URL 等に書き換えるために使う(#218)。 */
resolveImageUrl?: ResolveImageUrlFn;
/**
* Notion 内部リンクの解決マップ。`buildPageLinkMap(cms)` の戻り値をそのまま渡す。
* `link_to_page` / page・database mention / `child_page` を自サイト URL に解決する。
* シリアライズ可能なため RSC / loader 境界を越えられる(推奨)。
*/
pageLinks?: PageLinkMap;
/**
* Notion ページ ID をサイト内 URL に変換する関数(#218)。
* `pageLinks` で解決できない場合のフォールバック / カスタムルーティング用の escape hatch。
* 関数のためシリアライズ境界(RSC / loader)は越えられない点に注意。
*/
resolvePageUrl?: ResolvePageUrlFn;
/** Notion ページ ID を表示名に変換する関数。link_to_page の本文に使う。 */
resolvePageTitle?: ResolvePageTitleFn;
/** `
` を差し替えるコンポーネント。next/image などのフレームワーク最適化に使う(#219)。 */
Image?: ElementType>;
/** `` を差し替えるコンポーネント。next/link などのフレームワーク最適化に使う(#219)。 */
Link?: ElementType>;
/**
* レスポンシブ画像生成に使う幅 (px) のリスト。指定すると `Image` ブロックが
* `?w={width}` クエリ付きの `srcSet` を出力する。画像プロキシ側で派生キーをサポートしている前提。
* 例: `[400, 800, 1200]`
*/
imageSizes?: readonly number[];
/** `
` 属性。`imageSizes` と組み合わせて使う。 */
imageSizesAttr?: string;
/**
* OGP カード(bookmark/embed/link_preview)をページアクセス時にクライアントで取得する
* エンドポイント(`@notion-headless-cms/cms` の `createOgpHandler()` が処理する URL)。
* 指定すると `block.ogp` 未付与時に `useOgp` が `{ogpEndpoint}?url=...` を fetch する。
*/
ogpEndpoint?: string;
}
//#endregion
export { NotionBlock as a, ResolveImageUrlFn as c, ResolvedPageLink as d, HeadingBlockObjectResponse as i, ResolvePageTitleFn as l, BlockComponentProps as n, NotionRendererProps as o, ComponentOverrides as r, PageLinkMap as s, BlockClassNames as t, ResolvePageUrlFn as u };
//# sourceMappingURL=types-B8b2hjw1.d.mts.map