ugcinc-render 1.5.10 → 1.5.11
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/index.js +46 -52
- package/dist/index.mjs +46 -52
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -436,14 +436,22 @@ function TextElement({ segment, scale = 1 }) {
|
|
|
436
436
|
const backgroundOpacity = segment.backgroundOpacity ?? TEXT_DEFAULTS.backgroundOpacity;
|
|
437
437
|
const backgroundBorderRadius = segment.backgroundBorderRadius;
|
|
438
438
|
const fontFamily = getFontFamily(fontType);
|
|
439
|
-
const {
|
|
439
|
+
const { calculatedWidth, calculatedLines, paddingTop, paddingRight, paddingBottom, paddingLeft } = (0, import_react.useMemo)(() => {
|
|
440
|
+
let finalPaddingTop = basePaddingTop;
|
|
441
|
+
let finalPaddingRight = basePaddingRight;
|
|
442
|
+
let finalPaddingBottom = basePaddingBottom;
|
|
443
|
+
let finalPaddingLeft = basePaddingLeft;
|
|
440
444
|
if (!autoWidth && !hasExtraPadding) {
|
|
441
445
|
return {
|
|
442
|
-
|
|
443
|
-
|
|
446
|
+
calculatedWidth: width,
|
|
447
|
+
calculatedLines: [segment.text],
|
|
448
|
+
paddingTop: finalPaddingTop,
|
|
449
|
+
paddingRight: finalPaddingRight,
|
|
450
|
+
paddingBottom: finalPaddingBottom,
|
|
451
|
+
paddingLeft: finalPaddingLeft
|
|
444
452
|
};
|
|
445
453
|
}
|
|
446
|
-
const
|
|
454
|
+
const baseResult = calculateAutoWidthAndLines({
|
|
447
455
|
text: segment.text,
|
|
448
456
|
maxWidth: width,
|
|
449
457
|
paddingLeft: basePaddingLeft,
|
|
@@ -454,16 +462,47 @@ function TextElement({ segment, scale = 1 }) {
|
|
|
454
462
|
letterSpacing,
|
|
455
463
|
lineHeight
|
|
456
464
|
});
|
|
465
|
+
const isMultiLine = baseResult.lines.length >= 2;
|
|
466
|
+
if (isMultiLine) {
|
|
467
|
+
finalPaddingTop = basePaddingTop + extraPaddingTop;
|
|
468
|
+
finalPaddingRight = basePaddingRight + extraPaddingRight;
|
|
469
|
+
finalPaddingBottom = basePaddingBottom + extraPaddingBottom;
|
|
470
|
+
finalPaddingLeft = basePaddingLeft + extraPaddingLeft;
|
|
471
|
+
}
|
|
472
|
+
let finalResult = baseResult;
|
|
473
|
+
if (isMultiLine && (extraPaddingLeft > 0 || extraPaddingRight > 0)) {
|
|
474
|
+
finalResult = calculateAutoWidthAndLines({
|
|
475
|
+
text: segment.text,
|
|
476
|
+
maxWidth: width,
|
|
477
|
+
paddingLeft: finalPaddingLeft,
|
|
478
|
+
paddingRight: finalPaddingRight,
|
|
479
|
+
fontSize,
|
|
480
|
+
fontWeight,
|
|
481
|
+
fontFamily,
|
|
482
|
+
letterSpacing,
|
|
483
|
+
lineHeight
|
|
484
|
+
});
|
|
485
|
+
}
|
|
457
486
|
return {
|
|
458
|
-
|
|
459
|
-
|
|
487
|
+
calculatedWidth: autoWidth ? finalResult.width : width,
|
|
488
|
+
calculatedLines: autoWidth ? finalResult.lines : [segment.text],
|
|
489
|
+
paddingTop: finalPaddingTop,
|
|
490
|
+
paddingRight: finalPaddingRight,
|
|
491
|
+
paddingBottom: finalPaddingBottom,
|
|
492
|
+
paddingLeft: finalPaddingLeft
|
|
460
493
|
};
|
|
461
494
|
}, [
|
|
462
495
|
autoWidth,
|
|
463
496
|
segment.text,
|
|
464
497
|
width,
|
|
465
|
-
|
|
498
|
+
basePaddingTop,
|
|
466
499
|
basePaddingRight,
|
|
500
|
+
basePaddingBottom,
|
|
501
|
+
basePaddingLeft,
|
|
502
|
+
extraPaddingTop,
|
|
503
|
+
extraPaddingRight,
|
|
504
|
+
extraPaddingBottom,
|
|
505
|
+
extraPaddingLeft,
|
|
467
506
|
hasExtraPadding,
|
|
468
507
|
fontSize,
|
|
469
508
|
fontWeight,
|
|
@@ -471,51 +510,6 @@ function TextElement({ segment, scale = 1 }) {
|
|
|
471
510
|
letterSpacing,
|
|
472
511
|
lineHeight
|
|
473
512
|
]);
|
|
474
|
-
const calculatedLines = autoWidthResult?.lines ?? [segment.text];
|
|
475
|
-
const paddingTop = basePaddingTop + (isMultiLine ? extraPaddingTop : 0);
|
|
476
|
-
const paddingRight = basePaddingRight + (isMultiLine ? extraPaddingRight : 0);
|
|
477
|
-
const paddingBottom = basePaddingBottom + (isMultiLine ? extraPaddingBottom : 0);
|
|
478
|
-
const paddingLeft = basePaddingLeft + (isMultiLine ? extraPaddingLeft : 0);
|
|
479
|
-
const calculatedWidth = (0, import_react.useMemo)(() => {
|
|
480
|
-
if (!autoWidth) return width;
|
|
481
|
-
if (!isMultiLine || extraPaddingLeft === 0 && extraPaddingRight === 0) {
|
|
482
|
-
return autoWidthResult?.width ?? width;
|
|
483
|
-
}
|
|
484
|
-
if (typeof document === "undefined") return width;
|
|
485
|
-
const measureSpan = document.createElement("span");
|
|
486
|
-
measureSpan.style.cssText = `
|
|
487
|
-
position: absolute;
|
|
488
|
-
visibility: hidden;
|
|
489
|
-
pointer-events: none;
|
|
490
|
-
font-family: ${fontFamily};
|
|
491
|
-
font-size: ${fontSize}px;
|
|
492
|
-
font-weight: ${fontWeight};
|
|
493
|
-
letter-spacing: ${letterSpacing}px;
|
|
494
|
-
white-space: nowrap;
|
|
495
|
-
`;
|
|
496
|
-
document.body.appendChild(measureSpan);
|
|
497
|
-
let widestLineWidth = 0;
|
|
498
|
-
for (const line of calculatedLines) {
|
|
499
|
-
measureSpan.textContent = line;
|
|
500
|
-
widestLineWidth = Math.max(widestLineWidth, measureSpan.getBoundingClientRect().width);
|
|
501
|
-
}
|
|
502
|
-
document.body.removeChild(measureSpan);
|
|
503
|
-
return Math.min(widestLineWidth + paddingLeft + paddingRight, width);
|
|
504
|
-
}, [
|
|
505
|
-
autoWidth,
|
|
506
|
-
autoWidthResult,
|
|
507
|
-
width,
|
|
508
|
-
isMultiLine,
|
|
509
|
-
extraPaddingLeft,
|
|
510
|
-
extraPaddingRight,
|
|
511
|
-
paddingLeft,
|
|
512
|
-
paddingRight,
|
|
513
|
-
calculatedLines,
|
|
514
|
-
fontFamily,
|
|
515
|
-
fontSize,
|
|
516
|
-
fontWeight,
|
|
517
|
-
letterSpacing
|
|
518
|
-
]);
|
|
519
513
|
const borderRadiusStyle = (0, import_react.useMemo)(() => {
|
|
520
514
|
if (!backgroundBorderRadius) return void 0;
|
|
521
515
|
const radii = getBorderRadii(backgroundBorderRadius);
|
package/dist/index.mjs
CHANGED
|
@@ -352,14 +352,22 @@ function TextElement({ segment, scale = 1 }) {
|
|
|
352
352
|
const backgroundOpacity = segment.backgroundOpacity ?? TEXT_DEFAULTS.backgroundOpacity;
|
|
353
353
|
const backgroundBorderRadius = segment.backgroundBorderRadius;
|
|
354
354
|
const fontFamily = getFontFamily(fontType);
|
|
355
|
-
const {
|
|
355
|
+
const { calculatedWidth, calculatedLines, paddingTop, paddingRight, paddingBottom, paddingLeft } = useMemo(() => {
|
|
356
|
+
let finalPaddingTop = basePaddingTop;
|
|
357
|
+
let finalPaddingRight = basePaddingRight;
|
|
358
|
+
let finalPaddingBottom = basePaddingBottom;
|
|
359
|
+
let finalPaddingLeft = basePaddingLeft;
|
|
356
360
|
if (!autoWidth && !hasExtraPadding) {
|
|
357
361
|
return {
|
|
358
|
-
|
|
359
|
-
|
|
362
|
+
calculatedWidth: width,
|
|
363
|
+
calculatedLines: [segment.text],
|
|
364
|
+
paddingTop: finalPaddingTop,
|
|
365
|
+
paddingRight: finalPaddingRight,
|
|
366
|
+
paddingBottom: finalPaddingBottom,
|
|
367
|
+
paddingLeft: finalPaddingLeft
|
|
360
368
|
};
|
|
361
369
|
}
|
|
362
|
-
const
|
|
370
|
+
const baseResult = calculateAutoWidthAndLines({
|
|
363
371
|
text: segment.text,
|
|
364
372
|
maxWidth: width,
|
|
365
373
|
paddingLeft: basePaddingLeft,
|
|
@@ -370,16 +378,47 @@ function TextElement({ segment, scale = 1 }) {
|
|
|
370
378
|
letterSpacing,
|
|
371
379
|
lineHeight
|
|
372
380
|
});
|
|
381
|
+
const isMultiLine = baseResult.lines.length >= 2;
|
|
382
|
+
if (isMultiLine) {
|
|
383
|
+
finalPaddingTop = basePaddingTop + extraPaddingTop;
|
|
384
|
+
finalPaddingRight = basePaddingRight + extraPaddingRight;
|
|
385
|
+
finalPaddingBottom = basePaddingBottom + extraPaddingBottom;
|
|
386
|
+
finalPaddingLeft = basePaddingLeft + extraPaddingLeft;
|
|
387
|
+
}
|
|
388
|
+
let finalResult = baseResult;
|
|
389
|
+
if (isMultiLine && (extraPaddingLeft > 0 || extraPaddingRight > 0)) {
|
|
390
|
+
finalResult = calculateAutoWidthAndLines({
|
|
391
|
+
text: segment.text,
|
|
392
|
+
maxWidth: width,
|
|
393
|
+
paddingLeft: finalPaddingLeft,
|
|
394
|
+
paddingRight: finalPaddingRight,
|
|
395
|
+
fontSize,
|
|
396
|
+
fontWeight,
|
|
397
|
+
fontFamily,
|
|
398
|
+
letterSpacing,
|
|
399
|
+
lineHeight
|
|
400
|
+
});
|
|
401
|
+
}
|
|
373
402
|
return {
|
|
374
|
-
|
|
375
|
-
|
|
403
|
+
calculatedWidth: autoWidth ? finalResult.width : width,
|
|
404
|
+
calculatedLines: autoWidth ? finalResult.lines : [segment.text],
|
|
405
|
+
paddingTop: finalPaddingTop,
|
|
406
|
+
paddingRight: finalPaddingRight,
|
|
407
|
+
paddingBottom: finalPaddingBottom,
|
|
408
|
+
paddingLeft: finalPaddingLeft
|
|
376
409
|
};
|
|
377
410
|
}, [
|
|
378
411
|
autoWidth,
|
|
379
412
|
segment.text,
|
|
380
413
|
width,
|
|
381
|
-
|
|
414
|
+
basePaddingTop,
|
|
382
415
|
basePaddingRight,
|
|
416
|
+
basePaddingBottom,
|
|
417
|
+
basePaddingLeft,
|
|
418
|
+
extraPaddingTop,
|
|
419
|
+
extraPaddingRight,
|
|
420
|
+
extraPaddingBottom,
|
|
421
|
+
extraPaddingLeft,
|
|
383
422
|
hasExtraPadding,
|
|
384
423
|
fontSize,
|
|
385
424
|
fontWeight,
|
|
@@ -387,51 +426,6 @@ function TextElement({ segment, scale = 1 }) {
|
|
|
387
426
|
letterSpacing,
|
|
388
427
|
lineHeight
|
|
389
428
|
]);
|
|
390
|
-
const calculatedLines = autoWidthResult?.lines ?? [segment.text];
|
|
391
|
-
const paddingTop = basePaddingTop + (isMultiLine ? extraPaddingTop : 0);
|
|
392
|
-
const paddingRight = basePaddingRight + (isMultiLine ? extraPaddingRight : 0);
|
|
393
|
-
const paddingBottom = basePaddingBottom + (isMultiLine ? extraPaddingBottom : 0);
|
|
394
|
-
const paddingLeft = basePaddingLeft + (isMultiLine ? extraPaddingLeft : 0);
|
|
395
|
-
const calculatedWidth = useMemo(() => {
|
|
396
|
-
if (!autoWidth) return width;
|
|
397
|
-
if (!isMultiLine || extraPaddingLeft === 0 && extraPaddingRight === 0) {
|
|
398
|
-
return autoWidthResult?.width ?? width;
|
|
399
|
-
}
|
|
400
|
-
if (typeof document === "undefined") return width;
|
|
401
|
-
const measureSpan = document.createElement("span");
|
|
402
|
-
measureSpan.style.cssText = `
|
|
403
|
-
position: absolute;
|
|
404
|
-
visibility: hidden;
|
|
405
|
-
pointer-events: none;
|
|
406
|
-
font-family: ${fontFamily};
|
|
407
|
-
font-size: ${fontSize}px;
|
|
408
|
-
font-weight: ${fontWeight};
|
|
409
|
-
letter-spacing: ${letterSpacing}px;
|
|
410
|
-
white-space: nowrap;
|
|
411
|
-
`;
|
|
412
|
-
document.body.appendChild(measureSpan);
|
|
413
|
-
let widestLineWidth = 0;
|
|
414
|
-
for (const line of calculatedLines) {
|
|
415
|
-
measureSpan.textContent = line;
|
|
416
|
-
widestLineWidth = Math.max(widestLineWidth, measureSpan.getBoundingClientRect().width);
|
|
417
|
-
}
|
|
418
|
-
document.body.removeChild(measureSpan);
|
|
419
|
-
return Math.min(widestLineWidth + paddingLeft + paddingRight, width);
|
|
420
|
-
}, [
|
|
421
|
-
autoWidth,
|
|
422
|
-
autoWidthResult,
|
|
423
|
-
width,
|
|
424
|
-
isMultiLine,
|
|
425
|
-
extraPaddingLeft,
|
|
426
|
-
extraPaddingRight,
|
|
427
|
-
paddingLeft,
|
|
428
|
-
paddingRight,
|
|
429
|
-
calculatedLines,
|
|
430
|
-
fontFamily,
|
|
431
|
-
fontSize,
|
|
432
|
-
fontWeight,
|
|
433
|
-
letterSpacing
|
|
434
|
-
]);
|
|
435
429
|
const borderRadiusStyle = useMemo(() => {
|
|
436
430
|
if (!backgroundBorderRadius) return void 0;
|
|
437
431
|
const radii = getBorderRadii(backgroundBorderRadius);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ugcinc-render",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.11",
|
|
4
4
|
"description": "Unified rendering package for UGC Inc - shared types, components, and compositions for pixel-perfect client/server rendering",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|