import { JSXInterface } from '../jsx'; import { CSSResultGroup, FormFieldElement, PropertyValues, TapEvent, TemplateResult } from '@refinitiv-ui/core'; import { TemplateMap } from '@refinitiv-ui/core/directives/template-map.js'; import '../icon/index.js'; type SelectionDirection = 'forward' | 'backward' | 'none'; declare enum Direction { Up = 1, Down = -1 } /** * Form control element for numbers. * * @fires value-changed - Fired when user commits a value change. The event is not triggered if `value` property is changed programmatically. * @fires error-changed - Fired when user inputs invalid value. The event is not triggered if `error` property is changed programmatically. * @fires step-up - Fired when user acts value up on both pressing arrow up or tapping the spinner up. The event is not triggered if stepUp method is called programmatically. * @fires step-down - Fired when user acts value down on both pressing arrow down or tapping the spinner down. The event is not triggered if stepDown method is called programmatically. * * @attr {boolean} disabled - Set disabled state * @prop {boolean} [disabled=false] - Set disabled state * * @attr {boolean} error - Set error state * @prop {boolean} [error=false] - Set error state * * @attr {string} placeholder - Set placeholder text * @prop {string} [placeholder=""] - Set placeholder text * * @attr {boolean} readonly - Set readonly state * @prop {boolean} [readonly=false] - Set readonly state * * @attr {boolean} transparent - Disables all other states and border/background styles. * @prop {boolean} [transparent=false] - Disables all other states and border/background styles. * * @attr {boolean} warning - Set warning state * @prop {boolean} [warning=false] - Set warning state * * @attr {string} value - Input's value * @prop {string} [value=""] - Input's value * * @attr {boolean} clears - Show clears button * @prop {boolean} [clears=false] - Show clears button */ export declare class NumberField extends FormFieldElement { /** * Element version number * @returns version number */ static get version(): string; /** * A `CSSResultGroup` that will be used * to style the host, slotted children * and the internal template of the element. * @return CSS template */ static get styles(): CSSResultGroup; /** * Time period (ms) before press repetition starts */ private repeatDelay; /** * Time period (ms) between each repeat */ private repeatRate; /** * Set spinner's visibility */ noSpinner: boolean; /** * Set step value */ step: string | null; /** * Set minimum value. * This value must be less than or equal to the value of the `max` attribute */ min: string | null; /** * Set maximum value. * This value must be greater than or equal to the value of the `min` attribute */ max: string | null; private interimValueState; /** * The value of the number entered into the input. * @param value number-field value * @default - */ set value(value: string); get value(): string; /** * Returns the value of the element, interpreted as double number */ get valueAsNumber(): number; /** * Get spinner up element */ private spinnerUpEl?; /** * Get spinner down element */ private spinnerDownEl?; /** * An object's returned from setTimeout to use with repeat delay. */ private repeatDelayTimer; /** * An object's returned from setInterval to use with repeat rate. */ private repeatRateTimer; /** * Called after the component is first rendered * @param changedProperties Properties which have changed * @returns {void} */ protected firstUpdated(changedProperties: PropertyValues): void; /** * Updates the element * @param changedProperties Properties that has changed * @returns {void} */ protected update(changedProperties: PropertyValues): void; /** * Called when the element’s DOM has been updated and rendered * @param changedProperties Properties that has changed * @returns {void} */ protected updated(changedProperties: PropertyValues): void; /** * Convert string to number * @param value value to convert * @returns NaN if string is an invalid number or Infinity or empty string; */ private stringToNumber; /** * Convert a float number to a fixed number * @param value Value to convert * @param [decimals] optional decimals. Default is based on step base and allowed value step * @returns fixed number */ private toFixedNumber; /** * Convert step value from string to number or 'any' * @returns step value of input as a number or 'any' */ private get stepValue(); /** * Get the number of decimal places * @param value Value to check * @returns the number of decimal places */ private getDecimalPlace; /** * Get number of decimals based on step base and allowed value step * @returns decimals */ private get stepDecimals(); /** * Check if passed value is a valid value * @override * @param value Value to check * @returns {boolean} false if value is invalid */ protected isValidValue(value: string): boolean; /** * Get value as valid number string. * @param value A value to convert * @returns string value */ private valueAsNumberString; /** * Get either inputValue or actual value dependant on control state * @returns string of input value */ private get internalValue(); /** * Handles key down input event * @param event Key down event object * @returns {void} */ protected onInputKeyDown(event: KeyboardEvent): void; /** * Trigger step-up or step-down event and return the event is cancelled * @param direction Up or Down * @returns {boolean} false if cancelled event. And true otherwise. */ private dispatchStepEvent; /** * Run when spinner has been tapped * @param event tap event * @returns {void} */ protected onSpinnerTap(event: TapEvent): void; /** * Clear repeatDelayTimer and repeatRateTimer if exist * @returns {void} */ protected clearTimer: () => void; /** * Step down or up and notify value change * @param direction Up or Down * @returns {void} */ protected onApplyStep(direction: Direction): void; /** * Run before input changes * Prevent invalid characters * @param event before input event * @returns {void} */ protected onBeforeInputChange(event: InputEvent): void; /** * Runs on input element `input` event * @param event `input` event * @returns {void} */ protected onInputInput(event: InputEvent): void; /** * Runs on input element `change` event * @param event `change` event * @returns {void} */ protected onInputChange(event: InputEvent): void; /** * Triggers when native input value change with input event or change event * @param event Input event * @returns {void} */ protected onNativeInputChange(event: InputEvent): void; /** * Stripe characters from input text based on previous input and data * @param input The new input to process * @param oldInput Previous input * @param data The data that has been inserted * @returns the input where characters are striped away */ private stripeInvalidCharacters; /** * On *user-interaction* set the value and notify. * This function will not call request update, but will fire value-changed event * @returns {void} */ private setSilentlyValueAndNotify; /** * Get the allowed step value * @returns allowed step */ private getAllowedValueStep; /** * Get the step base as per HTML5 specs * @returns step base */ private get stepBase(); /** * Count precision number * @param number value to count * @returns precision number */ private getPrecision; /** * Check if value subtracted from the step base is not an integral multiple of the allowed value step * @param value value to check * @returns true if value is integral */ private isValueIntegralMultipleOfStep; /** * Find the nearest value that, when subtracted from the `stepBase` * is an integral multiple of the `allowedValueStep`, * and that is less than `value` if the `direction` was `Down`, and more than value otherwise. * @param value the value to operate on * @param stepBase base to start calculation * @param allowedValueStep a step to go Down or Up * @param direction Direction, either -1 for Down or 1 for Up * @returns nearest number */ private findNearestSteppedValue; /** * Apply step up or step down on the input * @param direction either go up or down * @param stepIncrement step increment factor * @returns {void} */ private applyStepDirection; /** * Increases the input value by amount of step * @param [stepIncrement] The stepIncrement parameter is a numeric value. If no parameter is passed, stepIncrement defaults to 1. * @returns {void} */ stepUp(stepIncrement?: number): void; /** * Decreases the input value by amount of step * @param [stepIncrement] The stepIncrement parameter is a numeric value. If no parameter is passed, stepIncrement defaults to 1. * @returns {void} */ stepDown(stepIncrement?: number): void; /** * Returns whether input of the element should be validated or not based on the existence of validation constraints * @returns true if there is at least one validation constraint */ private shouldValidate; /** * Validate the element input and mark it as error if its input is invalid. * @returns `true` if the element input is valid; otherwise, returns `false`. */ reportValidity(): boolean; /** * Returns `true` if the element input is valid; otherwise, returns `false`. * @returns element input validity */ checkValidity(): boolean; /** * @ignore */ get selectionStart(): number | null; /** * @ignore */ set selectionStart(index: number | null); /** * @ignore */ get selectionEnd(): number | null; /** * @ignore */ set selectionEnd(index: number | null); /** * @ignore */ get selectionDirection(): SelectionDirection | null; /** * @ignore */ set selectionDirection(direction: SelectionDirection | null); /** * @ignore */ setSelectionRange(startSelection: number | null, endSelection: number | null, selectionDirection?: SelectionDirection): void; /** * Renders spinner * @returns {TemplateResult} spinner part template */ protected renderSpinner(): TemplateResult; /** * Decorate `` element with common properties extended from form field element: * type="text" - always `text` * part="input" - always "input", used for styling * inputmode="decimal" - show decimals keyboard by default * role="spinbutton" - number field is actually a spinner * aria-valuenow - current value or 0 * aria-valuetext - current value or 0, need this to improve user-friendly and human-understandable when screen reader announce value * @keydown - Listener for `keydown` event. Runs `this.onInputKeyDown` * @beforeinput - Listener for `beforeinput` event. Runs `this.onBeforeInputChange` * @returns template map */ protected get decorateInputMap(): TemplateMap; /** * A `TemplateResult` that will be used * to render the updated internal template. * @return {TemplateResult} Render template */ protected render(): TemplateResult; } declare global { interface HTMLElementTagNameMap { 'ef-number-field': NumberField; } } export {}; declare global { interface HTMLElementTagNameMap { 'ef-number-field': NumberField; } namespace JSX { interface IntrinsicElements { 'ef-number-field': Partial | JSXInterface.HTMLAttributes; } } } export {};