declare namespace GC {
    export namespace InputMan {
        /**
         * Represents the license key for evaluation version and production version.
         */
        var LicenseKey: string;

        var appearanceStyle: AppearanceStyle;

        export abstract class GcInputManBase {
            constructor(inputEl: HTMLInputElement | HTMLTextAreaElement, config?: GcInputManBaseConfig);

            /** Get or Set */
            autoDropDown: boolean;
            /** Get or Set */
            showClearButton: boolean;
            /** Get or Set */
            showCopyButton: boolean;
            /** Get or Set */
            showHelpButton: boolean;
            /** Get or Set */
            helpContent: string;
            /** Get or Set */
            copyMessage: string;
            /** Get or Set */
            copiedMessage: string;
            /** Get or Set */
            enabled: boolean;
            /** Get or Set */
            readOnly: boolean;
            /** Get or Set */
            visible: boolean;
            /** Set */
            dropDownButtonVisible: boolean;
            /** Set */
            spinButtonVisible: boolean;
            /** Get or Set */
            autoScale: boolean;
            /** Get or Set */
            minScaleFactor: number;
            /** Get or Set */
            container: HTMLElement;
            /** Get */
            readonly dropDownWindow: IDropDownContainer;
            /** Get */
            readonly componentName: string;
            /** Get or Set */
            tabIndex: number;
            /** Get or Set */
            floatingLabelText: string;
            /** Get or Set */
            floatingLabelType: FloatingLabelType;
            /** Get or Set */
            floatingLabelDirection: FloatingLabelDirection;
            /** Get or Set */
            width: number | string;
            /** Get or Set */
            height: number | string;
            /** Get or Set */
            minWidth: number | string;
            /** Get or Set */
            minHeight: number | string;
            /** Get or Set */
            maxWidth: number | string;
            /** Get or Set */
            maxHeight: number | string;
            /** Get or Set */
            fontSize: number | string;

            setAutoDropDown(v: boolean): void;
            getEnabled(): boolean;
            setEnabled(v: boolean): void;
            getReadOnly(): boolean;
            getVisible(): boolean;
            setVisible(v: boolean): void;
            createDropDown(dropDownButtonAlignment?: DropDownButtonAlignment, showDropDown?: boolean): IDropDownContainer;
            setDropDownButtonVisible(value: boolean): void;
            getDropDownWindow(): IDropDownContainer;
            getOriginalInputElement(): HTMLInputElement | HTMLTextAreaElement;
            getUIInputElement(): HTMLInputElement | HTMLTextAreaElement;
            getLayoutElement(): HTMLDivElement;
            setAutoScale(value: boolean): void;
            setMinScaleFactor(value: number): void;
            autoScaleText(): void;
            setExitOnLastChar(v: boolean): void;
            setEditMode(v: EditMode): void;
            setExitOnLeftRightKey(v: ExitOnLeftRightKey): void;
            setText(value: string): void;
            setWatermarkDisplayNullText(v: string): void;
            setWatermarkNullText(v: string): void;
            clear(): void;
            getText(): string;
            getDisplayText(): string;
            getUseClipboard(): boolean;
            setUseClipboard(v: boolean): void;
            getIsOverwrite(): boolean;
            setSelectedText(v: string): void;
            getSelectedText(): string;
            getSelectionLength(): number;
            setSelectionLength(v: number): void;
            getSelectionStart(): number;
            setSelectionStart(v: number): void;
            selectAll(): void;
            deselectAll(): void;
            setExitOnEnterKey(value: ExitKey): void;
            setReadOnly(v: boolean): void;
            setFocus(): void;
            onSyncValueToOriginalInput(cb: (value: boolean | number | string | object, originalInput: HTMLInputElement | HTMLTextAreaElement) => void): void;
            getHost(): HTMLElement;
            setContainer(el: HTMLElement): void;
            destroy(): void;
            onEditStatusChanged(f: (sender: this) => void): void;
            removeEditStatusChanged(f: (sender: this) => void): void;
            onTextChanged(f: (sender: this) => void): void;
            removeTextChanged(f: (sender: this) => void): void;
            onSpinUp(f: (sender: this) => void): void;
            removeSpinUp(f: (sender: this) => void): void;
            onSpinDown(f: (sender: this) => void): void;
            removeSpinDown(f: (sender: this) => void): void;
            onKeyExit(f: (sender: this) => void): void;
            removeKeyExit(f: (sender: this) => void): void;
            onInvalidInput(f: (sender: this) => void): void;
            removeInvalidInput(f: (sender: this) => void): void;
            onInput(f: (sender: this, args: InputArgs) => void): void;
            removeInput(f: (sender: this, args: InputArgs) => void): void;
            onFocusOut(f: (sender: this) => void): void;
            removeFocusOut(f: (sender: this) => void): void;
            onKeyUp(f: (sender: this, args?: CustomEventArgs) => void): void;
            removeKeyUp(f: (sender: this, args?: CustomEventArgs) => void): void;
            onKeyDown(f: (sender: this, args?: CustomEventArgs) => void): void;
            removeKeyDown(f: (sender: this, args?: CustomEventArgs) => void): void;
        }

        export class GcCalculator {
            constructor(container: HTMLElement, config?: GcCalculatorConfig);

            /** Get */
            /**
             * Get the Wrap HtmlElement of current control
             */
            readonly element: HTMLElement;
            /** Get or Set */
            /**
             * Indicate whether the control displays the output box
             * The default value for this property is <b>true</b>.
             */
            showOutput: boolean;
            /** Get or Set */
            visible: boolean;
            /** Get or Set */
            enabled: boolean;
            /** Get */
            /**
             * Indicate whether the current control status is invalid,
             * For example, divide by 0, the status will become invaild
             */
            readonly isInvalid: boolean;
            /** Get */
            /**
             * Indicate the displayed text
             */
            readonly text: string;
            /** Get or Set */
            /**
             * Set the current calculator value, the value will be used as the left operand,
             * the value of memory value will not change, if the calculator is in an invalid state, the invalid state will be removed
             */
            value: number | null;
            /** Get */
            readonly memoryValue: number | null;
            /** Get or Set */
            buttonText: object;
            /** Get */
            readonly componentName: string;

            destroy(): void;
            getHost(): HTMLElement;
            /**
             * let the calcultor get the focus
             */
            focus(): void;
            /**
             * restore the button text with default state, if some cutomized texts are applied before.
             */
            restoreButtonText(): void;
            /**
             * perform the click action just like clicking the specific key
             */
            performClick(btnKey: GcCalculatorKey): void;
        }

        export class GcCalendar {
            constructor(container: HTMLElement, config?: GcCalendarConfig);

            /** Get */
            readonly calendarZoomRange: CalendarZoomRange | CalendarType[];
            /** Get or Set */
            dimensions: Dimensions;
            /** Get or Set */
            focusDate: Date;
            /** Get or Set */
            selections: Date[];
            /** Get or Set */
            selectedDate: Date;
            /** Get */
            readonly holidayGroupsCount: number;
            /** Get or Set */
            maxDate: Date;
            /** Get or Set */
            minDate: Date;
            /** Get or Set */
            maxSelectionCount: number;
            /** Get or Set */
            selectionMode: CalendarSelectionMode;
            /** Get or Set */
            allowSelection: AllowSelection;
            /** Get or Set */
            emptyRows: EmptyRows;
            /** Get or Set */
            enabled: boolean;
            /** Get or Set */
            firstDayOfWeek: DayOfWeek;
            /** Get or Set */
            firstFiscalMonth: Months;
            /** Get or Set */
            firstMonthInView: Months;
            /** Get or Set */
            yearMonthFormat: string;
            /** Get or Set */
            weekTitleSelect: boolean;
            /** Get or Set */
            weekNumberSelect: boolean;
            /** Get or Set */
            headerFormat: string;
            /** Get or Set */
            showZoomButton: boolean;
            /** Get or Set */
            showRokuyou: Rokuyou;
            /** Get or Set */
            showHeader: boolean;
            /** Get or Set */
            showToday: boolean;
            /** Get or Set */
            showWeekNumber: boolean;
            /** Get or Set */
            showTrailing: boolean;
            /** Get or Set */
            calendarType: CalendarType;
            /** Get or Set */
            calendarYear: CalendarYear;
            /** Get or Set */
            visible: boolean;
            /** Get or Set */
            showNavigator: CalendarNavigators;
            /** Get or Set */
            navigatorOrientation: NavigatorOrientation;
            /** Get or Set */
            overrideTipText: string;
            /** Get */
            readonly componentName: string;
            /** Get or Set */
            scrollRate: number;
            /** Get or Set */
            autoSwitch: boolean;
            /** Get or Set */
            showAnimation: boolean;
            /** Set */
            showContextMenu: boolean;
            /** Get or Set */
            allowResize: boolean;
            /** Get or Set */
            width: number | string;
            /** Get or Set */
            height: number | string;
            /** Get or Set */
            minWidth: number | string;
            /** Get or Set */
            minHeight: number | string;
            /** Get or Set */
            maxWidth: number | string;
            /** Get or Set */
            maxHeight: number | string;

            destroy(): void;
            setFocusDate(value: Date): this;
            getFocusDate(): Date;
            setMaxDate(value: Date): void;
            setMinDate(value: Date): void;
            setMaxSelectionCount(value: number): void;
            setSelectionMode(value: CalendarSelectionMode): void;
            setSelections(value: Date[]): this;
            getSelections(): Date[];
            setAllowSelection(value: AllowSelection): void;
            setSelectedDate(value: Date, disableEvents?: boolean): this;
            getSelectedDate(): Date;
            setEmptyRows(value: EmptyRows): void;
            setEnabled(value: boolean): this;
            setFirstDayOfWeek(value: DayOfWeek): void;
            setFirstFiscalMonth(value: Months): void;
            setFirstMonthInView(value: Months): void;
            setYearMonthFormat(value: string): void;
            setWeekTitleSelect(value: boolean): void;
            setWeekNumberSelect(value: boolean): void;
            setHeaderFormat(value: string): void;
            setShowZoomButton(value: boolean): void;
            setShowRokuyou(value: Rokuyou): void;
            setShowHeader(value: boolean): void;
            setShowToday(value: boolean): void;
            setShowWeekNumber(value: boolean): void;
            setShowTrailing(value: boolean): void;
            setCalendarType(value: CalendarType, ignoreAnimation?: boolean): this;
            setCalendarYear(value: CalendarYear): void;
            setVisible(value: boolean): this;
            setCalendarDimensions(width: number, height: number): void;
            setShowNavigator(value: CalendarNavigators): void;
            setNavigatorOrientation(value: NavigatorOrientation): void;
            setOverrideTipText(value: string): void;
            getHost(): HTMLElement;
            scrollMonth(value: number): this;
            scrollYear(value: number): this;
            getWeekday(weekday: string): WeekDay;
            getHolidayGroupIndex(item: HolidayGroup): number;
            getHolidayGroup(item: string | number): HolidayGroup;
            getHolidayGroupsCount(): number;
            addHolidayGroup(item: HolidayGroup): void;
            insertHolidayGroup(index: number, item: HolidayGroup): void;
            removeHolidayGroup(item: HolidayGroup): void;
            removeHolidayGroupAt(index: number): void;
            clearHolidayGroups(): void;
            loadHolidayFromUrl(url: string, config?: LoadHolidayConfig): Promise<HolidayGroup[]>;
            loadHolidayFromContent(content: string, config?: LoadHolidayConfig): HolidayGroup[];
            onClickDate(callBack: (sender: this) => void): void;
            onScrolled(callBack: (sender: this) => void): void;
            onFocusDateChanged(callBack: (sender: this) => void): void;
            onSelectedDateChanged(callBack: (sender: this) => void): void;
        }

        export class HolidayGroup {
            constructor(name?: string, isActive?: boolean);

            /** Get */
            readonly count: number;
            /** Get or Set */
            isActive: boolean;

            getHoliday(index: number): HolidayType;
            getHolidaysCount(): number;
            getHolidayIndex(item: HolidayType): void;
            addHoliday(item: HolidayType): void;
            clearHolidays(): void;
            insertHoliday(index: number, item: HolidayType): void;
            removeHoliday(item: HolidayType): void;
            removeHolidayAt(index: number): void;
            getIsActive(): boolean;
            setIsActive(isActive: boolean): void;
            setOverride(weekday: string, overrideFlag: HolidayOverride): void;
            getOverride(weekday: string): HolidayOverride;
            setWeekFlags(weekday: string, flags: WeekFlags): void;
            getWeekFlags(weekday: string): WeekFlags;
        }

        export class Holiday {
            constructor(name?: string, startMonth?: number, startDay?: number, endMonth?: number, endDay?: number);

            /** Get or Set */
            name: string;
            /** Get or Set */
            startMonth: number;
            /** Get or Set */
            startDay: number;
            /** Get or Set */
            endMonth: number;
            /** Get or Set */
            endDay: number;

            setName(value: string): void;
            getName(): string;
            setStartMonth(value: number): void;
            getStartMonth(): number;
            setStartDay(value: number): void;
            getStartDay(): number;
            setEndMonth(value: number): void;
            getEndMonth(): number;
            setEndDay(value: number): void;
            getEndDay(): number;
            isHoliday(date: Date): boolean;
        }

        export class ForceHoliday {
            constructor(name?: string, startDate?: Date, endDate?: Date);

            /** Get or Set */
            name: string;
            /** Get or Set */
            start: Date;
            /** Get or Set */
            end: Date;

            setName(value: string): void;
            getName(): string;
            setStart(value: Date | string): void;
            getStart(): Date;
            setEnd(value: Date | string): void;
            getEnd(): Date;
            isHoliday(date: Date): boolean;
        }

        export class ForceWorkday {
            constructor(name?: string, startDate?: Date, endDate?: Date);

            /** Get or Set */
            name: string;
            /** Get or Set */
            start: Date;
            /** Get or Set */
            end: Date;

            setName(value: string): void;
            getName(): string;
            setStart(value: Date | string): void;
            getStart(): Date;
            setEnd(value: Date | string): void;
            getEnd(): Date;
            isHoliday(date: Date): boolean;
        }

        export class DayOfWeekHoliday {
            constructor(name?: string, month?: MonthFlags, dayOfWeekInMonth?: WeekFlags, dayOfWeek?: DayOfWeek);

            /** Get or Set */
            name: string;
            /** Get or Set */
            month: MonthFlags;
            /** Get or Set */
            dayOfWeekInMonth: WeekFlags;
            /** Get or Set */
            dayOfWeek: DayOfWeek;

            setName(value: string): void;
            getName(): string;
            setMonth(value: MonthFlags): void;
            getMonth(): MonthFlags;
            setDayOfWeekInMonth(value: WeekFlags): void;
            getDayOfWeekInMonth(): WeekFlags;
            setDayOfWeek(value: DayOfWeek): void;
            getDayOfWeek(): DayOfWeek;
            isHoliday(date: Date): boolean;
        }

        export class ForceDayOfWeekHoliday {
            constructor(name?: string, year?: number, month?: MonthFlags, dayOfWeekInMonth?: WeekFlags, dayOfWeek?: DayOfWeek);

            /** Get */
            readonly isYearly: boolean;
            /** Get or Set */
            year: number;
            /** Get or Set */
            name: string;
            /** Get or Set */
            month: MonthFlags;
            /** Get or Set */
            dayOfWeekInMonth: WeekFlags;
            /** Get or Set */
            dayOfWeek: DayOfWeek;

            getIsYearly(): boolean;
            setYear(value: number): void;
            getYear(): number;
            setName(value: string): void;
            getName(): string;
            setMonth(value: MonthFlags): void;
            getMonth(): MonthFlags;
            setDayOfWeekInMonth(value: WeekFlags): void;
            getDayOfWeekInMonth(): WeekFlags;
            setDayOfWeek(value: DayOfWeek): void;
            getDayOfWeek(): DayOfWeek;
            isHoliday(date: Date): boolean;
        }

        export class ForceDayOfWeekWorkday {
            constructor(name?: string, year?: number, month?: number, dayOfWeekInMonth?: WeekFlags, dayOfWeek?: DayOfWeek);

            /** Get */
            readonly isYearly: boolean;
            /** Get or Set */
            year: number;
            /** Get or Set */
            name: string;
            /** Get or Set */
            month: MonthFlags;
            /** Get or Set */
            dayOfWeekInMonth: WeekFlags;
            /** Get or Set */
            dayOfWeek: DayOfWeek;

            getIsYearly(): boolean;
            setYear(value: number): void;
            getYear(): number;
            setName(value: string): void;
            getName(): string;
            setMonth(value: MonthFlags): void;
            getMonth(): MonthFlags;
            setDayOfWeekInMonth(value: WeekFlags): void;
            getDayOfWeekInMonth(): WeekFlags;
            setDayOfWeek(value: DayOfWeek): void;
            getDayOfWeek(): DayOfWeek;
            isHoliday(date: Date): boolean;
        }

        export class WeekdaysGroup {
            constructor();

            fireWeekDayChangedEvent(propertyName: string): void;
            monday(): WeekDay;
            tuesday(): WeekDay;
            wednesday(): WeekDay;
            thursday(): WeekDay;
            friday(): WeekDay;
            saturday(): WeekDay;
            sunday(): WeekDay;
            weekDay(index: number): WeekDay;
        }

        export class WeekDay {
            constructor(owner: WeekdaysGroup);

            setDayName(value: string): void;
            getReflectToTitle(): boolean;
            setReflectToTitle(value: boolean): void;
            getWeekFlags(): WeekFlags;
            setWeekFlags(value: WeekFlags): void;
        }

        export class GcComboBox {
            constructor(ele: HTMLSelectElement, option?: ComboBoxConfig);

