@marktiderman/genesis-sites 0.2.0 → 0.3.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/README.md +89 -5
- package/dist/assets/sites-forms.732cc7e0c1.css +10 -0
- package/dist/assets/sites-forms.css +1 -1
- package/dist/assets/sites.716b4ac1a5.css +2 -0
- package/dist/assets/sites.css +1 -1
- package/dist/assets.generated-QSB7EJWX.js +3 -0
- package/dist/assets.generated-QSB7EJWX.js.map +1 -0
- package/dist/chunk-5IXDFFEG.js +465 -0
- package/dist/chunk-5IXDFFEG.js.map +1 -0
- package/dist/{chunk-IXMY4B56.js → chunk-FBQF2L7O.js} +90 -89
- package/dist/chunk-FBQF2L7O.js.map +1 -0
- package/dist/chunk-H6ED3K4R.js +18 -0
- package/dist/chunk-H6ED3K4R.js.map +1 -0
- package/dist/chunk-KPOX7D4S.js +250 -0
- package/dist/chunk-KPOX7D4S.js.map +1 -0
- package/dist/editor.d.ts +526 -0
- package/dist/editor.js +2480 -0
- package/dist/editor.js.map +1 -0
- package/dist/handler-QHH453YG.js +9 -0
- package/dist/handler-QHH453YG.js.map +1 -0
- package/dist/import.d.ts +2 -2
- package/dist/index.d.ts +11 -5
- package/dist/index.js +2 -249
- package/dist/index.js.map +1 -1
- package/dist/{registry-D_DCWRTc.d.ts → registry-HBn1X60x.d.ts} +1 -1
- package/dist/sections.d.ts +1 -1
- package/dist/{store-DkSycDhq.d.ts → store-BXiZeZzH.d.ts} +2 -2
- package/dist/supabase.d.ts +3 -3
- package/dist/supabase.js +2 -2
- package/dist/web.d.ts +4 -4
- package/dist/web.js +6 -476
- package/dist/web.js.map +1 -1
- package/package.json +13 -3
- package/dist/assets/sites-forms.4e6aa42497.css +0 -10
- package/dist/assets/sites.e1ffd2708b.css +0 -2
- package/dist/chunk-IXMY4B56.js.map +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { ASSETS_PREFIX, handleSiteRequest, renderSitePageToString } from './chunk-5IXDFFEG.js';
|
|
2
|
+
import './chunk-C375ZPU2.js';
|
|
3
|
+
import './chunk-VZUDRPFG.js';
|
|
4
|
+
import './chunk-FBQF2L7O.js';
|
|
5
|
+
import './chunk-ZGWGQGT2.js';
|
|
6
|
+
import './chunk-3VKTBE7S.js';
|
|
7
|
+
import './chunk-H6ED3K4R.js';
|
|
8
|
+
//# sourceMappingURL=handler-QHH453YG.js.map
|
|
9
|
+
//# sourceMappingURL=handler-QHH453YG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"handler-QHH453YG.js"}
|
package/dist/import.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { S as SiteStore } from './store-
|
|
1
|
+
import { S as SiteStore } from './store-BXiZeZzH.js';
|
|
2
2
|
import { LookupOptions, LookupAddress } from 'node:dns';
|
|
3
|
-
import './registry-
|
|
3
|
+
import './registry-HBn1X60x.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import '@marktiderman/genesis-design-system';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { B as BUILT_IN_SECTION_TYPES,
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
1
|
+
import { f as SectionNode, a as PageDoc, A as AnySectionDefinition, g as SiteDoc, h as ReleasePage, i as PostSummary, L as LivePost, j as Redirect, k as Link, l as SiteDocInput, P as PageKind } from './registry-HBn1X60x.js';
|
|
2
|
+
export { B as BUILT_IN_SECTION_TYPES, m as BuiltInSectionType, C as Copy, n as FileRef, o as FontChoice, F as FormsResolver, p as FormsResolverContext, H as Href, I as Image, q as ImportPost, r as ImportPostsResult, s as Line, t as LinkEvent, M as MAX_DOC_BYTES, u as MAX_IMPORT_POSTS, v as MAX_LIVE_POSTS, w as MenuItem, b as PageMeta, x as PagePath, y as PostAuthor, z as PostDoc, D as PostDocInput, E as PostDraft, G as PostMeta, J as PostSlug, K as PostStatus, N as PostSummarySchema, O as PostsContext, Q as RegisterSectionOptions, R as Release, T as ReleaseMeta, U as ReleaseSnapshot, c as RenderContext, d as ResolvedForm, V as RichText, W as SECTION_CATEGORIES, X as SavePostInput, Y as SavePostResult, S as SectionCategory, Z as SectionDefinition, _ as SectionDefinitionError, $ as SectionId, a0 as SectionManifest, a1 as SectionPlacement, a2 as SectionPreset, a3 as SectionRenderProps, a4 as SectionVariant, e as Seo, a5 as SeoDefaults, a6 as Surface, a7 as TokenOverrides, a8 as defineSection, a9 as getSection, aa as isPlainEmail, ab as listSections, ac as mailtoHref, ad as newSectionId, ae as nodeFromPreset, af as opensInNewTab, ag as parseSnapshot, ah as postSummary, ai as registerBuiltInSection, aj as registerSection, ak as richTextPlain, al as sectionJsonSchema, am as sectionManifests, an as unregisterSection, ao as validatePostSlug } from './registry-HBn1X60x.js';
|
|
3
|
+
import { d as SiteBrand, B as BrandInput } from './store-BXiZeZzH.js';
|
|
4
|
+
export { e as ASSET_TYPES, A as Asset, a as AssetMeta, f as BrandSource, C as CheckReleaseOptions, D as DEFAULT_RESERVED_PATHS, F as FONT_CHOICES, g as FontInfo, I as InvalidationInfo, M as MAX_PAGE_PATH_LENGTH, h as MAX_URL_LENGTH, i as MemorySiteStore, j as MemoryStoreOptions, N as NewPage, k as NewSite, l as PAGE_PATH, m as PageDraft, n as PreparedRelease, o as PublishBlockedError, P as PublishOptions, R as ReservedPaths, c as SaveResult, p as SiteConflictError, q as SiteDraft, b as SiteIssue, S as SiteStore, r as SiteTheme, T as ThemePair, s as assetPath, t as brandDisplayName, u as checkBlog, v as checkContrast, w as checkHtmlOutline, x as checkPage, y as checkPost, z as checkRelease, E as checkSiteDoc, G as contrastRatio, H as createMemorySiteStore, J as formCacheTag, K as hexToHslTriplet, L as isConflict, O as isExternalHref, Q as isPublishable, U as isReservedPath, V as isSafeHref, W as isSafeImageSrc, X as isSiteBrand, Y as luminance, Z as mix, _ as normalizeRequestPath, $ as pagePathProblems, a0 as parseHex, a1 as prepareImportPost, a2 as prepareRelease, a3 as siteCacheTag, a4 as siteTheme, a5 as stableHash, a6 as themeCss, a7 as toCanonicalBrand, a8 as validatePagePath, a9 as withCacheInvalidation } from './store-BXiZeZzH.js';
|
|
5
5
|
import 'react';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import '@marktiderman/genesis-design-system';
|
|
@@ -27,14 +27,20 @@ interface MigratedNode {
|
|
|
27
27
|
node: (SectionNode & {
|
|
28
28
|
variant: string;
|
|
29
29
|
}) | null;
|
|
30
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Whether the stored node needs re-saving: its version or variant moved, or a
|
|
32
|
+
* migration step changed its props. Parsing alone is no change: zod's key
|
|
33
|
+
* order, its defaults and the keys it strips make the same section.
|
|
34
|
+
*/
|
|
31
35
|
changed: boolean;
|
|
32
36
|
issues: MigrationIssue[];
|
|
33
37
|
}
|
|
34
38
|
/** Bring one node up to its section's current version and check its props. */
|
|
35
39
|
declare function migrateNode(node: SectionNode, lookup?: (type: string) => AnySectionDefinition | undefined): MigratedNode;
|
|
36
40
|
interface MigratedPage {
|
|
41
|
+
/** The page with every node that can be shown parsed (what a release holds). */
|
|
37
42
|
doc: PageDoc;
|
|
43
|
+
/** Whether the draft needs re-saving (see `MigratedNode.changed`). */
|
|
38
44
|
changed: boolean;
|
|
39
45
|
issues: MigrationIssue[];
|
|
40
46
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,254 +1,7 @@
|
|
|
1
|
+
export { exampleBrands, landingPage, onePageSite, starterSite } from './chunk-KPOX7D4S.js';
|
|
1
2
|
export { isPlainEmail, mailtoHref } from './chunk-VZUDRPFG.js';
|
|
2
|
-
|
|
3
|
-
export { ASSET_TYPES, FONT_CHOICES, PublishBlockedError, SiteConflictError, assetPath, brandDisplayName, checkBlog, checkContrast, checkHtmlOutline, checkPage, checkPost, checkRelease, checkSiteDoc, contrastRatio, createMemorySiteStore, formCacheTag, hexToHslTriplet, isConflict, isPublishable, isSiteBrand, luminance, migrateNode, migratePage, migrateSite, mix, parseHex, prepareImportPost, prepareRelease, siteCacheTag, siteTheme, stableHash, themeCss, toCanonicalBrand, withCacheInvalidation } from './chunk-IXMY4B56.js';
|
|
3
|
+
export { ASSET_TYPES, FONT_CHOICES, PublishBlockedError, SiteConflictError, assetPath, brandDisplayName, checkBlog, checkContrast, checkHtmlOutline, checkPage, checkPost, checkRelease, checkSiteDoc, contrastRatio, createMemorySiteStore, formCacheTag, hexToHslTriplet, isConflict, isPublishable, isSiteBrand, luminance, migrateNode, migratePage, migrateSite, mix, parseHex, prepareImportPost, prepareRelease, siteCacheTag, siteTheme, stableHash, themeCss, toCanonicalBrand, withCacheInvalidation } from './chunk-FBQF2L7O.js';
|
|
4
4
|
export { BUILT_IN_SECTION_TYPES, Copy, FileRef, FontChoice, Href, Image, Line, Link, LinkEvent, MAX_DOC_BYTES, MAX_IMPORT_POSTS, MAX_LIVE_POSTS, MenuItem, PageDoc, PageKind, PagePath, PostAuthor, PostDoc, PostSlug, PostSummarySchema, Redirect, ReleasePage, ReleaseSnapshot, RichText, SECTION_CATEGORIES, SectionDefinitionError, SectionId, SectionNode, Seo, SeoDefaults, SiteDoc, Surface, TokenOverrides, absoluteUrl, articleJsonLd, breadcrumbJsonLd, defineSection, escapeXml, getSection, listSections, matchRedirect, newSectionId, nodeFromPreset, opensInNewTab, organizationJsonLd, pageMeta, pageTitle, parseSnapshot, postDescription, postPath, postSummary, redirectsAfterMove, registerBuiltInSection, registerSection, richTextPlain, robotsTxt, rssXml, safeJsonForHtml, sectionJsonSchema, sectionManifests, sitemapXml, unregisterSection, validatePostSlug, websiteJsonLd } from './chunk-ZGWGQGT2.js';
|
|
5
5
|
export { DEFAULT_RESERVED_PATHS, MAX_PAGE_PATH_LENGTH, MAX_URL_LENGTH, PAGE_PATH, isExternalHref, isReservedPath, isSafeHref, isSafeImageSrc, normalizeRequestPath, pagePathProblems, validatePagePath } from './chunk-3VKTBE7S.js';
|
|
6
|
-
|
|
7
|
-
// src/core/templates.ts
|
|
8
|
-
var year = () => (/* @__PURE__ */ new Date()).getUTCFullYear();
|
|
9
|
-
function node(id, type, variant, props, extra = {}) {
|
|
10
|
-
return { id, type, v: 1, variant, props, ...extra };
|
|
11
|
-
}
|
|
12
|
-
function footerNode(name, contact, variant = "simple") {
|
|
13
|
-
const links = [];
|
|
14
|
-
if (contact?.email) links.push({ label: contact.email, href: `mailto:${contact.email}` });
|
|
15
|
-
if (contact?.phone) links.push({ label: contact.phone, href: `tel:${contact.phone.replace(/[^+\d]/g, "")}` });
|
|
16
|
-
return node("footer", "footer", variant, {
|
|
17
|
-
...links.length ? { links } : {},
|
|
18
|
-
copyright: `\xA9 ${year()} ${name}`
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
function seo(name, message) {
|
|
22
|
-
return {
|
|
23
|
-
titleTemplate: `%s \xB7 ${name}`,
|
|
24
|
-
...message.subhead ? { description: message.subhead.slice(0, 200) } : {},
|
|
25
|
-
organization: { name }
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function primaryCta(input) {
|
|
29
|
-
return input.message.cta ?? { label: "Get in touch", href: "#contact" };
|
|
30
|
-
}
|
|
31
|
-
function benefitsNode(message) {
|
|
32
|
-
if (message.benefits?.length) {
|
|
33
|
-
return node("features", "features", "grid", {
|
|
34
|
-
heading: "What you get",
|
|
35
|
-
items: message.benefits.slice(0, 12).map((b, i) => ({ title: b.title, body: b.body, icon: ["check", "star", "heart", "zap", "shield", "clock"][i % 6] }))
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
return node(
|
|
39
|
-
"features",
|
|
40
|
-
"features",
|
|
41
|
-
"grid",
|
|
42
|
-
{
|
|
43
|
-
heading: "What you get",
|
|
44
|
-
items: [
|
|
45
|
-
{ title: "Your first offer", body: "Say what someone gets and why it matters to them.", icon: "check" },
|
|
46
|
-
{ title: "Your second offer", body: "Keep each one to a sentence or two.", icon: "star" },
|
|
47
|
-
{ title: "Your third offer", body: "Three is plenty for a landing page.", icon: "heart" }
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{ placeholder: true }
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
var testimonialsNode = () => node(
|
|
54
|
-
"testimonials",
|
|
55
|
-
"testimonials",
|
|
56
|
-
"grid",
|
|
57
|
-
{
|
|
58
|
-
heading: "What people say",
|
|
59
|
-
items: [
|
|
60
|
-
{ quote: "Add a quote from someone you have helped, in their words and with their permission.", name: "Their name", role: "What they did with you" },
|
|
61
|
-
{ quote: "A second quote, from someone different.", name: "Their name" }
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
{ placeholder: true }
|
|
65
|
-
);
|
|
66
|
-
function formNode(input) {
|
|
67
|
-
if (!input.form) return null;
|
|
68
|
-
return node("contact", "form-embed", "split", {
|
|
69
|
-
heading: input.form.heading ?? "Get in touch",
|
|
70
|
-
...input.form.body ? { body: input.form.body } : { body: "Tell us a little about yourself and we'll get back to you." },
|
|
71
|
-
form: input.form.slug,
|
|
72
|
-
anchor: "contact"
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
function landingPage(input) {
|
|
76
|
-
const name = brandDisplayName(input.brand);
|
|
77
|
-
const cta = primaryCta(input);
|
|
78
|
-
const form = formNode(input);
|
|
79
|
-
const content = [
|
|
80
|
-
node("hero", "hero", "centered", {
|
|
81
|
-
heading: input.message.headline,
|
|
82
|
-
...input.message.subhead ? { body: input.message.subhead } : {},
|
|
83
|
-
primaryCta: cta
|
|
84
|
-
}),
|
|
85
|
-
benefitsNode(input.message),
|
|
86
|
-
testimonialsNode(),
|
|
87
|
-
node("cta", "cta", "banner", { heading: "Ready when you are", primaryCta: cta, surface: "accent" })
|
|
88
|
-
];
|
|
89
|
-
if (form) content.push(form);
|
|
90
|
-
return {
|
|
91
|
-
site: {
|
|
92
|
-
schemaVersion: 1,
|
|
93
|
-
name,
|
|
94
|
-
header: [node("nav", "nav", "minimal", { cta })],
|
|
95
|
-
nav: [],
|
|
96
|
-
footer: [footerNode(name, input.contact, "minimal")],
|
|
97
|
-
seo: seo(name, input.message)
|
|
98
|
-
},
|
|
99
|
-
pages: [{ path: "/", kind: "landing", doc: { schemaVersion: 1, root: { props: { title: input.message.headline.slice(0, 120) } }, content, seo: input.message.subhead ? { description: input.message.subhead.slice(0, 200) } : void 0 } }]
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function onePageSite(input) {
|
|
103
|
-
const brand = { name: input.name, colors: input.colors, ...input.fonts ? { fonts: input.fonts } : {}, ...input.logo ? { logo: input.logo } : {} };
|
|
104
|
-
const cta = input.message.cta ?? (input.contact?.email ? { label: "Email us", href: `mailto:${input.contact.email}` } : { label: "Get in touch", href: "#contact" });
|
|
105
|
-
return {
|
|
106
|
-
brand,
|
|
107
|
-
site: {
|
|
108
|
-
schemaVersion: 1,
|
|
109
|
-
name: input.name,
|
|
110
|
-
header: [node("nav", "nav", "minimal", { cta })],
|
|
111
|
-
nav: [],
|
|
112
|
-
footer: [footerNode(input.name, input.contact)],
|
|
113
|
-
seo: seo(input.name, input.message)
|
|
114
|
-
},
|
|
115
|
-
pages: [
|
|
116
|
-
{
|
|
117
|
-
path: "/",
|
|
118
|
-
kind: "page",
|
|
119
|
-
doc: {
|
|
120
|
-
schemaVersion: 1,
|
|
121
|
-
root: { props: { title: input.message.headline.slice(0, 120) } },
|
|
122
|
-
content: [
|
|
123
|
-
node("hero", "hero", "centered", {
|
|
124
|
-
heading: input.message.headline,
|
|
125
|
-
...input.message.subhead ? { body: input.message.subhead } : {},
|
|
126
|
-
primaryCta: cta
|
|
127
|
-
}),
|
|
128
|
-
node("contact", "cta", "card", { heading: `Talk to ${input.name}`, primaryCta: cta, anchor: "contact" })
|
|
129
|
-
],
|
|
130
|
-
...input.message.subhead ? { seo: { description: input.message.subhead.slice(0, 200) } } : {}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
]
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
function starterSite(input) {
|
|
137
|
-
const name = brandDisplayName(input.brand);
|
|
138
|
-
const cta = input.message.cta ?? { label: "Contact us", href: "/contact" };
|
|
139
|
-
const form = formNode(input);
|
|
140
|
-
const page = (title, content, description) => ({
|
|
141
|
-
schemaVersion: 1,
|
|
142
|
-
root: { props: { title } },
|
|
143
|
-
content,
|
|
144
|
-
...description ? { seo: { description } } : {}
|
|
145
|
-
});
|
|
146
|
-
return {
|
|
147
|
-
site: {
|
|
148
|
-
schemaVersion: 1,
|
|
149
|
-
name,
|
|
150
|
-
header: [node("nav", "nav", "simple", { cta })],
|
|
151
|
-
nav: [
|
|
152
|
-
{ label: "Home", href: "/" },
|
|
153
|
-
{ label: "About", href: "/about" },
|
|
154
|
-
{ label: "Contact", href: "/contact" }
|
|
155
|
-
],
|
|
156
|
-
footer: [
|
|
157
|
-
node("footer", "footer", "columns", {
|
|
158
|
-
tagline: input.message.subhead?.slice(0, 200),
|
|
159
|
-
columns: [
|
|
160
|
-
{ heading: name, links: [{ label: "About", href: "/about" }, { label: "Contact", href: "/contact" }] },
|
|
161
|
-
...input.contact?.email || input.contact?.phone ? [
|
|
162
|
-
{
|
|
163
|
-
heading: "Get in touch",
|
|
164
|
-
links: [
|
|
165
|
-
...input.contact.email ? [{ label: input.contact.email, href: `mailto:${input.contact.email}` }] : [],
|
|
166
|
-
...input.contact.phone ? [{ label: input.contact.phone, href: `tel:${input.contact.phone.replace(/[^+\d]/g, "")}` }] : []
|
|
167
|
-
]
|
|
168
|
-
}
|
|
169
|
-
] : []
|
|
170
|
-
],
|
|
171
|
-
copyright: `\xA9 ${year()} ${name}`
|
|
172
|
-
})
|
|
173
|
-
],
|
|
174
|
-
seo: seo(name, input.message)
|
|
175
|
-
},
|
|
176
|
-
pages: [
|
|
177
|
-
{
|
|
178
|
-
path: "/",
|
|
179
|
-
kind: "page",
|
|
180
|
-
doc: page(
|
|
181
|
-
"Home",
|
|
182
|
-
[
|
|
183
|
-
node("hero", "hero", "split", {
|
|
184
|
-
heading: input.message.headline,
|
|
185
|
-
...input.message.subhead ? { body: input.message.subhead } : {},
|
|
186
|
-
primaryCta: cta,
|
|
187
|
-
secondaryCta: { label: "About us", href: "/about" }
|
|
188
|
-
}),
|
|
189
|
-
benefitsNode(input.message),
|
|
190
|
-
testimonialsNode(),
|
|
191
|
-
node("cta", "cta", "banner", { heading: "Come and see for yourself", primaryCta: cta, surface: "accent" })
|
|
192
|
-
],
|
|
193
|
-
input.message.subhead?.slice(0, 200)
|
|
194
|
-
)
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
path: "/about",
|
|
198
|
-
kind: "page",
|
|
199
|
-
doc: page(
|
|
200
|
-
"About",
|
|
201
|
-
[
|
|
202
|
-
node("hero", "hero", "centered", { eyebrow: "About", heading: `About ${name}` }),
|
|
203
|
-
node(
|
|
204
|
-
"story",
|
|
205
|
-
"rich-text",
|
|
206
|
-
"narrow",
|
|
207
|
-
{
|
|
208
|
-
body: {
|
|
209
|
-
type: "doc",
|
|
210
|
-
content: [
|
|
211
|
-
{ type: "heading", attrs: { level: 2 }, content: [{ type: "text", text: "Our story" }] },
|
|
212
|
-
{ type: "paragraph", content: [{ type: "text", text: "Tell people how you started, who you help and what you believe." }] }
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
{ placeholder: true }
|
|
217
|
-
)
|
|
218
|
-
],
|
|
219
|
-
`About ${name}.`
|
|
220
|
-
)
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
path: "/contact",
|
|
224
|
-
kind: "page",
|
|
225
|
-
doc: page(
|
|
226
|
-
"Contact",
|
|
227
|
-
[
|
|
228
|
-
node("hero", "hero", "centered", { eyebrow: "Contact", heading: "Get in touch", ...input.message.subhead ? { body: input.message.subhead } : {} }),
|
|
229
|
-
...form ? [form] : [node("contact", "cta", "card", { heading: `Talk to ${name}`, primaryCta: input.contact?.email ? { label: "Email us", href: `mailto:${input.contact.email}` } : cta })]
|
|
230
|
-
],
|
|
231
|
-
`How to reach ${name}.`
|
|
232
|
-
)
|
|
233
|
-
}
|
|
234
|
-
]
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// src/core/examples.ts
|
|
239
|
-
var exampleBrands = Object.freeze({
|
|
240
|
-
riverside: {
|
|
241
|
-
name: "Riverside Gym",
|
|
242
|
-
colors: { primary: "#0f766e", primaryDark: "#2dd4bf" },
|
|
243
|
-
fonts: { heading: "space-grotesk", body: "inter" }
|
|
244
|
-
},
|
|
245
|
-
hilltop: {
|
|
246
|
-
name: "Hilltop Fitness",
|
|
247
|
-
colors: { primary: "#b45309", primaryDark: "#fbbf24" },
|
|
248
|
-
fonts: { heading: "playfair-display", body: "work-sans" }
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
export { exampleBrands, landingPage, onePageSite, starterSite };
|
|
253
6
|
//# sourceMappingURL=index.js.map
|
|
254
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/templates.ts","../src/core/examples.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Templates: whole sites from a little input.\n *\n * - `landingPage`: the one-click landing page from a brand and a message.\n * Nav, hero, features, testimonials, a call to action, a form embed and a\n * footer, on one page.\n * - `onePageSite`: the smallest site a brand with no site can be seeded\n * with: just a name, a logo, a message, and the brand's colours and fonts.\n * - `starterSite`: three pages (home, about, contact) with nav and footer.\n *\n * Each returns documents (`site`, `pages`) for any `SiteStore` to create.\n * Nothing is invented and passed off as real: copy a template can't know\n * (a client's quote, a statistic) is marked `placeholder`, and the publish\n * check refuses it until someone replaces it or hides the section.\n */\nimport type { Link, PageDoc, PageKind, SectionNode, SiteDocInput } from \"./schemas\";\nimport { brandDisplayName, type BrandInput, type SiteBrand } from \"./theme\";\n\nexport interface TemplateMessage {\n /** The hero's headline: what you do, for whom. */\n headline: string;\n /** One or two sentences under it. */\n subhead?: string;\n /** The main button. Default: \"Get in touch\", to the form (or `#contact`). */\n cta?: Link;\n /** What you offer, as the features band. Without it the band is a placeholder to fill in. */\n benefits?: { title: string; body: string }[];\n}\n\nexport interface TemplateInput {\n brand: BrandInput;\n message: TemplateMessage;\n /** A form to embed (its slug, for the host's forms resolver). */\n form?: { slug: string; heading?: string; body?: string };\n /** For the footer. */\n contact?: { email?: string; phone?: string };\n}\n\nexport interface TemplateResult {\n site: SiteDocInput;\n pages: { path: string; kind: PageKind; doc: PageDoc }[];\n}\n\nconst year = () => new Date().getUTCFullYear();\n\nfunction node(id: string, type: string, variant: string, props: Record<string, unknown>, extra: Partial<SectionNode> = {}): SectionNode {\n return { id, type, v: 1, variant, props, ...extra };\n}\n\nfunction footerNode(name: string, contact: TemplateInput[\"contact\"], variant = \"simple\"): SectionNode {\n const links: Link[] = [];\n if (contact?.email) links.push({ label: contact.email, href: `mailto:${contact.email}` });\n if (contact?.phone) links.push({ label: contact.phone, href: `tel:${contact.phone.replace(/[^+\\d]/g, \"\")}` });\n return node(\"footer\", \"footer\", variant, {\n ...(links.length ? { links } : {}),\n copyright: `© ${year()} ${name}`,\n });\n}\n\nfunction seo(name: string, message: TemplateMessage) {\n return {\n titleTemplate: `%s · ${name}`,\n ...(message.subhead ? { description: message.subhead.slice(0, 200) } : {}),\n organization: { name },\n };\n}\n\nfunction primaryCta(input: TemplateInput): Link {\n return input.message.cta ?? { label: \"Get in touch\", href: \"#contact\" };\n}\n\nfunction benefitsNode(message: TemplateMessage): SectionNode {\n if (message.benefits?.length) {\n return node(\"features\", \"features\", \"grid\", {\n heading: \"What you get\",\n items: message.benefits.slice(0, 12).map((b, i) => ({ title: b.title, body: b.body, icon: ([\"check\", \"star\", \"heart\", \"zap\", \"shield\", \"clock\"] as const)[i % 6] })),\n });\n }\n return node(\n \"features\",\n \"features\",\n \"grid\",\n {\n heading: \"What you get\",\n items: [\n { title: \"Your first offer\", body: \"Say what someone gets and why it matters to them.\", icon: \"check\" },\n { title: \"Your second offer\", body: \"Keep each one to a sentence or two.\", icon: \"star\" },\n { title: \"Your third offer\", body: \"Three is plenty for a landing page.\", icon: \"heart\" },\n ],\n },\n { placeholder: true },\n );\n}\n\nconst testimonialsNode = () =>\n node(\n \"testimonials\",\n \"testimonials\",\n \"grid\",\n {\n heading: \"What people say\",\n items: [\n { quote: \"Add a quote from someone you have helped, in their words and with their permission.\", name: \"Their name\", role: \"What they did with you\" },\n { quote: \"A second quote, from someone different.\", name: \"Their name\" },\n ],\n },\n { placeholder: true },\n );\n\nfunction formNode(input: TemplateInput): SectionNode | null {\n if (!input.form) return null;\n return node(\"contact\", \"form-embed\", \"split\", {\n heading: input.form.heading ?? \"Get in touch\",\n ...(input.form.body ? { body: input.form.body } : { body: \"Tell us a little about yourself and we'll get back to you.\" }),\n form: input.form.slug,\n anchor: \"contact\",\n });\n}\n\n/**\n * The one-click landing page: brand plus message, on one page.\n *\n * @stability Beta\n */\nexport function landingPage(input: TemplateInput): TemplateResult {\n const name = brandDisplayName(input.brand);\n const cta = primaryCta(input);\n const form = formNode(input);\n const content: SectionNode[] = [\n node(\"hero\", \"hero\", \"centered\", {\n heading: input.message.headline,\n ...(input.message.subhead ? { body: input.message.subhead } : {}),\n primaryCta: cta,\n }),\n benefitsNode(input.message),\n testimonialsNode(),\n node(\"cta\", \"cta\", \"banner\", { heading: \"Ready when you are\", primaryCta: cta, surface: \"accent\" }),\n ];\n if (form) content.push(form);\n return {\n site: {\n schemaVersion: 1,\n name,\n header: [node(\"nav\", \"nav\", \"minimal\", { cta })],\n nav: [],\n footer: [footerNode(name, input.contact, \"minimal\")],\n seo: seo(name, input.message),\n },\n pages: [{ path: \"/\", kind: \"landing\", doc: { schemaVersion: 1, root: { props: { title: input.message.headline.slice(0, 120) } }, content, seo: input.message.subhead ? { description: input.message.subhead.slice(0, 200) } : undefined } }],\n };\n}\n\nexport interface OnePageSiteInput {\n name: string;\n logo?: { src: string; alt?: string };\n message: TemplateMessage;\n /** The brand's colours and fonts. */\n colors: SiteBrand[\"colors\"];\n fonts?: SiteBrand[\"fonts\"];\n contact?: TemplateInput[\"contact\"];\n}\n\n/**\n * The smallest site, for seeding a brand that has none: a header, a hero,\n * a call to action and a footer. `brand` is the minimal brand to store\n * beside it (the host's `BrandSource` returns it).\n *\n * @stability Beta\n */\nexport function onePageSite(input: OnePageSiteInput): TemplateResult & { brand: SiteBrand } {\n const brand: SiteBrand = { name: input.name, colors: input.colors, ...(input.fonts ? { fonts: input.fonts } : {}), ...(input.logo ? { logo: input.logo } : {}) };\n const cta = input.message.cta ?? (input.contact?.email ? { label: \"Email us\", href: `mailto:${input.contact.email}` } : { label: \"Get in touch\", href: \"#contact\" });\n return {\n brand,\n site: {\n schemaVersion: 1,\n name: input.name,\n header: [node(\"nav\", \"nav\", \"minimal\", { cta })],\n nav: [],\n footer: [footerNode(input.name, input.contact)],\n seo: seo(input.name, input.message),\n },\n pages: [\n {\n path: \"/\",\n kind: \"page\",\n doc: {\n schemaVersion: 1,\n root: { props: { title: input.message.headline.slice(0, 120) } },\n content: [\n node(\"hero\", \"hero\", \"centered\", {\n heading: input.message.headline,\n ...(input.message.subhead ? { body: input.message.subhead } : {}),\n primaryCta: cta,\n }),\n node(\"contact\", \"cta\", \"card\", { heading: `Talk to ${input.name}`, primaryCta: cta, anchor: \"contact\" }),\n ],\n ...(input.message.subhead ? { seo: { description: input.message.subhead.slice(0, 200) } } : {}),\n },\n },\n ],\n };\n}\n\n/**\n * A three-page starter site: home, about and contact, with the menu, a\n * footer and redirects-ready paths.\n *\n * @stability Beta\n */\nexport function starterSite(input: TemplateInput): TemplateResult {\n const name = brandDisplayName(input.brand);\n const cta: Link = input.message.cta ?? { label: \"Contact us\", href: \"/contact\" };\n const form = formNode(input);\n const page = (title: string, content: SectionNode[], description?: string): PageDoc => ({\n schemaVersion: 1,\n root: { props: { title } },\n content,\n ...(description ? { seo: { description } } : {}),\n });\n return {\n site: {\n schemaVersion: 1,\n name,\n header: [node(\"nav\", \"nav\", \"simple\", { cta })],\n nav: [\n { label: \"Home\", href: \"/\" },\n { label: \"About\", href: \"/about\" },\n { label: \"Contact\", href: \"/contact\" },\n ],\n footer: [\n node(\"footer\", \"footer\", \"columns\", {\n tagline: input.message.subhead?.slice(0, 200),\n columns: [\n { heading: name, links: [{ label: \"About\", href: \"/about\" }, { label: \"Contact\", href: \"/contact\" }] },\n ...(input.contact?.email || input.contact?.phone\n ? [\n {\n heading: \"Get in touch\",\n links: [\n ...(input.contact.email ? [{ label: input.contact.email, href: `mailto:${input.contact.email}` }] : []),\n ...(input.contact.phone ? [{ label: input.contact.phone, href: `tel:${input.contact.phone.replace(/[^+\\d]/g, \"\")}` }] : []),\n ],\n },\n ]\n : []),\n ],\n copyright: `© ${year()} ${name}`,\n }),\n ],\n seo: seo(name, input.message),\n },\n pages: [\n {\n path: \"/\",\n kind: \"page\",\n doc: page(\n \"Home\",\n [\n node(\"hero\", \"hero\", \"split\", {\n heading: input.message.headline,\n ...(input.message.subhead ? { body: input.message.subhead } : {}),\n primaryCta: cta,\n secondaryCta: { label: \"About us\", href: \"/about\" },\n }),\n benefitsNode(input.message),\n testimonialsNode(),\n node(\"cta\", \"cta\", \"banner\", { heading: \"Come and see for yourself\", primaryCta: cta, surface: \"accent\" }),\n ],\n input.message.subhead?.slice(0, 200),\n ),\n },\n {\n path: \"/about\",\n kind: \"page\",\n doc: page(\n \"About\",\n [\n node(\"hero\", \"hero\", \"centered\", { eyebrow: \"About\", heading: `About ${name}` }),\n node(\n \"story\",\n \"rich-text\",\n \"narrow\",\n {\n body: {\n type: \"doc\",\n content: [\n { type: \"heading\", attrs: { level: 2 }, content: [{ type: \"text\", text: \"Our story\" }] },\n { type: \"paragraph\", content: [{ type: \"text\", text: \"Tell people how you started, who you help and what you believe.\" }] },\n ],\n },\n },\n { placeholder: true },\n ),\n ],\n `About ${name}.`,\n ),\n },\n {\n path: \"/contact\",\n kind: \"page\",\n doc: page(\n \"Contact\",\n [\n node(\"hero\", \"hero\", \"centered\", { eyebrow: \"Contact\", heading: \"Get in touch\", ...(input.message.subhead ? { body: input.message.subhead } : {}) }),\n ...(form ? [form] : [node(\"contact\", \"cta\", \"card\", { heading: `Talk to ${name}`, primaryCta: input.contact?.email ? { label: \"Email us\", href: `mailto:${input.contact.email}` } : cta })]),\n ],\n `How to reach ${name}.`,\n ),\n },\n ],\n };\n}\n","/**\n * Made-up brands for demos, tests and docs. They are not anyone's real\n * business.\n */\nimport type { SiteBrand } from \"./theme\";\n\nexport const exampleBrands = Object.freeze({\n riverside: {\n name: \"Riverside Gym\",\n colors: { primary: \"#0f766e\", primaryDark: \"#2dd4bf\" },\n fonts: { heading: \"space-grotesk\", body: \"inter\" },\n },\n hilltop: {\n name: \"Hilltop Fitness\",\n colors: { primary: \"#b45309\", primaryDark: \"#fbbf24\" },\n fonts: { heading: \"playfair-display\", body: \"work-sans\" },\n },\n} satisfies Record<string, SiteBrand>);\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -1027,4 +1027,4 @@ declare function newSectionId(prefix?: string): string;
|
|
|
1027
1027
|
/** A section node from a preset: the editor's Add, and templates. */
|
|
1028
1028
|
declare function nodeFromPreset(type: string, presetName?: string, id?: string): SectionNode;
|
|
1029
1029
|
|
|
1030
|
-
export {
|
|
1030
|
+
export { SectionId as $, type AnySectionDefinition as A, BUILT_IN_SECTION_TYPES as B, Copy as C, type PostDocInput as D, type PostDraft as E, type FormsResolver as F, type PostMeta as G, Href as H, Image as I, PostSlug as J, type PostStatus as K, type LivePost as L, MAX_DOC_BYTES as M, PostSummarySchema as N, type PostsContext as O, PageKind as P, type RegisterSectionOptions as Q, type Release as R, type SectionCategory as S, type ReleaseMeta as T, ReleaseSnapshot as U, RichText as V, SECTION_CATEGORIES as W, type SavePostInput as X, type SavePostResult as Y, type SectionDefinition as Z, SectionDefinitionError as _, PageDoc as a, type SectionManifest as a0, type SectionPlacement as a1, type SectionPreset as a2, type SectionRenderProps as a3, type SectionVariant as a4, SeoDefaults as a5, Surface as a6, TokenOverrides as a7, defineSection as a8, getSection as a9, isPlainEmail as aa, listSections as ab, mailtoHref as ac, newSectionId as ad, nodeFromPreset as ae, opensInNewTab as af, parseSnapshot as ag, postSummary as ah, registerBuiltInSection as ai, registerSection as aj, richTextPlain as ak, sectionJsonSchema as al, sectionManifests as am, unregisterSection as an, validatePostSlug as ao, type PageMeta as b, type RenderContext as c, type ResolvedForm as d, Seo as e, SectionNode as f, SiteDoc as g, ReleasePage as h, type PostSummary as i, Redirect as j, Link as k, type SiteDocInput as l, type BuiltInSectionType as m, FileRef as n, FontChoice as o, type FormsResolverContext as p, type ImportPost as q, type ImportPostsResult as r, Line as s, LinkEvent as t, MAX_IMPORT_POSTS as u, MAX_LIVE_POSTS as v, MenuItem as w, PagePath as x, PostAuthor as y, PostDoc as z };
|
package/dist/sections.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Z as SectionDefinition, k as Link, c as RenderContext, f as SectionNode, a6 as Surface, I as Image, n as FileRef, A as AnySectionDefinition } from './registry-HBn1X60x.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import * as lucide_react from 'lucide-react';
|
|
4
4
|
import * as React from 'react';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as FontChoice, g as SiteDoc, A as AnySectionDefinition, U as ReleaseSnapshot, h as ReleasePage, R as Release, b as PageMeta, a as PageDoc, P as PageKind, T as ReleaseMeta, i as PostSummary, L as LivePost, G as PostMeta, E as PostDraft, X as SavePostInput, Y as SavePostResult, q as ImportPost, r as ImportPostsResult, l as SiteDocInput, z as PostDoc, K as PostStatus } from './registry-HBn1X60x.js';
|
|
2
2
|
import { CanonicalBrand } from '@marktiderman/genesis-design-system';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -440,4 +440,4 @@ interface MemoryStoreOptions {
|
|
|
440
440
|
*/
|
|
441
441
|
declare function createMemorySiteStore(options?: MemoryStoreOptions): MemorySiteStore;
|
|
442
442
|
|
|
443
|
-
export { pagePathProblems as $,
|
|
443
|
+
export { pagePathProblems as $, type Asset as A, type BrandInput as B, type CheckReleaseOptions as C, DEFAULT_RESERVED_PATHS as D, checkSiteDoc as E, FONT_CHOICES as F, contrastRatio as G, createMemorySiteStore as H, type InvalidationInfo as I, formCacheTag as J, hexToHslTriplet as K, isConflict as L, MAX_PAGE_PATH_LENGTH as M, type NewPage as N, isExternalHref as O, type PublishOptions as P, isPublishable as Q, type ReservedPaths as R, type SiteStore as S, type ThemePair as T, isReservedPath as U, isSafeHref as V, isSafeImageSrc as W, isSiteBrand as X, luminance as Y, mix as Z, normalizeRequestPath as _, type AssetMeta as a, parseHex as a0, prepareImportPost as a1, prepareRelease as a2, siteCacheTag as a3, siteTheme as a4, stableHash as a5, themeCss as a6, toCanonicalBrand as a7, validatePagePath as a8, withCacheInvalidation as a9, type SiteIssue as b, type SaveResult as c, type SiteBrand as d, ASSET_TYPES as e, type BrandSource as f, type FontInfo as g, MAX_URL_LENGTH as h, type MemorySiteStore as i, type MemoryStoreOptions as j, type NewSite as k, PAGE_PATH as l, type PageDraft as m, type PreparedRelease as n, PublishBlockedError as o, SiteConflictError as p, type SiteDraft as q, type SiteTheme as r, assetPath as s, brandDisplayName as t, checkBlog as u, checkContrast as v, checkHtmlOutline as w, checkPage as x, checkPost as y, checkRelease as z };
|
package/dist/supabase.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SupabaseClient } from '@supabase/supabase-js';
|
|
2
|
-
import { S as SiteStore } from './store-
|
|
3
|
-
export {
|
|
4
|
-
import './registry-
|
|
2
|
+
import { S as SiteStore } from './store-BXiZeZzH.js';
|
|
3
|
+
export { e as ASSET_TYPES } from './store-BXiZeZzH.js';
|
|
4
|
+
import './registry-HBn1X60x.js';
|
|
5
5
|
import 'react';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import '@marktiderman/genesis-design-system';
|
package/dist/supabase.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { prepareImportPost, checkPost, isPublishable, PublishBlockedError, assetPath, ASSET_TYPES, prepareRelease } from './chunk-
|
|
2
|
-
export { ASSET_TYPES } from './chunk-
|
|
1
|
+
import { prepareImportPost, checkPost, isPublishable, PublishBlockedError, assetPath, ASSET_TYPES, prepareRelease } from './chunk-FBQF2L7O.js';
|
|
2
|
+
export { ASSET_TYPES } from './chunk-FBQF2L7O.js';
|
|
3
3
|
import { MAX_IMPORT_POSTS, validatePostSlug, PostDoc, PostSummarySchema, PageDoc, SiteDoc, parseSnapshot, ReleaseSnapshot } from './chunk-ZGWGQGT2.js';
|
|
4
4
|
import './chunk-3VKTBE7S.js';
|
|
5
5
|
|
package/dist/web.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { S as SiteStore,
|
|
1
|
+
import { F as FormsResolver, U as ReleaseSnapshot, h as ReleasePage, d as ResolvedForm, O as PostsContext } from './registry-HBn1X60x.js';
|
|
2
|
+
import { S as SiteStore, f as BrandSource, R as ReservedPaths, g as FontInfo, r as SiteTheme } from './store-BXiZeZzH.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import '@marktiderman/genesis-design-system';
|
|
@@ -127,8 +127,8 @@ declare function collectFormSlugs(_snapshot: ReleaseSnapshot, page: ReleasePage
|
|
|
127
127
|
declare function SiteRenderer({ snapshot, page, theme, origin, basePath, mode, logo, forms, assets, fontHref, posts }: SiteRendererProps): React.JSX.Element;
|
|
128
128
|
|
|
129
129
|
declare const ASSET_SIZES: {
|
|
130
|
-
readonly css:
|
|
131
|
-
readonly formsCss:
|
|
130
|
+
readonly css: 39267;
|
|
131
|
+
readonly formsCss: 76109;
|
|
132
132
|
readonly islands: 3010;
|
|
133
133
|
readonly formIsland: 502065;
|
|
134
134
|
};
|