@kurot/ui 3.0.0 → 3.2.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 +78 -6
- package/README.md +154 -69
- package/dist/kurot/components/BitmapLabel.d.ts +46 -0
- package/dist/kurot/components/BitmapLabel.d.ts.map +1 -0
- package/dist/kurot/components/BitmapLabel.js +180 -0
- package/dist/kurot/components/BitmapLabel.js.map +1 -0
- 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 +2 -1
- package/dist/kurot/components/index.d.ts.map +1 -1
- package/dist/kurot/components/index.js +1 -0
- 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 +224 -0
- package/docs/architecture.md +467 -0
- package/docs/bitmap-label.md +41 -0
- package/docs/label-text-layout.md +99 -0
- package/package.json +5 -4
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { BitmapFont, BitmapText, Event, IOErrorEvent, resource } from '@kurot/core';
|
|
2
|
+
import { Component } from './Component.js';
|
|
3
|
+
import { PropertyEvent } from '../events/PropertyEvent.js';
|
|
4
|
+
/**
|
|
5
|
+
* UI layout wrapper around BitmapText. String fonts are configured resource
|
|
6
|
+
* names; FontAnalyzer loads the descriptor and its page. Font ownership stays
|
|
7
|
+
* with the resource cache or the caller that supplied a BitmapFont.
|
|
8
|
+
*/
|
|
9
|
+
export class BitmapLabel extends Component {
|
|
10
|
+
// ── Instance fields ──────────────────────────────────────────────────────
|
|
11
|
+
_bitmapText = new BitmapText();
|
|
12
|
+
_font;
|
|
13
|
+
_fontChanged = false;
|
|
14
|
+
_fontRequest = 0;
|
|
15
|
+
_widthConstraint = NaN;
|
|
16
|
+
// ── Constructor ──────────────────────────────────────────────────────────
|
|
17
|
+
constructor(text = '') {
|
|
18
|
+
super();
|
|
19
|
+
this.touchChildren = false;
|
|
20
|
+
this.text = text;
|
|
21
|
+
}
|
|
22
|
+
// ── Getters / Setters ─────────────────────────────────────────────────────
|
|
23
|
+
get text() {
|
|
24
|
+
return this._bitmapText.text;
|
|
25
|
+
}
|
|
26
|
+
set text(value) {
|
|
27
|
+
if (this.text === value)
|
|
28
|
+
return;
|
|
29
|
+
this._bitmapText.text = value;
|
|
30
|
+
PropertyEvent.dispatchPropertyEvent(this, 'text');
|
|
31
|
+
this._invalidateText();
|
|
32
|
+
}
|
|
33
|
+
get font() {
|
|
34
|
+
return this._font;
|
|
35
|
+
}
|
|
36
|
+
set font(value) {
|
|
37
|
+
if (this._font === value)
|
|
38
|
+
return;
|
|
39
|
+
this._font = value;
|
|
40
|
+
this._fontRequest++;
|
|
41
|
+
this._fontChanged = typeof value === 'string';
|
|
42
|
+
this._bitmapText.font = value instanceof BitmapFont ? value : undefined;
|
|
43
|
+
this.invalidateProperties();
|
|
44
|
+
this._invalidateText();
|
|
45
|
+
}
|
|
46
|
+
get textAlign() {
|
|
47
|
+
return this._bitmapText.textAlign;
|
|
48
|
+
}
|
|
49
|
+
set textAlign(value) {
|
|
50
|
+
if (this.textAlign === value)
|
|
51
|
+
return;
|
|
52
|
+
this._bitmapText.textAlign = value;
|
|
53
|
+
this.invalidateDisplayList();
|
|
54
|
+
}
|
|
55
|
+
get verticalAlign() {
|
|
56
|
+
return this._bitmapText.verticalAlign;
|
|
57
|
+
}
|
|
58
|
+
set verticalAlign(value) {
|
|
59
|
+
if (this.verticalAlign === value)
|
|
60
|
+
return;
|
|
61
|
+
this._bitmapText.verticalAlign = value;
|
|
62
|
+
this.invalidateDisplayList();
|
|
63
|
+
}
|
|
64
|
+
get letterSpacing() {
|
|
65
|
+
return this._bitmapText.letterSpacing;
|
|
66
|
+
}
|
|
67
|
+
set letterSpacing(value) {
|
|
68
|
+
if (this.letterSpacing === value)
|
|
69
|
+
return;
|
|
70
|
+
this._bitmapText.letterSpacing = value;
|
|
71
|
+
this._invalidateText();
|
|
72
|
+
}
|
|
73
|
+
get lineSpacing() {
|
|
74
|
+
return this._bitmapText.lineSpacing;
|
|
75
|
+
}
|
|
76
|
+
set lineSpacing(value) {
|
|
77
|
+
if (this.lineSpacing === value)
|
|
78
|
+
return;
|
|
79
|
+
this._bitmapText.lineSpacing = value;
|
|
80
|
+
this._invalidateText();
|
|
81
|
+
}
|
|
82
|
+
get multiline() {
|
|
83
|
+
return this._bitmapText.multiline;
|
|
84
|
+
}
|
|
85
|
+
set multiline(value) {
|
|
86
|
+
if (this.multiline === value)
|
|
87
|
+
return;
|
|
88
|
+
this._bitmapText.multiline = value;
|
|
89
|
+
this._invalidateText();
|
|
90
|
+
}
|
|
91
|
+
get smoothing() {
|
|
92
|
+
return this._bitmapText.smoothing;
|
|
93
|
+
}
|
|
94
|
+
set smoothing(value) {
|
|
95
|
+
if (this.smoothing === value)
|
|
96
|
+
return;
|
|
97
|
+
this._bitmapText.smoothing = value;
|
|
98
|
+
this.invalidateDisplayList();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Content metrics under the label's width constraint, before height clipping.
|
|
102
|
+
*/
|
|
103
|
+
get textWidth() {
|
|
104
|
+
return this._measureText().width;
|
|
105
|
+
}
|
|
106
|
+
get textHeight() {
|
|
107
|
+
return this._measureText().height;
|
|
108
|
+
}
|
|
109
|
+
// ── Override methods ─────────────────────────────────────────────────────
|
|
110
|
+
createChildren() {
|
|
111
|
+
super.createChildren();
|
|
112
|
+
this.addChild(this._bitmapText);
|
|
113
|
+
}
|
|
114
|
+
commitProperties() {
|
|
115
|
+
super.commitProperties();
|
|
116
|
+
if (!this._fontChanged)
|
|
117
|
+
return;
|
|
118
|
+
this._fontChanged = false;
|
|
119
|
+
this._resolveFont();
|
|
120
|
+
}
|
|
121
|
+
measure() {
|
|
122
|
+
const measured = this._measureText();
|
|
123
|
+
this.setMeasuredSize(measured.width, measured.height);
|
|
124
|
+
}
|
|
125
|
+
setLayoutBoundsSize(layoutWidth, layoutHeight) {
|
|
126
|
+
super.setLayoutBoundsSize(layoutWidth, layoutHeight);
|
|
127
|
+
const width = Number.isFinite(layoutWidth) ? this.width : NaN;
|
|
128
|
+
if (Object.is(this._widthConstraint, width))
|
|
129
|
+
return;
|
|
130
|
+
this._widthConstraint = width;
|
|
131
|
+
this._invalidateText();
|
|
132
|
+
}
|
|
133
|
+
updateDisplayList(unscaledWidth, unscaledHeight) {
|
|
134
|
+
super.updateDisplayList(unscaledWidth, unscaledHeight);
|
|
135
|
+
this._bitmapText.width = unscaledWidth;
|
|
136
|
+
this._bitmapText.height = unscaledHeight;
|
|
137
|
+
}
|
|
138
|
+
// ── Private methods ──────────────────────────────────────────────────────
|
|
139
|
+
_invalidateText() {
|
|
140
|
+
this.invalidateSize();
|
|
141
|
+
this.invalidateDisplayList();
|
|
142
|
+
}
|
|
143
|
+
_measureText() {
|
|
144
|
+
const width = Number.isFinite(this._widthConstraint) ? this._widthConstraint : this.$explicitWidth;
|
|
145
|
+
const layout = this._bitmapText.measureText(width);
|
|
146
|
+
return { width: layout.width, height: layout.height };
|
|
147
|
+
}
|
|
148
|
+
_resolveFont() {
|
|
149
|
+
const name = this._font;
|
|
150
|
+
if (typeof name !== 'string')
|
|
151
|
+
return;
|
|
152
|
+
const request = this._fontRequest;
|
|
153
|
+
const apply = (font) => {
|
|
154
|
+
if (request !== this._fontRequest)
|
|
155
|
+
return;
|
|
156
|
+
if (!(font instanceof BitmapFont))
|
|
157
|
+
throw new TypeError(`Resource ${name} is not a bitmap font.`);
|
|
158
|
+
this._bitmapText.font = font;
|
|
159
|
+
this._invalidateText();
|
|
160
|
+
this.dispatchEventWith(Event.COMPLETE);
|
|
161
|
+
};
|
|
162
|
+
const cached = resource.get(name);
|
|
163
|
+
const report = (error) => {
|
|
164
|
+
if (request !== this._fontRequest)
|
|
165
|
+
return;
|
|
166
|
+
this.dispatchEventWith(IOErrorEvent.IO_ERROR, false, { source: name, error });
|
|
167
|
+
};
|
|
168
|
+
if (cached !== undefined) {
|
|
169
|
+
try {
|
|
170
|
+
apply(cached);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
report(error);
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
void resource.load(name).then(apply).catch(report);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=BitmapLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BitmapLabel.js","sourceRoot":"","sources":["../../../src/kurot/components/BitmapLabel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Component } from './Component.js';
|
|
2
2
|
import { TextField } from '@kurot/core';
|
|
3
3
|
import type { IDisplayText } from '../core/IDisplayText.js';
|
|
4
|
+
/**
|
|
5
|
+
* Optional single-line font fitting policy.
|
|
6
|
+
*/
|
|
7
|
+
export type TextFitMode = 'none' | 'shrink';
|
|
4
8
|
/**
|
|
5
9
|
* Label component for displaying text.
|
|
6
10
|
* Wraps a TextField and integrates it with the UI component lifecycle.
|
|
@@ -10,6 +14,12 @@ import type { IDisplayText } from '../core/IDisplayText.js';
|
|
|
10
14
|
export declare class Label extends Component implements IDisplayText {
|
|
11
15
|
protected _textField: TextField;
|
|
12
16
|
private _widthConstraint;
|
|
17
|
+
private _layoutHeight;
|
|
18
|
+
private _baseSize;
|
|
19
|
+
private _textFit;
|
|
20
|
+
private _minFontSize;
|
|
21
|
+
private _textFitOverflow;
|
|
22
|
+
private _fitKey?;
|
|
13
23
|
constructor(text?: string);
|
|
14
24
|
get text(): string;
|
|
15
25
|
set text(value: string);
|
|
@@ -17,6 +27,27 @@ export declare class Label extends Component implements IDisplayText {
|
|
|
17
27
|
set fontFamily(value: string);
|
|
18
28
|
get size(): number;
|
|
19
29
|
set size(value: number);
|
|
30
|
+
/**
|
|
31
|
+
* Shrink applies only to noneditable, single-line text with finite bounds.
|
|
32
|
+
* Multiline text retains the authored size; editable text rejects shrink.
|
|
33
|
+
*/
|
|
34
|
+
get textFit(): TextFitMode;
|
|
35
|
+
set textFit(value: TextFitMode);
|
|
36
|
+
/**
|
|
37
|
+
* Readable lower limit in logical pixels; must be finite and at least one.
|
|
38
|
+
* A limit above size does not enlarge the text.
|
|
39
|
+
*/
|
|
40
|
+
get minFontSize(): number;
|
|
41
|
+
set minFontSize(value: number);
|
|
42
|
+
/**
|
|
43
|
+
* Derived drawing size after layout validation; size remains the authored value.
|
|
44
|
+
*/
|
|
45
|
+
get renderedSize(): number;
|
|
46
|
+
/**
|
|
47
|
+
* True after validation when enabled fitting cannot fit even at minFontSize.
|
|
48
|
+
* Text is then clipped normally; the project decides how to handle overflow.
|
|
49
|
+
*/
|
|
50
|
+
get textFitOverflow(): boolean;
|
|
20
51
|
get bold(): boolean;
|
|
21
52
|
set bold(value: boolean);
|
|
22
53
|
get italic(): boolean;
|
|
@@ -31,8 +62,15 @@ export declare class Label extends Component implements IDisplayText {
|
|
|
31
62
|
set textAlign(value: string);
|
|
32
63
|
get verticalAlign(): string;
|
|
33
64
|
set verticalAlign(value: string);
|
|
65
|
+
/**
|
|
66
|
+
* Defaults to true. False renders only the first hard-separated line,
|
|
67
|
+
* without automatic wrapping, regardless of the label height.
|
|
68
|
+
*/
|
|
34
69
|
get multiline(): boolean;
|
|
35
70
|
set multiline(value: boolean);
|
|
71
|
+
/**
|
|
72
|
+
* In multiline mode, true uses Unicode word boundaries; false wraps by character.
|
|
73
|
+
*/
|
|
36
74
|
get wordWrap(): boolean;
|
|
37
75
|
set wordWrap(value: boolean);
|
|
38
76
|
get lineSpacing(): number;
|
|
@@ -41,9 +79,11 @@ export declare class Label extends Component implements IDisplayText {
|
|
|
41
79
|
set maxChars(value: number);
|
|
42
80
|
get displayAsPassword(): boolean;
|
|
43
81
|
set displayAsPassword(value: boolean);
|
|
82
|
+
invalidateSize(): void;
|
|
44
83
|
createChildren(): void;
|
|
45
84
|
measure(): void;
|
|
46
85
|
setLayoutBoundsSize(layoutWidth: number, layoutHeight: number): void;
|
|
47
86
|
updateDisplayList(unscaledWidth: number, unscaledHeight: number): void;
|
|
87
|
+
private _applyTextFit;
|
|
48
88
|
}
|
|
49
89
|
//# sourceMappingURL=Label.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/Label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/Label.ts"],"names":[],"mappings":"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"}
|
|
@@ -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';
|
|
@@ -31,4 +31,5 @@ export { UILayer } from './UILayer.js';
|
|
|
31
31
|
export { EditableText } from './EditableText.js';
|
|
32
32
|
export { TextInput } from './TextInput.js';
|
|
33
33
|
export { ComboBox } from './ComboBox.js';
|
|
34
|
+
export { BitmapLabel } from './BitmapLabel.js';
|
|
34
35
|
//# sourceMappingURL=index.d.ts.map
|