create-cogenta 0.5.3 → 0.7.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.
- package/dist/blueprint-defaults.js +1 -1
- package/dist/blueprint-defaults.js.map +1 -1
- package/dist/blueprints/registry.d.ts +13 -1
- package/dist/blueprints/registry.d.ts.map +1 -1
- package/dist/blueprints/registry.js +23 -5
- package/dist/blueprints/registry.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/playground-reset.js +2 -2
- package/dist/playground-reset.js.map +1 -1
- package/dist/recap.js +1 -1
- package/dist/recap.js.map +1 -1
- package/dist/scaffold.d.ts +5 -3
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +20 -13
- package/dist/scaffold.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/dist/wizard.js +1 -1
- package/dist/wizard.js.map +1 -1
- package/package.json +14 -13
- package/dist/blueprints/assets/photos/association/community-cleanup.jpg +0 -0
- package/dist/blueprints/assets/photos/association/fundraising-dinner.jpg +0 -0
- package/dist/blueprints/assets/photos/association/garden-planting.jpg +0 -0
- package/dist/blueprints/assets/photos/association/harvest-food-drive.jpg +0 -0
- package/dist/blueprints/assets/photos/association/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/association/volunteer-orientation.jpg +0 -0
- package/dist/blueprints/assets/photos/association/winter-coat-collection.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/blog-runs-itself.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/desk-setup.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/editing.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/notebooks.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/plain-text-editor.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/reading-nonfiction.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/small-tool.jpg +0 -0
- package/dist/blueprints/assets/photos/blog/writing-schedule.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/business-2.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/business-3.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/business.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/culture-2.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/culture-3.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/culture.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/news-2.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/news-3.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/news.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/opinion-2.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/opinion-3.jpg +0 -0
- package/dist/blueprints/assets/photos/magazine/opinion.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/adatum-publishing.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/contoso-mobile-app.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/fabrikam-annual-report.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/litware-signage.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/northwind-rebrand.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/proseware-launch.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/tailspin-streaming.jpg +0 -0
- package/dist/blueprints/assets/photos/portfolio/wingtip-wayfinding.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/charred-octopus.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/chocolate-tart.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/creme-brulee.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/house-red.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/house-white.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/pan-seared-trout.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/poached-pear.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/roasted-beet-salad.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/slow-roast-duck-leg.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/soup-of-the-day.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/sparkling-water.jpg +0 -0
- package/dist/blueprints/assets/photos/restaurant/wild-mushroom-risotto.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/avatar-1.jpg +0 -0
- package/dist/blueprints/assets/photos/saas/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/store/camp-blanket.jpg +0 -0
- package/dist/blueprints/assets/photos/store/canvas-tote.jpg +0 -0
- package/dist/blueprints/assets/photos/store/cast-iron-skillet.jpg +0 -0
- package/dist/blueprints/assets/photos/store/ceramic-pour-over-set.jpg +0 -0
- package/dist/blueprints/assets/photos/store/enamel-mug.jpg +0 -0
- package/dist/blueprints/assets/photos/store/everyday-tee.jpg +0 -0
- package/dist/blueprints/assets/photos/store/field-jacket.jpg +0 -0
- package/dist/blueprints/assets/photos/store/hero.jpg +0 -0
- package/dist/blueprints/assets/photos/store/leather-card-holder.jpg +0 -0
- package/dist/blueprints/assets/photos/store/linen-table-runner.jpg +0 -0
- package/dist/blueprints/assets/photos/store/trail-tote.jpg +0 -0
- package/dist/blueprints/assets/photos/store/wool-beanie.jpg +0 -0
- package/dist/blueprints/assets/photos/store/wool-overshirt.jpg +0 -0
- package/dist/blueprints/assets/photos/vitrine/avatar-1.jpg +0 -0
- package/dist/blueprints/assets/photos/vitrine/avatar-2.jpg +0 -0
- package/dist/blueprints/assets/photos/vitrine/avatar-3.jpg +0 -0
- package/dist/blueprints/assets/photos/vitrine/dashboard.jpg +0 -0
- package/dist/blueprints/assets/photos/vitrine/hero.jpg +0 -0
- package/dist/blueprints/association.d.ts +0 -151
- package/dist/blueprints/association.d.ts.map +0 -1
- package/dist/blueprints/association.js +0 -732
- package/dist/blueprints/association.js.map +0 -1
- package/dist/blueprints/blog.d.ts +0 -198
- package/dist/blueprints/blog.d.ts.map +0 -1
- package/dist/blueprints/blog.js +0 -665
- package/dist/blueprints/blog.js.map +0 -1
- package/dist/blueprints/content-pack.d.ts +0 -143
- package/dist/blueprints/content-pack.d.ts.map +0 -1
- package/dist/blueprints/content-pack.js +0 -111
- package/dist/blueprints/content-pack.js.map +0 -1
- package/dist/blueprints/content-packs.d.ts +0 -11
- package/dist/blueprints/content-packs.d.ts.map +0 -1
- package/dist/blueprints/content-packs.js +0 -29
- package/dist/blueprints/content-packs.js.map +0 -1
- package/dist/blueprints/demo-media.d.ts +0 -39
- package/dist/blueprints/demo-media.d.ts.map +0 -1
- package/dist/blueprints/demo-media.js +0 -30
- package/dist/blueprints/demo-media.js.map +0 -1
- package/dist/blueprints/documentation.d.ts +0 -134
- package/dist/blueprints/documentation.d.ts.map +0 -1
- package/dist/blueprints/documentation.js +0 -678
- package/dist/blueprints/documentation.js.map +0 -1
- package/dist/blueprints/magazine.d.ts +0 -145
- package/dist/blueprints/magazine.d.ts.map +0 -1
- package/dist/blueprints/magazine.js +0 -543
- package/dist/blueprints/magazine.js.map +0 -1
- package/dist/blueprints/menus.d.ts +0 -25
- package/dist/blueprints/menus.d.ts.map +0 -1
- package/dist/blueprints/menus.js +0 -33
- package/dist/blueprints/menus.js.map +0 -1
- package/dist/blueprints/photo-assets.d.ts +0 -3
- package/dist/blueprints/photo-assets.d.ts.map +0 -1
- package/dist/blueprints/photo-assets.js +0 -33
- package/dist/blueprints/photo-assets.js.map +0 -1
- package/dist/blueprints/portfolio.d.ts +0 -141
- package/dist/blueprints/portfolio.d.ts.map +0 -1
- package/dist/blueprints/portfolio.js +0 -700
- package/dist/blueprints/portfolio.js.map +0 -1
- package/dist/blueprints/restaurant.d.ts +0 -124
- package/dist/blueprints/restaurant.d.ts.map +0 -1
- package/dist/blueprints/restaurant.js +0 -457
- package/dist/blueprints/restaurant.js.map +0 -1
- package/dist/blueprints/saas.d.ts +0 -133
- package/dist/blueprints/saas.d.ts.map +0 -1
- package/dist/blueprints/saas.js +0 -551
- package/dist/blueprints/saas.js.map +0 -1
- package/dist/blueprints/site-settings-seed.d.ts +0 -17
- package/dist/blueprints/site-settings-seed.d.ts.map +0 -1
- package/dist/blueprints/site-settings-seed.js +0 -45
- package/dist/blueprints/site-settings-seed.js.map +0 -1
- package/dist/blueprints/starting-skins.d.ts +0 -19
- package/dist/blueprints/starting-skins.d.ts.map +0 -1
- package/dist/blueprints/starting-skins.js +0 -301
- package/dist/blueprints/starting-skins.js.map +0 -1
- package/dist/blueprints/store.d.ts +0 -173
- package/dist/blueprints/store.d.ts.map +0 -1
- package/dist/blueprints/store.js +0 -643
- package/dist/blueprints/store.js.map +0 -1
- package/dist/blueprints/vitrine.d.ts +0 -178
- package/dist/blueprints/vitrine.d.ts.map +0 -1
- package/dist/blueprints/vitrine.js +0 -529
- package/dist/blueprints/vitrine.js.map +0 -1
- package/dist/demo-art/compositions.d.ts +0 -48
- package/dist/demo-art/compositions.d.ts.map +0 -1
- package/dist/demo-art/compositions.js +0 -690
- package/dist/demo-art/compositions.js.map +0 -1
- package/dist/demo-art/index.d.ts +0 -8
- package/dist/demo-art/index.d.ts.map +0 -1
- package/dist/demo-art/index.js +0 -5
- package/dist/demo-art/index.js.map +0 -1
- package/dist/demo-art/oklch.d.ts +0 -39
- package/dist/demo-art/oklch.d.ts.map +0 -1
- package/dist/demo-art/oklch.js +0 -79
- package/dist/demo-art/oklch.js.map +0 -1
- package/dist/demo-art/png.d.ts +0 -24
- package/dist/demo-art/png.d.ts.map +0 -1
- package/dist/demo-art/png.js +0 -110
- package/dist/demo-art/png.js.map +0 -1
- package/dist/demo-art/render.d.ts +0 -228
- package/dist/demo-art/render.d.ts.map +0 -1
- package/dist/demo-art/render.js +0 -478
- package/dist/demo-art/render.js.map +0 -1
|
@@ -1,529 +0,0 @@
|
|
|
1
|
-
import { CogentaError } from '@cogenta/core';
|
|
2
|
-
import { createContentStore, defineCollection, f, validateCollectionSet, } from '@cogenta/schema';
|
|
3
|
-
import { avatarArt, coverArt, heroArt, logoArt } from '../demo-art/compositions.js';
|
|
4
|
-
import { definePageCollection, richTextParagraph, SEO_FIELDS, toBlockZoneEntry, } from './content-pack.js';
|
|
5
|
-
import { STARTING_SKINS } from './starting-skins.js';
|
|
6
|
-
/**
|
|
7
|
-
* The `vitrine` blueprint's content model (L9 task 8, batch A; raised to a
|
|
8
|
-
* pro template by L25): the classic one-pager showcase site for a small
|
|
9
|
-
* business or consultancy — a list of services and a few testimonials,
|
|
10
|
-
* both real, editable collections rather than data baked into the page
|
|
11
|
-
* itself.
|
|
12
|
-
*
|
|
13
|
-
* `icon` (a symbol name `@cogenta/theme-kit`'s `renderIcon` recognises) and
|
|
14
|
-
* `coverImage` (contract D `theme@1.4`'s `entryImage`) are what let
|
|
15
|
-
* `theme-entreprise`'s `featureGrid` and `collectionList` show a service
|
|
16
|
-
* the same way `theme-saas`'s own `feature` collection already does.
|
|
17
|
-
*/
|
|
18
|
-
export const service = defineCollection({
|
|
19
|
-
name: 'service',
|
|
20
|
-
labels: { singular: 'Service', plural: 'Services' },
|
|
21
|
-
// Routed, not just listed: `collectionList` (used on the home page below)
|
|
22
|
-
// always builds a link for every entry it renders (`entryHref`,
|
|
23
|
-
// `@cogenta/theme-kit`), so a collection it targets must have a route or
|
|
24
|
-
// that render call throws.
|
|
25
|
-
routing: { pattern: '/services/:slug' },
|
|
26
|
-
fields: {
|
|
27
|
-
name: f.text({ required: true, max: 120 }),
|
|
28
|
-
slug: f.slug({ from: 'name', unique: true }),
|
|
29
|
-
description: f.text({ max: 400, multiline: true }),
|
|
30
|
-
icon: f.text({
|
|
31
|
-
max: 64,
|
|
32
|
-
admin: {
|
|
33
|
-
label: 'Icon',
|
|
34
|
-
help: 'One of the symbol names @cogenta/theme-kit recognises (e.g. "chart", "shield", "briefcase", "code", "trending-up", "tag"). Left blank, the service renders with no icon chip.',
|
|
35
|
-
},
|
|
36
|
-
}),
|
|
37
|
-
coverImage: f.media({ accept: ['image'] }),
|
|
38
|
-
...SEO_FIELDS,
|
|
39
|
-
},
|
|
40
|
-
indexes: [['slug']],
|
|
41
|
-
permissions: {
|
|
42
|
-
read: ['public'],
|
|
43
|
-
create: ['editor', 'admin'],
|
|
44
|
-
update: ['editor', 'admin'],
|
|
45
|
-
delete: ['admin'],
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
export const testimonial = defineCollection({
|
|
49
|
-
name: 'testimonial',
|
|
50
|
-
labels: { singular: 'Testimonial', plural: 'Testimonials' },
|
|
51
|
-
fields: {
|
|
52
|
-
authorName: f.text({ required: true, max: 120 }),
|
|
53
|
-
authorRole: f.text({ max: 120 }),
|
|
54
|
-
quote: f.text({ required: true, max: 500, multiline: true }),
|
|
55
|
-
avatar: f.media({ accept: ['image'] }),
|
|
56
|
-
},
|
|
57
|
-
permissions: {
|
|
58
|
-
read: ['public'],
|
|
59
|
-
create: ['editor', 'admin'],
|
|
60
|
-
update: ['editor', 'admin'],
|
|
61
|
-
delete: ['admin'],
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
export const page = definePageCollection('/:slug');
|
|
65
|
-
export const VITRINE_COLLECTIONS = [service, testimonial, page];
|
|
66
|
-
validateCollectionSet(VITRINE_COLLECTIONS);
|
|
67
|
-
/**
|
|
68
|
-
* Six real B2B capabilities, each with the icon `featureGrid` (home page)
|
|
69
|
-
* and this same entry's own `icon` field both point at — a `collectionList`
|
|
70
|
-
* of `service` and the home page's `featureGrid` read as one system rather
|
|
71
|
-
* than two unrelated sections.
|
|
72
|
-
*/
|
|
73
|
-
export const VITRINE_DEMO_SERVICES = [
|
|
74
|
-
{
|
|
75
|
-
name: 'Brand strategy',
|
|
76
|
-
slug: 'brand-strategy',
|
|
77
|
-
description: 'We start every engagement here, because a redesign built on the wrong positioning just ships the confusion faster. Three weeks of interviews with your best customers and closest competitors end in a positioning document, a messaging framework, and a visual identity your team can defend in a board meeting without us in the room.',
|
|
78
|
-
icon: 'tag',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
name: 'Web design & build',
|
|
82
|
-
slug: 'web-design-build',
|
|
83
|
-
description: 'Most of the sites we replace took longer to explain than to load. We design and build on Cogenta itself, so your team edits copy and swaps testimonials without filing a ticket — and the finished site still says what you do in the first five seconds, on every screen size.',
|
|
84
|
-
icon: 'code',
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
name: 'Growth marketing',
|
|
88
|
-
slug: 'growth-marketing',
|
|
89
|
-
description: 'We run paid, lifecycle and content programmes against one dashboard tied to closed revenue, not clicks. A channel that stops paying for itself gets cut inside a reporting cycle, not a fiscal quarter — most engagements end with a smaller media budget and a larger pipeline than they started with.',
|
|
90
|
-
icon: 'trending-up',
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: 'Operations consulting',
|
|
94
|
-
slug: 'operations-consulting',
|
|
95
|
-
description: 'Most operations problems are three broken handoffs, not thirty. We map how work actually moves through your organisation, not how the org chart says it should, and fix the handful of handoffs that are really costing you cycle time — against a metric your leadership already tracks.',
|
|
96
|
-
icon: 'briefcase',
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
name: 'Financial advisory',
|
|
100
|
-
slug: 'financial-advisory',
|
|
101
|
-
description: 'We build the model your finance team will still be using eighteen months from now, not a one-off deck. Every forecast ties back to the same general-ledger export your controller already trusts, so the numbers survive contact with a real board, and a real audit.',
|
|
102
|
-
icon: 'chart',
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
name: 'Security & compliance',
|
|
106
|
-
slug: 'security-compliance',
|
|
107
|
-
description: 'We inherited more than one compliance programme that was a binder nobody had opened since the last audit. Ours ships with a named owner and a real audit trail for every control, mapped to SOC 2 or ISO 27001 depending on what your customers actually ask for.',
|
|
108
|
-
icon: 'shield',
|
|
109
|
-
},
|
|
110
|
-
];
|
|
111
|
-
export const VITRINE_DEMO_TESTIMONIALS = [
|
|
112
|
-
{
|
|
113
|
-
authorName: 'Amina Diallo',
|
|
114
|
-
authorRole: 'Founder, Atelier Diallo',
|
|
115
|
-
quote: 'Northfield rebuilt our positioning before they touched a single page of the site, and it showed — the new site paid for itself in the first month, because for the first time people understood what we do before they ever called. We still edit it ourselves, weekly, without asking anyone for help.',
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
authorName: 'Marco Bellini',
|
|
119
|
-
authorRole: 'Owner, Bellini Consulting',
|
|
120
|
-
quote: 'Fast, clear, no surprises, and a fixed quote that held from the first call to the last invoice — exactly what a small business needs from a consulting engagement and almost never gets. Northfield delivered the brand and the site in five weeks and has been one email away ever since.',
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
authorName: 'Priya Chandra',
|
|
124
|
-
authorRole: 'COO, Chandra & Partners',
|
|
125
|
-
quote: "Northfield's operations review took three weeks and changed how four teams hand off work to each other. We are still finding the recommendations landing a full quarter later, in meetings Northfield was never in the room for — that is the real test of whether a consultant fixed something.",
|
|
126
|
-
},
|
|
127
|
-
];
|
|
128
|
-
const BLOCK_VERSION = '1.0.0';
|
|
129
|
-
function proseParagraph(key, text) {
|
|
130
|
-
return {
|
|
131
|
-
_key: key,
|
|
132
|
-
_type: 'prose',
|
|
133
|
-
_version: BLOCK_VERSION,
|
|
134
|
-
body: richTextParagraph(`${key}-body`, text),
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
/** A multi-paragraph `prose` block — same shape convention as `restaurant.ts`'s own `proseBlock`, for the About page's real founding story rather than one thin paragraph. */
|
|
138
|
-
function proseBlock(key, paragraphs) {
|
|
139
|
-
return {
|
|
140
|
-
_key: key,
|
|
141
|
-
_type: 'prose',
|
|
142
|
-
_version: BLOCK_VERSION,
|
|
143
|
-
body: paragraphs.map((text, index) => ({
|
|
144
|
-
_key: `${key}-p${index}`,
|
|
145
|
-
_type: 'block',
|
|
146
|
-
style: 'normal',
|
|
147
|
-
children: [{ _key: `${key}-p${index}-s`, _type: 'span', text, marks: [] }],
|
|
148
|
-
markDefs: [],
|
|
149
|
-
})),
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* `home` (eleven blocks, the "confident B2B one-pager" composition the L25
|
|
154
|
-
* brief asks for: hero → trust strip → services → numbers → a wide product
|
|
155
|
-
* shot → the full services grid with covers → client outcome → a second
|
|
156
|
-
* voice → questions → call to action → a short about teaser), `about` (the
|
|
157
|
-
* full story plus every real testimonial, mirrored as `quote` blocks so an
|
|
158
|
-
* edit to the collection is visible without touching a page), and
|
|
159
|
-
* `contact` (how to reach the business).
|
|
160
|
-
*
|
|
161
|
-
* A function of `media` (`SeedContext.media`) and the real ids
|
|
162
|
-
* `seedVitrineDemoContent` assigns its own services (`serviceIdBySlug`),
|
|
163
|
-
* not a static const: the hero's `media`, the trust strip's logos, the
|
|
164
|
-
* services grid's covers and the featureGrid's links all need ids only the
|
|
165
|
-
* scaffold knows at seed time. Both parameters default to empty so
|
|
166
|
-
* `buildVitrineDemoPages({})` (the blueprint test's own call, and every
|
|
167
|
-
* other blueprint's equivalent) still renders a complete, valid page —
|
|
168
|
-
* `logoStrip`/`mediaFigure`/the hero's own media are simply omitted rather
|
|
169
|
-
* than emitted with an empty required list.
|
|
170
|
-
*/
|
|
171
|
-
export function buildVitrineDemoPages(media = {}, serviceIdBySlug = new Map()) {
|
|
172
|
-
const serviceLink = (slug) => {
|
|
173
|
-
const id = serviceIdBySlug.get(slug);
|
|
174
|
-
return id === undefined ? undefined : { collection: 'service', id };
|
|
175
|
-
};
|
|
176
|
-
// `logoStrip` (blocks@2.0) requires at least one logo — a media map with
|
|
177
|
-
// no `logo-*` entries (a scaffold with no demo-art seeded, or this
|
|
178
|
-
// function called directly, as the blueprint test does) must therefore
|
|
179
|
-
// omit the whole block rather than emit an empty, contract-invalid one.
|
|
180
|
-
const logoItems = [0, 1, 2, 3, 4]
|
|
181
|
-
.map((index) => media[`logo-${index}`])
|
|
182
|
-
.filter((id) => id !== undefined)
|
|
183
|
-
.map((id, index) => ({ _key: `demo-logo-${index}`, media: id }));
|
|
184
|
-
const [testimonial1, testimonial2, testimonial3] = VITRINE_DEMO_TESTIMONIALS;
|
|
185
|
-
return [
|
|
186
|
-
{
|
|
187
|
-
title: 'Home',
|
|
188
|
-
slug: 'home',
|
|
189
|
-
blocks: [
|
|
190
|
-
{
|
|
191
|
-
_key: 'demo-home-hero',
|
|
192
|
-
_type: 'hero',
|
|
193
|
-
_version: BLOCK_VERSION,
|
|
194
|
-
eyebrow: 'Northfield Consulting · Est. 2011',
|
|
195
|
-
title: 'The consultancy growing companies call before their systems fall over',
|
|
196
|
-
subtitle: 'We handle the six functions that break first when headcount outpaces process — brand, web, growth, operations, finance and security — each led by a partner who has run it, not just advised on it.',
|
|
197
|
-
...(media.hero === undefined ? {} : { media: media.hero }),
|
|
198
|
-
actions: [
|
|
199
|
-
{ label: 'See our services', target: { href: '#services' }, emphasis: 'primary' },
|
|
200
|
-
{ label: 'Get a quote', target: { href: '/contact' } },
|
|
201
|
-
],
|
|
202
|
-
},
|
|
203
|
-
...(logoItems.length === 0
|
|
204
|
-
? []
|
|
205
|
-
: [
|
|
206
|
-
{
|
|
207
|
-
_key: 'demo-home-logos',
|
|
208
|
-
_type: 'logoStrip',
|
|
209
|
-
_version: BLOCK_VERSION,
|
|
210
|
-
logos: logoItems,
|
|
211
|
-
caption: 'Trusted by teams at',
|
|
212
|
-
},
|
|
213
|
-
]),
|
|
214
|
-
{
|
|
215
|
-
_key: 'demo-home-services',
|
|
216
|
-
_type: 'featureGrid',
|
|
217
|
-
_version: BLOCK_VERSION,
|
|
218
|
-
title: 'What we do',
|
|
219
|
-
items: VITRINE_DEMO_SERVICES.map((demo, index) => {
|
|
220
|
-
const link = serviceLink(demo.slug);
|
|
221
|
-
return {
|
|
222
|
-
_key: `demo-service-${index}`,
|
|
223
|
-
icon: demo.icon,
|
|
224
|
-
title: demo.name,
|
|
225
|
-
text: demo.description,
|
|
226
|
-
...(link === undefined ? {} : { link }),
|
|
227
|
-
};
|
|
228
|
-
}),
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
_key: 'demo-home-numbers',
|
|
232
|
-
_type: 'stats',
|
|
233
|
-
_version: BLOCK_VERSION,
|
|
234
|
-
items: [
|
|
235
|
-
{ _key: 'demo-home-stat-1', value: '3', unit: 'weeks', label: 'typical project' },
|
|
236
|
-
{ _key: 'demo-home-stat-2', value: '120', unit: '+', label: 'engagements delivered' },
|
|
237
|
-
{ _key: 'demo-home-stat-3', value: '100', unit: '%', label: 'content you can edit' },
|
|
238
|
-
{ _key: 'demo-home-stat-4', value: '0', label: 'lines of JavaScript shipped' },
|
|
239
|
-
],
|
|
240
|
-
},
|
|
241
|
-
// `mediaFigure.media` (blocks@2.0) is required — with no `shot`
|
|
242
|
-
// media seeded, the block is omitted rather than emitted invalid
|
|
243
|
-
// (same reasoning as `logoStrip` above).
|
|
244
|
-
...(media.shot === undefined
|
|
245
|
-
? []
|
|
246
|
-
: [
|
|
247
|
-
{
|
|
248
|
-
_key: 'demo-home-shot',
|
|
249
|
-
_type: 'mediaFigure',
|
|
250
|
-
_version: BLOCK_VERSION,
|
|
251
|
-
media: media.shot,
|
|
252
|
-
caption: 'The engagement dashboard every Northfield team works from — the same tracker the client sees.',
|
|
253
|
-
ratio: '16:9',
|
|
254
|
-
align: 'wide',
|
|
255
|
-
},
|
|
256
|
-
]),
|
|
257
|
-
{
|
|
258
|
-
_key: 'demo-home-services-grid',
|
|
259
|
-
_type: 'collectionList',
|
|
260
|
-
_version: BLOCK_VERSION,
|
|
261
|
-
title: 'Every service, in detail',
|
|
262
|
-
collection: 'service',
|
|
263
|
-
sort: { field: 'createdAt', direction: 'asc' },
|
|
264
|
-
limit: 10,
|
|
265
|
-
layout: 'grid',
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
_key: 'demo-home-testimonial',
|
|
269
|
-
_type: 'testimonial',
|
|
270
|
-
_version: BLOCK_VERSION,
|
|
271
|
-
quote: richTextParagraph('demo-home-testimonial-quote', testimonial1.quote),
|
|
272
|
-
attribution: {
|
|
273
|
-
name: testimonial1.authorName,
|
|
274
|
-
role: testimonial1.authorRole,
|
|
275
|
-
...(media['avatar-0'] === undefined ? {} : { avatar: media['avatar-0'] }),
|
|
276
|
-
},
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
_key: 'demo-home-quote',
|
|
280
|
-
_type: 'quote',
|
|
281
|
-
_version: BLOCK_VERSION,
|
|
282
|
-
text: testimonial2.quote,
|
|
283
|
-
author: testimonial2.authorName,
|
|
284
|
-
role: testimonial2.authorRole,
|
|
285
|
-
},
|
|
286
|
-
homeFaq(),
|
|
287
|
-
{
|
|
288
|
-
_key: 'demo-home-cta',
|
|
289
|
-
_type: 'cta',
|
|
290
|
-
_version: BLOCK_VERSION,
|
|
291
|
-
title: 'Ready to get started?',
|
|
292
|
-
text: 'Book a thirty-minute call and leave with a scoped, fixed-price plan — not a follow-up email promising one.',
|
|
293
|
-
actions: [{ label: 'Get a quote', target: { href: '/contact' }, emphasis: 'primary' }],
|
|
294
|
-
},
|
|
295
|
-
proseParagraph('demo-home-about-teaser', `${testimonial3.authorName}'s operations review is one of well over a hundred engagements like it since Northfield opened in 2011. Read the founding story, and the rest of our client list, on the About page.`),
|
|
296
|
-
],
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
title: 'About',
|
|
300
|
-
slug: 'about',
|
|
301
|
-
blocks: [
|
|
302
|
-
proseBlock('demo-about-prose', [
|
|
303
|
-
'Northfield Consulting opened in 2011 with a simple complaint: growing companies were buying six different kinds of help from six different vendors, none of whom talked to each other, and paying for the seams as much as the work.',
|
|
304
|
-
'We built one practice instead — brand, web, growth, operations, finance and security — staffed by partners who have actually run each function inside a company, not just advised one from the outside. A single point of contact means the web team knows what the brand team decided, and the finance model reflects what operations actually changed.',
|
|
305
|
-
'Fifteen years and well over a hundred engagements later, the test we hold ourselves to has not changed: does the client still need us in the room a quarter after we leave? Most of the answers on this page came from clients who told us no, and meant it as a compliment.',
|
|
306
|
-
]),
|
|
307
|
-
// Every testimonial from the real, editable collection, mirrored
|
|
308
|
-
// here as `quote` blocks — unlike `service` (routed above, so a
|
|
309
|
-
// link can point at it), a testimonial has no page of its own
|
|
310
|
-
// worth linking to, and `quote` — text/author/role, contract B's
|
|
311
|
-
// vocabulary block for exactly this — is the honest fit.
|
|
312
|
-
...VITRINE_DEMO_TESTIMONIALS.map((demo, index) => ({
|
|
313
|
-
_key: `demo-about-quote-${index + 1}`,
|
|
314
|
-
_type: 'quote',
|
|
315
|
-
_version: BLOCK_VERSION,
|
|
316
|
-
text: demo.quote,
|
|
317
|
-
author: demo.authorName,
|
|
318
|
-
role: demo.authorRole,
|
|
319
|
-
})),
|
|
320
|
-
],
|
|
321
|
-
},
|
|
322
|
-
{
|
|
323
|
-
title: 'Contact',
|
|
324
|
-
slug: 'contact',
|
|
325
|
-
blocks: [
|
|
326
|
-
proseParagraph('demo-contact-prose', 'Tell us what you are trying to get done and which of the six practices it touches — brand, web, growth, operations, finance, or security. We will tell you honestly whether we can help on the first call, no discovery deck required.'),
|
|
327
|
-
{
|
|
328
|
-
_key: 'demo-contact-cta',
|
|
329
|
-
_type: 'cta',
|
|
330
|
-
_version: BLOCK_VERSION,
|
|
331
|
-
title: 'Get a quote',
|
|
332
|
-
text: 'Thirty minutes, no obligation. We reply the same business day.',
|
|
333
|
-
actions: [
|
|
334
|
-
{
|
|
335
|
-
label: 'Email us',
|
|
336
|
-
target: { href: 'mailto:hello@example.com' },
|
|
337
|
-
emphasis: 'primary',
|
|
338
|
-
},
|
|
339
|
-
],
|
|
340
|
-
},
|
|
341
|
-
],
|
|
342
|
-
},
|
|
343
|
-
];
|
|
344
|
-
}
|
|
345
|
-
function homeFaq() {
|
|
346
|
-
const items = [
|
|
347
|
-
[
|
|
348
|
-
'How long does a typical engagement take?',
|
|
349
|
-
'Most engagements run three to six weeks end to end. We scope and price the whole thing on a single call before a single hour is billed, so there is no discovery-phase invoice waiting at the end.',
|
|
350
|
-
],
|
|
351
|
-
[
|
|
352
|
-
'Do we own everything once the project ships?',
|
|
353
|
-
'Yes — the site, the brand files, the models and the source are yours outright. Northfield keeps no retainer requirement and no lock-in: change a phone number, swap a testimonial, or walk away entirely, all without calling us first.',
|
|
354
|
-
],
|
|
355
|
-
[
|
|
356
|
-
'Can we start with just one service?',
|
|
357
|
-
'Most clients do. Brand strategy and web design & build are the two most common starting points, and roughly half of our clients come back for a second service once the first one has paid for itself.',
|
|
358
|
-
],
|
|
359
|
-
[
|
|
360
|
-
'How do you price a project?',
|
|
361
|
-
'A fixed quote after a short discovery call, scoped to the outcome you actually need — never an open-ended hourly rate with no ceiling and no way to budget against it.',
|
|
362
|
-
],
|
|
363
|
-
];
|
|
364
|
-
return {
|
|
365
|
-
_key: 'demo-home-faq',
|
|
366
|
-
_type: 'faq',
|
|
367
|
-
_version: BLOCK_VERSION,
|
|
368
|
-
title: 'Questions we hear often',
|
|
369
|
-
items: items.map(([question, answer], index) => ({
|
|
370
|
-
_key: `demo-home-faq-${index}`,
|
|
371
|
-
question,
|
|
372
|
-
answer: richTextParagraph(`demo-home-faq-${index}-a`, answer),
|
|
373
|
-
})),
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
/** `VITRINE_DEMO_PAGES` — the fixed-shape alias every existing caller (and `blueprint-demo-blocks.test.ts`) used before L25's media-driven rewrite. Equivalent to `buildVitrineDemoPages({})`. */
|
|
377
|
-
export const VITRINE_DEMO_PAGES = buildVitrineDemoPages({});
|
|
378
|
-
export const VITRINE_RECOMMENDED_AGENTS = [
|
|
379
|
-
{
|
|
380
|
-
name: 'seoAgent',
|
|
381
|
-
package: '@cogenta/agents-builtin',
|
|
382
|
-
reason: 'Audits the one-pager for on-page SEO issues before it goes live.',
|
|
383
|
-
},
|
|
384
|
-
{
|
|
385
|
-
name: 'performanceAgent',
|
|
386
|
-
package: '@cogenta/agents-builtin',
|
|
387
|
-
reason: 'Catches oversized hero media and third-party scripts that would slow the landing page down.',
|
|
388
|
-
},
|
|
389
|
-
];
|
|
390
|
-
/**
|
|
391
|
-
* `vitrine`'s own starting skin (`starting-skins.js`) — asserted present
|
|
392
|
-
* with a real check, not a `!`, since `STARTING_SKINS` is keyed by
|
|
393
|
-
* blueprint id and TypeScript cannot see that this particular key is
|
|
394
|
-
* always populated.
|
|
395
|
-
*/
|
|
396
|
-
function vitrinePalette() {
|
|
397
|
-
const skin = STARTING_SKINS.vitrine;
|
|
398
|
-
if (skin === undefined) {
|
|
399
|
-
// Same code `resolveBlueprint` (`registry.ts`) uses for its own
|
|
400
|
-
// "this cannot happen unless the registry itself is broken" guard —
|
|
401
|
-
// this is a bug in starting-skins.ts, never a user-facing condition.
|
|
402
|
-
throw new CogentaError({
|
|
403
|
-
code: 'BLUEPRINT_REGISTRY_CORRUPT',
|
|
404
|
-
message: 'STARTING_SKINS.vitrine is missing.',
|
|
405
|
-
hint: 'The "vitrine" entry must stay declared in starting-skins.ts for this blueprint to render its demo art.',
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
return skin.color;
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Procedural visuals this blueprint seeds (L25): a flat geometric hero
|
|
412
|
-
* backdrop, five neutral client logos for the trust strip, one wide cover
|
|
413
|
-
* for the engagement-dashboard figure, one avatar per testimonial, and one
|
|
414
|
-
* cover photo per demo service — all from the same starting-skin palette
|
|
415
|
-
* (`starting-skins.js`) this blueprint already ships.
|
|
416
|
-
*/
|
|
417
|
-
export const VITRINE_MEDIA_SPECS = [
|
|
418
|
-
{
|
|
419
|
-
name: 'hero',
|
|
420
|
-
spec: heroArt(vitrinePalette(), 'sun', 61),
|
|
421
|
-
alt: 'A consulting team at work',
|
|
422
|
-
photo: 'vitrine/hero.jpg',
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
name: 'shot',
|
|
426
|
-
spec: coverArt(vitrinePalette(), 62),
|
|
427
|
-
alt: 'The engagement dashboard',
|
|
428
|
-
photo: 'vitrine/dashboard.jpg',
|
|
429
|
-
},
|
|
430
|
-
...[0, 1, 2, 3, 4].map((index) => ({
|
|
431
|
-
name: `logo-${index}`,
|
|
432
|
-
spec: logoArt(70 + index),
|
|
433
|
-
alt: `Client logo ${index + 1}`,
|
|
434
|
-
})),
|
|
435
|
-
...VITRINE_DEMO_TESTIMONIALS.map((demo, index) => ({
|
|
436
|
-
name: `avatar-${index}`,
|
|
437
|
-
spec: avatarArt(vitrinePalette(), 80 + index),
|
|
438
|
-
alt: `Portrait of ${demo.authorName}`,
|
|
439
|
-
photo: `vitrine/avatar-${index + 1}.jpg`,
|
|
440
|
-
})),
|
|
441
|
-
...VITRINE_DEMO_SERVICES.map((demo, index) => ({
|
|
442
|
-
name: `service-${demo.slug}`,
|
|
443
|
-
spec: coverArt(vitrinePalette(), 90 + index),
|
|
444
|
-
alt: `${demo.name} cover art`,
|
|
445
|
-
})),
|
|
446
|
-
];
|
|
447
|
-
/** Header/footer navigation and the header call-to-action button (L25, D4). */
|
|
448
|
-
export const VITRINE_MENUS = {
|
|
449
|
-
header: [
|
|
450
|
-
{ label: 'Services', url: '/services/brand-strategy' },
|
|
451
|
-
{ label: 'About', url: '/about' },
|
|
452
|
-
{ label: 'Case studies', url: '#' },
|
|
453
|
-
{ label: 'Contact', url: '/contact' },
|
|
454
|
-
],
|
|
455
|
-
footer: [
|
|
456
|
-
{ label: 'Services', url: '/services/brand-strategy' },
|
|
457
|
-
{ label: 'Company', url: '/about' },
|
|
458
|
-
{ label: 'Legal', url: '#' },
|
|
459
|
-
],
|
|
460
|
-
headerAction: { label: 'Get a quote', url: '/contact' },
|
|
461
|
-
};
|
|
462
|
-
export const VITRINE_SITE_SETTINGS = {
|
|
463
|
-
'general.tagline': 'A consultancy that runs like software.',
|
|
464
|
-
'general.socialLinks': [
|
|
465
|
-
{ label: 'LinkedIn', url: 'https://linkedin.com/company/example' },
|
|
466
|
-
{ label: 'X', url: 'https://x.com/example' },
|
|
467
|
-
{ label: 'YouTube', url: 'https://youtube.com/@example' },
|
|
468
|
-
],
|
|
469
|
-
'general.footerNote': '1 Market Street, Suite 400, San Francisco, CA 94105',
|
|
470
|
-
};
|
|
471
|
-
/**
|
|
472
|
-
* Inserts the `vitrine` blueprint's demo content through the real
|
|
473
|
-
* `ContentStore` — never mocked (house rule). Services are created first so
|
|
474
|
-
* their real ids exist for the home page's `featureGrid` links and, via
|
|
475
|
-
* `media`, for their own `coverImage`.
|
|
476
|
-
*/
|
|
477
|
-
async function seedVitrineDemoContent(ctx) {
|
|
478
|
-
const { db, defaultLocale, adminId, media } = ctx;
|
|
479
|
-
const serviceStore = createContentStore({ db, collection: service, defaultLocale });
|
|
480
|
-
const testimonialStore = createContentStore({ db, collection: testimonial, defaultLocale });
|
|
481
|
-
const pageStore = createContentStore({ db, collection: page, defaultLocale });
|
|
482
|
-
const serviceIdBySlug = new Map();
|
|
483
|
-
for (const demo of VITRINE_DEMO_SERVICES) {
|
|
484
|
-
const cover = media[`service-${demo.slug}`];
|
|
485
|
-
const created = await serviceStore.create({
|
|
486
|
-
status: 'published',
|
|
487
|
-
createdBy: adminId,
|
|
488
|
-
values: {
|
|
489
|
-
name: demo.name,
|
|
490
|
-
slug: demo.slug,
|
|
491
|
-
description: demo.description,
|
|
492
|
-
icon: demo.icon,
|
|
493
|
-
...(cover === undefined ? {} : { coverImage: cover }),
|
|
494
|
-
},
|
|
495
|
-
});
|
|
496
|
-
serviceIdBySlug.set(demo.slug, created.id);
|
|
497
|
-
}
|
|
498
|
-
for (const [index, demo] of VITRINE_DEMO_TESTIMONIALS.entries()) {
|
|
499
|
-
const avatar = media[`avatar-${index}`];
|
|
500
|
-
await testimonialStore.create({
|
|
501
|
-
status: 'published',
|
|
502
|
-
createdBy: adminId,
|
|
503
|
-
values: {
|
|
504
|
-
authorName: demo.authorName,
|
|
505
|
-
authorRole: demo.authorRole,
|
|
506
|
-
quote: demo.quote,
|
|
507
|
-
...(avatar === undefined ? {} : { avatar }),
|
|
508
|
-
},
|
|
509
|
-
});
|
|
510
|
-
}
|
|
511
|
-
for (const demo of buildVitrineDemoPages(media, serviceIdBySlug)) {
|
|
512
|
-
await pageStore.create({
|
|
513
|
-
status: 'published',
|
|
514
|
-
createdBy: adminId,
|
|
515
|
-
values: { title: demo.title, slug: demo.slug },
|
|
516
|
-
blocks: { blocks: demo.blocks.map(toBlockZoneEntry) },
|
|
517
|
-
});
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
export const vitrineContentPack = {
|
|
521
|
-
collections: VITRINE_COLLECTIONS,
|
|
522
|
-
recommendedAgents: VITRINE_RECOMMENDED_AGENTS,
|
|
523
|
-
seedDemoContent: seedVitrineDemoContent,
|
|
524
|
-
defaultTheme: '@cogenta/theme-entreprise',
|
|
525
|
-
menus: VITRINE_MENUS,
|
|
526
|
-
siteSettings: VITRINE_SITE_SETTINGS,
|
|
527
|
-
mediaSpecs: VITRINE_MEDIA_SPECS,
|
|
528
|
-
};
|
|
529
|
-
//# sourceMappingURL=vitrine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vitrine.js","sourceRoot":"","sources":["../../src/blueprints/vitrine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { SkinTokens } from '@cogenta/render';
|
|
2
|
-
import { type ArtSpec } from './render.js';
|
|
3
|
-
/**
|
|
4
|
-
* Ready-made compositions for `demo-art` (D1/D5, `docs/lots/L25-templates-pro.md`).
|
|
5
|
-
* Each preset takes a `palette` — the same shape as `SkinTokens.color`
|
|
6
|
-
* (`packages/create-cogenta/src/blueprints/starting-skins.ts`), so any
|
|
7
|
-
* blueprint's starting skin is a valid palette with no translation step —
|
|
8
|
-
* and returns an {@link ArtSpec} `render.ts` can turn into a PNG.
|
|
9
|
-
*
|
|
10
|
-
* D5 (2026-09-05, binding): **zero gradients, zero glow, zero blur.** Every
|
|
11
|
-
* composition below is built only from flat, opaque shapes — solid colour
|
|
12
|
-
* fields, crisp geometric marks, dot/line grids, hard-edged bands, a
|
|
13
|
-
* checkerboard, and hard-edged organic blobs — the register of Swiss/
|
|
14
|
-
* editorial flat design (Basecamp, Notion, Stripe's docs illustrations,
|
|
15
|
-
* Apple's marketing graphics), never a "mesh gradient" landing-page look.
|
|
16
|
-
* `render.ts`'s `gradient`/`glow`/`vignette` layer kinds stay defined and
|
|
17
|
-
* tested there (a capability, not a ban) — nothing in this file ever emits
|
|
18
|
-
* one; `test/demo-art/flat-design.test.ts` holds that line.
|
|
19
|
-
*/
|
|
20
|
-
export type Palette = SkinTokens['color'];
|
|
21
|
-
/**
|
|
22
|
-
* `mesh`/`geometric`/`diagonal`/`radial`/`dark`/`warm` are the names every
|
|
23
|
-
* existing caller compiles against; `grid`/`blocks`/`bands`/`rings`/`ink`/
|
|
24
|
-
* `sun` are the same six families under names that describe what they
|
|
25
|
-
* actually render now that D5 removed the gradients the old names referred
|
|
26
|
-
* to. Both spellings of a given family always render identically.
|
|
27
|
-
*/
|
|
28
|
-
export type HeroVariant = 'mesh' | 'geometric' | 'diagonal' | 'radial' | 'dark' | 'warm' | 'grid' | 'blocks' | 'bands' | 'rings' | 'ink' | 'sun';
|
|
29
|
-
/**
|
|
30
|
-
* A 1600×1000 hero visual. Every theme frames the hero's media beside the
|
|
31
|
-
* title — a picture next to the text, never a backdrop under it — so the
|
|
32
|
-
* composition fills the whole canvas like a poster: an early version kept
|
|
33
|
-
* the left half a single flat colour "for the title" and rendered as a
|
|
34
|
-
* mostly blank frame on every home page. `variant` names one of the flat
|
|
35
|
-
* poster families (the same builders `coverArt` picks from, at hero size);
|
|
36
|
-
* the older names (`mesh`, `geometric`, `diagonal`, `radial`, `dark`, `warm`)
|
|
37
|
-
* stay as aliases so no blueprint needs to change.
|
|
38
|
-
*/
|
|
39
|
-
export declare function heroArt(palette: Palette, variant?: HeroVariant, seed?: number): ArtSpec;
|
|
40
|
-
/** A family of ≥8 visibly different, flat layouts from one palette, picked deterministically by `seed` (D5: colour blocks, grid & node, stripe bands, concentric rings, editorial marks, isometric stacks, arch & sun, checker/half-tone, duotone blobs). */
|
|
41
|
-
export declare function coverArt(palette: Palette, seed?: number): ArtSpec;
|
|
42
|
-
/** A 600×600 abstract "person" mark: a disc (head) over a disc (shoulders, cropped by the frame edge) on a flat companion-tone field — never a real photo of a person. */
|
|
43
|
-
export declare function avatarArt(palette: Palette, seed?: number): ArtSpec;
|
|
44
|
-
/** A 400×160 neutral, abstract wordmark stand-in — a geometric mark plus two bars, always in flat mid-grey so it reads as a client logo in a logo strip, never a real brand. 8 distinct marks across seeds. */
|
|
45
|
-
export declare function logoArt(seed?: number): ArtSpec;
|
|
46
|
-
/** A 1000×1000 centred, flat stylised object — a store's demo catalogue. Hard offset shadows (a darker solid shape, never blurred), a solid or two-tone backdrop, a floor line, one flat highlight shape per object. 6 shapes across seeds. */
|
|
47
|
-
export declare function productArt(palette: Palette, seed?: number): ArtSpec;
|
|
48
|
-
//# sourceMappingURL=compositions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compositions.d.ts","sourceRoot":"","sources":["../../src/demo-art/compositions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAiB,KAAK,OAAO,EAAwC,MAAM,aAAa,CAAA;AAE/F;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AA+IzC;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,UAAU,GACV,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,OAAO,GACP,OAAO,GACP,KAAK,GACL,KAAK,CAAA;AAsBT;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,WAAoB,EAAE,IAAI,SAAI,GAAG,OAAO,CA4B1F;AA4OD,6PAA6P;AAC7P,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,SAAI,GAAG,OAAO,CAc5D;AAMD,0KAA0K;AAC1K,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,SAAI,GAAG,OAAO,CAyB7D;AAOD,+MAA+M;AAC/M,wBAAgB,OAAO,CAAC,IAAI,SAAI,GAAG,OAAO,CAoHzC;AAMD,+OAA+O;AAC/O,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,SAAI,GAAG,OAAO,CAuM9D"}
|