            /** Get or Set */
            selectedIndex: number;
            /** Get or Set */
            selectedItem: string | object;
            /** Get or Set */
            selectedValue: number | string | boolean | object;
            /** Get or Set */
            checkedIndices: number[];
            /** Get or Set */
            checkedItems: object[] | string[];
            /** Get or Set */
            checkedValues: number[] | string[] | boolean[] | object[];
            /** Get or Set */
            items: number[] | string[] | boolean[] | object[];
            /** Get */
            readonly displayText: string;
            /** Get or Set */
            readOnly: boolean;
            /** Get */
            readonly isOverwrite: boolean;
            /** Get */
            readonly dropDownWindow: IDropDownContainer;
            /** Get or Set */
            allowDropDownResize: boolean;
            /** Get or Set */
            allowColumnResize: boolean;
            /** Get or Set */
            text: string;
            /** Get or Set */
            autoFilter: AutoFilter;
            /** Get or Set */
            autoSelect: boolean;
            /** Get or Set */
            editable: boolean;
            /** Get or Set */
            watermarkDisplayNullText: string;
            /** Get or Set */
            watermarkNullText: string;
            /** Get or Set */
            ellipsis: EllipsisMode;
            /** Get or Set */
            acceptsCrlf: CrLfMode;
            /** Get or Set */
            acceptsTabChar: TabCharMode;
            /** Get or Set */
            ellipsisString: string;
            /** Get or Set */
            editMode: EditMode;
            /** Get or Set */
            exitOnLeftRightKey: ExitOnLeftRightKey;
            /** Get or Set */
            highlightText: boolean;
            /** Get or Set */
            useClipboard: boolean;
            /** Get or Set */
            exitOnEnterKey: ExitKey;
            /** Get or Set */
            showTip: boolean;
            /** Get or Set */
            enabled: boolean;
            /** Get or Set */
            visible: boolean;
            /** Get or Set */
            container: HTMLElement;
            /** Get or Set */
            autoDropDown: boolean;
            /** Get or Set */
            dropDownButtonVisible: boolean;
            /** Set */
            spinButtonVisible: boolean;
            /** Get or Set */
            spinWheel: boolean;
            /** Get or Set */
            showClearButton: boolean;
            /** Get or Set */
            showHelpButton: boolean;
            /** Get or Set */
            showCopyButton: boolean;
            /** Get or Set */
            helpContent: string;
            /** Get or Set */
            copyMessage: string;
            /** Get or Set */
            copiedMessage: string;
            /** Get or Set */
            autoScale: boolean;
            /** Get or Set */
            minScaleFactor: number;
            /** Get */
            readonly componentName: string;
            /** Set */
            spinButton: SpinButtonAlignment;
            /** Get or Set */
            multipleItemSeparator: string;
            /** Get or Set */
            tabIndex: number;
            /** Get or Set */
            autoCompleteMode: AutoCompleteMode;
            /** Get or Set */
            autoCompleteMatchMode: AutoCompleteMatchMode;
            /** Get or Set */
            floatingLabelText: string;
            /** Get or Set */
            floatingLabelType: FloatingLabelType;
            /** Get or Set */
            floatingLabelDirection: FloatingLabelDirection;
            /** Get or Set */
            width: number | string;
            /** Get or Set */
            height: number | string;
            /** Get or Set */
            minWidth: number | string;
            /** Get or Set */
            minHeight: number | string;
            /** Get or Set */
            maxWidth: number | string;
            /** Get or Set */
            maxHeight: number | string;
            /** Get or Set */
            fontSize: number | string;
            /** Get */
            readonly dropDown: IDropDownContainer;
            /** Set */
            allowSpin: SpinType;
            /** Get or Set */
            checkBySpace: boolean;
            /** Get */
            readonly dropDownType: ComboDropDownType;
            /** Get */
            readonly displayMemberPath: string;
            /** Get */
            readonly valueMemberPath: string;
            /** Get or Set */
            dropDownTipTemplate: (context: ListBoxTipTemplateContext) => HTMLElement | string;
            /** Get or Set */
            itemCountInRow: number;
            /** Get */
            readonly dropDownList: GcListBox;
            /** Get */
            readonly dropDownTree: IComboBoxDropDownTree;
            /** Set */
            showContextMenu: boolean;

            destroy(): void;
            addEventListener(eventName: GcComboBoxEvent, func: (sender: this, eventArgs?: object) => void): void;
            removeEventListener(eventName: GcComboBoxEvent, func?: (sender: this, eventArgs?: object) => void): void;
            getSelectedIndex(): number;
            getSelectedItem(): object | string;
            getSelectedValue(): number | string | boolean | object;
            setSelectedIndex(index: number): void;
            setSelectedValue(value: number | string | boolean | object): void;
            setSelectedItem(item: object | string): void;
            getCheckedIndices(): number[];
            getCheckedItems(): object[];
            getCheckedValues(): number[] | string[] | boolean[] | object[];
            setCheckedIndices(indices: number[]): void;
            setCheckedValues(values: number[] | string[] | boolean[] | object[]): void;
            setCheckedItems(items: object[]): void;
            clearSelected(): void;
            clearChecked(): void;
            setItems(items: object[]): void;
            getItems(): number[] | string[] | boolean[] | object[];
            addItem(item: number | string | boolean | object, parentItem?: object): void;
            addItems(items: number[] | string[] | boolean[] | object[], parentItem?: object): void;
            insertItems(items: number[] | string[] | boolean[] | object[], start: number, parentItem?: object): void;
            clearItems(): void;
            insertItem(item: number | string | boolean | object, start: number, parentItem?: object): void;
            findString(str: string, start?: number, col?: string): number;
            findStringExact(str: string, start?: number, col?: string): number;
            findStringInAll(str: string, start?: number): number;
            findStringExactInAll(str: string, start?: number): number;
            setAllowDropDownResize(value: boolean): void;
            setAllowColumnResize(value: boolean): void;
            getDisplayText(): string;
            addSpinButton(leftSide: boolean): void;
            filter(filterInfos: FilterInfo[] | FilterFunc): void;
            sort(sortInfo: SortInfo | SortFunc | TreeViewSortFunc): void;
            setAutoFilter(type: AutoFilter): void;
            setAutoSelect(value: boolean): void;
            doSpinDown(increment?: number): void;
            doSpinUp(increment?: number): void;
            setEditable(value: boolean): void;
            setReadOnly(value: boolean): void;
            getReadOnly(): boolean;
            setWatermarkDisplayNullText(v: string): void;
            setWatermarkNullText(v: string): void;
            setAcceptsCrlf(v: CrLfMode): void;
            setEditMode(v: EditMode): void;
            setEllipsis(v: EllipsisMode): void;
            setEllipsisString(v: string): void;
            setExitOnLeftRightKey(v: ExitOnLeftRightKey): void;
            setHighlightText(v: boolean): void;
            getIsOverwrite(): boolean;
            setUseClipboard(v: boolean): void;
            setExitOnEnterKey(v: ExitKey): void;
            setShowTip(value: boolean): void;
            setEnabled(v: boolean): void;
            setVisible(v: boolean): void;
            updateColumnAutoFit(config: AutofitInfo[]): void;
            getDropDownWindow(): IDropDownContainer;
            setContainer(el: HTMLElement): void;
            setAutoDropDown(v: boolean): void;
            setDropDownButtonVisible(value: boolean): void;
            setText(text: string): void;
            setSpinWheel(v: boolean): void;
            setFocus(): void;
            setSelectionStart(value: number): void;
            selectAll(): void;
            getTargetControl(): GcInputManBase;
            setShowClearButton(v: boolean): void;
            setAutoScale(value: boolean): void;
            setMinScaleFactor(value: number): void;
            autoScaleText(): void;
            getDropDownColumnWidth(col: string): number | null;
            setDropDownColumnWidth(col: string, width: number | string): void;
            getHost(): HTMLElement;
        }

        export class ConfigurationManager {
            static getControls<T>(type?: IMControlType): T[];
            static registerAIService<T extends AI.IGcTextAssistantSupport>(requestAIFunc: AI.AIServiceFunc<T>): void;
            static applyGlobalSettings(settings: GlobalSettings): void;
        }

        export class GcDateTime extends GcInputManBase {
            constructor(inputEl: HTMLInputElement, config?: GcDateTimeConfig);

            /** Get or Set */
            selectionStart: number;
            /** Get */
            readonly isOverwrite: boolean;
            /** Get or Set */
            selectionLength: number;
            /** Get or Set */
            value: Date | string;
            /** Get or Set */
            number: number | string;
            /** Get or Set */
            text: string;
            /** Get or Set */
            selectedText: string;
            /** Get */
            readonly currentField: DateCursorPosition;
            /** Get */
            readonly displayText: string;
            /** Get or Set */
            acceptsCrlf: CrLfMode;
            /** Get or Set */
            clipContent: ClipContent;
            /** Get or Set */
            useClipboard: boolean;
            /** Get or Set */
            maxDate: Date | string;
            /** Get or Set */
            minDate: Date | string;
            /** Get or Set */
            formatPattern: string;
            /** Get or Set */
            spinIncrement: number;
            /** Get or Set */
            spinOnKeys: boolean;
            /** Get or Set */
            spinWheel: boolean;
            /** Get or Set */
            spinWrap: boolean;
            /** Get or Set */
            allowSpin: boolean | SpinType;
            /** Get or Set */
            displayFormatPattern: string;
            /** Get or Set */
            watermarkEmptyEraText: string;
            /** Get or Set */
            displayWatermarkEmptyEraText: string;
            /** Get or Set */
            watermarkNullText: string;
            /** Get or Set */
            watermarkDisplayNullText: string;
            /** Get or Set */
            promptChar: string;
            /** Get or Set */
            editMode: EditMode;
            /** Get or Set */
            AMDesignator: string;
            /** Get or Set */
            PMDesignator: string;
            /** Get or Set */
            twoDigitYearMax: number;
            /** Get or Set */
            hour12Mode: Hour12Mode;
            /** Get or Set */
            cursorPosition: DateCursorPosition;
            /** Get or Set */
            tabAction: TabAction;
            /** Get or Set */
            maxMinBehavior: MaxMinBehavior;
            /** Get or Set */
            highlightText: HighlightText;
            /** Get or Set */
            midnightAs24: boolean;
            /** Get or Set */
            exitOnLastChar: boolean;
            /** Get or Set */
            exitOnLeftRightKey: ExitOnLeftRightKey;
            /** Get or Set */
            showLiterals: ShowLiterals;
            /** Get or Set */
            adjustValueOnFocus: boolean;
            /** Get or Set */
            useTwoDigitYearMax: boolean;
            /** Get or Set */
            validateMode: ValidateMode;
            /** Get or Set */
            watermarkDisplayEmptyEraText: string;
            /** Get or Set */
            exitOnEnterKey: ExitKey;
            /** Set */
            spinButton: SpinButtonAlignment;
            /** Get or Set */
            autoConvert: boolean;
            /** Set */
            showContextMenu: boolean;
            /** Get */
            readonly dropDownCalendar: GcDropDownCalendar;

            setAcceptsCrlf(v: CrLfMode): void;
            setClipContent(v: ClipContent): void;
            setMaxDate(v: Date | string): void;
            setMinDate(v: Date | string): void;
            setValue(v: Date | string): void;
            getValue(): Date | null;
            setNumber(v: number | string): void;
            setFormatPattern(v: string): void;
            setSpinIncrement(v: number): void;
            setSpinOnKeys(v: boolean): void;
            setSpinWheel(v: boolean): void;
            setSpinWrap(v: boolean): void;
            setAllowSpin(v: boolean | SpinType): void;
            setDisplayFormatPattern(v: string): void;
            setWatermarkEmptyEraText(v: string): void;
            setDisplayWatermarkEmptyEraText(v: string): void;
            setPromptChar(v: string): void;
            setAMDesignator(v: string): void;
            setPMDesignator(v: string): void;
            setTwoDigitYearMax(v: number): void;
            setHour12Mode(v: Hour12Mode): void;
            setCursorPosition(v: DateCursorPosition): void;
            setTabAction(v: TabAction): void;
            setMaxMinBehavior(v: MaxMinBehavior): void;
            setHighlightText(v: HighlightText): void;
            setMidnightAs24(v: boolean): void;
            setShowLiterals(value: ShowLiterals): void;
            setAdjustValueOnFocus(value: boolean): void;
            setUseTwoDigitYearMax(value: boolean): void;
            setValidateMode(value: ValidateMode): void;
            setWatermarkDisplayEmptyEraText(value: string): void;
            doSpinDown(param1?: number, param2?: number): void;
            doSpinUp(param1?: number, param2?: number): void;
            getNumber(): number;
            getCurrentField(): DateCursorPosition;
            addSpinButton(alignment: SpinButtonAlignment): void;
            onInvalidRange(f: (sender: this) => void): void;
            removeInvalidRange(f: (sender: this) => void): void;
            onInvalidValue(f: (sender: this) => void): void;
            removeInvalidValue(f: (sender: this) => void): void;
            onNumberChanged(f: (sender: this) => void): void;
            removeNumberChanged(f: (sender: this) => void): void;
            onValueChanged(f: (sender: this) => void): void;
            removeValueChanged(f: (sender: this) => void): void;
            addDropDown(
                dropdownButtonAlignment: DropDownButtonAlignment,
                type?: DateDropDownType,
                config?: GcDateTimeCalendarConfig | GcDateTimeDropDownPickerConfig | GcDateTimeCalendarPickerConfig
            ): void;
            addDropDownCalendar(dropdownButtonAlignment?: DropDownButtonAlignment): void;
            getDropDownCalendar(): GcDropDownCalendar;
        }

        export class GcDateTimePicker {
            constructor(eleHtml: HTMLElement, pickerConfig?: PickerConfig);

            /** Get or Set */
            value: Date;
            /** Get or Set */
            visible: boolean;
            /** Get or Set */
            maxDate: Date | string | number;
            /** Get or Set */
            minDate: Date | string | number;
            /** Get or Set */
            pickerType: PickerType;
            /** Get or Set */
            secondsInterval: Interval;
            /** Get or Set */
            minuteInterval: Interval;
            /** Get or Set */
            enabled: boolean;
            /** Get or Set */
            isShowSeconds: boolean;
            /** Get or Set */
            isShowMidnightAs24: boolean;
            /** Get */
            readonly componentName: string;

            destroy(): void;
            getHost(): HTMLElement;
            setVisible(visible: boolean): void;
            addEventListener(eventType: GcDateTimePickerEvent, func: (sender?: this, args?: GcDateTimePickerEventArgs) => void): void;
            removeEventListener(eventType: GcDateTimePickerEvent, func: (sender?: this, args?: GcDateTimePickerEventArgs) => void): void;
            setMaxDate(maxDate: Date | string | number): void;
            setMinDate(minDate: Date | string | number): void;
            setPickerType(type: PickerType): void;
            showSeconds(v: boolean): void;
            getValue(): Date;
            setValue(date: Date): void;
            showMidnightAs24(value: boolean): void;
            setSecondsInterval(interval: Interval): void;
            setMinuteInterval(interval: Interval): void;
            setEnabled(value: boolean): void;
        }

        export abstract class DropDownBase {
            constructor(dropDownContainer: IDropDownContainer);
        }

        export class GcDropDownSlider extends DropDownBase {
            constructor(dropDownOwner: IDropDownSliderOwner, dropDownContainer: IDropDownContainer, config?: IGcDropDownSliderConfig);

            /** Get or Set */
            min: number;
            /** Get or Set */
            max: number;
            /** Get or Set */
            step: number | null;
            /** Get or Set */
            marks: number[];
            /** Get or Set */
            valueChangeMode: SliderValueChangeMode;
            /** Get or Set */
            direction: SliderDirection;
            /** Get or Set */
            showMarkLabel: boolean;
            /** Get or Set */
            markLabelFormat: FormatFunction;
            /** Get or Set */
            markLabelPosition: SliderTooltipPosition;
            /** Get or Set */
            tooltipShowMode: SliderTooltipShowMode;
            /** Get or Set */
            tooltipFormat: FormatFunction;
            /** Get or Set */
            tooltipPosition: SliderTooltipPosition;
            /** Get or Set */
            showMarkTip: boolean;
            /** Get or Set */
            markTipFormat: FormatFunction;
            /** Get or Set */
            keyStep: number;
            /** Get or Set */
            width: string | number;
            /** Get or Set */
            height: string | number;
        }

        export class GcDropDown {
            /** Get or Set */
            static animationType: DropDownAnimationType;
            /** Get or Set */
            static appendDropDownToBody: boolean;
        }

        export class GcDropDownCalendar extends DropDownBase {
            constructor(dropDownOwner: IDropDownOwner, dropDownContainer: IDropDownContainer, config?: GcDateTimeCalendarConfig);

            /** Get or Set */
            calendarDimensions: Dimensions;
            /** Get */
            readonly selectedDate: Date;
            /** Get or Set */
            focusDate: Date;
            /** Get */
            readonly holidayGroupsCount: number;
            /** Get or Set */
            maxDate: Date;
            /** Get or Set */
            minDate: Date;
            /** Get or Set */
            defaultDate: Date | null;
            /** Get or Set */
            allowSelection: AllowSelection;
            /** Get or Set */
            emptyRows: EmptyRows;
            /** Get or Set */
            firstDayOfWeek: DayOfWeek;
            /** Get or Set */
            firstMonthInView: Months;
            /** Get or Set */
            yearMonthFormat: string;
            /** Get or Set */
            headerFormat: string;
            /** Get or Set */
            showZoomButton: boolean;
            /** Get or Set */
            showRokuyou: Rokuyou;
            /** Get or Set */
            showHeader: boolean;
            /** Get or Set */
            showToday: boolean;
            /** Get or Set */
            showWeekNumber: boolean;
            /** Get or Set */
            showTrailing: boolean;
            /** Get or Set */
            calendarType: CalendarType;
            /** Get */
            readonly calendarZoomRange: CalendarZoomRange | CalendarType[];
            /** Get or Set */
            showNavigator: CalendarNavigators;
            /** Get or Set */
            navigatorOrientation: NavigatorOrientation;
            /** Get or Set */
            overrideTipText: string;
            /** Set */
            showContextMenu: boolean;
            /** Get or Set */
            autoSwitch: boolean;
            /** Get or Set */
            width: number | string;
            /** Get or Set */
            height: number | string;
            /** Get or Set */
            allowResize: boolean;
            /** Get or Set */
            minWidth: number | string;
            /** Get or Set */
            minHeight: number | string;
            /** Get or Set */
            maxWidth: number | string;
            /** Get or Set */
            maxHeight: number | string;

            getValue(): Date;
            setValue(v: Date): void;
            toggleOpen(showAnimation?: boolean): void;
            close(showAnimation?: boolean): void;
            open(): void;
            getElement(): HTMLElement;
            getSelectedDate(): Date;
            setFocusDate(value: Date): void;
            getFocusDate(): Date;
            setMaxDate(value: Date): void;
            setMinDate(value: Date): void;
            setAllowSelection(value: AllowSelection): void;
            setEmptyRows(value: EmptyRows): void;
            setFirstDayOfWeek(value: DayOfWeek): void;
            setFirstMonthInView(value: Months): void;
            setYearMonthFormat(value: string): void;
            setHeaderFormat(value: string): void;
            setShowZoomButton(value: boolean): void;
            setShowRokuyou(value: Rokuyou): void;
            setShowHeader(value: boolean): void;
            setShowToday(value: boolean): void;
            setShowWeekNumber(value: boolean): void;
            setShowTrailing(value: boolean): void;
            setCalendarType(value: CalendarType, ignoreAnimation?: boolean): void;
            setCalendarDimensions(width: number, height: number): void;
            setShowNavigator(value: CalendarNavigators): void;
            setNavigatorOrientation(value: NavigatorOrientation): void;
            setOverrideTipText(value: string): void;
            getHolidayGroup(indexOrName: string): HolidayGroup;
            getHolidayGroupsCount(): number;
            addHolidayGroup(item: HolidayGroup): void;
            clearHolidayGroups(): void;
            getHolidayGroupIndex(item: HolidayGroup): number;
            insertHolidayGroup(index: number, item: HolidayGroup): void;
            removeHolidayGroup(item: HolidayGroup): void;
            removeHolidayGroupAt(index: number): void;
            loadHolidayFromUrl(url: string, config?: LoadHolidayConfig): Promise<HolidayGroup[]>;
            loadHolidayFromContent(content: string, config?: LoadHolidayConfig): HolidayGroup[];
            getWeekday(weekday: string): WeekDay;
            onScrolled(callback: (sender: this, eArgs: object) => void): void;
            onFocusDateChanged(callback: (sender: this, eArgs: object) => void): void;
            onClickDate(callback: (sender: this, eArgs: object) => void): void;
            onSelectedDateChanged(callback: (sender: this, eArgs: object) => void): void;
            removeSelectedDateChanged(callback: (sender: this, eArgs: object) => void): void;
        }

