@deneb-ui/create-template 2.0.38 → 2.0.39
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/package.json +1 -1
- package/template/fivora-template.json +244 -35
- package/template/package.json +2 -2
- package/template/src/app/page.tsx +3 -0
- package/template/src/app/services/page.tsx +26 -32
- package/template/src/data/site-data.json +117 -14
- package/template/src/lib/siteDataContext.tsx +13 -1
package/package.json
CHANGED
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
"visualEditing": {
|
|
5
5
|
"contractVersion": 1,
|
|
6
6
|
"mode": "strict",
|
|
7
|
-
"controlOnlyPaths": [
|
|
7
|
+
"controlOnlyPaths": [
|
|
8
|
+
"services[*].id",
|
|
9
|
+
"products[*].id",
|
|
10
|
+
"products[*].currency",
|
|
11
|
+
"about.collageImages[*].id"
|
|
12
|
+
]
|
|
8
13
|
},
|
|
9
14
|
"siteDataFile": "src/data/site-data.json",
|
|
10
15
|
"outputDirectory": "out",
|
|
@@ -12,9 +17,22 @@
|
|
|
12
17
|
"buildCommand": "npm run build",
|
|
13
18
|
"basePathEnvVar": "NEXT_PUBLIC_SITE_BASE_PATH",
|
|
14
19
|
"pages": [
|
|
15
|
-
{
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
{
|
|
21
|
+
"id": "home",
|
|
22
|
+
"label": "Home",
|
|
23
|
+
"route": "/",
|
|
24
|
+
"required": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "about_us",
|
|
28
|
+
"label": "About Us",
|
|
29
|
+
"route": "/about_us"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "services",
|
|
33
|
+
"label": "Services",
|
|
34
|
+
"route": "/services"
|
|
35
|
+
},
|
|
18
36
|
{
|
|
19
37
|
"id": "contact",
|
|
20
38
|
"label": "Contact",
|
|
@@ -59,14 +77,38 @@
|
|
|
59
77
|
"type": "object",
|
|
60
78
|
"label": "Navigation labels",
|
|
61
79
|
"fields": [
|
|
62
|
-
{
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
80
|
+
{
|
|
81
|
+
"key": "home",
|
|
82
|
+
"type": "text",
|
|
83
|
+
"label": "Home label"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"key": "about_us",
|
|
87
|
+
"type": "text",
|
|
88
|
+
"label": "About label"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"key": "services",
|
|
92
|
+
"type": "text",
|
|
93
|
+
"label": "Services label"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"key": "contact",
|
|
97
|
+
"type": "text",
|
|
98
|
+
"label": "Contact label"
|
|
99
|
+
}
|
|
66
100
|
]
|
|
67
101
|
},
|
|
68
|
-
{
|
|
69
|
-
|
|
102
|
+
{
|
|
103
|
+
"key": "footerHeading",
|
|
104
|
+
"type": "text",
|
|
105
|
+
"label": "Footer heading"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"key": "copyright",
|
|
109
|
+
"type": "text",
|
|
110
|
+
"label": "Copyright"
|
|
111
|
+
}
|
|
70
112
|
]
|
|
71
113
|
},
|
|
72
114
|
{
|
|
@@ -76,14 +118,22 @@
|
|
|
76
118
|
"type": "object",
|
|
77
119
|
"label": "Home Page",
|
|
78
120
|
"fields": [
|
|
79
|
-
{
|
|
121
|
+
{
|
|
122
|
+
"key": "heroEyebrow",
|
|
123
|
+
"type": "text",
|
|
124
|
+
"label": "Hero eyebrow"
|
|
125
|
+
},
|
|
80
126
|
{
|
|
81
127
|
"key": "heroTitle",
|
|
82
128
|
"type": "text",
|
|
83
129
|
"label": "Hero title",
|
|
84
130
|
"required": true
|
|
85
131
|
},
|
|
86
|
-
{
|
|
132
|
+
{
|
|
133
|
+
"key": "heroSummary",
|
|
134
|
+
"type": "textarea",
|
|
135
|
+
"label": "Hero summary"
|
|
136
|
+
},
|
|
87
137
|
{
|
|
88
138
|
"key": "bannerImageUrl",
|
|
89
139
|
"type": "image",
|
|
@@ -129,7 +179,11 @@
|
|
|
129
179
|
"label": "Title",
|
|
130
180
|
"required": true
|
|
131
181
|
},
|
|
132
|
-
{
|
|
182
|
+
{
|
|
183
|
+
"key": "body",
|
|
184
|
+
"type": "textarea",
|
|
185
|
+
"label": "Description"
|
|
186
|
+
}
|
|
133
187
|
]
|
|
134
188
|
},
|
|
135
189
|
{
|
|
@@ -140,9 +194,27 @@
|
|
|
140
194
|
"minItems": 0,
|
|
141
195
|
"maxItems": 12,
|
|
142
196
|
"fields": [
|
|
143
|
-
{
|
|
144
|
-
|
|
197
|
+
{
|
|
198
|
+
"key": "buttonLabel",
|
|
199
|
+
"type": "text",
|
|
200
|
+
"label": "Button Label"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"key": "buttonUrl",
|
|
204
|
+
"type": "url",
|
|
205
|
+
"label": "Button Url"
|
|
206
|
+
}
|
|
145
207
|
]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"key": "productsHeading",
|
|
211
|
+
"type": "text",
|
|
212
|
+
"label": "Featured Products Heading"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"key": "productsSummary",
|
|
216
|
+
"type": "textarea",
|
|
217
|
+
"label": "Featured Products Summary"
|
|
146
218
|
}
|
|
147
219
|
]
|
|
148
220
|
},
|
|
@@ -159,7 +231,11 @@
|
|
|
159
231
|
"label": "Heading",
|
|
160
232
|
"required": true
|
|
161
233
|
},
|
|
162
|
-
{
|
|
234
|
+
{
|
|
235
|
+
"key": "body",
|
|
236
|
+
"type": "textarea",
|
|
237
|
+
"label": "About text"
|
|
238
|
+
},
|
|
163
239
|
{
|
|
164
240
|
"key": "imageUrl",
|
|
165
241
|
"type": "image",
|
|
@@ -167,10 +243,26 @@
|
|
|
167
243
|
"recommendedWidth": 1200,
|
|
168
244
|
"recommendedHeight": 900
|
|
169
245
|
},
|
|
170
|
-
{
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
246
|
+
{
|
|
247
|
+
"key": "collageHeading",
|
|
248
|
+
"type": "text",
|
|
249
|
+
"label": "Collage Heading"
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"key": "collageDescription",
|
|
253
|
+
"type": "textarea",
|
|
254
|
+
"label": "Collage Description"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"key": "historyHeading",
|
|
258
|
+
"type": "text",
|
|
259
|
+
"label": "History Heading"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"key": "history",
|
|
263
|
+
"type": "textarea",
|
|
264
|
+
"label": "History"
|
|
265
|
+
},
|
|
174
266
|
{
|
|
175
267
|
"key": "collageImages",
|
|
176
268
|
"type": "list",
|
|
@@ -179,8 +271,16 @@
|
|
|
179
271
|
"minItems": 0,
|
|
180
272
|
"maxItems": 12,
|
|
181
273
|
"fields": [
|
|
182
|
-
{
|
|
183
|
-
|
|
274
|
+
{
|
|
275
|
+
"key": "image",
|
|
276
|
+
"type": "image",
|
|
277
|
+
"label": "Image"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"key": "caption",
|
|
281
|
+
"type": "text",
|
|
282
|
+
"label": "Caption"
|
|
283
|
+
}
|
|
184
284
|
]
|
|
185
285
|
}
|
|
186
286
|
]
|
|
@@ -198,7 +298,11 @@
|
|
|
198
298
|
"label": "Heading",
|
|
199
299
|
"required": true
|
|
200
300
|
},
|
|
201
|
-
{
|
|
301
|
+
{
|
|
302
|
+
"key": "intro",
|
|
303
|
+
"type": "textarea",
|
|
304
|
+
"label": "Introduction"
|
|
305
|
+
}
|
|
202
306
|
]
|
|
203
307
|
},
|
|
204
308
|
{
|
|
@@ -210,9 +314,22 @@
|
|
|
210
314
|
"minItems": 0,
|
|
211
315
|
"maxItems": 12,
|
|
212
316
|
"fields": [
|
|
213
|
-
{
|
|
214
|
-
|
|
215
|
-
|
|
317
|
+
{
|
|
318
|
+
"key": "id",
|
|
319
|
+
"type": "text",
|
|
320
|
+
"label": "System ID"
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"key": "name",
|
|
324
|
+
"type": "text",
|
|
325
|
+
"label": "Name",
|
|
326
|
+
"required": true
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"key": "description",
|
|
330
|
+
"type": "textarea",
|
|
331
|
+
"label": "Description"
|
|
332
|
+
},
|
|
216
333
|
{
|
|
217
334
|
"key": "imageUrl",
|
|
218
335
|
"type": "image",
|
|
@@ -224,7 +341,10 @@
|
|
|
224
341
|
"key": "features",
|
|
225
342
|
"type": "list",
|
|
226
343
|
"label": "Included features",
|
|
227
|
-
"itemField": {
|
|
344
|
+
"itemField": {
|
|
345
|
+
"type": "text",
|
|
346
|
+
"label": "Feature"
|
|
347
|
+
}
|
|
228
348
|
}
|
|
229
349
|
]
|
|
230
350
|
},
|
|
@@ -241,14 +361,103 @@
|
|
|
241
361
|
"label": "Heading",
|
|
242
362
|
"required": true
|
|
243
363
|
},
|
|
244
|
-
{
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
{
|
|
250
|
-
|
|
251
|
-
|
|
364
|
+
{
|
|
365
|
+
"key": "intro",
|
|
366
|
+
"type": "textarea",
|
|
367
|
+
"label": "Introduction"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"key": "phone",
|
|
371
|
+
"type": "tel",
|
|
372
|
+
"label": "Phone"
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"key": "email",
|
|
376
|
+
"type": "email",
|
|
377
|
+
"label": "Email"
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"key": "address",
|
|
381
|
+
"type": "textarea",
|
|
382
|
+
"label": "Address"
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"key": "directionsLabel",
|
|
386
|
+
"type": "text",
|
|
387
|
+
"label": "Directions Label"
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"key": "directionsUrl",
|
|
391
|
+
"type": "url",
|
|
392
|
+
"label": "Directions Url"
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"key": "formTitle",
|
|
396
|
+
"type": "text",
|
|
397
|
+
"label": "Form heading"
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
"key": "submitLabel",
|
|
401
|
+
"type": "text",
|
|
402
|
+
"label": "Submit button"
|
|
403
|
+
}
|
|
404
|
+
]
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
"id": "products",
|
|
408
|
+
"path": "products",
|
|
409
|
+
"type": "list",
|
|
410
|
+
"label": "Products",
|
|
411
|
+
"minItems": 0,
|
|
412
|
+
"maxItems": 24,
|
|
413
|
+
"fields": [
|
|
414
|
+
{
|
|
415
|
+
"key": "id",
|
|
416
|
+
"type": "text",
|
|
417
|
+
"label": "Product ID"
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"key": "title",
|
|
421
|
+
"type": "text",
|
|
422
|
+
"label": "Title",
|
|
423
|
+
"required": true
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"key": "description",
|
|
427
|
+
"type": "textarea",
|
|
428
|
+
"label": "Description"
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"key": "price",
|
|
432
|
+
"type": "number",
|
|
433
|
+
"label": "Price",
|
|
434
|
+
"required": true
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"key": "compareAtPrice",
|
|
438
|
+
"type": "number",
|
|
439
|
+
"label": "Compare Price"
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"key": "currency",
|
|
443
|
+
"type": "text",
|
|
444
|
+
"label": "Currency"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"key": "category",
|
|
448
|
+
"type": "text",
|
|
449
|
+
"label": "Category"
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"key": "imageUrl",
|
|
453
|
+
"type": "image",
|
|
454
|
+
"label": "Product Image"
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"key": "badge",
|
|
458
|
+
"type": "text",
|
|
459
|
+
"label": "Badge"
|
|
460
|
+
}
|
|
252
461
|
]
|
|
253
462
|
}
|
|
254
463
|
]
|
package/template/package.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"next": "15.5.23",
|
|
19
19
|
"react": "19.2.8",
|
|
20
20
|
"react-dom": "19.2.8",
|
|
21
|
-
"@deneb-ui/ui": "^2.0.
|
|
21
|
+
"@deneb-ui/ui": "^2.0.39"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@eslint/eslintrc": "3.3.6",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"eslint": "9.39.5",
|
|
29
29
|
"eslint-config-next": "15.5.23",
|
|
30
30
|
"typescript": "5.8.3",
|
|
31
|
-
"@deneb-ui/cli": "^2.0.
|
|
31
|
+
"@deneb-ui/cli": "^2.0.39",
|
|
32
32
|
"tailwindcss": "^3.4.17",
|
|
33
33
|
"postcss": "8.5.26",
|
|
34
34
|
"autoprefixer": "^10.4.20"
|
|
@@ -5,12 +5,14 @@ import {
|
|
|
5
5
|
contentObject,
|
|
6
6
|
contentText,
|
|
7
7
|
useSiteData,
|
|
8
|
+
useProducts,
|
|
8
9
|
} from '@/lib/siteDataContext';
|
|
9
10
|
import { pageRoute, withBasePath } from '@/lib/utils';
|
|
10
11
|
import {
|
|
11
12
|
EditableText,
|
|
12
13
|
EditableList,
|
|
13
14
|
EditableCard,
|
|
15
|
+
EditableProductCard,
|
|
14
16
|
ListActionCta,
|
|
15
17
|
} from '@deneb-ui/ui';
|
|
16
18
|
|
|
@@ -24,6 +26,7 @@ export default function HomePage() {
|
|
|
24
26
|
const content = contentObject(siteData.content);
|
|
25
27
|
const home = contentObject(content.home);
|
|
26
28
|
const features = contentList(home.features);
|
|
29
|
+
const products = useProducts();
|
|
27
30
|
const demoCta = contentObject(
|
|
28
31
|
(contentList(home.demoPreOrderCta)[0] as Record<string, unknown> | undefined) ?? {}
|
|
29
32
|
);
|
|
@@ -1,49 +1,43 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { contentObject, contentText, useServices, useSiteData } from '@/lib/siteDataContext';
|
|
4
|
+
import { EditableServiceCard, EditableText } from '@deneb-ui/ui';
|
|
5
5
|
|
|
6
6
|
export default function ServicesPage() {
|
|
7
7
|
const siteData = useSiteData();
|
|
8
8
|
const content = contentObject(siteData.content);
|
|
9
9
|
const page = contentObject(content.servicesPage);
|
|
10
|
-
const services =
|
|
10
|
+
const services = useServices();
|
|
11
11
|
|
|
12
12
|
return (
|
|
13
13
|
<div data-preview-page-key="services">
|
|
14
14
|
<section className="page-section page-heading" data-design-section="services-heading">
|
|
15
|
-
<
|
|
16
|
-
|
|
15
|
+
<EditableText
|
|
16
|
+
as="h1"
|
|
17
|
+
variant="h1"
|
|
18
|
+
size="4xl"
|
|
19
|
+
weight="bold"
|
|
20
|
+
color="heading"
|
|
21
|
+
data-preview-field-path="servicesPage.heading"
|
|
22
|
+
defaultValue={contentText(page.heading)}
|
|
23
|
+
/>
|
|
24
|
+
<EditableText
|
|
25
|
+
as="p"
|
|
26
|
+
variant="lead"
|
|
27
|
+
color="muted"
|
|
28
|
+
data-preview-field-path="servicesPage.intro"
|
|
29
|
+
defaultValue={contentText(page.intro)}
|
|
30
|
+
/>
|
|
17
31
|
</section>
|
|
18
32
|
<section className="page-section alt" data-design-section="services-list">
|
|
19
33
|
<div className="card-grid" data-preview-list-path="services">
|
|
20
|
-
{services.map((
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
src={withBasePath(contentText(service.imageUrl) || '/placeholder.svg')}
|
|
28
|
-
alt=""
|
|
29
|
-
data-preview-field-path={`services[${index}].imageUrl`}
|
|
30
|
-
/>
|
|
31
|
-
<h2 data-preview-field-path={`services[${index}].name`}>{contentText(service.name)}</h2>
|
|
32
|
-
<p data-preview-field-path={`services[${index}].description`}>{contentText(service.description)}</p>
|
|
33
|
-
<ul data-preview-list-path={`services[${index}].features`}>
|
|
34
|
-
{features.map((feature, featureIndex) => (
|
|
35
|
-
<li
|
|
36
|
-
key={featureIndex}
|
|
37
|
-
data-preview-item-path={`services[${index}].features[${featureIndex}]`}
|
|
38
|
-
data-preview-field-path={`services[${index}].features[${featureIndex}]`}
|
|
39
|
-
>
|
|
40
|
-
{contentText(feature)}
|
|
41
|
-
</li>
|
|
42
|
-
))}
|
|
43
|
-
</ul>
|
|
44
|
-
</article>
|
|
45
|
-
);
|
|
46
|
-
})}
|
|
34
|
+
{services.map((service, index) => (
|
|
35
|
+
<EditableServiceCard
|
|
36
|
+
key={contentText(service.id) || index}
|
|
37
|
+
itemPath={`services[${index}]`}
|
|
38
|
+
service={service}
|
|
39
|
+
/>
|
|
40
|
+
))}
|
|
47
41
|
</div>
|
|
48
42
|
</section>
|
|
49
43
|
</div>
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"project": {
|
|
2
|
+
"project": {
|
|
3
|
+
"id": "starter-demo",
|
|
4
|
+
"slug": "starter-demo",
|
|
5
|
+
"title": "Fivora Starter Demo",
|
|
6
|
+
"status": "APPROVED"
|
|
7
|
+
},
|
|
3
8
|
"merchant": {
|
|
4
9
|
"businessName": "Fivora Store",
|
|
5
10
|
"description": "A modern high-converting digital storefront built on the Fivora platform."
|
|
@@ -9,7 +14,12 @@
|
|
|
9
14
|
"name": "Fivora Starter",
|
|
10
15
|
"engine": "NEXT_STATIC_EXPORT",
|
|
11
16
|
"structure": {
|
|
12
|
-
"pages": [
|
|
17
|
+
"pages": [
|
|
18
|
+
"home",
|
|
19
|
+
"about_us",
|
|
20
|
+
"services",
|
|
21
|
+
"contact"
|
|
22
|
+
],
|
|
13
23
|
"theme": {
|
|
14
24
|
"primaryColor": "#016a7e",
|
|
15
25
|
"secondaryColor": "#0a1931",
|
|
@@ -25,7 +35,12 @@
|
|
|
25
35
|
}
|
|
26
36
|
},
|
|
27
37
|
"requirements": {
|
|
28
|
-
"requiredPages": [
|
|
38
|
+
"requiredPages": [
|
|
39
|
+
"home",
|
|
40
|
+
"about_us",
|
|
41
|
+
"services",
|
|
42
|
+
"contact"
|
|
43
|
+
],
|
|
29
44
|
"requiredFeatures": []
|
|
30
45
|
},
|
|
31
46
|
"content": {
|
|
@@ -60,11 +75,27 @@
|
|
|
60
75
|
"introBody": "Every editable value comes directly from Fivora site data with auto-balancing layouts, responsive typography, and strict contract validation out of the box.",
|
|
61
76
|
"featuresHeading": "Why build with the Fivora Authoring Kit?",
|
|
62
77
|
"features": [
|
|
63
|
-
{
|
|
64
|
-
|
|
65
|
-
|
|
78
|
+
{
|
|
79
|
+
"title": "Auto-Balancing Layouts",
|
|
80
|
+
"body": "Cards, grids, and containers automatically balance and fill space seamlessly across all screen sizes."
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"title": "Strict Visual Editing",
|
|
84
|
+
"body": "Direct bindings enable merchants to click, edit, and preview changes without breaking template styles."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"title": "1-Click Clean Packaging",
|
|
88
|
+
"body": "Built-in zip command strips heavy caches, node_modules, and git files so uploads pass instantly."
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"demoPreOrderCta": [
|
|
92
|
+
{
|
|
93
|
+
"buttonLabel": "Book a Demo",
|
|
94
|
+
"buttonUrl": "https://wa.me/94771234567"
|
|
95
|
+
}
|
|
66
96
|
],
|
|
67
|
-
"
|
|
97
|
+
"productsHeading": "Featured Store Products",
|
|
98
|
+
"productsSummary": "Live inventory and pricing updated in real time from your Fivora Shop Owner panel."
|
|
68
99
|
},
|
|
69
100
|
"about": {
|
|
70
101
|
"heading": "Built for the next generation of online storefronts",
|
|
@@ -75,9 +106,21 @@
|
|
|
75
106
|
"historyHeading": "Where we started",
|
|
76
107
|
"history": "We began as a small team helping local businesses move online. Today our templates power visual editing labs, strict Fivora contracts, and one-click packaging for developers worldwide.",
|
|
77
108
|
"collageImages": [
|
|
78
|
-
{
|
|
79
|
-
|
|
80
|
-
|
|
109
|
+
{
|
|
110
|
+
"id": "studio",
|
|
111
|
+
"image": "/placeholder.svg",
|
|
112
|
+
"caption": "Design studio"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "build",
|
|
116
|
+
"image": "/placeholder.svg",
|
|
117
|
+
"caption": "Build & test"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"id": "ship",
|
|
121
|
+
"image": "/placeholder.svg",
|
|
122
|
+
"caption": "Ship to Fivora"
|
|
123
|
+
}
|
|
81
124
|
]
|
|
82
125
|
},
|
|
83
126
|
"servicesPage": {
|
|
@@ -90,14 +133,22 @@
|
|
|
90
133
|
"name": "Visual Editing Lab",
|
|
91
134
|
"description": "Simulate how merchants customize your template in real time with the built-in local development lab.",
|
|
92
135
|
"imageUrl": "/placeholder.svg",
|
|
93
|
-
"features": [
|
|
136
|
+
"features": [
|
|
137
|
+
"Zero-server static preview",
|
|
138
|
+
"Field focus bridge",
|
|
139
|
+
"Instant feedback"
|
|
140
|
+
]
|
|
94
141
|
},
|
|
95
142
|
{
|
|
96
143
|
"id": "clean-packaging",
|
|
97
144
|
"name": "Automated Packager",
|
|
98
145
|
"description": "Automatically produce clean, upload-ready ZIP archives excluding junk and cache files.",
|
|
99
146
|
"imageUrl": "/placeholder.svg",
|
|
100
|
-
"features": [
|
|
147
|
+
"features": [
|
|
148
|
+
"Excludes node_modules",
|
|
149
|
+
"Excludes .next and .git",
|
|
150
|
+
"100% preflight compliant"
|
|
151
|
+
]
|
|
101
152
|
}
|
|
102
153
|
],
|
|
103
154
|
"contact": {
|
|
@@ -112,8 +163,60 @@
|
|
|
112
163
|
"submitLabel": "Send Message",
|
|
113
164
|
"directMessageText": "Send us a direct message",
|
|
114
165
|
"whatsapp": "+94 77 123 4567"
|
|
115
|
-
}
|
|
166
|
+
},
|
|
167
|
+
"products": [
|
|
168
|
+
{
|
|
169
|
+
"id": "prod-1",
|
|
170
|
+
"title": "Minimalist Ceramic Cup",
|
|
171
|
+
"description": "Handcrafted matte ceramic cup for your daily espresso or pour-over brew.",
|
|
172
|
+
"price": 3200,
|
|
173
|
+
"compareAtPrice": 4000,
|
|
174
|
+
"currency": "LKR",
|
|
175
|
+
"imageUrl": "/placeholder.svg",
|
|
176
|
+
"category": "Ceramics",
|
|
177
|
+
"badge": "Bestseller",
|
|
178
|
+
"isAvailable": true
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"id": "prod-2",
|
|
182
|
+
"title": "Artisan Linen Apron",
|
|
183
|
+
"description": "Durable pure washed linen apron with deep front utility pockets.",
|
|
184
|
+
"price": 5400,
|
|
185
|
+
"compareAtPrice": 6200,
|
|
186
|
+
"currency": "LKR",
|
|
187
|
+
"imageUrl": "/placeholder.svg",
|
|
188
|
+
"category": "Kitchen",
|
|
189
|
+
"badge": "New",
|
|
190
|
+
"isAvailable": true
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"id": "prod-3",
|
|
194
|
+
"title": "Botanical Room Spray",
|
|
195
|
+
"description": "Natural essential oil room mist infused with wild lavender and cedarwood.",
|
|
196
|
+
"price": 2800,
|
|
197
|
+
"compareAtPrice": null,
|
|
198
|
+
"currency": "LKR",
|
|
199
|
+
"imageUrl": "/placeholder.svg",
|
|
200
|
+
"category": "Aromatherapy",
|
|
201
|
+
"badge": null,
|
|
202
|
+
"isAvailable": true
|
|
203
|
+
}
|
|
204
|
+
]
|
|
116
205
|
},
|
|
117
206
|
"media": {},
|
|
118
|
-
"seo": null
|
|
207
|
+
"seo": null,
|
|
208
|
+
"siteInstance": {
|
|
209
|
+
"id": "starter-demo-instance",
|
|
210
|
+
"slug": "starter-demo",
|
|
211
|
+
"domain": "starter-demo.fivora.site",
|
|
212
|
+
"subdomain": "starter-demo",
|
|
213
|
+
"customDomain": null,
|
|
214
|
+
"liveUrl": "https://starter-demo.fivora.site"
|
|
215
|
+
},
|
|
216
|
+
"api": {
|
|
217
|
+
"baseUrl": "https://api.fivora.site",
|
|
218
|
+
"catalogUrl": "https://api.fivora.site/site-catalog/starter-demo/live-data",
|
|
219
|
+
"contactUrl": "https://api.fivora.site/site-contact",
|
|
220
|
+
"analyticsUrl": "https://api.fivora.site/site-analytics/page-view"
|
|
221
|
+
}
|
|
119
222
|
}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
export {
|
|
4
4
|
SiteDataProvider,
|
|
5
5
|
useSiteData,
|
|
6
|
+
useProducts,
|
|
7
|
+
useServices,
|
|
8
|
+
useSiteCatalog,
|
|
9
|
+
useSiteApi,
|
|
6
10
|
contentText,
|
|
7
11
|
contentObject,
|
|
8
12
|
contentList,
|
|
@@ -15,4 +19,12 @@ export {
|
|
|
15
19
|
PREVIEW_FIELD_ATTRIBUTE,
|
|
16
20
|
} from '@deneb-ui/ui';
|
|
17
21
|
|
|
18
|
-
export type {
|
|
22
|
+
export type {
|
|
23
|
+
SiteData,
|
|
24
|
+
SiteDataProviderProps,
|
|
25
|
+
SiteDataApiConfig,
|
|
26
|
+
SiteDataProject,
|
|
27
|
+
SiteInstanceData,
|
|
28
|
+
ProductItem,
|
|
29
|
+
ServiceItem,
|
|
30
|
+
} from '@deneb-ui/ui';
|