@roottale/cms-renderer-next 0.43.0 → 0.44.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.
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as ConcernsSection } from './site-config-DgYGGwu1.js';
2
+ import { C as ConcernsSection } from './site-config-BHcVF993.js';
3
3
  import 'zod';
4
4
 
5
5
  type ConcernRegion = ConcernsSection["props"]["regions"][number];
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { E as ExpertiseSection } from './site-config-DgYGGwu1.js';
2
+ import { E as ExpertiseSection } from './site-config-BHcVF993.js';
3
3
  import 'zod';
4
4
 
5
5
  type ExpertiseItem = ExpertiseSection["props"]["items"][number];
package/dist/routes.js CHANGED
@@ -669,7 +669,7 @@ function createFleetInfoRoute(config = {}) {
669
669
  site: config.site ?? env.VERCEL_PROJECT_PRODUCTION_URL ?? null,
670
670
  framework: "next",
671
671
  cms_client: CMS_CLIENT_VERSION,
672
- cms_renderer: true ? "0.43.0" : "dev",
672
+ cms_renderer: true ? "0.44.0" : "dev",
673
673
  build_sha: env.VERCEL_GIT_COMMIT_SHA?.slice(0, 7) ?? null
674
674
  },
675
675
  { headers: { "cache-control": "public, max-age=300" } }