        export class GcDropDownCalendarPicker extends DropDownBase {
            constructor(dropDownOwner: IDropDownOwner, dropDownContainer: IDropDownContainer, config?: GcDateTimeCalendarPickerConfig);

            /** Get */
            readonly selectedDate: Date;
            /** Get */
            readonly holidayGroupsCount: number;
            /** Get or Set */
            maxDate: Date;
            /** Get or Set */
            minDate: Date;
            /** Get or Set */
            defaultDate: Date | null;
            /** Get or Set */
            allowSelection: AllowSelection;
            /** Get or Set */
            emptyRows: EmptyRows;
            /** Get or Set */
            firstDayOfWeek: DayOfWeek;
            /** Get or Set */
            yearMonthFormat: string;
            /** Get or Set */
            headerFormat: string;
            /** Get or Set */
            showZoomButton: boolean;
            /** Get or Set */
            showRokuyou: Rokuyou;
            /** Get or Set */
            showWeekNumber: boolean;
            /** Get or Set */
            showTrailing: boolean;
            /** Get or Set */
            calendarType: CalendarType;
            /** Get */
            readonly calendarZoomRange: CalendarZoomRange | CalendarType[];
            /** Get or Set */
            overrideTipText: string;
            /** Get or Set */
            autoSwitch: boolean;
            /** Get or Set */
            width: number | string;
            /** Get or Set */
            height: number | string;
            /** Get or Set */
            allowResize: boolean;
            /** Get or Set */
            minWidth: number | string;
            /** Get or Set */
            minHeight: number | string;
            /** Get or Set */
            maxWidth: number | string;
            /** Get or Set */
            maxHeight: number | string;
            /** Get or Set */
            secondsInterval: number;
            /** Get or Set */
            minuteInterval: number;
            /** Get */
            readonly showSecond: boolean;

            getValue(): Date;
            setValue(v: Date): void;
            toggleOpen(showAnimation?: boolean): void;
            close(showAnimation?: boolean): void;
            open(showAnimation?: boolean): void;
            getElement(): HTMLElement;
            onSelectedDateChanged(callback: (sender: this, eArgs: object) => void): void;
            removeSelectedDateChanged(callback: (sender: this, eArgs: object) => void): void;
            getHolidayGroup(indexOrName: string): HolidayGroup;
            getHolidayGroupsCount(): number;
            addHolidayGroup(item: HolidayGroup): void;
            clearHolidayGroups(): void;
            getHolidayGroupIndex(item: HolidayGroup): number;
            insertHolidayGroup(index: number, item: HolidayGroup): void;
            removeHolidayGroup(item: HolidayGroup): void;
            removeHolidayGroupAt(index: number): void;
            loadHolidayFromUrl(url: string, config?: LoadHolidayConfig): Promise<HolidayGroup[]>;
            loadHolidayFromContent(content: string, config?: LoadHolidayConfig): HolidayGroup[];
            getWeekday(weekday: string): WeekDay;
        }

        export class GcDropDownPicker extends DropDownBase {
            constructor(dropDownOwner: IDropDownOwner, dropDownContainer: IDropDownContainer, pickerConfig?: GcDateTimeDropDownPickerConfig);

            /** Get or Set */
            selectedDate: Date;
            /** Get or Set */
            maxDate: Date;
            /** Get or Set */
            minDate: Date;
            /** Get or Set */
            defaultDate: Date | null;
            /** Get or Set */
            pickerType: PickerType;
            /** Get or Set */
            minuteInterval: Interval;
            /** Get or Set */
            secondsInterval: Interval;
            /** Get or Set */
            enabled: boolean;

            getValue(): Date;
            setValue(v: Date): void;
            toggleOpen(showAnimation?: boolean): void;
            onSelectedDateChanged(callback: (sender: this) => void): void;
            setSelectedDate(value: Date): void;
            close(showAnimation?: boolean): void;
            open(): void;
            getElement(): HTMLElement;
            getSelectedDate(): Date;
            setMaxDate(value: Date): void;
            setMinDate(value: Date): void;
            setPickerType(type: PickerType): void;
            setMinuteInterval(interval: Interval): void;
            setSecondsInterval(interval: Interval): void;
            setEnabled(value: boolean): void;
        }

        /**
         * Represents a component without layout for users to preserving form values across page refreshes and multiple sessions.
         */
        export class GcFormPersistence {
            /**
             * Initializes a new instance of {@Link GcFormPersistence} class.
             * @param element The Dom element that FormPersistence working on.
             * @param config The JavaScript object containing initialization data for FormPersistence.
             */
            constructor(form: HTMLElement, config?: GcFormPersistenceConfig);

            /** Get or Set */
            /**
             * A unique identifier for this form's storage key.
             * Required if using a form without an id. If unspecified, form id will be used.
             */
            id: string;
            /** Get or Set */
            /**
             * Indicate use sessionStorage or localStorage to store data, check {@Link StorageMode}
             */
            storageMode: StorageMode;
            /** Get or Set */
            /**
             * Indicate save data to storage on refresh or on submit, check {@Link SaveMode}
             */
            saveMode: SaveMode;
            /** Get */
            /**
             * Get GCIM component name.
             */
            readonly componentName: string;

            destroy(): void;
            /**
             * Persist form data.
             */
            persist(): void;
            /**
             * Cancel persist form data.
             */
            unPersist(): void;
            /**
             * Get value by name from storage.
             * @param name Indicate a unique name for the data in storage.
             */
            getValue(name: string): object;
            /**
             * Set value to storage.
             * @param name Indicate a unique name for the data in storage.
             * @param value Indicate the value of this key in storage.
             */
            setValue(name: string, value: object): void;
            /**
             * Clear storage from localStorage or sessionStorage.
             */
            clearStorage(): void;
            /**
             * Indicate if skip current element.
             */
            skip(f: (element: HTMLElement) => boolean): void;

            /**
             * FormPersistence should support controls from different product, like IMJS, Wijmo or any other thirdparty component,
             * so we allow thirdparty register an editor to FormPersistence, and make sure we can get value(save data to storage)
             * and set value(recovery data from storage) to their controls.
             * @param IThirdPartyEditor an instance which inherit from {@link IThirdPartyEditor}.
             */
            static registerEditor(editor: IThirdpartyEditor): void;
        }

        export class GcFunctionKey {
            constructor(ele: HTMLDivElement, config?: FunctionKeyConfig);

            /** Get or Set */
            keyRepeat: boolean;
            /** Get or Set */
            handleMouse: boolean;
            /** Get or Set */
            showTip: boolean;
            /** Get or Set */
            combinationKeyDisplayMode: CombinationKeyDisplayMode;
            /** Get */
            readonly componentName: string;
            /** Get or Set */
            visible: boolean;
            /** Get or Set */
            enabled: boolean;

            getHost(): HTMLElement;
            addFunctionKey(...infos: Array<FunctionKey | FunctionKeyInfo | ActivateCallBack>): void;
            removeFunctionKey(...removeItems: Array<FunctionKey>): void;
            onActived(callBack: ActivateCallBack): void;
            setEnabled(value: boolean, key?: FunctionKey): void;
            setVisible(value: boolean, key?: FunctionKey): void;
            destroy(): void;
        }

        export class GcListBox {
            constructor(ele: HTMLSelectElement | HTMLInputElement | HTMLElement, option?: ListBoxConfig);

            /** Get */
            readonly checkedItems: object[] | string[];
            /** Get or Set */
            checkedIndices: number[];
            /** Get */
            readonly selectedItems: object[] | string[];
            /** Get */
            readonly selectedItem: object | string;
            /** Get or Set */
            selectedIndices: number[];
            /** Get or Set */
            selectedIndex: number;
            /** Get */
            readonly selectedValues: number[] | string[] | boolean[] | object[];
            /** Get */
            readonly selectedValue: number | string | boolean | object;
            /** Get or Set */
            items: object[] | string[];
            /** Get or Set */
            checkedIndex: number;
            /** Get or Set */
            visibleItemCount: number;
            /** Get or Set */
            itemCountInRow: number;
            /** Get or Set */
            columns: ColumnConfig[];
            /** Get or Set */
            virtualMode: boolean;
            /** Get or Set */
            overflow: ScrollBars;
            /** Get or Set */
            allowResize: boolean;
            /** Get or Set */
            selectionMode: ListBoxSelectionMode;
            /** Get or Set */
            itemHeight: number;
            /** Get or Set */
            checkOnClick: boolean;
            /** Get or Set */
            allowColumnResize: boolean;
            /** Get or Set */
            visible: boolean;
            /** Get or Set */
            showTip: boolean;
            /** Get or Set */
            enabled: boolean;
            /** Get or Set */
            readOnly: boolean;
            /** Get */
            readonly componentName: string;
            /** Get or Set */
            dragDrop: boolean;
            /** Get or Set */
            dragSource: ListBoxDragSource;
            /** Get or Set */
            findStringFilterComparator: FilterComparator;
            /** Get or Set */
            tipTemplate: (context: ListBoxTipTemplateContext) => HTMLElement | string;
            /** Get */
            readonly displayMode: ListBoxDisplayMode;
            /** Get */
            readonly treeView: ITreeView;

            destroy(): void;
            addEventListener(eventName: GcListBoxEvent, func: (sender: this, eventArgs?: object) => void): void;
            removeEventListener(eventName: GcListBoxEvent, func?: (sender: this, eventArgs?: object) => void): void;
            getHost(): HTMLElement;
            filter(filterInfos: FilterInfo[] | FilterFunc): void;
            sort(sortInfo: SortInfo | SortFunc | TreeViewSortFunc): void;
            getCheckedItems(): object[] | string[];
            getCheckedIndices(): number[];
            setCheckedIndices(indices: number[]): void;
            setCheckedIndex(index: number): void;
            clearChecked(): void;
            getSelectedItems(): object[] | string[];
            getSelectedItem(): object | string;
            getSelectedIndices(): number[];
            getSelectedIndex(): number;
            setSelectedIndices(indices: number[]): void;
            setSelectedIndex(index: number): void;
            clearSelected(): void;
            getSelectedValues(): number[] | string[] | boolean[] | object[];
            getSelectedValue(): number | string | boolean | object;
            findString(str: string, start?: number, col?: string): number;
            findStringExact(str: string, start?: number, col?: string): number;
            findStringInAll(str: string, start?: number): number;
            findStringExactInAll(str: string, start?: number): number;
            layout(): void;
            refresh(): void;
            focus(): void;
            resize(height: number, width: number): void;
            resizeWidth(width: number): void;
            resizeHeight(height: number): void;
            setItems(items: object[] | string[]): void;
            getItems(): string[] | object[];
            addItem(item: object | string, parentItem?: object): void;
            addItems(items: object[] | string[], parentItem?: object): void;
            insertItem(item: object | string, start: number, parentItem?: object): void;
            insertItems(items: object[] | string[], start: number, parentItem?: object): void;
            clearItems(): void;
            setVisibleItemCount(num: number): void;
            setColumns(cols: ColumnConfig[]): void;
            addColumn(col: ColumnConfig, insertIndex?: number): void;
            deleteColumn(name: string): void;
            setVirtualMode(value: boolean): void;
            setOverflow(value: ScrollBars): void;
            setAllowResize(value: boolean): void;
            setSelectionMode(mode: ListBoxSelectionMode): void;
            updateColumnWidth(col: string, width: number | string): void;
            updateColumnAutoFit(config: AutofitInfo[]): void;
            setItemHeight(height: number): void;
            setCheckOnClick(value: boolean): void;
            setAllowColumnResize(value: boolean): void;
            setVisible(value: boolean): void;
            setShowTip(value: boolean): void;
            setEnabled(value: boolean): void;
            setReadOnly(value: boolean): void;
        }

        export class GcMask extends GcInputManBase {
            constructor(inputEl: HTMLInputElement, config?: GcMaskConfig);

            /** Get */
            readonly isOverwrite: boolean;
            /** Get or Set */
            selectionLength: number;
            /** Get or Set */
            selectionStart: number;
            /** Get or Set */
            text: string;
            /** Get or Set */
            value: string;
            /** Get or Set */
            selectedText: string;
            /** Get */
            readonly valueIsFull: boolean;
            /** Get */
            readonly displayText: string;
            /** Get */
            readonly currentField: number;
            /** Get or Set */
            acceptsCrlf: CrLfMode;
            /** Get or Set */
            acceptsTabChar: TabCharMode;
            /** Get or Set */
            autoConvert: boolean;
            /** Get or Set */
            clipContent: ClipContent;
            /** Get or Set */
            exitOnLastChar: boolean;
            /** Get or Set */
            editMode: EditMode;
            /** Get or Set */
            exitOnLeftRightKey: ExitOnLeftRightKey;
            /** Get or Set */
            cursorPosition: number;
            /** Get or Set */
            formatPattern: string;
            /** Get or Set */
            watermarkDisplayNullText: string;
            /** Get or Set */
            highlightText: HighlightText;
            /** Get or Set */
            promptChar: string;
            /** Get or Set */
            showLiterals: ShowLiterals;
            /** Get or Set */
            tabAction: TabAction;
            /** Get or Set */
            watermarkNullText: string;
            /** Get or Set */
            useClipboard: boolean;
            /** Get or Set */
            allowSpin: boolean | SpinType;
            /** Get or Set */
            exitOnEnterKey: ExitKey;
            /** Get or Set */
            spinWheel: boolean;
            /** Get or Set */
            spinOnKeys: boolean;
            /** Set */
            spinButton: SpinButtonAlignment;
            /** Set */
            showContextMenu: boolean;

            setAcceptsCrlf(v: CrLfMode): void;
            setAutoConvert(v: boolean): void;
            setClipContent(v: ClipContent): void;
            setCursorPosition(v: number): void;
            setFormatPattern(v: string): void;
            setValue(v: string): void;
            setHighlightText(v: HighlightText): void;
            setPromptChar(v: string): void;
            setShowLiterals(v: ShowLiterals): void;
            setTabAction(v: TabAction): void;
            getValue(): string;
            getValueIsFull(): boolean;
            getCurrentField(): number;
            onTextChanging(f: (sender: this, eventArgs: InputChangingEventArgs) => void): void;
            removeTextChanging(f: (sender: this, eventArgs: InputChangingEventArgs) => void): void;
            addSpinButton(alignment: SpinButtonAlignment): void;
            setAllowSpin(v: boolean | SpinType): void;
            onValueChanged(f: (sender: this) => void): void;
            removeValueChanged(f: (sender: this) => void): void;
            setSpinWheel(value: boolean): void;
            setSpinOnKeys(value: boolean): void;
        }

        export class GcNumber extends GcInputManBase {
            constructor(inputEl: HTMLInputElement, config?: GcNumberConfig);

            /** Get or Set */
            selectedText: string;
            /** Get */
            readonly displayText: string;
            /** Get or Set */
            selectionStart: number;
            /** Get */
            readonly isOverwrite: boolean;
            /** Get or Set */
            selectionLength: number;
            /** Get or Set */
            value: number;
            /** Get or Set */
            text: string;
            /** Get or Set */
            exitOnLeftRightKey: ExitOnLeftRightKey;
            /** Get or Set */
            watermarkDisplayNullText: string;
            /** Get or Set */
            watermarkNullText: string;
            /** Get or Set */
            watermarkZeroText: string;
            /** Get or Set */
            acceptsCrlf: CrLfMode;
            /** Get or Set */
            clipContent: ClipContent;
            /** Get or Set */
            useClipboard: boolean;
            /** Get or Set */
            formatDigit: string;
            /** Get or Set */
            displayFormatDigit: string;
            /** Get or Set */
            maxValue: string | number;
            /** Get or Set */
            minValue: string | number;
            /** Get or Set */
            positivePrefix: string;
            /** Get or Set */
            displayPositivePrefix: string;
            /** Get or Set */
            positiveSuffix: string;
            /** Get or Set */
            displayPositiveSuffix: string;
            /** Get or Set */
            negativePrefix: string;
            /** Get or Set */
            displayNegativePrefix: string;
            /** Get or Set */
            negativeSuffix: string;
            /** Get or Set */
            displayNegativeSuffix: string;
            /** Get or Set */
            valueSign: ValueSign;
            /** Get or Set */
            editMode: EditMode;
            /** Get or Set */
            adjustValueOnFocus: boolean;
            /** Get or Set */
            allowDeleteToNull: boolean;
            /** Get or Set */
            clearAction: ClearModeAction;
            /** Get or Set */
            acceptsDecimal: DecimalMode;
            /** Get or Set */
            currencySymbol: string;
            /** Get or Set */
            decimalPoint: string;
            /** Get or Set */
            maxMinBehavior: MaxMinBehavior;
            /** Get or Set */
            separator: string;
            /** Get or Set */
            highlightText: boolean;
            /** Get or Set */
            watermarkDisplayZeroText: string;
            /** Get or Set */
            spinOnKeys: boolean;
            /** Get or Set */
            spinWheel: boolean;
            /** Get or Set */
            spinWrap: boolean;
            /** Get or Set */
            allowSpin: boolean | SpinType;
            /** Get or Set */
            exitOnEnterKey: ExitKey;
            /** Set */
            spinButton: SpinButtonAlignment;
            /** Get */
            readonly slider: INumberSlider;
            /** Get */
            readonly dropDownSlider: GcDropDownSlider;
            /** Set */
            spinFromZeroWhenValueIsNull: boolean;
            /** Get or Set */
            autoConvert: boolean;
            /** Set */
            showContextMenu: boolean;

