@launchmenu/core
Version:
An environment for visual keyboard controlled applets
66 lines • 4.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.TextField = void 0;
const model_react_1 = require("model-react");
/**
* A mutable field to contain a text input as well as the selected range
*/
class TextField {
/**
* Creates a new TextField that stores text and selection data
* @param text The initial text to store
* @param selection The selected text
* @param keepCarriageReturn Whether to keep the carriage returns, defaults to false, keeping them may cause bugs when using the EditorField react component
*/
constructor(text = "", selection, keepCarriageReturn) {
this.selection = new model_react_1.Field({ start: 0, end: 0 });
if (!keepCarriageReturn)
text = text.replace(/\r/g, "");
this.text = new model_react_1.Field(text);
if (selection)
this.selection.set(selection);
}
/**
* Sets the value of the text field
* @param text The new text
*/
set(text) {
this.text.set(text);
const selection = this.selection.get();
if (selection.end > text.length || selection.start > text.length)
this.selection.set({
start: Math.min(selection.start, text.length),
end: Math.min(selection.end, text.length),
});
}
/**
* Retrieves the value of the text field
* @param hook The hook to subscribe to changes
* @returns The current text
*/
get(hook) {
return this.text.get(hook);
}
/**
* Sets the selection range
* @param selection The new selection
*/
setSelection(selection) {
const text = this.text.get();
const start = Math.max(0, Math.min(selection.start, text.length));
const end = Math.max(0, Math.min(selection.end, text.length));
const current = this.selection.get();
if (current.start != start || current.end != end)
this.selection.set({ start, end });
}
/**
* Retrieves the selected range (or cursor if start==end)
* @param hook The hook to subscribe to changes
* @returns The selected range
*/
getSelection(hook) {
return this.selection.get(hook);
}
}
exports.TextField = TextField;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RleHRGaWVsZHMvVGV4dEZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE2QztBQUk3Qzs7R0FFRztBQUNILE1BQWEsU0FBUztJQUlsQjs7Ozs7T0FLRztJQUNILFlBQ0ksT0FBZSxFQUFFLEVBQ2pCLFNBQTBCLEVBQzFCLGtCQUE0QjtRQVp0QixjQUFTLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQWNoRCxJQUFJLENBQUMsa0JBQWtCO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxtQkFBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O09BR0c7SUFDSSxHQUFHLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUM3QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDNUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxHQUFHLENBQUMsSUFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWSxDQUFDLFNBQXlCO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUU5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZLENBQUMsSUFBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0o7QUFqRUQsOEJBaUVDIn0=
;