@frontlit/page-builder 0.1.0-alpha.2 → 0.1.0-alpha.3

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.
Files changed (98) hide show
  1. package/README.md +32 -0
  2. package/dist/blocks/index.d.ts +33 -21
  3. package/dist/blocks/index.js +3 -3
  4. package/dist/builder/index.d.ts +7 -8
  5. package/dist/builder/index.js +6 -5
  6. package/dist/{button-Bzt1GDO-.d.ts → button-OLKN3wPf.d.ts} +2 -2
  7. package/dist/{chunk-H4P5MFJI.js → chunk-36QHCIPM.js} +205 -251
  8. package/dist/chunk-36QHCIPM.js.map +1 -0
  9. package/dist/chunk-BBI7UHOA.js +56 -0
  10. package/dist/chunk-BBI7UHOA.js.map +1 -0
  11. package/dist/{chunk-KQKSLI3L.js → chunk-GIKTOAQS.js} +335 -122
  12. package/dist/chunk-GIKTOAQS.js.map +1 -0
  13. package/dist/chunk-HWOVSHIW.js +4 -0
  14. package/dist/{chunk-RUYOL7JZ.js.map → chunk-HWOVSHIW.js.map} +1 -1
  15. package/dist/{chunk-HDINUNI2.js → chunk-IU4KATI2.js} +69 -96
  16. package/dist/chunk-IU4KATI2.js.map +1 -0
  17. package/dist/{chunk-SGNRWWG3.js → chunk-J7Z4UW45.js} +530 -135
  18. package/dist/chunk-J7Z4UW45.js.map +1 -0
  19. package/dist/{chunk-UO7XGBGM.js → chunk-K4WCLHMS.js} +1182 -1033
  20. package/dist/chunk-K4WCLHMS.js.map +1 -0
  21. package/dist/components/index.d.ts +33 -8
  22. package/dist/components/index.js +42 -2
  23. package/dist/components/index.js.map +1 -1
  24. package/dist/data-slots.d.ts +3 -3
  25. package/dist/fonts/archivo/archivo-latin-variable.woff2 +0 -0
  26. package/dist/fonts/hanken-grotesk/hanken-grotesk-latin-variable.woff2 +0 -0
  27. package/dist/fonts/jetbrains-mono/jetbrains-mono-latin-variable.woff2 +0 -0
  28. package/dist/fonts/spline-sans-mono/spline-sans-mono-latin-variable.woff2 +0 -0
  29. package/dist/heading-DQCxQt38.d.ts +20 -0
  30. package/dist/image-Bk8kPXwP.d.ts +52 -0
  31. package/dist/index.d.ts +17 -10
  32. package/dist/index.js +7 -6
  33. package/dist/models/index.d.ts +5 -5
  34. package/dist/models/index.js +1 -1
  35. package/dist/{page-W3hQga4w.d.ts → page-B5Gmm-Ys.d.ts} +1 -1
  36. package/dist/primitives/index.d.ts +44 -9
  37. package/dist/primitives/index.js +1 -1
  38. package/dist/renderer/index.d.ts +12 -8
  39. package/dist/renderer/index.js +5 -4
  40. package/dist/{section-background-MsdE40Rk.d.ts → section-background-6V_LCi5e.d.ts} +1 -1
  41. package/dist/server/index.d.ts +103 -0
  42. package/dist/server/index.js +2649 -0
  43. package/dist/server/index.js.map +1 -0
  44. package/dist/server/islands/code-snippet.d.ts +17 -0
  45. package/dist/server/islands/code-snippet.js +72 -0
  46. package/dist/server/islands/code-snippet.js.map +1 -0
  47. package/dist/server/islands/email-form.d.ts +50 -0
  48. package/dist/server/islands/email-form.js +406 -0
  49. package/dist/server/islands/email-form.js.map +1 -0
  50. package/dist/server/islands/header-mobile-menu.d.ts +22 -0
  51. package/dist/server/islands/header-mobile-menu.js +422 -0
  52. package/dist/server/islands/header-mobile-menu.js.map +1 -0
  53. package/dist/server/islands/inline-embed.d.ts +28 -0
  54. package/dist/server/islands/inline-embed.js +84 -0
  55. package/dist/server/islands/inline-embed.js.map +1 -0
  56. package/dist/server/islands/marquee-track.d.ts +18 -0
  57. package/dist/server/islands/marquee-track.js +67 -0
  58. package/dist/server/islands/marquee-track.js.map +1 -0
  59. package/dist/server/islands/nav-link.d.ts +37 -0
  60. package/dist/server/islands/nav-link.js +67 -0
  61. package/dist/server/islands/nav-link.js.map +1 -0
  62. package/dist/server/islands/support-form.d.ts +17 -0
  63. package/dist/server/islands/support-form.js +469 -0
  64. package/dist/server/islands/support-form.js.map +1 -0
  65. package/dist/server/islands/theme-mode-switcher.d.ts +38 -0
  66. package/dist/server/islands/theme-mode-switcher.js +169 -0
  67. package/dist/server/islands/theme-mode-switcher.js.map +1 -0
  68. package/dist/server/islands/video-with-preview.d.ts +13 -0
  69. package/dist/server/islands/video-with-preview.js +269 -0
  70. package/dist/server/islands/video-with-preview.js.map +1 -0
  71. package/dist/server/primitives.d.ts +200 -0
  72. package/dist/server/primitives.js +888 -0
  73. package/dist/server/primitives.js.map +1 -0
  74. package/dist/server/schema.d.ts +11308 -0
  75. package/dist/server/schema.js +6179 -0
  76. package/dist/server/schema.js.map +1 -0
  77. package/dist/server/theme-CF3fIKvw.d.ts +9 -0
  78. package/dist/server/theme-style-5_AGy-4V.d.ts +183 -0
  79. package/dist/server/theme-style-BPaMwk88.d.ts +183 -0
  80. package/dist/server/theme.d.ts +28 -0
  81. package/dist/server/theme.js +1671 -0
  82. package/dist/server/theme.js.map +1 -0
  83. package/dist/server/widget-YH9BrOwY.d.ts +77 -0
  84. package/dist/styles.css +121 -15
  85. package/dist/{theme-style-Cbl7NM-T.d.ts → theme-style-BVd5tOsc.d.ts} +20 -0
  86. package/dist/theme.css +12 -0
  87. package/dist/{widget-B_RoG6se.d.ts → widget-CpE2HdgU.d.ts} +17 -14
  88. package/package.json +60 -11
  89. package/schema/page.v1.json +3855 -0
  90. package/schema/site.v1.json +3811 -0
  91. package/dist/alignment-dZDzN96G.d.ts +0 -5
  92. package/dist/chunk-H4P5MFJI.js.map +0 -1
  93. package/dist/chunk-HDINUNI2.js.map +0 -1
  94. package/dist/chunk-KQKSLI3L.js.map +0 -1
  95. package/dist/chunk-RUYOL7JZ.js +0 -4
  96. package/dist/chunk-SGNRWWG3.js.map +0 -1
  97. package/dist/chunk-UO7XGBGM.js.map +0 -1
  98. package/dist/image-DAWVx1zQ.d.ts +0 -31
