@risali/react 0.6.1 → 0.7.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/README.md CHANGED
@@ -141,9 +141,9 @@ export function HomePage({ content }: { content: RisaliContent | null }) {
141
141
 
142
142
  Helpers always validate the block type (a block typed `image` will return `defaultValue` from `getBlockValue`) and `getBlockRichText` always sanitises — including the fallback HTML — so a stored XSS payload can't reach the browser even if the block is missing.
143
143
 
144
- ### Builder pages (v0.6.0)
144
+ ### Builder pages (v0.7.0)
145
145
 
146
- A page with `render_mode='builder'` in the Risali dashboard is a DB-driven list of sections (hero, text + image, features, gallery, CTA, contact, plain). `<RisaliPage>` renders the whole page server-side; pages still in `code` mode return `notFound`, so a catch-all route coexists with your static routes:
146
+ A page with `render_mode='builder'` in the Risali dashboard is a DB-driven list of sections. Built-in section types: `hero`, `text_image`, `features`, `gallery`, `cta`, `contact`, `plain`, plus (v0.7.0) `testimonials`, `pricing`, `faq`, `stats`, `team` and `logo_cloud`. Every section is styled inline from the brand palette (gradients / shadows / radius derived via `color-mix()` from `--risali-color-*`) and is responsive without media queries, so it looks designed even without the host app's Tailwind theme. `<RisaliPage>` renders the whole page server-side; pages still in `code` mode return `notFound`, so a catch-all route coexists with your static routes:
147
147
 
148
148
  ```tsx
149
149
  // app/[[...rest]]/page.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAgBF,wBAAsB,WAAW,CAAC,KAAK,GAAE,gBAAqB,2FA+C7D"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAgBF,wBAAsB,WAAW,CAAC,KAAK,GAAE,gBAAqB,2FAsD7D"}
package/dist/brand.js CHANGED
@@ -14,7 +14,7 @@
14
14
  // stack falls back through locally available fonts.
15
15
  import { createElement, Fragment } from "react";
16
16
  import { getRisaliContent } from "./content.js";
17
- import { safeColor } from "./style.js";
17
+ import { readableForeground, safeColor } from "./style.js";
18
18
  // Defense-in-depth mirrors of the dashboard-side validation — a compromised
19
19
  // or stale API payload must not be able to break out of the <style> block.
20
20
  const PALETTE_KEY_RE = /^[a-z][a-z0-9_]{0,40}$/;
@@ -49,6 +49,14 @@ export async function RisaliBrand(props = {}) {
49
49
  const body = fontStack(brand.fonts?.body);
50
50
  if (body)
51
51
  vars.push(`--risali-font-body:${body}`);
52
+ // Readable on-colors for brand-tinted surfaces (L1b). The design system
53
+ // (globals.css) maps --primary-foreground/--accent-foreground onto these.
54
+ const onPrimary = readableForeground(brand.colors?.primary);
55
+ if (onPrimary)
56
+ vars.push(`--risali-on-primary:${onPrimary}`);
57
+ const onAccent = readableForeground(brand.colors?.accent);
58
+ if (onAccent)
59
+ vars.push(`--risali-on-accent:${onAccent}`);
52
60
  const links = [];
53
61
  for (const font of [brand.fonts?.heading, brand.fonts?.body]) {
54
62
  const url = font?.css_url;
package/dist/brand.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,21 @@
1
- import type { ReactNode } from "react";
1
+ import type { CSSProperties, ReactNode } from "react";
2
2
  import type { RisaliBlock } from "../types.js";
3
3
  export declare function safeButtonHref(href: unknown): string | null;
4
4
  /** Sorts builder children by sparse position; blocks without one go last. */
5
5
  export declare function sortByPosition<T extends {
6
6
  position?: number | null;
7
7
  }>(items: readonly T[]): T[];
8
- export declare function renderBlock(block: RisaliBlock): ReactNode;
8
+ /** A text block rendered as a section heading (an <h2>). */
9
+ export declare function isHeadingBlock(block: RisaliBlock): boolean;
10
+ /** Per-call look tweaks a section can apply to a child it lays out. */
11
+ export type RenderBlockOpts = {
12
+ /** Merged under HEADING_STYLE for `text`/heading blocks. */
13
+ headingStyle?: CSSProperties;
14
+ /** Merged under TEXT_STYLE for plain `text` blocks. */
15
+ textStyle?: CSSProperties;
16
+ /** Merged under IMG_STYLE for `image` blocks (e.g. crop-to-fill a tile). */
17
+ imageStyle?: CSSProperties;
18
+ };
19
+ export declare function renderBlock(block: RisaliBlock, opts?: RenderBlockOpts): ReactNode;
9
20
  export declare function renderBlocks(blocks: readonly RisaliBlock[]): ReactNode;
10
21
  //# sourceMappingURL=blocks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/sections/blocks.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAItD,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,aAAa,CAAC;AAUpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK3D;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACnE,KAAK,EAAE,SAAS,CAAC,EAAE,GAClB,CAAC,EAAE,CAML;AAmDD,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CA6GzD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAMtE"}
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/sections/blocks.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAItD,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,aAAa,CAAC;AAWpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK3D;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACnE,KAAK,EAAE,SAAS,CAAC,EAAE,GAClB,CAAC,EAAE,CAML;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE1D;AAuDD,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG;IAC5B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,uDAAuD;IACvD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,SAAS,CAmHjF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAMtE"}
@@ -1,13 +1,21 @@
1
- // Child-block renderer shared by every builder section (PR 40b).
1
+ // Child-block renderer shared by every builder section (PR 40b; styling L5).
2
2
  //
3
3
  // Deliberately SYNC (plain createElement, no async components) so the tree
4
4
  // returned by an awaited <RisaliPage> can be rendered with
5
5
  // react-dom/server's renderToStaticMarkup in tests. Styles use only inline
6
6
  // CSS + the --risali-* CSS variables emitted by <RisaliBrand> — zero
7
7
  // dependency on the client site's Tailwind setup.
8
+ //
9
+ // renderBlock takes an optional `opts` so a section can tune the look of a
10
+ // child it owns (a hero headline rendered display-size, a stat number, a
11
+ // gallery image cropped to fill a tile) WITHOUT bypassing the single place
12
+ // where data-risali-key markers, href/src whitelisting and user
13
+ // style_overrides are applied. opts is merged UNDER style_overrides, so a
14
+ // client's per-block color / font-size always wins.
8
15
  import { createElement, Fragment } from "react";
9
16
  import { sanitiseRichText } from "../sanitize.js";
10
17
  import { applyStyleOverrides } from "../style.js";
18
+ import { BORDER } from "./tokens.js";
11
19
  const SAFE_SRC_RE = /^(https?:\/\/|\/)/;
12
20
  // Mirror of src/lib/editor/href.ts on the dashboard side — buttons accept
13
21
  // only https://, mailto:, tel: and root-relative paths (never "//", http:,
@@ -28,33 +36,41 @@ export function sortByPosition(items) {
28
36
  return [...items].sort((a, b) => (typeof a.position === "number" ? a.position : Number.MAX_SAFE_INTEGER) -
29
37
  (typeof b.position === "number" ? b.position : Number.MAX_SAFE_INTEGER));
30
38
  }
39
+ /** A text block rendered as a section heading (an <h2>). */
40
+ export function isHeadingBlock(block) {
41
+ return block.type === "text" && block.variant === "heading";
42
+ }
31
43
  const HEADING_STYLE = {
32
44
  fontFamily: "var(--risali-font-heading, inherit)",
33
- fontSize: "2em",
45
+ fontSize: "clamp(1.6rem, 1.1rem + 1.4vw, 2rem)",
34
46
  lineHeight: 1.2,
47
+ letterSpacing: "-0.02em",
48
+ fontWeight: 700,
35
49
  margin: "0 0 0.5em",
36
50
  };
37
51
  const TEXT_STYLE = {
52
+ lineHeight: 1.65,
38
53
  margin: "0 0 1em",
39
54
  };
40
55
  const IMG_STYLE = {
41
56
  maxWidth: "100%",
42
57
  height: "auto",
43
58
  display: "block",
44
- borderRadius: "8px",
59
+ borderRadius: "12px",
45
60
  };
46
61
  const HR_STYLE = {
47
62
  border: "none",
48
- borderTop: "1px solid var(--risali-color-secondary, #e5e7eb)",
63
+ borderTop: `1px solid ${BORDER}`,
49
64
  margin: "1.5em 0",
50
65
  };
51
66
  const BUTTON_BASE_STYLE = {
52
67
  display: "inline-block",
53
- padding: "0.75em 1.5em",
54
- borderRadius: "8px",
68
+ padding: "0.8em 1.6em",
69
+ borderRadius: "10px",
55
70
  textDecoration: "none",
56
71
  fontWeight: 600,
57
72
  cursor: "pointer",
73
+ transition: "opacity 200ms",
58
74
  };
59
75
  function buttonStyle(variant) {
60
76
  if (variant === "secondary") {
@@ -68,10 +84,10 @@ function buttonStyle(variant) {
68
84
  return {
69
85
  ...BUTTON_BASE_STYLE,
70
86
  background: "var(--risali-color-primary, #111827)",
71
- color: "#ffffff",
87
+ color: "var(--risali-on-primary, #ffffff)",
72
88
  };
73
89
  }
74
- export function renderBlock(block) {
90
+ export function renderBlock(block, opts) {
75
91
  const overrides = block.style_overrides;
76
92
  switch (block.type) {
77
93
  case "text": {
@@ -80,13 +96,13 @@ export function renderBlock(block) {
80
96
  return createElement("h2", {
81
97
  key: block.key,
82
98
  "data-risali-key": block.key,
83
- style: applyStyleOverrides(HEADING_STYLE, overrides),
99
+ style: applyStyleOverrides({ ...HEADING_STYLE, ...opts?.headingStyle }, overrides),
84
100
  }, value);
85
101
  }
86
102
  return createElement("p", {
87
103
  key: block.key,
88
104
  "data-risali-key": block.key,
89
- style: applyStyleOverrides(TEXT_STYLE, overrides),
105
+ style: applyStyleOverrides({ ...TEXT_STYLE, ...opts?.textStyle }, overrides),
90
106
  }, value);
91
107
  }
92
108
  case "rich_text": {
@@ -114,7 +130,7 @@ export function renderBlock(block) {
114
130
  src,
115
131
  alt: typeof value.alt === "string" ? value.alt : "",
116
132
  loading: "lazy",
117
- style: IMG_STYLE,
133
+ style: { ...IMG_STYLE, ...opts?.imageStyle },
118
134
  });
119
135
  }
120
136
  case "button": {
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/sections/blocks.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/sections/blocks.tsx"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,2DAA2D;AAC3D,2EAA2E;AAC3E,qEAAqE;AACrE,kDAAkD;AAClD,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,2EAA2E;AAC3E,gEAAgE;AAChE,0EAA0E;AAC1E,oDAAoD;AAGpD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC,0EAA0E;AAC1E,2EAA2E;AAC3E,6CAA6C;AAC7C,MAAM,mBAAmB,GAAG,oEAAoE,CAAC;AACjG,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAC5B,KAAmB;IAEnB,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CACpB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACvE,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;AAC9D,CAAC;AAED,MAAM,aAAa,GAAkB;IACnC,UAAU,EAAE,qCAAqC;IACjD,QAAQ,EAAE,qCAAqC;IAC/C,UAAU,EAAE,GAAG;IACf,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,UAAU,GAAkB;IAChC,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,SAAS,GAAkB;IAC/B,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,MAAM;CACrB,CAAC;AAEF,MAAM,QAAQ,GAAkB;IAC9B,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,aAAa,MAAM,EAAE;IAChC,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,iBAAiB,GAAkB;IACvC,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,aAAa;IACtB,YAAY,EAAE,MAAM;IACpB,cAAc,EAAE,MAAM;IACtB,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,eAAe;CAC5B,CAAC;AAEF,SAAS,WAAW,CAAC,OAAkC;IACrD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO;YACL,GAAG,iBAAiB;YACpB,MAAM,EAAE,gDAAgD;YACxD,KAAK,EAAE,sCAAsC;YAC7C,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,iBAAiB;QACpB,UAAU,EAAE,sCAAsC;QAClD,KAAK,EAAE,mCAAmC;KAC3C,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,WAAW,CAAC,KAAkB,EAAE,IAAsB;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC;IAExC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,aAAa,CAClB,IAAI,EACJ;oBACE,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,iBAAiB,EAAE,KAAK,CAAC,GAAG;oBAC5B,KAAK,EAAE,mBAAmB,CACxB,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,EAC3C,SAAS,CACV;iBACF,EACD,KAAK,CACN,CAAC;YACJ,CAAC;YACD,OAAO,aAAa,CAClB,GAAG,EACH;gBACE,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,iBAAiB,EAAE,KAAK,CAAC,GAAG;gBAC5B,KAAK,EAAE,mBAAmB,CACxB,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EACrC,SAAS,CACV;aACF,EACD,KAAK,CACN,CAAC;QACJ,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,aAAa,CAAC,KAAK,EAAE;gBAC1B,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,iBAAiB,EAAE,KAAK,CAAC,GAAG;gBAC5B,kBAAkB,EAAE,WAAW;gBAC/B,KAAK,EAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;gBAChD,uBAAuB,EAAE,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAC5C,CAAC,CAAE,KAAK,CAAC,KAA0B;gBACnC,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,GAAG,GACP,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBACvE,CAAC,CAAC,KAAK,CAAC,GAAG;gBACX,CAAC,CAAC,IAAI,CAAC;YACX,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,OAAO,aAAa,CAAC,KAAK,EAAE;gBAC1B,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,iBAAiB,EAAE,KAAK,CAAC,GAAG;gBAC5B,GAAG;gBACH,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACnD,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAC5C,CAAC,CAAE,KAAK,CAAC,KAA2B;gBACpC,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;YACzE,sEAAsE;YACtE,wDAAwD;YACxD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,aAAa,CAClB,MAAM,EACN;oBACE,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,iBAAiB,EAAE,KAAK,CAAC,GAAG;oBAC5B,kBAAkB,EAAE,QAAQ;oBAC5B,qBAAqB,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;oBACjD,KAAK;iBACN,EACD,IAAI,CACL,CAAC;YACJ,CAAC;YACD,OAAO,aAAa,CAClB,GAAG,EACH;gBACE,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,iBAAiB,EAAE,KAAK,CAAC,GAAG;gBAC5B,kBAAkB,EAAE,QAAQ;gBAC5B,qBAAqB,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;gBACjD,IAAI;gBACJ,KAAK;aACN,EACD,IAAI,CACL,CAAC;QACJ,CAAC;QAED,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,IAAI,EAAE;gBACzB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,iBAAiB,EAAE,KAAK,CAAC,GAAG;gBAC5B,kBAAkB,EAAE,SAAS;gBAC7B,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QAEL;YACE,qEAAqE;YACrE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA8B;IACzD,OAAO,aAAa,CAClB,QAAQ,EACR,IAAI,EACJ,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sections/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG9D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,+CAA+C;IAC/C,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,CAAC;AAoH9E,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAQ5E,CAAC;AAYF,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAWzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sections/index.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AActD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiC9D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,+CAA+C;IAC/C,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,CAAC;AAmiB9E,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAc5E,CAAC;AAYF,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAWzE"}
@@ -1,77 +1,357 @@
1
- // Builder section catalog v1 (PR 40b) — render side of
2
- // src/lib/sections/catalog.ts in the dashboard repo (gallery/defaults).
3
- // Keep the `type` keys of the two in sync.
1
+ // Builder section catalog v2 (PR 40b; styling + catalog expansion L5) — the
2
+ // render side of src/lib/sections/catalog.ts in the dashboard repo
3
+ // (gallery/defaults). Keep the `type` keys of the two in sync: a type present
4
+ // in one but not the other renders nothing / has no card.
4
5
  //
5
6
  // Every component is SYNC and content-driven: it lays out the ordered child
6
- // blocks it receives, nothing more. Signature sections a client repo ships
7
- // in code are passed to <RisaliPage customSections={{...}}> and take
8
- // precedence over this registry on a type-key collision.
7
+ // blocks it receives, nothing more. Signature sections a client repo ships in
8
+ // code are passed to <RisaliPage customSections={{...}}> and take precedence
9
+ // over this registry on a type-key collision.
10
+ //
11
+ // Styling is INLINE (see ./tokens.ts for why) + brand-derived, and responsive
12
+ // without media queries via responsiveGrid(). Decorative icons come from
13
+ // lucide-react (fixed per section type, or cycled by index where a per-item
14
+ // icon would otherwise need a data-model change).
9
15
  import { createElement } from "react";
10
- import { renderBlock, renderBlocks, sortByPosition } from "./blocks.js";
11
- const CONTAINER_STYLE = {
12
- maxWidth: "1100px",
13
- margin: "0 auto",
14
- };
15
- function gridStyle(columns) {
16
- const n = typeof columns === "number" && [2, 3, 4].includes(columns) ? columns : 3;
17
- return {
18
- display: "grid",
19
- gridTemplateColumns: `repeat(${n}, minmax(0, 1fr))`,
20
- gap: "24px",
21
- };
16
+ import { Gem, Heart, Quote, Rocket, ShieldCheck, Sparkles, Star, TrendingUp, Users, Zap, } from "lucide-react";
17
+ import { isHeadingBlock, renderBlock, renderBlocks, sortByPosition, } from "./blocks.js";
18
+ import { BORDER, buttonRowStyle, cardStyle, CONTAINER_STYLE, C_PRIMARY, DISPLAY_HEADING_STYLE, FAQ_QUESTION_STYLE, LEAD_TEXT_STYLE, MUTED_FG, PRIMARY_CHIP_BG, PRIMARY_SOFT, RADIUS, RADIUS_FULL, RADIUS_XL, responsiveGrid, SECTION_TITLE_STYLE, SHADOW_CARD, STAT_LABEL_STYLE, STAT_NUMBER_STYLE, SURFACE_CARD, TEAM_NAME_STYLE, TEAM_ROLE_STYLE, TITLE_WRAP_STYLE, } from "./tokens.js";
19
+ // Fixed cycle for feature cards: distinct, friendly, brand-tintable icons. A
20
+ // per-feature icon would need a block-level data field — out of scope for L5,
21
+ // so we deterministically cycle (looks intentional, no model change).
22
+ const FEATURE_ICONS = [
23
+ Sparkles,
24
+ Zap,
25
+ ShieldCheck,
26
+ Heart,
27
+ Rocket,
28
+ Gem,
29
+ ];
30
+ const STAT_ICONS = [
31
+ TrendingUp,
32
+ Users,
33
+ Star,
34
+ Sparkles,
35
+ Heart,
36
+ ShieldCheck,
37
+ ];
38
+ function cycle(list, i) {
39
+ return list[i % list.length] ?? Sparkles;
22
40
  }
41
+ /** Brand-tinted rounded chip holding an icon (feature cards). */
42
+ function iconChip(Icon) {
43
+ return createElement("div", {
44
+ key: "chip",
45
+ "aria-hidden": "true",
46
+ style: {
47
+ display: "inline-flex",
48
+ alignItems: "center",
49
+ justifyContent: "center",
50
+ width: "48px",
51
+ height: "48px",
52
+ borderRadius: RADIUS,
53
+ background: PRIMARY_CHIP_BG,
54
+ color: C_PRIMARY,
55
+ marginBottom: "16px",
56
+ },
57
+ }, createElement(Icon, { size: 24, strokeWidth: 1.75 }));
58
+ }
59
+ /** Centered title block above a grid (only when a leading heading exists). */
60
+ function titleBlock(heading) {
61
+ if (!heading)
62
+ return null;
63
+ return createElement("div", { key: "title", style: TITLE_WRAP_STYLE }, renderBlock(heading, { headingStyle: { ...SECTION_TITLE_STYLE, margin: 0 } }));
64
+ }
65
+ /** Splits children into a leading heading (section title) and the rest. */
66
+ function splitLeadingHeading(blocks) {
67
+ const sorted = sortByPosition(blocks);
68
+ const first = sorted[0];
69
+ if (first && isHeadingBlock(first)) {
70
+ return { heading: first, rest: sorted.slice(1) };
71
+ }
72
+ return { heading: null, rest: sorted };
73
+ }
74
+ /**
75
+ * Groups flat children into an optional section title + heading-led groups —
76
+ * the backbone of stats / faq / team, which need (label, value) or
77
+ * (question, answer) pairs without a nested data model.
78
+ *
79
+ * Rule: a LEADING heading is the section title ONLY when it stands alone (the
80
+ * next block is also a heading, or there is none). Otherwise every heading
81
+ * opens a group and the following non-heading blocks are its body. This stays
82
+ * sensible if the client deletes the title — the first value heading is not
83
+ * mistaken for a title because it is immediately followed by its body.
84
+ */
85
+ function groupByHeading(blocks) {
86
+ const sorted = sortByPosition(blocks);
87
+ let title = null;
88
+ let start = 0;
89
+ const first = sorted[0];
90
+ const second = sorted[1];
91
+ if (first && isHeadingBlock(first) && (!second || isHeadingBlock(second))) {
92
+ title = first;
93
+ start = 1;
94
+ }
95
+ const groups = [];
96
+ let current = null;
97
+ for (let i = start; i < sorted.length; i++) {
98
+ const b = sorted[i];
99
+ if (!b)
100
+ continue;
101
+ if (isHeadingBlock(b)) {
102
+ current = { head: b, body: [] };
103
+ groups.push(current);
104
+ }
105
+ else {
106
+ if (!current) {
107
+ current = { head: null, body: [] };
108
+ groups.push(current);
109
+ }
110
+ current.body.push(b);
111
+ }
112
+ }
113
+ return { title, groups };
114
+ }
115
+ // ---------------- sections ----------------
23
116
  function HeroSection({ section, blocks }) {
24
117
  const centered = section.variant !== "left";
118
+ const sorted = sortByPosition(blocks);
119
+ const buttons = sorted.filter((b) => b.type === "button");
120
+ const rest = sorted.filter((b) => b.type !== "button");
121
+ let headingDone = false;
122
+ const restOut = rest.map((b) => {
123
+ if (!headingDone && isHeadingBlock(b)) {
124
+ headingDone = true;
125
+ return renderBlock(b, { headingStyle: DISPLAY_HEADING_STYLE });
126
+ }
127
+ if (b.type === "text") {
128
+ return renderBlock(b, {
129
+ textStyle: {
130
+ ...LEAD_TEXT_STYLE,
131
+ ...(centered ? { marginLeft: "auto", marginRight: "auto" } : {}),
132
+ maxWidth: "620px",
133
+ },
134
+ });
135
+ }
136
+ return renderBlock(b);
137
+ });
25
138
  return createElement("div", {
26
139
  style: {
27
140
  ...CONTAINER_STYLE,
141
+ maxWidth: "900px",
28
142
  textAlign: centered ? "center" : "left",
29
143
  },
30
- }, renderBlocks(blocks));
144
+ }, createElement("div", { key: "body" }, restOut), buttons.length
145
+ ? createElement("div", { key: "btns", style: buttonRowStyle(centered) }, buttons.map((b) => renderBlock(b)))
146
+ : null);
31
147
  }
32
148
  function TextImageSection({ section, blocks }) {
149
+ // Two-column layout: all images go in one column, everything else in the
150
+ // other — so for a section that mixes images with text, the rendered order
151
+ // follows the column layout, not strict block position (by design).
33
152
  const sorted = sortByPosition(blocks);
34
153
  const images = sorted.filter((b) => b.type === "image");
35
154
  const rest = sorted.filter((b) => b.type !== "image");
36
155
  const imageLeft = section.settings?.image_side === "left";
37
- const textCol = createElement("div", { key: "text" }, rest.map((b) => renderBlock(b)));
38
- const imageCol = createElement("div", { key: "image" }, images.map((b) => renderBlock(b)));
156
+ let headingDone = false;
157
+ const textCol = createElement("div", { key: "text" }, rest.map((b) => {
158
+ if (!headingDone && isHeadingBlock(b)) {
159
+ headingDone = true;
160
+ return renderBlock(b, { headingStyle: SECTION_TITLE_STYLE });
161
+ }
162
+ return renderBlock(b);
163
+ }));
164
+ const imageCol = createElement("div", {
165
+ key: "image",
166
+ style: {
167
+ borderRadius: RADIUS_XL,
168
+ overflow: "hidden",
169
+ boxShadow: SHADOW_CARD,
170
+ },
171
+ }, images.map((b) => renderBlock(b, { imageStyle: { width: "100%", borderRadius: 0 } })));
39
172
  return createElement("div", {
40
173
  style: {
41
174
  ...CONTAINER_STYLE,
42
175
  display: "grid",
43
- gridTemplateColumns: "repeat(2, minmax(0, 1fr))",
176
+ gridTemplateColumns: "repeat(auto-fit, minmax(min(100%, 320px), 1fr))",
44
177
  gap: "48px",
45
178
  alignItems: "center",
46
179
  },
47
180
  }, imageLeft ? [imageCol, textCol] : [textCol, imageCol]);
48
181
  }
49
- // Flow model v1: the first heading spans the full width, every following
50
- // block is one grid cell. Grouped feature items (icon+title+text as a unit)
51
- // are a planned follow-up.
52
182
  function FeaturesSection({ section, blocks }) {
53
- const sorted = sortByPosition(blocks);
54
- const [first, ...rest] = sorted;
55
- const headingFirst = first && first.type === "text" && first.variant === "heading";
56
- const headOut = headingFirst ? renderBlock(first) : null;
57
- const cells = (headingFirst ? rest : sorted).map((b) => createElement("div", { key: b.key }, renderBlock(b)));
58
- return createElement("div", { style: CONTAINER_STYLE }, headOut, createElement("div", { style: gridStyle(section.settings?.columns) }, cells));
183
+ const { heading, rest } = splitLeadingHeading(blocks);
184
+ const cells = rest.map((b, i) => createElement("div", { key: b.key, style: cardStyle() }, iconChip(cycle(FEATURE_ICONS, i)), renderBlock(b)));
185
+ return createElement("div", { style: CONTAINER_STYLE }, titleBlock(heading), createElement("div", { style: responsiveGrid(section.settings?.columns) }, cells));
59
186
  }
60
187
  function GallerySection({ section, blocks }) {
61
- const sorted = sortByPosition(blocks);
62
- const images = sorted.filter((b) => b.type === "image");
63
- const rest = sorted.filter((b) => b.type !== "image");
64
- return createElement("div", { style: CONTAINER_STYLE }, rest.map((b) => renderBlock(b)), createElement("div", { style: gridStyle(section.settings?.columns) }, images.map((b) => createElement("div", { key: b.key }, renderBlock(b)))));
188
+ // Non-image children render above the image grid (markers preserved); the
189
+ // grid then collects the images. Mixed-type order follows this layout, not
190
+ // strict block position (by design).
191
+ const { heading, rest } = splitLeadingHeading(blocks);
192
+ const images = rest.filter((b) => b.type === "image");
193
+ const other = rest.filter((b) => b.type !== "image");
194
+ const tiles = images.map((b) => createElement("div", {
195
+ key: b.key,
196
+ style: {
197
+ aspectRatio: "4 / 3",
198
+ overflow: "hidden",
199
+ borderRadius: RADIUS,
200
+ boxShadow: SHADOW_CARD,
201
+ },
202
+ }, renderBlock(b, {
203
+ imageStyle: {
204
+ width: "100%",
205
+ height: "100%",
206
+ objectFit: "cover",
207
+ borderRadius: 0,
208
+ },
209
+ })));
210
+ return createElement("div", { style: CONTAINER_STYLE }, titleBlock(heading), other.map((b) => renderBlock(b)), createElement("div", { style: responsiveGrid(section.settings?.columns, "16px") }, tiles));
65
211
  }
66
212
  function CtaSection({ blocks }) {
67
- return createElement("div", { style: { ...CONTAINER_STYLE, textAlign: "center" } }, renderBlocks(blocks));
213
+ const sorted = sortByPosition(blocks);
214
+ const buttons = sorted.filter((b) => b.type === "button");
215
+ const rest = sorted.filter((b) => b.type !== "button");
216
+ let headingDone = false;
217
+ const restOut = rest.map((b) => {
218
+ if (!headingDone && isHeadingBlock(b)) {
219
+ headingDone = true;
220
+ return renderBlock(b, {
221
+ headingStyle: { ...SECTION_TITLE_STYLE, margin: "0 0 0.3em" },
222
+ });
223
+ }
224
+ return renderBlock(b);
225
+ });
226
+ return createElement("div", { style: CONTAINER_STYLE }, createElement("div", {
227
+ style: {
228
+ background: PRIMARY_SOFT,
229
+ border: `1px solid ${BORDER}`,
230
+ borderRadius: RADIUS_XL,
231
+ padding: "56px 32px",
232
+ textAlign: "center",
233
+ },
234
+ }, createElement("div", { key: "body" }, restOut), buttons.length
235
+ ? createElement("div", { key: "btns", style: buttonRowStyle(true) }, buttons.map((b) => renderBlock(b)))
236
+ : null));
68
237
  }
69
238
  function ContactSection({ blocks }) {
70
- return createElement("div", { style: { ...CONTAINER_STYLE, maxWidth: "720px" } }, renderBlocks(blocks));
239
+ return createElement("div", { style: { ...CONTAINER_STYLE, maxWidth: "720px" } }, createElement("div", { style: cardStyle({ padding: "36px" }) }, renderBlocks(blocks)));
71
240
  }
72
241
  function PlainSection({ blocks }) {
73
242
  return createElement("div", { style: CONTAINER_STYLE }, renderBlocks(blocks));
74
243
  }
244
+ function TestimonialsSection({ section, blocks }) {
245
+ const { heading, rest } = splitLeadingHeading(blocks);
246
+ const cells = rest.map((b) => createElement("div", {
247
+ key: b.key,
248
+ style: cardStyle({ display: "flex", flexDirection: "column", gap: "12px" }),
249
+ }, createElement("div", { key: "q", "aria-hidden": "true", style: { color: C_PRIMARY, opacity: 0.85 } }, createElement(Quote, { size: 30, strokeWidth: 1.5 })), renderBlock(b)));
250
+ return createElement("div", { style: CONTAINER_STYLE }, titleBlock(heading), createElement("div", { style: responsiveGrid(section.settings?.columns) }, cells));
251
+ }
252
+ function PricingSection({ section, blocks }) {
253
+ const { heading, rest } = splitLeadingHeading(blocks);
254
+ // Highlight the middle plan when there are 3+ (the common "recommended" tier).
255
+ const featuredIdx = rest.length >= 3 ? Math.floor(rest.length / 2) : -1;
256
+ const cells = rest.map((b, i) => createElement("div", {
257
+ key: b.key,
258
+ style: cardStyle(i === featuredIdx
259
+ ? { border: `2px solid ${C_PRIMARY}`, boxShadow: SHADOW_CARD }
260
+ : {}),
261
+ }, renderBlock(b)));
262
+ return createElement("div", { style: CONTAINER_STYLE }, titleBlock(heading), createElement("div", { style: responsiveGrid(section.settings?.columns) }, cells));
263
+ }
264
+ function FaqSection({ blocks }) {
265
+ const { title, groups } = groupByHeading(blocks);
266
+ const items = groups.map((g, i) => createElement("div", {
267
+ key: g.head?.key ?? `faq-${i}`,
268
+ style: {
269
+ background: SURFACE_CARD,
270
+ border: `1px solid ${BORDER}`,
271
+ borderRadius: RADIUS,
272
+ padding: "20px 24px",
273
+ },
274
+ }, g.head ? renderBlock(g.head, { headingStyle: FAQ_QUESTION_STYLE }) : null, ...g.body.map((b) => renderBlock(b))));
275
+ return createElement("div", { style: { ...CONTAINER_STYLE, maxWidth: "760px" } }, titleBlock(title), createElement("div", { style: { display: "flex", flexDirection: "column", gap: "12px" } }, items));
276
+ }
277
+ function StatsSection({ section, blocks }) {
278
+ const { title, groups } = groupByHeading(blocks);
279
+ const cells = groups.map((g, i) => createElement("div", { key: g.head?.key ?? `stat-${i}`, style: { textAlign: "center" } }, createElement("div", {
280
+ key: "icon",
281
+ "aria-hidden": "true",
282
+ style: { color: C_PRIMARY, marginBottom: "8px" },
283
+ }, createElement(cycle(STAT_ICONS, i), { size: 22, strokeWidth: 1.75 })), g.head ? renderBlock(g.head, { headingStyle: STAT_NUMBER_STYLE }) : null, ...g.body.map((b) => renderBlock(b, { textStyle: STAT_LABEL_STYLE }))));
284
+ return createElement("div", { style: CONTAINER_STYLE }, titleBlock(title), createElement("div", { style: responsiveGrid(section.settings?.columns, "32px") }, cells));
285
+ }
286
+ function TeamSection({ section, blocks }) {
287
+ const { title, groups } = groupByHeading(blocks);
288
+ const cells = groups.map((g, i) => {
289
+ const images = g.body.filter((b) => b.type === "image");
290
+ const texts = g.body.filter((b) => b.type !== "image");
291
+ return createElement("div", {
292
+ key: g.head?.key ?? `team-${i}`,
293
+ style: cardStyle({ textAlign: "center", padding: "24px" }),
294
+ }, images.map((b) => createElement("div", {
295
+ key: b.key,
296
+ style: {
297
+ width: "96px",
298
+ height: "96px",
299
+ borderRadius: RADIUS_FULL,
300
+ overflow: "hidden",
301
+ margin: "0 auto 16px",
302
+ border: `1px solid ${BORDER}`,
303
+ },
304
+ }, renderBlock(b, {
305
+ imageStyle: {
306
+ width: "100%",
307
+ height: "100%",
308
+ objectFit: "cover",
309
+ borderRadius: 0,
310
+ },
311
+ }))), g.head ? renderBlock(g.head, { headingStyle: TEAM_NAME_STYLE }) : null, ...texts.map((b) => renderBlock(b, { textStyle: TEAM_ROLE_STYLE })));
312
+ });
313
+ return createElement("div", { style: CONTAINER_STYLE }, titleBlock(title), createElement("div", { style: responsiveGrid(section.settings?.columns) }, cells));
314
+ }
315
+ function LogoCloudSection({ blocks }) {
316
+ const { heading, rest } = splitLeadingHeading(blocks);
317
+ const images = rest.filter((b) => b.type === "image");
318
+ // Any non-image child (a caption, divider, …) still renders below the heading
319
+ // so its data-risali-key marker is never lost — every section preserves all
320
+ // children; the logos row only collects the images.
321
+ const other = rest.filter((b) => b.type !== "image");
322
+ const logos = images.map((b) => createElement("div", { key: b.key, style: { display: "flex", alignItems: "center" } }, renderBlock(b, {
323
+ imageStyle: {
324
+ maxHeight: "44px",
325
+ width: "auto",
326
+ objectFit: "contain",
327
+ borderRadius: 0,
328
+ filter: "grayscale(1)",
329
+ opacity: 0.7,
330
+ },
331
+ })));
332
+ return createElement("div", { style: CONTAINER_STYLE }, heading
333
+ ? createElement("div", { key: "title", style: { textAlign: "center", marginBottom: "28px" } }, renderBlock(heading, {
334
+ headingStyle: {
335
+ fontSize: "0.8rem",
336
+ fontWeight: 600,
337
+ textTransform: "uppercase",
338
+ letterSpacing: "0.12em",
339
+ color: MUTED_FG,
340
+ margin: 0,
341
+ },
342
+ }))
343
+ : null, other.length
344
+ ? createElement("div", { key: "other", style: { textAlign: "center", marginBottom: "20px" } }, other.map((b) => renderBlock(b)))
345
+ : null, createElement("div", {
346
+ style: {
347
+ display: "flex",
348
+ flexWrap: "wrap",
349
+ alignItems: "center",
350
+ justifyContent: "center",
351
+ gap: "40px",
352
+ },
353
+ }, logos));
354
+ }
75
355
  export const RISALI_SECTION_COMPONENTS = {
76
356
  hero: HeroSection,
77
357
  text_image: TextImageSection,
@@ -80,6 +360,12 @@ export const RISALI_SECTION_COMPONENTS = {
80
360
  cta: CtaSection,
81
361
  contact: ContactSection,
82
362
  plain: PlainSection,
363
+ testimonials: TestimonialsSection,
364
+ pricing: PricingSection,
365
+ faq: FaqSection,
366
+ stats: StatsSection,
367
+ team: TeamSection,
368
+ logo_cloud: LogoCloudSection,
83
369
  };
84
370
  // Palette KEY shape — mirrors the content API + dashboard catalog guard.
85
371
  // Anything else would be a CSS-variable injection through settings.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sections/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sections/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { CSSProperties } from "react";
2
+ export declare const C_PRIMARY = "var(--risali-color-primary, #0f172a)";
3
+ export declare const C_BG = "var(--risali-color-background, #ffffff)";
4
+ export declare const C_FG = "var(--risali-color-text, #0f172a)";
5
+ export declare const C_ACCENT = "var(--risali-color-accent, var(--risali-color-primary, #0f172a))";
6
+ export declare const C_ON_PRIMARY = "var(--risali-on-primary, #ffffff)";
7
+ export declare const SURFACE_CARD = "var(--risali-color-background, #ffffff)";
8
+ export declare const SURFACE_MUTED: string;
9
+ export declare const SURFACE_SECONDARY: string;
10
+ export declare const BORDER: string;
11
+ export declare const MUTED_FG: string;
12
+ export declare const PRIMARY_GLOW: string;
13
+ export declare const PRIMARY_SOFT: string;
14
+ export declare const PRIMARY_CHIP_BG: string;
15
+ export declare const GRADIENT_PRIMARY: string;
16
+ export declare const GRADIENT_HERO: string;
17
+ export declare const SHADOW_SOFT: string;
18
+ export declare const SHADOW_CARD: string;
19
+ export declare const SHADOW_GLOW: string;
20
+ export declare const RADIUS = "0.75rem";
21
+ export declare const RADIUS_LG = "1rem";
22
+ export declare const RADIUS_XL = "1.25rem";
23
+ export declare const RADIUS_FULL = "9999px";
24
+ export declare const CONTAINER_STYLE: CSSProperties;
25
+ /**
26
+ * Intrinsically-responsive grid. `columns` (2|3|4 from section settings) sets
27
+ * the DESIRED density via a per-item min width; auto-fit then fits as many
28
+ * tracks as the viewport allows and wraps to fewer (down to 1) on narrow
29
+ * screens — no media query needed. `min(100%, …)` stops a single wide card
30
+ * from overflowing a phone.
31
+ */
32
+ export declare function responsiveGrid(columns: unknown, gap?: string): CSSProperties;
33
+ /** Surface card — quiet brand-tinted background, hairline border, soft shadow. */
34
+ export declare function cardStyle(extra?: CSSProperties): CSSProperties;
35
+ /** Flex row for a group of buttons (hero/cta). */
36
+ export declare function buttonRowStyle(centered: boolean): CSSProperties;
37
+ /** Large hero headline. */
38
+ export declare const DISPLAY_HEADING_STYLE: CSSProperties;
39
+ /** Section title (features/testimonials/… headings). */
40
+ export declare const SECTION_TITLE_STYLE: CSSProperties;
41
+ /** Lead paragraph under a hero headline. */
42
+ export declare const LEAD_TEXT_STYLE: CSSProperties;
43
+ /** Big number in a stats cell. */
44
+ export declare const STAT_NUMBER_STYLE: CSSProperties;
45
+ /** Label under a stat number. */
46
+ export declare const STAT_LABEL_STYLE: CSSProperties;
47
+ /** FAQ question. */
48
+ export declare const FAQ_QUESTION_STYLE: CSSProperties;
49
+ /** Team member name. */
50
+ export declare const TEAM_NAME_STYLE: CSSProperties;
51
+ /** Team member role. */
52
+ export declare const TEAM_ROLE_STYLE: CSSProperties;
53
+ /** Centered title block above a grid. */
54
+ export declare const TITLE_WRAP_STYLE: CSSProperties;
55
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/sections/tokens.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAK3C,eAAO,MAAM,SAAS,yCAAyC,CAAC;AAChE,eAAO,MAAM,IAAI,4CAA4C,CAAC;AAC9D,eAAO,MAAM,IAAI,sCAAsC,CAAC;AACxD,eAAO,MAAM,QAAQ,qEAC+C,CAAC;AACrE,eAAO,MAAM,YAAY,sCAAsC,CAAC;AAQhE,eAAO,MAAM,YAAY,4CAAO,CAAC;AACjC,eAAO,MAAM,aAAa,QAAqB,CAAC;AAChD,eAAO,MAAM,iBAAiB,QAAqB,CAAC;AACpD,eAAO,MAAM,MAAM,QAAsB,CAAC;AAC1C,eAAO,MAAM,QAAQ,QAAsB,CAAC;AAG5C,eAAO,MAAM,YAAY,QAA8B,CAAC;AACxD,eAAO,MAAM,YAAY,QAA2B,CAAC;AACrD,eAAO,MAAM,eAAe,QAA2B,CAAC;AAGxD,eAAO,MAAM,gBAAgB,QAAmE,CAAC;AACjG,eAAO,MAAM,aAAa,QAA0E,CAAC;AAGrG,eAAO,MAAM,WAAW,QAA+F,CAAC;AACxH,eAAO,MAAM,WAAW,QAAsD,CAAC;AAC/E,eAAO,MAAM,WAAW,QAAwD,CAAC;AAGjF,eAAO,MAAM,MAAM,YAAY,CAAC;AAChC,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,eAAO,MAAM,SAAS,YAAY,CAAC;AACnC,eAAO,MAAM,WAAW,WAAW,CAAC;AAIpC,eAAO,MAAM,eAAe,EAAE,aAG7B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,aAAa,CAS5E;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,aAAa,CAS9D;AAED,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,CAQ/D;AAID,2BAA2B;AAC3B,eAAO,MAAM,qBAAqB,EAAE,aAMnC,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,EAAE,aAMjC,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,eAAe,EAAE,aAK7B,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,iBAAiB,EAAE,aAO/B,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,gBAAgB,EAAE,aAI9B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,kBAAkB,EAAE,aAKhC,CAAC;AAEF,wBAAwB;AACxB,eAAO,MAAM,eAAe,EAAE,aAI7B,CAAC;AAEF,wBAAwB;AACxB,eAAO,MAAM,eAAe,EAAE,aAI7B,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,aAI9B,CAAC"}
@@ -0,0 +1,159 @@
1
+ // Inline design tokens for builder sections (L5).
2
+ //
3
+ // These mirror the L1 design system (templates/.../globals.css) but are emitted
4
+ // as INLINE CSS strings derived straight from the --risali-color-* variables
5
+ // <RisaliBrand> sets — so a builder section looks branded and "designed" even
6
+ // where the client app's Tailwind / globals.css is not in scope (unit tests
7
+ // with renderToStaticMarkup, or a minimal host).
8
+ //
9
+ // WHY NOT L1 utility classes (bg-primary, shadow-elevated, …)? Tailwind v4 only
10
+ // generates the classes it finds while scanning the APP's source — never ones
11
+ // buried in node_modules/@risali/react — so those utilities would be purged on
12
+ // most client builds. Inline styles always apply, and color-mix() over the same
13
+ // brand vars reproduces the exact L1 look. Tests stay green because color-mix
14
+ // strings are inert text under renderToStaticMarkup.
15
+ //
16
+ // Responsiveness is achieved WITHOUT media queries (impossible inline): grids
17
+ // use `repeat(auto-fit, minmax(min(100%, …), 1fr))`, which collapses to fewer
18
+ // columns as the viewport narrows and never overflows on a phone.
19
+ // Brand color refs with the SAME light-theme fallbacks as globals.css :root,
20
+ // so an un-branded scaffold (or a payload before <RisaliBrand> resolves) still
21
+ // renders something clean instead of `unset`.
22
+ export const C_PRIMARY = "var(--risali-color-primary, #0f172a)";
23
+ export const C_BG = "var(--risali-color-background, #ffffff)";
24
+ export const C_FG = "var(--risali-color-text, #0f172a)";
25
+ export const C_ACCENT = "var(--risali-color-accent, var(--risali-color-primary, #0f172a))";
26
+ export const C_ON_PRIMARY = "var(--risali-on-primary, #ffffff)";
27
+ /** color-mix in oklab — same color space as globals.css. */
28
+ function mix(a, pct, b) {
29
+ return `color-mix(in oklab, ${a} ${pct}%, ${b})`;
30
+ }
31
+ // Derived surfaces (mirror globals.css --card / --secondary / --muted / --border).
32
+ export const SURFACE_CARD = C_BG;
33
+ export const SURFACE_MUTED = mix(C_FG, 4, C_BG);
34
+ export const SURFACE_SECONDARY = mix(C_FG, 6, C_BG);
35
+ export const BORDER = mix(C_FG, 12, C_BG);
36
+ export const MUTED_FG = mix(C_FG, 55, C_BG);
37
+ // Brand tints used for soft panels and icon chips.
38
+ export const PRIMARY_GLOW = mix(C_PRIMARY, 68, "white");
39
+ export const PRIMARY_SOFT = mix(C_PRIMARY, 10, C_BG); // faint brand wash (panels)
40
+ export const PRIMARY_CHIP_BG = mix(C_PRIMARY, 12, C_BG); // icon-chip background
41
+ // Gradients (mirror globals.css --gradient-primary / --gradient-hero).
42
+ export const GRADIENT_PRIMARY = `linear-gradient(135deg, ${C_PRIMARY} 0%, ${PRIMARY_GLOW} 100%)`;
43
+ export const GRADIENT_HERO = `linear-gradient(135deg, ${C_BG} 0%, ${mix(C_PRIMARY, 10, C_BG)} 100%)`;
44
+ // Shadows (mirror globals.css — soft + foreground/brand tinted, never harsh black).
45
+ export const SHADOW_SOFT = `0 1px 2px ${mix(C_FG, 6, "transparent")}, 0 8px 24px -12px ${mix(C_FG, 12, "transparent")}`;
46
+ export const SHADOW_CARD = `0 10px 40px -15px ${mix(C_FG, 16, "transparent")}`;
47
+ export const SHADOW_GLOW = `0 0 60px -10px ${mix(C_PRIMARY, 40, "transparent")}`;
48
+ // Radius scale (globals.css --radius = 0.75rem; here as static rems).
49
+ export const RADIUS = "0.75rem";
50
+ export const RADIUS_LG = "1rem";
51
+ export const RADIUS_XL = "1.25rem";
52
+ export const RADIUS_FULL = "9999px";
53
+ // ---------------- shared layout helpers ----------------
54
+ export const CONTAINER_STYLE = {
55
+ maxWidth: "1100px",
56
+ margin: "0 auto",
57
+ };
58
+ /**
59
+ * Intrinsically-responsive grid. `columns` (2|3|4 from section settings) sets
60
+ * the DESIRED density via a per-item min width; auto-fit then fits as many
61
+ * tracks as the viewport allows and wraps to fewer (down to 1) on narrow
62
+ * screens — no media query needed. `min(100%, …)` stops a single wide card
63
+ * from overflowing a phone.
64
+ */
65
+ export function responsiveGrid(columns, gap = "24px") {
66
+ const n = typeof columns === "number" && [2, 3, 4].includes(columns) ? columns : 3;
67
+ const min = n === 2 ? "320px" : n === 3 ? "240px" : "190px";
68
+ return {
69
+ display: "grid",
70
+ gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${min}), 1fr))`,
71
+ gap,
72
+ };
73
+ }
74
+ /** Surface card — quiet brand-tinted background, hairline border, soft shadow. */
75
+ export function cardStyle(extra) {
76
+ return {
77
+ background: SURFACE_CARD,
78
+ border: `1px solid ${BORDER}`,
79
+ borderRadius: RADIUS_LG,
80
+ padding: "28px",
81
+ boxShadow: SHADOW_SOFT,
82
+ ...extra,
83
+ };
84
+ }
85
+ /** Flex row for a group of buttons (hero/cta). */
86
+ export function buttonRowStyle(centered) {
87
+ return {
88
+ display: "flex",
89
+ flexWrap: "wrap",
90
+ gap: "12px",
91
+ justifyContent: centered ? "center" : "flex-start",
92
+ marginTop: "8px",
93
+ };
94
+ }
95
+ // ---------------- typography overrides (passed to renderBlock opts) ----------------
96
+ /** Large hero headline. */
97
+ export const DISPLAY_HEADING_STYLE = {
98
+ fontSize: "clamp(2.5rem, 1.5rem + 4vw, 4rem)",
99
+ lineHeight: 1.05,
100
+ letterSpacing: "-0.03em",
101
+ fontWeight: 800,
102
+ margin: "0 0 0.4em",
103
+ };
104
+ /** Section title (features/testimonials/… headings). */
105
+ export const SECTION_TITLE_STYLE = {
106
+ fontSize: "clamp(1.75rem, 1.2rem + 1.5vw, 2.5rem)",
107
+ lineHeight: 1.15,
108
+ letterSpacing: "-0.02em",
109
+ fontWeight: 700,
110
+ margin: "0 0 0.3em",
111
+ };
112
+ /** Lead paragraph under a hero headline. */
113
+ export const LEAD_TEXT_STYLE = {
114
+ fontSize: "1.2rem",
115
+ lineHeight: 1.6,
116
+ color: MUTED_FG,
117
+ margin: "0 0 1.5em",
118
+ };
119
+ /** Big number in a stats cell. */
120
+ export const STAT_NUMBER_STYLE = {
121
+ fontSize: "clamp(2.5rem, 1.5rem + 3vw, 3.5rem)",
122
+ lineHeight: 1,
123
+ letterSpacing: "-0.03em",
124
+ fontWeight: 800,
125
+ color: C_PRIMARY,
126
+ margin: "0 0 0.15em",
127
+ };
128
+ /** Label under a stat number. */
129
+ export const STAT_LABEL_STYLE = {
130
+ fontSize: "0.95rem",
131
+ color: MUTED_FG,
132
+ margin: 0,
133
+ };
134
+ /** FAQ question. */
135
+ export const FAQ_QUESTION_STYLE = {
136
+ fontSize: "1.1rem",
137
+ fontWeight: 600,
138
+ letterSpacing: "-0.01em",
139
+ margin: "0 0 8px",
140
+ };
141
+ /** Team member name. */
142
+ export const TEAM_NAME_STYLE = {
143
+ fontSize: "1.15rem",
144
+ fontWeight: 600,
145
+ margin: "0 0 2px",
146
+ };
147
+ /** Team member role. */
148
+ export const TEAM_ROLE_STYLE = {
149
+ fontSize: "0.9rem",
150
+ color: MUTED_FG,
151
+ margin: 0,
152
+ };
153
+ /** Centered title block above a grid. */
154
+ export const TITLE_WRAP_STYLE = {
155
+ textAlign: "center",
156
+ maxWidth: "640px",
157
+ margin: "0 auto 40px",
158
+ };
159
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/sections/tokens.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,iDAAiD;AACjD,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,qDAAqD;AACrD,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,kEAAkE;AAIlE,6EAA6E;AAC7E,+EAA+E;AAC/E,8CAA8C;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,sCAAsC,CAAC;AAChE,MAAM,CAAC,MAAM,IAAI,GAAG,yCAAyC,CAAC;AAC9D,MAAM,CAAC,MAAM,IAAI,GAAG,mCAAmC,CAAC;AACxD,MAAM,CAAC,MAAM,QAAQ,GACnB,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,mCAAmC,CAAC;AAEhE,4DAA4D;AAC5D,SAAS,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,CAAS;IAC5C,OAAO,uBAAuB,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;AACnD,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAE5C,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB;AAEhF,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,SAAS,QAAQ,YAAY,QAAQ,CAAC;AACjG,MAAM,CAAC,MAAM,aAAa,GAAG,2BAA2B,IAAI,QAAQ,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AAErG,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,aAAa,CAAC,sBAAsB,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC;AACxH,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC;AAEjF,sEAAsE;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC,0DAA0D;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,GAAG,GAAG,MAAM;IAC3D,MAAM,CAAC,GACL,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,OAAO;QACL,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,qCAAqC,GAAG,UAAU;QACvE,GAAG;KACJ,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO;QACL,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE,aAAa,MAAM,EAAE;QAC7B,YAAY,EAAE,SAAS;QACvB,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,WAAW;QACtB,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,OAAO;QACL,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,MAAM;QACX,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;QAClD,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,sFAAsF;AAEtF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,qBAAqB,GAAkB;IAClD,QAAQ,EAAE,mCAAmC;IAC7C,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,wDAAwD;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAAkB;IAChD,QAAQ,EAAE,wCAAwC;IAClD,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,QAAQ,EAAE,qCAAqC;IAC/C,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,CAAC;CACV,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,kBAAkB,GAAkB;IAC/C,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,GAAG;IACf,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,wBAAwB;AACxB,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,QAAQ,EAAE,SAAS;IACnB,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,wBAAwB;AACxB,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,CAAC;CACV,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,aAAa;CACtB,CAAC"}
package/dist/style.d.ts CHANGED
@@ -1,6 +1,13 @@
1
1
  import type { CSSProperties } from "react";