            setExitOnLeftRightKey(v: ExitOnLeftRightKey): void;
            setWatermarkZeroText(value: string): void;
            setAcceptsCrlf(v: CrLfMode): void;
            setClipContent(v: ClipContent): void;
            setFormatDigit(v: string): void;
            setDisplayFormatDigit(v: string): void;
            setMaxValue(v: string | number): void;
            setMinValue(v: string | number): void;
            setPositivePrefix(v: string): void;
            setDisplayPositivePrefix(v: string): void;
            setPositiveSuffix(v: string): void;
            setDisplayPositiveSuffix(v: string): void;
            setNegativePrefix(v: string): void;
            setDisplayNegativePrefix(v: string): void;
            setNegativeSuffix(v: string): void;
            setDisplayNegativeSuffix(v: string): void;
            setValueSign(v: ValueSign): void;
            setValue(v: number | string): void;
            setAdjustValueOnFocus(v: boolean): void;
            setAllowDeleteToNull(v: boolean): void;
            setClearAction(v: ClearModeAction): void;
            setAcceptsDecimal(v: DecimalMode): void;
            setCurrencySymbol(v: string): void;
            setDecimalPoint(v: string): void;
            setMaxMinBehavior(v: MaxMinBehavior): void;
            setSeparator(v: string): void;
            setHighlightText(v: boolean): void;
            getValue(): number | null;
            doSpinDown(param1?: number, param2?: number): void;
            doSpinUp(param1?: number, param2?: number): void;
            setWatermarkDisplayZeroText(value: string): void;
            addSpinButton(alignment: SpinButtonAlignment): void;
            setSpinOnKeys(v: boolean): void;
            setSpinWheel(v: boolean): void;
            setSpinIncrement(v: number): void;
            setSpinWrap(v: boolean): void;
            setAllowSpin(value: boolean | SpinType): void;
            onInvalidRange(callBack: (sender: this) => void): void;
            removeInvalidRange(f: (sender: this) => void): void;
            onValueChanged(callBack: (sender: this) => void): void;
            removeValueChanged(f: (sender: this) => void): void;
            destroy(): void;
            addDropDownNumericPad(dropDownButtonAlignment?: DropDownButtonAlignment): this;
            addDropDownCalculator(dropDownButtonAlignment?: DropDownButtonAlignment, calculatorConfig?: GcCalculatorConfig, asPopup?: boolean): this;
            addDropDownSlider(dropDownButtonAlignment?: DropDownButtonAlignment, sliderConfig?: IGcDropDownSliderConfig): this;
        }

        export class GcShortcut {
            constructor();

            /** Get or Set */
            blockMessage: boolean;
            /** Get or Set */
            triggerAll: boolean;

            destroy(): void;
            add(args: ShortcutKeyActionArgs): void;
            remove(args: RemoveShortcutKeyActionArgs): void;
            addEventListener(evtName: GcShortcutEvent, func: (sender: this, eventArgs: object) => void): void;
            removeEventListener(evtName: GcShortcutEvent, func?: (sender: this, eventArgs: object) => void): void;
        }

        /**
         * Represents a control for layout a software keyboard for users to input by mouse operation instead of hardware keyboard GcSoftKeyboard.
         */
        export class GcSoftKeyboard {
            /**
             * Create an instance of GcSoftKeyboard.
             * @param container indicate the container of GcSoftKeyboard.
             * @param config indicate GcSoftKeyboard settings.
             */
            constructor(container: HTMLElement, config?: GcSoftKeyboardConfig);

            /** Get */
            /**
             * Get GCIM component name.
             */
            readonly componentName: string;
            /** Get or Set */
            /**
             * Indicate whether show all keys as random sort.
             * The default value for this property is <b>false</b>.
             */
            randomDisplay: boolean;
            /** Get or Set */
            /**
             * Indicate whether hide button key value when mouse is on.
             * The default value for this property is <b>false</b>.
             */
            hideButtonWhenMouseOn: boolean;
            /** Get or Set */
            /**
             * Get or set which kind of keys should be display in this control.
             * The default value for this property is <b>DisplayType.All</b>.
             */
            displayType: DisplayType;
            /** Get or Set */
            /**
             * Indicate whether show alphabet keys in q w e r t y sequence.
             * If this property is true, randomDisplay will not affect the display sequence.
             * The default value for this property is <b>false</b>.
             */
            qwertyLayout: boolean;
            /** Get or Set */
            /**
             * Indicate whether current control is enabled.
             * The default value for this property is <b>true</b>.
             */
            enabled: boolean;
            /** Get or Set */
            /**
             * Indicate whether display security option area in current control.
             * The default value for this property is <b>true</b>.
             */
            showSecurityOptions: boolean;
            /** Get or Set */
            /**
             * Get or set security level, high or low, see {@link SecurityLevel}.
             * The default value for this property is <b>SecurityLevel.Low</b>.
             */
            securityLevel: SecurityLevel;
            /** Get or Set */
            /**
             * Get or set which element soft keyboard will works on.
             */
            target: HTMLInputElement;
            /** Get or Set */
            /**
             * Indicate whether show capital letters and small letters at same time.
             * The default value for this property is <b>true</b>.
             */
            showCapitalLetters: boolean;
            /** Get */
            /**
             * Get all numeric keys which displayed in current control.
             */
            readonly numericKeys: IKeyCollection;
            /** Get */
            /**
             * Get all alphabet keys which displayed in current control.
             */
            readonly alphabetKeys: IKeyCollection;
            /** Get */
            /**
             * Get all symbol keys which displayed in current control.
             */
            readonly symbolKeys: IKeyCollection;

            destroy(): void;
            /**
             * Render GcSoftKeyboard layout again.
             */
            layout(): void;
            /**
             * Open GcSoftKeyboard.
             */
            open(): void;
            /**
             * Close GcSoftKeyboard.
             */
            close(): void;
            /**
             * Add event listener for GcSoftKeyboard.
             * @param eventName Indicate {@link GcSoftKeyboardEvent} name.
             * @param func Indicate callback function.
             */
            addEventListener(eventName: GcSoftKeyboardEvent, func: (sender: this, eventArgs?: object) => void): void;
            /**
             * Remove event listener for GcSoftKeyboard.
             * @param eventName Indicate {@link GcSoftKeyboardEvent} name.
             * @param func Indicate callback function.
             */
            removeEventListener(eventName: GcSoftKeyboardEvent, func?: (sender: this, eventArgs?: object) => void): void;
            getHost(): HTMLElement;
        }

        export class GcStepper {
            constructor(el: HTMLElement, config: GcStepperConfig);

            /** Get */
            readonly componentName: string;
            /** Get or Set */
            orientation: StepperOrientation;
            /** Get or Set */
            stepType: StepperStepType;
            /** Get or Set */
            labelPosition: StepperLabelPosition;
            /** Get or Set */
            headerPosition: StepperHeaderPosition;
            /** Get or Set */
            linear: boolean;
            /** Get */
            readonly activeIndex: number;
            /** Get */
            readonly length: number;
            /** Get or Set */
            width: number | string;
            /** Get or Set */
            height: number | string;
            /** Get or Set */
            readOnly: boolean;
            /** Get or Set */
            enabled: boolean;
            /** Get or Set */
            visible: boolean;
            /** Get or Set */
            animation: boolean;
            /** Get */
            readonly steps: IStepperStep[];

            addEventListener(eventName: GcStepperEvent, func: (sender: this, eventArgs?: object) => void): void;
            removeEventListener(eventName: GcStepperEvent, func?: (sender: this, eventArgs?: object) => void): void;
            goTo(index: number): void;
            next(): void;
            previous(): void;
            getHost(): HTMLElement;
            destroy(): void;
        }

        export class GcTagBox {
            constructor(ele: HTMLElement, option?: TagBoxConfig);

            /** Get */
            readonly componentName: string;
            /** Get */
            readonly items: object[] | string[];
            /** Get */
            readonly tagImageMemberPath: string | null;
            /** Get */
            readonly tagTextMemberPath: string | null;
            /** Get */
            readonly autoFilter: AutoFilter | null;
            /** Get or Set */
            readOnly: boolean;
            /** Get or Set */
            enabled: boolean;
            /** Get or Set */
            value: (object | string)[];
            /** Get or Set */
            text: string;
            /** Get or Set */
            imageAlignment: GcTagImageAlignment;
            /** Get or Set */
            showDropDownIfNoItems: boolean;
            /** Get or Set */
            container: HTMLElement;
            /** Get or Set */
            width: number | string;
            /** Get or Set */
            height: number | string;
            /** Get or Set */
            watermarkNullText: string;
            /** Get or Set */
            watermarkDisplayNullText: string;
            /** Get */
            readonly tagTemplate: string | ((args: any) => HTMLElement);
            /** Get or Set */
            displayMode: TagBoxDisplayMode;
            /** Get or Set */
            allowCopyTag: boolean;
            /** Get */
            readonly allowDragTag: boolean;
            /** Get or Set */
            allowSelectTag: boolean;
            /** Get or Set */
            allowCustomTag: boolean;
            /** Get or Set */
            applyCustomTagKey: Key;
            /** Get or Set */
            separator: string;
            /** Get */
            readonly focused: boolean;
            /** Get */
            readonly showImage: boolean;
            /** Get or Set */
            minHeight: number | string;
            /** Get or Set */
            minWidth: number | string;
            /** Get or Set */
            maxHeight: number | string;
            /** Get or Set */
            maxWidth: number | string;
            /** Get or Set */
            tagValidator: (args: any) => boolean;
            /** Get */
            readonly allowDropDownResize: boolean;
            /** Get */
            readonly dropDownDisplayMemberPath: string;
            /** Get or Set */
            dropDownAlignmentMode: GcTagBoxDropDownAlignmentMode;
            /** Get */
            readonly maxTagWidth: number;
            /** Get */
            readonly uniqueTags: boolean;
            /** Get or Set */
            autoSelect: boolean;
            /** Get */
            readonly maxTagCount: number;
            /** Get */
            readonly tagsCount: number;
            /** Get or Set */
            showDropDown: boolean;
            /** Get or Set */
            allowResize: boolean;
            /** Get or Set */
            floatingLabelText: string;
            /** Get or Set */
            floatingLabelType: FloatingLabelType;
            /** Get or Set */
            floatingLabelDirection: FloatingLabelDirection;
            /** Get or Set */
            appendCustomTagToDropDown: boolean;
            /** Get */
            readonly dropDownTree: ITagBoxDropDownTree;
            /** Get */
            readonly dropDownType: TagBoxDropDownType;
            /** Get or Set */
            helpContent: string;
            /** Get or Set */
            showHelpButton: boolean;
            /** Get or Set */
            showClearButton: boolean;
            /** Get or Set */
            dropDownItemCountInRow: number;

            destroy(): void;
            addEventListener(eventName: GcTagBoxEvent, func: (sender: this, eventArgs?: object) => void): void;
            removeEventListener(eventName: GcTagBoxEvent, func: (sender: this, eventArgs?: object) => void): void;
            insertTag(tag: any, index: number): boolean;
            removeTagAtIndex(index: number): boolean;
            getElement(): HTMLElement;
            getHost(): HTMLElement;
            getDropDownWindow(): ITagBoxDropDown;
            clear(): boolean;
            appendTag(tag: any): boolean;
            getDropDownWidth(): number;
            getDropDownHeight(): number;
        }

        export class GcMultiLineTextBox extends GcInputManBase implements AI.IGcTextAssistantSupport {
            constructor(inputEl: HTMLTextAreaElement, config?: GcMultiLineTextBoxConfig);

            /** Get */
            readonly isOverwrite: boolean;
            /** Get or Set */
            lines: string[];
            /** Get or Set */
            selectedText: string;
            /** Get or Set */
            selectionLength: number;
            /** Get or Set */
            text: string;
            /** Get or Set */
            useClipboard: boolean;
            /** Get or Set */
            selectionStart: number;
            /** Get */
            readonly IMEReadingString: string;
            /** Get */
            readonly displayText: string;
            /** Get */
            readonly value: string;
            /** Get or Set */
            countWrappedLine: boolean;
            /** Get or Set */
            exitOnLeftRightKey: ExitOnLeftRightKey;
            /** Get or Set */
            watermarkDisplayNullText: string;
            /** Get or Set */
            watermarkNullText: string;
            /** Get or Set */
            autoConvert: boolean;
            /** Get or Set */
            editMode: EditMode;
            /** Get or Set */
            exitOnLastChar: boolean;
            /** Get or Set */
            format: string;
            /** Get or Set */
            highlightText: boolean;
            /** Get or Set */
            lengthAsByte: boolean;
            /** Get or Set */
            maxLength: number;
            /** Get or Set */
            maxLineCount: number;
            /** Get or Set */
            IMEReadingStringKanaMode: KanaMode;
            /** Get or Set */
            scrollBarMode: ScrollBarMode;
            /** Get or Set */
            scrollBars: ScrollBars;
            /** Get or Set */
            wordWrap: boolean;
            /** Get or Set */
            acceptsReturn: boolean;
            /** Set */
            acceptsAltReturn: boolean;
            /** Get or Set */
            acceptsTab: boolean;
            /** Get or Set */
            IMEReadingStringAppend: boolean;
            /** Get or Set */
            IMEReadingStringEnableAlphabetReadingMapping: boolean;
            /** Get or Set */
            exitOnEnterKey: ExitKey;
            /** Get or Set */
            resize: ResizeMode;
            /** Get or Set */
            hiddenResizeIcon: boolean;
            /** Get or Set */
            useAISmartTip: boolean;
            /** Get */
            readonly AISmartTipConfig: AI.GcSmartTipConfig;
            /** Set */
            showContextMenu: boolean;
            /** Get or Set */
            cursorPosition: MultiLineCursorPosition;
            /** Get or Set */
            showAITextAssistantButton: boolean;
            /** Get */
            readonly AITextAssistantConfig: AI.GcTextAssistantConfig;

            setAutoConvert(v: boolean): void;
            getAutoConvert(): boolean;
            setCountWrappedLine(v: boolean): void;
            setFormat(v: string): void;
            setHighlightText(v: boolean): void;
            setLengthAsByte(v: boolean): void;
            setLines(v: string[]): void;
            setMaxLength(v: number): void;
            setMaxLineCount(v: number): void;
            setIMEReadingStringKanaMode(v: KanaMode): void;
            setScrollBarMode(v: ScrollBarMode): void;
            setScrollBars(v: ScrollBars): void;
            setWordWrap(v: boolean): void;
            setAcceptsReturn(v: boolean): void;
            setAcceptsTab(v: boolean): void;
            setIMEReadingStringAppend(v: boolean): void;
            getIMEReadingString(): string;
            clearIMEReadingString(): void;
            setHeight(v: string | number): void;
            getValue(): string;
            onIMEReadingStringOutput(callBack: (sender: this, args: IReadingStringChangedEventArgs) => void): void;
            removeIMEReadingStringOutput(callBack: (sender: this, args: IReadingStringChangedEventArgs) => void): void;
            setFocus(): void;
            getLines(): string[];
            setIMEReadingStringEnableAlphabetReadingMapping(v: boolean): void;
            getOriginalInput(): string;
            applyAIGeneratedText(text: string): void;
            insertAIGeneratedText(text: string): void;
        }

        export class GcTextBox extends GcInputManBase {
            constructor(inputEl: HTMLInputElement, config?: GcTextBoxConfig);

            /** Get */
            readonly isOverwrite: boolean;
            /** Get or Set */
            selectedText: string;
            /** Get or Set */
            selectionLength: number;
            /** Get or Set */
            text: string;
            /** Get or Set */
            useStandardPasswordInput: boolean;
            /** Get or Set */
            useClipboard: boolean;
            /** Get or Set */
            selectionStart: number;
            /** Get */
            readonly IMEReadingString: string;
            /** Get */
            readonly displayText: string;
            /** Get */
            readonly value: string;
            /** Get or Set */
            exitOnLeftRightKey: ExitOnLeftRightKey;
            /** Get or Set */
            watermarkDisplayNullText: string;
            /** Get or Set */
            watermarkNullText: string;
            /** Get or Set */
            acceptsCrlf: CrLfMode;
            /** Get or Set */
            acceptsTabChar: TabCharMode;
            /** Get or Set */
            autoConvert: boolean;
            /** Get or Set */
            editMode: EditMode;
            /** Get or Set */
            ellipsis: EllipsisMode;
            /** Get or Set */
            ellipsisString: string;
            /** Get or Set */
            exitOnLastChar: boolean;
            /** Get or Set */
            format: string;
            /** Get or Set */
            highlightText: boolean;
            /** Get or Set */
            lengthAsByte: boolean;
            /** Get or Set */
            maxLength: number;
            /** Get or Set */
            passwordChar: string;
            /** Get or Set */
            IMEReadingStringKanaMode: KanaMode;
            /** Get or Set */
            useSystemPasswordChar: boolean;
            /** Get or Set */
            passwordRevelationMode: PasswordRevelationMode;
            /** Get or Set */
            IMEReadingStringAppend: boolean;
            /** Get or Set */
            IMEReadingStringEnableAlphabetReadingMapping: boolean;
            /** Get or Set */
            exitOnEnterKey: ExitKey;
            /** Get or Set */
            trimMode: TrimMode;
            /** Set */
            showContextMenu: boolean;

            setAcceptsCrlf(v: CrLfMode): void;
            setAutoConvert(v: boolean): void;
            setEllipsis(v: EllipsisMode): void;
            setEllipsisString(v: string): void;
            setFormat(v: string): void;
            setHighlightText(v: boolean): void;
            setLengthAsByte(v: boolean): void;
            setMaxLength(v: number): void;
            setPasswordChar(v: string): void;
            setIMEReadingStringKanaMode(v: KanaMode): void;
            setUseSystemPasswordChar(v: boolean): void;
            setPasswordRevelationMode(v: PasswordRevelationMode): void;
            setIMEReadingStringAppend(v: boolean): void;
            getIMEReadingString(): string;
            clearIMEReadingString(): void;
            getValue(): string;
            onIMEReadingStringOutput(callBack: (sender: this, args: IReadingStringChangedEventArgs) => void): void;
            removeIMEReadingStringOutput(callBack: (sender: this, args: IReadingStringChangedEventArgs) => void): void;
            setIMEReadingStringEnableAlphabetReadingMapping(v: boolean): void;
            /**
             * Add {@link GcSoftKeyboard} as the dropdown of this control.
             * @param dropDownButtonAlignment Indicate the dropdown button position, see {@link DropDownButtonAlignment}.
             * @param softKeyboardConfig Indicate {@link GcSoftKeyboard} settings.
             * @param asPopup Indicate if dropdown area show as a Popup.
             */
            addDropDownSoftKeyboard(dropDownButtonAlignment?: DropDownButtonAlignment, softKeyboardConfig?: GcSoftKeyboardConfig, asPopup?: boolean): void;
        }

        export class GcTour {
            constructor(config: GcTourConfig);

