import type { Mapping } from 'clientnode'; import type { FocusEvent as ReactFocusEvent, KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent, MutableRefObject as RefObject, ReactNode, SyntheticEvent } from 'react'; import type { GenericEvent } from 'react-generic-tools/type'; import type { NativeType } from '../components/TextInput/type'; import type { NormalizedSelection } from '../type'; export type IconStrategy = 'auto' | 'ligature' | 'className' | 'url' | 'component' | 'custom'; export type Size = 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large'; export interface BaseProperties { componentProperties?: Mapping; domNodeProperties?: Mapping; } export interface TooltipProperties extends BaseProperties { children: ReactNode; value: string; } export interface HelpTextProperties extends BaseProperties { persistent?: boolean; validationMsg?: boolean; children: ReactNode; } export type HelpText = ReactNode | HelpTextProperties; export interface LowLevelBaseComponentProperties extends BaseProperties { id?: string; classNames?: Array; styles?: object; onClick?: (event: ReactMouseEvent) => void; onFocus?: (event: ReactFocusEvent) => void; onBlur?: (event: SyntheticEvent) => void; onKeyUp?: (event: ReactKeyboardEvent) => void; onKeyDown?: (event: ReactKeyboardEvent) => void; } export interface CircularProgressProperties extends BaseProperties { size?: Size; } export interface ErrorProperties extends BaseProperties { applyToChildren?: boolean; children: ReactNode; } export interface IconProperties extends LowLevelBaseComponentProperties { size?: Size; icon: ReactNode; strategy?: IconStrategy; } export interface IconButtonProperties extends IconProperties { onIcon?: string; value?: boolean; disabled?: boolean; onChange?: (event: SyntheticEvent) => void; } export type InputDomNodes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement; export interface InputReference { input: InputDomNodes | null; } export interface InputProperties extends LowLevelBaseComponentProperties { ref?: RefObject; disabled?: boolean; invalid?: boolean; name?: string; label?: ReactNode; domNodeProperties?: Mapping; helpText?: ReactNode | HelpText; onChange?: (eventOrValue: GenericEvent | Type) => void; } export declare enum MediaCardRepresentationType { IMAGE = "image", IFRAME = "iframe", TEXT = "text", VIDEO = "video", PENDING = "pending" } export interface MediaCardReference { card?: HTMLDivElement | null; iFrame?: HTMLIFrameElement | null; downloadLink?: HTMLAnchorElement | null; deleteButton: HTMLElement | null; uploadButton?: HTMLElement | null; } export interface MediaCardProperties extends LowLevelBaseComponentProperties { ref?: RefObject; iframeWrapperClassNames?: Array; textRepresentationClassNames?: Array; infoClassNames?: Array; infoBodyClassNames?: Array; downloadLinkClassNames?: Array; imageClassNames?: Array; deleteButton: ReactNode; downloadButton: ReactNode; editButton: ReactNode; newButton: ReactNode; fileName?: string; name: string; description?: string; declaration?: string; children?: ReactNode; type?: MediaCardRepresentationType; url?: string; content?: ReactNode; contentType?: string; disabled?: boolean; invalid?: boolean; errorMessage?: string; empty?: boolean; onChange?: (event?: SyntheticEvent) => void; onClickAddOrEdit?: (event?: ReactMouseEvent) => void; } export interface CheckboxProperties extends InputProperties { indeterminate?: boolean; children?: ReactNode; value: boolean; onChange?: (eventOrValue: GenericEvent | boolean) => void; } export type TextInputProperties = InputProperties; export interface SelectProperties extends TextInputProperties { options: NormalizedSelection; value: Type; } export interface MenuReference { focusItem: (index: number) => void; } export interface MenuProperties extends LowLevelBaseComponentProperties { ref?: RefObject; options: Array; itemClassNames?: Array; pendingClassNames?: Array; open?: boolean; pending?: boolean; onSelect?: (event: SyntheticEvent) => void; } export interface TypeTextInputProperties extends TextInputProperties { value?: Type; characterCount?: boolean; required?: boolean; maximumLength?: number; minimumLength?: number; placeholder?: string; onLabelClick?: (event: ReactMouseEvent) => void; } export interface TextFieldProperties extends TypeTextInputProperties { type?: NativeType; maximum?: number; minimum?: number; step?: number; leadingIcon?: IconProperties | string; trailingIcon?: IconProperties | string; } export interface InputEventWrapper { blur: (event: object) => void; focus: (event: object) => void; input: (value: number | string, event: object) => void; } export interface EventMapperWrapperReference { input: Type | null; eventMapper: InputEventWrapper; } export interface TextAreaReference extends InputReference { input: HTMLTextAreaElement | null; label: HTMLLabelElement | null; } export interface TextAreaProperties extends TypeTextInputProperties { ref?: RefObject; classNamePrefix?: string; resizeable?: boolean; rows?: number; children?: ReactNode; barContentSlot?: ReactNode; }