2
2
  import type { RisaliStyleOverrides } from "./types.js";
3
3
  export declare function safeColor(value: unknown): string | undefined;
4
+ /**
5
+ * Picks a readable foreground (near-black or white) for a brand color using
6
+ * WCAG relative luminance — so brand-tinted surfaces (a primary button, an
7
+ * accent chip) keep legible text even when the brand color is light/pastel.
8
+ * Returns undefined for anything that is not a #rrggbb hex. (L1b)
9
+ */
10
+ export declare function readableForeground(value: unknown, dark?: string, light?: string): string | undefined;
4
11
  export declare function safeFontSizeMultiplier(value: unknown): number | undefined;
5
12
  export declare function applyStyleOverrides(base: CSSProperties | undefined, overrides: RisaliStyleOverrides | null | undefined): CSSProperties | undefined;
6
13
  //# sourceMappingURL=style.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIvD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKzE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,SAAS,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GACjD,aAAa,GAAG,SAAS,CAS3B"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIvD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG5D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,IAAI,SAAY,EAChB,KAAK,SAAY,GAChB,MAAM,GAAG,SAAS,CAYpB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKzE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,SAAS,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GACjD,aAAa,GAAG,SAAS,CAS3B"}
package/dist/style.js CHANGED
@@ -4,6 +4,26 @@ export function safeColor(value) {
4
4
  return undefined;
5
5
  return HEX_RE.test(value) ? value : undefined;
6
6
  }
