@flighthq/text 0.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.
@@ -0,0 +1,528 @@
1
+ import { createDisplayObjectGeneric, createDisplayObjectRuntime, getDisplayObjectRuntime, } from '@flighthq/displayobject';
2
+ import { invalidateNodeLocalBounds, invalidateNodeLocalContent } from '@flighthq/node';
3
+ import { createSignal } from '@flighthq/signals';
4
+ import { computeRichTextBottomScrollV, computeRichTextCharIndexAtPoint, computeRichTextContent, computeRichTextLineCount, computeRichTextLineMetrics, computeRichTextMaxScrollH, computeRichTextMaxScrollV, computeRichTextTextHeight, computeRichTextTextWidth, computeTextBoundsRectangle, getRichTextContent, getRichTextLinkAtPoint, mergeTextFormat, } from '@flighthq/textlayout';
5
+ import { RichTextKind } from '@flighthq/types';
6
+ import { createTextLabelData } from './textLabel';
7
+ import { ensureTextLayout, getTextLayout } from './textLabelLayout';
8
+ export function appendRichTextString(source, value) {
9
+ if (value.length === 0)
10
+ return;
11
+ const previousText = source.data.text;
12
+ source.data.text += value;
13
+ invalidateRichTextContent(source);
14
+ emitTextFieldChange(source, previousText);
15
+ }
16
+ // Per-kind layout-params hook for ensureTextLayout: assembles RichText's multi-format/html content
17
+ // (cached on the runtime) plus the wrap/multiline constraints. Password masking, when the editable-input
18
+ // slot enables it, is applied by computeRichTextContent via getRichTextPasswordCharacter.
19
+ export function buildRichTextLayoutParams(source, measure) {
20
+ const richText = source;
21
+ const data = richText.data;
22
+ const runtime = getDisplayObjectRuntime(richText);
23
+ const content = getRichTextContent(runtime);
24
+ computeRichTextContent(content, data, getRichTextPasswordCharacter(richText));
25
+ return {
26
+ formatRanges: content.formatRanges,
27
+ height: data.height,
28
+ measure,
29
+ multiline: data.multiline,
30
+ text: content.text,
31
+ width: data.wordWrap ? data.width : 10000,
32
+ wordWrap: data.wordWrap,
33
+ };
34
+ }
35
+ export function clearRichTextFormatRanges(source) {
36
+ source.data.textFormatRanges.length = 0;
37
+ invalidateRichTextContent(source);
38
+ }
39
+ // The field-box bounds in local space. A fixed field (autoSize 'none') is exactly the user width/
40
+ // height at the origin. Under autoSize, the box is the measured field size (textWidth/textHeight +
41
+ // gutter), positioned by the left/right/center anchor relative to the original width — so 'right'
42
+ // grows leftward and 'center' splits the difference. The layout is ensured on demand here, which is
43
+ // what lets autoSize bounds be queried before the text is ever rendered. Before any measure provider
44
+ // is registered the layout is unavailable, so it falls back to the fixed field box.
45
+ export function computeRichTextLocalBoundsRectangle(out, source) {
46
+ const richText = source;
47
+ const data = richText.data;
48
+ if (data.autoSize === 'none') {
49
+ out.x = 0;
50
+ out.y = 0;
51
+ out.width = data.width;
52
+ out.height = data.height;
53
+ return;
54
+ }
55
+ ensureTextLayout(richText);
56
+ const layout = getTextLayout(richText);
57
+ if (layout === null) {
58
+ out.x = 0;
59
+ out.y = 0;
60
+ out.width = data.width;
61
+ out.height = data.height;
62
+ return;
63
+ }
64
+ computeTextBoundsRectangle(out, data, layout);
65
+ }
66
+ export function createRichText(obj) {
67
+ return createDisplayObjectGeneric(RichTextKind, obj, createRichTextData, createRichTextRuntime);
68
+ }
69
+ export function createRichTextData(data) {
70
+ const _data = createTextLabelData(data);
71
+ _data.background = data?.background ?? false;
72
+ _data.backgroundColor = data?.backgroundColor ?? 0xffffff;
73
+ _data.border = data?.border ?? false;
74
+ _data.borderColor = data?.borderColor ?? 0;
75
+ _data.height = data?.height ?? 100;
76
+ _data.width = data?.width ?? 100;
77
+ _data.condenseWhite = data?.condenseWhite ?? false;
78
+ _data.defaultTextFormat = data?.defaultTextFormat ?? {};
79
+ _data.htmlText = data?.htmlText ?? '';
80
+ _data.maxChars = data?.maxChars ?? -1;
81
+ _data.mouseWheelEnabled = data?.mouseWheelEnabled ?? true;
82
+ _data.multiline = data?.multiline ?? true;
83
+ _data.scrollH = data?.scrollH ?? 0;
84
+ _data.scrollV = data?.scrollV ?? 1;
85
+ _data.selectable = data?.selectable ?? true;
86
+ _data.styleSheet = data?.styleSheet ?? null;
87
+ _data.textColor = data?.textColor ?? 0;
88
+ _data.textFormatRanges = data?.textFormatRanges ? data.textFormatRanges.map((range) => ({ ...range })) : [];
89
+ _data.wordWrap = data?.wordWrap ?? false;
90
+ return _data;
91
+ }
92
+ export function createRichTextRuntime() {
93
+ const out = createDisplayObjectRuntime(defaultMethods);
94
+ // buildTextLayoutParams is a text-specific per-kind seam, not a display-object trait, so no
95
+ // trait-init copies it off defaultMethods — assign it onto the runtime directly.
96
+ out.buildTextLayoutParams = buildRichTextLayoutParams;
97
+ out.textLayout = null;
98
+ out.textLayoutUsingContentId = -1;
99
+ out.richTextContent = null;
100
+ out.selectionBeginIndex = 0;
101
+ out.selectionEndIndex = 0;
102
+ // null until enableTextInput(node) opts this field into editing (docs/text-architecture-handoff.md,
103
+ // Track A). A static RichText leaves it null and pulls no input code.
104
+ out.input = null;
105
+ // null until enableTextFieldSignals(source) is called; setters emit only when non-null.
106
+ out.textFieldSignals = null;
107
+ return out;
108
+ }
109
+ export function createTextFieldSignals() {
110
+ return {
111
+ onTextFieldChange: createSignal(),
112
+ onTextFieldLink: createSignal(),
113
+ onTextFieldScroll: createSignal(),
114
+ };
115
+ }
116
+ // Checks whether the given point (in field-local space) is over a hyperlink, and if so emits
117
+ // `onTextFieldLink` on the signals group (when enabled). Returns the link URL or null.
118
+ // Callers that already have the layout can call `getRichTextLinkAtPoint` from `@flighthq/textlayout`
119
+ // directly; this is the convenience entry that also fires the signal and ensures layout first.
120
+ export function dispatchRichTextLinkAtPoint(source, x, y) {
121
+ ensureTextLayout(source);
122
+ const layout = getTextLayout(source);
123
+ if (layout === null)
124
+ return null;
125
+ const url = getRichTextLinkAtPoint(layout, x, y);
126
+ if (url !== null) {
127
+ const signals = getDisplayObjectRuntime(source).textFieldSignals;
128
+ if (signals !== null) {
129
+ const event = { url, x, y };
130
+ signals.onTextFieldLink.emit(event);
131
+ }
132
+ }
133
+ return url;
134
+ }
135
+ export function dispatchRichTextWheel(source, deltaLines, layout) {
136
+ setRichTextScrollV(source, source.data.scrollV + Math.round(deltaLines), layout);
137
+ }
138
+ export function enableTextFieldSignals(source) {
139
+ const runtime = getDisplayObjectRuntime(source);
140
+ return (runtime.textFieldSignals ??= createTextFieldSignals());
141
+ }
142
+ export function getRichTextBottomScrollV(source) {
143
+ ensureTextLayout(source);
144
+ const layout = getTextLayout(source);
145
+ if (layout === null)
146
+ return 1;
147
+ return computeRichTextBottomScrollV(source.data, layout);
148
+ }
149
+ export function getRichTextCharIndexAtPoint(source, x, y) {
150
+ ensureTextLayout(source);
151
+ const layout = getTextLayout(source);
152
+ if (layout === null)
153
+ return -1;
154
+ return computeRichTextCharIndexAtPoint(layout, x, y);
155
+ }
156
+ export function getRichTextDefaultTextFormat(source) {
157
+ return source.data.defaultTextFormat;
158
+ }
159
+ // Returns the effective merged TextFormat at the given character index: begins from
160
+ // defaultTextFormat and overlays every textFormatRange whose span covers the index.
161
+ export function getRichTextFormatRangeAt(out, source, index) {
162
+ const data = source.data;
163
+ let merged = { ...data.defaultTextFormat };
164
+ for (const range of data.textFormatRanges) {
165
+ if (index >= range.start && index < range.end) {
166
+ merged = mergeTextFormat(merged, range.format);
167
+ }
168
+ }
169
+ const keys = Object.keys(merged);
170
+ for (const key of keys) {
171
+ out[key] = merged[key];
172
+ }
173
+ }
174
+ export function getRichTextFormatRangeByIndex(out, source, i) {
175
+ const range = source.data.textFormatRanges[i];
176
+ if (range === undefined)
177
+ return false;
178
+ out.start = range.start;
179
+ out.end = range.end;
180
+ out.format = range.format;
181
+ return true;
182
+ }
183
+ export function getRichTextFormatRangeCount(source) {
184
+ return source.data.textFormatRanges.length;
185
+ }
186
+ // Writes into `out` every format range overlapping the span `[beginIndex, endIndex)` — the symmetric
187
+ // read partner of removeRichTextFormatRangesIn (same half-open overlap test). The ranges are pushed by
188
+ // reference in their stored order; `out` is cleared first. This is the OpenFL getTextFormat(begin, end)
189
+ // read half, leaving range merging (mergeTextFormat) to the caller when a single effective format is wanted.
190
+ export function getRichTextFormatRangesIn(out, source, beginIndex, endIndex) {
191
+ out.length = 0;
192
+ for (const range of source.data.textFormatRanges) {
193
+ if (range.start < endIndex && range.end > beginIndex)
194
+ out.push(range);
195
+ }
196
+ }
197
+ export function getRichTextHtml(source) {
198
+ return source.data.htmlText;
199
+ }
200
+ export function getRichTextLength(source) {
201
+ return source.data.text.length;
202
+ }
203
+ export function getRichTextLineCount(source) {
204
+ ensureTextLayout(source);
205
+ const layout = getTextLayout(source);
206
+ if (layout === null)
207
+ return 0;
208
+ return computeRichTextLineCount(layout);
209
+ }
210
+ export function getRichTextLineMetrics(source, lineIndex) {
211
+ ensureTextLayout(source);
212
+ const layout = getTextLayout(source);
213
+ if (layout === null)
214
+ return null;
215
+ return computeRichTextLineMetrics(layout, lineIndex);
216
+ }
217
+ export function getRichTextMaxScrollH(source) {
218
+ ensureTextLayout(source);
219
+ const layout = getTextLayout(source);
220
+ if (layout === null)
221
+ return 0;
222
+ return computeRichTextMaxScrollH(source.data, layout);
223
+ }
224
+ export function getRichTextMaxScrollV(source) {
225
+ ensureTextLayout(source);
226
+ const layout = getTextLayout(source);
227
+ if (layout === null)
228
+ return 1;
229
+ return computeRichTextMaxScrollV(source.data, layout);
230
+ }
231
+ // The character a field masks its text with, or null when not masking. Password state lives on the
232
+ // editable-input slot (enableTextInput), not on RichTextData, so a static RichText is never masked.
233
+ // Shared by buildRichTextLayoutParams and every RichText renderer that self-measures its content.
234
+ export function getRichTextPasswordCharacter(source) {
235
+ const input = getDisplayObjectRuntime(source).input;
236
+ return input !== null && input.displayAsPassword ? input.passwordCharacter : null;
237
+ }
238
+ export function getRichTextRuntime(source) {
239
+ return getDisplayObjectRuntime(source);
240
+ }
241
+ export function getRichTextString(source) {
242
+ return source.data.text;
243
+ }
244
+ export function getRichTextTextHeight(source) {
245
+ ensureTextLayout(source);
246
+ const layout = getTextLayout(source);
247
+ if (layout === null)
248
+ return 0;
249
+ return computeRichTextTextHeight(layout);
250
+ }
251
+ export function getRichTextTextWidth(source) {
252
+ ensureTextLayout(source);
253
+ const layout = getTextLayout(source);
254
+ if (layout === null)
255
+ return 0;
256
+ return computeRichTextTextWidth(layout);
257
+ }
258
+ export function getTextFieldSignals(source) {
259
+ return getDisplayObjectRuntime(source).textFieldSignals;
260
+ }
261
+ // Inserts `value` at the given character `index` (clamped to `[0, text.length]`), then shifts all
262
+ // format ranges that start or end at or after the insertion point forward by `value.length`. Ranges
263
+ // that start before the insertion point are extended if they cover it; all other ranges shift as a
264
+ // block. This preserves the user's formatting intent on both sides of the cut point.
265
+ export function insertRichTextString(source, index, value) {
266
+ if (value.length === 0)
267
+ return;
268
+ const text = source.data.text;
269
+ const clampedIndex = Math.max(0, Math.min(text.length, index));
270
+ const previousText = text;
271
+ source.data.text = text.slice(0, clampedIndex) + value + text.slice(clampedIndex);
272
+ const delta = value.length;
273
+ for (const range of source.data.textFormatRanges) {
274
+ if (range.start >= clampedIndex) {
275
+ range.start += delta;
276
+ range.end += delta;
277
+ }
278
+ else if (range.end > clampedIndex) {
279
+ // Range straddles the insertion point: extend its end so it continues to cover the same chars
280
+ // and also the newly-inserted text (the natural intent for a range that was "open" at the cut).
281
+ range.end += delta;
282
+ }
283
+ }
284
+ invalidateRichTextContent(source);
285
+ emitTextFieldChange(source, previousText);
286
+ }
287
+ export function removeRichTextFormatRangesIn(source, begin, end) {
288
+ const ranges = source.data.textFormatRanges;
289
+ let changed = false;
290
+ for (let i = ranges.length - 1; i >= 0; i--) {
291
+ const r = ranges[i];
292
+ // Remove ranges that overlap [begin, end) entirely or partially
293
+ if (r.start < end && r.end > begin) {
294
+ ranges.splice(i, 1);
295
+ changed = true;
296
+ }
297
+ }
298
+ if (changed)
299
+ invalidateRichTextContent(source);
300
+ }
301
+ // Replaces the substring `[beginIndex, endIndex)` with `value`. Both indices are clamped to
302
+ // `[0, text.length]`; if `beginIndex >= endIndex` after clamping, the call degenerates to an insert.
303
+ // Format ranges are re-indexed: ranges fully inside the replaced span are removed; ranges that
304
+ // straddle either boundary are trimmed to the boundary; all ranges starting at or after `endIndex`
305
+ // are shifted by the net length delta.
306
+ export function replaceRichTextString(source, beginIndex, endIndex, value) {
307
+ const text = source.data.text;
308
+ const start = Math.max(0, Math.min(text.length, beginIndex));
309
+ const end = Math.max(start, Math.min(text.length, endIndex));
310
+ const previousText = text;
311
+ source.data.text = text.slice(0, start) + value + text.slice(end);
312
+ const removedLength = end - start;
313
+ const delta = value.length - removedLength;
314
+ const ranges = source.data.textFormatRanges;
315
+ for (let i = ranges.length - 1; i >= 0; i--) {
316
+ const r = ranges[i];
317
+ if (r.start >= end) {
318
+ // Entirely after the replaced span: shift.
319
+ r.start += delta;
320
+ r.end += delta;
321
+ }
322
+ else if (r.end <= start) {
323
+ // Entirely before: no change.
324
+ }
325
+ else if (r.start >= start && r.end <= end) {
326
+ // Fully inside the replaced span: remove.
327
+ ranges.splice(i, 1);
328
+ }
329
+ else if (r.start < start && r.end > end) {
330
+ // Spans both boundaries: shrink by the net delta.
331
+ r.end += delta;
332
+ }
333
+ else if (r.start < start) {
334
+ // Left overlap: trim end to the start of the replaced region, then account for insert.
335
+ r.end = start + value.length;
336
+ }
337
+ else {
338
+ // Right overlap (r.start >= start, r.start < end, r.end > end): trim start to after insert.
339
+ r.start = start + value.length;
340
+ r.end += delta;
341
+ }
342
+ }
343
+ invalidateRichTextContent(source);
344
+ if (previousText !== source.data.text)
345
+ emitTextFieldChange(source, previousText);
346
+ }
347
+ export function setRichTextBackground(source, value) {
348
+ if (source.data.background === value)
349
+ return;
350
+ source.data.background = value;
351
+ invalidateNodeLocalContent(source);
352
+ }
353
+ export function setRichTextBackgroundColor(source, value) {
354
+ if (source.data.backgroundColor === value)
355
+ return;
356
+ source.data.backgroundColor = value;
357
+ invalidateNodeLocalContent(source);
358
+ }
359
+ export function setRichTextBorder(source, value) {
360
+ if (source.data.border === value)
361
+ return;
362
+ source.data.border = value;
363
+ invalidateNodeLocalContent(source);
364
+ }
365
+ export function setRichTextBorderColor(source, value) {
366
+ if (source.data.borderColor === value)
367
+ return;
368
+ source.data.borderColor = value;
369
+ invalidateNodeLocalContent(source);
370
+ }
371
+ export function setRichTextCondenseWhite(source, value) {
372
+ if (source.data.condenseWhite === value)
373
+ return;
374
+ source.data.condenseWhite = value;
375
+ invalidateRichTextContent(source);
376
+ }
377
+ export function setRichTextDefaultTextFormat(source, value) {
378
+ source.data.defaultTextFormat = value;
379
+ invalidateRichTextContent(source);
380
+ }
381
+ export function setRichTextFormatRange(source, format, start = 0, end = source.data.text.length) {
382
+ source.data.textFormatRanges.push({ end, format, start });
383
+ invalidateRichTextContent(source);
384
+ }
385
+ export function setRichTextHeight(source, value) {
386
+ if (source.data.height === value)
387
+ return;
388
+ source.data.height = value;
389
+ invalidateNodeLocalContent(source);
390
+ invalidateNodeLocalBounds(source);
391
+ }
392
+ export function setRichTextHtml(source, value) {
393
+ if (source.data.htmlText === value)
394
+ return;
395
+ source.data.htmlText = value;
396
+ invalidateRichTextContent(source);
397
+ }
398
+ export function setRichTextMaxChars(source, value) {
399
+ if (source.data.maxChars === value)
400
+ return;
401
+ source.data.maxChars = value;
402
+ invalidateNodeLocalContent(source);
403
+ }
404
+ export function setRichTextMouseWheelEnabled(source, value) {
405
+ if (source.data.mouseWheelEnabled === value)
406
+ return;
407
+ source.data.mouseWheelEnabled = value;
408
+ invalidateNodeLocalContent(source);
409
+ }
410
+ export function setRichTextMultiline(source, value) {
411
+ if (source.data.multiline === value)
412
+ return;
413
+ source.data.multiline = value;
414
+ invalidateRichTextContent(source);
415
+ invalidateNodeLocalBounds(source);
416
+ }
417
+ export function setRichTextScrollH(source, value, layout) {
418
+ const max = layout != null ? computeRichTextMaxScrollHFromLayout(source.data, layout) : Infinity;
419
+ const clamped = Math.max(0, Math.min(max, Math.round(value)));
420
+ if (source.data.scrollH === clamped)
421
+ return;
422
+ const previousScrollH = source.data.scrollH;
423
+ const previousScrollV = source.data.scrollV;
424
+ source.data.scrollH = clamped;
425
+ invalidateNodeLocalContent(source);
426
+ emitTextFieldScroll(source, previousScrollH, previousScrollV);
427
+ }
428
+ export function setRichTextScrollV(source, value, layout) {
429
+ const max = layout != null ? computeRichTextMaxScrollVFromLayout(source.data, layout) : Infinity;
430
+ const clamped = Math.max(1, Math.min(max, Math.round(value)));
431
+ if (source.data.scrollV === clamped)
432
+ return;
433
+ const previousScrollH = source.data.scrollH;
434
+ const previousScrollV = source.data.scrollV;
435
+ source.data.scrollV = clamped;
436
+ invalidateNodeLocalContent(source);
437
+ emitTextFieldScroll(source, previousScrollH, previousScrollV);
438
+ }
439
+ export function setRichTextSelectable(source, value) {
440
+ if (source.data.selectable === value)
441
+ return;
442
+ source.data.selectable = value;
443
+ invalidateNodeLocalContent(source);
444
+ }
445
+ export function setRichTextString(source, value) {
446
+ const previousText = source.data.text;
447
+ source.data.text = value;
448
+ invalidateRichTextContent(source);
449
+ if (previousText !== value)
450
+ emitTextFieldChange(source, previousText);
451
+ }
452
+ export function setRichTextStyleSheet(source, value) {
453
+ source.data.styleSheet = value;
454
+ invalidateRichTextContent(source);
455
+ }
456
+ export function setRichTextTextColor(source, value) {
457
+ if (source.data.textColor === value)
458
+ return;
459
+ source.data.textColor = value;
460
+ invalidateNodeLocalContent(source);
461
+ }
462
+ export function setRichTextWidth(source, value) {
463
+ if (source.data.width === value)
464
+ return;
465
+ source.data.width = value;
466
+ invalidateNodeLocalContent(source);
467
+ invalidateNodeLocalBounds(source);
468
+ }
469
+ export function setRichTextWordWrap(source, value) {
470
+ if (source.data.wordWrap === value)
471
+ return;
472
+ source.data.wordWrap = value;
473
+ invalidateRichTextContent(source);
474
+ invalidateNodeLocalBounds(source);
475
+ }
476
+ const defaultMethods = {
477
+ computeLocalBoundsRectangle: computeRichTextLocalBoundsRectangle,
478
+ };
479
+ // A content change always re-rasterizes the field. It only changes the field's bounds when autoSize
480
+ // is active; a fixed field (autoSize 'none') keeps its user-set width/height, so bounds stay put.
481
+ function invalidateRichTextContent(source) {
482
+ invalidateNodeLocalContent(source);
483
+ if (source.data.autoSize !== 'none')
484
+ invalidateNodeLocalBounds(source);
485
+ }
486
+ function computeRichTextMaxScrollHFromLayout(data, layout) {
487
+ const fieldW = data.autoSize === 'none' || data.wordWrap ? data.width : layout.textWidth + 4;
488
+ return Math.max(0, Math.ceil(layout.textWidth - Math.max(0, fieldW - 4)));
489
+ }
490
+ function computeRichTextMaxScrollVFromLayout(data, layout) {
491
+ if (layout.numLines <= 1)
492
+ return 1;
493
+ const fieldH = data.autoSize === 'none' ? data.height : layout.textHeight + 4;
494
+ const visibleH = Math.max(0, fieldH - 4);
495
+ let total = 0;
496
+ let count = 0;
497
+ for (const h of layout.lineHeights) {
498
+ if (count > 0 && total + h > visibleH)
499
+ break;
500
+ total += h;
501
+ count++;
502
+ }
503
+ return Math.max(1, layout.numLines - Math.max(1, count) + 1);
504
+ }
505
+ // Emits onTextFieldChange when the signals group is enabled. Callers must supply `previousText`
506
+ // captured before the mutation; `source.data.text` is the new text at call time.
507
+ function emitTextFieldChange(source, previousText) {
508
+ const signals = getDisplayObjectRuntime(source).textFieldSignals;
509
+ if (signals === null)
510
+ return;
511
+ const event = { previousText, text: source.data.text };
512
+ signals.onTextFieldChange.emit(event);
513
+ }
514
+ // Emits onTextFieldScroll when the signals group is enabled. Callers must supply `previousScrollH`
515
+ // and `previousScrollV` captured before the mutation.
516
+ function emitTextFieldScroll(source, previousScrollH, previousScrollV) {
517
+ const signals = getDisplayObjectRuntime(source).textFieldSignals;
518
+ if (signals === null)
519
+ return;
520
+ const event = {
521
+ previousScrollH,
522
+ previousScrollV,
523
+ scrollH: source.data.scrollH,
524
+ scrollV: source.data.scrollV,
525
+ };
526
+ signals.onTextFieldScroll.emit(event);
527
+ }
528
+ //# sourceMappingURL=richText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richText.js","sourceRoot":"","sources":["../src/richText.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { TextFormat } from '@flighthq/types';
2
+ export declare function computeTextFormatFontString(format: TextFormat): string;
3
+ //# sourceMappingURL=textFormatFont.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textFormatFont.d.ts","sourceRoot":"","sources":["../src/textFormatFont.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAMtE"}
@@ -0,0 +1,8 @@
1
+ export function computeTextFormatFontString(format) {
2
+ const style = format.italic ? 'italic' : 'normal';
3
+ const weight = format.bold ? 'bold' : 'normal';
4
+ const size = format.size ?? 12;
5
+ const family = format.font ?? 'serif';
6
+ return `${style} ${weight} ${size}px ${family}`;
7
+ }
8
+ //# sourceMappingURL=textFormatFont.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textFormatFont.js","sourceRoot":"","sources":["../src/textFormatFont.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,2BAA2B,CAAC,MAAkB;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC;IACtC,OAAO,GAAG,KAAK,IAAI,MAAM,IAAI,IAAI,MAAM,MAAM,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Node, PartialNode, Rectangle, TextAutoSize, TextFormat, TextLabel, TextLabelData, TextLabelRuntime } from '@flighthq/types';
2
+ export declare function appendTextLabelString(source: TextLabel, value: string): void;
3
+ export declare function computeTextLabelLocalBoundsRectangle(out: Rectangle, source: Readonly<Node>): void;
4
+ export declare function createTextLabel(obj?: Readonly<PartialNode<TextLabel>>): TextLabel;
5
+ export declare function createTextLabelData(data?: Readonly<Partial<TextLabelData>>): TextLabelData;
6
+ export declare function createTextLabelRuntime(): TextLabelRuntime;
7
+ export declare function getTextLabelFormat(source: Readonly<TextLabel>): Readonly<TextFormat>;
8
+ export declare function getTextLabelRuntime(source: Readonly<TextLabel>): Readonly<TextLabelRuntime>;
9
+ export declare function getTextLabelString(source: Readonly<TextLabel>): string;
10
+ export declare function setTextLabelAutoSize(source: TextLabel, value: TextAutoSize): void;
11
+ export declare function setTextLabelFormat(source: TextLabel, value: TextFormat): void;
12
+ export declare function setTextLabelHeight(source: TextLabel, value: number): void;
13
+ export declare function setTextLabelString(source: TextLabel, value: string): void;
14
+ export declare function setTextLabelWidth(source: TextLabel, value: number): void;
15
+ //# sourceMappingURL=textLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textLabel.d.ts","sourceRoot":"","sources":["../src/textLabel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,IAAI,EACJ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAmBzB,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI5E;AAOD,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAsBjG;AAED,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAEjF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,aAAa,CAQ1F;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAQzD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAEpF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAE3F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,MAAM,CAEtE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAMjF;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAG7E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMzE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKzE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMxE"}