@neatico/visual-core 0.14.66 → 0.14.69
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/cjs/compositionNumbers.js +5 -1
- package/dist/cjs/compositionUseCases.js +4 -0
- package/dist/cjs/layoutContracts.js +1 -0
- package/dist/cjs/nativeSocialParameters.js +34 -1
- package/dist/cjs/socialLayouts.js +4 -0
- package/dist/compositionNumbers.js +5 -1
- package/dist/compositionUseCases.js +4 -0
- package/dist/layoutContracts.js +1 -0
- package/dist/nativeSocialParameters.js +34 -1
- package/dist/socialLayouts.d.ts +16 -0
- package/dist/socialLayouts.js +4 -0
- package/package.json +1 -1
|
@@ -107,5 +107,9 @@ exports.SOCIAL_DISPLAY_NUMBERS = {
|
|
|
107
107
|
"safety": "S046",
|
|
108
108
|
"faq": "S047",
|
|
109
109
|
"split-bar-compare": "S048",
|
|
110
|
-
"benchmark-bars": "S049"
|
|
110
|
+
"benchmark-bars": "S049",
|
|
111
|
+
"price-increase": "S050",
|
|
112
|
+
"dark-promo": "S051",
|
|
113
|
+
"neon-workflow": "S052",
|
|
114
|
+
"navy-service": "S053"
|
|
111
115
|
};
|
|
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.compositionUseCase = compositionUseCase;
|
|
4
4
|
/** Authored communication tasks, independent of field count and successful parameter filling. */
|
|
5
5
|
const useCases = {
|
|
6
|
+
'neon-workflow': 'Introduce a supplied product or feature with a prominent blue product name, a benefit headline and exactly three input → product → output workflow stages. Use verified release facts; never invent model availability.',
|
|
7
|
+
'navy-service': 'Present a service with a concise benefit headline, a gold subheading and three supplied capabilities, beside original editable stationery artwork. Never invent legal requirements, turnaround times, qualifications or guarantees.',
|
|
8
|
+
'dark-promo': 'Promote a supplied product or offer with a bold headline, a concise product scope, an action, a website label and offer terms. Preserve exact discounts and eligibility; clearly label illustrative prices and never fabricate a real promotion.',
|
|
9
|
+
'price-increase': 'Announce an event ticket price increase or early-bird deadline, with the supplied current price, future price, effective date and event details. Preserve amounts and dates exactly; never invent urgency or ticket availability.',
|
|
6
10
|
'note-question': 'Ask one audience-facing question or open a discussion. A plain factual list is a weaker fit than a real question-led task.',
|
|
7
11
|
'note-marker': 'Emphasize one short assertion, takeaway, or opinion with highlighted typography. This is not a detailed list or quantitative explanation.',
|
|
8
12
|
'note-editorial': 'Present a short reflective editorial passage with a clear headline and supporting prose.',
|
|
@@ -8,6 +8,10 @@ const parameterDefaults_js_1 = require("./parameterDefaults.js");
|
|
|
8
8
|
const textPresentation_js_1 = require("./textPresentation.js");
|
|
9
9
|
const socialLayouts_js_1 = require("./socialLayouts.js");
|
|
10
10
|
const slots = {
|
|
11
|
+
'price-increase': { items: 2, value: true, image: true },
|
|
12
|
+
'dark-promo': { value: true, attribution: true },
|
|
13
|
+
'neon-workflow': { items: 3, value: true, attribution: true },
|
|
14
|
+
'navy-service': { items: 3, value: true },
|
|
11
15
|
'note-question': {}, 'note-marker': {}, 'note-editorial': {}, 'note-checklist': { items: 3 }, 'note-photo': { image: true }, 'note-news': { value: true },
|
|
12
16
|
'chat-messenger': { items: 3 }, 'chat-imessage': { items: 3 }, 'chat-telegram': { items: 3 }, 'chat-workplace': { items: 3 },
|
|
13
17
|
'time-notice': { value: true }, 'news-focus': {}, manifesto: {}, launch: { image: true }, bento: { items: 3 }, spotlight: { items: 3, value: true, image: true },
|
|
@@ -38,20 +42,45 @@ function nativeSocialParameterContract(id) {
|
|
|
38
42
|
properties.eyebrow = { ...copy(20, 'Optional concise section label. Use an empty string when no label improves the message.', 0), default: '' };
|
|
39
43
|
if (!id.startsWith('chat-') && !['note-photo', 'note-checklist'].includes(id))
|
|
40
44
|
properties.cta = { ...copy(24, 'Optional short call to action appropriate to the input. Use an empty string when this is purely informational.', 0), default: '' };
|
|
41
|
-
if (['note-marker', 'note-editorial', 'note-question'].includes(id))
|
|
45
|
+
if (['note-marker', 'note-editorial', 'note-question', 'dark-promo'].includes(id))
|
|
42
46
|
properties.titleLines = { type: 'array', minItems: 0, maxItems: 4, default: [], items: copy(40, 'One complete phrase from the title, preserving its original language.'), description: 'Preferred title lines: one item for a single line, two to four for a multiline heading, or empty for automatic fitting. Concatenating the phrases must preserve the complete title and word boundaries. The renderer may reflow only when the requested lines cannot fit legibly.' };
|
|
43
47
|
if (id === 'note-marker')
|
|
44
48
|
properties.emphasis = { type: 'array', minItems: 0, maxItems: 2, default: [], items: copy(40, 'An exact contiguous phrase from title to highlight.'), description: 'Choose one or two important exact title phrases. Empty means the renderer highlights the final title line.' };
|
|
49
|
+
if (id === 'price-increase') {
|
|
50
|
+
properties.title = copy(28, 'Short price-change headline; keep the event name in eyebrow.');
|
|
51
|
+
properties.body = copy(64, 'Short event descriptor. Use only supplied event facts or explicitly labelled sample text.');
|
|
52
|
+
}
|
|
45
53
|
if (spec.value)
|
|
46
54
|
properties.value = copy(24, 'The focal quantity, price, time, or short value statement. Label fictional quantities as simulated.');
|
|
47
55
|
if (spec.attribution)
|
|
48
56
|
properties.attribution = copy(48, 'Exact supplied attribution, or an empty string. Never invent an endorsement.', 0);
|
|
57
|
+
if (id === 'dark-promo') {
|
|
58
|
+
properties.title = copy(28, 'A concise supplied offer headline; do not invent a discount.');
|
|
59
|
+
properties.body = copy(64, 'A concise product or service scope.');
|
|
60
|
+
properties.value = copy(40, 'A supplied website or short destination label. Never invent a URL.', 0);
|
|
61
|
+
properties.attribution = copy(80, 'Offer eligibility and terms, or an explicit sample disclaimer. Never fabricate a real promotion.', 0);
|
|
62
|
+
}
|
|
49
63
|
if (spec.image)
|
|
50
64
|
properties.imageAssetId = asset();
|
|
65
|
+
if (id === 'neon-workflow') {
|
|
66
|
+
properties.title = copy(32, 'A concise launch or benefit headline. Never invent a release or model availability.');
|
|
67
|
+
properties.body = copy(60, 'One short supporting sentence.');
|
|
68
|
+
properties.value = copy(28, 'The supplied product or feature name, shown in large blue type.');
|
|
69
|
+
properties.attribution = copy(72, 'Supplied website and optional short capabilities line. Never invent a URL or certification.', 0);
|
|
70
|
+
}
|
|
71
|
+
if (id === 'navy-service') {
|
|
72
|
+
properties.title = copy(32, 'A concise service benefit headline.');
|
|
73
|
+
properties.body = copy(48, 'A short gold subheading. Do not invent delivery times, guarantees or legal claims.');
|
|
74
|
+
properties.value = copy(40, 'An optional supplied website or contact label. Never invent a URL.', 0);
|
|
75
|
+
}
|
|
51
76
|
if (spec.items) {
|
|
52
77
|
const item = { title: copy(id === 'faq' ? 40 : id === 'case-study' ? 18 : 20, id === 'faq' ? 'A concise audience question ending in a question mark.' : 'A short item label.'), description: copy(id === 'faq' ? 64 : spec.quantities || id === 'case-study' ? 32 : ['comparison', 'myth'].includes(id) ? 80 : supportingItemSlots.has(id) ? 48 : 40, 'Concise supporting copy.', spec.quantities ? 0 : 1) };
|
|
53
78
|
if (id === 'faq')
|
|
54
79
|
item.title.pattern = '^.+[??]$';
|
|
80
|
+
if (['neon-workflow', 'navy-service'].includes(id)) {
|
|
81
|
+
item.title = copy(20, id === 'neon-workflow' ? 'A short workflow stage label, in input → product → output order.' : 'A supplied service capability.');
|
|
82
|
+
item.description = copy(24, 'Optional concise supporting detail. Use empty text when not needed.', 0);
|
|
83
|
+
}
|
|
55
84
|
if (illustratedSlots.has(id))
|
|
56
85
|
item.illustration = { type: 'string', enum: exports.COMPOSITION_ILLUSTRATIONS, default: 'structure', description: 'An editable native illustration that explains this item. Choose document for material, review for checking, collaboration for people, feedback for revision, sequence for ordered actions, comparison for alternatives, or structure for organization. Never omit the visual slot.' };
|
|
57
86
|
if (spec.itemImages)
|
|
@@ -65,6 +94,10 @@ function nativeSocialParameterContract(id) {
|
|
|
65
94
|
}
|
|
66
95
|
properties.items = { type: 'array', minItems: spec.items, maxItems: spec.items, items: object(item), ...(spec.quantities === 'share' ? { description: 'Exactly three nonnegative percentage shares totaling at most one hundred.' } : {}) };
|
|
67
96
|
}
|
|
97
|
+
if (id === 'price-increase') {
|
|
98
|
+
properties.value = copy(24, 'Current ticket price and currency, optionally followed by Now. Preserve supplied amounts exactly.');
|
|
99
|
+
properties.items.description = 'Exactly two detail pairs in this order: item 0 title is event date and description is location; item 1 title is future ticket price and description is its effective date. Never invent missing dates or prices. Label illustrative content explicitly.';
|
|
100
|
+
}
|
|
68
101
|
if (spec.quantities === 'comparison' || spec.quantities === 'benchmark')
|
|
69
102
|
properties.comparisonLabels = { type: 'array', minItems: 2, maxItems: 2, items: copy(20, 'A supplied or explicitly illustrative series label.') };
|
|
70
103
|
if (['note-question', 'note-marker', 'note-editorial'].includes(id))
|
|
@@ -208,4 +208,8 @@ exports.SOCIAL_LAYOUT_CATALOG = [
|
|
|
208
208
|
scene: "product-showcase",
|
|
209
209
|
name: "Product showcase",
|
|
210
210
|
},
|
|
211
|
+
{ id: "price-increase", scene: "pricing", name: "Event price increase" },
|
|
212
|
+
{ id: "dark-promo", scene: "pricing", name: "Dark gradient promotion" },
|
|
213
|
+
{ id: "neon-workflow", scene: "launch", name: "Neon product workflow" },
|
|
214
|
+
{ id: "navy-service", scene: "features", name: "Navy and gold service" },
|
|
211
215
|
];
|
|
@@ -104,5 +104,9 @@ export const SOCIAL_DISPLAY_NUMBERS = {
|
|
|
104
104
|
"safety": "S046",
|
|
105
105
|
"faq": "S047",
|
|
106
106
|
"split-bar-compare": "S048",
|
|
107
|
-
"benchmark-bars": "S049"
|
|
107
|
+
"benchmark-bars": "S049",
|
|
108
|
+
"price-increase": "S050",
|
|
109
|
+
"dark-promo": "S051",
|
|
110
|
+
"neon-workflow": "S052",
|
|
111
|
+
"navy-service": "S053"
|
|
108
112
|
};
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/** Authored communication tasks, independent of field count and successful parameter filling. */
|
|
2
2
|
const useCases = {
|
|
3
|
+
'neon-workflow': 'Introduce a supplied product or feature with a prominent blue product name, a benefit headline and exactly three input → product → output workflow stages. Use verified release facts; never invent model availability.',
|
|
4
|
+
'navy-service': 'Present a service with a concise benefit headline, a gold subheading and three supplied capabilities, beside original editable stationery artwork. Never invent legal requirements, turnaround times, qualifications or guarantees.',
|
|
5
|
+
'dark-promo': 'Promote a supplied product or offer with a bold headline, a concise product scope, an action, a website label and offer terms. Preserve exact discounts and eligibility; clearly label illustrative prices and never fabricate a real promotion.',
|
|
6
|
+
'price-increase': 'Announce an event ticket price increase or early-bird deadline, with the supplied current price, future price, effective date and event details. Preserve amounts and dates exactly; never invent urgency or ticket availability.',
|
|
3
7
|
'note-question': 'Ask one audience-facing question or open a discussion. A plain factual list is a weaker fit than a real question-led task.',
|
|
4
8
|
'note-marker': 'Emphasize one short assertion, takeaway, or opinion with highlighted typography. This is not a detailed list or quantitative explanation.',
|
|
5
9
|
'note-editorial': 'Present a short reflective editorial passage with a clear headline and supporting prose.',
|
package/dist/layoutContracts.js
CHANGED
|
@@ -2,6 +2,10 @@ import { compositionParameterDefaults } from './parameterDefaults.js';
|
|
|
2
2
|
import { textPresentationSchema, validateTextPresentations } from './textPresentation.js';
|
|
3
3
|
import { SOCIAL_LAYOUT_CATALOG } from './socialLayouts.js';
|
|
4
4
|
const slots = {
|
|
5
|
+
'price-increase': { items: 2, value: true, image: true },
|
|
6
|
+
'dark-promo': { value: true, attribution: true },
|
|
7
|
+
'neon-workflow': { items: 3, value: true, attribution: true },
|
|
8
|
+
'navy-service': { items: 3, value: true },
|
|
5
9
|
'note-question': {}, 'note-marker': {}, 'note-editorial': {}, 'note-checklist': { items: 3 }, 'note-photo': { image: true }, 'note-news': { value: true },
|
|
6
10
|
'chat-messenger': { items: 3 }, 'chat-imessage': { items: 3 }, 'chat-telegram': { items: 3 }, 'chat-workplace': { items: 3 },
|
|
7
11
|
'time-notice': { value: true }, 'news-focus': {}, manifesto: {}, launch: { image: true }, bento: { items: 3 }, spotlight: { items: 3, value: true, image: true },
|
|
@@ -32,20 +36,45 @@ export function nativeSocialParameterContract(id) {
|
|
|
32
36
|
properties.eyebrow = { ...copy(20, 'Optional concise section label. Use an empty string when no label improves the message.', 0), default: '' };
|
|
33
37
|
if (!id.startsWith('chat-') && !['note-photo', 'note-checklist'].includes(id))
|
|
34
38
|
properties.cta = { ...copy(24, 'Optional short call to action appropriate to the input. Use an empty string when this is purely informational.', 0), default: '' };
|
|
35
|
-
if (['note-marker', 'note-editorial', 'note-question'].includes(id))
|
|
39
|
+
if (['note-marker', 'note-editorial', 'note-question', 'dark-promo'].includes(id))
|
|
36
40
|
properties.titleLines = { type: 'array', minItems: 0, maxItems: 4, default: [], items: copy(40, 'One complete phrase from the title, preserving its original language.'), description: 'Preferred title lines: one item for a single line, two to four for a multiline heading, or empty for automatic fitting. Concatenating the phrases must preserve the complete title and word boundaries. The renderer may reflow only when the requested lines cannot fit legibly.' };
|
|
37
41
|
if (id === 'note-marker')
|
|
38
42
|
properties.emphasis = { type: 'array', minItems: 0, maxItems: 2, default: [], items: copy(40, 'An exact contiguous phrase from title to highlight.'), description: 'Choose one or two important exact title phrases. Empty means the renderer highlights the final title line.' };
|
|
43
|
+
if (id === 'price-increase') {
|
|
44
|
+
properties.title = copy(28, 'Short price-change headline; keep the event name in eyebrow.');
|
|
45
|
+
properties.body = copy(64, 'Short event descriptor. Use only supplied event facts or explicitly labelled sample text.');
|
|
46
|
+
}
|
|
39
47
|
if (spec.value)
|
|
40
48
|
properties.value = copy(24, 'The focal quantity, price, time, or short value statement. Label fictional quantities as simulated.');
|
|
41
49
|
if (spec.attribution)
|
|
42
50
|
properties.attribution = copy(48, 'Exact supplied attribution, or an empty string. Never invent an endorsement.', 0);
|
|
51
|
+
if (id === 'dark-promo') {
|
|
52
|
+
properties.title = copy(28, 'A concise supplied offer headline; do not invent a discount.');
|
|
53
|
+
properties.body = copy(64, 'A concise product or service scope.');
|
|
54
|
+
properties.value = copy(40, 'A supplied website or short destination label. Never invent a URL.', 0);
|
|
55
|
+
properties.attribution = copy(80, 'Offer eligibility and terms, or an explicit sample disclaimer. Never fabricate a real promotion.', 0);
|
|
56
|
+
}
|
|
43
57
|
if (spec.image)
|
|
44
58
|
properties.imageAssetId = asset();
|
|
59
|
+
if (id === 'neon-workflow') {
|
|
60
|
+
properties.title = copy(32, 'A concise launch or benefit headline. Never invent a release or model availability.');
|
|
61
|
+
properties.body = copy(60, 'One short supporting sentence.');
|
|
62
|
+
properties.value = copy(28, 'The supplied product or feature name, shown in large blue type.');
|
|
63
|
+
properties.attribution = copy(72, 'Supplied website and optional short capabilities line. Never invent a URL or certification.', 0);
|
|
64
|
+
}
|
|
65
|
+
if (id === 'navy-service') {
|
|
66
|
+
properties.title = copy(32, 'A concise service benefit headline.');
|
|
67
|
+
properties.body = copy(48, 'A short gold subheading. Do not invent delivery times, guarantees or legal claims.');
|
|
68
|
+
properties.value = copy(40, 'An optional supplied website or contact label. Never invent a URL.', 0);
|
|
69
|
+
}
|
|
45
70
|
if (spec.items) {
|
|
46
71
|
const item = { title: copy(id === 'faq' ? 40 : id === 'case-study' ? 18 : 20, id === 'faq' ? 'A concise audience question ending in a question mark.' : 'A short item label.'), description: copy(id === 'faq' ? 64 : spec.quantities || id === 'case-study' ? 32 : ['comparison', 'myth'].includes(id) ? 80 : supportingItemSlots.has(id) ? 48 : 40, 'Concise supporting copy.', spec.quantities ? 0 : 1) };
|
|
47
72
|
if (id === 'faq')
|
|
48
73
|
item.title.pattern = '^.+[??]$';
|
|
74
|
+
if (['neon-workflow', 'navy-service'].includes(id)) {
|
|
75
|
+
item.title = copy(20, id === 'neon-workflow' ? 'A short workflow stage label, in input → product → output order.' : 'A supplied service capability.');
|
|
76
|
+
item.description = copy(24, 'Optional concise supporting detail. Use empty text when not needed.', 0);
|
|
77
|
+
}
|
|
49
78
|
if (illustratedSlots.has(id))
|
|
50
79
|
item.illustration = { type: 'string', enum: COMPOSITION_ILLUSTRATIONS, default: 'structure', description: 'An editable native illustration that explains this item. Choose document for material, review for checking, collaboration for people, feedback for revision, sequence for ordered actions, comparison for alternatives, or structure for organization. Never omit the visual slot.' };
|
|
51
80
|
if (spec.itemImages)
|
|
@@ -59,6 +88,10 @@ export function nativeSocialParameterContract(id) {
|
|
|
59
88
|
}
|
|
60
89
|
properties.items = { type: 'array', minItems: spec.items, maxItems: spec.items, items: object(item), ...(spec.quantities === 'share' ? { description: 'Exactly three nonnegative percentage shares totaling at most one hundred.' } : {}) };
|
|
61
90
|
}
|
|
91
|
+
if (id === 'price-increase') {
|
|
92
|
+
properties.value = copy(24, 'Current ticket price and currency, optionally followed by Now. Preserve supplied amounts exactly.');
|
|
93
|
+
properties.items.description = 'Exactly two detail pairs in this order: item 0 title is event date and description is location; item 1 title is future ticket price and description is its effective date. Never invent missing dates or prices. Label illustrative content explicitly.';
|
|
94
|
+
}
|
|
62
95
|
if (spec.quantities === 'comparison' || spec.quantities === 'benchmark')
|
|
63
96
|
properties.comparisonLabels = { type: 'array', minItems: 2, maxItems: 2, items: copy(20, 'A supplied or explicitly illustrative series label.') };
|
|
64
97
|
if (['note-question', 'note-marker', 'note-editorial'].includes(id))
|
package/dist/socialLayouts.d.ts
CHANGED
|
@@ -195,4 +195,20 @@ export declare const SOCIAL_LAYOUT_CATALOG: readonly [{
|
|
|
195
195
|
readonly id: "product-showcase";
|
|
196
196
|
readonly scene: "product-showcase";
|
|
197
197
|
readonly name: "Product showcase";
|
|
198
|
+
}, {
|
|
199
|
+
readonly id: "price-increase";
|
|
200
|
+
readonly scene: "pricing";
|
|
201
|
+
readonly name: "Event price increase";
|
|
202
|
+
}, {
|
|
203
|
+
readonly id: "dark-promo";
|
|
204
|
+
readonly scene: "pricing";
|
|
205
|
+
readonly name: "Dark gradient promotion";
|
|
206
|
+
}, {
|
|
207
|
+
readonly id: "neon-workflow";
|
|
208
|
+
readonly scene: "launch";
|
|
209
|
+
readonly name: "Neon product workflow";
|
|
210
|
+
}, {
|
|
211
|
+
readonly id: "navy-service";
|
|
212
|
+
readonly scene: "features";
|
|
213
|
+
readonly name: "Navy and gold service";
|
|
198
214
|
}];
|
package/dist/socialLayouts.js
CHANGED
|
@@ -205,4 +205,8 @@ export const SOCIAL_LAYOUT_CATALOG = [
|
|
|
205
205
|
scene: "product-showcase",
|
|
206
206
|
name: "Product showcase",
|
|
207
207
|
},
|
|
208
|
+
{ id: "price-increase", scene: "pricing", name: "Event price increase" },
|
|
209
|
+
{ id: "dark-promo", scene: "pricing", name: "Dark gradient promotion" },
|
|
210
|
+
{ id: "neon-workflow", scene: "launch", name: "Neon product workflow" },
|
|
211
|
+
{ id: "navy-service", scene: "features", name: "Navy and gold service" },
|
|
208
212
|
];
|
package/package.json
CHANGED