@prenta/core 1.1.1 → 2.2.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.
Files changed (109) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/api/handlers.d.ts.map +1 -1
  3. package/dist/api/handlers.js +0 -2
  4. package/dist/api/handlers.js.map +1 -1
  5. package/dist/api/routes/media.d.ts.map +1 -1
  6. package/dist/api/routes/media.js +73 -104
  7. package/dist/api/routes/media.js.map +1 -1
  8. package/dist/api/routes/saved-sections.d.ts.map +1 -1
  9. package/dist/api/routes/saved-sections.js +20 -300
  10. package/dist/api/routes/saved-sections.js.map +1 -1
  11. package/dist/appearance/resolve.js +1 -1
  12. package/dist/appearance/resolve.js.map +1 -1
  13. package/dist/collections/presets.d.ts +2 -2
  14. package/dist/collections/presets.js +2 -2
  15. package/dist/config/runtime.d.ts +1 -2
  16. package/dist/config/runtime.d.ts.map +1 -1
  17. package/dist/config/runtime.js.map +1 -1
  18. package/dist/config/types.d.ts +0 -3
  19. package/dist/config/types.d.ts.map +1 -1
  20. package/dist/db/model-types.d.ts +67 -26
  21. package/dist/db/model-types.d.ts.map +1 -1
  22. package/dist/generated/browser.d.ts +16 -0
  23. package/dist/generated/client.d.ts +16 -0
  24. package/dist/generated/commonInputTypes.d.ts +30 -0
  25. package/dist/generated/internal/class.d.ts +33 -0
  26. package/dist/generated/internal/class.js +4 -4
  27. package/dist/generated/internal/prismaNamespace.d.ts +294 -1
  28. package/dist/generated/internal/prismaNamespace.js +55 -1
  29. package/dist/generated/internal/prismaNamespaceBrowser.d.ts +60 -0
  30. package/dist/generated/internal/prismaNamespaceBrowser.js +55 -1
  31. package/dist/generated/models/DocumentCRDT.d.ts +1110 -0
  32. package/dist/generated/models/DocumentCRDT.js +1 -0
  33. package/dist/generated/models/DocumentComment.d.ts +1722 -0
  34. package/dist/generated/models/DocumentComment.js +1 -0
  35. package/dist/generated/models/DocumentNotification.d.ts +1289 -0
  36. package/dist/generated/models/DocumentNotification.js +1 -0
  37. package/dist/generated/models/User.d.ts +552 -0
  38. package/dist/generated/models.d.ts +3 -0
  39. package/dist/index.d.ts +4 -2
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -2
  42. package/dist/index.js.map +1 -1
  43. package/dist/media/index.d.ts +2 -0
  44. package/dist/media/index.d.ts.map +1 -1
  45. package/dist/media/index.js +1 -0
  46. package/dist/media/index.js.map +1 -1
  47. package/dist/media/optimize.d.ts.map +1 -1
  48. package/dist/media/optimize.js +19 -12
  49. package/dist/media/optimize.js.map +1 -1
  50. package/dist/media/reoptimize.d.ts +61 -0
  51. package/dist/media/reoptimize.d.ts.map +1 -0
  52. package/dist/media/reoptimize.js +371 -0
  53. package/dist/media/reoptimize.js.map +1 -0
  54. package/dist/sections/index.d.ts +1 -2
  55. package/dist/sections/index.d.ts.map +1 -1
  56. package/dist/sections/index.js +1 -2
  57. package/dist/sections/index.js.map +1 -1
  58. package/dist/sections/types.d.ts +2 -3
  59. package/dist/sections/types.d.ts.map +1 -1
  60. package/dist/sections/types.js +2 -3
  61. package/dist/sections/types.js.map +1 -1
  62. package/dist/security/api-key-enhanced.d.ts +2 -2
  63. package/package.json +1 -6
  64. package/prisma/migrations/0013_document_collab_models/migration.sql +68 -0
  65. package/prisma/schema.prisma +66 -5
  66. package/dist/api/routes/page-templates.d.ts +0 -3
  67. package/dist/api/routes/page-templates.d.ts.map +0 -1
  68. package/dist/api/routes/page-templates.js +0 -265
  69. package/dist/api/routes/page-templates.js.map +0 -1
  70. package/dist/page-builder/a11y-fix.d.ts +0 -20
  71. package/dist/page-builder/a11y-fix.d.ts.map +0 -1
  72. package/dist/page-builder/a11y-fix.js +0 -182
  73. package/dist/page-builder/a11y-fix.js.map +0 -1
  74. package/dist/page-builder/ai-pipeline.d.ts +0 -43
  75. package/dist/page-builder/ai-pipeline.d.ts.map +0 -1
  76. package/dist/page-builder/ai-pipeline.js +0 -165
  77. package/dist/page-builder/ai-pipeline.js.map +0 -1
  78. package/dist/page-builder/blocks.d.ts +0 -27
  79. package/dist/page-builder/blocks.d.ts.map +0 -1
  80. package/dist/page-builder/blocks.js +0 -313
  81. package/dist/page-builder/blocks.js.map +0 -1
  82. package/dist/page-builder/design-scorer.d.ts +0 -27
  83. package/dist/page-builder/design-scorer.d.ts.map +0 -1
  84. package/dist/page-builder/design-scorer.js +0 -612
  85. package/dist/page-builder/design-scorer.js.map +0 -1
  86. package/dist/page-builder/index.d.ts +0 -16
  87. package/dist/page-builder/index.d.ts.map +0 -1
  88. package/dist/page-builder/index.js +0 -18
  89. package/dist/page-builder/index.js.map +0 -1
  90. package/dist/page-builder/schema.d.ts +0 -107
  91. package/dist/page-builder/schema.d.ts.map +0 -1
  92. package/dist/page-builder/schema.js +0 -90
  93. package/dist/page-builder/schema.js.map +0 -1
  94. package/dist/page-builder/templates.d.ts +0 -9
  95. package/dist/page-builder/templates.d.ts.map +0 -1
  96. package/dist/page-builder/templates.js +0 -742
  97. package/dist/page-builder/templates.js.map +0 -1
  98. package/dist/page-builder/tree.d.ts +0 -17
  99. package/dist/page-builder/tree.d.ts.map +0 -1
  100. package/dist/page-builder/tree.js +0 -160
  101. package/dist/page-builder/tree.js.map +0 -1
  102. package/dist/page-builder/types.d.ts +0 -112
  103. package/dist/page-builder/types.d.ts.map +0 -1
  104. package/dist/page-builder/types.js +0 -4
  105. package/dist/page-builder/types.js.map +0 -1
  106. package/dist/page-builder/validate.d.ts +0 -6
  107. package/dist/page-builder/validate.d.ts.map +0 -1
  108. package/dist/page-builder/validate.js +0 -87
  109. package/dist/page-builder/validate.js.map +0 -1
