import { EditableTextBase as EditableTextBaseDefinition, KeyboardType, ReturnKeyType, UpdateTextTrigger, AutocapitalizationType } from "."; import { TextBase, Property, CssProperty, Style, Color, booleanConverter, makeValidator, makeParser, PseudoClassHandler } from "../text-base"; export * from "../text-base"; export abstract class EditableTextBase extends TextBase implements EditableTextBaseDefinition { public static blurEvent = "blur"; public static focusEvent = "focus"; public static textChangeEvent = "textChange"; public keyboardType: KeyboardType; public returnKeyType: ReturnKeyType; public updateTextTrigger: UpdateTextTrigger; public autocapitalizationType: AutocapitalizationType; public editable: boolean; public autocorrect: boolean; public hint: string; public maxLength: number; public abstract dismissSoftInput(); public abstract _setInputType(inputType: number): void; private _focusHandler = () => this._goToVisualState("focus"); private _blurHandler = () => this._goToVisualState("blur"); @PseudoClassHandler("focus", "blur") _updateTextBaseFocusStateHandler(subscribe) { const method = subscribe ? "on" : "off"; this[method]("focus", this._focusHandler); this[method]("blur", this._blurHandler); } } // TODO: Why not name it - hintColor property?? // TODO: Or rename hintProperty to 'placeholder' and make it CSSProperty?? // https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-placeholder export const placeholderColorProperty = new CssProperty({ name: "placeholderColor", cssName: "placeholder-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) }); placeholderColorProperty.register(Style); const keyboardTypeConverter = makeParser(makeValidator("datetime", "phone", "number", "url", "email", "integer")); export const keyboardTypeProperty = new Property({ name: "keyboardType", valueConverter: keyboardTypeConverter }); keyboardTypeProperty.register(EditableTextBase); const returnKeyTypeConverter = makeParser(makeValidator("done", "next", "go", "search", "send")); export const returnKeyTypeProperty = new Property({ name: "returnKeyType", valueConverter: returnKeyTypeConverter }); returnKeyTypeProperty.register(EditableTextBase); export const editableProperty = new Property({ name: "editable", defaultValue: true, valueConverter: booleanConverter }); editableProperty.register(EditableTextBase); export const updateTextTriggerProperty = new Property({ name: "updateTextTrigger", defaultValue: "textChanged" }); updateTextTriggerProperty.register(EditableTextBase); const autocapitalizationTypeConverter = makeParser(makeValidator("none", "words", "sentences", "allcharacters")); export const autocapitalizationTypeProperty = new Property({ name: "autocapitalizationType", defaultValue: "sentences", valueConverter: autocapitalizationTypeConverter }); autocapitalizationTypeProperty.register(EditableTextBase); export const autocorrectProperty = new Property({ name: "autocorrect", valueConverter: booleanConverter }); autocorrectProperty.register(EditableTextBase); export const hintProperty = new Property({ name: "hint", defaultValue: "" }); hintProperty.register(EditableTextBase); export const maxLengthProperty = new Property({ name: "maxLength", defaultValue: Number.POSITIVE_INFINITY, valueConverter: parseInt }); maxLengthProperty.register(EditableTextBase);