package/dist/server.d.ts CHANGED
@@ -373,6 +373,11 @@ type RootTaleBlogPostProps = {
373
373
  baseUrl?: string;
374
374
  /** Rendered when the slug is not found or not published. */
375
375
  notFoundElement?: ReactElement;
376
+ /**
377
+ * 글 제목 `<h1>` 표시 여부. 페이지가 제목을 직접 출력할 때는 false.
378
+ * 요약·발행일·작성자 등 나머지 헤더 정보는 그대로 유지한다.
379
+ */
380
+ showTitle?: boolean;
376
381
  /**
377
382
  * When true, prepends an auto-derived `<RootTaleTableOfContents>` before
378
383
  * the article body (H2-H4 headings only). Default: false — keep markup
package/dist/server.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  renderBlocks,
18
18
  renderBoundBlocks,
19
19
  themeToCssVars
20
- } from "./chunk-FKDCPFYV.js";
20
+ } from "./chunk-75LHSTKC.js";
21
21
  import "./chunk-U5AKACPN.js";
22
22
  import "./chunk-4LQPZDXZ.js";
23
23
  import "./chunk-K62RR4UQ.js";
@@ -29,7 +29,7 @@ import {
29
29
  defaultCategoryHref,
30
30
  filterPostsByCategory
31
31
  } from "./chunk-FUA5H6JE.js";
32
- import "./chunk-NUUTTSGT.js";
32
+ import "./chunk-6PDZSFVZ.js";
33
33
  import "./chunk-F3G6RVIR.js";
34
34
  export {
35
35
  RenderTiptap,
@@ -72,7 +72,7 @@ declare const SECTION_VARIANTS: {
72
72
  readonly pricing: readonly ["table", "cards"];
73
73
  readonly process: readonly ["horizontal", "vertical", "timeline-marked"];
74
74
  readonly "before-after": readonly ["slider", "side-by-side"];
75
- readonly testimonials: readonly ["editorial-quote", "quote-rail"];
75
+ readonly testimonials: readonly ["editorial-quote", "quote-rail", "star-compact"];
76
76
  readonly team: readonly ["grid", "spotlight", "expanding-stage", "row"];
77
77
  readonly expertise: readonly ["tab-stage", "cards"];
78
78
  readonly spaces: readonly ["stage", "mosaic"];
@@ -2991,7 +2991,7 @@ declare const TestimonialsSectionSchema: z.ZodObject<{
2991
2991
  theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2992
2992
  } & {
2993
2993
  type: z.ZodLiteral<"testimonials">;
2994
- variant: z.ZodDefault<z.ZodEnum<["editorial-quote", "quote-rail"]>>;
2994
+ variant: z.ZodDefault<z.ZodEnum<["editorial-quote", "quote-rail", "star-compact"]>>;
2995
2995
  props: z.ZodObject<{
2996
2996
  heading: z.ZodString;
2997
2997
  description: z.ZodOptional<z.ZodString>;
@@ -3060,7 +3060,7 @@ declare const TestimonialsSectionSchema: z.ZodObject<{
3060
3060
  }>;
3061
3061
  }, "strip", z.ZodTypeAny, {
3062
3062
  type: "testimonials";
3063
- variant: "editorial-quote" | "quote-rail";
3063
+ variant: "editorial-quote" | "quote-rail" | "star-compact";
3064
3064
  props: {
3065
3065
  heading: string;
3066
3066
  items: {
@@ -3099,7 +3099,7 @@ declare const TestimonialsSectionSchema: z.ZodObject<{
3099
3099
  };
3100
3100
  theme?: Record<string, string> | undefined;
3101
3101
  id?: string | undefined;
3102
- variant?: "editorial-quote" | "quote-rail" | undefined;
3102
+ variant?: "editorial-quote" | "quote-rail" | "star-compact" | undefined;
3103
3103
  }>;
3104
3104
  declare const TeamSectionSchema: z.ZodObject<{
3105
3105
  id: z.ZodOptional<z.ZodString>;
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { S as SpacesSection } from './site-config-DgYGGwu1.js';
2
+ import { S as SpacesSection } from './site-config-BHcVF993.js';
3
3
  import 'zod';
4
4
 
5
5
  type SpaceItem = SpacesSection["props"]["spaces"][number];
@@ -1461,6 +1461,156 @@
1461
1461
  color: var(--muted-foreground);
1462
1462
  }
1463
1463
 
1464
+ /* ── testimonials: star-compact (W8-7 — 별점 중심 컴팩트 그리드) ──────────── */
1465
+
1466
+ /* 별점 = CSS 타이포 글리프(U+2605) 이중 레이어 — 이모지·이미지 금지(AI-slop
1467
+ * 10항 유지). 채움 폭은 데이터(rating/5)가 --rt-testimonials-star-fill 로
1468
+ * 주입, 색은 전부 토큰(variant×토큰 직교). */
1469
+ [data-roottale-tpl="testimonials"] :where(.rt-tpl-testimonials-stars) {
1470
+ position: relative;
1471
+ display: inline-block;
1472
+ font-size: var(--rt-testimonials-star-size, 1rem);
1473
+ line-height: 1;
1474
+ letter-spacing: 0.1em;
1475
+ white-space: nowrap;
1476
+ }
1477
+
1478
+ [data-roottale-tpl="testimonials"] :where(.rt-tpl-testimonials-stars-base) {
1479
+ color: color-mix(in srgb, var(--foreground) 22%, transparent);
1480
+ }
1481
+
1482
+ [data-roottale-tpl="testimonials"] :where(.rt-tpl-testimonials-stars-fill) {
1483
+ position: absolute;
1484
+ inset-block-start: 0;
1485
+ inset-inline-start: 0;
1486
+ inline-size: var(--rt-testimonials-star-fill, 100%);
1487
+ overflow: hidden;
1488
+ color: var(--accent);
1489
+ }
1490
+
1491
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1492
+ :where(.rt-tpl-testimonials-star-summary) {
1493
+ display: flex;
1494
+ flex-wrap: wrap;
1495
+ align-items: baseline;
1496
+ gap: var(--space-3);
1497
+ margin-block-start: var(--space-6);
1498
+ padding-block-end: var(--space-4);
1499
+ }
1500
+
1501
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1502
+ :where(.rt-tpl-testimonials-star-summary .rt-tpl-testimonials-stars) {
1503
+ font-size: var(--rt-testimonials-star-size-summary, 1.25rem);
1504
+ }
1505
+
1506
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1507
+ :where(.rt-tpl-testimonials-star-average) {
1508
+ font-family: var(--font-display);
1509
+ font-size: clamp(2rem, 6cqi, 2.75rem);
1510
+ font-weight: var(--font-weight-bold);
1511
+ line-height: var(--font-leading-tight);
1512
+ font-variant-numeric: tabular-nums;
1513
+ color: var(--foreground);
1514
+ }
1515
+
1516
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1517
+ :where(.rt-tpl-testimonials-star-count) {
1518
+ font-size: var(--font-size-sm);
1519
+ color: var(--muted-foreground);
1520
+ }
1521
+
1522
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1523
+ :where(.rt-tpl-testimonials-star-list) {
1524
+ display: grid;
1525
+ gap: 0 var(--rt-testimonials-star-list-gap, var(--space-8));
1526
+ padding: 0;
1527
+ margin: 0;
1528
+ list-style: none;
1529
+ }
1530
+
1531
+ @container (min-width: 44rem) {
1532
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1533
+ :where(.rt-tpl-testimonials-star-list) {
1534
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1535
+ }
1536
+ }
1537
+
1538
+ @container (min-width: 72rem) {
1539
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1540
+ :where(.rt-tpl-testimonials-star-list) {
1541
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1542
+ }
1543
+ }
1544
+
1545
+ /* 카드 아님 — hairline 상단 보더 행(균등 그림자 카드 금지, index-rows 계보). */
1546
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1547
+ :where(.rt-tpl-testimonials-star-item) {
1548
+ border-block-start: 1px solid var(--border);
1549
+ padding-block: var(--space-5);
1550
+ }
1551
+
1552
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1553
+ :where(.rt-tpl-testimonials-star-quote) {
1554
+ display: grid;
1555
+ gap: var(--space-2);
1556
+ margin: 0;
1557
+ }
1558
+
1559
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1560
+ :where(.rt-tpl-testimonials-star-head) {
1561
+ display: flex;
1562
+ align-items: center;
1563
+ gap: var(--space-2);
1564
+ }
1565
+
1566
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1567
+ :where(.rt-tpl-testimonials-star-value) {
1568
+ font-size: var(--font-size-sm);
1569
+ font-weight: var(--font-weight-semibold);
1570
+ font-variant-numeric: tabular-nums;
1571
+ color: var(--foreground);
1572
+ }
1573
+
1574
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1575
+ :where(.rt-tpl-testimonials-star-text) {
1576
+ margin: 0;
1577
+ font-size: var(--font-size-sm);
1578
+ line-height: var(--font-leading-normal);
1579
+ word-break: keep-all;
1580
+ color: var(--foreground);
1581
+ }
1582
+
1583
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1584
+ :where(.rt-tpl-testimonials-star-footer) {
1585
+ display: flex;
1586
+ flex-wrap: wrap;
1587
+ align-items: baseline;
1588
+ gap: var(--space-2);
1589
+ }
1590
+
1591
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1592
+ :where(.rt-tpl-testimonials-star-author) {
1593
+ font-style: normal;
1594
+ font-weight: var(--font-weight-semibold);
1595
+ font-size: var(--font-size-sm);
1596
+ color: var(--foreground);
1597
+ }
1598
+
1599
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1600
+ :where(.rt-tpl-testimonials-star-context) {
1601
+ font-size: var(--font-size-xs);
1602
+ color: var(--muted-foreground);
1603
+ }
1604
+
1605
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1606
+ :where(.rt-tpl-testimonials-star-meta) {
1607
+ display: inline-flex;
1608
+ flex-wrap: wrap;
1609
+ gap: var(--space-2);
1610
+ font-size: var(--font-size-xs);
1611
+ color: var(--muted-foreground);
1612
+ }
1613
+
1464
1614
  [data-roottale-tpl="team"] {
1465
1615
  container-type: inline-size;
1466
1616
  }
@@ -1,5 +1,5 @@
1
- import { C as ConcernsSection, E as ExpertiseSection, S as SpacesSection, B as BeforeAfterSection, a as ContactSection, b as CtaBannerSection, F as FaqSection, c as FooterSection, H as HeroSection, d as HoursSection, P as PricingSection, e as ProcessSection, R as RichTextSection, f as ServicesSection, T as TeamSection, g as TestimonialsSection, h as TrustSection, i as SiteConfig, j as SiteConfigInput } from './site-config-DgYGGwu1.js';
2
- export { k as BUILTIN_SECTION_SCHEMAS, l as BUILTIN_SECTION_TYPES, m as BeforeAfterSectionSchema, n as BlogListSection, o as BlogListSectionSchema, p as ConcernsSectionSchema, q as ContactSectionSchema, r as CtaBannerSectionSchema, s as CustomSection, t as CustomSectionSchema, u as ExpertiseSectionSchema, v as FaqSectionSchema, w as FooterSectionSchema, x as HeroSectionSchema, y as HoursSectionSchema, L as LeadFormSection, z as LeadFormSectionSchema, N as NavItem, A as NavItemSchema, D as PricingSectionSchema, G as ProcessSectionSchema, I as RichTextSectionSchema, J as SECTION_VARIANTS, K as Section, M as SectionCta, O as SectionInput, Q as SectionSchema, U as ServicesSectionSchema, V as SiteConfigSchema, W as SpacesSectionSchema, X as TeamSectionSchema, Y as TestimonialsSectionSchema, Z as TrustSectionSchema, _ as defineSiteConfig, $ as parseSiteConfig } from './site-config-DgYGGwu1.js';
1
+ import { C as ConcernsSection, E as ExpertiseSection, S as SpacesSection, B as BeforeAfterSection, a as ContactSection, b as CtaBannerSection, F as FaqSection, c as FooterSection, H as HeroSection, d as HoursSection, P as PricingSection, e as ProcessSection, R as RichTextSection, f as ServicesSection, T as TeamSection, g as TestimonialsSection, h as TrustSection, i as SiteConfig, j as SiteConfigInput } from './site-config-BHcVF993.js';
2
+ export { k as BUILTIN_SECTION_SCHEMAS, l as BUILTIN_SECTION_TYPES, m as BeforeAfterSectionSchema, n as BlogListSection, o as BlogListSectionSchema, p as ConcernsSectionSchema, q as ContactSectionSchema, r as CtaBannerSectionSchema, s as CustomSection, t as CustomSectionSchema, u as ExpertiseSectionSchema, v as FaqSectionSchema, w as FooterSectionSchema, x as HeroSectionSchema, y as HoursSectionSchema, L as LeadFormSection, z as LeadFormSectionSchema, N as NavItem, A as NavItemSchema, D as PricingSectionSchema, G as ProcessSectionSchema, I as RichTextSectionSchema, J as SECTION_VARIANTS, K as Section, M as SectionCta, O as SectionInput, Q as SectionSchema, U as ServicesSectionSchema, V as SiteConfigSchema, W as SpacesSectionSchema, X as TeamSectionSchema, Y as TestimonialsSectionSchema, Z as TrustSectionSchema, _ as defineSiteConfig, $ as parseSiteConfig } from './site-config-BHcVF993.js';
3
3
  export { R as RootTaleCssVars, t as themeToCssVars } from './theme-css-vars-CD3jcEkp.js';
4
4
  import { ReactElement, CSSProperties, ReactNode } from 'react';
5
5
  import 'zod';
@@ -37,7 +37,10 @@ declare function TemplateFaq(section: FaqSection): ReactElement;
37
37
  /** 빌트인 `cta-banner`. variant: default(기본) / photo-overlay. */
38
38
  declare function TemplateCtaBanner(section: CtaBannerSection): ReactElement;
39
39
  declare function TemplateTrust(section: TrustSection): ReactElement;
40
- /** 빌트인 `testimonials`(C11). variant: editorial-quote(기본) / quote-rail. */
40
+ /**
41
+ * 빌트인 `testimonials`(C11 + W8-7). variant: editorial-quote(기본) /
42
+ * quote-rail / star-compact.
43
+ */
41
44
  declare function TemplateTestimonials(section: TestimonialsSection): ReactElement;
42
45
  declare function TemplateTeam(section: TeamSection): ReactElement;
43
46
  declare function TemplateContact(section: ContactSection): ReactElement;
package/dist/templates.js CHANGED
@@ -20,7 +20,7 @@ import {
20
20
  TemplateTrust,
21
21
  sectionThemeStyle,
22
22
  themeToCssVars
23
- } from "./chunk-FKDCPFYV.js";
23
+ } from "./chunk-75LHSTKC.js";
24
24
  import "./chunk-U5AKACPN.js";
25
25
  import "./chunk-4LQPZDXZ.js";
26
26
  import "./chunk-K62RR4UQ.js";
@@ -56,7 +56,7 @@ import {
56
56
  TrustSectionSchema,
57
57
  defineSiteConfig,
58
58
  parseSiteConfig
59
- } from "./chunk-NUUTTSGT.js";
59
+ } from "./chunk-6PDZSFVZ.js";
60
60
  import "./chunk-F3G6RVIR.js";
61
61
 
62
62
  // src/templates/SiteRenderer.tsx
package/dist/validate.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SectionSchema
3
- } from "./chunk-NUUTTSGT.js";
3
+ } from "./chunk-6PDZSFVZ.js";
4
4
  import {
5
5
  runReadabilityChecks,
6
6
  runSeoChecks
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roottale/cms-renderer-next",
3
- "version": "0.43.0",
3
+ "version": "0.44.0",
4
4
  "type": "module",
5
5
  "description": "RootTale CMS public-render React/Next.js Server Components. SSR-only RSC components (RootTaleBlogList / RootTaleBlogPost / RootTaleLeadForm) for external customer sites.",
6
6
  "main": "./dist/index.js",