@contractspec/bundle.marketing 3.7.5 → 3.7.7

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 (164) hide show
  1. package/.turbo/turbo-build.log +84 -84
  2. package/AGENTS.md +29 -21
  3. package/CHANGELOG.md +27 -0
  4. package/README.md +36 -49
  5. package/dist/browser/components/marketing/ChangelogPage.js +8 -8
  6. package/dist/browser/components/marketing/CofounderPage.js +167 -523
  7. package/dist/browser/components/marketing/ContactClient.js +200 -207
  8. package/dist/browser/components/marketing/ContributePage.js +211 -463
  9. package/dist/browser/components/marketing/DesignPartnerPage.js +165 -218
  10. package/dist/browser/components/marketing/LandingPage.js +464 -568
  11. package/dist/browser/components/marketing/PricingClient.js +213 -839
  12. package/dist/browser/components/marketing/ProductClientPage.js +265 -463
  13. package/dist/browser/components/marketing/index.js +2007 -3338
  14. package/dist/browser/components/marketing/pricing-thinking-modal.js +12 -12
  15. package/dist/browser/components/marketing/sections/AudienceSection.js +2 -2
  16. package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
  17. package/dist/browser/components/marketing/sections/CtaSection.js +3 -3
  18. package/dist/browser/components/marketing/sections/FearsSection.js +3 -3
  19. package/dist/browser/components/marketing/sections/HeroMarketingSection.js +6 -6
  20. package/dist/browser/components/marketing/sections/IconGridSection.js +2 -2
  21. package/dist/browser/components/marketing/sections/OutputsSection.js +2 -2
  22. package/dist/browser/components/marketing/sections/ProblemSection.js +2 -2
  23. package/dist/browser/components/marketing/sections/SolutionSection.js +2 -2
  24. package/dist/browser/components/marketing/sections/StepsSection.js +4 -4
  25. package/dist/browser/components/marketing/studio-signup-section.js +25 -41
  26. package/dist/browser/components/templates/TemplatesClientPage.js +2324 -3578
  27. package/dist/browser/components/templates/TemplatesPage.js +1 -1
  28. package/dist/browser/components/templates/TemplatesPreviewModal.js +3 -3
  29. package/dist/browser/components/templates/index.js +2361 -3615
  30. package/dist/browser/index.js +2363 -3617
  31. package/dist/browser/libs/email/client.js +1 -1
  32. package/dist/browser/libs/email/contact.js +1 -1
  33. package/dist/browser/libs/email/newsletter.js +1 -1
  34. package/dist/browser/libs/email/waitlist-application.js +1 -1
  35. package/dist/browser/libs/email/waitlist.js +1 -1
  36. package/dist/browser/registry/engine.js +2003 -3334
  37. package/dist/browser/registry/index.js +2003 -3334
  38. package/dist/browser/registry/registry-docs.js +2 -2
  39. package/dist/browser/registry/registry-landing.js +2007 -3338
  40. package/dist/browser/registry/registry.js +2003 -3334
  41. package/dist/browser/registry/utils.js +2003 -3334
  42. package/dist/components/marketing/ChangelogPage.js +8 -8
  43. package/dist/components/marketing/CofounderPage.js +167 -523
  44. package/dist/components/marketing/ContactClient.js +200 -207
  45. package/dist/components/marketing/ContributePage.d.ts +0 -2
  46. package/dist/components/marketing/ContributePage.js +211 -463
  47. package/dist/components/marketing/DesignPartnerPage.js +165 -218
  48. package/dist/components/marketing/LandingPage.js +464 -568
  49. package/dist/components/marketing/PricingClient.js +213 -839
  50. package/dist/components/marketing/ProductClientPage.js +265 -463
  51. package/dist/components/marketing/index.d.ts +5 -5
  52. package/dist/components/marketing/index.js +2007 -3338
  53. package/dist/components/marketing/pricing-thinking-modal.js +12 -12
  54. package/dist/components/marketing/sections/AudienceSection.js +2 -2
  55. package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
  56. package/dist/components/marketing/sections/CtaSection.js +3 -3
  57. package/dist/components/marketing/sections/FearsSection.js +3 -3
  58. package/dist/components/marketing/sections/HeroMarketingSection.js +6 -6
  59. package/dist/components/marketing/sections/IconGridSection.d.ts +3 -3
  60. package/dist/components/marketing/sections/IconGridSection.js +2 -2
  61. package/dist/components/marketing/sections/OutputsSection.js +2 -2
  62. package/dist/components/marketing/sections/ProblemSection.js +2 -2
  63. package/dist/components/marketing/sections/SolutionSection.js +2 -2
  64. package/dist/components/marketing/sections/StepsSection.js +4 -4
  65. package/dist/components/marketing/studio-signup-section.js +25 -41
  66. package/dist/components/templates/TemplatesClientPage.js +2324 -3578
  67. package/dist/components/templates/TemplatesPage.js +1 -1
  68. package/dist/components/templates/TemplatesPreviewModal.js +3 -3
  69. package/dist/components/templates/index.js +2361 -3615
  70. package/dist/index.js +2363 -3617
  71. package/dist/libs/email/client.js +1 -1
  72. package/dist/libs/email/contact.js +1 -1
  73. package/dist/libs/email/newsletter.js +1 -1
  74. package/dist/libs/email/waitlist-application.js +1 -1
  75. package/dist/libs/email/waitlist.js +1 -1
  76. package/dist/node/components/marketing/ChangelogPage.js +8 -8
  77. package/dist/node/components/marketing/CofounderPage.js +167 -523
  78. package/dist/node/components/marketing/ContactClient.js +200 -207
  79. package/dist/node/components/marketing/ContributePage.js +211 -463
  80. package/dist/node/components/marketing/DesignPartnerPage.js +165 -218
  81. package/dist/node/components/marketing/LandingPage.js +464 -568
  82. package/dist/node/components/marketing/PricingClient.js +213 -839
  83. package/dist/node/components/marketing/ProductClientPage.js +265 -463
  84. package/dist/node/components/marketing/index.js +2007 -3338
  85. package/dist/node/components/marketing/pricing-thinking-modal.js +12 -12
  86. package/dist/node/components/marketing/sections/AudienceSection.js +2 -2
  87. package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
  88. package/dist/node/components/marketing/sections/CtaSection.js +3 -3
  89. package/dist/node/components/marketing/sections/FearsSection.js +3 -3
  90. package/dist/node/components/marketing/sections/HeroMarketingSection.js +6 -6
  91. package/dist/node/components/marketing/sections/IconGridSection.js +2 -2
  92. package/dist/node/components/marketing/sections/OutputsSection.js +2 -2
  93. package/dist/node/components/marketing/sections/ProblemSection.js +2 -2
  94. package/dist/node/components/marketing/sections/SolutionSection.js +2 -2
  95. package/dist/node/components/marketing/sections/StepsSection.js +4 -4
  96. package/dist/node/components/marketing/studio-signup-section.js +25 -41
  97. package/dist/node/components/templates/TemplatesClientPage.js +2324 -3578
  98. package/dist/node/components/templates/TemplatesPage.js +1 -1
  99. package/dist/node/components/templates/TemplatesPreviewModal.js +3 -3
  100. package/dist/node/components/templates/index.js +2361 -3615
  101. package/dist/node/index.js +2363 -3617
  102. package/dist/node/libs/email/client.js +1 -1
  103. package/dist/node/libs/email/contact.js +1 -1
  104. package/dist/node/libs/email/newsletter.js +1 -1
  105. package/dist/node/libs/email/waitlist-application.js +1 -1
  106. package/dist/node/libs/email/waitlist.js +1 -1
  107. package/dist/node/registry/engine.js +2003 -3334
  108. package/dist/node/registry/index.js +2003 -3334
  109. package/dist/node/registry/registry-docs.js +2 -2
  110. package/dist/node/registry/registry-landing.js +2007 -3338
  111. package/dist/node/registry/registry.js +2003 -3334
  112. package/dist/node/registry/utils.js +2003 -3334
  113. package/dist/registry/engine.js +2003 -3334
  114. package/dist/registry/index.js +2003 -3334
  115. package/dist/registry/registry-docs.js +2 -2
  116. package/dist/registry/registry-landing.js +2007 -3338
  117. package/dist/registry/registry.js +2003 -3334
  118. package/dist/registry/utils.js +2003 -3334
  119. package/package.json +29 -29
  120. package/src/bundles/MarketingBundle.ts +273 -273
  121. package/src/components/marketing/ChangelogPage.tsx +72 -100
  122. package/src/components/marketing/CofounderPage.tsx +120 -384
  123. package/src/components/marketing/ContactClient.tsx +164 -154
  124. package/src/components/marketing/ContributePage.tsx +139 -313
  125. package/src/components/marketing/DesignPartnerPage.tsx +133 -171
  126. package/src/components/marketing/LandingPage.tsx +353 -25
  127. package/src/components/marketing/PricingClient.tsx +192 -437
  128. package/src/components/marketing/ProductClientPage.tsx +255 -377
  129. package/src/components/marketing/index.ts +5 -5
  130. package/src/components/marketing/pricing-thinking-modal.tsx +197 -197
  131. package/src/components/marketing/sections/AudienceSection.tsx +55 -56
  132. package/src/components/marketing/sections/CorePositioningSection.tsx +37 -37
  133. package/src/components/marketing/sections/CtaSection.tsx +49 -50
  134. package/src/components/marketing/sections/DevelopersSection.tsx +26 -27
  135. package/src/components/marketing/sections/FearsSection.tsx +36 -37
  136. package/src/components/marketing/sections/HeroMarketingSection.tsx +59 -59
  137. package/src/components/marketing/sections/IconGridSection.tsx +71 -71
  138. package/src/components/marketing/sections/OutputsSection.tsx +51 -52
  139. package/src/components/marketing/sections/ProblemSection.tsx +39 -40
  140. package/src/components/marketing/sections/SolutionSection.tsx +39 -40
  141. package/src/components/marketing/sections/StepsSection.tsx +47 -48
  142. package/src/components/marketing/studio-signup-section.tsx +39 -41
  143. package/src/components/templates/TemplatesClientPage.tsx +727 -685
  144. package/src/components/templates/TemplatesPage.tsx +110 -110
  145. package/src/components/templates/TemplatesPreviewModal.tsx +197 -198
  146. package/src/index.ts +4 -4
  147. package/src/libs/email/client.test.ts +81 -81
  148. package/src/libs/email/client.ts +111 -111
  149. package/src/libs/email/contact.ts +35 -35
  150. package/src/libs/email/newsletter.ts +46 -46
  151. package/src/libs/email/types.ts +29 -29
  152. package/src/libs/email/utils.ts +5 -5
  153. package/src/libs/email/waitlist-application.ts +72 -72
  154. package/src/libs/email/waitlist.ts +46 -46
  155. package/src/libs/pricing-examples.ts +12 -12
  156. package/src/registry/engine.ts +16 -16
  157. package/src/registry/factory.ts +57 -57
  158. package/src/registry/registry-docs.ts +656 -666
  159. package/src/registry/registry-landing.ts +94 -95
  160. package/src/registry/registry.ts +36 -37
  161. package/src/registry/types.ts +2 -2
  162. package/src/registry/utils.ts +56 -56
  163. package/tsconfig.json +11 -11
  164. package/tsdown.config.js +5 -5
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@contractspec/bundle.marketing",
3
- "version": "3.7.5",
3
+ "version": "3.7.7",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "clean": "rm -rf dist",
7
7
  "lint": "bun run lint:fix",
