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 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 { autoWidthResult, isMultiLine } = (0, import_react.useMemo)(() => {
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
- autoWidthResult: null,
443
- isMultiLine: false
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 result = calculateAutoWidthAndLines({
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
- autoWidthResult: autoWidth ? result : null,
459
- isMultiLine: result.lines.length >= 2
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
- basePaddingLeft,
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 { autoWidthResult, isMultiLine } = useMemo(() => {
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
- autoWidthResult: null,
359
- isMultiLine: false
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 result = calculateAutoWidthAndLines({
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
- autoWidthResult: autoWidth ? result : null,
375
- isMultiLine: result.lines.length >= 2
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
- basePaddingLeft,
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.10",
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",