@lightningjs/renderer 3.0.0-beta16 → 3.0.0-beta18

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.
Files changed (90) hide show
  1. package/dist/src/common/CommonTypes.d.ts +11 -0
  2. package/dist/src/core/AutosizeManager.d.ts +29 -0
  3. package/dist/src/core/AutosizeManager.js +171 -0
  4. package/dist/src/core/AutosizeManager.js.map +1 -0
  5. package/dist/src/core/CoreNode.js +8 -0
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +13 -0
  8. package/dist/src/core/CoreTextNode.js +68 -17
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/Stage.js +4 -2
  11. package/dist/src/core/Stage.js.map +1 -1
  12. package/dist/src/core/animations/Animation.d.ts +16 -0
  13. package/dist/src/core/animations/Animation.js +111 -0
  14. package/dist/src/core/animations/Animation.js.map +1 -0
  15. package/dist/src/core/animations/CoreTransition.d.ts +24 -0
  16. package/dist/src/core/animations/CoreTransition.js +63 -0
  17. package/dist/src/core/animations/CoreTransition.js.map +1 -0
  18. package/dist/src/core/animations/Playback.d.ts +62 -0
  19. package/dist/src/core/animations/Playback.js +155 -0
  20. package/dist/src/core/animations/Playback.js.map +1 -0
  21. package/dist/src/core/animations/Transition.d.ts +25 -0
  22. package/dist/src/core/animations/Transition.js +63 -0
  23. package/dist/src/core/animations/Transition.js.map +1 -0
  24. package/dist/src/core/animations/utils.d.ts +2 -0
  25. package/dist/src/core/animations/utils.js +137 -0
  26. package/dist/src/core/animations/utils.js.map +1 -0
  27. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  28. package/dist/src/core/lib/collectionUtils.js +100 -0
  29. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  30. package/dist/src/core/platforms/Platform.d.ts +5 -0
  31. package/dist/src/core/platforms/Platform.js.map +1 -1
  32. package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
  33. package/dist/src/core/platforms/web/WebPlatform.js +3 -0
  34. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  35. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +13 -9
  36. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  38. package/dist/src/core/shaders/canvas/RadialGradient.js +1 -1
  39. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  40. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +6 -4
  41. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  42. package/dist/src/core/shaders/webgl/LinearGradient.js +2 -1
  43. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  44. package/dist/src/core/shaders/webgl/RadialGradient.js +8 -7
  45. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  46. package/dist/src/core/text-rendering/CanvasFontHandler.js +1 -1
  47. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  48. package/dist/src/core/text-rendering/CanvasTextRenderer.js +4 -4
  49. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  50. package/dist/src/core/text-rendering/SdfTextRenderer.js +3 -3
  51. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  52. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +12 -13
  53. package/dist/src/core/text-rendering/TextLayoutEngine.js +239 -181
  54. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
  55. package/dist/src/core/text-rendering/TextRenderer.d.ts +22 -7
  56. package/dist/src/main-api/Renderer.js +4 -3
  57. package/dist/src/main-api/Renderer.js.map +1 -1
  58. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  59. package/package.json +1 -1
  60. package/src/common/CommonTypes.ts +16 -0
  61. package/src/core/CoreNode.test.ts +50 -1
  62. package/src/core/CoreNode.ts +11 -0
  63. package/src/core/CoreTextNode.ts +78 -17
  64. package/src/core/Stage.ts +5 -2
  65. package/src/core/platforms/Platform.ts +6 -0
  66. package/src/core/platforms/web/WebPlatform.ts +11 -0
  67. package/src/core/shaders/canvas/RadialGradient.ts +1 -1
  68. package/src/core/shaders/templates/RadialGradientTemplate.ts +6 -4
  69. package/src/core/shaders/webgl/LinearGradient.ts +2 -1
  70. package/src/core/shaders/webgl/RadialGradient.ts +8 -7
  71. package/src/core/text-rendering/CanvasFontHandler.ts +1 -7
  72. package/src/core/text-rendering/CanvasTextRenderer.ts +3 -5
  73. package/src/core/text-rendering/SdfTextRenderer.ts +2 -3
  74. package/src/core/text-rendering/TextLayoutEngine.ts +393 -223
  75. package/src/core/text-rendering/TextRenderer.ts +22 -7
  76. package/src/core/text-rendering/tests/{SdfTests.test.ts → TextLayoutEngine.test.ts} +103 -64
  77. package/src/main-api/Renderer.ts +4 -3
  78. package/dist/src/core/text-rendering/CanvasFont.d.ts +0 -14
  79. package/dist/src/core/text-rendering/CanvasFont.js +0 -111
  80. package/dist/src/core/text-rendering/CanvasFont.js.map +0 -1
  81. package/dist/src/core/text-rendering/CoreFont.d.ts +0 -33
  82. package/dist/src/core/text-rendering/CoreFont.js +0 -48
  83. package/dist/src/core/text-rendering/CoreFont.js.map +0 -1
  84. package/dist/src/core/text-rendering/FontManager.d.ts +0 -11
  85. package/dist/src/core/text-rendering/FontManager.js +0 -42
  86. package/dist/src/core/text-rendering/FontManager.js.map +0 -1
  87. package/dist/src/core/text-rendering/SdfFont.d.ts +0 -29
  88. package/dist/src/core/text-rendering/SdfFont.js +0 -142
  89. package/dist/src/core/text-rendering/SdfFont.js.map +0 -1
  90. package/src/core/text-rendering/tests/Canvas.test.ts +0 -378