package/dist/theme.css CHANGED
@@ -160,6 +160,18 @@
160
160
  --font-inter:
161
161
  var(--font-inter, Inter), ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
162
162
  "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
163
+ --font-archivo:
164
+ var(--font-archivo, Archivo), ui-sans-serif, system-ui, sans-serif,
165
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
166
+ --font-jetbrains-mono:
167
+ var(--font-jetbrains-mono, "JetBrains Mono"), ui-monospace, SFMono-Regular, Menlo,
168
+ Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
169
+ --font-hanken-grotesk:
170
+ var(--font-hanken-grotesk, "Hanken Grotesk"), ui-sans-serif, system-ui, sans-serif,
171
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
172
+ --font-spline-sans-mono:
173
+ var(--font-spline-sans-mono, "Spline Sans Mono"), ui-monospace, SFMono-Regular,
174
+ Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
163
175
  --font-alegreya:
164
176
  var(--font-alegreya, Alegreya), ui-serif, Georgia, Cambria, "Times New Roman",
165
177
  Times, serif;
@@ -1,6 +1,6 @@
1
1
  import { ComponentType, ReactNode } from 'react';
2
- import { S as SectionBackground, T as Theme } from './section-background-MsdE40Rk.js';
3
- import { T as ThemeStyle } from './theme-style-Cbl7NM-T.js';
2
+ import { S as SectionBackground, T as Theme } from './section-background-6V_LCi5e.js';
3
+ import { T as ThemeStyle } from './theme-style-BVd5tOsc.js';
4
4
 
