uicore-ts 1.1.88 → 1.1.102
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/compiledScripts/UICore.js +3 -0
- package/compiledScripts/UICore.js.map +2 -2
- package/compiledScripts/UIRectangle.d.ts +4 -0
- package/compiledScripts/UIRectangle.js +19 -4
- package/compiledScripts/UIRectangle.js.map +2 -2
- package/compiledScripts/UITableView.d.ts +34 -0
- package/compiledScripts/UITableView.js +214 -25
- package/compiledScripts/UITableView.js.map +3 -3
- package/compiledScripts/UITextView.d.ts +49 -39
- package/compiledScripts/UITextView.js +137 -126
- package/compiledScripts/UITextView.js.map +2 -2
- package/compiledScripts/UIView.d.ts +40 -2
- package/compiledScripts/UIView.js +242 -89
- package/compiledScripts/UIView.js.map +2 -2
- package/package.json +1 -1
- package/scripts/UICore.ts +5 -0
- package/scripts/UIRectangle.ts +35 -5
- package/scripts/UITableView.ts +330 -93
- package/scripts/UITextView.ts +273 -358
- package/scripts/UIView.ts +361 -90
|
@@ -29,12 +29,19 @@ var import_UIView = require("./UIView");
|
|
|
29
29
|
const _UITextView = class extends import_UIView.UIView {
|
|
30
30
|
constructor(elementID, textViewType = _UITextView.type.paragraph, viewHTMLElement = null) {
|
|
31
31
|
super(elementID, viewHTMLElement, textViewType);
|
|
32
|
-
this._textColor = _UITextView.defaultTextColor;
|
|
33
|
-
this._isSingleLine = import_UIObject.YES;
|
|
34
32
|
this.textPrefix = "";
|
|
35
33
|
this.textSuffix = "";
|
|
36
34
|
this._notificationAmount = 0;
|
|
35
|
+
this._textColor = _UITextView.defaultTextColor;
|
|
36
|
+
this._isSingleLine = import_UIObject.YES;
|
|
37
37
|
this._automaticFontSizeSelection = import_UIObject.NO;
|
|
38
|
+
this._fontInvalidationTriggers = {
|
|
39
|
+
fontSize: this.style.fontSize || "",
|
|
40
|
+
fontFamily: this.style.fontFamily || "",
|
|
41
|
+
fontWeight: this.style.fontWeight || "",
|
|
42
|
+
fontStyle: this.style.fontStyle || "",
|
|
43
|
+
styleClasses: this.styleClasses.join(",")
|
|
44
|
+
};
|
|
38
45
|
this.changesOften = import_UIObject.NO;
|
|
39
46
|
this._intrinsicHeightCache = new import_UIObject.UIObject();
|
|
40
47
|
this._intrinsicWidthCache = new import_UIObject.UIObject();
|
|
@@ -53,16 +60,84 @@ const _UITextView = class extends import_UIView.UIView {
|
|
|
53
60
|
);
|
|
54
61
|
}
|
|
55
62
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
didReceiveBroadcastEvent(event) {
|
|
64
|
+
super.didReceiveBroadcastEvent(event);
|
|
65
|
+
}
|
|
66
|
+
willMoveToSuperview(superview) {
|
|
67
|
+
super.willMoveToSuperview(superview);
|
|
68
|
+
}
|
|
69
|
+
layoutSubviews() {
|
|
70
|
+
super.layoutSubviews();
|
|
71
|
+
if (this._automaticFontSizeSelection) {
|
|
72
|
+
this.fontSize = _UITextView.automaticallyCalculatedFontSize(
|
|
73
|
+
new import_UIRectangle.UIRectangle(0, 0, 1 * this.viewHTMLElement.offsetHeight, 1 * this.viewHTMLElement.offsetWidth),
|
|
74
|
+
this.intrinsicContentSize(),
|
|
75
|
+
this.fontSize,
|
|
76
|
+
this._minFontSize,
|
|
77
|
+
this._maxFontSize
|
|
78
|
+
);
|
|
59
79
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
80
|
+
}
|
|
81
|
+
_invalidateMeasurementStyles() {
|
|
82
|
+
this._cachedMeasurementStyles = void 0;
|
|
83
|
+
import_UITextMeasurement.UITextMeasurement.invalidateElement(this.viewHTMLElement);
|
|
84
|
+
this._intrinsicSizesCache = {};
|
|
85
|
+
}
|
|
86
|
+
_getMeasurementStyles() {
|
|
87
|
+
if (this._cachedMeasurementStyles) {
|
|
88
|
+
return this._cachedMeasurementStyles;
|
|
89
|
+
}
|
|
90
|
+
const computed = window.getComputedStyle(this.viewHTMLElement);
|
|
91
|
+
const fontSize = parseFloat(computed.fontSize);
|
|
92
|
+
this._cachedMeasurementStyles = {
|
|
93
|
+
font: [
|
|
94
|
+
computed.fontStyle,
|
|
95
|
+
computed.fontVariant,
|
|
96
|
+
computed.fontWeight,
|
|
97
|
+
computed.fontSize,
|
|
98
|
+
computed.fontFamily
|
|
99
|
+
].join(" "),
|
|
100
|
+
fontSize,
|
|
101
|
+
lineHeight: this._parseLineHeight(computed.lineHeight, fontSize),
|
|
102
|
+
whiteSpace: computed.whiteSpace,
|
|
103
|
+
paddingLeft: parseFloat(computed.paddingLeft) || 0,
|
|
104
|
+
paddingRight: parseFloat(computed.paddingRight) || 0,
|
|
105
|
+
paddingTop: parseFloat(computed.paddingTop) || 0,
|
|
106
|
+
paddingBottom: parseFloat(computed.paddingBottom) || 0
|
|
107
|
+
};
|
|
108
|
+
return this._cachedMeasurementStyles;
|
|
109
|
+
}
|
|
110
|
+
_parseLineHeight(lineHeight, fontSize) {
|
|
111
|
+
if (lineHeight === "normal") {
|
|
112
|
+
return fontSize * 1.2;
|
|
113
|
+
}
|
|
114
|
+
if (lineHeight.endsWith("px")) {
|
|
115
|
+
return parseFloat(lineHeight);
|
|
116
|
+
}
|
|
117
|
+
const numericLineHeight = parseFloat(lineHeight);
|
|
118
|
+
if (!isNaN(numericLineHeight)) {
|
|
119
|
+
return fontSize * numericLineHeight;
|
|
120
|
+
}
|
|
121
|
+
return fontSize * 1.2;
|
|
122
|
+
}
|
|
123
|
+
_shouldUseFastMeasurement() {
|
|
124
|
+
const content = this.text || this.innerHTML;
|
|
125
|
+
if (this._innerHTMLKey || this._localizedTextObject) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (this.notificationAmount > 0) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
const hasComplexHTML = /<(?!\/?(b|i|em|strong|span|br)\b)[^>]+>/i.test(content);
|
|
132
|
+
return !hasComplexHTML;
|
|
133
|
+
}
|
|
134
|
+
setUseFastMeasurement(useFast) {
|
|
135
|
+
this._useFastMeasurement = useFast;
|
|
136
|
+
this._intrinsicSizesCache = {};
|
|
137
|
+
}
|
|
138
|
+
invalidateMeasurementStrategy() {
|
|
139
|
+
this._useFastMeasurement = void 0;
|
|
140
|
+
this._invalidateMeasurementStyles();
|
|
66
141
|
}
|
|
67
142
|
get textAlignment() {
|
|
68
143
|
return this.style.textAlign;
|
|
@@ -126,6 +201,7 @@ const _UITextView = class extends import_UIView.UIView {
|
|
|
126
201
|
this._intrinsicSizesCache = {};
|
|
127
202
|
this.invalidateMeasurementStrategy();
|
|
128
203
|
this._invalidateMeasurementStyles();
|
|
204
|
+
this.clearIntrinsicSizeCache();
|
|
129
205
|
this.setNeedsLayout();
|
|
130
206
|
}
|
|
131
207
|
set innerHTML(innerHTML) {
|
|
@@ -149,7 +225,9 @@ const _UITextView = class extends import_UIView.UIView {
|
|
|
149
225
|
this.style.fontSize = "" + fontSize + "pt";
|
|
150
226
|
this._intrinsicHeightCache = new import_UIObject.UIObject();
|
|
151
227
|
this._intrinsicWidthCache = new import_UIObject.UIObject();
|
|
228
|
+
this._invalidateFontCache();
|
|
152
229
|
this._invalidateMeasurementStyles();
|
|
230
|
+
this.clearIntrinsicSizeCache();
|
|
153
231
|
}
|
|
154
232
|
}
|
|
155
233
|
useAutomaticFontSize(minFontSize = import_UIObject.nil, maxFontSize = import_UIObject.nil) {
|
|
@@ -158,6 +236,42 @@ const _UITextView = class extends import_UIView.UIView {
|
|
|
158
236
|
this._maxFontSize = maxFontSize;
|
|
159
237
|
this.setNeedsLayout();
|
|
160
238
|
}
|
|
239
|
+
_getFontCacheKey() {
|
|
240
|
+
const currentTriggers = {
|
|
241
|
+
fontSize: this.style.fontSize || "",
|
|
242
|
+
fontFamily: this.style.fontFamily || "",
|
|
243
|
+
fontWeight: this.style.fontWeight || "",
|
|
244
|
+
fontStyle: this.style.fontStyle || "",
|
|
245
|
+
styleClasses: this.styleClasses.join(",")
|
|
246
|
+
};
|
|
247
|
+
const hasChanged = currentTriggers.fontSize !== this._fontInvalidationTriggers.fontSize || currentTriggers.fontFamily !== this._fontInvalidationTriggers.fontFamily || currentTriggers.fontWeight !== this._fontInvalidationTriggers.fontWeight || currentTriggers.fontStyle !== this._fontInvalidationTriggers.fontStyle || currentTriggers.styleClasses !== this._fontInvalidationTriggers.styleClasses;
|
|
248
|
+
if (!this._cachedFontKey || hasChanged) {
|
|
249
|
+
const computed = this.computedStyle;
|
|
250
|
+
this._cachedFontKey = [
|
|
251
|
+
computed.fontStyle,
|
|
252
|
+
computed.fontVariant,
|
|
253
|
+
computed.fontWeight,
|
|
254
|
+
computed.fontSize,
|
|
255
|
+
computed.fontFamily
|
|
256
|
+
].join("_").replace(/[.\s]/g, "_");
|
|
257
|
+
this._fontInvalidationTriggers = currentTriggers;
|
|
258
|
+
}
|
|
259
|
+
return this._cachedFontKey;
|
|
260
|
+
}
|
|
261
|
+
_invalidateFontCache() {
|
|
262
|
+
this._cachedFontKey = void 0;
|
|
263
|
+
}
|
|
264
|
+
static _determinePXAndPTRatios() {
|
|
265
|
+
if (_UITextView._ptToPx) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const o = document.createElement("div");
|
|
269
|
+
o.style.width = "1000pt";
|
|
270
|
+
document.body.appendChild(o);
|
|
271
|
+
_UITextView._ptToPx = o.clientWidth / 1e3;
|
|
272
|
+
document.body.removeChild(o);
|
|
273
|
+
_UITextView._pxToPt = 1 / _UITextView._ptToPx;
|
|
274
|
+
}
|
|
161
275
|
static automaticallyCalculatedFontSize(bounds, currentSize, currentFontSize, minFontSize, maxFontSize) {
|
|
162
276
|
minFontSize = (0, import_UIObject.FIRST)(minFontSize, 1);
|
|
163
277
|
maxFontSize = (0, import_UIObject.FIRST)(maxFontSize, 1e11);
|
|
@@ -176,29 +290,8 @@ const _UITextView = class extends import_UIView.UIView {
|
|
|
176
290
|
}
|
|
177
291
|
return maxFittingFontSize;
|
|
178
292
|
}
|
|
179
|
-
didReceiveBroadcastEvent(event) {
|
|
180
|
-
super.didReceiveBroadcastEvent(event);
|
|
181
|
-
}
|
|
182
|
-
willMoveToSuperview(superview) {
|
|
183
|
-
super.willMoveToSuperview(superview);
|
|
184
|
-
}
|
|
185
|
-
layoutSubviews() {
|
|
186
|
-
super.layoutSubviews();
|
|
187
|
-
if (this._automaticFontSizeSelection) {
|
|
188
|
-
this.fontSize = _UITextView.automaticallyCalculatedFontSize(
|
|
189
|
-
new import_UIRectangle.UIRectangle(0, 0, 1 * this.viewHTMLElement.offsetHeight, 1 * this.viewHTMLElement.offsetWidth),
|
|
190
|
-
this.intrinsicContentSize(),
|
|
191
|
-
this.fontSize,
|
|
192
|
-
this._minFontSize,
|
|
193
|
-
this._maxFontSize
|
|
194
|
-
);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
293
|
intrinsicContentHeight(constrainingWidth = 0) {
|
|
198
|
-
const keyPath =
|
|
199
|
-
"\\.",
|
|
200
|
-
"g"
|
|
201
|
-
), "_") + "." + ("" + constrainingWidth).replace(new RegExp("\\.", "g"), "_");
|
|
294
|
+
const keyPath = this.viewHTMLElement.innerHTML + "_csf_" + this._getFontCacheKey() + "." + ("" + constrainingWidth).replace(new RegExp("\\.", "g"), "_");
|
|
202
295
|
let cacheObject = _UITextView._intrinsicHeightCache;
|
|
203
296
|
if (this.changesOften) {
|
|
204
297
|
cacheObject = this._intrinsicHeightCache;
|
|
@@ -208,13 +301,14 @@ const _UITextView = class extends import_UIView.UIView {
|
|
|
208
301
|
result = super.intrinsicContentHeight(constrainingWidth);
|
|
209
302
|
cacheObject.setValueForKeyPath(keyPath, result);
|
|
210
303
|
}
|
|
304
|
+
if (isNaN(result) || !result && !this.text) {
|
|
305
|
+
result = super.intrinsicContentHeight(constrainingWidth);
|
|
306
|
+
cacheObject.setValueForKeyPath(keyPath, result);
|
|
307
|
+
}
|
|
211
308
|
return result;
|
|
212
309
|
}
|
|
213
310
|
intrinsicContentWidth(constrainingHeight = 0) {
|
|
214
|
-
const keyPath =
|
|
215
|
-
"\\.",
|
|
216
|
-
"g"
|
|
217
|
-
), "_") + "." + ("" + constrainingHeight).replace(new RegExp("\\.", "g"), "_");
|
|
311
|
+
const keyPath = this.viewHTMLElement.innerHTML + "_csf_" + this._getFontCacheKey() + "." + ("" + constrainingHeight).replace(new RegExp("\\.", "g"), "_");
|
|
218
312
|
let cacheObject = _UITextView._intrinsicWidthCache;
|
|
219
313
|
if (this.changesOften) {
|
|
220
314
|
cacheObject = this._intrinsicWidthCache;
|
|
@@ -226,95 +320,13 @@ const _UITextView = class extends import_UIView.UIView {
|
|
|
226
320
|
}
|
|
227
321
|
return result;
|
|
228
322
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
this._intrinsicSizesCache = {};
|
|
323
|
+
addStyleClass(styleClass) {
|
|
324
|
+
super.addStyleClass(styleClass);
|
|
325
|
+
this._invalidateFontCache();
|
|
233
326
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
238
|
-
const computed = window.getComputedStyle(this.viewHTMLElement);
|
|
239
|
-
const fontSize = parseFloat(computed.fontSize);
|
|
240
|
-
this._cachedMeasurementStyles = {
|
|
241
|
-
font: [
|
|
242
|
-
computed.fontStyle,
|
|
243
|
-
computed.fontVariant,
|
|
244
|
-
computed.fontWeight,
|
|
245
|
-
computed.fontSize,
|
|
246
|
-
computed.fontFamily
|
|
247
|
-
].join(" "),
|
|
248
|
-
fontSize,
|
|
249
|
-
lineHeight: this._parseLineHeight(computed.lineHeight, fontSize),
|
|
250
|
-
whiteSpace: computed.whiteSpace,
|
|
251
|
-
paddingLeft: parseFloat(computed.paddingLeft) || 0,
|
|
252
|
-
paddingRight: parseFloat(computed.paddingRight) || 0,
|
|
253
|
-
paddingTop: parseFloat(computed.paddingTop) || 0,
|
|
254
|
-
paddingBottom: parseFloat(computed.paddingBottom) || 0
|
|
255
|
-
};
|
|
256
|
-
return this._cachedMeasurementStyles;
|
|
257
|
-
}
|
|
258
|
-
_parseLineHeight(lineHeight, fontSize) {
|
|
259
|
-
if (lineHeight === "normal") {
|
|
260
|
-
return fontSize * 1.2;
|
|
261
|
-
}
|
|
262
|
-
if (lineHeight.endsWith("px")) {
|
|
263
|
-
return parseFloat(lineHeight);
|
|
264
|
-
}
|
|
265
|
-
const numericLineHeight = parseFloat(lineHeight);
|
|
266
|
-
if (!isNaN(numericLineHeight)) {
|
|
267
|
-
return fontSize * numericLineHeight;
|
|
268
|
-
}
|
|
269
|
-
return fontSize * 1.2;
|
|
270
|
-
}
|
|
271
|
-
intrinsicContentSizeWithConstraints(constrainingHeight = 0, constrainingWidth = 0) {
|
|
272
|
-
var _a;
|
|
273
|
-
const cacheKey = "h_" + constrainingHeight + "__w_" + constrainingWidth;
|
|
274
|
-
const cachedResult = this._intrinsicSizesCache[cacheKey];
|
|
275
|
-
if (cachedResult) {
|
|
276
|
-
return cachedResult;
|
|
277
|
-
}
|
|
278
|
-
const shouldUseFastPath = (_a = this._useFastMeasurement) != null ? _a : this._shouldUseFastMeasurement();
|
|
279
|
-
let result;
|
|
280
|
-
if (shouldUseFastPath) {
|
|
281
|
-
const styles = this._getMeasurementStyles();
|
|
282
|
-
const size = import_UITextMeasurement.UITextMeasurement.calculateTextSize(
|
|
283
|
-
this.viewHTMLElement,
|
|
284
|
-
this.text || this.innerHTML,
|
|
285
|
-
constrainingWidth || void 0,
|
|
286
|
-
constrainingHeight || void 0,
|
|
287
|
-
styles
|
|
288
|
-
);
|
|
289
|
-
result = new import_UIRectangle.UIRectangle(0, 0, size.height, size.width);
|
|
290
|
-
} else {
|
|
291
|
-
result = super.intrinsicContentSizeWithConstraints(constrainingHeight, constrainingWidth);
|
|
292
|
-
}
|
|
293
|
-
this._intrinsicSizesCache[cacheKey] = result.copy();
|
|
294
|
-
return result;
|
|
295
|
-
}
|
|
296
|
-
_shouldUseFastMeasurement() {
|
|
297
|
-
const content = this.text || this.innerHTML;
|
|
298
|
-
if (this._innerHTMLKey || this._localizedTextObject) {
|
|
299
|
-
return false;
|
|
300
|
-
}
|
|
301
|
-
if (this.notificationAmount > 0) {
|
|
302
|
-
return false;
|
|
303
|
-
}
|
|
304
|
-
const hasComplexHTML = /<(?!\/?(b|i|em|strong|span|br)\b)[^>]+>/i.test(content);
|
|
305
|
-
return !hasComplexHTML;
|
|
306
|
-
}
|
|
307
|
-
setUseFastMeasurement(useFast) {
|
|
308
|
-
this._useFastMeasurement = useFast;
|
|
309
|
-
this._intrinsicSizesCache = {};
|
|
310
|
-
}
|
|
311
|
-
invalidateMeasurementStrategy() {
|
|
312
|
-
this._useFastMeasurement = void 0;
|
|
313
|
-
this._invalidateMeasurementStyles();
|
|
314
|
-
}
|
|
315
|
-
intrinsicContentSize() {
|
|
316
|
-
const result = this.intrinsicContentSizeWithConstraints(import_UIObject.nil, import_UIObject.nil);
|
|
317
|
-
return result;
|
|
327
|
+
removeStyleClass(styleClass) {
|
|
328
|
+
super.removeStyleClass(styleClass);
|
|
329
|
+
this._invalidateFontCache();
|
|
318
330
|
}
|
|
319
331
|
};
|
|
320
332
|
let UITextView = _UITextView;
|
|
@@ -341,7 +353,6 @@ UITextView.textAlignment = {
|
|
|
341
353
|
"right": "right",
|
|
342
354
|
"justify": "justify"
|
|
343
355
|
};
|
|
344
|
-
UITextView._determinePXAndPTRatios();
|
|
345
356
|
// Annotate the CommonJS export names for ESM import in node:
|
|
346
357
|
0 && (module.exports = {
|
|
347
358
|
UITextView
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UITextView.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { FIRST, IS, IS_LIKE_NULL, nil, NO, UIObject, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport type { ValueOf } from \"./UIObject\"\nimport { TextMeasurementStyle, UITextMeasurement } from \"./UITextMeasurement\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextView extends UIView {\n \n \n _textColor: UIColor = UITextView.defaultTextColor\n _textAlignment?: ValueOf<typeof UITextView.textAlignment>\n \n _isSingleLine = YES\n \n textPrefix = \"\"\n textSuffix = \"\"\n \n _notificationAmount = 0\n \n _minFontSize?: number\n _maxFontSize?: number\n \n _automaticFontSizeSelection = NO\n \n changesOften = NO\n \n static defaultTextColor = UIColor.blackColor\n static notificationTextColor = UIColor.redColor\n \n static _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n static _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n \n static _ptToPx: number\n static _pxToPt: number\n _text?: string\n \n private _useFastMeasurement: boolean | undefined;\n private _cachedMeasurementStyles: TextMeasurementStyle | undefined;\n \n override usesVirtualLayoutingForIntrinsicSizing = NO\n \n \n constructor(\n elementID?: string,\n textViewType: string | ValueOf<typeof UITextView.type> = UITextView.type.paragraph,\n viewHTMLElement = null\n ) {\n \n super(elementID, viewHTMLElement, textViewType)\n \n this.text = \"\"\n \n this.style.overflow = \"hidden\"\n this.style.textOverflow = \"ellipsis\"\n this.isSingleLine = YES\n \n this.textColor = this.textColor\n \n this.userInteractionEnabled = YES\n \n \n if (textViewType == UITextView.type.textArea) {\n \n this.pausesPointerEvents = YES\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n \n \n }\n \n \n }\n \n \n static _determinePXAndPTRatios() {\n \n if (UITextView._ptToPx) {\n return\n }\n \n const o = document.createElement(\"div\")\n o.style.width = \"1000pt\"\n document.body.appendChild(o)\n UITextView._ptToPx = o.clientWidth / 1000\n document.body.removeChild(o)\n UITextView._pxToPt = 1 / UITextView._ptToPx\n \n }\n \n \n static type = {\n \n \"paragraph\": \"p\",\n \"header1\": \"h1\",\n \"header2\": \"h2\",\n \"header3\": \"h3\",\n \"header4\": \"h4\",\n \"header5\": \"h5\",\n \"header6\": \"h6\",\n \"textArea\": \"textarea\",\n \"textField\": \"input\",\n \"span\": \"span\",\n \"label\": \"label\"\n \n } as const\n \n \n static textAlignment = {\n \n \"left\": \"left\",\n \"center\": \"center\",\n \"right\": \"right\",\n \"justify\": \"justify\"\n \n } as const\n \n get textAlignment() {\n // @ts-ignore\n return this.style.textAlign\n }\n \n set textAlignment(textAlignment: ValueOf<typeof UITextView.textAlignment>) {\n this._textAlignment = textAlignment\n this.style.textAlign = textAlignment\n }\n \n \n get textColor() {\n return this._textColor\n }\n \n set textColor(color: UIColor) {\n \n this._textColor = color || UITextView.defaultTextColor\n this.style.color = this._textColor.stringValue\n \n }\n \n \n get isSingleLine() {\n \n return this._isSingleLine\n \n }\n \n set isSingleLine(isSingleLine: boolean) {\n \n this._isSingleLine = isSingleLine\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n if (isSingleLine) {\n \n this.style.whiteSpace = \"pre\"\n \n return\n \n }\n \n this.style.whiteSpace = \"pre-wrap\"\n \n this.invalidateMeasurementStrategy()\n \n }\n \n \n get notificationAmount() {\n \n return this._notificationAmount\n \n }\n \n set notificationAmount(notificationAmount: number) {\n \n if (this._notificationAmount == notificationAmount) {\n \n return\n \n }\n \n this._notificationAmount = notificationAmount\n \n this.text = this.text\n \n this.setNeedsLayoutUpToRootView()\n \n this.notificationAmountDidChange(notificationAmount)\n \n }\n \n notificationAmountDidChange(notificationAmount: number) {\n \n \n }\n \n \n get text() {\n \n return (this._text || this.viewHTMLElement.innerHTML)\n \n }\n \n set text(text) {\n this._text = text\n var notificationText = \"\"\n if (this.notificationAmount) {\n notificationText = \"<span style=\\\"color: \" + UITextView.notificationTextColor.stringValue + \";\\\">\" +\n (\" (\" + this.notificationAmount + \")\").bold() + \"</span>\"\n }\n \n if (this.viewHTMLElement.innerHTML != this.textPrefix + text + this.textSuffix + notificationText) {\n this.viewHTMLElement.innerHTML = this.textPrefix + FIRST(text, \"\") + this.textSuffix + notificationText\n }\n \n if (this.changesOften) {\n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n }\n // Invalidate measurement strategy when text changes significantly\n this._useFastMeasurement = undefined;\n this._intrinsicSizesCache = {};\n this.invalidateMeasurementStrategy()\n this._invalidateMeasurementStyles()\n \n this.setNeedsLayout()\n \n }\n \n override set innerHTML(innerHTML: string) {\n \n this.text = innerHTML\n this.invalidateMeasurementStrategy()\n \n }\n \n override get innerHTML() {\n \n return this.viewHTMLElement.innerHTML\n \n }\n \n \n setText(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this.setInnerHTML(key, defaultString, parameters)\n this.invalidateMeasurementStrategy()\n \n }\n \n \n get fontSize() {\n \n const style = this.style.fontSize || window.getComputedStyle(this.viewHTMLElement, null).fontSize\n \n const result = (parseFloat(style) * UITextView._pxToPt)\n \n return result\n \n }\n \n set fontSize(fontSize: number) {\n \n if (fontSize != this.fontSize) {\n \n this.style.fontSize = \"\" + fontSize + \"pt\"\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any // MEETOD LUUA!!!!\n \n this._invalidateMeasurementStyles() // Invalidate when font changes\n \n }\n \n }\n \n \n \n useAutomaticFontSize(minFontSize: number = nil, maxFontSize: number = nil) {\n \n this._automaticFontSizeSelection = YES\n \n this._minFontSize = minFontSize\n this._maxFontSize = maxFontSize\n \n this.setNeedsLayout()\n \n }\n \n \n static automaticallyCalculatedFontSize(\n bounds: UIRectangle,\n currentSize: UIRectangle,\n currentFontSize: number,\n minFontSize?: number,\n maxFontSize?: number\n ) {\n \n minFontSize = FIRST(minFontSize, 1)\n maxFontSize = FIRST(maxFontSize, 100000000000)\n \n const heightMultiplier = bounds.height / (currentSize.height + 1)\n const widthMultiplier = bounds.width / (currentSize.width + 1)\n \n var multiplier = heightMultiplier\n if (heightMultiplier > widthMultiplier) {\n multiplier = widthMultiplier\n }\n \n const maxFittingFontSize = currentFontSize * multiplier\n \n if (maxFittingFontSize > maxFontSize) {\n return maxFontSize\n }\n \n if (minFontSize > maxFittingFontSize) {\n return minFontSize\n }\n \n return maxFittingFontSize\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n if (this._automaticFontSizeSelection) {\n \n this.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(0, 0, 1 *\n this.viewHTMLElement.offsetHeight, 1 *\n this.viewHTMLElement.offsetWidth),\n this.intrinsicContentSize(),\n this.fontSize,\n this._minFontSize,\n this._maxFontSize\n )\n \n \n }\n \n \n }\n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingWidth).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicHeightCache\n \n if (this.changesOften) {\n \n // @ts-ignore\n cacheObject = this._intrinsicHeightCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentHeight(constrainingWidth)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n override intrinsicContentWidth(constrainingHeight = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingHeight).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicWidthCache\n \n if (this.changesOften) {\n \n // @ts-ignore\n cacheObject = this._intrinsicWidthCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentWidth(constrainingHeight)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n \n // Call this when styles change (fontSize, padding, etc.)\n private _invalidateMeasurementStyles(): void {\n this._cachedMeasurementStyles = undefined;\n UITextMeasurement.invalidateElement(this.viewHTMLElement);\n this._intrinsicSizesCache = {};\n }\n \n // Extract styles ONCE and cache them (avoids getComputedStyle)\n private _getMeasurementStyles(): TextMeasurementStyle {\n if (this._cachedMeasurementStyles) {\n return this._cachedMeasurementStyles;\n }\n \n // Only call getComputedStyle once and cache the result\n const computed = window.getComputedStyle(this.viewHTMLElement);\n const fontSize = parseFloat(computed.fontSize);\n \n this._cachedMeasurementStyles = {\n font: [\n computed.fontStyle,\n computed.fontVariant,\n computed.fontWeight,\n computed.fontSize,\n computed.fontFamily\n ].join(' '),\n fontSize: fontSize,\n lineHeight: this._parseLineHeight(computed.lineHeight, fontSize),\n whiteSpace: computed.whiteSpace,\n paddingLeft: parseFloat(computed.paddingLeft) || 0,\n paddingRight: parseFloat(computed.paddingRight) || 0,\n paddingTop: parseFloat(computed.paddingTop) || 0,\n paddingBottom: parseFloat(computed.paddingBottom) || 0\n };\n \n return this._cachedMeasurementStyles;\n }\n \n private _parseLineHeight(lineHeight: string, fontSize: number): number {\n if (lineHeight === 'normal') {\n return fontSize * 1.2;\n }\n if (lineHeight.endsWith('px')) {\n return parseFloat(lineHeight);\n }\n const numericLineHeight = parseFloat(lineHeight);\n if (!isNaN(numericLineHeight)) {\n return fontSize * numericLineHeight;\n }\n return fontSize * 1.2;\n }\n \n // Override the intrinsic size method\n override intrinsicContentSizeWithConstraints(\n constrainingHeight: number = 0,\n constrainingWidth: number = 0\n ): UIRectangle {\n const cacheKey = \"h_\" + constrainingHeight + \"__w_\" + constrainingWidth;\n const cachedResult = this._intrinsicSizesCache[cacheKey];\n if (cachedResult) {\n return cachedResult;\n }\n \n // Determine measurement strategy\n const shouldUseFastPath = this._useFastMeasurement ?? this._shouldUseFastMeasurement();\n \n let result: UIRectangle;\n \n if (shouldUseFastPath) {\n // Fast path: canvas-based measurement with pre-extracted styles\n const styles = this._getMeasurementStyles();\n const size = UITextMeasurement.calculateTextSize(\n this.viewHTMLElement,\n this.text || this.innerHTML,\n constrainingWidth || undefined,\n constrainingHeight || undefined,\n styles // Pass pre-computed styles to avoid getComputedStyle!\n );\n result = new UIRectangle(0, 0, size.height, size.width);\n } else {\n // Fallback: original DOM-based measurement for complex content\n result = super.intrinsicContentSizeWithConstraints(constrainingHeight, constrainingWidth);\n }\n \n this._intrinsicSizesCache[cacheKey] = result.copy();\n return result;\n }\n \n // Helper to determine if we can use fast measurement\n private _shouldUseFastMeasurement(): boolean {\n const content = this.text || this.innerHTML;\n \n // If using dynamic innerHTML with parameters, use DOM measurement\n if (this._innerHTMLKey || this._localizedTextObject) {\n return false;\n }\n \n // Check for notification badges\n if (this.notificationAmount > 0) {\n return false; // Has span with colored text\n }\n \n // Check content complexity\n const hasComplexHTML = /<(?!\\/?(b|i|em|strong|span|br)\\b)[^>]+>/i.test(content);\n \n return !hasComplexHTML;\n }\n \n // Optional: Allow manual override for specific instances\n setUseFastMeasurement(useFast: boolean): void {\n this._useFastMeasurement = useFast;\n this._intrinsicSizesCache = {};\n }\n \n // Optional: Force re-evaluation of measurement strategy\n invalidateMeasurementStrategy(): void {\n this._useFastMeasurement = undefined;\n this._invalidateMeasurementStyles();\n }\n \n \n \n \n \n override intrinsicContentSize() {\n \n // This works but is slow\n const result = this.intrinsicContentSizeWithConstraints(nil, nil)\n \n return result\n \n }\n \n \n}\n\n\nUITextView._determinePXAndPTRatios()\n\n\n// /**\n// * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n// * \n// * @param {String} text The text to be rendered.\n// * @param {String} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n// * \n// * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n// */\n// function getTextMetrics(text, font) {\n// // re-use canvas object for better performance\n// var canvas = getTextMetrics.canvas || (getTextMetrics.canvas = document.createElement(\"canvas\"));\n// var context = canvas.getContext(\"2d\");\n// context.font = font;\n// var metrics = context.measureText(text);\n// return metrics;\n// }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AAExB,
|
|
4
|
+
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { FIRST, IS_LIKE_NULL, nil, NO, UIObject, ValueOf, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { TextMeasurementStyle, UITextMeasurement } from \"./UITextMeasurement\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextView extends UIView {\n \n //#region Static Properties\n \n static defaultTextColor = UIColor.blackColor\n static notificationTextColor = UIColor.redColor\n \n // Global caches for all UILabels\n static _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n static _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n static _ptToPx: number\n static _pxToPt: number\n \n static type = {\n \"paragraph\": \"p\",\n \"header1\": \"h1\",\n \"header2\": \"h2\",\n \"header3\": \"h3\",\n \"header4\": \"h4\",\n \"header5\": \"h5\",\n \"header6\": \"h6\",\n \"textArea\": \"textarea\",\n \"textField\": \"input\",\n \"span\": \"span\",\n \"label\": \"label\"\n } as const\n \n static textAlignment = {\n \"left\": \"left\",\n \"center\": \"center\",\n \"right\": \"right\",\n \"justify\": \"justify\"\n } as const\n \n //#endregion\n \n //#region Constructor\n \n constructor(\n elementID?: string,\n textViewType: string | ValueOf<typeof UITextView.type> = UITextView.type.paragraph,\n viewHTMLElement = null\n ) {\n \n super(elementID, viewHTMLElement, textViewType)\n \n this.text = \"\"\n \n this.style.overflow = \"hidden\"\n this.style.textOverflow = \"ellipsis\"\n this.isSingleLine = YES\n \n this.textColor = this.textColor\n \n this.userInteractionEnabled = YES\n \n if (textViewType == UITextView.type.textArea) {\n this.pausesPointerEvents = YES\n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n }\n }\n \n //#endregion\n \n //#region Lifecycle Methods\n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n super.didReceiveBroadcastEvent(event)\n }\n \n override willMoveToSuperview(superview: UIView) {\n super.willMoveToSuperview(superview)\n }\n \n override layoutSubviews() {\n super.layoutSubviews()\n \n if (this._automaticFontSizeSelection) {\n this.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(0, 0, 1 *\n this.viewHTMLElement.offsetHeight, 1 *\n this.viewHTMLElement.offsetWidth),\n this.intrinsicContentSize(),\n this.fontSize,\n this._minFontSize,\n this._maxFontSize\n )\n }\n }\n \n //#endregion\n \n //#region Measurement & Sizing - Private Methods\n \n private _invalidateMeasurementStyles(): void {\n this._cachedMeasurementStyles = undefined\n UITextMeasurement.invalidateElement(this.viewHTMLElement)\n this._intrinsicSizesCache = {}\n }\n \n private _getMeasurementStyles(): TextMeasurementStyle {\n if (this._cachedMeasurementStyles) {\n return this._cachedMeasurementStyles\n }\n \n const computed = window.getComputedStyle(this.viewHTMLElement)\n const fontSize = parseFloat(computed.fontSize)\n \n this._cachedMeasurementStyles = {\n font: [\n computed.fontStyle,\n computed.fontVariant,\n computed.fontWeight,\n computed.fontSize,\n computed.fontFamily\n ].join(\" \"),\n fontSize: fontSize,\n lineHeight: this._parseLineHeight(computed.lineHeight, fontSize),\n whiteSpace: computed.whiteSpace,\n paddingLeft: parseFloat(computed.paddingLeft) || 0,\n paddingRight: parseFloat(computed.paddingRight) || 0,\n paddingTop: parseFloat(computed.paddingTop) || 0,\n paddingBottom: parseFloat(computed.paddingBottom) || 0\n }\n \n return this._cachedMeasurementStyles\n }\n \n private _parseLineHeight(lineHeight: string, fontSize: number): number {\n if (lineHeight === \"normal\") {\n return fontSize * 1.2\n }\n if (lineHeight.endsWith(\"px\")) {\n return parseFloat(lineHeight)\n }\n const numericLineHeight = parseFloat(lineHeight)\n if (!isNaN(numericLineHeight)) {\n return fontSize * numericLineHeight\n }\n return fontSize * 1.2\n }\n \n private _shouldUseFastMeasurement(): boolean {\n const content = this.text || this.innerHTML\n \n if (this._innerHTMLKey || this._localizedTextObject) {\n return false\n }\n \n if (this.notificationAmount > 0) {\n return false\n }\n \n const hasComplexHTML = /<(?!\\/?(b|i|em|strong|span|br)\\b)[^>]+>/i.test(content)\n \n return !hasComplexHTML\n }\n \n //#endregion\n \n //#region Measurement & Sizing - Public Methods\n \n setUseFastMeasurement(useFast: boolean): void {\n this._useFastMeasurement = useFast\n this._intrinsicSizesCache = {}\n }\n \n invalidateMeasurementStrategy(): void {\n this._useFastMeasurement = undefined\n this._invalidateMeasurementStyles()\n }\n \n //#endregion\n \n //#region Getters & Setters - Text Alignment\n \n get textAlignment() {\n // @ts-ignore\n return this.style.textAlign\n }\n \n set textAlignment(textAlignment: ValueOf<typeof UITextView.textAlignment>) {\n this._textAlignment = textAlignment\n this.style.textAlign = textAlignment\n }\n \n //#endregion\n \n //#region Getters & Setters - Text Color\n \n get textColor() {\n return this._textColor\n }\n \n set textColor(color: UIColor) {\n this._textColor = color || UITextView.defaultTextColor\n this.style.color = this._textColor.stringValue\n }\n \n //#endregion\n \n //#region Getters & Setters - Single Line\n \n get isSingleLine() {\n return this._isSingleLine\n }\n \n set isSingleLine(isSingleLine: boolean) {\n this._isSingleLine = isSingleLine\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n if (isSingleLine) {\n this.style.whiteSpace = \"pre\"\n return\n }\n \n this.style.whiteSpace = \"pre-wrap\"\n this.invalidateMeasurementStrategy()\n }\n \n //#endregion\n \n //#region Getters & Setters - Notification Amount\n \n get notificationAmount() {\n return this._notificationAmount\n }\n \n set notificationAmount(notificationAmount: number) {\n if (this._notificationAmount == notificationAmount) {\n return\n }\n \n this._notificationAmount = notificationAmount\n this.text = this.text\n this.setNeedsLayoutUpToRootView()\n this.notificationAmountDidChange(notificationAmount)\n }\n \n notificationAmountDidChange(notificationAmount: number) {\n }\n \n //#endregion\n \n //#region Getters & Setters - Text Content\n \n get text() {\n return (this._text || this.viewHTMLElement.innerHTML)\n }\n \n set text(text) {\n this._text = text\n var notificationText = \"\"\n if (this.notificationAmount) {\n notificationText = \"<span style=\\\"color: \" + UITextView.notificationTextColor.stringValue + \";\\\">\" +\n (\" (\" + this.notificationAmount + \")\").bold() + \"</span>\"\n }\n \n if (this.viewHTMLElement.innerHTML != this.textPrefix + text + this.textSuffix + notificationText) {\n this.viewHTMLElement.innerHTML = this.textPrefix + FIRST(text, \"\") + this.textSuffix + notificationText\n }\n \n if (this.changesOften) {\n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n }\n \n this._useFastMeasurement = undefined\n this._intrinsicSizesCache = {}\n this.invalidateMeasurementStrategy()\n this._invalidateMeasurementStyles()\n this.clearIntrinsicSizeCache()\n \n this.setNeedsLayout()\n }\n \n override set innerHTML(innerHTML: string) {\n this.text = innerHTML\n this.invalidateMeasurementStrategy()\n }\n \n override get innerHTML() {\n return this.viewHTMLElement.innerHTML\n }\n \n setText(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n this.setInnerHTML(key, defaultString, parameters)\n this.invalidateMeasurementStrategy()\n }\n \n //#endregion\n \n //#region Getters & Setters - Font Size\n \n get fontSize() {\n const style = this.style.fontSize || window.getComputedStyle(this.viewHTMLElement, null).fontSize\n const result = (parseFloat(style) * UITextView._pxToPt)\n return result\n }\n \n set fontSize(fontSize: number) {\n if (fontSize != this.fontSize) {\n this.style.fontSize = \"\" + fontSize + \"pt\"\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n this._invalidateFontCache()\n this._invalidateMeasurementStyles()\n this.clearIntrinsicSizeCache()\n }\n }\n \n useAutomaticFontSize(minFontSize: number = nil, maxFontSize: number = nil) {\n this._automaticFontSizeSelection = YES\n this._minFontSize = minFontSize\n this._maxFontSize = maxFontSize\n this.setNeedsLayout()\n }\n \n //#endregion\n \n //#region Font Caching - Private Methods\n \n /**\n * Get a stable cache key for the font without triggering reflow.\n * Only computes font on first access or when font properties change.\n */\n private _getFontCacheKey(): string {\n // Check if font-related properties have changed\n const currentTriggers = {\n fontSize: this.style.fontSize || \"\",\n fontFamily: this.style.fontFamily || \"\",\n fontWeight: this.style.fontWeight || \"\",\n fontStyle: this.style.fontStyle || \"\",\n styleClasses: this.styleClasses.join(\",\")\n }\n \n const hasChanged =\n currentTriggers.fontSize !== this._fontInvalidationTriggers.fontSize ||\n currentTriggers.fontFamily !== this._fontInvalidationTriggers.fontFamily ||\n currentTriggers.fontWeight !== this._fontInvalidationTriggers.fontWeight ||\n currentTriggers.fontStyle !== this._fontInvalidationTriggers.fontStyle ||\n currentTriggers.styleClasses !== this._fontInvalidationTriggers.styleClasses\n \n if (!this._cachedFontKey || hasChanged) {\n // Only access computedStyle when we know something changed\n const computed = this.computedStyle\n this._cachedFontKey = [\n computed.fontStyle,\n computed.fontVariant,\n computed.fontWeight,\n computed.fontSize,\n computed.fontFamily\n ].join(\"_\").replace(/[.\\s]/g, \"_\")\n \n this._fontInvalidationTriggers = currentTriggers\n }\n \n return this._cachedFontKey\n }\n \n /**\n * Invalidate font cache when font properties change\n */\n private _invalidateFontCache(): void {\n this._cachedFontKey = undefined\n }\n \n //#endregion\n \n //#region Static Methods\n \n static _determinePXAndPTRatios() {\n if (UITextView._ptToPx) {\n return\n }\n \n const o = document.createElement(\"div\")\n o.style.width = \"1000pt\"\n document.body.appendChild(o)\n UITextView._ptToPx = o.clientWidth / 1000\n document.body.removeChild(o)\n UITextView._pxToPt = 1 / UITextView._ptToPx\n }\n \n static automaticallyCalculatedFontSize(\n bounds: UIRectangle,\n currentSize: UIRectangle,\n currentFontSize: number,\n minFontSize?: number,\n maxFontSize?: number\n ) {\n minFontSize = FIRST(minFontSize, 1)\n maxFontSize = FIRST(maxFontSize, 100000000000)\n \n const heightMultiplier = bounds.height / (currentSize.height + 1)\n const widthMultiplier = bounds.width / (currentSize.width + 1)\n \n var multiplier = heightMultiplier\n if (heightMultiplier > widthMultiplier) {\n multiplier = widthMultiplier\n }\n \n const maxFittingFontSize = currentFontSize * multiplier\n \n if (maxFittingFontSize > maxFontSize) {\n return maxFontSize\n }\n \n if (minFontSize > maxFittingFontSize) {\n return minFontSize\n }\n \n return maxFittingFontSize\n }\n \n //#endregion\n \n //#region Instance Properties - Text Content\n \n _text?: string\n textPrefix = \"\"\n textSuffix = \"\"\n _notificationAmount = 0\n \n //#endregion\n \n //#region Instance Properties - Styling\n \n _textColor: UIColor = UITextView.defaultTextColor\n _textAlignment?: ValueOf<typeof UITextView.textAlignment>\n _isSingleLine = YES\n \n //#endregion\n \n //#region Instance Properties - Font & Sizing\n \n _minFontSize?: number\n _maxFontSize?: number\n _automaticFontSizeSelection = NO\n \n // Cache for the computed font string\n private _cachedFontKey?: string\n private _fontInvalidationTriggers = {\n fontSize: this.style.fontSize || \"\",\n fontFamily: this.style.fontFamily || \"\",\n fontWeight: this.style.fontWeight || \"\",\n fontStyle: this.style.fontStyle || \"\",\n styleClasses: this.styleClasses.join(\",\")\n }\n \n //#endregion\n \n //#region Instance Properties - Caching & Performance\n \n changesOften = NO\n \n // Local cache for this instance if the label changes often\n _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n private _useFastMeasurement: boolean | undefined\n private _cachedMeasurementStyles: TextMeasurementStyle | undefined\n \n override usesVirtualLayoutingForIntrinsicSizing = NO\n \n //#endregion\n \n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this._getFontCacheKey()) + \".\" +\n (\"\" + constrainingWidth).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicHeightCache\n \n if (this.changesOften) {\n cacheObject = this._intrinsicHeightCache\n }\n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n if (IS_LIKE_NULL(result)) {\n result = super.intrinsicContentHeight(constrainingWidth)\n cacheObject.setValueForKeyPath(keyPath, result)\n }\n \n if (isNaN(result) || (!result && !this.text)) {\n result = super.intrinsicContentHeight(constrainingWidth)\n cacheObject.setValueForKeyPath(keyPath, result)\n }\n \n return result\n }\n \n override intrinsicContentWidth(constrainingHeight = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this._getFontCacheKey()) + \".\" +\n (\"\" + constrainingHeight).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicWidthCache\n \n if (this.changesOften) {\n cacheObject = this._intrinsicWidthCache\n }\n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n if (IS_LIKE_NULL(result)) {\n result = super.intrinsicContentWidth(constrainingHeight)\n cacheObject.setValueForKeyPath(keyPath, result)\n }\n \n return result\n }\n \n \n // Override addStyleClass to invalidate font cache\n override addStyleClass(styleClass: string) {\n super.addStyleClass(styleClass)\n this._invalidateFontCache()\n }\n \n // Override removeStyleClass to invalidate font cache\n override removeStyleClass(styleClass: string) {\n super.removeStyleClass(styleClass)\n this._invalidateFontCache()\n }\n \n \n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -84,6 +84,7 @@ export declare class UIView extends UIObject {
|
|
|
84
84
|
_frame?: UIRectangle & {
|
|
85
85
|
zIndex?: number;
|
|
86
86
|
};
|
|
87
|
+
_frameCache?: UIRectangle;
|
|
87
88
|
_backgroundColor: UIColor;
|
|
88
89
|
_viewHTMLElement: HTMLElement & LooseObject;
|
|
89
90
|
_innerHTMLKey?: string;
|
|
@@ -137,13 +138,42 @@ export declare class UIView extends UIObject {
|
|
|
137
138
|
static _onWindowMouseup: (event: MouseEvent) => void;
|
|
138
139
|
private _resizeObserverEntry?;
|
|
139
140
|
protected _intrinsicSizesCache: Record<string, UIRectangle>;
|
|
140
|
-
static
|
|
141
|
+
private static _virtualLayoutingDepth;
|
|
142
|
+
static get isVirtualLayouting(): boolean;
|
|
143
|
+
get isVirtualLayouting(): boolean;
|
|
144
|
+
startVirtualLayout(): void;
|
|
145
|
+
finishVirtualLayout(): void;
|
|
141
146
|
_frameForVirtualLayouting?: UIRectangle;
|
|
142
147
|
usesVirtualLayoutingForIntrinsicSizing: boolean;
|
|
148
|
+
_contentInsets: {
|
|
149
|
+
top: number;
|
|
150
|
+
left: number;
|
|
151
|
+
bottom: number;
|
|
152
|
+
right: number;
|
|
153
|
+
};
|
|
143
154
|
constructor(elementID?: string, viewHTMLElement?: HTMLElement & LooseObject | null, elementType?: string | null, initViewData?: any);
|
|
144
155
|
static get nextIndex(): number;
|
|
145
|
-
static
|
|
156
|
+
private static _cachedPageWidth;
|
|
157
|
+
private static _cachedPageHeight;
|
|
158
|
+
private static _pageDimensionsCacheValid;
|
|
159
|
+
private static _resizeObserverInitialized;
|
|
160
|
+
/**
|
|
161
|
+
* Initialize resize observer to invalidate cache when page dimensions change.
|
|
162
|
+
* This is called lazily on first access.
|
|
163
|
+
*/
|
|
164
|
+
private static _initializePageDimensionsCacheIfNeeded;
|
|
165
|
+
/**
|
|
166
|
+
* Compute and cache page dimensions.
|
|
167
|
+
* Only triggers reflow when cache is invalid.
|
|
168
|
+
*/
|
|
169
|
+
private static _updatePageDimensionsCacheIfNeeded;
|
|
146
170
|
static get pageWidth(): number;
|
|
171
|
+
static get pageHeight(): number;
|
|
172
|
+
/**
|
|
173
|
+
* Manually invalidate the page dimensions cache.
|
|
174
|
+
* Useful if you know dimensions changed and want to force a recalculation.
|
|
175
|
+
*/
|
|
176
|
+
static invalidatePageDimensionsCache(): void;
|
|
147
177
|
centerInContainer(): void;
|
|
148
178
|
centerXInContainer(): void;
|
|
149
179
|
centerYInContainer(): void;
|
|
@@ -392,7 +422,15 @@ export declare class UIView extends UIObject {
|
|
|
392
422
|
forEachViewInSubtree(functionToCall: (view: UIView) => void): void;
|
|
393
423
|
rectangleInView(rectangle: UIRectangle, view: UIView, forceIfNotInViewTree?: boolean): any;
|
|
394
424
|
rectangleFromView(rectangle: UIRectangle, view: UIView): any;
|
|
425
|
+
get contentBounds(): UIRectangle;
|
|
426
|
+
contentBoundsWithInset(inset: number): UIRectangle;
|
|
427
|
+
contentBoundsWithInsets(left: number, right: number, bottom: number, top: number): UIRectangle;
|
|
428
|
+
private _getIntrinsicSizeCacheKey;
|
|
429
|
+
private _getCachedIntrinsicSize;
|
|
430
|
+
private _setCachedIntrinsicSize;
|
|
431
|
+
clearIntrinsicSizeCache(): void;
|
|
395
432
|
intrinsicContentSizeWithConstraints(constrainingHeight?: number, constrainingWidth?: number): UIRectangle;
|
|
433
|
+
private _intrinsicFrameFromSubviewFrames;
|
|
396
434
|
intrinsicContentWidth(constrainingHeight?: number): number;
|
|
397
435
|
intrinsicContentHeight(constrainingWidth?: number): number;
|
|
398
436
|
intrinsicContentSize(): UIRectangle;
|