@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.
Files changed (116) hide show
  1. package/README.md +38 -2
  2. package/dist/blocks/index.d.ts +35 -21
  3. package/dist/blocks/index.js +4 -3
  4. package/dist/builder/index.d.ts +8 -11
  5. package/dist/builder/index.js +7 -5
  6. package/dist/{button-C3VrMJkr.d.ts → button-OLKN3wPf.d.ts} +3 -3
  7. package/dist/{chunk-7W6Q4WA7.js → chunk-36QHCIPM.js} +252 -282
  8. package/dist/chunk-36QHCIPM.js.map +1 -0
  9. package/dist/{chunk-GTY75HW2.js → chunk-ATNM5JHI.js} +2 -2
  10. package/dist/chunk-ATNM5JHI.js.map +1 -0
  11. package/dist/chunk-BBI7UHOA.js +56 -0
  12. package/dist/chunk-BBI7UHOA.js.map +1 -0
  13. package/dist/{chunk-MO76KZY2.js → chunk-GIKTOAQS.js} +661 -423
  14. package/dist/chunk-GIKTOAQS.js.map +1 -0
  15. package/dist/chunk-HWOVSHIW.js +4 -0
  16. package/dist/{chunk-RUYOL7JZ.js.map → chunk-HWOVSHIW.js.map} +1 -1
  17. package/dist/{chunk-SSQWYMQR.js → chunk-IU4KATI2.js} +74 -129
  18. package/dist/chunk-IU4KATI2.js.map +1 -0
  19. package/dist/chunk-J7Z4UW45.js +3418 -0
  20. package/dist/chunk-J7Z4UW45.js.map +1 -0
  21. package/dist/{chunk-7KIX4WAO.js → chunk-K4WCLHMS.js} +1435 -1382
  22. package/dist/chunk-K4WCLHMS.js.map +1 -0
  23. package/dist/chunk-XU7ALPGQ.js +22 -0
  24. package/dist/chunk-XU7ALPGQ.js.map +1 -0
  25. package/dist/components/index.d.ts +33 -8
  26. package/dist/components/index.js +43 -2
  27. package/dist/components/index.js.map +1 -1
  28. package/dist/data-slots.d.ts +3 -3
  29. package/dist/data-slots.js +1 -1
  30. package/dist/fonts/archivo/archivo-latin-variable.woff2 +0 -0
  31. package/dist/fonts/hanken-grotesk/hanken-grotesk-latin-variable.woff2 +0 -0
  32. package/dist/fonts/jetbrains-mono/jetbrains-mono-latin-variable.woff2 +0 -0
  33. package/dist/fonts/spline-sans-mono/spline-sans-mono-latin-variable.woff2 +0 -0
  34. package/dist/heading-DQCxQt38.d.ts +20 -0
  35. package/dist/image-Bk8kPXwP.d.ts +52 -0
  36. package/dist/index.d.ts +18 -11
  37. package/dist/index.js +9 -7
  38. package/dist/media-CnLImjVC.d.ts +21 -0
  39. package/dist/models/index.d.ts +6 -6
  40. package/dist/models/index.js +2 -1
  41. package/dist/{page-DfVl_aHX.d.ts → page-B5Gmm-Ys.d.ts} +2 -3
  42. package/dist/primitives/index.d.ts +287 -61
  43. package/dist/primitives/index.js +2 -1
  44. package/dist/renderer/index.d.ts +12 -8
  45. package/dist/renderer/index.js +6 -4
  46. package/dist/{section-background-BgOCp5l3.d.ts → section-background-6V_LCi5e.d.ts} +1 -1
  47. package/dist/server/index.d.ts +103 -0
  48. package/dist/server/index.js +2649 -0
  49. package/dist/server/index.js.map +1 -0
  50. package/dist/server/islands/code-snippet.d.ts +17 -0
  51. package/dist/server/islands/code-snippet.js +72 -0
  52. package/dist/server/islands/code-snippet.js.map +1 -0
  53. package/dist/server/islands/email-form.d.ts +50 -0
  54. package/dist/server/islands/email-form.js +406 -0
  55. package/dist/server/islands/email-form.js.map +1 -0
  56. package/dist/server/islands/header-mobile-menu.d.ts +22 -0
  57. package/dist/server/islands/header-mobile-menu.js +422 -0
  58. package/dist/server/islands/header-mobile-menu.js.map +1 -0
  59. package/dist/server/islands/inline-embed.d.ts +28 -0
  60. package/dist/server/islands/inline-embed.js +84 -0
  61. package/dist/server/islands/inline-embed.js.map +1 -0
  62. package/dist/server/islands/marquee-track.d.ts +18 -0
  63. package/dist/server/islands/marquee-track.js +67 -0
  64. package/dist/server/islands/marquee-track.js.map +1 -0
  65. package/dist/server/islands/nav-link.d.ts +37 -0
  66. package/dist/server/islands/nav-link.js +67 -0
  67. package/dist/server/islands/nav-link.js.map +1 -0
  68. package/dist/server/islands/support-form.d.ts +17 -0
  69. package/dist/server/islands/support-form.js +469 -0
  70. package/dist/server/islands/support-form.js.map +1 -0
  71. package/dist/server/islands/theme-mode-switcher.d.ts +38 -0
  72. package/dist/server/islands/theme-mode-switcher.js +169 -0
  73. package/dist/server/islands/theme-mode-switcher.js.map +1 -0
  74. package/dist/server/islands/video-with-preview.d.ts +13 -0
  75. package/dist/server/islands/video-with-preview.js +269 -0
  76. package/dist/server/islands/video-with-preview.js.map +1 -0
  77. package/dist/server/primitives.d.ts +200 -0
  78. package/dist/server/primitives.js +888 -0
  79. package/dist/server/primitives.js.map +1 -0
  80. package/dist/server/schema.d.ts +11308 -0
  81. package/dist/server/schema.js +6179 -0
  82. package/dist/server/schema.js.map +1 -0
  83. package/dist/server/theme-CF3fIKvw.d.ts +9 -0
  84. package/dist/{theme-style-39nxXQy0.d.ts → server/theme-style-5_AGy-4V.d.ts} +43 -1
  85. package/dist/server/theme-style-BPaMwk88.d.ts +183 -0
  86. package/dist/server/theme.d.ts +28 -0
  87. package/dist/{chunk-RBJBODQP.js → server/theme.js} +903 -1243
  88. package/dist/server/theme.js.map +1 -0
  89. package/dist/server/widget-YH9BrOwY.d.ts +77 -0
  90. package/dist/styles.css +4016 -8317
  91. package/dist/theme-style-BVd5tOsc.d.ts +183 -0
  92. package/dist/theme.css +186 -191
  93. package/dist/{widget--uEOpdq3.d.ts → widget-CpE2HdgU.d.ts} +25 -18
  94. package/package.json +71 -11
  95. package/schema/page.v1.json +3855 -0
  96. package/schema/site.v1.json +3811 -0
  97. package/dist/alignment-dZDzN96G.d.ts +0 -5
  98. package/dist/chunk-7KIX4WAO.js.map +0 -1
  99. package/dist/chunk-7W6Q4WA7.js.map +0 -1
  100. package/dist/chunk-GTY75HW2.js.map +0 -1
  101. package/dist/chunk-MO76KZY2.js.map +0 -1
  102. package/dist/chunk-RBJBODQP.js.map +0 -1
  103. package/dist/chunk-RUYOL7JZ.js +0 -4
  104. package/dist/chunk-SSQWYMQR.js.map +0 -1
  105. package/dist/fonts/montserrat/montserrat-latin-100-normal.woff2 +0 -0
  106. package/dist/fonts/montserrat/montserrat-latin-200-normal.woff2 +0 -0
  107. package/dist/fonts/montserrat/montserrat-latin-300-normal.woff2 +0 -0
  108. package/dist/fonts/montserrat/montserrat-latin-400-normal.woff2 +0 -0
  109. package/dist/fonts/montserrat/montserrat-latin-500-normal.woff2 +0 -0
  110. package/dist/fonts/montserrat/montserrat-latin-600-normal.woff2 +0 -0
  111. package/dist/fonts/montserrat/montserrat-latin-700-normal.woff2 +0 -0
  112. package/dist/fonts/montserrat/montserrat-latin-800-normal.woff2 +0 -0
  113. package/dist/fonts/montserrat/montserrat-latin-900-normal.woff2 +0 -0
  114. package/dist/fonts/source-sans-3/source-sans-3-latin-400-normal.woff2 +0 -0
  115. package/dist/image-D7GlnOio.d.ts +0 -30
  116. package/dist/media-Njv378j7.d.ts +0 -13
