@clipwright/core 0.33.0 → 0.34.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/CHANGELOG.md +144 -0
- package/dist/api-failure.js +2 -1
- package/dist/api-failure.js.map +1 -1
- package/dist/asset-identity.d.ts +6 -0
- package/dist/asset-identity.js +7 -0
- package/dist/asset-identity.js.map +1 -0
- package/dist/assets.d.ts +386 -7
- package/dist/assets.js +114 -21
- package/dist/assets.js.map +1 -1
- package/dist/caption-language.d.ts +2 -0
- package/dist/caption-language.js +17 -0
- package/dist/caption-language.js.map +1 -0
- package/dist/contract-dispositions.d.ts +1133 -8
- package/dist/contract-dispositions.js +51 -11
- package/dist/contract-dispositions.js.map +1 -1
- package/dist/contracts/v1/workflow-brief.d.ts +1670 -2
- package/dist/contracts/v1/workflow-catalog.d.ts +1670 -2
- package/dist/contracts/v1/workflow-client.d.ts +835 -1
- package/dist/contracts/v1/workflow-execution.d.ts +2 -0
- package/dist/contracts/v1/workflow-plan.d.ts +2533 -31
- package/dist/endpoints.js +2 -0
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -0
- package/dist/errors.js.map +1 -1
- package/dist/generations.d.ts +32 -6
- package/dist/generations.js +83 -27
- package/dist/generations.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/public-endpoints.d.ts +2 -0
- package/dist/public-endpoints.js +2 -0
- package/dist/public-endpoints.js.map +1 -1
- package/dist/resolved-timeline.d.ts +153 -0
- package/dist/resolved-timeline.js +46 -0
- package/dist/resolved-timeline.js.map +1 -1
- package/dist/run-static-warnings.js +5 -2
- package/dist/run-static-warnings.js.map +1 -1
- package/dist/semantic-inserts.d.ts +7 -0
- package/dist/semantic-inserts.js +19 -9
- package/dist/semantic-inserts.js.map +1 -1
- package/dist/skills.d.ts +4112 -77
- package/dist/skills.js +261 -16
- package/dist/skills.js.map +1 -1
- package/dist/templates/callout.d.ts +34 -0
- package/dist/templates/callout.js +51 -0
- package/dist/templates/callout.js.map +1 -0
- package/dist/templates/checklist.d.ts +42 -0
- package/dist/templates/checklist.js +47 -0
- package/dist/templates/checklist.js.map +1 -0
- package/dist/templates/compare.d.ts +26 -0
- package/dist/templates/compare.js +35 -0
- package/dist/templates/compare.js.map +1 -0
- package/dist/templates/end-card.d.ts +16 -0
- package/dist/templates/end-card.js +25 -0
- package/dist/templates/end-card.js.map +1 -0
- package/dist/templates/index.d.ts +164 -0
- package/dist/templates/index.js +382 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/lower-third.d.ts +18 -0
- package/dist/templates/lower-third.js +26 -0
- package/dist/templates/lower-third.js.map +1 -0
- package/dist/templates/notification.d.ts +30 -0
- package/dist/templates/notification.js +32 -0
- package/dist/templates/notification.js.map +1 -0
- package/dist/templates/phone-call.d.ts +24 -0
- package/dist/templates/phone-call.js +36 -0
- package/dist/templates/phone-call.js.map +1 -0
- package/dist/templates/progress.d.ts +22 -0
- package/dist/templates/progress.js +42 -0
- package/dist/templates/progress.js.map +1 -0
- package/dist/templates/quote.d.ts +21 -0
- package/dist/templates/quote.js +29 -0
- package/dist/templates/quote.js.map +1 -0
- package/dist/templates/rating.d.ts +22 -0
- package/dist/templates/rating.js +29 -0
- package/dist/templates/rating.js.map +1 -0
- package/dist/templates/size.d.ts +13 -0
- package/dist/templates/size.js +10 -0
- package/dist/templates/size.js.map +1 -0
- package/dist/templates/slot.d.ts +10 -0
- package/dist/templates/slot.js +5 -0
- package/dist/templates/slot.js.map +1 -0
- package/dist/templates/sounds.d.ts +351 -0
- package/dist/templates/sounds.js +67 -0
- package/dist/templates/sounds.js.map +1 -0
- package/dist/templates/stat.d.ts +20 -0
- package/dist/templates/stat.js +33 -0
- package/dist/templates/stat.js.map +1 -0
- package/dist/templates/tag.d.ts +23 -0
- package/dist/templates/tag.js +31 -0
- package/dist/templates/tag.js.map +1 -0
- package/dist/templates/theme.d.ts +29 -0
- package/dist/templates/theme.js +47 -0
- package/dist/templates/theme.js.map +1 -0
- package/dist/templates/title-card.d.ts +21 -0
- package/dist/templates/title-card.js +30 -0
- package/dist/templates/title-card.js.map +1 -0
- package/dist/tts-backend.d.ts +9 -0
- package/dist/tts-backend.js +21 -0
- package/dist/tts-backend.js.map +1 -1
- package/dist/ugc-layers.d.ts +84 -0
- package/dist/ugc-layers.js +137 -0
- package/dist/ugc-layers.js.map +1 -0
- package/dist/ugc-video-media.d.ts +12 -0
- package/dist/ugc-video-media.js +39 -0
- package/dist/ugc-video-media.js.map +1 -0
- package/dist/voice-admission.d.ts +835 -1
- package/dist/workflows/methods/faceless-explainer.d.ts +329 -2
- package/dist/workflows/methods/kinetic-launch.d.ts +329 -2
- package/dist/workflows/methods/product-image-story.d.ts +329 -2
- package/dist/workflows/methods/shared.d.ts +329 -2
- package/dist/workflows/methods/ugc-faq-answer.d.ts +329 -2
- package/dist/workflows/methods/ugc-product-intro.d.ts +329 -2
- package/dist/workflows/methods/website-proof-demo.d.ts +329 -2
- package/dist/workflows/validate.js +14 -9
- package/dist/workflows/validate.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { faceZone, frameCanvasOf } from "../ugc-layers.js";
|
|
3
|
+
import { sizedScale, templateSize } from "./size.js";
|
|
4
|
+
export const CHECKLIST_ICONS = ["phone", "briefcase", "user", "clock", "chat", "star"];
|
|
5
|
+
/** A row's label at medium on a 1080 short side, as the toggle cards of reference seconds 18–23. */
|
|
6
|
+
export const CHECKLIST_FONT_PX = 60;
|
|
7
|
+
/** Label sizes: a row's height, the gap between rows, the cursor's room under and right of the list, and the list's width. */
|
|
8
|
+
export const CHECKLIST_EMS = { row: 1.9, gap: 0.3, cursor: 1.5, width: 14 };
|
|
9
|
+
const item = z.object({ label: z.string().min(1).max(24), on: z.boolean(), icon: z.enum(CHECKLIST_ICONS).optional() }).strict();
|
|
10
|
+
const click = z.object({ item: z.number().int().min(0).max(3), quote: z.string().min(1).max(200).optional() }).strict();
|
|
11
|
+
const data = z.object({ items: z.array(item).min(2).max(4), clicks: z.array(click).max(6).optional(), style: z.enum(["switch", "check"]).optional(),
|
|
12
|
+
size: templateSize }).strict().superRefine((value, context) => {
|
|
13
|
+
for (const [index, entry] of (value.clicks ?? []).entries()) {
|
|
14
|
+
if (entry.item >= value.items.length)
|
|
15
|
+
context.addIssue({ code: z.ZodIssueCode.custom, path: ["clicks", index, "item"], message: `item ${entry.item} is past the ${value.items.length} items` });
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
/** Rows of toggles over the presenter, clicked on in turn by a cursor: below the face in tall and square frames, beside it in wide ones. */
|
|
19
|
+
export const checklist = {
|
|
20
|
+
kind: "checklist",
|
|
21
|
+
kindVersion: 1,
|
|
22
|
+
description: "2–4 rows, each an optional icon, a label and a switch or check box set on or off; a cursor clicks rows in turn (item is the " +
|
|
23
|
+
"row's index from 0), each click flipping it; below the face",
|
|
24
|
+
placements: ["over"],
|
|
25
|
+
data,
|
|
26
|
+
text: { "items.label": 24 },
|
|
27
|
+
quotes: ["clicks.quote"],
|
|
28
|
+
// The rows are in by frame 9 and the cursor, shown from 8, reaches the first row two frames before its click.
|
|
29
|
+
beatsFrom: 12,
|
|
30
|
+
slots: {},
|
|
31
|
+
hidesCaptions: () => false,
|
|
32
|
+
onInserts: false,
|
|
33
|
+
rect: (value, aspectRatio) => {
|
|
34
|
+
const canvas = frameCanvasOf(aspectRatio), { width: w, height: h } = canvas, margin = Math.round(0.04 * Math.min(w, h)), face = faceZone(aspectRatio);
|
|
35
|
+
const rows = value.items.length, ems = rows * CHECKLIST_EMS.row + (rows - 1) * CHECKLIST_EMS.gap + CHECKLIST_EMS.cursor;
|
|
36
|
+
const wide = w > h, room = wide ? h - 2 * margin : h - margin - Math.round((face.top + face.height + 0.01) * h);
|
|
37
|
+
// The size scales the list, and a frame without room under the face shrinks it to fit.
|
|
38
|
+
const em = Math.min(CHECKLIST_FONT_PX * sizedScale(value.size, canvas), room / ems), height = Math.round(ems * em);
|
|
39
|
+
const width = Math.round(Math.min(wide ? face.left * w - 2 * margin : 0.9 * w, (CHECKLIST_EMS.width + CHECKLIST_EMS.cursor) * em));
|
|
40
|
+
const left = wide ? margin : Math.round((w - width) / 2);
|
|
41
|
+
const top = wide ? Math.round((h - height) / 2) : Math.min(h - margin - height, Math.max(Math.round((face.top + face.height + 0.01) * h), Math.round(0.71 * h - height / 2)));
|
|
42
|
+
return { left: left / w, top: top / h, width: width / w, height: height / h };
|
|
43
|
+
},
|
|
44
|
+
sample: { items: [{ label: "answers calls", on: true, icon: "phone" }, { label: "works 24/7", on: false, icon: "briefcase" },
|
|
45
|
+
{ label: "gets annoyed", on: true, icon: "user" }], clicks: [{ item: 1, quote: "all day" }, { item: 2, quote: "never" }] },
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=checklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.js","sourceRoot":"","sources":["../../src/templates/checklist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { TemplateKind } from "./index.js";
|
|
3
|
+
/** The card's width at medium on a 1080 short side; it is 3:5, as tall as the reference's, and both pictures are cut to fill it. */
|
|
4
|
+
export declare const COMPARE_WIDTH_PX = 760;
|
|
5
|
+
export declare const COMPARE_CARD_SHAPE: number;
|
|
6
|
+
declare const data: z.ZodObject<{
|
|
7
|
+
before: z.ZodObject<{
|
|
8
|
+
asset_id: z.ZodString;
|
|
9
|
+
}, z.core.$strict>;
|
|
10
|
+
after: z.ZodObject<{
|
|
11
|
+
asset_id: z.ZodString;
|
|
12
|
+
}, z.core.$strict>;
|
|
13
|
+
labels: z.ZodOptional<z.ZodObject<{
|
|
14
|
+
before: z.ZodOptional<z.ZodString>;
|
|
15
|
+
after: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strict>>;
|
|
17
|
+
reveal_at: z.ZodString;
|
|
18
|
+
size: z.ZodOptional<z.ZodEnum<{
|
|
19
|
+
large: "large";
|
|
20
|
+
medium: "medium";
|
|
21
|
+
small: "small";
|
|
22
|
+
}>>;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
/** Expectation against reality on a full frame: the before picture on a card, the after one swept in on a diagonal on a word (ref 50–55 s). */
|
|
25
|
+
export declare const compare: TemplateKind<typeof data>;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { frameCanvasOf } from "../ugc-layers.js";
|
|
3
|
+
import { sizedScale, templateSize } from "./size.js";
|
|
4
|
+
import { templateMedia } from "./slot.js";
|
|
5
|
+
/** The card's width at medium on a 1080 short side; it is 3:5, as tall as the reference's, and both pictures are cut to fill it. */
|
|
6
|
+
export const COMPARE_WIDTH_PX = 760;
|
|
7
|
+
export const COMPARE_CARD_SHAPE = 3 / 5;
|
|
8
|
+
const data = z.object({ before: templateMedia, after: templateMedia,
|
|
9
|
+
labels: z.object({ before: z.string().min(1).max(20).optional(), after: z.string().min(1).max(20).optional() }).strict().optional(),
|
|
10
|
+
reveal_at: z.string().min(1).max(200), size: templateSize }).strict();
|
|
11
|
+
/** Expectation against reality on a full frame: the before picture on a card, the after one swept in on a diagonal on a word (ref 50–55 s). */
|
|
12
|
+
export const compare = {
|
|
13
|
+
kind: "compare",
|
|
14
|
+
kindVersion: 1,
|
|
15
|
+
description: "a full-frame card showing the before image, then the after image sweeps in on a diagonal on reveal_at and both stay side by side, " +
|
|
16
|
+
"each with an optional label pill; both images are cut to fill a 3:5 card",
|
|
17
|
+
placements: ["full"],
|
|
18
|
+
data,
|
|
19
|
+
text: { "labels.before": 20, "labels.after": 20 },
|
|
20
|
+
quotes: ["reveal_at"],
|
|
21
|
+
beatsFrom: 9,
|
|
22
|
+
slots: { before: { type: "image", cover: COMPARE_CARD_SHAPE }, after: { type: "image", cover: COMPARE_CARD_SHAPE } },
|
|
23
|
+
hidesCaptions: () => true,
|
|
24
|
+
onInserts: false,
|
|
25
|
+
rect: (value, aspectRatio) => {
|
|
26
|
+
const canvas = frameCanvasOf(aspectRatio), { width: w, height: h } = canvas;
|
|
27
|
+
let width = COMPARE_WIDTH_PX * sizedScale(value.size, canvas);
|
|
28
|
+
width = Math.round(Math.min(width, 0.92 * w, 0.92 * h * COMPARE_CARD_SHAPE));
|
|
29
|
+
const height = Math.round(width / COMPARE_CARD_SHAPE);
|
|
30
|
+
return { left: Math.round((w - width) / 2) / w, top: Math.round((h - height) / 2) / h, width: width / w, height: height / h };
|
|
31
|
+
},
|
|
32
|
+
sample: { before: { asset_id: `ast_${"b".repeat(32)}` }, after: { asset_id: `ast_${"a".repeat(32)}` }, labels: { before: "expectation", after: "reality" },
|
|
33
|
+
reveal_at: "in reality" },
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/templates/compare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { TemplateKind } from "./index.js";
|
|
3
|
+
/** The footprint is this many site font sizes high (pill, gap and call to action); the site at medium is the tag's 92 px. */
|
|
4
|
+
export declare const END_CARD_RECT_EMS = 3.4;
|
|
5
|
+
declare const data: z.ZodObject<{
|
|
6
|
+
site: z.ZodString;
|
|
7
|
+
cta: z.ZodOptional<z.ZodString>;
|
|
8
|
+
size: z.ZodOptional<z.ZodEnum<{
|
|
9
|
+
large: "large";
|
|
10
|
+
medium: "medium";
|
|
11
|
+
small: "small";
|
|
12
|
+
}>>;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
/** The closing card in the caption spot: the site on the gradient pill and an optional call to action under it. */
|
|
15
|
+
export declare const endCard: TemplateKind<typeof data>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { frameCanvasOf } from "../ugc-layers.js";
|
|
3
|
+
import { sizedScale, templateSize } from "./size.js";
|
|
4
|
+
/** The footprint is this many site font sizes high (pill, gap and call to action); the site at medium is the tag's 92 px. */
|
|
5
|
+
export const END_CARD_RECT_EMS = 3.4;
|
|
6
|
+
const data = z.object({ site: z.string().min(1).max(32), cta: z.string().min(1).max(48).optional(), size: templateSize }).strict();
|
|
7
|
+
/** The closing card in the caption spot: the site on the gradient pill and an optional call to action under it. */
|
|
8
|
+
export const endCard = {
|
|
9
|
+
kind: "end_card",
|
|
10
|
+
kindVersion: 1,
|
|
11
|
+
description: "a site pill with an optional call to action in the caption spot; captions are hidden while it shows",
|
|
12
|
+
placements: ["over"],
|
|
13
|
+
data,
|
|
14
|
+
text: { site: 32, cta: 48 },
|
|
15
|
+
slots: {},
|
|
16
|
+
hidesCaptions: () => true,
|
|
17
|
+
onInserts: false,
|
|
18
|
+
rect: (value, aspectRatio) => {
|
|
19
|
+
const canvas = frameCanvasOf(aspectRatio), { width: w, height: h } = canvas, short = Math.min(w, h), scale = sizedScale(value.size, canvas);
|
|
20
|
+
const width = Math.round(Math.min(0.9 * w, 1.25 * short * scale)), height = Math.round(END_CARD_RECT_EMS * 92 * scale);
|
|
21
|
+
return { left: Math.round((w - width) / 2) / w, top: Math.round(0.72 * h - height / 2) / h, width: width / w, height: height / h };
|
|
22
|
+
},
|
|
23
|
+
sample: { site: "clipwright.io", cta: "make your first video" },
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=end-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end-card.js","sourceRoot":"","sources":["../../src/templates/end-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAErD,6HAA6H;AAC7H,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAEnI,mHAAmH;AACnH,MAAM,CAAC,MAAM,OAAO,GAA8B;IAChD,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,qGAAqG;IAClH,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,IAAI;IACJ,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IAC3B,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5I,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QACvH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IACrI,CAAC;IACD,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,uBAAuB,EAAE;CAChE,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type AnchoredItem, type LayerRect, type LayerRefusal, type OverlayPosition, type WordRange } from "../ugc-layers.js";
|
|
3
|
+
import type { TemplateSlot } from "./slot.js";
|
|
4
|
+
import { type TemplatePreset } from "./theme.js";
|
|
5
|
+
export declare const TEMPLATE_PLACEMENTS: readonly ["over", "full"];
|
|
6
|
+
export type TemplatePlacement = (typeof TEMPLATE_PLACEMENTS)[number];
|
|
7
|
+
export declare const MAX_TEMPLATES = 12;
|
|
8
|
+
export { contrastRatio, DEFAULT_TEMPLATE_PRESET, TEMPLATE_MIN_CONTRAST, TEMPLATE_PRESET_SURFACES, TEMPLATE_PRESETS, templateAccentRefusal, templateTheme, type TemplatePreset, type TemplateTheme } from "./theme.js";
|
|
9
|
+
/** One kind: a strict data schema with no defaults or transforms; `kindVersion` moves only when that shape changes (A8). */
|
|
10
|
+
export interface TemplateKind<D extends z.ZodObject = z.ZodObject> {
|
|
11
|
+
kind: string;
|
|
12
|
+
kindVersion: number;
|
|
13
|
+
description: string;
|
|
14
|
+
/** The placements it takes; the first is used when an item names none. */
|
|
15
|
+
placements: readonly TemplatePlacement[];
|
|
16
|
+
data: D;
|
|
17
|
+
/** Text fields and the most units each takes; a dotted path reaches into objects and every element of a list. */
|
|
18
|
+
text: Readonly<Record<string, number>>;
|
|
19
|
+
/** Inner quotes, as dotted paths: each value is one beat, in order, landing on its words inside the item's own; absent is spread evenly (D6). */
|
|
20
|
+
quotes?: readonly string[];
|
|
21
|
+
/** A list whose elements each take a beat when the item quotes none, spread evenly; absent is one beat per quote value. */
|
|
22
|
+
spreads?: string;
|
|
23
|
+
/** The first frame a beat may land on: the kind has entered and, for a checklist, its cursor has reached the rows; absent is the frame after the enter. */
|
|
24
|
+
beatsFrom?: number;
|
|
25
|
+
/** Media fields, each `{ asset_id }`, and what each takes; they pin as `<id>.<slot>` (A1). */
|
|
26
|
+
slots: Readonly<Record<string, TemplateSlot>>;
|
|
27
|
+
/** Whether captions are hidden while it shows: it sits in the caption spot. */
|
|
28
|
+
hidesCaptions(data: z.infer<D>): boolean;
|
|
29
|
+
/** Drawn on full-frame insert frames too; other over-presenter kinds step aside there. */
|
|
30
|
+
onInserts: boolean;
|
|
31
|
+
/** Where it draws, in shares of the frame: over the presenter its footprint, on a full frame the area its content takes. */
|
|
32
|
+
rect(data: z.infer<D>, aspectRatio: string, placement?: TemplatePlacement): LayerRect;
|
|
33
|
+
/** Named parts the composition draws in, in shares of the frame; they may reach past it, where the footprint crops them (A7). */
|
|
34
|
+
parts?(data: z.infer<D>, aspectRatio: string): Record<string, LayerRect>;
|
|
35
|
+
/** The part the face rule applies to, or none; absent is the whole footprint. */
|
|
36
|
+
faceRect?(data: z.infer<D>, aspectRatio: string): LayerRect | undefined;
|
|
37
|
+
sample: z.infer<D>;
|
|
38
|
+
}
|
|
39
|
+
export declare const TEMPLATE_KINDS: readonly TemplateKind[];
|
|
40
|
+
export declare const TEMPLATE_KIND_IDS: readonly ["tag", "lower_third", "end_card", "title_card", "quote", "stat", "callout", "checklist", "phone_call", "compare", "notification", "progress", "rating"];
|
|
41
|
+
/** Earlier versions of kinds a frozen timeline may still name, each with its own footprint (A8, #819); every kind is at its first version. */
|
|
42
|
+
export declare const TEMPLATE_KIND_HISTORY: readonly TemplateKind[];
|
|
43
|
+
/** A kind as it was at `version`: the current entry or one from its history; a version neither holds has no footprint to draw. */
|
|
44
|
+
export declare function templateKindAt(kind: string, version: number | undefined, kinds?: readonly TemplateKind[], history?: readonly TemplateKind[]): TemplateKind;
|
|
45
|
+
export { TEMPLATE_SIZES } from "./size.js";
|
|
46
|
+
export { DEFAULT_TEMPLATE_SOUNDS, listTemplateSounds, mcpTemplateSounds, TEMPLATE_KIND_SOUNDS, TEMPLATE_SOUND_BEATS, TEMPLATE_SOUNDS, TEMPLATE_SOUNDS_PATH, templateSoundBeats, templateSoundMap, templateSounds, templateSoundsList, type TemplateSoundBeat, type TemplateSoundMap, type TemplateSounds, type TemplateSoundsList } from "./sounds.js";
|
|
47
|
+
export { TAG_RECT_EMS } from "./tag.js";
|
|
48
|
+
export { END_CARD_RECT_EMS } from "./end-card.js";
|
|
49
|
+
export { TITLE_CARD_RECT_EMS } from "./title-card.js";
|
|
50
|
+
export { QUOTE_RECT_EMS } from "./quote.js";
|
|
51
|
+
export { STAT_RECT_EMS } from "./stat.js";
|
|
52
|
+
export { CALLOUT_LABEL_EMS, calloutParts } from "./callout.js";
|
|
53
|
+
export { CHECKLIST_EMS } from "./checklist.js";
|
|
54
|
+
export { COMPARE_CARD_SHAPE } from "./compare.js";
|
|
55
|
+
export { NOTIFICATION_EMS } from "./notification.js";
|
|
56
|
+
export { PROGRESS_EMS } from "./progress.js";
|
|
57
|
+
export { RATING_EMS } from "./rating.js";
|
|
58
|
+
export { templateMedia, type TemplateSlot } from "./slot.js";
|
|
59
|
+
/** Every value at a dotted path of a kind's data, one per element where the path crosses or ends in a list, with its own path; an absent last
|
|
60
|
+
* field is listed, a path through an absent object or list lists nothing. */
|
|
61
|
+
export declare function templateFieldValues(data: unknown, field: string): {
|
|
62
|
+
path: (string | number)[];
|
|
63
|
+
value: unknown;
|
|
64
|
+
}[];
|
|
65
|
+
/** The data with every value at a dotted path set to `value`, through lists and in each element of a list it ends in; a missing object on the
|
|
66
|
+
* way is created. */
|
|
67
|
+
export declare function withTemplateField(data: Record<string, unknown>, field: string, value: unknown): Record<string, unknown>;
|
|
68
|
+
/** Frames a template takes to enter; a beat without a quote is spread evenly from there to 80% of its span (D6). */
|
|
69
|
+
export declare const TEMPLATE_ENTER_FRAMES = 8;
|
|
70
|
+
/** The word each beat of a template lands on: its quote's first word inside the item's words, after the beat before; none for a beat without
|
|
71
|
+
* a quote; or why it cannot land (D6, D10). */
|
|
72
|
+
export declare function templateMomentWords(kind: TemplateKind, data: unknown, tokens: readonly string[], range: WordRange): {
|
|
73
|
+
path: (string | number)[];
|
|
74
|
+
word?: number;
|
|
75
|
+
refusal?: string;
|
|
76
|
+
}[];
|
|
77
|
+
/** Frames between a moved beat and the next, so a checklist's cursor still travels between two clicks. */
|
|
78
|
+
export declare const TEMPLATE_BEAT_GAP = 6;
|
|
79
|
+
/** Each beat's frame from the template's start, frozen in the timeline; the renderer reads frames only (D11). A beat spoken before the kind's
|
|
80
|
+
* `beatsFrom` moves there, the beats after it keep `TEMPLATE_BEAT_GAP`, and each move is a warning (rule 3, owner 23.10). */
|
|
81
|
+
export declare function templateMoments(kind: TemplateKind, data: unknown, tokens: readonly string[], range: WordRange, words: readonly {
|
|
82
|
+
word: string;
|
|
83
|
+
startSec: number;
|
|
84
|
+
}[], fps: number, span: {
|
|
85
|
+
startFrame: number;
|
|
86
|
+
endFrame: number;
|
|
87
|
+
}, id?: string): {
|
|
88
|
+
moments: number[];
|
|
89
|
+
warnings: string[];
|
|
90
|
+
};
|
|
91
|
+
/** The most pins a run's templates take: each template's slots. */
|
|
92
|
+
export declare const MAX_TEMPLATE_MEDIA: number;
|
|
93
|
+
/** Every way a kind draws: each placement with its sample, then each value of each enum field over the sample at its first placement;
|
|
94
|
+
* the composition declares motion phases for each, and the media test checks them. */
|
|
95
|
+
export declare function templateVariants(kind: TemplateKind): {
|
|
96
|
+
key: string;
|
|
97
|
+
placement: TemplatePlacement;
|
|
98
|
+
data: Record<string, unknown>;
|
|
99
|
+
}[];
|
|
100
|
+
/** Every media slot the templates fill, in item then slot order: what admission pins and every source walker reads (#778 S3a(ii)). */
|
|
101
|
+
export declare function templateMediaOf(templates: readonly {
|
|
102
|
+
id: string;
|
|
103
|
+
kind: string;
|
|
104
|
+
data: Record<string, unknown>;
|
|
105
|
+
}[] | undefined): {
|
|
106
|
+
index: number;
|
|
107
|
+
id: string;
|
|
108
|
+
slot: string;
|
|
109
|
+
asset_id: string;
|
|
110
|
+
media_type: "image" | "video";
|
|
111
|
+
cover?: number | undefined;
|
|
112
|
+
}[];
|
|
113
|
+
/** Code points template text may use besides the run script's letters, for a caption language; the glyph test reads this list. */
|
|
114
|
+
export declare function templateCharRanges(language: string): [number, number][];
|
|
115
|
+
/** Units of a text: a wide CJK character takes the room of two. */
|
|
116
|
+
export declare const textUnits: (text: string) => number;
|
|
117
|
+
/** Why a template text cannot be drawn, or nothing; the language is the run's, as the caption fonts read it. */
|
|
118
|
+
export declare function templateTextRefusal(text: string, limit: number, language: string): string | undefined;
|
|
119
|
+
export interface TemplateItem extends AnchoredItem {
|
|
120
|
+
kind: string;
|
|
121
|
+
placement?: TemplatePlacement | undefined;
|
|
122
|
+
transition?: string | undefined;
|
|
123
|
+
data: Record<string, unknown>;
|
|
124
|
+
}
|
|
125
|
+
/** Where a template draws and what it does to captions, at a format; a frozen `kindVersion` reads that version's geometry (#819). */
|
|
126
|
+
export declare function templateFootprint(item: {
|
|
127
|
+
kind: string;
|
|
128
|
+
kindVersion?: number | undefined;
|
|
129
|
+
placement: TemplatePlacement;
|
|
130
|
+
data: Record<string, unknown>;
|
|
131
|
+
}, aspectRatio: string, kinds?: readonly TemplateKind[], history?: readonly TemplateKind[]): {
|
|
132
|
+
rect: LayerRect;
|
|
133
|
+
hidesCaptions: boolean;
|
|
134
|
+
onInserts: boolean;
|
|
135
|
+
content?: LayerRect;
|
|
136
|
+
parts?: Record<string, LayerRect>;
|
|
137
|
+
};
|
|
138
|
+
/** Over-presenter templates whose footprint meets the face: drawn as asked, and named (rule 3); every kind's default stays off it. */
|
|
139
|
+
export declare function templateFaceWarnings(input: {
|
|
140
|
+
templates?: unknown;
|
|
141
|
+
aspect_ratio?: unknown;
|
|
142
|
+
}): string[];
|
|
143
|
+
/** The `templates` description: the gate, the text rules and one catalog line per kind, all from the registry. */
|
|
144
|
+
export declare function templateCatalogText(kinds?: readonly TemplateKind[]): string;
|
|
145
|
+
export interface TemplateCheckInput {
|
|
146
|
+
script?: string | undefined;
|
|
147
|
+
segments?: unknown;
|
|
148
|
+
aspect_ratio?: string | undefined;
|
|
149
|
+
inserts?: readonly (AnchoredItem & {
|
|
150
|
+
transition?: string | undefined;
|
|
151
|
+
})[] | undefined;
|
|
152
|
+
overlays?: readonly (AnchoredItem & {
|
|
153
|
+
position: OverlayPosition;
|
|
154
|
+
})[] | undefined;
|
|
155
|
+
layout_windows?: readonly AnchoredItem[] | undefined;
|
|
156
|
+
templates?: readonly TemplateItem[] | undefined;
|
|
157
|
+
template_theme?: {
|
|
158
|
+
preset?: TemplatePreset | undefined;
|
|
159
|
+
accent?: string | undefined;
|
|
160
|
+
} | undefined;
|
|
161
|
+
template_sounds?: unknown;
|
|
162
|
+
}
|
|
163
|
+
/** Every refusal of `templates`, `template_theme` and `template_sounds` against the run, named by path; empty when they render (D4, D5, D6, D8, D10, A5, A6). */
|
|
164
|
+
export declare function templateRefusals(input: TemplateCheckInput, kinds?: readonly TemplateKind[]): LayerRefusal[];
|