5
5
  /**
6
6
  * The kind of page a widget/block can be placed on. Kept intentionally
@@ -51,11 +51,13 @@ interface WidgetDefaultSettings {
51
51
  }
52
52
  interface PageData extends Record<string, unknown> {
53
53
  pageType?: string;
54
- /** Tenant branding supplied by the host application. Layout blocks use
55
- * this on published sites, while the builder can continue to use its
56
- * own local block settings. */
57
- siteLogoUrl?: string;
58
- siteLogoAlt?: string;
54
+ /** Branding from site settings. Required so a host can't silently drop
55
+ * it; pass `null` for an unset one. Hosts build these with
56
+ * `toSiteBranding` from `@frontlit/api-contract`. */
57
+ siteTitle: string | null;
58
+ siteSubtitle: string | null;
59
+ siteLogoUrl: string | null;
60
+ siteLogoAlt: string | null;
59
61
  /** The page's team (public id) and slug, plus the base URL of FrontLit's
60
62
  * public API — threaded through so blocks that make unauthenticated
61
63
  * public calls (e.g. the email-form block's lead capture, architecture.md
@@ -75,13 +77,12 @@ interface WidgetProps<T extends WidgetDefaultSettings = WidgetDefaultSettings> {
75
77
  /** Host-resolved data rendered by a generic `data-slot` block. */
76
78
  data?: ReactNode;
77
79
  editing?: boolean;
78
- /** Resolved palette currently painted (`system` is already applied). */
79
- nextTheme?: "light" | "dark";
80
- /** Visitor or preview preference, including follow-the-OS. */
81
- themeMode?: "light" | "dark" | "system";
82
- setThemeMode?: (mode: "light" | "dark" | "system") => void;
83
- /** Flips the resolved palette. Used by compact header controls. */
84
- toggleTheme?: () => void;
80
+ /**
81
+ * Host-wired light/dark control shown by the footer. A ready element
82
+ * (rather than callbacks) so server-rendered pages can supply a client
83
+ * component that owns the colour-mode state.
84
+ */
85
+ themeSwitcher?: ReactNode;
85
86
  }