@@ -0,0 +1,9 @@
1
+ import { T as ThemeStyle } from './theme-style-BPaMwk88.js';
2
+
3
+ interface Theme {
4
+ id: string;
5
+ name: string;
6
+ theme: ThemeStyle;
7
+ }
8
+
9
+ export type { Theme as T };
@@ -17,6 +17,14 @@ interface Typography {
17
17
  textTransform?: TextTransform;
18
18
  textDecoration?: TextDecoration;
19
19
  textOverflow?: TextOverflow;
20
+ /**
21
+ * Fluid size in px: scales from `min` on a phone to `max` on a desktop
22
+ * and overrides `fontSize`. Honoured by the heading levels.
23
+ */
24
+ fluid?: {
25
+ min: number;
26
+ max: number;
27
+ };
20
28
  }
21
29
  interface Border {
22
30
  width?: "border" | "border-0" | "border-2" | "border-4" | "border-8";
@@ -35,6 +43,24 @@ interface DisabledStyle {
35
43
  opacity?: "opacity-50" | "opacity-75" | "opacity-100";
36
44
  cursor?: Cursor;
37
45
  }
46
+ interface MenuItemStyle {
47
+ padding?: Padding;
48
+ border?: Border;
49
+ custom?: CustomStyle;
50
+ }
51
+ interface MenuStyle {
52
+ padding?: Padding;
53
+ border?: Border;
54
+ shadow?: Shadow;
55
+ custom?: CustomStyle;
56
+ item?: MenuItemStyle;
57
+ }
58
+ interface SurfaceStyle {
59
+ padding?: Padding;
60
+ border?: Border;
61
+ shadow?: Shadow;
62
+ custom?: CustomStyle;
63
+ }
38
64
  interface Colors {
39
65
  background: string;
40
66
  foreground: string;
@@ -82,6 +108,8 @@ interface ThemeStyle {
82
108
  };
83
109
  typography: {
84
110
  preheader: Typography;
111
+ /** Hero-sized headline. Optional for older themes; falls back to `header1`. */
112
+ display?: Typography;
85
113
  header1: Typography;
86
114
  header2: Typography;
87
115
  header3: Typography;
@@ -94,7 +122,15 @@ interface ThemeStyle {
94
122
  button: Typography;
95
123
  input: Typography;
96
124
  caption: Typography;
125
+ /** Code snippets. Optional; defaults to JetBrains Mono. */
126
+ code?: Typography;
97
127
  };
128
+ /**
129
+ * How words wrapped in *asterisks* in a block title stand out: in the
130
+ * primary colour ("color", the default) or on a primary-coloured marker
131
+ * ("marker") for themes whose primary is close to the text colour.
132
+ */
133
+ highlight?: "color" | "marker";
98
134
  interactives: {
99
135
  button: {
100
136
  padding?: Padding;
@@ -103,6 +139,10 @@ interface ThemeStyle {
103
139
  custom?: CustomStyle;
104
140
  disabled?: DisabledStyle;
105
141
  };
142
+ menu?: MenuStyle;
143
+ dialog?: SurfaceStyle;
144
+ popover?: SurfaceStyle;
145
+ tooltip?: SurfaceStyle;
106
146
  link: {
107
147
  padding?: Padding;
108
148
  border?: Border;
@@ -130,6 +170,8 @@ interface ThemeStyle {
130
170
  width: "max-w-2xl" | "max-w-3xl" | "max-w-4xl" | "max-w-5xl" | "max-w-6xl";
131
171
  };
132
172
  section: {
173
+ /** Draw a 1px hairline between sections. */
174
+ dividers?: boolean;
133
175
  padding: {
134
176
  x: "px-0" | "px-4" | "px-6" | "px-8" | "px-10" | "px-12" | "px-16" | "px-20" | "px-24" | "px-32" | "px-40" | "px-48" | "px-56" | "px-64";
135
177
  y: "py-0" | "py-4" | "py-6" | "py-8" | "py-10" | "py-12" | "py-16" | "py-20" | "py-24" | "py-32" | "py-40" | "py-48" | "py-56" | "py-64";
@@ -138,4 +180,4 @@ interface ThemeStyle {
138
180
  };
139
181
  }
140
182
 
141
- export type { Border as B, Colors as C, DisabledStyle as D, Padding as P, Shadow as S, ThemeStyle as T, CustomStyle as a, Typography as b };
183
+ export type { ThemeStyle as T };
@@ -0,0 +1,183 @@
1
+ type FontWeight = "font-thin" | "font-extralight" | "font-light" | "font-normal" | "font-medium" | "font-semibold" | "font-bold" | "font-extrabold" | "font-black";
2
+ type FontSize = "text-xs" | "text-sm" | "text-base" | "text-lg" | "text-xl" | "text-2xl" | "text-3xl" | "text-4xl" | "text-5xl" | "text-6xl" | "text-7xl" | "text-8xl" | "text-9xl";
3
+ type LineHeight = "leading-none" | "leading-tight" | "leading-snug" | "leading-normal" | "leading-relaxed" | "leading-loose";
4
+ type LetterSpacing = "tracking-tighter" | "tracking-tight" | "tracking-normal" | "tracking-wide" | "tracking-wider" | "tracking-widest";
5
+ type TextTransform = "uppercase" | "lowercase" | "capitalize" | "normal-case";
6
+ type TextDecoration = "underline" | "line-through" | "no-underline";
7
+ type TextOverflow = "truncate" | "text-ellipsis" | "text-clip";
8
+ type BorderRadius = "rounded-none" | "rounded-sm" | "rounded" | "rounded-md" | "rounded-lg" | "rounded-xl" | "rounded-2xl" | "rounded-3xl" | "rounded-full";
9
+ type Shadow = "shadow-2xs" | "shadow-xs" | "shadow-sm" | "shadow-md" | "shadow-lg" | "shadow-xl" | "shadow-2xl" | "shadow-none";
10
+ type Cursor = "cursor-not-allowed" | "cursor-default" | "cursor-pointer";
11
+ interface Typography {
12
+ fontFamily: string;
13
+ fontSize: FontSize;
14
+ fontWeight: FontWeight;
15
+ lineHeight?: LineHeight;
16
+ letterSpacing?: LetterSpacing;
17
+ textTransform?: TextTransform;
18
+ textDecoration?: TextDecoration;
19
+ textOverflow?: TextOverflow;
20
+ /**
21
+ * Fluid size in px: scales from `min` on a phone to `max` on a desktop
22
+ * and overrides `fontSize`. Honoured by the heading levels.
23
+ */
24
+ fluid?: {
25
+ min: number;
26
+ max: number;
27
+ };
28
+ }
29
+ interface Border {
30
+ width?: "border" | "border-0" | "border-2" | "border-4" | "border-8";
31
+ radius?: BorderRadius;
32
+ style?: "border-solid" | "border-dashed" | "border-dotted" | "border-double" | "border-hidden" | "border-none";
33
+ }
34
+ interface Padding {
35
+ x?: "px-0" | "px-1" | "px-2" | "px-3" | "px-4" | "px-5" | "px-6" | "px-8" | "px-10" | "px-12" | "px-16" | "px-20" | "px-24" | "px-32" | "px-40" | "px-48" | "px-56" | "px-64";
36
+ y?: "py-0" | "py-1" | "py-2" | "py-3" | "py-4" | "py-5" | "py-6" | "py-8" | "py-10" | "py-12" | "py-16" | "py-20" | "py-24" | "py-32" | "py-40" | "py-48" | "py-56" | "py-64";
37
+ }
38
+ type CustomStyle = string;
39
+ interface DisabledStyle {
40
+ color?: string;
41
+ background?: string;
42
+ border?: string;
43
+ opacity?: "opacity-50" | "opacity-75" | "opacity-100";
44
+ cursor?: Cursor;
45
+ }
46
+ interface MenuItemStyle {
47
+ padding?: Padding;
48
+ border?: Border;
49
+ custom?: CustomStyle;
50
+ }
51
+ interface MenuStyle {
52
+ padding?: Padding;
53
+ border?: Border;
54
+ shadow?: Shadow;
55
+ custom?: CustomStyle;
56
+ item?: MenuItemStyle;
57
+ }
58
+ interface SurfaceStyle {
59
+ padding?: Padding;
60
+ border?: Border;
61
+ shadow?: Shadow;
62
+ custom?: CustomStyle;
63
+ }
64
+ interface Colors {
65
+ background: string;
66
+ foreground: string;
67
+ card: string;
68
+ cardForeground: string;
69
+ popover: string;
70
+ popoverForeground: string;
71
+ primary: string;
72
+ primaryForeground: string;
73
+ secondary: string;
74
+ secondaryForeground: string;
75
+ muted: string;
76
+ mutedForeground: string;
77
+ accent: string;
78
+ accentForeground: string;
79
+ destructive: string;
80
+ border: string;
81
+ input: string;
82
+ ring: string;
83
+ chart1: string;
84
+ chart2: string;
85
+ chart3: string;
86
+ chart4: string;
87
+ chart5: string;
88
+ sidebar: string;
89
+ sidebarForeground: string;
90
+ sidebarPrimary: string;
91
+ sidebarPrimaryForeground: string;
92
+ sidebarAccent: string;
93
+ sidebarAccentForeground: string;
94
+ sidebarBorder: string;
95
+ sidebarRing: string;
96
+ shadow2xs: string;
97
+ shadowXs: string;
98
+ shadowSm: string;
99
+ shadowMd: string;
100
+ shadowLg: string;
101
+ shadowXl: string;
102
+ shadow2xl: string;
103
+ }
104
+ interface ThemeStyle {
105
+ colors: {
106
+ light: Colors;
107
+ dark: Colors;
108
+ };
109
+ typography: {
110
+ preheader: Typography;
111
+ /** Hero-sized headline. Optional for older themes; falls back to `header1`. */
112
+ display?: Typography;
113
+ header1: Typography;
114
+ header2: Typography;
115
+ header3: Typography;
116
+ header4: Typography;
117
+ subheader1: Typography;
118
+ subheader2: Typography;
119
+ text1: Typography;
120
+ text2: Typography;
121
+ link: Typography;
122
+ button: Typography;
123
+ input: Typography;
124
+ caption: Typography;
125
+ /** Code snippets. Optional; defaults to JetBrains Mono. */
126
+ code?: Typography;
127
+ };
128
+ /**
129
+ * How words wrapped in *asterisks* in a block title stand out: in the
130
+ * primary colour ("color", the default) or on a primary-coloured marker
131
+ * ("marker") for themes whose primary is close to the text colour.
132
+ */
133
+ highlight?: "color" | "marker";
134
+ interactives: {
135
+ button: {
136
+ padding?: Padding;
137
+ border?: Border;
138
+ shadow?: Shadow;
139
+ custom?: CustomStyle;
140
+ disabled?: DisabledStyle;
141
+ };
142
+ menu?: MenuStyle;
143
+ dialog?: SurfaceStyle;
144
+ popover?: SurfaceStyle;
145
+ tooltip?: SurfaceStyle;
146
+ link: {
147
+ padding?: Padding;
148
+ border?: Border;
149
+ textShadow?: string;
150
+ custom?: CustomStyle;
151
+ disabled?: DisabledStyle;
152
+ };
153
+ card: {
154
+ padding?: Padding;
155
+ border?: Border;
156
+ shadow?: Shadow;
157
+ custom?: CustomStyle;
158
+ };
159
+ input: {
160
+ borderRadius?: BorderRadius;
161
+ padding?: Padding;
162
+ border?: Border;
163
+ shadow?: Shadow;
164
+ custom?: CustomStyle;
165
+ disabled?: DisabledStyle;
166
+ };
167
+ };
168
+ structure: {
169
+ page: {
170
+ width: "max-w-2xl" | "max-w-3xl" | "max-w-4xl" | "max-w-5xl" | "max-w-6xl";
171
+ };
172
+ section: {
173
+ /** Draw a 1px hairline between sections. */
174
+ dividers?: boolean;
175
+ padding: {
176
+ x: "px-0" | "px-4" | "px-6" | "px-8" | "px-10" | "px-12" | "px-16" | "px-20" | "px-24" | "px-32" | "px-40" | "px-48" | "px-56" | "px-64";
177
+ y: "py-0" | "py-4" | "py-6" | "py-8" | "py-10" | "py-12" | "py-16" | "py-20" | "py-24" | "py-32" | "py-40" | "py-48" | "py-56" | "py-64";
178
+ };
179
+ };
180
+ };
181
+ }
182
+
183
+ export type { ThemeStyle as T, Typography as a };
@@ -0,0 +1,28 @@
1
+ import { T as Theme } from './theme-CF3fIKvw.js';
2
+ import './theme-style-BPaMwk88.js';
3
+
4
+ declare const themes: Theme[];
5
+
6
+ /**
7
+ * Generates full CSS color values for the custom properties every primitive
8
+ * reads. Full colors (rather than bare HSL channels) let the renderer coexist
9
+ * with Tailwind v4 hosts whose semantic utilities use `var(--primary)` while
10
+ * still accepting CourseLit-derived hex theme data.
11
+ *
12
+ * Callers rendering more than one theme in a document should pass a unique
13
+ * selector so one renderer cannot overwrite another renderer's variables.
14
+ */
15
+ declare function generateThemeStyles(theme: Theme, selector?: string): string;
16
+
17
+ /**
18
+ * Theme helpers that are safe to call from React Server Components and light
19
+ * enough to import from client components (the site's chat widget does).
20
+ */
21
+
22
+ /**
23
+ * Picks the theme a site paints with: a custom `themeStyle` wins, then the
24
+ * stock theme named by `themeId`, then the default theme.
25
+ */
26
+ declare function resolveTheme(themeId: string | null, themeStyle: Record<string, unknown> | null): Theme;
27
+
28
+ export { generateThemeStyles, resolveTheme, themes };