foundrycms 0.1.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/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/__tests__/foundry.test.d.ts +2 -0
- package/dist/__tests__/foundry.test.d.ts.map +1 -0
- package/dist/__tests__/foundry.test.js +1013 -0
- package/dist/__tests__/foundry.test.js.map +1 -0
- package/dist/config-manager.d.ts +33 -0
- package/dist/config-manager.d.ts.map +1 -0
- package/dist/config-manager.js +169 -0
- package/dist/config-manager.js.map +1 -0
- package/dist/hook-system.d.ts +61 -0
- package/dist/hook-system.d.ts.map +1 -0
- package/dist/hook-system.js +114 -0
- package/dist/hook-system.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/page-builder/element-registry.d.ts +47 -0
- package/dist/page-builder/element-registry.d.ts.map +1 -0
- package/dist/page-builder/element-registry.js +98 -0
- package/dist/page-builder/element-registry.js.map +1 -0
- package/dist/page-builder/elements/index.d.ts +22 -0
- package/dist/page-builder/elements/index.d.ts.map +1 -0
- package/dist/page-builder/elements/index.js +770 -0
- package/dist/page-builder/elements/index.js.map +1 -0
- package/dist/page-builder/renderer.d.ts +14 -0
- package/dist/page-builder/renderer.d.ts.map +1 -0
- package/dist/page-builder/renderer.js +240 -0
- package/dist/page-builder/renderer.js.map +1 -0
- package/dist/page-builder/serializer.d.ts +1220 -0
- package/dist/page-builder/serializer.d.ts.map +1 -0
- package/dist/page-builder/serializer.js +111 -0
- package/dist/page-builder/serializer.js.map +1 -0
- package/dist/page-builder/template-studio.d.ts +37 -0
- package/dist/page-builder/template-studio.d.ts.map +1 -0
- package/dist/page-builder/template-studio.js +923 -0
- package/dist/page-builder/template-studio.js.map +1 -0
- package/dist/page-builder/types.d.ts +99 -0
- package/dist/page-builder/types.d.ts.map +1 -0
- package/dist/page-builder/types.js +5 -0
- package/dist/page-builder/types.js.map +1 -0
- package/dist/plugin-system.d.ts +128 -0
- package/dist/plugin-system.d.ts.map +1 -0
- package/dist/plugin-system.js +252 -0
- package/dist/plugin-system.js.map +1 -0
- package/dist/plugins/communication.d.ts +6 -0
- package/dist/plugins/communication.d.ts.map +1 -0
- package/dist/plugins/communication.js +922 -0
- package/dist/plugins/communication.js.map +1 -0
- package/dist/plugins/core.d.ts +6 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +675 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/growth.d.ts +6 -0
- package/dist/plugins/growth.d.ts.map +1 -0
- package/dist/plugins/growth.js +668 -0
- package/dist/plugins/growth.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +43 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/operations.d.ts +7 -0
- package/dist/plugins/operations.d.ts.map +1 -0
- package/dist/plugins/operations.js +930 -0
- package/dist/plugins/operations.js.map +1 -0
- package/dist/theme/presets.d.ts +8 -0
- package/dist/theme/presets.d.ts.map +1 -0
- package/dist/theme/presets.js +257 -0
- package/dist/theme/presets.js.map +1 -0
- package/dist/theme/types.d.ts +83 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +5 -0
- package/dist/theme/types.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,923 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// TemplateStudio class
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export class TemplateStudio {
|
|
5
|
+
templates = new Map();
|
|
6
|
+
register(template) {
|
|
7
|
+
if (this.templates.has(template.id)) {
|
|
8
|
+
throw new Error(`Template "${template.id}" is already registered.`);
|
|
9
|
+
}
|
|
10
|
+
this.templates.set(template.id, template);
|
|
11
|
+
}
|
|
12
|
+
get(id) {
|
|
13
|
+
return this.templates.get(id);
|
|
14
|
+
}
|
|
15
|
+
list() {
|
|
16
|
+
return Array.from(this.templates.values());
|
|
17
|
+
}
|
|
18
|
+
listByCategory(category) {
|
|
19
|
+
return this.list().filter((t) => t.category === category);
|
|
20
|
+
}
|
|
21
|
+
search(query) {
|
|
22
|
+
const q = query.toLowerCase();
|
|
23
|
+
return this.list().filter((t) => {
|
|
24
|
+
if (t.name.toLowerCase().includes(q))
|
|
25
|
+
return true;
|
|
26
|
+
if (t.description.toLowerCase().includes(q))
|
|
27
|
+
return true;
|
|
28
|
+
if (t.category.toLowerCase().includes(q))
|
|
29
|
+
return true;
|
|
30
|
+
if (t.id.toLowerCase().includes(q))
|
|
31
|
+
return true;
|
|
32
|
+
return false;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
unregister(id) {
|
|
36
|
+
return this.templates.delete(id);
|
|
37
|
+
}
|
|
38
|
+
has(id) {
|
|
39
|
+
return this.templates.has(id);
|
|
40
|
+
}
|
|
41
|
+
get count() {
|
|
42
|
+
return this.templates.size;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Helper: generate unique IDs for template content
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
let _counter = 0;
|
|
49
|
+
function tid(prefix) {
|
|
50
|
+
_counter++;
|
|
51
|
+
return `tpl-${prefix}-${_counter}`;
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// 10 Starter Templates
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
export const heroSplitTemplate = {
|
|
57
|
+
id: 'hero-split',
|
|
58
|
+
name: 'Hero Split',
|
|
59
|
+
category: 'hero',
|
|
60
|
+
description: 'Split layout hero section with heading and CTA on the left, image on the right',
|
|
61
|
+
content: [
|
|
62
|
+
{
|
|
63
|
+
id: tid('row'),
|
|
64
|
+
type: 'row',
|
|
65
|
+
settings: {
|
|
66
|
+
layout: 'boxed',
|
|
67
|
+
paddingTop: '6rem',
|
|
68
|
+
paddingBottom: '6rem',
|
|
69
|
+
gap: '3rem',
|
|
70
|
+
},
|
|
71
|
+
columns: [
|
|
72
|
+
{
|
|
73
|
+
id: tid('col'),
|
|
74
|
+
width: '1/2',
|
|
75
|
+
settings: { verticalAlign: 'center' },
|
|
76
|
+
elements: [
|
|
77
|
+
{
|
|
78
|
+
id: tid('el'),
|
|
79
|
+
type: 'heading',
|
|
80
|
+
settings: {
|
|
81
|
+
text: 'Build beautiful websites without the complexity',
|
|
82
|
+
level: 'h1',
|
|
83
|
+
fontSize: '3rem',
|
|
84
|
+
fontWeight: '800',
|
|
85
|
+
color: '#111827',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: tid('el'),
|
|
90
|
+
type: 'text-block',
|
|
91
|
+
settings: {
|
|
92
|
+
content: '<p class="text-xl text-gray-600">Create stunning, professional websites in minutes with our intuitive drag-and-drop builder. No coding required.</p>',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: tid('el'),
|
|
97
|
+
type: 'button',
|
|
98
|
+
settings: {
|
|
99
|
+
text: 'Get Started Free',
|
|
100
|
+
url: '#signup',
|
|
101
|
+
variant: 'primary',
|
|
102
|
+
size: 'lg',
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: tid('col'),
|
|
109
|
+
width: '1/2',
|
|
110
|
+
settings: { verticalAlign: 'center' },
|
|
111
|
+
elements: [
|
|
112
|
+
{
|
|
113
|
+
id: tid('el'),
|
|
114
|
+
type: 'image',
|
|
115
|
+
settings: {
|
|
116
|
+
src: '/images/hero-illustration.png',
|
|
117
|
+
alt: 'Platform dashboard preview',
|
|
118
|
+
width: '100%',
|
|
119
|
+
borderRadius: '1rem',
|
|
120
|
+
objectFit: 'cover',
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
export const aboutTeamTemplate = {
|
|
130
|
+
id: 'about-team',
|
|
131
|
+
name: 'About Team',
|
|
132
|
+
category: 'about',
|
|
133
|
+
description: 'About section introducing the team with a grid of member cards',
|
|
134
|
+
content: [
|
|
135
|
+
{
|
|
136
|
+
id: tid('row'),
|
|
137
|
+
type: 'row',
|
|
138
|
+
settings: {
|
|
139
|
+
layout: 'boxed',
|
|
140
|
+
paddingTop: '5rem',
|
|
141
|
+
paddingBottom: '5rem',
|
|
142
|
+
},
|
|
143
|
+
columns: [
|
|
144
|
+
{
|
|
145
|
+
id: tid('col'),
|
|
146
|
+
width: '1/1',
|
|
147
|
+
settings: {},
|
|
148
|
+
elements: [
|
|
149
|
+
{
|
|
150
|
+
id: tid('el'),
|
|
151
|
+
type: 'heading',
|
|
152
|
+
settings: {
|
|
153
|
+
text: 'Meet Our Team',
|
|
154
|
+
level: 'h2',
|
|
155
|
+
alignment: 'center',
|
|
156
|
+
fontSize: '2.5rem',
|
|
157
|
+
fontWeight: '700',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
id: tid('el'),
|
|
162
|
+
type: 'text-block',
|
|
163
|
+
settings: {
|
|
164
|
+
content: '<p class="text-center text-gray-600 max-w-2xl mx-auto">We are a passionate group of designers, developers, and strategists dedicated to helping you succeed online.</p>',
|
|
165
|
+
alignment: 'center',
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: tid('el'),
|
|
170
|
+
type: 'spacer',
|
|
171
|
+
settings: { height: '2rem' },
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
id: tid('row'),
|
|
179
|
+
type: 'row',
|
|
180
|
+
settings: {
|
|
181
|
+
layout: 'boxed',
|
|
182
|
+
paddingBottom: '3rem',
|
|
183
|
+
gap: '2rem',
|
|
184
|
+
},
|
|
185
|
+
columns: [
|
|
186
|
+
{
|
|
187
|
+
id: tid('col'),
|
|
188
|
+
width: '1/3',
|
|
189
|
+
settings: {},
|
|
190
|
+
elements: [
|
|
191
|
+
{
|
|
192
|
+
id: tid('el'),
|
|
193
|
+
type: 'image',
|
|
194
|
+
settings: { src: '/images/team/member-1.jpg', alt: 'Sarah Chen', borderRadius: '50%', width: '150px', height: '150px', alignment: 'center' },
|
|
195
|
+
},
|
|
196
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Sarah Chen', level: 'h4', alignment: 'center' } },
|
|
197
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-center text-gray-500">Lead Designer</p>', alignment: 'center' } },
|
|
198
|
+
],
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: tid('col'),
|
|
202
|
+
width: '1/3',
|
|
203
|
+
settings: {},
|
|
204
|
+
elements: [
|
|
205
|
+
{
|
|
206
|
+
id: tid('el'),
|
|
207
|
+
type: 'image',
|
|
208
|
+
settings: { src: '/images/team/member-2.jpg', alt: 'Marcus Johnson', borderRadius: '50%', width: '150px', height: '150px', alignment: 'center' },
|
|
209
|
+
},
|
|
210
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Marcus Johnson', level: 'h4', alignment: 'center' } },
|
|
211
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-center text-gray-500">Senior Developer</p>', alignment: 'center' } },
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: tid('col'),
|
|
216
|
+
width: '1/3',
|
|
217
|
+
settings: {},
|
|
218
|
+
elements: [
|
|
219
|
+
{
|
|
220
|
+
id: tid('el'),
|
|
221
|
+
type: 'image',
|
|
222
|
+
settings: { src: '/images/team/member-3.jpg', alt: 'Aisha Patel', borderRadius: '50%', width: '150px', height: '150px', alignment: 'center' },
|
|
223
|
+
},
|
|
224
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Aisha Patel', level: 'h4', alignment: 'center' } },
|
|
225
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-center text-gray-500">Product Strategist</p>', alignment: 'center' } },
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
};
|
|
232
|
+
export const servicesCardsTemplate = {
|
|
233
|
+
id: 'services-cards',
|
|
234
|
+
name: 'Services Cards',
|
|
235
|
+
category: 'services',
|
|
236
|
+
description: '3-column service cards with icons, titles, and descriptions',
|
|
237
|
+
content: [
|
|
238
|
+
{
|
|
239
|
+
id: tid('row'),
|
|
240
|
+
type: 'row',
|
|
241
|
+
settings: {
|
|
242
|
+
layout: 'boxed',
|
|
243
|
+
paddingTop: '5rem',
|
|
244
|
+
paddingBottom: '2rem',
|
|
245
|
+
},
|
|
246
|
+
columns: [
|
|
247
|
+
{
|
|
248
|
+
id: tid('col'),
|
|
249
|
+
width: '1/1',
|
|
250
|
+
settings: {},
|
|
251
|
+
elements: [
|
|
252
|
+
{
|
|
253
|
+
id: tid('el'),
|
|
254
|
+
type: 'heading',
|
|
255
|
+
settings: { text: 'Our Services', level: 'h2', alignment: 'center', fontSize: '2.5rem', fontWeight: '700' },
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
id: tid('el'),
|
|
259
|
+
type: 'text-block',
|
|
260
|
+
settings: { content: '<p class="text-center text-gray-600 max-w-2xl mx-auto">Everything you need to establish and grow your online presence.</p>', alignment: 'center' },
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
},
|
|
264
|
+
],
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
id: tid('row'),
|
|
268
|
+
type: 'row',
|
|
269
|
+
settings: {
|
|
270
|
+
layout: 'boxed',
|
|
271
|
+
paddingTop: '2rem',
|
|
272
|
+
paddingBottom: '5rem',
|
|
273
|
+
gap: '2rem',
|
|
274
|
+
},
|
|
275
|
+
columns: [
|
|
276
|
+
{
|
|
277
|
+
id: tid('col'),
|
|
278
|
+
width: '1/3',
|
|
279
|
+
settings: { padding: '2rem', className: 'bg-white rounded-xl shadow-md border border-gray-100' },
|
|
280
|
+
elements: [
|
|
281
|
+
{ id: tid('el'), type: 'icon', settings: { name: '🎨', size: '3rem', alignment: 'left' } },
|
|
282
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Web Design', level: 'h3', fontSize: '1.25rem' } },
|
|
283
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-gray-600">Custom, responsive designs that capture your brand identity and engage your audience from the first pixel.</p>' } },
|
|
284
|
+
],
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
id: tid('col'),
|
|
288
|
+
width: '1/3',
|
|
289
|
+
settings: { padding: '2rem', className: 'bg-white rounded-xl shadow-md border border-gray-100' },
|
|
290
|
+
elements: [
|
|
291
|
+
{ id: tid('el'), type: 'icon', settings: { name: '⚡', size: '3rem', alignment: 'left' } },
|
|
292
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Development', level: 'h3', fontSize: '1.25rem' } },
|
|
293
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-gray-600">Fast, scalable web applications built with modern technologies. From landing pages to complex platforms.</p>' } },
|
|
294
|
+
],
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
id: tid('col'),
|
|
298
|
+
width: '1/3',
|
|
299
|
+
settings: { padding: '2rem', className: 'bg-white rounded-xl shadow-md border border-gray-100' },
|
|
300
|
+
elements: [
|
|
301
|
+
{ id: tid('el'), type: 'icon', settings: { name: '📈', size: '3rem', alignment: 'left' } },
|
|
302
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'SEO & Marketing', level: 'h3', fontSize: '1.25rem' } },
|
|
303
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-gray-600">Data-driven strategies to boost your search rankings, drive organic traffic, and convert visitors into customers.</p>' } },
|
|
304
|
+
],
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
};
|
|
310
|
+
export const pricingThreeTierTemplate = {
|
|
311
|
+
id: 'pricing-three-tier',
|
|
312
|
+
name: 'Pricing Three Tier',
|
|
313
|
+
category: 'pricing',
|
|
314
|
+
description: 'Three pricing cards with the middle plan highlighted as most popular',
|
|
315
|
+
content: [
|
|
316
|
+
{
|
|
317
|
+
id: tid('row'),
|
|
318
|
+
type: 'row',
|
|
319
|
+
settings: { layout: 'boxed', paddingTop: '5rem', paddingBottom: '2rem' },
|
|
320
|
+
columns: [
|
|
321
|
+
{
|
|
322
|
+
id: tid('col'),
|
|
323
|
+
width: '1/1',
|
|
324
|
+
settings: {},
|
|
325
|
+
elements: [
|
|
326
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Simple, Transparent Pricing', level: 'h2', alignment: 'center', fontSize: '2.5rem', fontWeight: '700' } },
|
|
327
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-center text-gray-600 max-w-xl mx-auto">Choose the plan that fits your needs. Upgrade or downgrade at any time.</p>', alignment: 'center' } },
|
|
328
|
+
],
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
id: tid('row'),
|
|
334
|
+
type: 'row',
|
|
335
|
+
settings: { layout: 'boxed', paddingTop: '2rem', paddingBottom: '5rem', gap: '2rem' },
|
|
336
|
+
columns: [
|
|
337
|
+
{
|
|
338
|
+
id: tid('col'),
|
|
339
|
+
width: '1/3',
|
|
340
|
+
settings: { verticalAlign: 'center' },
|
|
341
|
+
elements: [
|
|
342
|
+
{
|
|
343
|
+
id: tid('el'),
|
|
344
|
+
type: 'pricing-table',
|
|
345
|
+
settings: {
|
|
346
|
+
name: 'Starter',
|
|
347
|
+
price: '$9',
|
|
348
|
+
period: '/month',
|
|
349
|
+
description: 'Perfect for personal projects',
|
|
350
|
+
features: [
|
|
351
|
+
{ text: '1 website', included: true },
|
|
352
|
+
{ text: '10GB storage', included: true },
|
|
353
|
+
{ text: 'Custom domain', included: true },
|
|
354
|
+
{ text: 'Priority support', included: false },
|
|
355
|
+
{ text: 'Analytics', included: false },
|
|
356
|
+
],
|
|
357
|
+
buttonText: 'Start Free Trial',
|
|
358
|
+
buttonUrl: '#',
|
|
359
|
+
highlighted: false,
|
|
360
|
+
},
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: tid('col'),
|
|
366
|
+
width: '1/3',
|
|
367
|
+
settings: { verticalAlign: 'center' },
|
|
368
|
+
elements: [
|
|
369
|
+
{
|
|
370
|
+
id: tid('el'),
|
|
371
|
+
type: 'pricing-table',
|
|
372
|
+
settings: {
|
|
373
|
+
name: 'Professional',
|
|
374
|
+
price: '$29',
|
|
375
|
+
period: '/month',
|
|
376
|
+
description: 'Best for growing businesses',
|
|
377
|
+
features: [
|
|
378
|
+
{ text: '10 websites', included: true },
|
|
379
|
+
{ text: '100GB storage', included: true },
|
|
380
|
+
{ text: 'Custom domain', included: true },
|
|
381
|
+
{ text: 'Priority support', included: true },
|
|
382
|
+
{ text: 'Analytics dashboard', included: true },
|
|
383
|
+
],
|
|
384
|
+
buttonText: 'Start Free Trial',
|
|
385
|
+
buttonUrl: '#',
|
|
386
|
+
highlighted: true,
|
|
387
|
+
highlightLabel: 'Most Popular',
|
|
388
|
+
},
|
|
389
|
+
},
|
|
390
|
+
],
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
id: tid('col'),
|
|
394
|
+
width: '1/3',
|
|
395
|
+
settings: { verticalAlign: 'center' },
|
|
396
|
+
elements: [
|
|
397
|
+
{
|
|
398
|
+
id: tid('el'),
|
|
399
|
+
type: 'pricing-table',
|
|
400
|
+
settings: {
|
|
401
|
+
name: 'Enterprise',
|
|
402
|
+
price: '$99',
|
|
403
|
+
period: '/month',
|
|
404
|
+
description: 'For teams and agencies',
|
|
405
|
+
features: [
|
|
406
|
+
{ text: 'Unlimited websites', included: true },
|
|
407
|
+
{ text: '1TB storage', included: true },
|
|
408
|
+
{ text: 'Custom domains', included: true },
|
|
409
|
+
{ text: 'Priority support', included: true },
|
|
410
|
+
{ text: 'Advanced analytics', included: true },
|
|
411
|
+
],
|
|
412
|
+
buttonText: 'Contact Sales',
|
|
413
|
+
buttonUrl: '#contact',
|
|
414
|
+
highlighted: false,
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
],
|
|
418
|
+
},
|
|
419
|
+
],
|
|
420
|
+
},
|
|
421
|
+
],
|
|
422
|
+
};
|
|
423
|
+
export const testimonialsCarouselTemplate = {
|
|
424
|
+
id: 'testimonials-carousel',
|
|
425
|
+
name: 'Testimonials Carousel',
|
|
426
|
+
category: 'testimonials',
|
|
427
|
+
description: 'Row of testimonial cards showing customer reviews with ratings',
|
|
428
|
+
content: [
|
|
429
|
+
{
|
|
430
|
+
id: tid('row'),
|
|
431
|
+
type: 'row',
|
|
432
|
+
settings: { layout: 'boxed', paddingTop: '5rem', paddingBottom: '2rem' },
|
|
433
|
+
columns: [
|
|
434
|
+
{
|
|
435
|
+
id: tid('col'),
|
|
436
|
+
width: '1/1',
|
|
437
|
+
settings: {},
|
|
438
|
+
elements: [
|
|
439
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'What Our Customers Say', level: 'h2', alignment: 'center', fontSize: '2.5rem', fontWeight: '700' } },
|
|
440
|
+
],
|
|
441
|
+
},
|
|
442
|
+
],
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
id: tid('row'),
|
|
446
|
+
type: 'row',
|
|
447
|
+
settings: { layout: 'boxed', paddingTop: '1rem', paddingBottom: '5rem', gap: '2rem' },
|
|
448
|
+
columns: [
|
|
449
|
+
{
|
|
450
|
+
id: tid('col'),
|
|
451
|
+
width: '1/3',
|
|
452
|
+
settings: {},
|
|
453
|
+
elements: [
|
|
454
|
+
{
|
|
455
|
+
id: tid('el'),
|
|
456
|
+
type: 'testimonial',
|
|
457
|
+
settings: {
|
|
458
|
+
text: 'Foundry replaced three tools we were paying for. The page builder is incredibly intuitive and the results look professional.',
|
|
459
|
+
authorName: 'David Park',
|
|
460
|
+
authorTitle: 'Founder, Parkside Digital',
|
|
461
|
+
authorImage: '/images/testimonials/david.jpg',
|
|
462
|
+
rating: 5,
|
|
463
|
+
variant: 'card',
|
|
464
|
+
},
|
|
465
|
+
},
|
|
466
|
+
],
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
id: tid('col'),
|
|
470
|
+
width: '1/3',
|
|
471
|
+
settings: {},
|
|
472
|
+
elements: [
|
|
473
|
+
{
|
|
474
|
+
id: tid('el'),
|
|
475
|
+
type: 'testimonial',
|
|
476
|
+
settings: {
|
|
477
|
+
text: 'We migrated from WordPress and the difference is night and day. Faster, cleaner, and our team actually enjoys using it.',
|
|
478
|
+
authorName: 'Emily Rodriguez',
|
|
479
|
+
authorTitle: 'Marketing Director, Bloom & Co',
|
|
480
|
+
authorImage: '/images/testimonials/emily.jpg',
|
|
481
|
+
rating: 5,
|
|
482
|
+
variant: 'card',
|
|
483
|
+
},
|
|
484
|
+
},
|
|
485
|
+
],
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
id: tid('col'),
|
|
489
|
+
width: '1/3',
|
|
490
|
+
settings: {},
|
|
491
|
+
elements: [
|
|
492
|
+
{
|
|
493
|
+
id: tid('el'),
|
|
494
|
+
type: 'testimonial',
|
|
495
|
+
settings: {
|
|
496
|
+
text: 'Outstanding support team and a product that just works. We launched our new site in two days instead of two months.',
|
|
497
|
+
authorName: 'James Mitchell',
|
|
498
|
+
authorTitle: 'CTO, Nexus Labs',
|
|
499
|
+
authorImage: '/images/testimonials/james.jpg',
|
|
500
|
+
rating: 5,
|
|
501
|
+
variant: 'card',
|
|
502
|
+
},
|
|
503
|
+
},
|
|
504
|
+
],
|
|
505
|
+
},
|
|
506
|
+
],
|
|
507
|
+
},
|
|
508
|
+
],
|
|
509
|
+
};
|
|
510
|
+
export const ctaBannerTemplate = {
|
|
511
|
+
id: 'cta-banner',
|
|
512
|
+
name: 'CTA Banner',
|
|
513
|
+
category: 'cta',
|
|
514
|
+
description: 'Full-width call-to-action banner with gradient background',
|
|
515
|
+
content: [
|
|
516
|
+
{
|
|
517
|
+
id: tid('row'),
|
|
518
|
+
type: 'row',
|
|
519
|
+
settings: {
|
|
520
|
+
layout: 'boxed',
|
|
521
|
+
paddingTop: '3rem',
|
|
522
|
+
paddingBottom: '3rem',
|
|
523
|
+
},
|
|
524
|
+
columns: [
|
|
525
|
+
{
|
|
526
|
+
id: tid('col'),
|
|
527
|
+
width: '1/1',
|
|
528
|
+
settings: {},
|
|
529
|
+
elements: [
|
|
530
|
+
{
|
|
531
|
+
id: tid('el'),
|
|
532
|
+
type: 'call-to-action',
|
|
533
|
+
settings: {
|
|
534
|
+
heading: 'Start building your dream website today',
|
|
535
|
+
subheading: 'Join over 10,000 businesses that trust Foundry to power their online presence. Free 14-day trial, no credit card required.',
|
|
536
|
+
buttonText: 'Start Your Free Trial',
|
|
537
|
+
buttonUrl: '#signup',
|
|
538
|
+
alignment: 'center',
|
|
539
|
+
backgroundColor: '#1e3a5f',
|
|
540
|
+
textColor: '#ffffff',
|
|
541
|
+
buttonVariant: 'light',
|
|
542
|
+
padding: '4rem 3rem',
|
|
543
|
+
borderRadius: '1.5rem',
|
|
544
|
+
},
|
|
545
|
+
},
|
|
546
|
+
],
|
|
547
|
+
},
|
|
548
|
+
],
|
|
549
|
+
},
|
|
550
|
+
],
|
|
551
|
+
};
|
|
552
|
+
export const contactFormTemplate = {
|
|
553
|
+
id: 'contact-form',
|
|
554
|
+
name: 'Contact Form',
|
|
555
|
+
category: 'contact',
|
|
556
|
+
description: 'Contact section with information on the left and a form layout on the right',
|
|
557
|
+
content: [
|
|
558
|
+
{
|
|
559
|
+
id: tid('row'),
|
|
560
|
+
type: 'row',
|
|
561
|
+
settings: {
|
|
562
|
+
layout: 'boxed',
|
|
563
|
+
paddingTop: '5rem',
|
|
564
|
+
paddingBottom: '5rem',
|
|
565
|
+
gap: '3rem',
|
|
566
|
+
},
|
|
567
|
+
columns: [
|
|
568
|
+
{
|
|
569
|
+
id: tid('col'),
|
|
570
|
+
width: '1/2',
|
|
571
|
+
settings: { verticalAlign: 'center' },
|
|
572
|
+
elements: [
|
|
573
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Get in Touch', level: 'h2', fontSize: '2.5rem', fontWeight: '700' } },
|
|
574
|
+
{
|
|
575
|
+
id: tid('el'),
|
|
576
|
+
type: 'text-block',
|
|
577
|
+
settings: {
|
|
578
|
+
content: `<p class="text-gray-600 text-lg">Have a question or ready to start your project? We would love to hear from you. Fill out the form and our team will get back to you within 24 hours.</p>
|
|
579
|
+
<div class="mt-6 space-y-4">
|
|
580
|
+
<div class="flex items-center gap-3"><span class="text-2xl">📍</span><span class="text-gray-700">123 Business Ave, Suite 100, San Francisco, CA 94102</span></div>
|
|
581
|
+
<div class="flex items-center gap-3"><span class="text-2xl">📧</span><a href="mailto:hello@example.com" class="text-blue-600 hover:underline">hello@example.com</a></div>
|
|
582
|
+
<div class="flex items-center gap-3"><span class="text-2xl">📞</span><a href="tel:+1234567890" class="text-blue-600 hover:underline">(123) 456-7890</a></div>
|
|
583
|
+
</div>`,
|
|
584
|
+
},
|
|
585
|
+
},
|
|
586
|
+
],
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
id: tid('col'),
|
|
590
|
+
width: '1/2',
|
|
591
|
+
settings: { padding: '2.5rem', className: 'bg-gray-50 rounded-2xl' },
|
|
592
|
+
elements: [
|
|
593
|
+
{
|
|
594
|
+
id: tid('el'),
|
|
595
|
+
type: 'text-block',
|
|
596
|
+
settings: {
|
|
597
|
+
content: `<form class="space-y-5">
|
|
598
|
+
<div class="grid grid-cols-2 gap-4">
|
|
599
|
+
<div>
|
|
600
|
+
<label class="block text-sm font-medium text-gray-700 mb-1">First Name</label>
|
|
601
|
+
<input type="text" placeholder="John" class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none" />
|
|
602
|
+
</div>
|
|
603
|
+
<div>
|
|
604
|
+
<label class="block text-sm font-medium text-gray-700 mb-1">Last Name</label>
|
|
605
|
+
<input type="text" placeholder="Doe" class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none" />
|
|
606
|
+
</div>
|
|
607
|
+
</div>
|
|
608
|
+
<div>
|
|
609
|
+
<label class="block text-sm font-medium text-gray-700 mb-1">Email</label>
|
|
610
|
+
<input type="email" placeholder="john@example.com" class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none" />
|
|
611
|
+
</div>
|
|
612
|
+
<div>
|
|
613
|
+
<label class="block text-sm font-medium text-gray-700 mb-1">Message</label>
|
|
614
|
+
<textarea rows="4" placeholder="Tell us about your project..." class="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none resize-none"></textarea>
|
|
615
|
+
</div>
|
|
616
|
+
<button type="submit" class="w-full bg-blue-600 text-white font-semibold py-3 rounded-lg hover:bg-blue-700 transition-colors">Send Message</button>
|
|
617
|
+
</form>`,
|
|
618
|
+
},
|
|
619
|
+
},
|
|
620
|
+
],
|
|
621
|
+
},
|
|
622
|
+
],
|
|
623
|
+
},
|
|
624
|
+
],
|
|
625
|
+
};
|
|
626
|
+
export const footerMultiColumnTemplate = {
|
|
627
|
+
id: 'footer-multi-column',
|
|
628
|
+
name: 'Footer Multi-Column',
|
|
629
|
+
category: 'footer',
|
|
630
|
+
description: 'Multi-column footer with brand info, navigation links, and social icons',
|
|
631
|
+
content: [
|
|
632
|
+
{
|
|
633
|
+
id: tid('row'),
|
|
634
|
+
type: 'row',
|
|
635
|
+
settings: {
|
|
636
|
+
layout: 'boxed',
|
|
637
|
+
paddingTop: '4rem',
|
|
638
|
+
paddingBottom: '2rem',
|
|
639
|
+
gap: '2rem',
|
|
640
|
+
background: { type: 'color', color: '#111827' },
|
|
641
|
+
},
|
|
642
|
+
columns: [
|
|
643
|
+
{
|
|
644
|
+
id: tid('col'),
|
|
645
|
+
width: '1/3',
|
|
646
|
+
settings: {},
|
|
647
|
+
elements: [
|
|
648
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Foundry', level: 'h3', color: '#ffffff', fontSize: '1.5rem', fontWeight: '700' } },
|
|
649
|
+
{
|
|
650
|
+
id: tid('el'),
|
|
651
|
+
type: 'text-block',
|
|
652
|
+
settings: {
|
|
653
|
+
content: '<p class="text-gray-400">The modern website builder for businesses that want to look professional without the complexity. Built for speed, designed for results.</p>',
|
|
654
|
+
color: '#9ca3af',
|
|
655
|
+
},
|
|
656
|
+
},
|
|
657
|
+
],
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
id: tid('col'),
|
|
661
|
+
width: '1/6',
|
|
662
|
+
settings: {},
|
|
663
|
+
elements: [
|
|
664
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Product', level: 'h4', color: '#ffffff', fontSize: '1rem' } },
|
|
665
|
+
{
|
|
666
|
+
id: tid('el'),
|
|
667
|
+
type: 'text-block',
|
|
668
|
+
settings: {
|
|
669
|
+
content: '<ul class="space-y-2 list-none p-0"><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Features</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Pricing</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Templates</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Integrations</a></li></ul>',
|
|
670
|
+
},
|
|
671
|
+
},
|
|
672
|
+
],
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
id: tid('col'),
|
|
676
|
+
width: '1/6',
|
|
677
|
+
settings: {},
|
|
678
|
+
elements: [
|
|
679
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Company', level: 'h4', color: '#ffffff', fontSize: '1rem' } },
|
|
680
|
+
{
|
|
681
|
+
id: tid('el'),
|
|
682
|
+
type: 'text-block',
|
|
683
|
+
settings: {
|
|
684
|
+
content: '<ul class="space-y-2 list-none p-0"><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">About</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Blog</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Careers</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Contact</a></li></ul>',
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
],
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
id: tid('col'),
|
|
691
|
+
width: '1/6',
|
|
692
|
+
settings: {},
|
|
693
|
+
elements: [
|
|
694
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Legal', level: 'h4', color: '#ffffff', fontSize: '1rem' } },
|
|
695
|
+
{
|
|
696
|
+
id: tid('el'),
|
|
697
|
+
type: 'text-block',
|
|
698
|
+
settings: {
|
|
699
|
+
content: '<ul class="space-y-2 list-none p-0"><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Privacy</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Terms</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Cookies</a></li><li><a href="#" class="text-gray-400 hover:text-white transition-colors no-underline">Licenses</a></li></ul>',
|
|
700
|
+
},
|
|
701
|
+
},
|
|
702
|
+
],
|
|
703
|
+
},
|
|
704
|
+
],
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
id: tid('row'),
|
|
708
|
+
type: 'row',
|
|
709
|
+
settings: {
|
|
710
|
+
layout: 'boxed',
|
|
711
|
+
paddingTop: '1.5rem',
|
|
712
|
+
paddingBottom: '2rem',
|
|
713
|
+
background: { type: 'color', color: '#111827' },
|
|
714
|
+
},
|
|
715
|
+
columns: [
|
|
716
|
+
{
|
|
717
|
+
id: tid('col'),
|
|
718
|
+
width: '1/1',
|
|
719
|
+
settings: {},
|
|
720
|
+
elements: [
|
|
721
|
+
{ id: tid('el'), type: 'divider', settings: { color: '#374151', width: '100%', thickness: '1px', style: 'solid' } },
|
|
722
|
+
{ id: tid('el'), type: 'spacer', settings: { height: '1.5rem' } },
|
|
723
|
+
{
|
|
724
|
+
id: tid('el'),
|
|
725
|
+
type: 'text-block',
|
|
726
|
+
settings: {
|
|
727
|
+
content: '<p class="text-gray-500 text-sm text-center">© 2026 Foundry. All rights reserved.</p>',
|
|
728
|
+
alignment: 'center',
|
|
729
|
+
},
|
|
730
|
+
},
|
|
731
|
+
],
|
|
732
|
+
},
|
|
733
|
+
],
|
|
734
|
+
},
|
|
735
|
+
],
|
|
736
|
+
};
|
|
737
|
+
export const galleryMasonryTemplate = {
|
|
738
|
+
id: 'gallery-masonry',
|
|
739
|
+
name: 'Gallery Masonry',
|
|
740
|
+
category: 'gallery',
|
|
741
|
+
description: 'Image gallery section with masonry-style grid and lightbox support',
|
|
742
|
+
content: [
|
|
743
|
+
{
|
|
744
|
+
id: tid('row'),
|
|
745
|
+
type: 'row',
|
|
746
|
+
settings: { layout: 'boxed', paddingTop: '5rem', paddingBottom: '2rem' },
|
|
747
|
+
columns: [
|
|
748
|
+
{
|
|
749
|
+
id: tid('col'),
|
|
750
|
+
width: '1/1',
|
|
751
|
+
settings: {},
|
|
752
|
+
elements: [
|
|
753
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Our Work', level: 'h2', alignment: 'center', fontSize: '2.5rem', fontWeight: '700' } },
|
|
754
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-center text-gray-600 max-w-xl mx-auto">A selection of our recent projects showcasing design excellence and technical craft.</p>', alignment: 'center' } },
|
|
755
|
+
],
|
|
756
|
+
},
|
|
757
|
+
],
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
id: tid('row'),
|
|
761
|
+
type: 'row',
|
|
762
|
+
settings: { layout: 'boxed', paddingTop: '2rem', paddingBottom: '5rem' },
|
|
763
|
+
columns: [
|
|
764
|
+
{
|
|
765
|
+
id: tid('col'),
|
|
766
|
+
width: '1/1',
|
|
767
|
+
settings: {},
|
|
768
|
+
elements: [
|
|
769
|
+
{
|
|
770
|
+
id: tid('el'),
|
|
771
|
+
type: 'gallery',
|
|
772
|
+
settings: {
|
|
773
|
+
images: [
|
|
774
|
+
{ src: '/images/gallery/project-1.jpg', alt: 'Brand identity design for tech startup', caption: 'Brand Identity' },
|
|
775
|
+
{ src: '/images/gallery/project-2.jpg', alt: 'E-commerce platform redesign', caption: 'E-commerce Redesign' },
|
|
776
|
+
{ src: '/images/gallery/project-3.jpg', alt: 'Mobile app UI design', caption: 'Mobile App UI' },
|
|
777
|
+
{ src: '/images/gallery/project-4.jpg', alt: 'Corporate website build', caption: 'Corporate Website' },
|
|
778
|
+
{ src: '/images/gallery/project-5.jpg', alt: 'SaaS dashboard interface', caption: 'SaaS Dashboard' },
|
|
779
|
+
{ src: '/images/gallery/project-6.jpg', alt: 'Restaurant branding package', caption: 'Restaurant Branding' },
|
|
780
|
+
],
|
|
781
|
+
columns: 3,
|
|
782
|
+
gap: '1rem',
|
|
783
|
+
borderRadius: '0.75rem',
|
|
784
|
+
lightbox: true,
|
|
785
|
+
},
|
|
786
|
+
},
|
|
787
|
+
],
|
|
788
|
+
},
|
|
789
|
+
],
|
|
790
|
+
},
|
|
791
|
+
],
|
|
792
|
+
};
|
|
793
|
+
export const featuresAlternatingTemplate = {
|
|
794
|
+
id: 'features-alternating',
|
|
795
|
+
name: 'Features Alternating',
|
|
796
|
+
category: 'features',
|
|
797
|
+
description: 'Alternating left-right feature sections with image and text',
|
|
798
|
+
content: [
|
|
799
|
+
{
|
|
800
|
+
id: tid('row'),
|
|
801
|
+
type: 'row',
|
|
802
|
+
settings: { layout: 'boxed', paddingTop: '5rem', paddingBottom: '2rem' },
|
|
803
|
+
columns: [
|
|
804
|
+
{
|
|
805
|
+
id: tid('col'),
|
|
806
|
+
width: '1/1',
|
|
807
|
+
settings: {},
|
|
808
|
+
elements: [
|
|
809
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Everything You Need', level: 'h2', alignment: 'center', fontSize: '2.5rem', fontWeight: '700' } },
|
|
810
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-center text-gray-600 max-w-2xl mx-auto">Powerful features designed to help you build, manage, and grow your online presence.</p>', alignment: 'center' } },
|
|
811
|
+
],
|
|
812
|
+
},
|
|
813
|
+
],
|
|
814
|
+
},
|
|
815
|
+
// Feature 1: text left, image right
|
|
816
|
+
{
|
|
817
|
+
id: tid('row'),
|
|
818
|
+
type: 'row',
|
|
819
|
+
settings: { layout: 'boxed', paddingTop: '3rem', paddingBottom: '3rem', gap: '3rem' },
|
|
820
|
+
columns: [
|
|
821
|
+
{
|
|
822
|
+
id: tid('col'),
|
|
823
|
+
width: '1/2',
|
|
824
|
+
settings: { verticalAlign: 'center' },
|
|
825
|
+
elements: [
|
|
826
|
+
{ id: tid('el'), type: 'icon', settings: { name: '🚀', size: '2.5rem', alignment: 'left' } },
|
|
827
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Lightning-Fast Performance', level: 'h3', fontSize: '1.75rem' } },
|
|
828
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-gray-600 text-lg">Every page loads in under a second with our optimized rendering engine. Static generation, edge caching, and smart image optimization come built in.</p>' } },
|
|
829
|
+
{ id: tid('el'), type: 'button', settings: { text: 'Learn More', url: '#performance', variant: 'outline', size: 'md' } },
|
|
830
|
+
],
|
|
831
|
+
},
|
|
832
|
+
{
|
|
833
|
+
id: tid('col'),
|
|
834
|
+
width: '1/2',
|
|
835
|
+
settings: { verticalAlign: 'center' },
|
|
836
|
+
elements: [
|
|
837
|
+
{ id: tid('el'), type: 'image', settings: { src: '/images/features/performance.png', alt: 'Performance dashboard', borderRadius: '1rem', width: '100%' } },
|
|
838
|
+
],
|
|
839
|
+
},
|
|
840
|
+
],
|
|
841
|
+
},
|
|
842
|
+
// Feature 2: image left, text right (alternating)
|
|
843
|
+
{
|
|
844
|
+
id: tid('row'),
|
|
845
|
+
type: 'row',
|
|
846
|
+
settings: { layout: 'boxed', paddingTop: '3rem', paddingBottom: '3rem', gap: '3rem' },
|
|
847
|
+
columns: [
|
|
848
|
+
{
|
|
849
|
+
id: tid('col'),
|
|
850
|
+
width: '1/2',
|
|
851
|
+
settings: { verticalAlign: 'center' },
|
|
852
|
+
elements: [
|
|
853
|
+
{ id: tid('el'), type: 'image', settings: { src: '/images/features/builder.png', alt: 'Visual page builder', borderRadius: '1rem', width: '100%' } },
|
|
854
|
+
],
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
id: tid('col'),
|
|
858
|
+
width: '1/2',
|
|
859
|
+
settings: { verticalAlign: 'center' },
|
|
860
|
+
elements: [
|
|
861
|
+
{ id: tid('el'), type: 'icon', settings: { name: '🎯', size: '2.5rem', alignment: 'left' } },
|
|
862
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Visual Drag-and-Drop Builder', level: 'h3', fontSize: '1.75rem' } },
|
|
863
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-gray-600 text-lg">Design pixel-perfect pages without writing code. Drag elements, customize every detail, and see changes in real time with our WYSIWYG editor.</p>' } },
|
|
864
|
+
{ id: tid('el'), type: 'button', settings: { text: 'Learn More', url: '#builder', variant: 'outline', size: 'md' } },
|
|
865
|
+
],
|
|
866
|
+
},
|
|
867
|
+
],
|
|
868
|
+
},
|
|
869
|
+
// Feature 3: text left, image right
|
|
870
|
+
{
|
|
871
|
+
id: tid('row'),
|
|
872
|
+
type: 'row',
|
|
873
|
+
settings: { layout: 'boxed', paddingTop: '3rem', paddingBottom: '5rem', gap: '3rem' },
|
|
874
|
+
columns: [
|
|
875
|
+
{
|
|
876
|
+
id: tid('col'),
|
|
877
|
+
width: '1/2',
|
|
878
|
+
settings: { verticalAlign: 'center' },
|
|
879
|
+
elements: [
|
|
880
|
+
{ id: tid('el'), type: 'icon', settings: { name: '🔒', size: '2.5rem', alignment: 'left' } },
|
|
881
|
+
{ id: tid('el'), type: 'heading', settings: { text: 'Enterprise-Grade Security', level: 'h3', fontSize: '1.75rem' } },
|
|
882
|
+
{ id: tid('el'), type: 'text-block', settings: { content: '<p class="text-gray-600 text-lg">SSL certificates, DDoS protection, automated backups, and role-based access control. Your site and data are protected at every layer.</p>' } },
|
|
883
|
+
{ id: tid('el'), type: 'button', settings: { text: 'Learn More', url: '#security', variant: 'outline', size: 'md' } },
|
|
884
|
+
],
|
|
885
|
+
},
|
|
886
|
+
{
|
|
887
|
+
id: tid('col'),
|
|
888
|
+
width: '1/2',
|
|
889
|
+
settings: { verticalAlign: 'center' },
|
|
890
|
+
elements: [
|
|
891
|
+
{ id: tid('el'), type: 'image', settings: { src: '/images/features/security.png', alt: 'Security features overview', borderRadius: '1rem', width: '100%' } },
|
|
892
|
+
],
|
|
893
|
+
},
|
|
894
|
+
],
|
|
895
|
+
},
|
|
896
|
+
],
|
|
897
|
+
};
|
|
898
|
+
// ---------------------------------------------------------------------------
|
|
899
|
+
// All default templates
|
|
900
|
+
// ---------------------------------------------------------------------------
|
|
901
|
+
export const defaultTemplates = [
|
|
902
|
+
heroSplitTemplate,
|
|
903
|
+
aboutTeamTemplate,
|
|
904
|
+
servicesCardsTemplate,
|
|
905
|
+
pricingThreeTierTemplate,
|
|
906
|
+
testimonialsCarouselTemplate,
|
|
907
|
+
ctaBannerTemplate,
|
|
908
|
+
contactFormTemplate,
|
|
909
|
+
footerMultiColumnTemplate,
|
|
910
|
+
galleryMasonryTemplate,
|
|
911
|
+
featuresAlternatingTemplate,
|
|
912
|
+
];
|
|
913
|
+
/**
|
|
914
|
+
* Register all default templates into a TemplateStudio instance.
|
|
915
|
+
*/
|
|
916
|
+
export function registerDefaultTemplates(studio) {
|
|
917
|
+
for (const template of defaultTemplates) {
|
|
918
|
+
if (!studio.has(template.id)) {
|
|
919
|
+
studio.register(template);
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
//# sourceMappingURL=template-studio.js.map
|