@neatico/visual-core 0.14.26 → 0.14.65
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/candidateRanking.d.ts +31 -0
- package/dist/candidateRanking.js +55 -0
- package/dist/cjs/candidateRanking.js +61 -0
- package/dist/cjs/compositionNumbers.js +111 -0
- package/dist/cjs/compositionUseCases.js +145 -0
- package/dist/cjs/content.js +46 -10
- package/dist/cjs/contentBrief.js +82 -0
- package/dist/cjs/designSystem.js +86 -9
- package/dist/cjs/exploreCollection.js +180 -0
- package/dist/cjs/fontCatalog.js +7 -1
- package/dist/cjs/formalCompositions.js +121 -0
- package/dist/cjs/index.js +14 -0
- package/dist/cjs/nativeSocialParameters.js +145 -0
- package/dist/cjs/pagination.js +14 -5
- package/dist/cjs/parameterDefaults.js +20 -0
- package/dist/cjs/recipeParameters.js +375 -0
- package/dist/cjs/styleManifest.js +107 -0
- package/dist/cjs/textPresentation.js +68 -0
- package/dist/compositionNumbers.d.ts +4 -0
- package/dist/compositionNumbers.js +108 -0
- package/dist/compositionUseCases.d.ts +1 -0
- package/dist/compositionUseCases.js +142 -0
- package/dist/content.d.ts +10 -0
- package/dist/content.js +46 -10
- package/dist/contentBrief.d.ts +16 -0
- package/dist/contentBrief.js +78 -0
- package/dist/designSystem.js +86 -9
- package/dist/exploreCollection.d.ts +7 -0
- package/dist/exploreCollection.js +176 -0
- package/dist/fontCatalog.js +7 -1
- package/dist/formalCompositions.d.ts +26 -0
- package/dist/formalCompositions.js +117 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +11 -0
- package/dist/nativeSocialParameters.d.ts +38 -0
- package/dist/nativeSocialParameters.js +139 -0
- package/dist/pagination.js +14 -5
- package/dist/parameterDefaults.d.ts +2 -0
- package/dist/parameterDefaults.js +17 -0
- package/dist/recipeParameters.d.ts +34 -0
- package/dist/recipeParameters.js +371 -0
- package/dist/styleManifest.d.ts +20 -0
- package/dist/styleManifest.js +103 -0
- package/dist/textPresentation.d.ts +29 -0
- package/dist/textPresentation.js +64 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export function createContentBrief(source) {
|
|
2
|
+
if (!source ||
|
|
3
|
+
source.version !== 1 ||
|
|
4
|
+
typeof source.text !== "string" ||
|
|
5
|
+
!source.text.trim() ||
|
|
6
|
+
!Array.isArray(source.segments) ||
|
|
7
|
+
!source.segments.length)
|
|
8
|
+
throw new Error("CONTENT_BRIEF_INVALID");
|
|
9
|
+
const provenance = source.provenance;
|
|
10
|
+
if (provenance &&
|
|
11
|
+
(!["creative-draft", "user-revision"].includes(provenance.kind) ||
|
|
12
|
+
typeof provenance.original !== "string" ||
|
|
13
|
+
!provenance.original.trim() ||
|
|
14
|
+
typeof provenance.disclosure !== "string" ||
|
|
15
|
+
!provenance.disclosure.trim() ||
|
|
16
|
+
(provenance.originalMode !== undefined &&
|
|
17
|
+
(provenance.kind !== "user-revision" ||
|
|
18
|
+
!["source-backed", "creative"].includes(provenance.originalMode))) ||
|
|
19
|
+
(provenance.illustrative !== undefined &&
|
|
20
|
+
(provenance.kind !== "user-revision" || typeof provenance.illustrative !== "boolean")) ||
|
|
21
|
+
(provenance.simulationAllowed !== undefined &&
|
|
22
|
+
typeof provenance.simulationAllowed !== "boolean") ||
|
|
23
|
+
(provenance.language !== undefined &&
|
|
24
|
+
(typeof provenance.language !== "string" ||
|
|
25
|
+
!/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8}){0,3}$/.test(provenance.language)))))
|
|
26
|
+
throw new Error("CONTENT_BRIEF_INVALID");
|
|
27
|
+
const sourceIds = source.segments.map((segment) => segment.id);
|
|
28
|
+
if (sourceIds.some((id) => typeof id !== "string" || !id) ||
|
|
29
|
+
new Set(sourceIds).size !== sourceIds.length)
|
|
30
|
+
throw new Error("CONTENT_BRIEF_INVALID");
|
|
31
|
+
return validateContentBrief({
|
|
32
|
+
version: 1,
|
|
33
|
+
originalInput: provenance?.original || source.text,
|
|
34
|
+
...(provenance?.kind === "user-revision" ? { revisedInput: source.text } : {}),
|
|
35
|
+
...(provenance?.kind === "user-revision" && provenance.illustrative ? { revisedInputIllustrative: true } : {}),
|
|
36
|
+
mode: provenance?.kind === "user-revision" ? provenance.originalMode || "source-backed" : provenance ? "creative" : "source-backed",
|
|
37
|
+
...(provenance?.language ? { language: provenance.language } : {}),
|
|
38
|
+
creativeAllowed: true,
|
|
39
|
+
simulationAllowed: true,
|
|
40
|
+
sourceIds,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function validateContentBrief(value) {
|
|
44
|
+
const brief = value;
|
|
45
|
+
if (!brief ||
|
|
46
|
+
brief.version !== 1 ||
|
|
47
|
+
typeof brief.originalInput !== "string" ||
|
|
48
|
+
!brief.originalInput.trim() ||
|
|
49
|
+
brief.originalInput.length > 20000 ||
|
|
50
|
+
(brief.revisedInput !== undefined &&
|
|
51
|
+
(typeof brief.revisedInput !== "string" || !brief.revisedInput.trim() || brief.revisedInput.length > 20000)) ||
|
|
52
|
+
(brief.revisedInputIllustrative !== undefined &&
|
|
53
|
+
(typeof brief.revisedInputIllustrative !== "boolean" || brief.revisedInput === undefined)) ||
|
|
54
|
+
!["source-backed", "creative"].includes(brief.mode) ||
|
|
55
|
+
typeof brief.creativeAllowed !== "boolean" ||
|
|
56
|
+
typeof brief.simulationAllowed !== "boolean" ||
|
|
57
|
+
(brief.simulationAllowed && !brief.creativeAllowed) ||
|
|
58
|
+
(brief.language !== undefined &&
|
|
59
|
+
(typeof brief.language !== "string" ||
|
|
60
|
+
!/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8}){0,3}$/.test(brief.language))) ||
|
|
61
|
+
!Array.isArray(brief.sourceIds) ||
|
|
62
|
+
!brief.sourceIds.length ||
|
|
63
|
+
brief.sourceIds.length > 1024 ||
|
|
64
|
+
new Set(brief.sourceIds).size !== brief.sourceIds.length ||
|
|
65
|
+
brief.sourceIds.some((id) => typeof id !== "string" || !id || id.length > 160))
|
|
66
|
+
throw new Error("CONTENT_BRIEF_INVALID");
|
|
67
|
+
return {
|
|
68
|
+
version: 1,
|
|
69
|
+
originalInput: brief.originalInput,
|
|
70
|
+
...(brief.revisedInput !== undefined ? { revisedInput: brief.revisedInput } : {}),
|
|
71
|
+
...(brief.revisedInputIllustrative !== undefined ? { revisedInputIllustrative: brief.revisedInputIllustrative } : {}),
|
|
72
|
+
mode: brief.mode,
|
|
73
|
+
...(brief.language ? { language: brief.language } : {}),
|
|
74
|
+
creativeAllowed: brief.creativeAllowed,
|
|
75
|
+
simulationAllowed: brief.simulationAllowed,
|
|
76
|
+
sourceIds: [...brief.sourceIds],
|
|
77
|
+
};
|
|
78
|
+
}
|
package/dist/designSystem.js
CHANGED
|
@@ -1,14 +1,88 @@
|
|
|
1
|
+
import { EXPLORE_THEMES, EXPLORE_RECIPES, exploreCompositionFits } from './exploreCollection.js';
|
|
1
2
|
import { AUTHORED_COMPOSITIONS, sceneRecipePreference, } from "./compositionScenes.js";
|
|
2
3
|
import { SOCIAL_LAYOUT_CATALOG } from "./socialLayouts.js";
|
|
3
4
|
import { contentBlockText, } from "./content.js";
|
|
4
5
|
/** Complete, deterministic token sets; decorative geometry belongs to individual compositions. */
|
|
5
6
|
export const DESIGN_THEMES = [
|
|
7
|
+
...EXPLORE_THEMES,
|
|
6
8
|
{
|
|
7
9
|
id: "neatico",
|
|
8
10
|
palette: { background: "#FAF9F6", surface: "#FFFFFF", ink: "#202124", muted: "#62646B", accent: "#F4CE36", line: "#E4E1D9" },
|
|
9
|
-
typography: { heading: "
|
|
11
|
+
typography: { heading: "Manrope", body: "Inter", code: "monospace", headingWeight: 700 },
|
|
10
12
|
geometry: { radius: 12, spacing: 1, rule: "accent" },
|
|
11
13
|
},
|
|
14
|
+
{
|
|
15
|
+
id: "archive",
|
|
16
|
+
palette: { background: "#F6F1E7", surface: "#FFFCF5", ink: "#19382E", muted: "#59665B", accent: "#C17A35", line: "#D7CEBC" },
|
|
17
|
+
typography: { heading: "Instrument Serif", body: "DM Sans", code: "JetBrains Mono", headingWeight: 400 },
|
|
18
|
+
geometry: { radius: 4, spacing: 1.1, rule: "hairline" },
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "bloom",
|
|
22
|
+
"palette": {
|
|
23
|
+
"background": "#FFF1F6",
|
|
24
|
+
"surface": "#FFFFFF",
|
|
25
|
+
"ink": "#341838",
|
|
26
|
+
"muted": "#70536D",
|
|
27
|
+
"accent": "#CC1D61",
|
|
28
|
+
"line": "#F3BED5"
|
|
29
|
+
},
|
|
30
|
+
"typography": {
|
|
31
|
+
"heading": "Montserrat",
|
|
32
|
+
"body": "Nunito Sans",
|
|
33
|
+
"code": "JetBrains Mono",
|
|
34
|
+
"headingWeight": 800
|
|
35
|
+
},
|
|
36
|
+
"geometry": {
|
|
37
|
+
"radius": 20,
|
|
38
|
+
"spacing": 1,
|
|
39
|
+
"rule": "accent"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "splash",
|
|
44
|
+
"palette": {
|
|
45
|
+
"background": "#E9FAFF",
|
|
46
|
+
"surface": "#FFFFFF",
|
|
47
|
+
"ink": "#162E60",
|
|
48
|
+
"muted": "#4D637E",
|
|
49
|
+
"accent": "#2454E6",
|
|
50
|
+
"line": "#B8DEFA"
|
|
51
|
+
},
|
|
52
|
+
"typography": {
|
|
53
|
+
"heading": "Space Grotesk",
|
|
54
|
+
"body": "DM Sans",
|
|
55
|
+
"code": "JetBrains Mono",
|
|
56
|
+
"headingWeight": 700
|
|
57
|
+
},
|
|
58
|
+
"geometry": {
|
|
59
|
+
"radius": 20,
|
|
60
|
+
"spacing": 1,
|
|
61
|
+
"rule": "accent"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "candy",
|
|
66
|
+
"palette": {
|
|
67
|
+
"background": "#F3EDFF",
|
|
68
|
+
"surface": "#FFFFFF",
|
|
69
|
+
"ink": "#35205C",
|
|
70
|
+
"muted": "#69557F",
|
|
71
|
+
"accent": "#7841D5",
|
|
72
|
+
"line": "#DCCAF6"
|
|
73
|
+
},
|
|
74
|
+
"typography": {
|
|
75
|
+
"heading": "Manrope",
|
|
76
|
+
"body": "Nunito Sans",
|
|
77
|
+
"code": "JetBrains Mono",
|
|
78
|
+
"headingWeight": 800
|
|
79
|
+
},
|
|
80
|
+
"geometry": {
|
|
81
|
+
"radius": 20,
|
|
82
|
+
"spacing": 1,
|
|
83
|
+
"rule": "accent"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
12
86
|
{
|
|
13
87
|
id: "studio",
|
|
14
88
|
palette: {
|
|
@@ -20,8 +94,8 @@ export const DESIGN_THEMES = [
|
|
|
20
94
|
line: "#D7DED3",
|
|
21
95
|
},
|
|
22
96
|
typography: {
|
|
23
|
-
heading: "
|
|
24
|
-
body: "
|
|
97
|
+
heading: "DM Sans",
|
|
98
|
+
body: "Source Sans 3",
|
|
25
99
|
code: "monospace",
|
|
26
100
|
headingWeight: 700,
|
|
27
101
|
},
|
|
@@ -38,7 +112,7 @@ export const DESIGN_THEMES = [
|
|
|
38
112
|
line: "#3D526C",
|
|
39
113
|
},
|
|
40
114
|
typography: {
|
|
41
|
-
heading: "
|
|
115
|
+
heading: "Space Grotesk",
|
|
42
116
|
body: "Inter",
|
|
43
117
|
code: "monospace",
|
|
44
118
|
headingWeight: 700,
|
|
@@ -57,7 +131,7 @@ export const DESIGN_THEMES = [
|
|
|
57
131
|
},
|
|
58
132
|
typography: {
|
|
59
133
|
heading: "Lora",
|
|
60
|
-
body: "
|
|
134
|
+
body: "Source Sans 3",
|
|
61
135
|
code: "monospace",
|
|
62
136
|
headingWeight: 700,
|
|
63
137
|
},
|
|
@@ -74,8 +148,8 @@ export const DESIGN_THEMES = [
|
|
|
74
148
|
line: "#DAD5F2",
|
|
75
149
|
},
|
|
76
150
|
typography: {
|
|
77
|
-
heading: "
|
|
78
|
-
body: "
|
|
151
|
+
heading: "Space Grotesk",
|
|
152
|
+
body: "DM Sans",
|
|
79
153
|
code: "monospace",
|
|
80
154
|
headingWeight: 800,
|
|
81
155
|
},
|
|
@@ -92,7 +166,7 @@ export const DESIGN_THEMES = [
|
|
|
92
166
|
line: "#B8A233",
|
|
93
167
|
},
|
|
94
168
|
typography: {
|
|
95
|
-
heading: "
|
|
169
|
+
heading: "Oswald",
|
|
96
170
|
body: "Inter",
|
|
97
171
|
code: "monospace",
|
|
98
172
|
headingWeight: 800,
|
|
@@ -108,7 +182,7 @@ export function designTheme(id) {
|
|
|
108
182
|
plum: "electric",
|
|
109
183
|
};
|
|
110
184
|
return (DESIGN_THEMES.find((theme) => theme.id === (alias[id] || id)) ||
|
|
111
|
-
DESIGN_THEMES
|
|
185
|
+
DESIGN_THEMES.find(theme => theme.id === "neatico"));
|
|
112
186
|
}
|
|
113
187
|
const family = (id, semantic) => {
|
|
114
188
|
if (/code|terminal/.test(id))
|
|
@@ -290,6 +364,7 @@ export function canonicalRecipeId(id, kind) {
|
|
|
290
364
|
}
|
|
291
365
|
/** Existing authored catalogs remain first-class candidates, rather than being discarded. */
|
|
292
366
|
const ALL_DESIGN_RECIPES = [
|
|
367
|
+
...EXPLORE_RECIPES,
|
|
293
368
|
...["cover", "closing"].flatMap((role) => ["editorial", "panel", "split"].map((style) => ({
|
|
294
369
|
id: `bookend-${role}-${style}`,
|
|
295
370
|
kind: "presentation",
|
|
@@ -428,6 +503,7 @@ export function designCandidates(page, context) {
|
|
|
428
503
|
const available = page.blocks.some((b) => b.kind === "image" && b.status === "available");
|
|
429
504
|
const exclude = new Set(context.excluded || []);
|
|
430
505
|
const candidates = DESIGN_RECIPES.filter((r) => r.kind === context.kind &&
|
|
506
|
+
(!r.id.startsWith("authored-explore-") || (context.ratio >= 1.4 && context.ratio <= 2 && exploreCompositionFits(page, r.id))) &&
|
|
431
507
|
r.automatic !== false &&
|
|
432
508
|
(!r.scenes || Boolean(page.scene && r.scenes.includes(page.scene))) &&
|
|
433
509
|
!(r.family.startsWith("hero") &&
|
|
@@ -455,6 +531,7 @@ export function designCandidates(page, context) {
|
|
|
455
531
|
? r.family.startsWith("steps") || r.family.startsWith("code")
|
|
456
532
|
: true;
|
|
457
533
|
return ((r.id.startsWith("bookend-") ? 80 : 0) +
|
|
534
|
+
(r.id.startsWith("authored-explore-") ? 110 : 0) +
|
|
458
535
|
(page.scene === "brand-collection" && r.id === "brand-collection-grid"
|
|
459
536
|
? 80
|
|
460
537
|
: 0) +
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DesignRecipe, DesignTheme } from "./designSystem.js";
|
|
2
|
+
import type { ContentPage } from "./content.js";
|
|
3
|
+
export declare const DEFAULT_PRESENTATION_THEME = "explore-teal";
|
|
4
|
+
export declare const EXPLORE_THEMES: readonly DesignTheme[];
|
|
5
|
+
export declare const EXPLORE_LAYOUTS: readonly [readonly ["cover", "paragraph", 0, 0, "Open with a spacious editorial headline, a short premise and an optional real photograph."], readonly ["overview", "features", 2, 4, "Orient readers with a numbered overview of parallel subjects."], readonly ["section", "paragraph", 0, 0, "Introduce one new section or central principle in a strong color field."], readonly ["pillars", "features", 2, 3, "Explain two or three equally important ideas in spacious editorial columns."], readonly ["focus", "paragraph", 0, 0, "Develop one idea in an asymmetric reading composition."], readonly ["workflow", "steps", 2, 4, "Show an ordered workflow with explicit actions and useful descriptions."], readonly ["timeline", "steps", 2, 4, "Present a short chronological sequence on a horizontal reading axis."], readonly ["comparison", "comparison", 2, 2, "Compare two supplied alternatives with corresponding points."], readonly ["worksheet", "parameters", 2, 4, "Explain named fields with their concrete values and instructions."], readonly ["photo-story", "image", 0, 0, "Use a real contextual photograph beside a concise explanation."], readonly ["quote", "quote", 0, 0, "Give an exact source statement room to breathe, retaining supplied attribution."], readonly ["chart", "chart", 2, 6, "Compare source-backed quantities in labeled bars with the original unit."], readonly ["ledger", "parameters", 2, 5, "Arrange named facts and explanations in a flat editorial ledger."], readonly ["faq", "features", 2, 3, "Answer a small set of meaningful questions with concise responses."], readonly ["action-plan", "steps", 2, 3, "Make the next few actions prominent, with descriptions that explain the work."], readonly ["closing", "paragraph", 0, 0, "Close with one clear takeaway and a concrete next action."]];
|
|
6
|
+
export declare const EXPLORE_RECIPES: readonly DesignRecipe[];
|
|
7
|
+
export declare function exploreCompositionFits(page: ContentPage, id: string): boolean;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
export const DEFAULT_PRESENTATION_THEME = "explore-teal";
|
|
2
|
+
/** The proven Explore editorial colorways, plus eight complementary directions. */
|
|
3
|
+
const colors = [
|
|
4
|
+
["teal", "#214B4A", "#E1EEEB", "#F7FAF9", "#1C3533"],
|
|
5
|
+
["slate", "#3F5477", "#E6EAF1", "#F9FAFC", "#1D283B"],
|
|
6
|
+
["cobalt", "#2847A9", "#E5EBFC", "#F8FAFF", "#19294E"],
|
|
7
|
+
["clay", "#9D4F32", "#F8E7DE", "#FFFAF6", "#3F2920"],
|
|
8
|
+
["terracotta", "#AC3F25", "#FBE5DC", "#FFFAF5", "#3E241B"],
|
|
9
|
+
["lavender", "#6A497B", "#EEE6F5", "#FCFAFD", "#34243D"],
|
|
10
|
+
["petrol", "#315664", "#E2EDF1", "#F8FBFC", "#223E48"],
|
|
11
|
+
["sand", "#6D5140", "#EFE4D8", "#FCFAF7", "#392C23"],
|
|
12
|
+
["indigo", "#43387D", "#EAE5F6", "#FAF9FD", "#292444"],
|
|
13
|
+
["olive", "#4F633A", "#E8EEDC", "#FBFCF8", "#2D3824"],
|
|
14
|
+
["rose", "#9B3E61", "#F6E2EB", "#FFFAFC", "#402332"],
|
|
15
|
+
["wine", "#7A3048", "#EFDEE5", "#FCF8FA", "#39202C"],
|
|
16
|
+
["sunflower", "#8A5D12", "#F7EBC6", "#FFFDF5", "#392F1D"],
|
|
17
|
+
["seafoam", "#216C62", "#DDF0E8", "#F7FCFA", "#193D36"],
|
|
18
|
+
["graphite", "#D5B98C", "#30343A", "#1B1E23", "#F5F2EA"],
|
|
19
|
+
["midnight", "#91B7DE", "#22344C", "#132236", "#F3F6FA"],
|
|
20
|
+
["ice", "#27697B", "#DDEFF5", "#F8FCFE", "#193C49"],
|
|
21
|
+
["copper", "#9A563B", "#F1E2D7", "#FCF9F5", "#3F2C23"],
|
|
22
|
+
];
|
|
23
|
+
export const EXPLORE_THEMES = colors.map(([id, accent, surface, background, ink]) => ({
|
|
24
|
+
id: `explore-${id}`,
|
|
25
|
+
palette: { accent, surface, background, ink, muted: ink, line: surface },
|
|
26
|
+
typography: {
|
|
27
|
+
heading: "Playfair Display",
|
|
28
|
+
body: "Inter",
|
|
29
|
+
code: "JetBrains Mono",
|
|
30
|
+
headingWeight: 600,
|
|
31
|
+
},
|
|
32
|
+
geometry: { radius: 4, spacing: 1.1, rule: "hairline" },
|
|
33
|
+
}));
|
|
34
|
+
export const EXPLORE_LAYOUTS = [
|
|
35
|
+
[
|
|
36
|
+
"cover",
|
|
37
|
+
"paragraph",
|
|
38
|
+
0,
|
|
39
|
+
0,
|
|
40
|
+
"Open with a spacious editorial headline, a short premise and an optional real photograph.",
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
"overview",
|
|
44
|
+
"features",
|
|
45
|
+
2,
|
|
46
|
+
4,
|
|
47
|
+
"Orient readers with a numbered overview of parallel subjects.",
|
|
48
|
+
],
|
|
49
|
+
[
|
|
50
|
+
"section",
|
|
51
|
+
"paragraph",
|
|
52
|
+
0,
|
|
53
|
+
0,
|
|
54
|
+
"Introduce one new section or central principle in a strong color field.",
|
|
55
|
+
],
|
|
56
|
+
[
|
|
57
|
+
"pillars",
|
|
58
|
+
"features",
|
|
59
|
+
2,
|
|
60
|
+
3,
|
|
61
|
+
"Explain two or three equally important ideas in spacious editorial columns.",
|
|
62
|
+
],
|
|
63
|
+
[
|
|
64
|
+
"focus",
|
|
65
|
+
"paragraph",
|
|
66
|
+
0,
|
|
67
|
+
0,
|
|
68
|
+
"Develop one idea in an asymmetric reading composition.",
|
|
69
|
+
],
|
|
70
|
+
[
|
|
71
|
+
"workflow",
|
|
72
|
+
"steps",
|
|
73
|
+
2,
|
|
74
|
+
4,
|
|
75
|
+
"Show an ordered workflow with explicit actions and useful descriptions.",
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
"timeline",
|
|
79
|
+
"steps",
|
|
80
|
+
2,
|
|
81
|
+
4,
|
|
82
|
+
"Present a short chronological sequence on a horizontal reading axis.",
|
|
83
|
+
],
|
|
84
|
+
[
|
|
85
|
+
"comparison",
|
|
86
|
+
"comparison",
|
|
87
|
+
2,
|
|
88
|
+
2,
|
|
89
|
+
"Compare two supplied alternatives with corresponding points.",
|
|
90
|
+
],
|
|
91
|
+
[
|
|
92
|
+
"worksheet",
|
|
93
|
+
"parameters",
|
|
94
|
+
2,
|
|
95
|
+
4,
|
|
96
|
+
"Explain named fields with their concrete values and instructions.",
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
"photo-story",
|
|
100
|
+
"image",
|
|
101
|
+
0,
|
|
102
|
+
0,
|
|
103
|
+
"Use a real contextual photograph beside a concise explanation.",
|
|
104
|
+
],
|
|
105
|
+
[
|
|
106
|
+
"quote",
|
|
107
|
+
"quote",
|
|
108
|
+
0,
|
|
109
|
+
0,
|
|
110
|
+
"Give an exact source statement room to breathe, retaining supplied attribution.",
|
|
111
|
+
],
|
|
112
|
+
[
|
|
113
|
+
"chart",
|
|
114
|
+
"chart",
|
|
115
|
+
2,
|
|
116
|
+
6,
|
|
117
|
+
"Compare source-backed quantities in labeled bars with the original unit.",
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
"ledger",
|
|
121
|
+
"parameters",
|
|
122
|
+
2,
|
|
123
|
+
5,
|
|
124
|
+
"Arrange named facts and explanations in a flat editorial ledger.",
|
|
125
|
+
],
|
|
126
|
+
[
|
|
127
|
+
"faq",
|
|
128
|
+
"features",
|
|
129
|
+
2,
|
|
130
|
+
3,
|
|
131
|
+
"Answer a small set of meaningful questions with concise responses.",
|
|
132
|
+
],
|
|
133
|
+
[
|
|
134
|
+
"action-plan",
|
|
135
|
+
"steps",
|
|
136
|
+
2,
|
|
137
|
+
3,
|
|
138
|
+
"Make the next few actions prominent, with descriptions that explain the work.",
|
|
139
|
+
],
|
|
140
|
+
[
|
|
141
|
+
"closing",
|
|
142
|
+
"paragraph",
|
|
143
|
+
0,
|
|
144
|
+
0,
|
|
145
|
+
"Close with one clear takeaway and a concrete next action.",
|
|
146
|
+
],
|
|
147
|
+
];
|
|
148
|
+
export const EXPLORE_RECIPES = EXPLORE_LAYOUTS.map(([id, kind, min, max]) => ({
|
|
149
|
+
id: `authored-explore-${id}`,
|
|
150
|
+
kind: "presentation",
|
|
151
|
+
renderer: "semantic",
|
|
152
|
+
automatic: true,
|
|
153
|
+
family: kind === "paragraph" ? `hero-explore-${id}` : kind,
|
|
154
|
+
minEntries: min,
|
|
155
|
+
maxEntries: max,
|
|
156
|
+
accepts: (["cover", "photo-story"].includes(id)
|
|
157
|
+
? ["paragraph", "image"]
|
|
158
|
+
: [kind]),
|
|
159
|
+
requiresImage: id === "photo-story",
|
|
160
|
+
}));
|
|
161
|
+
export function exploreCompositionFits(page, id) {
|
|
162
|
+
if (!id.startsWith("authored-explore-"))
|
|
163
|
+
return true;
|
|
164
|
+
const variant = id.slice("authored-explore-".length);
|
|
165
|
+
if (variant === "cover")
|
|
166
|
+
return page.purpose === "cover";
|
|
167
|
+
if (variant === "closing")
|
|
168
|
+
return page.purpose === "conclude";
|
|
169
|
+
if (["cover", "conclude"].includes(page.purpose))
|
|
170
|
+
return false;
|
|
171
|
+
if (variant === "section")
|
|
172
|
+
return (page.blocks.length === 1 &&
|
|
173
|
+
page.blocks[0].kind === "paragraph" &&
|
|
174
|
+
page.blocks[0].text.length <= 160);
|
|
175
|
+
return true;
|
|
176
|
+
}
|
package/dist/fontCatalog.js
CHANGED
|
@@ -22,6 +22,7 @@ export const GOOGLE_FONT_CATALOG = [
|
|
|
22
22
|
"Playfair Display",
|
|
23
23
|
"PT Serif",
|
|
24
24
|
].map((f) => entry(f, "serif")),
|
|
25
|
+
entry("Instrument Serif", "serif", ["latin"], [400]),
|
|
25
26
|
...["Space Grotesk", "Oswald", "Bebas Neue"].map((f) => entry(f, "display", ["latin"], f === "Bebas Neue" ? [400] : [400, 700])),
|
|
26
27
|
...["JetBrains Mono", "IBM Plex Mono", "Fira Code", "Source Code Pro"].map((f) => entry(f, "mono")),
|
|
27
28
|
entry("Noto Sans SC", "sans", ["zh"]),
|
|
@@ -37,6 +38,9 @@ export const GOOGLE_FONT_CATALOG = [
|
|
|
37
38
|
entry("Noto Serif KR", "serif", ["ko"]),
|
|
38
39
|
entry("Noto Sans Arabic", "sans", ["ar"]),
|
|
39
40
|
entry("Noto Sans Devanagari", "sans", ["hi"]),
|
|
41
|
+
entry("Noto Serif Devanagari", "serif", ["hi"]),
|
|
42
|
+
entry("Noto Sans Thai", "sans", ["th"]),
|
|
43
|
+
entry("Noto Serif Thai", "serif", ["th"]),
|
|
40
44
|
];
|
|
41
45
|
export function contentScript(text, locale = "en") {
|
|
42
46
|
if (/[\u3040-\u30ff]/u.test(text))
|
|
@@ -47,6 +51,8 @@ export function contentScript(text, locale = "en") {
|
|
|
47
51
|
return "ar";
|
|
48
52
|
if (/[\u0900-\u097f]/u.test(text))
|
|
49
53
|
return "hi";
|
|
54
|
+
if (/[\u0e00-\u0e7f]/u.test(text))
|
|
55
|
+
return "th";
|
|
50
56
|
if (/[\u3400-\u9fff]/u.test(text))
|
|
51
57
|
return /^ja/i.test(locale)
|
|
52
58
|
? "ja"
|
|
@@ -57,7 +63,7 @@ export function contentScript(text, locale = "en") {
|
|
|
57
63
|
: "zh";
|
|
58
64
|
if (/^zh/i.test(locale))
|
|
59
65
|
return /TW|HK|Hant/i.test(locale) ? "zh-Hant" : "zh";
|
|
60
|
-
return /^(ja|ko|ar|hi)/.exec(locale)?.[1] || "latin";
|
|
66
|
+
return /^(ja|ko|ar|hi|th)/.exec(locale)?.[1] || "latin";
|
|
61
67
|
}
|
|
62
68
|
export function recommendedFonts(locale, text = "") {
|
|
63
69
|
const script = contentScript(text, locale);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type DesignRecipe } from './designSystem.js';
|
|
2
|
+
import { type RecipeParameterContract, type CompositionKind } from './recipeParameters.js';
|
|
3
|
+
import type { SemanticKind } from './content.js';
|
|
4
|
+
export interface FormalComposition extends RecipeParameterContract {
|
|
5
|
+
displayNumber: string;
|
|
6
|
+
aspectRatios: {
|
|
7
|
+
min: number;
|
|
8
|
+
max: number;
|
|
9
|
+
};
|
|
10
|
+
recipe?: DesignRecipe;
|
|
11
|
+
}
|
|
12
|
+
/** Structural reference contracts shared with the product's existing renderers.
|
|
13
|
+
* Colorways and historical aliases remain outside active discovery.
|
|
14
|
+
*/
|
|
15
|
+
export declare const FORMAL_REFERENCE_COMPOSITIONS: readonly {
|
|
16
|
+
id: string;
|
|
17
|
+
reference: number;
|
|
18
|
+
layout: string;
|
|
19
|
+
accepts: readonly SemanticKind[];
|
|
20
|
+
}[];
|
|
21
|
+
/** Matches /dev/compositions/all: 161 default previews plus two landscape-only
|
|
22
|
+
* reference entries. Output capabilities overlap and must never be summed.
|
|
23
|
+
*/
|
|
24
|
+
export declare const FORMAL_COMPOSITIONS: readonly FormalComposition[];
|
|
25
|
+
/** Only output, ratio, and explicit IDs are hard gates; semantic fit is scored. */
|
|
26
|
+
export declare function applicableCompositions(kind: CompositionKind, ratio: number, id?: string): FormalComposition[];
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { EXPLORE_LAYOUTS } from './exploreCollection.js';
|
|
2
|
+
import { compositionUseCase } from './compositionUseCases.js';
|
|
3
|
+
import { nativeSocialParameterContract } from './nativeSocialParameters.js';
|
|
4
|
+
import { DESIGN_RECIPES } from './designSystem.js';
|
|
5
|
+
import { SOCIAL_LAYOUT_CATALOG } from './socialLayouts.js';
|
|
6
|
+
import { recipeParameterContract } from './recipeParameters.js';
|
|
7
|
+
import { SEMANTIC_DISPLAY_NUMBERS, SOCIAL_DISPLAY_NUMBERS } from './compositionNumbers.js';
|
|
8
|
+
const both = ['presentation', 'social'];
|
|
9
|
+
const semantic = (id, accepts, minEntries = 0, maxEntries = 12, requiresImage = false) => ({ id, renderer: 'semantic', kind: 'social', family: id, accepts, minEntries, maxEntries, requiresImage });
|
|
10
|
+
function define(recipe, kinds, id, displayNumber, min = .25, max = 4) {
|
|
11
|
+
return { ...recipeParameterContract(recipe, kinds), semanticDescription: EXPLORE_LAYOUTS.find(item => recipe.id === `authored-explore-${item[0]}`)?.[4] || compositionUseCase(recipe.id), id, displayNumber, aspectRatios: { min, max }, recipe };
|
|
12
|
+
}
|
|
13
|
+
/** Structural reference contracts shared with the product's existing renderers.
|
|
14
|
+
* Colorways and historical aliases remain outside active discovery.
|
|
15
|
+
*/
|
|
16
|
+
export const FORMAL_REFERENCE_COMPOSITIONS = [
|
|
17
|
+
{ id: 'authored-reference-photo', reference: 1, layout: 'authored-photo-editorial', accepts: ['image', 'paragraph'] },
|
|
18
|
+
{ id: 'authored-reference-manifesto', reference: 2, layout: 'authored-type-manifesto', accepts: ['paragraph'] },
|
|
19
|
+
{ id: 'authored-reference-journey', reference: 3, layout: 'authored-editorial-flow', accepts: ['steps'] },
|
|
20
|
+
{ id: 'authored-reference-vision', reference: 4, layout: 'authored-editorial-features', accepts: ['features'] },
|
|
21
|
+
{ id: 'authored-reference-matrix', reference: 5, layout: 'authored-editorial-matrix', accepts: ['comparison', 'paragraph'] },
|
|
22
|
+
{ id: 'authored-reference-diagonal', reference: 6, layout: 'authored-diagonal-cover', accepts: ['paragraph'] },
|
|
23
|
+
{ id: 'authored-reference-list', reference: 8, layout: 'authored-editorial-index', accepts: ['features'] },
|
|
24
|
+
{ id: 'authored-reference-story', reference: 11, layout: 'authored-visual-poster', accepts: ['image', 'paragraph', 'features'] },
|
|
25
|
+
{ id: 'authored-reference-sustainable', reference: 13, layout: 'authored-editorial-metrics', accepts: ['parameters'] },
|
|
26
|
+
{ id: 'authored-reference-code', reference: 14, layout: 'authored-code-panel', accepts: ['code'] },
|
|
27
|
+
{ id: 'authored-reference-bars', reference: 18, layout: 'authored-editorial-bars', accepts: ['chart'] },
|
|
28
|
+
{ id: 'authored-reference-share', reference: 19, layout: 'authored-editorial-donut', accepts: ['chart'] },
|
|
29
|
+
{ id: 'authored-reference-opinion', reference: 20, layout: 'authored-editorial-quote', accepts: ['quote'] },
|
|
30
|
+
{ id: 'authored-reference-comparison', reference: 22, layout: 'authored-editorial-comparison', accepts: ['comparison'] },
|
|
31
|
+
{ id: 'authored-reference-faq', reference: 23, layout: 'authored-editorial-faq', accepts: ['features'] },
|
|
32
|
+
{ id: 'authored-reference-trend', reference: 25, layout: 'authored-editorial-trend', accepts: ['chart'] },
|
|
33
|
+
];
|
|
34
|
+
const semanticRecipes = DESIGN_RECIPES.filter(recipe => recipe.renderer === 'semantic');
|
|
35
|
+
const uniqueSemantic = semanticRecipes.filter((recipe, index) => semanticRecipes.findIndex(other => other.id === recipe.id) === index);
|
|
36
|
+
const campaignDefinitions = [
|
|
37
|
+
['ledger-chart', ['parameters', 'chart'], 2, 6, false, true],
|
|
38
|
+
['detail-sidebar', ['paragraph', 'parameters'], 1, 3, false, true],
|
|
39
|
+
['technical-log', ['code', 'paragraph'], 0, 12, false, false],
|
|
40
|
+
['architecture-stack', ['steps', 'paragraph'], 2, 4, false, false],
|
|
41
|
+
['speaker-spotlight', ['quote', 'parameters'], 1, 6, true, false],
|
|
42
|
+
['speaker-lineup', ['quote', 'parameters'], 1, 6, true, false],
|
|
43
|
+
];
|
|
44
|
+
const founderDefinitions = [
|
|
45
|
+
['authored-mechanism-flow', ['features', 'steps', 'paragraph'], 2, 4],
|
|
46
|
+
['authored-reference-capability-map', ['features', 'paragraph'], 2, 4],
|
|
47
|
+
['authored-founder-timeline', ['steps', 'paragraph'], 2, 4],
|
|
48
|
+
['authored-founder-comparison', ['comparison', 'paragraph'], 2, 2],
|
|
49
|
+
];
|
|
50
|
+
const articleKinds = ['features', 'process', 'comparison', 'summary', 'checklist', 'faq', 'chart'];
|
|
51
|
+
const articleAccepts = { features: ['features', 'paragraph'], process: ['steps', 'paragraph'], comparison: ['comparison', 'paragraph'], summary: ['paragraph', 'features'], checklist: ['features', 'paragraph'], faq: ['features', 'paragraph'], chart: ['chart', 'paragraph'] };
|
|
52
|
+
function article(id, kind, variant) {
|
|
53
|
+
const cover = kind === 'cover';
|
|
54
|
+
const recipe = semantic(id, cover ? ['paragraph', 'features', 'image'] : articleAccepts[kind], 0, kind === 'chart' ? 12 : 3);
|
|
55
|
+
const number = cover ? variant + 1 : kind === 'features' && variant >= 3 ? 22 + variant : kind === 'process' && variant === 3 ? 33 : 4 + articleKinds.indexOf(kind) * 3 + variant;
|
|
56
|
+
const definition = define(recipe, [cover ? 'article-cover' : 'article-illustration'], id, `A${String(number).padStart(3, '0')}`, .5, 2.4);
|
|
57
|
+
// A cover is a headline, a short deck and its authored hero. It is not a
|
|
58
|
+
// miniature article: the original source remains in the candidate pool.
|
|
59
|
+
const coverSchema = { type: 'object', additionalProperties: false, required: ['title', 'blocks'], properties: {
|
|
60
|
+
title: { type: 'string', minLength: 1, maxLength: 72, description: 'A concise editorial headline, preferably four to eight words.' },
|
|
61
|
+
blocks: { type: 'array', minItems: 1, maxItems: 1, items: { type: 'object', additionalProperties: false, required: ['id', 'kind', 'text', 'evidence'], properties: {
|
|
62
|
+
id: { type: 'string', minLength: 1, maxLength: 80 }, kind: { const: 'paragraph' }, text: { type: 'string', minLength: 1, maxLength: 140, description: 'One concise supporting sentence. Summarize the topic; do not repeat the full article or enumerate every feature.' },
|
|
63
|
+
evidence: { type: 'array', minItems: 1, maxItems: 32, items: { type: 'object', additionalProperties: false, required: ['sourceId'], properties: { sourceId: { type: 'string', maxLength: 160 }, quote: { type: 'string', maxLength: 2000 } } } },
|
|
64
|
+
} } },
|
|
65
|
+
} };
|
|
66
|
+
// The optional hero preserves compatibility with saved paragraph-only pools.
|
|
67
|
+
// New requests can reference a real asset; missing assets retain native artwork.
|
|
68
|
+
const coverWithHero = { ...coverSchema, properties: { ...coverSchema.properties, blocks: { ...coverSchema.properties.blocks, maxItems: 2,
|
|
69
|
+
description: 'One supporting paragraph and, when imagery helps explain the topic, one image hero. Use an available asset ID or a missing image request; never invent a photo URL.',
|
|
70
|
+
items: [coverSchema.properties.blocks.items, { type: 'object', additionalProperties: false, required: ['id', 'kind', 'sourceId', 'alt', 'treatment', 'status', 'evidence'], properties: {
|
|
71
|
+
id: { type: 'string', minLength: 1, maxLength: 80 }, kind: { const: 'image' }, sourceId: { type: 'string', maxLength: 160 },
|
|
72
|
+
alt: { type: 'string', minLength: 1, maxLength: 300, description: 'A concise description of the image subject, grounded in the article topic.' },
|
|
73
|
+
treatment: { enum: ['photograph', 'diagram', 'screenshot'] }, status: { enum: ['available', 'missing'] }, assetId: { type: 'string', maxLength: 200 },
|
|
74
|
+
evidence: coverSchema.properties.blocks.items.properties.evidence,
|
|
75
|
+
} }],
|
|
76
|
+
} } };
|
|
77
|
+
const illustrationSchema = JSON.parse(JSON.stringify(definition.parameterSchema));
|
|
78
|
+
if (!cover) {
|
|
79
|
+
const primaryKind = kind === 'summary' ? 'features' : articleAccepts[kind][0];
|
|
80
|
+
const blocks = illustrationSchema.properties.blocks;
|
|
81
|
+
const primary = blocks.items.find((block) => block.properties.kind.const === primaryKind);
|
|
82
|
+
blocks.items = [primary];
|
|
83
|
+
blocks.minItems = 1;
|
|
84
|
+
blocks.maxItems = 1;
|
|
85
|
+
if (kind === 'faq')
|
|
86
|
+
primary.properties.entries.items.properties.title.pattern = '^.+[??]$';
|
|
87
|
+
}
|
|
88
|
+
const coverDirections = ['An editorial document sculpture with layered planes and a strong headline.', 'A connected constellation with a single focal object and an editorial headline.', 'An architectural archive silhouette balanced against expressive editorial typography.'];
|
|
89
|
+
return { ...definition, ...(cover ? { parameterSchema: coverWithHero, capacity: { minEntries: 0, maxEntries: 0, requiresImage: false }, semanticDescription: coverDirections[variant] } : { parameterSchema: illustrationSchema }), recipe: undefined, rendererKey: `article-${kind}:${variant}`,
|
|
90
|
+
semanticDescription: compositionUseCase(id) + (cover ? ' ' + coverDirections[variant] : '') };
|
|
91
|
+
}
|
|
92
|
+
/** Matches /dev/compositions/all: 161 default previews plus two landscape-only
|
|
93
|
+
* reference entries. Output capabilities overlap and must never be summed.
|
|
94
|
+
*/
|
|
95
|
+
export const FORMAL_COMPOSITIONS = [
|
|
96
|
+
...campaignDefinitions.map(([id, accepts, min, max, image, landscape], index) => define(semantic(`authored-reference-${id}`, accepts, min, max, image), landscape ? ['presentation'] : both, `new-reference:${id}`, `N${index + 1}`, landscape ? 1.4 : .25)),
|
|
97
|
+
define(semantic('authored-event-poster', ['parameters', 'paragraph'], 1, 6), ['social'], 'event:provider', 'E1'),
|
|
98
|
+
define(semantic('authored-image-triptych', ['paragraph', 'features', 'image'], 3, 3, true), ['social'], 'campaign:triptych', 'C1', .5, 2),
|
|
99
|
+
...FORMAL_REFERENCE_COMPOSITIONS.map(spec => define(semantic(spec.id, spec.accepts, 0, 12, spec.accepts.includes('image')), both, `reference:${spec.id}`, `R${String(spec.reference).padStart(2, '0')}`)),
|
|
100
|
+
...SOCIAL_LAYOUT_CATALOG.map(preset => {
|
|
101
|
+
const recipe = DESIGN_RECIPES.find(item => item.id === preset.id && item.kind === 'social');
|
|
102
|
+
return { ...define({ ...recipe, renderer: 'catalog' }, ['social'], `social:${preset.id}`, SOCIAL_DISPLAY_NUMBERS[preset.id], .5, 2.4), ...nativeSocialParameterContract(preset.id) };
|
|
103
|
+
}),
|
|
104
|
+
...uniqueSemantic.map(recipe => define(recipe, semanticRecipes.filter(other => other.id === recipe.id).map(other => other.kind), `semantic:${recipe.kind}:${recipe.id}`, recipe.id.startsWith("authored-explore-") ? `X${String(EXPLORE_LAYOUTS.findIndex(item => recipe.id === `authored-explore-${item[0]}`) + 1).padStart(2, "0")}` : SEMANTIC_DISPLAY_NUMBERS[`semantic:${recipe.kind}:${recipe.id}`], recipe.id.startsWith("authored-explore-") ? 1.4 : .25, recipe.id.startsWith("authored-explore-") ? 2 : 4)),
|
|
105
|
+
...founderDefinitions.map(([id, accepts, min, max], index) => define(semantic(id, accepts, min, max), ['social'], `semantic:social:${id}`, `F${index + 1}`, 1.3)),
|
|
106
|
+
...[0, 1, 2].flatMap(variant => [article(`article-cover-${variant}`, 'cover', variant), ...articleKinds.map(kind => article(`article-${kind}-${variant}`, kind, variant))]),
|
|
107
|
+
...[3, 4, 5, 6, 7, 8, 9, 10].map(variant => article(`article-features-${variant}`, 'features', variant)),
|
|
108
|
+
article('article-process-3', 'process', 3),
|
|
109
|
+
];
|
|
110
|
+
/** Only output, ratio, and explicit IDs are hard gates; semantic fit is scored. */
|
|
111
|
+
export function applicableCompositions(kind, ratio, id) {
|
|
112
|
+
if (!Number.isFinite(ratio) || ratio <= 0)
|
|
113
|
+
throw new Error('COMPOSITION_INVALID_RATIO');
|
|
114
|
+
if (id && !FORMAL_COMPOSITIONS.some(item => item.id === id))
|
|
115
|
+
throw new Error('COMPOSITION_UNKNOWN_ID');
|
|
116
|
+
return FORMAL_COMPOSITIONS.filter(item => item.supportedKinds.includes(kind) && ratio >= item.aspectRatios.min && ratio <= item.aspectRatios.max && (!id || item.id === id));
|
|
117
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,3 +13,14 @@ export * from "./designBlueprint.js";
|
|
|
13
13
|
export * from './compositionScenes.js';
|
|
14
14
|
export * from './editorial.js';
|
|
15
15
|
export * from './fontCatalog.js';
|
|
16
|
+
export * from './candidateRanking.js';
|
|
17
|
+
export * from './styleManifest.js';
|
|
18
|
+
export * from './recipeParameters.js';
|
|
19
|
+
export * from './formalCompositions.js';
|
|
20
|
+
export * from './contentBrief.js';
|
|
21
|
+
export * from "./nativeSocialParameters.js";
|
|
22
|
+
export * from "./compositionUseCases.js";
|
|
23
|
+
export { compositionParameterDefaults } from './parameterDefaults.js';
|
|
24
|
+
export { SOCIAL_DISPLAY_NUMBERS } from './compositionNumbers.js';
|
|
25
|
+
export * from './textPresentation.js';
|
|
26
|
+
export * from './exploreCollection.js';
|
package/dist/index.js
CHANGED
|
@@ -13,3 +13,14 @@ export * from "./designBlueprint.js";
|
|
|
13
13
|
export * from './compositionScenes.js';
|
|
14
14
|
export * from './editorial.js';
|
|
15
15
|
export * from './fontCatalog.js';
|
|
16
|
+
export * from './candidateRanking.js';
|
|
17
|
+
export * from './styleManifest.js';
|
|
18
|
+
export * from './recipeParameters.js';
|
|
19
|
+
export * from './formalCompositions.js';
|
|
20
|
+
export * from './contentBrief.js';
|
|
21
|
+
export * from "./nativeSocialParameters.js";
|
|
22
|
+
export * from "./compositionUseCases.js";
|
|
23
|
+
export { compositionParameterDefaults } from './parameterDefaults.js';
|
|
24
|
+
export { SOCIAL_DISPLAY_NUMBERS } from './compositionNumbers.js';
|
|
25
|
+
export * from './textPresentation.js';
|
|
26
|
+
export * from './exploreCollection.js';
|