            /** Get */
            readonly componentName: string;
            /** Get */
            readonly isActive: boolean;
            /** Get */
            readonly activeIndex: number;
            /** Get or Set */
            tipDirection: TipDirection;
            /** Get or Set */
            tipPosition: TipPosition;
            /** Get or Set */
            customTip: (context: TourCustomTipContext) => void;
            /** Get or Set */
            tipClassName: string;
            /** Get or Set */
            tipResource: TourTipResourceConfig;
            /** Get or Set */
            steps: ITourStep[] | TourStepConfig[];
            /** Get or Set */
            autoFocusTarget: boolean;
            /** Get or Set */
            disableInteraction: boolean;
            /** Get or Set */
            offset: number | number[];
            /** Get or Set */
            showOverlay: boolean;
            /** Get or Set */
            closeOnOverlayClick: boolean;
            /** Get */
            readonly length: number;
            /** Get or Set */
            closeOnEsc: boolean;
            /** Get or Set */
            showCloseButton: boolean;
            /** Get or Set */
            highlightRadius: number;
            /** Get or Set */
            hidePreviousButton: boolean;
            /** Get or Set */
            hideDoneButton: boolean;

            next(): void;
            previous(): void;
            start(isContinue?: boolean): void;
            close(): void;
            goTo(index: number): void;
            destroy(): void;
            addEventListener(eventName: GcTourEvent, func: (sender: this, eventArgs?: object) => void): void;
            removeEventListener(eventName: GcTourEvent, func?: (sender: this, eventArgs?: object) => void): void;
        }

        export class GcControlStateNotifier {
            constructor(control: GcInputManBase | GcComboBox | object);

            onFail(): void;
            onSuccess(): void;
            onClear(): void;
            destroy(): void;
        }

        export class GcIconNotifier {
            constructor(gcInputManControl: GcInputManBase | GcComboBox | object, iconConfig?: IconConfig);

            /** Get or Set */
            failMessage: string;
            /** Get or Set */
            successMessage: string;
            /** Get or Set */
            direction: IconDirection;
            /** Get or Set */
            failIconSrc: string;
            /** Get or Set */
            successIconSrc: string;

            setFailMessage(value: string): void;
            setSuccessMessage(value: string): void;
            setDirection(value: IconDirection): void;
            setFailIconSrc(value: string): void;
            setSuccessIconSrc(value: string): void;
            onFail(): void;
            onSuccess(): void;
            onClear(): void;
            destroy(): void;
            refresh(): void;
        }

        export class GcTipNotifier {
            constructor(gcInputManControl: GcInputManBase | GcComboBox | object, tipConfig?: TipConfig);

            /** Get or Set */
            direction: TipDirection;
            /** Get or Set */
            position: TipPosition;
            /** Get or Set */
            template: string;
            /** Get or Set */
            directionPriority: TipDirection[];
            /** Get or Set */
            failMessage: string;
            /** Get or Set */
            style: TipStyle;
            /** Get or Set */
            successMessage: string;

            setDirection(value: TipDirection): void;
            setPosition(value: TipPosition): void;
            setTemplate(value: string): void;
            setDirectionPriority(value: Array<TipDirection>): void;
            setFailMessage(value: string): void;
            setSuccessMessage(value: string): void;
            onFail(): void;
            onSuccess(): void;
            onClear(): void;
            destroy(): void;
            refresh(): void;
        }

        export class GcValidator {
            constructor(validateSetting: ValidateSetting);

            validate(
                controls?: (GcInputManBase | GcComboBox | object) | Array<GcInputManBase | GcComboBox | object> | Array<IExternalValidateResult>,
                externalValidateResult?: boolean
            ): boolean;
            enable(controls?: (GcInputManBase | GcComboBox | object) | Array<GcInputManBase | GcComboBox | object>): void;
            disable(controls?: (GcInputManBase | GcComboBox | object) | Array<GcInputManBase | GcComboBox | object>): void;
            destroy(): void;
            addEventListener(eventType: GcValidatorEvent, func: (sender: this, args: GcValidatorEventArgs) => void): void;
            removeEventListener(eventType: GcValidatorEvent, func: (sender: this, args: GcValidatorEventArgs) => void): void;
            refresh(): void;

            static registerValidateRule(
                keyword: string,
                validateFunc: (control: GcInputManBase | GcComboBox | object, item: ValidateRuleItem) => boolean
            ): void;
            static unRegisterValidateRule(keyword: string): void;
        }

        export type HolidayType = Holiday | ForceHoliday | ForceWorkday | DayOfWeekHoliday | ForceDayOfWeekHoliday | ForceDayOfWeekWorkday;

        export type FormatFunction = (v: number) => string;

        export type TourBaseTarget = string | Element | GcInputManBase | GcComboBox | GcTagBox | ITourTarget;

        export type TourTarget = TourBaseTarget | (() => TourBaseTarget);

        export enum ShowLiterals {
            Always = 'always',
            PostDisplay = 'postdisplay',
            PreDisplay = 'predisplay',
        }

        export enum MaxMinBehavior {
            AdjustToMaxMin = 'adjusttomaxmin',
            Clear = 'clear',
            Restore = 'restore',
            CancelInput = 'cancelinput',
            Keep = 'keep',
        }

        export enum TabAction {
            Control = 'control',
            Field = 'field',
        }

        export enum ExitOnLeftRightKey {
            None = 'none',
            Left = 'left',
            Right = 'right',
            Both = 'both',
        }

        export enum EditMode {
            Insert = 'insert',
            Overwrite = 'overwrite',
            FixedInsert = 'fixedinsert',
            FixedOverwrite = 'fixedoverwrite',
        }

        export enum CrLfMode {
            NoControl = 'nocontrol',
            Filter = 'filter',
            Cut = 'cut',
        }

        export enum TabCharMode {
            NoControl = 'nocontrol',
            Filter = 'filter',
            Cut = 'cut',
        }

        export enum ExitKey {
            Enter = 'enter',
            ShiftEnter = 'shiftenter',
            Both = 'both',
            None = 'none',
        }

        export enum DropDownButtonAlignment {
            LeftSide = 'leftside',
            RightSide = 'rightside',
        }

        export enum ClipContent {
            IncludeLiterals = 'includeliterals',
            ExcludeLiterals = 'excludeliterals',
        }

        export enum HighlightText {
            None = 'none',
            Field = 'field',
            All = 'all',
        }

        export enum SpinButtonAlignment {
            LeftSide = 'leftside',
            RightSide = 'rightside',
        }

        export enum FocusType {
            None = 0,
            Click = 1,
            ClientEvent = 3,
            KeyExit = 4,
            Default = 5,
            ImeInput = 8,
            Left = 9,
            Right = 10,
            DragDrop = 11,
            ClearButton = 12,
        }

        export enum Key {
            BackSpace = 8,
            Tab = 9,
            Clear = 12,
            Return = 13,
            Shift = 16,
            Control = 17,
            Alt = 18,
            Pause = 19,
            CapsLock = 20,
            Escape = 27,
            Space = 32,
            PageUp = 33,
            PageDown = 34,
            End = 35,
            Home = 36,
            Left = 37,
            Up = 38,
            Right = 39,
            Down = 40,
            Select = 41,
            Print = 42,
            Execute = 43,
            Insert = 45,
            Delete = 46,
            Help = 47,
            D0 = 48,
            D1 = 49,
            D2 = 50,
            D3 = 51,
            D4 = 52,
            D5 = 53,
            D6 = 54,
            D7 = 55,
            D8 = 56,
            D9 = 57,
            A = 65,
            B = 66,
            C = 67,
            D = 68,
            E = 69,
            F = 70,
            G = 71,
            H = 72,
            I = 73,
            J = 74,
            K = 75,
            L = 76,
            M = 77,
            N = 78,
            O = 79,
            P = 80,
            Q = 81,
            R = 82,
            S = 83,
            T = 84,
            U = 85,
            V = 86,
            W = 87,
            X = 88,
            Y = 89,
            Z = 90,
            NumPad0 = 96,
            NumPad1 = 97,
            NumPad2 = 98,
            NumPad3 = 99,
            NumPad4 = 100,
            NumPad5 = 101,
            NumPad6 = 102,
            NumPad7 = 103,
            NumPad8 = 104,
            NumPad9 = 105,
            Multiply = 106,
            Add = 107,
            Separator = 108,
            Subtract = 109,
            Decimal = 110,
            Divide = 111,
            NumLock = 136,
            ScrollLock = 137,
            F1 = 112,
            F2 = 113,
            F3 = 114,
            F4 = 115,
            F5 = 116,
            F6 = 117,
            F7 = 118,
            F8 = 119,
            F9 = 120,
            F10 = 121,
            F11 = 122,
            F12 = 123,
            F13 = 124,
            F14 = 125,
            F15 = 126,
            F16 = 127,
            F17 = 128,
            F18 = 129,
            F19 = 130,
            F20 = 131,
            F21 = 132,
            F22 = 133,
            F23 = 134,
            F24 = 135,
        }

        export enum FloatingLabelType {
            None = 'none',
            Auto = 'auto',
            Always = 'always',
        }

        export enum FloatingLabelDirection {
            Inside = 'inside',
            ThroughBorder = 'throughborder',
            Outside = 'outside',
        }

        export enum SpinType {
            None = 0x0,
            MouseWheel = 0x1,
            SpinButton = 0x2,
            UpDownKeys = 0x4,
            All = 0x7,
        }

        export enum GcCalculatorKey {
            D_0 = '0',
            D_1 = '1',
            D_2 = '2',
            D_3 = '3',
            D_4 = '4',
            D_5 = '5',
            D_6 = '6',
            D_7 = '7',
            D_8 = '8',
            D_9 = '9',
            Sign = '+/-',
            Dot = '.',
            Add = '+',
            Sub = '-',
            Multiply = '*',
            Divide = '/',
            Sqrt = 'SQRT',
            Percentage = '%',
            Fraction = '1/x',
            Equal = '=',
            MStatus = 'MStatus',
            MC = 'MC',
            MR = 'MR',
            MS = 'MS',
            MAdd = 'M+',
            BS = 'BS',
            CE = 'CE',
            C = 'C',
        }

        export enum CalendarNavigators {
            None = 0,
            Buttons = 1,
            ScrollBar = 2,
            Outlook = 3,
        }

        export enum NavigatorOrientation {
            Left = 0,
            Top = 1,
            Right = 2,
            Bottom = 3,
        }

        export enum CalendarUpdateType {
            Data = 1,
            All = 2,
        }

        export enum CalendarYear {
            Normal = 0,
            Fiscal = 1,
        }

        export enum CalendarType {
            MonthDay = 'monthday',
            YearMonth = 'yearmonth',
            SmallScaleYear = 'smallscaleyear',
            LargeScaleYear = 'largescaleyear',
        }

        export enum CalendarZoomRange {
            Small = 'small',
            Large = 'large',
        }

        export enum Rokuyou {
            None = 0x0,
            Senshou = 0x1,
            Tomobiki = 0x2,
            Senbu = 0x4,
            Butsumetsu = 0x8,
            Taian = 0x10,
            Shakkou = 0x20,
            All = 0x3f,
        }

        export enum Months {
            Default = 0,
            January = 1,
            February = 2,
            March = 3,
            April = 4,
            May = 5,
            June = 6,
            July = 7,
            August = 8,
            September = 9,
            October = 10,
            November = 11,
            December = 12,
        }

        export enum DayOfWeek {
            NotSet = 0x0,
            Sunday = 0x1,
            Monday = 0x2,
            Tuesday = 0x4,
            Wednesday = 0x8,
            Thursday = 0x10,
            Friday = 0x20,
            Saturday = 0x40,
            All = 0x7f,
        }

        export enum CalendarSelectionMode {
            One = 0,
            MultiSimple = 1,
            MultiRich = 2,
        }

        export enum AllowSelection {
            Anyday = 0,
            Workday = 1,
            Holiday = 2,
        }

        export enum EmptyRows {
            StartEmpty = 0,
            AllAtEnd = 1,
        }

        export enum WeekFlags {
            NotSet = 0x0,
            First = 0x1,
            Second = 0x2,
            Third = 0x4,
            Fourth = 0x8,
            Fifth = 0x10,
            Last = 0x20,
            All = 0x3f,
        }

        export enum HolidayOverride {
            None = 0,
            NextDay = 1,
            NextWorkDay = 2,
        }

        export enum MonthFlags {
            NotSet = 0x0,
            January = 0x1,
            February = 0x2,
            March = 0x4,
            April = 0x8,
            May = 0x10,
            June = 0x20,
            July = 0x40,
            August = 0x80,
            September = 0x100,
            October = 0x200,
            November = 0x400,
            December = 0x800,
            All = 0xfff,
        }

        export enum AutoFilter {
            None = 'none',
            Contains = 'contains',
            StartWith = 'startwith',
            AmbiguousContains = 'ambiguouscontains',
            AmbiguousStartWith = 'ambiguousstartwith',
        }

        export enum AutoCompleteMode {
            None = 'none',
            Append = 'append',
            SuggestAppend = 'suggestappend',
        }

        export enum AutoCompleteMatchMode {
            StartWith = 'startwith',
            AmbiguousStartWith = 'ambiguousstartwith',
        }

        export enum GcComboBoxEvent {
            SelectedChanged = 'selectedchanged',
            CheckedChanged = 'checkedchanged',
            DropDownClosed = 'dropdownclosed',
            DropDownOpened = 'dropdownopened',
            TextChanged = 'textchanged',
            FocusOut = 'focusout',
            KeyDown = 'keydown',
            KeyUp = 'keyup',
            SpinDown = 'spindown',
            SpinUp = 'spinup',
            ItemsChanged = 'itemschanged',
            ColumnResizeEnd = 'columnresizeend',
            ResizeEnd = 'resizeend',
        }

        export enum MatchingSource {
            All = 'all',
            Display = 'display',
        }

        export enum ComboDropDownType {
            List = 'list',
            Tree = 'tree',
        }

        export enum AppearanceStyle {
            Classic = 'classic',
            Modern = 'modern',
        }

        export enum GcShortcutKey {
            BackSpace = 8,
            Tab = 9,
            Clear = 12,
            Return = 13,
            Shift = 16,
            Ctrl = 17,
            Alt = 18,
            Pause = 19,
            CapsLock = 20,
            Escape = 27,
            Space = 32,
            PageUp = 33,
            PageDown = 34,
            End = 35,
            Home = 36,
            Left = 37,
            Up = 38,
            Right = 39,
            Down = 40,
            Select = 41,
            Print = 42,
            Execute = 43,
            Insert = 45,
            Delete = 46,
            Help = 47,
            D0 = 48,
            D1 = 49,
            D2 = 50,
            D3 = 51,
            D4 = 52,
            D5 = 53,
            D6 = 54,
            D7 = 55,
            D8 = 56,
            D9 = 57,
            A = 65,
            B = 66,
            C = 67,
            D = 68,
            E = 69,
            F = 70,
            G = 71,
            H = 72,
            I = 73,
            J = 74,
            K = 75,
            L = 76,
            M = 77,
            N = 78,
            O = 79,
            P = 80,
            Q = 81,
            R = 82,
            S = 83,
            T = 84,
            U = 85,
            V = 86,
            W = 87,
            X = 88,
            Y = 89,
            Z = 90,
            Meta = 91,
            NumPad0 = 96,
            NumPad1 = 97,
            NumPad2 = 98,
            NumPad3 = 99,
            NumPad4 = 100,
            NumPad5 = 101,
            NumPad6 = 102,
            NumPad7 = 103,
            NumPad8 = 104,
            NumPad9 = 105,
            Multiply = 106,
            Add = 107,
            Separator = 108,
            Subtract = 109,
            Decimal = 110,
            Divide = 111,
            NumLock = 136,
            ScrollLock = 137,
            F1 = 112,
            F2 = 113,
            F3 = 114,
            F4 = 115,
            F5 = 116,
            F6 = 117,
            F7 = 118,
            F8 = 119,
            F9 = 120,
            F10 = 121,
            F11 = 122,
            F12 = 123,
            F13 = 124,
            F14 = 125,
            F15 = 126,
            F16 = 127,
            F17 = 128,
            F18 = 129,
            F19 = 130,
            F20 = 131,
            F21 = 132,
            F22 = 133,
            F23 = 134,
            F24 = 135,
        }

        export enum IMControlType {
            GcCalculator = 'gccalculator',
            GcCalendar = 'gccalendar',
            GcComboBox = 'gccombobox',
            GcComment = 'gccomment',
            GcDateTime = 'gcdatetime',
            GcFormPersistence = 'gcformpersistence',
            GcFunctionKey = 'gcfunctionkey',
            GcListBox = 'gclistbox',
            GcMask = 'gcmask',
            GcMultiLineTextBox = 'gcmultilinetextbox',
            GcNumber = 'gcnumber',
            GcRichTextEditor = 'gcrichtexteditor',
            GcSoftKeyboard = 'gcsoftkeyboard',
            GcTagBox = 'gctagbox',
            GcTextBox = 'gctextbox',
            GcValidator = 'gcvalidator',
            GcShortcut = 'gcshortcut',
            GcTour = 'gctour',
            GcDateTimePicker = 'gcdatetimepicker',
            GcControlStateNotifier = 'gccontrolstatenotifier',
            GcIconNotifier = 'gciconnotifier',
            GcTipNotifier = 'gctipnotifier',
            GcStepper = 'gcstepper',
        }

        export enum GCIMLanguage {
            EN = 'en',
            CN = 'cn',
            JA = 'ja',
        }

        export enum DropDownAnimationType {
            None = 'none',
            SlideDown = 'slidedown',
            SlideUp = 'slideup',
            Popup = 'popup',
            Expand = 'expand',
        }

        export enum GcValidatorEvent {
            ValidationFailed = 'validationfailed',
            ValidationSucceeded = 'validationsucceeded',
        }

        export enum ValidateType {
            Required = 'required',
            OutOfRange = 'outofrange',
            EqualToInputLength = 'equaltoinputlength',
            LessThanInputLength = 'lessthaninputlength',
            LessThanOrEqualToInputLength = 'lessthanorequaltoinputlength',
            GreaterThanInputLength = 'greaterthaninputlength',
            GreaterThanOrEqualToInputLength = 'greaterthanorequaltoinputlength',
            BetweenMinAndMaxLength = 'betweenminandmaxlength',
            BetweenOrEqualToMinAndMaxLength = 'betweenorequaltominandmaxlength',
            MatchControl = 'matchcontrol',
            External = 'external',
        }

        export enum ValidateWhen {
            LostFocus = 'lostfocus',
            Typing = 'typing',
            Manual = 'manual',
        }

        export enum IconDirection {
            Inside = 'inside',
            Outside = 'outside',
        }

        export enum TipPosition {
            Start = 'start',
            Balanced = 'balanced',
            End = 'end',
        }

        export enum TipDirection {
            Top = 'top',
            Left = 'left',
            Right = 'right',
            Bottom = 'bottom',
        }

