@frontlit/page-builder 0.1.0-alpha.1 → 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.
- package/README.md +38 -2
- package/dist/blocks/index.d.ts +35 -21
- package/dist/blocks/index.js +4 -3
- package/dist/builder/index.d.ts +8 -11
- package/dist/builder/index.js +7 -5
- package/dist/{button-C3VrMJkr.d.ts → button-OLKN3wPf.d.ts} +3 -3
- package/dist/{chunk-7W6Q4WA7.js → chunk-36QHCIPM.js} +252 -282
- package/dist/chunk-36QHCIPM.js.map +1 -0
- package/dist/{chunk-GTY75HW2.js → chunk-ATNM5JHI.js} +2 -2
- package/dist/chunk-ATNM5JHI.js.map +1 -0
- package/dist/chunk-BBI7UHOA.js +56 -0
- package/dist/chunk-BBI7UHOA.js.map +1 -0
- package/dist/{chunk-MO76KZY2.js → chunk-GIKTOAQS.js} +661 -423
- package/dist/chunk-GIKTOAQS.js.map +1 -0
- package/dist/chunk-HWOVSHIW.js +4 -0
- package/dist/{chunk-RUYOL7JZ.js.map → chunk-HWOVSHIW.js.map} +1 -1
- package/dist/{chunk-SSQWYMQR.js → chunk-IU4KATI2.js} +74 -129
- package/dist/chunk-IU4KATI2.js.map +1 -0
- package/dist/chunk-J7Z4UW45.js +3418 -0
- package/dist/chunk-J7Z4UW45.js.map +1 -0
- package/dist/{chunk-7KIX4WAO.js → chunk-K4WCLHMS.js} +1435 -1382
- package/dist/chunk-K4WCLHMS.js.map +1 -0
- package/dist/chunk-XU7ALPGQ.js +22 -0
- package/dist/chunk-XU7ALPGQ.js.map +1 -0
- package/dist/components/index.d.ts +33 -8
- package/dist/components/index.js +43 -2
- package/dist/components/index.js.map +1 -1
- package/dist/data-slots.d.ts +3 -3
- package/dist/data-slots.js +1 -1
- package/dist/fonts/archivo/archivo-latin-variable.woff2 +0 -0
- package/dist/fonts/hanken-grotesk/hanken-grotesk-latin-variable.woff2 +0 -0
- package/dist/fonts/jetbrains-mono/jetbrains-mono-latin-variable.woff2 +0 -0
- package/dist/fonts/spline-sans-mono/spline-sans-mono-latin-variable.woff2 +0 -0
- package/dist/heading-DQCxQt38.d.ts +20 -0
- package/dist/image-Bk8kPXwP.d.ts +52 -0
- package/dist/index.d.ts +18 -11
- package/dist/index.js +9 -7
- package/dist/media-CnLImjVC.d.ts +21 -0
- package/dist/models/index.d.ts +6 -6
- package/dist/models/index.js +2 -1
- package/dist/{page-DfVl_aHX.d.ts → page-B5Gmm-Ys.d.ts} +2 -3
- package/dist/primitives/index.d.ts +287 -61
- package/dist/primitives/index.js +2 -1
- package/dist/renderer/index.d.ts +12 -8
- package/dist/renderer/index.js +6 -4
- package/dist/{section-background-BgOCp5l3.d.ts → section-background-6V_LCi5e.d.ts} +1 -1
- package/dist/server/index.d.ts +103 -0
- package/dist/server/index.js +2649 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/islands/code-snippet.d.ts +17 -0
- package/dist/server/islands/code-snippet.js +72 -0
- package/dist/server/islands/code-snippet.js.map +1 -0
- package/dist/server/islands/email-form.d.ts +50 -0
- package/dist/server/islands/email-form.js +406 -0
- package/dist/server/islands/email-form.js.map +1 -0
- package/dist/server/islands/header-mobile-menu.d.ts +22 -0
- package/dist/server/islands/header-mobile-menu.js +422 -0
- package/dist/server/islands/header-mobile-menu.js.map +1 -0
- package/dist/server/islands/inline-embed.d.ts +28 -0
- package/dist/server/islands/inline-embed.js +84 -0
- package/dist/server/islands/inline-embed.js.map +1 -0
- package/dist/server/islands/marquee-track.d.ts +18 -0
- package/dist/server/islands/marquee-track.js +67 -0
- package/dist/server/islands/marquee-track.js.map +1 -0
- package/dist/server/islands/nav-link.d.ts +37 -0
- package/dist/server/islands/nav-link.js +67 -0
- package/dist/server/islands/nav-link.js.map +1 -0
- package/dist/server/islands/support-form.d.ts +17 -0
- package/dist/server/islands/support-form.js +469 -0
- package/dist/server/islands/support-form.js.map +1 -0
- package/dist/server/islands/theme-mode-switcher.d.ts +38 -0
- package/dist/server/islands/theme-mode-switcher.js +169 -0
- package/dist/server/islands/theme-mode-switcher.js.map +1 -0
- package/dist/server/islands/video-with-preview.d.ts +13 -0
- package/dist/server/islands/video-with-preview.js +269 -0
- package/dist/server/islands/video-with-preview.js.map +1 -0
- package/dist/server/primitives.d.ts +200 -0
- package/dist/server/primitives.js +888 -0
- package/dist/server/primitives.js.map +1 -0
- package/dist/server/schema.d.ts +11308 -0
- package/dist/server/schema.js +6179 -0
- package/dist/server/schema.js.map +1 -0
- package/dist/server/theme-CF3fIKvw.d.ts +9 -0
- package/dist/{theme-style-39nxXQy0.d.ts → server/theme-style-5_AGy-4V.d.ts} +43 -1
- package/dist/server/theme-style-BPaMwk88.d.ts +183 -0
- package/dist/server/theme.d.ts +28 -0
- package/dist/{chunk-RBJBODQP.js → server/theme.js} +903 -1243
- package/dist/server/theme.js.map +1 -0
- package/dist/server/widget-YH9BrOwY.d.ts +77 -0
- package/dist/styles.css +4016 -8317
- package/dist/theme-style-BVd5tOsc.d.ts +183 -0
- package/dist/theme.css +186 -191
- package/dist/{widget--uEOpdq3.d.ts → widget-CpE2HdgU.d.ts} +25 -18
- package/package.json +71 -11
- package/schema/page.v1.json +3855 -0
- package/schema/site.v1.json +3811 -0
- package/dist/alignment-dZDzN96G.d.ts +0 -5
- package/dist/chunk-7KIX4WAO.js.map +0 -1
- package/dist/chunk-7W6Q4WA7.js.map +0 -1
- package/dist/chunk-GTY75HW2.js.map +0 -1
- package/dist/chunk-MO76KZY2.js.map +0 -1
- package/dist/chunk-RBJBODQP.js.map +0 -1
- package/dist/chunk-RUYOL7JZ.js +0 -4
- package/dist/chunk-SSQWYMQR.js.map +0 -1
- package/dist/fonts/montserrat/montserrat-latin-100-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-200-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-300-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-400-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-500-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-600-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-700-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-800-normal.woff2 +0 -0
- package/dist/fonts/montserrat/montserrat-latin-900-normal.woff2 +0 -0
- package/dist/fonts/source-sans-3/source-sans-3-latin-400-normal.woff2 +0 -0
- package/dist/image-D7GlnOio.d.ts +0 -30
- package/dist/media-Njv378j7.d.ts +0 -13
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { ComponentType, ReactNode } from 'react';
|
|
2
|
-
import { S as SectionBackground, T as Theme } from './section-background-
|
|
3
|
-
import { T as ThemeStyle } from './theme-style-
|
|
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
|
|
7
7
|
* generic (unlike CourseLit's LMS-specific page types) since FrontLit pages
|
|
8
8
|
* can be a marketing site, a blog post, a changelog entry, etc.
|
|
9
9
|
*/
|
|
10
|
-
type PageType = "site" | "blog" | "landing" | "post" | "custom";
|
|
11
10
|
interface WidgetMetadata {
|
|
12
11
|
name: string;
|
|
13
12
|
displayName: string;
|
|
14
13
|
description?: string;
|
|
15
|
-
compatibleWith
|
|
14
|
+
compatibleWith?: string[];
|
|
16
15
|
icon?: string;
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
@@ -51,12 +50,14 @@ interface WidgetDefaultSettings {
|
|
|
51
50
|
layout?: string;
|
|
52
51
|
}
|
|
53
52
|
interface PageData extends Record<string, unknown> {
|
|
54
|
-
pageType
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
pageType?: 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;
|
|
60
61
|
/** The page's team (public id) and slug, plus the base URL of FrontLit's
|
|
61
62
|
* public API — threaded through so blocks that make unauthenticated
|
|
62
63
|
* public calls (e.g. the email-form block's lead capture, architecture.md
|
|
@@ -76,13 +77,12 @@ interface WidgetProps<T extends WidgetDefaultSettings = WidgetDefaultSettings> {
|
|
|
76
77
|
/** Host-resolved data rendered by a generic `data-slot` block. */
|
|
77
78
|
data?: ReactNode;
|
|
78
79
|
editing?: boolean;
|
|
79
|
-
/**
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
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;
|
|
86
86
|
}
|
|
87
87
|
interface WidgetEditorProps<T extends WidgetDefaultSettings = WidgetDefaultSettings> {
|
|
88
88
|
settings: T;
|
|
@@ -93,7 +93,14 @@ interface Widget<T extends WidgetDefaultSettings = WidgetDefaultSettings> {
|
|
|
93
93
|
metadata: WidgetMetadata;
|
|
94
94
|
widget: ComponentType<WidgetProps<T>>;
|
|
95
95
|
editor?: ComponentType<WidgetEditorProps<T>>;
|
|
96
|
+
/**
|
|
97
|
+
* Block-specific design controls rendered on the panel's Design tab
|
|
98
|
+
* alongside layouts and common section styling.
|
|
99
|
+
*/
|
|
100
|
+
designEditor?: ComponentType<WidgetEditorProps<T>>;
|
|
96
101
|
getDefaultSettings?: () => Partial<T>;
|
|
102
|
+
/** Offer per-device title sizes (`settings.titleSize`) on the Design tab. */
|
|
103
|
+
titleSize?: boolean;
|
|
97
104
|
/**
|
|
98
105
|
* Alternate layouts this block can render its data in, selectable from
|
|
99
106
|
* the Design tab. The widget reads `settings.layout` while rendering
|
|
@@ -102,4 +109,4 @@ interface Widget<T extends WidgetDefaultSettings = WidgetDefaultSettings> {
|
|
|
102
109
|
layouts?: BlockLayout[];
|
|
103
110
|
}
|
|
104
111
|
|
|
105
|
-
export type { BlockLayout as B, PageData as P, Widget as W,
|
|
112
|
+
export type { BlockLayout as B, PageData as P, Widget as W, WidgetDefaultSettings as a, WidgetEditorProps as b, WidgetInstance as c, WidgetMetadata as d, WidgetProps as e };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontlit/page-builder",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
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
|
]
|
|
@@ -105,38 +147,56 @@
|
|
|
105
147
|
"landing-page",
|
|
106
148
|
"frontlit"
|
|
107
149
|
],
|
|
150
|
+
"scripts": {
|
|
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",
|
|
154
|
+
"clean": "rimraf dist",
|
|
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"
|
|
159
|
+
},
|
|
108
160
|
"peerDependencies": {
|
|
109
161
|
"react": "^18.0.0 || ^19.0.0",
|
|
110
162
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
111
163
|
},
|
|
112
164
|
"dependencies": {
|
|
165
|
+
"@frontlit/media-uploader": "0.1.0-alpha.0",
|
|
166
|
+
"@frontlit/text-editor": "0.1.0-alpha.2",
|
|
167
|
+
"@radix-ui/react-alert-dialog": "^1.1.23",
|
|
168
|
+
"@radix-ui/react-avatar": "^1.2.6",
|
|
169
|
+
"@radix-ui/react-checkbox": "^1.3.11",
|
|
113
170
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
171
|
+
"@radix-ui/react-dropdown-menu": "^2.1.24",
|
|
114
172
|
"@radix-ui/react-label": "^2.1.8",
|
|
173
|
+
"@radix-ui/react-popover": "^1.1.23",
|
|
174
|
+
"@radix-ui/react-radio-group": "^1.4.7",
|
|
175
|
+
"@radix-ui/react-select": "^2.3.7",
|
|
176
|
+
"@radix-ui/react-separator": "^1.1.15",
|
|
115
177
|
"@radix-ui/react-slot": "^1.2.4",
|
|
116
178
|
"@radix-ui/react-switch": "^1.2.6",
|
|
179
|
+
"@radix-ui/react-tooltip": "^1.2.16",
|
|
117
180
|
"class-variance-authority": "^0.7.1",
|
|
118
181
|
"clsx": "^2.1.1",
|
|
119
182
|
"color-convert": "^3.1.0",
|
|
183
|
+
"jsonc-parser": "^3.3.1",
|
|
120
184
|
"lucide-react": "^0.553.0",
|
|
121
185
|
"tailwind-merge": "^3.4.0",
|
|
122
186
|
"tw-animate-css": "^1.4.0",
|
|
123
|
-
"
|
|
187
|
+
"zod": "^3.25.76"
|
|
124
188
|
},
|
|
125
189
|
"devDependencies": {
|
|
190
|
+
"@tailwindcss/cli": "^4.1.0",
|
|
126
191
|
"@types/color-convert": "^2.0.4",
|
|
127
192
|
"@types/node": "^20.0.0",
|
|
128
193
|
"@types/react": "^19.0.0",
|
|
129
194
|
"@types/react-dom": "^19.0.0",
|
|
130
|
-
"@tailwindcss/cli": "^4.1.0",
|
|
131
195
|
"rimraf": "^5.0.0",
|
|
132
196
|
"tailwindcss": "^4.1.0",
|
|
133
197
|
"tsup": "^8.3.0",
|
|
134
|
-
"typescript": "^5.6.2"
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
"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",
|
|
138
|
-
"dev": "tsup --watch",
|
|
139
|
-
"clean": "rimraf dist",
|
|
140
|
-
"check-types": "tsc --noEmit"
|
|
198
|
+
"typescript": "^5.6.2",
|
|
199
|
+
"vitest": "^3.2.4",
|
|
200
|
+
"zod-to-json-schema": "^3.25.2"
|
|
141
201
|
}
|
|
142
|
-
}
|
|
202
|
+
}
|