@cogenta/theme-entreprise 1.1.2
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/LICENSE +373 -0
- package/dist/src/index.d.ts +16 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +16 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/render/blocks/accordion.d.ts +4 -0
- package/dist/src/render/blocks/accordion.d.ts.map +1 -0
- package/dist/src/render/blocks/accordion.js +24 -0
- package/dist/src/render/blocks/accordion.js.map +1 -0
- package/dist/src/render/blocks/collection-list.d.ts +14 -0
- package/dist/src/render/blocks/collection-list.d.ts.map +1 -0
- package/dist/src/render/blocks/collection-list.js +55 -0
- package/dist/src/render/blocks/collection-list.js.map +1 -0
- package/dist/src/render/blocks/cta.d.ts +12 -0
- package/dist/src/render/blocks/cta.d.ts.map +1 -0
- package/dist/src/render/blocks/cta.js +19 -0
- package/dist/src/render/blocks/cta.js.map +1 -0
- package/dist/src/render/blocks/embed.d.ts +4 -0
- package/dist/src/render/blocks/embed.d.ts.map +1 -0
- package/dist/src/render/blocks/embed.js +92 -0
- package/dist/src/render/blocks/embed.js.map +1 -0
- package/dist/src/render/blocks/faq.d.ts +4 -0
- package/dist/src/render/blocks/faq.d.ts.map +1 -0
- package/dist/src/render/blocks/faq.js +25 -0
- package/dist/src/render/blocks/faq.js.map +1 -0
- package/dist/src/render/blocks/feature-grid.d.ts +4 -0
- package/dist/src/render/blocks/feature-grid.d.ts.map +1 -0
- package/dist/src/render/blocks/feature-grid.js +33 -0
- package/dist/src/render/blocks/feature-grid.js.map +1 -0
- package/dist/src/render/blocks/gallery.d.ts +15 -0
- package/dist/src/render/blocks/gallery.d.ts.map +1 -0
- package/dist/src/render/blocks/gallery.js +28 -0
- package/dist/src/render/blocks/gallery.js.map +1 -0
- package/dist/src/render/blocks/hero.d.ts +15 -0
- package/dist/src/render/blocks/hero.d.ts.map +1 -0
- package/dist/src/render/blocks/hero.js +31 -0
- package/dist/src/render/blocks/hero.js.map +1 -0
- package/dist/src/render/blocks/logo-strip.d.ts +4 -0
- package/dist/src/render/blocks/logo-strip.d.ts.map +1 -0
- package/dist/src/render/blocks/logo-strip.js +21 -0
- package/dist/src/render/blocks/logo-strip.js.map +1 -0
- package/dist/src/render/blocks/logos.d.ts +4 -0
- package/dist/src/render/blocks/logos.d.ts.map +1 -0
- package/dist/src/render/blocks/logos.js +30 -0
- package/dist/src/render/blocks/logos.js.map +1 -0
- package/dist/src/render/blocks/media-figure.d.ts +13 -0
- package/dist/src/render/blocks/media-figure.d.ts.map +1 -0
- package/dist/src/render/blocks/media-figure.js +28 -0
- package/dist/src/render/blocks/media-figure.js.map +1 -0
- package/dist/src/render/blocks/pricing-table.d.ts +4 -0
- package/dist/src/render/blocks/pricing-table.d.ts.map +1 -0
- package/dist/src/render/blocks/pricing-table.js +33 -0
- package/dist/src/render/blocks/pricing-table.js.map +1 -0
- package/dist/src/render/blocks/prose.d.ts +9 -0
- package/dist/src/render/blocks/prose.d.ts.map +1 -0
- package/dist/src/render/blocks/prose.js +10 -0
- package/dist/src/render/blocks/prose.js.map +1 -0
- package/dist/src/render/blocks/quote.d.ts +18 -0
- package/dist/src/render/blocks/quote.d.ts.map +1 -0
- package/dist/src/render/blocks/quote.js +31 -0
- package/dist/src/render/blocks/quote.js.map +1 -0
- package/dist/src/render/blocks/stat-counter.d.ts +4 -0
- package/dist/src/render/blocks/stat-counter.d.ts.map +1 -0
- package/dist/src/render/blocks/stat-counter.js +23 -0
- package/dist/src/render/blocks/stat-counter.js.map +1 -0
- package/dist/src/render/blocks/stats.d.ts +4 -0
- package/dist/src/render/blocks/stats.d.ts.map +1 -0
- package/dist/src/render/blocks/stats.js +23 -0
- package/dist/src/render/blocks/stats.js.map +1 -0
- package/dist/src/render/blocks/testimonial.d.ts +16 -0
- package/dist/src/render/blocks/testimonial.d.ts.map +1 -0
- package/dist/src/render/blocks/testimonial.js +25 -0
- package/dist/src/render/blocks/testimonial.js.map +1 -0
- package/dist/src/render/chrome.d.ts +3 -0
- package/dist/src/render/chrome.d.ts.map +1 -0
- package/dist/src/render/chrome.js +101 -0
- package/dist/src/render/chrome.js.map +1 -0
- package/dist/src/render/render-block.d.ts +24 -0
- package/dist/src/render/render-block.d.ts.map +1 -0
- package/dist/src/render/render-block.js +108 -0
- package/dist/src/render/render-block.js.map +1 -0
- package/dist/src/render/term-archive.d.ts +12 -0
- package/dist/src/render/term-archive.d.ts.map +1 -0
- package/dist/src/render/term-archive.js +34 -0
- package/dist/src/render/term-archive.js.map +1 -0
- package/dist/theme.config.d.ts +16 -0
- package/dist/theme.config.d.ts.map +1 -0
- package/dist/theme.config.js +46 -0
- package/dist/theme.config.js.map +1 -0
- package/package.json +57 -0
- package/src/index.ts +15 -0
- package/src/render/blocks/accordion.ts +60 -0
- package/src/render/blocks/collection-list.ts +122 -0
- package/src/render/blocks/cta.ts +48 -0
- package/src/render/blocks/embed.ts +115 -0
- package/src/render/blocks/faq.ts +61 -0
- package/src/render/blocks/feature-grid.ts +73 -0
- package/src/render/blocks/gallery.ts +48 -0
- package/src/render/blocks/hero.ts +60 -0
- package/src/render/blocks/logo-strip.ts +36 -0
- package/src/render/blocks/logos.ts +60 -0
- package/src/render/blocks/media-figure.ts +43 -0
- package/src/render/blocks/pricing-table.ts +77 -0
- package/src/render/blocks/prose.ts +11 -0
- package/src/render/blocks/quote.ts +48 -0
- package/src/render/blocks/stat-counter.ts +45 -0
- package/src/render/blocks/stats.ts +50 -0
- package/src/render/blocks/testimonial.ts +41 -0
- package/src/render/chrome.ts +128 -0
- package/src/render/render-block.ts +144 -0
- package/src/render/term-archive.ts +80 -0
- package/src/styles/archive.css +68 -0
- package/src/styles/base.css +895 -0
- package/src/styles/blocks.css +1433 -0
- package/src/styles/theme.css +36 -0
- package/src/styles/tokens.css +326 -0
- package/tokens.json +36 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { blockHeadingTag, h, heading, } from '@cogenta/theme-kit';
|
|
2
|
+
/**
|
|
3
|
+
* `blocks@2.0` (RFC 0001). Narrower than `stats` (no `unit`), and treated
|
|
4
|
+
* that way here: `stats` reads as a quiet KPI strip on the page's own
|
|
5
|
+
* surface, while `statCounter` is this theme's confident "impact numbers"
|
|
6
|
+
* band — an accent-tinted panel of big, tabular figures, the instinct the
|
|
7
|
+
* aesthetic direction already asks for on `stats` pushed one step further
|
|
8
|
+
* for the narrower, single-figure shape this block offers.
|
|
9
|
+
*
|
|
10
|
+
* A `<dl>`, exactly like `stats`: each figure is the description of its
|
|
11
|
+
* label, which is what `<dt>`/`<dd>` mean. The label sits before the figure
|
|
12
|
+
* in markup, the same reading-order guarantee `stats` gives (WCAG 1.3.2);
|
|
13
|
+
* the stylesheet is free to paint the big figure first.
|
|
14
|
+
*/
|
|
15
|
+
function renderItem(item) {
|
|
16
|
+
return h('div', { class: 'cg-kpi' }, h('dt', { class: 'cg-kpi__label' }, item.label), h('dd', { class: 'cg-kpi__value' }, item.value));
|
|
17
|
+
}
|
|
18
|
+
export function renderStatCounter(block, _ctx) {
|
|
19
|
+
return h('section', { class: 'cg-kpis', 'data-block': 'statCounter' }, block.title === undefined
|
|
20
|
+
? null
|
|
21
|
+
: heading(blockHeadingTag('statCounter') ?? 'h2', { class: 'cg-kpis__title', 'data-field': 'title' }, block.title), h('dl', { class: 'cg-kpis__items' }, block.stats.map(renderItem)));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=stat-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat-counter.js","sourceRoot":"","sources":["../../../../src/render/blocks/stat-counter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EAEf,CAAC,EACD,OAAO,GAER,MAAM,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;GAYG;AACH,SAAS,UAAU,CAAC,IAAqB;IACvC,OAAO,CAAC,CACN,KAAK,EACL,EAAE,KAAK,EAAE,QAAQ,EAAE,EACnB,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAC/C,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAChD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB,EAAE,IAAmB;IAC5E,OAAO,CAAC,CACN,SAAS,EACT,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,EACjD,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CACL,eAAe,CAAC,aAAa,CAAC,IAAI,IAAI,EACtC,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,EAClD,KAAK,CAAC,KAAK,CACZ,EACL,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAClE,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../../src/render/blocks/stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAEL,KAAK,WAAW,EAGhB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAA;AA6B3B,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,CAa/E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { blockHeadingTag, h, heading, } from '@cogenta/theme-kit';
|
|
2
|
+
/**
|
|
3
|
+
* The "by the numbers" strip. A description list, exactly as the canonical
|
|
4
|
+
* theme uses — each figure is the description of its label, which is what
|
|
5
|
+
* `<dt>`/`<dd>` mean, and it survives being read linearly — but laid out as
|
|
6
|
+
* one continuous row of big, confident figures separated by vertical rules
|
|
7
|
+
* (`border-inline-start` on every item but the first) rather than as
|
|
8
|
+
* separate shadowed tiles: the "real KPI strip" read the aesthetic
|
|
9
|
+
* direction asks for.
|
|
10
|
+
*
|
|
11
|
+
* The label sits above the figure in the markup and the skin is free to
|
|
12
|
+
* repaint the order visually; reading order and visual order stay
|
|
13
|
+
* independent either way (WCAG 1.3.2).
|
|
14
|
+
*/
|
|
15
|
+
function renderItem(item) {
|
|
16
|
+
return h('div', { class: 'cg-metric' }, h('dt', { class: 'cg-metric__label' }, item.label), h('dd', { class: 'cg-metric__value' }, item.value, item.unit === undefined ? null : h('span', { class: 'cg-metric__unit' }, item.unit)));
|
|
17
|
+
}
|
|
18
|
+
export function renderStats(block, _ctx) {
|
|
19
|
+
return h('section', { class: 'cg-metrics', 'data-block': 'stats' }, block.title === undefined
|
|
20
|
+
? null
|
|
21
|
+
: heading(blockHeadingTag('stats') ?? 'h2', { class: 'cg-metrics__title', 'data-field': 'title' }, block.title), h('dl', { class: 'cg-metrics__items' }, block.items.map(renderItem)));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../src/render/blocks/stats.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EAEf,CAAC,EACD,OAAO,GAER,MAAM,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;GAYG;AACH,SAAS,UAAU,CAAC,IAAc;IAChC,OAAO,CAAC,CACN,KAAK,EACL,EAAE,KAAK,EAAE,WAAW,EAAE,EACtB,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAClD,CAAC,CACC,IAAI,EACJ,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAC7B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CACpF,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAiB,EAAE,IAAmB;IAChE,OAAO,CAAC,CACN,SAAS,EACT,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,EAC9C,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CACL,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,EAChC,EAAE,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,OAAO,EAAE,EACrD,KAAK,CAAC,KAAK,CACZ,EACL,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CACrE,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TestimonialBlock } from '@cogenta/blocks';
|
|
2
|
+
import { type HtmlElement, type RenderContext } from '@cogenta/theme-kit';
|
|
3
|
+
/**
|
|
4
|
+
* `blocks@2.0` (RFC 0001). This theme's "client success" panel — the same
|
|
5
|
+
* `<figure><blockquote>…</blockquote><figcaption>` pattern `quote` uses, kept
|
|
6
|
+
* consistent so the two read as siblings, but the quote itself is rich text
|
|
7
|
+
* (a testimonial may carry a link or emphasis the shorter, plain-text `quote`
|
|
8
|
+
* block cannot) and the attribution is the block's single grouped
|
|
9
|
+
* `attribution` field rather than three loose ones.
|
|
10
|
+
*
|
|
11
|
+
* The avatar is decorative, exactly like `quote`'s own: the name sits right
|
|
12
|
+
* beside it in text, so its media entity's alt text is expected to be empty;
|
|
13
|
+
* `image` still writes the attribute either way (WCAG 1.1.1).
|
|
14
|
+
*/
|
|
15
|
+
export declare function renderTestimonial(block: TestimonialBlock, ctx: RenderContext): HtmlElement;
|
|
16
|
+
//# sourceMappingURL=testimonial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testimonial.d.ts","sourceRoot":"","sources":["../../../../src/render/blocks/testimonial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,KAAK,WAAW,EAAY,KAAK,aAAa,EAAkB,MAAM,oBAAoB,CAAA;AAEnG;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,aAAa,GAAG,WAAW,CAyB1F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { h, image, renderRichText } from '@cogenta/theme-kit';
|
|
2
|
+
/**
|
|
3
|
+
* `blocks@2.0` (RFC 0001). This theme's "client success" panel — the same
|
|
4
|
+
* `<figure><blockquote>…</blockquote><figcaption>` pattern `quote` uses, kept
|
|
5
|
+
* consistent so the two read as siblings, but the quote itself is rich text
|
|
6
|
+
* (a testimonial may carry a link or emphasis the shorter, plain-text `quote`
|
|
7
|
+
* block cannot) and the attribution is the block's single grouped
|
|
8
|
+
* `attribution` field rather than three loose ones.
|
|
9
|
+
*
|
|
10
|
+
* The avatar is decorative, exactly like `quote`'s own: the name sits right
|
|
11
|
+
* beside it in text, so its media entity's alt text is expected to be empty;
|
|
12
|
+
* `image` still writes the attribute either way (WCAG 1.1.1).
|
|
13
|
+
*/
|
|
14
|
+
export function renderTestimonial(block, ctx) {
|
|
15
|
+
const { attribution } = block;
|
|
16
|
+
return h('figure', { class: 'cg-testimonial', 'data-block': 'testimonial' }, h('blockquote', { class: 'cg-testimonial__quote' }, renderRichText(ctx, block.quote)), h('figcaption', { class: 'cg-testimonial__attribution' }, attribution.avatar === undefined
|
|
17
|
+
? null
|
|
18
|
+
: image(ctx, attribution.avatar, {
|
|
19
|
+
className: 'cg-testimonial__avatar',
|
|
20
|
+
variant: { width: 96, height: 96, fit: 'cover' },
|
|
21
|
+
}), h('span', { class: 'cg-testimonial__who' }, h('span', { class: 'cg-testimonial__name' }, attribution.name), attribution.role === undefined
|
|
22
|
+
? null
|
|
23
|
+
: h('span', { class: 'cg-testimonial__role' }, attribution.role))));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=testimonial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testimonial.js","sourceRoot":"","sources":["../../../../src/render/blocks/testimonial.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,CAAC,EAAE,KAAK,EAAsB,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnG;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAuB,EAAE,GAAkB;IAC3E,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAC7B,OAAO,CAAC,CACN,QAAQ,EACR,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,EACxD,CAAC,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EACrF,CAAC,CACC,YAAY,EACZ,EAAE,KAAK,EAAE,6BAA6B,EAAE,EACxC,WAAW,CAAC,MAAM,KAAK,SAAS;QAC9B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE;YAC7B,SAAS,EAAE,wBAAwB;YACnC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;SACjD,CAAC,EACN,CAAC,CACC,MAAM,EACN,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAChC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,EAC9D,WAAW,CAAC,IAAI,KAAK,SAAS;QAC5B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CACnE,CACF,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../../src/render/chrome.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,YAAY,EAOlB,MAAM,oBAAoB,CAAA;AA8D3B,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAuD7D"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { escapeAttribute, escapeText, renderBrandMark, renderSocialLinks, renderThemeToggle, serialize, } from '@cogenta/theme-kit';
|
|
2
|
+
/**
|
|
3
|
+
* This theme's own header and footer (`theme@1.4`) — a structurally
|
|
4
|
+
* different chrome from the canonical theme's, not a recolour of it.
|
|
5
|
+
*
|
|
6
|
+
* Header: a sticky bar with the corporate wordmark/logo on the left, a real
|
|
7
|
+
* desktop `<nav>`, `headerAction` (`theme@1.4`) rendered as a filled button
|
|
8
|
+
* — the one place this hairline-first chrome spends a solid accent surface
|
|
9
|
+
* — and, below the breakpoint the stylesheet sets, a CSS-only mobile menu:
|
|
10
|
+
* a checkbox (`#cg-nav-toggle`, visually hidden but still focusable and
|
|
11
|
+
* Space-operable) paired with a `<label>` styled as a three-bar button. No
|
|
12
|
+
* `<script>` anywhere: the sibling combinator in `base.css` is what shows
|
|
13
|
+
* the nav panel when the box is checked. This replaces the previous
|
|
14
|
+
* "the last header link doubles as the call to action" convention — with a
|
|
15
|
+
* real `headerAction` field, inventing a role for a plain nav link is no
|
|
16
|
+
* longer the honest reading of the data.
|
|
17
|
+
*
|
|
18
|
+
* Footer: a real four-column layout — a brand column (site name + `tagline`,
|
|
19
|
+
* `theme@1.4`), the site's own footer navigation, `social` (`theme@1.4`, via
|
|
20
|
+
* `renderSocialLinks`), and a fourth column carrying `footerNote`
|
|
21
|
+
* (`theme@1.4`) above Cogenta's own credit (or its white-label replacement).
|
|
22
|
+
* `brandingHtml` is placed exactly once, inside the footer, exactly as
|
|
23
|
+
* received: never altered, never dropped.
|
|
24
|
+
*
|
|
25
|
+
* The manual light/dark/system control (`renderThemeToggle`, `@cogenta/
|
|
26
|
+
* theme-kit`, L26) sits beside the mobile menu button, outside the `<nav>`
|
|
27
|
+
* it controls the collapse of — the `<nav>` panel is hidden under the
|
|
28
|
+
* breakpoint until the checkbox is checked, but a visitor must be able to
|
|
29
|
+
* flip appearance without opening that panel first, on desktop or mobile.
|
|
30
|
+
* This module ships no CSS of its own for it (`base.css` owns
|
|
31
|
+
* `.cg-theme-toggle`, in this theme's own visual register, not canonical's).
|
|
32
|
+
*/
|
|
33
|
+
function navItems(links) {
|
|
34
|
+
return links
|
|
35
|
+
.filter((link) => link.href !== null || link.kind === 'submenu-placeholder')
|
|
36
|
+
.map((link) => {
|
|
37
|
+
const label = escapeText(link.label);
|
|
38
|
+
const titleAttr = link.title === null ? '' : ` title="${escapeAttribute(link.title)}"`;
|
|
39
|
+
if (link.href === null)
|
|
40
|
+
return `<li><span${titleAttr}>${label}</span></li>`;
|
|
41
|
+
const href = escapeAttribute(link.href);
|
|
42
|
+
const target = link.openInNewTab ? ' target="_blank" rel="noopener"' : '';
|
|
43
|
+
return `<li><a href="${href}"${target}${titleAttr}>${label}</a></li>`;
|
|
44
|
+
})
|
|
45
|
+
.join('');
|
|
46
|
+
}
|
|
47
|
+
function renderNavList(links) {
|
|
48
|
+
const items = navItems(links);
|
|
49
|
+
return items === '' ? '' : `<ul class="cg-nav__items">${items}</ul>`;
|
|
50
|
+
}
|
|
51
|
+
/** The header's own call-to-action link (`theme@1.4`) — a filled button, distinct from the ordinary nav list. */
|
|
52
|
+
function renderHeaderAction(action) {
|
|
53
|
+
if (action === undefined)
|
|
54
|
+
return '';
|
|
55
|
+
return (`<a class="cg-action cg-site-header__action" data-emphasis="primary" ` +
|
|
56
|
+
`href="${escapeAttribute(action.href)}">${escapeText(action.label)}</a>`);
|
|
57
|
+
}
|
|
58
|
+
export function renderChrome(input) {
|
|
59
|
+
const siteNameText = escapeText(input.site.name);
|
|
60
|
+
const headerNavList = renderNavList(input.headerNav);
|
|
61
|
+
const headerAction = renderHeaderAction(input.headerAction);
|
|
62
|
+
const footerNavList = renderNavList(input.footerNav);
|
|
63
|
+
// A B2B header is a corporate identity slot before it is a wordmark slot.
|
|
64
|
+
const mark = renderBrandMark(input.brand, { className: 'cg-site-header__logo' }) ?? siteNameText;
|
|
65
|
+
const themeToggle = serialize(renderThemeToggle(input.locale, { className: 'cg-theme-toggle' }));
|
|
66
|
+
const header = `<header class="cg-site-header"><div class="cg-site-header__inner">` +
|
|
67
|
+
`<a class="cg-site-header__home" href="${escapeAttribute(input.homeHref)}">${mark}</a>` +
|
|
68
|
+
`<input type="checkbox" id="cg-nav-toggle" class="cg-nav-toggle-input" aria-label="Menu">` +
|
|
69
|
+
`<label for="cg-nav-toggle" class="cg-nav-toggle-label" aria-hidden="true">` +
|
|
70
|
+
`<span class="cg-nav-toggle-bar"></span><span class="cg-nav-toggle-bar"></span><span class="cg-nav-toggle-bar"></span>` +
|
|
71
|
+
`</label>` +
|
|
72
|
+
`${themeToggle}` +
|
|
73
|
+
`<nav class="cg-site-header__nav" id="cg-nav" aria-label="Primary">` +
|
|
74
|
+
`${headerNavList}${headerAction}` +
|
|
75
|
+
`</nav>` +
|
|
76
|
+
`</div></header>`;
|
|
77
|
+
const tagline = input.tagline === undefined
|
|
78
|
+
? ''
|
|
79
|
+
: `<p class="cg-site-footer__tagline" data-field="tagline">${escapeText(input.tagline)}</p>`;
|
|
80
|
+
const social = input.social === undefined
|
|
81
|
+
? ''
|
|
82
|
+
: serialize(renderSocialLinks(input.social, {
|
|
83
|
+
className: 'cg-site-footer__social',
|
|
84
|
+
itemClassName: 'cg-site-footer__social-item',
|
|
85
|
+
}) ?? { kind: 'text', value: '' });
|
|
86
|
+
const footerNote = input.footerNote === undefined
|
|
87
|
+
? ''
|
|
88
|
+
: `<p class="cg-site-footer__note">${escapeText(input.footerNote)}</p>`;
|
|
89
|
+
const footer = `<footer class="cg-site-footer"><div class="cg-site-footer__grid">` +
|
|
90
|
+
`<div class="cg-site-footer__brand">` +
|
|
91
|
+
`<a href="${escapeAttribute(input.homeHref)}">${siteNameText}</a>${tagline}` +
|
|
92
|
+
`</div>` +
|
|
93
|
+
`${footerNavList === ''
|
|
94
|
+
? ''
|
|
95
|
+
: `<nav class="cg-site-footer__nav" aria-label="Footer">${footerNavList}</nav>`}` +
|
|
96
|
+
`${social === '' ? '' : `<div class="cg-site-footer__social-col">${social}</div>`}` +
|
|
97
|
+
`<div class="cg-site-footer__meta">${footerNote}<div class="cg-site-footer__branding">${input.brandingHtml}</div></div>` +
|
|
98
|
+
`</div><div class="cg-site-footer__bottom"><span>${siteNameText}</span></div></footer>`;
|
|
99
|
+
return { header, footer };
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=chrome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../../src/render/chrome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type BlockRegistry, type VocabularyBlock } from '@cogenta/blocks';
|
|
2
|
+
import { type FetchedEntries, type HtmlElement, type PageContent, pageHasOwnHeading, type RenderContext, renderEntryHeader, withBlockKey } from '@cogenta/theme-kit';
|
|
3
|
+
export type { FetchedEntries, PageContent };
|
|
4
|
+
export { pageHasOwnHeading, renderEntryHeader, withBlockKey };
|
|
5
|
+
export declare function renderBlock(block: VocabularyBlock, ctx: RenderContext, entries?: FetchedEntries, registry?: BlockRegistry): HtmlElement | null;
|
|
6
|
+
/**
|
|
7
|
+
* `<main id="cg-main">` is mandatory: it is the skip-link's target, written
|
|
8
|
+
* once by `@cogenta/cli`'s `theme-render.ts` outside any theme's control.
|
|
9
|
+
*
|
|
10
|
+
* `renderEntryHeader` (`theme@1.4`) draws the eyebrow/title/excerpt/meta/
|
|
11
|
+
* cover furniture for a page backed by a real content entry — a service or
|
|
12
|
+
* a plain page — and already returns `null` for a page with no `entry`
|
|
13
|
+
* meta *and* for one whose blocks draw their own heading (a `hero`), so the
|
|
14
|
+
* bare `<h1 class="cg-page__title">` fallback below is the right markup in
|
|
15
|
+
* both of those cases and only those — never a double heading, and never a
|
|
16
|
+
* page with none at all.
|
|
17
|
+
*
|
|
18
|
+
* `withBlockKey` stamps every rendered block with its contract-B `_key` —
|
|
19
|
+
* required so the visual page builder (L16) can map a clicked element in
|
|
20
|
+
* the rendered iframe back to the block that produced it, for this theme
|
|
21
|
+
* exactly as for every other one.
|
|
22
|
+
*/
|
|
23
|
+
export declare function renderPage(page: PageContent, ctx: RenderContext, entries?: FetchedEntries, registry?: BlockRegistry): HtmlElement;
|
|
24
|
+
//# sourceMappingURL=render-block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-block.d.ts","sourceRoot":"","sources":["../../../src/render/render-block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAoB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC5F,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAEhB,KAAK,WAAW,EAChB,iBAAiB,EACjB,KAAK,aAAa,EAClB,iBAAiB,EAEjB,YAAY,EAEb,MAAM,oBAAoB,CAAA;AAmB3B,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA;AAE7D,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,cAAmB,EAC5B,QAAQ,CAAC,EAAE,aAAa,GACvB,WAAW,GAAG,IAAI,CAapB;AAwDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,cAAmB,EAC5B,QAAQ,CAAC,EAAE,aAAa,GACvB,WAAW,CAab"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { VOCABULARY_NAMES } from '@cogenta/blocks';
|
|
2
|
+
import { h, pageHasOwnHeading, renderEntryHeader, resolveBlockForRender, withBlockKey, withBlockVariant, } from '@cogenta/theme-kit';
|
|
3
|
+
import { renderAccordion } from './blocks/accordion.js';
|
|
4
|
+
import { renderCollectionList } from './blocks/collection-list.js';
|
|
5
|
+
import { renderCta } from './blocks/cta.js';
|
|
6
|
+
import { renderEmbed } from './blocks/embed.js';
|
|
7
|
+
import { renderFaq } from './blocks/faq.js';
|
|
8
|
+
import { renderFeatureGrid } from './blocks/feature-grid.js';
|
|
9
|
+
import { renderGallery } from './blocks/gallery.js';
|
|
10
|
+
import { renderHero } from './blocks/hero.js';
|
|
11
|
+
import { renderLogoStrip } from './blocks/logo-strip.js';
|
|
12
|
+
import { renderLogos } from './blocks/logos.js';
|
|
13
|
+
import { renderMediaFigure } from './blocks/media-figure.js';
|
|
14
|
+
import { renderPricingTable } from './blocks/pricing-table.js';
|
|
15
|
+
import { renderProse } from './blocks/prose.js';
|
|
16
|
+
import { renderQuote } from './blocks/quote.js';
|
|
17
|
+
import { renderStatCounter } from './blocks/stat-counter.js';
|
|
18
|
+
import { renderStats } from './blocks/stats.js';
|
|
19
|
+
import { renderTestimonial } from './blocks/testimonial.js';
|
|
20
|
+
export { pageHasOwnHeading, renderEntryHeader, withBlockKey };
|
|
21
|
+
export function renderBlock(block, ctx, entries = {}, registry) {
|
|
22
|
+
// `block`'s type says `VocabularyBlock`, but the value crossing this
|
|
23
|
+
// boundary from stored content is not always literally one of the shared
|
|
24
|
+
// vocabulary — resolving here is what turns an unimplemented theme-private
|
|
25
|
+
// block into its declared fallback instead of a silently blank slot.
|
|
26
|
+
const resolved = resolveBlockForRender(block, VOCABULARY_NAMES, registry);
|
|
27
|
+
if (resolved === null)
|
|
28
|
+
return null;
|
|
29
|
+
const known = resolved;
|
|
30
|
+
// `withBlockVariant` (blocks@2.0, RFC 0002) is applied once here, after
|
|
31
|
+
// dispatch, rather than inside each of the seventeen block renderers —
|
|
32
|
+
// `variant` is envelope data every block carries identically, exactly the
|
|
33
|
+
// same reasoning `withBlockKey` in `renderPage` already follows for `_key`.
|
|
34
|
+
return withBlockVariant(renderKnownBlock(known, ctx, entries), known.variant);
|
|
35
|
+
}
|
|
36
|
+
function renderKnownBlock(known, ctx, entries) {
|
|
37
|
+
switch (known._type) {
|
|
38
|
+
case 'hero':
|
|
39
|
+
return renderHero(known, ctx);
|
|
40
|
+
case 'prose':
|
|
41
|
+
return renderProse(known, ctx);
|
|
42
|
+
case 'mediaFigure':
|
|
43
|
+
return renderMediaFigure(known, ctx);
|
|
44
|
+
case 'featureGrid':
|
|
45
|
+
return renderFeatureGrid(known, ctx);
|
|
46
|
+
case 'cta':
|
|
47
|
+
return renderCta(known, ctx);
|
|
48
|
+
case 'gallery':
|
|
49
|
+
return renderGallery(known, ctx);
|
|
50
|
+
case 'quote':
|
|
51
|
+
return renderQuote(known, ctx);
|
|
52
|
+
case 'faq':
|
|
53
|
+
return renderFaq(known, ctx);
|
|
54
|
+
case 'stats':
|
|
55
|
+
return renderStats(known, ctx);
|
|
56
|
+
case 'logos':
|
|
57
|
+
return renderLogos(known, ctx);
|
|
58
|
+
case 'collectionList':
|
|
59
|
+
return renderCollectionList(known, ctx, entries[known._key] ?? []);
|
|
60
|
+
case 'embed':
|
|
61
|
+
return renderEmbed(known, ctx);
|
|
62
|
+
case 'testimonial':
|
|
63
|
+
return renderTestimonial(known, ctx);
|
|
64
|
+
case 'pricingTable':
|
|
65
|
+
return renderPricingTable(known, ctx);
|
|
66
|
+
case 'accordion':
|
|
67
|
+
return renderAccordion(known, ctx);
|
|
68
|
+
case 'statCounter':
|
|
69
|
+
return renderStatCounter(known, ctx);
|
|
70
|
+
case 'logoStrip':
|
|
71
|
+
return renderLogoStrip(known, ctx);
|
|
72
|
+
default: {
|
|
73
|
+
// Exhaustive over contract B's vocabulary: `known` is `never` here, so
|
|
74
|
+
// a block this package does not implement stops it compiling until it
|
|
75
|
+
// is. Returning null rather than throwing is deliberate — a theme has
|
|
76
|
+
// no access to `@cogenta/core`'s error types (contract D refuses the
|
|
77
|
+
// import), and choosing a fallback block is the render layer's job,
|
|
78
|
+
// not the theme's.
|
|
79
|
+
const unreachable = known;
|
|
80
|
+
void unreachable;
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* `<main id="cg-main">` is mandatory: it is the skip-link's target, written
|
|
87
|
+
* once by `@cogenta/cli`'s `theme-render.ts` outside any theme's control.
|
|
88
|
+
*
|
|
89
|
+
* `renderEntryHeader` (`theme@1.4`) draws the eyebrow/title/excerpt/meta/
|
|
90
|
+
* cover furniture for a page backed by a real content entry — a service or
|
|
91
|
+
* a plain page — and already returns `null` for a page with no `entry`
|
|
92
|
+
* meta *and* for one whose blocks draw their own heading (a `hero`), so the
|
|
93
|
+
* bare `<h1 class="cg-page__title">` fallback below is the right markup in
|
|
94
|
+
* both of those cases and only those — never a double heading, and never a
|
|
95
|
+
* page with none at all.
|
|
96
|
+
*
|
|
97
|
+
* `withBlockKey` stamps every rendered block with its contract-B `_key` —
|
|
98
|
+
* required so the visual page builder (L16) can map a clicked element in
|
|
99
|
+
* the rendered iframe back to the block that produced it, for this theme
|
|
100
|
+
* exactly as for every other one.
|
|
101
|
+
*/
|
|
102
|
+
export function renderPage(page, ctx, entries = {}, registry) {
|
|
103
|
+
const entryHeader = renderEntryHeader(page, ctx);
|
|
104
|
+
return h('main', { class: 'cg-main', id: 'cg-main' }, entryHeader, entryHeader === null && !pageHasOwnHeading(page.blocks)
|
|
105
|
+
? h('h1', { class: 'cg-page__title' }, page.title)
|
|
106
|
+
: null, page.blocks.map((block) => withBlockKey(renderBlock(block, ctx, entries, registry), block._key)));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=render-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-block.js","sourceRoot":"","sources":["../../../src/render/render-block.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type HtmlElement, type TermArchiveInput } from '@cogenta/theme-kit';
|
|
2
|
+
/**
|
|
3
|
+
* The taxonomy-term archive (contract D `theme@1.3`) — a resource index.
|
|
4
|
+
*
|
|
5
|
+
* Built from the same `cg-list__row` rows `collectionList` already renders
|
|
6
|
+
* here: a date rail on the left, the title and its summary on the right,
|
|
7
|
+
* which is the shape a B2B insights or resources index takes. Reusing the
|
|
8
|
+
* block's own classes is what keeps an archive looking like the rest of the
|
|
9
|
+
* site without a second stylesheet to maintain.
|
|
10
|
+
*/
|
|
11
|
+
export declare function renderTermArchive(input: TermArchiveInput): HtmlElement;
|
|
12
|
+
//# sourceMappingURL=term-archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term-archive.d.ts","sourceRoot":"","sources":["../../../src/render/term-archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAK,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE/E;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAsDtE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { h } from '@cogenta/theme-kit';
|
|
2
|
+
/**
|
|
3
|
+
* The taxonomy-term archive (contract D `theme@1.3`) — a resource index.
|
|
4
|
+
*
|
|
5
|
+
* Built from the same `cg-list__row` rows `collectionList` already renders
|
|
6
|
+
* here: a date rail on the left, the title and its summary on the right,
|
|
7
|
+
* which is the shape a B2B insights or resources index takes. Reusing the
|
|
8
|
+
* block's own classes is what keeps an archive looking like the rest of the
|
|
9
|
+
* site without a second stylesheet to maintain.
|
|
10
|
+
*/
|
|
11
|
+
export function renderTermArchive(input) {
|
|
12
|
+
const rows = input.entries.map((entry) => h('li', { class: 'cg-list__row' }, entry.publishedAt === null
|
|
13
|
+
? null
|
|
14
|
+
: h('time', { class: 'cg-list__date', datetime: entry.publishedAt }, entry.publishedAt.slice(0, 10)), h('div', { class: 'cg-list__body' }, h('h2', { class: 'cg-list__title' }, entry.href === null
|
|
15
|
+
? entry.title
|
|
16
|
+
: h('a', { class: 'cg-list__link', href: entry.href }, entry.title)), entry.summary === null ? null : h('p', { class: 'cg-list__excerpt' }, entry.summary))));
|
|
17
|
+
return h('main', { class: 'cg-main cg-archive', id: 'cg-main' }, input.ancestors.length === 0
|
|
18
|
+
? null
|
|
19
|
+
: h('nav', { class: 'cg-archive__breadcrumb', 'aria-label': input.labels.breadcrumb }, h('ol', {}, ...input.ancestors.map((l) => h('li', {}, h('a', { href: l.href }, l.label))))), h('h1', { class: 'cg-list__title-heading' }, input.term.label), input.children.length === 0
|
|
20
|
+
? null
|
|
21
|
+
: h('ul', { class: 'cg-archive__children', 'aria-label': input.labels.subterms }, ...input.children.map((c) => h('li', {}, h('a', { href: c.href }, c.label)))), rows.length === 0
|
|
22
|
+
? h('p', { class: 'cg-list__empty' }, input.labels.empty)
|
|
23
|
+
: h('ul', { class: 'cg-list__items' }, ...rows), pager(input));
|
|
24
|
+
}
|
|
25
|
+
function pager(input) {
|
|
26
|
+
if (input.page.previousHref === null && input.page.nextHref === null)
|
|
27
|
+
return null;
|
|
28
|
+
return h('nav', { class: 'cg-archive__pager', 'aria-label': input.labels.pagination }, input.page.previousHref === null
|
|
29
|
+
? null
|
|
30
|
+
: h('a', { rel: 'prev', href: input.page.previousHref }, input.labels.previous), input.page.nextHref === null
|
|
31
|
+
? null
|
|
32
|
+
: h('a', { rel: 'next', href: input.page.nextHref }, input.labels.next));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=term-archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term-archive.js","sourceRoot":"","sources":["../../../src/render/term-archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract D — Thème, `theme@1.0`/`1.1`.
|
|
3
|
+
*
|
|
4
|
+
* `implements` lists the seventeen blocks of contract B (`blocks@2.0`, RFC
|
|
5
|
+
* 0001) in the order the contract lists them — see
|
|
6
|
+
* `@cogenta/theme-canonical/theme.config.ts` for why that order matters
|
|
7
|
+
* (installation refuses an incomplete theme).
|
|
8
|
+
*
|
|
9
|
+
* `runtime: 'static'` describes what this theme package itself needs; the
|
|
10
|
+
* one block in the vocabulary that reads at request time (`collectionList`)
|
|
11
|
+
* still declares `runtime: 'server'` on its own, in the vocabulary — that is
|
|
12
|
+
* a property of the block, not of the theme rendering it.
|
|
13
|
+
*/
|
|
14
|
+
declare const _default: import("@cogenta/render").ThemeManifest;
|
|
15
|
+
export default _default;
|
|
16
|
+
//# sourceMappingURL=theme.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.config.d.ts","sourceRoot":"","sources":["../theme.config.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { defineTheme } from '@cogenta/render';
|
|
2
|
+
/**
|
|
3
|
+
* Contract D — Thème, `theme@1.0`/`1.1`.
|
|
4
|
+
*
|
|
5
|
+
* `implements` lists the seventeen blocks of contract B (`blocks@2.0`, RFC
|
|
6
|
+
* 0001) in the order the contract lists them — see
|
|
7
|
+
* `@cogenta/theme-canonical/theme.config.ts` for why that order matters
|
|
8
|
+
* (installation refuses an incomplete theme).
|
|
9
|
+
*
|
|
10
|
+
* `runtime: 'static'` describes what this theme package itself needs; the
|
|
11
|
+
* one block in the vocabulary that reads at request time (`collectionList`)
|
|
12
|
+
* still declares `runtime: 'server'` on its own, in the vocabulary — that is
|
|
13
|
+
* a property of the block, not of the theme rendering it.
|
|
14
|
+
*/
|
|
15
|
+
export default defineTheme({
|
|
16
|
+
name: 'entreprise',
|
|
17
|
+
version: '1.1.0',
|
|
18
|
+
description: 'A confident, premium B2B theme: structured typography, real KPI/impact sections, a genuine dark mode.',
|
|
19
|
+
author: 'Cogenta',
|
|
20
|
+
engine: '^1.0.0',
|
|
21
|
+
blocks: '^2.0.0',
|
|
22
|
+
implements: [
|
|
23
|
+
'hero',
|
|
24
|
+
'prose',
|
|
25
|
+
'mediaFigure',
|
|
26
|
+
'featureGrid',
|
|
27
|
+
'cta',
|
|
28
|
+
'gallery',
|
|
29
|
+
'quote',
|
|
30
|
+
'faq',
|
|
31
|
+
'stats',
|
|
32
|
+
'logos',
|
|
33
|
+
'collectionList',
|
|
34
|
+
'embed',
|
|
35
|
+
'testimonial',
|
|
36
|
+
'pricingTable',
|
|
37
|
+
'accordion',
|
|
38
|
+
'statCounter',
|
|
39
|
+
'logoStrip',
|
|
40
|
+
],
|
|
41
|
+
collections: ['article', 'page'],
|
|
42
|
+
runtime: 'static',
|
|
43
|
+
tokens: './tokens.json',
|
|
44
|
+
a11y: { verified: 'WCAG-2.2-AA' },
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=theme.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.config.js","sourceRoot":"","sources":["../theme.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C;;;;;;;;;;;;GAYG;AACH,eAAe,WAAW,CAAC;IACzB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;IAChB,WAAW,EACT,uGAAuG;IACzG,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE;QACV,MAAM;QACN,OAAO;QACP,aAAa;QACb,aAAa;QACb,KAAK;QACL,SAAS;QACT,OAAO;QACP,KAAK;QACL,OAAO;QACP,OAAO;QACP,gBAAgB;QAChB,OAAO;QACP,aAAa;QACb,cAAc;QACd,WAAW;QACX,aAAa;QACb,WAAW;KACZ;IACD,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;IAChC,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,eAAe;IACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE;CAClC,CAAC,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cogenta/theme-entreprise",
|
|
3
|
+
"version": "1.1.2",
|
|
4
|
+
"description": "A confident, premium B2B theme for Cogenta: structured typography, real KPI/impact sections, a genuine dark mode, and zero client JavaScript.",
|
|
5
|
+
"license": "MPL-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/src/index.d.ts",
|
|
11
|
+
"default": "./dist/src/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./theme.config": {
|
|
14
|
+
"types": "./dist/theme.config.d.ts",
|
|
15
|
+
"default": "./dist/theme.config.js"
|
|
16
|
+
},
|
|
17
|
+
"./tokens.json": "./tokens.json",
|
|
18
|
+
"./styles/theme.css": "./src/styles/theme.css",
|
|
19
|
+
"./styles/*.css": "./src/styles/*.css"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"src",
|
|
24
|
+
"tokens.json"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=22.11.0"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public",
|
|
31
|
+
"provenance": true
|
|
32
|
+
},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/cogenta-cms/cogenta.git",
|
|
36
|
+
"directory": "packages/theme-entreprise"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@cogenta/blocks": "1.0.3",
|
|
40
|
+
"@cogenta/theme-kit": "0.3.2",
|
|
41
|
+
"@cogenta/render": "0.2.3"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"astro": "^7.2.1"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"astro": "^7.2.1",
|
|
48
|
+
"typescript": "^7.0.2",
|
|
49
|
+
"vitest": "^4.1.10"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "tsc -p tsconfig.json",
|
|
53
|
+
"typecheck": "tsc -p tsconfig.typecheck.json",
|
|
54
|
+
"test": "vitest run --passWithNoTests",
|
|
55
|
+
"test:integration": "vitest run --config vitest.integration.config.ts --passWithNoTests"
|
|
56
|
+
}
|
|
57
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './render/blocks/collection-list.js'
|
|
2
|
+
export * from './render/blocks/cta.js'
|
|
3
|
+
export * from './render/blocks/embed.js'
|
|
4
|
+
export * from './render/blocks/faq.js'
|
|
5
|
+
export * from './render/blocks/feature-grid.js'
|
|
6
|
+
export * from './render/blocks/gallery.js'
|
|
7
|
+
export * from './render/blocks/hero.js'
|
|
8
|
+
export * from './render/blocks/logos.js'
|
|
9
|
+
export * from './render/blocks/media-figure.js'
|
|
10
|
+
export * from './render/blocks/prose.js'
|
|
11
|
+
export * from './render/blocks/quote.js'
|
|
12
|
+
export * from './render/blocks/stats.js'
|
|
13
|
+
export * from './render/chrome.js'
|
|
14
|
+
export * from './render/render-block.js'
|
|
15
|
+
export * from './render/term-archive.js'
|