8
- "lint:fix": "eslint src --fix",
9
- "lint:check": "eslint src",
8
+ "lint:fix": "biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .",
9
+ "lint:check": "biome check .",
10
10
  "build": "bun run prebuild && bun run build:bundle && bun run build:types",
11
11
  "build:bundle": "contractspec-bun-build transpile",
12
12
  "build:types": "contractspec-bun-build types",
@@ -340,43 +340,43 @@
340
340
  },
341
341
  "types": "./dist/index.d.ts",
342
342
  "dependencies": {
343
- "@contractspec/bundle.library": "3.7.5",
344
- "@contractspec/lib.surface-runtime": "0.5.5",
345
- "@contractspec/example.agent-console": "3.7.5",
346
- "@contractspec/example.analytics-dashboard": "3.7.5",
347
- "@contractspec/example.crm-pipeline": "3.7.5",
348
- "@contractspec/example.integration-hub": "3.7.5",
349
- "@contractspec/example.marketplace": "3.7.5",
350
- "@contractspec/example.saas-boilerplate": "3.7.5",
351
- "@contractspec/example.workflow-system": "3.7.5",
352
- "@contractspec/lib.contracts-spec": "3.7.5",
353
- "@contractspec/lib.contracts-runtime-client-react": "3.7.5",
354
- "@contractspec/lib.design-system": "3.7.5",
355
- "@contractspec/lib.email": "3.7.5",
356
- "@contractspec/lib.example-shared-ui": "6.0.5",
357
- "@contractspec/lib.logger": "3.7.5",
358
- "@contractspec/lib.runtime-sandbox": "2.7.5",
359
- "@contractspec/lib.ui-kit-core": "3.7.5",
360
- "@contractspec/lib.ui-kit-web": "3.7.5",
361
- "@contractspec/lib.ui-link": "3.7.5",
362
- "@contractspec/module.examples": "3.7.5",
363
- "@electric-sql/pglite": "^0.3.14",
343
+ "@contractspec/bundle.library": "3.7.7",
344
+ "@contractspec/lib.surface-runtime": "0.5.7",
345
+ "@contractspec/example.agent-console": "3.7.7",
346
+ "@contractspec/example.analytics-dashboard": "3.8.0",
347
+ "@contractspec/example.crm-pipeline": "3.7.7",
348
+ "@contractspec/example.integration-hub": "3.7.7",
349
+ "@contractspec/example.marketplace": "3.7.7",
350
+ "@contractspec/example.saas-boilerplate": "3.7.7",
351
+ "@contractspec/example.workflow-system": "3.7.7",
352
+ "@contractspec/lib.contracts-spec": "4.0.0",
353
+ "@contractspec/lib.contracts-runtime-client-react": "3.7.7",
354
+ "@contractspec/lib.design-system": "3.8.0",
355
+ "@contractspec/lib.email": "3.7.6",
356
+ "@contractspec/lib.example-shared-ui": "6.0.7",
357
+ "@contractspec/lib.logger": "3.7.6",
358
+ "@contractspec/lib.runtime-sandbox": "2.7.6",
359
+ "@contractspec/lib.ui-kit-core": "3.7.6",
360
+ "@contractspec/lib.ui-kit-web": "3.8.0",
361
+ "@contractspec/lib.ui-link": "3.7.6",
362
+ "@contractspec/module.examples": "3.7.7",
363
+ "@electric-sql/pglite": "^0.4.1",
364
364
  "@hookform/resolvers": "^5.2.2",
365
- "@scaleway/sdk": "^3.3.1",
365
+ "@scaleway/sdk": "^3.4.1",
366
366
  "@scaleway/sdk-client": "^2.2.1",
367
367
  "class-variance-authority": "^0.7.1",
368
- "framer-motion": "^12.35.1",
368
+ "framer-motion": "^12.38.0",
369
369
  "lucide-react": "^0.577.0",
370
- "next": "16.1.6",
370
+ "next": "16.2.0",
371
371
  "react": "19.2.0",
372
372
  "react-hook-form": "^7.71.2",
373
373
  "zod": "^4.3.5"
374
374
  },