        export enum TipStyle {
            BallonTip = 'ballontip',
            FlatPanel = 'flatpanel',
            Text = 'text',
        }

        export enum ValidateMode {
            ValidateEx = 'validateex',
            Validate = 'validate',
            ValidateNone = 'validatenone',
        }

        export enum DateCursorPosition {
            Default = 0,
            Era = 1,
            Year = 2,
            Month = 3,
            Day = 4,
            AMPM = 5,
            Hour = 6,
            Minute = 7,
            Second = 8,
        }

        export enum Hour12Mode {
            Hour0As12 = 'hour0as12',
            Hour12As0 = 'hour12as0',
        }

        export enum DateDropDownType {
            Picker = 'picker',
            Calendar = 'calendar',
            CalendarPicker = 'calendarpicker',
        }

        export enum PickerType {
            DateTime = 'datetime',
            Date = 'date',
            Time = 'time',
        }

        export enum Interval {
            Default = 1,
            IntervalOf5 = 5,
            IntervalOf10 = 10,
            IntervalOf15 = 15,
            IntervalOf20 = 20,
            IntervalOf30 = 30,
        }

        export enum GcDateTimePickerEvent {
            SelectedDateChanged = 'selecteddatechanged',
        }

        export enum StorageMode {
            LocalStorage = 'localstorage',
            SessionStorage = 'sessionstorage',
        }

        export enum SaveMode {
            SaveOnRefresh = 'saveonrefresh',
            SaveOnSubmit = 'saveonsubmit',
        }

        export enum FunctionKey {
            None = 0x0,
            PageUp = 0x1,
            PageDown = 0x2,
            Home = 0x4,
            End = 0x8,
            F1 = 0x10,
            F2 = 0x20,
            F3 = 0x40,
            F4 = 0x80,
            F5 = 0x100,
            F6 = 0x200,
            F7 = 0x400,
            F8 = 0x800,
            F9 = 0x1000,
            F10 = 0x2000,
            F11 = 0x4000,
            F12 = 0x8000,
            Shift = 0x10000,
            Ctrl = 0x20000,
            Alt = 0x40000,
        }

        export enum CombinationKeyDisplayMode {
            Always = 'always',
            Dynamic = 'dynamic',
        }

        export enum DisplayStyle {
            None = 'none',
            Text = 'text',
            Image = 'image',
            ImageAndText = 'imageandtext',
        }

        export enum ImagePosition {
            Top = 'top',
            Bottom = 'bottom',
            Left = 'left',
            Right = 'right',
        }

        export enum Alignment {
            NotSet = 'notset',
            TopLeft = 'top-left',
            TopCenter = 'top-center',
            TopRight = 'top-right',
            MiddleLeft = 'middle-left',
            MiddleCenter = 'middle-center',
            MiddleRight = 'middle-right',
            BottomLeft = 'bottom-left',
            BottomCenter = 'bottom-center',
            BottomRight = 'bottom-right',
            BaselineLeft = 'baseline-left',
            BaselineCenter = 'baseline-center',
            BaselineRight = 'baseline-right',
        }

        export enum FilterComparator {
            Contains = 'contains',
            NotContains = 'notcontains',
            Equal = 'equal',
            NotEqual = 'notequal',
            EndWith = 'endwith',
            StartWith = 'startwith',
            AmbiguousContains = 'ambiguouscontains',
            AmbiguousNotContains = 'ambiguousnotcontains',
            AmbiguousEqual = 'ambiguousequal',
            AmbiguousNotEqual = 'ambiguousnotequal',
            AmbiguousEndWith = 'ambiguousendwith',
            AmbiguousStartWith = 'ambiguousstartwith',
            GreaterThan = 'greaterthan',
            GreaterThanOrEqual = 'greaterthanorequal',
            LessThan = 'lessthan',
            LessThanOrEqual = 'lessthanorequal',
            Between = 'between',
            NotBetween = 'notbetween',
        }

        export enum DateCompareUnit {
            Second = 1,
            Minute = 2,
            Hour = 4,
            Day = 8,
            Month = 16,
            Year = 32,
            Time = 7,
            Date = 56,
            DateTime = 63,
        }

        export enum ScrollBars {
            None = 'none',
            Horizontal = 'horizontal',
            Vertical = 'vertical',
            Both = 'both',
        }

        export enum ListBoxSelectionMode {
            Single = 'single',
            Multiple = 'multiple',
            MultipleExt = 'multipleExt',
        }

        export enum GcListBoxEvent {
            CheckedChanged = 'checkedchanged',
            SelectedChanged = 'selectedchanged',
            FocusedChanged = 'focusedchanged',
            ItemClick = 'itemclick',
            LoadComplete = 'loadcomplete',
            ItemsChanged = 'itemschanged',
            ColumnResizeEnd = 'columnresizeend',
            ResizeEnd = 'resizeend',
            Dropping = 'dropping',
            Dropped = 'dropped',
            NodeCollapsed = 'nodecollapsed',
            NodeExpanded = 'nodeexpanded',
        }

        export enum ListBoxDragMode {
            None = 'none',
            Single = 'single',
            Multiple = 'multiple',
        }

        export enum ListBoxDragSource {
            Selected = 'selected',
            Checked = 'checked',
        }

        export enum FilterOperatorType {
            Boolean = 'boolean',
            Number = 'number',
            String = 'string',
            Date = 'date',
        }

        export enum ListBoxDisplayMode {
            List = 'list',
            Tree = 'tree',
        }

        export enum ToastPosition {
            TopLeft = 'topleft',
            TopCenter = 'topcenter',
            TopRight = 'topright',
            BottomLeft = 'bottomleft',
            BottomCenter = 'bottomcenter',
            BottomRight = 'bottomright',
        }

        export enum DecimalMode {
            Cut = 'cut',
            Filter = 'filter',
        }

        export enum SliderPosition {
            Left = 'left',
            BottomBorder = 'bottomborder',
            Right = 'right',
        }

        export enum ClearModeAction {
            Zero = 'zero',
            Null = 'null',
        }

        export enum ValueSign {
            NoControl = 'nocontrol',
            Positive = 'positive',
            Negative = 'negative',
        }

        export enum GcShortcutEvent {
            PreAction = 'preaction',
            PostAction = 'postaction',
        }

        export enum GcShortcutAction {
            PreviousControl = 'previouscontrol',
            NextControl = 'nextcontrol',
            Clear = 'clear',
            DropDown = 'dropdown',
            SpinDown = 'spindown',
            SpinUp = 'spinup',
            PreviousField = 'previousfield',
            NextField = 'nextfield',
            PreviousFieldControl = 'previousfieldcontrol',
            NextFieldControl = 'nextfieldcontrol',
            ThreeZero = 'threezero',
            Now = 'now',
        }

        export enum SliderDirection {
            Horizontal = 'horizontal',
            Vertical = 'vertical',
        }

        export enum SliderTooltipPosition {
            Top = 'top',
            Bottom = 'bottom',
        }

        export enum SliderTooltipShowMode {
            None = 'none',
            Always = 'always',
            Hover = 'hover',
        }

        export enum SliderValueChangeMode {
            ThumbMove = 'thumbmove',
            ThumbRelease = 'thumbrelease',
        }

        /**
         * Indicate different kind of keys which could be displayed in {@link GcSoftKeyboard}.
         */
        export enum DisplayType {
            Numeric = 0x1,
            Symbol = 0x2,
            Alphabet = 0x4,
            All = 0x7,
        }

        /**
         * Indicate different security level for {@link GcSoftKeyboard}.
         */
        export enum SecurityLevel {
            /**
             * If set SecurityLevel to low, means dom node will expose key value, if there's some Trojan in server site, clicked data maybe expose to hackers.
             * Although this level has security risk, but this only happened when there's security flaw in users site.
             */
            Low = 'low',
            /**
             * If set SecurityLevel to high, each button will be created by canvas, and there's no value info in dom node. It's hard to get any useful info from dom node.
             */
            High = 'high',
        }

        /**
         * Indicate different key type in {@link GcSoftKeyboard}.
         */
        export enum KeyType {
            NumericKey = 'numerickey',
            SymbolKey = 'symbolkey',
            AlphabetKey = 'alphabetkey',
            FunctionKey = 'functionkey',
        }

        /**
         * Indicate all {@link GcSoftKeyboard} events.
         */
        export enum GcSoftKeyboardEvent {
            KeyPress = 'keypress',
            Open = 'open',
            Close = 'close',
        }

        export enum StepperOrientation {
            Horizontal = 'horizontal',
            Vertical = 'vertical',
        }

        export enum StepperStepType {
            Label = 'label',
            Indicator = 'indicator',
            Full = 'full',
        }

        export enum StepperLabelPosition {
            Top = 'top',
            Bottom = 'bottom',
            Left = 'left',
            Right = 'right',
        }

        export enum StepperHeaderPosition {
            Start = 'start',
            End = 'end',
        }

        export enum GcStepperEvent {
            StepChanging = 'stepchanging',
            StepChanged = 'stepchanged',
        }

        export enum GcTagBoxEvent {
            FocusIn = 'focusin',
            FocusOut = 'focusout',
            InsertTag = 'inserttag',
            RemoveTag = 'removetag',
            DropDownOpened = 'dropdownopened',
            DropDownClosed = 'dropdownclosed',
            ValueChanged = 'valuechanged',
        }

        export enum GcTagBoxDropDownAlignmentMode {
            AlignWithEditor = 'alignwitheditor',
            AlignWithCaret = 'alignwithcaret',
        }

        export enum TagBoxDropDownType {
            List = 'list',
            Tree = 'tree',
        }

        export enum ScrollBarMode {
            Automatic = 'automatic',
            Fixed = 'fixed',
        }

        export enum EllipsisMode {
            None = 'none',
            EllipsisEnd = 'ellipsisend',
            EllipsisPath = 'ellipsispath',
        }

        export enum KanaMode {
            KatakanaHalf = 'katakanahalf',
            Katakana = 'katakana',
            Hiragana = 'hiragana',
        }

        export enum PasswordRevelationMode {
            None = 'none',
            ShowEyeButton = 'showeyebutton',
            ShowLastTypedChar = 'showlasttypedchar',
        }

        export enum OutputMode {
            Append = 'append',
            Replace = 'replace',
        }

        export enum MultiLineCursorPosition {
            None = 'none',
            Start = 'start',
            End = 'end',
        }

        export enum ResizeMode {
            None = 'none',
            Both = 'both',
            Vertical = 'vertical',
            Horizontal = 'horizontal',
        }

        export enum TrimMode {
            None = 'none',
            Start = 'start',
            End = 'end',
            Both = 'both',
        }

        export enum GcTourEvent {
            Closed = 'closed',
            StepChanging = 'stepchanging',
            StepChanged = 'stepchanged',
        }

        export enum ValueConsistsOf {
            All = 'all',
            NonLeafPriority = 'nonleafpriority',
            LeafPriority = 'leafpriority',
        }

        export enum TreeViewNodeType {
            All = 'all',
            Leaf = 'leaf',
        }

        export enum TagBoxDisplayMode {
            Multiline = 'multiline',
            Singleline = 'singleline',
        }

        export enum GcTagImageAlignment {
            LeftSide = 'leftside',
            RightSide = 'rightside',
        }

        export enum Culture {
            EN = 'en',
            CN = 'cn',
            JA = 'ja',
        }

        export interface GcInputManBaseConfig {
            visible?: boolean;
            enabled?: boolean;
            readOnly?: boolean;
            width?: number | string;
            height?: number | string;
            minWidth?: number | string;
            minHeight?: number | string;
            maxWidth?: number | string;
            maxHeight?: number | string;
            exitOnLeftRightKey?: ExitOnLeftRightKey | null;
            editMode?: EditMode | null;
            watermarkDisplayNullText?: string | null;
            watermarkNullText?: string | null;
            useClipboard?: boolean;
            exitOnEnterKey?: ExitKey | null;
            container?: HTMLElement | null;
            autoDropDown?: boolean | null;
            tabIndex?: number;
            showClearButton?: boolean;
            showHelpButton?: boolean;
            showCopyButton?: boolean;
            helpContent?: string | null;
            copyMessage?: string | null;
            copiedMessage?: string | null;
            autoScale?: boolean;
            minScaleFactor?: number;
            floatingLabelText?: string;
            floatingLabelType?: FloatingLabelType;
            floatingLabelDirection?: FloatingLabelDirection;
            fontSize?: number | string;
        }

        export interface CustomEventArgs {
            Cancel: boolean;
            StopPropagation?: boolean;
            PreventDefault?: boolean;
        }

        export interface GcCalculatorConfig {
            showOutput?: boolean;
            visible?: boolean;
            enabled?: boolean;
            value?: number | null;
            buttonText?: object;
        }

        export interface LoadHolidayConfig {
            encoding?: string;
            isActive?: boolean;
        }

        export interface GcCalendarConfig extends CalendarBaseConfig {
            visible?: boolean;
            maxSelectionCount?: number | null;
            selectionMode?: CalendarSelectionMode | null;
            selectedDate?: Date | null;
            enabled?: boolean;
            weekTitleSelect?: boolean;
            weekNumberSelect?: boolean;
            focusDate?: Date | null;
        }

        export interface CalendarBaseConfig {
            maxDate?: Date | null;
            minDate?: Date | null;
            allowSelection?: AllowSelection | null;
            emptyRows?: EmptyRows | null;
            firstDayOfWeek?: DayOfWeek | null;
            firstFiscalMonth?: Months | null;
            firstMonthInView?: Months | null;
            yearMonthFormat?: string | null;
            headerFormat?: string | null;
            showZoomButton?: boolean;
            showRokuyou?: Rokuyou | null;
            showHeader?: boolean;
            showToday?: boolean;
            showWeekNumber?: boolean;
            showTrailing?: boolean;
            calendarYear?: CalendarYear | null;
            calendarDimensions?: Dimensions | null;
            showNavigator?: CalendarNavigators | null;
            navigatorOrientation?: NavigatorOrientation | null;
            overrideTipText?: string | null;
            calendarType?: CalendarType | null;
            scrollRate?: number | null;
            calendarZoomRange?: CalendarZoomRange | CalendarType[] | null;
            autoSwitch?: boolean;
            showAnimation?: boolean;
            width?: number | string;
            height?: number | string;
            allowResize?: boolean;
            minWidth?: number | string;
            maxWidth?: number | string;
            minHeight?: number | string;
            maxHeight?: number | string;
        }

        export interface Dimensions {
            width: number;
            height: number;
        }

        export interface GcCalendarPickerConfig {
            maxDate?: Date | null;
            minDate?: Date | null;
            allowSelection?: AllowSelection | null;
            emptyRows?: EmptyRows | null;
            firstDayOfWeek?: DayOfWeek | null;
            firstFiscalMonth?: Months | null;
            yearMonthFormat?: string | null;
            headerFormat?: string | null;
            showZoomButton?: boolean;
            showRokuyou?: Rokuyou | null;
            showWeekNumber?: boolean;
            showTrailing?: boolean;
            calendarYear?: CalendarYear | null;
            overrideTipText?: string | null;
            calendarType?: CalendarType | null;
            scrollRate?: number | null;
            calendarZoomRange?: CalendarZoomRange | CalendarType[] | null;
            autoSwitch?: boolean;
            showAnimation?: boolean;
            width?: number | string;
            height?: number | string;
            allowResize?: boolean;
            minWidth?: number | string;
            maxWidth?: number | string;
            minHeight?: number | string;
            maxHeight?: number | string;
            minuteInterval?: Interval | null;
            secondsInterval?: Interval | null;
            showSecond?: boolean;
        }

        export interface IComboBoxDropDownTree {
            readonly imageMemberPath: string;
            readonly childrenMemberPath: string;
            readonly expandedMemberPath: string;
            readonly selectableNodeType: TreeViewNodeType;
            readonly flat: boolean;
            valueConsistsOf: ValueConsistsOf;
        }

        export interface ComboBoxConfig extends ListConfig, ComboBoxEditorConfig {
            showDropDownButton?: boolean;
            dropDownButtonPosition?: DropDownButtonAlignment | null;
            showSpinButton?: boolean;
            spinButtonPosition?: SpinButtonAlignment | null;
            matchingSource?: MatchingSource;
            isEditable?: boolean;
            autoSelect?: boolean;
            dropDownWidth?: number | 'auto' | null;
            dropDownHeight?: number | null;
            autoFilter?: AutoFilter | null;
            minPrefixLength?: number | null;
            isMultiSelect?: boolean;
            allowDropDownResize?: boolean;
            dropDownOverflow?: ScrollBars | null;
            emptyTemplate?: string;
            spinWheel?: boolean;
            multipleItemSeparator?: string;
            autoCompleteMode?: AutoCompleteMode;
            autoCompleteMatchMode?: AutoCompleteMatchMode;
            checkBySpace?: boolean;
            dropDownType?: ComboDropDownType | null;
            dropDownTreeConfig?: ComboBoxDropDownTreeConfig;
            dropDownTipTemplate?: (context: ListBoxTipTemplateContext) => HTMLElement;
        }

        export interface ComboBoxDropDownTreeConfig {
            imageMemberPath?: string | null;
            childrenMemberPath?: string | null;
            expandedMemberPath?: string | null;
            selectableNodeType?: TreeViewNodeType;
            flat?: boolean;
            valueConsistsOf?: ValueConsistsOf;
            itemTemplate?: string | string[] | ((item: object) => HTMLElement) | null;
            generatingItem?: (args: ITreeViewItemGeneratingArgs) => void;
            selectTemplate?: (args: ITreeViewTemplateSelectArgs) => string;
            formatItem?: (item: object) => void;
            load?: (context: ITreeViewLoadContext) => void | null;
        }

        export interface ComboBoxEditorConfig {
            exitOnLeftRightKey?: ExitOnLeftRightKey | null;
            editMode?: EditMode | null;
            watermarkDisplayNullText?: string | null;
            highlightText?: boolean | null;
            watermarkNullText?: string | null;
            acceptsCrlf?: CrLfMode | null;
            acceptsTabChar?: TabCharMode;
            useClipboard?: boolean;
            exitOnEnterKey?: ExitKey | null;
            ellipsis?: EllipsisMode | null;
            ellipsisString?: string | null;
            enabled?: boolean;
            visible?: boolean;
            readOnly?: boolean;
            container?: HTMLElement | null;
            autoDropDown?: boolean;
            showClearButton?: boolean;
            autoScale?: boolean;
            minScaleFactor?: number | null;
            tabIndex?: number | null;
            showCopyButton?: boolean;
            showHelpButton?: boolean;
            helpContent?: string | null;
            copyMessage?: string | null;
            copiedMessage?: string | null;
            floatingLabelText?: string | null;
            floatingLabelType?: FloatingLabelType | null;
            floatingLabelDirection?: FloatingLabelDirection | null;
            width?: number | string;
            height?: number | string;
            minWidth?: number | string;
            minHeight?: number | string;
            maxWidth?: number | string;
            maxHeight?: number | string;
            fontSize?: number | string;
        }

