@prenta/core 1.1.1 → 2.0.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 (72) hide show
  1. package/CHANGELOG.md +6 -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/saved-sections.d.ts.map +1 -1
  6. package/dist/api/routes/saved-sections.js +20 -300
  7. package/dist/api/routes/saved-sections.js.map +1 -1
  8. package/dist/collections/presets.d.ts +2 -2
  9. package/dist/collections/presets.js +2 -2
  10. package/dist/config/runtime.d.ts +1 -2
  11. package/dist/config/runtime.d.ts.map +1 -1
  12. package/dist/config/runtime.js.map +1 -1
  13. package/dist/config/types.d.ts +0 -3
  14. package/dist/config/types.d.ts.map +1 -1
  15. package/dist/index.d.ts +0 -2
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +0 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/sections/index.d.ts +1 -2
  20. package/dist/sections/index.d.ts.map +1 -1
  21. package/dist/sections/index.js +1 -2
  22. package/dist/sections/index.js.map +1 -1
  23. package/dist/sections/types.d.ts +2 -3
  24. package/dist/sections/types.d.ts.map +1 -1
  25. package/dist/sections/types.js +2 -3
  26. package/dist/sections/types.js.map +1 -1
  27. package/dist/security/api-key-enhanced.d.ts +2 -2
  28. package/package.json +1 -6
  29. package/dist/api/routes/page-templates.d.ts +0 -3
  30. package/dist/api/routes/page-templates.d.ts.map +0 -1
  31. package/dist/api/routes/page-templates.js +0 -265
  32. package/dist/api/routes/page-templates.js.map +0 -1
  33. package/dist/page-builder/a11y-fix.d.ts +0 -20
  34. package/dist/page-builder/a11y-fix.d.ts.map +0 -1
  35. package/dist/page-builder/a11y-fix.js +0 -182
  36. package/dist/page-builder/a11y-fix.js.map +0 -1
  37. package/dist/page-builder/ai-pipeline.d.ts +0 -43
  38. package/dist/page-builder/ai-pipeline.d.ts.map +0 -1
  39. package/dist/page-builder/ai-pipeline.js +0 -165
  40. package/dist/page-builder/ai-pipeline.js.map +0 -1
  41. package/dist/page-builder/blocks.d.ts +0 -27
  42. package/dist/page-builder/blocks.d.ts.map +0 -1
  43. package/dist/page-builder/blocks.js +0 -313
  44. package/dist/page-builder/blocks.js.map +0 -1
  45. package/dist/page-builder/design-scorer.d.ts +0 -27
  46. package/dist/page-builder/design-scorer.d.ts.map +0 -1
  47. package/dist/page-builder/design-scorer.js +0 -612
  48. package/dist/page-builder/design-scorer.js.map +0 -1
  49. package/dist/page-builder/index.d.ts +0 -16
  50. package/dist/page-builder/index.d.ts.map +0 -1
  51. package/dist/page-builder/index.js +0 -18
  52. package/dist/page-builder/index.js.map +0 -1
  53. package/dist/page-builder/schema.d.ts +0 -107
  54. package/dist/page-builder/schema.d.ts.map +0 -1
  55. package/dist/page-builder/schema.js +0 -90
  56. package/dist/page-builder/schema.js.map +0 -1
  57. package/dist/page-builder/templates.d.ts +0 -9
  58. package/dist/page-builder/templates.d.ts.map +0 -1
  59. package/dist/page-builder/templates.js +0 -742
  60. package/dist/page-builder/templates.js.map +0 -1
  61. package/dist/page-builder/tree.d.ts +0 -17
  62. package/dist/page-builder/tree.d.ts.map +0 -1
  63. package/dist/page-builder/tree.js +0 -160
  64. package/dist/page-builder/tree.js.map +0 -1
  65. package/dist/page-builder/types.d.ts +0 -112
  66. package/dist/page-builder/types.d.ts.map +0 -1
  67. package/dist/page-builder/types.js +0 -4
  68. package/dist/page-builder/types.js.map +0 -1
  69. package/dist/page-builder/validate.d.ts +0 -6
  70. package/dist/page-builder/validate.d.ts.map +0 -1
  71. package/dist/page-builder/validate.js +0 -87
  72. package/dist/page-builder/validate.js.map +0 -1