375
375
  "devDependencies": {
376
376
  "@types/react": "~19.2.14",
377
- "@contractspec/tool.typescript": "3.7.5",
377
+ "@contractspec/tool.typescript": "3.7.6",
378
378
  "typescript": "^5.9.3",
379
- "@contractspec/tool.bun": "3.7.5"
379
+ "@contractspec/tool.bun": "3.7.6"
380
380
  },
381
381
  "publishConfig": {
382
382
  "access": "public",
@@ -6,279 +6,279 @@
6
6
  import { defineModuleBundle } from '@contractspec/lib.surface-runtime/spec';
7
7
 
8
8
  export const MarketingBundle = defineModuleBundle({
9
- meta: {
10
- key: 'marketing.pages',
11
- version: '0.1.0',
12
- title: 'Marketing Pages',
13
- description:
14
- 'Adaptive surfaces for landing, template gallery, changelog, and product pages',
15
- owners: ['team-platform'],
16
- tags: ['marketing', 'landing', 'templates', 'changelog'],
17
- stability: 'experimental',
18
- },
9
+ meta: {
10
+ key: 'marketing.pages',
11
+ version: '0.1.0',
12
+ title: 'Marketing Pages',
13
+ description:
14
+ 'Adaptive surfaces for landing, template gallery, changelog, and product pages',
15
+ owners: ['team-platform'],
16
+ tags: ['marketing', 'landing', 'templates', 'changelog'],
17
+ stability: 'experimental',
18
+ },
19
19
 
20
- routes: [
21
- {
22
- routeId: 'landing',
23
- path: '/',
24
- defaultSurface: 'landing',
25
- },
26
- {
27
- routeId: 'product',
28
- path: '/product',
29
- defaultSurface: 'product',
30
- },
31
- {
32
- routeId: 'templates',
33
- path: '/templates',
34
- defaultSurface: 'template-gallery',
35
- },
36
- {
37
- routeId: 'changelog',
38
- path: '/changelog',
39
- defaultSurface: 'changelog',
40
- },
41
- {
42
- routeId: 'contact',
43
- path: '/contact',
44
- defaultSurface: 'contact',
45
- },
46
- ],
20
+ routes: [
21
+ {
22
+ routeId: 'landing',
23
+ path: '/',
24
+ defaultSurface: 'landing',
25
+ },
26
+ {
27
+ routeId: 'product',
28
+ path: '/product',
29
+ defaultSurface: 'product',
30
+ },
31
+ {
32
+ routeId: 'templates',
33
+ path: '/templates',
34
+ defaultSurface: 'template-gallery',
35
+ },
36
+ {
37
+ routeId: 'changelog',
38
+ path: '/changelog',
39
+ defaultSurface: 'changelog',
40
+ },
41
+ {
42
+ routeId: 'contact',
43
+ path: '/contact',
44
+ defaultSurface: 'contact',
45
+ },
46
+ ],
47
47
 
48
- surfaces: {
49
- landing: {
50
- surfaceId: 'landing',
51
- kind: 'overview',
52
- title: 'Landing Page',
53
- slots: [
54
- {
55
- slotId: 'header',
56
- role: 'header',
57
- accepts: ['action-bar'],
58
- cardinality: 'many',
59
- },
60
- {
61
- slotId: 'primary',
62
- role: 'primary',
63
- accepts: ['entity-section', 'custom-widget'],
64
- cardinality: 'many',
65
- },
66
- ],
67
- layouts: [
68
- {
69
- layoutId: 'single-column',
70
- title: 'Single column',
71
- root: {
72
- type: 'panel-group',
73
- direction: 'vertical',
74
- persistKey: 'marketing.landing',
75
- children: [
76
- { type: 'slot', slotId: 'header' },
77
- { type: 'slot', slotId: 'primary' },
78
- ],
79
- },
80
- },
81
- ],
82
- data: [],
83
- verification: {
84
- dimensions: {
85
- guidance:
86
- 'Can reveal product tour, feature highlights, and contextual CTAs.',
87
- density: 'Can select compact hero or detailed multi-section layouts.',
88
- dataDepth: 'Controls section depth and inline expansion.',
89
- control: 'Shows advanced navigation when allowed.',
90
- media: 'Supports text-first, visual hero, and hybrid modes.',
91
- pace: 'Maps to scroll and transition behavior.',
92
- narrative:
93
- 'Can order hero before or after problem/solution sections.',
94
- },
95
- },
96
- },
97
- 'template-gallery': {
98
- surfaceId: 'template-gallery',
99
- kind: 'list',
100
- title: 'Template Gallery',
101
- slots: [
102
- {
103
- slotId: 'header',
104
- role: 'header',
105
- accepts: ['action-bar'],
106
- cardinality: 'many',
107
- },
108
- {
109
- slotId: 'primary',
110
- role: 'primary',
111
- accepts: ['entity-section', 'table', 'custom-widget'],
112
- cardinality: 'many',
113
- },
114
- ],
115
- layouts: [
116
- {
117
- layoutId: 'gallery',
118
- title: 'Gallery',
119
- root: {
120
- type: 'panel-group',
121
- direction: 'vertical',
122
- persistKey: 'marketing.templates',
123
- children: [
124
- { type: 'slot', slotId: 'header' },
125
- { type: 'slot', slotId: 'primary' },
126
- ],
127
- },
128
- },
129
- ],
130
- data: [],
131
- verification: {
132
- dimensions: {
133
- guidance:
134
- 'Can reveal template descriptions, filters, and preview hints.',
135
- density:
136
- 'Can select grid density (compact, standard, detailed cards).',
137
- dataDepth: 'Controls template metadata and preview depth.',
138
- control: 'Shows filters and sort when allowed.',
139
- media: 'Supports card grid, list, and preview modes.',
140
- pace: 'Maps to modal and transition behavior.',
141
- narrative: 'Can order featured templates before or after full list.',
142
- },
143
- },
144
- },
145
- changelog: {
146
- surfaceId: 'changelog',
147
- kind: 'timeline',
148
- title: 'Changelog',
149
- slots: [
150
- {
151
- slotId: 'header',
152
- role: 'header',
153
- accepts: ['action-bar'],
154
- cardinality: 'many',
155
- },
156
- {
157
- slotId: 'primary',
158
- role: 'primary',
159
- accepts: ['entity-section', 'timeline', 'custom-widget'],
160
- cardinality: 'many',
161
- },
162
- ],
163
- layouts: [
164
- {
165
- layoutId: 'timeline',
166
- title: 'Timeline',
167
- root: {
168
- type: 'panel-group',
169
- direction: 'vertical',
170
- persistKey: 'marketing.changelog',
171
- children: [
172
- { type: 'slot', slotId: 'header' },
173
- { type: 'slot', slotId: 'primary' },
174
- ],
175
- },
176
- },
177
- ],
178
- data: [],
179
- verification: {
180
- dimensions: {
181
- guidance: 'Can reveal version notes and migration hints.',
182
- density: 'Can select compact or detailed changelog entries.',
183
- dataDepth: 'Controls entry expansion and diff visibility.',
184
- control: 'Shows filters and version navigation when allowed.',
185
- media: 'Supports text-first and code-highlight modes.',
186
- pace: 'Maps to scroll and expand behavior.',
187
- narrative: 'Can order newest-first or oldest-first chronology.',
188
- },
189
- },
190
- },
191
- product: {
192
- surfaceId: 'product',
193
- kind: 'overview',
194
- title: 'Product Page',
195
- slots: [
196
- {
197
- slotId: 'header',
198
- role: 'header',
199
- accepts: ['action-bar'],
200
- cardinality: 'many',
201
- },
202
- {
203
- slotId: 'primary',
204
- role: 'primary',
205
- accepts: ['entity-section', 'custom-widget'],
206
- cardinality: 'many',
207
- },
208
- ],
209
- layouts: [
210
- {
211
- layoutId: 'product-layout',
212
- title: 'Product',
213
- root: {
214
- type: 'panel-group',
215
- direction: 'vertical',
216
- persistKey: 'marketing.product',
217
- children: [
218
- { type: 'slot', slotId: 'header' },
219
- { type: 'slot', slotId: 'primary' },
220
- ],
221
- },
222
- },
223
- ],
224
- data: [],
225
- verification: {
226
- dimensions: {
227
- guidance: 'Can reveal product features and comparison hints.',
228
- density: 'Can select compact or detailed product sections.',
229
- dataDepth: 'Controls feature depth and comparison tables.',
230
- control: 'Shows pricing and plan details when allowed.',
231
- media: 'Supports text-first and visual feature modes.',
232
- pace: 'Maps to section transitions.',
233
- narrative: 'Can order value prop before or after feature details.',
234
- },
235
- },
236
- },
237
- contact: {
238
- surfaceId: 'contact',
239
- kind: 'detail',
240
- title: 'Contact',
241
- slots: [
242
- {
243
- slotId: 'header',
244
- role: 'header',
245
- accepts: ['action-bar'],
246
- cardinality: 'many',
247
- },
248
- {
249
- slotId: 'primary',
250
- role: 'primary',
251
- accepts: ['form', 'entity-section', 'custom-widget'],
252
- cardinality: 'many',
253
- },
254
- ],
255
- layouts: [
256
- {
257
- layoutId: 'contact-layout',
258
- title: 'Contact',
259
- root: {
260
- type: 'panel-group',
261
- direction: 'vertical',
262
- persistKey: 'marketing.contact',
263
- children: [
264
- { type: 'slot', slotId: 'header' },
265
- { type: 'slot', slotId: 'primary' },
266
- ],
267
- },
268
- },
269
- ],
270
- data: [],
271
- verification: {
272
- dimensions: {
273
- guidance: 'Can reveal form hints and validation help.',
274
- density: 'Can select compact or detailed form layout.',
275
- dataDepth: 'Controls field visibility and validation depth.',
276
- control: 'Shows additional contact options when allowed.',
277
- media: 'Supports text-first form and hybrid modes.',
278
- pace: 'Maps to validation and submit feedback.',
279
- narrative: 'Can order form before or after contact info.',
280
- },
281
- },
282
- },
283
- },
48
+ surfaces: {
49
+ landing: {
50
+ surfaceId: 'landing',
51
+ kind: 'overview',
52
+ title: 'Landing Page',
53
+ slots: [
54
+ {
55
+ slotId: 'header',
56
+ role: 'header',
57
+ accepts: ['action-bar'],
58
+ cardinality: 'many',
59
+ },
60
+ {
61
+ slotId: 'primary',
62
+ role: 'primary',
63
+ accepts: ['entity-section', 'custom-widget'],
64
+ cardinality: 'many',
65
+ },
66
+ ],
67
+ layouts: [
68
+ {
69
+ layoutId: 'single-column',
70
+ title: 'Single column',
71
+ root: {
72
+ type: 'panel-group',
73
+ direction: 'vertical',
74
+ persistKey: 'marketing.landing',
75
+ children: [
76
+ { type: 'slot', slotId: 'header' },
77
+ { type: 'slot', slotId: 'primary' },
78
+ ],
79
+ },
80
+ },
81
+ ],
82
+ data: [],
83
+ verification: {
84
+ dimensions: {
85
+ guidance:
86
+ 'Can reveal product tour, feature highlights, and contextual CTAs.',
87
+ density: 'Can select compact hero or detailed multi-section layouts.',
88
+ dataDepth: 'Controls section depth and inline expansion.',
89
+ control: 'Shows advanced navigation when allowed.',
90
+ media: 'Supports text-first, visual hero, and hybrid modes.',
91
+ pace: 'Maps to scroll and transition behavior.',
92
+ narrative:
93
+ 'Can order hero before or after problem/solution sections.',
94
+ },
95
+ },
96
+ },
97
+ 'template-gallery': {
98
+ surfaceId: 'template-gallery',
99
+ kind: 'list',
100
+ title: 'Template Gallery',
101
+ slots: [
102
+ {
103
+ slotId: 'header',
104
+ role: 'header',
105
+ accepts: ['action-bar'],
106
+ cardinality: 'many',
107
+ },
108
+ {
109
+ slotId: 'primary',
110
+ role: 'primary',
111
+ accepts: ['entity-section', 'table', 'custom-widget'],
112
+ cardinality: 'many',
113
+ },
114
+ ],
115
+ layouts: [
116
+ {
117
+ layoutId: 'gallery',
118
+ title: 'Gallery',
119
+ root: {
120
+ type: 'panel-group',
121
+ direction: 'vertical',
122
+ persistKey: 'marketing.templates',
123
+ children: [
124
+ { type: 'slot', slotId: 'header' },
125
+ { type: 'slot', slotId: 'primary' },
126
+ ],
127
+ },
128
+ },
129
+ ],
130
+ data: [],
131
+ verification: {
132
+ dimensions: {
133
+ guidance:
134
+ 'Can reveal template descriptions, filters, and preview hints.',
135
+ density:
136
+ 'Can select grid density (compact, standard, detailed cards).',
137
+ dataDepth: 'Controls template metadata and preview depth.',
138
+ control: 'Shows filters and sort when allowed.',
139
+ media: 'Supports card grid, list, and preview modes.',
140
+ pace: 'Maps to modal and transition behavior.',
141
+ narrative: 'Can order featured templates before or after full list.',
142
+ },
143
+ },
144
+ },
145
+ changelog: {
146
+ surfaceId: 'changelog',
147
+ kind: 'timeline',
148
+ title: 'Changelog',
149
+ slots: [
150
+ {
151
+ slotId: 'header',
152
+ role: 'header',
153
+ accepts: ['action-bar'],
154
+ cardinality: 'many',
155
+ },
156
+ {
157
+ slotId: 'primary',
158
+ role: 'primary',
159
+ accepts: ['entity-section', 'timeline', 'custom-widget'],
160
+ cardinality: 'many',
161
+ },
162
+ ],
163
+ layouts: [
164
+ {
165
+ layoutId: 'timeline',
166
+ title: 'Timeline',
167
+ root: {
168
+ type: 'panel-group',
169
+ direction: 'vertical',
170
+ persistKey: 'marketing.changelog',
171
+ children: [
172
+ { type: 'slot', slotId: 'header' },
173
+ { type: 'slot', slotId: 'primary' },
174
+ ],
175
+ },
176
+ },
177
+ ],
178
+ data: [],
179
+ verification: {
180
+ dimensions: {
181
+ guidance: 'Can reveal version notes and migration hints.',
182
+ density: 'Can select compact or detailed changelog entries.',
183
+ dataDepth: 'Controls entry expansion and diff visibility.',
184
+ control: 'Shows filters and version navigation when allowed.',
185
+ media: 'Supports text-first and code-highlight modes.',
186
+ pace: 'Maps to scroll and expand behavior.',
187
+ narrative: 'Can order newest-first or oldest-first chronology.',
188
+ },
189
+ },
190
+ },
191
+ product: {
192
+ surfaceId: 'product',
193
+ kind: 'overview',
194
+ title: 'Product Page',
195
+ slots: [
196
+ {
197
+ slotId: 'header',
198
+ role: 'header',
199
+ accepts: ['action-bar'],
200
+ cardinality: 'many',
201
+ },
202
+ {
203
+ slotId: 'primary',
204
+ role: 'primary',
205
+ accepts: ['entity-section', 'custom-widget'],
206
+ cardinality: 'many',
207
+ },
208
+ ],
209
+ layouts: [
210
+ {
211
+ layoutId: 'product-layout',
212
+ title: 'Product',
213
+ root: {
214
+ type: 'panel-group',
215
+ direction: 'vertical',
216
+ persistKey: 'marketing.product',
217
+ children: [
218
+ { type: 'slot', slotId: 'header' },
219
+ { type: 'slot', slotId: 'primary' },
220
+ ],
221
+ },
222
+ },
223
+ ],
224
+ data: [],
225
+ verification: {
226
+ dimensions: {
227
+ guidance: 'Can reveal product features and comparison hints.',
228
+ density: 'Can select compact or detailed product sections.',
229
+ dataDepth: 'Controls feature depth and comparison tables.',
230
+ control: 'Shows pricing and plan details when allowed.',
231
+ media: 'Supports text-first and visual feature modes.',
232
+ pace: 'Maps to section transitions.',
233
+ narrative: 'Can order value prop before or after feature details.',
234
+ },
235
+ },
236
+ },
237
+ contact: {
238
+ surfaceId: 'contact',
239
+ kind: 'detail',
240
+ title: 'Contact',
241
+ slots: [
242
+ {
243
+ slotId: 'header',
244
+ role: 'header',
245
+ accepts: ['action-bar'],
246
+ cardinality: 'many',
247
+ },
248
+ {
249
+ slotId: 'primary',
250
+ role: 'primary',
251
+ accepts: ['form', 'entity-section', 'custom-widget'],
252
+ cardinality: 'many',
253
+ },
254
+ ],
255
+ layouts: [
256
+ {
257
+ layoutId: 'contact-layout',
258
+ title: 'Contact',
259
+ root: {
260
+ type: 'panel-group',
261
+ direction: 'vertical',
262
+ persistKey: 'marketing.contact',
263
+ children: [
264
+ { type: 'slot', slotId: 'header' },
265
+ { type: 'slot', slotId: 'primary' },
266
+ ],
267
+ },
268
+ },
269
+ ],
270
+ data: [],
271
+ verification: {
272
+ dimensions: {
273
+ guidance: 'Can reveal form hints and validation help.',
274
+ density: 'Can select compact or detailed form layout.',
275
+ dataDepth: 'Controls field visibility and validation depth.',
276
+ control: 'Shows additional contact options when allowed.',
277
+ media: 'Supports text-first form and hybrid modes.',
278
+ pace: 'Maps to validation and submit feedback.',
279
+ narrative: 'Can order form before or after contact info.',
280
+ },
281
+ },
282
+ },
283
+ },
284
284
  });