        export interface GlobalSettings {
            appearanceStyle?: AppearanceStyle;
            GcDropDown?: { appendDropDownToBody: boolean; animationType: DropDownAnimationType };
            language?: GCIMLanguage;
        }

        export interface ValidateSetting {
            items: ValidateItem[];
            defaultNotify?: NotifySetting | NotifySettings;
        }

        export interface ValidateItem {
            control: GcInputManBase | GcComboBox | object;
            ruleSet: ValidateRuleItem[];
            validateWhen?: ValidateWhen;
            notify?: NotifySetting | NotifySettings | null;
        }

        export interface ValidateRuleItem {
            rule: string | ValidateType | ((control: object) => boolean);
            inputLength?: number;
            inputMaxLength?: number;
            inputMinLength?: number;
            matchControl?: GcInputManBase | object;
            successMessage?: string | ((control: object, context: ValidateRuleItem) => string);
            failMessage?: string | ((control: object, context: ValidateRuleItem) => string);
            [property: string]: number | boolean | string | object | undefined | null;
        }

        export interface NotifySettings {
            fail?: NotifySetting | null;
            success?: NotifySetting | null;
        }

        export interface NotifySetting {
            tip?: boolean | TipConfig | null;
            icon?: boolean | IconConfig | null;
            toast?: boolean | ToastNotifyConfig;
            controlState?: boolean;
        }

        export interface GcValidatorEventArgs {
            control: GcInputManBase | GcComboBox | object;
            context: ValidateRuleItem;
        }

        export interface TipConfig {
            direction?: TipDirection | null;
            position?: TipPosition | null;
            directionPriority?: TipDirection[] | null;
            template?: string | null;
            failMessage?: string | null;
            successMessage?: string | null;
            style?: TipStyle | null;
        }

        export interface IconConfig {
            direction?: string | null;
            failIconSrc?: string | null;
            successIconSrc?: string | null;
            failMessage?: string | null;
            successMessage?: string | null;
        }

        export interface ToastNotifyConfig {
            showClose?: boolean;
            className?: string;
            position?: ToastPosition;
            duration?: number;
            showProgress?: boolean;
            pauseOnHover?: boolean;
            title?: string;
            template?: (context: ToastTemplateContext) => HTMLElement;
        }

        export interface ToastTemplateContext {
            close(): void;
            message: string;
            control: GcInputManBase | GcComboBox | object;
            ruleItem: ValidateRuleItem;
        }

        export interface IExternalValidateResult {
            control: GcInputManBase | object;
            result: boolean;
        }

        export interface ICustomEra {
            name: string;
            abbreviation: string;
            shortcuts: string;
            symbol: string;
            startDate: string;
        }

        export interface GcDateTimeConfig extends GcInputManBaseConfig {
            text?: string | null;
            maxDate?: Date | string | null;
            minDate?: Date | string | null;
            formatPattern?: string | null;
            spinIncrement?: number | null;
            spinOnKeys?: boolean;
            spinWheel?: boolean;
            spinWrap?: boolean;
            allowSpin?: boolean | SpinType;
            displayFormatPattern?: string | null;
            watermarkEmptyEraText?: string | null;
            promptChar?: string | null;
            AMDesignator?: string | null;
            PMDesignator?: string | null;
            twoDigitYearMax?: number | null;
            hour12Mode?: Hour12Mode | null;
            tabAction?: TabAction | null;
            maxMinBehavior?: MaxMinBehavior | null;
            midnightAs24?: boolean;
            showLiterals?: ShowLiterals | null;
            adjustValueOnFocus?: boolean;
            useTwoDigitYearMax?: boolean;
            validateMode?: ValidateMode | null;
            clipContent?: ClipContent | null;
            value?: Date | string;
            watermarkDisplayEmptyEraText?: string | null;
            showSpinButton?: boolean;
            spinButtonPosition?: SpinButtonAlignment | null;
            showDropDownButton?: boolean;
            dropDownButtonAlignment?: DropDownButtonAlignment | null;
            dropDownConfig?: GcDateTimeDropDownConfig | null;
            exitOnLastChar?: boolean;
            highlightText?: HighlightText | null;
            autoConvert?: boolean;
            acceptsCrlf?: CrLfMode | null;
        }

        export interface GcDateTimeDropDownConfig extends GcDateTimeCalendarConfig, GcDateTimeDropDownPickerConfig, GcDateTimeCalendarPickerConfig {
            minDate?: Date | null;
            maxDate?: Date | null;
            dropDownType?: DateDropDownType | null;
        }

        export interface GcDateTimeCalendarConfig extends CalendarBaseConfig {
            defaultDate?: Date | null;
        }

        export interface GcDateTimeCalendarPickerConfig extends GcCalendarPickerConfig {
            defaultDate?: Date | null;
        }

        export interface GcDateTimeDropDownPickerConfig extends PickerConfig {
            defaultDate?: Date | null;
        }

        export interface GcDateTimePickerEventArgs {
            oldValue?: Date;
            newValue: Date;
        }

        export interface PickerConfig {
            minDate?: Date | string | number | null;
            maxDate?: Date | string | number | null;
            type?: PickerType | null;
            minuteInterval?: Interval | null;
            secondsInterval?: Interval | null;
            hasSeconds?: boolean;
            selectedValue?: Date | null;
            yearFormat?: (curDate: Date) => string;
            monthFormat?: (curDate: Date) => string;
            dayFormat?: (curDate: Date) => string;
        }

        export interface IDropDownContainer {
            width: string | number;
            setWidth(v: string | number): void;
            height: string | number;
            setHeight(v: string | number): void;
            element: HTMLElement;
            getElement(): HTMLElement;
            innerElement: HTMLElement;
            setInnerElement(el: HTMLElement): void;
            opened: boolean;
            isOpened(): boolean;
            closed: boolean;
            isClosed(): boolean;
            animationType: DropDownAnimationType;
            toggleOpen(showAnimation?: boolean): void;
            close(showAnimation?: boolean): void;
            open(showAnimation?: boolean): void;
            onOpening(f: (sender: this, args: CancelEventArgs) => void): void;
            onOpen(f: (sender: this) => void): void;
            onClosing(f: (sender: this, args: CancelEventArgs) => void): void;
            onClose(f: (sender: this) => void): void;
            removeOpen(f: (sender: this) => void): void;
            removeOpening(f: (sender: this, args: CancelEventArgs) => void): void;
            removeClose(f: (sender: this) => void): void;
            removeClosing(f: (sender: this, args: CancelEventArgs) => void): void;
            updateDropDownPosition(): void;
            dispose(): void;
        }

        export interface CancelEventArgs {
            cancel: boolean;
        }

        export interface IGcDropDownSliderConfig {
            min?: number;
            max?: number;
            step?: number | null;
            marks?: number[];
            valueChangeMode?: SliderValueChangeMode;
            direction?: SliderDirection;
            showMarkLabel?: boolean;
            markLabelFormat?: FormatFunction;
            markLabelPosition?: SliderTooltipPosition;
            tooltipShowMode?: SliderTooltipShowMode;
            tooltipFormat?: FormatFunction;
            tooltipPosition?: SliderTooltipPosition;
            showMarkTip?: boolean;
            markTipFormat?: FormatFunction;
            keyStep?: number;
            width?: number | string;
            height?: number | string;
        }

        export interface IDropDownOwner {
            getValue(): string | number | Date | null | undefined;
            syncValueFromDropDown(v: string | number | Date | null | undefined): void;
            performKeyDown(keyCode: number): void;
            performKeyPress(char: string, keyCode: number): void;
            getOriginalInputElement(): HTMLInputElement | HTMLTextAreaElement;
            getUIInputElement(): HTMLInputElement | HTMLTextAreaElement;
            getLayoutElement(): HTMLElement;
            getReadOnly(): boolean;
            paste(): void;
            cut(): void;
            copy(): void;
            delete(): void;
            undo(): void;
            canUndo(): boolean;
            getSelectionLength(): number;
            getPasswordMode(): boolean;
            getUseClipboard(): boolean;
        }

        export interface IDropDownSliderOwner extends IDropDownOwner {
            onInput(callBack: Function): any;
            removeInput(f: Function): any;
            readOnly: boolean;
            enabled: boolean;
            onEnabledReadOnlyChanged(callback: () => void): any;
            syncValueFromSlider(v: number): any;
            getSliderRange(): [number, number];
        }

        export interface GcFormPersistenceConfig {
            id?: string | null;
            storageMode?: StorageMode | null;
            saveMode?: SaveMode | null;
        }

        export interface IThirdpartyEditor {
            /**
             * Indicate if skip current element, if skip, this element will be exclude from FormPersistence.
             * @param element an Html element from host element.
             */
            skip(element: HTMLElement): boolean;
            /**
             * Indicate if this element is a thirdparty control, if yes, return name as storage key.
             * @param element an Html element from host element.
             */
            checker(element: HTMLElement): string | null;
            /**
             * Save thirdparty control's value to storage.
             * @param context include current GcFormPersistence, current element and element name info.
             */
            save(context: ElementContext): void;
            /**
             * Set value to thirdparty control.
             * @param context include current GcFormPersistence, current element and element name info.
             */
            restore(context: ElementContext): void;
        }

        export interface ElementContext {
            formPersistence: GcFormPersistence;
            element: HTMLElement;
            name: string;
        }

        export interface FunctionKeyConfig {
            keyRepeat?: boolean;
            handleMouse?: boolean;
            visible?: boolean;
            enabled?: boolean;
            showTip?: boolean;
            combinationKeyDisplayMode?: CombinationKeyDisplayMode | null;
            functionKeys?: (FunctionKeyInfo | FunctionKey)[];
            onActived?: ActivateCallBack;
        }

        export interface ActivateCallBack {
            (s: GcFunctionKey, e: KeyActivateArgs): void;
        }

        export interface FunctionKeyInfo {
            key: FunctionKey;
            description?: string;
            tipText?: string;
            displayStyle?: DisplayStyle;
            imagePosition?: ImagePosition;
        }

        export interface KeyActivateArgs extends FunctionKeyInfo, ModifierKeyInfo {
            cancel: boolean;
            keyCode: number;
        }

        export interface ModifierKeyInfo {
            shiftKey: boolean;
            ctrlKey: boolean;
            altKey: boolean;
        }

        export interface ListConfig {
            visibleItems?: number | null;
            itemHeight?: number | null;
            colHeaderHeight?: number | null;
            items?: object[] | string[] | null;
            columns?: ColumnConfig[] | null;
            showHeader?: boolean;
            valueMemberPath?: string | null;
            displayMemberPath?: string | null;
            checkOnClick?: boolean;
            itemTemplate?: string | string[] | null;
            headerTemplate?: string | null;
            footerTemplate?: string | null;
            load?: (context: ILoadContext) => void;
            pageSize?: number | null;
            virtualMode?: boolean | null;
            generatingItem?: (args: IItemGeneratingArgs) => void;
            selectTemplate?: (args: ITemplateSelectArgs) => string;
            formatItem?: (args: IItemArgs) => void;
            allowColumnResize?: boolean;
            showTip?: boolean;
            multiColumn?: boolean;
            itemCountInRow?: number;
        }

        export interface ColumnConfig {
            name: string;
            label?: string | null;
            width?: number | 'auto' | string | null;
            isValuePath?: boolean;
            visible?: boolean;
            clickSort?: boolean;
            contentAlignment?: Alignment | null;
            headerAlignment?: Alignment | null;
            showTip?: boolean;
        }

        export interface IItemGeneratingArgs extends IItemArgs {
            item: HTMLElement;
        }

        export interface ITemplateSelectArgs extends IItemArgs {
            template: string[];
        }

        export interface ILoadContext {
            pageNumber: number;
            pageSize: number;
            lastItem: object;
            filter: FilterInfo[] | FilterFunc;
            sort: SortInfo | SortFunc;
            success(items: object[]): void;
            failed(err: string): void;
        }

        export interface FilterFunc {
            (value: object): boolean;
        }

        export interface SortFunc {
            (left: { item: object; index: number }, right: { item: object; index: number }): number;
        }

        export interface SortInfo {
            name: string;
            isAsc: boolean;
        }

        export interface FilterInfo {
            name: string;
            comparator: FilterComparator;
            filterString?: string;
            operatorType?: FilterOperatorType;
            params?: any | any[];
        }

        export interface AutofitInfo {
            name: string;
            autofit: boolean;
            minWidth?: number | string;
            maxWidth?: number | string;
        }

        export interface DropEventArgs {
            source: GcListBox;
            target: GcListBox;
            insertIndex: number;
            dataIndexes: number[];
            cancel: boolean;
        }

        export interface IItemArgs {
            index: number;
            itemObject: object;
        }

        export interface ListBoxConfig extends ListConfig {
            width?: number | 'auto' | null;
            height?: number | null;
            showCheckBox?: boolean;
            selectionMode?: ListBoxSelectionMode | null;
            allowResize?: boolean;
            overflow?: ScrollBars | null;
            visible?: boolean;
            enabled?: boolean;
            dragDrop?: boolean;
            dragSource?: ListBoxDragSource;
            findStringFilterComparator?: FilterComparator;
            tipTemplate?: (context: ListBoxTipTemplateContext) => HTMLElement | string;
            displayMode?: ListBoxDisplayMode;
            treeViewConfig?: TreeViewConfig;
        }

        export interface TreeViewConfig {
            imageMemberPath?: string | null;
            childrenMemberPath?: string | null;
            expandedMemberPath?: string | null;
            selectableNodeType?: TreeViewNodeType;
            flat?: boolean;
            valueConsistsOf?: ValueConsistsOf;
            itemTemplate?: string | string[] | ((item: object) => HTMLElement) | null;
            load?: (context: ITreeViewLoadContext) => void | null;
            generatingItem?: (args: ITreeViewItemGeneratingArgs) => void;
            selectTemplate?: (args: ITreeViewTemplateSelectArgs) => string;
            formatItem?: (item: object) => void;
        }

        export interface ITreeView {
            readonly imageMemberPath: string;
            readonly childrenMemberPath: string;
            readonly expandedMemberPath: string;
            readonly selectableNodeType: TreeViewNodeType;
            readonly flat: boolean;
            readonly nodes: ITreeViewNode[];
            selectedNode: ITreeViewNode;
            checkedNodes: ITreeViewNode[];
            valueConsistsOf: ValueConsistsOf;
            getNode(item: object): ITreeViewNode;
        }

        export interface ListBoxTipTemplateContext {
            item: object | undefined;
            column: ColumnConfig;
            displayText: string;
        }

        export interface GcMaskConfig extends GcInputManBaseConfig {
            autoConvert?: boolean;
            value?: string | null;
            formatPattern?: string | null;
            promptChar?: string | null;
            showLiterals?: ShowLiterals | null;
            tabAction?: TabAction | null;
            text?: string | null;
            clipContent?: ClipContent | null;
            showSpinButton?: boolean;
            spinButtonPosition?: SpinButtonAlignment | null;
            allowSpin?: boolean | SpinType;
            spinWheel?: boolean;
            spinOnKeys?: boolean;
            exitOnLastChar?: boolean;
            highlightText?: HighlightText | null;
            acceptsTabChar?: TabCharMode;
            acceptsCrlf?: CrLfMode | null;
        }

        export interface InputChangingEventArgs {
            Result: string;
            Cancel: boolean;
        }

        export interface GcNumberConfig extends GcInputManBaseConfig {
            value?: number | string | null;
            text?: string | null;
            watermarkZeroText?: string | null;
            formatDigit?: string | null;
            displayPositivePrefix?: string | null;
            displayFormatDigit?: string | null;
            maxValue?: number | string | null;
            minValue?: number | string | null;
            positivePrefix?: string | null;
            positiveSuffix?: string | null;
            displayPositiveSuffix?: string | null;
            negativePrefix?: string | null;
            displayNegativePrefix?: string | null;
            negativeSuffix?: string | null;
            displayNegativeSuffix?: string | null;
            valueSign?: ValueSign | null;
            adjustValueOnFocus?: boolean;
            allowDeleteToNull?: boolean;
            clearAction?: ClearModeAction | null;
            acceptsDecimal?: DecimalMode | null;
            currencySymbol?: string | null;
            decimalPoint?: string | null;
            maxMinBehavior?: MaxMinBehavior | null;
            separator?: string | null;
            watermarkDisplayZeroText?: string | null;
            showSpinButton?: boolean;
            spinButtonPosition?: SpinButtonAlignment | null;
            showNumericPad?: boolean;
            numericPadPosition?: DropDownButtonAlignment | null;
            showCalculatorAsDropDown?: boolean;
            showCalculatorAsPopup?: boolean;
            calculatorButtonPosition?: DropDownButtonAlignment | null;
            showDropDownSlider?: boolean;
            sliderButtonPosition?: DropDownButtonAlignment | null;
            dropDownConfig?: GcCalculatorConfig | IGcDropDownSliderConfig | null;
            highlightText?: boolean;
            allowSpin?: boolean | SpinType;
            spinOnKeys?: boolean;
            spinWheel?: boolean;
            spinWrap?: boolean;
            spinIncrement?: number;
            clipContent?: ClipContent | null;
            sliderConfig?: INumberSliderConfig;
            spinFromZeroWhenValueIsNull?: boolean;
            autoConvert?: boolean;
            acceptsCrlf?: CrLfMode | null;
        }

        export interface INumberSliderConfig {
            visible?: boolean;
            step?: number | null;
            marks?: number[];
            valueChangeMode?: SliderValueChangeMode;
            showMarkLabel?: boolean;
            markLabelFormat?: FormatFunction;
            markLabelPosition?: SliderTooltipPosition;
            showMarkTip?: boolean;
            markTipFormat?: FormatFunction;
            position?: SliderPosition;
            tooltipShowMode?: SliderTooltipShowMode;
            tooltipFormat?: FormatFunction;
            tooltipPosition?: SliderTooltipPosition;
            replaceEditor?: boolean;
            direction?: SliderDirection;
            keyboard?: boolean;
            keyStep?: number;
        }

        export interface INumberSlider {
            visible: boolean;
            step: number | null;
            marks: number[];
            valueChangeMode: SliderValueChangeMode;
            showMarkLabel: boolean;
            markLabelFormat: FormatFunction;
            markLabelPosition: SliderTooltipPosition;
            showMarkTip: boolean;
            markTipFormat: FormatFunction;
            position: SliderPosition;
            tooltipShowMode: SliderTooltipShowMode;
            tooltipFormat: FormatFunction;
            tooltipPosition: SliderTooltipPosition;
            replaceEditor: boolean;
            direction: SliderDirection;
            keyboard: boolean;
            keyStep: number;
        }

