@clipwright/core 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/account-actors.d.ts +173 -15
- package/dist/account-actors.js +142 -11
- package/dist/account-actors.js.map +1 -1
- package/dist/actor-bounds.d.ts +4 -0
- package/dist/actor-bounds.js +4 -0
- package/dist/actor-bounds.js.map +1 -1
- package/dist/actors.d.ts +31 -0
- package/dist/actors.js +26 -0
- package/dist/actors.js.map +1 -1
- package/dist/api-failure.d.ts +1 -1
- package/dist/api-failure.js +2 -2
- package/dist/api-failure.js.map +1 -1
- package/dist/aspect.d.ts +1 -1
- package/dist/aspect.js +5 -5
- package/dist/aspect.js.map +1 -1
- package/dist/assets.d.ts +30 -6
- package/dist/assets.js +26 -8
- package/dist/assets.js.map +1 -1
- package/dist/billing-terms.d.ts +69 -0
- package/dist/billing-terms.js +8 -0
- package/dist/billing-terms.js.map +1 -1
- package/dist/canvas-fit.js +1 -1
- package/dist/canvas-fit.js.map +1 -1
- package/dist/contract-dispositions.d.ts +493 -9
- package/dist/contract-dispositions.js +38 -14
- package/dist/contract-dispositions.js.map +1 -1
- package/dist/contracts/v1/workflow-brief.d.ts +1441 -0
- package/dist/contracts/v1/workflow-brief.js +4 -0
- package/dist/contracts/v1/workflow-brief.js.map +1 -1
- package/dist/contracts/v1/workflow-catalog.d.ts +2181 -103
- package/dist/contracts/v1/workflow-catalog.js +4 -2
- package/dist/contracts/v1/workflow-catalog.js.map +1 -1
- package/dist/contracts/v1/workflow-client.d.ts +1673 -3
- package/dist/contracts/v1/workflow-client.js +6 -3
- package/dist/contracts/v1/workflow-client.js.map +1 -1
- package/dist/contracts/v1/workflow-execution.d.ts +164 -12
- package/dist/contracts/v1/workflow-execution.js +15 -7
- package/dist/contracts/v1/workflow-execution.js.map +1 -1
- package/dist/contracts/v1/workflow-plan.d.ts +3228 -140
- package/dist/contracts/v1/workflow-primitives.d.ts +3 -1
- package/dist/contracts/v1/workflow-primitives.js +1 -1
- package/dist/contracts/v1/workflow-primitives.js.map +1 -1
- package/dist/contracts/v1/workflow-run-read.d.ts +116 -3
- package/dist/edit-billing.d.ts +12 -0
- package/dist/edit-billing.js +7 -0
- package/dist/edit-billing.js.map +1 -1
- package/dist/edit-candidate.d.ts +2 -2
- package/dist/edit-candidate.js +2 -2
- package/dist/edit-candidate.js.map +1 -1
- package/dist/edit-long-form.d.ts +3 -3
- package/dist/edit-long-form.js +14 -4
- package/dist/edit-long-form.js.map +1 -1
- package/dist/edit-revision.d.ts +1 -1
- package/dist/edit-revision.js +1 -1
- package/dist/edit-revision.js.map +1 -1
- package/dist/endpoint-notes.d.ts +3 -0
- package/dist/endpoint-notes.js +70 -0
- package/dist/endpoint-notes.js.map +1 -0
- package/dist/endpoints.d.ts +4 -0
- package/dist/endpoints.js +16 -0
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js +11 -2
- package/dist/errors.js.map +1 -1
- package/dist/face-billing.d.ts +55 -0
- package/dist/face-billing.js +24 -2
- package/dist/face-billing.js.map +1 -1
- package/dist/face-delivery.d.ts +1 -1
- package/dist/face-delivery.js +1 -1
- package/dist/face-delivery.js.map +1 -1
- package/dist/faceless-media-record.d.ts +1 -1
- package/dist/faceless-media-record.js +1 -1
- package/dist/faceless-media-record.js.map +1 -1
- package/dist/faceless-price.d.ts +49 -6
- package/dist/faceless-price.js +44 -10
- package/dist/faceless-price.js.map +1 -1
- package/dist/faceless-public-plan.d.ts +6 -2
- package/dist/faceless-public-plan.js +11 -7
- package/dist/faceless-public-plan.js.map +1 -1
- package/dist/faceless-public.d.ts +7 -2
- package/dist/faceless-public.js +5 -5
- package/dist/faceless-public.js.map +1 -1
- package/dist/faceless-voices.d.ts +6 -6
- package/dist/faceless-voices.js +5 -5
- package/dist/faceless-voices.js.map +1 -1
- package/dist/feedback.d.ts +29 -0
- package/dist/feedback.js +29 -0
- package/dist/feedback.js.map +1 -0
- package/dist/generations.d.ts +2 -19
- package/dist/generations.js +28 -49
- package/dist/generations.js.map +1 -1
- package/dist/idempotency.d.ts +2 -0
- package/dist/idempotency.js +7 -4
- package/dist/idempotency.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/long-form-pricing.d.ts +7 -4
- package/dist/long-form-pricing.js +13 -10
- package/dist/long-form-pricing.js.map +1 -1
- package/dist/long-form-revision.js +1 -1
- package/dist/long-form-revision.js.map +1 -1
- package/dist/media-timebase.js +2 -2
- package/dist/media-timebase.js.map +1 -1
- package/dist/openapi.d.ts +155 -0
- package/dist/openapi.js +339 -0
- package/dist/openapi.js.map +1 -0
- package/dist/pacing.d.ts +15 -0
- package/dist/pacing.js +30 -0
- package/dist/pacing.js.map +1 -1
- package/dist/parts-pricing.d.ts +84 -0
- package/dist/parts-pricing.js +105 -0
- package/dist/parts-pricing.js.map +1 -0
- package/dist/presenter-beats.d.ts +45 -0
- package/dist/presenter-beats.js +144 -0
- package/dist/presenter-beats.js.map +1 -0
- package/dist/prices.d.ts +98 -0
- package/dist/prices.js +193 -0
- package/dist/prices.js.map +1 -0
- package/dist/public-responses.d.ts +23 -0
- package/dist/public-responses.js +11 -0
- package/dist/public-responses.js.map +1 -0
- package/dist/rate-limit.d.ts +2 -2
- package/dist/rate-limit.js +2 -2
- package/dist/rate-limit.js.map +1 -1
- package/dist/reference-analysis.d.ts +915 -0
- package/dist/reference-analysis.js +210 -0
- package/dist/reference-analysis.js.map +1 -0
- package/dist/reference-kinds.d.ts +8 -0
- package/dist/reference-kinds.js +10 -0
- package/dist/reference-kinds.js.map +1 -0
- package/dist/reference-profile.d.ts +671 -0
- package/dist/reference-profile.js +198 -0
- package/dist/reference-profile.js.map +1 -0
- package/dist/reference-staging.d.ts +583 -0
- package/dist/reference-staging.js +153 -0
- package/dist/reference-staging.js.map +1 -0
- package/dist/reference-voice.d.ts +305 -0
- package/dist/reference-voice.js +108 -0
- package/dist/reference-voice.js.map +1 -0
- package/dist/render-backend.d.ts +1 -1
- package/dist/resolved-timeline.d.ts +54 -2
- package/dist/resolved-timeline.js +52 -6
- package/dist/resolved-timeline.js.map +1 -1
- package/dist/run-static-warnings.js +15 -6
- package/dist/run-static-warnings.js.map +1 -1
- package/dist/runs.d.ts +78 -6
- package/dist/runs.js +9 -4
- package/dist/runs.js.map +1 -1
- package/dist/semantic-inserts.d.ts +1 -1
- package/dist/semantic-inserts.js +2 -2
- package/dist/semantic-inserts.js.map +1 -1
- package/dist/skills.d.ts +1810 -29
- package/dist/skills.js +148 -35
- package/dist/skills.js.map +1 -1
- package/dist/templates/callout.d.ts +2 -2
- package/dist/templates/callout.js +6 -6
- package/dist/templates/callout.js.map +1 -1
- package/dist/templates/checklist.js +2 -2
- package/dist/templates/checklist.js.map +1 -1
- package/dist/templates/index.d.ts +15 -8
- package/dist/templates/index.js +30 -18
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/notification.js +2 -2
- package/dist/templates/notification.js.map +1 -1
- package/dist/templates/phone-call.d.ts +3 -0
- package/dist/templates/phone-call.js +14 -7
- package/dist/templates/phone-call.js.map +1 -1
- package/dist/templates/progress.js +2 -2
- package/dist/templates/progress.js.map +1 -1
- package/dist/templates/size.d.ts +1 -1
- package/dist/templates/size.js +1 -1
- package/dist/templates/size.js.map +1 -1
- package/dist/templates/sounds.d.ts +357 -7
- package/dist/templates/sounds.js +34 -12
- package/dist/templates/sounds.js.map +1 -1
- package/dist/ugc-call.d.ts +89 -0
- package/dist/ugc-call.js +111 -0
- package/dist/ugc-call.js.map +1 -0
- package/dist/ugc-delivery.d.ts +1 -1
- package/dist/ugc-delivery.js +1 -1
- package/dist/ugc-delivery.js.map +1 -1
- package/dist/ugc-framing.d.ts +26 -0
- package/dist/ugc-framing.js +64 -0
- package/dist/ugc-framing.js.map +1 -0
- package/dist/ugc-layers.d.ts +5 -1
- package/dist/ugc-layers.js +6 -1
- package/dist/ugc-layers.js.map +1 -1
- package/dist/ugc-video-media.d.ts +1 -1
- package/dist/ugc-video-media.js +1 -1
- package/dist/ugc-video-media.js.map +1 -1
- package/dist/uploads.d.ts +2 -2
- package/dist/uploads.js +2 -2
- package/dist/uploads.js.map +1 -1
- package/dist/vendor-response.d.ts +4 -0
- package/dist/vendor-response.js +12 -0
- package/dist/vendor-response.js.map +1 -1
- package/dist/voice-admission.d.ts +836 -420
- package/dist/voice-admission.js +22 -5
- package/dist/voice-admission.js.map +1 -1
- package/dist/voice-listing.d.ts +4 -4
- package/dist/voice-listing.js +11 -6
- package/dist/voice-listing.js.map +1 -1
- package/dist/voice-pace.d.ts +34 -0
- package/dist/voice-pace.generated.json +72 -0
- package/dist/voice-pace.js +34 -0
- package/dist/voice-pace.js.map +1 -0
- package/dist/voices.d.ts +32 -19
- package/dist/voices.js +81 -35
- package/dist/voices.js.map +1 -1
- package/dist/workflows/catalog.js +2 -1
- package/dist/workflows/catalog.js.map +1 -1
- package/dist/workflows/index.d.ts +2 -0
- package/dist/workflows/index.js +2 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/methods/faceless-explainer.d.ts +388 -10
- package/dist/workflows/methods/kinetic-launch.d.ts +388 -10
- package/dist/workflows/methods/kinetic-launch.js +1 -1
- package/dist/workflows/methods/product-image-story.d.ts +388 -10
- package/dist/workflows/methods/reference-remake.d.ts +881 -0
- package/dist/workflows/methods/reference-remake.js +26 -0
- package/dist/workflows/methods/reference-remake.js.map +1 -0
- package/dist/workflows/methods/shared.d.ts +388 -10
- package/dist/workflows/methods/shared.js +2 -2
- package/dist/workflows/methods/shared.js.map +1 -1
- package/dist/workflows/methods/ugc-faq-answer.d.ts +388 -10
- package/dist/workflows/methods/ugc-product-intro.d.ts +388 -10
- package/dist/workflows/methods/website-proof-demo.d.ts +388 -10
- package/dist/workflows/methods/website-proof-demo.js +1 -1
- package/dist/workflows/reference-remake.d.ts +684 -0
- package/dist/workflows/reference-remake.js +602 -0
- package/dist/workflows/reference-remake.js.map +1 -0
- package/dist/workflows/validate.js +10 -7
- package/dist/workflows/validate.js.map +1 -1
- package/package.json +9 -4
- package/CHANGELOG.md +0 -1393
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { REFERENCE_GRAPHIC_KINDS, REFERENCE_SOURCE_KINDS } from "./reference-kinds.js";
|
|
3
|
+
import { referenceStaging, stagingIssues } from "./reference-staging.js";
|
|
4
|
+
import { referenceVoice } from "./reference-voice.js";
|
|
5
|
+
import { CAPTION_EMPHASIS_LOOKS } from "./skills.js";
|
|
6
|
+
import { TEMPLATE_KIND_IDS, TEMPLATE_SOUND_BEATS } from "./templates/index.js";
|
|
7
|
+
import { PRESENTER_FRAMINGS } from "./ugc-layers.js";
|
|
8
|
+
export { REFERENCE_DESCRIBED_KINDS, REFERENCE_GRAPHIC_KINDS, REFERENCE_SOURCE_KINDS } from "./reference-kinds.js";
|
|
9
|
+
// Reference profile (reference-to-video S1): a reference ad's style in our vocabulary, beats in shares of its length, never its media.
|
|
10
|
+
export const REFERENCE_PROFILE_VERSION = "reference-profile-v1";
|
|
11
|
+
export const REFERENCE_FORMATS = ["talking_head_graphics", "faceless", "broll", "other"];
|
|
12
|
+
export const REFERENCE_BEAT_ROLES = ["hook", "problem", "agitation", "solution", "demo", "proof", "before_after", "social_proof", "offer", "cta",
|
|
13
|
+
"other"];
|
|
14
|
+
export const REFERENCE_POSITIONS = ["full_screen", "top", "center", "bottom", "top_left", "top_right", "bottom_left", "bottom_right", "split_top",
|
|
15
|
+
"split_bottom", "other"];
|
|
16
|
+
export const REFERENCE_CAMERAS = ["static", "punch_in", "zoom_out", "shake", "other"];
|
|
17
|
+
export const REFERENCE_TRANSITIONS = ["none", "cut", "wipe", "flash", "zoom", "other"];
|
|
18
|
+
export const REFERENCE_SOUND_KINDS = [...TEMPLATE_SOUND_BEATS, "music", "recorded_audio", "other"];
|
|
19
|
+
export const REFERENCE_PRESENTER_BEHAVIOURS = ["speaking", "listening", "reacting", "absent"];
|
|
20
|
+
export const REFERENCE_CAPTION_POSITIONS = ["top", "middle", "lower", "bottom"];
|
|
21
|
+
export const MAX_REFERENCE_SUMMARY_CHARS = 200;
|
|
22
|
+
export const MAX_REFERENCE_LABEL_CHARS = 120;
|
|
23
|
+
/** The transcribed words of a 120 s reference stay well under this (Ana, 69 s: 147 words). */
|
|
24
|
+
export const MAX_REFERENCE_TRANSCRIPT_WORDS = 1000;
|
|
25
|
+
/** The hook is the reference's first 3 s, carried to the end of its sentence but never past 6 s. */
|
|
26
|
+
export const REFERENCE_HOOK_SECONDS = 3;
|
|
27
|
+
export const REFERENCE_HOOK_MAX_SECONDS = 6;
|
|
28
|
+
/** What a graphic does at a state change, in a closed set. The reference's words live in transcript, hook, spoken_summary and label_hint. */
|
|
29
|
+
export const REFERENCE_STATE_CHANGES = ["appears", "disappears", "toggles_on", "toggles_off", "checked", "value_changes", "highlighted", "other"];
|
|
30
|
+
const customIssue = "custom";
|
|
31
|
+
const frac = z.number().min(0).max(1);
|
|
32
|
+
const seconds = z.number().min(0);
|
|
33
|
+
const text = (max) => z.string().max(max);
|
|
34
|
+
const referenceGraphic = z.strictObject({
|
|
35
|
+
kind: z.enum(REFERENCE_GRAPHIC_KINDS),
|
|
36
|
+
source_kind: z.enum(REFERENCE_SOURCE_KINDS).describe("The analyser's own word for it, or other."),
|
|
37
|
+
position: z.enum(REFERENCE_POSITIONS),
|
|
38
|
+
state_changes: z.array(z.strictObject({ at_frac: frac.describe("Share of the beat."), change: z.enum(REFERENCE_STATE_CHANGES) })).max(12),
|
|
39
|
+
label_hint: text(MAX_REFERENCE_LABEL_CHARS).describe("What the vision pass saw on it, in its words, such as \"Blue banner 'DEVELOP THE STORY'\"; empty when it gave none."),
|
|
40
|
+
});
|
|
41
|
+
const referenceBeat = z.strictObject({
|
|
42
|
+
start_frac: frac, end_frac: frac,
|
|
43
|
+
start_s: seconds.describe("Seconds of the reference, kept as evidence only."), end_s: seconds,
|
|
44
|
+
role: z.enum(REFERENCE_BEAT_ROLES),
|
|
45
|
+
spoken_summary: text(MAX_REFERENCE_SUMMARY_CHARS).describe("The words spoken in the beat, cut at 200 characters; empty when none were heard."),
|
|
46
|
+
graphics: z.array(referenceGraphic).max(8),
|
|
47
|
+
camera: z.enum(REFERENCE_CAMERAS),
|
|
48
|
+
transition_in: z.enum(REFERENCE_TRANSITIONS),
|
|
49
|
+
sounds: z.array(z.strictObject({ at_frac: frac, kind: z.enum(REFERENCE_SOUND_KINDS) })).max(12),
|
|
50
|
+
presenter_behaviour: z.enum(REFERENCE_PRESENTER_BEHAVIOURS),
|
|
51
|
+
});
|
|
52
|
+
export const referenceWord = z.strictObject({ text: z.string().min(1).max(64), start_s: seconds, end_s: seconds,
|
|
53
|
+
speaker: z.string().min(1).max(40).optional().describe("The transcription's speaker label, such as speaker_0; absent when it gave none.") });
|
|
54
|
+
export const referenceHook = z.strictObject({
|
|
55
|
+
text: text(MAX_REFERENCE_SUMMARY_CHARS).describe(`The words that start in the first ${REFERENCE_HOOK_SECONDS} s, through the end of their sentence `
|
|
56
|
+
+ `(no word starting past ${REFERENCE_HOOK_MAX_SECONDS} s); empty when none do.`),
|
|
57
|
+
end_s: seconds.describe("Where the hook's last word ends, else where its window does."),
|
|
58
|
+
caption: text(MAX_REFERENCE_LABEL_CHARS).optional().describe("The first on-screen caption line the vision pass read inside the hook's window."),
|
|
59
|
+
});
|
|
60
|
+
export const referenceProfile = z.strictObject({
|
|
61
|
+
version: z.literal(REFERENCE_PROFILE_VERSION),
|
|
62
|
+
source: z.strictObject({ digest: z.string().regex(/^sha256:[0-9a-f]{64}$/), duration_s: z.number().positive(), width: z.number().int().positive(),
|
|
63
|
+
height: z.number().int().positive(), url: z.string().url().max(2048).optional() }),
|
|
64
|
+
format: z.enum(REFERENCE_FORMATS),
|
|
65
|
+
beats: z.array(referenceBeat).min(1).max(40),
|
|
66
|
+
captions: z.strictObject({ present: z.boolean(), words_per_caption_max: z.number().int().min(1).max(12), position: z.enum(REFERENCE_CAPTION_POSITIONS),
|
|
67
|
+
emphasis_style: z.enum([...CAPTION_EMPHASIS_LOOKS, "none"]), hidden_under_graphics: z.boolean() }),
|
|
68
|
+
pacing: z.strictObject({ layer_change_every_s: z.number().positive(), face_share: frac }),
|
|
69
|
+
palette: z.array(z.string().regex(/^#[0-9A-F]{6}$/)).max(8),
|
|
70
|
+
music: text(200),
|
|
71
|
+
unmapped: z.array(z.strictObject({ what: text(200), beat_index: z.number().int().min(0), suggested_substitute: text(200) })).max(40),
|
|
72
|
+
analysis: z.strictObject({ models: z.array(z.string().min(1).max(60)).min(1), cost_usd: z.number().min(0).optional(),
|
|
73
|
+
latency_ms: z.number().int().min(0),
|
|
74
|
+
warnings: z.array(text(200)).max(8).optional().describe("What the analysis could not measure, such as the voice pass; also in warnings[].") }),
|
|
75
|
+
/** Optional since S7: a profile written before it has none and still parses. */
|
|
76
|
+
voice: referenceVoice.optional(),
|
|
77
|
+
/** Optional since #884 S5d; absent reads as close. */
|
|
78
|
+
presenter_framing: z.enum(PRESENTER_FRAMINGS).optional()
|
|
79
|
+
.describe("wide: the top of the presenter's head is below ~35% of the frame height, with visible room above; close otherwise."),
|
|
80
|
+
/** Optional since #884 S5d; absent reads as false. */
|
|
81
|
+
presenter_mic: z.boolean().optional()
|
|
82
|
+
.describe("true when the presenter holds a small handheld or clip-on microphone in their hand while speaking (not clipped to clothing)."),
|
|
83
|
+
/** Optional since #914 D1: a profile without it parses, and every field inside it is absent when not measured. */
|
|
84
|
+
staging: referenceStaging.optional(),
|
|
85
|
+
/** Optional since #930 S1, as is hook: a profile written before them parses. */
|
|
86
|
+
transcript: z.array(referenceWord).max(MAX_REFERENCE_TRANSCRIPT_WORDS).optional().describe("The reference's speech as timed words, in order."),
|
|
87
|
+
hook: referenceHook.optional(),
|
|
88
|
+
}).superRefine((profile, ctx) => {
|
|
89
|
+
const issue = (path, message) => ctx.addIssue({ code: customIssue, path, message });
|
|
90
|
+
const duration = profile.source.duration_s;
|
|
91
|
+
profile.transcript?.forEach((word, index) => {
|
|
92
|
+
if (word.end_s < word.start_s)
|
|
93
|
+
issue(["transcript", index, "end_s"], "ends before the word starts");
|
|
94
|
+
else if (word.end_s > duration)
|
|
95
|
+
issue(["transcript", index, "end_s"], `lies past the source's ${duration} s`);
|
|
96
|
+
if (index && word.start_s < profile.transcript[index - 1].start_s)
|
|
97
|
+
issue(["transcript", index, "start_s"], "starts before the word before it: words are in order");
|
|
98
|
+
});
|
|
99
|
+
if (profile.hook && profile.hook.end_s > duration)
|
|
100
|
+
issue(["hook", "end_s"], `lies past the source's ${duration} s`);
|
|
101
|
+
if (profile.staging) {
|
|
102
|
+
for (const found of stagingIssues(profile.staging, profile.beats, profile.source.duration_s))
|
|
103
|
+
issue(["staging", ...found.path], found.message);
|
|
104
|
+
}
|
|
105
|
+
profile.beats.forEach((beat, index) => {
|
|
106
|
+
if (beat.end_frac <= beat.start_frac)
|
|
107
|
+
issue(["beats", index, "end_frac"], "ends where or before the beat starts");
|
|
108
|
+
else if (beat.end_s <= beat.start_s)
|
|
109
|
+
issue(["beats", index, "end_s"], "ends where or before the beat starts");
|
|
110
|
+
if (beat.end_s > profile.source.duration_s)
|
|
111
|
+
issue(["beats", index, "end_s"], `lies past the source's ${profile.source.duration_s} s`);
|
|
112
|
+
const before = profile.beats[index - 1];
|
|
113
|
+
if (before && beat.start_frac < before.end_frac)
|
|
114
|
+
issue(["beats", index, "start_frac"], "overlaps the beat before it: beats are ordered and apart");
|
|
115
|
+
beat.graphics.forEach((graphic, at) => {
|
|
116
|
+
if ((graphic.kind === "particles" || graphic.kind === "unmapped") && !profile.unmapped.some(entry => entry.beat_index === index)) {
|
|
117
|
+
issue(["beats", index, "graphics", at, "kind"], `${graphic.kind} is not drawn: name it in unmapped with a substitute (rule 3)`);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
profile.unmapped.forEach((entry, index) => {
|
|
122
|
+
if (entry.beat_index >= profile.beats.length)
|
|
123
|
+
issue(["unmapped", index, "beat_index"], `there are ${profile.beats.length} beats`);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
/** Readers keep a newer profile whole and need only the gaps it names. */
|
|
127
|
+
export const referenceProfileRead = z.looseObject({ version: z.string(), beats: z.array(z.looseObject({ role: z.string() })).default([]),
|
|
128
|
+
unmapped: z.array(z.looseObject({ what: z.string(), beat_index: z.number(), suggested_substitute: z.string() })).default([]) });
|
|
129
|
+
/** What the plan does not reproduce from its reference, one warning per unmapped entry (rule 3, C5). */
|
|
130
|
+
export function referenceProfileWarnings(profile) {
|
|
131
|
+
if (!profile)
|
|
132
|
+
return [];
|
|
133
|
+
return (profile.unmapped ?? []).map(entry => {
|
|
134
|
+
const role = profile.beats?.[entry.beat_index]?.role;
|
|
135
|
+
return `Reference beat ${entry.beat_index + 1}${role ? ` (${role})` : ""}: ${entry.what} is not reproduced; instead: ${entry.suggested_substitute}.`;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const DIRECT = {
|
|
139
|
+
...Object.fromEntries(TEMPLATE_KIND_IDS.map(kind => [kind, kind])),
|
|
140
|
+
toggle_checklist: "checklist", before_after_split: "compare", split_screen: "layout_split", particles: "particles",
|
|
141
|
+
// A banner or a comment box (its word to comment) is a short line on a strip, as our tag; a logo card is a brand on a card, as
|
|
142
|
+
// title_card; a price card is a number, as stat. A concept card is a picture with a label, so it maps as product_ui does.
|
|
143
|
+
banner: "tag", comment_box: "tag", logo_card: "title_card", price_card: "stat",
|
|
144
|
+
};
|
|
145
|
+
const SUBSTITUTES = {
|
|
146
|
+
particles: "a stat or title_card on the same words; particles are not drawn",
|
|
147
|
+
};
|
|
148
|
+
/** The analyser's description of an element it called other, read for a kind; quoted on-screen text is left out, so a banner reading
|
|
149
|
+
* 'NEW LOGO' stays a banner. */
|
|
150
|
+
const DESCRIBED = [
|
|
151
|
+
["comment_box", /\bcomments?\b|\b(input|reply|text|message) (box|field|bar)\b/],
|
|
152
|
+
["logo_card", /\blogo\b/],
|
|
153
|
+
["price_card", /\bpric(e|es|ing)\b|\bdiscount\b|% off\b/],
|
|
154
|
+
["concept_card", /\bconcept\b|\bidea card\b|\bmood ?board\b/],
|
|
155
|
+
["banner", /\bbanner\b|\bplate\b|\bribbon\b|\bstrip\b/],
|
|
156
|
+
];
|
|
157
|
+
// A single quote closes only before a non-letter, so an apostrophe inside the quote ('DON'T COMMENT') does not end it.
|
|
158
|
+
const QUOTED = /"[^"]*"|“[^”]*”|(?<![\p{L}\p{N}])['‘].*?['’](?![\p{L}\p{N}])/gu;
|
|
159
|
+
/** An analyser's free-text state change as one of our categories; an unrecognised one is other, never kept as text. */
|
|
160
|
+
export function mapAnalyserStateChange(text) {
|
|
161
|
+
const s = text.trim().toLowerCase();
|
|
162
|
+
if (REFERENCE_STATE_CHANGES.includes(s))
|
|
163
|
+
return s;
|
|
164
|
+
if (/disappear|vanish|hide|hidden|remov|dismiss|fade[sd]? out|slide[sd]? out/.test(s))
|
|
165
|
+
return "disappears";
|
|
166
|
+
if (/appear|show|pop|slide[sd]? in|fade[sd]? in|enter|reveal/.test(s))
|
|
167
|
+
return "appears";
|
|
168
|
+
if (/\boff\b|uncheck|untick|disabl|deselect/.test(s))
|
|
169
|
+
return "toggles_off";
|
|
170
|
+
if (/check|tick|complet|done/.test(s))
|
|
171
|
+
return "checked";
|
|
172
|
+
if (/\bon\b|enabl|activat|select/.test(s))
|
|
173
|
+
return "toggles_on";
|
|
174
|
+
if (/highlight|glow|pulse|flash|circl|emphasi/.test(s))
|
|
175
|
+
return "highlighted";
|
|
176
|
+
if (/chang|updat|increas|decreas|count|grow|rise|fall|\d/.test(s))
|
|
177
|
+
return "value_changes";
|
|
178
|
+
return "other";
|
|
179
|
+
}
|
|
180
|
+
/** The analyser's name for a graphic when it is one we know, else the kind its description names, else other. */
|
|
181
|
+
export function mapAnalyserSourceKind(text, description = "") {
|
|
182
|
+
const s = text.trim();
|
|
183
|
+
if (s !== "other" && REFERENCE_SOURCE_KINDS.includes(s))
|
|
184
|
+
return s;
|
|
185
|
+
const plain = description.replace(QUOTED, " ").toLowerCase();
|
|
186
|
+
return DESCRIBED.find(([, pattern]) => pattern.test(plain))?.[0] ?? "other";
|
|
187
|
+
}
|
|
188
|
+
/** Our kind for an analyser's graphic: product UI and screenshots fill the frame as an insert, or sit over the presenter; what we cannot draw
|
|
189
|
+
* carries its substitute. */
|
|
190
|
+
export function mapAnalyserGraphic(kind, position) {
|
|
191
|
+
if (kind === "product_ui" || kind === "screenshot" || kind === "concept_card")
|
|
192
|
+
return { kind: position === "full_screen" ? "insert_media" : "overlay_media" };
|
|
193
|
+
const ours = Object.hasOwn(DIRECT, kind) ? DIRECT[kind] : "unmapped";
|
|
194
|
+
return ours === "particles" || ours === "unmapped"
|
|
195
|
+
? { kind: ours, unmapped: [ours, kind].filter(key => Object.hasOwn(SUBSTITUTES, key)).map(key => SUBSTITUTES[key])[0] ?? "a title_card with its label, or leave it out" }
|
|
196
|
+
: { kind: ours };
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=reference-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-profile.js","sourceRoot":"","sources":["../src/reference-profile.ts"],"names":[],"mappings":"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"}
|