@cueframe/kernel 0.2.53 → 0.2.55
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/_members/composition/ops/compositionOps.shared.d.ts +1 -0
- package/dist/_members/composition/validators/composition.d.ts +144 -0
- package/dist/_members/composition/validators/render.d.ts +72 -0
- package/dist/_members/composition-ops/index.d.ts +27 -0
- package/dist/_members/core/render/compositionAudioAndDepth.d.ts +2 -1
- package/dist/_members/primitives/lib/text/marker.d.ts +2 -0
- package/dist/_members/primitives/lib/text/spec.d.ts +3 -0
- package/dist/animate.js +2 -2
- package/dist/authoring/build-tools.js +6 -6
- package/dist/authoring/context.js +5 -5
- package/dist/authoring/tools.js +5 -5
- package/dist/authoring.js +9 -9
- package/dist/chunk-6RWIPDJ3.js +76 -0
- package/dist/{chunk-UKKY7HWN.js → chunk-BDFAA747.js} +1 -1
- package/dist/{chunk-2BVKNYRB.js → chunk-BEFSJMFF.js} +1 -1
- package/dist/{chunk-5E4YP44R.js → chunk-E2LKX6C4.js} +1 -1
- package/dist/{chunk-4DM63RTI.js → chunk-EGIVPZCJ.js} +4 -4
- package/dist/{chunk-LPUQTBKU.js → chunk-EYQMFL53.js} +21 -11
- package/dist/{chunk-D5E5XFHK.js → chunk-FHMTAZD4.js} +1 -1
- package/dist/{chunk-G7ZSFSQG.js → chunk-FOST4XYJ.js} +1 -1
- package/dist/{chunk-AONWKKXK.js → chunk-HGCYZMII.js} +1 -1
- package/dist/{chunk-TPKPU4PE.js → chunk-LBJ5LI5V.js} +8 -7
- package/dist/{chunk-P3DYA5NA.js → chunk-NEZHGYZL.js} +8 -8
- package/dist/{chunk-7RGDRDAR.js → chunk-OOL7ZUG7.js} +1 -1
- package/dist/{chunk-CR3G2JQP.js → chunk-PTVTWQ4T.js} +1 -1
- package/dist/{chunk-GAACUQAB.js → chunk-SQ4XTSIN.js} +4 -4
- package/dist/{chunk-RMLGMYEJ.js → chunk-TLOYCCCI.js} +1 -1
- package/dist/{chunk-UFNIB3JL.js → chunk-UFD4EZHM.js} +14 -2
- package/dist/{chunk-C6ONUJIO.js → chunk-UKDBU7HM.js} +5 -5
- package/dist/{chunk-ZIPGDGBR.js → chunk-UMXES6ED.js} +1 -1
- package/dist/{chunk-46DGDPXR.js → chunk-V6GL37RZ.js} +98 -7
- package/dist/{chunk-CJMUTCJW.js → chunk-VDNMCD6S.js} +2 -2
- package/dist/{chunk-ZFW35DLG.js → chunk-VYSBZUXZ.js} +1 -1
- package/dist/{chunk-VTM7NEJC.js → chunk-VZOAELFF.js} +4 -4
- package/dist/{chunk-7AUHC2X7.js → chunk-ZDE5S3DE.js} +1 -1
- package/dist/component-runtime/render.js +2 -2
- package/dist/component-runtime.js +3 -3
- package/dist/compose.js +24 -24
- package/dist/composition/fonts.js +1 -1
- package/dist/composition/graphics-plan.js +3 -3
- package/dist/composition/ops.js +4 -4
- package/dist/composition/projection.js +3 -3
- package/dist/composition/validators.js +3 -3
- package/dist/composition-ops.js +9 -9
- package/dist/composition.js +5 -5
- package/dist/{context-UAS5WJRB.js → context-O2HHUVSA.js} +5 -5
- package/dist/core/render.js +5 -5
- package/dist/core.js +5 -5
- package/dist/mcp/adapter.js +2 -2
- package/dist/mcp/core.js +1 -1
- package/dist/mcp/scene-shot.js +2 -2
- package/dist/mcp/server.js +13 -13
- package/dist/mcp.js +18 -18
- package/dist/primitives/captions.js +118 -47
- package/dist/primitives/effects.js +4 -4
- package/dist/primitives/hero-text.js +2 -2
- package/dist/primitives/layouts.js +3 -3
- package/dist/primitives/lib/index.js +6 -6
- package/dist/primitives/lib/text/marker.js +6 -3
- package/dist/primitives/lib.js +6 -6
- package/dist/primitives/scenes.js +4 -4
- package/dist/primitives/text.js +2 -2
- package/dist/primitives/ui-blocks.js +4 -4
- package/dist/primitives.js +23 -23
- package/dist/render-harness/cardFonts.js +2 -2
- package/dist/render-harness.js +13 -13
- package/package.json +11 -11
- package/dist/chunk-D2EG7J7X.js +0 -31
- package/dist/{chunk-VLJOIUHL.js → chunk-B3GSTQLR.js} +6 -6
- package/dist/{chunk-X34KW2SL.js → chunk-RBWS5XHE.js} +4 -4
- package/dist/{chunk-7SQOXIWR.js → chunk-RL5SO653.js} +3 -3
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Marker
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-6RWIPDJ3.js";
|
|
4
4
|
import {
|
|
5
5
|
fillStyle
|
|
6
6
|
} from "../chunk-XLIPPLG3.js";
|
|
7
|
+
import "../chunk-GULDS3VE.js";
|
|
7
8
|
import {
|
|
8
9
|
wordPop
|
|
9
10
|
} from "../chunk-ZFEXATWN.js";
|
|
@@ -13,7 +14,7 @@ import {
|
|
|
13
14
|
} from "../chunk-W2245F6G.js";
|
|
14
15
|
import {
|
|
15
16
|
resolveCaptionFaces
|
|
16
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-OOL7ZUG7.js";
|
|
17
18
|
import "../chunk-2ESYSVXG.js";
|
|
18
19
|
|
|
19
20
|
// ../execution/primitives/src/captions/Captions.tsx
|
|
@@ -154,15 +155,16 @@ function plateStyleFor(kind, backgroundColor) {
|
|
|
154
155
|
}
|
|
155
156
|
var COMBINE_TOKENS_MS = 1500;
|
|
156
157
|
var CAPTION_LINGER_MS = 600;
|
|
157
|
-
function
|
|
158
|
+
function measuredTextBox(maxWidth, maxLines, gapPx) {
|
|
158
159
|
const lineWidths = [0];
|
|
159
160
|
return {
|
|
160
161
|
add: (word) => {
|
|
161
162
|
const widthOf = (text) => measureText({ ...word, text }).width;
|
|
162
163
|
const current = lineWidths.length - 1;
|
|
163
164
|
const width = widthOf(lineWidths[current] === 0 ? word.text.trimStart() : word.text);
|
|
164
|
-
|
|
165
|
-
|
|
165
|
+
const nextWidth = lineWidths[current] + (lineWidths[current] ? gapPx : 0) + width;
|
|
166
|
+
if (Math.ceil(nextWidth) < maxWidth) {
|
|
167
|
+
lineWidths[current] = nextWidth;
|
|
166
168
|
return { exceedsBox: false, newLine: false };
|
|
167
169
|
}
|
|
168
170
|
const firstWidth = widthOf(word.text.trimStart());
|
|
@@ -174,10 +176,11 @@ function italicAwareTextBox(maxWidth, maxLines) {
|
|
|
174
176
|
}
|
|
175
177
|
};
|
|
176
178
|
}
|
|
177
|
-
function tokenBox(maxWidth, maxLines, emphasis) {
|
|
178
|
-
|
|
179
|
+
function tokenBox(maxWidth, maxLines, fontSize, letterSpacing, wordGapEm, textTransform, emphasis) {
|
|
180
|
+
const needsMeasured = emphasis?.emphasisFontStyle === "italic" || letterSpacing !== 0 || (emphasis?.emphasisLetterSpacing ?? 0) !== 0 || wordGapEm !== void 0 || textTransform !== void 0 && textTransform !== "none" || emphasis?.emphasisTextTransform !== void 0 && emphasis.emphasisTextTransform !== "none";
|
|
181
|
+
return needsMeasured ? measuredTextBox(maxWidth, maxLines, fontSize * (wordGapEm ?? 0.35)) : fillTextBox({ maxBoxWidth: maxWidth, maxLines });
|
|
179
182
|
}
|
|
180
|
-
function addTokenToBox(box, token, fontFamily, fontSize, fontWeight, emphasis) {
|
|
183
|
+
function addTokenToBox(box, token, fontFamily, fontSize, fontWeight, letterSpacing, textTransform, emphasis) {
|
|
181
184
|
const isEmp = emphasis?.emphasisSet.has(token.fromMs) ?? false;
|
|
182
185
|
const tokenSize = isEmp ? Math.round(fontSize * (emphasis?.emphasisScale ?? 1.2)) : fontSize;
|
|
183
186
|
const tokenWeight = emphasis && isEmp ? emphasis.emphasisFontWeight : fontWeight;
|
|
@@ -187,22 +190,24 @@ function addTokenToBox(box, token, fontFamily, fontSize, fontWeight, emphasis) {
|
|
|
187
190
|
fontFamily: tokenFamily,
|
|
188
191
|
fontSize: tokenSize,
|
|
189
192
|
fontWeight: String(tokenWeight),
|
|
193
|
+
...(isEmp ? emphasis?.emphasisLetterSpacing : letterSpacing) ? { letterSpacing: `${isEmp ? emphasis?.emphasisLetterSpacing : letterSpacing}px` } : {},
|
|
194
|
+
...isEmp ? { textTransform: emphasis?.emphasisTextTransform } : { textTransform },
|
|
190
195
|
...isEmp && emphasis?.emphasisFontStyle === "italic" ? { additionalStyles: { fontStyle: "italic" } } : {}
|
|
191
196
|
});
|
|
192
197
|
}
|
|
193
|
-
function makeBoxFactory(maxWidth, maxLines, fontFamily, fontSize, fontWeight, emphasis) {
|
|
198
|
+
function makeBoxFactory(maxWidth, maxLines, fontFamily, fontSize, fontWeight, letterSpacing, wordGapEm, textTransform, emphasis) {
|
|
194
199
|
return () => {
|
|
195
|
-
const box = tokenBox(maxWidth, maxLines, emphasis);
|
|
200
|
+
const box = tokenBox(maxWidth, maxLines, fontSize, letterSpacing, wordGapEm, textTransform, emphasis);
|
|
196
201
|
return {
|
|
197
|
-
add: (token) => !addTokenToBox(box, token, fontFamily, fontSize, fontWeight, emphasis).exceedsBox
|
|
202
|
+
add: (token) => !addTokenToBox(box, token, fontFamily, fontSize, fontWeight, letterSpacing, textTransform, emphasis).exceedsBox
|
|
198
203
|
};
|
|
199
204
|
};
|
|
200
205
|
}
|
|
201
|
-
function layoutTokensIntoLines(tokens, maxWidth, maxLines, fontFamily, fontSize, fontWeight, emphasis) {
|
|
202
|
-
const box = tokenBox(maxWidth, maxLines, emphasis);
|
|
206
|
+
function layoutTokensIntoLines(tokens, maxWidth, maxLines, fontFamily, fontSize, fontWeight, letterSpacing, wordGapEm, textTransform, emphasis) {
|
|
207
|
+
const box = tokenBox(maxWidth, maxLines, fontSize, letterSpacing, wordGapEm, textTransform, emphasis);
|
|
203
208
|
const lines = [[]];
|
|
204
209
|
for (const token of tokens) {
|
|
205
|
-
const result = addTokenToBox(box, token, fontFamily, fontSize, fontWeight, emphasis);
|
|
210
|
+
const result = addTokenToBox(box, token, fontFamily, fontSize, fontWeight, letterSpacing, textTransform, emphasis);
|
|
206
211
|
if (result.newLine) {
|
|
207
212
|
lines.push([token]);
|
|
208
213
|
} else {
|
|
@@ -211,8 +216,10 @@ function layoutTokensIntoLines(tokens, maxWidth, maxLines, fontFamily, fontSize,
|
|
|
211
216
|
}
|
|
212
217
|
return lines.filter((line) => line.length > 0);
|
|
213
218
|
}
|
|
214
|
-
function layoutFitError(label) {
|
|
215
|
-
|
|
219
|
+
function layoutFitError(label, detail) {
|
|
220
|
+
const error = new Error(`Caption layout${label ? ` ${label}` : " word range"} does not fit one page in its region${detail ? ` (${detail})` : ""}; enlarge the region or split the range`);
|
|
221
|
+
error.name = "CaptionLayoutFitError";
|
|
222
|
+
return error;
|
|
216
223
|
}
|
|
217
224
|
function tokenRuns(tokens, emphasisSet, emphasisPlate) {
|
|
218
225
|
const runs = [];
|
|
@@ -224,34 +231,38 @@ function tokenRuns(tokens, emphasisSet, emphasisPlate) {
|
|
|
224
231
|
}
|
|
225
232
|
return runs;
|
|
226
233
|
}
|
|
234
|
+
function measureVisualRun(run, fontSize, style, faces) {
|
|
235
|
+
const plate = style.emphasisPlate ?? false;
|
|
236
|
+
const emph = run.emph;
|
|
237
|
+
const text = emph && plate ? run.tokens.map((token) => token.text.trim()).join(" ") : plate ? run.tokens[0].text.trim() : run.tokens[0].text;
|
|
238
|
+
const size = emph ? Math.round(fontSize * (style.emphasisScale ?? 1.08)) : fontSize;
|
|
239
|
+
const transform = emph ? style.emphasisTextTransform ?? style.textTransform : style.textTransform;
|
|
240
|
+
const letterSpacing = emph ? style.emphasisLetterSpacing ?? style.letterSpacing : style.letterSpacing;
|
|
241
|
+
return measureText({
|
|
242
|
+
text,
|
|
243
|
+
fontFamily: emph ? faces.emphasis.stack : faces.base.stack,
|
|
244
|
+
fontSize: size,
|
|
245
|
+
fontWeight: String(emph ? faces.emphasis.weight : faces.base.weight),
|
|
246
|
+
...transform ? { textTransform: transform } : {},
|
|
247
|
+
...letterSpacing !== void 0 ? { letterSpacing: `${letterSpacing}px` } : {},
|
|
248
|
+
...emph && faces.emphasis.style === "italic" ? { additionalStyles: { fontStyle: "italic" } } : {}
|
|
249
|
+
}).width + (emph && plate ? 2 * Math.round(size * (style.emphasisPlatePadX ?? 0.16)) : 0);
|
|
250
|
+
}
|
|
227
251
|
function layoutAuthoredTokensIntoLines(tokens, maxWidth, maxLines, fontSize, style, emphasisSet, faces, label) {
|
|
228
252
|
const lines = [[]];
|
|
229
253
|
let lineWidth = 0;
|
|
230
254
|
const plate = style.emphasisPlate ?? false;
|
|
231
|
-
const runGap = fontSize * 0.35;
|
|
255
|
+
const runGap = fontSize * (style.wordGapEm ?? 0.35);
|
|
232
256
|
for (const run of tokenRuns(tokens, emphasisSet, plate)) {
|
|
233
|
-
const
|
|
234
|
-
const text = emph && plate ? run.tokens.map((token) => token.text.trim()).join(" ") : plate ? run.tokens[0].text.trim() : run.tokens[0].text;
|
|
235
|
-
const size = emph ? Math.round(fontSize * (style.emphasisScale ?? 1.08)) : fontSize;
|
|
236
|
-
const transform = emph ? style.emphasisTextTransform ?? style.textTransform : style.textTransform;
|
|
237
|
-
const letterSpacing = emph ? style.emphasisLetterSpacing : void 0;
|
|
238
|
-
const width = measureText({
|
|
239
|
-
text,
|
|
240
|
-
fontFamily: emph ? faces.emphasis.stack : faces.base.stack,
|
|
241
|
-
fontSize: size,
|
|
242
|
-
fontWeight: String(emph ? faces.emphasis.weight : faces.base.weight),
|
|
243
|
-
...transform ? { textTransform: transform } : {},
|
|
244
|
-
...letterSpacing ? { letterSpacing: `${letterSpacing}px` } : {},
|
|
245
|
-
...emph && faces.emphasis.style === "italic" ? { additionalStyles: { fontStyle: "italic" } } : {}
|
|
246
|
-
}).width + (emph && plate ? 2 * Math.round(size * (style.emphasisPlatePadX ?? 0.16)) : 0);
|
|
257
|
+
const width = measureVisualRun(run, fontSize, style, faces);
|
|
247
258
|
if (Math.ceil(width) > maxWidth) {
|
|
248
|
-
throw layoutFitError(label);
|
|
259
|
+
throw layoutFitError(label, `run needs ${Math.ceil(width)}px, box has ${Math.floor(maxWidth)}px`);
|
|
249
260
|
}
|
|
250
261
|
const current = lines[lines.length - 1];
|
|
251
262
|
const nextWidth = lineWidth + (current.length ? runGap : 0) + width;
|
|
252
263
|
if (Math.ceil(nextWidth) > maxWidth) {
|
|
253
264
|
if (lines.length >= maxLines) {
|
|
254
|
-
throw layoutFitError(label);
|
|
265
|
+
throw layoutFitError(label, `needs ${lines.length + 1} lines, box allows ${maxLines}`);
|
|
255
266
|
}
|
|
256
267
|
lines.push([...run.tokens]);
|
|
257
268
|
lineWidth = width;
|
|
@@ -287,7 +298,8 @@ function Captions({
|
|
|
287
298
|
const emphasisFontFamily = faces.emphasis.stack;
|
|
288
299
|
const emphasisFontWeight = faces.emphasis.weight;
|
|
289
300
|
const emphasisTextTransform = style.emphasisTextTransform ?? style.textTransform;
|
|
290
|
-
const
|
|
301
|
+
const letterSpacing = style.letterSpacing ?? 0;
|
|
302
|
+
const emphasisLetterSpacing = style.emphasisLetterSpacing ?? letterSpacing;
|
|
291
303
|
const emphasisFontStyle = faces.emphasis.style;
|
|
292
304
|
const entrance = style.entrance ?? "none";
|
|
293
305
|
const entranceFrames = Math.max(1, Math.round((style.entranceMs ?? 160) / 1e3 * fps));
|
|
@@ -301,18 +313,26 @@ function Captions({
|
|
|
301
313
|
const plateRadius = style.emphasisPlateRadius ?? 6;
|
|
302
314
|
const platePadX = style.emphasisPlatePadX ?? 0.16;
|
|
303
315
|
const platePadY = style.emphasisPlatePadY ?? 0.04;
|
|
316
|
+
const plateReveal = style.emphasisPlateReveal ?? false;
|
|
304
317
|
const annotationColor = style.annotationColor ?? VIOLET;
|
|
318
|
+
const annotationStrokeWidth = style.annotationStrokeWidth ?? 4;
|
|
319
|
+
const annotationTexture = style.annotationTexture ?? "clean";
|
|
305
320
|
const maxWidthPercent = style.maxWidthPercent ?? 80;
|
|
306
321
|
const plateStyle = plateStyleFor(style.plate ?? "glass", style.backgroundColor);
|
|
307
322
|
const fontSize = Math.round(height * (style.fontSize / 100));
|
|
323
|
+
const wordGapPx = fontSize * (style.wordGapEm ?? 0.35);
|
|
324
|
+
const lineGapPx = fontSize * (style.lineGapEm ?? 0.25);
|
|
308
325
|
const authoredRegion = userStyle?.region;
|
|
309
326
|
const regionWidth = authoredRegion ? width * authoredRegion.w : width;
|
|
310
327
|
const maxTextWidth = authoredRegion ? Math.min(width * (maxWidthPercent / 100), regionWidth - fontSize * 1.6) : width * (maxWidthPercent / 100);
|
|
311
328
|
const availableHeight = authoredRegion ? height * authoredRegion.h - fontSize * 0.8 : Infinity;
|
|
312
329
|
const lineHeight = fontSize * Math.max(1, emphasisScale) * 1.2;
|
|
313
|
-
const maxLines = authoredRegion ? Math.min(3, Math.floor((availableHeight +
|
|
330
|
+
const maxLines = authoredRegion ? Math.min(3, Math.floor((availableHeight + lineGapPx) / (lineHeight + lineGapPx))) : 3;
|
|
314
331
|
if (authoredRegion && (maxTextWidth <= 0 || maxLines < 1)) {
|
|
315
|
-
if (singlePageRequired) throw layoutFitError(
|
|
332
|
+
if (singlePageRequired) throw layoutFitError(
|
|
333
|
+
layoutLabel,
|
|
334
|
+
maxTextWidth <= 0 ? `box has ${Math.floor(maxTextWidth)}px text width` : "box allows no complete line"
|
|
335
|
+
);
|
|
316
336
|
throw new Error("Caption style.region is too small for one caption line at the authored font size");
|
|
317
337
|
}
|
|
318
338
|
const { emphasisStartMs, annotateKind } = useMemo(() => {
|
|
@@ -325,12 +345,38 @@ function Captions({
|
|
|
325
345
|
return { emphasisStartMs: emph, annotateKind: ann };
|
|
326
346
|
}, [segments]);
|
|
327
347
|
const emphasisLayout = useMemo(
|
|
328
|
-
() => emphasisStartMs.size > 0 ? {
|
|
329
|
-
|
|
348
|
+
() => emphasisStartMs.size > 0 ? {
|
|
349
|
+
emphasisSet: emphasisStartMs,
|
|
350
|
+
emphasisScale,
|
|
351
|
+
emphasisFontFamily,
|
|
352
|
+
emphasisFontWeight,
|
|
353
|
+
emphasisFontStyle,
|
|
354
|
+
emphasisLetterSpacing,
|
|
355
|
+
emphasisTextTransform
|
|
356
|
+
} : void 0,
|
|
357
|
+
[
|
|
358
|
+
emphasisStartMs,
|
|
359
|
+
emphasisScale,
|
|
360
|
+
emphasisFontFamily,
|
|
361
|
+
emphasisFontWeight,
|
|
362
|
+
emphasisFontStyle,
|
|
363
|
+
emphasisLetterSpacing,
|
|
364
|
+
emphasisTextTransform
|
|
365
|
+
]
|
|
330
366
|
);
|
|
331
367
|
const pages = useMemo(
|
|
332
368
|
() => {
|
|
333
|
-
const makeBox = makeBoxFactory(
|
|
369
|
+
const makeBox = makeBoxFactory(
|
|
370
|
+
maxTextWidth,
|
|
371
|
+
maxLines,
|
|
372
|
+
style.fontFamily,
|
|
373
|
+
fontSize,
|
|
374
|
+
style.fontWeight,
|
|
375
|
+
letterSpacing,
|
|
376
|
+
style.wordGapEm,
|
|
377
|
+
style.textTransform,
|
|
378
|
+
emphasisLayout
|
|
379
|
+
);
|
|
334
380
|
const paginated = paginateCaptionSegments(segments, {
|
|
335
381
|
combineMs: singlePageRequired ? Number.MAX_SAFE_INTEGER : COMBINE_TOKENS_MS,
|
|
336
382
|
makeBox: singlePageRequired ? () => ({ add: () => true }) : makeBox,
|
|
@@ -357,7 +403,20 @@ function Captions({
|
|
|
357
403
|
}
|
|
358
404
|
return paginated;
|
|
359
405
|
},
|
|
360
|
-
[
|
|
406
|
+
[
|
|
407
|
+
segments,
|
|
408
|
+
maxTextWidth,
|
|
409
|
+
maxLines,
|
|
410
|
+
fontSize,
|
|
411
|
+
style,
|
|
412
|
+
emphasisStartMs,
|
|
413
|
+
faces,
|
|
414
|
+
emphasisLayout,
|
|
415
|
+
letterSpacing,
|
|
416
|
+
holdUntilMs,
|
|
417
|
+
singlePageRequired,
|
|
418
|
+
layoutLabel
|
|
419
|
+
]
|
|
361
420
|
);
|
|
362
421
|
if (pages.length === 0) return null;
|
|
363
422
|
const currentTimeMs = frame / fps * 1e3;
|
|
@@ -398,6 +457,9 @@ function Captions({
|
|
|
398
457
|
style.fontFamily,
|
|
399
458
|
fontSize,
|
|
400
459
|
style.fontWeight,
|
|
460
|
+
letterSpacing,
|
|
461
|
+
style.wordGapEm,
|
|
462
|
+
style.textTransform,
|
|
401
463
|
emphasisLayout
|
|
402
464
|
);
|
|
403
465
|
const wrapperStyle = resolveCaptionPlacement(userStyle?.position, region, authoredRegion);
|
|
@@ -413,7 +475,7 @@ function Captions({
|
|
|
413
475
|
display: "flex",
|
|
414
476
|
flexDirection: "column",
|
|
415
477
|
alignItems: authoredRegion ? "flex-start" : "center",
|
|
416
|
-
gap: `${
|
|
478
|
+
gap: `${lineGapPx}px`,
|
|
417
479
|
padding: `${fontSize * 0.4}px ${fontSize * 0.8}px`,
|
|
418
480
|
borderRadius: fontSize * 0.5,
|
|
419
481
|
...plateStyle,
|
|
@@ -451,7 +513,7 @@ function Captions({
|
|
|
451
513
|
};
|
|
452
514
|
return lines.map((line, lineIdx) => {
|
|
453
515
|
const segs = tokenRuns(line, emphasisStartMs, emphasisPlate);
|
|
454
|
-
return /* @__PURE__ */ React.createElement("div", { key: lineIdx, style: { display: "flex", justifyContent: authoredRegion ? "flex-start" : "center", alignItems: "baseline", gap: `${
|
|
516
|
+
return /* @__PURE__ */ React.createElement("div", { key: lineIdx, style: { display: "flex", justifyContent: authoredRegion ? "flex-start" : "center", alignItems: "baseline", gap: `${wordGapPx}px` } }, segs.map((seg, si) => {
|
|
455
517
|
const first = seg.tokens[0];
|
|
456
518
|
const entered = entranceOf(first, seg.emph);
|
|
457
519
|
const opacity = syncWordVisibility && currentTimeMs < first.fromMs ? 0 : entered.opacity;
|
|
@@ -469,7 +531,16 @@ function Captions({
|
|
|
469
531
|
const bg = idx % 2 === 0 ? plateColor : plateAltColor;
|
|
470
532
|
const fg = idx % 2 === 0 ? plateTextColor : plateAltTextColor;
|
|
471
533
|
const efs = Math.round(fontSize * emphasisScale);
|
|
472
|
-
|
|
534
|
+
const plateTokens = plateReveal ? seg.tokens.filter((token2) => currentTimeMs >= token2.fromMs) : seg.tokens;
|
|
535
|
+
const reservedWidth = plateReveal ? measureVisualRun(seg, fontSize, style, faces) : void 0;
|
|
536
|
+
return /* @__PURE__ */ React.createElement("span", { key: si, style: {
|
|
537
|
+
position: "relative",
|
|
538
|
+
display: "inline-block",
|
|
539
|
+
...reservedWidth !== void 0 ? { width: reservedWidth } : {},
|
|
540
|
+
opacity,
|
|
541
|
+
transform: entranceTransform,
|
|
542
|
+
transformOrigin: "center"
|
|
543
|
+
} }, /* @__PURE__ */ React.createElement(
|
|
473
544
|
"span",
|
|
474
545
|
{
|
|
475
546
|
style: {
|
|
@@ -488,10 +559,10 @@ function Captions({
|
|
|
488
559
|
whiteSpace: "nowrap"
|
|
489
560
|
}
|
|
490
561
|
},
|
|
491
|
-
|
|
562
|
+
plateTokens.map((token2, tokenIndex) => /* @__PURE__ */ React.createElement("span", { key: token2.fromMs, style: {
|
|
492
563
|
opacity: syncWordVisibility && tokenIndex > 0 ? currentTimeMs < token2.fromMs ? 0 : entranceOf(token2, true).opacity : 1
|
|
493
564
|
} }, tokenIndex > 0 ? " " : "", token2.text.trim()))
|
|
494
|
-
), annKind && annotatedToken && currentTimeMs >= annotatedToken.fromMs ? /* @__PURE__ */ React.createElement(Marker, { spec: { kind: annKind, color: annotationColor }, progress: markerP }) : null);
|
|
565
|
+
), annKind && annotatedToken && currentTimeMs >= annotatedToken.fromMs ? /* @__PURE__ */ React.createElement(Marker, { spec: { kind: annKind, color: annotationColor, strokeWidth: annotationStrokeWidth, texture: annotationTexture, seed: `${annotatedToken.fromMs}:${annotatedToken.text}` }, progress: markerP }) : null);
|
|
495
566
|
}
|
|
496
567
|
const token = first;
|
|
497
568
|
const isActive = token === activeToken;
|
|
@@ -500,7 +571,7 @@ function Captions({
|
|
|
500
571
|
const tokenWeight = isEmphasis ? emphasisFontWeight : style.fontWeight;
|
|
501
572
|
const tokenFamily = isEmphasis ? emphasisFontFamily : style.fontFamily;
|
|
502
573
|
const tokenTransform = isEmphasis ? emphasisTextTransform : style.textTransform;
|
|
503
|
-
const tokenLetterSpacing = isEmphasis
|
|
574
|
+
const tokenLetterSpacing = isEmphasis ? emphasisLetterSpacing ? `${emphasisLetterSpacing}px` : void 0 : letterSpacing ? `${letterSpacing}px` : void 0;
|
|
504
575
|
const tokenFontStyle = isEmphasis ? emphasisFontStyle : "normal";
|
|
505
576
|
let tokenColor = style.color;
|
|
506
577
|
if (isActive && !emphasisPlate) tokenColor = style.highlightColor;
|
|
@@ -523,7 +594,7 @@ function Captions({
|
|
|
523
594
|
},
|
|
524
595
|
emphasisPlate ? token.text.trim() : token.text
|
|
525
596
|
);
|
|
526
|
-
return /* @__PURE__ */ React.createElement("span", { key: si, style: { position: "relative", display: "inline-block", opacity, transform: entranceTransform, transformOrigin: "center" } }, inner, annKind && annotatedToken && currentTimeMs >= annotatedToken.fromMs ? /* @__PURE__ */ React.createElement(Marker, { spec: { kind: annKind, color: annotationColor }, progress: markerP }) : null);
|
|
597
|
+
return /* @__PURE__ */ React.createElement("span", { key: si, style: { position: "relative", display: "inline-block", opacity, transform: entranceTransform, transformOrigin: "center" } }, inner, annKind && annotatedToken && currentTimeMs >= annotatedToken.fromMs ? /* @__PURE__ */ React.createElement(Marker, { spec: { kind: annKind, color: annotationColor, strokeWidth: annotationStrokeWidth, texture: annotationTexture, seed: `${annotatedToken.fromMs}:${annotatedToken.text}` }, progress: markerP }) : null);
|
|
527
598
|
}));
|
|
528
599
|
});
|
|
529
600
|
})()
|
|
@@ -12,15 +12,15 @@ import {
|
|
|
12
12
|
Vignette,
|
|
13
13
|
catalog,
|
|
14
14
|
laneDepths
|
|
15
|
-
} from "../chunk-
|
|
16
|
-
import "../chunk-MFHXCHRI.js";
|
|
15
|
+
} from "../chunk-SQ4XTSIN.js";
|
|
17
16
|
import "../chunk-XHGZ2E77.js";
|
|
17
|
+
import "../chunk-MFHXCHRI.js";
|
|
18
18
|
import "../chunk-W2245F6G.js";
|
|
19
|
-
import "../chunk-
|
|
19
|
+
import "../chunk-FHMTAZD4.js";
|
|
20
20
|
import "../chunk-XV2K3AQT.js";
|
|
21
21
|
import "../chunk-CL5Y6V6K.js";
|
|
22
22
|
import "../chunk-2L7PYYJK.js";
|
|
23
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-OOL7ZUG7.js";
|
|
24
24
|
import "../chunk-2ESYSVXG.js";
|
|
25
25
|
export {
|
|
26
26
|
Blur,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HeroText,
|
|
3
3
|
catalog
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-RL5SO653.js";
|
|
5
5
|
import "../chunk-LT4PWSR2.js";
|
|
6
6
|
import "../chunk-FWSJLHSV.js";
|
|
7
|
-
import "../chunk-XHGZ2E77.js";
|
|
8
7
|
import "../chunk-ZFEXATWN.js";
|
|
8
|
+
import "../chunk-XHGZ2E77.js";
|
|
9
9
|
import "../chunk-W2245F6G.js";
|
|
10
10
|
import "../chunk-2ESYSVXG.js";
|
|
11
11
|
export {
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
SplitScreen,
|
|
9
9
|
StaggeredBentoGrid,
|
|
10
10
|
catalog
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-PTVTWQ4T.js";
|
|
12
12
|
import "../chunk-XHGZ2E77.js";
|
|
13
13
|
import "../chunk-W2245F6G.js";
|
|
14
|
-
import "../chunk-
|
|
14
|
+
import "../chunk-FHMTAZD4.js";
|
|
15
15
|
import "../chunk-XV2K3AQT.js";
|
|
16
16
|
import "../chunk-CL5Y6V6K.js";
|
|
17
17
|
import "../chunk-2L7PYYJK.js";
|
|
18
|
-
import "../chunk-
|
|
18
|
+
import "../chunk-OOL7ZUG7.js";
|
|
19
19
|
import "../chunk-2ESYSVXG.js";
|
|
20
20
|
export {
|
|
21
21
|
ChatToPreviewLayout,
|
|
@@ -7,12 +7,6 @@ import {
|
|
|
7
7
|
zodToDefaults,
|
|
8
8
|
zodToJsonSchemaFor
|
|
9
9
|
} from "../../chunk-ZZRBKGDA.js";
|
|
10
|
-
import {
|
|
11
|
-
SeededPRNG,
|
|
12
|
-
gauss,
|
|
13
|
-
pick,
|
|
14
|
-
range
|
|
15
|
-
} from "../../chunk-GULDS3VE.js";
|
|
16
10
|
import {
|
|
17
11
|
ALLOWED_BRAND_PATHS,
|
|
18
12
|
CONTRAST_CRITICAL_PATHS,
|
|
@@ -24,6 +18,12 @@ import {
|
|
|
24
18
|
resolveParams,
|
|
25
19
|
resolveTokenValue
|
|
26
20
|
} from "../../chunk-QDBVYZSF.js";
|
|
21
|
+
import {
|
|
22
|
+
SeededPRNG,
|
|
23
|
+
gauss,
|
|
24
|
+
pick,
|
|
25
|
+
range
|
|
26
|
+
} from "../../chunk-GULDS3VE.js";
|
|
27
27
|
import {
|
|
28
28
|
FRAME_BASELINE_WIDTH,
|
|
29
29
|
frameScale,
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Marker
|
|
3
|
-
|
|
2
|
+
Marker,
|
|
3
|
+
pencilMarkerPaths
|
|
4
|
+
} from "../../../chunk-6RWIPDJ3.js";
|
|
5
|
+
import "../../../chunk-GULDS3VE.js";
|
|
4
6
|
import "../../../chunk-2ESYSVXG.js";
|
|
5
7
|
export {
|
|
6
|
-
Marker
|
|
8
|
+
Marker,
|
|
9
|
+
pencilMarkerPaths
|
|
7
10
|
};
|
package/dist/primitives/lib.js
CHANGED
|
@@ -7,12 +7,6 @@ import {
|
|
|
7
7
|
zodToDefaults,
|
|
8
8
|
zodToJsonSchemaFor
|
|
9
9
|
} from "../chunk-ZZRBKGDA.js";
|
|
10
|
-
import {
|
|
11
|
-
SeededPRNG,
|
|
12
|
-
gauss,
|
|
13
|
-
pick,
|
|
14
|
-
range
|
|
15
|
-
} from "../chunk-GULDS3VE.js";
|
|
16
10
|
import {
|
|
17
11
|
ALLOWED_BRAND_PATHS,
|
|
18
12
|
CONTRAST_CRITICAL_PATHS,
|
|
@@ -24,6 +18,12 @@ import {
|
|
|
24
18
|
resolveParams,
|
|
25
19
|
resolveTokenValue
|
|
26
20
|
} from "../chunk-QDBVYZSF.js";
|
|
21
|
+
import {
|
|
22
|
+
SeededPRNG,
|
|
23
|
+
gauss,
|
|
24
|
+
pick,
|
|
25
|
+
range
|
|
26
|
+
} from "../chunk-GULDS3VE.js";
|
|
27
27
|
import {
|
|
28
28
|
FRAME_BASELINE_WIDTH,
|
|
29
29
|
frameScale,
|
|
@@ -8,17 +8,17 @@ import {
|
|
|
8
8
|
ProductLaunchTrailer,
|
|
9
9
|
TerminalToBrowserDeploy,
|
|
10
10
|
catalog
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-UKDBU7HM.js";
|
|
12
|
+
import "../chunk-QGAWDLYX.js";
|
|
12
13
|
import "../chunk-S5H6GH6M.js";
|
|
13
14
|
import "../chunk-QAGGJHAF.js";
|
|
14
15
|
import "../chunk-MFHXCHRI.js";
|
|
15
|
-
import "../chunk-QGAWDLYX.js";
|
|
16
16
|
import "../chunk-W2245F6G.js";
|
|
17
|
-
import "../chunk-
|
|
17
|
+
import "../chunk-FHMTAZD4.js";
|
|
18
18
|
import "../chunk-XV2K3AQT.js";
|
|
19
19
|
import "../chunk-CL5Y6V6K.js";
|
|
20
20
|
import "../chunk-2L7PYYJK.js";
|
|
21
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-OOL7ZUG7.js";
|
|
22
22
|
import "../chunk-2ESYSVXG.js";
|
|
23
23
|
export {
|
|
24
24
|
ChangelogBite,
|
package/dist/primitives/text.js
CHANGED
|
@@ -21,13 +21,13 @@ import {
|
|
|
21
21
|
TrackingIn,
|
|
22
22
|
Typewriter,
|
|
23
23
|
catalog
|
|
24
|
-
} from "../chunk-
|
|
24
|
+
} from "../chunk-RBWS5XHE.js";
|
|
25
25
|
import "../chunk-DLF4WVSE.js";
|
|
26
26
|
import "../chunk-U4V4FZGE.js";
|
|
27
27
|
import "../chunk-LT4PWSR2.js";
|
|
28
28
|
import "../chunk-FWSJLHSV.js";
|
|
29
|
-
import "../chunk-XHGZ2E77.js";
|
|
30
29
|
import "../chunk-ZFEXATWN.js";
|
|
30
|
+
import "../chunk-XHGZ2E77.js";
|
|
31
31
|
import "../chunk-W2245F6G.js";
|
|
32
32
|
import "../chunk-2ESYSVXG.js";
|
|
33
33
|
export {
|
|
@@ -30,14 +30,14 @@ import {
|
|
|
30
30
|
VisualDocsSnippet,
|
|
31
31
|
VoiceWaveform,
|
|
32
32
|
catalog
|
|
33
|
-
} from "../chunk-
|
|
33
|
+
} from "../chunk-B3GSTQLR.js";
|
|
34
|
+
import "../chunk-LT4PWSR2.js";
|
|
35
|
+
import "../chunk-FWSJLHSV.js";
|
|
36
|
+
import "../chunk-XHGZ2E77.js";
|
|
34
37
|
import {
|
|
35
38
|
DashboardPopulate
|
|
36
39
|
} from "../chunk-S5H6GH6M.js";
|
|
37
40
|
import "../chunk-QAGGJHAF.js";
|
|
38
|
-
import "../chunk-LT4PWSR2.js";
|
|
39
|
-
import "../chunk-FWSJLHSV.js";
|
|
40
|
-
import "../chunk-XHGZ2E77.js";
|
|
41
41
|
import "../chunk-W2245F6G.js";
|
|
42
42
|
import "../chunk-2ESYSVXG.js";
|
|
43
43
|
export {
|
package/dist/primitives.js
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
catalog
|
|
3
|
+
} from "./chunk-RBWS5XHE.js";
|
|
4
|
+
import "./chunk-DLF4WVSE.js";
|
|
5
|
+
import "./chunk-U4V4FZGE.js";
|
|
6
|
+
import {
|
|
7
|
+
catalog as catalog3
|
|
8
|
+
} from "./chunk-FVDFPJHT.js";
|
|
1
9
|
import {
|
|
2
10
|
catalog as catalog6
|
|
3
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-B3GSTQLR.js";
|
|
12
|
+
import {
|
|
13
|
+
catalog as catalog5
|
|
14
|
+
} from "./chunk-RAXHCRVV.js";
|
|
4
15
|
import {
|
|
5
16
|
catalog as catalog2
|
|
6
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-SQ4XTSIN.js";
|
|
7
18
|
import {
|
|
8
19
|
catalog as catalog8
|
|
9
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-RL5SO653.js";
|
|
21
|
+
import "./chunk-LT4PWSR2.js";
|
|
22
|
+
import "./chunk-FWSJLHSV.js";
|
|
23
|
+
import "./chunk-ZFEXATWN.js";
|
|
10
24
|
import {
|
|
11
25
|
catalog as catalog4
|
|
12
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-PTVTWQ4T.js";
|
|
27
|
+
import "./chunk-XHGZ2E77.js";
|
|
13
28
|
import {
|
|
14
29
|
catalog as catalog7
|
|
15
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-UKDBU7HM.js";
|
|
31
|
+
import "./chunk-QGAWDLYX.js";
|
|
16
32
|
import "./chunk-S5H6GH6M.js";
|
|
17
33
|
import "./chunk-QAGGJHAF.js";
|
|
18
34
|
import "./chunk-MFHXCHRI.js";
|
|
19
|
-
import {
|
|
20
|
-
catalog
|
|
21
|
-
} from "./chunk-X34KW2SL.js";
|
|
22
|
-
import "./chunk-DLF4WVSE.js";
|
|
23
|
-
import "./chunk-U4V4FZGE.js";
|
|
24
|
-
import "./chunk-LT4PWSR2.js";
|
|
25
|
-
import "./chunk-FWSJLHSV.js";
|
|
26
|
-
import {
|
|
27
|
-
catalog as catalog3
|
|
28
|
-
} from "./chunk-FVDFPJHT.js";
|
|
29
|
-
import "./chunk-QGAWDLYX.js";
|
|
30
|
-
import {
|
|
31
|
-
catalog as catalog5
|
|
32
|
-
} from "./chunk-RAXHCRVV.js";
|
|
33
|
-
import "./chunk-XHGZ2E77.js";
|
|
34
|
-
import "./chunk-ZFEXATWN.js";
|
|
35
35
|
import "./chunk-W2245F6G.js";
|
|
36
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-FHMTAZD4.js";
|
|
37
37
|
import "./chunk-XV2K3AQT.js";
|
|
38
38
|
import "./chunk-CL5Y6V6K.js";
|
|
39
39
|
import "./chunk-2L7PYYJK.js";
|
|
40
|
-
import "./chunk-
|
|
40
|
+
import "./chunk-OOL7ZUG7.js";
|
|
41
41
|
import "./chunk-2ESYSVXG.js";
|
|
42
42
|
|
|
43
43
|
// ../execution/primitives/src/index.ts
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
assertCardFontsAdmitted,
|
|
3
3
|
cardBundledFamilies,
|
|
4
4
|
cardFontFamilyStacks
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-BDFAA747.js";
|
|
6
6
|
import "../chunk-E63UEO5C.js";
|
|
7
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-OOL7ZUG7.js";
|
|
8
8
|
import "../chunk-2ESYSVXG.js";
|
|
9
9
|
export {
|
|
10
10
|
assertCardFontsAdmitted,
|
package/dist/render-harness.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
assertCardHtmlAssetFree
|
|
3
|
-
} from "./chunk-DV7ZFVL4.js";
|
|
4
|
-
import {
|
|
5
|
-
assertCardFontsAdmitted
|
|
6
|
-
} from "./chunk-UKKY7HWN.js";
|
|
7
1
|
import {
|
|
8
2
|
assertNoRemoteRefs,
|
|
9
3
|
assetSlots,
|
|
@@ -11,8 +5,14 @@ import {
|
|
|
11
5
|
isRemoteUrl,
|
|
12
6
|
renderInputAssets
|
|
13
7
|
} from "./chunk-KSRFYFUZ.js";
|
|
8
|
+
import {
|
|
9
|
+
assertCardHtmlAssetFree
|
|
10
|
+
} from "./chunk-DV7ZFVL4.js";
|
|
14
11
|
import "./chunk-OSMXQV5V.js";
|
|
15
|
-
import
|
|
12
|
+
import {
|
|
13
|
+
assertCardFontsAdmitted
|
|
14
|
+
} from "./chunk-BDFAA747.js";
|
|
15
|
+
import "./chunk-BEFSJMFF.js";
|
|
16
16
|
import "./chunk-BVA3537Z.js";
|
|
17
17
|
import {
|
|
18
18
|
COMPONENT_STILL_RUNTIME_IDENTITY,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
readMaterializedComponentSource,
|
|
24
24
|
resolveRenderEntryRoot,
|
|
25
25
|
verifyLocalStagedBrowser
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-HGCYZMII.js";
|
|
27
27
|
import "./chunk-WB2VFDQZ.js";
|
|
28
28
|
import {
|
|
29
29
|
sourceVersionId
|
|
@@ -46,15 +46,15 @@ import {
|
|
|
46
46
|
parseSceneComponentCaptureIntentV1,
|
|
47
47
|
prepareSceneShotRenderInput,
|
|
48
48
|
readSceneShotManifest
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-EYQMFL53.js";
|
|
50
50
|
import "./chunk-QH3YI3ND.js";
|
|
51
|
-
import "./chunk-JPMVNMF3.js";
|
|
52
51
|
import "./chunk-IMIUHG2E.js";
|
|
53
52
|
import "./chunk-VZ7TYX6Z.js";
|
|
53
|
+
import "./chunk-JPMVNMF3.js";
|
|
54
54
|
import "./chunk-T56BK7NS.js";
|
|
55
55
|
import "./chunk-KYRDKK2D.js";
|
|
56
|
-
import "./chunk-
|
|
57
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-FOST4XYJ.js";
|
|
57
|
+
import "./chunk-TLOYCCCI.js";
|
|
58
58
|
import "./chunk-WREYUH2E.js";
|
|
59
59
|
import "./chunk-ILO4NEZ3.js";
|
|
60
60
|
import {
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
sceneCameraPlanesV2
|
|
70
70
|
} from "./chunk-CL5Y6V6K.js";
|
|
71
71
|
import "./chunk-2L7PYYJK.js";
|
|
72
|
-
import "./chunk-
|
|
72
|
+
import "./chunk-OOL7ZUG7.js";
|
|
73
73
|
import "./chunk-2ESYSVXG.js";
|
|
74
74
|
|
|
75
75
|
// ../execution/render-harness/src/materializeSources.ts
|