UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

66 lines 4.7 kB
"use strict"; 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=