@@ -1,612 +0,0 @@
1
- import { hasChildren } from './types.js';
2
- // ─── Block Purpose Classification ──────────────────────────────────────────
3
- const BLOCK_PURPOSE = {
4
- hero: 'attention',
5
- video: 'attention',
6
- text: 'information',
7
- faq: 'information',
8
- image: 'information',
9
- gallery: 'information',
10
- code: 'information',
11
- cards: 'information',
12
- cta: 'conversion',
13
- form: 'conversion',
14
- };
15
- // ─── Internal Helpers ──────────────────────────────────────────────────────
16
- function collectBlocks(node) {
17
- const blocks = [];
18
- if (node.type === 'block') {
19
- blocks.push(node);
20
- }
21
- if (hasChildren(node)) {
22
- for (const child of node.children) {
23
- blocks.push(...collectBlocks(child));
24
- }
25
- }
26
- return blocks;
27
- }
28
- function collectSections(tree) {
29
- return tree.children.filter((c) => c.type === 'section');
30
- }
31
- function countBlocksInNode(node) {
32
- if (node.type === 'block')
33
- return 1;
34
- if (!hasChildren(node))
35
- return 0;
36
- let count = 0;
37
- for (const child of node.children) {
38
- count += countBlocksInNode(child);
39
- }
40
- return count;
41
- }
42
- function collectRows(node) {
43
- const rows = [];
44
- if (node.type === 'row') {
45
- rows.push(node);
46
- }
47
- if (hasChildren(node)) {
48
- for (const child of node.children) {
49
- rows.push(...collectRows(child));
50
- }
51
- }
52
- return rows;
53
- }
54
- function parseSpacingValue(value) {
55
- if (!value)
56
- return null;
57
- const match = value.match(/^(\d+(?:\.\d+)?)/);
58
- return match ? parseFloat(match[1]) : null;
59
- }
60
- // ─── Category Scorers ──────────────────────────────────────────────────────
61
- function scoreVisualHierarchy(tree, blocks) {
62
- const checks = [];
63
- let score = 20;
64
- const hasHero = blocks.some((b) => b.settings.blockType === 'hero');
65
- const sections = collectSections(tree);
66
- if (sections.length > 0 && hasHero) {
67
- const firstSectionBlocks = collectBlocks(sections[0]);
68
- const heroInFirst = firstSectionBlocks.some((b) => b.settings.blockType === 'hero');
69
- if (heroInFirst) {
70
- checks.push({
71
- id: 'hero-position',
72
- label: 'Hero placement',
73
- status: 'good',
74
- detail: 'Hero block is in the first section',
75
- });
76
- }
77
- else {
78
- checks.push({
79
- id: 'hero-position',
80
- label: 'Hero placement',
81
- status: 'warning',
82
- detail: 'Hero block is not in the first section',
83
- });
84
- score -= 5;
85
- }
86
- }
87
- else if (!hasHero && sections.length > 0) {
88
- checks.push({
89
- id: 'hero-missing',
90
- label: 'Hero block',
91
- status: 'warning',
92
- detail: 'No hero block found — consider adding one for visual impact',
93
- });
94
- score -= 5;
95
- }
96
- const headings = [];
97
- for (const block of blocks) {
98
- if (block.settings.blockType === 'hero') {
99
- headings.push({ level: 1, blockId: block.id });
100
- }
101
- if (block.settings.blockType === 'text' && block.data.headingLevel) {
102
- const level = parseInt(String(block.data.headingLevel).replace('h', ''), 10);
103
- if (!isNaN(level)) {
104
- headings.push({ level, blockId: block.id });
105
- }
106
- }
107
- }
108
- let headingFlowOk = true;
109
- for (let i = 1; i < headings.length; i++) {
110
- const prev = headings[i - 1].level;
111
- const curr = headings[i].level;
112
- if (curr > prev + 1) {
113
- headingFlowOk = false;
114
- break;
115
- }
116
- }
117
- if (headings.length > 0) {
118
- if (headingFlowOk) {
119
- checks.push({
120
- id: 'heading-flow',
121
- label: 'Heading hierarchy',
122
- status: 'good',
123
- detail: 'Headings follow a logical flow',
124
- });
125
- }
126
- else {
127
- checks.push({
128
- id: 'heading-flow',
129
- label: 'Heading hierarchy',
130
- status: 'warning',
131
- detail: 'Heading levels skip — may confuse readers and SEO',
132
- });
133
- score -= 5;
134
- }
135
- }
136
- const ctaBlocks = blocks.filter((b) => b.settings.blockType === 'cta' || b.settings.blockType === 'form');
137
- if (ctaBlocks.length > 0 && sections.length > 2) {
138
- const lastSectionBlocks = collectBlocks(sections[sections.length - 1]);
139
- const allCtaInLast = ctaBlocks.every((cta) => lastSectionBlocks.some((b) => b.id === cta.id));
140
- if (allCtaInLast && sections.length > 3) {
141
- checks.push({
142
- id: 'cta-position',
143
- label: 'CTA placement',
144
- status: 'warning',
145
- detail: 'All CTAs are in the last section — add one higher on the page',
146
- });
147
- score -= 5;
148
- }
149
- else {
150
- checks.push({
151
- id: 'cta-position',
152
- label: 'CTA placement',
153
- status: 'good',
154
- detail: 'CTA is well-positioned on the page',
155
- });
156
- }
157
- }
158
- return {
159
- name: 'visualHierarchy',
160
- label: 'Visual Hierarchy',
161
- score: Math.max(0, score),
162
- maxScore: 20,
163
- checks,
164
- };
165
- }
166
- function scoreSpacingConsistency(tree) {
167
- const checks = [];
168
- let score = 20;
169
- const sections = collectSections(tree);
170
- const paddings = [];
171
- for (const section of sections) {
172
- const top = parseSpacingValue(section.settings.paddingTop);
173
- const bottom = parseSpacingValue(section.settings.paddingBottom);
174
- if (top !== null)
175
- paddings.push(top);
176
- if (bottom !== null)
177
- paddings.push(bottom);
178
- }
179
- if (paddings.length >= 2) {
180
- const uniquePaddings = new Set(paddings);
181
- if (uniquePaddings.size <= 2) {
182
- checks.push({
183
- id: 'padding-consistency',
184
- label: 'Section padding',
185
- status: 'good',
186
- detail: 'Consistent padding across sections',
187
- });
188
- }
189
- else if (uniquePaddings.size <= 4) {
190
- checks.push({
191
- id: 'padding-consistency',
192
- label: 'Section padding',
193
- status: 'warning',
194
- detail: `${uniquePaddings.size} different padding values — consider standardizing`,
195
- });
196
- score -= 5;
197
- }
198
- else {
199
- checks.push({
200
- id: 'padding-consistency',
201
- label: 'Section padding',
202
- status: 'error',
203
- detail: `${uniquePaddings.size} different padding values — too inconsistent`,
204
- });
205
- score -= 10;
206
- }
207
- }
208
- else {
209
- checks.push({
210
- id: 'padding-consistency',
211
- label: 'Section padding',
212
- status: 'good',
213
- detail: 'Default padding used',
214
- });
215
- }
216
- const rows = collectRows(tree);
217
- const gaps = [];
218
- for (const row of rows) {
219
- const gap = parseSpacingValue(row.settings.gap);
220
- if (gap !== null)
221
- gaps.push(gap);
222
- }
223
- if (gaps.length >= 2) {
224
- const uniqueGaps = new Set(gaps);
225
- if (uniqueGaps.size <= 2) {
226
- checks.push({
227
- id: 'gap-consistency',
228
- label: 'Row gaps',
229
- status: 'good',
230
- detail: 'Consistent gap values',
231
- });
232
- }
233
- else {
234
- checks.push({
235
- id: 'gap-consistency',
236
- label: 'Row gaps',
237
- status: 'warning',
238
- detail: `${uniqueGaps.size} different gap values`,
239
- });
240
- score -= 5;
241
- }
242
- }
243
- else {
244
- checks.push({
245
- id: 'gap-consistency',
246
- label: 'Row gaps',
247
- status: 'good',
248
- detail: 'Default gaps used',
249
- });
250
- }
251
- return {
252
- name: 'spacingConsistency',
253
- label: 'Spacing Consistency',
254
- score: Math.max(0, score),
255
- maxScore: 20,
256
- checks,
257
- };
258
- }
259
- function scoreContentDensity(tree) {
260
- const checks = [];
261
- let score = 15;
262
- const sections = collectSections(tree);
263
- if (sections.length === 0) {
264
- checks.push({
265
- id: 'no-sections',
266
- label: 'Page content',
267
- status: 'error',
268
- detail: 'Page has no sections',
269
- });
270
- return { name: 'contentDensity', label: 'Content Density', score: 0, maxScore: 15, checks };
271
- }
272
- const blockCounts = sections.map((s) => countBlocksInNode(s));
273
- const overpackedSections = blockCounts.filter((c) => c > 5);
274
- const emptySections = blockCounts.filter((c) => c === 0);
275
- if (overpackedSections.length > 0) {
276
- checks.push({
277
- id: 'overpacked',
278
- label: 'Section density',
279
- status: 'warning',
280
- detail: `${overpackedSections.length} section(s) have more than 5 blocks — consider splitting`,
281
- });
282
- score -= 5;
283
- }
284
- else {
285
- checks.push({
286
- id: 'overpacked',
287
- label: 'Section density',
288
- status: 'good',
289
- detail: 'No sections are overpacked',
290
- });
291
- }
292
- if (emptySections.length > 0) {
293
- checks.push({
294
- id: 'empty-sections',
295
- label: 'Empty sections',
296
- status: 'warning',
297
- detail: `${emptySections.length} section(s) have no content`,
298
- });
299
- score -= 5;
300
- }
301
- if (blockCounts.length >= 3) {
302
- const max = Math.max(...blockCounts);
303
- const min = Math.min(...blockCounts.filter((c) => c > 0));
304
- if (max > 0 && min > 0 && max / min > 4) {
305
- checks.push({
306
- id: 'balance',
307
- label: 'Section balance',
308
- status: 'warning',
309
- detail: 'Large variation in section sizes — page may feel unbalanced',
310
- });
311
- score -= 3;
312
- }
313
- else {
314
- checks.push({
315
- id: 'balance',
316
- label: 'Section balance',
317
- status: 'good',
318
- detail: 'Sections are reasonably balanced',
319
- });
320
- }
321
- }
322
- return {
323
- name: 'contentDensity',
324
- label: 'Content Density',
325
- score: Math.max(0, score),
326
- maxScore: 15,
327
- checks,
328
- };
329
- }
330
- function scoreColorUsage(tree) {
331
- const checks = [];
332
- let score = 15;
333
- const sections = collectSections(tree);
334
- const backgrounds = sections.map((s) => s.settings.background);
335
- const definedBgs = backgrounds.filter((b) => !!b);
336
- const uniqueBgs = new Set(definedBgs);
337
- if (uniqueBgs.size <= 3) {
338
- checks.push({
339
- id: 'color-palette',
340
- label: 'Color palette',
341
- status: 'good',
342
- detail: `${uniqueBgs.size || 0} distinct background colors — restrained palette`,
343
- });
344
- }
345
- else if (uniqueBgs.size <= 5) {
346
- checks.push({
347
- id: 'color-palette',
348
- label: 'Color palette',
349
- status: 'warning',
350
- detail: `${uniqueBgs.size} distinct background colors — consider reducing`,
351
- });
352
- score -= 5;
353
- }
354
- else {
355
- checks.push({
356
- id: 'color-palette',
357
- label: 'Color palette',
358
- status: 'error',
359
- detail: `${uniqueBgs.size} distinct background colors — too many, feels inconsistent`,
360
- });
361
- score -= 10;
362
- }
363
- let adjacentSame = 0;
364
- for (let i = 1; i < sections.length; i++) {
365
- const prev = sections[i - 1].settings.background ?? 'default';
366
- const curr = sections[i].settings.background ?? 'default';
367
- if (prev === curr && prev !== 'default') {
368
- adjacentSame++;
369
- }
370
- }
371
- if (adjacentSame > 0) {
372
- checks.push({
373
- id: 'adjacent-bg',
374
- label: 'Visual separation',
375
- status: 'warning',
376
- detail: `${adjacentSame} adjacent section(s) share the same background — alternate for contrast`,
377
- });
378
- score -= 3;
379
- }
380
- else if (sections.length > 1) {
381
- checks.push({
382
- id: 'adjacent-bg',
383
- label: 'Visual separation',
384
- status: 'good',
385
- detail: 'Adjacent sections have distinct backgrounds',
386
- });
387
- }
388
- return {
389
- name: 'colorUsage',
390
- label: 'Color Usage',
391
- score: Math.max(0, score),
392
- maxScore: 15,
393
- checks,
394
- };
395
- }
396
- function scoreImageQuality(blocks) {
397
- const checks = [];
398
- let score = 15;
399
- const imageBlocks = blocks.filter((b) => b.settings.blockType === 'image' ||
400
- b.settings.blockType === 'hero' ||
401
- b.settings.blockType === 'gallery');
402
- if (imageBlocks.length === 0 && blocks.length > 3) {
403
- checks.push({
404
- id: 'no-images',
405
- label: 'Image usage',
406
- status: 'warning',
407
- detail: 'No images on the page — visual content improves engagement',
408
- });
409
- score -= 5;
410
- }
411
- else if (imageBlocks.length > 0) {
412
- checks.push({
413
- id: 'has-images',
414
- label: 'Image usage',
415
- status: 'good',
416
- detail: `${imageBlocks.length} image-containing block(s)`,
417
- });
418
- }
419
- let missingAlt = 0;
420
- for (const block of imageBlocks) {
421
- if (block.settings.blockType === 'image') {
422
- if (!block.data.alt || String(block.data.alt).trim() === '')
423
- missingAlt++;
424
- }
425
- if (block.settings.blockType === 'gallery' && Array.isArray(block.data.images)) {
426
- for (const img of block.data.images) {
427
- if (!img.alt || String(img.alt).trim() === '')
428
- missingAlt++;
429
- }
430
- }
431
- }
432
- if (missingAlt > 0) {
433
- checks.push({
434
- id: 'alt-text',
435
- label: 'Image alt text',
436
- status: 'error',
437
- detail: `${missingAlt} image(s) missing alt text`,
438
- });
439
- score -= 7;
440
- }
441
- else if (imageBlocks.length > 0) {
442
- checks.push({
443
- id: 'alt-text',
444
- label: 'Image alt text',
445
- status: 'good',
446
- detail: 'All images have alt text',
447
- });
448
- }
449
- return {
450
- name: 'imageQuality',
451
- label: 'Image Quality',
452
- score: Math.max(0, score),
453
- maxScore: 15,
454
- checks,
455
- };
456
- }
457
- function scoreMobileReadiness(tree) {
458
- const checks = [];
459
- let score = 15;
460
- const rows = collectRows(tree);
461
- let mobileConsideredRows = 0;
462
- let multiColumnRows = 0;
463
- for (const row of rows) {
464
- if (row.children.length > 1) {
465
- multiColumnRows++;
466
- if (row.settings.wrapOnMobile || row.settings.reverseOnMobile) {
467
- mobileConsideredRows++;
468
- }
469
- }
470
- }
471
- if (multiColumnRows > 0) {
472
- if (mobileConsideredRows === multiColumnRows) {
473
- checks.push({
474
- id: 'mobile-wrap',
475
- label: 'Mobile column behavior',
476
- status: 'good',
477
- detail: 'All multi-column rows have mobile settings',
478
- });
479
- }
480
- else if (mobileConsideredRows > 0) {
481
- checks.push({
482
- id: 'mobile-wrap',
483
- label: 'Mobile column behavior',
484
- status: 'warning',
485
- detail: `${multiColumnRows - mobileConsideredRows} multi-column row(s) lack mobile wrap/reverse settings`,
486
- });
487
- score -= 5;
488
- }
489
- else {
490
- checks.push({
491
- id: 'mobile-wrap',
492
- label: 'Mobile column behavior',
493
- status: 'warning',
494
- detail: 'No multi-column rows have mobile-specific settings',
495
- });
496
- score -= 7;
497
- }
498
- }
499
- else {
500
- checks.push({
501
- id: 'mobile-wrap',
502
- label: 'Mobile layout',
503
- status: 'good',
504
- detail: 'Single-column layout — mobile-friendly by default',
505
- });
506
- }
507
- const narrowColumns = rows.flatMap((r) => r.children.filter((c) => c.settings.width <= 2));
508
- if (narrowColumns.length > 0) {
509
- checks.push({
510
- id: 'narrow-cols',
511
- label: 'Narrow columns',
512
- status: 'warning',
513
- detail: `${narrowColumns.length} column(s) are 2-units or narrower — may be hard to read on mobile`,
514
- });
515
- score -= 3;
516
- }
517
- return {
518
- name: 'mobileReadiness',
519
- label: 'Mobile Readiness',
520
- score: Math.max(0, score),
521
- maxScore: 15,
522
- checks,
523
- };
524
- }
525
- // ─── Semantic Suggestions ──────────────────────────────────────────────────
526
- function generateSuggestions(tree, blocks) {
527
- const suggestions = [];
528
- const sections = collectSections(tree);
529
- const purposes = new Set(blocks.map((b) => BLOCK_PURPOSE[b.settings.blockType] ?? 'information'));
530
- if (!purposes.has('conversion')) {
531
- suggestions.push({
532
- id: 'missing-cta',
533
- message: 'No conversion element found — add a CTA or form to drive user action',
534
- severity: 'important',
535
- category: 'conversion',
536
- });
537
- }
538
- const hasTrustElement = blocks.some((b) => {
539
- if (b.settings.blockType === 'cards' && b.settings.variant?.includes('testimonial'))
540
- return true;
541
- if (b.settings.blockType === 'gallery')
542
- return true;
543
- return false;
544
- });
545
- if (!hasTrustElement && blocks.length > 3) {
546
- suggestions.push({
547
- id: 'missing-trust',
548
- message: 'No trust element — consider adding testimonials, client logos, or a gallery',
549
- severity: 'suggestion',
550
- category: 'trust',
551
- });
552
- }
553
- let consecutiveInfo = 0;
554
- let maxConsecutiveInfo = 0;
555
- for (const section of sections) {
556
- const sectionBlocks = collectBlocks(section);
557
- const allInfo = sectionBlocks.every((b) => (BLOCK_PURPOSE[b.settings.blockType] ?? 'information') === 'information');
558
- if (allInfo && sectionBlocks.length > 0) {
559
- consecutiveInfo++;
560
- maxConsecutiveInfo = Math.max(maxConsecutiveInfo, consecutiveInfo);
561
- }
562
- else {
563
- consecutiveInfo = 0;
564
- }
565
- }
566
- if (maxConsecutiveInfo >= 3) {
567
- suggestions.push({
568
- id: 'info-streak',
569
- message: `${maxConsecutiveInfo} information sections in a row — add a visual break (image, gallery, or CTA)`,
570
- severity: 'suggestion',
571
- category: 'structure',
572
- });
573
- }
574
- const hasFaq = blocks.some((b) => b.settings.blockType === 'faq');
575
- if (!hasFaq && sections.length >= 4) {
576
- suggestions.push({
577
- id: 'suggest-faq',
578
- message: 'Consider adding an FAQ section — helps with SEO and user questions',
579
- severity: 'info',
580
- category: 'information',
581
- });
582
- }
583
- if (sections.length === 0) {
584
- suggestions.push({
585
- id: 'empty-page',
586
- message: 'Page has no content — add sections to build your page',
587
- severity: 'important',
588
- category: 'structure',
589
- });
590
- }
591
- return suggestions;
592
- }
593
- // ─── Main Export ────────────────────────────────────────────────────────────
594
- export function analyzeDesign(tree) {
595
- const blocks = collectBlocks(tree);
596
- const categories = [
597
- scoreVisualHierarchy(tree, blocks),
598
- scoreSpacingConsistency(tree),
599
- scoreContentDensity(tree),
600
- scoreColorUsage(tree),
601
- scoreImageQuality(blocks),
602
- scoreMobileReadiness(tree),
603
- ];
604
- const totalScore = categories.reduce((sum, c) => sum + c.score, 0);
605
- const suggestions = generateSuggestions(tree, blocks);
606
- return {
607
- score: totalScore,
608
- categories,
609
- suggestions,
610
- };
611
- }
612
- //# sourceMappingURL=design-scorer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-scorer.js","sourceRoot":"","sources":["../../src/page-builder/design-scorer.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export type { SectionSettings, ContainerSettings, RowSettings, ColumnSettings, BlockSettings, SavedSectionRefSettings, ResponsiveOverrides, PageNode, SectionNode, ContainerNode, RowNode, ColumnNode, BlockNode, SavedSectionRefNode, BuilderNode, NodeType, ParentNode, VariantDefinition, BlockTypeDefinition, PreviewTheme, PageBuilderConfig, } from './types.js';
2
- export { hasChildren } from './types.js';
3
- export { validateTree } from './validate.js';
4
- export type { TreeValidationResult } from './validate.js';
5
- export { pageNodeSchema, sectionNodeSchema, containerNodeSchema, rowNodeSchema, columnNodeSchema, blockNodeSchema, savedSectionRefSchema, } from './schema.js';
6
- export { createId, findNode, findParent, addNode, removeNode, moveNode, updateNodeSettings, updateBlockData, createEmptyPage, createSection, createContainer, createRow, createColumn, createBlock, createSavedSectionRef, } from './tree.js';
7
- export { BlockCatalog } from './blocks.js';
8
- export { analyzeDesign } from './design-scorer.js';
9
- export type { DesignCategory, DesignCheck, DesignSuggestion, DesignAnalysis, } from './design-scorer.js';
10
- export { BUILT_IN_TEMPLATES } from './templates.js';
11
- export type { BuiltInTemplate } from './templates.js';
12
- export { buildStructurePrompt, buildContentPrompt, buildSEOPrompt, buildAccessibilityPrompt, PAGE_TREE_SCHEMA_REFERENCE, } from './ai-pipeline.js';
13
- export type { GenerationStep, GenerationContext, StepResult, GenerationResult, GenerationProgress, } from './ai-pipeline.js';
14
- export { auditAccessibility, fixAccessibility } from './a11y-fix.js';
15
- export type { A11yIssue, A11yReport } from './a11y-fix.js';
16
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/page-builder/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,OAAO,EACP,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAGzD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,eAAe,EACf,SAAS,EACT,YAAY,EACZ,WAAW,EACX,qBAAqB,GACtB,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,YAAY,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,cAAc,GACf,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEpE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA"}