@@ -1,3 +1,5 @@
1
+ // Use the same space regex as Canvas renderer to handle ZWSP
2
+ const spaceRegex = /[ \u200B]+/g;
1
3
  export const defaultFontMetrics = {
2
4
  ascender: 800,
3
5
  descender: -200,
@@ -12,7 +14,7 @@ export const normalizeFontMetrics = (metrics, fontSize) => {
12
14
  lineGap: metrics.lineGap * scale,
13
15
  };
14
16
  };
15
- export const mapTextLayout = (measureText, metrics, text, textAlign, verticalAlign, fontFamily, lineHeight, overflowSuffix, wordBreak, letterSpacing, maxLines, maxWidth, maxHeight) => {
17
+ export const mapTextLayout = (measureText, metrics, text, textAlign, fontFamily, lineHeight, overflowSuffix, wordBreak, letterSpacing, maxLines, maxWidth, maxHeight) => {
16
18
  const ascPx = metrics.ascender;
17
19
  const descPx = metrics.descender;
18
20
  const bareLineHeight = ascPx - descPx;
@@ -21,22 +23,31 @@ export const mapTextLayout = (measureText, metrics, text, textAlign, verticalAli
21
23
  const halfDelta = lineHeightDelta * 0.5;
22
24
  let effectiveMaxLines = maxLines;
23
25
  if (maxHeight > 0) {
24
- const maxFromHeight = Math.floor(maxHeight / lineHeightPx);
26
+ let maxFromHeight = Math.floor(maxHeight / lineHeightPx);
27
+ //ensure at least 1 line
28
+ if (maxFromHeight < 1) {
29
+ maxFromHeight = 1;
30
+ }
25
31
  if (effectiveMaxLines === 0 || maxFromHeight < effectiveMaxLines) {
26
32
  effectiveMaxLines = maxFromHeight;
27
33
  }
28
34
  }
35
+ //trim start/end whitespace
36
+ // text = text.trim();
29
37
  const wrappedText = maxWidth > 0;
30
38
  //wrapText or just measureLines based on maxWidth
31
39
  const [lines, remainingLines, remainingText] = wrappedText === true
32
- ? wrapText(measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines)
33
- : measureLines(measureText, text.split('\n'), fontFamily, letterSpacing, maxLines);
40
+ ? wrapText(measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, effectiveMaxLines)
41
+ : measureLines(measureText, text.split('\n'), fontFamily, letterSpacing, effectiveMaxLines);
34
42
  let effectiveLineAmount = lines.length;
35
- let effectiveMaxWidth = lines[0][1];
36
- //check for longest line
37
- if (effectiveLineAmount > 1) {
38
- for (let i = 1; i < effectiveLineAmount; i++) {
39
- effectiveMaxWidth = Math.max(effectiveMaxWidth, lines[i][1]);
43
+ let effectiveMaxWidth = 0;
44
+ if (effectiveLineAmount > 0) {
45
+ effectiveMaxWidth = lines[0][1];
46
+ //check for longest line
47
+ if (effectiveLineAmount > 1) {
48
+ for (let i = 1; i < effectiveLineAmount; i++) {
49
+ effectiveMaxWidth = Math.max(effectiveMaxWidth, lines[i][1]);
50
+ }
40
51
  }
41
52
  }
42
53
  //update line x offsets
@@ -44,7 +55,7 @@ export const mapTextLayout = (measureText, metrics, text, textAlign, verticalAli
44
55
  for (let i = 0; i < effectiveLineAmount; i++) {
45
56
  const line = lines[i];
46
57
  const w = line[1];
47
- line[2] =
58
+ line[3] =
48
59
  textAlign === 'right'
49
60
  ? effectiveMaxWidth - w
50
61
  : (effectiveMaxWidth - w) / 2;
@@ -55,7 +66,7 @@ export const mapTextLayout = (measureText, metrics, text, textAlign, verticalAli
55
66
  const startY = firstBaseLine;
56
67
  for (let i = 0; i < effectiveLineAmount; i++) {
57
68
  const line = lines[i];
58
- line[3] = startY + lineHeightPx * i;
69
+ line[4] = startY + lineHeightPx * i;
59
70
  }
60
71
  return [
61
72
  lines,
@@ -79,7 +90,7 @@ export const measureLines = (measureText, lines, fontFamily, letterSpacing, maxL
79
90
  continue;
80
91
  }
81
92
  const width = measureText(line, fontFamily, letterSpacing);
82
- measuredLines.push([line, width, 0, 0]);
93
+ measuredLines.push([line, width, false, 0, 0]);
83
94
  }
84
95
  return [
85
96
  measuredLines,
@@ -92,8 +103,9 @@ export const wrapText = (measureText, text, fontFamily, maxWidth, letterSpacing,
92
103
  const wrappedLines = [];
93
104
  // Calculate space width for line wrapping
94
105
  const spaceWidth = measureText(' ', fontFamily, letterSpacing);
106
+ const overflowWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
95
107
  let wrappedLine = [];
96
- let remainingLines = maxLines;
108
+ let remainingLines = maxLines > 0 ? maxLines : 1000;
97
109
  let hasRemainingText = true;
98
110
  let hasMaxLines = maxLines > 0;
99
111
  for (let i = 0; i < lines.length; i++) {
@@ -103,15 +115,20 @@ export const wrapText = (measureText, text, fontFamily, maxWidth, letterSpacing,
103
115
  }
104
116
  [wrappedLine, remainingLines, hasRemainingText] =
105
117
  line.length > 0
106
- ? wrapLine(measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines)
107
- : [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
118
+ ? wrapLine(measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, overflowWidth, wordBreak, remainingLines)
119
+ : [[['', 0, false, 0, 0]], remainingLines, i < lines.length - 1];
108
120
  remainingLines--;
109
121
  wrappedLines.push(...wrappedLine);
110
122
  if (hasMaxLines === true && remainingLines <= 0) {
111
123
  const lastLine = wrappedLines[wrappedLines.length - 1];
112
124
  if (i < lines.length - 1) {
113
- if (lastLine[0].endsWith(overflowSuffix) === false) {
114
- lastLine[0] = truncateLineWithSuffix(measureText, lastLine[0], fontFamily, maxWidth, letterSpacing, overflowSuffix);
125
+ //check if line is truncated already
126
+ if (lastLine[2] === false) {
127
+ let remainingText = '';
128
+ const [line, lineWidth] = truncateLineEnd(measureText, fontFamily, letterSpacing, lastLine[0], lastLine[1], remainingText, maxWidth, overflowSuffix, overflowWidth);
129
+ lastLine[0] = line;
130
+ lastLine[1] = lineWidth;
131
+ lastLine[2] = true;
115
132
  }
116
133
  }
117
134
  break;
@@ -119,204 +136,245 @@ export const wrapText = (measureText, text, fontFamily, maxWidth, letterSpacing,
119
136
  }
120
137
  return [wrappedLines, remainingLines, hasRemainingText];
121
138
  };
122
- export const wrapLine = (measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
123
- // Use the same space regex as Canvas renderer to handle ZWSP
124
- const spaceRegex = / |\u200B/g;
139
+ export const wrapLine = (measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, overflowWidth, wordBreak, remainingLines) => {
125
140
  const words = line.split(spaceRegex);
126
141
  const spaces = line.match(spaceRegex) || [];
127
142
  const wrappedLines = [];
128
143
  let currentLine = '';
129
144
  let currentLineWidth = 0;
130
145
  let hasRemainingText = true;
131
- let i = 0;
132
- for (; i < words.length; i++) {
133
- const word = words[i];
134
- if (word === undefined) {
135
- continue;
136
- }
137
- const space = spaces[i - 1] || '';
138
- const wordWidth = measureText(word, fontFamily, letterSpacing);
139
- // For width calculation, treat ZWSP as having 0 width but regular space functionality
140
- const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
141
- const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
142
- if ((i === 0 && wordWidth <= maxWidth) ||
143
- (i > 0 && totalWidth <= maxWidth)) {
144
- // Word fits on current line
145
- if (currentLine.length > 0) {
146
- // Add space - for ZWSP, don't add anything to output (it's invisible)
147
- if (space !== '\u200B') {
148
- currentLine += space;
149
- currentLineWidth += effectiveSpaceWidth;
150
- }
151
- }
152
- currentLine += word;
153
- currentLineWidth += wordWidth;
154
- }
155
- else {
156
- if (remainingLines === 1) {
157
- if (currentLine.length > 0) {
158
- // Add space - for ZWSP, don't add anything to output (it's invisible)
159
- if (space !== '\u200B') {
160
- currentLine += space;
161
- currentLineWidth += effectiveSpaceWidth;
162
- }
146
+ const wrapFn = getWrapStrategy(wordBreak);
147
+ while (words.length > 0 && remainingLines > 0) {
148
+ let word = words.shift();
149
+ let wordWidth = measureText(word, fontFamily, letterSpacing);
150
+ let remainingWord = '';
151
+ //handle first word of new line separately to avoid empty line issues
152
+ if (currentLineWidth === 0) {
153
+ // Word doesn't fit on current line
154
+ //if first word doesn't fit on empty line
155
+ if (wordWidth > maxWidth) {
156
+ remainingLines--;
157
+ //truncate word to fit
158
+ [word, remainingWord, wordWidth] =
159
+ remainingLines === 0
160
+ ? truncateWord(measureText, word, wordWidth, maxWidth, fontFamily, letterSpacing, overflowSuffix, overflowWidth)
161
+ : splitWord(measureText, word, wordWidth, maxWidth, fontFamily, letterSpacing);
162
+ if (remainingWord.length > 0) {
163
+ words.unshift(remainingWord);
163
164
  }
164
- currentLine += word;
165
- currentLineWidth += wordWidth;
166
- remainingLines = 0;
167
- hasRemainingText = i < words.length;
168
- break;
165
+ // first word doesn't fit on an empty line
166
+ wrappedLines.push([word, wordWidth, false, 0, 0]);
169
167
  }
170
- if (wordBreak !== 'break-all' && currentLine.length > 0) {
171
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
172
- }
173
- if (wordBreak !== 'break-all') {
168
+ else if (wordWidth + spaceWidth >= maxWidth) {
174
169
  remainingLines--;
170
+ // word with space doesn't fit, but word itself fits - put on new line
171
+ wrappedLines.push([word, wordWidth, false, 0, 0]);
172
+ }
173
+ else {
175
174
  currentLine = word;
176
175
  currentLineWidth = wordWidth;
177
176
  }
178
- if (wordBreak === 'break-word') {
179
- const [lines, rl, rt] = breakWord(measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines);
180
- remainingLines = rl;
181
- hasRemainingText = rt;
182
- if (lines.length === 1) {
183
- [currentLine, currentLineWidth] = lines[lines.length - 1];
184
- }
185
- else {
186
- for (let j = 0; j < lines.length; j++) {
187
- [currentLine, currentLineWidth] = lines[j];
188
- if (j < lines.length - 1) {
189
- wrappedLines.push(lines[j]);
190
- }
191
- }
192
- }
193
- }
194
- else if (wordBreak === 'break-all') {
195
- const firstLetterWidth = measureText(word.charAt(0), fontFamily, letterSpacing);
196
- let linebreak = false;
197
- if (currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
198
- maxWidth) {
199
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
200
- remainingLines -= 1;
201
- currentLine = '';
202
- currentLineWidth = 0;
203
- linebreak = true;
204
- }
205
- const initial = maxWidth - currentLineWidth;
206
- const [lines, rl, rt] = breakAll(measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines);
207
- remainingLines = rl;
208
- hasRemainingText = rt;
209
- if (linebreak === false) {
210
- const [text, width] = lines[0];
211
- currentLine += text;
212
- currentLineWidth += width;
213
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
214
- }
215
- for (let j = 1; j < lines.length; j++) {
216
- [currentLine, currentLineWidth] = lines[j];
217
- if (j < lines.length - 1) {
218
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
219
- }
220
- }
221
- if (i < words.length - 1 && currentLine.endsWith(' ') === false) {
222
- currentLine += ' ';
223
- currentLineWidth += effectiveSpaceWidth;
224
- }
225
- }
177
+ continue;
178
+ }
179
+ const space = spaces.shift() || '';
180
+ // For width calculation, treat ZWSP as having 0 width but regular space functionality
181
+ const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
182
+ const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
183
+ if (totalWidth < maxWidth) {
184
+ currentLine += effectiveSpaceWidth > 0 ? space + word : word;
185
+ currentLineWidth = totalWidth;
186
+ continue;
187
+ }
188
+ // Will move to next line after loop finishes
189
+ remainingLines--;
190
+ if (totalWidth === maxWidth) {
191
+ currentLine += effectiveSpaceWidth > 0 ? space + word : word;
192
+ currentLineWidth = totalWidth;
193
+ wrappedLines.push([currentLine, currentLineWidth, false, 0, 0]);
194
+ currentLine = '';
195
+ currentLineWidth = 0;
196
+ continue;
197
+ }
198
+ [currentLine, currentLineWidth, remainingWord] = wrapFn(measureText, word, wordWidth, fontFamily, letterSpacing, wrappedLines, currentLine, currentLineWidth, remainingLines, remainingWord, maxWidth, space, spaceWidth, overflowSuffix, overflowWidth);
199
+ if (remainingWord.length > 0) {
200
+ words.unshift(remainingWord);
226
201
  }
227
202
  }
228
- // Add the last line if it has content
229
- if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
230
- currentLine = truncateLineWithSuffix(measureText, currentLine, fontFamily, maxWidth, letterSpacing, overflowSuffix);
231
- }
232
- if (currentLine.length > 0) {
233
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
203
+ if (currentLineWidth > 0 && remainingLines > 0) {
204
+ wrappedLines.push([currentLine, currentLineWidth, false, 0, 0]);
234
205
  }
235
206
  return [wrappedLines, remainingLines, hasRemainingText];
236
207
  };
208
+ const getWrapStrategy = (wordBreak) => {
209
+ //** default so probably first out */
210
+ if (wordBreak === 'break-word') {
211
+ return breakWord;
212
+ }
213
+ //** second most used */
214
+ if (wordBreak === 'break-all') {
215
+ return breakAll;
216
+ }
217
+ //** most similar to html/CSS 'normal' not really used in TV apps */
218
+ if (wordBreak === 'overflow') {
219
+ return overflow;
220
+ }
221
+ //fallback
222
+ return breakWord;
223
+ };
224
+ //break strategies
237
225
  /**
238
- * Truncate a line with overflow suffix to fit within width
226
+ * Overflow wordBreak strategy, if a word partially fits add it to the line, start new line if necessary or add overflowSuffix.
227
+ *
228
+ * @remarks This strategy is similar to 'normal' in html/CSS. However
239
229
  */
240
- export const truncateLineWithSuffix = (measureText, line, fontFamily, maxWidth, letterSpacing, overflowSuffix) => {
241
- const suffixWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
242
- if (suffixWidth >= maxWidth) {
243
- return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
230
+ export const overflow = (measureText, word, wordWidth, fontFamily, letterSpacing, wrappedLines, currentLine, currentLineWidth, remainingLines, remainingWord, maxWidth, space, spaceWidth, overflowSuffix, overflowWidth) => {
231
+ currentLine += space + word;
232
+ currentLineWidth += spaceWidth + wordWidth;
233
+ if (remainingLines === 0) {
234
+ currentLine += overflowSuffix;
235
+ currentLineWidth += overflowWidth;
236
+ }
237
+ wrappedLines.push([currentLine, currentLineWidth, true, 0, 0]);
238
+ return ['', 0, ''];
239
+ };
240
+ export const breakWord = (measureText, word, wordWidth, fontFamily, letterSpacing, wrappedLines, currentLine, currentLineWidth, remainingLines, remainingWord, maxWidth, space, spaceWidth, overflowSuffix, overflowWidth) => {
241
+ remainingWord = word;
242
+ if (remainingLines === 0) {
243
+ [currentLine, currentLineWidth, remainingWord] = truncateLineEnd(measureText, fontFamily, letterSpacing, currentLine, currentLineWidth, remainingWord, maxWidth, overflowSuffix, overflowWidth);
244
+ wrappedLines.push([currentLine, currentLineWidth, true, 0, 0]);
245
+ }
246
+ else {
247
+ wrappedLines.push([currentLine, currentLineWidth, false, 0, 0]);
248
+ currentLine = '';
249
+ currentLineWidth = 0;
250
+ }
251
+ return [currentLine, currentLineWidth, remainingWord];
252
+ };
253
+ export const breakAll = (measureText, word, wordWidth, fontFamily, letterSpacing, wrappedLines, currentLine, currentLineWidth, remainingLines, remainingWord, maxWidth, space, spaceWidth, overflowSuffix, overflowWidth) => {
254
+ let remainingSpace = maxWidth - currentLineWidth;
255
+ if (currentLineWidth > 0) {
256
+ remainingSpace -= spaceWidth;
257
+ }
258
+ const truncate = remainingLines === 0;
259
+ [word, remainingWord, wordWidth] = truncate
260
+ ? truncateWord(measureText, word, wordWidth, remainingSpace, fontFamily, letterSpacing, overflowSuffix, overflowWidth)
261
+ : splitWord(measureText, word, wordWidth, remainingSpace, fontFamily, letterSpacing);
262
+ currentLine += space + word;
263
+ currentLineWidth += spaceWidth + wordWidth;
264
+ // first word doesn't fit on an empty line
265
+ wrappedLines.push([currentLine, currentLineWidth, truncate, 0, 0]);
266
+ currentLine = '';
267
+ currentLineWidth = 0;
268
+ return [currentLine, currentLineWidth, remainingWord];
269
+ };
270
+ export const truncateLineEnd = (measureText, fontFamily, letterSpacing, currentLine, currentLineWidth, remainingWord, maxWidth, overflowSuffix, overflowWidth) => {
271
+ if (currentLineWidth + overflowWidth <= maxWidth) {
272
+ currentLine += overflowSuffix;
273
+ currentLineWidth += overflowWidth;
274
+ remainingWord = '';
275
+ return [currentLine, currentLineWidth, remainingWord];
244
276
  }
245
- let truncatedLine = line;
246
- while (truncatedLine.length > 0) {
247
- const lineWidth = measureText(truncatedLine, fontFamily, letterSpacing);
248
- if (lineWidth + suffixWidth <= maxWidth) {
249
- return truncatedLine + overflowSuffix;
277
+ let truncated = false;
278
+ for (let i = currentLine.length - 1; i > 0; i--) {
279
+ const char = currentLine.charAt(i);
280
+ const charWidth = measureText(char, fontFamily, letterSpacing);
281
+ currentLineWidth -= charWidth;
282
+ if (currentLineWidth + overflowWidth <= maxWidth) {
283
+ currentLine = currentLine.substring(0, i) + overflowSuffix;
284
+ currentLineWidth += overflowWidth;
285
+ remainingWord = currentLine.substring(i) + ' ' + remainingWord;
286
+ truncated = true;
287
+ break;
250
288
  }
251
- truncatedLine = truncatedLine.substring(0, truncatedLine.length - 1);
252
289
  }
253
- return overflowSuffix;
290
+ if (truncated === false) {
291
+ currentLine = overflowSuffix;
292
+ currentLineWidth = overflowWidth;
293
+ remainingWord = currentLine;
294
+ }
295
+ return [currentLine, currentLineWidth, remainingWord];
254
296
  };
255
- /**
256
- * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
257
- */
258
- export const breakWord = (measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines) => {
259
- const lines = [];
260
- let currentPart = '';
297
+ export const truncateWord = (measureText, word, wordWidth, maxWidth, fontFamily, letterSpacing, overflowSuffix, overflowWidth) => {
298
+ const targetWidth = maxWidth - overflowWidth;
299
+ if (targetWidth <= 0) {
300
+ return ['', word, 0];
301
+ }
302
+ const excessWidth = wordWidth - targetWidth;
303
+ // If excess is small (< 50%), we're keeping most - start from back and remove
304
+ // If excess is large (>= 50%), we're removing most - start from front and add
305
+ const shouldStartFromBack = excessWidth < wordWidth / 2;
306
+ if (shouldStartFromBack === false) {
307
+ // Start from back - remove characters until it fits (keeping most of word)
308
+ let currentWidth = wordWidth;
309
+ for (let i = word.length - 1; i > 0; i--) {
310
+ const char = word.charAt(i);
311
+ const charWidth = measureText(char, fontFamily, letterSpacing);
312
+ currentWidth -= charWidth;
313
+ if (currentWidth <= targetWidth) {
314
+ const remainingWord = word.substring(i);
315
+ return [
316
+ word.substring(0, i) + overflowSuffix,
317
+ remainingWord,
318
+ currentWidth + overflowWidth,
319
+ ];
320
+ }
321
+ }
322
+ // Even first character doesn't fit
323
+ return [overflowSuffix, word, overflowWidth];
324
+ }
325
+ // Start from front - add characters until we exceed limit (removing most of word)
261
326
  let currentWidth = 0;
262
- let i = 0;
263
327
  for (let i = 0; i < word.length; i++) {
264
328
  const char = word.charAt(i);
265
- const codepoint = char.codePointAt(0);
266
- if (codepoint === undefined)
267
- continue;
268
329
  const charWidth = measureText(char, fontFamily, letterSpacing);
269
- if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
270
- remainingLines--;
271
- if (remainingLines === 0) {
272
- break;
273
- }
274
- lines.push([currentPart, currentWidth, 0, 0]);
275
- currentPart = char;
276
- currentWidth = charWidth;
330
+ if (currentWidth + charWidth > targetWidth) {
331
+ const remainingWord = word.substring(i);
332
+ return [
333
+ word.substring(0, i) + overflowSuffix,
334
+ remainingWord,
335
+ currentWidth + overflowWidth,
336
+ ];
277
337
  }
278
- else {
279
- currentPart += char;
280
- currentWidth += charWidth;
281
- }
282
- }
283
- if (currentPart.length > 0) {
284
- lines.push([currentPart, currentWidth, 0, 0]);
338
+ currentWidth += charWidth;
285
339
  }
286
- return [lines, remainingLines, i < word.length - 1];
340
+ // Entire word fits (shouldn't happen, but safe fallback)
341
+ return [word + overflowSuffix, '', wordWidth + overflowWidth];
287
342
  };
288
- /**
289
- * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
290
- */
291
- export const breakAll = (measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines) => {
292
- const lines = [];
293
- let currentPart = '';
294
- let currentWidth = 0;
295
- let max = initial;
296
- let i = 0;
297
- let hasRemainingText = false;
298
- for (; i < word.length; i++) {
299
- if (remainingLines === 0) {
300
- hasRemainingText = true;
301
- break;
343
+ export const splitWord = (measureText, word, wordWidth, maxWidth, fontFamily, letterSpacing) => {
344
+ if (maxWidth <= 0) {
345
+ return ['', word, 0];
346
+ }
347
+ const excessWidth = wordWidth - maxWidth;
348
+ // If excess is small (< 50%), we're keeping most - start from back and remove
349
+ // If excess is large (>= 50%), we're removing most - start from front and add
350
+ const shouldStartFromBack = excessWidth < wordWidth / 2;
351
+ if (shouldStartFromBack === false) {
352
+ // Start from back - remove characters until it fits (keeping most of word)
353
+ let currentWidth = wordWidth;
354
+ for (let i = word.length - 1; i > 0; i--) {
355
+ const char = word.charAt(i);
356
+ const charWidth = measureText(char, fontFamily, letterSpacing);
357
+ currentWidth -= charWidth;
358
+ if (currentWidth <= maxWidth) {
359
+ const remainingWord = word.substring(i);
360
+ return [word.substring(0, i), remainingWord, currentWidth];
361
+ }
302
362
  }
363
+ // Even first character doesn't fit
364
+ return ['', word, 0];
365
+ }
366
+ // Start from front - add characters until we exceed limit (removing most of word)
367
+ let currentWidth = 0;
368
+ for (let i = 0; i < word.length; i++) {
303
369
  const char = word.charAt(i);
304
370
  const charWidth = measureText(char, fontFamily, letterSpacing);
305
- if (currentWidth + charWidth > max && currentPart.length > 0) {
306
- lines.push([currentPart, currentWidth, 0, 0]);
307
- currentPart = char;
308
- currentWidth = charWidth;
309
- max = maxWidth;
310
- remainingLines--;
371
+ if (currentWidth + charWidth > maxWidth) {
372
+ const remainingWord = word.substring(i);
373
+ return [word.substring(0, i), remainingWord, currentWidth];
311
374
  }
312
- else {
313
- currentPart += char;
314
- currentWidth += charWidth;
315
- }
316
- }
317
- if (currentPart.length > 0) {
318
- lines.push([currentPart, currentWidth, 0, 0]);
375
+ currentWidth += charWidth;
319
376
  }
320
- return [lines, remainingLines, hasRemainingText];
377
+ // Entire word fits (shouldn't happen, but safe fallback)
378
+ return [word, '', wordWidth];
321
379
  };
322
380
  //# sourceMappingURL=TextLayoutEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextLayoutEngine.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextLayoutEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextLayoutEngine.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextLayoutEngine.ts"],"names":[],"mappings":"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"}
@@ -193,14 +193,28 @@ export interface TrProps extends TrFontProps {
193
193
  * @remarks
194
194
  * This property sets how words should break when reaching the end of a line.
195
195
  *
196
- * - `'normal'`: Use the default line break rule.
196
+ * - `'overflow'`: Uses the Css/HTML normal word-break behavior, generally not used in app development.
197
197
  * - `'break-all'`: To prevent overflow, word breaks should happen between any two characters.
198
198
  * - `'break-word'`: To prevent overflow, word breaks should happen between words. If words are too long word breaks happen between any two characters.
199
199
  *
200
- * @default "normal"
200
+ * @default "break-word"
201
201
  */
202
- wordBreak: 'normal' | 'break-all' | 'break-word';
203
- zIndex: number;
202
+ wordBreak: 'overflow' | 'break-all' | 'break-word';
203
+ /**
204
+ * contain mode for text
205
+ *
206
+ * @remarks
207
+ *
208
+ * This property sets how the text should be contained within its bounding box.
209
+ *
210
+ * - 'width': The text is contained within the specified maxWidth, horizontal position of text will adjust according to {@link textAlign}.
211
+ * - 'height': The text is contained within the specified maxHeight, vertical position of text will adjust according to {@link verticalAlign}.
212
+ * - 'both': The text is contained within both the specified maxWidth and maxHeight.
213
+ * - 'none': The text is not contained within any bounding box.
214
+ *
215
+ * @default 'none'
216
+ */
217
+ contain: 'width' | 'height' | 'both' | 'none';
204
218
  }
205
219
  /**
206
220
  * Glyph layout information for WebGL rendering
@@ -336,10 +350,11 @@ export interface TextRenderer {
336
350
  * Text line struct for text mapping
337
351
  * 0 - text
338
352
  * 1 - width
339
- * 2 - line offset x
340
- * 3 - line offset y
353
+ * 2 - truncated
354
+ * 3 - line offset x
355
+ * 4 - line offset y
341
356
  */
342
- export type TextLineStruct = [string, number, number, number];
357
+ export type TextLineStruct = [string, number, boolean, number, number];
343
358
  /**
344
359
  * Wrapped lines struct for text mapping
345
360
  * 0 - line structs