7
+ /**
8
+ * Picks a readable foreground (near-black or white) for a brand color using
9
+ * WCAG relative luminance — so brand-tinted surfaces (a primary button, an
10
+ * accent chip) keep legible text even when the brand color is light/pastel.
11
+ * Returns undefined for anything that is not a #rrggbb hex. (L1b)
12
+ */
13
+ export function readableForeground(value, dark = "#1a1a1a", light = "#ffffff") {
14
+ const hex = safeColor(value);
15
+ if (!hex)
16
+ return undefined;
17
+ const channel = (i) => {
18
+ const c = parseInt(hex.slice(i, i + 2), 16) / 255;
19
+ return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
20
+ };
21
+ const L = 0.2126 * channel(1) + 0.7152 * channel(3) + 0.0722 * channel(5);
22
+ // Compare contrast ratio against black vs white; pick the stronger.
23
+ const contrastBlack = (L + 0.05) / 0.05;
24
+ const contrastWhite = 1.05 / (L + 0.05);
25
+ return contrastBlack >= contrastWhite ? dark : light;
26
+ }
7
27
  export function safeFontSizeMultiplier(value) {
8
28
  if (typeof value !== "number" || !Number.isFinite(value))
9
29
  return undefined;
package/dist/style.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,4EAA4E;IAC5E,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAA+B,EAC/B,SAAkD;IAElD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,IAAI,GAAkB,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IAChD,IAAI,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,IAAI,IAAI;QAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,IAAI,GAAG,SAAS,EAChB,KAAK,GAAG,SAAS;IAEjB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QAClD,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,oEAAoE;IACpE,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACxC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,4EAA4E;IAC5E,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAA+B,EAC/B,SAAkD;IAElD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,IAAI,GAAkB,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IAChD,IAAI,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,IAAI,IAAI;QAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@risali/react",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "React server components for Risali.app — SSR-fetch editable text/image/rich-text blocks from a client's Risali site.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -23,6 +23,9 @@
23
23
  "clean": "rm -rf dist",
24
24
  "prepublishOnly": "npm run clean && npm run build"
25
25
  },
26
+ "dependencies": {
27
+ "lucide-react": "^1.16.0"
28
+ },
26
29
  "peerDependencies": {
27
30
  "react": ">=18.0.0",
28
31
  "react-dom": ">=18.0.0"