@flighthq/textinput 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.
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/selectableRichTextManager.d.ts +10 -0
- package/dist/selectableRichTextManager.d.ts.map +1 -0
- package/dist/selectableRichTextManager.js +87 -0
- package/dist/selectableRichTextManager.js.map +1 -0
- package/dist/textInput.d.ts +6 -0
- package/dist/textInput.d.ts.map +1 -0
- package/dist/textInput.js +73 -0
- package/dist/textInput.js.map +1 -0
- package/dist/textInputEditing.d.ts +36 -0
- package/dist/textInputEditing.d.ts.map +1 -0
- package/dist/textInputEditing.js +790 -0
- package/dist/textInputEditing.js.map +1 -0
- package/dist/textInputManager.d.ts +11 -0
- package/dist/textInputManager.d.ts.map +1 -0
- package/dist/textInputManager.js +96 -0
- package/dist/textInputManager.js.map +1 -0
- package/package.json +41 -0
- package/src/selectableRichTextManager.test.ts +189 -0
- package/src/textInput.test.ts +61 -0
- package/src/textInputEditing.test.ts +914 -0
- package/src/textInputManager.test.ts +175 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { blurSelectableRichText, createSelectableRichTextManager, dispatchSelectableRichTextKeyDown, dispatchSelectableRichTextPointerDown, dispatchSelectableRichTextPointerMove, dispatchSelectableRichTextWheel, focusSelectableRichText, getSelectableRichTextSelectionText, } from './selectableRichTextManager';
|
|
2
|
+
export { disableTextInput, enableTextInput, getTextInputState, hasTextInput } from './textInput';
|
|
3
|
+
export { appendTextInput, applyTextInputRestriction, canRedoTextInput, canUndoTextInput, clearTextInputHistory, deleteTextInputBackward, deleteTextInputForward, deleteTextInputWordBackward, deleteTextInputWordForward, getTextInputCaretIndex, getTextInputCaretRectangle, getTextInputCharacterIndexAtPoint, getTextInputDisplayText, getTextInputSelectionBeginIndex, getTextInputSelectionEndIndex, getTextInputSelectionRectangles, getTextInputSelectionText, handleTextInputKeyboard, insertTextInput, moveTextInputCaret, moveTextInputCaretByWord, moveTextInputCaretDown, moveTextInputCaretToLineEnd, moveTextInputCaretToLineStart, moveTextInputCaretUp, redoTextInput, replaceSelectedTextInput, replaceTextInput, scrollTextInputCaretIntoView, selectAllTextInput, selectLineAtTextInputIndex, selectWordAtTextInputIndex, setTextInputSelection, undoTextInput, } from './textInputEditing';
|
|
4
|
+
export { blurTextInput, connectInputToTextInput, createTextInputManager, dispatchTextInput, dispatchTextInputKeyDown, dispatchTextInputPointerDown, dispatchTextInputPointerMove, dispatchTextInputWheel, focusTextInput, } from './textInputManager';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,iCAAiC,EACjC,qCAAqC,EACrC,qCAAqC,EACrC,+BAA+B,EAC/B,uBAAuB,EACvB,kCAAkC,GACnC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,cAAc,GACf,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { blurSelectableRichText, createSelectableRichTextManager, dispatchSelectableRichTextKeyDown, dispatchSelectableRichTextPointerDown, dispatchSelectableRichTextPointerMove, dispatchSelectableRichTextWheel, focusSelectableRichText, getSelectableRichTextSelectionText, } from './selectableRichTextManager';
|
|
2
|
+
export { disableTextInput, enableTextInput, getTextInputState, hasTextInput } from './textInput';
|
|
3
|
+
export { appendTextInput, applyTextInputRestriction, canRedoTextInput, canUndoTextInput, clearTextInputHistory, deleteTextInputBackward, deleteTextInputForward, deleteTextInputWordBackward, deleteTextInputWordForward, getTextInputCaretIndex, getTextInputCaretRectangle, getTextInputCharacterIndexAtPoint, getTextInputDisplayText, getTextInputSelectionBeginIndex, getTextInputSelectionEndIndex, getTextInputSelectionRectangles, getTextInputSelectionText, handleTextInputKeyboard, insertTextInput, moveTextInputCaret, moveTextInputCaretByWord, moveTextInputCaretDown, moveTextInputCaretToLineEnd, moveTextInputCaretToLineStart, moveTextInputCaretUp, redoTextInput, replaceSelectedTextInput, replaceTextInput, scrollTextInputCaretIntoView, selectAllTextInput, selectLineAtTextInputIndex, selectWordAtTextInputIndex, setTextInputSelection, undoTextInput, } from './textInputEditing';
|
|
4
|
+
export { blurTextInput, connectInputToTextInput, createTextInputManager, dispatchTextInput, dispatchTextInputKeyDown, dispatchTextInputPointerDown, dispatchTextInputPointerMove, dispatchTextInputWheel, focusTextInput, } from './textInputManager';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,iCAAiC,EACjC,qCAAqC,EACrC,qCAAqC,EACrC,+BAA+B,EAC/B,uBAAuB,EACvB,kCAAkC,GACnC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,cAAc,GACf,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { InputKeyboardData, RichText, SelectableRichTextManager } from '@flighthq/types';
|
|
2
|
+
export declare function blurSelectableRichText(manager: SelectableRichTextManager): void;
|
|
3
|
+
export declare function createSelectableRichTextManager(): SelectableRichTextManager;
|
|
4
|
+
export declare function dispatchSelectableRichTextKeyDown(manager: SelectableRichTextManager, data: Readonly<InputKeyboardData>, onCopy?: (text: string) => void): boolean;
|
|
5
|
+
export declare function dispatchSelectableRichTextPointerDown(manager: SelectableRichTextManager, target: RichText, x: number, y: number, extend?: boolean): void;
|
|
6
|
+
export declare function dispatchSelectableRichTextPointerMove(manager: SelectableRichTextManager, x: number, y: number): void;
|
|
7
|
+
export declare function dispatchSelectableRichTextWheel(manager: SelectableRichTextManager, deltaLines: number): void;
|
|
8
|
+
export declare function focusSelectableRichText(manager: SelectableRichTextManager, target: RichText): void;
|
|
9
|
+
export declare function getSelectableRichTextSelectionText(manager: SelectableRichTextManager): string;
|
|
10
|
+
//# sourceMappingURL=selectableRichTextManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectableRichTextManager.d.ts","sourceRoot":"","sources":["../src/selectableRichTextManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAmB,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAG/G,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAO/E;AAED,wBAAgB,+BAA+B,IAAI,yBAAyB,CAE3E;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,yBAAyB,EAClC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACjC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAkBT;AAED,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,QAAQ,EAChB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,UAAQ,GACb,IAAI,CAkBN;AAED,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAOpH;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAI5G;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAElG;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAO7F"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { getRichTextRuntime, setRichTextScrollV } from '@flighthq/text';
|
|
2
|
+
import { computeRichTextCharIndexAtPoint } from '@flighthq/textlayout';
|
|
3
|
+
import { KeyCode } from '@flighthq/types';
|
|
4
|
+
export function blurSelectableRichText(manager) {
|
|
5
|
+
if (manager.focused !== null) {
|
|
6
|
+
const runtime = getMutableRuntime(manager.focused);
|
|
7
|
+
runtime.selectionBeginIndex = 0;
|
|
8
|
+
runtime.selectionEndIndex = 0;
|
|
9
|
+
}
|
|
10
|
+
manager.focused = null;
|
|
11
|
+
}
|
|
12
|
+
export function createSelectableRichTextManager() {
|
|
13
|
+
return { focused: null };
|
|
14
|
+
}
|
|
15
|
+
export function dispatchSelectableRichTextKeyDown(manager, data, onCopy) {
|
|
16
|
+
const target = manager.focused;
|
|
17
|
+
if (target === null)
|
|
18
|
+
return false;
|
|
19
|
+
if ((data.ctrlKey || data.metaKey) && (data.key.toLowerCase() === 'a' || data.keyCode === KeyCode.A)) {
|
|
20
|
+
const runtime = getMutableRuntime(target);
|
|
21
|
+
runtime.selectionBeginIndex = 0;
|
|
22
|
+
runtime.selectionEndIndex = target.data.text.length;
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if ((data.ctrlKey || data.metaKey) && (data.key.toLowerCase() === 'c' || data.keyCode === KeyCode.C)) {
|
|
26
|
+
const runtime = getMutableRuntime(target);
|
|
27
|
+
const start = Math.min(runtime.selectionBeginIndex, runtime.selectionEndIndex);
|
|
28
|
+
const end = Math.max(runtime.selectionBeginIndex, runtime.selectionEndIndex);
|
|
29
|
+
const selected = target.data.text.slice(start, end);
|
|
30
|
+
if (selected.length > 0)
|
|
31
|
+
onCopy?.(selected);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
export function dispatchSelectableRichTextPointerDown(manager, target, x, y, extend = false) {
|
|
37
|
+
manager.focused = target;
|
|
38
|
+
const runtime = getMutableRuntime(target);
|
|
39
|
+
const layout = runtime.textLayout;
|
|
40
|
+
if (layout === null) {
|
|
41
|
+
if (!extend) {
|
|
42
|
+
runtime.selectionBeginIndex = 0;
|
|
43
|
+
runtime.selectionEndIndex = 0;
|
|
44
|
+
}
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const index = computeRichTextCharIndexAtPoint(layout, x, y);
|
|
48
|
+
if (extend) {
|
|
49
|
+
runtime.selectionEndIndex = index;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
runtime.selectionBeginIndex = index;
|
|
53
|
+
runtime.selectionEndIndex = index;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function dispatchSelectableRichTextPointerMove(manager, x, y) {
|
|
57
|
+
const target = manager.focused;
|
|
58
|
+
if (target === null)
|
|
59
|
+
return;
|
|
60
|
+
const runtime = getMutableRuntime(target);
|
|
61
|
+
const layout = runtime.textLayout;
|
|
62
|
+
if (layout === null)
|
|
63
|
+
return;
|
|
64
|
+
runtime.selectionEndIndex = computeRichTextCharIndexAtPoint(layout, x, y);
|
|
65
|
+
}
|
|
66
|
+
export function dispatchSelectableRichTextWheel(manager, deltaLines) {
|
|
67
|
+
const target = manager.focused;
|
|
68
|
+
if (target === null)
|
|
69
|
+
return;
|
|
70
|
+
setRichTextScrollV(target, target.data.scrollV + Math.round(deltaLines));
|
|
71
|
+
}
|
|
72
|
+
export function focusSelectableRichText(manager, target) {
|
|
73
|
+
manager.focused = target;
|
|
74
|
+
}
|
|
75
|
+
export function getSelectableRichTextSelectionText(manager) {
|
|
76
|
+
const target = manager.focused;
|
|
77
|
+
if (target === null)
|
|
78
|
+
return '';
|
|
79
|
+
const runtime = getMutableRuntime(target);
|
|
80
|
+
const start = Math.min(runtime.selectionBeginIndex, runtime.selectionEndIndex);
|
|
81
|
+
const end = Math.max(runtime.selectionBeginIndex, runtime.selectionEndIndex);
|
|
82
|
+
return target.data.text.slice(start, end);
|
|
83
|
+
}
|
|
84
|
+
function getMutableRuntime(source) {
|
|
85
|
+
return getRichTextRuntime(source);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=selectableRichTextManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectableRichTextManager.js","sourceRoot":"","sources":["../src/selectableRichTextManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RichText, TextInputOptions, TextInputState } from '@flighthq/types';
|
|
2
|
+
export declare function disableTextInput(node: RichText): void;
|
|
3
|
+
export declare function enableTextInput(node: RichText, options?: Readonly<TextInputOptions>): TextInputState;
|
|
4
|
+
export declare function getTextInputState(node: Readonly<RichText>): TextInputState | null;
|
|
5
|
+
export declare function hasTextInput(node: Readonly<RichText>): boolean;
|
|
6
|
+
//# sourceMappingURL=textInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textInput.d.ts","sourceRoot":"","sources":["../src/textInput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAmB,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AASnG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAErD;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAUpG;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,cAAc,GAAG,IAAI,CAEjF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { getRichTextRuntime } from '@flighthq/text';
|
|
2
|
+
// The opt-in seam that turns a static RichText into an editable field. Importing it is what pulls
|
|
3
|
+
// @flighthq/textinput into an app's bundle; a RichText that never calls enableTextInput stays free of
|
|
4
|
+
// selection/caret/input code. The editing/manager functions in textInputEditing.ts and
|
|
5
|
+
// textInputManager.ts read the input state through getTextInputState.
|
|
6
|
+
// Detaches the editable-field slot, returning the node to a static RichText. The field's text and rich
|
|
7
|
+
// content remain on the RichText itself; only the input mode (caret/focus/selection style) is released.
|
|
8
|
+
export function disableTextInput(node) {
|
|
9
|
+
getRichTextRuntime(node).input = null;
|
|
10
|
+
}
|
|
11
|
+
// Allocates (or returns) the editable-field slot on a RichText, mirroring the enable* opt-in pattern.
|
|
12
|
+
// Idempotent: a second call returns the existing state, applying any options passed.
|
|
13
|
+
export function enableTextInput(node, options) {
|
|
14
|
+
const runtime = getRichTextRuntime(node);
|
|
15
|
+
let state = runtime.input;
|
|
16
|
+
if (state === null) {
|
|
17
|
+
state = createTextInputState(options);
|
|
18
|
+
runtime.input = state;
|
|
19
|
+
}
|
|
20
|
+
else if (options !== undefined) {
|
|
21
|
+
applyTextInputOptions(state, options);
|
|
22
|
+
}
|
|
23
|
+
return state;
|
|
24
|
+
}
|
|
25
|
+
export function getTextInputState(node) {
|
|
26
|
+
return getRichTextRuntime(node).input;
|
|
27
|
+
}
|
|
28
|
+
export function hasTextInput(node) {
|
|
29
|
+
return getRichTextRuntime(node).input !== null;
|
|
30
|
+
}
|
|
31
|
+
function applyTextInputOptions(state, options) {
|
|
32
|
+
if (options.alwaysShowSelection !== undefined)
|
|
33
|
+
state.alwaysShowSelection = options.alwaysShowSelection;
|
|
34
|
+
if (options.caretColor !== undefined)
|
|
35
|
+
state.caretColor = options.caretColor;
|
|
36
|
+
if (options.caretWidth !== undefined)
|
|
37
|
+
state.caretWidth = options.caretWidth;
|
|
38
|
+
if (options.displayAsPassword !== undefined)
|
|
39
|
+
state.displayAsPassword = options.displayAsPassword;
|
|
40
|
+
if (options.historyLimit !== undefined)
|
|
41
|
+
state.historyLimit = Math.max(0, options.historyLimit);
|
|
42
|
+
if (options.passwordCharacter !== undefined)
|
|
43
|
+
state.passwordCharacter = options.passwordCharacter;
|
|
44
|
+
if (options.restrict !== undefined)
|
|
45
|
+
state.restrict = options.restrict;
|
|
46
|
+
if (options.selectionAlpha !== undefined)
|
|
47
|
+
state.selectionAlpha = options.selectionAlpha;
|
|
48
|
+
if (options.selectionColor !== undefined)
|
|
49
|
+
state.selectionColor = options.selectionColor;
|
|
50
|
+
}
|
|
51
|
+
// Defaults match OpenFL's TextField input conventions (bullet password char, light selection tint,
|
|
52
|
+
// opaque black caret 1px wide). desiredCaretX starts unset (-1) so vertical navigation anchors to
|
|
53
|
+
// the actual caret position on the first up/down keystroke. historyLimit defaults to 100 entries.
|
|
54
|
+
function createTextInputState(options) {
|
|
55
|
+
return {
|
|
56
|
+
alwaysShowSelection: options?.alwaysShowSelection ?? false,
|
|
57
|
+
caretColor: options?.caretColor ?? 0x000000,
|
|
58
|
+
caretIndex: 0,
|
|
59
|
+
caretWidth: options?.caretWidth ?? 1,
|
|
60
|
+
desiredCaretX: -1,
|
|
61
|
+
displayAsPassword: options?.displayAsPassword ?? false,
|
|
62
|
+
focused: false,
|
|
63
|
+
history: [],
|
|
64
|
+
historyIndex: -1,
|
|
65
|
+
historyLimit: options?.historyLimit !== undefined ? Math.max(0, options.historyLimit) : 100,
|
|
66
|
+
passwordCharacter: options?.passwordCharacter ?? '•',
|
|
67
|
+
restrict: options?.restrict ?? '',
|
|
68
|
+
selectionAlpha: options?.selectionAlpha ?? 0.35,
|
|
69
|
+
selectionColor: options?.selectionColor ?? 0x0078d7,
|
|
70
|
+
selectionIndex: 0,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=textInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textInput.js","sourceRoot":"","sources":["../src/textInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { HandleTextInputKeyboardOptions, KeyboardEventData, ReplaceTextInputOptions, RichText, TextLayoutResult, TextSelectionRectangle } from '@flighthq/types';
|
|
2
|
+
export declare function appendTextInput(source: RichText, text: string): void;
|
|
3
|
+
export declare function applyTextInputRestriction(source: Readonly<RichText>, text: string, replaceLength?: number): string;
|
|
4
|
+
export declare function canRedoTextInput(source: Readonly<RichText>): boolean;
|
|
5
|
+
export declare function canUndoTextInput(source: Readonly<RichText>): boolean;
|
|
6
|
+
export declare function clearTextInputHistory(source: RichText): void;
|
|
7
|
+
export declare function deleteTextInputBackward(source: RichText): void;
|
|
8
|
+
export declare function deleteTextInputForward(source: RichText): void;
|
|
9
|
+
export declare function deleteTextInputWordBackward(source: RichText): void;
|
|
10
|
+
export declare function deleteTextInputWordForward(source: RichText): void;
|
|
11
|
+
export declare function getTextInputCaretIndex(source: Readonly<RichText>): number;
|
|
12
|
+
export declare function getTextInputCaretRectangle(out: TextSelectionRectangle, source: Readonly<RichText>, layout: Readonly<TextLayoutResult>): void;
|
|
13
|
+
export declare function getTextInputCharacterIndexAtPoint(source: Readonly<RichText>, layout: Readonly<TextLayoutResult>, x: number, y: number): number;
|
|
14
|
+
export declare function getTextInputDisplayText(source: Readonly<RichText>): string;
|
|
15
|
+
export declare function getTextInputSelectionBeginIndex(source: Readonly<RichText>): number;
|
|
16
|
+
export declare function getTextInputSelectionEndIndex(source: Readonly<RichText>): number;
|
|
17
|
+
export declare function getTextInputSelectionRectangles(out: TextSelectionRectangle[], source: Readonly<RichText>, layout: Readonly<TextLayoutResult>): void;
|
|
18
|
+
export declare function getTextInputSelectionText(source: Readonly<RichText>): string;
|
|
19
|
+
export declare function handleTextInputKeyboard(source: RichText, data: Readonly<KeyboardEventData>, options?: Readonly<HandleTextInputKeyboardOptions>): boolean;
|
|
20
|
+
export declare function insertTextInput(source: RichText, text: string): void;
|
|
21
|
+
export declare function moveTextInputCaret(source: RichText, index: number, extendSelection?: boolean): void;
|
|
22
|
+
export declare function moveTextInputCaretByWord(source: RichText, direction: number, extendSelection?: boolean): void;
|
|
23
|
+
export declare function moveTextInputCaretDown(source: RichText, layout: Readonly<TextLayoutResult> | null | undefined, extendSelection?: boolean): void;
|
|
24
|
+
export declare function moveTextInputCaretToLineEnd(source: RichText, layout: Readonly<TextLayoutResult> | null | undefined, extendSelection?: boolean): void;
|
|
25
|
+
export declare function moveTextInputCaretToLineStart(source: RichText, layout: Readonly<TextLayoutResult> | null | undefined, extendSelection?: boolean): void;
|
|
26
|
+
export declare function moveTextInputCaretUp(source: RichText, layout: Readonly<TextLayoutResult> | null | undefined, extendSelection?: boolean): void;
|
|
27
|
+
export declare function redoTextInput(source: RichText): void;
|
|
28
|
+
export declare function replaceSelectedTextInput(source: RichText, text: string, options?: Readonly<ReplaceTextInputOptions>): void;
|
|
29
|
+
export declare function replaceTextInput(source: RichText, beginIndex: number, endIndex: number, text: string, options?: Readonly<ReplaceTextInputOptions>): void;
|
|
30
|
+
export declare function scrollTextInputCaretIntoView(source: RichText, layout: Readonly<TextLayoutResult>, viewportWidth: number, viewportHeight: number): void;
|
|
31
|
+
export declare function selectAllTextInput(source: RichText): void;
|
|
32
|
+
export declare function selectLineAtTextInputIndex(source: RichText, index: number): void;
|
|
33
|
+
export declare function selectWordAtTextInputIndex(source: RichText, index: number): void;
|
|
34
|
+
export declare function setTextInputSelection(source: RichText, beginIndex: number, endIndex: number): void;
|
|
35
|
+
export declare function undoTextInput(source: RichText): void;
|
|
36
|
+
//# sourceMappingURL=textInputEditing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textInputEditing.d.ts","sourceRoot":"","sources":["../src/textInputEditing.ts"],"names":[],"mappings":"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"}
|