@@ -1,265 +0,0 @@
1
- import { logEvent } from '../../security/audit.js';
2
- import { BUILT_IN_TEMPLATES } from '../../page-builder/templates.js';
3
- import { validateTree } from '../../page-builder/validate.js';
4
- import { guardedDb } from '../guarded-db.js';
5
- import { json, errorResponse, internalError, hasModel, modelNotAvailable, safeCount, requireAuth, ADMIN_ROLES, requireRole, } from '../route-helpers.js';
6
- export function registerPageTemplateRoutes(router) {
7
- const db = guardedDb;
8
- // ---------------------------------------------------------------------------
9
- // Page Templates
10
- // ---------------------------------------------------------------------------
11
- async function seedBuiltInTemplates(d) {
12
- for (const [key, template] of Object.entries(BUILT_IN_TEMPLATES)) {
13
- await d.pageTemplate.upsert({
14
- where: { id: `builtin-${key}` },
15
- create: {
16
- id: `builtin-${key}`,
17
- name: template.name,
18
- description: template.description,
19
- category: template.category,
20
- tree: template.tree,
21
- builtIn: true,
22
- },
23
- update: {
24
- name: template.name,
25
- description: template.description,
26
- category: template.category,
27
- tree: template.tree,
28
- },
29
- });
30
- }
31
- }
32
- router.get('/page-templates', async (request) => {
33
- try {
34
- const auth = await requireAuth(request);
35
- if (auth.error)
36
- return auth.error;
37
- const roleErr = requireRole(auth.session.role, ADMIN_ROLES);
38
- if (roleErr)
39
- return roleErr;
40
- const d = db();
41
- if (!hasModel(d, 'pageTemplate'))
42
- return modelNotAvailable('PageTemplate');
43
- const url = new URL(request.url, 'http://localhost');
44
- const category = url.searchParams.get('category');
45
- const collection = url.searchParams.get('collection');
46
- const builtInCount = await safeCount(d.pageTemplate, { builtIn: true });
47
- if (builtInCount === 0) {
48
- await seedBuiltInTemplates(d);
49
- }
50
- const where = {};
51
- if (category)
52
- where.category = category;
53
- const templates = await d.pageTemplate.findMany({
54
- where,
55
- orderBy: [{ builtIn: 'desc' }, { updatedAt: 'desc' }],
56
- });
57
- // When a `collection` filter is supplied, reorder the response so the
58
- // suggested templates for that collection bubble to the top. The admin
59
- // "Create new" picker uses this so blog posts default to `blog-post`,
60
- // case studies to `case-study`, etc., without forcing the user to scan
61
- // every template alphabetically.
62
- if (collection) {
63
- const { getTemplatesForCollection } = await import('../../collections/presets.js');
64
- const { primary, alternates } = getTemplatesForCollection(collection);
65
- const suggestionOrder = new Map();
66
- if (primary)
67
- suggestionOrder.set(`builtin-${primary}`, 0);
68
- alternates.forEach((alt, i) => suggestionOrder.set(`builtin-${alt}`, i + 1));
69
- templates.sort((a, b) => {
70
- const ai = suggestionOrder.has(a.id) ? suggestionOrder.get(a.id) : 100;
71
- const bi = suggestionOrder.has(b.id) ? suggestionOrder.get(b.id) : 100;
72
- return ai - bi;
73
- });
74
- const annotated = templates.map((t) => ({
75
- ...t,
76
- suggested: suggestionOrder.has(t.id),
77
- suggestionRank: suggestionOrder.get(t.id) ?? null,
78
- }));
79
- return json({
80
- data: annotated,
81
- suggestion: {
82
- collection,
83
- primary: primary ? `builtin-${primary}` : null,
84
- alternates: alternates.map((a) => `builtin-${a}`),
85
- },
86
- });
87
- }
88
- return json({ data: templates });
89
- }
90
- catch (err) {
91
- return internalError(err, 'page-templates list');
92
- }
93
- });
94
- router.get('/page-templates/:id', async (request, params) => {
95
- try {
96
- const auth = await requireAuth(request);
97
- if (auth.error)
98
- return auth.error;
99
- const roleErr = requireRole(auth.session.role, ADMIN_ROLES);
100
- if (roleErr)
101
- return roleErr;
102
- const d = db();
103
- if (!hasModel(d, 'pageTemplate'))
104
- return modelNotAvailable('PageTemplate');
105
- const template = await d.pageTemplate.findUnique({ where: { id: params.id } });
106
- if (!template)
107
- return errorResponse('Template not found', 404);
108
- return json({ data: template });
109
- }
110
- catch (err) {
111
- return internalError(err, 'page-templates get');
112
- }
113
- });
114
- router.post('/page-templates', async (request) => {
115
- try {
116
- const auth = await requireAuth(request);
117
- if (auth.error)
118
- return auth.error;
119
- const roleErr = requireRole(auth.session.role, ADMIN_ROLES);
120
- if (roleErr)
121
- return roleErr;
122
- const d = db();
123
- if (!hasModel(d, 'pageTemplate'))
124
- return modelNotAvailable('PageTemplate');
125
- const body = (await request.json());
126
- if (!body.name)
127
- return errorResponse('name is required', 400);
128
- if (!body.tree)
129
- return errorResponse('tree is required', 400);
130
- const validation = validateTree(body.tree);
131
- if (!validation.valid) {
132
- return errorResponse(`Invalid tree: ${validation.errors.join('; ')}`, 400);
133
- }
134
- const validCategories = ['landing', 'content', 'utility'];
135
- const category = body.category || 'content';
136
- if (!validCategories.includes(category)) {
137
- return errorResponse('category must be landing, content, or utility', 400);
138
- }
139
- const template = await d.pageTemplate.create({
140
- data: {
141
- name: body.name,
142
- description: body.description || null,
143
- category,
144
- tree: body.tree,
145
- thumbnail: body.thumbnail || null,
146
- builtIn: false,
147
- },
148
- });
149
- await logEvent({
150
- event: 'settings_changed',
151
- userId: auth.session.userId,
152
- details: { action: 'page_template_created', templateId: template.id, name: template.name },
153
- });
154
- return json({ data: template }, 201);
155
- }
156
- catch (err) {
157
- return internalError(err, 'page-templates create');
158
- }
159
- });
160
- router.put('/page-templates/:id', async (request, params) => {
161
- try {
162
- const auth = await requireAuth(request);
163
- if (auth.error)
164
- return auth.error;
165
- const roleErr = requireRole(auth.session.role, ADMIN_ROLES);
166
- if (roleErr)
167
- return roleErr;
168
- const d = db();
169
- if (!hasModel(d, 'pageTemplate'))
170
- return modelNotAvailable('PageTemplate');
171
- const existing = await d.pageTemplate.findUnique({ where: { id: params.id } });
172
- if (!existing)
173
- return errorResponse('Template not found', 404);
174
- if (existing.builtIn)
175
- return errorResponse('Cannot update built-in templates', 403);
176
- const body = (await request.json());
177
- const update = {};
178
- if (body.name !== undefined)
179
- update.name = body.name;
180
- if (body.description !== undefined)
181
- update.description = body.description;
182
- if (body.thumbnail !== undefined)
183
- update.thumbnail = body.thumbnail;
184
- if (body.category !== undefined) {
185
- const validCategories = ['landing', 'content', 'utility'];
186
- if (!validCategories.includes(body.category)) {
187
- return errorResponse('category must be landing, content, or utility', 400);
188
- }
189
- update.category = body.category;
190
- }
191
- if (body.tree !== undefined) {
192
- const validation = validateTree(body.tree);
193
- if (!validation.valid) {
194
- return errorResponse(`Invalid tree: ${validation.errors.join('; ')}`, 400);
195
- }
196
- update.tree = body.tree;
197
- }
198
- const template = await d.pageTemplate.update({
199
- where: { id: params.id },
200
- data: update,
201
- });
202
- await logEvent({
203
- event: 'settings_changed',
204
- userId: auth.session.userId,
205
- details: { action: 'page_template_updated', templateId: template.id, name: template.name },
206
- });
207
- return json({ data: template });
208
- }
209
- catch (err) {
210
- return internalError(err, 'page-templates update');
211
- }
212
- });
213
- router.delete('/page-templates/:id', async (request, params) => {
214
- try {
215
- const auth = await requireAuth(request);
216
- if (auth.error)
217
- return auth.error;
218
- const roleErr = requireRole(auth.session.role, ADMIN_ROLES);
219
- if (roleErr)
220
- return roleErr;
221
- const d = db();
222
- if (!hasModel(d, 'pageTemplate'))
223
- return modelNotAvailable('PageTemplate');
224
- const existing = await d.pageTemplate.findUnique({ where: { id: params.id } });
225
- if (!existing)
226
- return errorResponse('Template not found', 404);
227
- if (existing.builtIn)
228
- return errorResponse('Cannot delete built-in templates', 403);
229
- await d.pageTemplate.delete({ where: { id: params.id } });
230
- await logEvent({
231
- event: 'settings_changed',
232
- userId: auth.session.userId,
233
- details: { action: 'page_template_deleted', templateId: existing.id, name: existing.name },
234
- });
235
- return json({ data: { deleted: true } });
236
- }
237
- catch (err) {
238
- return internalError(err, 'page-templates delete');
239
- }
240
- });
241
- router.post('/page-templates/seed', async (request) => {
242
- try {
243
- const auth = await requireAuth(request);
244
- if (auth.error)
245
- return auth.error;
246
- const roleErr = requireRole(auth.session.role, ADMIN_ROLES);
247
- if (roleErr)
248
- return roleErr;
249
- const d = db();
250
- if (!hasModel(d, 'pageTemplate'))
251
- return modelNotAvailable('PageTemplate');
252
- await seedBuiltInTemplates(d);
253
- await logEvent({
254
- event: 'settings_changed',
255
- userId: auth.session.userId,
256
- details: { action: 'page_templates_seeded' },
257
- });
258
- return json({ data: { seeded: Object.keys(BUILT_IN_TEMPLATES).length } });
259
- }
260
- catch (err) {
261
- return internalError(err, 'page-templates seed');
262
- }
263
- });
264
- }
265
- //# sourceMappingURL=page-templates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-templates.js","sourceRoot":"","sources":["../../../src/api/routes/page-templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EACL,IAAI,EACJ,aAAa,EACb,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAE5B,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,EAAE,GAAG,SAAS,CAAA;IACpB,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E,KAAK,UAAU,oBAAoB,CAAC,CAAM;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC1B,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE;gBAC/B,MAAM,EAAE;oBACN,EAAE,EAAE,WAAW,GAAG,EAAE;oBACpB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAW;oBAC1B,OAAO,EAAE,IAAI;iBACd;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAW;iBAC3B;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAC3D,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAE3B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;YACd,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC;gBAAE,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAA;YAE1E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;YACpD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACjD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAErD,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YACvE,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAA;YAC/B,CAAC;YAED,MAAM,KAAK,GAA4B,EAAE,CAAA;YACzC,IAAI,QAAQ;gBAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAEvC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC9C,KAAK;gBACL,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;aACtD,CAAC,CAAA;YAEF,sEAAsE;YACtE,uEAAuE;YACvE,sEAAsE;YACtE,uEAAuE;YACvE,iCAAiC;YACjC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAA;gBAClF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAA;gBACrE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAA;gBACjD,IAAI,OAAO;oBAAE,eAAe,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;gBACzD,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBAC5E,SAAS,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;oBAChC,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,GAAG,CAAA;oBACvE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,GAAG,CAAA;oBACvE,OAAO,EAAE,GAAG,EAAE,CAAA;gBAChB,CAAC,CAAC,CAAA;gBACF,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBAC3C,GAAG,CAAC;oBACJ,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpC,cAAc,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI;iBAClD,CAAC,CAAC,CAAA;gBACH,OAAO,IAAI,CAAC;oBACV,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE;wBACV,UAAU;wBACV,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;wBAC9C,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;qBAClD;iBACF,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;QAClD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAC3D,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAE3B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;YACd,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC;gBAAE,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAA;YAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAG,EAAE,EAAE,CAAC,CAAA;YAC/E,IAAI,CAAC,QAAQ;gBAAE,OAAO,aAAa,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;YAE9D,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAC3D,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAE3B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;YACd,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC;gBAAE,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAA;YAE1E,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAA;YAC9D,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,aAAa,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;YAC7D,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,aAAa,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;YAE7D,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,aAAa,CAAC,iBAAiB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YAC5E,CAAC;YAED,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;YACzD,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAmB,IAAI,SAAS,CAAA;YACvD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxC,OAAO,aAAa,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAA;YAC5E,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC3C,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,IAAc;oBACzB,WAAW,EAAG,IAAI,CAAC,WAAsB,IAAI,IAAI;oBACjD,QAAQ;oBACR,IAAI,EAAE,IAAI,CAAC,IAAW;oBACtB,SAAS,EAAG,IAAI,CAAC,SAAoB,IAAI,IAAI;oBAC7C,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAA;YAEF,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;aAC3F,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAA;QACpD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAC3D,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAE3B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;YACd,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC;gBAAE,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAA;YAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAG,EAAE,EAAE,CAAC,CAAA;YAC/E,IAAI,CAAC,QAAQ;gBAAE,OAAO,aAAa,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;YAC9D,IAAI,QAAQ,CAAC,OAAO;gBAAE,OAAO,aAAa,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;YAEnF,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAA;YAC9D,MAAM,MAAM,GAA4B,EAAE,CAAA;YAE1C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACpD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YACzE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;gBAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YAEnE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;gBACzD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAkB,CAAC,EAAE,CAAC;oBACvD,OAAO,aAAa,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAA;gBAC5E,CAAC;gBACD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YACjC,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,aAAa,CAAC,iBAAiB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBAC5E,CAAC;gBACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACzB,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC3C,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAG,EAAE;gBACzB,IAAI,EAAE,MAAM;aACb,CAAC,CAAA;YAEF,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;aAC3F,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAA;QACpD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAC3D,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAE3B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;YACd,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC;gBAAE,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAA;YAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAG,EAAE,EAAE,CAAC,CAAA;YAC/E,IAAI,CAAC,QAAQ;gBAAE,OAAO,aAAa,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;YAC9D,IAAI,QAAQ,CAAC,OAAO;gBAAE,OAAO,aAAa,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;YAEnF,MAAM,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAG,EAAE,EAAE,CAAC,CAAA;YAE1D,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;aAC3F,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAA;QACpD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACpD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAC3D,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAE3B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;YACd,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC;gBAAE,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAA;YAE1E,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAA;YAE7B,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE;aAC7C,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;QAClD,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,20 +0,0 @@
1
- import type { PageNode } from './types.js';
2
- export interface A11yIssue {
3
- id: string;
4
- blockId: string;
5
- type: 'missing-alt' | 'heading-skip' | 'missing-label' | 'missing-aria' | 'small-touch-target';
6
- severity: 'error' | 'warning';
7
- message: string;
8
- autoFixable: boolean;
9
- }
10
- export interface A11yReport {
11
- issues: A11yIssue[];
12
- fixedCount: number;
13
- remainingCount: number;
14
- }
15
- export declare function auditAccessibility(tree: PageNode): A11yIssue[];
16
- export declare function fixAccessibility(tree: PageNode): {
17
- tree: PageNode;
18
- report: A11yReport;
19
- };
20
- //# sourceMappingURL=a11y-fix.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a11y-fix.d.ts","sourceRoot":"","sources":["../../src/page-builder/a11y-fix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,YAAY,CAAA;AAKlE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,oBAAoB,CAAA;IAC9F,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;CACvB;AAgCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,CAqG9D;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAiEvF"}
@@ -1,182 +0,0 @@
1
- import { hasChildren } from './types.js';
2
- // ─── Internal Helpers ────────────────────────────────────────────────
3
- let issueCounter = 0;
4
- function nextIssueId() {
5
- return `a11y_${++issueCounter}`;
6
- }
7
- function collectBlocks(node, blocks) {
8
- if (node.type === 'block') {
9
- blocks.push(node);
10
- return;
11
- }
12
- if (hasChildren(node)) {
13
- for (const child of node.children) {
14
- collectBlocks(child, blocks);
15
- }
16
- }
17
- }
18
- function getHeadingLevel(block) {
19
- if (block.settings.blockType !== 'text')
20
- return null;
21
- const level = block.data.headingLevel;
22
- if (!level)
23
- return null;
24
- const match = /^h(\d)$/.exec(level);
25
- return match ? parseInt(match[1], 10) : null;
26
- }
27
- // ─── Audit ───────────────────────────────────────────────────────────
28
- export function auditAccessibility(tree) {
29
- issueCounter = 0;
30
- const blocks = [];
31
- collectBlocks(tree, blocks);
32
- const issues = [];
33
- let lastHeadingLevel = 1;
34
- for (const block of blocks) {
35
- const blockType = block.settings.blockType;
36
- if (blockType === 'image') {
37
- if (!block.data.alt) {
38
- issues.push({
39
- id: nextIssueId(),
40
- blockId: block.id,
41
- type: 'missing-alt',
42
- severity: 'error',
43
- message: 'Image block is missing alt text',
44
- autoFixable: false,
45
- });
46
- }
47
- }
48
- if (blockType === 'hero') {
49
- if (block.data.image && !block.data.imageAlt && !block.data.alt) {
50
- issues.push({
51
- id: nextIssueId(),
52
- blockId: block.id,
53
- type: 'missing-alt',
54
- severity: 'error',
55
- message: 'Hero block image is missing alt text',
56
- autoFixable: false,
57
- });
58
- }
59
- }
60
- if (blockType === 'gallery') {
61
- const images = block.data.images;
62
- if (images) {
63
- for (const img of images) {
64
- if (!img.alt) {
65
- issues.push({
66
- id: nextIssueId(),
67
- blockId: block.id,
68
- type: 'missing-alt',
69
- severity: 'error',
70
- message: 'Gallery image is missing alt text',
71
- autoFixable: false,
72
- });
73
- }
74
- }
75
- }
76
- }
77
- if (blockType === 'text') {
78
- const level = getHeadingLevel(block);
79
- if (level !== null) {
80
- if (level > lastHeadingLevel + 1) {
81
- issues.push({
82
- id: nextIssueId(),
83
- blockId: block.id,
84
- type: 'heading-skip',
85
- severity: 'warning',
86
- message: `Heading level skips from h${lastHeadingLevel} to h${level}`,
87
- autoFixable: true,
88
- });
89
- }
90
- lastHeadingLevel = level;
91
- }
92
- }
93
- if (blockType === 'form') {
94
- if (!block.data.formId) {
95
- issues.push({
96
- id: nextIssueId(),
97
- blockId: block.id,
98
- type: 'missing-label',
99
- severity: 'warning',
100
- message: 'Form block is missing a linked form with field labels',
101
- autoFixable: false,
102
- });
103
- }
104
- }
105
- if (blockType === 'cta') {
106
- const buttonText = block.data.buttonText;
107
- if (!buttonText) {
108
- issues.push({
109
- id: nextIssueId(),
110
- blockId: block.id,
111
- type: 'missing-aria',
112
- severity: 'warning',
113
- message: 'CTA block is missing button text for aria-label',
114
- autoFixable: true,
115
- });
116
- }
117
- }
118
- }
119
- return issues;
120
- }
121
- // ─── Fix ─────────────────────────────────────────────────────────────
122
- function deepClone(obj) {
123
- return JSON.parse(JSON.stringify(obj));
124
- }
125
- export function fixAccessibility(tree) {
126
- const fixedTree = deepClone(tree);
127
- const blocks = [];
128
- collectBlocks(fixedTree, blocks);
129
- const issues = auditAccessibility(tree);
130
- let fixedCount = 0;
131
- let lastHeadingLevel = 1;
132
- for (const block of blocks) {
133
- const blockType = block.settings.blockType;
134
- if (blockType === 'image' && !block.data.alt) {
135
- block.data.alt = `Image in ${blockType} section`;
136
- fixedCount++;
137
- }
138
- if (blockType === 'hero' && block.data.image && !block.data.imageAlt && !block.data.alt) {
139
- block.data.alt = 'Image in hero section';
140
- fixedCount++;
141
- }
142
- if (blockType === 'gallery') {
143
- const images = block.data.images;
144
- if (images) {
145
- for (const img of images) {
146
- if (!img.alt) {
147
- img.alt = 'Image in gallery section';
148
- fixedCount++;
149
- }
150
- }
151
- }
152
- }
153
- if (blockType === 'text') {
154
- const level = getHeadingLevel(block);
155
- if (level !== null) {
156
- if (level > lastHeadingLevel + 1) {
157
- const corrected = lastHeadingLevel + 1;
158
- block.data.headingLevel = `h${corrected}`;
159
- lastHeadingLevel = corrected;
160
- fixedCount++;
161
- }
162
- else {
163
- lastHeadingLevel = level;
164
- }
165
- }
166
- }
167
- if (blockType === 'cta' && !block.data.buttonText) {
168
- block.data.ariaLabel = block.data.heading || 'Call to action';
169
- fixedCount++;
170
- }
171
- }
172
- const remainingCount = issues.length - fixedCount;
173
- return {
174
- tree: fixedTree,
175
- report: {
176
- issues,
177
- fixedCount,
178
- remainingCount: remainingCount < 0 ? 0 : remainingCount,
179
- },
180
- };
181
- }
182
- //# sourceMappingURL=a11y-fix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a11y-fix.js","sourceRoot":"","sources":["../../src/page-builder/a11y-fix.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import type { PageNode } from './types.js';
2
- export type GenerationStep = 'structure' | 'content' | 'seo' | 'accessibility';
3
- export interface GenerationContext {
4
- prompt: string;
5
- template?: string;
6
- context?: {
7
- businessName?: string;
8
- phone?: string;
9
- address?: string;
10
- services?: string[];
11
- industry?: string;
12
- [key: string]: unknown;
13
- };
14
- steps: GenerationStep[];
15
- tone?: 'professional' | 'casual' | 'friendly' | 'technical' | 'luxury';
16
- }
17
- export interface StepResult {
18
- step: GenerationStep;
19
- tree: PageNode;
20
- metadata: {
21
- tokensUsed: number;
22
- durationMs: number;
23
- changes: string[];
24
- };
25
- }
26
- export interface GenerationResult {
27
- tree: PageNode;
28
- steps: StepResult[];
29
- totalTokensUsed: number;
30
- totalDurationMs: number;
31
- }
32
- export interface GenerationProgress {
33
- currentStep: GenerationStep;
34
- completedSteps: GenerationStep[];
35
- totalSteps: number;
36
- message: string;
37
- }
38
- export declare const PAGE_TREE_SCHEMA_REFERENCE: string;
39
- export declare function buildStructurePrompt(ctx: GenerationContext, templateTree?: PageNode): string;
40
- export declare function buildContentPrompt(ctx: GenerationContext, tree: PageNode): string;
41
- export declare function buildSEOPrompt(ctx: GenerationContext, tree: PageNode): string;
42
- export declare function buildAccessibilityPrompt(tree: PageNode): string;
43
- //# sourceMappingURL=ai-pipeline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-pipeline.d.ts","sourceRoot":"","sources":["../../src/page-builder/ai-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAI1C,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,eAAe,CAAA;AAE9E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAA;CACvE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;CACF;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAA;IAC3B,cAAc,EAAE,cAAc,EAAE,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAID,eAAO,MAAM,0BAA0B,QA4C/B,CAAA;AAuBR,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,CAyB5F;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAuBjF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAyB7E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmB/D"}