diff --git a/packages/inula/scripts/rollup/build-types.js b/packages/inula/scripts/rollup/build-types.js index 66a5e5620d7393cf6041945d0552abc609d41f40..ca9c8f53314ca70fec4815c81df3d42466556872 100644 --- a/packages/inula/scripts/rollup/build-types.js +++ b/packages/inula/scripts/rollup/build-types.js @@ -42,6 +42,9 @@ function deleteFolder(filePath) { * @param folders {string[]} * @returns {{buildEnd(): void, name: string}} */ +//先明确什么 +//打包出来 +//ut的例子 export function cleanUp(folders) { return { name: 'clean-up', @@ -50,7 +53,42 @@ export function cleanUp(folders) { }, }; } +/** + * 自定义插件:处理生成的 .d.ts 文件 + * 例如,移除内部方法或不需要的类型定义。 + * @returns {{writeBundle(): void, name: string}} + */ +function processDTS() { + return { + name: 'process-dts', + writeBundle() { + const dtsFilePath = path.resolve('./build/@types/index.d.ts'); + if (fs.existsSync(dtsFilePath)) { + let dtsContent = fs.readFileSync(dtsFilePath, 'utf-8'); + + // 删除所有带有下划线的 export 声明 + dtsContent = dtsContent.replace(/^export\s+.*_.*;/gm, ''); + + // 替换特定的导入路径 + dtsContent = dtsContent.replace(/import\("openinula"\)/g, 'import { InulaNode } from "openinula"'); + + // 处理 .d.ts 文件中所有导出的函数 + dtsContent = dtsContent.replace( + /export\s+(function|const|let|var|type|interface)\s+(\w+)\s*(:|\()/g, + (match, type, name) => { + if (type === 'function') { + return `export function ${name}`; + } + return match; + } + ); + fs.writeFileSync(dtsFilePath, dtsContent, 'utf-8'); + } + }, + }; +} +module.exports = processDTS; function buildTypeConfig() { return { input: ['./build/@types/index.d.ts'], @@ -58,7 +96,7 @@ function buildTypeConfig() { file: './build/@types/index.d.ts', format: 'es', }, - plugins: [dts(), cleanUp(['./build/@types/'])], + plugins: [dts(), processDTS(), cleanUp(['./build/@types/'])], }; } diff --git a/packages/inula/src/external/JSXElement.ts b/packages/inula/src/external/JSXElement.ts index 89a7a3c75a601d8ade9f1c1266201253da1a68c1..86579ff76f5b47131e9cbcc0646e70594a1b2eb7 100644 --- a/packages/inula/src/external/JSXElement.ts +++ b/packages/inula/src/external/JSXElement.ts @@ -17,7 +17,10 @@ import { TYPE_COMMON_ELEMENT } from './JSXElementType'; import { getProcessingClassVNode } from '../renderer/GlobalVar'; import { Source } from '../renderer/Types'; import { BELONG_CLASS_VNODE_KEY } from '../renderer/vnode/VNode'; -import { InulaElement, KVObject } from '../types'; +import { Context, ExoticComponent, InulaElement, InulaNode, KVObject, ConsumerProps, ProviderProps } from '../types'; +import { OriginalComponent } from '../inulax/adapters/reduxReact'; +import { ReduxStoreHandler } from '../inulax/adapters/redux'; +import { Subscription } from '../inulax/adapters/subscription'; /** * vtype 节点的类型,这里固定是element @@ -72,8 +75,8 @@ function mergeDefault(sourceObj, defaultObj) { // ['key', 'ref', '__source', '__self']属性不从setting获取 const keyArray = ['key', 'ref', '__source', '__self']; - -function buildElement(isClone, type, setting, children) { +//这个没太懂 todo +function buildElement(isClone: boolean, type, setting, children: InulaNode[]) { // setting中的值优先级最高,clone情况下从 type 中取值,创建情况下直接赋值为 null const key = setting && setting.key !== undefined ? String(setting.key) : isClone ? type.key : null; const ref = setting && setting.ref !== undefined ? setting.ref : isClone ? type.ref : null; @@ -110,14 +113,61 @@ function buildElement(isClone, type, setting, children) { } // 创建Element结构体,供JSX编译时调用 -export function createElement(type, setting, ...children) { +//type 细节化 todo 参考react +export function createElement

( + //仍然需要修改 MergeProps定义问题 + type: OriginalComponent

, + setting?: P | null, + ...children: InulaNode[] +): InulaElement

; + +export function createElement( + type: ExoticComponent>, + setting: { [p: string]: any } | null, + ...children: InulaNode[] +): InulaElement; + +export function createElement( + type: ExoticComponent>, + setting: { [key: string]: any } | null, + ...children: InulaNode[] +): InulaElement; + +// 重载签名 2:处理 InulaElement 类型 +export function createElement

(type: InulaElement

, setting?: P | null, ...children: InulaNode[]): InulaElement

; + +// 实现签名:与重载签名一致的实现 +export function createElement

( + type: + | string + | InulaElement

+ | ExoticComponent> + | Context<{ store: ReduxStoreHandler; subscription: Subscription }> + | ExoticComponent> + // todo MergedProps 接口? + | OriginalComponent

, + setting?: (P & { children?: InulaNode }) | null, + ...children: InulaNode[] +): InulaElement | InulaElement

{ return buildElement(false, type, setting, children); } - -export function cloneElement(element, setting, ...children) { +//只传入 element,克隆该元素,返回一个新的 InulaElement。 +export function cloneElement

(element: InulaElement

): InulaElement

; +//传入 element 和 setting,克隆元素并覆盖属性。 +export function cloneElement

(element: InulaElement

, setting: Partial

| null): InulaElement

; +//:传入 element、setting 和 children,克隆元素,覆盖属性并指定新的子节点。 +export function cloneElement

( + element: InulaElement

, + setting: Partial

| null, + ...children: InulaNode[] +): InulaElement

; +export function cloneElement

( + element: InulaElement

, + setting?: Partial

| null, + ...children: InulaNode[] +): InulaElement

{ return buildElement(true, element, setting, children); } - // 检测结构体是否为合法的Element export function isValidElement

(element: KVObject | null | undefined): element is InulaElement

{ return !!(element && element.vtype === TYPE_COMMON_ELEMENT); @@ -128,6 +178,5 @@ export function jsx(type, setting, key) { if (setting.key === undefined && key !== undefined) { setting.key = key; } - return buildElement(false, type, setting, []); } diff --git a/packages/inula/src/inulax/adapters/reduxReact.ts b/packages/inula/src/inulax/adapters/reduxReact.ts index 9c150f873513b62af42924eab7ace764a1f58264..984d0924b5e230ecab759e452d3391442731915b 100644 --- a/packages/inula/src/inulax/adapters/reduxReact.ts +++ b/packages/inula/src/inulax/adapters/reduxReact.ts @@ -114,7 +114,7 @@ export type MergePropsP = ( ) => MergedProps; type WrappedComponent = (props: OwnProps & WrapperInnerProps) => ReturnType; -type OriginalComponent = (props: MergedProps) => ReturnType; +export type OriginalComponent = (props: MergedProps) => ReturnType; type Connector = (Component: OriginalComponent) => WrappedComponent; export type ConnectOption = { /** @deprecated */ diff --git a/packages/inula/src/renderer/hooks/HookExternal.ts b/packages/inula/src/renderer/hooks/HookExternal.ts index 44e2dc0474143b1b17f988bbb9c6b8a2e81128db..4c84e21604593efd82d9818ddb0e21295f3484cd 100644 --- a/packages/inula/src/renderer/hooks/HookExternal.ts +++ b/packages/inula/src/renderer/hooks/HookExternal.ts @@ -24,7 +24,7 @@ import { useReducerImpl } from './UseReducerHook'; import { useStateImpl } from './UseStateHook'; import { getNewContext } from '../components/context/Context'; import { getProcessingVNode } from '../GlobalVar'; -import type { MutableRef, RefCallBack, RefObject } from './HookType'; +import type { MutableRef, RefCallBack, RefObject, Trigger } from './HookType'; import type { BasicStateAction, @@ -45,10 +45,11 @@ export function useContext(Context: ContextType | Context): T { export function useState(initialState: (() => S) | S): [S, Dispatch>]; export function useState(): [S | undefined, Dispatch>]; -export function useState(initialState?: (() => S) | S): [S, Dispatch>] { +export function useState( + initialState?: (() => S) | S +): [S | undefined, Trigger<((arg0: S) => S | undefined) | S | undefined>] | void { return useStateImpl(initialState); } - export function useReducer, I>( reducer: R, initialArg: I, diff --git a/packages/inula/src/renderer/vnode/VNodeCreator.ts b/packages/inula/src/renderer/vnode/VNodeCreator.ts index 7cff347875bc3f11eb970ef350fe7ab531e11fe5..2185ab588bf6e7eeab352314fe79776fb4cb8007 100644 --- a/packages/inula/src/renderer/vnode/VNodeCreator.ts +++ b/packages/inula/src/renderer/vnode/VNodeCreator.ts @@ -75,7 +75,7 @@ export function getLazyVNodeTag(lazyComp: any): string { } else if (lazyComp !== undefined && lazyComp !== null && typeLazyMap[lazyComp.vtype]) { return typeLazyMap[lazyComp.vtype]; } - throw Error("Inula can't resolve the content of lazy"); + throw Error('Inula can\'t resolve the content of lazy'); } // 创建processing diff --git a/packages/inula/src/types.ts b/packages/inula/src/types.ts index 67db6d325a872d33b667c02984426b8636e8e5c8..ac029df0d732384de0589410c7b11a0e6f954747 100644 --- a/packages/inula/src/types.ts +++ b/packages/inula/src/types.ts @@ -17,6 +17,7 @@ import { Component } from './renderer/components/BaseClassComponent'; import { MutableRef, RefCallBack, RefObject } from './renderer/hooks/HookType'; import * as Event from './EventTypes'; +//import Element = JSX.Element; // // --------------------------------- Inula Base Types ---------------------------------- @@ -55,12 +56,12 @@ export interface ExoticComponent

{ (props: P): InulaElement | null; } -interface ProviderProps { +export interface ProviderProps { value: T; children?: InulaNode | undefined; } -interface ConsumerProps { +export interface ConsumerProps { children: (value: T) => InulaNode; } @@ -129,7 +130,7 @@ export type RefAttributes = Attributes & { ref?: Ref | null; }; -export type ComponentPropsWithRef = T extends new (props: infer P) => Component +export type ComponentPropsWithRef = T extends new (props: infer P) => Component ? PropsOmitRef

& RefAttributes> : PropsWithRef; @@ -244,6 +245,1041 @@ export type JSXElementConstructor

= | ((props: P) => InulaElement | null) | (new (props: P) => Component); +interface ClassAttributes extends Attributes { + ref: Ref; + key: Key | undefined; + jsx: boolean | undefined; +} +//让其他代码在值发生变化时得到通知 +interface SignalLike { + value: T; + peek(): T; + subscribe(fn: (value: T) => void): () => void; +} +export type Signalish = T | SignalLike; +export interface DOMAttributes { + // Image Events + onLoad?: GenericEventHandler | undefined; + onLoadCapture?: GenericEventHandler | undefined; + onError?: GenericEventHandler | undefined; + onErrorCapture?: GenericEventHandler | undefined; + + // Clipboard Events + onCopy?: ClipboardEventHandler | undefined; + onCopyCapture?: ClipboardEventHandler | undefined; + onCut?: ClipboardEventHandler | undefined; + onCutCapture?: ClipboardEventHandler | undefined; + onPaste?: ClipboardEventHandler | undefined; + onPasteCapture?: ClipboardEventHandler | undefined; + // Composition Events + onCompositionEnd?: CompositionEventHandler | undefined; + onCompositionEndCapture?: CompositionEventHandler | undefined; + onCompositionStart?: CompositionEventHandler | undefined; + onCompositionStartCapture?: CompositionEventHandler | undefined; + onCompositionUpdate?: CompositionEventHandler | undefined; + onCompositionUpdateCapture?: CompositionEventHandler | undefined; + + // Details Events + onToggle?: GenericEventHandler | undefined; + + // Dialog Events + onClose?: GenericEventHandler | undefined; + onCancel?: GenericEventHandler | undefined; + + // Focus Events + onFocus?: FocusEventHandler | undefined; + onFocusCapture?: FocusEventHandler | undefined; + onFocusIn?: FocusEventHandler | undefined; + onFocusInCapture?: FocusEventHandler | undefined; + onFocusOut?: FocusEventHandler | undefined; + onFocusOutCapture?: FocusEventHandler | undefined; + onBlur?: FocusEventHandler | undefined; + onBlurCapture?: FocusEventHandler | undefined; + + // Form Events + onChange?: GenericEventHandler | undefined; + onChangeCapture?: GenericEventHandler | undefined; + onInput?: FormEventHandler | undefined; + onInputCapture?: FormEventHandler | undefined; + onBeforeInput?: FormEventHandler | undefined; + onBeforeInputCapture?: FormEventHandler | undefined; + onSearch?: GenericEventHandler | undefined; + onSearchCapture?: GenericEventHandler | undefined; + onSubmit?: FormEventHandler | undefined; + onSubmitCapture?: FormEventHandler | undefined; + onInvalid?: GenericEventHandler | undefined; + onInvalidCapture?: GenericEventHandler | undefined; + onReset?: GenericEventHandler | undefined; + onResetCapture?: GenericEventHandler | undefined; + onFormData?: GenericEventHandler | undefined; + onFormDataCapture?: GenericEventHandler | undefined; + + // Keyboard Events + onKeyDown?: KeyboardEventHandler | undefined; + onKeyDownCapture?: KeyboardEventHandler | undefined; + onKeyPress?: KeyboardEventHandler | undefined; + onKeyPressCapture?: KeyboardEventHandler | undefined; + onKeyUp?: KeyboardEventHandler | undefined; + onKeyUpCapture?: KeyboardEventHandler | undefined; + + // Media Events + onAbort?: GenericEventHandler | undefined; + onAbortCapture?: GenericEventHandler | undefined; + onCanPlay?: GenericEventHandler | undefined; + onCanPlayCapture?: GenericEventHandler | undefined; + onCanPlayThrough?: GenericEventHandler | undefined; + onCanPlayThroughCapture?: GenericEventHandler | undefined; + onDurationChange?: GenericEventHandler | undefined; + onDurationChangeCapture?: GenericEventHandler | undefined; + onEmptied?: GenericEventHandler | undefined; + onEmptiedCapture?: GenericEventHandler | undefined; + onEncrypted?: GenericEventHandler | undefined; + onEncryptedCapture?: GenericEventHandler | undefined; + onEnded?: GenericEventHandler | undefined; + onEndedCapture?: GenericEventHandler | undefined; + onLoadedData?: GenericEventHandler | undefined; + onLoadedDataCapture?: GenericEventHandler | undefined; + onLoadedMetadata?: GenericEventHandler | undefined; + onLoadedMetadataCapture?: GenericEventHandler | undefined; + onLoadStart?: GenericEventHandler | undefined; + onLoadStartCapture?: GenericEventHandler | undefined; + onPause?: GenericEventHandler | undefined; + onPauseCapture?: GenericEventHandler | undefined; + onPlay?: GenericEventHandler | undefined; + onPlayCapture?: GenericEventHandler | undefined; + onPlaying?: GenericEventHandler | undefined; + onPlayingCapture?: GenericEventHandler | undefined; + onProgress?: GenericEventHandler | undefined; + onProgressCapture?: GenericEventHandler | undefined; + onRateChange?: GenericEventHandler | undefined; + onRateChangeCapture?: GenericEventHandler | undefined; + onSeeked?: GenericEventHandler | undefined; + onSeekedCapture?: GenericEventHandler | undefined; + onSeeking?: GenericEventHandler | undefined; + onSeekingCapture?: GenericEventHandler | undefined; + onStalled?: GenericEventHandler | undefined; + onStalledCapture?: GenericEventHandler | undefined; + onSuspend?: GenericEventHandler | undefined; + onSuspendCapture?: GenericEventHandler | undefined; + onTimeUpdate?: GenericEventHandler | undefined; + onTimeUpdateCapture?: GenericEventHandler | undefined; + onVolumeChange?: GenericEventHandler | undefined; + onVolumeChangeCapture?: GenericEventHandler | undefined; + onWaiting?: GenericEventHandler | undefined; + onWaitingCapture?: GenericEventHandler | undefined; + + // MouseEvents + onClick?: MouseEventHandler | undefined; + onClickCapture?: MouseEventHandler | undefined; + onContextMenu?: MouseEventHandler | undefined; + onContextMenuCapture?: MouseEventHandler | undefined; + onDblClick?: MouseEventHandler | undefined; + onDblClickCapture?: MouseEventHandler | undefined; + onDrag?: DragEventHandler | undefined; + onDragCapture?: DragEventHandler | undefined; + onDragEnd?: DragEventHandler | undefined; + onDragEndCapture?: DragEventHandler | undefined; + onDragEnter?: DragEventHandler | undefined; + onDragEnterCapture?: DragEventHandler | undefined; + onDragExit?: DragEventHandler | undefined; + onDragExitCapture?: DragEventHandler | undefined; + onDragLeave?: DragEventHandler | undefined; + onDragLeaveCapture?: DragEventHandler | undefined; + onDragOver?: DragEventHandler | undefined; + onDragOverCapture?: DragEventHandler | undefined; + onDragStart?: DragEventHandler | undefined; + onDragStartCapture?: DragEventHandler | undefined; + onDrop?: DragEventHandler | undefined; + onDropCapture?: DragEventHandler | undefined; + onMouseDown?: MouseEventHandler | undefined; + onMouseDownCapture?: MouseEventHandler | undefined; + onMouseEnter?: MouseEventHandler | undefined; + onMouseEnterCapture?: MouseEventHandler | undefined; + onMouseLeave?: MouseEventHandler | undefined; + onMouseLeaveCapture?: MouseEventHandler | undefined; + onMouseMove?: MouseEventHandler | undefined; + onMouseMoveCapture?: MouseEventHandler | undefined; + onMouseOut?: MouseEventHandler | undefined; + onMouseOutCapture?: MouseEventHandler | undefined; + onMouseOver?: MouseEventHandler | undefined; + onMouseOverCapture?: MouseEventHandler | undefined; + onMouseUp?: MouseEventHandler | undefined; + onMouseUpCapture?: MouseEventHandler | undefined; + + // Selection Events + onSelect?: GenericEventHandler | undefined; + onSelectCapture?: GenericEventHandler | undefined; + + // Touch Events + onTouchCancel?: TouchEventHandler | undefined; + onTouchCancelCapture?: TouchEventHandler | undefined; + onTouchEnd?: TouchEventHandler | undefined; + onTouchEndCapture?: TouchEventHandler | undefined; + onTouchMove?: TouchEventHandler | undefined; + onTouchMoveCapture?: TouchEventHandler | undefined; + onTouchStart?: TouchEventHandler | undefined; + onTouchStartCapture?: TouchEventHandler | undefined; + + // Pointer Events + onPointerOver?: PointerEventHandler | undefined; + onPointerOverCapture?: PointerEventHandler | undefined; + onPointerEnter?: PointerEventHandler | undefined; + onPointerEnterCapture?: PointerEventHandler | undefined; + onPointerDown?: PointerEventHandler | undefined; + onPointerDownCapture?: PointerEventHandler | undefined; + onPointerMove?: PointerEventHandler | undefined; + onPointerMoveCapture?: PointerEventHandler | undefined; + onPointerUp?: PointerEventHandler | undefined; + onPointerUpCapture?: PointerEventHandler | undefined; + onPointerCancel?: PointerEventHandler | undefined; + onPointerCancelCapture?: PointerEventHandler | undefined; + onPointerOut?: PointerEventHandler | undefined; + onPointerOutCapture?: PointerEventHandler | undefined; + onPointerLeave?: PointerEventHandler | undefined; + onPointerLeaveCapture?: PointerEventHandler | undefined; + onGotPointerCapture?: PointerEventHandler | undefined; + onGotPointerCaptureCapture?: PointerEventHandler | undefined; + onLostPointerCapture?: PointerEventHandler | undefined; + onLostPointerCaptureCapture?: PointerEventHandler | undefined; + + // UI Events + onScroll?: UIEventHandler | undefined; + onScrollEnd?: UIEventHandler | undefined; + onScrollCapture?: UIEventHandler | undefined; + + // Wheel Events + onWheel?: WheelEventHandler | undefined; + onWheelCapture?: WheelEventHandler | undefined; + + // Animation Events + onAnimationStart?: AnimationEventHandler | undefined; + onAnimationStartCapture?: AnimationEventHandler | undefined; + onAnimationEnd?: AnimationEventHandler | undefined; + onAnimationEndCapture?: AnimationEventHandler | undefined; + onAnimationIteration?: AnimationEventHandler | undefined; + onAnimationIterationCapture?: AnimationEventHandler | undefined; + + // Transition Events + onTransitionCancel?: TransitionEventHandler; + onTransitionCancelCapture?: TransitionEventHandler; + onTransitionEnd?: TransitionEventHandler; + onTransitionEndCapture?: TransitionEventHandler; + onTransitionRun?: TransitionEventHandler; + onTransitionRunCapture?: TransitionEventHandler; + onTransitionStart?: TransitionEventHandler; + onTransitionStartCapture?: TransitionEventHandler; + + // PictureInPicture Events + onEnterPictureInPicture?: ChangeEventHandler; + onEnterPictureInPictureCapture?: ChangeEventHandler; + onLeavePictureInPicture?: ChangeEventHandler; + onLeavePictureInPictureCapture?: ChangeEventHandler; + onResize?: ChangeEventHandler; + onResizeCapture?: ChangeEventHandler; +} + +export interface AriaAttributes { + /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ + 'aria-activedescendant'?: Signalish; + /** Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. */ + 'aria-atomic'?: Signalish; + /** + * Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be + * presented if they are made. + */ + 'aria-autocomplete'?: Signalish<'none' | 'inline' | 'list' | 'both' | undefined>; + /** + * Defines a string value that labels the current element, which is intended to be converted into Braille. + * @see aria-label. + */ + 'aria-braillelabel'?: Signalish; + /** + * Defines a human-readable, author-localized abbreviated description for the role of an element, which is intended to be converted into Braille. + * @see aria-roledescription. + */ + 'aria-brailleroledescription'?: Signalish; + /** Indicates an element is being modified and that assistive technologies MAY want to wait until the modifications are complete before exposing them to the user. */ + 'aria-busy'?: Signalish; + /** + * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. + * @see aria-pressed + * @see aria-selected. + */ + 'aria-checked'?: Signalish; + /** + * Defines the total number of columns in a table, grid, or treegrid. + * @see aria-colindex. + */ + 'aria-colcount'?: Signalish; + /** + * Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid. + * @see aria-colcount + * @see aria-colspan. + */ + 'aria-colindex'?: Signalish; + /** + * Defines a human readable text alternative of aria-colindex. + * @see aria-rowindextext. + */ + 'aria-colindextext'?: Signalish; + /** + * Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid. + * @see aria-colindex + * @see aria-rowspan. + */ + 'aria-colspan'?: Signalish; + /** + * Identifies the element (or elements) whose contents or presence are controlled by the current element. + * @see aria-owns. + */ + 'aria-controls'?: Signalish; + /** Indicates the element that represents the current item within a container or set of related elements. */ + 'aria-current'?: Signalish; + /** + * Identifies the element (or elements) that describes the object. + * @see aria-labelledby + */ + 'aria-describedby'?: Signalish; + /** + * Defines a string value that describes or annotates the current element. + * @see related aria-describedby. + */ + 'aria-description'?: Signalish; + /** + * Identifies the element that provides a detailed, extended description for the object. + * @see aria-describedby. + */ + 'aria-details'?: Signalish; + /** + * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. + * @see aria-hidden + * @see aria-readonly. + */ + 'aria-disabled'?: Signalish; + /** + * Indicates what functions can be performed when a dragged object is released on the drop target. + * @deprecated in ARIA 1.1 + */ + 'aria-dropeffect'?: Signalish<'none' | 'copy' | 'execute' | 'link' | 'move' | 'popup' | undefined>; + /** + * Identifies the element that provides an error message for the object. + * @see aria-invalid + * @see aria-describedby. + */ + 'aria-errormessage'?: Signalish; + /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ + 'aria-expanded'?: Signalish; + /** + * Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion, + * allows assistive technology to override the general default of reading in document source order. + */ + 'aria-flowto'?: Signalish; + /** + * Indicates an element's "grabbed" state in a drag-and-drop operation. + * @deprecated in ARIA 1.1 + */ + 'aria-grabbed'?: Signalish; + /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */ + 'aria-haspopup'?: Signalish; + /** + * Indicates whether the element is exposed to an accessibility API. + * @see aria-disabled. + */ + 'aria-hidden'?: Signalish; + /** + * Indicates the entered value does not conform to the format expected by the application. + * @see aria-errormessage. + */ + 'aria-invalid'?: Signalish; + /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ + 'aria-keyshortcuts'?: Signalish; + /** + * Defines a string value that labels the current element. + * @see aria-labelledby. + */ + 'aria-label'?: Signalish; + /** + * Identifies the element (or elements) that labels the current element. + * @see aria-describedby. + */ + 'aria-labelledby'?: Signalish; + /** Defines the hierarchical level of an element within a structure. */ + 'aria-level'?: Signalish; + /** Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. */ + 'aria-live'?: Signalish<'off' | 'assertive' | 'polite' | undefined>; + /** Indicates whether an element is modal when displayed. */ + 'aria-modal'?: Signalish; + /** Indicates whether a text box accepts multiple lines of input or only a single line. */ + 'aria-multiline'?: Signalish; + /** Indicates that the user may select more than one item from the current selectable descendants. */ + 'aria-multiselectable'?: Signalish; + /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ + 'aria-orientation'?: Signalish<'horizontal' | 'vertical' | undefined>; + /** + * Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship + * between DOM elements where the DOM hierarchy cannot be used to represent the relationship. + * @see aria-controls. + */ + 'aria-owns'?: Signalish; + /** + * Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value. + * A hint could be a sample value or a brief description of the expected format. + */ + 'aria-placeholder'?: Signalish; + /** + * Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. + * @see aria-setsize. + */ + 'aria-posinset'?: Signalish; + /** + * Indicates the current "pressed" state of toggle buttons. + * @see aria-checked + * @see aria-selected. + */ + 'aria-pressed'?: Signalish; + /** + * Indicates that the element is not editable, but is otherwise operable. + * @see aria-disabled. + */ + 'aria-readonly'?: Signalish; + /** + * Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified. + * @see aria-atomic. + */ + 'aria-relevant'?: Signalish< + | 'additions' + | 'additions removals' + | 'additions text' + | 'all' + | 'removals' + | 'removals additions' + | 'removals text' + | 'text' + | 'text additions' + | 'text removals' + | undefined + >; + /** Indicates that user input is required on the element before a form may be submitted. */ + 'aria-required'?: Signalish; + /** Defines a human-readable, author-localized description for the role of an element. */ + 'aria-roledescription'?: Signalish; + /** + * Defines the total number of rows in a table, grid, or treegrid. + * @see aria-rowindex. + */ + 'aria-rowcount'?: Signalish; + /** + * Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid. + * @see aria-rowcount + * @see aria-rowspan. + */ + 'aria-rowindex'?: Signalish; + /** + * Defines a human readable text alternative of aria-rowindex. + * @see aria-colindextext. + */ + 'aria-rowindextext'?: Signalish; + /** + * Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid. + * @see aria-rowindex + * @see aria-colspan. + */ + 'aria-rowspan'?: Signalish; + /** + * Indicates the current "selected" state of various widgets. + * @see aria-checked + * @see aria-pressed. + */ + 'aria-selected'?: Signalish; + /** + * Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. + * @see aria-posinset. + */ + 'aria-setsize'?: Signalish; + /** Indicates if items in a table or grid are sorted in ascending or descending order. */ + 'aria-sort'?: Signalish<'none' | 'ascending' | 'descending' | 'other' | undefined>; + /** Defines the maximum allowed value for a range widget. */ + 'aria-valuemax'?: Signalish; + /** Defines the minimum allowed value for a range widget. */ + 'aria-valuemin'?: Signalish; + /** + * Defines the current value for a range widget. + * @see aria-valuetext. + */ + 'aria-valuenow'?: Signalish; + /** Defines the human readable text alternative of aria-valuenow for a range widget. */ + 'aria-valuetext'?: Signalish; +} +// All the WAI-ARIA 1.2 role attribute values from https://www.w3.org/TR/wai-aria-1.2/#role_definitions +type WAIAriaRole = + | 'alert' + | 'alertdialog' + | 'application' + | 'article' + | 'banner' + | 'blockquote' + | 'button' + | 'caption' + | 'cell' + | 'checkbox' + | 'code' + | 'columnheader' + | 'combobox' + | 'command' + | 'complementary' + | 'composite' + | 'contentinfo' + | 'definition' + | 'deletion' + | 'dialog' + | 'directory' + | 'document' + | 'emphasis' + | 'feed' + | 'figure' + | 'form' + | 'generic' + | 'grid' + | 'gridcell' + | 'group' + | 'heading' + | 'img' + | 'input' + | 'insertion' + | 'landmark' + | 'link' + | 'list' + | 'listbox' + | 'listitem' + | 'log' + | 'main' + | 'marquee' + | 'math' + | 'meter' + | 'menu' + | 'menubar' + | 'menuitem' + | 'menuitemcheckbox' + | 'menuitemradio' + | 'navigation' + | 'none' + | 'note' + | 'option' + | 'paragraph' + | 'presentation' + | 'progressbar' + | 'radio' + | 'radiogroup' + | 'range' + | 'region' + | 'roletype' + | 'row' + | 'rowgroup' + | 'rowheader' + | 'scrollbar' + | 'search' + | 'searchbox' + | 'section' + | 'sectionhead' + | 'select' + | 'separator' + | 'slider' + | 'spinbutton' + | 'status' + | 'strong' + | 'structure' + | 'subscript' + | 'superscript' + | 'switch' + | 'tab' + | 'table' + | 'tablist' + | 'tabpanel' + | 'term' + | 'textbox' + | 'time' + | 'timer' + | 'toolbar' + | 'tooltip' + | 'tree' + | 'treegrid' + | 'treeitem' + | 'widget' + | 'window' + | 'none presentation'; + +// All the Digital Publishing WAI-ARIA 1.0 role attribute values from https://www.w3.org/TR/dpub-aria-1.0/#role_definitions +type DPubAriaRole = + | 'doc-abstract' + | 'doc-acknowledgments' + | 'doc-afterword' + | 'doc-appendix' + | 'doc-backlink' + | 'doc-biblioentry' + | 'doc-bibliography' + | 'doc-biblioref' + | 'doc-chapter' + | 'doc-colophon' + | 'doc-conclusion' + | 'doc-cover' + | 'doc-credit' + | 'doc-credits' + | 'doc-dedication' + | 'doc-endnote' + | 'doc-endnotes' + | 'doc-epigraph' + | 'doc-epilogue' + | 'doc-errata' + | 'doc-example' + | 'doc-footnote' + | 'doc-foreword' + | 'doc-glossary' + | 'doc-glossref' + | 'doc-index' + | 'doc-introduction' + | 'doc-noteref' + | 'doc-notice' + | 'doc-pagebreak' + | 'doc-pagelist' + | 'doc-part' + | 'doc-preface' + | 'doc-prologue' + | 'doc-pullquote' + | 'doc-qna' + | 'doc-subtitle' + | 'doc-tip' + | 'doc-toc'; +//用于处理HTML 属性或其他需要接受布尔值或布尔字符串的地方特别有用 +type Booleanish = boolean | 'true' | 'false'; +type AriaRole = WAIAriaRole | DPubAriaRole; +export interface HTMLAttributes + extends ClassAttributes, + DOMAttributes, + AriaAttributes { + // Standard HTML Attributes + accept?: string | undefined | SignalLike; + acceptCharset?: string | undefined | SignalLike; + 'accept-charset'?: HTMLAttributes['acceptCharset']; + accessKey?: string | undefined | SignalLike; + accesskey?: HTMLAttributes['accessKey']; + action?: string | undefined | SignalLike; + allow?: string | undefined | SignalLike; + allowFullScreen?: boolean | undefined | SignalLike; + allowTransparency?: boolean | undefined | SignalLike; + alt?: string | undefined | SignalLike; + as?: string | undefined | SignalLike; + async?: boolean | undefined | SignalLike; + autocomplete?: string | undefined | SignalLike; + autoComplete?: string | undefined | SignalLike; + autocorrect?: string | undefined | SignalLike; + autoCorrect?: string | undefined | SignalLike; + autofocus?: boolean | undefined | SignalLike; + autoFocus?: boolean | undefined | SignalLike; + autoPlay?: boolean | undefined | SignalLike; + autoplay?: boolean | undefined | SignalLike; + capture?: boolean | string | undefined | SignalLike; + cellPadding?: number | string | undefined | SignalLike; + cellSpacing?: number | string | undefined | SignalLike; + charSet?: string | undefined | SignalLike; + charset?: string | undefined | SignalLike; + challenge?: string | undefined | SignalLike; + checked?: boolean | undefined | SignalLike; + cite?: string | undefined | SignalLike; + class?: string | undefined | SignalLike; + className?: string | undefined | SignalLike; + cols?: number | undefined | SignalLike; + colSpan?: number | undefined | SignalLike; + colspan?: number | undefined | SignalLike; + content?: string | undefined | SignalLike; + contentEditable?: + | Booleanish + | '' + | 'plaintext-only' + | 'inherit' + | undefined + | SignalLike; + contenteditable?: HTMLAttributes['contentEditable']; + /** @deprecated See https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contextmenu */ + contextMenu?: string | undefined | SignalLike; + /** @deprecated See https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contextmenu */ + contextmenu?: string | undefined | SignalLike; + controls?: boolean | undefined | SignalLike; + controlsList?: string | undefined | SignalLike; + coords?: string | undefined | SignalLike; + crossOrigin?: string | undefined | SignalLike; + crossorigin?: string | undefined | SignalLike; + data?: string | undefined | SignalLike; + dateTime?: string | undefined | SignalLike; + datetime?: string | undefined | SignalLike; + default?: boolean | undefined | SignalLike; + defaultChecked?: boolean | undefined | SignalLike; + defaultValue?: string | undefined | SignalLike; + defer?: boolean | undefined | SignalLike; + dir?: 'auto' | 'rtl' | 'ltr' | undefined | SignalLike<'auto' | 'rtl' | 'ltr' | undefined>; + disabled?: boolean | undefined | SignalLike; + disableRemotePlayback?: boolean | undefined | SignalLike; + download?: any | undefined; + decoding?: 'sync' | 'async' | 'auto' | undefined | SignalLike<'sync' | 'async' | 'auto' | undefined>; + draggable?: boolean | undefined | SignalLike; + encType?: string | undefined | SignalLike; + enctype?: string | undefined | SignalLike; + enterkeyhint?: + | 'enter' + | 'done' + | 'go' + | 'next' + | 'previous' + | 'search' + | 'send' + | undefined + | SignalLike<'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send' | undefined>; + elementTiming?: string | undefined | SignalLike; + elementtiming?: HTMLAttributes['elementTiming']; + exportparts?: string | undefined | SignalLike; + for?: string | undefined | SignalLike; + form?: string | undefined | SignalLike; + formAction?: string | undefined | SignalLike; + formaction?: string | undefined | SignalLike; + formEncType?: string | undefined | SignalLike; + formenctype?: string | undefined | SignalLike; + formMethod?: string | undefined | SignalLike; + formmethod?: string | undefined | SignalLike; + formNoValidate?: boolean | undefined | SignalLike; + formnovalidate?: boolean | undefined | SignalLike; + formTarget?: string | undefined | SignalLike; + formtarget?: string | undefined | SignalLike; + frameBorder?: number | string | undefined | SignalLike; + frameborder?: number | string | undefined | SignalLike; + headers?: string | undefined | SignalLike; + height?: number | string | undefined | SignalLike; + hidden?: boolean | 'hidden' | 'until-found' | undefined | SignalLike; + high?: number | undefined | SignalLike; + href?: string | undefined | SignalLike; + hrefLang?: string | undefined | SignalLike; + hreflang?: string | undefined | SignalLike; + htmlFor?: string | undefined | SignalLike; + httpEquiv?: string | undefined | SignalLike; + 'http-equiv'?: string | undefined | SignalLike; + icon?: string | undefined | SignalLike; + id?: string | undefined | SignalLike; + indeterminate?: boolean | undefined | SignalLike; + inert?: boolean | undefined | SignalLike; + inputMode?: string | undefined | SignalLike; + inputmode?: string | undefined | SignalLike; + integrity?: string | undefined | SignalLike; + is?: string | undefined | SignalLike; + keyParams?: string | undefined | SignalLike; + keyType?: string | undefined | SignalLike; + kind?: string | undefined | SignalLike; + label?: string | undefined | SignalLike; + lang?: string | undefined | SignalLike; + list?: string | undefined | SignalLike; + loading?: 'eager' | 'lazy' | undefined | SignalLike<'eager' | 'lazy' | undefined>; + loop?: boolean | undefined | SignalLike; + low?: number | undefined | SignalLike; + manifest?: string | undefined | SignalLike; + marginHeight?: number | undefined | SignalLike; + marginWidth?: number | undefined | SignalLike; + max?: number | string | undefined | SignalLike; + maxLength?: number | undefined | SignalLike; + maxlength?: number | undefined | SignalLike; + media?: string | undefined | SignalLike; + mediaGroup?: string | undefined | SignalLike; + method?: string | undefined | SignalLike; + min?: number | string | undefined | SignalLike; + minLength?: number | undefined | SignalLike; + minlength?: number | undefined | SignalLike; + multiple?: boolean | undefined | SignalLike; + muted?: boolean | undefined | SignalLike; + name?: string | undefined | SignalLike; + nomodule?: boolean | undefined | SignalLike; + nonce?: string | undefined | SignalLike; + noValidate?: boolean | undefined | SignalLike; + novalidate?: boolean | undefined | SignalLike; + open?: boolean | undefined | SignalLike; + optimum?: number | undefined | SignalLike; + part?: string | undefined | SignalLike; + pattern?: string | undefined | SignalLike; + ping?: string | undefined | SignalLike; + placeholder?: string | undefined | SignalLike; + playsInline?: boolean | undefined | SignalLike; + playsinline?: boolean | undefined | SignalLike; + popover?: + | 'auto' + | 'hint' + | 'manual' + | boolean + | undefined + | SignalLike<'auto' | 'hint' | 'manual' | boolean | undefined>; + popovertarget?: string | undefined | SignalLike; + popoverTarget?: string | undefined | SignalLike; + popovertargetaction?: 'hide' | 'show' | 'toggle' | undefined | SignalLike<'hide' | 'show' | 'toggle' | undefined>; + popoverTargetAction?: 'hide' | 'show' | 'toggle' | undefined | SignalLike<'hide' | 'show' | 'toggle' | undefined>; + poster?: string | undefined | SignalLike; + preload?: string | undefined | SignalLike; + radioGroup?: string | undefined | SignalLike; + readonly?: boolean | undefined | SignalLike; + readOnly?: boolean | undefined | SignalLike; + referrerpolicy?: + | 'no-referrer' + | 'no-referrer-when-downgrade' + | 'origin' + | 'origin-when-cross-origin' + | 'same-origin' + | 'strict-origin' + | 'strict-origin-when-cross-origin' + | 'unsafe-url' + | undefined + | SignalLike< + | 'no-referrer' + | 'no-referrer-when-downgrade' + | 'origin' + | 'origin-when-cross-origin' + | 'same-origin' + | 'strict-origin' + | 'strict-origin-when-cross-origin' + | 'unsafe-url' + | undefined + >; + rel?: string | undefined | SignalLike; + required?: boolean | undefined | SignalLike; + reversed?: boolean | undefined | SignalLike; + role?: AriaRole | undefined | SignalLike; + rows?: number | undefined | SignalLike; + rowSpan?: number | undefined | SignalLike; + rowspan?: number | undefined | SignalLike; + sandbox?: string | undefined | SignalLike; + scope?: string | undefined | SignalLike; + scoped?: boolean | undefined | SignalLike; + scrolling?: string | undefined | SignalLike; + seamless?: boolean | undefined | SignalLike; + selected?: boolean | undefined | SignalLike; + shape?: string | undefined | SignalLike; + size?: number | undefined | SignalLike; + sizes?: string | undefined | SignalLike; + slot?: string | undefined | SignalLike; + span?: number | undefined | SignalLike; + spellcheck?: boolean | undefined | SignalLike; + spellCheck?: boolean | undefined | SignalLike; + src?: string | undefined | SignalLike; + srcSet?: string | undefined | SignalLike; + srcset?: string | undefined | SignalLike; + srcDoc?: string | undefined | SignalLike; + srcdoc?: string | undefined | SignalLike; + srcLang?: string | undefined | SignalLike; + srclang?: string | undefined | SignalLike; + start?: number | undefined | SignalLike; + step?: number | string | undefined | SignalLike; + style?: string | CSSProperties | undefined | SignalLike; + summary?: string | undefined | SignalLike; + tabIndex?: number | undefined | SignalLike; + tabindex?: number | undefined | SignalLike; + target?: string | undefined | SignalLike; + title?: string | undefined | SignalLike; + type?: string | undefined | SignalLike; + useMap?: string | undefined | SignalLike; + usemap?: string | undefined | SignalLike; + value?: string | string[] | number | undefined | SignalLike; + volume?: string | number | undefined | SignalLike; + width?: number | string | undefined | SignalLike; + wmode?: string | undefined | SignalLike; + wrap?: string | undefined | SignalLike; + + // Non-standard Attributes + autocapitalize?: + | 'off' + | 'none' + | 'on' + | 'sentences' + | 'words' + | 'characters' + | undefined + | SignalLike<'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters' | undefined>; + autoCapitalize?: + | 'off' + | 'none' + | 'on' + | 'sentences' + | 'words' + | 'characters' + | undefined + | SignalLike<'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters' | undefined>; + disablePictureInPicture?: boolean | undefined | SignalLike; + results?: number | undefined | SignalLike; + translate?: boolean | undefined | SignalLike; + + // RDFa Attributes + about?: string | undefined | SignalLike; + datatype?: string | undefined | SignalLike; + inlist?: any; + prefix?: string | undefined | SignalLike; + property?: string | undefined | SignalLike; + resource?: string | undefined | SignalLike; + typeof?: string | undefined | SignalLike; + vocab?: string | undefined | SignalLike; + + // Microdata Attributes + itemProp?: string | undefined | SignalLike; + itemprop?: string | undefined | SignalLike; + itemScope?: boolean | undefined | SignalLike; + itemscope?: boolean | undefined | SignalLike; + itemType?: string | undefined | SignalLike; + itemtype?: string | undefined | SignalLike; + itemID?: string | undefined | SignalLike; + itemid?: string | undefined | SignalLike; + itemRef?: string | undefined | SignalLike; + itemref?: string | undefined | SignalLike; +} + +// eslint-disable-next-line @typescript-eslint/no-namespace +export declare namespace JSX { + // JSX内在元素的接口,该接口下声明了JSX中的内置标签及其具有的属性,如标签和标签的value属性 + export interface IntrinsicElements { + // HTML + a: HTMLAttributes; + abbr: HTMLAttributes; + address: HTMLAttributes; + area: HTMLAttributes; + article: HTMLAttributes; + aside: HTMLAttributes; + audio: HTMLAttributes; + b: HTMLAttributes; + base: HTMLAttributes; + bdi: HTMLAttributes; + bdo: HTMLAttributes; + big: HTMLAttributes; + blockquote: HTMLAttributes; + body: HTMLAttributes; + br: HTMLAttributes; + button: HTMLAttributes; + canvas: HTMLAttributes; + caption: HTMLAttributes; + cite: HTMLAttributes; + code: HTMLAttributes; + col: HTMLAttributes; + colgroup: HTMLAttributes; + data: HTMLAttributes; + datalist: HTMLAttributes; + dd: HTMLAttributes; + del: HTMLAttributes; + details: HTMLAttributes; + dfn: HTMLAttributes; + dialog: HTMLAttributes; + div: HTMLAttributes; + dl: HTMLAttributes; + dt: HTMLAttributes; + em: HTMLAttributes; + embed: HTMLAttributes; + fieldset: HTMLAttributes; + figcaption: HTMLAttributes; + figure: HTMLAttributes; + footer: HTMLAttributes; + form: HTMLAttributes; + h1: HTMLAttributes; + h2: HTMLAttributes; + h3: HTMLAttributes; + h4: HTMLAttributes; + h5: HTMLAttributes; + h6: HTMLAttributes; + head: HTMLAttributes; + header: HTMLAttributes; + hgroup: HTMLAttributes; + hr: HTMLAttributes; + html: HTMLAttributes; + i: HTMLAttributes; + iframe: HTMLAttributes; + img: HTMLAttributes; + input: HTMLAttributes; + ins: HTMLAttributes; + kbd: HTMLAttributes; + keygen: HTMLAttributes; + label: HTMLAttributes; + legend: HTMLAttributes; + li: HTMLAttributes; + link: HTMLAttributes; + main: HTMLAttributes; + map: HTMLAttributes; + mark: HTMLAttributes; + menu: HTMLAttributes; + menuitem: HTMLAttributes; + meta: HTMLAttributes; + meter: HTMLAttributes; + nav: HTMLAttributes; + noscript: HTMLAttributes; + object: HTMLAttributes; + ol: HTMLAttributes; + optgroup: HTMLAttributes; + option: HTMLAttributes; + output: HTMLAttributes; + p: HTMLAttributes; + picture: HTMLAttributes; + pre: HTMLAttributes; + progress: HTMLAttributes; + q: HTMLAttributes; + rp: HTMLAttributes; + rt: HTMLAttributes; + ruby: HTMLAttributes; + s: HTMLAttributes; + samp: HTMLAttributes; + script: HTMLAttributes; + search: HTMLAttributes; + section: HTMLAttributes; + select: HTMLAttributes; + slot: HTMLAttributes; + small: HTMLAttributes; + source: HTMLAttributes; + span: HTMLAttributes; + strong: HTMLAttributes; + style: HTMLAttributes; + sub: HTMLAttributes; + summary: HTMLAttributes; + sup: HTMLAttributes; + table: HTMLAttributes; + tbody: HTMLAttributes; + td: HTMLAttributes; + template: HTMLAttributes; + textarea: HTMLAttributes; + tfoot: HTMLAttributes; + th: HTMLAttributes; + thead: HTMLAttributes; + time: HTMLAttributes; + title: HTMLAttributes; + tr: HTMLAttributes; + track: HTMLAttributes; + u: HTMLAttributes; + ul: HTMLAttributes; + var: HTMLAttributes; + video: HTMLAttributes; + wbr: HTMLAttributes; + } + // 该接口声明了类组件中具有的属性 + interface IntrinsicClassAttributes { + ref: Ref; + key: any; + } + // 该接口声明了函数式组建中具有的属性 + interface IntrinsicAttributes { + key: any; + ref: Ref; + } + // 该接口声明了JSX中组件的元素、属性和子元素的类型 + export interface Element { + type?: any; + props?: any; + key?: any; + } + // 该接口定义了类组件所具有的属性、方法 + interface ElementClass { + setState(state: any, callback: () => void): void; + forceUpdate(callback: () => void): void; + render(): any; + } + // 该接口用于确定组件props中子元素的名称 + interface ElementChildrenAttribute { + children?: any; + } +} + // // --------------------------------- Inula Event Types---------------------------------- // @@ -409,7 +1445,12 @@ export interface MouseEvent extends UIEven // export type EventHandler> = { bivarianceHack(event: E): void }['bivarianceHack']; - +export type TargetedEvent = Omit< + TypedEvent, + 'currentTarget' +> & { + readonly currentTarget: Target; +}; export type ClipboardEventHandler = EventHandler>; export type CompositionEventHandler = EventHandler>; export type DragEventHandler = EventHandler>; @@ -424,7 +1465,7 @@ export type UIEventHandler = EventHandler>; export type WheelEventHandler = EventHandler>; export type AnimationEventHandler = EventHandler>; export type TransitionEventHandler = EventHandler>; - +type GenericEventHandler = (event: TargetedEvent) => void; // // --------------------------------- Css Props---------------------------------- //