        export interface ShortcutKeyActionArgs {
            key: GcShortcutKey;
            shift?: boolean;
            ctrl?: boolean;
            alt?: boolean;
            target?: HTMLElement | Window | Document | GcInputManBase | GcComboBox | GcListBox | GcCalculator | GcDateTimePicker;
            action?: IAction | GcShortcutAction;
            blockMessage?: boolean;
        }

        export interface RemoveShortcutKeyActionArgs {
            key?: GcShortcutKey;
            shift?: boolean;
            ctrl?: boolean;
            alt?: boolean;
            target?: HTMLElement | Window | Document | GcInputManBase | GcComboBox | GcListBox | GcCalculator | GcDateTimePicker;
            action?: IAction | GcShortcutAction;
        }

        export interface PreActionEventArgs extends ShortcutKeyActionArgs {
            cancel: boolean;
            evt: KeyboardEvent;
        }

        export interface PostActionEventArgs extends ShortcutKeyActionArgs {
            evt: KeyboardEvent;
        }

        export interface IActionArgs {
            key: GcShortcutKey;
            shift: boolean;
            ctrl: boolean;
            alt: boolean;
            target: HTMLElement | Window | Document | GcInputManBase | GcComboBox | GcListBox | GcCalculator | GcDateTimePicker;
            evt: KeyboardEvent;
        }

        export interface IAction {
            (args: IActionArgs): void;
        }

        export interface GcSoftKeyboardConfig {
            randomDisplay?: boolean;
            hideButtonWhenMouseOn?: boolean;
            displayType?: DisplayType | null;
            showSecurityOptions?: boolean;
            securityLevel?: SecurityLevel | null;
            qwertyLayout?: boolean;
            showCapitalLetters?: boolean;
            target?: HTMLInputElement;
            enabled?: boolean;
        }

        export interface ISoftKeyBoardKey {
            keyType: KeyType;
            text: string;
            value: string;
            template: HTMLElement;
            originalKeyOrder: number;
            hardwareKeyboardOrder: number;
        }

        export interface IKeyCollection {
            /**
             * Add one key or several keys to current key collection.
             * @param key could be a string or string[] or a softKeyboard object or softKeyboard array.
             * @param index which position this key need to add.
             */
            addKey(key: string | string[] | ISoftKeyBoardKey | ISoftKeyBoardKey[], index?: number): any;
            /**
             * Remove one key or several keys from current key collection.
             * @param key could be a string or string[] or a softKeyboard object or softKeyboard array.
             */
            removeKey(key: string | string[] | ISoftKeyBoardKey | ISoftKeyBoardKey[]): any;
            /**
             * Find a key from current key collection.
             * @param name should be the name or value of the key.
             */
            findKey(name: string): ISoftKeyBoardKey;
            /**
             * get all keys from current key collection.
             */
            keys: ISoftKeyBoardKey[];
        }

        export interface GcStepperConfig {
            steps: StepperStepConfig[];
            orientation?: StepperOrientation;
            stepType?: StepperStepType;
            labelPosition?: StepperLabelPosition;
            linear?: boolean;
            activeIndicatorIcon?: string | (() => Element);
            invalidIndicatorIcon?: string | (() => Element);
            validIndicatorIcon?: string | (() => Element);
            width?: number | string;
            height?: number | string;
            readOnly?: boolean;
            enabled?: boolean;
            visible?: boolean;
            animation?: boolean;
            headerPosition?: StepperHeaderPosition;
            activeIndex?: number;
        }

        export interface StepperStepConfig {
            text?: string;
            label?: string;
            icon?: string | (() => Element);
            title?: string;
            optional?: boolean | string;
            disabled?: boolean;
            isValid?: boolean | null;
            target?: string | (() => Element);
        }

        export interface IStepperStep {
            disabled: boolean;
            isValid: boolean | null;
            optional: boolean | string;
        }

        export interface StepperStepChangedEventArgs {
            readonly oldIndex: number;
            readonly newIndex: number;
            readonly oldStep: IStepperStep;
            readonly newStep: IStepperStep;
        }

        export interface StepperStepChangingEventArgs extends StepperStepChangedEventArgs {
            cancel: boolean;
        }

        export interface ITagBoxDropDownTree {
            readonly imageMemberPath: string;
            readonly childrenMemberPath: string;
            readonly expandedMemberPath: string;
            readonly selectableNodeType: TreeViewNodeType;
            readonly flat: boolean;
            readonly virtualMode: boolean;
            checkOnClick: boolean;
            checkBySpace: boolean;
            valueConsistsOf: ValueConsistsOf;
        }

        export interface TagBoxConfig extends GcTagBoxEditorConfig {
            items?: object[] | string[] | null;
            showDropDown?: boolean;
            autoFilter?: AutoFilter | null;
            showDropDownIfNoItems?: boolean;
            autoSelect?: boolean;
            dropDownAlignmentMode?: GcTagBoxDropDownAlignmentMode;
            value?: (string | object)[];
            dropDownHeight?: number | null;
            dropDownWidth?: number | null;
            allowDropDownResize?: boolean;
            dropDownDisplayMemberPath?: string;
            dropDownItemTemplate?: string | null;
            dropDownItemHeight?: number;
            appendCustomTagToDropDown?: boolean;
            dropDownType?: TagBoxDropDownType;
            dropDownTreeConfig?: TagBoxDropDownTreeConfig;
            dropDownItemCountInRow?: number;
        }

        export interface TagBoxDropDownTreeConfig {
            imageMemberPath?: string | null;
            childrenMemberPath?: string | null;
            expandedMemberPath?: string | null;
            checkOnClick?: boolean;
            checkBySpace?: boolean;
            selectableNodeType?: TreeViewNodeType;
            flat?: boolean;
            load?: (context: ITreeViewLoadContext) => void | null;
            valueConsistsOf?: ValueConsistsOf;
            itemTemplate?: string | ((item: object) => HTMLElement) | null;
            virtualMode?: boolean | null;
        }

        export interface ITagBoxDropDown {
            animationType: DropDownAnimationType;
            open: (showAnimation: boolean) => void;
            close: (showAnimation: boolean) => void;
            toggleOpen: () => void;
            getElement: () => HTMLElement;
            updatePosition: () => void;
        }

        export interface GcTextBoxConfig extends GcInputManBaseConfig {
            autoConvert?: boolean;
            ellipsis?: EllipsisMode | null;
            ellipsisString?: string | null;
            format?: string | null;
            lengthAsByte?: boolean;
            maxLength?: number | null;
            passwordChar?: string | null;
            text?: string | null;
            useSystemPasswordChar?: boolean;
            IMEReadingStringAppend?: boolean;
            IMEReadingStringKanaMode?: KanaMode | null;
            IMEReadingStringEnableAlphabetReadingMapping?: boolean | null;
            exitOnLastChar?: boolean;
            highlightText?: boolean;
            passwordRevelationMode?: PasswordRevelationMode | null;
            useStandardPasswordInput?: boolean;
            trimMode?: TrimMode;
            acceptsTabChar?: TabCharMode;
            acceptsCrlf?: CrLfMode | null;
        }

        export interface GcMultiLineTextBoxConfig extends GcInputManBaseConfig {
            autoConvert?: boolean;
            countWrappedLine?: boolean;
            format?: string | null;
            lengthAsByte?: boolean;
            lines?: string[] | null;
            maxLength?: number;
            maxLineCount?: number;
            scrollBarMode?: ScrollBarMode | null;
            scrollBars?: ScrollBars | null;
            text?: string | null;
            wordWrap?: boolean;
            acceptsReturn?: boolean;
            acceptsAltReturn?: boolean;
            acceptsTab?: boolean;
            IMEReadingStringAppend?: boolean;
            IMEReadingStringKanaMode?: KanaMode | null;
            IMEReadingStringEnableAlphabetReadingMapping?: boolean;
            exitOnLastChar?: boolean;
            highlightText?: boolean;
            cursorPosition?: MultiLineCursorPosition;
            resize?: ResizeMode;
            hiddenResizeIcon?: boolean;
            AITextAssistantConfig?: AI.GcTextAssistantConfig;
            showAITextAssistantButton?: boolean;
            useAISmartTip?: boolean;
            AISmartTipConfig?: AI.GcSmartTipConfig;
        }

        export interface IReadingStringChangedEventArgs {
            readingString: string;
        }

        export interface ITourTarget {
            getClientRect(): DOMRect;
            getElements(): Element[];
        }

        export interface GcTourConfig {
            steps: TourStepConfig[];
            disableInteraction?: boolean;
            offset?: number | number[];
            showOverlay?: boolean;
            highlightRadius?: number;
            closeOnOverlayClick?: boolean;
            closeOnEsc?: boolean;
            showCloseButton?: boolean;
            hidePreviousButton?: boolean;
            hideDoneButton?: boolean;
            tipClassName?: string;
            tipDirection?: TipDirection;
            tipPosition?: TipPosition;
            tipResource?: TourTipResourceConfig;
            autoFocusTarget?: boolean;
            customTip?: (context: TourCustomTipContext) => void;
        }

        export interface TourCustomTipContext {
            tour: GcTour;
            dom: TourTipDOM;
        }

        export interface TourTipDOM {
            readonly container: HTMLElement;
            readonly title: HTMLElement;
            readonly description: HTMLElement;
            readonly footer: HTMLElement;
            readonly progress: HTMLElement;
            readonly previousButton: HTMLElement;
            readonly nextButton: HTMLElement;
            readonly closeButton: HTMLElement;
            readonly footerButtons: HTMLElement;
            readonly message: HTMLElement;
        }

        export interface TourTipResourceConfig {
            nextButton?: string;
            previousButton?: string;
            doneButton?: string;
        }

        export interface TourStepConfig {
            disableInteraction?: boolean;
            offset?: number | number[];
            showOverlay?: boolean;
            highlightRadius?: number;
            closeOnOverlayClick?: boolean;
            closeOnEsc?: boolean;
            target?: TourTarget;
            title?: string | (() => HTMLElement);
            description?: string | (() => HTMLElement);
            showCloseButton?: boolean;
            tipClassName?: string;
            tipDirection?: TipDirection;
            tipPosition?: TipPosition;
            tipResource?: TourTipResourceConfig;
            message?: string | (() => HTMLElement);
            disablePreviousButton?: boolean;
            disableNextButton?: boolean;
            autoFocusTarget?: boolean;
            customTip?: (context: TourCustomTipContext) => void;
        }

        export interface ITourStep {
            readonly target: TourTarget;
            disableInteraction: boolean;
            offset: number | number[];
            showOverlay: boolean;
            highlightRadius: number;
            closeOnOverlayClick: boolean;
            closeOnEsc: boolean;
            title: string | (() => HTMLElement);
            description: string | (() => HTMLElement);
            showCloseButton: boolean;
            tipClassName: string;
            tipDirection: TipDirection;
            tipPosition: TipPosition;
            tipResource: TourTipResourceConfig;
            message: string | (() => HTMLElement);
            disablePreviousButton: boolean;
            disableNextButton: boolean;
            autoFocusTarget: boolean;
            customTip: (context: TourCustomTipContext) => void;
        }

        export interface TourStepChangedEventArgs {
            readonly oldIndex: number;
            readonly newIndex: number;
            readonly oldStep: ITourStep;
            readonly newStep: ITourStep;
        }

        export interface TourStepChangingEventArgs extends TourStepChangedEventArgs {
            cancel: boolean;
        }

        export interface TourClosedEventArgs {
            readonly complete: boolean;
        }

        export interface ITreeViewNode {
            readonly dataItem: object;
            readonly parent: ITreeViewNode;
            readonly nodes: ITreeViewNode[] | null;
            readonly level: number;
            isChecked: boolean;
            isSelected: boolean;
            isExpanded: boolean;
            refresh(): void;
            ensureVisible(): void;
            next(visible?: boolean): ITreeViewNode;
            previous(visible?: boolean): ITreeViewNode;
        }

        export interface TreeViewSortFunc {
            (item1: object, item2: object): number;
        }

        export interface ITreeViewItemGeneratingArgs {
            element: HTMLElement;
            item: object;
        }

        export interface ITreeViewTemplateSelectArgs {
            template: string[];
            item: object;
        }

        export interface ITreeViewLoadContext {
            item: object;
            callback(items: object[]): void;
        }

        export interface InputArgs {
            oldText: string;
            newText: string;
        }

        export interface GcTagBoxEditorConfig {
            width?: number | string;
            height?: number | string;
            watermarkNullText?: string;
            watermarkDisplayNullText?: string;
            tagTemplate?: string | ((args: any) => HTMLElement);
            readOnly?: boolean;
            enabled?: boolean;
            allowResize?: boolean;
            displayMode?: TagBoxDisplayMode;
            allowCopyTag?: boolean;
            allowDragTag?: boolean;
            allowSelectTag?: boolean;
            allowCustomTag?: boolean;
            applyCustomTagKey?: Key;
            separator?: string;
            tagImageMemberPath?: string;
            tagTextMemberPath?: string;
            showImage?: boolean;
            minHeight?: number | string;
            minWidth?: number | string;
            maxHeight?: number | string;
            maxWidth?: number | string;
            maxTagWidth?: number;
            uniqueTags?: boolean;
            maxTagCount?: number;
            imageAlignment?: GcTagImageAlignment;
            floatingLabelText?: string;
            floatingLabelType?: FloatingLabelType;
            floatingLabelDirection?: FloatingLabelDirection;
            helpContent?: string;
            showHelpButton?: boolean;
            showClearButton?: boolean;
            tagValidator?: (args: any) => boolean;
        }
        export function FindIMControl(el: string | Element | Element[]): any;
        export function updateCustomEra(customEras: Array<ICustomEra>): void;
        export function setCulture(v: GCIMLanguage | string, cultureResource?: object): void;
        export namespace AI {
            export class GcTextAssistant {
                static registerBehavior(name: string, behavior: GcTextAssistantBehaviorConfig): void;
                static start<T extends IGcTextAssistantSupport>(
                    control: T,
                    behavior: GcTextAssistantBehavior | string,
                    behaviorConfig?: GcTextAssistantBehaviorConfig
                ): void;
                static stop(): void;
                static destroy(): void;
            }

            export type IGcTextAssistantItem = IGcTextAssistantCommonItem | IGcTextAssistantNestedItem;

            export type AIServiceFunc<T extends IGcTextAssistantSupport> = (context: RequestContext<T>) => Promise<string | void>;

            export enum GcTextAssistantDialogStyle {
                Compact = 'compact',
                Detailed = 'detailed',
                OnlyGeneratedContent = 'onlygeneratedcontent',
            }

            export enum GcTextAssistantBehavior {
                GenerateText = 'generatetext',
                ReviseText = 'revisetext',
                SummarizeContent = 'summarizecontent',
                ExpandContent = 'expandcontent',
                SimplifyContent = 'simplifycontent',
                ChangeToProfessionalTone = 'changetoprofessionaltone',
                ChangeToCasualTone = 'changetocasualtone',
                ChangeToBusinessStyle = 'changetobusinessstyle',
                ChangeToTechnicalStyle = 'changetotechnicalstyle',
                TranslateToJapanese = 'translatetojapanese',
                TranslateToEnglish = 'translatetoenglish',
            }

            export enum GcSmartTipShortCutKey {
                Tab = 9,
                Enter = 13,
                Shift = 16,
                Ctrl = 17,
                Alt = 18,
                Escape = 27,
                D0 = 48,
                D1 = 49,
                D2 = 50,
                D3 = 51,
                D4 = 52,
                D5 = 53,
                D6 = 54,
                D7 = 55,
                D8 = 56,
                D9 = 57,
                A = 65,
                B = 66,
                C = 67,
                D = 68,
                E = 69,
                F = 70,
                G = 71,
                H = 72,
                I = 73,
                J = 74,
                K = 75,
                L = 76,
                M = 77,
                N = 78,
                O = 79,
                P = 80,
                Q = 81,
                R = 82,
                S = 83,
                T = 84,
                U = 85,
                V = 86,
                W = 87,
                X = 88,
                Y = 89,
                Z = 90,
            }

            export interface IGcTextAssistantCommonItem {
                name: string;
                text?: string;
                selection?: boolean;
                behavior?: GcTextAssistantBehaviorConfig;
            }

            export interface IGcTextAssistantNestedItem {
                text: string;
                subAIBehaviorItems: Array<IGcTextAssistantItem>;
            }

            export interface GcTextAssistantConfig {
                menuItems?: IGcTextAssistantItem[];
                behaviorConfig?: GcTextAssistantBehaviorConfig;
            }

            export interface GcSmartTipShortCut {
                key: GcSmartTipShortCutKey;
                shift?: boolean;
                ctrl?: boolean;
                alt?: boolean;
            }

            export interface GcSmartTipConfig {
                duration?: number;
                prompt?: string;
                scenario?: string;
                createShortcut?: GcSmartTipShortCut;
                applyShortcut?: GcSmartTipShortCut;
                closeShortcut?: GcSmartTipShortCut;
            }

            export interface RequestContext<T extends IGcTextAssistantSupport> {
                prompt: string;
                input: string;
                streamWriter?: (text: string) => void;
                isStreamingOutput: boolean;
                signal: AbortSignal;
                behavior: string;
                retry: boolean;
                control: T;
            }

            export interface GcTextAssistantBehaviorConfig {
                prompt?: string | PromptFunc;
                originalInput?: string | InputFunc;
                dialogConfig?: GcTextAssistantDialogConfig;
            }

            export interface GcTextAssistantDialogConfig {
                minWidth?: number;
                minHeight?: number;
                maxWidth?: number;
                maxHeight?: number;
                width?: number;
                height?: number;
                minVisibleWidth?: number;
                minVisibleHeight?: number;
                allowResize?: boolean;
                resource?: IGcTextAssistantDialogResource;
                style?: GcTextAssistantDialogStyle;
                isModal?: boolean;
            }

            export interface PromptFunc {
                (context: IGcTextAssistantSupport): string;
            }

            export interface InputFunc {
                (control: IGcTextAssistantSupport): string;
            }

            export interface IGcTextAssistantSupport {
                getOriginalInput(): string;
                applyAIGeneratedText(text: string): void;
                insertAIGeneratedText(text: string): void;
            }

            export interface IGcTextAssistantDialogResource {
                dialogTitle?: string;
                inputLabel?: string;
                inputPlaceholder?: string;
                generatedPlaceholder?: string;
                generateBtnContent?: string;
                retryBtnContent?: string;
                generatedLabel?: string;
                applyBtnContent?: string;
                insertBtnContent?: string;
                stopBtnContent?: string;
                contentFooter?: string | HTMLElement;
                contentHeader?: string | HTMLElement;
                emptyInputMessage?: string;
            }
        }
    }
}
export = GC;
