import type { Mapping, Primitive } from 'clientnode'; import type { Requireable } from 'clientnode/property-types'; import type { ComponentClass, FocusEvent, ForwardRefExoticComponent, FunctionComponent, MouseEvent, ReactElement, RefAttributes } from 'react'; import type { GenericEvent } from 'react-generic-tools/type'; import type { ComponentAdapter, StaticWebComponent as StaticBaseWebComponent, ValidationMapping } from 'web-component-wrapper/type'; import type { ThemeProviderProps } from '@rmwc/theme'; export declare const PrimitiveTypes: readonly ['boolean', 'DateTime', 'integer', 'number', 'string']; export type PrimitiveType = typeof PrimitiveTypes[number]; export type Type = boolean | number | string | object; export type TypeDefinition = Array | Type; export interface SelectionOption { label: string; value: Primitive; } export type NormalizedSelection = Array; export type BaseSelectionDefinition = Array | Mapping | NormalizedSelection; export type SelectionDefinition = Array<[Primitive, string]> | BaseSelectionDefinition; export interface CommonBaseModel { declaration: string; description: string; name: string; emptyEqualsNull: boolean; maximum: number | string; minimum: number | string; maximumLength: number; minimumLength: number; type: TypeDefinition; trim: boolean; value?: Type; } export interface ModelState { dirty: boolean; pristine: boolean; touched: boolean; untouched: boolean; focused: boolean; visited: boolean; invalid: boolean; valid: boolean; invalidRequired: boolean; } export type Pattern = Array | RegExp | string; export interface BaseModel extends CommonBaseModel { pattern?: Pattern; invertedPattern?: Pattern; selection?: BaseSelectionDefinition; mutable: boolean; writable: boolean; nullable: boolean; state?: ModelState; } export interface BaseProperties extends CommonBaseModel, ModelState { className: Array | string; styles: Mapping; themeConfiguration: ThemeProviderProps['options']; disabled: boolean; enforceUncontrolled: boolean; id?: string; label: string; name: string; initialValue: T; model: BaseModel; required: boolean; requiredText: string; componentProperties: Mapping; domNodeProperties: Mapping; selection?: SelectionDefinition; showDeclaration: boolean; showInitialValidationState: boolean; showValidationState: boolean; tooltip: string; triggerInitialPropertiesConsolidation: boolean; } export type BaseProps = Partial, 'model'>> & { model?: (Partial, 'state'>> & { state?: Partial; }); }; export type DefaultBaseProperties = Omit, 'model'> & { model: BaseModel; }; export interface TypedProperties extends BaseProperties { initialValue: T; model: BaseModel; onBlur: (event: GenericEvent | undefined, properties: this) => void; onChange: (properties: this, event?: GenericEvent) => void; onChangeShowDeclaration: (show: boolean, event: GenericEvent | undefined, properties: this) => void; onChangeState: (state: ModelState, event: GenericEvent | undefined, properties: this) => void; onChangeValue: (value: T, event: GenericEvent | undefined, properties: this) => void; onClick: (event: MouseEvent, properties: this) => void; onFocus: (event: FocusEvent, properties: this) => void; onTouch: (event: GenericEvent, properties: this) => void; } export type Properties = TypedProperties & CommonBaseModel; export type Props = Partial, 'model'>> & { model?: (Partial, 'state'>> & { state?: Partial; }); }; export type DefaultProperties = Omit, 'model'> & { model: BaseModel; }; export interface State { modelState?: ModelState; value?: null | T; } export interface ValueState { modelState: MS; value: null | T; } export interface StaticWebComponent> extends StaticBaseWebComponent { defaultModelState: MS; defaultProperties: DP; strict: boolean; } export type StaticComponent> = Omit, 'propTypes'> & StaticWebComponent; export type StaticFunctionComponent> = Omit, 'propTypes'> & StaticComponent; export interface Component, MS = ModelState, DP = DefaultProperties, A = ComponentAdapter

> extends Omit, 'propTypes'>, StaticWebComponent { (props: P & RefAttributes): ReactElement; } export declare const baseModelPropertyTypes: ValidationMapping; export declare const modelStatePropertyTypes: { [key in keyof ModelState]: Requireable; }; export declare const modelPropertyTypes: ValidationMapping; export declare const propertyTypes: ValidationMapping; export declare const defaultModelState: ModelState; export declare const defaultModel: BaseModel; export declare const defaultProperties: DefaultProperties; export interface ConfigurationProperties { strict?: boolean; themeConfiguration?: ThemeProviderProps['options']; tooltip?: Properties['tooltip']; wrap?: boolean; }