@roottale/cms-renderer-next 0.48.0 → 0.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/dist/blog-filter-BKCGM0qd.d.ts +29 -0
- package/dist/{chunk-6MFHA555.js → chunk-27RT6B3O.js} +1 -1
- package/dist/chunk-27RT6B3O.js.map +1 -0
- package/dist/chunk-2QU4JU46.js +3927 -0
- package/dist/chunk-2QU4JU46.js.map +1 -0
- package/dist/chunk-4RQ3SEDL.js +106 -0
- package/dist/chunk-4RQ3SEDL.js.map +1 -0
- package/dist/{chunk-OMXEU4LS.js → chunk-QYNEOFL7.js} +140 -136
- package/dist/chunk-QYNEOFL7.js.map +1 -0
- package/dist/concerns-client.d.ts +1 -1
- package/dist/expertise-client.d.ts +1 -1
- package/dist/expertise-client.js +1 -1
- package/dist/hero-carousel-client.js +1 -1
- package/dist/routes.d.ts +334 -20
- package/dist/routes.js +249 -68
- package/dist/routes.js.map +1 -1
- package/dist/seo-asset-hosts.d.ts +36 -0
- package/dist/seo-asset-hosts.js +391 -0
- package/dist/seo-asset-hosts.js.map +1 -0
- package/dist/server.d.ts +23 -241
- package/dist/server.js +6 -6
- package/dist/{site-config-Dicv57oY.d.ts → site-config-DNpvlqA5.d.ts} +201 -201
- package/dist/spaces-client.d.ts +1 -1
- package/dist/team-expanding-stage-client.d.ts +1 -1
- package/dist/team-expanding-stage-client.js +1 -1
- package/dist/templates.d.ts +64 -25
- package/dist/templates.js +13 -6
- package/dist/templates.js.map +1 -1
- package/package.json +7 -2
- package/dist/chunk-6MFHA555.js.map +0 -1
- package/dist/chunk-FZK3EXYZ.js +0 -103
- package/dist/chunk-FZK3EXYZ.js.map +0 -1
- package/dist/chunk-LIBSVC4M.js +0 -3642
- package/dist/chunk-LIBSVC4M.js.map +0 -1
- package/dist/chunk-OMXEU4LS.js.map +0 -1
package/dist/server.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ReactElement, ReactNode } from 'react';
|
|
2
2
|
import { CmsPostContent, RootTaleTheme, CmsPostType } from '@roottale/cms-client/server';
|
|
3
3
|
export { RootTaleTheme } from '@roottale/cms-client/server';
|
|
4
|
-
import { Block, BindingResolver, RouteCollection } from '@roottale/cms-core';
|
|
5
4
|
export { R as RootTaleCssVars, t as themeToCssVars } from './theme-css-vars-CD3jcEkp.js';
|
|
5
|
+
import { Block, BindingResolver, RouteCollection } from '@roottale/cms-core';
|
|
6
|
+
export { a as BlogCategory, B as BlogCategoryWithCount, c as collectCategories, b as collectCategoriesWithCounts, d as defaultCategoryHref, f as filterPostsByCategory } from './blog-filter-BKCGM0qd.js';
|
|
6
7
|
import '@roottale/ui-react/theme';
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -189,319 +190,100 @@ declare function renderBoundBlocks(blocks: readonly Block[], opts?: {
|
|
|
189
190
|
resolver?: BindingResolver;
|
|
190
191
|
}): ReactElement[];
|
|
191
192
|
|
|
192
|
-
/**
|
|
193
|
-
* `RootTaleBlogList` 카테고리 필터 — 순수 헬퍼(서버 필터, client JS 불요).
|
|
194
|
-
*
|
|
195
|
-
* SSR-only 정책 유지: 필터는 `?category=<slug>` URL 파라미터로 동작하고(칩 =
|
|
196
|
-
* 서버 렌더 `<a>` 링크), consumer 가 searchParams 의 category 를 `activeCategory`
|
|
197
|
-
* 로 주입한다. hydration 없이 SEO 친화 + 공유 가능한 URL.
|
|
198
|
-
*/
|
|
199
|
-
|
|
200
|
-
interface BlogCategory {
|
|
201
|
-
name: string;
|
|
202
|
-
slug: string;
|
|
203
|
-
}
|
|
204
|
-
interface BlogCategoryWithCount extends BlogCategory {
|
|
205
|
-
count: number;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* 글 목록에 등장하는 카테고리를 slug 기준 unique 로 수집. 서버가 보내는 정렬
|
|
209
|
-
* (category → name asc)을 보존하기 위해 처음 등장 순서를 유지한다.
|
|
210
|
-
*/
|
|
211
|
-
declare function collectCategories(posts: CmsPostContent[]): BlogCategory[];
|
|
212
|
-
declare function collectCategoriesWithCounts(posts: CmsPostContent[]): BlogCategoryWithCount[];
|
|
213
|
-
/** activeSlug 가 비면 전체 반환. 아니면 그 카테고리를 가진 글만. */
|
|
214
|
-
declare function filterPostsByCategory(posts: CmsPostContent[], activeSlug: string | null | undefined): CmsPostContent[];
|
|
215
|
-
/** 기본 카테고리 링크: 전체 → `/blog`, 특정 → `/blog/categories/<slug>`. */
|
|
216
|
-
declare function defaultCategoryHref(slug: string | null): string;
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* `@roottale/cms-renderer-next/server` — RootTale CMS public-render React Server Components.
|
|
220
|
-
*
|
|
221
|
-
* Drop into any RSC-capable framework (Next.js App Router, Astro server islands,
|
|
222
|
-
* React Router server). Single-line import, SSR-only, no `'use client'` boundary.
|
|
223
|
-
*
|
|
224
|
-
* ```tsx
|
|
225
|
-
* import { RootTaleBlogList } from "@roottale/cms-renderer-next/server";
|
|
226
|
-
*
|
|
227
|
-
* export default function BlogPage() {
|
|
228
|
-
* return <RootTaleBlogList apiKey={process.env.ROOTTALE_API_KEY!} />;
|
|
229
|
-
* }
|
|
230
|
-
* ```
|
|
231
|
-
*
|
|
232
|
-
* Customer site MUST keep `apiKey` server-side. Browser bundle ships zero
|
|
233
|
-
* RootTale credentials (ADR-0023 §5.1 #15).
|
|
234
|
-
*
|
|
235
|
-
* Design tokens auto-apply via the CSS import below. Customers can override
|
|
236
|
-
* any class with their own CSS or Tailwind utilities — scoped selectors use
|
|
237
|
-
* `:where()` to keep specificity at zero (ADR-0023 §5.1 #10).
|
|
238
|
-
*/
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* RootTaleBlogList/Post 가 받는 theme prop 의 평가 결과:
|
|
242
|
-
* - `RootTaleTheme` 객체 → 그대로 CSS 변수로 주입
|
|
243
|
-
* - `null` → override 없음 (cms-public.css fallback 그대로)
|
|
244
|
-
* - `undefined` → API key 로 자동 fetch (mysite.roottale.com 의 admin /design)
|
|
245
|
-
*/
|
|
246
193
|
type RootTaleThemeInput = RootTaleTheme | null | undefined;
|
|
247
|
-
/**
|
|
248
|
-
* RootTale 디자인 토큰을 CSS 변수로 자식 트리에 주입한다. 외부 사이트가
|
|
249
|
-
* 여러 RootTale 컴포넌트를 한 레이아웃에 묶을 때, 컴포넌트마다 같은 토큰을
|
|
250
|
-
* fetch 하지 않도록 부모에서 한 번만 fetch 해서 전달하는 용도.
|
|
251
|
-
*
|
|
252
|
-
* ```tsx
|
|
253
|
-
* const theme = await fetchTheme({ apiKey });
|
|
254
|
-
* <RootTaleThemeProvider theme={theme}>
|
|
255
|
-
* <RootTaleBlogList apiKey={apiKey} theme={null} />
|
|
256
|
-
* <RootTaleBlogPost apiKey={apiKey} slugOrId="..." theme={null} />
|
|
257
|
-
* </RootTaleThemeProvider>
|
|
258
|
-
* ```
|
|
259
|
-
*
|
|
260
|
-
* 자식 RootTale 컴포넌트가 `theme={null}` 을 받으면 자체 주입을 건너뛰고
|
|
261
|
-
* 부모의 변수를 그대로 상속. 자식이 `theme` 을 지정하면 자식 변수가 우선.
|
|
262
|
-
*/
|
|
263
194
|
declare function RootTaleThemeProvider(props: {
|
|
264
|
-
theme: RootTaleTheme | null | undefined;
|
|
265
|
-
children: ReactNode;
|
|
195
|
+
readonly theme: RootTaleTheme | null | undefined;
|
|
196
|
+
readonly children: ReactNode;
|
|
266
197
|
}): ReactElement;
|
|
198
|
+
|
|
267
199
|
type RootTaleBlogListProps = {
|
|
268
200
|
apiKey: string;
|
|
269
201
|
baseUrl?: string;
|
|
270
202
|
limit?: number;
|
|
271
|
-
/** Filter by post type (`post` or `page`). Default = `post` only
|
|
203
|
+
/** Filter by post type (`post` or `page`). Default = `post` only. */
|
|
272
204
|
type?: CmsPostType;
|
|
273
|
-
/**
|
|
274
|
-
* Build a customer-side URL for a single post. Defaults to `/blog/${slug}`,
|
|
275
|
-
* 또는 `collections` 를 주면 글의 섹션 basePath 기준(`/notice/${slug}` 등).
|
|
276
|
-
*/
|
|
277
205
|
postHref?: (post: CmsPostContent) => string;
|
|
278
|
-
/** Rendered when the tenant has no published posts yet. */
|
|
279
206
|
emptyMessage?: string;
|
|
280
|
-
/**
|
|
281
|
-
* 단일 섹션(stream)으로 스코프 (ADR-0060). `collections` 와 함께 줘야 동작한다.
|
|
282
|
-
* 예: `collection="notice"` → 공지 섹션 글만 렌더. **미지정 = 전체** 글(레거시
|
|
283
|
-
* 단일 블로그). 이 prop 없이 다중 스트림 사이트에서 쓰면 공지·블로그가 한 목록에
|
|
284
|
-
* 섞여 나오므로(`/blog` 에 공지가 새어 들어옴), 섹션을 나눈 사이트는 각 목록
|
|
285
|
-
* 페이지에서 반드시 `collection` 으로 스코프해야 한다.
|
|
286
|
-
*
|
|
287
|
-
* **서버 필터** (`blog-list-collection-scope.md` §2②) — `collections` 와 함께
|
|
288
|
-
* 주면 api-core `collection_key=` 파라미터로 fetch 단계에서부터 그 섹션 글만
|
|
289
|
-
* 가져온다(limit 이 스트림 밖 글에 낭비되지 않음). `postsForCollection` 클라이언트
|
|
290
|
-
* 필터는 방어선으로 남아 있다 — 판정 시맨틱은 두 층 모두 `resolvePostCollection`
|
|
291
|
-
* 동일 정의.
|
|
292
|
-
*/
|
|
293
207
|
collection?: string;
|
|
294
|
-
/**
|
|
295
|
-
* 섹션 정의 (ADR-0060). `collection` 스코프와 collection-aware `postHref`(글을
|
|
296
|
-
* 소속 섹션 basePath 로 라우팅) 해석에 쓰인다. admin 에서 동적으로 받으려면
|
|
297
|
-
* `fetchCollections()` 결과를 넘긴다(`collections.md` 참고).
|
|
298
|
-
*/
|
|
299
208
|
collections?: readonly RouteCollection[];
|
|
300
209
|
/**
|
|
301
|
-
*
|
|
302
|
-
* ("미소속") 글만 렌더한다(`postsNotInAnyCollection`, `blog-list-collection-scope.md`
|
|
303
|
-
* §2①). `collection`(포지티브) 과 배타적이며 **동시 지정은 throw**. `collections`
|
|
304
|
-
* 없이 `excludeCollections` 만 주는 것도 **throw**(조용한 no-op 금지, fail-closed).
|
|
305
|
-
*
|
|
306
|
-
* **적용 조건 한정** — `/blog` 가 *선언 컬렉션이 아닌*(미소속 글이 `/blog` 를 받는)
|
|
307
|
-
* 사이트에서만 쓴다. **`blog` 자체가 선언 컬렉션인 사이트(예: kjmtax — 글의
|
|
308
|
-
* `collectionKey === "blog"`) 는 반대로 포지티브 `collection="blog"` 가 정경로다.**
|
|
309
|
-
* 그런 사이트에 `excludeCollections` 를 적용하면 블로그 글까지 전부 "소속 글"로
|
|
310
|
-
* 걸려 제외되므로 목록이 비게 된다 — 동시 지정 throw 로는 이 오적용을 못 잡는다.
|
|
210
|
+
* `collection`과 배타적이다. `collections` 없이 지정해도 예외를 던진다.
|
|
311
211
|
*/
|
|
312
212
|
excludeCollections?: boolean;
|
|
313
|
-
/**
|
|
314
|
-
* 카테고리 필터 칩을 목록 위에 렌더. SSR-only — 칩은 `<a>` 링크이고
|
|
315
|
-
* `?category=<slug>` URL 파라미터로 동작한다(client JS 불요). consumer 는
|
|
316
|
-
* searchParams 의 category 를 `activeCategory` 로 주입.
|
|
317
|
-
*/
|
|
318
213
|
showCategoryFilter?: boolean;
|
|
319
|
-
/** 현재 선택 카테고리 slug. 미지정/빈 값 = 전체. searchParams 에서 주입. */
|
|
320
214
|
activeCategory?: string;
|
|
321
|
-
/**
|
|
322
|
-
* 카테고리 칩 링크 URL 빌더. `null` = "전체" 칩. 기본 `defaultCategoryHref`
|
|
323
|
-
* (전체 → `/blog`, 특정 → `/blog/categories/<slug>` — 사이트에 해당 라우트
|
|
324
|
-
* 필요, starter `blog/categories/[slug]` 참조). 쿼리 필터(`?category=<slug>`)
|
|
325
|
-
* 방식을 쓰려면 override.
|
|
326
|
-
*/
|
|
327
215
|
categoryHref?: (slug: string | null) => string;
|
|
328
|
-
/** "전체" 칩 라벨. 기본 "전체". */
|
|
329
216
|
allCategoriesLabel?: string;
|
|
330
|
-
/**
|
|
331
|
-
* 작가 slug 로 글을 필터 — 작가 아카이브(/blog/author/{slug}) 페이지용. 지정 시
|
|
332
|
-
* 그 작가의 발행 글(post)만 fetch 한다. `fetchAuthors` 로 작가 메타(이름·소개)를
|
|
333
|
-
* 따로 가져와 페이지 헤더에 쓴다.
|
|
334
|
-
*/
|
|
335
217
|
author?: string;
|
|
336
|
-
/**
|
|
337
|
-
* RootTale 디자인 토큰. 생략 시 admin /design 에서 저장한 값을 자동 fetch.
|
|
338
|
-
* `null` 을 명시하면 자동 fetch 도 건너뛰고 CSS fallback 사용 (부모
|
|
339
|
-
* `<RootTaleThemeProvider>` 가 변수를 이미 설정한 경우 유용).
|
|
340
|
-
*/
|
|
341
218
|
theme?: RootTaleThemeInput;
|
|
342
|
-
/**
|
|
343
|
-
* ADR-0052 A안 (W4-6 PR C1) — 언어판 필터(`fetchPosts` 의 `locale` 그대로 전달).
|
|
344
|
-
* 미지정 시 서버가 사이트 기본 locale 반환(하위호환). cms-i18n 기본 문자열
|
|
345
|
-
* (`emptyMessage`/`allCategoriesLabel` 미지정 시)의 locale 해석에도 쓰인다.
|
|
346
|
-
*/
|
|
347
219
|
locale?: string;
|
|
348
220
|
};
|
|
349
221
|
declare function RootTaleBlogList(props: RootTaleBlogListProps): Promise<ReactElement>;
|
|
222
|
+
|
|
350
223
|
type RootTaleBlogCategoriesProps = {
|
|
351
224
|
apiKey: string;
|
|
352
225
|
baseUrl?: string;
|
|
353
226
|
limit?: number;
|
|
354
|
-
/** Build a customer-side URL for a category. Defaults to `/blog/categories/<slug>`. */
|
|
355
227
|
categoryHref?: (slug: string) => string;
|
|
356
|
-
/** Rendered when no categories are attached to published posts yet. */
|
|
357
228
|
emptyMessage?: string;
|
|
358
|
-
/**
|
|
359
|
-
* 단일 섹션으로 스코프 (ADR-0060). `collections` 와 함께 줘야 동작. 그 섹션의
|
|
360
|
-
* `categories`(주제 allowlist) 안에서, 그 섹션에 귀속된 글의 카테고리만 집계한다.
|
|
361
|
-
* 미지정 = 전체 글의 카테고리.
|
|
362
|
-
*/
|
|
363
229
|
collection?: string;
|
|
364
|
-
/** 섹션 정의 (ADR-0060). `collection` 스코프에 필요. */
|
|
365
230
|
collections?: readonly RouteCollection[];
|
|
366
|
-
|
|
367
|
-
theme?: RootTaleThemeInput;
|
|
368
|
-
/** See `RootTaleBlogListProps['locale']`. */
|
|
231
|
+
theme?: RootTaleTheme | null | undefined;
|
|
369
232
|
locale?: string;
|
|
370
233
|
};
|
|
371
234
|
declare function RootTaleBlogCategories(props: RootTaleBlogCategoriesProps): Promise<ReactElement>;
|
|
235
|
+
|
|
372
236
|
type RootTaleBlogPostProps = {
|
|
373
237
|
apiKey: string;
|
|
374
238
|
slugOrId: string;
|
|
375
239
|
baseUrl?: string;
|
|
376
|
-
/** Rendered when the slug is not found or not published. */
|
|
377
240
|
notFoundElement?: ReactElement;
|
|
378
|
-
/**
|
|
379
|
-
* 글 제목 `<h1>` 표시 여부. 페이지가 제목을 직접 출력할 때는 false.
|
|
380
|
-
* 요약·발행일·작성자 등 나머지 헤더 정보는 그대로 유지한다.
|
|
381
|
-
*/
|
|
382
241
|
showTitle?: boolean;
|
|
383
|
-
/**
|
|
384
|
-
* When true, prepends an auto-derived `<RootTaleTableOfContents>` before
|
|
385
|
-
* the article body (H2-H4 headings only). Default: false — keep markup
|
|
386
|
-
* stable for customers who already control their own layout.
|
|
387
|
-
*/
|
|
388
242
|
showTableOfContents?: boolean;
|
|
389
|
-
/** Title shown above the TOC (only when `showTableOfContents`). */
|
|
390
243
|
tableOfContentsTitle?: string;
|
|
391
|
-
/**
|
|
392
|
-
* 글 하단에 같은 카테고리 최근 글을 N개 노출 (0 = off, 기본 0 — 기존 마크업 보존).
|
|
393
|
-
* 현재 글에 카테고리가 없거나 후보가 없으면 렌더되지 않는다.
|
|
394
|
-
*/
|
|
395
244
|
relatedPostsCount?: number;
|
|
396
|
-
/** 관련 글 섹션 제목. 기본 "관련 글". */
|
|
397
245
|
relatedPostsTitle?: string;
|
|
398
|
-
/** 관련 글 링크 빌더 — 미지정 시 collections 라우팅 또는 `/blog/{slug}`. */
|
|
399
246
|
postHref?: (post: CmsPostContent) => string;
|
|
400
|
-
/** 다중 스트림 라우팅(ADR-0060) — 관련 글 링크 해석에 사용. */
|
|
401
247
|
collections?: readonly RouteCollection[];
|
|
402
|
-
/**
|
|
403
|
-
* W5-2 — 양식(필드 그룹) 스칼라 값을 연관 박스 아래 정보 패널로 렌더.
|
|
404
|
-
* 라벨·타입은 서버 동봉 `fieldsMeta` 를 사용 — 렌더러는 vertical 지식 없음.
|
|
405
|
-
* relationship 계열은 연관 박스가 담당하므로 제외. 표시할 값이 하나도 없으면
|
|
406
|
-
* 패널 자체 미렌더(빈 껍데기 금지). 기본 false — 기존 소비자 마크업 불변.
|
|
407
|
-
*/
|
|
408
248
|
showFieldFacts?: boolean;
|
|
409
|
-
/** See `RootTaleBlogListProps['theme']`. */
|
|
410
249
|
theme?: RootTaleThemeInput;
|
|
411
|
-
/** See `RootTaleBlogListProps['locale']`. `fetchPost`/관련 글 fetch 양쪽에 적용. */
|
|
412
250
|
locale?: string;
|
|
413
|
-
/**
|
|
414
|
-
* 작가 페이지 링크 빌더 — `post.authorSlug` 가 있을 때 헤더 메타·저자 카드의
|
|
415
|
-
* 작성자 이름을 `<a>` 로 감싸는 데 사용. 기본 `/blog/author/{slug}`.
|
|
416
|
-
*/
|
|
417
251
|
authorHref?: (slug: string) => string;
|
|
418
|
-
/**
|
|
419
|
-
* 시각 브레드크럼 + `BreadcrumbList` JSON-LD (avcd 구조). 기본 off — 기존
|
|
420
|
-
* 마크업 보존 관례(다른 opt-in prop 과 동일). `siteUrl` 이 있으면 JSON-LD 도
|
|
421
|
-
* 함께 emit, 없으면 시각 브레드크럼만 렌더.
|
|
422
|
-
*/
|
|
423
252
|
breadcrumb?: BlogPostBreadcrumbOptions;
|
|
424
253
|
};
|
|
425
|
-
/** `RootTaleBlogPostProps['breadcrumb']` — 상세는 필드별 JSDoc 참조. */
|
|
426
254
|
interface BlogPostBreadcrumbOptions {
|
|
427
|
-
/** JSON-LD 절대 URL 조립용. 없으면 시각 브레드크럼만(JSON-LD 미emit). */
|
|
428
255
|
siteUrl?: string;
|
|
429
|
-
/** 기본 "홈". */
|
|
430
256
|
homeLabel?: string;
|
|
431
|
-
/** 기본 "/". */
|
|
432
257
|
homeHref?: string;
|
|
433
|
-
/** 기본 "블로그". */
|
|
434
258
|
listLabel?: string;
|
|
435
|
-
/**
|
|
436
|
-
* 기본 "/blog". `collections` 가 있으면 글의 소속 섹션 basePath 로 자동 해석을
|
|
437
|
-
* 시도(공지→/notice 등) — `RootTaleBlogPostProps['collections']` 필요.
|
|
438
|
-
*/
|
|
439
259
|
listHref?: string;
|
|
440
|
-
/**
|
|
441
|
-
* 카테고리 세그먼트 포함 여부. 기본 true — 글의 첫 category term 을 쓴다.
|
|
442
|
-
* 카테고리가 없으면 있어도 자동 생략.
|
|
443
|
-
*/
|
|
444
260
|
showCategory?: boolean;
|
|
445
|
-
/** 카테고리 링크 빌더. 기본 `defaultCategoryHref`(= `/blog/categories/{slug}`). */
|
|
446
261
|
categoryHref?: (slug: string) => string;
|
|
447
262
|
}
|
|
263
|
+
|
|
448
264
|
declare function RootTaleBlogPost(props: RootTaleBlogPostProps): Promise<ReactElement>;
|
|
265
|
+
|
|
449
266
|
declare function RootTaleFaqJsonLd({ doc, }: {
|
|
450
|
-
doc: unknown;
|
|
267
|
+
readonly doc: unknown;
|
|
451
268
|
}): ReactElement | null;
|
|
269
|
+
|
|
452
270
|
type RootTalePageProps = {
|
|
453
271
|
apiKey: string;
|
|
454
|
-
/** Page slug (kebab-case) or UUIDv7 id. */
|
|
455
272
|
slugOrId: string;
|
|
456
273
|
baseUrl?: string;
|
|
457
|
-
/** Rendered when the slug is not found or not published. */
|
|
458
274
|
notFoundElement?: ReactElement;
|
|
459
|
-
/**
|
|
460
|
-
* Render the page title as `<h1>`. Default true — set false when the
|
|
461
|
-
* customer layout already owns the heading.
|
|
462
|
-
*/
|
|
463
275
|
showTitle?: boolean;
|
|
464
|
-
/** See `RootTaleBlogListProps['theme']`. */
|
|
465
276
|
theme?: RootTaleThemeInput;
|
|
466
|
-
/** See `RootTaleBlogListProps['locale']`. */
|
|
467
277
|
locale?: string;
|
|
468
278
|
};
|
|
469
|
-
/**
|
|
470
|
-
* 고정 페이지(posts type='page') 렌더러 — RootTaleBlogPost 의 경량판.
|
|
471
|
-
* 날짜·작성자·author card·blog settings 등 블로그 chrome 없이
|
|
472
|
-
* 제목 + 본문만 그린다. 회사 소개·서비스·이용약관 류의 페이지 용도.
|
|
473
|
-
*
|
|
474
|
-
* ```tsx
|
|
475
|
-
* // app/[slug]/page.tsx
|
|
476
|
-
* export default async function CmsPage({ params }) {
|
|
477
|
-
* const { slug } = await params;
|
|
478
|
-
* return <RootTalePage apiKey={process.env.ROOTTALE_API_KEY!} slugOrId={slug} />;
|
|
479
|
-
* }
|
|
480
|
-
* ```
|
|
481
|
-
*/
|
|
482
279
|
declare function RootTalePage(props: RootTalePageProps): Promise<ReactElement>;
|
|
483
|
-
/**
|
|
484
|
-
* Minimal Tiptap doc renderer. Walks the Tiptap doc tree and emits semantic
|
|
485
|
-
* HTML. This is intentionally tiny — richer extensions (image asset URL
|
|
486
|
-
* resolution, TableOfContents, FloatingCta) belong in followup §5.7 #5.
|
|
487
|
-
*
|
|
488
|
-
* Browser-side sanitization is unnecessary here because output is rendered
|
|
489
|
-
* server-side from data the customer-trusted API returned. If the customer
|
|
490
|
-
* site federates with untrusted authors later, layer a sanitizer in front
|
|
491
|
-
* of this component.
|
|
492
|
-
*/
|
|
493
|
-
declare function RenderTiptap({ doc, fields, apiKey, baseUrl, }: {
|
|
494
|
-
doc: Record<string, unknown>;
|
|
495
|
-
/**
|
|
496
|
-
* ADR-0041 D3 — 공개 API `post.fields` (포맷된 커스텀 필드 값). 전달 시
|
|
497
|
-
* 블록 바인딩(`roottale/field`)을 필드 값으로 치환 — 값 없으면 본문이
|
|
498
|
-
* fallback 으로 그대로 렌더. astro `renderTiptapDoc(doc, { fields })` 동등.
|
|
499
|
-
*/
|
|
500
|
-
fields?: Record<string, unknown> | null;
|
|
501
|
-
/** Enables cms-bound section nodes (`blog-list`, `lead-form`, `contact`). */
|
|
502
|
-
apiKey?: string;
|
|
503
|
-
/** Optional RootTale API base URL for cms-bound section fetches. */
|
|
504
|
-
baseUrl?: string;
|
|
505
|
-
}): ReactElement;
|
|
506
280
|
|
|
507
|
-
|
|
281
|
+
type RenderTiptapProps = {
|
|
282
|
+
readonly doc: Record<string, unknown>;
|
|
283
|
+
readonly fields?: Record<string, unknown> | null;
|
|
284
|
+
readonly apiKey?: string;
|
|
285
|
+
readonly baseUrl?: string;
|
|
286
|
+
};
|
|
287
|
+
declare function RenderTiptap({ doc, fields, apiKey, baseUrl, }: RenderTiptapProps): ReactElement;
|
|
288
|
+
|
|
289
|
+
export { type BlogPostBreadcrumbOptions, type CtaButton, type CtaButtonType, type FloatingCtaPosition, type LeadFormVertical, RenderTiptap, RootTaleBlogCategories, type RootTaleBlogCategoriesProps, RootTaleBlogList, type RootTaleBlogListProps, RootTaleBlogPost, type RootTaleBlogPostProps, RootTaleFaqJsonLd, RootTaleFloatingCta, type RootTaleFloatingCtaProps, RootTaleLeadForm, type RootTaleLeadFormProps, RootTalePage, type RootTalePageProps, RootTalePostCard, type RootTalePostCardProps, RootTaleTableOfContents, type RootTaleTableOfContentsProps, type RootTaleThemeInput, RootTaleThemeProvider, type TocEntry, attachHeadingIds, extractToc, headingToId, renderBlock, renderBlocks, renderBoundBlocks };
|
package/dist/server.js
CHANGED
|
@@ -17,15 +17,17 @@ import {
|
|
|
17
17
|
renderBlocks,
|
|
18
18
|
renderBoundBlocks,
|
|
19
19
|
themeToCssVars
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-2QU4JU46.js";
|
|
21
|
+
import "./chunk-VG6UUF4D.js";
|
|
22
|
+
import "./chunk-QYNEOFL7.js";
|
|
21
23
|
import "./chunk-U5AKACPN.js";
|
|
22
24
|
import "./chunk-LEHHSI6G.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-27RT6B3O.js";
|
|
26
|
+
import "./chunk-YLSQAT6B.js";
|
|
27
|
+
import "./chunk-4RQ3SEDL.js";
|
|
25
28
|
import "./chunk-K62RR4UQ.js";
|
|
26
29
|
import "./chunk-H46JUIHZ.js";
|
|
27
30
|
import "./chunk-ZL2NA3QT.js";
|
|
28
|
-
import "./chunk-VG6UUF4D.js";
|
|
29
31
|
import {
|
|
30
32
|
collectCategories,
|
|
31
33
|
collectCategoriesWithCounts,
|
|
@@ -33,8 +35,6 @@ import {
|
|
|
33
35
|
filterPostsByCategory
|
|
34
36
|
} from "./chunk-U2IM6OCQ.js";
|
|
35
37
|
import "./chunk-UM37DOIK.js";
|
|
36
|
-
import "./chunk-OMXEU4LS.js";
|
|
37
|
-
import "./chunk-YLSQAT6B.js";
|
|
38
38
|
export {
|
|
39
39
|
RenderTiptap,
|
|
40
40
|
RootTaleBlogCategories,
|