@kurot/ui 3.0.0 → 3.1.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 +49 -6
- package/README.md +66 -41
- package/dist/kurot/components/Label.d.ts +40 -0
- package/dist/kurot/components/Label.d.ts.map +1 -1
- package/dist/kurot/components/Label.js +182 -32
- package/dist/kurot/components/Label.js.map +1 -1
- package/dist/kurot/components/index.d.ts +1 -1
- package/dist/kurot/components/index.d.ts.map +1 -1
- package/dist/kurot/components/index.js.map +1 -1
- package/dist/kurot/text/fit-label-text.d.ts +23 -0
- package/dist/kurot/text/fit-label-text.d.ts.map +1 -0
- package/dist/kurot/text/fit-label-text.js +36 -0
- package/dist/kurot/text/fit-label-text.js.map +1 -0
- package/docs/ai-context.md +211 -0
- package/docs/architecture.md +478 -0
- package/docs/label-text-layout.md +94 -0
- package/package.json +4 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component } from './Component.js';
|
|
2
|
-
import { TextField } from '@kurot/core';
|
|
2
|
+
import { TextField, TextFieldType } from '@kurot/core';
|
|
3
|
+
import { fitLabelText } from '../text/fit-label-text.js';
|
|
3
4
|
import { PropertyEvent } from '../events/PropertyEvent.js';
|
|
4
5
|
/**
|
|
5
6
|
* Label component for displaying text.
|
|
@@ -11,10 +12,17 @@ export class Label extends Component {
|
|
|
11
12
|
// ── Instance fields ───────────────────────────────────────────────────
|
|
12
13
|
_textField;
|
|
13
14
|
_widthConstraint = NaN;
|
|
15
|
+
_layoutHeight = NaN;
|
|
16
|
+
_baseSize;
|
|
17
|
+
_textFit = 'none';
|
|
18
|
+
_minFontSize = 12;
|
|
19
|
+
_textFitOverflow = false;
|
|
20
|
+
_fitKey;
|
|
14
21
|
// ── Constructor ───────────────────────────────────────────────────────
|
|
15
22
|
constructor(text) {
|
|
16
23
|
super();
|
|
17
24
|
this._textField = new TextField();
|
|
25
|
+
this._baseSize = this._textField.size;
|
|
18
26
|
this.touchChildren = false;
|
|
19
27
|
if (text)
|
|
20
28
|
this.text = text;
|
|
@@ -38,16 +46,71 @@ export class Label extends Component {
|
|
|
38
46
|
if (this._textField.fontFamily !== value) {
|
|
39
47
|
this._textField.fontFamily = value;
|
|
40
48
|
this.invalidateSize();
|
|
49
|
+
this.invalidateDisplayList();
|
|
41
50
|
}
|
|
42
51
|
}
|
|
43
52
|
get size() {
|
|
44
|
-
return this.
|
|
53
|
+
return this._baseSize;
|
|
45
54
|
}
|
|
46
55
|
set size(value) {
|
|
47
|
-
if (this.
|
|
56
|
+
if (this._baseSize !== value) {
|
|
57
|
+
this._baseSize = value;
|
|
48
58
|
this._textField.size = value;
|
|
59
|
+
this._fitKey = undefined;
|
|
49
60
|
this.invalidateSize();
|
|
61
|
+
this.invalidateDisplayList();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Shrink applies only to noneditable, single-line text with finite bounds.
|
|
66
|
+
* Multiline text retains the authored size; editable text rejects shrink.
|
|
67
|
+
*/
|
|
68
|
+
get textFit() {
|
|
69
|
+
return this._textFit;
|
|
70
|
+
}
|
|
71
|
+
set textFit(value) {
|
|
72
|
+
if (value === 'shrink' && this._textField.type === TextFieldType.INPUT) {
|
|
73
|
+
throw new RangeError('Editable text does not support font shrinking.');
|
|
50
74
|
}
|
|
75
|
+
if (value !== 'none' && value !== 'shrink') {
|
|
76
|
+
throw new RangeError('Label.textFit must be none or shrink.');
|
|
77
|
+
}
|
|
78
|
+
if (this._textFit === value)
|
|
79
|
+
return;
|
|
80
|
+
this._textFit = value;
|
|
81
|
+
this._fitKey = undefined;
|
|
82
|
+
this.invalidateSize();
|
|
83
|
+
this.invalidateDisplayList();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Readable lower limit in logical pixels; must be finite and at least one.
|
|
87
|
+
* A limit above size does not enlarge the text.
|
|
88
|
+
*/
|
|
89
|
+
get minFontSize() {
|
|
90
|
+
return this._minFontSize;
|
|
91
|
+
}
|
|
92
|
+
set minFontSize(value) {
|
|
93
|
+
if (!Number.isFinite(value) || value < 1) {
|
|
94
|
+
throw new RangeError('Label.minFontSize must be finite and at least one.');
|
|
95
|
+
}
|
|
96
|
+
if (this._minFontSize === value)
|
|
97
|
+
return;
|
|
98
|
+
this._minFontSize = value;
|
|
99
|
+
this.invalidateSize();
|
|
100
|
+
this.invalidateDisplayList();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Derived drawing size after layout validation; size remains the authored value.
|
|
104
|
+
*/
|
|
105
|
+
get renderedSize() {
|
|
106
|
+
return this._textField.size;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* True after validation when enabled fitting cannot fit even at minFontSize.
|
|
110
|
+
* Text is then clipped normally; the project decides how to handle overflow.
|
|
111
|
+
*/
|
|
112
|
+
get textFitOverflow() {
|
|
113
|
+
return this._textFitOverflow;
|
|
51
114
|
}
|
|
52
115
|
get bold() {
|
|
53
116
|
return this._textField.bold;
|
|
@@ -56,6 +119,7 @@ export class Label extends Component {
|
|
|
56
119
|
if (this._textField.bold !== value) {
|
|
57
120
|
this._textField.bold = value;
|
|
58
121
|
this.invalidateSize();
|
|
122
|
+
this.invalidateDisplayList();
|
|
59
123
|
}
|
|
60
124
|
}
|
|
61
125
|
get italic() {
|
|
@@ -65,6 +129,7 @@ export class Label extends Component {
|
|
|
65
129
|
if (this._textField.italic !== value) {
|
|
66
130
|
this._textField.italic = value;
|
|
67
131
|
this.invalidateSize();
|
|
132
|
+
this.invalidateDisplayList();
|
|
68
133
|
}
|
|
69
134
|
}
|
|
70
135
|
get textColor() {
|
|
@@ -83,7 +148,11 @@ export class Label extends Component {
|
|
|
83
148
|
return this._textField.stroke;
|
|
84
149
|
}
|
|
85
150
|
set stroke(value) {
|
|
151
|
+
if (this._textField.stroke === value)
|
|
152
|
+
return;
|
|
86
153
|
this._textField.stroke = value;
|
|
154
|
+
this.invalidateSize();
|
|
155
|
+
this.invalidateDisplayList();
|
|
87
156
|
}
|
|
88
157
|
get textAlign() {
|
|
89
158
|
return this._textField.textAlign;
|
|
@@ -103,15 +172,24 @@ export class Label extends Component {
|
|
|
103
172
|
this.invalidateDisplayList();
|
|
104
173
|
}
|
|
105
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Defaults to true. False renders only the first hard-separated line,
|
|
177
|
+
* without automatic wrapping, regardless of the label height.
|
|
178
|
+
*/
|
|
106
179
|
get multiline() {
|
|
107
180
|
return this._textField.multiline;
|
|
108
181
|
}
|
|
109
182
|
set multiline(value) {
|
|
110
|
-
|
|
111
|
-
|
|
183
|
+
const changed = this._textField.multiline !== value;
|
|
184
|
+
this._textField.multiline = value;
|
|
185
|
+
if (changed) {
|
|
112
186
|
this.invalidateSize();
|
|
187
|
+
this.invalidateDisplayList();
|
|
113
188
|
}
|
|
114
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* In multiline mode, true uses Unicode word boundaries; false wraps by character.
|
|
192
|
+
*/
|
|
115
193
|
get wordWrap() {
|
|
116
194
|
return this._textField.wordWrap;
|
|
117
195
|
}
|
|
@@ -119,6 +197,7 @@ export class Label extends Component {
|
|
|
119
197
|
if (this._textField.wordWrap !== value) {
|
|
120
198
|
this._textField.wordWrap = value;
|
|
121
199
|
this.invalidateSize();
|
|
200
|
+
this.invalidateDisplayList();
|
|
122
201
|
}
|
|
123
202
|
}
|
|
124
203
|
get lineSpacing() {
|
|
@@ -128,6 +207,7 @@ export class Label extends Component {
|
|
|
128
207
|
if (this._textField.lineSpacing !== value) {
|
|
129
208
|
this._textField.lineSpacing = value;
|
|
130
209
|
this.invalidateSize();
|
|
210
|
+
this.invalidateDisplayList();
|
|
131
211
|
}
|
|
132
212
|
}
|
|
133
213
|
get maxChars() {
|
|
@@ -140,54 +220,124 @@ export class Label extends Component {
|
|
|
140
220
|
return this._textField.displayAsPassword;
|
|
141
221
|
}
|
|
142
222
|
set displayAsPassword(value) {
|
|
223
|
+
if (this._textField.displayAsPassword === value)
|
|
224
|
+
return;
|
|
143
225
|
this._textField.displayAsPassword = value;
|
|
226
|
+
this.invalidateSize();
|
|
227
|
+
this.invalidateDisplayList();
|
|
144
228
|
}
|
|
145
229
|
// ── Override methods ──────────────────────────────────────────────────
|
|
230
|
+
invalidateSize() {
|
|
231
|
+
// Font readiness can invalidate metrics without changing the family name.
|
|
232
|
+
this._fitKey = undefined;
|
|
233
|
+
this._textField?.invalidateTextMetrics();
|
|
234
|
+
super.invalidateSize();
|
|
235
|
+
}
|
|
146
236
|
createChildren() {
|
|
147
237
|
super.createChildren();
|
|
148
238
|
this.addChild(this._textField);
|
|
149
239
|
}
|
|
150
240
|
measure() {
|
|
151
241
|
const tf = this._textField;
|
|
152
|
-
// Mirror Egret: determine the available width for wrapping, then
|
|
153
|
-
// temporarily apply it to measure textWidth/textHeight, restoring the
|
|
154
|
-
// original width afterwards so measure() has no lasting side effect.
|
|
155
242
|
const oldWidth = tf.$explicitWidth;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
243
|
+
const availableWidth = Number.isFinite(this._widthConstraint)
|
|
244
|
+
? this._widthConstraint
|
|
245
|
+
: Number.isFinite(this.$explicitWidth)
|
|
246
|
+
? this.$explicitWidth
|
|
247
|
+
: this.maxWidth !== 100000
|
|
248
|
+
? this.maxWidth
|
|
249
|
+
: NaN;
|
|
250
|
+
const availableHeight = Number.isFinite(this._layoutHeight)
|
|
251
|
+
? this._layoutHeight
|
|
252
|
+
: Number.isFinite(this.$explicitHeight)
|
|
253
|
+
? this.$explicitHeight
|
|
254
|
+
: this.maxHeight !== 100000
|
|
255
|
+
? this.maxHeight
|
|
256
|
+
: NaN;
|
|
257
|
+
this._applyTextFit(availableWidth, availableHeight);
|
|
258
|
+
try {
|
|
259
|
+
tf.width = availableWidth;
|
|
260
|
+
this.setMeasuredSize(tf.textWidth, tf.textHeight);
|
|
163
261
|
}
|
|
164
|
-
|
|
165
|
-
|
|
262
|
+
finally {
|
|
263
|
+
tf.width = oldWidth;
|
|
166
264
|
}
|
|
167
|
-
tf.width = availableWidth;
|
|
168
|
-
this.setMeasuredSize(tf.textWidth, tf.textHeight);
|
|
169
|
-
tf.width = oldWidth;
|
|
170
265
|
}
|
|
171
266
|
setLayoutBoundsSize(layoutWidth, layoutHeight) {
|
|
172
267
|
super.setLayoutBoundsSize(layoutWidth, layoutHeight);
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
268
|
+
// Parent layout bounds may be transformed or clamped by min/max limits.
|
|
269
|
+
// Fitting uses the resolved local size, never the parent's raw dimensions.
|
|
270
|
+
const width = Number.isFinite(layoutWidth) ? this.width : NaN;
|
|
271
|
+
const height = Number.isFinite(layoutHeight) ? this.height : NaN;
|
|
272
|
+
const widthChanged = !Object.is(this._widthConstraint, width);
|
|
273
|
+
const heightChanged = !Object.is(this._layoutHeight, height);
|
|
274
|
+
this._widthConstraint = width;
|
|
275
|
+
this._layoutHeight = height;
|
|
276
|
+
if ((widthChanged || heightChanged) && (this.multiline || this.textFit === 'shrink')) {
|
|
277
|
+
this.invalidateSize();
|
|
278
|
+
this.invalidateDisplayList();
|
|
179
279
|
}
|
|
180
|
-
this._widthConstraint = layoutWidth;
|
|
181
|
-
if (!isNaN(this.$explicitHeight))
|
|
182
|
-
return;
|
|
183
|
-
if (layoutWidth === this.measuredWidth)
|
|
184
|
-
return;
|
|
185
|
-
this.invalidateSize();
|
|
186
280
|
}
|
|
187
281
|
updateDisplayList(unscaledWidth, unscaledHeight) {
|
|
188
282
|
super.updateDisplayList(unscaledWidth, unscaledHeight);
|
|
283
|
+
// Automatic axes must not feed their own measured size back into fitting.
|
|
284
|
+
const fitWidth = Number.isFinite(this._widthConstraint) || Number.isFinite(this.$explicitWidth)
|
|
285
|
+
? unscaledWidth
|
|
286
|
+
: this.maxWidth !== 100000
|
|
287
|
+
? this.maxWidth
|
|
288
|
+
: NaN;
|
|
289
|
+
const fitHeight = Number.isFinite(this._layoutHeight) || Number.isFinite(this.$explicitHeight)
|
|
290
|
+
? unscaledHeight
|
|
291
|
+
: this.maxHeight !== 100000
|
|
292
|
+
? this.maxHeight
|
|
293
|
+
: NaN;
|
|
294
|
+
const previousSize = this.renderedSize;
|
|
295
|
+
this._applyTextFit(fitWidth, fitHeight);
|
|
296
|
+
if (previousSize !== this.renderedSize && (isNaN(this.$explicitWidth) || isNaN(this.$explicitHeight))) {
|
|
297
|
+
this.invalidateSize();
|
|
298
|
+
}
|
|
189
299
|
this._textField.width = unscaledWidth;
|
|
190
300
|
this._textField.height = unscaledHeight;
|
|
191
301
|
}
|
|
302
|
+
// ── Private methods ────────────────────────────────────────────────────
|
|
303
|
+
_applyTextFit(width, height) {
|
|
304
|
+
const tf = this._textField;
|
|
305
|
+
if (this.textFit !== 'shrink' || this.multiline || tf.type === TextFieldType.INPUT) {
|
|
306
|
+
tf.size = this._baseSize;
|
|
307
|
+
this._textFitOverflow = false;
|
|
308
|
+
this._fitKey = undefined;
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const text = tf.displayAsPassword
|
|
312
|
+
? '*'.repeat(this.text.length)
|
|
313
|
+
: this.text.split(/\r\n|[\n\r\v\f\u0085\u2028\u2029]/, 1)[0];
|
|
314
|
+
const key = JSON.stringify([
|
|
315
|
+
text,
|
|
316
|
+
tf.fontFamily,
|
|
317
|
+
this.size,
|
|
318
|
+
this.minFontSize,
|
|
319
|
+
tf.bold,
|
|
320
|
+
tf.italic,
|
|
321
|
+
tf.stroke,
|
|
322
|
+
width,
|
|
323
|
+
height,
|
|
324
|
+
]);
|
|
325
|
+
if (key === this._fitKey)
|
|
326
|
+
return;
|
|
327
|
+
const fitted = fitLabelText({
|
|
328
|
+
text,
|
|
329
|
+
fontFamily: tf.fontFamily,
|
|
330
|
+
size: this.size,
|
|
331
|
+
minimum: this.minFontSize,
|
|
332
|
+
bold: tf.bold,
|
|
333
|
+
italic: tf.italic,
|
|
334
|
+
stroke: tf.stroke,
|
|
335
|
+
width,
|
|
336
|
+
height,
|
|
337
|
+
});
|
|
338
|
+
tf.size = fitted.size;
|
|
339
|
+
this._textFitOverflow = fitted.overflow;
|
|
340
|
+
this._fitKey = key;
|
|
341
|
+
}
|
|
192
342
|
}
|
|
193
343
|
//# sourceMappingURL=Label.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../src/kurot/components/Label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../src/kurot/components/Label.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ export { Component, type ComponentEvents, type SkinPartsMap, type SkinPartsOf }
|
|
|
2
2
|
export { Group, type GroupEvents } from './Group.js';
|
|
3
3
|
export { Rect } from './Rect.js';
|
|
4
4
|
export { Image } from './Image.js';
|
|
5
|
-
export { Label } from './Label.js';
|
|
5
|
+
export { Label, type TextFitMode } from './Label.js';
|
|
6
6
|
export { Button } from './Button.js';
|
|
7
7
|
export { ToggleButton } from './ToggleButton.js';
|
|
8
8
|
export { CheckBox } from './CheckBox.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6D,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6D,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAmB,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface LabelTextMetrics {
|
|
2
|
+
text: string;
|
|
3
|
+
fontFamily: string;
|
|
4
|
+
size: number;
|
|
5
|
+
minimum: number;
|
|
6
|
+
bold: boolean;
|
|
7
|
+
italic: boolean;
|
|
8
|
+
stroke: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
}
|
|
12
|
+
interface LabelTextFit {
|
|
13
|
+
size: number;
|
|
14
|
+
overflow: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Fits one plain-text line within externally constrained logical bounds.
|
|
18
|
+
* A finite zero bound is meaningful; NaN represents an unconstrained axis.
|
|
19
|
+
* Never changes authored size or text, and always measures from the base size.
|
|
20
|
+
*/
|
|
21
|
+
export declare function fitLabelText(metrics: LabelTextMetrics): LabelTextFit;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=fit-label-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fit-label-text.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/fit-label-text.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,UAAU,YAAY;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,CA8BpE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { measureText } from '@kurot/core';
|
|
2
|
+
/**
|
|
3
|
+
* Fits one plain-text line within externally constrained logical bounds.
|
|
4
|
+
* A finite zero bound is meaningful; NaN represents an unconstrained axis.
|
|
5
|
+
* Never changes authored size or text, and always measures from the base size.
|
|
6
|
+
*/
|
|
7
|
+
export function fitLabelText(metrics) {
|
|
8
|
+
const fits = (size) => {
|
|
9
|
+
const width = measureText(metrics.text, metrics.fontFamily, size, metrics.bold, metrics.italic);
|
|
10
|
+
const outline = metrics.stroke * 2;
|
|
11
|
+
return ((!Number.isFinite(metrics.width) || width + outline <= metrics.width) &&
|
|
12
|
+
(!Number.isFinite(metrics.height) || size + outline <= metrics.height));
|
|
13
|
+
};
|
|
14
|
+
if (!metrics.text || fits(metrics.size)) {
|
|
15
|
+
return { size: metrics.size, overflow: false };
|
|
16
|
+
}
|
|
17
|
+
const minimum = Math.min(metrics.minimum, metrics.size);
|
|
18
|
+
if (!fits(minimum)) {
|
|
19
|
+
return { size: minimum, overflow: true };
|
|
20
|
+
}
|
|
21
|
+
let lower = minimum;
|
|
22
|
+
let upper = metrics.size;
|
|
23
|
+
// Bounded work even for unusual author-supplied font sizes. Keeping the
|
|
24
|
+
// fitting lower bound avoids rounding a result back into overflow.
|
|
25
|
+
for (let attempt = 0; attempt < 16 && upper - lower > 0.1; attempt++) {
|
|
26
|
+
const candidate = (lower + upper) / 2;
|
|
27
|
+
if (fits(candidate)) {
|
|
28
|
+
lower = candidate;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
upper = candidate;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return { size: Math.max(minimum, Math.floor(lower * 10) / 10), overflow: false };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=fit-label-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fit-label-text.js","sourceRoot":"","sources":["../../../src/kurot/text/fit-label-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAmB1C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,OAAyB;IACrD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAW,EAAE;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAChG,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,OAAO,CACN,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;YACrE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CACtE,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,GAAG,OAAO,CAAC;IACpB,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IACzB,wEAAwE;IACxE,mEAAmE;IACnE,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,IAAI,KAAK,GAAG,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;QACtE,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,SAAS,CAAC;QACnB,CAAC;aAAM,CAAC;YACP,KAAK,GAAG,SAAS,CAAC;QACnB,CAAC;IACF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAClF,CAAC"}
|