86
87
  interface WidgetEditorProps<T extends WidgetDefaultSettings = WidgetDefaultSettings> {
87
88
  settings: T;
@@ -98,6 +99,8 @@ interface Widget<T extends WidgetDefaultSettings = WidgetDefaultSettings> {
98
99
  */
99
100
  designEditor?: ComponentType<WidgetEditorProps<T>>;
100
101
  getDefaultSettings?: () => Partial<T>;
102
+ /** Offer per-device title sizes (`settings.titleSize`) on the Design tab. */
103
+ titleSize?: boolean;
101
104
  /**
102
105
  * Alternate layouts this block can render its data in, selectable from
103
106
  * the Design tab. The widget reads `settings.layout` while rendering
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontlit/page-builder",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.3",
4
4
  "description": "Block-based WYSIWYG page builder and renderer for React",
5
5
  "author": "FrontLit",
6
6
  "license": "MIT",
@@ -10,6 +10,7 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "files": [
12
12
  "dist",
13
+ "schema",
13
14
  "README.md",
14
15
  "LICENSE"
15
16
  ],
@@ -49,6 +50,32 @@
49
50
  "import": "./dist/builder/index.js",
50
51
  "default": "./dist/builder/index.js"
51
52
  },
53
+ "./server": {
54
+ "types": "./dist/server/index.d.ts",
55
+ "import": "./dist/server/index.js",
56
+ "default": "./dist/server/index.js"
57
+ },
58
+ "./primitives/server": {
59
+ "types": "./dist/server/primitives.d.ts",
60
+ "import": "./dist/server/primitives.js",
61
+ "default": "./dist/server/primitives.js"
62
+ },
63
+ "./islands/*": {
64
+ "types": "./dist/server/islands/*.d.ts",
65
+ "import": "./dist/server/islands/*.js",
66
+ "default": "./dist/server/islands/*.js"
67
+ },
68
+ "./theme": {
69
+ "types": "./dist/server/theme.d.ts",
70
+ "import": "./dist/server/theme.js",
71
+ "default": "./dist/server/theme.js"
72
+ },
73
+ "./schema": {
74
+ "types": "./dist/server/schema.d.ts",
75
+ "import": "./dist/server/schema.js",
76
+ "default": "./dist/server/schema.js"
77
+ },
78
+ "./schema/*.json": "./schema/*.json",
52
79
  "./data-slots": {
53
80
  "types": "./dist/data-slots.d.ts",
54
81
  "import": "./dist/data-slots.js",
@@ -77,6 +104,21 @@
77
104
  "builder": [
78
105
  "dist/builder/index.d.ts"
79
106
  ],
107
+ "server": [
108
+ "dist/server/index.d.ts"
109
+ ],
110
+ "theme": [
111
+ "dist/server/theme.d.ts"
112
+ ],
113
+ "primitives/server": [
114
+ "dist/server/primitives.d.ts"
115
+ ],
116
+ "islands/*": [
117
+ "dist/server/islands/*.d.ts"
118
+ ],
119
+ "schema": [
120
+ "dist/server/schema.d.ts"
121
+ ],
80
122
  "data-slots": [
81
123
  "dist/data-slots.d.ts"
82
124
  ]
@@ -106,11 +148,14 @@
106
148
  "frontlit"
107
149
  ],
108
150
  "scripts": {
109
- "build": "tsup && node scripts/add-use-client.mjs && tailwindcss -i src/styles.css -o dist/styles.css && cp src/theme.css dist/theme.css && rm -rf dist/fonts && cp -a fonts dist/fonts && node scripts/rewrite-font-urls.mjs",
110
- "prepublishOnly": "pnpm run build",
111
- "dev": "tsup --watch",
151
+ "build": "tsup && tsup --config tsup.islands.config.ts && tsup --config tsup.server.config.ts && tsup --config tsup.schema.config.ts && node scripts/add-use-client.mjs && tailwindcss -i src/styles.css -o dist/styles.css && cp src/theme.css dist/theme.css && rm -rf dist/fonts && cp -a fonts dist/fonts && node scripts/rewrite-font-urls.mjs",
152
+ "prepublishOnly": "bun run build",
153
+ "dev": "tsup --watch & tsup --watch --config tsup.islands.config.ts & tsup --watch --config tsup.server.config.ts & wait",
112
154
  "clean": "rimraf dist",
113
- "check-types": "tsc --noEmit"
155
+ "check-types": "tsc --noEmit",
156
+ "schema:generate": "bun scripts/generate-json-schemas.ts",
157
+ "build:schema": "tsup --config tsup.schema.config.ts",
158
+ "test": "vitest run"
114
159
  },
115
160
  "peerDependencies": {
116
161
  "react": "^18.0.0 || ^19.0.0",
@@ -118,7 +163,7 @@
118
163
  },
119
164
  "dependencies": {
120
165
  "@frontlit/media-uploader": "0.1.0-alpha.0",
121
- "@frontlit/text-editor": "0.1.0-alpha.1",
166
+ "@frontlit/text-editor": "0.1.0-alpha.2",
122
167
  "@radix-ui/react-alert-dialog": "^1.1.23",
123
168
  "@radix-ui/react-avatar": "^1.2.6",
124
169
  "@radix-ui/react-checkbox": "^1.3.11",
@@ -127,27 +172,31 @@
127
172
  "@radix-ui/react-label": "^2.1.8",
128
173
  "@radix-ui/react-popover": "^1.1.23",
129
174
  "@radix-ui/react-radio-group": "^1.4.7",
130
- "@radix-ui/react-slot": "^1.2.4",
131
- "@radix-ui/react-switch": "^1.2.6",
132
175
  "@radix-ui/react-select": "^2.3.7",
133
176
  "@radix-ui/react-separator": "^1.1.15",
177
+ "@radix-ui/react-slot": "^1.2.4",
178
+ "@radix-ui/react-switch": "^1.2.6",
134
179
  "@radix-ui/react-tooltip": "^1.2.16",
135
180
  "class-variance-authority": "^0.7.1",
136
181
  "clsx": "^2.1.1",
137
182
  "color-convert": "^3.1.0",
183
+ "jsonc-parser": "^3.3.1",
138
184
  "lucide-react": "^0.553.0",
139
185
  "tailwind-merge": "^3.4.0",
140
- "tw-animate-css": "^1.4.0"
186
+ "tw-animate-css": "^1.4.0",
187
+ "zod": "^3.25.76"
141
188
  },
142
189
  "devDependencies": {
190
+ "@tailwindcss/cli": "^4.1.0",
143
191
  "@types/color-convert": "^2.0.4",
144
192
  "@types/node": "^20.0.0",
145
193
  "@types/react": "^19.0.0",
146
194
  "@types/react-dom": "^19.0.0",
147
- "@tailwindcss/cli": "^4.1.0",
148
195
  "rimraf": "^5.0.0",
149
196
  "tailwindcss": "^4.1.0",
150
197
  "tsup": "^8.3.0",
151
- "typescript": "^5.6.2"
198
+ "typescript": "^5.6.2",
199
+ "vitest": "^3.2.4",
200
+ "zod-to-json-schema": "^3.25.2"
152
201
  }
153
202
  }