@aglyn/plugins-ai 1.0.0-beta.233 → 1.0.0-beta.234
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 +17 -17
- package/src/lib/components/ai-job-links.d.ts +6 -0
- package/src/lib/components/ai-job-links.js +9 -0
- package/src/lib/components/ai-job-links.js.map +1 -1
- package/src/lib/components/ai-site-build-page.component.js +41 -3
- package/src/lib/components/ai-site-build-page.component.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.js +91 -8
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/jobs/ai-job-admission.d.ts +2 -1
- package/src/lib/jobs/ai-job-admission.js.map +1 -1
- package/src/lib/jobs/ai-job-email-step.d.ts +39 -0
- package/src/lib/jobs/ai-job-email-step.js +116 -5
- package/src/lib/jobs/ai-job-email-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +3 -0
- package/src/lib/jobs/ai-job-layout-language.js +3 -1
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-site-pages.d.ts +2 -0
- package/src/lib/jobs/ai-job-layout-site-pages.js +23 -11
- package/src/lib/jobs/ai-job-layout-site-pages.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.js +3 -2
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +16 -0
- package/src/lib/jobs/ai-job-page-language.js +35 -6
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.d.ts +3 -0
- package/src/lib/jobs/ai-job-page-step.js +18 -4
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +34 -0
- package/src/lib/jobs/ai-job-plan-step.js +106 -14
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-content.d.ts +6 -6
- package/src/lib/jobs/ai-job-site-content.js +6 -12
- package/src/lib/jobs/ai-job-site-content.js.map +1 -1
- package/src/lib/jobs/ai-job-site-step.d.ts +11 -0
- package/src/lib/jobs/ai-job-site-step.js +96 -44
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs.d.ts +8 -4
- package/src/lib/jobs/ai-jobs.js +19 -2
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +98 -0
- package/src/lib/jobs/ai-layout-stock-photos.js +248 -0
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -0
- package/src/lib/jobs/ai-site-publish.d.ts +11 -0
- package/src/lib/jobs/ai-site-publish.js +31 -1
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/fixtures/ai-juniper-portfolio-page-recording.d.ts +151 -0
- package/src/lib/jobs/fixtures/ai-juniper-portfolio-page-recording.js +183 -0
- package/src/lib/jobs/fixtures/ai-juniper-portfolio-page-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-slow-roads-site-plan-recording.d.ts +27 -0
- package/src/lib/jobs/fixtures/ai-slow-roads-site-plan-recording.js +192 -0
- package/src/lib/jobs/fixtures/ai-slow-roads-site-plan-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-yoga-site-plan-recording.d.ts +27 -0
- package/src/lib/jobs/fixtures/ai-yoga-site-plan-recording.js +222 -0
- package/src/lib/jobs/fixtures/ai-yoga-site-plan-recording.js.map +1 -0
- package/src/lib/layout-language/ai-layout-compiler.d.ts +29 -0
- package/src/lib/layout-language/ai-layout-compiler.js +698 -12
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-design.d.ts +107 -0
- package/src/lib/layout-language/ai-layout-design.js +197 -0
- package/src/lib/layout-language/ai-layout-design.js.map +1 -0
- package/src/lib/layout-language/ai-layout-frame.d.ts +6 -0
- package/src/lib/layout-language/ai-layout-frame.js +22 -6
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-language.d.ts +2 -0
- package/src/lib/layout-language/ai-layout-language.js +15 -1
- package/src/lib/layout-language/ai-layout-language.js.map +1 -1
- package/src/lib/layout-language/ai-layout-links.d.ts +11 -0
- package/src/lib/layout-language/ai-layout-links.js +4 -0
- package/src/lib/layout-language/ai-layout-links.js.map +1 -1
- package/src/lib/layout-language/ai-layout-pictures.d.ts +11 -5
- package/src/lib/layout-language/ai-layout-pictures.js +80 -17
- package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
- package/src/lib/model/ai-job-notice.d.ts +9 -1
- package/src/lib/model/ai-job-notice.js +23 -0
- package/src/lib/model/ai-job-notice.js.map +1 -1
- package/src/lib/model/ai-plan-capabilities.d.ts +7 -0
- package/src/lib/model/ai-plan-capabilities.js.map +1 -1
- package/src/lib/model/ai-site-build-progress.d.ts +12 -2
- package/src/lib/model/ai-site-build-progress.js +78 -4
- package/src/lib/model/ai-site-build-progress.js.map +1 -1
- package/src/lib/model/ai-site-job.d.ts +209 -22
- package/src/lib/model/ai-site-job.js +247 -20
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-kinds.js +6 -1
- package/src/lib/model/ai-site-kinds.js.map +1 -1
- package/src/lib/model/ai-site-look.d.ts +21 -0
- package/src/lib/model/ai-site-look.js +63 -14
- package/src/lib/model/ai-site-look.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +32 -1
- package/src/lib/runtime/ai-doctrine-validators.js +227 -4
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.js +5 -3
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-palette.generated.d.ts +2 -0
- package/src/lib/runtime/ai-palette.generated.js +18 -2
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/server/ai-jobs-resume.js.map +1 -1
- package/src/lib/server/ai-jobs-route.js +15 -3
- package/src/lib/server/ai-jobs-route.js.map +1 -1
- package/src/lib/server/assist-edit.js +5 -2
- package/src/lib/server/assist-edit.js.map +1 -1
- package/src/lib/usage/free-ai-credits-left.d.ts +54 -0
- package/src/lib/usage/free-ai-credits-left.js +62 -0
- package/src/lib/usage/free-ai-credits-left.js.map +1 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /**
|
|
17
|
+
* RECORDED, NOT GOLDEN: the first plan answer of the local paid (Pro) blog
|
|
18
|
+
* guided start of 2026-10-08, "Slow Roads, a personal travel blog about long
|
|
19
|
+
* train journeys through Europe, written by one person" (job cvS0nF0rWP,
|
|
20
|
+
* claude-sonnet-5-5), copied by hand from its replay recording (AGL-3660).
|
|
21
|
+
* Its start wrote three posts at /blog, and this plan also planned an
|
|
22
|
+
* "Articles" page of featured cards at /articles, which the header linked
|
|
23
|
+
* while it never linked the blog.
|
|
24
|
+
*/ export const AI_SLOW_ROADS_SITE_PLAN_FIRST_ANSWER = {
|
|
25
|
+
reuse: [],
|
|
26
|
+
create: [
|
|
27
|
+
{
|
|
28
|
+
kind: 'layout',
|
|
29
|
+
name: 'Slow Roads site layout',
|
|
30
|
+
why: 'The site has no layouts, and the header, navigation and footer must live in one shared layout rather than on each page.',
|
|
31
|
+
duplicateOf: null,
|
|
32
|
+
fields: [
|
|
33
|
+
'header',
|
|
34
|
+
'nav',
|
|
35
|
+
'main',
|
|
36
|
+
'footer'
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
kind: 'form',
|
|
41
|
+
name: 'Reader contact form',
|
|
42
|
+
why: 'The site has no saved forms, and the Contact page needs one to let readers ask to be contacted.',
|
|
43
|
+
duplicateOf: null,
|
|
44
|
+
fields: [
|
|
45
|
+
'name',
|
|
46
|
+
'email',
|
|
47
|
+
'topic',
|
|
48
|
+
'favorite route or journey',
|
|
49
|
+
'message',
|
|
50
|
+
'consent to be contacted and subscribe to new posts'
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
screens: [
|
|
55
|
+
{
|
|
56
|
+
title: 'Home',
|
|
57
|
+
slug: '/',
|
|
58
|
+
layout: 'new:Slow Roads site layout',
|
|
59
|
+
template: null,
|
|
60
|
+
duplicateOf: null,
|
|
61
|
+
nav: true,
|
|
62
|
+
seoTitle: 'Slow Roads | A travel blog about long train journeys',
|
|
63
|
+
seoDescription: 'Slow Roads is a personal travel blog about long train journeys through Europe, for readers who love slow travel by train.',
|
|
64
|
+
record: null,
|
|
65
|
+
sections: [
|
|
66
|
+
{
|
|
67
|
+
name: 'Hero with blog tagline and read-the-journeys button',
|
|
68
|
+
uses: [],
|
|
69
|
+
items: 0
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'Latest journeys featured cards',
|
|
73
|
+
uses: [],
|
|
74
|
+
items: 3
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'Why travel slowly by train',
|
|
78
|
+
uses: [],
|
|
79
|
+
items: 3
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'About the writer teaser',
|
|
83
|
+
uses: [],
|
|
84
|
+
items: 0
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Reader kind words',
|
|
88
|
+
uses: [],
|
|
89
|
+
items: 3
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'Closing call to action to subscribe or get in touch',
|
|
93
|
+
uses: [],
|
|
94
|
+
items: 0
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
title: 'Articles',
|
|
100
|
+
slug: '/articles',
|
|
101
|
+
layout: 'new:Slow Roads site layout',
|
|
102
|
+
template: null,
|
|
103
|
+
duplicateOf: null,
|
|
104
|
+
nav: true,
|
|
105
|
+
seoTitle: 'Articles | Slow Roads',
|
|
106
|
+
seoDescription: 'Read stories and notes from long train journeys through Europe: routes, carriages, stations and the people met along the way.',
|
|
107
|
+
record: null,
|
|
108
|
+
sections: [
|
|
109
|
+
{
|
|
110
|
+
name: 'Page introduction',
|
|
111
|
+
uses: [],
|
|
112
|
+
items: 0
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'Featured article cards',
|
|
116
|
+
uses: [],
|
|
117
|
+
items: 4
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'Note that new posts are added over time, with a link to get in touch',
|
|
121
|
+
uses: [],
|
|
122
|
+
items: 0
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'About',
|
|
128
|
+
slug: '/about',
|
|
129
|
+
layout: 'new:Slow Roads site layout',
|
|
130
|
+
template: null,
|
|
131
|
+
duplicateOf: null,
|
|
132
|
+
nav: true,
|
|
133
|
+
seoTitle: 'About | Slow Roads',
|
|
134
|
+
seoDescription: 'Meet the writer behind Slow Roads and learn why long train journeys through Europe are worth taking slowly.',
|
|
135
|
+
record: null,
|
|
136
|
+
sections: [
|
|
137
|
+
{
|
|
138
|
+
name: 'About heading and intro',
|
|
139
|
+
uses: [],
|
|
140
|
+
items: 0
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: "The writer's story",
|
|
144
|
+
uses: [],
|
|
145
|
+
items: 0
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: 'How I travel and write',
|
|
149
|
+
uses: [],
|
|
150
|
+
items: 3
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: 'Call to action to read the articles',
|
|
154
|
+
uses: [],
|
|
155
|
+
items: 0
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
title: 'Contact',
|
|
161
|
+
slug: '/contact',
|
|
162
|
+
layout: 'new:Slow Roads site layout',
|
|
163
|
+
template: null,
|
|
164
|
+
duplicateOf: null,
|
|
165
|
+
nav: true,
|
|
166
|
+
seoTitle: 'Contact and subscribe | Slow Roads',
|
|
167
|
+
seoDescription: 'Get in touch with Slow Roads or ask to hear about new train journeys. Share a route, a question or a note for the writer.',
|
|
168
|
+
record: null,
|
|
169
|
+
sections: [
|
|
170
|
+
{
|
|
171
|
+
name: 'Contact introduction',
|
|
172
|
+
uses: [],
|
|
173
|
+
items: 0
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'Contact form',
|
|
177
|
+
uses: [
|
|
178
|
+
'new:Reader contact form'
|
|
179
|
+
],
|
|
180
|
+
items: 0
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'What to expect after you write',
|
|
184
|
+
uses: [],
|
|
185
|
+
items: 0
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
]
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
//# sourceMappingURL=ai-slow-roads-site-plan-recording.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-slow-roads-site-plan-recording.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AiBuildPlan } from '../../model/ai-build-plan'\n\n/**\n * RECORDED, NOT GOLDEN: the first plan answer of the local paid (Pro) blog\n * guided start of 2026-10-08, \"Slow Roads, a personal travel blog about long\n * train journeys through Europe, written by one person\" (job cvS0nF0rWP,\n * claude-sonnet-5-5), copied by hand from its replay recording (AGL-3660).\n * Its start wrote three posts at /blog, and this plan also planned an\n * \"Articles\" page of featured cards at /articles, which the header linked\n * while it never linked the blog.\n */\nexport const AI_SLOW_ROADS_SITE_PLAN_FIRST_ANSWER: AiBuildPlan = {\n reuse: [],\n create: [\n {\n kind: 'layout',\n name: 'Slow Roads site layout',\n why: 'The site has no layouts, and the header, navigation and footer must live in one shared layout rather than on each page.',\n duplicateOf: null,\n fields: ['header', 'nav', 'main', 'footer'],\n },\n {\n kind: 'form',\n name: 'Reader contact form',\n why: 'The site has no saved forms, and the Contact page needs one to let readers ask to be contacted.',\n duplicateOf: null,\n fields: [\n 'name',\n 'email',\n 'topic',\n 'favorite route or journey',\n 'message',\n 'consent to be contacted and subscribe to new posts',\n ],\n },\n ],\n screens: [\n {\n title: 'Home',\n slug: '/',\n layout: 'new:Slow Roads site layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'Slow Roads | A travel blog about long train journeys',\n seoDescription:\n 'Slow Roads is a personal travel blog about long train journeys through Europe, for readers who love slow travel by train.',\n record: null,\n sections: [\n { name: 'Hero with blog tagline and read-the-journeys button', uses: [], items: 0 },\n { name: 'Latest journeys featured cards', uses: [], items: 3 },\n { name: 'Why travel slowly by train', uses: [], items: 3 },\n { name: 'About the writer teaser', uses: [], items: 0 },\n { name: 'Reader kind words', uses: [], items: 3 },\n { name: 'Closing call to action to subscribe or get in touch', uses: [], items: 0 },\n ],\n },\n {\n title: 'Articles',\n slug: '/articles',\n layout: 'new:Slow Roads site layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'Articles | Slow Roads',\n seoDescription:\n 'Read stories and notes from long train journeys through Europe: routes, carriages, stations and the people met along the way.',\n record: null,\n sections: [\n { name: 'Page introduction', uses: [], items: 0 },\n { name: 'Featured article cards', uses: [], items: 4 },\n { name: 'Note that new posts are added over time, with a link to get in touch', uses: [], items: 0 },\n ],\n },\n {\n title: 'About',\n slug: '/about',\n layout: 'new:Slow Roads site layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'About | Slow Roads',\n seoDescription:\n 'Meet the writer behind Slow Roads and learn why long train journeys through Europe are worth taking slowly.',\n record: null,\n sections: [\n { name: 'About heading and intro', uses: [], items: 0 },\n { name: \"The writer's story\", uses: [], items: 0 },\n { name: 'How I travel and write', uses: [], items: 3 },\n { name: 'Call to action to read the articles', uses: [], items: 0 },\n ],\n },\n {\n title: 'Contact',\n slug: '/contact',\n layout: 'new:Slow Roads site layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'Contact and subscribe | Slow Roads',\n seoDescription:\n 'Get in touch with Slow Roads or ask to hear about new train journeys. Share a route, a question or a note for the writer.',\n record: null,\n sections: [\n { name: 'Contact introduction', uses: [], items: 0 },\n { name: 'Contact form', uses: ['new:Reader contact form'], items: 0 },\n { name: 'What to expect after you write', uses: [], items: 0 },\n ],\n },\n ],\n}\n"],"names":["AI_SLOW_ROADS_SITE_PLAN_FIRST_ANSWER","reuse","create","kind","name","why","duplicateOf","fields","screens","title","slug","layout","template","nav","seoTitle","seoDescription","record","sections","uses","items"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAID;;;;;;;;CAQC,GACD,OAAO,MAAMA,uCAAoD;IAC/DC,OAAO,EAAE;IACTC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,KAAK;YACLC,aAAa;YACbC,QAAQ;gBAAC;gBAAU;gBAAO;gBAAQ;aAAS;QAC7C;QACA;YACEJ,MAAM;YACNC,MAAM;YACNC,KAAK;YACLC,aAAa;YACbC,QAAQ;gBACN;gBACA;gBACA;gBACA;gBACA;gBACA;aACD;QACH;KACD;IACDC,SAAS;QACP;YACEC,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAAuDc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAClF;oBAAEf,MAAM;oBAAkCc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAC7D;oBAAEf,MAAM;oBAA8Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACzD;oBAAEf,MAAM;oBAA2Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACtD;oBAAEf,MAAM;oBAAqBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAChD;oBAAEf,MAAM;oBAAuDc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;aACnF;QACH;QACA;YACEV,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAAqBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAChD;oBAAEf,MAAM;oBAA0Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACrD;oBAAEf,MAAM;oBAAwEc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;aACpG;QACH;QACA;YACEV,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAA2Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACtD;oBAAEf,MAAM;oBAAsBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACjD;oBAAEf,MAAM;oBAA0Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACrD;oBAAEf,MAAM;oBAAuCc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;aACnE;QACH;QACA;YACEV,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAAwBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACnD;oBAAEf,MAAM;oBAAgBc,MAAM;wBAAC;qBAA0B;oBAAEC,OAAO;gBAAE;gBACpE;oBAAEf,MAAM;oBAAkCc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;aAC9D;QACH;KACD;AACH,EAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import type { AiBuildPlan } from '../../model/ai-build-plan';
|
|
18
|
+
/**
|
|
19
|
+
* RECORDED, NOT GOLDEN: the two plan answers the local Free yoga guided start
|
|
20
|
+
* of 2026-10-08 (job 5uOa6G7ITh, claude-haiku-4-5, on an empty site) gave,
|
|
21
|
+
* copied by hand from its replay recording (AGL-3660). The first planned a
|
|
22
|
+
* home of 6 and a Classes page of 4, ten sections against the wall's 8; told
|
|
23
|
+
* only "plan at most 8", the redo cut the HOME to 4 and kept Classes at 2.
|
|
24
|
+
*/
|
|
25
|
+
export declare const AI_YOGA_SITE_PLAN_FIRST_ANSWER: AiBuildPlan;
|
|
26
|
+
/** The redo the live run kept: a home of 4 beside a Classes page of 2. */
|
|
27
|
+
export declare const AI_YOGA_SITE_PLAN_REDO_ANSWER: AiBuildPlan;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /**
|
|
17
|
+
* RECORDED, NOT GOLDEN: the two plan answers the local Free yoga guided start
|
|
18
|
+
* of 2026-10-08 (job 5uOa6G7ITh, claude-haiku-4-5, on an empty site) gave,
|
|
19
|
+
* copied by hand from its replay recording (AGL-3660). The first planned a
|
|
20
|
+
* home of 6 and a Classes page of 4, ten sections against the wall's 8; told
|
|
21
|
+
* only "plan at most 8", the redo cut the HOME to 4 and kept Classes at 2.
|
|
22
|
+
*/ export const AI_YOGA_SITE_PLAN_FIRST_ANSWER = {
|
|
23
|
+
reuse: [],
|
|
24
|
+
create: [
|
|
25
|
+
{
|
|
26
|
+
kind: 'layout',
|
|
27
|
+
name: 'Main Layout',
|
|
28
|
+
why: 'The site needs a consistent layout with header, navigation, and footer for all pages.',
|
|
29
|
+
duplicateOf: null,
|
|
30
|
+
fields: [
|
|
31
|
+
'regions: header, nav, main, footer'
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
kind: 'form',
|
|
36
|
+
name: 'Contact Form',
|
|
37
|
+
why: 'Beginners nervous about their first class need a low-pressure way to ask questions; the form asks for their name, email, experience level, and specific concerns or questions.',
|
|
38
|
+
duplicateOf: null,
|
|
39
|
+
fields: [
|
|
40
|
+
'name',
|
|
41
|
+
'email',
|
|
42
|
+
'experience-level',
|
|
43
|
+
'concerns',
|
|
44
|
+
'consent'
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
screens: [
|
|
49
|
+
{
|
|
50
|
+
title: 'Home',
|
|
51
|
+
slug: '/',
|
|
52
|
+
layout: 'new:Main Layout',
|
|
53
|
+
template: null,
|
|
54
|
+
duplicateOf: null,
|
|
55
|
+
nav: true,
|
|
56
|
+
seoTitle: 'Still Point Yoga | Welcoming Drop-In Yoga Classes',
|
|
57
|
+
seoDescription: 'Beginner-friendly yoga studio offering drop-in classes for all levels. Start your yoga journey at Still Point Yoga.',
|
|
58
|
+
record: null,
|
|
59
|
+
sections: [
|
|
60
|
+
{
|
|
61
|
+
name: 'Hero',
|
|
62
|
+
uses: [],
|
|
63
|
+
items: 0
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'What is Yoga & Mindfulness',
|
|
67
|
+
uses: [],
|
|
68
|
+
items: 0
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Our Drop-In Classes',
|
|
72
|
+
uses: [],
|
|
73
|
+
items: 0
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'Why Beginners Choose Still Point',
|
|
77
|
+
uses: [],
|
|
78
|
+
items: 0
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'Student Stories',
|
|
82
|
+
uses: [],
|
|
83
|
+
items: 0
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'Start Your Practice',
|
|
87
|
+
uses: [
|
|
88
|
+
'new:Contact Form'
|
|
89
|
+
],
|
|
90
|
+
items: 0
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
title: 'Classes',
|
|
96
|
+
slug: '/classes',
|
|
97
|
+
layout: 'new:Main Layout',
|
|
98
|
+
template: null,
|
|
99
|
+
duplicateOf: null,
|
|
100
|
+
nav: true,
|
|
101
|
+
seoTitle: 'Yoga Classes | Still Point Yoga',
|
|
102
|
+
seoDescription: 'Drop-in yoga classes for beginners and all levels. Beginner-friendly schedules and welcoming instruction.',
|
|
103
|
+
record: null,
|
|
104
|
+
sections: [
|
|
105
|
+
{
|
|
106
|
+
name: 'Classes Hero',
|
|
107
|
+
uses: [],
|
|
108
|
+
items: 0
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'Class Schedule',
|
|
112
|
+
uses: [],
|
|
113
|
+
items: 0
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'Class Descriptions',
|
|
117
|
+
uses: [],
|
|
118
|
+
items: 0
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'Get Started',
|
|
122
|
+
uses: [
|
|
123
|
+
'new:Contact Form'
|
|
124
|
+
],
|
|
125
|
+
items: 0
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
};
|
|
131
|
+
/** The redo the live run kept: a home of 4 beside a Classes page of 2. */ export const AI_YOGA_SITE_PLAN_REDO_ANSWER = {
|
|
132
|
+
reuse: [],
|
|
133
|
+
create: [
|
|
134
|
+
{
|
|
135
|
+
kind: 'layout',
|
|
136
|
+
name: 'Main Layout',
|
|
137
|
+
why: 'A site needs a layout with header, navigation and footer for the brand.',
|
|
138
|
+
duplicateOf: null,
|
|
139
|
+
fields: [
|
|
140
|
+
'header',
|
|
141
|
+
'nav',
|
|
142
|
+
'main',
|
|
143
|
+
'footer'
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
kind: 'form',
|
|
148
|
+
name: 'Contact Form',
|
|
149
|
+
why: 'Beginners need a way to request contact; the site has no saved form.',
|
|
150
|
+
duplicateOf: null,
|
|
151
|
+
fields: [
|
|
152
|
+
'name:text',
|
|
153
|
+
'email:email',
|
|
154
|
+
'experience-level:select (Beginner/Some experience)',
|
|
155
|
+
'question:textarea',
|
|
156
|
+
'phone:tel'
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
],
|
|
160
|
+
screens: [
|
|
161
|
+
{
|
|
162
|
+
title: 'Home',
|
|
163
|
+
slug: '/',
|
|
164
|
+
layout: 'new:Main Layout',
|
|
165
|
+
template: null,
|
|
166
|
+
duplicateOf: null,
|
|
167
|
+
nav: true,
|
|
168
|
+
seoTitle: 'Still Point Yoga – Begin Your Mindfulness Journey',
|
|
169
|
+
seoDescription: 'Welcome to Still Point Yoga. Drop-in classes for beginners nervous about their first yoga class. Start with mindfulness and ease.',
|
|
170
|
+
record: null,
|
|
171
|
+
sections: [
|
|
172
|
+
{
|
|
173
|
+
name: 'Hero',
|
|
174
|
+
uses: [],
|
|
175
|
+
items: 0
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'Drop-In Classes Overview',
|
|
179
|
+
uses: [],
|
|
180
|
+
items: 0
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'Why Beginners Choose Us',
|
|
184
|
+
uses: [],
|
|
185
|
+
items: 0
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: 'Contact & Get Started',
|
|
189
|
+
uses: [
|
|
190
|
+
'new:Contact Form'
|
|
191
|
+
],
|
|
192
|
+
items: 0
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
title: 'Classes',
|
|
198
|
+
slug: '/classes',
|
|
199
|
+
layout: 'new:Main Layout',
|
|
200
|
+
template: null,
|
|
201
|
+
duplicateOf: null,
|
|
202
|
+
nav: true,
|
|
203
|
+
seoTitle: 'Yoga Classes for Beginners | Still Point Yoga',
|
|
204
|
+
seoDescription: "Explore Still Point Yoga's drop-in classes designed for beginners. Find your schedule and join a welcoming community.",
|
|
205
|
+
record: null,
|
|
206
|
+
sections: [
|
|
207
|
+
{
|
|
208
|
+
name: 'Classes Hero',
|
|
209
|
+
uses: [],
|
|
210
|
+
items: 0
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: 'Class Schedule & Descriptions',
|
|
214
|
+
uses: [],
|
|
215
|
+
items: 3
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
//# sourceMappingURL=ai-yoga-site-plan-recording.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-yoga-site-plan-recording.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AiBuildPlan } from '../../model/ai-build-plan'\n\n/**\n * RECORDED, NOT GOLDEN: the two plan answers the local Free yoga guided start\n * of 2026-10-08 (job 5uOa6G7ITh, claude-haiku-4-5, on an empty site) gave,\n * copied by hand from its replay recording (AGL-3660). The first planned a\n * home of 6 and a Classes page of 4, ten sections against the wall's 8; told\n * only \"plan at most 8\", the redo cut the HOME to 4 and kept Classes at 2.\n */\nexport const AI_YOGA_SITE_PLAN_FIRST_ANSWER: AiBuildPlan = {\n reuse: [],\n create: [\n {\n kind: 'layout',\n name: 'Main Layout',\n why: 'The site needs a consistent layout with header, navigation, and footer for all pages.',\n duplicateOf: null,\n fields: ['regions: header, nav, main, footer'],\n },\n {\n kind: 'form',\n name: 'Contact Form',\n why: 'Beginners nervous about their first class need a low-pressure way to ask questions; the form asks for their name, email, experience level, and specific concerns or questions.',\n duplicateOf: null,\n fields: ['name', 'email', 'experience-level', 'concerns', 'consent'],\n },\n ],\n screens: [\n {\n title: 'Home',\n slug: '/',\n layout: 'new:Main Layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'Still Point Yoga | Welcoming Drop-In Yoga Classes',\n seoDescription:\n 'Beginner-friendly yoga studio offering drop-in classes for all levels. Start your yoga journey at Still Point Yoga.',\n record: null,\n sections: [\n { name: 'Hero', uses: [], items: 0 },\n { name: 'What is Yoga & Mindfulness', uses: [], items: 0 },\n { name: 'Our Drop-In Classes', uses: [], items: 0 },\n { name: 'Why Beginners Choose Still Point', uses: [], items: 0 },\n { name: 'Student Stories', uses: [], items: 0 },\n { name: 'Start Your Practice', uses: ['new:Contact Form'], items: 0 },\n ],\n },\n {\n title: 'Classes',\n slug: '/classes',\n layout: 'new:Main Layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'Yoga Classes | Still Point Yoga',\n seoDescription:\n 'Drop-in yoga classes for beginners and all levels. Beginner-friendly schedules and welcoming instruction.',\n record: null,\n sections: [\n { name: 'Classes Hero', uses: [], items: 0 },\n { name: 'Class Schedule', uses: [], items: 0 },\n { name: 'Class Descriptions', uses: [], items: 0 },\n { name: 'Get Started', uses: ['new:Contact Form'], items: 0 },\n ],\n },\n ],\n}\n\n/** The redo the live run kept: a home of 4 beside a Classes page of 2. */\nexport const AI_YOGA_SITE_PLAN_REDO_ANSWER: AiBuildPlan = {\n reuse: [],\n create: [\n {\n kind: 'layout',\n name: 'Main Layout',\n why: 'A site needs a layout with header, navigation and footer for the brand.',\n duplicateOf: null,\n fields: ['header', 'nav', 'main', 'footer'],\n },\n {\n kind: 'form',\n name: 'Contact Form',\n why: 'Beginners need a way to request contact; the site has no saved form.',\n duplicateOf: null,\n fields: [\n 'name:text',\n 'email:email',\n 'experience-level:select (Beginner/Some experience)',\n 'question:textarea',\n 'phone:tel',\n ],\n },\n ],\n screens: [\n {\n title: 'Home',\n slug: '/',\n layout: 'new:Main Layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'Still Point Yoga – Begin Your Mindfulness Journey',\n seoDescription:\n 'Welcome to Still Point Yoga. Drop-in classes for beginners nervous about their first yoga class. Start with mindfulness and ease.',\n record: null,\n sections: [\n { name: 'Hero', uses: [], items: 0 },\n { name: 'Drop-In Classes Overview', uses: [], items: 0 },\n { name: 'Why Beginners Choose Us', uses: [], items: 0 },\n { name: 'Contact & Get Started', uses: ['new:Contact Form'], items: 0 },\n ],\n },\n {\n title: 'Classes',\n slug: '/classes',\n layout: 'new:Main Layout',\n template: null,\n duplicateOf: null,\n nav: true,\n seoTitle: 'Yoga Classes for Beginners | Still Point Yoga',\n seoDescription:\n \"Explore Still Point Yoga's drop-in classes designed for beginners. Find your schedule and join a welcoming community.\",\n record: null,\n sections: [\n { name: 'Classes Hero', uses: [], items: 0 },\n { name: 'Class Schedule & Descriptions', uses: [], items: 3 },\n ],\n },\n ],\n}\n"],"names":["AI_YOGA_SITE_PLAN_FIRST_ANSWER","reuse","create","kind","name","why","duplicateOf","fields","screens","title","slug","layout","template","nav","seoTitle","seoDescription","record","sections","uses","items","AI_YOGA_SITE_PLAN_REDO_ANSWER"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAID;;;;;;CAMC,GACD,OAAO,MAAMA,iCAA8C;IACzDC,OAAO,EAAE;IACTC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,KAAK;YACLC,aAAa;YACbC,QAAQ;gBAAC;aAAqC;QAChD;QACA;YACEJ,MAAM;YACNC,MAAM;YACNC,KAAK;YACLC,aAAa;YACbC,QAAQ;gBAAC;gBAAQ;gBAAS;gBAAoB;gBAAY;aAAU;QACtE;KACD;IACDC,SAAS;QACP;YACEC,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAAQc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACnC;oBAAEf,MAAM;oBAA8Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACzD;oBAAEf,MAAM;oBAAuBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAClD;oBAAEf,MAAM;oBAAoCc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAC/D;oBAAEf,MAAM;oBAAmBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAC9C;oBAAEf,MAAM;oBAAuBc,MAAM;wBAAC;qBAAmB;oBAAEC,OAAO;gBAAE;aACrE;QACH;QACA;YACEV,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAAgBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAC3C;oBAAEf,MAAM;oBAAkBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAC7C;oBAAEf,MAAM;oBAAsBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACjD;oBAAEf,MAAM;oBAAec,MAAM;wBAAC;qBAAmB;oBAAEC,OAAO;gBAAE;aAC7D;QACH;KACD;AACH,EAAC;AAED,wEAAwE,GACxE,OAAO,MAAMC,gCAA6C;IACxDnB,OAAO,EAAE;IACTC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,KAAK;YACLC,aAAa;YACbC,QAAQ;gBAAC;gBAAU;gBAAO;gBAAQ;aAAS;QAC7C;QACA;YACEJ,MAAM;YACNC,MAAM;YACNC,KAAK;YACLC,aAAa;YACbC,QAAQ;gBACN;gBACA;gBACA;gBACA;gBACA;aACD;QACH;KACD;IACDC,SAAS;QACP;YACEC,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAAQc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACnC;oBAAEf,MAAM;oBAA4Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACvD;oBAAEf,MAAM;oBAA2Bc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBACtD;oBAAEf,MAAM;oBAAyBc,MAAM;wBAAC;qBAAmB;oBAAEC,OAAO;gBAAE;aACvE;QACH;QACA;YACEV,OAAO;YACPC,MAAM;YACNC,QAAQ;YACRC,UAAU;YACVN,aAAa;YACbO,KAAK;YACLC,UAAU;YACVC,gBACE;YACFC,QAAQ;YACRC,UAAU;gBACR;oBAAEb,MAAM;oBAAgBc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;gBAC3C;oBAAEf,MAAM;oBAAiCc,MAAM,EAAE;oBAAEC,OAAO;gBAAE;aAC7D;QACH;KACD;AACH,EAAC"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { type AiIconLibraryEntry } from '../runtime/ai-icon-library';
|
|
18
18
|
import { type AiLayoutBand, type AiLayoutBlock, type AiLayoutSection, type AiLayoutSettlement } from './ai-layout-language';
|
|
19
|
+
import { type AiLayoutDesign, type AiLayoutDesignChoices, type AiLayoutGroupVariant } from './ai-layout-design';
|
|
19
20
|
import { type AiLayoutDestination, type AiLayoutLinkScope, type AiLayoutTargets } from './ai-layout-links';
|
|
20
21
|
import { AiLayoutTreeBuilder, type AiLayoutRawTree } from './ai-layout-tree';
|
|
21
22
|
/**
|
|
@@ -76,6 +77,13 @@ export interface AiLayoutCompileOptions {
|
|
|
76
77
|
* a link to a section scrolls to it. Absent, `section-<n>`.
|
|
77
78
|
*/
|
|
78
79
|
sectionIds?: readonly string[];
|
|
80
|
+
/**
|
|
81
|
+
* The site the page belongs to — its kind, its seed and whether this is its
|
|
82
|
+
* home — which the designer layer draws the page's sections for
|
|
83
|
+
* (`ai-layout-design.ts`): a photo hero, pictures beside words, work as an
|
|
84
|
+
* uneven grid of pictures. Absent, the compiler's first design.
|
|
85
|
+
*/
|
|
86
|
+
design?: AiLayoutDesign;
|
|
79
87
|
}
|
|
80
88
|
export interface AiLayoutCompiledPage {
|
|
81
89
|
tree: AiLayoutRawTree;
|
|
@@ -114,6 +122,17 @@ export interface PageScope {
|
|
|
114
122
|
formsPlaced: Set<string>;
|
|
115
123
|
/** Each section's repeated items, by the id of the element that draws each (AGL-3660). */
|
|
116
124
|
itemIds: string[][];
|
|
125
|
+
/** The site's design and the choices its seed made, where the page is drawn with one. */
|
|
126
|
+
design: {
|
|
127
|
+
input: AiLayoutDesign;
|
|
128
|
+
choices: AiLayoutDesignChoices;
|
|
129
|
+
} | null;
|
|
130
|
+
/** Stand-in pictures the design placed beside the model's own (`images`). */
|
|
131
|
+
pictures: number;
|
|
132
|
+
/** Sections of words the design set beside a picture. */
|
|
133
|
+
features: number;
|
|
134
|
+
/** The last section whose heading the design set beside its items: never two in a row. */
|
|
135
|
+
splitAt: number;
|
|
117
136
|
}
|
|
118
137
|
/** Everything one section's compile shares. */
|
|
119
138
|
export interface SectionScope {
|
|
@@ -135,6 +154,14 @@ export interface SectionScope {
|
|
|
135
154
|
link: AiLayoutLinkScope;
|
|
136
155
|
/** Like items the section may still show (rule 8), across its groups. */
|
|
137
156
|
itemsLeft: number;
|
|
157
|
+
/** What the section is about — its plan name and its headings — which picks how its groups are drawn. */
|
|
158
|
+
words?: string;
|
|
159
|
+
/** Whether the section's words sit over a photo, where they take the band's own color. */
|
|
160
|
+
overPhoto?: boolean;
|
|
161
|
+
/** The section's first heading as the model wrote it: what a stand-in picture is of. */
|
|
162
|
+
heading?: string;
|
|
163
|
+
/** A group style the section's arrangement settled, over the one its words would pick. */
|
|
164
|
+
groupStyle?: AiLayoutGroupVariant;
|
|
138
165
|
}
|
|
139
166
|
/** Compiles a page designed in the layout language into the tree it stores. */
|
|
140
167
|
export declare function aiCompileLayoutPage(sections: readonly AiLayoutSection[], plan: AiLayoutPagePlan, targets: AiLayoutTargets, options: AiLayoutCompileOptions): AiLayoutCompiledPage;
|
|
@@ -150,5 +177,7 @@ export type Room = 'full' | 'half' | 'narrow';
|
|
|
150
177
|
/** A column of blocks, top to bottom, with buttons side by side; `null` when nothing in it compiles. */
|
|
151
178
|
export declare function compileFlow(scope: SectionScope, blocks: readonly AiLayoutBlock[], room: Room): string | null;
|
|
152
179
|
export declare function destinationProps(destination: AiLayoutDestination): Record<string, unknown>;
|
|
180
|
+
/** The most pictures a designed page carries, the model's and the stand-ins together. */
|
|
181
|
+
export declare const AI_LAYOUT_MAX_DESIGN_PICTURES = 8;
|
|
153
182
|
/** The id the compiled page's root is stored under. */
|
|
154
183
|
export declare const AI_LAYOUT_PAGE_ROOT_ID = "_@_";
|